/*!**********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/00_reset.css ***!
  \**********************************************************************************************************************/
*, ::after, ::before {
    box-sizing: border-box;
}

body {
    margin: 0;
}

ul {
    list-style-type: none;
    padding-inline-start: 0;
}
/*!*********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/10_font.css ***!
  \*********************************************************************************************************************/
html {
    /* Il est interdit de rajouter des couleurs sans demander l'accord du PO */
    --cBlanc1: var(--cBlanc);
    /* inutilisé 2026-06-13  --cBlanc1p: #E0E0E0; */
    --cBlanc02: #F5F5F5;
    --cBlanc2: #F0F0F0;
    --cBlanc03: #dce1ea;
    --cBlanc3: #CCCFCC;
    /* inutilisé 2026-06-13  --cBlanc4: #AAAFAA; */
    --cBlanc5: #999C99;



    /* ============================================
       COULEURS TEXTE NOIR - UTILISATION OBLIGATOIRE
       ============================================ */

    /* --cNoir1 : ÉLÉMENTS D'EMPHASE
       - Titres : h1, h2, h3
       - Texte des boutons (quand pas de couleur définie)
       - Labels obligatoires (required)
       - Menus de navigation
       - Checkbox et radio boutons
       - Valeur principale dans les compteurs (ex: "3" dans "3 / 5")
    */
    --cNoir1: #181818;
    /* inutilisé 2026-06-13  --cNoir1o: #18181855; */

    /* --cNoir2 : CORPS DE TEXTE
       - Paragraphes <p>
       - Listes <li>, énumérations
       - Labels facultatifs
       - Texte saisi dans les inputs
       - Titres h4, h5, h6
       - Valeur secondaire dans les compteurs (ex: "/ 5" dans "3 / 5")
    */
    --cNoir2: #282828;

    /* --cNoir3 : TEXTE TERTIAIRE
       - Placeholders
       - Messages d'aide discrets
       - Texte désactivé
    */
    --cNoir3: #555;

    /* --cNoir4-5 : TEXTE TRÈS ATTÉNUÉ
       - Éléments désactivés
       - Texte décoratif
    */
    --cNoir4: #999;
    --cNoir5: #BBB;
    --cBlanc: #FFF;
    --cNoir: #000;
    --cTexte1: #222;
    /* inutilisé 2026-06-13  --cTexte2: #444; */
    --cForm: #000;
    /* inutilisé 2026-06-13  --cForm_b: #555; */
    --cFormFocus: var(--cCta);
    /* inutilisé 2026-06-13  --cBleu: #025BA7; */
    --cRouge: #F15B4E;

    /* inutilisé 2026-06-13  --cPrimaire: #ad0000; */
    /* inutilisé 2026-06-13  --cPrimaireh: #ce0000; */
    --cRouge6: #930000;
    --cRouge6h: #cc0000;
    --cRouge6aht: #fffDfE;

    /* inutilisé 2026-06-13  --cStatut0: #8996ac; */
    /* inutilisé 2026-06-13  --cStatut1: #308ed1; */
    /* inutilisé 2026-06-13  --cStatut2: #1ed10e; */
    /* inutilisé 2026-06-13  --cStatut3: #afc0ab; */
    /* inutilisé 2026-06-13  --cStatut4: #abb3c0; */
    
    --cBackground: var(--cBlanc);
    --cLink: #00629c;
    --cLinkh: #004269;
    --cCta: #308ed1;
    --cCtah: #2572a9;
    --cCtat: #FFF;
    --cCtath: #FFF;
    /* inutilisé 2026-06-13  --cCta2: #e3eef4; */
    /* inutilisé 2026-06-13  --cCta2h: #bed8e6; */
    /* inutilisé 2026-06-13  --cCta2t: #308ed1; */
    /* inutilisé 2026-06-13  --cCta2th: #308ed1; */

    --cBleu4: #06A;
    --cBleu4a: linear-gradient(to bottom, #17B, #059 100%);
    --cBleu4at: #F8F8FF;
    /* inutilisé 2026-06-13  --cBleu4h: #246; */
    --cBleu4ah: linear-gradient(to bottom, #17B, #17B 100%);
    --cBleu4ht: #F8F8FF;
    --cBleu7_t: #048;

    --cOr: #eab308;
    --cOrh: #ca8a04;
    /* inutilisé 2026-06-13  --cOrt: #fff; */
    --cOrFond: #fefce8;
    /* inutilisé 2026-06-13  --cOrFond2: #fef9c3; */

    --cSucces: #1ed10e;
    --cSuccesFond: #f0fff4;
    --cSuccesTexte: #276749;

    /* Layout */
    --largeur: 1360px;
    /* inutilisé 2026-06-13  --maxWidth: 760px; */
    --cBg: var(--cBlanc);
    /* inutilisé 2026-06-13  --cBg_b: #CCC; */

    /* Noir transparent — ombres */
    --cOmbre: #0002;            /* environ 15% */
    --cOmbreForte: #0004;       /* environ 30% */

    /* transparent — overlays */
    --cOverlay: #0008;          /* environ 50% */
    --cBlancOverlay: #FFFC;     /* environ 80% */

    /* Focus */
    --cFormFocusHalo: #308ED126;    /* bleu focus 15% */

    /* Ombres composées */
    --ombrePortee: 0 4px 12px var(--cOmbre);
    --ombrePortee2: 0 0px 25px #000;
    --ombreModale: 0 10px 40px var(--cOmbreForte);
    --ombreInterne: 0 0 10px 10px inset var(--cBlanc02);

    /* Couleurs Vert (vitrine) */
    /* inutilisé 2026-06-13  --cBgVert_s: linear-gradient(220deg, #EFD, #DFC); */
    /* inutilisé 2026-06-13  --cBgVert_b: #BCA; */
    /* inutilisé 2026-06-13  --cVert0: #F8FFE8; */
    /* inutilisé 2026-06-13  --cVert1: #E8FFD8; */
    /* inutilisé 2026-06-13  --cVert1_b: #CCC; */
    /* inutilisé 2026-06-13  --cVert2: #EFC; */
    /* inutilisé 2026-06-13  --cVert3: #CDA; */
    /* inutilisé 2026-06-13  --cVert3_t: #230; */
    /* inutilisé 2026-06-13  --cVert3_o: #BDAD; */
    /* inutilisé 2026-06-13  --cVert3_h: #AB7; */
    /* inutilisé 2026-06-13  --cVert3_ht: #000; */
    /* inutilisé 2026-06-13  --cVert3_b: #555; */
    /* inutilisé 2026-06-13  --cVert4: #BC8; */
    /* inutilisé 2026-06-13  --cVert4_t: #081100; */
    /* inutilisé 2026-06-13  --cVert5: #3C0; */
    /* inutilisé 2026-06-13  --cVert5_a: linear-gradient(to bottom, #6A1, #480 100%); */
    /* inutilisé 2026-06-13  --cVert5_ah: linear-gradient(to bottom, #6A1, #6A1 100%); */
    /* inutilisé 2026-06-13  --cVert5_t: #FFF; */
    /* inutilisé 2026-06-13  --cVert6: #463; */
    /* inutilisé 2026-06-13  --cVert6_h: #362; */
    /* inutilisé 2026-06-13  --cVert6_ht: #F8FFF8; */

    /* Couleurs Noir gradients */
    /* inutilisé 2026-06-13  --cNoir3_a: linear-gradient(to bottom, #505858, #303838 100%); */
    /* inutilisé 2026-06-13  --cNoir3_ah: linear-gradient(to bottom, #505858, #505858 100%); */
    /* inutilisé 2026-06-13  --cNoir3_ahLight: linear-gradient(to bottom, #707878, #707878 100%); */
    /* inutilisé 2026-06-13  --cNoir3_at: #FFF; */

    /* Couleurs Jaune */
    --cJaune5: #EB2;
    /* inutilisé 2026-06-13  --cJaune6: #F3AE17; */
    /* inutilisé 2026-06-13  --cJaune6_t: #100;        */
    /* inutilisé 2026-06-13  --cJaune6_a: linear-gradient(to bottom, #FC3, #EA1 100%); */
    /* inutilisé 2026-06-13  --cJaune6_b: #C80; */
    /* inutilisé 2026-06-13  --cJaune6_h: #FC3; */
    /* inutilisé 2026-06-13  --cJaune6_ah: linear-gradient(to bottom, #FC3, #FC3 100%); */
    /* inutilisé 2026-06-13  --cAtteste: linear-gradient(45deg, var(--cJaune5), #FC3); */
    /* inutilisé 2026-06-13  --cAtteste_b: #D39E00; */

    /* Couleurs Bleu complémentaires */
    --cBleu1: #E8F0F8;
    /* inutilisé 2026-06-13  --cBleu1_s: linear-gradient(220deg, var(--cBleu1), var(--cBleu1), var(--cBleu1), var(--cBleu3)); */
    /* inutilisé 2026-06-13  --cBleu2_s: #D8E0E8; */
    --cBleu3: #CEF;
    /* inutilisé 2026-06-13  --cBleu3_b: #282828; */
    /* inutilisé 2026-06-13  --cBleu4_b: #113; */
    /* inutilisé 2026-06-13  --cBleu6: #0AF; */
    /* inutilisé 2026-06-13  --cBleu6_ah: linear-gradient(to bottom, #6EF, #6EF 100%); */
    /* inutilisé 2026-06-13  --cBleu6_t: #181818; */

    /* Couleurs Violet */
    /* inutilisé 2026-06-13  --cViolet6: #A0F; */
    /* inutilisé 2026-06-13  --cViolet6_ah: linear-gradient(to bottom, #d79af2, #d79af2 100%); */
    /* inutilisé 2026-06-13  --cViolet6_ht: #000; */
    /* inutilisé 2026-06-13  --cViolet6_t: #FFF; */

    /* Couleurs Rouge complémentaires */
    /* inutilisé 2026-06-13  --cRouge1: #C30; */
    /* inutilisé 2026-06-13  --cRouge1_t: #FFF; */
    --cRouge2: #C44;
    /* inutilisé 2026-06-13  --cRouge3: #900; */
    /* inutilisé 2026-06-13  --cRouge5_a: linear-gradient(to bottom, #F50, #B20 100%); */
    /* inutilisé 2026-06-13  --cRouge5_ah: linear-gradient(to bottom, #F50, #F50 100%); */

    /* Couleurs spéciales */
    /* inutilisé 2026-06-13  --sAlerte_s: #DEC4C4; */
    /* inutilisé 2026-06-13  --cOk: #391; */
    --cTest: #ECF;
    --cTest2: #d2a8e0;
    --cTest3: #9B59B6;
    --cTest5_a: linear-gradient(to bottom, #9B59B6, #783b92 100%);
    --cVTest5_ah: linear-gradient(to bottom, #9B59B6, #9B59B6 100%);
    /* inutilisé 2026-06-13  --cTest_t: #000; */
    /* inutilisé 2026-06-13  --cTuto: #C6F; */
    /* inutilisé 2026-06-13  --cTuto_t: #000; */
    /* inutilisé 2026-06-13  --cTuto_ah: #d79af2; */
    /* inutilisé 2026-06-13  --cBlanc1_t: #181818; */
    /* inutilisé 2026-06-13  --cPlacehoder: #888; */
    /* inutilisé 2026-06-13  --cForm_s: #FFF; */
    /* inutilisé 2026-06-13  --bsCta: 0 7px 14px #3352, 0 3px 6px #0001; */

    /* Formulaires utilisateur */
    /* inutilisé 2026-06-13  --cFormUsr: #EEFAFF; */
    /* inutilisé 2026-06-13  --cFormUsr_b: #334; */
    /* inutilisé 2026-06-13  --cFormUsr_h: #FFF; */
    /* inutilisé 2026-06-13  --cFormUsr_bf: #0AF; */
    /* inutilisé 2026-06-13  --cFormUsr_cb: #059; */
    /* inutilisé 2026-06-13  --cForm_bf: #3C0; */
    /* inutilisé 2026-06-13  --cForm_cb: #590; */
    /* inutilisé 2026-06-13  --cOk_b: #8F8; */
    /* inutilisé 2026-06-13  --cKo_b: #F88; */

    /* Logo */
    /* inutilisé 2026-06-13  --cLogo1: #EBF7E4; */
    /* inutilisé 2026-06-13  --cLogo2: #C6E9AF; */

    --ffBase: 'Noto Sans', Arial, sans-serif;
    --ffMono: 'JetBrainsMono', 'Verdana', monospace;

    /* Il est interdit de rajouter des styles typo sans demander l'accord du PO */
    /* inutilisé 2026-06-13  --fTitre: normal normal 700 32px 'Scada', sans-serif; */
    --fH1: normal normal 700 32px 'Scada', sans-serif;
    --fH2: normal normal 700 24px 'Scada', sans-serif;
    --fH3: normal normal 400 22px 'Scada', sans-serif;
    --fH4: normal normal 400 18px 'Scada', sans-serif;
    --fMenu14: normal normal 400 14px 'Montserrat', sans-serif;
    --fCta16: normal normal 700 18px 'Montserrat', sans-serif;
    /* inutilisé 2026-06-13  --fMono16: normal normal 400 16px 'JetBrainsMono', 'Courier New', Courier, monospace; */
    /* inutilisé 2026-06-13  --fMono24: normal normal 400 24px 'JetBrainsMono', 'Courier New', Courier, monospace; */
    --fMono24b: normal normal 700 24px 'JetBrainsMono', 'Courier New', Courier, monospace;
    --fCta20: normal normal 700 20px 'Montserrat', sans-serif;
    /* inutilisé 2026-06-13  --fLegend16: normal normal 400 20px 'Scada', sans-serif; */
    --fLight14: italic normal 200 14px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fMini11: italic normal 200 11px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fText16: normal normal 400 16px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fText16Strong: normal normal 700 16px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fItalic16: italic normal 400 16px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fAlerte16: italic small-caps 700 20px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;
    --fLabel: normal normal 400 14px 'Noto Sans', Verdana, Geneva, Arial, sans-serif;

    --border: 1px solid #dce1ea;
    --borderR0: 3px;
    --borderR1: 5px;
    --borderR2: 7px;
    --borderCarte: 1px solid var(--cNoir4);
    --borderForm: 1px solid var(--cNoir5);
    --borderInput: 1px solid var(--cNoir5);

    /* Espacements — nommés par rôle (comme les bordures), accord PO 2026-07-03.
       Migration progressive : ne remplacer une valeur en dur que si le rôle ET la valeur
       correspondent (no-op visuel) ; aligner une dérive de valeur = décision à part. */
    --gapListe: 32px;   /* entre les éléments d'une liste. La colonne qui borde la liste (ex. panneau de filtres) prend le MÊME gap : deux rythmes différents côte à côte, c'est moche */
    --paddingCorps: 20px;   /* intérieur d'un corps de bloc / panneau / modale */
    --gapDefaut: 8px;       /* espace standard entre éléments frères (flex/grid) */
    --gapReduit: 4px;       /* variante volontairement plus serrée : listes compactes, groupes de boutons */
    --gapMoyen: 12px;    /* espacement intermédiaire entre éléments frères */
    --gapLarge: 20px;    /* espacement généreux entre groupes d'éléments */
    --paddingMiniDiv: 8px 16px; /* padding de tout les blocs avec fond colorées */
    --paddingEtiquette: 3px 6px; /* padding des span et autres etiquette */

    /* Boutons : un bouton ne choisit NI son padding, NI sa bordure, NI sa couleur
       (décision PO 2026-07-18). Il prend ces variables — ou pas de bordure, ou la
       couleur d'un rôle (primaire, danger, aperçu) — jamais une valeur à lui. */
    --paddingCta14: 8px 16px;             /* padding de tout bouton compact (.cta14, .ctaDiscret, toggles) */
    --borderCta: 1px solid var(--cNoir4); /* LA bordure d'un bouton : celle-ci ou aucune */
    --cCtaTexte: var(--cNoir2);         /* LE texte d'un bouton neutre : ce noir ou une couleur de rôle */

    --cEnTete: #f0f4f7;

    /* Couleurs de fond des cartes Timeline */
    /* inutilisé 2026-06-13  --cFondDistributions0: #fdfdf8; */
    --cFondDistributions0: #fafaf8;
    --cFondDistributions: #f7f6e4;
    --cFondDistributions2: #e9e5af;
    --cFondDistributions3: #A79e2e;
    --cFondDistributions4: #978e1e;
    --cFondDistributions_a: linear-gradient(to bottom, var(--cFondDistributions3), var(--cFondDistributions4) 100%);
    --cFondDistributions_ah: linear-gradient(to bottom, var(--cFondDistributions3), var(--cFondDistributions3) 100%);
    --cFondGroupes0: #f8fcfd;
    --cFondGroupes: #e4f4f7;
    --cFondGroupes2: #afdfe9;
    --cFondGroupes3: #2eA9Bf;
    --cFondGroupes4: #1e99af;
    --cFondGroupes_a: linear-gradient(to bottom, var(--cFondGroupes3), var(--cFondGroupes4) 100%);
    --cFondGroupes_ah: linear-gradient(to bottom, var(--cFondGroupes3), var(--cFondGroupes3) 100%);
    --cFondConfig0: #f2f4fa;
    --cFondConfig: #E7ECF8;
    --cFondConfig2: #c5d0e8;
    --cFondConfig3: #436bC1;
    --cFondConfig4: #335bb1;
    --cFondConfig_a: linear-gradient(to bottom, var(--cFondConfig3), var(--cFondConfig4) 100%);
    --cFondConfig_ah: linear-gradient(to bottom, var(--cFondConfig3), var(--cFondConfig3) 100%);
    --cFondScenes0: #f1f4f8;
    --cFondScenes: #e3eef8;
    --cFondScenes2: #accee8;
    --cFondScenes3: #308ed1;
    --cFondScenes4: #2678b5;
    --cFondScenes_a: linear-gradient(to bottom, var(--cFondScenes3), var(--cFondScenes4) 100%);
    --cFondScenes_ah: linear-gradient(to bottom, var(--cFondScenes3), var(--cFondScenes3) 100%);
    --cFondAffichages0: #f4f0f6;
    --cFondAffichages: #f3e8f5;
    --cFondAffichages2: #d6a5d6;
    --cFondAffichages3: #9c27b0;
    --cFondAffichages4: #8e24aa;
    --cFondAffichages_a: linear-gradient(to bottom, var(--cFondAffichages3), var(--cFondAffichages4) 100%);
    --cFondAffichages_ah: linear-gradient(to bottom, var(--cFondAffichages3), var(--cFondAffichages3) 100%);

    /* Alias numériques (correspondant à NatureBrique.value) */
    --cFondNatureBrique1: var(--cFondGroupes);   /* Participants */
    /* inutilisé 2026-06-13  --cFondNatureBrique1b: var(--cFondGroupes2); */
    --cFondNatureBrique2: var(--cFondDistributions);           /* Lots */
    /* inutilisé 2026-06-13  --cFondNatureBrique2b: var(--cFondDistributions2); */
    --cFondNatureBrique3: var(--cFondConfig);         /* Configurations */
    /* inutilisé 2026-06-13  --cFondNatureBrique3b: var(--cFondConfig2); */
    --cFondNatureBrique4: var(--cFondScenes);     /* Scenes */
    /* inutilisé 2026-06-13  --cFondNatureBrique4b: var(--cFondScenes2); */
    --cFondNatureBrique5: var(--cFondAffichages);     /* Affichage */
    /* inutilisé 2026-06-13  --cFondNatureBrique5b: var(--cFondAffichages2); */
}

/* ============================================
   TITRES ET TYPOGRAPHIE
   ============================================ */

h1, h2, h3 {
    color: var(--cNoir1);
}

h4 {
    color: var(--cNoir2);
}

h5, h6 {
    color: var(--cNoir3);
}

p, li {
    color: var(--cNoir2);
}

h1, h2, h3, h4, h5, h6 {
    font: var(--fH1);
}

button {
    font: var(--fCta16);
}

h1 {
    font: var(--fH1);
    margin: 10px 15px 5px 0;
    padding: 0;
}

h2 {
    font: var(--fH2);
    margin: 15px 10px 5px 0;
    padding: 0;
}

h3 {
    font: var(--fH3);
    padding: 0;
    margin: 25px 0 15px;
}

h4, h5 {
    font: var(--fH4);
}

h4, h5, h6 {
    margin: 25px 0 7px;
}

/* <i> est utilisée comme balise de suffixe (#2, #3…) sur les noms d'éléments.
   La balise <em> remplace <i> pour l'italique sémantique. */
i {
    display: inline-block;
    font-size: 75%;
    font-weight: 100;
    font-style: normal;
    font-family: var(--ffBase);
}
/*!*********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/30_base.css ***!
  \*********************************************************************************************************************/
/* inutilisé 2026-06-13
#divBody {
    max-width: 920px;
    margin: 0 auto;
    padding: 10px;
}
*/

.contenu {
    padding: 10px 40px;
}

.zoneFlash {
    max-width: 1155px;
    margin: 0 auto 20px;
    min-height: 38px; /* Hauteur d'un message flash (padding 12px * 2 + font 14px) */
}

.zoneFlash .alertSucces,
.zoneFlash .alertErreur {
    margin-bottom: 10px;
}

.zoneFlash .alertSucces:last-child,
.zoneFlash .alertErreur:last-child {
    margin-bottom: 0;
}

/* Box de rappel (lecture seule) */
.divRappel {
    background: var(--cBlanc);
    border-left: var(--border);
    border-right: var(--border);
    padding: 20px 40px 25px;
    width: 335px;
    margin: 0;
}

.divRappel h3 {
    padding: 0;
    margin: 0 0 20px 0;
}

/* CTA dans les blocs divRappel : taille contenu, aligné à gauche */
.divRappel .ctaValider,
.divRappel .ctaSecondaire {
    width: fit-content;
    height: auto;
    text-align: left;
    justify-content: flex-start;
}

@media (max-width: 800px) {
    .contenu {
        padding: 10px 20px;
    }
}

/* inutilisé 2026-06-13
.divCentre {
    text-align: center;
    margin: 0 auto;
    max-width: 1200px;
    padding: 20px;
}
*/

body {
    font: var(--fText16);
    overflow-x: hidden;
    width: 100%;
    margin: 0;
    padding: 0;
    color: var(--cNoir1);
    background-color: var(--cBackground);
}

#bodyPage {
    max-width: 1280px;
    margin: 10px auto;
}

/* inutilisé 2026-06-13
.marge2 {
    margin: 5px auto;
    padding: 0 20px;
}
*/

@media all and (min-width: 750px) {
    /* inutilisé 2026-06-13
    .marge2 {
        margin: 10px auto;
        padding: 0 20px;
    }
    */
}

/* inutilisé 2026-06-13
#centrePage {
    max-width: 1440px;
    margin: 0 auto;
    width: 100%;
}

#divPage {
    margin: 25px 10px 50px;
    min-height: 25vh;
}

#quiSuisJe {
    display: flex;
    justify-content: space-between;
    flex-direction: row;
    font: var(--fLight14);
}
#quiSuisJeLogout {
    display: flex;
    align-items: center;
    gap: 6px;
    opacity: .7;
}

#quiSuisJeLogout:hover {
    background: transparent;
    color: var(--cLink);
    opacity: 1;
}
*/
/* inutilisé 2026-06-13
#divHeader {
    display: flex;
    align-items: center;
    justify-content: space-between;

}
*/
/*!********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/31_cta.css ***!
  \********************************************************************************************************************/
button {
    user-select: none;
    -webkit-user-select: none;
    display: inline-block;
    cursor: pointer;
    margin: 0;
    color: var(--cCta);
    font: var(--fCta16);
    text-decoration: none;
}

button.ctaAnnuler,
a {
    font: var(--fText16);
    color: var(--cLink);
    background: transparent;
    border: transparent;
    text-decoration: none;
}

button.ctaAnnuler,
a.ctaAnnuler {
    display: block;
    margin: 20px 0;
    padding: 0;
    color: var(--cNoir3);
}

button.btn, a.btn {
    min-width: 180px;
    cursor: pointer;
    border: 0;
    color: var(--cCtat);
    background-color: var(--cCta);
    font: var(--fCta16);
    text-align: center;
    transition: all 0.3s;
    position: relative;
    padding: 15px 20px;
    margin: 10px 0;
    border-radius: var(--borderR1);
    width: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
}

a.btn:hover, button.btn:hover {
    color: var(--cCtath);
    background-color: var(--cCtah);

}

/* inutilisé 2026-06-13
button.btn2, a.btn2 {
    min-width: 100px;
    display: block;
    cursor: pointer;
    border: 0;
    font: var(--fCta20);
    padding: 20px 40px;
    margin: 20px auto;
    text-align: center;
    transition: all 0.3s;
    color: var(--cTexte1);
    position: relative;
    background-repeat: round;
    width: fit-content;
    border-radius: 12px;
}

button#redirection.btn2 {
    background-color: transparent;
}

button#redirection.btn2:hover,
a.btn2:hover, button.btn2:hover {
    color: var(--cCtath);
    background-color: var(--cCtah);
}
*/

/* ============================================
   CTA COMPACT — socle .cta14

   LA silhouette des boutons d'action compacts (barres d'action, cartes) :
   forme, police, dimensions définies ici et nulle part ailleurs. Modèle :
   le bouton de la barre de contrôle aperçu (décision PO 2026-07-18).
   Se pose à côté du rôle qui apporte sa couleur : class="cta14 ctaPreviewControle".
   14 = la taille de police (--fMenu14). Silhouette formulaire à venir : .cta18.
   ============================================ */

.cta14 {
    display: inline-block; /* un <a> hors barre flex reste un bouton (padding vertical réel) */
    padding: var(--paddingCta14);
    font: var(--fMenu14);
    border: none;
    border-radius: var(--borderR1);
    cursor: pointer;
    transition: background 0.2s, color 0.2s, border-color 0.2s;
}

.cta14:disabled {
    opacity: 0.4;
    cursor: auto;
}

/* Rôle aperçu : LE bouton qui lance un aperçu — violet aperçu, partout
   (catalogue, page Modifier, fiches d'animation). Un aperçu = violet,
   décision PO 2026-07-18. */
.ctaPreview {
    background: var(--cTest5_a);
    color: var(--cBlanc);
}

.ctaPreview:hover {
    background: var(--cVTest5_ah);
}

/* ============================================
   BADGE MODE TEST - Réutilisable partout
   ============================================ */

.badgeModeTest {
    display: inline-block;
    padding: 3px 12px;
    font: var(--fLabel);
    color: var(--cBlanc);
    background: var(--cTest3);
    border-radius: 10px;
    margin: 10px 0;
}
/*!*********************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/42_auth.css ***!
  \*********************************************************************************************************************/
/* ==========================================================================
   Pages d'authentification (login, register, inscription)
   ========================================================================== */

.authForm {
    padding: 40px 20px 20px;
    display: flex;
    justify-content: center;
}

/* Box de connexion / inscription */
.boxCenterForm {
    background: var(--cBlanc);
    border: var(--border);
    border-radius: var(--borderR2);
    padding: 30px 40px 40px;
    width: min(365px, 95%);
    box-shadow: 0 2px 10px var(--cOmbre);
    margin: 0;
}

.boxCenterForm h3 {
    padding: 0;
    margin: 0 0 20px 0;
    text-align: center;
}

/* inutilisé 2026-06-13
.boxCenterForm .sousTitre {
    font: var(--fLight14);
    text-align: center;
    margin: 0 0 20px 0;
}
*/

form > div {
    margin-bottom: 15px;
}

.boxCenterForm .ctaValider {
    margin-top: 5px;
}

/* Actions du formulaire (valider + annuler) */
.formActions {
    margin-top: 10px;
}

/* inutilisé 2026-06-13
.formActionsFlex {
    margin-top: 10px;
}

@media (min-width: 500px) {
    .formActionsFlex {
        display: flex;
        flex-direction: row-reverse;
        gap: 15px;
    }

    .formActionsFlex .ctaValider,
    .formActionsFlex .ctaSecondaire {
        width: auto;
        flex: 0 1 auto;
    }
}
*/

/* Alertes */
.alertErreur,
.alertErreurOAuth,
.alertSucces {
    background: var(--cRouge6);
    color: var(--cBlanc);
    padding: var(--paddingMiniDiv);
    margin-bottom: 20px;
    font: var(--fText16);
}

/* Message d'erreur inline OAuth */
.alertErreurOAuth {
    margin-top: 10px;
}

.alertSucces {
    background: var(--cSuccesFond);
    border: 1px solid var(--cSucces);
    color: var(--cSuccesTexte);
}

/* Lien vers autre page auth */
/* inutilisé 2026-06-13
.lienAuth {
    text-align: center;
    margin-top: 25px;
    padding-top: 20px;
    border-top: var(--border);
    font: var(--fLight14);
    font-style: normal;
}

.lienAuth a {
    color: var(--cLink);
}

.lienAuth a:hover {
    color: var(--cBlanc);
    background: var(--cCtah);
}
*/

/* Séparateur OAuth */
.boxCenterForm hr {
    margin: 50px 0;
    border: none;
    border-top: var(--border);
}

/* Séparateur avec espace blanc */
hr.separateur {
    margin: 30px 0;
    border: none;
    border-top: var(--border);
}

/* Bouton OAuth */
.btnOAuth {
    display: flex;
    flex-direction: row;
    align-items: center;
    justify-content: flex-start;
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
    width: 100%;
    padding: 8px 12px;
    border: 1px solid var(--cNoir1);
    border-radius: var(--borderR1);
    background: var(--cBlanc);
    color: var(--cNoir1);
    font: var(--fCta16);
    text-align: left;
    cursor: pointer;
    transition: all 0.2s;
}

.btnOAuth:hover {
    background: var(--cEnTete);
    color: var(--cNoir1);
}

.btnOAuth svg {
    width: 40px;
    height: 40px;
}

/* État de chargement du formulaire */
.formEnChargement {
    pointer-events: none;
}

.formEnChargement input,
.formEnChargement select,
.formEnChargement textarea,
.formEnChargement label {
    opacity: 0.5;
}


/*!******************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/hautDePageCompte.css ***!
  \******************************************************************************************************************************/
/* ============================================
   HAUT DE PAGE COMPTE
   Header simplifié pour l'espace compte Vitrine
   Logo gauche, menu droite
   ============================================ */

#hautDePageCompte {
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: 42px;
    padding: 0 40px;
    border-bottom: var(--border);
}

/* ============================================
   LOGO À GAUCHE
   ============================================ */

#hautDePageCompte .headerLogo {
    flex-shrink: 0;
    display: flex;
    align-items: center;
}

#hautDePageCompte .headerLogo a {
    display: flex;
    align-items: center;
}

#hautDePageCompte .headerLogo svg {
    height: 28px;
    aspect-ratio: 245 / 36;
}

/* ============================================
   NAVIGATION COMPTE À DROITE
   ============================================ */

#headerNavCompte {
    display: flex;
    align-items: center;
}

#headerNavCompte ul {
    display: flex;
    list-style: none;
    align-items: center;
    margin: 0;
    padding: 0;
    gap: var(--gapDefaut);
}

#headerNavCompte ul li a {
    font: var(--fMenu14);
    color: var(--cLink);
    padding: 8px 16px;
    border-radius: var(--borderR1);
    transition: all 0.2s ease;
    display: block;
}

#headerNavCompte ul li a:hover {
    background-color: var(--cCta);
    color: var(--cCtat);
}

#headerNavCompte ul li a.active {
    background-color: var(--cCta);
    color: var(--cCtat);
}

/* ============================================
   RESPONSIVE - MOBILE < 600px
   ============================================ */

@media (max-width: 600px) {
    #hautDePageCompte {
        padding: 0 16px;
        justify-content: flex-end;
    }

    #hautDePageCompte .headerLogo {
        display: none;
    }
}

@media (max-width: 400px) {
    #headerNavCompte ul li a {
        padding: 8px 12px;
        font-size: 13px;
    }
}

/*!****************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/53_blocs.css ***!
  \****************************************************************************************************************************/
/* ============================================
   BLOCS - Composant générique Régie
   ============================================

   ⚠️ Un SOUS-ENSEMBLE « carte » de ce composant est copié dans
   studioVitrine/assets/vitrine/css/blocs.css (partie .bloc / .blocCorps /
   .blocTitre / .blocTexte / .blocActions uniquement, pour la liste des
   scénarios d'aperçu). Si tu modifies l'une de ces règles ici → demander au PO
   s'il faut la répercuter sur la copie vitrine. Le reste du composant (stats,
   compteur, réordonnancement, formulaires) est propre à la régie.

   Composant unifié pour tous les blocs de type :
   Icône | Contenu | Actions

   Structure HTML :
   <div class="bloc blocGroupe">  ← blocGroupe conservé pour TS
       <div class="blocIcone">...</div>
       <div class="blocCorps">
           <h4 class="blocTitre">...</h4>
           <p class="blocTexte">...</p>
       </div>
       <div class="blocActions">...</div>
   </div>

   LE conteneur de contenu Régie (décision PO 2026-07-18) : toute boîte
   « titre + texte + actions » adopte ce composant — cartes du catalogue de
   scénarios, blocs de la page Modifier, blocs d'onglet. Zones optionnelles ;
   les contextes n'apportent que des modificateurs (couleur, largeur).

   Modificateurs de catégorie (couleurs d'icône) :
   - .blocGroupes (ou .blocGroupe pour compat TS)
   - .blocDistributions
   - .blocTelecharger
   - .blocGroupe (mode test, compat TS)

   ============================================ */

/* ══════════════════════════════════════
   CONTENEUR PRINCIPAL
   ══════════════════════════════════════ */

.bloc {
    display: flex;
    align-items: stretch;
    max-width: 600px;
    background: var(--cBlanc);
    border: var(--borderForm);
    border-radius: var(--borderR1);
    overflow: hidden;
    transition: box-shadow 0.2s;
}

/* ══════════════════════════════════════
   ZONE ICÔNE (wrapper uniquement)
   Le style des img/svg et les couleurs de fond
   par catégorie sont centralisés dans 54_icones.css
   ══════════════════════════════════════ */

.blocIcone {
    display: flex;
    justify-content: flex-start;
    padding: 0 4px 0 0;
}

/* ══════════════════════════════════════
   ZONE CONTENU
   ══════════════════════════════════════ */

.blocCorps {
    flex: 1;
    padding: 16px 20px;
    display: flex;
    flex-direction: column;
    gap: var(--gapReduit);
}

.blocTitre {
    font: var(--fH4);
    color: var(--cNoir1);
    margin: 0;
}

.blocTexte {
    font: var(--fText16);
    color: var(--cNoir3);
    margin: 0;
}

/* inutilisé 2026-06-13
.blocSousTitre {
    font: var(--fMenu14);
    color: var(--cNoir3);
}
*/

/* ══════════════════════════════════════
   ZONE ACTIONS
   ══════════════════════════════════════ */

.blocActions {
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
    gap: var(--gapDefaut);
    padding: 16px 20px;
    border-left: var(--border);
    min-width: 240px;
}

.blocActions .toggleAvecLabel {
    justify-content: space-between;
}

/* ══════════════════════════════════════
   STATS (nombre + label)
   ══════════════════════════════════════ */

.blocStats {
    display: flex;
    align-items: baseline;
    gap: var(--gapDefaut); /* aligné 6 -> 8px (échelle PO 2026-07-18) */
    margin-top: 4px;
}

.blocNombre {
    font: var(--fMono24b);
    color: var(--cNoir1);
}

.blocLabel {
    font: var(--fText16);
    color: var(--cNoir3);
}

/* ══════════════════════════════════════
   COMPTEUR (gros chiffre avec séparateur)
   ══════════════════════════════════════ */

.blocCompteur {
    display: flex;
    align-items: baseline;
    gap: var(--gapDefaut);
}

.compteurValeur {
    font: var(--fMono24b);
    color: var(--cNoir1);
}

.compteurReste {
    display: flex;
    align-items: baseline;
    gap: var(--gapDefaut);
}

/* display:flex écraserait l'attribut hidden → on le rétablit explicitement. */
.compteurReste[hidden] {
    display: none;
}

.compteurSeparateur {
    font: var(--fH3);
    color: var(--cNoir4);
}

.compteurLabel {
    font: var(--fText16);
    color: var(--cNoir3);
}

/* ══════════════════════════════════════
   DATE / INFO SECONDAIRE
   ══════════════════════════════════════ */

.blocDate /*, .blocTest (inutilisé 2026-06-13) */, .blocReferences {
    font: var(--fLight14);
    color: var(--cNoir1);
    margin-top: auto;
}

/* Infos secondaires empilées en bas de carte : seule la première prend l'espace libre */
.blocReferences + .blocReferences,
.blocReferences + .blocDate {
    margin-top: 0;
}

/* inutilisé 2026-06-13
.blocTest {
    color: var(--cTest3);
}
*/

/* ══════════════════════════════════════
   LISTE D'ITEMS (lots)
   ══════════════════════════════════════ */

.blocListe {
    list-style: none;
    margin: 12px 0 0 0;
    padding: 0;
    display: flex;
    flex-direction: column;
    gap: var(--gapDefaut);
}

.blocItem {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen);
    padding: 8px 12px;
    background: var(--cBlanc02);
    border-radius: var(--borderR1);
}

.blocItemImage {
    width: 32px;
    height: 32px;
    object-fit: cover;
    border-radius: var(--borderR1);
}

.blocItemLabel {
    flex: 1;
    font: var(--fText16);
    color: var(--cNoir1);
}

.blocItemStock {
    font: var(--fText16);
    color: var(--cNoir1);
}

.panneauFormulaire form > div.blocVertical,
.sectionFormulaire > div.blocVertical {
    display: flex;
    flex-direction: column;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
    padding: 15px 0;
    margin: 30px 20px 30px;
    border-top: var(--border);
}

/* Dans une section canonique, le retrait horizontal est porté par la section elle-même */
.sectionFormulaire > div.blocVertical {
    margin: 15px 0 12px;
}

/* ══════════════════════════════════════
   RÉORDONNANCEMENT (poignée + flèches)
   ══════════════════════════════════════ */

.listeOrdrePoignee {
    width: 14px;
    color: var(--cNoir4);
    cursor: grab;
}

.listeOrdrePoignee:active {
    cursor: grabbing;
}

.divActionClasser {
    display: flex;
    gap: var(--gapReduit);
    margin-left: auto;
}

/* Petit bouton icône compact (flèches, +/−, etc.) */
.miniAction {
    background: none;
    border: var(--border);
    border-radius: var(--borderR1);
    cursor: pointer;
    padding: 2px 8px;
    font: var(--fLabel);
    color: var(--cNoir1);
}

.miniAction:disabled {
    opacity: 0.3;
    cursor: default;
}

.miniAction:not(:disabled):hover {
    background: var(--cBlanc02);
}

.listeOrdreItem.dragging {
    opacity: 0.3;
}

/* ══════════════════════════════════════
   RESPONSIVE
   ══════════════════════════════════════ */

@media (max-width: 600px) {
    .bloc {
        flex-direction: column;
    }

    .blocActions {
        flex-direction: column;
        align-items: flex-end;
        border-left: none;
        border-top: var(--border);
        padding: 12px 20px;
    }
}

/*!*****************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/54_icones.css ***!
  \*****************************************************************************************************************************/
/* ============================================
   ICÔNES - Styles pour les briques et les blocs
   ============================================

   Ce fichier centralise le style visuel des icônes
   utilisées à la fois dans :
   - les briques du menu d'ajout (.briqueIcone sur img/svg)
   - les blocs de résumé (img/svg dans .blocIcone)

   Le wrapper .blocIcone lui-même (flex, padding) reste
   dans 53_blocs.css car c'est de la structure de composant.

   ============================================ */

/* Style de base */
.briqueIcone,
.blocIcone img,
.blocIcone svg {
    width: 64px;
    height: 64px;
    padding: 6px;
    object-fit: contain;
    border-radius: var(--borderR1);
    box-sizing: border-box;
}

/* ============================================
   FONDS PAR CATÉGORIE
   ============================================ */

.briqueGroupes .briqueIcone,
.blocGroupe .blocIcone img,
.blocGroupe .blocIcone svg,
.blocTelecharger .blocIcone img,
.blocTelecharger .blocIcone svg { background: var(--cFondGroupes); }

.briqueDistributions .briqueIcone,
.blocDistribution .blocIcone img,
.blocDistribution .blocIcone svg { background: var(--cFondDistributions); }

.briqueConfigurations .briqueIcone,
.briqueConfig .briqueIcone { background: var(--cFondConfig); }

.briqueScenes .briqueIcone { background: var(--cFondScenes); }

.briqueAffichages .briqueIcone { background: var(--cFondAffichages); }

/* ============================================
   ICÔNE D'UN SCÉNARIO
   ============================================

   Toujours à DROITE, et SANS fond (décision PO 2026-07-31) : les fonds ci-dessus
   codent une catégorie de brique, un scénario n'en a aucune.

   Le SVG est inliné (iconeScenario), pas en <img> : scenarios/{dossier}/icone.svg
   est hors public/. 64px = taille d'icône standard du projet.
   ============================================ */

.scenarioIcone {
    flex: 0 0 auto;
    align-self: flex-start;
    margin-left: auto;
    width: 64px;
    height: 64px;
    box-sizing: border-box;
}

.scenarioIcone svg {
    display: block;
    width: 100%;
    height: 100%;
}

/* Dans une carte du catalogue, l'icône se cale sur le padding du corps du bloc. */
.creerScenarioCarte .scenarioIcone {
    margin: 16px 20px 16px auto;
}

/* Page d'un scénario : description à gauche, icône à droite. */
.scenarioEntete {
    display: flex;
    align-items: flex-start;
    gap: var(--gapDefaut);
}

/*!***************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/55_sidebarEvenement.css ***!
  \***************************************************************************************************************************************/
/* ============================================
   SIDEBAR GESTION ÉVÉNEMENT
   ============================================ */

/* inutilisé 2026-06-13
#gestionEvenement {
    display: flex;
    min-height: calc(100vh - 60px);
}
*/

/* ============================================
   SIDEBAR
   ============================================ */

/* inutilisé 2026-06-13
#sidebarEvenement {
    width: 200px;
    min-width: 200px;
    background: var(--cBlanc02);
    border-right: var(--border);
    display: flex;
    flex-direction: column;
}

#sidebarEntete {
    padding: 20px 15px;
    border-bottom: var(--border);
}

#ctaSidebarRetour {
    font: var(--fMenu14);
    color: var(--cLink);
    display: block;
    margin-bottom: 10px;
}

#ctaSidebarRetour:hover {
    color: var(--cLinkh);
}

#sidebarTitre {
    font: var(--fH3);
    color: var(--cNoir1);
    margin: 0;
    word-break: break-word;
}
*/

/* ============================================
   MENU SIDEBAR
   ============================================ */

/* inutilisé 2026-06-13
#sidebarMenu {
    list-style: none;
    margin: 0;
    padding: 15px 0;
}

#sidebarMenu li {
    margin: 0;
}

#sidebarMenu a {
    display: block;
    padding: 12px 20px;
    font: var(--fMenu14);
    color: var(--cNoir2);
    border-left: 3px solid transparent;
    transition: background 0.15s, border-color 0.15s;
}

#sidebarMenu a:hover {
    background: var(--cBlanc03);
}

#sidebarMenu a.active {
    background: var(--cBlanc1);
    border-left-color: var(--cCta);
    color: var(--cCta);
    font-weight: 700;
}
*/

/* ============================================
   CONTENU PRINCIPAL
   ============================================ */

/* inutilisé 2026-06-13
#gestionContenu {
    flex: 1;
    padding: 30px 40px;
    background: var(--cBlanc1);
    overflow-y: auto;
}
*/

/* ============================================
   BLOC COULEURS (formulaire création)
   ============================================ */

.titreEvenement {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
}

/* Action de l'en-tête (engrenage config ou croix de fermeture) poussée tout à droite. */
.titreEvenementAction {
    margin-left: auto;
}

.btnConfigOnglets {
    display: inline-flex;
    width: 22px;
    height: 22px;
    color: var(--cNoir4);
    transition: color 0.2s;
}

.btnConfigOnglets:hover {
    color: var(--cNoir1);
}

.blocOnglets {
    margin: 15px 0;
}

/* Titre sans icône : padding explicite */
.titreFormulaireSansIcone {
    padding: 12px 20px;
}

.blocOngletsEntrees .svgCb {
    color: var(--cFondGroupes);
}

.blocOngletsExtras .svgCb {
    color: var(--cFondDistributions);
}

.blocCouleurs {
    margin: 15px 0;
}

.blocCouleurs > label {
    display: block;
    font: var(--fLabel);
    color: var(--cNoir3);
    margin-bottom: 8px;
}

.contenuCouleurs {
    display: flex;
    flex-wrap: wrap;
    gap: var(--gapLarge);
    align-items: flex-start;
}

.ligneCouleurs {
    display: flex;
    gap: var(--gapLarge);
}

.champCouleur {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: var(--gapReduit);
}

.champCouleur input[type="color"] {
    width: 50px;
    height: 40px;
}

.champCouleur span {
    font: var(--fLight14);
    color: var(--cNoir4);
}

/* Aperçu Configuration Fond */
#previsualisationConfigFond {
    min-height: 200px;
    margin: 20px;
    padding: var(--paddingCorps);
    background-color: var(--cBlanc03);
    background-size: cover;
    background-position: center;
    display: flex;
    align-items: center;
    justify-content: center;
}

#previsualisationConfigFondCarte {
    padding: 20px 28px;
    border-radius: var(--borderR1);
    display: flex;
    flex-direction: column;
    gap: var(--gapDefaut);
    min-width: 200px;
    transition: background-color 0.3s ease, background 0.3s ease, border 0.3s ease, box-shadow 0.3s ease;
}

#previsualisationTitreFond {
    font: var(--fH3);
    margin: 0;
}

#previsualisationTexteFond {
    font: var(--fText16);
    margin: 0;
}

/* ============================================
   ENTÊTE SECTION (bouton ajouter)
   ============================================ */

/* inutilisé 2026-06-13
.enteteSection {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: var(--gapLarge);
    margin-bottom: 20px;
}

.enteteSection h1 {
    margin: 0 0 5px;
}

.enteteSection p {
    margin: 0;
    color: var(--cNoir4);
}

.compteur {
    font: var(--fLight14);
    color: var(--cNoir4);
    margin: 0 0 20px;
}
*/

/* ============================================
   TABLE DE GESTION
   ============================================ */

/* inutilisé 2026-06-13
.tableGestion {
    width: 100%;
    border-collapse: collapse;
    background: var(--cBlanc);
    border: var(--border);
    border-radius: var(--borderR1);
}

.tableGestion th,
.tableGestion td {
    padding: 12px 15px;
    text-align: left;
    border-bottom: var(--border);
}

.tableGestion th {
    font: var(--fMenu14);
    color: var(--cNoir3);
    background: var(--cBlanc02);
}

.tableGestion tbody tr:last-child td {
    border-bottom: none;
}

.tableGestion tbody tr:hover {
    background: var(--cBlanc02);
}

.tableGestion .colActions {
    width: 100px;
    text-align: center;
}

.tableGestion .colNombre {
    width: 100px;
    text-align: center;
}

.tableGestion .epuise {
    color: var(--cRouge);
    font-weight: 700;
}
*/

/* Boutons icônes */
/* inutilisé 2026-06-13
.btnIcone {
    background: none;
    border: none;
    padding: 6px;
    cursor: pointer;
    color: var(--cNoir4);
    border-radius: var(--borderR1);
    transition: background 0.15s, color 0.15s;
}

.btnIcone:hover {
    background: var(--cBlanc03);
    color: var(--cNoir1);
}

.btnIcone svg {
    width: 18px;
    height: 18px;
    display: block;
}
*/

/* ============================================
   MODALE (dialog)
   ============================================ */

dialog {
    border: none;
    border-radius: var(--borderR2);
    box-shadow: 0 10px 40px var(--cOmbreForte);
    padding: 0;
    /* Pas de taille sur le sélecteur d'élément : elle contraindrait TOUS les
       <dialog> (la surcouche aperçu 16/9 du noyau y est passée). La taille est
       portée « en plus » par la classe de chaque modale — .modale : 500px
       (décision PO 2026-07-18). */
}

dialog::backdrop {
    background: var(--cOverlay);
}

dialog form {
    padding: 25px;
}

dialog h3 {
    margin: 0 0 20px;
    font: var(--fH3);
}

/* inutilisé 2026-06-13
.champFormulaire {
    margin-bottom: 15px;
}

.champFormulaire label {
    display: block;
    font: var(--fMenu14);
    color: var(--cNoir3);
    margin-bottom: 5px;
}

.champFormulaire input,
.champFormulaire textarea {
    width: 100%;
    padding: 10px 12px;
    font: var(--fText16);
    border: var(--border);
    border-radius: var(--borderR1);
    box-sizing: border-box;
}

.champFormulaire input:focus,
.champFormulaire textarea:focus {
    outline: none;
    border-color: var(--cCta);
}

.champFormulaire input[type="number"] {
    width: 100px;
}
*/

/* inutilisé 2026-06-13
.actionsModale {
    display: flex;
    justify-content: flex-end;
    gap: 10px;
    margin-top: 25px;
}
*/

/* ============================================
   RESPONSIVE
   ============================================ */

@media (max-width: 768px) {
    /* inutilisé 2026-06-13
    #gestionEvenement {
        flex-direction: column;
    }

    #sidebarEvenement {
        width: 100%;
        min-width: 100%;
        border-right: none;
        border-bottom: var(--border);
    }

    #sidebarMenu {
        display: flex;
        flex-wrap: wrap;
        padding: 10px;
        gap: 5px;
    }

    #sidebarMenu a {
        padding: 8px 12px;
        border-left: none;
        border-radius: var(--borderR1);
    }

    #sidebarMenu a.active {
        border-left: none;
        background: var(--cCta);
        color: var(--cCtat);
    }

    #gestionContenu {
        padding: 20px;
    }
    */

    /* Entête section responsive */
    /* inutilisé 2026-06-13
    .enteteSection {
        flex-direction: column;
        gap: 15px;
    }
    */

    /* Table responsive */
    /* inutilisé 2026-06-13
    .tableGestion {
        display: block;
        overflow-x: auto;
    }

    .tableGestion th,
    .tableGestion td {
        padding: 10px;
    }
    */
}

/*!*********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/55_evenements.css ***!
  \*********************************************************************************************************************************/
/* ============================================
   LISTE DES ÉVÉNEMENTS
   ============================================ */

/* Deux boutons de création côte à côte, au-dessus de la liste */
.barreCreationEvenement {
    display: flex;
    gap: var(--gapMoyen);
    margin-top: 30px;
}

/* Liste : un événement par ligne. Table = colonnes alignées sur toutes les lignes. */
.tableEvenements {
    width: 100%;
    border-collapse: collapse;
    margin-top: var(--gapLarge);
}

.tableEvenements th {
    font: var(--fMenu14);
    color: var(--cNoir3);
    text-align: left;
    padding: var(--gapMoyen) var(--gapLarge);
}

.tableEvenements td {
    padding: var(--gapMoyen) var(--gapLarge);
    border-top: var(--border);
    vertical-align: middle;
}

/* Survol : repère visuel de la ligne courante (pas une sélection) */
.tableEvenements tbody tr:hover {
    background: var(--cBlanc02);
}

/* Seule la colonne titre absorbe l'espace ; les autres se calent sur leur contenu */
.tableEvenements th:not(:first-child),
.tableEvenements td:not(:first-child) {
    width: 1%;
    white-space: nowrap;
}

/* Alignement : titre à gauche, Statut et Date centrés, Supprimer à droite */
.tableEvenements th:nth-child(2),
.tableEvenements td:nth-child(2),
.tableEvenements th:nth-child(3),
.tableEvenements td:nth-child(3) {
    text-align: center;
}

.tableEvenements th:last-child,
.tableEvenements td:last-child {
    text-align: right;
}

.ligneEvenementNom {
    font: var(--fH4);
    color: var(--cLink);
}

.ligneEvenementNom:hover {
    color: var(--cLinkh);
    text-decoration: underline;
}

.ligneEvenementDate {
    font: var(--fLight14);
    color: var(--cNoir3);
}

/* Actions de la ligne : Ouvrir / Supprimer, côte à côte, alignées à droite */
.ligneEvenementActions {
    display: flex;
    justify-content: flex-end;
    align-items: center;
    gap: var(--gapMoyen);
}

.lienOuvrirEvenement {
    font: var(--fText16);
    color: var(--cLink);
}

.lienOuvrirEvenement:hover {
    color: var(--cLinkh);
    text-decoration: underline;
}

/* Suppression : bouton d'un form POST, présenté comme un lien (pas de chrome natif) */
.lienSupprimerEvenement {
    background: none;
    border: none;
    padding: 0;
    font: var(--fText16);
    color: var(--cRouge);
    cursor: pointer;
}

.lienSupprimerEvenement:hover {
    text-decoration: underline;
}

/* Statut : Préparer / Tester / Diffuser (vocabulaire des onglets) */
.statutEvenement {
    display: inline-block;
    padding: var(--paddingEtiquette);
    border-radius: var(--borderR1);
    font: var(--fMenu14);
}

.statutPreparer {
    background: var(--cBlanc02);
    color: var(--cNoir3);
}

.statutTester {
    background: var(--cTest);
    color: var(--cTest3);
}

.statutDiffuser {
    background: var(--cSuccesFond);
    color: var(--cSuccesTexte);
}

/*!********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/56_rubriques.css ***!
  \********************************************************************************************************************************/
/* ============================================
   GRILLE DES GRANDES CATÉGORIES (étape 2 : créer depuis un scénario)
   Même patron que la grille des événements (55_evenements.css) : flex-wrap +
   cartes à largeur fixe, pas de grille étirée en 1fr. Dimensions et espacements
   pris sur les tokens du projet (largeur de carte 334px, gaps, bordure de carte).
   ============================================ */

#grilleRubriques {
    display: flex;
    flex-wrap: wrap;
    gap: var(--gapLarge);
    margin-top: 30px;
}

.carteRubrique {
    width: 334px;
    box-sizing: border-box;
    display: grid;
    grid-template-columns: 1fr auto;
    column-gap: var(--gapMoyen);
    row-gap: var(--gapDefaut);
    align-content: start;
    padding: var(--paddingCorps);
    background: var(--cBlanc);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    color: var(--cNoir1);
    transition: background-color 0.3s;
}

.carteRubrique:hover {
    background: var(--cBlanc02);
}

.carteRubriqueNom {
    grid-column: 1;
    grid-row: 1;
    align-self: center;
    margin: 0;
    font: var(--fH3);
}

.carteRubriqueAccroche {
    grid-column: 1 / -1;
    margin: 0;
    font: var(--fText16);
    color: var(--cNoir2);
}

/* Icône SVG inline (stroke: currentColor → colorée par la propriété color) */
.carteRubriqueIcone {
    grid-column: 2;
    grid-row: 1;
    align-self: center;
    color: var(--cCta);
}

.carteRubriqueIcone svg {
    width: 48px;
    height: 48px;
    display: block;
}

/*!******************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/55_filtres.css ***!
  \******************************************************************************************************************************/
/* ============================================
   FILTRES — composant commun (« une classe = un design »)

   ⚠️ COPIE ASSUMÉE — jumelle de studioVitrine/assets/vitrine/css/filtres.css.
   Identique au départ. Toute modification ici → demander au PO s'il faut la répercuter
   sur le jumeau vitrine. Les deux copies peuvent diverger selon les besoins de chaque côté
   (régie = outil connecté ; vitrine = funnel public, cachable, SEO).

   UN SEUL design de panneau de filtres pour toute la régie : catalogue
   « Créer à partir d'un scénario » et menu « Ajouter » (section Scenes).
   Les #id des panneaux (#divFiltreScenario, #divFiltreScene) ne servent
   qu'au TypeScript et aux réglages propres à une page — jamais au design.

   .divFiltreZone     la rangée : panneau à gauche, contenu filtré à droite
   .divFiltre         le panneau vertical de filtres
   .titreFiltre       titre du panneau
   .divFiltreGroupe   groupe de puces (+ .plie : replié, seuls les actifs restent visibles)
   .titreGroupeFiltre titre d'un groupe, cliquable (chevron), replie/déplie (pliageFiltres.ts)
   .filtre            la puce cliquable (+ .actif : fond gris + coche ✓ à droite)
   ============================================ */

.divFiltreZone {
    display: flex;
    gap: var(--gapListe); /* aligné 20 → 32px (décision PO 2026-07-18) */
    align-items: flex-start;
}

.divFiltre {
    flex: 0 0 280px;
    display: flex;
    flex-direction: column;
    gap: var(--gapDefaut);
    padding: var(--paddingCorps);
    background: var(--cBlanc02);
    border: var(--border);
    border-radius: var(--borderR2);
}

.titreFiltre {
    font: var(--fH4);
    color: var(--cNoir1);
    padding-bottom: var(--gapDefaut);
    border-bottom: var(--border);
}

.divFiltreGroupe {
    display: flex;
    flex-direction: column;
    gap: var(--gapReduit);
}

/* Titre de groupe : cliquable, replie/déplie son groupe (TS pliageFiltres.ts pose .plie) */
.titreGroupeFiltre {
    position: relative;
    font: var(--fLabel);
    color: var(--cNoir3);
    margin-top: var(--gapDefaut);
    padding-right: 18px; /* place du chevron */
    cursor: pointer;
    user-select: none;
}

.titreGroupeFiltre:hover {
    color: var(--cNoir1);
}

/* Chevron dessiné en CSS (aucune icône chevron n'existe dans l'appli) : ▾ ouvert, ▸ plié */
.titreGroupeFiltre::after {
    content: '';
    position: absolute;
    right: 4px;
    top: 50%;
    width: 7px;
    height: 7px;
    border-right: 2px solid currentColor;
    border-bottom: 2px solid currentColor;
    transform: translateY(-70%) rotate(45deg);
    transition: transform 0.2s;
}

.divFiltreGroupe.plie .titreGroupeFiltre::after {
    transform: translateY(-50%) rotate(-45deg);
}

/* Groupe plié : seuls les filtres actifs restent apparents */
.divFiltreGroupe.plie .filtre:not(.actif) {
    display: none;
}

/* La puce : du texte, pas un bouton — le contour et le fond bleu plein appartiennent aux cta */
.filtre {
    position: relative;
    padding: 6px 26px 6px 12px; /* place réservée à droite pour la coche : rien ne bouge à la sélection */
    background: transparent;
    border: none; /* neutralise l'habillage natif des puces <button> */
    border-radius: var(--borderR1);
    color: var(--cNoir2);
    font: var(--fMenu14);
    text-align: left;
    cursor: pointer;
    user-select: none;
    transition: background 0.15s, color 0.15s;
}

/* Actif = le fond du survol qui reste (--cBlanc03 : fond existant des boutons discrets) */
.filtre:hover,
.filtre.actif {
    background: var(--cBlanc03);
    color: var(--cNoir1);
}

.filtre.actif::after {
    content: '✓';
    position: absolute;
    right: 8px;
    top: 50%;
    transform: translateY(-50%);
    color: var(--cNoir1);
}

/* inutilisé 2026-07-18 — premier design de la puce (contour + fond bleu cta), abandonné :
   il parlait la langue des cta (décision PO, pas de git : on garde la trace)
.filtre {
    padding: 6px 12px;
    background: var(--cBlanc);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
}
.filtre:hover { border-color: var(--cCta); color: var(--cCta); }
.filtre.actif { background: var(--cCta); border-color: var(--cCta); color: var(--cCtat); }
.filtre.actif:hover { background: var(--cCtah); }
*/

/*!*****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/55_scenariosCatalogue.css ***!
  \*****************************************************************************************************************************************/
/* ============================================
   CRÉER À PARTIR D'UN SCÉNARIO — Catalogue + filtres

   ⚠️ COPIE ASSUMÉE — jumelle de studioVitrine/assets/vitrine/css/scenariosCatalogue.css.
   Identique au départ. Toute modification ici → demander au PO s'il faut la répercuter
   sur le jumeau vitrine. Les deux copies peuvent diverger selon les besoins de chaque côté
   (régie = outil connecté ; vitrine = funnel public, cachable, SEO).

   Namespace « creerScenario » exclusif à cette page. NE PAS réutiliser « brique »,
   qui appartient aux cartes du builder de scénario (assets/noyau/css/regie/56_scenario/).
   ============================================ */

.creerScenarioIntro {
    font: var(--fText16);
    color: var(--cNoir3);
    margin-top: var(--gapDefaut);
}

/* Le design du panneau de filtres vient du composant commun (55_filtres.css). */
#creerScenario {
    margin-top: 30px;
}

/* La liste des scénarios est longue : le panneau suit le défilement (propre à cette page). */
#divFiltreScenario {
    position: sticky;
    top: 20px;
}

/* Liste des scénarios */
#creerScenarioListe {
    flex: 1;
    min-width: 0;
    max-width: 800px;
    display: flex;
    flex-direction: column;
    gap: var(--gapListe);
}

/* La carte EST un bloc (composant commun, 53_blocs.css — décision PO 2026-07-18) :
   la classe ne sert plus qu'au filtrage TS et aux réglages propres à la page. */
.creerScenarioCarte {
    max-width: none; /* la liste (800px) commande, pas le clamp 600px du bloc */
}

/* inutilisé 2026-07-18 — tags retirés des cartes (doublon des filtres avec un autre design)
.creerScenarioCarteTags {
    display: flex;
    flex-wrap: wrap;
    gap: var(--gapReduit);
}

.creerScenarioCarteTag {
    padding: 3px 10px;
    background: var(--cBlanc02);
    border: var(--borderCarte);
    border-radius: var(--borderR2);
    color: var(--cNoir3);
    font: var(--fLabel);
    cursor: pointer;
    user-select: none;
    transition: border-color 0.2s, background 0.2s, color 0.2s;
}

.creerScenarioCarteTag:hover {
    border-color: var(--cCta);
    color: var(--cCta);
}

.creerScenarioCarteTag.actif {
    background: var(--cCta);
    border-color: var(--cCta);
    color: var(--cCtat);
}
*/

/* La colonne d'actions de la carte est la zone .blocActions du composant. */

/* Boutons de la carte : .ctaDiscret (56_scenario/_modale.css), Configurer puis
   Aperçu. Pas de primaire/secondaire ni de violet ici : dans une liste,
   chaque carte répète les mêmes boutons — cinquante primaires n'ont aucun sens
   (décision PO 2026-07-18). Le violet aperçu reste aux boutons solo (.ctaPreview). */

.creerScenarioVide {
    font: var(--fText16);
    color: var(--cNoir3);
}

/* Masquage par le filtre */
.creerScenarioMasque {
    display: none !important;
}

/*!***************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/55_scenarioModifier.css ***!
  \***************************************************************************************************************************************/
/* ============================================
   MODIFIER CE SCÉNARIO — Composition par famille

   Namespace « modifierScenario » exclusif à cette page. Le stepper et les détails
   Entrées/Sorties réutilisent les classes du récapitulatif (56_scenario/_recapitulatif.css) ;
   ici uniquement le carrousel de remplaçantes, les fiches et la barre d'actions.
   ============================================ */

#modifierScenario {
    margin-top: 30px;
}

/* Les blocs de la page sont des .bloc (composant commun 53_blocs.css, décision
   PO 2026-07-18) ; ici uniquement les réglages propres à la page. */
#modifierScenario .bloc {
    position: relative; /* ancre l'icône absolue .recapTitreIcone (héritée du récap) */
    max-width: none; /* les tuiles du carrousel dépassent le clamp 600px du bloc */
}

/* Classe et non id : un carrousel par bloc, répété dans la page. */
.divActionChangerScene {
    display: flex;
    align-items: center;
    gap: var(--gapReduit); /* le padding vient du blocCorps */
}

.actionChangerScene {
    flex: 0 0 auto;
    width: 36px;
    height: 104px; /* même hauteur que les tuiles */
    background: var(--cBlanc);
    border: var(--borderCta);
    border-radius: var(--borderR1);
    color: var(--cCtaTexte);
    font: var(--fMenu14);
    cursor: pointer;
    transition: border-color 0.2s, color 0.2s;
}

.actionChangerScene:hover:not(:disabled) {
    border-color: var(--cCta);
    color: var(--cCta);
}

.actionChangerScene:disabled {
    opacity: 0.35;
    cursor: default;
}

.modifierScenarioIcones {
    display: flex;
    gap: var(--gapReduit);
    overflow-x: auto;
    padding: 10px; /* laisse respirer le halo de sélection malgré l'overflow */
    /* 8,5 icônes visibles au maximum : la demi-icône coupée signale qu'il y a une suite */
    max-width: calc(104px * 8.5 + var(--gapReduit) * 8);
}

.modifierScenarioIcone {
    flex: 0 0 auto;
    width: 104px;
    height: 104px;
    display: flex;
    align-items: center;
    justify-content: center;
    background: var(--cBlanc);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    cursor: pointer;
    transition: border-color 0.2s, background 0.2s;
}

/* Survol d'une tuile non retenue : ton clair de la famille (~50 % du fond), aperçu de
   l'activation. Défaut = animation, .recapBlocAffichage sur le bloc bascule en affichage. */
.modifierScenarioIcone:not(.actif):hover {
    background: var(--cFondScenes0);
}

.recapBlocAffichage .modifierScenarioIcone:not(.actif):hover {
    background: var(--cFondAffichages0);
}

/* Tuile retenue : fond plein de la famille + bordure CTA nette et halo. */
.modifierScenarioIcone.actif {
    background: var(--cFondScenes);
    border-color: var(--cNoir1);
    box-shadow: 0 0 0 2px var(--cFormFocusHalo);
    border-width: 2px;
}

.recapBlocAffichage .modifierScenarioIcone.actif {
    background: var(--cFondAffichages);
}

.modifierScenarioIcone img {
    width: 84px;
    height: 84px;
}

.modifierScenarioFiche {
    display: none;
}

.modifierScenarioFiche.actif {
    display: block;
}

/* Barre d'action de la fiche : sépare le bouton du descriptif (un bouton nu
   collé au texte, décision PO 2026-07-18). */
.divActionFiche {
    margin-top: var(--gapDefaut);
}

/* Bloc sans remplaçante : l'icône absolue du récap (84px, haut-droit) recouvre le début
   du descriptif, on lui réserve la colonne de droite (le blocCorps fournit déjà 20px). */
#modifierScenario .bloc:not(.modifierScenarioBloc) .blocTexte {
    padding-right: 78px;
}

/* Alignés à gauche, comme toute barre d'action (décision PO 2026-07-18 : pas
   d'alignement qui varie d'une barre à l'autre). */
.divActionModifierScenario {
    display: flex;
    gap: var(--gapDefaut);
    margin-top: var(--paddingCorps);
}

/* « Créer cet événement » vit dans un <form> (il POSTe la composition `remplacer`).
   display:contents efface la boîte du form : le gap de la barre s'applique aux
   boutons eux-mêmes (même solution que le catalogue). */
.divActionModifierScenario form {
    display: contents;
}

/* « Créer cet événement » : seule action primaire de la page, silhouette commune
   .cta14 (31_cta.css) — ici uniquement les couleurs. « Aperçu » qui le
   suit est un .ctaDiscret neutre, le même que le catalogue (décision PO 2026-07-18). */
.ctaModifierScenarioCreer {
    background: var(--cCta);
    color: var(--cCtat);
}

.ctaModifierScenarioCreer:hover {
    background: var(--cCtah);
}

/*!*******************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/56_scenario/_etiquettes.css ***!
  \*******************************************************************************************************************************************/
/* ============================================
   ÉTIQUETTES - Marquage typographique
   ============================================

   Les étiquettes données par l'organisateur (animations, sorties, groupes)
   sont enveloppées dans .etiquetteMono par le filtre Twig `etiquetteHtml`.
   La chasse fixe les distingue des libellés du système (décision PO 2026-06-10).
*/

.etiquetteMono {
    font-family: var(--ffMono);
}

/* Marqueur d'une source provisoire, accolé à l'étiquette par le même filtre */
.etiquetteAConfigurer {
    font: var(--fLight14);
    color: var(--cRouge6);
}

.recapBlocDetail .etiquetteAConfigurer {
    color: unset;
}

/*!***************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/56_scenario/_grille.css ***!
  \***************************************************************************************************************************************/
/* ============================================
   SCÉNARIO - Grille de briques
   ============================================ */

#scenarioContainer {
    position: relative; /* Pour le SVG des lignes */
}

#scenarioGrille {
    display: flex;
    flex-wrap: wrap;
    gap: var(--gapLarge) var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
    margin-bottom: 30px;
}

/* SVG des lignes de connexion */
.scenarioLignesSvg {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    pointer-events: none; /* Ne bloque pas les clics */
    overflow: visible;
    z-index: 0; /* Derrière les briques */
}

.brique * {
    user-select: none;
}

body.isDragging,
body.isDragging * {
    cursor: grabbing !important;
}

/* Brique de base */
.brique {
    width: 162px;
    height: 100px;
    background: var(--cBlanc);
    border-radius: var(--borderR1);
    border: var(--borderCarte );
    cursor: pointer;
    position: relative;
    display: flex;
    flex-direction: column;
    justify-content: flex-start;
    align-items: flex-start;
    color: inherit;
    overflow: hidden;
    transition: box-shadow 0.2s;
}

.brique:hover {
    box-shadow: var(--ombrePortee);
}

/* Grille statique (page « Voir la config » des aperçus) : les briques se regardent, ne se cliquent pas */
.scenarioGrilleStatique .brique {
    cursor: default;
}

.brique.active {
    box-shadow: var(--ombrePortee);
}

/* Marqueur « à configurer » : même étoile rouge partout — sur la brique d’animation qui
   consomme une provisoire, et sur l'onglet où cette provisoire se configure
   (variante d'onglet dans _ongletMenu.css, avec .onglet). Le placement en coin est
   propre à la brique : ailleurs l'étoile suit le texte. */
.pastilleProvisoire {
    color: var(--cRouge6);
    font: var(--fAlerte16);
}

.brique .pastilleProvisoire {
    position: absolute;
    top: 4px;
    right: 82px;
}

/* Styles d'icônes : voir 54_icones.css */

.briqueConfig { background: var(--cFondConfig); }

.briqueTitre {
    font: var(--fMenu14);
    color: var(--cNoir1);
    padding: 8px 10px 0 10px;
    width: 100%;
    box-sizing: border-box;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}

/* inutilisé 2026-06-13
.briqueNombre {
    font: var(--fLight14);
    color: var(--cNoir3);
    padding: 2px 10px 10px 10px;
}
*/

/* Contrats animation (sous-ligne icônes + plages) */
.briqueContrats {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 2px;
    padding: 2px 10px 8px 10px;
    font: var(--fLight14);
    color: var(--cNoir3);
    width: 100%;
    box-sizing: border-box;
}

.contratScene {
    display: inline-flex;
    align-items: center;
    gap: 2px;
}

.contratScene svg {
    width: 12px;
    height: auto;
    flex-shrink: 0;
}

.contratPlage {
    font: var(--fLight14);
    font-size: 12px;
    color: var(--cNoir2);
}

/* Brique Ajouter (bouton + générique) */
.briqueAjouter {
    border-style: dashed;
    background: var(--cBlanc02);
    justify-content: center;
    align-items: center;
}

.briqueIconePlus {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    border: 1px dashed var(--cNoir4);
    display: flex;
    justify-content: center;
    align-items: center;
    font: var(--fH2);
    color: var(--cNoir4);
}

.briqueAjouter:hover .briqueIconePlus {
    color: var(--cCta);
    border-color: var(--cCta);
}

/* Brique + désactivée (quand menu affiché) */
.briqueAjouter.briqueAjouterActif {
    pointer-events: none;
    border-style: solid;
}

.briqueAjouterActif .briqueIconePlus {
    border-style: solid;
}

/* ============================================
   COULEURS BRIQUES AJOUTER (par section)
   Utilise des CSS custom properties locales
   ============================================ */

/* Définition des variables par section */
.briqueAjouterGroupes {
    --briqueFond: var(--cFondGroupes);
    --briqueBordure: var(--cFondGroupes2);
}

.briqueAjouterDistributions {
    --briqueFond: var(--cFondDistributions);
    --briqueBordure: var(--cFondDistributions2);
}

.briqueAjouterConfigurations {
    --briqueFond: var(--cFondConfig);
    --briqueBordure: var(--cFondConfig2);
}

.briqueAjouterAffichages {
    --briqueFond: var(--cFondAffichages);
    --briqueBordure: var(--cFondAffichages2);
}

.briqueAjouterScenes {
    --briqueFond: var(--cFondScenes);
    --briqueBordure: var(--cFondScenes2);
}

/* Styles communs utilisant les variables */
.briqueAjouter.briqueAjouterGroupes,
.briqueAjouter.briqueAjouterDistributions,
.briqueAjouter.briqueAjouterConfigurations,
.briqueAjouter.briqueAjouterAffichages,
.briqueAjouter.briqueAjouterScenes {
    background: var(--briqueFond);
    border-color: var(--briqueBordure);
}

.briqueAjouterGroupes .briqueIconePlus,
.briqueAjouterDistributions .briqueIconePlus,
.briqueAjouterConfigurations .briqueIconePlus,
.briqueAjouterAffichages .briqueIconePlus,
.briqueAjouterScenes .briqueIconePlus {
    color: var(--briqueBordure);
    border-color: var(--briqueBordure);
}

/*!********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/56_scenario/_formulaires.css ***!
  \********************************************************************************************************************************************/
/* ============================================
   ZONE FORMULAIRE (Turbo Frame)
   ============================================ */

#scenarioPanneau {
    margin: 20px 0;
    display: block;
    border-top: var(--borderCarte);
    padding: 20px 0;
}

/* ============================================
   PANNEAU - Classes génériques réutilisables
   ============================================ */

.panneauWrapper {
    display: flex;
    gap: var(--gapListe); /* aligné 30 → 32px (décision PO 2026-07-18) */
    align-items: stretch;
}

.panneauGauche {
    width: 600px;
    flex-shrink: 0;
}

.panneauAide {
    flex: 1;
    padding: 15px 20px;
    border: var(--borderCarte);
    border-radius: var(--borderR1);
}

.panneauAide h2:first-child,
.previewPresentationArticle h2:first-child {
    margin-top: 0;
}

.panneauAide h3 {
    margin: 40px 0 10px 0;
    font: var(--fH3);
}

.panneauAide p {
    margin: 10px 0;
    font: var(--fText16);
    color: var(--cNoir2);
}

.panneauAide strong,
.panneauAide b {
    font: var(--fText16Strong);
}

.panneauAide ul {
    margin: 10px 0;
    padding-left: 20px;
    list-style: disc;
}

.panneauAide li,
.fichierPrevisualisationListe li {
    margin: 5px 0;
    font: var(--fText16);
    color: var(--cNoir2);
}

/* Encadré générique d'aperçu d'un fichier importé (construit en JS, ex. import CSV). */
.fichierPrevisualisation {
    padding: 8px 12px;
    background: var(--cBlanc02);
    border-radius: var(--borderR1);
    border: var(--borderCarte);
}

.fichierPrevisualisation h4 {
    margin: 0 0 6px;
    font: var(--fH4);
}

/* Les <p> de l'aperçu ne sont pas enfants directs du form : on neutralise la marge
   par défaut du navigateur (sinon gros trou entre un titre de liste et sa liste). */
.fichierPrevisualisation p {
    margin: 0;
    font: var(--fText16);
    color: var(--cNoir2);
}

/* Bloc « titre + liste » : séparé du compteur, mais titre collé à sa liste (proximité). */
.fichierPrevisualisationListe {
    margin-top: 12px;
}

/* Lien « Utiliser un autre fichier » DANS l'encadré (comme le bouton des aperçus d'image). */
.fichierPrevisualisation .ctaSupprimer {
    margin-top: 8px;
}

.fichierPrevisualisationListe ul {
    margin: 2px 0 0;
    padding-left: 20px;
    list-style: disc;
}

.panneauAide button {
    font: unset;
    margin: 0;
    color: var(--cCta);
    padding: 0;
    background: none;
    border: none;
    cursor: pointer;
    transition: color 0.2s;
}

@media (max-width: 1000px) {
    .panneauWrapper {
        flex-direction: column;
    }

    .panneauGauche {
        width: 100%;
        max-width: 600px;
    }

    .panneauAide {
        width: 100%;
        max-width: 600px;
    }
}

.messageAide {
    color: var(--cNoir3);
}

.messageAide p {
    font: var(--fText16);
    margin: 5px 0;
    max-width: 600px;
}

/* ============================================
   BLOC ENCADRÉ - Style unifié pour les blocs
   dans les formulaires (lots, actualisation, etc.)

   Structure HTML obligatoire : form > div > .blocEncadre
   (le .blocEncadre doit être dans une div intermédiaire)
   ============================================ */

.blocEncadre {
    padding: 15px;
    margin-bottom: 15px;
    box-shadow: var(--ombreInterne);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
}

.blocEncadre .vignetteImageExistante {
    background: var(--cBlanc02);
    box-shadow: none;
}

.blocEncadre > :first-child {
    margin-top: 0;
}

.blocEncadre > :last-child {
    margin-bottom: 0;
}

.blocEncadre > div {
    padding: 0 0 20px;
}

/* Titre du formulaire avec icône et couleur */
.titreFormulaire {
    position: relative;
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    width: 100%;
    margin: 0 0 40px 0;
    font: var(--fH3);
    box-sizing: border-box;
}

.titreFormulaire:has(+ .sousTitreFormulaire) {
    margin-bottom: 8px;
}

.sousTitreFormulaire {
    margin: 20px 0 30px 0;
    font: var(--fText16);
    color: var(--cNoir3);
}

.titreIcone {
    width: 40px;
    height: 40px;
    padding: 6px;
    border-radius: var(--borderR1);
    box-sizing: border-box;
}

/* ============================================
   VARIANTES DE COULEURS DES TITRES FORMULAIRES
   Utilise des CSS custom properties locales
   ============================================ */

/* Variables locales pour le titre et son icône (éléments enfants) */
.titreConfig,
.titreConfigurations {
    --titreFond: var(--cFondConfig);
    --titreIconeFond: var(--cFondConfig);
}

.titreGroupes {
    --titreFond: var(--cFondGroupes);
    --titreIconeFond: var(--cFondGroupes);
}

.titreDistributions {
    --titreFond: var(--cFondDistributions);
    --titreIconeFond: var(--cFondDistributions);
}

.titreScenes {
    --titreFond: var(--cFondScenes);
    --titreIconeFond: var(--cFondScenes);
}

.titreAffichages {
    --titreFond: var(--cFondAffichages);
    --titreIconeFond: var(--cFondAffichages);
}

/* Styles communs utilisant les variables locales */
.titreConfig,
.titreConfigurations,
.titreGroupes,
.titreDistributions,
.titreScenes,
.titreAffichages {
    background: var(--titreFond);
}

.titreConfig .titreIcone,
.titreConfigurations .titreIcone,
.titreGroupes .titreIcone,
.titreDistributions .titreIcone,
.titreScenes .titreIcone,
.titreAffichages .titreIcone {
    background: var(--titreIconeFond);
}

.panneauFormulaire .ctaValider {
    margin-top: 0;
    padding: 10px 40px;
    width: auto;
}

.panneauFormulaire .ctaValider:disabled {
    cursor: auto;
}

/* ============================================
   COULEURS PAR CATÉGORIE (.divConfig, .divGroupes, etc.)
   Classe ajoutée sur .panneauFormulaire par _baseCreate/_baseEdit
   ============================================ */

/* Bouton valider - Config */
.divConfig .ctaValider,
.divConfigurations .ctaValider {
    background: var(--cFondConfig_a);
}
.divConfig .ctaValider:hover,
.divConfigurations .ctaValider:hover {
    background: var(--cFondConfig_ah);
}

/* Bouton valider - Participants */
.divGroupes .ctaValider {
    background: var(--cFondGroupes_a);
}
.divGroupes .ctaValider:hover {
    background: var(--cFondGroupes_ah);
}

/* Bouton valider - Lots */
.divDistributions .ctaValider {
    background: var(--cFondDistributions_a);
}
.divDistributions .ctaValider:hover {
    background: var(--cFondDistributions_ah);
}

/* Bouton valider - Scenes */
.divScenes .ctaValider {
    background: var(--cFondScenes_a);
}
.divScenes .ctaValider:hover {
    background: var(--cFondScenes_ah);
}

/* Bouton valider - Affichages */
.divAffichages .ctaValider {
    background: var(--cFondAffichages_a);
}
.divAffichages .ctaValider:hover {
    background: var(--cFondAffichages_ah);
}

/* Focus des champs - Config */
.divConfig input:focus,
.divConfig textarea:focus,
.divConfigurations input:focus,
.divConfigurations textarea:focus {
    border-color: var(--cFondConfig4);
    outline-color: var(--cFondConfig4);
}

/* Focus des champs - Participants */
.divGroupes input:focus,
.divGroupes textarea:focus {
    border-color: var(--cFondGroupes4);
    outline-color: var(--cFondGroupes4);
}

/* Focus des champs - Lots */
.divDistributions input:focus,
.divDistributions textarea:focus {
    border-color: var(--cFondDistributions4);
    outline-color: var(--cFondDistributions4);
}

/* Focus des champs - Scenes */
.divScenes input:focus,
.divScenes textarea:focus {
    border-color: var(--cFondScenes4);
    outline-color: var(--cFondScenes4);
}

/* Focus des champs - Affichages */
.divAffichages input:focus,
.divAffichages textarea:focus {
    border-color: var(--cFondAffichages4);
    outline-color: var(--cFondAffichages4);
}

/* Textes d'aide - Config */
.divConfig .help-text,
.divConfig .facultatif,
.divConfigurations .help-text,
.divConfigurations .facultatif {
    color: var(--cFondConfig4);
}

/* Label principal d'un groupe (radio / champ) dans les formulaires de config = titre */
.divConfig > div > label:first-child {
    display: block;
    margin-bottom: 10px;
    font: var(--fText16Strong);
}

/* Textes d'aide - Participants */
.divGroupes .help-text,
.divGroupes .facultatif {
    color: var(--cFondGroupes4);
}

/* Textes d'aide - Lots */
.divDistributions .help-text,
.divDistributions .facultatif {
    color: var(--cFondDistributions4);
}

/* Textes d'aide - Scenes : pas de couleur thématique, reste gris par défaut */

/* Groupe radio pour les slots de distribution */

.radioDistributionOptions {
    display: flex;
    flex-direction: column;
    gap: var(--gapDefaut);
}

.radioDistributionOptions .divRb {
    margin: 0;
}

/* ============================================
   CHAMP NOM REPLIABLE
   ============================================ */

.champEtiquette {
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

.champEtiquetteValeur {
    color: var(--cNoir2);
}

.champEtiquetteEditer {
    background: none;
    border: none;
    cursor: pointer;
    padding: 0.2rem;
    color: var(--cNoir2);
    transition: opacity 0.2s;
}

.champEtiquetteEditer:hover {
    opacity: 0.6;
}

.champEtiquette .masque {
    display: none;
}

.champEtiquetteChamp {
    flex: 1;
}

.radioDistributionOptions .divRb label {
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
}

/* Checkboxes et radios - Config */
.divConfig .svgCb,
.divConfig .svgRb,
.divConfigurations .svgCb,
.divConfigurations .svgRb {
    color: var(--cFondConfig);
}

/* Checkboxes et radios - Participants */
.divGroupes .svgCb,
.divGroupes .svgRb {
    color: var(--cFondGroupes);
}

/* Checkboxes et radios - Lots */
.divDistributions .svgCb,
.divDistributions .svgRb {
    color: var(--cFondDistributions);
}

/* Checkboxes et radios - Scenes */
.divScenes .svgCb,
.divScenes .svgRb {
    color: var(--cFondScenes);
}

/* Checkboxes et radios - Affichages */
.divAffichages .svgCb,
.divAffichages .svgRb {
    color: var(--cFondAffichages);
}

/* Dans un formulaire animation, les sections participants/lots gardent leur propre couleur */
.sectionAnimGroupes .svgCb,
.sectionAnimGroupes .svgRb { color: var(--cFondGroupes); }
.sectionAnimLots .svgCb,
.sectionAnimLots .svgRb { color: var(--cFondDistributions); }

/* Sections colorées dans les formulaires d'animation */
.panneauFormulaire form > .sectionAnimGroupes {
    margin: 20px 0;
}

/* Bouton file input - Config */
.divConfig input[type="file"]::file-selector-button,
.divConfigurations input[type="file"]::file-selector-button {
    background: var(--cFondConfig_a);
}
.divConfig input[type="file"]::file-selector-button:hover,
.divConfigurations input[type="file"]::file-selector-button:hover {
    background: var(--cFondConfig_ah);
}

/* Bouton file input - Participants */
.divGroupes input[type="file"]::file-selector-button {
    background: var(--cFondGroupes_a);
}
.divGroupes input[type="file"]::file-selector-button:hover {
    background: var(--cFondGroupes_ah);
}

/* Bouton file input - Lots */
.divDistributions input[type="file"]::file-selector-button {
    background: var(--cFondDistributions_a);
}
.divDistributions input[type="file"]::file-selector-button:hover {
    background: var(--cFondDistributions_ah);
}

/* Bouton file input - Scenes */
.divScenes input[type="file"]::file-selector-button {
    background: var(--cFondScenes_a);
}
.divScenes input[type="file"]::file-selector-button:hover {
    background: var(--cFondScenes_ah);
}

/* Bouton file input - Affichages */
.divAffichages input[type="file"]::file-selector-button {
    background: var(--cFondAffichages_a);
}
.divAffichages input[type="file"]::file-selector-button:hover {
    background: var(--cFondAffichages_ah);
}

/* Panneau formulaire : un seul form OU plusieurs .contenu */
.panneauGaucheFlex,
.panneauFormulaire {
    display: flex;
    flex-direction: column;
    gap: var(--gapListe);
}

/* form pour les formulaires, .blocContenu pour les blocs d'information */
.panneauFormulaire form,
.panneauFormulaire .blocContenu,
.panneauGaucheFlex .blocContenu {
    margin: 0;
    border: var(--borderCarte );
    border-radius: var(--borderR1);
    overflow: hidden;
}

.panneauFormulaire .blocContenu,
.panneauGaucheFlex .blocContenu {
    padding-bottom: 20px;
}

/* Bloc contenu en mode test (style violet) */
.blocContenuTest .titreFormulaire {
    --titreFond: var(--cTest);
    --titreIconeFond: var(--cTest2);
}

.panneauFormulaire .divCb,
.panneauGaucheFlex .divCb {
    margin: 0 0 20px;
}

.panneauFormulaire form > h4,
.panneauFormulaire .blocContenu > h4,
.panneauGaucheFlex .blocContenu > h4 {
    margin-top: 20px;
    padding: 0 20px;
}

.panneauFormulaire form > div,
.panneauFormulaire .blocContenu > div,
.panneauGaucheFlex .blocContenu > div,
.panneauFormulaire form > p,
.panneauFormulaire .blocContenu > p,
.panneauGaucheFlex .blocContenu > p {
    padding: 0 20px;
}

/* ============================================
   SECTIONS CANONIQUES (formulaires d'animation)
   Une section = un conteneur .sectionFormulaire qui porte son <h4>,
   ses champs (aide comprise) et ses sous-groupes. Le padding horizontal
   vient du contrat form > div ci-dessus ; ici, le rythme interne.
   Registre : animations/_partage/sections.json
   ============================================ */

.panneauFormulaire form > div.sectionFormulaire {
    margin-bottom: 25px;
}

.sectionFormulaire > h4 {
    margin: 0 0 12px;
}

.sectionFormulaire > div {
    margin-bottom: 12px;
}

.sectionFormulaire > :last-child {
    margin-bottom: 0;
}

/* Liste à puces dans un bloc d'information : le reset global (00_reset) retire les puces */
.panneauFormulaire .blocContenu ul {
    margin: 0 0 15px;
    padding-inline-start: 40px;
    list-style: disc;
}

.panneauFormulaire .blocContenu li {
    margin: 5px 0;
}

/* Le <hr> séparateur s'aligne sur le retrait horizontal des champs (20px) au lieu de couper toute la largeur */
.panneauFormulaire form > hr {
    margin-left: 20px;
    margin-right: 20px;
}

.panneauFormulaire form > div,
.espaceForm > div {
    margin-bottom: 15px;
}

.tableauPrevisualisation {
    width: 100%;
    border-collapse: collapse;
    margin-top: 20px;
    font: var(--fLabel);
}

.tableauPrevisualisation th,
.tableauPrevisualisation td {
    padding: 4px 8px;
    border: var(--border);
    text-align: left;
}

.tableauPrevisualisation th {
    background: var(--cBlanc02);
    font: var(--fLabel);
}

.tableauPrevisualisation .separateurPrevisualisation td {
    text-align: center;
    border: none;
    color: var(--cNoir3);
}

/* Toggle avec label — classes de base (déplacées depuis _modale.css) */
.toggleAvecLabel {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    width: 100%;
    margin: 8px 0;
    cursor: pointer;
}

.toggleLabel {
    font: var(--fMenu14);
    color: var(--cNoir2);
}

/* Toggle désactivé (bloqué) */
.toggleDisabled {
    opacity: 0.4;
    filter: grayscale(1);
    cursor: auto;
    pointer-events: none;
}

/* pointer-events:none rend le toggle transparent au survol : sans ça le cursor:pointer du label reprend la main sur toute la ligne */
.toggleAvecLabel:has(.toggleDisabled) {
    cursor: auto;
}

/* inutilisé 2026-06-14 : paramètre 'message' du toggle jamais passé par aucun appelant ; rendait un texte ROUGE d'alerte alors que décrit comme « explicatif » (ADR vérificationDocumentation, cas réel n°5)
.toggleMessage {
    font: var(--fLight14);
    color: var(--cRouge);
}
*/

.panneauFormulaire .toggleAvecLabel {
    justify-content: space-between;
}

.panneauFormulaire form .toggleAvecLabel {
    justify-content: flex-end;
    flex-direction: row-reverse;
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
}

/* Ligne toggle du thème de formulaire (div.ligneToggle > label + aide) : le conteneur
   porte l'espacement de ligne, le toggle n'a plus de marge propre. Les toggles écrits
   à la main (slots de sources) gardent leur margin 8px pour s'espacer entre eux. */
.ligneToggle > .toggleAvecLabel {
    margin: 0;
}

.panneauFormulaire .formActions {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
    padding: 10px 20px;
    padding-bottom: 0;
}
/* ctaAnnuler dans le panneau : pas de margin (le noyau met 20px, inutile ici) */
.panneauFormulaire .formActions > .ctaAnnuler {
    margin: 0;
}

/* Le style des alertes (couleurs, police, padding) vient du noyau (42_auth.css) :
   ici uniquement l'alignement sur le padding latéral du formulaire */
.panneauFormulaire .alertErreur {
    margin: 0 20px 10px;
}

.panneauFormulaire .alertErreur li {
    color: inherit;
}

.panneauFormulaire .alertErreur ul {
    margin: 6px 0 0;
    padding-left: 20px;
    list-style: disc;
}

.panneauFormulaire form > div .alertErreur {
    margin: 0 0 10px;
}

.panneauFormulaire .formActions .alertErreur {
    margin: 0;
    width: 100%;
}

.panneauFormulaire .ctaAnnuler:hover {
    text-decoration: underline;
}

/* Bouton « Remplacer par une animation similaire » : ouvre la popup des jumelles de famille
   (pas une action réelle, contrairement à Annuler/Supprimer ou Modifier voisins). Présent dans
   le formulaire d'édition ET le panneau récap (d'où .panneauGauche, leur parent commun). Même
   police et même couleur qu'Annuler/Modifier (cf. noyau 31_cta.css) : seules les actions
   marquées (Supprimer) gardent une couleur. */
.panneauGauche .lienSimilaires {
    margin: 0;
    padding: 0;
    border: none;
    background: none;
    font: var(--fText16);
    color: var(--cNoir3);
    cursor: pointer;
}

.panneauGauche .lienSimilaires:hover {
    text-decoration: underline;
}


div .ctaSupprimer {
    width: auto;
    height: auto;
    margin: 0;
    padding: 0;
    font: var(--fText16);
    color: var(--cRouge);
    background: transparent;
    border: none;
    border-radius: 0;
    cursor: pointer;
}

div .ctaSupprimer:hover {
    text-decoration: underline;
}

div .ctaSupprimerConfirm {
    position: relative;
    isolation: isolate;
    color: var(--cBlanc);
    background: transparent;
    margin-left: 10px;
}

div .ctaSupprimerConfirm::before {
    content: '';
    position: absolute;
    inset: -5px -12px;
    background: var(--cRouge);
    border-radius: var(--borderR1);
    z-index: -1;
    animation: confirmBgGrow 0.2s ease-out forwards;
}

@keyframes confirmBgGrow {
    from {
        transform: scale(0.7);
        opacity: 0;
    }
    to {
        transform: scale(1);
        opacity: 1;
    }
}

div .ctaSupprimerDesactive {
    opacity: 0.4;
    cursor: auto;
}

div .ctaSupprimer.hidden {
    display: none;
}

/* Champ enfant dépendant d'un autre champ (checkbox parent)
   Utilisé avec data-toggle-enfant sur le parent et classe champEnfant sur l'enfant */
.champEnfant {
    transition: 0.2s;
}

.champEnfant.inactif {
    opacity: 0.4;
    filter: grayscale(1);
    pointer-events: none;
    cursor: auto;
}

.divDistributionMode .champEnfant.inactif {
    display: none;
}

/* Séparateur discret avec texte centré (utilisé dans les slots d'entrées) */
.separateurDiscret {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    margin: 6px 0;
    color: var(--cNoir3);
    font: var(--fLight14);
}

.separateurDiscret::before,
.separateurDiscret::after {
    content: '';
    flex: 1;
    border-top: 1px solid var(--cBlanc03);
}

/* ============================================
   CONTRAT ANIMATION — VERSION DÉTAILLÉE
   ============================================ */

.contratsDetail {
    display: flex;
    flex-direction: column;
    gap: var(--gapReduit);
    padding: 10px 0;
    font: var(--fText16);
    color: var(--cNoir2);
}

.contratDetailLigne {
    display: flex;

    flex-wrap: wrap;
    align-items: center;
    gap: var(--gapDefaut);
}

.contratDetailElement {
    display: inline-flex;
    align-items: center;
    gap: var(--gapDefaut); /* aligné 5 -> 8px (échelle PO 2026-07-18) */
}

.contratDetailIcone svg {
    width: 22px;
    height: auto;
    display: block;
}

.contratDetailLabel {
    color: var(--cNoir3);
}

.contratDetailFleche {
    display: inline-flex;
    align-items: center;
}

.contratDetailFleche svg {
    width: 18px;
    height: auto;
    display: block;
    color: var(--cNoir3);
}

/* Bouton fermer le panneau formulaire */
.panneauClose {
    position: absolute;
    top: 50%;
    right: 5px;
    transform: translateY(-50%);
}

/* ============================================
   ENTRÉES GROUPES (groupes dans les animations)
   Utilise .blocEncadre comme base de design
   ============================================ */

.entreeGroupeHeader {
    margin-bottom: 10px;
}

.entreeGroupeHeader .entreeNumero {
    font: var(--fH4);
}

/* Groupe de champs en grille (option "colonnes" de form.json) : N champs par ligne.
   Surclasse le display:flex de .blocVertical ; le showIf bascule style.display (none/'') par-dessus. */
.panneauFormulaire form > div.blocVertical.champsGrille,
.sectionFormulaire > div.blocVertical.champsGrille {
    display: grid;
    gap: var(--gapDefaut) var(--gapLarge); /* aligné 6->8, 16->20px (échelle PO 2026-07-18) */
    /* Les labels n'ont pas tous la même hauteur : caler par le bas aligne les inputs d'une rangée */
    align-items: end;
}

/* Intertitre de rangée d'une grille (option "titresLignes" de form.json, ex. « Palier 1 ») */
.grilleLigneTitre {
    grid-column: 1 / -1;
    margin-top: 10px;
    color: var(--cNoir3);
    font: var(--fH4);
}

.champsGrille .grilleLigneTitre:first-child {
    margin-top: 0;
}

.panneauFormulaire form > div.blocVertical.champsGrille[data-colonnes="3"],
.sectionFormulaire > div.blocVertical.champsGrille[data-colonnes="3"] {
    grid-template-columns: repeat(3, 1fr);
}

/* Note d'aide d'un groupe (option "aide" de form.json) : pleine largeur, sous les champs. */
.grilleAide {
    display: block;
}

.champsGrille .grilleAide {
    grid-column: 1 / -1;
}

/*!*******************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/56_scenario/_ongletMenu.css ***!
  \*******************************************************************************************************************************************/
/* ============================================
   TOGGLE MENU - Classe de base réutilisable
   Scene slide fluide entre les onglets
   ============================================ */

.divOngletMenu {
    display: flex;
    position: relative;
    gap: var(--gapReduit);
    margin-bottom: 20px;
    padding: 0;
    background: var(--cBlanc02);
    border-radius: var(--borderR1);
    width: fit-content;
    max-width: 100%;
    overflow-x: auto;
}

/* Indicateur qui slide — pas de couleur par défaut, chaque onglet a sa classe couleur */
.indicateurOnglet {
    position: absolute;
    top: 0;
    bottom: 0;
    background: transparent;
    transition: left 0.35s cubic-bezier(0.4, 0, 0.2, 1),
    width 0.35s cubic-bezier(0.4, 0, 0.2, 1),
    background 0.35s ease;
    z-index: 0;
    pointer-events: none;
}

/* Couleurs de l'indicateur par type */
.indicateurOnglet.indicateurOngletGroupes,
.indicateurOnglet.indicateurOngletEquipes,
.indicateurOnglet.indicateurOngletNumeros,
.indicateurOnglet.indicateurOngletBorne,
.indicateurOnglet.indicateurOngletQrCode,
.indicateurOnglet.indicateurOngletWebForm {
    background: var(--cFondGroupes_a);
}

.indicateurOnglet.indicateurOngletDistributions {
    background: var(--cFondDistributions_a);
}

.indicateurOnglet.indicateurOngletApparence,
.indicateurOnglet.indicateurOngletConfigurations {
    background: var(--cFondConfig_a);
}

.indicateurOnglet.indicateurOngletAffichages {
    background: var(--cFondAffichages_a);
}

.indicateurOnglet.indicateurOngletScenes,
.indicateurOnglet.indicateurOngletScenario {
    background: var(--cFondScenes_a);
}

[data-mode="tester"] .indicateurOnglet.indicateurOngletParticipants,
[data-mode="tester"] .indicateurOnglet.indicateurOngletEquipes,
[data-mode="tester"] .indicateurOnglet.indicateurOngletDiffusion,
[data-mode="tester"] .indicateurOnglet.indicateurOngletProgression,
[data-mode="tester"] .indicateurOnglet.indicateurOngletQrCode {
    background: var(--cTest3);
}

.indicateurOnglet.indicateurOngletRegie,
.indicateurOnglet.indicateurOngletRecapitulatif,
[data-mode="diffuser"] .indicateurOnglet.indicateurOngletDiffusion,
[data-mode="diffuser"] .indicateurOnglet.indicateurOngletProgression,
.indicateurOnglet.indicateurOngletResultats,
.indicateurOnglet.indicateurOngletPublication,
[data-mode="diffuser"] .indicateurOnglet.indicateurOngletParticipants,
[data-mode="diffuser"] .indicateurOnglet.indicateurOngletEquipes {
    background: var(--cCta);
}

/* Mode Configurer : tous les sous-onglets partagent la couleur Config — pas besoin d'enrichir ONGLETS_COLORES. */
[data-mode="config"] .indicateurOnglet {
    background: var(--cFondConfig_a);
}

/* Switch Configurer / Tester / Diffuser */
#divOngletModeWrapper {
    position: relative;
}

#divOngletMode {
    display: flex;
    margin-bottom: 20px;
    border-bottom: 1px solid var(--cNoir1);
    overflow: hidden;
}

#divOngletMode .ongletMode {
    padding: 8px 18px;
    font: var(--fMenu14);
    color: var(--cNoir3);
    background: transparent;
    user-select: none;
}

#divOngletMode .ongletMode.actif {
    color: var(--cBlanc1);
    background: var(--cLink);
    cursor: default;
    pointer-events: none;
}

#divOngletMode .ongletMode:nth-child(2).actif {
    background: var(--cTest3);
}

#divOngletMode .ongletMode.desactive {
    color: var(--cNoir5);
}

/* Onglet Supprimer : rouge (action destructive), comme le lien Supprimer de la liste */
#divOngletMode .ongletMode[data-mode="supprimer"].actif {
    color: var(--cBlanc1);
    background: var(--cRouge6);
}

/* Rappel de l'icône engrenage du titre dans l'onglet Configurer */
#divOngletMode .ongletMode[data-mode="config"] {
    display: inline-flex;
    align-items: center;
    gap: var(--gapDefaut); /* aligné 7 -> 8px (échelle PO 2026-07-18) */
}

#divOngletMode .ongletMode[data-mode="config"] svg {
    width: 16px;
    height: 16px;
}

/* Alerte redirection (test/diffusion en cours) */
.alerteRedirection {
    position: absolute;
    left: 0;
    right: 0;
    background: var(--cRouge);
    color: var(--cBlanc);
    font: var(--fCta16);
    padding: 12px 30px;
    text-align: center;
    border-radius: var(--borderR1);
    box-shadow: var(--ombrePortee);
    z-index: 10;
    animation: alerteApparition 0.3s ease;
}

@keyframes alerteApparition {
    from {
        opacity: 0;
        transform: translateY(-10px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

/* Boutons */
.onglet {
    position: relative;
    z-index: 1;
    padding: 10px 20px;
    border: none;
    font: var(--fMenu14);
    cursor: pointer;
    background: transparent;
    color: var(--cNoir2);
    user-select: none;
}

/* Étoile de rappel « à configurer » (classe définie dans _grille.css) : hors flux comme sur
   la brique, sinon ses 20px grandiraient la ligne de l'onglet, qui est en 14px — et seuls
   les onglets étoilés deviendraient plus hauts que leurs voisins. Elle se pose dans le
   padding droit de l'onglet, jamais par-dessus le libellé. */
.onglet .pastilleProvisoire {
    position: absolute;
    top: 0;
    right: 6px;
}

.onglet.actif .pastilleProvisoire {
    color: var(--cBlanc1);
    opacity: .5;
}

.onglet:hover:not(.actif) {
    color: var(--cNoir1);
}

.onglet.actif {
    color: var(--cBlanc1);
    cursor: default;
}

/* Masquer les toggles section non pertinents */
.divOngletMenu.masque {
    display: none;
}

/* Masquer les boutons individuels non pertinents */
.onglet.masque {
    display: none;
}

/* Responsive */
@media (max-width: 999px) {
    #divOngletSections {
        display: none;
    }
}

@media (max-width: 600px) {
    .onglet {
        flex-shrink: 0;
        white-space: nowrap;
    }
}

/*!********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/56_scenario/_menuAjouter.css ***!
  \********************************************************************************************************************************************/
/* ============================================
   MENU AJOUTER (Choix d'élément à créer)
   ============================================ */

.menuAjouter h3 {
    margin: 0 0 20px 0;
    font: var(--fH3);
}

.ligneSections {
    display: flex;
    flex-wrap: wrap;
    gap: 0 182px; /* Vertical: 0 (géré par margin-bottom) | Horizontal: largeur d'une brique */
}

.ligneSections .sectionAjouter {
    flex: 0 0 auto; /* Ne pas étirer, garder la taille naturelle */
}

.sectionAjouter {
    margin-bottom: 25px;
}

/* Masquage initial pour éviter le flash (desktop uniquement) */
@media (min-width: 1000px) {
    .sectionAjouter[data-section] {
        display: none;
    }

    .sectionAjouter[data-section].visible {
        display: block;
    }
}

.sectionAjouter h4 {
    margin: 0 0 10px 0;
    font: var(--fMenu14);
    color: var(--cNoir3);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.sectionAjouter h4::before {
    content: "+ ";
}

.briquesAjouter {
    display: flex;
    flex-wrap: wrap;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
}

.briqueGroupes::before {
    color: var(--cFondGroupes2);
}

.briqueDistributions::before {
    color: var(--cFondDistributions2);
}

.briqueConfigurations::before {
    color: var(--cFondConfig2);
}

.briqueAffichages::before {
    color: var(--cFondAffichages2);
}

.briqueScenes::before {
    color: var(--cFondScenes2);
}

.brique.briqueDistributions,
.brique.briqueGroupes {
    border-radius: var(--borderR1);
}

/* Filtre par tags et entrées dans la section Scenes :
   le design du panneau vient du composant commun (55_filtres.css). */

.divFiltreZone .briquesAjouter {
    flex: 1;
    min-width: 0;
}

.briqueScenes.masque {
    display: none;
}

.briqueGroupes {
    background: var(--cFondGroupes);
}

.briqueDistributions {
    background: var(--cFondDistributions);
}

.briqueConfigurations {
    background: var(--cFondConfig);
}

.briqueAffichages {
    background: var(--cFondAffichages);
}

.briqueScenes {
    background: var(--cFondScenes);
}

/*!************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/56_scenario/_briquesCouleurs.css ***!
  \************************************************************************************************************************************************/
/* ============================================
   BRIQUES DU SCÉNARIO PAR TYPE
   ============================================ */

/* Brique Brouillon (en cours de création) */
.briqueBrouillon {
    opacity: 0.7;
    border-style: dashed;
}

/* Couleurs des briques du scénario par type */
.brique.briqueGroupes { background: var(--cFondGroupes); }
.brique.briqueDistributions { background: var(--cFondDistributions); }
.brique.briqueConfigurations { background: var(--cFondConfig); }
.brique.briqueAffichages { background: var(--cFondAffichages); }
.brique.briqueScenes { background: var(--cFondScenes); }

/*!*****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/56_scenario/_dragDrop.css ***!
  \*****************************************************************************************************************************************/
/* ============================================
   DRAG & DROP
   ============================================ */

.handleDrag {
    position: absolute;
    top: 6px;
    right: 6px;
    width: 18px;
    height: 12px;
    color: var(--cNoir3);
    opacity: 0.4;
    transition: opacity 0.2s;
}

.handleDrag:hover {
    opacity: 1;
    cursor: grab;
}

.handleDrag:active {
    cursor: grabbing;
}

/* Grille statique (page « Voir la config » des aperçus) : la poignée reste un repère visuel, sans affordance de drag */
.scenarioGrilleStatique .handleDrag:hover {
    opacity: 0.4;
    cursor: default;
}

/* État pendant le drag */
.briqueDraggable.dragging {
    opacity: 0.5;
    border-style: dashed;
    cursor: grabbing;
}

/* Zone de drop */
#scenarioGrille.formulaireActif:hover .brique.dragOver,
.brique.dragOver {
    box-shadow: -4px -4px 0 var(--cCta);
    transform: translate(4px, 4px) scale(1);
    transition: .5s ease;
}

/* Scene FLIP au drop */
.brique.animeDrop {
    transition: transform 0.25s ease;
}

/* Fantôme pendant le drag */
.dragFantome {
    opacity: 0.9;
    box-shadow: var(--ombrePortee);
    cursor: grabbing;
}

/*!****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/composants/boutonFermeture.css ***!
  \****************************************************************************************************************************************/
/* ============================================
   BOUTON DE FERMETURE (.modaleClose) — source unique (docs/designSystem/boutonFermeture.md)

   La croix est dessinée par ::before (mask SVG ci-dessous) : en HTML le bouton reste VIDE —
   ne JAMAIS y mettre × / &times; / texte. Réutilisable : VIDE = croix centrée ; avec un
   enfant .modaleCloseTexte = la même boîte s'élargit et un libellé s'ajoute à GAUCHE de la
   croix (ex. « Prendre la main ✕ »). Pas de padding horizontal : la croix a déjà ~6px de
   marge interne à droite (mask 6→18 sur viewBox 24), c'est .modaleCloseTexte qui redonne
   le même air à gauche → équilibré.

   Ici la silhouette GÉNÉRALE (boîte souple, croix 20px — barre d'aperçu écran). Les
   contextes n'écrivent que leurs écarts, APRÈS leur @import de ce fichier :
   - modales Régie (56_scenario/_modale.css) : boîte fixe 44×44, croix 24 ;
   - surcouche aperçu (composants/surcouchePreview.css) : idem + masque « plein écran ».
   ============================================ */

.modaleClose {
    display: flex;
    align-items: center;
    justify-content: center;
    min-width: 25px;
    padding: 8px 5px; /* vertical aligné sur .cta14 (même rythme dans la barre aperçu) */
    gap: var(--gapDefaut);
    border: none;
    border-radius: var(--borderR1);
    background: transparent;
    cursor: pointer;
    transition: background 0.2s;
}

.modaleClose::before {
    content: '';
    order: 1; /* croix à droite d'un éventuel .modaleCloseTexte (seule = centrée, inchangé) */
    width: 20px;
    height: 20px;
    background-color: var(--cNoir1);
    mask: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cline x1=%2718%27 y1=%276%27 x2=%276%27 y2=%2718%27/%3E%3Cline x1=%276%27 y1=%276%27 x2=%2718%27 y2=%2718%27/%3E%3C/svg%3E") center / contain no-repeat;
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cline x1=%2718%27 y1=%276%27 x2=%276%27 y2=%2718%27/%3E%3Cline x1=%276%27 y1=%276%27 x2=%2718%27 y2=%2718%27/%3E%3C/svg%3E") center / contain no-repeat;
}

.modaleClose:hover {
    background: var(--cBlanc02);
}

/* Libellé optionnel à gauche de la croix (cf. en-tête). Le padding gauche donne au texte
   le même air (~6px) que la marge interne de la croix à droite → visuellement équilibré. */
.modaleCloseTexte {
    padding-left: 5px;
    font: var(--fMenu14);
    color: var(--cNoir1); /* même teinte que la croix */
}

/*!***************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/56_scenario/_modale.css ***!
  \***************************************************************************************************************************************/
/* Bouton de fermeture (.modaleClose) : silhouette et croix dans le composant — ici,
   plus bas, uniquement l'écart des modales Régie (boîte fixe 44×44, croix 24). */

/* ============================================
   BOUTONS BRIQUE ANIMATION (info + aperçu)
   Groupés en haut à droite, côte à côte
   ============================================ */

.boutonsBriqueScene {
    position: absolute;
    top: 3px;
    right: 3px;
    display: flex;
    gap: 2px;
    z-index: 2;
}

.boutonsBriqueScene button {
    width: 22px;
    height: 22px;
    padding: 3px;
    border: none;
    border-radius: 4px;
    background: var(--cBlanc);
    box-shadow: 0 1px 3px var(--cOmbre);
    cursor: pointer;
    opacity: 0.7;
    transition: opacity 0.15s, background 0.15s;
}

.boutonsBriqueScene button:hover {
    opacity: 1;
    background: var(--cBlanc);
    box-shadow: 0 1px 4px var(--cOmbreForte);
}

.boutonsBriqueScene button svg {
    width: 100%;
    height: 100%;
    display: block;
    color: var(--cNoir2);
}

/* ============================================
   MODALE - STYLES GÉNÉRIQUES
   ============================================ */

.modale {
    border: none;
    border-radius: var(--borderR1);
    padding: 0;
    max-width: 500px;
    width: 90vw;
    max-height: 80vh;
    box-shadow: var(--ombreModale);
    background: transparent;
}

.modale::backdrop {
    background: var(--cOverlay);
}

.modaleContenu {
    background: var(--cBlanc);
    border-radius: var(--borderR1);
    overflow: hidden;
    display: flex;
    flex-direction: column;
    max-height: 80vh;
}

/* ============================================
   MODALE - VARIANTES PAR CONTEXTE
   ============================================ */

/* Scenes : header jaune, plus large */
.modaleScenes {
    max-width: 600px;
}

.modaleScenes .modaleHeader {
    background: var(--cFondScenes);
}

/* Participants : header cyan */
.modaleParticipants .modaleHeader {
    background: var(--cFondGroupes);
}

/* Mode test : header lavande */
.modaleHeaderTest {
    background: var(--cTest) !important;
}

/* Récap erreur : header rouge, plus large pour le stepper */
.modaleRecap {
    max-width: 600px;
}

.modaleRecap .modaleHeader {
    background: var(--cBlanc);
    padding-left: 20px;
}

.modaleHeader {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen);
    padding: 5px;
    background: var(--cFondScenes);
    border-bottom: var(--border);
    flex-shrink: 0;
}

.modaleHeader h3 {
    flex: 1;
    margin: 0;
    font: var(--fH3);
}

.modaleIcone {
    width: 40px;
    height: 40px;
    object-fit: contain;
}

/* Bouton de fermeture : silhouette et croix dans composants/boutonFermeture.css (importé en
   tête). Ici l'écart des modales Régie : boîte fixe 44×44, croix 24. */
.modaleClose {
    width: 44px;
    height: 44px;
    padding: 0;
}

.modaleClose::before {
    width: 24px;
    height: 24px;
}

.modaleCorps {
    padding: var(--paddingCorps);
    overflow-y: auto;
    font: var(--fText16);
    color: var(--cNoir2);
    /* Scroll auto quand la modale dépasse 80vh : sans min-height:0 le corps ne shrink pas
       sous son contenu et le bas serait clippé. Le header (flex-shrink:0) reste visible. */
    min-height: 0;
}

/* Barre de scroll VISIBLE (non-overlay) : l'utilisateur doit voir qu'il peut scroller, sinon il
   ne comprend pas qu'il manque du contenu. Même pattern que la pop-up de saisie (saisie.css).
   Pas de scrollbar-color : sur Chrome ≥121 il désactiverait ces règles et remettrait la barre
   overlay auto-masquée. */
.modaleCorps::-webkit-scrollbar {
    width: 12px;
}

.modaleCorps::-webkit-scrollbar-track {
    background: var(--cBlanc2);
    border-radius: var(--borderR1);
}

.modaleCorps::-webkit-scrollbar-thumb {
    background: var(--cNoir4);
    border-radius: var(--borderR1);
}

.modaleCorps h1,
.modaleCorps h2,
.modaleCorps h3 {
    margin-top: 1em;
    margin-bottom: 0.5em;
}

.modaleCorps h1:first-child,
.modaleCorps h2:first-child,
.modaleCorps h3:first-child {
    margin-top: 0;
}

.modaleCorps p {
    margin: 0.5em 0;
}

.modaleErreur {
    padding: 40px;
    text-align: center;
    font: var(--fText16);
    color: var(--cNoir3);
}

.modaleErreur {
    color: var(--cRouge);
}

/* ============================================
   MODALE - BARRE D'OUTILS
   ============================================ */

.modaleBarreOutilsFlex {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 16px;
    padding-bottom: 12px;
    border-bottom: var(--border);
}

.modaleCompteur {
    font: var(--fCta16);
    color: var(--cNoir1);
}

/* ============================================
   MODALE - BOUTONS DE TRI / ACTIONS
   ============================================ */

.modaleBoutons {
    display: flex;
    gap: var(--gapDefaut);
}

/* Le bouton discret (ex-ctaModale, renommé 2026-07-18 : né dans les modales, il
   vit partout — blocs d'onglet, formulaires, TS). Même padding que tous les
   boutons compacts : --paddingCta14 (décision PO 2026-07-18, un .ctaDiscret côtoie
   un .cta14 dans les barres — deux paddings différents, c'est ultra visible). */
/* ⚠️ La base .ctaDiscret (base + hover + désactivé ci-dessous) est copiée dans
   studioVitrine/assets/vitrine/css/ctaDiscret.css (boutons des cartes de la page aperçu).
   Si tu modifies ces règles → demander au PO s'il faut la répercuter sur la copie vitrine.
   Les variantes .ctaDiscret.actif contextuelles (modales) restent propres à la régie. */
.ctaDiscretPrimaire,
.ctaDiscret {
    display: inline-block; /* un <a> hors barre flex reste un bouton (padding vertical réel) — même règle que .cta14 */
    padding: var(--paddingCta14);
    text-align: center;
    border: var(--borderCta);
    border-radius: var(--borderR1);
    background: var(--cBlanc);
    font: var(--fMenu14);
    color: var(--cCtaTexte);
    cursor: pointer;
    user-select: none;
    transition: background 0.2s, color 0.2s, border-color 0.2s;
}

.ctaDiscretPrimaire.hover {
    background: var(--cBlanc02);
}
.ctaDiscretPrimaire:disabled,
.ctaDiscret:disabled {
    opacity: 0.4;
    cursor: auto;
}

.ctaDiscretPrimaire {
    background: var(--cBleu4a);
    color: var(--cBleu4at);
}

.ctaDiscretPrimaire.hover {
    background: var(--cBleu4ah);
    color: var(--cBleu4ht);
}

/* Variante <a> désactivé (un lien ne connaît pas :disabled) */
.ctaDiscret.disabled {
    opacity: 0.4;
    pointer-events: none;
}

.ctaDiscret:disabled:hover {
    background: var(--cBlanc);
}

.ctaDiscret.actif {
    color: var(--cNoir1);
}

/* Couleur du bouton actif selon le contexte */
.modaleParticipants .ctaDiscret.actif {
    background: var(--cFondGroupes);
    border-color: var(--cFondGroupes2);
}

.modaleScenes .ctaDiscret.actif {
    background: var(--cFondScenes);
    border-color: var(--cFondScenes2);
}

.modaleDistributions .ctaDiscret.actif {
    background: var(--cFondDistributions);
    border-color: var(--cFondDistributions2);
}

/* Mode test : bouton actif lavande */
.modaleCorpsTest .ctaDiscret.actif {
    background: var(--cTest);
    border-color: var(--cTest3);
}

/* Label "Données de test" sous le compteur */
.modaleTestLabel {
    display: block;
    font: var(--fLight14);
    color: var(--cTest3);
}

/* ============================================
   MODALE - TOGGLE ACTIF/DÉSACTIVÉ
   ============================================ */

.toggleActif {
    position: relative;
    display: inline-block;
    width: 38px;
    height: 22px;
    cursor: pointer;
    flex-shrink: 0;
}

.toggleActif input {
    opacity: 0;
    width: 0;
    height: 0;
}

.toggleSlider {
    position: absolute;
    inset: 0;
    background: var(--cBlanc03);
    border: var(--borderForm);
    border-radius: 20px;
    transition: background 0.2s;
}

.toggleSlider::before {
    content: '';
    position: absolute;
    width: 16px;
    height: 16px;
    left: 2px;
    bottom: 2px;
    background: var(--cBlanc);
    border-radius: 50%;
    transition: transform 0.2s;
}

.toggleActif input:checked + .toggleSlider {
    background: var(--cCta);
}

.toggleActif input:checked + .toggleSliderTest {
    background: var(--cTest3);
}

.toggleActif input:checked + .toggleSliderParticipants {
    background: var(--cFondGroupes3);
}

/* inutilisé 2026-06-13
.toggleActif input:checked + .toggleSliderDistributions {
    background: var(--cFondDistributions3);
}

.toggleActif input:checked + .toggleSliderConfig {
    background: var(--cFondConfig3);
}

.toggleActif input:checked + .toggleSliderScenes {
    background: var(--cFondScenes3);
}

.toggleActif input:checked + .toggleSliderAffichages {
    background: var(--cFondAffichages3);
}
*/

.toggleActif input:checked + .toggleSlider::before {
    transform: translateX(16px);
}

/* Lettres trouvées par la recherche (≥4 caractères) — couleur plutôt que gras. */
.rechercheMatch {
    color: var(--cCta);
}

/* État banni */
.participantBanni {
    opacity: 0.5;
}

.participantBanni .participantNom {
    text-decoration: line-through;
    color: var(--cNoir4);
}

/* ============================================
   MODALE - PRÉVISUALISATION DISTRIBUTION
   ============================================ */

.modaleDistributions .modaleHeader {
    background: var(--cFondDistributions);
}

/* inutilisé 2026-06-13
.modaleAvertissement {
    font: var(--fLight14);
    color: var(--cNoir4);
}
*/

.listePrevisualisation {
    list-style: none;
    padding: 0;
    margin: 12px 0;
}

.listePrevisualisation .blocItem {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    padding: 10px 0;
    background: transparent;
    border-radius: 0;
    border-bottom: var(--border);
}

.listePrevisualisation .blocItem:last-child {
    border-bottom: none;
}

.previsualiserNumero {
    font: var(--fCta16);
    color: var(--cNoir3);
    min-width: 28px;
    text-align: center;
}

.previsualiserMinute {
    font: var(--fMenu14);
    color: var(--cNoir4);
    min-width: 36px;
    text-align: right;
}

.previsualiserPerdant {
    font: var(--fLight14);
    color: var(--cRouge);
}

.previsualiserIntervalle {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
}

.previsualiserIntervalleLabel {
    font: var(--fMenu14);
    color: var(--cNoir2);
}

.previsualiserRaison {
    font: var(--fLight14);
    color: var(--cNoir4);
    min-width: 20px;
    text-align: center;
}

/* inutilisé 2026-06-13
.previsualiserPied {
    padding: 12px 20px;
    text-align: center;
    border-top: var(--border);
    background: var(--cBlanc);
}
*/

/* ============================================
   MODALE - VOCABULAIRE DE L'ANIMATION
   ============================================ */

/* Lien discret sous les champs de l'animation, ouvre la modale de vocabulaire. */
.vocabulaireScene {
    margin-top: 12px;
}

.vocabulaireLien {
    color: var(--cLink);
    cursor: pointer;
    font: var(--fText16);
}

.vocabulaireLien:hover {
    color: var(--cLinkh);
    text-decoration: underline;
}

.vocabulaireChamp {
    margin-bottom: 12px;
}

/* Bouton aligné sur le bord gauche des champs (pas de ré-indentation, contrairement à .formActions). */
.vocabulaireActions {
    margin-top: 12px;
}

/* Séparateur menu / mots : gap délibéré et équilibré (le hr global est à 30px, trop). Le champ
   au-dessus a déjà 12px de marge basse → 4px en haut + 16px en bas = 16px de chaque côté. */
.modaleVocabulaire hr {
    margin: 4px 0 16px;
}

.vocabulaireChamp label {
    display: block;
    margin-bottom: 4px;
    font: var(--fLabel);
    color: var(--cNoir2);
}

/* Pas d'icône ici : on aligne le titre sur le corps (comme .modaleRecap). */
.modaleVocabulaire .modaleHeader {
    padding-left: 20px;
}

/* ============================================
   MODALE « ANIMATIONS SIMILAIRES »
   Jumelles de famille d'une animation du scénario
   ============================================ */

.modaleSimilaires {
    max-width: 520px;
}

/* Pas d'icône ici non plus : titre aligné sur le corps (comme .modaleRecap). */
.modaleSimilaires .modaleHeader {
    background: var(--cBlanc);
    padding-left: 20px;
}

.modaleSimilaires .modaleCorps {
    padding: 16px 20px;
}

.similairesIntro {
    margin: 0 0 12px;
    color: var(--cNoir3);
}

.similairesListe {
    display: flex;
    flex-direction: column;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
}

.similairesCarte {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen);
    padding: 12px;
    border: var(--border);
    border-radius: var(--borderR2);
}

/* Carte de l'animation en place : fond discret, pas de bouton (juste le libellé d'état) */
.similairesCarteActuelle {
    background: var(--cBlanc02);
}

.similairesIcone {
    width: 44px;
    height: 44px;
    object-fit: contain;
    flex-shrink: 0;
}

.similairesInfos {
    flex: 1;
    display: flex;
    flex-direction: column;
    gap: var(--gapDefaut); /* aligné 6 -> 8px (échelle PO 2026-07-18) */
}

.similairesInfos h4 {
    margin: 0;
}

.similairesActuelle {
    font: var(--fMenu14);
    color: var(--cNoir3);
}

.similairesActions {
    display: flex;
    align-items: center;
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
}

/*!****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/56_scenario/_alertes.css ***!
  \****************************************************************************************************************************************/
/* ========================================
   Formulaire actif : atténuation des briques
   ======================================== */

/* Atténuation des briques non actives quand un formulaire est ouvert */
#scenarioGrille.formulaireActif .brique:not(.briqueActive):not(:hover),
.briquesAjouter.formulaireActif .brique:not(.briqueActive):not(:hover) {
    background: transparent;
    border-color: var(--cNoir5);
    opacity: .7;
}

/* Atténuation des briques quand le menu d'ajout est ouvert (sauf brique +) */
#scenarioGrille.menuAjouterActif .brique:not(.briqueAjouter) {
    background: transparent;
    border-color: var(--cNoir5);
    opacity: .7;
}

/* ========================================
   Scene après confirmation
   ======================================== */

@keyframes briqueRetour {
    from {
        opacity: .7;
        background: transparent;
    }
    to {
        opacity: 1;
    }
}

#scenarioGrille.apresConfirmation .brique:not(.briqueModifiee) {
    animation: briqueRetour 0.4s ease forwards;
}

/*!****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/56_scenario/_uploads.css ***!
  \****************************************************************************************************************************************/
/* ============================================
   APERÇU DES IMAGES (Formulaire upload)
   ============================================ */

.champAvecVignette {
    margin-bottom: 15px;
}

/* .vignetteImageExistante utilise .blocEncadre (défini dans _formulaires.css) */

.vignetteImageExistante img {
    max-width: 200px;
    max-height: 120px;
    object-fit: contain;
    display: block;
    margin: 10px 0;
}

.champUploadCache {
    display: none;
}

/* ============================================
   GALERIE PUBLIQUE (modale de choix d'image)
   ============================================ */

/* Règle d'autorité : les états du champ image sont pilotés par l'attribut hidden
   (galerieImages.ts). Sans !important, les display posés ailleurs (ex. noyau
   button.ctaAnnuler { display: block }) gagnent sur le hidden du navigateur. */
.champAvecVignette [hidden] {
    display: none !important;
}

/* Séparateur entre les deux façons de choisir (upload « ou charger depuis : » galeries) */
.champChoixImage .galerieOu {
    color: var(--cNoir3);
    margin: 2px 0;
    padding: 0;
    font: var(--fLabel);
}
.champChoixImage label {
    margin-bottom: 4px;
}

/* Rangée des boutons de galeries (publique / événement / toutes mes images) */
.galerieBoutons {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: var(--gapMoyen);
}

.galerieGrille {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
    gap: var(--gapMoyen);
    padding: 20px;
}

.galerieVignette {
    border: none;
    padding: 0;
    background: transparent;
    cursor: pointer;
}

.galerieVignette img {
    width: 100%;
    aspect-ratio: 16 / 9;
    object-fit: cover;
    display: block;
    border-radius: var(--borderR1);
}

.galerieVignette:hover img {
    box-shadow: 0 1px 4px var(--cOmbreForte);
}

/* ============================================
   FORMULAIRE LOTS DYNAMIQUE
   ============================================ */

#distributionsContainer {
    margin-bottom: 20px;
}

/* .distributionItem utilise .blocEncadre (défini dans _formulaires.css) */

/* Le bouton supprimer de lot utilise .ctaSupprimer (défini dans _formulaires.css) */
.distributionItem > .ctaSupprimer {
    margin-top: 15px;
}

.distributionItemRow {
    display: flex;
    gap: var(--gapLarge);
    margin-bottom: 10px;
}

.distributionItemLabel {
    flex: 1;
}

.distributionItemStock {
    width: 100px;
    flex-shrink: 0;
}

/* inutilisé 2026-06-13
.distributionItem .champFormulaire {
    margin-bottom: 10px;
}
*/

@media (max-width: 650px) {
    .distributionItemRow {
        flex-direction: column;
        gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
    }
}

#btnAjouterDistribution, #btnAjouterEquipe {
    font: var(--fText16);
    background: transparent;
    border: none;
    cursor: pointer;
    padding: 0;
    margin: 0 20px 20px 20px;
}

#btnAjouterDistribution {
    color: var(--cFondDistributions4);
}

/* Source Équipes : couleur de la section Participants */
#btnAjouterEquipe {
    color: var(--cFondGroupes4);
}

#btnAjouterDistribution:hover, #btnAjouterEquipe:hover {
    text-decoration: underline;
}

/*!*************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/56_scenario/_blocReseauSocial.css ***!
  \*************************************************************************************************************************************************/
/* ============================================
   BLOCS RÉSEAUX SOCIAUX - Styles communs
   Facebook, Instagram, LinkedIn
   ============================================ */

/* Bloc connexion (wrapper) */
.blocConnexion {
    margin: 10px 0 20px;
}

/* Bouton de connexion - classe commune */
.btnConnexion {
    display: inline-flex;
    align-items: center;
    gap: var(--gapDefaut);
    padding: 10px 20px;
    color: var(--cBlanc);
    border: none;
    border-radius: var(--borderR1);
    font: var(--fCta16);
    cursor: pointer;
}

.btnConnexion:disabled {
    background: var(--cBlanc03);
}

/* Variantes par réseau */
.btnConnexion.facebook {
    background: #1877F2; /* Couleur officielle de la marque Facebook */
    transition: background 0.2s;
}

.btnConnexion.facebook:hover {
    background: #166FE5; /* Couleur officielle de la marque Facebook (hover) */
}

.btnConnexion.instagram {
    background: linear-gradient(45deg, #FCAF45, #E1306C, #833AB4); /* Gradient officiel de la marque Instagram */
    transition: opacity 0.2s;
}

.btnConnexion.instagram:hover {
    opacity: 0.9;
}

.btnConnexion.linkedin {
    background: linear-gradient(135deg, #0077B5, #0A66C2); /* Gradient officiel de la marque LinkedIn */
    transition: opacity 0.2s;
}

.btnConnexion.linkedin:hover {
    opacity: 0.9;
}

/* Icône dans le bouton */
.iconeReseau {
    width: 20px;
    height: 20px;
}

/* ============================================
   État connecté (utilisé par tous les réseaux)
   ============================================ */

.connexionActive {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
    padding: 10px 15px;
    background: var(--cSuccesFond);
    border: 1px solid var(--cSucces);
    border-radius: var(--borderR1);
}

.iconeConnecte::before {
    content: '✓';
    color: var(--cSucces);
    font-weight: bold;
}

.pageConnectee {
    font: var(--fText16);
    color: var(--cNoir1);
}

.btnDeconnecter {
    margin-left: auto;
    padding: 5px 10px;
    background: transparent;
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    font: var(--fText16);
    color: var(--cNoir2);
    cursor: pointer;
}

.btnDeconnecter:hover {
    background: var(--cNoir5);
}

/* ============================================
   Alertes et messages
   ============================================ */

.alerteTokenExpire {
    margin-top: 10px;
    padding: 10px 15px;
    background: var(--cRouge6);
    border: 1px solid var(--cRouge);
    border-radius: var(--borderR1);
    font: var(--fText16);
    color: var(--cNoir1);
}

.alerteTokenExpire a {
    color: var(--cRouge);
    text-decoration: underline;
}

.messageInfo {
    padding: 10px 15px;
    background: var(--cNoir5);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    font: var(--fText16);
    color: var(--cNoir2);
}

/* ============================================
   Bloc publication/media (sélection de contenu)
   ============================================ */

.blocPublication,
.blocMedia {
    margin: 20px 0;
}

.blocPublication label,
.blocMedia label {
    display: block;
    margin-bottom: 5px;
    font: var(--fText16);
    color: var(--cNoir1);
}

.selectPublication,
.selectMedia {
    width: 100%;
    max-width: 400px;
    padding: 10px;
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    font: var(--fText16);
    background: var(--cBlanc);
}

.selectPublication:disabled,
.selectMedia:disabled {
    background: var(--cNoir5);
}

.btnRefreshPublications,
.btnRefreshMedias {
    margin-left: 10px;
    padding: 10px 12px;
    background: var(--cBlanc);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    font-size: 16px;
    cursor: pointer;
    vertical-align: middle;
}

.btnRefreshPublications:hover,
.btnRefreshMedias:hover {
    background: var(--cNoir5);
}

.publicationSelectionnee,
.mediaSelectionne {
    margin-top: 5px;
    font: var(--fLight14);
    color: var(--cSucces);
}

/* ============================================
   Bloc actualisation
   ============================================ */

.infoActualisation {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 10px;
}

.labelActualisation {
    font: var(--fText16);
    color: var(--cNoir2);
}

.tempsRelatif {
    font: var(--fText16);
    font-weight: 600;
    color: var(--cNoir1);
}

.nombreParticipants {
    font: var(--fText16);
    font-weight: 600;
    color: var(--cNoir1);
}

.btnActualiser {
    padding: 10px 20px;
    background: var(--cFondGroupes_a);
    color: var(--cBlanc);
    border: none;
    border-radius: var(--borderR1);
    font: var(--fCta16);
    cursor: pointer;
    transition: background 0.2s;
}

.btnActualiser:hover {
    background: var(--cFondGroupes_ah);
}

.btnActualiser:disabled {
    background: var(--cBlanc03);
}

.erreurToken {
    margin-top: 10px;
    font: var(--fLight14);
    color: var(--cRouge);
}

.blocActualisation .messageAide {
    margin-top: 10px;
    font: var(--fLight14);
    color: var(--cNoir3);
}

/*!**********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/56_scenario/_ongletGroupes.css ***!
  \**********************************************************************************************************************************************/
/* ============================================
   ONGLET PARTICIPANTS - Styles spécifiques
   ============================================

   Les styles communs des blocs sont dans 53_blocs.css
   Ce fichier contient uniquement les éléments spécifiques
   à l'onglet participants.

   ============================================ */

/* Conteneur des blocs (commun participants et lots) */
.groupesListe,
.distributionsListe {
    display: flex;
    flex-direction: column;
    gap: var(--gapListe);
}

/* Message si vide (commun participants et lots) */
.groupesVide,
.distributionsVide {
    font: var(--fText16);
    color: var(--cNoir3);
    padding: 40px 20px;
    text-align: center;
    background: var(--cBlanc02);
    border-radius: var(--borderR2);
}

/* Liste des participants dans la modale */
.listeParticipants {
    list-style: none;
    margin: 0;
    padding: 0;
}

.listeParticipants li {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: var(--gapMoyen);
    padding: 10px 0;
    border-bottom: var(--border);
}

.listeParticipants li:last-child {
    border-bottom: none;
}

.participantNom {
    flex: 1;
    font: var(--fText16);
    color: var(--cNoir1);
}

.participantChances {
    font: var(--fLight14);
    color: var(--cNoir3);
}

.modaleVide {
    color: var(--cNoir3);
    text-align: center;
    padding: var(--paddingCorps);
}

/* ============================================
   TOGGLE MENU PARTICIPANTS
   Réutilise les styles de _ongletMenu.css
   Seule la couleur de l'indicateur change
   ============================================ */

/* Couleur spécifique pour l'indicateur participants */
.divOngletMenuGroupes .indicateurOnglet {
    background: var(--cFondGroupes3);
}

/* Sections masquées par défaut */
/* inutilisé 2026-06-13
.sectionGroupes {
    display: none;
}

.sectionGroupes.visible {
    display: block;
}
*/

/* ============================================
   TOGGLE MENU LOTS
   Réutilise les styles de _ongletMenu.css
   Seule la couleur de l'indicateur change
   ============================================ */

/* Couleur spécifique pour l'indicateur lots */
.divOngletMenuDistributions .indicateurOnglet {
    background: var(--cFondDistributions3);
}

/* Sections masquées par défaut */
/* inutilisé 2026-06-13
.sectionDistributions {
    display: none;
}

.sectionDistributions.visible {
    display: block;
}
*/


/*!****************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/56_scenario/_ongletDistributions.css ***!
  \****************************************************************************************************************************************************/
/* ============================================
   ONGLET LOTS - Styles spécifiques
   ============================================

   Les styles communs (.distributionsListe, .distributionsVide) sont
   définis dans _ongletGroupes.css (sélecteurs groupés)

   Ce fichier contient uniquement les éléments spécifiques
   à l'onglet lots qui diffèrent de l'onglet participants.

   ============================================ */

/*!************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/56_scenario/_ongletResultats.css ***!
  \************************************************************************************************************************************************/
/* ============================================
   ONGLET RÉSULTATS - Styles spécifiques
   ============================================

   Les styles communs des blocs sont dans 53_blocs.css
   Ce fichier contient uniquement les éléments spécifiques
   à l'onglet résultats (sections, gagnants, etc.)

   ============================================ */

/* Section de résultats */
.sectionResultats {
    margin-bottom: 40px;
}

.sectionResultatsTitre {
    font: var(--fH3);
    color: var(--cNoir1);
    margin: 0 0 20px 0;
    padding-bottom: 12px;
    border-bottom: var(--border);
}

/* Liste des blocs de téléchargement */
.listeTelecharger {
    display: flex;
    flex-direction: column;
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
}

/* Bloc résultat par animation — box (titre = nom de l'animation, fin trait comme les box participants) */
.blocResultatScene {
    max-width: 600px;
    margin-bottom: 16px;
    padding: 16px 20px;
    background: var(--cBlanc);
    border: var(--borderForm);
    border-radius: var(--borderR1);
}

.blocResultatScene:empty {
    display: none;
}

.blocResultatTitre {
    font: var(--fH4);
    color: var(--cNoir1);
    margin: 0 0 12px 0;
}

.blocResultatBoutons {
    display: flex;
    flex-wrap: wrap;
    gap: var(--gapDefaut);
}

/* Téléchargements résultats : une ligne par ronde/classement, petits liens par format. */
.resultatLignes {
    display: flex;
    flex-direction: column;
    gap: var(--gapDefaut); /* aligné 6 -> 8px (échelle PO 2026-07-18) */
}

.resultatLigne {
    display: flex;
    align-items: baseline;
    gap: var(--gapMoyen);
    font: var(--fText16);
}

.resultatLabel {
    color: var(--cNoir3);
    min-width: 100px;
}

.resultatLien {
    color: var(--cLink);
    cursor: pointer;
}

.resultatLien:hover {
    color: var(--cLinkh);
    text-decoration: underline;
}

/*!**************************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/56_scenario/_ongletPublication.css ***!
  \**************************************************************************************************************************************************/
/* Onglet Publication — une carte par animation : titre, case « publier », lien + QR. */

.blocPublication {
    margin-bottom: 16px;
}

.publicationCaseLabel {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    cursor: pointer;
}

.publicationLien {
    margin-top: 12px;
}

/*!**********************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/56_scenario/_recapitulatif.css ***!
  \**********************************************************************************************************************************************/
/* ============================================
   RÉCAPITULATIF SCÉNARIO (stepper vertical)
   ============================================ */

/* Container du stepper */
.recapStepper {
    display: flex;
    flex-direction: column;
    gap: 0;
}
#scenarioPanneau .recapStepper > .recapActions + .recapBloc {
    margin-top: 32px;
}

/* Connecteur vertical entre les blocs */
.recapConnecteur {
    width: 3px;
    height: 24px;
    background: var(--cBlanc03);
    margin-left: 20px;
}

/* Bloc individuel du stepper */
.recapBloc {
    position: relative;
    border-radius: var(--borderR1);
    border: var(--borderCarte);
    min-height: 66px;
    overflow: hidden;
}

/* Titre du bloc (h3) */
.recapBloc h3 {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen); /* aligné 10 -> 12px (échelle PO 2026-07-18) */
    padding: 10px 14px 0;
    font: var(--fH4);
    margin: 0;
}

/* Étiquettes du récap : un SEUL style, qu'elles soient cliquables (<a>/<button> en mode
   Préparer / progression) ou statiques. Fond clair de catégorie, texte noir, bordure légère
   (choix PO 2026-07-20 : plus de pastille foncée à texte blanc — l'onglet Diffuser fait foi).
   .recapTagSortie = neutre (noir) : une sortie peut être de n'importe quelle famille.
   .recapTagSortieSecondaire = sortie `secondaire` au contrat, présentée en retrait. */
.recapTagGroupes,
.recapTagDistributions,
.recapTagSortie,
.recapTagSortieSecondaire,
.recapLienGroupes,
.recapLienDistributions {
    display: inline-block;
    margin: 2px 0;
    padding: var(--paddingEtiquette);
    border-radius: var(--borderR0);
    border: 1px solid currentColor;
    color: var(--cNoir3);
}

.recapTagSortieSecondaire {
    color: var(--cNoir4);
}

.recapTagGroupes,
.recapLienGroupes { background: var(--cFondGroupes); }

.recapTagDistributions,
.recapLienDistributions { background: var(--cFondDistributions); }

/* Titre d'animation/affichage cliquable (mode Préparer) : lien sobre, sans pastille colorée,
   pour ne pas perturber la lecture — même sobriété que le titre non cliquable de la progression. */
.recapLienScenes,
.recapLienAffichages {
    color: inherit;
}

/* Affordance « cliquable » : soulignement au survol (étiquettes d'entrée + titres) */
.recapLienGroupes:hover,
.recapLienDistributions:hover,
.recapLienScenes:hover,
.recapLienAffichages:hover {
    text-decoration: underline;
}

/* Sous-titre dans le bloc (h4) */
.recapBloc h4 {
    font: var(--fH4);
    margin: 0;
    color: var(--cNoir3);
}

/* Listes à puces dans le bloc */
.recapBloc ul {
    margin: 4px 0;
    padding-left: 20px;
}

.recapBloc li {
    font: var(--fText16);
    color: var(--cNoir3);
}

/* Détails du bloc */
.recapBlocDetail {
    padding: 4px 14px 10px;
    font: var(--fText16);
    color: var(--cNoir3);
}

.recapBlocDetail p {
    margin: 2px 0;
}

.recapBlocDetail hr {
    border: none;
    border-top: var(--borderCarte);
    margin: 20px 0;
}

/* Icône de l'animation en rappel dans le coin haut-droit du bloc.
   64px = taille d'icône standard du projet (harmonisation en cours, décision PO 2026-06-10).
   Hors flux (absolute) pour ne pas gonfler la hauteur du titre — calée sur le padding du h3. */
.recapTitreIcone {
    position: absolute;
    top: 0;
    right: 0;
    width: 64px;
    height: 64px;
    padding: 6px;
    border-radius: var(--borderR1);
}

/* Variantes couleur par type */
.recapBlocGroupes, /* .recapBlocDistributions (inutilisé 2026-06-13) */ .recapBlocEntreesSorties {
    background: var(--cBlanc1);
}

.recapBlocScene .recapTitreIcone {
    background: var(--cFondScenes);
}

.recapBlocScene.recapBlocAffichage .recapTitreIcone {
    background: var(--cFondAffichages);
}

.recapBlocConfigurations {
    background: var(--cFondConfig);
}

/* inutilisé 2026-06-13
.recapBlocFinal {
    background: var(--cBlanc02);
}
*/

/* Lien "Modifier" sous le récap */
.recapActions {
    padding: 10px 14px;
}

/* Même couleur qu'Annuler des formulaires (noyau 31_cta.css) : les actions neutres sont
   noires, les couleurs restent réservées aux actions marquées (Supprimer). */
.recapActions a {
    color: var(--cNoir3);
}

.recapActions a:hover {
    text-decoration: underline;
}

/* Image dans un bloc récap */
.recapImage {
    max-width: 100%;
    border-radius: var(--borderR1);
}

/* Pastilles couleurs dans le récap */
.recapCouleurs {
    display: flex;
    gap: var(--gapDefaut);
    margin-top: 6px;
}

.recapCouleurPastille {
    width: 28px;
    height: 28px;
    border-radius: 50%;
    border: var(--border);
}

/* Message vide */
.recapVide {
    font: var(--fItalic16);
    color: var(--cNoir3);
    padding: 16px 0;
}

/* Source list dans les détails */
/* inutilisé 2026-06-13
.recapSources {
    display: flex;
    flex-direction: column;
    gap: 2px;
}
*/

/* Alerte insuffisance */
.recapAlerte {
    color: var(--cRouge);
    font: var(--fAlerte16);
}

/* Brique récapitulatif dans la grille du scénario */
/* inutilisé 2026-06-13
.brique.briqueRecap {
    background: var(--cBlanc02);
    border-color: var(--cBlanc03);
}
*/

/* inutilisé 2026-06-15 - concept recap.js retiré
.recapAnimConfig:empty {
    display: none;
}
*/

.recapEncadre {
    margin: 10px 0;
    padding: 10px 15px;
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    background: #FFF8;
}

/* inutilisé 2026-06-15 - concept recap.js retiré
.recapAnimConfig h4 {
    font: var(--fH4);
    margin: 20px 0 4px;
}

.recapAnimConfig h4:first-child {
    margin-top: 0;
}

.recapAnimConfig p {
    font: var(--fText16);
    color: var(--cNoir3);
    margin: 2px 0;
}

.recapAnimConfig ul,
.recapAnimConfig ol {
    margin: 4px 0;
    padding-left: 20px;
}

.recapAnimConfig li {
    font: var(--fText16);
    color: var(--cNoir3);
}

.recapAnimConfig table {
    width: 100%;
    border-collapse: collapse;
    margin: 6px 0;
    font: var(--fText16);
    color: var(--cNoir3);
}

.recapAnimConfig th,
.recapAnimConfig td {
    padding: 4px 8px;
    text-align: left;
    border-bottom: var(--borderCarte);
}

.recapAnimConfig th {
    font-weight: 600;
}

.recapAnimConfig hr {
    border: none;
    border-top: var(--borderCarte);
    margin: 8px 0;
}
*/

/* Boutons participants cliquables dans la progression : même étiquette que les autres
   (contour compris, cf. bloc du haut), on n'ajuste que l'interactivité. */
button.recapTagGroupes {
    cursor: pointer;
    font: inherit;
}

button.recapTagGroupes:hover {
    text-decoration: underline;
}

/* ============================================
   PROGRESSION — États des blocs
   ============================================ */

/* Bloc non actif : atténué */
#progression .recapBlocScene {
    opacity: .5;
    transition: opacity 0.3s;
}

/* Bloc actif : pleine couleur */
#progression .recapBlocScene.recapBlocActif {
    opacity: 1;
}

/* Info d'état dynamique (générée par JS) */
.progressionEtat {
    font: var(--fCta16);
    color: var(--cCta);
    padding: 6px 14px;
}

/* Aération de secours quand le bloc n'a pas encore de contenu de progression */
.progressionContenu:not(:has(*)) {
    padding-bottom: 10px;
}

/* Blocs de progression émis par l'animation (obtenirProgression → rendu unique renduBlocs.ts) */
.progressionBlocTitre {
    font: var(--fH4);
    color: var(--cNoir3);
    margin: 6px 0 2px;
}

.progressionBlocTexte {
    font: var(--fText16);
    color: var(--cNoir3);
    margin: 2px 0;
}

.progressionBlocListe {
    margin: 4px 0;
    padding-left: 20px;
}

.progressionBlocListe li {
    font: var(--fText16);
    color: var(--cNoir3);
}

.progressionBlocBarre {
    margin: 8px 0;
}

.progressionBlocBarrePiste {
    height: 10px;
    border-radius: var(--borderR1);
    background: var(--cBlanc03);
    overflow: hidden;
}

.progressionBlocBarreJauge {
    height: 100%;
    background: var(--cCta);
    transition: width 0.3s;
}

.progressionBlocBarreLabel {
    display: block;
    margin-top: 4px;
    font: var(--fCta16);
    color: var(--cCta);
}

/*!*******************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/56_scenario.css ***!
  \*******************************************************************************************************************************/
/* ============================================
   SCÉNARIO - Fichier principal
   ============================================

   Ce fichier importe les partials organisés par thème.
   Chaque partial gère un aspect spécifique de la scenario.

   ============================================ */

/*!**********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/57_ongletRegie.css ***!
  \**********************************************************************************************************************************/
/* ============================================
   ONGLET RÉGIE - Lanceur / Pilotage
   Utilise .panneauWrapper / .panneauGauche / .panneauFormulaire
   définis dans 56_scenario/_formulaires.css
   ============================================ */

/* ============================================
   BLOC RÉGIE (design sobre, en premier)
   ============================================ */

.blocRegie {
    display: flex;
    flex-direction: column;
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
    padding: var(--paddingCorps);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
}

.blocRegie h3 {
    margin: 0;
}

.blocRegie .ctaSupprimer {
    width: max-content;
}

/* Écran de suppression : avertissement accepté (case « J'ai compris ») — fond noir en surcharge
   du rouge d'alerte, marges et padding inchangés pour ne rien décaler. */
.alertErreur.accepteAvertissement {
    background: var(--cNoir);
}

/* ============================================
   URL BOX (copier l'URL)
   ============================================ */

.regieUrlBox {
    display: flex;
    gap: var(--gapMoyen);
}

.regieUrl {
    flex: 1;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.regieUrl:hover {
    text-decoration: underline;
}

.btnCopier {
    font: var(--fText16);
    color: var(--cNoir2);
    background: transparent;
    border: none;
    cursor: pointer;
    padding: 0;
    white-space: nowrap;
}

.btnCopier:hover {
    text-decoration: underline;
}

/* État après copie : texte vert, non interactif */
.btnCopier.copie {
    cursor: default;
    pointer-events: none;
}

/* ============================================
   QR CODE
   ============================================ */

.regieQrCode img {
    display: block;
    width: 150px;
    height: 150px;
    transform: translateX(-17px);
}


/* ============================================
   CODE D'ACCÈS (caché par défaut)
   ============================================ */

.regieCodeBox {
    display: flex;
    align-items: center;
    gap: var(--gapLarge); /* aligné 16 -> 20px (échelle PO 2026-07-18) */
}

.regieCodeMasque,
.regieCodeValeur {
    font: var(--fMono24b);
    letter-spacing: 0.3em;
    color: var(--cNoir1);
}

.regieCodeMasque {
    color: var(--cNoir4);
}

.btnDecouvrir {
    padding: 10px 20px;
    font: var(--fText16);
    color: var(--cNoir1);
    background: var(--cBlanc);
    border: var(--borderForm);
    border-radius: var(--borderR1);
    cursor: pointer;
}

.btnDecouvrir:hover {
    background: var(--cBlanc02);
    color: var(--cNoir2);
}

.btnDecouvrir[hidden] {
    visibility: hidden;
}

/* ============================================
   CHANGER MES CODES (style discret comme Supprimer)
   ============================================ */

.btnChangerCodes {
    font: var(--fText16);
    color: var(--cRouge);
    background: transparent;
    border: none;
    cursor: pointer;
    padding: 0;
}

.btnChangerCodes:hover {
    text-decoration: underline;
}

/* ============================================
   PLACEHOLDER (rien de configuré)
   ============================================ */

.regiePlaceholder {
    text-align: center;
    padding: 48px 24px;
    color: var(--cNoir3);
    font: var(--fText16);
}

/* ============================================
   COMPTEUR GLOBAL (fond blanc, au-dessus du mode test)
   ============================================ */

#compteurGlobal {
    padding: var(--paddingCorps);
    border: var(--borderCarte);
    border-radius: var(--borderR1);
    background: var(--cFondGroupes);
}

#compteurGlobal > div {
    width: max-content;
    margin-left: 40px;
}

@media (max-width: 600px) {
    #compteurGlobal > div {
        margin-left: -5px;
    }
}

/* inutilisé 2026-06-13
.compteurGlobalLimite {
    font: var(--fText16);
    color: var(--cNoir2);
    margin: 10px 0 4px;
}
*/

.compteurGlobalLigne {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    margin: 0;
}

.compteurGlobalTotal {
    margin-top: 6px;
    padding-top: 6px;
    border-top: 1px solid var(--cTest3);
}

.compteurGlobalLabel {
    font: var(--fText16);
    color: var(--cNoir2);
}

.compteurGlobalValeur,
.compteurGlobalValeurReels,
.compteurGlobalValeurFictifs {
    font: var(--fMono24b);
    color: var(--cNoir1);
    text-align: right;
    min-width: 60px;
}

.compteurGlobalTotal .compteurGlobalValeur {
    font: var(--fMono24b);
}

#compteurGlobal.modeTestActif {
    background: var(--cTest);
}

#compteurGlobal.limiteAtteinte .compteurGlobalValeur {
    color: var(--cRouge);
}

/* ============================================
   BLOC MODE TEST (participants fictifs)
   ============================================ */

.fictifActif .blocIcone img,
.fictifActif .blocIcone svg {
    background: var(--cTest);
}

/* Section fictifs */
#sectionFictifs {
    display: flex;
    flex-direction: column;
    gap: var(--gapLarge);
}

#sectionFictifs.hidden {
    display: none;
}

/* Override du bloc générique pour le mode test */
.bloc.blocGroupe {
    max-width: none;
    border: var(--borderCarte);
    background: var(--cBlanc);
    border-radius: var(--borderR1);
}

.blocGroupe .blocCorps {
    gap: var(--gapMoyen);
    padding: 16px;
}

/* Ligne 2 : Toggle - réutilise .toggleAvecLabel de _modale.css */

/* Ligne 3 : Contenu conditionnel */
.blocGroupeContenu {
    display: flex;
    flex-direction: column;
    gap: var(--gapMoyen);
}

.blocGroupeReels.hidden,
.blocGroupeFictifs.hidden {
    display: none;
}

/* Compteurs - réutilise les classes de _ongletGroupes.css */
.blocGroupeReels /*, .fictifsCompteur (inutilisé 2026-06-13) */ {
    display: flex;
    align-items: baseline;
    gap: var(--gapDefaut);
    margin-bottom: 10px;
}

/* Label avant le compteur */
#blocModeTest .compteurLabel {
    font: var(--fText16);
    color: var(--cNoir3);
}

/* Valeur principale (gros chiffre) */
#blocModeTest .compteurValeur {
    font: var(--fMono24b);
    color: var(--cNoir1);
}

/* Séparateur "/" */
#blocModeTest .compteurSeparateur {
    font: var(--fText16);
    color: var(--cNoir4);
}

/* Test en cours : formulaires désactivés */
#blocModeTest.testEnCours .toggleSlider {
    opacity: .5;
    cursor: default;
}

/* Formulaire d'ajout fictifs */
/* inutilisé 2026-06-13
.fictifsFormulaire {
    display: flex;
    align-items: center;
    gap: var(--gapMoyen);
    flex-wrap: wrap;
}
*/

/* Input et bouton même hauteur */
.inputNombreFictifs {
    width: 80px;
    padding: 4px 8px;
    text-align: center;
}

.inputNombreFictifs.hidden /*, .btnAjouterFictifs.hidden (inutilisé 2026-06-13) */ {
    display: none;
}

/* ============================================
   TABLEAU DONNÉES COLLECTÉES (dans recapBloc)
   ============================================ */

.tableauDonneesCollectees {
    border-collapse: collapse;
}

.tableauDonneesCollectees td {
    padding: 3px 12px 3px 0;
    vertical-align: baseline;
    max-width: 300px;
}

.tableauDonneesCollectees td:first-child {
    font: var(--fText16);
    color: var(--cNoir1);
    white-space: nowrap;
}

.tableauDonneesCollectees td:last-child {
    font: var(--fLight14);
    color: var(--cNoir1);
    white-space: nowrap;
}

/*!*********************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/regie/60_accesRegie.css ***!
  \*********************************************************************************************************************************/
/* ============================================
   PAGE ACCÈS RÉGIE (saisie code 5 lettres)
   Layout commun dans noyau/css/composants/formAccesCode.css
   ============================================ */

/* Lien connexion — spécifique à la régie uniquement */
.noteConnexion {
    margin-top: 24px;
    font: var(--fLight14);
    color: var(--cNoir3);
}

.noteConnexion a {
    color: var(--cLink);
    text-decoration: underline;
}

.noteConnexion a:hover {
    color: var(--cLinkh);
}

/*!***************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/studio/kitSingleton/css/carte.css ***!
  \***************************************************************************************************************************************/
/**
 * Kit CSS — Effets visuels (carte)
 *
 * Applique via data-effet sur #studioEcran.
 * Ajouter .vueCarte sur tout bloc a styliser.
 */

/* ── Variable bordure dérivée (une seule source) ── */
#studioEcran {
    --ilotBordure: 1px solid color-mix(in srgb, var(--couleurPrimaire) 30%, transparent);
}

/* ── Classes partagées ── */

.vueTitreCentre {
    font-size: var(--police1);
    font-family: 'Scada', 'Noto Sans', sans-serif;
    font-weight: 700;
    text-align: center;
    color: var(--couleurPrimaire);
}

/* Scene d'entree commune */
@keyframes vueApparition {
    from {
        opacity: 0;
        transform: translateY(0.75em);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

.vueAnimer {
    animation: vueApparition 150ms ease-out forwards;
}

/* Carte de base */
.vueCarte {
    border-radius: var(--ilotRayon);
    padding: var(--ilotPadding);
}

/* Glacis */
[data-effet="1"] .vueCarte {
    background-color: color-mix(in srgb, var(--couleurFond) 80%, transparent);
    backdrop-filter: blur(12px);
    border: 1px solid var(--couleurFond);
    box-shadow: 0 4px 20px var(--cNoir);
}

/* Transparent */
[data-effet="2"] .vueCarte {
    background-color: color-mix(in srgb, var(--couleurFond) 70%, transparent);
}

/* Voile */
[data-effet="3"] .vueCarte {
    background: linear-gradient(165deg,
        color-mix(in srgb, var(--couleurFond) 95%, transparent),
        color-mix(in srgb, var(--couleurFond) 40%, transparent));
}

/* Encadre */
[data-effet="4"] .vueCarte {
    background-color: var(--couleurFond);
    border: 2px solid var(--couleurPrimaire);
}

/* Ombre */
[data-effet="5"] .vueCarte {
    background-color: var(--couleurFond);
    box-shadow: 0 4px 20px var(--cOmbreForte);
}

/* Popup : ombre portee pour detacher du fond */
.vuePopup {
    box-shadow: 0 0 20px 10px var(--cNoir);box-shadow: 0 0 50px 50px var(--cNoir);
}

/* Ilots internes : bordure subtile dans la carte */
[data-effet] .vueCarte .vueTableau,
[data-effet] .vueCarte .vueMatchLigne {
    background: var(--couleurFond);
    border-radius: var(--ilotRayonInterne);
    border: var(--ilotBordure);
}

/* Gagnant / Perdant (generique) */
.vueGagnant {
    color: var(--couleurPrimaire);
}

.vuePerdant {
    font-weight: 200;
    opacity: 0.4;
}

/* Pagination */
.vuePagination {
    text-align: center;
}

/* Lot display */
.vueLot {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}

.vueLotImageWrap {
    flex: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    min-height: 0;
    width: 100%;
}

.vueLotImage {
    max-width: min(80%, calc(100vw * 4 / 16));
    max-height: min(90%, calc(100vh * 3 / 9));
    object-fit: contain;
    display: block;
}

/* Badge résultat — participant nommé ou numéro tombola */

@keyframes vueBadgeResultatPop {
    0%   { opacity: 0; transform: scale(0.2) rotate(-6deg); }
    60%  { opacity: 1; transform: scale(1.1) rotate(1deg); }
    80%  { transform: scale(0.96); }
    100% { opacity: 1; transform: scale(1) rotate(0deg); }
}

@keyframes vueBadgeResultatFlash {
    0%   {
        box-shadow:
            inset  6px  6px 18px 18px #FFB3C188,
            inset -6px  6px 18px 18px #B3D9FF88,
            inset  6px -6px 18px 18px #B3FFB388,
            inset -6px -6px 18px 18px #FFF3B388;
    }
    100% { box-shadow: inset 0 0 0 0 transparent; }
}

.vueBadgeResultat.vueAnimer {
    animation: vueBadgeResultatPop 550ms cubic-bezier(0.34, 1.56, 0.64, 1) forwards,
               vueBadgeResultatFlash 700ms ease-out forwards;
}

.vueBadgeResultat {
    font-size: var(--police1);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    padding: 0.5em 1em;
    border: 1px solid transparent;
    border-radius: var(--ilotRayonInterne);
    outline: 1px solid var(--cNoir);
    outline-offset: -1px;
    overflow: hidden;
    width: 100%;
    max-width: 100%;
    min-height: 2.2em;
    flex-shrink: 0;
}

.vueBadgeResultatVide {
    background: #00000005;
    outline-color: #0005;
}

.vueBadgeResultatNom {
    position: relative;
    z-index: 1;
    font-weight: 700;
    color: var(--cNoir);
    text-align: center;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    min-width: 0;
}

@keyframes vueBadgeResultatEcarter {
    0%   { letter-spacing: 0; }
    100% { letter-spacing: 0.3em; }
}

.vueBadgeResultatNomChiffres {
    letter-spacing: 0.3em;
}

.vueBadgeResultat.vueAnimer .vueBadgeResultatNomChiffres {
    animation: vueBadgeResultatEcarter 500ms cubic-bezier(0.34, 1.56, 0.64, 1) 100ms both;
}

.vueBadgeResultatNumero {
    position: relative;
    z-index: 1;
    font-size: 0.75em;
    font-weight: 400;
    color: var(--cNoir);
    opacity: 0.7;
    text-align: center;
}

/* Séparateurs directionnels */
.vueSeparateurH,
.vueSeparateurV {
    flex-shrink: 0;
    background: color-mix(in srgb, var(--couleurSecondaire) 15%, transparent);
}

.vueSeparateurH { width: 100%; height: 1px; }
.vueSeparateurV { height: 100%; width: 1px; }

/*!**************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/composants/formAccesCode.css ***!
  \**************************************************************************************************************************************/
/* ============================================
   FORMULAIRE ACCÈS CODE (partagé régie + borne)
   Styles communs pour la saisie du code 5 lettres
   ============================================ */

/* ============================================
   PAGE D'ACCÈS CODE — Layout partagé
   Utilisé par regieAcces.twig et borneAcces.twig
   ============================================ */

.pageAccesCode {
    min-height: 100vh;
    min-height: 100dvh;
    display: flex;
    align-items: center;
    justify-content: center;
    padding: 20px;
    background: var(--cBlanc02);
}

.contenuAccesCode {
    width: 100%;
    max-width: 400px;
    text-align: center;
    padding: 40px 32px;
    background: var(--cBlanc);
    border-radius: var(--borderR2);
    box-shadow: var(--ombrePortee);
}

.contenuAccesCode h1 {
    font: var(--fH2);
    margin-bottom: 12px;
}

.accesCodeInstruction {
    font: var(--fText16);
    color: var(--cNoir3);
    margin-bottom: 24px;
}

.contenuAccesCode .alertErreur {
    background: var(--cRouge6aht);
    color: var(--cRouge6);
    padding: 12px 16px;
    border-radius: var(--borderR1);
    margin-bottom: 20px;
    font: var(--fText16);
}

.contenuAccesCode .alertBlocage {
    background: var(--cOrFond);
    color: var(--cOrh);
    padding: 24px;
    border-radius: var(--borderR2);
    font: var(--fText16);
}

.contenuAccesCode .alertBlocage p {
    margin: 0 0 8px;
}

.contenuAccesCode .alertBlocage p:last-child {
    margin-bottom: 0;
}

.formAccesCode {
    display: flex;
    flex-direction: column;
    gap: var(--gapLarge);
}

/* ============================================
   CHAMP CODE — Saisie 5 lettres
   ============================================ */

.champCode {
    display: flex;
    justify-content: center;
    position: relative;
    margin-bottom: 15px;
}

.inputCodeAcces {
    width: 100%;
    max-width: 240px;
    padding: 20px;
    font: var(--fH1);
    font-family: var(--ffMono);
    text-align: center;
    text-transform: uppercase;
    letter-spacing: 0.3em;
    border: var(--borderForm);
    border-radius: var(--borderR2);
}

.inputCodeAcces::placeholder {
    color: var(--cNoir5);
    letter-spacing: 0.3em;
}

.inputCodeAcces:focus {
    outline: none;
    border-color: var(--cFormFocus);
    box-shadow: 0 0 0 3px var(--cFormFocusHalo);
}

.btnAcceder {
    width: 100%;
    padding: 18px 24px;
    font: var(--fCta16);
    color: var(--cCtat);
    background: var(--cCta);
    border: none;
    border-radius: var(--borderR1);
    cursor: pointer;
    transition: background 0.15s;
}

.btnAcceder:hover {
    background: var(--cCtah);
}

/* Bouton toggle visibilité du code */
.btnTogglePassword {
    position: absolute;
    right: 55px;
    top: 45%;
    transform: translateY(-50%);
    width: 28px;
    height: 28px;
    padding: 4px;
    background: transparent;
    border: none;
    cursor: pointer;
    color: var(--cNoir4);
    transition: color 0.15s;
}

.btnTogglePassword:hover {
    color: var(--cNoir2);
}

.btnTogglePassword svg {
    width: 100%;
    height: 100%;
}

/* État par défaut : œil barré visible (code masqué) */
.btnTogglePassword .iconeOeil {
    display: none;
}

.btnTogglePassword .iconeOeilBarre {
    display: block;
}

/* État visible : œil normal visible (code affiché) */
.btnTogglePassword.visible .iconeOeil {
    display: block;
}

.btnTogglePassword.visible .iconeOeilBarre {
    display: none;
}

/*!*****************************************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/composants/surcouchePreview.css ***!
  \*****************************************************************************************************************************************/
/* ============================================
   SURCOUCHE APERÇU — pop-up iframe (composant noyau)

   Ouvre un aperçu (animation ou scénario) dans la page quand la fenêtre est
   assez grande, au lieu d'un nouvel onglet. Un seul système pour tous les
   aperçus, Régie comme Vitrine (décision PO 2026-07-18).

   Boutons : base .modaleClose (composants/boutonFermeture.css, source unique de la croix),
   surcouche = uniquement l'écart de taille ci-dessous.

   Markup généré par surcouchePreview.ts (noyau) sur les déclencheurs [data-preview]
   (liens href ou boutons data-url), aucun template :
   .surcouche > .surcoucheContenu > .surcoucheBarre (plein écran + croix) + .surcoucheIframe

   Les seuils d'ouverture (iframe 16/9 d'au moins 960×540 + marges 80/120)
   vivent dans surcouchePreview.ts — garder TS et dimensionnement CSS alignés.
   ============================================ */

/* Boutons de la barre : base .modaleClose (composant, croix comprise) — posée par le TS sur
   les deux boutons. Ici uniquement l'écart surcouche (44×44, icônes 24) + le masque plein écran. */

.surcouche {
    border: none;
    border-radius: var(--borderR1);
    padding: 0;
    box-shadow: var(--ombreModale);
    background: transparent;
}

.surcouche::backdrop {
    background: var(--cOverlay);
}

.surcoucheContenu {
    background: var(--cBlanc);
    border-radius: var(--borderR1);
    overflow: hidden;
    display: flex;
    flex-direction: column;
}

.surcoucheBarre {
    display: flex;
    justify-content: flex-end;
    border-bottom: var(--border);
}

/* Les deux boutons portent la classe .modaleClose (posée par le TS) : silhouette, croix et
   hover viennent du composant. Ici l'écart surcouche : boîte fixe 44×44, icônes 24. */
.surcoucheClose,
.surcouchePleinEcran {
    width: 44px;
    height: 44px;
    padding: 0;
}

.surcoucheClose::before,
.surcouchePleinEcran::before {
    width: 24px;
    height: 24px;
}

.surcouchePleinEcran::before {
    mask: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M8 3H5a2 2 0 0 0-2 2v3%27/%3E%3Cpath d=%27M21 8V5a2 2 0 0 0-2-2h-3%27/%3E%3Cpath d=%27M3 16v3a2 2 0 0 0 2 2h3%27/%3E%3Cpath d=%27M16 21h3a2 2 0 0 0 2-2v-3%27/%3E%3C/svg%3E") center / contain no-repeat;
    -webkit-mask: url("data:image/svg+xml,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 width=%2724%27 height=%2724%27 viewBox=%270 0 24 24%27 fill=%27none%27 stroke=%27black%27 stroke-width=%271.5%27 stroke-linecap=%27round%27 stroke-linejoin=%27round%27%3E%3Cpath d=%27M8 3H5a2 2 0 0 0-2 2v3%27/%3E%3Cpath d=%27M21 8V5a2 2 0 0 0-2-2h-3%27/%3E%3Cpath d=%27M3 16v3a2 2 0 0 0 2 2h3%27/%3E%3Cpath d=%27M16 21h3a2 2 0 0 0 2-2v-3%27/%3E%3C/svg%3E") center / contain no-repeat;
}

/* 16/9, aussi grand que la fenêtre le permet (marges : 80 en largeur, 120 en
   hauteur — la barre de la surcouche + l'air autour). */
.surcoucheIframe {
    display: block;
    border: none;
    width: min(calc(100vw - 80px), calc((100vh - 120px) * 16 / 9));
    aspect-ratio: 16 / 9;
}

/*!******************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/noyau/css/form.css ***!
  \******************************************************************************************************************/
fieldset {
    background-color: var(--cBlanc);
    border: var(--border);
    border-radius: var(--borderR1);
    margin: 10px 0;
    padding: 20px;
}

fieldset h3 {
    margin: 0 0 0.9375rem;
    color: var(--cLink);
}

hr {
    margin: 30px 0;
    border-top: var(--border);
    border-bottom: none;
}

hr.mini {
    margin: 10px 0;
    border-top: var(--border);
    border-bottom: none;
}

/* inutilisé 2026-06-13
#imgForm {
    max-width: 690px;
    width: 100%;
    margin: 15px 0;
}

#imgForm > div:last-child {
    aspect-ratio: 1100/449;
    max-width: 690px;
    width: 100%;
    margin-top: 60px;
    margin-bottom: 200px;
    background-size: contain;
    border: none;
    display: none;
}

#divForm {
    max-width: 690px;
    padding: 0 5px;
}

#divGlobalForm {
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    height: 100%;
    text-align: center;
    gap: 10px;
}
*/


@media all and (min-width: 1500px) {
    /* inutilisé 2026-06-13
    #divGlobalForm {
        flex-direction: row;
        align-items: center;
        justify-content: center;
        gap: 30px;
    }

    #divForm div:last-child {
        display: block;
    }

    #divForm {
        padding: 0 30px;
    }

    #imgForm div:last-child {
        display: block;
    }
    */
}

/* inutilisé 2026-06-13
input.phNoir::placeholder {
    color: var(--cNoir);
}
*/

label {
    display: flex;
    align-items: baseline;
    font: var(--fLabel);
    margin: 0 0 2px;
    padding: 0;
    color: var(--cNoir1);
    user-select: none;
}

/* Label facultatif : couleur atténuée */
label:has(.facultatif) {
    color: var(--cNoir3);
}

/* Conteneur désactivé (champ disabled) */
.disabledDiv {
    opacity: 0.5;
}

input, select, textarea {
    width: 100%;
    border: var(--borderInput);
    border-radius: var(--borderR1);
    padding: 7px 8px;
    font: var(--fText16);
    color: var(--cNoir2);
    box-sizing: border-box;
}

/* Inputs spéciaux : pas de width 100% */
input[type="color"],
input[type="checkbox"],
input[type="radio"],
input[type="range"] {
    width: auto;
}

/* Input couleur */
input[type="color"] {
    padding: 2px;
    height: 40px;
    min-width: 60px;
    cursor: pointer;
}

input:disabled,
select:disabled,
textarea:disabled {
    background: none;
    border: 1px dashed var(--cBlanc5);
    pointer-events: none;
}

input[type="file"] {
    padding: 5px;
    cursor: pointer;
    background: var(--cBlanc);
}

input[type="file"]::file-selector-button {
    font: var(--fText16);
    color: var(--cBlanc);
    background: var(--cCta);
    border: none;
    border-radius: var(--borderR1);
    padding: 6px 12px;
    cursor: pointer;
    margin-right: 10px;
}

input[type="file"]::file-selector-button:hover {
    background: var(--cCtah);
}

input::placeholder,
textarea::placeholder {
    color: var(--cNoir5);
}

textarea::placeholder {
    white-space: pre-line;
}


label .facultatif /*, label .facultatifSpan, label .modifiable (inutilisé 2026-06-13) */ {
    display: inline;
    color: var(--cBleu7_t);
    font: var(--fLight14);
    padding-left: 10px;
    text-transform: lowercase;
}

/* Cacher "Facultatif" sur les champs conditionnels */
label.sansFacultatif .facultatif {
    display: none;
}

/* Textes d'aide */
form small,
form small a,
.help-text {
    color: var(--cNoir4);
    display: block;
    font: var(--fLight14);
    margin-left: 0;
    max-width: calc(100vw - 85px);
    padding: 2px 0;
}

.help-text.help-alerte {
    color: var(--cRouge6);
}
/* inutilisé 2026-06-13
div.cbForm input {
    cursor: pointer;
    width: auto;
    margin-top: 0;
}

div.cbForm label {
    cursor: pointer;
    text-align: justify;
}
*/

form {
    margin: 0 auto;
    padding: 0;
    text-align: left;
    max-width: 600px;
    min-width: auto;
    width: 100%;
}

/* inutilisé 2026-06-13
form > div > div.rowForm div {
    margin: 5px 0;
}

form > div.rowForm {
    margin: 0;
}

form > div.rowForm div.rowFormDownTxt {
    margin: 0 20px;
}

form > div.rowForm div.rowFormDownTxt > div {
    display: flex;
    justify-content: center;
    align-items: center;
    border: 3px solid var(--cBlanc03);
    border-radius: 10px;
    margin: 0;
    font: var(--fLight14);
    text-align: center;
    height: 100%;
    width: 100%;
    background-color: var(--cBlanc);
}
*/

/* inutilisé 2026-06-13
.infoLight {
    opacity: .8;
}
*/

/* inutilisé 2026-06-13
#formGainImg {
    grid-column: 1 / 2;
}

#formFormulaire {
    grid-column: 2 / 3;
    max-width: 320px;
}

p#pML {
    margin: 0 10% 0 38%;
    grid-column: 1/3;
}
*/

/* inutilisé 2026-06-13
.rowForm {
    display: grid;
    grid-template-columns: 100% 0%;
}

.rowForm ul {
    color: var(--cRouge);
    margin-block-start: 3px;
    margin-block-end: 3px;
    padding: 10px 0 0;
}
*/

/* Checkbox (.divCb) - Structure : .divCb > input + label > .svgCb + texte */
.divCb {
    position: relative;
    margin: 5px 0;
}

.divCb input[type="checkbox"] {
    position: absolute;
    opacity: 0;
    cursor: pointer;
    width: 0;
    height: 0;
}

.divCb label {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    cursor: pointer;
    margin: 0;
}

.divCb input[type="checkbox"]:disabled ~ label {
    opacity: 0.65;
}

.svgCb {
    width: 22px;
    height: 22px;
    color: var(--cBlanc);
    flex-shrink: 0;
}

.svgCb .checked {
    display: none;
}

.svgCb .checked path {
    fill: var(--cNoir1);
}

input[type="checkbox"]:checked ~ label .svgCb .checked {
    display: block;
}

input[type="checkbox"]:checked ~ label .svgCb .fondCb {
    fill: var(--cForm);
}

.divCbSupp input[type="checkbox"]:checked ~ label .svgCb svg .checked path {
    fill: var(--cRouge);
}

/* Radio button (.divRb) - Structure : .divRb > input + label > .svgRb + texte */
.divRb {
    position: relative;
    margin: 8px 0 5px;
}

.divRb input[type="radio"] {
    position: absolute;
    opacity: 0;
    cursor: pointer;
    width: 0;
    height: 0;
}

.divRb label {
    display: flex;
    align-items: center;
    gap: var(--gapDefaut);
    cursor: pointer;
    margin: 0;
}

.svgRb {
    width: 22px;
    height: 22px;
    color: var(--cBleu4);
    flex-shrink: 0;
}

.svgRb .checked {
    display: none;
}

input[type="radio"]:checked ~ label .svgRb .checked {
    display: block;
}

input[type="radio"]:checked ~ label .svgRb .fondCb {
    fill: var(--cForm);
}

/* inutilisé 2026-06-13
#uploadBtn1:focus {
    box-shadow: 0 0 0 2px var(--cForm);
}
*/

input:focus,
select:focus,
textarea:focus {
    border-color: var(--cFormFocus);
    outline: 2px solid var(--cFormFocus);
}

label small {
    display: inline-block;
    transform: translateY(-6px);
}

/* inutilisé 2026-06-13
.rowFormDownTxt {
    display: none;
}
*/

/* inutilisé 2026-06-13
#homeDivHaut {
    padding: 15px 15px 1px;
}

#homeDiv button.btn {
    bottom: 47px;
}

.formulaire #accrochePage {
    margin-bottom: -60px;
}

#homeDivBas {
    padding: 1px;
    margin: auto;
    width: 80%;
    text-align: center;
}
*/

/* inutilisé 2026-06-13
.rowOptin1,
.rowOptin2,
.rowOptin3,
.rowOptin4 {
    position: relative;
    margin: 5px 0;
}

.rowOptin1 label a {
    padding: 0;
}
*/


/* inutilisé 2026-06-13
#divForm div #loadingBarSpinner {
    display: none;
    justify-content: center;
    margin: 20px;
    font: var(--fLabel);
    color: var(--cTexte1);
    padding: 15px 30px;
}
*/

/* inutilisé 2026-06-13
#spinnerIcon {
    display: inline-block;
    width: 18px;
    height: 18px;
    margin-right: 10px;
    border: solid 2px transparent;
    border-top-color: var(--cTexte1);
    border-left-color: var(--cTexte1);
    border-radius: 50%;
    animation: animeSpinnerIcon 1000ms linear infinite;
}

@keyframes animeSpinnerIcon {
    0% {
        transform: rotate(0deg);
    }
    100% {
        transform: rotate(360deg);
    }
}
*/

.ctaSupprimer,
.ctaSecondaire,
.ctaValider /*, .ctaValider2 (inutilisé 2026-06-13) */ {
    width: 100%;
    height: 50px;
    padding: 10px 20px;
    margin-top: 20px;
    margin-bottom: 8px;
    cursor: pointer;
    font: var(--fCta16);
    border-radius: var(--borderR1);
}

.ctaSecondaire {
    display: block;
    text-align: center;
    border: 2px solid var(--cBleu4);
    background: var(--cBlanc);
    color: var(--cBleu4);
}

.ctaValider /*, .ctaValider2 (inutilisé 2026-06-13) */ {
    border: none;
    background: var(--cBleu4a);
    color: var(--cBleu4at);
}

.ctaSupprimer {
    border: 2px solid var(--cBlanc03);
    color: var(--cRouge6);
}

.ctaValider:hover /*, .ctaValider2:hover (inutilisé 2026-06-13) */ {
    background: var(--cBleu4ah);
    color: var(--cBleu4ht);
}

.ctaValider:disabled,
/* .ctaValider2:disabled, (inutilisé 2026-06-13) */
.ctaSecondaire:disabled,
.ctaSupprimer:disabled {
    opacity: 0.4;
    cursor: wait;
    pointer-events: none;
    filter: grayscale(1);
}

.formulaire {
    display: grid;
    grid-template-columns: 1fr;
    grid-template-rows: auto;
}

@media (min-width: 650px) {

    .formulaire {
        grid-template-columns: 1fr 1fr;
        grid-template-rows: auto;
        gap: 0 var(--gapListe); /* aligné 30 -> 32px (échelle PO 2026-07-18) */
    }

    /* inutilisé 2026-06-13
    .formulaireBorne {
        grid-column: 1 / 2;
        grid-row: 1 / 2;
    }

    .formulaireDate {
        grid-column: 1 / 2;
        grid-row: 2 / 3;
    }

    .formulaireCommercial {
        grid-column: 1 / 2;
        grid-row: 3 / 4;
    }

    .formulaireMagasin {
        grid-column: 2 / 3;
        grid-row: 1 / 5;
        display: grid;
    }
    */

}

/* inutilisé 2026-06-13
p#messageDate {
    color: var(--cNoir3);
    font-style: italic;
}

p#messageDate.erreurDate,
p#messageDate2.erreurDate {
    color: var(--cRouge);
    font-style: normal;
}
*/

fieldset ul {
    margin: 0 0 10px 0;
}

fieldset ul li {
    color: var(--cRouge);
}

/* inutilisé 2026-06-13
.imgBorne {
    max-width: 100%;
    height: auto;
    margin: 0 auto;
    display: block;
}
*/

label.required {
    position: relative;
    width: max-content;
}
/* inutilisé 2026-06-13
label.required2:after {
    content: "*";
    margin-left: 3px;
    color: var(--cNoir2);
}
*/

textarea {
    width: 100%;
    height: 100px;
    resize: vertical;
    border-bottom-right-radius: 0;
}

/*# sourceMappingURL=data:application/json;charset=utf-8;base64,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QjtRQUM5Qix3QkFBd0I7UUFDeEIsc0JBQXNCLEVBQUUsOENBQThDO0lBQzFFOztJQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FxQkM7O0FBRUw7O0FBRUE7Ozs7Ozs7Ozs7O0NBV0M7O0FBRUQ7SUFDSSxrQkFBa0I7QUFDdEI7O0FBRUE7SUFDSSxvQkFBb0I7QUFDeEI7O0FBRUE7Ozs7Ozs7Q0FPQzs7QUFFRDtJQUNJLGtCQUFrQjtJQUNsQixrQkFBa0I7QUFDdEI7QUFDQTs7Ozs7O0NBTUM7O0FBRUQ7SUFDSSxXQUFXO0lBQ1gsYUFBYTtJQUNiLGdCQUFnQjtJQUNoQiw2QkFBNkI7QUFDakMsQyIsInNvdXJjZXMiOlsid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3MvMDBfcmVzZXQuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3MvMTBfZm9udC5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy8zMF9iYXNlLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzLzMxX2N0YS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy80Ml9hdXRoLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL2hhdXREZVBhZ2VDb21wdGUuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3MvcmVnaWUvNTNfYmxvY3MuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3MvcmVnaWUvNTRfaWNvbmVzLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL3JlZ2llLzU1X3NpZGViYXJFdmVuZW1lbnQuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3MvcmVnaWUvNTVfZXZlbmVtZW50cy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9yZWdpZS81Nl9ydWJyaXF1ZXMuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3MvcmVnaWUvNTVfZmlsdHJlcy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9yZWdpZS81NV9zY2VuYXJpb3NDYXRhbG9ndWUuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3MvcmVnaWUvNTVfc2NlbmFyaW9Nb2RpZmllci5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9yZWdpZS81Nl9zY2VuYXJpby9fZXRpcXVldHRlcy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9yZWdpZS81Nl9zY2VuYXJpby9fZ3JpbGxlLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL3JlZ2llLzU2X3NjZW5hcmlvL19mb3JtdWxhaXJlcy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9yZWdpZS81Nl9zY2VuYXJpby9fb25nbGV0TWVudS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9yZWdpZS81Nl9zY2VuYXJpby9fbWVudUFqb3V0ZXIuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3MvcmVnaWUvNTZfc2NlbmFyaW8vX2JyaXF1ZXNDb3VsZXVycy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9yZWdpZS81Nl9zY2VuYXJpby9fZHJhZ0Ryb3AuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3MvY29tcG9zYW50cy9ib3V0b25GZXJtZXR1cmUuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3MvcmVnaWUvNTZfc2NlbmFyaW8vX21vZGFsZS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9yZWdpZS81Nl9zY2VuYXJpby9fYWxlcnRlcy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9yZWdpZS81Nl9zY2VuYXJpby9fdXBsb2Fkcy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9yZWdpZS81Nl9zY2VuYXJpby9fYmxvY1Jlc2VhdVNvY2lhbC5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9yZWdpZS81Nl9zY2VuYXJpby9fb25nbGV0R3JvdXBlcy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9yZWdpZS81Nl9zY2VuYXJpby9fb25nbGV0RGlzdHJpYnV0aW9ucy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9yZWdpZS81Nl9zY2VuYXJpby9fb25nbGV0UmVzdWx0YXRzLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL3JlZ2llLzU2X3NjZW5hcmlvL19vbmdsZXRQdWJsaWNhdGlvbi5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9yZWdpZS81Nl9zY2VuYXJpby9fcmVjYXBpdHVsYXRpZi5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9yZWdpZS81Nl9zY2VuYXJpby5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9yZWdpZS81N19vbmdsZXRSZWdpZS5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9yZWdpZS82MF9hY2Nlc1JlZ2llLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvc3R1ZGlvL2tpdFNpbmdsZXRvbi9jc3MvY2FydGUuY3NzIiwid2VicGFjazovL3NvZi8uL2Fzc2V0cy9ub3lhdS9jc3MvY29tcG9zYW50cy9mb3JtQWNjZXNDb2RlLmNzcyIsIndlYnBhY2s6Ly9zb2YvLi9hc3NldHMvbm95YXUvY3NzL2NvbXBvc2FudHMvc3VyY291Y2hlUHJldmlldy5jc3MiLCJ3ZWJwYWNrOi8vc29mLy4vYXNzZXRzL25veWF1L2Nzcy9mb3JtLmNzcyJdLCJzb3VyY2VzQ29udGVudCI6WyIqLCA6OmFmdGVyLCA6OmJlZm9yZSB7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuYm9keSB7XG4gICAgbWFyZ2luOiAwO1xufVxuXG51bCB7XG4gICAgbGlzdC1zdHlsZS10eXBlOiBub25lO1xuICAgIHBhZGRpbmctaW5saW5lLXN0YXJ0OiAwO1xufSIsImh0bWwge1xuICAgIC8qIElsIGVzdCBpbnRlcmRpdCBkZSByYWpvdXRlciBkZXMgY291bGV1cnMgc2FucyBkZW1hbmRlciBsJ2FjY29yZCBkdSBQTyAqL1xuICAgIC0tY0JsYW5jMTogdmFyKC0tY0JsYW5jKTtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0JsYW5jMXA6ICNFMEUwRTA7ICovXG4gICAgLS1jQmxhbmMwMjogI0Y1RjVGNTtcbiAgICAtLWNCbGFuYzI6ICNGMEYwRjA7XG4gICAgLS1jQmxhbmMwMzogI2RjZTFlYTtcbiAgICAtLWNCbGFuYzM6ICNDQ0NGQ0M7XG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNCbGFuYzQ6ICNBQUFGQUE7ICovXG4gICAgLS1jQmxhbmM1OiAjOTk5Qzk5O1xuXG5cblxuICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgQ09VTEVVUlMgVEVYVEUgTk9JUiAtIFVUSUxJU0FUSU9OIE9CTElHQVRPSVJFXG4gICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuICAgIC8qIC0tY05vaXIxIDogw4lMw4lNRU5UUyBEJ0VNUEhBU0VcbiAgICAgICAtIFRpdHJlcyA6IGgxLCBoMiwgaDNcbiAgICAgICAtIFRleHRlIGRlcyBib3V0b25zIChxdWFuZCBwYXMgZGUgY291bGV1ciBkw6lmaW5pZSlcbiAgICAgICAtIExhYmVscyBvYmxpZ2F0b2lyZXMgKHJlcXVpcmVkKVxuICAgICAgIC0gTWVudXMgZGUgbmF2aWdhdGlvblxuICAgICAgIC0gQ2hlY2tib3ggZXQgcmFkaW8gYm91dG9uc1xuICAgICAgIC0gVmFsZXVyIHByaW5jaXBhbGUgZGFucyBsZXMgY29tcHRldXJzIChleDogXCIzXCIgZGFucyBcIjMgLyA1XCIpXG4gICAgKi9cbiAgICAtLWNOb2lyMTogIzE4MTgxODtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY05vaXIxbzogIzE4MTgxODU1OyAqL1xuXG4gICAgLyogLS1jTm9pcjIgOiBDT1JQUyBERSBURVhURVxuICAgICAgIC0gUGFyYWdyYXBoZXMgPHA+XG4gICAgICAgLSBMaXN0ZXMgPGxpPiwgw6ludW3DqXJhdGlvbnNcbiAgICAgICAtIExhYmVscyBmYWN1bHRhdGlmc1xuICAgICAgIC0gVGV4dGUgc2Fpc2kgZGFucyBsZXMgaW5wdXRzXG4gICAgICAgLSBUaXRyZXMgaDQsIGg1LCBoNlxuICAgICAgIC0gVmFsZXVyIHNlY29uZGFpcmUgZGFucyBsZXMgY29tcHRldXJzIChleDogXCIvIDVcIiBkYW5zIFwiMyAvIDVcIilcbiAgICAqL1xuICAgIC0tY05vaXIyOiAjMjgyODI4O1xuXG4gICAgLyogLS1jTm9pcjMgOiBURVhURSBURVJUSUFJUkVcbiAgICAgICAtIFBsYWNlaG9sZGVyc1xuICAgICAgIC0gTWVzc2FnZXMgZCdhaWRlIGRpc2NyZXRzXG4gICAgICAgLSBUZXh0ZSBkw6lzYWN0aXbDqVxuICAgICovXG4gICAgLS1jTm9pcjM6ICM1NTU7XG5cbiAgICAvKiAtLWNOb2lyNC01IDogVEVYVEUgVFLDiFMgQVRUw4lOVcOJXG4gICAgICAgLSDDiWzDqW1lbnRzIGTDqXNhY3RpdsOpc1xuICAgICAgIC0gVGV4dGUgZMOpY29yYXRpZlxuICAgICovXG4gICAgLS1jTm9pcjQ6ICM5OTk7XG4gICAgLS1jTm9pcjU6ICNCQkI7XG4gICAgLS1jQmxhbmM6ICNGRkY7XG4gICAgLS1jTm9pcjogIzAwMDtcbiAgICAtLWNUZXh0ZTE6ICMyMjI7XG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNUZXh0ZTI6ICM0NDQ7ICovXG4gICAgLS1jRm9ybTogIzAwMDtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0Zvcm1fYjogIzU1NTsgKi9cbiAgICAtLWNGb3JtRm9jdXM6IHZhcigtLWNDdGEpO1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jQmxldTogIzAyNUJBNzsgKi9cbiAgICAtLWNSb3VnZTogI0YxNUI0RTtcblxuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jUHJpbWFpcmU6ICNhZDAwMDA7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNQcmltYWlyZWg6ICNjZTAwMDA7ICovXG4gICAgLS1jUm91Z2U2OiAjOTMwMDAwO1xuICAgIC0tY1JvdWdlNmg6ICNjYzAwMDA7XG4gICAgLS1jUm91Z2U2YWh0OiAjZmZmRGZFO1xuXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNTdGF0dXQwOiAjODk5NmFjOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jU3RhdHV0MTogIzMwOGVkMTsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY1N0YXR1dDI6ICMxZWQxMGU7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNTdGF0dXQzOiAjYWZjMGFiOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jU3RhdHV0NDogI2FiYjNjMDsgKi9cbiAgICBcbiAgICAtLWNCYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIC0tY0xpbms6ICMwMDYyOWM7XG4gICAgLS1jTGlua2g6ICMwMDQyNjk7XG4gICAgLS1jQ3RhOiAjMzA4ZWQxO1xuICAgIC0tY0N0YWg6ICMyNTcyYTk7XG4gICAgLS1jQ3RhdDogI0ZGRjtcbiAgICAtLWNDdGF0aDogI0ZGRjtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0N0YTI6ICNlM2VlZjQ7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNDdGEyaDogI2JlZDhlNjsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0N0YTJ0OiAjMzA4ZWQxOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jQ3RhMnRoOiAjMzA4ZWQxOyAqL1xuXG4gICAgLS1jQmxldTQ6ICMwNkE7XG4gICAgLS1jQmxldTRhOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjMTdCLCAjMDU5IDEwMCUpO1xuICAgIC0tY0JsZXU0YXQ6ICNGOEY4RkY7XG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNCbGV1NGg6ICMyNDY7ICovXG4gICAgLS1jQmxldTRhaDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzE3QiwgIzE3QiAxMDAlKTtcbiAgICAtLWNCbGV1NGh0OiAjRjhGOEZGO1xuICAgIC0tY0JsZXU3X3Q6ICMwNDg7XG5cbiAgICAtLWNPcjogI2VhYjMwODtcbiAgICAtLWNPcmg6ICNjYThhMDQ7XG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNPcnQ6ICNmZmY7ICovXG4gICAgLS1jT3JGb25kOiAjZmVmY2U4O1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jT3JGb25kMjogI2ZlZjljMzsgKi9cblxuICAgIC0tY1N1Y2NlczogIzFlZDEwZTtcbiAgICAtLWNTdWNjZXNGb25kOiAjZjBmZmY0O1xuICAgIC0tY1N1Y2Nlc1RleHRlOiAjMjc2NzQ5O1xuXG4gICAgLyogTGF5b3V0ICovXG4gICAgLS1sYXJnZXVyOiAxMzYwcHg7XG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLW1heFdpZHRoOiA3NjBweDsgKi9cbiAgICAtLWNCZzogdmFyKC0tY0JsYW5jKTtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0JnX2I6ICNDQ0M7ICovXG5cbiAgICAvKiBOb2lyIHRyYW5zcGFyZW50IOKAlCBvbWJyZXMgKi9cbiAgICAtLWNPbWJyZTogIzAwMDI7ICAgICAgICAgICAgLyogZW52aXJvbiAxNSUgKi9cbiAgICAtLWNPbWJyZUZvcnRlOiAjMDAwNDsgICAgICAgLyogZW52aXJvbiAzMCUgKi9cblxuICAgIC8qIHRyYW5zcGFyZW50IOKAlCBvdmVybGF5cyAqL1xuICAgIC0tY092ZXJsYXk6ICMwMDA4OyAgICAgICAgICAvKiBlbnZpcm9uIDUwJSAqL1xuICAgIC0tY0JsYW5jT3ZlcmxheTogI0ZGRkM7ICAgICAvKiBlbnZpcm9uIDgwJSAqL1xuXG4gICAgLyogRm9jdXMgKi9cbiAgICAtLWNGb3JtRm9jdXNIYWxvOiAjMzA4RUQxMjY7ICAgIC8qIGJsZXUgZm9jdXMgMTUlICovXG5cbiAgICAvKiBPbWJyZXMgY29tcG9zw6llcyAqL1xuICAgIC0tb21icmVQb3J0ZWU6IDAgNHB4IDEycHggdmFyKC0tY09tYnJlKTtcbiAgICAtLW9tYnJlUG9ydGVlMjogMCAwcHggMjVweCAjMDAwO1xuICAgIC0tb21icmVNb2RhbGU6IDAgMTBweCA0MHB4IHZhcigtLWNPbWJyZUZvcnRlKTtcbiAgICAtLW9tYnJlSW50ZXJuZTogMCAwIDEwcHggMTBweCBpbnNldCB2YXIoLS1jQmxhbmMwMik7XG5cbiAgICAvKiBDb3VsZXVycyBWZXJ0ICh2aXRyaW5lKSAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jQmdWZXJ0X3M6IGxpbmVhci1ncmFkaWVudCgyMjBkZWcsICNFRkQsICNERkMpOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jQmdWZXJ0X2I6ICNCQ0E7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNWZXJ0MDogI0Y4RkZFODsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY1ZlcnQxOiAjRThGRkQ4OyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmVydDFfYjogI0NDQzsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY1ZlcnQyOiAjRUZDOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmVydDM6ICNDREE7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNWZXJ0M190OiAjMjMwOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmVydDNfbzogI0JEQUQ7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNWZXJ0M19oOiAjQUI3OyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmVydDNfaHQ6ICMwMDA7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNWZXJ0M19iOiAjNTU1OyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmVydDQ6ICNCQzg7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNWZXJ0NF90OiAjMDgxMTAwOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmVydDU6ICMzQzA7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNWZXJ0NV9hOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNkExLCAjNDgwIDEwMCUpOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmVydDVfYWg6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICM2QTEsICM2QTEgMTAwJSk7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNWZXJ0NV90OiAjRkZGOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmVydDY6ICM0NjM7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNWZXJ0Nl9oOiAjMzYyOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmVydDZfaHQ6ICNGOEZGRjg7ICovXG5cbiAgICAvKiBDb3VsZXVycyBOb2lyIGdyYWRpZW50cyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jTm9pcjNfYTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzUwNTg1OCwgIzMwMzgzOCAxMDAlKTsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY05vaXIzX2FoOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNTA1ODU4LCAjNTA1ODU4IDEwMCUpOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jTm9pcjNfYWhMaWdodDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzcwNzg3OCwgIzcwNzg3OCAxMDAlKTsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY05vaXIzX2F0OiAjRkZGOyAqL1xuXG4gICAgLyogQ291bGV1cnMgSmF1bmUgKi9cbiAgICAtLWNKYXVuZTU6ICNFQjI7XG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNKYXVuZTY6ICNGM0FFMTc7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNKYXVuZTZfdDogIzEwMDsgICAgICAgICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNKYXVuZTZfYTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgI0ZDMywgI0VBMSAxMDAlKTsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0phdW5lNl9iOiAjQzgwOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jSmF1bmU2X2g6ICNGQzM7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNKYXVuZTZfYWg6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNGQzMsICNGQzMgMTAwJSk7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNBdHRlc3RlOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsIHZhcigtLWNKYXVuZTUpLCAjRkMzKTsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0F0dGVzdGVfYjogI0QzOUUwMDsgKi9cblxuICAgIC8qIENvdWxldXJzIEJsZXUgY29tcGzDqW1lbnRhaXJlcyAqL1xuICAgIC0tY0JsZXUxOiAjRThGMEY4O1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jQmxldTFfczogbGluZWFyLWdyYWRpZW50KDIyMGRlZywgdmFyKC0tY0JsZXUxKSwgdmFyKC0tY0JsZXUxKSwgdmFyKC0tY0JsZXUxKSwgdmFyKC0tY0JsZXUzKSk7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNCbGV1Ml9zOiAjRDhFMEU4OyAqL1xuICAgIC0tY0JsZXUzOiAjQ0VGO1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jQmxldTNfYjogIzI4MjgyODsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0JsZXU0X2I6ICMxMTM7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNCbGV1NjogIzBBRjsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0JsZXU2X2FoOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCAjNkVGLCAjNkVGIDEwMCUpOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jQmxldTZfdDogIzE4MTgxODsgKi9cblxuICAgIC8qIENvdWxldXJzIFZpb2xldCAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmlvbGV0NjogI0EwRjsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY1Zpb2xldDZfYWg6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNkNzlhZjIsICNkNzlhZjIgMTAwJSk7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNWaW9sZXQ2X2h0OiAjMDAwOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVmlvbGV0Nl90OiAjRkZGOyAqL1xuXG4gICAgLyogQ291bGV1cnMgUm91Z2UgY29tcGzDqW1lbnRhaXJlcyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jUm91Z2UxOiAjQzMwOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jUm91Z2UxX3Q6ICNGRkY7ICovXG4gICAgLS1jUm91Z2UyOiAjQzQ0O1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jUm91Z2UzOiAjOTAwOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jUm91Z2U1X2E6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNGNTAsICNCMjAgMTAwJSk7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNSb3VnZTVfYWg6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICNGNTAsICNGNTAgMTAwJSk7ICovXG5cbiAgICAvKiBDb3VsZXVycyBzcMOpY2lhbGVzICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLXNBbGVydGVfczogI0RFQzRDNDsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY09rOiAjMzkxOyAqL1xuICAgIC0tY1Rlc3Q6ICNFQ0Y7XG4gICAgLS1jVGVzdDI6ICNkMmE4ZTA7XG4gICAgLS1jVGVzdDM6ICM5QjU5QjY7XG4gICAgLS1jVGVzdDVfYTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgIzlCNTlCNiwgIzc4M2I5MiAxMDAlKTtcbiAgICAtLWNWVGVzdDVfYWg6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sICM5QjU5QjYsICM5QjU5QjYgMTAwJSk7XG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNUZXN0X3Q6ICMwMDA7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNUdXRvOiAjQzZGOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVHV0b190OiAjMDAwOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jVHV0b19haDogI2Q3OWFmMjsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0JsYW5jMV90OiAjMTgxODE4OyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jUGxhY2Vob2RlcjogIzg4ODsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0Zvcm1fczogI0ZGRjsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tYnNDdGE6IDAgN3B4IDE0cHggIzMzNTIsIDAgM3B4IDZweCAjMDAwMTsgKi9cblxuICAgIC8qIEZvcm11bGFpcmVzIHV0aWxpc2F0ZXVyICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNGb3JtVXNyOiAjRUVGQUZGOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jRm9ybVVzcl9iOiAjMzM0OyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jRm9ybVVzcl9oOiAjRkZGOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jRm9ybVVzcl9iZjogIzBBRjsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0Zvcm1Vc3JfY2I6ICMwNTk7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNGb3JtX2JmOiAjM0MwOyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jRm9ybV9jYjogIzU5MDsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY09rX2I6ICM4Rjg7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNLb19iOiAjRjg4OyAqL1xuXG4gICAgLyogTG9nbyAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jTG9nbzE6ICNFQkY3RTQ7ICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNMb2dvMjogI0M2RTlBRjsgKi9cblxuICAgIC0tZmZCYXNlOiAnTm90byBTYW5zJywgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgLS1mZk1vbm86ICdKZXRCcmFpbnNNb25vJywgJ1ZlcmRhbmEnLCBtb25vc3BhY2U7XG5cbiAgICAvKiBJbCBlc3QgaW50ZXJkaXQgZGUgcmFqb3V0ZXIgZGVzIHN0eWxlcyB0eXBvIHNhbnMgZGVtYW5kZXIgbCdhY2NvcmQgZHUgUE8gKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tZlRpdHJlOiBub3JtYWwgbm9ybWFsIDcwMCAzMnB4ICdTY2FkYScsIHNhbnMtc2VyaWY7ICovXG4gICAgLS1mSDE6IG5vcm1hbCBub3JtYWwgNzAwIDMycHggJ1NjYWRhJywgc2Fucy1zZXJpZjtcbiAgICAtLWZIMjogbm9ybWFsIG5vcm1hbCA3MDAgMjRweCAnU2NhZGEnLCBzYW5zLXNlcmlmO1xuICAgIC0tZkgzOiBub3JtYWwgbm9ybWFsIDQwMCAyMnB4ICdTY2FkYScsIHNhbnMtc2VyaWY7XG4gICAgLS1mSDQ6IG5vcm1hbCBub3JtYWwgNDAwIDE4cHggJ1NjYWRhJywgc2Fucy1zZXJpZjtcbiAgICAtLWZNZW51MTQ6IG5vcm1hbCBub3JtYWwgNDAwIDE0cHggJ01vbnRzZXJyYXQnLCBzYW5zLXNlcmlmO1xuICAgIC0tZkN0YTE2OiBub3JtYWwgbm9ybWFsIDcwMCAxOHB4ICdNb250c2VycmF0Jywgc2Fucy1zZXJpZjtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tZk1vbm8xNjogbm9ybWFsIG5vcm1hbCA0MDAgMTZweCAnSmV0QnJhaW5zTW9ubycsICdDb3VyaWVyIE5ldycsIENvdXJpZXIsIG1vbm9zcGFjZTsgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tZk1vbm8yNDogbm9ybWFsIG5vcm1hbCA0MDAgMjRweCAnSmV0QnJhaW5zTW9ubycsICdDb3VyaWVyIE5ldycsIENvdXJpZXIsIG1vbm9zcGFjZTsgKi9cbiAgICAtLWZNb25vMjRiOiBub3JtYWwgbm9ybWFsIDcwMCAyNHB4ICdKZXRCcmFpbnNNb25vJywgJ0NvdXJpZXIgTmV3JywgQ291cmllciwgbW9ub3NwYWNlO1xuICAgIC0tZkN0YTIwOiBub3JtYWwgbm9ybWFsIDcwMCAyMHB4ICdNb250c2VycmF0Jywgc2Fucy1zZXJpZjtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tZkxlZ2VuZDE2OiBub3JtYWwgbm9ybWFsIDQwMCAyMHB4ICdTY2FkYScsIHNhbnMtc2VyaWY7ICovXG4gICAgLS1mTGlnaHQxNDogaXRhbGljIG5vcm1hbCAyMDAgMTRweCAnTm90byBTYW5zJywgVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAtLWZNaW5pMTE6IGl0YWxpYyBub3JtYWwgMjAwIDExcHggJ05vdG8gU2FucycsIFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgLS1mVGV4dDE2OiBub3JtYWwgbm9ybWFsIDQwMCAxNnB4ICdOb3RvIFNhbnMnLCBWZXJkYW5hLCBHZW5ldmEsIEFyaWFsLCBzYW5zLXNlcmlmO1xuICAgIC0tZlRleHQxNlN0cm9uZzogbm9ybWFsIG5vcm1hbCA3MDAgMTZweCAnTm90byBTYW5zJywgVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAtLWZJdGFsaWMxNjogaXRhbGljIG5vcm1hbCA0MDAgMTZweCAnTm90byBTYW5zJywgVmVyZGFuYSwgR2VuZXZhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICAtLWZBbGVydGUxNjogaXRhbGljIHNtYWxsLWNhcHMgNzAwIDIwcHggJ05vdG8gU2FucycsIFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgLS1mTGFiZWw6IG5vcm1hbCBub3JtYWwgNDAwIDE0cHggJ05vdG8gU2FucycsIFZlcmRhbmEsIEdlbmV2YSwgQXJpYWwsIHNhbnMtc2VyaWY7XG5cbiAgICAtLWJvcmRlcjogMXB4IHNvbGlkICNkY2UxZWE7XG4gICAgLS1ib3JkZXJSMDogM3B4O1xuICAgIC0tYm9yZGVyUjE6IDVweDtcbiAgICAtLWJvcmRlclIyOiA3cHg7XG4gICAgLS1ib3JkZXJDYXJ0ZTogMXB4IHNvbGlkIHZhcigtLWNOb2lyNCk7XG4gICAgLS1ib3JkZXJGb3JtOiAxcHggc29saWQgdmFyKC0tY05vaXI1KTtcbiAgICAtLWJvcmRlcklucHV0OiAxcHggc29saWQgdmFyKC0tY05vaXI1KTtcblxuICAgIC8qIEVzcGFjZW1lbnRzIOKAlCBub21tw6lzIHBhciByw7RsZSAoY29tbWUgbGVzIGJvcmR1cmVzKSwgYWNjb3JkIFBPIDIwMjYtMDctMDMuXG4gICAgICAgTWlncmF0aW9uIHByb2dyZXNzaXZlIDogbmUgcmVtcGxhY2VyIHVuZSB2YWxldXIgZW4gZHVyIHF1ZSBzaSBsZSByw7RsZSBFVCBsYSB2YWxldXJcbiAgICAgICBjb3JyZXNwb25kZW50IChuby1vcCB2aXN1ZWwpIDsgYWxpZ25lciB1bmUgZMOpcml2ZSBkZSB2YWxldXIgPSBkw6ljaXNpb24gw6AgcGFydC4gKi9cbiAgICAtLWdhcExpc3RlOiAzMnB4OyAgIC8qIGVudHJlIGxlcyDDqWzDqW1lbnRzIGQndW5lIGxpc3RlLiBMYSBjb2xvbm5lIHF1aSBib3JkZSBsYSBsaXN0ZSAoZXguIHBhbm5lYXUgZGUgZmlsdHJlcykgcHJlbmQgbGUgTcOKTUUgZ2FwIDogZGV1eCByeXRobWVzIGRpZmbDqXJlbnRzIGPDtHRlIMOgIGPDtHRlLCBjJ2VzdCBtb2NoZSAqL1xuICAgIC0tcGFkZGluZ0NvcnBzOiAyMHB4OyAgIC8qIGludMOpcmlldXIgZCd1biBjb3JwcyBkZSBibG9jIC8gcGFubmVhdSAvIG1vZGFsZSAqL1xuICAgIC0tZ2FwRGVmYXV0OiA4cHg7ICAgICAgIC8qIGVzcGFjZSBzdGFuZGFyZCBlbnRyZSDDqWzDqW1lbnRzIGZyw6hyZXMgKGZsZXgvZ3JpZCkgKi9cbiAgICAtLWdhcFJlZHVpdDogNHB4OyAgICAgICAvKiB2YXJpYW50ZSB2b2xvbnRhaXJlbWVudCBwbHVzIHNlcnLDqWUgOiBsaXN0ZXMgY29tcGFjdGVzLCBncm91cGVzIGRlIGJvdXRvbnMgKi9cbiAgICAtLWdhcE1veWVuOiAxMnB4OyAgICAvKiBlc3BhY2VtZW50IGludGVybcOpZGlhaXJlIGVudHJlIMOpbMOpbWVudHMgZnLDqHJlcyAqL1xuICAgIC0tZ2FwTGFyZ2U6IDIwcHg7ICAgIC8qIGVzcGFjZW1lbnQgZ8OpbsOpcmV1eCBlbnRyZSBncm91cGVzIGQnw6lsw6ltZW50cyAqL1xuICAgIC0tcGFkZGluZ01pbmlEaXY6IDhweCAxNnB4OyAvKiBwYWRkaW5nIGRlIHRvdXQgbGVzIGJsb2NzIGF2ZWMgZm9uZCBjb2xvcsOpZXMgKi9cbiAgICAtLXBhZGRpbmdFdGlxdWV0dGU6IDNweCA2cHg7IC8qIHBhZGRpbmcgZGVzIHNwYW4gZXQgYXV0cmVzIGV0aXF1ZXR0ZSAqL1xuXG4gICAgLyogQm91dG9ucyA6IHVuIGJvdXRvbiBuZSBjaG9pc2l0IE5JIHNvbiBwYWRkaW5nLCBOSSBzYSBib3JkdXJlLCBOSSBzYSBjb3VsZXVyXG4gICAgICAgKGTDqWNpc2lvbiBQTyAyMDI2LTA3LTE4KS4gSWwgcHJlbmQgY2VzIHZhcmlhYmxlcyDigJQgb3UgcGFzIGRlIGJvcmR1cmUsIG91IGxhXG4gICAgICAgY291bGV1ciBkJ3VuIHLDtGxlIChwcmltYWlyZSwgZGFuZ2VyLCBhcGVyw6d1KSDigJQgamFtYWlzIHVuZSB2YWxldXIgw6AgbHVpLiAqL1xuICAgIC0tcGFkZGluZ0N0YTE0OiA4cHggMTZweDsgICAgICAgICAgICAgLyogcGFkZGluZyBkZSB0b3V0IGJvdXRvbiBjb21wYWN0ICguY3RhMTQsIC5jdGFEaXNjcmV0LCB0b2dnbGVzKSAqL1xuICAgIC0tYm9yZGVyQ3RhOiAxcHggc29saWQgdmFyKC0tY05vaXI0KTsgLyogTEEgYm9yZHVyZSBkJ3VuIGJvdXRvbiA6IGNlbGxlLWNpIG91IGF1Y3VuZSAqL1xuICAgIC0tY0N0YVRleHRlOiB2YXIoLS1jTm9pcjIpOyAgICAgICAgIC8qIExFIHRleHRlIGQndW4gYm91dG9uIG5ldXRyZSA6IGNlIG5vaXIgb3UgdW5lIGNvdWxldXIgZGUgcsO0bGUgKi9cblxuICAgIC0tY0VuVGV0ZTogI2YwZjRmNztcblxuICAgIC8qIENvdWxldXJzIGRlIGZvbmQgZGVzIGNhcnRlcyBUaW1lbGluZSAqL1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xMyAgLS1jRm9uZERpc3RyaWJ1dGlvbnMwOiAjZmRmZGY4OyAqL1xuICAgIC0tY0ZvbmREaXN0cmlidXRpb25zMDogI2ZhZmFmODtcbiAgICAtLWNGb25kRGlzdHJpYnV0aW9uczogI2Y3ZjZlNDtcbiAgICAtLWNGb25kRGlzdHJpYnV0aW9uczI6ICNlOWU1YWY7XG4gICAgLS1jRm9uZERpc3RyaWJ1dGlvbnMzOiAjQTc5ZTJlO1xuICAgIC0tY0ZvbmREaXN0cmlidXRpb25zNDogIzk3OGUxZTtcbiAgICAtLWNGb25kRGlzdHJpYnV0aW9uc19hOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB2YXIoLS1jRm9uZERpc3RyaWJ1dGlvbnMzKSwgdmFyKC0tY0ZvbmREaXN0cmlidXRpb25zNCkgMTAwJSk7XG4gICAgLS1jRm9uZERpc3RyaWJ1dGlvbnNfYWg6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHZhcigtLWNGb25kRGlzdHJpYnV0aW9uczMpLCB2YXIoLS1jRm9uZERpc3RyaWJ1dGlvbnMzKSAxMDAlKTtcbiAgICAtLWNGb25kR3JvdXBlczA6ICNmOGZjZmQ7XG4gICAgLS1jRm9uZEdyb3VwZXM6ICNlNGY0Zjc7XG4gICAgLS1jRm9uZEdyb3VwZXMyOiAjYWZkZmU5O1xuICAgIC0tY0ZvbmRHcm91cGVzMzogIzJlQTlCZjtcbiAgICAtLWNGb25kR3JvdXBlczQ6ICMxZTk5YWY7XG4gICAgLS1jRm9uZEdyb3VwZXNfYTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdmFyKC0tY0ZvbmRHcm91cGVzMyksIHZhcigtLWNGb25kR3JvdXBlczQpIDEwMCUpO1xuICAgIC0tY0ZvbmRHcm91cGVzX2FoOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB2YXIoLS1jRm9uZEdyb3VwZXMzKSwgdmFyKC0tY0ZvbmRHcm91cGVzMykgMTAwJSk7XG4gICAgLS1jRm9uZENvbmZpZzA6ICNmMmY0ZmE7XG4gICAgLS1jRm9uZENvbmZpZzogI0U3RUNGODtcbiAgICAtLWNGb25kQ29uZmlnMjogI2M1ZDBlODtcbiAgICAtLWNGb25kQ29uZmlnMzogIzQzNmJDMTtcbiAgICAtLWNGb25kQ29uZmlnNDogIzMzNWJiMTtcbiAgICAtLWNGb25kQ29uZmlnX2E6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHZhcigtLWNGb25kQ29uZmlnMyksIHZhcigtLWNGb25kQ29uZmlnNCkgMTAwJSk7XG4gICAgLS1jRm9uZENvbmZpZ19haDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdmFyKC0tY0ZvbmRDb25maWczKSwgdmFyKC0tY0ZvbmRDb25maWczKSAxMDAlKTtcbiAgICAtLWNGb25kU2NlbmVzMDogI2YxZjRmODtcbiAgICAtLWNGb25kU2NlbmVzOiAjZTNlZWY4O1xuICAgIC0tY0ZvbmRTY2VuZXMyOiAjYWNjZWU4O1xuICAgIC0tY0ZvbmRTY2VuZXMzOiAjMzA4ZWQxO1xuICAgIC0tY0ZvbmRTY2VuZXM0OiAjMjY3OGI1O1xuICAgIC0tY0ZvbmRTY2VuZXNfYTogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdmFyKC0tY0ZvbmRTY2VuZXMzKSwgdmFyKC0tY0ZvbmRTY2VuZXM0KSAxMDAlKTtcbiAgICAtLWNGb25kU2NlbmVzX2FoOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB2YXIoLS1jRm9uZFNjZW5lczMpLCB2YXIoLS1jRm9uZFNjZW5lczMpIDEwMCUpO1xuICAgIC0tY0ZvbmRBZmZpY2hhZ2VzMDogI2Y0ZjBmNjtcbiAgICAtLWNGb25kQWZmaWNoYWdlczogI2YzZThmNTtcbiAgICAtLWNGb25kQWZmaWNoYWdlczI6ICNkNmE1ZDY7XG4gICAgLS1jRm9uZEFmZmljaGFnZXMzOiAjOWMyN2IwO1xuICAgIC0tY0ZvbmRBZmZpY2hhZ2VzNDogIzhlMjRhYTtcbiAgICAtLWNGb25kQWZmaWNoYWdlc19hOiBsaW5lYXItZ3JhZGllbnQodG8gYm90dG9tLCB2YXIoLS1jRm9uZEFmZmljaGFnZXMzKSwgdmFyKC0tY0ZvbmRBZmZpY2hhZ2VzNCkgMTAwJSk7XG4gICAgLS1jRm9uZEFmZmljaGFnZXNfYWg6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIHZhcigtLWNGb25kQWZmaWNoYWdlczMpLCB2YXIoLS1jRm9uZEFmZmljaGFnZXMzKSAxMDAlKTtcblxuICAgIC8qIEFsaWFzIG51bcOpcmlxdWVzIChjb3JyZXNwb25kYW50IMOgIE5hdHVyZUJyaXF1ZS52YWx1ZSkgKi9cbiAgICAtLWNGb25kTmF0dXJlQnJpcXVlMTogdmFyKC0tY0ZvbmRHcm91cGVzKTsgICAvKiBQYXJ0aWNpcGFudHMgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0ZvbmROYXR1cmVCcmlxdWUxYjogdmFyKC0tY0ZvbmRHcm91cGVzMik7ICovXG4gICAgLS1jRm9uZE5hdHVyZUJyaXF1ZTI6IHZhcigtLWNGb25kRGlzdHJpYnV0aW9ucyk7ICAgICAgICAgICAvKiBMb3RzICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNGb25kTmF0dXJlQnJpcXVlMmI6IHZhcigtLWNGb25kRGlzdHJpYnV0aW9uczIpOyAqL1xuICAgIC0tY0ZvbmROYXR1cmVCcmlxdWUzOiB2YXIoLS1jRm9uZENvbmZpZyk7ICAgICAgICAgLyogQ29uZmlndXJhdGlvbnMgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0ZvbmROYXR1cmVCcmlxdWUzYjogdmFyKC0tY0ZvbmRDb25maWcyKTsgKi9cbiAgICAtLWNGb25kTmF0dXJlQnJpcXVlNDogdmFyKC0tY0ZvbmRTY2VuZXMpOyAgICAgLyogU2NlbmVzICovXG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzICAtLWNGb25kTmF0dXJlQnJpcXVlNGI6IHZhcigtLWNGb25kU2NlbmVzMik7ICovXG4gICAgLS1jRm9uZE5hdHVyZUJyaXF1ZTU6IHZhcigtLWNGb25kQWZmaWNoYWdlcyk7ICAgICAvKiBBZmZpY2hhZ2UgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTMgIC0tY0ZvbmROYXR1cmVCcmlxdWU1YjogdmFyKC0tY0ZvbmRBZmZpY2hhZ2VzMik7ICovXG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBUSVRSRVMgRVQgVFlQT0dSQVBISUVcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbmgxLCBoMiwgaDMge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG5oNCB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG59XG5cbmg1LCBoNiB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbnAsIGxpIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbn1cblxuaDEsIGgyLCBoMywgaDQsIGg1LCBoNiB7XG4gICAgZm9udDogdmFyKC0tZkgxKTtcbn1cblxuYnV0dG9uIHtcbiAgICBmb250OiB2YXIoLS1mQ3RhMTYpO1xufVxuXG5oMSB7XG4gICAgZm9udDogdmFyKC0tZkgxKTtcbiAgICBtYXJnaW46IDEwcHggMTVweCA1cHggMDtcbiAgICBwYWRkaW5nOiAwO1xufVxuXG5oMiB7XG4gICAgZm9udDogdmFyKC0tZkgyKTtcbiAgICBtYXJnaW46IDE1cHggMTBweCA1cHggMDtcbiAgICBwYWRkaW5nOiAwO1xufVxuXG5oMyB7XG4gICAgZm9udDogdmFyKC0tZkgzKTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbjogMjVweCAwIDE1cHg7XG59XG5cbmg0LCBoNSB7XG4gICAgZm9udDogdmFyKC0tZkg0KTtcbn1cblxuaDQsIGg1LCBoNiB7XG4gICAgbWFyZ2luOiAyNXB4IDAgN3B4O1xufVxuXG4vKiA8aT4gZXN0IHV0aWxpc8OpZSBjb21tZSBiYWxpc2UgZGUgc3VmZml4ZSAoIzIsICMz4oCmKSBzdXIgbGVzIG5vbXMgZCfDqWzDqW1lbnRzLlxuICAgTGEgYmFsaXNlIDxlbT4gcmVtcGxhY2UgPGk+IHBvdXIgbCdpdGFsaXF1ZSBzw6ltYW50aXF1ZS4gKi9cbmkge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBmb250LXNpemU6IDc1JTtcbiAgICBmb250LXdlaWdodDogMTAwO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbiAgICBmb250LWZhbWlseTogdmFyKC0tZmZCYXNlKTtcbn0iLCIvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiNkaXZCb2R5IHtcbiAgICBtYXgtd2lkdGg6IDkyMHB4O1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIHBhZGRpbmc6IDEwcHg7XG59XG4qL1xuXG4uY29udGVudSB7XG4gICAgcGFkZGluZzogMTBweCA0MHB4O1xufVxuXG4uem9uZUZsYXNoIHtcbiAgICBtYXgtd2lkdGg6IDExNTVweDtcbiAgICBtYXJnaW46IDAgYXV0byAyMHB4O1xuICAgIG1pbi1oZWlnaHQ6IDM4cHg7IC8qIEhhdXRldXIgZCd1biBtZXNzYWdlIGZsYXNoIChwYWRkaW5nIDEycHggKiAyICsgZm9udCAxNHB4KSAqL1xufVxuXG4uem9uZUZsYXNoIC5hbGVydFN1Y2Nlcyxcbi56b25lRmxhc2ggLmFsZXJ0RXJyZXVyIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4uem9uZUZsYXNoIC5hbGVydFN1Y2NlczpsYXN0LWNoaWxkLFxuLnpvbmVGbGFzaCAuYWxlcnRFcnJldXI6bGFzdC1jaGlsZCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbn1cblxuLyogQm94IGRlIHJhcHBlbCAobGVjdHVyZSBzZXVsZSkgKi9cbi5kaXZSYXBwZWwge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyLWxlZnQ6IHZhcigtLWJvcmRlcik7XG4gICAgYm9yZGVyLXJpZ2h0OiB2YXIoLS1ib3JkZXIpO1xuICAgIHBhZGRpbmc6IDIwcHggNDBweCAyNXB4O1xuICAgIHdpZHRoOiAzMzVweDtcbiAgICBtYXJnaW46IDA7XG59XG5cbi5kaXZSYXBwZWwgaDMge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luOiAwIDAgMjBweCAwO1xufVxuXG4vKiBDVEEgZGFucyBsZXMgYmxvY3MgZGl2UmFwcGVsIDogdGFpbGxlIGNvbnRlbnUsIGFsaWduw6kgw6AgZ2F1Y2hlICovXG4uZGl2UmFwcGVsIC5jdGFWYWxpZGVyLFxuLmRpdlJhcHBlbCAuY3RhU2Vjb25kYWlyZSB7XG4gICAgd2lkdGg6IGZpdC1jb250ZW50O1xuICAgIGhlaWdodDogYXV0bztcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDgwMHB4KSB7XG4gICAgLmNvbnRlbnUge1xuICAgICAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgfVxufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5kaXZDZW50cmUge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXJnaW46IDAgYXV0bztcbiAgICBtYXgtd2lkdGg6IDEyMDBweDtcbiAgICBwYWRkaW5nOiAyMHB4O1xufVxuKi9cblxuYm9keSB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgb3ZlcmZsb3cteDogaGlkZGVuO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNCYWNrZ3JvdW5kKTtcbn1cblxuI2JvZHlQYWdlIHtcbiAgICBtYXgtd2lkdGg6IDEyODBweDtcbiAgICBtYXJnaW46IDEwcHggYXV0bztcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4ubWFyZ2UyIHtcbiAgICBtYXJnaW46IDVweCBhdXRvO1xuICAgIHBhZGRpbmc6IDAgMjBweDtcbn1cbiovXG5cbkBtZWRpYSBhbGwgYW5kIChtaW4td2lkdGg6IDc1MHB4KSB7XG4gICAgLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4gICAgLm1hcmdlMiB7XG4gICAgICAgIG1hcmdpbjogMTBweCBhdXRvO1xuICAgICAgICBwYWRkaW5nOiAwIDIwcHg7XG4gICAgfVxuICAgICovXG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuI2NlbnRyZVBhZ2Uge1xuICAgIG1heC13aWR0aDogMTQ0MHB4O1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4jZGl2UGFnZSB7XG4gICAgbWFyZ2luOiAyNXB4IDEwcHggNTBweDtcbiAgICBtaW4taGVpZ2h0OiAyNXZoO1xufVxuXG4jcXVpU3Vpc0plIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbn1cbiNxdWlTdWlzSmVMb2dvdXQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDZweDtcbiAgICBvcGFjaXR5OiAuNztcbn1cblxuI3F1aVN1aXNKZUxvZ291dDpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgY29sb3I6IHZhcigtLWNMaW5rKTtcbiAgICBvcGFjaXR5OiAxO1xufVxuKi9cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuI2RpdkhlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxufVxuKi8iLCJidXR0b24ge1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBtYXJnaW46IDA7XG4gICAgY29sb3I6IHZhcigtLWNDdGEpO1xuICAgIGZvbnQ6IHZhcigtLWZDdGExNik7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG5idXR0b24uY3RhQW5udWxlcixcbmEge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTGluayk7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiB0cmFuc3BhcmVudDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbmJ1dHRvbi5jdGFBbm51bGVyLFxuYS5jdGFBbm51bGVyIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW46IDIwcHggMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG5idXR0b24uYnRuLCBhLmJ0biB7XG4gICAgbWluLXdpZHRoOiAxODBweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYm9yZGVyOiAwO1xuICAgIGNvbG9yOiB2YXIoLS1jQ3RhdCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY0N0YSk7XG4gICAgZm9udDogdmFyKC0tZkN0YTE2KTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuM3M7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHBhZGRpbmc6IDE1cHggMjBweDtcbiAgICBtYXJnaW46IDEwcHggMDtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pOyAvKiBhbGlnbsOpIDEwIC0+IDEycHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG59XG5cbmEuYnRuOmhvdmVyLCBidXR0b24uYnRuOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tY0N0YXRoKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jQ3RhaCk7XG5cbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG5idXR0b24uYnRuMiwgYS5idG4yIHtcbiAgICBtaW4td2lkdGg6IDEwMHB4O1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBib3JkZXI6IDA7XG4gICAgZm9udDogdmFyKC0tZkN0YTIwKTtcbiAgICBwYWRkaW5nOiAyMHB4IDQwcHg7XG4gICAgbWFyZ2luOiAyMHB4IGF1dG87XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjNzO1xuICAgIGNvbG9yOiB2YXIoLS1jVGV4dGUxKTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYmFja2dyb3VuZC1yZXBlYXQ6IHJvdW5kO1xuICAgIHdpZHRoOiBmaXQtY29udGVudDtcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xufVxuXG5idXR0b24jcmVkaXJlY3Rpb24uYnRuMiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG59XG5cbmJ1dHRvbiNyZWRpcmVjdGlvbi5idG4yOmhvdmVyLFxuYS5idG4yOmhvdmVyLCBidXR0b24uYnRuMjpob3ZlciB7XG4gICAgY29sb3I6IHZhcigtLWNDdGF0aCk7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY0N0YWgpO1xufVxuKi9cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIENUQSBDT01QQUNUIOKAlCBzb2NsZSAuY3RhMTRcblxuICAgTEEgc2lsaG91ZXR0ZSBkZXMgYm91dG9ucyBkJ2FjdGlvbiBjb21wYWN0cyAoYmFycmVzIGQnYWN0aW9uLCBjYXJ0ZXMpIDpcbiAgIGZvcm1lLCBwb2xpY2UsIGRpbWVuc2lvbnMgZMOpZmluaWVzIGljaSBldCBudWxsZSBwYXJ0IGFpbGxldXJzLiBNb2TDqGxlIDpcbiAgIGxlIGJvdXRvbiBkZSBsYSBiYXJyZSBkZSBjb250csO0bGUgYXBlcsOndSAoZMOpY2lzaW9uIFBPIDIwMjYtMDctMTgpLlxuICAgU2UgcG9zZSDDoCBjw7R0w6kgZHUgcsO0bGUgcXVpIGFwcG9ydGUgc2EgY291bGV1ciA6IGNsYXNzPVwiY3RhMTQgY3RhUHJldmlld0NvbnRyb2xlXCIuXG4gICAxNCA9IGxhIHRhaWxsZSBkZSBwb2xpY2UgKC0tZk1lbnUxNCkuIFNpbGhvdWV0dGUgZm9ybXVsYWlyZSDDoCB2ZW5pciA6IC5jdGExOC5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5jdGExNCB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyAvKiB1biA8YT4gaG9ycyBiYXJyZSBmbGV4IHJlc3RlIHVuIGJvdXRvbiAocGFkZGluZyB2ZXJ0aWNhbCByw6llbCkgKi9cbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ3RhMTQpO1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycywgY29sb3IgMC4ycywgYm9yZGVyLWNvbG9yIDAuMnM7XG59XG5cbi5jdGExNDpkaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMC40O1xuICAgIGN1cnNvcjogYXV0bztcbn1cblxuLyogUsO0bGUgYXBlcsOndSA6IExFIGJvdXRvbiBxdWkgbGFuY2UgdW4gYXBlcsOndSDigJQgdmlvbGV0IGFwZXLDp3UsIHBhcnRvdXRcbiAgIChjYXRhbG9ndWUsIHBhZ2UgTW9kaWZpZXIsIGZpY2hlcyBkJ2FuaW1hdGlvbikuIFVuIGFwZXLDp3UgPSB2aW9sZXQsXG4gICBkw6ljaXNpb24gUE8gMjAyNi0wNy0xOC4gKi9cbi5jdGFQcmV2aWV3IHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jVGVzdDVfYSk7XG4gICAgY29sb3I6IHZhcigtLWNCbGFuYyk7XG59XG5cbi5jdGFQcmV2aWV3OmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jVlRlc3Q1X2FoKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEJBREdFIE1PREUgVEVTVCAtIFLDqXV0aWxpc2FibGUgcGFydG91dFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmJhZGdlTW9kZVRlc3Qge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwYWRkaW5nOiAzcHggMTJweDtcbiAgICBmb250OiB2YXIoLS1mTGFiZWwpO1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNUZXN0Myk7XG4gICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICBtYXJnaW46IDEwcHggMDtcbn0iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUGFnZXMgZCdhdXRoZW50aWZpY2F0aW9uIChsb2dpbiwgcmVnaXN0ZXIsIGluc2NyaXB0aW9uKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmF1dGhGb3JtIHtcbiAgICBwYWRkaW5nOiA0MHB4IDIwcHggMjBweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4vKiBCb3ggZGUgY29ubmV4aW9uIC8gaW5zY3JpcHRpb24gKi9cbi5ib3hDZW50ZXJGb3JtIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMik7XG4gICAgcGFkZGluZzogMzBweCA0MHB4IDQwcHg7XG4gICAgd2lkdGg6IG1pbigzNjVweCwgOTUlKTtcbiAgICBib3gtc2hhZG93OiAwIDJweCAxMHB4IHZhcigtLWNPbWJyZSk7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4uYm94Q2VudGVyRm9ybSBoMyB7XG4gICAgcGFkZGluZzogMDtcbiAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5ib3hDZW50ZXJGb3JtIC5zb3VzVGl0cmUge1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgbWFyZ2luOiAwIDAgMjBweCAwO1xufVxuKi9cblxuZm9ybSA+IGRpdiB7XG4gICAgbWFyZ2luLWJvdHRvbTogMTVweDtcbn1cblxuLmJveENlbnRlckZvcm0gLmN0YVZhbGlkZXIge1xuICAgIG1hcmdpbi10b3A6IDVweDtcbn1cblxuLyogQWN0aW9ucyBkdSBmb3JtdWxhaXJlICh2YWxpZGVyICsgYW5udWxlcikgKi9cbi5mb3JtQWN0aW9ucyB7XG4gICAgbWFyZ2luLXRvcDogMTBweDtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4uZm9ybUFjdGlvbnNGbGV4IHtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNTAwcHgpIHtcbiAgICAuZm9ybUFjdGlvbnNGbGV4IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdy1yZXZlcnNlO1xuICAgICAgICBnYXA6IDE1cHg7XG4gICAgfVxuXG4gICAgLmZvcm1BY3Rpb25zRmxleCAuY3RhVmFsaWRlcixcbiAgICAuZm9ybUFjdGlvbnNGbGV4IC5jdGFTZWNvbmRhaXJlIHtcbiAgICAgICAgd2lkdGg6IGF1dG87XG4gICAgICAgIGZsZXg6IDAgMSBhdXRvO1xuICAgIH1cbn1cbiovXG5cbi8qIEFsZXJ0ZXMgKi9cbi5hbGVydEVycmV1cixcbi5hbGVydEVycmV1ck9BdXRoLFxuLmFsZXJ0U3VjY2VzIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jUm91Z2U2KTtcbiAgICBjb2xvcjogdmFyKC0tY0JsYW5jKTtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nTWluaURpdik7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbn1cblxuLyogTWVzc2FnZSBkJ2VycmV1ciBpbmxpbmUgT0F1dGggKi9cbi5hbGVydEVycmV1ck9BdXRoIHtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xufVxuXG4uYWxlcnRTdWNjZXMge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNTdWNjZXNGb25kKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jU3VjY2VzKTtcbiAgICBjb2xvcjogdmFyKC0tY1N1Y2Nlc1RleHRlKTtcbn1cblxuLyogTGllbiB2ZXJzIGF1dHJlIHBhZ2UgYXV0aCAqL1xuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4ubGllbkF1dGgge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBtYXJnaW4tdG9wOiAyNXB4O1xuICAgIHBhZGRpbmctdG9wOiAyMHB4O1xuICAgIGJvcmRlci10b3A6IHZhcigtLWJvcmRlcik7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbn1cblxuLmxpZW5BdXRoIGEge1xuICAgIGNvbG9yOiB2YXIoLS1jTGluayk7XG59XG5cbi5saWVuQXV0aCBhOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tY0JsYW5jKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQ3RhaCk7XG59XG4qL1xuXG4vKiBTw6lwYXJhdGV1ciBPQXV0aCAqL1xuLmJveENlbnRlckZvcm0gaHIge1xuICAgIG1hcmdpbjogNTBweCAwO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXIpO1xufVxuXG4vKiBTw6lwYXJhdGV1ciBhdmVjIGVzcGFjZSBibGFuYyAqL1xuaHIuc2VwYXJhdGV1ciB7XG4gICAgbWFyZ2luOiAzMHB4IDA7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci10b3A6IHZhcigtLWJvcmRlcik7XG59XG5cbi8qIEJvdXRvbiBPQXV0aCAqL1xuLmJ0bk9BdXRoIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgZ2FwOiB2YXIoLS1nYXBMYXJnZSk7IC8qIGFsaWduw6kgMTYgLT4gMjBweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nOiA4cHggMTJweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1jTm9pcjEpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIGZvbnQ6IHZhcigtLWZDdGExNik7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7XG59XG5cbi5idG5PQXV0aDpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0VuVGV0ZSk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi5idG5PQXV0aCBzdmcge1xuICAgIHdpZHRoOiA0MHB4O1xuICAgIGhlaWdodDogNDBweDtcbn1cblxuLyogw4l0YXQgZGUgY2hhcmdlbWVudCBkdSBmb3JtdWxhaXJlICovXG4uZm9ybUVuQ2hhcmdlbWVudCB7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi5mb3JtRW5DaGFyZ2VtZW50IGlucHV0LFxuLmZvcm1FbkNoYXJnZW1lbnQgc2VsZWN0LFxuLmZvcm1FbkNoYXJnZW1lbnQgdGV4dGFyZWEsXG4uZm9ybUVuQ2hhcmdlbWVudCBsYWJlbCB7XG4gICAgb3BhY2l0eTogMC41O1xufVxuXG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgSEFVVCBERSBQQUdFIENPTVBURVxuICAgSGVhZGVyIHNpbXBsaWZpw6kgcG91ciBsJ2VzcGFjZSBjb21wdGUgVml0cmluZVxuICAgTG9nbyBnYXVjaGUsIG1lbnUgZHJvaXRlXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4jaGF1dERlUGFnZUNvbXB0ZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBoZWlnaHQ6IDQycHg7XG4gICAgcGFkZGluZzogMCA0MHB4O1xuICAgIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlcik7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBMT0dPIMOAIEdBVUNIRVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuI2hhdXREZVBhZ2VDb21wdGUgLmhlYWRlckxvZ28ge1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuI2hhdXREZVBhZ2VDb21wdGUgLmhlYWRlckxvZ28gYSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxuXG4jaGF1dERlUGFnZUNvbXB0ZSAuaGVhZGVyTG9nbyBzdmcge1xuICAgIGhlaWdodDogMjhweDtcbiAgICBhc3BlY3QtcmF0aW86IDI0NSAvIDM2O1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTkFWSUdBVElPTiBDT01QVEUgw4AgRFJPSVRFXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4jaGVhZGVyTmF2Q29tcHRlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbiNoZWFkZXJOYXZDb21wdGUgdWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbn1cblxuI2hlYWRlck5hdkNvbXB0ZSB1bCBsaSBhIHtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjb2xvcjogdmFyKC0tY0xpbmspO1xuICAgIHBhZGRpbmc6IDhweCAxNnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4jaGVhZGVyTmF2Q29tcHRlIHVsIGxpIGE6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNDdGEpO1xuICAgIGNvbG9yOiB2YXIoLS1jQ3RhdCk7XG59XG5cbiNoZWFkZXJOYXZDb21wdGUgdWwgbGkgYS5hY3RpdmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNDdGEpO1xuICAgIGNvbG9yOiB2YXIoLS1jQ3RhdCk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBSRVNQT05TSVZFIC0gTU9CSUxFIDwgNjAwcHhcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbkBtZWRpYSAobWF4LXdpZHRoOiA2MDBweCkge1xuICAgICNoYXV0RGVQYWdlQ29tcHRlIHtcbiAgICAgICAgcGFkZGluZzogMCAxNnB4O1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIH1cblxuICAgICNoYXV0RGVQYWdlQ29tcHRlIC5oZWFkZXJMb2dvIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA0MDBweCkge1xuICAgICNoZWFkZXJOYXZDb21wdGUgdWwgbGkgYSB7XG4gICAgICAgIHBhZGRpbmc6IDhweCAxMnB4O1xuICAgICAgICBmb250LXNpemU6IDEzcHg7XG4gICAgfVxufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEJMT0NTIC0gQ29tcG9zYW50IGfDqW7DqXJpcXVlIFLDqWdpZVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAg4pqg77iPIFVuIFNPVVMtRU5TRU1CTEUgwqsgY2FydGUgwrsgZGUgY2UgY29tcG9zYW50IGVzdCBjb3Bpw6kgZGFuc1xuICAgc3R1ZGlvVml0cmluZS9hc3NldHMvdml0cmluZS9jc3MvYmxvY3MuY3NzIChwYXJ0aWUgLmJsb2MgLyAuYmxvY0NvcnBzIC9cbiAgIC5ibG9jVGl0cmUgLyAuYmxvY1RleHRlIC8gLmJsb2NBY3Rpb25zIHVuaXF1ZW1lbnQsIHBvdXIgbGEgbGlzdGUgZGVzXG4gICBzY8OpbmFyaW9zIGQnYXBlcsOndSkuIFNpIHR1IG1vZGlmaWVzIGwndW5lIGRlIGNlcyByw6hnbGVzIGljaSDihpIgZGVtYW5kZXIgYXUgUE9cbiAgIHMnaWwgZmF1dCBsYSByw6lwZXJjdXRlciBzdXIgbGEgY29waWUgdml0cmluZS4gTGUgcmVzdGUgZHUgY29tcG9zYW50IChzdGF0cyxcbiAgIGNvbXB0ZXVyLCByw6lvcmRvbm5hbmNlbWVudCwgZm9ybXVsYWlyZXMpIGVzdCBwcm9wcmUgw6AgbGEgcsOpZ2llLlxuXG4gICBDb21wb3NhbnQgdW5pZmnDqSBwb3VyIHRvdXMgbGVzIGJsb2NzIGRlIHR5cGUgOlxuICAgSWPDtG5lIHwgQ29udGVudSB8IEFjdGlvbnNcblxuICAgU3RydWN0dXJlIEhUTUwgOlxuICAgPGRpdiBjbGFzcz1cImJsb2MgYmxvY0dyb3VwZVwiPiAg4oaQIGJsb2NHcm91cGUgY29uc2VydsOpIHBvdXIgVFNcbiAgICAgICA8ZGl2IGNsYXNzPVwiYmxvY0ljb25lXCI+Li4uPC9kaXY+XG4gICAgICAgPGRpdiBjbGFzcz1cImJsb2NDb3Jwc1wiPlxuICAgICAgICAgICA8aDQgY2xhc3M9XCJibG9jVGl0cmVcIj4uLi48L2g0PlxuICAgICAgICAgICA8cCBjbGFzcz1cImJsb2NUZXh0ZVwiPi4uLjwvcD5cbiAgICAgICA8L2Rpdj5cbiAgICAgICA8ZGl2IGNsYXNzPVwiYmxvY0FjdGlvbnNcIj4uLi48L2Rpdj5cbiAgIDwvZGl2PlxuXG4gICBMRSBjb250ZW5ldXIgZGUgY29udGVudSBSw6lnaWUgKGTDqWNpc2lvbiBQTyAyMDI2LTA3LTE4KSA6IHRvdXRlIGJvw650ZVxuICAgwqsgdGl0cmUgKyB0ZXh0ZSArIGFjdGlvbnMgwrsgYWRvcHRlIGNlIGNvbXBvc2FudCDigJQgY2FydGVzIGR1IGNhdGFsb2d1ZSBkZVxuICAgc2PDqW5hcmlvcywgYmxvY3MgZGUgbGEgcGFnZSBNb2RpZmllciwgYmxvY3MgZCdvbmdsZXQuIFpvbmVzIG9wdGlvbm5lbGxlcyA7XG4gICBsZXMgY29udGV4dGVzIG4nYXBwb3J0ZW50IHF1ZSBkZXMgbW9kaWZpY2F0ZXVycyAoY291bGV1ciwgbGFyZ2V1cikuXG5cbiAgIE1vZGlmaWNhdGV1cnMgZGUgY2F0w6lnb3JpZSAoY291bGV1cnMgZCdpY8O0bmUpIDpcbiAgIC0gLmJsb2NHcm91cGVzIChvdSAuYmxvY0dyb3VwZSBwb3VyIGNvbXBhdCBUUylcbiAgIC0gLmJsb2NEaXN0cmlidXRpb25zXG4gICAtIC5ibG9jVGVsZWNoYXJnZXJcbiAgIC0gLmJsb2NHcm91cGUgKG1vZGUgdGVzdCwgY29tcGF0IFRTKVxuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIENPTlRFTkVVUiBQUklOQ0lQQUxcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuXG4uYmxvYyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgICBtYXgtd2lkdGg6IDYwMHB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJGb3JtKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuMnM7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgWk9ORSBJQ8OUTkUgKHdyYXBwZXIgdW5pcXVlbWVudClcbiAgIExlIHN0eWxlIGRlcyBpbWcvc3ZnIGV0IGxlcyBjb3VsZXVycyBkZSBmb25kXG4gICBwYXIgY2F0w6lnb3JpZSBzb250IGNlbnRyYWxpc8OpcyBkYW5zIDU0X2ljb25lcy5jc3NcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuXG4uYmxvY0ljb25lIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICBwYWRkaW5nOiAwIDRweCAwIDA7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgWk9ORSBDT05URU5VXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cblxuLmJsb2NDb3JwcyB7XG4gICAgZmxleDogMTtcbiAgICBwYWRkaW5nOiAxNnB4IDIwcHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwUmVkdWl0KTtcbn1cblxuLmJsb2NUaXRyZSB7XG4gICAgZm9udDogdmFyKC0tZkg0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICBtYXJnaW46IDA7XG59XG5cbi5ibG9jVGV4dGUge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIG1hcmdpbjogMDtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4uYmxvY1NvdXNUaXRyZSB7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG4qL1xuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIFpPTkUgQUNUSU9OU1xuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG5cbi5ibG9jQWN0aW9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG4gICAgcGFkZGluZzogMTZweCAyMHB4O1xuICAgIGJvcmRlci1sZWZ0OiB2YXIoLS1ib3JkZXIpO1xuICAgIG1pbi13aWR0aDogMjQwcHg7XG59XG5cbi5ibG9jQWN0aW9ucyAudG9nZ2xlQXZlY0xhYmVsIHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgU1RBVFMgKG5vbWJyZSArIGxhYmVsKVxuICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG5cbi5ibG9jU3RhdHMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTsgLyogYWxpZ27DqSA2IC0+IDhweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbiAgICBtYXJnaW4tdG9wOiA0cHg7XG59XG5cbi5ibG9jTm9tYnJlIHtcbiAgICBmb250OiB2YXIoLS1mTW9ubzI0Yik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi5ibG9jTGFiZWwge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIENPTVBURVVSIChncm9zIGNoaWZmcmUgYXZlYyBzw6lwYXJhdGV1cilcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuXG4uYmxvY0NvbXB0ZXVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG59XG5cbi5jb21wdGV1clZhbGV1ciB7XG4gICAgZm9udDogdmFyKC0tZk1vbm8yNGIpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4uY29tcHRldXJSZXN0ZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xufVxuXG4vKiBkaXNwbGF5OmZsZXggw6ljcmFzZXJhaXQgbCdhdHRyaWJ1dCBoaWRkZW4g4oaSIG9uIGxlIHLDqXRhYmxpdCBleHBsaWNpdGVtZW50LiAqL1xuLmNvbXB0ZXVyUmVzdGVbaGlkZGVuXSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLmNvbXB0ZXVyU2VwYXJhdGV1ciB7XG4gICAgZm9udDogdmFyKC0tZkgzKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXI0KTtcbn1cblxuLmNvbXB0ZXVyTGFiZWwge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIERBVEUgLyBJTkZPIFNFQ09OREFJUkVcbiAgIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuXG4uYmxvY0RhdGUgLyosIC5ibG9jVGVzdCAoaW51dGlsaXPDqSAyMDI2LTA2LTEzKSAqLywgLmJsb2NSZWZlcmVuY2VzIHtcbiAgICBmb250OiB2YXIoLS1mTGlnaHQxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG4gICAgbWFyZ2luLXRvcDogYXV0bztcbn1cblxuLyogSW5mb3Mgc2Vjb25kYWlyZXMgZW1waWzDqWVzIGVuIGJhcyBkZSBjYXJ0ZSA6IHNldWxlIGxhIHByZW1pw6hyZSBwcmVuZCBsJ2VzcGFjZSBsaWJyZSAqL1xuLmJsb2NSZWZlcmVuY2VzICsgLmJsb2NSZWZlcmVuY2VzLFxuLmJsb2NSZWZlcmVuY2VzICsgLmJsb2NEYXRlIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5ibG9jVGVzdCB7XG4gICAgY29sb3I6IHZhcigtLWNUZXN0Myk7XG59XG4qL1xuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIExJU1RFIEQnSVRFTVMgKGxvdHMpXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cblxuLmJsb2NMaXN0ZSB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBtYXJnaW46IDEycHggMCAwIDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xufVxuXG4uYmxvY0l0ZW0ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcE1veWVuKTtcbiAgICBwYWRkaW5nOiA4cHggMTJweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4uYmxvY0l0ZW1JbWFnZSB7XG4gICAgd2lkdGg6IDMycHg7XG4gICAgaGVpZ2h0OiAzMnB4O1xuICAgIG9iamVjdC1maXQ6IGNvdmVyO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbn1cblxuLmJsb2NJdGVtTGFiZWwge1xuICAgIGZsZXg6IDE7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi5ibG9jSXRlbVN0b2NrIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLnBhbm5lYXVGb3JtdWxhaXJlIGZvcm0gPiBkaXYuYmxvY1ZlcnRpY2FsLFxuLnNlY3Rpb25Gb3JtdWxhaXJlID4gZGl2LmJsb2NWZXJ0aWNhbCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pOyAvKiBhbGlnbsOpIDEwIC0+IDEycHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG4gICAgcGFkZGluZzogMTVweCAwO1xuICAgIG1hcmdpbjogMzBweCAyMHB4IDMwcHg7XG4gICAgYm9yZGVyLXRvcDogdmFyKC0tYm9yZGVyKTtcbn1cblxuLyogRGFucyB1bmUgc2VjdGlvbiBjYW5vbmlxdWUsIGxlIHJldHJhaXQgaG9yaXpvbnRhbCBlc3QgcG9ydMOpIHBhciBsYSBzZWN0aW9uIGVsbGUtbcOqbWUgKi9cbi5zZWN0aW9uRm9ybXVsYWlyZSA+IGRpdi5ibG9jVmVydGljYWwge1xuICAgIG1hcmdpbjogMTVweCAwIDEycHg7XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgUsOJT1JET05OQU5DRU1FTlQgKHBvaWduw6llICsgZmzDqGNoZXMpXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cblxuLmxpc3RlT3JkcmVQb2lnbmVlIHtcbiAgICB3aWR0aDogMTRweDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXI0KTtcbiAgICBjdXJzb3I6IGdyYWI7XG59XG5cbi5saXN0ZU9yZHJlUG9pZ25lZTphY3RpdmUge1xuICAgIGN1cnNvcjogZ3JhYmJpbmc7XG59XG5cbi5kaXZBY3Rpb25DbGFzc2VyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tZ2FwUmVkdWl0KTtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbn1cblxuLyogUGV0aXQgYm91dG9uIGljw7RuZSBjb21wYWN0IChmbMOoY2hlcywgKy/iiJIsIGV0Yy4pICovXG4ubWluaUFjdGlvbiB7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlcik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBwYWRkaW5nOiAycHggOHB4O1xuICAgIGZvbnQ6IHZhcigtLWZMYWJlbCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi5taW5pQWN0aW9uOmRpc2FibGVkIHtcbiAgICBvcGFjaXR5OiAwLjM7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG4ubWluaUFjdGlvbjpub3QoOmRpc2FibGVkKTpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xufVxuXG4ubGlzdGVPcmRyZUl0ZW0uZHJhZ2dpbmcge1xuICAgIG9wYWNpdHk6IDAuMztcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBSRVNQT05TSVZFXG4gICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cblxuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XG4gICAgLmJsb2Mge1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIH1cblxuICAgIC5ibG9jQWN0aW9ucyB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgICAgICAgYm9yZGVyLWxlZnQ6IG5vbmU7XG4gICAgICAgIGJvcmRlci10b3A6IHZhcigtLWJvcmRlcik7XG4gICAgICAgIHBhZGRpbmc6IDEycHggMjBweDtcbiAgICB9XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgSUPDlE5FUyAtIFN0eWxlcyBwb3VyIGxlcyBicmlxdWVzIGV0IGxlcyBibG9jc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgQ2UgZmljaGllciBjZW50cmFsaXNlIGxlIHN0eWxlIHZpc3VlbCBkZXMgaWPDtG5lc1xuICAgdXRpbGlzw6llcyDDoCBsYSBmb2lzIGRhbnMgOlxuICAgLSBsZXMgYnJpcXVlcyBkdSBtZW51IGQnYWpvdXQgKC5icmlxdWVJY29uZSBzdXIgaW1nL3N2ZylcbiAgIC0gbGVzIGJsb2NzIGRlIHLDqXN1bcOpIChpbWcvc3ZnIGRhbnMgLmJsb2NJY29uZSlcblxuICAgTGUgd3JhcHBlciAuYmxvY0ljb25lIGx1aS1tw6ptZSAoZmxleCwgcGFkZGluZykgcmVzdGVcbiAgIGRhbnMgNTNfYmxvY3MuY3NzIGNhciBjJ2VzdCBkZSBsYSBzdHJ1Y3R1cmUgZGUgY29tcG9zYW50LlxuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBTdHlsZSBkZSBiYXNlICovXG4uYnJpcXVlSWNvbmUsXG4uYmxvY0ljb25lIGltZyxcbi5ibG9jSWNvbmUgc3ZnIHtcbiAgICB3aWR0aDogNjRweDtcbiAgICBoZWlnaHQ6IDY0cHg7XG4gICAgcGFkZGluZzogNnB4O1xuICAgIG9iamVjdC1maXQ6IGNvbnRhaW47XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBGT05EUyBQQVIgQ0FUw4lHT1JJRVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmJyaXF1ZUdyb3VwZXMgLmJyaXF1ZUljb25lLFxuLmJsb2NHcm91cGUgLmJsb2NJY29uZSBpbWcsXG4uYmxvY0dyb3VwZSAuYmxvY0ljb25lIHN2Zyxcbi5ibG9jVGVsZWNoYXJnZXIgLmJsb2NJY29uZSBpbWcsXG4uYmxvY1RlbGVjaGFyZ2VyIC5ibG9jSWNvbmUgc3ZnIHsgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRHcm91cGVzKTsgfVxuXG4uYnJpcXVlRGlzdHJpYnV0aW9ucyAuYnJpcXVlSWNvbmUsXG4uYmxvY0Rpc3RyaWJ1dGlvbiAuYmxvY0ljb25lIGltZyxcbi5ibG9jRGlzdHJpYnV0aW9uIC5ibG9jSWNvbmUgc3ZnIHsgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmREaXN0cmlidXRpb25zKTsgfVxuXG4uYnJpcXVlQ29uZmlndXJhdGlvbnMgLmJyaXF1ZUljb25lLFxuLmJyaXF1ZUNvbmZpZyAuYnJpcXVlSWNvbmUgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZENvbmZpZyk7IH1cblxuLmJyaXF1ZVNjZW5lcyAuYnJpcXVlSWNvbmUgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZFNjZW5lcyk7IH1cblxuLmJyaXF1ZUFmZmljaGFnZXMgLmJyaXF1ZUljb25lIHsgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRBZmZpY2hhZ2VzKTsgfVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgSUPDlE5FIEQnVU4gU0PDiU5BUklPXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICBUb3Vqb3VycyDDoCBEUk9JVEUsIGV0IFNBTlMgZm9uZCAoZMOpY2lzaW9uIFBPIDIwMjYtMDctMzEpIDogbGVzIGZvbmRzIGNpLWRlc3N1c1xuICAgY29kZW50IHVuZSBjYXTDqWdvcmllIGRlIGJyaXF1ZSwgdW4gc2PDqW5hcmlvIG4nZW4gYSBhdWN1bmUuXG5cbiAgIExlIFNWRyBlc3QgaW5saW7DqSAoaWNvbmVTY2VuYXJpbyksIHBhcyBlbiA8aW1nPiA6IHNjZW5hcmlvcy97ZG9zc2llcn0vaWNvbmUuc3ZnXG4gICBlc3QgaG9ycyBwdWJsaWMvLiA2NHB4ID0gdGFpbGxlIGQnaWPDtG5lIHN0YW5kYXJkIGR1IHByb2pldC5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5zY2VuYXJpb0ljb25lIHtcbiAgICBmbGV4OiAwIDAgYXV0bztcbiAgICBhbGlnbi1zZWxmOiBmbGV4LXN0YXJ0O1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICAgIHdpZHRoOiA2NHB4O1xuICAgIGhlaWdodDogNjRweDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4uc2NlbmFyaW9JY29uZSBzdmcge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbn1cblxuLyogRGFucyB1bmUgY2FydGUgZHUgY2F0YWxvZ3VlLCBsJ2ljw7RuZSBzZSBjYWxlIHN1ciBsZSBwYWRkaW5nIGR1IGNvcnBzIGR1IGJsb2MuICovXG4uY3JlZXJTY2VuYXJpb0NhcnRlIC5zY2VuYXJpb0ljb25lIHtcbiAgICBtYXJnaW46IDE2cHggMjBweCAxNnB4IGF1dG87XG59XG5cbi8qIFBhZ2UgZCd1biBzY8OpbmFyaW8gOiBkZXNjcmlwdGlvbiDDoCBnYXVjaGUsIGljw7RuZSDDoCBkcm9pdGUuICovXG4uc2NlbmFyaW9FbnRldGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFNJREVCQVIgR0VTVElPTiDDiVbDiU5FTUVOVFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4jZ2VzdGlvbkV2ZW5lbWVudCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtaW4taGVpZ2h0OiBjYWxjKDEwMHZoIC0gNjBweCk7XG59XG4qL1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgU0lERUJBUlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4jc2lkZWJhckV2ZW5lbWVudCB7XG4gICAgd2lkdGg6IDIwMHB4O1xuICAgIG1pbi13aWR0aDogMjAwcHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xuICAgIGJvcmRlci1yaWdodDogdmFyKC0tYm9yZGVyKTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG59XG5cbiNzaWRlYmFyRW50ZXRlIHtcbiAgICBwYWRkaW5nOiAyMHB4IDE1cHg7XG4gICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyKTtcbn1cblxuI2N0YVNpZGViYXJSZXRvdXIge1xuICAgIGZvbnQ6IHZhcigtLWZNZW51MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTGluayk7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cblxuI2N0YVNpZGViYXJSZXRvdXI6aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jTGlua2gpO1xufVxuXG4jc2lkZWJhclRpdHJlIHtcbiAgICBmb250OiB2YXIoLS1mSDMpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIG1hcmdpbjogMDtcbiAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xufVxuKi9cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIE1FTlUgU0lERUJBUlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4jc2lkZWJhck1lbnUge1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDE1cHggMDtcbn1cblxuI3NpZGViYXJNZW51IGxpIHtcbiAgICBtYXJnaW46IDA7XG59XG5cbiNzaWRlYmFyTWVudSBhIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAxMnB4IDIwcHg7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG4gICAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzLCBib3JkZXItY29sb3IgMC4xNXM7XG59XG5cbiNzaWRlYmFyTWVudSBhOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMyk7XG59XG5cbiNzaWRlYmFyTWVudSBhLmFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMSk7XG4gICAgYm9yZGVyLWxlZnQtY29sb3I6IHZhcigtLWNDdGEpO1xuICAgIGNvbG9yOiB2YXIoLS1jQ3RhKTtcbiAgICBmb250LXdlaWdodDogNzAwO1xufVxuKi9cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIENPTlRFTlUgUFJJTkNJUEFMXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiNnZXN0aW9uQ29udGVudSB7XG4gICAgZmxleDogMTtcbiAgICBwYWRkaW5nOiAzMHB4IDQwcHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMSk7XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbn1cbiovXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBCTE9DIENPVUxFVVJTIChmb3JtdWxhaXJlIGNyw6lhdGlvbilcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi50aXRyZUV2ZW5lbWVudCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pOyAvKiBhbGlnbsOpIDEwIC0+IDEycHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG59XG5cbi8qIEFjdGlvbiBkZSBsJ2VuLXTDqnRlIChlbmdyZW5hZ2UgY29uZmlnIG91IGNyb2l4IGRlIGZlcm1ldHVyZSkgcG91c3PDqWUgdG91dCDDoCBkcm9pdGUuICovXG4udGl0cmVFdmVuZW1lbnRBY3Rpb24ge1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xufVxuXG4uYnRuQ29uZmlnT25nbGV0cyB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgd2lkdGg6IDIycHg7XG4gICAgaGVpZ2h0OiAyMnB4O1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjQpO1xuICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnM7XG59XG5cbi5idG5Db25maWdPbmdsZXRzOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLmJsb2NPbmdsZXRzIHtcbiAgICBtYXJnaW46IDE1cHggMDtcbn1cblxuLyogVGl0cmUgc2FucyBpY8O0bmUgOiBwYWRkaW5nIGV4cGxpY2l0ZSAqL1xuLnRpdHJlRm9ybXVsYWlyZVNhbnNJY29uZSB7XG4gICAgcGFkZGluZzogMTJweCAyMHB4O1xufVxuXG4uYmxvY09uZ2xldHNFbnRyZWVzIC5zdmdDYiB7XG4gICAgY29sb3I6IHZhcigtLWNGb25kR3JvdXBlcyk7XG59XG5cbi5ibG9jT25nbGV0c0V4dHJhcyAuc3ZnQ2Ige1xuICAgIGNvbG9yOiB2YXIoLS1jRm9uZERpc3RyaWJ1dGlvbnMpO1xufVxuXG4uYmxvY0NvdWxldXJzIHtcbiAgICBtYXJnaW46IDE1cHggMDtcbn1cblxuLmJsb2NDb3VsZXVycyA+IGxhYmVsIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250OiB2YXIoLS1mTGFiZWwpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIG1hcmdpbi1ib3R0b206IDhweDtcbn1cblxuLmNvbnRlbnVDb3VsZXVycyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgZ2FwOiB2YXIoLS1nYXBMYXJnZSk7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG59XG5cbi5saWduZUNvdWxldXJzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tZ2FwTGFyZ2UpO1xufVxuXG4uY2hhbXBDb3VsZXVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcFJlZHVpdCk7XG59XG5cbi5jaGFtcENvdWxldXIgaW5wdXRbdHlwZT1cImNvbG9yXCJdIHtcbiAgICB3aWR0aDogNTBweDtcbiAgICBoZWlnaHQ6IDQwcHg7XG59XG5cbi5jaGFtcENvdWxldXIgc3BhbiB7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjQpO1xufVxuXG4vKiBBcGVyw6d1IENvbmZpZ3VyYXRpb24gRm9uZCAqL1xuI3ByZXZpc3VhbGlzYXRpb25Db25maWdGb25kIHtcbiAgICBtaW4taGVpZ2h0OiAyMDBweDtcbiAgICBtYXJnaW46IDIwcHg7XG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ0NvcnBzKTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jQmxhbmMwMyk7XG4gICAgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjtcbiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiBjZW50ZXI7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxuXG4jcHJldmlzdWFsaXNhdGlvbkNvbmZpZ0ZvbmRDYXJ0ZSB7XG4gICAgcGFkZGluZzogMjBweCAyOHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIG1pbi13aWR0aDogMjAwcHg7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjNzIGVhc2UsIGJhY2tncm91bmQgMC4zcyBlYXNlLCBib3JkZXIgMC4zcyBlYXNlLCBib3gtc2hhZG93IDAuM3MgZWFzZTtcbn1cblxuI3ByZXZpc3VhbGlzYXRpb25UaXRyZUZvbmQge1xuICAgIGZvbnQ6IHZhcigtLWZIMyk7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4jcHJldmlzdWFsaXNhdGlvblRleHRlRm9uZCB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgRU5Uw4pURSBTRUNUSU9OIChib3V0b24gYWpvdXRlcilcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLmVudGV0ZVNlY3Rpb24ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIGdhcDogdmFyKC0tZ2FwTGFyZ2UpO1xuICAgIG1hcmdpbi1ib3R0b206IDIwcHg7XG59XG5cbi5lbnRldGVTZWN0aW9uIGgxIHtcbiAgICBtYXJnaW46IDAgMCA1cHg7XG59XG5cbi5lbnRldGVTZWN0aW9uIHAge1xuICAgIG1hcmdpbjogMDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXI0KTtcbn1cblxuLmNvbXB0ZXVyIHtcbiAgICBmb250OiB2YXIoLS1mTGlnaHQxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG4gICAgbWFyZ2luOiAwIDAgMjBweDtcbn1cbiovXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBUQUJMRSBERSBHRVNUSU9OXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi50YWJsZUdlc3Rpb24ge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlcik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4udGFibGVHZXN0aW9uIHRoLFxuLnRhYmxlR2VzdGlvbiB0ZCB7XG4gICAgcGFkZGluZzogMTJweCAxNXB4O1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyKTtcbn1cblxuLnRhYmxlR2VzdGlvbiB0aCB7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xufVxuXG4udGFibGVHZXN0aW9uIHRib2R5IHRyOmxhc3QtY2hpbGQgdGQge1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG59XG5cbi50YWJsZUdlc3Rpb24gdGJvZHkgdHI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbn1cblxuLnRhYmxlR2VzdGlvbiAuY29sQWN0aW9ucyB7XG4gICAgd2lkdGg6IDEwMHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnRhYmxlR2VzdGlvbiAuY29sTm9tYnJlIHtcbiAgICB3aWR0aDogMTAwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4udGFibGVHZXN0aW9uIC5lcHVpc2Uge1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2UpO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG4qL1xuXG4vKiBCb3V0b25zIGljw7RuZXMgKi9cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLmJ0bkljb25lIHtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBwYWRkaW5nOiA2cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjQpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzLCBjb2xvciAwLjE1cztcbn1cblxuLmJ0bkljb25lOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMyk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi5idG5JY29uZSBzdmcge1xuICAgIHdpZHRoOiAxOHB4O1xuICAgIGhlaWdodDogMThweDtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cbiovXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBNT0RBTEUgKGRpYWxvZylcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbmRpYWxvZyB7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIyKTtcbiAgICBib3gtc2hhZG93OiAwIDEwcHggNDBweCB2YXIoLS1jT21icmVGb3J0ZSk7XG4gICAgcGFkZGluZzogMDtcbiAgICAvKiBQYXMgZGUgdGFpbGxlIHN1ciBsZSBzw6lsZWN0ZXVyIGQnw6lsw6ltZW50IDogZWxsZSBjb250cmFpbmRyYWl0IFRPVVMgbGVzXG4gICAgICAgPGRpYWxvZz4gKGxhIHN1cmNvdWNoZSBhcGVyw6d1IDE2LzkgZHUgbm95YXUgeSBlc3QgcGFzc8OpZSkuIExhIHRhaWxsZSBlc3RcbiAgICAgICBwb3J0w6llIMKrIGVuIHBsdXMgwrsgcGFyIGxhIGNsYXNzZSBkZSBjaGFxdWUgbW9kYWxlIOKAlCAubW9kYWxlIDogNTAwcHhcbiAgICAgICAoZMOpY2lzaW9uIFBPIDIwMjYtMDctMTgpLiAqL1xufVxuXG5kaWFsb2c6OmJhY2tkcm9wIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jT3ZlcmxheSk7XG59XG5cbmRpYWxvZyBmb3JtIHtcbiAgICBwYWRkaW5nOiAyNXB4O1xufVxuXG5kaWFsb2cgaDMge1xuICAgIG1hcmdpbjogMCAwIDIwcHg7XG4gICAgZm9udDogdmFyKC0tZkgzKTtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4uY2hhbXBGb3JtdWxhaXJlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuXG4uY2hhbXBGb3JtdWxhaXJlIGxhYmVsIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBtYXJnaW4tYm90dG9tOiA1cHg7XG59XG5cbi5jaGFtcEZvcm11bGFpcmUgaW5wdXQsXG4uY2hhbXBGb3JtdWxhaXJlIHRleHRhcmVhIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBwYWRkaW5nOiAxMHB4IDEycHg7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXIpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4uY2hhbXBGb3JtdWxhaXJlIGlucHV0OmZvY3VzLFxuLmNoYW1wRm9ybXVsYWlyZSB0ZXh0YXJlYTpmb2N1cyB7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNDdGEpO1xufVxuXG4uY2hhbXBGb3JtdWxhaXJlIGlucHV0W3R5cGU9XCJudW1iZXJcIl0ge1xuICAgIHdpZHRoOiAxMDBweDtcbn1cbiovXG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLmFjdGlvbnNNb2RhbGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBnYXA6IDEwcHg7XG4gICAgbWFyZ2luLXRvcDogMjVweDtcbn1cbiovXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBSRVNQT05TSVZFXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5AbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHtcbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiAgICAjZ2VzdGlvbkV2ZW5lbWVudCB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuXG4gICAgI3NpZGViYXJFdmVuZW1lbnQge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWluLXdpZHRoOiAxMDAlO1xuICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7XG4gICAgICAgIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlcik7XG4gICAgfVxuXG4gICAgI3NpZGViYXJNZW51IHtcbiAgICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBwYWRkaW5nOiAxMHB4O1xuICAgICAgICBnYXA6IDVweDtcbiAgICB9XG5cbiAgICAjc2lkZWJhck1lbnUgYSB7XG4gICAgICAgIHBhZGRpbmc6IDhweCAxMnB4O1xuICAgICAgICBib3JkZXItbGVmdDogbm9uZTtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIH1cblxuICAgICNzaWRlYmFyTWVudSBhLmFjdGl2ZSB7XG4gICAgICAgIGJvcmRlci1sZWZ0OiBub25lO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQ3RhKTtcbiAgICAgICAgY29sb3I6IHZhcigtLWNDdGF0KTtcbiAgICB9XG5cbiAgICAjZ2VzdGlvbkNvbnRlbnUge1xuICAgICAgICBwYWRkaW5nOiAyMHB4O1xuICAgIH1cbiAgICAqL1xuXG4gICAgLyogRW50w6p0ZSBzZWN0aW9uIHJlc3BvbnNpdmUgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiAgICAuZW50ZXRlU2VjdGlvbiB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGdhcDogMTVweDtcbiAgICB9XG4gICAgKi9cblxuICAgIC8qIFRhYmxlIHJlc3BvbnNpdmUgKi9cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiAgICAudGFibGVHZXN0aW9uIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIG92ZXJmbG93LXg6IGF1dG87XG4gICAgfVxuXG4gICAgLnRhYmxlR2VzdGlvbiB0aCxcbiAgICAudGFibGVHZXN0aW9uIHRkIHtcbiAgICAgICAgcGFkZGluZzogMTBweDtcbiAgICB9XG4gICAgKi9cbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBMSVNURSBERVMgw4lWw4lORU1FTlRTXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBEZXV4IGJvdXRvbnMgZGUgY3LDqWF0aW9uIGPDtHRlIMOgIGPDtHRlLCBhdS1kZXNzdXMgZGUgbGEgbGlzdGUgKi9cbi5iYXJyZUNyZWF0aW9uRXZlbmVtZW50IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIG1hcmdpbi10b3A6IDMwcHg7XG59XG5cbi8qIExpc3RlIDogdW4gw6l2w6luZW1lbnQgcGFyIGxpZ25lLiBUYWJsZSA9IGNvbG9ubmVzIGFsaWduw6llcyBzdXIgdG91dGVzIGxlcyBsaWduZXMuICovXG4udGFibGVFdmVuZW1lbnRzIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xuICAgIG1hcmdpbi10b3A6IHZhcigtLWdhcExhcmdlKTtcbn1cblxuLnRhYmxlRXZlbmVtZW50cyB0aCB7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBwYWRkaW5nOiB2YXIoLS1nYXBNb3llbikgdmFyKC0tZ2FwTGFyZ2UpO1xufVxuXG4udGFibGVFdmVuZW1lbnRzIHRkIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1nYXBNb3llbikgdmFyKC0tZ2FwTGFyZ2UpO1xuICAgIGJvcmRlci10b3A6IHZhcigtLWJvcmRlcik7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbn1cblxuLyogU3Vydm9sIDogcmVww6hyZSB2aXN1ZWwgZGUgbGEgbGlnbmUgY291cmFudGUgKHBhcyB1bmUgc8OpbGVjdGlvbikgKi9cbi50YWJsZUV2ZW5lbWVudHMgdGJvZHkgdHI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbn1cblxuLyogU2V1bGUgbGEgY29sb25uZSB0aXRyZSBhYnNvcmJlIGwnZXNwYWNlIDsgbGVzIGF1dHJlcyBzZSBjYWxlbnQgc3VyIGxldXIgY29udGVudSAqL1xuLnRhYmxlRXZlbmVtZW50cyB0aDpub3QoOmZpcnN0LWNoaWxkKSxcbi50YWJsZUV2ZW5lbWVudHMgdGQ6bm90KDpmaXJzdC1jaGlsZCkge1xuICAgIHdpZHRoOiAxJTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4vKiBBbGlnbmVtZW50IDogdGl0cmUgw6AgZ2F1Y2hlLCBTdGF0dXQgZXQgRGF0ZSBjZW50csOpcywgU3VwcHJpbWVyIMOgIGRyb2l0ZSAqL1xuLnRhYmxlRXZlbmVtZW50cyB0aDpudGgtY2hpbGQoMiksXG4udGFibGVFdmVuZW1lbnRzIHRkOm50aC1jaGlsZCgyKSxcbi50YWJsZUV2ZW5lbWVudHMgdGg6bnRoLWNoaWxkKDMpLFxuLnRhYmxlRXZlbmVtZW50cyB0ZDpudGgtY2hpbGQoMykge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnRhYmxlRXZlbmVtZW50cyB0aDpsYXN0LWNoaWxkLFxuLnRhYmxlRXZlbmVtZW50cyB0ZDpsYXN0LWNoaWxkIHtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbn1cblxuLmxpZ25lRXZlbmVtZW50Tm9tIHtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTGluayk7XG59XG5cbi5saWduZUV2ZW5lbWVudE5vbTpob3ZlciB7XG4gICAgY29sb3I6IHZhcigtLWNMaW5raCk7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi5saWduZUV2ZW5lbWVudERhdGUge1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLyogQWN0aW9ucyBkZSBsYSBsaWduZSA6IE91dnJpciAvIFN1cHByaW1lciwgY8O0dGUgw6AgY8O0dGUsIGFsaWduw6llcyDDoCBkcm9pdGUgKi9cbi5saWduZUV2ZW5lbWVudEFjdGlvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xufVxuXG4ubGllbk91dnJpckV2ZW5lbWVudCB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNMaW5rKTtcbn1cblxuLmxpZW5PdXZyaXJFdmVuZW1lbnQ6aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jTGlua2gpO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4vKiBTdXBwcmVzc2lvbiA6IGJvdXRvbiBkJ3VuIGZvcm0gUE9TVCwgcHLDqXNlbnTDqSBjb21tZSB1biBsaWVuIChwYXMgZGUgY2hyb21lIG5hdGlmKSAqL1xuLmxpZW5TdXBwcmltZXJFdmVuZW1lbnQge1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNSb3VnZSk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4ubGllblN1cHByaW1lckV2ZW5lbWVudDpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi8qIFN0YXR1dCA6IFByw6lwYXJlciAvIFRlc3RlciAvIERpZmZ1c2VyICh2b2NhYnVsYWlyZSBkZXMgb25nbGV0cykgKi9cbi5zdGF0dXRFdmVuZW1lbnQge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nRXRpcXVldHRlKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG59XG5cbi5zdGF0dXRQcmVwYXJlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4uc3RhdHV0VGVzdGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jVGVzdCk7XG4gICAgY29sb3I6IHZhcigtLWNUZXN0Myk7XG59XG5cbi5zdGF0dXREaWZmdXNlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY1N1Y2Nlc0ZvbmQpO1xuICAgIGNvbG9yOiB2YXIoLS1jU3VjY2VzVGV4dGUpO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEdSSUxMRSBERVMgR1JBTkRFUyBDQVTDiUdPUklFUyAow6l0YXBlIDIgOiBjcsOpZXIgZGVwdWlzIHVuIHNjw6luYXJpbylcbiAgIE3Dqm1lIHBhdHJvbiBxdWUgbGEgZ3JpbGxlIGRlcyDDqXbDqW5lbWVudHMgKDU1X2V2ZW5lbWVudHMuY3NzKSA6IGZsZXgtd3JhcCArXG4gICBjYXJ0ZXMgw6AgbGFyZ2V1ciBmaXhlLCBwYXMgZGUgZ3JpbGxlIMOpdGlyw6llIGVuIDFmci4gRGltZW5zaW9ucyBldCBlc3BhY2VtZW50c1xuICAgcHJpcyBzdXIgbGVzIHRva2VucyBkdSBwcm9qZXQgKGxhcmdldXIgZGUgY2FydGUgMzM0cHgsIGdhcHMsIGJvcmR1cmUgZGUgY2FydGUpLlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuI2dyaWxsZVJ1YnJpcXVlcyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgZ2FwOiB2YXIoLS1nYXBMYXJnZSk7XG4gICAgbWFyZ2luLXRvcDogMzBweDtcbn1cblxuLmNhcnRlUnVicmlxdWUge1xuICAgIHdpZHRoOiAzMzRweDtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgYXV0bztcbiAgICBjb2x1bW4tZ2FwOiB2YXIoLS1nYXBNb3llbik7XG4gICAgcm93LWdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBhbGlnbi1jb250ZW50OiBzdGFydDtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ29ycHMpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4zcztcbn1cblxuLmNhcnRlUnVicmlxdWU6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbn1cblxuLmNhcnRlUnVicmlxdWVOb20ge1xuICAgIGdyaWQtY29sdW1uOiAxO1xuICAgIGdyaWQtcm93OiAxO1xuICAgIGFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICBtYXJnaW46IDA7XG4gICAgZm9udDogdmFyKC0tZkgzKTtcbn1cblxuLmNhcnRlUnVicmlxdWVBY2Nyb2NoZSB7XG4gICAgZ3JpZC1jb2x1bW46IDEgLyAtMTtcbiAgICBtYXJnaW46IDA7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG59XG5cbi8qIEljw7RuZSBTVkcgaW5saW5lIChzdHJva2U6IGN1cnJlbnRDb2xvciDihpIgY29sb3LDqWUgcGFyIGxhIHByb3ByacOpdMOpIGNvbG9yKSAqL1xuLmNhcnRlUnVicmlxdWVJY29uZSB7XG4gICAgZ3JpZC1jb2x1bW46IDI7XG4gICAgZ3JpZC1yb3c6IDE7XG4gICAgYWxpZ24tc2VsZjogY2VudGVyO1xuICAgIGNvbG9yOiB2YXIoLS1jQ3RhKTtcbn1cblxuLmNhcnRlUnVicmlxdWVJY29uZSBzdmcge1xuICAgIHdpZHRoOiA0OHB4O1xuICAgIGhlaWdodDogNDhweDtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBGSUxUUkVTIOKAlCBjb21wb3NhbnQgY29tbXVuICjCqyB1bmUgY2xhc3NlID0gdW4gZGVzaWduIMK7KVxuXG4gICDimqDvuI8gQ09QSUUgQVNTVU3DiUUg4oCUIGp1bWVsbGUgZGUgc3R1ZGlvVml0cmluZS9hc3NldHMvdml0cmluZS9jc3MvZmlsdHJlcy5jc3MuXG4gICBJZGVudGlxdWUgYXUgZMOpcGFydC4gVG91dGUgbW9kaWZpY2F0aW9uIGljaSDihpIgZGVtYW5kZXIgYXUgUE8gcydpbCBmYXV0IGxhIHLDqXBlcmN1dGVyXG4gICBzdXIgbGUganVtZWF1IHZpdHJpbmUuIExlcyBkZXV4IGNvcGllcyBwZXV2ZW50IGRpdmVyZ2VyIHNlbG9uIGxlcyBiZXNvaW5zIGRlIGNoYXF1ZSBjw7R0w6lcbiAgIChyw6lnaWUgPSBvdXRpbCBjb25uZWN0w6kgOyB2aXRyaW5lID0gZnVubmVsIHB1YmxpYywgY2FjaGFibGUsIFNFTykuXG5cbiAgIFVOIFNFVUwgZGVzaWduIGRlIHBhbm5lYXUgZGUgZmlsdHJlcyBwb3VyIHRvdXRlIGxhIHLDqWdpZSA6IGNhdGFsb2d1ZVxuICAgwqsgQ3LDqWVyIMOgIHBhcnRpciBkJ3VuIHNjw6luYXJpbyDCuyBldCBtZW51IMKrIEFqb3V0ZXIgwrsgKHNlY3Rpb24gU2NlbmVzKS5cbiAgIExlcyAjaWQgZGVzIHBhbm5lYXV4ICgjZGl2RmlsdHJlU2NlbmFyaW8sICNkaXZGaWx0cmVTY2VuZSkgbmUgc2VydmVudFxuICAgcXUnYXUgVHlwZVNjcmlwdCBldCBhdXggcsOpZ2xhZ2VzIHByb3ByZXMgw6AgdW5lIHBhZ2Ug4oCUIGphbWFpcyBhdSBkZXNpZ24uXG5cbiAgIC5kaXZGaWx0cmVab25lICAgICBsYSByYW5nw6llIDogcGFubmVhdSDDoCBnYXVjaGUsIGNvbnRlbnUgZmlsdHLDqSDDoCBkcm9pdGVcbiAgIC5kaXZGaWx0cmUgICAgICAgICBsZSBwYW5uZWF1IHZlcnRpY2FsIGRlIGZpbHRyZXNcbiAgIC50aXRyZUZpbHRyZSAgICAgICB0aXRyZSBkdSBwYW5uZWF1XG4gICAuZGl2RmlsdHJlR3JvdXBlICAgZ3JvdXBlIGRlIHB1Y2VzICgrIC5wbGllIDogcmVwbGnDqSwgc2V1bHMgbGVzIGFjdGlmcyByZXN0ZW50IHZpc2libGVzKVxuICAgLnRpdHJlR3JvdXBlRmlsdHJlIHRpdHJlIGQndW4gZ3JvdXBlLCBjbGlxdWFibGUgKGNoZXZyb24pLCByZXBsaWUvZMOpcGxpZSAocGxpYWdlRmlsdHJlcy50cylcbiAgIC5maWx0cmUgICAgICAgICAgICBsYSBwdWNlIGNsaXF1YWJsZSAoKyAuYWN0aWYgOiBmb25kIGdyaXMgKyBjb2NoZSDinJMgw6AgZHJvaXRlKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmRpdkZpbHRyZVpvbmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiB2YXIoLS1nYXBMaXN0ZSk7IC8qIGFsaWduw6kgMjAg4oaSIDMycHggKGTDqWNpc2lvbiBQTyAyMDI2LTA3LTE4KSAqL1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xufVxuXG4uZGl2RmlsdHJlIHtcbiAgICBmbGV4OiAwIDAgMjgwcHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ29ycHMpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlcik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjIpO1xufVxuXG4udGl0cmVGaWx0cmUge1xuICAgIGZvbnQ6IHZhcigtLWZINCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG4gICAgcGFkZGluZy1ib3R0b206IHZhcigtLWdhcERlZmF1dCk7XG4gICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyKTtcbn1cblxuLmRpdkZpbHRyZUdyb3VwZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwUmVkdWl0KTtcbn1cblxuLyogVGl0cmUgZGUgZ3JvdXBlIDogY2xpcXVhYmxlLCByZXBsaWUvZMOpcGxpZSBzb24gZ3JvdXBlIChUUyBwbGlhZ2VGaWx0cmVzLnRzIHBvc2UgLnBsaWUpICovXG4udGl0cmVHcm91cGVGaWx0cmUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBmb250OiB2YXIoLS1mTGFiZWwpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIG1hcmdpbi10b3A6IHZhcigtLWdhcERlZmF1dCk7XG4gICAgcGFkZGluZy1yaWdodDogMThweDsgLyogcGxhY2UgZHUgY2hldnJvbiAqL1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuLnRpdHJlR3JvdXBlRmlsdHJlOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLyogQ2hldnJvbiBkZXNzaW7DqSBlbiBDU1MgKGF1Y3VuZSBpY8O0bmUgY2hldnJvbiBuJ2V4aXN0ZSBkYW5zIGwnYXBwbGkpIDog4pa+IG91dmVydCwg4pa4IHBsacOpICovXG4udGl0cmVHcm91cGVGaWx0cmU6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgcmlnaHQ6IDRweDtcbiAgICB0b3A6IDUwJTtcbiAgICB3aWR0aDogN3B4O1xuICAgIGhlaWdodDogN3B4O1xuICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgY3VycmVudENvbG9yO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNzAlKSByb3RhdGUoNDVkZWcpO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzO1xufVxuXG4uZGl2RmlsdHJlR3JvdXBlLnBsaWUgLnRpdHJlR3JvdXBlRmlsdHJlOjphZnRlciB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpIHJvdGF0ZSgtNDVkZWcpO1xufVxuXG4vKiBHcm91cGUgcGxpw6kgOiBzZXVscyBsZXMgZmlsdHJlcyBhY3RpZnMgcmVzdGVudCBhcHBhcmVudHMgKi9cbi5kaXZGaWx0cmVHcm91cGUucGxpZSAuZmlsdHJlOm5vdCguYWN0aWYpIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBMYSBwdWNlIDogZHUgdGV4dGUsIHBhcyB1biBib3V0b24g4oCUIGxlIGNvbnRvdXIgZXQgbGUgZm9uZCBibGV1IHBsZWluIGFwcGFydGllbm5lbnQgYXV4IGN0YSAqL1xuLmZpbHRyZSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHBhZGRpbmc6IDZweCAyNnB4IDZweCAxMnB4OyAvKiBwbGFjZSByw6lzZXJ2w6llIMOgIGRyb2l0ZSBwb3VyIGxhIGNvY2hlIDogcmllbiBuZSBib3VnZSDDoCBsYSBzw6lsZWN0aW9uICovXG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiBub25lOyAvKiBuZXV0cmFsaXNlIGwnaGFiaWxsYWdlIG5hdGlmIGRlcyBwdWNlcyA8YnV0dG9uPiAqL1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzLCBjb2xvciAwLjE1cztcbn1cblxuLyogQWN0aWYgPSBsZSBmb25kIGR1IHN1cnZvbCBxdWkgcmVzdGUgKC0tY0JsYW5jMDMgOiBmb25kIGV4aXN0YW50IGRlcyBib3V0b25zIGRpc2NyZXRzKSAqL1xuLmZpbHRyZTpob3Zlcixcbi5maWx0cmUuYWN0aWYge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAzKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLmZpbHRyZS5hY3RpZjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfinJMnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICByaWdodDogOHB4O1xuICAgIHRvcDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA3LTE4IOKAlCBwcmVtaWVyIGRlc2lnbiBkZSBsYSBwdWNlIChjb250b3VyICsgZm9uZCBibGV1IGN0YSksIGFiYW5kb25uw6kgOlxuICAgaWwgcGFybGFpdCBsYSBsYW5ndWUgZGVzIGN0YSAoZMOpY2lzaW9uIFBPLCBwYXMgZGUgZ2l0IDogb24gZ2FyZGUgbGEgdHJhY2UpXG4uZmlsdHJlIHtcbiAgICBwYWRkaW5nOiA2cHggMTJweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyQ2FydGUpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbn1cbi5maWx0cmU6aG92ZXIgeyBib3JkZXItY29sb3I6IHZhcigtLWNDdGEpOyBjb2xvcjogdmFyKC0tY0N0YSk7IH1cbi5maWx0cmUuYWN0aWYgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jQ3RhKTsgYm9yZGVyLWNvbG9yOiB2YXIoLS1jQ3RhKTsgY29sb3I6IHZhcigtLWNDdGF0KTsgfVxuLmZpbHRyZS5hY3RpZjpob3ZlciB7IGJhY2tncm91bmQ6IHZhcigtLWNDdGFoKTsgfVxuKi9cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBDUsOJRVIgw4AgUEFSVElSIEQnVU4gU0PDiU5BUklPIOKAlCBDYXRhbG9ndWUgKyBmaWx0cmVzXG5cbiAgIOKaoO+4jyBDT1BJRSBBU1NVTcOJRSDigJQganVtZWxsZSBkZSBzdHVkaW9WaXRyaW5lL2Fzc2V0cy92aXRyaW5lL2Nzcy9zY2VuYXJpb3NDYXRhbG9ndWUuY3NzLlxuICAgSWRlbnRpcXVlIGF1IGTDqXBhcnQuIFRvdXRlIG1vZGlmaWNhdGlvbiBpY2kg4oaSIGRlbWFuZGVyIGF1IFBPIHMnaWwgZmF1dCBsYSByw6lwZXJjdXRlclxuICAgc3VyIGxlIGp1bWVhdSB2aXRyaW5lLiBMZXMgZGV1eCBjb3BpZXMgcGV1dmVudCBkaXZlcmdlciBzZWxvbiBsZXMgYmVzb2lucyBkZSBjaGFxdWUgY8O0dMOpXG4gICAocsOpZ2llID0gb3V0aWwgY29ubmVjdMOpIDsgdml0cmluZSA9IGZ1bm5lbCBwdWJsaWMsIGNhY2hhYmxlLCBTRU8pLlxuXG4gICBOYW1lc3BhY2UgwqsgY3JlZXJTY2VuYXJpbyDCuyBleGNsdXNpZiDDoCBjZXR0ZSBwYWdlLiBORSBQQVMgcsOpdXRpbGlzZXIgwqsgYnJpcXVlIMK7LFxuICAgcXVpIGFwcGFydGllbnQgYXV4IGNhcnRlcyBkdSBidWlsZGVyIGRlIHNjw6luYXJpbyAoYXNzZXRzL25veWF1L2Nzcy9yZWdpZS81Nl9zY2VuYXJpby8pLlxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmNyZWVyU2NlbmFyaW9JbnRybyB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tZ2FwRGVmYXV0KTtcbn1cblxuLyogTGUgZGVzaWduIGR1IHBhbm5lYXUgZGUgZmlsdHJlcyB2aWVudCBkdSBjb21wb3NhbnQgY29tbXVuICg1NV9maWx0cmVzLmNzcykuICovXG4jY3JlZXJTY2VuYXJpbyB7XG4gICAgbWFyZ2luLXRvcDogMzBweDtcbn1cblxuLyogTGEgbGlzdGUgZGVzIHNjw6luYXJpb3MgZXN0IGxvbmd1ZSA6IGxlIHBhbm5lYXUgc3VpdCBsZSBkw6lmaWxlbWVudCAocHJvcHJlIMOgIGNldHRlIHBhZ2UpLiAqL1xuI2RpdkZpbHRyZVNjZW5hcmlvIHtcbiAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgIHRvcDogMjBweDtcbn1cblxuLyogTGlzdGUgZGVzIHNjw6luYXJpb3MgKi9cbiNjcmVlclNjZW5hcmlvTGlzdGUge1xuICAgIGZsZXg6IDE7XG4gICAgbWluLXdpZHRoOiAwO1xuICAgIG1heC13aWR0aDogODAwcHg7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwTGlzdGUpO1xufVxuXG4vKiBMYSBjYXJ0ZSBFU1QgdW4gYmxvYyAoY29tcG9zYW50IGNvbW11biwgNTNfYmxvY3MuY3NzIOKAlCBkw6ljaXNpb24gUE8gMjAyNi0wNy0xOCkgOlxuICAgbGEgY2xhc3NlIG5lIHNlcnQgcGx1cyBxdSdhdSBmaWx0cmFnZSBUUyBldCBhdXggcsOpZ2xhZ2VzIHByb3ByZXMgw6AgbGEgcGFnZS4gKi9cbi5jcmVlclNjZW5hcmlvQ2FydGUge1xuICAgIG1heC13aWR0aDogbm9uZTsgLyogbGEgbGlzdGUgKDgwMHB4KSBjb21tYW5kZSwgcGFzIGxlIGNsYW1wIDYwMHB4IGR1IGJsb2MgKi9cbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA3LTE4IOKAlCB0YWdzIHJldGlyw6lzIGRlcyBjYXJ0ZXMgKGRvdWJsb24gZGVzIGZpbHRyZXMgYXZlYyB1biBhdXRyZSBkZXNpZ24pXG4uY3JlZXJTY2VuYXJpb0NhcnRlVGFncyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgZ2FwOiB2YXIoLS1nYXBSZWR1aXQpO1xufVxuXG4uY3JlZXJTY2VuYXJpb0NhcnRlVGFnIHtcbiAgICBwYWRkaW5nOiAzcHggMTBweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjIpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIGZvbnQ6IHZhcigtLWZMYWJlbCk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjJzLCBiYWNrZ3JvdW5kIDAuMnMsIGNvbG9yIDAuMnM7XG59XG5cbi5jcmVlclNjZW5hcmlvQ2FydGVUYWc6aG92ZXIge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY0N0YSk7XG4gICAgY29sb3I6IHZhcigtLWNDdGEpO1xufVxuXG4uY3JlZXJTY2VuYXJpb0NhcnRlVGFnLmFjdGlmIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQ3RhKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNDdGEpO1xuICAgIGNvbG9yOiB2YXIoLS1jQ3RhdCk7XG59XG4qL1xuXG4vKiBMYSBjb2xvbm5lIGQnYWN0aW9ucyBkZSBsYSBjYXJ0ZSBlc3QgbGEgem9uZSAuYmxvY0FjdGlvbnMgZHUgY29tcG9zYW50LiAqL1xuXG4vKiBCb3V0b25zIGRlIGxhIGNhcnRlIDogLmN0YURpc2NyZXQgKDU2X3NjZW5hcmlvL19tb2RhbGUuY3NzKSwgQ29uZmlndXJlciBwdWlzXG4gICBBcGVyw6d1LiBQYXMgZGUgcHJpbWFpcmUvc2Vjb25kYWlyZSBuaSBkZSB2aW9sZXQgaWNpIDogZGFucyB1bmUgbGlzdGUsXG4gICBjaGFxdWUgY2FydGUgcsOpcMOodGUgbGVzIG3Dqm1lcyBib3V0b25zIOKAlCBjaW5xdWFudGUgcHJpbWFpcmVzIG4nb250IGF1Y3VuIHNlbnNcbiAgIChkw6ljaXNpb24gUE8gMjAyNi0wNy0xOCkuIExlIHZpb2xldCBhcGVyw6d1IHJlc3RlIGF1eCBib3V0b25zIHNvbG8gKC5jdGFQcmV2aWV3KS4gKi9cblxuLmNyZWVyU2NlbmFyaW9WaWRlIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLyogTWFzcXVhZ2UgcGFyIGxlIGZpbHRyZSAqL1xuLmNyZWVyU2NlbmFyaW9NYXNxdWUge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBNT0RJRklFUiBDRSBTQ8OJTkFSSU8g4oCUIENvbXBvc2l0aW9uIHBhciBmYW1pbGxlXG5cbiAgIE5hbWVzcGFjZSDCqyBtb2RpZmllclNjZW5hcmlvIMK7IGV4Y2x1c2lmIMOgIGNldHRlIHBhZ2UuIExlIHN0ZXBwZXIgZXQgbGVzIGTDqXRhaWxzXG4gICBFbnRyw6llcy9Tb3J0aWVzIHLDqXV0aWxpc2VudCBsZXMgY2xhc3NlcyBkdSByw6ljYXBpdHVsYXRpZiAoNTZfc2NlbmFyaW8vX3JlY2FwaXR1bGF0aWYuY3NzKSA7XG4gICBpY2kgdW5pcXVlbWVudCBsZSBjYXJyb3VzZWwgZGUgcmVtcGxhw6dhbnRlcywgbGVzIGZpY2hlcyBldCBsYSBiYXJyZSBkJ2FjdGlvbnMuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4jbW9kaWZpZXJTY2VuYXJpbyB7XG4gICAgbWFyZ2luLXRvcDogMzBweDtcbn1cblxuLyogTGVzIGJsb2NzIGRlIGxhIHBhZ2Ugc29udCBkZXMgLmJsb2MgKGNvbXBvc2FudCBjb21tdW4gNTNfYmxvY3MuY3NzLCBkw6ljaXNpb25cbiAgIFBPIDIwMjYtMDctMTgpIDsgaWNpIHVuaXF1ZW1lbnQgbGVzIHLDqWdsYWdlcyBwcm9wcmVzIMOgIGxhIHBhZ2UuICovXG4jbW9kaWZpZXJTY2VuYXJpbyAuYmxvYyB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyAvKiBhbmNyZSBsJ2ljw7RuZSBhYnNvbHVlIC5yZWNhcFRpdHJlSWNvbmUgKGjDqXJpdMOpZSBkdSByw6ljYXApICovXG4gICAgbWF4LXdpZHRoOiBub25lOyAvKiBsZXMgdHVpbGVzIGR1IGNhcnJvdXNlbCBkw6lwYXNzZW50IGxlIGNsYW1wIDYwMHB4IGR1IGJsb2MgKi9cbn1cblxuLyogQ2xhc3NlIGV0IG5vbiBpZCA6IHVuIGNhcnJvdXNlbCBwYXIgYmxvYywgcsOpcMOpdMOpIGRhbnMgbGEgcGFnZS4gKi9cbi5kaXZBY3Rpb25DaGFuZ2VyU2NlbmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcFJlZHVpdCk7IC8qIGxlIHBhZGRpbmcgdmllbnQgZHUgYmxvY0NvcnBzICovXG59XG5cbi5hY3Rpb25DaGFuZ2VyU2NlbmUge1xuICAgIGZsZXg6IDAgMCBhdXRvO1xuICAgIHdpZHRoOiAzNnB4O1xuICAgIGhlaWdodDogMTA0cHg7IC8qIG3Dqm1lIGhhdXRldXIgcXVlIGxlcyB0dWlsZXMgKi9cbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyQ3RhKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgY29sb3I6IHZhcigtLWNDdGFUZXh0ZSk7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjJzLCBjb2xvciAwLjJzO1xufVxuXG4uYWN0aW9uQ2hhbmdlclNjZW5lOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNDdGEpO1xuICAgIGNvbG9yOiB2YXIoLS1jQ3RhKTtcbn1cblxuLmFjdGlvbkNoYW5nZXJTY2VuZTpkaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMC4zNTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi5tb2RpZmllclNjZW5hcmlvSWNvbmVzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tZ2FwUmVkdWl0KTtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xuICAgIHBhZGRpbmc6IDEwcHg7IC8qIGxhaXNzZSByZXNwaXJlciBsZSBoYWxvIGRlIHPDqWxlY3Rpb24gbWFsZ3LDqSBsJ292ZXJmbG93ICovXG4gICAgLyogOCw1IGljw7RuZXMgdmlzaWJsZXMgYXUgbWF4aW11bSA6IGxhIGRlbWktaWPDtG5lIGNvdXDDqWUgc2lnbmFsZSBxdSdpbCB5IGEgdW5lIHN1aXRlICovXG4gICAgbWF4LXdpZHRoOiBjYWxjKDEwNHB4ICogOC41ICsgdmFyKC0tZ2FwUmVkdWl0KSAqIDgpO1xufVxuXG4ubW9kaWZpZXJTY2VuYXJpb0ljb25lIHtcbiAgICBmbGV4OiAwIDAgYXV0bztcbiAgICB3aWR0aDogMTA0cHg7XG4gICAgaGVpZ2h0OiAxMDRweDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckNhcnRlKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjJzLCBiYWNrZ3JvdW5kIDAuMnM7XG59XG5cbi8qIFN1cnZvbCBkJ3VuZSB0dWlsZSBub24gcmV0ZW51ZSA6IHRvbiBjbGFpciBkZSBsYSBmYW1pbGxlICh+NTAgJSBkdSBmb25kKSwgYXBlcsOndSBkZVxuICAgbCdhY3RpdmF0aW9uLiBEw6lmYXV0ID0gYW5pbWF0aW9uLCAucmVjYXBCbG9jQWZmaWNoYWdlIHN1ciBsZSBibG9jIGJhc2N1bGUgZW4gYWZmaWNoYWdlLiAqL1xuLm1vZGlmaWVyU2NlbmFyaW9JY29uZTpub3QoLmFjdGlmKTpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRTY2VuZXMwKTtcbn1cblxuLnJlY2FwQmxvY0FmZmljaGFnZSAubW9kaWZpZXJTY2VuYXJpb0ljb25lOm5vdCguYWN0aWYpOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZEFmZmljaGFnZXMwKTtcbn1cblxuLyogVHVpbGUgcmV0ZW51ZSA6IGZvbmQgcGxlaW4gZGUgbGEgZmFtaWxsZSArIGJvcmR1cmUgQ1RBIG5ldHRlIGV0IGhhbG8uICovXG4ubW9kaWZpZXJTY2VuYXJpb0ljb25lLmFjdGlmIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZFNjZW5lcyk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCB2YXIoLS1jRm9ybUZvY3VzSGFsbyk7XG4gICAgYm9yZGVyLXdpZHRoOiAycHg7XG59XG5cbi5yZWNhcEJsb2NBZmZpY2hhZ2UgLm1vZGlmaWVyU2NlbmFyaW9JY29uZS5hY3RpZiB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRBZmZpY2hhZ2VzKTtcbn1cblxuLm1vZGlmaWVyU2NlbmFyaW9JY29uZSBpbWcge1xuICAgIHdpZHRoOiA4NHB4O1xuICAgIGhlaWdodDogODRweDtcbn1cblxuLm1vZGlmaWVyU2NlbmFyaW9GaWNoZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLm1vZGlmaWVyU2NlbmFyaW9GaWNoZS5hY3RpZiB7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8qIEJhcnJlIGQnYWN0aW9uIGRlIGxhIGZpY2hlIDogc8OpcGFyZSBsZSBib3V0b24gZHUgZGVzY3JpcHRpZiAodW4gYm91dG9uIG51XG4gICBjb2xsw6kgYXUgdGV4dGUsIGTDqWNpc2lvbiBQTyAyMDI2LTA3LTE4KS4gKi9cbi5kaXZBY3Rpb25GaWNoZSB7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tZ2FwRGVmYXV0KTtcbn1cblxuLyogQmxvYyBzYW5zIHJlbXBsYcOnYW50ZSA6IGwnaWPDtG5lIGFic29sdWUgZHUgcsOpY2FwICg4NHB4LCBoYXV0LWRyb2l0KSByZWNvdXZyZSBsZSBkw6lidXRcbiAgIGR1IGRlc2NyaXB0aWYsIG9uIGx1aSByw6lzZXJ2ZSBsYSBjb2xvbm5lIGRlIGRyb2l0ZSAobGUgYmxvY0NvcnBzIGZvdXJuaXQgZMOpasOgIDIwcHgpLiAqL1xuI21vZGlmaWVyU2NlbmFyaW8gLmJsb2M6bm90KC5tb2RpZmllclNjZW5hcmlvQmxvYykgLmJsb2NUZXh0ZSB7XG4gICAgcGFkZGluZy1yaWdodDogNzhweDtcbn1cblxuLyogQWxpZ27DqXMgw6AgZ2F1Y2hlLCBjb21tZSB0b3V0ZSBiYXJyZSBkJ2FjdGlvbiAoZMOpY2lzaW9uIFBPIDIwMjYtMDctMTggOiBwYXNcbiAgIGQnYWxpZ25lbWVudCBxdWkgdmFyaWUgZCd1bmUgYmFycmUgw6AgbCdhdXRyZSkuICovXG4uZGl2QWN0aW9uTW9kaWZpZXJTY2VuYXJpbyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tcGFkZGluZ0NvcnBzKTtcbn1cblxuLyogwqsgQ3LDqWVyIGNldCDDqXbDqW5lbWVudCDCuyB2aXQgZGFucyB1biA8Zm9ybT4gKGlsIFBPU1RlIGxhIGNvbXBvc2l0aW9uIGByZW1wbGFjZXJgKS5cbiAgIGRpc3BsYXk6Y29udGVudHMgZWZmYWNlIGxhIGJvw650ZSBkdSBmb3JtIDogbGUgZ2FwIGRlIGxhIGJhcnJlIHMnYXBwbGlxdWUgYXV4XG4gICBib3V0b25zIGV1eC1tw6ptZXMgKG3Dqm1lIHNvbHV0aW9uIHF1ZSBsZSBjYXRhbG9ndWUpLiAqL1xuLmRpdkFjdGlvbk1vZGlmaWVyU2NlbmFyaW8gZm9ybSB7XG4gICAgZGlzcGxheTogY29udGVudHM7XG59XG5cbi8qIMKrIENyw6llciBjZXQgw6l2w6luZW1lbnQgwrsgOiBzZXVsZSBhY3Rpb24gcHJpbWFpcmUgZGUgbGEgcGFnZSwgc2lsaG91ZXR0ZSBjb21tdW5lXG4gICAuY3RhMTQgKDMxX2N0YS5jc3MpIOKAlCBpY2kgdW5pcXVlbWVudCBsZXMgY291bGV1cnMuIMKrIEFwZXLDp3UgwrsgcXVpIGxlXG4gICBzdWl0IGVzdCB1biAuY3RhRGlzY3JldCBuZXV0cmUsIGxlIG3Dqm1lIHF1ZSBsZSBjYXRhbG9ndWUgKGTDqWNpc2lvbiBQTyAyMDI2LTA3LTE4KS4gKi9cbi5jdGFNb2RpZmllclNjZW5hcmlvQ3JlZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNDdGEpO1xuICAgIGNvbG9yOiB2YXIoLS1jQ3RhdCk7XG59XG5cbi5jdGFNb2RpZmllclNjZW5hcmlvQ3JlZXI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNDdGFoKTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICDDiVRJUVVFVFRFUyAtIE1hcnF1YWdlIHR5cG9ncmFwaGlxdWVcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgIExlcyDDqXRpcXVldHRlcyBkb25uw6llcyBwYXIgbCdvcmdhbmlzYXRldXIgKGFuaW1hdGlvbnMsIHNvcnRpZXMsIGdyb3VwZXMpXG4gICBzb250IGVudmVsb3Bww6llcyBkYW5zIC5ldGlxdWV0dGVNb25vIHBhciBsZSBmaWx0cmUgVHdpZyBgZXRpcXVldHRlSHRtbGAuXG4gICBMYSBjaGFzc2UgZml4ZSBsZXMgZGlzdGluZ3VlIGRlcyBsaWJlbGzDqXMgZHUgc3lzdMOobWUgKGTDqWNpc2lvbiBQTyAyMDI2LTA2LTEwKS5cbiovXG5cbi5ldGlxdWV0dGVNb25vIHtcbiAgICBmb250LWZhbWlseTogdmFyKC0tZmZNb25vKTtcbn1cblxuLyogTWFycXVldXIgZCd1bmUgc291cmNlIHByb3Zpc29pcmUsIGFjY29sw6kgw6AgbCfDqXRpcXVldHRlIHBhciBsZSBtw6ptZSBmaWx0cmUgKi9cbi5ldGlxdWV0dGVBQ29uZmlndXJlciB7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2U2KTtcbn1cblxuLnJlY2FwQmxvY0RldGFpbCAuZXRpcXVldHRlQUNvbmZpZ3VyZXIge1xuICAgIGNvbG9yOiB1bnNldDtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBTQ8OJTkFSSU8gLSBHcmlsbGUgZGUgYnJpcXVlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuI3NjZW5hcmlvQ29udGFpbmVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IC8qIFBvdXIgbGUgU1ZHIGRlcyBsaWduZXMgKi9cbn1cblxuI3NjZW5hcmlvR3JpbGxlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBnYXA6IHZhcigtLWdhcExhcmdlKSB2YXIoLS1nYXBNb3llbik7IC8qIGFsaWduw6kgMTAgLT4gMTJweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbiAgICBtYXJnaW4tYm90dG9tOiAzMHB4O1xufVxuXG4vKiBTVkcgZGVzIGxpZ25lcyBkZSBjb25uZXhpb24gKi9cbi5zY2VuYXJpb0xpZ25lc1N2ZyB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lOyAvKiBOZSBibG9xdWUgcGFzIGxlcyBjbGljcyAqL1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xuICAgIHotaW5kZXg6IDA7IC8qIERlcnJpw6hyZSBsZXMgYnJpcXVlcyAqL1xufVxuXG4uYnJpcXVlICoge1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xufVxuXG5ib2R5LmlzRHJhZ2dpbmcsXG5ib2R5LmlzRHJhZ2dpbmcgKiB7XG4gICAgY3Vyc29yOiBncmFiYmluZyAhaW1wb3J0YW50O1xufVxuXG4vKiBCcmlxdWUgZGUgYmFzZSAqL1xuLmJyaXF1ZSB7XG4gICAgd2lkdGg6IDE2MnB4O1xuICAgIGhlaWdodDogMTAwcHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSApO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBjb2xvcjogaW5oZXJpdDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4ycztcbn1cblxuLmJyaXF1ZTpob3ZlciB7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tb21icmVQb3J0ZWUpO1xufVxuXG4vKiBHcmlsbGUgc3RhdGlxdWUgKHBhZ2UgwqsgVm9pciBsYSBjb25maWcgwrsgZGVzIGFwZXLDp3VzKSA6IGxlcyBicmlxdWVzIHNlIHJlZ2FyZGVudCwgbmUgc2UgY2xpcXVlbnQgcGFzICovXG4uc2NlbmFyaW9HcmlsbGVTdGF0aXF1ZSAuYnJpcXVlIHtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi5icmlxdWUuYWN0aXZlIHtcbiAgICBib3gtc2hhZG93OiB2YXIoLS1vbWJyZVBvcnRlZSk7XG59XG5cbi8qIE1hcnF1ZXVyIMKrIMOgIGNvbmZpZ3VyZXIgwrsgOiBtw6ptZSDDqXRvaWxlIHJvdWdlIHBhcnRvdXQg4oCUIHN1ciBsYSBicmlxdWUgZOKAmWFuaW1hdGlvbiBxdWlcbiAgIGNvbnNvbW1lIHVuZSBwcm92aXNvaXJlLCBldCBzdXIgbCdvbmdsZXQgb8O5IGNldHRlIHByb3Zpc29pcmUgc2UgY29uZmlndXJlXG4gICAodmFyaWFudGUgZCdvbmdsZXQgZGFucyBfb25nbGV0TWVudS5jc3MsIGF2ZWMgLm9uZ2xldCkuIExlIHBsYWNlbWVudCBlbiBjb2luIGVzdFxuICAgcHJvcHJlIMOgIGxhIGJyaXF1ZSA6IGFpbGxldXJzIGwnw6l0b2lsZSBzdWl0IGxlIHRleHRlLiAqL1xuLnBhc3RpbGxlUHJvdmlzb2lyZSB7XG4gICAgY29sb3I6IHZhcigtLWNSb3VnZTYpO1xuICAgIGZvbnQ6IHZhcigtLWZBbGVydGUxNik7XG59XG5cbi5icmlxdWUgLnBhc3RpbGxlUHJvdmlzb2lyZSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogNHB4O1xuICAgIHJpZ2h0OiA4MnB4O1xufVxuXG4vKiBTdHlsZXMgZCdpY8O0bmVzIDogdm9pciA1NF9pY29uZXMuY3NzICovXG5cbi5icmlxdWVDb25maWcgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZENvbmZpZyk7IH1cblxuLmJyaXF1ZVRpdHJlIHtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICBwYWRkaW5nOiA4cHggMTBweCAwIDEwcHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLmJyaXF1ZU5vbWJyZSB7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIHBhZGRpbmc6IDJweCAxMHB4IDEwcHggMTBweDtcbn1cbiovXG5cbi8qIENvbnRyYXRzIGFuaW1hdGlvbiAoc291cy1saWduZSBpY8O0bmVzICsgcGxhZ2VzKSAqL1xuLmJyaXF1ZUNvbnRyYXRzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgZ2FwOiAycHg7XG4gICAgcGFkZGluZzogMnB4IDEwcHggOHB4IDEwcHg7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5jb250cmF0U2NlbmUge1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiAycHg7XG59XG5cbi5jb250cmF0U2NlbmUgc3ZnIHtcbiAgICB3aWR0aDogMTJweDtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgZmxleC1zaHJpbms6IDA7XG59XG5cbi5jb250cmF0UGxhZ2Uge1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBmb250LXNpemU6IDEycHg7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG59XG5cbi8qIEJyaXF1ZSBBam91dGVyIChib3V0b24gKyBnw6luw6lyaXF1ZSkgKi9cbi5icmlxdWVBam91dGVyIHtcbiAgICBib3JkZXItc3R5bGU6IGRhc2hlZDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmJyaXF1ZUljb25lUGx1cyB7XG4gICAgd2lkdGg6IDQwcHg7XG4gICAgaGVpZ2h0OiA0MHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBib3JkZXI6IDFweCBkYXNoZWQgdmFyKC0tY05vaXI0KTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZm9udDogdmFyKC0tZkgyKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXI0KTtcbn1cblxuLmJyaXF1ZUFqb3V0ZXI6aG92ZXIgLmJyaXF1ZUljb25lUGx1cyB7XG4gICAgY29sb3I6IHZhcigtLWNDdGEpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY0N0YSk7XG59XG5cbi8qIEJyaXF1ZSArIGTDqXNhY3RpdsOpZSAocXVhbmQgbWVudSBhZmZpY2jDqSkgKi9cbi5icmlxdWVBam91dGVyLmJyaXF1ZUFqb3V0ZXJBY3RpZiB7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbn1cblxuLmJyaXF1ZUFqb3V0ZXJBY3RpZiAuYnJpcXVlSWNvbmVQbHVzIHtcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ09VTEVVUlMgQlJJUVVFUyBBSk9VVEVSIChwYXIgc2VjdGlvbilcbiAgIFV0aWxpc2UgZGVzIENTUyBjdXN0b20gcHJvcGVydGllcyBsb2NhbGVzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBEw6lmaW5pdGlvbiBkZXMgdmFyaWFibGVzIHBhciBzZWN0aW9uICovXG4uYnJpcXVlQWpvdXRlckdyb3VwZXMge1xuICAgIC0tYnJpcXVlRm9uZDogdmFyKC0tY0ZvbmRHcm91cGVzKTtcbiAgICAtLWJyaXF1ZUJvcmR1cmU6IHZhcigtLWNGb25kR3JvdXBlczIpO1xufVxuXG4uYnJpcXVlQWpvdXRlckRpc3RyaWJ1dGlvbnMge1xuICAgIC0tYnJpcXVlRm9uZDogdmFyKC0tY0ZvbmREaXN0cmlidXRpb25zKTtcbiAgICAtLWJyaXF1ZUJvcmR1cmU6IHZhcigtLWNGb25kRGlzdHJpYnV0aW9uczIpO1xufVxuXG4uYnJpcXVlQWpvdXRlckNvbmZpZ3VyYXRpb25zIHtcbiAgICAtLWJyaXF1ZUZvbmQ6IHZhcigtLWNGb25kQ29uZmlnKTtcbiAgICAtLWJyaXF1ZUJvcmR1cmU6IHZhcigtLWNGb25kQ29uZmlnMik7XG59XG5cbi5icmlxdWVBam91dGVyQWZmaWNoYWdlcyB7XG4gICAgLS1icmlxdWVGb25kOiB2YXIoLS1jRm9uZEFmZmljaGFnZXMpO1xuICAgIC0tYnJpcXVlQm9yZHVyZTogdmFyKC0tY0ZvbmRBZmZpY2hhZ2VzMik7XG59XG5cbi5icmlxdWVBam91dGVyU2NlbmVzIHtcbiAgICAtLWJyaXF1ZUZvbmQ6IHZhcigtLWNGb25kU2NlbmVzKTtcbiAgICAtLWJyaXF1ZUJvcmR1cmU6IHZhcigtLWNGb25kU2NlbmVzMik7XG59XG5cbi8qIFN0eWxlcyBjb21tdW5zIHV0aWxpc2FudCBsZXMgdmFyaWFibGVzICovXG4uYnJpcXVlQWpvdXRlci5icmlxdWVBam91dGVyR3JvdXBlcyxcbi5icmlxdWVBam91dGVyLmJyaXF1ZUFqb3V0ZXJEaXN0cmlidXRpb25zLFxuLmJyaXF1ZUFqb3V0ZXIuYnJpcXVlQWpvdXRlckNvbmZpZ3VyYXRpb25zLFxuLmJyaXF1ZUFqb3V0ZXIuYnJpcXVlQWpvdXRlckFmZmljaGFnZXMsXG4uYnJpcXVlQWpvdXRlci5icmlxdWVBam91dGVyU2NlbmVzIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1icmlxdWVGb25kKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWJyaXF1ZUJvcmR1cmUpO1xufVxuXG4uYnJpcXVlQWpvdXRlckdyb3VwZXMgLmJyaXF1ZUljb25lUGx1cyxcbi5icmlxdWVBam91dGVyRGlzdHJpYnV0aW9ucyAuYnJpcXVlSWNvbmVQbHVzLFxuLmJyaXF1ZUFqb3V0ZXJDb25maWd1cmF0aW9ucyAuYnJpcXVlSWNvbmVQbHVzLFxuLmJyaXF1ZUFqb3V0ZXJBZmZpY2hhZ2VzIC5icmlxdWVJY29uZVBsdXMsXG4uYnJpcXVlQWpvdXRlclNjZW5lcyAuYnJpcXVlSWNvbmVQbHVzIHtcbiAgICBjb2xvcjogdmFyKC0tYnJpcXVlQm9yZHVyZSk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1icmlxdWVCb3JkdXJlKTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBaT05FIEZPUk1VTEFJUkUgKFR1cmJvIEZyYW1lKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuI3NjZW5hcmlvUGFubmVhdSB7XG4gICAgbWFyZ2luOiAyMHB4IDA7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgYm9yZGVyLXRvcDogdmFyKC0tYm9yZGVyQ2FydGUpO1xuICAgIHBhZGRpbmc6IDIwcHggMDtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFBBTk5FQVUgLSBDbGFzc2VzIGfDqW7DqXJpcXVlcyByw6l1dGlsaXNhYmxlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLnBhbm5lYXVXcmFwcGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tZ2FwTGlzdGUpOyAvKiBhbGlnbsOpIDMwIOKGkiAzMnB4IChkw6ljaXNpb24gUE8gMjAyNi0wNy0xOCkgKi9cbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbn1cblxuLnBhbm5lYXVHYXVjaGUge1xuICAgIHdpZHRoOiA2MDBweDtcbiAgICBmbGV4LXNocmluazogMDtcbn1cblxuLnBhbm5lYXVBaWRlIHtcbiAgICBmbGV4OiAxO1xuICAgIHBhZGRpbmc6IDE1cHggMjBweDtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckNhcnRlKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG59XG5cbi5wYW5uZWF1QWlkZSBoMjpmaXJzdC1jaGlsZCxcbi5wcmV2aWV3UHJlc2VudGF0aW9uQXJ0aWNsZSBoMjpmaXJzdC1jaGlsZCB7XG4gICAgbWFyZ2luLXRvcDogMDtcbn1cblxuLnBhbm5lYXVBaWRlIGgzIHtcbiAgICBtYXJnaW46IDQwcHggMCAxMHB4IDA7XG4gICAgZm9udDogdmFyKC0tZkgzKTtcbn1cblxuLnBhbm5lYXVBaWRlIHAge1xuICAgIG1hcmdpbjogMTBweCAwO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuXG4ucGFubmVhdUFpZGUgc3Ryb25nLFxuLnBhbm5lYXVBaWRlIGIge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTZTdHJvbmcpO1xufVxuXG4ucGFubmVhdUFpZGUgdWwge1xuICAgIG1hcmdpbjogMTBweCAwO1xuICAgIHBhZGRpbmctbGVmdDogMjBweDtcbiAgICBsaXN0LXN0eWxlOiBkaXNjO1xufVxuXG4ucGFubmVhdUFpZGUgbGksXG4uZmljaGllclByZXZpc3VhbGlzYXRpb25MaXN0ZSBsaSB7XG4gICAgbWFyZ2luOiA1cHggMDtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbn1cblxuLyogRW5jYWRyw6kgZ8OpbsOpcmlxdWUgZCdhcGVyw6d1IGQndW4gZmljaGllciBpbXBvcnTDqSAoY29uc3RydWl0IGVuIEpTLCBleC4gaW1wb3J0IENTVikuICovXG4uZmljaGllclByZXZpc3VhbGlzYXRpb24ge1xuICAgIHBhZGRpbmc6IDhweCAxMnB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG59XG5cbi5maWNoaWVyUHJldmlzdWFsaXNhdGlvbiBoNCB7XG4gICAgbWFyZ2luOiAwIDAgNnB4O1xuICAgIGZvbnQ6IHZhcigtLWZINCk7XG59XG5cbi8qIExlcyA8cD4gZGUgbCdhcGVyw6d1IG5lIHNvbnQgcGFzIGVuZmFudHMgZGlyZWN0cyBkdSBmb3JtIDogb24gbmV1dHJhbGlzZSBsYSBtYXJnZVxuICAgcGFyIGTDqWZhdXQgZHUgbmF2aWdhdGV1ciAoc2lub24gZ3JvcyB0cm91IGVudHJlIHVuIHRpdHJlIGRlIGxpc3RlIGV0IHNhIGxpc3RlKS4gKi9cbi5maWNoaWVyUHJldmlzdWFsaXNhdGlvbiBwIHtcbiAgICBtYXJnaW46IDA7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG59XG5cbi8qIEJsb2MgwqsgdGl0cmUgKyBsaXN0ZSDCuyA6IHPDqXBhcsOpIGR1IGNvbXB0ZXVyLCBtYWlzIHRpdHJlIGNvbGzDqSDDoCBzYSBsaXN0ZSAocHJveGltaXTDqSkuICovXG4uZmljaGllclByZXZpc3VhbGlzYXRpb25MaXN0ZSB7XG4gICAgbWFyZ2luLXRvcDogMTJweDtcbn1cblxuLyogTGllbiDCqyBVdGlsaXNlciB1biBhdXRyZSBmaWNoaWVyIMK7IERBTlMgbCdlbmNhZHLDqSAoY29tbWUgbGUgYm91dG9uIGRlcyBhcGVyw6d1cyBkJ2ltYWdlKS4gKi9cbi5maWNoaWVyUHJldmlzdWFsaXNhdGlvbiAuY3RhU3VwcHJpbWVyIHtcbiAgICBtYXJnaW4tdG9wOiA4cHg7XG59XG5cbi5maWNoaWVyUHJldmlzdWFsaXNhdGlvbkxpc3RlIHVsIHtcbiAgICBtYXJnaW46IDJweCAwIDA7XG4gICAgcGFkZGluZy1sZWZ0OiAyMHB4O1xuICAgIGxpc3Qtc3R5bGU6IGRpc2M7XG59XG5cbi5wYW5uZWF1QWlkZSBidXR0b24ge1xuICAgIGZvbnQ6IHVuc2V0O1xuICAgIG1hcmdpbjogMDtcbiAgICBjb2xvcjogdmFyKC0tY0N0YSk7XG4gICAgcGFkZGluZzogMDtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycztcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDEwMDBweCkge1xuICAgIC5wYW5uZWF1V3JhcHBlciB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgfVxuXG4gICAgLnBhbm5lYXVHYXVjaGUge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWF4LXdpZHRoOiA2MDBweDtcbiAgICB9XG5cbiAgICAucGFubmVhdUFpZGUge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgbWF4LXdpZHRoOiA2MDBweDtcbiAgICB9XG59XG5cbi5tZXNzYWdlQWlkZSB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi5tZXNzYWdlQWlkZSBwIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBtYXJnaW46IDVweCAwO1xuICAgIG1heC13aWR0aDogNjAwcHg7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBCTE9DIEVOQ0FEUsOJIC0gU3R5bGUgdW5pZmnDqSBwb3VyIGxlcyBibG9jc1xuICAgZGFucyBsZXMgZm9ybXVsYWlyZXMgKGxvdHMsIGFjdHVhbGlzYXRpb24sIGV0Yy4pXG5cbiAgIFN0cnVjdHVyZSBIVE1MIG9ibGlnYXRvaXJlIDogZm9ybSA+IGRpdiA+IC5ibG9jRW5jYWRyZVxuICAgKGxlIC5ibG9jRW5jYWRyZSBkb2l0IMOqdHJlIGRhbnMgdW5lIGRpdiBpbnRlcm3DqWRpYWlyZSlcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5ibG9jRW5jYWRyZSB7XG4gICAgcGFkZGluZzogMTVweDtcbiAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xuICAgIGJveC1zaGFkb3c6IHZhcigtLW9tYnJlSW50ZXJuZSk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4uYmxvY0VuY2FkcmUgLnZpZ25ldHRlSW1hZ2VFeGlzdGFudGUge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbiAgICBib3gtc2hhZG93OiBub25lO1xufVxuXG4uYmxvY0VuY2FkcmUgPiA6Zmlyc3QtY2hpbGQge1xuICAgIG1hcmdpbi10b3A6IDA7XG59XG5cbi5ibG9jRW5jYWRyZSA+IDpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4uYmxvY0VuY2FkcmUgPiBkaXYge1xuICAgIHBhZGRpbmc6IDAgMCAyMHB4O1xufVxuXG4vKiBUaXRyZSBkdSBmb3JtdWxhaXJlIGF2ZWMgaWPDtG5lIGV0IGNvdWxldXIgKi9cbi50aXRyZUZvcm11bGFpcmUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbjogMCAwIDQwcHggMDtcbiAgICBmb250OiB2YXIoLS1mSDMpO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi50aXRyZUZvcm11bGFpcmU6aGFzKCsgLnNvdXNUaXRyZUZvcm11bGFpcmUpIHtcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG59XG5cbi5zb3VzVGl0cmVGb3JtdWxhaXJlIHtcbiAgICBtYXJnaW46IDIwcHggMCAzMHB4IDA7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi50aXRyZUljb25lIHtcbiAgICB3aWR0aDogNDBweDtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gICAgcGFkZGluZzogNnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgVkFSSUFOVEVTIERFIENPVUxFVVJTIERFUyBUSVRSRVMgRk9STVVMQUlSRVNcbiAgIFV0aWxpc2UgZGVzIENTUyBjdXN0b20gcHJvcGVydGllcyBsb2NhbGVzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBWYXJpYWJsZXMgbG9jYWxlcyBwb3VyIGxlIHRpdHJlIGV0IHNvbiBpY8O0bmUgKMOpbMOpbWVudHMgZW5mYW50cykgKi9cbi50aXRyZUNvbmZpZyxcbi50aXRyZUNvbmZpZ3VyYXRpb25zIHtcbiAgICAtLXRpdHJlRm9uZDogdmFyKC0tY0ZvbmRDb25maWcpO1xuICAgIC0tdGl0cmVJY29uZUZvbmQ6IHZhcigtLWNGb25kQ29uZmlnKTtcbn1cblxuLnRpdHJlR3JvdXBlcyB7XG4gICAgLS10aXRyZUZvbmQ6IHZhcigtLWNGb25kR3JvdXBlcyk7XG4gICAgLS10aXRyZUljb25lRm9uZDogdmFyKC0tY0ZvbmRHcm91cGVzKTtcbn1cblxuLnRpdHJlRGlzdHJpYnV0aW9ucyB7XG4gICAgLS10aXRyZUZvbmQ6IHZhcigtLWNGb25kRGlzdHJpYnV0aW9ucyk7XG4gICAgLS10aXRyZUljb25lRm9uZDogdmFyKC0tY0ZvbmREaXN0cmlidXRpb25zKTtcbn1cblxuLnRpdHJlU2NlbmVzIHtcbiAgICAtLXRpdHJlRm9uZDogdmFyKC0tY0ZvbmRTY2VuZXMpO1xuICAgIC0tdGl0cmVJY29uZUZvbmQ6IHZhcigtLWNGb25kU2NlbmVzKTtcbn1cblxuLnRpdHJlQWZmaWNoYWdlcyB7XG4gICAgLS10aXRyZUZvbmQ6IHZhcigtLWNGb25kQWZmaWNoYWdlcyk7XG4gICAgLS10aXRyZUljb25lRm9uZDogdmFyKC0tY0ZvbmRBZmZpY2hhZ2VzKTtcbn1cblxuLyogU3R5bGVzIGNvbW11bnMgdXRpbGlzYW50IGxlcyB2YXJpYWJsZXMgbG9jYWxlcyAqL1xuLnRpdHJlQ29uZmlnLFxuLnRpdHJlQ29uZmlndXJhdGlvbnMsXG4udGl0cmVHcm91cGVzLFxuLnRpdHJlRGlzdHJpYnV0aW9ucyxcbi50aXRyZVNjZW5lcyxcbi50aXRyZUFmZmljaGFnZXMge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLXRpdHJlRm9uZCk7XG59XG5cbi50aXRyZUNvbmZpZyAudGl0cmVJY29uZSxcbi50aXRyZUNvbmZpZ3VyYXRpb25zIC50aXRyZUljb25lLFxuLnRpdHJlR3JvdXBlcyAudGl0cmVJY29uZSxcbi50aXRyZURpc3RyaWJ1dGlvbnMgLnRpdHJlSWNvbmUsXG4udGl0cmVTY2VuZXMgLnRpdHJlSWNvbmUsXG4udGl0cmVBZmZpY2hhZ2VzIC50aXRyZUljb25lIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS10aXRyZUljb25lRm9uZCk7XG59XG5cbi5wYW5uZWF1Rm9ybXVsYWlyZSAuY3RhVmFsaWRlciB7XG4gICAgbWFyZ2luLXRvcDogMDtcbiAgICBwYWRkaW5nOiAxMHB4IDQwcHg7XG4gICAgd2lkdGg6IGF1dG87XG59XG5cbi5wYW5uZWF1Rm9ybXVsYWlyZSAuY3RhVmFsaWRlcjpkaXNhYmxlZCB7XG4gICAgY3Vyc29yOiBhdXRvO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ09VTEVVUlMgUEFSIENBVMOJR09SSUUgKC5kaXZDb25maWcsIC5kaXZHcm91cGVzLCBldGMuKVxuICAgQ2xhc3NlIGFqb3V0w6llIHN1ciAucGFubmVhdUZvcm11bGFpcmUgcGFyIF9iYXNlQ3JlYXRlL19iYXNlRWRpdFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogQm91dG9uIHZhbGlkZXIgLSBDb25maWcgKi9cbi5kaXZDb25maWcgLmN0YVZhbGlkZXIsXG4uZGl2Q29uZmlndXJhdGlvbnMgLmN0YVZhbGlkZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kQ29uZmlnX2EpO1xufVxuLmRpdkNvbmZpZyAuY3RhVmFsaWRlcjpob3Zlcixcbi5kaXZDb25maWd1cmF0aW9ucyAuY3RhVmFsaWRlcjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRDb25maWdfYWgpO1xufVxuXG4vKiBCb3V0b24gdmFsaWRlciAtIFBhcnRpY2lwYW50cyAqL1xuLmRpdkdyb3VwZXMgLmN0YVZhbGlkZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kR3JvdXBlc19hKTtcbn1cbi5kaXZHcm91cGVzIC5jdGFWYWxpZGVyOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZEdyb3VwZXNfYWgpO1xufVxuXG4vKiBCb3V0b24gdmFsaWRlciAtIExvdHMgKi9cbi5kaXZEaXN0cmlidXRpb25zIC5jdGFWYWxpZGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZERpc3RyaWJ1dGlvbnNfYSk7XG59XG4uZGl2RGlzdHJpYnV0aW9ucyAuY3RhVmFsaWRlcjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmREaXN0cmlidXRpb25zX2FoKTtcbn1cblxuLyogQm91dG9uIHZhbGlkZXIgLSBTY2VuZXMgKi9cbi5kaXZTY2VuZXMgLmN0YVZhbGlkZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kU2NlbmVzX2EpO1xufVxuLmRpdlNjZW5lcyAuY3RhVmFsaWRlcjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRTY2VuZXNfYWgpO1xufVxuXG4vKiBCb3V0b24gdmFsaWRlciAtIEFmZmljaGFnZXMgKi9cbi5kaXZBZmZpY2hhZ2VzIC5jdGFWYWxpZGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZEFmZmljaGFnZXNfYSk7XG59XG4uZGl2QWZmaWNoYWdlcyAuY3RhVmFsaWRlcjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRBZmZpY2hhZ2VzX2FoKTtcbn1cblxuLyogRm9jdXMgZGVzIGNoYW1wcyAtIENvbmZpZyAqL1xuLmRpdkNvbmZpZyBpbnB1dDpmb2N1cyxcbi5kaXZDb25maWcgdGV4dGFyZWE6Zm9jdXMsXG4uZGl2Q29uZmlndXJhdGlvbnMgaW5wdXQ6Zm9jdXMsXG4uZGl2Q29uZmlndXJhdGlvbnMgdGV4dGFyZWE6Zm9jdXMge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY0ZvbmRDb25maWc0KTtcbiAgICBvdXRsaW5lLWNvbG9yOiB2YXIoLS1jRm9uZENvbmZpZzQpO1xufVxuXG4vKiBGb2N1cyBkZXMgY2hhbXBzIC0gUGFydGljaXBhbnRzICovXG4uZGl2R3JvdXBlcyBpbnB1dDpmb2N1cyxcbi5kaXZHcm91cGVzIHRleHRhcmVhOmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNGb25kR3JvdXBlczQpO1xuICAgIG91dGxpbmUtY29sb3I6IHZhcigtLWNGb25kR3JvdXBlczQpO1xufVxuXG4vKiBGb2N1cyBkZXMgY2hhbXBzIC0gTG90cyAqL1xuLmRpdkRpc3RyaWJ1dGlvbnMgaW5wdXQ6Zm9jdXMsXG4uZGl2RGlzdHJpYnV0aW9ucyB0ZXh0YXJlYTpmb2N1cyB7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jRm9uZERpc3RyaWJ1dGlvbnM0KTtcbiAgICBvdXRsaW5lLWNvbG9yOiB2YXIoLS1jRm9uZERpc3RyaWJ1dGlvbnM0KTtcbn1cblxuLyogRm9jdXMgZGVzIGNoYW1wcyAtIFNjZW5lcyAqL1xuLmRpdlNjZW5lcyBpbnB1dDpmb2N1cyxcbi5kaXZTY2VuZXMgdGV4dGFyZWE6Zm9jdXMge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY0ZvbmRTY2VuZXM0KTtcbiAgICBvdXRsaW5lLWNvbG9yOiB2YXIoLS1jRm9uZFNjZW5lczQpO1xufVxuXG4vKiBGb2N1cyBkZXMgY2hhbXBzIC0gQWZmaWNoYWdlcyAqL1xuLmRpdkFmZmljaGFnZXMgaW5wdXQ6Zm9jdXMsXG4uZGl2QWZmaWNoYWdlcyB0ZXh0YXJlYTpmb2N1cyB7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jRm9uZEFmZmljaGFnZXM0KTtcbiAgICBvdXRsaW5lLWNvbG9yOiB2YXIoLS1jRm9uZEFmZmljaGFnZXM0KTtcbn1cblxuLyogVGV4dGVzIGQnYWlkZSAtIENvbmZpZyAqL1xuLmRpdkNvbmZpZyAuaGVscC10ZXh0LFxuLmRpdkNvbmZpZyAuZmFjdWx0YXRpZixcbi5kaXZDb25maWd1cmF0aW9ucyAuaGVscC10ZXh0LFxuLmRpdkNvbmZpZ3VyYXRpb25zIC5mYWN1bHRhdGlmIHtcbiAgICBjb2xvcjogdmFyKC0tY0ZvbmRDb25maWc0KTtcbn1cblxuLyogTGFiZWwgcHJpbmNpcGFsIGQndW4gZ3JvdXBlIChyYWRpbyAvIGNoYW1wKSBkYW5zIGxlcyBmb3JtdWxhaXJlcyBkZSBjb25maWcgPSB0aXRyZSAqL1xuLmRpdkNvbmZpZyA+IGRpdiA+IGxhYmVsOmZpcnN0LWNoaWxkIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTZTdHJvbmcpO1xufVxuXG4vKiBUZXh0ZXMgZCdhaWRlIC0gUGFydGljaXBhbnRzICovXG4uZGl2R3JvdXBlcyAuaGVscC10ZXh0LFxuLmRpdkdyb3VwZXMgLmZhY3VsdGF0aWYge1xuICAgIGNvbG9yOiB2YXIoLS1jRm9uZEdyb3VwZXM0KTtcbn1cblxuLyogVGV4dGVzIGQnYWlkZSAtIExvdHMgKi9cbi5kaXZEaXN0cmlidXRpb25zIC5oZWxwLXRleHQsXG4uZGl2RGlzdHJpYnV0aW9ucyAuZmFjdWx0YXRpZiB7XG4gICAgY29sb3I6IHZhcigtLWNGb25kRGlzdHJpYnV0aW9uczQpO1xufVxuXG4vKiBUZXh0ZXMgZCdhaWRlIC0gU2NlbmVzIDogcGFzIGRlIGNvdWxldXIgdGjDqW1hdGlxdWUsIHJlc3RlIGdyaXMgcGFyIGTDqWZhdXQgKi9cblxuLyogR3JvdXBlIHJhZGlvIHBvdXIgbGVzIHNsb3RzIGRlIGRpc3RyaWJ1dGlvbiAqL1xuXG4ucmFkaW9EaXN0cmlidXRpb25PcHRpb25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xufVxuXG4ucmFkaW9EaXN0cmlidXRpb25PcHRpb25zIC5kaXZSYiB7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ0hBTVAgTk9NIFJFUExJQUJMRVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmNoYW1wRXRpcXVldHRlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiAwLjVyZW07XG59XG5cbi5jaGFtcEV0aXF1ZXR0ZVZhbGV1ciB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG59XG5cbi5jaGFtcEV0aXF1ZXR0ZUVkaXRlciB7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHBhZGRpbmc6IDAuMnJlbTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7XG59XG5cbi5jaGFtcEV0aXF1ZXR0ZUVkaXRlcjpob3ZlciB7XG4gICAgb3BhY2l0eTogMC42O1xufVxuXG4uY2hhbXBFdGlxdWV0dGUgLm1hc3F1ZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLmNoYW1wRXRpcXVldHRlQ2hhbXAge1xuICAgIGZsZXg6IDE7XG59XG5cbi5yYWRpb0Rpc3RyaWJ1dGlvbk9wdGlvbnMgLmRpdlJiIGxhYmVsIHtcbiAgICBnYXA6IHZhcigtLWdhcExhcmdlKTsgLyogYWxpZ27DqSAxNiAtPiAyMHB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xufVxuXG4vKiBDaGVja2JveGVzIGV0IHJhZGlvcyAtIENvbmZpZyAqL1xuLmRpdkNvbmZpZyAuc3ZnQ2IsXG4uZGl2Q29uZmlnIC5zdmdSYixcbi5kaXZDb25maWd1cmF0aW9ucyAuc3ZnQ2IsXG4uZGl2Q29uZmlndXJhdGlvbnMgLnN2Z1JiIHtcbiAgICBjb2xvcjogdmFyKC0tY0ZvbmRDb25maWcpO1xufVxuXG4vKiBDaGVja2JveGVzIGV0IHJhZGlvcyAtIFBhcnRpY2lwYW50cyAqL1xuLmRpdkdyb3VwZXMgLnN2Z0NiLFxuLmRpdkdyb3VwZXMgLnN2Z1JiIHtcbiAgICBjb2xvcjogdmFyKC0tY0ZvbmRHcm91cGVzKTtcbn1cblxuLyogQ2hlY2tib3hlcyBldCByYWRpb3MgLSBMb3RzICovXG4uZGl2RGlzdHJpYnV0aW9ucyAuc3ZnQ2IsXG4uZGl2RGlzdHJpYnV0aW9ucyAuc3ZnUmIge1xuICAgIGNvbG9yOiB2YXIoLS1jRm9uZERpc3RyaWJ1dGlvbnMpO1xufVxuXG4vKiBDaGVja2JveGVzIGV0IHJhZGlvcyAtIFNjZW5lcyAqL1xuLmRpdlNjZW5lcyAuc3ZnQ2IsXG4uZGl2U2NlbmVzIC5zdmdSYiB7XG4gICAgY29sb3I6IHZhcigtLWNGb25kU2NlbmVzKTtcbn1cblxuLyogQ2hlY2tib3hlcyBldCByYWRpb3MgLSBBZmZpY2hhZ2VzICovXG4uZGl2QWZmaWNoYWdlcyAuc3ZnQ2IsXG4uZGl2QWZmaWNoYWdlcyAuc3ZnUmIge1xuICAgIGNvbG9yOiB2YXIoLS1jRm9uZEFmZmljaGFnZXMpO1xufVxuXG4vKiBEYW5zIHVuIGZvcm11bGFpcmUgYW5pbWF0aW9uLCBsZXMgc2VjdGlvbnMgcGFydGljaXBhbnRzL2xvdHMgZ2FyZGVudCBsZXVyIHByb3ByZSBjb3VsZXVyICovXG4uc2VjdGlvbkFuaW1Hcm91cGVzIC5zdmdDYixcbi5zZWN0aW9uQW5pbUdyb3VwZXMgLnN2Z1JiIHsgY29sb3I6IHZhcigtLWNGb25kR3JvdXBlcyk7IH1cbi5zZWN0aW9uQW5pbUxvdHMgLnN2Z0NiLFxuLnNlY3Rpb25BbmltTG90cyAuc3ZnUmIgeyBjb2xvcjogdmFyKC0tY0ZvbmREaXN0cmlidXRpb25zKTsgfVxuXG4vKiBTZWN0aW9ucyBjb2xvcsOpZXMgZGFucyBsZXMgZm9ybXVsYWlyZXMgZCdhbmltYXRpb24gKi9cbi5wYW5uZWF1Rm9ybXVsYWlyZSBmb3JtID4gLnNlY3Rpb25BbmltR3JvdXBlcyB7XG4gICAgbWFyZ2luOiAyMHB4IDA7XG59XG5cbi8qIEJvdXRvbiBmaWxlIGlucHV0IC0gQ29uZmlnICovXG4uZGl2Q29uZmlnIGlucHV0W3R5cGU9XCJmaWxlXCJdOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbixcbi5kaXZDb25maWd1cmF0aW9ucyBpbnB1dFt0eXBlPVwiZmlsZVwiXTo6ZmlsZS1zZWxlY3Rvci1idXR0b24ge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kQ29uZmlnX2EpO1xufVxuLmRpdkNvbmZpZyBpbnB1dFt0eXBlPVwiZmlsZVwiXTo6ZmlsZS1zZWxlY3Rvci1idXR0b246aG92ZXIsXG4uZGl2Q29uZmlndXJhdGlvbnMgaW5wdXRbdHlwZT1cImZpbGVcIl06OmZpbGUtc2VsZWN0b3ItYnV0dG9uOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZENvbmZpZ19haCk7XG59XG5cbi8qIEJvdXRvbiBmaWxlIGlucHV0IC0gUGFydGljaXBhbnRzICovXG4uZGl2R3JvdXBlcyBpbnB1dFt0eXBlPVwiZmlsZVwiXTo6ZmlsZS1zZWxlY3Rvci1idXR0b24ge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kR3JvdXBlc19hKTtcbn1cbi5kaXZHcm91cGVzIGlucHV0W3R5cGU9XCJmaWxlXCJdOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRHcm91cGVzX2FoKTtcbn1cblxuLyogQm91dG9uIGZpbGUgaW5wdXQgLSBMb3RzICovXG4uZGl2RGlzdHJpYnV0aW9ucyBpbnB1dFt0eXBlPVwiZmlsZVwiXTo6ZmlsZS1zZWxlY3Rvci1idXR0b24ge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kRGlzdHJpYnV0aW9uc19hKTtcbn1cbi5kaXZEaXN0cmlidXRpb25zIGlucHV0W3R5cGU9XCJmaWxlXCJdOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmREaXN0cmlidXRpb25zX2FoKTtcbn1cblxuLyogQm91dG9uIGZpbGUgaW5wdXQgLSBTY2VuZXMgKi9cbi5kaXZTY2VuZXMgaW5wdXRbdHlwZT1cImZpbGVcIl06OmZpbGUtc2VsZWN0b3ItYnV0dG9uIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZFNjZW5lc19hKTtcbn1cbi5kaXZTY2VuZXMgaW5wdXRbdHlwZT1cImZpbGVcIl06OmZpbGUtc2VsZWN0b3ItYnV0dG9uOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZFNjZW5lc19haCk7XG59XG5cbi8qIEJvdXRvbiBmaWxlIGlucHV0IC0gQWZmaWNoYWdlcyAqL1xuLmRpdkFmZmljaGFnZXMgaW5wdXRbdHlwZT1cImZpbGVcIl06OmZpbGUtc2VsZWN0b3ItYnV0dG9uIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZEFmZmljaGFnZXNfYSk7XG59XG4uZGl2QWZmaWNoYWdlcyBpbnB1dFt0eXBlPVwiZmlsZVwiXTo6ZmlsZS1zZWxlY3Rvci1idXR0b246aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kQWZmaWNoYWdlc19haCk7XG59XG5cbi8qIFBhbm5lYXUgZm9ybXVsYWlyZSA6IHVuIHNldWwgZm9ybSBPVSBwbHVzaWV1cnMgLmNvbnRlbnUgKi9cbi5wYW5uZWF1R2F1Y2hlRmxleCxcbi5wYW5uZWF1Rm9ybXVsYWlyZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwTGlzdGUpO1xufVxuXG4vKiBmb3JtIHBvdXIgbGVzIGZvcm11bGFpcmVzLCAuYmxvY0NvbnRlbnUgcG91ciBsZXMgYmxvY3MgZCdpbmZvcm1hdGlvbiAqL1xuLnBhbm5lYXVGb3JtdWxhaXJlIGZvcm0sXG4ucGFubmVhdUZvcm11bGFpcmUgLmJsb2NDb250ZW51LFxuLnBhbm5lYXVHYXVjaGVGbGV4IC5ibG9jQ29udGVudSB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyQ2FydGUgKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLnBhbm5lYXVGb3JtdWxhaXJlIC5ibG9jQ29udGVudSxcbi5wYW5uZWF1R2F1Y2hlRmxleCAuYmxvY0NvbnRlbnUge1xuICAgIHBhZGRpbmctYm90dG9tOiAyMHB4O1xufVxuXG4vKiBCbG9jIGNvbnRlbnUgZW4gbW9kZSB0ZXN0IChzdHlsZSB2aW9sZXQpICovXG4uYmxvY0NvbnRlbnVUZXN0IC50aXRyZUZvcm11bGFpcmUge1xuICAgIC0tdGl0cmVGb25kOiB2YXIoLS1jVGVzdCk7XG4gICAgLS10aXRyZUljb25lRm9uZDogdmFyKC0tY1Rlc3QyKTtcbn1cblxuLnBhbm5lYXVGb3JtdWxhaXJlIC5kaXZDYixcbi5wYW5uZWF1R2F1Y2hlRmxleCAuZGl2Q2Ige1xuICAgIG1hcmdpbjogMCAwIDIwcHg7XG59XG5cbi5wYW5uZWF1Rm9ybXVsYWlyZSBmb3JtID4gaDQsXG4ucGFubmVhdUZvcm11bGFpcmUgLmJsb2NDb250ZW51ID4gaDQsXG4ucGFubmVhdUdhdWNoZUZsZXggLmJsb2NDb250ZW51ID4gaDQge1xuICAgIG1hcmdpbi10b3A6IDIwcHg7XG4gICAgcGFkZGluZzogMCAyMHB4O1xufVxuXG4ucGFubmVhdUZvcm11bGFpcmUgZm9ybSA+IGRpdixcbi5wYW5uZWF1Rm9ybXVsYWlyZSAuYmxvY0NvbnRlbnUgPiBkaXYsXG4ucGFubmVhdUdhdWNoZUZsZXggLmJsb2NDb250ZW51ID4gZGl2LFxuLnBhbm5lYXVGb3JtdWxhaXJlIGZvcm0gPiBwLFxuLnBhbm5lYXVGb3JtdWxhaXJlIC5ibG9jQ29udGVudSA+IHAsXG4ucGFubmVhdUdhdWNoZUZsZXggLmJsb2NDb250ZW51ID4gcCB7XG4gICAgcGFkZGluZzogMCAyMHB4O1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgU0VDVElPTlMgQ0FOT05JUVVFUyAoZm9ybXVsYWlyZXMgZCdhbmltYXRpb24pXG4gICBVbmUgc2VjdGlvbiA9IHVuIGNvbnRlbmV1ciAuc2VjdGlvbkZvcm11bGFpcmUgcXVpIHBvcnRlIHNvbiA8aDQ+LFxuICAgc2VzIGNoYW1wcyAoYWlkZSBjb21wcmlzZSkgZXQgc2VzIHNvdXMtZ3JvdXBlcy4gTGUgcGFkZGluZyBob3Jpem9udGFsXG4gICB2aWVudCBkdSBjb250cmF0IGZvcm0gPiBkaXYgY2ktZGVzc3VzIDsgaWNpLCBsZSByeXRobWUgaW50ZXJuZS5cbiAgIFJlZ2lzdHJlIDogYW5pbWF0aW9ucy9fcGFydGFnZS9zZWN0aW9ucy5qc29uXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4ucGFubmVhdUZvcm11bGFpcmUgZm9ybSA+IGRpdi5zZWN0aW9uRm9ybXVsYWlyZSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMjVweDtcbn1cblxuLnNlY3Rpb25Gb3JtdWxhaXJlID4gaDQge1xuICAgIG1hcmdpbjogMCAwIDEycHg7XG59XG5cbi5zZWN0aW9uRm9ybXVsYWlyZSA+IGRpdiB7XG4gICAgbWFyZ2luLWJvdHRvbTogMTJweDtcbn1cblxuLnNlY3Rpb25Gb3JtdWxhaXJlID4gOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi8qIExpc3RlIMOgIHB1Y2VzIGRhbnMgdW4gYmxvYyBkJ2luZm9ybWF0aW9uIDogbGUgcmVzZXQgZ2xvYmFsICgwMF9yZXNldCkgcmV0aXJlIGxlcyBwdWNlcyAqL1xuLnBhbm5lYXVGb3JtdWxhaXJlIC5ibG9jQ29udGVudSB1bCB7XG4gICAgbWFyZ2luOiAwIDAgMTVweDtcbiAgICBwYWRkaW5nLWlubGluZS1zdGFydDogNDBweDtcbiAgICBsaXN0LXN0eWxlOiBkaXNjO1xufVxuXG4ucGFubmVhdUZvcm11bGFpcmUgLmJsb2NDb250ZW51IGxpIHtcbiAgICBtYXJnaW46IDVweCAwO1xufVxuXG4vKiBMZSA8aHI+IHPDqXBhcmF0ZXVyIHMnYWxpZ25lIHN1ciBsZSByZXRyYWl0IGhvcml6b250YWwgZGVzIGNoYW1wcyAoMjBweCkgYXUgbGlldSBkZSBjb3VwZXIgdG91dGUgbGEgbGFyZ2V1ciAqL1xuLnBhbm5lYXVGb3JtdWxhaXJlIGZvcm0gPiBociB7XG4gICAgbWFyZ2luLWxlZnQ6IDIwcHg7XG4gICAgbWFyZ2luLXJpZ2h0OiAyMHB4O1xufVxuXG4ucGFubmVhdUZvcm11bGFpcmUgZm9ybSA+IGRpdixcbi5lc3BhY2VGb3JtID4gZGl2IHtcbiAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuXG4udGFibGVhdVByZXZpc3VhbGlzYXRpb24ge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICBmb250OiB2YXIoLS1mTGFiZWwpO1xufVxuXG4udGFibGVhdVByZXZpc3VhbGlzYXRpb24gdGgsXG4udGFibGVhdVByZXZpc3VhbGlzYXRpb24gdGQge1xuICAgIHBhZGRpbmc6IDRweCA4cHg7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXIpO1xuICAgIHRleHQtYWxpZ246IGxlZnQ7XG59XG5cbi50YWJsZWF1UHJldmlzdWFsaXNhdGlvbiB0aCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xuICAgIGZvbnQ6IHZhcigtLWZMYWJlbCk7XG59XG5cbi50YWJsZWF1UHJldmlzdWFsaXNhdGlvbiAuc2VwYXJhdGV1clByZXZpc3VhbGlzYXRpb24gdGQge1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi8qIFRvZ2dsZSBhdmVjIGxhYmVsIOKAlCBjbGFzc2VzIGRlIGJhc2UgKGTDqXBsYWPDqWVzIGRlcHVpcyBfbW9kYWxlLmNzcykgKi9cbi50b2dnbGVBdmVjTGFiZWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luOiA4cHggMDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi50b2dnbGVMYWJlbCB7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG59XG5cbi8qIFRvZ2dsZSBkw6lzYWN0aXbDqSAoYmxvcXXDqSkgKi9cbi50b2dnbGVEaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMC40O1xuICAgIGZpbHRlcjogZ3JheXNjYWxlKDEpO1xuICAgIGN1cnNvcjogYXV0bztcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLyogcG9pbnRlci1ldmVudHM6bm9uZSByZW5kIGxlIHRvZ2dsZSB0cmFuc3BhcmVudCBhdSBzdXJ2b2wgOiBzYW5zIMOnYSBsZSBjdXJzb3I6cG9pbnRlciBkdSBsYWJlbCByZXByZW5kIGxhIG1haW4gc3VyIHRvdXRlIGxhIGxpZ25lICovXG4udG9nZ2xlQXZlY0xhYmVsOmhhcygudG9nZ2xlRGlzYWJsZWQpIHtcbiAgICBjdXJzb3I6IGF1dG87XG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xNCA6IHBhcmFtw6h0cmUgJ21lc3NhZ2UnIGR1IHRvZ2dsZSBqYW1haXMgcGFzc8OpIHBhciBhdWN1biBhcHBlbGFudCA7IHJlbmRhaXQgdW4gdGV4dGUgUk9VR0UgZCdhbGVydGUgYWxvcnMgcXVlIGTDqWNyaXQgY29tbWUgwqsgZXhwbGljYXRpZiDCuyAoQURSIHbDqXJpZmljYXRpb25Eb2N1bWVudGF0aW9uLCBjYXMgcsOpZWwgbsKwNSlcbi50b2dnbGVNZXNzYWdlIHtcbiAgICBmb250OiB2YXIoLS1mTGlnaHQxNCk7XG4gICAgY29sb3I6IHZhcigtLWNSb3VnZSk7XG59XG4qL1xuXG4ucGFubmVhdUZvcm11bGFpcmUgLnRvZ2dsZUF2ZWNMYWJlbCB7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xufVxuXG4ucGFubmVhdUZvcm11bGFpcmUgZm9ybSAudG9nZ2xlQXZlY0xhYmVsIHtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTtcbiAgICBnYXA6IHZhcigtLWdhcExhcmdlKTsgLyogYWxpZ27DqSAxNiAtPiAyMHB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xufVxuXG4vKiBMaWduZSB0b2dnbGUgZHUgdGjDqG1lIGRlIGZvcm11bGFpcmUgKGRpdi5saWduZVRvZ2dsZSA+IGxhYmVsICsgYWlkZSkgOiBsZSBjb250ZW5ldXJcbiAgIHBvcnRlIGwnZXNwYWNlbWVudCBkZSBsaWduZSwgbGUgdG9nZ2xlIG4nYSBwbHVzIGRlIG1hcmdlIHByb3ByZS4gTGVzIHRvZ2dsZXMgw6ljcml0c1xuICAgw6AgbGEgbWFpbiAoc2xvdHMgZGUgc291cmNlcykgZ2FyZGVudCBsZXVyIG1hcmdpbiA4cHggcG91ciBzJ2VzcGFjZXIgZW50cmUgZXV4LiAqL1xuLmxpZ25lVG9nZ2xlID4gLnRvZ2dsZUF2ZWNMYWJlbCB7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4ucGFubmVhdUZvcm11bGFpcmUgLmZvcm1BY3Rpb25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7IC8qIGFsaWduw6kgMTAgLT4gMTJweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbiAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgcGFkZGluZy1ib3R0b206IDA7XG59XG4vKiBjdGFBbm51bGVyIGRhbnMgbGUgcGFubmVhdSA6IHBhcyBkZSBtYXJnaW4gKGxlIG5veWF1IG1ldCAyMHB4LCBpbnV0aWxlIGljaSkgKi9cbi5wYW5uZWF1Rm9ybXVsYWlyZSAuZm9ybUFjdGlvbnMgPiAuY3RhQW5udWxlciB7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4vKiBMZSBzdHlsZSBkZXMgYWxlcnRlcyAoY291bGV1cnMsIHBvbGljZSwgcGFkZGluZykgdmllbnQgZHUgbm95YXUgKDQyX2F1dGguY3NzKSA6XG4gICBpY2kgdW5pcXVlbWVudCBsJ2FsaWduZW1lbnQgc3VyIGxlIHBhZGRpbmcgbGF0w6lyYWwgZHUgZm9ybXVsYWlyZSAqL1xuLnBhbm5lYXVGb3JtdWxhaXJlIC5hbGVydEVycmV1ciB7XG4gICAgbWFyZ2luOiAwIDIwcHggMTBweDtcbn1cblxuLnBhbm5lYXVGb3JtdWxhaXJlIC5hbGVydEVycmV1ciBsaSB7XG4gICAgY29sb3I6IGluaGVyaXQ7XG59XG5cbi5wYW5uZWF1Rm9ybXVsYWlyZSAuYWxlcnRFcnJldXIgdWwge1xuICAgIG1hcmdpbjogNnB4IDAgMDtcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG4gICAgbGlzdC1zdHlsZTogZGlzYztcbn1cblxuLnBhbm5lYXVGb3JtdWxhaXJlIGZvcm0gPiBkaXYgLmFsZXJ0RXJyZXVyIHtcbiAgICBtYXJnaW46IDAgMCAxMHB4O1xufVxuXG4ucGFubmVhdUZvcm11bGFpcmUgLmZvcm1BY3Rpb25zIC5hbGVydEVycmV1ciB7XG4gICAgbWFyZ2luOiAwO1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4ucGFubmVhdUZvcm11bGFpcmUgLmN0YUFubnVsZXI6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4vKiBCb3V0b24gwqsgUmVtcGxhY2VyIHBhciB1bmUgYW5pbWF0aW9uIHNpbWlsYWlyZSDCuyA6IG91dnJlIGxhIHBvcHVwIGRlcyBqdW1lbGxlcyBkZSBmYW1pbGxlXG4gICAocGFzIHVuZSBhY3Rpb24gcsOpZWxsZSwgY29udHJhaXJlbWVudCDDoCBBbm51bGVyL1N1cHByaW1lciBvdSBNb2RpZmllciB2b2lzaW5zKS4gUHLDqXNlbnQgZGFuc1xuICAgbGUgZm9ybXVsYWlyZSBkJ8OpZGl0aW9uIEVUIGxlIHBhbm5lYXUgcsOpY2FwIChkJ2/DuSAucGFubmVhdUdhdWNoZSwgbGV1ciBwYXJlbnQgY29tbXVuKS4gTcOqbWVcbiAgIHBvbGljZSBldCBtw6ptZSBjb3VsZXVyIHF1J0FubnVsZXIvTW9kaWZpZXIgKGNmLiBub3lhdSAzMV9jdGEuY3NzKSA6IHNldWxlcyBsZXMgYWN0aW9uc1xuICAgbWFycXXDqWVzIChTdXBwcmltZXIpIGdhcmRlbnQgdW5lIGNvdWxldXIuICovXG4ucGFubmVhdUdhdWNoZSAubGllblNpbWlsYWlyZXMge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnBhbm5lYXVHYXVjaGUgLmxpZW5TaW1pbGFpcmVzOmhvdmVyIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuXG5kaXYgLmN0YVN1cHByaW1lciB7XG4gICAgd2lkdGg6IGF1dG87XG4gICAgaGVpZ2h0OiBhdXRvO1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2UpO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuZGl2IC5jdGFTdXBwcmltZXI6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG5kaXYgLmN0YVN1cHByaW1lckNvbmZpcm0ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBpc29sYXRpb246IGlzb2xhdGU7XG4gICAgY29sb3I6IHZhcigtLWNCbGFuYyk7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgbWFyZ2luLWxlZnQ6IDEwcHg7XG59XG5cbmRpdiAuY3RhU3VwcHJpbWVyQ29uZmlybTo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgaW5zZXQ6IC01cHggLTEycHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY1JvdWdlKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgei1pbmRleDogLTE7XG4gICAgYW5pbWF0aW9uOiBjb25maXJtQmdHcm93IDAuMnMgZWFzZS1vdXQgZm9yd2FyZHM7XG59XG5cbkBrZXlmcmFtZXMgY29uZmlybUJnR3JvdyB7XG4gICAgZnJvbSB7XG4gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC43KTtcbiAgICAgICAgb3BhY2l0eTogMDtcbiAgICB9XG4gICAgdG8ge1xuICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbn1cblxuZGl2IC5jdGFTdXBwcmltZXJEZXNhY3RpdmUge1xuICAgIG9wYWNpdHk6IDAuNDtcbiAgICBjdXJzb3I6IGF1dG87XG59XG5cbmRpdiAuY3RhU3VwcHJpbWVyLmhpZGRlbiB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogQ2hhbXAgZW5mYW50IGTDqXBlbmRhbnQgZCd1biBhdXRyZSBjaGFtcCAoY2hlY2tib3ggcGFyZW50KVxuICAgVXRpbGlzw6kgYXZlYyBkYXRhLXRvZ2dsZS1lbmZhbnQgc3VyIGxlIHBhcmVudCBldCBjbGFzc2UgY2hhbXBFbmZhbnQgc3VyIGwnZW5mYW50ICovXG4uY2hhbXBFbmZhbnQge1xuICAgIHRyYW5zaXRpb246IDAuMnM7XG59XG5cbi5jaGFtcEVuZmFudC5pbmFjdGlmIHtcbiAgICBvcGFjaXR5OiAwLjQ7XG4gICAgZmlsdGVyOiBncmF5c2NhbGUoMSk7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgY3Vyc29yOiBhdXRvO1xufVxuXG4uZGl2RGlzdHJpYnV0aW9uTW9kZSAuY2hhbXBFbmZhbnQuaW5hY3RpZiB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogU8OpcGFyYXRldXIgZGlzY3JldCBhdmVjIHRleHRlIGNlbnRyw6kgKHV0aWxpc8OpIGRhbnMgbGVzIHNsb3RzIGQnZW50csOpZXMpICovXG4uc2VwYXJhdGV1ckRpc2NyZXQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG4gICAgbWFyZ2luOiA2cHggMDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBmb250OiB2YXIoLS1mTGlnaHQxNCk7XG59XG5cbi5zZXBhcmF0ZXVyRGlzY3JldDo6YmVmb3JlLFxuLnNlcGFyYXRldXJEaXNjcmV0OjphZnRlciB7XG4gICAgY29udGVudDogJyc7XG4gICAgZmxleDogMTtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tY0JsYW5jMDMpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ09OVFJBVCBBTklNQVRJT04g4oCUIFZFUlNJT04gRMOJVEFJTEzDiUVcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5jb250cmF0c0RldGFpbCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwUmVkdWl0KTtcbiAgICBwYWRkaW5nOiAxMHB4IDA7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG59XG5cbi5jb250cmF0RGV0YWlsTGlnbmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG5cbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG59XG5cbi5jb250cmF0RGV0YWlsRWxlbWVudCB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7IC8qIGFsaWduw6kgNSAtPiA4cHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG59XG5cbi5jb250cmF0RGV0YWlsSWNvbmUgc3ZnIHtcbiAgICB3aWR0aDogMjJweDtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5jb250cmF0RGV0YWlsTGFiZWwge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4uY29udHJhdERldGFpbEZsZWNoZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cblxuLmNvbnRyYXREZXRhaWxGbGVjaGUgc3ZnIHtcbiAgICB3aWR0aDogMThweDtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi8qIEJvdXRvbiBmZXJtZXIgbGUgcGFubmVhdSBmb3JtdWxhaXJlICovXG4ucGFubmVhdUNsb3NlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA1MCU7XG4gICAgcmlnaHQ6IDVweDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBFTlRSw4lFUyBHUk9VUEVTIChncm91cGVzIGRhbnMgbGVzIGFuaW1hdGlvbnMpXG4gICBVdGlsaXNlIC5ibG9jRW5jYWRyZSBjb21tZSBiYXNlIGRlIGRlc2lnblxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmVudHJlZUdyb3VwZUhlYWRlciB7XG4gICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cblxuLmVudHJlZUdyb3VwZUhlYWRlciAuZW50cmVlTnVtZXJvIHtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xufVxuXG4vKiBHcm91cGUgZGUgY2hhbXBzIGVuIGdyaWxsZSAob3B0aW9uIFwiY29sb25uZXNcIiBkZSBmb3JtLmpzb24pIDogTiBjaGFtcHMgcGFyIGxpZ25lLlxuICAgU3VyY2xhc3NlIGxlIGRpc3BsYXk6ZmxleCBkZSAuYmxvY1ZlcnRpY2FsIDsgbGUgc2hvd0lmIGJhc2N1bGUgc3R5bGUuZGlzcGxheSAobm9uZS8nJykgcGFyLWRlc3N1cy4gKi9cbi5wYW5uZWF1Rm9ybXVsYWlyZSBmb3JtID4gZGl2LmJsb2NWZXJ0aWNhbC5jaGFtcHNHcmlsbGUsXG4uc2VjdGlvbkZvcm11bGFpcmUgPiBkaXYuYmxvY1ZlcnRpY2FsLmNoYW1wc0dyaWxsZSB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCkgdmFyKC0tZ2FwTGFyZ2UpOyAvKiBhbGlnbsOpIDYtPjgsIDE2LT4yMHB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xuICAgIC8qIExlcyBsYWJlbHMgbidvbnQgcGFzIHRvdXMgbGEgbcOqbWUgaGF1dGV1ciA6IGNhbGVyIHBhciBsZSBiYXMgYWxpZ25lIGxlcyBpbnB1dHMgZCd1bmUgcmFuZ8OpZSAqL1xuICAgIGFsaWduLWl0ZW1zOiBlbmQ7XG59XG5cbi8qIEludGVydGl0cmUgZGUgcmFuZ8OpZSBkJ3VuZSBncmlsbGUgKG9wdGlvbiBcInRpdHJlc0xpZ25lc1wiIGRlIGZvcm0uanNvbiwgZXguIMKrIFBhbGllciAxIMK7KSAqL1xuLmdyaWxsZUxpZ25lVGl0cmUge1xuICAgIGdyaWQtY29sdW1uOiAxIC8gLTE7XG4gICAgbWFyZ2luLXRvcDogMTBweDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xufVxuXG4uY2hhbXBzR3JpbGxlIC5ncmlsbGVMaWduZVRpdHJlOmZpcnN0LWNoaWxkIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xufVxuXG4ucGFubmVhdUZvcm11bGFpcmUgZm9ybSA+IGRpdi5ibG9jVmVydGljYWwuY2hhbXBzR3JpbGxlW2RhdGEtY29sb25uZXM9XCIzXCJdLFxuLnNlY3Rpb25Gb3JtdWxhaXJlID4gZGl2LmJsb2NWZXJ0aWNhbC5jaGFtcHNHcmlsbGVbZGF0YS1jb2xvbm5lcz1cIjNcIl0ge1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDMsIDFmcik7XG59XG5cbi8qIE5vdGUgZCdhaWRlIGQndW4gZ3JvdXBlIChvcHRpb24gXCJhaWRlXCIgZGUgZm9ybS5qc29uKSA6IHBsZWluZSBsYXJnZXVyLCBzb3VzIGxlcyBjaGFtcHMuICovXG4uZ3JpbGxlQWlkZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5jaGFtcHNHcmlsbGUgLmdyaWxsZUFpZGUge1xuICAgIGdyaWQtY29sdW1uOiAxIC8gLTE7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgVE9HR0xFIE1FTlUgLSBDbGFzc2UgZGUgYmFzZSByw6l1dGlsaXNhYmxlXG4gICBTY2VuZSBzbGlkZSBmbHVpZGUgZW50cmUgbGVzIG9uZ2xldHNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5kaXZPbmdsZXRNZW51IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBnYXA6IHZhcigtLWdhcFJlZHVpdCk7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgd2lkdGg6IGZpdC1jb250ZW50O1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBvdmVyZmxvdy14OiBhdXRvO1xufVxuXG4vKiBJbmRpY2F0ZXVyIHF1aSBzbGlkZSDigJQgcGFzIGRlIGNvdWxldXIgcGFyIGTDqWZhdXQsIGNoYXF1ZSBvbmdsZXQgYSBzYSBjbGFzc2UgY291bGV1ciAqL1xuLmluZGljYXRldXJPbmdsZXQge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIHRyYW5zaXRpb246IGxlZnQgMC4zNXMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKSxcbiAgICB3aWR0aCAwLjM1cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpLFxuICAgIGJhY2tncm91bmQgMC4zNXMgZWFzZTtcbiAgICB6LWluZGV4OiAwO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4vKiBDb3VsZXVycyBkZSBsJ2luZGljYXRldXIgcGFyIHR5cGUgKi9cbi5pbmRpY2F0ZXVyT25nbGV0LmluZGljYXRldXJPbmdsZXRHcm91cGVzLFxuLmluZGljYXRldXJPbmdsZXQuaW5kaWNhdGV1ck9uZ2xldEVxdWlwZXMsXG4uaW5kaWNhdGV1ck9uZ2xldC5pbmRpY2F0ZXVyT25nbGV0TnVtZXJvcyxcbi5pbmRpY2F0ZXVyT25nbGV0LmluZGljYXRldXJPbmdsZXRCb3JuZSxcbi5pbmRpY2F0ZXVyT25nbGV0LmluZGljYXRldXJPbmdsZXRRckNvZGUsXG4uaW5kaWNhdGV1ck9uZ2xldC5pbmRpY2F0ZXVyT25nbGV0V2ViRm9ybSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRHcm91cGVzX2EpO1xufVxuXG4uaW5kaWNhdGV1ck9uZ2xldC5pbmRpY2F0ZXVyT25nbGV0RGlzdHJpYnV0aW9ucyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmREaXN0cmlidXRpb25zX2EpO1xufVxuXG4uaW5kaWNhdGV1ck9uZ2xldC5pbmRpY2F0ZXVyT25nbGV0QXBwYXJlbmNlLFxuLmluZGljYXRldXJPbmdsZXQuaW5kaWNhdGV1ck9uZ2xldENvbmZpZ3VyYXRpb25zIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZENvbmZpZ19hKTtcbn1cblxuLmluZGljYXRldXJPbmdsZXQuaW5kaWNhdGV1ck9uZ2xldEFmZmljaGFnZXMge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kQWZmaWNoYWdlc19hKTtcbn1cblxuLmluZGljYXRldXJPbmdsZXQuaW5kaWNhdGV1ck9uZ2xldFNjZW5lcyxcbi5pbmRpY2F0ZXVyT25nbGV0LmluZGljYXRldXJPbmdsZXRTY2VuYXJpbyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRTY2VuZXNfYSk7XG59XG5cbltkYXRhLW1vZGU9XCJ0ZXN0ZXJcIl0gLmluZGljYXRldXJPbmdsZXQuaW5kaWNhdGV1ck9uZ2xldFBhcnRpY2lwYW50cyxcbltkYXRhLW1vZGU9XCJ0ZXN0ZXJcIl0gLmluZGljYXRldXJPbmdsZXQuaW5kaWNhdGV1ck9uZ2xldEVxdWlwZXMsXG5bZGF0YS1tb2RlPVwidGVzdGVyXCJdIC5pbmRpY2F0ZXVyT25nbGV0LmluZGljYXRldXJPbmdsZXREaWZmdXNpb24sXG5bZGF0YS1tb2RlPVwidGVzdGVyXCJdIC5pbmRpY2F0ZXVyT25nbGV0LmluZGljYXRldXJPbmdsZXRQcm9ncmVzc2lvbixcbltkYXRhLW1vZGU9XCJ0ZXN0ZXJcIl0gLmluZGljYXRldXJPbmdsZXQuaW5kaWNhdGV1ck9uZ2xldFFyQ29kZSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY1Rlc3QzKTtcbn1cblxuLmluZGljYXRldXJPbmdsZXQuaW5kaWNhdGV1ck9uZ2xldFJlZ2llLFxuLmluZGljYXRldXJPbmdsZXQuaW5kaWNhdGV1ck9uZ2xldFJlY2FwaXR1bGF0aWYsXG5bZGF0YS1tb2RlPVwiZGlmZnVzZXJcIl0gLmluZGljYXRldXJPbmdsZXQuaW5kaWNhdGV1ck9uZ2xldERpZmZ1c2lvbixcbltkYXRhLW1vZGU9XCJkaWZmdXNlclwiXSAuaW5kaWNhdGV1ck9uZ2xldC5pbmRpY2F0ZXVyT25nbGV0UHJvZ3Jlc3Npb24sXG4uaW5kaWNhdGV1ck9uZ2xldC5pbmRpY2F0ZXVyT25nbGV0UmVzdWx0YXRzLFxuLmluZGljYXRldXJPbmdsZXQuaW5kaWNhdGV1ck9uZ2xldFB1YmxpY2F0aW9uLFxuW2RhdGEtbW9kZT1cImRpZmZ1c2VyXCJdIC5pbmRpY2F0ZXVyT25nbGV0LmluZGljYXRldXJPbmdsZXRQYXJ0aWNpcGFudHMsXG5bZGF0YS1tb2RlPVwiZGlmZnVzZXJcIl0gLmluZGljYXRldXJPbmdsZXQuaW5kaWNhdGV1ck9uZ2xldEVxdWlwZXMge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNDdGEpO1xufVxuXG4vKiBNb2RlIENvbmZpZ3VyZXIgOiB0b3VzIGxlcyBzb3VzLW9uZ2xldHMgcGFydGFnZW50IGxhIGNvdWxldXIgQ29uZmlnIOKAlCBwYXMgYmVzb2luIGQnZW5yaWNoaXIgT05HTEVUU19DT0xPUkVTLiAqL1xuW2RhdGEtbW9kZT1cImNvbmZpZ1wiXSAuaW5kaWNhdGV1ck9uZ2xldCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRDb25maWdfYSk7XG59XG5cbi8qIFN3aXRjaCBDb25maWd1cmVyIC8gVGVzdGVyIC8gRGlmZnVzZXIgKi9cbiNkaXZPbmdsZXRNb2RlV3JhcHBlciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4jZGl2T25nbGV0TW9kZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1jTm9pcjEpO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbiNkaXZPbmdsZXRNb2RlIC5vbmdsZXRNb2RlIHtcbiAgICBwYWRkaW5nOiA4cHggMThweDtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuI2Rpdk9uZ2xldE1vZGUgLm9uZ2xldE1vZGUuYWN0aWYge1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMxKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jTGluayk7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4jZGl2T25nbGV0TW9kZSAub25nbGV0TW9kZTpudGgtY2hpbGQoMikuYWN0aWYge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNUZXN0Myk7XG59XG5cbiNkaXZPbmdsZXRNb2RlIC5vbmdsZXRNb2RlLmRlc2FjdGl2ZSB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNSk7XG59XG5cbi8qIE9uZ2xldCBTdXBwcmltZXIgOiByb3VnZSAoYWN0aW9uIGRlc3RydWN0aXZlKSwgY29tbWUgbGUgbGllbiBTdXBwcmltZXIgZGUgbGEgbGlzdGUgKi9cbiNkaXZPbmdsZXRNb2RlIC5vbmdsZXRNb2RlW2RhdGEtbW9kZT1cInN1cHByaW1lclwiXS5hY3RpZiB7XG4gICAgY29sb3I6IHZhcigtLWNCbGFuYzEpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNSb3VnZTYpO1xufVxuXG4vKiBSYXBwZWwgZGUgbCdpY8O0bmUgZW5ncmVuYWdlIGR1IHRpdHJlIGRhbnMgbCdvbmdsZXQgQ29uZmlndXJlciAqL1xuI2Rpdk9uZ2xldE1vZGUgLm9uZ2xldE1vZGVbZGF0YS1tb2RlPVwiY29uZmlnXCJdIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTsgLyogYWxpZ27DqSA3IC0+IDhweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbn1cblxuI2Rpdk9uZ2xldE1vZGUgLm9uZ2xldE1vZGVbZGF0YS1tb2RlPVwiY29uZmlnXCJdIHN2ZyB7XG4gICAgd2lkdGg6IDE2cHg7XG4gICAgaGVpZ2h0OiAxNnB4O1xufVxuXG4vKiBBbGVydGUgcmVkaXJlY3Rpb24gKHRlc3QvZGlmZnVzaW9uIGVuIGNvdXJzKSAqL1xuLmFsZXJ0ZVJlZGlyZWN0aW9uIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICByaWdodDogMDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jUm91Z2UpO1xuICAgIGNvbG9yOiB2YXIoLS1jQmxhbmMpO1xuICAgIGZvbnQ6IHZhcigtLWZDdGExNik7XG4gICAgcGFkZGluZzogMTJweCAzMHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tb21icmVQb3J0ZWUpO1xuICAgIHotaW5kZXg6IDEwO1xuICAgIGFuaW1hdGlvbjogYWxlcnRlQXBwYXJpdGlvbiAwLjNzIGVhc2U7XG59XG5cbkBrZXlmcmFtZXMgYWxlcnRlQXBwYXJpdGlvbiB7XG4gICAgZnJvbSB7XG4gICAgICAgIG9wYWNpdHk6IDA7XG4gICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTBweCk7XG4gICAgfVxuICAgIHRvIHtcbiAgICAgICAgb3BhY2l0eTogMTtcbiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApO1xuICAgIH1cbn1cblxuLyogQm91dG9ucyAqL1xuLm9uZ2xldCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgcGFkZGluZzogMTBweCAyMHB4O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbi8qIMOJdG9pbGUgZGUgcmFwcGVsIMKrIMOgIGNvbmZpZ3VyZXIgwrsgKGNsYXNzZSBkw6lmaW5pZSBkYW5zIF9ncmlsbGUuY3NzKSA6IGhvcnMgZmx1eCBjb21tZSBzdXJcbiAgIGxhIGJyaXF1ZSwgc2lub24gc2VzIDIwcHggZ3JhbmRpcmFpZW50IGxhIGxpZ25lIGRlIGwnb25nbGV0LCBxdWkgZXN0IGVuIDE0cHgg4oCUIGV0IHNldWxzXG4gICBsZXMgb25nbGV0cyDDqXRvaWzDqXMgZGV2aWVuZHJhaWVudCBwbHVzIGhhdXRzIHF1ZSBsZXVycyB2b2lzaW5zLiBFbGxlIHNlIHBvc2UgZGFucyBsZVxuICAgcGFkZGluZyBkcm9pdCBkZSBsJ29uZ2xldCwgamFtYWlzIHBhci1kZXNzdXMgbGUgbGliZWxsw6kuICovXG4ub25nbGV0IC5wYXN0aWxsZVByb3Zpc29pcmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDZweDtcbn1cblxuLm9uZ2xldC5hY3RpZiAucGFzdGlsbGVQcm92aXNvaXJlIHtcbiAgICBjb2xvcjogdmFyKC0tY0JsYW5jMSk7XG4gICAgb3BhY2l0eTogLjU7XG59XG5cbi5vbmdsZXQ6aG92ZXI6bm90KC5hY3RpZikge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4ub25nbGV0LmFjdGlmIHtcbiAgICBjb2xvcjogdmFyKC0tY0JsYW5jMSk7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG4vKiBNYXNxdWVyIGxlcyB0b2dnbGVzIHNlY3Rpb24gbm9uIHBlcnRpbmVudHMgKi9cbi5kaXZPbmdsZXRNZW51Lm1hc3F1ZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogTWFzcXVlciBsZXMgYm91dG9ucyBpbmRpdmlkdWVscyBub24gcGVydGluZW50cyAqL1xuLm9uZ2xldC5tYXNxdWUge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIFJlc3BvbnNpdmUgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTlweCkge1xuICAgICNkaXZPbmdsZXRTZWN0aW9ucyB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHtcbiAgICAub25nbGV0IHtcbiAgICAgICAgZmxleC1zaHJpbms6IDA7XG4gICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgfVxufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIE1FTlUgQUpPVVRFUiAoQ2hvaXggZCfDqWzDqW1lbnQgw6AgY3LDqWVyKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLm1lbnVBam91dGVyIGgzIHtcbiAgICBtYXJnaW46IDAgMCAyMHB4IDA7XG4gICAgZm9udDogdmFyKC0tZkgzKTtcbn1cblxuLmxpZ25lU2VjdGlvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogMCAxODJweDsgLyogVmVydGljYWw6IDAgKGfDqXLDqSBwYXIgbWFyZ2luLWJvdHRvbSkgfCBIb3Jpem9udGFsOiBsYXJnZXVyIGQndW5lIGJyaXF1ZSAqL1xufVxuXG4ubGlnbmVTZWN0aW9ucyAuc2VjdGlvbkFqb3V0ZXIge1xuICAgIGZsZXg6IDAgMCBhdXRvOyAvKiBOZSBwYXMgw6l0aXJlciwgZ2FyZGVyIGxhIHRhaWxsZSBuYXR1cmVsbGUgKi9cbn1cblxuLnNlY3Rpb25Bam91dGVyIHtcbiAgICBtYXJnaW4tYm90dG9tOiAyNXB4O1xufVxuXG4vKiBNYXNxdWFnZSBpbml0aWFsIHBvdXIgw6l2aXRlciBsZSBmbGFzaCAoZGVza3RvcCB1bmlxdWVtZW50KSAqL1xuQG1lZGlhIChtaW4td2lkdGg6IDEwMDBweCkge1xuICAgIC5zZWN0aW9uQWpvdXRlcltkYXRhLXNlY3Rpb25dIHtcbiAgICAgICAgZGlzcGxheTogbm9uZTtcbiAgICB9XG5cbiAgICAuc2VjdGlvbkFqb3V0ZXJbZGF0YS1zZWN0aW9uXS52aXNpYmxlIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxufVxuXG4uc2VjdGlvbkFqb3V0ZXIgaDQge1xuICAgIG1hcmdpbjogMCAwIDEwcHggMDtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDtcbn1cblxuLnNlY3Rpb25Bam91dGVyIGg0OjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiKyBcIjtcbn1cblxuLmJyaXF1ZXNBam91dGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBnYXA6IHZhcigtLWdhcE1veWVuKTsgLyogYWxpZ27DqSAxMCAtPiAxMnB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xufVxuXG4uYnJpcXVlR3JvdXBlczo6YmVmb3JlIHtcbiAgICBjb2xvcjogdmFyKC0tY0ZvbmRHcm91cGVzMik7XG59XG5cbi5icmlxdWVEaXN0cmlidXRpb25zOjpiZWZvcmUge1xuICAgIGNvbG9yOiB2YXIoLS1jRm9uZERpc3RyaWJ1dGlvbnMyKTtcbn1cblxuLmJyaXF1ZUNvbmZpZ3VyYXRpb25zOjpiZWZvcmUge1xuICAgIGNvbG9yOiB2YXIoLS1jRm9uZENvbmZpZzIpO1xufVxuXG4uYnJpcXVlQWZmaWNoYWdlczo6YmVmb3JlIHtcbiAgICBjb2xvcjogdmFyKC0tY0ZvbmRBZmZpY2hhZ2VzMik7XG59XG5cbi5icmlxdWVTY2VuZXM6OmJlZm9yZSB7XG4gICAgY29sb3I6IHZhcigtLWNGb25kU2NlbmVzMik7XG59XG5cbi5icmlxdWUuYnJpcXVlRGlzdHJpYnV0aW9ucyxcbi5icmlxdWUuYnJpcXVlR3JvdXBlcyB7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4vKiBGaWx0cmUgcGFyIHRhZ3MgZXQgZW50csOpZXMgZGFucyBsYSBzZWN0aW9uIFNjZW5lcyA6XG4gICBsZSBkZXNpZ24gZHUgcGFubmVhdSB2aWVudCBkdSBjb21wb3NhbnQgY29tbXVuICg1NV9maWx0cmVzLmNzcykuICovXG5cbi5kaXZGaWx0cmVab25lIC5icmlxdWVzQWpvdXRlciB7XG4gICAgZmxleDogMTtcbiAgICBtaW4td2lkdGg6IDA7XG59XG5cbi5icmlxdWVTY2VuZXMubWFzcXVlIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4uYnJpcXVlR3JvdXBlcyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRHcm91cGVzKTtcbn1cblxuLmJyaXF1ZURpc3RyaWJ1dGlvbnMge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kRGlzdHJpYnV0aW9ucyk7XG59XG5cbi5icmlxdWVDb25maWd1cmF0aW9ucyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRDb25maWcpO1xufVxuXG4uYnJpcXVlQWZmaWNoYWdlcyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRBZmZpY2hhZ2VzKTtcbn1cblxuLmJyaXF1ZVNjZW5lcyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRTY2VuZXMpO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEJSSVFVRVMgRFUgU0PDiU5BUklPIFBBUiBUWVBFXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBCcmlxdWUgQnJvdWlsbG9uIChlbiBjb3VycyBkZSBjcsOpYXRpb24pICovXG4uYnJpcXVlQnJvdWlsbG9uIHtcbiAgICBvcGFjaXR5OiAwLjc7XG4gICAgYm9yZGVyLXN0eWxlOiBkYXNoZWQ7XG59XG5cbi8qIENvdWxldXJzIGRlcyBicmlxdWVzIGR1IHNjw6luYXJpbyBwYXIgdHlwZSAqL1xuLmJyaXF1ZS5icmlxdWVHcm91cGVzIHsgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRHcm91cGVzKTsgfVxuLmJyaXF1ZS5icmlxdWVEaXN0cmlidXRpb25zIHsgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmREaXN0cmlidXRpb25zKTsgfVxuLmJyaXF1ZS5icmlxdWVDb25maWd1cmF0aW9ucyB7IGJhY2tncm91bmQ6IHZhcigtLWNGb25kQ29uZmlnKTsgfVxuLmJyaXF1ZS5icmlxdWVBZmZpY2hhZ2VzIHsgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRBZmZpY2hhZ2VzKTsgfVxuLmJyaXF1ZS5icmlxdWVTY2VuZXMgeyBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZFNjZW5lcyk7IH1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBEUkFHICYgRFJPUFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmhhbmRsZURyYWcge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDZweDtcbiAgICByaWdodDogNnB4O1xuICAgIHdpZHRoOiAxOHB4O1xuICAgIGhlaWdodDogMTJweDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBvcGFjaXR5OiAwLjQ7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzO1xufVxuXG4uaGFuZGxlRHJhZzpob3ZlciB7XG4gICAgb3BhY2l0eTogMTtcbiAgICBjdXJzb3I6IGdyYWI7XG59XG5cbi5oYW5kbGVEcmFnOmFjdGl2ZSB7XG4gICAgY3Vyc29yOiBncmFiYmluZztcbn1cblxuLyogR3JpbGxlIHN0YXRpcXVlIChwYWdlIMKrIFZvaXIgbGEgY29uZmlnIMK7IGRlcyBhcGVyw6d1cykgOiBsYSBwb2lnbsOpZSByZXN0ZSB1biByZXDDqHJlIHZpc3VlbCwgc2FucyBhZmZvcmRhbmNlIGRlIGRyYWcgKi9cbi5zY2VuYXJpb0dyaWxsZVN0YXRpcXVlIC5oYW5kbGVEcmFnOmhvdmVyIHtcbiAgICBvcGFjaXR5OiAwLjQ7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xufVxuXG4vKiDDiXRhdCBwZW5kYW50IGxlIGRyYWcgKi9cbi5icmlxdWVEcmFnZ2FibGUuZHJhZ2dpbmcge1xuICAgIG9wYWNpdHk6IDAuNTtcbiAgICBib3JkZXItc3R5bGU6IGRhc2hlZDtcbiAgICBjdXJzb3I6IGdyYWJiaW5nO1xufVxuXG4vKiBab25lIGRlIGRyb3AgKi9cbiNzY2VuYXJpb0dyaWxsZS5mb3JtdWxhaXJlQWN0aWY6aG92ZXIgLmJyaXF1ZS5kcmFnT3Zlcixcbi5icmlxdWUuZHJhZ092ZXIge1xuICAgIGJveC1zaGFkb3c6IC00cHggLTRweCAwIHZhcigtLWNDdGEpO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKDRweCwgNHB4KSBzY2FsZSgxKTtcbiAgICB0cmFuc2l0aW9uOiAuNXMgZWFzZTtcbn1cblxuLyogU2NlbmUgRkxJUCBhdSBkcm9wICovXG4uYnJpcXVlLmFuaW1lRHJvcCB7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMjVzIGVhc2U7XG59XG5cbi8qIEZhbnTDtG1lIHBlbmRhbnQgbGUgZHJhZyAqL1xuLmRyYWdGYW50b21lIHtcbiAgICBvcGFjaXR5OiAwLjk7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tb21icmVQb3J0ZWUpO1xuICAgIGN1cnNvcjogZ3JhYmJpbmc7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQk9VVE9OIERFIEZFUk1FVFVSRSAoLm1vZGFsZUNsb3NlKSDigJQgc291cmNlIHVuaXF1ZSAoZG9jcy9kZXNpZ25TeXN0ZW0vYm91dG9uRmVybWV0dXJlLm1kKVxuXG4gICBMYSBjcm9peCBlc3QgZGVzc2luw6llIHBhciA6OmJlZm9yZSAobWFzayBTVkcgY2ktZGVzc291cykgOiBlbiBIVE1MIGxlIGJvdXRvbiByZXN0ZSBWSURFIOKAlFxuICAgbmUgSkFNQUlTIHkgbWV0dHJlIMOXIC8gJnRpbWVzOyAvIHRleHRlLiBSw6l1dGlsaXNhYmxlIDogVklERSA9IGNyb2l4IGNlbnRyw6llIDsgYXZlYyB1blxuICAgZW5mYW50IC5tb2RhbGVDbG9zZVRleHRlID0gbGEgbcOqbWUgYm/DrnRlIHMnw6lsYXJnaXQgZXQgdW4gbGliZWxsw6kgcydham91dGUgw6AgR0FVQ0hFIGRlIGxhXG4gICBjcm9peCAoZXguIMKrIFByZW5kcmUgbGEgbWFpbiDinJUgwrspLiBQYXMgZGUgcGFkZGluZyBob3Jpem9udGFsIDogbGEgY3JvaXggYSBkw6lqw6AgfjZweCBkZVxuICAgbWFyZ2UgaW50ZXJuZSDDoCBkcm9pdGUgKG1hc2sgNuKGkjE4IHN1ciB2aWV3Qm94IDI0KSwgYydlc3QgLm1vZGFsZUNsb3NlVGV4dGUgcXVpIHJlZG9ubmVcbiAgIGxlIG3Dqm1lIGFpciDDoCBnYXVjaGUg4oaSIMOpcXVpbGlicsOpLlxuXG4gICBJY2kgbGEgc2lsaG91ZXR0ZSBHw4lOw4lSQUxFIChib8OudGUgc291cGxlLCBjcm9peCAyMHB4IOKAlCBiYXJyZSBkJ2FwZXLDp3Ugw6ljcmFuKS4gTGVzXG4gICBjb250ZXh0ZXMgbifDqWNyaXZlbnQgcXVlIGxldXJzIMOpY2FydHMsIEFQUsOIUyBsZXVyIEBpbXBvcnQgZGUgY2UgZmljaGllciA6XG4gICAtIG1vZGFsZXMgUsOpZ2llICg1Nl9zY2VuYXJpby9fbW9kYWxlLmNzcykgOiBib8OudGUgZml4ZSA0NMOXNDQsIGNyb2l4IDI0IDtcbiAgIC0gc3VyY291Y2hlIGFwZXLDp3UgKGNvbXBvc2FudHMvc3VyY291Y2hlUHJldmlldy5jc3MpIDogaWRlbSArIG1hc3F1ZSDCqyBwbGVpbiDDqWNyYW4gwrsuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4ubW9kYWxlQ2xvc2Uge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBtaW4td2lkdGg6IDI1cHg7XG4gICAgcGFkZGluZzogOHB4IDVweDsgLyogdmVydGljYWwgYWxpZ27DqSBzdXIgLmN0YTE0IChtw6ptZSByeXRobWUgZGFucyBsYSBiYXJyZSBhcGVyw6d1KSAqL1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7XG59XG5cbi5tb2RhbGVDbG9zZTo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAnJztcbiAgICBvcmRlcjogMTsgLyogY3JvaXggw6AgZHJvaXRlIGQndW4gw6l2ZW50dWVsIC5tb2RhbGVDbG9zZVRleHRlIChzZXVsZSA9IGNlbnRyw6llLCBpbmNoYW5nw6kpICovXG4gICAgd2lkdGg6IDIwcHg7XG4gICAgaGVpZ2h0OiAyMHB4O1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNOb2lyMSk7XG4gICAgbWFzazogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ2xpbmUgeDE9JzE4JyB5MT0nNicgeDI9JzYnIHkyPScxOCcvJTNFJTNDbGluZSB4MT0nNicgeTE9JzYnIHgyPScxOCcgeTI9JzE4Jy8lM0UlM0Mvc3ZnJTNFXCIpIGNlbnRlciAvIGNvbnRhaW4gbm8tcmVwZWF0O1xuICAgIC13ZWJraXQtbWFzazogdXJsKFwiZGF0YTppbWFnZS9zdmcreG1sLCUzQ3N2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPScyNCcgaGVpZ2h0PScyNCcgdmlld0JveD0nMCAwIDI0IDI0JyBmaWxsPSdub25lJyBzdHJva2U9J2JsYWNrJyBzdHJva2Utd2lkdGg9JzEuNScgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2UtbGluZWpvaW49J3JvdW5kJyUzRSUzQ2xpbmUgeDE9JzE4JyB5MT0nNicgeDI9JzYnIHkyPScxOCcvJTNFJTNDbGluZSB4MT0nNicgeTE9JzYnIHgyPScxOCcgeTI9JzE4Jy8lM0UlM0Mvc3ZnJTNFXCIpIGNlbnRlciAvIGNvbnRhaW4gbm8tcmVwZWF0O1xufVxuXG4ubW9kYWxlQ2xvc2U6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbn1cblxuLyogTGliZWxsw6kgb3B0aW9ubmVsIMOgIGdhdWNoZSBkZSBsYSBjcm9peCAoY2YuIGVuLXTDqnRlKS4gTGUgcGFkZGluZyBnYXVjaGUgZG9ubmUgYXUgdGV4dGVcbiAgIGxlIG3Dqm1lIGFpciAofjZweCkgcXVlIGxhIG1hcmdlIGludGVybmUgZGUgbGEgY3JvaXggw6AgZHJvaXRlIOKGkiB2aXN1ZWxsZW1lbnQgw6lxdWlsaWJyw6kuICovXG4ubW9kYWxlQ2xvc2VUZXh0ZSB7XG4gICAgcGFkZGluZy1sZWZ0OiA1cHg7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7IC8qIG3Dqm1lIHRlaW50ZSBxdWUgbGEgY3JvaXggKi9cbn1cbiIsIi8qIEJvdXRvbiBkZSBmZXJtZXR1cmUgKC5tb2RhbGVDbG9zZSkgOiBzaWxob3VldHRlIGV0IGNyb2l4IGRhbnMgbGUgY29tcG9zYW50IOKAlCBpY2ksXG4gICBwbHVzIGJhcywgdW5pcXVlbWVudCBsJ8OpY2FydCBkZXMgbW9kYWxlcyBSw6lnaWUgKGJvw650ZSBmaXhlIDQ0w5c0NCwgY3JvaXggMjQpLiAqL1xuQGltcG9ydCAnLi4vLi4vY29tcG9zYW50cy9ib3V0b25GZXJtZXR1cmUuY3NzJztcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEJPVVRPTlMgQlJJUVVFIEFOSU1BVElPTiAoaW5mbyArIGFwZXLDp3UpXG4gICBHcm91cMOpcyBlbiBoYXV0IMOgIGRyb2l0ZSwgY8O0dGUgw6AgY8O0dGVcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5ib3V0b25zQnJpcXVlU2NlbmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDNweDtcbiAgICByaWdodDogM3B4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiAycHg7XG4gICAgei1pbmRleDogMjtcbn1cblxuLmJvdXRvbnNCcmlxdWVTY2VuZSBidXR0b24ge1xuICAgIHdpZHRoOiAyMnB4O1xuICAgIGhlaWdodDogMjJweDtcbiAgICBwYWRkaW5nOiAzcHg7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IDRweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCB2YXIoLS1jT21icmUpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBvcGFjaXR5OiAwLjc7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cywgYmFja2dyb3VuZCAwLjE1cztcbn1cblxuLmJvdXRvbnNCcmlxdWVTY2VuZSBidXR0b246aG92ZXIge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3gtc2hhZG93OiAwIDFweCA0cHggdmFyKC0tY09tYnJlRm9ydGUpO1xufVxuXG4uYm91dG9uc0JyaXF1ZVNjZW5lIGJ1dHRvbiBzdmcge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIE1PREFMRSAtIFNUWUxFUyBHw4lOw4lSSVFVRVNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5tb2RhbGUge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgcGFkZGluZzogMDtcbiAgICBtYXgtd2lkdGg6IDUwMHB4O1xuICAgIHdpZHRoOiA5MHZ3O1xuICAgIG1heC1oZWlnaHQ6IDgwdmg7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tb21icmVNb2RhbGUpO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xufVxuXG4ubW9kYWxlOjpiYWNrZHJvcCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY092ZXJsYXkpO1xufVxuXG4ubW9kYWxlQ29udGVudSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgbWF4LWhlaWdodDogODB2aDtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIE1PREFMRSAtIFZBUklBTlRFUyBQQVIgQ09OVEVYVEVcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIFNjZW5lcyA6IGhlYWRlciBqYXVuZSwgcGx1cyBsYXJnZSAqL1xuLm1vZGFsZVNjZW5lcyB7XG4gICAgbWF4LXdpZHRoOiA2MDBweDtcbn1cblxuLm1vZGFsZVNjZW5lcyAubW9kYWxlSGVhZGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZFNjZW5lcyk7XG59XG5cbi8qIFBhcnRpY2lwYW50cyA6IGhlYWRlciBjeWFuICovXG4ubW9kYWxlUGFydGljaXBhbnRzIC5tb2RhbGVIZWFkZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kR3JvdXBlcyk7XG59XG5cbi8qIE1vZGUgdGVzdCA6IGhlYWRlciBsYXZhbmRlICovXG4ubW9kYWxlSGVhZGVyVGVzdCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY1Rlc3QpICFpbXBvcnRhbnQ7XG59XG5cbi8qIFLDqWNhcCBlcnJldXIgOiBoZWFkZXIgcm91Z2UsIHBsdXMgbGFyZ2UgcG91ciBsZSBzdGVwcGVyICovXG4ubW9kYWxlUmVjYXAge1xuICAgIG1heC13aWR0aDogNjAwcHg7XG59XG5cbi5tb2RhbGVSZWNhcCAubW9kYWxlSGVhZGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIHBhZGRpbmctbGVmdDogMjBweDtcbn1cblxuLm1vZGFsZUhlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIHBhZGRpbmc6IDVweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZFNjZW5lcyk7XG4gICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyKTtcbiAgICBmbGV4LXNocmluazogMDtcbn1cblxuLm1vZGFsZUhlYWRlciBoMyB7XG4gICAgZmxleDogMTtcbiAgICBtYXJnaW46IDA7XG4gICAgZm9udDogdmFyKC0tZkgzKTtcbn1cblxuLm1vZGFsZUljb25lIHtcbiAgICB3aWR0aDogNDBweDtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gICAgb2JqZWN0LWZpdDogY29udGFpbjtcbn1cblxuLyogQm91dG9uIGRlIGZlcm1ldHVyZSA6IHNpbGhvdWV0dGUgZXQgY3JvaXggZGFucyBjb21wb3NhbnRzL2JvdXRvbkZlcm1ldHVyZS5jc3MgKGltcG9ydMOpIGVuXG4gICB0w6p0ZSkuIEljaSBsJ8OpY2FydCBkZXMgbW9kYWxlcyBSw6lnaWUgOiBib8OudGUgZml4ZSA0NMOXNDQsIGNyb2l4IDI0LiAqL1xuLm1vZGFsZUNsb3NlIHtcbiAgICB3aWR0aDogNDRweDtcbiAgICBoZWlnaHQ6IDQ0cHg7XG4gICAgcGFkZGluZzogMDtcbn1cblxuLm1vZGFsZUNsb3NlOjpiZWZvcmUge1xuICAgIHdpZHRoOiAyNHB4O1xuICAgIGhlaWdodDogMjRweDtcbn1cblxuLm1vZGFsZUNvcnBzIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ29ycHMpO1xuICAgIG92ZXJmbG93LXk6IGF1dG87XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG4gICAgLyogU2Nyb2xsIGF1dG8gcXVhbmQgbGEgbW9kYWxlIGTDqXBhc3NlIDgwdmggOiBzYW5zIG1pbi1oZWlnaHQ6MCBsZSBjb3JwcyBuZSBzaHJpbmsgcGFzXG4gICAgICAgc291cyBzb24gY29udGVudSBldCBsZSBiYXMgc2VyYWl0IGNsaXBww6kuIExlIGhlYWRlciAoZmxleC1zaHJpbms6MCkgcmVzdGUgdmlzaWJsZS4gKi9cbiAgICBtaW4taGVpZ2h0OiAwO1xufVxuXG4vKiBCYXJyZSBkZSBzY3JvbGwgVklTSUJMRSAobm9uLW92ZXJsYXkpIDogbCd1dGlsaXNhdGV1ciBkb2l0IHZvaXIgcXUnaWwgcGV1dCBzY3JvbGxlciwgc2lub24gaWxcbiAgIG5lIGNvbXByZW5kIHBhcyBxdSdpbCBtYW5xdWUgZHUgY29udGVudS4gTcOqbWUgcGF0dGVybiBxdWUgbGEgcG9wLXVwIGRlIHNhaXNpZSAoc2Fpc2llLmNzcykuXG4gICBQYXMgZGUgc2Nyb2xsYmFyLWNvbG9yIDogc3VyIENocm9tZSDiiaUxMjEgaWwgZMOpc2FjdGl2ZXJhaXQgY2VzIHLDqGdsZXMgZXQgcmVtZXR0cmFpdCBsYSBiYXJyZVxuICAgb3ZlcmxheSBhdXRvLW1hc3F1w6llLiAqL1xuLm1vZGFsZUNvcnBzOjotd2Via2l0LXNjcm9sbGJhciB7XG4gICAgd2lkdGg6IDEycHg7XG59XG5cbi5tb2RhbGVDb3Jwczo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzIpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbn1cblxuLm1vZGFsZUNvcnBzOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY05vaXI0KTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG59XG5cbi5tb2RhbGVDb3JwcyBoMSxcbi5tb2RhbGVDb3JwcyBoMixcbi5tb2RhbGVDb3JwcyBoMyB7XG4gICAgbWFyZ2luLXRvcDogMWVtO1xuICAgIG1hcmdpbi1ib3R0b206IDAuNWVtO1xufVxuXG4ubW9kYWxlQ29ycHMgaDE6Zmlyc3QtY2hpbGQsXG4ubW9kYWxlQ29ycHMgaDI6Zmlyc3QtY2hpbGQsXG4ubW9kYWxlQ29ycHMgaDM6Zmlyc3QtY2hpbGQge1xuICAgIG1hcmdpbi10b3A6IDA7XG59XG5cbi5tb2RhbGVDb3JwcyBwIHtcbiAgICBtYXJnaW46IDAuNWVtIDA7XG59XG5cbi5tb2RhbGVFcnJldXIge1xuICAgIHBhZGRpbmc6IDQwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4ubW9kYWxlRXJyZXVyIHtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIE1PREFMRSAtIEJBUlJFIEQnT1VUSUxTXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4ubW9kYWxlQmFycmVPdXRpbHNGbGV4IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIG1hcmdpbi1ib3R0b206IDE2cHg7XG4gICAgcGFkZGluZy1ib3R0b206IDEycHg7XG4gICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyKTtcbn1cblxuLm1vZGFsZUNvbXB0ZXVyIHtcbiAgICBmb250OiB2YXIoLS1mQ3RhMTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTU9EQUxFIC0gQk9VVE9OUyBERSBUUkkgLyBBQ1RJT05TXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4ubW9kYWxlQm91dG9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG59XG5cbi8qIExlIGJvdXRvbiBkaXNjcmV0IChleC1jdGFNb2RhbGUsIHJlbm9tbcOpIDIwMjYtMDctMTggOiBuw6kgZGFucyBsZXMgbW9kYWxlcywgaWxcbiAgIHZpdCBwYXJ0b3V0IOKAlCBibG9jcyBkJ29uZ2xldCwgZm9ybXVsYWlyZXMsIFRTKS4gTcOqbWUgcGFkZGluZyBxdWUgdG91cyBsZXNcbiAgIGJvdXRvbnMgY29tcGFjdHMgOiAtLXBhZGRpbmdDdGExNCAoZMOpY2lzaW9uIFBPIDIwMjYtMDctMTgsIHVuIC5jdGFEaXNjcmV0IGPDtHRvaWVcbiAgIHVuIC5jdGExNCBkYW5zIGxlcyBiYXJyZXMg4oCUIGRldXggcGFkZGluZ3MgZGlmZsOpcmVudHMsIGMnZXN0IHVsdHJhIHZpc2libGUpLiAqL1xuLyog4pqg77iPIExhIGJhc2UgLmN0YURpc2NyZXQgKGJhc2UgKyBob3ZlciArIGTDqXNhY3RpdsOpIGNpLWRlc3NvdXMpIGVzdCBjb3Bpw6llIGRhbnNcbiAgIHN0dWRpb1ZpdHJpbmUvYXNzZXRzL3ZpdHJpbmUvY3NzL2N0YURpc2NyZXQuY3NzIChib3V0b25zIGRlcyBjYXJ0ZXMgZGUgbGEgcGFnZSBhcGVyw6d1KS5cbiAgIFNpIHR1IG1vZGlmaWVzIGNlcyByw6hnbGVzIOKGkiBkZW1hbmRlciBhdSBQTyBzJ2lsIGZhdXQgbGEgcsOpcGVyY3V0ZXIgc3VyIGxhIGNvcGllIHZpdHJpbmUuXG4gICBMZXMgdmFyaWFudGVzIC5jdGFEaXNjcmV0LmFjdGlmIGNvbnRleHR1ZWxsZXMgKG1vZGFsZXMpIHJlc3RlbnQgcHJvcHJlcyDDoCBsYSByw6lnaWUuICovXG4uY3RhRGlzY3JldFByaW1haXJlLFxuLmN0YURpc2NyZXQge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgLyogdW4gPGE+IGhvcnMgYmFycmUgZmxleCByZXN0ZSB1biBib3V0b24gKHBhZGRpbmcgdmVydGljYWwgcsOpZWwpIOKAlCBtw6ptZSByw6hnbGUgcXVlIC5jdGExNCAqL1xuICAgIHBhZGRpbmc6IHZhcigtLXBhZGRpbmdDdGExNCk7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyQ3RhKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjb2xvcjogdmFyKC0tY0N0YVRleHRlKTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzLCBjb2xvciAwLjJzLCBib3JkZXItY29sb3IgMC4ycztcbn1cblxuLmN0YURpc2NyZXRQcmltYWlyZS5ob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDIpO1xufVxuLmN0YURpc2NyZXRQcmltYWlyZTpkaXNhYmxlZCxcbi5jdGFEaXNjcmV0OmRpc2FibGVkIHtcbiAgICBvcGFjaXR5OiAwLjQ7XG4gICAgY3Vyc29yOiBhdXRvO1xufVxuXG4uY3RhRGlzY3JldFByaW1haXJlIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxldTRhKTtcbiAgICBjb2xvcjogdmFyKC0tY0JsZXU0YXQpO1xufVxuXG4uY3RhRGlzY3JldFByaW1haXJlLmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxldTRhaCk7XG4gICAgY29sb3I6IHZhcigtLWNCbGV1NGh0KTtcbn1cblxuLyogVmFyaWFudGUgPGE+IGTDqXNhY3RpdsOpICh1biBsaWVuIG5lIGNvbm5hw650IHBhcyA6ZGlzYWJsZWQpICovXG4uY3RhRGlzY3JldC5kaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMC40O1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4uY3RhRGlzY3JldDpkaXNhYmxlZDpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbn1cblxuLmN0YURpc2NyZXQuYWN0aWYge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4vKiBDb3VsZXVyIGR1IGJvdXRvbiBhY3RpZiBzZWxvbiBsZSBjb250ZXh0ZSAqL1xuLm1vZGFsZVBhcnRpY2lwYW50cyAuY3RhRGlzY3JldC5hY3RpZiB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRHcm91cGVzKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNGb25kR3JvdXBlczIpO1xufVxuXG4ubW9kYWxlU2NlbmVzIC5jdGFEaXNjcmV0LmFjdGlmIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZFNjZW5lcyk7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jRm9uZFNjZW5lczIpO1xufVxuXG4ubW9kYWxlRGlzdHJpYnV0aW9ucyAuY3RhRGlzY3JldC5hY3RpZiB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmREaXN0cmlidXRpb25zKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNGb25kRGlzdHJpYnV0aW9uczIpO1xufVxuXG4vKiBNb2RlIHRlc3QgOiBib3V0b24gYWN0aWYgbGF2YW5kZSAqL1xuLm1vZGFsZUNvcnBzVGVzdCAuY3RhRGlzY3JldC5hY3RpZiB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY1Rlc3QpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tY1Rlc3QzKTtcbn1cblxuLyogTGFiZWwgXCJEb25uw6llcyBkZSB0ZXN0XCIgc291cyBsZSBjb21wdGV1ciAqL1xuLm1vZGFsZVRlc3RMYWJlbCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jVGVzdDMpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTU9EQUxFIC0gVE9HR0xFIEFDVElGL0TDiVNBQ1RJVsOJXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4udG9nZ2xlQWN0aWYge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IDM4cHg7XG4gICAgaGVpZ2h0OiAyMnB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmbGV4LXNocmluazogMDtcbn1cblxuLnRvZ2dsZUFjdGlmIGlucHV0IHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHdpZHRoOiAwO1xuICAgIGhlaWdodDogMDtcbn1cblxuLnRvZ2dsZVNsaWRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAwO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAzKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckZvcm0pO1xuICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzO1xufVxuXG4udG9nZ2xlU2xpZGVyOjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6ICcnO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMTZweDtcbiAgICBoZWlnaHQ6IDE2cHg7XG4gICAgbGVmdDogMnB4O1xuICAgIGJvdHRvbTogMnB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzO1xufVxuXG4udG9nZ2xlQWN0aWYgaW5wdXQ6Y2hlY2tlZCArIC50b2dnbGVTbGlkZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNDdGEpO1xufVxuXG4udG9nZ2xlQWN0aWYgaW5wdXQ6Y2hlY2tlZCArIC50b2dnbGVTbGlkZXJUZXN0IHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jVGVzdDMpO1xufVxuXG4udG9nZ2xlQWN0aWYgaW5wdXQ6Y2hlY2tlZCArIC50b2dnbGVTbGlkZXJQYXJ0aWNpcGFudHMge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kR3JvdXBlczMpO1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi50b2dnbGVBY3RpZiBpbnB1dDpjaGVja2VkICsgLnRvZ2dsZVNsaWRlckRpc3RyaWJ1dGlvbnMge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kRGlzdHJpYnV0aW9uczMpO1xufVxuXG4udG9nZ2xlQWN0aWYgaW5wdXQ6Y2hlY2tlZCArIC50b2dnbGVTbGlkZXJDb25maWcge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kQ29uZmlnMyk7XG59XG5cbi50b2dnbGVBY3RpZiBpbnB1dDpjaGVja2VkICsgLnRvZ2dsZVNsaWRlclNjZW5lcyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRTY2VuZXMzKTtcbn1cblxuLnRvZ2dsZUFjdGlmIGlucHV0OmNoZWNrZWQgKyAudG9nZ2xlU2xpZGVyQWZmaWNoYWdlcyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmRBZmZpY2hhZ2VzMyk7XG59XG4qL1xuXG4udG9nZ2xlQWN0aWYgaW5wdXQ6Y2hlY2tlZCArIC50b2dnbGVTbGlkZXI6OmJlZm9yZSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDE2cHgpO1xufVxuXG4vKiBMZXR0cmVzIHRyb3V2w6llcyBwYXIgbGEgcmVjaGVyY2hlICjiiaU0IGNhcmFjdMOocmVzKSDigJQgY291bGV1ciBwbHV0w7R0IHF1ZSBncmFzLiAqL1xuLnJlY2hlcmNoZU1hdGNoIHtcbiAgICBjb2xvcjogdmFyKC0tY0N0YSk7XG59XG5cbi8qIMOJdGF0IGJhbm5pICovXG4ucGFydGljaXBhbnRCYW5uaSB7XG4gICAgb3BhY2l0eTogMC41O1xufVxuXG4ucGFydGljaXBhbnRCYW5uaSAucGFydGljaXBhbnROb20ge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjQpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTU9EQUxFIC0gUFLDiVZJU1VBTElTQVRJT04gRElTVFJJQlVUSU9OXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4ubW9kYWxlRGlzdHJpYnV0aW9ucyAubW9kYWxlSGVhZGVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZERpc3RyaWJ1dGlvbnMpO1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5tb2RhbGVBdmVydGlzc2VtZW50IHtcbiAgICBmb250OiB2YXIoLS1mTGlnaHQxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG59XG4qL1xuXG4ubGlzdGVQcmV2aXN1YWxpc2F0aW9uIHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgbWFyZ2luOiAxMnB4IDA7XG59XG5cbi5saXN0ZVByZXZpc3VhbGlzYXRpb24gLmJsb2NJdGVtIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIHBhZGRpbmc6IDEwcHggMDtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgIGJvcmRlci1ib3R0b206IHZhcigtLWJvcmRlcik7XG59XG5cbi5saXN0ZVByZXZpc3VhbGlzYXRpb24gLmJsb2NJdGVtOmxhc3QtY2hpbGQge1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7XG59XG5cbi5wcmV2aXN1YWxpc2VyTnVtZXJvIHtcbiAgICBmb250OiB2YXIoLS1mQ3RhMTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIG1pbi13aWR0aDogMjhweDtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5wcmV2aXN1YWxpc2VyTWludXRlIHtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXI0KTtcbiAgICBtaW4td2lkdGg6IDM2cHg7XG4gICAgdGV4dC1hbGlnbjogcmlnaHQ7XG59XG5cbi5wcmV2aXN1YWxpc2VyUGVyZGFudCB7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2UpO1xufVxuXG4ucHJldmlzdWFsaXNlckludGVydmFsbGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG59XG5cbi5wcmV2aXN1YWxpc2VySW50ZXJ2YWxsZUxhYmVsIHtcbiAgICBmb250OiB2YXIoLS1mTWVudTE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbn1cblxuLnByZXZpc3VhbGlzZXJSYWlzb24ge1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXI0KTtcbiAgICBtaW4td2lkdGg6IDIwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5wcmV2aXN1YWxpc2VyUGllZCB7XG4gICAgcGFkZGluZzogMTJweCAyMHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXIpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG59XG4qL1xuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgTU9EQUxFIC0gVk9DQUJVTEFJUkUgREUgTCdBTklNQVRJT05cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIExpZW4gZGlzY3JldCBzb3VzIGxlcyBjaGFtcHMgZGUgbCdhbmltYXRpb24sIG91dnJlIGxhIG1vZGFsZSBkZSB2b2NhYnVsYWlyZS4gKi9cbi52b2NhYnVsYWlyZVNjZW5lIHtcbiAgICBtYXJnaW4tdG9wOiAxMnB4O1xufVxuXG4udm9jYWJ1bGFpcmVMaWVuIHtcbiAgICBjb2xvcjogdmFyKC0tY0xpbmspO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbn1cblxuLnZvY2FidWxhaXJlTGllbjpob3ZlciB7XG4gICAgY29sb3I6IHZhcigtLWNMaW5raCk7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi52b2NhYnVsYWlyZUNoYW1wIHtcbiAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xufVxuXG4vKiBCb3V0b24gYWxpZ27DqSBzdXIgbGUgYm9yZCBnYXVjaGUgZGVzIGNoYW1wcyAocGFzIGRlIHLDqS1pbmRlbnRhdGlvbiwgY29udHJhaXJlbWVudCDDoCAuZm9ybUFjdGlvbnMpLiAqL1xuLnZvY2FidWxhaXJlQWN0aW9ucyB7XG4gICAgbWFyZ2luLXRvcDogMTJweDtcbn1cblxuLyogU8OpcGFyYXRldXIgbWVudSAvIG1vdHMgOiBnYXAgZMOpbGliw6lyw6kgZXQgw6lxdWlsaWJyw6kgKGxlIGhyIGdsb2JhbCBlc3Qgw6AgMzBweCwgdHJvcCkuIExlIGNoYW1wXG4gICBhdS1kZXNzdXMgYSBkw6lqw6AgMTJweCBkZSBtYXJnZSBiYXNzZSDihpIgNHB4IGVuIGhhdXQgKyAxNnB4IGVuIGJhcyA9IDE2cHggZGUgY2hhcXVlIGPDtHTDqS4gKi9cbi5tb2RhbGVWb2NhYnVsYWlyZSBociB7XG4gICAgbWFyZ2luOiA0cHggMCAxNnB4O1xufVxuXG4udm9jYWJ1bGFpcmVDaGFtcCBsYWJlbCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLWJvdHRvbTogNHB4O1xuICAgIGZvbnQ6IHZhcigtLWZMYWJlbCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG59XG5cbi8qIFBhcyBkJ2ljw7RuZSBpY2kgOiBvbiBhbGlnbmUgbGUgdGl0cmUgc3VyIGxlIGNvcnBzIChjb21tZSAubW9kYWxlUmVjYXApLiAqL1xuLm1vZGFsZVZvY2FidWxhaXJlIC5tb2RhbGVIZWFkZXIge1xuICAgIHBhZGRpbmctbGVmdDogMjBweDtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIE1PREFMRSDCqyBBTklNQVRJT05TIFNJTUlMQUlSRVMgwrtcbiAgIEp1bWVsbGVzIGRlIGZhbWlsbGUgZCd1bmUgYW5pbWF0aW9uIGR1IHNjw6luYXJpb1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLm1vZGFsZVNpbWlsYWlyZXMge1xuICAgIG1heC13aWR0aDogNTIwcHg7XG59XG5cbi8qIFBhcyBkJ2ljw7RuZSBpY2kgbm9uIHBsdXMgOiB0aXRyZSBhbGlnbsOpIHN1ciBsZSBjb3JwcyAoY29tbWUgLm1vZGFsZVJlY2FwKS4gKi9cbi5tb2RhbGVTaW1pbGFpcmVzIC5tb2RhbGVIZWFkZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG4gICAgcGFkZGluZy1sZWZ0OiAyMHB4O1xufVxuXG4ubW9kYWxlU2ltaWxhaXJlcyAubW9kYWxlQ29ycHMge1xuICAgIHBhZGRpbmc6IDE2cHggMjBweDtcbn1cblxuLnNpbWlsYWlyZXNJbnRybyB7XG4gICAgbWFyZ2luOiAwIDAgMTJweDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLnNpbWlsYWlyZXNMaXN0ZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pOyAvKiBhbGlnbsOpIDEwIC0+IDEycHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG59XG5cbi5zaW1pbGFpcmVzQ2FydGUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcE1veWVuKTtcbiAgICBwYWRkaW5nOiAxMnB4O1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMik7XG59XG5cbi8qIENhcnRlIGRlIGwnYW5pbWF0aW9uIGVuIHBsYWNlIDogZm9uZCBkaXNjcmV0LCBwYXMgZGUgYm91dG9uIChqdXN0ZSBsZSBsaWJlbGzDqSBkJ8OpdGF0KSAqL1xuLnNpbWlsYWlyZXNDYXJ0ZUFjdHVlbGxlIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG59XG5cbi5zaW1pbGFpcmVzSWNvbmUge1xuICAgIHdpZHRoOiA0NHB4O1xuICAgIGhlaWdodDogNDRweDtcbiAgICBvYmplY3QtZml0OiBjb250YWluO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4uc2ltaWxhaXJlc0luZm9zIHtcbiAgICBmbGV4OiAxO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7IC8qIGFsaWduw6kgNiAtPiA4cHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG59XG5cbi5zaW1pbGFpcmVzSW5mb3MgaDQge1xuICAgIG1hcmdpbjogMDtcbn1cblxuLnNpbWlsYWlyZXNBY3R1ZWxsZSB7XG4gICAgZm9udDogdmFyKC0tZk1lbnUxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi5zaW1pbGFpcmVzQWN0aW9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTGFyZ2UpOyAvKiBhbGlnbsOpIDE2IC0+IDIwcHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBGb3JtdWxhaXJlIGFjdGlmIDogYXR0w6ludWF0aW9uIGRlcyBicmlxdWVzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIEF0dMOpbnVhdGlvbiBkZXMgYnJpcXVlcyBub24gYWN0aXZlcyBxdWFuZCB1biBmb3JtdWxhaXJlIGVzdCBvdXZlcnQgKi9cbiNzY2VuYXJpb0dyaWxsZS5mb3JtdWxhaXJlQWN0aWYgLmJyaXF1ZTpub3QoLmJyaXF1ZUFjdGl2ZSk6bm90KDpob3ZlciksXG4uYnJpcXVlc0Fqb3V0ZXIuZm9ybXVsYWlyZUFjdGlmIC5icmlxdWU6bm90KC5icmlxdWVBY3RpdmUpOm5vdCg6aG92ZXIpIHtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNOb2lyNSk7XG4gICAgb3BhY2l0eTogLjc7XG59XG5cbi8qIEF0dMOpbnVhdGlvbiBkZXMgYnJpcXVlcyBxdWFuZCBsZSBtZW51IGQnYWpvdXQgZXN0IG91dmVydCAoc2F1ZiBicmlxdWUgKykgKi9cbiNzY2VuYXJpb0dyaWxsZS5tZW51QWpvdXRlckFjdGlmIC5icmlxdWU6bm90KC5icmlxdWVBam91dGVyKSB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jTm9pcjUpO1xuICAgIG9wYWNpdHk6IC43O1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBTY2VuZSBhcHLDqHMgY29uZmlybWF0aW9uXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbkBrZXlmcmFtZXMgYnJpcXVlUmV0b3VyIHtcbiAgICBmcm9tIHtcbiAgICAgICAgb3BhY2l0eTogLjc7XG4gICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIH1cbiAgICB0byB7XG4gICAgICAgIG9wYWNpdHk6IDE7XG4gICAgfVxufVxuXG4jc2NlbmFyaW9HcmlsbGUuYXByZXNDb25maXJtYXRpb24gLmJyaXF1ZTpub3QoLmJyaXF1ZU1vZGlmaWVlKSB7XG4gICAgYW5pbWF0aW9uOiBicmlxdWVSZXRvdXIgMC40cyBlYXNlIGZvcndhcmRzO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEFQRVLDh1UgREVTIElNQUdFUyAoRm9ybXVsYWlyZSB1cGxvYWQpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uY2hhbXBBdmVjVmlnbmV0dGUge1xuICAgIG1hcmdpbi1ib3R0b206IDE1cHg7XG59XG5cbi8qIC52aWduZXR0ZUltYWdlRXhpc3RhbnRlIHV0aWxpc2UgLmJsb2NFbmNhZHJlIChkw6lmaW5pIGRhbnMgX2Zvcm11bGFpcmVzLmNzcykgKi9cblxuLnZpZ25ldHRlSW1hZ2VFeGlzdGFudGUgaW1nIHtcbiAgICBtYXgtd2lkdGg6IDIwMHB4O1xuICAgIG1heC1oZWlnaHQ6IDEyMHB4O1xuICAgIG9iamVjdC1maXQ6IGNvbnRhaW47XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luOiAxMHB4IDA7XG59XG5cbi5jaGFtcFVwbG9hZENhY2hlIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgR0FMRVJJRSBQVUJMSVFVRSAobW9kYWxlIGRlIGNob2l4IGQnaW1hZ2UpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBSw6hnbGUgZCdhdXRvcml0w6kgOiBsZXMgw6l0YXRzIGR1IGNoYW1wIGltYWdlIHNvbnQgcGlsb3TDqXMgcGFyIGwnYXR0cmlidXQgaGlkZGVuXG4gICAoZ2FsZXJpZUltYWdlcy50cykuIFNhbnMgIWltcG9ydGFudCwgbGVzIGRpc3BsYXkgcG9zw6lzIGFpbGxldXJzIChleC4gbm95YXVcbiAgIGJ1dHRvbi5jdGFBbm51bGVyIHsgZGlzcGxheTogYmxvY2sgfSkgZ2FnbmVudCBzdXIgbGUgaGlkZGVuIGR1IG5hdmlnYXRldXIuICovXG4uY2hhbXBBdmVjVmlnbmV0dGUgW2hpZGRlbl0ge1xuICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDtcbn1cblxuLyogU8OpcGFyYXRldXIgZW50cmUgbGVzIGRldXggZmHDp29ucyBkZSBjaG9pc2lyICh1cGxvYWQgwqsgb3UgY2hhcmdlciBkZXB1aXMgOiDCuyBnYWxlcmllcykgKi9cbi5jaGFtcENob2l4SW1hZ2UgLmdhbGVyaWVPdSB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgbWFyZ2luOiAycHggMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGZvbnQ6IHZhcigtLWZMYWJlbCk7XG59XG4uY2hhbXBDaG9peEltYWdlIGxhYmVsIHtcbiAgICBtYXJnaW4tYm90dG9tOiA0cHg7XG59XG5cbi8qIFJhbmfDqWUgZGVzIGJvdXRvbnMgZGUgZ2FsZXJpZXMgKHB1YmxpcXVlIC8gw6l2w6luZW1lbnQgLyB0b3V0ZXMgbWVzIGltYWdlcykgKi9cbi5nYWxlcmllQm91dG9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcE1veWVuKTtcbn1cblxuLmdhbGVyaWVHcmlsbGUge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTIwcHgsIDFmcikpO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIHBhZGRpbmc6IDIwcHg7XG59XG5cbi5nYWxlcmllVmlnbmV0dGUge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLmdhbGVyaWVWaWduZXR0ZSBpbWcge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGFzcGVjdC1yYXRpbzogMTYgLyA5O1xuICAgIG9iamVjdC1maXQ6IGNvdmVyO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbn1cblxuLmdhbGVyaWVWaWduZXR0ZTpob3ZlciBpbWcge1xuICAgIGJveC1zaGFkb3c6IDAgMXB4IDRweCB2YXIoLS1jT21icmVGb3J0ZSk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBGT1JNVUxBSVJFIExPVFMgRFlOQU1JUVVFXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4jZGlzdHJpYnV0aW9uc0NvbnRhaW5lciB7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbn1cblxuLyogLmRpc3RyaWJ1dGlvbkl0ZW0gdXRpbGlzZSAuYmxvY0VuY2FkcmUgKGTDqWZpbmkgZGFucyBfZm9ybXVsYWlyZXMuY3NzKSAqL1xuXG4vKiBMZSBib3V0b24gc3VwcHJpbWVyIGRlIGxvdCB1dGlsaXNlIC5jdGFTdXBwcmltZXIgKGTDqWZpbmkgZGFucyBfZm9ybXVsYWlyZXMuY3NzKSAqL1xuLmRpc3RyaWJ1dGlvbkl0ZW0gPiAuY3RhU3VwcHJpbWVyIHtcbiAgICBtYXJnaW4tdG9wOiAxNXB4O1xufVxuXG4uZGlzdHJpYnV0aW9uSXRlbVJvdyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IHZhcigtLWdhcExhcmdlKTtcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4uZGlzdHJpYnV0aW9uSXRlbUxhYmVsIHtcbiAgICBmbGV4OiAxO1xufVxuXG4uZGlzdHJpYnV0aW9uSXRlbVN0b2NrIHtcbiAgICB3aWR0aDogMTAwcHg7XG4gICAgZmxleC1zaHJpbms6IDA7XG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLmRpc3RyaWJ1dGlvbkl0ZW0gLmNoYW1wRm9ybXVsYWlyZSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMTBweDtcbn1cbiovXG5cbkBtZWRpYSAobWF4LXdpZHRoOiA2NTBweCkge1xuICAgIC5kaXN0cmlidXRpb25JdGVtUm93IHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7IC8qIGFsaWduw6kgMTAgLT4gMTJweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbiAgICB9XG59XG5cbiNidG5Bam91dGVyRGlzdHJpYnV0aW9uLCAjYnRuQWpvdXRlckVxdWlwZSB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBwYWRkaW5nOiAwO1xuICAgIG1hcmdpbjogMCAyMHB4IDIwcHggMjBweDtcbn1cblxuI2J0bkFqb3V0ZXJEaXN0cmlidXRpb24ge1xuICAgIGNvbG9yOiB2YXIoLS1jRm9uZERpc3RyaWJ1dGlvbnM0KTtcbn1cblxuLyogU291cmNlIMOJcXVpcGVzIDogY291bGV1ciBkZSBsYSBzZWN0aW9uIFBhcnRpY2lwYW50cyAqL1xuI2J0bkFqb3V0ZXJFcXVpcGUge1xuICAgIGNvbG9yOiB2YXIoLS1jRm9uZEdyb3VwZXM0KTtcbn1cblxuI2J0bkFqb3V0ZXJEaXN0cmlidXRpb246aG92ZXIsICNidG5Bam91dGVyRXF1aXBlOmhvdmVyIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBCTE9DUyBSw4lTRUFVWCBTT0NJQVVYIC0gU3R5bGVzIGNvbW11bnNcbiAgIEZhY2Vib29rLCBJbnN0YWdyYW0sIExpbmtlZEluXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBCbG9jIGNvbm5leGlvbiAod3JhcHBlcikgKi9cbi5ibG9jQ29ubmV4aW9uIHtcbiAgICBtYXJnaW46IDEwcHggMCAyMHB4O1xufVxuXG4vKiBCb3V0b24gZGUgY29ubmV4aW9uIC0gY2xhc3NlIGNvbW11bmUgKi9cbi5idG5Db25uZXhpb24ge1xuICAgIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICBjb2xvcjogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGZvbnQ6IHZhcigtLWZDdGExNik7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uYnRuQ29ubmV4aW9uOmRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMyk7XG59XG5cbi8qIFZhcmlhbnRlcyBwYXIgcsOpc2VhdSAqL1xuLmJ0bkNvbm5leGlvbi5mYWNlYm9vayB7XG4gICAgYmFja2dyb3VuZDogIzE4NzdGMjsgLyogQ291bGV1ciBvZmZpY2llbGxlIGRlIGxhIG1hcnF1ZSBGYWNlYm9vayAqL1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycztcbn1cblxuLmJ0bkNvbm5leGlvbi5mYWNlYm9vazpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogIzE2NkZFNTsgLyogQ291bGV1ciBvZmZpY2llbGxlIGRlIGxhIG1hcnF1ZSBGYWNlYm9vayAoaG92ZXIpICovXG59XG5cbi5idG5Db25uZXhpb24uaW5zdGFncmFtIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsICNGQ0FGNDUsICNFMTMwNkMsICM4MzNBQjQpOyAvKiBHcmFkaWVudCBvZmZpY2llbCBkZSBsYSBtYXJxdWUgSW5zdGFncmFtICovXG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzO1xufVxuXG4uYnRuQ29ubmV4aW9uLmluc3RhZ3JhbTpob3ZlciB7XG4gICAgb3BhY2l0eTogMC45O1xufVxuXG4uYnRuQ29ubmV4aW9uLmxpbmtlZGluIHtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLCAjMDA3N0I1LCAjMEE2NkMyKTsgLyogR3JhZGllbnQgb2ZmaWNpZWwgZGUgbGEgbWFycXVlIExpbmtlZEluICovXG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzO1xufVxuXG4uYnRuQ29ubmV4aW9uLmxpbmtlZGluOmhvdmVyIHtcbiAgICBvcGFjaXR5OiAwLjk7XG59XG5cbi8qIEljw7RuZSBkYW5zIGxlIGJvdXRvbiAqL1xuLmljb25lUmVzZWF1IHtcbiAgICB3aWR0aDogMjBweDtcbiAgICBoZWlnaHQ6IDIwcHg7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICDDiXRhdCBjb25uZWN0w6kgKHV0aWxpc8OpIHBhciB0b3VzIGxlcyByw6lzZWF1eClcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5jb25uZXhpb25BY3RpdmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcE1veWVuKTsgLyogYWxpZ27DqSAxMCAtPiAxMnB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xuICAgIHBhZGRpbmc6IDEwcHggMTVweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jU3VjY2VzRm9uZCk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY1N1Y2Nlcyk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4uaWNvbmVDb25uZWN0ZTo6YmVmb3JlIHtcbiAgICBjb250ZW50OiAn4pyTJztcbiAgICBjb2xvcjogdmFyKC0tY1N1Y2Nlcyk7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG59XG5cbi5wYWdlQ29ubmVjdGVlIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLmJ0bkRlY29ubmVjdGVyIHtcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcbiAgICBwYWRkaW5nOiA1cHggMTBweDtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckNhcnRlKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uYnRuRGVjb25uZWN0ZXI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNOb2lyNSk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBBbGVydGVzIGV0IG1lc3NhZ2VzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uYWxlcnRlVG9rZW5FeHBpcmUge1xuICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgcGFkZGluZzogMTBweCAxNXB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNSb3VnZTYpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWNSb3VnZSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4uYWxlcnRlVG9rZW5FeHBpcmUgYSB7XG4gICAgY29sb3I6IHZhcigtLWNSb3VnZSk7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi5tZXNzYWdlSW5mbyB7XG4gICAgcGFkZGluZzogMTBweCAxNXB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNOb2lyNSk7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQmxvYyBwdWJsaWNhdGlvbi9tZWRpYSAoc8OpbGVjdGlvbiBkZSBjb250ZW51KVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmJsb2NQdWJsaWNhdGlvbixcbi5ibG9jTWVkaWEge1xuICAgIG1hcmdpbjogMjBweCAwO1xufVxuXG4uYmxvY1B1YmxpY2F0aW9uIGxhYmVsLFxuLmJsb2NNZWRpYSBsYWJlbCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLWJvdHRvbTogNXB4O1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4uc2VsZWN0UHVibGljYXRpb24sXG4uc2VsZWN0TWVkaWEge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogNDAwcHg7XG4gICAgcGFkZGluZzogMTBweDtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckNhcnRlKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbn1cblxuLnNlbGVjdFB1YmxpY2F0aW9uOmRpc2FibGVkLFxuLnNlbGVjdE1lZGlhOmRpc2FibGVkIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jTm9pcjUpO1xufVxuXG4uYnRuUmVmcmVzaFB1YmxpY2F0aW9ucyxcbi5idG5SZWZyZXNoTWVkaWFzIHtcbiAgICBtYXJnaW4tbGVmdDogMTBweDtcbiAgICBwYWRkaW5nOiAxMHB4IDEycHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckNhcnRlKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgZm9udC1zaXplOiAxNnB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xufVxuXG4uYnRuUmVmcmVzaFB1YmxpY2F0aW9uczpob3Zlcixcbi5idG5SZWZyZXNoTWVkaWFzOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jTm9pcjUpO1xufVxuXG4ucHVibGljYXRpb25TZWxlY3Rpb25uZWUsXG4ubWVkaWFTZWxlY3Rpb25uZSB7XG4gICAgbWFyZ2luLXRvcDogNXB4O1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY1N1Y2Nlcyk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBCbG9jIGFjdHVhbGlzYXRpb25cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5pbmZvQWN0dWFsaXNhdGlvbiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4O1xufVxuXG4ubGFiZWxBY3R1YWxpc2F0aW9uIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbn1cblxuLnRlbXBzUmVsYXRpZiB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLm5vbWJyZVBhcnRpY2lwYW50cyB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbn1cblxuLmJ0bkFjdHVhbGlzZXIge1xuICAgIHBhZGRpbmc6IDEwcHggMjBweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZEdyb3VwZXNfYSk7XG4gICAgY29sb3I6IHZhcigtLWNCbGFuYyk7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBmb250OiB2YXIoLS1mQ3RhMTYpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7XG59XG5cbi5idG5BY3R1YWxpc2VyOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZEdyb3VwZXNfYWgpO1xufVxuXG4uYnRuQWN0dWFsaXNlcjpkaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDMpO1xufVxuXG4uZXJyZXVyVG9rZW4ge1xuICAgIG1hcmdpbi10b3A6IDEwcHg7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2UpO1xufVxuXG4uYmxvY0FjdHVhbGlzYXRpb24gLm1lc3NhZ2VBaWRlIHtcbiAgICBtYXJnaW4tdG9wOiAxMHB4O1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBPTkdMRVQgUEFSVElDSVBBTlRTIC0gU3R5bGVzIHNww6ljaWZpcXVlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgTGVzIHN0eWxlcyBjb21tdW5zIGRlcyBibG9jcyBzb250IGRhbnMgNTNfYmxvY3MuY3NzXG4gICBDZSBmaWNoaWVyIGNvbnRpZW50IHVuaXF1ZW1lbnQgbGVzIMOpbMOpbWVudHMgc3DDqWNpZmlxdWVzXG4gICDDoCBsJ29uZ2xldCBwYXJ0aWNpcGFudHMuXG5cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIENvbnRlbmV1ciBkZXMgYmxvY3MgKGNvbW11biBwYXJ0aWNpcGFudHMgZXQgbG90cykgKi9cbi5ncm91cGVzTGlzdGUsXG4uZGlzdHJpYnV0aW9uc0xpc3RlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1nYXBMaXN0ZSk7XG59XG5cbi8qIE1lc3NhZ2Ugc2kgdmlkZSAoY29tbXVuIHBhcnRpY2lwYW50cyBldCBsb3RzKSAqL1xuLmdyb3VwZXNWaWRlLFxuLmRpc3RyaWJ1dGlvbnNWaWRlIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBwYWRkaW5nOiA0MHB4IDIwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMik7XG59XG5cbi8qIExpc3RlIGRlcyBwYXJ0aWNpcGFudHMgZGFucyBsYSBtb2RhbGUgKi9cbi5saXN0ZVBhcnRpY2lwYW50cyB7XG4gICAgbGlzdC1zdHlsZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbn1cblxuLmxpc3RlUGFydGljaXBhbnRzIGxpIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIHBhZGRpbmc6IDEwcHggMDtcbiAgICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXIpO1xufVxuXG4ubGlzdGVQYXJ0aWNpcGFudHMgbGk6bGFzdC1jaGlsZCB7XG4gICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbn1cblxuLnBhcnRpY2lwYW50Tm9tIHtcbiAgICBmbGV4OiAxO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xufVxuXG4ucGFydGljaXBhbnRDaGFuY2VzIHtcbiAgICBmb250OiB2YXIoLS1mTGlnaHQxNCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi5tb2RhbGVWaWRlIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ0NvcnBzKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFRPR0dMRSBNRU5VIFBBUlRJQ0lQQU5UU1xuICAgUsOpdXRpbGlzZSBsZXMgc3R5bGVzIGRlIF9vbmdsZXRNZW51LmNzc1xuICAgU2V1bGUgbGEgY291bGV1ciBkZSBsJ2luZGljYXRldXIgY2hhbmdlXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBDb3VsZXVyIHNww6ljaWZpcXVlIHBvdXIgbCdpbmRpY2F0ZXVyIHBhcnRpY2lwYW50cyAqL1xuLmRpdk9uZ2xldE1lbnVHcm91cGVzIC5pbmRpY2F0ZXVyT25nbGV0IHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZEdyb3VwZXMzKTtcbn1cblxuLyogU2VjdGlvbnMgbWFzcXXDqWVzIHBhciBkw6lmYXV0ICovXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5zZWN0aW9uR3JvdXBlcyB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLnNlY3Rpb25Hcm91cGVzLnZpc2libGUge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuKi9cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFRPR0dMRSBNRU5VIExPVFNcbiAgIFLDqXV0aWxpc2UgbGVzIHN0eWxlcyBkZSBfb25nbGV0TWVudS5jc3NcbiAgIFNldWxlIGxhIGNvdWxldXIgZGUgbCdpbmRpY2F0ZXVyIGNoYW5nZVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogQ291bGV1ciBzcMOpY2lmaXF1ZSBwb3VyIGwnaW5kaWNhdGV1ciBsb3RzICovXG4uZGl2T25nbGV0TWVudURpc3RyaWJ1dGlvbnMgLmluZGljYXRldXJPbmdsZXQge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kRGlzdHJpYnV0aW9uczMpO1xufVxuXG4vKiBTZWN0aW9ucyBtYXNxdcOpZXMgcGFyIGTDqWZhdXQgKi9cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLnNlY3Rpb25EaXN0cmlidXRpb25zIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4uc2VjdGlvbkRpc3RyaWJ1dGlvbnMudmlzaWJsZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG4qL1xuXG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgT05HTEVUIExPVFMgLSBTdHlsZXMgc3DDqWNpZmlxdWVzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICBMZXMgc3R5bGVzIGNvbW11bnMgKC5kaXN0cmlidXRpb25zTGlzdGUsIC5kaXN0cmlidXRpb25zVmlkZSkgc29udFxuICAgZMOpZmluaXMgZGFucyBfb25nbGV0R3JvdXBlcy5jc3MgKHPDqWxlY3RldXJzIGdyb3Vww6lzKVxuXG4gICBDZSBmaWNoaWVyIGNvbnRpZW50IHVuaXF1ZW1lbnQgbGVzIMOpbMOpbWVudHMgc3DDqWNpZmlxdWVzXG4gICDDoCBsJ29uZ2xldCBsb3RzIHF1aSBkaWZmw6hyZW50IGRlIGwnb25nbGV0IHBhcnRpY2lwYW50cy5cblxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBPTkdMRVQgUsOJU1VMVEFUUyAtIFN0eWxlcyBzcMOpY2lmaXF1ZXNcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiAgIExlcyBzdHlsZXMgY29tbXVucyBkZXMgYmxvY3Mgc29udCBkYW5zIDUzX2Jsb2NzLmNzc1xuICAgQ2UgZmljaGllciBjb250aWVudCB1bmlxdWVtZW50IGxlcyDDqWzDqW1lbnRzIHNww6ljaWZpcXVlc1xuICAgw6AgbCdvbmdsZXQgcsOpc3VsdGF0cyAoc2VjdGlvbnMsIGdhZ25hbnRzLCBldGMuKVxuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBTZWN0aW9uIGRlIHLDqXN1bHRhdHMgKi9cbi5zZWN0aW9uUmVzdWx0YXRzIHtcbiAgICBtYXJnaW4tYm90dG9tOiA0MHB4O1xufVxuXG4uc2VjdGlvblJlc3VsdGF0c1RpdHJlIHtcbiAgICBmb250OiB2YXIoLS1mSDMpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIG1hcmdpbjogMCAwIDIwcHggMDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTJweDtcbiAgICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXIpO1xufVxuXG4vKiBMaXN0ZSBkZXMgYmxvY3MgZGUgdMOpbMOpY2hhcmdlbWVudCAqL1xuLmxpc3RlVGVsZWNoYXJnZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcExhcmdlKTsgLyogYWxpZ27DqSAxNiAtPiAyMHB4ICjDqWNoZWxsZSBQTyAyMDI2LTA3LTE4KSAqL1xufVxuXG4vKiBCbG9jIHLDqXN1bHRhdCBwYXIgYW5pbWF0aW9uIOKAlCBib3ggKHRpdHJlID0gbm9tIGRlIGwnYW5pbWF0aW9uLCBmaW4gdHJhaXQgY29tbWUgbGVzIGJveCBwYXJ0aWNpcGFudHMpICovXG4uYmxvY1Jlc3VsdGF0U2NlbmUge1xuICAgIG1heC13aWR0aDogNjAwcHg7XG4gICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbiAgICBwYWRkaW5nOiAxNnB4IDIwcHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckZvcm0pO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbn1cblxuLmJsb2NSZXN1bHRhdFNjZW5lOmVtcHR5IHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4uYmxvY1Jlc3VsdGF0VGl0cmUge1xuICAgIGZvbnQ6IHZhcigtLWZINCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG4gICAgbWFyZ2luOiAwIDAgMTJweCAwO1xufVxuXG4uYmxvY1Jlc3VsdGF0Qm91dG9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xufVxuXG4vKiBUw6lsw6ljaGFyZ2VtZW50cyByw6lzdWx0YXRzIDogdW5lIGxpZ25lIHBhciByb25kZS9jbGFzc2VtZW50LCBwZXRpdHMgbGllbnMgcGFyIGZvcm1hdC4gKi9cbi5yZXN1bHRhdExpZ25lcyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTsgLyogYWxpZ27DqSA2IC0+IDhweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbn1cblxuLnJlc3VsdGF0TGlnbmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xufVxuXG4ucmVzdWx0YXRMYWJlbCB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgbWluLXdpZHRoOiAxMDBweDtcbn1cblxuLnJlc3VsdGF0TGllbiB7XG4gICAgY29sb3I6IHZhcigtLWNMaW5rKTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5yZXN1bHRhdExpZW46aG92ZXIge1xuICAgIGNvbG9yOiB2YXIoLS1jTGlua2gpO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuIiwiLyogT25nbGV0IFB1YmxpY2F0aW9uIOKAlCB1bmUgY2FydGUgcGFyIGFuaW1hdGlvbiA6IHRpdHJlLCBjYXNlIMKrIHB1YmxpZXIgwrssIGxpZW4gKyBRUi4gKi9cblxuLmJsb2NQdWJsaWNhdGlvbiB7XG4gICAgbWFyZ2luLWJvdHRvbTogMTZweDtcbn1cblxuLnB1YmxpY2F0aW9uQ2FzZUxhYmVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuLnB1YmxpY2F0aW9uTGllbiB7XG4gICAgbWFyZ2luLXRvcDogMTJweDtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBSw4lDQVBJVFVMQVRJRiBTQ8OJTkFSSU8gKHN0ZXBwZXIgdmVydGljYWwpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBDb250YWluZXIgZHUgc3RlcHBlciAqL1xuLnJlY2FwU3RlcHBlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogMDtcbn1cbiNzY2VuYXJpb1Bhbm5lYXUgLnJlY2FwU3RlcHBlciA+IC5yZWNhcEFjdGlvbnMgKyAucmVjYXBCbG9jIHtcbiAgICBtYXJnaW4tdG9wOiAzMnB4O1xufVxuXG4vKiBDb25uZWN0ZXVyIHZlcnRpY2FsIGVudHJlIGxlcyBibG9jcyAqL1xuLnJlY2FwQ29ubmVjdGV1ciB7XG4gICAgd2lkdGg6IDNweDtcbiAgICBoZWlnaHQ6IDI0cHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jMDMpO1xuICAgIG1hcmdpbi1sZWZ0OiAyMHB4O1xufVxuXG4vKiBCbG9jIGluZGl2aWR1ZWwgZHUgc3RlcHBlciAqL1xuLnJlY2FwQmxvYyB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckNhcnRlKTtcbiAgICBtaW4taGVpZ2h0OiA2NnB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi8qIFRpdHJlIGR1IGJsb2MgKGgzKSAqL1xuLnJlY2FwQmxvYyBoMyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pOyAvKiBhbGlnbsOpIDEwIC0+IDEycHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG4gICAgcGFkZGluZzogMTBweCAxNHB4IDA7XG4gICAgZm9udDogdmFyKC0tZkg0KTtcbiAgICBtYXJnaW46IDA7XG59XG5cbi8qIMOJdGlxdWV0dGVzIGR1IHLDqWNhcCA6IHVuIFNFVUwgc3R5bGUsIHF1J2VsbGVzIHNvaWVudCBjbGlxdWFibGVzICg8YT4vPGJ1dHRvbj4gZW4gbW9kZVxuICAgUHLDqXBhcmVyIC8gcHJvZ3Jlc3Npb24pIG91IHN0YXRpcXVlcy4gRm9uZCBjbGFpciBkZSBjYXTDqWdvcmllLCB0ZXh0ZSBub2lyLCBib3JkdXJlIGzDqWfDqHJlXG4gICAoY2hvaXggUE8gMjAyNi0wNy0yMCA6IHBsdXMgZGUgcGFzdGlsbGUgZm9uY8OpZSDDoCB0ZXh0ZSBibGFuYyDigJQgbCdvbmdsZXQgRGlmZnVzZXIgZmFpdCBmb2kpLlxuICAgLnJlY2FwVGFnU29ydGllID0gbmV1dHJlIChub2lyKSA6IHVuZSBzb3J0aWUgcGV1dCDDqnRyZSBkZSBuJ2ltcG9ydGUgcXVlbGxlIGZhbWlsbGUuXG4gICAucmVjYXBUYWdTb3J0aWVTZWNvbmRhaXJlID0gc29ydGllIGBzZWNvbmRhaXJlYCBhdSBjb250cmF0LCBwcsOpc2VudMOpZSBlbiByZXRyYWl0LiAqL1xuLnJlY2FwVGFnR3JvdXBlcyxcbi5yZWNhcFRhZ0Rpc3RyaWJ1dGlvbnMsXG4ucmVjYXBUYWdTb3J0aWUsXG4ucmVjYXBUYWdTb3J0aWVTZWNvbmRhaXJlLFxuLnJlY2FwTGllbkdyb3VwZXMsXG4ucmVjYXBMaWVuRGlzdHJpYnV0aW9ucyB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG1hcmdpbjogMnB4IDA7XG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ0V0aXF1ZXR0ZSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjApO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIGN1cnJlbnRDb2xvcjtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLnJlY2FwVGFnU29ydGllU2Vjb25kYWlyZSB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG59XG5cbi5yZWNhcFRhZ0dyb3VwZXMsXG4ucmVjYXBMaWVuR3JvdXBlcyB7IGJhY2tncm91bmQ6IHZhcigtLWNGb25kR3JvdXBlcyk7IH1cblxuLnJlY2FwVGFnRGlzdHJpYnV0aW9ucyxcbi5yZWNhcExpZW5EaXN0cmlidXRpb25zIHsgYmFja2dyb3VuZDogdmFyKC0tY0ZvbmREaXN0cmlidXRpb25zKTsgfVxuXG4vKiBUaXRyZSBkJ2FuaW1hdGlvbi9hZmZpY2hhZ2UgY2xpcXVhYmxlIChtb2RlIFByw6lwYXJlcikgOiBsaWVuIHNvYnJlLCBzYW5zIHBhc3RpbGxlIGNvbG9yw6llLFxuICAgcG91ciBuZSBwYXMgcGVydHVyYmVyIGxhIGxlY3R1cmUg4oCUIG3Dqm1lIHNvYnJpw6l0w6kgcXVlIGxlIHRpdHJlIG5vbiBjbGlxdWFibGUgZGUgbGEgcHJvZ3Jlc3Npb24uICovXG4ucmVjYXBMaWVuU2NlbmVzLFxuLnJlY2FwTGllbkFmZmljaGFnZXMge1xuICAgIGNvbG9yOiBpbmhlcml0O1xufVxuXG4vKiBBZmZvcmRhbmNlIMKrIGNsaXF1YWJsZSDCuyA6IHNvdWxpZ25lbWVudCBhdSBzdXJ2b2wgKMOpdGlxdWV0dGVzIGQnZW50csOpZSArIHRpdHJlcykgKi9cbi5yZWNhcExpZW5Hcm91cGVzOmhvdmVyLFxuLnJlY2FwTGllbkRpc3RyaWJ1dGlvbnM6aG92ZXIsXG4ucmVjYXBMaWVuU2NlbmVzOmhvdmVyLFxuLnJlY2FwTGllbkFmZmljaGFnZXM6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4vKiBTb3VzLXRpdHJlIGRhbnMgbGUgYmxvYyAoaDQpICovXG4ucmVjYXBCbG9jIGg0IHtcbiAgICBmb250OiB2YXIoLS1mSDQpO1xuICAgIG1hcmdpbjogMDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLyogTGlzdGVzIMOgIHB1Y2VzIGRhbnMgbGUgYmxvYyAqL1xuLnJlY2FwQmxvYyB1bCB7XG4gICAgbWFyZ2luOiA0cHggMDtcbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7XG59XG5cbi5yZWNhcEJsb2MgbGkge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4vKiBEw6l0YWlscyBkdSBibG9jICovXG4ucmVjYXBCbG9jRGV0YWlsIHtcbiAgICBwYWRkaW5nOiA0cHggMTRweCAxMHB4O1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4ucmVjYXBCbG9jRGV0YWlsIHAge1xuICAgIG1hcmdpbjogMnB4IDA7XG59XG5cbi5yZWNhcEJsb2NEZXRhaWwgaHIge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgbWFyZ2luOiAyMHB4IDA7XG59XG5cbi8qIEljw7RuZSBkZSBsJ2FuaW1hdGlvbiBlbiByYXBwZWwgZGFucyBsZSBjb2luIGhhdXQtZHJvaXQgZHUgYmxvYy5cbiAgIDY0cHggPSB0YWlsbGUgZCdpY8O0bmUgc3RhbmRhcmQgZHUgcHJvamV0IChoYXJtb25pc2F0aW9uIGVuIGNvdXJzLCBkw6ljaXNpb24gUE8gMjAyNi0wNi0xMCkuXG4gICBIb3JzIGZsdXggKGFic29sdXRlKSBwb3VyIG5lIHBhcyBnb25mbGVyIGxhIGhhdXRldXIgZHUgdGl0cmUg4oCUIGNhbMOpZSBzdXIgbGUgcGFkZGluZyBkdSBoMy4gKi9cbi5yZWNhcFRpdHJlSWNvbmUge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgd2lkdGg6IDY0cHg7XG4gICAgaGVpZ2h0OiA2NHB4O1xuICAgIHBhZGRpbmc6IDZweDtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG59XG5cbi8qIFZhcmlhbnRlcyBjb3VsZXVyIHBhciB0eXBlICovXG4ucmVjYXBCbG9jR3JvdXBlcywgLyogLnJlY2FwQmxvY0Rpc3RyaWJ1dGlvbnMgKGludXRpbGlzw6kgMjAyNi0wNi0xMykgKi8gLnJlY2FwQmxvY0VudHJlZXNTb3J0aWVzIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMxKTtcbn1cblxuLnJlY2FwQmxvY1NjZW5lIC5yZWNhcFRpdHJlSWNvbmUge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kU2NlbmVzKTtcbn1cblxuLnJlY2FwQmxvY1NjZW5lLnJlY2FwQmxvY0FmZmljaGFnZSAucmVjYXBUaXRyZUljb25lIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZEFmZmljaGFnZXMpO1xufVxuXG4ucmVjYXBCbG9jQ29uZmlndXJhdGlvbnMge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNGb25kQ29uZmlnKTtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4ucmVjYXBCbG9jRmluYWwge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbn1cbiovXG5cbi8qIExpZW4gXCJNb2RpZmllclwiIHNvdXMgbGUgcsOpY2FwICovXG4ucmVjYXBBY3Rpb25zIHtcbiAgICBwYWRkaW5nOiAxMHB4IDE0cHg7XG59XG5cbi8qIE3Dqm1lIGNvdWxldXIgcXUnQW5udWxlciBkZXMgZm9ybXVsYWlyZXMgKG5veWF1IDMxX2N0YS5jc3MpIDogbGVzIGFjdGlvbnMgbmV1dHJlcyBzb250XG4gICBub2lyZXMsIGxlcyBjb3VsZXVycyByZXN0ZW50IHLDqXNlcnbDqWVzIGF1eCBhY3Rpb25zIG1hcnF1w6llcyAoU3VwcHJpbWVyKS4gKi9cbi5yZWNhcEFjdGlvbnMgYSB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi5yZWNhcEFjdGlvbnMgYTpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi8qIEltYWdlIGRhbnMgdW4gYmxvYyByw6ljYXAgKi9cbi5yZWNhcEltYWdlIHtcbiAgICBtYXgtd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4vKiBQYXN0aWxsZXMgY291bGV1cnMgZGFucyBsZSByw6ljYXAgKi9cbi5yZWNhcENvdWxldXJzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGdhcDogdmFyKC0tZ2FwRGVmYXV0KTtcbiAgICBtYXJnaW4tdG9wOiA2cHg7XG59XG5cbi5yZWNhcENvdWxldXJQYXN0aWxsZSB7XG4gICAgd2lkdGg6IDI4cHg7XG4gICAgaGVpZ2h0OiAyOHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlcik7XG59XG5cbi8qIE1lc3NhZ2UgdmlkZSAqL1xuLnJlY2FwVmlkZSB7XG4gICAgZm9udDogdmFyKC0tZkl0YWxpYzE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBwYWRkaW5nOiAxNnB4IDA7XG59XG5cbi8qIFNvdXJjZSBsaXN0IGRhbnMgbGVzIGTDqXRhaWxzICovXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5yZWNhcFNvdXJjZXMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IDJweDtcbn1cbiovXG5cbi8qIEFsZXJ0ZSBpbnN1ZmZpc2FuY2UgKi9cbi5yZWNhcEFsZXJ0ZSB7XG4gICAgY29sb3I6IHZhcigtLWNSb3VnZSk7XG4gICAgZm9udDogdmFyKC0tZkFsZXJ0ZTE2KTtcbn1cblxuLyogQnJpcXVlIHLDqWNhcGl0dWxhdGlmIGRhbnMgbGEgZ3JpbGxlIGR1IHNjw6luYXJpbyAqL1xuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4uYnJpcXVlLmJyaXF1ZVJlY2FwIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jQmxhbmMwMyk7XG59XG4qL1xuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTUgLSBjb25jZXB0IHJlY2FwLmpzIHJldGlyw6lcbi5yZWNhcEFuaW1Db25maWc6ZW1wdHkge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG4qL1xuXG4ucmVjYXBFbmNhZHJlIHtcbiAgICBtYXJnaW46IDEwcHggMDtcbiAgICBwYWRkaW5nOiAxMHB4IDE1cHg7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGJhY2tncm91bmQ6ICNGRkY4O1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTUgLSBjb25jZXB0IHJlY2FwLmpzIHJldGlyw6lcbi5yZWNhcEFuaW1Db25maWcgaDQge1xuICAgIGZvbnQ6IHZhcigtLWZINCk7XG4gICAgbWFyZ2luOiAyMHB4IDAgNHB4O1xufVxuXG4ucmVjYXBBbmltQ29uZmlnIGg0OmZpcnN0LWNoaWxkIHtcbiAgICBtYXJnaW4tdG9wOiAwO1xufVxuXG4ucmVjYXBBbmltQ29uZmlnIHAge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIG1hcmdpbjogMnB4IDA7XG59XG5cbi5yZWNhcEFuaW1Db25maWcgdWwsXG4ucmVjYXBBbmltQ29uZmlnIG9sIHtcbiAgICBtYXJnaW46IDRweCAwO1xuICAgIHBhZGRpbmctbGVmdDogMjBweDtcbn1cblxuLnJlY2FwQW5pbUNvbmZpZyBsaSB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG59XG5cbi5yZWNhcEFuaW1Db25maWcgdGFibGUge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7XG4gICAgbWFyZ2luOiA2cHggMDtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLnJlY2FwQW5pbUNvbmZpZyB0aCxcbi5yZWNhcEFuaW1Db25maWcgdGQge1xuICAgIHBhZGRpbmc6IDRweCA4cHg7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBib3JkZXItYm90dG9tOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG59XG5cbi5yZWNhcEFuaW1Db25maWcgdGgge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5yZWNhcEFuaW1Db25maWcgaHIge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItdG9wOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgbWFyZ2luOiA4cHggMDtcbn1cbiovXG5cbi8qIEJvdXRvbnMgcGFydGljaXBhbnRzIGNsaXF1YWJsZXMgZGFucyBsYSBwcm9ncmVzc2lvbiA6IG3Dqm1lIMOpdGlxdWV0dGUgcXVlIGxlcyBhdXRyZXNcbiAgIChjb250b3VyIGNvbXByaXMsIGNmLiBibG9jIGR1IGhhdXQpLCBvbiBuJ2FqdXN0ZSBxdWUgbCdpbnRlcmFjdGl2aXTDqS4gKi9cbmJ1dHRvbi5yZWNhcFRhZ0dyb3VwZXMge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBmb250OiBpbmhlcml0O1xufVxuXG5idXR0b24ucmVjYXBUYWdHcm91cGVzOmhvdmVyIHtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFBST0dSRVNTSU9OIOKAlCDDiXRhdHMgZGVzIGJsb2NzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBCbG9jIG5vbiBhY3RpZiA6IGF0dMOpbnXDqSAqL1xuI3Byb2dyZXNzaW9uIC5yZWNhcEJsb2NTY2VuZSB7XG4gICAgb3BhY2l0eTogLjU7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzO1xufVxuXG4vKiBCbG9jIGFjdGlmIDogcGxlaW5lIGNvdWxldXIgKi9cbiNwcm9ncmVzc2lvbiAucmVjYXBCbG9jU2NlbmUucmVjYXBCbG9jQWN0aWYge1xuICAgIG9wYWNpdHk6IDE7XG59XG5cbi8qIEluZm8gZCfDqXRhdCBkeW5hbWlxdWUgKGfDqW7DqXLDqWUgcGFyIEpTKSAqL1xuLnByb2dyZXNzaW9uRXRhdCB7XG4gICAgZm9udDogdmFyKC0tZkN0YTE2KTtcbiAgICBjb2xvcjogdmFyKC0tY0N0YSk7XG4gICAgcGFkZGluZzogNnB4IDE0cHg7XG59XG5cbi8qIEHDqXJhdGlvbiBkZSBzZWNvdXJzIHF1YW5kIGxlIGJsb2MgbidhIHBhcyBlbmNvcmUgZGUgY29udGVudSBkZSBwcm9ncmVzc2lvbiAqL1xuLnByb2dyZXNzaW9uQ29udGVudTpub3QoOmhhcygqKSkge1xuICAgIHBhZGRpbmctYm90dG9tOiAxMHB4O1xufVxuXG4vKiBCbG9jcyBkZSBwcm9ncmVzc2lvbiDDqW1pcyBwYXIgbCdhbmltYXRpb24gKG9idGVuaXJQcm9ncmVzc2lvbiDihpIgcmVuZHUgdW5pcXVlIHJlbmR1QmxvY3MudHMpICovXG4ucHJvZ3Jlc3Npb25CbG9jVGl0cmUge1xuICAgIGZvbnQ6IHZhcigtLWZINCk7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgbWFyZ2luOiA2cHggMCAycHg7XG59XG5cbi5wcm9ncmVzc2lvbkJsb2NUZXh0ZSB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMyk7XG4gICAgbWFyZ2luOiAycHggMDtcbn1cblxuLnByb2dyZXNzaW9uQmxvY0xpc3RlIHtcbiAgICBtYXJnaW46IDRweCAwO1xuICAgIHBhZGRpbmctbGVmdDogMjBweDtcbn1cblxuLnByb2dyZXNzaW9uQmxvY0xpc3RlIGxpIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLnByb2dyZXNzaW9uQmxvY0JhcnJlIHtcbiAgICBtYXJnaW46IDhweCAwO1xufVxuXG4ucHJvZ3Jlc3Npb25CbG9jQmFycmVQaXN0ZSB7XG4gICAgaGVpZ2h0OiAxMHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMyk7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLnByb2dyZXNzaW9uQmxvY0JhcnJlSmF1Z2Uge1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQ3RhKTtcbiAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjNzO1xufVxuXG4ucHJvZ3Jlc3Npb25CbG9jQmFycmVMYWJlbCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLXRvcDogNHB4O1xuICAgIGZvbnQ6IHZhcigtLWZDdGExNik7XG4gICAgY29sb3I6IHZhcigtLWNDdGEpO1xufVxuIiwiLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFNDw4lOQVJJTyAtIEZpY2hpZXIgcHJpbmNpcGFsXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICBDZSBmaWNoaWVyIGltcG9ydGUgbGVzIHBhcnRpYWxzIG9yZ2FuaXPDqXMgcGFyIHRow6htZS5cbiAgIENoYXF1ZSBwYXJ0aWFsIGfDqHJlIHVuIGFzcGVjdCBzcMOpY2lmaXF1ZSBkZSBsYSBzY2VuYXJpby5cblxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuQGltcG9ydCAnNTZfc2NlbmFyaW8vX2V0aXF1ZXR0ZXMuY3NzJztcbkBpbXBvcnQgJzU2X3NjZW5hcmlvL19ncmlsbGUuY3NzJztcbkBpbXBvcnQgJzU2X3NjZW5hcmlvL19mb3JtdWxhaXJlcy5jc3MnO1xuQGltcG9ydCAnNTZfc2NlbmFyaW8vX29uZ2xldE1lbnUuY3NzJztcbkBpbXBvcnQgJzU2X3NjZW5hcmlvL19tZW51QWpvdXRlci5jc3MnO1xuQGltcG9ydCAnNTZfc2NlbmFyaW8vX2JyaXF1ZXNDb3VsZXVycy5jc3MnO1xuQGltcG9ydCAnNTZfc2NlbmFyaW8vX2RyYWdEcm9wLmNzcyc7XG5AaW1wb3J0ICc1Nl9zY2VuYXJpby9fbW9kYWxlLmNzcyc7XG5AaW1wb3J0ICc1Nl9zY2VuYXJpby9fYWxlcnRlcy5jc3MnO1xuQGltcG9ydCAnNTZfc2NlbmFyaW8vX3VwbG9hZHMuY3NzJztcbkBpbXBvcnQgJzU2X3NjZW5hcmlvL19ibG9jUmVzZWF1U29jaWFsLmNzcyc7XG5AaW1wb3J0ICc1Nl9zY2VuYXJpby9fb25nbGV0R3JvdXBlcy5jc3MnO1xuQGltcG9ydCAnNTZfc2NlbmFyaW8vX29uZ2xldERpc3RyaWJ1dGlvbnMuY3NzJztcbkBpbXBvcnQgJzU2X3NjZW5hcmlvL19vbmdsZXRSZXN1bHRhdHMuY3NzJztcbkBpbXBvcnQgJzU2X3NjZW5hcmlvL19vbmdsZXRQdWJsaWNhdGlvbi5jc3MnO1xuQGltcG9ydCAnNTZfc2NlbmFyaW8vX3JlY2FwaXR1bGF0aWYuY3NzJztcbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBPTkdMRVQgUsOJR0lFIC0gTGFuY2V1ciAvIFBpbG90YWdlXG4gICBVdGlsaXNlIC5wYW5uZWF1V3JhcHBlciAvIC5wYW5uZWF1R2F1Y2hlIC8gLnBhbm5lYXVGb3JtdWxhaXJlXG4gICBkw6lmaW5pcyBkYW5zIDU2X3NjZW5hcmlvL19mb3JtdWxhaXJlcy5jc3NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBCTE9DIFLDiUdJRSAoZGVzaWduIHNvYnJlLCBlbiBwcmVtaWVyKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLmJsb2NSZWdpZSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwTGFyZ2UpOyAvKiBhbGlnbsOpIDE2IC0+IDIwcHggKMOpY2hlbGxlIFBPIDIwMjYtMDctMTgpICovXG4gICAgcGFkZGluZzogdmFyKC0tcGFkZGluZ0NvcnBzKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckNhcnRlKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG59XG5cbi5ibG9jUmVnaWUgaDMge1xuICAgIG1hcmdpbjogMDtcbn1cblxuLmJsb2NSZWdpZSAuY3RhU3VwcHJpbWVyIHtcbiAgICB3aWR0aDogbWF4LWNvbnRlbnQ7XG59XG5cbi8qIMOJY3JhbiBkZSBzdXBwcmVzc2lvbiA6IGF2ZXJ0aXNzZW1lbnQgYWNjZXB0w6kgKGNhc2UgwqsgSidhaSBjb21wcmlzIMK7KSDigJQgZm9uZCBub2lyIGVuIHN1cmNoYXJnZVxuICAgZHUgcm91Z2UgZCdhbGVydGUsIG1hcmdlcyBldCBwYWRkaW5nIGluY2hhbmfDqXMgcG91ciBuZSByaWVuIGTDqWNhbGVyLiAqL1xuLmFsZXJ0RXJyZXVyLmFjY2VwdGVBdmVydGlzc2VtZW50IHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jTm9pcik7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBVUkwgQk9YIChjb3BpZXIgbCdVUkwpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4ucmVnaWVVcmxCb3gge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7XG59XG5cbi5yZWdpZVVybCB7XG4gICAgZmxleDogMTtcbiAgICBtaW4td2lkdGg6IDA7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpcztcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4ucmVnaWVVcmw6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4uYnRuQ29waWVyIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLmJ0bkNvcGllcjpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG59XG5cbi8qIMOJdGF0IGFwcsOocyBjb3BpZSA6IHRleHRlIHZlcnQsIG5vbiBpbnRlcmFjdGlmICovXG4uYnRuQ29waWVyLmNvcGllIHtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBRUiBDT0RFXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4ucmVnaWVRckNvZGUgaW1nIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogMTUwcHg7XG4gICAgaGVpZ2h0OiAxNTBweDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTE3cHgpO1xufVxuXG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBDT0RFIEQnQUNDw4hTIChjYWNow6kgcGFyIGTDqWZhdXQpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4ucmVnaWVDb2RlQm94IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBMYXJnZSk7IC8qIGFsaWduw6kgMTYgLT4gMjBweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbn1cblxuLnJlZ2llQ29kZU1hc3F1ZSxcbi5yZWdpZUNvZGVWYWxldXIge1xuICAgIGZvbnQ6IHZhcigtLWZNb25vMjRiKTtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4zZW07XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi5yZWdpZUNvZGVNYXNxdWUge1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjQpO1xufVxuXG4uYnRuRGVjb3V2cmlyIHtcbiAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckZvcm0pO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5idG5EZWNvdXZyaXI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYzAyKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIyKTtcbn1cblxuLmJ0bkRlY291dnJpcltoaWRkZW5dIHtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBDSEFOR0VSIE1FUyBDT0RFUyAoc3R5bGUgZGlzY3JldCBjb21tZSBTdXBwcmltZXIpXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uYnRuQ2hhbmdlckNvZGVzIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlKTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHBhZGRpbmc6IDA7XG59XG5cbi5idG5DaGFuZ2VyQ29kZXM6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUExBQ0VIT0xERVIgKHJpZW4gZGUgY29uZmlndXLDqSlcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5yZWdpZVBsYWNlaG9sZGVyIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgcGFkZGluZzogNDhweCAyNHB4O1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgQ09NUFRFVVIgR0xPQkFMIChmb25kIGJsYW5jLCBhdS1kZXNzdXMgZHUgbW9kZSB0ZXN0KVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuI2NvbXB0ZXVyR2xvYmFsIHtcbiAgICBwYWRkaW5nOiB2YXIoLS1wYWRkaW5nQ29ycHMpO1xuICAgIGJvcmRlcjogdmFyKC0tYm9yZGVyQ2FydGUpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jRm9uZEdyb3VwZXMpO1xufVxuXG4jY29tcHRldXJHbG9iYWwgPiBkaXYge1xuICAgIHdpZHRoOiBtYXgtY29udGVudDtcbiAgICBtYXJnaW4tbGVmdDogNDBweDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XG4gICAgI2NvbXB0ZXVyR2xvYmFsID4gZGl2IHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IC01cHg7XG4gICAgfVxufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbi5jb21wdGV1ckdsb2JhbExpbWl0ZSB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG4gICAgbWFyZ2luOiAxMHB4IDAgNHB4O1xufVxuKi9cblxuLmNvbXB0ZXVyR2xvYmFsTGlnbmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICBtYXJnaW46IDA7XG59XG5cbi5jb21wdGV1ckdsb2JhbFRvdGFsIHtcbiAgICBtYXJnaW4tdG9wOiA2cHg7XG4gICAgcGFkZGluZy10b3A6IDZweDtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tY1Rlc3QzKTtcbn1cblxuLmNvbXB0ZXVyR2xvYmFsTGFiZWwge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuXG4uY29tcHRldXJHbG9iYWxWYWxldXIsXG4uY29tcHRldXJHbG9iYWxWYWxldXJSZWVscyxcbi5jb21wdGV1ckdsb2JhbFZhbGV1ckZpY3RpZnMge1xuICAgIGZvbnQ6IHZhcigtLWZNb25vMjRiKTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIxKTtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICBtaW4td2lkdGg6IDYwcHg7XG59XG5cbi5jb21wdGV1ckdsb2JhbFRvdGFsIC5jb21wdGV1ckdsb2JhbFZhbGV1ciB7XG4gICAgZm9udDogdmFyKC0tZk1vbm8yNGIpO1xufVxuXG4jY29tcHRldXJHbG9iYWwubW9kZVRlc3RBY3RpZiB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY1Rlc3QpO1xufVxuXG4jY29tcHRldXJHbG9iYWwubGltaXRlQXR0ZWludGUgLmNvbXB0ZXVyR2xvYmFsVmFsZXVyIHtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIEJMT0MgTU9ERSBURVNUIChwYXJ0aWNpcGFudHMgZmljdGlmcylcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5maWN0aWZBY3RpZiAuYmxvY0ljb25lIGltZyxcbi5maWN0aWZBY3RpZiAuYmxvY0ljb25lIHN2ZyB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY1Rlc3QpO1xufVxuXG4vKiBTZWN0aW9uIGZpY3RpZnMgKi9cbiNzZWN0aW9uRmljdGlmcyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGdhcDogdmFyKC0tZ2FwTGFyZ2UpO1xufVxuXG4jc2VjdGlvbkZpY3RpZnMuaGlkZGVuIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBPdmVycmlkZSBkdSBibG9jIGfDqW7DqXJpcXVlIHBvdXIgbGUgbW9kZSB0ZXN0ICovXG4uYmxvYy5ibG9jR3JvdXBlIHtcbiAgICBtYXgtd2lkdGg6IG5vbmU7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJDYXJ0ZSk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG59XG5cbi5ibG9jR3JvdXBlIC5ibG9jQ29ycHMge1xuICAgIGdhcDogdmFyKC0tZ2FwTW95ZW4pO1xuICAgIHBhZGRpbmc6IDE2cHg7XG59XG5cbi8qIExpZ25lIDIgOiBUb2dnbGUgLSByw6l1dGlsaXNlIC50b2dnbGVBdmVjTGFiZWwgZGUgX21vZGFsZS5jc3MgKi9cblxuLyogTGlnbmUgMyA6IENvbnRlbnUgY29uZGl0aW9ubmVsICovXG4uYmxvY0dyb3VwZUNvbnRlbnUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBnYXA6IHZhcigtLWdhcE1veWVuKTtcbn1cblxuLmJsb2NHcm91cGVSZWVscy5oaWRkZW4sXG4uYmxvY0dyb3VwZUZpY3RpZnMuaGlkZGVuIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBDb21wdGV1cnMgLSByw6l1dGlsaXNlIGxlcyBjbGFzc2VzIGRlIF9vbmdsZXRHcm91cGVzLmNzcyAqL1xuLmJsb2NHcm91cGVSZWVscyAvKiwgLmZpY3RpZnNDb21wdGV1ciAoaW51dGlsaXPDqSAyMDI2LTA2LTEzKSAqLyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG59XG5cbi8qIExhYmVsIGF2YW50IGxlIGNvbXB0ZXVyICovXG4jYmxvY01vZGVUZXN0IC5jb21wdGV1ckxhYmVsIHtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLyogVmFsZXVyIHByaW5jaXBhbGUgKGdyb3MgY2hpZmZyZSkgKi9cbiNibG9jTW9kZVRlc3QgLmNvbXB0ZXVyVmFsZXVyIHtcbiAgICBmb250OiB2YXIoLS1mTW9ubzI0Yik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMSk7XG59XG5cbi8qIFPDqXBhcmF0ZXVyIFwiL1wiICovXG4jYmxvY01vZGVUZXN0IC5jb21wdGV1clNlcGFyYXRldXIge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjQpO1xufVxuXG4vKiBUZXN0IGVuIGNvdXJzIDogZm9ybXVsYWlyZXMgZMOpc2FjdGl2w6lzICovXG4jYmxvY01vZGVUZXN0LnRlc3RFbkNvdXJzIC50b2dnbGVTbGlkZXIge1xuICAgIG9wYWNpdHk6IC41O1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbn1cblxuLyogRm9ybXVsYWlyZSBkJ2Fqb3V0IGZpY3RpZnMgKi9cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLmZpY3RpZnNGb3JtdWxhaXJlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBNb3llbik7XG4gICAgZmxleC13cmFwOiB3cmFwO1xufVxuKi9cblxuLyogSW5wdXQgZXQgYm91dG9uIG3Dqm1lIGhhdXRldXIgKi9cbi5pbnB1dE5vbWJyZUZpY3RpZnMge1xuICAgIHdpZHRoOiA4MHB4O1xuICAgIHBhZGRpbmc6IDRweCA4cHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uaW5wdXROb21icmVGaWN0aWZzLmhpZGRlbiAvKiwgLmJ0bkFqb3V0ZXJGaWN0aWZzLmhpZGRlbiAoaW51dGlsaXPDqSAyMDI2LTA2LTEzKSAqLyB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFRBQkxFQVUgRE9OTsOJRVMgQ09MTEVDVMOJRVMgKGRhbnMgcmVjYXBCbG9jKVxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLnRhYmxlYXVEb25uZWVzQ29sbGVjdGVlcyB7XG4gICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbn1cblxuLnRhYmxlYXVEb25uZWVzQ29sbGVjdGVlcyB0ZCB7XG4gICAgcGFkZGluZzogM3B4IDEycHggM3B4IDA7XG4gICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICAgIG1heC13aWR0aDogMzAwcHg7XG59XG5cbi50YWJsZWF1RG9ubmVlc0NvbGxlY3RlZXMgdGQ6Zmlyc3QtY2hpbGQge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi50YWJsZWF1RG9ubmVlc0NvbGxlY3RlZXMgdGQ6bGFzdC1jaGlsZCB7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgUEFHRSBBQ0PDiFMgUsOJR0lFIChzYWlzaWUgY29kZSA1IGxldHRyZXMpXG4gICBMYXlvdXQgY29tbXVuIGRhbnMgbm95YXUvY3NzL2NvbXBvc2FudHMvZm9ybUFjY2VzQ29kZS5jc3NcbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qIExpZW4gY29ubmV4aW9uIOKAlCBzcMOpY2lmaXF1ZSDDoCBsYSByw6lnaWUgdW5pcXVlbWVudCAqL1xuLm5vdGVDb25uZXhpb24ge1xuICAgIG1hcmdpbi10b3A6IDI0cHg7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xufVxuXG4ubm90ZUNvbm5leGlvbiBhIHtcbiAgICBjb2xvcjogdmFyKC0tY0xpbmspO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xufVxuXG4ubm90ZUNvbm5leGlvbiBhOmhvdmVyIHtcbiAgICBjb2xvcjogdmFyKC0tY0xpbmtoKTtcbn1cbiIsIi8qKlxuICogS2l0IENTUyDigJQgRWZmZXRzIHZpc3VlbHMgKGNhcnRlKVxuICpcbiAqIEFwcGxpcXVlIHZpYSBkYXRhLWVmZmV0IHN1ciAjc3R1ZGlvRWNyYW4uXG4gKiBBam91dGVyIC52dWVDYXJ0ZSBzdXIgdG91dCBibG9jIGEgc3R5bGlzZXIuXG4gKi9cblxuLyog4pSA4pSAIFZhcmlhYmxlIGJvcmR1cmUgZMOpcml2w6llICh1bmUgc2V1bGUgc291cmNlKSDilIDilIAgKi9cbiNzdHVkaW9FY3JhbiB7XG4gICAgLS1pbG90Qm9yZHVyZTogMXB4IHNvbGlkIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb3VsZXVyUHJpbWFpcmUpIDMwJSwgdHJhbnNwYXJlbnQpO1xufVxuXG4vKiDilIDilIAgQ2xhc3NlcyBwYXJ0YWfDqWVzIOKUgOKUgCAqL1xuXG4udnVlVGl0cmVDZW50cmUge1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tcG9saWNlMSk7XG4gICAgZm9udC1mYW1pbHk6ICdTY2FkYScsICdOb3RvIFNhbnMnLCBzYW5zLXNlcmlmO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGNvbG9yOiB2YXIoLS1jb3VsZXVyUHJpbWFpcmUpO1xufVxuXG4vKiBTY2VuZSBkJ2VudHJlZSBjb21tdW5lICovXG5Aa2V5ZnJhbWVzIHZ1ZUFwcGFyaXRpb24ge1xuICAgIGZyb20ge1xuICAgICAgICBvcGFjaXR5OiAwO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMC43NWVtKTtcbiAgICB9XG4gICAgdG8ge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7XG4gICAgfVxufVxuXG4udnVlQW5pbWVyIHtcbiAgICBhbmltYXRpb246IHZ1ZUFwcGFyaXRpb24gMTUwbXMgZWFzZS1vdXQgZm9yd2FyZHM7XG59XG5cbi8qIENhcnRlIGRlIGJhc2UgKi9cbi52dWVDYXJ0ZSB7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0taWxvdFJheW9uKTtcbiAgICBwYWRkaW5nOiB2YXIoLS1pbG90UGFkZGluZyk7XG59XG5cbi8qIEdsYWNpcyAqL1xuW2RhdGEtZWZmZXQ9XCIxXCJdIC52dWVDYXJ0ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvdWxldXJGb25kKSA4MCUsIHRyYW5zcGFyZW50KTtcbiAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTJweCk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tY291bGV1ckZvbmQpO1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDIwcHggdmFyKC0tY05vaXIpO1xufVxuXG4vKiBUcmFuc3BhcmVudCAqL1xuW2RhdGEtZWZmZXQ9XCIyXCJdIC52dWVDYXJ0ZSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLWNvdWxldXJGb25kKSA3MCUsIHRyYW5zcGFyZW50KTtcbn1cblxuLyogVm9pbGUgKi9cbltkYXRhLWVmZmV0PVwiM1wiXSAudnVlQ2FydGUge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxNjVkZWcsXG4gICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb3VsZXVyRm9uZCkgOTUlLCB0cmFuc3BhcmVudCksXG4gICAgICAgIGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb3VsZXVyRm9uZCkgNDAlLCB0cmFuc3BhcmVudCkpO1xufVxuXG4vKiBFbmNhZHJlICovXG5bZGF0YS1lZmZldD1cIjRcIl0gLnZ1ZUNhcnRlIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB2YXIoLS1jb3VsZXVyRm9uZCk7XG4gICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tY291bGV1clByaW1haXJlKTtcbn1cblxuLyogT21icmUgKi9cbltkYXRhLWVmZmV0PVwiNVwiXSAudnVlQ2FydGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNvdWxldXJGb25kKTtcbiAgICBib3gtc2hhZG93OiAwIDRweCAyMHB4IHZhcigtLWNPbWJyZUZvcnRlKTtcbn1cblxuLyogUG9wdXAgOiBvbWJyZSBwb3J0ZWUgcG91ciBkZXRhY2hlciBkdSBmb25kICovXG4udnVlUG9wdXAge1xuICAgIGJveC1zaGFkb3c6IDAgMCAyMHB4IDEwcHggdmFyKC0tY05vaXIpO2JveC1zaGFkb3c6IDAgMCA1MHB4IDUwcHggdmFyKC0tY05vaXIpO1xufVxuXG4vKiBJbG90cyBpbnRlcm5lcyA6IGJvcmR1cmUgc3VidGlsZSBkYW5zIGxhIGNhcnRlICovXG5bZGF0YS1lZmZldF0gLnZ1ZUNhcnRlIC52dWVUYWJsZWF1LFxuW2RhdGEtZWZmZXRdIC52dWVDYXJ0ZSAudnVlTWF0Y2hMaWduZSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY291bGV1ckZvbmQpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWlsb3RSYXlvbkludGVybmUpO1xuICAgIGJvcmRlcjogdmFyKC0taWxvdEJvcmR1cmUpO1xufVxuXG4vKiBHYWduYW50IC8gUGVyZGFudCAoZ2VuZXJpcXVlKSAqL1xuLnZ1ZUdhZ25hbnQge1xuICAgIGNvbG9yOiB2YXIoLS1jb3VsZXVyUHJpbWFpcmUpO1xufVxuXG4udnVlUGVyZGFudCB7XG4gICAgZm9udC13ZWlnaHQ6IDIwMDtcbiAgICBvcGFjaXR5OiAwLjQ7XG59XG5cbi8qIFBhZ2luYXRpb24gKi9cbi52dWVQYWdpbmF0aW9uIHtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi8qIExvdCBkaXNwbGF5ICovXG4udnVlTG90IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbn1cblxuLnZ1ZUxvdEltYWdlV3JhcCB7XG4gICAgZmxleDogMTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgbWluLWhlaWdodDogMDtcbiAgICB3aWR0aDogMTAwJTtcbn1cblxuLnZ1ZUxvdEltYWdlIHtcbiAgICBtYXgtd2lkdGg6IG1pbig4MCUsIGNhbGMoMTAwdncgKiA0IC8gMTYpKTtcbiAgICBtYXgtaGVpZ2h0OiBtaW4oOTAlLCBjYWxjKDEwMHZoICogMyAvIDkpKTtcbiAgICBvYmplY3QtZml0OiBjb250YWluO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG4vKiBCYWRnZSByw6lzdWx0YXQg4oCUIHBhcnRpY2lwYW50IG5vbW3DqSBvdSBudW3DqXJvIHRvbWJvbGEgKi9cblxuQGtleWZyYW1lcyB2dWVCYWRnZVJlc3VsdGF0UG9wIHtcbiAgICAwJSAgIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiBzY2FsZSgwLjIpIHJvdGF0ZSgtNmRlZyk7IH1cbiAgICA2MCUgIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiBzY2FsZSgxLjEpIHJvdGF0ZSgxZGVnKTsgfVxuICAgIDgwJSAgeyB0cmFuc2Zvcm06IHNjYWxlKDAuOTYpOyB9XG4gICAgMTAwJSB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogc2NhbGUoMSkgcm90YXRlKDBkZWcpOyB9XG59XG5cbkBrZXlmcmFtZXMgdnVlQmFkZ2VSZXN1bHRhdEZsYXNoIHtcbiAgICAwJSAgIHtcbiAgICAgICAgYm94LXNoYWRvdzpcbiAgICAgICAgICAgIGluc2V0ICA2cHggIDZweCAxOHB4IDE4cHggI0ZGQjNDMTg4LFxuICAgICAgICAgICAgaW5zZXQgLTZweCAgNnB4IDE4cHggMThweCAjQjNEOUZGODgsXG4gICAgICAgICAgICBpbnNldCAgNnB4IC02cHggMThweCAxOHB4ICNCM0ZGQjM4OCxcbiAgICAgICAgICAgIGluc2V0IC02cHggLTZweCAxOHB4IDE4cHggI0ZGRjNCMzg4O1xuICAgIH1cbiAgICAxMDAlIHsgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMCB0cmFuc3BhcmVudDsgfVxufVxuXG4udnVlQmFkZ2VSZXN1bHRhdC52dWVBbmltZXIge1xuICAgIGFuaW1hdGlvbjogdnVlQmFkZ2VSZXN1bHRhdFBvcCA1NTBtcyBjdWJpYy1iZXppZXIoMC4zNCwgMS41NiwgMC42NCwgMSkgZm9yd2FyZHMsXG4gICAgICAgICAgICAgICB2dWVCYWRnZVJlc3VsdGF0Rmxhc2ggNzAwbXMgZWFzZS1vdXQgZm9yd2FyZHM7XG59XG5cbi52dWVCYWRnZVJlc3VsdGF0IHtcbiAgICBmb250LXNpemU6IHZhcigtLXBvbGljZTEpO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHBhZGRpbmc6IDAuNWVtIDFlbTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1pbG90UmF5b25JbnRlcm5lKTtcbiAgICBvdXRsaW5lOiAxcHggc29saWQgdmFyKC0tY05vaXIpO1xuICAgIG91dGxpbmUtb2Zmc2V0OiAtMXB4O1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG1pbi1oZWlnaHQ6IDIuMmVtO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xufVxuXG4udnVlQmFkZ2VSZXN1bHRhdFZpZGUge1xuICAgIGJhY2tncm91bmQ6ICMwMDAwMDAwNTtcbiAgICBvdXRsaW5lLWNvbG9yOiAjMDAwNTtcbn1cblxuLnZ1ZUJhZGdlUmVzdWx0YXROb20ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyKTtcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xuICAgIG1pbi13aWR0aDogMDtcbn1cblxuQGtleWZyYW1lcyB2dWVCYWRnZVJlc3VsdGF0RWNhcnRlciB7XG4gICAgMCUgICB7IGxldHRlci1zcGFjaW5nOiAwOyB9XG4gICAgMTAwJSB7IGxldHRlci1zcGFjaW5nOiAwLjNlbTsgfVxufVxuXG4udnVlQmFkZ2VSZXN1bHRhdE5vbUNoaWZmcmVzIHtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4zZW07XG59XG5cbi52dWVCYWRnZVJlc3VsdGF0LnZ1ZUFuaW1lciAudnVlQmFkZ2VSZXN1bHRhdE5vbUNoaWZmcmVzIHtcbiAgICBhbmltYXRpb246IHZ1ZUJhZGdlUmVzdWx0YXRFY2FydGVyIDUwMG1zIGN1YmljLWJlemllcigwLjM0LCAxLjU2LCAwLjY0LCAxKSAxMDBtcyBib3RoO1xufVxuXG4udnVlQmFkZ2VSZXN1bHRhdE51bWVybyB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDE7XG4gICAgZm9udC1zaXplOiAwLjc1ZW07XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi8qIFPDqXBhcmF0ZXVycyBkaXJlY3Rpb25uZWxzICovXG4udnVlU2VwYXJhdGV1ckgsXG4udnVlU2VwYXJhdGV1clYge1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIGJhY2tncm91bmQ6IGNvbG9yLW1peChpbiBzcmdiLCB2YXIoLS1jb3VsZXVyU2Vjb25kYWlyZSkgMTUlLCB0cmFuc3BhcmVudCk7XG59XG5cbi52dWVTZXBhcmF0ZXVySCB7IHdpZHRoOiAxMDAlOyBoZWlnaHQ6IDFweDsgfVxuLnZ1ZVNlcGFyYXRldXJWIHsgaGVpZ2h0OiAxMDAlOyB3aWR0aDogMXB4OyB9XG4iLCIvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgRk9STVVMQUlSRSBBQ0PDiFMgQ09ERSAocGFydGFnw6kgcsOpZ2llICsgYm9ybmUpXG4gICBTdHlsZXMgY29tbXVucyBwb3VyIGxhIHNhaXNpZSBkdSBjb2RlIDUgbGV0dHJlc1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFBBR0UgRCdBQ0PDiFMgQ09ERSDigJQgTGF5b3V0IHBhcnRhZ8OpXG4gICBVdGlsaXPDqSBwYXIgcmVnaWVBY2Nlcy50d2lnIGV0IGJvcm5lQWNjZXMudHdpZ1xuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLnBhZ2VBY2Nlc0NvZGUge1xuICAgIG1pbi1oZWlnaHQ6IDEwMHZoO1xuICAgIG1pbi1oZWlnaHQ6IDEwMGR2aDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgcGFkZGluZzogMjBweDtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMwMik7XG59XG5cbi5jb250ZW51QWNjZXNDb2RlIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXgtd2lkdGg6IDQwMHB4O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBwYWRkaW5nOiA0MHB4IDMycHg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMik7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tb21icmVQb3J0ZWUpO1xufVxuXG4uY29udGVudUFjY2VzQ29kZSBoMSB7XG4gICAgZm9udDogdmFyKC0tZkgyKTtcbiAgICBtYXJnaW4tYm90dG9tOiAxMnB4O1xufVxuXG4uYWNjZXNDb2RlSW5zdHJ1Y3Rpb24ge1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjMpO1xuICAgIG1hcmdpbi1ib3R0b206IDI0cHg7XG59XG5cbi5jb250ZW51QWNjZXNDb2RlIC5hbGVydEVycmV1ciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY1JvdWdlNmFodCk7XG4gICAgY29sb3I6IHZhcigtLWNSb3VnZTYpO1xuICAgIHBhZGRpbmc6IDEycHggMTZweDtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDtcbiAgICBmb250OiB2YXIoLS1mVGV4dDE2KTtcbn1cblxuLmNvbnRlbnVBY2Nlc0NvZGUgLmFsZXJ0QmxvY2FnZSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY09yRm9uZCk7XG4gICAgY29sb3I6IHZhcigtLWNPcmgpO1xuICAgIHBhZGRpbmc6IDI0cHg7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjIpO1xuICAgIGZvbnQ6IHZhcigtLWZUZXh0MTYpO1xufVxuXG4uY29udGVudUFjY2VzQ29kZSAuYWxlcnRCbG9jYWdlIHAge1xuICAgIG1hcmdpbjogMCAwIDhweDtcbn1cblxuLmNvbnRlbnVBY2Nlc0NvZGUgLmFsZXJ0QmxvY2FnZSBwOmxhc3QtY2hpbGQge1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG59XG5cbi5mb3JtQWNjZXNDb2RlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgZ2FwOiB2YXIoLS1nYXBMYXJnZSk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBDSEFNUCBDT0RFIOKAlCBTYWlzaWUgNSBsZXR0cmVzXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uY2hhbXBDb2RlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXJnaW4tYm90dG9tOiAxNXB4O1xufVxuXG4uaW5wdXRDb2RlQWNjZXMge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogMjQwcHg7XG4gICAgcGFkZGluZzogMjBweDtcbiAgICBmb250OiB2YXIoLS1mSDEpO1xuICAgIGZvbnQtZmFtaWx5OiB2YXIoLS1mZk1vbm8pO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjNlbTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlckZvcm0pO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIyKTtcbn1cblxuLmlucHV0Q29kZUFjY2VzOjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNSk7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuM2VtO1xufVxuXG4uaW5wdXRDb2RlQWNjZXM6Zm9jdXMge1xuICAgIG91dGxpbmU6IG5vbmU7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1jRm9ybUZvY3VzKTtcbiAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggdmFyKC0tY0Zvcm1Gb2N1c0hhbG8pO1xufVxuXG4uYnRuQWNjZWRlciB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgcGFkZGluZzogMThweCAyNHB4O1xuICAgIGZvbnQ6IHZhcigtLWZDdGExNik7XG4gICAgY29sb3I6IHZhcigtLWNDdGF0KTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQ3RhKTtcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzO1xufVxuXG4uYnRuQWNjZWRlcjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0N0YWgpO1xufVxuXG4vKiBCb3V0b24gdG9nZ2xlIHZpc2liaWxpdMOpIGR1IGNvZGUgKi9cbi5idG5Ub2dnbGVQYXNzd29yZCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiA1NXB4O1xuICAgIHRvcDogNDUlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICB3aWR0aDogMjhweDtcbiAgICBoZWlnaHQ6IDI4cHg7XG4gICAgcGFkZGluZzogNHB4O1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG4gICAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXM7XG59XG5cbi5idG5Ub2dnbGVQYXNzd29yZDpob3ZlciB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG59XG5cbi5idG5Ub2dnbGVQYXNzd29yZCBzdmcge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbn1cblxuLyogw4l0YXQgcGFyIGTDqWZhdXQgOiDFk2lsIGJhcnLDqSB2aXNpYmxlIChjb2RlIG1hc3F1w6kpICovXG4uYnRuVG9nZ2xlUGFzc3dvcmQgLmljb25lT2VpbCB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLmJ0blRvZ2dsZVBhc3N3b3JkIC5pY29uZU9laWxCYXJyZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8qIMOJdGF0IHZpc2libGUgOiDFk2lsIG5vcm1hbCB2aXNpYmxlIChjb2RlIGFmZmljaMOpKSAqL1xuLmJ0blRvZ2dsZVBhc3N3b3JkLnZpc2libGUgLmljb25lT2VpbCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbi5idG5Ub2dnbGVQYXNzd29yZC52aXNpYmxlIC5pY29uZU9laWxCYXJyZSB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cbiIsIi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBTVVJDT1VDSEUgQVBFUsOHVSDigJQgcG9wLXVwIGlmcmFtZSAoY29tcG9zYW50IG5veWF1KVxuXG4gICBPdXZyZSB1biBhcGVyw6d1IChhbmltYXRpb24gb3Ugc2PDqW5hcmlvKSBkYW5zIGxhIHBhZ2UgcXVhbmQgbGEgZmVuw6p0cmUgZXN0XG4gICBhc3NleiBncmFuZGUsIGF1IGxpZXUgZCd1biBub3V2ZWwgb25nbGV0LiBVbiBzZXVsIHN5c3TDqG1lIHBvdXIgdG91cyBsZXNcbiAgIGFwZXLDp3VzLCBSw6lnaWUgY29tbWUgVml0cmluZSAoZMOpY2lzaW9uIFBPIDIwMjYtMDctMTgpLlxuXG4gICBCb3V0b25zIDogYmFzZSAubW9kYWxlQ2xvc2UgKGNvbXBvc2FudHMvYm91dG9uRmVybWV0dXJlLmNzcywgc291cmNlIHVuaXF1ZSBkZSBsYSBjcm9peCksXG4gICBzdXJjb3VjaGUgPSB1bmlxdWVtZW50IGwnw6ljYXJ0IGRlIHRhaWxsZSBjaS1kZXNzb3VzLlxuXG4gICBNYXJrdXAgZ8OpbsOpcsOpIHBhciBzdXJjb3VjaGVQcmV2aWV3LnRzIChub3lhdSkgc3VyIGxlcyBkw6ljbGVuY2hldXJzIFtkYXRhLXByZXZpZXddXG4gICAobGllbnMgaHJlZiBvdSBib3V0b25zIGRhdGEtdXJsKSwgYXVjdW4gdGVtcGxhdGUgOlxuICAgLnN1cmNvdWNoZSA+IC5zdXJjb3VjaGVDb250ZW51ID4gLnN1cmNvdWNoZUJhcnJlIChwbGVpbiDDqWNyYW4gKyBjcm9peCkgKyAuc3VyY291Y2hlSWZyYW1lXG5cbiAgIExlcyBzZXVpbHMgZCdvdXZlcnR1cmUgKGlmcmFtZSAxNi85IGQnYXUgbW9pbnMgOTYww5c1NDAgKyBtYXJnZXMgODAvMTIwKVxuICAgdml2ZW50IGRhbnMgc3VyY291Y2hlUHJldmlldy50cyDigJQgZ2FyZGVyIFRTIGV0IGRpbWVuc2lvbm5lbWVudCBDU1MgYWxpZ27DqXMuXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBCb3V0b25zIGRlIGxhIGJhcnJlIDogYmFzZSAubW9kYWxlQ2xvc2UgKGNvbXBvc2FudCwgY3JvaXggY29tcHJpc2UpIOKAlCBwb3PDqWUgcGFyIGxlIFRTIHN1clxuICAgbGVzIGRldXggYm91dG9ucy4gSWNpIHVuaXF1ZW1lbnQgbCfDqWNhcnQgc3VyY291Y2hlICg0NMOXNDQsIGljw7RuZXMgMjQpICsgbGUgbWFzcXVlIHBsZWluIMOpY3Jhbi4gKi9cbkBpbXBvcnQgJy4vYm91dG9uRmVybWV0dXJlLmNzcyc7XG5cbi5zdXJjb3VjaGUge1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3JkZXJSMSk7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3gtc2hhZG93OiB2YXIoLS1vbWJyZU1vZGFsZSk7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG59XG5cbi5zdXJjb3VjaGU6OmJhY2tkcm9wIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jT3ZlcmxheSk7XG59XG5cbi5zdXJjb3VjaGVDb250ZW51IHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jQmxhbmMpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbn1cblxuLnN1cmNvdWNoZUJhcnJlIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgYm9yZGVyLWJvdHRvbTogdmFyKC0tYm9yZGVyKTtcbn1cblxuLyogTGVzIGRldXggYm91dG9ucyBwb3J0ZW50IGxhIGNsYXNzZSAubW9kYWxlQ2xvc2UgKHBvc8OpZSBwYXIgbGUgVFMpIDogc2lsaG91ZXR0ZSwgY3JvaXggZXRcbiAgIGhvdmVyIHZpZW5uZW50IGR1IGNvbXBvc2FudC4gSWNpIGwnw6ljYXJ0IHN1cmNvdWNoZSA6IGJvw650ZSBmaXhlIDQ0w5c0NCwgaWPDtG5lcyAyNC4gKi9cbi5zdXJjb3VjaGVDbG9zZSxcbi5zdXJjb3VjaGVQbGVpbkVjcmFuIHtcbiAgICB3aWR0aDogNDRweDtcbiAgICBoZWlnaHQ6IDQ0cHg7XG4gICAgcGFkZGluZzogMDtcbn1cblxuLnN1cmNvdWNoZUNsb3NlOjpiZWZvcmUsXG4uc3VyY291Y2hlUGxlaW5FY3Jhbjo6YmVmb3JlIHtcbiAgICB3aWR0aDogMjRweDtcbiAgICBoZWlnaHQ6IDI0cHg7XG59XG5cbi5zdXJjb3VjaGVQbGVpbkVjcmFuOjpiZWZvcmUge1xuICAgIG1hc2s6IHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0NzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB3aWR0aD0nMjQnIGhlaWdodD0nMjQnIHZpZXdCb3g9JzAgMCAyNCAyNCcgZmlsbD0nbm9uZScgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLXdpZHRoPScxLjUnIHN0cm9rZS1saW5lY2FwPSdyb3VuZCcgc3Ryb2tlLWxpbmVqb2luPSdyb3VuZCclM0UlM0NwYXRoIGQ9J004IDNINWEyIDIgMCAwIDAtMiAydjMnLyUzRSUzQ3BhdGggZD0nTTIxIDhWNWEyIDIgMCAwIDAtMi0yaC0zJy8lM0UlM0NwYXRoIGQ9J00zIDE2djNhMiAyIDAgMCAwIDIgMmgzJy8lM0UlM0NwYXRoIGQ9J00xNiAyMWgzYTIgMiAwIDAgMCAyLTJ2LTMnLyUzRSUzQy9zdmclM0VcIikgY2VudGVyIC8gY29udGFpbiBuby1yZXBlYXQ7XG4gICAgLXdlYmtpdC1tYXNrOiB1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNDc3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgd2lkdGg9JzI0JyBoZWlnaHQ9JzI0JyB2aWV3Qm94PScwIDAgMjQgMjQnIGZpbGw9J25vbmUnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS13aWR0aD0nMS41JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1saW5lam9pbj0ncm91bmQnJTNFJTNDcGF0aCBkPSdNOCAzSDVhMiAyIDAgMCAwLTIgMnYzJy8lM0UlM0NwYXRoIGQ9J00yMSA4VjVhMiAyIDAgMCAwLTItMmgtMycvJTNFJTNDcGF0aCBkPSdNMyAxNnYzYTIgMiAwIDAgMCAyIDJoMycvJTNFJTNDcGF0aCBkPSdNMTYgMjFoM2EyIDIgMCAwIDAgMi0ydi0zJy8lM0UlM0Mvc3ZnJTNFXCIpIGNlbnRlciAvIGNvbnRhaW4gbm8tcmVwZWF0O1xufVxuXG4vKiAxNi85LCBhdXNzaSBncmFuZCBxdWUgbGEgZmVuw6p0cmUgbGUgcGVybWV0IChtYXJnZXMgOiA4MCBlbiBsYXJnZXVyLCAxMjAgZW5cbiAgIGhhdXRldXIg4oCUIGxhIGJhcnJlIGRlIGxhIHN1cmNvdWNoZSArIGwnYWlyIGF1dG91cikuICovXG4uc3VyY291Y2hlSWZyYW1lIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBib3JkZXI6IG5vbmU7XG4gICAgd2lkdGg6IG1pbihjYWxjKDEwMHZ3IC0gODBweCksIGNhbGMoKDEwMHZoIC0gMTIwcHgpICogMTYgLyA5KSk7XG4gICAgYXNwZWN0LXJhdGlvOiAxNiAvIDk7XG59XG4iLCJmaWVsZHNldCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY0JsYW5jKTtcbiAgICBib3JkZXI6IHZhcigtLWJvcmRlcik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIG1hcmdpbjogMTBweCAwO1xuICAgIHBhZGRpbmc6IDIwcHg7XG59XG5cbmZpZWxkc2V0IGgzIHtcbiAgICBtYXJnaW46IDAgMCAwLjkzNzVyZW07XG4gICAgY29sb3I6IHZhcigtLWNMaW5rKTtcbn1cblxuaHIge1xuICAgIG1hcmdpbjogMzBweCAwO1xuICAgIGJvcmRlci10b3A6IHZhcigtLWJvcmRlcik7XG4gICAgYm9yZGVyLWJvdHRvbTogbm9uZTtcbn1cblxuaHIubWluaSB7XG4gICAgbWFyZ2luOiAxMHB4IDA7XG4gICAgYm9yZGVyLXRvcDogdmFyKC0tYm9yZGVyKTtcbiAgICBib3JkZXItYm90dG9tOiBub25lO1xufVxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiNpbWdGb3JtIHtcbiAgICBtYXgtd2lkdGg6IDY5MHB4O1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbjogMTVweCAwO1xufVxuXG4jaW1nRm9ybSA+IGRpdjpsYXN0LWNoaWxkIHtcbiAgICBhc3BlY3QtcmF0aW86IDExMDAvNDQ5O1xuICAgIG1heC13aWR0aDogNjkwcHg7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgbWFyZ2luLXRvcDogNjBweDtcbiAgICBtYXJnaW4tYm90dG9tOiAyMDBweDtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvbnRhaW47XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbiNkaXZGb3JtIHtcbiAgICBtYXgtd2lkdGg6IDY5MHB4O1xuICAgIHBhZGRpbmc6IDAgNXB4O1xufVxuXG4jZGl2R2xvYmFsRm9ybSB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBnYXA6IDEwcHg7XG59XG4qL1xuXG5cbkBtZWRpYSBhbGwgYW5kIChtaW4td2lkdGg6IDE1MDBweCkge1xuICAgIC8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuICAgICNkaXZHbG9iYWxGb3JtIHtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgICAgIGdhcDogMzBweDtcbiAgICB9XG5cbiAgICAjZGl2Rm9ybSBkaXY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cblxuICAgICNkaXZGb3JtIHtcbiAgICAgICAgcGFkZGluZzogMCAzMHB4O1xuICAgIH1cblxuICAgICNpbWdGb3JtIGRpdjpsYXN0LWNoaWxkIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICAgICovXG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuaW5wdXQucGhOb2lyOjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyKTtcbn1cbiovXG5cbmxhYmVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgICBmb250OiB2YXIoLS1mTGFiZWwpO1xuICAgIG1hcmdpbjogMCAwIDJweDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjEpO1xuICAgIHVzZXItc2VsZWN0OiBub25lO1xufVxuXG4vKiBMYWJlbCBmYWN1bHRhdGlmIDogY291bGV1ciBhdHTDqW51w6llICovXG5sYWJlbDpoYXMoLmZhY3VsdGF0aWYpIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbn1cblxuLyogQ29udGVuZXVyIGTDqXNhY3RpdsOpIChjaGFtcCBkaXNhYmxlZCkgKi9cbi5kaXNhYmxlZERpdiB7XG4gICAgb3BhY2l0eTogMC41O1xufVxuXG5pbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSB7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYm9yZGVyOiB2YXIoLS1ib3JkZXJJbnB1dCk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xuICAgIHBhZGRpbmc6IDdweCA4cHg7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyMik7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbn1cblxuLyogSW5wdXRzIHNww6ljaWF1eCA6IHBhcyBkZSB3aWR0aCAxMDAlICovXG5pbnB1dFt0eXBlPVwiY29sb3JcIl0sXG5pbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0sXG5pbnB1dFt0eXBlPVwicmFkaW9cIl0sXG5pbnB1dFt0eXBlPVwicmFuZ2VcIl0ge1xuICAgIHdpZHRoOiBhdXRvO1xufVxuXG4vKiBJbnB1dCBjb3VsZXVyICovXG5pbnB1dFt0eXBlPVwiY29sb3JcIl0ge1xuICAgIHBhZGRpbmc6IDJweDtcbiAgICBoZWlnaHQ6IDQwcHg7XG4gICAgbWluLXdpZHRoOiA2MHB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbn1cblxuaW5wdXQ6ZGlzYWJsZWQsXG5zZWxlY3Q6ZGlzYWJsZWQsXG50ZXh0YXJlYTpkaXNhYmxlZCB7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICBib3JkZXI6IDFweCBkYXNoZWQgdmFyKC0tY0JsYW5jNSk7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG59XG5cbmlucHV0W3R5cGU9XCJmaWxlXCJdIHtcbiAgICBwYWRkaW5nOiA1cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGFuYyk7XG59XG5cbmlucHV0W3R5cGU9XCJmaWxlXCJdOjpmaWxlLXNlbGVjdG9yLWJ1dHRvbiB7XG4gICAgZm9udDogdmFyKC0tZlRleHQxNik7XG4gICAgY29sb3I6IHZhcigtLWNCbGFuYyk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0N0YSk7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlclIxKTtcbiAgICBwYWRkaW5nOiA2cHggMTJweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgbWFyZ2luLXJpZ2h0OiAxMHB4O1xufVxuXG5pbnB1dFt0eXBlPVwiZmlsZVwiXTo6ZmlsZS1zZWxlY3Rvci1idXR0b246aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNDdGFoKTtcbn1cblxuaW5wdXQ6OnBsYWNlaG9sZGVyLFxudGV4dGFyZWE6OnBsYWNlaG9sZGVyIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXI1KTtcbn1cblxudGV4dGFyZWE6OnBsYWNlaG9sZGVyIHtcbiAgICB3aGl0ZS1zcGFjZTogcHJlLWxpbmU7XG59XG5cblxubGFiZWwgLmZhY3VsdGF0aWYgLyosIGxhYmVsIC5mYWN1bHRhdGlmU3BhbiwgbGFiZWwgLm1vZGlmaWFibGUgKGludXRpbGlzw6kgMjAyNi0wNi0xMykgKi8ge1xuICAgIGRpc3BsYXk6IGlubGluZTtcbiAgICBjb2xvcjogdmFyKC0tY0JsZXU3X3QpO1xuICAgIGZvbnQ6IHZhcigtLWZMaWdodDE0KTtcbiAgICBwYWRkaW5nLWxlZnQ6IDEwcHg7XG4gICAgdGV4dC10cmFuc2Zvcm06IGxvd2VyY2FzZTtcbn1cblxuLyogQ2FjaGVyIFwiRmFjdWx0YXRpZlwiIHN1ciBsZXMgY2hhbXBzIGNvbmRpdGlvbm5lbHMgKi9cbmxhYmVsLnNhbnNGYWN1bHRhdGlmIC5mYWN1bHRhdGlmIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4vKiBUZXh0ZXMgZCdhaWRlICovXG5mb3JtIHNtYWxsLFxuZm9ybSBzbWFsbCBhLFxuLmhlbHAtdGV4dCB7XG4gICAgY29sb3I6IHZhcigtLWNOb2lyNCk7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuICAgIG1heC13aWR0aDogY2FsYygxMDB2dyAtIDg1cHgpO1xuICAgIHBhZGRpbmc6IDJweCAwO1xufVxuXG4uaGVscC10ZXh0LmhlbHAtYWxlcnRlIHtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlNik7XG59XG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbmRpdi5jYkZvcm0gaW5wdXQge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB3aWR0aDogYXV0bztcbiAgICBtYXJnaW4tdG9wOiAwO1xufVxuXG5kaXYuY2JGb3JtIGxhYmVsIHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgdGV4dC1hbGlnbjoganVzdGlmeTtcbn1cbiovXG5cbmZvcm0ge1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgdGV4dC1hbGlnbjogbGVmdDtcbiAgICBtYXgtd2lkdGg6IDYwMHB4O1xuICAgIG1pbi13aWR0aDogYXV0bztcbiAgICB3aWR0aDogMTAwJTtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG5mb3JtID4gZGl2ID4gZGl2LnJvd0Zvcm0gZGl2IHtcbiAgICBtYXJnaW46IDVweCAwO1xufVxuXG5mb3JtID4gZGl2LnJvd0Zvcm0ge1xuICAgIG1hcmdpbjogMDtcbn1cblxuZm9ybSA+IGRpdi5yb3dGb3JtIGRpdi5yb3dGb3JtRG93blR4dCB7XG4gICAgbWFyZ2luOiAwIDIwcHg7XG59XG5cbmZvcm0gPiBkaXYucm93Rm9ybSBkaXYucm93Rm9ybURvd25UeHQgPiBkaXYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBib3JkZXI6IDNweCBzb2xpZCB2YXIoLS1jQmxhbmMwMyk7XG4gICAgYm9yZGVyLXJhZGl1czogMTBweDtcbiAgICBtYXJnaW46IDA7XG4gICAgZm9udDogdmFyKC0tZkxpZ2h0MTQpO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY0JsYW5jKTtcbn1cbiovXG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLmluZm9MaWdodCB7XG4gICAgb3BhY2l0eTogLjg7XG59XG4qL1xuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiNmb3JtR2FpbkltZyB7XG4gICAgZ3JpZC1jb2x1bW46IDEgLyAyO1xufVxuXG4jZm9ybUZvcm11bGFpcmUge1xuICAgIGdyaWQtY29sdW1uOiAyIC8gMztcbiAgICBtYXgtd2lkdGg6IDMyMHB4O1xufVxuXG5wI3BNTCB7XG4gICAgbWFyZ2luOiAwIDEwJSAwIDM4JTtcbiAgICBncmlkLWNvbHVtbjogMS8zO1xufVxuKi9cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4ucm93Rm9ybSB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDEwMCUgMCU7XG59XG5cbi5yb3dGb3JtIHVsIHtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlKTtcbiAgICBtYXJnaW4tYmxvY2stc3RhcnQ6IDNweDtcbiAgICBtYXJnaW4tYmxvY2stZW5kOiAzcHg7XG4gICAgcGFkZGluZzogMTBweCAwIDA7XG59XG4qL1xuXG4vKiBDaGVja2JveCAoLmRpdkNiKSAtIFN0cnVjdHVyZSA6IC5kaXZDYiA+IGlucHV0ICsgbGFiZWwgPiAuc3ZnQ2IgKyB0ZXh0ZSAqL1xuLmRpdkNiIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luOiA1cHggMDtcbn1cblxuLmRpdkNiIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXSB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHdpZHRoOiAwO1xuICAgIGhlaWdodDogMDtcbn1cblxuLmRpdkNiIGxhYmVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1nYXBEZWZhdXQpO1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICBtYXJnaW46IDA7XG59XG5cbi5kaXZDYiBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl06ZGlzYWJsZWQgfiBsYWJlbCB7XG4gICAgb3BhY2l0eTogMC42NTtcbn1cblxuLnN2Z0NiIHtcbiAgICB3aWR0aDogMjJweDtcbiAgICBoZWlnaHQ6IDIycHg7XG4gICAgY29sb3I6IHZhcigtLWNCbGFuYyk7XG4gICAgZmxleC1zaHJpbms6IDA7XG59XG5cbi5zdmdDYiAuY2hlY2tlZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuLnN2Z0NiIC5jaGVja2VkIHBhdGgge1xuICAgIGZpbGw6IHZhcigtLWNOb2lyMSk7XG59XG5cbmlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpjaGVja2VkIH4gbGFiZWwgLnN2Z0NiIC5jaGVja2VkIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbn1cblxuaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdOmNoZWNrZWQgfiBsYWJlbCAuc3ZnQ2IgLmZvbmRDYiB7XG4gICAgZmlsbDogdmFyKC0tY0Zvcm0pO1xufVxuXG4uZGl2Q2JTdXBwIGlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpjaGVja2VkIH4gbGFiZWwgLnN2Z0NiIHN2ZyAuY2hlY2tlZCBwYXRoIHtcbiAgICBmaWxsOiB2YXIoLS1jUm91Z2UpO1xufVxuXG4vKiBSYWRpbyBidXR0b24gKC5kaXZSYikgLSBTdHJ1Y3R1cmUgOiAuZGl2UmIgPiBpbnB1dCArIGxhYmVsID4gLnN2Z1JiICsgdGV4dGUgKi9cbi5kaXZSYiB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbjogOHB4IDAgNXB4O1xufVxuXG4uZGl2UmIgaW5wdXRbdHlwZT1cInJhZGlvXCJdIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgb3BhY2l0eTogMDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgd2lkdGg6IDA7XG4gICAgaGVpZ2h0OiAwO1xufVxuXG4uZGl2UmIgbGFiZWwge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLWdhcERlZmF1dCk7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIG1hcmdpbjogMDtcbn1cblxuLnN2Z1JiIHtcbiAgICB3aWR0aDogMjJweDtcbiAgICBoZWlnaHQ6IDIycHg7XG4gICAgY29sb3I6IHZhcigtLWNCbGV1NCk7XG4gICAgZmxleC1zaHJpbms6IDA7XG59XG5cbi5zdmdSYiAuY2hlY2tlZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbn1cblxuaW5wdXRbdHlwZT1cInJhZGlvXCJdOmNoZWNrZWQgfiBsYWJlbCAuc3ZnUmIgLmNoZWNrZWQge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xufVxuXG5pbnB1dFt0eXBlPVwicmFkaW9cIl06Y2hlY2tlZCB+IGxhYmVsIC5zdmdSYiAuZm9uZENiIHtcbiAgICBmaWxsOiB2YXIoLS1jRm9ybSk7XG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuI3VwbG9hZEJ0bjE6Zm9jdXMge1xuICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCB2YXIoLS1jRm9ybSk7XG59XG4qL1xuXG5pbnB1dDpmb2N1cyxcbnNlbGVjdDpmb2N1cyxcbnRleHRhcmVhOmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWNGb3JtRm9jdXMpO1xuICAgIG91dGxpbmU6IDJweCBzb2xpZCB2YXIoLS1jRm9ybUZvY3VzKTtcbn1cblxubGFiZWwgc21hbGwge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTZweCk7XG59XG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuLnJvd0Zvcm1Eb3duVHh0IHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuKi9cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4jaG9tZURpdkhhdXQge1xuICAgIHBhZGRpbmc6IDE1cHggMTVweCAxcHg7XG59XG5cbiNob21lRGl2IGJ1dHRvbi5idG4ge1xuICAgIGJvdHRvbTogNDdweDtcbn1cblxuLmZvcm11bGFpcmUgI2FjY3JvY2hlUGFnZSB7XG4gICAgbWFyZ2luLWJvdHRvbTogLTYwcHg7XG59XG5cbiNob21lRGl2QmFzIHtcbiAgICBwYWRkaW5nOiAxcHg7XG4gICAgbWFyZ2luOiBhdXRvO1xuICAgIHdpZHRoOiA4MCU7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuKi9cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4ucm93T3B0aW4xLFxuLnJvd09wdGluMixcbi5yb3dPcHRpbjMsXG4ucm93T3B0aW40IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luOiA1cHggMDtcbn1cblxuLnJvd09wdGluMSBsYWJlbCBhIHtcbiAgICBwYWRkaW5nOiAwO1xufVxuKi9cblxuXG4vKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiNkaXZGb3JtIGRpdiAjbG9hZGluZ0JhclNwaW5uZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgbWFyZ2luOiAyMHB4O1xuICAgIGZvbnQ6IHZhcigtLWZMYWJlbCk7XG4gICAgY29sb3I6IHZhcigtLWNUZXh0ZTEpO1xuICAgIHBhZGRpbmc6IDE1cHggMzBweDtcbn1cbiovXG5cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xuI3NwaW5uZXJJY29uIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgd2lkdGg6IDE4cHg7XG4gICAgaGVpZ2h0OiAxOHB4O1xuICAgIG1hcmdpbi1yaWdodDogMTBweDtcbiAgICBib3JkZXI6IHNvbGlkIDJweCB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItdG9wLWNvbG9yOiB2YXIoLS1jVGV4dGUxKTtcbiAgICBib3JkZXItbGVmdC1jb2xvcjogdmFyKC0tY1RleHRlMSk7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGFuaW1hdGlvbjogYW5pbWVTcGlubmVySWNvbiAxMDAwbXMgbGluZWFyIGluZmluaXRlO1xufVxuXG5Aa2V5ZnJhbWVzIGFuaW1lU3Bpbm5lckljb24ge1xuICAgIDAlIHtcbiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gICAgfVxuICAgIDEwMCUge1xuICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICAgIH1cbn1cbiovXG5cbi5jdGFTdXBwcmltZXIsXG4uY3RhU2Vjb25kYWlyZSxcbi5jdGFWYWxpZGVyIC8qLCAuY3RhVmFsaWRlcjIgKGludXRpbGlzw6kgMjAyNi0wNi0xMykgKi8ge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogNTBweDtcbiAgICBwYWRkaW5nOiAxMHB4IDIwcHg7XG4gICAgbWFyZ2luLXRvcDogMjBweDtcbiAgICBtYXJnaW4tYm90dG9tOiA4cHg7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZvbnQ6IHZhcigtLWZDdGExNik7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyUjEpO1xufVxuXG4uY3RhU2Vjb25kYWlyZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWNCbGV1NCk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY0JsYW5jKTtcbiAgICBjb2xvcjogdmFyKC0tY0JsZXU0KTtcbn1cblxuLmN0YVZhbGlkZXIgLyosIC5jdGFWYWxpZGVyMiAoaW51dGlsaXPDqSAyMDI2LTA2LTEzKSAqLyB7XG4gICAgYm9yZGVyOiBub25lO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGV1NGEpO1xuICAgIGNvbG9yOiB2YXIoLS1jQmxldTRhdCk7XG59XG5cbi5jdGFTdXBwcmltZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLWNCbGFuYzAzKTtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlNik7XG59XG5cbi5jdGFWYWxpZGVyOmhvdmVyIC8qLCAuY3RhVmFsaWRlcjI6aG92ZXIgKGludXRpbGlzw6kgMjAyNi0wNi0xMykgKi8ge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNCbGV1NGFoKTtcbiAgICBjb2xvcjogdmFyKC0tY0JsZXU0aHQpO1xufVxuXG4uY3RhVmFsaWRlcjpkaXNhYmxlZCxcbi8qIC5jdGFWYWxpZGVyMjpkaXNhYmxlZCwgKGludXRpbGlzw6kgMjAyNi0wNi0xMykgKi9cbi5jdGFTZWNvbmRhaXJlOmRpc2FibGVkLFxuLmN0YVN1cHByaW1lcjpkaXNhYmxlZCB7XG4gICAgb3BhY2l0eTogMC40O1xuICAgIGN1cnNvcjogd2FpdDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBmaWx0ZXI6IGdyYXlzY2FsZSgxKTtcbn1cblxuLmZvcm11bGFpcmUge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvO1xufVxuXG5AbWVkaWEgKG1pbi13aWR0aDogNjUwcHgpIHtcblxuICAgIC5mb3JtdWxhaXJlIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyO1xuICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG87XG4gICAgICAgIGdhcDogMCB2YXIoLS1nYXBMaXN0ZSk7IC8qIGFsaWduw6kgMzAgLT4gMzJweCAow6ljaGVsbGUgUE8gMjAyNi0wNy0xOCkgKi9cbiAgICB9XG5cbiAgICAvKiBpbnV0aWxpc8OpIDIwMjYtMDYtMTNcbiAgICAuZm9ybXVsYWlyZUJvcm5lIHtcbiAgICAgICAgZ3JpZC1jb2x1bW46IDEgLyAyO1xuICAgICAgICBncmlkLXJvdzogMSAvIDI7XG4gICAgfVxuXG4gICAgLmZvcm11bGFpcmVEYXRlIHtcbiAgICAgICAgZ3JpZC1jb2x1bW46IDEgLyAyO1xuICAgICAgICBncmlkLXJvdzogMiAvIDM7XG4gICAgfVxuXG4gICAgLmZvcm11bGFpcmVDb21tZXJjaWFsIHtcbiAgICAgICAgZ3JpZC1jb2x1bW46IDEgLyAyO1xuICAgICAgICBncmlkLXJvdzogMyAvIDQ7XG4gICAgfVxuXG4gICAgLmZvcm11bGFpcmVNYWdhc2luIHtcbiAgICAgICAgZ3JpZC1jb2x1bW46IDIgLyAzO1xuICAgICAgICBncmlkLXJvdzogMSAvIDU7XG4gICAgICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgfVxuICAgICovXG5cbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG5wI21lc3NhZ2VEYXRlIHtcbiAgICBjb2xvcjogdmFyKC0tY05vaXIzKTtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG5cbnAjbWVzc2FnZURhdGUuZXJyZXVyRGF0ZSxcbnAjbWVzc2FnZURhdGUyLmVycmV1ckRhdGUge1xuICAgIGNvbG9yOiB2YXIoLS1jUm91Z2UpO1xuICAgIGZvbnQtc3R5bGU6IG5vcm1hbDtcbn1cbiovXG5cbmZpZWxkc2V0IHVsIHtcbiAgICBtYXJnaW46IDAgMCAxMHB4IDA7XG59XG5cbmZpZWxkc2V0IHVsIGxpIHtcbiAgICBjb2xvcjogdmFyKC0tY1JvdWdlKTtcbn1cblxuLyogaW51dGlsaXPDqSAyMDI2LTA2LTEzXG4uaW1nQm9ybmUge1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgbWFyZ2luOiAwIGF1dG87XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG4qL1xuXG5sYWJlbC5yZXF1aXJlZCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHdpZHRoOiBtYXgtY29udGVudDtcbn1cbi8qIGludXRpbGlzw6kgMjAyNi0wNi0xM1xubGFiZWwucmVxdWlyZWQyOmFmdGVyIHtcbiAgICBjb250ZW50OiBcIipcIjtcbiAgICBtYXJnaW4tbGVmdDogM3B4O1xuICAgIGNvbG9yOiB2YXIoLS1jTm9pcjIpO1xufVxuKi9cblxudGV4dGFyZWEge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwcHg7XG4gICAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbn0iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=*/