/*!*****************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/tokens.css ***!
  \*****************************************************************************************************************/
/*
 * assets/styles/tokens.css — les décisions de design, et rien d'autre.
 *
 * Aucun sélecteur de composant ici : uniquement des custom properties. Un composant
 * ne doit jamais contenir de couleur, de taille de police ou d'espacement en dur ;
 * s'il en a besoin d'une nouvelle, elle s'ajoute d'abord ici.
 *
 * Contrastes : chaque couple texte/fond réellement utilisé est noté à côté du token
 * (ratio WCAG 2.x). Seuils visés : 4.5 texte courant, 3 grand texte et graphismes.
 */

:root {
    /* ------------------------------------------------------------------ Palette */

    /* Les six couleurs du brief. Deux ont été légèrement ajustées, voir plus bas. */
    --color-bg: #0d212e;            /* fond principal, bleu nuit */
    --color-surface: #0d3845;       /* nav, zones sombres secondaires */
    --color-parchment: #f0dcae;     /* pages : cartes livre, formulaires */
    --color-accent: #b15c1f;        /* action principale, progression — à doser */
    --color-success: #47674c;       /* brief #4a6b4f : 4.43 sur parchemin, assombri -> 4.70 */
    --color-text-muted: #5c5347;    /* sur parchemin : 5.59 */

    /* Encre et variantes du parchemin */
    --color-ink: #2a2118;           /* texte sur parchemin : 11.70 */
    /* Fond creusé (champs). Muted dessus : 4.95, danger : 4.94. N'y poser ni
       --color-success (4.16) ni --color-accent-ink (4.11) en texte. */
    --color-parchment-deep: #e6cf9c;
    --color-parchment-edge: #c9ae76;/* tranche des pages (décoratif) */

    /*
     * L'accent #b15c1f ne tient pas le AA comme couleur de texte : 3.52 sur parchemin,
     * 3.47 sur le fond, 2.65 sur la surface. Il reste la couleur de REMPLISSAGE
     * (bouton, barre de progression : graphisme >= 3 sur fond et parchemin), et on
     * dérive deux variantes de même teinte pour le texte et le focus.
     */
    --color-accent-ink: #954d1a;    /* accent en texte sur parchemin : 4.64 */
    --color-accent-bright: #e08a4a; /* accent en texte/focus sur fond : 6.20, surface : 4.74 */
    --color-on-accent: #fffaf3;     /* texte des boutons primaires sur accent : 4.57 */

    --color-danger: #9a2e22;        /* sur parchemin : 5.58 ; texte clair dessus : 7.14 */
    --color-danger-bright: #e8836f; /* sur fond : 6.21 */

    /* Texte sur les fonds sombres */
    --color-text: var(--color-parchment);   /* sur fond : 12.21, surface : 9.32 */
    --color-text-soft: #b8a888;             /* sur fond : 7.06, surface : 5.39 */
    --color-rule: rgb(240 220 174 / .16);   /* filets décoratifs sur fond sombre */

    /*
     * Couleurs de toile des dos de livre (étagère, couvertures de repli). Toutes
     * claires : elles se détachent du bleu nuit (>= 6.2) et portent un titre en
     * --color-bg (>= 6.27). La couleur n'encode aucune donnée, seule la hauteur en porte.
     */
    --cloth-1: #dcb878;             /* ocre */
    --cloth-2: #c9956b;             /* terre cuite */
    --cloth-3: #a9bea0;             /* sauge */
    --cloth-4: #c6aab8;             /* vieux rose */
    --cloth-5: #9fb6c4;             /* bleu gris */
    --cloth-6: #d8c9a8;             /* lin */

    /* -------------------------------------------------------------- Typographie */

    --font-serif: 'Fraunces', 'Iowan Old Style', 'Palatino Linotype', Georgia, serif;
    --font-sans: 'Public Sans', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;

    /* Échelle modulaire, rapport 1.25 (tierce majeure), base 16px */
    --step--2: .64rem;
    --step--1: .8rem;
    --step-0: 1rem;
    --step-1: 1.25rem;
    --step-2: 1.563rem;
    --step-3: 1.953rem;
    --step-4: 2.441rem;
    --step-5: 3.052rem;

    /* Les titres de page grandissent avec l'écran, bornés à deux paliers de l'échelle */
    --step-display: clamp(var(--step-3), 1.35rem + 2.6vw, var(--step-5));

    /* Graisses : chaque usage a la sienne, rien n'est laissé à « bold » */
    --weight-regular: 400;          /* texte courant */
    --weight-medium: 520;           /* libellés de formulaire, nav */
    --weight-semibold: 620;         /* boutons, titres de livre */
    --weight-display: 680;          /* titres de page (Fraunces) */

    --leading-tight: 1.1;
    --leading-snug: 1.3;
    --leading-body: 1.55;

    /* -------------------------------------------------------------- Espacements */

    --space-3xs: .25rem;
    --space-2xs: .5rem;
    --space-xs: .75rem;
    --space-s: 1rem;
    --space-m: 1.5rem;
    --space-l: 2rem;
    --space-xl: 3rem;
    --space-2xl: 4.5rem;

    --gutter: clamp(var(--space-s), 4vw, var(--space-l));
    --width-content: 68rem;
    --width-reading: 40rem;
    --width-narrow: 26rem;

    /* ------------------------------------------------------------------- Formes */

    /*
     * Hiérarchie volontaire des arrondis : un livre a un dos droit et des coins de
     * couverture à peine usés ; un contrôle est net ; seul le badge est franchement
     * arrondi. Pas de rayon unique partout.
     */
    --radius-book: 2px 6px 6px 2px;
    --radius-control: 3px;
    --radius-sheet: 2px;
    --radius-badge: 1em;

    --border-control: 1px solid var(--color-text-muted); /* bord de champ : 5.59, > 3 exigé */

    /*
     * Relief « livre posé » : trois tranches de pages décalées en bas à droite puis
     * une ombre portée courte et dense. Le contraire de la soft-shadow grise uniforme.
     */
    --shadow-book:
        1px 1px 0 #dcc592,
        2px 2px 0 var(--color-parchment-edge),
        3px 3px 0 #b39660,
        0 16px 22px -14px rgb(0 0 0 / .75);
    --shadow-book-lifted:
        1px 1px 0 #dcc592,
        2px 2px 0 var(--color-parchment-edge),
        3px 3px 0 #b39660,
        0 22px 30px -14px rgb(0 0 0 / .8);

    /* ------------------------------------------------------------------- Focus */

    --focus-width: 3px;
    --focus-offset: 2px;
    --focus-color: var(--color-accent-bright); /* redéfini sur parchemin, cf. .paper */

    /* ------------------------------------------------------------------ Motion */

    --ease-out: cubic-bezier(.2, .7, .2, 1);
    --duration-fast: 140ms;
    --duration: 220ms;
}

/* Un seul interrupteur : les composants lisent ces durées, elles tombent à zéro ici. */
@media (prefers-reduced-motion: reduce) {
    :root {
        --duration-fast: 0ms;
        --duration: 0ms;
    }
}

/*!****************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/fonts.css ***!
  \****************************************************************************************************************/
/*
 * assets/styles/fonts.css — polices auto-hébergées, aucune requête vers un CDN.
 *
 * Fichiers issus de Fontsource (licence SIL OFL 1.1, copies dans assets/fonts/).
 * Encore copie chaque woff2 dans public/build/fonts/ ; le service worker les
 * précache via public/build/manifest.json (cf. public/sw.js).
 *
 * - Fraunces, fichiers « opsz » : axes graisse + taille optique. La taille optique
 *   (font-optical-sizing: auto) donne des titres contrastés en grand et un dessin
 *   plus robuste en petit, sans charger les axes SOFT/WONK inutilisés.
 * - Public Sans : axe graisse seul, pas d'italique (non utilisé dans l'UI).
 *
 * Le découpage latin / latin-ext suit les unicode-range de Fontsource : une page en
 * français ne télécharge latin-ext que si un caractère hors latin de base apparaît.
 */

@font-face {
    font-family: 'Fraunces';
    font-style: normal;
    font-weight: 100 900;
    font-display: swap;
    src: url(/build/fonts/fraunces-latin-opsz-normal.252d721d.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
    font-family: 'Fraunces';
    font-style: normal;
    font-weight: 100 900;
    font-display: swap;
    src: url(/build/fonts/fraunces-latin-ext-opsz-normal.b16a2528.woff2) format('woff2');
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* Italique : réservé aux avis de lecture, cités comme dans un carnet. */
@font-face {
    font-family: 'Fraunces';
    font-style: italic;
    font-weight: 100 900;
    font-display: swap;
    src: url(/build/fonts/fraunces-latin-opsz-italic.52edf8fc.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
    font-family: 'Fraunces';
    font-style: italic;
    font-weight: 100 900;
    font-display: swap;
    src: url(/build/fonts/fraunces-latin-ext-opsz-italic.106debbb.woff2) format('woff2');
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

@font-face {
    font-family: 'Public Sans';
    font-style: normal;
    font-weight: 100 900;
    font-display: swap;
    src: url(/build/fonts/public-sans-latin-wght-normal.50608be6.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
    font-family: 'Public Sans';
    font-style: normal;
    font-weight: 100 900;
    font-display: swap;
    src: url(/build/fonts/public-sans-latin-ext-wght-normal.8e4ac7aa.woff2) format('woff2');
    unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/*!***************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/base.css ***!
  \***************************************************************************************************************/
/*
 * assets/styles/base.css — reset minimal et éléments HTML nus.
 *
 * Tout élément sans classe doit déjà être lisible et cohérent ici : c'est ce qui
 * garantit qu'un template oublié ne retombe pas dans le HTML brut.
 */

*,
*::before,
*::after {
    box-sizing: border-box;
}

* {
    margin: 0;
}

html {
    -webkit-text-size-adjust: 100%;
    text-size-adjust: 100%;
    color-scheme: dark;
    background-color: var(--color-bg);
}

body {
    min-height: 100vh;
    min-height: 100dvh;
    font-family: var(--font-sans);
    font-size: var(--step-0);
    font-weight: var(--weight-regular);
    line-height: var(--leading-body);
    color: var(--color-text);
    background-color: var(--color-bg);
    -webkit-font-smoothing: antialiased;
    text-rendering: optimizeLegibility;
}

/* L'attribut hidden doit gagner sur tout display posé par un composant. */
[hidden] {
    display: none !important;
}

img,
svg {
    display: block;
    max-width: 100%;
}

input,
button,
textarea,
select {
    font: inherit;
    color: inherit;
}

/* ------------------------------------------------------------------ Titres */

h1,
h2,
h3,
h4 {
    font-family: var(--font-serif);
    font-optical-sizing: auto;
    line-height: var(--leading-tight);
    text-wrap: balance;
    overflow-wrap: break-word;
}

h1 {
    font-size: var(--step-display);
    font-weight: var(--weight-display);
    letter-spacing: -.015em;
}

h2 {
    font-size: var(--step-2);
    font-weight: var(--weight-semibold);
    letter-spacing: -.005em;
}

h3 {
    font-size: var(--step-1);
    font-weight: var(--weight-semibold);
    line-height: var(--leading-snug);
}

p,
li {
    text-wrap: pretty;
}

/* ------------------------------------------------------------------ Liens */

a {
    color: var(--link-color, var(--color-accent-bright));
    text-decoration-thickness: 1px;
    text-underline-offset: .2em;
    transition: text-decoration-thickness var(--duration-fast) var(--ease-out);
}

a:hover {
    text-decoration-thickness: 2px;
}

/* ------------------------------------------------------------------ Focus */

/*
 * Plancher non négociable : tout élément interactif a un anneau visible au clavier.
 * La couleur suit le fond (--focus-color est redéfini sur parchemin) pour garder
 * un contraste >= 3 avec ce qui l'entoure.
 */
:focus-visible {
    outline: var(--focus-width) solid var(--focus-color);
    outline-offset: var(--focus-offset);
}

:focus:not(:focus-visible) {
    outline: none;
}

::selection {
    color: var(--color-bg);
    background-color: var(--color-accent-bright);
}

/* ------------------------------------------------------------------ Contexte parchemin */

/*
 * Toute zone « page » (carte livre, formulaire, message) pose ses propres couleurs
 * de texte, de lien et de focus. Les composants en héritent sans rien redéclarer.
 */
.paper {
    --link-color: var(--color-accent-ink);      /* 4.64 */
    --focus-color: var(--color-accent-ink);     /* 4.64, anneau >= 3 */
    --text-soft: var(--color-text-muted);       /* 5.59 */
    color: var(--color-ink);                    /* 11.70 */
    background-color: var(--color-parchment);
    color-scheme: light;
}

/* ------------------------------------------------------------------ Utilitaires */

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

/* Empilement vertical régulier : l'espacement vit sur le parent, pas sur les enfants. */
.stack > * + * {
    margin-block-start: var(--stack-space, var(--space-s));
}

.stack-l {
    --stack-space: var(--space-l);
}

.stack-xl {
    --stack-space: var(--space-xl);
}

.text-soft {
    color: var(--text-soft, var(--color-text-soft));
}

/* Chiffres alignés pour tout ce qui se compare (stats, pages, notes). */
.numeric {
    font-variant-numeric: tabular-nums lining-nums;
}

/*!*****************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/layout.css ***!
  \*****************************************************************************************************************/
/*
 * assets/styles/layout.css — structure globale posée par base.html.twig :
 * lien d'évitement, en-tête, navigation principale, zone de contenu, en-tête de page.
 *
 * Mobile d'abord : l'application est avant tout une PWA installée sur téléphone.
 */

/* ------------------------------------------------------------------ Lien d'évitement */

.skip-link {
    position: absolute;
    top: var(--space-2xs);
    left: var(--space-2xs);
    z-index: 2000;
    padding: var(--space-2xs) var(--space-s);
    font-weight: var(--weight-semibold);
    color: var(--color-bg);
    background: var(--color-accent-bright);   /* fond sur texte : 6.20 */
    border-radius: var(--radius-control);
    transform: translateY(-200%);
}

.skip-link:focus-visible {
    transform: none;
    outline-color: var(--color-parchment);
}

/* ------------------------------------------------------------------ En-tête */

.site-header {
    position: sticky;
    top: 0;
    z-index: 100;
    padding-top: env(safe-area-inset-top);
    background: var(--color-surface);
    border-bottom: 1px solid var(--color-rule);
}

/*
 * Mobile : marque et déconnexion sur une ligne, la nav dessous en bandeau défilant.
 * Large : tout sur une ligne. La grille évite de dupliquer le HTML entre les deux.
 */
.site-header__inner {
    display: grid;
    grid-template-columns: 1fr auto;
    grid-template-areas:
        "brand logout"
        "nav   nav";
    align-items: center;
    column-gap: var(--space-s);
    max-width: var(--width-content);
    margin-inline: auto;
    padding-inline: max(var(--gutter), env(safe-area-inset-left));
}

.wordmark {
    grid-area: brand;
    padding-block: var(--space-xs);
    font-family: var(--font-serif);
    font-size: var(--step-1);
    font-weight: var(--weight-semibold);
    line-height: 1;
    letter-spacing: -.01em;
    color: var(--color-text);
    text-decoration: none;
    white-space: nowrap;
}

.wordmark em {
    font-weight: var(--weight-regular);
    color: var(--color-accent-bright);    /* sur surface : 4.74 */
}

.site-header__logout {
    grid-area: logout;
    font-size: var(--step--1);
    font-weight: var(--weight-medium);
    color: var(--color-text-soft);        /* sur surface : 5.39 */
    text-decoration: none;
}

.site-header__logout:hover {
    color: var(--color-text);
    text-decoration: underline;
}

/* ------------------------------------------------------------------ Navigation principale */

.main-nav {
    grid-area: nav;
    /* Déborde jusqu'aux bords de l'écran pour que le défilement ne coupe pas net. */
    margin-inline: calc(-1 * var(--gutter));
    overflow-x: auto;
    scrollbar-width: none;
    -webkit-overflow-scrolling: touch;
}

.main-nav::-webkit-scrollbar {
    display: none;
}

/* Mobile : les cinq rubriques tiennent en 360px ; au-delà du minimum, elles défilent. */
.main-nav__list {
    display: flex;
    justify-content: space-between;
    min-width: max-content;
    padding: 0 var(--space-2xs);
    list-style: none;
}

.main-nav__link {
    position: relative;
    display: block;
    padding: var(--space-xs) .4rem calc(var(--space-xs) + 2px);
    font-size: var(--step--1);
    font-weight: var(--weight-medium);
    color: var(--color-text-soft);
    text-decoration: none;
    white-space: nowrap;
}

.main-nav__link:hover {
    color: var(--color-text);
}

/* Le focus reste à l'intérieur du bandeau défilant pour ne pas être rogné. */
.main-nav__link:focus-visible {
    outline-offset: -4px;
}

/*
 * Rubrique courante : un marque-page sous le libellé. Couleur pleine du texte + trait
 * accent clair (4.74 sur surface) : l'état ne repose pas sur la seule couleur.
 */
.main-nav__link[aria-current="page"] {
    color: var(--color-text);
    font-weight: var(--weight-semibold);
}

.main-nav__link[aria-current="page"]::after {
    content: "";
    position: absolute;
    right: .4rem;
    bottom: 0;
    left: .4rem;
    height: 3px;
    background: var(--color-accent-bright);
    border-radius: 2px 2px 0 0;
}

@media (min-width: 48rem) {
    .site-header__inner {
        grid-template-columns: auto 1fr auto;
        grid-template-areas: "brand nav logout";
        column-gap: var(--space-l);
    }

    .wordmark {
        padding-block: var(--space-s);
    }

    .main-nav {
        margin-inline: 0;
        align-self: stretch;
    }

    .main-nav__list {
        justify-content: flex-start;
        gap: var(--space-3xs);
        height: 100%;
        padding: 0;
    }

    .main-nav__link {
        display: flex;
        align-items: center;
        height: 100%;
        padding-inline: var(--space-s);
        font-size: var(--step-0);
    }

    .main-nav__link[aria-current="page"]::after {
        right: var(--space-s);
        left: var(--space-s);
    }
}

/* ------------------------------------------------------------------ Contenu */

.site-main {
    max-width: var(--width-content);
    margin-inline: auto;
    padding:
        var(--space-l)
        max(var(--gutter), env(safe-area-inset-right))
        calc(var(--space-2xl) + env(safe-area-inset-bottom))
        max(var(--gutter), env(safe-area-inset-left));
}

.site-main:focus {
    outline: none;
}

@media (min-width: 48rem) {
    .site-main {
        padding-top: var(--space-xl);
    }
}

/*
 * En-tête de page : titre, éventuelle ligne de contexte, actions. Pas de sur-titre
 * en capitales : le contexte vient en dessous, en toutes lettres.
 */
.page-header {
    display: flex;
    flex-wrap: wrap;
    align-items: end;
    justify-content: space-between;
    gap: var(--space-s) var(--space-m);
    margin-bottom: var(--space-l);
}

.page-header__titles {
    flex: 1 1 18rem;
    min-width: 0;
}

.page-header__lede {
    margin-top: var(--space-2xs);
    max-width: var(--width-reading);
    color: var(--color-text-soft);
}

.page-header__actions {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2xs);
}

/* Sections d'une page : un filet discret au-dessus, pas une carte de plus. */
.section + .section {
    margin-top: var(--space-xl);
    padding-top: var(--space-l);
    border-top: 1px solid var(--color-rule);
}

.section__title {
    margin-bottom: var(--space-s);
}

.section__title small {
    font-family: var(--font-sans);
    font-size: var(--step--1);
    font-weight: var(--weight-medium);
    color: var(--color-text-soft);
    letter-spacing: 0;
}

/* Lien de retour en pied de page */
.back-link {
    display: inline-block;
    margin-top: var(--space-xl);
    font-size: var(--step--1);
    font-weight: var(--weight-medium);
}

/* ------------------------------------------------------------------ Grilles */

.cluster {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--cluster-space, var(--space-2xs));
}

/* Colonnes auto : autant que la largeur minimale le permet, une seule sur mobile. */
.auto-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(min(var(--auto-grid-min, 16rem), 100%), 1fr));
    gap: var(--auto-grid-gap, var(--space-m));
    padding: 0;
    list-style: none;
}

/* ------------------------------------------------------------------ Sous-navigation */

/* Onglets du catalogue : texte souligné, pas de pastilles. */
.subnav {
    display: flex;
    gap: var(--space-m);
    margin-bottom: var(--space-m);
    border-bottom: 1px solid var(--color-rule);
}

.subnav__link {
    margin-bottom: -1px;
    padding-block: var(--space-2xs);
    font-weight: var(--weight-medium);
    color: var(--color-text-soft);
    text-decoration: none;
    border-bottom: 3px solid transparent;
}

.subnav__link:hover {
    color: var(--color-text);
}

.subnav__link[aria-current="page"] {
    color: var(--color-text);
    font-weight: var(--weight-semibold);
    border-bottom-color: var(--color-accent-bright);
}

/* Texte de lecture (bio, description) */
.prose {
    max-width: var(--width-reading);
    font-size: var(--step-1);
    line-height: var(--leading-body);
    white-space: pre-line;
}

.prose + .section {
    margin-top: var(--space-xl);
}

/*!****************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/components/button.css ***!
  \****************************************************************************************************************************/
/*
 * Boutons. Trois intentions, pas plus :
 *   .btn--primary    l'action principale d'un écran — une seule en général, en accent
 *   .btn (seul)      action secondaire, trait fin
 *   .btn--danger     destruction (retirer, supprimer)
 * Le même balisage fonctionne sur fond sombre et sur .paper : les couleurs viennent
 * du contexte (currentColor, --focus-color).
 */

.btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--space-2xs);
    min-height: 2.75rem;                 /* cible tactile 44px */
    padding: var(--space-2xs) var(--space-m);
    font-family: var(--font-sans);
    font-size: var(--step-0);
    font-weight: var(--weight-semibold);
    line-height: 1.2;
    color: inherit;
    text-align: center;
    text-decoration: none;
    white-space: nowrap;
    cursor: pointer;
    background: transparent;
    border: 1px solid currentColor;
    border-radius: var(--radius-control);
    transition:
        background-color var(--duration-fast) var(--ease-out),
        color var(--duration-fast) var(--ease-out),
        transform var(--duration-fast) var(--ease-out);
}

.btn:hover {
    background-color: rgb(240 220 174 / .1);
}

.paper .btn:hover {
    background-color: rgb(42 33 24 / .07);
}

.btn:active {
    transform: translateY(1px);
}

/* Primaire : l'accent en aplat. Le liseré sombre en bas donne le relief d'une touche. */
.btn--primary,
.paper .btn--primary {
    color: var(--color-on-accent);       /* 4.57 */
    background-color: var(--color-accent);
    border-color: var(--color-accent);
    box-shadow: inset 0 -2px 0 rgb(0 0 0 / .22);
}

.btn--primary:hover,
.paper .btn--primary:hover {
    background-color: #9e5119;           /* plus sombre : contraste en hausse (5.5) */
    border-color: #9e5119;
}

/* Destructif : discret au repos, sans ambiguïté au survol. */
.btn--danger {
    color: var(--color-danger-bright);   /* sur fond : 6.21 */
}

.paper .btn--danger {
    color: var(--color-danger);          /* sur parchemin : 5.58 */
}

.btn--danger:hover,
.paper .btn--danger:hover {
    color: var(--color-on-accent);       /* 7.14 */
    background-color: var(--color-danger);
    border-color: var(--color-danger);
}

.btn--small {
    min-height: 2.25rem;
    padding-inline: var(--space-s);
    font-size: var(--step--1);
}

/* Bouton seul sur sa ligne en mobile : pleine largeur, plus facile à atteindre au pouce. */
.btn--block-mobile {
    width: 100%;
}

@media (min-width: 36rem) {
    .btn--block-mobile {
        width: auto;
    }
}

/*!**************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/components/form.css ***!
  \**************************************************************************************************************************/
/*
 * Formulaires : feuilles plates, sans relief, par contraste avec les cartes livre.
 * Balisage produit par templates/form/theme.html.twig (.field, .field__errors…)
 * et repris à la main dans les formulaires non Symfony Form (connexion, recherche).
 */

/* ------------------------------------------------------------------ Feuille */

.sheet {
    max-width: var(--width-reading);
    padding: var(--space-m) var(--space-s);
    border-radius: var(--radius-sheet);
}

@media (min-width: 36rem) {
    .sheet {
        padding: var(--space-l);
    }
}

.sheet--narrow {
    max-width: var(--width-narrow);
}

.form > * + * {
    margin-top: var(--space-m);
}

.form__actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--space-s);
    padding-top: var(--space-2xs);
}

/* ------------------------------------------------------------------ Champ */

.field {
    display: flex;
    flex-direction: column;
    gap: var(--space-3xs);
    min-width: 0;
    padding: 0;
    border: 0;
}

.field > label,
.field__label {
    padding: 0;
    font-size: var(--step-0);
    font-weight: var(--weight-medium);
    line-height: var(--leading-snug);
}

.field__optional {
    font-size: var(--step--1);
    font-weight: var(--weight-regular);
    color: var(--text-soft, var(--color-text-soft));
}

.field__help {
    font-size: var(--step--1);
    color: var(--text-soft, var(--color-text-soft));
}

/* ------------------------------------------------------------------ Contrôles */

.input,
.field input:not([type="checkbox"], [type="radio"]),
.field select,
.field textarea {
    width: 100%;
    min-height: 2.75rem;
    padding: var(--space-2xs) var(--space-xs);
    font-size: var(--step-0);               /* >= 16px : pas de zoom auto sur iOS */
    line-height: var(--leading-snug);
    color: var(--color-ink);
    background-color: #faf1da;              /* plus clair que la feuille : la zone où l'on écrit */
    border: var(--border-control);          /* 5.59 sur parchemin, 1.4.11 respecté */
    border-radius: var(--radius-control);
    color-scheme: light;
    transition: border-color var(--duration-fast) var(--ease-out);
}

.input::placeholder,
.field input::placeholder,
.field textarea::placeholder {
    color: var(--color-text-muted);         /* sur #faf1da : 6.4 */
    opacity: 1;
}

.input:hover,
.field input:hover,
.field select:hover,
.field textarea:hover {
    border-color: var(--color-ink);
}

.input:focus-visible,
.field input:focus-visible,
.field select:focus-visible,
.field textarea:focus-visible {
    border-color: var(--color-ink);
    outline-offset: 1px;
}

/* Liste déroulante : chevron dessiné, même encre que le texte. */
.field select {
    padding-right: 2.5rem;
    appearance: none;
    background-image: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 viewBox=%270 0 16 16%27%3E%3Cpath d=%27M3.5 6l4.5 4.5L12.5 6%27 fill=%27none%27 stroke=%27%232a2118%27 stroke-width=%271.8%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27/%3E%3C/svg%3E");
    background-repeat: no-repeat;
    background-position: right .75rem center;
    background-size: 1rem;
}

/*
 * Zone de texte (avis, description, bio) : papier réglé. Les lignes suivent le texte
 * au défilement (background-attachment: local) et tombent pile sur l'interligne.
 */
.field textarea {
    --rule: 1.75rem;
    min-height: calc(var(--rule) * 6 + var(--space-2xs) * 2);
    padding-block: var(--space-2xs);
    line-height: var(--rule);
    resize: vertical;
    background-image: linear-gradient(to bottom, transparent calc(var(--rule) - 1px), rgb(92 83 71 / .22) calc(var(--rule) - 1px));
    background-size: 100% var(--rule);
    background-position: 0 calc(var(--space-2xs) - 1px);
    background-attachment: local;
}

/* Cases à cocher */
.field--checkbox {
    flex-direction: row;
    align-items: center;
    gap: var(--space-2xs);
}

.field--checkbox > label {
    font-weight: var(--weight-regular);
}

input[type="checkbox"] {
    width: 1.25rem;
    height: 1.25rem;
    margin: 0;
    accent-color: var(--color-accent-ink);
}

/* ------------------------------------------------------------------ Erreurs */

/*
 * Erreur : bordure épaissie + message précédé d'un pictogramme. Trois indices, dont
 * deux indépendants de la couleur.
 */
.field--invalid input:not([type="checkbox"], [type="radio"]),
.field--invalid select,
.field--invalid textarea {
    border-color: var(--color-danger);
    box-shadow: inset 0 0 0 1px var(--color-danger);
}

.field__errors,
.form-errors {
    padding: 0;
    list-style: none;
    font-size: var(--step--1);
    font-weight: var(--weight-medium);
    color: var(--color-danger);             /* 5.58 sur parchemin */
}

.field__errors li,
.form-errors p {
    position: relative;
    padding-left: 1.4em;
}

.field__errors li::before,
.form-errors p::before {
    content: "!";
    position: absolute;
    top: .1em;
    left: 0;
    display: grid;
    place-items: center;
    width: 1.05em;
    height: 1.05em;
    font-size: .9em;
    font-weight: var(--weight-display);
    line-height: 1;
    color: var(--color-on-accent);
    background: var(--color-danger);
    border-radius: 50%;
}

.form-errors {
    padding: var(--space-xs) var(--space-s);
    border-left: 4px solid var(--color-danger);
    background: rgb(154 46 34 / .08);
}

/* ------------------------------------------------------------------ Note en étoiles */

.rating-input {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--space-2xs) var(--space-m);
}

.rating-input__stars {
    display: flex;
}

.rating-input__radio {
    position: absolute;
    opacity: 0;
    pointer-events: none;
}

.rating-input__star {
    position: relative;
    display: grid;
    place-items: center;
    width: 2.75rem;                         /* cible tactile */
    height: 2.75rem;
    cursor: pointer;
    border-radius: var(--radius-control);
}

.rating-input__star .star {
    width: 1.85rem;
    height: 1.85rem;
    fill: transparent;
    stroke: var(--color-text-muted);        /* contour vide : 5.59 */
    stroke-width: 1.5;
    stroke-linejoin: round;
    transition: fill var(--duration-fast) var(--ease-out), transform var(--duration-fast) var(--ease-out);
}

/* Remplies : l'étoile cochée et toutes celles qui la précèdent. */
.rating-input__star:has(.rating-input__radio:checked) .star,
.rating-input__star:has(~ .rating-input__star .rating-input__radio:checked) .star {
    fill: var(--color-accent);              /* graphisme sur parchemin : 3.52 */
    stroke: var(--color-accent-ink);
}

/* Aperçu au survol : prend le pas sur la valeur cochée tant que le pointeur est là. */
@media (hover: hover) {
    .rating-input__stars:hover .rating-input__star .star {
        fill: transparent;
        stroke: var(--color-text-muted);
    }

    /* L'étoile sous le pointeur, puis celles qui la précèdent. Les deux règles restent
       séparées : un navigateur qui ignore :has() jette la déclaration entière, et
       l'étoile survolée — qui n'en a pas besoin — s'éteindrait avec les autres. */
    .rating-input__stars:hover .rating-input__star:hover .star {
        fill: var(--color-accent);
        stroke: var(--color-accent-ink);
    }

    .rating-input__stars:hover .rating-input__star:has(~ .rating-input__star:hover) .star {
        fill: var(--color-accent);
        stroke: var(--color-accent-ink);
    }

    .rating-input__star:hover .star {
        transform: scale(1.08);
    }
}

.rating-input__star:has(.rating-input__radio:focus-visible),
.rating-input__clear:has(.rating-input__radio:focus-visible) {
    outline: var(--focus-width) solid var(--focus-color);
    outline-offset: -2px;
}

.rating-input__clear {
    position: relative;
    display: inline-flex;
    align-items: center;
    min-height: 2.75rem;
    padding-inline: var(--space-2xs);
    font-size: var(--step--1);
    color: var(--color-text-muted);
    cursor: pointer;
    border-radius: var(--radius-control);
}

.rating-input__clear span {
    text-decoration: underline;
    text-decoration-style: dotted;
    text-underline-offset: .2em;
}

.rating-input__clear:has(.rating-input__radio:checked) span {
    font-weight: var(--weight-semibold);
    color: var(--color-ink);
    text-decoration: none;
}

/* ------------------------------------------------------------------ Recherche */

/* Barre de recherche sur fond sombre : champ clair + bouton accolé. */
.search {
    display: flex;
    max-width: var(--width-reading);
}

.search .input {
    flex: 1;
    min-width: 0;
    border-color: transparent;
    border-radius: var(--radius-control) 0 0 var(--radius-control);
}

.search .btn {
    color: var(--color-text);
    border-color: var(--color-text-soft);
    border-left: 0;
    border-radius: 0 var(--radius-control) var(--radius-control) 0;
}

/*!**************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/components/book.css ***!
  \**************************************************************************************************************************/
/*
 * Composants « livre » : couverture, carte, badge de statut, note en étoiles.
 * Balisage : templates/_components/book.html.twig.
 */

/* ------------------------------------------------------------------ Couverture */

.cover {
    width: 100%;
    aspect-ratio: 2 / 3;
    object-fit: cover;
    background: var(--color-surface);
    border-radius: 1px 3px 3px 1px;
    box-shadow:
        inset 3px 0 0 rgb(0 0 0 / .18),     /* charnière du dos */
        0 1px 2px rgb(0 0 0 / .35);
}

/*
 * Reliure de toile, quand le catalogue n'a pas d'image : titre en Fraunces entre
 * deux filets, comme un livre relié sans jaquette. --cloth vient du gabarit.
 */
.cover--cloth {
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: .35em;
    padding: .6em .45em .6em .7em;
    overflow: hidden;
    container-type: inline-size;
    color: var(--color-bg);                 /* sur toile claire : >= 6.27 */
    background-color: var(--cloth, var(--cloth-1));
    background-image:
        linear-gradient(to bottom, transparent 9%, rgb(13 33 46 / .55) 9%, rgb(13 33 46 / .55) calc(9% + 1px), transparent calc(9% + 1px),
            transparent 91%, rgb(13 33 46 / .55) 91%, rgb(13 33 46 / .55) calc(91% + 1px), transparent calc(91% + 1px)),
        linear-gradient(to right, rgb(0 0 0 / .14), transparent 12%);
}

.cover__title {
    display: -webkit-box;
    overflow: hidden;
    font-family: var(--font-serif);
    font-size: clamp(.5rem, 12cqi, 1.6rem);
    font-weight: var(--weight-semibold);
    line-height: 1.1;
    text-align: center;
    overflow-wrap: break-word;
    hyphens: auto;
    -webkit-line-clamp: 4;
    -webkit-box-orient: vertical;
}

.cover__author {
    overflow: hidden;
    font-size: clamp(.5rem, 7.5cqi, .9rem);
    text-align: center;
    text-overflow: ellipsis;
    white-space: nowrap;
}

/* ------------------------------------------------------------------ Carte livre */

/*
 * Une fiche posée sur la table : coins de couverture à peine arrondis, dos droit,
 * tranche de pages visible en bas à droite (--shadow-book). Toute la carte est
 * cliquable via le lien du titre étiré.
 */
