/*! Copyright (c) 2026 InfoBeans | infobeans.ai | @InfoBeans */
@charset "UTF-8";
/**
 * Components
 */
/**
 * Components
 */
@media (max-width: 768px) {
  .ib-desktop-only {
    display: none !important;
  }
}
@media (min-width: 769px) {
  .ib-mobile-only {
    display: none !important;
  }
}
@media (max-width: 768px) and (prefers-reduced-motion: no-preference) {
  .ib-m-reveal {
    opacity: 0;
    transform: translate3d(0, 24px, 0);
    transition: opacity 0.55s cubic-bezier(0.25, 0.46, 0.45, 0.94), transform 0.55s cubic-bezier(0.25, 0.46, 0.45, 0.94);
    transition-delay: var(--ib-m-reveal-delay, 0s);
    will-change: transform, opacity;
  }

  .ib-m-reveal.is-visible {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}
@keyframes ib-arrow-slide {
  0% {
    transform: translateX(0);
    opacity: 1;
  }
  45% {
    transform: translateX(7px);
    opacity: 0;
  }
  46% {
    transform: translateX(-5px);
    opacity: 0;
  }
  100% {
    transform: translateX(0);
    opacity: 1;
  }
}
.ib-btn {
  --_bg: #ea1b3d;
  --_bg-press: #aa142d;
  --_color: #fff;
  --_border: transparent;
  --_shadow: #ffd0d8;
  position: relative;
  display: inline-flex;
  align-items: stretch;
  height: 48px;
  padding: 0;
  font-family: var(--font-heading);
  font-size: 16px;
  font-weight: 500;
  line-height: 1;
  background: transparent;
  border: none !important;
  outline: none;
  cursor: pointer;
  text-decoration: none;
  white-space: nowrap;
  -webkit-user-select: none;
     -moz-user-select: none;
          user-select: none;
}

.ib-btn::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: var(--_shadow);
  clip-path: polygon(10px 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%, 0 10px);
  opacity: 0;
  transform: translate(0, 0);
  transition: opacity 0.25s cubic-bezier(0.16, 1, 0.3, 1), transform 0.25s cubic-bezier(0.16, 1, 0.3, 1);
  pointer-events: none;
}

.ib-btn__inner {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  box-sizing: border-box;
  width: 100%;
  height: 100%;
  padding: 0 22px;
  color: var(--_color);
  background: var(--_bg);
  line-height: 26px;
  letter-spacing: 0;
  text-align: center;
  text-transform: uppercase;
  clip-path: polygon(10px 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%, 0 10px);
  transition: background 0.25s cubic-bezier(0.16, 1, 0.3, 1), color 0.25s cubic-bezier(0.16, 1, 0.3, 1);
}

.ib-btn__inner::before {
  content: "";
  position: absolute;
  inset: 0;
  background: var(--_border);
  clip-path: polygon(10px 0, 100% 0, 100% calc(100% - 10px), calc(100% - 10px) 100%, 0 100%, 0 10px, 10px 0, 10px 1.5px, 1.5px 10px, 1.5px calc(100% - 1.5px), calc(100% - 10px) calc(100% - 1.5px), calc(100% - 1.5px) calc(100% - 10px), calc(100% - 1.5px) 1.5px, 10px 1.5px);
  pointer-events: none;
  transition: background 0.25s cubic-bezier(0.16, 1, 0.3, 1);
}

.ib-btn__arrow {
  display: inline-flex;
  align-items: center;
  flex-shrink: 0;
  transition: transform 0.25s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.25s cubic-bezier(0.16, 1, 0.3, 1);
}

.ib-btn__arrow svg, .ib-btn__arrow.ib-icon {
  width: 14px;
  height: 14px;
}

.ib-btn:hover:not(:disabled):not([aria-disabled=true])::after {
  opacity: 1;
  transform: translate(4px, 4px);
}

.ib-btn:focus-visible .ib-btn__inner {
  background: var(--_bg-press);
}

.ib-btn:active:not(:disabled) .ib-btn__inner {
  background: var(--_bg-press);
}

.ib-btn:disabled, .ib-btn[aria-disabled=true] {
  --_bg: #a7a7b0;
  --_border: #a7a7b0;
  --_color: #fff;
  cursor: not-allowed;
  pointer-events: none;
}

.ib-btn--primary {
  --_bg: #ea1b3d;
  --_bg-press: #aa142d;
  --_color: #fff;
  --_border: transparent;
  --_shadow: #ffd0d8;
}

.ib-btn--primary-light {
  --_bg: #fff9ed;
  --_bg-press: #ffefd1;
  --_color: #676775;
  --_border: transparent;
  --_shadow: #ffd0d8;
}

.ib-btn--primary-light:disabled, .ib-btn--primary-light[aria-disabled=true] {
  --_bg: #a7a7b0;
  --_color: #fff;
}

.ib-btn--secondary {
  --_bg: transparent;
  --_bg-press: transparent;
  --_color: #ea1b3d;
  --_border: #ea1b3d;
  --_shadow: #ffd0d8;
}

.ib-btn--secondary:focus-visible {
  --_border: #aa142d;
  --_color: #aa142d;
}

.ib-btn--secondary:active:not(:disabled) {
  --_border: #aa142d;
  --_color: #aa142d;
}

.ib-btn--secondary:disabled, .ib-btn--secondary[aria-disabled=true] {
  --_bg: transparent;
  --_color: #a7a7b0;
  --_border: #a7a7b0;
}

.ib-btn--secondary-light {
  --_bg: transparent;
  --_bg-press: transparent;
  --_color: #fff;
  --_border: #fff;
  --_shadow: #ffd0d8;
}

.ib-btn--secondary-light:hover:not(:disabled):not([aria-disabled=true]) {
  --_bg: #ea1b3d;
  --_border: transparent;
}

.ib-btn--secondary-light:disabled, .ib-btn--secondary-light[aria-disabled=true] {
  --_bg: transparent;
  --_color: #a7a7b0;
  --_border: #a7a7b0;
}

.ib-btn--ghost {
  --_color: #ea1b3d;
  height: auto;
}

.ib-btn--ghost::after {
  display: none;
}

.ib-btn--ghost .ib-btn__inner {
  padding: 2px 0;
  height: auto;
  background: transparent;
  clip-path: none;
  text-decoration: underline;
  text-underline-offset: 3px;
  text-decoration-thickness: 1.5px;
  -webkit-text-decoration-color: currentColor;
          text-decoration-color: currentColor;
  transition: color 0.25s cubic-bezier(0.16, 1, 0.3, 1), -webkit-text-decoration-color 0.25s cubic-bezier(0.16, 1, 0.3, 1);
  transition: color 0.25s cubic-bezier(0.16, 1, 0.3, 1), text-decoration-color 0.25s cubic-bezier(0.16, 1, 0.3, 1);
  transition: color 0.25s cubic-bezier(0.16, 1, 0.3, 1), text-decoration-color 0.25s cubic-bezier(0.16, 1, 0.3, 1), -webkit-text-decoration-color 0.25s cubic-bezier(0.16, 1, 0.3, 1);
}

.ib-btn--ghost .ib-btn__inner::before {
  display: none;
}

.ib-btn--ghost:focus-visible, .ib-btn--ghost:active:not(:disabled) {
  --_color: #aa142d;
}

.ib-btn--ghost:focus-visible,
.ib-btn--ghost:active:not(:disabled) {
  --_color: #aa142d;
}

.ib-btn--ghost:focus-visible .ib-btn__inner,
.ib-btn--ghost:active:not(:disabled) .ib-btn__inner {
  background: transparent !important;
}

.ib-btn--ghost:disabled, .ib-btn--ghost[aria-disabled=true] {
  --_color: #a7a7b0;
  pointer-events: none;
}

.ib-btn--with-icon:hover:not(:disabled):not([aria-disabled=true]) .ib-btn__arrow {
  animation: ib-arrow-slide 0.7s cubic-bezier(0.16, 1, 0.3, 1) infinite;
}

.ib-btn--icon-only {
  width: 48px;
}

.ib-btn--icon-only .ib-btn__inner {
  padding: 0;
}

.ib-btn--icon-only:hover:not(:disabled):not([aria-disabled=true]) .ib-btn__arrow {
  animation: ib-arrow-slide 0.7s cubic-bezier(0.16, 1, 0.3, 1) infinite;
}

@media (max-width: 768px) {
  .ib-btn {
    height: 44px;
    font-size: 15px;
  }

  .ib-btn__inner {
    padding: 0 18px;
  }

  .ib-btn__arrow svg, .ib-btn__arrow.ib-icon {
    width: 13px;
    height: 13px;
  }

  .ib-btn--icon-only {
    width: 44px;
  }

  .ib-btn--icon-only .ib-btn__inner {
    padding: 0;
  }
}
/* ==========================================
   SVG Sprite icon base
   ========================================== */
.ib-icon {
  display: inline-block;
  vertical-align: middle;
  overflow: visible;
  flex-shrink: 0;
}

/* ==========================================
   5. Header & Navigation Styles
   ========================================== */
.main-header {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  z-index: 1000;
  /* Only the hide/reveal slide gets the slow 1s ease — background swaps
     (theme changes, mega menu open/close) get their own fast transition so
     they never crossfade through the solid dark color for a full second
     (that crossfade was the "looks dark for a moment" lag on theme change). */
  transition: transform 1s cubic-bezier(0.16, 1, 0.3, 1), background-color 0.3s ease;
  /* background: transparent; */
  background-color: var(--bg-primary);
}

/* Applied for one frame when the mega menu OPENS (js/shared.js) so the
   header's own background-color transition can't fall out of sync with the
   instantly-swapped nav-link/logo colors — see instantHeaderBackground().
   Scoped to .main-header only (no "*"), so the mega menu's own open/close
   transition is untouched. The close takes the opposite route — see
   .mega-menu-closing below. */
.main-header.header-instant-bg {
  transition-property: transform;
}

/* ── Mega menu close — the nav content's share of the roll-up ───────────────
   js/shared.js holds .mega-menu-closing for the whole close. Every other
   light↔dark swap on this header stays a hard cut, on purpose: during a
   scroll-driven theme change the page is already moving, and on a mega menu
   open the panel unrolling is what the eye is following.

   The close is the one moment where a cut is the loudest thing on screen —
   the sweep arrives at the bar and everything in it has to become its
   post-close self. The bar's surface handles that by being wiped away with
   the same edge (see the wipe in the desktop block). Its content can't be:
   there is one nav, one logo, one CTA, not two layers to reveal between. So
   they crossfade — but on the wipe's clock, 0.18s starting the moment the
   edge reaches the bar, so the two read as a single movement settling instead
   of a wipe followed by a fade.

   The values only move when shared.js drops .mega-menu-open, which is what
   these selectors hang off (see the :is(.header-dark, .mega-menu-open) rules
   throughout this file). Everything that swap repaints has to be listed here
   or the pieces come apart mid-fade. .main-header itself is absent because it
   needs nothing — its base rule already carries background-color 0.3s ease,
   and it changes at the START of the close, out of sight under the curtain. */
.main-header.mega-menu-closing::before,
.main-header.mega-menu-closing .nav-link,
.main-header.mega-menu-closing .btn-cta,
.main-header.mega-menu-closing .header-divider,
.main-header.mega-menu-closing .ask-expona-text,
.main-header.mega-menu-closing .ask-expona-btn,
.main-header.mega-menu-closing .lang-picker__trigger,
.main-header.mega-menu-closing .lang-picker__globe,
.main-header.mega-menu-closing .lang-picker__caret,
.main-header.mega-menu-closing .mobile-menu-btn .bar,
.main-header.mega-menu-closing .hamburger-line {
  transition: opacity 0.18s cubic-bezier(0, 0, 0.2, 1), color 0.18s cubic-bezier(0, 0, 0.2, 1), background-color 0.18s cubic-bezier(0, 0, 0.2, 1), border-color 0.18s cubic-bezier(0, 0, 0.2, 1);
}

/* The logo pair needs its visibility timed per direction, so it can't ride the
   shared list above: the copy on its way OUT must stay painted for the whole
   fade (visibility flips at the end), while the one on its way IN has to be
   painted from frame zero or it pops in at the end instead of fading. Both
   land on the same two elements, so — as with the mega menu panel — each state
   carries the delay that belongs to the direction it is heading towards. */
.main-header.mega-menu-closing .logo-light,
.main-header.mega-menu-closing:is(.header-dark, .mega-menu-open) .logo-dark {
  transition: opacity 0.18s ease, visibility 0s linear 0.18s;
}

.main-header.mega-menu-closing:is(.header-dark, .mega-menu-open) .logo-light,
.main-header.mega-menu-closing .logo-dark {
  transition: opacity 0.18s ease, visibility 0s linear 0s;
}

@media (prefers-reduced-motion: reduce) {
  .main-header.mega-menu-closing::before,
.main-header.mega-menu-closing .logo-img,
.main-header.mega-menu-closing .nav-link,
.main-header.mega-menu-closing .btn-cta,
.main-header.mega-menu-closing .header-divider,
.main-header.mega-menu-closing .ask-expona-text,
.main-header.mega-menu-closing .ask-expona-btn,
.main-header.mega-menu-closing .lang-picker__trigger,
.main-header.mega-menu-closing .lang-picker__globe,
.main-header.mega-menu-closing .lang-picker__caret,
.main-header.mega-menu-closing .mobile-menu-btn .bar,
.main-header.mega-menu-closing .hamburger-line,
.main-header.mega-menu-closing:is(.header-dark, .mega-menu-open) .logo-light,
.main-header.mega-menu-closing:is(.header-dark, .mega-menu-open) .logo-dark {
    transition: none;
  }
}
/* Blurred Glassmorphism on Scroll */
.main-header.scrolled {
  /* background: rgba(255, 249, 237, 0.85);
  backdrop-filter: blur(20px);
  -webkit-backdrop-filter: blur(20px);
  border-bottom: 1px solid var(--border-color);
  box-shadow: 0 4px 30px rgba(0, 0, 0, 0.02); */
}

/* Transparent-variant only: once scrolled, the header has nothing behind it
   to guarantee contrast for its (white) nav content, so give it a dark glass
   backdrop instead of staying fully see-through. Solid light/dark themes
   already paint an opaque background and don't need this. Mega menu forces
   its own solid look, so this is skipped while it's open. */
.main-header.header-dark.header-transparent.scrolled:not(.mega-menu-open) {
  background: rgba(55, 55, 66, 0.3);
  /* header-dark's #373742, translucent */
  -webkit-backdrop-filter: blur(20px);
          backdrop-filter: blur(20px);
}

.main-header.header-hidden,
.header-container.header-hidden {
  transform: translateY(-100%);
  /* transition: transform 0.3s ease; */
  transition: transform 1s cubic-bezier(0.16, 1, 0.3, 1);
}

.main-header.first-fold .nav-menu,
.main-header.first-fold .ask-expona-topbar {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: var(--transition-translate);
}

body:has(#story.active) .main-header .nav-menu,
body:has(#story.active) .main-header .cta-section,
body:has(#story.active) .ask-expona-topbar {
  visibility: hidden;
  opacity: 0;
  transition: opacity 0.3s ease, visibility 0.3s ease;
}

/* #story and #who-we-are-parent share one continuous #FFEFD1 → #FFF9ED
   background (css/style.css). The header holds this flat peach for the whole
   zone by default — it is solid peach for nearly the entire span, since the
   gradient itself doesn't start fading to cream until 65.85% of the fold's
   height (css/style.css), far below where the header sits. Only the tail end
   of the zone needs to move: js/home-smootheer-1.js scrubs an inline
   background-color on .main-header from this peach to var(--bg-primary) in
   sync with that same 65.85%-to-100% fade (see the "Header background —
   continuous match to the story gradient" block), so this flat colour is
   really just the resting state the inline override blends away from.

   js/home-smootheer-1.js toggles this class for the whole story + who-we-are
   span (see headerStoryZone), not per-fold, via the same instant-cut trick
   shared.js uses for header-dark/header-transparent — the base .main-header
   transition fades background changes over 0.3s, which otherwise left the old
   background showing for a beat after the page had already moved on.
   :not(.header-dark) excludes the mega-menu-open state, which forces its own
   solid dark surface regardless of section theme. */
.main-header.header-story:not(.header-dark) {
  background-color: #ffefd1;
}

/* Hovering (or tabbing into) the header brings the parked nav and CTA back —
   they're only visually hidden on the story fold, not removed. Gated on
   .intro-done (set by js/home.js when the 3s logo/topbar reveal tween
   finishes) so hovering early can't beat the logo on screen. Selectors mirror
   the hide rule with :hover/:focus-within added so they win on specificity. */
body.intro-done:has(#story.active) .main-header:hover .nav-menu,
body.intro-done:has(#story.active) .main-header:focus-within .nav-menu,
body.intro-done:has(#story.active) .main-header:hover .cta-section,
body.intro-done:has(#story.active) .main-header:focus-within .cta-section {
  visibility: visible;
  opacity: 1;
}

/* An open mega menu pins the nav and CTA visible regardless of hover — the
   panel is a child of .nav-menu, so without this, moving the pointer off the
   header (or out of the viewport) fades the still-open menu away. It stays up
   until shared.js closes it via the click-outside / Escape handlers. */
body:has(#story.active) .main-header.mega-menu-open .nav-menu,
body:has(#story.active) .main-header.mega-menu-open .cta-section {
  visibility: visible;
  opacity: 1;
}

/* Hide nav, CTA, and topbar while on the story fold (desktop only) */
@media (min-width: 1024px) {
  /* body:has(#story.active) .main-header .nav-menu,
  body:has(#story.active) .main-header .cta-section,
  body:has(#story.active) .ask-expona-topbar {
    display: none;
  } */
}
.no-transition,
.no-transition * {
  transition: none !important;
}

/* ==========================================
   Ask Expona Top Bar
   ========================================== */
.ask-expona-topbar {
  width: 100%;
  height: 12px;
  transition: opacity 0.3s ease, visibility 0.3s ease;
  background: linear-gradient(90deg, #373742 65%, #284cba 80%, #ea1b3d 91%, #373742 94%);
  position: relative;
  z-index: 99;
}

.topbar-container {
  max-width: var(--container-width);
  margin: 0 auto;
  position: relative;
  height: 100%;
}

.ask-expona-btn-wrapper {
  position: absolute;
  top: 0;
  right: 120px;
  padding: 0 2px 2px;
  background: linear-gradient(90deg, rgb(40, 76, 186) 15%, rgb(234, 27, 61) 91%);
  clip-path: polygon(0 0, 100% 0, calc(100% - 9px) calc(100% - 10px), calc(100% - 10px) calc(100% - 7px), calc(100% - 11px) calc(100% - 4px), calc(100% - 13px) calc(100% - 2px), calc(100% - 18px) 100%, 18px 100%, 13px calc(100% - 2px), 11px calc(100% - 4px), 10px calc(100% - 7px), 9px calc(100% - 10px));
}

.main-header .ask-expona-btn {
  display: block;
  background: var(--bg-primary);
  padding: 8px 24px;
  clip-path: polygon(0 0, 100% 0, calc(100% - 9px) calc(100% - 8px), calc(100% - 10px) calc(100% - 5px), calc(100% - 11px) calc(100% - 2px), calc(100% - 13px) calc(100% - 1px), calc(100% - 16px) 100%, 16px 100%, 13px calc(100% - 1px), 11px calc(100% - 2px), 10px calc(100% - 5px), 9px calc(100% - 8px));
  text-decoration: none;
  transition: background 0.3s ease;
}

.ask-expona-btn:hover {
  background: #f7f1e6;
}

.main-header .ask-expona-btn-content {
  display: flex;
  align-items: center;
  gap: 8px;
}

.main-header .ask-expona-icon {
  width: 16px;
  height: 16px;
  -o-object-fit: contain;
     object-fit: contain;
}

.main-header .ask-expona-text {
  font-size: 14px;
  font-weight: 500;
  color: var(--text-primary);
  letter-spacing: 0.5px;
  text-transform: uppercase;
}

/* Dark mode header adaptation for top bar */
.main-header:is(.header-dark, .mega-menu-open) .ask-expona-text {
  color: #fff;
}

.main-header:is(.header-dark, .mega-menu-open) .ask-expona-btn {
  background: #2e2f36;
}

.main-header:is(.header-dark, .mega-menu-open) .ask-expona-btn:hover {
  background: #373742;
}

/* Transparent variant only: the Expona pill keeps its light (cream/dark-text)
   look even though the rest of the header is dark-themed — it doesn't need
   header-dark's white-on-dark treatment since it isn't sitting on a solid
   dark bar. :not(.mega-menu-open) matches the background rule below — once
   the mega menu forces the header back to a solid dark bar, the pill reverts
   to the regular header-dark (white/dark-pill) styling above for contrast.
   Higher specificity than the .header-dark rules above (5 classes vs 3) so
   it wins regardless of source order. */
.main-header.header-dark.header-transparent:not(.mega-menu-open) .ask-expona-text {
  color: var(--text-primary);
}

.main-header.header-dark.header-transparent:not(.mega-menu-open) .ask-expona-btn {
  background: var(--bg-primary);
}

.main-header.header-dark.header-transparent:not(.mega-menu-open) .ask-expona-btn:hover {
  background: #f7f1e6;
}

@media (max-width: 768px) {
  .ask-expona-btn-wrapper {
    right: 60px;
  }

  .ask-expona-topbar {
    background: linear-gradient(90deg, rgb(46, 47, 54) 8%, rgb(40, 76, 186) 21%, rgb(234, 27, 61) 100%, rgb(46, 47, 54) 94%);
  }

  .main-header .ask-expona-text {
    display: none;
  }
}
.header-container {
  max-width: var(--container-width-padd);
  width: 100%;
  height: 80px;
  margin: 0 auto;
  padding: 0 60px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  /* transition: var(--transition-smooth); */
}

/* Helper to instantly switch header themes without transition delay */
.main-header.no-transition,
.main-header.no-transition * {
  transition: none !important;
}

/* Header Dark Theme (applied dynamically on dark folds) */
.main-header.header-dark.scrolled {
  /* background: rgba(39, 39, 46, 0.85); */
  /* border-bottom: 1px solid rgba(255, 255, 255, 0.1); */
}

.main-header:is(.header-dark, .mega-menu-open) .nav-link {
  color: #fff;
}

.main-header:is(.header-dark, .mega-menu-open) .nav-link:hover {
  color: var(--accent-red);
}

/* Swap Logo via CSS — crossfaded, not display-swapped, so the pair can move
   with the rest of the chrome during .mega-menu-closing (display is not an
   animatable property). The light copy is lifted out of flow on top of the
   dark one, so the layout box is identical either way — both are 118×23 from
   .logo-img. No transition is declared here, so everywhere outside the mega
   menu close the swap stays instant, exactly as the display swap was. */
.main-header .logo-light {
  position: absolute;
  top: 0;
  left: 0;
  opacity: 0;
  /* Keeps the parked copy out of the accessibility tree, the way display:none
     did — otherwise the same alt text is announced twice inside one link.
     Paired with opacity it still crossfades: visibility flips at the END of a
     transition when heading to hidden, so the outgoing logo stays painted for
     the whole fade. `inherit`, not `visible`, so a hidden .logo-link (the
     homepage intro parks it) can never be overridden from in here. */
  visibility: hidden;
}

.main-header:is(.header-dark, .mega-menu-open) .logo-light {
  opacity: 1;
  visibility: inherit;
}

.main-header:is(.header-dark, .mega-menu-open) .logo-dark {
  opacity: 0;
  visibility: hidden;
}

.main-header:is(.header-dark, .mega-menu-open) .mobile-menu-btn .bar {
  background-color: #fff;
}

.main-header:is(.header-dark, .mega-menu-open) .btn-cta {
  border-color: #fff;
  color: #fff;
}

.main-header:is(.header-dark, .mega-menu-open) .btn-cta:hover {
  background-color: #fff;
  color: #27272e;
}

/* .mega-menu-closing is in here so the panel's own colours outlive the hand-off
   at the end of the roll-up: .mega-menu-open comes off at the exact millisecond
   the panel's clip finishes, and without this the two would race for the last
   frame — a sliver of light-themed panel before it is hidden. */
.main-header:is(.header-dark, .mega-menu-open, .mega-menu-closing) .mega-menu {
  background-color: #373742;
  border: 1px dashed rgba(255, 255, 255, 0.1);
}

/* Grain overlay lives on .main-header, NOT .mega-menu: .mega-menu is
   position:fixed + backdrop-filter (line ~653) + overflow-y:auto (scrolls
   its own content when the menu is taller than the viewport). backdrop-filter
   creates a new containing block for position:fixed descendants (same as
   transform/filter/will-change), so a fixed ::after nested inside .mega-menu
   silently gets re-anchored to .mega-menu anyway and still scrolls away with
   its content. .main-header has neither backdrop-filter nor transform while
   .mega-menu-open (see the :not(.mega-menu-open) rule above and shared.js's
   header-hidden guard), so anchoring here actually stays pinned to the
   viewport regardless of how far the menu's own content is scrolled.

   This is the ≤1024px version — it flips on and off with the panel, which is
   right there because the panel itself just appears/disappears. Desktop
   (≥1025px) overrides it further down so the grain rolls with the panel
   instead of veiling the page ahead of it. Keyed to .mega-menu-open alone,
   not header-dark: the close hands the header its post-close theme up front
   (js/shared.js), so header-dark is already gone while the menu is on screen. */
.main-header.mega-menu-open::after {
  content: "";
  position: fixed;
  inset: 92px 0 0;
  /* matches .mega-menu's top: 80px header + 12px topbar */
  background-image: url(../static/assets/images/latest/grain.png);
  background-repeat: repeat;
  background-size: cover;
  mix-blend-mode: normal;
  opacity: 1;
  pointer-events: none;
  z-index: 10;
}

.main-header:is(.header-dark, .mega-menu-open, .mega-menu-closing) .menu-heading {
  color: #ffd0d8;
}

.main-header:is(.header-dark, .mega-menu-open, .mega-menu-closing) .submenu-link {
  color: #fff;
}

@media (max-width: 1024px) {
  .header-container {
    padding: 0 20px;
  }
}
@media (max-width: 768px) {
  /* .main-header.header-hidden {
    transform: translateY(0);
  } */
  .main-header:is(.header-dark, .mega-menu-open, .mega-menu-closing) .mega-menu {
    background: #373742 url(../static/assets/images/latest/grain.png) center;
  }

  .main-header.mega-menu-open::after {
    display: none;
  }

  .header-container.header-hidden-mobile {
    transform: translateY(-100%) !important;
    transition: transform 0.3s ease;
  }

  .header-container {
    padding: 45px 20px 24px;
    height: 80px;
    width: 100%;
    transition: transform 0.3s ease;
  }
}
/* Logo */
.logo-section {
  display: flex;
  align-items: center;
}

.logo-link {
  display: flex;
  align-items: center;
  /* Anchors the stacked .logo-light copy (see the logo swap rules above). */
  position: relative;
}

.page-home .logo-link {
  opacity: 0;
  visibility: hidden;
}

@keyframes fade-in {
  0% {
    opacity: 0;
    visibility: hidden;
  }
  100% {
    opacity: 1;
    visibility: visible;
  }
}
.logo-img {
  display: block;
  width: 118px;
  height: 23px;
}

/* Nav Menu Links */
.header-container .nav-menu {
  display: flex;
  align-items: center;
  gap: 32px;
  transition: opacity 0.3s ease, visibility 0.3s ease;
}

.main-header .nav-list {
  display: flex;
  list-style: none;
  gap: 40px;
  margin-bottom: 0 !important;
}

.main-header .nav-item {
  position: relative;
  margin-bottom: 0;
}

.main-header .nav-item.active::after,
.main-header .nav-item.menu-active::after {
  content: "";
  position: absolute;
  bottom: -16px;
  left: 0;
  width: 100%;
  height: 2px;
  border-bottom: 1px dashed var(--accent-red);
}

.main-header .nav-link {
  font-size: 18px;
  font-weight: 300;
  color: var(--text-primary);
  padding: 10px 0;
  display: flex;
  align-items: center;
  gap: 6px;
}

.main-header .nav-link:hover {
  color: var(--accent-red);
}

.main-header .nav-icon {
  width: 12px;
  height: auto;
  transition: var(--transition-smooth);
}

/* Two-state nav icons: closed = chevron-down, open = X */
.main-header .nav-icon--open {
  display: none;
}

.main-header .nav-item.active .nav-icon--closed {
  display: none;
}

.main-header .nav-item.active .nav-icon--open {
  display: inline-block;
}

/* Header Divider */
.main-header .header-divider {
  width: 1px;
  height: 24px;
  background-color: var(--text-primary);
  opacity: 0.2;
}

.main-header:is(.header-dark, .mega-menu-open) .header-divider {
  background-color: #fff;
}

/* Header right-side slot */
.header-container .cta-section {
  display: flex;
  align-items: center;
}

/* ================================================
   Language Picker — Desktop (.header-container)
   ================================================ */
.lang-picker {
  position: relative;
}

.lang-picker__trigger {
  display: flex;
  align-items: center;
  gap: 10px;
  background: none;
  cursor: pointer;
  padding: 6px 10px;
  color: #2f2f39;
  border: 0;
  font-family: var(--font-primary);
  font-size: 18px;
  font-weight: 300;
  line-height: 30px;
}

.lang-picker.is-open .lang-picker__trigger {
  background: #faecd3;
}

.lang-picker__globe {
  color: #2f2f39;
  flex-shrink: 0;
  transition: color 0.2s ease;
}

.lang-picker__trigger:hover .lang-picker__globe,
.lang-picker.is-open .lang-picker__globe {
  color: #ea1b3d;
}

.lang-picker__caret {
  color: #2f2f39;
  flex-shrink: 0;
}

.lang-picker__dropdown {
  display: none;
  position: absolute;
  top: 100%;
  right: 0;
  background: #faecd3;
  border: 0;
  border-top: none;
  border-radius: 0;
  padding: 4px 4px 6px;
  min-width: 100%;
  flex-direction: column;
  z-index: 200;
}

.lang-picker.is-open .lang-picker__dropdown {
  display: flex;
}

.lang-picker__opt.is-active {
  display: none;
}

.lang-picker__opt {
  display: flex;
  align-items: center;
  gap: 8px;
  background: none;
  border: none;
  cursor: pointer;
  padding: 7px 10px;
  font-family: var(--font-primary);
  font-size: 18px;
  font-weight: 300;
  line-height: 30px;
  color: #2f2f39;
  width: 100%;
  text-align: left;
}

.lang-picker__opt::before {
  content: "";
  width: 13px;
  height: 13px;
  border-radius: 50%;
  border: 1.5px solid rgba(47, 47, 57, 0.35);
  flex-shrink: 0;
}

.lang-picker__opt:hover {
  background: rgba(47, 47, 57, 0.06);
}

/* Dark header */
.main-header.header-dark {
  background-color: #373742;
}

/* The bar's dark surface, as a layer instead of the element's own background.
   Two reasons it can't stay in the shorthand above:
     · background-image cannot transition — the grain would blink out in one
       frame while the colour under it was still fading
     · a background belongs to its element, so the only way to wipe it is to
       clip the element — which would take the nav, the logo and the CTA with
       it. As a layer it can be clipped on its own, which is what lets the mega
       menu's roll-up carry on through the bar (see the wipe further down).
   z-index: -1 puts it above the bar's own background and below every child,
   without disturbing their stacking — .main-header already opens a stacking
   context (position: fixed + z-index: 1000), so the -1 stays inside it. */
.main-header::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: url(../static/assets/images/latest/grain.png);
  background-position: 0 0;
  background-repeat: repeat;
  opacity: 0;
  pointer-events: none;
  z-index: -1;
  /* The from-state the wipe animates out of; no effect on its own. */
  clip-path: inset(0 0 0 0);
}

/* .mega-menu-closing keeps the curtain up for the whole close, including the
   stretch after shared.js has already handed the bar its post-close theme. */
.main-header:is(.header-dark, .mega-menu-open, .mega-menu-closing)::before {
  opacity: 1;
}

/* No bar, no texture — matches the transparent-variant background rule below. */
.main-header.header-dark.header-transparent:not(.mega-menu-open)::before {
  opacity: 0;
}

/* Dark header, transparent variant (data-header-theme="transparent") — same
   white text/logo/link colors as header-dark, but the header blends into
   whatever's behind it instead of showing the solid dark bar. Mega menu
   still forces the solid dark look back (legibility over its own content)
   regardless of which theme was active when it opened. */
.main-header.header-dark.header-transparent:not(.mega-menu-open) {
  background: transparent;
}

.main-header:is(.header-dark, .mega-menu-open) .lang-picker__trigger {
  color: #fff;
}

.main-header:is(.header-dark, .mega-menu-open) .lang-picker.is-open .lang-picker__trigger {
  background: #2f2f39;
}

.main-header:is(.header-dark, .mega-menu-open) .lang-picker__globe,
.main-header:is(.header-dark, .mega-menu-open) .lang-picker__caret {
  color: #fff;
}

.main-header:is(.header-dark, .mega-menu-open) .lang-picker__trigger:hover .lang-picker__globe,
.main-header:is(.header-dark, .mega-menu-open) .lang-picker.is-open .lang-picker__globe {
  color: #ea1b3d;
}

.main-header:is(.header-dark, .mega-menu-open) .lang-picker__dropdown {
  background: #2f2f39;
  border-color: rgba(255, 255, 255, 0.12);
}

.main-header:is(.header-dark, .mega-menu-open) .lang-picker__opt {
  color: #fff;
}

.main-header:is(.header-dark, .mega-menu-open) .lang-picker__opt::before {
  border-color: rgba(255, 255, 255, 0.4);
}

.main-header:is(.header-dark, .mega-menu-open) .lang-picker__opt:hover {
  background: rgba(255, 255, 255, 0.08);
}

/* Dropdown Menu / Mega Menu */
.header-container .mega-menu {
  position: fixed;
  top: 92px;
  /* 80px header + 12px topbar */
  left: 0;
  right: 0;
  height: calc(100vh - 92px);
  background: rgba(255, 249, 237, 0.95);
  -webkit-backdrop-filter: blur(20px);
          backdrop-filter: blur(20px);
  border-radius: 0;
  padding: 80px 0;
  border: none;
  box-shadow: none;
  opacity: 0;
  visibility: hidden;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  overflow-y: auto;
}

.header-container .mega-menu-inner {
  max-width: var(--container-width-padd);
  width: 100%;
  margin: 0 auto;
  padding: 0 60px;
}

@media (min-width: 1440px) {
  .main-header .mega-menu {
    padding-left: 0;
    padding-right: 0;
  }

  .header-container .mega-menu-inner {
    padding-right: 120px;
  }
}
@media (max-width: 768px) {
  .main-header .mega-menu {
    padding: 40px 24px;
    position: static;
    height: auto;
    width: 100%;
    background: transparent;
  }
}
.main-header .nav-item.active .mega-menu {
  opacity: 1;
  visibility: visible;
  transform: none;
}

/* ── Mega menu roll-down — desktop only (matches DESKTOP_MIN_WIDTH in shared.js)
   The panel unrolls from under the header like a blind, and only once it has
   opened does the content fade up inside it. Closing runs the same thing
   backwards: content leaves first, then the panel rolls back up.

   TIMELINE
     open   0ms  panel starts unrolling (400ms)
           220ms content starts fading up (300ms)   → ends 520ms
     close    0ms content starts fading out (180ms)
           160ms panel starts rolling up (350ms)    → ends 510ms

   Both directions are plain transitions, not animations: an animation only
   plays on the way in, which is why closing used to snap. A transition takes
   its timing from whichever state it is heading TOWARDS, so the open delays
   live on the .active rules and the close delays live on the base rules — that
   is what lets the order reverse without any JS.

   WHY clip-path AND NOT height/transform
   Animating height would reflow the content on every frame, and the text would
   visibly re-wrap as the panel grew — the "content jump". A scaleY transform
   would squash the text as it opened. clip-path only changes what is painted:
   the content is laid out at full size from frame one and is simply revealed,
   so nothing inside ever moves except where we tell it to. */
@media (min-width: 1025px) {
  .header-container .mega-menu {
    /* The blur has to go for any of this to be smooth. A backdrop-filtered
       element is re-sampled from whatever sits behind it, so animating one
       re-blurs the page underneath every frame and the content painted on top
       strobes against it — that was the flicker, and it happened on opacity
       just as much as on transform.

       Cheap to lose: the panel is already rgb(255 249 237 / 0.95), so the blur
       only ever showed through 5% of the surface, and on a dark header a fully
       opaque #373742 + grain covers it entirely. Desktop-only, so the mobile
       flyout — where the panel is `background: transparent` and the blur does
       real work — keeps it. */
    -webkit-backdrop-filter: none;
            backdrop-filter: none;
    /* opacity stays at 1 in both states: the reveal is the clip's job, and
       fading the panel as well would double up on the content's own fade and
       read as the two coming apart. (The base rule further up sets opacity: 0
       for the mobile accordion, which still applies below 1025px.) */
    opacity: 1;
    clip-path: inset(0 0 100% 0);
    /* Closing: wait out the content's exit, then roll up. visibility flips at
       the very end so the panel stays painted for the whole roll — hiding it
       on frame one would leave nothing to watch. */
    transition: clip-path 0.35s cubic-bezier(0.4, 0, 0.2, 1) 0.16s, visibility 0s linear 0.51s;
  }

  .main-header .nav-item.active .mega-menu {
    clip-path: inset(0 0 0 0);
    /* Opening: the panel goes first, from frame zero. */
    transition: clip-path 0.4s cubic-bezier(0.16, 1, 0.3, 1) 0s, visibility 0s linear 0s;
  }

  /* Content — fades up inside the panel once it has unrolled, and leaves before
     it rolls back. Held on .mega-menu-inner rather than the panel so the two
     can be timed independently. */
  .header-container .mega-menu-inner {
    opacity: 0;
    transform: translate3d(0, 12px, 0);
    /* Closing: immediate and quick, so it is gone before the roll-up starts. */
    transition: opacity 0.18s ease 0s, transform 0.18s ease 0s;
    height: 100%;
    display: flex;
    flex-direction: column;
    justify-content: space-between;
  }

  .main-header .nav-item.active .mega-menu-inner {
    opacity: 1;
    transform: translate3d(0, 0, 0);
    /* Opening: hangs back until the panel is most of the way down. */
    transition: opacity 0.3s ease 0.22s, transform 0.35s cubic-bezier(0.16, 1, 0.3, 1) 0.22s;
  }

  /* Grain — same roll, same timing as the panel it textures.
     It sits on .main-header (see the long note next to the base rule for why
     it can't live inside .mega-menu), so it doesn't inherit the panel's clip
     and used to snap: fully drawn over the page the moment the menu opened,
     and still drawn there for the whole roll-up until shared.js's teardown
     removed .mega-menu-open ~10ms after the panel had finished. That trailing
     removal is what read as the jerk at the end of the close — the panel
     landed cleanly on the nav and then the whole page brightened a frame later.
     Cloning the panel's two clip-path transitions here keeps the texture
     welded to the surface it belongs to in both directions.

     Declared unconditionally — not only under .mega-menu-open — because a
     pseudo-element CREATED by the same class change that opens the menu has no
     previous style to transition from and would paint fully unrolled on frame
     one. Keeping it in the tree, clipped to nothing and visibility:hidden,
     gives the clip somewhere to animate FROM. It costs nothing while closed:
     nothing is painted, nothing is hit-tested, and grain.png is already
     fetched for the header/mobile-menu backgrounds. */
  .main-header::after {
    content: "";
    position: fixed;
    inset: 92px 0 0;
    /* matches .mega-menu's top: 80px header + 12px topbar */
    background-image: url(../static/assets/images/latest/grain.png);
    background-repeat: repeat;
    background-size: cover;
    pointer-events: none;
    z-index: 10;
    visibility: hidden;
    clip-path: inset(0 0 100% 0);
    /* Closing — mirrors .mega-menu's close transition exactly. */
    transition: clip-path 0.35s cubic-bezier(0.4, 0, 0.2, 1) 0.16s, visibility 0s linear 0.51s;
  }

  /* :has(), because the class that opens the panel sits on the trigger, not on
     the header the grain is attached to. .mega-menu-open is kept in the
     selector so the grain can never outlive the dark chrome it belongs to —
     shared.js holds that class for the whole close, then drops it. A swap
     between two panels leaves both halves matching, so the grain simply stays
     unrolled and no transition runs — same as the panel. */
  .main-header.mega-menu-open:has(.nav-item.dropdown-trigger.active)::after {
    visibility: visible;
    clip-path: inset(0 0 0 0);
    /* Opening — with the panel, from frame zero. */
    transition: clip-path 0.4s cubic-bezier(0.16, 1, 0.3, 1) 0s, visibility 0s linear 0s;
  }

  /* ── The header's share of the roll-up ─────────────────────────────────────
     The panel is fixed at top: 92px, so its clip runs out of road at the bar
     and the close read as two beats: a sweep that stopped at the nav, then the
     header changing appearance a moment later. This carries the same edge the
     rest of the way, from the bar's underside up to y=0.

     What makes it possible is that the bar's dark surface is the ::before
     curtain (see its rule above) rather than the element's own background, and
     that shared.js hands the element its post-close theme the moment the close
     STARTS — invisible, since the opaque curtain is still covering it. By the
     time the wipe runs there is already a finished header underneath for the
     edge to uncover, so no second beat is left over.

     The nav content can't be wiped — it is one set of elements that has to
     change colour, not two layers to reveal between — so it crossfades on the
     same clock instead (.mega-menu-closing, up top). Same start, same 0.18s,
     so the two read as one movement settling rather than a wipe and a fade.

     :not(.header-dark) skips the whole thing when the header is staying dark:
     the bar looks identical either side of the close, so there would be
     nothing to uncover and the wipe would just strip the grain and pop it
     back. */
  .main-header:is(.mega-menu-open, .mega-menu-closing)::before {
    background-color: #373742;
  }

  .main-header.mega-menu-closing:not(.mega-menu-open, .header-dark)::before {
    clip-path: inset(0 0 100% 0);
    /* Ease-OUT, not the panel's ease-in-out: the edge arrives here already
       moving, so a curve that starts from rest would put a hitch at the exact
       seam this is meant to hide. Starting at speed and settling reads as the
       same edge carrying on. (A true velocity match would run this leg in
       about two frames — far too fast for the content underneath to cross
       over — so the distance is honest and the speed is eased.) */
    transition: clip-path 0.18s cubic-bezier(0, 0, 0.2, 1), opacity 0.18s ease;
  }

  /* Swapping one open panel for another stays instant, which is the behaviour
     js/shared.js deliberately encodes with .mega-menu-intro (see its comment).
     Two selectors, because a swap has two halves to silence:
       · the incoming panel — .mega-menu-intro is absent on a swap and present
         on a cold open, so this is exactly the "not a cold open" case
       · the outgoing panel — still :not(.active), but another trigger IS
         active, so it must vanish rather than roll up behind its replacement
     On a real close no trigger is left active, the second selector stops
     matching, and the panel gets its full sequence. Both halves cover the
     inner too, or the content would animate while its panel did not. */
  .main-header:not(.mega-menu-intro) .nav-item.active .mega-menu,
.main-header:not(.mega-menu-intro) .nav-item.active .mega-menu-inner,
.main-header:has(.nav-item.dropdown-trigger.active) .nav-item:not(.active) .mega-menu,
.main-header:has(.nav-item.dropdown-trigger.active) .nav-item:not(.active) .mega-menu-inner {
    transition: none;
  }
}
@media (min-width: 1025px) and (prefers-reduced-motion: reduce) {
  .header-container .mega-menu,
.main-header .nav-item.active .mega-menu,
.header-container .mega-menu-inner,
.main-header .nav-item.active .mega-menu-inner,
.main-header::after,
.main-header.mega-menu-open:has(.nav-item.dropdown-trigger.active)::after,
.main-header.mega-menu-closing:not(.mega-menu-open, .header-dark)::before {
    transition: none;
  }
}
.mega-menu-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 64px;
  width: 100%;
  max-width: 1200px;
}

@media (max-width: 768px) {
  .mega-menu-grid {
    grid-template-columns: 1fr;
  }
}
.main-header .menu-heading {
  font-size: 16px;
  text-transform: uppercase;
  color: var(--text-primary);
  margin-bottom: 32px;
  font-weight: 500;
}

.main-header .submenu-list {
  list-style: none;
  padding: 0;
  margin: 0;
}

.main-header .submenu-list li {
  list-style: none;
  margin-bottom: 32px;
}

.main-header .mega-menu ul.submenu-list {
  margin: 0;
}

.main-header .submenu-link {
  font-size: 22px;
  color: var(--text-secondary);
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 0 0 15px;
  font-weight: 400;
  /* animated border: white line progresses over faint static line */
  background-image: linear-gradient(#fff, #fff), linear-gradient(rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2));
  background-position: 0 100%, 0 100%;
  background-size: 0% 1px, 100% 1px;
  background-repeat: no-repeat;
  /* transition: color 0.3s ease, background-size 0.4s ease; */
  transition: padding 0.3s ease, color 0.3s ease, background-size 0.4s ease;
}

/* Arrow icon is external-link-only — mark a submenu-link with
   target="_blank" to opt it in (standard "opens elsewhere" convention). */
.main-header .submenu-link::after {
  content: none;
}

.main-header .submenu-link[target=_blank]::after {
  content: "";
  width: 20px;
  height: 20px;
  background: url(../static/assets/images/latest/up-right-arrow-new.svg) no-repeat center/contain;
  flex-shrink: 0;
  opacity: 0;
  transition: opacity 0.3s ease;
}

.main-header .submenu-link:hover {
  color: #fff;
  background-size: 100% 1px, 100% 1px;
}

.main-header .submenu-link[target=_blank]:hover::after {
  opacity: 1;
  transform: translateX(0);
}

.main-header .submenu-link__body {
  display: flex;
  flex-direction: column;
  position: relative;
}

.main-header .submenu-link__text {
  display: block;
  transition: transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1);
}

.main-header .submenu-link:hover .submenu-link__text {
  transform: translateY(-8px);
}

.main-header .submenu-link__desc {
  display: block;
  position: absolute;
  left: 0;
  top: 100%;
  width: -moz-max-content;
  width: max-content;
  max-width: 260px;
  font-size: 14px;
  font-weight: 300;
  letter-spacing: 0.02em;
  color: rgba(255, 255, 255, 0.45);
  line-height: 20px;
  opacity: 0;
  pointer-events: none;
  transform: translateY(-4px);
  will-change: transform, opacity;
  transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.4s ease 0.08s;
}

.main-header .submenu-link:hover .submenu-link__desc {
  opacity: 1;
  transform: translateY(-10px);
}

@media (max-width: 768px) {
  .main-header .submenu-link {
    font-size: 20px;
  }
}
/* Bottom section */
.main-header .mega-menu-bottom {
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  margin-top: 60px;
  padding-bottom: 40px;
  padding-top: 40px;
}

@media (max-width: 768px) {
  .main-header .mega-menu-bottom {
    flex-direction: column;
    align-items: flex-start;
    gap: 30px;
  }
}
/* Pages (e.g. index.html) that drop .mega-bottom-card leave .mega-story-box as
   the sole child — space-between would then sit it flex-start (left) instead
   of at its usual right-side spot. */
@media (min-width: 769px) {
  .main-header .mega-story-box:only-child {
    margin-left: auto;
  }
}
.main-header .mega-bottom-card {
  display: flex;
  align-items: center;
  gap: 30px;
  background: #2f2f39;
  padding: 24px;
}

.main-header .mega-bottom-card p {
  font-size: 20px;
  color: #fff;
  font-weight: 300;
  max-width: 500px;
}

/* CTA Button */
.main-header .mega-bottom-card .cta {
  color: #fff;
  text-decoration: underline;
}

.main-header .mega-story-box {
  position: relative;
  width: 96px;
  height: 79px;
  overflow: visible;
  /* let the lid + photo rise above the box on hover */
  cursor: pointer;
}

/* Box body (front) — masks the lower part of the photo */
.main-header .mega-story-box .box-body {
  position: relative;
  z-index: 2;
  display: block;
  width: 96px;
  height: 79px;
}

/* Ritesh photo — tucked inside the box, rises out when the lid opens */
.main-header .mega-story-box .wow-story {
  position: absolute;
  right: 0;
  bottom: 0;
  width: 300px;
  height: 96px;
  z-index: 1;
  opacity: 0;
  visibility: visible;
  transform: scale(0.7) translateX(36px) translateY(-30px);
  transform-origin: bottom center;
  transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.35s ease;
  pointer-events: none;
  display: flex;
  align-items: center;
  justify-content: space-between;
  background: linear-gradient(90deg, #7c2235 0%, #2d2225 68.91%, #2d2225 100%);
  padding: 16px;
}

.main-header .mega-story-box .wow-story .text {
  font-weight: 500;
  font-size: 12px;
  line-height: 18px;
  letter-spacing: 0.24px;
  text-transform: uppercase;
  color: #fff;
  text-decoration: none;
  display: flex;
  align-items: center;
  gap: 5px;
}

.main-header .mega-story-box .wow-story .story-photo {
  width: auto;
  height: 96px;
}

/* Lid — sits on top of the box, lifts and tilts open on hover */
.main-header .mega-story-box .box-cap {
  position: absolute;
  right: 13px;
  top: 6px;
  z-index: 3;
  transform-origin: bottom left;
  transition: transform 0.5s cubic-bezier(0.16, 1, 0.3, 1);
}

/* Hover / keyboard-focus = open state */
.main-header .mega-story-box:hover .box-cap,
.main-header .mega-story-box:focus-within .box-cap {
  transform: translate(40px, -45px) rotate(30deg);
}

.main-header .mega-story-box:hover .wow-story,
.main-header .mega-story-box:focus-within .wow-story {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  /* allow the revealed panel to be hovered + clicked */
  transform: scale(1) translateX(-20px) translateY(-73px);
}

/* Innovation Mega Menu specific layout */
.main-header .mega-menu-top-section {
  display: flex;
  gap: 60px;
  justify-content: space-between;
}

.main-header .mega-menu-left {
  flex: 1;
}

.discipline-grid {
  max-width: 100%;
}

.innovation-grid,
.about-grid {
  grid-template-columns: repeat(2, 1fr);
  max-width: 700px;
}

.insight-grid {
  grid-template-columns: 1fr;
  max-width: 700px;
}

.mega-menu .mega-menu-right {
  flex: 1;
  max-width: 500px;
  display: flex;
  flex-direction: column;
  gap: 20px;
}

.mega-menu .story-image-container {
  position: relative;
  margin-bottom: 10px;
}

/* .true-story-ribbon {
  position: absolute;
  top: 24px;
  left: -35px;
  background: var(--accent-red);
  color: white;
  padding: 6px 40px;
  transform: rotate(-45deg);
  font-size: 11px;
  font-weight: 700;
  letter-spacing: 1.5px;
  z-index: 2;
  box-shadow: 0 4px 10px rgba(0, 0, 0, .3);
} */
/* Ribbon */
.true-story-ribbon {
  width: 150px;
  height: 150px;
  overflow: hidden;
  position: absolute;
  z-index: 1;
}

.true-story-ribbon::before,
.true-story-ribbon::after {
  position: absolute;
  z-index: -1;
  content: "";
  display: block;
  border: 5px solid #7c2235;
}

.true-story-ribbon span {
  position: absolute;
  display: block;
  width: 245px;
  padding: 8px 0;
  background-color: #eb4c5e;
  color: #fff;
  font-weight: 500;
  font-size: 12px;
  line-height: 18px;
  letter-spacing: 1.2px;
  text-align: center;
  text-transform: uppercase;
  white-space: nowrap;
}

/* top left */
.true-story-ribbon.ribbon-top-left {
  top: -10px;
  left: -10px;
}

.true-story-ribbon.ribbon-top-left::before,
.true-story-ribbon.ribbon-top-left::after {
  border-top-color: transparent;
  border-left-color: transparent;
}

.true-story-ribbon.ribbon-top-left::before {
  top: 0;
  right: 26px;
}

.true-story-ribbon.ribbon-top-left::after {
  bottom: 26px;
  left: 0;
}

.true-story-ribbon.ribbon-top-left span {
  right: -25px;
  top: 30px;
  transform: rotate(-45deg);
}

/* ribbon end */
.about-story-card {
  display: flex;
  background: #101a1b;
  position: relative;
  height: 100%;
}

.about-story-wrap {
  display: flex;
}

.about-story-image {
  flex: 0 0 45%;
  position: relative;
}

.about-story-image img {
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
     object-fit: cover;
  display: block;
}

/* .about-story-image::after {
  content: "";
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  width: 40px;
  background: linear-gradient(to right, transparent, #1e1e24);
} */
.about-story-content {
  flex: 1;
  padding: 40px 30px;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

.about-story-title {
  color: #ffd0d8;
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 1px;
  margin-bottom: 16px;
  font-weight: 500;
}

.about-story-text {
  color: rgba(255, 255, 255, 0.8);
  font-size: 15px;
  line-height: 1.8;
  font-weight: 300;
}

.story-quote {
  display: flex;
  gap: 16px;
  align-items: flex-start;
}

.quote-icon {
  font-size: 48px;
  color: #ffd0d8;
  line-height: 1;
  margin-top: -10px;
  opacity: 0.5;
}

.quote-body {
  color: rgba(255, 255, 255, 0.8);
  font-size: 20px;
  line-height: 1.6;
  font-weight: 300;
  margin-bottom: 12px;
}

.quote-author {
  color: rgba(255, 255, 255, 0.6);
  font-size: 16px;
  font-weight: 300;
}

.btn-cta:hover {
  background: transparent;
  color: var(--text-primary);
  box-shadow: 0 4px 15px rgba(55, 55, 66, 0.1);
}

/* Mobile Navigation Toggle */
.main-header .mobile-menu-btn {
  display: none;
  flex-direction: column;
  justify-content: space-between;
  width: 24px;
  height: 18px;
  background: transparent;
  border: none;
  cursor: pointer;
  z-index: 1001;
}

.main-header .mobile-menu-btn .bar {
  width: 100%;
  height: 2px;
  background-color: var(--text-primary);
  border-radius: 2px;
  transition: var(--transition-smooth);
}

@media (max-width: 768px) {
  .main-header .mobile-menu-btn {
    display: flex;
  }

  .main-header .nav-menu {
    position: fixed;
    top: 0;
    right: -100%;
    width: 80%;
    height: 100vh;
    background: var(--bg-primary);
    box-shadow: -10px 0 30px rgba(0, 0, 0, 0.05);
    flex-direction: column;
    justify-content: center;
    transition: var(--transition-smooth);
    padding: 40px;
    z-index: 999;
  }

  .main-header .nav-menu.active {
    right: 0;
  }

  .main-header .nav-list {
    flex-direction: column;
    gap: 30px;
    width: 100%;
  }

  .main-header .mega-menu {
    position: static;
    transform: none;
    opacity: 1;
    visibility: visible;
    box-shadow: none;
    border: none;
    background: transparent;
    padding: 10px 0 0 15px;
    width: 100%;
    display: none;
  }

  .main-header .nav-item.active .mega-menu {
    display: block;
  }
}
.podcast-avatar img {
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
     object-fit: cover;
}

.box-avatar {
  position: absolute;
  top: 0;
  right: -5px;
  width: 24px;
  height: 24px;
  border-radius: 50%;
  border: 2px solid #fff;
  overflow: hidden;
  z-index: 3;
}

.box-avatar img {
  width: 100%;
  height: 100%;
  -o-object-fit: cover;
     object-fit: cover;
}

.mega-menu .story-image {
  width: 100%;
  height: auto;
  display: block;
  transition: filter 0.35s ease;
}

.mega-menu .story-video {
  aspect-ratio: 723/329;
  -o-object-fit: cover;
     object-fit: cover;
  min-height: 329px;
}

/* story-link-wrap: stack link over image */
/* .mega-menu .story-link-wrap {
  position: relative;
  overflow: hidden;
  border-radius: 4px;
} */
/* link hidden by default, centered to its own size */
.mega-menu .story-link {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 8px 1px;
  text-decoration: underline;
  opacity: 0;
  transition: opacity 0.3s ease, background 0.25s ease;
  z-index: 2;
  font-weight: 500;
  font-size: 14px;
  line-height: 18px;
  letter-spacing: 0.24px;
  text-transform: uppercase;
  color: #fff;
}

.mega-menu .story-link img {
  width: 14px;
  height: 14px;
  flex-shrink: 0;
}

/* on container hover: blur only the image, reveal the link */
.mega-menu .story-image-container:hover .story-image,
.mega-menu .about-story-card:hover .about-story-wrap {
  filter: blur(3px) brightness(0.6);
}

.mega-menu .story-image-container:hover .story-link,
.mega-menu .about-story-card:hover .story-link {
  opacity: 1;
}

/* on link hover: add a semi-transparent backdrop */
.mega-menu .story-link:hover {
  background: rgba(255, 255, 255, 0.35);
}

/* ───────────────────────────────────────────────
   Innovation mega-menu only — story card shows an
   always-visible heading + "View True Story" link
   with an animated arrow on hover (matches the
   scroll-tabs story link). Scoped via --innovation
   so the other mega-menu tabs stay untouched.
   ─────────────────────────────────────────────── */
.mega-menu .story-image-container--innovation .story-link-wrap {
  position: relative;
  overflow: hidden;
  border-radius: 0;
}

.mega-menu .story-image-container--innovation .story-video {
  display: block;
}

/* flat scrim keeps the overlaid light text legible on the video */
.mega-menu .story-image-container--innovation .story-link-wrap::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background: rgba(0, 0, 0, 0.2);
}

/* keep the ribbon above the scrim so it isn't dimmed */
.mega-menu .story-image-container--innovation .true-story-ribbon {
  z-index: 3;
}

.mega-menu .story-image-container--innovation .story-image-container__caption {
  position: absolute;
  inset: auto 0 0;
  z-index: 2;
  display: flex;
  flex-direction: column;
  gap: 20px;
  padding: 32px;
}

.mega-menu .story-image-container--innovation .story-image-container__heading {
  margin: 0;
  color: #fff;
  font-family: var(--font-heading);
  font-size: 18px;
  font-weight: 600;
  line-height: 1.66;
  letter-spacing: 0;
}

.mega-menu .story-image-container--innovation .story-image-container__story-link {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  width: -moz-fit-content;
  width: fit-content;
  color: #fff;
  font-weight: 500;
  font-size: 16px;
  line-height: 1.625;
  letter-spacing: 0;
  text-transform: uppercase;
  text-decoration: none;
}

.mega-menu .story-image-container--innovation .story-image-container__story-link-text {
  text-decoration: underline;
  text-underline-offset: 5px;
  text-decoration-thickness: 1px;
}

.mega-menu .story-image-container--innovation .story-image-container__story-link-arrow {
  flex: none;
  width: 20px;
  height: 17px;
  fill: currentcolor;
  transition: transform 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);
}

.mega-menu .story-image-container--innovation .story-image-container__story-link:hover .story-image-container__story-link-arrow {
  transform: translate3d(4px, 0, 0);
}

.mega-menu .story-image-container--innovation .story-image-container__story-link:focus-visible {
  outline: 2px solid #fff;
  outline-offset: 4px;
}

/* Innovation card opts out of the shared hover-blur treatment */
.mega-menu .story-image-container--innovation:hover .story-image {
  filter: none;
}

/* Mobile Navigation Toggle */
.mobile-menu-btn {
  display: none;
  flex-direction: column;
  justify-content: space-between;
  width: 24px;
  height: 18px;
  background: transparent;
  border: none;
  cursor: pointer;
  z-index: 1001;
}

.mobile-menu-btn .bar {
  width: 100%;
  height: 2px;
  background-color: var(--text-primary);
  border-radius: 2px;
  transition: var(--transition-smooth);
}

@media (max-width: 768px) {
  .mobile-menu-btn {
    display: flex;
  }

  .nav-menu {
    position: fixed;
    top: 0;
    right: -100%;
    width: 80%;
    height: 100vh;
    background: var(--bg-primary);
    box-shadow: -10px 0 30px rgba(0, 0, 0, 0.05);
    flex-direction: column;
    justify-content: center;
    transition: var(--transition-smooth);
    padding: 40px;
    z-index: 999;
  }

  .nav-menu.active {
    right: 0;
  }

  .nav-list {
    flex-direction: column;
    gap: 30px;
    width: 100%;
  }

  .mega-menu {
    position: static;
    transform: none;
    opacity: 1;
    visibility: visible;
    box-shadow: none;
    border: none;
    background: transparent;
    padding: 10px 0 0 15px;
    width: 100%;
    display: none;
  }

  .nav-item.active .mega-menu {
    display: block;
  }

  .btn-cta {
    width: 100%;
  }

  /* Hamburguer animations */
  .mobile-menu-btn.active .bar:nth-child(1) {
    transform: translateY(8px) rotate(45deg);
  }

  .mobile-menu-btn.active .bar:nth-child(2) {
    opacity: 0;
  }

  .mobile-menu-btn.active .bar:nth-child(3) {
    transform: translateY(-8px) rotate(-45deg);
  }
}
/* ==========================================
   Ask Expona Fullscreen Dropdown
   ========================================== */
.ask-expona-fullscreen-dropdown {
  position: fixed;
  top: 0;
  left: 0;
  width: 100vw;
  height: 100dvh;
  background: #373742 url(../static/assets/images/latest/grain.png) center center;
  z-index: 2000;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  padding: 40px 0;
  opacity: 0;
  visibility: hidden;
  transform: translateY(-100%);
  transition: opacity 0.4s ease, visibility 0.4s ease, transform 0.5s cubic-bezier(0.16, 1, 0.3, 1);
}

.ask-expona-fullscreen-dropdown.open {
  opacity: 1;
  visibility: visible;
  transform: translateY(0);
  border-bottom: 10px solid;
  -o-border-image: linear-gradient(90deg, #fff9ed 0%, #fff9ed 91.15%) 1;
     border-image: linear-gradient(90deg, #fff9ed 0%, #fff9ed 91.15%) 1;
}

/* Lock page scroll while the Expona dropdown is open — pure CSS, no JS hook */
body:has(.ask-expona-fullscreen-dropdown.open) {
  overflow: hidden;
}

body.home:has(.ask-expona-fullscreen-dropdown.open) {
  overflow: hidden !important;
}

.expona-dropdown-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
}

/* Mobile close arrow — hidden on desktop */
.expona-header-close-btn {
  display: none;
}

.expona-header-close-btn .ib-icon {
  color: #fff;
  transform: rotate(180deg);
}

.expona-dropdown-header .dropdown-logo {
  height: 24px;
  cursor: pointer;
}

.ask-expona-fullscreen-dropdown .expona-dropdown-body {
  flex: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  text-align: center;
  max-width: 904px;
  margin: 0 auto;
}

.ask-expona-fullscreen-dropdown .expona-dropdown-title {
  color: rgba(255, 255, 255, 0.55);
  font-size: 20px;
  line-height: 34px;
  font-weight: 300;
  letter-spacing: 0;
  margin-bottom: 24px;
  transition: all 0.3s ease;
}

.ask-expona-fullscreen-dropdown .expona-input-area {
  margin-bottom: 50px;
  width: 100%;
  position: relative;
}

.ask-expona-fullscreen-dropdown .expona-input-caret {
  position: absolute;
  top: 0;
  left: 50%;
  z-index: 1;
  display: block;
  color: #fff;
  font-size: 18px;
  line-height: 28px;
  opacity: 0.8;
  transform: translateX(-50%);
  animation: blink 1s step-end infinite;
  pointer-events: none;
}

.ask-expona-fullscreen-dropdown .expona-input-area.has-value .expona-input-caret {
  display: none;
}

.ask-expona-fullscreen-dropdown .expona-main-input {
  background: transparent;
  border: none;
  color: #fff;
  caret-color: #fff;
  font-size: 18px;
  font-weight: 300;
  text-align: center;
  width: 100%;
  outline: none;
  font-family: var(--font-primary, "Lexend", sans-serif);
  resize: none;
  overflow-y: auto;
  height: 28px;
  /* Initial height for single line */
  max-height: 120px;
  padding-right: 12px;
}

.ask-expona-fullscreen-dropdown .expona-input-area:not(.has-value) .expona-main-input {
  caret-color: transparent;
}

/* iOS Safari can skip painting an animated textarea placeholder, so the
  visible fake caret is a real .expona-input-caret element instead. */
.ask-expona-fullscreen-dropdown .expona-main-input::-moz-placeholder {
  color: transparent;
  opacity: 0;
}
.ask-expona-fullscreen-dropdown .expona-main-input::placeholder {
  color: transparent;
  opacity: 0;
}

/* Keep the real placeholder hidden; the wrapper caret above remains visible
  while the focused field is empty, which is the iOS Safari path. */
.ask-expona-fullscreen-dropdown .expona-main-input:focus::-moz-placeholder {
  color: transparent;
}
.ask-expona-fullscreen-dropdown .expona-main-input:focus::placeholder {
  color: transparent;
}

@keyframes blink {
  50% {
    opacity: 0;
  }
}
.press-return-container {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 12px;
  margin: 24px auto 0 !important;
  opacity: 0;
  transition: opacity 0.3s ease;
  background: transparent;
  border: none;
  cursor: pointer;
  outline: none;
  padding: 0;
}

.return-key-icon {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  background: #373742;
  border: 1px solid #676775;
  border-radius: 0;
  color: #fff;
  font-size: 14px;
  cursor: pointer;
  transition: background 0.2s ease;
  box-shadow: 0 0 2px 0 rgba(47, 47, 57, 0.2);
}

.press-return-text {
  color: #fff;
  font-size: 14px;
  font-weight: 300;
}

/* Typing Active State */
/* .expona-dropdown-body.typing-active .expona-dropdown-title {
  font-size: 12px;
  opacity: 0.7;
  transition: all 0.3s ease;
} */
.expona-dropdown-body.typing-active .press-return-container {
  display: flex !important;
  opacity: 1;
}

.ask-expona-fullscreen-dropdown .expona-suggestions {
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
  justify-content: center;
}

.ask-expona-fullscreen-dropdown .suggestion-chip {
  background: #2f2f39;
  border: 0;
  color: #fff;
  padding: 12px 16px;
  font-size: 16px;
  line-height: 26px;
  font-weight: 300;
  cursor: pointer;
  box-shadow: 0 0 2px 0 rgba(47, 47, 57, 0.2);
  transition: all 0.3s ease;
}

.ask-expona-fullscreen-dropdown .suggestion-chip:hover {
  background: #26262e;
  color: #fff;
}

.ask-expona-fullscreen-dropdown .expona-dropdown-footer {
  display: flex;
  justify-content: space-between;
  align-items: center;
  position: relative;
}

.powered-by {
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
  color: #7b7b84;
  font-size: 12px;
  cursor: pointer;
}

/* The visible label — sits above the popup box so it reads as the box's
   own footer line (same markup + logo, no duplication) */
.powered-by__label {
  position: relative;
  z-index: 2;
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
}

/* Hover popup — desktop only. Bottom edge sits ~10px above the modal's 10px
   gradient border; the box expands from bottom to top on hover and the label
   shows through at the box's bottom (same markup + logo, no duplication). */
.powered-by__popup {
  position: absolute;
  left: 50%;
  bottom: -30px;
  z-index: 1;
  width: -moz-max-content;
  width: max-content;
  max-width: 320px;
  padding: 20px 20px 62px;
  text-align: center;
  background: #44444f url(../static/assets/images/latest/grain.png) center center;
  box-shadow: 0 0 2px 0 rgba(47, 47, 57, 0.2);
  transform: translateX(-50%);
  clip-path: inset(100% 0 0 0);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: clip-path 0.5s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.3s ease, visibility 0s linear 0.5s;
}

.powered-by:hover .powered-by__popup,
.powered-by:focus-visible .powered-by__popup {
  opacity: 1;
  visibility: visible;
  clip-path: inset(0 0 0 0);
  pointer-events: auto;
  transition-delay: 0s;
}

.powered-by__popup-text {
  margin: 0;
  color: #fff;
  font-family: "Lexend", sans-serif;
  font-size: 16px;
  line-height: 26px;
  font-weight: 300;
  letter-spacing: 0;
  text-align: center;
}

.powered-by .powered-by__popup-text strong {
  color: #ffd0d8;
  font-weight: 400;
}

/* Popup is a desktop-only hover affordance — hidden on tablet and below */
@media (max-width: 1024px) {
  .powered-by__popup {
    display: none;
  }
}
.expona-small-logo {
  height: 12px;
}

.powered-by strong {
  color: #fff;
  font-weight: 500;
}

/* Trapezoid tab with smooth rounded top corners drawn via path() —
   fixed dimensions are required because path() coordinates are absolute.
   Outer box 185×52 carries the gradient border, inner button 181×50
   is the dark fill, leaving a 2px gradient edge on top and both slants.
   The gradient only runs 42px down — the bottom 10px of the edge strip
   is flat dark so the tab merges into the section below. */
.infobeans-up-btn-wrapper {
  margin-left: auto;
  margin-bottom: -50px;
  width: 185px;
  height: 52px;
  padding: 2px 2px 0;
  box-sizing: border-box;
  background: linear-gradient(90deg, #284cba 6%, #7d3ba2 48%, #ea1b3d 94%) top/100% 42px no-repeat, #373742;
  /* Sides at 67° from horizontal → 22px inset per side, 8px top radius */
  clip-path: path("M 0 52 L 18.9 7.4 Q 22 0 30 0 L 155 0 Q 163 0 166.1 7.4 L 185 52 Z");
  position: absolute;
  right: 120px;
  bottom: 0;
}

.infobeans-up-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  background: #373742;
  width: 181px;
  height: 50px;
  clip-path: path("M 0 50 L 18.6 6.4 Q 21.3 0 28.3 0 L 152.7 0 Q 159.7 0 162.4 6.4 L 181 50 Z");
  border: none;
  cursor: pointer;
  transition: background 0.3s ease;
}

.infobeans-up-btn .btn-text-content {
  color: #fff9ed;
  font-size: 14px;
  font-weight: 400;
  letter-spacing: 0.7px;
  display: flex;
  align-items: center;
  gap: 10px;
  text-transform: uppercase;
  transform: translateY(-7px);
}

.infobeans-up-btn:hover {
  background: #373742;
}

.infobeans-up-btn:hover .btn-text-content {
  color: #fff;
}

.infobeans-up-btn .btn-text-content .ib-icon {
  color: #fff;
}

@media (max-width: 767px) {
  .ask-expona-fullscreen-dropdown.open {
    border-bottom: 0;
  }

  .powered-by {
    margin-bottom: -28px;
    margin-left: 0;
    left: 50%;
    transform: translateX(-50%);
  }

  .ask-expona-fullscreen-dropdown .expona-dropdown-body {
    padding: 0 24px;
    margin: 0;
  }

  /* Peek carousel — active chip starts at body's 24px padding,
     next chip peeks all the way to the screen's right edge */
  .ask-expona-fullscreen-dropdown .expona-suggestions {
    flex-wrap: nowrap;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    gap: 12px;
    justify-content: flex-start;
    scrollbar-width: none;
    /* break out of body's right padding so the peek reaches the screen edge */
    margin-right: -24px;
    width: calc(100% + 24px);
    /* snap offset: when scrolled, previous chip's tail shows on the left */
    scroll-padding-left: 12px;
    /* Stop at this row's own ends instead of handing the gesture to the page
       underneath — same fix as .mobile-menu-inner above, for the same reason:
       body:has(.ask-expona-fullscreen-dropdown.open){overflow:hidden} is not
       a dependable touch lock on iOS, and without this, real touch scroll
       chains straight through to the (locked, so immovable) body instead of
       scrolling this row — it reads as the chips not scrolling at all. A
       desktop mouse/trackpad test never hits this path, which is why it only
       shows up on a real device. */
    overscroll-behavior: contain;
    /* No touch-action means the browser has to guess the gesture's axis on
       every touch, so a mostly-vertical scroll of the dropdown that happens
       to start on this row can get read as a horizontal pan instead — the
       chips "steal" the touch. pan-x declares this row's own axis up front:
       horizontal gestures stay here, vertical ones are handed to the
       dropdown body's own pan-y scroll immediately instead of being
       disambiguated per-gesture. */
    touch-action: pan-x;
  }

  .ask-expona-fullscreen-dropdown .expona-suggestions::-webkit-scrollbar {
    display: none;
  }

  .ask-expona-fullscreen-dropdown .suggestion-chip {
    /* active chip width = screen - left padding (24) - right peek (~48) */
    flex: 0 0 calc(100vw - 72px);
    min-width: 0;
    scroll-snap-align: start;
    background: #2f2f39;
    padding: 8px 16px;
    font-size: 14px;
    line-height: 22px;
    min-height: 60px;
    box-sizing: border-box;
    margin: 0;
    text-align: left;
  }

  /* Hide the bottom close button on mobile */
  .infobeans-up-btn-wrapper {
    display: none;
  }

  /* Show the header close arrow on mobile */
  .expona-header-close-btn {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 36px;
    height: 36px;
    background: transparent;
    border: 1px solid #676775 !important;
    border-radius: 0 !important;
    color: #fff !important;
    font-size: 14px;
    cursor: pointer !important;
    transition: background 0.2s ease;
    box-shadow: 0 0 2px 0 rgba(47, 47, 57, 0.2);
  }

  .expona-header-close-btn:hover {
    background: #4a4b57;
  }
}
/* ==========================================
   Ask Expona Chat Interface
   ========================================== */
.expona-chat-interface {
  flex: 1;
  min-height: 0;
  /* lets flex child shrink and scroll */
  display: flex;
  flex-direction: column;
  width: 100%;
  justify-content: center;
  padding-bottom: 80px;
  overflow: hidden;
  padding-top: 30px;
}

.expona-chat-interface .chat-container {
  display: grid;
  grid-template-columns: 1fr 40px 1fr;
  align-content: start;
  width: 100%;
  /* Also carries .custom-container (css/custom.css), which sets its own
     max-width — override it so the box below can actually reach 100%. */
  max-width: none;
  /* Full-width scroll box (not max-width + margin auto) so its own
     scrollbar rides the true right edge of the viewport, like the body
     scrollbar — the 1076px content column is centered via padding instead.
     flex: 1 + min-height: 0 (no max-height) lets it fill all the vertical
     space .expona-chat-interface has available, so the scrollbar also
     spans that full height rather than a shorter fixed box. */
  padding: 0 max(20px, (100% - 1076px) / 2) 24px;
  margin: 0 auto;
  position: relative;
  row-gap: 60px;
  flex: 1;
  min-height: 0;
  overflow: hidden auto;
  scrollbar-gutter: stable;
}

/* Custom Scrollbar for Chat Container */
.expona-chat-interface .chat-container::-webkit-scrollbar {
  width: 6px;
}

.expona-chat-interface .chat-container::-webkit-scrollbar-track {
  background: transparent;
}

.expona-chat-interface .chat-container::-webkit-scrollbar-thumb {
  background: rgba(255, 255, 255, 0.2);
  border-radius: 4px;
}

.expona-chat-interface .chat-container::-webkit-scrollbar-thumb:hover {
  background: rgba(255, 255, 255, 0.4);
}

/* Chat timeline line — two pure-CSS layers, no JS measurement:
   1. Baseline on the container: full visible height from the very start.
   2. Node segments: live inside the scrolled content, so the line keeps
      covering rows that grow past the first viewport (streamed answers).
   Both layers use the SAME pre-blended solid color — #ffd0d8 at 20% alpha
   flattened over the dropdown bg #373742 — so overlaps don't brighten. */
.expona-chat-interface .chat-container::before {
  content: "";
  position: absolute;
  top: 0;
  left: 50%;
  width: 1px;
  height: calc(100% - 4px);
  /* full visible chat height, minus the 4px offset */
  background: rgb(95, 86, 96);
  transform: translate(-50%, 4px);
}

/* Per-row segment = own row + row-gap, joining seamlessly with the next node */
.expona-chat-interface .chat-node-center::before {
  content: "";
  position: absolute;
  top: 4px;
  left: 20px;
  z-index: -1;
  /* behind the node icon, inside the cell's stacking context */
  width: 1px;
  height: calc(100% + 60px);
  /* row height + desktop row-gap */
  background: rgb(95, 86, 96);
  transform: translateX(-50%);
}

/* Last node of the chat: end the line at the bottom of its own row */
.expona-chat-interface .chat-node-center:nth-last-child(2)::before {
  height: calc(100% - 4px);
}

.expona-chat-interface .chat-message-left {
  text-align: left;
  padding-right: 20px;
}

.expona-chat-interface .chat-message-right {
  text-align: left;
  padding-left: 20px;
}

.expona-chat-interface .chat-node-center {
  position: relative;
  /* anchor for the ::before line segment */
  display: flex;
  justify-content: center;
  align-items: flex-start;
  z-index: 1;
}

.expona-chat-interface .node-icon {
  width: 12px;
  height: 12px;
  margin-top: 4px;
  margin-left: 0;
}

.expona-chat-interface .node-icon.empty {
  border: 1px solid #ffd0d8;
  background: #373742;
}

.expona-chat-interface .node-icon.filled {
  background: #ffd0d8;
  /* Pinkish color matching the theme */
}

.expona-chat-interface .chat-meta {
  color: #ffd0d8;
  font-size: 11px;
  letter-spacing: 1px;
  margin-bottom: 12px;
  text-transform: uppercase;
}

.expona-chat-interface .chat-text {
  color: #fff;
  font-size: 18px;
  line-height: 30px;
  font-weight: 300;
  word-break: break-word;
}

@media (max-width: 1024px) {
  .expona-chat-interface .chat-text {
    font-size: 14px;
    line-height: 22px;
  }
}
.expona-chat-interface .expona-answer-wrapper .chat-text {
  font-weight: 400;
}

.expona-chat-interface .expona-answer-wrapper .chat-text a {
  color: #ffd0d8;
  text-decoration: underline;
}

.expona-chat-interface .typing-indicator {
  display: flex;
  align-items: center;
  gap: 6px;
  margin-top: 6px;
}

.expona-chat-interface .typing-indicator span {
  display: block;
  width: 6px;
  height: 6px;
  background-color: #ffd0d8;
  animation: typing-bounce 1.4s infinite ease-in-out both;
}

.expona-chat-interface .typing-indicator span:nth-child(1) {
  animation-delay: -0.32s;
}

.expona-chat-interface .typing-indicator span:nth-child(2) {
  animation-delay: -0.16s;
}

@keyframes typing-bounce {
  0%, 80%, 100% {
    transform: scale(0.5);
    opacity: 0.3;
  }
  40% {
    transform: scale(1);
    opacity: 1;
  }
}
/* .expona-chat-interface .expona-answer-wrapper {
  max-height: 40vh;
  overflow-y: auto;
  padding-right: 16px;
}

.expona-chat-interface .expona-answer-wrapper::-webkit-scrollbar {
  width: 6px;
}
.expona-chat-interface .expona-answer-wrapper::-webkit-scrollbar-track {
  background: transparent;
}
.expona-chat-interface .expona-answer-wrapper::-webkit-scrollbar-thumb {
  background: rgba(255, 255, 255, 0.2);
  border-radius: 4px;
}
.expona-chat-interface .expona-answer-wrapper::-webkit-scrollbar-thumb:hover {
  background: rgba(255, 255, 255, 0.4);
} */
.expona-chat-interface .answer-actions {
  display: flex;
  gap: 16px;
  margin-top: 20px;
}

.expona-chat-interface .answer-action-btn {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 24px;
  height: 24px;
  background: transparent;
  border: none;
  cursor: pointer;
  opacity: 0.45;
  transition: opacity 0.2s ease;
}

.expona-chat-interface .answer-action-btn:hover {
  opacity: 1;
}

.expona-chat-interface .action-icon {
  width: 24px;
  height: 24px;
  display: block;
}

.expona-chat-interface .chat-footer-hint {
  position: absolute;
  bottom: 80px;
  left: 50%;
  transform: translateX(-50%);
  color: rgba(255, 255, 255, 0.5);
  font-size: 18px;
  line-height: 26px;
  font-weight: 300;
}

.expona-chat-interface .hint-mobile {
  display: none;
}

.expona-chat-interface .new-question-wrapper {
  /* display: inline-flex; */
  /* flex-direction: column; */
  /* align-items: flex-start; */
  max-width: 100%;
  /* Plays automatically the moment the row is injected into the chat, so the
     input never flashes in at full opacity before JS can class it. The
     textarea and return button then stagger in on top of this (see below). */
  animation: new-question-in 0.6s cubic-bezier(0.16, 1, 0.3, 1) both;
  will-change: transform, opacity, filter;
}

@keyframes new-question-in {
  from {
    opacity: 0;
    transform: translate3d(0, 22px, 0) scale3d(0.96, 0.96, 1);
    filter: blur(8px);
  }
  to {
    opacity: 1;
    transform: translate3d(0, 0, 0) scale3d(1, 1, 1);
    filter: blur(0);
  }
}
/* Staggered children — each lifts in just behind the wrapper itself. */
@keyframes new-question-child-in {
  from {
    opacity: 0;
    transform: translate3d(0, 10px, 0);
  }
  to {
    opacity: 1;
    transform: translate3d(0, 0, 0);
  }
}
.expona-chat-interface .new-question-input {
  background: transparent;
  border: none;
  outline: none;
  color: #fff;
  font-size: 18px;
  font-weight: 300;
  line-height: 1.5;
  width: 100%;
  min-width: 250px;
  resize: none;
  overflow-y: auto;
  font-family: var(--font-primary, "Lexend", sans-serif);
  animation: new-question-child-in 0.5s cubic-bezier(0.16, 1, 0.3, 1) 0.12s both;
  /* height: 28px;
  max-height: 120px;
  padding-right: 12px; */
}

/* Custom Scrollbar for New Question Input */
.expona-chat-interface .new-question-input::-webkit-scrollbar {
  width: 6px;
}

.expona-chat-interface .new-question-input::-webkit-scrollbar-track {
  background: transparent;
}

.expona-chat-interface .new-question-input::-webkit-scrollbar-thumb {
  background: rgba(255, 255, 255, 0.2);
  border-radius: 4px;
}

.expona-chat-interface .new-question-input::-webkit-scrollbar-thumb:hover {
  background: rgba(255, 255, 255, 0.4);
}

.expona-chat-interface .new-question-return {
  margin: 12px 0 0 !important;
  /* Plain `opacity: 1` (not !important) still beats .press-return-container's
     `opacity: 0` on specificity — and unlike !important it lets the keyframes
     below actually drive the fade. */
  opacity: 1;
  animation: new-question-child-in 0.5s cubic-bezier(0.16, 1, 0.3, 1) 0.26s both;
}

@media (max-width: 768px) {
  .expona-chat-interface {
    padding-bottom: 0;
  }

  .expona-chat-interface .chat-container {
    grid-template-columns: 30px 1fr;
    grid-auto-flow: dense;
    row-gap: 40px;
  }

  .expona-chat-interface .expona-answer-wrapper {
    max-height: none;
  }

  /* Baseline: container padding-left 20px + icon axis 6px inside the node cell */
  .expona-chat-interface .chat-container::before {
    left: 26px;
  }

  .expona-chat-interface .chat-node-center::before {
    left: 6px;
    /* align with the absolutely positioned node icon */
    height: calc(100% + 40px);
    /* row height + mobile row-gap */
  }

  .expona-chat-interface .chat-message-left,
.expona-chat-interface .chat-message-right {
    text-align: left;
    padding: 0;
  }

  .expona-chat-interface .chat-node-center {
    grid-column: 1;
    position: relative;
    justify-content: flex-start;
  }

  .expona-chat-interface .chat-node-center .node-icon {
    position: absolute;
    left: 6px;
    margin-left: 0;
    transform: translateX(-50%);
  }

  .expona-chat-interface .node-icon {
    width: 12px;
    height: 12px;
    margin-top: 4px;
  }

  .expona-chat-interface .node-icon.empty {
    border: 1px solid #ffd0d8;
    background: #373742;
  }

  .expona-chat-interface .chat-col-node {
    grid-column: 1;
  }

  .expona-chat-interface .chat-col-content {
    grid-column: 2;
  }

  .expona-chat-interface .chat-col-empty {
    display: none;
  }

  .expona-chat-interface .expona-answer-wrapper .chat-text {
    font-weight: 300;
  }

  .expona-chat-interface .chat-meta {
    color: #ffd0d8;
    font-size: 12px;
    line-height: 18px;
    letter-spacing: 1.8px;
    margin-bottom: 12px;
    text-transform: none;
  }

  .expona-chat-interface .chat-footer-hint {
    position: relative;
    bottom: auto;
    left: auto;
    transform: none;
    margin-top: 20px;
    margin-bottom: 20px;
    text-align: left;
    padding-left: 48px;
    font-size: 16px;
    line-height: 26px;
  }

  .expona-chat-interface .hint-desktop {
    display: none;
  }

  .expona-chat-interface .hint-mobile {
    display: inline;
  }
}
/* Ask Expona reCAPTCHA Inline Container */
#inline-captcha-container {
  display: none;
  flex: 1;
  align-items: center;
  justify-content: center;
  text-align: center;
}

#inline-captcha-container .captcha-fallback p {
  color: rgba(255, 255, 255, 0.7);
  margin-bottom: 20px;
}

/* Responsive Hamburger & Mobile Menu Container */
.main-header .hamburger-btn {
  display: none;
  background: none;
  border: none;
  cursor: pointer;
  flex-direction: column;
  justify-content: space-between;
  align-items: flex-end;
  width: 28px;
  height: 20px;
  padding: 0;
  z-index: 1002;
  /* Above the mobile menu container */
}

.hamburger-line {
  display: block;
  width: 100%;
  height: 2px;
  background-color: var(--text-primary);
  transition: all 0.3s ease;
}

.hamburger-line:nth-child(3) {
  width: 80%;
}

/* Change hamburger color when header is dark */
.main-header:is(.header-dark, .mega-menu-open) .hamburger-line {
  background-color: #fff;
}

/* Open state for hamburger */
.main-header .hamburger-btn.open .hamburger-line {
  background-color: #fff !important;
}

.main-header .hamburger-btn.open .hamburger-line:nth-child(1) {
  transform: translateY(9px) rotate(45deg);
}

.main-header .hamburger-btn.open .hamburger-line:nth-child(2) {
  opacity: 0;
}

.main-header .hamburger-btn.open .hamburger-line:nth-child(3) {
  transform: translateY(-9px) rotate(-45deg);
}

.mobile-menu-container {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  /* dvh with a vh fallback: on mobile browsers 100vh is the LARGE viewport —
     the height the page has once the address bar has retracted — so a drawer
     sized in vh runs under the browser chrome and its last rows and footer are
     unreachable, which is the drawer "scrolling differently" on a phone than in
     a narrow desktop window. dvh tracks the viewport that is actually visible. */
  height: 100vh;
  /* stylelint-disable-next-line */
  height: 100dvh;
  background: #373742 url(../static/assets/images/latest/grain.png) center center;
  z-index: 1003;
  /* Above everything */
  visibility: hidden;
  transform: translateX(100%);
  display: flex;
  flex-direction: column;
  padding: 0;
  /* The slide is the whole effect — no opacity in it. `transition: all` used to
     fade the panel out at the same time as it left, so for the entire 0.4s it
     was a semi-transparent sheet still covering the screen and the page read
     straight through it. A drawer slides away; it doesn't dissolve.

     visibility instead of opacity for the resting state, flipped at the END of
     the close so the panel stays painted for the whole slide — flipping it on
     frame one would take the panel off screen before the slide could be seen.
     It also keeps the parked panel out of the accessibility tree and out of
     the layout's overflow, which opacity: 0 alone would not. */
  transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1), visibility 0s linear 0.4s;
}

.mobile-menu-container .mobile-menu-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 24px;
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}

.mobile-menu-container .mobile-logo-img {
  height: 24px;
  width: auto;
}

.mobile-menu-container .mobile-menu-actions {
  display: flex;
  align-items: center;
  gap: 16px;
}

/* ================================================
   Language Picker — Mobile (.mobile-menu-container)
   Always dark; no media query needed — the container
   itself is mobile-only (hidden on desktop).
   ================================================ */
.mobile-menu-container .lang-picker {
  position: relative;
}

.mobile-menu-container .lang-picker__trigger {
  display: flex;
  align-items: center;
  gap: 10px;
  background: none;
  cursor: pointer;
  padding: 6px 10px;
  color: #fff;
  border: 0;
  font-family: var(--font-primary);
  font-size: 18px;
  font-weight: 300;
  line-height: 30px;
}

.mobile-menu-container .lang-picker.is-open .lang-picker__trigger {
  background: #2f2f39;
}

.mobile-menu-container .lang-picker__globe,
.mobile-menu-container .lang-picker__caret {
  color: #fff;
  flex-shrink: 0;
  transition: color 0.2s ease;
}

.mobile-menu-container .lang-picker__trigger:hover .lang-picker__globe,
.mobile-menu-container .lang-picker.is-open .lang-picker__globe {
  color: #ea1b3d;
}

.mobile-menu-container .lang-picker__dropdown {
  display: none;
  position: absolute;
  top: 100%;
  right: 0;
  background: #2f2f39;
  border: 0;
  border-top: none;
  border-radius: 0;
  padding: 4px 4px 6px;
  min-width: 100%;
  flex-direction: column;
  z-index: 200;
}

.mobile-menu-container .lang-picker.is-open .lang-picker__dropdown {
  display: flex;
}

.mobile-menu-container .lang-picker__opt.is-active {
  display: none;
}

.mobile-menu-container .lang-picker__opt {
  display: flex;
  align-items: center;
  gap: 8px;
  background: none;
  border: none;
  cursor: pointer;
  padding: 7px 10px;
  font-family: var(--font-primary);
  font-size: 18px;
  font-weight: 300;
  line-height: 30px;
  color: #fff;
  width: 100%;
  text-align: left;
}

.mobile-menu-container .lang-picker__opt::before {
  content: "";
  width: 13px;
  height: 13px;
  border-radius: 50%;
  border: 1.5px solid rgba(255, 255, 255, 0.4);
  flex-shrink: 0;
}

.mobile-menu-container .lang-picker__opt:hover {
  background: rgba(255, 255, 255, 0.08);
}

.mobile-menu-container .mobile-close-btn {
  background: rgba(255, 255, 255, 0);
  border: 1px solid rgba(255, 255, 255, 0.2);
  color: #fff;
  width: 40px;
  height: 40px;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
  transition: all 0.3s ease;
}

.mobile-menu-container .mobile-close-btn:hover {
  background: rgba(255, 255, 255, 0.2);
}

.mobile-menu-container.active {
  visibility: visible;
  transform: translateX(0);
  /* Opening: painted from frame zero so the slide-in is visible too. */
  transition: transform 0.4s cubic-bezier(0.4, 0, 0.2, 1), visibility 0s linear 0s;
}

/* ── Drawer content — settles in behind the slide ───────────────────────────
   The panel arriving as one rigid block is what made it feel flat: everything
   inside was already in its final position before the drawer had finished
   moving, so there was nothing to watch once it landed. Each row now carries
   the last of the distance itself, entering from the same direction the panel
   came from and landing just after it does.

   Same construction as the mega menu at the top of this file: both directions
   are plain transitions, and a transition takes its timing from the state it
   is heading TOWARDS — so the staggered entry delays live on the .active rules
   and the (deliberately undelayed) exit lives on the base rules. Closing is
   quick and unstaggered on purpose: on the way out the drawer itself is the
   movement, and a reversed stagger would just hold the eye on a panel that has
   already left. */
.mobile-menu-container .mobile-menu-header,
.mobile-menu-container .mobile-nav-item,
.mobile-menu-container .mobile-menu-footer {
  opacity: 0;
  transform: translate3d(18px, 0, 0);
  /* Closing: all together, and gone before the panel is. */
  transition: opacity 0.14s ease 0s, transform 0.14s ease 0s;
}

.mobile-menu-container.active .mobile-menu-header,
.mobile-menu-container.active .mobile-nav-item,
.mobile-menu-container.active .mobile-menu-footer {
  opacity: 1;
  transform: translate3d(0, 0, 0);
  /* Opening: hangs back until the drawer is on its way, then follows it in. */
  transition: opacity 0.35s ease 0.1s, transform 0.35s cubic-bezier(0.16, 1, 0.3, 1) 0.1s;
}

/* The stagger. Written out per position because this is plain CSS with no loop
   available — eight covers the nav comfortably, and any item past the eighth
   simply shares the last step rather than breaking. */
.mobile-menu-container.active .mobile-nav-item:nth-child(1) {
  transition-delay: 0.15s;
}

.mobile-menu-container.active .mobile-nav-item:nth-child(2) {
  transition-delay: 0.2s;
}

.mobile-menu-container.active .mobile-nav-item:nth-child(3) {
  transition-delay: 0.25s;
}

.mobile-menu-container.active .mobile-nav-item:nth-child(4) {
  transition-delay: 0.3s;
}

.mobile-menu-container.active .mobile-nav-item:nth-child(5) {
  transition-delay: 0.35s;
}

.mobile-menu-container.active .mobile-nav-item:nth-child(6) {
  transition-delay: 0.4s;
}

.mobile-menu-container.active .mobile-nav-item:nth-child(7) {
  transition-delay: 0.45s;
}

.mobile-menu-container.active .mobile-nav-item:nth-child(n+8) {
  transition-delay: 0.5s;
}

.mobile-menu-container.active .mobile-menu-footer {
  transition-delay: 0.34s;
}

@media (prefers-reduced-motion: reduce) {
  .mobile-menu-container,
.mobile-menu-container.active,
.mobile-menu-container .mobile-menu-header,
.mobile-menu-container .mobile-nav-item,
.mobile-menu-container .mobile-menu-footer,
.mobile-menu-container.active .mobile-menu-header,
.mobile-menu-container.active .mobile-nav-item,
.mobile-menu-container.active .mobile-menu-footer {
    transition: none;
    transition-delay: 0s;
  }
}
.mobile-menu-container .mobile-menu-inner {
  width: 100%;
  flex: 1;
  display: flex;
  flex-direction: column;
  /* x then y. Scrolling only on y: the rows enter from 18px to the right, and
     leaving x to compute to auto (which it would if only overflow-y were set)
     is enough transform overflow to flash a horizontal scrollbar mid-animation. */
  overflow: hidden auto;
  /* Stop at this list's own ends instead of handing the leftover scroll to the
     page underneath. The JS lock (js/shared.js) is what normally prevents that,
     but scroll chaining is a separate mechanism from overflow — and on iOS,
     where overflow:hidden on the root is not a dependable touch lock, chaining
     is exactly how the page ends up moving behind an open drawer. */
  overscroll-behavior: contain;
}

.mobile-menu-container .mobile-menu-footer {
  padding: 24px;
  margin-top: auto;
  margin-bottom: 40px;
}

.mobile-menu-container .mobile-bottom-card {
  background: #2a2a32;
  padding: 24px;
}

.mobile-menu-container .mobile-bottom-card p {
  font-size: 14px;
  color: #fff;
  font-weight: 300;
  margin-bottom: 10px;
  line-height: 1.5;
}

.mobile-menu-container .mobile-bottom-card .cta {
  color: #fff;
  text-decoration: underline;
  font-size: 14px;
  font-weight: 500;
  letter-spacing: 0.5px;
  text-transform: uppercase;
}

@media (max-width: 1024px) {
  .header-container .nav-menu,
.header-container .cta-section {
    display: none;
    /* Hide default desktop menu on tablet/mobile */
  }

  .main-header .hamburger-btn {
    display: flex;
  }

  .hamburger-btn.open .hamburger-line:nth-child(3) {
    width: 100%;
  }
}
/* Mobile Accordion Menu Styles */
.mobile-menu-container .mobile-nav-list {
  list-style: none;
  padding: 0;
  margin: 0;
}

.mobile-menu-container .mobile-nav-item {
  border-bottom: 1px solid rgba(255, 255, 255, 0.05);
}

.mobile-menu-container .mobile-nav-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 20px 24px;
  cursor: pointer;
  color: #fff;
  font-size: 24px;
  font-weight: 300;
  transition: background 0.3s ease;
}

.mobile-menu-container .mobile-nav-icon {
  font-size: 16px;
  color: rgb(255, 255, 255);
  transition: transform 0.3s ease;
}

.mobile-menu-container .mobile-nav-item.active .mobile-nav-icon {
  transform: rotate(180deg);
}

.mobile-menu-container .mobile-nav-content {
  display: none;
  padding: 10px 40px 20px;
  border-top: 1px solid rgba(255, 255, 255, 0.1);
}

.mobile-menu-container .mobile-submenu-group {
  margin-top: 24px;
}

.mobile-menu-container .mobile-submenu-group:first-child {
  margin-top: 10px;
}

.mobile-menu-container .mobile-submenu-heading {
  color: #ffd0d8;
  font-size: 12px;
  text-transform: uppercase;
  letter-spacing: 1.5px;
  margin-bottom: 8px;
  font-weight: 600;
}

.mobile-menu-container .mobile-submenu-list {
  list-style: none;
  padding: 0;
  margin: 0;
}

.mobile-menu-container .mobile-submenu-list li {
  border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}

.mobile-menu-container .mobile-submenu-list li:last-child {
  border-bottom: none;
}

.mobile-menu-container .mobile-submenu-list a {
  display: block;
  padding: 12px 0;
  color: #fff;
  font-size: 18px;
  text-decoration: none;
  font-weight: 300;
  transition: color 0.3s ease;
}

/* hover: hover only — on touch (iPhone/Safari) :hover sticks to whatever sits
   under the finger and, as the accordion slides open under a resting fingertip,
   walks down the list one link at a time. With `transition: color` on the base
   rule that reads as each option flashing red on its own, unprompted. Desktop
   pointers still get the hover colour. */
@media (hover: hover) {
  .mobile-menu-container .mobile-submenu-list a:hover {
    color: var(--accent-red);
  }
}
/* Tap feedback. The global -webkit-tap-highlight-color is off (css/custom.css),
   so a tap on a submenu option otherwise registers with no visual confirmation
   The option turns red on press
   (:active) and stays red until the next page loads (.is-selected, stamped by
   js/shared.js) so the visitor can see which item they picked. No highlight
   box; accordion header rows are left as-is. */
.mobile-menu-container .mobile-submenu-list a:active,
.mobile-menu-container .mobile-submenu-list a.is-selected {
  color: var(--accent-red);
  /* Snap straight to crimson — the base rule's `transition: color 0.3s` was
     animating white → red through its pale midpoint, and on a quick tap +
     page change that pinkish in-between frame was all the visitor saw ("looks
     peach"). Instant on; the fade-back to white when the class clears still
     rides the base transition. */
  transition: none;
}

/* Language (hide old toggle at mobile — lang-picker is always visible) */
.main-header .lang-toggle,
.mobile-menu-container .lang-toggle {
  display: none;
}

/* Expona Export Modal Styles */
/* Open/close is driven entirely by the .is-open class — no display toggling in
   JS, so removing the class replays the same dissolve/scale in reverse.
   `visibility` is what keeps the closed modal inert; it flips instantly on open
   but waits out the transition on close so the exit stays visible. */
.expona-export-modal {
  position: fixed;
  inset: 0;
  z-index: 2001;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 1.5rem;
  visibility: hidden;
  pointer-events: none;
  transition: visibility 0s linear 0.45s;
}

.expona-export-modal.is-open {
  visibility: visible;
  pointer-events: auto;
  transition: visibility 0s linear 0s;
}

.expona-export-modal__backdrop {
  position: absolute;
  inset: 0;
  background: rgba(47, 47, 57, 0.75);
  /* Frosts the page behind the modal so body copy underneath is unreadable.
     Blurs in alongside the tint rather than snapping on. */
  backdrop-filter: blur(0) saturate(100%);
  -webkit-backdrop-filter: blur(0) saturate(100%);
  transition: opacity 0.45s cubic-bezier(0.16, 1, 0.3, 1), backdrop-filter 0.45s cubic-bezier(0.16, 1, 0.3, 1), -webkit-backdrop-filter 0.45s cubic-bezier(0.16, 1, 0.3, 1);
  cursor: pointer;
  opacity: 0;
}

.expona-export-modal.is-open .expona-export-modal__backdrop {
  opacity: 1;
  backdrop-filter: blur(5px) saturate(120%);
  -webkit-backdrop-filter: blur(5px) saturate(120%);
}

.expona-export-modal__dialog {
  clip-path: polygon(24px 0, 100% 0, 100% calc(100% - 24px), calc(100% - 24px) 100%, 0 100%, 0 24px);
  position: relative;
  width: 100%;
  max-width: 32.5rem;
  max-height: calc(100vh - 3rem);
  padding: 3rem;
  background: #fff9ed;
  overflow-y: auto;
  opacity: 0;
  /* Collapsed to a single point at the centre of the viewport — opening grows
     it out from that point, closing swallows it back into it. The blur makes
     it read as a dissolve rather than a plain resize.

     Easing is declared per direction: this rule is what plays on CLOSE (a
     quick accelerating collapse), .is-open below is what plays on OPEN. A
     springy curve is only safe on the way out — reversing an overshoot into
     scale 0 would push it negative and flip the dialog inside out. */
  transform: scale3d(0, 0, 1);
  transform-origin: center center;
  filter: blur(12px);
  transition: opacity 0.4s cubic-bezier(0.4, 0, 1, 1), transform 0.4s cubic-bezier(0.5, 0, 0.75, 0), filter 0.4s cubic-bezier(0.4, 0, 1, 1);
  will-change: transform, opacity, filter;
}

.expona-export-modal.is-open .expona-export-modal__dialog {
  opacity: 1;
  transform: scale3d(1, 1, 1);
  filter: blur(0);
  transition: opacity 0.45s cubic-bezier(0.16, 1, 0.3, 1), transform 0.55s cubic-bezier(0.34, 1.56, 0.64, 1), filter 0.45s cubic-bezier(0.16, 1, 0.3, 1);
}

.expona-export-modal__close {
  position: absolute;
  top: 1rem;
  right: 1rem;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 2rem;
  height: 2rem;
  padding: 0;
  color: #373742;
  background: none;
  border: none;
  opacity: 0.7;
  cursor: pointer;
  transition: opacity 0.25s ease;
}

.expona-export-modal__close .ib-icon {
  filter: brightness(0.24);
}

.expona-export-modal__close:hover, .expona-export-modal__close:focus-visible {
  opacity: 1;
}

.expona-export-modal #exponaExportTitle {
  font-family: "Lexend", -apple-system, blinkmacsystemfont, "Segoe UI", roboto, sans-serif;
  font-weight: 500;
  font-size: max(1.5rem, 12px);
  line-height: 1.4166666667;
  letter-spacing: -0.04em;
  margin: 0 0 0.5rem;
  padding-right: 2.5rem;
  color: #373742;
}

.expona-export-modal p {
  font-family: "Lexend", -apple-system, blinkmacsystemfont, "Segoe UI", roboto, sans-serif;
  font-weight: 300;
  font-size: max(1rem, 12px);
  line-height: 1.625;
  letter-spacing: 0;
  margin: 0;
  color: #676775;
}

.expona-export-modal__label {
  font-family: "Lexend", -apple-system, blinkmacsystemfont, "Segoe UI", roboto, sans-serif;
  font-weight: 300;
  font-size: max(1rem, 12px);
  line-height: 1.625;
  letter-spacing: 0;
  display: block;
  margin: 1.5rem 0 0.5rem;
  color: #373742;
}

.expona-export-modal__required {
  color: #373742;
}

.expona-export-modal #exponaExportEmail {
  display: block;
  width: 100%;
  height: 3.5rem;
  margin: 0 0 2rem;
  padding: 1rem;
  background: #fff;
  border: 0.63px solid #e6e6ed;
  border-radius: 0;
  outline: none;
  font-family: "Lexend", -apple-system, blinkmacsystemfont, "Segoe UI", roboto, sans-serif;
  font-weight: 300;
  font-size: max(1rem, 12px);
  line-height: 1.625;
  letter-spacing: 0;
  color: #373742;
  transition: border-color 0.25s ease;
}

.expona-export-modal #exponaExportEmail::-moz-placeholder {
  color: #676775;
}

.expona-export-modal #exponaExportEmail::placeholder {
  color: #676775;
}

.expona-export-modal #exponaExportEmail:focus {
  border-color: #373742;
}

.expona-export-modal__actions {
  display: flex;
  align-items: center;
  gap: 1.5rem;
}

.expona-export-modal__actions .cell {
  flex: 0 0 auto;
}

.expona-export-modal__actions .ib-btn--primary {
  min-width: 8.75rem;
}

.expona-export-modal #exponaExportLoadingState,
.expona-export-modal #exponaExportSuccessState,
.expona-export-modal #exponaExportErrorState {
  padding: 1.5rem 0;
  text-align: center;
}

.expona-export-modal #exponaExportLoadingState p,
.expona-export-modal #exponaExportSuccessState p,
.expona-export-modal #exponaExportErrorState p {
  font-family: "Lexend", -apple-system, blinkmacsystemfont, "Segoe UI", roboto, sans-serif;
  font-weight: 300;
  font-size: max(1.125rem, 12px);
  line-height: 1.6666666667;
  letter-spacing: 0;
  color: #373742;
}

.expona-export-modal #exponaExportErrorMsg {
  color: #ea1b3d;
}

.expona-export-modal #exponaExportRetry {
  margin-top: 1rem;
  padding: 0;
  font-family: "Lexend", -apple-system, blinkmacsystemfont, "Segoe UI", roboto, sans-serif;
  font-weight: 600;
  font-size: max(0.875rem, 12px);
  line-height: 1.5714285714;
  letter-spacing: 0;
  color: #ea1b3d;
  background: none;
  border: none;
  text-decoration: underline;
  text-underline-offset: 4px;
  cursor: pointer;
}

@media (max-width: 1024px) {
  .expona-export-modal {
    padding: 1rem;
  }

  .expona-export-modal__dialog {
    clip-path: polygon(20px 0, 100% 0, 100% calc(100% - 20px), calc(100% - 20px) 100%, 0 100%, 0 20px);
    padding: 2.5rem 1.5rem 2rem;
  }

  .expona-export-modal #exponaExportTitle {
    font-family: "Lexend", -apple-system, blinkmacsystemfont, "Segoe UI", roboto, sans-serif;
    font-weight: 400;
    font-size: max(1.25rem, 12px);
    line-height: 1.4;
    letter-spacing: 0;
  }

  .expona-export-modal__label {
    margin-top: 1rem;
  }

  .expona-export-modal #exponaExportEmail {
    margin-bottom: 1.5rem;
  }

  .expona-export-modal__actions {
    flex-direction: column-reverse;
    gap: 1rem;
  }

  .expona-export-modal__actions .cell {
    display: flex;
    justify-content: center;
    width: 100%;
  }

  .expona-export-modal__actions .ib-btn--primary,
.expona-export-modal__actions .ib-btn--primary .ib-btn__inner {
    width: 100%;
  }
}
/* ==========================================
   12. Expona Fold
   ========================================== */
.expona-footer-parent.combined-fold {
  height: auto;
  min-height: 100vh;
  flex-direction: column;
  overflow: visible;
  padding-top: 0;
  justify-content: flex-start;
  align-items: stretch;
  position: relative;
}

.expona-footer-parent .expona-section {
  background: linear-gradient(90deg, #20212a 0%, #22242a 100%);
  color: #fff;
  display: flex;
  align-items: center;
  overflow: hidden;
  position: relative;
}

/* .expona-footer-parent .expona-section::before {
  content: "";
  position: absolute;
  inset: 0;
  background-image: url(../assets/images/grain.png);
  background-repeat: repeat;
  background-size: cover;
  mix-blend-mode: normal;
  opacity: 1;
  pointer-events: none;
  z-index: 2;
} */
.expona-footer-parent .expona-container {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
  position: relative;
}

.expona-footer-parent .expona-content-left {
  flex: 1;
  max-width: 752px;
  padding-right: 40px;
  z-index: 1;
}

.expona-footer-parent .expona-content-right {
  /* flex: 1;
  display: flex;
  justify-content: flex-end;
  height: 80%;
  */
  height: 625px;
  /* position: absolute;
  left: 0;
  bottom: -220px; */
}

.expona-footer-parent .expona-video {
  /* width: 100%; */
  /* max-width: 500px;  */
  /* height: auto;
  object-fit: contain; */
  /* border-radius: 20px; */
  position: absolute;
  right: 0;
  bottom: -49px;
  border: 0;
  outline: 0;
  /* Fades the left/right edges to transparent so the section's dark
     background shows through instead of a hard video-rectangle seam. */
  -webkit-mask-image: linear-gradient(to right, transparent 0%, #000 12%, #000 88%, transparent 100%);
          mask-image: linear-gradient(to right, transparent 0%, #000 12%, #000 88%, transparent 100%);
  -webkit-mask-repeat: no-repeat;
          mask-repeat: no-repeat;
}

.expona-footer-parent .expona-title {
  font-size: 59px;
  font-weight: 200;
  margin-bottom: 32px;
  line-height: 78px;
  letter-spacing: -2.36px;
}

.expona-footer-parent .expona-title strong {
  font-weight: 300;
}

.expona-footer-parent .expona-input-wrapper {
  position: relative;
  width: 100%;
  background-color: #fff9ed;
  display: flex;
  align-items: center;
  padding: 0 16px 0 0;
}

.expona-footer-parent .expona-input {
  flex: 1;
  background: transparent;
  border: none;
  font-size: 20px;
  color: var(--text-primary);
  padding: 15px 16px;
  line-height: 34px;
  font-weight: 300;
  outline: none;
}

.expona-footer-parent .expona-input::-moz-placeholder {
  color: #373742;
}

.expona-footer-parent .expona-input::placeholder {
  color: #373742;
}

.expona-footer-parent .expona-submit {
  background: transparent;
  border: none;
  color: var(--accent-red);
  font-size: 20px;
  cursor: pointer;
  padding: 10px;
  transition: transform 0.3s ease;
}

.expona-footer-parent .expona-submit:hover {
  transform: scale(1.1);
}

.expona-footer-parent .expona-input-border {
  position: absolute;
  bottom: 0;
  left: 0;
  height: 4px;
  width: 100%;
  background: linear-gradient(90deg, #284cba 0%, #ea1b3d 100%);
}

/* ==========================================
   13. Footer Fold
   ========================================== */
.expona-footer-parent .site-footer {
  width: 100%;
  /* Was #373742 (the body-text charcoal, --text-primary) — a visibly lighter,
     more purple gray than .expona-section directly above it (#20212a family),
     producing a seam where the fold changes color. #20212a matches that
     section and is the "deepest dark, used in footer" tone documented in
     CLAUDE.md's color tokens. */
  background-color: #20212a;
  color: #e6e6ed;
  display: flex;
  flex-direction: column;
  flex: 1;
  padding: 0;
  transition: padding 0.5s ease, background-color 0.5s ease;
}

.expona-footer-parent .site-footer::after {
  content: "";
  position: absolute;
  inset: 0;
  /* Fixed 256px tile, NOT grain.png + `cover`. `cover` scales one copy of the
     image to the box, so every time the footer's height changes — a mobile
     accordion row opening/closing — the grain rescales and visibly drifts.
     A native-size repeating tile is pixel-locked to the top-left corner, so it
     holds perfectly still while the footer grows. Same swap, same reason, as
     .sn-content-slider__slide::after and the other grain-tile sections. */
  background-image: url(../static/assets/images/latest/grain-tile.png);
  background-repeat: repeat;
  background-size: auto;
  background-position: top left;
  mix-blend-mode: normal;
  opacity: 1;
  pointer-events: none;
  z-index: 2;
}

/* scroll-end "open up" effect is desktop-only; never applies on mobile/tablet */
@media (min-width: 1025px) {
  .expona-footer-parent .site-footer.scroll-end {
    padding-left: 40px !important;
    padding-right: 40px !important;
    background-color: #7c2235 !important;
  }

  .expona-footer-parent .site-footer.scroll-end .footer-bottom-red {
    opacity: 1;
    transition: opacity 0.5s ease, visibility 0.5s ease;
    margin-left: -40px;
    margin-right: -40px;
    width: calc(100% + 80px);
  }
}
.expona-footer-parent .footer-top {
  flex: 1;
  display: flex;
  align-items: center;
  background-color: #373742;
  position: relative;
}

.expona-footer-parent .footer-container {
  width: 100%;
  padding-top: 40px;
  padding-bottom: 112px;
}

.expona-footer-parent .footer-links-grid {
  display: flex;
  flex-direction: column;
  gap: 30px;
  margin-bottom: 112px;
  padding: 64px 12px;
}

/* Desktop: accordion header is layout-transparent; icon hidden */
.expona-footer-parent .footer-accordion-header {
  display: contents;
}

.expona-footer-parent .footer-accordion-icon {
  display: none;
}

.expona-footer-parent .footer-row {
  display: flex;
  width: 100%;
}

.expona-footer-parent .footer-label {
  font-size: 16px;
  line-height: 24px;
  font-weight: 500;
  white-space: nowrap;
  padding-right: 10px;
}

.expona-footer-parent .footer-dots {
  flex: 1;
  /* leader absorbs the label-width variation between rows */
  height: 3px;
  margin: 12px 20px 12px 0;
  background-image: repeating-linear-gradient(to right, #fff9ed 0, #fff9ed 3px, transparent 3px, transparent 14px);
  background-size: 100% 3px;
  background-repeat: no-repeat;
}

.expona-footer-parent .footer-links {
  flex: 1;
  font-size: 16px;
  color: #fff;
  font-weight: 300;
  text-align: left;
  line-height: 24px;
  text-transform: uppercase;
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
  justify-content: flex-start;
}

.expona-footer-parent .footer-links a {
  transition: color 0.3s;
  color: #fff;
}

/* hover: hover only — on touch (iPhone/Safari) :hover sticks to whatever sits
   under the finger and, as the accordion slides open under a resting fingertip,
   walks down the link list one item at a time, each flashing red unprompted
   (same bug fixed in the header mobile menu). Desktop pointers keep the hover
   colour. */
@media (hover: hover) {
  .expona-footer-parent .footer-links a:hover {
    color: var(--accent-red);
  }
}
/* Tap feedback (mobile accordion). The global -webkit-tap-highlight-color is
   off (css/custom.css), so a tap on a footer link otherwise registers with no
   visual confirmation. The link
   turns red on press (:active) and stays red until the next page loads
   (.is-selected, stamped by js/shared.js). No highlight box; accordion header
   rows are left as-is. */
@media (max-width: 1024px) {
  .expona-footer-parent .footer-links a:active,
.expona-footer-parent .footer-links a.is-selected {
    color: var(--accent-red);
    /* Snap straight to crimson — the base rule's `transition: color 0.3s` was
       animating white → red through its pale midpoint, and on a quick tap +
       page change that pinkish frame was all the visitor saw ("looks peach").
       Instant on; the fade-back when the class clears still rides the base
       transition. */
    transition: none;
  }
}
.expona-footer-parent .footer-links .sep {
  color: rgba(255, 255, 255, 0.3);
}

/* Desktop 3-column alignment: the links column has a fixed width
   (same geometry as the original 110px label + 30% dots + margins),
   so every row's links start at the same x regardless of label length */
@media (min-width: 1025px) {
  .expona-footer-parent .footer-links {
    flex: 0 0 calc(70% - 150px);
  }
}
/* Desktop dotted-leader layout: the dots live as a background on the links
   cell and the links themselves mask them with the footer background, so
   the leader always ends a fixed 8px before the text — even when links wrap.
   Applies only to rows whose markup has the .footer-links-line wrapper;
   pages without it keep the legacy .footer-dots bar. */
@media (min-width: 1025px) {
  .expona-footer-parent .footer-row:has(.footer-links-line) {
    align-items: baseline;
  }

  .expona-footer-parent .footer-row:has(.footer-links-line) .footer-dots {
    display: none;
  }

  .expona-footer-parent .footer-row:has(.footer-links-line) .footer-links {
    display: block;
    flex: 1;
    min-width: 0;
    max-width: none;
    overflow: hidden;
    margin-left: 0;
    background-image: repeating-linear-gradient(to right, #fff9ed 0, #fff9ed 3px, transparent 3px, transparent 14px);
    background-size: 100% 3px;
    background-repeat: no-repeat;
    background-position: 0 11px;
  }

  .expona-footer-parent .footer-links-line {
    /* Must stay equal to .site-footer's background-color — this mask relies
       on matching it exactly, not on the color choice itself. */
    background: #20212a;
    padding: 0 8px;
    /* -webkit-box-decoration-break: clone;
    box-decoration-break: clone; */
  }

  .expona-footer-parent .footer-links-line a {
    white-space: nowrap;
  }

  .expona-footer-parent .footer-links-line .sep {
    margin: 0 4px;
  }
}
.expona-footer-parent .break-mobile {
  display: none;
}

.expona-footer-parent .footer-middle {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 112px;
}

.expona-footer-parent .footer-middle .footer-newsletter {
  width: 100%;
}

.expona-footer-parent .footer-newsletter h3 {
  font-size: 20px;
  line-height: 34px;
  font-weight: 300;
  margin-bottom: 16px;
  color: #e6e6ed;
}

.expona-footer-parent .newsletter-input-wrapper {
  display: flex;
  align-items: center;
  gap: 16px;
  /* Was a fixed 503px, so on any viewport where .footer-newsletter's actual
     flex space (in .footer-middle, next to .footer-brand) came in narrower
     than that — laptop-width viewports above the ≤1024px stack breakpoint,
     where the mobile override below doesn't apply yet — the wrapper held its
     hardcoded width and just overflowed .footer-newsletter, clipped by
     whatever ancestor set overflow:hidden. The button (fixed-size, nowrap
     label) took the visible cut; the input shrinks instead. */
  width: 100%;
  max-width: 503px;
}

.expona-footer-parent .footer-newsletter input[type=email].newsletter-input {
  flex: 1;
  /* Flex items get an automatic minimum size floored at their CONTENT size
     before flex-shrink ever runs, and for a plain <input> with no `size`
     attribute that content size is the browser's default control width
     (~170-200px) — not 0. So `flex: 1` alone couldn't shrink this input past
     that floor: once the row (input + 16px gap + the fixed-size, nowrap
     SUBSCRIBE button) needed more width than was actually available, the
     button — the only sibling with nothing left to give — was the one that
     overflowed and got clipped. min-width: 0 removes that floor so the input
     is what shrinks, and the button never has to. */
  min-width: 0;
  background-color: rgba(255, 255, 255, 0.1);
  border: 1px solid rgba(255, 255, 255, 0.2);
  color: #fff;
  padding: 11px 20px;
  font-size: 14px;
  line-height: 22px;
  outline: none;
  transition: border-color 0.3s;
  height: auto;
  border-radius: 0;
  font-weight: 600;
}

.expona-footer-parent .newsletter-input::-moz-placeholder {
  color: #fff;
  opacity: 1;
}

.expona-footer-parent .newsletter-input::placeholder {
  color: #fff;
  opacity: 1;
}

.expona-footer-parent .newsletter-input:focus {
  border-color: rgba(255, 255, 255, 0.5);
}

.expona-footer-parent .footer-brand {
  display: flex;
  flex-direction: column;
  align-items: flex-end;
  gap: 20px;
}

.expona-footer-parent .footer-logo {
  height: 32px;
}

.expona-footer-parent .social-icons {
  display: flex;
  gap: 16px;
}

.expona-footer-parent .social-icons a {
  display: flex;
  align-items: center;
  justify-content: center;
  color: #e6e6ed;
  transition: color 0.3s, opacity 0.3s;
  opacity: 0.8;
}

.expona-footer-parent .social-icons a:hover {
  color: #fff;
  opacity: 1;
}

.expona-footer-parent .footer-bottom-links {
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 12px;
  line-height: 18px;
  font-weight: 300;
  color: #fff;
  letter-spacing: 0.5px;
}

.expona-footer-parent .footer-bottom-links .legal-links a {
  margin-left: 24px;
  transition: color 0.3s;
  color: #fff;
  font-weight: 500;
  letter-spacing: 1.2px;
}

.expona-footer-parent .footer-bottom-links .legal-links a:hover {
  color: var(--accent-red);
}

.expona-footer-parent .footer-bottom-red {
  padding: 80px 0;
  position: relative;
  overflow: hidden;
  opacity: 0;
  transition: opacity 0.5s ease, visibility 0.5s ease;
}

body .expona-footer-parent .footer-red-container {
  display: flex;
  justify-content: space-between;
  align-items: center;
  position: relative;
  z-index: 2;
  gap: 16px;
  /* Added to override wordpress style */
  max-width: var(--container-width-padd);
  width: 100%;
  padding-left: 60px;
  padding-right: 60px;
  margin-left: auto;
  margin-right: auto;
}

/* Added to override wordpress style */
body .expona-footer-parent .footer-red-container::after {
  display: none;
}

.expona-footer-parent .footer-red-text {
  font-size: 32px;
  font-weight: 250;
  line-height: 38px;
  letter-spacing: -1.28px;
}

.expona-footer-parent .condition-2,
.expona-footer-parent .condition-3,
.expona-footer-parent .condition-4,
.expona-footer-parent .condition-5,
.expona-footer-parent .condition-6,
.expona-footer-parent .condition-7 {
  display: none;
}

.expona-footer-parent .condition-1,
.expona-footer-parent .condition-2,
.expona-footer-parent .condition-3,
.expona-footer-parent .condition-4,
.expona-footer-parent .condition-5,
.expona-footer-parent .condition-6,
.expona-footer-parent .condition-7 {
  padding: 20px 0;
}

/* condition-2 only: member avatars + meta replace the button */
.expona-footer-parent .footer-members {
  display: flex;
  align-items: center;
  gap: 14px;
  flex-shrink: 0;
}

.expona-footer-parent .footer-avatars {
  display: flex;
}

.expona-footer-parent .footer-avatar {
  width: 46px;
  height: 46px;
  border-radius: 50%;
  -o-object-fit: cover;
     object-fit: cover;
  margin-left: -10px;
  background: #d9d9d9;
  border: 1.14px solid #fff;
}

.expona-footer-parent .footer-avatar:first-child {
  margin-left: 0;
}

.expona-footer-parent .footer-member-meta {
  display: flex;
  flex-direction: column;
  gap: 3px;
}

.expona-footer-parent .footer-member-count {
  font-size: 18px;
  line-height: 30px;
  font-weight: 600;
  color: #fff;
}

.expona-footer-parent .footer-member-tags {
  font-size: 14px;
  line-height: 20px;
  font-weight: 300;
  color: #ffd0d8;
}

.expona-footer-parent .footer-wave-placeholder {
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 60px;
  background-image: repeating-linear-gradient(90deg, rgba(255, 255, 255, 0.05) 0, rgba(255, 255, 255, 0.05) 2px, transparent 2px, transparent 8px);
  z-index: 1;
}

.expona-footer-parent .footer-wave-placeholder-podcast {
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 54px;
  background-image: url(../static/assets/images/latest/footer-frame.png);
  background-repeat: repeat-x;
  background-size: auto 100%;
  background-position: bottom center;
  z-index: 1;
}

@media (max-width: 1440px) {
  .expona-footer-parent .expona-content-left {
    max-width: 680px;
  }
}
@media (max-width: 1200px) {
  .expona-footer-parent .expona-content-left {
    max-width: 540px;
  }
}
/* Responsive Overrides */
@media (max-width: 1024px) {
  .expona-footer-parent .expona-container {
    flex-direction: column;
    justify-content: center;
    gap: 40px;
  }

  .expona-footer-parent .expona-content-left,
.expona-footer-parent .expona-content-right {
    flex: none;
    width: 100%;
    padding-right: 0;
  }

  .expona-footer-parent .expona-content-right {
    height: 40vh;
  }

  .expona-footer-parent .expona-content-left {
    max-width: 100%;
    padding: 80px 0;
  }

  .expona-footer-parent .footer-middle {
    flex-direction: column;
    align-items: flex-start;
    gap: 40px;
  }

  .expona-footer-parent .footer-brand {
    align-items: flex-start;
  }

  body .expona-footer-parent .footer-red-container {
    flex-direction: column;
    align-items: flex-start;
    gap: 20px;
  }
}
@media (max-width: 1024px) {
  .expona-footer-parent .expona-content-left {
    margin: 60px 0 20px;
  }

  .expona-footer-parent .expona-title {
    font-size: 36px;
    font-weight: 250;
    line-height: 42px;
    white-space: normal;
    margin-bottom: 32px;
  }

  .expona-footer-parent .footer-container {
    padding: 0;
  }

  .expona-footer-parent .footer-links-grid {
    gap: 0;
    margin-bottom: 60px;
  }

  .expona-footer-parent .expona-video {
    position: absolute;
    right: -70px;
    bottom: 0;
    border: 0;
    outline: 0;
    height: 50vh;
    -o-object-position: top right;
       object-position: top right;
    -webkit-mask-image: none;
            mask-image: none;
  }

  /* Each row becomes a full-width accordion item */
  .expona-footer-parent .footer-row {
    flex-direction: column;
    align-items: stretch;
    gap: 0;
    border-bottom: 1px solid rgba(255, 255, 255, 0.1);
  }

  .expona-footer-parent .footer-middle {
    gap: 90px;
    padding: 30px;
    align-items: center;
    margin-bottom: 0;
  }

  .expona-footer-parent .footer-brand {
    gap: 32px;
  }

  .expona-footer-parent .footer-newsletter h3 {
    font-weight: 200;
    margin-bottom: 16px;
    font-size: 32px;
    letter-spacing: -4%;
    text-align: center;
  }

  body .expona-footer-parent .footer-red-container {
    padding: 0;
  }

  .expona-footer-parent .footer-bottom-links {
    gap: 24px;
    justify-content: center;
    align-items: center;
    font-size: 12px;
    flex-direction: column;
    padding: 20px 30px 50px;
  }

  /* Accordion header: label left, chevron right */
  .expona-footer-parent .footer-accordion-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 18px 30px;
    cursor: pointer;
    width: 100%;
  }

  .expona-footer-parent .footer-accordion-icon {
    display: block;
    font-size: 13px;
    color: rgba(255, 255, 255, 0.6);
    transition: transform 0.3s ease;
  }

  .expona-footer-parent .footer-accordion-item.active .footer-accordion-icon {
    transform: rotate(180deg);
  }

  /* Dots hidden, links full-width left-aligned, hidden by default */
  .expona-footer-parent .footer-dots {
    display: none;
  }

  .expona-footer-parent .footer-accordion-content {
    display: none;
    text-align: left;
    max-width: 100%;
    line-height: 2;
    padding: 10px 30px 20px;
  }

  .expona-footer-parent .break-mobile {
    display: inline;
  }

  /* Red bottom section: always visible on mobile with its own background */
  .expona-footer-parent .footer-bottom-red {
    opacity: 1;
    background-color: #7c2235;
    padding: 50px 50px 96px;
  }

  .expona-footer-parent .footer-red-text {
    font-weight: 250;
    font-size: 32px;
    line-height: 38px;
    letter-spacing: -4%;
  }
}
@media (max-width: 1024px) {
  /* .expona-footer-parent .site-footer::after,
  .expona-footer-parent .expona-section::before {
    display: none;
  } */
  .expona-footer-parent .expona-container {
    padding: 0;
    gap: 0;
  }

  .expona-footer-parent .expona-content-left {
    padding: 40px 20px;
    margin: 0;
  }

  .expona-footer-parent .expona-title {
    font-size: 32px;
    font-weight: 250;
    line-height: 42px;
    white-space: normal;
    margin-bottom: 36px;
    letter-spacing: 1.28px;
    text-align: center;
  }

  .expona-footer-parent .footer-container {
    padding: 0;
  }

  .expona-footer-parent .footer-links-grid {
    padding: 40px 20px;
    gap: 0;
    margin-bottom: 0;
    border: 0;
  }

  .expona-footer-parent .expona-video {
    position: absolute;
    right: -70px;
    bottom: 0;
    border: 0;
    outline: 0;
    height: 50vh;
    -o-object-position: top right;
       object-position: top right;
    -webkit-mask-image: none;
            mask-image: none;
  }

  /* Each row becomes a full-width accordion item */
  .expona-footer-parent .footer-row {
    flex-direction: column;
    align-items: stretch;
    gap: 0;
    border-bottom: 1px solid rgba(255, 255, 255, 0.1);
  }

  .expona-footer-parent .footer-middle {
    gap: 40px;
    padding: 40px 20px;
    margin-bottom: 0;
    border-bottom: 1.01px solid rgba(255, 255, 255, 0.0705882353);
    align-items: flex-start;
  }

  .expona-footer-parent .footer-middle .footer-newsletter,
.expona-footer-parent .footer-middle .footer-brand,
.expona-footer-parent .newsletter-input-wrapper {
    width: 100%;
  }

  .expona-footer-parent .footer-brand {
    gap: 32px;
  }

  /* Same iOS focus-zoom floor as .expona-input above — this field is 14px at
     every width, so it zooms on tap too. Only the narrow layout is raised;
     desktop keeps 14px, where no browser does this. Padding compensates so the
     field's height does not change: 22 + 2x11 and 24 + 2x10 are both 44px. */
  .expona-footer-parent .footer-newsletter input[type=email].newsletter-input {
    font-size: 16px;
    line-height: 24px;
    padding: 10px 20px;
  }

  .expona-footer-parent .footer-newsletter h3 {
    margin-bottom: 16px;
    font-weight: 400;
    font-size: 20px;
    line-height: 28px;
    letter-spacing: 0;
    text-align: left;
  }

  .expona-footer-parent .footer-bottom-links {
    gap: 16px;
    align-items: flex-start;
    font-size: 12px;
    flex-direction: column;
    padding: 20px;
  }

  .expona-footer-parent .footer-bottom-links .legal-links {
    display: flex;
    gap: 24px;
    flex-wrap: wrap;
  }

  .expona-footer-parent .footer-bottom-links .legal-links a {
    margin-left: 0;
    transition: color 0.3s;
    color: #fff;
    letter-spacing: 1.2px;
  }

  body .expona-footer-parent .footer-red-container {
    padding: 0;
  }

  .expona-footer-parent .footer-red-text {
    font-size: 16px;
    font-weight: 300;
    line-height: 26px;
    letter-spacing: 0;
  }

  /* Accordion header: label left, chevron right */
  .expona-footer-parent .footer-accordion-header {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 13px 30px;
    cursor: pointer;
    width: 100%;
  }

  .expona-footer-parent .footer-label {
    letter-spacing: 0;
    width: 100%;
    color: #e6e6ed;
  }

  .expona-footer-parent .footer-accordion-icon {
    display: block;
    font-size: 13px;
    color: #fff9ed;
    transition: transform 0.3s ease;
  }

  .expona-footer-parent .footer-accordion-item.active .footer-accordion-icon {
    transform: rotate(180deg);
  }

  /* Dots hidden, links full-width left-aligned, hidden by default */
  .expona-footer-parent .footer-dots {
    display: none;
  }

  .expona-footer-parent .footer-links a {
    padding: 10px 0;
    width: 100%;
    display: block;
    border-bottom: 1px solid rgba(255, 255, 255, 0.1);
  }

  .expona-footer-parent .footer-links a:last-child {
    border-bottom: none;
  }

  .expona-footer-parent .footer-links .sep {
    display: none;
  }

  .expona-footer-parent .footer-accordion-content {
    display: none;
    text-align: left;
    max-width: 100%;
    line-height: 2;
    padding: 10px 50px;
  }

  .expona-footer-parent .break-mobile {
    display: inline;
  }

  /* Red bottom section: always visible on mobile with its own background */
  .expona-footer-parent .footer-bottom-red {
    opacity: 1;
    background-color: #7c2235;
    padding: 30px 20px 70px;
  }

  .expona-footer-parent .condition-1,
.expona-footer-parent .condition-2,
.expona-footer-parent .condition-3,
.expona-footer-parent .condition-4,
.expona-footer-parent .condition-5,
.expona-footer-parent .condition-6,
.expona-footer-parent .condition-7 {
    padding: 10px 0;
  }

  .expona-footer-parent .expona-input-wrapper {
    padding: 2px 16px;
  }

  /* 16px is a FLOOR here, not a type choice — do not lower it.
     iOS Safari zooms the whole viewport in whenever a form control it is
     focusing computes to a font-size below 16px, and never zooms back out on
     blur. That is the "the box gets bigger when you tap it" report from iPhone;
     Android has no such behaviour, which is why it only reproduces on one
     platform. The alternative cure — maximum-scale/user-scalable on the
     viewport meta — disables pinch-zoom for everyone and fails WCAG 1.4.4, so
     the font-size floor is the one that keeps the page accessible.

     line-height and padding are re-balanced against the larger text so the
     wrapper's height is unchanged: 18 + 2x10 and 20 + 2x9 are both 38px. */
  .expona-footer-parent .expona-input {
    font-size: 16px;
    padding: 9px 0;
    line-height: 20px;
  }
}
/* The narrow-viewport placeholder copy (EXPONA_STATIC_NARROW in js/shared.js —
   "Start with the challenge on your mind") is wider than the field on a small
   phone, and an <input> can't wrap, so it was being clipped.

   The fix shrinks the PLACEHOLDER only, via ::placeholder { font-size }. The
   input's own font-size stays 16px, so iOS Safari's focus-zoom heuristic (see
   the rule above — it reads the control's computed font-size, not the
   placeholder's) is unaffected, and anything the visitor actually types is
   still 16px. Safari versions that ignore font-size on ::placeholder just fall
   back to 16px — the text clips as before but nothing else regresses. */
@media (max-width: 480px) {
  .expona-footer-parent .expona-input::-moz-placeholder {
    font-size: 13px;
  }
  .expona-footer-parent .expona-input::placeholder {
    font-size: 13px;
  }
}
/* ───────────────────────────────────────────────────────────────────────────
   Mobile footer accordion — CSS grid-rows collapse.

   Was a jQuery slideUp/slideDown. Same as the header mobile-nav accordion in
   mechanism, but the header only reads as smooth because it is position:fixed
   and isolated — collapsing a submenu inside it never touches page layout. The
   footer is in normal flow, so a height animation there reflows every section
   below it (newsletter, bottom links, condition bars) on jQuery's 13ms timer,
   which isn't refresh-synced and stutters on close.

   grid-template-rows 0fr↔1fr on the panel (one child, .footer-accordion-inner,
   added by js/shared.js §4) is a single browser-driven transition — the page
   still reflows, but it is scheduled with the frame instead of against it.
   Single-track form: no `auto` sibling track, so `1fr` resolves cleanly to the
   inner's exact height. The inner carries NO padding — `1fr` then tracks a
   fixed target while the container's own vertical padding animates in
   separately on the same curve (the .sn-accordion__body model).
   ─────────────────────────────────────────────────────────────────────────── */
@media (max-width: 1024px) {
  .expona-footer-parent .footer-accordion-ready .footer-accordion-content {
    display: grid;
    /* Full width — .footer-links is display:flex; as a grid its default
       implicit column is `auto` and shrinks to the widest link. */
    grid-template-columns: 1fr;
    grid-template-rows: 0fr;
    /* .footer-links carries flex:1 (grow) + gap:8px from its flex layout —
       neither is wanted here, and flex-grow can stretch the collapsed panel. */
    flex: 0 0 auto;
    gap: 0;
    overflow: hidden;
    /* Vertical padding lives HERE (the grid container), not on the inner item:
       a stretched grid item in a 0fr row still renders its own padding, so the
       closed panel would sit ~20px tall — the gap under the label. It is 0 when
       closed and animates in with the row, exactly as .sn-accordion__body does
       (assets/scss/pages/servicenow/_scroll-tabs-section.scss). Horizontal
       padding is constant (mirrors the old .footer-accordion-content). */
    padding: 0 50px;
    transition: grid-template-rows 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94), padding-top 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94), padding-bottom 0.3s cubic-bezier(0.25, 0.46, 0.45, 0.94);
  }

  .expona-footer-parent .footer-accordion-ready .footer-accordion-item.active .footer-accordion-content {
    grid-template-rows: 1fr;
    padding-top: 10px;
    padding-bottom: 10px;
  }

  .expona-footer-parent .footer-accordion-inner {
    min-height: 0;
    overflow: hidden;
    visibility: hidden;
    transition: visibility 0s linear 0.3s;
  }

  .expona-footer-parent .footer-accordion-item.active .footer-accordion-inner {
    visibility: visible;
    transition: visibility 0s;
  }
}
/* Desktop keeps the flat dotted-leader row: the JS-added wrapper must not
   become a layout box between .footer-links and its <a>/<span> flex items. */
@media (min-width: 1025px) {
  .expona-footer-parent .footer-accordion-inner {
    display: contents;
  }
}
:root {
  /* Color Palette */
  --bg-primary: #fff9ed;
  /* Cream Mist */
  --text-primary: #373742;
  /* Charcoal Gray */
  --text-secondary: #373742;
  /* Medium Gray */
  --text-disabled: #a7a7b0;
  --accent-red: #ea1b3d;
  /* InfoBeans Crimson */
  --accent-peach: #ffd0d8;
  --border-color: rgb(103, 103, 117, .15);
  /* Fonts */
  --font-primary: "Lexend", -apple-system, blinkmacsystemfont, "Segoe UI", roboto, sans-serif;
  /* Transitions */
  --transition-smooth: all .4s cubic-bezier(.16, 1, .3, 1);
  --transition-slow: all .8s cubic-bezier(.16, 1, .3, 1);
  --transition-translate: all 1s cubic-bezier(.16, 1, .3, 1);
  --text-gray: #676775;
  --container-width: 93.5rem;
  /* 1496px */
  /* --container-width-padd: 98.5rem; */
  /* 1576px */
  --container-width-padd: 101rem;
  /* 1616px */
}

/* ==========================================
   2. Reset & General Styles
   ========================================== */
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
  /* Kill the translucent blue/grey flash Android Chrome paints over any
     tapped <a>/<button>. Our own :active / :focus-visible styles are the
     intended tap feedback. */
  -webkit-tap-highlight-color: transparent;
}

button,
input,
textarea,
select {
  font-family: inherit;
}

html,
body {
  width: 100%;
  /* min-height instead of height: 100% — native scroll needs the document
     to grow beyond the viewport. height: 100% was only safe when
     ScrollSmoother virtualised scroll; without it the page is capped at
     100vh and GSAP pin spacers cannot expand the scroll range. */
  min-height: 100%;
  font-family: var(--font-primary);
  background-color: var(--bg-primary);
  color: var(--text-primary);
  line-height: 1.6;
  overflow-x: clip;
  /* scroll-behavior: smooth removed — GSAP manages all scroll adjustments
     (pin setup, refresh, scrollTo). CSS smooth-scroll causes jitter and
     incorrect trigger positions when GSAP moves the scroll position
     programmatically.

     Removing it here is NOT sufficient on WordPress, where this file is
     concatenated with every other page's CSS and the investors page carries a
     bare `html { scroll-behavior: smooth }`. The actual override lives in
     css/style.css section 0 (`html:has(#what-we-ship)`), which is keyed off
     the pinned sections and marked !important so it also beats the inline
     style GSAP writes back after a refresh. Keep the two in step. */
}

/* While scroll is locked, hand back the width the vanished scrollbar took —
   padding not width, so the header stays full-bleed (js/shared.js). */
html.scroll-locked,
html.scroll-locked .main-header {
  padding-right: var(--scrollbar-comp, 0);
}

/* Gutter, not padding: the menu's own scrollbar already fills that space. */
html.scroll-locked .header-container .mega-menu {
  scrollbar-gutter: stable;
}

/* Scrollbar customization — every width, not desktop only.
   The @media (min-width: 769px) gate this used to sit behind was what left the   homepage with the browser's default chunky scrollbar below 769px while every
   other page kept the thin cream one: the landing pages get the same four rules
   from assets/scss/pages/_base.scss, where they are NOT breakpoint-scoped, and
   that unscoped copy is what was painting their mobile scrollbars. Keep the two
   in step — dropping the gate here is what makes the homepage and the drawer's
   own scroller match the rest of the site at mobile widths. */
::-webkit-scrollbar {
  width: 8px;
}

::-webkit-scrollbar-track {
  background: var(--bg-primary);
}

::-webkit-scrollbar-thumb {
  background: var(--text-disabled);
  border-radius: 4px;
}

::-webkit-scrollbar-thumb:hover {
  background: var(--text-secondary);
}

/* ==========================================
   3. Typography Systems
   ========================================== */
h1,
h2,
h3,
h4,
h5,
h6 {
  font-weight: 600;
  line-height: 1.2;
}

a {
  color: inherit;
  text-decoration: none;
  transition: var(--transition-smooth);
}

/* ==========================================
   4. Grid & Container Layouts
   ========================================== */
.container,
.custom-container {
  max-width: var(--container-width-padd);
  width: 100%;
  padding-left: 60px;
  padding-right: 60px;
  margin-left: auto;
  margin-right: auto;
}

/* Responsive Container Adjustments */
@media (max-width: 1024px) {
  .container {
    padding-left: 20px;
    padding-right: 20px;
  }
}
@media (max-width: 768px) {
  .custom-container {
    padding-left: 20px;
    padding-right: 20px;
  }
}
.cky-switch input[type=checkbox]:checked {
  background: #ea1b3d !important;
}

button.cky-btn.cky-btn-reject {
  color: #f8f6f6 !important;
  background-color: #211d1d !important;
}

button.cky-btn.cky-btn-accept {
  background: #ea1b3d !important;
  border-color: #ea1b3d !important;
  color: #fff !important;
}

.cky-notice-btn-wrapper .cky-btn {
  border-color: #ea1b3d !important;
  color: #ea1b3d !important;
}

.cky-revisit-bottom-left:hover::before, .cky-revisit-bottom-left:hover::after {
  display: none !important;
}

@media (max-width: 576px) {
  .page-template-page-leadership-2026 .cky-revisit-bottom-left {
    left: auto !important;
    right: 15px !important;
  }

  .cky-preference-center {
    max-height: 90vh !important;
    max-height: 90dvh !important;
    /* real visible height, accounts for mobile browser chrome */
    overflow: hidden !important;
    display: flex !important;
    flex-direction: column !important;
    top: 5vh !important;
    transform: none !important;
  }

  /* keep header and footer fixed in place, only the middle content scrolls */
  .cky-preference-center .cky-preference-header,
.cky-preference-center .cky-preference-footer {
    flex: 0 0 auto !important;
  }

  .cky-preference-center .cky-preference-body-wrapper {
    flex: 1 1 auto !important;
    overflow-y: auto !important;
    -webkit-overflow-scrolling: touch !important;
  }
}
.privacy-consent-modal {
  --pcm-bg: var(--bg-primary, #fff9ed);
  --pcm-text: var(--text-primary, #373742);
  --pcm-link: #eb4c5e;
  --pcm-checkbox-border: #676775;
  --pcm-cancel-color: var(--accent-red, #ea1b3d);
  position: fixed;
  inset: 0;
  z-index: 2004;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 20px;
  visibility: hidden;
  pointer-events: none;
  transition: visibility 0s linear 0.45s;
}
@media (max-width: 768px) {
  .privacy-consent-modal {
    padding: 16px;
  }
}
.privacy-consent-modal.is-open {
  visibility: visible;
  pointer-events: auto;
  transition: visibility 0s linear 0s;
}
.privacy-consent-modal--dark {
  --pcm-bg: #2f2f39;
  --pcm-text: #fff;
  --pcm-link: #ffd0d8;
  --pcm-checkbox-border: #676775;
  --pcm-cancel-color: #a7a7b0;
}
.privacy-consent-modal__backdrop {
  position: absolute;
  inset: 0;
  background: rgba(47, 47, 57, 0.75);
  cursor: pointer;
  opacity: 0;
  transition: opacity 0.4s cubic-bezier(0.16, 1, 0.3, 1);
}
.privacy-consent-modal--dark .privacy-consent-modal__backdrop {
  background: transparent;
}
.privacy-consent-modal.is-open .privacy-consent-modal__backdrop {
  opacity: 1;
  backdrop-filter: blur(5px) saturate(120%);
  -webkit-backdrop-filter: blur(5px) saturate(120%);
}
.privacy-consent-modal__dialog {
  position: relative;
  width: 100%;
  max-width: 930px;
  padding: 56px 48px;
  clip-path: polygon(24px 0, 100% 0, 100% calc(100% - 24px), calc(100% - 24px) 100%, 0 100%, 0 24px);
  background: var(--pcm-bg);
  opacity: 0;
  transform: scale3d(0.94, 0.94, 1);
  transition: opacity 0.35s cubic-bezier(0.4, 0, 1, 1), transform 0.35s cubic-bezier(0.4, 0, 1, 1);
  will-change: transform, opacity;
}
.privacy-consent-modal.is-open .privacy-consent-modal__dialog {
  opacity: 1;
  transform: scale3d(1, 1, 1);
  transition: opacity 0.55s cubic-bezier(0.16, 1, 0.3, 1), transform 0.55s cubic-bezier(0.34, 1.56, 0.64, 1);
}
@media (max-width: 1024px) {
  .privacy-consent-modal__dialog {
    padding: 40px 32px;
    clip-path: polygon(20px 0, 100% 0, 100% calc(100% - 20px), calc(100% - 20px) 100%, 0 100%, 0 20px);
  }
}
@media (max-width: 768px) {
  .privacy-consent-modal__dialog {
    padding: 32px 20px;
    clip-path: polygon(16px 0, 100% 0, 100% calc(100% - 16px), calc(100% - 16px) 100%, 0 100%, 0 16px);
  }
}
.privacy-consent-modal__checkbox-row {
  display: flex;
  align-items: flex-start;
  gap: 20px;
}
@media (max-width: 768px) {
  .privacy-consent-modal__checkbox-row {
    gap: 14px;
  }
}
.privacy-consent-modal__checkbox, .privacy-consent-modal input[type=checkbox].privacy-consent-modal__checkbox {
  -moz-appearance: none;
       appearance: none;
  -webkit-appearance: none;
  position: relative;
  flex: 0 0 auto;
  width: 18px;
  height: 18px;
  margin-top: 8px;
  background: transparent;
  border: 2px solid var(--pcm-checkbox-border);
  border-radius: 0;
  cursor: pointer;
  transition: background 0.25s ease;
}
.privacy-consent-modal__checkbox:checked, .privacy-consent-modal input[type=checkbox].privacy-consent-modal__checkbox:checked {
  background: #ea1b3d;
  border-color: #ea1b3d;
}
.privacy-consent-modal--dark .privacy-consent-modal__checkbox:checked, .privacy-consent-modal--dark .privacy-consent-modal input[type=checkbox].privacy-consent-modal__checkbox:checked {
  background: #ea1b3d;
  border-color: #ea1b3d;
}
.privacy-consent-modal__checkbox:checked::after, .privacy-consent-modal input[type=checkbox].privacy-consent-modal__checkbox:checked::after {
  content: "";
  position: absolute;
  left: 5px;
  top: 1px;
  width: 5px;
  height: 9px;
  border: solid #fff;
  border-width: 0 2px 2px 0;
  transform: rotate(45deg);
}
.privacy-consent-modal__checkbox:focus-visible, .privacy-consent-modal input[type=checkbox].privacy-consent-modal__checkbox:focus-visible {
  outline: 2px solid var(--pcm-link);
  outline-offset: 2px;
}
@media (max-width: 1024px) {
  .privacy-consent-modal__checkbox, .privacy-consent-modal input[type=checkbox].privacy-consent-modal__checkbox {
    margin-top: 5px;
  }
}
.privacy-consent-modal__text {
  margin: 0;
  font-family: var(--font-primary);
  font-weight: 300;
  font-size: 20px;
  line-height: 34px;
  letter-spacing: 0;
  color: var(--pcm-text);
  cursor: pointer;
}
@media (max-width: 1024px) {
  .privacy-consent-modal__text {
    font-size: 18px;
    line-height: 28px;
  }
}
@media (max-width: 768px) {
  .privacy-consent-modal__text {
    font-size: 16px;
    line-height: 24px;
  }
}
.privacy-consent-modal__link {
  color: var(--pcm-link);
  text-decoration: underline;
  -webkit-text-decoration-style: solid;
          text-decoration-style: solid;
  -webkit-text-decoration-skip: ink;
          text-decoration-skip-ink: auto;
}
.privacy-consent-modal__actions {
  display: flex;
  align-items: center;
  gap: 45px;
  margin-top: 32px;
  margin-left: 38px;
}
.privacy-consent-modal__actions .cell {
  flex: 0 0 auto;
}
.privacy-consent-modal__actions .ib-btn--primary {
  min-width: 126px;
}
.privacy-consent-modal--dark .privacy-consent-modal__actions .ib-btn--ghost {
  --_color: var(--pcm-cancel-color);
}
.privacy-consent-modal--dark .privacy-consent-modal__actions .ib-btn--ghost:hover {
  --_color: #ea1b3d;
}
@media (max-width: 768px) {
  .privacy-consent-modal__actions {
    flex-direction: column;
    gap: 1rem;
    margin-top: 24px;
    margin-left: 0;
  }
  .privacy-consent-modal__actions .cell {
    display: flex;
    justify-content: center;
    width: 100%;
  }
  .privacy-consent-modal__actions .ib-btn--primary {
    width: 100%;
  }
  .privacy-consent-modal__actions .ib-btn--primary .ib-btn__inner {
    width: 100%;
  }
}

/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiLi4vc3R5bGVzL2NvbW1vbi5jc3MiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vY29tbW9uLnNjc3MiLCJ3ZWJwYWNrOi8vL2NvbW1vbi91dGlscy9tYWluLnNjc3MiLCJ3ZWJwYWNrOi8vL2NvbW1vbi91dGlscy9idXR0b25zLnNjc3MiLCJ3ZWJwYWNrOi8vL2NvbW1vbi9oZWFkZXIvbWFpbi5zY3NzIiwid2VicGFjazovLy9jb21tb24vZm9vdGVyL21haW4uc2NzcyIsIndlYnBhY2s6Ly8vY29tbW9uL2N1c3RvbS5zY3NzIiwid2VicGFjazovLy9jb21tb24vY29va2lleWVzLnNjc3MiLCJ3ZWJwYWNrOi8vL2NvbW1vbi9wcml2YWN5LWNvbnNlbnQtcG9wdXAuc2NzcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvbXBvbmVudHNcbiAqL1xuQGltcG9ydCBcIi4vY29tbW9uL3V0aWxzL21haW4uc2Nzc1wiO1xuQGltcG9ydCBcIi4vY29tbW9uL2hlYWRlci9tYWluLnNjc3NcIjtcbkBpbXBvcnQgXCIuL2NvbW1vbi9mb290ZXIvbWFpbi5zY3NzXCI7XG5AaW1wb3J0IFwiLi9jb21tb24vY3VzdG9tLnNjc3NcIjtcbkBpbXBvcnQgXCIuL2NvbW1vbi9jb29raWV5ZXMuc2Nzc1wiO1xuQGltcG9ydCBcIi4vY29tbW9uL3ByaXZhY3ktY29uc2VudC1wb3B1cC5zY3NzXCI7XG4iLCIvKipcbiAqIENvbXBvbmVudHNcbiAqL1xuQGltcG9ydCBcIi4vYnV0dG9ucy5zY3NzXCI7IiwiQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC5pYi1kZXNrdG9wLW9ubHkge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbiAgfVxufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNzY5cHgpIHtcbiAgLmliLW1vYmlsZS1vbmx5IHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSBhbmQgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IG5vLXByZWZlcmVuY2UpIHtcbiAgLmliLW0tcmV2ZWFsIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMjRweCwgMCk7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAuNTVzIGN1YmljLWJlemllciguMjUsIC40NiwgLjQ1LCAuOTQpLCB0cmFuc2Zvcm0gLjU1cyBjdWJpYy1iZXppZXIoLjI1LCAuNDYsIC40NSwgLjk0KTtcbiAgICB0cmFuc2l0aW9uLWRlbGF5OiB2YXIoLS1pYi1tLXJldmVhbC1kZWxheSwgMHMpO1xuICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm0sIG9wYWNpdHk7XG4gIH1cbiAgLmliLW0tcmV2ZWFsLmlzLXZpc2libGUge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGliLWFycm93LXNsaWRlIHtcbiAgMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG4gIDQ1JSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDdweCk7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxuICA0NiUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNXB4KTtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG4uaWItYnRuIHtcbiAgLS1fYmc6ICNlYTFiM2Q7XG4gIC0tX2JnLXByZXNzOiAjYWExNDJkO1xuICAtLV9jb2xvcjogI2ZmZjtcbiAgLS1fYm9yZGVyOiB0cmFuc3BhcmVudDtcbiAgLS1fc2hhZG93OiAjZmZkMGQ4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgaGVpZ2h0OiA0OHB4O1xuICBwYWRkaW5nOiAwO1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1oZWFkaW5nKTtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICBsaW5lLWhlaWdodDogMTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50O1xuICBvdXRsaW5lOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG4uaWItYnRuOjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgaW5zZXQ6IDA7XG4gIHotaW5kZXg6IC0xO1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1fc2hhZG93KTtcbiAgY2xpcC1wYXRoOiBwb2x5Z29uKDEwcHggMCwgMTAwJSAwLCAxMDAlIGNhbGMoMTAwJSAtIDEwcHgpLCBjYWxjKDEwMCUgLSAxMHB4KSAxMDAlLCAwIDEwMCUsIDAgMTBweCk7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDAsIDApO1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IC4yNXMgY3ViaWMtYmV6aWVyKC4xNiwgMSwgLjMsIDEpLCB0cmFuc2Zvcm0gLjI1cyBjdWJpYy1iZXppZXIoLjE2LCAxLCAuMywgMSk7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLmliLWJ0bl9faW5uZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZ2FwOiA4cHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEwMCU7XG4gIHBhZGRpbmc6IDAgMjJweDtcbiAgY29sb3I6IHZhcigtLV9jb2xvcik7XG4gIGJhY2tncm91bmQ6IHZhcigtLV9iZyk7XG4gIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICBsZXR0ZXItc3BhY2luZzogMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBjbGlwLXBhdGg6IHBvbHlnb24oMTBweCAwLCAxMDAlIDAsIDEwMCUgY2FsYygxMDAlIC0gMTBweCksIGNhbGMoMTAwJSAtIDEwcHgpIDEwMCUsIDAgMTAwJSwgMCAxMHB4KTtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAuMjVzIGN1YmljLWJlemllciguMTYsIDEsIC4zLCAxKSwgY29sb3IgLjI1cyBjdWJpYy1iZXppZXIoLjE2LCAxLCAuMywgMSk7XG59XG4uaWItYnRuX19pbm5lcjo6YmVmb3JlIHtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBpbnNldDogMDtcbiAgYmFja2dyb3VuZDogdmFyKC0tX2JvcmRlcik7XG4gIGNsaXAtcGF0aDogcG9seWdvbigxMHB4IDAsIDEwMCUgMCwgMTAwJSBjYWxjKDEwMCUgLSAxMHB4KSwgY2FsYygxMDAlIC0gMTBweCkgMTAwJSwgMCAxMDAlLCAwIDEwcHgsIDEwcHggMCwgMTBweCAxLjVweCwgMS41cHggMTBweCwgMS41cHggY2FsYygxMDAlIC0gMS41cHgpLCBjYWxjKDEwMCUgLSAxMHB4KSBjYWxjKDEwMCUgLSAxLjVweCksIGNhbGMoMTAwJSAtIDEuNXB4KSBjYWxjKDEwMCUgLSAxMHB4KSwgY2FsYygxMDAlIC0gMS41cHgpIDEuNXB4LCAxMHB4IDEuNXB4KTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHRyYW5zaXRpb246IGJhY2tncm91bmQgLjI1cyBjdWJpYy1iZXppZXIoLjE2LCAxLCAuMywgMSk7XG59XG4uaWItYnRuX19hcnJvdyB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBmbGV4LXNocmluazogMDtcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4yNXMgY3ViaWMtYmV6aWVyKC4xNiwgMSwgLjMsIDEpLCBvcGFjaXR5IC4yNXMgY3ViaWMtYmV6aWVyKC4xNiwgMSwgLjMsIDEpO1xufVxuLmliLWJ0bl9fYXJyb3cgc3ZnLCAuaWItYnRuX19hcnJvdy5pYi1pY29uIHtcbiAgd2lkdGg6IDE0cHg7XG4gIGhlaWdodDogMTRweDtcbn1cbi5pYi1idG46aG92ZXI6bm90KDpkaXNhYmxlZCk6bm90KFthcmlhLWRpc2FibGVkPXRydWVdKTo6YWZ0ZXIge1xuICBvcGFjaXR5OiAxO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSg0cHgsIDRweCk7XG59XG4uaWItYnRuOmZvY3VzLXZpc2libGUgLmliLWJ0bl9faW5uZXIge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1fYmctcHJlc3MpO1xufVxuLmliLWJ0bjphY3RpdmU6bm90KDpkaXNhYmxlZCkgLmliLWJ0bl9faW5uZXIge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1fYmctcHJlc3MpO1xufVxuLmliLWJ0bjpkaXNhYmxlZCwgLmliLWJ0blthcmlhLWRpc2FibGVkPXRydWVdIHtcbiAgLS1fYmc6ICNhN2E3YjA7XG4gIC0tX2JvcmRlcjogI2E3YTdiMDtcbiAgLS1fY29sb3I6ICNmZmY7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uaWItYnRuLS1wcmltYXJ5IHtcbiAgLS1fYmc6ICNlYTFiM2Q7XG4gIC0tX2JnLXByZXNzOiAjYWExNDJkO1xuICAtLV9jb2xvcjogI2ZmZjtcbiAgLS1fYm9yZGVyOiB0cmFuc3BhcmVudDtcbiAgLS1fc2hhZG93OiAjZmZkMGQ4O1xufVxuXG4uaWItYnRuLS1wcmltYXJ5LWxpZ2h0IHtcbiAgLS1fYmc6ICNmZmY5ZWQ7XG4gIC0tX2JnLXByZXNzOiAjZmZlZmQxO1xuICAtLV9jb2xvcjogIzY3Njc3NTtcbiAgLS1fYm9yZGVyOiB0cmFuc3BhcmVudDtcbiAgLS1fc2hhZG93OiAjZmZkMGQ4O1xufVxuLmliLWJ0bi0tcHJpbWFyeS1saWdodDpkaXNhYmxlZCwgLmliLWJ0bi0tcHJpbWFyeS1saWdodFthcmlhLWRpc2FibGVkPXRydWVdIHtcbiAgLS1fYmc6ICNhN2E3YjA7XG4gIC0tX2NvbG9yOiAjZmZmO1xufVxuXG4uaWItYnRuLS1zZWNvbmRhcnkge1xuICAtLV9iZzogdHJhbnNwYXJlbnQ7XG4gIC0tX2JnLXByZXNzOiB0cmFuc3BhcmVudDtcbiAgLS1fY29sb3I6ICNlYTFiM2Q7XG4gIC0tX2JvcmRlcjogI2VhMWIzZDtcbiAgLS1fc2hhZG93OiAjZmZkMGQ4O1xufVxuLmliLWJ0bi0tc2Vjb25kYXJ5OmZvY3VzLXZpc2libGUge1xuICAtLV9ib3JkZXI6ICNhYTE0MmQ7XG4gIC0tX2NvbG9yOiAjYWExNDJkO1xufVxuLmliLWJ0bi0tc2Vjb25kYXJ5OmFjdGl2ZTpub3QoOmRpc2FibGVkKSB7XG4gIC0tX2JvcmRlcjogI2FhMTQyZDtcbiAgLS1fY29sb3I6ICNhYTE0MmQ7XG59XG4uaWItYnRuLS1zZWNvbmRhcnk6ZGlzYWJsZWQsIC5pYi1idG4tLXNlY29uZGFyeVthcmlhLWRpc2FibGVkPXRydWVdIHtcbiAgLS1fYmc6IHRyYW5zcGFyZW50O1xuICAtLV9jb2xvcjogI2E3YTdiMDtcbiAgLS1fYm9yZGVyOiAjYTdhN2IwO1xufVxuXG4uaWItYnRuLS1zZWNvbmRhcnktbGlnaHQge1xuICAtLV9iZzogdHJhbnNwYXJlbnQ7XG4gIC0tX2JnLXByZXNzOiB0cmFuc3BhcmVudDtcbiAgLS1fY29sb3I6ICNmZmY7XG4gIC0tX2JvcmRlcjogI2ZmZjtcbiAgLS1fc2hhZG93OiAjZmZkMGQ4O1xufVxuLmliLWJ0bi0tc2Vjb25kYXJ5LWxpZ2h0OmhvdmVyOm5vdCg6ZGlzYWJsZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkge1xuICAtLV9iZzogI2VhMWIzZDtcbiAgLS1fYm9yZGVyOiB0cmFuc3BhcmVudDtcbn1cbi5pYi1idG4tLXNlY29uZGFyeS1saWdodDpkaXNhYmxlZCwgLmliLWJ0bi0tc2Vjb25kYXJ5LWxpZ2h0W2FyaWEtZGlzYWJsZWQ9dHJ1ZV0ge1xuICAtLV9iZzogdHJhbnNwYXJlbnQ7XG4gIC0tX2NvbG9yOiAjYTdhN2IwO1xuICAtLV9ib3JkZXI6ICNhN2E3YjA7XG59XG5cbi5pYi1idG4tLWdob3N0IHtcbiAgLS1fY29sb3I6ICNlYTFiM2Q7XG4gIGhlaWdodDogYXV0bztcbn1cbi5pYi1idG4tLWdob3N0OjphZnRlciB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4uaWItYnRuLS1naG9zdCAuaWItYnRuX19pbm5lciB7XG4gIHBhZGRpbmc6IDJweCAwO1xuICBoZWlnaHQ6IGF1dG87XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBjbGlwLXBhdGg6IG5vbmU7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB0ZXh0LXVuZGVybGluZS1vZmZzZXQ6IDNweDtcbiAgdGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzczogMS41cHg7XG4gIHRleHQtZGVjb3JhdGlvbi1jb2xvcjogY3VycmVudENvbG9yO1xuICB0cmFuc2l0aW9uOiBjb2xvciAuMjVzIGN1YmljLWJlemllciguMTYsIDEsIC4zLCAxKSwgdGV4dC1kZWNvcmF0aW9uLWNvbG9yIC4yNXMgY3ViaWMtYmV6aWVyKC4xNiwgMSwgLjMsIDEpO1xufVxuLmliLWJ0bi0tZ2hvc3QgLmliLWJ0bl9faW5uZXI6OmJlZm9yZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4uaWItYnRuLS1naG9zdDpmb2N1cy12aXNpYmxlLCAuaWItYnRuLS1naG9zdDphY3RpdmU6bm90KDpkaXNhYmxlZCkge1xuICAtLV9jb2xvcjogI2FhMTQyZDtcbn1cblxuLy8gRm9jdXNlZCAvIHByZXNzZWQ6IGRhcmsgdGV4dCBjb2xvdXIgb25seSDigJQgbm8gYmcsIG5vIGJvcmRlciwgbm8gcmluZy5cbi5pYi1idG4tLWdob3N0OmZvY3VzLXZpc2libGUsXG4uaWItYnRuLS1naG9zdDphY3RpdmU6bm90KDpkaXNhYmxlZCkge1xuICAtLV9jb2xvcjogI2FhMTQyZDtcbn1cblxuLmliLWJ0bi0tZ2hvc3Q6Zm9jdXMtdmlzaWJsZSAuaWItYnRuX19pbm5lcixcbi5pYi1idG4tLWdob3N0OmFjdGl2ZTpub3QoOmRpc2FibGVkKSAuaWItYnRuX19pbm5lciB7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG59XG4uaWItYnRuLS1naG9zdDpkaXNhYmxlZCwgLmliLWJ0bi0tZ2hvc3RbYXJpYS1kaXNhYmxlZD10cnVlXSB7XG4gIC0tX2NvbG9yOiAjYTdhN2IwO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmliLWJ0bi0td2l0aC1pY29uOmhvdmVyOm5vdCg6ZGlzYWJsZWQpOm5vdChbYXJpYS1kaXNhYmxlZD10cnVlXSkgLmliLWJ0bl9fYXJyb3cge1xuICBhbmltYXRpb246IGliLWFycm93LXNsaWRlIC43cyBjdWJpYy1iZXppZXIoLjE2LCAxLCAuMywgMSkgaW5maW5pdGU7XG59XG5cbi5pYi1idG4tLWljb24tb25seSB7XG4gIHdpZHRoOiA0OHB4O1xufVxuLmliLWJ0bi0taWNvbi1vbmx5IC5pYi1idG5fX2lubmVyIHtcbiAgcGFkZGluZzogMDtcbn1cbi5pYi1idG4tLWljb24tb25seTpob3Zlcjpub3QoOmRpc2FibGVkKTpub3QoW2FyaWEtZGlzYWJsZWQ9dHJ1ZV0pIC5pYi1idG5fX2Fycm93IHtcbiAgYW5pbWF0aW9uOiBpYi1hcnJvdy1zbGlkZSAuN3MgY3ViaWMtYmV6aWVyKC4xNiwgMSwgLjMsIDEpIGluZmluaXRlO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLmliLWJ0biB7XG4gICAgaGVpZ2h0OiA0NHB4O1xuICAgIGZvbnQtc2l6ZTogMTVweDtcbiAgfVxuICAuaWItYnRuX19pbm5lciB7XG4gICAgcGFkZGluZzogMCAxOHB4O1xuICB9XG4gIC5pYi1idG5fX2Fycm93IHN2ZywgLmliLWJ0bl9fYXJyb3cuaWItaWNvbiB7XG4gICAgd2lkdGg6IDEzcHg7XG4gICAgaGVpZ2h0OiAxM3B4O1xuICB9XG4gIC5pYi1idG4tLWljb24tb25seSB7XG4gICAgd2lkdGg6IDQ0cHg7XG4gIH1cbiAgLmliLWJ0bi0taWNvbi1vbmx5IC5pYi1idG5fX2lubmVyIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFNWRyBTcHJpdGUgaWNvbiBiYXNlXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi5pYi1pY29uIHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgZmxleC1zaHJpbms6IDA7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgNS4gSGVhZGVyICYgTmF2aWdhdGlvbiBTdHlsZXNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLm1haW4taGVhZGVyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuICB6LWluZGV4OiAxMDAwO1xuXG4gIC8qIE9ubHkgdGhlIGhpZGUvcmV2ZWFsIHNsaWRlIGdldHMgdGhlIHNsb3cgMXMgZWFzZSDigJQgYmFja2dyb3VuZCBzd2Fwc1xuICAgICAodGhlbWUgY2hhbmdlcywgbWVnYSBtZW51IG9wZW4vY2xvc2UpIGdldCB0aGVpciBvd24gZmFzdCB0cmFuc2l0aW9uIHNvXG4gICAgIHRoZXkgbmV2ZXIgY3Jvc3NmYWRlIHRocm91Z2ggdGhlIHNvbGlkIGRhcmsgY29sb3IgZm9yIGEgZnVsbCBzZWNvbmRcbiAgICAgKHRoYXQgY3Jvc3NmYWRlIHdhcyB0aGUgXCJsb29rcyBkYXJrIGZvciBhIG1vbWVudFwiIGxhZyBvbiB0aGVtZSBjaGFuZ2UpLiAqL1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMXMgY3ViaWMtYmV6aWVyKC4xNiwgMSwgLjMsIDEpLCBiYWNrZ3JvdW5kLWNvbG9yIC4zcyBlYXNlO1xuXG4gIC8qIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyAqL1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZy1wcmltYXJ5KTtcbn1cblxuLyogQXBwbGllZCBmb3Igb25lIGZyYW1lIHdoZW4gdGhlIG1lZ2EgbWVudSBPUEVOUyAoanMvc2hhcmVkLmpzKSBzbyB0aGVcbiAgIGhlYWRlcidzIG93biBiYWNrZ3JvdW5kLWNvbG9yIHRyYW5zaXRpb24gY2FuJ3QgZmFsbCBvdXQgb2Ygc3luYyB3aXRoIHRoZVxuICAgaW5zdGFudGx5LXN3YXBwZWQgbmF2LWxpbmsvbG9nbyBjb2xvcnMg4oCUIHNlZSBpbnN0YW50SGVhZGVyQmFja2dyb3VuZCgpLlxuICAgU2NvcGVkIHRvIC5tYWluLWhlYWRlciBvbmx5IChubyBcIipcIiksIHNvIHRoZSBtZWdhIG1lbnUncyBvd24gb3Blbi9jbG9zZVxuICAgdHJhbnNpdGlvbiBpcyB1bnRvdWNoZWQuIFRoZSBjbG9zZSB0YWtlcyB0aGUgb3Bwb3NpdGUgcm91dGUg4oCUIHNlZVxuICAgLm1lZ2EtbWVudS1jbG9zaW5nIGJlbG93LiAqL1xuLm1haW4taGVhZGVyLmhlYWRlci1pbnN0YW50LWJnIHtcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogdHJhbnNmb3JtO1xufVxuXG4vKiDilIDilIAgTWVnYSBtZW51IGNsb3NlIOKAlCB0aGUgbmF2IGNvbnRlbnQncyBzaGFyZSBvZiB0aGUgcm9sbC11cCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgIGpzL3NoYXJlZC5qcyBob2xkcyAubWVnYS1tZW51LWNsb3NpbmcgZm9yIHRoZSB3aG9sZSBjbG9zZS4gRXZlcnkgb3RoZXJcbiAgIGxpZ2h04oaUZGFyayBzd2FwIG9uIHRoaXMgaGVhZGVyIHN0YXlzIGEgaGFyZCBjdXQsIG9uIHB1cnBvc2U6IGR1cmluZyBhXG4gICBzY3JvbGwtZHJpdmVuIHRoZW1lIGNoYW5nZSB0aGUgcGFnZSBpcyBhbHJlYWR5IG1vdmluZywgYW5kIG9uIGEgbWVnYSBtZW51XG4gICBvcGVuIHRoZSBwYW5lbCB1bnJvbGxpbmcgaXMgd2hhdCB0aGUgZXllIGlzIGZvbGxvd2luZy5cblxuICAgVGhlIGNsb3NlIGlzIHRoZSBvbmUgbW9tZW50IHdoZXJlIGEgY3V0IGlzIHRoZSBsb3VkZXN0IHRoaW5nIG9uIHNjcmVlbiDigJRcbiAgIHRoZSBzd2VlcCBhcnJpdmVzIGF0IHRoZSBiYXIgYW5kIGV2ZXJ5dGhpbmcgaW4gaXQgaGFzIHRvIGJlY29tZSBpdHNcbiAgIHBvc3QtY2xvc2Ugc2VsZi4gVGhlIGJhcidzIHN1cmZhY2UgaGFuZGxlcyB0aGF0IGJ5IGJlaW5nIHdpcGVkIGF3YXkgd2l0aFxuICAgdGhlIHNhbWUgZWRnZSAoc2VlIHRoZSB3aXBlIGluIHRoZSBkZXNrdG9wIGJsb2NrKS4gSXRzIGNvbnRlbnQgY2FuJ3QgYmU6XG4gICB0aGVyZSBpcyBvbmUgbmF2LCBvbmUgbG9nbywgb25lIENUQSwgbm90IHR3byBsYXllcnMgdG8gcmV2ZWFsIGJldHdlZW4uIFNvXG4gICB0aGV5IGNyb3NzZmFkZSDigJQgYnV0IG9uIHRoZSB3aXBlJ3MgY2xvY2ssIDAuMThzIHN0YXJ0aW5nIHRoZSBtb21lbnQgdGhlXG4gICBlZGdlIHJlYWNoZXMgdGhlIGJhciwgc28gdGhlIHR3byByZWFkIGFzIGEgc2luZ2xlIG1vdmVtZW50IHNldHRsaW5nIGluc3RlYWRcbiAgIG9mIGEgd2lwZSBmb2xsb3dlZCBieSBhIGZhZGUuXG5cbiAgIFRoZSB2YWx1ZXMgb25seSBtb3ZlIHdoZW4gc2hhcmVkLmpzIGRyb3BzIC5tZWdhLW1lbnUtb3Blbiwgd2hpY2ggaXMgd2hhdFxuICAgdGhlc2Ugc2VsZWN0b3JzIGhhbmcgb2ZmIChzZWUgdGhlIDppcyguaGVhZGVyLWRhcmssIC5tZWdhLW1lbnUtb3BlbikgcnVsZXNcbiAgIHRocm91Z2hvdXQgdGhpcyBmaWxlKS4gRXZlcnl0aGluZyB0aGF0IHN3YXAgcmVwYWludHMgaGFzIHRvIGJlIGxpc3RlZCBoZXJlXG4gICBvciB0aGUgcGllY2VzIGNvbWUgYXBhcnQgbWlkLWZhZGUuIC5tYWluLWhlYWRlciBpdHNlbGYgaXMgYWJzZW50IGJlY2F1c2UgaXRcbiAgIG5lZWRzIG5vdGhpbmcg4oCUIGl0cyBiYXNlIHJ1bGUgYWxyZWFkeSBjYXJyaWVzIGJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlLFxuICAgYW5kIGl0IGNoYW5nZXMgYXQgdGhlIFNUQVJUIG9mIHRoZSBjbG9zZSwgb3V0IG9mIHNpZ2h0IHVuZGVyIHRoZSBjdXJ0YWluLiAqL1xuLm1haW4taGVhZGVyLm1lZ2EtbWVudS1jbG9zaW5nOjpiZWZvcmUsXG4ubWFpbi1oZWFkZXIubWVnYS1tZW51LWNsb3NpbmcgLm5hdi1saW5rLFxuLm1haW4taGVhZGVyLm1lZ2EtbWVudS1jbG9zaW5nIC5idG4tY3RhLFxuLm1haW4taGVhZGVyLm1lZ2EtbWVudS1jbG9zaW5nIC5oZWFkZXItZGl2aWRlcixcbi5tYWluLWhlYWRlci5tZWdhLW1lbnUtY2xvc2luZyAuYXNrLWV4cG9uYS10ZXh0LFxuLm1haW4taGVhZGVyLm1lZ2EtbWVudS1jbG9zaW5nIC5hc2stZXhwb25hLWJ0bixcbi5tYWluLWhlYWRlci5tZWdhLW1lbnUtY2xvc2luZyAubGFuZy1waWNrZXJfX3RyaWdnZXIsXG4ubWFpbi1oZWFkZXIubWVnYS1tZW51LWNsb3NpbmcgLmxhbmctcGlja2VyX19nbG9iZSxcbi5tYWluLWhlYWRlci5tZWdhLW1lbnUtY2xvc2luZyAubGFuZy1waWNrZXJfX2NhcmV0LFxuLm1haW4taGVhZGVyLm1lZ2EtbWVudS1jbG9zaW5nIC5tb2JpbGUtbWVudS1idG4gLmJhcixcbi5tYWluLWhlYWRlci5tZWdhLW1lbnUtY2xvc2luZyAuaGFtYnVyZ2VyLWxpbmUge1xuICB0cmFuc2l0aW9uOlxuICAgIG9wYWNpdHkgLjE4cyBjdWJpYy1iZXppZXIoMCwgMCwgLjIsIDEpLFxuICAgIGNvbG9yIC4xOHMgY3ViaWMtYmV6aWVyKDAsIDAsIC4yLCAxKSxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yIC4xOHMgY3ViaWMtYmV6aWVyKDAsIDAsIC4yLCAxKSxcbiAgICBib3JkZXItY29sb3IgLjE4cyBjdWJpYy1iZXppZXIoMCwgMCwgLjIsIDEpO1xufVxuXG4vKiBUaGUgbG9nbyBwYWlyIG5lZWRzIGl0cyB2aXNpYmlsaXR5IHRpbWVkIHBlciBkaXJlY3Rpb24sIHNvIGl0IGNhbid0IHJpZGUgdGhlXG4gICBzaGFyZWQgbGlzdCBhYm92ZTogdGhlIGNvcHkgb24gaXRzIHdheSBPVVQgbXVzdCBzdGF5IHBhaW50ZWQgZm9yIHRoZSB3aG9sZVxuICAgZmFkZSAodmlzaWJpbGl0eSBmbGlwcyBhdCB0aGUgZW5kKSwgd2hpbGUgdGhlIG9uZSBvbiBpdHMgd2F5IElOIGhhcyB0byBiZVxuICAgcGFpbnRlZCBmcm9tIGZyYW1lIHplcm8gb3IgaXQgcG9wcyBpbiBhdCB0aGUgZW5kIGluc3RlYWQgb2YgZmFkaW5nLiBCb3RoXG4gICBsYW5kIG9uIHRoZSBzYW1lIHR3byBlbGVtZW50cywgc28g4oCUIGFzIHdpdGggdGhlIG1lZ2EgbWVudSBwYW5lbCDigJQgZWFjaCBzdGF0ZVxuICAgY2FycmllcyB0aGUgZGVsYXkgdGhhdCBiZWxvbmdzIHRvIHRoZSBkaXJlY3Rpb24gaXQgaXMgaGVhZGluZyB0b3dhcmRzLiAqL1xuLm1haW4taGVhZGVyLm1lZ2EtbWVudS1jbG9zaW5nIC5sb2dvLWxpZ2h0LFxuLm1haW4taGVhZGVyLm1lZ2EtbWVudS1jbG9zaW5nOmlzKC5oZWFkZXItZGFyaywgLm1lZ2EtbWVudS1vcGVuKSAubG9nby1kYXJrIHtcbiAgdHJhbnNpdGlvbjpcbiAgICBvcGFjaXR5IC4xOHMgZWFzZSxcbiAgICB2aXNpYmlsaXR5IDBzIGxpbmVhciAuMThzO1xufVxuXG4ubWFpbi1oZWFkZXIubWVnYS1tZW51LWNsb3Npbmc6aXMoLmhlYWRlci1kYXJrLCAubWVnYS1tZW51LW9wZW4pIC5sb2dvLWxpZ2h0LFxuLm1haW4taGVhZGVyLm1lZ2EtbWVudS1jbG9zaW5nIC5sb2dvLWRhcmsge1xuICB0cmFuc2l0aW9uOlxuICAgIG9wYWNpdHkgLjE4cyBlYXNlLFxuICAgIHZpc2liaWxpdHkgMHMgbGluZWFyIDBzO1xufVxuXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAubWFpbi1oZWFkZXIubWVnYS1tZW51LWNsb3Npbmc6OmJlZm9yZSxcbiAgLm1haW4taGVhZGVyLm1lZ2EtbWVudS1jbG9zaW5nIC5sb2dvLWltZyxcbiAgLm1haW4taGVhZGVyLm1lZ2EtbWVudS1jbG9zaW5nIC5uYXYtbGluayxcbiAgLm1haW4taGVhZGVyLm1lZ2EtbWVudS1jbG9zaW5nIC5idG4tY3RhLFxuICAubWFpbi1oZWFkZXIubWVnYS1tZW51LWNsb3NpbmcgLmhlYWRlci1kaXZpZGVyLFxuICAubWFpbi1oZWFkZXIubWVnYS1tZW51LWNsb3NpbmcgLmFzay1leHBvbmEtdGV4dCxcbiAgLm1haW4taGVhZGVyLm1lZ2EtbWVudS1jbG9zaW5nIC5hc2stZXhwb25hLWJ0bixcbiAgLm1haW4taGVhZGVyLm1lZ2EtbWVudS1jbG9zaW5nIC5sYW5nLXBpY2tlcl9fdHJpZ2dlcixcbiAgLm1haW4taGVhZGVyLm1lZ2EtbWVudS1jbG9zaW5nIC5sYW5nLXBpY2tlcl9fZ2xvYmUsXG4gIC5tYWluLWhlYWRlci5tZWdhLW1lbnUtY2xvc2luZyAubGFuZy1waWNrZXJfX2NhcmV0LFxuICAubWFpbi1oZWFkZXIubWVnYS1tZW51LWNsb3NpbmcgLm1vYmlsZS1tZW51LWJ0biAuYmFyLFxuICAubWFpbi1oZWFkZXIubWVnYS1tZW51LWNsb3NpbmcgLmhhbWJ1cmdlci1saW5lLFxuICAubWFpbi1oZWFkZXIubWVnYS1tZW51LWNsb3Npbmc6aXMoLmhlYWRlci1kYXJrLCAubWVnYS1tZW51LW9wZW4pIC5sb2dvLWxpZ2h0LFxuICAubWFpbi1oZWFkZXIubWVnYS1tZW51LWNsb3Npbmc6aXMoLmhlYWRlci1kYXJrLCAubWVnYS1tZW51LW9wZW4pIC5sb2dvLWRhcmsge1xuICAgIHRyYW5zaXRpb246IG5vbmU7XG4gIH1cbn1cblxuLyogQmx1cnJlZCBHbGFzc21vcnBoaXNtIG9uIFNjcm9sbCAqL1xuLm1haW4taGVhZGVyLnNjcm9sbGVkIHtcblxuICAvKiBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjQ5LCAyMzcsIDAuODUpO1xuICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMjBweCk7XG4gIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDIwcHgpO1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLWNvbG9yKTtcbiAgYm94LXNoYWRvdzogMCA0cHggMzBweCByZ2JhKDAsIDAsIDAsIDAuMDIpOyAqL1xufVxuXG4vKiBUcmFuc3BhcmVudC12YXJpYW50IG9ubHk6IG9uY2Ugc2Nyb2xsZWQsIHRoZSBoZWFkZXIgaGFzIG5vdGhpbmcgYmVoaW5kIGl0XG4gICB0byBndWFyYW50ZWUgY29udHJhc3QgZm9yIGl0cyAod2hpdGUpIG5hdiBjb250ZW50LCBzbyBnaXZlIGl0IGEgZGFyayBnbGFzc1xuICAgYmFja2Ryb3AgaW5zdGVhZCBvZiBzdGF5aW5nIGZ1bGx5IHNlZS10aHJvdWdoLiBTb2xpZCBsaWdodC9kYXJrIHRoZW1lc1xuICAgYWxyZWFkeSBwYWludCBhbiBvcGFxdWUgYmFja2dyb3VuZCBhbmQgZG9uJ3QgbmVlZCB0aGlzLiBNZWdhIG1lbnUgZm9yY2VzXG4gICBpdHMgb3duIHNvbGlkIGxvb2ssIHNvIHRoaXMgaXMgc2tpcHBlZCB3aGlsZSBpdCdzIG9wZW4uICovXG4ubWFpbi1oZWFkZXIuaGVhZGVyLWRhcmsuaGVhZGVyLXRyYW5zcGFyZW50LnNjcm9sbGVkOm5vdCgubWVnYS1tZW51LW9wZW4pIHtcbiAgYmFja2dyb3VuZDogcmdiKDU1LCA1NSwgNjYsIC4zKTsgLyogaGVhZGVyLWRhcmsncyAjMzczNzQyLCB0cmFuc2x1Y2VudCAqL1xuICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMjBweCk7XG59XG5cbi5tYWluLWhlYWRlci5oZWFkZXItaGlkZGVuLFxuLmhlYWRlci1jb250YWluZXIuaGVhZGVyLWhpZGRlbiB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTAwJSk7XG5cbiAgLyogdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuM3MgZWFzZTsgKi9cbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDFzIGN1YmljLWJlemllciguMTYsIDEsIC4zLCAxKTtcbn1cblxuLm1haW4taGVhZGVyLmZpcnN0LWZvbGQgLm5hdi1tZW51LFxuLm1haW4taGVhZGVyLmZpcnN0LWZvbGQgLmFzay1leHBvbmEtdG9wYmFyIHtcbiAgb3BhY2l0eTogMDtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbi10cmFuc2xhdGUpO1xufVxuXG5ib2R5Omhhcygjc3RvcnkuYWN0aXZlKSAubWFpbi1oZWFkZXIgLm5hdi1tZW51LFxuYm9keTpoYXMoI3N0b3J5LmFjdGl2ZSkgLm1haW4taGVhZGVyIC5jdGEtc2VjdGlvbixcbmJvZHk6aGFzKCNzdG9yeS5hY3RpdmUpIC5hc2stZXhwb25hLXRvcGJhciB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgb3BhY2l0eTogMDtcbiAgdHJhbnNpdGlvbjpcbiAgICBvcGFjaXR5IC4zcyBlYXNlLFxuICAgIHZpc2liaWxpdHkgLjNzIGVhc2U7XG59XG5cbi8qICNzdG9yeSBhbmQgI3doby13ZS1hcmUtcGFyZW50IHNoYXJlIG9uZSBjb250aW51b3VzICNGRkVGRDEg4oaSICNGRkY5RURcbiAgIGJhY2tncm91bmQgKGNzcy9zdHlsZS5jc3MpLiBUaGUgaGVhZGVyIGhvbGRzIHRoaXMgZmxhdCBwZWFjaCBmb3IgdGhlIHdob2xlXG4gICB6b25lIGJ5IGRlZmF1bHQg4oCUIGl0IGlzIHNvbGlkIHBlYWNoIGZvciBuZWFybHkgdGhlIGVudGlyZSBzcGFuLCBzaW5jZSB0aGVcbiAgIGdyYWRpZW50IGl0c2VsZiBkb2Vzbid0IHN0YXJ0IGZhZGluZyB0byBjcmVhbSB1bnRpbCA2NS44NSUgb2YgdGhlIGZvbGQnc1xuICAgaGVpZ2h0IChjc3Mvc3R5bGUuY3NzKSwgZmFyIGJlbG93IHdoZXJlIHRoZSBoZWFkZXIgc2l0cy4gT25seSB0aGUgdGFpbCBlbmRcbiAgIG9mIHRoZSB6b25lIG5lZWRzIHRvIG1vdmU6IGpzL2hvbWUtc21vb3RoZWVyLTEuanMgc2NydWJzIGFuIGlubGluZVxuICAgYmFja2dyb3VuZC1jb2xvciBvbiAubWFpbi1oZWFkZXIgZnJvbSB0aGlzIHBlYWNoIHRvIHZhcigtLWJnLXByaW1hcnkpIGluXG4gICBzeW5jIHdpdGggdGhhdCBzYW1lIDY1Ljg1JS10by0xMDAlIGZhZGUgKHNlZSB0aGUgXCJIZWFkZXIgYmFja2dyb3VuZCDigJRcbiAgIGNvbnRpbnVvdXMgbWF0Y2ggdG8gdGhlIHN0b3J5IGdyYWRpZW50XCIgYmxvY2spLCBzbyB0aGlzIGZsYXQgY29sb3VyIGlzXG4gICByZWFsbHkganVzdCB0aGUgcmVzdGluZyBzdGF0ZSB0aGUgaW5saW5lIG92ZXJyaWRlIGJsZW5kcyBhd2F5IGZyb20uXG5cbiAgIGpzL2hvbWUtc21vb3RoZWVyLTEuanMgdG9nZ2xlcyB0aGlzIGNsYXNzIGZvciB0aGUgd2hvbGUgc3RvcnkgKyB3aG8td2UtYXJlXG4gICBzcGFuIChzZWUgaGVhZGVyU3Rvcnlab25lKSwgbm90IHBlci1mb2xkLCB2aWEgdGhlIHNhbWUgaW5zdGFudC1jdXQgdHJpY2tcbiAgIHNoYXJlZC5qcyB1c2VzIGZvciBoZWFkZXItZGFyay9oZWFkZXItdHJhbnNwYXJlbnQg4oCUIHRoZSBiYXNlIC5tYWluLWhlYWRlclxuICAgdHJhbnNpdGlvbiBmYWRlcyBiYWNrZ3JvdW5kIGNoYW5nZXMgb3ZlciAwLjNzLCB3aGljaCBvdGhlcndpc2UgbGVmdCB0aGUgb2xkXG4gICBiYWNrZ3JvdW5kIHNob3dpbmcgZm9yIGEgYmVhdCBhZnRlciB0aGUgcGFnZSBoYWQgYWxyZWFkeSBtb3ZlZCBvbi5cbiAgIDpub3QoLmhlYWRlci1kYXJrKSBleGNsdWRlcyB0aGUgbWVnYS1tZW51LW9wZW4gc3RhdGUsIHdoaWNoIGZvcmNlcyBpdHMgb3duXG4gICBzb2xpZCBkYXJrIHN1cmZhY2UgcmVnYXJkbGVzcyBvZiBzZWN0aW9uIHRoZW1lLiAqL1xuLm1haW4taGVhZGVyLmhlYWRlci1zdG9yeTpub3QoLmhlYWRlci1kYXJrKSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmVmZDE7XG59XG5cbi8qIEhvdmVyaW5nIChvciB0YWJiaW5nIGludG8pIHRoZSBoZWFkZXIgYnJpbmdzIHRoZSBwYXJrZWQgbmF2IGFuZCBDVEEgYmFjayDigJRcbiAgIHRoZXkncmUgb25seSB2aXN1YWxseSBoaWRkZW4gb24gdGhlIHN0b3J5IGZvbGQsIG5vdCByZW1vdmVkLiBHYXRlZCBvblxuICAgLmludHJvLWRvbmUgKHNldCBieSBqcy9ob21lLmpzIHdoZW4gdGhlIDNzIGxvZ28vdG9wYmFyIHJldmVhbCB0d2VlblxuICAgZmluaXNoZXMpIHNvIGhvdmVyaW5nIGVhcmx5IGNhbid0IGJlYXQgdGhlIGxvZ28gb24gc2NyZWVuLiBTZWxlY3RvcnMgbWlycm9yXG4gICB0aGUgaGlkZSBydWxlIHdpdGggOmhvdmVyLzpmb2N1cy13aXRoaW4gYWRkZWQgc28gdGhleSB3aW4gb24gc3BlY2lmaWNpdHkuICovXG5ib2R5LmludHJvLWRvbmU6aGFzKCNzdG9yeS5hY3RpdmUpIC5tYWluLWhlYWRlcjpob3ZlciAubmF2LW1lbnUsXG5ib2R5LmludHJvLWRvbmU6aGFzKCNzdG9yeS5hY3RpdmUpIC5tYWluLWhlYWRlcjpmb2N1cy13aXRoaW4gLm5hdi1tZW51LFxuYm9keS5pbnRyby1kb25lOmhhcygjc3RvcnkuYWN0aXZlKSAubWFpbi1oZWFkZXI6aG92ZXIgLmN0YS1zZWN0aW9uLFxuYm9keS5pbnRyby1kb25lOmhhcygjc3RvcnkuYWN0aXZlKSAubWFpbi1oZWFkZXI6Zm9jdXMtd2l0aGluIC5jdGEtc2VjdGlvbiB7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIG9wYWNpdHk6IDE7XG59XG5cbi8qIEFuIG9wZW4gbWVnYSBtZW51IHBpbnMgdGhlIG5hdiBhbmQgQ1RBIHZpc2libGUgcmVnYXJkbGVzcyBvZiBob3ZlciDigJQgdGhlXG4gICBwYW5lbCBpcyBhIGNoaWxkIG9mIC5uYXYtbWVudSwgc28gd2l0aG91dCB0aGlzLCBtb3ZpbmcgdGhlIHBvaW50ZXIgb2ZmIHRoZVxuICAgaGVhZGVyIChvciBvdXQgb2YgdGhlIHZpZXdwb3J0KSBmYWRlcyB0aGUgc3RpbGwtb3BlbiBtZW51IGF3YXkuIEl0IHN0YXlzIHVwXG4gICB1bnRpbCBzaGFyZWQuanMgY2xvc2VzIGl0IHZpYSB0aGUgY2xpY2stb3V0c2lkZSAvIEVzY2FwZSBoYW5kbGVycy4gKi9cbmJvZHk6aGFzKCNzdG9yeS5hY3RpdmUpIC5tYWluLWhlYWRlci5tZWdhLW1lbnUtb3BlbiAubmF2LW1lbnUsXG5ib2R5Omhhcygjc3RvcnkuYWN0aXZlKSAubWFpbi1oZWFkZXIubWVnYS1tZW51LW9wZW4gLmN0YS1zZWN0aW9uIHtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgb3BhY2l0eTogMTtcbn1cblxuLyogSGlkZSBuYXYsIENUQSwgYW5kIHRvcGJhciB3aGlsZSBvbiB0aGUgc3RvcnkgZm9sZCAoZGVza3RvcCBvbmx5KSAqL1xuQG1lZGlhIChtaW4td2lkdGg6IDEwMjRweCkge1xuXG4gIC8qIGJvZHk6aGFzKCNzdG9yeS5hY3RpdmUpIC5tYWluLWhlYWRlciAubmF2LW1lbnUsXG4gIGJvZHk6aGFzKCNzdG9yeS5hY3RpdmUpIC5tYWluLWhlYWRlciAuY3RhLXNlY3Rpb24sXG4gIGJvZHk6aGFzKCNzdG9yeS5hY3RpdmUpIC5hc2stZXhwb25hLXRvcGJhciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfSAqL1xufVxuXG4ubm8tdHJhbnNpdGlvbixcbi5uby10cmFuc2l0aW9uICoge1xuICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQXNrIEV4cG9uYSBUb3AgQmFyXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi5hc2stZXhwb25hLXRvcGJhciB7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDEycHg7XG4gIHRyYW5zaXRpb246XG4gICAgb3BhY2l0eSAuM3MgZWFzZSxcbiAgICB2aXNpYmlsaXR5IC4zcyBlYXNlO1xuICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoXG4gICAgOTBkZWcsXG4gICAgIzM3Mzc0MiA2NSUsXG4gICAgIzI4NGNiYSA4MCUsXG4gICAgI2VhMWIzZCA5MSUsXG4gICAgIzM3Mzc0MiA5NCVcbiAgKTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiA5OTtcbn1cblxuLnRvcGJhci1jb250YWluZXIge1xuICBtYXgtd2lkdGg6IHZhcigtLWNvbnRhaW5lci13aWR0aCk7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLmFzay1leHBvbmEtYnRuLXdyYXBwZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDEyMHB4O1xuICBwYWRkaW5nOiAwIDJweCAycHg7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudChcbiAgICA5MGRlZyxcbiAgICByZ2IoNDAsIDc2LCAxODYsIDEpIDE1JSxcbiAgICByZ2IoMjM0LCAyNywgNjEsIDEpIDkxJVxuICApO1xuICBjbGlwLXBhdGg6IHBvbHlnb24oXG4gICAgMCAwLFxuICAgIDEwMCUgMCxcbiAgICBjYWxjKDEwMCUgLSA5cHgpIGNhbGMoMTAwJSAtIDEwcHgpLFxuICAgIGNhbGMoMTAwJSAtIDEwcHgpIGNhbGMoMTAwJSAtIDdweCksXG4gICAgY2FsYygxMDAlIC0gMTFweCkgY2FsYygxMDAlIC0gNHB4KSxcbiAgICBjYWxjKDEwMCUgLSAxM3B4KSBjYWxjKDEwMCUgLSAycHgpLFxuICAgIGNhbGMoMTAwJSAtIDE4cHgpIDEwMCUsXG4gICAgMThweCAxMDAlLFxuICAgIDEzcHggY2FsYygxMDAlIC0gMnB4KSxcbiAgICAxMXB4IGNhbGMoMTAwJSAtIDRweCksXG4gICAgMTBweCBjYWxjKDEwMCUgLSA3cHgpLFxuICAgIDlweCBjYWxjKDEwMCUgLSAxMHB4KVxuICApO1xufVxuXG4ubWFpbi1oZWFkZXIgLmFzay1leHBvbmEtYnRuIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJhY2tncm91bmQ6IHZhcigtLWJnLXByaW1hcnkpO1xuICBwYWRkaW5nOiA4cHggMjRweDtcbiAgY2xpcC1wYXRoOiBwb2x5Z29uKFxuICAgIDAgMCxcbiAgICAxMDAlIDAsXG4gICAgY2FsYygxMDAlIC0gOXB4KSBjYWxjKDEwMCUgLSA4cHgpLFxuICAgIGNhbGMoMTAwJSAtIDEwcHgpIGNhbGMoMTAwJSAtIDVweCksXG4gICAgY2FsYygxMDAlIC0gMTFweCkgY2FsYygxMDAlIC0gMnB4KSxcbiAgICBjYWxjKDEwMCUgLSAxM3B4KSBjYWxjKDEwMCUgLSAxcHgpLFxuICAgIGNhbGMoMTAwJSAtIDE2cHgpIDEwMCUsXG4gICAgMTZweCAxMDAlLFxuICAgIDEzcHggY2FsYygxMDAlIC0gMXB4KSxcbiAgICAxMXB4IGNhbGMoMTAwJSAtIDJweCksXG4gICAgMTBweCBjYWxjKDEwMCUgLSA1cHgpLFxuICAgIDlweCBjYWxjKDEwMCUgLSA4cHgpXG4gICk7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAuM3MgZWFzZTtcbn1cblxuLmFzay1leHBvbmEtYnRuOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogI2Y3ZjFlNjtcbn1cblxuLm1haW4taGVhZGVyIC5hc2stZXhwb25hLWJ0bi1jb250ZW50IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiA4cHg7XG59XG5cbi5tYWluLWhlYWRlciAuYXNrLWV4cG9uYS1pY29uIHtcbiAgd2lkdGg6IDE2cHg7XG4gIGhlaWdodDogMTZweDtcbiAgb2JqZWN0LWZpdDogY29udGFpbjtcbn1cblxuLm1haW4taGVhZGVyIC5hc2stZXhwb25hLXRleHQge1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpO1xuICBsZXR0ZXItc3BhY2luZzogLjVweDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cblxuLyogRGFyayBtb2RlIGhlYWRlciBhZGFwdGF0aW9uIGZvciB0b3AgYmFyICovXG4ubWFpbi1oZWFkZXI6aXMoLmhlYWRlci1kYXJrLCAubWVnYS1tZW51LW9wZW4pIC5hc2stZXhwb25hLXRleHQge1xuICBjb2xvcjogI2ZmZjtcbn1cblxuLm1haW4taGVhZGVyOmlzKC5oZWFkZXItZGFyaywgLm1lZ2EtbWVudS1vcGVuKSAuYXNrLWV4cG9uYS1idG4ge1xuICBiYWNrZ3JvdW5kOiAjMmUyZjM2O1xufVxuXG4ubWFpbi1oZWFkZXI6aXMoLmhlYWRlci1kYXJrLCAubWVnYS1tZW51LW9wZW4pIC5hc2stZXhwb25hLWJ0bjpob3ZlciB7XG4gIGJhY2tncm91bmQ6ICMzNzM3NDI7XG59XG5cbi8qIFRyYW5zcGFyZW50IHZhcmlhbnQgb25seTogdGhlIEV4cG9uYSBwaWxsIGtlZXBzIGl0cyBsaWdodCAoY3JlYW0vZGFyay10ZXh0KVxuICAgbG9vayBldmVuIHRob3VnaCB0aGUgcmVzdCBvZiB0aGUgaGVhZGVyIGlzIGRhcmstdGhlbWVkIOKAlCBpdCBkb2Vzbid0IG5lZWRcbiAgIGhlYWRlci1kYXJrJ3Mgd2hpdGUtb24tZGFyayB0cmVhdG1lbnQgc2luY2UgaXQgaXNuJ3Qgc2l0dGluZyBvbiBhIHNvbGlkXG4gICBkYXJrIGJhci4gOm5vdCgubWVnYS1tZW51LW9wZW4pIG1hdGNoZXMgdGhlIGJhY2tncm91bmQgcnVsZSBiZWxvdyDigJQgb25jZVxuICAgdGhlIG1lZ2EgbWVudSBmb3JjZXMgdGhlIGhlYWRlciBiYWNrIHRvIGEgc29saWQgZGFyayBiYXIsIHRoZSBwaWxsIHJldmVydHNcbiAgIHRvIHRoZSByZWd1bGFyIGhlYWRlci1kYXJrICh3aGl0ZS9kYXJrLXBpbGwpIHN0eWxpbmcgYWJvdmUgZm9yIGNvbnRyYXN0LlxuICAgSGlnaGVyIHNwZWNpZmljaXR5IHRoYW4gdGhlIC5oZWFkZXItZGFyayBydWxlcyBhYm92ZSAoNSBjbGFzc2VzIHZzIDMpIHNvXG4gICBpdCB3aW5zIHJlZ2FyZGxlc3Mgb2Ygc291cmNlIG9yZGVyLiAqL1xuLm1haW4taGVhZGVyLmhlYWRlci1kYXJrLmhlYWRlci10cmFuc3BhcmVudDpub3QoLm1lZ2EtbWVudS1vcGVuKSAuYXNrLWV4cG9uYS10ZXh0IHtcbiAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7XG59XG5cbi5tYWluLWhlYWRlci5oZWFkZXItZGFyay5oZWFkZXItdHJhbnNwYXJlbnQ6bm90KC5tZWdhLW1lbnUtb3BlbikgLmFzay1leHBvbmEtYnRuIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tYmctcHJpbWFyeSk7XG59XG5cbi5tYWluLWhlYWRlci5oZWFkZXItZGFyay5oZWFkZXItdHJhbnNwYXJlbnQ6bm90KC5tZWdhLW1lbnUtb3BlbikgLmFzay1leHBvbmEtYnRuOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogI2Y3ZjFlNjtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC5hc2stZXhwb25hLWJ0bi13cmFwcGVyIHtcbiAgICByaWdodDogNjBweDtcbiAgfVxuXG4gIC5hc2stZXhwb25hLXRvcGJhciB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KFxuICAgICAgOTBkZWcsXG4gICAgICByZ2IoNDYsIDQ3LCA1NCwgMSkgOCUsXG4gICAgICByZ2IoNDAsIDc2LCAxODYsIDEpIDIxJSxcbiAgICAgIHJnYigyMzQsIDI3LCA2MSwgMSkgMTAwJSxcbiAgICAgIHJnYig0NiwgNDcsIDU0LCAxKSA5NCVcbiAgICApO1xuICB9XG5cbiAgLm1haW4taGVhZGVyIC5hc2stZXhwb25hLXRleHQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLmhlYWRlci1jb250YWluZXIge1xuICBtYXgtd2lkdGg6IHZhcigtLWNvbnRhaW5lci13aWR0aC1wYWRkKTtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogODBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHBhZGRpbmc6IDAgNjBweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuXG4gIC8qIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24tc21vb3RoKTsgKi9cbn1cblxuLyogSGVscGVyIHRvIGluc3RhbnRseSBzd2l0Y2ggaGVhZGVyIHRoZW1lcyB3aXRob3V0IHRyYW5zaXRpb24gZGVsYXkgKi9cbi5tYWluLWhlYWRlci5uby10cmFuc2l0aW9uLFxuLm1haW4taGVhZGVyLm5vLXRyYW5zaXRpb24gKiB7XG4gIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLyogSGVhZGVyIERhcmsgVGhlbWUgKGFwcGxpZWQgZHluYW1pY2FsbHkgb24gZGFyayBmb2xkcykgKi9cblxuLm1haW4taGVhZGVyLmhlYWRlci1kYXJrLnNjcm9sbGVkIHtcblxuICAvKiBiYWNrZ3JvdW5kOiByZ2JhKDM5LCAzOSwgNDYsIDAuODUpOyAqL1xuXG4gIC8qIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7ICovXG59XG5cbi5tYWluLWhlYWRlcjppcyguaGVhZGVyLWRhcmssIC5tZWdhLW1lbnUtb3BlbikgLm5hdi1saW5rIHtcbiAgY29sb3I6ICNmZmY7XG59XG5cbi5tYWluLWhlYWRlcjppcyguaGVhZGVyLWRhcmssIC5tZWdhLW1lbnUtb3BlbikgLm5hdi1saW5rOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1yZWQpO1xufVxuXG4vKiBTd2FwIExvZ28gdmlhIENTUyDigJQgY3Jvc3NmYWRlZCwgbm90IGRpc3BsYXktc3dhcHBlZCwgc28gdGhlIHBhaXIgY2FuIG1vdmVcbiAgIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGNocm9tZSBkdXJpbmcgLm1lZ2EtbWVudS1jbG9zaW5nIChkaXNwbGF5IGlzIG5vdCBhblxuICAgYW5pbWF0YWJsZSBwcm9wZXJ0eSkuIFRoZSBsaWdodCBjb3B5IGlzIGxpZnRlZCBvdXQgb2YgZmxvdyBvbiB0b3Agb2YgdGhlXG4gICBkYXJrIG9uZSwgc28gdGhlIGxheW91dCBib3ggaXMgaWRlbnRpY2FsIGVpdGhlciB3YXkg4oCUIGJvdGggYXJlIDExOMOXMjMgZnJvbVxuICAgLmxvZ28taW1nLiBObyB0cmFuc2l0aW9uIGlzIGRlY2xhcmVkIGhlcmUsIHNvIGV2ZXJ5d2hlcmUgb3V0c2lkZSB0aGUgbWVnYVxuICAgbWVudSBjbG9zZSB0aGUgc3dhcCBzdGF5cyBpbnN0YW50LCBleGFjdGx5IGFzIHRoZSBkaXNwbGF5IHN3YXAgd2FzLiAqL1xuLm1haW4taGVhZGVyIC5sb2dvLWxpZ2h0IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIG9wYWNpdHk6IDA7XG5cbiAgLyogS2VlcHMgdGhlIHBhcmtlZCBjb3B5IG91dCBvZiB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlLCB0aGUgd2F5IGRpc3BsYXk6bm9uZVxuICAgICBkaWQg4oCUIG90aGVyd2lzZSB0aGUgc2FtZSBhbHQgdGV4dCBpcyBhbm5vdW5jZWQgdHdpY2UgaW5zaWRlIG9uZSBsaW5rLlxuICAgICBQYWlyZWQgd2l0aCBvcGFjaXR5IGl0IHN0aWxsIGNyb3NzZmFkZXM6IHZpc2liaWxpdHkgZmxpcHMgYXQgdGhlIEVORCBvZiBhXG4gICAgIHRyYW5zaXRpb24gd2hlbiBoZWFkaW5nIHRvIGhpZGRlbiwgc28gdGhlIG91dGdvaW5nIGxvZ28gc3RheXMgcGFpbnRlZCBmb3JcbiAgICAgdGhlIHdob2xlIGZhZGUuIGBpbmhlcml0YCwgbm90IGB2aXNpYmxlYCwgc28gYSBoaWRkZW4gLmxvZ28tbGluayAodGhlXG4gICAgIGhvbWVwYWdlIGludHJvIHBhcmtzIGl0KSBjYW4gbmV2ZXIgYmUgb3ZlcnJpZGRlbiBmcm9tIGluIGhlcmUuICovXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cblxuLm1haW4taGVhZGVyOmlzKC5oZWFkZXItZGFyaywgLm1lZ2EtbWVudS1vcGVuKSAubG9nby1saWdodCB7XG4gIG9wYWNpdHk6IDE7XG4gIHZpc2liaWxpdHk6IGluaGVyaXQ7XG59XG5cbi5tYWluLWhlYWRlcjppcyguaGVhZGVyLWRhcmssIC5tZWdhLW1lbnUtb3BlbikgLmxvZ28tZGFyayB7XG4gIG9wYWNpdHk6IDA7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cblxuLm1haW4taGVhZGVyOmlzKC5oZWFkZXItZGFyaywgLm1lZ2EtbWVudS1vcGVuKSAubW9iaWxlLW1lbnUtYnRuIC5iYXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4ubWFpbi1oZWFkZXI6aXMoLmhlYWRlci1kYXJrLCAubWVnYS1tZW51LW9wZW4pIC5idG4tY3RhIHtcbiAgYm9yZGVyLWNvbG9yOiAjZmZmO1xuICBjb2xvcjogI2ZmZjtcbn1cblxuLm1haW4taGVhZGVyOmlzKC5oZWFkZXItZGFyaywgLm1lZ2EtbWVudS1vcGVuKSAuYnRuLWN0YTpob3ZlciB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmY7XG4gIGNvbG9yOiAjMjcyNzJlO1xufVxuXG4vKiAubWVnYS1tZW51LWNsb3NpbmcgaXMgaW4gaGVyZSBzbyB0aGUgcGFuZWwncyBvd24gY29sb3VycyBvdXRsaXZlIHRoZSBoYW5kLW9mZlxuICAgYXQgdGhlIGVuZCBvZiB0aGUgcm9sbC11cDogLm1lZ2EtbWVudS1vcGVuIGNvbWVzIG9mZiBhdCB0aGUgZXhhY3QgbWlsbGlzZWNvbmRcbiAgIHRoZSBwYW5lbCdzIGNsaXAgZmluaXNoZXMsIGFuZCB3aXRob3V0IHRoaXMgdGhlIHR3byB3b3VsZCByYWNlIGZvciB0aGUgbGFzdFxuICAgZnJhbWUg4oCUIGEgc2xpdmVyIG9mIGxpZ2h0LXRoZW1lZCBwYW5lbCBiZWZvcmUgaXQgaXMgaGlkZGVuLiAqL1xuLm1haW4taGVhZGVyOmlzKC5oZWFkZXItZGFyaywgLm1lZ2EtbWVudS1vcGVuLCAubWVnYS1tZW51LWNsb3NpbmcpIC5tZWdhLW1lbnUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzczNzQyO1xuICBib3JkZXI6IDFweCBkYXNoZWQgcmdiKDI1NSwgMjU1LCAyNTUsIC4xKTtcbn1cblxuLyogR3JhaW4gb3ZlcmxheSBsaXZlcyBvbiAubWFpbi1oZWFkZXIsIE5PVCAubWVnYS1tZW51OiAubWVnYS1tZW51IGlzXG4gICBwb3NpdGlvbjpmaXhlZCArIGJhY2tkcm9wLWZpbHRlciAobGluZSB+NjUzKSArIG92ZXJmbG93LXk6YXV0byAoc2Nyb2xsc1xuICAgaXRzIG93biBjb250ZW50IHdoZW4gdGhlIG1lbnUgaXMgdGFsbGVyIHRoYW4gdGhlIHZpZXdwb3J0KS4gYmFja2Ryb3AtZmlsdGVyXG4gICBjcmVhdGVzIGEgbmV3IGNvbnRhaW5pbmcgYmxvY2sgZm9yIHBvc2l0aW9uOmZpeGVkIGRlc2NlbmRhbnRzIChzYW1lIGFzXG4gICB0cmFuc2Zvcm0vZmlsdGVyL3dpbGwtY2hhbmdlKSwgc28gYSBmaXhlZCA6OmFmdGVyIG5lc3RlZCBpbnNpZGUgLm1lZ2EtbWVudVxuICAgc2lsZW50bHkgZ2V0cyByZS1hbmNob3JlZCB0byAubWVnYS1tZW51IGFueXdheSBhbmQgc3RpbGwgc2Nyb2xscyBhd2F5IHdpdGhcbiAgIGl0cyBjb250ZW50LiAubWFpbi1oZWFkZXIgaGFzIG5laXRoZXIgYmFja2Ryb3AtZmlsdGVyIG5vciB0cmFuc2Zvcm0gd2hpbGVcbiAgIC5tZWdhLW1lbnUtb3BlbiAoc2VlIHRoZSA6bm90KC5tZWdhLW1lbnUtb3BlbikgcnVsZSBhYm92ZSBhbmQgc2hhcmVkLmpzJ3NcbiAgIGhlYWRlci1oaWRkZW4gZ3VhcmQpLCBzbyBhbmNob3JpbmcgaGVyZSBhY3R1YWxseSBzdGF5cyBwaW5uZWQgdG8gdGhlXG4gICB2aWV3cG9ydCByZWdhcmRsZXNzIG9mIGhvdyBmYXIgdGhlIG1lbnUncyBvd24gY29udGVudCBpcyBzY3JvbGxlZC5cblxuICAgVGhpcyBpcyB0aGUg4omkMTAyNHB4IHZlcnNpb24g4oCUIGl0IGZsaXBzIG9uIGFuZCBvZmYgd2l0aCB0aGUgcGFuZWwsIHdoaWNoIGlzXG4gICByaWdodCB0aGVyZSBiZWNhdXNlIHRoZSBwYW5lbCBpdHNlbGYganVzdCBhcHBlYXJzL2Rpc2FwcGVhcnMuIERlc2t0b3BcbiAgICjiiaUxMDI1cHgpIG92ZXJyaWRlcyBpdCBmdXJ0aGVyIGRvd24gc28gdGhlIGdyYWluIHJvbGxzIHdpdGggdGhlIHBhbmVsXG4gICBpbnN0ZWFkIG9mIHZlaWxpbmcgdGhlIHBhZ2UgYWhlYWQgb2YgaXQuIEtleWVkIHRvIC5tZWdhLW1lbnUtb3BlbiBhbG9uZSxcbiAgIG5vdCBoZWFkZXItZGFyazogdGhlIGNsb3NlIGhhbmRzIHRoZSBoZWFkZXIgaXRzIHBvc3QtY2xvc2UgdGhlbWUgdXAgZnJvbnRcbiAgIChqcy9zaGFyZWQuanMpLCBzbyBoZWFkZXItZGFyayBpcyBhbHJlYWR5IGdvbmUgd2hpbGUgdGhlIG1lbnUgaXMgb24gc2NyZWVuLiAqL1xuLm1haW4taGVhZGVyLm1lZ2EtbWVudS1vcGVuOjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgaW5zZXQ6IDkycHggMCAwOyAvKiBtYXRjaGVzIC5tZWdhLW1lbnUncyB0b3A6IDgwcHggaGVhZGVyICsgMTJweCB0b3BiYXIgKi9cbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKFwiLi4vLi4vLi4vc3RhdGljL2Fzc2V0cy9pbWFnZXMvbGF0ZXN0L2dyYWluLnBuZ1wiKTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdDtcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgbWl4LWJsZW5kLW1vZGU6IG5vcm1hbDtcbiAgb3BhY2l0eTogMTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDEwO1xufVxuXG4ubWFpbi1oZWFkZXI6aXMoLmhlYWRlci1kYXJrLCAubWVnYS1tZW51LW9wZW4sIC5tZWdhLW1lbnUtY2xvc2luZykgLm1lbnUtaGVhZGluZyB7XG4gIGNvbG9yOiAjZmZkMGQ4O1xufVxuXG4ubWFpbi1oZWFkZXI6aXMoLmhlYWRlci1kYXJrLCAubWVnYS1tZW51LW9wZW4sIC5tZWdhLW1lbnUtY2xvc2luZykgLnN1Ym1lbnUtbGluayB7XG4gIGNvbG9yOiAjZmZmO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gIC5oZWFkZXItY29udGFpbmVyIHtcbiAgICBwYWRkaW5nOiAwIDIwcHg7XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG5cbiAgLyogLm1haW4taGVhZGVyLmhlYWRlci1oaWRkZW4ge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbiAgfSAqL1xuICAubWFpbi1oZWFkZXI6aXMoLmhlYWRlci1kYXJrLCAubWVnYS1tZW51LW9wZW4sIC5tZWdhLW1lbnUtY2xvc2luZykgLm1lZ2EtbWVudSB7XG4gICAgYmFja2dyb3VuZDogIzM3Mzc0MiB1cmwoXCIuLi8uLi8uLi9zdGF0aWMvYXNzZXRzL2ltYWdlcy9sYXRlc3QvZ3JhaW4ucG5nXCIpIGNlbnRlcjtcbiAgfVxuXG4gIC5tYWluLWhlYWRlci5tZWdhLW1lbnUtb3Blbjo6YWZ0ZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAuaGVhZGVyLWNvbnRhaW5lci5oZWFkZXItaGlkZGVuLW1vYmlsZSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMDAlKSAhaW1wb3J0YW50O1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuM3MgZWFzZTtcbiAgfVxuXG4gIC5oZWFkZXItY29udGFpbmVyIHtcbiAgICBwYWRkaW5nOiA0NXB4IDIwcHggMjRweDtcbiAgICBoZWlnaHQ6IDgwcHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4zcyBlYXNlO1xuICB9XG59XG5cbi8qIExvZ28gKi9cbi5sb2dvLXNlY3Rpb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4ubG9nby1saW5rIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAvKiBBbmNob3JzIHRoZSBzdGFja2VkIC5sb2dvLWxpZ2h0IGNvcHkgKHNlZSB0aGUgbG9nbyBzd2FwIHJ1bGVzIGFib3ZlKS4gKi9cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4ucGFnZS1ob21lIC5sb2dvLWxpbmsge1xuICBvcGFjaXR5OiAwO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG5cbkBrZXlmcmFtZXMgZmFkZS1pbiB7XG4gIDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgfVxuXG4gIDEwMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgfVxufVxuXG4ubG9nby1pbWcge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDExOHB4O1xuICBoZWlnaHQ6IDIzcHg7XG59XG5cbi8qIE5hdiBNZW51IExpbmtzICovXG4uaGVhZGVyLWNvbnRhaW5lciAubmF2LW1lbnUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDMycHg7XG4gIHRyYW5zaXRpb246XG4gICAgb3BhY2l0eSAuM3MgZWFzZSxcbiAgICB2aXNpYmlsaXR5IC4zcyBlYXNlO1xufVxuXG4ubWFpbi1oZWFkZXIgLm5hdi1saXN0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgZ2FwOiA0MHB4O1xuICBtYXJnaW4tYm90dG9tOiAwICFpbXBvcnRhbnQ7XG59XG5cbi5tYWluLWhlYWRlciAubmF2LWl0ZW0ge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi5tYWluLWhlYWRlciAubmF2LWl0ZW0uYWN0aXZlOjphZnRlcixcbi5tYWluLWhlYWRlciAubmF2LWl0ZW0ubWVudS1hY3RpdmU6OmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IC0xNnB4O1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAycHg7XG4gIGJvcmRlci1ib3R0b206IDFweCBkYXNoZWQgdmFyKC0tYWNjZW50LXJlZCk7XG59XG5cbi5tYWluLWhlYWRlciAubmF2LWxpbmsge1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpO1xuICBwYWRkaW5nOiAxMHB4IDA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogNnB4O1xufVxuXG4ubWFpbi1oZWFkZXIgLm5hdi1saW5rOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1yZWQpO1xufVxuXG4ubWFpbi1oZWFkZXIgLm5hdi1pY29uIHtcbiAgd2lkdGg6IDEycHg7XG4gIGhlaWdodDogYXV0bztcbiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbi1zbW9vdGgpO1xufVxuXG4vKiBUd28tc3RhdGUgbmF2IGljb25zOiBjbG9zZWQgPSBjaGV2cm9uLWRvd24sIG9wZW4gPSBYICovXG4ubWFpbi1oZWFkZXIgLm5hdi1pY29uLS1vcGVuIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLm1haW4taGVhZGVyIC5uYXYtaXRlbS5hY3RpdmUgLm5hdi1pY29uLS1jbG9zZWQge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4ubWFpbi1oZWFkZXIgLm5hdi1pdGVtLmFjdGl2ZSAubmF2LWljb24tLW9wZW4ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbi8qIEhlYWRlciBEaXZpZGVyICovXG4ubWFpbi1oZWFkZXIgLmhlYWRlci1kaXZpZGVyIHtcbiAgd2lkdGg6IDFweDtcbiAgaGVpZ2h0OiAyNHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpO1xuICBvcGFjaXR5OiAuMjtcbn1cblxuLm1haW4taGVhZGVyOmlzKC5oZWFkZXItZGFyaywgLm1lZ2EtbWVudS1vcGVuKSAuaGVhZGVyLWRpdmlkZXIge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4vKiBIZWFkZXIgcmlnaHQtc2lkZSBzbG90ICovXG4uaGVhZGVyLWNvbnRhaW5lciAuY3RhLXNlY3Rpb24ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIExhbmd1YWdlIFBpY2tlciDigJQgRGVza3RvcCAoLmhlYWRlci1jb250YWluZXIpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi5sYW5nLXBpY2tlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmxhbmctcGlja2VyX190cmlnZ2VyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAxMHB4O1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHBhZGRpbmc6IDZweCAxMHB4O1xuICBjb2xvcjogIzJmMmYzOTtcbiAgYm9yZGVyOiAwO1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1wcmltYXJ5KTtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogMzAwO1xuICBsaW5lLWhlaWdodDogMzBweDtcbn1cblxuLmxhbmctcGlja2VyLmlzLW9wZW4gLmxhbmctcGlja2VyX190cmlnZ2VyIHtcbiAgYmFja2dyb3VuZDogI2ZhZWNkMztcbn1cblxuLmxhbmctcGlja2VyX19nbG9iZSB7XG4gIGNvbG9yOiAjMmYyZjM5O1xuICBmbGV4LXNocmluazogMDtcbiAgdHJhbnNpdGlvbjogY29sb3IgLjJzIGVhc2U7XG59XG5cbi5sYW5nLXBpY2tlcl9fdHJpZ2dlcjpob3ZlciAubGFuZy1waWNrZXJfX2dsb2JlLFxuLmxhbmctcGlja2VyLmlzLW9wZW4gLmxhbmctcGlja2VyX19nbG9iZSB7XG4gIGNvbG9yOiAjZWExYjNkO1xufVxuXG4ubGFuZy1waWNrZXJfX2NhcmV0IHtcbiAgY29sb3I6ICMyZjJmMzk7XG4gIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4ubGFuZy1waWNrZXJfX2Ryb3Bkb3duIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDEwMCU7XG4gIHJpZ2h0OiAwO1xuICBiYWNrZ3JvdW5kOiAjZmFlY2QzO1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci10b3A6IG5vbmU7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHBhZGRpbmc6IDRweCA0cHggNnB4O1xuICBtaW4td2lkdGg6IDEwMCU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHotaW5kZXg6IDIwMDtcbn1cblxuLmxhbmctcGlja2VyLmlzLW9wZW4gLmxhbmctcGlja2VyX19kcm9wZG93biB7XG4gIGRpc3BsYXk6IGZsZXg7XG59XG5cbi5sYW5nLXBpY2tlcl9fb3B0LmlzLWFjdGl2ZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5sYW5nLXBpY2tlcl9fb3B0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiA4cHg7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGJvcmRlcjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwYWRkaW5nOiA3cHggMTBweDtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtcHJpbWFyeSk7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgbGluZS1oZWlnaHQ6IDMwcHg7XG4gIGNvbG9yOiAjMmYyZjM5O1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLmxhbmctcGlja2VyX19vcHQ6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHdpZHRoOiAxM3B4O1xuICBoZWlnaHQ6IDEzcHg7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgYm9yZGVyOiAxLjVweCBzb2xpZCByZ2IoNDcsIDQ3LCA1NywgLjM1KTtcbiAgZmxleC1zaHJpbms6IDA7XG59XG5cbi5sYW5nLXBpY2tlcl9fb3B0OmhvdmVyIHtcbiAgYmFja2dyb3VuZDogcmdiKDQ3LCA0NywgNTcsIC4wNik7XG59XG5cbi8qIERhcmsgaGVhZGVyICovXG4ubWFpbi1oZWFkZXIuaGVhZGVyLWRhcmsge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzczNzQyO1xufVxuXG4vKiBUaGUgYmFyJ3MgZGFyayBzdXJmYWNlLCBhcyBhIGxheWVyIGluc3RlYWQgb2YgdGhlIGVsZW1lbnQncyBvd24gYmFja2dyb3VuZC5cbiAgIFR3byByZWFzb25zIGl0IGNhbid0IHN0YXkgaW4gdGhlIHNob3J0aGFuZCBhYm92ZTpcbiAgICAgwrcgYmFja2dyb3VuZC1pbWFnZSBjYW5ub3QgdHJhbnNpdGlvbiDigJQgdGhlIGdyYWluIHdvdWxkIGJsaW5rIG91dCBpbiBvbmVcbiAgICAgICBmcmFtZSB3aGlsZSB0aGUgY29sb3VyIHVuZGVyIGl0IHdhcyBzdGlsbCBmYWRpbmdcbiAgICAgwrcgYSBiYWNrZ3JvdW5kIGJlbG9uZ3MgdG8gaXRzIGVsZW1lbnQsIHNvIHRoZSBvbmx5IHdheSB0byB3aXBlIGl0IGlzIHRvXG4gICAgICAgY2xpcCB0aGUgZWxlbWVudCDigJQgd2hpY2ggd291bGQgdGFrZSB0aGUgbmF2LCB0aGUgbG9nbyBhbmQgdGhlIENUQSB3aXRoXG4gICAgICAgaXQuIEFzIGEgbGF5ZXIgaXQgY2FuIGJlIGNsaXBwZWQgb24gaXRzIG93biwgd2hpY2ggaXMgd2hhdCBsZXRzIHRoZSBtZWdhXG4gICAgICAgbWVudSdzIHJvbGwtdXAgY2Fycnkgb24gdGhyb3VnaCB0aGUgYmFyIChzZWUgdGhlIHdpcGUgZnVydGhlciBkb3duKS5cbiAgIHotaW5kZXg6IC0xIHB1dHMgaXQgYWJvdmUgdGhlIGJhcidzIG93biBiYWNrZ3JvdW5kIGFuZCBiZWxvdyBldmVyeSBjaGlsZCxcbiAgIHdpdGhvdXQgZGlzdHVyYmluZyB0aGVpciBzdGFja2luZyDigJQgLm1haW4taGVhZGVyIGFscmVhZHkgb3BlbnMgYSBzdGFja2luZ1xuICAgY29udGV4dCAocG9zaXRpb246IGZpeGVkICsgei1pbmRleDogMTAwMCksIHNvIHRoZSAtMSBzdGF5cyBpbnNpZGUgaXQuICovXG4ubWFpbi1oZWFkZXI6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgaW5zZXQ6IDA7XG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uLy4uLy4uL3N0YXRpYy9hc3NldHMvaW1hZ2VzL2xhdGVzdC9ncmFpbi5wbmdcIik7XG4gIGJhY2tncm91bmQtcG9zaXRpb246IDAgMDtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdDtcbiAgb3BhY2l0eTogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IC0xO1xuXG4gIC8qIFRoZSBmcm9tLXN0YXRlIHRoZSB3aXBlIGFuaW1hdGVzIG91dCBvZjsgbm8gZWZmZWN0IG9uIGl0cyBvd24uICovXG4gIGNsaXAtcGF0aDogaW5zZXQoMCAwIDAgMCk7XG59XG5cbi8qIC5tZWdhLW1lbnUtY2xvc2luZyBrZWVwcyB0aGUgY3VydGFpbiB1cCBmb3IgdGhlIHdob2xlIGNsb3NlLCBpbmNsdWRpbmcgdGhlXG4gICBzdHJldGNoIGFmdGVyIHNoYXJlZC5qcyBoYXMgYWxyZWFkeSBoYW5kZWQgdGhlIGJhciBpdHMgcG9zdC1jbG9zZSB0aGVtZS4gKi9cbi5tYWluLWhlYWRlcjppcyguaGVhZGVyLWRhcmssIC5tZWdhLW1lbnUtb3BlbiwgLm1lZ2EtbWVudS1jbG9zaW5nKTo6YmVmb3JlIHtcbiAgb3BhY2l0eTogMTtcbn1cblxuLyogTm8gYmFyLCBubyB0ZXh0dXJlIOKAlCBtYXRjaGVzIHRoZSB0cmFuc3BhcmVudC12YXJpYW50IGJhY2tncm91bmQgcnVsZSBiZWxvdy4gKi9cbi5tYWluLWhlYWRlci5oZWFkZXItZGFyay5oZWFkZXItdHJhbnNwYXJlbnQ6bm90KC5tZWdhLW1lbnUtb3Blbik6OmJlZm9yZSB7XG4gIG9wYWNpdHk6IDA7XG59XG5cbi8qIERhcmsgaGVhZGVyLCB0cmFuc3BhcmVudCB2YXJpYW50IChkYXRhLWhlYWRlci10aGVtZT1cInRyYW5zcGFyZW50XCIpIOKAlCBzYW1lXG4gICB3aGl0ZSB0ZXh0L2xvZ28vbGluayBjb2xvcnMgYXMgaGVhZGVyLWRhcmssIGJ1dCB0aGUgaGVhZGVyIGJsZW5kcyBpbnRvXG4gICB3aGF0ZXZlcidzIGJlaGluZCBpdCBpbnN0ZWFkIG9mIHNob3dpbmcgdGhlIHNvbGlkIGRhcmsgYmFyLiBNZWdhIG1lbnVcbiAgIHN0aWxsIGZvcmNlcyB0aGUgc29saWQgZGFyayBsb29rIGJhY2sgKGxlZ2liaWxpdHkgb3ZlciBpdHMgb3duIGNvbnRlbnQpXG4gICByZWdhcmRsZXNzIG9mIHdoaWNoIHRoZW1lIHdhcyBhY3RpdmUgd2hlbiBpdCBvcGVuZWQuICovXG4ubWFpbi1oZWFkZXIuaGVhZGVyLWRhcmsuaGVhZGVyLXRyYW5zcGFyZW50Om5vdCgubWVnYS1tZW51LW9wZW4pIHtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG59XG5cbi5tYWluLWhlYWRlcjppcyguaGVhZGVyLWRhcmssIC5tZWdhLW1lbnUtb3BlbikgLmxhbmctcGlja2VyX190cmlnZ2VyIHtcbiAgY29sb3I6ICNmZmY7XG59XG5cbi5tYWluLWhlYWRlcjppcyguaGVhZGVyLWRhcmssIC5tZWdhLW1lbnUtb3BlbikgLmxhbmctcGlja2VyLmlzLW9wZW4gLmxhbmctcGlja2VyX190cmlnZ2VyIHtcbiAgYmFja2dyb3VuZDogIzJmMmYzOTtcbn1cblxuLm1haW4taGVhZGVyOmlzKC5oZWFkZXItZGFyaywgLm1lZ2EtbWVudS1vcGVuKSAubGFuZy1waWNrZXJfX2dsb2JlLFxuLm1haW4taGVhZGVyOmlzKC5oZWFkZXItZGFyaywgLm1lZ2EtbWVudS1vcGVuKSAubGFuZy1waWNrZXJfX2NhcmV0IHtcbiAgY29sb3I6ICNmZmY7XG59XG5cbi5tYWluLWhlYWRlcjppcyguaGVhZGVyLWRhcmssIC5tZWdhLW1lbnUtb3BlbikgLmxhbmctcGlja2VyX190cmlnZ2VyOmhvdmVyIC5sYW5nLXBpY2tlcl9fZ2xvYmUsXG4ubWFpbi1oZWFkZXI6aXMoLmhlYWRlci1kYXJrLCAubWVnYS1tZW51LW9wZW4pIC5sYW5nLXBpY2tlci5pcy1vcGVuIC5sYW5nLXBpY2tlcl9fZ2xvYmUge1xuICBjb2xvcjogI2VhMWIzZDtcbn1cblxuLm1haW4taGVhZGVyOmlzKC5oZWFkZXItZGFyaywgLm1lZ2EtbWVudS1vcGVuKSAubGFuZy1waWNrZXJfX2Ryb3Bkb3duIHtcbiAgYmFja2dyb3VuZDogIzJmMmYzOTtcbiAgYm9yZGVyLWNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSwgLjEyKTtcbn1cblxuLm1haW4taGVhZGVyOmlzKC5oZWFkZXItZGFyaywgLm1lZ2EtbWVudS1vcGVuKSAubGFuZy1waWNrZXJfX29wdCB7XG4gIGNvbG9yOiAjZmZmO1xufVxuXG4ubWFpbi1oZWFkZXI6aXMoLmhlYWRlci1kYXJrLCAubWVnYS1tZW51LW9wZW4pIC5sYW5nLXBpY2tlcl9fb3B0OjpiZWZvcmUge1xuICBib3JkZXItY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1LCAuNCk7XG59XG5cbi5tYWluLWhlYWRlcjppcyguaGVhZGVyLWRhcmssIC5tZWdhLW1lbnUtb3BlbikgLmxhbmctcGlja2VyX19vcHQ6aG92ZXIge1xuICBiYWNrZ3JvdW5kOiByZ2IoMjU1LCAyNTUsIDI1NSwgLjA4KTtcbn1cblxuLyogRHJvcGRvd24gTWVudSAvIE1lZ2EgTWVudSAqL1xuLmhlYWRlci1jb250YWluZXIgLm1lZ2EtbWVudSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiA5MnB4OyAvKiA4MHB4IGhlYWRlciArIDEycHggdG9wYmFyICovXG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiAwO1xuICBoZWlnaHQ6IGNhbGMoMTAwdmggLSA5MnB4KTtcbiAgYmFja2dyb3VuZDogcmdiKDI1NSwgMjQ5LCAyMzcsIC45NSk7XG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cigyMHB4KTtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgcGFkZGluZzogODBweCAwO1xuICBib3JkZXI6IG5vbmU7XG4gIGJveC1zaGFkb3c6IG5vbmU7XG4gIG9wYWNpdHk6IDA7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBvdmVyZmxvdy15OiBhdXRvO1xufVxuXG4uaGVhZGVyLWNvbnRhaW5lciAubWVnYS1tZW51LWlubmVyIHtcbiAgbWF4LXdpZHRoOiB2YXIoLS1jb250YWluZXItd2lkdGgtcGFkZCk7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IDAgYXV0bztcbiAgcGFkZGluZzogMCA2MHB4O1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMTQ0MHB4KSB7XG4gIC5tYWluLWhlYWRlciAubWVnYS1tZW51IHtcbiAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgcGFkZGluZy1yaWdodDogMDtcbiAgfVxuXG4gIC5oZWFkZXItY29udGFpbmVyIC5tZWdhLW1lbnUtaW5uZXIge1xuICAgIHBhZGRpbmctcmlnaHQ6IDEyMHB4O1xuICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAubWFpbi1oZWFkZXIgLm1lZ2EtbWVudSB7XG4gICAgcGFkZGluZzogNDBweCAyNHB4O1xuICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICB9XG59XG5cbi5tYWluLWhlYWRlciAubmF2LWl0ZW0uYWN0aXZlIC5tZWdhLW1lbnUge1xuICBvcGFjaXR5OiAxO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICB0cmFuc2Zvcm06IG5vbmU7XG59XG5cbi8qIOKUgOKUgCBNZWdhIG1lbnUgcm9sbC1kb3duIOKAlCBkZXNrdG9wIG9ubHkgKG1hdGNoZXMgREVTS1RPUF9NSU5fV0lEVEggaW4gc2hhcmVkLmpzKVxuICAgVGhlIHBhbmVsIHVucm9sbHMgZnJvbSB1bmRlciB0aGUgaGVhZGVyIGxpa2UgYSBibGluZCwgYW5kIG9ubHkgb25jZSBpdCBoYXNcbiAgIG9wZW5lZCBkb2VzIHRoZSBjb250ZW50IGZhZGUgdXAgaW5zaWRlIGl0LiBDbG9zaW5nIHJ1bnMgdGhlIHNhbWUgdGhpbmdcbiAgIGJhY2t3YXJkczogY29udGVudCBsZWF2ZXMgZmlyc3QsIHRoZW4gdGhlIHBhbmVsIHJvbGxzIGJhY2sgdXAuXG5cbiAgIFRJTUVMSU5FXG4gICAgIG9wZW4gICAwbXMgIHBhbmVsIHN0YXJ0cyB1bnJvbGxpbmcgKDQwMG1zKVxuICAgICAgICAgICAyMjBtcyBjb250ZW50IHN0YXJ0cyBmYWRpbmcgdXAgKDMwMG1zKSAgIOKGkiBlbmRzIDUyMG1zXG4gICAgIGNsb3NlICAgIDBtcyBjb250ZW50IHN0YXJ0cyBmYWRpbmcgb3V0ICgxODBtcylcbiAgICAgICAgICAgMTYwbXMgcGFuZWwgc3RhcnRzIHJvbGxpbmcgdXAgKDM1MG1zKSAgICDihpIgZW5kcyA1MTBtc1xuXG4gICBCb3RoIGRpcmVjdGlvbnMgYXJlIHBsYWluIHRyYW5zaXRpb25zLCBub3QgYW5pbWF0aW9uczogYW4gYW5pbWF0aW9uIG9ubHlcbiAgIHBsYXlzIG9uIHRoZSB3YXkgaW4sIHdoaWNoIGlzIHdoeSBjbG9zaW5nIHVzZWQgdG8gc25hcC4gQSB0cmFuc2l0aW9uIHRha2VzXG4gICBpdHMgdGltaW5nIGZyb20gd2hpY2hldmVyIHN0YXRlIGl0IGlzIGhlYWRpbmcgVE9XQVJEUywgc28gdGhlIG9wZW4gZGVsYXlzXG4gICBsaXZlIG9uIHRoZSAuYWN0aXZlIHJ1bGVzIGFuZCB0aGUgY2xvc2UgZGVsYXlzIGxpdmUgb24gdGhlIGJhc2UgcnVsZXMg4oCUIHRoYXRcbiAgIGlzIHdoYXQgbGV0cyB0aGUgb3JkZXIgcmV2ZXJzZSB3aXRob3V0IGFueSBKUy5cblxuICAgV0hZIGNsaXAtcGF0aCBBTkQgTk9UIGhlaWdodC90cmFuc2Zvcm1cbiAgIEFuaW1hdGluZyBoZWlnaHQgd291bGQgcmVmbG93IHRoZSBjb250ZW50IG9uIGV2ZXJ5IGZyYW1lLCBhbmQgdGhlIHRleHQgd291bGRcbiAgIHZpc2libHkgcmUtd3JhcCBhcyB0aGUgcGFuZWwgZ3JldyDigJQgdGhlIFwiY29udGVudCBqdW1wXCIuIEEgc2NhbGVZIHRyYW5zZm9ybVxuICAgd291bGQgc3F1YXNoIHRoZSB0ZXh0IGFzIGl0IG9wZW5lZC4gY2xpcC1wYXRoIG9ubHkgY2hhbmdlcyB3aGF0IGlzIHBhaW50ZWQ6XG4gICB0aGUgY29udGVudCBpcyBsYWlkIG91dCBhdCBmdWxsIHNpemUgZnJvbSBmcmFtZSBvbmUgYW5kIGlzIHNpbXBseSByZXZlYWxlZCxcbiAgIHNvIG5vdGhpbmcgaW5zaWRlIGV2ZXIgbW92ZXMgZXhjZXB0IHdoZXJlIHdlIHRlbGwgaXQgdG8uICovXG5AbWVkaWEgKG1pbi13aWR0aDogMTAyNXB4KSB7XG4gIC5oZWFkZXItY29udGFpbmVyIC5tZWdhLW1lbnUge1xuXG4gICAgLyogVGhlIGJsdXIgaGFzIHRvIGdvIGZvciBhbnkgb2YgdGhpcyB0byBiZSBzbW9vdGguIEEgYmFja2Ryb3AtZmlsdGVyZWRcbiAgICAgICBlbGVtZW50IGlzIHJlLXNhbXBsZWQgZnJvbSB3aGF0ZXZlciBzaXRzIGJlaGluZCBpdCwgc28gYW5pbWF0aW5nIG9uZVxuICAgICAgIHJlLWJsdXJzIHRoZSBwYWdlIHVuZGVybmVhdGggZXZlcnkgZnJhbWUgYW5kIHRoZSBjb250ZW50IHBhaW50ZWQgb24gdG9wXG4gICAgICAgc3Ryb2JlcyBhZ2FpbnN0IGl0IOKAlCB0aGF0IHdhcyB0aGUgZmxpY2tlciwgYW5kIGl0IGhhcHBlbmVkIG9uIG9wYWNpdHlcbiAgICAgICBqdXN0IGFzIG11Y2ggYXMgb24gdHJhbnNmb3JtLlxuXG4gICAgICAgQ2hlYXAgdG8gbG9zZTogdGhlIHBhbmVsIGlzIGFscmVhZHkgcmdiKDI1NSAyNDkgMjM3IC8gMC45NSksIHNvIHRoZSBibHVyXG4gICAgICAgb25seSBldmVyIHNob3dlZCB0aHJvdWdoIDUlIG9mIHRoZSBzdXJmYWNlLCBhbmQgb24gYSBkYXJrIGhlYWRlciBhIGZ1bGx5XG4gICAgICAgb3BhcXVlICMzNzM3NDIgKyBncmFpbiBjb3ZlcnMgaXQgZW50aXJlbHkuIERlc2t0b3Atb25seSwgc28gdGhlIG1vYmlsZVxuICAgICAgIGZseW91dCDigJQgd2hlcmUgdGhlIHBhbmVsIGlzIGBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudGAgYW5kIHRoZSBibHVyIGRvZXNcbiAgICAgICByZWFsIHdvcmsg4oCUIGtlZXBzIGl0LiAqL1xuICAgIGJhY2tkcm9wLWZpbHRlcjogbm9uZTtcblxuICAgIC8qIG9wYWNpdHkgc3RheXMgYXQgMSBpbiBib3RoIHN0YXRlczogdGhlIHJldmVhbCBpcyB0aGUgY2xpcCdzIGpvYiwgYW5kXG4gICAgICAgZmFkaW5nIHRoZSBwYW5lbCBhcyB3ZWxsIHdvdWxkIGRvdWJsZSB1cCBvbiB0aGUgY29udGVudCdzIG93biBmYWRlIGFuZFxuICAgICAgIHJlYWQgYXMgdGhlIHR3byBjb21pbmcgYXBhcnQuIChUaGUgYmFzZSBydWxlIGZ1cnRoZXIgdXAgc2V0cyBvcGFjaXR5OiAwXG4gICAgICAgZm9yIHRoZSBtb2JpbGUgYWNjb3JkaW9uLCB3aGljaCBzdGlsbCBhcHBsaWVzIGJlbG93IDEwMjVweC4pICovXG4gICAgb3BhY2l0eTogMTtcbiAgICBjbGlwLXBhdGg6IGluc2V0KDAgMCAxMDAlIDApO1xuXG4gICAgLyogQ2xvc2luZzogd2FpdCBvdXQgdGhlIGNvbnRlbnQncyBleGl0LCB0aGVuIHJvbGwgdXAuIHZpc2liaWxpdHkgZmxpcHMgYXRcbiAgICAgICB0aGUgdmVyeSBlbmQgc28gdGhlIHBhbmVsIHN0YXlzIHBhaW50ZWQgZm9yIHRoZSB3aG9sZSByb2xsIOKAlCBoaWRpbmcgaXRcbiAgICAgICBvbiBmcmFtZSBvbmUgd291bGQgbGVhdmUgbm90aGluZyB0byB3YXRjaC4gKi9cbiAgICB0cmFuc2l0aW9uOlxuICAgICAgY2xpcC1wYXRoIC4zNXMgY3ViaWMtYmV6aWVyKC40LCAwLCAuMiwgMSkgLjE2cyxcbiAgICAgIHZpc2liaWxpdHkgMHMgbGluZWFyIC41MXM7XG4gIH1cblxuICAubWFpbi1oZWFkZXIgLm5hdi1pdGVtLmFjdGl2ZSAubWVnYS1tZW51IHtcbiAgICBjbGlwLXBhdGg6IGluc2V0KDAgMCAwIDApO1xuXG4gICAgLyogT3BlbmluZzogdGhlIHBhbmVsIGdvZXMgZmlyc3QsIGZyb20gZnJhbWUgemVyby4gKi9cbiAgICB0cmFuc2l0aW9uOlxuICAgICAgY2xpcC1wYXRoIC40cyBjdWJpYy1iZXppZXIoLjE2LCAxLCAuMywgMSkgMHMsXG4gICAgICB2aXNpYmlsaXR5IDBzIGxpbmVhciAwcztcbiAgfVxuXG4gIC8qIENvbnRlbnQg4oCUIGZhZGVzIHVwIGluc2lkZSB0aGUgcGFuZWwgb25jZSBpdCBoYXMgdW5yb2xsZWQsIGFuZCBsZWF2ZXMgYmVmb3JlXG4gICAgIGl0IHJvbGxzIGJhY2suIEhlbGQgb24gLm1lZ2EtbWVudS1pbm5lciByYXRoZXIgdGhhbiB0aGUgcGFuZWwgc28gdGhlIHR3b1xuICAgICBjYW4gYmUgdGltZWQgaW5kZXBlbmRlbnRseS4gKi9cbiAgLmhlYWRlci1jb250YWluZXIgLm1lZ2EtbWVudS1pbm5lciB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDEycHgsIDApO1xuXG4gICAgLyogQ2xvc2luZzogaW1tZWRpYXRlIGFuZCBxdWljaywgc28gaXQgaXMgZ29uZSBiZWZvcmUgdGhlIHJvbGwtdXAgc3RhcnRzLiAqL1xuICAgIHRyYW5zaXRpb246XG4gICAgICBvcGFjaXR5IC4xOHMgZWFzZSAwcyxcbiAgICAgIHRyYW5zZm9ybSAuMThzIGVhc2UgMHM7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIH1cblxuICAubWFpbi1oZWFkZXIgLm5hdi1pdGVtLmFjdGl2ZSAubWVnYS1tZW51LWlubmVyIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG5cbiAgICAvKiBPcGVuaW5nOiBoYW5ncyBiYWNrIHVudGlsIHRoZSBwYW5lbCBpcyBtb3N0IG9mIHRoZSB3YXkgZG93bi4gKi9cbiAgICB0cmFuc2l0aW9uOlxuICAgICAgb3BhY2l0eSAuM3MgZWFzZSAuMjJzLFxuICAgICAgdHJhbnNmb3JtIC4zNXMgY3ViaWMtYmV6aWVyKC4xNiwgMSwgLjMsIDEpIC4yMnM7XG4gIH1cblxuICAvKiBHcmFpbiDigJQgc2FtZSByb2xsLCBzYW1lIHRpbWluZyBhcyB0aGUgcGFuZWwgaXQgdGV4dHVyZXMuXG4gICAgIEl0IHNpdHMgb24gLm1haW4taGVhZGVyIChzZWUgdGhlIGxvbmcgbm90ZSBuZXh0IHRvIHRoZSBiYXNlIHJ1bGUgZm9yIHdoeVxuICAgICBpdCBjYW4ndCBsaXZlIGluc2lkZSAubWVnYS1tZW51KSwgc28gaXQgZG9lc24ndCBpbmhlcml0IHRoZSBwYW5lbCdzIGNsaXBcbiAgICAgYW5kIHVzZWQgdG8gc25hcDogZnVsbHkgZHJhd24gb3ZlciB0aGUgcGFnZSB0aGUgbW9tZW50IHRoZSBtZW51IG9wZW5lZCxcbiAgICAgYW5kIHN0aWxsIGRyYXduIHRoZXJlIGZvciB0aGUgd2hvbGUgcm9sbC11cCB1bnRpbCBzaGFyZWQuanMncyB0ZWFyZG93blxuICAgICByZW1vdmVkIC5tZWdhLW1lbnUtb3BlbiB+MTBtcyBhZnRlciB0aGUgcGFuZWwgaGFkIGZpbmlzaGVkLiBUaGF0IHRyYWlsaW5nXG4gICAgIHJlbW92YWwgaXMgd2hhdCByZWFkIGFzIHRoZSBqZXJrIGF0IHRoZSBlbmQgb2YgdGhlIGNsb3NlIOKAlCB0aGUgcGFuZWxcbiAgICAgbGFuZGVkIGNsZWFubHkgb24gdGhlIG5hdiBhbmQgdGhlbiB0aGUgd2hvbGUgcGFnZSBicmlnaHRlbmVkIGEgZnJhbWUgbGF0ZXIuXG4gICAgIENsb25pbmcgdGhlIHBhbmVsJ3MgdHdvIGNsaXAtcGF0aCB0cmFuc2l0aW9ucyBoZXJlIGtlZXBzIHRoZSB0ZXh0dXJlXG4gICAgIHdlbGRlZCB0byB0aGUgc3VyZmFjZSBpdCBiZWxvbmdzIHRvIGluIGJvdGggZGlyZWN0aW9ucy5cblxuICAgICBEZWNsYXJlZCB1bmNvbmRpdGlvbmFsbHkg4oCUIG5vdCBvbmx5IHVuZGVyIC5tZWdhLW1lbnUtb3BlbiDigJQgYmVjYXVzZSBhXG4gICAgIHBzZXVkby1lbGVtZW50IENSRUFURUQgYnkgdGhlIHNhbWUgY2xhc3MgY2hhbmdlIHRoYXQgb3BlbnMgdGhlIG1lbnUgaGFzIG5vXG4gICAgIHByZXZpb3VzIHN0eWxlIHRvIHRyYW5zaXRpb24gZnJvbSBhbmQgd291bGQgcGFpbnQgZnVsbHkgdW5yb2xsZWQgb24gZnJhbWVcbiAgICAgb25lLiBLZWVwaW5nIGl0IGluIHRoZSB0cmVlLCBjbGlwcGVkIHRvIG5vdGhpbmcgYW5kIHZpc2liaWxpdHk6aGlkZGVuLFxuICAgICBnaXZlcyB0aGUgY2xpcCBzb21ld2hlcmUgdG8gYW5pbWF0ZSBGUk9NLiBJdCBjb3N0cyBub3RoaW5nIHdoaWxlIGNsb3NlZDpcbiAgICAgbm90aGluZyBpcyBwYWludGVkLCBub3RoaW5nIGlzIGhpdC10ZXN0ZWQsIGFuZCBncmFpbi5wbmcgaXMgYWxyZWFkeVxuICAgICBmZXRjaGVkIGZvciB0aGUgaGVhZGVyL21vYmlsZS1tZW51IGJhY2tncm91bmRzLiAqL1xuICAubWFpbi1oZWFkZXI6OmFmdGVyIHtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICBpbnNldDogOTJweCAwIDA7IC8qIG1hdGNoZXMgLm1lZ2EtbWVudSdzIHRvcDogODBweCBoZWFkZXIgKyAxMnB4IHRvcGJhciAqL1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uLy4uLy4uL3N0YXRpYy9hc3NldHMvaW1hZ2VzL2xhdGVzdC9ncmFpbi5wbmdcIik7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIHotaW5kZXg6IDEwO1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICBjbGlwLXBhdGg6IGluc2V0KDAgMCAxMDAlIDApO1xuXG4gICAgLyogQ2xvc2luZyDigJQgbWlycm9ycyAubWVnYS1tZW51J3MgY2xvc2UgdHJhbnNpdGlvbiBleGFjdGx5LiAqL1xuICAgIHRyYW5zaXRpb246XG4gICAgICBjbGlwLXBhdGggLjM1cyBjdWJpYy1iZXppZXIoLjQsIDAsIC4yLCAxKSAuMTZzLFxuICAgICAgdmlzaWJpbGl0eSAwcyBsaW5lYXIgLjUxcztcbiAgfVxuXG4gIC8qIDpoYXMoKSwgYmVjYXVzZSB0aGUgY2xhc3MgdGhhdCBvcGVucyB0aGUgcGFuZWwgc2l0cyBvbiB0aGUgdHJpZ2dlciwgbm90IG9uXG4gICAgIHRoZSBoZWFkZXIgdGhlIGdyYWluIGlzIGF0dGFjaGVkIHRvLiAubWVnYS1tZW51LW9wZW4gaXMga2VwdCBpbiB0aGVcbiAgICAgc2VsZWN0b3Igc28gdGhlIGdyYWluIGNhbiBuZXZlciBvdXRsaXZlIHRoZSBkYXJrIGNocm9tZSBpdCBiZWxvbmdzIHRvIOKAlFxuICAgICBzaGFyZWQuanMgaG9sZHMgdGhhdCBjbGFzcyBmb3IgdGhlIHdob2xlIGNsb3NlLCB0aGVuIGRyb3BzIGl0LiBBIHN3YXBcbiAgICAgYmV0d2VlbiB0d28gcGFuZWxzIGxlYXZlcyBib3RoIGhhbHZlcyBtYXRjaGluZywgc28gdGhlIGdyYWluIHNpbXBseSBzdGF5c1xuICAgICB1bnJvbGxlZCBhbmQgbm8gdHJhbnNpdGlvbiBydW5zIOKAlCBzYW1lIGFzIHRoZSBwYW5lbC4gKi9cbiAgLm1haW4taGVhZGVyLm1lZ2EtbWVudS1vcGVuOmhhcygubmF2LWl0ZW0uZHJvcGRvd24tdHJpZ2dlci5hY3RpdmUpOjphZnRlciB7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICBjbGlwLXBhdGg6IGluc2V0KDAgMCAwIDApO1xuXG4gICAgLyogT3BlbmluZyDigJQgd2l0aCB0aGUgcGFuZWwsIGZyb20gZnJhbWUgemVyby4gKi9cbiAgICB0cmFuc2l0aW9uOlxuICAgICAgY2xpcC1wYXRoIC40cyBjdWJpYy1iZXppZXIoLjE2LCAxLCAuMywgMSkgMHMsXG4gICAgICB2aXNpYmlsaXR5IDBzIGxpbmVhciAwcztcbiAgfVxuXG4gIC8qIOKUgOKUgCBUaGUgaGVhZGVyJ3Mgc2hhcmUgb2YgdGhlIHJvbGwtdXAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICAgIFRoZSBwYW5lbCBpcyBmaXhlZCBhdCB0b3A6IDkycHgsIHNvIGl0cyBjbGlwIHJ1bnMgb3V0IG9mIHJvYWQgYXQgdGhlIGJhclxuICAgICBhbmQgdGhlIGNsb3NlIHJlYWQgYXMgdHdvIGJlYXRzOiBhIHN3ZWVwIHRoYXQgc3RvcHBlZCBhdCB0aGUgbmF2LCB0aGVuIHRoZVxuICAgICBoZWFkZXIgY2hhbmdpbmcgYXBwZWFyYW5jZSBhIG1vbWVudCBsYXRlci4gVGhpcyBjYXJyaWVzIHRoZSBzYW1lIGVkZ2UgdGhlXG4gICAgIHJlc3Qgb2YgdGhlIHdheSwgZnJvbSB0aGUgYmFyJ3MgdW5kZXJzaWRlIHVwIHRvIHk9MC5cblxuICAgICBXaGF0IG1ha2VzIGl0IHBvc3NpYmxlIGlzIHRoYXQgdGhlIGJhcidzIGRhcmsgc3VyZmFjZSBpcyB0aGUgOjpiZWZvcmVcbiAgICAgY3VydGFpbiAoc2VlIGl0cyBydWxlIGFib3ZlKSByYXRoZXIgdGhhbiB0aGUgZWxlbWVudCdzIG93biBiYWNrZ3JvdW5kLCBhbmRcbiAgICAgdGhhdCBzaGFyZWQuanMgaGFuZHMgdGhlIGVsZW1lbnQgaXRzIHBvc3QtY2xvc2UgdGhlbWUgdGhlIG1vbWVudCB0aGUgY2xvc2VcbiAgICAgU1RBUlRTIOKAlCBpbnZpc2libGUsIHNpbmNlIHRoZSBvcGFxdWUgY3VydGFpbiBpcyBzdGlsbCBjb3ZlcmluZyBpdC4gQnkgdGhlXG4gICAgIHRpbWUgdGhlIHdpcGUgcnVucyB0aGVyZSBpcyBhbHJlYWR5IGEgZmluaXNoZWQgaGVhZGVyIHVuZGVybmVhdGggZm9yIHRoZVxuICAgICBlZGdlIHRvIHVuY292ZXIsIHNvIG5vIHNlY29uZCBiZWF0IGlzIGxlZnQgb3Zlci5cblxuICAgICBUaGUgbmF2IGNvbnRlbnQgY2FuJ3QgYmUgd2lwZWQg4oCUIGl0IGlzIG9uZSBzZXQgb2YgZWxlbWVudHMgdGhhdCBoYXMgdG9cbiAgICAgY2hhbmdlIGNvbG91ciwgbm90IHR3byBsYXllcnMgdG8gcmV2ZWFsIGJldHdlZW4g4oCUIHNvIGl0IGNyb3NzZmFkZXMgb24gdGhlXG4gICAgIHNhbWUgY2xvY2sgaW5zdGVhZCAoLm1lZ2EtbWVudS1jbG9zaW5nLCB1cCB0b3ApLiBTYW1lIHN0YXJ0LCBzYW1lIDAuMThzLFxuICAgICBzbyB0aGUgdHdvIHJlYWQgYXMgb25lIG1vdmVtZW50IHNldHRsaW5nIHJhdGhlciB0aGFuIGEgd2lwZSBhbmQgYSBmYWRlLlxuXG4gICAgIDpub3QoLmhlYWRlci1kYXJrKSBza2lwcyB0aGUgd2hvbGUgdGhpbmcgd2hlbiB0aGUgaGVhZGVyIGlzIHN0YXlpbmcgZGFyazpcbiAgICAgdGhlIGJhciBsb29rcyBpZGVudGljYWwgZWl0aGVyIHNpZGUgb2YgdGhlIGNsb3NlLCBzbyB0aGVyZSB3b3VsZCBiZVxuICAgICBub3RoaW5nIHRvIHVuY292ZXIgYW5kIHRoZSB3aXBlIHdvdWxkIGp1c3Qgc3RyaXAgdGhlIGdyYWluIGFuZCBwb3AgaXRcbiAgICAgYmFjay4gKi9cbiAgLm1haW4taGVhZGVyOmlzKC5tZWdhLW1lbnUtb3BlbiwgLm1lZ2EtbWVudS1jbG9zaW5nKTo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzczNzQyO1xuICB9XG5cbiAgLm1haW4taGVhZGVyLm1lZ2EtbWVudS1jbG9zaW5nOm5vdCgubWVnYS1tZW51LW9wZW4sIC5oZWFkZXItZGFyayk6OmJlZm9yZSB7XG4gICAgY2xpcC1wYXRoOiBpbnNldCgwIDAgMTAwJSAwKTtcblxuICAgIC8qIEVhc2UtT1VULCBub3QgdGhlIHBhbmVsJ3MgZWFzZS1pbi1vdXQ6IHRoZSBlZGdlIGFycml2ZXMgaGVyZSBhbHJlYWR5XG4gICAgICAgbW92aW5nLCBzbyBhIGN1cnZlIHRoYXQgc3RhcnRzIGZyb20gcmVzdCB3b3VsZCBwdXQgYSBoaXRjaCBhdCB0aGUgZXhhY3RcbiAgICAgICBzZWFtIHRoaXMgaXMgbWVhbnQgdG8gaGlkZS4gU3RhcnRpbmcgYXQgc3BlZWQgYW5kIHNldHRsaW5nIHJlYWRzIGFzIHRoZVxuICAgICAgIHNhbWUgZWRnZSBjYXJyeWluZyBvbi4gKEEgdHJ1ZSB2ZWxvY2l0eSBtYXRjaCB3b3VsZCBydW4gdGhpcyBsZWcgaW5cbiAgICAgICBhYm91dCB0d28gZnJhbWVzIOKAlCBmYXIgdG9vIGZhc3QgZm9yIHRoZSBjb250ZW50IHVuZGVybmVhdGggdG8gY3Jvc3NcbiAgICAgICBvdmVyIOKAlCBzbyB0aGUgZGlzdGFuY2UgaXMgaG9uZXN0IGFuZCB0aGUgc3BlZWQgaXMgZWFzZWQuKSAqL1xuICAgIHRyYW5zaXRpb246XG4gICAgICBjbGlwLXBhdGggLjE4cyBjdWJpYy1iZXppZXIoMCwgMCwgLjIsIDEpLFxuICAgICAgb3BhY2l0eSAuMThzIGVhc2U7XG4gIH1cblxuICAvKiBTd2FwcGluZyBvbmUgb3BlbiBwYW5lbCBmb3IgYW5vdGhlciBzdGF5cyBpbnN0YW50LCB3aGljaCBpcyB0aGUgYmVoYXZpb3VyXG4gICAgIGpzL3NoYXJlZC5qcyBkZWxpYmVyYXRlbHkgZW5jb2RlcyB3aXRoIC5tZWdhLW1lbnUtaW50cm8gKHNlZSBpdHMgY29tbWVudCkuXG4gICAgIFR3byBzZWxlY3RvcnMsIGJlY2F1c2UgYSBzd2FwIGhhcyB0d28gaGFsdmVzIHRvIHNpbGVuY2U6XG4gICAgICAgwrcgdGhlIGluY29taW5nIHBhbmVsIOKAlCAubWVnYS1tZW51LWludHJvIGlzIGFic2VudCBvbiBhIHN3YXAgYW5kIHByZXNlbnRcbiAgICAgICAgIG9uIGEgY29sZCBvcGVuLCBzbyB0aGlzIGlzIGV4YWN0bHkgdGhlIFwibm90IGEgY29sZCBvcGVuXCIgY2FzZVxuICAgICAgIMK3IHRoZSBvdXRnb2luZyBwYW5lbCDigJQgc3RpbGwgOm5vdCguYWN0aXZlKSwgYnV0IGFub3RoZXIgdHJpZ2dlciBJU1xuICAgICAgICAgYWN0aXZlLCBzbyBpdCBtdXN0IHZhbmlzaCByYXRoZXIgdGhhbiByb2xsIHVwIGJlaGluZCBpdHMgcmVwbGFjZW1lbnRcbiAgICAgT24gYSByZWFsIGNsb3NlIG5vIHRyaWdnZXIgaXMgbGVmdCBhY3RpdmUsIHRoZSBzZWNvbmQgc2VsZWN0b3Igc3RvcHNcbiAgICAgbWF0Y2hpbmcsIGFuZCB0aGUgcGFuZWwgZ2V0cyBpdHMgZnVsbCBzZXF1ZW5jZS4gQm90aCBoYWx2ZXMgY292ZXIgdGhlXG4gICAgIGlubmVyIHRvbywgb3IgdGhlIGNvbnRlbnQgd291bGQgYW5pbWF0ZSB3aGlsZSBpdHMgcGFuZWwgZGlkIG5vdC4gKi9cbiAgLm1haW4taGVhZGVyOm5vdCgubWVnYS1tZW51LWludHJvKSAubmF2LWl0ZW0uYWN0aXZlIC5tZWdhLW1lbnUsXG4gIC5tYWluLWhlYWRlcjpub3QoLm1lZ2EtbWVudS1pbnRybykgLm5hdi1pdGVtLmFjdGl2ZSAubWVnYS1tZW51LWlubmVyLFxuICAubWFpbi1oZWFkZXI6aGFzKC5uYXYtaXRlbS5kcm9wZG93bi10cmlnZ2VyLmFjdGl2ZSkgLm5hdi1pdGVtOm5vdCguYWN0aXZlKSAubWVnYS1tZW51LFxuICAubWFpbi1oZWFkZXI6aGFzKC5uYXYtaXRlbS5kcm9wZG93bi10cmlnZ2VyLmFjdGl2ZSkgLm5hdi1pdGVtOm5vdCguYWN0aXZlKSAubWVnYS1tZW51LWlubmVyIHtcbiAgICB0cmFuc2l0aW9uOiBub25lO1xuICB9XG5cbiAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbiAgICAuaGVhZGVyLWNvbnRhaW5lciAubWVnYS1tZW51LFxuICAgIC5tYWluLWhlYWRlciAubmF2LWl0ZW0uYWN0aXZlIC5tZWdhLW1lbnUsXG4gICAgLmhlYWRlci1jb250YWluZXIgLm1lZ2EtbWVudS1pbm5lcixcbiAgICAubWFpbi1oZWFkZXIgLm5hdi1pdGVtLmFjdGl2ZSAubWVnYS1tZW51LWlubmVyLFxuICAgIC5tYWluLWhlYWRlcjo6YWZ0ZXIsXG4gICAgLm1haW4taGVhZGVyLm1lZ2EtbWVudS1vcGVuOmhhcygubmF2LWl0ZW0uZHJvcGRvd24tdHJpZ2dlci5hY3RpdmUpOjphZnRlcixcbiAgICAubWFpbi1oZWFkZXIubWVnYS1tZW51LWNsb3Npbmc6bm90KC5tZWdhLW1lbnUtb3BlbiwgLmhlYWRlci1kYXJrKTo6YmVmb3JlIHtcbiAgICAgIHRyYW5zaXRpb246IG5vbmU7XG4gICAgfVxuICB9XG59XG5cbi5tZWdhLW1lbnUtZ3JpZCB7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIDFmcik7XG4gIGdhcDogNjRweDtcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogMTIwMHB4O1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLm1lZ2EtbWVudS1ncmlkIHtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcbiAgfVxufVxuXG4ubWFpbi1oZWFkZXIgLm1lbnUtaGVhZGluZyB7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7XG4gIG1hcmdpbi1ib3R0b206IDMycHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5tYWluLWhlYWRlciAuc3VibWVudS1saXN0IHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xufVxuXG4ubWFpbi1oZWFkZXIgLnN1Ym1lbnUtbGlzdCBsaSB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIG1hcmdpbi1ib3R0b206IDMycHg7XG59XG5cbi5tYWluLWhlYWRlciAubWVnYS1tZW51IHVsLnN1Ym1lbnUtbGlzdCB7XG4gIG1hcmdpbjogMDtcbn1cblxuLm1haW4taGVhZGVyIC5zdWJtZW51LWxpbmsge1xuICBmb250LXNpemU6IDIycHg7XG4gIGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgcGFkZGluZzogMCAwIDE1cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG5cbiAgLyogYW5pbWF0ZWQgYm9yZGVyOiB3aGl0ZSBsaW5lIHByb2dyZXNzZXMgb3ZlciBmYWludCBzdGF0aWMgbGluZSAqL1xuICBiYWNrZ3JvdW5kLWltYWdlOlxuICAgIGxpbmVhci1ncmFkaWVudCgjZmZmLCAjZmZmKSxcbiAgICBsaW5lYXItZ3JhZGllbnQocmdiKDI1NSwgMjU1LCAyNTUsIC4yKSwgcmdiKDI1NSwgMjU1LCAyNTUsIC4yKSk7XG4gIGJhY2tncm91bmQtcG9zaXRpb246XG4gICAgMCAxMDAlLFxuICAgIDAgMTAwJTtcbiAgYmFja2dyb3VuZC1zaXplOlxuICAgIDAlIDFweCxcbiAgICAxMDAlIDFweDtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcblxuICAvKiB0cmFuc2l0aW9uOiBjb2xvciAwLjNzIGVhc2UsIGJhY2tncm91bmQtc2l6ZSAwLjRzIGVhc2U7ICovXG4gIHRyYW5zaXRpb246XG4gICAgcGFkZGluZyAuM3MgZWFzZSxcbiAgICBjb2xvciAuM3MgZWFzZSxcbiAgICBiYWNrZ3JvdW5kLXNpemUgLjRzIGVhc2U7XG59XG5cbi8qIEFycm93IGljb24gaXMgZXh0ZXJuYWwtbGluay1vbmx5IOKAlCBtYXJrIGEgc3VibWVudS1saW5rIHdpdGhcbiAgIHRhcmdldD1cIl9ibGFua1wiIHRvIG9wdCBpdCBpbiAoc3RhbmRhcmQgXCJvcGVucyBlbHNld2hlcmVcIiBjb252ZW50aW9uKS4gKi9cbi5tYWluLWhlYWRlciAuc3VibWVudS1saW5rOjphZnRlciB7XG4gIGNvbnRlbnQ6IG5vbmU7XG59XG5cbi5tYWluLWhlYWRlciAuc3VibWVudS1saW5rW3RhcmdldD1cIl9ibGFua1wiXTo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICB3aWR0aDogMjBweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICBiYWNrZ3JvdW5kOiB1cmwoXCIuLi8uLi8uLi9zdGF0aWMvYXNzZXRzL2ltYWdlcy9sYXRlc3QvdXAtcmlnaHQtYXJyb3ctbmV3LnN2Z1wiKSBuby1yZXBlYXQgY2VudGVyIC9cbiAgICBjb250YWluO1xuICBmbGV4LXNocmluazogMDtcbiAgb3BhY2l0eTogMDtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAuM3MgZWFzZTtcbn1cblxuLm1haW4taGVhZGVyIC5zdWJtZW51LWxpbms6aG92ZXIge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZC1zaXplOlxuICAgIDEwMCUgMXB4LFxuICAgIDEwMCUgMXB4O1xufVxuXG4ubWFpbi1oZWFkZXIgLnN1Ym1lbnUtbGlua1t0YXJnZXQ9XCJfYmxhbmtcIl06aG92ZXI6OmFmdGVyIHtcbiAgb3BhY2l0eTogMTtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xufVxuXG4ubWFpbi1oZWFkZXIgLnN1Ym1lbnUtbGlua19fYm9keSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLm1haW4taGVhZGVyIC5zdWJtZW51LWxpbmtfX3RleHQge1xuICBkaXNwbGF5OiBibG9jaztcbiAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC41cyBjdWJpYy1iZXppZXIoLjM0LCAxLjU2LCAuNjQsIDEpO1xufVxuXG4ubWFpbi1oZWFkZXIgLnN1Ym1lbnUtbGluazpob3ZlciAuc3VibWVudS1saW5rX190ZXh0IHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC04cHgpO1xufVxuXG4ubWFpbi1oZWFkZXIgLnN1Ym1lbnUtbGlua19fZGVzYyB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDA7XG4gIHRvcDogMTAwJTtcbiAgd2lkdGg6IG1heC1jb250ZW50O1xuICBtYXgtd2lkdGg6IDI2MHB4O1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGxldHRlci1zcGFjaW5nOiAuMDJlbTtcbiAgY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1LCAuNDUpO1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgb3BhY2l0eTogMDtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNHB4KTtcbiAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybSwgb3BhY2l0eTtcbiAgdHJhbnNpdGlvbjpcbiAgICB0cmFuc2Zvcm0gLjRzIGN1YmljLWJlemllciguNCwgMCwgLjIsIDEpLFxuICAgIG9wYWNpdHkgLjRzIGVhc2UgLjA4cztcbn1cblxuLm1haW4taGVhZGVyIC5zdWJtZW51LWxpbms6aG92ZXIgLnN1Ym1lbnUtbGlua19fZGVzYyB7XG4gIG9wYWNpdHk6IDE7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTBweCk7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAubWFpbi1oZWFkZXIgLnN1Ym1lbnUtbGluayB7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICB9XG59XG5cbi8qIEJvdHRvbSBzZWN0aW9uICovXG4ubWFpbi1oZWFkZXIgLm1lZ2EtbWVudS1ib3R0b20ge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgbWFyZ2luLXRvcDogNjBweDtcbiAgcGFkZGluZy1ib3R0b206IDQwcHg7XG4gIHBhZGRpbmctdG9wOiA0MHB4O1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLm1haW4taGVhZGVyIC5tZWdhLW1lbnUtYm90dG9tIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIGdhcDogMzBweDtcbiAgfVxufVxuXG4vKiBQYWdlcyAoZS5nLiBpbmRleC5odG1sKSB0aGF0IGRyb3AgLm1lZ2EtYm90dG9tLWNhcmQgbGVhdmUgLm1lZ2Etc3RvcnktYm94IGFzXG4gICB0aGUgc29sZSBjaGlsZCDigJQgc3BhY2UtYmV0d2VlbiB3b3VsZCB0aGVuIHNpdCBpdCBmbGV4LXN0YXJ0IChsZWZ0KSBpbnN0ZWFkXG4gICBvZiBhdCBpdHMgdXN1YWwgcmlnaHQtc2lkZSBzcG90LiAqL1xuQG1lZGlhIChtaW4td2lkdGg6IDc2OXB4KSB7XG4gIC5tYWluLWhlYWRlciAubWVnYS1zdG9yeS1ib3g6b25seS1jaGlsZCB7XG4gICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIH1cbn1cblxuLm1haW4taGVhZGVyIC5tZWdhLWJvdHRvbS1jYXJkIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiAzMHB4O1xuICBiYWNrZ3JvdW5kOiAjMmYyZjM5O1xuICBwYWRkaW5nOiAyNHB4O1xufVxuXG4ubWFpbi1oZWFkZXIgLm1lZ2EtYm90dG9tLWNhcmQgcCB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIG1heC13aWR0aDogNTAwcHg7XG59XG5cbi8qIENUQSBCdXR0b24gKi9cbi5tYWluLWhlYWRlciAubWVnYS1ib3R0b20tY2FyZCAuY3RhIHtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4ubWFpbi1oZWFkZXIgLm1lZ2Etc3RvcnktYm94IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogOTZweDtcbiAgaGVpZ2h0OiA3OXB4O1xuICBvdmVyZmxvdzogdmlzaWJsZTsgLyogbGV0IHRoZSBsaWQgKyBwaG90byByaXNlIGFib3ZlIHRoZSBib3ggb24gaG92ZXIgKi9cbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4vKiBCb3ggYm9keSAoZnJvbnQpIOKAlCBtYXNrcyB0aGUgbG93ZXIgcGFydCBvZiB0aGUgcGhvdG8gKi9cbi5tYWluLWhlYWRlciAubWVnYS1zdG9yeS1ib3ggLmJveC1ib2R5IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAyO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDk2cHg7XG4gIGhlaWdodDogNzlweDtcbn1cblxuLyogUml0ZXNoIHBob3RvIOKAlCB0dWNrZWQgaW5zaWRlIHRoZSBib3gsIHJpc2VzIG91dCB3aGVuIHRoZSBsaWQgb3BlbnMgKi9cbi5tYWluLWhlYWRlciAubWVnYS1zdG9yeS1ib3ggLndvdy1zdG9yeSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6IDMwMHB4O1xuICBoZWlnaHQ6IDk2cHg7XG4gIHotaW5kZXg6IDE7XG4gIG9wYWNpdHk6IDA7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIHRyYW5zZm9ybTogc2NhbGUoLjcpIHRyYW5zbGF0ZVgoMzZweCkgdHJhbnNsYXRlWSgtMzBweCk7XG4gIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbSBjZW50ZXI7XG4gIHRyYW5zaXRpb246XG4gICAgdHJhbnNmb3JtIC41cyBjdWJpYy1iZXppZXIoLjE2LCAxLCAuMywgMSksXG4gICAgb3BhY2l0eSAuMzVzIGVhc2U7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzdjMjIzNSAwJSwgIzJkMjIyNSA2OC45MSUsICMyZDIyMjUgMTAwJSk7XG4gIHBhZGRpbmc6IDE2cHg7XG59XG5cbi5tYWluLWhlYWRlciAubWVnYS1zdG9yeS1ib3ggLndvdy1zdG9yeSAudGV4dCB7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGluZS1oZWlnaHQ6IDE4cHg7XG4gIGxldHRlci1zcGFjaW5nOiAuMjRweDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiA1cHg7XG59XG5cbi5tYWluLWhlYWRlciAubWVnYS1zdG9yeS1ib3ggLndvdy1zdG9yeSAuc3RvcnktcGhvdG8ge1xuICB3aWR0aDogYXV0bztcbiAgaGVpZ2h0OiA5NnB4O1xufVxuXG4vKiBMaWQg4oCUIHNpdHMgb24gdG9wIG9mIHRoZSBib3gsIGxpZnRzIGFuZCB0aWx0cyBvcGVuIG9uIGhvdmVyICovXG4ubWFpbi1oZWFkZXIgLm1lZ2Etc3RvcnktYm94IC5ib3gtY2FwIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMTNweDtcbiAgdG9wOiA2cHg7XG4gIHotaW5kZXg6IDM7XG4gIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbSBsZWZ0O1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjVzIGN1YmljLWJlemllciguMTYsIDEsIC4zLCAxKTtcbn1cblxuLyogSG92ZXIgLyBrZXlib2FyZC1mb2N1cyA9IG9wZW4gc3RhdGUgKi9cbi5tYWluLWhlYWRlciAubWVnYS1zdG9yeS1ib3g6aG92ZXIgLmJveC1jYXAsXG4ubWFpbi1oZWFkZXIgLm1lZ2Etc3RvcnktYm94OmZvY3VzLXdpdGhpbiAuYm94LWNhcCB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKDQwcHgsIC00NXB4KSByb3RhdGUoMzBkZWcpO1xufVxuXG4ubWFpbi1oZWFkZXIgLm1lZ2Etc3RvcnktYm94OmhvdmVyIC53b3ctc3RvcnksXG4ubWFpbi1oZWFkZXIgLm1lZ2Etc3RvcnktYm94OmZvY3VzLXdpdGhpbiAud293LXN0b3J5IHtcbiAgb3BhY2l0eTogMTtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87IC8qIGFsbG93IHRoZSByZXZlYWxlZCBwYW5lbCB0byBiZSBob3ZlcmVkICsgY2xpY2tlZCAqL1xuICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVgoLTIwcHgpIHRyYW5zbGF0ZVkoLTczcHgpO1xufVxuXG4vKiBJbm5vdmF0aW9uIE1lZ2EgTWVudSBzcGVjaWZpYyBsYXlvdXQgKi9cbi5tYWluLWhlYWRlciAubWVnYS1tZW51LXRvcC1zZWN0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiA2MHB4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG59XG5cbi5tYWluLWhlYWRlciAubWVnYS1tZW51LWxlZnQge1xuICBmbGV4OiAxO1xufVxuXG4uZGlzY2lwbGluZS1ncmlkIHtcbiAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG4uaW5ub3ZhdGlvbi1ncmlkLFxuLmFib3V0LWdyaWQge1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCAxZnIpO1xuICBtYXgtd2lkdGg6IDcwMHB4O1xufVxuXG4uaW5zaWdodC1ncmlkIHtcbiAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gIG1heC13aWR0aDogNzAwcHg7XG59XG5cbi5tZWdhLW1lbnUgLm1lZ2EtbWVudS1yaWdodCB7XG4gIGZsZXg6IDE7XG4gIG1heC13aWR0aDogNTAwcHg7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGdhcDogMjBweDtcbn1cblxuLm1lZ2EtbWVudSAuc3RvcnktaW1hZ2UtY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4vKiAudHJ1ZS1zdG9yeS1yaWJib24ge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMjRweDtcbiAgbGVmdDogLTM1cHg7XG4gIGJhY2tncm91bmQ6IHZhcigtLWFjY2VudC1yZWQpO1xuICBjb2xvcjogd2hpdGU7XG4gIHBhZGRpbmc6IDZweCA0MHB4O1xuICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpO1xuICBmb250LXNpemU6IDExcHg7XG4gIGZvbnQtd2VpZ2h0OiA3MDA7XG4gIGxldHRlci1zcGFjaW5nOiAxLjVweDtcbiAgei1pbmRleDogMjtcbiAgYm94LXNoYWRvdzogMCA0cHggMTBweCByZ2JhKDAsIDAsIDAsIC4zKTtcbn0gKi9cblxuLyogUmliYm9uICovXG4udHJ1ZS1zdG9yeS1yaWJib24ge1xuICB3aWR0aDogMTUwcHg7XG4gIGhlaWdodDogMTUwcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgei1pbmRleDogMTtcbn1cblxuLnRydWUtc3RvcnktcmliYm9uOjpiZWZvcmUsXG4udHJ1ZS1zdG9yeS1yaWJib246OmFmdGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB6LWluZGV4OiAtMTtcbiAgY29udGVudDogXCJcIjtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGJvcmRlcjogNXB4IHNvbGlkICM3YzIyMzU7XG59XG5cbi50cnVlLXN0b3J5LXJpYmJvbiBzcGFuIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDI0NXB4O1xuICBwYWRkaW5nOiA4cHggMDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ViNGM1ZTtcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGluZS1oZWlnaHQ6IDE4cHg7XG4gIGxldHRlci1zcGFjaW5nOiAxLjJweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4vKiB0b3AgbGVmdCAqL1xuLnRydWUtc3RvcnktcmliYm9uLnJpYmJvbi10b3AtbGVmdCB7XG4gIHRvcDogLTEwcHg7XG4gIGxlZnQ6IC0xMHB4O1xufVxuXG4udHJ1ZS1zdG9yeS1yaWJib24ucmliYm9uLXRvcC1sZWZ0OjpiZWZvcmUsXG4udHJ1ZS1zdG9yeS1yaWJib24ucmliYm9uLXRvcC1sZWZ0OjphZnRlciB7XG4gIGJvcmRlci10b3AtY29sb3I6IHRyYW5zcGFyZW50O1xuICBib3JkZXItbGVmdC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi50cnVlLXN0b3J5LXJpYmJvbi5yaWJib24tdG9wLWxlZnQ6OmJlZm9yZSB7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDI2cHg7XG59XG5cbi50cnVlLXN0b3J5LXJpYmJvbi5yaWJib24tdG9wLWxlZnQ6OmFmdGVyIHtcbiAgYm90dG9tOiAyNnB4O1xuICBsZWZ0OiAwO1xufVxuXG4udHJ1ZS1zdG9yeS1yaWJib24ucmliYm9uLXRvcC1sZWZ0IHNwYW4ge1xuICByaWdodDogLTI1cHg7XG4gIHRvcDogMzBweDtcbiAgdHJhbnNmb3JtOiByb3RhdGUoLTQ1ZGVnKTtcbn1cblxuLyogcmliYm9uIGVuZCAqL1xuLmFib3V0LXN0b3J5LWNhcmQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBiYWNrZ3JvdW5kOiAjMTAxYTFiO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogMTAwJTtcbn1cblxuLmFib3V0LXN0b3J5LXdyYXAge1xuICBkaXNwbGF5OiBmbGV4O1xufVxuXG4uYWJvdXQtc3RvcnktaW1hZ2Uge1xuICBmbGV4OiAwIDAgNDUlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5hYm91dC1zdG9yeS1pbWFnZSBpbWcge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8qIC5hYm91dC1zdG9yeS1pbWFnZTo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgd2lkdGg6IDQwcHg7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQsICMxZTFlMjQpO1xufSAqL1xuXG4uYWJvdXQtc3RvcnktY29udGVudCB7XG4gIGZsZXg6IDE7XG4gIHBhZGRpbmc6IDQwcHggMzBweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5hYm91dC1zdG9yeS10aXRsZSB7XG4gIGNvbG9yOiAjZmZkMGQ4O1xuICBmb250LXNpemU6IDEycHg7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIGxldHRlci1zcGFjaW5nOiAxcHg7XG4gIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG59XG5cbi5hYm91dC1zdG9yeS10ZXh0IHtcbiAgY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1LCAuOCk7XG4gIGZvbnQtc2l6ZTogMTVweDtcbiAgbGluZS1oZWlnaHQ6IDEuODtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuLnN0b3J5LXF1b3RlIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiAxNnB4O1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbn1cblxuLnF1b3RlLWljb24ge1xuICBmb250LXNpemU6IDQ4cHg7XG4gIGNvbG9yOiAjZmZkMGQ4O1xuICBsaW5lLWhlaWdodDogMTtcbiAgbWFyZ2luLXRvcDogLTEwcHg7XG4gIG9wYWNpdHk6IC41O1xufVxuXG4ucXVvdGUtYm9keSB7XG4gIGNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSwgLjgpO1xuICBmb250LXNpemU6IDIwcHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjY7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIG1hcmdpbi1ib3R0b206IDEycHg7XG59XG5cbi5xdW90ZS1hdXRob3Ige1xuICBjb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUsIC42KTtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBmb250LXdlaWdodDogMzAwO1xufVxuXG4uYnRuLWN0YTpob3ZlciB7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTtcbiAgYm94LXNoYWRvdzogMCA0cHggMTVweCByZ2IoNTUsIDU1LCA2NiwgLjEpO1xufVxuXG4vKiBNb2JpbGUgTmF2aWdhdGlvbiBUb2dnbGUgKi9cbi5tYWluLWhlYWRlciAubW9iaWxlLW1lbnUtYnRuIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICB3aWR0aDogMjRweDtcbiAgaGVpZ2h0OiAxOHB4O1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHotaW5kZXg6IDEwMDE7XG59XG5cbi5tYWluLWhlYWRlciAubW9iaWxlLW1lbnUtYnRuIC5iYXIge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAycHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbi1zbW9vdGgpO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLm1haW4taGVhZGVyIC5tb2JpbGUtbWVudS1idG4ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gIH1cblxuICAubWFpbi1oZWFkZXIgLm5hdi1tZW51IHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIHJpZ2h0OiAtMTAwJTtcbiAgICB3aWR0aDogODAlO1xuICAgIGhlaWdodDogMTAwdmg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tYmctcHJpbWFyeSk7XG4gICAgYm94LXNoYWRvdzogLTEwcHggMCAzMHB4IHJnYigwLCAwLCAwLCAuMDUpO1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbi1zbW9vdGgpO1xuICAgIHBhZGRpbmc6IDQwcHg7XG4gICAgei1pbmRleDogOTk5O1xuICB9XG5cbiAgLm1haW4taGVhZGVyIC5uYXYtbWVudS5hY3RpdmUge1xuICAgIHJpZ2h0OiAwO1xuICB9XG5cbiAgLm1haW4taGVhZGVyIC5uYXYtbGlzdCB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDMwcHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAubWFpbi1oZWFkZXIgLm1lZ2EtbWVudSB7XG4gICAgcG9zaXRpb246IHN0YXRpYztcbiAgICB0cmFuc2Zvcm06IG5vbmU7XG4gICAgb3BhY2l0eTogMTtcbiAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIHBhZGRpbmc6IDEwcHggMCAwIDE1cHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIC5tYWluLWhlYWRlciAubmF2LWl0ZW0uYWN0aXZlIC5tZWdhLW1lbnUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG59XG5cbi5wb2RjYXN0LWF2YXRhciBpbWcge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBvYmplY3QtZml0OiBjb3Zlcjtcbn1cblxuLmJveC1hdmF0YXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgcmlnaHQ6IC01cHg7XG4gIHdpZHRoOiAyNHB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgYm9yZGVyOiAycHggc29saWQgI2ZmZjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgei1pbmRleDogMztcbn1cblxuLmJveC1hdmF0YXIgaW1nIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogMTAwJTtcbiAgb2JqZWN0LWZpdDogY292ZXI7XG59XG5cbi5tZWdhLW1lbnUgLnN0b3J5LWltYWdlIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogYXV0bztcbiAgZGlzcGxheTogYmxvY2s7XG4gIHRyYW5zaXRpb246IGZpbHRlciAuMzVzIGVhc2U7XG59XG5cbi5tZWdhLW1lbnUgLnN0b3J5LXZpZGVvIHtcbiAgYXNwZWN0LXJhdGlvOiA3MjMvMzI5O1xuICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgbWluLWhlaWdodDogMzI5cHg7XG59XG5cbi8qIHN0b3J5LWxpbmstd3JhcDogc3RhY2sgbGluayBvdmVyIGltYWdlICovXG5cbi8qIC5tZWdhLW1lbnUgLnN0b3J5LWxpbmstd3JhcCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufSAqL1xuXG4vKiBsaW5rIGhpZGRlbiBieSBkZWZhdWx0LCBjZW50ZXJlZCB0byBpdHMgb3duIHNpemUgKi9cbi5tZWdhLW1lbnUgLnN0b3J5LWxpbmsge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNTAlO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiA1cHg7XG4gIHBhZGRpbmc6IDhweCAxcHg7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICBvcGFjaXR5OiAwO1xuICB0cmFuc2l0aW9uOlxuICAgIG9wYWNpdHkgLjNzIGVhc2UsXG4gICAgYmFja2dyb3VuZCAuMjVzIGVhc2U7XG4gIHotaW5kZXg6IDI7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDE4cHg7XG4gIGxldHRlci1zcGFjaW5nOiAuMjRweDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgY29sb3I6ICNmZmY7XG59XG5cbi5tZWdhLW1lbnUgLnN0b3J5LWxpbmsgaW1nIHtcbiAgd2lkdGg6IDE0cHg7XG4gIGhlaWdodDogMTRweDtcbiAgZmxleC1zaHJpbms6IDA7XG59XG5cbi8qIG9uIGNvbnRhaW5lciBob3ZlcjogYmx1ciBvbmx5IHRoZSBpbWFnZSwgcmV2ZWFsIHRoZSBsaW5rICovXG4ubWVnYS1tZW51IC5zdG9yeS1pbWFnZS1jb250YWluZXI6aG92ZXIgLnN0b3J5LWltYWdlLFxuLm1lZ2EtbWVudSAuYWJvdXQtc3RvcnktY2FyZDpob3ZlciAuYWJvdXQtc3Rvcnktd3JhcCB7XG4gIGZpbHRlcjogYmx1cigzcHgpIGJyaWdodG5lc3MoLjYpO1xufVxuXG4ubWVnYS1tZW51IC5zdG9yeS1pbWFnZS1jb250YWluZXI6aG92ZXIgLnN0b3J5LWxpbmssXG4ubWVnYS1tZW51IC5hYm91dC1zdG9yeS1jYXJkOmhvdmVyIC5zdG9yeS1saW5rIHtcbiAgb3BhY2l0eTogMTtcbn1cblxuLyogb24gbGluayBob3ZlcjogYWRkIGEgc2VtaS10cmFuc3BhcmVudCBiYWNrZHJvcCAqL1xuLm1lZ2EtbWVudSAuc3RvcnktbGluazpob3ZlciB7XG4gIGJhY2tncm91bmQ6IHJnYigyNTUsIDI1NSwgMjU1LCAuMzUpO1xufVxuXG4vKiDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcbiAgIElubm92YXRpb24gbWVnYS1tZW51IG9ubHkg4oCUIHN0b3J5IGNhcmQgc2hvd3MgYW5cbiAgIGFsd2F5cy12aXNpYmxlIGhlYWRpbmcgKyBcIlZpZXcgVHJ1ZSBTdG9yeVwiIGxpbmtcbiAgIHdpdGggYW4gYW5pbWF0ZWQgYXJyb3cgb24gaG92ZXIgKG1hdGNoZXMgdGhlXG4gICBzY3JvbGwtdGFicyBzdG9yeSBsaW5rKS4gU2NvcGVkIHZpYSAtLWlubm92YXRpb25cbiAgIHNvIHRoZSBvdGhlciBtZWdhLW1lbnUgdGFicyBzdGF5IHVudG91Y2hlZC5cbiAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqL1xuLm1lZ2EtbWVudSAuc3RvcnktaW1hZ2UtY29udGFpbmVyLS1pbm5vdmF0aW9uIC5zdG9yeS1saW5rLXdyYXAge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJvcmRlci1yYWRpdXM6IDA7XG59XG5cbi5tZWdhLW1lbnUgLnN0b3J5LWltYWdlLWNvbnRhaW5lci0taW5ub3ZhdGlvbiAuc3RvcnktdmlkZW8ge1xuICBkaXNwbGF5OiBibG9jaztcbn1cblxuLyogZmxhdCBzY3JpbSBrZWVwcyB0aGUgb3ZlcmxhaWQgbGlnaHQgdGV4dCBsZWdpYmxlIG9uIHRoZSB2aWRlbyAqL1xuXG4ubWVnYS1tZW51IC5zdG9yeS1pbWFnZS1jb250YWluZXItLWlubm92YXRpb24gLnN0b3J5LWxpbmstd3JhcDo6YWZ0ZXIge1xuICBjb250ZW50OiBcIlwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGluc2V0OiAwO1xuICB6LWluZGV4OiAxO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgYmFja2dyb3VuZDogcmdiKDAsIDAsIDAsIC4yKTtcbn1cblxuLyoga2VlcCB0aGUgcmliYm9uIGFib3ZlIHRoZSBzY3JpbSBzbyBpdCBpc24ndCBkaW1tZWQgKi9cbi5tZWdhLW1lbnUgLnN0b3J5LWltYWdlLWNvbnRhaW5lci0taW5ub3ZhdGlvbiAudHJ1ZS1zdG9yeS1yaWJib24ge1xuICB6LWluZGV4OiAzO1xufVxuXG4ubWVnYS1tZW51IC5zdG9yeS1pbWFnZS1jb250YWluZXItLWlubm92YXRpb24gLnN0b3J5LWltYWdlLWNvbnRhaW5lcl9fY2FwdGlvbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgaW5zZXQ6IGF1dG8gMCAwO1xuICB6LWluZGV4OiAyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDIwcHg7XG4gIHBhZGRpbmc6IDMycHg7XG59XG5cbi5tZWdhLW1lbnUgLnN0b3J5LWltYWdlLWNvbnRhaW5lci0taW5ub3ZhdGlvbiAuc3RvcnktaW1hZ2UtY29udGFpbmVyX19oZWFkaW5nIHtcbiAgbWFyZ2luOiAwO1xuICBjb2xvcjogI2ZmZjtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtaGVhZGluZyk7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgbGluZS1oZWlnaHQ6IDEuNjY7XG4gIGxldHRlci1zcGFjaW5nOiAwO1xufVxuXG4ubWVnYS1tZW51IC5zdG9yeS1pbWFnZS1jb250YWluZXItLWlubm92YXRpb24gLnN0b3J5LWltYWdlLWNvbnRhaW5lcl9fc3RvcnktbGluayB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDEycHg7XG4gIHdpZHRoOiBmaXQtY29udGVudDtcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGZvbnQtc2l6ZTogMTZweDtcbiAgbGluZS1oZWlnaHQ6IDEuNjI1O1xuICBsZXR0ZXItc3BhY2luZzogMDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4ubWVnYS1tZW51IC5zdG9yeS1pbWFnZS1jb250YWluZXItLWlubm92YXRpb24gLnN0b3J5LWltYWdlLWNvbnRhaW5lcl9fc3RvcnktbGluay10ZXh0IHtcbiAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIHRleHQtdW5kZXJsaW5lLW9mZnNldDogNXB4O1xuICB0ZXh0LWRlY29yYXRpb24tdGhpY2tuZXNzOiAxcHg7XG59XG5cbi5tZWdhLW1lbnUgLnN0b3J5LWltYWdlLWNvbnRhaW5lci0taW5ub3ZhdGlvbiAuc3RvcnktaW1hZ2UtY29udGFpbmVyX19zdG9yeS1saW5rLWFycm93IHtcbiAgZmxleDogbm9uZTtcbiAgd2lkdGg6IDIwcHg7XG4gIGhlaWdodDogMTdweDtcbiAgZmlsbDogY3VycmVudGNvbG9yO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjNzIGN1YmljLWJlemllciguMjUsIC40NiwgLjQ1LCAuOTQpO1xufVxuXG4ubWVnYS1tZW51XG4uc3RvcnktaW1hZ2UtY29udGFpbmVyLS1pbm5vdmF0aW9uXG4uc3RvcnktaW1hZ2UtY29udGFpbmVyX19zdG9yeS1saW5rOmhvdmVyXG4uc3RvcnktaW1hZ2UtY29udGFpbmVyX19zdG9yeS1saW5rLWFycm93IHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCg0cHgsIDAsIDApO1xufVxuXG4ubWVnYS1tZW51XG4uc3RvcnktaW1hZ2UtY29udGFpbmVyLS1pbm5vdmF0aW9uXG4uc3RvcnktaW1hZ2UtY29udGFpbmVyX19zdG9yeS1saW5rOmZvY3VzLXZpc2libGUge1xuICBvdXRsaW5lOiAycHggc29saWQgI2ZmZjtcbiAgb3V0bGluZS1vZmZzZXQ6IDRweDtcbn1cblxuLyogSW5ub3ZhdGlvbiBjYXJkIG9wdHMgb3V0IG9mIHRoZSBzaGFyZWQgaG92ZXItYmx1ciB0cmVhdG1lbnQgKi9cbi5tZWdhLW1lbnUgLnN0b3J5LWltYWdlLWNvbnRhaW5lci0taW5ub3ZhdGlvbjpob3ZlciAuc3RvcnktaW1hZ2Uge1xuICBmaWx0ZXI6IG5vbmU7XG59XG5cbi8qIE1vYmlsZSBOYXZpZ2F0aW9uIFRvZ2dsZSAqL1xuLm1vYmlsZS1tZW51LWJ0biB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgd2lkdGg6IDI0cHg7XG4gIGhlaWdodDogMThweDtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB6LWluZGV4OiAxMDAxO1xufVxuXG4ubW9iaWxlLW1lbnUtYnRuIC5iYXIge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAycHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7XG4gIGJvcmRlci1yYWRpdXM6IDJweDtcbiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbi1zbW9vdGgpO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgLm1vYmlsZS1tZW51LWJ0biB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgfVxuXG4gIC5uYXYtbWVudSB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogMDtcbiAgICByaWdodDogLTEwMCU7XG4gICAgd2lkdGg6IDgwJTtcbiAgICBoZWlnaHQ6IDEwMHZoO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLXByaW1hcnkpO1xuICAgIGJveC1zaGFkb3c6IC0xMHB4IDAgMzBweCByZ2IoMCwgMCwgMCwgLjA1KTtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHRyYW5zaXRpb246IHZhcigtLXRyYW5zaXRpb24tc21vb3RoKTtcbiAgICBwYWRkaW5nOiA0MHB4O1xuICAgIHotaW5kZXg6IDk5OTtcbiAgfVxuXG4gIC5uYXYtbWVudS5hY3RpdmUge1xuICAgIHJpZ2h0OiAwO1xuICB9XG5cbiAgLm5hdi1saXN0IHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogMzBweDtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIC5tZWdhLW1lbnUge1xuICAgIHBvc2l0aW9uOiBzdGF0aWM7XG4gICAgdHJhbnNmb3JtOiBub25lO1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBwYWRkaW5nOiAxMHB4IDAgMCAxNXB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAubmF2LWl0ZW0uYWN0aXZlIC5tZWdhLW1lbnUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICB9XG5cbiAgLmJ0bi1jdGEge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG5cbiAgLyogSGFtYnVyZ3VlciBhbmltYXRpb25zICovXG4gIC5tb2JpbGUtbWVudS1idG4uYWN0aXZlIC5iYXI6bnRoLWNoaWxkKDEpIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoOHB4KSByb3RhdGUoNDVkZWcpO1xuICB9XG5cbiAgLm1vYmlsZS1tZW51LWJ0bi5hY3RpdmUgLmJhcjpudGgtY2hpbGQoMikge1xuICAgIG9wYWNpdHk6IDA7XG4gIH1cblxuICAubW9iaWxlLW1lbnUtYnRuLmFjdGl2ZSAuYmFyOm50aC1jaGlsZCgzKSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC04cHgpIHJvdGF0ZSgtNDVkZWcpO1xuICB9XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQXNrIEV4cG9uYSBGdWxsc2NyZWVuIERyb3Bkb3duXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi5hc2stZXhwb25hLWZ1bGxzY3JlZW4tZHJvcGRvd24ge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIHRvcDogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMHZ3O1xuICBoZWlnaHQ6IDEwMGR2aDtcbiAgYmFja2dyb3VuZDogIzM3Mzc0MiB1cmwoXCIuLi8uLi8uLi9zdGF0aWMvYXNzZXRzL2ltYWdlcy9sYXRlc3QvZ3JhaW4ucG5nXCIpIGNlbnRlciBjZW50ZXI7XG4gIHotaW5kZXg6IDIwMDA7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgcGFkZGluZzogNDBweCAwO1xuICBvcGFjaXR5OiAwO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTAwJSk7XG4gIHRyYW5zaXRpb246XG4gICAgb3BhY2l0eSAuNHMgZWFzZSxcbiAgICB2aXNpYmlsaXR5IC40cyBlYXNlLFxuICAgIHRyYW5zZm9ybSAuNXMgY3ViaWMtYmV6aWVyKC4xNiwgMSwgLjMsIDEpO1xufVxuXG4uYXNrLWV4cG9uYS1mdWxsc2NyZWVuLWRyb3Bkb3duLm9wZW4ge1xuICBvcGFjaXR5OiAxO1xuICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gIGJvcmRlci1ib3R0b206IDEwcHggc29saWQ7XG4gIGJvcmRlci1pbWFnZTogbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjZmZmOWVkIDAlLCAjZmZmOWVkIDkxLjE1JSkgMTtcbn1cblxuLyogTG9jayBwYWdlIHNjcm9sbCB3aGlsZSB0aGUgRXhwb25hIGRyb3Bkb3duIGlzIG9wZW4g4oCUIHB1cmUgQ1NTLCBubyBKUyBob29rICovXG5ib2R5OmhhcyguYXNrLWV4cG9uYS1mdWxsc2NyZWVuLWRyb3Bkb3duLm9wZW4pIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuYm9keS5ob21lOmhhcyguYXNrLWV4cG9uYS1mdWxsc2NyZWVuLWRyb3Bkb3duLm9wZW4pIHtcbiAgb3ZlcmZsb3c6IGhpZGRlbiAhaW1wb3J0YW50O1xufVxuXG4uZXhwb25hLWRyb3Bkb3duLWhlYWRlciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLyogTW9iaWxlIGNsb3NlIGFycm93IOKAlCBoaWRkZW4gb24gZGVza3RvcCAqL1xuLmV4cG9uYS1oZWFkZXItY2xvc2UtYnRuIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLmV4cG9uYS1oZWFkZXItY2xvc2UtYnRuIC5pYi1pY29uIHtcbiAgY29sb3I6ICNmZmY7XG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG59XG5cbi5leHBvbmEtZHJvcGRvd24taGVhZGVyIC5kcm9wZG93bi1sb2dvIHtcbiAgaGVpZ2h0OiAyNHB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5hc2stZXhwb25hLWZ1bGxzY3JlZW4tZHJvcGRvd24gLmV4cG9uYS1kcm9wZG93bi1ib2R5IHtcbiAgZmxleDogMTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbWF4LXdpZHRoOiA5MDRweDtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG5cbi5hc2stZXhwb25hLWZ1bGxzY3JlZW4tZHJvcGRvd24gLmV4cG9uYS1kcm9wZG93bi10aXRsZSB7XG4gIGNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSwgLjU1KTtcbiAgZm9udC1zaXplOiAyMHB4O1xuICBsaW5lLWhlaWdodDogMzRweDtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gIG1hcmdpbi1ib3R0b206IDI0cHg7XG4gIHRyYW5zaXRpb246IGFsbCAuM3MgZWFzZTtcbn1cblxuLmFzay1leHBvbmEtZnVsbHNjcmVlbi1kcm9wZG93biAuZXhwb25hLWlucHV0LWFyZWEge1xuICBtYXJnaW4tYm90dG9tOiA1MHB4O1xuICB3aWR0aDogMTAwJTtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uYXNrLWV4cG9uYS1mdWxsc2NyZWVuLWRyb3Bkb3duIC5leHBvbmEtaW5wdXQtY2FyZXQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgbGVmdDogNTAlO1xuICB6LWluZGV4OiAxO1xuICBkaXNwbGF5OiBibG9jaztcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgbGluZS1oZWlnaHQ6IDI4cHg7XG4gIG9wYWNpdHk6IC44O1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gIGFuaW1hdGlvbjogYmxpbmsgMXMgc3RlcC1lbmQgaW5maW5pdGU7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uYXNrLWV4cG9uYS1mdWxsc2NyZWVuLWRyb3Bkb3duIC5leHBvbmEtaW5wdXQtYXJlYS5oYXMtdmFsdWUgLmV4cG9uYS1pbnB1dC1jYXJldCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5hc2stZXhwb25hLWZ1bGxzY3JlZW4tZHJvcGRvd24gLmV4cG9uYS1tYWluLWlucHV0IHtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgY29sb3I6ICNmZmY7XG4gIGNhcmV0LWNvbG9yOiAjZmZmO1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgd2lkdGg6IDEwMCU7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXByaW1hcnksIFwiTGV4ZW5kXCIsIHNhbnMtc2VyaWYpO1xuICByZXNpemU6IG5vbmU7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIGhlaWdodDogMjhweDsgLyogSW5pdGlhbCBoZWlnaHQgZm9yIHNpbmdsZSBsaW5lICovXG4gIG1heC1oZWlnaHQ6IDEyMHB4O1xuICBwYWRkaW5nLXJpZ2h0OiAxMnB4O1xufVxuXG4uYXNrLWV4cG9uYS1mdWxsc2NyZWVuLWRyb3Bkb3duIC5leHBvbmEtaW5wdXQtYXJlYTpub3QoLmhhcy12YWx1ZSkgLmV4cG9uYS1tYWluLWlucHV0IHtcbiAgY2FyZXQtY29sb3I6IHRyYW5zcGFyZW50O1xufVxuXG4vKiBpT1MgU2FmYXJpIGNhbiBza2lwIHBhaW50aW5nIGFuIGFuaW1hdGVkIHRleHRhcmVhIHBsYWNlaG9sZGVyLCBzbyB0aGVcbiAgdmlzaWJsZSBmYWtlIGNhcmV0IGlzIGEgcmVhbCAuZXhwb25hLWlucHV0LWNhcmV0IGVsZW1lbnQgaW5zdGVhZC4gKi9cbi5hc2stZXhwb25hLWZ1bGxzY3JlZW4tZHJvcGRvd24gLmV4cG9uYS1tYWluLWlucHV0OjpwbGFjZWhvbGRlciB7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbiAgb3BhY2l0eTogMDtcbn1cblxuLyogS2VlcCB0aGUgcmVhbCBwbGFjZWhvbGRlciBoaWRkZW47IHRoZSB3cmFwcGVyIGNhcmV0IGFib3ZlIHJlbWFpbnMgdmlzaWJsZVxuICB3aGlsZSB0aGUgZm9jdXNlZCBmaWVsZCBpcyBlbXB0eSwgd2hpY2ggaXMgdGhlIGlPUyBTYWZhcmkgcGF0aC4gKi9cbi5hc2stZXhwb25hLWZ1bGxzY3JlZW4tZHJvcGRvd24gLmV4cG9uYS1tYWluLWlucHV0OmZvY3VzOjpwbGFjZWhvbGRlciB7XG4gIGNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuQGtleWZyYW1lcyBibGluayB7XG4gIDUwJSB7XG4gICAgb3BhY2l0eTogMDtcbiAgfVxufVxuXG4ucHJlc3MtcmV0dXJuLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBnYXA6IDEycHg7XG4gIG1hcmdpbjogMjRweCBhdXRvIDAgIWltcG9ydGFudDtcbiAgb3BhY2l0eTogMDtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAuM3MgZWFzZTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBvdXRsaW5lOiBub25lO1xuICBwYWRkaW5nOiAwO1xufVxuXG4ucmV0dXJuLWtleS1pY29uIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHdpZHRoOiAzMnB4O1xuICBoZWlnaHQ6IDMycHg7XG4gIGJhY2tncm91bmQ6ICMzNzM3NDI7XG4gIGJvcmRlcjogMXB4IHNvbGlkICM2NzY3NzU7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIGNvbG9yOiAjZmZmO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAuMnMgZWFzZTtcbiAgYm94LXNoYWRvdzogMCAwIDJweCAwICMyZjJmMzkzMztcbn1cblxuLnByZXNzLXJldHVybi10ZXh0IHtcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbn1cblxuLyogVHlwaW5nIEFjdGl2ZSBTdGF0ZSAqL1xuXG4vKiAuZXhwb25hLWRyb3Bkb3duLWJvZHkudHlwaW5nLWFjdGl2ZSAuZXhwb25hLWRyb3Bkb3duLXRpdGxlIHtcbiAgZm9udC1zaXplOiAxMnB4O1xuICBvcGFjaXR5OiAwLjc7XG4gIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2U7XG59ICovXG5cbi5leHBvbmEtZHJvcGRvd24tYm9keS50eXBpbmctYWN0aXZlIC5wcmVzcy1yZXR1cm4tY29udGFpbmVyIHtcbiAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xuICBvcGFjaXR5OiAxO1xufVxuXG4uYXNrLWV4cG9uYS1mdWxsc2NyZWVuLWRyb3Bkb3duIC5leHBvbmEtc3VnZ2VzdGlvbnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IHdyYXA7XG4gIGdhcDogMTZweDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG5cbi5hc2stZXhwb25hLWZ1bGxzY3JlZW4tZHJvcGRvd24gLnN1Z2dlc3Rpb24tY2hpcCB7XG4gIGJhY2tncm91bmQ6ICMyZjJmMzk7XG4gIGJvcmRlcjogMDtcbiAgY29sb3I6ICNmZmY7XG4gIHBhZGRpbmc6IDEycHggMTZweDtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBsaW5lLWhlaWdodDogMjZweDtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBib3gtc2hhZG93OiAwIDAgMnB4IDAgIzJmMmYzOTMzO1xuICB0cmFuc2l0aW9uOiBhbGwgLjNzIGVhc2U7XG59XG5cbi5hc2stZXhwb25hLWZ1bGxzY3JlZW4tZHJvcGRvd24gLnN1Z2dlc3Rpb24tY2hpcDpob3ZlciB7XG4gIGJhY2tncm91bmQ6ICMyNjI2MmU7XG4gIGNvbG9yOiAjZmZmO1xufVxuXG4uYXNrLWV4cG9uYS1mdWxsc2NyZWVuLWRyb3Bkb3duIC5leHBvbmEtZHJvcGRvd24tZm9vdGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5wb3dlcmVkLWJ5IHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBsZWZ0OiA1MCU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgY29sb3I6ICM3YjdiODQ7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4vKiBUaGUgdmlzaWJsZSBsYWJlbCDigJQgc2l0cyBhYm92ZSB0aGUgcG9wdXAgYm94IHNvIGl0IHJlYWRzIGFzIHRoZSBib3gnc1xuICAgb3duIGZvb3RlciBsaW5lIChzYW1lIG1hcmt1cCArIGxvZ28sIG5vIGR1cGxpY2F0aW9uKSAqL1xuLnBvd2VyZWQtYnlfX2xhYmVsIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB6LWluZGV4OiAyO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZ2FwOiA2cHg7XG59XG5cbi8qIEhvdmVyIHBvcHVwIOKAlCBkZXNrdG9wIG9ubHkuIEJvdHRvbSBlZGdlIHNpdHMgfjEwcHggYWJvdmUgdGhlIG1vZGFsJ3MgMTBweFxuICAgZ3JhZGllbnQgYm9yZGVyOyB0aGUgYm94IGV4cGFuZHMgZnJvbSBib3R0b20gdG8gdG9wIG9uIGhvdmVyIGFuZCB0aGUgbGFiZWxcbiAgIHNob3dzIHRocm91Z2ggYXQgdGhlIGJveCdzIGJvdHRvbSAoc2FtZSBtYXJrdXAgKyBsb2dvLCBubyBkdXBsaWNhdGlvbikuICovXG4ucG93ZXJlZC1ieV9fcG9wdXAge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGxlZnQ6IDUwJTtcbiAgYm90dG9tOiAtMzBweDtcbiAgei1pbmRleDogMTtcbiAgd2lkdGg6IG1heC1jb250ZW50O1xuICBtYXgtd2lkdGg6IDMyMHB4O1xuICBwYWRkaW5nOiAyMHB4IDIwcHggNjJweDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBiYWNrZ3JvdW5kOiAjNDQ0NDRmIHVybChcIi4uLy4uLy4uL3N0YXRpYy9hc3NldHMvaW1hZ2VzL2xhdGVzdC9ncmFpbi5wbmdcIikgY2VudGVyIGNlbnRlcjtcbiAgYm94LXNoYWRvdzogMCAwIDJweCAwIHJnYmEoNDcsIDQ3LCA1NywgLjIpO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gIGNsaXAtcGF0aDogaW5zZXQoMTAwJSAwIDAgMCk7XG4gIG9wYWNpdHk6IDA7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHRyYW5zaXRpb246XG4gICAgY2xpcC1wYXRoIC41cyBjdWJpYy1iZXppZXIoLjE2LCAxLCAuMywgMSksXG4gICAgb3BhY2l0eSAuM3MgZWFzZSxcbiAgICB2aXNpYmlsaXR5IDBzIGxpbmVhciAuNXM7XG59XG5cbi5wb3dlcmVkLWJ5OmhvdmVyIC5wb3dlcmVkLWJ5X19wb3B1cCxcbi5wb3dlcmVkLWJ5OmZvY3VzLXZpc2libGUgLnBvd2VyZWQtYnlfX3BvcHVwIHtcbiAgb3BhY2l0eTogMTtcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgY2xpcC1wYXRoOiBpbnNldCgwIDAgMCAwKTtcbiAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gIHRyYW5zaXRpb24tZGVsYXk6IDBzO1xufVxuXG4ucG93ZXJlZC1ieV9fcG9wdXAtdGV4dCB7XG4gIG1hcmdpbjogMDtcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtZmFtaWx5OiBcIkxleGVuZFwiLCBzYW5zLXNlcmlmO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICBmb250LXdlaWdodDogMzAwO1xuICBsZXR0ZXItc3BhY2luZzogMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4ucG93ZXJlZC1ieSAucG93ZXJlZC1ieV9fcG9wdXAtdGV4dCBzdHJvbmcge1xuICBjb2xvcjogI2ZmZDBkODtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cblxuLyogUG9wdXAgaXMgYSBkZXNrdG9wLW9ubHkgaG92ZXIgYWZmb3JkYW5jZSDigJQgaGlkZGVuIG9uIHRhYmxldCBhbmQgYmVsb3cgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLnBvd2VyZWQtYnlfX3BvcHVwIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG59XG4uZXhwb25hLXNtYWxsLWxvZ28ge1xuICBoZWlnaHQ6IDEycHg7XG59XG5cbi5wb3dlcmVkLWJ5IHN0cm9uZyB7XG4gIGNvbG9yOiAjZmZmO1xuICBmb250LXdlaWdodDogNTAwO1xufVxuXG4vKiBUcmFwZXpvaWQgdGFiIHdpdGggc21vb3RoIHJvdW5kZWQgdG9wIGNvcm5lcnMgZHJhd24gdmlhIHBhdGgoKSDigJRcbiAgIGZpeGVkIGRpbWVuc2lvbnMgYXJlIHJlcXVpcmVkIGJlY2F1c2UgcGF0aCgpIGNvb3JkaW5hdGVzIGFyZSBhYnNvbHV0ZS5cbiAgIE91dGVyIGJveCAxODXDlzUyIGNhcnJpZXMgdGhlIGdyYWRpZW50IGJvcmRlciwgaW5uZXIgYnV0dG9uIDE4McOXNTBcbiAgIGlzIHRoZSBkYXJrIGZpbGwsIGxlYXZpbmcgYSAycHggZ3JhZGllbnQgZWRnZSBvbiB0b3AgYW5kIGJvdGggc2xhbnRzLlxuICAgVGhlIGdyYWRpZW50IG9ubHkgcnVucyA0MnB4IGRvd24g4oCUIHRoZSBib3R0b20gMTBweCBvZiB0aGUgZWRnZSBzdHJpcFxuICAgaXMgZmxhdCBkYXJrIHNvIHRoZSB0YWIgbWVyZ2VzIGludG8gdGhlIHNlY3Rpb24gYmVsb3cuICovXG4uaW5mb2JlYW5zLXVwLWJ0bi13cmFwcGVyIHtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1ib3R0b206IC01MHB4O1xuICB3aWR0aDogMTg1cHg7XG4gIGhlaWdodDogNTJweDtcbiAgcGFkZGluZzogMnB4IDJweCAwO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBiYWNrZ3JvdW5kOlxuICAgIGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzI4NGNiYSA2JSwgIzdkM2JhMiA0OCUsICNlYTFiM2QgOTQlKVxuICAgIHRvcCAvIDEwMCUgNDJweCBuby1yZXBlYXQsXG4gICAgIzM3Mzc0MjtcblxuICAvKiBTaWRlcyBhdCA2N8KwIGZyb20gaG9yaXpvbnRhbCDihpIgMjJweCBpbnNldCBwZXIgc2lkZSwgOHB4IHRvcCByYWRpdXMgKi9cbiAgY2xpcC1wYXRoOiBwYXRoKFwiTSAwIDUyIEwgMTguOSA3LjQgUSAyMiAwIDMwIDAgTCAxNTUgMCBRIDE2MyAwIDE2Ni4xIDcuNCBMIDE4NSA1MiBaXCIpO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHJpZ2h0OiAxMjBweDtcbiAgYm90dG9tOiAwO1xufVxuXG4uaW5mb2JlYW5zLXVwLWJ0biB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBiYWNrZ3JvdW5kOiAjMzczNzQyO1xuICB3aWR0aDogMTgxcHg7XG4gIGhlaWdodDogNTBweDtcbiAgY2xpcC1wYXRoOiBwYXRoKFwiTSAwIDUwIEwgMTguNiA2LjQgUSAyMS4zIDAgMjguMyAwIEwgMTUyLjcgMCBRIDE1OS43IDAgMTYyLjQgNi40IEwgMTgxIDUwIFpcIik7XG4gIGJvcmRlcjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIC4zcyBlYXNlO1xufVxuXG4uaW5mb2JlYW5zLXVwLWJ0biAuYnRuLXRleHQtY29udGVudCB7XG4gIGNvbG9yOiAjZmZmOWVkO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGxldHRlci1zcGFjaW5nOiAuN3B4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDEwcHg7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtN3B4KTtcbn1cblxuLmluZm9iZWFucy11cC1idG46aG92ZXIge1xuICBiYWNrZ3JvdW5kOiAjMzczNzQyO1xufVxuXG4uaW5mb2JlYW5zLXVwLWJ0bjpob3ZlciAuYnRuLXRleHQtY29udGVudCB7XG4gIGNvbG9yOiAjZmZmO1xufVxuXG4uaW5mb2JlYW5zLXVwLWJ0biAuYnRuLXRleHQtY29udGVudCAuaWItaWNvbiB7XG4gIGNvbG9yOiAjZmZmO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgLmFzay1leHBvbmEtZnVsbHNjcmVlbi1kcm9wZG93bi5vcGVuIHtcbiAgICBib3JkZXItYm90dG9tOiAwO1xuICB9XG4gIC5wb3dlcmVkLWJ5IHtcbiAgICBtYXJnaW4tYm90dG9tOiAtMjhweDtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgICBsZWZ0OiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICB9XG5cbiAgLmFzay1leHBvbmEtZnVsbHNjcmVlbi1kcm9wZG93biAuZXhwb25hLWRyb3Bkb3duLWJvZHkge1xuICAgIHBhZGRpbmc6IDAgMjRweDtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICAvKiBQZWVrIGNhcm91c2VsIOKAlCBhY3RpdmUgY2hpcCBzdGFydHMgYXQgYm9keSdzIDI0cHggcGFkZGluZyxcbiAgICAgbmV4dCBjaGlwIHBlZWtzIGFsbCB0aGUgd2F5IHRvIHRoZSBzY3JlZW4ncyByaWdodCBlZGdlICovXG4gIC5hc2stZXhwb25hLWZ1bGxzY3JlZW4tZHJvcGRvd24gLmV4cG9uYS1zdWdnZXN0aW9ucyB7XG4gICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICBzY3JvbGwtc25hcC10eXBlOiB4IG1hbmRhdG9yeTtcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG4gICAgZ2FwOiAxMnB4O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7XG5cbiAgICAvKiBicmVhayBvdXQgb2YgYm9keSdzIHJpZ2h0IHBhZGRpbmcgc28gdGhlIHBlZWsgcmVhY2hlcyB0aGUgc2NyZWVuIGVkZ2UgKi9cbiAgICBtYXJnaW4tcmlnaHQ6IC0yNHB4O1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgKyAyNHB4KTtcblxuICAgIC8qIHNuYXAgb2Zmc2V0OiB3aGVuIHNjcm9sbGVkLCBwcmV2aW91cyBjaGlwJ3MgdGFpbCBzaG93cyBvbiB0aGUgbGVmdCAqL1xuICAgIHNjcm9sbC1wYWRkaW5nLWxlZnQ6IDEycHg7XG5cbiAgICAvKiBTdG9wIGF0IHRoaXMgcm93J3Mgb3duIGVuZHMgaW5zdGVhZCBvZiBoYW5kaW5nIHRoZSBnZXN0dXJlIHRvIHRoZSBwYWdlXG4gICAgICAgdW5kZXJuZWF0aCDigJQgc2FtZSBmaXggYXMgLm1vYmlsZS1tZW51LWlubmVyIGFib3ZlLCBmb3IgdGhlIHNhbWUgcmVhc29uOlxuICAgICAgIGJvZHk6aGFzKC5hc2stZXhwb25hLWZ1bGxzY3JlZW4tZHJvcGRvd24ub3Blbil7b3ZlcmZsb3c6aGlkZGVufSBpcyBub3RcbiAgICAgICBhIGRlcGVuZGFibGUgdG91Y2ggbG9jayBvbiBpT1MsIGFuZCB3aXRob3V0IHRoaXMsIHJlYWwgdG91Y2ggc2Nyb2xsXG4gICAgICAgY2hhaW5zIHN0cmFpZ2h0IHRocm91Z2ggdG8gdGhlIChsb2NrZWQsIHNvIGltbW92YWJsZSkgYm9keSBpbnN0ZWFkIG9mXG4gICAgICAgc2Nyb2xsaW5nIHRoaXMgcm93IOKAlCBpdCByZWFkcyBhcyB0aGUgY2hpcHMgbm90IHNjcm9sbGluZyBhdCBhbGwuIEFcbiAgICAgICBkZXNrdG9wIG1vdXNlL3RyYWNrcGFkIHRlc3QgbmV2ZXIgaGl0cyB0aGlzIHBhdGgsIHdoaWNoIGlzIHdoeSBpdCBvbmx5XG4gICAgICAgc2hvd3MgdXAgb24gYSByZWFsIGRldmljZS4gKi9cbiAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluO1xuXG4gICAgLyogTm8gdG91Y2gtYWN0aW9uIG1lYW5zIHRoZSBicm93c2VyIGhhcyB0byBndWVzcyB0aGUgZ2VzdHVyZSdzIGF4aXMgb25cbiAgICAgICBldmVyeSB0b3VjaCwgc28gYSBtb3N0bHktdmVydGljYWwgc2Nyb2xsIG9mIHRoZSBkcm9wZG93biB0aGF0IGhhcHBlbnNcbiAgICAgICB0byBzdGFydCBvbiB0aGlzIHJvdyBjYW4gZ2V0IHJlYWQgYXMgYSBob3Jpem9udGFsIHBhbiBpbnN0ZWFkIOKAlCB0aGVcbiAgICAgICBjaGlwcyBcInN0ZWFsXCIgdGhlIHRvdWNoLiBwYW4teCBkZWNsYXJlcyB0aGlzIHJvdydzIG93biBheGlzIHVwIGZyb250OlxuICAgICAgIGhvcml6b250YWwgZ2VzdHVyZXMgc3RheSBoZXJlLCB2ZXJ0aWNhbCBvbmVzIGFyZSBoYW5kZWQgdG8gdGhlXG4gICAgICAgZHJvcGRvd24gYm9keSdzIG93biBwYW4teSBzY3JvbGwgaW1tZWRpYXRlbHkgaW5zdGVhZCBvZiBiZWluZ1xuICAgICAgIGRpc2FtYmlndWF0ZWQgcGVyLWdlc3R1cmUuICovXG4gICAgdG91Y2gtYWN0aW9uOiBwYW4teDtcbiAgfVxuXG4gIC5hc2stZXhwb25hLWZ1bGxzY3JlZW4tZHJvcGRvd24gLmV4cG9uYS1zdWdnZXN0aW9uczo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAuYXNrLWV4cG9uYS1mdWxsc2NyZWVuLWRyb3Bkb3duIC5zdWdnZXN0aW9uLWNoaXAge1xuXG4gICAgLyogYWN0aXZlIGNoaXAgd2lkdGggPSBzY3JlZW4gLSBsZWZ0IHBhZGRpbmcgKDI0KSAtIHJpZ2h0IHBlZWsgKH40OCkgKi9cbiAgICBmbGV4OiAwIDAgY2FsYygxMDB2dyAtIDcycHgpO1xuICAgIG1pbi13aWR0aDogMDtcbiAgICBzY3JvbGwtc25hcC1hbGlnbjogc3RhcnQ7XG4gICAgYmFja2dyb3VuZDogIzJmMmYzOTtcbiAgICBwYWRkaW5nOiA4cHggMTZweDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgbGluZS1oZWlnaHQ6IDIycHg7XG4gICAgbWluLWhlaWdodDogNjBweDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIG1hcmdpbjogMDtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB9XG5cbiAgLyogSGlkZSB0aGUgYm90dG9tIGNsb3NlIGJ1dHRvbiBvbiBtb2JpbGUgKi9cbiAgLmluZm9iZWFucy11cC1idG4td3JhcHBlciB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIC8qIFNob3cgdGhlIGhlYWRlciBjbG9zZSBhcnJvdyBvbiBtb2JpbGUgKi9cbiAgLmV4cG9uYS1oZWFkZXItY2xvc2UtYnRuIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgd2lkdGg6IDM2cHg7XG4gICAgaGVpZ2h0OiAzNnB4O1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkICM2NzY3NzUgIWltcG9ydGFudDtcbiAgICBib3JkZXItcmFkaXVzOiAwICFpbXBvcnRhbnQ7XG4gICAgY29sb3I6ICNmZmYgIWltcG9ydGFudDtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyICFpbXBvcnRhbnQ7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAuMnMgZWFzZTtcbiAgICBib3gtc2hhZG93OiAwIDAgMnB4IDAgIzJmMmYzOTMzO1xuICB9XG5cbiAgLmV4cG9uYS1oZWFkZXItY2xvc2UtYnRuOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiAjNGE0YjU3O1xuICB9XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQXNrIEV4cG9uYSBDaGF0IEludGVyZmFjZVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4uZXhwb25hLWNoYXQtaW50ZXJmYWNlIHtcbiAgZmxleDogMTtcbiAgbWluLWhlaWdodDogMDsgLyogbGV0cyBmbGV4IGNoaWxkIHNocmluayBhbmQgc2Nyb2xsICovXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHdpZHRoOiAxMDAlO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcGFkZGluZy1ib3R0b206IDgwcHg7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBhZGRpbmctdG9wOiAzMHB4O1xufVxuXG4uZXhwb25hLWNoYXQtaW50ZXJmYWNlIC5jaGF0LWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGdyaWQ7XG4gIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDQwcHggMWZyO1xuICBhbGlnbi1jb250ZW50OiBzdGFydDtcbiAgd2lkdGg6IDEwMCU7XG5cbiAgLyogQWxzbyBjYXJyaWVzIC5jdXN0b20tY29udGFpbmVyIChjc3MvY3VzdG9tLmNzcyksIHdoaWNoIHNldHMgaXRzIG93blxuICAgICBtYXgtd2lkdGgg4oCUIG92ZXJyaWRlIGl0IHNvIHRoZSBib3ggYmVsb3cgY2FuIGFjdHVhbGx5IHJlYWNoIDEwMCUuICovXG4gIG1heC13aWR0aDogbm9uZTtcblxuICAvKiBGdWxsLXdpZHRoIHNjcm9sbCBib3ggKG5vdCBtYXgtd2lkdGggKyBtYXJnaW4gYXV0bykgc28gaXRzIG93blxuICAgICBzY3JvbGxiYXIgcmlkZXMgdGhlIHRydWUgcmlnaHQgZWRnZSBvZiB0aGUgdmlld3BvcnQsIGxpa2UgdGhlIGJvZHlcbiAgICAgc2Nyb2xsYmFyIOKAlCB0aGUgMTA3NnB4IGNvbnRlbnQgY29sdW1uIGlzIGNlbnRlcmVkIHZpYSBwYWRkaW5nIGluc3RlYWQuXG4gICAgIGZsZXg6IDEgKyBtaW4taGVpZ2h0OiAwIChubyBtYXgtaGVpZ2h0KSBsZXRzIGl0IGZpbGwgYWxsIHRoZSB2ZXJ0aWNhbFxuICAgICBzcGFjZSAuZXhwb25hLWNoYXQtaW50ZXJmYWNlIGhhcyBhdmFpbGFibGUsIHNvIHRoZSBzY3JvbGxiYXIgYWxzb1xuICAgICBzcGFucyB0aGF0IGZ1bGwgaGVpZ2h0IHJhdGhlciB0aGFuIGEgc2hvcnRlciBmaXhlZCBib3guICovXG4gIHBhZGRpbmc6IDAgbWF4KDIwcHgsIGNhbGMoKDEwMCUgLSAxMDc2cHgpIC8gMikpIDI0cHg7XG4gIG1hcmdpbjogMCBhdXRvO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHJvdy1nYXA6IDYwcHg7XG4gIGZsZXg6IDE7XG4gIG1pbi1oZWlnaHQ6IDA7XG4gIG92ZXJmbG93OiBoaWRkZW4gYXV0bztcbiAgc2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlO1xufVxuXG4vKiBDdXN0b20gU2Nyb2xsYmFyIGZvciBDaGF0IENvbnRhaW5lciAqL1xuLmV4cG9uYS1jaGF0LWludGVyZmFjZSAuY2hhdC1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgd2lkdGg6IDZweDtcbn1cblxuLmV4cG9uYS1jaGF0LWludGVyZmFjZSAuY2hhdC1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG59XG5cbi5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLmNoYXQtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gIGJhY2tncm91bmQ6IHJnYigyNTUsIDI1NSwgMjU1LCAuMik7XG4gIGJvcmRlci1yYWRpdXM6IDRweDtcbn1cblxuLmV4cG9uYS1jaGF0LWludGVyZmFjZSAuY2hhdC1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogcmdiKDI1NSwgMjU1LCAyNTUsIC40KTtcbn1cblxuLyogQ2hhdCB0aW1lbGluZSBsaW5lIOKAlCB0d28gcHVyZS1DU1MgbGF5ZXJzLCBubyBKUyBtZWFzdXJlbWVudDpcbiAgIDEuIEJhc2VsaW5lIG9uIHRoZSBjb250YWluZXI6IGZ1bGwgdmlzaWJsZSBoZWlnaHQgZnJvbSB0aGUgdmVyeSBzdGFydC5cbiAgIDIuIE5vZGUgc2VnbWVudHM6IGxpdmUgaW5zaWRlIHRoZSBzY3JvbGxlZCBjb250ZW50LCBzbyB0aGUgbGluZSBrZWVwc1xuICAgICAgY292ZXJpbmcgcm93cyB0aGF0IGdyb3cgcGFzdCB0aGUgZmlyc3Qgdmlld3BvcnQgKHN0cmVhbWVkIGFuc3dlcnMpLlxuICAgQm90aCBsYXllcnMgdXNlIHRoZSBTQU1FIHByZS1ibGVuZGVkIHNvbGlkIGNvbG9yIOKAlCAjZmZkMGQ4IGF0IDIwJSBhbHBoYVxuICAgZmxhdHRlbmVkIG92ZXIgdGhlIGRyb3Bkb3duIGJnICMzNzM3NDIg4oCUIHNvIG92ZXJsYXBzIGRvbid0IGJyaWdodGVuLiAqL1xuLmV4cG9uYS1jaGF0LWludGVyZmFjZSAuY2hhdC1jb250YWluZXI6OmJlZm9yZSB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAwO1xuICBsZWZ0OiA1MCU7XG4gIHdpZHRoOiAxcHg7XG4gIGhlaWdodDogY2FsYygxMDAlIC0gNHB4KTsgLyogZnVsbCB2aXNpYmxlIGNoYXQgaGVpZ2h0LCBtaW51cyB0aGUgNHB4IG9mZnNldCAqL1xuICBiYWNrZ3JvdW5kOiByZ2IoOTUsIDg2LCA5Nik7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIDRweCk7XG59XG5cbi8qIFBlci1yb3cgc2VnbWVudCA9IG93biByb3cgKyByb3ctZ2FwLCBqb2luaW5nIHNlYW1sZXNzbHkgd2l0aCB0aGUgbmV4dCBub2RlICovXG4uZXhwb25hLWNoYXQtaW50ZXJmYWNlIC5jaGF0LW5vZGUtY2VudGVyOjpiZWZvcmUge1xuICBjb250ZW50OiBcIlwiO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogNHB4O1xuICBsZWZ0OiAyMHB4O1xuICB6LWluZGV4OiAtMTsgLyogYmVoaW5kIHRoZSBub2RlIGljb24sIGluc2lkZSB0aGUgY2VsbCdzIHN0YWNraW5nIGNvbnRleHQgKi9cbiAgd2lkdGg6IDFweDtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgKyA2MHB4KTsgLyogcm93IGhlaWdodCArIGRlc2t0b3Agcm93LWdhcCAqL1xuICBiYWNrZ3JvdW5kOiByZ2IoOTUsIDg2LCA5Nik7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbn1cblxuLyogTGFzdCBub2RlIG9mIHRoZSBjaGF0OiBlbmQgdGhlIGxpbmUgYXQgdGhlIGJvdHRvbSBvZiBpdHMgb3duIHJvdyAqL1xuLmV4cG9uYS1jaGF0LWludGVyZmFjZSAuY2hhdC1ub2RlLWNlbnRlcjpudGgtbGFzdC1jaGlsZCgyKTo6YmVmb3JlIHtcbiAgaGVpZ2h0OiBjYWxjKDEwMCUgLSA0cHgpO1xufVxuXG4uZXhwb25hLWNoYXQtaW50ZXJmYWNlIC5jaGF0LW1lc3NhZ2UtbGVmdCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIHBhZGRpbmctcmlnaHQ6IDIwcHg7XG59XG5cbi5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLmNoYXQtbWVzc2FnZS1yaWdodCB7XG4gIHRleHQtYWxpZ246IGxlZnQ7XG4gIHBhZGRpbmctbGVmdDogMjBweDtcbn1cblxuLmV4cG9uYS1jaGF0LWludGVyZmFjZSAuY2hhdC1ub2RlLWNlbnRlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogYW5jaG9yIGZvciB0aGUgOjpiZWZvcmUgbGluZSBzZWdtZW50ICovXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgei1pbmRleDogMTtcbn1cblxuLmV4cG9uYS1jaGF0LWludGVyZmFjZSAubm9kZS1pY29uIHtcbiAgd2lkdGg6IDEycHg7XG4gIGhlaWdodDogMTJweDtcbiAgbWFyZ2luLXRvcDogNHB4O1xuICBtYXJnaW4tbGVmdDogMDtcbn1cblxuLmV4cG9uYS1jaGF0LWludGVyZmFjZSAubm9kZS1pY29uLmVtcHR5IHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2ZmZDBkODtcbiAgYmFja2dyb3VuZDogIzM3Mzc0Mjtcbn1cblxuLmV4cG9uYS1jaGF0LWludGVyZmFjZSAubm9kZS1pY29uLmZpbGxlZCB7XG4gIGJhY2tncm91bmQ6ICNmZmQwZDg7IC8qIFBpbmtpc2ggY29sb3IgbWF0Y2hpbmcgdGhlIHRoZW1lICovXG59XG5cbi5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLmNoYXQtbWV0YSB7XG4gIGNvbG9yOiAjZmZkMGQ4O1xuICBmb250LXNpemU6IDExcHg7XG4gIGxldHRlci1zcGFjaW5nOiAxcHg7XG4gIG1hcmdpbi1ib3R0b206IDEycHg7XG4gIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG59XG5cbi5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLmNoYXQtdGV4dCB7XG4gIGNvbG9yOiAjZmZmO1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xuICBmb250LXdlaWdodDogMzAwO1xuICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gIC5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLmNoYXQtdGV4dCB7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyMnB4O1xuICB9XG59XG5cbi5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLmV4cG9uYS1hbnN3ZXItd3JhcHBlciAuY2hhdC10ZXh0IHtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbn1cblxuLmV4cG9uYS1jaGF0LWludGVyZmFjZSAuZXhwb25hLWFuc3dlci13cmFwcGVyIC5jaGF0LXRleHQgYSB7XG4gIGNvbG9yOiAjZmZkMGQ4O1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLmV4cG9uYS1jaGF0LWludGVyZmFjZSAudHlwaW5nLWluZGljYXRvciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogNnB4O1xuICBtYXJnaW4tdG9wOiA2cHg7XG59XG5cbi5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLnR5cGluZy1pbmRpY2F0b3Igc3BhbiB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogNnB4O1xuICBoZWlnaHQ6IDZweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZDBkODtcbiAgYW5pbWF0aW9uOiB0eXBpbmctYm91bmNlIDEuNHMgaW5maW5pdGUgZWFzZS1pbi1vdXQgYm90aDtcbn1cblxuLmV4cG9uYS1jaGF0LWludGVyZmFjZSAudHlwaW5nLWluZGljYXRvciBzcGFuOm50aC1jaGlsZCgxKSB7XG4gIGFuaW1hdGlvbi1kZWxheTogLS4zMnM7XG59XG5cbi5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLnR5cGluZy1pbmRpY2F0b3Igc3BhbjpudGgtY2hpbGQoMikge1xuICBhbmltYXRpb24tZGVsYXk6IC0uMTZzO1xufVxuXG5Aa2V5ZnJhbWVzIHR5cGluZy1ib3VuY2Uge1xuICAwJSxcbiAgODAlLFxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKC41KTtcbiAgICBvcGFjaXR5OiAuMztcbiAgfVxuXG4gIDQwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG59XG5cbi8qIC5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLmV4cG9uYS1hbnN3ZXItd3JhcHBlciB7XG4gIG1heC1oZWlnaHQ6IDQwdmg7XG4gIG92ZXJmbG93LXk6IGF1dG87XG4gIHBhZGRpbmctcmlnaHQ6IDE2cHg7XG59XG5cbi5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLmV4cG9uYS1hbnN3ZXItd3JhcHBlcjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogNnB4O1xufVxuLmV4cG9uYS1jaGF0LWludGVyZmFjZSAuZXhwb25hLWFuc3dlci13cmFwcGVyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xufVxuLmV4cG9uYS1jaGF0LWludGVyZmFjZSAuZXhwb25hLWFuc3dlci13cmFwcGVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuLmV4cG9uYS1jaGF0LWludGVyZmFjZSAuZXhwb25hLWFuc3dlci13cmFwcGVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7XG4gIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC40KTtcbn0gKi9cblxuLmV4cG9uYS1jaGF0LWludGVyZmFjZSAuYW5zd2VyLWFjdGlvbnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDE2cHg7XG4gIG1hcmdpbi10b3A6IDIwcHg7XG59XG5cbi5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLmFuc3dlci1hY3Rpb24tYnRuIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHdpZHRoOiAyNHB4O1xuICBoZWlnaHQ6IDI0cHg7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgb3BhY2l0eTogLjQ1O1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IC4ycyBlYXNlO1xufVxuXG4uZXhwb25hLWNoYXQtaW50ZXJmYWNlIC5hbnN3ZXItYWN0aW9uLWJ0bjpob3ZlciB7XG4gIG9wYWNpdHk6IDE7XG59XG5cbi5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLmFjdGlvbi1pY29uIHtcbiAgd2lkdGg6IDI0cHg7XG4gIGhlaWdodDogMjRweDtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLmNoYXQtZm9vdGVyLWhpbnQge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogODBweDtcbiAgbGVmdDogNTAlO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7XG4gIGNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSwgLjUpO1xuICBmb250LXNpemU6IDE4cHg7XG4gIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICBmb250LXdlaWdodDogMzAwO1xufVxuXG4uZXhwb25hLWNoYXQtaW50ZXJmYWNlIC5oaW50LW1vYmlsZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLm5ldy1xdWVzdGlvbi13cmFwcGVyIHtcblxuICAvKiBkaXNwbGF5OiBpbmxpbmUtZmxleDsgKi9cblxuICAvKiBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyAqL1xuXG4gIC8qIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OyAqL1xuICBtYXgtd2lkdGg6IDEwMCU7XG5cbiAgLyogUGxheXMgYXV0b21hdGljYWxseSB0aGUgbW9tZW50IHRoZSByb3cgaXMgaW5qZWN0ZWQgaW50byB0aGUgY2hhdCwgc28gdGhlXG4gICAgIGlucHV0IG5ldmVyIGZsYXNoZXMgaW4gYXQgZnVsbCBvcGFjaXR5IGJlZm9yZSBKUyBjYW4gY2xhc3MgaXQuIFRoZVxuICAgICB0ZXh0YXJlYSBhbmQgcmV0dXJuIGJ1dHRvbiB0aGVuIHN0YWdnZXIgaW4gb24gdG9wIG9mIHRoaXMgKHNlZSBiZWxvdykuICovXG4gIGFuaW1hdGlvbjogbmV3LXF1ZXN0aW9uLWluIC42cyBjdWJpYy1iZXppZXIoLjE2LCAxLCAuMywgMSkgYm90aDtcbiAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybSwgb3BhY2l0eSwgZmlsdGVyO1xufVxuXG5Aa2V5ZnJhbWVzIG5ldy1xdWVzdGlvbi1pbiB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAyMnB4LCAwKSBzY2FsZTNkKC45NiwgLjk2LCAxKTtcbiAgICBmaWx0ZXI6IGJsdXIoOHB4KTtcbiAgfVxuXG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCkgc2NhbGUzZCgxLCAxLCAxKTtcbiAgICBmaWx0ZXI6IGJsdXIoMCk7XG4gIH1cbn1cblxuLyogU3RhZ2dlcmVkIGNoaWxkcmVuIOKAlCBlYWNoIGxpZnRzIGluIGp1c3QgYmVoaW5kIHRoZSB3cmFwcGVyIGl0c2VsZi4gKi9cbkBrZXlmcmFtZXMgbmV3LXF1ZXN0aW9uLWNoaWxkLWluIHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDEwcHgsIDApO1xuICB9XG5cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgfVxufVxuXG4uZXhwb25hLWNoYXQtaW50ZXJmYWNlIC5uZXctcXVlc3Rpb24taW5wdXQge1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBvdXRsaW5lOiBub25lO1xuICBjb2xvcjogI2ZmZjtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBmb250LXdlaWdodDogMzAwO1xuICBsaW5lLWhlaWdodDogMS41O1xuICB3aWR0aDogMTAwJTtcbiAgbWluLXdpZHRoOiAyNTBweDtcbiAgcmVzaXplOiBub25lO1xuICBvdmVyZmxvdy15OiBhdXRvO1xuICBmb250LWZhbWlseTogdmFyKC0tZm9udC1wcmltYXJ5LCBcIkxleGVuZFwiLCBzYW5zLXNlcmlmKTtcbiAgYW5pbWF0aW9uOiBuZXctcXVlc3Rpb24tY2hpbGQtaW4gLjVzIGN1YmljLWJlemllciguMTYsIDEsIC4zLCAxKSAuMTJzIGJvdGg7XG5cbiAgLyogaGVpZ2h0OiAyOHB4O1xuICBtYXgtaGVpZ2h0OiAxMjBweDtcbiAgcGFkZGluZy1yaWdodDogMTJweDsgKi9cbn1cblxuLyogQ3VzdG9tIFNjcm9sbGJhciBmb3IgTmV3IFF1ZXN0aW9uIElucHV0ICovXG4uZXhwb25hLWNoYXQtaW50ZXJmYWNlIC5uZXctcXVlc3Rpb24taW5wdXQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgd2lkdGg6IDZweDtcbn1cblxuLmV4cG9uYS1jaGF0LWludGVyZmFjZSAubmV3LXF1ZXN0aW9uLWlucHV0Ojotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xufVxuXG4uZXhwb25hLWNoYXQtaW50ZXJmYWNlIC5uZXctcXVlc3Rpb24taW5wdXQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHtcbiAgYmFja2dyb3VuZDogcmdiKDI1NSwgMjU1LCAyNTUsIC4yKTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuXG4uZXhwb25hLWNoYXQtaW50ZXJmYWNlIC5uZXctcXVlc3Rpb24taW5wdXQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogcmdiKDI1NSwgMjU1LCAyNTUsIC40KTtcbn1cblxuLmV4cG9uYS1jaGF0LWludGVyZmFjZSAubmV3LXF1ZXN0aW9uLXJldHVybiB7XG4gIG1hcmdpbjogMTJweCAwIDAgIWltcG9ydGFudDtcblxuICAvKiBQbGFpbiBgb3BhY2l0eTogMWAgKG5vdCAhaW1wb3J0YW50KSBzdGlsbCBiZWF0cyAucHJlc3MtcmV0dXJuLWNvbnRhaW5lcidzXG4gICAgIGBvcGFjaXR5OiAwYCBvbiBzcGVjaWZpY2l0eSDigJQgYW5kIHVubGlrZSAhaW1wb3J0YW50IGl0IGxldHMgdGhlIGtleWZyYW1lc1xuICAgICBiZWxvdyBhY3R1YWxseSBkcml2ZSB0aGUgZmFkZS4gKi9cbiAgb3BhY2l0eTogMTtcbiAgYW5pbWF0aW9uOiBuZXctcXVlc3Rpb24tY2hpbGQtaW4gLjVzIGN1YmljLWJlemllciguMTYsIDEsIC4zLCAxKSAuMjZzIGJvdGg7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAuZXhwb25hLWNoYXQtaW50ZXJmYWNlIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMDtcbiAgfVxuXG4gIC5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLmNoYXQtY29udGFpbmVyIHtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDMwcHggMWZyO1xuICAgIGdyaWQtYXV0by1mbG93OiBkZW5zZTtcbiAgICByb3ctZ2FwOiA0MHB4O1xuICB9XG5cbiAgLmV4cG9uYS1jaGF0LWludGVyZmFjZSAuZXhwb25hLWFuc3dlci13cmFwcGVyIHtcbiAgICBtYXgtaGVpZ2h0OiBub25lO1xuICB9XG5cbiAgLyogQmFzZWxpbmU6IGNvbnRhaW5lciBwYWRkaW5nLWxlZnQgMjBweCArIGljb24gYXhpcyA2cHggaW5zaWRlIHRoZSBub2RlIGNlbGwgKi9cbiAgLmV4cG9uYS1jaGF0LWludGVyZmFjZSAuY2hhdC1jb250YWluZXI6OmJlZm9yZSB7XG4gICAgbGVmdDogMjZweDtcbiAgfVxuXG4gIC5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLmNoYXQtbm9kZS1jZW50ZXI6OmJlZm9yZSB7XG4gICAgbGVmdDogNnB4OyAvKiBhbGlnbiB3aXRoIHRoZSBhYnNvbHV0ZWx5IHBvc2l0aW9uZWQgbm9kZSBpY29uICovXG4gICAgaGVpZ2h0OiBjYWxjKDEwMCUgKyA0MHB4KTsgLyogcm93IGhlaWdodCArIG1vYmlsZSByb3ctZ2FwICovXG4gIH1cblxuICAuZXhwb25hLWNoYXQtaW50ZXJmYWNlIC5jaGF0LW1lc3NhZ2UtbGVmdCxcbiAgLmV4cG9uYS1jaGF0LWludGVyZmFjZSAuY2hhdC1tZXNzYWdlLXJpZ2h0IHtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAuZXhwb25hLWNoYXQtaW50ZXJmYWNlIC5jaGF0LW5vZGUtY2VudGVyIHtcbiAgICBncmlkLWNvbHVtbjogMTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICB9XG5cbiAgLmV4cG9uYS1jaGF0LWludGVyZmFjZSAuY2hhdC1ub2RlLWNlbnRlciAubm9kZS1pY29uIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogNnB4O1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTtcbiAgfVxuXG4gIC5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLm5vZGUtaWNvbiB7XG4gICAgd2lkdGg6IDEycHg7XG4gICAgaGVpZ2h0OiAxMnB4O1xuICAgIG1hcmdpbi10b3A6IDRweDtcbiAgfVxuXG4gIC5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLm5vZGUtaWNvbi5lbXB0eSB7XG4gICAgYm9yZGVyOiAxcHggc29saWQgI2ZmZDBkODtcbiAgICBiYWNrZ3JvdW5kOiAjMzczNzQyO1xuICB9XG5cbiAgLmV4cG9uYS1jaGF0LWludGVyZmFjZSAuY2hhdC1jb2wtbm9kZSB7XG4gICAgZ3JpZC1jb2x1bW46IDE7XG4gIH1cblxuICAuZXhwb25hLWNoYXQtaW50ZXJmYWNlIC5jaGF0LWNvbC1jb250ZW50IHtcbiAgICBncmlkLWNvbHVtbjogMjtcbiAgfVxuXG4gIC5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLmNoYXQtY29sLWVtcHR5IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLmV4cG9uYS1jaGF0LWludGVyZmFjZSAuZXhwb25hLWFuc3dlci13cmFwcGVyIC5jaGF0LXRleHQge1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIH1cblxuICAuZXhwb25hLWNoYXQtaW50ZXJmYWNlIC5jaGF0LW1ldGEge1xuICAgIGNvbG9yOiAjZmZkMGQ4O1xuICAgIGZvbnQtc2l6ZTogMTJweDtcbiAgICBsaW5lLWhlaWdodDogMThweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMS44cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTtcbiAgfVxuXG4gIC5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLmNoYXQtZm9vdGVyLWhpbnQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBib3R0b206IGF1dG87XG4gICAgbGVmdDogYXV0bztcbiAgICB0cmFuc2Zvcm06IG5vbmU7XG4gICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgcGFkZGluZy1sZWZ0OiA0OHB4O1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsaW5lLWhlaWdodDogMjZweDtcbiAgfVxuXG4gIC5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLmhpbnQtZGVza3RvcCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIC5leHBvbmEtY2hhdC1pbnRlcmZhY2UgLmhpbnQtbW9iaWxlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gIH1cbn1cblxuLyogQXNrIEV4cG9uYSByZUNBUFRDSEEgSW5saW5lIENvbnRhaW5lciAqL1xuI2lubGluZS1jYXB0Y2hhLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIGZsZXg6IDE7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbiNpbmxpbmUtY2FwdGNoYS1jb250YWluZXIgLmNhcHRjaGEtZmFsbGJhY2sgcCB7XG4gIGNvbG9yOiByZ2IoMjU1LCAyNTUsIDI1NSwgLjcpO1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xufVxuXG4vKiBSZXNwb25zaXZlIEhhbWJ1cmdlciAmIE1vYmlsZSBNZW51IENvbnRhaW5lciAqL1xuLm1haW4taGVhZGVyIC5oYW1idXJnZXItYnRuIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgYm9yZGVyOiBub25lO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICB3aWR0aDogMjhweDtcbiAgaGVpZ2h0OiAyMHB4O1xuICBwYWRkaW5nOiAwO1xuICB6LWluZGV4OiAxMDAyOyAvKiBBYm92ZSB0aGUgbW9iaWxlIG1lbnUgY29udGFpbmVyICovXG59XG5cbi5oYW1idXJnZXItbGluZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAycHg7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7XG4gIHRyYW5zaXRpb246IGFsbCAuM3MgZWFzZTtcbn1cblxuLmhhbWJ1cmdlci1saW5lOm50aC1jaGlsZCgzKSB7XG4gIHdpZHRoOiA4MCU7XG59XG5cbi8qIENoYW5nZSBoYW1idXJnZXIgY29sb3Igd2hlbiBoZWFkZXIgaXMgZGFyayAqL1xuLm1haW4taGVhZGVyOmlzKC5oZWFkZXItZGFyaywgLm1lZ2EtbWVudS1vcGVuKSAuaGFtYnVyZ2VyLWxpbmUge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmO1xufVxuXG4vKiBPcGVuIHN0YXRlIGZvciBoYW1idXJnZXIgKi9cbi5tYWluLWhlYWRlciAuaGFtYnVyZ2VyLWJ0bi5vcGVuIC5oYW1idXJnZXItbGluZSB7XG4gIGJhY2tncm91bmQtY29sb3I6ICNmZmYgIWltcG9ydGFudDtcbn1cblxuLm1haW4taGVhZGVyIC5oYW1idXJnZXItYnRuLm9wZW4gLmhhbWJ1cmdlci1saW5lOm50aC1jaGlsZCgxKSB7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg5cHgpIHJvdGF0ZSg0NWRlZyk7XG59XG5cbi5tYWluLWhlYWRlciAuaGFtYnVyZ2VyLWJ0bi5vcGVuIC5oYW1idXJnZXItbGluZTpudGgtY2hpbGQoMikge1xuICBvcGFjaXR5OiAwO1xufVxuXG4ubWFpbi1oZWFkZXIgLmhhbWJ1cmdlci1idG4ub3BlbiAuaGFtYnVyZ2VyLWxpbmU6bnRoLWNoaWxkKDMpIHtcbiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC05cHgpIHJvdGF0ZSgtNDVkZWcpO1xufVxuXG4ubW9iaWxlLW1lbnUtY29udGFpbmVyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHdpZHRoOiAxMDAlO1xuXG4gIC8qIGR2aCB3aXRoIGEgdmggZmFsbGJhY2s6IG9uIG1vYmlsZSBicm93c2VycyAxMDB2aCBpcyB0aGUgTEFSR0Ugdmlld3BvcnQg4oCUXG4gICAgIHRoZSBoZWlnaHQgdGhlIHBhZ2UgaGFzIG9uY2UgdGhlIGFkZHJlc3MgYmFyIGhhcyByZXRyYWN0ZWQg4oCUIHNvIGEgZHJhd2VyXG4gICAgIHNpemVkIGluIHZoIHJ1bnMgdW5kZXIgdGhlIGJyb3dzZXIgY2hyb21lIGFuZCBpdHMgbGFzdCByb3dzIGFuZCBmb290ZXIgYXJlXG4gICAgIHVucmVhY2hhYmxlLCB3aGljaCBpcyB0aGUgZHJhd2VyIFwic2Nyb2xsaW5nIGRpZmZlcmVudGx5XCIgb24gYSBwaG9uZSB0aGFuIGluXG4gICAgIGEgbmFycm93IGRlc2t0b3Agd2luZG93LiBkdmggdHJhY2tzIHRoZSB2aWV3cG9ydCB0aGF0IGlzIGFjdHVhbGx5IHZpc2libGUuICovXG4gIGhlaWdodDogMTAwdmg7XG4gIC8qIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZSAqL1xuICBoZWlnaHQ6IDEwMGR2aDtcbiAgYmFja2dyb3VuZDogIzM3Mzc0MiB1cmwoXCIuLi8uLi8uLi9zdGF0aWMvYXNzZXRzL2ltYWdlcy9sYXRlc3QvZ3JhaW4ucG5nXCIpIGNlbnRlciBjZW50ZXI7XG4gIHotaW5kZXg6IDEwMDM7IC8qIEFib3ZlIGV2ZXJ5dGhpbmcgKi9cbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMTAwJSk7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHBhZGRpbmc6IDA7XG5cbiAgLyogVGhlIHNsaWRlIGlzIHRoZSB3aG9sZSBlZmZlY3Qg4oCUIG5vIG9wYWNpdHkgaW4gaXQuIGB0cmFuc2l0aW9uOiBhbGxgIHVzZWQgdG9cbiAgICAgZmFkZSB0aGUgcGFuZWwgb3V0IGF0IHRoZSBzYW1lIHRpbWUgYXMgaXQgbGVmdCwgc28gZm9yIHRoZSBlbnRpcmUgMC40cyBpdFxuICAgICB3YXMgYSBzZW1pLXRyYW5zcGFyZW50IHNoZWV0IHN0aWxsIGNvdmVyaW5nIHRoZSBzY3JlZW4gYW5kIHRoZSBwYWdlIHJlYWRcbiAgICAgc3RyYWlnaHQgdGhyb3VnaCBpdC4gQSBkcmF3ZXIgc2xpZGVzIGF3YXk7IGl0IGRvZXNuJ3QgZGlzc29sdmUuXG5cbiAgICAgdmlzaWJpbGl0eSBpbnN0ZWFkIG9mIG9wYWNpdHkgZm9yIHRoZSByZXN0aW5nIHN0YXRlLCBmbGlwcGVkIGF0IHRoZSBFTkQgb2ZcbiAgICAgdGhlIGNsb3NlIHNvIHRoZSBwYW5lbCBzdGF5cyBwYWludGVkIGZvciB0aGUgd2hvbGUgc2xpZGUg4oCUIGZsaXBwaW5nIGl0IG9uXG4gICAgIGZyYW1lIG9uZSB3b3VsZCB0YWtlIHRoZSBwYW5lbCBvZmYgc2NyZWVuIGJlZm9yZSB0aGUgc2xpZGUgY291bGQgYmUgc2Vlbi5cbiAgICAgSXQgYWxzbyBrZWVwcyB0aGUgcGFya2VkIHBhbmVsIG91dCBvZiB0aGUgYWNjZXNzaWJpbGl0eSB0cmVlIGFuZCBvdXQgb2ZcbiAgICAgdGhlIGxheW91dCdzIG92ZXJmbG93LCB3aGljaCBvcGFjaXR5OiAwIGFsb25lIHdvdWxkIG5vdC4gKi9cbiAgdHJhbnNpdGlvbjpcbiAgICB0cmFuc2Zvcm0gLjRzIGN1YmljLWJlemllciguNCwgMCwgLjIsIDEpLFxuICAgIHZpc2liaWxpdHkgMHMgbGluZWFyIC40cztcbn1cblxuLm1vYmlsZS1tZW51LWNvbnRhaW5lciAubW9iaWxlLW1lbnUtaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBwYWRkaW5nOiAyNHB4O1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiKDI1NSwgMjU1LCAyNTUsIC4xKTtcbn1cblxuLm1vYmlsZS1tZW51LWNvbnRhaW5lciAubW9iaWxlLWxvZ28taW1nIHtcbiAgaGVpZ2h0OiAyNHB4O1xuICB3aWR0aDogYXV0bztcbn1cblxuLm1vYmlsZS1tZW51LWNvbnRhaW5lciAubW9iaWxlLW1lbnUtYWN0aW9ucyB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGdhcDogMTZweDtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBMYW5ndWFnZSBQaWNrZXIg4oCUIE1vYmlsZSAoLm1vYmlsZS1tZW51LWNvbnRhaW5lcilcbiAgIEFsd2F5cyBkYXJrOyBubyBtZWRpYSBxdWVyeSBuZWVkZWQg4oCUIHRoZSBjb250YWluZXJcbiAgIGl0c2VsZiBpcyBtb2JpbGUtb25seSAoaGlkZGVuIG9uIGRlc2t0b3ApLlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4ubW9iaWxlLW1lbnUtY29udGFpbmVyIC5sYW5nLXBpY2tlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLm1vYmlsZS1tZW51LWNvbnRhaW5lciAubGFuZy1waWNrZXJfX3RyaWdnZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDEwcHg7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgcGFkZGluZzogNnB4IDEwcHg7XG4gIGNvbG9yOiAjZmZmO1xuICBib3JkZXI6IDA7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXByaW1hcnkpO1xuICBmb250LXNpemU6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGxpbmUtaGVpZ2h0OiAzMHB4O1xufVxuXG4ubW9iaWxlLW1lbnUtY29udGFpbmVyIC5sYW5nLXBpY2tlci5pcy1vcGVuIC5sYW5nLXBpY2tlcl9fdHJpZ2dlciB7XG4gIGJhY2tncm91bmQ6ICMyZjJmMzk7XG59XG5cbi5tb2JpbGUtbWVudS1jb250YWluZXIgLmxhbmctcGlja2VyX19nbG9iZSxcbi5tb2JpbGUtbWVudS1jb250YWluZXIgLmxhbmctcGlja2VyX19jYXJldCB7XG4gIGNvbG9yOiAjZmZmO1xuICBmbGV4LXNocmluazogMDtcbiAgdHJhbnNpdGlvbjogY29sb3IgLjJzIGVhc2U7XG59XG5cbi5tb2JpbGUtbWVudS1jb250YWluZXIgLmxhbmctcGlja2VyX190cmlnZ2VyOmhvdmVyIC5sYW5nLXBpY2tlcl9fZ2xvYmUsXG4ubW9iaWxlLW1lbnUtY29udGFpbmVyIC5sYW5nLXBpY2tlci5pcy1vcGVuIC5sYW5nLXBpY2tlcl9fZ2xvYmUge1xuICBjb2xvcjogI2VhMWIzZDtcbn1cblxuLm1vYmlsZS1tZW51LWNvbnRhaW5lciAubGFuZy1waWNrZXJfX2Ryb3Bkb3duIHtcbiAgZGlzcGxheTogbm9uZTtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDEwMCU7XG4gIHJpZ2h0OiAwO1xuICBiYWNrZ3JvdW5kOiAjMmYyZjM5O1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci10b3A6IG5vbmU7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHBhZGRpbmc6IDRweCA0cHggNnB4O1xuICBtaW4td2lkdGg6IDEwMCU7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIHotaW5kZXg6IDIwMDtcbn1cblxuLm1vYmlsZS1tZW51LWNvbnRhaW5lciAubGFuZy1waWNrZXIuaXMtb3BlbiAubGFuZy1waWNrZXJfX2Ryb3Bkb3duIHtcbiAgZGlzcGxheTogZmxleDtcbn1cblxuLm1vYmlsZS1tZW51LWNvbnRhaW5lciAubGFuZy1waWNrZXJfX29wdC5pcy1hY3RpdmUge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4ubW9iaWxlLW1lbnUtY29udGFpbmVyIC5sYW5nLXBpY2tlcl9fb3B0IHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiA4cHg7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGJvcmRlcjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwYWRkaW5nOiA3cHggMTBweDtcbiAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtcHJpbWFyeSk7XG4gIGZvbnQtc2l6ZTogMThweDtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgbGluZS1oZWlnaHQ6IDMwcHg7XG4gIGNvbG9yOiAjZmZmO1xuICB3aWR0aDogMTAwJTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbn1cblxuLm1vYmlsZS1tZW51LWNvbnRhaW5lciAubGFuZy1waWNrZXJfX29wdDo6YmVmb3JlIHtcbiAgY29udGVudDogXCJcIjtcbiAgd2lkdGg6IDEzcHg7XG4gIGhlaWdodDogMTNweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBib3JkZXI6IDEuNXB4IHNvbGlkIHJnYigyNTUsIDI1NSwgMjU1LCAuNCk7XG4gIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4ubW9iaWxlLW1lbnUtY29udGFpbmVyIC5sYW5nLXBpY2tlcl9fb3B0OmhvdmVyIHtcbiAgYmFja2dyb3VuZDogcmdiKDI1NSwgMjU1LCAyNTUsIC4wOCk7XG59XG5cbi5tb2JpbGUtbWVudS1jb250YWluZXIgLm1vYmlsZS1jbG9zZS1idG4ge1xuICBiYWNrZ3JvdW5kOiByZ2IoMjU1LCAyNTUsIDI1NSwgMCk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYigyNTUsIDI1NSwgMjU1LCAuMik7XG4gIGNvbG9yOiAjZmZmO1xuICB3aWR0aDogNDBweDtcbiAgaGVpZ2h0OiA0MHB4O1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICB0cmFuc2l0aW9uOiBhbGwgLjNzIGVhc2U7XG59XG5cbi5tb2JpbGUtbWVudS1jb250YWluZXIgLm1vYmlsZS1jbG9zZS1idG46aG92ZXIge1xuICBiYWNrZ3JvdW5kOiByZ2IoMjU1LCAyNTUsIDI1NSwgLjIpO1xufVxuXG4ubW9iaWxlLW1lbnUtY29udGFpbmVyLmFjdGl2ZSB7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgwKTtcblxuICAvKiBPcGVuaW5nOiBwYWludGVkIGZyb20gZnJhbWUgemVybyBzbyB0aGUgc2xpZGUtaW4gaXMgdmlzaWJsZSB0b28uICovXG4gIHRyYW5zaXRpb246XG4gICAgdHJhbnNmb3JtIC40cyBjdWJpYy1iZXppZXIoLjQsIDAsIC4yLCAxKSxcbiAgICB2aXNpYmlsaXR5IDBzIGxpbmVhciAwcztcbn1cblxuLyog4pSA4pSAIERyYXdlciBjb250ZW50IOKAlCBzZXR0bGVzIGluIGJlaGluZCB0aGUgc2xpZGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICBUaGUgcGFuZWwgYXJyaXZpbmcgYXMgb25lIHJpZ2lkIGJsb2NrIGlzIHdoYXQgbWFkZSBpdCBmZWVsIGZsYXQ6IGV2ZXJ5dGhpbmdcbiAgIGluc2lkZSB3YXMgYWxyZWFkeSBpbiBpdHMgZmluYWwgcG9zaXRpb24gYmVmb3JlIHRoZSBkcmF3ZXIgaGFkIGZpbmlzaGVkXG4gICBtb3ZpbmcsIHNvIHRoZXJlIHdhcyBub3RoaW5nIHRvIHdhdGNoIG9uY2UgaXQgbGFuZGVkLiBFYWNoIHJvdyBub3cgY2Fycmllc1xuICAgdGhlIGxhc3Qgb2YgdGhlIGRpc3RhbmNlIGl0c2VsZiwgZW50ZXJpbmcgZnJvbSB0aGUgc2FtZSBkaXJlY3Rpb24gdGhlIHBhbmVsXG4gICBjYW1lIGZyb20gYW5kIGxhbmRpbmcganVzdCBhZnRlciBpdCBkb2VzLlxuXG4gICBTYW1lIGNvbnN0cnVjdGlvbiBhcyB0aGUgbWVnYSBtZW51IGF0IHRoZSB0b3Agb2YgdGhpcyBmaWxlOiBib3RoIGRpcmVjdGlvbnNcbiAgIGFyZSBwbGFpbiB0cmFuc2l0aW9ucywgYW5kIGEgdHJhbnNpdGlvbiB0YWtlcyBpdHMgdGltaW5nIGZyb20gdGhlIHN0YXRlIGl0XG4gICBpcyBoZWFkaW5nIFRPV0FSRFMg4oCUIHNvIHRoZSBzdGFnZ2VyZWQgZW50cnkgZGVsYXlzIGxpdmUgb24gdGhlIC5hY3RpdmUgcnVsZXNcbiAgIGFuZCB0aGUgKGRlbGliZXJhdGVseSB1bmRlbGF5ZWQpIGV4aXQgbGl2ZXMgb24gdGhlIGJhc2UgcnVsZXMuIENsb3NpbmcgaXNcbiAgIHF1aWNrIGFuZCB1bnN0YWdnZXJlZCBvbiBwdXJwb3NlOiBvbiB0aGUgd2F5IG91dCB0aGUgZHJhd2VyIGl0c2VsZiBpcyB0aGVcbiAgIG1vdmVtZW50LCBhbmQgYSByZXZlcnNlZCBzdGFnZ2VyIHdvdWxkIGp1c3QgaG9sZCB0aGUgZXllIG9uIGEgcGFuZWwgdGhhdCBoYXNcbiAgIGFscmVhZHkgbGVmdC4gKi9cbi5tb2JpbGUtbWVudS1jb250YWluZXIgLm1vYmlsZS1tZW51LWhlYWRlcixcbi5tb2JpbGUtbWVudS1jb250YWluZXIgLm1vYmlsZS1uYXYtaXRlbSxcbi5tb2JpbGUtbWVudS1jb250YWluZXIgLm1vYmlsZS1tZW51LWZvb3RlciB7XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMThweCwgMCwgMCk7XG5cbiAgLyogQ2xvc2luZzogYWxsIHRvZ2V0aGVyLCBhbmQgZ29uZSBiZWZvcmUgdGhlIHBhbmVsIGlzLiAqL1xuICB0cmFuc2l0aW9uOlxuICAgIG9wYWNpdHkgLjE0cyBlYXNlIDBzLFxuICAgIHRyYW5zZm9ybSAuMTRzIGVhc2UgMHM7XG59XG5cbi5tb2JpbGUtbWVudS1jb250YWluZXIuYWN0aXZlIC5tb2JpbGUtbWVudS1oZWFkZXIsXG4ubW9iaWxlLW1lbnUtY29udGFpbmVyLmFjdGl2ZSAubW9iaWxlLW5hdi1pdGVtLFxuLm1vYmlsZS1tZW51LWNvbnRhaW5lci5hY3RpdmUgLm1vYmlsZS1tZW51LWZvb3RlciB7XG4gIG9wYWNpdHk6IDE7XG4gIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG5cbiAgLyogT3BlbmluZzogaGFuZ3MgYmFjayB1bnRpbCB0aGUgZHJhd2VyIGlzIG9uIGl0cyB3YXksIHRoZW4gZm9sbG93cyBpdCBpbi4gKi9cbiAgdHJhbnNpdGlvbjpcbiAgICBvcGFjaXR5IC4zNXMgZWFzZSAuMXMsXG4gICAgdHJhbnNmb3JtIC4zNXMgY3ViaWMtYmV6aWVyKC4xNiwgMSwgLjMsIDEpIC4xcztcbn1cblxuLyogVGhlIHN0YWdnZXIuIFdyaXR0ZW4gb3V0IHBlciBwb3NpdGlvbiBiZWNhdXNlIHRoaXMgaXMgcGxhaW4gQ1NTIHdpdGggbm8gbG9vcFxuICAgYXZhaWxhYmxlIOKAlCBlaWdodCBjb3ZlcnMgdGhlIG5hdiBjb21mb3J0YWJseSwgYW5kIGFueSBpdGVtIHBhc3QgdGhlIGVpZ2h0aFxuICAgc2ltcGx5IHNoYXJlcyB0aGUgbGFzdCBzdGVwIHJhdGhlciB0aGFuIGJyZWFraW5nLiAqL1xuLm1vYmlsZS1tZW51LWNvbnRhaW5lci5hY3RpdmUgLm1vYmlsZS1uYXYtaXRlbTpudGgtY2hpbGQoMSkgeyB0cmFuc2l0aW9uLWRlbGF5OiAuMTVzOyB9XG4ubW9iaWxlLW1lbnUtY29udGFpbmVyLmFjdGl2ZSAubW9iaWxlLW5hdi1pdGVtOm50aC1jaGlsZCgyKSB7IHRyYW5zaXRpb24tZGVsYXk6IC4yczsgfVxuLm1vYmlsZS1tZW51LWNvbnRhaW5lci5hY3RpdmUgLm1vYmlsZS1uYXYtaXRlbTpudGgtY2hpbGQoMykgeyB0cmFuc2l0aW9uLWRlbGF5OiAuMjVzOyB9XG4ubW9iaWxlLW1lbnUtY29udGFpbmVyLmFjdGl2ZSAubW9iaWxlLW5hdi1pdGVtOm50aC1jaGlsZCg0KSB7IHRyYW5zaXRpb24tZGVsYXk6IC4zczsgfVxuLm1vYmlsZS1tZW51LWNvbnRhaW5lci5hY3RpdmUgLm1vYmlsZS1uYXYtaXRlbTpudGgtY2hpbGQoNSkgeyB0cmFuc2l0aW9uLWRlbGF5OiAuMzVzOyB9XG4ubW9iaWxlLW1lbnUtY29udGFpbmVyLmFjdGl2ZSAubW9iaWxlLW5hdi1pdGVtOm50aC1jaGlsZCg2KSB7IHRyYW5zaXRpb24tZGVsYXk6IC40czsgfVxuLm1vYmlsZS1tZW51LWNvbnRhaW5lci5hY3RpdmUgLm1vYmlsZS1uYXYtaXRlbTpudGgtY2hpbGQoNykgeyB0cmFuc2l0aW9uLWRlbGF5OiAuNDVzOyB9XG4ubW9iaWxlLW1lbnUtY29udGFpbmVyLmFjdGl2ZSAubW9iaWxlLW5hdi1pdGVtOm50aC1jaGlsZChuICsgOCkgeyB0cmFuc2l0aW9uLWRlbGF5OiAuNXM7IH1cblxuLm1vYmlsZS1tZW51LWNvbnRhaW5lci5hY3RpdmUgLm1vYmlsZS1tZW51LWZvb3RlciB7XG4gIHRyYW5zaXRpb24tZGVsYXk6IC4zNHM7XG59XG5cbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XG4gIC5tb2JpbGUtbWVudS1jb250YWluZXIsXG4gIC5tb2JpbGUtbWVudS1jb250YWluZXIuYWN0aXZlLFxuICAubW9iaWxlLW1lbnUtY29udGFpbmVyIC5tb2JpbGUtbWVudS1oZWFkZXIsXG4gIC5tb2JpbGUtbWVudS1jb250YWluZXIgLm1vYmlsZS1uYXYtaXRlbSxcbiAgLm1vYmlsZS1tZW51LWNvbnRhaW5lciAubW9iaWxlLW1lbnUtZm9vdGVyLFxuICAubW9iaWxlLW1lbnUtY29udGFpbmVyLmFjdGl2ZSAubW9iaWxlLW1lbnUtaGVhZGVyLFxuICAubW9iaWxlLW1lbnUtY29udGFpbmVyLmFjdGl2ZSAubW9iaWxlLW5hdi1pdGVtLFxuICAubW9iaWxlLW1lbnUtY29udGFpbmVyLmFjdGl2ZSAubW9iaWxlLW1lbnUtZm9vdGVyIHtcbiAgICB0cmFuc2l0aW9uOiBub25lO1xuICAgIHRyYW5zaXRpb24tZGVsYXk6IDBzO1xuICB9XG59XG5cbi5tb2JpbGUtbWVudS1jb250YWluZXIgLm1vYmlsZS1tZW51LWlubmVyIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGZsZXg6IDE7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG5cbiAgLyogeCB0aGVuIHkuIFNjcm9sbGluZyBvbmx5IG9uIHk6IHRoZSByb3dzIGVudGVyIGZyb20gMThweCB0byB0aGUgcmlnaHQsIGFuZFxuICAgICBsZWF2aW5nIHggdG8gY29tcHV0ZSB0byBhdXRvICh3aGljaCBpdCB3b3VsZCBpZiBvbmx5IG92ZXJmbG93LXkgd2VyZSBzZXQpXG4gICAgIGlzIGVub3VnaCB0cmFuc2Zvcm0gb3ZlcmZsb3cgdG8gZmxhc2ggYSBob3Jpem9udGFsIHNjcm9sbGJhciBtaWQtYW5pbWF0aW9uLiAqL1xuICBvdmVyZmxvdzogaGlkZGVuIGF1dG87XG5cbiAgLyogU3RvcCBhdCB0aGlzIGxpc3QncyBvd24gZW5kcyBpbnN0ZWFkIG9mIGhhbmRpbmcgdGhlIGxlZnRvdmVyIHNjcm9sbCB0byB0aGVcbiAgICAgcGFnZSB1bmRlcm5lYXRoLiBUaGUgSlMgbG9jayAoanMvc2hhcmVkLmpzKSBpcyB3aGF0IG5vcm1hbGx5IHByZXZlbnRzIHRoYXQsXG4gICAgIGJ1dCBzY3JvbGwgY2hhaW5pbmcgaXMgYSBzZXBhcmF0ZSBtZWNoYW5pc20gZnJvbSBvdmVyZmxvdyDigJQgYW5kIG9uIGlPUyxcbiAgICAgd2hlcmUgb3ZlcmZsb3c6aGlkZGVuIG9uIHRoZSByb290IGlzIG5vdCBhIGRlcGVuZGFibGUgdG91Y2ggbG9jaywgY2hhaW5pbmdcbiAgICAgaXMgZXhhY3RseSBob3cgdGhlIHBhZ2UgZW5kcyB1cCBtb3ZpbmcgYmVoaW5kIGFuIG9wZW4gZHJhd2VyLiAqL1xuICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluO1xufVxuXG4ubW9iaWxlLW1lbnUtY29udGFpbmVyIC5tb2JpbGUtbWVudS1mb290ZXIge1xuICBwYWRkaW5nOiAyNHB4O1xuICBtYXJnaW4tdG9wOiBhdXRvO1xuICBtYXJnaW4tYm90dG9tOiA0MHB4O1xufVxuXG4ubW9iaWxlLW1lbnUtY29udGFpbmVyIC5tb2JpbGUtYm90dG9tLWNhcmQge1xuICBiYWNrZ3JvdW5kOiAjMmEyYTMyO1xuICBwYWRkaW5nOiAyNHB4O1xufVxuXG4ubW9iaWxlLW1lbnUtY29udGFpbmVyIC5tb2JpbGUtYm90dG9tLWNhcmQgcCB7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG5cbi5tb2JpbGUtbWVudS1jb250YWluZXIgLm1vYmlsZS1ib3R0b20tY2FyZCAuY3RhIHtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGxldHRlci1zcGFjaW5nOiAuNXB4O1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gIC5oZWFkZXItY29udGFpbmVyIC5uYXYtbWVudSxcbiAgLmhlYWRlci1jb250YWluZXIgLmN0YS1zZWN0aW9uIHtcbiAgICBkaXNwbGF5OiBub25lOyAvKiBIaWRlIGRlZmF1bHQgZGVza3RvcCBtZW51IG9uIHRhYmxldC9tb2JpbGUgKi9cbiAgfVxuXG4gIC5tYWluLWhlYWRlciAuaGFtYnVyZ2VyLWJ0biB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgfVxuXG4gIC5oYW1idXJnZXItYnRuLm9wZW4gLmhhbWJ1cmdlci1saW5lOm50aC1jaGlsZCgzKSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLyogTW9iaWxlIEFjY29yZGlvbiBNZW51IFN0eWxlcyAqL1xuLm1vYmlsZS1tZW51LWNvbnRhaW5lciAubW9iaWxlLW5hdi1saXN0IHtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xufVxuXG4ubW9iaWxlLW1lbnUtY29udGFpbmVyIC5tb2JpbGUtbmF2LWl0ZW0ge1xuICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiKDI1NSwgMjU1LCAyNTUsIC4wNSk7XG59XG5cbi5tb2JpbGUtbWVudS1jb250YWluZXIgLm1vYmlsZS1uYXYtaGVhZGVyIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiAyMHB4IDI0cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtc2l6ZTogMjRweDtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAuM3MgZWFzZTtcbn1cblxuLm1vYmlsZS1tZW51LWNvbnRhaW5lciAubW9iaWxlLW5hdi1pY29uIHtcbiAgZm9udC1zaXplOiAxNnB4O1xuICBjb2xvcjogcmdiKDI1NSwgMjU1LCAyNTUsIDEpO1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjNzIGVhc2U7XG59XG5cbi5tb2JpbGUtbWVudS1jb250YWluZXIgLm1vYmlsZS1uYXYtaXRlbS5hY3RpdmUgLm1vYmlsZS1uYXYtaWNvbiB7XG4gIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG59XG5cbi5tb2JpbGUtbWVudS1jb250YWluZXIgLm1vYmlsZS1uYXYtY29udGVudCB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBhZGRpbmc6IDEwcHggNDBweCAyMHB4O1xuICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiKDI1NSwgMjU1LCAyNTUsIC4xKTtcbn1cblxuLm1vYmlsZS1tZW51LWNvbnRhaW5lciAubW9iaWxlLXN1Ym1lbnUtZ3JvdXAge1xuICBtYXJnaW4tdG9wOiAyNHB4O1xufVxuXG4ubW9iaWxlLW1lbnUtY29udGFpbmVyIC5tb2JpbGUtc3VibWVudS1ncm91cDpmaXJzdC1jaGlsZCB7XG4gIG1hcmdpbi10b3A6IDEwcHg7XG59XG5cbi5tb2JpbGUtbWVudS1jb250YWluZXIgLm1vYmlsZS1zdWJtZW51LWhlYWRpbmcge1xuICBjb2xvcjogI2ZmZDBkODtcbiAgZm9udC1zaXplOiAxMnB4O1xuICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICBsZXR0ZXItc3BhY2luZzogMS41cHg7XG4gIG1hcmdpbi1ib3R0b206IDhweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLm1vYmlsZS1tZW51LWNvbnRhaW5lciAubW9iaWxlLXN1Ym1lbnUtbGlzdCB7XG4gIGxpc3Qtc3R5bGU6IG5vbmU7XG4gIHBhZGRpbmc6IDA7XG4gIG1hcmdpbjogMDtcbn1cblxuLm1vYmlsZS1tZW51LWNvbnRhaW5lciAubW9iaWxlLXN1Ym1lbnUtbGlzdCBsaSB7XG4gIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMjU1LCAyNTUsIDI1NSwgLjEpO1xufVxuXG4ubW9iaWxlLW1lbnUtY29udGFpbmVyIC5tb2JpbGUtc3VibWVudS1saXN0IGxpOmxhc3QtY2hpbGQge1xuICBib3JkZXItYm90dG9tOiBub25lO1xufVxuXG4ubW9iaWxlLW1lbnUtY29udGFpbmVyIC5tb2JpbGUtc3VibWVudS1saXN0IGEge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcGFkZGluZzogMTJweCAwO1xuICBjb2xvcjogI2ZmZjtcbiAgZm9udC1zaXplOiAxOHB4O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIHRyYW5zaXRpb246IGNvbG9yIC4zcyBlYXNlO1xufVxuXG4vKiBob3ZlcjogaG92ZXIgb25seSDigJQgb24gdG91Y2ggKGlQaG9uZS9TYWZhcmkpIDpob3ZlciBzdGlja3MgdG8gd2hhdGV2ZXIgc2l0c1xuICAgdW5kZXIgdGhlIGZpbmdlciBhbmQsIGFzIHRoZSBhY2NvcmRpb24gc2xpZGVzIG9wZW4gdW5kZXIgYSByZXN0aW5nIGZpbmdlcnRpcCxcbiAgIHdhbGtzIGRvd24gdGhlIGxpc3Qgb25lIGxpbmsgYXQgYSB0aW1lLiBXaXRoIGB0cmFuc2l0aW9uOiBjb2xvcmAgb24gdGhlIGJhc2VcbiAgIHJ1bGUgdGhhdCByZWFkcyBhcyBlYWNoIG9wdGlvbiBmbGFzaGluZyByZWQgb24gaXRzIG93biwgdW5wcm9tcHRlZC4gRGVza3RvcFxuICAgcG9pbnRlcnMgc3RpbGwgZ2V0IHRoZSBob3ZlciBjb2xvdXIuICovXG5AbWVkaWEgKGhvdmVyOiBob3Zlcikge1xuICAubW9iaWxlLW1lbnUtY29udGFpbmVyIC5tb2JpbGUtc3VibWVudS1saXN0IGE6aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQtcmVkKTtcbiAgfVxufVxuXG4vKiBUYXAgZmVlZGJhY2suIFRoZSBnbG9iYWwgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yIGlzIG9mZiAoY3NzL2N1c3RvbS5jc3MpLFxuICAgc28gYSB0YXAgb24gYSBzdWJtZW51IG9wdGlvbiBvdGhlcndpc2UgcmVnaXN0ZXJzIHdpdGggbm8gdmlzdWFsIGNvbmZpcm1hdGlvblxuICAgVGhlIG9wdGlvbiB0dXJucyByZWQgb24gcHJlc3NcbiAgICg6YWN0aXZlKSBhbmQgc3RheXMgcmVkIHVudGlsIHRoZSBuZXh0IHBhZ2UgbG9hZHMgKC5pcy1zZWxlY3RlZCwgc3RhbXBlZCBieVxuICAganMvc2hhcmVkLmpzKSBzbyB0aGUgdmlzaXRvciBjYW4gc2VlIHdoaWNoIGl0ZW0gdGhleSBwaWNrZWQuIE5vIGhpZ2hsaWdodFxuICAgYm94OyBhY2NvcmRpb24gaGVhZGVyIHJvd3MgYXJlIGxlZnQgYXMtaXMuICovXG4ubW9iaWxlLW1lbnUtY29udGFpbmVyIC5tb2JpbGUtc3VibWVudS1saXN0IGE6YWN0aXZlLFxuLm1vYmlsZS1tZW51LWNvbnRhaW5lciAubW9iaWxlLXN1Ym1lbnUtbGlzdCBhLmlzLXNlbGVjdGVkIHtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1yZWQpO1xuXG4gIC8qIFNuYXAgc3RyYWlnaHQgdG8gY3JpbXNvbiDigJQgdGhlIGJhc2UgcnVsZSdzIGB0cmFuc2l0aW9uOiBjb2xvciAwLjNzYCB3YXNcbiAgICAgYW5pbWF0aW5nIHdoaXRlIOKGkiByZWQgdGhyb3VnaCBpdHMgcGFsZSBtaWRwb2ludCwgYW5kIG9uIGEgcXVpY2sgdGFwICtcbiAgICAgcGFnZSBjaGFuZ2UgdGhhdCBwaW5raXNoIGluLWJldHdlZW4gZnJhbWUgd2FzIGFsbCB0aGUgdmlzaXRvciBzYXcgKFwibG9va3NcbiAgICAgcGVhY2hcIikuIEluc3RhbnQgb247IHRoZSBmYWRlLWJhY2sgdG8gd2hpdGUgd2hlbiB0aGUgY2xhc3MgY2xlYXJzIHN0aWxsXG4gICAgIHJpZGVzIHRoZSBiYXNlIHRyYW5zaXRpb24uICovXG4gIHRyYW5zaXRpb246IG5vbmU7XG59XG5cbi8qIExhbmd1YWdlIChoaWRlIG9sZCB0b2dnbGUgYXQgbW9iaWxlIOKAlCBsYW5nLXBpY2tlciBpcyBhbHdheXMgdmlzaWJsZSkgKi9cbi5tYWluLWhlYWRlciAubGFuZy10b2dnbGUsXG4ubW9iaWxlLW1lbnUtY29udGFpbmVyIC5sYW5nLXRvZ2dsZSB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIEV4cG9uYSBFeHBvcnQgTW9kYWwgU3R5bGVzICovXG5cbi8qIE9wZW4vY2xvc2UgaXMgZHJpdmVuIGVudGlyZWx5IGJ5IHRoZSAuaXMtb3BlbiBjbGFzcyDigJQgbm8gZGlzcGxheSB0b2dnbGluZyBpblxuICAgSlMsIHNvIHJlbW92aW5nIHRoZSBjbGFzcyByZXBsYXlzIHRoZSBzYW1lIGRpc3NvbHZlL3NjYWxlIGluIHJldmVyc2UuXG4gICBgdmlzaWJpbGl0eWAgaXMgd2hhdCBrZWVwcyB0aGUgY2xvc2VkIG1vZGFsIGluZXJ0OyBpdCBmbGlwcyBpbnN0YW50bHkgb24gb3BlblxuICAgYnV0IHdhaXRzIG91dCB0aGUgdHJhbnNpdGlvbiBvbiBjbG9zZSBzbyB0aGUgZXhpdCBzdGF5cyB2aXNpYmxlLiAqL1xuLmV4cG9uYS1leHBvcnQtbW9kYWwge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGluc2V0OiAwO1xuICB6LWluZGV4OiAyMDAxO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgcGFkZGluZzogMS41cmVtO1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzIGxpbmVhciAuNDVzO1xufVxuLmV4cG9uYS1leHBvcnQtbW9kYWwuaXMtb3BlbiB7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG4gIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzIGxpbmVhciAwcztcbn1cbi5leHBvbmEtZXhwb3J0LW1vZGFsX19iYWNrZHJvcCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgaW5zZXQ6IDA7XG4gIGJhY2tncm91bmQ6IHJnYmEoNDcsIDQ3LCA1NywgLjc1KTtcblxuICAvKiBGcm9zdHMgdGhlIHBhZ2UgYmVoaW5kIHRoZSBtb2RhbCBzbyBib2R5IGNvcHkgdW5kZXJuZWF0aCBpcyB1bnJlYWRhYmxlLlxuICAgICBCbHVycyBpbiBhbG9uZ3NpZGUgdGhlIHRpbnQgcmF0aGVyIHRoYW4gc25hcHBpbmcgb24uICovXG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cigwKSBzYXR1cmF0ZSgxMDAlKTtcbiAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoMCkgc2F0dXJhdGUoMTAwJSk7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgLjQ1cyBjdWJpYy1iZXppZXIoLjE2LCAxLCAuMywgMSksXG4gICAgYmFja2Ryb3AtZmlsdGVyIC40NXMgY3ViaWMtYmV6aWVyKC4xNiwgMSwgLjMsIDEpLFxuICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyIC40NXMgY3ViaWMtYmV6aWVyKC4xNiwgMSwgLjMsIDEpO1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIG9wYWNpdHk6IDA7XG59XG4uZXhwb25hLWV4cG9ydC1tb2RhbC5pcy1vcGVuIC5leHBvbmEtZXhwb3J0LW1vZGFsX19iYWNrZHJvcCB7XG4gIG9wYWNpdHk6IDE7XG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cig1cHgpIHNhdHVyYXRlKDEyMCUpO1xuICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cig1cHgpIHNhdHVyYXRlKDEyMCUpO1xufVxuLmV4cG9uYS1leHBvcnQtbW9kYWxfX2RpYWxvZyB7XG4gIGNsaXAtcGF0aDogcG9seWdvbigyNHB4IDAsIDEwMCUgMCwgMTAwJSBjYWxjKDEwMCUgLSAyNHB4KSwgY2FsYygxMDAlIC0gMjRweCkgMTAwJSwgMCAxMDAlLCAwIDI0cHgpO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXgtd2lkdGg6IDMyLjVyZW07XG4gIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAzcmVtKTtcbiAgcGFkZGluZzogM3JlbTtcbiAgYmFja2dyb3VuZDogI2ZmZjllZDtcbiAgb3ZlcmZsb3cteTogYXV0bztcbiAgb3BhY2l0eTogMDtcblxuICAvKiBDb2xsYXBzZWQgdG8gYSBzaW5nbGUgcG9pbnQgYXQgdGhlIGNlbnRyZSBvZiB0aGUgdmlld3BvcnQg4oCUIG9wZW5pbmcgZ3Jvd3NcbiAgICAgaXQgb3V0IGZyb20gdGhhdCBwb2ludCwgY2xvc2luZyBzd2FsbG93cyBpdCBiYWNrIGludG8gaXQuIFRoZSBibHVyIG1ha2VzXG4gICAgIGl0IHJlYWQgYXMgYSBkaXNzb2x2ZSByYXRoZXIgdGhhbiBhIHBsYWluIHJlc2l6ZS5cblxuICAgICBFYXNpbmcgaXMgZGVjbGFyZWQgcGVyIGRpcmVjdGlvbjogdGhpcyBydWxlIGlzIHdoYXQgcGxheXMgb24gQ0xPU0UgKGFcbiAgICAgcXVpY2sgYWNjZWxlcmF0aW5nIGNvbGxhcHNlKSwgLmlzLW9wZW4gYmVsb3cgaXMgd2hhdCBwbGF5cyBvbiBPUEVOLiBBXG4gICAgIHNwcmluZ3kgY3VydmUgaXMgb25seSBzYWZlIG9uIHRoZSB3YXkgb3V0IOKAlCByZXZlcnNpbmcgYW4gb3ZlcnNob290IGludG9cbiAgICAgc2NhbGUgMCB3b3VsZCBwdXNoIGl0IG5lZ2F0aXZlIGFuZCBmbGlwIHRoZSBkaWFsb2cgaW5zaWRlIG91dC4gKi9cbiAgdHJhbnNmb3JtOiBzY2FsZTNkKDAsIDAsIDEpO1xuICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyO1xuICBmaWx0ZXI6IGJsdXIoMTJweCk7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgLjRzIGN1YmljLWJlemllciguNCwgMCwgMSwgMSksXG4gICAgdHJhbnNmb3JtIC40cyBjdWJpYy1iZXppZXIoLjUsIDAsIC43NSwgMCksXG4gICAgZmlsdGVyIC40cyBjdWJpYy1iZXppZXIoLjQsIDAsIDEsIDEpO1xuICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtLCBvcGFjaXR5LCBmaWx0ZXI7XG59XG4uZXhwb25hLWV4cG9ydC1tb2RhbC5pcy1vcGVuIC5leHBvbmEtZXhwb3J0LW1vZGFsX19kaWFsb2cge1xuICBvcGFjaXR5OiAxO1xuICB0cmFuc2Zvcm06IHNjYWxlM2QoMSwgMSwgMSk7XG4gIGZpbHRlcjogYmx1cigwKTtcbiAgdHJhbnNpdGlvbjogb3BhY2l0eSAuNDVzIGN1YmljLWJlemllciguMTYsIDEsIC4zLCAxKSxcbiAgICB0cmFuc2Zvcm0gLjU1cyBjdWJpYy1iZXppZXIoLjM0LCAxLjU2LCAuNjQsIDEpLFxuICAgIGZpbHRlciAuNDVzIGN1YmljLWJlemllciguMTYsIDEsIC4zLCAxKTtcbn1cbi5leHBvbmEtZXhwb3J0LW1vZGFsX19jbG9zZSB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAxcmVtO1xuICByaWdodDogMXJlbTtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIHdpZHRoOiAycmVtO1xuICBoZWlnaHQ6IDJyZW07XG4gIHBhZGRpbmc6IDA7XG4gIGNvbG9yOiAjMzczNzQyO1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBib3JkZXI6IG5vbmU7XG4gIG9wYWNpdHk6IC43O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIHRyYW5zaXRpb246IG9wYWNpdHkgLjI1cyBlYXNlO1xufVxuLmV4cG9uYS1leHBvcnQtbW9kYWxfX2Nsb3NlIC5pYi1pY29uIHtcbiAgZmlsdGVyOiBicmlnaHRuZXNzKC4yNCk7XG59XG4uZXhwb25hLWV4cG9ydC1tb2RhbF9fY2xvc2U6aG92ZXIsIC5leHBvbmEtZXhwb3J0LW1vZGFsX19jbG9zZTpmb2N1cy12aXNpYmxlIHtcbiAgb3BhY2l0eTogMTtcbn1cbi5leHBvbmEtZXhwb3J0LW1vZGFsICNleHBvbmFFeHBvcnRUaXRsZSB7XG4gIGZvbnQtZmFtaWx5OiBcIkxleGVuZFwiLCAtYXBwbGUtc3lzdGVtLCBibGlua21hY3N5c3RlbWZvbnQsIFwiU2Vnb2UgVUlcIiwgcm9ib3RvLCBzYW5zLXNlcmlmO1xuICBmb250LXdlaWdodDogNTAwO1xuICBmb250LXNpemU6IG1heCgxLjVyZW0sIDEycHgpO1xuICBsaW5lLWhlaWdodDogMS40MTY2NjY2NjY3O1xuICBsZXR0ZXItc3BhY2luZzogLS4wNGVtO1xuICBtYXJnaW46IDAgMCAuNXJlbTtcbiAgcGFkZGluZy1yaWdodDogMi41cmVtO1xuICBjb2xvcjogIzM3Mzc0Mjtcbn1cbi5leHBvbmEtZXhwb3J0LW1vZGFsIHAge1xuICBmb250LWZhbWlseTogXCJMZXhlbmRcIiwgLWFwcGxlLXN5c3RlbSwgYmxpbmttYWNzeXN0ZW1mb250LCBcIlNlZ29lIFVJXCIsIHJvYm90bywgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgZm9udC1zaXplOiBtYXgoMXJlbSwgMTJweCk7XG4gIGxpbmUtaGVpZ2h0OiAxLjYyNTtcbiAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gIG1hcmdpbjogMDtcbiAgY29sb3I6ICM2NzY3NzU7XG59XG4uZXhwb25hLWV4cG9ydC1tb2RhbF9fbGFiZWwge1xuICBmb250LWZhbWlseTogXCJMZXhlbmRcIiwgLWFwcGxlLXN5c3RlbSwgYmxpbmttYWNzeXN0ZW1mb250LCBcIlNlZ29lIFVJXCIsIHJvYm90bywgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgZm9udC1zaXplOiBtYXgoMXJlbSwgMTJweCk7XG4gIGxpbmUtaGVpZ2h0OiAxLjYyNTtcbiAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBtYXJnaW46IDEuNXJlbSAwIC41cmVtO1xuICBjb2xvcjogIzM3Mzc0Mjtcbn1cbi5leHBvbmEtZXhwb3J0LW1vZGFsX19yZXF1aXJlZCB7XG4gIGNvbG9yOiAjMzczNzQyO1xufVxuLmV4cG9uYS1leHBvcnQtbW9kYWwgI2V4cG9uYUV4cG9ydEVtYWlsIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIHdpZHRoOiAxMDAlO1xuICBoZWlnaHQ6IDMuNXJlbTtcbiAgbWFyZ2luOiAwIDAgMnJlbTtcbiAgcGFkZGluZzogMXJlbTtcbiAgYmFja2dyb3VuZDogI2ZmZjtcbiAgYm9yZGVyOiAuNjNweCBzb2xpZCAjZTZlNmVkO1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBvdXRsaW5lOiBub25lO1xuICBmb250LWZhbWlseTogXCJMZXhlbmRcIiwgLWFwcGxlLXN5c3RlbSwgYmxpbmttYWNzeXN0ZW1mb250LCBcIlNlZ29lIFVJXCIsIHJvYm90bywgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgZm9udC1zaXplOiBtYXgoMXJlbSwgMTJweCk7XG4gIGxpbmUtaGVpZ2h0OiAxLjYyNTtcbiAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gIGNvbG9yOiAjMzczNzQyO1xuICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgLjI1cyBlYXNlO1xufVxuLmV4cG9uYS1leHBvcnQtbW9kYWwgI2V4cG9uYUV4cG9ydEVtYWlsOjpwbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjNjc2Nzc1O1xufVxuLmV4cG9uYS1leHBvcnQtbW9kYWwgI2V4cG9uYUV4cG9ydEVtYWlsOmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiAjMzczNzQyO1xufVxuLmV4cG9uYS1leHBvcnQtbW9kYWxfX2FjdGlvbnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDEuNXJlbTtcbn1cbi5leHBvbmEtZXhwb3J0LW1vZGFsX19hY3Rpb25zIC5jZWxsIHtcbiAgZmxleDogMCAwIGF1dG87XG59XG4uZXhwb25hLWV4cG9ydC1tb2RhbF9fYWN0aW9ucyAuaWItYnRuLS1wcmltYXJ5IHtcbiAgbWluLXdpZHRoOiA4Ljc1cmVtO1xufVxuLmV4cG9uYS1leHBvcnQtbW9kYWwgI2V4cG9uYUV4cG9ydExvYWRpbmdTdGF0ZSxcbi5leHBvbmEtZXhwb3J0LW1vZGFsICNleHBvbmFFeHBvcnRTdWNjZXNzU3RhdGUsXG4uZXhwb25hLWV4cG9ydC1tb2RhbCAjZXhwb25hRXhwb3J0RXJyb3JTdGF0ZSB7XG4gIHBhZGRpbmc6IDEuNXJlbSAwO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uZXhwb25hLWV4cG9ydC1tb2RhbCAjZXhwb25hRXhwb3J0TG9hZGluZ1N0YXRlIHAsXG4uZXhwb25hLWV4cG9ydC1tb2RhbCAjZXhwb25hRXhwb3J0U3VjY2Vzc1N0YXRlIHAsXG4uZXhwb25hLWV4cG9ydC1tb2RhbCAjZXhwb25hRXhwb3J0RXJyb3JTdGF0ZSBwIHtcbiAgZm9udC1mYW1pbHk6IFwiTGV4ZW5kXCIsIC1hcHBsZS1zeXN0ZW0sIGJsaW5rbWFjc3lzdGVtZm9udCwgXCJTZWdvZSBVSVwiLCByb2JvdG8sIHNhbnMtc2VyaWY7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGZvbnQtc2l6ZTogbWF4KDEuMTI1cmVtLCAxMnB4KTtcbiAgbGluZS1oZWlnaHQ6IDEuNjY2NjY2NjY2NztcbiAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gIGNvbG9yOiAjMzczNzQyO1xufVxuLmV4cG9uYS1leHBvcnQtbW9kYWwgI2V4cG9uYUV4cG9ydEVycm9yTXNnIHtcbiAgY29sb3I6ICNlYTFiM2Q7XG59XG4uZXhwb25hLWV4cG9ydC1tb2RhbCAjZXhwb25hRXhwb3J0UmV0cnkge1xuICBtYXJnaW4tdG9wOiAxcmVtO1xuICBwYWRkaW5nOiAwO1xuICBmb250LWZhbWlseTogXCJMZXhlbmRcIiwgLWFwcGxlLXN5c3RlbSwgYmxpbmttYWNzeXN0ZW1mb250LCBcIlNlZ29lIFVJXCIsIHJvYm90bywgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgZm9udC1zaXplOiBtYXgoLjg3NXJlbSwgMTJweCk7XG4gIGxpbmUtaGVpZ2h0OiAxLjU3MTQyODU3MTQ7XG4gIGxldHRlci1zcGFjaW5nOiAwO1xuICBjb2xvcjogI2VhMWIzZDtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgYm9yZGVyOiBub25lO1xuICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgdGV4dC11bmRlcmxpbmUtb2Zmc2V0OiA0cHg7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAuZXhwb25hLWV4cG9ydC1tb2RhbCB7XG4gICAgcGFkZGluZzogMXJlbTtcbiAgfVxuICAuZXhwb25hLWV4cG9ydC1tb2RhbF9fZGlhbG9nIHtcbiAgICBjbGlwLXBhdGg6IHBvbHlnb24oMjBweCAwLCAxMDAlIDAsIDEwMCUgY2FsYygxMDAlIC0gMjBweCksIGNhbGMoMTAwJSAtIDIwcHgpIDEwMCUsIDAgMTAwJSwgMCAyMHB4KTtcbiAgICBwYWRkaW5nOiAyLjVyZW0gMS41cmVtIDJyZW07XG4gIH1cbiAgLmV4cG9uYS1leHBvcnQtbW9kYWwgI2V4cG9uYUV4cG9ydFRpdGxlIHtcbiAgICBmb250LWZhbWlseTogXCJMZXhlbmRcIiwgLWFwcGxlLXN5c3RlbSwgYmxpbmttYWNzeXN0ZW1mb250LCBcIlNlZ29lIFVJXCIsIHJvYm90bywgc2Fucy1zZXJpZjtcbiAgICBmb250LXdlaWdodDogNDAwO1xuICAgIGZvbnQtc2l6ZTogbWF4KDEuMjVyZW0sIDEycHgpO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gIH1cbiAgLmV4cG9uYS1leHBvcnQtbW9kYWxfX2xhYmVsIHtcbiAgICBtYXJnaW4tdG9wOiAxcmVtO1xuICB9XG4gIC5leHBvbmEtZXhwb3J0LW1vZGFsICNleHBvbmFFeHBvcnRFbWFpbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMS41cmVtO1xuICB9XG4gIC5leHBvbmEtZXhwb3J0LW1vZGFsX19hY3Rpb25zIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uLXJldmVyc2U7XG4gICAgZ2FwOiAxcmVtO1xuICB9XG4gIC5leHBvbmEtZXhwb3J0LW1vZGFsX19hY3Rpb25zIC5jZWxsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG4gIC5leHBvbmEtZXhwb3J0LW1vZGFsX19hY3Rpb25zIC5pYi1idG4tLXByaW1hcnksXG4gIC5leHBvbmEtZXhwb3J0LW1vZGFsX19hY3Rpb25zIC5pYi1idG4tLXByaW1hcnkgLmliLWJ0bl9faW5uZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICB9XG59IiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAxMi4gRXhwb25hIEZvbGRcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuLmV4cG9uYS1mb290ZXItcGFyZW50LmNvbWJpbmVkLWZvbGQge1xuICBoZWlnaHQ6IGF1dG87XG4gIG1pbi1oZWlnaHQ6IDEwMHZoO1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgcGFkZGluZy10b3A6IDA7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmV4cG9uYS1mb290ZXItcGFyZW50IC5leHBvbmEtc2VjdGlvbiB7XG4gIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzIwMjEyYSAwJSwgIzIyMjQyYSAxMDAlKTtcbiAgY29sb3I6ICNmZmY7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLyogLmV4cG9uYS1mb290ZXItcGFyZW50IC5leHBvbmEtc2VjdGlvbjo6YmVmb3JlIHtcbiAgY29udGVudDogXCJcIjtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBpbnNldDogMDtcbiAgYmFja2dyb3VuZC1pbWFnZTogdXJsKC4uL2Fzc2V0cy9pbWFnZXMvZ3JhaW4ucG5nKTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdDtcbiAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgbWl4LWJsZW5kLW1vZGU6IG5vcm1hbDtcbiAgb3BhY2l0eTogMTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDI7XG59ICovXG4uZXhwb25hLWZvb3Rlci1wYXJlbnQgLmV4cG9uYS1jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIHdpZHRoOiAxMDAlO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuZXhwb25hLWNvbnRlbnQtbGVmdCB7XG4gIGZsZXg6IDE7XG4gIG1heC13aWR0aDogNzUycHg7XG4gIHBhZGRpbmctcmlnaHQ6IDQwcHg7XG4gIHotaW5kZXg6IDE7XG59XG5cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuZXhwb25hLWNvbnRlbnQtcmlnaHQge1xuXG4gIC8qIGZsZXg6IDE7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gIGhlaWdodDogODAlO1xuICAqL1xuICBoZWlnaHQ6IDYyNXB4O1xuXG4gIC8qIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgbGVmdDogMDtcbiAgYm90dG9tOiAtMjIwcHg7ICovXG59XG5cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuZXhwb25hLXZpZGVvIHtcblxuICAvKiB3aWR0aDogMTAwJTsgKi9cblxuICAvKiBtYXgtd2lkdGg6IDUwMHB4OyAgKi9cblxuICAvKiBoZWlnaHQ6IGF1dG87XG4gIG9iamVjdC1maXQ6IGNvbnRhaW47ICovXG5cbiAgLyogYm9yZGVyLXJhZGl1czogMjBweDsgKi9cbiAgcG9zaXRpb246IGFic29sdXRlO1xuICByaWdodDogMDtcbiAgYm90dG9tOiAtNDlweDtcbiAgYm9yZGVyOiAwO1xuICBvdXRsaW5lOiAwO1xuXG4gIC8qIEZhZGVzIHRoZSBsZWZ0L3JpZ2h0IGVkZ2VzIHRvIHRyYW5zcGFyZW50IHNvIHRoZSBzZWN0aW9uJ3MgZGFya1xuICAgICBiYWNrZ3JvdW5kIHNob3dzIHRocm91Z2ggaW5zdGVhZCBvZiBhIGhhcmQgdmlkZW8tcmVjdGFuZ2xlIHNlYW0uICovXG4gIG1hc2staW1hZ2U6IGxpbmVhci1ncmFkaWVudChcbiAgICB0byByaWdodCxcbiAgICB0cmFuc3BhcmVudCAwJSxcbiAgICAjMDAwIDEyJSxcbiAgICAjMDAwIDg4JSxcbiAgICB0cmFuc3BhcmVudCAxMDAlXG4gICk7XG4gIG1hc2stcmVwZWF0OiBuby1yZXBlYXQ7XG59XG5cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuZXhwb25hLXRpdGxlIHtcbiAgZm9udC1zaXplOiA1OXB4O1xuICBmb250LXdlaWdodDogMjAwO1xuICBtYXJnaW4tYm90dG9tOiAzMnB4O1xuICBsaW5lLWhlaWdodDogNzhweDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0yLjM2cHg7XG59XG5cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuZXhwb25hLXRpdGxlIHN0cm9uZyB7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG59XG5cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuZXhwb25hLWlucHV0LXdyYXBwZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHdpZHRoOiAxMDAlO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOWVkO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBwYWRkaW5nOiAwIDE2cHggMCAwO1xufVxuXG4uZXhwb25hLWZvb3Rlci1wYXJlbnQgLmV4cG9uYS1pbnB1dCB7XG4gIGZsZXg6IDE7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXI6IG5vbmU7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7XG4gIHBhZGRpbmc6IDE1cHggMTZweDtcbiAgbGluZS1oZWlnaHQ6IDM0cHg7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIG91dGxpbmU6IG5vbmU7XG59XG5cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuZXhwb25hLWlucHV0OjpwbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjMzczNzQyO1xufVxuXG4uZXhwb25hLWZvb3Rlci1wYXJlbnQgLmV4cG9uYS1zdWJtaXQge1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgYm9yZGVyOiBub25lO1xuICBjb2xvcjogdmFyKC0tYWNjZW50LXJlZCk7XG4gIGZvbnQtc2l6ZTogMjBweDtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwYWRkaW5nOiAxMHB4O1xuICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gLjNzIGVhc2U7XG59XG5cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuZXhwb25hLXN1Ym1pdDpob3ZlciB7XG4gIHRyYW5zZm9ybTogc2NhbGUoMS4xKTtcbn1cblxuLmV4cG9uYS1mb290ZXItcGFyZW50IC5leHBvbmEtaW5wdXQtYm9yZGVyIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICBib3R0b206IDA7XG4gIGxlZnQ6IDA7XG4gIGhlaWdodDogNHB4O1xuICB3aWR0aDogMTAwJTtcbiAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjMjg0Y2JhIDAlLCAjZWExYjNkIDEwMCUpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIDEzLiBGb290ZXIgRm9sZFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4uZXhwb25hLWZvb3Rlci1wYXJlbnQgLnNpdGUtZm9vdGVyIHtcbiAgd2lkdGg6IDEwMCU7XG5cbiAgLyogV2FzICMzNzM3NDIgKHRoZSBib2R5LXRleHQgY2hhcmNvYWwsIC0tdGV4dC1wcmltYXJ5KSDigJQgYSB2aXNpYmx5IGxpZ2h0ZXIsXG4gICAgIG1vcmUgcHVycGxlIGdyYXkgdGhhbiAuZXhwb25hLXNlY3Rpb24gZGlyZWN0bHkgYWJvdmUgaXQgKCMyMDIxMmEgZmFtaWx5KSxcbiAgICAgcHJvZHVjaW5nIGEgc2VhbSB3aGVyZSB0aGUgZm9sZCBjaGFuZ2VzIGNvbG9yLiAjMjAyMTJhIG1hdGNoZXMgdGhhdFxuICAgICBzZWN0aW9uIGFuZCBpcyB0aGUgXCJkZWVwZXN0IGRhcmssIHVzZWQgaW4gZm9vdGVyXCIgdG9uZSBkb2N1bWVudGVkIGluXG4gICAgIENMQVVERS5tZCdzIGNvbG9yIHRva2Vucy4gKi9cbiAgYmFja2dyb3VuZC1jb2xvcjogIzIwMjEyYTtcbiAgY29sb3I6ICNlNmU2ZWQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGZsZXg6IDE7XG4gIHBhZGRpbmc6IDA7XG4gIHRyYW5zaXRpb246XG4gICAgcGFkZGluZyAuNXMgZWFzZSxcbiAgICBiYWNrZ3JvdW5kLWNvbG9yIC41cyBlYXNlO1xufVxuXG4uZXhwb25hLWZvb3Rlci1wYXJlbnQgLnNpdGUtZm9vdGVyOjphZnRlciB7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgaW5zZXQ6IDA7XG5cbiAgLyogRml4ZWQgMjU2cHggdGlsZSwgTk9UIGdyYWluLnBuZyArIGBjb3ZlcmAuIGBjb3ZlcmAgc2NhbGVzIG9uZSBjb3B5IG9mIHRoZVxuICAgICBpbWFnZSB0byB0aGUgYm94LCBzbyBldmVyeSB0aW1lIHRoZSBmb290ZXIncyBoZWlnaHQgY2hhbmdlcyDigJQgYSBtb2JpbGVcbiAgICAgYWNjb3JkaW9uIHJvdyBvcGVuaW5nL2Nsb3Npbmcg4oCUIHRoZSBncmFpbiByZXNjYWxlcyBhbmQgdmlzaWJseSBkcmlmdHMuXG4gICAgIEEgbmF0aXZlLXNpemUgcmVwZWF0aW5nIHRpbGUgaXMgcGl4ZWwtbG9ja2VkIHRvIHRoZSB0b3AtbGVmdCBjb3JuZXIsIHNvIGl0XG4gICAgIGhvbGRzIHBlcmZlY3RseSBzdGlsbCB3aGlsZSB0aGUgZm9vdGVyIGdyb3dzLiBTYW1lIHN3YXAsIHNhbWUgcmVhc29uLCBhc1xuICAgICAuc24tY29udGVudC1zbGlkZXJfX3NsaWRlOjphZnRlciBhbmQgdGhlIG90aGVyIGdyYWluLXRpbGUgc2VjdGlvbnMuICovXG4gIGJhY2tncm91bmQtaW1hZ2U6IHVybChcIi4uLy4uLy4uL3N0YXRpYy9hc3NldHMvaW1hZ2VzL2xhdGVzdC9ncmFpbi10aWxlLnBuZ1wiKTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdDtcbiAgYmFja2dyb3VuZC1zaXplOiBhdXRvO1xuICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiB0b3AgbGVmdDtcbiAgbWl4LWJsZW5kLW1vZGU6IG5vcm1hbDtcbiAgb3BhY2l0eTogMTtcbiAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gIHotaW5kZXg6IDI7XG59XG5cbi8qIHNjcm9sbC1lbmQgXCJvcGVuIHVwXCIgZWZmZWN0IGlzIGRlc2t0b3Atb25seTsgbmV2ZXIgYXBwbGllcyBvbiBtb2JpbGUvdGFibGV0ICovXG5AbWVkaWEgKG1pbi13aWR0aDogMTAyNXB4KSB7XG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuc2l0ZS1mb290ZXIuc2Nyb2xsLWVuZCB7XG4gICAgcGFkZGluZy1sZWZ0OiA0MHB4ICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZy1yaWdodDogNDBweCAhaW1wb3J0YW50O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM3YzIyMzUgIWltcG9ydGFudDtcbiAgfVxuXG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuc2l0ZS1mb290ZXIuc2Nyb2xsLWVuZCAuZm9vdGVyLWJvdHRvbS1yZWQge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgIG9wYWNpdHkgLjVzIGVhc2UsXG4gICAgICB2aXNpYmlsaXR5IC41cyBlYXNlO1xuICAgIG1hcmdpbi1sZWZ0OiAtNDBweDtcbiAgICBtYXJnaW4tcmlnaHQ6IC00MHB4O1xuICAgIHdpZHRoOiBjYWxjKDEwMCUgKyA4MHB4KTtcbiAgfVxufVxuXG4uZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci10b3Age1xuICBmbGV4OiAxO1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMzczNzQyO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLWNvbnRhaW5lciB7XG4gIHdpZHRoOiAxMDAlO1xuICBwYWRkaW5nLXRvcDogNDBweDtcbiAgcGFkZGluZy1ib3R0b206IDExMnB4O1xufVxuXG4uZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1saW5rcy1ncmlkIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiAzMHB4O1xuICBtYXJnaW4tYm90dG9tOiAxMTJweDtcbiAgcGFkZGluZzogNjRweCAxMnB4O1xufVxuXG4vKiBEZXNrdG9wOiBhY2NvcmRpb24gaGVhZGVyIGlzIGxheW91dC10cmFuc3BhcmVudDsgaWNvbiBoaWRkZW4gKi9cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLWFjY29yZGlvbi1oZWFkZXIge1xuICBkaXNwbGF5OiBjb250ZW50cztcbn1cblxuLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItYWNjb3JkaW9uLWljb24ge1xuICBkaXNwbGF5OiBub25lO1xufVxuXG4uZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1yb3cge1xuICBkaXNwbGF5OiBmbGV4O1xuICB3aWR0aDogMTAwJTtcbn1cblxuLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItbGFiZWwge1xuICBmb250LXNpemU6IDE2cHg7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBmb250LXdlaWdodDogNTAwO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBwYWRkaW5nLXJpZ2h0OiAxMHB4O1xufVxuXG4uZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1kb3RzIHtcbiAgZmxleDogMTsgLyogbGVhZGVyIGFic29yYnMgdGhlIGxhYmVsLXdpZHRoIHZhcmlhdGlvbiBiZXR3ZWVuIHJvd3MgKi9cbiAgaGVpZ2h0OiAzcHg7XG4gIG1hcmdpbjogMTJweCAyMHB4IDEycHggMDtcbiAgYmFja2dyb3VuZC1pbWFnZTogcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudChcbiAgICB0byByaWdodCxcbiAgICAjZmZmOWVkIDAsXG4gICAgI2ZmZjllZCAzcHgsXG4gICAgdHJhbnNwYXJlbnQgM3B4LFxuICAgIHRyYW5zcGFyZW50IDE0cHhcbiAgKTtcbiAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDNweDtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbn1cblxuLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItbGlua3Mge1xuICBmbGV4OiAxO1xuICBmb250LXNpemU6IDE2cHg7XG4gIGNvbG9yOiAjZmZmO1xuICBmb250LXdlaWdodDogMzAwO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICBsaW5lLWhlaWdodDogMjRweDtcbiAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC13cmFwOiB3cmFwO1xuICBnYXA6IDhweDtcbiAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xufVxuXG4uZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1saW5rcyBhIHtcbiAgdHJhbnNpdGlvbjogY29sb3IgLjNzO1xuICBjb2xvcjogI2ZmZjtcbn1cblxuLyogaG92ZXI6IGhvdmVyIG9ubHkg4oCUIG9uIHRvdWNoIChpUGhvbmUvU2FmYXJpKSA6aG92ZXIgc3RpY2tzIHRvIHdoYXRldmVyIHNpdHNcbiAgIHVuZGVyIHRoZSBmaW5nZXIgYW5kLCBhcyB0aGUgYWNjb3JkaW9uIHNsaWRlcyBvcGVuIHVuZGVyIGEgcmVzdGluZyBmaW5nZXJ0aXAsXG4gICB3YWxrcyBkb3duIHRoZSBsaW5rIGxpc3Qgb25lIGl0ZW0gYXQgYSB0aW1lLCBlYWNoIGZsYXNoaW5nIHJlZCB1bnByb21wdGVkXG4gICAoc2FtZSBidWcgZml4ZWQgaW4gdGhlIGhlYWRlciBtb2JpbGUgbWVudSkuIERlc2t0b3AgcG9pbnRlcnMga2VlcCB0aGUgaG92ZXJcbiAgIGNvbG91ci4gKi9cbkBtZWRpYSAoaG92ZXI6IGhvdmVyKSB7XG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLWxpbmtzIGE6aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQtcmVkKTtcbiAgfVxufVxuXG4vKiBUYXAgZmVlZGJhY2sgKG1vYmlsZSBhY2NvcmRpb24pLiBUaGUgZ2xvYmFsIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvciBpc1xuICAgb2ZmIChjc3MvY3VzdG9tLmNzcyksIHNvIGEgdGFwIG9uIGEgZm9vdGVyIGxpbmsgb3RoZXJ3aXNlIHJlZ2lzdGVycyB3aXRoIG5vXG4gICB2aXN1YWwgY29uZmlybWF0aW9uLiBUaGUgbGlua1xuICAgdHVybnMgcmVkIG9uIHByZXNzICg6YWN0aXZlKSBhbmQgc3RheXMgcmVkIHVudGlsIHRoZSBuZXh0IHBhZ2UgbG9hZHNcbiAgICguaXMtc2VsZWN0ZWQsIHN0YW1wZWQgYnkganMvc2hhcmVkLmpzKS4gTm8gaGlnaGxpZ2h0IGJveDsgYWNjb3JkaW9uIGhlYWRlclxuICAgcm93cyBhcmUgbGVmdCBhcy1pcy4gKi9cbkBtZWRpYSAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItbGlua3MgYTphY3RpdmUsXG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLWxpbmtzIGEuaXMtc2VsZWN0ZWQge1xuICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQtcmVkKTtcblxuICAgIC8qIFNuYXAgc3RyYWlnaHQgdG8gY3JpbXNvbiDigJQgdGhlIGJhc2UgcnVsZSdzIGB0cmFuc2l0aW9uOiBjb2xvciAwLjNzYCB3YXNcbiAgICAgICBhbmltYXRpbmcgd2hpdGUg4oaSIHJlZCB0aHJvdWdoIGl0cyBwYWxlIG1pZHBvaW50LCBhbmQgb24gYSBxdWljayB0YXAgK1xuICAgICAgIHBhZ2UgY2hhbmdlIHRoYXQgcGlua2lzaCBmcmFtZSB3YXMgYWxsIHRoZSB2aXNpdG9yIHNhdyAoXCJsb29rcyBwZWFjaFwiKS5cbiAgICAgICBJbnN0YW50IG9uOyB0aGUgZmFkZS1iYWNrIHdoZW4gdGhlIGNsYXNzIGNsZWFycyBzdGlsbCByaWRlcyB0aGUgYmFzZVxuICAgICAgIHRyYW5zaXRpb24uICovXG4gICAgdHJhbnNpdGlvbjogbm9uZTtcbiAgfVxufVxuXG4uZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1saW5rcyAuc2VwIHtcbiAgY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1LCAuMyk7XG59XG5cbi8qIERlc2t0b3AgMy1jb2x1bW4gYWxpZ25tZW50OiB0aGUgbGlua3MgY29sdW1uIGhhcyBhIGZpeGVkIHdpZHRoXG4gICAoc2FtZSBnZW9tZXRyeSBhcyB0aGUgb3JpZ2luYWwgMTEwcHggbGFiZWwgKyAzMCUgZG90cyArIG1hcmdpbnMpLFxuICAgc28gZXZlcnkgcm93J3MgbGlua3Mgc3RhcnQgYXQgdGhlIHNhbWUgeCByZWdhcmRsZXNzIG9mIGxhYmVsIGxlbmd0aCAqL1xuQG1lZGlhIChtaW4td2lkdGg6IDEwMjVweCkge1xuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1saW5rcyB7XG4gICAgZmxleDogMCAwIGNhbGMoNzAlIC0gMTUwcHgpO1xuICB9XG59XG5cbi8qIERlc2t0b3AgZG90dGVkLWxlYWRlciBsYXlvdXQ6IHRoZSBkb3RzIGxpdmUgYXMgYSBiYWNrZ3JvdW5kIG9uIHRoZSBsaW5rc1xuICAgY2VsbCBhbmQgdGhlIGxpbmtzIHRoZW1zZWx2ZXMgbWFzayB0aGVtIHdpdGggdGhlIGZvb3RlciBiYWNrZ3JvdW5kLCBzb1xuICAgdGhlIGxlYWRlciBhbHdheXMgZW5kcyBhIGZpeGVkIDhweCBiZWZvcmUgdGhlIHRleHQg4oCUIGV2ZW4gd2hlbiBsaW5rcyB3cmFwLlxuICAgQXBwbGllcyBvbmx5IHRvIHJvd3Mgd2hvc2UgbWFya3VwIGhhcyB0aGUgLmZvb3Rlci1saW5rcy1saW5lIHdyYXBwZXI7XG4gICBwYWdlcyB3aXRob3V0IGl0IGtlZXAgdGhlIGxlZ2FjeSAuZm9vdGVyLWRvdHMgYmFyLiAqL1xuQG1lZGlhIChtaW4td2lkdGg6IDEwMjVweCkge1xuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1yb3c6aGFzKC5mb290ZXItbGlua3MtbGluZSkge1xuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgfVxuXG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLXJvdzpoYXMoLmZvb3Rlci1saW5rcy1saW5lKSAuZm9vdGVyLWRvdHMge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1yb3c6aGFzKC5mb290ZXItbGlua3MtbGluZSkgLmZvb3Rlci1saW5rcyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZmxleDogMTtcbiAgICBtaW4td2lkdGg6IDA7XG4gICAgbWF4LXdpZHRoOiBub25lO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudChcbiAgICAgIHRvIHJpZ2h0LFxuICAgICAgI2ZmZjllZCAwLFxuICAgICAgI2ZmZjllZCAzcHgsXG4gICAgICB0cmFuc3BhcmVudCAzcHgsXG4gICAgICB0cmFuc3BhcmVudCAxNHB4XG4gICAgKTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDEwMCUgM3B4O1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7XG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogMCAxMXB4O1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItbGlua3MtbGluZSB7XG5cbiAgICAvKiBNdXN0IHN0YXkgZXF1YWwgdG8gLnNpdGUtZm9vdGVyJ3MgYmFja2dyb3VuZC1jb2xvciDigJQgdGhpcyBtYXNrIHJlbGllc1xuICAgICAgIG9uIG1hdGNoaW5nIGl0IGV4YWN0bHksIG5vdCBvbiB0aGUgY29sb3IgY2hvaWNlIGl0c2VsZi4gKi9cbiAgICBiYWNrZ3JvdW5kOiAjMjAyMTJhO1xuICAgIHBhZGRpbmc6IDAgOHB4O1xuXG4gICAgLyogLXdlYmtpdC1ib3gtZGVjb3JhdGlvbi1icmVhazogY2xvbmU7XG4gICAgYm94LWRlY29yYXRpb24tYnJlYWs6IGNsb25lOyAqL1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItbGlua3MtbGluZSBhIHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItbGlua3MtbGluZSAuc2VwIHtcbiAgICBtYXJnaW46IDAgNHB4O1xuICB9XG59XG5cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuYnJlYWstbW9iaWxlIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cblxuLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItbWlkZGxlIHtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW4tYm90dG9tOiAxMTJweDtcbn1cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLW1pZGRsZSAuZm9vdGVyLW5ld3NsZXR0ZXIge1xuICB3aWR0aDogMTAwJTtcbn1cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLW5ld3NsZXR0ZXIgaDMge1xuICBmb250LXNpemU6IDIwcHg7XG4gIGxpbmUtaGVpZ2h0OiAzNHB4O1xuICBmb250LXdlaWdodDogMzAwO1xuICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICBjb2xvcjogI2U2ZTZlZDtcbn1cblxuLmV4cG9uYS1mb290ZXItcGFyZW50IC5uZXdzbGV0dGVyLWlucHV0LXdyYXBwZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDE2cHg7XG5cbiAgLyogV2FzIGEgZml4ZWQgNTAzcHgsIHNvIG9uIGFueSB2aWV3cG9ydCB3aGVyZSAuZm9vdGVyLW5ld3NsZXR0ZXIncyBhY3R1YWxcbiAgICAgZmxleCBzcGFjZSAoaW4gLmZvb3Rlci1taWRkbGUsIG5leHQgdG8gLmZvb3Rlci1icmFuZCkgY2FtZSBpbiBuYXJyb3dlclxuICAgICB0aGFuIHRoYXQg4oCUIGxhcHRvcC13aWR0aCB2aWV3cG9ydHMgYWJvdmUgdGhlIOKJpDEwMjRweCBzdGFjayBicmVha3BvaW50LFxuICAgICB3aGVyZSB0aGUgbW9iaWxlIG92ZXJyaWRlIGJlbG93IGRvZXNuJ3QgYXBwbHkgeWV0IOKAlCB0aGUgd3JhcHBlciBoZWxkIGl0c1xuICAgICBoYXJkY29kZWQgd2lkdGggYW5kIGp1c3Qgb3ZlcmZsb3dlZCAuZm9vdGVyLW5ld3NsZXR0ZXIsIGNsaXBwZWQgYnlcbiAgICAgd2hhdGV2ZXIgYW5jZXN0b3Igc2V0IG92ZXJmbG93OmhpZGRlbi4gVGhlIGJ1dHRvbiAoZml4ZWQtc2l6ZSwgbm93cmFwXG4gICAgIGxhYmVsKSB0b29rIHRoZSB2aXNpYmxlIGN1dDsgdGhlIGlucHV0IHNocmlua3MgaW5zdGVhZC4gKi9cbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogNTAzcHg7XG59XG5cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLW5ld3NsZXR0ZXIgaW5wdXRbdHlwZT1cImVtYWlsXCJdLm5ld3NsZXR0ZXItaW5wdXQge1xuICBmbGV4OiAxO1xuXG4gIC8qIEZsZXggaXRlbXMgZ2V0IGFuIGF1dG9tYXRpYyBtaW5pbXVtIHNpemUgZmxvb3JlZCBhdCB0aGVpciBDT05URU5UIHNpemVcbiAgICAgYmVmb3JlIGZsZXgtc2hyaW5rIGV2ZXIgcnVucywgYW5kIGZvciBhIHBsYWluIDxpbnB1dD4gd2l0aCBubyBgc2l6ZWBcbiAgICAgYXR0cmlidXRlIHRoYXQgY29udGVudCBzaXplIGlzIHRoZSBicm93c2VyJ3MgZGVmYXVsdCBjb250cm9sIHdpZHRoXG4gICAgICh+MTcwLTIwMHB4KSDigJQgbm90IDAuIFNvIGBmbGV4OiAxYCBhbG9uZSBjb3VsZG4ndCBzaHJpbmsgdGhpcyBpbnB1dCBwYXN0XG4gICAgIHRoYXQgZmxvb3I6IG9uY2UgdGhlIHJvdyAoaW5wdXQgKyAxNnB4IGdhcCArIHRoZSBmaXhlZC1zaXplLCBub3dyYXBcbiAgICAgU1VCU0NSSUJFIGJ1dHRvbikgbmVlZGVkIG1vcmUgd2lkdGggdGhhbiB3YXMgYWN0dWFsbHkgYXZhaWxhYmxlLCB0aGVcbiAgICAgYnV0dG9uIOKAlCB0aGUgb25seSBzaWJsaW5nIHdpdGggbm90aGluZyBsZWZ0IHRvIGdpdmUg4oCUIHdhcyB0aGUgb25lIHRoYXRcbiAgICAgb3ZlcmZsb3dlZCBhbmQgZ290IGNsaXBwZWQuIG1pbi13aWR0aDogMCByZW1vdmVzIHRoYXQgZmxvb3Igc28gdGhlIGlucHV0XG4gICAgIGlzIHdoYXQgc2hyaW5rcywgYW5kIHRoZSBidXR0b24gbmV2ZXIgaGFzIHRvLiAqL1xuICBtaW4td2lkdGg6IDA7XG4gIGJhY2tncm91bmQtY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1LCAuMSk7XG4gIGJvcmRlcjogMXB4IHNvbGlkIHJnYigyNTUsIDI1NSwgMjU1LCAuMik7XG4gIGNvbG9yOiAjZmZmO1xuICBwYWRkaW5nOiAxMXB4IDIwcHg7XG4gIGZvbnQtc2l6ZTogMTRweDtcbiAgbGluZS1oZWlnaHQ6IDIycHg7XG4gIG91dGxpbmU6IG5vbmU7XG4gIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAuM3M7XG4gIGhlaWdodDogYXV0bztcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLmV4cG9uYS1mb290ZXItcGFyZW50IC5uZXdzbGV0dGVyLWlucHV0OjpwbGFjZWhvbGRlciB7XG4gIGNvbG9yOiAjZmZmO1xuICBvcGFjaXR5OiAxO1xufVxuXG4uZXhwb25hLWZvb3Rlci1wYXJlbnQgLm5ld3NsZXR0ZXItaW5wdXQ6Zm9jdXMge1xuICBib3JkZXItY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1LCAuNSk7XG59XG5cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLWJyYW5kIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICBnYXA6IDIwcHg7XG59XG5cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLWxvZ28ge1xuICBoZWlnaHQ6IDMycHg7XG59XG5cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuc29jaWFsLWljb25zIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiAxNnB4O1xufVxuXG4uZXhwb25hLWZvb3Rlci1wYXJlbnQgLnNvY2lhbC1pY29ucyBhIHtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGNvbG9yOiAjZTZlNmVkO1xuICB0cmFuc2l0aW9uOiBjb2xvciAuM3MsIG9wYWNpdHkgLjNzO1xuICBvcGFjaXR5OiAuODtcbn1cblxuLmV4cG9uYS1mb290ZXItcGFyZW50IC5zb2NpYWwtaWNvbnMgYTpob3ZlciB7XG4gIGNvbG9yOiAjZmZmO1xuICBvcGFjaXR5OiAxO1xufVxuXG4uZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1ib3R0b20tbGlua3Mge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGZvbnQtc2l6ZTogMTJweDtcbiAgbGluZS1oZWlnaHQ6IDE4cHg7XG4gIGZvbnQtd2VpZ2h0OiAzMDA7XG4gIGNvbG9yOiAjZmZmO1xuICBsZXR0ZXItc3BhY2luZzogLjVweDtcbn1cblxuLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItYm90dG9tLWxpbmtzIC5sZWdhbC1saW5rcyBhIHtcbiAgbWFyZ2luLWxlZnQ6IDI0cHg7XG4gIHRyYW5zaXRpb246IGNvbG9yIC4zcztcbiAgY29sb3I6ICNmZmY7XG4gIGZvbnQtd2VpZ2h0OiA1MDA7XG4gIGxldHRlci1zcGFjaW5nOiAxLjJweDtcbn1cblxuLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItYm90dG9tLWxpbmtzIC5sZWdhbC1saW5rcyBhOmhvdmVyIHtcbiAgY29sb3I6IHZhcigtLWFjY2VudC1yZWQpO1xufVxuXG4uZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1ib3R0b20tcmVkIHtcbiAgcGFkZGluZzogODBweCAwO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIG9wYWNpdHk6IDA7XG4gIHRyYW5zaXRpb246XG4gICAgb3BhY2l0eSAuNXMgZWFzZSxcbiAgICB2aXNpYmlsaXR5IC41cyBlYXNlO1xufVxuXG5ib2R5IC5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLXJlZC1jb250YWluZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgei1pbmRleDogMjtcbiAgZ2FwOiAxNnB4O1xuXG4gIC8qIEFkZGVkIHRvIG92ZXJyaWRlIHdvcmRwcmVzcyBzdHlsZSAqL1xuICBtYXgtd2lkdGg6IHZhcigtLWNvbnRhaW5lci13aWR0aC1wYWRkKTtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmctbGVmdDogNjBweDtcbiAgcGFkZGluZy1yaWdodDogNjBweDtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbn1cblxuLyogQWRkZWQgdG8gb3ZlcnJpZGUgd29yZHByZXNzIHN0eWxlICovXG5ib2R5IC5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLXJlZC1jb250YWluZXI6OmFmdGVyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLXJlZC10ZXh0IHtcbiAgZm9udC1zaXplOiAzMnB4O1xuICBmb250LXdlaWdodDogMjUwO1xuICBsaW5lLWhlaWdodDogMzhweDtcbiAgbGV0dGVyLXNwYWNpbmc6IC0xLjI4cHg7XG59XG5cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuY29uZGl0aW9uLTIsXG4uZXhwb25hLWZvb3Rlci1wYXJlbnQgLmNvbmRpdGlvbi0zLFxuLmV4cG9uYS1mb290ZXItcGFyZW50IC5jb25kaXRpb24tNCxcbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuY29uZGl0aW9uLTUsXG4uZXhwb25hLWZvb3Rlci1wYXJlbnQgLmNvbmRpdGlvbi02LFxuLmV4cG9uYS1mb290ZXItcGFyZW50IC5jb25kaXRpb24tNyB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuY29uZGl0aW9uLTEsXG4uZXhwb25hLWZvb3Rlci1wYXJlbnQgLmNvbmRpdGlvbi0yLFxuLmV4cG9uYS1mb290ZXItcGFyZW50IC5jb25kaXRpb24tMyxcbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuY29uZGl0aW9uLTQsXG4uZXhwb25hLWZvb3Rlci1wYXJlbnQgLmNvbmRpdGlvbi01LFxuLmV4cG9uYS1mb290ZXItcGFyZW50IC5jb25kaXRpb24tNixcbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuY29uZGl0aW9uLTcge1xuICBwYWRkaW5nOiAyMHB4IDA7XG59XG5cbi8qIGNvbmRpdGlvbi0yIG9ubHk6IG1lbWJlciBhdmF0YXJzICsgbWV0YSByZXBsYWNlIHRoZSBidXR0b24gKi9cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLW1lbWJlcnMge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IDE0cHg7XG4gIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4uZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1hdmF0YXJzIHtcbiAgZGlzcGxheTogZmxleDtcbn1cblxuLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItYXZhdGFyIHtcbiAgd2lkdGg6IDQ2cHg7XG4gIGhlaWdodDogNDZweDtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgbWFyZ2luLWxlZnQ6IC0xMHB4O1xuICBiYWNrZ3JvdW5kOiAjZDlkOWQ5O1xuICBib3JkZXI6IDEuMTRweCBzb2xpZCAjZmZmO1xufVxuXG4uZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1hdmF0YXI6Zmlyc3QtY2hpbGQge1xuICBtYXJnaW4tbGVmdDogMDtcbn1cblxuLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItbWVtYmVyLW1ldGEge1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICBnYXA6IDNweDtcbn1cblxuLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItbWVtYmVyLWNvdW50IHtcbiAgZm9udC1zaXplOiAxOHB4O1xuICBsaW5lLWhlaWdodDogMzBweDtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgY29sb3I6ICNmZmY7XG59XG5cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLW1lbWJlci10YWdzIHtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBsaW5lLWhlaWdodDogMjBweDtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgY29sb3I6ICNmZmQwZDg7XG59XG5cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLXdhdmUtcGxhY2Vob2xkZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGJvdHRvbTogMDtcbiAgbGVmdDogMDtcbiAgd2lkdGg6IDEwMCU7XG4gIGhlaWdodDogNjBweDtcbiAgYmFja2dyb3VuZC1pbWFnZTogcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudChcbiAgICA5MGRlZyxcbiAgICByZ2IoMjU1LCAyNTUsIDI1NSwgLjA1KSAwLFxuICAgIHJnYigyNTUsIDI1NSwgMjU1LCAuMDUpIDJweCxcbiAgICB0cmFuc3BhcmVudCAycHgsXG4gICAgdHJhbnNwYXJlbnQgOHB4XG4gICk7XG4gIHotaW5kZXg6IDE7XG59XG5cbi5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLXdhdmUtcGxhY2Vob2xkZXItcG9kY2FzdCB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgYm90dG9tOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiA1NHB4O1xuICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCIuLi8uLi8uLi9zdGF0aWMvYXNzZXRzL2ltYWdlcy9sYXRlc3QvZm9vdGVyLWZyYW1lLnBuZ1wiKTtcbiAgYmFja2dyb3VuZC1yZXBlYXQ6IHJlcGVhdC14O1xuICBiYWNrZ3JvdW5kLXNpemU6IGF1dG8gMTAwJTtcbiAgYmFja2dyb3VuZC1wb3NpdGlvbjogYm90dG9tIGNlbnRlcjtcbiAgei1pbmRleDogMTtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDE0NDBweCkge1xuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmV4cG9uYS1jb250ZW50LWxlZnQge1xuICAgIG1heC13aWR0aDogNjgwcHg7XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDEyMDBweCkge1xuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmV4cG9uYS1jb250ZW50LWxlZnQge1xuICAgIG1heC13aWR0aDogNTQwcHg7XG4gIH1cbn1cblxuLyogUmVzcG9uc2l2ZSBPdmVycmlkZXMgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5leHBvbmEtY29udGFpbmVyIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGdhcDogNDBweDtcbiAgfVxuXG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuZXhwb25hLWNvbnRlbnQtbGVmdCxcbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5leHBvbmEtY29udGVudC1yaWdodCB7XG4gICAgZmxleDogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5leHBvbmEtY29udGVudC1yaWdodCB7XG4gICAgaGVpZ2h0OiA0MHZoO1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5leHBvbmEtY29udGVudC1sZWZ0IHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgcGFkZGluZzogODBweCAwO1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItbWlkZGxlIHtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIGdhcDogNDBweDtcbiAgfVxuXG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLWJyYW5kIHtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgfVxuXG4gIGJvZHkgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItcmVkLWNvbnRhaW5lciB7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBnYXA6IDIwcHg7XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmV4cG9uYS1jb250ZW50LWxlZnQge1xuICAgIG1hcmdpbjogNjBweCAwIDIwcHg7XG4gIH1cblxuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmV4cG9uYS10aXRsZSB7XG4gICAgZm9udC1zaXplOiAzNnB4O1xuICAgIGZvbnQtd2VpZ2h0OiAyNTA7XG4gICAgbGluZS1oZWlnaHQ6IDQycHg7XG4gICAgd2hpdGUtc3BhY2U6IG5vcm1hbDtcbiAgICBtYXJnaW4tYm90dG9tOiAzMnB4O1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItY29udGFpbmVyIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItbGlua3MtZ3JpZCB7XG4gICAgZ2FwOiAwO1xuICAgIG1hcmdpbi1ib3R0b206IDYwcHg7XG4gIH1cblxuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmV4cG9uYS12aWRlbyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAtNzBweDtcbiAgICBib3R0b206IDA7XG4gICAgYm9yZGVyOiAwO1xuICAgIG91dGxpbmU6IDA7XG4gICAgaGVpZ2h0OiA1MHZoO1xuICAgIG9iamVjdC1wb3NpdGlvbjogdG9wIHJpZ2h0O1xuICAgIG1hc2staW1hZ2U6IG5vbmU7XG4gIH1cblxuICAvKiBFYWNoIHJvdyBiZWNvbWVzIGEgZnVsbC13aWR0aCBhY2NvcmRpb24gaXRlbSAqL1xuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1yb3cge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gICAgZ2FwOiAwO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMjU1LCAyNTUsIDI1NSwgLjEpO1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItbWlkZGxlIHtcbiAgICBnYXA6IDkwcHg7XG4gICAgcGFkZGluZzogMzBweDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gIH1cblxuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1icmFuZCB7XG4gICAgZ2FwOiAzMnB4O1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItbmV3c2xldHRlciBoMyB7XG4gICAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgIGZvbnQtc2l6ZTogMzJweDtcbiAgICBsZXR0ZXItc3BhY2luZzogLTQlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuXG4gIGJvZHkgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItcmVkLWNvbnRhaW5lciB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuXG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLWJvdHRvbS1saW5rcyB7XG4gICAgZ2FwOiAyNHB4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAxMnB4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgcGFkZGluZzogMjBweCAzMHB4IDUwcHg7XG4gIH1cblxuICAvKiBBY2NvcmRpb24gaGVhZGVyOiBsYWJlbCBsZWZ0LCBjaGV2cm9uIHJpZ2h0ICovXG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLWFjY29yZGlvbi1oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgcGFkZGluZzogMThweCAzMHB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB3aWR0aDogMTAwJTtcbiAgfVxuXG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLWFjY29yZGlvbi1pY29uIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250LXNpemU6IDEzcHg7XG4gICAgY29sb3I6IHJnYigyNTUsIDI1NSwgMjU1LCAuNik7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIC4zcyBlYXNlO1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItYWNjb3JkaW9uLWl0ZW0uYWN0aXZlIC5mb290ZXItYWNjb3JkaW9uLWljb24ge1xuICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7XG4gIH1cblxuICAvKiBEb3RzIGhpZGRlbiwgbGlua3MgZnVsbC13aWR0aCBsZWZ0LWFsaWduZWQsIGhpZGRlbiBieSBkZWZhdWx0ICovXG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLWRvdHMge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cblxuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1hY2NvcmRpb24tY29udGVudCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBsaW5lLWhlaWdodDogMjtcbiAgICBwYWRkaW5nOiAxMHB4IDMwcHggMjBweDtcbiAgfVxuXG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuYnJlYWstbW9iaWxlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gIH1cblxuICAvKiBSZWQgYm90dG9tIHNlY3Rpb246IGFsd2F5cyB2aXNpYmxlIG9uIG1vYmlsZSB3aXRoIGl0cyBvd24gYmFja2dyb3VuZCAqL1xuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1ib3R0b20tcmVkIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM3YzIyMzU7XG4gICAgcGFkZGluZzogNTBweCA1MHB4IDk2cHg7XG4gIH1cblxuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1yZWQtdGV4dCB7XG4gICAgZm9udC13ZWlnaHQ6IDI1MDtcbiAgICBmb250LXNpemU6IDMycHg7XG4gICAgbGluZS1oZWlnaHQ6IDM4cHg7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC00JTtcbiAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogMTAyNHB4KSB7XG5cbiAgLyogLmV4cG9uYS1mb290ZXItcGFyZW50IC5zaXRlLWZvb3Rlcjo6YWZ0ZXIsXG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuZXhwb25hLXNlY3Rpb246OmJlZm9yZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfSAqL1xuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmV4cG9uYS1jb250YWluZXIge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZ2FwOiAwO1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5leHBvbmEtY29udGVudC1sZWZ0IHtcbiAgICBwYWRkaW5nOiA0MHB4IDIwcHg7XG4gICAgbWFyZ2luOiAwO1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5leHBvbmEtdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMzJweDtcbiAgICBmb250LXdlaWdodDogMjUwO1xuICAgIGxpbmUtaGVpZ2h0OiA0MnB4O1xuICAgIHdoaXRlLXNwYWNlOiBub3JtYWw7XG4gICAgbWFyZ2luLWJvdHRvbTogMzZweDtcbiAgICBsZXR0ZXItc3BhY2luZzogMS4yOHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuXG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLWNvbnRhaW5lciB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuXG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLWxpbmtzLWdyaWQge1xuICAgIHBhZGRpbmc6IDQwcHggMjBweDtcbiAgICBnYXA6IDA7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICBib3JkZXI6IDA7XG4gIH1cblxuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmV4cG9uYS12aWRlbyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiAtNzBweDtcbiAgICBib3R0b206IDA7XG4gICAgYm9yZGVyOiAwO1xuICAgIG91dGxpbmU6IDA7XG4gICAgaGVpZ2h0OiA1MHZoO1xuICAgIG9iamVjdC1wb3NpdGlvbjogdG9wIHJpZ2h0O1xuICAgIG1hc2staW1hZ2U6IG5vbmU7XG4gIH1cblxuICAvKiBFYWNoIHJvdyBiZWNvbWVzIGEgZnVsbC13aWR0aCBhY2NvcmRpb24gaXRlbSAqL1xuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1yb3cge1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gICAgZ2FwOiAwO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMjU1LCAyNTUsIDI1NSwgLjEpO1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItbWlkZGxlIHtcbiAgICBnYXA6IDQwcHg7XG4gICAgcGFkZGluZzogNDBweCAyMHB4O1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgYm9yZGVyLWJvdHRvbTogMS4wMXB4IHNvbGlkICNmZmZmZmYxMjtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgfVxuXG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLW1pZGRsZSAuZm9vdGVyLW5ld3NsZXR0ZXIsXG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLW1pZGRsZSAuZm9vdGVyLWJyYW5kLFxuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLm5ld3NsZXR0ZXItaW5wdXQtd3JhcHBlciB7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1icmFuZCB7XG4gICAgZ2FwOiAzMnB4O1xuICB9XG5cbiAgLyogU2FtZSBpT1MgZm9jdXMtem9vbSBmbG9vciBhcyAuZXhwb25hLWlucHV0IGFib3ZlIOKAlCB0aGlzIGZpZWxkIGlzIDE0cHggYXRcbiAgICAgZXZlcnkgd2lkdGgsIHNvIGl0IHpvb21zIG9uIHRhcCB0b28uIE9ubHkgdGhlIG5hcnJvdyBsYXlvdXQgaXMgcmFpc2VkO1xuICAgICBkZXNrdG9wIGtlZXBzIDE0cHgsIHdoZXJlIG5vIGJyb3dzZXIgZG9lcyB0aGlzLiBQYWRkaW5nIGNvbXBlbnNhdGVzIHNvIHRoZVxuICAgICBmaWVsZCdzIGhlaWdodCBkb2VzIG5vdCBjaGFuZ2U6IDIyICsgMngxMSBhbmQgMjQgKyAyeDEwIGFyZSBib3RoIDQ0cHguICovXG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLW5ld3NsZXR0ZXIgaW5wdXRbdHlwZT1cImVtYWlsXCJdLm5ld3NsZXR0ZXItaW5wdXQge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gIH1cblxuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1uZXdzbGV0dGVyIGgzIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxNnB4O1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAyOHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gIH1cblxuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1ib3R0b20tbGlua3Mge1xuICAgIGdhcDogMTZweDtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBwYWRkaW5nOiAyMHB4O1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItYm90dG9tLWxpbmtzIC5sZWdhbC1saW5rcyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IDI0cHg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItYm90dG9tLWxpbmtzIC5sZWdhbC1saW5rcyBhIHtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgICB0cmFuc2l0aW9uOiBjb2xvciAuM3M7XG4gICAgY29sb3I6ICNmZmY7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDEuMnB4O1xuICB9XG5cbiAgYm9keSAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1yZWQtY29udGFpbmVyIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItcmVkLXRleHQge1xuICAgIGZvbnQtc2l6ZTogMTZweDtcbiAgICBmb250LXdlaWdodDogMzAwO1xuICAgIGxpbmUtaGVpZ2h0OiAyNnB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwO1xuICB9XG5cbiAgLyogQWNjb3JkaW9uIGhlYWRlcjogbGFiZWwgbGVmdCwgY2hldnJvbiByaWdodCAqL1xuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1hY2NvcmRpb24taGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6IDEzcHggMzBweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cblxuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1sYWJlbCB7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDA7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgY29sb3I6ICNlNmU2ZWQ7XG4gIH1cblxuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1hY2NvcmRpb24taWNvbiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udC1zaXplOiAxM3B4O1xuICAgIGNvbG9yOiAjZmZmOWVkO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAuM3MgZWFzZTtcbiAgfVxuXG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLWFjY29yZGlvbi1pdGVtLmFjdGl2ZSAuZm9vdGVyLWFjY29yZGlvbi1pY29uIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1xuICB9XG5cbiAgLyogRG90cyBoaWRkZW4sIGxpbmtzIGZ1bGwtd2lkdGggbGVmdC1hbGlnbmVkLCBoaWRkZW4gYnkgZGVmYXVsdCAqL1xuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1kb3RzIHtcbiAgICBkaXNwbGF5OiBub25lO1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItbGlua3MgYSB7XG4gICAgcGFkZGluZzogMTBweCAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2IoMjU1LCAyNTUsIDI1NSwgLjEpO1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItbGlua3MgYTpsYXN0LWNoaWxkIHtcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItbGlua3MgLnNlcCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgfVxuXG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLWFjY29yZGlvbi1jb250ZW50IHtcbiAgICBkaXNwbGF5OiBub25lO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIGxpbmUtaGVpZ2h0OiAyO1xuICAgIHBhZGRpbmc6IDEwcHggNTBweDtcbiAgfVxuXG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuYnJlYWstbW9iaWxlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmU7XG4gIH1cblxuICAvKiBSZWQgYm90dG9tIHNlY3Rpb246IGFsd2F5cyB2aXNpYmxlIG9uIG1vYmlsZSB3aXRoIGl0cyBvd24gYmFja2dyb3VuZCAqL1xuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmZvb3Rlci1ib3R0b20tcmVkIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM3YzIyMzU7XG4gICAgcGFkZGluZzogMzBweCAyMHB4IDcwcHg7XG4gIH1cblxuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmNvbmRpdGlvbi0xLFxuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmNvbmRpdGlvbi0yLFxuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmNvbmRpdGlvbi0zLFxuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmNvbmRpdGlvbi00LFxuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmNvbmRpdGlvbi01LFxuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmNvbmRpdGlvbi02LFxuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmNvbmRpdGlvbi03IHtcbiAgICBwYWRkaW5nOiAxMHB4IDA7XG4gIH1cblxuICAuZXhwb25hLWZvb3Rlci1wYXJlbnQgLmV4cG9uYS1pbnB1dC13cmFwcGVyIHtcbiAgICBwYWRkaW5nOiAycHggMTZweDtcbiAgfVxuXG4gIC8qIDE2cHggaXMgYSBGTE9PUiBoZXJlLCBub3QgYSB0eXBlIGNob2ljZSDigJQgZG8gbm90IGxvd2VyIGl0LlxuICAgICBpT1MgU2FmYXJpIHpvb21zIHRoZSB3aG9sZSB2aWV3cG9ydCBpbiB3aGVuZXZlciBhIGZvcm0gY29udHJvbCBpdCBpc1xuICAgICBmb2N1c2luZyBjb21wdXRlcyB0byBhIGZvbnQtc2l6ZSBiZWxvdyAxNnB4LCBhbmQgbmV2ZXIgem9vbXMgYmFjayBvdXQgb25cbiAgICAgYmx1ci4gVGhhdCBpcyB0aGUgXCJ0aGUgYm94IGdldHMgYmlnZ2VyIHdoZW4geW91IHRhcCBpdFwiIHJlcG9ydCBmcm9tIGlQaG9uZTtcbiAgICAgQW5kcm9pZCBoYXMgbm8gc3VjaCBiZWhhdmlvdXIsIHdoaWNoIGlzIHdoeSBpdCBvbmx5IHJlcHJvZHVjZXMgb24gb25lXG4gICAgIHBsYXRmb3JtLiBUaGUgYWx0ZXJuYXRpdmUgY3VyZSDigJQgbWF4aW11bS1zY2FsZS91c2VyLXNjYWxhYmxlIG9uIHRoZVxuICAgICB2aWV3cG9ydCBtZXRhIOKAlCBkaXNhYmxlcyBwaW5jaC16b29tIGZvciBldmVyeW9uZSBhbmQgZmFpbHMgV0NBRyAxLjQuNCwgc29cbiAgICAgdGhlIGZvbnQtc2l6ZSBmbG9vciBpcyB0aGUgb25lIHRoYXQga2VlcHMgdGhlIHBhZ2UgYWNjZXNzaWJsZS5cblxuICAgICBsaW5lLWhlaWdodCBhbmQgcGFkZGluZyBhcmUgcmUtYmFsYW5jZWQgYWdhaW5zdCB0aGUgbGFyZ2VyIHRleHQgc28gdGhlXG4gICAgIHdyYXBwZXIncyBoZWlnaHQgaXMgdW5jaGFuZ2VkOiAxOCArIDJ4MTAgYW5kIDIwICsgMng5IGFyZSBib3RoIDM4cHguICovXG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuZXhwb25hLWlucHV0IHtcbiAgICBmb250LXNpemU6IDE2cHg7XG4gICAgcGFkZGluZzogOXB4IDA7XG4gICAgbGluZS1oZWlnaHQ6IDIwcHg7XG4gIH1cbn1cblxuLyogVGhlIG5hcnJvdy12aWV3cG9ydCBwbGFjZWhvbGRlciBjb3B5IChFWFBPTkFfU1RBVElDX05BUlJPVyBpbiBqcy9zaGFyZWQuanMg4oCUXG4gICBcIlN0YXJ0IHdpdGggdGhlIGNoYWxsZW5nZSBvbiB5b3VyIG1pbmRcIikgaXMgd2lkZXIgdGhhbiB0aGUgZmllbGQgb24gYSBzbWFsbFxuICAgcGhvbmUsIGFuZCBhbiA8aW5wdXQ+IGNhbid0IHdyYXAsIHNvIGl0IHdhcyBiZWluZyBjbGlwcGVkLlxuXG4gICBUaGUgZml4IHNocmlua3MgdGhlIFBMQUNFSE9MREVSIG9ubHksIHZpYSA6OnBsYWNlaG9sZGVyIHsgZm9udC1zaXplIH0uIFRoZVxuICAgaW5wdXQncyBvd24gZm9udC1zaXplIHN0YXlzIDE2cHgsIHNvIGlPUyBTYWZhcmkncyBmb2N1cy16b29tIGhldXJpc3RpYyAoc2VlXG4gICB0aGUgcnVsZSBhYm92ZSDigJQgaXQgcmVhZHMgdGhlIGNvbnRyb2wncyBjb21wdXRlZCBmb250LXNpemUsIG5vdCB0aGVcbiAgIHBsYWNlaG9sZGVyJ3MpIGlzIHVuYWZmZWN0ZWQsIGFuZCBhbnl0aGluZyB0aGUgdmlzaXRvciBhY3R1YWxseSB0eXBlcyBpc1xuICAgc3RpbGwgMTZweC4gU2FmYXJpIHZlcnNpb25zIHRoYXQgaWdub3JlIGZvbnQtc2l6ZSBvbiA6OnBsYWNlaG9sZGVyIGp1c3QgZmFsbFxuICAgYmFjayB0byAxNnB4IOKAlCB0aGUgdGV4dCBjbGlwcyBhcyBiZWZvcmUgYnV0IG5vdGhpbmcgZWxzZSByZWdyZXNzZXMuICovXG5AbWVkaWEgKG1heC13aWR0aDogNDgwcHgpIHtcbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5leHBvbmEtaW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgICBmb250LXNpemU6IDEzcHg7XG4gIH1cbn1cblxuLyog4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG4gICBNb2JpbGUgZm9vdGVyIGFjY29yZGlvbiDigJQgQ1NTIGdyaWQtcm93cyBjb2xsYXBzZS5cblxuICAgV2FzIGEgalF1ZXJ5IHNsaWRlVXAvc2xpZGVEb3duLiBTYW1lIGFzIHRoZSBoZWFkZXIgbW9iaWxlLW5hdiBhY2NvcmRpb24gaW5cbiAgIG1lY2hhbmlzbSwgYnV0IHRoZSBoZWFkZXIgb25seSByZWFkcyBhcyBzbW9vdGggYmVjYXVzZSBpdCBpcyBwb3NpdGlvbjpmaXhlZFxuICAgYW5kIGlzb2xhdGVkIOKAlCBjb2xsYXBzaW5nIGEgc3VibWVudSBpbnNpZGUgaXQgbmV2ZXIgdG91Y2hlcyBwYWdlIGxheW91dC4gVGhlXG4gICBmb290ZXIgaXMgaW4gbm9ybWFsIGZsb3csIHNvIGEgaGVpZ2h0IGFuaW1hdGlvbiB0aGVyZSByZWZsb3dzIGV2ZXJ5IHNlY3Rpb25cbiAgIGJlbG93IGl0IChuZXdzbGV0dGVyLCBib3R0b20gbGlua3MsIGNvbmRpdGlvbiBiYXJzKSBvbiBqUXVlcnkncyAxM21zIHRpbWVyLFxuICAgd2hpY2ggaXNuJ3QgcmVmcmVzaC1zeW5jZWQgYW5kIHN0dXR0ZXJzIG9uIGNsb3NlLlxuXG4gICBncmlkLXRlbXBsYXRlLXJvd3MgMGZy4oaUMWZyIG9uIHRoZSBwYW5lbCAob25lIGNoaWxkLCAuZm9vdGVyLWFjY29yZGlvbi1pbm5lcixcbiAgIGFkZGVkIGJ5IGpzL3NoYXJlZC5qcyDCpzQpIGlzIGEgc2luZ2xlIGJyb3dzZXItZHJpdmVuIHRyYW5zaXRpb24g4oCUIHRoZSBwYWdlXG4gICBzdGlsbCByZWZsb3dzLCBidXQgaXQgaXMgc2NoZWR1bGVkIHdpdGggdGhlIGZyYW1lIGluc3RlYWQgb2YgYWdhaW5zdCBpdC5cbiAgIFNpbmdsZS10cmFjayBmb3JtOiBubyBgYXV0b2Agc2libGluZyB0cmFjaywgc28gYDFmcmAgcmVzb2x2ZXMgY2xlYW5seSB0byB0aGVcbiAgIGlubmVyJ3MgZXhhY3QgaGVpZ2h0LiBUaGUgaW5uZXIgY2FycmllcyBOTyBwYWRkaW5nIOKAlCBgMWZyYCB0aGVuIHRyYWNrcyBhXG4gICBmaXhlZCB0YXJnZXQgd2hpbGUgdGhlIGNvbnRhaW5lcidzIG93biB2ZXJ0aWNhbCBwYWRkaW5nIGFuaW1hdGVzIGluXG4gICBzZXBhcmF0ZWx5IG9uIHRoZSBzYW1lIGN1cnZlICh0aGUgLnNuLWFjY29yZGlvbl9fYm9keSBtb2RlbCkuXG4gICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItYWNjb3JkaW9uLXJlYWR5IC5mb290ZXItYWNjb3JkaW9uLWNvbnRlbnQge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG5cbiAgICAvKiBGdWxsIHdpZHRoIOKAlCAuZm9vdGVyLWxpbmtzIGlzIGRpc3BsYXk6ZmxleDsgYXMgYSBncmlkIGl0cyBkZWZhdWx0XG4gICAgICAgaW1wbGljaXQgY29sdW1uIGlzIGBhdXRvYCBhbmQgc2hyaW5rcyB0byB0aGUgd2lkZXN0IGxpbmsuICovXG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAwZnI7XG5cbiAgICAvKiAuZm9vdGVyLWxpbmtzIGNhcnJpZXMgZmxleDoxIChncm93KSArIGdhcDo4cHggZnJvbSBpdHMgZmxleCBsYXlvdXQg4oCUXG4gICAgICAgbmVpdGhlciBpcyB3YW50ZWQgaGVyZSwgYW5kIGZsZXgtZ3JvdyBjYW4gc3RyZXRjaCB0aGUgY29sbGFwc2VkIHBhbmVsLiAqL1xuICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgIGdhcDogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuXG4gICAgLyogVmVydGljYWwgcGFkZGluZyBsaXZlcyBIRVJFICh0aGUgZ3JpZCBjb250YWluZXIpLCBub3Qgb24gdGhlIGlubmVyIGl0ZW06XG4gICAgICAgYSBzdHJldGNoZWQgZ3JpZCBpdGVtIGluIGEgMGZyIHJvdyBzdGlsbCByZW5kZXJzIGl0cyBvd24gcGFkZGluZywgc28gdGhlXG4gICAgICAgY2xvc2VkIHBhbmVsIHdvdWxkIHNpdCB+MjBweCB0YWxsIOKAlCB0aGUgZ2FwIHVuZGVyIHRoZSBsYWJlbC4gSXQgaXMgMCB3aGVuXG4gICAgICAgY2xvc2VkIGFuZCBhbmltYXRlcyBpbiB3aXRoIHRoZSByb3csIGV4YWN0bHkgYXMgLnNuLWFjY29yZGlvbl9fYm9keSBkb2VzXG4gICAgICAgKGFzc2V0cy9zY3NzL3BhZ2VzL3NlcnZpY2Vub3cvX3Njcm9sbC10YWJzLXNlY3Rpb24uc2NzcykuIEhvcml6b250YWxcbiAgICAgICBwYWRkaW5nIGlzIGNvbnN0YW50IChtaXJyb3JzIHRoZSBvbGQgLmZvb3Rlci1hY2NvcmRpb24tY29udGVudCkuICovXG4gICAgcGFkZGluZzogMCA1MHB4O1xuICAgIHRyYW5zaXRpb246XG4gICAgICBncmlkLXRlbXBsYXRlLXJvd3MgLjNzIGN1YmljLWJlemllciguMjUsIC40NiwgLjQ1LCAuOTQpLFxuICAgICAgcGFkZGluZy10b3AgLjNzIGN1YmljLWJlemllciguMjUsIC40NiwgLjQ1LCAuOTQpLFxuICAgICAgcGFkZGluZy1ib3R0b20gLjNzIGN1YmljLWJlemllciguMjUsIC40NiwgLjQ1LCAuOTQpO1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItYWNjb3JkaW9uLXJlYWR5IC5mb290ZXItYWNjb3JkaW9uLWl0ZW0uYWN0aXZlIC5mb290ZXItYWNjb3JkaW9uLWNvbnRlbnQge1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogMWZyO1xuICAgIHBhZGRpbmctdG9wOiAxMHB4O1xuICAgIHBhZGRpbmctYm90dG9tOiAxMHB4O1xuICB9XG5cbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItYWNjb3JkaW9uLWlubmVyIHtcbiAgICBtaW4taGVpZ2h0OiAwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgIHRyYW5zaXRpb246IHZpc2liaWxpdHkgMHMgbGluZWFyIC4zcztcbiAgfVxuXG4gIC5leHBvbmEtZm9vdGVyLXBhcmVudCAuZm9vdGVyLWFjY29yZGlvbi1pdGVtLmFjdGl2ZSAuZm9vdGVyLWFjY29yZGlvbi1pbm5lciB7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzO1xuICB9XG59XG5cbi8qIERlc2t0b3Aga2VlcHMgdGhlIGZsYXQgZG90dGVkLWxlYWRlciByb3c6IHRoZSBKUy1hZGRlZCB3cmFwcGVyIG11c3Qgbm90XG4gICBiZWNvbWUgYSBsYXlvdXQgYm94IGJldHdlZW4gLmZvb3Rlci1saW5rcyBhbmQgaXRzIDxhPi88c3Bhbj4gZmxleCBpdGVtcy4gKi9cbkBtZWRpYSAobWluLXdpZHRoOiAxMDI1cHgpIHtcbiAgLmV4cG9uYS1mb290ZXItcGFyZW50IC5mb290ZXItYWNjb3JkaW9uLWlubmVyIHtcbiAgICBkaXNwbGF5OiBjb250ZW50cztcbiAgfVxufSIsIjpyb290IHtcblxuICAvKiBDb2xvciBQYWxldHRlICovXG4gIC0tYmctcHJpbWFyeTogI2ZmZjllZDsgLyogQ3JlYW0gTWlzdCAqL1xuICAtLXRleHQtcHJpbWFyeTogIzM3Mzc0MjsgLyogQ2hhcmNvYWwgR3JheSAqL1xuICAtLXRleHQtc2Vjb25kYXJ5OiAjMzczNzQyOyAvKiBNZWRpdW0gR3JheSAqL1xuICAtLXRleHQtZGlzYWJsZWQ6ICNhN2E3YjA7XG4gIC0tYWNjZW50LXJlZDogI2VhMWIzZDsgLyogSW5mb0JlYW5zIENyaW1zb24gKi9cbiAgLS1hY2NlbnQtcGVhY2g6ICNmZmQwZDg7XG4gIC0tYm9yZGVyLWNvbG9yOiByZ2IoMTAzLCAxMDMsIDExNywgLjE1KTtcblxuICAvKiBGb250cyAqL1xuICAtLWZvbnQtcHJpbWFyeTogXCJMZXhlbmRcIiwgLWFwcGxlLXN5c3RlbSwgYmxpbmttYWNzeXN0ZW1mb250LCBcIlNlZ29lIFVJXCIsIHJvYm90bywgc2Fucy1zZXJpZjtcblxuICAvKiBUcmFuc2l0aW9ucyAqL1xuICAtLXRyYW5zaXRpb24tc21vb3RoOiBhbGwgLjRzIGN1YmljLWJlemllciguMTYsIDEsIC4zLCAxKTtcbiAgLS10cmFuc2l0aW9uLXNsb3c6IGFsbCAuOHMgY3ViaWMtYmV6aWVyKC4xNiwgMSwgLjMsIDEpO1xuICAtLXRyYW5zaXRpb24tdHJhbnNsYXRlOiBhbGwgMXMgY3ViaWMtYmV6aWVyKC4xNiwgMSwgLjMsIDEpO1xuICAtLXRleHQtZ3JheTogIzY3Njc3NTtcbiAgLS1jb250YWluZXItd2lkdGg6IDkzLjVyZW07IC8qIDE0OTZweCAqL1xuXG4gIC8qIC0tY29udGFpbmVyLXdpZHRoLXBhZGQ6IDk4LjVyZW07ICovXG5cbiAgLyogMTU3NnB4ICovXG4gIC0tY29udGFpbmVyLXdpZHRoLXBhZGQ6IDEwMXJlbTsgLyogMTYxNnB4ICovXG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgMi4gUmVzZXQgJiBHZW5lcmFsIFN0eWxlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4qIHtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBcbiAgLyogS2lsbCB0aGUgdHJhbnNsdWNlbnQgYmx1ZS9ncmV5IGZsYXNoIEFuZHJvaWQgQ2hyb21lIHBhaW50cyBvdmVyIGFueVxuICAgICB0YXBwZWQgPGE+LzxidXR0b24+LiBPdXIgb3duIDphY3RpdmUgLyA6Zm9jdXMtdmlzaWJsZSBzdHlsZXMgYXJlIHRoZVxuICAgICBpbnRlbmRlZCB0YXAgZmVlZGJhY2suICovXG4gIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbmJ1dHRvbixcbmlucHV0LFxudGV4dGFyZWEsXG5zZWxlY3Qge1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbn1cblxuaHRtbCxcbmJvZHkge1xuICB3aWR0aDogMTAwJTtcblxuICAvKiBtaW4taGVpZ2h0IGluc3RlYWQgb2YgaGVpZ2h0OiAxMDAlIOKAlCBuYXRpdmUgc2Nyb2xsIG5lZWRzIHRoZSBkb2N1bWVudFxuICAgICB0byBncm93IGJleW9uZCB0aGUgdmlld3BvcnQuIGhlaWdodDogMTAwJSB3YXMgb25seSBzYWZlIHdoZW5cbiAgICAgU2Nyb2xsU21vb3RoZXIgdmlydHVhbGlzZWQgc2Nyb2xsOyB3aXRob3V0IGl0IHRoZSBwYWdlIGlzIGNhcHBlZCBhdFxuICAgICAxMDB2aCBhbmQgR1NBUCBwaW4gc3BhY2VycyBjYW5ub3QgZXhwYW5kIHRoZSBzY3JvbGwgcmFuZ2UuICovXG4gIG1pbi1oZWlnaHQ6IDEwMCU7XG4gIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXByaW1hcnkpO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1iZy1wcmltYXJ5KTtcbiAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7XG4gIGxpbmUtaGVpZ2h0OiAxLjY7XG4gIG92ZXJmbG93LXg6IGNsaXA7XG5cbiAgLyogc2Nyb2xsLWJlaGF2aW9yOiBzbW9vdGggcmVtb3ZlZCDigJQgR1NBUCBtYW5hZ2VzIGFsbCBzY3JvbGwgYWRqdXN0bWVudHNcbiAgICAgKHBpbiBzZXR1cCwgcmVmcmVzaCwgc2Nyb2xsVG8pLiBDU1Mgc21vb3RoLXNjcm9sbCBjYXVzZXMgaml0dGVyIGFuZFxuICAgICBpbmNvcnJlY3QgdHJpZ2dlciBwb3NpdGlvbnMgd2hlbiBHU0FQIG1vdmVzIHRoZSBzY3JvbGwgcG9zaXRpb25cbiAgICAgcHJvZ3JhbW1hdGljYWxseS5cblxuICAgICBSZW1vdmluZyBpdCBoZXJlIGlzIE5PVCBzdWZmaWNpZW50IG9uIFdvcmRQcmVzcywgd2hlcmUgdGhpcyBmaWxlIGlzXG4gICAgIGNvbmNhdGVuYXRlZCB3aXRoIGV2ZXJ5IG90aGVyIHBhZ2UncyBDU1MgYW5kIHRoZSBpbnZlc3RvcnMgcGFnZSBjYXJyaWVzIGFcbiAgICAgYmFyZSBgaHRtbCB7IHNjcm9sbC1iZWhhdmlvcjogc21vb3RoIH1gLiBUaGUgYWN0dWFsIG92ZXJyaWRlIGxpdmVzIGluXG4gICAgIGNzcy9zdHlsZS5jc3Mgc2VjdGlvbiAwIChgaHRtbDpoYXMoI3doYXQtd2Utc2hpcClgKSwgd2hpY2ggaXMga2V5ZWQgb2ZmXG4gICAgIHRoZSBwaW5uZWQgc2VjdGlvbnMgYW5kIG1hcmtlZCAhaW1wb3J0YW50IHNvIGl0IGFsc28gYmVhdHMgdGhlIGlubGluZVxuICAgICBzdHlsZSBHU0FQIHdyaXRlcyBiYWNrIGFmdGVyIGEgcmVmcmVzaC4gS2VlcCB0aGUgdHdvIGluIHN0ZXAuICovXG59XG5cbi8qIFdoaWxlIHNjcm9sbCBpcyBsb2NrZWQsIGhhbmQgYmFjayB0aGUgd2lkdGggdGhlIHZhbmlzaGVkIHNjcm9sbGJhciB0b29rIOKAlFxuICAgcGFkZGluZyBub3Qgd2lkdGgsIHNvIHRoZSBoZWFkZXIgc3RheXMgZnVsbC1ibGVlZCAoanMvc2hhcmVkLmpzKS4gKi9cbmh0bWwuc2Nyb2xsLWxvY2tlZCxcbmh0bWwuc2Nyb2xsLWxvY2tlZCAubWFpbi1oZWFkZXIge1xuICBwYWRkaW5nLXJpZ2h0OiB2YXIoLS1zY3JvbGxiYXItY29tcCwgMCk7XG59XG5cbi8qIEd1dHRlciwgbm90IHBhZGRpbmc6IHRoZSBtZW51J3Mgb3duIHNjcm9sbGJhciBhbHJlYWR5IGZpbGxzIHRoYXQgc3BhY2UuICovXG5odG1sLnNjcm9sbC1sb2NrZWQgLmhlYWRlci1jb250YWluZXIgLm1lZ2EtbWVudSB7XG4gIHNjcm9sbGJhci1ndXR0ZXI6IHN0YWJsZTtcbn1cblxuLyogU2Nyb2xsYmFyIGN1c3RvbWl6YXRpb24g4oCUIGV2ZXJ5IHdpZHRoLCBub3QgZGVza3RvcCBvbmx5LlxuICAgVGhlIEBtZWRpYSAobWluLXdpZHRoOiA3NjlweCkgZ2F0ZSB0aGlzIHVzZWQgdG8gc2l0IGJlaGluZCB3YXMgd2hhdCBsZWZ0IHRoZSAgIGhvbWVwYWdlIHdpdGggdGhlIGJyb3dzZXIncyBkZWZhdWx0IGNodW5reSBzY3JvbGxiYXIgYmVsb3cgNzY5cHggd2hpbGUgZXZlcnlcbiAgIG90aGVyIHBhZ2Uga2VwdCB0aGUgdGhpbiBjcmVhbSBvbmU6IHRoZSBsYW5kaW5nIHBhZ2VzIGdldCB0aGUgc2FtZSBmb3VyIHJ1bGVzXG4gICBmcm9tIGFzc2V0cy9zY3NzL3BhZ2VzL19iYXNlLnNjc3MsIHdoZXJlIHRoZXkgYXJlIE5PVCBicmVha3BvaW50LXNjb3BlZCwgYW5kXG4gICB0aGF0IHVuc2NvcGVkIGNvcHkgaXMgd2hhdCB3YXMgcGFpbnRpbmcgdGhlaXIgbW9iaWxlIHNjcm9sbGJhcnMuIEtlZXAgdGhlIHR3b1xuICAgaW4gc3RlcCDigJQgZHJvcHBpbmcgdGhlIGdhdGUgaGVyZSBpcyB3aGF0IG1ha2VzIHRoZSBob21lcGFnZSBhbmQgdGhlIGRyYXdlcidzXG4gICBvd24gc2Nyb2xsZXIgbWF0Y2ggdGhlIHJlc3Qgb2YgdGhlIHNpdGUgYXQgbW9iaWxlIHdpZHRocy4gKi9cbjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICB3aWR0aDogOHB4O1xufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tYmctcHJpbWFyeSk7XG59XG5cbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS10ZXh0LWRpc2FibGVkKTtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xufVxuXG46Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tdGV4dC1zZWNvbmRhcnkpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIDMuIFR5cG9ncmFwaHkgU3lzdGVtc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5oMSxcbmgyLFxuaDMsXG5oNCxcbmg1LFxuaDYge1xuICBmb250LXdlaWdodDogNjAwO1xuICBsaW5lLWhlaWdodDogMS4yO1xufVxuXG5hIHtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgdHJhbnNpdGlvbjogdmFyKC0tdHJhbnNpdGlvbi1zbW9vdGgpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIDQuIEdyaWQgJiBDb250YWluZXIgTGF5b3V0c1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4uY29udGFpbmVyLFxuLmN1c3RvbS1jb250YWluZXIge1xuICBtYXgtd2lkdGg6IHZhcigtLWNvbnRhaW5lci13aWR0aC1wYWRkKTtcbiAgd2lkdGg6IDEwMCU7XG4gIHBhZGRpbmctbGVmdDogNjBweDtcbiAgcGFkZGluZy1yaWdodDogNjBweDtcbiAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gIG1hcmdpbi1yaWdodDogYXV0bztcbn1cblxuLyogUmVzcG9uc2l2ZSBDb250YWluZXIgQWRqdXN0bWVudHMgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgLmNvbnRhaW5lciB7XG4gICAgcGFkZGluZy1sZWZ0OiAyMHB4O1xuICAgIHBhZGRpbmctcmlnaHQ6IDIwcHg7XG4gIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gIC5jdXN0b20tY29udGFpbmVyIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gICAgcGFkZGluZy1yaWdodDogMjBweDtcbiAgfVxufVxuIiwiXG4uY2t5LXN3aXRjaCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06Y2hlY2tlZCB7XG4gIGJhY2tncm91bmQ6ICNlYTFiM2QgIWltcG9ydGFudDtcbn1cblxuYnV0dG9uLmNreS1idG4uY2t5LWJ0bi1yZWplY3Qge1xuICBjb2xvcjogI2Y4ZjZmNiAhaW1wb3J0YW50O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjExZDFkICFpbXBvcnRhbnQ7XG59XG5cbmJ1dHRvbi5ja3ktYnRuLmNreS1idG4tYWNjZXB0IHtcbiAgYmFja2dyb3VuZDogI2VhMWIzZCAhaW1wb3J0YW50O1xuICBib3JkZXItY29sb3I6ICNlYTFiM2QgIWltcG9ydGFudDtcbiAgY29sb3I6ICNmZmYgIWltcG9ydGFudDtcbn1cblxuLmNreS1ub3RpY2UtYnRuLXdyYXBwZXIgLmNreS1idG4ge1xuICBib3JkZXItY29sb3I6ICNlYTFiM2QgIWltcG9ydGFudDtcbiAgY29sb3I6ICNlYTFiM2QgIWltcG9ydGFudDtcbn1cblxuLmNreS1yZXZpc2l0LWJvdHRvbS1sZWZ0OmhvdmVyOjpiZWZvcmUsIC5ja3ktcmV2aXNpdC1ib3R0b20tbGVmdDpob3Zlcjo6YWZ0ZXIge1xuICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA1NzZweCkge1xuXG4gIC5wYWdlLXRlbXBsYXRlLXBhZ2UtbGVhZGVyc2hpcC0yMDI2IC5ja3ktcmV2aXNpdC1ib3R0b20tbGVmdCB7XG4gICAgbGVmdDogYXV0byAhaW1wb3J0YW50O1xuICAgIHJpZ2h0OiAxNXB4ICFpbXBvcnRhbnQ7XG4gIH1cbiAgLmNreS1wcmVmZXJlbmNlLWNlbnRlciB7XG4gICAgbWF4LWhlaWdodDogOTB2aCAhaW1wb3J0YW50O1xuICAgIC8vIHN0eWxlbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIG1heC1oZWlnaHQ6IDkwZHZoICFpbXBvcnRhbnQ7ICAgLyogcmVhbCB2aXNpYmxlIGhlaWdodCwgYWNjb3VudHMgZm9yIG1vYmlsZSBicm93c2VyIGNocm9tZSAqL1xuICAgIG92ZXJmbG93OiBoaWRkZW4gIWltcG9ydGFudDtcbiAgICBkaXNwbGF5OiBmbGV4ICFpbXBvcnRhbnQ7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbiAhaW1wb3J0YW50O1xuICAgIHRvcDogNXZoICFpbXBvcnRhbnQ7XG4gICAgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XG4gIH1cblxuICAvKiBrZWVwIGhlYWRlciBhbmQgZm9vdGVyIGZpeGVkIGluIHBsYWNlLCBvbmx5IHRoZSBtaWRkbGUgY29udGVudCBzY3JvbGxzICovXG4gIC5ja3ktcHJlZmVyZW5jZS1jZW50ZXIgLmNreS1wcmVmZXJlbmNlLWhlYWRlcixcbiAgLmNreS1wcmVmZXJlbmNlLWNlbnRlciAuY2t5LXByZWZlcmVuY2UtZm9vdGVyIHtcbiAgICBmbGV4OiAwIDAgYXV0byAhaW1wb3J0YW50O1xuICB9XG5cbiAgLmNreS1wcmVmZXJlbmNlLWNlbnRlciAuY2t5LXByZWZlcmVuY2UtYm9keS13cmFwcGVyIHtcbiAgICBmbGV4OiAxIDEgYXV0byAhaW1wb3J0YW50O1xuICAgIG92ZXJmbG93LXk6IGF1dG8gIWltcG9ydGFudDtcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2ggIWltcG9ydGFudDtcbiAgfVxufSIsIi8vIGNzcy9wcml2YWN5LWNvbnNlbnQtbW9kYWwuc2Nzc1xuLy8gU0NTUyBzb3VyY2UgZm9yIHByaXZhY3ktY29uc2VudC1tb2RhbC5jc3Mg4oCUIGNvbXBpbGUgYW5kIGtlZXAgYm90aCBpbiBzeW5jXG4vLyBtYW51YWxseSAodGhpcyBjb21wb25lbnQgaXNuJ3Qgd2lyZWQgaW50byB0aGUgc2FzczpidWlsZCBwaXBlbGluZSwgd2hpY2hcbi8vIG9ubHkgY292ZXJzIGFzc2V0cy9zY3NzL3BhZ2VzLyopLiBMaWdodCBpcyB0aGUgZGVmYXVsdCB0aGVtZTsgYWRkIHRoZVxuLy8gc2luZ2xlIG1vZGlmaWVyIGNsYXNzIGBwcml2YWN5LWNvbnNlbnQtbW9kYWwtLWRhcmtgIHRvIHRoZSByb290IGVsZW1lbnRcbi8vIHRvIGZsaXAgZXZlcnkgY29sb3IgYXQgb25jZSDigJQgZXZlcnkgcnVsZSBiZWxvdyByZWFkcyBhIC0tcGNtLSogY3VzdG9tXG4vLyBwcm9wZXJ0eSBpbnN0ZWFkIG9mIGEgaGFyZGNvZGVkIGNvbG9yLCBzbyBub3RoaW5nIGVsc2UgaGFzIHRvIGNoYW5nZS5cblxuLnByaXZhY3ktY29uc2VudC1tb2RhbCB7XG4gIC0tcGNtLWJnOiB2YXIoLS1iZy1wcmltYXJ5LCAjZmZmOWVkKTtcbiAgLS1wY20tdGV4dDogdmFyKC0tdGV4dC1wcmltYXJ5LCAjMzczNzQyKTtcbiAgLS1wY20tbGluazogI2ViNGM1ZTtcbiAgLS1wY20tY2hlY2tib3gtYm9yZGVyOiAjNjc2Nzc1O1xuICAtLXBjbS1jYW5jZWwtY29sb3I6IHZhcigtLWFjY2VudC1yZWQsICNlYTFiM2QpO1xuXG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgaW5zZXQ6IDA7XG4gIHotaW5kZXg6IDIwMDQ7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICBwYWRkaW5nOiAyMHB4O1xuICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB0cmFuc2l0aW9uOiB2aXNpYmlsaXR5IDBzIGxpbmVhciAuNDVzO1xuXG4gIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIHBhZGRpbmc6IDE2cHg7XG4gIH1cblxuICAmLmlzLW9wZW4ge1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgdHJhbnNpdGlvbjogdmlzaWJpbGl0eSAwcyBsaW5lYXIgMHM7XG4gIH1cblxuICAvLyBUaGUgb25lIGNsYXNzIHRoYXQgcmUtdGhlbWVzIHRoZSB3aG9sZSBtb2RhbC5cbiAgJi0tZGFyayB7XG4gICAgLS1wY20tYmc6ICMyZjJmMzk7XG4gICAgLS1wY20tdGV4dDogI2ZmZjtcbiAgICAtLXBjbS1saW5rOiAjZmZkMGQ4O1xuICAgIC0tcGNtLWNoZWNrYm94LWJvcmRlcjogIzY3Njc3NTtcbiAgICAtLXBjbS1jYW5jZWwtY29sb3I6ICNhN2E3YjA7XG4gIH1cblxuICAmX19iYWNrZHJvcCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAwO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoNDcsIDQ3LCA1NywgLjc1KTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IC40cyBjdWJpYy1iZXppZXIoLjE2LCAxLCAuMywgMSk7XG5cbiAgICAucHJpdmFjeS1jb25zZW50LW1vZGFsLS1kYXJrICYge1xuICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgfVxuXG4gICAgLnByaXZhY3ktY29uc2VudC1tb2RhbC5pcy1vcGVuICYge1xuICAgICAgb3BhY2l0eTogMTtcbiAgICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cig1cHgpIHNhdHVyYXRlKDEyMCUpO1xuICAgICAgLXdlYmtpdC1iYWNrZHJvcC1maWx0ZXI6IGJsdXIoNXB4KSBzYXR1cmF0ZSgxMjAlKTtcbiAgICB9XG4gIH1cblxuICAmX19kaWFsb2cge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IDkzMHB4O1xuICAgIHBhZGRpbmc6IDU2cHggNDhweDtcbiAgICBjbGlwLXBhdGg6IHBvbHlnb24oMjRweCAwLCAxMDAlIDAsIDEwMCUgY2FsYygxMDAlIC0gMjRweCksIGNhbGMoMTAwJSAtIDI0cHgpIDEwMCUsIDAgMTAwJSwgMCAyNHB4KTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1wY20tYmcpO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiBzY2FsZTNkKC45NCwgLjk0LCAxKTtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IC4zNXMgY3ViaWMtYmV6aWVyKC40LCAwLCAxLCAxKSxcbiAgICAgIHRyYW5zZm9ybSAuMzVzIGN1YmljLWJlemllciguNCwgMCwgMSwgMSk7XG4gICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybSwgb3BhY2l0eTtcblxuICAgIC5wcml2YWN5LWNvbnNlbnQtbW9kYWwuaXMtb3BlbiAmIHtcbiAgICAgIG9wYWNpdHk6IDE7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlM2QoMSwgMSwgMSk7XG4gICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IC41NXMgY3ViaWMtYmV6aWVyKC4xNiwgMSwgLjMsIDEpLFxuICAgICAgICB0cmFuc2Zvcm0gLjU1cyBjdWJpYy1iZXppZXIoLjM0LCAxLjU2LCAuNjQsIDEpO1xuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMDI0cHgpIHtcbiAgICAgIHBhZGRpbmc6IDQwcHggMzJweDtcbiAgICAgIGNsaXAtcGF0aDogcG9seWdvbigyMHB4IDAsIDEwMCUgMCwgMTAwJSBjYWxjKDEwMCUgLSAyMHB4KSwgY2FsYygxMDAlIC0gMjBweCkgMTAwJSwgMCAxMDAlLCAwIDIwcHgpO1xuICAgIH1cblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgcGFkZGluZzogMzJweCAyMHB4O1xuICAgICAgY2xpcC1wYXRoOiBwb2x5Z29uKDE2cHggMCwgMTAwJSAwLCAxMDAlIGNhbGMoMTAwJSAtIDE2cHgpLCBjYWxjKDEwMCUgLSAxNnB4KSAxMDAlLCAwIDEwMCUsIDAgMTZweCk7XG4gICAgfVxuICB9XG5cbiAgJl9fY2hlY2tib3gtcm93IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIGdhcDogMjBweDtcblxuICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgICAgZ2FwOiAxNHB4O1xuICAgIH1cbiAgfVxuXG4gICZfX2NoZWNrYm94LGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSN7Jn1fX2NoZWNrYm94IHtcbiAgICBhcHBlYXJhbmNlOiBub25lO1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZmxleDogMCAwIGF1dG87XG4gICAgd2lkdGg6IDE4cHg7XG4gICAgaGVpZ2h0OiAxOHB4O1xuICAgIG1hcmdpbi10b3A6IDhweDsgLy8gY2VudGVycyB0aGUgMThweCBib3ggb24gdGhlIHRleHQncyAzNHB4IGZpcnN0IGxpbmUtYm94XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tcGNtLWNoZWNrYm94LWJvcmRlcik7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAuMjVzIGVhc2U7XG5cbiAgICAmOmNoZWNrZWQge1xuICAgICAgYmFja2dyb3VuZDogI2VhMWIzZDtcbiAgICAgIGJvcmRlci1jb2xvcjogI2VhMWIzZDtcblxuICAgICAgLnByaXZhY3ktY29uc2VudC1tb2RhbC0tZGFyayAmIHtcbiAgICAgICAgYmFja2dyb3VuZDogI2VhMWIzZDtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAjZWExYjNkO1xuICAgICAgfVxuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgbGVmdDogNXB4O1xuICAgICAgICB0b3A6IDFweDtcbiAgICAgICAgd2lkdGg6IDVweDtcbiAgICAgICAgaGVpZ2h0OiA5cHg7XG4gICAgICAgIGJvcmRlcjogc29saWQgI2ZmZjtcbiAgICAgICAgYm9yZGVyLXdpZHRoOiAwIDJweCAycHggMDtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoNDVkZWcpO1xuICAgICAgfVxuICAgIH1cblxuICAgICY6Zm9jdXMtdmlzaWJsZSB7XG4gICAgICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tcGNtLWxpbmspO1xuICAgICAgb3V0bGluZS1vZmZzZXQ6IDJweDtcbiAgICB9XG5cbiAgICBAbWVkaWEgKG1heC13aWR0aDogMTAyNHB4KSB7XG4gICAgICBtYXJnaW4tdG9wOiA1cHg7XG4gICAgfVxuICB9XG5cbiAgJl9fdGV4dCB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXByaW1hcnkpO1xuICAgIGZvbnQtd2VpZ2h0OiAzMDA7XG4gICAgZm9udC1zaXplOiAyMHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAzNHB4O1xuICAgIGxldHRlci1zcGFjaW5nOiAwO1xuICAgIGNvbG9yOiB2YXIoLS1wY20tdGV4dCk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDEwMjRweCkge1xuICAgICAgZm9udC1zaXplOiAxOHB4O1xuICAgICAgbGluZS1oZWlnaHQ6IDI4cHg7XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICBmb250LXNpemU6IDE2cHg7XG4gICAgICBsaW5lLWhlaWdodDogMjRweDtcbiAgICB9XG4gIH1cblxuICAmX19saW5rIHtcbiAgICBjb2xvcjogdmFyKC0tcGNtLWxpbmspO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIHRleHQtZGVjb3JhdGlvbi1zdHlsZTogc29saWQ7XG4gICAgdGV4dC1kZWNvcmF0aW9uLXNraXAtaW5rOiBhdXRvO1xuICB9XG5cbiAgJl9fYWN0aW9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogNDVweDtcbiAgICBtYXJnaW4tdG9wOiAzMnB4O1xuICAgIC8vIGxpbmVzIHRoZSBidXR0b25zIHVwIHdpdGggdGhlIHRleHQsIG5vdCB0aGUgY2hlY2tib3ggY29sdW1uXG4gICAgbWFyZ2luLWxlZnQ6IDM4cHg7IC8vIGNoZWNrYm94IHdpZHRoICgxOHB4KSArIGNoZWNrYm94LXJvdyBnYXAgKDIwcHgpXG5cbiAgICAuY2VsbCB7XG4gICAgICBmbGV4OiAwIDAgYXV0bztcbiAgICB9XG5cbiAgICAuaWItYnRuLS1wcmltYXJ5IHtcbiAgICAgIG1pbi13aWR0aDogMTI2cHg7XG4gICAgfVxuXG4gICAgLy8gYnV0dG9ucy5jc3MgZXhwb3NlcyAtLV9jb2xvciBhcyBhIGN1c3RvbSBwcm9wZXJ0eSBvbiAuaWItYnRuLCBzbyB0aGVcbiAgICAvLyBkYXJrIG1vZGlmaWVyIGNhbiByZXRpbnQgdGhlIENhbmNlbCBnaG9zdC1idXR0b24gd2l0aG91dCB0b3VjaGluZ1xuICAgIC8vIGJ1dHRvbnMuY3NzIG9yIGR1cGxpY2F0aW5nIGl0cyBydWxlcy5cbiAgICAucHJpdmFjeS1jb25zZW50LW1vZGFsLS1kYXJrICYge1xuICAgICAgLmliLWJ0bi0tZ2hvc3Qge1xuICAgICAgICAtLV9jb2xvcjogdmFyKC0tcGNtLWNhbmNlbC1jb2xvcik7XG4gICAgICAgICY6aG92ZXIge1xuICAgICAgICAgIC0tX2NvbG9yOiAjZWExYjNkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgICAgZ2FwOiAxcmVtO1xuICAgICAgbWFyZ2luLXRvcDogMjRweDtcbiAgICAgIG1hcmdpbi1sZWZ0OiAwOyAvLyBzdGFja2VkICsgY2VudGVyZWQsIG5vIGxvbmdlciBmb2xsb3dpbmcgdGhlIHRleHQgY29sdW1uXG5cbiAgICAgIC5jZWxsIHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuXG4gICAgICAuaWItYnRuLS1wcmltYXJ5IHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG5cbiAgICAgICAgLmliLWJ0bl9faW5uZXIge1xuICAgICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBOztBQUFBO0FDQUE7O0FBQUE7QUNBQTtBQUNBO0FBQ0E7QUZRQTtBQUNBO0FFTEE7QUFDQTtBQUNBO0FGT0E7QUFDQTtBRUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FGTUE7QUFDQTtBRUxBO0FBQ0E7QUFDQTtBRk9BO0FBQ0E7QUVKQTtBQUNBO0FBQ0E7QUFDQTtBRk1BO0FFSkE7QUFDQTtBQUNBO0FGTUE7QUVKQTtBQUNBO0FBQ0E7QUZNQTtBRUpBO0FBQ0E7QUFDQTtBRk1BO0FBQ0E7QUVKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQUE7QUZNQTtBQUNBO0FFTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBRk9BO0FBQ0E7QUVOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUZRQTtBQUNBO0FFUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBRlNBO0FBQ0E7QUVSQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FGVUE7QUFDQTtBRVRBO0FBQ0E7QUFDQTtBRldBO0FBQ0E7QUVWQTtBQUNBO0FBQ0E7QUZZQTtBQUNBO0FFWEE7QUFDQTtBRmFBO0FBQ0E7QUVaQTtBQUNBO0FGY0E7QUFDQTtBRWJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBRmVBO0FBQ0E7QUViQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUZlQTtBQUNBO0FFYkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FGZUE7QUFDQTtBRWRBO0FBQ0E7QUFDQTtBRmdCQTtBQUNBO0FFZEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FGZ0JBO0FBQ0E7QUVmQTtBQUNBO0FBQ0E7QUZpQkE7QUFDQTtBRWhCQTtBQUNBO0FBQ0E7QUZrQkE7QUFDQTtBRWpCQTtBQUNBO0FBQ0E7QUFDQTtBRm1CQTtBQUNBO0FFakJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBRm1CQTtBQUNBO0FFbEJBO0FBQ0E7QUFDQTtBRm9CQTtBQUNBO0FFbkJBO0FBQ0E7QUFDQTtBQUNBO0FGcUJBO0FBQ0E7QUVuQkE7QUFDQTtBQUNBO0FGcUJBO0FBQ0E7QUVwQkE7QUFDQTtBRnNCQTtBQUNBO0FFckJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUFBO0FGdUJBO0FBQ0E7QUV0QkE7QUFDQTtBRndCQTtBQUNBO0FFdkJBO0FBQ0E7QUZ5QkE7QUFDQTtBRXRCQTs7QUFFQTtBRndCQTtBQUNBO0FFdEJBOztBQUVBO0FGd0JBO0FBQ0E7QUV2QkE7QUFDQTtBQUNBO0FGeUJBO0FBQ0E7QUV2QkE7QUFDQTtBRnlCQTtBQUNBO0FFdkJBO0FBQ0E7QUZ5QkE7QUFDQTtBRXhCQTtBQUNBO0FGMEJBO0FBQ0E7QUV6QkE7QUFDQTtBRjJCQTtBQUNBO0FFekJBO0FBQ0E7QUFDQTtBQUNBO0FGMkJBO0FBQ0E7QUUxQkE7QUFDQTtBRjRCQTtBQUNBO0FFM0JBO0FBQ0E7QUFDQTtBRjZCQTtBQUNBO0FFNUJBO0FBQ0E7QUY4QkE7QUFDQTtBRTdCQTtBQUNBO0FGK0JBO0FBQ0E7QUd2U0E7O0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIeVNBO0FBQ0E7QUd2U0E7O0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7O0FBQUE7QUFJQTtBQUVBO0FBQ0E7QUh1U0E7QUFDQTtBR3JTQTs7Ozs7QUFBQTtBQU1BO0FBQ0E7QUh1U0E7QUFDQTtBR3JTQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQXFCQTs7Ozs7Ozs7Ozs7QUFXQTtBSHVTQTtBQUNBO0FHalNBOzs7OztBQUFBO0FBTUE7O0FBRUE7QUhtU0E7QUFDQTtBRy9SQTs7QUFFQTtBSGlTQTtBQUNBO0FHN1JBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7O0FBY0E7QUgrUkE7QUFDQTtBRzVSQTtBQUNBO0FBRUE7Ozs7QUFBQTtBSGlTQTtBQUNBO0FHM1JBOzs7O0FBQUE7QUFLQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FIOFJBO0FBQ0E7QUc1UkE7O0FBRUE7QUFFQTtBQUNBO0FINlJBO0FBQ0E7QUczUkE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUg2UkE7QUFDQTtBRzNSQTs7O0FBR0E7QUFDQTtBQUNBO0FINlJBO0FBQ0E7QUd6UkE7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFrQkE7QUFDQTtBSDJSQTtBQUNBO0FHelJBOzs7O0FBQUE7QUFLQTs7OztBQUlBO0FBQ0E7QUgyUkE7QUFDQTtBR3pSQTs7O0FBQUE7QUFJQTs7QUFFQTtBQUNBO0FIMlJBO0FBQ0E7QUd6UkE7QUFDQTtBQUVBOzs7O0FBQUE7QUg4UkE7QUd2UkE7O0FBRUE7QUh5UkE7QUFDQTtBR3ZSQTs7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBR0E7QUFPQTtBQUNBO0FIaVJBO0FBQ0E7QUcvUUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSGlSQTtBQUNBO0FHL1FBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FINlFBO0FBQ0E7QUc5UEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQWNBO0FBQ0E7QUhtUEE7QUFDQTtBR2pQQTtBQUNBO0FIbVBBO0FBQ0E7QUdqUEE7QUFDQTtBQUNBO0FBQ0E7QUhtUEE7QUFDQTtBR2pQQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FIbVBBO0FBQ0E7QUdqUEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIbVBBO0FBQ0E7QUdqUEE7QUFDQTtBQUNBO0FIbVBBO0FBQ0E7QUdqUEE7QUFDQTtBSG1QQTtBQUNBO0FHalBBO0FBQ0E7QUhtUEE7QUFDQTtBR2pQQTs7Ozs7OztBQUFBO0FBUUE7QUFDQTtBSG1QQTtBQUNBO0FHalBBO0FBQ0E7QUhtUEE7QUFDQTtBR2pQQTtBQUNBO0FIbVBBO0FBQ0E7QUdqUEE7QUFDQTtBQUNBO0FIbVBBO0FBQ0E7QUdqUEE7QUFDQTtBSG1QQTtBQUNBO0FHM09BO0FBQ0E7QUg2T0E7QUFDQTtBRzFPQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBSDJPQTtBQUNBO0FHek9BO0FBQ0E7O0FBRUE7QUgyT0E7QUFDQTtBR3pPQTtBQUVBO0FBRUE7QUFFQTtBSHdPQTtBQUNBO0FHdE9BO0FBQ0E7QUh3T0E7QUFDQTtBR3RPQTtBQUNBO0FId09BO0FBQ0E7QUd0T0E7Ozs7O0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7O0FBQUE7QUFNQTtBSHVPQTtBQUNBO0FHck9BO0FBQ0E7QUFDQTtBSHVPQTtBQUNBO0FHck9BO0FBQ0E7QUFDQTtBSHVPQTtBQUNBO0FHck9BO0FBQ0E7QUh1T0E7QUFDQTtBR3JPQTtBQUNBO0FBQ0E7QUh1T0E7QUFDQTtBR3JPQTtBQUNBO0FBQ0E7QUh1T0E7QUFDQTtBR3JPQTs7O0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUh1T0E7QUFDQTtBR3JPQTs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBaUJBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSHdPQTtBQUNBO0FHdE9BO0FBQ0E7QUh3T0E7QUFDQTtBR3RPQTtBQUNBO0FId09BO0FBQ0E7QUd0T0E7QUFDQTtBQUNBO0FId09BO0FBQ0E7QUdyT0E7QUFFQTs7QUFBQTtBQUdBO0FBQ0E7QUhzT0E7QUFDQTtBR3BPQTtBQUNBO0FIc09BO0FBQ0E7QUdwT0E7QUFDQTtBQUNBO0FIc09BO0FBQ0E7QUdwT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSHNPQTtBQUNBO0FHbk9BO0FBQ0E7QUFDQTtBQUNBO0FIcU9BO0FBQ0E7QUduT0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBSG9PQTtBQUNBO0FHbE9BO0FBQ0E7QUFDQTtBSG9PQTtBQUNBO0FHbE9BO0FBQ0E7QUFDQTtBQUNBO0FIb09BO0FHak9BO0FBQ0E7QUFDQTtBSG1PQTtBQUNBO0FHaE9BO0FBQ0E7QUFDQTtBQUNBO0FIa09BO0FBQ0E7QUdoT0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIa09BO0FBQ0E7QUc5TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSGdPQTtBQUNBO0FHOU5BO0FBQ0E7QUFDQTtBSGdPQTtBQUNBO0FHOU5BOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIZ09BO0FBQ0E7QUc5TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSGdPQTtBQUNBO0FHOU5BO0FBQ0E7QUhnT0E7QUFDQTtBRzlOQTtBQUNBO0FBQ0E7QUFDQTtBSGdPQTtBQUNBO0FHOU5BO0FBQ0E7QUFDQTtBSGdPQTtBQUNBO0FHOU5BO0FBQ0E7QUhnT0E7QUFDQTtBRzlOQTtBQUNBO0FIZ09BO0FBQ0E7QUc5TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIZ09BO0FBQ0E7QUc5TkE7QUFDQTtBSGdPQTtBQUNBO0FHOU5BO0FBQ0E7QUFDQTtBQUNBO0FIZ09BO0FBQ0E7QUc5TkE7O0FBQUE7QUFHQTtBQUNBO0FIZ09BO0FBQ0E7QUc5TkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhnT0E7QUFDQTtBRzlOQTtBQUNBO0FIZ09BO0FBQ0E7QUc5TkE7QUFDQTtBQUNBO0FBQ0E7QUhnT0E7QUFDQTtBRzlOQTs7QUFFQTtBSGdPQTtBQUNBO0FHOU5BO0FBQ0E7QUFDQTtBSGdPQTtBQUNBO0FHOU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIZ09BO0FBQ0E7QUc5TkE7QUFDQTtBSGdPQTtBQUNBO0FHOU5BO0FBQ0E7QUhnT0E7QUFDQTtBRzlOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhnT0E7QUFDQTtBRzlOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSGdPQTtBQUNBO0FHOU5BO0FBQ0E7QUhnT0E7QUFDQTtBRzlOQTtBQUNBO0FBQ0E7QUhnT0E7QUFDQTtBRzlOQTs7Ozs7Ozs7OztBQUFBO0FBV0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FIK05BO0FBQ0E7QUc3TkE7QUFBQTtBQUVBO0FBQ0E7QUgrTkE7QUFDQTtBRzdOQTtBQUNBO0FBQ0E7QUgrTkE7QUFDQTtBRzdOQTs7OztBQUFBO0FBS0E7QUFDQTtBSCtOQTtBQUNBO0FHN05BO0FBQ0E7QUgrTkE7QUFDQTtBRzdOQTtBQUNBO0FIK05BO0FBQ0E7QUc3TkE7O0FBRUE7QUgrTkE7QUFDQTtBRzdOQTs7QUFFQTtBSCtOQTtBQUNBO0FHN05BO0FBQ0E7QUFDQTtBSCtOQTtBQUNBO0FHN05BO0FBQ0E7QUgrTkE7QUFDQTtBRzdOQTtBQUNBO0FIK05BO0FBQ0E7QUc3TkE7QUFDQTtBSCtOQTtBQUNBO0FHN05BO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSGdPQTtBQUNBO0FHOU5BO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhnT0E7QUFDQTtBRzlOQTtBQUNBO0FBQ0E7QUFDQTtBSGdPQTtBQUNBO0FHOU5BO0FBQ0E7QUhnT0E7QUFDQTtBRzdOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSCtOQTtBQUNBO0FHNU5BO0FBQ0E7QUFDQTtBQUNBO0FIOE5BO0FBQ0E7QUc1TkE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQXVCQTtBQUNBO0FBRUE7Ozs7Ozs7Ozs7QUFBQTtBQVdBO0FBQUE7QUFFQTs7O0FBQUE7QUFJQTtBQUNBO0FBRUE7O0FBQUE7QUFHQTtBSDJOQTtBQUNBO0FHdk5BO0FBQ0E7QUFFQTtBQUNBO0FId05BO0FBQ0E7QUdwTkE7O0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUhtTkE7QUFDQTtBR2pOQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FIa05BO0FBQ0E7QUc5TUE7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFrQkE7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBSGdOQTtBQUNBO0FHNU1BOzs7OztBQUFBO0FBTUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBSDZNQTtBQUNBO0FHek1BOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQXNCQTtBQUNBO0FIMk1BO0FBQ0E7QUd6TUE7QUFDQTtBQUVBOzs7OztBQUFBO0FBTUE7QUgwTUE7QUFDQTtBR3RNQTs7Ozs7Ozs7O0FBQUE7QUFVQTs7OztBQUlBO0FId01BO0FBQ0E7QUd0TUE7QUFDQTs7Ozs7OztBQU9BO0FId01BO0FBQ0E7QUdwTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIc01BO0FBQ0E7QUdwTUE7QUFDQTtBQUNBO0FIc01BO0FBQ0E7QUduTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIcU1BO0FBQ0E7QUduTUE7QUFDQTtBQUNBO0FBQ0E7QUhxTUE7QUFDQTtBR25NQTtBQUNBO0FBQ0E7QUhxTUE7QUFDQTtBR25NQTtBQUNBO0FIcU1BO0FBQ0E7QUduTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFHQTtBQUdBO0FBR0E7QUFFQTtBQUNBO0FINkxBO0FBQ0E7QUd4TEE7QUFBQTtBQUVBO0FBQ0E7QUgwTEE7QUFDQTtBR3hMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FIeUxBO0FBQ0E7QUd2TEE7QUFDQTtBQUNBO0FIeUxBO0FBQ0E7QUdyTEE7QUFDQTtBQUNBO0FIdUxBO0FBQ0E7QUdyTEE7QUFDQTtBQUNBO0FBQ0E7QUh1TEE7QUFDQTtBR3JMQTtBQUNBO0FBQ0E7QUh1TEE7QUFDQTtBR3JMQTtBQUNBO0FIdUxBO0FBQ0E7QUdyTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIdUxBO0FBQ0E7QUduTEE7QUFDQTtBQUNBO0FIcUxBO0FBQ0E7QUduTEE7QUFDQTtBQUNBO0FIcUxBO0FBQ0E7QUdsTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSG9MQTtBQUNBO0FHbExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhvTEE7QUFDQTtBR2pMQTs7QUFBQTtBQUdBO0FBQ0E7QUFDQTtBSG1MQTtBQUNBO0FHaExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSGtMQTtBQUNBO0FHaExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhrTEE7QUFDQTtBR2hMQTtBQUNBO0FBQ0E7QUFDQTtBSGtMQTtBQUNBO0FHaExBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FIbUxBO0FBQ0E7QUdqTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhtTEE7QUFDQTtBR2pMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSGlMQTtBQUNBO0FHL0tBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhpTEE7QUFDQTtBRy9LQTtBQUNBO0FBQ0E7QUhpTEE7QUFDQTtBRy9LQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIaUxBO0FBQ0E7QUcvS0E7QUFDQTs7QUFFQTtBSGlMQTtBQUNBO0FHL0tBOztBQUVBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUhrTEE7QUFDQTtBR2hMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIa0xBO0FBQ0E7QUdoTEE7QUFDQTtBSGtMQTtBQUNBO0FHaExBO0FBQ0E7QUhrTEE7QUFDQTtBR2hMQTs7QUFFQTtBQUNBO0FIa0xBO0FBQ0E7QUdoTEE7QUFDQTtBQUNBO0FIa0xBO0FBQ0E7QUdoTEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIa0xBO0FBQ0E7QUdoTEE7QUFDQTtBQUNBO0FIa0xBO0FBQ0E7QUdoTEE7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQWVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIaUxBO0FBQ0E7QUcvS0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSGlMQTtBQUNBO0FHL0tBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhpTEE7QUFDQTtBRy9LQTtBQUNBO0FBQ0E7QUFDQTtBSGlMQTtBQUNBO0FHL0tBOztBQUVBO0FBQ0E7QUhpTEE7QUFDQTtBRy9LQTtBQUNBO0FBQ0E7QUhpTEE7QUFDQTtBRy9LQTtBQUNBO0FBQ0E7QUhpTEE7QUFDQTtBRy9LQTtBQUNBO0FBQ0E7QUFDQTtBSGlMQTtBQUNBO0FHL0tBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSGlMQTtBQUNBO0FHL0tBO0FBQ0E7QUhpTEE7QUFDQTtBRy9LQTtBQUNBO0FBQ0E7QUhpTEE7QUFDQTtBRy9LQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUhpTEE7QUFDQTtBRy9LQTs7Ozs7Ozs7QUFBQTtBQVVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSGdMQTtBQUNBO0FHOUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIZ0xBO0FBQ0E7QUc5S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSGdMQTtBQUNBO0FHOUtBO0FBQ0E7QUFDQTtBQUNBO0FIZ0xBO0FBQ0E7QUc5S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIZ0xBO0FBQ0E7QUc5S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIZ0xBO0FBQ0E7QUc5S0E7QUFDQTtBQUNBO0FBQ0E7QUhnTEE7QUFDQTtBRzlLQTtBQUNBO0FBQ0E7QUFDQTtBSGdMQTtBQUNBO0FHOUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhnTEE7QUFDQTtBRzlLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhnTEE7QUFDQTtBRzlLQTtBQUNBO0FBQ0E7QUhnTEE7QUFDQTtBRzlLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSGdMQTtBQUNBO0FHOUtBO0FBQ0E7QUhnTEE7QUFDQTtBRzlLQTtBQUNBO0FBQ0E7QUFDQTtBSGdMQTtBQUNBO0FHOUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhnTEE7QUFDQTtBRzlLQTtBQUNBO0FIZ0xBO0FBQ0E7QUc3S0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBSCtLQTtBQUNBO0FHN0tBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIK0tBO0FBQ0E7QUc3S0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBSCtLQTtBQUNBO0FHN0tBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUgrS0E7QUFDQTtBRzdLQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FIK0tBO0FBQ0E7QUc3S0E7QUFFQTs7OztBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSDJLQTtBQUNBO0FHektBO0FBQ0E7QUFDQTtBQUNBO0FIMktBO0FBQ0E7QUd6S0E7QUFDQTs7QUFFQTtBSDJLQTtBQUNBO0FHektBOztBQUVBO0FIMktBO0FBQ0E7QUd6S0E7QUFDQTtBQUNBO0FIMktBO0FBQ0E7QUd6S0E7Ozs7OztBQUFBO0FBT0E7QUFDQTtBQUNBO0FBQ0E7QUgyS0E7QUFDQTtBR3pLQTtBQUNBO0FIMktBO0FBQ0E7QUd6S0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSDBLQTtBQUNBO0FHeEtBO0FBQ0E7QUFDQTtBSDBLQTtBQUNBO0FHeEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUgwS0E7QUFDQTtBR3hLQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIMEtBO0FBQ0E7QUd4S0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUgwS0E7QUFDQTtBR3hLQTtBQUNBO0FBQ0E7QUFDQTtBSDBLQTtBQUNBO0FHeEtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSDBLQTtBQUNBO0FHeEtBO0FBSUE7QUh1S0E7QUFDQTtBR3JLQTtBQUdBO0FBQ0E7QUhxS0E7QUFDQTtBR25LQTtBQUNBO0FBQ0E7QUhxS0E7QUFDQTtBR25LQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIcUtBO0FBQ0E7QUduS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIcUtBO0FBQ0E7QUduS0E7QUFDQTtBQUNBO0FIcUtBO0FBQ0E7QUduS0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhxS0E7QUFDQTtBR25LQTtBQUNBO0FIcUtBO0FBQ0E7QUduS0E7QUFDQTtBQUNBO0FBQ0E7QUhxS0E7QUFDQTtBR25LQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIcUtBO0FBQ0E7QUduS0E7QUFDQTtBSHFLQTtBQUNBO0FHbktBO0FBQ0E7QUhxS0E7QUFDQTtBR25LQTtBQUNBO0FBQ0E7QUhxS0E7QUFDQTtBR25LQTtBQUNBO0FIcUtBO0FBQ0E7QUduS0E7QUFDQTtBSHFLQTtBQUNBO0FHbEtBOztBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhvS0E7QUFDQTtBRy9KQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBSGlLQTtBQUNBO0FHL0pBO0FBQ0E7QUFDQTtBSGlLQTtBQUNBO0FHL0pBO0FBQ0E7QUhpS0E7QUFDQTtBRy9KQTtBQUNBO0FBQ0E7QUFDQTtBSGlLQTtBQUNBO0FHL0pBO0FBQ0E7QUFDQTtBSGlLQTtBQUNBO0FHL0pBO0FBQ0E7QUFDQTtBSGlLQTtBQUNBO0FHL0pBO0FBQ0E7QUFDQTtBSGlLQTtBQUNBO0FHL0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSGlLQTtBQUNBO0FHL0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhpS0E7QUFDQTtBRy9KQTtBQUNBO0FBQ0E7QUFDQTtBSGlLQTtBQUNBO0FHL0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIaUtBO0FBQ0E7QUcvSkE7QUFDQTtBSGlLQTtBQUNBO0FHL0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUhrS0E7QUFDQTtBR2hLQTtBQUNBO0FIa0tBO0FBQ0E7QUdoS0E7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBSGtLQTtBR3BLQTtBQUNBO0FBQ0E7QUhrS0E7QUFDQTtBR2hLQTtBQUFBO0FBRUE7QUFDQTtBSGtLQTtBR25LQTtBQUNBO0FIa0tBO0FBQ0E7QUdoS0E7QUFDQTtBQUNBO0FIa0tBO0FBQ0E7QUcvSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhpS0E7QUFDQTtBRy9KQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIaUtBO0FBQ0E7QUcvSkE7QUFDQTtBQUNBO0FBQ0E7QUhpS0E7QUFDQTtBRy9KQTtBQUVBOzs7O0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUgrSkE7QUFDQTtBRzdKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIK0pBO0FBQ0E7QUc3SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSCtKQTtBQUNBO0FHN0pBO0FBQ0E7QUFDQTtBSCtKQTtBQUNBO0FHN0pBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUgrSkE7QUFDQTtBRzdKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSCtKQTtBQUNBO0FHN0pBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSCtKQTtBQUNBO0FHN0pBOztBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIK0pBO0FBQ0E7QUcxSkE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSDRKQTtBQUNBO0FHMUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSDRKQTtBQUNBO0FHMUpBO0FBQ0E7QUFDQTtBSDRKQTtBQUNBO0FHMUpBO0FBQ0E7QUFDQTtBQUNBO0FINEpBO0FBQ0E7QUcxSkE7QUFDQTtBSDRKQTtBQUNBO0FHMUpBO0FBQ0E7QUFDQTtBSDRKQTtBQUNBO0FHMUpBOzs7OztBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUh3SkE7QUFDQTtBR3RKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FId0pBO0FBQ0E7QUd0SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUh3SkE7QUFDQTtBR3RKQTtBQUNBO0FId0pBO0FBQ0E7QUd0SkE7QUFDQTtBSHdKQTtBQUNBO0FHdEpBO0FBQ0E7QUh3SkE7QUFDQTtBR3RKQTtBQUNBO0FBQ0E7QUh3SkE7QUFDQTtBR3ZKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIeUpBO0FBQ0E7QUd2SkE7QUFDQTtBQUNBO0FIeUpBO0FBQ0E7QUd2SkE7QUFBQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBRUE7Ozs7Ozs7QUFBQTtBQVFBO0FBRUE7Ozs7OztBQUFBO0FBT0E7QUhxSkE7QUFDQTtBR25KQTtBQUNBO0FIcUpBO0FBQ0E7QUduSkE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhvSkE7QUFDQTtBR2xKQTtBQUNBO0FBQ0E7QUhvSkE7QUFDQTtBR2xKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhvSkE7QUFDQTtBR2xKQTtBQUNBO0FIb0pBO0FBQ0E7QUdqSkE7O0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIb0pBO0FBQ0E7QUdsSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQUE7QUFFQTtBQUVBOzs7OztBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSGtKQTtBQUNBO0FHaEpBO0FBQ0E7QUFDQTtBSGtKQTtBQUNBO0FHaEpBO0FBQ0E7QUhrSkE7QUFDQTtBR2hKQTtBQUNBO0FBQ0E7QUhrSkE7QUFDQTtBR2hKQTtBQUNBO0FIa0pBO0FBQ0E7QUdoSkE7Ozs7O0FBQUE7QUFNQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBSG1KQTtBQUNBO0FHakpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FIcUpBO0FBQ0E7QUduSkE7QUFDQTtBQUNBO0FIcUpBO0FBQ0E7QUduSkE7QUFDQTtBQUNBO0FIcUpBO0FBQ0E7QUduSkE7QUFDQTtBQUNBO0FIcUpBO0FBQ0E7QUduSkE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhzSkE7QUFDQTtBR3BKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIc0pBO0FBQ0E7QUdwSkE7QUFDQTtBQUNBO0FIc0pBO0FBQ0E7QUdwSkE7QUFDQTtBQUFBO0FIdUpBO0FBQ0E7QUdySkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIdUpBO0FBQ0E7QUdySkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIdUpBO0FBQ0E7QUdySkE7QUFDQTtBQUNBO0FBQ0E7QUh1SkE7QUFDQTtBR3BKQTtBQUNBO0FIc0pBO0FBQ0E7QUdwSkE7QUFDQTtBQUNBO0FIc0pBO0FBQ0E7QUdwSkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSHNKQTtBQUNBO0FHcEpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSHNKQTtBQUNBO0FHcEpBO0FBQ0E7QUhzSkE7QUFDQTtBR3BKQTtBQUNBO0FIc0pBO0FBQ0E7QUdwSkE7QUFDQTtBQUdBO0FBQ0E7QUhvSkE7QUdqSkE7QUFDQTtBQUNBO0FIbUpBO0FBQ0E7QUdoSkE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBb0JBO0FBQ0E7QUFDQTtBQUNBO0FIaUpBO0FBQ0E7QUcvSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSGlKQTtBQUNBO0FHL0lBO0FBQ0E7QUhpSkE7QUFDQTtBRy9JQTtBQUNBO0FBQ0E7QUFDQTtBSGlKQTtBQUNBO0FHL0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSGlKQTtBQUNBO0FHL0lBO0FBQ0E7QUhpSkE7QUFDQTtBRy9JQTtBQUVBO0FBRUE7QUFFQTtBQUNBO0FBRUE7O0FBQUE7QUFHQTtBQUNBO0FINklBO0FBQ0E7QUczSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSDZJQTtBRzFJQTtBQUNBO0FBQ0E7QUFDQTtBSDRJQTtBQUNBO0FHeklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUgySUE7QUd4SUE7QUFDQTtBQUNBO0FIMElBO0FBQ0E7QUd2SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOztBQUFBO0FIMElBO0FBQ0E7QUd0SUE7QUFDQTtBQUNBO0FId0lBO0FBQ0E7QUd0SUE7QUFDQTtBSHdJQTtBQUNBO0FHdElBO0FBQ0E7QUFDQTtBSHdJQTtBQUNBO0FHdElBO0FBQ0E7QUh3SUE7QUFDQTtBR3RJQTtBQUNBO0FBRUE7O0FBQUE7QUFHQTtBQUNBO0FIdUlBO0FBQ0E7QUdySUE7QUFDQTtBQUNBO0FIdUlBO0FBQ0E7QUdySUE7QUFDQTtBQUNBO0FBQ0E7QUh1SUE7QUFDQTtBR3JJQTtBQUNBO0FIdUlBO0FBQ0E7QUdySUE7QUFDQTtBQUNBO0FIdUlBO0FBQ0E7QUdySUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBSHlJQTtBQUNBO0FHdklBOztBQUVBO0FBQ0E7QUh5SUE7QUFDQTtBR3ZJQTtBQUNBO0FBQ0E7QUFDQTtBSHlJQTtBQUNBO0FHdklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUh5SUE7QUFDQTtBR3ZJQTtBQUNBO0FBQ0E7QUFDQTtBSHlJQTtBQUNBO0FHdklBO0FBQ0E7QUFDQTtBSHlJQTtBQUNBO0FHdklBO0FBQ0E7QUh5SUE7QUFDQTtBR3ZJQTtBQUNBO0FIeUlBO0FBQ0E7QUd2SUE7QUFDQTtBSHlJQTtBQUNBO0FHdklBO0FBQ0E7QUh5SUE7QUFDQTtBR3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSHlJQTtBQUNBO0FHdklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUh5SUE7QUFDQTtBR3ZJQTtBQUNBO0FIeUlBO0FBQ0E7QUd2SUE7QUFDQTtBSHlJQTtBQUNBO0FHdElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FId0lBO0FBQ0E7QUd0SUE7QUFDQTtBQUNBO0FId0lBO0FBQ0E7QUd0SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBSHlJQTtBQUNBO0FHdklBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSHlJQTtBQUNBO0FHdklBO0FBQ0E7QUh5SUE7QUFDQTtBR3ZJQTtBQUNBO0FBQ0E7QUh5SUE7QUFDQTtBR3ZJQTtBQUNBO0FBQ0E7QUh5SUE7QUFDQTtBR3ZJQTtBQUNBO0FIeUlBO0FBQ0E7QUd2SUE7QUFDQTtBSHlJQTtBQUNBO0FHdklBO0FBQ0E7QUh5SUE7QUFDQTtBR3ZJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7Ozs7O0FBQUE7QUFVQTtBSHdJQTtBQUNBO0FHcElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSHNJQTtBQUNBO0FHcElBO0FBQ0E7QUFDQTtBSHNJQTtBQUNBO0FHcElBO0FBQ0E7QUFDQTtBQUNBO0FIc0lBO0FBQ0E7QUdwSUE7Ozs7QUFBQTtBQUtBO0FBQ0E7QUhzSUE7QUFDQTtBR3BJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSHNJQTtBQUNBO0FHcElBO0FBQ0E7QUhzSUE7QUFDQTtBR3BJQTs7QUFFQTtBQUNBO0FBQ0E7QUhzSUE7QUFDQTtBR3BJQTs7QUFFQTtBSHNJQTtBQUNBO0FHcElBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIc0lBO0FBQ0E7QUdwSUE7QUFDQTtBSHNJQTtBQUNBO0FHcElBO0FBQ0E7QUhzSUE7QUFDQTtBR3BJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhzSUE7QUFDQTtBR3BJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSHNJQTtBQUNBO0FHcElBO0FBQ0E7QUhzSUE7QUFDQTtBR3BJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIc0lBO0FBQ0E7QUdwSUE7QUFDQTtBSHNJQTtBQUNBO0FHcElBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUhxSUE7QUFDQTtBR2pJQTs7Ozs7Ozs7Ozs7OztBQUFBO0FBY0E7OztBQUdBO0FBQ0E7QUFFQTtBQUNBO0FIa0lBO0FBQ0E7QUc5SEE7OztBQUdBO0FBQ0E7QUFFQTtBQUNBO0FIK0hBO0FBQ0E7QUczSEE7O0FBQUE7QUFHQTtBQUFBO0FIOEhBO0FBQ0E7QUc5SEE7QUFBQTtBSGlJQTtBQUNBO0FHaklBO0FBQUE7QUhvSUE7QUFDQTtBR3BJQTtBQUFBO0FIdUlBO0FBQ0E7QUd2SUE7QUFBQTtBSDBJQTtBQUNBO0FHMUlBO0FBQUE7QUg2SUE7QUFDQTtBRzdJQTtBQUFBO0FIZ0pBO0FBQ0E7QUdoSkE7QUFBQTtBSG1KQTtBQUNBO0FHbEpBO0FBQ0E7QUhvSkE7QUFDQTtBR2xKQTtBQUNBOzs7Ozs7OztBQVFBO0FBQ0E7QUhvSkE7QUFDQTtBR2pKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7O0FBQUE7QUFHQTtBQUVBOzs7O0FBQUE7QUFLQTtBSGlKQTtBQUNBO0FHL0lBO0FBQ0E7QUFDQTtBQUNBO0FIaUpBO0FBQ0E7QUcvSUE7QUFDQTtBQUNBO0FIaUpBO0FBQ0E7QUcvSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIaUpBO0FBQ0E7QUcvSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhpSkE7QUFDQTtBRy9JQTtBQUNBOztBQUVBO0FBQUE7QUhrSkE7QUFDQTtBR2hKQTtBQUNBO0FIa0pBO0FBQ0E7QUdoSkE7QUFDQTtBSGtKQTtBQUNBO0FHL0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhpSkE7QUFDQTtBRy9JQTtBQUNBO0FIaUpBO0FBQ0E7QUcvSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhpSkE7QUFDQTtBRy9JQTtBQUNBO0FBQ0E7QUFDQTtBSGlKQTtBQUNBO0FHL0lBO0FBQ0E7QUhpSkE7QUFDQTtBRy9JQTtBQUNBO0FBQ0E7QUFDQTtBSGlKQTtBQUNBO0FHL0lBO0FBQ0E7QUhpSkE7QUFDQTtBRy9JQTtBQUNBO0FIaUpBO0FBQ0E7QUcvSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUhpSkE7QUFDQTtBRy9JQTtBQUNBO0FBQ0E7QUFDQTtBSGlKQTtBQUNBO0FHL0lBO0FBQ0E7QUhpSkE7QUFDQTtBRy9JQTtBQUNBO0FIaUpBO0FBQ0E7QUcvSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSGlKQTtBQUNBO0FHL0lBOzs7O0FBQUE7QUFLQTtBQUNBO0FBQ0E7QUhpSkE7QUFDQTtBRzlJQTs7Ozs7QUFBQTtBQU1BOztBQUVBO0FBRUE7Ozs7QUFBQTtBQUtBO0FIK0lBO0FBQ0E7QUc3SUE7QUFDQTs7QUFFQTtBSCtJQTtBQUNBO0FHN0lBO0FBRUE7OztBQUFBO0FBSUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSDhJQTtBQUNBO0FHN0lBO0FBQ0E7QUFDQTtBQUNBO0FIK0lBO0FBQ0E7QUc5SUE7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUNBO0FBR0E7QUFDQTtBSDZJQTtBQUNBO0FHNUlBO0FBQ0E7QUFDQTtBQUNBO0FIOElBO0FBQ0E7QUc3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7OztBQUFBO0FBUUE7QUFDQTtBQUNBO0FBQ0E7QUFHQTtBSDRJQTtBQUNBO0FHM0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUg2SUE7QUFDQTtBRzFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSDRJQTtBQUNBO0FHM0lBO0FBQ0E7QUg2SUE7QUFDQTtBRzVJQTtBQUNBO0FIOElBO0FBQ0E7QUc3SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIK0lBO0FBQ0E7QUc5SUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSGdKQTtBQUNBO0FHL0lBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSGlKQTtBQUNBO0FHaEpBO0FBQ0E7QUhrSkE7QUFDQTtBR2pKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIbUpBO0FBQ0E7QUdsSkE7QUFDQTtBSG9KQTtBQUNBO0FHdEpBO0FBQ0E7QUhvSkE7QUFDQTtBR25KQTtBQUNBO0FIcUpBO0FBQ0E7QUdwSkE7QUFDQTtBQUNBO0FBQ0E7QUhzSkE7QUFDQTtBR3JKQTtBQUNBO0FIdUpBO0FBQ0E7QUd0SkE7QUFDQTtBSHdKQTtBQUNBO0FHdkpBOzs7QUFHQTtBQUNBO0FIeUpBO0FBQ0E7QUd4SkE7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSDBKQTtBQUNBO0FHekpBO0FBQ0E7QUgySkE7QUFDQTtBRzFKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FINEpBO0FBQ0E7QUcxSkE7QUFDQTtBQUNBO0FINEpBO0FBQ0E7QUczSkE7QUFDQTtBQUNBO0FINkpBO0FBQ0E7QUc1SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FIOEpBO0FBQ0E7QUc3SkE7QUFDQTtBSCtKQTtBQUNBO0FHOUpBO0FBQ0E7QUhnS0E7QUFDQTtBRy9KQTtBQUNBO0FBQ0E7QUhpS0E7QUFDQTtBR2hLQTtBQUNBO0FBQ0E7QUFDQTtBSGtLQTtBQUNBO0FHaktBOztBQUVBO0FIbUtBO0FBQ0E7QUlscUhBOztBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKb3FIQTtBQUNBO0FJbHFIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSm9xSEE7QUFDQTtBSWxxSEE7Ozs7Ozs7Ozs7O0FBQUE7QUFZQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUpvcUhBO0FBQ0E7QUlscUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUpvcUhBO0FBQ0E7QUlscUhBO0FBRUE7Ozs7QUFBQTtBQUtBO0FBRUE7O0FBQUE7QUpvcUhBO0FBQ0E7QUlocUhBO0FBRUE7QUFFQTtBQUVBO0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBRUE7QUFBQTtBQU9BO0FBQUE7QUp1cEhBO0FBQ0E7QUlycEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSnVwSEE7QUFDQTtBSXJwSEE7QUFDQTtBSnVwSEE7QUFDQTtBSXJwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUp1cEhBO0FBQ0E7QUlycEhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKdXBIQTtBQUNBO0FJcnBIQTtBQUNBO0FKdXBIQTtBQUNBO0FJenBIQTtBQUNBO0FKdXBIQTtBQUNBO0FJcnBIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKdXBIQTtBQUNBO0FJcnBIQTtBQUNBO0FKdXBIQTtBQUNBO0FJcnBIQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSnVwSEE7QUFDQTtBSXJwSEE7O0FBQUE7QUFHQTtBQUNBO0FBRUE7Ozs7QUFBQTtBQUtBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKc3BIQTtBQUNBO0FJbHBIQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7OztBQUFBO0FBTUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSm1wSEE7QUFDQTtBSWpwSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKbXBIQTtBQUNBO0FJanBIQTtBQUNBO0FBQ0E7QUFHQTtBQUNBO0FBQ0E7QUppcEhBO0FBQ0E7QUk5b0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSmdwSEE7QUFDQTtBSTlvSEE7QUFDQTtBQUNBO0FBQ0E7QUpncEhBO0FBQ0E7QUk5b0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSmdwSEE7QUFDQTtBSTlvSEE7QUFDQTtBQUNBO0FKZ3BIQTtBQUNBO0FJOW9IQTtBQUNBO0FKZ3BIQTtBQUNBO0FJOW9IQTtBQUNBO0FBQ0E7QUpncEhBO0FBQ0E7QUk5b0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSmdwSEE7QUFDQTtBSTlvSEE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBT0E7QUFDQTtBSjJvSEE7QUFDQTtBSXpvSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKMm9IQTtBQUNBO0FJem9IQTtBQUNBO0FBQ0E7QUoyb0hBO0FBQ0E7QUl6b0hBOzs7O0FBQUE7QUFLQTtBQUNBO0FBQ0E7QUoyb0hBO0FBQ0E7QUl4b0hBOzs7OztBQUFBO0FBTUE7QUFDQTs7QUFFQTtBQUVBOzs7O0FBQUE7QUFLQTtBSnlvSEE7QUFDQTtBSXRvSEE7QUFDQTtBSndvSEE7QUFDQTtBSXRvSEE7O0FBQUE7QUFHQTtBQUNBO0FBQ0E7QUp3b0hBO0FBQ0E7QUlyb0hBOzs7O0FBQUE7QUFLQTtBQUNBO0FBQ0E7QUp1b0hBO0FBQ0E7QUlyb0hBO0FBQ0E7QUp1b0hBO0FBQ0E7QUlyb0hBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFPQTtBQUNBO0FBQ0E7QUppb0hBO0FBQ0E7QUkvbkhBO0FBRUE7QUFBQTtBQUVBO0FBQ0E7QUFFQTtBQUFBO0FKZ29IQTtBQUNBO0FJN25IQTtBQUNBO0FKK25IQTtBQUNBO0FJN25IQTtBQUNBO0FKK25IQTtBQUNBO0FJNW5IQTtBQUNBO0FKOG5IQTtBQUNBO0FJNW5IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKOG5IQTtBQUNBO0FJN25IQTtBQUNBO0FKK25IQTtBQUNBO0FJOW5IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUpnb0hBO0FBQ0E7QUk5bkhBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7Ozs7OztBQUFBO0FBT0E7QUFDQTtBSituSEE7QUFDQTtBSTduSEE7QUFDQTtBQUVBOzs7Ozs7OztBQUFBO0FBU0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKOG5IQTtBQUNBO0FJNW5IQTtBQUNBO0FBQ0E7QUo4bkhBO0FBQ0E7QUlqb0hBO0FBQ0E7QUFDQTtBSjhuSEE7QUFDQTtBSTVuSEE7QUFDQTtBSjhuSEE7QUFDQTtBSTVuSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSjhuSEE7QUFDQTtBSTVuSEE7QUFDQTtBSjhuSEE7QUFDQTtBSTVuSEE7QUFDQTtBQUNBO0FKOG5IQTtBQUNBO0FJNW5IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSjhuSEE7QUFDQTtBSTVuSEE7QUFDQTtBQUNBO0FKOG5IQTtBQUNBO0FJNW5IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUo4bkhBO0FBQ0E7QUk1bkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSjhuSEE7QUFDQTtBSTVuSEE7QUFDQTtBSjhuSEE7QUFDQTtBSTVuSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKOG5IQTtBQUNBO0FJMW5IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKMm5IQTtBQUNBO0FJem5IQTtBQUNBO0FBQ0E7QUoybkhBO0FBQ0E7QUkxbkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUo0bkhBO0FBQ0E7QUkxbkhBOzs7Ozs7QUFNQTtBSjRuSEE7QUFDQTtBSTFuSEE7Ozs7Ozs7QUFPQTtBSjRuSEE7QUFDQTtBSTFuSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKNG5IQTtBQUNBO0FJMW5IQTtBQUNBO0FKNG5IQTtBQUNBO0FJMW5IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUo0bkhBO0FBQ0E7QUkxbkhBO0FBQ0E7QUo0bkhBO0FBQ0E7QUkxbkhBO0FBQ0E7QUFDQTtBQUNBO0FKNG5IQTtBQUNBO0FJMW5IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKNG5IQTtBQUNBO0FJMW5IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKNG5IQTtBQUNBO0FJMW5IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQU9BO0FKc25IQTtBQUNBO0FJcG5IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKc25IQTtBQUNBO0FJcG5IQTtBQUNBO0FBQ0E7QUpzbkhBO0FBQ0E7QUlubkhBO0FBQ0E7QUFDQTtBSnFuSEE7QUFDQTtBSWxuSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKb25IQTtBQUNBO0FJbG5IQTs7QUFFQTtBQUNBO0FBQ0E7QUpvbkhBO0FBQ0E7QUlsbkhBO0FBQ0E7QUpvbkhBO0FBQ0E7QUlsbkhBO0FBQ0E7QUFDQTtBSm9uSEE7QUFDQTtBSWxuSEE7QUFDQTtBQUNBO0FBQ0E7QUpvbkhBO0FBQ0E7QUlsbkhBO0FBQ0E7QUpvbkhBO0FBQ0E7QUlsbkhBO0FBQ0E7QUFDQTtBQUNBO0FKb25IQTtBQUNBO0FJam5IQTtBQUNBO0FBQ0E7QUptbkhBO0FBQ0E7QUlqbkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSm1uSEE7QUFDQTtBSWpuSEE7QUFDQTtBSm1uSEE7QUFDQTtBSWpuSEE7QUFDQTtBQUNBO0FKbW5IQTtBQUNBO0FJam5IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FKbW5IQTtBQUNBO0FJam5IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUptbkhBO0FBQ0E7QUlqbkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUptbkhBO0FBQ0E7QUlqbkhBO0FBQ0E7QUptbkhBO0FBQ0E7QUlqbkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSm1uSEE7QUFDQTtBSWpuSEE7QUFDQTtBSm1uSEE7QUFDQTtBSWpuSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUptbkhBO0FBQ0E7QUlqbkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUptbkhBO0FBQ0E7QUlqbkhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUptbkhBO0FBQ0E7QUlqbkhBO0FBQ0E7QUptbkhBO0FBQ0E7QUlqbkhBO0FBQ0E7QUFDQTtBSm1uSEE7QUFDQTtBSWpuSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKbW5IQTtBQUNBO0FJam5IQTtBQUNBO0FKbW5IQTtBQUNBO0FJam5IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKbW5IQTtBQUNBO0FJam5IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKbW5IQTtBQUNBO0FJaG5IQTtBQUVBOzs7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBSmluSEE7QUFDQTtBSS9tSEE7QUFDQTtBQUNBO0FKaW5IQTtBQUNBO0FJL21IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKaW5IQTtBQUNBO0FJL21IQTtBQUNBO0FKaW5IQTtBQUNBO0FJL21IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKaW5IQTtBQUNBO0FJL21IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FKaW5IQTtBQUNBO0FJL21IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUppbkhBO0FBQ0E7QUkvbUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSmluSEE7QUFDQTtBSS9tSEE7OztBQUdBO0FKaW5IQTtBQUNBO0FJL21IQTtBQUNBO0FKaW5IQTtBQUNBO0FJL21IQTs7O0FBQUE7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBSmluSEE7QUFDQTtBSS9tSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUppbkhBO0FBQ0E7QUkvbUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSmluSEE7QUFDQTtBSS9tSEE7QUFDQTtBQUNBO0FBQ0E7QUppbkhBO0FBQ0E7QUkvbUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUppbkhBO0FBQ0E7QUkvbUhBO0FBQ0E7QUppbkhBO0FBQ0E7QUkvbUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUppbkhBO0FBQ0E7QUkvbUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUppbkhBO0FBQ0E7QUkvbUhBO0FBQ0E7QUFDQTtBQUNBO0FKaW5IQTtBQUNBO0FJL21IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKaW5IQTtBQUNBO0FJL21IQTtBQUNBO0FKaW5IQTtBQUNBO0FJL21IQTtBQUNBO0FBQ0E7QUppbkhBO0FBQ0E7QUkvbUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUppbkhBO0FBQ0E7QUkvbUhBO0FBQ0E7QUppbkhBO0FBQ0E7QUkvbUhBO0FBQ0E7QUppbkhBO0FBQ0E7QUkvbUhBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSmluSEE7QUFDQTtBSS9tSEE7QUFDQTtBSmluSEE7QUFDQTtBSS9tSEE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBSmluSEE7QUFDQTtBSS9tSEE7Ozs7Ozs7QUFPQTtBSmluSEE7QUFDQTtBSS9tSEE7QUFDQTtBSmluSEE7QUFDQTtBSS9tSEE7Ozs7Ozs7Ozs7QUFBQTtBQVdBO0FBQ0E7QUFDQTtBQUNBO0FKaW5IQTtBQUNBO0FJOW1IQTs7Ozs7Ozs7O0FBQUE7QUFVQTtBQUNBO0FBQ0E7QUpnbkhBO0FJam5IQTtBQUNBO0FKZ25IQTtBQUNBO0FJN21IQTs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQWtCQTtBQUNBO0FBQ0E7QUFFQTtBQUFBO0FBRUE7QUFDQTtBQUVBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUFFQTs7Ozs7QUFBQTtBQU1BO0FBQ0E7QUo0bUhBO0FBQ0E7QUl2bUhBO0FBQ0E7QUFDQTtBQUNBO0FKeW1IQTtBQUNBO0FJdm1IQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FKeW1IQTtBQUNBO0FJdm1IQTtBQUNBO0FBQ0E7QUp5bUhBO0FBQ0E7QUl0bUhBO0FBQUE7QUFFQTtBQUNBO0FBQ0E7QUp3bUhBO0FBQ0E7QUt0dEpBO0FBRUE7QUFDQTtBQUFBO0FBQ0E7QUFBQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUFBO0FBRUE7QUFFQTtBQUNBO0FBQUE7QUx5dEpBO0FBQ0E7QUt2dEpBOztBQUFBO0FBR0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTs7QUFBQTtBQUdBO0FMd3RKQTtBQUNBO0FLdHRKQTs7OztBQUlBO0FMd3RKQTtBQUNBO0FLdHRKQTs7QUFFQTtBQUVBOzs7QUFBQTtBQUlBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBOzs7Ozs7Ozs7O0FBQUE7QUxndUpBO0FBQ0E7QUtwdEpBO0FBQUE7QUFFQTs7QUFFQTtBTHN0SkE7QUFDQTtBS3B0SkE7QUFDQTtBQUNBO0FMc3RKQTtBQUNBO0FLcHRKQTs7Ozs7O0FBQUE7QUFPQTtBQUNBO0FMc3RKQTtBQUNBO0FLcHRKQTtBQUNBO0FMc3RKQTtBQUNBO0FLcHRKQTtBQUNBO0FBQ0E7QUxzdEpBO0FBQ0E7QUtwdEpBO0FBQ0E7QUxzdEpBO0FBQ0E7QUtwdEpBOztBQUFBO0FBR0E7Ozs7OztBQU1BO0FBQ0E7QUxzdEpBO0FBQ0E7QUtwdEpBO0FBQ0E7QUFDQTtBQUNBO0FMc3RKQTtBQUNBO0FLcHRKQTs7QUFBQTtBQUdBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBTHN0SkE7QUFDQTtBS3B0SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBTHN0SkE7QUFDQTtBS250SkE7QUFDQTtBQUNBO0FBQ0E7QUxxdEpBO0FBQ0E7QU1oM0pBO0FBQ0E7QU5rM0pBO0FBQ0E7QU1oM0pBO0FBQ0E7QUFDQTtBTmszSkE7QUFDQTtBTWgzSkE7QUFDQTtBQUNBO0FBQ0E7QU5rM0pBO0FBQ0E7QU1oM0pBO0FBQ0E7QUFDQTtBTmszSkE7QUFDQTtBTWgzSkE7QUFDQTtBTmszSkE7QUFDQTtBTWgzSkE7QUFFQTtBQUNBO0FBQ0E7QU5pM0pBO0FBQ0E7QU1oM0pBO0FBQ0E7QUFFQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBTmszSkE7QUFDQTtBTWgzSkE7QUFDQTs7QUFFQTtBTmszSkE7QUFDQTtBTWgzSkE7QUFDQTtBQUNBO0FBQ0E7QU5rM0pBO0FBQ0E7QU85NUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FQKzVKQTtBTzc1SkE7QUFsQkE7QUFtQkE7QVBnNkpBO0FBQ0E7QU85NUpBO0FBQ0E7QUFDQTtBQUNBO0FQZzZKQTtBTzU1SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FQODVKQTtBTzM1SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QVA2NUpBO0FPMzVKQTtBQUNBO0FQNjVKQTtBTzE1SkE7QUFDQTtBQUNBO0FBQ0E7QVA0NUpBO0FPeDVKQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FQeTVKQTtBT3Y1SkE7QUFDQTtBQUNBO0FBQ0E7QVB5NUpBO0FPcjVKQTtBQXBCQTtBQXFCQTtBQUNBO0FQdzVKQTtBQUNBO0FPdDVKQTtBQXpCQTtBQTBCQTtBQUNBO0FQeTVKQTtBQUNBO0FPdDVKQTtBQUNBO0FBQ0E7QUFDQTtBUHc1SkE7QU90NUpBO0FBTEE7QUFNQTtBUHk1SkE7QUFDQTtBT3Q1SkE7QUFDQTtBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBUHc1SkE7QU90NUpBO0FBQ0E7QUFDQTtBUHc1SkE7QU90NUpBO0FBQ0E7QUFDQTtBUHc1SkE7QU9yNUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FQdTVKQTtBT241SkE7QUFDQTtBQUNBO0FQcTVKQTtBT2w1SkE7QUF6Q0E7QUEwQ0E7QVBxNUpBO0FBQ0E7QU9sNUpBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBUG81SkE7QU9sNUpBO0FBVkE7QUFXQTtBQUNBO0FQcTVKQTtBQUNBO0FPbjVKQTtBQWZBO0FBZ0JBO0FBQ0E7QVBzNUpBO0FBQ0E7QU9uNUpBO0FBQ0E7QUFDQTtBQUNBO0FBQUE7QUFDQTtBQUFBO0FQcTVKQTtBT2w1SkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVBO0FQbTVKQTtBT2o1SkE7QUFDQTtBUG01SkE7QU9oNUpBO0FBQ0E7QVBrNUpBO0FPMzRKQTtBQUNBO0FQNjRKQTtBTzU0SkE7QUFDQTtBUDg0SkE7QU96NEpBO0FBNUJBO0FBNkJBO0FBQ0E7QUFDQTtBQUNBO0FQNDRKQTtBTzE0SkE7QUFDQTtBQUNBO0FBQ0E7QVA0NEpBO0FPejRKQTtBQUNBO0FQMjRKQTtBT3o0SkE7QUFDQTtBUDI0SkE7QUFDQTsiLCJzb3VyY2VSb290IjoiIn0=*/