.book-card {
    position: relative;
    display: grid;
    grid-template-columns: 4.5rem 1fr;
    gap: var(--space-s);
    align-items: start;
    height: 100%;
    padding: var(--space-s);
    border-radius: var(--radius-book);
    box-shadow: var(--shadow-book);
    transition:
        transform var(--duration) var(--ease-out),
        box-shadow var(--duration) var(--ease-out);
}

.book-card:hover {
    transform: translateY(-2px) rotate(-.3deg);
    box-shadow: var(--shadow-book-lifted);
}

/* L'anneau de focus entoure la carte entière, pas seulement le titre. */
.book-card:has(.book-card__link:focus-visible) {
    outline: var(--focus-width) solid var(--color-accent-bright);   /* sur le fond : 6.20 */
    outline-offset: 4px;
}

.book-card__link:focus-visible {
    outline: none;
}

.book-card__body {
    display: flex;
    flex-direction: column;
    gap: var(--space-3xs);
    min-width: 0;
}

.book-card__title {
    font-size: var(--step-1);
    font-weight: var(--weight-semibold);
    line-height: var(--leading-snug);
    overflow-wrap: anywhere;
}

.book-card__link {
    color: var(--color-ink);
    text-decoration: none;
}

.book-card__link::after {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: inherit;
}

.book-card:hover .book-card__link {
    text-decoration: underline;
    text-decoration-thickness: 1px;
}

.book-card__author {
    font-weight: var(--weight-medium);
}

.book-card__series,
.book-card__pages {
    font-size: var(--step--1);
    color: var(--color-text-muted);
}

.book-card__meta {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--space-2xs) var(--space-xs);
    margin-top: var(--space-2xs);
}

@media (min-width: 36rem) {
    .book-card {
        grid-template-columns: 5.5rem 1fr;
        padding: var(--space-m) var(--space-m) var(--space-m) var(--space-s);
    }
}

/* ------------------------------------------------------------------ Badge de statut */

/*
 * Seul élément franchement arrondi du système. Chaque statut a un pictogramme
 * distinct (cercle vide, demi-cercle, coche, barre) en plus de sa couleur.
 */
.status-badge {
    display: inline-flex;
    align-items: center;
    gap: .4em;
    padding: .15em .65em .15em .5em;
    font-family: var(--font-sans);
    font-size: var(--step--1);
    font-weight: var(--weight-semibold);
    line-height: 1.4;
    white-space: nowrap;
    border: 1px solid currentColor;
    border-radius: var(--radius-badge);
}

.status-badge::before {
    content: "";
    flex: none;
    width: .7em;
    height: .7em;
    border: 1.5px solid currentColor;
    border-radius: 50%;
}

.status-badge--to-read {
    color: var(--color-text-muted);         /* 5.59 */
}

.status-badge--reading {
    color: var(--color-accent-ink);         /* 4.64 : la lecture en cours = progression */
}

.status-badge--reading::before {
    background: linear-gradient(to right, currentColor 50%, transparent 50%);
}

.status-badge--read {
    color: var(--color-parchment);          /* sur succès : 4.70 */
    background: var(--color-success);
    border-color: var(--color-success);
}

.status-badge--read::before {
    width: .75em;
    height: .45em;
    margin-top: -.2em;
    border-width: 0 0 2px 2px;
    border-radius: 0;
    transform: rotate(-45deg);
}

.status-badge--abandoned {
    color: var(--color-text-muted);
    border-style: dashed;
}

.status-badge--abandoned::before {
    background: linear-gradient(135deg, transparent 44%, currentColor 44%, currentColor 56%, transparent 56%);
}

/* ------------------------------------------------------------------ Étoiles (lecture seule) */

.stars {
    display: inline-flex;
    gap: 1px;
}

.stars .star {
    width: 1.05rem;
    height: 1.05rem;
    fill: transparent;
    stroke: var(--color-text-muted);
    stroke-width: 1.6;
    stroke-linejoin: round;
}

.stars__star.is-filled .star {
    fill: var(--color-accent);              /* 3.52 sur parchemin */
    stroke: var(--color-accent-ink);
}

/*!******************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/components/feedback.css ***!
  \******************************************************************************************************************************/
/*
 * Retours à l'utilisateur : messages flash et indicateur de synchronisation hors-ligne.
 */

/* ------------------------------------------------------------------ Messages flash */

.flash-stack {
    display: grid;
    gap: var(--space-2xs);
    max-width: var(--width-reading);
    margin-bottom: var(--space-l);
}

/*
 * Un papillon glissé dans le carnet : bande de parchemin, onglet coloré à gauche et
 * pictogramme. Plat, sans ombre — il informe, il ne se manipule pas.
 */
.flash {
    position: relative;
    padding: var(--space-xs) var(--space-s) var(--space-xs) calc(var(--space-s) + 1.6rem);
    font-weight: var(--weight-medium);
    border-left: 5px solid var(--flash-color, var(--color-text-muted));
    border-radius: 0 var(--radius-control) var(--radius-control) 0;
}

.flash::before {
    content: var(--flash-glyph, "i");
    position: absolute;
    top: calc(var(--space-xs) + .15em);
    left: var(--space-s);
    display: grid;
    place-items: center;
    width: 1.2rem;
    height: 1.2rem;
    font-size: .8rem;
    font-weight: var(--weight-display);
    line-height: 1;
    color: var(--color-parchment);
    background: var(--flash-color, var(--color-text-muted));
    border-radius: 50%;
}

.flash--success {
    --flash-color: var(--color-success);
    --flash-glyph: "✓";
}

.flash--info,
.flash--notice {
    --flash-color: var(--color-surface);
    --flash-glyph: "i";
}

.flash--warning {
    --flash-color: var(--color-accent-ink);
    --flash-glyph: "!";
}

.flash--danger,
.flash--error {
    --flash-color: var(--color-danger);
    --flash-glyph: "!";
}

/* Bandeau d'alerte dans le contenu (ex. « aucun auteur en base ») */
.notice {
    max-width: var(--width-reading);
    padding: var(--space-xs) var(--space-s);
    border-left: 5px solid var(--color-accent-ink);
    border-radius: 0 var(--radius-control) var(--radius-control) 0;
}

/* ------------------------------------------------------------------ Synchronisation */

/*
 * Indicateur de synchro (assets/controllers/sync_status_controller.js). Pastille
 * flottante en bas, au-dessus de la zone sûre. data-state pilote le pictogramme :
 * offline | pending | flushing | failed | synced.
 */
.sync-status {
    position: fixed;
    right: max(var(--space-s), env(safe-area-inset-right));
    bottom: calc(var(--space-s) + env(safe-area-inset-bottom));
    left: max(var(--space-s), env(safe-area-inset-left));
    z-index: 1000;
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--space-2xs) var(--space-s);
    padding: var(--space-2xs) var(--space-2xs) var(--space-2xs) var(--space-s);
    font-size: var(--step--1);
    font-weight: var(--weight-medium);
    color: var(--color-text);               /* sur surface : 9.32 */
    background: var(--color-surface);
    border: 1px solid var(--color-rule);
    border-left: 4px solid var(--sync-color, var(--color-text-soft));
    border-radius: var(--radius-control);
    box-shadow: 0 10px 24px -8px rgb(0 0 0 / .7);
    animation: sync-in var(--duration) var(--ease-out);
}

@media (min-width: 36rem) {
    .sync-status {
        left: auto;
        max-width: 28rem;
    }
}

.sync-status__dot {
    flex: none;
    width: .7rem;
    height: .7rem;
    border: 2px solid var(--sync-color, var(--color-text-soft));
    border-radius: 50%;
}

.sync-status__text {
    flex: 1;
    min-width: 8rem;
    padding-block: var(--space-3xs);
}

.sync-status__action {
    min-height: 2.25rem;
    padding: 0 var(--space-xs);
    font-weight: var(--weight-semibold);
    color: var(--color-accent-bright);      /* sur surface : 4.74 */
    cursor: pointer;
    background: transparent;
    border: 1px solid transparent;
    border-radius: var(--radius-control);
}

.sync-status__action:hover {
    border-color: currentColor;
}

/* Mobile, état en échec : le message sur sa ligne, les deux actions ensemble dessous. */
@media (max-width: 35.99rem) {
    .sync-status[data-state="failed"] .sync-status__text {
        flex-basis: calc(100% - 2rem);
    }

    .sync-status[data-state="failed"] .sync-status__text + .sync-status__action {
        margin-left: auto;
    }
}

/* Pastille et onglet sur surface (graphismes, seuil 3) : accent clair 4.74, danger clair 4.74, vert clair 6.54. */
.sync-status[data-state="offline"] {
    --sync-color: var(--color-text-soft);
}

.sync-status[data-state="pending"] {
    --sync-color: var(--color-accent-bright);
}

.sync-status[data-state="pending"] .sync-status__dot {
    background: linear-gradient(to top, var(--sync-color) 50%, transparent 50%);
}

.sync-status[data-state="flushing"] {
    --sync-color: var(--color-accent-bright);
}

.sync-status[data-state="flushing"] .sync-status__dot {
    border-right-color: transparent;
    animation: sync-spin .9s linear infinite;
}

.sync-status[data-state="failed"] {
    --sync-color: var(--color-danger-bright);
}

.sync-status[data-state="failed"] .sync-status__dot {
    background: var(--sync-color);
}

.sync-status[data-state="synced"] {
    --sync-color: #9cc5a1;
}

.sync-status[data-state="synced"] .sync-status__dot {
    background: var(--sync-color);
}

@keyframes sync-spin {
    to { transform: rotate(360deg); }
}

@keyframes sync-in {
    from { opacity: 0; transform: translateY(.5rem); }
}

/* Pas de rotation ni de glissement : l'état reste lisible par le texte et la pastille. */
@media (prefers-reduced-motion: reduce) {
    .sync-status,
    .sync-status[data-state="flushing"] .sync-status__dot {
        animation: none;
    }

    .sync-status[data-state="flushing"] .sync-status__dot {
        border-right-color: var(--sync-color);
        border-style: dotted;
    }
}

/*!***********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/components/reading-stats.css ***!
  \***********************************************************************************************************************************/
/*
 * Chiffres de lecture : compteurs, progression de l'objectif, grille des mois.
 * Utilisés par le tableau de bord et le bilan annuel.
 */

/* ------------------------------------------------------------------ Compteurs */

/*
 * Pas de tuiles identiques : de grands chiffres en Fraunces posés sur le fond,
 * séparés par un filet vertical, comme un total en marge d'un carnet.
 */
.tally {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-m) 0;
    padding: 0;
    list-style: none;
}

.tally__item {
    display: flex;
    flex-direction: column;
    padding-inline: 0 var(--space-l);
}

.tally__item + .tally__item {
    padding-left: var(--space-l);
    border-left: 1px solid var(--color-rule);
}

.tally__value {
    font-family: var(--font-serif);
    font-size: var(--step-5);
    font-weight: var(--weight-regular);
    font-variant-numeric: lining-nums tabular-nums;
    line-height: 1;
    letter-spacing: -.02em;
}

.tally__label {
    margin-top: var(--space-3xs);
    font-size: var(--step--1);
    font-weight: var(--weight-medium);
    color: var(--color-text-soft);
}

/* ------------------------------------------------------------------ Objectif */

/*
 * Bloc objectif sur surface. La barre est un ruban de marque-page : piste creusée
 * en --color-bg, remplissage accent (graphisme sur fond : 3.47).
 */
.goal {
    max-width: var(--width-reading);
    padding: var(--space-m);
    background: var(--color-surface);
    border-radius: var(--radius-sheet);
}

.goal__head {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--space-2xs) var(--space-s);
}

.goal__title {
    font-size: var(--step-1);
}

.goal__figure {
    font-weight: var(--weight-semibold);
    font-variant-numeric: tabular-nums;
}

.goal__figure span {
    font-weight: var(--weight-regular);
    color: var(--color-text-soft);
}

.progress {
    position: relative;
    height: .75rem;
    margin-block: var(--space-s) var(--space-2xs);
    overflow: hidden;
    background:
        repeating-linear-gradient(to right, transparent 0 calc(25% - 1px), rgb(240 220 174 / .22) calc(25% - 1px) 25%),
        var(--color-bg);
    border-radius: 1px;
}

.progress__fill {
    height: 100%;
    background: var(--color-accent);
    box-shadow: inset 0 -3px 0 rgb(0 0 0 / .2);
    transition: width var(--duration) var(--ease-out);
}

.goal__note {
    font-size: var(--step--1);
    color: var(--color-text-soft);
}

.goal__actions {
    margin-top: var(--space-s);
}

/* ------------------------------------------------------------------ Grille des mois */

/*
 * Douze cases, chacune une petite étagère : un trait par livre terminé. Écho direct
 * de l'étagère du bilan mensuel, qu'elles ouvrent au clic.
 */
.month-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: var(--space-2xs);
    padding: 0;
    list-style: none;
}

/* 3 colonnes (trimestres) sur mobile, 4 puis 6 : toujours des rangées complètes. */
@media (min-width: 30rem) {
    .month-grid {
        grid-template-columns: repeat(4, minmax(0, 1fr));
    }
}

@media (min-width: 52rem) {
    .month-grid {
        grid-template-columns: repeat(6, minmax(0, 1fr));
    }
}

.month-tile {
    display: grid;
    grid-template-rows: auto 2.25rem auto;
    gap: var(--space-3xs);
    height: 100%;
    padding: var(--space-2xs) var(--space-xs) var(--space-xs);
    color: var(--color-text);
    text-decoration: none;
    background: var(--color-surface);
    border-radius: var(--radius-sheet);
    transition: background-color var(--duration-fast) var(--ease-out);
}

.month-tile:hover {
    background-color: #134656;
}

.month-tile__name {
    font-family: var(--font-serif);
    font-weight: var(--weight-semibold);
}

/* Le rayon : des tranches alignées sur une planche. */
.month-tile__spines {
    display: flex;
    align-items: end;
    gap: 2px;
    overflow: hidden;
    border-bottom: 2px solid var(--color-text-soft);   /* planche : 5.39 sur surface */
}

.month-tile__spine {
    flex: none;
    width: 5px;
    height: var(--h, 80%);
    background: var(--cloth, var(--cloth-1));
    border-radius: 1px 1px 0 0;
}

.month-tile__count {
    font-size: var(--step--1);
    color: var(--color-text-soft);
    font-variant-numeric: tabular-nums;
}

.month-tile--empty .month-tile__name {
    color: var(--color-text-soft);
    font-weight: var(--weight-regular);
}

.month-tile--empty .month-tile__spines {
    border-bottom-style: dotted;
}

.month-tile[aria-current="date"] {
    box-shadow: inset 0 0 0 1px var(--color-accent-bright);
}

/*!********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/components/index-list.css ***!
  \********************************************************************************************************************************/
/*
 * Répertoire (auteurs, séries, tomes, années) : une page de carnet réglée, marge
 * tracée à gauche. Plat : c'est une table des matières, pas une pile d'objets.
 */

.index-list {
    max-width: var(--width-reading);
    padding: var(--space-2xs) 0;
    list-style: none;
    background-image: linear-gradient(to right, transparent 2.25rem, rgb(177 92 31 / .45) 2.25rem, rgb(177 92 31 / .45) calc(2.25rem + 1px), transparent calc(2.25rem + 1px));
    border-radius: var(--radius-sheet);
    counter-reset: index;
}

.index-list__item + .index-list__item {
    border-top: 1px solid rgb(92 83 71 / .25);
}

.index-list__link {
    display: flex;
    align-items: baseline;
    gap: var(--space-s);
    min-height: 2.75rem;
    padding: var(--space-xs) var(--space-s) var(--space-xs) 3rem;
    color: var(--color-ink);
    text-decoration: none;
}

.index-list__link:hover {
    background: rgb(42 33 24 / .05);
}

.index-list__link:focus-visible {
    outline-offset: -3px;
}

.index-list__name {
    flex: 1;
    font-family: var(--font-serif);
    font-size: var(--step-1);
    font-weight: var(--weight-medium);
    line-height: var(--leading-snug);
}

.index-list__link:hover .index-list__name {
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: .2em;
}

.index-list__meta {
    font-size: var(--step--1);
    color: var(--color-text-muted);
    font-variant-numeric: tabular-nums;
}

/* Liste numérotée (tomes d'une série) : le numéro s'écrit dans la marge. */
.index-list--numbered .index-list__item {
    counter-increment: index;
}

.index-list--numbered .index-list__link {
    position: relative;
}

.index-list--numbered .index-list__link::before {
    content: var(--index, counter(index));
    position: absolute;
    left: 0;
    width: 2.25rem;
    font-family: var(--font-serif);
    font-style: italic;
    color: var(--color-accent-ink);         /* 4.64 */
    text-align: center;
}

.empty-state {
    max-width: var(--width-reading);
    color: var(--color-text-soft);
}

/*!*********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/components/form-layout.css ***!
  \*********************************************************************************************************************************/
/*
 * Agencements récurrents autour des formulaires : paires de champs, zone de
 * suppression séparée, champ chiffré mis en valeur.
 */

/* Deux champs côte à côte dès qu'il y a la place (dates début/fin, pages/tome). */
.form__pair {
    display: grid;
    gap: var(--space-m);
}

@media (min-width: 30rem) {
    .form__pair {
        grid-template-columns: 1fr 1fr;
        align-items: start;
    }
}

.field-group > .field__help {
    margin-top: var(--space-3xs);
}

/* Un objectif se lit comme un chiffre : grand, en Fraunces. */
.field input.input--figure {
    max-width: 8rem;
    font-family: var(--font-serif);
    font-size: var(--step-3);
    font-weight: var(--weight-semibold);
    font-variant-numeric: lining-nums tabular-nums;
}

/*
 * Suppression : volontairement hors de la feuille du formulaire et après elle, pour
 * qu'on ne la déclenche pas en visant « Enregistrer ».
 */
.danger-zone {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--space-2xs) var(--space-m);
    max-width: var(--width-reading);
    margin-top: var(--space-l);
    padding-top: var(--space-m);
    font-size: var(--step--1);
    border-top: 1px dashed var(--color-rule);
}

/*!***************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/components/shelf.css ***!
  \***************************************************************************************************************************/
/*
 * Étagère partagée (templates/_components/shelf.html.twig) : bilan mensuel et
 * Ma bibliothèque.
 *
 * Un dos de livre par lecture, posé sur une planche. Seule la hauteur porte une
 * donnée (le nombre de pages, via --h entre 0 et 1) ; la couleur de toile est
 * décorative.
 *
 * Interaction sans JavaScript, dans les deux modes :
 *  - survol ou focus clavier -> l'étiquette du livre s'affiche sous la planche,
 *    dans une zone réservée (elle ne masque donc aucun contenu, cf. WCAG 1.4.13).
 *
 * .shelf--anchor (bilan) : le dos est un lien, clic / Entrée ancre vers la fiche de
 * lecture, mise en valeur par :target. L'étiquette est dans le lien : c'est son nom
 * accessible.
 *
 * .shelf--panel (bibliothèque) : le dos est un bouton, l'étiquette est sa sœur et
 * porte les actions du livre. Un clic l'épingle (.is-open, posée par
 * assets/controllers/shelf_controller.js) pour que la souris puisse l'atteindre.
 */

.shelf {
    --shelf-height: 13rem;
    --spine-width: 2.5rem;
    --label-height: 4.75rem;
    position: relative;                    /* bloc conteneur des étiquettes */
    padding-bottom: var(--label-height);
}

@media (min-width: 48rem) {
    .shelf {
        --shelf-height: 17rem;
        --spine-width: 3rem;
    }
}

/* Le fond du meuble : plus sombre en haut, comme sous une tablette. */
.shelf__case {
    overflow-x: auto;
    padding: var(--space-m) var(--space-s) 0;
    background:
        linear-gradient(to bottom, rgb(0 0 0 / .35), transparent 30%),
        var(--color-surface);
    border-radius: var(--radius-sheet) var(--radius-sheet) 0 0;
    scrollbar-color: var(--color-text-soft) transparent;
}

/* La planche : chant clair en haut, épaisseur, ombre portée sur le mur. */
.shelf__row {
    display: flex;
    align-items: flex-end;
    gap: 3px;
    min-width: max-content;
    height: var(--shelf-height);
    margin: 0 calc(-1 * var(--space-s));
    padding: 0 var(--space-m);
    list-style: none;
    border-bottom: .85rem solid var(--color-parchment-edge);
    box-shadow: 0 1px 0 #e2cb98, 0 10px 14px -6px rgb(0 0 0 / .6);
}

/* Serre-livres en fin de rangée : décoratif, il ferme la rangée. */
.shelf__row::after {
    content: "";
    flex: none;
    width: .5rem;
    height: 38%;
    margin-left: 2px;
    background: linear-gradient(to right, var(--color-parchment-edge), #a88c58);
    border-radius: 2px 2px 0 0;
    box-shadow: -4px 0 0 -2px rgb(0 0 0 / .25);
}

.shelf__slot {
    display: flex;
    height: 100%;
}

/* Le dos occupe toute la hauteur de la case : cible généreuse, même pour un livre
   court. Lien au bilan, bouton en bibliothèque — d'où la remise à plat du bouton. */
.spine {
    display: flex;
    align-items: flex-end;
    width: var(--spine-width);
    height: 100%;
    padding: 0;
    font: inherit;
    color: var(--color-bg);
    text-align: inherit;
    text-decoration: none;
    cursor: pointer;
    background: none;
    border: 0;
}

.spine:focus-visible {
    outline: none;
}

.spine__body {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 100%;
    height: max(18%, calc(var(--h, .5) * 100%));
    overflow: hidden;
    background-color: var(--cloth, var(--cloth-1));
    background-image:
        /* filets dorés en tête et en pied */
        linear-gradient(to bottom, transparent .55rem, rgb(13 33 46 / .6) .55rem, rgb(13 33 46 / .6) calc(.55rem + 1px), transparent calc(.55rem + 1px)),
        linear-gradient(to top, transparent .55rem, rgb(13 33 46 / .6) .55rem, rgb(13 33 46 / .6) calc(.55rem + 1px), transparent calc(.55rem + 1px)),
        /* rondeur du dos */
        linear-gradient(to right, rgb(0 0 0 / .22), rgb(255 255 255 / .16) 22%, transparent 50%, rgb(0 0 0 / .1) 85%, rgb(0 0 0 / .28));
    border-radius: 2px 2px 0 0;
    transform-origin: bottom center;
    transition: transform var(--duration) var(--ease-out);
}

/* Titre imprimé sur le dos, lu de bas en haut (convention des éditions françaises). */
.spine__title {
    max-height: calc(100% - 1.6rem);
    overflow: hidden;
    font-family: var(--font-serif);
    font-size: .8rem;
    font-weight: var(--weight-semibold);
    line-height: 1;
    white-space: nowrap;
    text-overflow: ellipsis;
    writing-mode: vertical-rl;
    transform: rotate(180deg);             /* titre sur toile : >= 6.27 */
}

@media (min-width: 48rem) {
    .spine__title {
        font-size: .9rem;
    }
}

/* Nombre de pages inconnu : motif hachuré, doublé dans la légende et l'étiquette. */
.spine--unknown .spine__body {
    background-image:
        repeating-linear-gradient(-45deg, transparent 0 5px, rgb(13 33 46 / .16) 5px 7px),
        linear-gradient(to right, rgb(0 0 0 / .22), rgb(255 255 255 / .16) 22%, transparent 50%, rgb(0 0 0 / .1) 85%, rgb(0 0 0 / .28));
}

/* Tiré du rayon au survol ou au focus. La règle porte sur la case : en mode 'panel',
   l'étiquette est la sœur du dos, et le focus peut être posé dans l'une ou l'autre.
   Les sélecteurs en :has() sont volontairement tenus à l'écart de ceux qui n'en ont pas
   besoin : un navigateur qui ignore :has() jette la déclaration entière, et emporterait
   le survol avec lui. */
.shelf__slot:hover .spine__body,
.shelf__slot.is-open .spine__body {
    transform: translateY(-.6rem);
}

.shelf__slot:has(:focus-visible) .spine__body {
    transform: translateY(-.6rem);
}

.spine:focus-visible .spine__body {
    outline: var(--focus-width) solid var(--color-accent-bright);   /* sur surface : 4.74 */
    outline-offset: 2px;
    overflow: visible;
}

/* ------------------------------------------------------------------ Étiquette */

.spine__label,
.shelf__hint {
    position: absolute;
    right: 0;
    bottom: 0;
    left: 0;
    min-height: var(--label-height);
    padding: var(--space-xs) var(--space-s);
}

.spine__label {
    display: flex;
    flex-direction: column;
    justify-content: center;
    gap: var(--space-3xs);
    color: var(--color-text);              /* sur fond : 12.21 */
    background: var(--color-bg);
    border-left: 3px solid var(--color-accent-bright);
    opacity: 0;
    pointer-events: none;
}

.spine__label-title {
    font-family: var(--font-serif);
    font-size: var(--step-1);
    font-weight: var(--weight-semibold);
    line-height: var(--leading-snug);
}

.spine__label-meta {
    font-size: var(--step--1);
    color: var(--color-text-soft);         /* sur fond : 7.06 */
}

/* Fondu à l'apparition seulement : une disparition instantanée évite que deux
   étiquettes se superposent quand on passe d'un dos à l'autre. Séparée de la règle de
   focus ci-dessous pour la même raison que plus haut : le survol ne doit dépendre de
   rien d'autre que de :hover. */
.shelf__slot:hover .spine__label {
    opacity: 1;
    transition: opacity var(--duration-fast) var(--ease-out);
}

/* Au focus clavier, l'étiquette s'affiche et ses actions sont atteignables, même sans
   JavaScript. Faute de :has(), il ne reste que le survol : c'est la seule perte. */
.shelf__slot:has(:focus-visible) .spine__label {
    opacity: 1;
    pointer-events: auto;
    transition: opacity var(--duration-fast) var(--ease-out);
}

/* ------------------------------------------- Étiquette épinglée (bibliothèque) */

/* La bande réservée sous la planche est plus haute qu'au bilan : l'étiquette y ajoute
   un rang d'actions. Mesurée sur le contenu réel, pour que l'étiquette ne déborde pas
   sur le chant de la planche. Un titre qui passerait à la ligne sur un écran très
   étroit la fait monter un peu : elle a un fond opaque, elle reste lisible. */
.shelf--panel {
    --label-height: 8rem;
}

.spine__label-actions {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--space-2xs);
    margin-top: var(--space-3xs);
}

/* Épinglée au clic : elle reste ouverte le temps d'atteindre ses actions à la souris. */
.shelf__slot.is-open .spine__label {
    z-index: 1;
    opacity: 1;
    pointer-events: auto;
}

/* Tant qu'une étiquette est épinglée, le survol d'un dos voisin n'en superpose pas
   une seconde : les deux occupent la même bande sous la planche. */
.shelf:has(.shelf__slot.is-open) .shelf__slot:not(.is-open):hover .spine__label {
    opacity: 0;
}

.shelf__hint {
    display: flex;
    align-items: center;
    font-size: var(--step--1);
    font-style: italic;
    color: var(--color-text-soft);
    border-left: 3px solid var(--color-rule);
}

.shelf:has(.shelf__slot:hover, .shelf__slot:focus-within, .shelf__slot.is-open) .shelf__hint {
    visibility: hidden;
}

.shelf__legend + .section {
    margin-top: var(--space-xl);
}

.shelf__legend {
    max-width: var(--width-reading);
    margin-top: var(--space-2xs);
    font-size: var(--step--1);
    color: var(--color-text-soft);
}

/* ------------------------------------------------------------------ Fiches de lecture */

.reading-notes {
    display: grid;
    gap: var(--space-m);
    padding: 0;
    list-style: none;
}

@media (min-width: 52rem) {
    .reading-notes {
        grid-template-columns: repeat(2, minmax(0, 1fr));
    }
}

.reading-note {
    display: grid;
    grid-template-columns: 3.5rem 1fr;
    gap: var(--space-s);
    height: 100%;
    padding: var(--space-s) var(--space-m) var(--space-m) var(--space-s);
    border-radius: var(--radius-book);
    box-shadow: var(--shadow-book);
    scroll-margin-top: 7rem;               /* sous l'en-tête collant */
}

/* Arrivée depuis un dos de l'étagère */
.reading-note:target,
.reading-note:focus-visible {
    outline: var(--focus-width) solid var(--color-accent-bright);
    outline-offset: 4px;
}

.reading-note:target {
    animation: note-found 1.2s var(--ease-out);
}

@keyframes note-found {
    from { box-shadow: 0 0 0 .6rem rgb(224 138 74 / .45), var(--shadow-book); }
}

@media (prefers-reduced-motion: reduce) {
    .reading-note:target {
        animation: none;
    }
}

.reading-note__body {
    display: flex;
    flex-direction: column;
    gap: var(--space-3xs);
    min-width: 0;
}

.reading-note__title a {
    color: var(--color-ink);
    text-decoration: none;
}

.reading-note__title a:hover {
    text-decoration: underline;
    text-decoration-thickness: 1px;
}

.reading-note__meta {
    --cluster-space: var(--space-2xs) var(--space-xs);
    font-size: var(--step--1);
    color: var(--color-text-muted);
}

/* L'avis, recopié à la main dans le carnet. */
.reading-note__review {
    position: relative;
    margin: var(--space-xs) 0 0;
    padding-left: var(--space-s);
    font-family: var(--font-serif);
    font-size: var(--step-1);
    font-style: italic;
    line-height: var(--leading-snug);
    border-left: 2px solid var(--color-parchment-edge);
}

/*!*********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/components/isbn-lookup.css ***!
  \*********************************************************************************************************************************/
/*
 * Remplissage par ISBN (templates/book/new.html.twig, isbn_lookup_controller.js) :
 * scan caméra, saisie du numéro, message de résultat, repère des champs pré-remplis.
 */

/* ------------------------------------------------------------------ Panneau */

.isbn-lookup {
    margin-block: var(--space-m) var(--space-l);
    border-top: 4px solid var(--color-accent);
}

.isbn-lookup > * + * {
    margin-top: var(--space-s);
}

.isbn-lookup__title {
    font-size: var(--step-1);
}

.isbn-lookup__intro {
    font-size: var(--step--1);
    color: var(--text-soft);                /* muted sur parchemin : 5.59 */
}

/* Scan et saisie côte à côte dès qu'il y a la place, alignés sur le bas du champ. */
.isbn-lookup__controls {
    display: flex;
    flex-wrap: wrap;
    align-items: end;
    gap: var(--space-s) var(--space-m);
}

.isbn-lookup__manual {
    flex: 1 1 20rem;
}

.isbn-lookup__icon {
    width: 1.25rem;
    height: 1.25rem;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.8;
    stroke-linecap: round;
}

/* Champ + bouton accolés, comme la recherche du catalogue, mais sur parchemin. */
.isbn-lookup__search {
    display: flex;
}

.isbn-lookup__search input {
    flex: 1;
    min-width: 0;
    font-variant-numeric: tabular-nums;
    border-radius: var(--radius-control) 0 0 var(--radius-control);
}

.isbn-lookup__search .btn {
    padding-inline: var(--space-s);         /* laisse la place aux 13 chiffres à 360px */
    border-color: var(--color-text-muted);  /* même bord que le champ : 5.59 */
    border-left: 0;
    border-radius: 0 var(--radius-control) var(--radius-control) 0;
}

/* Désactivé (hors-ligne, recherche en cours, pas de caméra) : lisible, mais visiblement inerte. */
.btn:disabled,
.isbn-lookup__search input:disabled {
    cursor: not-allowed;
    opacity: .55;
}

.btn:disabled:hover {
    background-color: transparent;
}

.btn:disabled:active {
    transform: none;
}

.isbn-lookup__offline {
    font-size: var(--step--1);
    font-weight: var(--weight-medium);
}

.isbn-lookup__offline::before {
    content: "";
    display: inline-block;
    width: .6rem;
    height: .6rem;
    margin-right: var(--space-2xs);
    border: 2px solid var(--color-text-muted);
    border-radius: 50%;
}

/* ------------------------------------------------------------------ Caméra */

.isbn-scan {
    display: grid;
    justify-items: start;
    gap: var(--space-xs);
}

.isbn-scan[hidden] {
    display: none;
}

.isbn-scan__frame {
    position: relative;
    width: 100%;
    max-width: 32rem;
    aspect-ratio: 16 / 10;
    overflow: hidden;
    background: var(--color-bg);
    border-radius: var(--radius-control);
}

.isbn-scan__video {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/*
 * Viseur : la bande centrale réellement analysée (CROP dans barcode_scanner.js :
 * 80 % × 40 % de l'image). object-fit: cover rogne un peu la vidéo, le viseur reste
 * donc légèrement plus petit que la zone lue — on ne promet jamais plus que ce qui est lu.
 * L'extérieur est assombri par une ombre géante, les coins tracés en accent clair.
 */
.isbn-scan__viewfinder {
    --corner: 1.25rem;
    --line: 3px;
    position: absolute;
    inset: 32% 12%;
    border-radius: var(--radius-control);
    box-shadow: 0 0 0 100vmax rgb(13 33 46 / .55);
    background:
        linear-gradient(var(--color-accent-bright), var(--color-accent-bright)) top left / var(--corner) var(--line),
        linear-gradient(var(--color-accent-bright), var(--color-accent-bright)) top left / var(--line) var(--corner),
        linear-gradient(var(--color-accent-bright), var(--color-accent-bright)) top right / var(--corner) var(--line),
        linear-gradient(var(--color-accent-bright), var(--color-accent-bright)) top right / var(--line) var(--corner),
        linear-gradient(var(--color-accent-bright), var(--color-accent-bright)) bottom left / var(--corner) var(--line),
        linear-gradient(var(--color-accent-bright), var(--color-accent-bright)) bottom left / var(--line) var(--corner),
        linear-gradient(var(--color-accent-bright), var(--color-accent-bright)) bottom right / var(--corner) var(--line),
        linear-gradient(var(--color-accent-bright), var(--color-accent-bright)) bottom right / var(--line) var(--corner);
    background-repeat: no-repeat;
}

/* Trait de lecture qui balaie le viseur : signale que l'analyse tourne. */
.isbn-scan__viewfinder::after {
    content: "";
    position: absolute;
    inset-inline: var(--space-2xs);
    top: 50%;
    height: 2px;
    background: var(--color-accent-bright);
    box-shadow: 0 0 8px var(--color-accent-bright);
    animation: isbn-sweep 1.6s var(--ease-out) infinite alternate;
}

@keyframes isbn-sweep {
    from { top: 12%; }
    to { top: 88%; }
}

@media (prefers-reduced-motion: reduce) {
    .isbn-scan__viewfinder::after {
        animation: none;
    }
}

/* ------------------------------------------------------------------ Résultat */

/* Vide tant qu'il n'y a rien à dire, mais toujours présent : une région live masquée n'est pas annoncée. */
.isbn-lookup__status:empty {
    margin: 0;
}

.isbn-lookup__status:not(:empty) {
    position: relative;
    padding: var(--space-xs) var(--space-s) var(--space-xs) calc(var(--space-s) + 1.6rem);
    font-size: var(--step--1);
    font-weight: var(--weight-medium);
    background: rgb(42 33 24 / .05);
    border-left: 5px solid var(--status-color, var(--color-text-muted));
    border-radius: 0 var(--radius-control) var(--radius-control) 0;
}

/* Même pictogramme que les messages flash (feedback.css), pour un vocabulaire unique. */
.isbn-lookup__status:not(:empty)::before {
    content: var(--status-glyph, "i");
    position: absolute;
    top: calc(var(--space-xs) + .1em);
    left: var(--space-s);
    display: grid;
    place-items: center;
    width: 1.2rem;
    height: 1.2rem;
    font-size: .75rem;
    font-weight: var(--weight-display);
    line-height: 1;
    color: var(--color-parchment);
    background: var(--status-color, var(--color-text-muted));
    border-radius: 50%;
}

.isbn-lookup__status[data-state="info"],
.isbn-lookup__status[data-state="pending"] {
    --status-color: var(--color-surface);
}

.isbn-lookup__status[data-state="pending"]::before {
    content: "…";
}

.isbn-lookup__status[data-state="success"] {
    --status-color: var(--color-success);
    --status-glyph: "✓";
}

.isbn-lookup__status[data-state="warning"] {
    --status-color: var(--color-accent-ink);
    --status-glyph: "!";
}

.isbn-lookup__status[data-state="error"] {
    --status-color: var(--color-danger);
    --status-glyph: "!";
}

/* ------------------------------------------------------------------ Champs pré-remplis */

/*
 * Rempli automatiquement, pas encore relu : liseré vert à gauche du champ et mention
 * écrite (vert sur parchemin : 4.70). Disparaît dès que l'utilisateur modifie le champ.
 */
.field--prefilled input,
.field--prefilled select,
.field--prefilled textarea {
    box-shadow: inset 4px 0 0 var(--color-success);
}

.field--prefilled::after {
    content: "Pré-rempli — à vérifier";
    order: 1;
    font-size: var(--step--1);
    font-weight: var(--weight-medium);
    color: var(--color-success);
}

/*!******************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/components/combobox.css ***!
  \******************************************************************************************************************************/
/*
 * Champ à suggestions (assets/controllers/author_combobox_controller.js) : champ texte
 * du thème de formulaire, liste déroulante posée dessous, message de création.
 */

.combobox {
    position: relative;
}

.combobox__list {
    position: absolute;
    z-index: 20;
    top: calc(100% + 2px);
    right: 0;
    left: 0;
    max-height: min(18rem, 50vh);
    margin: 0;
    padding: var(--space-3xs) 0;
    overflow-y: auto;
    list-style: none;
    background-color: #faf1da;
    border: 1px solid var(--color-ink);
    border-radius: var(--radius-control);
    box-shadow: 0 12px 24px -10px rgb(0 0 0 / .45);
}

.combobox__option {
    display: flex;
    align-items: center;
    min-height: 2.75rem;                    /* cible tactile */
    padding: var(--space-2xs) var(--space-xs);
    line-height: var(--leading-snug);
    color: var(--color-ink);                /* sur #faf1da : > 11.7 */
    cursor: pointer;
}

/* Option active (clavier ou survol) : aplat de la surface, texte parchemin (9.32). */
.combobox__option[aria-selected="true"],
.combobox__option:hover {
    color: var(--color-parchment);
    background-color: var(--color-surface);
}

.combobox__option--create {
    font-weight: var(--weight-semibold);
    color: var(--color-accent-ink);         /* sur #faf1da : > 4.64 */
    border-top: 1px dashed var(--color-parchment-edge);
}

.combobox__option--create:first-child {
    border-top: 0;
}

.combobox__option[aria-disabled="true"] {
    color: var(--color-text-muted);
    cursor: not-allowed;
    background-color: transparent;
}

.combobox__note {
    margin-left: .25em;
    font-weight: var(--weight-regular);
}

/* ------------------------------------------------------------------ Message */

.combobox__feedback:empty {
    display: none;
}

.combobox__feedback {
    position: relative;
    padding-left: 1.4em;
    font-size: var(--step--1);
    font-weight: var(--weight-medium);
    color: var(--feedback-color, var(--color-text-muted));
}

/* Même pictogramme rond que les erreurs de champ (form.css). */
.combobox__feedback::before {
    content: var(--feedback-glyph, "…");
    position: absolute;
    top: .1em;
    left: 0;
    display: grid;
    place-items: center;
    width: 1.05em;
    height: 1.05em;
    font-size: .9em;
    font-weight: var(--weight-display);
    line-height: 1;
    color: var(--color-on-accent);
    background: var(--feedback-color, var(--color-text-muted));
    border-radius: 50%;
}

.combobox__feedback[data-state="success"] {
    --feedback-color: var(--color-success); /* sur parchemin : 4.70 */
    --feedback-glyph: "✓";
}

.combobox__feedback[data-state="error"] {
    --feedback-color: var(--color-danger);  /* sur parchemin : 5.58 */
    --feedback-glyph: "!";
}

/*!***********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/components/library-entry.css ***!
  \***********************************************************************************************************************************/
/*
 * Ajout à la bibliothèque (templates/_components/library_entry_fields.html.twig) :
 * choix du statut en boutons radio, date de fin conditionnelle ; et retrait d'un
 * livre depuis la grille de « Ma bibliothèque ».
 */

/* ------------------------------------------------------------------ Bloc */

.library-entry {
    display: grid;
    gap: var(--space-m);
}

/*
 * Dans le formulaire d'ajout au catalogue : même signet que l'encart « ma bibliothèque »
 * de la fiche livre, pour dire que ce choix range AUSSI le livre chez soi.
 */
.library-entry--signet {
    padding: var(--space-s);
    background: rgb(42 33 24 / .05);
    border-left: 5px solid var(--color-accent);
    border-radius: 0 var(--radius-sheet) var(--radius-sheet) 0;
}

/* ------------------------------------------------------------------ Statuts */

.status-picker__options {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2xs);
    margin-top: var(--space-3xs);
}

/* Radio natif gardé pour le clavier et les lecteurs d'écran, dessiné par l'option. */
.status-picker__radio {
    position: absolute;
    opacity: 0;
    pointer-events: none;
}

.status-picker__option {
    position: relative;
    display: inline-flex;
    align-items: center;
    gap: var(--space-2xs);
    min-height: 2.75rem;                    /* cible tactile */
    padding: var(--space-3xs) var(--space-s) var(--space-3xs) var(--space-xs);
    cursor: pointer;
    background-color: #faf1da;              /* comme les champs : la zone où l'on choisit */
    border: var(--border-control);          /* 5.59 */
    border-radius: var(--radius-control);
    transition: border-color var(--duration-fast) var(--ease-out), box-shadow var(--duration-fast) var(--ease-out);
}

/* Pastille de radio : l'état coché ne repose pas sur la couleur seule. */
.status-picker__option::before {
    content: "";
    flex: none;
    width: 1rem;
    height: 1rem;
    border: 2px solid var(--color-text-muted);
    border-radius: 50%;
}

.status-picker__option:hover {
    border-color: var(--color-ink);
}

.status-picker__option:has(.status-picker__radio:checked) {
    border-color: var(--color-ink);
    box-shadow: inset 0 0 0 1px var(--color-ink);
}

.status-picker__option:has(.status-picker__radio:checked)::before {
    border-color: var(--color-ink);
    background: radial-gradient(circle, var(--color-ink) 45%, transparent 50%);
}

.status-picker__option:has(.status-picker__radio:focus-visible) {
    outline: var(--focus-width) solid var(--focus-color);
    outline-offset: var(--focus-offset);
}

.field--invalid .status-picker__option {
    border-color: var(--color-danger);
}

/* ------------------------------------------------------------------ Ma bibliothèque */

.library-item {
    display: grid;
    grid-template-rows: 1fr auto;
    gap: var(--space-2xs);
}

/* Discret sous la carte, aligné à droite : on ne le déclenche pas en visant la carte. */
.library-item__remove {
    justify-self: end;
}

/* ------------------------------------------------------------------ Divers */

/* Action en ligne dans un message (ex. « créer l'auteur ») : un bouton qui se lit comme un lien. */
.link-button {
    padding: 0;
    font: inherit;
    color: var(--link-color, var(--color-accent-bright));
    text-align: inherit;
    text-decoration: underline;
    text-decoration-thickness: 1px;
    text-underline-offset: .2em;
    cursor: pointer;
    background: none;
    border: 0;
}

.link-button:hover {
    text-decoration-thickness: 2px;
}

.book-show__links {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    justify-content: space-between;
    gap: var(--space-s);
    max-width: calc(13rem + var(--space-l) + var(--width-reading));
    margin-top: var(--space-xl);
}

.book-show__links .back-link {
    margin-top: 0;
}

/*!*********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/components/cover-field.css ***!
  \*********************************************************************************************************************************/
/*
 * Couverture dans le formulaire de livre (templates/book/_cover_field.html.twig,
 * cover_photo_controller.js) : aperçu, URL, photo par l'appareil photo ou la galerie.
 */

.cover-field {
    min-width: 0;
    margin-inline: 0;
    padding: 0;
    border: 0;
}

.cover-field__body {
    display: grid;
    grid-template-columns: 5.5rem minmax(0, 1fr);
    gap: var(--space-s);
    align-items: start;
    margin-top: var(--space-2xs);
}

@media (min-width: 36rem) {
    .cover-field__body {
        grid-template-columns: 7rem minmax(0, 1fr);
        gap: var(--space-m);
    }
}

/* ------------------------------------------------------------------ Aperçu */

.cover-field__preview {
    margin: 0;
}

.cover-field__frame {
    display: grid;
}

.cover-field__frame .cover {
    box-shadow: var(--shadow-book);
}

/* Emplacement vide : une couverture en pointillés, du format d'un livre. */
.cover-field__empty {
    display: grid;
    place-items: center;
    aspect-ratio: 2 / 3;
    padding: var(--space-2xs);
    font-size: var(--step--1);
    line-height: var(--leading-snug);
    color: var(--color-text-muted);         /* 5.59 */
    text-align: center;
    border: 1px dashed var(--color-text-muted);
    border-radius: 1px 3px 3px 1px;
}

.cover-field__caption {
    margin-top: var(--space-2xs);
    font-size: var(--step--1);
    line-height: var(--leading-snug);
    color: var(--color-text-muted);
}

.cover-field__controls {
    display: grid;
    gap: var(--space-s);
    min-width: 0;
}

/* ------------------------------------------------------------------ Photo */

.cover-photo {
    display: grid;
    gap: var(--space-2xs);
}

.cover-photo__intro {
    font-size: var(--step--1);
    font-weight: var(--weight-medium);
}

.cover-photo__buttons {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2xs);
}

/* Les boutons s'étirent à la place disponible : pas de libellé tronqué à 360 px. */
.cover-photo__buttons .btn {
    flex: 1 1 auto;
    white-space: normal;
}

.cover-photo__icon {
    flex: none;
    width: 1.1rem;
    height: 1.1rem;
    fill: none;
    stroke: currentColor;
    stroke-width: 1.8;
    stroke-linejoin: round;
}

.cover-photo__offline {
    font-size: var(--step--1);
    font-weight: var(--weight-medium);
}

/* Même rond creux que la mention hors-ligne de la recherche ISBN. */
.cover-photo__offline::before {
    content: "";
    display: inline-block;
    width: .6rem;
    height: .6rem;
    margin-right: var(--space-2xs);
    border: 2px solid var(--color-text-muted);
    border-radius: 50%;
}

.cover-photo__status:empty {
    display: none;
}

.cover-photo__status {
    position: relative;
    padding-left: 1.4em;
    font-size: var(--step--1);
    font-weight: var(--weight-medium);
    color: var(--photo-color, var(--color-text-muted));
}

.cover-photo__status::before {
    content: var(--photo-glyph, "i");
    position: absolute;
    top: .1em;
    left: 0;
    display: grid;
    place-items: center;
    width: 1.05em;
    height: 1.05em;
    font-size: .9em;
    font-weight: var(--weight-display);
    line-height: 1;
    color: var(--color-on-accent);
    background: var(--photo-color, var(--color-text-muted));
    border-radius: 50%;
}

.cover-photo__status[data-state="pending"] {
    --photo-glyph: "…";
}

.cover-photo__status[data-state="success"] {
    --photo-color: var(--color-success);    /* sur parchemin : 4.70 */
    --photo-glyph: "✓";
}

.cover-photo__status[data-state="error"] {
    --photo-color: var(--color-danger);     /* sur parchemin : 5.58 */
    --photo-glyph: "!";
}

/*!*********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/pages/auth.css ***!
  \*********************************************************************************************************************/
/*
 * Connexion et inscription : pas de navigation, une colonne centrée.
 */

.is-auth .site-main {
    display: grid;
    align-content: center;
    min-height: 100dvh;
    padding-top: calc(var(--space-l) + env(safe-area-inset-top));
}

.auth-page {
    width: 100%;
    max-width: var(--width-narrow);
    margin-inline: auto;
}

.auth-page__header {
    display: grid;
    justify-items: center;
    gap: var(--space-2xs);
    margin-bottom: var(--space-l);
    text-align: center;
}

.auth-page__mark {
    width: 5rem;
    height: 5rem;
    border-radius: 22%;
    box-shadow: 0 12px 24px -12px rgb(0 0 0 / .8);
}

.auth-page__brand {
    font-family: var(--font-serif);
    font-size: var(--step-1);
    font-weight: var(--weight-semibold);
}

.auth-page__brand em {
    font-weight: var(--weight-regular);
    color: var(--color-accent-bright);
}

.auth-page__header h1 {
    font-size: var(--step-3);
}

.auth-page .sheet {
    margin-inline: auto;
}

.auth-page__submit {
    width: 100%;
}

.auth-page__switch {
    margin-top: var(--space-m);
    text-align: center;
    color: var(--color-text-soft);
}

.is-auth .flash-stack {
    max-width: var(--width-narrow);
    margin-inline: auto;
}

/*!*********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/pages/book.css ***!
  \*********************************************************************************************************************/
/*
 * Fiche livre (book/show) et en-tête des pages liées à un livre (library/edit).
 */

/* ------------------------------------------------------------------ Fiche livre */

.book-sheet {
    display: grid;
    gap: var(--space-l);
}

.book-sheet__cover {
    width: min(11rem, 50vw);
}

.book-sheet__cover .cover {
    box-shadow: var(--shadow-book);
}

.book-sheet__main {
    display: flex;
    flex-direction: column;
    gap: var(--space-m);
    min-width: 0;
    max-width: var(--width-reading);
}

.book-sheet__author {
    margin-top: var(--space-2xs);
    font-size: var(--step-1);
    font-weight: var(--weight-medium);
}

.book-sheet__author a {
    color: var(--color-text);
}

.book-sheet__series {
    margin-top: var(--space-3xs);
    color: var(--color-text-soft);
}

.book-sheet__series a {
    color: inherit;
}

/* Faits bibliographiques : une ligne de colonnes étiquetées, pas un tableau. */
.book-sheet__facts {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-s) var(--space-l);
}

.book-sheet__facts dt {
    font-size: var(--step--1);
    color: var(--color-text-soft);
}

.book-sheet__facts dd {
    margin: 0;
    font-weight: var(--weight-semibold);
}

.book-sheet__description {
    white-space: pre-line;
}

/* Encart « ma bibliothèque » : un signet de parchemin, plat. */
.book-sheet__library {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--space-xs);
    padding: var(--space-m);
    border-left: 5px solid var(--color-accent);
    border-radius: 0 var(--radius-sheet) var(--radius-sheet) 0;
}

.book-sheet__library-title {
    font-family: var(--font-serif);
    font-size: var(--step-1);
    font-weight: var(--weight-semibold);
}

.book-sheet__library form {
    width: 100%;
}

@media (min-width: 40rem) {
    .book-sheet {
        grid-template-columns: 13rem 1fr;
        align-items: start;
    }

    .book-sheet__cover {
        width: 100%;
    }
}

/* ------------------------------------------------------------------ En-tête avec couverture */

.page-header--book {
    flex-wrap: nowrap;
    align-items: center;
}

.page-header__cover {
    flex: none;
    width: 4rem;
}

.page-header--book h1 {
    font-size: var(--step-3);
}

@media (min-width: 36rem) {
    .page-header__cover {
        width: 5.5rem;
    }

    .page-header--book h1 {
        font-size: var(--step-4);
    }
}

/*!**************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/pages/dashboard.css ***!
  \**************************************************************************************************************************/
/*
 * Tableau de bord et bilan annuel : chiffres et objectif côte à côte dès que possible.
 */

.dashboard__overview {
    display: grid;
    gap: var(--space-l);
    align-items: center;
}

@media (min-width: 52rem) {
    .dashboard__overview {
        grid-template-columns: auto minmax(0, 1fr);
        gap: var(--space-xl);
    }

    .dashboard__overview .goal {
        justify-self: end;
        width: 100%;
    }
}

/*!**************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/styles/app.css ***!
  \**************************************************************************************************************/
/*
 * assets/styles/app.css — point d'entrée CSS, importé par assets/app.js.
 *
 * Aucune règle ici, seulement l'ordre de la cascade :
 *   1. tokens      décisions de design (custom properties)
 *   2. fonts       @font-face auto-hébergés
 *   3. base        reset + éléments HTML nus
 *   4. layout      structure globale de base.html.twig
 *   5. components  briques réutilisables, une par fichier
 *   6. pages       ajustements propres à une page, à garder rares
 */


/*# sourceMappingURL=data:application/json;charset=utf-8;base64,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SSxpQkFBaUI7UUFDakIsV0FBVztJQUNmO0FBQ0o7Ozs7O0FDcEJBOzs7Ozs7Ozs7O0VBVUUiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vLi9hc3NldHMvc3R5bGVzL3Rva2Vucy5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3N0eWxlcy9mb250cy5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3N0eWxlcy9iYXNlLmNzcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3R5bGVzL2xheW91dC5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3N0eWxlcy9jb21wb25lbnRzL2J1dHRvbi5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3N0eWxlcy9jb21wb25lbnRzL2Zvcm0uY3NzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zdHlsZXMvY29tcG9uZW50cy9ib29rLmNzcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3R5bGVzL2NvbXBvbmVudHMvZmVlZGJhY2suY3NzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zdHlsZXMvY29tcG9uZW50cy9yZWFkaW5nLXN0YXRzLmNzcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3R5bGVzL2NvbXBvbmVudHMvaW5kZXgtbGlzdC5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3N0eWxlcy9jb21wb25lbnRzL2Zvcm0tbGF5b3V0LmNzcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3R5bGVzL2NvbXBvbmVudHMvc2hlbGYuY3NzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zdHlsZXMvY29tcG9uZW50cy9pc2JuLWxvb2t1cC5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3N0eWxlcy9jb21wb25lbnRzL2NvbWJvYm94LmNzcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3R5bGVzL2NvbXBvbmVudHMvbGlicmFyeS1lbnRyeS5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3N0eWxlcy9jb21wb25lbnRzL2NvdmVyLWZpZWxkLmNzcyIsIndlYnBhY2s6Ly8vLi9hc3NldHMvc3R5bGVzL3BhZ2VzL2F1dGguY3NzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zdHlsZXMvcGFnZXMvYm9vay5jc3MiLCJ3ZWJwYWNrOi8vLy4vYXNzZXRzL3N0eWxlcy9wYWdlcy9kYXNoYm9hcmQuY3NzIiwid2VicGFjazovLy8uL2Fzc2V0cy9zdHlsZXMvYXBwLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogYXNzZXRzL3N0eWxlcy90b2tlbnMuY3NzIOKAlCBsZXMgZMOpY2lzaW9ucyBkZSBkZXNpZ24sIGV0IHJpZW4gZCdhdXRyZS5cbiAqXG4gKiBBdWN1biBzw6lsZWN0ZXVyIGRlIGNvbXBvc2FudCBpY2kgOiB1bmlxdWVtZW50IGRlcyBjdXN0b20gcHJvcGVydGllcy4gVW4gY29tcG9zYW50XG4gKiBuZSBkb2l0IGphbWFpcyBjb250ZW5pciBkZSBjb3VsZXVyLCBkZSB0YWlsbGUgZGUgcG9saWNlIG91IGQnZXNwYWNlbWVudCBlbiBkdXIgO1xuICogcydpbCBlbiBhIGJlc29pbiBkJ3VuZSBub3V2ZWxsZSwgZWxsZSBzJ2Fqb3V0ZSBkJ2Fib3JkIGljaS5cbiAqXG4gKiBDb250cmFzdGVzIDogY2hhcXVlIGNvdXBsZSB0ZXh0ZS9mb25kIHLDqWVsbGVtZW50IHV0aWxpc8OpIGVzdCBub3TDqSDDoCBjw7R0w6kgZHUgdG9rZW5cbiAqIChyYXRpbyBXQ0FHIDIueCkuIFNldWlscyB2aXPDqXMgOiA0LjUgdGV4dGUgY291cmFudCwgMyBncmFuZCB0ZXh0ZSBldCBncmFwaGlzbWVzLlxuICovXG5cbjpyb290IHtcbiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUGFsZXR0ZSAqL1xuXG4gICAgLyogTGVzIHNpeCBjb3VsZXVycyBkdSBicmllZi4gRGV1eCBvbnQgw6l0w6kgbMOpZ8OocmVtZW50IGFqdXN0w6llcywgdm9pciBwbHVzIGJhcy4gKi9cbiAgICAtLWNvbG9yLWJnOiAjMGQyMTJlOyAgICAgICAgICAgIC8qIGZvbmQgcHJpbmNpcGFsLCBibGV1IG51aXQgKi9cbiAgICAtLWNvbG9yLXN1cmZhY2U6ICMwZDM4NDU7ICAgICAgIC8qIG5hdiwgem9uZXMgc29tYnJlcyBzZWNvbmRhaXJlcyAqL1xuICAgIC0tY29sb3ItcGFyY2htZW50OiAjZjBkY2FlOyAgICAgLyogcGFnZXMgOiBjYXJ0ZXMgbGl2cmUsIGZvcm11bGFpcmVzICovXG4gICAgLS1jb2xvci1hY2NlbnQ6ICNiMTVjMWY7ICAgICAgICAvKiBhY3Rpb24gcHJpbmNpcGFsZSwgcHJvZ3Jlc3Npb24g4oCUIMOgIGRvc2VyICovXG4gICAgLS1jb2xvci1zdWNjZXNzOiAjNDc2NzRjOyAgICAgICAvKiBicmllZiAjNGE2YjRmIDogNC40MyBzdXIgcGFyY2hlbWluLCBhc3NvbWJyaSAtPiA0LjcwICovXG4gICAgLS1jb2xvci10ZXh0LW11dGVkOiAjNWM1MzQ3OyAgICAvKiBzdXIgcGFyY2hlbWluIDogNS41OSAqL1xuXG4gICAgLyogRW5jcmUgZXQgdmFyaWFudGVzIGR1IHBhcmNoZW1pbiAqL1xuICAgIC0tY29sb3ItaW5rOiAjMmEyMTE4OyAgICAgICAgICAgLyogdGV4dGUgc3VyIHBhcmNoZW1pbiA6IDExLjcwICovXG4gICAgLyogRm9uZCBjcmV1c8OpIChjaGFtcHMpLiBNdXRlZCBkZXNzdXMgOiA0Ljk1LCBkYW5nZXIgOiA0Ljk0LiBOJ3kgcG9zZXIgbmlcbiAgICAgICAtLWNvbG9yLXN1Y2Nlc3MgKDQuMTYpIG5pIC0tY29sb3ItYWNjZW50LWluayAoNC4xMSkgZW4gdGV4dGUuICovXG4gICAgLS1jb2xvci1wYXJjaG1lbnQtZGVlcDogI2U2Y2Y5YztcbiAgICAtLWNvbG9yLXBhcmNobWVudC1lZGdlOiAjYzlhZTc2Oy8qIHRyYW5jaGUgZGVzIHBhZ2VzIChkw6ljb3JhdGlmKSAqL1xuXG4gICAgLypcbiAgICAgKiBMJ2FjY2VudCAjYjE1YzFmIG5lIHRpZW50IHBhcyBsZSBBQSBjb21tZSBjb3VsZXVyIGRlIHRleHRlIDogMy41MiBzdXIgcGFyY2hlbWluLFxuICAgICAqIDMuNDcgc3VyIGxlIGZvbmQsIDIuNjUgc3VyIGxhIHN1cmZhY2UuIElsIHJlc3RlIGxhIGNvdWxldXIgZGUgUkVNUExJU1NBR0VcbiAgICAgKiAoYm91dG9uLCBiYXJyZSBkZSBwcm9ncmVzc2lvbiA6IGdyYXBoaXNtZSA+PSAzIHN1ciBmb25kIGV0IHBhcmNoZW1pbiksIGV0IG9uXG4gICAgICogZMOpcml2ZSBkZXV4IHZhcmlhbnRlcyBkZSBtw6ptZSB0ZWludGUgcG91ciBsZSB0ZXh0ZSBldCBsZSBmb2N1cy5cbiAgICAgKi9cbiAgICAtLWNvbG9yLWFjY2VudC1pbms6ICM5NTRkMWE7ICAgIC8qIGFjY2VudCBlbiB0ZXh0ZSBzdXIgcGFyY2hlbWluIDogNC42NCAqL1xuICAgIC0tY29sb3ItYWNjZW50LWJyaWdodDogI2UwOGE0YTsgLyogYWNjZW50IGVuIHRleHRlL2ZvY3VzIHN1ciBmb25kIDogNi4yMCwgc3VyZmFjZSA6IDQuNzQgKi9cbiAgICAtLWNvbG9yLW9uLWFjY2VudDogI2ZmZmFmMzsgICAgIC8qIHRleHRlIGRlcyBib3V0b25zIHByaW1haXJlcyBzdXIgYWNjZW50IDogNC41NyAqL1xuXG4gICAgLS1jb2xvci1kYW5nZXI6ICM5YTJlMjI7ICAgICAgICAvKiBzdXIgcGFyY2hlbWluIDogNS41OCA7IHRleHRlIGNsYWlyIGRlc3N1cyA6IDcuMTQgKi9cbiAgICAtLWNvbG9yLWRhbmdlci1icmlnaHQ6ICNlODgzNmY7IC8qIHN1ciBmb25kIDogNi4yMSAqL1xuXG4gICAgLyogVGV4dGUgc3VyIGxlcyBmb25kcyBzb21icmVzICovXG4gICAgLS1jb2xvci10ZXh0OiB2YXIoLS1jb2xvci1wYXJjaG1lbnQpOyAgIC8qIHN1ciBmb25kIDogMTIuMjEsIHN1cmZhY2UgOiA5LjMyICovXG4gICAgLS1jb2xvci10ZXh0LXNvZnQ6ICNiOGE4ODg7ICAgICAgICAgICAgIC8qIHN1ciBmb25kIDogNy4wNiwgc3VyZmFjZSA6IDUuMzkgKi9cbiAgICAtLWNvbG9yLXJ1bGU6IHJnYigyNDAgMjIwIDE3NCAvIC4xNik7ICAgLyogZmlsZXRzIGTDqWNvcmF0aWZzIHN1ciBmb25kIHNvbWJyZSAqL1xuXG4gICAgLypcbiAgICAgKiBDb3VsZXVycyBkZSB0b2lsZSBkZXMgZG9zIGRlIGxpdnJlICjDqXRhZ8OocmUsIGNvdXZlcnR1cmVzIGRlIHJlcGxpKS4gVG91dGVzXG4gICAgICogY2xhaXJlcyA6IGVsbGVzIHNlIGTDqXRhY2hlbnQgZHUgYmxldSBudWl0ICg+PSA2LjIpIGV0IHBvcnRlbnQgdW4gdGl0cmUgZW5cbiAgICAgKiAtLWNvbG9yLWJnICg+PSA2LjI3KS4gTGEgY291bGV1ciBuJ2VuY29kZSBhdWN1bmUgZG9ubsOpZSwgc2V1bGUgbGEgaGF1dGV1ciBlbiBwb3J0ZS5cbiAgICAgKi9cbiAgICAtLWNsb3RoLTE6ICNkY2I4Nzg7ICAgICAgICAgICAgIC8qIG9jcmUgKi9cbiAgICAtLWNsb3RoLTI6ICNjOTk1NmI7ICAgICAgICAgICAgIC8qIHRlcnJlIGN1aXRlICovXG4gICAgLS1jbG90aC0zOiAjYTliZWEwOyAgICAgICAgICAgICAvKiBzYXVnZSAqL1xuICAgIC0tY2xvdGgtNDogI2M2YWFiODsgICAgICAgICAgICAgLyogdmlldXggcm9zZSAqL1xuICAgIC0tY2xvdGgtNTogIzlmYjZjNDsgICAgICAgICAgICAgLyogYmxldSBncmlzICovXG4gICAgLS1jbG90aC02OiAjZDhjOWE4OyAgICAgICAgICAgICAvKiBsaW4gKi9cblxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFR5cG9ncmFwaGllICovXG5cbiAgICAtLWZvbnQtc2VyaWY6ICdGcmF1bmNlcycsICdJb3dhbiBPbGQgU3R5bGUnLCAnUGFsYXRpbm8gTGlub3R5cGUnLCBHZW9yZ2lhLCBzZXJpZjtcbiAgICAtLWZvbnQtc2FuczogJ1B1YmxpYyBTYW5zJywgc3lzdGVtLXVpLCAtYXBwbGUtc3lzdGVtLCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7XG5cbiAgICAvKiDDiWNoZWxsZSBtb2R1bGFpcmUsIHJhcHBvcnQgMS4yNSAodGllcmNlIG1hamV1cmUpLCBiYXNlIDE2cHggKi9cbiAgICAtLXN0ZXAtLTI6IC42NHJlbTtcbiAgICAtLXN0ZXAtLTE6IC44cmVtO1xuICAgIC0tc3RlcC0wOiAxcmVtO1xuICAgIC0tc3RlcC0xOiAxLjI1cmVtO1xuICAgIC0tc3RlcC0yOiAxLjU2M3JlbTtcbiAgICAtLXN0ZXAtMzogMS45NTNyZW07XG4gICAgLS1zdGVwLTQ6IDIuNDQxcmVtO1xuICAgIC0tc3RlcC01OiAzLjA1MnJlbTtcblxuICAgIC8qIExlcyB0aXRyZXMgZGUgcGFnZSBncmFuZGlzc2VudCBhdmVjIGwnw6ljcmFuLCBib3Juw6lzIMOgIGRldXggcGFsaWVycyBkZSBsJ8OpY2hlbGxlICovXG4gICAgLS1zdGVwLWRpc3BsYXk6IGNsYW1wKHZhcigtLXN0ZXAtMyksIDEuMzVyZW0gKyAyLjZ2dywgdmFyKC0tc3RlcC01KSk7XG5cbiAgICAvKiBHcmFpc3NlcyA6IGNoYXF1ZSB1c2FnZSBhIGxhIHNpZW5uZSwgcmllbiBuJ2VzdCBsYWlzc8OpIMOgIMKrIGJvbGQgwrsgKi9cbiAgICAtLXdlaWdodC1yZWd1bGFyOiA0MDA7ICAgICAgICAgIC8qIHRleHRlIGNvdXJhbnQgKi9cbiAgICAtLXdlaWdodC1tZWRpdW06IDUyMDsgICAgICAgICAgIC8qIGxpYmVsbMOpcyBkZSBmb3JtdWxhaXJlLCBuYXYgKi9cbiAgICAtLXdlaWdodC1zZW1pYm9sZDogNjIwOyAgICAgICAgIC8qIGJvdXRvbnMsIHRpdHJlcyBkZSBsaXZyZSAqL1xuICAgIC0td2VpZ2h0LWRpc3BsYXk6IDY4MDsgICAgICAgICAgLyogdGl0cmVzIGRlIHBhZ2UgKEZyYXVuY2VzKSAqL1xuXG4gICAgLS1sZWFkaW5nLXRpZ2h0OiAxLjE7XG4gICAgLS1sZWFkaW5nLXNudWc6IDEuMztcbiAgICAtLWxlYWRpbmctYm9keTogMS41NTtcblxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVzcGFjZW1lbnRzICovXG5cbiAgICAtLXNwYWNlLTN4czogLjI1cmVtO1xuICAgIC0tc3BhY2UtMnhzOiAuNXJlbTtcbiAgICAtLXNwYWNlLXhzOiAuNzVyZW07XG4gICAgLS1zcGFjZS1zOiAxcmVtO1xuICAgIC0tc3BhY2UtbTogMS41cmVtO1xuICAgIC0tc3BhY2UtbDogMnJlbTtcbiAgICAtLXNwYWNlLXhsOiAzcmVtO1xuICAgIC0tc3BhY2UtMnhsOiA0LjVyZW07XG5cbiAgICAtLWd1dHRlcjogY2xhbXAodmFyKC0tc3BhY2UtcyksIDR2dywgdmFyKC0tc3BhY2UtbCkpO1xuICAgIC0td2lkdGgtY29udGVudDogNjhyZW07XG4gICAgLS13aWR0aC1yZWFkaW5nOiA0MHJlbTtcbiAgICAtLXdpZHRoLW5hcnJvdzogMjZyZW07XG5cbiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZvcm1lcyAqL1xuXG4gICAgLypcbiAgICAgKiBIacOpcmFyY2hpZSB2b2xvbnRhaXJlIGRlcyBhcnJvbmRpcyA6IHVuIGxpdnJlIGEgdW4gZG9zIGRyb2l0IGV0IGRlcyBjb2lucyBkZVxuICAgICAqIGNvdXZlcnR1cmUgw6AgcGVpbmUgdXPDqXMgOyB1biBjb250csO0bGUgZXN0IG5ldCA7IHNldWwgbGUgYmFkZ2UgZXN0IGZyYW5jaGVtZW50XG4gICAgICogYXJyb25kaS4gUGFzIGRlIHJheW9uIHVuaXF1ZSBwYXJ0b3V0LlxuICAgICAqL1xuICAgIC0tcmFkaXVzLWJvb2s6IDJweCA2cHggNnB4IDJweDtcbiAgICAtLXJhZGl1cy1jb250cm9sOiAzcHg7XG4gICAgLS1yYWRpdXMtc2hlZXQ6IDJweDtcbiAgICAtLXJhZGl1cy1iYWRnZTogMWVtO1xuXG4gICAgLS1ib3JkZXItY29udHJvbDogMXB4IHNvbGlkIHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpOyAvKiBib3JkIGRlIGNoYW1wIDogNS41OSwgPiAzIGV4aWfDqSAqL1xuXG4gICAgLypcbiAgICAgKiBSZWxpZWYgwqsgbGl2cmUgcG9zw6kgwrsgOiB0cm9pcyB0cmFuY2hlcyBkZSBwYWdlcyBkw6ljYWzDqWVzIGVuIGJhcyDDoCBkcm9pdGUgcHVpc1xuICAgICAqIHVuZSBvbWJyZSBwb3J0w6llIGNvdXJ0ZSBldCBkZW5zZS4gTGUgY29udHJhaXJlIGRlIGxhIHNvZnQtc2hhZG93IGdyaXNlIHVuaWZvcm1lLlxuICAgICAqL1xuICAgIC0tc2hhZG93LWJvb2s6XG4gICAgICAgIDFweCAxcHggMCAjZGNjNTkyLFxuICAgICAgICAycHggMnB4IDAgdmFyKC0tY29sb3ItcGFyY2htZW50LWVkZ2UpLFxuICAgICAgICAzcHggM3B4IDAgI2IzOTY2MCxcbiAgICAgICAgMCAxNnB4IDIycHggLTE0cHggcmdiKDAgMCAwIC8gLjc1KTtcbiAgICAtLXNoYWRvdy1ib29rLWxpZnRlZDpcbiAgICAgICAgMXB4IDFweCAwICNkY2M1OTIsXG4gICAgICAgIDJweCAycHggMCB2YXIoLS1jb2xvci1wYXJjaG1lbnQtZWRnZSksXG4gICAgICAgIDNweCAzcHggMCAjYjM5NjYwLFxuICAgICAgICAwIDIycHggMzBweCAtMTRweCByZ2IoMCAwIDAgLyAuOCk7XG5cbiAgICAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZvY3VzICovXG5cbiAgICAtLWZvY3VzLXdpZHRoOiAzcHg7XG4gICAgLS1mb2N1cy1vZmZzZXQ6IDJweDtcbiAgICAtLWZvY3VzLWNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtYnJpZ2h0KTsgLyogcmVkw6lmaW5pIHN1ciBwYXJjaGVtaW4sIGNmLiAucGFwZXIgKi9cblxuICAgIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNb3Rpb24gKi9cblxuICAgIC0tZWFzZS1vdXQ6IGN1YmljLWJlemllciguMiwgLjcsIC4yLCAxKTtcbiAgICAtLWR1cmF0aW9uLWZhc3Q6IDE0MG1zO1xuICAgIC0tZHVyYXRpb246IDIyMG1zO1xufVxuXG4vKiBVbiBzZXVsIGludGVycnVwdGV1ciA6IGxlcyBjb21wb3NhbnRzIGxpc2VudCBjZXMgZHVyw6llcywgZWxsZXMgdG9tYmVudCDDoCB6w6lybyBpY2kuICovXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAgIDpyb290IHtcbiAgICAgICAgLS1kdXJhdGlvbi1mYXN0OiAwbXM7XG4gICAgICAgIC0tZHVyYXRpb246IDBtcztcbiAgICB9XG59XG4iLCIvKlxuICogYXNzZXRzL3N0eWxlcy9mb250cy5jc3Mg4oCUIHBvbGljZXMgYXV0by1ow6liZXJnw6llcywgYXVjdW5lIHJlcXXDqnRlIHZlcnMgdW4gQ0ROLlxuICpcbiAqIEZpY2hpZXJzIGlzc3VzIGRlIEZvbnRzb3VyY2UgKGxpY2VuY2UgU0lMIE9GTCAxLjEsIGNvcGllcyBkYW5zIGFzc2V0cy9mb250cy8pLlxuICogRW5jb3JlIGNvcGllIGNoYXF1ZSB3b2ZmMiBkYW5zIHB1YmxpYy9idWlsZC9mb250cy8gOyBsZSBzZXJ2aWNlIHdvcmtlciBsZXNcbiAqIHByw6ljYWNoZSB2aWEgcHVibGljL2J1aWxkL21hbmlmZXN0Lmpzb24gKGNmLiBwdWJsaWMvc3cuanMpLlxuICpcbiAqIC0gRnJhdW5jZXMsIGZpY2hpZXJzIMKrIG9wc3ogwrsgOiBheGVzIGdyYWlzc2UgKyB0YWlsbGUgb3B0aXF1ZS4gTGEgdGFpbGxlIG9wdGlxdWVcbiAqICAgKGZvbnQtb3B0aWNhbC1zaXppbmc6IGF1dG8pIGRvbm5lIGRlcyB0aXRyZXMgY29udHJhc3TDqXMgZW4gZ3JhbmQgZXQgdW4gZGVzc2luXG4gKiAgIHBsdXMgcm9idXN0ZSBlbiBwZXRpdCwgc2FucyBjaGFyZ2VyIGxlcyBheGVzIFNPRlQvV09OSyBpbnV0aWxpc8Opcy5cbiAqIC0gUHVibGljIFNhbnMgOiBheGUgZ3JhaXNzZSBzZXVsLCBwYXMgZCdpdGFsaXF1ZSAobm9uIHV0aWxpc8OpIGRhbnMgbCdVSSkuXG4gKlxuICogTGUgZMOpY291cGFnZSBsYXRpbiAvIGxhdGluLWV4dCBzdWl0IGxlcyB1bmljb2RlLXJhbmdlIGRlIEZvbnRzb3VyY2UgOiB1bmUgcGFnZSBlblxuICogZnJhbsOnYWlzIG5lIHTDqWzDqWNoYXJnZSBsYXRpbi1leHQgcXVlIHNpIHVuIGNhcmFjdMOocmUgaG9ycyBsYXRpbiBkZSBiYXNlIGFwcGFyYcOudC5cbiAqL1xuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ0ZyYXVuY2VzJztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IDEwMCA5MDA7XG4gICAgZm9udC1kaXNwbGF5OiBzd2FwO1xuICAgIHNyYzogdXJsKCcuLi9mb250cy9mcmF1bmNlcy1sYXRpbi1vcHN6LW5vcm1hbC53b2ZmMicpIGZvcm1hdCgnd29mZjInKTtcbiAgICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkJCLTAyQkMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMDMwNCwgVSswMzA4LCBVKzAzMjksIFUrMjAwMC0yMDZGLCBVKzIwQUMsIFUrMjEyMiwgVSsyMTkxLCBVKzIxOTMsIFUrMjIxMiwgVSsyMjE1LCBVK0ZFRkYsIFUrRkZGRDtcbn1cblxuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6ICdGcmF1bmNlcyc7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiAxMDAgOTAwO1xuICAgIGZvbnQtZGlzcGxheTogc3dhcDtcbiAgICBzcmM6IHVybCgnLi4vZm9udHMvZnJhdW5jZXMtbGF0aW4tZXh0LW9wc3otbm9ybWFsLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpO1xuICAgIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMkJBLCBVKzAyQkQtMDJDNSwgVSswMkM3LTAyQ0MsIFUrMDJDRS0wMkQ3LCBVKzAyREQtMDJGRiwgVSswMzA0LCBVKzAzMDgsIFUrMDMyOSwgVSsxRDAwLTFEQkYsIFUrMUUwMC0xRTlGLCBVKzFFRjItMUVGRiwgVSsyMDIwLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQzAsIFUrMjExMywgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGO1xufVxuXG4vKiBJdGFsaXF1ZSA6IHLDqXNlcnbDqSBhdXggYXZpcyBkZSBsZWN0dXJlLCBjaXTDqXMgY29tbWUgZGFucyB1biBjYXJuZXQuICovXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ0ZyYXVuY2VzJztcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgZm9udC13ZWlnaHQ6IDEwMCA5MDA7XG4gICAgZm9udC1kaXNwbGF5OiBzd2FwO1xuICAgIHNyYzogdXJsKCcuLi9mb250cy9mcmF1bmNlcy1sYXRpbi1vcHN6LWl0YWxpYy53b2ZmMicpIGZvcm1hdCgnd29mZjInKTtcbiAgICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkJCLTAyQkMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMDMwNCwgVSswMzA4LCBVKzAzMjksIFUrMjAwMC0yMDZGLCBVKzIwQUMsIFUrMjEyMiwgVSsyMTkxLCBVKzIxOTMsIFUrMjIxMiwgVSsyMjE1LCBVK0ZFRkYsIFUrRkZGRDtcbn1cblxuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6ICdGcmF1bmNlcyc7XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuICAgIGZvbnQtd2VpZ2h0OiAxMDAgOTAwO1xuICAgIGZvbnQtZGlzcGxheTogc3dhcDtcbiAgICBzcmM6IHVybCgnLi4vZm9udHMvZnJhdW5jZXMtbGF0aW4tZXh0LW9wc3otaXRhbGljLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpO1xuICAgIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMkJBLCBVKzAyQkQtMDJDNSwgVSswMkM3LTAyQ0MsIFUrMDJDRS0wMkQ3LCBVKzAyREQtMDJGRiwgVSswMzA0LCBVKzAzMDgsIFUrMDMyOSwgVSsxRDAwLTFEQkYsIFUrMUUwMC0xRTlGLCBVKzFFRjItMUVGRiwgVSsyMDIwLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQzAsIFUrMjExMywgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGO1xufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ1B1YmxpYyBTYW5zJztcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC13ZWlnaHQ6IDEwMCA5MDA7XG4gICAgZm9udC1kaXNwbGF5OiBzd2FwO1xuICAgIHNyYzogdXJsKCcuLi9mb250cy9wdWJsaWMtc2Fucy1sYXRpbi13Z2h0LW5vcm1hbC53b2ZmMicpIGZvcm1hdCgnd29mZjInKTtcbiAgICB1bmljb2RlLXJhbmdlOiBVKzAwMDAtMDBGRiwgVSswMTMxLCBVKzAxNTItMDE1MywgVSswMkJCLTAyQkMsIFUrMDJDNiwgVSswMkRBLCBVKzAyREMsIFUrMDMwNCwgVSswMzA4LCBVKzAzMjksIFUrMjAwMC0yMDZGLCBVKzIwQUMsIFUrMjEyMiwgVSsyMTkxLCBVKzIxOTMsIFUrMjIxMiwgVSsyMjE1LCBVK0ZFRkYsIFUrRkZGRDtcbn1cblxuQGZvbnQtZmFjZSB7XG4gICAgZm9udC1mYW1pbHk6ICdQdWJsaWMgU2Fucyc7XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGZvbnQtd2VpZ2h0OiAxMDAgOTAwO1xuICAgIGZvbnQtZGlzcGxheTogc3dhcDtcbiAgICBzcmM6IHVybCgnLi4vZm9udHMvcHVibGljLXNhbnMtbGF0aW4tZXh0LXdnaHQtbm9ybWFsLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpO1xuICAgIHVuaWNvZGUtcmFuZ2U6IFUrMDEwMC0wMkJBLCBVKzAyQkQtMDJDNSwgVSswMkM3LTAyQ0MsIFUrMDJDRS0wMkQ3LCBVKzAyREQtMDJGRiwgVSswMzA0LCBVKzAzMDgsIFUrMDMyOSwgVSsxRDAwLTFEQkYsIFUrMUUwMC0xRTlGLCBVKzFFRjItMUVGRiwgVSsyMDIwLCBVKzIwQTAtMjBBQiwgVSsyMEFELTIwQzAsIFUrMjExMywgVSsyQzYwLTJDN0YsIFUrQTcyMC1BN0ZGO1xufVxuIiwiLypcbiAqIGFzc2V0cy9zdHlsZXMvYmFzZS5jc3Mg4oCUIHJlc2V0IG1pbmltYWwgZXQgw6lsw6ltZW50cyBIVE1MIG51cy5cbiAqXG4gKiBUb3V0IMOpbMOpbWVudCBzYW5zIGNsYXNzZSBkb2l0IGTDqWrDoCDDqnRyZSBsaXNpYmxlIGV0IGNvaMOpcmVudCBpY2kgOiBjJ2VzdCBjZSBxdWlcbiAqIGdhcmFudGl0IHF1J3VuIHRlbXBsYXRlIG91Ymxpw6kgbmUgcmV0b21iZSBwYXMgZGFucyBsZSBIVE1MIGJydXQuXG4gKi9cblxuKixcbio6OmJlZm9yZSxcbio6OmFmdGVyIHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4qIHtcbiAgICBtYXJnaW46IDA7XG59XG5cbmh0bWwge1xuICAgIC13ZWJraXQtdGV4dC1zaXplLWFkanVzdDogMTAwJTtcbiAgICB0ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xuICAgIGNvbG9yLXNjaGVtZTogZGFyaztcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1iZyk7XG59XG5cbmJvZHkge1xuICAgIG1pbi1oZWlnaHQ6IDEwMHZoO1xuICAgIG1pbi1oZWlnaHQ6IDEwMGR2aDtcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zYW5zKTtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtMCk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLXdlaWdodC1yZWd1bGFyKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGVhZGluZy1ib2R5KTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmcpO1xuICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkO1xuICAgIHRleHQtcmVuZGVyaW5nOiBvcHRpbWl6ZUxlZ2liaWxpdHk7XG59XG5cbi8qIEwnYXR0cmlidXQgaGlkZGVuIGRvaXQgZ2FnbmVyIHN1ciB0b3V0IGRpc3BsYXkgcG9zw6kgcGFyIHVuIGNvbXBvc2FudC4gKi9cbltoaWRkZW5dIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XG59XG5cbmltZyxcbnN2ZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xufVxuXG5pbnB1dCxcbmJ1dHRvbixcbnRleHRhcmVhLFxuc2VsZWN0IHtcbiAgICBmb250OiBpbmhlcml0O1xuICAgIGNvbG9yOiBpbmhlcml0O1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gVGl0cmVzICovXG5cbmgxLFxuaDIsXG5oMyxcbmg0IHtcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zZXJpZik7XG4gICAgZm9udC1vcHRpY2FsLXNpemluZzogYXV0bztcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGVhZGluZy10aWdodCk7XG4gICAgdGV4dC13cmFwOiBiYWxhbmNlO1xuICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7XG59XG5cbmgxIHtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtZGlzcGxheSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLXdlaWdodC1kaXNwbGF5KTtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMTVlbTtcbn1cblxuaDIge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tc3RlcC0yKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0td2VpZ2h0LXNlbWlib2xkKTtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMDVlbTtcbn1cblxuaDMge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tc3RlcC0xKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0td2VpZ2h0LXNlbWlib2xkKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGVhZGluZy1zbnVnKTtcbn1cblxucCxcbmxpIHtcbiAgICB0ZXh0LXdyYXA6IHByZXR0eTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExpZW5zICovXG5cbmEge1xuICAgIGNvbG9yOiB2YXIoLS1saW5rLWNvbG9yLCB2YXIoLS1jb2xvci1hY2NlbnQtYnJpZ2h0KSk7XG4gICAgdGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzczogMXB4O1xuICAgIHRleHQtdW5kZXJsaW5lLW9mZnNldDogLjJlbTtcbiAgICB0cmFuc2l0aW9uOiB0ZXh0LWRlY29yYXRpb24tdGhpY2tuZXNzIHZhcigtLWR1cmF0aW9uLWZhc3QpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuYTpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzczogMnB4O1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRm9jdXMgKi9cblxuLypcbiAqIFBsYW5jaGVyIG5vbiBuw6lnb2NpYWJsZSA6IHRvdXQgw6lsw6ltZW50IGludGVyYWN0aWYgYSB1biBhbm5lYXUgdmlzaWJsZSBhdSBjbGF2aWVyLlxuICogTGEgY291bGV1ciBzdWl0IGxlIGZvbmQgKC0tZm9jdXMtY29sb3IgZXN0IHJlZMOpZmluaSBzdXIgcGFyY2hlbWluKSBwb3VyIGdhcmRlclxuICogdW4gY29udHJhc3RlID49IDMgYXZlYyBjZSBxdWkgbCdlbnRvdXJlLlxuICovXG46Zm9jdXMtdmlzaWJsZSB7XG4gICAgb3V0bGluZTogdmFyKC0tZm9jdXMtd2lkdGgpIHNvbGlkIHZhcigtLWZvY3VzLWNvbG9yKTtcbiAgICBvdXRsaW5lLW9mZnNldDogdmFyKC0tZm9jdXMtb2Zmc2V0KTtcbn1cblxuOmZvY3VzOm5vdCg6Zm9jdXMtdmlzaWJsZSkge1xuICAgIG91dGxpbmU6IG5vbmU7XG59XG5cbjo6c2VsZWN0aW9uIHtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYmcpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1icmlnaHQpO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29udGV4dGUgcGFyY2hlbWluICovXG5cbi8qXG4gKiBUb3V0ZSB6b25lIMKrIHBhZ2UgwrsgKGNhcnRlIGxpdnJlLCBmb3JtdWxhaXJlLCBtZXNzYWdlKSBwb3NlIHNlcyBwcm9wcmVzIGNvdWxldXJzXG4gKiBkZSB0ZXh0ZSwgZGUgbGllbiBldCBkZSBmb2N1cy4gTGVzIGNvbXBvc2FudHMgZW4gaMOpcml0ZW50IHNhbnMgcmllbiByZWTDqWNsYXJlci5cbiAqL1xuLnBhcGVyIHtcbiAgICAtLWxpbmstY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1pbmspOyAgICAgIC8qIDQuNjQgKi9cbiAgICAtLWZvY3VzLWNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtaW5rKTsgICAgIC8qIDQuNjQsIGFubmVhdSA+PSAzICovXG4gICAgLS10ZXh0LXNvZnQ6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpOyAgICAgICAvKiA1LjU5ICovXG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWluayk7ICAgICAgICAgICAgICAgICAgICAvKiAxMS43MCAqL1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvbG9yLXBhcmNobWVudCk7XG4gICAgY29sb3Itc2NoZW1lOiBsaWdodDtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFV0aWxpdGFpcmVzICovXG5cbi52aXN1YWxseS1oaWRkZW4ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZSAhaW1wb3J0YW50O1xuICAgIHdpZHRoOiAxcHg7XG4gICAgaGVpZ2h0OiAxcHg7XG4gICAgcGFkZGluZzogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGNsaXA6IHJlY3QoMCAwIDAgMCk7XG4gICAgY2xpcC1wYXRoOiBpbnNldCg1MCUpO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgYm9yZGVyOiAwO1xufVxuXG4vKiBFbXBpbGVtZW50IHZlcnRpY2FsIHLDqWd1bGllciA6IGwnZXNwYWNlbWVudCB2aXQgc3VyIGxlIHBhcmVudCwgcGFzIHN1ciBsZXMgZW5mYW50cy4gKi9cbi5zdGFjayA+ICogKyAqIHtcbiAgICBtYXJnaW4tYmxvY2stc3RhcnQ6IHZhcigtLXN0YWNrLXNwYWNlLCB2YXIoLS1zcGFjZS1zKSk7XG59XG5cbi5zdGFjay1sIHtcbiAgICAtLXN0YWNrLXNwYWNlOiB2YXIoLS1zcGFjZS1sKTtcbn1cblxuLnN0YWNrLXhsIHtcbiAgICAtLXN0YWNrLXNwYWNlOiB2YXIoLS1zcGFjZS14bCk7XG59XG5cbi50ZXh0LXNvZnQge1xuICAgIGNvbG9yOiB2YXIoLS10ZXh0LXNvZnQsIHZhcigtLWNvbG9yLXRleHQtc29mdCkpO1xufVxuXG4vKiBDaGlmZnJlcyBhbGlnbsOpcyBwb3VyIHRvdXQgY2UgcXVpIHNlIGNvbXBhcmUgKHN0YXRzLCBwYWdlcywgbm90ZXMpLiAqL1xuLm51bWVyaWMge1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXMgbGluaW5nLW51bXM7XG59XG4iLCIvKlxuICogYXNzZXRzL3N0eWxlcy9sYXlvdXQuY3NzIOKAlCBzdHJ1Y3R1cmUgZ2xvYmFsZSBwb3PDqWUgcGFyIGJhc2UuaHRtbC50d2lnIDpcbiAqIGxpZW4gZCfDqXZpdGVtZW50LCBlbi10w6p0ZSwgbmF2aWdhdGlvbiBwcmluY2lwYWxlLCB6b25lIGRlIGNvbnRlbnUsIGVuLXTDqnRlIGRlIHBhZ2UuXG4gKlxuICogTW9iaWxlIGQnYWJvcmQgOiBsJ2FwcGxpY2F0aW9uIGVzdCBhdmFudCB0b3V0IHVuZSBQV0EgaW5zdGFsbMOpZSBzdXIgdMOpbMOpcGhvbmUuXG4gKi9cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExpZW4gZCfDqXZpdGVtZW50ICovXG5cbi5za2lwLWxpbmsge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IHZhcigtLXNwYWNlLTJ4cyk7XG4gICAgbGVmdDogdmFyKC0tc3BhY2UtMnhzKTtcbiAgICB6LWluZGV4OiAyMDAwO1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLTJ4cykgdmFyKC0tc3BhY2Utcyk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLXdlaWdodC1zZW1pYm9sZCk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWJnKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hY2NlbnQtYnJpZ2h0KTsgICAvKiBmb25kIHN1ciB0ZXh0ZSA6IDYuMjAgKi9cbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtY29udHJvbCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMDAlKTtcbn1cblxuLnNraXAtbGluazpmb2N1cy12aXNpYmxlIHtcbiAgICB0cmFuc2Zvcm06IG5vbmU7XG4gICAgb3V0bGluZS1jb2xvcjogdmFyKC0tY29sb3ItcGFyY2htZW50KTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVuLXTDqnRlICovXG5cbi5zaXRlLWhlYWRlciB7XG4gICAgcG9zaXRpb246IHN0aWNreTtcbiAgICB0b3A6IDA7XG4gICAgei1pbmRleDogMTAwO1xuICAgIHBhZGRpbmctdG9wOiBlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3Itc3VyZmFjZSk7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbG9yLXJ1bGUpO1xufVxuXG4vKlxuICogTW9iaWxlIDogbWFycXVlIGV0IGTDqWNvbm5leGlvbiBzdXIgdW5lIGxpZ25lLCBsYSBuYXYgZGVzc291cyBlbiBiYW5kZWF1IGTDqWZpbGFudC5cbiAqIExhcmdlIDogdG91dCBzdXIgdW5lIGxpZ25lLiBMYSBncmlsbGUgw6l2aXRlIGRlIGR1cGxpcXVlciBsZSBIVE1MIGVudHJlIGxlcyBkZXV4LlxuICovXG4uc2l0ZS1oZWFkZXJfX2lubmVyIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIGF1dG87XG4gICAgZ3JpZC10ZW1wbGF0ZS1hcmVhczpcbiAgICAgICAgXCJicmFuZCBsb2dvdXRcIlxuICAgICAgICBcIm5hdiAgIG5hdlwiO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgY29sdW1uLWdhcDogdmFyKC0tc3BhY2Utcyk7XG4gICAgbWF4LXdpZHRoOiB2YXIoLS13aWR0aC1jb250ZW50KTtcbiAgICBtYXJnaW4taW5saW5lOiBhdXRvO1xuICAgIHBhZGRpbmctaW5saW5lOiBtYXgodmFyKC0tZ3V0dGVyKSwgZW52KHNhZmUtYXJlYS1pbnNldC1sZWZ0KSk7XG59XG5cbi53b3JkbWFyayB7XG4gICAgZ3JpZC1hcmVhOiBicmFuZDtcbiAgICBwYWRkaW5nLWJsb2NrOiB2YXIoLS1zcGFjZS14cyk7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc2VyaWYpO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tc3RlcC0xKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0td2VpZ2h0LXNlbWlib2xkKTtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBsZXR0ZXItc3BhY2luZzogLS4wMWVtO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0KTtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLndvcmRtYXJrIGVtIHtcbiAgICBmb250LXdlaWdodDogdmFyKC0td2VpZ2h0LXJlZ3VsYXIpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtYnJpZ2h0KTsgICAgLyogc3VyIHN1cmZhY2UgOiA0Ljc0ICovXG59XG5cbi5zaXRlLWhlYWRlcl9fbG9nb3V0IHtcbiAgICBncmlkLWFyZWE6IGxvZ291dDtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtLTEpO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS13ZWlnaHQtbWVkaXVtKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zb2Z0KTsgICAgICAgIC8qIHN1ciBzdXJmYWNlIDogNS4zOSAqL1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLnNpdGUtaGVhZGVyX19sb2dvdXQ6aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0KTtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE5hdmlnYXRpb24gcHJpbmNpcGFsZSAqL1xuXG4ubWFpbi1uYXYge1xuICAgIGdyaWQtYXJlYTogbmF2O1xuICAgIC8qIETDqWJvcmRlIGp1c3F1J2F1eCBib3JkcyBkZSBsJ8OpY3JhbiBwb3VyIHF1ZSBsZSBkw6lmaWxlbWVudCBuZSBjb3VwZSBwYXMgbmV0LiAqL1xuICAgIG1hcmdpbi1pbmxpbmU6IGNhbGMoLTEgKiB2YXIoLS1ndXR0ZXIpKTtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTtcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG59XG5cbi5tYWluLW5hdjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIE1vYmlsZSA6IGxlcyBjaW5xIHJ1YnJpcXVlcyB0aWVubmVudCBlbiAzNjBweCA7IGF1LWRlbMOgIGR1IG1pbmltdW0sIGVsbGVzIGTDqWZpbGVudC4gKi9cbi5tYWluLW5hdl9fbGlzdCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgbWluLXdpZHRoOiBtYXgtY29udGVudDtcbiAgICBwYWRkaW5nOiAwIHZhcigtLXNwYWNlLTJ4cyk7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbn1cblxuLm1haW4tbmF2X19saW5rIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2UteHMpIC40cmVtIGNhbGModmFyKC0tc3BhY2UteHMpICsgMnB4KTtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtLTEpO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS13ZWlnaHQtbWVkaXVtKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zb2Z0KTtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLm1haW4tbmF2X19saW5rOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dCk7XG59XG5cbi8qIExlIGZvY3VzIHJlc3RlIMOgIGwnaW50w6lyaWV1ciBkdSBiYW5kZWF1IGTDqWZpbGFudCBwb3VyIG5lIHBhcyDDqnRyZSByb2duw6kuICovXG4ubWFpbi1uYXZfX2xpbms6Zm9jdXMtdmlzaWJsZSB7XG4gICAgb3V0bGluZS1vZmZzZXQ6IC00cHg7XG59XG5cbi8qXG4gKiBSdWJyaXF1ZSBjb3VyYW50ZSA6IHVuIG1hcnF1ZS1wYWdlIHNvdXMgbGUgbGliZWxsw6kuIENvdWxldXIgcGxlaW5lIGR1IHRleHRlICsgdHJhaXRcbiAqIGFjY2VudCBjbGFpciAoNC43NCBzdXIgc3VyZmFjZSkgOiBsJ8OpdGF0IG5lIHJlcG9zZSBwYXMgc3VyIGxhIHNldWxlIGNvdWxldXIuXG4gKi9cbi5tYWluLW5hdl9fbGlua1thcmlhLWN1cnJlbnQ9XCJwYWdlXCJdIHtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dCk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLXdlaWdodC1zZW1pYm9sZCk7XG59XG5cbi5tYWluLW5hdl9fbGlua1thcmlhLWN1cnJlbnQ9XCJwYWdlXCJdOjphZnRlciB7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IC40cmVtO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAuNHJlbTtcbiAgICBoZWlnaHQ6IDNweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1hY2NlbnQtYnJpZ2h0KTtcbiAgICBib3JkZXItcmFkaXVzOiAycHggMnB4IDAgMDtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDQ4cmVtKSB7XG4gICAgLnNpdGUtaGVhZGVyX19pbm5lciB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byAxZnIgYXV0bztcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1hcmVhczogXCJicmFuZCBuYXYgbG9nb3V0XCI7XG4gICAgICAgIGNvbHVtbi1nYXA6IHZhcigtLXNwYWNlLWwpO1xuICAgIH1cblxuICAgIC53b3JkbWFyayB7XG4gICAgICAgIHBhZGRpbmctYmxvY2s6IHZhcigtLXNwYWNlLXMpO1xuICAgIH1cblxuICAgIC5tYWluLW5hdiB7XG4gICAgICAgIG1hcmdpbi1pbmxpbmU6IDA7XG4gICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7XG4gICAgfVxuXG4gICAgLm1haW4tbmF2X19saXN0IHtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgICAgICBnYXA6IHZhcigtLXNwYWNlLTN4cyk7XG4gICAgICAgIGhlaWdodDogMTAwJTtcbiAgICAgICAgcGFkZGluZzogMDtcbiAgICB9XG5cbiAgICAubWFpbi1uYXZfX2xpbmsge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICBoZWlnaHQ6IDEwMCU7XG4gICAgICAgIHBhZGRpbmctaW5saW5lOiB2YXIoLS1zcGFjZS1zKTtcbiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1zdGVwLTApO1xuICAgIH1cblxuICAgIC5tYWluLW5hdl9fbGlua1thcmlhLWN1cnJlbnQ9XCJwYWdlXCJdOjphZnRlciB7XG4gICAgICAgIHJpZ2h0OiB2YXIoLS1zcGFjZS1zKTtcbiAgICAgICAgbGVmdDogdmFyKC0tc3BhY2Utcyk7XG4gICAgfVxufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ29udGVudSAqL1xuXG4uc2l0ZS1tYWluIHtcbiAgICBtYXgtd2lkdGg6IHZhcigtLXdpZHRoLWNvbnRlbnQpO1xuICAgIG1hcmdpbi1pbmxpbmU6IGF1dG87XG4gICAgcGFkZGluZzpcbiAgICAgICAgdmFyKC0tc3BhY2UtbClcbiAgICAgICAgbWF4KHZhcigtLWd1dHRlciksIGVudihzYWZlLWFyZWEtaW5zZXQtcmlnaHQpKVxuICAgICAgICBjYWxjKHZhcigtLXNwYWNlLTJ4bCkgKyBlbnYoc2FmZS1hcmVhLWluc2V0LWJvdHRvbSkpXG4gICAgICAgIG1heCh2YXIoLS1ndXR0ZXIpLCBlbnYoc2FmZS1hcmVhLWluc2V0LWxlZnQpKTtcbn1cblxuLnNpdGUtbWFpbjpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDQ4cmVtKSB7XG4gICAgLnNpdGUtbWFpbiB7XG4gICAgICAgIHBhZGRpbmctdG9wOiB2YXIoLS1zcGFjZS14bCk7XG4gICAgfVxufVxuXG4vKlxuICogRW4tdMOqdGUgZGUgcGFnZSA6IHRpdHJlLCDDqXZlbnR1ZWxsZSBsaWduZSBkZSBjb250ZXh0ZSwgYWN0aW9ucy4gUGFzIGRlIHN1ci10aXRyZVxuICogZW4gY2FwaXRhbGVzIDogbGUgY29udGV4dGUgdmllbnQgZW4gZGVzc291cywgZW4gdG91dGVzIGxldHRyZXMuXG4gKi9cbi5wYWdlLWhlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgYWxpZ24taXRlbXM6IGVuZDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgZ2FwOiB2YXIoLS1zcGFjZS1zKSB2YXIoLS1zcGFjZS1tKTtcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS1sKTtcbn1cblxuLnBhZ2UtaGVhZGVyX190aXRsZXMge1xuICAgIGZsZXg6IDEgMSAxOHJlbTtcbiAgICBtaW4td2lkdGg6IDA7XG59XG5cbi5wYWdlLWhlYWRlcl9fbGVkZSB7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMnhzKTtcbiAgICBtYXgtd2lkdGg6IHZhcigtLXdpZHRoLXJlYWRpbmcpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNvZnQpO1xufVxuXG4ucGFnZS1oZWFkZXJfX2FjdGlvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMnhzKTtcbn1cblxuLyogU2VjdGlvbnMgZCd1bmUgcGFnZSA6IHVuIGZpbGV0IGRpc2NyZXQgYXUtZGVzc3VzLCBwYXMgdW5lIGNhcnRlIGRlIHBsdXMuICovXG4uc2VjdGlvbiArIC5zZWN0aW9uIHtcbiAgICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS14bCk7XG4gICAgcGFkZGluZy10b3A6IHZhcigtLXNwYWNlLWwpO1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1ydWxlKTtcbn1cblxuLnNlY3Rpb25fX3RpdGxlIHtcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS1zKTtcbn1cblxuLnNlY3Rpb25fX3RpdGxlIHNtYWxsIHtcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zYW5zKTtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtLTEpO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS13ZWlnaHQtbWVkaXVtKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zb2Z0KTtcbiAgICBsZXR0ZXItc3BhY2luZzogMDtcbn1cblxuLyogTGllbiBkZSByZXRvdXIgZW4gcGllZCBkZSBwYWdlICovXG4uYmFjay1saW5rIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UteGwpO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tc3RlcC0tMSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLXdlaWdodC1tZWRpdW0pO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gR3JpbGxlcyAqL1xuXG4uY2x1c3RlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWNsdXN0ZXItc3BhY2UsIHZhcigtLXNwYWNlLTJ4cykpO1xufVxuXG4vKiBDb2xvbm5lcyBhdXRvIDogYXV0YW50IHF1ZSBsYSBsYXJnZXVyIG1pbmltYWxlIGxlIHBlcm1ldCwgdW5lIHNldWxlIHN1ciBtb2JpbGUuICovXG4uYXV0by1ncmlkIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KG1pbih2YXIoLS1hdXRvLWdyaWQtbWluLCAxNnJlbSksIDEwMCUpLCAxZnIpKTtcbiAgICBnYXA6IHZhcigtLWF1dG8tZ3JpZC1nYXAsIHZhcigtLXNwYWNlLW0pKTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTb3VzLW5hdmlnYXRpb24gKi9cblxuLyogT25nbGV0cyBkdSBjYXRhbG9ndWUgOiB0ZXh0ZSBzb3VsaWduw6ksIHBhcyBkZSBwYXN0aWxsZXMuICovXG4uc3VibmF2IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tc3BhY2UtbSk7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtbSk7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWNvbG9yLXJ1bGUpO1xufVxuXG4uc3VibmF2X19saW5rIHtcbiAgICBtYXJnaW4tYm90dG9tOiAtMXB4O1xuICAgIHBhZGRpbmctYmxvY2s6IHZhcigtLXNwYWNlLTJ4cyk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLXdlaWdodC1tZWRpdW0pO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNvZnQpO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBib3JkZXItYm90dG9tOiAzcHggc29saWQgdHJhbnNwYXJlbnQ7XG59XG5cbi5zdWJuYXZfX2xpbms6aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0KTtcbn1cblxuLnN1Ym5hdl9fbGlua1thcmlhLWN1cnJlbnQ9XCJwYWdlXCJdIHtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dCk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLXdlaWdodC1zZW1pYm9sZCk7XG4gICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWJyaWdodCk7XG59XG5cbi8qIFRleHRlIGRlIGxlY3R1cmUgKGJpbywgZGVzY3JpcHRpb24pICovXG4ucHJvc2Uge1xuICAgIG1heC13aWR0aDogdmFyKC0td2lkdGgtcmVhZGluZyk7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zdGVwLTEpO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sZWFkaW5nLWJvZHkpO1xuICAgIHdoaXRlLXNwYWNlOiBwcmUtbGluZTtcbn1cblxuLnByb3NlICsgLnNlY3Rpb24ge1xuICAgIG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLXhsKTtcbn1cbiIsIi8qXG4gKiBCb3V0b25zLiBUcm9pcyBpbnRlbnRpb25zLCBwYXMgcGx1cyA6XG4gKiAgIC5idG4tLXByaW1hcnkgICAgbCdhY3Rpb24gcHJpbmNpcGFsZSBkJ3VuIMOpY3JhbiDigJQgdW5lIHNldWxlIGVuIGfDqW7DqXJhbCwgZW4gYWNjZW50XG4gKiAgIC5idG4gKHNldWwpICAgICAgYWN0aW9uIHNlY29uZGFpcmUsIHRyYWl0IGZpblxuICogICAuYnRuLS1kYW5nZXIgICAgIGRlc3RydWN0aW9uIChyZXRpcmVyLCBzdXBwcmltZXIpXG4gKiBMZSBtw6ptZSBiYWxpc2FnZSBmb25jdGlvbm5lIHN1ciBmb25kIHNvbWJyZSBldCBzdXIgLnBhcGVyIDogbGVzIGNvdWxldXJzIHZpZW5uZW50XG4gKiBkdSBjb250ZXh0ZSAoY3VycmVudENvbG9yLCAtLWZvY3VzLWNvbG9yKS5cbiAqL1xuXG4uYnRuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMnhzKTtcbiAgICBtaW4taGVpZ2h0OiAyLjc1cmVtOyAgICAgICAgICAgICAgICAgLyogY2libGUgdGFjdGlsZSA0NHB4ICovXG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2UtMnhzKSB2YXIoLS1zcGFjZS1tKTtcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zYW5zKTtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtMCk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLXdlaWdodC1zZW1pYm9sZCk7XG4gICAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtY29udHJvbCk7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgICAgYmFja2dyb3VuZC1jb2xvciB2YXIoLS1kdXJhdGlvbi1mYXN0KSB2YXIoLS1lYXNlLW91dCksXG4gICAgICAgIGNvbG9yIHZhcigtLWR1cmF0aW9uLWZhc3QpIHZhcigtLWVhc2Utb3V0KSxcbiAgICAgICAgdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWZhc3QpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLmJ0bjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDI0MCAyMjAgMTc0IC8gLjEpO1xufVxuXG4ucGFwZXIgLmJ0bjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDQyIDMzIDI0IC8gLjA3KTtcbn1cblxuLmJ0bjphY3RpdmUge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxcHgpO1xufVxuXG4vKiBQcmltYWlyZSA6IGwnYWNjZW50IGVuIGFwbGF0LiBMZSBsaXNlcsOpIHNvbWJyZSBlbiBiYXMgZG9ubmUgbGUgcmVsaWVmIGQndW5lIHRvdWNoZS4gKi9cbi5idG4tLXByaW1hcnksXG4ucGFwZXIgLmJ0bi0tcHJpbWFyeSB7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLW9uLWFjY2VudCk7ICAgICAgIC8qIDQuNTcgKi9cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItYWNjZW50KTtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIC0ycHggMCByZ2IoMCAwIDAgLyAuMjIpO1xufVxuXG4uYnRuLS1wcmltYXJ5OmhvdmVyLFxuLnBhcGVyIC5idG4tLXByaW1hcnk6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM5ZTUxMTk7ICAgICAgICAgICAvKiBwbHVzIHNvbWJyZSA6IGNvbnRyYXN0ZSBlbiBoYXVzc2UgKDUuNSkgKi9cbiAgICBib3JkZXItY29sb3I6ICM5ZTUxMTk7XG59XG5cbi8qIERlc3RydWN0aWYgOiBkaXNjcmV0IGF1IHJlcG9zLCBzYW5zIGFtYmlndcOvdMOpIGF1IHN1cnZvbC4gKi9cbi5idG4tLWRhbmdlciB7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWRhbmdlci1icmlnaHQpOyAgIC8qIHN1ciBmb25kIDogNi4yMSAqL1xufVxuXG4ucGFwZXIgLmJ0bi0tZGFuZ2VyIHtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItZGFuZ2VyKTsgICAgICAgICAgLyogc3VyIHBhcmNoZW1pbiA6IDUuNTggKi9cbn1cblxuLmJ0bi0tZGFuZ2VyOmhvdmVyLFxuLnBhcGVyIC5idG4tLWRhbmdlcjpob3ZlciB7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLW9uLWFjY2VudCk7ICAgICAgIC8qIDcuMTQgKi9cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb2xvci1kYW5nZXIpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItZGFuZ2VyKTtcbn1cblxuLmJ0bi0tc21hbGwge1xuICAgIG1pbi1oZWlnaHQ6IDIuMjVyZW07XG4gICAgcGFkZGluZy1pbmxpbmU6IHZhcigtLXNwYWNlLXMpO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tc3RlcC0tMSk7XG59XG5cbi8qIEJvdXRvbiBzZXVsIHN1ciBzYSBsaWduZSBlbiBtb2JpbGUgOiBwbGVpbmUgbGFyZ2V1ciwgcGx1cyBmYWNpbGUgw6AgYXR0ZWluZHJlIGF1IHBvdWNlLiAqL1xuLmJ0bi0tYmxvY2stbW9iaWxlIHtcbiAgICB3aWR0aDogMTAwJTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDM2cmVtKSB7XG4gICAgLmJ0bi0tYmxvY2stbW9iaWxlIHtcbiAgICAgICAgd2lkdGg6IGF1dG87XG4gICAgfVxufVxuIiwiLypcbiAqIEZvcm11bGFpcmVzIDogZmV1aWxsZXMgcGxhdGVzLCBzYW5zIHJlbGllZiwgcGFyIGNvbnRyYXN0ZSBhdmVjIGxlcyBjYXJ0ZXMgbGl2cmUuXG4gKiBCYWxpc2FnZSBwcm9kdWl0IHBhciB0ZW1wbGF0ZXMvZm9ybS90aGVtZS5odG1sLnR3aWcgKC5maWVsZCwgLmZpZWxkX19lcnJvcnPigKYpXG4gKiBldCByZXByaXMgw6AgbGEgbWFpbiBkYW5zIGxlcyBmb3JtdWxhaXJlcyBub24gU3ltZm9ueSBGb3JtIChjb25uZXhpb24sIHJlY2hlcmNoZSkuXG4gKi9cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZldWlsbGUgKi9cblxuLnNoZWV0IHtcbiAgICBtYXgtd2lkdGg6IHZhcigtLXdpZHRoLXJlYWRpbmcpO1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLW0pIHZhcigtLXNwYWNlLXMpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zaGVldCk7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAzNnJlbSkge1xuICAgIC5zaGVldCB7XG4gICAgICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLWwpO1xuICAgIH1cbn1cblxuLnNoZWV0LS1uYXJyb3cge1xuICAgIG1heC13aWR0aDogdmFyKC0td2lkdGgtbmFycm93KTtcbn1cblxuLmZvcm0gPiAqICsgKiB7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtbSk7XG59XG5cbi5mb3JtX19hY3Rpb25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tc3BhY2Utcyk7XG4gICAgcGFkZGluZy10b3A6IHZhcigtLXNwYWNlLTJ4cyk7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDaGFtcCAqL1xuXG4uZmllbGQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTN4cyk7XG4gICAgbWluLXdpZHRoOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYm9yZGVyOiAwO1xufVxuXG4uZmllbGQgPiBsYWJlbCxcbi5maWVsZF9fbGFiZWwge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zdGVwLTApO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS13ZWlnaHQtbWVkaXVtKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGVhZGluZy1zbnVnKTtcbn1cblxuLmZpZWxkX19vcHRpb25hbCB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zdGVwLS0xKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0td2VpZ2h0LXJlZ3VsYXIpO1xuICAgIGNvbG9yOiB2YXIoLS10ZXh0LXNvZnQsIHZhcigtLWNvbG9yLXRleHQtc29mdCkpO1xufVxuXG4uZmllbGRfX2hlbHAge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tc3RlcC0tMSk7XG4gICAgY29sb3I6IHZhcigtLXRleHQtc29mdCwgdmFyKC0tY29sb3ItdGV4dC1zb2Z0KSk7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb250csO0bGVzICovXG5cbi5pbnB1dCxcbi5maWVsZCBpbnB1dDpub3QoW3R5cGU9XCJjaGVja2JveFwiXSwgW3R5cGU9XCJyYWRpb1wiXSksXG4uZmllbGQgc2VsZWN0LFxuLmZpZWxkIHRleHRhcmVhIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtaW4taGVpZ2h0OiAyLjc1cmVtO1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLTJ4cykgdmFyKC0tc3BhY2UteHMpO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tc3RlcC0wKTsgICAgICAgICAgICAgICAvKiA+PSAxNnB4IDogcGFzIGRlIHpvb20gYXV0byBzdXIgaU9TICovXG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxlYWRpbmctc251Zyk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWluayk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZjFkYTsgICAgICAgICAgICAgIC8qIHBsdXMgY2xhaXIgcXVlIGxhIGZldWlsbGUgOiBsYSB6b25lIG/DuSBsJ29uIMOpY3JpdCAqL1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyLWNvbnRyb2wpOyAgICAgICAgICAvKiA1LjU5IHN1ciBwYXJjaGVtaW4sIDEuNC4xMSByZXNwZWN0w6kgKi9cbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtY29udHJvbCk7XG4gICAgY29sb3Itc2NoZW1lOiBsaWdodDtcbiAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgdmFyKC0tZHVyYXRpb24tZmFzdCkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4uaW5wdXQ6OnBsYWNlaG9sZGVyLFxuLmZpZWxkIGlucHV0OjpwbGFjZWhvbGRlcixcbi5maWVsZCB0ZXh0YXJlYTo6cGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTsgICAgICAgICAvKiBzdXIgI2ZhZjFkYSA6IDYuNCAqL1xuICAgIG9wYWNpdHk6IDE7XG59XG5cbi5pbnB1dDpob3Zlcixcbi5maWVsZCBpbnB1dDpob3Zlcixcbi5maWVsZCBzZWxlY3Q6aG92ZXIsXG4uZmllbGQgdGV4dGFyZWE6aG92ZXIge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItaW5rKTtcbn1cblxuLmlucHV0OmZvY3VzLXZpc2libGUsXG4uZmllbGQgaW5wdXQ6Zm9jdXMtdmlzaWJsZSxcbi5maWVsZCBzZWxlY3Q6Zm9jdXMtdmlzaWJsZSxcbi5maWVsZCB0ZXh0YXJlYTpmb2N1cy12aXNpYmxlIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWluayk7XG4gICAgb3V0bGluZS1vZmZzZXQ6IDFweDtcbn1cblxuLyogTGlzdGUgZMOpcm91bGFudGUgOiBjaGV2cm9uIGRlc3NpbsOpLCBtw6ptZSBlbmNyZSBxdWUgbGUgdGV4dGUuICovXG4uZmllbGQgc2VsZWN0IHtcbiAgICBwYWRkaW5nLXJpZ2h0OiAyLjVyZW07XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDE2IDE2JyUzRSUzQ3BhdGggZD0nTTMuNSA2bDQuNSA0LjVMMTIuNSA2JyBmaWxsPSdub25lJyBzdHJva2U9JyUyMzJhMjExOCcgc3Ryb2tlLXdpZHRoPScxLjgnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCcvJTNFJTNDL3N2ZyUzRVwiKTtcbiAgICBiYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0O1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IHJpZ2h0IC43NXJlbSBjZW50ZXI7XG4gICAgYmFja2dyb3VuZC1zaXplOiAxcmVtO1xufVxuXG4vKlxuICogWm9uZSBkZSB0ZXh0ZSAoYXZpcywgZGVzY3JpcHRpb24sIGJpbykgOiBwYXBpZXIgcsOpZ2zDqS4gTGVzIGxpZ25lcyBzdWl2ZW50IGxlIHRleHRlXG4gKiBhdSBkw6lmaWxlbWVudCAoYmFja2dyb3VuZC1hdHRhY2htZW50OiBsb2NhbCkgZXQgdG9tYmVudCBwaWxlIHN1ciBsJ2ludGVybGlnbmUuXG4gKi9cbi5maWVsZCB0ZXh0YXJlYSB7XG4gICAgLS1ydWxlOiAxLjc1cmVtO1xuICAgIG1pbi1oZWlnaHQ6IGNhbGModmFyKC0tcnVsZSkgKiA2ICsgdmFyKC0tc3BhY2UtMnhzKSAqIDIpO1xuICAgIHBhZGRpbmctYmxvY2s6IHZhcigtLXNwYWNlLTJ4cyk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLXJ1bGUpO1xuICAgIHJlc2l6ZTogdmVydGljYWw7XG4gICAgYmFja2dyb3VuZC1pbWFnZTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdHJhbnNwYXJlbnQgY2FsYyh2YXIoLS1ydWxlKSAtIDFweCksIHJnYig5MiA4MyA3MSAvIC4yMikgY2FsYyh2YXIoLS1ydWxlKSAtIDFweCkpO1xuICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJSB2YXIoLS1ydWxlKTtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAwIGNhbGModmFyKC0tc3BhY2UtMnhzKSAtIDFweCk7XG4gICAgYmFja2dyb3VuZC1hdHRhY2htZW50OiBsb2NhbDtcbn1cblxuLyogQ2FzZXMgw6AgY29jaGVyICovXG4uZmllbGQtLWNoZWNrYm94IHtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1zcGFjZS0yeHMpO1xufVxuXG4uZmllbGQtLWNoZWNrYm94ID4gbGFiZWwge1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS13ZWlnaHQtcmVndWxhcik7XG59XG5cbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgd2lkdGg6IDEuMjVyZW07XG4gICAgaGVpZ2h0OiAxLjI1cmVtO1xuICAgIG1hcmdpbjogMDtcbiAgICBhY2NlbnQtY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1pbmspO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRXJyZXVycyAqL1xuXG4vKlxuICogRXJyZXVyIDogYm9yZHVyZSDDqXBhaXNzaWUgKyBtZXNzYWdlIHByw6ljw6lkw6kgZCd1biBwaWN0b2dyYW1tZS4gVHJvaXMgaW5kaWNlcywgZG9udFxuICogZGV1eCBpbmTDqXBlbmRhbnRzIGRlIGxhIGNvdWxldXIuXG4gKi9cbi5maWVsZC0taW52YWxpZCBpbnB1dDpub3QoW3R5cGU9XCJjaGVja2JveFwiXSwgW3R5cGU9XCJyYWRpb1wiXSksXG4uZmllbGQtLWludmFsaWQgc2VsZWN0LFxuLmZpZWxkLS1pbnZhbGlkIHRleHRhcmVhIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWRhbmdlcik7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHZhcigtLWNvbG9yLWRhbmdlcik7XG59XG5cbi5maWVsZF9fZXJyb3JzLFxuLmZvcm0tZXJyb3JzIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zdGVwLS0xKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0td2VpZ2h0LW1lZGl1bSk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWRhbmdlcik7ICAgICAgICAgICAgIC8qIDUuNTggc3VyIHBhcmNoZW1pbiAqL1xufVxuXG4uZmllbGRfX2Vycm9ycyBsaSxcbi5mb3JtLWVycm9ycyBwIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZy1sZWZ0OiAxLjRlbTtcbn1cblxuLmZpZWxkX19lcnJvcnMgbGk6OmJlZm9yZSxcbi5mb3JtLWVycm9ycyBwOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiIVwiO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IC4xZW07XG4gICAgbGVmdDogMDtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgd2lkdGg6IDEuMDVlbTtcbiAgICBoZWlnaHQ6IDEuMDVlbTtcbiAgICBmb250LXNpemU6IC45ZW07XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLXdlaWdodC1kaXNwbGF5KTtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3Itb24tYWNjZW50KTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1kYW5nZXIpO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbn1cblxuLmZvcm0tZXJyb3JzIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS14cykgdmFyKC0tc3BhY2Utcyk7XG4gICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB2YXIoLS1jb2xvci1kYW5nZXIpO1xuICAgIGJhY2tncm91bmQ6IHJnYigxNTQgNDYgMzQgLyAuMDgpO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTm90ZSBlbiDDqXRvaWxlcyAqL1xuXG4ucmF0aW5nLWlucHV0IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMnhzKSB2YXIoLS1zcGFjZS1tKTtcbn1cblxuLnJhdGluZy1pbnB1dF9fc3RhcnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG59XG5cbi5yYXRpbmctaW5wdXRfX3JhZGlvIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgb3BhY2l0eTogMDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLnJhdGluZy1pbnB1dF9fc3RhciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICB3aWR0aDogMi43NXJlbTsgICAgICAgICAgICAgICAgICAgICAgICAgLyogY2libGUgdGFjdGlsZSAqL1xuICAgIGhlaWdodDogMi43NXJlbTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWNvbnRyb2wpO1xufVxuXG4ucmF0aW5nLWlucHV0X19zdGFyIC5zdGFyIHtcbiAgICB3aWR0aDogMS44NXJlbTtcbiAgICBoZWlnaHQ6IDEuODVyZW07XG4gICAgZmlsbDogdHJhbnNwYXJlbnQ7XG4gICAgc3Ryb2tlOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTsgICAgICAgIC8qIGNvbnRvdXIgdmlkZSA6IDUuNTkgKi9cbiAgICBzdHJva2Utd2lkdGg6IDEuNTtcbiAgICBzdHJva2UtbGluZWpvaW46IHJvdW5kO1xuICAgIHRyYW5zaXRpb246IGZpbGwgdmFyKC0tZHVyYXRpb24tZmFzdCkgdmFyKC0tZWFzZS1vdXQpLCB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tZmFzdCkgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4vKiBSZW1wbGllcyA6IGwnw6l0b2lsZSBjb2Now6llIGV0IHRvdXRlcyBjZWxsZXMgcXVpIGxhIHByw6ljw6hkZW50LiAqL1xuLnJhdGluZy1pbnB1dF9fc3RhcjpoYXMoLnJhdGluZy1pbnB1dF9fcmFkaW86Y2hlY2tlZCkgLnN0YXIsXG4ucmF0aW5nLWlucHV0X19zdGFyOmhhcyh+IC5yYXRpbmctaW5wdXRfX3N0YXIgLnJhdGluZy1pbnB1dF9fcmFkaW86Y2hlY2tlZCkgLnN0YXIge1xuICAgIGZpbGw6IHZhcigtLWNvbG9yLWFjY2VudCk7ICAgICAgICAgICAgICAvKiBncmFwaGlzbWUgc3VyIHBhcmNoZW1pbiA6IDMuNTIgKi9cbiAgICBzdHJva2U6IHZhcigtLWNvbG9yLWFjY2VudC1pbmspO1xufVxuXG4vKiBBcGVyw6d1IGF1IHN1cnZvbCA6IHByZW5kIGxlIHBhcyBzdXIgbGEgdmFsZXVyIGNvY2jDqWUgdGFudCBxdWUgbGUgcG9pbnRldXIgZXN0IGzDoC4gKi9cbkBtZWRpYSAoaG92ZXI6IGhvdmVyKSB7XG4gICAgLnJhdGluZy1pbnB1dF9fc3RhcnM6aG92ZXIgLnJhdGluZy1pbnB1dF9fc3RhciAuc3RhciB7XG4gICAgICAgIGZpbGw6IHRyYW5zcGFyZW50O1xuICAgICAgICBzdHJva2U6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpO1xuICAgIH1cblxuICAgIC8qIEwnw6l0b2lsZSBzb3VzIGxlIHBvaW50ZXVyLCBwdWlzIGNlbGxlcyBxdWkgbGEgcHLDqWPDqGRlbnQuIExlcyBkZXV4IHLDqGdsZXMgcmVzdGVudFxuICAgICAgIHPDqXBhcsOpZXMgOiB1biBuYXZpZ2F0ZXVyIHF1aSBpZ25vcmUgOmhhcygpIGpldHRlIGxhIGTDqWNsYXJhdGlvbiBlbnRpw6hyZSwgZXRcbiAgICAgICBsJ8OpdG9pbGUgc3Vydm9sw6llIOKAlCBxdWkgbidlbiBhIHBhcyBiZXNvaW4g4oCUIHMnw6l0ZWluZHJhaXQgYXZlYyBsZXMgYXV0cmVzLiAqL1xuICAgIC5yYXRpbmctaW5wdXRfX3N0YXJzOmhvdmVyIC5yYXRpbmctaW5wdXRfX3N0YXI6aG92ZXIgLnN0YXIge1xuICAgICAgICBmaWxsOiB2YXIoLS1jb2xvci1hY2NlbnQpO1xuICAgICAgICBzdHJva2U6IHZhcigtLWNvbG9yLWFjY2VudC1pbmspO1xuICAgIH1cblxuICAgIC5yYXRpbmctaW5wdXRfX3N0YXJzOmhvdmVyIC5yYXRpbmctaW5wdXRfX3N0YXI6aGFzKH4gLnJhdGluZy1pbnB1dF9fc3Rhcjpob3ZlcikgLnN0YXIge1xuICAgICAgICBmaWxsOiB2YXIoLS1jb2xvci1hY2NlbnQpO1xuICAgICAgICBzdHJva2U6IHZhcigtLWNvbG9yLWFjY2VudC1pbmspO1xuICAgIH1cblxuICAgIC5yYXRpbmctaW5wdXRfX3N0YXI6aG92ZXIgLnN0YXIge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDgpO1xuICAgIH1cbn1cblxuLnJhdGluZy1pbnB1dF9fc3RhcjpoYXMoLnJhdGluZy1pbnB1dF9fcmFkaW86Zm9jdXMtdmlzaWJsZSksXG4ucmF0aW5nLWlucHV0X19jbGVhcjpoYXMoLnJhdGluZy1pbnB1dF9fcmFkaW86Zm9jdXMtdmlzaWJsZSkge1xuICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXdpZHRoKSBzb2xpZCB2YXIoLS1mb2N1cy1jb2xvcik7XG4gICAgb3V0bGluZS1vZmZzZXQ6IC0ycHg7XG59XG5cbi5yYXRpbmctaW5wdXRfX2NsZWFyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBtaW4taGVpZ2h0OiAyLjc1cmVtO1xuICAgIHBhZGRpbmctaW5saW5lOiB2YXIoLS1zcGFjZS0yeHMpO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tc3RlcC0tMSk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtY29udHJvbCk7XG59XG5cbi5yYXRpbmctaW5wdXRfX2NsZWFyIHNwYW4ge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIHRleHQtZGVjb3JhdGlvbi1zdHlsZTogZG90dGVkO1xuICAgIHRleHQtdW5kZXJsaW5lLW9mZnNldDogLjJlbTtcbn1cblxuLnJhdGluZy1pbnB1dF9fY2xlYXI6aGFzKC5yYXRpbmctaW5wdXRfX3JhZGlvOmNoZWNrZWQpIHNwYW4ge1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS13ZWlnaHQtc2VtaWJvbGQpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1pbmspO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFJlY2hlcmNoZSAqL1xuXG4vKiBCYXJyZSBkZSByZWNoZXJjaGUgc3VyIGZvbmQgc29tYnJlIDogY2hhbXAgY2xhaXIgKyBib3V0b24gYWNjb2zDqS4gKi9cbi5zZWFyY2gge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbWF4LXdpZHRoOiB2YXIoLS13aWR0aC1yZWFkaW5nKTtcbn1cblxuLnNlYXJjaCAuaW5wdXQge1xuICAgIGZsZXg6IDE7XG4gICAgbWluLXdpZHRoOiAwO1xuICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWNvbnRyb2wpIDAgMCB2YXIoLS1yYWRpdXMtY29udHJvbCk7XG59XG5cbi5zZWFyY2ggLmJ0biB7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zb2Z0KTtcbiAgICBib3JkZXItbGVmdDogMDtcbiAgICBib3JkZXItcmFkaXVzOiAwIHZhcigtLXJhZGl1cy1jb250cm9sKSB2YXIoLS1yYWRpdXMtY29udHJvbCkgMDtcbn1cbiIsIi8qXG4gKiBDb21wb3NhbnRzIMKrIGxpdnJlIMK7IDogY291dmVydHVyZSwgY2FydGUsIGJhZGdlIGRlIHN0YXR1dCwgbm90ZSBlbiDDqXRvaWxlcy5cbiAqIEJhbGlzYWdlIDogdGVtcGxhdGVzL19jb21wb25lbnRzL2Jvb2suaHRtbC50d2lnLlxuICovXG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb3V2ZXJ0dXJlICovXG5cbi5jb3ZlciB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYXNwZWN0LXJhdGlvOiAyIC8gMztcbiAgICBvYmplY3QtZml0OiBjb3ZlcjtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbiAgICBib3JkZXItcmFkaXVzOiAxcHggM3B4IDNweCAxcHg7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgICAgaW5zZXQgM3B4IDAgMCByZ2IoMCAwIDAgLyAuMTgpLCAgICAgLyogY2hhcm5pw6hyZSBkdSBkb3MgKi9cbiAgICAgICAgMCAxcHggMnB4IHJnYigwIDAgMCAvIC4zNSk7XG59XG5cbi8qXG4gKiBSZWxpdXJlIGRlIHRvaWxlLCBxdWFuZCBsZSBjYXRhbG9ndWUgbidhIHBhcyBkJ2ltYWdlIDogdGl0cmUgZW4gRnJhdW5jZXMgZW50cmVcbiAqIGRldXggZmlsZXRzLCBjb21tZSB1biBsaXZyZSByZWxpw6kgc2FucyBqYXF1ZXR0ZS4gLS1jbG90aCB2aWVudCBkdSBnYWJhcml0LlxuICovXG4uY292ZXItLWNsb3RoIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZ2FwOiAuMzVlbTtcbiAgICBwYWRkaW5nOiAuNmVtIC40NWVtIC42ZW0gLjdlbTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGNvbnRhaW5lci10eXBlOiBpbmxpbmUtc2l6ZTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYmcpOyAgICAgICAgICAgICAgICAgLyogc3VyIHRvaWxlIGNsYWlyZSA6ID49IDYuMjcgKi9cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jbG90aCwgdmFyKC0tY2xvdGgtMSkpO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6XG4gICAgICAgIGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHRyYW5zcGFyZW50IDklLCByZ2IoMTMgMzMgNDYgLyAuNTUpIDklLCByZ2IoMTMgMzMgNDYgLyAuNTUpIGNhbGMoOSUgKyAxcHgpLCB0cmFuc3BhcmVudCBjYWxjKDklICsgMXB4KSxcbiAgICAgICAgICAgIHRyYW5zcGFyZW50IDkxJSwgcmdiKDEzIDMzIDQ2IC8gLjU1KSA5MSUsIHJnYigxMyAzMyA0NiAvIC41NSkgY2FsYyg5MSUgKyAxcHgpLCB0cmFuc3BhcmVudCBjYWxjKDkxJSArIDFweCkpLFxuICAgICAgICBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYigwIDAgMCAvIC4xNCksIHRyYW5zcGFyZW50IDEyJSk7XG59XG5cbi5jb3Zlcl9fdGl0bGUge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc2VyaWYpO1xuICAgIGZvbnQtc2l6ZTogY2xhbXAoLjVyZW0sIDEyY3FpLCAxLjZyZW0pO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS13ZWlnaHQtc2VtaWJvbGQpO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjE7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIG92ZXJmbG93LXdyYXA6IGJyZWFrLXdvcmQ7XG4gICAgaHlwaGVuczogYXV0bztcbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDQ7XG4gICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDtcbn1cblxuLmNvdmVyX19hdXRob3Ige1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgZm9udC1zaXplOiBjbGFtcCguNXJlbSwgNy41Y3FpLCAuOXJlbSk7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDYXJ0ZSBsaXZyZSAqL1xuXG4vKlxuICogVW5lIGZpY2hlIHBvc8OpZSBzdXIgbGEgdGFibGUgOiBjb2lucyBkZSBjb3V2ZXJ0dXJlIMOgIHBlaW5lIGFycm9uZGlzLCBkb3MgZHJvaXQsXG4gKiB0cmFuY2hlIGRlIHBhZ2VzIHZpc2libGUgZW4gYmFzIMOgIGRyb2l0ZSAoLS1zaGFkb3ctYm9vaykuIFRvdXRlIGxhIGNhcnRlIGVzdFxuICogY2xpcXVhYmxlIHZpYSBsZSBsaWVuIGR1IHRpdHJlIMOpdGlyw6kuXG4gKi9cbi5ib29rLWNhcmQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogNC41cmVtIDFmcjtcbiAgICBnYXA6IHZhcigtLXNwYWNlLXMpO1xuICAgIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2Utcyk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWJvb2spO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1ib29rKTtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgICB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24pIHZhcigtLWVhc2Utb3V0KSxcbiAgICAgICAgYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbikgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG4uYm9vay1jYXJkOmhvdmVyIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCkgcm90YXRlKC0uM2RlZyk7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWJvb2stbGlmdGVkKTtcbn1cblxuLyogTCdhbm5lYXUgZGUgZm9jdXMgZW50b3VyZSBsYSBjYXJ0ZSBlbnRpw6hyZSwgcGFzIHNldWxlbWVudCBsZSB0aXRyZS4gKi9cbi5ib29rLWNhcmQ6aGFzKC5ib29rLWNhcmRfX2xpbms6Zm9jdXMtdmlzaWJsZSkge1xuICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXdpZHRoKSBzb2xpZCB2YXIoLS1jb2xvci1hY2NlbnQtYnJpZ2h0KTsgICAvKiBzdXIgbGUgZm9uZCA6IDYuMjAgKi9cbiAgICBvdXRsaW5lLW9mZnNldDogNHB4O1xufVxuXG4uYm9vay1jYXJkX19saW5rOmZvY3VzLXZpc2libGUge1xuICAgIG91dGxpbmU6IG5vbmU7XG59XG5cbi5ib29rLWNhcmRfX2JvZHkge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTN4cyk7XG4gICAgbWluLXdpZHRoOiAwO1xufVxuXG4uYm9vay1jYXJkX190aXRsZSB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zdGVwLTEpO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS13ZWlnaHQtc2VtaWJvbGQpO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sZWFkaW5nLXNudWcpO1xuICAgIG92ZXJmbG93LXdyYXA6IGFueXdoZXJlO1xufVxuXG4uYm9vay1jYXJkX19saW5rIHtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItaW5rKTtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi5ib29rLWNhcmRfX2xpbms6OmFmdGVyIHtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldDogMDtcbiAgICBib3JkZXItcmFkaXVzOiBpbmhlcml0O1xufVxuXG4uYm9vay1jYXJkOmhvdmVyIC5ib29rLWNhcmRfX2xpbmsge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIHRleHQtZGVjb3JhdGlvbi10aGlja25lc3M6IDFweDtcbn1cblxuLmJvb2stY2FyZF9fYXV0aG9yIHtcbiAgICBmb250LXdlaWdodDogdmFyKC0td2VpZ2h0LW1lZGl1bSk7XG59XG5cbi5ib29rLWNhcmRfX3Nlcmllcyxcbi5ib29rLWNhcmRfX3BhZ2VzIHtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtLTEpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTtcbn1cblxuLmJvb2stY2FyZF9fbWV0YSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTJ4cykgdmFyKC0tc3BhY2UteHMpO1xuICAgIG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTJ4cyk7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAzNnJlbSkge1xuICAgIC5ib29rLWNhcmQge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDUuNXJlbSAxZnI7XG4gICAgICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLW0pIHZhcigtLXNwYWNlLW0pIHZhcigtLXNwYWNlLW0pIHZhcigtLXNwYWNlLXMpO1xuICAgIH1cbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJhZGdlIGRlIHN0YXR1dCAqL1xuXG4vKlxuICogU2V1bCDDqWzDqW1lbnQgZnJhbmNoZW1lbnQgYXJyb25kaSBkdSBzeXN0w6htZS4gQ2hhcXVlIHN0YXR1dCBhIHVuIHBpY3RvZ3JhbW1lXG4gKiBkaXN0aW5jdCAoY2VyY2xlIHZpZGUsIGRlbWktY2VyY2xlLCBjb2NoZSwgYmFycmUpIGVuIHBsdXMgZGUgc2EgY291bGV1ci5cbiAqL1xuLnN0YXR1cy1iYWRnZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IC40ZW07XG4gICAgcGFkZGluZzogLjE1ZW0gLjY1ZW0gLjE1ZW0gLjVlbTtcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zYW5zKTtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtLTEpO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS13ZWlnaHQtc2VtaWJvbGQpO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQ7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCBjdXJyZW50Q29sb3I7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWJhZGdlKTtcbn1cblxuLnN0YXR1cy1iYWRnZTo6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIGZsZXg6IG5vbmU7XG4gICAgd2lkdGg6IC43ZW07XG4gICAgaGVpZ2h0OiAuN2VtO1xuICAgIGJvcmRlcjogMS41cHggc29saWQgY3VycmVudENvbG9yO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbn1cblxuLnN0YXR1cy1iYWRnZS0tdG8tcmVhZCB7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpOyAgICAgICAgIC8qIDUuNTkgKi9cbn1cblxuLnN0YXR1cy1iYWRnZS0tcmVhZGluZyB7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1pbmspOyAgICAgICAgIC8qIDQuNjQgOiBsYSBsZWN0dXJlIGVuIGNvdXJzID0gcHJvZ3Jlc3Npb24gKi9cbn1cblxuLnN0YXR1cy1iYWRnZS0tcmVhZGluZzo6YmVmb3JlIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIGN1cnJlbnRDb2xvciA1MCUsIHRyYW5zcGFyZW50IDUwJSk7XG59XG5cbi5zdGF0dXMtYmFkZ2UtLXJlYWQge1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1wYXJjaG1lbnQpOyAgICAgICAgICAvKiBzdXIgc3VjY8OocyA6IDQuNzAgKi9cbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvci1zdWNjZXNzKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLXN1Y2Nlc3MpO1xufVxuXG4uc3RhdHVzLWJhZGdlLS1yZWFkOjpiZWZvcmUge1xuICAgIHdpZHRoOiAuNzVlbTtcbiAgICBoZWlnaHQ6IC40NWVtO1xuICAgIG1hcmdpbi10b3A6IC0uMmVtO1xuICAgIGJvcmRlci13aWR0aDogMCAwIDJweCAycHg7XG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtNDVkZWcpO1xufVxuXG4uc3RhdHVzLWJhZGdlLS1hYmFuZG9uZWQge1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTtcbiAgICBib3JkZXItc3R5bGU6IGRhc2hlZDtcbn1cblxuLnN0YXR1cy1iYWRnZS0tYWJhbmRvbmVkOjpiZWZvcmUge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHRyYW5zcGFyZW50IDQ0JSwgY3VycmVudENvbG9yIDQ0JSwgY3VycmVudENvbG9yIDU2JSwgdHJhbnNwYXJlbnQgNTYlKTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIMOJdG9pbGVzIChsZWN0dXJlIHNldWxlKSAqL1xuXG4uc3RhcnMge1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGdhcDogMXB4O1xufVxuXG4uc3RhcnMgLnN0YXIge1xuICAgIHdpZHRoOiAxLjA1cmVtO1xuICAgIGhlaWdodDogMS4wNXJlbTtcbiAgICBmaWxsOiB0cmFuc3BhcmVudDtcbiAgICBzdHJva2U6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpO1xuICAgIHN0cm9rZS13aWR0aDogMS42O1xuICAgIHN0cm9rZS1saW5lam9pbjogcm91bmQ7XG59XG5cbi5zdGFyc19fc3Rhci5pcy1maWxsZWQgLnN0YXIge1xuICAgIGZpbGw6IHZhcigtLWNvbG9yLWFjY2VudCk7ICAgICAgICAgICAgICAvKiAzLjUyIHN1ciBwYXJjaGVtaW4gKi9cbiAgICBzdHJva2U6IHZhcigtLWNvbG9yLWFjY2VudC1pbmspO1xufVxuIiwiLypcbiAqIFJldG91cnMgw6AgbCd1dGlsaXNhdGV1ciA6IG1lc3NhZ2VzIGZsYXNoIGV0IGluZGljYXRldXIgZGUgc3luY2hyb25pc2F0aW9uIGhvcnMtbGlnbmUuXG4gKi9cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1lc3NhZ2VzIGZsYXNoICovXG5cbi5mbGFzaC1zdGFjayB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTJ4cyk7XG4gICAgbWF4LXdpZHRoOiB2YXIoLS13aWR0aC1yZWFkaW5nKTtcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS1sKTtcbn1cblxuLypcbiAqIFVuIHBhcGlsbG9uIGdsaXNzw6kgZGFucyBsZSBjYXJuZXQgOiBiYW5kZSBkZSBwYXJjaGVtaW4sIG9uZ2xldCBjb2xvcsOpIMOgIGdhdWNoZSBldFxuICogcGljdG9ncmFtbWUuIFBsYXQsIHNhbnMgb21icmUg4oCUIGlsIGluZm9ybWUsIGlsIG5lIHNlIG1hbmlwdWxlIHBhcy5cbiAqL1xuLmZsYXNoIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2UteHMpIHZhcigtLXNwYWNlLXMpIHZhcigtLXNwYWNlLXhzKSBjYWxjKHZhcigtLXNwYWNlLXMpICsgMS42cmVtKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0td2VpZ2h0LW1lZGl1bSk7XG4gICAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB2YXIoLS1mbGFzaC1jb2xvciwgdmFyKC0tY29sb3ItdGV4dC1tdXRlZCkpO1xuICAgIGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tcmFkaXVzLWNvbnRyb2wpIHZhcigtLXJhZGl1cy1jb250cm9sKSAwO1xufVxuXG4uZmxhc2g6OmJlZm9yZSB7XG4gICAgY29udGVudDogdmFyKC0tZmxhc2gtZ2x5cGgsIFwiaVwiKTtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiBjYWxjKHZhcigtLXNwYWNlLXhzKSArIC4xNWVtKTtcbiAgICBsZWZ0OiB2YXIoLS1zcGFjZS1zKTtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgd2lkdGg6IDEuMnJlbTtcbiAgICBoZWlnaHQ6IDEuMnJlbTtcbiAgICBmb250LXNpemU6IC44cmVtO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS13ZWlnaHQtZGlzcGxheSk7XG4gICAgbGluZS1oZWlnaHQ6IDE7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXBhcmNobWVudCk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tZmxhc2gtY29sb3IsIHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpKTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG59XG5cbi5mbGFzaC0tc3VjY2VzcyB7XG4gICAgLS1mbGFzaC1jb2xvcjogdmFyKC0tY29sb3Itc3VjY2Vzcyk7XG4gICAgLS1mbGFzaC1nbHlwaDogXCLinJNcIjtcbn1cblxuLmZsYXNoLS1pbmZvLFxuLmZsYXNoLS1ub3RpY2Uge1xuICAgIC0tZmxhc2gtY29sb3I6IHZhcigtLWNvbG9yLXN1cmZhY2UpO1xuICAgIC0tZmxhc2gtZ2x5cGg6IFwiaVwiO1xufVxuXG4uZmxhc2gtLXdhcm5pbmcge1xuICAgIC0tZmxhc2gtY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1pbmspO1xuICAgIC0tZmxhc2gtZ2x5cGg6IFwiIVwiO1xufVxuXG4uZmxhc2gtLWRhbmdlcixcbi5mbGFzaC0tZXJyb3Ige1xuICAgIC0tZmxhc2gtY29sb3I6IHZhcigtLWNvbG9yLWRhbmdlcik7XG4gICAgLS1mbGFzaC1nbHlwaDogXCIhXCI7XG59XG5cbi8qIEJhbmRlYXUgZCdhbGVydGUgZGFucyBsZSBjb250ZW51IChleC4gwqsgYXVjdW4gYXV0ZXVyIGVuIGJhc2UgwrspICovXG4ubm90aWNlIHtcbiAgICBtYXgtd2lkdGg6IHZhcigtLXdpZHRoLXJlYWRpbmcpO1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLXhzKSB2YXIoLS1zcGFjZS1zKTtcbiAgICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHZhcigtLWNvbG9yLWFjY2VudC1pbmspO1xuICAgIGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tcmFkaXVzLWNvbnRyb2wpIHZhcigtLXJhZGl1cy1jb250cm9sKSAwO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3luY2hyb25pc2F0aW9uICovXG5cbi8qXG4gKiBJbmRpY2F0ZXVyIGRlIHN5bmNocm8gKGFzc2V0cy9jb250cm9sbGVycy9zeW5jX3N0YXR1c19jb250cm9sbGVyLmpzKS4gUGFzdGlsbGVcbiAqIGZsb3R0YW50ZSBlbiBiYXMsIGF1LWRlc3N1cyBkZSBsYSB6b25lIHPDu3JlLiBkYXRhLXN0YXRlIHBpbG90ZSBsZSBwaWN0b2dyYW1tZSA6XG4gKiBvZmZsaW5lIHwgcGVuZGluZyB8IGZsdXNoaW5nIHwgZmFpbGVkIHwgc3luY2VkLlxuICovXG4uc3luYy1zdGF0dXMge1xuICAgIHBvc2l0aW9uOiBmaXhlZDtcbiAgICByaWdodDogbWF4KHZhcigtLXNwYWNlLXMpLCBlbnYoc2FmZS1hcmVhLWluc2V0LXJpZ2h0KSk7XG4gICAgYm90dG9tOiBjYWxjKHZhcigtLXNwYWNlLXMpICsgZW52KHNhZmUtYXJlYS1pbnNldC1ib3R0b20pKTtcbiAgICBsZWZ0OiBtYXgodmFyKC0tc3BhY2UtcyksIGVudihzYWZlLWFyZWEtaW5zZXQtbGVmdCkpO1xuICAgIHotaW5kZXg6IDEwMDA7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTJ4cykgdmFyKC0tc3BhY2Utcyk7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2UtMnhzKSB2YXIoLS1zcGFjZS0yeHMpIHZhcigtLXNwYWNlLTJ4cykgdmFyKC0tc3BhY2Utcyk7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zdGVwLS0xKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0td2VpZ2h0LW1lZGl1bSk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQpOyAgICAgICAgICAgICAgIC8qIHN1ciBzdXJmYWNlIDogOS4zMiAqL1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXN1cmZhY2UpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNvbG9yLXJ1bGUpO1xuICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdmFyKC0tc3luYy1jb2xvciwgdmFyKC0tY29sb3ItdGV4dC1zb2Z0KSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWNvbnRyb2wpO1xuICAgIGJveC1zaGFkb3c6IDAgMTBweCAyNHB4IC04cHggcmdiKDAgMCAwIC8gLjcpO1xuICAgIGFuaW1hdGlvbjogc3luYy1pbiB2YXIoLS1kdXJhdGlvbikgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogMzZyZW0pIHtcbiAgICAuc3luYy1zdGF0dXMge1xuICAgICAgICBsZWZ0OiBhdXRvO1xuICAgICAgICBtYXgtd2lkdGg6IDI4cmVtO1xuICAgIH1cbn1cblxuLnN5bmMtc3RhdHVzX19kb3Qge1xuICAgIGZsZXg6IG5vbmU7XG4gICAgd2lkdGg6IC43cmVtO1xuICAgIGhlaWdodDogLjdyZW07XG4gICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tc3luYy1jb2xvciwgdmFyKC0tY29sb3ItdGV4dC1zb2Z0KSk7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xufVxuXG4uc3luYy1zdGF0dXNfX3RleHQge1xuICAgIGZsZXg6IDE7XG4gICAgbWluLXdpZHRoOiA4cmVtO1xuICAgIHBhZGRpbmctYmxvY2s6IHZhcigtLXNwYWNlLTN4cyk7XG59XG5cbi5zeW5jLXN0YXR1c19fYWN0aW9uIHtcbiAgICBtaW4taGVpZ2h0OiAyLjI1cmVtO1xuICAgIHBhZGRpbmc6IDAgdmFyKC0tc3BhY2UteHMpO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS13ZWlnaHQtc2VtaWJvbGQpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtYnJpZ2h0KTsgICAgICAvKiBzdXIgc3VyZmFjZSA6IDQuNzQgKi9cbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWNvbnRyb2wpO1xufVxuXG4uc3luYy1zdGF0dXNfX2FjdGlvbjpob3ZlciB7XG4gICAgYm9yZGVyLWNvbG9yOiBjdXJyZW50Q29sb3I7XG59XG5cbi8qIE1vYmlsZSwgw6l0YXQgZW4gw6ljaGVjIDogbGUgbWVzc2FnZSBzdXIgc2EgbGlnbmUsIGxlcyBkZXV4IGFjdGlvbnMgZW5zZW1ibGUgZGVzc291cy4gKi9cbkBtZWRpYSAobWF4LXdpZHRoOiAzNS45OXJlbSkge1xuICAgIC5zeW5jLXN0YXR1c1tkYXRhLXN0YXRlPVwiZmFpbGVkXCJdIC5zeW5jLXN0YXR1c19fdGV4dCB7XG4gICAgICAgIGZsZXgtYmFzaXM6IGNhbGMoMTAwJSAtIDJyZW0pO1xuICAgIH1cblxuICAgIC5zeW5jLXN0YXR1c1tkYXRhLXN0YXRlPVwiZmFpbGVkXCJdIC5zeW5jLXN0YXR1c19fdGV4dCArIC5zeW5jLXN0YXR1c19fYWN0aW9uIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87XG4gICAgfVxufVxuXG4vKiBQYXN0aWxsZSBldCBvbmdsZXQgc3VyIHN1cmZhY2UgKGdyYXBoaXNtZXMsIHNldWlsIDMpIDogYWNjZW50IGNsYWlyIDQuNzQsIGRhbmdlciBjbGFpciA0Ljc0LCB2ZXJ0IGNsYWlyIDYuNTQuICovXG4uc3luYy1zdGF0dXNbZGF0YS1zdGF0ZT1cIm9mZmxpbmVcIl0ge1xuICAgIC0tc3luYy1jb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zb2Z0KTtcbn1cblxuLnN5bmMtc3RhdHVzW2RhdGEtc3RhdGU9XCJwZW5kaW5nXCJdIHtcbiAgICAtLXN5bmMtY29sb3I6IHZhcigtLWNvbG9yLWFjY2VudC1icmlnaHQpO1xufVxuXG4uc3luYy1zdGF0dXNbZGF0YS1zdGF0ZT1cInBlbmRpbmdcIl0gLnN5bmMtc3RhdHVzX19kb3Qge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byB0b3AsIHZhcigtLXN5bmMtY29sb3IpIDUwJSwgdHJhbnNwYXJlbnQgNTAlKTtcbn1cblxuLnN5bmMtc3RhdHVzW2RhdGEtc3RhdGU9XCJmbHVzaGluZ1wiXSB7XG4gICAgLS1zeW5jLWNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtYnJpZ2h0KTtcbn1cblxuLnN5bmMtc3RhdHVzW2RhdGEtc3RhdGU9XCJmbHVzaGluZ1wiXSAuc3luYy1zdGF0dXNfX2RvdCB7XG4gICAgYm9yZGVyLXJpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbiAgICBhbmltYXRpb246IHN5bmMtc3BpbiAuOXMgbGluZWFyIGluZmluaXRlO1xufVxuXG4uc3luYy1zdGF0dXNbZGF0YS1zdGF0ZT1cImZhaWxlZFwiXSB7XG4gICAgLS1zeW5jLWNvbG9yOiB2YXIoLS1jb2xvci1kYW5nZXItYnJpZ2h0KTtcbn1cblxuLnN5bmMtc3RhdHVzW2RhdGEtc3RhdGU9XCJmYWlsZWRcIl0gLnN5bmMtc3RhdHVzX19kb3Qge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLXN5bmMtY29sb3IpO1xufVxuXG4uc3luYy1zdGF0dXNbZGF0YS1zdGF0ZT1cInN5bmNlZFwiXSB7XG4gICAgLS1zeW5jLWNvbG9yOiAjOWNjNWExO1xufVxuXG4uc3luYy1zdGF0dXNbZGF0YS1zdGF0ZT1cInN5bmNlZFwiXSAuc3luYy1zdGF0dXNfX2RvdCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tc3luYy1jb2xvcik7XG59XG5cbkBrZXlmcmFtZXMgc3luYy1zcGluIHtcbiAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH1cbn1cblxuQGtleWZyYW1lcyBzeW5jLWluIHtcbiAgICBmcm9tIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC41cmVtKTsgfVxufVxuXG4vKiBQYXMgZGUgcm90YXRpb24gbmkgZGUgZ2xpc3NlbWVudCA6IGwnw6l0YXQgcmVzdGUgbGlzaWJsZSBwYXIgbGUgdGV4dGUgZXQgbGEgcGFzdGlsbGUuICovXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAgIC5zeW5jLXN0YXR1cyxcbiAgICAuc3luYy1zdGF0dXNbZGF0YS1zdGF0ZT1cImZsdXNoaW5nXCJdIC5zeW5jLXN0YXR1c19fZG90IHtcbiAgICAgICAgYW5pbWF0aW9uOiBub25lO1xuICAgIH1cblxuICAgIC5zeW5jLXN0YXR1c1tkYXRhLXN0YXRlPVwiZmx1c2hpbmdcIl0gLnN5bmMtc3RhdHVzX19kb3Qge1xuICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLXN5bmMtY29sb3IpO1xuICAgICAgICBib3JkZXItc3R5bGU6IGRvdHRlZDtcbiAgICB9XG59XG4iLCIvKlxuICogQ2hpZmZyZXMgZGUgbGVjdHVyZSA6IGNvbXB0ZXVycywgcHJvZ3Jlc3Npb24gZGUgbCdvYmplY3RpZiwgZ3JpbGxlIGRlcyBtb2lzLlxuICogVXRpbGlzw6lzIHBhciBsZSB0YWJsZWF1IGRlIGJvcmQgZXQgbGUgYmlsYW4gYW5udWVsLlxuICovXG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDb21wdGV1cnMgKi9cblxuLypcbiAqIFBhcyBkZSB0dWlsZXMgaWRlbnRpcXVlcyA6IGRlIGdyYW5kcyBjaGlmZnJlcyBlbiBGcmF1bmNlcyBwb3PDqXMgc3VyIGxlIGZvbmQsXG4gKiBzw6lwYXLDqXMgcGFyIHVuIGZpbGV0IHZlcnRpY2FsLCBjb21tZSB1biB0b3RhbCBlbiBtYXJnZSBkJ3VuIGNhcm5ldC5cbiAqL1xuLnRhbGx5IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBnYXA6IHZhcigtLXNwYWNlLW0pIDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xufVxuXG4udGFsbHlfX2l0ZW0ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBwYWRkaW5nLWlubGluZTogMCB2YXIoLS1zcGFjZS1sKTtcbn1cblxuLnRhbGx5X19pdGVtICsgLnRhbGx5X19pdGVtIHtcbiAgICBwYWRkaW5nLWxlZnQ6IHZhcigtLXNwYWNlLWwpO1xuICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tY29sb3ItcnVsZSk7XG59XG5cbi50YWxseV9fdmFsdWUge1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXNlcmlmKTtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtNSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLXdlaWdodC1yZWd1bGFyKTtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogbGluaW5nLW51bXMgdGFidWxhci1udW1zO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIGxldHRlci1zcGFjaW5nOiAtLjAyZW07XG59XG5cbi50YWxseV9fbGFiZWwge1xuICAgIG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTN4cyk7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zdGVwLS0xKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0td2VpZ2h0LW1lZGl1bSk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc29mdCk7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPYmplY3RpZiAqL1xuXG4vKlxuICogQmxvYyBvYmplY3RpZiBzdXIgc3VyZmFjZS4gTGEgYmFycmUgZXN0IHVuIHJ1YmFuIGRlIG1hcnF1ZS1wYWdlIDogcGlzdGUgY3JldXPDqWVcbiAqIGVuIC0tY29sb3ItYmcsIHJlbXBsaXNzYWdlIGFjY2VudCAoZ3JhcGhpc21lIHN1ciBmb25kIDogMy40NykuXG4gKi9cbi5nb2FsIHtcbiAgICBtYXgtd2lkdGg6IHZhcigtLXdpZHRoLXJlYWRpbmcpO1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLW0pO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXN1cmZhY2UpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zaGVldCk7XG59XG5cbi5nb2FsX19oZWFkIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMnhzKSB2YXIoLS1zcGFjZS1zKTtcbn1cblxuLmdvYWxfX3RpdGxlIHtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtMSk7XG59XG5cbi5nb2FsX19maWd1cmUge1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS13ZWlnaHQtc2VtaWJvbGQpO1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG59XG5cbi5nb2FsX19maWd1cmUgc3BhbiB7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLXdlaWdodC1yZWd1bGFyKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zb2Z0KTtcbn1cblxuLnByb2dyZXNzIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgaGVpZ2h0OiAuNzVyZW07XG4gICAgbWFyZ2luLWJsb2NrOiB2YXIoLS1zcGFjZS1zKSB2YXIoLS1zcGFjZS0yeHMpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgYmFja2dyb3VuZDpcbiAgICAgICAgcmVwZWF0aW5nLWxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQgMCBjYWxjKDI1JSAtIDFweCksIHJnYigyNDAgMjIwIDE3NCAvIC4yMikgY2FsYygyNSUgLSAxcHgpIDI1JSksXG4gICAgICAgIHZhcigtLWNvbG9yLWJnKTtcbiAgICBib3JkZXItcmFkaXVzOiAxcHg7XG59XG5cbi5wcm9ncmVzc19fZmlsbCB7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFjY2VudCk7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAtM3B4IDAgcmdiKDAgMCAwIC8gLjIpO1xuICAgIHRyYW5zaXRpb246IHdpZHRoIHZhcigtLWR1cmF0aW9uKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5nb2FsX19ub3RlIHtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtLTEpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNvZnQpO1xufVxuXG4uZ29hbF9fYWN0aW9ucyB7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2Utcyk7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHcmlsbGUgZGVzIG1vaXMgKi9cblxuLypcbiAqIERvdXplIGNhc2VzLCBjaGFjdW5lIHVuZSBwZXRpdGUgw6l0YWfDqHJlIDogdW4gdHJhaXQgcGFyIGxpdnJlIHRlcm1pbsOpLiDDiWNobyBkaXJlY3RcbiAqIGRlIGwnw6l0YWfDqHJlIGR1IGJpbGFuIG1lbnN1ZWwsIHF1J2VsbGVzIG91dnJlbnQgYXUgY2xpYy5cbiAqL1xuLm1vbnRoLWdyaWQge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgbWlubWF4KDAsIDFmcikpO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMnhzKTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG5cbi8qIDMgY29sb25uZXMgKHRyaW1lc3RyZXMpIHN1ciBtb2JpbGUsIDQgcHVpcyA2IDogdG91am91cnMgZGVzIHJhbmfDqWVzIGNvbXBsw6h0ZXMuICovXG5AbWVkaWEgKG1pbi13aWR0aDogMzByZW0pIHtcbiAgICAubW9udGgtZ3JpZCB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDQsIG1pbm1heCgwLCAxZnIpKTtcbiAgICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA1MnJlbSkge1xuICAgIC5tb250aC1ncmlkIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoNiwgbWlubWF4KDAsIDFmcikpO1xuICAgIH1cbn1cblxuLm1vbnRoLXRpbGUge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIDIuMjVyZW0gYXV0bztcbiAgICBnYXA6IHZhcigtLXNwYWNlLTN4cyk7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLTJ4cykgdmFyKC0tc3BhY2UteHMpIHZhcigtLXNwYWNlLXhzKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dCk7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLXN1cmZhY2UpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zaGVldCk7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciB2YXIoLS1kdXJhdGlvbi1mYXN0KSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5tb250aC10aWxlOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTM0NjU2O1xufVxuXG4ubW9udGgtdGlsZV9fbmFtZSB7XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc2VyaWYpO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS13ZWlnaHQtc2VtaWJvbGQpO1xufVxuXG4vKiBMZSByYXlvbiA6IGRlcyB0cmFuY2hlcyBhbGlnbsOpZXMgc3VyIHVuZSBwbGFuY2hlLiAqL1xuLm1vbnRoLXRpbGVfX3NwaW5lcyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogZW5kO1xuICAgIGdhcDogMnB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIHZhcigtLWNvbG9yLXRleHQtc29mdCk7ICAgLyogcGxhbmNoZSA6IDUuMzkgc3VyIHN1cmZhY2UgKi9cbn1cblxuLm1vbnRoLXRpbGVfX3NwaW5lIHtcbiAgICBmbGV4OiBub25lO1xuICAgIHdpZHRoOiA1cHg7XG4gICAgaGVpZ2h0OiB2YXIoLS1oLCA4MCUpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNsb3RoLCB2YXIoLS1jbG90aC0xKSk7XG4gICAgYm9yZGVyLXJhZGl1czogMXB4IDFweCAwIDA7XG59XG5cbi5tb250aC10aWxlX19jb3VudCB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zdGVwLS0xKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zb2Z0KTtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xufVxuXG4ubW9udGgtdGlsZS0tZW1wdHkgLm1vbnRoLXRpbGVfX25hbWUge1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNvZnQpO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS13ZWlnaHQtcmVndWxhcik7XG59XG5cbi5tb250aC10aWxlLS1lbXB0eSAubW9udGgtdGlsZV9fc3BpbmVzIHtcbiAgICBib3JkZXItYm90dG9tLXN0eWxlOiBkb3R0ZWQ7XG59XG5cbi5tb250aC10aWxlW2FyaWEtY3VycmVudD1cImRhdGVcIl0ge1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIDFweCB2YXIoLS1jb2xvci1hY2NlbnQtYnJpZ2h0KTtcbn1cbiIsIi8qXG4gKiBSw6lwZXJ0b2lyZSAoYXV0ZXVycywgc8OpcmllcywgdG9tZXMsIGFubsOpZXMpIDogdW5lIHBhZ2UgZGUgY2FybmV0IHLDqWdsw6llLCBtYXJnZVxuICogdHJhY8OpZSDDoCBnYXVjaGUuIFBsYXQgOiBjJ2VzdCB1bmUgdGFibGUgZGVzIG1hdGnDqHJlcywgcGFzIHVuZSBwaWxlIGQnb2JqZXRzLlxuICovXG5cbi5pbmRleC1saXN0IHtcbiAgICBtYXgtd2lkdGg6IHZhcigtLXdpZHRoLXJlYWRpbmcpO1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLTJ4cykgMDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQgMi4yNXJlbSwgcmdiKDE3NyA5MiAzMSAvIC40NSkgMi4yNXJlbSwgcmdiKDE3NyA5MiAzMSAvIC40NSkgY2FsYygyLjI1cmVtICsgMXB4KSwgdHJhbnNwYXJlbnQgY2FsYygyLjI1cmVtICsgMXB4KSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXNoZWV0KTtcbiAgICBjb3VudGVyLXJlc2V0OiBpbmRleDtcbn1cblxuLmluZGV4LWxpc3RfX2l0ZW0gKyAuaW5kZXgtbGlzdF9faXRlbSB7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHJnYig5MiA4MyA3MSAvIC4yNSk7XG59XG5cbi5pbmRleC1saXN0X19saW5rIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICBnYXA6IHZhcigtLXNwYWNlLXMpO1xuICAgIG1pbi1oZWlnaHQ6IDIuNzVyZW07XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2UteHMpIHZhcigtLXNwYWNlLXMpIHZhcigtLXNwYWNlLXhzKSAzcmVtO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1pbmspO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLmluZGV4LWxpc3RfX2xpbms6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHJnYig0MiAzMyAyNCAvIC4wNSk7XG59XG5cbi5pbmRleC1saXN0X19saW5rOmZvY3VzLXZpc2libGUge1xuICAgIG91dGxpbmUtb2Zmc2V0OiAtM3B4O1xufVxuXG4uaW5kZXgtbGlzdF9fbmFtZSB7XG4gICAgZmxleDogMTtcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zZXJpZik7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zdGVwLTEpO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS13ZWlnaHQtbWVkaXVtKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGVhZGluZy1zbnVnKTtcbn1cblxuLmluZGV4LWxpc3RfX2xpbms6aG92ZXIgLmluZGV4LWxpc3RfX25hbWUge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIHRleHQtZGVjb3JhdGlvbi10aGlja25lc3M6IDFweDtcbiAgICB0ZXh0LXVuZGVybGluZS1vZmZzZXQ6IC4yZW07XG59XG5cbi5pbmRleC1saXN0X19tZXRhIHtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtLTEpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xufVxuXG4vKiBMaXN0ZSBudW3DqXJvdMOpZSAodG9tZXMgZCd1bmUgc8OpcmllKSA6IGxlIG51bcOpcm8gcyfDqWNyaXQgZGFucyBsYSBtYXJnZS4gKi9cbi5pbmRleC1saXN0LS1udW1iZXJlZCAuaW5kZXgtbGlzdF9faXRlbSB7XG4gICAgY291bnRlci1pbmNyZW1lbnQ6IGluZGV4O1xufVxuXG4uaW5kZXgtbGlzdC0tbnVtYmVyZWQgLmluZGV4LWxpc3RfX2xpbmsge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLmluZGV4LWxpc3QtLW51bWJlcmVkIC5pbmRleC1saXN0X19saW5rOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IHZhcigtLWluZGV4LCBjb3VudGVyKGluZGV4KSk7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDIuMjVyZW07XG4gICAgZm9udC1mYW1pbHk6IHZhcigtLWZvbnQtc2VyaWYpO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItYWNjZW50LWluayk7ICAgICAgICAgLyogNC42NCAqL1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLmVtcHR5LXN0YXRlIHtcbiAgICBtYXgtd2lkdGg6IHZhcigtLXdpZHRoLXJlYWRpbmcpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNvZnQpO1xufVxuIiwiLypcbiAqIEFnZW5jZW1lbnRzIHLDqWN1cnJlbnRzIGF1dG91ciBkZXMgZm9ybXVsYWlyZXMgOiBwYWlyZXMgZGUgY2hhbXBzLCB6b25lIGRlXG4gKiBzdXBwcmVzc2lvbiBzw6lwYXLDqWUsIGNoYW1wIGNoaWZmcsOpIG1pcyBlbiB2YWxldXIuXG4gKi9cblxuLyogRGV1eCBjaGFtcHMgY8O0dGUgw6AgY8O0dGUgZMOocyBxdSdpbCB5IGEgbGEgcGxhY2UgKGRhdGVzIGTDqWJ1dC9maW4sIHBhZ2VzL3RvbWUpLiAqL1xuLmZvcm1fX3BhaXIge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ2FwOiB2YXIoLS1zcGFjZS1tKTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDMwcmVtKSB7XG4gICAgLmZvcm1fX3BhaXIge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBzdGFydDtcbiAgICB9XG59XG5cbi5maWVsZC1ncm91cCA+IC5maWVsZF9faGVscCB7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtM3hzKTtcbn1cblxuLyogVW4gb2JqZWN0aWYgc2UgbGl0IGNvbW1lIHVuIGNoaWZmcmUgOiBncmFuZCwgZW4gRnJhdW5jZXMuICovXG4uZmllbGQgaW5wdXQuaW5wdXQtLWZpZ3VyZSB7XG4gICAgbWF4LXdpZHRoOiA4cmVtO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXNlcmlmKTtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtMyk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLXdlaWdodC1zZW1pYm9sZCk7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IGxpbmluZy1udW1zIHRhYnVsYXItbnVtcztcbn1cblxuLypcbiAqIFN1cHByZXNzaW9uIDogdm9sb250YWlyZW1lbnQgaG9ycyBkZSBsYSBmZXVpbGxlIGR1IGZvcm11bGFpcmUgZXQgYXByw6hzIGVsbGUsIHBvdXJcbiAqIHF1J29uIG5lIGxhIGTDqWNsZW5jaGUgcGFzIGVuIHZpc2FudCDCqyBFbnJlZ2lzdHJlciDCuy5cbiAqL1xuLmRhbmdlci16b25lIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTJ4cykgdmFyKC0tc3BhY2UtbSk7XG4gICAgbWF4LXdpZHRoOiB2YXIoLS13aWR0aC1yZWFkaW5nKTtcbiAgICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS1sKTtcbiAgICBwYWRkaW5nLXRvcDogdmFyKC0tc3BhY2UtbSk7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zdGVwLS0xKTtcbiAgICBib3JkZXItdG9wOiAxcHggZGFzaGVkIHZhcigtLWNvbG9yLXJ1bGUpO1xufVxuIiwiLypcbiAqIMOJdGFnw6hyZSBwYXJ0YWfDqWUgKHRlbXBsYXRlcy9fY29tcG9uZW50cy9zaGVsZi5odG1sLnR3aWcpIDogYmlsYW4gbWVuc3VlbCBldFxuICogTWEgYmlibGlvdGjDqHF1ZS5cbiAqXG4gKiBVbiBkb3MgZGUgbGl2cmUgcGFyIGxlY3R1cmUsIHBvc8OpIHN1ciB1bmUgcGxhbmNoZS4gU2V1bGUgbGEgaGF1dGV1ciBwb3J0ZSB1bmVcbiAqIGRvbm7DqWUgKGxlIG5vbWJyZSBkZSBwYWdlcywgdmlhIC0taCBlbnRyZSAwIGV0IDEpIDsgbGEgY291bGV1ciBkZSB0b2lsZSBlc3RcbiAqIGTDqWNvcmF0aXZlLlxuICpcbiAqIEludGVyYWN0aW9uIHNhbnMgSmF2YVNjcmlwdCwgZGFucyBsZXMgZGV1eCBtb2RlcyA6XG4gKiAgLSBzdXJ2b2wgb3UgZm9jdXMgY2xhdmllciAtPiBsJ8OpdGlxdWV0dGUgZHUgbGl2cmUgcydhZmZpY2hlIHNvdXMgbGEgcGxhbmNoZSxcbiAqICAgIGRhbnMgdW5lIHpvbmUgcsOpc2VydsOpZSAoZWxsZSBuZSBtYXNxdWUgZG9uYyBhdWN1biBjb250ZW51LCBjZi4gV0NBRyAxLjQuMTMpLlxuICpcbiAqIC5zaGVsZi0tYW5jaG9yIChiaWxhbikgOiBsZSBkb3MgZXN0IHVuIGxpZW4sIGNsaWMgLyBFbnRyw6llIGFuY3JlIHZlcnMgbGEgZmljaGUgZGVcbiAqIGxlY3R1cmUsIG1pc2UgZW4gdmFsZXVyIHBhciA6dGFyZ2V0LiBMJ8OpdGlxdWV0dGUgZXN0IGRhbnMgbGUgbGllbiA6IGMnZXN0IHNvbiBub21cbiAqIGFjY2Vzc2libGUuXG4gKlxuICogLnNoZWxmLS1wYW5lbCAoYmlibGlvdGjDqHF1ZSkgOiBsZSBkb3MgZXN0IHVuIGJvdXRvbiwgbCfDqXRpcXVldHRlIGVzdCBzYSBzxZN1ciBldFxuICogcG9ydGUgbGVzIGFjdGlvbnMgZHUgbGl2cmUuIFVuIGNsaWMgbCfDqXBpbmdsZSAoLmlzLW9wZW4sIHBvc8OpZSBwYXJcbiAqIGFzc2V0cy9jb250cm9sbGVycy9zaGVsZl9jb250cm9sbGVyLmpzKSBwb3VyIHF1ZSBsYSBzb3VyaXMgcHVpc3NlIGwnYXR0ZWluZHJlLlxuICovXG5cbi5zaGVsZiB7XG4gICAgLS1zaGVsZi1oZWlnaHQ6IDEzcmVtO1xuICAgIC0tc3BpbmUtd2lkdGg6IDIuNXJlbTtcbiAgICAtLWxhYmVsLWhlaWdodDogNC43NXJlbTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7ICAgICAgICAgICAgICAgICAgICAvKiBibG9jIGNvbnRlbmV1ciBkZXMgw6l0aXF1ZXR0ZXMgKi9cbiAgICBwYWRkaW5nLWJvdHRvbTogdmFyKC0tbGFiZWwtaGVpZ2h0KTtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDQ4cmVtKSB7XG4gICAgLnNoZWxmIHtcbiAgICAgICAgLS1zaGVsZi1oZWlnaHQ6IDE3cmVtO1xuICAgICAgICAtLXNwaW5lLXdpZHRoOiAzcmVtO1xuICAgIH1cbn1cblxuLyogTGUgZm9uZCBkdSBtZXVibGUgOiBwbHVzIHNvbWJyZSBlbiBoYXV0LCBjb21tZSBzb3VzIHVuZSB0YWJsZXR0ZS4gKi9cbi5zaGVsZl9fY2FzZSB7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS1tKSB2YXIoLS1zcGFjZS1zKSAwO1xuICAgIGJhY2tncm91bmQ6XG4gICAgICAgIGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHJnYigwIDAgMCAvIC4zNSksIHRyYW5zcGFyZW50IDMwJSksXG4gICAgICAgIHZhcigtLWNvbG9yLXN1cmZhY2UpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zaGVldCkgdmFyKC0tcmFkaXVzLXNoZWV0KSAwIDA7XG4gICAgc2Nyb2xsYmFyLWNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LXNvZnQpIHRyYW5zcGFyZW50O1xufVxuXG4vKiBMYSBwbGFuY2hlIDogY2hhbnQgY2xhaXIgZW4gaGF1dCwgw6lwYWlzc2V1ciwgb21icmUgcG9ydMOpZSBzdXIgbGUgbXVyLiAqL1xuLnNoZWxmX19yb3cge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgIGdhcDogM3B4O1xuICAgIG1pbi13aWR0aDogbWF4LWNvbnRlbnQ7XG4gICAgaGVpZ2h0OiB2YXIoLS1zaGVsZi1oZWlnaHQpO1xuICAgIG1hcmdpbjogMCBjYWxjKC0xICogdmFyKC0tc3BhY2UtcykpO1xuICAgIHBhZGRpbmc6IDAgdmFyKC0tc3BhY2UtbSk7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBib3JkZXItYm90dG9tOiAuODVyZW0gc29saWQgdmFyKC0tY29sb3ItcGFyY2htZW50LWVkZ2UpO1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDAgI2UyY2I5OCwgMCAxMHB4IDE0cHggLTZweCByZ2IoMCAwIDAgLyAuNik7XG59XG5cbi8qIFNlcnJlLWxpdnJlcyBlbiBmaW4gZGUgcmFuZ8OpZSA6IGTDqWNvcmF0aWYsIGlsIGZlcm1lIGxhIHJhbmfDqWUuICovXG4uc2hlbGZfX3Jvdzo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgZmxleDogbm9uZTtcbiAgICB3aWR0aDogLjVyZW07XG4gICAgaGVpZ2h0OiAzOCU7XG4gICAgbWFyZ2luLWxlZnQ6IDJweDtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHZhcigtLWNvbG9yLXBhcmNobWVudC1lZGdlKSwgI2E4OGM1OCk7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4IDJweCAwIDA7XG4gICAgYm94LXNoYWRvdzogLTRweCAwIDAgLTJweCByZ2IoMCAwIDAgLyAuMjUpO1xufVxuXG4uc2hlbGZfX3Nsb3Qge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgaGVpZ2h0OiAxMDAlO1xufVxuXG4vKiBMZSBkb3Mgb2NjdXBlIHRvdXRlIGxhIGhhdXRldXIgZGUgbGEgY2FzZSA6IGNpYmxlIGfDqW7DqXJldXNlLCBtw6ptZSBwb3VyIHVuIGxpdnJlXG4gICBjb3VydC4gTGllbiBhdSBiaWxhbiwgYm91dG9uIGVuIGJpYmxpb3Row6hxdWUg4oCUIGQnb8O5IGxhIHJlbWlzZSDDoCBwbGF0IGR1IGJvdXRvbi4gKi9cbi5zcGluZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7XG4gICAgd2lkdGg6IHZhcigtLXNwaW5lLXdpZHRoKTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgcGFkZGluZzogMDtcbiAgICBmb250OiBpbmhlcml0O1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1iZyk7XG4gICAgdGV4dC1hbGlnbjogaW5oZXJpdDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgYm9yZGVyOiAwO1xufVxuXG4uc3BpbmU6Zm9jdXMtdmlzaWJsZSB7XG4gICAgb3V0bGluZTogbm9uZTtcbn1cblxuLnNwaW5lX19ib2R5IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiBtYXgoMTglLCBjYWxjKHZhcigtLWgsIC41KSAqIDEwMCUpKTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNsb3RoLCB2YXIoLS1jbG90aC0xKSk7XG4gICAgYmFja2dyb3VuZC1pbWFnZTpcbiAgICAgICAgLyogZmlsZXRzIGRvcsOpcyBlbiB0w6p0ZSBldCBlbiBwaWVkICovXG4gICAgICAgIGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHRyYW5zcGFyZW50IC41NXJlbSwgcmdiKDEzIDMzIDQ2IC8gLjYpIC41NXJlbSwgcmdiKDEzIDMzIDQ2IC8gLjYpIGNhbGMoLjU1cmVtICsgMXB4KSwgdHJhbnNwYXJlbnQgY2FsYyguNTVyZW0gKyAxcHgpKSxcbiAgICAgICAgbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgdHJhbnNwYXJlbnQgLjU1cmVtLCByZ2IoMTMgMzMgNDYgLyAuNikgLjU1cmVtLCByZ2IoMTMgMzMgNDYgLyAuNikgY2FsYyguNTVyZW0gKyAxcHgpLCB0cmFuc3BhcmVudCBjYWxjKC41NXJlbSArIDFweCkpLFxuICAgICAgICAvKiByb25kZXVyIGR1IGRvcyAqL1xuICAgICAgICBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHJnYigwIDAgMCAvIC4yMiksIHJnYigyNTUgMjU1IDI1NSAvIC4xNikgMjIlLCB0cmFuc3BhcmVudCA1MCUsIHJnYigwIDAgMCAvIC4xKSA4NSUsIHJnYigwIDAgMCAvIC4yOCkpO1xuICAgIGJvcmRlci1yYWRpdXM6IDJweCAycHggMCAwO1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IGJvdHRvbSBjZW50ZXI7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi8qIFRpdHJlIGltcHJpbcOpIHN1ciBsZSBkb3MsIGx1IGRlIGJhcyBlbiBoYXV0IChjb252ZW50aW9uIGRlcyDDqWRpdGlvbnMgZnJhbsOnYWlzZXMpLiAqL1xuLnNwaW5lX190aXRsZSB7XG4gICAgbWF4LWhlaWdodDogY2FsYygxMDAlIC0gMS42cmVtKTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXNlcmlmKTtcbiAgICBmb250LXNpemU6IC44cmVtO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS13ZWlnaHQtc2VtaWJvbGQpO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG4gICAgd3JpdGluZy1tb2RlOiB2ZXJ0aWNhbC1ybDtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOyAgICAgICAgICAgICAvKiB0aXRyZSBzdXIgdG9pbGUgOiA+PSA2LjI3ICovXG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA0OHJlbSkge1xuICAgIC5zcGluZV9fdGl0bGUge1xuICAgICAgICBmb250LXNpemU6IC45cmVtO1xuICAgIH1cbn1cblxuLyogTm9tYnJlIGRlIHBhZ2VzIGluY29ubnUgOiBtb3RpZiBoYWNodXLDqSwgZG91YmzDqSBkYW5zIGxhIGzDqWdlbmRlIGV0IGwnw6l0aXF1ZXR0ZS4gKi9cbi5zcGluZS0tdW5rbm93biAuc3BpbmVfX2JvZHkge1xuICAgIGJhY2tncm91bmQtaW1hZ2U6XG4gICAgICAgIHJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQoLTQ1ZGVnLCB0cmFuc3BhcmVudCAwIDVweCwgcmdiKDEzIDMzIDQ2IC8gLjE2KSA1cHggN3B4KSxcbiAgICAgICAgbGluZWFyLWdyYWRpZW50KHRvIHJpZ2h0LCByZ2IoMCAwIDAgLyAuMjIpLCByZ2IoMjU1IDI1NSAyNTUgLyAuMTYpIDIyJSwgdHJhbnNwYXJlbnQgNTAlLCByZ2IoMCAwIDAgLyAuMSkgODUlLCByZ2IoMCAwIDAgLyAuMjgpKTtcbn1cblxuLyogVGlyw6kgZHUgcmF5b24gYXUgc3Vydm9sIG91IGF1IGZvY3VzLiBMYSByw6hnbGUgcG9ydGUgc3VyIGxhIGNhc2UgOiBlbiBtb2RlICdwYW5lbCcsXG4gICBsJ8OpdGlxdWV0dGUgZXN0IGxhIHPFk3VyIGR1IGRvcywgZXQgbGUgZm9jdXMgcGV1dCDDqnRyZSBwb3PDqSBkYW5zIGwndW5lIG91IGwnYXV0cmUuXG4gICBMZXMgc8OpbGVjdGV1cnMgZW4gOmhhcygpIHNvbnQgdm9sb250YWlyZW1lbnQgdGVudXMgw6AgbCfDqWNhcnQgZGUgY2V1eCBxdWkgbidlbiBvbnQgcGFzXG4gICBiZXNvaW4gOiB1biBuYXZpZ2F0ZXVyIHF1aSBpZ25vcmUgOmhhcygpIGpldHRlIGxhIGTDqWNsYXJhdGlvbiBlbnRpw6hyZSwgZXQgZW1wb3J0ZXJhaXRcbiAgIGxlIHN1cnZvbCBhdmVjIGx1aS4gKi9cbi5zaGVsZl9fc2xvdDpob3ZlciAuc3BpbmVfX2JvZHksXG4uc2hlbGZfX3Nsb3QuaXMtb3BlbiAuc3BpbmVfX2JvZHkge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtLjZyZW0pO1xufVxuXG4uc2hlbGZfX3Nsb3Q6aGFzKDpmb2N1cy12aXNpYmxlKSAuc3BpbmVfX2JvZHkge1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtLjZyZW0pO1xufVxuXG4uc3BpbmU6Zm9jdXMtdmlzaWJsZSAuc3BpbmVfX2JvZHkge1xuICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXdpZHRoKSBzb2xpZCB2YXIoLS1jb2xvci1hY2NlbnQtYnJpZ2h0KTsgICAvKiBzdXIgc3VyZmFjZSA6IDQuNzQgKi9cbiAgICBvdXRsaW5lLW9mZnNldDogMnB4O1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gw4l0aXF1ZXR0ZSAqL1xuXG4uc3BpbmVfX2xhYmVsLFxuLnNoZWxmX19oaW50IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgbWluLWhlaWdodDogdmFyKC0tbGFiZWwtaGVpZ2h0KTtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS14cykgdmFyKC0tc3BhY2Utcyk7XG59XG5cbi5zcGluZV9fbGFiZWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTN4cyk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQpOyAgICAgICAgICAgICAgLyogc3VyIGZvbmQgOiAxMi4yMSAqL1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnKTtcbiAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkIHZhcigtLWNvbG9yLWFjY2VudC1icmlnaHQpO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5zcGluZV9fbGFiZWwtdGl0bGUge1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXNlcmlmKTtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtMSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLXdlaWdodC1zZW1pYm9sZCk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxlYWRpbmctc251Zyk7XG59XG5cbi5zcGluZV9fbGFiZWwtbWV0YSB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zdGVwLS0xKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zb2Z0KTsgICAgICAgICAvKiBzdXIgZm9uZCA6IDcuMDYgKi9cbn1cblxuLyogRm9uZHUgw6AgbCdhcHBhcml0aW9uIHNldWxlbWVudCA6IHVuZSBkaXNwYXJpdGlvbiBpbnN0YW50YW7DqWUgw6l2aXRlIHF1ZSBkZXV4XG4gICDDqXRpcXVldHRlcyBzZSBzdXBlcnBvc2VudCBxdWFuZCBvbiBwYXNzZSBkJ3VuIGRvcyDDoCBsJ2F1dHJlLiBTw6lwYXLDqWUgZGUgbGEgcsOoZ2xlIGRlXG4gICBmb2N1cyBjaS1kZXNzb3VzIHBvdXIgbGEgbcOqbWUgcmFpc29uIHF1ZSBwbHVzIGhhdXQgOiBsZSBzdXJ2b2wgbmUgZG9pdCBkw6lwZW5kcmUgZGVcbiAgIHJpZW4gZCdhdXRyZSBxdWUgZGUgOmhvdmVyLiAqL1xuLnNoZWxmX19zbG90OmhvdmVyIC5zcGluZV9fbGFiZWwge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSB2YXIoLS1kdXJhdGlvbi1mYXN0KSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi8qIEF1IGZvY3VzIGNsYXZpZXIsIGwnw6l0aXF1ZXR0ZSBzJ2FmZmljaGUgZXQgc2VzIGFjdGlvbnMgc29udCBhdHRlaWduYWJsZXMsIG3Dqm1lIHNhbnNcbiAgIEphdmFTY3JpcHQuIEZhdXRlIGRlIDpoYXMoKSwgaWwgbmUgcmVzdGUgcXVlIGxlIHN1cnZvbCA6IGMnZXN0IGxhIHNldWxlIHBlcnRlLiAqL1xuLnNoZWxmX19zbG90Omhhcyg6Zm9jdXMtdmlzaWJsZSkgLnNwaW5lX19sYWJlbCB7XG4gICAgb3BhY2l0eTogMTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IHZhcigtLWR1cmF0aW9uLWZhc3QpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSDDiXRpcXVldHRlIMOpcGluZ2zDqWUgKGJpYmxpb3Row6hxdWUpICovXG5cbi8qIExhIGJhbmRlIHLDqXNlcnbDqWUgc291cyBsYSBwbGFuY2hlIGVzdCBwbHVzIGhhdXRlIHF1J2F1IGJpbGFuIDogbCfDqXRpcXVldHRlIHkgYWpvdXRlXG4gICB1biByYW5nIGQnYWN0aW9ucy4gTWVzdXLDqWUgc3VyIGxlIGNvbnRlbnUgcsOpZWwsIHBvdXIgcXVlIGwnw6l0aXF1ZXR0ZSBuZSBkw6lib3JkZSBwYXNcbiAgIHN1ciBsZSBjaGFudCBkZSBsYSBwbGFuY2hlLiBVbiB0aXRyZSBxdWkgcGFzc2VyYWl0IMOgIGxhIGxpZ25lIHN1ciB1biDDqWNyYW4gdHLDqHNcbiAgIMOpdHJvaXQgbGEgZmFpdCBtb250ZXIgdW4gcGV1IDogZWxsZSBhIHVuIGZvbmQgb3BhcXVlLCBlbGxlIHJlc3RlIGxpc2libGUuICovXG4uc2hlbGYtLXBhbmVsIHtcbiAgICAtLWxhYmVsLWhlaWdodDogOHJlbTtcbn1cblxuLnNwaW5lX19sYWJlbC1hY3Rpb25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMnhzKTtcbiAgICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0zeHMpO1xufVxuXG4vKiDDiXBpbmdsw6llIGF1IGNsaWMgOiBlbGxlIHJlc3RlIG91dmVydGUgbGUgdGVtcHMgZCdhdHRlaW5kcmUgc2VzIGFjdGlvbnMgw6AgbGEgc291cmlzLiAqL1xuLnNoZWxmX19zbG90LmlzLW9wZW4gLnNwaW5lX19sYWJlbCB7XG4gICAgei1pbmRleDogMTtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvO1xufVxuXG4vKiBUYW50IHF1J3VuZSDDqXRpcXVldHRlIGVzdCDDqXBpbmdsw6llLCBsZSBzdXJ2b2wgZCd1biBkb3Mgdm9pc2luIG4nZW4gc3VwZXJwb3NlIHBhc1xuICAgdW5lIHNlY29uZGUgOiBsZXMgZGV1eCBvY2N1cGVudCBsYSBtw6ptZSBiYW5kZSBzb3VzIGxhIHBsYW5jaGUuICovXG4uc2hlbGY6aGFzKC5zaGVsZl9fc2xvdC5pcy1vcGVuKSAuc2hlbGZfX3Nsb3Q6bm90KC5pcy1vcGVuKTpob3ZlciAuc3BpbmVfX2xhYmVsIHtcbiAgICBvcGFjaXR5OiAwO1xufVxuXG4uc2hlbGZfX2hpbnQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtLTEpO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zb2Z0KTtcbiAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkIHZhcigtLWNvbG9yLXJ1bGUpO1xufVxuXG4uc2hlbGY6aGFzKC5zaGVsZl9fc2xvdDpob3ZlciwgLnNoZWxmX19zbG90OmZvY3VzLXdpdGhpbiwgLnNoZWxmX19zbG90LmlzLW9wZW4pIC5zaGVsZl9faGludCB7XG4gICAgdmlzaWJpbGl0eTogaGlkZGVuO1xufVxuXG4uc2hlbGZfX2xlZ2VuZCArIC5zZWN0aW9uIHtcbiAgICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS14bCk7XG59XG5cbi5zaGVsZl9fbGVnZW5kIHtcbiAgICBtYXgtd2lkdGg6IHZhcigtLXdpZHRoLXJlYWRpbmcpO1xuICAgIG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTJ4cyk7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zdGVwLS0xKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zb2Z0KTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZpY2hlcyBkZSBsZWN0dXJlICovXG5cbi5yZWFkaW5nLW5vdGVzIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtbSk7XG4gICAgcGFkZGluZzogMDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNTJyZW0pIHtcbiAgICAucmVhZGluZy1ub3RlcyB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIG1pbm1heCgwLCAxZnIpKTtcbiAgICB9XG59XG5cbi5yZWFkaW5nLW5vdGUge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAzLjVyZW0gMWZyO1xuICAgIGdhcDogdmFyKC0tc3BhY2Utcyk7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLXMpIHZhcigtLXNwYWNlLW0pIHZhcigtLXNwYWNlLW0pIHZhcigtLXNwYWNlLXMpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1ib29rKTtcbiAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctYm9vayk7XG4gICAgc2Nyb2xsLW1hcmdpbi10b3A6IDdyZW07ICAgICAgICAgICAgICAgLyogc291cyBsJ2VuLXTDqnRlIGNvbGxhbnQgKi9cbn1cblxuLyogQXJyaXbDqWUgZGVwdWlzIHVuIGRvcyBkZSBsJ8OpdGFnw6hyZSAqL1xuLnJlYWRpbmctbm90ZTp0YXJnZXQsXG4ucmVhZGluZy1ub3RlOmZvY3VzLXZpc2libGUge1xuICAgIG91dGxpbmU6IHZhcigtLWZvY3VzLXdpZHRoKSBzb2xpZCB2YXIoLS1jb2xvci1hY2NlbnQtYnJpZ2h0KTtcbiAgICBvdXRsaW5lLW9mZnNldDogNHB4O1xufVxuXG4ucmVhZGluZy1ub3RlOnRhcmdldCB7XG4gICAgYW5pbWF0aW9uOiBub3RlLWZvdW5kIDEuMnMgdmFyKC0tZWFzZS1vdXQpO1xufVxuXG5Aa2V5ZnJhbWVzIG5vdGUtZm91bmQge1xuICAgIGZyb20geyBib3gtc2hhZG93OiAwIDAgMCAuNnJlbSByZ2IoMjI0IDEzOCA3NCAvIC40NSksIHZhcigtLXNoYWRvdy1ib29rKTsgfVxufVxuXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAgIC5yZWFkaW5nLW5vdGU6dGFyZ2V0IHtcbiAgICAgICAgYW5pbWF0aW9uOiBub25lO1xuICAgIH1cbn1cblxuLnJlYWRpbmctbm90ZV9fYm9keSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtM3hzKTtcbiAgICBtaW4td2lkdGg6IDA7XG59XG5cbi5yZWFkaW5nLW5vdGVfX3RpdGxlIGEge1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1pbmspO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLnJlYWRpbmctbm90ZV9fdGl0bGUgYTpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgdGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzczogMXB4O1xufVxuXG4ucmVhZGluZy1ub3RlX19tZXRhIHtcbiAgICAtLWNsdXN0ZXItc3BhY2U6IHZhcigtLXNwYWNlLTJ4cykgdmFyKC0tc3BhY2UteHMpO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tc3RlcC0tMSk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpO1xufVxuXG4vKiBMJ2F2aXMsIHJlY29wacOpIMOgIGxhIG1haW4gZGFucyBsZSBjYXJuZXQuICovXG4ucmVhZGluZy1ub3RlX19yZXZpZXcge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXJnaW46IHZhcigtLXNwYWNlLXhzKSAwIDA7XG4gICAgcGFkZGluZy1sZWZ0OiB2YXIoLS1zcGFjZS1zKTtcbiAgICBmb250LWZhbWlseTogdmFyKC0tZm9udC1zZXJpZik7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zdGVwLTEpO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGVhZGluZy1zbnVnKTtcbiAgICBib3JkZXItbGVmdDogMnB4IHNvbGlkIHZhcigtLWNvbG9yLXBhcmNobWVudC1lZGdlKTtcbn1cbiIsIi8qXG4gKiBSZW1wbGlzc2FnZSBwYXIgSVNCTiAodGVtcGxhdGVzL2Jvb2svbmV3Lmh0bWwudHdpZywgaXNibl9sb29rdXBfY29udHJvbGxlci5qcykgOlxuICogc2NhbiBjYW3DqXJhLCBzYWlzaWUgZHUgbnVtw6lybywgbWVzc2FnZSBkZSByw6lzdWx0YXQsIHJlcMOocmUgZGVzIGNoYW1wcyBwcsOpLXJlbXBsaXMuXG4gKi9cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBhbm5lYXUgKi9cblxuLmlzYm4tbG9va3VwIHtcbiAgICBtYXJnaW4tYmxvY2s6IHZhcigtLXNwYWNlLW0pIHZhcigtLXNwYWNlLWwpO1xuICAgIGJvcmRlci10b3A6IDRweCBzb2xpZCB2YXIoLS1jb2xvci1hY2NlbnQpO1xufVxuXG4uaXNibi1sb29rdXAgPiAqICsgKiB7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2Utcyk7XG59XG5cbi5pc2JuLWxvb2t1cF9fdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tc3RlcC0xKTtcbn1cblxuLmlzYm4tbG9va3VwX19pbnRybyB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zdGVwLS0xKTtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1zb2Z0KTsgICAgICAgICAgICAgICAgLyogbXV0ZWQgc3VyIHBhcmNoZW1pbiA6IDUuNTkgKi9cbn1cblxuLyogU2NhbiBldCBzYWlzaWUgY8O0dGUgw6AgY8O0dGUgZMOocyBxdSdpbCB5IGEgbGEgcGxhY2UsIGFsaWduw6lzIHN1ciBsZSBiYXMgZHUgY2hhbXAuICovXG4uaXNibi1sb29rdXBfX2NvbnRyb2xzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBhbGlnbi1pdGVtczogZW5kO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtcykgdmFyKC0tc3BhY2UtbSk7XG59XG5cbi5pc2JuLWxvb2t1cF9fbWFudWFsIHtcbiAgICBmbGV4OiAxIDEgMjByZW07XG59XG5cbi5pc2JuLWxvb2t1cF9faWNvbiB7XG4gICAgd2lkdGg6IDEuMjVyZW07XG4gICAgaGVpZ2h0OiAxLjI1cmVtO1xuICAgIGZpbGw6IG5vbmU7XG4gICAgc3Ryb2tlOiBjdXJyZW50Q29sb3I7XG4gICAgc3Ryb2tlLXdpZHRoOiAxLjg7XG4gICAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kO1xufVxuXG4vKiBDaGFtcCArIGJvdXRvbiBhY2NvbMOpcywgY29tbWUgbGEgcmVjaGVyY2hlIGR1IGNhdGFsb2d1ZSwgbWFpcyBzdXIgcGFyY2hlbWluLiAqL1xuLmlzYm4tbG9va3VwX19zZWFyY2gge1xuICAgIGRpc3BsYXk6IGZsZXg7XG59XG5cbi5pc2JuLWxvb2t1cF9fc2VhcmNoIGlucHV0IHtcbiAgICBmbGV4OiAxO1xuICAgIG1pbi13aWR0aDogMDtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1jb250cm9sKSAwIDAgdmFyKC0tcmFkaXVzLWNvbnRyb2wpO1xufVxuXG4uaXNibi1sb29rdXBfX3NlYXJjaCAuYnRuIHtcbiAgICBwYWRkaW5nLWlubGluZTogdmFyKC0tc3BhY2Utcyk7ICAgICAgICAgLyogbGFpc3NlIGxhIHBsYWNlIGF1eCAxMyBjaGlmZnJlcyDDoCAzNjBweCAqL1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItdGV4dC1tdXRlZCk7ICAvKiBtw6ptZSBib3JkIHF1ZSBsZSBjaGFtcCA6IDUuNTkgKi9cbiAgICBib3JkZXItbGVmdDogMDtcbiAgICBib3JkZXItcmFkaXVzOiAwIHZhcigtLXJhZGl1cy1jb250cm9sKSB2YXIoLS1yYWRpdXMtY29udHJvbCkgMDtcbn1cblxuLyogRMOpc2FjdGl2w6kgKGhvcnMtbGlnbmUsIHJlY2hlcmNoZSBlbiBjb3VycywgcGFzIGRlIGNhbcOpcmEpIDogbGlzaWJsZSwgbWFpcyB2aXNpYmxlbWVudCBpbmVydGUuICovXG4uYnRuOmRpc2FibGVkLFxuLmlzYm4tbG9va3VwX19zZWFyY2ggaW5wdXQ6ZGlzYWJsZWQge1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgb3BhY2l0eTogLjU1O1xufVxuXG4uYnRuOmRpc2FibGVkOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLmJ0bjpkaXNhYmxlZDphY3RpdmUge1xuICAgIHRyYW5zZm9ybTogbm9uZTtcbn1cblxuLmlzYm4tbG9va3VwX19vZmZsaW5lIHtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtLTEpO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS13ZWlnaHQtbWVkaXVtKTtcbn1cblxuLmlzYm4tbG9va3VwX19vZmZsaW5lOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiAuNnJlbTtcbiAgICBoZWlnaHQ6IC42cmVtO1xuICAgIG1hcmdpbi1yaWdodDogdmFyKC0tc3BhY2UtMnhzKTtcbiAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBDYW3DqXJhICovXG5cbi5pc2JuLXNjYW4ge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAganVzdGlmeS1pdGVtczogc3RhcnQ7XG4gICAgZ2FwOiB2YXIoLS1zcGFjZS14cyk7XG59XG5cbi5pc2JuLXNjYW5baGlkZGVuXSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLmlzYm4tc2Nhbl9fZnJhbWUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IDMycmVtO1xuICAgIGFzcGVjdC1yYXRpbzogMTYgLyAxMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWJnKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtY29udHJvbCk7XG59XG5cbi5pc2JuLXNjYW5fX3ZpZGVvIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb2JqZWN0LWZpdDogY292ZXI7XG59XG5cbi8qXG4gKiBWaXNldXIgOiBsYSBiYW5kZSBjZW50cmFsZSByw6llbGxlbWVudCBhbmFseXPDqWUgKENST1AgZGFucyBiYXJjb2RlX3NjYW5uZXIuanMgOlxuICogODAgJSDDlyA0MCAlIGRlIGwnaW1hZ2UpLiBvYmplY3QtZml0OiBjb3ZlciByb2duZSB1biBwZXUgbGEgdmlkw6lvLCBsZSB2aXNldXIgcmVzdGVcbiAqIGRvbmMgbMOpZ8OocmVtZW50IHBsdXMgcGV0aXQgcXVlIGxhIHpvbmUgbHVlIOKAlCBvbiBuZSBwcm9tZXQgamFtYWlzIHBsdXMgcXVlIGNlIHF1aSBlc3QgbHUuXG4gKiBMJ2V4dMOpcmlldXIgZXN0IGFzc29tYnJpIHBhciB1bmUgb21icmUgZ8OpYW50ZSwgbGVzIGNvaW5zIHRyYWPDqXMgZW4gYWNjZW50IGNsYWlyLlxuICovXG4uaXNibi1zY2FuX192aWV3ZmluZGVyIHtcbiAgICAtLWNvcm5lcjogMS4yNXJlbTtcbiAgICAtLWxpbmU6IDNweDtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaW5zZXQ6IDMyJSAxMiU7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWNvbnRyb2wpO1xuICAgIGJveC1zaGFkb3c6IDAgMCAwIDEwMHZtYXggcmdiKDEzIDMzIDQ2IC8gLjU1KTtcbiAgICBiYWNrZ3JvdW5kOlxuICAgICAgICBsaW5lYXItZ3JhZGllbnQodmFyKC0tY29sb3ItYWNjZW50LWJyaWdodCksIHZhcigtLWNvbG9yLWFjY2VudC1icmlnaHQpKSB0b3AgbGVmdCAvIHZhcigtLWNvcm5lcikgdmFyKC0tbGluZSksXG4gICAgICAgIGxpbmVhci1ncmFkaWVudCh2YXIoLS1jb2xvci1hY2NlbnQtYnJpZ2h0KSwgdmFyKC0tY29sb3ItYWNjZW50LWJyaWdodCkpIHRvcCBsZWZ0IC8gdmFyKC0tbGluZSkgdmFyKC0tY29ybmVyKSxcbiAgICAgICAgbGluZWFyLWdyYWRpZW50KHZhcigtLWNvbG9yLWFjY2VudC1icmlnaHQpLCB2YXIoLS1jb2xvci1hY2NlbnQtYnJpZ2h0KSkgdG9wIHJpZ2h0IC8gdmFyKC0tY29ybmVyKSB2YXIoLS1saW5lKSxcbiAgICAgICAgbGluZWFyLWdyYWRpZW50KHZhcigtLWNvbG9yLWFjY2VudC1icmlnaHQpLCB2YXIoLS1jb2xvci1hY2NlbnQtYnJpZ2h0KSkgdG9wIHJpZ2h0IC8gdmFyKC0tbGluZSkgdmFyKC0tY29ybmVyKSxcbiAgICAgICAgbGluZWFyLWdyYWRpZW50KHZhcigtLWNvbG9yLWFjY2VudC1icmlnaHQpLCB2YXIoLS1jb2xvci1hY2NlbnQtYnJpZ2h0KSkgYm90dG9tIGxlZnQgLyB2YXIoLS1jb3JuZXIpIHZhcigtLWxpbmUpLFxuICAgICAgICBsaW5lYXItZ3JhZGllbnQodmFyKC0tY29sb3ItYWNjZW50LWJyaWdodCksIHZhcigtLWNvbG9yLWFjY2VudC1icmlnaHQpKSBib3R0b20gbGVmdCAvIHZhcigtLWxpbmUpIHZhcigtLWNvcm5lciksXG4gICAgICAgIGxpbmVhci1ncmFkaWVudCh2YXIoLS1jb2xvci1hY2NlbnQtYnJpZ2h0KSwgdmFyKC0tY29sb3ItYWNjZW50LWJyaWdodCkpIGJvdHRvbSByaWdodCAvIHZhcigtLWNvcm5lcikgdmFyKC0tbGluZSksXG4gICAgICAgIGxpbmVhci1ncmFkaWVudCh2YXIoLS1jb2xvci1hY2NlbnQtYnJpZ2h0KSwgdmFyKC0tY29sb3ItYWNjZW50LWJyaWdodCkpIGJvdHRvbSByaWdodCAvIHZhcigtLWxpbmUpIHZhcigtLWNvcm5lcik7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDtcbn1cblxuLyogVHJhaXQgZGUgbGVjdHVyZSBxdWkgYmFsYWllIGxlIHZpc2V1ciA6IHNpZ25hbGUgcXVlIGwnYW5hbHlzZSB0b3VybmUuICovXG4uaXNibi1zY2FuX192aWV3ZmluZGVyOjphZnRlciB7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaW5zZXQtaW5saW5lOiB2YXIoLS1zcGFjZS0yeHMpO1xuICAgIHRvcDogNTAlO1xuICAgIGhlaWdodDogMnB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yLWFjY2VudC1icmlnaHQpO1xuICAgIGJveC1zaGFkb3c6IDAgMCA4cHggdmFyKC0tY29sb3ItYWNjZW50LWJyaWdodCk7XG4gICAgYW5pbWF0aW9uOiBpc2JuLXN3ZWVwIDEuNnMgdmFyKC0tZWFzZS1vdXQpIGluZmluaXRlIGFsdGVybmF0ZTtcbn1cblxuQGtleWZyYW1lcyBpc2JuLXN3ZWVwIHtcbiAgICBmcm9tIHsgdG9wOiAxMiU7IH1cbiAgICB0byB7IHRvcDogODglOyB9XG59XG5cbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XG4gICAgLmlzYm4tc2Nhbl9fdmlld2ZpbmRlcjo6YWZ0ZXIge1xuICAgICAgICBhbmltYXRpb246IG5vbmU7XG4gICAgfVxufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUsOpc3VsdGF0ICovXG5cbi8qIFZpZGUgdGFudCBxdSdpbCBuJ3kgYSByaWVuIMOgIGRpcmUsIG1haXMgdG91am91cnMgcHLDqXNlbnQgOiB1bmUgcsOpZ2lvbiBsaXZlIG1hc3F1w6llIG4nZXN0IHBhcyBhbm5vbmPDqWUuICovXG4uaXNibi1sb29rdXBfX3N0YXR1czplbXB0eSB7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4uaXNibi1sb29rdXBfX3N0YXR1czpub3QoOmVtcHR5KSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLXhzKSB2YXIoLS1zcGFjZS1zKSB2YXIoLS1zcGFjZS14cykgY2FsYyh2YXIoLS1zcGFjZS1zKSArIDEuNnJlbSk7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zdGVwLS0xKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0td2VpZ2h0LW1lZGl1bSk7XG4gICAgYmFja2dyb3VuZDogcmdiKDQyIDMzIDI0IC8gLjA1KTtcbiAgICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHZhcigtLXN0YXR1cy1jb2xvciwgdmFyKC0tY29sb3ItdGV4dC1tdXRlZCkpO1xuICAgIGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tcmFkaXVzLWNvbnRyb2wpIHZhcigtLXJhZGl1cy1jb250cm9sKSAwO1xufVxuXG4vKiBNw6ptZSBwaWN0b2dyYW1tZSBxdWUgbGVzIG1lc3NhZ2VzIGZsYXNoIChmZWVkYmFjay5jc3MpLCBwb3VyIHVuIHZvY2FidWxhaXJlIHVuaXF1ZS4gKi9cbi5pc2JuLWxvb2t1cF9fc3RhdHVzOm5vdCg6ZW1wdHkpOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IHZhcigtLXN0YXR1cy1nbHlwaCwgXCJpXCIpO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IGNhbGModmFyKC0tc3BhY2UteHMpICsgLjFlbSk7XG4gICAgbGVmdDogdmFyKC0tc3BhY2Utcyk7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBwbGFjZS1pdGVtczogY2VudGVyO1xuICAgIHdpZHRoOiAxLjJyZW07XG4gICAgaGVpZ2h0OiAxLjJyZW07XG4gICAgZm9udC1zaXplOiAuNzVyZW07XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLXdlaWdodC1kaXNwbGF5KTtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItcGFyY2htZW50KTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zdGF0dXMtY29sb3IsIHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpKTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG59XG5cbi5pc2JuLWxvb2t1cF9fc3RhdHVzW2RhdGEtc3RhdGU9XCJpbmZvXCJdLFxuLmlzYm4tbG9va3VwX19zdGF0dXNbZGF0YS1zdGF0ZT1cInBlbmRpbmdcIl0ge1xuICAgIC0tc3RhdHVzLWNvbG9yOiB2YXIoLS1jb2xvci1zdXJmYWNlKTtcbn1cblxuLmlzYm4tbG9va3VwX19zdGF0dXNbZGF0YS1zdGF0ZT1cInBlbmRpbmdcIl06OmJlZm9yZSB7XG4gICAgY29udGVudDogXCLigKZcIjtcbn1cblxuLmlzYm4tbG9va3VwX19zdGF0dXNbZGF0YS1zdGF0ZT1cInN1Y2Nlc3NcIl0ge1xuICAgIC0tc3RhdHVzLWNvbG9yOiB2YXIoLS1jb2xvci1zdWNjZXNzKTtcbiAgICAtLXN0YXR1cy1nbHlwaDogXCLinJNcIjtcbn1cblxuLmlzYm4tbG9va3VwX19zdGF0dXNbZGF0YS1zdGF0ZT1cIndhcm5pbmdcIl0ge1xuICAgIC0tc3RhdHVzLWNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtaW5rKTtcbiAgICAtLXN0YXR1cy1nbHlwaDogXCIhXCI7XG59XG5cbi5pc2JuLWxvb2t1cF9fc3RhdHVzW2RhdGEtc3RhdGU9XCJlcnJvclwiXSB7XG4gICAgLS1zdGF0dXMtY29sb3I6IHZhcigtLWNvbG9yLWRhbmdlcik7XG4gICAgLS1zdGF0dXMtZ2x5cGg6IFwiIVwiO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQ2hhbXBzIHByw6ktcmVtcGxpcyAqL1xuXG4vKlxuICogUmVtcGxpIGF1dG9tYXRpcXVlbWVudCwgcGFzIGVuY29yZSByZWx1IDogbGlzZXLDqSB2ZXJ0IMOgIGdhdWNoZSBkdSBjaGFtcCBldCBtZW50aW9uXG4gKiDDqWNyaXRlICh2ZXJ0IHN1ciBwYXJjaGVtaW4gOiA0LjcwKS4gRGlzcGFyYcOudCBkw6hzIHF1ZSBsJ3V0aWxpc2F0ZXVyIG1vZGlmaWUgbGUgY2hhbXAuXG4gKi9cbi5maWVsZC0tcHJlZmlsbGVkIGlucHV0LFxuLmZpZWxkLS1wcmVmaWxsZWQgc2VsZWN0LFxuLmZpZWxkLS1wcmVmaWxsZWQgdGV4dGFyZWEge1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDRweCAwIDAgdmFyKC0tY29sb3Itc3VjY2Vzcyk7XG59XG5cbi5maWVsZC0tcHJlZmlsbGVkOjphZnRlciB7XG4gICAgY29udGVudDogXCJQcsOpLXJlbXBsaSDigJQgw6AgdsOpcmlmaWVyXCI7XG4gICAgb3JkZXI6IDE7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zdGVwLS0xKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0td2VpZ2h0LW1lZGl1bSk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXN1Y2Nlc3MpO1xufVxuIiwiLypcbiAqIENoYW1wIMOgIHN1Z2dlc3Rpb25zIChhc3NldHMvY29udHJvbGxlcnMvYXV0aG9yX2NvbWJvYm94X2NvbnRyb2xsZXIuanMpIDogY2hhbXAgdGV4dGVcbiAqIGR1IHRow6htZSBkZSBmb3JtdWxhaXJlLCBsaXN0ZSBkw6lyb3VsYW50ZSBwb3PDqWUgZGVzc291cywgbWVzc2FnZSBkZSBjcsOpYXRpb24uXG4gKi9cblxuLmNvbWJvYm94IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5jb21ib2JveF9fbGlzdCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHotaW5kZXg6IDIwO1xuICAgIHRvcDogY2FsYygxMDAlICsgMnB4KTtcbiAgICByaWdodDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIG1heC1oZWlnaHQ6IG1pbigxOHJlbSwgNTB2aCk7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLTN4cykgMDtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZhZjFkYTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jb2xvci1pbmspO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1jb250cm9sKTtcbiAgICBib3gtc2hhZG93OiAwIDEycHggMjRweCAtMTBweCByZ2IoMCAwIDAgLyAuNDUpO1xufVxuXG4uY29tYm9ib3hfX29wdGlvbiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIG1pbi1oZWlnaHQ6IDIuNzVyZW07ICAgICAgICAgICAgICAgICAgICAvKiBjaWJsZSB0YWN0aWxlICovXG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2UtMnhzKSB2YXIoLS1zcGFjZS14cyk7XG4gICAgbGluZS1oZWlnaHQ6IHZhcigtLWxlYWRpbmctc251Zyk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLWluayk7ICAgICAgICAgICAgICAgIC8qIHN1ciAjZmFmMWRhIDogPiAxMS43ICovXG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4vKiBPcHRpb24gYWN0aXZlIChjbGF2aWVyIG91IHN1cnZvbCkgOiBhcGxhdCBkZSBsYSBzdXJmYWNlLCB0ZXh0ZSBwYXJjaGVtaW4gKDkuMzIpLiAqL1xuLmNvbWJvYm94X19vcHRpb25bYXJpYS1zZWxlY3RlZD1cInRydWVcIl0sXG4uY29tYm9ib3hfX29wdGlvbjpob3ZlciB7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXBhcmNobWVudCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3Itc3VyZmFjZSk7XG59XG5cbi5jb21ib2JveF9fb3B0aW9uLS1jcmVhdGUge1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS13ZWlnaHQtc2VtaWJvbGQpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtaW5rKTsgICAgICAgICAvKiBzdXIgI2ZhZjFkYSA6ID4gNC42NCAqL1xuICAgIGJvcmRlci10b3A6IDFweCBkYXNoZWQgdmFyKC0tY29sb3ItcGFyY2htZW50LWVkZ2UpO1xufVxuXG4uY29tYm9ib3hfX29wdGlvbi0tY3JlYXRlOmZpcnN0LWNoaWxkIHtcbiAgICBib3JkZXItdG9wOiAwO1xufVxuXG4uY29tYm9ib3hfX29wdGlvblthcmlhLWRpc2FibGVkPVwidHJ1ZVwiXSB7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtbXV0ZWQpO1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbi5jb21ib2JveF9fbm90ZSB7XG4gICAgbWFyZ2luLWxlZnQ6IC4yNWVtO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS13ZWlnaHQtcmVndWxhcik7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNZXNzYWdlICovXG5cbi5jb21ib2JveF9fZmVlZGJhY2s6ZW1wdHkge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5jb21ib2JveF9fZmVlZGJhY2sge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNGVtO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tc3RlcC0tMSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLXdlaWdodC1tZWRpdW0pO1xuICAgIGNvbG9yOiB2YXIoLS1mZWVkYmFjay1jb2xvciwgdmFyKC0tY29sb3ItdGV4dC1tdXRlZCkpO1xufVxuXG4vKiBNw6ptZSBwaWN0b2dyYW1tZSByb25kIHF1ZSBsZXMgZXJyZXVycyBkZSBjaGFtcCAoZm9ybS5jc3MpLiAqL1xuLmNvbWJvYm94X19mZWVkYmFjazo6YmVmb3JlIHtcbiAgICBjb250ZW50OiB2YXIoLS1mZWVkYmFjay1nbHlwaCwgXCLigKZcIik7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogLjFlbTtcbiAgICBsZWZ0OiAwO1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgcGxhY2UtaXRlbXM6IGNlbnRlcjtcbiAgICB3aWR0aDogMS4wNWVtO1xuICAgIGhlaWdodDogMS4wNWVtO1xuICAgIGZvbnQtc2l6ZTogLjllbTtcbiAgICBmb250LXdlaWdodDogdmFyKC0td2VpZ2h0LWRpc3BsYXkpO1xuICAgIGxpbmUtaGVpZ2h0OiAxO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1vbi1hY2NlbnQpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWZlZWRiYWNrLWNvbG9yLCB2YXIoLS1jb2xvci10ZXh0LW11dGVkKSk7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xufVxuXG4uY29tYm9ib3hfX2ZlZWRiYWNrW2RhdGEtc3RhdGU9XCJzdWNjZXNzXCJdIHtcbiAgICAtLWZlZWRiYWNrLWNvbG9yOiB2YXIoLS1jb2xvci1zdWNjZXNzKTsgLyogc3VyIHBhcmNoZW1pbiA6IDQuNzAgKi9cbiAgICAtLWZlZWRiYWNrLWdseXBoOiBcIuKck1wiO1xufVxuXG4uY29tYm9ib3hfX2ZlZWRiYWNrW2RhdGEtc3RhdGU9XCJlcnJvclwiXSB7XG4gICAgLS1mZWVkYmFjay1jb2xvcjogdmFyKC0tY29sb3ItZGFuZ2VyKTsgIC8qIHN1ciBwYXJjaGVtaW4gOiA1LjU4ICovXG4gICAgLS1mZWVkYmFjay1nbHlwaDogXCIhXCI7XG59XG4iLCIvKlxuICogQWpvdXQgw6AgbGEgYmlibGlvdGjDqHF1ZSAodGVtcGxhdGVzL19jb21wb25lbnRzL2xpYnJhcnlfZW50cnlfZmllbGRzLmh0bWwudHdpZykgOlxuICogY2hvaXggZHUgc3RhdHV0IGVuIGJvdXRvbnMgcmFkaW8sIGRhdGUgZGUgZmluIGNvbmRpdGlvbm5lbGxlIDsgZXQgcmV0cmFpdCBkJ3VuXG4gKiBsaXZyZSBkZXB1aXMgbGEgZ3JpbGxlIGRlIMKrIE1hIGJpYmxpb3Row6hxdWUgwrsuXG4gKi9cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJsb2MgKi9cblxuLmxpYnJhcnktZW50cnkge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ2FwOiB2YXIoLS1zcGFjZS1tKTtcbn1cblxuLypcbiAqIERhbnMgbGUgZm9ybXVsYWlyZSBkJ2Fqb3V0IGF1IGNhdGFsb2d1ZSA6IG3Dqm1lIHNpZ25ldCBxdWUgbCdlbmNhcnQgwqsgbWEgYmlibGlvdGjDqHF1ZSDCu1xuICogZGUgbGEgZmljaGUgbGl2cmUsIHBvdXIgZGlyZSBxdWUgY2UgY2hvaXggcmFuZ2UgQVVTU0kgbGUgbGl2cmUgY2hleiBzb2kuXG4gKi9cbi5saWJyYXJ5LWVudHJ5LS1zaWduZXQge1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLXMpO1xuICAgIGJhY2tncm91bmQ6IHJnYig0MiAzMyAyNCAvIC4wNSk7XG4gICAgYm9yZGVyLWxlZnQ6IDVweCBzb2xpZCB2YXIoLS1jb2xvci1hY2NlbnQpO1xuICAgIGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tcmFkaXVzLXNoZWV0KSB2YXIoLS1yYWRpdXMtc2hlZXQpIDA7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdGF0dXRzICovXG5cbi5zdGF0dXMtcGlja2VyX19vcHRpb25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTJ4cyk7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtM3hzKTtcbn1cblxuLyogUmFkaW8gbmF0aWYgZ2FyZMOpIHBvdXIgbGUgY2xhdmllciBldCBsZXMgbGVjdGV1cnMgZCfDqWNyYW4sIGRlc3NpbsOpIHBhciBsJ29wdGlvbi4gKi9cbi5zdGF0dXMtcGlja2VyX19yYWRpbyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5zdGF0dXMtcGlja2VyX19vcHRpb24ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMnhzKTtcbiAgICBtaW4taGVpZ2h0OiAyLjc1cmVtOyAgICAgICAgICAgICAgICAgICAgLyogY2libGUgdGFjdGlsZSAqL1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLTN4cykgdmFyKC0tc3BhY2UtcykgdmFyKC0tc3BhY2UtM3hzKSB2YXIoLS1zcGFjZS14cyk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmYWYxZGE7ICAgICAgICAgICAgICAvKiBjb21tZSBsZXMgY2hhbXBzIDogbGEgem9uZSBvw7kgbCdvbiBjaG9pc2l0ICovXG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXItY29udHJvbCk7ICAgICAgICAgIC8qIDUuNTkgKi9cbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtY29udHJvbCk7XG4gICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIHZhcigtLWR1cmF0aW9uLWZhc3QpIHZhcigtLWVhc2Utb3V0KSwgYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbi1mYXN0KSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi8qIFBhc3RpbGxlIGRlIHJhZGlvIDogbCfDqXRhdCBjb2Now6kgbmUgcmVwb3NlIHBhcyBzdXIgbGEgY291bGV1ciBzZXVsZS4gKi9cbi5zdGF0dXMtcGlja2VyX19vcHRpb246OmJlZm9yZSB7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBmbGV4OiBub25lO1xuICAgIHdpZHRoOiAxcmVtO1xuICAgIGhlaWdodDogMXJlbTtcbiAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG59XG5cbi5zdGF0dXMtcGlja2VyX19vcHRpb246aG92ZXIge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItaW5rKTtcbn1cblxuLnN0YXR1cy1waWNrZXJfX29wdGlvbjpoYXMoLnN0YXR1cy1waWNrZXJfX3JhZGlvOmNoZWNrZWQpIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWluayk7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHZhcigtLWNvbG9yLWluayk7XG59XG5cbi5zdGF0dXMtcGlja2VyX19vcHRpb246aGFzKC5zdGF0dXMtcGlja2VyX19yYWRpbzpjaGVja2VkKTo6YmVmb3JlIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNvbG9yLWluayk7XG4gICAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSwgdmFyKC0tY29sb3ItaW5rKSA0NSUsIHRyYW5zcGFyZW50IDUwJSk7XG59XG5cbi5zdGF0dXMtcGlja2VyX19vcHRpb246aGFzKC5zdGF0dXMtcGlja2VyX19yYWRpbzpmb2N1cy12aXNpYmxlKSB7XG4gICAgb3V0bGluZTogdmFyKC0tZm9jdXMtd2lkdGgpIHNvbGlkIHZhcigtLWZvY3VzLWNvbG9yKTtcbiAgICBvdXRsaW5lLW9mZnNldDogdmFyKC0tZm9jdXMtb2Zmc2V0KTtcbn1cblxuLmZpZWxkLS1pbnZhbGlkIC5zdGF0dXMtcGlja2VyX19vcHRpb24ge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY29sb3ItZGFuZ2VyKTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE1hIGJpYmxpb3Row6hxdWUgKi9cblxuLmxpYnJhcnktaXRlbSB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmciBhdXRvO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMnhzKTtcbn1cblxuLyogRGlzY3JldCBzb3VzIGxhIGNhcnRlLCBhbGlnbsOpIMOgIGRyb2l0ZSA6IG9uIG5lIGxlIGTDqWNsZW5jaGUgcGFzIGVuIHZpc2FudCBsYSBjYXJ0ZS4gKi9cbi5saWJyYXJ5LWl0ZW1fX3JlbW92ZSB7XG4gICAganVzdGlmeS1zZWxmOiBlbmQ7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEaXZlcnMgKi9cblxuLyogQWN0aW9uIGVuIGxpZ25lIGRhbnMgdW4gbWVzc2FnZSAoZXguIMKrIGNyw6llciBsJ2F1dGV1ciDCuykgOiB1biBib3V0b24gcXVpIHNlIGxpdCBjb21tZSB1biBsaWVuLiAqL1xuLmxpbmstYnV0dG9uIHtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGZvbnQ6IGluaGVyaXQ7XG4gICAgY29sb3I6IHZhcigtLWxpbmstY29sb3IsIHZhcigtLWNvbG9yLWFjY2VudC1icmlnaHQpKTtcbiAgICB0ZXh0LWFsaWduOiBpbmhlcml0O1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIHRleHQtZGVjb3JhdGlvbi10aGlja25lc3M6IDFweDtcbiAgICB0ZXh0LXVuZGVybGluZS1vZmZzZXQ6IC4yZW07XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgYm9yZGVyOiAwO1xufVxuXG4ubGluay1idXR0b246aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbi10aGlja25lc3M6IDJweDtcbn1cblxuLmJvb2stc2hvd19fbGlua3Mge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGdhcDogdmFyKC0tc3BhY2Utcyk7XG4gICAgbWF4LXdpZHRoOiBjYWxjKDEzcmVtICsgdmFyKC0tc3BhY2UtbCkgKyB2YXIoLS13aWR0aC1yZWFkaW5nKSk7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UteGwpO1xufVxuXG4uYm9vay1zaG93X19saW5rcyAuYmFjay1saW5rIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xufVxuIiwiLypcbiAqIENvdXZlcnR1cmUgZGFucyBsZSBmb3JtdWxhaXJlIGRlIGxpdnJlICh0ZW1wbGF0ZXMvYm9vay9fY292ZXJfZmllbGQuaHRtbC50d2lnLFxuICogY292ZXJfcGhvdG9fY29udHJvbGxlci5qcykgOiBhcGVyw6d1LCBVUkwsIHBob3RvIHBhciBsJ2FwcGFyZWlsIHBob3RvIG91IGxhIGdhbGVyaWUuXG4gKi9cblxuLmNvdmVyLWZpZWxkIHtcbiAgICBtaW4td2lkdGg6IDA7XG4gICAgbWFyZ2luLWlubGluZTogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlcjogMDtcbn1cblxuLmNvdmVyLWZpZWxkX19ib2R5IHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogNS41cmVtIG1pbm1heCgwLCAxZnIpO1xuICAgIGdhcDogdmFyKC0tc3BhY2Utcyk7XG4gICAgYWxpZ24taXRlbXM6IHN0YXJ0O1xuICAgIG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTJ4cyk7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAzNnJlbSkge1xuICAgIC5jb3Zlci1maWVsZF9fYm9keSB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogN3JlbSBtaW5tYXgoMCwgMWZyKTtcbiAgICAgICAgZ2FwOiB2YXIoLS1zcGFjZS1tKTtcbiAgICB9XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBBcGVyw6d1ICovXG5cbi5jb3Zlci1maWVsZF9fcHJldmlldyB7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4uY292ZXItZmllbGRfX2ZyYW1lIHtcbiAgICBkaXNwbGF5OiBncmlkO1xufVxuXG4uY292ZXItZmllbGRfX2ZyYW1lIC5jb3ZlciB7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93LWJvb2spO1xufVxuXG4vKiBFbXBsYWNlbWVudCB2aWRlIDogdW5lIGNvdXZlcnR1cmUgZW4gcG9pbnRpbGzDqXMsIGR1IGZvcm1hdCBkJ3VuIGxpdnJlLiAqL1xuLmNvdmVyLWZpZWxkX19lbXB0eSB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBwbGFjZS1pdGVtczogY2VudGVyO1xuICAgIGFzcGVjdC1yYXRpbzogMiAvIDM7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2UtMnhzKTtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtLTEpO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sZWFkaW5nLXNudWcpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTsgICAgICAgICAvKiA1LjU5ICovXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGJvcmRlcjogMXB4IGRhc2hlZCB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTtcbiAgICBib3JkZXItcmFkaXVzOiAxcHggM3B4IDNweCAxcHg7XG59XG5cbi5jb3Zlci1maWVsZF9fY2FwdGlvbiB7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMnhzKTtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtLTEpO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1sZWFkaW5nLXNudWcpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0LW11dGVkKTtcbn1cblxuLmNvdmVyLWZpZWxkX19jb250cm9scyB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBnYXA6IHZhcigtLXNwYWNlLXMpO1xuICAgIG1pbi13aWR0aDogMDtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBob3RvICovXG5cbi5jb3Zlci1waG90byB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTJ4cyk7XG59XG5cbi5jb3Zlci1waG90b19faW50cm8ge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tc3RlcC0tMSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLXdlaWdodC1tZWRpdW0pO1xufVxuXG4uY292ZXItcGhvdG9fX2J1dHRvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMnhzKTtcbn1cblxuLyogTGVzIGJvdXRvbnMgcyfDqXRpcmVudCDDoCBsYSBwbGFjZSBkaXNwb25pYmxlIDogcGFzIGRlIGxpYmVsbMOpIHRyb25xdcOpIMOgIDM2MCBweC4gKi9cbi5jb3Zlci1waG90b19fYnV0dG9ucyAuYnRuIHtcbiAgICBmbGV4OiAxIDEgYXV0bztcbiAgICB3aGl0ZS1zcGFjZTogbm9ybWFsO1xufVxuXG4uY292ZXItcGhvdG9fX2ljb24ge1xuICAgIGZsZXg6IG5vbmU7XG4gICAgd2lkdGg6IDEuMXJlbTtcbiAgICBoZWlnaHQ6IDEuMXJlbTtcbiAgICBmaWxsOiBub25lO1xuICAgIHN0cm9rZTogY3VycmVudENvbG9yO1xuICAgIHN0cm9rZS13aWR0aDogMS44O1xuICAgIHN0cm9rZS1saW5lam9pbjogcm91bmQ7XG59XG5cbi5jb3Zlci1waG90b19fb2ZmbGluZSB7XG4gICAgZm9udC1zaXplOiB2YXIoLS1zdGVwLS0xKTtcbiAgICBmb250LXdlaWdodDogdmFyKC0td2VpZ2h0LW1lZGl1bSk7XG59XG5cbi8qIE3Dqm1lIHJvbmQgY3JldXggcXVlIGxhIG1lbnRpb24gaG9ycy1saWduZSBkZSBsYSByZWNoZXJjaGUgSVNCTi4gKi9cbi5jb3Zlci1waG90b19fb2ZmbGluZTo6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogLjZyZW07XG4gICAgaGVpZ2h0OiAuNnJlbTtcbiAgICBtYXJnaW4tcmlnaHQ6IHZhcigtLXNwYWNlLTJ4cyk7XG4gICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tY29sb3ItdGV4dC1tdXRlZCk7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xufVxuXG4uY292ZXItcGhvdG9fX3N0YXR1czplbXB0eSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLmNvdmVyLXBob3RvX19zdGF0dXMge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBwYWRkaW5nLWxlZnQ6IDEuNGVtO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tc3RlcC0tMSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLXdlaWdodC1tZWRpdW0pO1xuICAgIGNvbG9yOiB2YXIoLS1waG90by1jb2xvciwgdmFyKC0tY29sb3ItdGV4dC1tdXRlZCkpO1xufVxuXG4uY292ZXItcGhvdG9fX3N0YXR1czo6YmVmb3JlIHtcbiAgICBjb250ZW50OiB2YXIoLS1waG90by1nbHlwaCwgXCJpXCIpO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IC4xZW07XG4gICAgbGVmdDogMDtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIHBsYWNlLWl0ZW1zOiBjZW50ZXI7XG4gICAgd2lkdGg6IDEuMDVlbTtcbiAgICBoZWlnaHQ6IDEuMDVlbTtcbiAgICBmb250LXNpemU6IC45ZW07XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLXdlaWdodC1kaXNwbGF5KTtcbiAgICBsaW5lLWhlaWdodDogMTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3Itb24tYWNjZW50KTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1waG90by1jb2xvciwgdmFyKC0tY29sb3ItdGV4dC1tdXRlZCkpO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbn1cblxuLmNvdmVyLXBob3RvX19zdGF0dXNbZGF0YS1zdGF0ZT1cInBlbmRpbmdcIl0ge1xuICAgIC0tcGhvdG8tZ2x5cGg6IFwi4oCmXCI7XG59XG5cbi5jb3Zlci1waG90b19fc3RhdHVzW2RhdGEtc3RhdGU9XCJzdWNjZXNzXCJdIHtcbiAgICAtLXBob3RvLWNvbG9yOiB2YXIoLS1jb2xvci1zdWNjZXNzKTsgICAgLyogc3VyIHBhcmNoZW1pbiA6IDQuNzAgKi9cbiAgICAtLXBob3RvLWdseXBoOiBcIuKck1wiO1xufVxuXG4uY292ZXItcGhvdG9fX3N0YXR1c1tkYXRhLXN0YXRlPVwiZXJyb3JcIl0ge1xuICAgIC0tcGhvdG8tY29sb3I6IHZhcigtLWNvbG9yLWRhbmdlcik7ICAgICAvKiBzdXIgcGFyY2hlbWluIDogNS41OCAqL1xuICAgIC0tcGhvdG8tZ2x5cGg6IFwiIVwiO1xufVxuIiwiLypcbiAqIENvbm5leGlvbiBldCBpbnNjcmlwdGlvbiA6IHBhcyBkZSBuYXZpZ2F0aW9uLCB1bmUgY29sb25uZSBjZW50csOpZS5cbiAqL1xuXG4uaXMtYXV0aCAuc2l0ZS1tYWluIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBtaW4taGVpZ2h0OiAxMDBkdmg7XG4gICAgcGFkZGluZy10b3A6IGNhbGModmFyKC0tc3BhY2UtbCkgKyBlbnYoc2FmZS1hcmVhLWluc2V0LXRvcCkpO1xufVxuXG4uYXV0aC1wYWdlIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IHZhcigtLXdpZHRoLW5hcnJvdyk7XG4gICAgbWFyZ2luLWlubGluZTogYXV0bztcbn1cblxuLmF1dGgtcGFnZV9faGVhZGVyIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGp1c3RpZnktaXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTJ4cyk7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtbCk7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uYXV0aC1wYWdlX19tYXJrIHtcbiAgICB3aWR0aDogNXJlbTtcbiAgICBoZWlnaHQ6IDVyZW07XG4gICAgYm9yZGVyLXJhZGl1czogMjIlO1xuICAgIGJveC1zaGFkb3c6IDAgMTJweCAyNHB4IC0xMnB4IHJnYigwIDAgMCAvIC44KTtcbn1cblxuLmF1dGgtcGFnZV9fYnJhbmQge1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXNlcmlmKTtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtMSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLXdlaWdodC1zZW1pYm9sZCk7XG59XG5cbi5hdXRoLXBhZ2VfX2JyYW5kIGVtIHtcbiAgICBmb250LXdlaWdodDogdmFyKC0td2VpZ2h0LXJlZ3VsYXIpO1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci1hY2NlbnQtYnJpZ2h0KTtcbn1cblxuLmF1dGgtcGFnZV9faGVhZGVyIGgxIHtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtMyk7XG59XG5cbi5hdXRoLXBhZ2UgLnNoZWV0IHtcbiAgICBtYXJnaW4taW5saW5lOiBhdXRvO1xufVxuXG4uYXV0aC1wYWdlX19zdWJtaXQge1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4uYXV0aC1wYWdlX19zd2l0Y2gge1xuICAgIG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLW0pO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zb2Z0KTtcbn1cblxuLmlzLWF1dGggLmZsYXNoLXN0YWNrIHtcbiAgICBtYXgtd2lkdGg6IHZhcigtLXdpZHRoLW5hcnJvdyk7XG4gICAgbWFyZ2luLWlubGluZTogYXV0bztcbn1cbiIsIi8qXG4gKiBGaWNoZSBsaXZyZSAoYm9vay9zaG93KSBldCBlbi10w6p0ZSBkZXMgcGFnZXMgbGnDqWVzIMOgIHVuIGxpdnJlIChsaWJyYXJ5L2VkaXQpLlxuICovXG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGaWNoZSBsaXZyZSAqL1xuXG4uYm9vay1zaGVldCB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBnYXA6IHZhcigtLXNwYWNlLWwpO1xufVxuXG4uYm9vay1zaGVldF9fY292ZXIge1xuICAgIHdpZHRoOiBtaW4oMTFyZW0sIDUwdncpO1xufVxuXG4uYm9vay1zaGVldF9fY292ZXIgLmNvdmVyIHtcbiAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3ctYm9vayk7XG59XG5cbi5ib29rLXNoZWV0X19tYWluIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1zcGFjZS1tKTtcbiAgICBtaW4td2lkdGg6IDA7XG4gICAgbWF4LXdpZHRoOiB2YXIoLS13aWR0aC1yZWFkaW5nKTtcbn1cblxuLmJvb2stc2hlZXRfX2F1dGhvciB7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMnhzKTtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtMSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLXdlaWdodC1tZWRpdW0pO1xufVxuXG4uYm9vay1zaGVldF9fYXV0aG9yIGEge1xuICAgIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0KTtcbn1cblxuLmJvb2stc2hlZXRfX3NlcmllcyB7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtM3hzKTtcbiAgICBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1zb2Z0KTtcbn1cblxuLmJvb2stc2hlZXRfX3NlcmllcyBhIHtcbiAgICBjb2xvcjogaW5oZXJpdDtcbn1cblxuLyogRmFpdHMgYmlibGlvZ3JhcGhpcXVlcyA6IHVuZSBsaWduZSBkZSBjb2xvbm5lcyDDqXRpcXVldMOpZXMsIHBhcyB1biB0YWJsZWF1LiAqL1xuLmJvb2stc2hlZXRfX2ZhY3RzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBnYXA6IHZhcigtLXNwYWNlLXMpIHZhcigtLXNwYWNlLWwpO1xufVxuXG4uYm9vay1zaGVldF9fZmFjdHMgZHQge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tc3RlcC0tMSk7XG4gICAgY29sb3I6IHZhcigtLWNvbG9yLXRleHQtc29mdCk7XG59XG5cbi5ib29rLXNoZWV0X19mYWN0cyBkZCB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGZvbnQtd2VpZ2h0OiB2YXIoLS13ZWlnaHQtc2VtaWJvbGQpO1xufVxuXG4uYm9vay1zaGVldF9fZGVzY3JpcHRpb24ge1xuICAgIHdoaXRlLXNwYWNlOiBwcmUtbGluZTtcbn1cblxuLyogRW5jYXJ0IMKrIG1hIGJpYmxpb3Row6hxdWUgwrsgOiB1biBzaWduZXQgZGUgcGFyY2hlbWluLCBwbGF0LiAqL1xuLmJvb2stc2hlZXRfX2xpYnJhcnkge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBnYXA6IHZhcigtLXNwYWNlLXhzKTtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS1tKTtcbiAgICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHZhcigtLWNvbG9yLWFjY2VudCk7XG4gICAgYm9yZGVyLXJhZGl1czogMCB2YXIoLS1yYWRpdXMtc2hlZXQpIHZhcigtLXJhZGl1cy1zaGVldCkgMDtcbn1cblxuLmJvb2stc2hlZXRfX2xpYnJhcnktdGl0bGUge1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mb250LXNlcmlmKTtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtMSk7XG4gICAgZm9udC13ZWlnaHQ6IHZhcigtLXdlaWdodC1zZW1pYm9sZCk7XG59XG5cbi5ib29rLXNoZWV0X19saWJyYXJ5IGZvcm0ge1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNDByZW0pIHtcbiAgICAuYm9vay1zaGVldCB7XG4gICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMTNyZW0gMWZyO1xuICAgICAgICBhbGlnbi1pdGVtczogc3RhcnQ7XG4gICAgfVxuXG4gICAgLmJvb2stc2hlZXRfX2NvdmVyIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRW4tdMOqdGUgYXZlYyBjb3V2ZXJ0dXJlICovXG5cbi5wYWdlLWhlYWRlci0tYm9vayB7XG4gICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLnBhZ2UtaGVhZGVyX19jb3ZlciB7XG4gICAgZmxleDogbm9uZTtcbiAgICB3aWR0aDogNHJlbTtcbn1cblxuLnBhZ2UtaGVhZGVyLS1ib29rIGgxIHtcbiAgICBmb250LXNpemU6IHZhcigtLXN0ZXAtMyk7XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAzNnJlbSkge1xuICAgIC5wYWdlLWhlYWRlcl9fY292ZXIge1xuICAgICAgICB3aWR0aDogNS41cmVtO1xuICAgIH1cblxuICAgIC5wYWdlLWhlYWRlci0tYm9vayBoMSB7XG4gICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tc3RlcC00KTtcbiAgICB9XG59XG4iLCIvKlxuICogVGFibGVhdSBkZSBib3JkIGV0IGJpbGFuIGFubnVlbCA6IGNoaWZmcmVzIGV0IG9iamVjdGlmIGPDtHRlIMOgIGPDtHRlIGTDqHMgcXVlIHBvc3NpYmxlLlxuICovXG5cbi5kYXNoYm9hcmRfX292ZXJ2aWV3IHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtbCk7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuQG1lZGlhIChtaW4td2lkdGg6IDUycmVtKSB7XG4gICAgLmRhc2hib2FyZF9fb3ZlcnZpZXcge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gbWlubWF4KDAsIDFmcik7XG4gICAgICAgIGdhcDogdmFyKC0tc3BhY2UteGwpO1xuICAgIH1cblxuICAgIC5kYXNoYm9hcmRfX292ZXJ2aWV3IC5nb2FsIHtcbiAgICAgICAganVzdGlmeS1zZWxmOiBlbmQ7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbn1cbiIsIi8qXG4gKiBhc3NldHMvc3R5bGVzL2FwcC5jc3Mg4oCUIHBvaW50IGQnZW50csOpZSBDU1MsIGltcG9ydMOpIHBhciBhc3NldHMvYXBwLmpzLlxuICpcbiAqIEF1Y3VuZSByw6hnbGUgaWNpLCBzZXVsZW1lbnQgbCdvcmRyZSBkZSBsYSBjYXNjYWRlIDpcbiAqICAgMS4gdG9rZW5zICAgICAgZMOpY2lzaW9ucyBkZSBkZXNpZ24gKGN1c3RvbSBwcm9wZXJ0aWVzKVxuICogICAyLiBmb250cyAgICAgICBAZm9udC1mYWNlIGF1dG8taMOpYmVyZ8Opc1xuICogICAzLiBiYXNlICAgICAgICByZXNldCArIMOpbMOpbWVudHMgSFRNTCBudXNcbiAqICAgNC4gbGF5b3V0ICAgICAgc3RydWN0dXJlIGdsb2JhbGUgZGUgYmFzZS5odG1sLnR3aWdcbiAqICAgNS4gY29tcG9uZW50cyAgYnJpcXVlcyByw6l1dGlsaXNhYmxlcywgdW5lIHBhciBmaWNoaWVyXG4gKiAgIDYuIHBhZ2VzICAgICAgIGFqdXN0ZW1lbnRzIHByb3ByZXMgw6AgdW5lIHBhZ2UsIMOgIGdhcmRlciByYXJlc1xuICovXG5cbkBpbXBvcnQgJy4vdG9rZW5zLmNzcyc7XG5AaW1wb3J0ICcuL2ZvbnRzLmNzcyc7XG5AaW1wb3J0ICcuL2Jhc2UuY3NzJztcbkBpbXBvcnQgJy4vbGF5b3V0LmNzcyc7XG5AaW1wb3J0ICcuL2NvbXBvbmVudHMvYnV0dG9uLmNzcyc7XG5AaW1wb3J0ICcuL2NvbXBvbmVudHMvZm9ybS5jc3MnO1xuQGltcG9ydCAnLi9jb21wb25lbnRzL2Jvb2suY3NzJztcbkBpbXBvcnQgJy4vY29tcG9uZW50cy9mZWVkYmFjay5jc3MnO1xuQGltcG9ydCAnLi9jb21wb25lbnRzL3JlYWRpbmctc3RhdHMuY3NzJztcbkBpbXBvcnQgJy4vY29tcG9uZW50cy9pbmRleC1saXN0LmNzcyc7XG5AaW1wb3J0ICcuL2NvbXBvbmVudHMvZm9ybS1sYXlvdXQuY3NzJztcbkBpbXBvcnQgJy4vY29tcG9uZW50cy9zaGVsZi5jc3MnO1xuQGltcG9ydCAnLi9jb21wb25lbnRzL2lzYm4tbG9va3VwLmNzcyc7XG5AaW1wb3J0ICcuL2NvbXBvbmVudHMvY29tYm9ib3guY3NzJztcbkBpbXBvcnQgJy4vY29tcG9uZW50cy9saWJyYXJ5LWVudHJ5LmNzcyc7XG5AaW1wb3J0ICcuL2NvbXBvbmVudHMvY292ZXItZmllbGQuY3NzJztcbkBpbXBvcnQgJy4vcGFnZXMvYXV0aC5jc3MnO1xuQGltcG9ydCAnLi9wYWdlcy9ib29rLmNzcyc7XG5AaW1wb3J0ICcuL3BhZ2VzL2Rhc2hib2FyZC5jc3MnO1xuIl0sIm5hbWVzIjpbXSwic291cmNlUm9vdCI6IiJ9*/