/*!*************************************************************************************************************!*\
  !*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[1].oneOf[1].use[1]!./assets/css/style.css ***!
  \*************************************************************************************************************/
/* Globalne style dla całego dokumentu HTML */
body {
    background: #C55300 url(/build/images/kozi_lasek_tlo.08711986.jpg) repeat;
    /* 
       - Ustawia tło strony:
         - Kolor bazowy tła: #C55300 (ciemny odcień pomarańczowego, zapewniający spójność wizualną).
         - Obraz tła: ../image/kozi_lasek_tlo.jpg (ścieżka względna do pliku graficznego używanego jako tło strony).
         - Styl powtarzania: repeat (obraz będzie powtarzany w obu osiach, X i Y, wypełniając całą stronę). 
    */
}

:root {
    --kl-link-color: #4a4a40;
    --kl-link-hover-color: #4f4b1f;
    --kl-link-underline: rgba(186, 173, 139, 0.95);
    --kl-link-underline-hover: rgba(121, 121, 58, 0.92);
    --kl-link-hover-bg: rgba(186, 173, 139, 0.18);
    --kl-link-focus-ring: rgba(121, 121, 58, 0.22);
}

/* Globalne style dla elementów paragrafu (p) */
p {
    font-family: Arial, Helvetica, sans-serif;
    /*
       - Ustawia rodzinę czcionek dla tekstu w paragrafach:
         - Pierwsza preferowana czcionka: Arial (czytelna, popularna sans-serif).
         - Alternatywa: Helvetica (podobna, również sans-serif).
         - Ostatecznie: dowolna czcionka sans-serif dostępna na urządzeniu użytkownika.
    */
    
    color: #79793a;
    /*
       - Ustawia kolor tekstu w paragrafach:
         - Kolor #79793a (stonowany odcień zieleni, pasujący do motywu natury i przyjemny dla oka).
    */
}

/* Stylizacja dla elementów tabeli (table) */
table {
    color: #79793a;
    /*
       - Ustawia kolor tekstu wewnątrz tabel:
         - Kolor #79793a (stonowany odcień zieleni), spójny z kolorystyką paragrafów (`p`) i ogólną estetyką projektu.
         - Nadaje tabelom jednolity wygląd i ułatwia czytelność tekstu.
    */
}

/* Stylizacja dla klasy .text-justify */
.text-justify {
    text-align: justify;
    /*
       - Ustawia wyjustowanie tekstu w bloku:
         - Każda linia tekstu jest wyrównywana zarówno do lewej, jak i prawej krawędzi kontenera.
         - Tworzy schludny i równomierny wygląd tekstu.
    */

    line-height: 27px;
    /*
       - Ustawia wysokość linii na 27 pikseli:
         - Poprawia czytelność poprzez dodanie odpowiedniego odstępu między liniami tekstu.
         - Idealne dla dłuższych akapitów lub treści wymagających wyraźnego oddzielenia wierszy.
    */
}

/* Stylizacja dla elementów listy w klasie .social */
.social li {
    padding-top: 4px !important;
    /*
       - Dodaje górny odstęp o wartości 4 pikseli do każdego elementu listy (`<li>`) w kontenerze z klasą `.social`.
       - Zastosowanie `!important`:
         - Nadpisuje inne reguły CSS, które mogłyby wpływać na właściwość `padding-top`.
         - Zapewnia, że ta wartość odstępu zawsze będzie obowiązywać, niezależnie od innych stylów.

       Użycie tej reguły może być istotne w przypadku, gdy elementy listy w `.social` wymagają wyrównania lub wizualnego rozdzielenia.
    */
}

.gsc-control-cse, .gsc-control-cse-pl {
    background-color: #baad8b !important; /* Ustawia tło elementów wyszukiwarki Google Custom Search (`.gsc-control-cse` i `.gsc-control-cse-pl`) na kolor #baad8b (ciepły odcień beżu). */
    border: none; /* Usuwa wszelkie obramowania wokół wyszukiwarki Google Custom Search. */
    padding: 0px !important;;
    /*
        - `background-color: #baad8b !important`: Ustawia kolor tła na ciepły odcień beżu. Użycie `!important` zapewnia, że ten kolor nadpisuje inne zdefiniowane style.
        - `border: none`: Usuwa obramowania, aby uzyskać spójny wygląd komponentu w stylu strony.
        - `padding: 0px`: Usuwa marginesy 
    */
}

#content {
    margin-top: -17px; /* Przesuwa element z identyfikatorem `#content` 17 pikseli do góry. */
    min-height: 300px; /* Ustawia minimalną wysokość elementu na 300 pikseli. */
    position: relative; /* Ustawia pozycję względną, aby możliwe było osadzenie dekoracyjnej warstwy `::before`. */
    overflow: hidden; /* Ukrywa część dekoracyjnej warstwy, która wychodziłaby poza obszar głównej sekcji treści. */
    background: #FFFFFF; /* Ustawia białe tło dla elementu `#content`. */
    padding: 15px; /* Dodaje wewnętrzny odstęp (padding) 15 pikseli ze wszystkich stron. */
    font-size: 12pt; /* Ustawia rozmiar czcionki dla tekstu wewnątrz `#content` na 12 punktów. */

    /*
        - `margin-top: -17px`: Przesuwa element w górę, aby skompensować przestrzeń.
        - `min-height: 300px`: Ustawia minimalną wysokość, aby sekcja była zawsze widoczna.
        - `background: #FFFFFF`: Tworzy jasne tło dla lepszej czytelności.
        - `padding: 15px`: Dodaje przestrzeń wewnętrzną, poprawiając estetykę.
        - `font-size: 12pt`: Ustawia wygodny rozmiar czcionki do czytania.
    */
}

#content::before {
    content: "";
    position: absolute; /* Pozwala umieścić dekoracyjną warstwę niezależnie od właściwej treści. */
    right: 0; /* Zakotwicza efekt w prawym dolnym rogu sekcji. */
    bottom: 0; /* Zakotwicza efekt w prawym dolnym rogu sekcji. */
    width: 760px; /* Określa szerokość miękkiego promienia wychodzącego z rogu. */
    height: 430px; /* Określa wysokość miękkiego promienia wychodzącego z rogu. */
    pointer-events: none; /* Wyłącza interakcję z warstwą dekoracyjną. */
    background:
        radial-gradient(circle at 100% 100%, rgba(172, 172, 172, 0.24) 0 13%, rgba(172, 172, 172, 0.14) 24%, rgba(255, 255, 255, 0) 58%),
        linear-gradient(-24deg, rgba(188, 188, 188, 0.24) 0%, rgba(188, 188, 188, 0.13) 15%, rgba(255, 255, 255, 0) 42%),
        linear-gradient(-14deg, rgba(208, 208, 208, 0.18) 0%, rgba(208, 208, 208, 0.08) 18%, rgba(255, 255, 255, 0) 46%);
    z-index: 0; /* Utrzymuje dekorację pod treścią sekcji. */
    /*
        - Złożenie `radial-gradient` i dwóch `linear-gradient` daje efekt szerokiego,
          miękko rozchodzącego się promienia wychodzącego z prawego dolnego rogu.
        - Kolory są szare i półprzezroczyste, aby dodać głębi bez zmiany charakteru strony.
        - Całość szybko zanika do pełnej bieli, więc dekoracja nie konkuruje z treścią.
    */
}

#content > * {
    position: relative; /* Pozwala każdemu bezpośredniemu dziecku sekcji pozostać ponad dekoracyjnym tłem. */
    z-index: 1; /* Utrzymuje treść nad warstwą `#content::before`. */
}

.google-reviews-section .google-review-card,
.google-reviews-section .google-review-card .card-body {
    background: transparent !important; /* Usuwa białe tło z kart opinii Google, aby nie odcinały się od głównego tła sekcji. */
}

.google-reviews-section {
    color: #000; /* Utrzymuje czytelny, ciemny kolor tekstu w sekcji opinii Google. */
}

.google-reviews-section .google-review-card {
    box-shadow: none !important; /* Wyłącza cień kart opinii Google, aby sekcja była lżejsza wizualnie. */
}

.google-review-comment.is-collapsed {
    display: -webkit-box; /* Ogranicza wieloliniowy tekst komentarza do ustalonej liczby linii. */
    -webkit-box-orient: vertical; /* Ustawia pionowy kierunek układu linii, wymagany przez mechanizm `line-clamp`. */
    -webkit-line-clamp: 7; /* Przycina komentarz do 7 widocznych linii, zanim użytkownik rozwinie pełną treść. */
    overflow: hidden; /* Ukrywa nadmiar tekstu wykraczający poza ustalony limit linii. */
    /*
        - `display: -webkit-box`: Aktywuje wieloliniowe przycinanie tekstu w przeglądarkach opartych o WebKit/Blink.
        - `-webkit-box-orient`: Określa, że tekst ma układać się pionowo, linia pod linią.
        - `-webkit-line-clamp`: Ustala maksymalną liczbę linii widocznych w stanie zwiniętym.
        - `overflow: hidden`: Zapobiega wyświetlaniu dalszej części komentarza poza obszarem elementu.
    */
}

.google-review-toggle {
    padding: 0 !important; /* Utrzymuje linkowy wygląd przycisku bez dodatkowego marginesu wewnętrznego Bootstrapa. */
    margin-top: 0.35rem; /* Dodaje niewielki odstęp od treści opinii, aby przycisk nie sklejał się z tekstem. */
    border: 0; /* Usuwa standardowe obramowanie przycisku, dzięki czemu wygląda jak zwykły link. */
    background: transparent; /* Eliminuje tło, pozostawiając lekki, tekstowy charakter elementu. */
    color: var(--kl-link-color) !important; /* Ujednolica kolor z innymi linkami treściowymi w serwisie. */
    font-size: 0.95rem; /* Delikatnie zmniejsza rozmiar tekstu, aby nie dominował nad opinią. */
    font-weight: 600; /* Wyróżnia link akcji nieco mocniej niż zwykły tekst. */
    text-decoration-line: underline; /* Zachowuje klasyczny wygląd linku podkreślonego. */
    text-decoration-color: var(--kl-link-underline); /* Dopasowuje kolor podkreślenia do systemu linków strony. */
    text-decoration-thickness: 1.5px; /* Ustawia bardziej czytelne podkreślenie niż domyślne. */
    text-underline-offset: 0.18em; /* Odsuwa linię podkreślenia od liter dla lepszej czytelności. */
    border-radius: 0.35rem; /* Pozwala estetycznie pokazać efekt focus/hover wokół przycisku. */
    transition: color 0.2s ease, background-color 0.2s ease, text-decoration-color 0.2s ease, box-shadow 0.2s ease; /* Wygładza przejścia stanów interaktywnych. */
    /*
        - Blok stylizuje przycisk jako lekki link akcji zgodny z resztą linków na stronie.
        - Dzięki temu `Pokaż więcej` i `Pokaż mniej` nie wyglądają jak klasyczny przycisk formularza.
        - Zastosowane kolory i stany interaktywne bazują na zmiennych wykorzystywanych już w innych sekcjach serwisu.
    */
}

.google-review-toggle:hover,
.google-review-toggle:focus-visible {
    color: var(--kl-link-hover-color) !important; /* Zmienia kolor tekstu w stanie hover/focus na wariant aktywny. */
    background-color: var(--kl-link-hover-bg); /* Dodaje subtelne tło, które wzmacnia sygnał interakcji. */
    text-decoration-color: var(--kl-link-underline-hover); /* Aktualizuje kolor podkreślenia zgodnie ze stanem aktywnym. */
    box-shadow: 0 0 0 3px var(--kl-link-focus-ring); /* Wyświetla delikatny ring focus poprawiający dostępność z klawiatury. */
    outline: none; /* Usuwa domyślny outline przeglądarki, bo zastępuje go własny focus ring. */
    /*
        - Reguła odpowiada za spójny stan hover/focus zgodny z resztą linków treściowych.
        - Szczególnie ważny jest `focus-visible`, aby element był czytelny także przy nawigacji klawiaturą.
    */
}


@media screen and (max-width: 767px) {
    #content {
        margin-top: -34px;
    }
    /*
        - Ta reguła CSS jest aktywna tylko na urządzeniach, których szerokość ekranu wynosi 767px lub mniej (np. telefony komórkowe).
        - Ustawia margines górny elementu o id `#content` na -34px, co przesuwa ten element w górę na małych ekranach.
        - Tego typu zmiana może poprawić układ strony na urządzeniach mobilnych, dostosowując przestrzeń do specyficznych rozdzielczości.
        - Dzięki temu zawartość strony lepiej dopasowuje się do różnych rozmiarów ekranów.
    */
}

/* Kontener menu bocznego (sidebar) */
#sidebar {
    padding-right: 20%;
    /*
        - Ustawia prawe wyściółkowanie (padding) elementu o id `#sidebar` na 20%.
        - Sprawia to, że zawartość menu bocznego jest odsunięta od prawej krawędzi kontenera o 20% szerokości.
        - Może to być przydatne, gdy chcemy uzyskać przestrzeń wokół menu lub jeśli chcemy, aby menu nie przylegało bezpośrednio do prawej strony ekranu.
    */
}

/* Nagłówek h2 w menu bocznym (sidebar) */
#sidebar h2 {
    height: 40px;
    /*
        - Ustawia wysokość nagłówka (`<h2>`) w menu bocznym na 40px.
        - Zapewnia jednolitą wysokość nagłówka, co pomaga w estetycznym wyświetlaniu elementu.
    */

    background: url(/build/images/kozi_lasek_button_2.a3b3c4c1.png) no-repeat right top;
    /*
        - Ustawia tło nagłówka na obrazek (`kozi_lasek_button_2.png`).
        - Obrazek jest wyświetlany na prawej górnej krawędzi nagłówka (`right top`), co zapewnia odpowiednią estetykę i przyciąga uwagę.
        - Użycie `no-repeat` oznacza, że obrazek nie będzie powtarzany, a jedynie wyświetlony raz.
    */

    margin-bottom: 10px;
    /*
        - Ustawia dolny margines nagłówka na 10px.
        - Zapewnia przestrzeń między nagłówkiem a elementami znajdującymi się poniżej, poprawiając czytelność.
    */

    margin-left: 0px;
    /*
        - Ustawia lewy margines nagłówka na 0px, aby nagłówek nie miał dodatkowej przestrzeni z lewej strony.
        - Pozwala to na precyzyjne dopasowanie nagłówka do pozostałych elementów w menu.
    */

    margin-right: 25%;
    /*
        - Ustawia prawy margines nagłówka na 25%.
        - Zwiększa przestrzeń po prawej stronie nagłówka, aby dopasować go do szerokości menu.
        - Może to wpływać na proporcje przestrzeni w całym układzie menu.
    */

    padding: 0px 0px 20px 10px;
    /*
        - Ustawia wyściółkowanie (padding) nagłówka: 0px z góry, 0px z prawej strony, 20px z dołu i 10px z lewej strony.
        - Zwiększa przestrzeń na dole nagłówka, co może ułatwiać oddzielenie tekstu od innych elementów.
    */

    line-height: 40px;
    /*
        - Ustawia wysokość linii na 40px.
        - Zapewnia, że tekst w nagłówku będzie wyśrodkowany w pionie, dopasowując go do wysokości nagłówka.
    */

    text-transform: uppercase;
    /*
        - Konwertuje wszystkie litery w tekście nagłówka na wielkie litery.
        - Poprawia czytelność nagłówka oraz nadaje mu bardziej wyrazisty i formalny wygląd.
    */

    font-size: 15px;
    /*
        - Ustawia rozmiar czcionki na 15px.
        - Zapewnia odpowiednią wielkość tekstu, aby był on czytelny i estetyczny w nagłówku.
    */

    color: #FFFFFF;
    /*
        - Ustawia kolor tekstu nagłówka na biały (#FFFFFF).
        - Zapewnia dobry kontrast z ciemnym tłem, co poprawia widoczność i czytelność tekstu.
    */
}

/* Padding dolny dla nagłówków <h2> */
h2 {
    padding-bottom: 13px;
    /*
        - Ustawia dolny padding (wyściółkowanie) nagłówka `<h2>` na 13px.
        - Zapewnia przestrzeń poniżej nagłówka, co pomaga w oddzieleniu tekstu od elementów znajdujących się poniżej.
        - Może poprawić estetykę strony, tworząc odpowiednią odległość między nagłówkiem a innymi elementami, np. tekstem lub obrazkami.
    */
}

/* Nagłówek h1 z klasą .header */
h1.header {
    position: relative; /* Pozwala osadzić dekoracyjną linię pod nagłówkiem. */
    display: inline-block; /* Ogranicza szerokość dekoracji do szerokości samego nagłówka. */
    padding-bottom: 18px;
    /*
        - Ustawia dolny padding (wyściółkowanie) nagłówka `<h1>` z klasą `.header` na 13px.
        - Dzięki temu między nagłówkiem a następującymi po nim elementami (np. tekstem lub obrazkami) zostaje stworzona przestrzeń.
    */

    font-size: 150%;
    font-weight: 600;
    letter-spacing: 0.02em;
    color: var(--bs-heading-color); /* Fallback koloru dla przeglądarek bez wsparcia gradientu na tekście. */
    background: linear-gradient(180deg, #3a3a3a 0%, #1f1f1f 62%, #000000 100%);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    text-shadow: 0 1px 1px rgba(255, 255, 255, 0.18);
    /*
        - Zwiększa rozmiar czcionki nagłówka `<h1>` do 150% domyślnego rozmiaru czcionki.
        - Zapewnia większą widoczność nagłówka, sprawiając, że jest bardziej wyróżniający się na stronie.
        - Może być użyteczne, gdy nagłówek ma pełnić ważną rolę w treści, przyciągając uwagę odwiedzających.
    */
}

h1.header::after {
    content: "";
    position: absolute;
    left: 0;
    bottom: 4px;
    width: min(140px, 68%);
    height: 2px;
    border-radius: 999px;
    background: linear-gradient(90deg, rgba(186, 173, 139, 0.95) 0%, rgba(186, 173, 139, 0.28) 100%);
    /*
        - Krótka linia pod nagłówkiem porządkuje wizualnie sekcję bez ciężkiego podkreślenia.
        - Gradient poziomy sprawia, że dekoracja miękko zanika zamiast kończyć się ostro.
        - Szerokość ograniczona do części nagłówka utrzymuje lekki, elegancki charakter.
    */
}

/* Sekcja .sbox1 w menu bocznym */
#sidebar.sbox1 {
    margin-bottom: 50px;
    /*
        - Ustawia dolny margines (odstęp) dla elementu `#sidebar` z dodatkową klasą `.sbox1` na 50px.
        - Dzięki temu, po elemencie bocznego menu (sidebar), pojawia się przestrzeń, która oddziela go od innych elementów poniżej.
        - Jest to szczególnie użyteczne, gdy chcemy, aby menu nie było zbyt ciasno umiejscowione w stosunku do innych sekcji na stronie.
    */
}

/* Sekcja .sbox2 w menu bocznym */
#sidebar .sbox2 {
    margin-bottom: 50px;
    /*
        - Ustawia dolny margines (odstęp) dla elementu `#sidebar` z dodatkową klasą `.sbox2` na 50px.
        - To powoduje, że sekcja `sbox2` w menu bocznym ma przestrzeń poniżej, oddzielając ją od innych elementów na stronie.
        - Jest to przydatne, gdy chcemy zwiększyć odstęp pomiędzy różnymi sekcjami w obrębie sidebaru, aby poprawić estetykę i czytelność.
    */
}

/* Lista o klasie .style1 */
ul.style1 {
    margin: 10px; /* Ustawia margines (odstęp) wokół listy na 10px. */
    padding: 0px; /* Usuwa wszelkie wcięcia (padding) wewnętrzne listy. */
    list-style: none; /* Usuwa domyślny styl listy (np. punkty w przypadku listy nieuporządkowanej). */
    font-size: 12pt; /* Ustawia rozmiar czcionki dla tekstu w elementach listy na 12 punktów. */

    /*
        - `margin: 10px`: Ustawia margines wokół listy, zapewniając przestrzeń między listą a innymi elementami na stronie.
        - `padding: 0px`: Usuwa wcięcia wewnętrzne, sprawiając, że elementy listy zaczynają się bezpośrednio od krawędzi.
        - `list-style: none`: Usuwa domyślny styl listy, umożliwiając dostosowanie wyglądu listy, np. przez dodanie niestandardowych znaczników.
        - `font-size: 12pt`: Ustawia mniejszy rozmiar czcionki w liście, co sprawia, że tekst staje się mniej dominujący na stronie.
    */
}

/* Elementy listy (.style1 li) */
ul.style1 li {
    padding: 15px 0px 15px 0px; /* Ustawia wewnętrzne odstępy (padding) dla każdego elementu listy. */
    border-bottom: 1px solid #dee2e6; /* Dodaje dolną ramkę (border) o grubości 1px i kolorze #dee2e6. */

    /*
        - `padding: 15px 0px 15px 0px`: Ustawia 15px odstępu na górze i dole elementu listy, zapewniając przestrzeń wokół tekstu, bez dodatkowego odstępu po bokach.
        - `border-bottom: 1px solid #dee2e6`: Dodaje dolną ramkę o grubości 1px i bardzo jasnym szaro-niebieskim kolorze, oddzielając elementy listy i poprawiając estetykę.
    */
}

/* Ostatni element listy (.style1 li:last-child) */
ul.style1 li:last-child {
    border-bottom: 0;
    /*
        - Usuwa dolną ramkę (border-bottom) z ostatniego elementu listy.
        - Dzięki temu, ostatni element listy nie ma dodatkowej dolnej ramki, co zapewnia estetyczny wygląd i brak zbędnych linii na końcu listy.
    */
}

/* Styl dla linków w liście (.style1 a) */
ul.style1 a {
    display: block; /* Ustawia linki jako blokowe elementy, co sprawia, że wypełniają całą szerokość swojego kontenera. */
    padding: 0px 0px 0px 0px; /* Ustawia wewnętrzne marginesy (padding) na 0px z każdej strony. */
    text-decoration: none; /* Usuwa domyślną dekorację tekstu, czyli podkreślenie linku. */
    color: #79793a; /* Ustawia kolor tekstu linku na #79793a (ciemny odcień oliwkowego). */

    /*
        - `display: block`: Ustawia linki jako blokowe elementy, dzięki czemu wypełniają całą szerokość kontenera i są łatwiejsze do kliknięcia, zwłaszcza na urządzeniach mobilnych.
        - `padding: 0px 0px 0px 0px`: Ustawia zerowe odstępy od krawędzi kontenera, co eliminuje domyślne marginesy.
        - `text-decoration: none`: Usuwa podkreślenie linku, umożliwiając dodanie niestandardowego stylu, np. koloru czy efektów najechania.
        - `color: #79793a`: Ustawia kolor tekstu na ciemny oliwkowy odcień, zapewniając spójność wizualną z resztą strony.
    */
}

/* Styl dla linków w liście (.style1 a) w momencie najechania kursorem (hover) */
ul.style1 a:hover {
    text-decoration: underline;
    /*
        - Dodaje podkreślenie do linku, gdy użytkownik najedzie na niego kursorem.
        - Dzięki temu użytkownik ma wizualną informację, że link jest interaktywny i może zostać kliknięty.
    */
}

/* Styl dla linków w klasie .button-style */
.button-style a {
    display: block;
    width: 100px;
    height: 40px;
    margin-top: 30px;
    background: url(/build/images/kozi_lasek_button_1.0b656b0c.jpg) repeat;
    border-radius: 10px;
    text-align: center;
    line-height: 40px;
    text-transform: uppercase;
    font-size: 15px;
    color: #FFFFFF;
    box-shadow: none;
    transition: none;
    /*
        - `display: block` ustawia link jako blokowy element, umożliwiając pełną kontrolę nad jego wymiarami i pozycjonowaniem.
        - `width: 100px; height: 40px;` ustalają rozmiary przycisku (szerokość 100px, wysokość 40px).
        - `margin-top: 30px;` dodaje odstęp od elementu powyżej.
        - `background: url(../image/kozi_lasek_button_1.jpg) repeat;` ustawia tło przycisku, powtarzając obrazek w razie potrzeby.
        - `border-radius: 10px;` zaokrągla rogi przycisku, nadając mu bardziej nowoczesny wygląd.
        - `text-align: center;` wyrównuje tekst wewnątrz przycisku do środka.
        - `line-height: 40px;` ustawia wysokość wiersza na 40px, aby tekst był wyśrodkowany w pionie.
        - `text-transform: uppercase;` zmienia tekst na wielkie litery.
        - `font-size: 15px;` ustawia rozmiar czcionki na 15px.
        - `color: #FFFFFF;` ustawia kolor tekstu na biały, aby był dobrze widoczny na tle.
    */
}

.button-style a:hover,
.button-style a:focus-visible {
    color: #FFFFFF;
    background: url(/build/images/kozi_lasek_button_1.0b656b0c.jpg) repeat;
    outline: none;
}

/* Styl dla linków w klasie .button-style, poszerzący przycisk powrotu */
.button-style-it a {
    width: 270px !important;
    /*
        - `width: 270px;` ustalają szerokość przycisku (szerokość 270px).
    */
}

/* Usuwanie dekoracji tekstu z linków bez klasy */
a:not([class]) {
    text-decoration: none;
    /*
        - Selektor `a:not([class])` wybiera wszystkie linki (`<a>`), które nie mają przypisanej klasy.
        - `text-decoration: none;` usuwa domyślną dekorację tekstu (np. podkreślenie) z tych linków.
        - Jest to przydatne, gdy chcemy, aby linki bez klasy nie miały dekoracji, w przeciwieństwie do linków z przypisaną klasą, które mogą ją mieć (np. w stylu hover).
    */
}

/* Podkreślanie linków bez klasy po najechaniu kursorem */
a:not([class]):hover {
    text-decoration: underline;
    /*
        - Selektor `a:not([class]):hover` wybiera wszystkie linki (`<a>`), które nie mają przypisanej klasy, i które są w stanie `:hover` (najechanie kursorem).
        - `text-decoration: underline;` dodaje podkreślenie do tych linków, gdy użytkownik na nie najedzie.
        - Użycie `:hover` umożliwia interakcję z linkiem, wizualnie wskazując, że jest on aktywny lub klikniony.
    */
}

/* Linki w treści mają delikatniejszy, bardziej naturalny akcent niż domyślny bootstrapowy niebieski. */
#content :where(
    p:not(.button-style),
    li,
    td,
    .text-justify,
    .single-post-content-wrapper,
    .privacy-company-block,
    .reserve,
    .accordion-body,
    .card-body,
    .reservation-confirmation-card__row
) a:not(.btn):not(.page-link):not(.dropdown-item):not(.nav-link):not(.show-more):not([data-toggle="lightbox"]):not([data-fancybox]),
#content .single-post-content-wrapper li a:not(.btn):not(.page-link):not(.dropdown-item):not(.nav-link):not(.show-more),
#content .reserve li a:not(.btn):not(.page-link):not(.dropdown-item):not(.nav-link):not(.show-more),
#content li a:not(.btn):not(.page-link):not(.dropdown-item):not(.nav-link):not(.show-more):visited,
#content p:not(.button-style) a:not(.btn):not(.page-link):not(.dropdown-item):not(.nav-link):not(.show-more):visited,
#content .card-body a.link-secondary {
    color: var(--kl-link-color) !important;
    text-decoration-line: underline;
    text-decoration-color: var(--kl-link-underline);
    text-decoration-thickness: 1.5px;
    text-underline-offset: 0.18em;
    border-radius: 0.35rem;
    transition: color 0.2s ease, background-color 0.2s ease, text-decoration-color 0.2s ease, box-shadow 0.2s ease;
}

#content :where(
    p:not(.button-style),
    li,
    td,
    .text-justify,
    .single-post-content-wrapper,
    .privacy-company-block,
    .reserve,
    .accordion-body,
    .card-body,
    .reservation-confirmation-card__row
) a:not(.btn):not(.page-link):not(.dropdown-item):not(.nav-link):not(.show-more):not([data-toggle="lightbox"]):not([data-fancybox]):hover,
#content :where(
    p:not(.button-style),
    td,
    .text-justify,
    .single-post-content-wrapper,
    .privacy-company-block,
    .reserve,
    .accordion-body,
    .card-body,
    .reservation-confirmation-card__row
) a:not(.btn):not(.page-link):not(.dropdown-item):not(.nav-link):not(.show-more):not([data-toggle="lightbox"]):not([data-fancybox]):focus-visible,
#content .single-post-content-wrapper li a:not(.btn):not(.page-link):not(.dropdown-item):not(.nav-link):not(.show-more):hover,
#content .single-post-content-wrapper li a:not(.btn):not(.page-link):not(.dropdown-item):not(.nav-link):not(.show-more):focus-visible,
#content .reserve li a:not(.btn):not(.page-link):not(.dropdown-item):not(.nav-link):not(.show-more):hover,
#content .reserve li a:not(.btn):not(.page-link):not(.dropdown-item):not(.nav-link):not(.show-more):focus-visible,
#content .card-body a.link-secondary:hover,
#content .card-body a.link-secondary:focus-visible {
    color: var(--kl-link-hover-color) !important;
    background-color: var(--kl-link-hover-bg);
    text-decoration-color: var(--kl-link-underline-hover);
    box-shadow: 0 0 0 3px var(--kl-link-focus-ring);
    outline: none;
}

#content #sidebar a,
#content #sidebar a:visited {
    color: #79793a !important;
    text-decoration: none;
    background: transparent;
    box-shadow: none;
}

#content #sidebar a:hover,
#content #sidebar a:focus-visible {
    color: #79793a !important;
    text-decoration: underline;
    background: transparent;
    box-shadow: none;
    outline: none;
}

.reservation-step-badge {
    display: inline-flex;
    align-items: center;
    padding: 0.14rem 0.5rem 0.18rem;
    margin: 0 0.35rem 0.12rem 0;
    border: none;
    border-radius: 12px;
    background: rgba(240, 234, 222, 0.72);
    color: #77724d;
    font-family: inherit;
    font-size: 0.68rem;
    font-weight: 600;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    vertical-align: middle;
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.82);
}

.text-justify > .reservation-step-badge:first-child,
p > .reservation-step-badge:first-child {
    position: relative;
    top: -0.05rem;
}

@media (max-width: 767px) {
    .reservation-step-badge {
        display: inline-block;
        margin-bottom: 0.45rem;
    }
}

/* Stylizacja stopki (footer) */
footer {
    height: auto; /* Ustawia wysokość stopki na automatyczną, dostosowując ją do zawartości */
    padding: 15px 10px 15px 10px; /* Dodaje wewnętrzne marginesy (padding) wokół zawartości stopki */
    margin-top: -16px; /* Ustala górny margines na -16px, co może zbliżyć stopkę do elementu powyżej */
    position: relative; /* Ustawia pozycję stopki na 'relative', aby umożliwić jej przesunięcie w stosunku do innych elementów */
    width: 100%; /* Ustawia szerokość stopki na 100% szerokości dostępnego kontenera */
    color: #fff; /* Ustawia kolor tekstu na biały */
    border-bottom: 1px solid #CCCCCC; /* Dodaje dolną ramkę o kolorze #CCCCCC */
    border-top: 1px solid #DDDDDD; /* Dodaje górną ramkę o kolorze #DDDDDD */
    background: #baad8b; /* Fallback koloru dla starszych przeglądarek */
    background: linear-gradient(180deg, #d0c0a4 0%, #c0b08f 38%, #b29f7d 100%);
    background: -webkit-linear-gradient(top, #d0c0a4 0%, #c0b08f 38%, #b29f7d 100%);
    /*
        - Użycie `-webkit-linear-gradient` zapewnia kompatybilność z przeglądarkami wykorzystującymi silnik Webkit (np. Safari).
        - Gradient jest tutaj bardzo subtelny, ponieważ przechodzi tylko między dwoma identycznymi kolorami.
        - Może to być użyteczne dla uzyskania efektu "wygładzenia" lub jako przygotowanie na późniejsze zmiany kolorów.
    */
}

/* Dolna sekcja formalna stopki */
.footer-legal-section {
    border-top: 1px solid #BAC1C8; /* Ten sam kolor co h3 */
    margin-top: 10px; /* Oddzielenie od kolumn */
    padding: 20px 0; /* Symetryczny oddech */
}

.footer-legal-branding {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 10px;
    padding-right: 12px;
    /*
        - `display: flex` + `flex-direction: column` – układa napis i logo pionowo, jedno pod drugim.
        - `align-items: flex-end` – na dużych ekranach cała prawa sekcja przylega estetycznie do prawej krawędzi.
        - `gap: 10px` – utrzymuje subtelny odstęp między linią copyright a znakiem graficznym.
        - `padding-right: 12px` – daje lekki „oddech” od prawej krawędzi kontenera.
    */
}

.footer-legal-logo-desktop-wrap {
    align-items: center;
    justify-content: center;
    /*
        - `align-items: center` – centruje logo w osi pionowej względem sąsiednich kolumn.
        - `justify-content: center` – ustawia znak dokładnie pośrodku środkowej kolumny stopki.
    */
}

.footer-legal-copy {
    display: inline-flex;
    align-items: center;
    justify-content: flex-end;
    gap: 0.35rem;
    max-width: 100%;
    white-space: nowrap;
    font-size: 0.875rem;
    line-height: 1.2;
    /*
        - `display: inline-flex` – pozwala precyzyjnie kontrolować układ tekstu, separatora i linku.
        - `align-items: center` – wyrównuje elementy linii do wspólnej osi pionowej.
        - `justify-content: flex-end` – na desktopie linia domyślnie trzyma się prawej strony.
        - `gap: 0.35rem` – utrzymuje mały, elegancki odstęp pomiędzy segmentami tekstu.
        - `max-width: 100%` – chroni blok przed wychodzeniem poza szerokość rodzica.
        - `white-space: nowrap` – utrzymuje napis w jednym wierszu, jeśli tylko szerokość na to pozwala.
        - `font-size: 0.875rem` – delikatnie zmniejszony tekst pasujący do charakteru sekcji formalnej.
        - `line-height: 1.2` – zwarta wysokość linii poprawia optyczne wyrównanie.
    */
}

.footer-legal-copy-text,
.footer-legal-copy a,
.footer-legal-copy-separator {
    white-space: nowrap;
    flex: 0 0 auto;
    /*
        - `white-space: nowrap` – każdy segment pozostaje nierozbijalny, co zapobiega przypadkowym złamaniom.
        - `flex: 0 0 auto` – elementy zachowują swoją naturalną szerokość i nie są ściskane przez Flexbox.
    */
}

.footer-legal-copy a {
    display: inline-block;
    /*
        - `display: inline-block` – link zachowuje się stabilniej w układzie flex niż czysty inline.
    */
}

.footer-legal-logo {
    width: min(220px, 100%);
    height: auto;
    opacity: 0.6;
    filter: brightness(0) invert(1) drop-shadow(0 1px 2px rgba(0, 0, 0, 0.16));
    pointer-events: none;
    /*
        - `width: min(220px, 100%)` – logo ma kontrolowany, subtelny rozmiar i nie wychodzi poza kolumnę.
        - `height: auto` – zachowuje proporcje znaku niezależnie od szerokości.
        - `opacity: 0.6` – osłabia kontrast, dzięki czemu grafika jest dekoracyjna, a nie dominująca.
        - `filter: brightness(0) invert(1) ...` – zamienia ciemny rysunek na białą wersję i dodaje miękki cień.
        - `pointer-events: none` – znak jest całkowicie nieinteraktywny i nie zakłóca obsługi kursora.
    */
}

@media (max-width: 991.98px) {
    .footer-legal-branding {
        align-items: flex-start;
        text-align: left;
        padding-right: 0;
        margin-top: 18px;
        /*
            - Na mobile prawa sekcja przechodzi do układu wyrównanego do lewej.
            - `padding-right: 0` usuwa zbędny odstęp od prawej krawędzi.
            - `margin-top: 18px` oddziela ten blok od poprzedniej części po złożeniu kolumn.
        */
    }

    .footer-legal-copy {
        justify-content: flex-start;
        font-size: clamp(0.62rem, 2.05vw, 0.82rem);
        /*
            - `justify-content: flex-start` – napis zaczyna się od lewej, zgodnie z mobilnym rytmem stopki.
            - `font-size: clamp(...)` – delikatnie skaluje tekst na małych ekranach, by uniknąć przepełnienia.
        */
    }
}

@media (min-width: 992px) and (max-width: 1199.98px) {
    .footer-legal-branding {
        align-items: center;
        text-align: center;
        padding-right: 0;
        margin-top: 18px;
        /*
            - W średnim zakresie szerokości prawa kolumna schodzi niżej i centruje zawartość.
            - To eliminuje problem ścisku występujący przed pełnym układem desktopowym `xl`.
        */
    }

    .footer-legal-copy {
        justify-content: center;
        font-size: 0.78rem;
        /*
            - `justify-content: center` – linia copyright jest optycznie wyśrodkowana w dostępnej szerokości.
            - `font-size: 0.78rem` – lekko zmniejszony rozmiar poprawia stabilność układu w tym przedziale.
        */
    }
}

@media (min-width: 1200px) and (max-width: 1399.98px) {
    .footer-legal-copy {
        font-size: 0.78rem;
        /*
            - W węższym desktopie delikatnie redukujemy rozmiar linii prawnej,
              aby zachować jednowierszowy zapis bez utraty estetyki.
        */
    }
}

/*
    - border-top: identyczny kolor jak pod nagłówkami (spójność wizualna)
    - margin-top: tworzy wyraźny podział sekcji
    - padding: nadaje elegancki rytm pionowy
*/

/* Stylizacja elementów formularza: grupy wejściowe, pola tekstowe i elementy związane z grupami wejściowymi */
.input-group, input, textarea, 
.input-group-text {
    margin-bottom: 4px; /* Dodaje margines dolny o wysokości 4px, oddzielając elementy od innych składników formularza */
    /*
        - `input` odnosi się do pól tekstowych (np. pola formularza).
        - `textarea` odnosi się do pól wieloliniowych (np. pole do wprowadzania tekstu w wielu liniach).
        - `.input-group` i `.input-group-text` odnoszą się do grupy elementów, takich jak etykiety lub przyciski w obrębie elementu `input` w Bootstrapie.
        - Dodanie tego marginesu zapewnia przestrzeń między elementami formularza, co poprawia czytelność i estetykę.
    */
}

/* Stylizacja nagłówka h3 w stopce */
.footer h3 {
    border-bottom: 1px solid #BAC1C8; /* Dodaje dolne obramowanie o grubości 1px i kolorze #BAC1C8, co oddziela nagłówek od reszty treści */
    color: #fff; /* Ustawia kolor tekstu na biały */
    font-size: 18px; /* Określa rozmiar czcionki na 18px */
    font-weight: 600; /* Ustala wagę czcionki na 600, co sprawia, że tekst jest pogrubiony */
    line-height: 27px; /* Ustala wysokość linii na 27px, co poprawia czytelność tekstu */
    padding: 20px 0 10px; /* Dodaje przestrzeń wewnętrzną (padding) wokół tekstu: 20px na górze, 0px z lewej i prawej, 10px na dole */
    text-transform: uppercase; /* Przekształca wszystkie litery na wielkie litery */
    /*
        - `border-bottom`: służy do wyróżnienia nagłówka w stopce, tworząc wyraźną linię oddzielającą go od innych sekcji.
        - `color: #fff`: zapewnia, że tekst będzie biały, co kontrastuje z tłem stopki.
        - `font-size`, `font-weight`, `line-height`: określają typografię nagłówka, co czyni go wyraźnym i dobrze widocznym.
        - `padding`: zapewnia przestrzeń wokół tekstu, dzięki czemu nagłówek nie jest zbyt blisko innych elementów.
    */
}

/* Stylizacja listy w stopce */
.footer ul {
    font-size: 13px; /* Określa rozmiar czcionki na 13px, co zapewnia odpowiednią wielkość tekstu w stopce */
    list-style-type: none; /* Usuwa domyślny styl punktów listy, dzięki czemu lista jest wyświetlana bez symboli (bullet points) */
    margin-left: 0; /* Usuwa lewy margines, zapewniając, że lista zaczyna się bezpośrednio od krawędzi */
    padding-left: 0; /* Usuwa lewy padding, co również pomaga wyrównać listę do krawędzi */
    margin-top: 15px; /* Dodaje margines od góry, aby lista miała odstęp od poprzedzających elementów */
    color: #fff; /* Ustawia kolor tekstu linków na biały */
    /*
        - `font-size`: dostosowuje rozmiar tekstu, aby pasował do ogólnego stylu stopki.
        - `list-style-type: none`: powoduje, że lista nie ma domyślnych punktów, co sprawia, że jest bardziej minimalistyczna.
        - `margin-left` i `padding-left`: usuwają wszelkie domyślne wcięcia, co sprawia, że lista jest wyrównana do lewej krawędzi.
        - `margin-top`: dodaje przestrzeń nad listą, zapewniając jej oddzielenie od innych elementów.
        - `color`: wybór koloru szarości, który zapewnia subtelny kontrast i łatwą czytelność na tle stopki.
    */
}

/* Stylizacja linków w liście w stopce */
.footer ul li a {
    padding: 0 0 5px 0; /* Ustawia dolny padding na 5px, co daje przestrzeń poniżej każdego linku */
    display: block; /* Ustawia linki jako elementy blokowe, dzięki czemu zajmują całą dostępną szerokość */
    /*
        - `padding`: określa wewnętrzny margines. W tym przypadku stosowany tylko do dolnej części, dodając przestrzeń między kolejnymi linkami.
        - `display: block`: sprawia, że linki stają się elementami blokowymi, co pozwala na łatwiejsze kontrolowanie ich rozmiarów i odstępów.
    */
}


/* Stylizacja linków w stopce */
.footer a {
    color: #fff; /* Ustawia kolor tekstu linków na biały */
    /*
        - `color`: Określa kolor tekstu dla linków wewnątrz stopki.
        - Wartość `#fff` oznacza biały kolor, co zapewnia kontrast w przypadku ciemniejszego tła stopki.
    */
}

/* Stylizacja nagłówka (h4) w elementach listy wsparcia */
.supportLi h4 {
    font-size: 20px; /* Określa rozmiar czcionki na 20px, co sprawia, że nagłówek będzie wyraźnie widoczny */
    font-weight: lighter; /* Ustawia wagę czcionki na 'lighter', co sprawia, że tekst będzie cieńszy niż standardowy */
    line-height: normal; /* Ustawia wysokość linii na 'normal', co pozwala na odpowiednie oddzielenie linii tekstu */
    margin-bottom: 0 !important; /* Ustawia margines dolny na 0, wymuszając brak odstępu poniżej nagłówka */
    padding-bottom: 0; /* Usuwa padding dolny, eliminując wewnętrzny odstęp poniżej nagłówka */
    /*
        - `font-size`: Ustawia rozmiar czcionki na 20px, co zapewnia odpowiednią widoczność tekstu nagłówka.
        - `font-weight`: Określa grubość czcionki. `lighter` sprawia, że tekst nagłówka będzie cieńszy niż standardowy.
        - `line-height`: Ustawia wysokość linii na wartość domyślną, co wpływa na czytelność nagłówka poprzez odpowiednią przestrzeń między wierszami.
        - `margin-bottom`: Ustawia margines dolny na 0, co eliminuje przestrzeń między nagłówkiem a następnymi elementami w liście.
        - `!important`: Wymusza zastosowanie tej reguły, nawet jeśli inne reguły CSS mogłyby ustawić inny margines.
        - `padding-bottom`: Ustawia padding na 0, co eliminuje wewnętrzną przestrzeń poniżej nagłówka.
    */
}

.quote {
    font-size: 90%; /* Ustawia rozmiar czcionki na 90% domyślnej wielkości, co sprawia, że tekst będzie nieco mniejszy */
    font-style: italic; /* Ustawia styl czcionki na kursywę, co wyróżnia tekst jako cytat */
    color: #606060; /* Ustawia kolor tekstu na szary (#606060), co zapewnia subtelną widoczność bez nadmiernego kontrastu */
    /*
        - `font-size`: Ustawia rozmiar czcionki na 90% domyślnej wielkości, co sprawia, że tekst będzie nieco mniejszy.
        - `font-style`: Ustawia styl czcionki na kursywę, co wyróżnia tekst jako cytat.
        - `color`: Wybór szarego koloru tekstu, który zapewnia subtelny kontrast, idealny do cytatów.
    */
}

.subscribe-btn .btn {
    border: medium none; /* Usuwa obramowanie przycisku, aby pozostał bez ramki */
    border-radius: 4px; /* Zaokrągla rogi przycisku o 4px, nadając mu łagodniejszy wygląd */
    display: inline-block; /* Ustawia element jako inline-block, co pozwala na stosowanie szerokości i wysokości */
    height: 40px; /* Ustawia wysokość przycisku na 40px */
    padding: 0; /* Usuwa padding, aby przycisk nie miał wewnętrznych odstępów */
    width: 100%; /* Ustawia szerokość przycisku na 100% dostępnej szerokości kontenera */
    color: #fff; /* Ustawia kolor tekstu przycisku na biały */
    margin-top: 10px; /* Dodaje margines od góry, aby przycisk miał odstęp od innych elementów */
    /*
        - `border`: Usuwa obramowanie przycisku, aby pozostał bez ramki.
        - `border-radius`: Zaokrągla rogi przycisku o 4px, nadając mu łagodniejszy wygląd.
        - `display`: Ustawia element jako inline-block, co pozwala na stosowanie szerokości i wysokości.
        - `height`: Ustawia wysokość przycisku na 40px, co wpływa na jego proporcje.
        - `padding`: Usuwa padding, aby przycisk nie miał wewnętrznych odstępów.
        - `width`: Ustawia szerokość przycisku na 100%, co sprawia, że przycisk rozciąga się na całą szerokość kontenera.
        - `color`: Ustawia kolor tekstu przycisku na biały, co zapewnia dobrą widoczność na ciemnym tle.
        - `margin-top`: Dodaje przestrzeń nad przyciskiem, zapewniając oddzielenie go od innych elementów.
    */
}

.subscribe-btn {
    overflow: hidden; /* Ukrywa zawartość, która wychodzi poza granice elementu, zapobiegając wyświetlaniu nadmiarowego tekstu lub obrazków */
    /*
        - `overflow`: Ustawia, aby nadmiarowa zawartość, która nie mieści się w obrębie elementu, była ukryta, co zapobiega jej wyświetlaniu poza kontenerem.
    */
}

.social li {
    border: 2px solid #B5B5B5; /* Ustawia obramowanie o grubości 2px i kolorze #B5B5B5 dla elementów listy */
    -webkit-border-radius: 50%; /* Ustawia zaokrąglenie narożników na 50% w przeglądarkach WebKit (np. Chrome, Safari) */
    -moz-border-radius: 50%; /* Ustawia zaokrąglenie narożników na 50% w przeglądarkach Mozilla (np. Firefox) */
    -o-border-radius: 50%; /* Ustawia zaokrąglenie narożników na 50% w starszych wersjach przeglądarek Opera */
    -ms-border-radius: 50%; /* Ustawia zaokrąglenie narożników na 50% w przeglądarkach Microsoft (np. IE) */
    border-radius: 50%; /* Ustawia zaokrąglenie narożników na 50%, tworząc okrągły kształt elementu */
    float: left; /* Ustawia elementy listy, aby pływały po lewej stronie, umożliwiając je wyświetlanie obok siebie */
    height: 36px; /* Ustawia wysokość elementu na 36px */
    line-height: 36px; /* Ustawia wysokość linii na 36px, co wyrównuje tekst pionowo w elemencie */
    margin: 0 8px 0 0; /* Dodaje margines 8px z prawej strony, eliminując margines górny, dolny i lewy */
    padding: 0; /* Usuwa wewnętrzny odstęp w elemencie */
    text-align: center; /* Ustawia wyrównanie tekstu na środek, co sprawia, że tekst będzie centrowany w elemencie */
    width: 36px; /* Ustawia szerokość elementu na 36px */
    transition: all 0.5s ease 0s; /* Ustawia animację dla wszystkich właściwości CSS, trwającą 0.5 sekundy z łagodnym przejściem */
    -moz-transition: all 0.5s ease 0s; /* Ustawia animację dla właściwości CSS w przeglądarkach Mozilla */
    -webkit-transition: all 0.5s ease 0s; /* Ustawia animację dla właściwości CSS w przeglądarkach WebKit */
    -ms-transition: all 0.5s ease 0s; /* Ustawia animację dla właściwości CSS w przeglądarkach Microsoft */
    -o-transition: all 0.5s ease 0s; /* Ustawia animację dla właściwości CSS w starszych wersjach przeglądarek Opera */
    /*
        - `border`: Określa grubość i kolor obramowania elementów listy.
        - `border-radius`: Zaokrągla narożniki elementu, tworząc okrągły kształt.
        - `float`: Ustawia elementy na lewo, umożliwiając ich układ obok siebie.
        - `height` i `line-height`: Ustawiają wysokość elementu i wysokość linii, wyrównując tekst w pionie.
        - `margin`: Ustawia odstęp z prawej strony, eliminując marginesy z innych stron.
        - `padding`: Usuwa wszelkie wewnętrzne odstępy.
        - `text-align`: Ustawia tekst w elemencie na środek.
        - `width`: Określa szerokość elementu na 36px, co wpływa na jego proporcje.
        - `transition`: Ustawia animację dla wszystkich właściwości CSS, co pozwala na płynne przejścia przy zmianie stanu elementu.
    */
}

.social li a {
    color: #EDEFF1; /* Ustawia kolor tekstu linku na jasny odcień szarości (#EDEFF1), co zapewnia subtelną widoczność na ciemniejszych tłach */
    /*
        - `color`: Określa kolor tekstu w linkach wewnątrz elementów listy. Użyty kolor (#EDEFF1) zapewnia subtelną, jasną barwę, dobrze kontrastującą z ciemniejszym tłem.
    */
}

.social li:hover {
    border: 2px solid #2c3e50; /* Ustawia obramowanie o grubości 2px i kolorze #2c3e50 (ciemny odcień granatu) podczas najechania kursorem */
    background: #2c3e50; /* Ustawia tło na kolor #2c3e50 (ciemny granat) podczas najechania kursorem */
    /*
        - `border`: Zmienia obramowanie na 2px z kolorem #2c3e50, tworząc wyraźny efekt obramowania podczas najechania kursorem.
        - `background`: Ustawia tło na kolor #2c3e50, co powoduje, że element nabiera ciemniejszego odcienia podczas interakcji użytkownika.
    */
}

.social li a i {
    font-size: 16px; /* Ustawia rozmiar czcionki ikonki na 16px, co zapewnia odpowiednią wielkość ikony w linku */
    margin: 0 0 0 5px; /* Dodaje margines 5px po lewej stronie ikony, aby oddzielić ją od tekstu lub innych elementów */
    color: #EDEFF1 !important; /* Ustawia kolor ikony na jasny odcień szarości (#EDEFF1), wymuszając zastosowanie tej reguły przez `!important` */
    /*
        - `font-size`: Określa wielkość czcionki ikony, która jest wyświetlana w linku.
        - `margin`: Dodaje przestrzeń po lewej stronie ikony, co poprawia jej wyrównanie z innymi elementami w linku.
        - `color`: Ustawia kolor ikony na jasny odcień szarości (#EDEFF1), używając `!important`, aby wymusić stosowanie tej reguły, nawet jeśli inne style ją nadpisują.
    */
}

.footer-bottom {
    background: #40E0D0; /* Ustawia tło na jednolity kolor #40E0D0 (turkusowy) jako domyślny kolor tła */
    background: -webkit-linear-gradient(to right, #FF0080, #FF8C00, #40E0D0); /* Definiuje tło w postaci gradientu z prawej do lewej: różowy (#FF0080), pomarańczowy (#FF8C00), turkusowy (#40E0D0) dla przeglądarek obsługujących -webkit */
    background: linear-gradient(to right, #FF0080, #FF8C00, #40E0D0); /* Definiuje tło w postaci gradientu z prawej do lewej: różowy (#FF0080), pomarańczowy (#FF8C00), turkusowy (#40E0D0) */
    border-top: 1px solid #DDDDDD; /* Ustawia górne obramowanie na 1px w kolorze szarości (#DDDDDD), tworząc subtelne oddzielenie sekcji */
    padding-top: 20px; /* Dodaje przestrzeń 20px od góry, aby zapewnić odpowiednią odległość od innych elementów */
    padding-bottom: 40px; /* Dodaje przestrzeń 40px od dołu, aby zapewnić większy odstęp na dole sekcji */
    color: #fff; /* Ustawia kolor tekstu na biały (#fff), zapewniając dobry kontrast z ciemnym tłem */
    /*
        - `background`: Definiuje tło w postaci jednolitego koloru lub gradientu. Gradient przechodzi z różowego przez pomarańczowy do turkusowego.
        - `border-top`: Tworzy cienką linię oddzielającą ten element od poprzedzających go sekcji.
        - `padding-top` i `padding-bottom`: Zapewniają odpowiednią przestrzeń wewnętrzną, tworząc przestrzeń między treścią a krawędziami sekcji.
        - `color`: Ustawia kolor tekstu na biały, co zapewnia wysoki kontrast i lepszą czytelność na tle gradientu.
    */
}

.footer-bottom p.pull-left {
    padding-top: 6px; /* Dodaje 6px przestrzeni od góry dla paragrafu z klasą 'pull-left', co zapewnia odpowiednią odległość od poprzedzających elementów */
    /*
        - `padding-top`: Ustawia przestrzeń 6px od góry, aby zapewnić wyrównanie z innymi elementami w sekcji stopki.
    */
}

.payments {
    font-size: 1.5em; /* Ustawia rozmiar czcionki na 1.5em, co sprawia, że tekst będzie 1.5 razy większy niż rozmiar czcionki elementu nadrzędnego */
    /*
        - `font-size`: Ustawia rozmiar czcionki na 1.5em, co sprawia, że tekst w elemencie `.payments` będzie większy w porównaniu do domyślnego rozmiaru tekstu w jego kontenerze.
    */
}

.map-container {
    overflow: hidden; /* Ukrywa zawartość wychodzącą poza kontener, zapewniając, że mapa będzie dobrze dopasowana do kontenera */
    padding-bottom: 56.25%; /* Ustawia dolny padding na 56.25%, co pozwala na zachowanie proporcji 16:9 dla mapy */
    position: relative; /* Ustawia pozycję elementu na 'relative', co pozwala na kontrolowanie pozycjonowania elementów wewnętrznych względem tego kontenera */
    height: 0; /* Ustawia wysokość na 0, ponieważ wysokość jest kontrolowana przez padding-bottom, co utrzymuje proporcje */
    /*
        - `overflow: hidden`: Ukrywa zawartość wychodzącą poza wymiary kontenera, zapobiegając przewijaniu mapy.
        - `padding-bottom`: Ustawia padding, który odpowiada za proporcje mapy (56.25% odpowiada proporcji 16:9).
        - `position: relative`: Umożliwia pozycjonowanie elementów wewnętrznych względem kontenera, zachowując kontrolę nad układem.
        - `height: 0`: Ustawia wysokość na 0, ponieważ jest ona uzależniona od paddingu, co pozwala na uzyskanie odpowiednich proporcji w przypadku mapy.
    */
}

.map-container iframe {
    left: 0; /* Ustawia pozycję iframe na lewą krawędź kontenera .map-container */
    top: 0; /* Ustawia pozycję iframe na górną krawędź kontenera .map-container */
    height: 100%; /* Ustawia wysokość iframe na 100% wysokości kontenera .map-container */
    width: 100%; /* Ustawia szerokość iframe na 100% szerokości kontenera .map-container */
    position: absolute; /* Ustawia pozycję iframe na 'absolute', co umożliwia precyzyjne umiejscowienie wewnątrz kontenera .map-container */
    /*
        - `left` i `top`: Ustawiają pozycję iframe na górny lewy róg kontenera, co sprawia, że iframe zaczyna się od tego punktu.
        - `height` i `width`: Ustawiają wymiary iframe na 100% szerokości i wysokości kontenera, co sprawia, że iframe wypełnia cały dostępny obszar.
        - `position: absolute`: Pozycjonuje iframe względem najbliższego elementu z pozycją różną od `static` (w tym przypadku kontener .map-container).
    */
}

/* Sekcja formularzy */
form label.error {
    padding-top: 5px; /* Dodaje 5px przestrzeni od góry, aby etykieta z błędem miała odpowiedni odstęp od innych elementów */
    color: red; /* Ustawia kolor tekstu na czerwony, aby wyróżnić błąd */
    display: block; /* Ustawia etykietę jako blokowy element, co zapewnia, że będzie zajmować pełną szerokość i zaczynać się w nowej linii */
    font-size: 10pt; /* Ustawia rozmiar czcionki na 10pt, co sprawia, że tekst z błędem jest mniejszy niż domyślny tekst formularza */
    /*
        - `padding-top`: Dodaje przestrzeń 5px od góry, aby etykieta z błędem miała odstęp od innych elementów formularza.
        - `color`: Ustawia kolor tekstu na czerwony, co umożliwia łatwe zauważenie komunikatu o błędzie.
        - `display: block`: Ustawia wyświetlanie etykiety jako element blokowy, co sprawia, że zaczyna się ona w nowej linii i ma pełną szerokość.
        - `font-size`: Określa rozmiar czcionki na 10pt, co sprawia, że tekst jest mniejszy niż standardowy tekst w formularzu, ale nadal widoczny.
    */
}

.invalid-feedback {
    padding-top: 5px; /* Dodaje 5px przestrzeni od góry, aby komunikat o błędzie miał odpowiedni odstęp od innych elementów */
    color: red; /* Ustawia kolor tekstu na czerwony, aby wyróżnić wiadomość o błędzie */
    display: block; /* Ustawia element jako blokowy, co sprawia, że będzie zajmować pełną szerokość i zaczynać się w nowej linii */
    font-size: 10pt; /* Ustawia rozmiar czcionki na 10pt, co sprawia, że tekst błędu jest mniejszy niż standardowy tekst */
    /*
        - `padding-top`: Dodaje przestrzeń 5px od góry, aby komunikat o błędzie miał przestrzeń w stosunku do innych elementów.
        - `color`: Ustawia czerwony kolor tekstu, co zapewnia, że komunikat o błędzie jest łatwy do zauważenia.
        - `display: block`: Ustawia wyświetlanie elementu jako blokowego, co zapewnia pełną szerokość i zaczyna nową linię.
        - `font-size`: Określa rozmiar czcionki na 10pt, co sprawia, że tekst jest wyraźny, ale nie dominujący w formularzu.
    */
}

.form-group {
    padding-top: 15px; /* Dodaje przestrzeń 15px od góry, aby zapewnić odpowiedni odstęp między grupą pól formularza a innymi elementami */
    /*
        - `padding-top`: Wprowadza 15px przestrzeni od góry, co poprawia czytelność formularza i zapewnia odpowiednią separację między elementami.
    */
}

td > .form-group {
    padding: 0px; /* Usuwa wewnętrzny odstęp (padding) w grupie formularzy w komórkach tabeli, co pozwala na pełne dopasowanie elementów do szerokości komórki */
    /*
        - `padding`: Ustawia padding na 0, co eliminuje wewnętrzne marginesy w grupie formularzy, zapewniając, że elementy w tabeli będą bardziej zwarty.
    */
}

.reserve {
    font-size: 12px; /* Ustawia rozmiar czcionki na 12px, co sprawia, że tekst w elemencie będzie mniejszy niż standardowy */
    text-align: justify; /* Wyrównuje tekst do obu krawędzi, co sprawia, że linie tekstu będą rozciągnięte, a tekst równomiernie wypełni całą szerokość elementu */
    /*
        - `font-size`: Określa rozmiar czcionki na 12px, co zapewnia, że tekst będzie wyraźny, ale mniejszy niż domyślny tekst w elemencie.
        - `text-align`: Wyrównuje tekst do lewej i prawej krawędzi, co tworzy równą szerokość linii tekstu w elemencie.
    */
}

/* Wybór dostępnych pokoi w pierwszym kroku rezerwacji. */
.reservation-availability {
    margin-top: 1.25rem;
}

/* Komunikat wspólny dla ładowania, braku pokoi i błędu połączenia. */
.reservation-availability-status {
    margin-top: 0.75rem;
    padding: 0.9rem 1rem;
    border: 1px solid rgba(121, 121, 58, 0.28);
    border-radius: 0.6rem;
    background: rgba(186, 173, 139, 0.12);
    color: #3f3b31;
}

.reservation-availability-status.is-loading::before {
    display: inline-block;
    width: 1rem;
    height: 1rem;
    margin-right: 0.55rem;
    border: 2px solid rgba(121, 121, 58, 0.28);
    border-top-color: #79793a;
    border-radius: 50%;
    vertical-align: -0.15rem;
    content: "";
    animation: reservation-availability-spin 0.8s linear infinite;
}

.reservation-availability-status.is-error {
    border-color: rgba(153, 63, 45, 0.3);
    background: rgba(153, 63, 45, 0.08);
    color: #71382d;
}

/* Brak pokoi jest pełnym stanem biznesowym, dlatego otrzymuje własną kartę zamiast alertu technicznego. */
.reservation-availability-status.is-empty {
    padding: 0;
    border: 0;
    background: transparent;
}

.reservation-empty-card {
    overflow: hidden;
    border: 1px solid rgba(121, 121, 58, 0.24);
    border-radius: 1rem;
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.96) 0%, rgba(245, 241, 231, 0.96) 100%);
    box-shadow:
        0 8px 20px rgba(79, 75, 31, 0.08),
        inset 0 1px 0 rgba(255, 255, 255, 0.72);
}

.reservation-empty-card__heading {
    padding: 0.85rem 1rem 0.75rem;
    border-bottom: 1px solid rgba(121, 121, 58, 0.2);
    background: linear-gradient(180deg, #fffaf1 0%, #f7eddc 100%);
    color: #5a3d12;
    font-family: Georgia, "Times New Roman", serif;
    font-size: 1.16rem;
    font-weight: 700;
    line-height: 1.25;
}

.reservation-empty-card__body {
    padding: 1rem;
}

.reservation-empty-card__body p {
    margin: 0;
    color: #55462f;
    line-height: 1.5;
}

.reservation-empty-card__instruction {
    padding: 0.7rem 0.85rem;
    border: 1px solid rgba(143, 168, 120, 0.34);
    border-left: 4px solid #8fa878;
    border-radius: 0.65rem;
    background: rgba(244, 249, 239, 0.82);
    color: #4d452f !important;
    font-weight: 700;
}

.reservation-empty-card__contact {
    margin-top: 0.75rem !important;
    padding-top: 0.75rem;
    border-top: 1px solid rgba(121, 121, 58, 0.15);
}

#content .reservation-empty-card__phone {
    color: #4f4b1f;
    font-weight: 700;
    white-space: nowrap;
}

.reservation-room-legend {
    margin: 1rem 0 0.75rem;
    font-weight: 600;
    color: #343126;
}

/* Dwie kolumny na większych ekranach; układ mobilny jest zdefiniowany niżej. */
.reservation-room-grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 0.85rem;
}

/* Przy nieparzystej liczbie pokoi ostatnia karta zachowuje szerokość kolumny i jest wyśrodkowana. */
.reservation-room-grid > .reservation-room-card:last-child:nth-child(odd) {
    grid-column: 1 / -1;
    justify-self: center;
    width: calc((100% - 0.85rem) / 2);
}

/* Podstawowy wygląd karty nawiązuje do piaskowej palety Asystenta Rezerwacji. */
label.reservation-room-card {
    position: relative;
    display: block;
    min-height: 100%;
    padding: 0 3rem 1rem 1rem;
    overflow: hidden;
    border: 1px solid rgba(121, 121, 58, 0.24);
    border-radius: 1rem;
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.96) 0%, rgba(245, 241, 231, 0.96) 100%);
    box-shadow:
        0 8px 20px rgba(79, 75, 31, 0.08),
        inset 0 1px 0 rgba(255, 255, 255, 0.72);
    cursor: pointer;
    transition: border-color 0.18s ease, background-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease;
}

label.reservation-room-card:hover {
    border-color: rgba(121, 121, 58, 0.48);
    box-shadow:
        0 11px 24px rgba(79, 75, 31, 0.12),
        inset 0 1px 0 rgba(255, 255, 255, 0.78);
    transform: translateY(-1px);
}

/* Pionowy pasek jest osobnym znacznikiem wyboru i przechodzi również przez nagłówek. */
label.reservation-room-card::before {
    position: absolute;
    z-index: 1;
    top: 0;
    bottom: 0;
    left: 0;
    width: 5px;
    background: #8fa878;
    content: "";
    opacity: 0;
    transition: opacity 0.16s ease;
}

/* Zaznaczenie zmienia geometrię obramowania, bez zalewania całej karty kolejnym kolorem. */
label.reservation-room-card.is-selected,
label.reservation-room-card:has(.reservation-room-card__checkbox:checked) {
    border-color: #8fa878;
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.96) 0%, rgba(245, 241, 231, 0.96) 100%);
    box-shadow:
        0 0 0 2px rgba(143, 168, 120, 0.2),
        0 10px 22px rgba(79, 75, 31, 0.11);
}

label.reservation-room-card.is-selected::before,
label.reservation-room-card:has(.reservation-room-card__checkbox:checked)::before {
    opacity: 1;
}

/* Fokus klawiatury pozostaje widoczny, ale nie może wyglądać jak zaznaczenie. */
label.reservation-room-card:focus-within:not(.is-selected):not(:has(.reservation-room-card__checkbox:checked)) {
    border-color: rgba(121, 121, 58, 0.48);
    box-shadow: 0 0 0 3px rgba(121, 121, 58, 0.1);
}

/* Motyw formularza Bootstrap dodaje checkboxowi wrapper zajmujący miejsce nad treścią karty. */
.reservation-room-card > .form-check {
    min-height: 0;
    height: 0;
    margin: 0;
    padding: 0;
}

.reservation-room-card > .form-check > .form-check-label {
    display: none;
}

.reservation-room-card__checkbox {
    position: absolute;
    z-index: 2;
    top: 1rem;
    right: 1rem;
    width: 1.25rem;
    height: 1.25rem;
    margin: 0;
    border-color: rgba(121, 121, 58, 0.65);
    transition: transform 0.16s ease, background-color 0.16s ease, border-color 0.16s ease;
}

.reservation-room-card__checkbox:checked {
    border-color: #8fa878;
    background-color: #8fa878;
    transform: scale(1.06);
}

/* Nagłówek i treść są blokami, choć semantycznie karta pozostaje klikalną etykietą checkboxa. */
.reservation-room-card__body,
.reservation-room-card__heading,
.reservation-room-card__description,
.reservation-room-card__price,
.reservation-room-card__features {
    display: block;
}

/* Nagłówek korzysta z typografii i ciepłego tła znanego z panelu Asystenta AI. */
.reservation-room-card__heading {
    margin: 0 -3rem 0.85rem -1rem;
    padding: 0.85rem 3rem 0.75rem 1rem;
    border-bottom: 1px solid rgba(121, 121, 58, 0.2);
    background: linear-gradient(180deg, #fffaf1 0%, #f7eddc 100%);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.8);
}

.reservation-room-card__name {
    display: block;
    padding-right: 0.25rem;
    color: #5a3d12;
    font-family: Georgia, "Times New Roman", serif;
    font-size: 1.16rem;
    line-height: 1.2;
}

.reservation-room-card__capacity {
    display: block;
    margin-top: 0.28rem;
    font-size: 0.82rem;
    font-weight: 600;
    color: #6b5330;
}

.reservation-room-card__description {
    font-size: 0.9rem;
    line-height: 1.45;
    color: #55462f;
}

/* Cena jest oddzielona od opisu, aby najważniejsze dane dało się szybko przeskanować wzrokiem. */
.reservation-room-card__price {
    margin-top: 0.8rem;
    padding-top: 0.65rem;
    border-top: 1px solid rgba(121, 121, 58, 0.15);
    font-size: 0.9rem;
    font-weight: 600;
    color: #5a3d12;
}

/* Udogodnienia są ułożone pionowo w kapsułkach inspirowanych wyborem miejscowości na mapie. */
.reservation-room-card__features {
    display: grid;
    justify-items: start;
    gap: 0.38rem;
    margin-top: 0.7rem;
}

.reservation-room-card__feature {
    display: block;
    width: fit-content;
    margin: 0;
    padding: 0.3rem 0.68rem;
    border: 1px solid rgba(121, 121, 58, 0.22);
    border-radius: 999px;
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.94) 0%, rgba(245, 242, 233, 0.94) 100%);
    box-shadow: 0 5px 12px rgba(79, 75, 31, 0.06);
    font-size: 0.78rem;
    font-weight: 600;
    line-height: 1.25;
    color: #5f5638;
}

/* Podpowiedź nie powinna przylegać bezpośrednio do ostatniego rzędu kart. */
.reservation-room-grid + small {
    display: block;
    margin-top: 0.9rem;
}

.reservation-room-error {
    min-height: 1.25rem;
    margin-top: 0.45rem;
    color: #a0271c;
}

.reservation-room-error ul {
    margin: 0;
    padding-left: 1.25rem;
}

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

@media (max-width: 767.98px) {
    .reservation-room-grid {
        grid-template-columns: 1fr;
    }

    .reservation-room-grid > .reservation-room-card:last-child:nth-child(odd) {
        grid-column: auto;
        width: 100%;
    }

    label.reservation-room-card {
        padding: 0 2.8rem 0.9rem 0.9rem;
    }

    .reservation-room-card__heading {
        margin: 0 -2.8rem 0.8rem -0.9rem;
        padding: 0.8rem 2.8rem 0.7rem 0.9rem;
    }
}

@media (prefers-reduced-motion: reduce) {
    label.reservation-room-card {
        transition: none;
    }

    .reservation-availability-status.is-loading::before {
        animation-duration: 1.6s;
    }
}

/* Krok 2 korzysta z tej samej palety co wybór pokoju, ale karta nie jest już elementem zaznaczanym. */
.reservation-detail-card {
    overflow: hidden;
    border: 1px solid rgba(121, 121, 58, 0.24);
    border-radius: 1rem;
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.96) 0%, rgba(245, 241, 231, 0.96) 100%);
    box-shadow:
        0 8px 20px rgba(79, 75, 31, 0.08),
        inset 0 1px 0 rgba(255, 255, 255, 0.72);
}

.reservation-detail-card__header {
    padding: 0.85rem 1rem 0.75rem;
    border-bottom: 1px solid rgba(121, 121, 58, 0.2);
    background: linear-gradient(180deg, #fffaf1 0%, #f7eddc 100%);
    box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.8);
}

.reservation-detail-card__header label {
    margin: 0;
    padding: 0;
    color: #5a3d12;
    font-family: Georgia, "Times New Roman", serif;
    font-size: 1.16rem;
    font-weight: 700;
    line-height: 1.2;
}

.reservation-detail-card__body {
    padding: 1rem;
    color: #55462f;
}

/* Zdjęcie pozostaje uzupełnieniem opisu na większych ekranach. */
.reservation-detail-card__image {
    overflow: hidden;
    border: 1px solid rgba(121, 121, 58, 0.18);
    border-radius: 0.75rem;
    box-shadow: 0 6px 14px rgba(79, 75, 31, 0.09);
}

.reservation-detail-card__price,
.reservation-detail-card__description {
    display: block;
    padding: 0;
    color: #55462f;
    line-height: 1.45;
}

.reservation-detail-card__price {
    margin-bottom: 0.8rem;
    padding-bottom: 0.65rem;
    border-bottom: 1px solid rgba(121, 121, 58, 0.15);
    color: #5a3d12;
    font-size: 0.92rem;
    font-weight: 700;
}

.reservation-detail-card__description {
    font-size: 0.9rem;
    font-style: normal;
}

/* Każda usługa dodatkowa jest osobnym wierszem, dzięki czemu łatwo odczytać jej stan. */
.reservation-detail-option {
    position: relative;
    margin-top: 0.7rem;
    padding: 0.7rem 0.8rem;
    overflow: hidden;
    border: 1px solid rgba(121, 121, 58, 0.22);
    border-radius: 0.75rem;
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.94) 0%, rgba(245, 242, 233, 0.94) 100%);
    box-shadow: 0 5px 12px rgba(79, 75, 31, 0.06);
    transition: border-color 0.16s ease, background-color 0.16s ease, box-shadow 0.16s ease;
}

.reservation-detail-option::before {
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    width: 4px;
    background: #8fa878;
    content: "";
    opacity: 0;
    transition: opacity 0.16s ease;
}

.reservation-detail-option:hover {
    border-color: rgba(121, 121, 58, 0.42);
}

.reservation-detail-option:has(.reservation-detail-option__checkbox:checked) {
    border-color: #8fa878;
    background: linear-gradient(180deg, rgba(244, 249, 239, 0.98) 0%, rgba(232, 241, 224, 0.98) 100%);
    box-shadow:
        0 0 0 2px rgba(143, 168, 120, 0.16),
        0 7px 15px rgba(79, 75, 31, 0.08);
}

.reservation-detail-option:has(.reservation-detail-option__checkbox:checked)::before {
    opacity: 1;
}

.reservation-detail-option .form-check {
    min-height: 0;
    margin: 0;
    padding-left: 1.75rem;
}

.reservation-detail-option__checkbox {
    width: 1.15rem;
    height: 1.15rem;
    margin-top: 0.12rem;
    border-color: rgba(121, 121, 58, 0.65);
}

.reservation-detail-option__checkbox:checked {
    border-color: #8fa878;
    background-color: #8fa878;
}

.reservation-detail-option .reservation-detail-option__label {
    display: block;
    padding: 0 0 0 0.2rem;
    color: #4d452f;
    font-size: 0.88rem;
    font-weight: 600;
    line-height: 1.35;
}

/* Wspólny wygląd i czytelny stan podpowiedzi na każdym etapie formularza. */
.reservation-hint-toggle {
    display: inline-block;
    color: #697451 !important;
    cursor: pointer;
    text-decoration: none;
    text-decoration-thickness: 1px;
    text-underline-offset: 0.16em;
}

.reservation-hint-toggle__close {
    display: none;
}

/* Bootstrap dodaje aria-describedby wyłącznie na czas, gdy właściwy popover jest otwarty. */
.reservation-hint-toggle[aria-describedby] .reservation-hint-toggle__open {
    display: none;
}

.reservation-hint-toggle[aria-describedby] .reservation-hint-toggle__close {
    display: inline !important;
}

.reservation-hint-toggle:hover,
.reservation-hint-toggle:focus-visible,
.reservation-hint-toggle[aria-expanded="true"] {
    color: #4d5938 !important;
    text-decoration: underline;
    text-decoration-color: rgba(105, 116, 81, 0.68);
}

.reservation-hint-toggle:focus-visible {
    border-radius: 0.25rem;
    outline: 2px solid rgba(143, 168, 120, 0.52);
    outline-offset: 2px;
}

/*
 * Szałwiowy ton wiąże podpowiedź z zielono-kremową paletą formularza,
 * ale nadal odróżnia warstwę pomocniczą od właściwych kart z danymi.
 */
.reservation-hint-popover {
    --bs-popover-max-width: 22rem;
    --bs-popover-bg: #fafbf7;
    --bs-popover-border-color: rgba(112, 126, 83, 0.4);
    --bs-popover-border-radius: 0.9rem;
    --bs-popover-box-shadow: 0 10px 28px rgba(79, 75, 31, 0.15);
    --bs-popover-header-color: #4d5938;
    --bs-popover-header-bg: #e9eee1;
    --bs-popover-body-color: #505442;
    overflow: hidden;
}

.reservation-hint-popover .popover-header {
    border-bottom-color: rgba(112, 126, 83, 0.24);
    font-family: Georgia, "Times New Roman", serif;
    font-weight: 700;
}

.reservation-hint-popover .popover-body {
    font-size: 0.84rem;
    line-height: 1.48;
}

.reservation-hint-popover .popover-body a {
    color: #53683f;
    font-weight: 700;
    text-decoration-line: underline;
    text-decoration-color: rgba(83, 104, 63, 0.72);
    text-decoration-thickness: 0.08em;
    text-underline-offset: 0.16em;
}

.reservation-hint-popover .popover-body a:hover,
.reservation-hint-popover .popover-body a:focus-visible {
    color: #354728;
    text-decoration-color: currentColor;
}

.reservation-hint-popover .popover-body a:focus-visible {
    border-radius: 0.18rem;
    outline: 2px solid rgba(143, 168, 120, 0.58);
    outline-offset: 2px;
}

/* Strzałka sygnalizuje, że dokument zostanie otwarty w nowej karcie. */
.reservation-hint-popover .popover-body a[target="_blank"]::after {
    margin-left: 0.18em;
    content: "↗";
    font-size: 0.82em;
}

.reservation-detail-option__hint {
    margin: 0.38rem 0 0 1.95rem;
}

@media (max-width: 767.98px) {
    .reservation-detail-card__header {
        padding: 0.8rem 0.9rem 0.7rem;
    }

    .reservation-detail-card__body {
        padding: 0.9rem;
    }

    .reservation-detail-option {
        padding: 0.65rem 0.7rem;
    }
}

@media (prefers-reduced-motion: reduce) {
    .reservation-detail-option,
    .reservation-detail-option::before {
        transition: none;
    }
}

/* Wspólny wygląd pól Kroku 3 oraz wyboru dat w Kroku 1. */
.reservation-form-control {
    min-height: 2.8rem;
    border: 1px solid rgba(121, 121, 58, 0.38);
    border-radius: 0.7rem;
    background: rgba(255, 253, 248, 0.96);
    box-shadow:
        inset 0 1px 2px rgba(79, 75, 31, 0.04),
        0 3px 9px rgba(79, 75, 31, 0.04);
    color: #4d452f;
    transition: border-color 0.16s ease, box-shadow 0.16s ease, background-color 0.16s ease;
}

.reservation-form-control:hover {
    border-color: rgba(121, 121, 58, 0.58);
}

.reservation-form-control:focus {
    border-color: #8fa878;
    background: #fff;
    box-shadow:
        0 0 0 0.2rem rgba(143, 168, 120, 0.2),
        0 5px 12px rgba(79, 75, 31, 0.06);
}

.reservation-form-control:disabled {
    border-color: rgba(121, 121, 58, 0.18);
    background: rgba(235, 232, 223, 0.78);
    color: #777264;
}

/*
 * jQuery używa klasy `error`, a formularz Symfony/Bootstrap klasy `is-invalid`.
 * Oba źródła błędu muszą prowadzić do identycznego wyglądu pola.
 */
.reservation-form-control.error,
.reservation-form-control.is-invalid,
.reservation-form-control[aria-invalid="true"] {
    border-color: #b64b43;
    background: #fff9f8;
    background-image: none;
    box-shadow:
        0 0 0 0.18rem rgba(182, 75, 67, 0.14),
        inset 0 1px 2px rgba(110, 35, 30, 0.04);
}

.reservation-form-control.error:focus,
.reservation-form-control.is-invalid:focus,
.reservation-form-control[aria-invalid="true"]:focus {
    border-color: #a33d36;
    background-image: none;
    box-shadow: 0 0 0 0.22rem rgba(182, 75, 67, 0.2);
}

/* Formularze rezerwacji i kontaktu korzystają z tych samych kart oraz odstępów. */
.reservation-client-form,
.reservation-contact-form {
    display: grid;
    gap: 1rem;
    margin-top: 1.15rem;
}

.reservation-form-card {
    overflow: hidden;
    border: 1px solid rgba(121, 121, 58, 0.24);
    border-radius: 1rem;
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.96) 0%, rgba(245, 241, 231, 0.96) 100%);
    box-shadow:
        0 8px 20px rgba(79, 75, 31, 0.08),
        inset 0 1px 0 rgba(255, 255, 255, 0.72);
}

.reservation-form-card__header {
    padding: 0.78rem 1rem 0.72rem;
    border-bottom: 1px solid rgba(121, 121, 58, 0.2);
    background: linear-gradient(180deg, #fffaf1 0%, #f7eddc 100%);
}

.reservation-form-card__header h2 {
    margin: 0;
    color: #5a3d12;
    font-family: Georgia, "Times New Roman", serif;
    font-size: 1.16rem;
    font-weight: 700;
    line-height: 1.2;
}

.reservation-form-card__title-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.75rem;
}

.reservation-form-card__header p {
    margin: 0.28rem 0 0;
    color: #6b6545;
    font-size: 0.8rem;
    line-height: 1.35;
}

.reservation-form-card__body {
    display: grid;
    gap: 0.9rem;
    padding: 1rem;
}

.reservation-form-field {
    min-width: 0;
}

:is(.reservation-client-form, .reservation-contact-form) .reservation-form-field > label,
:is(.reservation-client-form, .reservation-contact-form) .form-label {
    margin: 0 0 0.36rem;
    padding: 0;
    color: #55462f;
    font-size: 0.88rem;
    font-weight: 700;
}

:is(.reservation-client-form, .reservation-contact-form) .reservation-form-field .reservation-hint-toggle {
    margin-top: 0.38rem;
}

:is(.reservation-client-form, .reservation-contact-form) :is(label.error, .invalid-feedback) {
    display: block;
    margin: 0.3rem 0 0;
    padding: 0;
    color: #a33d36;
    font-size: 10pt;
    font-weight: 600;
    line-height: 1.35;
}

:is(.reservation-client-form, .reservation-contact-form) .reservation-form-field:has(.reservation-form-control.error) > label,
:is(.reservation-client-form, .reservation-contact-form) .reservation-form-field:has(.reservation-form-control.is-invalid) > label,
:is(.reservation-client-form, .reservation-contact-form) .reservation-form-field:has(.reservation-form-control[aria-invalid="true"]) > label {
    color: #8f332d;
}

.reservation-form-grid {
    display: grid;
    gap: 0.9rem;
}

.reservation-form-grid--contact,
.reservation-form-grid--company-main {
    grid-template-columns: repeat(2, minmax(0, 1fr));
}

.reservation-form-grid--address {
    grid-template-columns: minmax(0, 2fr) minmax(8.5rem, 1fr);
}

.reservation-form-control--textarea {
    min-height: 7rem;
    resize: vertical;
}

.reservation-contact-form__message {
    min-height: 10rem;
}

/* Etykieta „opcjonalnie” odróżnia dane do faktury od wymaganej zgody. */
.reservation-client-company-toggle {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
    gap: 0.35rem 0.75rem;
    padding: 0.78rem 1rem 0.72rem;
    background: linear-gradient(180deg, #fffaf1 0%, #f7eddc 100%);
    transition: box-shadow 0.16s ease;
}

.reservation-client-company-toggle__control {
    display: flex;
    align-items: flex-start;
    min-width: 0;
}

.reservation-client-checkbox {
    flex: 0 0 auto;
    width: 1.15rem;
    height: 1.15rem;
    margin: 0.12rem 0.55rem 0 0;
    border-color: rgba(121, 121, 58, 0.65);
}

.reservation-client-checkbox:checked {
    border-color: #8fa878;
    background-color: #8fa878;
}

.reservation-client-form .reservation-client-company-toggle__label {
    margin: 0;
    padding: 0;
    color: #5a3d12;
    cursor: pointer;
    font-family: Georgia, "Times New Roman", serif;
    font-size: 1.08rem;
    font-weight: 700;
    line-height: 1.3;
}

.reservation-form-badge {
    padding: 0.22rem 0.58rem;
    border: 1px solid rgba(121, 121, 58, 0.22);
    border-radius: 999px;
    background: rgba(255, 255, 255, 0.74);
    color: #6b6545;
    font-size: 0.7rem;
    font-weight: 700;
    letter-spacing: 0.02em;
    line-height: 1.2;
    text-transform: uppercase;
}

.reservation-client-company-toggle__hint {
    grid-column: 1 / -1;
    margin-left: 1.7rem;
}

.reservation-client-company-fields {
    border-top: 1px solid rgba(121, 121, 58, 0.18);
}

/* Po zaznaczeniu opcjonalna sekcja kontynuuje zielony stan wyboru znany z Kroków 1 i 2. */
.reservation-client-company-card:has(.reservation-client-checkbox:checked),
.reservation-client-company-card.is-open {
    border-color: #8fa878;
    box-shadow:
        0 0 0 1px rgba(143, 168, 120, 0.12),
        0 8px 20px rgba(79, 75, 31, 0.08);
}

.reservation-client-company-card:has(.reservation-client-checkbox:checked) .reservation-client-company-toggle,
.reservation-client-company-card.is-open .reservation-client-company-toggle {
    background: linear-gradient(180deg, #fffaf1 0%, #f7eddc 100%);
    box-shadow: inset 4px 0 0 #8fa878;
}

.reservation-client-consent-card {
    border-color: rgba(121, 121, 58, 0.34);
}

.reservation-client-consent .form-check {
    margin: 0;
    padding-left: 1.8rem;
}

.reservation-client-consent .form-check-input {
    width: 1.15rem;
    height: 1.15rem;
    margin-top: 0.12rem;
    border-color: rgba(121, 121, 58, 0.65);
}

.reservation-client-consent .form-check-input:checked {
    border-color: #8fa878;
    background-color: #8fa878;
}

.reservation-client-consent .form-check-input.error,
.reservation-client-consent .form-check-input[aria-invalid="true"] {
    border-color: #b64b43;
    box-shadow: 0 0 0 0.18rem rgba(182, 75, 67, 0.14);
}

.reservation-client-consent-card:has(.form-check-input.error),
.reservation-client-consent-card:has(.form-check-input[aria-invalid="true"]) {
    border-color: rgba(182, 75, 67, 0.68);
    box-shadow:
        0 0 0 2px rgba(182, 75, 67, 0.1),
        0 8px 20px rgba(79, 75, 31, 0.08);
}

.reservation-client-form .reservation-client-consent__label {
    margin: 0;
    padding: 0 0 0 0.15rem;
    color: #4d452f;
    font-size: 0.86rem;
    font-weight: 600;
    line-height: 1.42;
}

/* Karta terminu spina wizualnie pierwszy krok z kolejnymi etapami rezerwacji. */
.reservation-date-card {
    margin: 1.1rem 0;
}

.reservation-date-card__icon {
    position: absolute;
    top: 50%;
    right: 1rem;
    transform: translateY(-50%);
    color: #6b6545;
    pointer-events: none;
}

.reservation-date-card__error {
    display: block;
    min-height: 1.25em;
    margin-bottom: 0;
    padding: 0;
    color: #a33d36;
    font-weight: 600;
}

@media (max-width: 767.98px) {
    .reservation-form-grid--contact,
    .reservation-form-grid--company-main,
    .reservation-form-grid--address {
        grid-template-columns: 1fr;
    }

    .reservation-form-card__header,
    .reservation-client-company-toggle {
        padding: 0.75rem 0.9rem 0.7rem;
    }

    .reservation-form-card__body {
        padding: 0.9rem;
    }

}

@media (prefers-reduced-motion: reduce) {
    .reservation-form-control,
    .reservation-client-company-toggle {
        transition: none;
    }
}

.form-check label {
    padding-top: 0px; /* Usuwa przestrzeń od góry, aby etykieta formularza była wyrównana bez dodatkowego odstępu */
    padding-left: 5px; /* Dodaje 5px przestrzeni z lewej strony, aby zapewnić odstęp między etykietą a kontrolką formularza */
    /*
        - `padding-top`: Ustawia padding na 0, co sprawia, że etykieta nie ma dodatkowego odstępu od góry.
        - `padding-left`: Dodaje 5px przestrzeni po lewej stronie, co poprawia czytelność i oddziela etykietę od elementu formularza.
    */
}

.submit {
    margin-top: 20px; /* Dodaje przestrzeń 20px od góry, aby przycisk formularza miał odpowiedni odstęp od innych elementów */
    margin-bottom: 10px; /* Dodaje przestrzeń 10px od dołu, aby przycisk formularza nie był zbyt blisko innych elementów poniżej */
    /*
        - `margin-top`: Wprowadza odstęp 20px od góry, co zapewnia odpowiednią separację od innych elementów formularza.
        - `margin-bottom`: Dodaje 10px przestrzeni od dołu, co zapobiega zbijaniu się przycisku z innymi elementami.
    */
}

/* Główna akcja formularza jest wyraźna, ale pozostaje w naturalnej palecie strony. */
.reservation-action-row {
    display: flex;
    justify-content: flex-end;
    margin: 1rem 0 0.65rem;
    padding: 0;
}

.reservation-action-row .submit {
    margin: 0;
}

.reservation-primary-action {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 12rem;
    min-height: 2.85rem;
    padding: 0.65rem 1.25rem;
    border: 1px solid rgba(121, 92, 48, 0.48);
    border-radius: 0.75rem;
    background: linear-gradient(180deg, #fffaf1 0%, #f7eddc 100%);
    box-shadow:
        0 7px 15px rgba(90, 61, 18, 0.13),
        inset 0 1px 0 rgba(255, 255, 255, 0.82);
    color: #5a3d12;
    font-size: 0.9rem;
    font-weight: 700;
    line-height: 1.2;
    text-decoration: none;
    text-shadow: none;
    transition: transform 0.16s ease, border-color 0.16s ease, background 0.16s ease, box-shadow 0.16s ease;
}

/* Karty końcowe zachowują wygląd formularzy, ale eksponują status i kolejne działania. */
.reservation-confirmation-card {
    margin-top: 1.15rem;
    border-color: rgba(143, 168, 120, 0.62);
    box-shadow:
        0 0 0 2px rgba(143, 168, 120, 0.1),
        0 8px 20px rgba(79, 75, 31, 0.08);
}

.reservation-confirmation-card__header {
    display: flex;
    align-items: center;
    gap: 0.8rem;
    box-shadow: inset 4px 0 0 #8fa878;
}

.reservation-confirmation-card__icon {
    display: inline-flex;
    flex: 0 0 auto;
    align-items: center;
    justify-content: center;
    width: 2.15rem;
    height: 2.15rem;
    border: 1px solid rgba(143, 168, 120, 0.5);
    border-radius: 50%;
    background: rgba(232, 241, 224, 0.92);
    color: #60734e;
    font-size: 0.9rem;
}

/* Warianty statusu pozwalają odróżnić sukces, wygasły link i błąd bez zmiany konstrukcji karty. */
.reservation-confirmation-card--warning {
    border-color: rgba(178, 132, 68, 0.55);
    box-shadow:
        0 0 0 2px rgba(178, 132, 68, 0.09),
        0 8px 20px rgba(79, 75, 31, 0.08);
}

.reservation-confirmation-card--warning .reservation-confirmation-card__header {
    box-shadow: inset 4px 0 0 #b28444;
}

.reservation-confirmation-card--warning .reservation-confirmation-card__icon {
    border-color: rgba(178, 132, 68, 0.48);
    background: rgba(255, 248, 235, 0.95);
    color: #8a622b;
}

.reservation-confirmation-card--danger {
    border-color: rgba(167, 83, 73, 0.55);
    box-shadow:
        0 0 0 2px rgba(167, 83, 73, 0.08),
        0 8px 20px rgba(79, 75, 31, 0.08);
}

.reservation-confirmation-card--danger .reservation-confirmation-card__header {
    box-shadow: inset 4px 0 0 #a75349;
}

.reservation-confirmation-card--danger .reservation-confirmation-card__icon {
    border-color: rgba(167, 83, 73, 0.48);
    background: rgba(255, 245, 243, 0.96);
    color: #8b3f37;
}

.reservation-confirmation-card__body {
    gap: 0.85rem;
}

.reservation-confirmation-card__details {
    display: grid;
    margin: 0;
    overflow: hidden;
    border: 1px solid rgba(121, 121, 58, 0.18);
    border-radius: 0.75rem;
    background: rgba(255, 253, 248, 0.78);
}

.reservation-confirmation-card__row {
    display: grid;
    grid-template-columns: minmax(8.5rem, max-content) minmax(0, 1fr);
    gap: 0.8rem;
    padding: 0.68rem 0.8rem;
}

.reservation-confirmation-card__row + .reservation-confirmation-card__row {
    border-top: 1px solid rgba(121, 121, 58, 0.14);
}

.reservation-confirmation-card__row--compact {
    display: flex;
    align-items: baseline;
    gap: 0.3rem;
}

.reservation-confirmation-card__row--compact dt {
    flex: 0 0 auto;
}

.reservation-confirmation-card__row--compact dd {
    font-weight: 700;
}

.reservation-confirmation-card__row dt,
.reservation-confirmation-card__row dd {
    margin: 0;
    overflow-wrap: anywhere;
    line-height: 1.4;
}

.reservation-confirmation-card__row dt {
    color: #6b6545;
    font-size: 0.78rem;
    font-weight: 700;
}

.reservation-confirmation-card__row dd {
    color: #4d452f;
    font-size: 0.86rem;
    font-weight: 600;
}

.reservation-confirmation-card__notice {
    padding: 0.75rem 0.85rem;
    border: 1px solid rgba(121, 121, 58, 0.18);
    border-left-width: 4px;
    border-radius: 0.7rem;
    background: rgba(255, 253, 248, 0.82);
    color: #55462f;
}

.reservation-confirmation-card__notice strong {
    display: block;
    margin-bottom: 0.22rem;
    color: #5a3d12;
    font-family: Georgia, "Times New Roman", serif;
    font-size: 0.9rem;
}

.reservation-confirmation-card__notice p {
    margin: 0;
    color: inherit;
    font-size: 0.82rem;
    line-height: 1.48;
}

.reservation-confirmation-card__notice--important {
    border-color: rgba(178, 132, 68, 0.34);
    border-left-color: #b28444;
    background: rgba(255, 248, 235, 0.92);
}

.reservation-confirmation-card__notice--muted {
    border-left-color: #8fa878;
    background: rgba(244, 249, 239, 0.72);
}

.reservation-confirmation-card__notice--danger {
    border-color: rgba(167, 83, 73, 0.28);
    border-left-color: #a75349;
    background: rgba(255, 245, 243, 0.9);
    color: #713f39;
}

@media (max-width: 767.98px) {
    .reservation-confirmation-card__row {
        grid-template-columns: 1fr;
        gap: 0.18rem;
    }
}

.reservation-primary-action:hover {
    border-color: rgba(121, 92, 48, 0.72);
    background: linear-gradient(180deg, #fbf1df 0%, #eedcc0 100%);
    box-shadow:
        0 9px 18px rgba(90, 61, 18, 0.18),
        inset 0 1px 0 rgba(255, 255, 255, 0.72);
    color: #4c330f;
    transform: translateY(-1px);
}

.reservation-primary-action:focus-visible {
    border-color: #8fa878;
    box-shadow:
        0 0 0 0.23rem rgba(143, 168, 120, 0.3),
        0 8px 17px rgba(90, 61, 18, 0.16);
    color: #4c330f;
    outline: none;
}

.reservation-primary-action:active {
    border-color: rgba(121, 92, 48, 0.78);
    background: #ecd7b7;
    box-shadow: 0 4px 9px rgba(90, 61, 18, 0.14);
    color: #4c330f;
    transform: translateY(0);
}

.reservation-primary-action:disabled,
.reservation-primary-action.disabled {
    border-color: rgba(121, 92, 48, 0.2);
    background: #eee9df;
    box-shadow: none;
    color: #777264;
    cursor: not-allowed;
    opacity: 0.78;
    text-shadow: none;
    transform: none;
}

@media (max-width: 767.98px) {
    .reservation-action-row,
    .reservation-primary-action {
        width: 100%;
    }
}

@media (prefers-reduced-motion: reduce) {
    .reservation-primary-action {
        transition: none;
    }
}

label {
    padding-top: 15px; /* Dodaje przestrzeń 15px od góry, co zapewnia odpowiedni odstęp między etykietą a innymi elementami formularza */
    /*
        - `padding-top`: Wprowadza 15px przestrzeni od góry, co poprawia czytelność formularza, dając etykiecie odpowiednią separację.
    */
}

label.rodo {
    padding-top: 0px; /* Usuwa przestrzeń od góry, aby etykieta 'rodo' była wyrównana bez dodatkowego odstępu */
    font-size: 15px; /* Ustawia rozmiar czcionki na 15px, co sprawia, że tekst etykiety będzie czytelny i dostosowany do innych elementów formularza */
    /*
        - `padding-top`: Wprowadza 0px przestrzeni od góry, co eliminuje dodatkowy odstęp, zapewniając, że etykieta jest wyrównana do reszty elementów.
        - `font-size`: Ustawia rozmiar czcionki na 15px, co zapewnia odpowiednią wielkość tekstu, zachowując jego czytelność.
    */
}

#reserve_client_Rodo {
    padding-top: 0;
}

.switch-custom {
    padding-top: 0px; /* Usuwa przestrzeń od góry, aby element był wyrównany bez dodatkowego odstępu */
    /*
        - `padding-top`: Wprowadza 0px przestrzeni od góry, co eliminuje dodatkowy odstęp i sprawia, że element jest wyrównany z resztą zawartości.
    */
}

.col-form-label {
    padding-top: 15px; /* Dodaje 15px przestrzeni od góry, zapewniając odpowiedni odstęp między etykietą a innymi elementami */
    /*
        - `padding-top`: Wprowadza 15px przestrzeni od góry, co poprawia czytelność i estetykę etykiety poprzez zachowanie odstępu od innych elementów.
    */
}

/* Sekcja galerii */
.ekko-lightbox-nav-overlay a {
    color: #000000; /* Ustawia kolor linków w nawigacji ekranu lightbox na czarny (#000000), zapewniając dobrą widoczność na tle */
    /*
        - `color`: Określa kolor tekstu linków w nawigacji lightboxa. Czarny (#000000) zapewnia wyraźny kontrast i dobrą czytelność.
    */
}

.jumbotron {
    display: flex; /* Ustawia kontener jako flexbox, co pozwala na łatwe wyrównanie i rozmieszczanie elementów w poziomie */
    background-image: url(/build/images/kozi_lasek_header.fce22813.jpg); /* Ustawia tło jumbotrona na obrazek z określonej ścieżki */
    background-position: center center; /* Ustawia tło na wyśrodkowane w poziomie i pionie */
    background-repeat: no-repeat; /* Zapobiega powtarzaniu tła, aby było wyświetlane tylko raz */
    background-size: 100% 100%; /* Dopasowuje tło do rozmiarów kontenera, wypełniając cały obszar */
    letter-spacing: 2px; /* Zwiększa przestrzeń między literami, co poprawia czytelność tekstu */
    color: #440505; /* Ustawia kolor tekstu na ciemny odcień czerwieni (#440505) */
    font-size: 8pt; /* Ustawia rozmiar czcionki na 8 punktów, co sprawia, że tekst jest mniejszy */
    padding-bottom: 35%; /* Dodaje dolny padding o wartości 35% wysokości, co zmienia proporcje kontenera */
    padding-top: 5px; /* Dodaje 5px paddingu od góry */
    padding-left: 5px; /* Dodaje 5px paddingu z lewej strony */
    margin-bottom: -17px; /* Ustawia ujemny margines dolny, co pozwala na nakładanie się elementów poniżej */
    /*
        - `display: flex`: Pozwala na elastyczne rozmieszczanie elementów wewnątrz jumbotrona.
        - `background-image`: Ustawia tło na obrazek z określonej ścieżki.
        - `background-position`: Centruje tło zarówno w poziomie, jak i w pionie.
        - `background-repeat`: Zapobiega powtarzaniu tła.
        - `background-size`: Dopasowuje tło do wymiarów kontenera.
        - `letter-spacing`: Zwiększa przestrzeń między literami w celu poprawy czytelności.
        - `color`: Określa kolor tekstu na ciemnoczerwony.
        - `font-size`: Ustawia rozmiar czcionki na 8pt, co sprawia, że jest ona mniejsza.
        - `padding-bottom`: Zwiększa przestrzeń na dole kontenera, zmieniając jego proporcje.
        - `padding-top` i `padding-left`: Ustawiają mały padding w górnej i lewej części.
        - `margin-bottom`: Ustawia ujemny margines dolny, co pozwala na nakładanie się elementów.
    */
}

.bg-light {
    background-color: #baad8b !important; /* Ustawia tło na kolor o odcieniu oliwkowym (#baad8b), z użyciem !important, aby wymusić zastosowanie tej reguły */
    padding-left: 10px; /* Dodaje padding o wartości 10px po lewej stronie elementu */
    padding-right: 10px; /* Dodaje padding o wartości 10px po prawej stronie elementu */
    /*
        - `background-color`: Określa kolor tła na oliwkowy odcień (#baad8b), przy użyciu !important w celu nadpisania innych reguł.
        - `padding-left` i `padding-right`: Dodają przestrzeń wewnętrzną po bokach elementu, co zapewnia odpowiednią odległość od krawędzi.
    */
}

.nav-item {
    padding: 3px !important; /* Ustawia padding na 3px we wszystkich stronach elementu, z użyciem !important, aby wymusić zastosowanie tej reguły */
    /*
        - `padding`: Dodaje przestrzeń wewnętrzną o wartości 3px we wszystkich stronach elementu.
        - `!important`: Wymusza, aby ta reguła miała wyższy priorytet w stosunku do innych reguł.
    */
}

.page-link {
    color: #79793a; /* Ustawia kolor tekstu na odcień zielonkawego beżu (#79793a) dla linków na stronach paginacji */
    /*
        - `color`: Określa kolor tekstu linku na odcień zielonkawego beżu (#79793a), który dobrze kontrastuje z tłem.
    */
}

.page-item.active .page-link {
    background-color: #baad8b !important; /* Ustawia kolor tła na odcień beżu (#baad8b) dla aktywnego linku paginacji */
    border-color: #baad8b !important; /* Ustawia kolor ramki na odcień beżu (#baad8b) dla aktywnego linku paginacji */
    /*
        - `background-color`: Określa kolor tła aktywnego linku na beżowy (#baad8b), wyróżniając go na tle innych.
        - `border-color`: Ustawia kolor ramki aktywnego linku na ten sam odcień beżu, co zapewnia spójność wizualną.
        - `!important`: Wymusza zastosowanie tej reguły, nawet jeśli inne reguły mogłyby ustawić inne kolory.
    */
}

.btn-outline-dark:not(:disabled):not(.disabled).active,
.btn.btn-outline-dark:hover {
    background-color: #FFFFFF !important; /* Ustawia tło na biały kolor (#FFFFFF) dla aktywnego lub najechanego przycisku */
    border-style: solid; /* Określa styl ramki jako ciągły (solid), zapewniając wyraźną granicę */
    border-width: 0.5px; /* Ustawia grubość ramki na 0.5px, co daje subtelną granicę */
    /*
        - `background-color`: Ustawia tło na biały kolor (#FFFFFF) dla przycisku w stanie aktywnym lub po najechaniu.
        - `border-style`: Określa, że ramka będzie ciągła, co poprawia widoczność przycisku.
        - `border-width`: Określa grubość ramki na 0.5px, co zapewnia subtelną, ale wyraźną granicę.
        - `!important`: Wymusza zastosowanie tej reguły, nawet jeśli inne reguły mogłyby ustawić inne kolory lub style.
    */
}

.btn-outline-dark {
	border-style: solid; /* Ustawia styl ramki na ciągły, co zapewnia wyraźną granicę wokół przycisku */
	border-width: 0.5px; /* Ustawia grubość ramki na 0.5px, co zapewnia subtelną, ale widoczną granicę */
	/*
		- `border-style`: Określa, że ramka będzie ciągła, co pomaga w wyraźnym oddzieleniu przycisku od tła.
		- `border-width`: Określa grubość ramki na 0.5px, co tworzy delikatną granicę wokół przycisku.
	 */
}
 
.custom-btn-size {
	margin-top: 3px; /* Ustawia górny margines na 3px, co zapewnia niewielki odstęp od elementu nad przyciskiem */
	padding: 0px !important; /* Usuwa padding, ustawiając go na 0px, aby przycisk miał minimalne wewnętrzne odstępy */
	margin-bottom: auto; /* Ustawia automatyczny margines dolny, co pozwala na elastyczne rozmieszczenie przycisku w danym kontenerze */
	margin-left: 3px; /* Dodaje margines z lewej strony o wartości 3px, zapewniając odstęp od elementu obok */
	margin-right: 3px; /* Dodaje margines z prawej strony o wartości 3px, zapewniając odstęp od elementu obok */
	/*
		- `margin-top`: Ustawia margines górny na 3px, co wpływa na rozmieszczenie przycisku względem innych elementów.
		- `padding`: Usuwa wszelkie wewnętrzne odstępy, co może być przydatne do precyzyjnego dopasowania rozmiaru przycisku.
		- `margin-bottom`: Ustawia dolny margines na `auto`, co umożliwia elastyczne rozmieszczenie przycisku.
		- `margin-left` i `margin-right`: Dodają marginesy po bokach przycisku, zapewniając odpowiednie odstępy od innych elementów.
	 */
}
 
.custom-menu {
	background-color: #dbd3c7 !important; /* Ustawia tło menu na kolor #dbd3c7, który jest stonowanym odcieniem beżu, zapewniającym subtelną estetykę */
	/*
		- `background-color`: Ustawia kolor tła na #dbd3c7, co nadaje menu jasny beżowy odcień.
		- `!important`: Wymusza zastosowanie tej reguły, nawet jeśli inne reguły CSS mogą ustawić inne kolory tła.
	 */
}
 
#pokoje, #flagi {
    margin-bottom: 4px !important; /* Ustawia dolny margines na 4px dla elementów o ID 'pokoje' i 'flagi', zapewniając mały odstęp od innych elementów poniżej */
    /*
        - `margin-bottom`: Ustawia dolny margines na 4px, co zapewnia odpowiednią przestrzeń między tymi elementami a innymi znajdującymi się poniżej.
        - `!important`: Wymusza zastosowanie tej reguły, nawet jeśli inne reguły CSS mogą ustawić inny margines.
    */
}

.gsc-control-cse {
    border: 0px !important; /* Usuwa ramkę (border) wokół elementu o klasie 'gsc-control-cse', zapewniając brak obramowania */
    /*
        - `border`: Ustawia szerokość ramki na 0px, co całkowicie usuwa obramowanie elementu.
        - `!important`: Wymusza zastosowanie tej reguły, nawet jeśli inne reguły CSS mogą ustawić inną ramkę.
    */
}

.navbar-toggler {
    margin: 7px !important; /* Ustawia margines wokół przycisku rozwijania na 7px, co zapewnia odpowiednią przestrzeń wokół przycisku */
    /*
        - `margin`: Ustawia margines na 7px we wszystkich kierunkach (góra, dół, lewo, prawo), tworząc przestrzeń wokół elementu.
        - `!important`: Wymusza zastosowanie tej reguły, nawet jeśli inne reguły CSS mogą ustawić inny margines.
    */
}

.navbar.navbar-light.bg-light {
    background: #baad8b !important; /* Fallback koloru dla przeglądarek bez wsparcia gradientów. */
    background: linear-gradient(180deg, #d0c0a4 0%, #c0b08f 38%, #b29f7d 100%) !important; /* Główny gradient belki menu. */
    background: -webkit-linear-gradient(top, #d0c0a4 0%, #c0b08f 38%, #b29f7d 100%) !important; /* Wersja kompatybilna dla starszych WebKitów. */
    border: 1px solid rgba(126, 102, 67, 0.18); /* Bardzo subtelny obrys odcinający belkę od tła strony. */
    box-shadow:
        inset 0 1px 0 rgba(255, 255, 255, 0.32),
        0 2px 8px rgba(74, 57, 30, 0.06);
    /*
        - Gradient odpowiada temu samemu kierunkowi co stopka, aby zachować spójność góra–dół.
        - `inset` rozjaśnia górną krawędź i dodaje lekki połysk.
        - Zewnętrzny cień jest bardzo mały, żeby belka nie wyglądała ciężko.
    */
}

.navbar-nav {
  flex-wrap: wrap !important; /* Pozwala menu zawijać się do kolejnego wiersza, gdy nie mieści się w jednej linii */
  width: 100%;                /* Ustawia szerokość paska nawigacyjnego na 100% szerokości kontenera */
  /*
      - `flex-wrap: wrap` – Pozwala, aby elementy wewnątrz `.navbar-nav` (czyli przyciski i linki menu) przechodziły do kolejnej linii, 
        gdy jest zbyt mało miejsca w poziomie. Dzięki temu menu nie wyjeżdża poza widoczną część strony.
      - `!important` – Wymusza zastosowanie tej reguły nawet jeśli inne style mogłyby ją nadpisać (np. domyślne ustawienia Bootstrapa).
      - `width: 100%` – Rozciąga cały pasek nawigacyjny na całą szerokość rodzica (`container` lub `navbar`), co zapewnia spójność układu
        i zapobiega efektowi „ściśnięcia” menu podczas zmiany szerokości okna.
  */
}

.small, small {
    width: 200px; /* Ustawia szerokość elementów z klasą 'small' lub tagiem 'small' na 200px */
    /*
        - `width`: Określa szerokość elementu na 200px, co sprawia, że elementy te będą miały stałą szerokość.
        - `small`: Dotyczy zarówno elementów z klasą `.small`, jak i tagu HTML `<small>`.
    */
}

.figure {
    width: 600%; /* Ustawia szerokość elementu na 600% jego normalnej szerokości, co może sprawić, że element będzie bardzo szeroki */
    height: 60%; /* Ustawia wysokość elementu na 60% jego normalnej wysokości */
    /*
        - `width`: Określa szerokość elementu jako 600% jego naturalnej szerokości, co może spowodować, że będzie on znacznie szerszy niż oryginalny rozmiar.
        - `height`: Ustawia wysokość elementu na 60% jego pierwotnej wysokości, co zmienia proporcje elementu.
    */
}

.img-fluid {
    padding: 7px; /* Dodaje wewnętrzne odstępy o wartości 7px do wszystkich stron elementu */
    /*
        - `padding`: Określa wewnętrzny odstęp wokół zawartości elementu, co wpływa na przestrzeń między treścią a jego krawędzią. Wartość 7px zapewnia niewielki margines wokół obrazka.
    */
}

.carousel {
    margin-top: -17px !important; /* Ustala margines górny na -17px, przesuwając element w górę */
    /*
        - `margin-top`: Ustawia margines górny na -17px, co powoduje przesunięcie elementu w górę o 17px. Zastosowanie `!important` wymusza nadpisanie innych reguł CSS.
    */
}

.carousel-control-prev-icon {
    position: absolute; /* Ustawia pozycję elementu na absolutną, względem najbliższego przodka o pozycji innej niż 'static' */
    left: 5px; /* Ustawia element 5px od lewej krawędzi kontenera */
    /*
        - `position: absolute`: Ustawia pozycję elementu na absolutną, co oznacza, że zostanie on umieszczony w stosunku do najbliższego kontenera o pozycji innej niż 'static'.
        - `left`: Określa pozycję elementu względem lewej krawędzi rodzica. Ustawienie na 5px sprawia, że element jest oddalony o 5px od lewej krawędzi.
    */
}

.carousel-control-next-icon {
    position: absolute; /* Ustawia pozycję elementu na absolutną, względem najbliższego przodka o pozycji innej niż 'static' */
    right: 5px; /* Ustawia element 5px od prawej krawędzi kontenera */
    /*
        - `position: absolute`: Ustawia pozycję elementu na absolutną, co oznacza, że zostanie on umieszczony w stosunku do najbliższego kontenera o pozycji innej niż 'static'.
        - `right`: Określa pozycję elementu względem prawej krawędzi rodzica. Ustawienie na 5px sprawia, że element jest oddalony o 5px od prawej krawędzi.
    */
}

img.weather {
    height: 70px; /* Ustawia wysokość obrazu na 70px */
    width: 70px;  /* Ustawia szerokość obrazu na 70px */
    /*
        - `height`: Określa wysokość obrazu na 70px, zapewniając stałą wielkość dla obrazu pogody.
        - `width`: Określa szerokość obrazu na 70px, zapewniając, że obraz będzie miał równą szerokość i wysokość.
    */
}

span.weather {
    color: #79793a; /* Ustawia kolor tekstu na szaro-zielony (#79793a) */
    font-size: 25px; /* Ustawia rozmiar czcionki na 25px, co sprawia, że tekst będzie dobrze widoczny */
    /*
        - `color`: Określa kolor tekstu na szaro-zielony, który pasuje do ogólnego stylu strony.
        - `font-size`: Ustawia rozmiar czcionki na 25px, co zapewnia wyraźną widoczność tekstu.
    */
}

div.weather {
	display: flex; /* Ustawia kontener na flexbox, umożliwiając elastyczne rozmieszczanie elementów wewnątrz */
	align-items: center; /* Wyrównuje elementy w pionie na środku kontenera */
	margin-top: -25px; /* Dodaje negatywny margines na górze, przesuwając element w górę */
	margin-bottom: -15px; /* Dodaje negatywny margines na dole, przesuwając element w dół */
	margin-left: -10px; /* Dodaje negatywny margines po lewej stronie, przesuwając element w lewo */
	/*
		- `display: flex`: Używa modelu flexbox, co ułatwia rozmieszczanie elementów w kontenerze.
		- `align-items: center`: Wyrównuje wszystkie elementy wewnątrz kontenera do środka w osi pionowej.
		- `margin-top`, `margin-bottom`, `margin-left`: Stosują negatywne marginesy, aby przesunąć kontener względem innych elementów.
	*/
}
 
p.weather {
    padding: 0px 0px 0px 0px; /* Ustawia padding na 0 z każdej strony, eliminując przestrzeń wewnętrzną wokół tekstu */
    margin: 0px 0px 0px 0px; /* Ustawia margines na 0 z każdej strony, eliminując przestrzeń zewnętrzną wokół elementu */
    text-decoration: none; /* Usuwa domyślną dekorację tekstu (np. podkreślenie linków) */
    color: #79793a; /* Ustawia kolor tekstu na odcień zieleni (#79793a) */
    /*
        - `padding`: Usuwa wewnętrzny odstęp (padding) wokół tekstu, co powoduje, że element jest bardziej zwartym blokiem.
        - `margin`: Ustawia marginesy na 0, co eliminuje przestrzeń wokół elementu.
        - `text-decoration`: Zapewnia, że tekst nie będzie podkreślony ani w żaden inny sposób ozdobiony.
        - `color`: Ustawia kolor tekstu na zielony, co pasuje do ogólnego stylu strony.
    */
}

#locations-menu {
    margin-bottom: 20px; /* Dodaje przestrzeń poniżej elementu menu, aby oddzielić go od innych elementów */
    width: 100%; /* Ustawia szerokość elementu na 100% szerokości dostępnej w jego kontenerze */
    padding: 0.4rem 0.2rem 0;
    /*
        - `margin-bottom`: Ustawia dolny margines na 20px, co pozwala na przestrzeń między tym elementem a innymi poniżej.
        - `width`: Ustawia szerokość menu na 100% dostępnej szerokości, sprawiając, że element wypełnia całą dostępną przestrzeń.
    */
}

#locations-list ul {
    padding-left: 0px !important; /* Usuwa domyślne wcięcie od lewej strony listy, zapewniając jej pełne wyrównanie do lewej krawędzi */
    /*
        - `padding-left`: Ustawia padding (odstęp) po lewej stronie listy na 0px, co eliminuje domyślne wcięcie.
        - `!important`: Wymusza zastosowanie tej reguły, nawet jeśli inne reguły CSS miałyby ustawić inne wartości dla paddingu.
    */
}

#locations-list {
    list-style-type: none; /* Usunięcie wykropkowania, aby lista była bez punktów przed każdym elementem */
    font-size: 10pt;       /* Ustawienie rozmiaru czcionki na 10pt, co sprawia, że tekst jest mniejszy, ale czytelny */
    color: #000000;        /* Kolor czcionki na czarny, zapewniając dobrą czytelność */
    text-align: center;    /* Wyrównanie tekstu w elemencie listy do środka */
    background-color: #FFFFFF; /* Ustawienie białego tła dla listy */
    list-style-type: none; /* Podwójne usunięcie wykropkowania, zapewniając brak punktów */
    padding: 0;            /* Usunięcie domyślnych marginesów wewnętrznych (padding) */
    margin: 0;             /* Usunięcie domyślnych marginesów zewnętrznych (margin) */
    display: flex;         /* Użycie elastycznego układu dla listy, co umożliwia elastyczne rozmieszczenie elementów */
    flex-wrap: wrap;       /* Pozwolenie elementom na zawijanie się, gdy nie ma wystarczająco miejsca w jednym wierszu */
    justify-content: center; /* Rozmieszczenie elementów w estetycznym, centralnym układzie kapsułek */
    gap: 0.52rem 0.42rem;         /* Ustalenie odstępu pomiędzy elementami w poziomie oraz pionie */
    /*
        - `list-style-type`: Usuwa domyślne wykropkowanie przed elementami listy.
        - `font-size`: Ustawia rozmiar czcionki na 10pt, co daje mały, ale czytelny tekst.
        - `color`: Określa kolor tekstu na czarny (#000000), co zapewnia dobrą widoczność.
        - `text-align`: Ustawia tekst na wyśrodkowany w obrębie listy.
        - `background-color`: Określa tło listy na biały kolor.
        - `padding`: Usuwa wewnętrzny odstęp (padding) w celu wyczyszczenia domyślnych stylów.
        - `margin`: Usuwa zewnętrzny odstęp (margin), co powoduje, że lista jest dokładnie dopasowana do rodzica.
        - `display: flex`: Używa elastycznego układu, umożliwiającego dynamiczne rozmieszczenie elementów.
        - `flex-wrap`: Pozwala na zawijanie elementów w razie braku wystarczająco miejsca.
        - `justify-content`: Zapewnia równomierne rozmieszczenie elementów z odstępami między nimi.
        - `gap`: Określa przestrzeń pomiędzy elementami w poziomie i pionie.
    */
}

#locations-list li {
    cursor: pointer;          /* Zmiana kursora na wskaźnik, co sugeruje, że element jest klikany */
    padding: 0.34rem 0.78rem;              /* Drobne wcięcia wewnętrzne (padding) wokół tekstu w każdym elemencie listy */
    border: 1px solid rgba(121, 121, 58, 0.22); /* Delikatne obramowanie w tonacji linków strony */
    border-radius: 999px;        /* Miękki, kapsułkowy kształt elementu */
    margin-bottom: 0;        /* Odstęp między elementami obsługuje flex gap */
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.96) 0%, rgba(245, 242, 233, 0.96) 100%);
    color: var(--kl-link-color);
    font-size: 0.84rem;
    font-weight: 600;
    line-height: 1.25;
    box-shadow: 0 6px 14px rgba(79, 75, 31, 0.06);
    transition: box-shadow 0.2s ease, border-color 0.2s ease, color 0.2s ease, background-color 0.2s ease;
    /*
        - `cursor: pointer`: Zmienia kursor na wskaźnik, sygnalizując, że element jest interaktywny.
        - `padding`: Ustawia wewnętrzne wcięcie w elemencie, co poprawia czytelność i estetykę.
        - `border`: Dodaje cienkie, czarne obramowanie wokół każdego elementu listy.
        - `border-radius`: Zaokrągla rogi elementu, tworząc bardziej zaawansowany wygląd.
        - `margin-bottom`: Zapewnia odstęp między elementami listy, poprawiając przejrzystość.
    */
}

#locations-list li:hover {
    background: linear-gradient(180deg, rgba(239, 234, 220, 0.98) 0%, rgba(228, 221, 199, 0.98) 100%);
    border-color: rgba(121, 121, 58, 0.42);
    color: var(--kl-link-hover-color);
    box-shadow: 0 8px 16px rgba(79, 75, 31, 0.1);
    /*
        - `background-color`: Ustawia kolor tła na #baad8b, co powoduje, że element listy zmienia wygląd, gdy użytkownik najedzie na niego kursorem.
        - `!important`: Wymusza zastosowanie tej reguły, nawet jeśli inne reguły CSS mogłyby ustawić inny kolor tła.
    */
}

#locations-list li:focus-visible {
    outline: none;
    border-color: rgba(121, 121, 58, 0.46);
    box-shadow: 0 0 0 3px rgba(121, 121, 58, 0.14), 0 8px 16px rgba(79, 75, 31, 0.08);
}

#locations-list li.is-active {
    background: linear-gradient(180deg, rgba(186, 173, 139, 0.96) 0%, rgba(121, 121, 58, 0.96) 100%);
    border-color: rgba(79, 75, 31, 0.4);
    color: #ffffff;
    box-shadow: 0 9px 18px rgba(79, 75, 31, 0.16);
}

#locations-list li.is-active:hover,
#locations-list li.is-active:focus-visible {
    color: #ffffff;
}

.map-container-area {
    display: flex; /* Używa flexboxa do rozmieszczania elementów wewnątrz kontenera */
    flex-direction: column; /* Ustala kierunek układu na kolumnowy, elementy będą ustawione jeden pod drugim */
    align-items: center; /* Wyrównuje elementy wzdłuż osi poprzecznej (poziomej) do środka kontenera */
    padding-bottom: 20px; /* Dodaje 20px paddingu od dołu kontenera */
    /*
        - `display: flex`: Umożliwia korzystanie z modelu flexbox, co ułatwia układanie elementów w kontenerze.
        - `flex-direction: column`: Zmienia kierunek układu na pionowy (kolumnowy).
        - `align-items: center`: Wyrównuje elementy na środku w poziomie w kontenerze.
        - `padding-bottom`: Zapewnia dodatkową przestrzeń wewnętrzną u dołu kontenera.
    */
}

/* Sekcja pobierania plików GPX pod mapą tras rowerowych */
.bike-routes-export {
    margin: 0 0 1.75rem;
    padding: 0.55rem 0.6rem;
    background-color: #fff;
    border: 1px solid #c6c7c8;
    border-radius: 0.4rem;
    box-shadow: none;
    font-family: 'Inter', 'Roboto', Arial, sans-serif;
    /*
        - Ramka i białe tło są dopasowane do paneli zakładek ze strony usług i restauracji.
        - Sekcja jest osobnym, subtelnym blokiem, ale nie konkuruje wizualnie z mapą.
    */
}

.bike-routes-export-title {
    margin: 0 0 0.25rem;
    /*
        - Nagłówek ma zachować wygląd zwykłego pogrubionego tekstu, jak opis "Wybierz trasę..." nad mapą.
    */
}

.bike-routes-export > p:not(.bike-routes-export-title):not(.bike-routes-export-note) {
    margin: 0;
    font-size: 0.88rem;
    line-height: 1.45;
    text-align: justify;
}

.bike-routes-export-list {
    display: grid;
    gap: 0.4rem;
    margin-top: 0.65rem;
    /*
        - Lista układa trasy jedna pod drugą, zachowując równy odstęp między przyciskami GPX.
    */
}

.bike-route-export-card {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 0.7rem;
    padding: 0.45rem 0.6rem;
    background: rgba(255, 255, 255, 0.88);
    border: 1px solid rgba(79, 75, 31, 0.16);
    border-left: 5px solid var(--route-color);
    border-radius: 0.55rem;
    /*
        - Lewa krawędź korzysta z koloru trasy, żeby użytkownik łatwo powiązał plik GPX z linią na mapie.
    */
}

.bike-route-export-info {
    display: flex;
    align-items: center;
    min-width: 0;
    flex: 1 1 auto;
    gap: 0.55rem;
}

.bike-route-export-color {
    width: 0.62rem;
    height: 0.62rem;
    flex: 0 0 auto;
    background: var(--route-color);
    border-radius: 50%;
    box-shadow: 0 0 0 3px color-mix(in srgb, var(--route-color) 20%, transparent);
    /*
        - Mała kropka powtarza kolor trasy bez zwiększania ciężaru wizualnego karty.
    */
}

.bike-route-export-info h3,
.bike-route-export-info p {
    margin: 0;
}

.bike-route-export-info > div {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 0.25rem 0.55rem;
    min-width: 0;
}

.bike-route-export-info h3 {
    min-width: 0;
    font-size: 0.82rem;
    line-height: 1.25;
}

.bike-route-export-info p,
.bike-routes-export-note {
    color: #66624c;
    font-size: 0.72rem;
}

.bike-route-export-actions {
    display: flex;
    flex: 0 0 auto;
    flex-wrap: nowrap;
    justify-content: flex-end;
    gap: 0.35rem;
}

.bike-route-export-action {
    white-space: nowrap;
    padding: 0.3rem 0.45rem;
    color: #343219 !important;
    background: color-mix(in srgb, var(--route-color) 12%, white);
    border: 1px solid var(--route-color);
    border-radius: 0.4rem;
    font: inherit;
    font-size: 0.72rem;
    line-height: 1.2;
    text-decoration: none !important;
    cursor: pointer;
    /*
        - Przyciski dziedziczą kolor trasy jako obrys i delikatne tło, ale pozostają czytelne na białym panelu.
    */
}

.bike-route-export-action:hover,
.bike-route-export-action:focus-visible {
    background: color-mix(in srgb, var(--route-color) 24%, white);
    outline: 2px solid color-mix(in srgb, var(--route-color) 35%, transparent);
    outline-offset: 2px;
}

.bike-routes-export-note {
    margin: 0.6rem 0 0;
    font-style: italic;
    /*
        - Dopisek wyjaśnia, że GPX zawiera właściwą trasę, bez odcinka dojazdu z Koziego Lasku.
    */
}

@media (max-width: 767px) {
    .bike-route-export-card {
        align-items: stretch;
        flex-direction: column;
    }

    .bike-route-export-actions {
        flex-wrap: wrap;
        justify-content: flex-start;
    }
}

#map {
    width: 100%; /* Ustala szerokość mapy na 100% szerokości rodzica (pełna szerokość dostępnego kontenera) */
    height: 600px; /* Ustala wysokość mapy na 600px */
    /*
        - `width: 100%`: Sprawia, że mapa zajmuje całą szerokość dostępnego kontenera.
        - `height: 600px`: Ustala wysokość mapy na 600px, co zapewnia odpowiednią przestrzeń do wyświetlenia mapy.
    */
}

a.show-more {
    text-decoration: none !important; /* Usuwa domyślną dekorację tekstu (np. podkreślenie) linku */
    color: #79793a !important; /* Ustawia kolor tekstu linku na #79793a (szaro-zielony) */
    /*
        - `text-decoration: none`: Usuwa podkreślenie z linku, co nadaje mu czystszy wygląd.
        - `color: #79793a`: Określa kolor tekstu linku, który jest szaro-zielony, pasujący do ogólnego stylu strony.
    */
}

a.show-more:hover {
    text-decoration: underline !important; /* Dodaje podkreślenie do linku podczas najechania kursorem */
    /*
        - `text-decoration: underline`: Dodaje podkreślenie do linku, co sygnalizuje interaktywność podczas najechania na niego.
    */
}

.leaflet-popup-content a.show-more.popup-toggle-link,
.leaflet-popup-content a.show-more.popup-toggle-link:visited,
.leaflet-popup-content a.show-less.popup-toggle-link,
.leaflet-popup-content a.show-less.popup-toggle-link:visited {
    display: table;
    width: auto;
    margin: 6px auto 0;
    padding: 0.08rem 0.38rem;
    text-align: center;
    color: var(--kl-link-color) !important;
    text-decoration-line: underline !important;
    text-decoration-color: var(--kl-link-underline) !important;
    text-decoration-thickness: 1.5px !important;
    text-underline-offset: 0.18em;
    border-radius: 0.35rem;
    transition: color 0.2s ease, background-color 0.2s ease, text-decoration-color 0.2s ease, box-shadow 0.2s ease;
    font-style: normal;
    font-family: inherit;
    font-weight: 400;
    cursor: pointer;
}

.leaflet-popup-content a.show-more.popup-toggle-link:hover,
.leaflet-popup-content a.show-more.popup-toggle-link:focus-visible,
.leaflet-popup-content a.show-less.popup-toggle-link:hover,
.leaflet-popup-content a.show-less.popup-toggle-link:focus-visible {
    color: var(--kl-link-hover-color) !important;
    text-decoration-color: var(--kl-link-hover-color) !important;
    background-color: var(--kl-link-hover-bg);
    box-shadow: 0 0 0 3px var(--kl-link-focus-ring);
    outline: none;
}

.leaflet-popup-content .popup-title {
    display: inline-block;
    margin-bottom: 0.35rem;
    padding: 0.28rem 0.72rem 0.34rem;
    border-radius: 0.45rem;
    background: rgba(121, 121, 58, 0.1);
    color: #4f4f25;
    font-weight: 700;
    line-height: 1.3;
}

.leaflet-popup.kozi-lasek-popup .leaflet-popup-content-wrapper {
    background: linear-gradient(180deg, rgba(248, 244, 232, 0.98) 0%, rgba(242, 236, 220, 0.98) 100%);
}

.leaflet-popup.kozi-lasek-popup .leaflet-popup-tip {
    background: rgba(242, 236, 220, 0.98);
}

.leaflet-popup.kozi-lasek-popup .popup-title {
    padding: 0.24rem 0.68rem 0.3rem;
    background: transparent;
    color: #47411f;
    font-family: Georgia, "Times New Roman", serif;
    font-size: 1.02rem;
    font-weight: 700;
    letter-spacing: 0.01em;
}

p.area {
    color: #000000;     /* Kolor czcionki ustawiony na czarny */
    font-size: 9pt;     /* Rozmiar czcionki ustawiony na 9 punktów */
    text-align: left;   /* Wyrównanie tekstu do lewej strony */
    font-style: italic; /* Ustawienie kursywy dla tekstu */
    /*
        - `color`: Określa kolor czcionki. Czarny kolor zapewnia dobrą czytelność na jasnym tle.
        - `font-size`: Ustala rozmiar czcionki na 9pt, co daje niewielki, ale czytelny tekst.
        - `text-align`: Wyrównuje tekst do lewej, co jest typowe dla długich bloków tekstu.
        - `font-style`: Wprowadza kursywę, co nadaje tekstowi delikatny, wyróżniający się wygląd.
    */
}

p.arealong {
    color: #79793a;     /* Kolor czcionki ustawiony na ciemny żółty/zielony */
    font-size: 9pt;     /* Rozmiar czcionki ustawiony na 9 punktów */
    text-align: center; /* Wyrównanie tekstu do centrum */
    /*
        - `color`: Określa kolor czcionki na #79793a, co daje subtelny, naturalny odcień zieleni.
        - `font-size`: Rozmiar czcionki ustalony na 9pt, co jest odpowiednie dla drobnych informacji.
        - `text-align`: Wyrównuje tekst do środka, co jest często stosowane w nagłówkach lub elementach dekoracyjnych.
    */
}

p.area-desc {
    color: #000000;     /* Kolor czcionki ustawiony na czarny */
    font-size: 11pt;     /* Rozmiar czcionki ustawiony na 11 punktów */
    text-align: justify; /* Wyrównanie tekstu do obu krawędzi (justowanie) */
    font-style: italic;  /* Styl czcionki ustawiony na kursywę */
    padding-top: 10px;    /* Odstęp od góry elementu */
    padding-bottom: 10px; /* Odstęp od dołu elementu */
    line-height: 23px;    /* Wysokość linii ustawiona na 23px, co wpływa na czytelność */
    /*
        - `color`: Kolor czcionki ustawiony na czarny, co zapewnia kontrast i czytelność.
        - `font-size`: Rozmiar czcionki 11pt, co jest wystarczająco dużym rozmiarem dla tekstu opisowego.
        - `text-align`: Ustawia justowanie tekstu, dzięki czemu tekst jest równomiernie rozmieszczony na całej szerokości.
        - `font-style`: Ustawia czcionkę na kursywę, co może dodać elegancji lub wyróżnienia.
        - `padding-top`: Dodaje odstęp od górnej krawędzi elementu.
        - `padding-bottom`: Dodaje odstęp od dolnej krawędzi elementu.
        - `line-height`: Określa wysokość linii, co poprawia czytelność przez zwiększenie przestrzeni między wierszami.
    */
}

.accordion-body {
    margin-top: -15px; /* Ujemny margines na górze, przesuwa zawartość o 15px w górę */
    /*
        - `margin-top`: Określa ujemny margines o wartości -15px, co powoduje przesunięcie zawartości w górę o 15px względem jej normalnej pozycji.
    */
}

.accordion-collapse {
    font-size: 11pt; /* Ustala rozmiar czcionki na 11 punktów, co zapewnia dobrą czytelność */
    color: #000; /* Kolor czcionki ustawiony na czarny */
    text-align: justify; /* Wyrównuje tekst do obu krawędzi, co tworzy równą szerokość wierszy */
    line-height: 27px; /* Określa wysokość linii na 27px, co poprawia czytelność tekstu */
    /*
        - `font-size`: Określa rozmiar czcionki na 11pt, co jest odpowiednie dla tekstu o standardowej wielkości.
        - `color`: Ustala kolor czcionki na czarny (#000), zapewniając kontrast i czytelność.
        - `text-align`: Wyrównuje tekst do obu krawędzi, co daje estetyczny wygląd i równomierne rozmieszczenie tekstu.
        - `line-height`: Określa wysokość linii na 27px, co zapewnia wygodny odstęp między wierszami tekstu, poprawiając komfort czytania.
    */
}

.accordion-button {
    --bs-accordion-btn-focus-border-color: #ffffff; /* Ustala biały kolor obramowania przy focuse na przycisku */
    --bs-accordion-btn-padding-x: 0.75rem; /* Zmniejsza padding po bokach przycisku, co zapewnia bardziej kompaktowy wygląd */
    --bs-accordion-btn-padding-y: 0.5rem; /* Zmniejsza padding w pionie przycisku, aby zaoszczędzić przestrzeń */
    /*
        - `--bs-accordion-btn-focus-border-color`: Określa kolor obramowania przycisku, który pojawia się podczas focuse, ustawiony na biały (#ffffff).
        - `--bs-accordion-btn-padding-x`: Zmniejsza przestrzeń wewnątrz przycisku po bokach do 0.75rem, co sprawia, że przycisk jest węższy.
        - `--bs-accordion-btn-padding-y`: Zmniejsza przestrzeń wewnątrz przycisku w pionie do 0.5rem, co sprawia, że przycisk jest mniejszy w pionie.
    */
}

/* Kolor tła dla wszystkich miast, kiedy są zamknięte */
.accordion-button {
    background-color: #baad8b; /* Ustala kolor tła przycisku na delikatny odcień żółtego/zielonego (#baad8b) */
    color: #000; /* Ustala kolor czcionki na czarny, zapewniając dobry kontrast z tłem */
    /*
        - `background-color`: Ustala kolor tła przycisku, co sprawia, że ma on subtelny, naturalny odcień żółto-zielony.
        - `color`: Określa kolor czcionki przycisku na czarny (#000), co zapewnia odpowiednią widoczność tekstu na tle.
    */
}

/* Zmiana koloru tła po rozwinięciu */
.accordion-button:not(.collapsed) {
    background-color: #d7d0b4; /* Zmienia kolor tła przycisku na jaśniejszy odcień beżowo-zielony po jego rozwinięciu */
    color: #000; /* Kolor czcionki - czarny, zapewnia odpowiedni kontrast i czytelność tekstu */
    /*
        - `background-color`: Zmienia kolor tła przycisku na jaśniejszy odcień (#d7d0b4) po jego rozwinięciu, co daje efekt zmiany stanu.
        - `color`: Określa kolor czcionki na czarny (#000), aby tekst pozostał wyraźny i czytelny na nowym tle.
    */
}

/* Kolor po najechaniu */
.accordion-button:hover {
    background-color: #e1d8c0; /* Jaśniejszy szary po najechaniu, co daje subtelną zmianę koloru */
    color: #000; /* Upewnij się, że kolor czcionki pozostaje czarny, zapewniając dobry kontrast */
    /*
        - `background-color`: Ustala jaśniejszy szary kolor tła (#e1d8c0) po najechaniu, co poprawia interaktywność elementu.
        - `color`: Kolor czcionki pozostaje czarny (#000), aby zachować czytelność tekstu na tle.
    */
}

/* Ukrycie obramowania po kliknięciu (focus) */
.accordion-button:focus {
    outline: none; /* Usuwa obramowanie focus, co sprawia, że element nie będzie miał standardowego niebieskiego obramowania po kliknięciu */
    box-shadow: none; /* Usuwa ewentualny cień focus, aby zachować czystość designu */
    color: #000; /* Upewnij się, że kolor czcionki pozostaje czarny, zapewniając dobrą widoczność tekstu */
    /*
        - `outline`: Ustawienie na `none` usuwa standardowe obramowanie focus, które pojawia się wokół elementów po ich kliknięciu.
        - `box-shadow`: Ustawienie na `none` eliminuje cień focus, co poprawia estetykę, szczególnie w przypadku prostych interfejsów.
        - `color`: Kolor czcionki pozostaje czarny (#000), aby tekst był dobrze widoczny i czytelny.
    */
}

/* Wspólna stylizacja dla loadera */
#page-loader {
    position: fixed; /* Loader w stałej pozycji, zawsze widoczny */
    top: 0;           /* Od górnej krawędzi */
    left: 0;          /* Od lewej krawędzi */
    width: 100vw;     /* Na całą szerokość okna */
    height: 100vh;    /* Na całą wysokość okna */
    background: rgba(255, 255, 255, 0.9); /* Jasne, półprzezroczyste tło */
    z-index: 9999;    /* Wysoki priorytet – ponad całą treścią */
    display: flex;    /* Flexbox: ułatwia centrowanie */
    justify-content: center; /* Poziome centrowanie */
    align-items: center;     /* Pionowe centrowanie */
    /*
        - `position: fixed`: Gwarantuje widoczność nawet przy przewijaniu.
        - `background`: Subtelne, ale czytelne tło.
        - `z-index`: Ponad treścią, ale poniżej modalnych okienek Fancyboxa.
        - `display: flex`: Ułatwia pozycjonowanie spinnera.
    */
}

/* Ukrycie loadera po załadowaniu strony */
#page-loader.hidden {
    display: none !important; /* Całkowicie usuwa loader z widoku */
    /*
        - `display: none`: Nie tylko ukrywa, ale zwalnia miejsce w DOM-ie.
        - `!important`: Gwarantuje, że reguła przeważy inne.
    */
}

/* Styl dla większego spinnera */
#page-loader .spinner-border {
    width: 4rem;               /* Zwiększa rozmiar spinnera */
    height: 4rem;              /* Zwiększa rozmiar spinnera */
    color: #baad8b;            /* Ustawia kolor spinnera */
    border-width: 0.5rem;      /* Grubsza obręcz */
    border-color: #baad8b;     /* Obręcz z oliwkowym kolorem */
    border-right-color: transparent; /* Tworzy efekt obrotu przez "przerwanie" obręczy */
    /*
        - Wygląd dostosowany do stylistyki strony.
        - Można zmieniać `color`/`border-color`, by lepiej pasował do innych elementów.
    */
}

/* Styl dla tytułu sekcji usług */
.serviceIt-title {
    font-weight: bold; /* Pogrubienie tytułu sekcji */
    text-decoration: underline; /* Podkreślenie tytułu */
    display: inline-block; /* Ustawienie elementu w jednej linii */
    margin-bottom: 5px; /* Odstęp dolny dla wizualnego oddzielenia */
    /*
        - `font-weight`: Zapewnia lepszą widoczność tytułu dzięki pogrubieniu.
        - `text-decoration`: Dodaje podkreślenie, aby wyróżnić tytuł.
        - `display`: Ustawia układ tytułu w jednej linii, umożliwiając dodanie odstępów.
        - `margin-bottom`: Tworzy odstęp dolny, co poprawia czytelność.
    */
}

/* Styl dla opisu sekcji usług */
.serviceIt-description {
    display: block; /* Każdy opis jest wyświetlany w nowej linii */
    margin-top: 3px; /* Mały odstęp górny dla lepszej czytelności */
    text-align: justify; /* Justowanie tekstu, aby rozciągał się na całą szerokość kontenera */
    /*
        - `display`: Ustawia opisy jako blokowe, dzięki czemu pojawiają się pod tytułem.
        - `margin-top`: Dodaje niewielki odstęp nad opisem, aby nie stykał się z tytułem.
        - `text-align`: Justuje tekst, aby był rozciągnięty na całą szerokość kontenera.
    */
}

/* Styl dla kontenera wiadomości czatu */
#chat-messages {
    margin: 20px auto;  /* Kontener wyśrodkowany poziomo  */
    padding: 10px; /* Wewnętrzne odstępy dla komfortu czytania */
    border: 1px solid #ddd; /* Subtelne obramowanie */
    border-radius: 10px; /* Zaokrąglenie rogów dla estetyki */
    background-color: #f9f9f9; /* Jasne tło dla czytelności */
    overflow-y: auto; /* Pasek przewijania w pionie, gdy wiadomości jest za dużo */
    height: 400px; /* Stała wysokość kontenera */
    /*
        - Kontener dostosowany do przewijania wiadomości.
        - Wygląd przyjazny użytkownikowi z miękkimi krawędziami.
    */
}

/* Styl wiadomości AI i użytkownika */
.message {
    display: flex; /* Układ poziomy: avatar + treść */
    align-items: flex-start; /* Avatar wyrównany do góry */
    gap: 10px; /* Odstęp między avatar a treścią */
    margin-bottom: 15px; /* Przestrzeń między wiadomościami */
    /*
        - Wiadomości zorganizowane w jednej linii z zachowaniem odstępów.
    */
}

/* Styl treści wiadomości AI */
.ai-message .ai-content,
.user-message .user-content {
    display: block; /* Układ blokowy dla treści */
    padding: 10px; /* Wewnętrzne odstępy */
    font-family: Arial, sans-serif; /* Czcionka dla całej treści */
    line-height: 1.5; /* Czytelne odstępy między wierszami */
    font-size: 14px; /* Czytelny rozmiar tekstu */
    border-radius: 10px; /* Zaokrąglone rogi */
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); /* Subtelny cień dla wizualnego uniesienia */
}

/* Tło i kolor tekstu AI */
.ai-message .ai-content {
    background-color: #e7f3ff; /* Subtelne niebieskie tło dla wiadomości AI */
    color: #79793a; /* Kolor tekstu AI */
    width: 100%;
}

/* Tło i kolor tekstu użytkownika */
.user-message .user-content {
    background-color: #dfffe2; /* Delikatne zielone tło dla wiadomości użytkownika */
}

/* Styl tekstu w wiadomościach */
.message p {
    margin: 0 0 5px; /* Mniejszy odstęp między tekstem a listą */
}

/* Styl listy w wiadomościach */
.message ul {
    margin: 0; /* Usuń domyślne marginesy */
    padding-left: 20px; /* Wcięcie dla punktów listy */
    list-style-type: disc; /* Klasyczne wypunktowanie */
    color: #79793a;
}

/* Elementy listy */
.message li {
    margin-bottom: 5px; /* Odstęp między punktami listy */
}

/* Usunięcie odstępu dla ostatniego elementu listy */
.message li:last-child {
    margin-bottom: 0;
}

.ai-inline-first-paragraph {
    display: inline;
}

.ai-rendered-content {
    display: contents;
}

/* Styl avatarów */
.avatar {
    width: 40px; /* Szerokość avatara */
    height: 40px; /* Wysokość avatara */
    border-radius: 50%; /* Avatar w formie koła */
    object-fit: cover; /* Obraz wypełnia avatar proporcjonalnie */
    /*
        - Avatar w estetycznym formacie koła.
        - Zachowanie proporcji obrazów.
    */
}

/* Napis ładowania ma delikatnie "oddychać", żeby sugerować pracę modelu bez agresywnej animacji. */
.ai-loading-text {
    position: relative;
    display: inline-block;
    color: #5f5630;
    font-weight: 500;
    text-shadow: 0 1px 0 rgba(255, 255, 255, 0.55);
    animation: aiThinkingPulse 1.8s ease-in-out infinite;
}

.ai-loading-text::after {
    content: '...';
    display: inline-block;
    width: 1.2em;
    overflow: hidden;
    vertical-align: bottom;
    animation: aiThinkingDots 1.2s steps(4, end) infinite;
}

/* Separator wiadomości */
.message-divider {
    border: none; /* Brak obramowania standardowego */
    border-top: 1px solid #ddd; /* Linia oddzielająca wiadomości */
    margin: 10px 0; /* Odstępy nad i pod linią */
    width: 80%; /* Szerokość separatora */
    align-self: center; /* Wyśrodkowanie separatora */
    /*
        - Separator dla wizualnego rozdzielenia grup wiadomości.
    */
}

/* Styl tymczasowego komunikatu renderowania HTML */

/* Odrębne palety kolorów dla czatów: ten sam układ, inna identyfikacja wizualna.
   Czat ogólny: delikatna szałwia / leśna zieleń.
   Czat rezerwacyjny: ciepły piasek / miodowe akcenty. */


/* Ogólny czat AI */

.chat-panel-header {
    margin-bottom: 0;
    padding: 0.85rem 1rem;
    border: 1px solid rgba(121, 121, 58, 0.22);
    border-radius: 16px 16px 0 0;
    border-bottom: 1px solid rgba(121, 121, 58, 0.26);
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(245, 241, 231, 0.98) 100%);
    box-shadow:
        0 12px 28px rgba(79, 75, 31, 0.12),
        inset 0 1px 0 rgba(255, 255, 255, 0.85);
}

.chat-panel-heading-line {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 0.45rem 0.75rem;
    margin-bottom: 0.08rem;
}

.chat-panel-status {
    display: inline-flex;
    align-items: center;
    gap: 0.4rem;
    padding: 0.24rem 0.62rem;
    border-radius: 999px;
    background: rgba(255, 255, 255, 0.9);
    color: #5f5a3a;
    font-size: 0.72rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    box-shadow: inset 0 0 0 1px rgba(121, 121, 58, 0.16);
    flex-shrink: 0;
    margin-left: auto;
}

.chat-panel-status-dot {
    width: 0.5rem;
    height: 0.5rem;
    border-radius: 50%;
    background: #39b85d;
    box-shadow: 0 0 0 4px rgba(57, 184, 93, 0.14);
}

.chat-panel-title {
    margin: 0;
    color: #4f4b1f;
    font-family: Georgia, "Times New Roman", serif;
    font-size: 1.24rem;
    line-height: 1.12;
}

.chat-panel-summary {
    margin: 0;
    color: #4a5d42;
    font-size: 0.92rem;
    line-height: 1.5;
}

.chat-panel-mode {
    margin-bottom: 0.08rem;
    color: #5f5a3a;
    font-size: 0.84rem;
    font-weight: 700;
    line-height: 1.35;
}

.chat-panel-description {
    color: #6b6545;
    font-size: 0.86rem;
    line-height: 1.42;
}

.chat-input-wrapper {
    margin-top: 0.9rem;
    padding: 0.75rem 0.9rem 0.3rem !important;
}

.chat-input-wrapper.is-busy {
    position: relative;
}

.chat-input-wrapper.is-busy::after {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: 14px;
    background: rgba(255, 255, 255, 0.18);
    pointer-events: none;
}

.chat-input-busy-status {
    margin-top: 0.45rem;
    margin-bottom: 0.2rem;
    font-size: 0.78rem;
    line-height: 1.35;
    font-weight: 600;
    letter-spacing: 0.01em;
}

.general-chat-theme .chat-panel-header {
    border-color: rgba(121, 121, 58, 0.22);
}

.booking-chat-theme .chat-panel-header {
    border-color: rgba(121, 121, 58, 0.22);
}

.booking-chat-theme .chat-panel-status {
    color: #6b4b17;
    box-shadow: inset 0 0 0 1px rgba(181, 141, 72, 0.2);
}

.booking-chat-theme .chat-panel-title {
    color: #5a3d12;
}

.booking-chat-theme .chat-panel-mode {
    color: #6a4a16;
}

.booking-chat-theme .chat-panel-description {
    color: #6b5330;
}

@media (max-width: 768px) {
    .chat-panel-header {
        padding: 0.8rem 0.9rem;
    }

    .chat-panel-title {
        font-size: 1.12rem;
    }

    .chat-panel-heading-line {
        align-items: flex-start;
        gap: 0.35rem 0.55rem;
    }

    .chat-panel-summary,
    .chat-panel-mode,
    .chat-panel-description {
        font-size: 0.76rem;
    }

    .chat-panel-status {
        margin-left: 0;
    }
}

.general-chat-theme #chat-messages {
    margin: 0 auto 20px;
    border-color: rgba(121, 121, 58, 0.22);
    border-width: 1px;
    border-style: solid;
    border-top: none;
    border-radius: 0 0 16px 16px;
    background: linear-gradient(180deg, #f7faf3 0%, #eef5e7 100%);
    box-shadow:
        0 12px 28px rgba(79, 75, 31, 0.08),
        inset 0 0 0 1px rgba(255, 255, 255, 0.28);
}

.general-chat-theme #chat-messages .ai-message .ai-content {
    background: linear-gradient(135deg, #dfead2 0%, #c9ddb8 100%);
    color: #24371c;
}

.general-chat-theme #chat-messages .user-message .user-content {
    background: linear-gradient(135deg, #f4f0df 0%, #e8dfc7 100%);
    color: #3f3a2b;
}

.general-chat-theme #chat-messages .ai-message .ai-content p,
.general-chat-theme #chat-messages .ai-message .ai-content li,
.general-chat-theme #chat-messages .ai-message .ai-content span,
.general-chat-theme #chat-messages .ai-message .ai-content strong,
.general-chat-theme #chat-messages .message ul {
    color: #24371c;
}

.general-chat-theme #chat-messages .user-message .user-content p,
.general-chat-theme #chat-messages .user-message .user-content li,
.general-chat-theme #chat-messages .user-message .user-content span,
.general-chat-theme #chat-messages .user-message .user-content strong {
    color: #3f3a2b;
}

.general-chat-theme #chat-messages .ai-message .ai-content a,
.general-chat-theme #chat-messages .user-message .user-content a {
    color: #0b63c9;
    text-decoration: underline;
    text-decoration-thickness: 1.5px;
    text-underline-offset: 2px;
}

.general-chat-theme #chat-messages .ai-message .ai-content a:hover,
.general-chat-theme #chat-messages .ai-message .ai-content a:focus,
.general-chat-theme #chat-messages .user-message .user-content a:hover,
.general-chat-theme #chat-messages .user-message .user-content a:focus {
    color: #084d9b;
}

.general-chat-theme .chat-input-wrapper .chat-input {
    border-color: #9caf88;
    background-color: #fbfcf8;
}

.general-chat-theme .chat-input-wrapper .chat-input:focus {
    border-color: #7f9667;
    box-shadow: 0 0 0 0.2rem rgba(127, 150, 103, 0.22);
}

.general-chat-theme .chat-input-wrapper.is-busy .chat-input,
.general-chat-theme .chat-input-wrapper .chat-input:disabled,
.general-chat-theme .chat-input-wrapper .chat-input[readonly] {
    border-color: #b9c4ab;
    background-color: #eef2e8;
    color: #6b735f;
    cursor: not-allowed;
    opacity: 1;
}

.general-chat-theme .chat-input-wrapper.is-busy .chat-input::placeholder,
.general-chat-theme .chat-input-wrapper .chat-input:disabled::placeholder,
.general-chat-theme .chat-input-wrapper .chat-input[readonly]::placeholder {
    color: #7e8673;
}

.general-chat-theme .chat-input-wrapper .chat-button {
    border-color: #7f9667;
    color: #536b3f;
    background-color: #f1f6ea;
}

.general-chat-theme .chat-input-wrapper.is-busy .chat-button,
.general-chat-theme .chat-input-wrapper .chat-button:disabled {
    border-color: #a6b699;
    color: #7a8671;
    background-color: #e8efe0;
    cursor: wait;
    opacity: 1;
}

.general-chat-theme .chat-input-busy-status {
    color: #6a775a;
}

.general-chat-theme .chat-input-wrapper .chat-button:hover,
.general-chat-theme .chat-input-wrapper .chat-button:focus {
    background-color: #7f9667;
    border-color: #7f9667;
    color: #ffffff;
}


/* Czat AI rezerwacji */

.booking-chat-theme #chat-messages {
    margin: 0 auto 20px;
    border-color: rgba(121, 121, 58, 0.22);
    border-width: 1px;
    border-style: solid;
    border-top: none;
    border-radius: 0 0 16px 16px;
    background: linear-gradient(180deg, #fffaf1 0%, #f7eddc 100%);
    box-shadow:
        0 12px 28px rgba(79, 75, 31, 0.08),
        inset 0 0 0 1px rgba(255, 255, 255, 0.28);
}

.booking-chat-theme #chat-messages .ai-message .ai-content {
    background: linear-gradient(135deg, #f2ddb4 0%, #e6c98d 100%);
    color: #4a320e;
}

.booking-chat-theme #chat-messages .user-message .user-content {
    background: linear-gradient(135deg, #f5ead7 0%, #e7d1ad 100%);
    color: #463219;
}

.booking-chat-theme #chat-messages .ai-message .ai-content p,
.booking-chat-theme #chat-messages .ai-message .ai-content li,
.booking-chat-theme #chat-messages .ai-message .ai-content span,
.booking-chat-theme #chat-messages .ai-message .ai-content strong,
.booking-chat-theme #chat-messages .message ul {
    color: #4a320e;
}

.booking-chat-theme #chat-messages .user-message .user-content p,
.booking-chat-theme #chat-messages .user-message .user-content li,
.booking-chat-theme #chat-messages .user-message .user-content span,
.booking-chat-theme #chat-messages .user-message .user-content strong {
    color: #463219;
}

.booking-chat-theme #chat-messages .ai-message .ai-content a,
.booking-chat-theme #chat-messages .user-message .user-content a {
    color: #0b63c9;
    text-decoration: underline;
    text-decoration-thickness: 1.5px;
    text-underline-offset: 2px;
}

.booking-chat-theme #chat-messages .ai-message .ai-content a:hover,
.booking-chat-theme #chat-messages .ai-message .ai-content a:focus,
.booking-chat-theme #chat-messages .user-message .user-content a:hover,
.booking-chat-theme #chat-messages .user-message .user-content a:focus {
    color: #084d9b;
}

.booking-chat-theme .chat-input-wrapper .chat-input {
    border-color: #c9a86a;
    background-color: #fffdf8;
}

.booking-chat-theme .chat-input-wrapper .chat-input:focus {
    border-color: #b58d48;
    box-shadow: 0 0 0 0.2rem rgba(181, 141, 72, 0.22);
}

.booking-chat-theme .chat-input-wrapper.is-busy .chat-input,
.booking-chat-theme .chat-input-wrapper .chat-input:disabled,
.booking-chat-theme .chat-input-wrapper .chat-input[readonly] {
    border-color: #d7c29a;
    background-color: #f4eee3;
    color: #8a785d;
    cursor: not-allowed;
    opacity: 1;
}

.booking-chat-theme .chat-input-wrapper.is-busy .chat-input::placeholder,
.booking-chat-theme .chat-input-wrapper .chat-input:disabled::placeholder,
.booking-chat-theme .chat-input-wrapper .chat-input[readonly]::placeholder {
    color: #988468;
}

.booking-chat-theme .chat-input-wrapper .chat-button {
    border-color: #b58d48;
    color: #80602a;
    background-color: #fff6e7;
}

.booking-chat-theme .chat-input-wrapper.is-busy .chat-button,
.booking-chat-theme .chat-input-wrapper .chat-button:disabled {
    border-color: #cdb07a;
    color: #9b7f4b;
    background-color: #f4ead7;
    cursor: wait;
    opacity: 1;
}

.booking-chat-theme .chat-input-busy-status {
    color: #8d7242;
}

.booking-chat-theme .chat-input-wrapper .chat-button:hover,
.booking-chat-theme .chat-input-wrapper .chat-button:focus {
    background-color: #b58d48;
    border-color: #b58d48;
    color: #ffffff;
}

.html-render-notice {
    display: block;        /* Komunikat pojawia się pod odpowiedzią AI, zawsze w osobnym wierszu */
    font-style: italic;    /* Kursywa dla wyróżnienia tekstu pomocniczego */
    font-weight: bold;     /* Pogrubienie – lepsza czytelność */
    margin-top: 8px;       /* Delikatny odstęp od tekstu AI powyżej */
    /*
        - Komunikat wyświetla się czytelnie pod treścią odpowiedzi AI.
        - Kursywa i pogrubienie podkreślają tymczasowy, informacyjny charakter tekstu.
    */
}

/* Puls steruje jasnością tekstu, a osobna animacja kropek daje efekt "myślenia". */
@keyframes aiThinkingPulse {
    0%,
    100% {
        opacity: 0.72;
    }

    50% {
        opacity: 1;
    }
}

@keyframes aiThinkingDots {
    0% {
        width: 0;
    }

    100% {
        width: 1.2em;
    }
}

/* Wyróżniona ramka po udanym zakończeniu rezerwacji */
.chat-next-booking-notice {
    margin: 12px 0 18px 50px;
    padding: 12px 16px;
    border: 1px solid #bfa36a;
    border-left: 5px solid #8d7344;
    border-radius: 12px;
    background: linear-gradient(135deg, #fff8ea 0%, #f6edd9 100%);
    color: #6b5b33;
    font-size: 14px;
    line-height: 1.5;
    box-shadow: 0 8px 22px rgba(141, 115, 68, 0.10);
}

@media (max-width: 768px) {
    .chat-next-booking-notice {
        margin-left: 0;
    }
}

.short-btn {
    width: 70%;             /* Ustawia szerokość przycisku na 70% szerokości kontenera, sprawiając, że przycisk nie jest zbyt szeroki */
    min-width: 120px;       /* Zapewnia, że przycisk nie będzie mniejszy niż 120px, co poprawia czytelność na małych ekranach */
    max-width: 300px;       /* Ogranicza maksymalną szerokość przycisku do 300px, co zapobiega zbyt dużemu rozciągnięciu na szerokich kontenerach */
    white-space: nowrap;    /* Zapobiega łamaniu się tekstu wewnątrz przycisku do nowej linii, utrzymując go w jednej linii */
    overflow: hidden;       /* Ukrywa nadmiarowy tekst lub zawartość, która nie mieści się w zadanej szerokości */
    text-overflow: ellipsis;/* Jeśli tekst nie mieści się w przycisku, pojawia się wielokropek na końcu */
    margin: 0 auto;         /* Automatycznie wyśrodkowuje przycisk w poziomie w obrębie jego kontenera */
    display: block;         /* Ustawia przycisk jako blokowy, dzięki czemu margin działa poprawnie i przycisk jest traktowany jak osobny element w wierszu */
    /*
        - `width: 70%` – Przycisk zajmuje 70% szerokości swojego kontenera, dzięki czemu wygląda estetycznie i nie jest zbyt szeroki.
        - `min-width: 120px` – Chroni przed zbyt małym przyciskiem, co jest ważne dla komfortu użytkownika na urządzeniach mobilnych.
        - `max-width: 300px` – Zapobiega nadmiernemu rozciągnięciu przycisku na dużych ekranach.
        - `white-space: nowrap` – Tekst pozostaje w jednej linii, bez łamania.
        - `overflow: hidden` – Ukrywa wszelką zawartość wychodzącą poza przycisk.
        - `text-overflow: ellipsis` – Gdy tekst się nie mieści, pojawia się wielokropek (`...`), sygnalizując ucięcie treści.
        - `margin: 0 auto` – Przyciski są wyśrodkowane w kontenerze, niezależnie od jego szerokości.
        - `display: block` – Sprawia, że przycisk jest traktowany jako blok, co umożliwia prawidłowe centrowanie za pomocą marginesów.
    */
}


/* Ustawienie przycisków w pionowej kolumnie */
.floating-buttons {
    position: fixed; /* Ustawia pozycję jako stałą, dzięki czemu przyciski pozostają w tym samym miejscu podczas przewijania */
    bottom: 20px; /* Ustawia odległość przycisków od dolnej krawędzi ekranu na 20px */
    right: 20px; /* Ustawia przyciski 20px od prawej krawędzi ekranu */
    display: flex; /* Używa modelu flexbox do rozmieszczenia elementów */
    flex-direction: column; /* Ustawia przyciski jeden pod drugim w pionowej kolumnie */
    gap: 12px; /* Dodaje odrobinę więcej oddechu między przyciskami */
    z-index: 1100; /* Upewnia się, że przyciski są nad innymi elementami strony */
    /*
        - `position: fixed` - Zapewnia, że przyciski pozostają w jednym miejscu podczas przewijania strony.
        - `bottom: 20px` - Przesuwa przyciski 20px od dolnej krawędzi, zapewniając czytelność.
        - `right: 20px` - Umieszcza przyciski 20px od prawej krawędzi, dzięki czemu są łatwo dostępne.
        - `display: flex` - Umożliwia użycie flexboxa do wyrównania elementów.
        - `flex-direction: column` - Ustawia elementy w kolumnie, umieszczając je jeden pod drugim.
        - `gap: 10px` - Dodaje 10px odstępu między przyciskami, aby nie były zbyt blisko siebie.
        - `z-index: 1100` - Zapewnia, że przyciski są wyżej niż inne elementy na stronie.
    */
}

/* Dla stron z niską reCAPTCHA (np. kontakt lub asystent AI)) */
.floating-buttons--raised {
    bottom: 90px; 
    /* wyżej */
}

/* Dostosowanie stylu przycisków */
.custom-btn {
    display: flex; /* Umożliwia użycie flexboxa do wyrównania treści przycisku */
    align-items: center; /* Wyrównuje ikonę i tekst do środka w pionie */
    justify-content: center; /* Wyrównuje ikonę i tekst do środka w poziomie */
    gap: 10px; /* Dodaje odstęp 10px między ikoną a tekstem */
    padding: 10px 18px; /* Dodaje wygodny, ale lekki odstęp wewnętrzny */
    min-width: 180px; /* Zapewnia minimalną szerokość 200px, aby przyciski były proporcjonalne */
    text-align: center; /* Wyrównuje tekst w przycisku do środka */
    font-size: 93%; /* Lekkie zmniejszenie tekstu*/
    color: #5f5a3a; /* Ciepły odcień dopasowany do stylistyki strony */
    background: linear-gradient(180deg, rgba(255, 255, 255, 0.98) 0%, rgba(245, 241, 231, 0.98) 100%); /* Delikatny kremowy gradient zamiast płaskiej bieli */
    border: 1px solid rgba(121, 121, 58, 0.22) !important; /* Subtelne obramowanie w tonacji linków */
    border-radius: 999px; /* Miękki, kapsułkowy kształt */
    box-shadow:
        0 12px 28px rgba(79, 75, 31, 0.14),
        inset 0 1px 0 rgba(255, 255, 255, 0.85); /* Lekki cień z miękkim rozświetleniem */
    backdrop-filter: blur(4px); /* Delikatne wygładzenie nad tłem strony */
    transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease, box-shadow 0.2s ease; /* Spokojne przejścia stanów */
    /*
        - `background-color: #ffffff` - Ustawia białe tło przycisku, co pasuje do neutralnego stylu strony.
        - `display: flex` - Umożliwia łatwe wyrównanie ikon i tekstu wewnątrz przycisku.
        - `align-items: center` - Zapewnia wyrównanie treści w pionie.
        - `justify-content: center` - Wyrównuje treść w poziomie, zapewniając estetyczny wygląd.
        - `gap: 10px` - Dodaje odstęp 10px między ikoną a tekstem, poprawiając czytelność.
        - `font-weight: bold` - Sprawia, że tekst przycisku jest bardziej widoczny.
        - `border-width: 2px !important` - Zapewnia jednolitą szerokość obramowania dla wszystkich przycisków.
        - `padding: 12px 20px` - Dodaje marginesy wewnętrzne, aby tekst i ikony nie były przy krawędzi.
        - `min-width: 200px` - Ustawia minimalną szerokość, dzięki czemu wszystkie przyciski są równej wielkości.
        - `text-align: center` - Wyrównuje tekst w przycisku do środka.
        - `font-size: 95%` - Lekkie zmniejszenie czcionki.
    */
}

/* Efekt hover */
.custom-btn:hover {
    color: #4f4b1f !important; /* Hover przyciemnia tekst, ale bez agresywnego kontrastu */
    background: linear-gradient(180deg, rgba(239, 234, 220, 0.98) 0%, rgba(226, 218, 194, 0.98) 100%); /* Subtelna zmiana tła zamiast mocnego przełączenia */
    border-color: rgba(121, 121, 58, 0.4) !important; /* Minimalnie mocniejszy obrys */
    box-shadow:
        0 14px 30px rgba(79, 75, 31, 0.18),
        inset 0 1px 0 rgba(255, 255, 255, 0.8); /* Delikatnie głębszy cień w hoverze */
    /*
        - `color: white !important` - Zmienia kolor tekstu na biały po najechaniu, zapewniając lepszy kontrast.
    */
}

/* Ikony */
.custom-btn i {
    font-size: 20px; /* Ikony lekko zmniejszone, żeby przycisk był lżejszy optycznie */
    /*
        - `font-size: 22px` - Ustawia wielkość ikon na 22px, dzięki czemu są dobrze widoczne i proporcjonalne do tekstu.
    */
}

/* Główne ustawienia stylu kalendarza Litepicker */
.litepicker {
    font-size: 16px; /* Ustawia bazowy rozmiar czcionki kalendarza */
    padding: 1.2rem; /* Dodaje przestrzeń wewnętrzną wokół zawartości */
    border-radius: 0.5rem; /* Zaokrągla rogi kalendarza */
    box-shadow: none; /* Usuwa domyślny cień */
    transform: translateX(-23px);
    font-family: var(--bs-body-font-family, system-ui, sans-serif); /* Dopasowuje czcionkę do stylu Bootstrap */
    /*
        - `font-size: 16px` – Podstawowy rozmiar tekstu wewnątrz kalendarza.
        - `padding: 1.2rem` – Dodaje wygodny odstęp wewnątrz kontenera.
        - `border-radius: 0.5rem` – Zaokrągla krawędzie całego komponentu.
        - `box-shadow: none` – Usuwa cień, by zachować płaski wygląd.
        - `font-family: var(--bs-body-font-family, ...)` – Dopasowuje font do Bootstrapa.
    */
}

/* Styl nagłówków z nazwą miesiąca i rokiem */
.litepicker .month-item-name,
.litepicker .month-item-year {
    font-size: 1.1rem; /* Ustawia rozmiar czcionki nazw miesięcy i lat */
    font-weight: 600; /* Pogrubienie tekstu dla lepszej czytelności */
    color: #444; /* Ciemnoszary kolor pasujący do neutralnej kolorystyki strony */
    /*
        - `font-size: 1.1rem` – Zwiększa czytelność nagłówków miesięcy i lat.
        - `font-weight: 600` – Uwydatnia nagłówki.
        - `color: #444` – Nadaje neutralny i stonowany kolor tekstowi.
    */
}

/* Styl pojedynczego dnia w Litepickerze */
.litepicker .day-item {
    width: 2.6rem;              /* Stała szerokość komórki dnia */
    height: 2.6rem;             /* Stała wysokość komórki dnia */
    line-height: 2.6rem;        /* Wyśrodkowanie liczby dnia w pionie */
    border-radius: 0.375rem;    /* Zaokrąglenie rogów dnia */
    box-sizing: border-box;     /* Padding/border nie powiększa komórki */
    text-align: center;         /* Wyśrodkowanie poziome tekstu w dniu */
    /* 
        UWAGI:
        - NIE stosujemy marginesów (margin), bo mogą rozjechać siatkę w tabeli.
        - Jeśli chcesz subtelne oddzielenie dni, lepiej użyć lekki border, padding lub box-shadow.
        - Możesz zmienić rozmiar (2.6rem) według potrzeb, zachowując proporcje siatki.
    */
}

/* Nagłówki dni tygodnia (Pn, Wt, Śr...) */
.litepicker .day-item-header {
    font-size: 0.85rem; /* Mniejsza czcionka dla nazw dni tygodnia */
    font-weight: 600; /* Pogrubienie nazw dni */
    color: #6c757d; /* Używa odcienia szarości z Bootstrapa */
    text-transform: uppercase; /* Zamienia tekst na wielkie litery */
    /*
        - `font-size: 0.85rem` – Subtelniejszy rozmiar dla nagłówków dni tygodnia.
        - `font-weight: 600` – Czyni nagłówki bardziej widocznymi.
        - `color: #6c757d` – Utrzymuje spójność z kolorystyką Bootstrapa.
        - `text-transform: uppercase` – Stosuje wersaliki (wielkie litery).
    */
}

/* Styl domyślny strzałek do zmiany miesięcy */
.litepicker .button-previous-month svg path,
.litepicker .button-next-month svg path {
    fill: #333 !important; /* Domyślny kolor ikon strzałek (ciemnoszary) */
    transition: fill 0.2s ease-in-out; /* Płynne przejście koloru przy najechaniu */
    /*
        - `fill: #333` – Nadaje ciemny kolor ikon strzałek.
        - `transition: fill 0.2s ease-in-out` – Zapewnia płynność przy zmianie koloru.
    */
}

/* Styl strzałek po najechaniu */
.litepicker .button-previous-month:hover svg path,
.litepicker .button-next-month:hover svg path {
    fill: #ada07d !important; /* Zmienia kolor strzałek na oliwkowy po najechaniu */
    /*
        - `fill: #baad8b` – Kolor hovera dla strzałek: oliwkowy.
    */
}

/* Styl dnia po najechaniu */
.litepicker .day-item:hover {
    background-color: #baad8b !important; /* Oliwkowe tło po najechaniu */
    color: black !important; /* Czarny tekst po najechaniu */
    outline: none !important; /* Usuwa kontur zaznaczenia */
    box-shadow: none !important; /* Usuwa cień */
    border: 1px solid black; /* Dodaje czarną ramkę */
    /*
        - `background-color: #baad8b` – Tło w kolorze oliwkowym przy hoverze.
        - `color: black` – Zapewnia czytelność na oliwkowym tle.
        - `outline: none` – Usuwa niepotrzebny kontur fokusa.
        - `box-shadow: none` – Usuwa cienie dla bardziej „płaskiego” wyglądu.
        - `border: 1px solid black` – Ramka podkreślająca aktywny dzień.
    */
}

/* Styl dnia oznaczonego jako początek lub koniec zakresu */
.litepicker .day-item.is-start-date,
.litepicker .day-item.is-end-date {
    background-color: #ada07d !important; /* Oliwkowe tło dla dnia początkowego i końcowego */
    color: white !important; /* Biały tekst dla kontrastu */
    font-weight: bold; /* Pogrubienie daty */
    border: none; /* Usuwa ramkę */
    /*
        - `background-color: #ada07d` – Oliwkowy kolor dla brzegowych dni.
        - `color: white` – Kontrastujący tekst dla czytelności.
        - `font-weight: bold` – Podkreślenie istotnych dat.
        - `border: none` – Brak obramowania – prostota i przejrzystość.
    */
}

/* Styl dni w zaznaczonym zakresie (między datami) */
.litepicker .day-item.is-in-range {
    background-color: #d3d3aa !important; /* Jasna oliwkowa jako tło dla zakresu */
    color: black !important; /* Czarny tekst w zaznaczonym zakresie */
    /*
        - `background-color: #d3d3aa` – Jasna oliwka jako tło dla dat pośrednich.
        - `color: black` – Utrzymuje dobrą czytelność na tle.
    */
}

/* Styl tła dla modala Fancybox (pełnoekranowe podświetlenie zdjęcia) */
.fancybox__backdrop {
    background: #C55300 url(/build/images/kozi_lasek_tlo.08711986.jpg) repeat !important; /* Pomarańczowe tło z teksturą jako wzór */
    opacity: 1 !important; /* Pełna nieprzezroczystość tła */

    /*
        - `background: #C55300 url(../image/kozi_lasek_tlo.jpg) repeat` – Pomarańczowe tło (#C55300) z powtarzającym się obrazem tekstury.
        - `opacity: 1` – Brak przezroczystości, tło jest w pełni widoczne.
    */
}

/* Styl bazowy dla przycisków nawigacyjnych Fancybox (następny/poprzedni) */
.f-button.is-next,
.f-button.is-prev {
    background: rgba(255, 255, 255, 0.85) !important; /* Półprzezroczyste białe tło przycisków */
    border-radius: 50%; /* Zaokrąglony (okrągły) kształt */
    box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); /* Delikatny cień dla efektu wypukłości */
    width: 48px; /* Szerokość przycisku */
    height: 48px; /* Wysokość przycisku */
    transition: background 0.3s ease; /* Gładka animacja przy zmianie tła */
    display: flex; /* Ustawienie elementów wewnątrz przycisku jako flexbox */
    justify-content: center; /* Wyrównanie poziome do środka */
    align-items: center; /* Wyrównanie pionowe do środka */

    /*
        - `background: rgba(255, 255, 255, 0.85)` – Białe tło z lekką przezroczystością dla subtelnego wyglądu.
        - `border-radius: 50%` – Nadaje przyciskowi idealnie okrągły kształt.
        - `box-shadow` – Cień rzucany przez przycisk, dodający głębi.
        - `width` i `height` – Stałe wymiary przycisku (48x48px).
        - `transition` – Efekt przejścia przy zmianie koloru tła.
        - `display: flex`, `justify-content`, `align-items` – Wyśrodkowanie ikonki strzałki wewnątrz przycisku.
    */
}

/* Styl dla ikon SVG – czarne strzałki */
.f-button.is-next svg path,
.f-button.is-prev svg path {
    stroke: #000 !important; /* Czarny kolor obrysu strzałki */
    stroke-width: 2; /* Grubość obrysu */
    fill: none; /* Brak wypełnienia – tylko kontur */

    /*
        - `stroke: #000` – Klasyczny, czarny obrys strzałek.
        - `stroke-width: 2` – Nieco pogrubiony kontur dla lepszej widoczności.
        - `fill: none` – Usunięcie wypełnienia, aby zachować lekkość ikon.
    */
}

/* Hover – delikatne wzmocnienie tła */
.f-button.is-next:hover,
.f-button.is-prev:hover {
    background: rgba(255, 255, 255, 1) !important; /* Pełne białe tło przy najechaniu */

    /*
        - `background: rgba(255, 255, 255, 1)` – Zwiększenie kontrastu przy hoverze.
        - `!important` – Wymuszenie stylu nad domyślnym tłem Fancyboxa.
    */
}

/* Styl przycisku zamknięcia (X) – minimalistyczny, bez tła i cienia */
.f-button.is-close-btn {
    background: none !important;     /* Usunięcie tła */
    box-shadow: none !important;     /* Usunięcie cienia */
    border: none;                    /* Brak obramowania */
    width: auto;                     /* Automatyczna szerokość */
    height: auto;                    /* Automatyczna wysokość */
    padding: 8px;                    /* Wewnętrzny odstęp – większy komfort kliknięcia */
    top: 20px;                       /* Odstęp od góry */
    right: 20px;                     /* Odstęp od prawej */

    /*
        - `background: none` – Brak koloru tła – przycisk pozostaje neutralny.
        - `box-shadow: none` – Brak cienia – czysty, prosty wygląd.
        - `padding: 8px` – Większy obszar klikalny dla wygody użytkownika.
        - `top` i `right` – Delikatne odsunięcie od krawędzi okna.
    */
}

/* Styl czarnego krzyżyka */
.f-button.is-close-btn svg path {
    stroke: #000 !important;       /* Czarny kolor kreski (ikonki "X") */
    stroke-width: 2;               /* Grubość kreski */
    fill: none;                    /* Brak wypełnienia wewnątrz ikonki */

    /*
        - `stroke: #000` – Zapewnia dobrą widoczność ikony zamknięcia.
        - `stroke-width: 2` – Lekko pogrubiona kreska – dla czytelności.
        - `fill: none` – Ikonka pozostaje tylko liniowa, bez wypełnienia.
    */
}

/* Hover efekt – opcjonalny (lekka zmiana koloru) */
.f-button.is-close-btn:hover svg path {
    stroke: #444 !important; /* Ciemnoszary kolor podczas najechania kursorem */

    /*
        - `stroke: #444` – Delikatna zmiana koloru ikony przy hoverze.
        - `!important` – Wymusza nadpisanie domyślnego stylu Fancybox.
    */
}

/* Styl paska informacyjnego (numeracja zdjęć w galerii) */
.fancybox__infobar {
    color: #000 !important; /* Czarny kolor tekstu */
    background: none !important; /* Brak tła */
    font-size: 0.95rem; /* Lekko zmniejszony tekst */
    font-weight: 500; /* Średnia grubość czcionki */
    top: 20px; /* Odstęp od góry */
    left: 20px; /* Odstęp od lewej krawędzi */
    position: absolute; /* Pozycjonowanie w rogu */
    text-shadow: 0 1px 2px rgba(255, 255, 255, 0.8); /* Delikatny cień dla lepszej czytelności na ciemnym tle */

    /*
        - `color: #000` – Czytelny czarny tekst.
        - `background: none` – Brak tła – prosty wygląd.
        - `font-size: 0.95rem` – Dyskretna wielkość fontu.
        - `font-weight: 500` – Zbalansowana grubość – nie za lekka, nie za gruba.
        - `top` i `left` – Umieszczenie w lewym górnym rogu.
        - `text-shadow` – Dodatkowa warstwa kontrastu przy jasnych tłach.
    */
}

/* Ukrycie domyślnego spinnera Fancyboxa */
.fancybox__spinner {
    display: none !important; /* Całkowite ukrycie spinnera Fancyboxa */

    /*
        - `display: none` – Dezaktywuje widoczność wbudowanego spinnera Fancyboxa.
        - `!important` – Gwarantuje, że ta reguła nadpisze wszystkie inne style.
        - Używane w przypadku korzystania z własnego spinnera ładowania (np. #page-loader).
    */
}

/* Styl podpisu pod zdjęciem */
.fancybox__caption {
    margin-top: 8px !important; /* Zmniejszony odstęp od zdjęcia */
    padding-top: 0 !important; /* Usunięcie dodatkowego wewnętrznego marginesu na górze */

    /*
        - `margin-top: 8px` – Minimalny odstęp między zdjęciem a podpisem.
        - `padding-top: 0` – Brak dodatkowej przestrzeni wewnętrznej od góry.
    */
}

/* Styl tekstu podpisu wyświetlanego w ramce pod zdjęciem */
.quote-gallery {
    margin: 0;
    font-size: 1.25rem; /* Zwiększony rozmiar czcionki dla lepszej czytelności */
    font-style: italic; /* Kursywa dla elegancji */
    color: #1a1a1a; /* Ciemnoszary kolor tekstu */
    text-align: center; /* Wyśrodkowanie tekstu */
    font-family: Georgia, 'Times New Roman', serif; /* Klasyczna, szeryfowa czcionka */
    line-height: 1.5; /* Optymalny odstęp między wierszami */
    border: 1px solid #ddd; /* Delikatne, jasnoszare obramowanie */
    padding: 10px 25px; /* Wewnętrzny odstęp: góra/dół 10px, lewo/prawo 25px */
    border-radius: 5px; /* Lekko zaokrąglone rogi dla łagodniejszego wyglądu */
    background-color: #fff; /* Białe tło dla wyraźnej separacji od tła */
    
    /*
        - `font-size: 1.25rem` – Większy rozmiar tekstu ułatwia czytanie.
        - `padding: 10px 25px` – Dłuższa ramka pozioma, wizualnie szersza niż zdjęcie.
        - `border: 1px solid #ddd` – Ramka, która nie przytłacza wizualnie.
        - `background-color: #fff` – Tło pod napisem, które go wyróżnia.
    */
}

/* Styl zaokrąglonych rogów dla zdjęć lub ramek w galerii */
.gallery-rounded {
    border-radius: 12px !important; /* Wymusza efekt zaokrąglenia nawet jeśli inne reguły go nadpisują */
    
    /*
        - `border-radius: 12px` – Wyraźnie zaokrąglone rogi nadają elementom bardziej przyjazny, nowoczesny wygląd.
        - `!important` – Priorytet tej reguły; zapewnia, że zaokrąglenie zostanie zastosowane nawet przy innych, kolidujących stylach.
    */
}

/* Stan początkowy jest dodawany przez JS, dzięki czemu bez JS zdjęcia są widoczne. */
[data-gallery-reveal].gallery-reveal--pending {
    opacity: 0;
    transform: translate3d(0, 18px, 0);
    transition:
        opacity 420ms ease-out var(--gallery-reveal-delay, 0ms),
        transform 420ms cubic-bezier(0.22, 1, 0.36, 1) var(--gallery-reveal-delay, 0ms);
    will-change: opacity, transform;
}

/* Stan końcowy łagodnie przywraca pełną widoczność i właściwą pozycję. */
[data-gallery-reveal].gallery-reveal--visible {
    opacity: 1;
    transform: translate3d(0, 0, 0);
}

@media (prefers-reduced-motion: reduce) {
    /* Szanujemy systemowe ustawienie ograniczające animacje. */
    [data-gallery-reveal] {
        opacity: 1 !important;
        transform: none !important;
        transition: none !important;
    }
}

/* Styl zakładek (tabs) bez dolnej ramki – spójna ramka wokół całości */
.nav-tabs {
    margin-bottom: 0 !important;      /* Usuwa domyślny margines na dole – tabs przylegają do zawartości */
    box-shadow: none !important;      /* Wyłącza cień pod zakładkami – wygląd bardziej „płaski” */
    background: transparent;          /* Przezroczyste tło – integruje się z tłem kontenera */
    margin-left: -3px;                /* Minimalne przesunięcie w lewo – korekta wizualnego dopasowania */
    border-bottom: none;              /* Usuwa dolną ramkę – ramka pojawi się tylko wokół całości (kontenera) */
    
    /*
        - `margin-bottom: 0 !important` – Zakładki przylegają bezpośrednio do treści, bez odstępu.
        - `box-shadow: none !important` – Brak cienia pod zakładkami; czysty, minimalistyczny efekt.
        - `background: transparent` – Przezroczyste tło – tabs stapiają się z otoczeniem.
        - `margin-left: -3px` – Lekka korekta położenia; wyrównuje tabs względem ramki kontenera.
        - `border-bottom: none` – Usuwa poziomą linię na dole tabsów; ramka tylko wokół głównego boxa.
    */
}

/* Styl nieaktywnych zakładek (tabów) – wyraźny border tylko na górze, po bokach i jasne tło */
.nav-tabs .nav-link {
    border-radius: 0.4rem 0.4rem 0 0;            /* Zaokrąglenie tylko na górze – wizualnie oddziela zakładki od reszty */
    border: 1px solid #c6c7c8 !important;        /* Delikatna, jasna ramka wokół zakładki – !important wymusza styl */
    background-color: #f8f9fa !important;        /* Bardzo jasne tło (off-white) – stonowane i neutralne */
    color: #9e9b9b !important;                   /* Jasnoszary tekst – mniej kontrastowy niż aktywny tab */
    font-weight: bold;                           /* (Poprzednia deklaracja, zostaje nadpisana niżej) */
    font-weight: 400;                            /* Właściwy – zwykła grubość czcionki, bez pogrubienia */
    font-family: 'Inter', 'Roboto', Arial, sans-serif; /* Nowoczesna, bezszeryfowa czcionka */
    box-shadow: none !important;                 /* Brak cienia – płaski, minimalistyczny wygląd */
    margin-bottom: 0;                            /* Brak odstępu pod zakładką – tabs przylegają do treści */
    transition: color 0.2s, background 0.2s;     /* Płynna animacja zmiany koloru i tła przy interakcji */
    position: relative;                          /* Umożliwia pozycjonowanie względem kontenera */
    z-index: 2;                                  /* Zakładka znajduje się wyżej niż inne elementy (np. ramka kontenera) */

    /*
        - `border-radius: 0.4rem 0.4rem 0 0` – Zaokrąglenie tylko na górze, podkreśla „kartkowy” wygląd tabów.
        - `border: 1px solid #c6c7c8 !important` – Jasna, neutralna ramka, wymuszona priorytetem.
        - `background-color: #f8f9fa !important` – Bardzo jasne, prawie białe tło podkreślające nieaktywność.
        - `color: #9e9b9b !important` – Jasnoszary tekst – mniej dominujący niż aktywny tab.
        - `font-weight: 400` – Standardowa grubość tekstu, czytelna i elegancka.
        - `font-family: 'Inter', 'Roboto', Arial, sans-serif` – Nowoczesna i uniwersalna rodzina fontów.
        - `box-shadow: none !important` – Brak efektu cienia – prostota i przejrzystość.
        - `margin-bottom: 0` – Zakładka przylega do głównej treści bez przerwy.
        - `transition: color 0.2s, background 0.2s` – Animacja kolorów przy hoverze/aktywacji.
        - `position: relative` i `z-index: 2` – Ustawienie warstwowe, pozwala zakładce „wyjść” nad ramkę kontenera.
    */
}

/* Styl aktywnej zakładki – zakładka nachodzi na ramkę panelu, sprawia wrażenie połączonej z panelem */
.nav-tabs .nav-link.active {
    background-color: #fff !important;                /* Białe tło – spójne z panelem, wyraźnie odcina aktywną zakładkę od innych */
    color: #444 !important;                           /* Ciemniejszy szary tekst – większy kontrast i czytelność */
    font-weight: bold;                                /* Pogrubienie tekstu – podkreśla aktywność */
    border-bottom: 1px solid #fff !important;         /* Dolna ramka w kolorze tła panelu (biała) – „nachodzi” na ramkę panelu */
    z-index: 3;                                       /* Zakładka na najwyższej warstwie – zawsze ponad panelem */

    /*
        - `background-color: #fff !important` – Białe tło zakładki, identyczne jak panel, daje efekt „przerwania” ramki pod zakładką.
        - `color: #444 !important` – Ciemny szary kolor tekstu, czytelny i elegancki.
        - `font-weight: bold` – Pogrubiony tekst wyraźnie odróżnia aktywną zakładkę.
        - `border-bottom: 1px solid #fff !important` – Biała dolna ramka; sprawia wrażenie, że zakładka „nachodzi” na panel i łączy się z nim w całość.
        - `z-index: 3` – Zakładka zawsze jest „na wierzchu”, nie przykryje jej żaden element panelu.
    */
}

/* Lekki overlap aktywnej zakładki – eliminuje widoczny „schodek” na granicy zakładki i panelu */
.nav-tabs .nav-link.active {
    margin-bottom: -1px; /* Zakładka nachodzi dolną krawędzią na panel, wyrównując ramki */
    
    /*
        - `margin-bottom: -1px` – Ujemny margines sprawia, że dolna krawędź zakładki lekko nachodzi na panel.
        - Eliminuje efekt „schodka” (przerwy lub podwójnej linii) pomiędzy aktywną zakładką a panelem.
        - Nadaje wrażenie idealnej ciągłości ramki, dzięki czemu interfejs wygląda na dopracowany i profesjonalny.
    */
}

/* Panel z treścią zakładki – pełna ramka dookoła, ale bez górnej ramki pod zakładkami */
.tab-content, .tab-pane {
    background-color: #fff !important;         /* Białe tło */
    border-radius: 0 0 0.4rem 0.4rem;           /* Zaokrąglenie tylko dolnych rogów – łagodny, nowoczesny wygląd */
    box-shadow: none !important;                /* Brak cienia – minimalistyczny, płaski design */
    padding: 0.5rem 0.5rem;                     /* Odpowiedni odstęp wewnątrz panelu dla czytelności */
    margin-top: 0 !important;                   /* Panel przylega do zakładek – brak odstępu na górze */
    font-family: 'Inter', 'Roboto', Arial, sans-serif; /* Nowoczesna, czytelna czcionka dla spójności z zakładkami */
    
    /*
        - `background-color: #fff` – Białe tło.
        - `border-radius: 0 0 0.4rem 0.4rem` – Zaokrąglenie tylko na dole, górne rogi prostokątne – dopasowane pod zakładki.
        - `box-shadow: none !important` – Płaski wygląd, bez efektu głębi – nowoczesny i czysty.
        - `padding: 0.5rem 0.5rem` – Wewnętrzny margines ułatwia czytanie treści w panelu.
        - `margin-top: 0 !important` – Panel styka się bezpośrednio z zakładkami, tworząc spójną całość.
        - `font-family: 'Inter', 'Roboto', Arial, sans-serif` – Spójność typograficzna z nagłówkami i zakładkami.
    */
}

/* Ramka panelu treści lekko przesunięta w górę – „chowa się” pod zakładki */
.tab-content {
    position: relative;                 /* Umożliwia przesuwanie panelu względem normalnego położenia */
    top: -1px;                          /* Panel przesunięty w górę o 1px – grubość ramki nakłada się pod tabs */
    z-index: 1;                         /* Panel znajduje się „pod” aktywną zakładką */
    margin-top: -3px !important;        /* Lekko podnosi panel, wyrównując poziom z zakładkami */
    border: 1px solid #c6c7c8;          /* Jasna, neutralna ramka wokół panelu */

    /*
        - `position: relative` – Pozwala przesunąć panel bez zmiany położenia innych elementów.
        - `top: -1px` – Panel „wchodzi” pod zakładki na grubość ramki (efekt jednolitej ramki wokół całości).
        - `z-index: 1` – Panel jest pod zakładkami; aktywna zakładka ma wyższy z-index i nachodzi na panel.
        - `margin-top: -3px !important` – Wyrównuje położenie panelu, aby ramki tabsów i panelu łączyły się bez „schodka”.
        - `border: 1px solid #c6c7c8` – Subtelna ramka wokół panelu, spójna z ramką zakładek.
    */
}

/* Styl pojedynczego elementu usługi – wygodne odstępy i czytelny tekst */
.service-item {
    padding: 1.1em 1.5em;                 /* Większy wewnętrzny odstęp – tekst ma więcej przestrzeni, ramka wygląda „lżej” */
    margin-bottom: 2.2em;                 /* Duży odstęp pod spodem – każdy element wyraźnie oddzielony */
    line-height: 1.7;                     /* Większy odstęp między liniami – poprawia czytelność opisów */
    color: #565656;                       /* Ciemnoszary kolor tekstu – łagodniejszy dla oczu niż czysta czerń */
    font-size: 1.09em;                    /* Minimalnie powiększony rozmiar tekstu względem domyślnego */
    transition: box-shadow 0.18s;         /* Płynna animacja cienia przy interakcji (np. hover) */

    /*
        - `padding: 1.1em 1.5em` – Duży komfortowy margines wewnętrzny, wygodny na urządzeniach mobilnych i desktop.
        - `margin-bottom: 2.2em` – Spory odstęp między usługami; lista jest przejrzysta i nienatłoczona.
        - `line-height: 1.7` – Odstępy między liniami poprawiają komfort czytania nawet dłuższych opisów.
        - `color: #565656` – Miękka, ciemna szarość; profesjonalny i przyjazny efekt.
        - `font-size: 1.09em` – Odrobinę większy tekst, łatwiejszy do czytania.
        - `transition: box-shadow 0.18s` – Efekt płynnej animacji cienia przy np. najechaniu kursorem.
    */
}

/* Nazwa miejsca/usługi – wyróżnienie tytułu w ramach listy usług */
.service-place-name {
    color: #79793a;                 /* Oliwkowy, ciepły odcień – subtelne nawiązanie do natury, świetny akcent */
    font-size: 1.19em;              /* Minimalnie powiększony tekst – wyraźnie oddziela nazwę od opisu */
    font-weight: 600;               /* Półpogrubienie – mocny, ale nie przesadzony akcent */
    padding-bottom: 0.22em;         /* Dodatkowy odstęp pod spodem – poprawia separację od reszty treści */
    display: inline-block;          /* Pozwala stosować odstępy pionowe i zachowuje liniowy układ */
    letter-spacing: 0.01em;         /* Delikatne rozsunięcie liter – lepsza czytelność */
    line-height: 1.18;              /* Zwięzłe, lekko zagęszczone wiersze – tekst jest zwarty i elegancki */

    /*
        - `color: #79793a` – Oliwkowy odcień, ciepły i przyjemny dla oka; nadaje indywidualny charakter tytułom.
        - `font-size: 1.19em` – Nazwa miejsca delikatnie wyróżnia się rozmiarem na tle reszty treści.
        - `font-weight: 600` – Półpogrubienie zapewnia dobry balans między lekkością a czytelnością.
        - `padding-bottom: 0.22em` – Oddziela nazwę od opisu, nie pozwalając na „zlanie się” tekstu.
        - `display: inline-block` – Umożliwia stosowanie paddingów i zachowanie spójności w układzie.
        - `letter-spacing: 0.01em` – Minimalne zwiększenie odstępu między znakami poprawia wygląd i czytelność.
        - `line-height: 1.18` – Kompaktowe, schludne wiersze bez nadmiernych odstępów.
    */
}

/* Ikony w liście usług – jednolity kolor i spójny rozmiar */
.service-list i {
    color: #565656 !important;        /* Głęboka, ciemnoszara barwa – subtelny, profesjonalny akcent dla ikon */
    font-size: 0.96em;                /* Minimalnie zmniejszony rozmiar – harmonizuje z tekstem, nie dominuje */

    /*
        - `color: #565656 !important` – Zapewnia spójność wszystkich ikon w ramach listy usług; łagodniejszy efekt niż czysta czerń.
        - `font-size: 0.96em` – Ikony są nieco mniejsze od domyślnego rozmiaru tekstu, przez co pełnią rolę uzupełnienia, a nie głównego akcentu.
    */
}

/* Gwiazdki oceny w liście usług – wyróżniający kolor i mniejszy rozmiar */
.service-list .fa-star,
.service-list .fa-star-half-alt {
    color: #ffc107 !important;         /* Charakterystyczny żółty (Bootstrapowy) – natychmiast sugeruje ocenę */
    font-size: 0.85em;                 /* Gwiazdki są mniejsze niż tekst, nie dominują nad treścią */

    /*
        - `color: #ffc107 !important` – Intensywny żółty odcień znany z Bootstrapa; użytkownik od razu rozpoznaje symbolikę oceny.
        - `font-size: 0.85em` – Gwiazdki są dyskretne, nie przesłaniają nazwy miejsca ani opisu.
    */
}

/* Lista usług – jednolity kolor tekstu i lekko zmniejszony rozmiar fontu */
.service-list {
    color: #555c66 !important;         /* Stonowany, szaro-niebieski odcień – przyjazny dla oka, profesjonalny wygląd */
    font-size: 0.96em !important;      /* Minimalnie mniejszy tekst – subtelny, nie przytłacza reszty interfejsu */

    /*
        - `color: #555c66 !important` – Delikatnie przygaszony kolor tekstu; wyróżnia się na tle bieli, ale nie jest agresywny jak czysta czerń.
        - `font-size: 0.96em !important` – Tekst lekko pomniejszony względem domyślnego rozmiaru, zapewnia lekkość i elegancję.
    */
}

/* Liczba ocen (rating) w liście usług – dyskretny wygląd, nie dominuje nad gwiazdkami */
.service-list .service-rating-number {
    color: #aaa;                      /* Jasnoszary odcień – liczba ocen jest widoczna, ale nie przyciąga wzroku */
    font-size: 0.92em;                /* Pomniejszony tekst – liczba ocen to tylko informacja pomocnicza */

    /*
        - `color: #aaa` – Bardzo jasna szarość; liczba ocen jest subtelna i nie konkuruje z głównym tekstem.
        - `font-size: 0.92em` – Wyraźnie mniejszy rozmiar niż reszta tekstu – podkreśla, że to informacja dodatkowa.
    */
}

/* 1. Kompakt – najmniejsze ekrany */
@media (max-width: 540px) {
  .nav-tabs {
    font-size: 0.80em !important;
    padding: 0 !important;
    margin: 0 !important;
  }
  .nav-tabs .nav-link {
    padding: 0.10em 0.24em !important;
    font-size: 0.78em !important;
    min-width: 46px !important;
    line-height: 1.01 !important;
    white-space: nowrap !important;
  }
  .nav-tabs .fa,
  .nav-tabs .fas,
  .nav-tabs .fa-solid {
    font-size: 0.70em !important;
    margin-right: 0.04em !important;
    vertical-align: -2px;
  }
}

/* 2. Przewijane zakładki: tablety, małe laptopy, średnie ekrany */
@media (min-width: 541px) and (max-width: 1200px) {
  .nav-tabs {
    overflow-x: auto !important;
    flex-wrap: nowrap !important;
    -webkit-overflow-scrolling: touch;
    display: flex;
    font-size: 1em;
  }
  .nav-tabs .nav-link {
    white-space: nowrap !important;
    min-width: 88px !important;
    padding: 0.45em 1em !important;
    font-size: 1em !important;
  }
  .nav-tabs .fa,
  .nav-tabs .fas,
  .nav-tabs .fa-solid {
    font-size: 0.88em !important;
    margin-right: 0.15em !important;
  }
}

/* Opakowanie dla ikon w stopce – zapewnia równy rozkład i idealne wyrównanie w pionie */
.icon-box {
    width: 24px;               /* Stała szerokość – każda ikona zajmuje dokładnie tyle samo miejsca w poziomie */
    height: 24px;              /* Stała wysokość – zachowuje spójny rytm między kolejnymi wierszami */
    flex-shrink: 0;            /* Zapobiega zwężaniu się kolumny z ikoną na mniejszych ekranach */
    display: flex;             /* Umożliwia centrowanie zawartości przy pomocy Flexboxa */
    align-items: center;       /* Pionowe wyśrodkowanie ikony w ramach pudełka */
    justify-content: flex-start; /* Ikona wyrównana do lewej krawędzi – naturalne ustawienie dla języków LTR */
    line-height: 1;            /* Usuwa dodatkowy odstęp wynikający z metryki czcionki Font Awesome */
    position: relative;        /* Pozwala na drobną, precyzyjną korektę położenia ikony */
    padding-bottom: 5px;       /* Podnosi ikonę lekko ku górze */

    /*
        - `width: 24px` – Jednolita szerokość kolumny z ikoną; tekst obok zawsze zaczyna się w tej samej pozycji.
        - `height: 24px` – Stała wysokość ramki – tworzy wizualnie równy rytm pionowy między wierszami.
        - `flex-shrink: 0` – Chroni kolumnę z ikoną przed kompresją przy wąskich układach.
        - `display: flex` – Umożliwia łatwe centrowanie zawartości w pionie i poziomie.
        - `align-items: center` – Wyrównuje ikonę dokładnie na środku w osi pionowej.
        - `justify-content: flex-start` – Ustawia ikonę po lewej, zgodnie z kierunkiem czytania.
        - `line-height: 1` – Redukuje „powietrze” wokół glifu Font Awesome, zapewniając wizualne wyśrodkowanie.
        - `position: relative` – Daje możliwość subtelnej regulacji położenia (np. `top: 0.5px` dla perfekcyjnego balansu).
        - `padding-bottom: 5px;` – unosi ikone ku górze.
    */
}


/* Linki w stopce – neutralne i uporządkowane; nie zaburzają wyrównania z ikonami */
.footer-list a {
    padding: 0 0 0 0 !important;  /* Usuwa wewnętrzne marginesy, które mogły powodować przesunięcia */
    margin: 0 !important;         /* Likwiduje marginesy dodane przez zewnętrzne style (np. Bootstrapa) */
    line-height: inherit;         /* Przejmuje wysokość linii z elementu nadrzędnego dla spójności pionowej */
    vertical-align: middle;       /* Wyrównuje środek linku względem środka ikony */
    display: inline;              /* Przywraca klasyczny, tekstowy charakter linków (bez inline-block) */

    /*
        - `padding: 0` – Usuwa domyślne odstępy, które mogły przesuwać tekst w pionie.
        - `margin: 0` – Resetuje marginesy, by zachować równe rozmieszczenie w obrębie listy.
        - `line-height: inherit` – Spójna wysokość linii; tekst i ikony są wyrównane do jednej osi.
        - `vertical-align: middle` – Idealne dopasowanie pionowe do środka ikony.
        - `display: inline` – Link zachowuje się jak zwykły tekst, dzięki czemu całość wygląda naturalnie i równo.
    */
}

/* =========================================
   KARUZELA – PODSTAWOWA STRUKTURA
   ========================================= */

/* Pojedynczy slajd karuzeli – czyścimy padding,
   żeby pełną kontrolę nad odstępami przejął .slide-box */
#karuzela1 .carousel-item {
    padding: 0;
}

/* Główne pudełko slajdu – tło, cień, wysokość i centrowanie zawartości */
#karuzela1 .slide-box {
    background: #ffffff;                     /* Jasne tło pasujące do reszty strony */
    padding: 12px 24px;                      /* Delikatne wewnętrzne marginesy wokół treści */
    position: relative;                      /* Podstawa dla elementów absolutnie pozycjonowanych (np. rogi) */
    z-index: 0;                              /* Warstwa bazowa – nad nią pojawią się rogi i tekst */
    overflow: hidden;                        /* Ukrywa ewentualne wychodzące elementy dekoracyjne */
    box-shadow: 0 4px 15px rgba(0,0,0,0.08); /* Miękki cień nadający efekt „karty” */

    height: 400px;                           /* Stała wysokość slajdu – spójny wygląd między slajdami */
    display: flex;                           /* Dzięki flex możemy łatwo wycentrować zawartość */
    align-items: center;                     /* Centrowanie w pionie */
    justify-content: center;                 /* Centrowanie w poziomie (dla .row w środku) */
}

/*
    - `background` – białe tło wyróżnia slajd na tle strony.
    - `padding` – nadaje słabą „ramkę powietrzną” wewnątrz slajdu.
    - `position: relative` – konieczne dla dekoracji absolutnie pozycjonowanych.
    - `overflow: hidden` – nic nie „wystaje” poza pudełko.
    - `height: 400px` – ujednolicona wysokość ułatwia projekt graficzny.
    - `display: flex` + `align-items` + `justify-content` – wygodne centrowanie zawartości.
*/

/* Obraz w slajdzie – dopasowany do wysokości slajdu,
   z zachowaniem proporcji */
#karuzela1 .slide-box .slide-image {
    max-height: 340px;  /* 400px (wys. slajdu) - ok. 2×30px „oddechu” */
    width: auto;        /* Szerokość wynika z proporcji obrazka */
}

/* Wnętrze slajdu (Bootstrap .row) ma wypełniać całe pudełko .slide-box */
#karuzela1 .slide-box > .row {
    width: 100%;
}

/* =========================================
   TYPOGRAFIA W SLIDE’ACH
   ========================================= */

/* Bazowy styl tytułu slajdu – gradientowy, elegancki nagłówek */
.slide-title {
    font-weight: 600;
    margin-bottom: 0.5rem;
    letter-spacing: 0.5px;
    line-height: 1.15;
    background: linear-gradient(90deg, #3b4b2e, #b48a52);
    -webkit-background-clip: text;
    color: transparent;

    /*
        - `font-weight: 600` – lekko wzmocniony, ale nie „krzyczący” nagłówek.
        - `letter-spacing: 0.5px` – subtelne rozsunięcie liter poprawiające czytelność.
        - Gradient tekstu nawiązuje do kolorystyki Kozi Lasek (zieleń + złoto).
        - `background-clip: text` + `color: transparent` – klasyczny efekt „złotego” nagłówka.
    */
}

/* Na karuzeli #karuzela1 wymuszamy responsywny rozmiar tytułu:
   mniejszy na małych ekranach, większy na dużych. */
/* Domyślna skala – zachowujemy */
#karuzela1 .slide-title {
    font-size: clamp(2.4rem, 2.0rem + 1.5vw, 4.2rem);
}

/* Przy szerokości do 800px zmniejszamy skalę tytułu */
@media (max-width: 1000px) {
    #karuzela1 .slide-title {
        word-break: break-word;
        hyphens: auto;
        font-size: clamp(1.6rem, 1.4rem + 1.0vw, 3.0rem);
        letter-spacing: 0.2px;   /* z 0.5 → 0.2, bardziej zwarte */
        line-height: 1.05;      /* z 1.15 → 1.05, ciaśniej, ale nadal czytelnie */
    }

    #karuzela1 .slide-link  {
        word-break: break-word;
        hyphens: auto;
    }
}

/* Podtytuł – delikatniejszy gradient i lekko wzmocniony tekst */
.slide-subtitle {
    letter-spacing: 0.3px;
    font-weight: 500;
    background: linear-gradient(90deg, #4f4f4f, #8b8b8b);
    -webkit-background-clip: text;
    color: transparent;

    /*
        - Lżejszy gradient (szarości) – nie konkuruje z tytułem.
        - `font-weight: 500` – wyróżnienie, ale bez ciężkości nagłówka.
    */
}

/* Link w slajdzie – subtelny gradient tylko na tekście */
.slide-link a {
    font-weight: 600;
    text-decoration: none;

    /* gradient wewnątrz liter */
    background: linear-gradient(90deg, #2e7d32, #4f8b4f);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;

    transition: background 0.25s ease-in-out, text-decoration-color 0.25s ease-in-out;
}

/* Hover – jaśniejszy gradient + podkreślenie */
.slide-link a:hover {
    background: linear-gradient(90deg, #3fa144, #6dcf6d);
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;

    text-decoration: underline;
    text-decoration-thickness: 2px;
}

.slide-image {
    min-height: 350px;          /* Minimalna wysokość zdjęcia */
    object-fit: cover;
    width: 100%;
}

/* =========================================
   ZŁOTE ROGI – WARIANT PEŁNY (.frame-corners)
   Dla slajdów, gdzie ramka obejmuje większy blok (np. tekst + obraz)
   ========================================= */

.frame-corners {
    position: relative;          /* Punkt odniesienia dla rogów */
    padding: 24px 48px;          /* Bezpieczny odstęp między treścią a ramką – poziomo więcej */

    /*
        - `padding: 24px 48px` – pionowo 24px, poziomo 48px:
            • tekst i obraz nie „kleją się” do rogów,
            • rogi pozostają dekoracją, a nie elementem nachodzącym na treść.
    */
}

.frame-corners::before,
.frame-corners::after {
    content: "";
    position: absolute;
    width: 170px;
    height: 135px;
    border-color: #c39b5a;
    border-style: solid;
    pointer-events: none;
    z-index: 1;  /* rogi pod tekstem, ale nad tłem */

    /*
        - Szerokość i wysokość dobrane pod większy blok (tekst + zdjęcie).
        - `pointer-events: none` – rogi nigdy nie blokują kliknięć w linki.
    */
}

/* Górny lewy róg */
.frame-corners::before {
    top: 16px;
    left: 16px;
    border-width: 2px 0 0 2px;
}

/* Dolny prawy róg */
.frame-corners::after {
    bottom: 16px;
    right: 16px;
    border-width: 0 2px 2px 0;
}

/* =========================================
   ZŁOTE ROGI — TRIPLE BOTTOM (.frame-corners-triple-bottom)
   Góra-lewa + dół-prawa + dół-lewa
   ========================================= */

.frame-corners-triple-bottom {
    position: relative;
    padding: 24px 48px;  /* Bezpieczny odstęp, spójny z innymi wariantami */

    /*
        - Ten sam padding co w .frame-corners – spójność wizualna.
        - Punkt odniesienia dla wszystkich rogów.
    */
}

/* --- Róg 1 — GÓRA LEWA (jak we wzorcu) --- */
.frame-corners-triple-bottom::before {
    content: "";
    position: absolute;
    width: 170px;
    height: 135px;
    border-color: #c39b5a;
    border-style: solid;
    pointer-events: none;
    z-index: 1;

    top: 16px;
    left: 16px;
    border-width: 2px 0 0 2px;
}

/* --- Róg 2 — DÓŁ PRAWA (jak we wzorcu) --- */
.frame-corners-triple-bottom::after {
    content: "";
    position: absolute;
    width: 170px;
    height: 135px;
    border-color: #c39b5a;
    border-style: solid;
    pointer-events: none;
    z-index: 1;

    bottom: 16px;
    right: 16px;
    border-width: 0 2px 2px 0;
}

/* --- Róg 3 — DÓŁ LEWA (NOWY) --- */
.frame-corners-triple-bottom .corner-extra-bottom::before {
    content: "";
    position: absolute;
    width: 170px;
    height: 135px;
    border-color: #c39b5a;
    border-style: solid;
    pointer-events: none;
    z-index: 1;

    bottom: 16px;
    left: 16px;
    border-width: 0 0 2px 2px;

    /*
        - Dodatkowy dolny lewy róg – tworzy układ:
          góra-lewa + dół-lewa + dół-prawa.
        - Pozostajemy w tym samym stylu co .frame-corners.
    */
}

/* =========================================
   ZŁOTE ROGI – WARIANT TEKSTOWY (.frame-corners-text)
   Do slajdu 2 – ramka obejmuje tylko kolumnę z tekstem
   ========================================= */

.frame-corners-text {
    position: relative;          /* Podstawa dla pseudo-elementów */
    padding: 24px 48px;          /* Nieco mniejszy padding pionowy, większy poziomy */

    /*
        - `padding: 24px 48px` – pionowo delikatnie mniej, poziomo więcej:
            • tekst zostaje wyraźnie odsunięty od rogów,
            • efekt „premium” dzięki szerszym marginesom bocznym,
            • bez ryzyka nachodzenia ramki na tekst w trybie responsywnym.
    */
}

.frame-corners-text::before,
.frame-corners-text::after {
    content: "";
    position: absolute;
    width: 90px;   /* Mniejsze wymiary – dopasowane do bloku tekstu */
    height: 60px;
    border-color: #c39b5a;
    border-style: solid;
    pointer-events: none;
    z-index: 3;    /* Lekkie podbicie warstwy – nad tłem, ale tekst dzięki paddingowi nie wchodzi w rogi */

    /*
        - Mniejszy prostokąt niż w .frame-corners – dzięki temu ramka
          wygląda subtelnie przy samym tekście.
    */
}

/* Górny lewy róg wariantu tekstowego */
.frame-corners-text::before {
    top: 12px;
    left: 12px;
    border-width: 2px 0 0 2px;
}

/* Dolny prawy róg wariantu tekstowego */
.frame-corners-text::after {
    bottom: 12px;
    right: 12px;
    border-width: 0 2px 2px 0;
}


.navbar .google-cse-nav {
  width: 300px !important; /* Stała szerokość wyszukiwarki w navbarze */
}

@media (max-width: 990px) {
  .navbar .google-cse-nav {
    width: 100% !important;
    margin-left: 0 !important; /* reset ms-auto */
  }
}

/*
    - `padding: 0` – usunięcie domyślnych odstępów Google CSE,
    - zapobiega „rozpychaniu” navbaru w pionie.
*/
.gsc-control-cse {
  padding: 0;
}

.navbar .google-cse-nav .gsc-control-cse,
.navbar .google-cse-nav .gsc-control-cse-pl,
.navbar .google-cse-nav .gsc-search-box,
.navbar .google-cse-nav .gsc-search-box-tools {
  background: transparent !important; /* Usuwa „plamę” tła Google CSE, aby komponent stapiał się z gradientem belki. */
  border: 0 !important; /* Czyści dodatkowe obrysy generowane przez widget Google. */
}

/* Pasek nawigacji: odchudzone pole Google CSE bez zjeżdżania w dół */
.navbar .google-cse-nav table.gsc-search-box td {
  vertical-align: middle !important; /* Pionowe centrowanie zawartości */
  padding-top: 0 !important;
  padding-bottom: 0 !important;

  /*
      - `vertical-align: middle` – kluczowe, żeby input nie „opadał”,
      - zerowy padding – brak niekontrolowanych przesunięć w dół.
  */
}

/* Obudowa pola input – odpowiada za ramkę, wysokość i centrowanie */
.navbar .google-cse-nav .gsc-input-box {
  border: 1px solid #050505 !important; /* Cienka, wyraźna ramka */
  border-radius: 6px !important;        /* Delikatnie zaokrąglone rogi */
  background: #fff !important;          /* Pewne białe tło pod input */
  height: 34px !important;              /* Wysokość spójna z navbar */

  display: flex !important;
  align-items: center !important;       /* Pionowe centrowanie inputa */

  padding: 0 10px !important;           /* Oddech tekstu od ramki */
  overflow: visible !important;         /* Zapobiega obcinaniu zawartości */
  box-sizing: border-box !important;

  /*
      - wrapper przejmuje ramkę (input jest „goły”),
      - `flex + align-items:center` gwarantuje stabilne wyśrodkowanie,
      - padding na wrapperze = lepsza kontrola layoutu niż na input.
  */
}

/* Pole input – wypełnia obudowę, bez własnych dekoracji */
.navbar .google-cse-nav input.gsc-input {
  border: 0 !important;
  outline: 0 !important;
  box-shadow: none !important;           /* Pełne „odchudzenie” inputa */

  height: 100% !important;               /* Dopasowanie do wrappera */
  line-height: 34px !important;          /* Optyczne centrowanie tekstu */
  width: 100% !important;

  margin: 0 !important;
  padding: 0 !important;                 /* Padding obsługuje wrapper */
  background: transparent !important;
  box-sizing: border-box !important;

  /*
      - brak ramki i cienia → pełna kontrola stylu przez wrapper,
      - `height: 100%` = brak rozjazdów pionowych,
      - `line-height` stabilizuje pozycję tekstu w różnych przeglądarkach.
  */
}

/* Kontener – poziome ustawienie ikon social media */
.social-wrapper {
    display: flex;                    /* Układ poziomy (flexbox) */
    gap: 18px;                        /* Stały odstęp między ikonami */
    align-items: center;              /* Wyrównanie w osi pionowej */
    justify-content: flex-start;      /* Ikony wyrównane do lewej */

    /*
        - `display: flex` → proste, stabilne ustawienie obok siebie,
        - `gap` → kontrolowany odstęp bez używania marginesów,
        - `align-items: center` → brak „pływania” ikon przy różnych fontach,
        - `justify-content` → łatwa zmiana na `center`, jeśli chcemy wyśrodkować.
    */
}


/* Link – baza dla ikony */
.social-icon {
    font-size: 26px;                  /* Czytelny, ale nienachalny rozmiar */
    text-decoration: none;            /* Brak podkreślenia */
    display: inline-flex;             /* Stabilne centrowanie ikon */
    align-items: center;
    justify-content: center;

    transition: transform 0.2s ease,
                opacity 0.2s ease;     /* Płynny, elegancki hover */

    /*
        - `inline-flex` → pozwala kontrolować pozycję ikony,
        - brak dekoracji → czysta forma,
        - umiarkowany rozmiar → estetyka hotelowa, nie „social media wall”.
    */
}


/* Ikona Facebooka – oficjalny kolor marki */
.social-icon.facebook {
    color: #1877F2;                   /* Oficjalny niebieski kolor Facebooka */

    /*
        - Kolor zgodny z brandbookiem FB,
        - nadpisuje ewentualne dziedziczenie z `.style1 a`.
    */
}


/* Ikona Instagrama – uproszczony kolor marki */
.social-icon.instagram {
    color: #E4405F;                   /* Oficjalny różowy kolor Instagrama */

    /*
        - Użyty główny kolor marki zamiast gradientu,
        - zachowuje elegancję (gradient byłby zbyt agresywny wizualnie).
    */
}


/* Efekt hover – subtelne podkreślenie interakcji */
.social-icon:hover {
    transform: scale(1.15);           /* Delikatne powiększenie */
    opacity: 0.85;                    /* Lekkie przygaszenie */

    /*
        - `scale` → czytelny sygnał interakcji,
        - `opacity` → miękki efekt zamiast zmiany koloru,
        - brak agresywnych animacji → spójność z klimatem Koziego Lasku.
    */
}

/* Lista w stopce – podział na 2 kolumny */
.footer-list-columns {
    column-count: 2;                /* Dwie kolumny */
    column-gap: 30px;               /* Odstęp między kolumnami */
    padding-left: 0;
    list-style: none;

    /*
        - `column-count: 2` → automatyczny podział na dwie kolumny,
        - brak ingerencji w HTML,
        - równe wypełnienie przestrzeni w kolumnie,
        - dobre rozwiązanie przy zmiennej liczbie linków (np. blog tylko PL).
    */
}

/* Element listy – unikamy łamania między kolumnami */
.footer-list-columns li {
    break-inside: avoid;            /* Nie rozdziela pojedynczego linku */
    margin-bottom: 2px;

    /*
        - `break-inside: avoid` → zapobiega rozjechaniu linku,
        - mały margines → lżejszy wizualnie footer.
    */
}

/* Wersja mobilna – kolumny w stopce w jednej kolumnie */
@media (max-width: 768px) {
    .footer-list-columns {
        column-count: 1; /* Wymusza jedną kolumnę – lepsza czytelność na małych ekranach */
    }

    /*
        - `max-width: 768px` – standardowy breakpoint dla tabletów i telefonów.
        - `column-count: 1` – usuwa podział na wiele kolumn, dzięki czemu lista nie jest ściśnięta.
    */
}

/* Przycisk rezerwacji – wersja subtelna (pozostajemy przy lekkiej formie) */
.btn-reservation {
    background-color: transparent; /* Brak wypełnienia – elegancki minimalizm */
    color: #7f7456; /* Stonowany oliwkowy kolor tekstu */
    border: 1px solid #ada07d; /* Delikatna oliwkowa ramka */
    padding: 0.5rem 1.2rem; /* Nieco mniejszy niż klasyczny .btn – mniej agresywny */
    border-radius: 10px; /* Miękkie, nowoczesne zaokrąglenie */
    transition: all 0.2s ease; /* Płynne przejście efektów hover */
    display: inline-block; /* Naturalne zachowanie w układzie */
}

/*
    - `background-color: transparent` – zachowuje lekkość wizualną.
    - `color` + `border` – budują subtelny, hotelowy klimat.
    - `border-radius: 10px` – delikatna elegancja.
    - `transition` – brak „szarpania” przy hover.
*/

/* Efekt po najechaniu – dyskretne podkreślenie */
.btn-reservation:hover {
    text-decoration: underline; /* Subtelne zaznaczenie interakcji */
    border: 1px solid #ada07d; /* Zachowujemy spójność z wersją bazową */
    color: #7f7456; /* Bez zmiany koloru – minimalizm */
}

/*
    - Hover nie zmienia tła – pozostajemy przy spokojnym efekcie.
    - Podkreślenie jest lekkim sygnałem kliknięcia.
*/


/* Nagłówek sekcji w Polityce Prywatności */
.privacy-section-title {
    font-weight: 600; /* Wyraźniejsze wyróżnienie nagłówka */
    font-size: 1.1rem; /* Nieco większy niż standardowy tekst */
    margin-top: 30px; /* Oddech nad sekcją */
    margin-bottom: 10px; /* Mniejszy odstęp pod nagłówkiem */
    padding-bottom: 5px; /* Miejsce na dolną linię */
    border-bottom: 1px solid #e5e5e5; /* Subtelne oddzielenie sekcji */
    color: #5a5858; /* Delikatny, profesjonalny szary */
}

/*
    - `border-bottom` – wizualny separator treści.
    - `margin-top` – rytm między sekcjami.
    - `color` – spokojniejszy niż czysta czerń.
*/


/* Blok z danymi firmy w Polityce Prywatności */
.privacy-company-block {
    color: #565656; /* Neutralny, czytelny szary */
    font-size: 1.09em; /* Minimalnie większa czcionka dla czytelności */
    line-height: 1.7; /* Komfort czytania przy dłuższych treściach */
    margin: 15px 0 20px 0; /* Odstęp nad i pod blokiem */
}

/*
    - `line-height: 1.7` – zwiększona czytelność.
    - `font-size` – delikatne wyróżnienie bez agresji.
*/


/* Sekcje treści w Polityce Prywatności – jasne karty */
.privacy-section-card {
    background-color: #f9f9f9; /* Bardzo jasny szary – lekki kontrast z tłem */
    padding: 20px 24px; /* Wewnętrzny oddech tekstu */
    border-radius: 14px; /* Miękkie, przyjazne zaokrąglenie */
    margin-bottom: 22px; /* Rytm między kartami */

    border: 1px solid #ececec; /* Delikatne obramowanie */
    font-style: italic; /* Subtelna kursywa dla wyróżnienia treści */
}

/* Tekst w banerze zgody cookies */
#kl-consent-banner .text-muted {
    text-align: justify; /* Wyjustowanie tekstu dla lepszej czytelności */
    /*
        - `text-align: justify` – Wyrównuje tekst do obu krawędzi,
          dzięki czemu komunikat wygląda czyściej.
    */
}

/* Główne ustawienia banera zgody cookies */
#kl-consent-banner {
    left: 0; /* Przyklejenie banera do lewej krawędzi ekranu */
    bottom: 0; /* Domyślnie baner osadzony przy dolnej krawędzi */
    width: calc(100vw - 1rem); /* Prawie pełna szerokość ekranu z małym marginesem */
    max-width: 600px; /* Ograniczenie szerokości na większych ekranach */
    /*
        - `left: 0` – Baner zaczyna się od lewej strony ekranu.
        - `bottom: 0` – Na większych ekranach pozostaje przy samym dole.
        - `width: calc(100vw - 1rem)` – Daje szerokość prawie całego ekranu,
          ale zostawia delikatny odstęp od krawędzi.
        - `max-width: 600px` – Chroni przed zbyt szerokim banerem na desktopie.
    */
}

/* Małe ekrany – podnosimy baner nad pływające przyciski */
@media (max-width: 768px), (max-height: 420px) {
    #kl-consent-banner {
        bottom: 180px; /* Podniesienie banera nad przyciski: rezerwacja / AI / czat */
        max-width: none; /* Na mobile i niskich ekranach pełna kontrola szerokości */
        /*
            - `bottom: 110px` – Baner nie nachodzi na pływające przyciski.
            - `max-width: none` – Na małych ekranach nie ograniczamy się limitem desktopowym.
        */
    }

    #kl-consent-banner .kl-consent-layout {
        display: grid !important; /* Na mobile przechodzimy z flexa na prosty układ siatki */
        grid-template-columns: 1fr; /* Jedna kolumna – tekst i przyciski pod sobą */
        gap: 0.75rem; /* Lekki odstęp między blokami */
        /*
            - `display: grid` – Resetuje zachowanie dwukolumnowe z desktopu.
            - `grid-template-columns: 1fr` – Jeden blok na całą szerokość.
        */
    }

    #kl-consent-banner .kl-consent-text {
        width: 100%; /* Tekst zajmuje całą szerokość */
        margin-right: 0 !important; /* Usuwa desktopowy margines po prawej */
        /*
            - `width: 100%` – Koniec z pustym miejscem po prawej stronie.
            - `margin-right: 0` – Zeruje margines z wersji desktopowej.
        */
    }

    #kl-consent-banner .kl-consent-actions {
        width: 100%; /* Blok przycisków na pełną szerokość */
        display: grid !important; /* Przyciski układamy przewidywalnie */
        grid-template-columns: 1fr 1fr; /* Dwa przyciski obok siebie, jeśli się mieszczą */
        gap: 0.5rem; /* Odstęp między przyciskami */
        /*
            - `grid-template-columns: 1fr 1fr` – Dwa równe przyciski obok siebie.
            - To daje ładniejszy efekt niż „pozostałość po kolumnie”.
        */
    }

    #kl-consent-banner .kl-consent-actions .btn {
        width: 100%; /* Każdy przycisk wypełnia swoją komórkę */
        /*
            - `width: 100%` – Spójna szerokość i wygodne kliknięcie.
        */
    }
}

/* Bardzo wąskie ekrany – przyciski jeden pod drugim */
@media (max-width: 420px) {
    #kl-consent-banner .kl-consent-actions {
        grid-template-columns: 1fr; /* Na bardzo małym ekranie przyciski pionowo */
        /*
            - `grid-template-columns: 1fr` – Maksymalna czytelność i brak ścisku.
        */
    }
}


/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tU3R5bGUuY3NzIiwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUE2QztBQUM3QztJQUNJLGtFQUEyRDtJQUMzRDs7Ozs7S0FLQztBQUNMOztBQUVBO0lBQ0ksd0JBQXdCO0lBQ3hCLDhCQUE4QjtJQUM5Qiw4Q0FBOEM7SUFDOUMsbURBQW1EO0lBQ25ELDZDQUE2QztJQUM3Qyw4Q0FBOEM7QUFDbEQ7O0FBRUEsK0NBQStDO0FBQy9DO0lBQ0kseUNBQXlDO0lBQ3pDOzs7OztLQUtDOztJQUVELGNBQWM7SUFDZDs7O0tBR0M7QUFDTDs7QUFFQSw0Q0FBNEM7QUFDNUM7SUFDSSxjQUFjO0lBQ2Q7Ozs7S0FJQztBQUNMOztBQUVBLHVDQUF1QztBQUN2QztJQUNJLG1CQUFtQjtJQUNuQjs7OztLQUlDOztJQUVELGlCQUFpQjtJQUNqQjs7OztLQUlDO0FBQ0w7O0FBRUEsb0RBQW9EO0FBQ3BEO0lBQ0ksMkJBQTJCO0lBQzNCOzs7Ozs7O0tBT0M7QUFDTDs7QUFFQTtJQUNJLG9DQUFvQyxFQUFFLGdKQUFnSjtJQUN0TCxZQUFZLEVBQUUsd0VBQXdFO0lBQ3RGLHVCQUF1QjtJQUN2Qjs7OztLQUlDO0FBQ0w7O0FBRUE7SUFDSSxpQkFBaUIsRUFBRSxzRUFBc0U7SUFDekYsaUJBQWlCLEVBQUUsd0RBQXdEO0lBQzNFLGtCQUFrQixFQUFFLDBGQUEwRjtJQUM5RyxnQkFBZ0IsRUFBRSw2RkFBNkY7SUFDL0csbUJBQW1CLEVBQUUsK0NBQStDO0lBQ3BFLGFBQWEsRUFBRSx1RUFBdUU7SUFDdEYsZUFBZSxFQUFFLDJFQUEyRTs7SUFFNUY7Ozs7OztLQU1DO0FBQ0w7O0FBRUE7SUFDSSxXQUFXO0lBQ1gsa0JBQWtCLEVBQUUsMEVBQTBFO0lBQzlGLFFBQVEsRUFBRSxrREFBa0Q7SUFDNUQsU0FBUyxFQUFFLGtEQUFrRDtJQUM3RCxZQUFZLEVBQUUsK0RBQStEO0lBQzdFLGFBQWEsRUFBRSw4REFBOEQ7SUFDN0Usb0JBQW9CLEVBQUUsOENBQThDO0lBQ3BFOzs7d0hBR29IO0lBQ3BILFVBQVUsRUFBRSw0Q0FBNEM7SUFDeEQ7Ozs7O0tBS0M7QUFDTDs7QUFFQTtJQUNJLGtCQUFrQixFQUFFLG9GQUFvRjtJQUN4RyxVQUFVLEVBQUUsb0RBQW9EO0FBQ3BFOztBQUVBOztJQUVJLGtDQUFrQyxFQUFFLHVGQUF1RjtBQUMvSDs7QUFFQTtJQUNJLFdBQVcsRUFBRSxvRUFBb0U7QUFDckY7O0FBRUE7SUFDSSwyQkFBMkIsRUFBRSx3RUFBd0U7QUFDekc7O0FBRUE7SUFDSSxvQkFBb0IsRUFBRSx1RUFBdUU7SUFDN0YsNEJBQTRCLEVBQUUsa0ZBQWtGO0lBQ2hILHFCQUFxQixFQUFFLHFGQUFxRjtJQUM1RyxnQkFBZ0IsRUFBRSxrRUFBa0U7SUFDcEY7Ozs7O0tBS0M7QUFDTDs7QUFFQTtJQUNJLHFCQUFxQixFQUFFLDBGQUEwRjtJQUNqSCxtQkFBbUIsRUFBRSxzRkFBc0Y7SUFDM0csU0FBUyxFQUFFLG1GQUFtRjtJQUM5Rix1QkFBdUIsRUFBRSxxRUFBcUU7SUFDOUYsc0NBQXNDLEVBQUUsOERBQThEO0lBQ3RHLGtCQUFrQixFQUFFLHVFQUF1RTtJQUMzRixnQkFBZ0IsRUFBRSx3REFBd0Q7SUFDMUUsK0JBQStCLEVBQUUsb0RBQW9EO0lBQ3JGLCtDQUErQyxFQUFFLDREQUE0RDtJQUM3RyxnQ0FBZ0MsRUFBRSx5REFBeUQ7SUFDM0YsNkJBQTZCLEVBQUUsZ0VBQWdFO0lBQy9GLHNCQUFzQixFQUFFLG1FQUFtRTtJQUMzRiw4R0FBOEcsRUFBRSw4Q0FBOEM7SUFDOUo7Ozs7S0FJQztBQUNMOztBQUVBOztJQUVJLDRDQUE0QyxFQUFFLGtFQUFrRTtJQUNoSCx5Q0FBeUMsRUFBRSwyREFBMkQ7SUFDdEcscURBQXFELEVBQUUsK0RBQStEO0lBQ3RILCtDQUErQyxFQUFFLHlFQUF5RTtJQUMxSCxhQUFhLEVBQUUsNEVBQTRFO0lBQzNGOzs7S0FHQztBQUNMOzs7QUFHQTtJQUNJO1FBQ0ksaUJBQWlCO0lBQ3JCO0lBQ0E7Ozs7O0tBS0M7QUFDTDs7QUFFQSxxQ0FBcUM7QUFDckM7SUFDSSxrQkFBa0I7SUFDbEI7Ozs7S0FJQztBQUNMOztBQUVBLHlDQUF5QztBQUN6QztJQUNJLFlBQVk7SUFDWjs7O0tBR0M7O0lBRUQsdUVBQXFFO0lBQ3JFOzs7O0tBSUM7O0lBRUQsbUJBQW1CO0lBQ25COzs7S0FHQzs7SUFFRCxnQkFBZ0I7SUFDaEI7OztLQUdDOztJQUVELGlCQUFpQjtJQUNqQjs7OztLQUlDOztJQUVELDBCQUEwQjtJQUMxQjs7O0tBR0M7O0lBRUQsaUJBQWlCO0lBQ2pCOzs7S0FHQzs7SUFFRCx5QkFBeUI7SUFDekI7OztLQUdDOztJQUVELGVBQWU7SUFDZjs7O0tBR0M7O0lBRUQsY0FBYztJQUNkOzs7S0FHQztBQUNMOztBQUVBLHFDQUFxQztBQUNyQztJQUNJLG9CQUFvQjtJQUNwQjs7OztLQUlDO0FBQ0w7O0FBRUEsZ0NBQWdDO0FBQ2hDO0lBQ0ksa0JBQWtCLEVBQUUsc0RBQXNEO0lBQzFFLHFCQUFxQixFQUFFLGlFQUFpRTtJQUN4RixvQkFBb0I7SUFDcEI7OztLQUdDOztJQUVELGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsc0JBQXNCO0lBQ3RCLDhCQUE4QixFQUFFLHdFQUF3RTtJQUN4RywwRUFBMEU7SUFDMUUsNkJBQTZCO0lBQzdCLHFCQUFxQjtJQUNyQixvQ0FBb0M7SUFDcEMsZ0RBQWdEO0lBQ2hEOzs7O0tBSUM7QUFDTDs7QUFFQTtJQUNJLFdBQVc7SUFDWCxrQkFBa0I7SUFDbEIsT0FBTztJQUNQLFdBQVc7SUFDWCxzQkFBc0I7SUFDdEIsV0FBVztJQUNYLG9CQUFvQjtJQUNwQixnR0FBZ0c7SUFDaEc7Ozs7S0FJQztBQUNMOztBQUVBLGlDQUFpQztBQUNqQztJQUNJLG1CQUFtQjtJQUNuQjs7OztLQUlDO0FBQ0w7O0FBRUEsaUNBQWlDO0FBQ2pDO0lBQ0ksbUJBQW1CO0lBQ25COzs7O0tBSUM7QUFDTDs7QUFFQSwyQkFBMkI7QUFDM0I7SUFDSSxZQUFZLEVBQUUsbURBQW1EO0lBQ2pFLFlBQVksRUFBRSx1REFBdUQ7SUFDckUsZ0JBQWdCLEVBQUUsZ0ZBQWdGO0lBQ2xHLGVBQWUsRUFBRSwwRUFBMEU7O0lBRTNGOzs7OztLQUtDO0FBQ0w7O0FBRUEsZ0NBQWdDO0FBQ2hDO0lBQ0ksMEJBQTBCLEVBQUUscUVBQXFFO0lBQ2pHLGdDQUFnQyxFQUFFLGtFQUFrRTs7SUFFcEc7OztLQUdDO0FBQ0w7O0FBRUEsa0RBQWtEO0FBQ2xEO0lBQ0ksZ0JBQWdCO0lBQ2hCOzs7S0FHQztBQUNMOztBQUVBLHlDQUF5QztBQUN6QztJQUNJLGNBQWMsRUFBRSxxR0FBcUc7SUFDckgsd0JBQXdCLEVBQUUsbUVBQW1FO0lBQzdGLHFCQUFxQixFQUFFLCtEQUErRDtJQUN0RixjQUFjLEVBQUUsc0VBQXNFOztJQUV0Rjs7Ozs7S0FLQztBQUNMOztBQUVBLGdGQUFnRjtBQUNoRjtJQUNJLDBCQUEwQjtJQUMxQjs7O0tBR0M7QUFDTDs7QUFFQSwyQ0FBMkM7QUFDM0M7SUFDSSxjQUFjO0lBQ2QsWUFBWTtJQUNaLFlBQVk7SUFDWixnQkFBZ0I7SUFDaEIsMERBQXdEO0lBQ3hELG1CQUFtQjtJQUNuQixrQkFBa0I7SUFDbEIsaUJBQWlCO0lBQ2pCLHlCQUF5QjtJQUN6QixlQUFlO0lBQ2YsY0FBYztJQUNkLGdCQUFnQjtJQUNoQixnQkFBZ0I7SUFDaEI7Ozs7Ozs7Ozs7O0tBV0M7QUFDTDs7QUFFQTs7SUFFSSxjQUFjO0lBQ2QsMERBQXdEO0lBQ3hELGFBQWE7QUFDakI7O0FBRUEsd0VBQXdFO0FBQ3hFO0lBQ0ksdUJBQXVCO0lBQ3ZCOztLQUVDO0FBQ0w7O0FBRUEsaURBQWlEO0FBQ2pEO0lBQ0kscUJBQXFCO0lBQ3JCOzs7O0tBSUM7QUFDTDs7QUFFQSx5REFBeUQ7QUFDekQ7SUFDSSwwQkFBMEI7SUFDMUI7Ozs7S0FJQztBQUNMOztBQUVBLHVHQUF1RztBQUN2Rzs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFpQkksc0NBQXNDO0lBQ3RDLCtCQUErQjtJQUMvQiwrQ0FBK0M7SUFDL0MsZ0NBQWdDO0lBQ2hDLDZCQUE2QjtJQUM3QixzQkFBc0I7SUFDdEIsOEdBQThHO0FBQ2xIOztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQTZCSSw0Q0FBNEM7SUFDNUMseUNBQXlDO0lBQ3pDLHFEQUFxRDtJQUNyRCwrQ0FBK0M7SUFDL0MsYUFBYTtBQUNqQjs7QUFFQTs7SUFFSSx5QkFBeUI7SUFDekIscUJBQXFCO0lBQ3JCLHVCQUF1QjtJQUN2QixnQkFBZ0I7QUFDcEI7O0FBRUE7O0lBRUkseUJBQXlCO0lBQ3pCLDBCQUEwQjtJQUMxQix1QkFBdUI7SUFDdkIsZ0JBQWdCO0lBQ2hCLGFBQWE7QUFDakI7O0FBRUE7SUFDSSxvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLCtCQUErQjtJQUMvQiwyQkFBMkI7SUFDM0IsWUFBWTtJQUNaLG1CQUFtQjtJQUNuQixxQ0FBcUM7SUFDckMsY0FBYztJQUNkLG9CQUFvQjtJQUNwQixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLHNCQUFzQjtJQUN0Qix5QkFBeUI7SUFDekIsc0JBQXNCO0lBQ3RCLG1EQUFtRDtBQUN2RDs7QUFFQTs7SUFFSSxrQkFBa0I7SUFDbEIsYUFBYTtBQUNqQjs7QUFFQTtJQUNJO1FBQ0kscUJBQXFCO1FBQ3JCLHNCQUFzQjtJQUMxQjtBQUNKOztBQUVBLCtCQUErQjtBQUMvQjtJQUNJLFlBQVksRUFBRSwyRUFBMkU7SUFDekYsNEJBQTRCLEVBQUUsa0VBQWtFO0lBQ2hHLGlCQUFpQixFQUFFLCtFQUErRTtJQUNsRyxrQkFBa0IsRUFBRSx3R0FBd0c7SUFDNUgsV0FBVyxFQUFFLHFFQUFxRTtJQUNsRixXQUFXLEVBQUUsa0NBQWtDO0lBQy9DLGdDQUFnQyxFQUFFLHlDQUF5QztJQUMzRSw2QkFBNkIsRUFBRSx5Q0FBeUM7SUFDeEUsbUJBQW1CLEVBQUUsK0NBQStDO0lBQ3BFLDBFQUEwRTtJQUMxRSwrRUFBK0U7SUFDL0U7Ozs7S0FJQztBQUNMOztBQUVBLGlDQUFpQztBQUNqQztJQUNJLDZCQUE2QixFQUFFLHdCQUF3QjtJQUN2RCxnQkFBZ0IsRUFBRSwwQkFBMEI7SUFDNUMsZUFBZSxFQUFFLHVCQUF1QjtBQUM1Qzs7QUFFQTtJQUNJLGFBQWE7SUFDYixzQkFBc0I7SUFDdEIscUJBQXFCO0lBQ3JCLFNBQVM7SUFDVCxtQkFBbUI7SUFDbkI7Ozs7O0tBS0M7QUFDTDs7QUFFQTtJQUNJLG1CQUFtQjtJQUNuQix1QkFBdUI7SUFDdkI7OztLQUdDO0FBQ0w7O0FBRUE7SUFDSSxvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLHlCQUF5QjtJQUN6QixZQUFZO0lBQ1osZUFBZTtJQUNmLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsZ0JBQWdCO0lBQ2hCOzs7Ozs7Ozs7S0FTQztBQUNMOztBQUVBOzs7SUFHSSxtQkFBbUI7SUFDbkIsY0FBYztJQUNkOzs7S0FHQztBQUNMOztBQUVBO0lBQ0kscUJBQXFCO0lBQ3JCOztLQUVDO0FBQ0w7O0FBRUE7SUFDSSx1QkFBdUI7SUFDdkIsWUFBWTtJQUNaLFlBQVk7SUFDWiwwRUFBMEU7SUFDMUUsb0JBQW9CO0lBQ3BCOzs7Ozs7S0FNQztBQUNMOztBQUVBO0lBQ0k7UUFDSSx1QkFBdUI7UUFDdkIsZ0JBQWdCO1FBQ2hCLGdCQUFnQjtRQUNoQixnQkFBZ0I7UUFDaEI7Ozs7U0FJQztJQUNMOztJQUVBO1FBQ0ksMkJBQTJCO1FBQzNCLDBDQUEwQztRQUMxQzs7O1NBR0M7SUFDTDtBQUNKOztBQUVBO0lBQ0k7UUFDSSxtQkFBbUI7UUFDbkIsa0JBQWtCO1FBQ2xCLGdCQUFnQjtRQUNoQixnQkFBZ0I7UUFDaEI7OztTQUdDO0lBQ0w7O0lBRUE7UUFDSSx1QkFBdUI7UUFDdkIsa0JBQWtCO1FBQ2xCOzs7U0FHQztJQUNMO0FBQ0o7O0FBRUE7SUFDSTtRQUNJLGtCQUFrQjtRQUNsQjs7O1NBR0M7SUFDTDtBQUNKOztBQUVBOzs7O0NBSUM7O0FBRUQsOEdBQThHO0FBQzlHOztJQUVJLGtCQUFrQixFQUFFLGdHQUFnRztJQUNwSDs7Ozs7S0FLQztBQUNMOztBQUVBLG9DQUFvQztBQUNwQztJQUNJLGdDQUFnQyxFQUFFLHFHQUFxRztJQUN2SSxXQUFXLEVBQUUsa0NBQWtDO0lBQy9DLGVBQWUsRUFBRSxxQ0FBcUM7SUFDdEQsZ0JBQWdCLEVBQUUsc0VBQXNFO0lBQ3hGLGlCQUFpQixFQUFFLGlFQUFpRTtJQUNwRixvQkFBb0IsRUFBRSwyR0FBMkc7SUFDakkseUJBQXlCLEVBQUUsb0RBQW9EO0lBQy9FOzs7OztLQUtDO0FBQ0w7O0FBRUEsOEJBQThCO0FBQzlCO0lBQ0ksZUFBZSxFQUFFLHVGQUF1RjtJQUN4RyxxQkFBcUIsRUFBRSx1R0FBdUc7SUFDOUgsY0FBYyxFQUFFLG9GQUFvRjtJQUNwRyxlQUFlLEVBQUUscUVBQXFFO0lBQ3RGLGdCQUFnQixFQUFFLGlGQUFpRjtJQUNuRyxXQUFXLEVBQUUseUNBQXlDO0lBQ3REOzs7Ozs7S0FNQztBQUNMOztBQUVBLHdDQUF3QztBQUN4QztJQUNJLGtCQUFrQixFQUFFLDJFQUEyRTtJQUMvRixjQUFjLEVBQUUsc0ZBQXNGO0lBQ3RHOzs7S0FHQztBQUNMOzs7QUFHQSwrQkFBK0I7QUFDL0I7SUFDSSxXQUFXLEVBQUUseUNBQXlDO0lBQ3REOzs7S0FHQztBQUNMOztBQUVBLHlEQUF5RDtBQUN6RDtJQUNJLGVBQWUsRUFBRSx1RkFBdUY7SUFDeEcsb0JBQW9CLEVBQUUsNEZBQTRGO0lBQ2xILG1CQUFtQixFQUFFLDJGQUEyRjtJQUNoSCwyQkFBMkIsRUFBRSwwRUFBMEU7SUFDdkcsaUJBQWlCLEVBQUUsdUVBQXVFO0lBQzFGOzs7Ozs7O0tBT0M7QUFDTDs7QUFFQTtJQUNJLGNBQWMsRUFBRSxvR0FBb0c7SUFDcEgsa0JBQWtCLEVBQUUsbUVBQW1FO0lBQ3ZGLGNBQWMsRUFBRSx1R0FBdUc7SUFDdkg7Ozs7S0FJQztBQUNMOztBQUVBO0lBQ0ksbUJBQW1CLEVBQUUsd0RBQXdEO0lBQzdFLGtCQUFrQixFQUFFLG1FQUFtRTtJQUN2RixxQkFBcUIsRUFBRSx1RkFBdUY7SUFDOUcsWUFBWSxFQUFFLHVDQUF1QztJQUNyRCxVQUFVLEVBQUUsK0RBQStEO0lBQzNFLFdBQVcsRUFBRSx1RUFBdUU7SUFDcEYsV0FBVyxFQUFFLDRDQUE0QztJQUN6RCxnQkFBZ0IsRUFBRSwwRUFBMEU7SUFDNUY7Ozs7Ozs7OztLQVNDO0FBQ0w7O0FBRUE7SUFDSSxnQkFBZ0IsRUFBRSx1SEFBdUg7SUFDekk7O0tBRUM7QUFDTDs7QUFFQTtJQUNJLHlCQUF5QixFQUFFLDZFQUE2RTtJQUN4RywwQkFBMEIsRUFBRSx3RkFBd0Y7SUFDcEgsdUJBQXVCLEVBQUUsa0ZBQWtGO0lBQzNHLHFCQUFxQixFQUFFLG1GQUFtRjtJQUMxRyxzQkFBc0IsRUFBRSwrRUFBK0U7SUFDdkcsa0JBQWtCLEVBQUUsNkVBQTZFO0lBQ2pHLFdBQVcsRUFBRSxtR0FBbUc7SUFDaEgsWUFBWSxFQUFFLHNDQUFzQztJQUNwRCxpQkFBaUIsRUFBRSwyRUFBMkU7SUFDOUYsaUJBQWlCLEVBQUUsaUZBQWlGO0lBQ3BHLFVBQVUsRUFBRSx3Q0FBd0M7SUFDcEQsa0JBQWtCLEVBQUUsNEZBQTRGO0lBQ2hILFdBQVcsRUFBRSx1Q0FBdUM7SUFDcEQsNEJBQTRCLEVBQUUsZ0dBQWdHO0lBQzlILGlDQUFpQyxFQUFFLGtFQUFrRTtJQUNyRyxvQ0FBb0MsRUFBRSxpRUFBaUU7SUFDdkcsZ0NBQWdDLEVBQUUsb0VBQW9FO0lBQ3RHLCtCQUErQixFQUFFLGlGQUFpRjtJQUNsSDs7Ozs7Ozs7OztLQVVDO0FBQ0w7O0FBRUE7SUFDSSxjQUFjLEVBQUUsMEhBQTBIO0lBQzFJOztLQUVDO0FBQ0w7O0FBRUE7SUFDSSx5QkFBeUIsRUFBRSw2R0FBNkc7SUFDeEksbUJBQW1CLEVBQUUsNkVBQTZFO0lBQ2xHOzs7S0FHQztBQUNMOztBQUVBO0lBQ0ksZUFBZSxFQUFFLDRGQUE0RjtJQUM3RyxpQkFBaUIsRUFBRSxnR0FBZ0c7SUFDbkgseUJBQXlCLEVBQUUsa0hBQWtIO0lBQzdJOzs7O0tBSUM7QUFDTDs7QUFFQTtJQUNJLG1CQUFtQixFQUFFLCtFQUErRTtJQUNwRyx3RUFBd0UsRUFBRSw4SkFBOEo7SUFDeE8sZ0VBQWdFLEVBQUUsdUhBQXVIO0lBQ3pMLDZCQUE2QixFQUFFLHVHQUF1RztJQUN0SSxpQkFBaUIsRUFBRSwyRkFBMkY7SUFDOUcsb0JBQW9CLEVBQUUsK0VBQStFO0lBQ3JHLFdBQVcsRUFBRSxvRkFBb0Y7SUFDakc7Ozs7O0tBS0M7QUFDTDs7QUFFQTtJQUNJLGdCQUFnQixFQUFFLHFJQUFxSTtJQUN2Sjs7S0FFQztBQUNMOztBQUVBO0lBQ0ksZ0JBQWdCLEVBQUUsOEhBQThIO0lBQ2hKOztLQUVDO0FBQ0w7O0FBRUE7SUFDSSxnQkFBZ0IsRUFBRSwwR0FBMEc7SUFDNUgsc0JBQXNCLEVBQUUsc0ZBQXNGO0lBQzlHLGtCQUFrQixFQUFFLHNJQUFzSTtJQUMxSixTQUFTLEVBQUUsNEdBQTRHO0lBQ3ZIOzs7OztLQUtDO0FBQ0w7O0FBRUE7SUFDSSxPQUFPLEVBQUUsb0VBQW9FO0lBQzdFLE1BQU0sRUFBRSxxRUFBcUU7SUFDN0UsWUFBWSxFQUFFLHVFQUF1RTtJQUNyRixXQUFXLEVBQUUseUVBQXlFO0lBQ3RGLGtCQUFrQixFQUFFLG1IQUFtSDtJQUN2STs7OztLQUlDO0FBQ0w7O0FBRUEsc0JBQXNCO0FBQ3RCO0lBQ0ksZ0JBQWdCLEVBQUUsc0dBQXNHO0lBQ3hILFVBQVUsRUFBRSx3REFBd0Q7SUFDcEUsY0FBYyxFQUFFLHdIQUF3SDtJQUN4SSxlQUFlLEVBQUUsZ0hBQWdIO0lBQ2pJOzs7OztLQUtDO0FBQ0w7O0FBRUE7SUFDSSxnQkFBZ0IsRUFBRSx1R0FBdUc7SUFDekgsVUFBVSxFQUFFLHVFQUF1RTtJQUNuRixjQUFjLEVBQUUsOEdBQThHO0lBQzlILGVBQWUsRUFBRSxxR0FBcUc7SUFDdEg7Ozs7O0tBS0M7QUFDTDs7QUFFQTtJQUNJLGlCQUFpQixFQUFFLG1IQUFtSDtJQUN0STs7S0FFQztBQUNMOztBQUVBO0lBQ0ksWUFBWSxFQUFFLDhJQUE4STtJQUM1Sjs7S0FFQztBQUNMOztBQUVBO0lBQ0ksZUFBZSxFQUFFLHVHQUF1RztJQUN4SCxtQkFBbUIsRUFBRSx5SUFBeUk7SUFDOUo7OztLQUdDO0FBQ0w7O0FBRUEseURBQXlEO0FBQ3pEO0lBQ0ksbUJBQW1CO0FBQ3ZCOztBQUVBLHFFQUFxRTtBQUNyRTtJQUNJLG1CQUFtQjtJQUNuQixvQkFBb0I7SUFDcEIsMENBQTBDO0lBQzFDLHFCQUFxQjtJQUNyQixxQ0FBcUM7SUFDckMsY0FBYztBQUNsQjs7QUFFQTtJQUNJLHFCQUFxQjtJQUNyQixXQUFXO0lBQ1gsWUFBWTtJQUNaLHFCQUFxQjtJQUNyQiwwQ0FBMEM7SUFDMUMseUJBQXlCO0lBQ3pCLGtCQUFrQjtJQUNsQix3QkFBd0I7SUFDeEIsV0FBVztJQUNYLDZEQUE2RDtBQUNqRTs7QUFFQTtJQUNJLG9DQUFvQztJQUNwQyxtQ0FBbUM7SUFDbkMsY0FBYztBQUNsQjs7QUFFQSwwR0FBMEc7QUFDMUc7SUFDSSxVQUFVO0lBQ1YsU0FBUztJQUNULHVCQUF1QjtBQUMzQjs7QUFFQTtJQUNJLGdCQUFnQjtJQUNoQiwwQ0FBMEM7SUFDMUMsbUJBQW1CO0lBQ25CLGlHQUFpRztJQUNqRzs7K0NBRTJDO0FBQy9DOztBQUVBO0lBQ0ksNkJBQTZCO0lBQzdCLGdEQUFnRDtJQUNoRCw2REFBNkQ7SUFDN0QsY0FBYztJQUNkLDhDQUE4QztJQUM5QyxrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtBQUNyQjs7QUFFQTtJQUNJLGFBQWE7QUFDakI7O0FBRUE7SUFDSSxTQUFTO0lBQ1QsY0FBYztJQUNkLGdCQUFnQjtBQUNwQjs7QUFFQTtJQUNJLHVCQUF1QjtJQUN2QiwyQ0FBMkM7SUFDM0MsOEJBQThCO0lBQzlCLHNCQUFzQjtJQUN0QixxQ0FBcUM7SUFDckMseUJBQXlCO0lBQ3pCLGdCQUFnQjtBQUNwQjs7QUFFQTtJQUNJLDhCQUE4QjtJQUM5QixvQkFBb0I7SUFDcEIsOENBQThDO0FBQ2xEOztBQUVBO0lBQ0ksY0FBYztJQUNkLGdCQUFnQjtJQUNoQixtQkFBbUI7QUFDdkI7O0FBRUE7SUFDSSxzQkFBc0I7SUFDdEIsZ0JBQWdCO0lBQ2hCLGNBQWM7QUFDbEI7O0FBRUEsK0VBQStFO0FBQy9FO0lBQ0ksYUFBYTtJQUNiLGdEQUFnRDtJQUNoRCxZQUFZO0FBQ2hCOztBQUVBLG9HQUFvRztBQUNwRztJQUNJLG1CQUFtQjtJQUNuQixvQkFBb0I7SUFDcEIsaUNBQWlDO0FBQ3JDOztBQUVBLGdGQUFnRjtBQUNoRjtJQUNJLGtCQUFrQjtJQUNsQixjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLHlCQUF5QjtJQUN6QixnQkFBZ0I7SUFDaEIsMENBQTBDO0lBQzFDLG1CQUFtQjtJQUNuQixpR0FBaUc7SUFDakc7OytDQUUyQztJQUMzQyxlQUFlO0lBQ2YsNkdBQTZHO0FBQ2pIOztBQUVBO0lBQ0ksc0NBQXNDO0lBQ3RDOzsrQ0FFMkM7SUFDM0MsMkJBQTJCO0FBQy9COztBQUVBLHVGQUF1RjtBQUN2RjtJQUNJLGtCQUFrQjtJQUNsQixVQUFVO0lBQ1YsTUFBTTtJQUNOLFNBQVM7SUFDVCxPQUFPO0lBQ1AsVUFBVTtJQUNWLG1CQUFtQjtJQUNuQixXQUFXO0lBQ1gsVUFBVTtJQUNWLDhCQUE4QjtBQUNsQzs7QUFFQSwyRkFBMkY7QUFDM0Y7O0lBRUkscUJBQXFCO0lBQ3JCLGlHQUFpRztJQUNqRzs7MENBRXNDO0FBQzFDOztBQUVBOztJQUVJLFVBQVU7QUFDZDs7QUFFQSxnRkFBZ0Y7QUFDaEY7SUFDSSxzQ0FBc0M7SUFDdEMsNkNBQTZDO0FBQ2pEOztBQUVBLCtGQUErRjtBQUMvRjtJQUNJLGFBQWE7SUFDYixTQUFTO0lBQ1QsU0FBUztJQUNULFVBQVU7QUFDZDs7QUFFQTtJQUNJLGFBQWE7QUFDakI7O0FBRUE7SUFDSSxrQkFBa0I7SUFDbEIsVUFBVTtJQUNWLFNBQVM7SUFDVCxXQUFXO0lBQ1gsY0FBYztJQUNkLGVBQWU7SUFDZixTQUFTO0lBQ1Qsc0NBQXNDO0lBQ3RDLHNGQUFzRjtBQUMxRjs7QUFFQTtJQUNJLHFCQUFxQjtJQUNyQix5QkFBeUI7SUFDekIsc0JBQXNCO0FBQzFCOztBQUVBLGdHQUFnRztBQUNoRzs7Ozs7SUFLSSxjQUFjO0FBQ2xCOztBQUVBLGlGQUFpRjtBQUNqRjtJQUNJLDZCQUE2QjtJQUM3QixrQ0FBa0M7SUFDbEMsZ0RBQWdEO0lBQ2hELDZEQUE2RDtJQUM3RCxrREFBa0Q7QUFDdEQ7O0FBRUE7SUFDSSxjQUFjO0lBQ2Qsc0JBQXNCO0lBQ3RCLGNBQWM7SUFDZCw4Q0FBOEM7SUFDOUMsa0JBQWtCO0lBQ2xCLGdCQUFnQjtBQUNwQjs7QUFFQTtJQUNJLGNBQWM7SUFDZCxtQkFBbUI7SUFDbkIsa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQixjQUFjO0FBQ2xCOztBQUVBO0lBQ0ksaUJBQWlCO0lBQ2pCLGlCQUFpQjtJQUNqQixjQUFjO0FBQ2xCOztBQUVBLGlHQUFpRztBQUNqRztJQUNJLGtCQUFrQjtJQUNsQixvQkFBb0I7SUFDcEIsOENBQThDO0lBQzlDLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsY0FBYztBQUNsQjs7QUFFQSw4RkFBOEY7QUFDOUY7SUFDSSxhQUFhO0lBQ2Isb0JBQW9CO0lBQ3BCLFlBQVk7SUFDWixrQkFBa0I7QUFDdEI7O0FBRUE7SUFDSSxjQUFjO0lBQ2Qsa0JBQWtCO0lBQ2xCLFNBQVM7SUFDVCx1QkFBdUI7SUFDdkIsMENBQTBDO0lBQzFDLG9CQUFvQjtJQUNwQixpR0FBaUc7SUFDakcsNkNBQTZDO0lBQzdDLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsaUJBQWlCO0lBQ2pCLGNBQWM7QUFDbEI7O0FBRUEsNEVBQTRFO0FBQzVFO0lBQ0ksY0FBYztJQUNkLGtCQUFrQjtBQUN0Qjs7QUFFQTtJQUNJLG1CQUFtQjtJQUNuQixtQkFBbUI7SUFDbkIsY0FBYztBQUNsQjs7QUFFQTtJQUNJLFNBQVM7SUFDVCxxQkFBcUI7QUFDekI7O0FBRUE7SUFDSTtRQUNJLHlCQUF5QjtJQUM3QjtBQUNKOztBQUVBO0lBQ0k7UUFDSSwwQkFBMEI7SUFDOUI7O0lBRUE7UUFDSSxpQkFBaUI7UUFDakIsV0FBVztJQUNmOztJQUVBO1FBQ0ksK0JBQStCO0lBQ25DOztJQUVBO1FBQ0ksZ0NBQWdDO1FBQ2hDLG9DQUFvQztJQUN4QztBQUNKOztBQUVBO0lBQ0k7UUFDSSxnQkFBZ0I7SUFDcEI7O0lBRUE7UUFDSSx3QkFBd0I7SUFDNUI7QUFDSjs7QUFFQSxzR0FBc0c7QUFDdEc7SUFDSSxnQkFBZ0I7SUFDaEIsMENBQTBDO0lBQzFDLG1CQUFtQjtJQUNuQixpR0FBaUc7SUFDakc7OytDQUUyQztBQUMvQzs7QUFFQTtJQUNJLDZCQUE2QjtJQUM3QixnREFBZ0Q7SUFDaEQsNkRBQTZEO0lBQzdELGtEQUFrRDtBQUN0RDs7QUFFQTtJQUNJLFNBQVM7SUFDVCxVQUFVO0lBQ1YsY0FBYztJQUNkLDhDQUE4QztJQUM5QyxrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtBQUNwQjs7QUFFQTtJQUNJLGFBQWE7SUFDYixjQUFjO0FBQ2xCOztBQUVBLGlFQUFpRTtBQUNqRTtJQUNJLGdCQUFnQjtJQUNoQiwwQ0FBMEM7SUFDMUMsc0JBQXNCO0lBQ3RCLDZDQUE2QztBQUNqRDs7QUFFQTs7SUFFSSxjQUFjO0lBQ2QsVUFBVTtJQUNWLGNBQWM7SUFDZCxpQkFBaUI7QUFDckI7O0FBRUE7SUFDSSxxQkFBcUI7SUFDckIsdUJBQXVCO0lBQ3ZCLGlEQUFpRDtJQUNqRCxjQUFjO0lBQ2Qsa0JBQWtCO0lBQ2xCLGdCQUFnQjtBQUNwQjs7QUFFQTtJQUNJLGlCQUFpQjtJQUNqQixrQkFBa0I7QUFDdEI7O0FBRUEsd0ZBQXdGO0FBQ3hGO0lBQ0ksa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixzQkFBc0I7SUFDdEIsZ0JBQWdCO0lBQ2hCLDBDQUEwQztJQUMxQyxzQkFBc0I7SUFDdEIsaUdBQWlHO0lBQ2pHLDZDQUE2QztJQUM3Qyx1RkFBdUY7QUFDM0Y7O0FBRUE7SUFDSSxrQkFBa0I7SUFDbEIsTUFBTTtJQUNOLFNBQVM7SUFDVCxPQUFPO0lBQ1AsVUFBVTtJQUNWLG1CQUFtQjtJQUNuQixXQUFXO0lBQ1gsVUFBVTtJQUNWLDhCQUE4QjtBQUNsQzs7QUFFQTtJQUNJLHNDQUFzQztBQUMxQzs7QUFFQTtJQUNJLHFCQUFxQjtJQUNyQixpR0FBaUc7SUFDakc7O3lDQUVxQztBQUN6Qzs7QUFFQTtJQUNJLFVBQVU7QUFDZDs7QUFFQTtJQUNJLGFBQWE7SUFDYixTQUFTO0lBQ1QscUJBQXFCO0FBQ3pCOztBQUVBO0lBQ0ksY0FBYztJQUNkLGVBQWU7SUFDZixtQkFBbUI7SUFDbkIsc0NBQXNDO0FBQzFDOztBQUVBO0lBQ0kscUJBQXFCO0lBQ3JCLHlCQUF5QjtBQUM3Qjs7QUFFQTtJQUNJLGNBQWM7SUFDZCxxQkFBcUI7SUFDckIsY0FBYztJQUNkLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsaUJBQWlCO0FBQ3JCOztBQUVBLDRFQUE0RTtBQUM1RTtJQUNJLHFCQUFxQjtJQUNyQix5QkFBeUI7SUFDekIsZUFBZTtJQUNmLHFCQUFxQjtJQUNyQiw4QkFBOEI7SUFDOUIsNkJBQTZCO0FBQ2pDOztBQUVBO0lBQ0ksYUFBYTtBQUNqQjs7QUFFQSw0RkFBNEY7QUFDNUY7SUFDSSxhQUFhO0FBQ2pCOztBQUVBO0lBQ0ksMEJBQTBCO0FBQzlCOztBQUVBOzs7SUFHSSx5QkFBeUI7SUFDekIsMEJBQTBCO0lBQzFCLCtDQUErQztBQUNuRDs7QUFFQTtJQUNJLHNCQUFzQjtJQUN0Qiw0Q0FBNEM7SUFDNUMsbUJBQW1CO0FBQ3ZCOztBQUVBOzs7RUFHRTtBQUNGO0lBQ0ksNkJBQTZCO0lBQzdCLHdCQUF3QjtJQUN4QixrREFBa0Q7SUFDbEQsa0NBQWtDO0lBQ2xDLDJEQUEyRDtJQUMzRCxrQ0FBa0M7SUFDbEMsK0JBQStCO0lBQy9CLGdDQUFnQztJQUNoQyxnQkFBZ0I7QUFDcEI7O0FBRUE7SUFDSSw2Q0FBNkM7SUFDN0MsOENBQThDO0lBQzlDLGdCQUFnQjtBQUNwQjs7QUFFQTtJQUNJLGtCQUFrQjtJQUNsQixpQkFBaUI7QUFDckI7O0FBRUE7SUFDSSxjQUFjO0lBQ2QsZ0JBQWdCO0lBQ2hCLCtCQUErQjtJQUMvQiw4Q0FBOEM7SUFDOUMsaUNBQWlDO0lBQ2pDLDZCQUE2QjtBQUNqQzs7QUFFQTs7SUFFSSxjQUFjO0lBQ2QsbUNBQW1DO0FBQ3ZDOztBQUVBO0lBQ0ksc0JBQXNCO0lBQ3RCLDRDQUE0QztJQUM1QyxtQkFBbUI7QUFDdkI7O0FBRUEsdUVBQXVFO0FBQ3ZFO0lBQ0ksbUJBQW1CO0lBQ25CLFlBQVk7SUFDWixpQkFBaUI7QUFDckI7O0FBRUE7SUFDSSwyQkFBMkI7QUFDL0I7O0FBRUE7SUFDSTtRQUNJLDZCQUE2QjtJQUNqQzs7SUFFQTtRQUNJLGVBQWU7SUFDbkI7O0lBRUE7UUFDSSx1QkFBdUI7SUFDM0I7QUFDSjs7QUFFQTtJQUNJOztRQUVJLGdCQUFnQjtJQUNwQjtBQUNKOztBQUVBLDBEQUEwRDtBQUMxRDtJQUNJLGtCQUFrQjtJQUNsQiwwQ0FBMEM7SUFDMUMscUJBQXFCO0lBQ3JCLHFDQUFxQztJQUNyQzs7d0NBRW9DO0lBQ3BDLGNBQWM7SUFDZCx1RkFBdUY7QUFDM0Y7O0FBRUE7SUFDSSxzQ0FBc0M7QUFDMUM7O0FBRUE7SUFDSSxxQkFBcUI7SUFDckIsZ0JBQWdCO0lBQ2hCOzt5Q0FFcUM7QUFDekM7O0FBRUE7SUFDSSxzQ0FBc0M7SUFDdEMscUNBQXFDO0lBQ3JDLGNBQWM7QUFDbEI7O0FBRUE7OztFQUdFO0FBQ0Y7OztJQUdJLHFCQUFxQjtJQUNyQixtQkFBbUI7SUFDbkIsc0JBQXNCO0lBQ3RCOzsrQ0FFMkM7QUFDL0M7O0FBRUE7OztJQUdJLHFCQUFxQjtJQUNyQixzQkFBc0I7SUFDdEIsZ0RBQWdEO0FBQ3BEOztBQUVBLGtGQUFrRjtBQUNsRjs7SUFFSSxhQUFhO0lBQ2IsU0FBUztJQUNULG1CQUFtQjtBQUN2Qjs7QUFFQTtJQUNJLGdCQUFnQjtJQUNoQiwwQ0FBMEM7SUFDMUMsbUJBQW1CO0lBQ25CLGlHQUFpRztJQUNqRzs7K0NBRTJDO0FBQy9DOztBQUVBO0lBQ0ksNkJBQTZCO0lBQzdCLGdEQUFnRDtJQUNoRCw2REFBNkQ7QUFDakU7O0FBRUE7SUFDSSxTQUFTO0lBQ1QsY0FBYztJQUNkLDhDQUE4QztJQUM5QyxrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtBQUNwQjs7QUFFQTtJQUNJLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsOEJBQThCO0lBQzlCLFlBQVk7QUFDaEI7O0FBRUE7SUFDSSxtQkFBbUI7SUFDbkIsY0FBYztJQUNkLGlCQUFpQjtJQUNqQixpQkFBaUI7QUFDckI7O0FBRUE7SUFDSSxhQUFhO0lBQ2IsV0FBVztJQUNYLGFBQWE7QUFDakI7O0FBRUE7SUFDSSxZQUFZO0FBQ2hCOztBQUVBOztJQUVJLG1CQUFtQjtJQUNuQixVQUFVO0lBQ1YsY0FBYztJQUNkLGtCQUFrQjtJQUNsQixnQkFBZ0I7QUFDcEI7O0FBRUE7SUFDSSxtQkFBbUI7QUFDdkI7O0FBRUE7SUFDSSxjQUFjO0lBQ2Qsa0JBQWtCO0lBQ2xCLFVBQVU7SUFDVixjQUFjO0lBQ2QsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixpQkFBaUI7QUFDckI7O0FBRUE7OztJQUdJLGNBQWM7QUFDbEI7O0FBRUE7SUFDSSxhQUFhO0lBQ2IsV0FBVztBQUNmOztBQUVBOztJQUVJLGdEQUFnRDtBQUNwRDs7QUFFQTtJQUNJLHlEQUF5RDtBQUM3RDs7QUFFQTtJQUNJLGdCQUFnQjtJQUNoQixnQkFBZ0I7QUFDcEI7O0FBRUE7SUFDSSxpQkFBaUI7QUFDckI7O0FBRUEsd0VBQXdFO0FBQ3hFO0lBQ0ksYUFBYTtJQUNiLDBDQUEwQztJQUMxQyxtQkFBbUI7SUFDbkIsb0JBQW9CO0lBQ3BCLDZCQUE2QjtJQUM3Qiw2REFBNkQ7SUFDN0QsaUNBQWlDO0FBQ3JDOztBQUVBO0lBQ0ksYUFBYTtJQUNiLHVCQUF1QjtJQUN2QixZQUFZO0FBQ2hCOztBQUVBO0lBQ0ksY0FBYztJQUNkLGNBQWM7SUFDZCxlQUFlO0lBQ2YsMkJBQTJCO0lBQzNCLHNDQUFzQztBQUMxQzs7QUFFQTtJQUNJLHFCQUFxQjtJQUNyQix5QkFBeUI7QUFDN0I7O0FBRUE7SUFDSSxTQUFTO0lBQ1QsVUFBVTtJQUNWLGNBQWM7SUFDZCxlQUFlO0lBQ2YsOENBQThDO0lBQzlDLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsZ0JBQWdCO0FBQ3BCOztBQUVBO0lBQ0ksd0JBQXdCO0lBQ3hCLDBDQUEwQztJQUMxQyxvQkFBb0I7SUFDcEIscUNBQXFDO0lBQ3JDLGNBQWM7SUFDZCxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLHNCQUFzQjtJQUN0QixnQkFBZ0I7SUFDaEIseUJBQXlCO0FBQzdCOztBQUVBO0lBQ0ksbUJBQW1CO0lBQ25CLG1CQUFtQjtBQUN2Qjs7QUFFQTtJQUNJLDhDQUE4QztBQUNsRDs7QUFFQSwwRkFBMEY7QUFDMUY7O0lBRUkscUJBQXFCO0lBQ3JCOzt5Q0FFcUM7QUFDekM7O0FBRUE7O0lBRUksNkRBQTZEO0lBQzdELGlDQUFpQztBQUNyQzs7QUFFQTtJQUNJLHNDQUFzQztBQUMxQzs7QUFFQTtJQUNJLFNBQVM7SUFDVCxvQkFBb0I7QUFDeEI7O0FBRUE7SUFDSSxjQUFjO0lBQ2QsZUFBZTtJQUNmLG1CQUFtQjtJQUNuQixzQ0FBc0M7QUFDMUM7O0FBRUE7SUFDSSxxQkFBcUI7SUFDckIseUJBQXlCO0FBQzdCOztBQUVBOztJQUVJLHFCQUFxQjtJQUNyQixpREFBaUQ7QUFDckQ7O0FBRUE7O0lBRUkscUNBQXFDO0lBQ3JDOzt5Q0FFcUM7QUFDekM7O0FBRUE7SUFDSSxTQUFTO0lBQ1Qsc0JBQXNCO0lBQ3RCLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtBQUNyQjs7QUFFQSxnRkFBZ0Y7QUFDaEY7SUFDSSxnQkFBZ0I7QUFDcEI7O0FBRUE7SUFDSSxrQkFBa0I7SUFDbEIsUUFBUTtJQUNSLFdBQVc7SUFDWCwyQkFBMkI7SUFDM0IsY0FBYztJQUNkLG9CQUFvQjtBQUN4Qjs7QUFFQTtJQUNJLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLFVBQVU7SUFDVixjQUFjO0lBQ2QsZ0JBQWdCO0FBQ3BCOztBQUVBO0lBQ0k7OztRQUdJLDBCQUEwQjtJQUM5Qjs7SUFFQTs7UUFFSSw4QkFBOEI7SUFDbEM7O0lBRUE7UUFDSSxlQUFlO0lBQ25COztBQUVKOztBQUVBO0lBQ0k7O1FBRUksZ0JBQWdCO0lBQ3BCO0FBQ0o7O0FBRUE7SUFDSSxnQkFBZ0IsRUFBRSw2RkFBNkY7SUFDL0csaUJBQWlCLEVBQUUsc0dBQXNHO0lBQ3pIOzs7S0FHQztBQUNMOztBQUVBO0lBQ0ksZ0JBQWdCLEVBQUUsdUdBQXVHO0lBQ3pILG1CQUFtQixFQUFFLHlHQUF5RztJQUM5SDs7O0tBR0M7QUFDTDs7QUFFQSxxRkFBcUY7QUFDckY7SUFDSSxhQUFhO0lBQ2IseUJBQXlCO0lBQ3pCLHNCQUFzQjtJQUN0QixVQUFVO0FBQ2Q7O0FBRUE7SUFDSSxTQUFTO0FBQ2I7O0FBRUE7SUFDSSxvQkFBb0I7SUFDcEIsbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2QixnQkFBZ0I7SUFDaEIsbUJBQW1CO0lBQ25CLHdCQUF3QjtJQUN4Qix5Q0FBeUM7SUFDekMsc0JBQXNCO0lBQ3RCLDZEQUE2RDtJQUM3RDs7K0NBRTJDO0lBQzNDLGNBQWM7SUFDZCxpQkFBaUI7SUFDakIsZ0JBQWdCO0lBQ2hCLGdCQUFnQjtJQUNoQixxQkFBcUI7SUFDckIsaUJBQWlCO0lBQ2pCLHVHQUF1RztBQUMzRzs7QUFFQSx5RkFBeUY7QUFDekY7SUFDSSxtQkFBbUI7SUFDbkIsdUNBQXVDO0lBQ3ZDOzt5Q0FFcUM7QUFDekM7O0FBRUE7SUFDSSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLFdBQVc7SUFDWCxpQ0FBaUM7QUFDckM7O0FBRUE7SUFDSSxvQkFBb0I7SUFDcEIsY0FBYztJQUNkLG1CQUFtQjtJQUNuQix1QkFBdUI7SUFDdkIsY0FBYztJQUNkLGVBQWU7SUFDZiwwQ0FBMEM7SUFDMUMsa0JBQWtCO0lBQ2xCLHFDQUFxQztJQUNyQyxjQUFjO0lBQ2QsaUJBQWlCO0FBQ3JCOztBQUVBLGtHQUFrRztBQUNsRztJQUNJLHNDQUFzQztJQUN0Qzs7eUNBRXFDO0FBQ3pDOztBQUVBO0lBQ0ksaUNBQWlDO0FBQ3JDOztBQUVBO0lBQ0ksc0NBQXNDO0lBQ3RDLHFDQUFxQztJQUNyQyxjQUFjO0FBQ2xCOztBQUVBO0lBQ0kscUNBQXFDO0lBQ3JDOzt5Q0FFcUM7QUFDekM7O0FBRUE7SUFDSSxpQ0FBaUM7QUFDckM7O0FBRUE7SUFDSSxxQ0FBcUM7SUFDckMscUNBQXFDO0lBQ3JDLGNBQWM7QUFDbEI7O0FBRUE7SUFDSSxZQUFZO0FBQ2hCOztBQUVBO0lBQ0ksYUFBYTtJQUNiLFNBQVM7SUFDVCxnQkFBZ0I7SUFDaEIsMENBQTBDO0lBQzFDLHNCQUFzQjtJQUN0QixxQ0FBcUM7QUFDekM7O0FBRUE7SUFDSSxhQUFhO0lBQ2IsaUVBQWlFO0lBQ2pFLFdBQVc7SUFDWCx1QkFBdUI7QUFDM0I7O0FBRUE7SUFDSSw4Q0FBOEM7QUFDbEQ7O0FBRUE7SUFDSSxhQUFhO0lBQ2IscUJBQXFCO0lBQ3JCLFdBQVc7QUFDZjs7QUFFQTtJQUNJLGNBQWM7QUFDbEI7O0FBRUE7SUFDSSxnQkFBZ0I7QUFDcEI7O0FBRUE7O0lBRUksU0FBUztJQUNULHVCQUF1QjtJQUN2QixnQkFBZ0I7QUFDcEI7O0FBRUE7SUFDSSxjQUFjO0lBQ2Qsa0JBQWtCO0lBQ2xCLGdCQUFnQjtBQUNwQjs7QUFFQTtJQUNJLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsZ0JBQWdCO0FBQ3BCOztBQUVBO0lBQ0ksd0JBQXdCO0lBQ3hCLDBDQUEwQztJQUMxQyxzQkFBc0I7SUFDdEIscUJBQXFCO0lBQ3JCLHFDQUFxQztJQUNyQyxjQUFjO0FBQ2xCOztBQUVBO0lBQ0ksY0FBYztJQUNkLHNCQUFzQjtJQUN0QixjQUFjO0lBQ2QsOENBQThDO0lBQzlDLGlCQUFpQjtBQUNyQjs7QUFFQTtJQUNJLFNBQVM7SUFDVCxjQUFjO0lBQ2Qsa0JBQWtCO0lBQ2xCLGlCQUFpQjtBQUNyQjs7QUFFQTtJQUNJLHNDQUFzQztJQUN0QywwQkFBMEI7SUFDMUIscUNBQXFDO0FBQ3pDOztBQUVBO0lBQ0ksMEJBQTBCO0lBQzFCLHFDQUFxQztBQUN6Qzs7QUFFQTtJQUNJLHFDQUFxQztJQUNyQywwQkFBMEI7SUFDMUIsb0NBQW9DO0lBQ3BDLGNBQWM7QUFDbEI7O0FBRUE7SUFDSTtRQUNJLDBCQUEwQjtRQUMxQixZQUFZO0lBQ2hCO0FBQ0o7O0FBRUE7SUFDSSxxQ0FBcUM7SUFDckMsNkRBQTZEO0lBQzdEOzsrQ0FFMkM7SUFDM0MsY0FBYztJQUNkLDJCQUEyQjtBQUMvQjs7QUFFQTtJQUNJLHFCQUFxQjtJQUNyQjs7eUNBRXFDO0lBQ3JDLGNBQWM7SUFDZCxhQUFhO0FBQ2pCOztBQUVBO0lBQ0kscUNBQXFDO0lBQ3JDLG1CQUFtQjtJQUNuQiw0Q0FBNEM7SUFDNUMsY0FBYztJQUNkLHdCQUF3QjtBQUM1Qjs7QUFFQTs7SUFFSSxvQ0FBb0M7SUFDcEMsbUJBQW1CO0lBQ25CLGdCQUFnQjtJQUNoQixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLGFBQWE7SUFDYixpQkFBaUI7SUFDakIsZUFBZTtBQUNuQjs7QUFFQTtJQUNJOztRQUVJLFdBQVc7SUFDZjtBQUNKOztBQUVBO0lBQ0k7UUFDSSxnQkFBZ0I7SUFDcEI7QUFDSjs7QUFFQTtJQUNJLGlCQUFpQixFQUFFLGlIQUFpSDtJQUNwSTs7S0FFQztBQUNMOztBQUVBO0lBQ0ksZ0JBQWdCLEVBQUUseUZBQXlGO0lBQzNHLGVBQWUsRUFBRSxpSUFBaUk7SUFDbEo7OztLQUdDO0FBQ0w7O0FBRUE7SUFDSSxjQUFjO0FBQ2xCOztBQUVBO0lBQ0ksZ0JBQWdCLEVBQUUsZ0ZBQWdGO0lBQ2xHOztLQUVDO0FBQ0w7O0FBRUE7SUFDSSxpQkFBaUIsRUFBRSx1R0FBdUc7SUFDMUg7O0tBRUM7QUFDTDs7QUFFQSxtQkFBbUI7QUFDbkI7SUFDSSxjQUFjLEVBQUUsOEdBQThHO0lBQzlIOztLQUVDO0FBQ0w7O0FBRUE7SUFDSSxhQUFhLEVBQUUsd0dBQXdHO0lBQ3ZILHlEQUF1RCxFQUFFLDJEQUEyRDtJQUNwSCxrQ0FBa0MsRUFBRSxvREFBb0Q7SUFDeEYsNEJBQTRCLEVBQUUsOERBQThEO0lBQzVGLDBCQUEwQixFQUFFLG1FQUFtRTtJQUMvRixtQkFBbUIsRUFBRSx1RUFBdUU7SUFDNUYsY0FBYyxFQUFFLDhEQUE4RDtJQUM5RSxjQUFjLEVBQUUsOEVBQThFO0lBQzlGLG1CQUFtQixFQUFFLGtGQUFrRjtJQUN2RyxnQkFBZ0IsRUFBRSxnQ0FBZ0M7SUFDbEQsaUJBQWlCLEVBQUUsdUNBQXVDO0lBQzFELG9CQUFvQixFQUFFLGtGQUFrRjtJQUN4Rzs7Ozs7Ozs7Ozs7O0tBWUM7QUFDTDs7QUFFQTtJQUNJLG9DQUFvQyxFQUFFLG1IQUFtSDtJQUN6SixrQkFBa0IsRUFBRSw2REFBNkQ7SUFDakYsbUJBQW1CLEVBQUUsOERBQThEO0lBQ25GOzs7S0FHQztBQUNMOztBQUVBO0lBQ0ksdUJBQXVCLEVBQUUsc0hBQXNIO0lBQy9JOzs7S0FHQztBQUNMOztBQUVBO0lBQ0ksY0FBYyxFQUFFLGdHQUFnRztJQUNoSDs7S0FFQztBQUNMOztBQUVBO0lBQ0ksb0NBQW9DLEVBQUUsNkVBQTZFO0lBQ25ILGdDQUFnQyxFQUFFLCtFQUErRTtJQUNqSDs7OztLQUlDO0FBQ0w7O0FBRUE7O0lBRUksb0NBQW9DLEVBQUUsaUZBQWlGO0lBQ3ZILG1CQUFtQixFQUFFLHdFQUF3RTtJQUM3RixtQkFBbUIsRUFBRSw2REFBNkQ7SUFDbEY7Ozs7O0tBS0M7QUFDTDs7QUFFQTtDQUNDLG1CQUFtQixFQUFFLDhFQUE4RTtDQUNuRyxtQkFBbUIsRUFBRSwrRUFBK0U7Q0FDcEc7OztHQUdFO0FBQ0g7O0FBRUE7Q0FDQyxlQUFlLEVBQUUsNEZBQTRGO0NBQzdHLHVCQUF1QixFQUFFLHdGQUF3RjtDQUNqSCxtQkFBbUIsRUFBRSw4R0FBOEc7Q0FDbkksZ0JBQWdCLEVBQUUsdUZBQXVGO0NBQ3pHLGlCQUFpQixFQUFFLHdGQUF3RjtDQUMzRzs7Ozs7R0FLRTtBQUNIOztBQUVBO0NBQ0Msb0NBQW9DLEVBQUUsNkdBQTZHO0NBQ25KOzs7R0FHRTtBQUNIOztBQUVBO0lBQ0ksNkJBQTZCLEVBQUUsNkhBQTZIO0lBQzVKOzs7S0FHQztBQUNMOztBQUVBO0lBQ0ksc0JBQXNCLEVBQUUsaUdBQWlHO0lBQ3pIOzs7S0FHQztBQUNMOztBQUVBO0lBQ0ksc0JBQXNCLEVBQUUsMkdBQTJHO0lBQ25JOzs7S0FHQztBQUNMOztBQUVBO0lBQ0ksOEJBQThCLEVBQUUsOERBQThEO0lBQzlGLHFGQUFxRixFQUFFLGdDQUFnQztJQUN2SCwwRkFBMEYsRUFBRSxnREFBZ0Q7SUFDNUksMENBQTBDLEVBQUUsMERBQTBEO0lBQ3RHOzt3Q0FFb0M7SUFDcEM7Ozs7S0FJQztBQUNMOztBQUVBO0VBQ0UsMEJBQTBCLEVBQUUscUZBQXFGO0VBQ2pILFdBQVcsaUJBQWlCLHVFQUF1RTtFQUNuRzs7Ozs7O0dBTUM7QUFDSDs7QUFFQTtJQUNJLFlBQVksRUFBRSw0RUFBNEU7SUFDMUY7OztLQUdDO0FBQ0w7O0FBRUE7SUFDSSxXQUFXLEVBQUUsb0hBQW9IO0lBQ2pJLFdBQVcsRUFBRSw4REFBOEQ7SUFDM0U7OztLQUdDO0FBQ0w7O0FBRUE7SUFDSSxZQUFZLEVBQUUsMEVBQTBFO0lBQ3hGOztLQUVDO0FBQ0w7O0FBRUE7SUFDSSw0QkFBNEIsRUFBRSwrREFBK0Q7SUFDN0Y7O0tBRUM7QUFDTDs7QUFFQTtJQUNJLGtCQUFrQixFQUFFLHNHQUFzRztJQUMxSCxTQUFTLEVBQUUsb0RBQW9EO0lBQy9EOzs7S0FHQztBQUNMOztBQUVBO0lBQ0ksa0JBQWtCLEVBQUUsc0dBQXNHO0lBQzFILFVBQVUsRUFBRSxxREFBcUQ7SUFDakU7OztLQUdDO0FBQ0w7O0FBRUE7SUFDSSxZQUFZLEVBQUUsb0NBQW9DO0lBQ2xELFdBQVcsR0FBRyxxQ0FBcUM7SUFDbkQ7OztLQUdDO0FBQ0w7O0FBRUE7SUFDSSxjQUFjLEVBQUUsb0RBQW9EO0lBQ3BFLGVBQWUsRUFBRSxrRkFBa0Y7SUFDbkc7OztLQUdDO0FBQ0w7O0FBRUE7Q0FDQyxhQUFhLEVBQUUsMkZBQTJGO0NBQzFHLG1CQUFtQixFQUFFLG9EQUFvRDtDQUN6RSxpQkFBaUIsRUFBRSxtRUFBbUU7Q0FDdEYsb0JBQW9CLEVBQUUsaUVBQWlFO0NBQ3ZGLGtCQUFrQixFQUFFLDJFQUEyRTtDQUMvRjs7OztFQUlDO0FBQ0Y7O0FBRUE7SUFDSSx3QkFBd0IsRUFBRSx3RkFBd0Y7SUFDbEgsdUJBQXVCLEVBQUUsMkZBQTJGO0lBQ3BILHFCQUFxQixFQUFFLDhEQUE4RDtJQUNyRixjQUFjLEVBQUUscURBQXFEO0lBQ3JFOzs7OztLQUtDO0FBQ0w7O0FBRUE7SUFDSSxtQkFBbUIsRUFBRSxrRkFBa0Y7SUFDdkcsV0FBVyxFQUFFLDhFQUE4RTtJQUMzRix3QkFBd0I7SUFDeEI7OztLQUdDO0FBQ0w7O0FBRUE7SUFDSSw0QkFBNEIsRUFBRSxxR0FBcUc7SUFDbkk7OztLQUdDO0FBQ0w7O0FBRUE7SUFDSSxxQkFBcUIsRUFBRSwrRUFBK0U7SUFDdEcsZUFBZSxRQUFRLDJGQUEyRjtJQUNsSCxjQUFjLFNBQVMsMkRBQTJEO0lBQ2xGLGtCQUFrQixLQUFLLGtEQUFrRDtJQUN6RSx5QkFBeUIsRUFBRSxxQ0FBcUM7SUFDaEUscUJBQXFCLEVBQUUsK0RBQStEO0lBQ3RGLFVBQVUsYUFBYSwyREFBMkQ7SUFDbEYsU0FBUyxjQUFjLDBEQUEwRDtJQUNqRixhQUFhLFVBQVUsMkZBQTJGO0lBQ2xILGVBQWUsUUFBUSw2RkFBNkY7SUFDcEgsdUJBQXVCLEVBQUUseUVBQXlFO0lBQ2xHLG9CQUFvQixVQUFVLGlFQUFpRTtJQUMvRjs7Ozs7Ozs7Ozs7O0tBWUM7QUFDTDs7QUFFQTtJQUNJLGVBQWUsV0FBVyxxRUFBcUU7SUFDL0Ysd0JBQXdCLGVBQWUsOEVBQThFO0lBQ3JILDBDQUEwQyxFQUFFLGtEQUFrRDtJQUM5RixvQkFBb0IsU0FBUyx3Q0FBd0M7SUFDckUsZ0JBQWdCLFNBQVMsZ0RBQWdEO0lBQ3pFLGlHQUFpRztJQUNqRywyQkFBMkI7SUFDM0Isa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQixpQkFBaUI7SUFDakIsNkNBQTZDO0lBQzdDLHFHQUFxRztJQUNyRzs7Ozs7O0tBTUM7QUFDTDs7QUFFQTtJQUNJLGlHQUFpRztJQUNqRyxzQ0FBc0M7SUFDdEMsaUNBQWlDO0lBQ2pDLDRDQUE0QztJQUM1Qzs7O0tBR0M7QUFDTDs7QUFFQTtJQUNJLGFBQWE7SUFDYixzQ0FBc0M7SUFDdEMsaUZBQWlGO0FBQ3JGOztBQUVBO0lBQ0ksZ0dBQWdHO0lBQ2hHLG1DQUFtQztJQUNuQyxjQUFjO0lBQ2QsNkNBQTZDO0FBQ2pEOztBQUVBOztJQUVJLGNBQWM7QUFDbEI7O0FBRUE7SUFDSSxhQUFhLEVBQUUsa0VBQWtFO0lBQ2pGLHNCQUFzQixFQUFFLGtGQUFrRjtJQUMxRyxtQkFBbUIsRUFBRSw2RUFBNkU7SUFDbEcsb0JBQW9CLEVBQUUsMkNBQTJDO0lBQ2pFOzs7OztLQUtDO0FBQ0w7O0FBRUEsMERBQTBEO0FBQzFEO0lBQ0ksbUJBQW1CO0lBQ25CLHVCQUF1QjtJQUN2QixzQkFBc0I7SUFDdEIseUJBQXlCO0lBQ3pCLHFCQUFxQjtJQUNyQixnQkFBZ0I7SUFDaEIsaURBQWlEO0lBQ2pEOzs7S0FHQztBQUNMOztBQUVBO0lBQ0ksbUJBQW1CO0lBQ25COztLQUVDO0FBQ0w7O0FBRUE7SUFDSSxTQUFTO0lBQ1Qsa0JBQWtCO0lBQ2xCLGlCQUFpQjtJQUNqQixtQkFBbUI7QUFDdkI7O0FBRUE7SUFDSSxhQUFhO0lBQ2IsV0FBVztJQUNYLG1CQUFtQjtJQUNuQjs7S0FFQztBQUNMOztBQUVBO0lBQ0ksYUFBYTtJQUNiLG1CQUFtQjtJQUNuQiw4QkFBOEI7SUFDOUIsV0FBVztJQUNYLHVCQUF1QjtJQUN2QixxQ0FBcUM7SUFDckMsd0NBQXdDO0lBQ3hDLHlDQUF5QztJQUN6QyxzQkFBc0I7SUFDdEI7O0tBRUM7QUFDTDs7QUFFQTtJQUNJLGFBQWE7SUFDYixtQkFBbUI7SUFDbkIsWUFBWTtJQUNaLGNBQWM7SUFDZCxZQUFZO0FBQ2hCOztBQUVBO0lBQ0ksY0FBYztJQUNkLGVBQWU7SUFDZixjQUFjO0lBQ2QsOEJBQThCO0lBQzlCLGtCQUFrQjtJQUNsQiw2RUFBNkU7SUFDN0U7O0tBRUM7QUFDTDs7QUFFQTs7SUFFSSxTQUFTO0FBQ2I7O0FBRUE7SUFDSSxhQUFhO0lBQ2IscUJBQXFCO0lBQ3JCLGVBQWU7SUFDZixvQkFBb0I7SUFDcEIsWUFBWTtBQUNoQjs7QUFFQTtJQUNJLFlBQVk7SUFDWixrQkFBa0I7SUFDbEIsaUJBQWlCO0FBQ3JCOztBQUVBOztJQUVJLGNBQWM7SUFDZCxrQkFBa0I7QUFDdEI7O0FBRUE7SUFDSSxhQUFhO0lBQ2IsY0FBYztJQUNkLGlCQUFpQjtJQUNqQix5QkFBeUI7SUFDekIsWUFBWTtBQUNoQjs7QUFFQTtJQUNJLG1CQUFtQjtJQUNuQix1QkFBdUI7SUFDdkIseUJBQXlCO0lBQ3pCLDZEQUE2RDtJQUM3RCxvQ0FBb0M7SUFDcEMscUJBQXFCO0lBQ3JCLGFBQWE7SUFDYixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLGdDQUFnQztJQUNoQyxlQUFlO0lBQ2Y7O0tBRUM7QUFDTDs7QUFFQTs7SUFFSSw2REFBNkQ7SUFDN0QsMEVBQTBFO0lBQzFFLG1CQUFtQjtBQUN2Qjs7QUFFQTtJQUNJLGtCQUFrQjtJQUNsQixrQkFBa0I7SUFDbEI7O0tBRUM7QUFDTDs7QUFFQTtJQUNJO1FBQ0ksb0JBQW9CO1FBQ3BCLHNCQUFzQjtJQUMxQjs7SUFFQTtRQUNJLGVBQWU7UUFDZiwyQkFBMkI7SUFDL0I7QUFDSjs7QUFFQTtJQUNJLFdBQVcsRUFBRSw0RkFBNEY7SUFDekcsYUFBYSxFQUFFLGtDQUFrQztJQUNqRDs7O0tBR0M7QUFDTDs7QUFFQTtJQUNJLGdDQUFnQyxFQUFFLDZEQUE2RDtJQUMvRix5QkFBeUIsRUFBRSwwREFBMEQ7SUFDckY7OztLQUdDO0FBQ0w7O0FBRUE7SUFDSSxxQ0FBcUMsRUFBRSw2REFBNkQ7SUFDcEc7O0tBRUM7QUFDTDs7QUFFQTs7OztJQUlJLGNBQWM7SUFDZCxXQUFXO0lBQ1gsa0JBQWtCO0lBQ2xCLHdCQUF3QjtJQUN4QixrQkFBa0I7SUFDbEIsc0NBQXNDO0lBQ3RDLDBDQUEwQztJQUMxQywwREFBMEQ7SUFDMUQsMkNBQTJDO0lBQzNDLDZCQUE2QjtJQUM3QixzQkFBc0I7SUFDdEIsOEdBQThHO0lBQzlHLGtCQUFrQjtJQUNsQixvQkFBb0I7SUFDcEIsZ0JBQWdCO0lBQ2hCLGVBQWU7QUFDbkI7O0FBRUE7Ozs7SUFJSSw0Q0FBNEM7SUFDNUMsNERBQTREO0lBQzVELHlDQUF5QztJQUN6QywrQ0FBK0M7SUFDL0MsYUFBYTtBQUNqQjs7QUFFQTtJQUNJLHFCQUFxQjtJQUNyQixzQkFBc0I7SUFDdEIsZ0NBQWdDO0lBQ2hDLHNCQUFzQjtJQUN0QixtQ0FBbUM7SUFDbkMsY0FBYztJQUNkLGdCQUFnQjtJQUNoQixnQkFBZ0I7QUFDcEI7O0FBRUE7SUFDSSxpR0FBaUc7QUFDckc7O0FBRUE7SUFDSSxxQ0FBcUM7QUFDekM7O0FBRUE7SUFDSSwrQkFBK0I7SUFDL0IsdUJBQXVCO0lBQ3ZCLGNBQWM7SUFDZCw4Q0FBOEM7SUFDOUMsa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQixzQkFBc0I7QUFDMUI7O0FBRUE7SUFDSSxjQUFjLE1BQU0sdUNBQXVDO0lBQzNELGNBQWMsTUFBTSw0Q0FBNEM7SUFDaEUsZ0JBQWdCLElBQUksc0NBQXNDO0lBQzFELGtCQUFrQixFQUFFLGtDQUFrQztJQUN0RDs7Ozs7S0FLQztBQUNMOztBQUVBO0lBQ0ksY0FBYyxNQUFNLHFEQUFxRDtJQUN6RSxjQUFjLE1BQU0sNENBQTRDO0lBQ2hFLGtCQUFrQixFQUFFLGlDQUFpQztJQUNyRDs7OztLQUlDO0FBQ0w7O0FBRUE7SUFDSSxjQUFjLE1BQU0sdUNBQXVDO0lBQzNELGVBQWUsTUFBTSw2Q0FBNkM7SUFDbEUsbUJBQW1CLEVBQUUsbURBQW1EO0lBQ3hFLGtCQUFrQixHQUFHLHVDQUF1QztJQUM1RCxpQkFBaUIsS0FBSyw0QkFBNEI7SUFDbEQsb0JBQW9CLEVBQUUsNEJBQTRCO0lBQ2xELGlCQUFpQixLQUFLLDhEQUE4RDtJQUNwRjs7Ozs7Ozs7S0FRQztBQUNMOztBQUVBO0lBQ0ksaUJBQWlCLEVBQUUsK0RBQStEO0lBQ2xGOztLQUVDO0FBQ0w7O0FBRUE7SUFDSSxlQUFlLEVBQUUsd0VBQXdFO0lBQ3pGLFdBQVcsRUFBRSx1Q0FBdUM7SUFDcEQsbUJBQW1CLEVBQUUsdUVBQXVFO0lBQzVGLGlCQUFpQixFQUFFLGtFQUFrRTtJQUNyRjs7Ozs7S0FLQztBQUNMOztBQUVBO0lBQ0ksOENBQThDLEVBQUUsNERBQTREO0lBQzVHLHFDQUFxQyxFQUFFLGtGQUFrRjtJQUN6SCxvQ0FBb0MsRUFBRSxzRUFBc0U7SUFDNUc7Ozs7S0FJQztBQUNMOztBQUVBLHVEQUF1RDtBQUN2RDtJQUNJLHlCQUF5QixFQUFFLCtFQUErRTtJQUMxRyxXQUFXLEVBQUUsdUVBQXVFO0lBQ3BGOzs7S0FHQztBQUNMOztBQUVBLHFDQUFxQztBQUNyQztJQUNJLHlCQUF5QixFQUFFLHdGQUF3RjtJQUNuSCxXQUFXLEVBQUUsOEVBQThFO0lBQzNGOzs7S0FHQztBQUNMOztBQUVBLHdCQUF3QjtBQUN4QjtJQUNJLHlCQUF5QixFQUFFLG1FQUFtRTtJQUM5RixXQUFXLEVBQUUsZ0ZBQWdGO0lBQzdGOzs7S0FHQztBQUNMOztBQUVBLDhDQUE4QztBQUM5QztJQUNJLGFBQWEsRUFBRSx5SEFBeUg7SUFDeEksZ0JBQWdCLEVBQUUsK0RBQStEO0lBQ2pGLFdBQVcsRUFBRSx5RkFBeUY7SUFDdEc7Ozs7S0FJQztBQUNMOztBQUVBLG1DQUFtQztBQUNuQztJQUNJLGVBQWUsRUFBRSw2Q0FBNkM7SUFDOUQsTUFBTSxZQUFZLHVCQUF1QjtJQUN6QyxPQUFPLFdBQVcsc0JBQXNCO0lBQ3hDLFlBQVksTUFBTSwyQkFBMkI7SUFDN0MsYUFBYSxLQUFLLDBCQUEwQjtJQUM1QyxvQ0FBb0MsRUFBRSxnQ0FBZ0M7SUFDdEUsYUFBYSxLQUFLLDBDQUEwQztJQUM1RCxhQUFhLEtBQUssaUNBQWlDO0lBQ25ELHVCQUF1QixFQUFFLHdCQUF3QjtJQUNqRCxtQkFBbUIsTUFBTSx3QkFBd0I7SUFDakQ7Ozs7O0tBS0M7QUFDTDs7QUFFQSwwQ0FBMEM7QUFDMUM7SUFDSSx3QkFBd0IsRUFBRSxxQ0FBcUM7SUFDL0Q7OztLQUdDO0FBQ0w7O0FBRUEsZ0NBQWdDO0FBQ2hDO0lBQ0ksV0FBVyxnQkFBZ0IsOEJBQThCO0lBQ3pELFlBQVksZUFBZSw4QkFBOEI7SUFDekQsY0FBYyxhQUFhLDJCQUEyQjtJQUN0RCxvQkFBb0IsT0FBTyxtQkFBbUI7SUFDOUMscUJBQXFCLE1BQU0sK0JBQStCO0lBQzFELCtCQUErQixFQUFFLG1EQUFtRDtJQUNwRjs7O0tBR0M7QUFDTDs7QUFFQSxpQ0FBaUM7QUFDakM7SUFDSSxpQkFBaUIsRUFBRSw4QkFBOEI7SUFDakQsMEJBQTBCLEVBQUUsd0JBQXdCO0lBQ3BELHFCQUFxQixFQUFFLHVDQUF1QztJQUM5RCxrQkFBa0IsRUFBRSw0Q0FBNEM7SUFDaEU7Ozs7O0tBS0M7QUFDTDs7QUFFQSxnQ0FBZ0M7QUFDaEM7SUFDSSxjQUFjLEVBQUUsOENBQThDO0lBQzlELGVBQWUsRUFBRSw4Q0FBOEM7SUFDL0QsbUJBQW1CLEVBQUUscUVBQXFFO0lBQzFGOzs7O0tBSUM7QUFDTDs7QUFFQSx3Q0FBd0M7QUFDeEM7SUFDSSxpQkFBaUIsR0FBRyxtQ0FBbUM7SUFDdkQsYUFBYSxFQUFFLDZDQUE2QztJQUM1RCxzQkFBc0IsRUFBRSx5QkFBeUI7SUFDakQsbUJBQW1CLEVBQUUsb0NBQW9DO0lBQ3pELHlCQUF5QixFQUFFLDhCQUE4QjtJQUN6RCxnQkFBZ0IsRUFBRSw0REFBNEQ7SUFDOUUsYUFBYSxFQUFFLDZCQUE2QjtJQUM1Qzs7O0tBR0M7QUFDTDs7QUFFQSxxQ0FBcUM7QUFDckM7SUFDSSxhQUFhLEVBQUUsa0NBQWtDO0lBQ2pELHVCQUF1QixFQUFFLDZCQUE2QjtJQUN0RCxTQUFTLEVBQUUsbUNBQW1DO0lBQzlDLG1CQUFtQixFQUFFLG9DQUFvQztJQUN6RDs7S0FFQztBQUNMOztBQUVBLDhCQUE4QjtBQUM5Qjs7SUFFSSxjQUFjLEVBQUUsNkJBQTZCO0lBQzdDLGFBQWEsRUFBRSx1QkFBdUI7SUFDdEMsOEJBQThCLEVBQUUsOEJBQThCO0lBQzlELGdCQUFnQixFQUFFLHNDQUFzQztJQUN4RCxlQUFlLEVBQUUsNEJBQTRCO0lBQzdDLG1CQUFtQixFQUFFLHFCQUFxQjtJQUMxQyx3Q0FBd0MsRUFBRSw0Q0FBNEM7QUFDMUY7O0FBRUEsMEJBQTBCO0FBQzFCO0lBQ0kseUJBQXlCLEVBQUUsOENBQThDO0lBQ3pFLGNBQWMsRUFBRSxvQkFBb0I7SUFDcEMsV0FBVztBQUNmOztBQUVBLG1DQUFtQztBQUNuQztJQUNJLHlCQUF5QixFQUFFLHFEQUFxRDtBQUNwRjs7QUFFQSxnQ0FBZ0M7QUFDaEM7SUFDSSxlQUFlLEVBQUUsMkNBQTJDO0FBQ2hFOztBQUVBLCtCQUErQjtBQUMvQjtJQUNJLFNBQVMsRUFBRSw0QkFBNEI7SUFDdkMsa0JBQWtCLEVBQUUsOEJBQThCO0lBQ2xELHFCQUFxQixFQUFFLDRCQUE0QjtJQUNuRCxjQUFjO0FBQ2xCOztBQUVBLG1CQUFtQjtBQUNuQjtJQUNJLGtCQUFrQixFQUFFLGlDQUFpQztBQUN6RDs7QUFFQSxvREFBb0Q7QUFDcEQ7SUFDSSxnQkFBZ0I7QUFDcEI7O0FBRUE7SUFDSSxlQUFlO0FBQ25COztBQUVBO0lBQ0ksaUJBQWlCO0FBQ3JCOztBQUVBLGtCQUFrQjtBQUNsQjtJQUNJLFdBQVcsRUFBRSxzQkFBc0I7SUFDbkMsWUFBWSxFQUFFLHFCQUFxQjtJQUNuQyxrQkFBa0IsRUFBRSx5QkFBeUI7SUFDN0MsaUJBQWlCLEVBQUUsMENBQTBDO0lBQzdEOzs7S0FHQztBQUNMOztBQUVBLG1HQUFtRztBQUNuRztJQUNJLGtCQUFrQjtJQUNsQixxQkFBcUI7SUFDckIsY0FBYztJQUNkLGdCQUFnQjtJQUNoQiw4Q0FBOEM7SUFDOUMsb0RBQW9EO0FBQ3hEOztBQUVBO0lBQ0ksY0FBYztJQUNkLHFCQUFxQjtJQUNyQixZQUFZO0lBQ1osZ0JBQWdCO0lBQ2hCLHNCQUFzQjtJQUN0QixxREFBcUQ7QUFDekQ7O0FBRUEseUJBQXlCO0FBQ3pCO0lBQ0ksWUFBWSxFQUFFLG1DQUFtQztJQUNqRCwwQkFBMEIsRUFBRSxrQ0FBa0M7SUFDOUQsY0FBYyxFQUFFLDRCQUE0QjtJQUM1QyxVQUFVLEVBQUUseUJBQXlCO0lBQ3JDLGtCQUFrQixFQUFFLDZCQUE2QjtJQUNqRDs7S0FFQztBQUNMOztBQUVBLG1EQUFtRDs7QUFFbkQ7O3dEQUV3RDs7O0FBR3hELG1CQUFtQjs7QUFFbkI7SUFDSSxnQkFBZ0I7SUFDaEIscUJBQXFCO0lBQ3JCLDBDQUEwQztJQUMxQyw0QkFBNEI7SUFDNUIsaURBQWlEO0lBQ2pELGlHQUFpRztJQUNqRzs7K0NBRTJDO0FBQy9DOztBQUVBO0lBQ0ksYUFBYTtJQUNiLHVCQUF1QjtJQUN2Qiw4QkFBOEI7SUFDOUIsb0JBQW9CO0lBQ3BCLHNCQUFzQjtBQUMxQjs7QUFFQTtJQUNJLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsV0FBVztJQUNYLHdCQUF3QjtJQUN4QixvQkFBb0I7SUFDcEIsb0NBQW9DO0lBQ3BDLGNBQWM7SUFDZCxrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLHlCQUF5QjtJQUN6QixzQkFBc0I7SUFDdEIsb0RBQW9EO0lBQ3BELGNBQWM7SUFDZCxpQkFBaUI7QUFDckI7O0FBRUE7SUFDSSxhQUFhO0lBQ2IsY0FBYztJQUNkLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDbkIsNkNBQTZDO0FBQ2pEOztBQUVBO0lBQ0ksU0FBUztJQUNULGNBQWM7SUFDZCw4Q0FBOEM7SUFDOUMsa0JBQWtCO0lBQ2xCLGlCQUFpQjtBQUNyQjs7QUFFQTtJQUNJLFNBQVM7SUFDVCxjQUFjO0lBQ2Qsa0JBQWtCO0lBQ2xCLGdCQUFnQjtBQUNwQjs7QUFFQTtJQUNJLHNCQUFzQjtJQUN0QixjQUFjO0lBQ2Qsa0JBQWtCO0lBQ2xCLGdCQUFnQjtJQUNoQixpQkFBaUI7QUFDckI7O0FBRUE7SUFDSSxjQUFjO0lBQ2Qsa0JBQWtCO0lBQ2xCLGlCQUFpQjtBQUNyQjs7QUFFQTtJQUNJLGtCQUFrQjtJQUNsQix5Q0FBeUM7QUFDN0M7O0FBRUE7SUFDSSxrQkFBa0I7QUFDdEI7O0FBRUE7SUFDSSxXQUFXO0lBQ1gsa0JBQWtCO0lBQ2xCLFFBQVE7SUFDUixtQkFBbUI7SUFDbkIscUNBQXFDO0lBQ3JDLG9CQUFvQjtBQUN4Qjs7QUFFQTtJQUNJLG1CQUFtQjtJQUNuQixxQkFBcUI7SUFDckIsa0JBQWtCO0lBQ2xCLGlCQUFpQjtJQUNqQixnQkFBZ0I7SUFDaEIsc0JBQXNCO0FBQzFCOztBQUVBO0lBQ0ksc0NBQXNDO0FBQzFDOztBQUVBO0lBQ0ksc0NBQXNDO0FBQzFDOztBQUVBO0lBQ0ksY0FBYztJQUNkLG1EQUFtRDtBQUN2RDs7QUFFQTtJQUNJLGNBQWM7QUFDbEI7O0FBRUE7SUFDSSxjQUFjO0FBQ2xCOztBQUVBO0lBQ0ksY0FBYztBQUNsQjs7QUFFQTtJQUNJO1FBQ0ksc0JBQXNCO0lBQzFCOztJQUVBO1FBQ0ksa0JBQWtCO0lBQ3RCOztJQUVBO1FBQ0ksdUJBQXVCO1FBQ3ZCLG9CQUFvQjtJQUN4Qjs7SUFFQTs7O1FBR0ksa0JBQWtCO0lBQ3RCOztJQUVBO1FBQ0ksY0FBYztJQUNsQjtBQUNKOztBQUVBO0lBQ0ksbUJBQW1CO0lBQ25CLHNDQUFzQztJQUN0QyxpQkFBaUI7SUFDakIsbUJBQW1CO0lBQ25CLGdCQUFnQjtJQUNoQiw0QkFBNEI7SUFDNUIsNkRBQTZEO0lBQzdEOztpREFFNkM7QUFDakQ7O0FBRUE7SUFDSSw2REFBNkQ7SUFDN0QsY0FBYztBQUNsQjs7QUFFQTtJQUNJLDZEQUE2RDtJQUM3RCxjQUFjO0FBQ2xCOztBQUVBOzs7OztJQUtJLGNBQWM7QUFDbEI7O0FBRUE7Ozs7SUFJSSxjQUFjO0FBQ2xCOztBQUVBOztJQUVJLGNBQWM7SUFDZCwwQkFBMEI7SUFDMUIsZ0NBQWdDO0lBQ2hDLDBCQUEwQjtBQUM5Qjs7QUFFQTs7OztJQUlJLGNBQWM7QUFDbEI7O0FBRUE7SUFDSSxxQkFBcUI7SUFDckIseUJBQXlCO0FBQzdCOztBQUVBO0lBQ0kscUJBQXFCO0lBQ3JCLGtEQUFrRDtBQUN0RDs7QUFFQTs7O0lBR0kscUJBQXFCO0lBQ3JCLHlCQUF5QjtJQUN6QixjQUFjO0lBQ2QsbUJBQW1CO0lBQ25CLFVBQVU7QUFDZDs7QUFFQTs7O0lBR0ksY0FBYztBQUNsQjs7QUFFQTtJQUNJLHFCQUFxQjtJQUNyQixjQUFjO0lBQ2QseUJBQXlCO0FBQzdCOztBQUVBOztJQUVJLHFCQUFxQjtJQUNyQixjQUFjO0lBQ2QseUJBQXlCO0lBQ3pCLFlBQVk7SUFDWixVQUFVO0FBQ2Q7O0FBRUE7SUFDSSxjQUFjO0FBQ2xCOztBQUVBOztJQUVJLHlCQUF5QjtJQUN6QixxQkFBcUI7SUFDckIsY0FBYztBQUNsQjs7O0FBR0EsdUJBQXVCOztBQUV2QjtJQUNJLG1CQUFtQjtJQUNuQixzQ0FBc0M7SUFDdEMsaUJBQWlCO0lBQ2pCLG1CQUFtQjtJQUNuQixnQkFBZ0I7SUFDaEIsNEJBQTRCO0lBQzVCLDZEQUE2RDtJQUM3RDs7aURBRTZDO0FBQ2pEOztBQUVBO0lBQ0ksNkRBQTZEO0lBQzdELGNBQWM7QUFDbEI7O0FBRUE7SUFDSSw2REFBNkQ7SUFDN0QsY0FBYztBQUNsQjs7QUFFQTs7Ozs7SUFLSSxjQUFjO0FBQ2xCOztBQUVBOzs7O0lBSUksY0FBYztBQUNsQjs7QUFFQTs7SUFFSSxjQUFjO0lBQ2QsMEJBQTBCO0lBQzFCLGdDQUFnQztJQUNoQywwQkFBMEI7QUFDOUI7O0FBRUE7Ozs7SUFJSSxjQUFjO0FBQ2xCOztBQUVBO0lBQ0kscUJBQXFCO0lBQ3JCLHlCQUF5QjtBQUM3Qjs7QUFFQTtJQUNJLHFCQUFxQjtJQUNyQixpREFBaUQ7QUFDckQ7O0FBRUE7OztJQUdJLHFCQUFxQjtJQUNyQix5QkFBeUI7SUFDekIsY0FBYztJQUNkLG1CQUFtQjtJQUNuQixVQUFVO0FBQ2Q7O0FBRUE7OztJQUdJLGNBQWM7QUFDbEI7O0FBRUE7SUFDSSxxQkFBcUI7SUFDckIsY0FBYztJQUNkLHlCQUF5QjtBQUM3Qjs7QUFFQTs7SUFFSSxxQkFBcUI7SUFDckIsY0FBYztJQUNkLHlCQUF5QjtJQUN6QixZQUFZO0lBQ1osVUFBVTtBQUNkOztBQUVBO0lBQ0ksY0FBYztBQUNsQjs7QUFFQTs7SUFFSSx5QkFBeUI7SUFDekIscUJBQXFCO0lBQ3JCLGNBQWM7QUFDbEI7O0FBRUE7SUFDSSxjQUFjLFNBQVMsdUVBQXVFO0lBQzlGLGtCQUFrQixLQUFLLGdEQUFnRDtJQUN2RSxpQkFBaUIsTUFBTSxvQ0FBb0M7SUFDM0QsZUFBZSxRQUFRLDBDQUEwQztJQUNqRTs7O0tBR0M7QUFDTDs7QUFFQSxtRkFBbUY7QUFDbkY7SUFDSTs7UUFFSSxhQUFhO0lBQ2pCOztJQUVBO1FBQ0ksVUFBVTtJQUNkO0FBQ0o7O0FBRUE7SUFDSTtRQUNJLFFBQVE7SUFDWjs7SUFFQTtRQUNJLFlBQVk7SUFDaEI7QUFDSjs7QUFFQSxzREFBc0Q7QUFDdEQ7SUFDSSx3QkFBd0I7SUFDeEIsa0JBQWtCO0lBQ2xCLHlCQUF5QjtJQUN6Qiw4QkFBOEI7SUFDOUIsbUJBQW1CO0lBQ25CLDZEQUE2RDtJQUM3RCxjQUFjO0lBQ2QsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQiwrQ0FBK0M7QUFDbkQ7O0FBRUE7SUFDSTtRQUNJLGNBQWM7SUFDbEI7QUFDSjs7QUFFQTtJQUNJLFVBQVUsY0FBYywyR0FBMkc7SUFDbkksZ0JBQWdCLFFBQVEsbUdBQW1HO0lBQzNILGdCQUFnQixRQUFRLHVIQUF1SDtJQUMvSSxtQkFBbUIsS0FBSyxpR0FBaUc7SUFDekgsZ0JBQWdCLFFBQVEscUZBQXFGO0lBQzdHLHVCQUF1QixDQUFDLDZFQUE2RTtJQUNyRyxjQUFjLFVBQVUsNEVBQTRFO0lBQ3BHLGNBQWMsVUFBVSxnSUFBZ0k7SUFDeEo7Ozs7Ozs7OztLQVNDO0FBQ0w7OztBQUdBLDhDQUE4QztBQUM5QztJQUNJLGVBQWUsRUFBRSx5R0FBeUc7SUFDMUgsWUFBWSxFQUFFLG1FQUFtRTtJQUNqRixXQUFXLEVBQUUscURBQXFEO0lBQ2xFLGFBQWEsRUFBRSxxREFBcUQ7SUFDcEUsc0JBQXNCLEVBQUUsMkRBQTJEO0lBQ25GLFNBQVMsRUFBRSxzREFBc0Q7SUFDakUsYUFBYSxFQUFFLDhEQUE4RDtJQUM3RTs7Ozs7Ozs7S0FRQztBQUNMOztBQUVBLCtEQUErRDtBQUMvRDtJQUNJLFlBQVk7SUFDWixVQUFVO0FBQ2Q7O0FBRUEsa0NBQWtDO0FBQ2xDO0lBQ0ksYUFBYSxFQUFFLDZEQUE2RDtJQUM1RSxtQkFBbUIsRUFBRSwrQ0FBK0M7SUFDcEUsdUJBQXVCLEVBQUUsaURBQWlEO0lBQzFFLFNBQVMsRUFBRSw4Q0FBOEM7SUFDekQsa0JBQWtCLEVBQUUsZ0RBQWdEO0lBQ3BFLGdCQUFnQixFQUFFLDBFQUEwRTtJQUM1RixrQkFBa0IsRUFBRSwwQ0FBMEM7SUFDOUQsY0FBYyxFQUFFLDhCQUE4QjtJQUM5QyxjQUFjLEVBQUUsa0RBQWtEO0lBQ2xFLGlHQUFpRyxFQUFFLHNEQUFzRDtJQUN6SixxREFBcUQsRUFBRSwwQ0FBMEM7SUFDakcsb0JBQW9CLEVBQUUsK0JBQStCO0lBQ3JEOzsrQ0FFMkMsRUFBRSx3Q0FBd0M7SUFDckYsMEJBQTBCLEVBQUUsMENBQTBDO0lBQ3RFLHFHQUFxRyxFQUFFLDhCQUE4QjtJQUNySTs7Ozs7Ozs7Ozs7O0tBWUM7QUFDTDs7QUFFQSxnQkFBZ0I7QUFDaEI7SUFDSSx5QkFBeUIsRUFBRSwyREFBMkQ7SUFDdEYsaUdBQWlHLEVBQUUscURBQXFEO0lBQ3hKLGdEQUFnRCxFQUFFLGdDQUFnQztJQUNsRjs7OENBRTBDLEVBQUUsc0NBQXNDO0lBQ2xGOztLQUVDO0FBQ0w7O0FBRUEsVUFBVTtBQUNWO0lBQ0ksZUFBZSxFQUFFLGlFQUFpRTtJQUNsRjs7S0FFQztBQUNMOztBQUVBLGtEQUFrRDtBQUNsRDtJQUNJLGVBQWUsRUFBRSwrQ0FBK0M7SUFDaEUsZUFBZSxFQUFFLGtEQUFrRDtJQUNuRSxxQkFBcUIsRUFBRSw4QkFBOEI7SUFDckQsZ0JBQWdCLEVBQUUsd0JBQXdCO0lBQzFDLDRCQUE0QjtJQUM1Qiw4REFBOEQsRUFBRSwyQ0FBMkM7SUFDM0c7Ozs7OztLQU1DO0FBQ0w7O0FBRUEsNkNBQTZDO0FBQzdDOztJQUVJLGlCQUFpQixFQUFFLGlEQUFpRDtJQUNwRSxnQkFBZ0IsRUFBRSwrQ0FBK0M7SUFDakUsV0FBVyxFQUFFLGdFQUFnRTtJQUM3RTs7OztLQUlDO0FBQ0w7O0FBRUEsMENBQTBDO0FBQzFDO0lBQ0ksYUFBYSxlQUFlLGlDQUFpQztJQUM3RCxjQUFjLGNBQWMsZ0NBQWdDO0lBQzVELG1CQUFtQixTQUFTLHVDQUF1QztJQUNuRSx1QkFBdUIsS0FBSyw0QkFBNEI7SUFDeEQsc0JBQXNCLE1BQU0seUNBQXlDO0lBQ3JFLGtCQUFrQixVQUFVLHdDQUF3QztJQUNwRTs7Ozs7S0FLQztBQUNMOztBQUVBLDBDQUEwQztBQUMxQztJQUNJLGtCQUFrQixFQUFFLDRDQUE0QztJQUNoRSxnQkFBZ0IsRUFBRSx5QkFBeUI7SUFDM0MsY0FBYyxFQUFFLHlDQUF5QztJQUN6RCx5QkFBeUIsRUFBRSxxQ0FBcUM7SUFDaEU7Ozs7O0tBS0M7QUFDTDs7QUFFQSw4Q0FBOEM7QUFDOUM7O0lBRUkscUJBQXFCLEVBQUUsK0NBQStDO0lBQ3RFLGlDQUFpQyxFQUFFLDRDQUE0QztJQUMvRTs7O0tBR0M7QUFDTDs7QUFFQSxnQ0FBZ0M7QUFDaEM7O0lBRUksd0JBQXdCLEVBQUUscURBQXFEO0lBQy9FOztLQUVDO0FBQ0w7O0FBRUEsNEJBQTRCO0FBQzVCO0lBQ0ksb0NBQW9DLEVBQUUsK0JBQStCO0lBQ3JFLHVCQUF1QixFQUFFLCtCQUErQjtJQUN4RCx3QkFBd0IsRUFBRSw2QkFBNkI7SUFDdkQsMkJBQTJCLEVBQUUsZUFBZTtJQUM1Qyx1QkFBdUIsRUFBRSx3QkFBd0I7SUFDakQ7Ozs7OztLQU1DO0FBQ0w7O0FBRUEsMkRBQTJEO0FBQzNEOztJQUVJLG9DQUFvQyxFQUFFLG1EQUFtRDtJQUN6Rix1QkFBdUIsRUFBRSw4QkFBOEI7SUFDdkQsaUJBQWlCLEVBQUUscUJBQXFCO0lBQ3hDLFlBQVksRUFBRSxnQkFBZ0I7SUFDOUI7Ozs7O0tBS0M7QUFDTDs7QUFFQSxvREFBb0Q7QUFDcEQ7SUFDSSxvQ0FBb0MsRUFBRSx3Q0FBd0M7SUFDOUUsdUJBQXVCLEVBQUUsd0NBQXdDO0lBQ2pFOzs7S0FHQztBQUNMOztBQUVBLHVFQUF1RTtBQUN2RTtJQUNJLDZFQUFzRSxFQUFFLDBDQUEwQztJQUNsSCxxQkFBcUIsRUFBRSxpQ0FBaUM7O0lBRXhEOzs7S0FHQztBQUNMOztBQUVBLDJFQUEyRTtBQUMzRTs7SUFFSSxnREFBZ0QsRUFBRSwwQ0FBMEM7SUFDNUYsa0JBQWtCLEVBQUUsa0NBQWtDO0lBQ3RELDBDQUEwQyxFQUFFLHlDQUF5QztJQUNyRixXQUFXLEVBQUUsd0JBQXdCO0lBQ3JDLFlBQVksRUFBRSx1QkFBdUI7SUFDckMsZ0NBQWdDLEVBQUUscUNBQXFDO0lBQ3ZFLGFBQWEsRUFBRSx5REFBeUQ7SUFDeEUsdUJBQXVCLEVBQUUsaUNBQWlDO0lBQzFELG1CQUFtQixFQUFFLGlDQUFpQzs7SUFFdEQ7Ozs7Ozs7S0FPQztBQUNMOztBQUVBLHdDQUF3QztBQUN4Qzs7SUFFSSx1QkFBdUIsRUFBRSxpQ0FBaUM7SUFDMUQsZUFBZSxFQUFFLG1CQUFtQjtJQUNwQyxVQUFVLEVBQUUsb0NBQW9DOztJQUVoRDs7OztLQUlDO0FBQ0w7O0FBRUEsc0NBQXNDO0FBQ3RDOztJQUVJLDZDQUE2QyxFQUFFLG9DQUFvQzs7SUFFbkY7OztLQUdDO0FBQ0w7O0FBRUEsc0VBQXNFO0FBQ3RFO0lBQ0ksMkJBQTJCLE1BQU0sa0JBQWtCO0lBQ25ELDJCQUEyQixNQUFNLHFCQUFxQjtJQUN0RCxZQUFZLHFCQUFxQixxQkFBcUI7SUFDdEQsV0FBVyxzQkFBc0IsMkJBQTJCO0lBQzVELFlBQVkscUJBQXFCLDBCQUEwQjtJQUMzRCxZQUFZLHFCQUFxQixtREFBbUQ7SUFDcEYsU0FBUyx3QkFBd0IsbUJBQW1CO0lBQ3BELFdBQVcsc0JBQXNCLHFCQUFxQjs7SUFFdEQ7Ozs7O0tBS0M7QUFDTDs7QUFFQSwyQkFBMkI7QUFDM0I7SUFDSSx1QkFBdUIsUUFBUSxxQ0FBcUM7SUFDcEUsZUFBZSxnQkFBZ0IsbUJBQW1CO0lBQ2xELFVBQVUscUJBQXFCLHFDQUFxQzs7SUFFcEU7Ozs7S0FJQztBQUNMOztBQUVBLG1EQUFtRDtBQUNuRDtJQUNJLHVCQUF1QixFQUFFLGtEQUFrRDs7SUFFM0U7OztLQUdDO0FBQ0w7O0FBRUEsMERBQTBEO0FBQzFEO0lBQ0ksc0JBQXNCLEVBQUUsd0JBQXdCO0lBQ2hELDJCQUEyQixFQUFFLGFBQWE7SUFDMUMsa0JBQWtCLEVBQUUsNEJBQTRCO0lBQ2hELGdCQUFnQixFQUFFLDZCQUE2QjtJQUMvQyxTQUFTLEVBQUUsbUJBQW1CO0lBQzlCLFVBQVUsRUFBRSw2QkFBNkI7SUFDekMsa0JBQWtCLEVBQUUsMEJBQTBCO0lBQzlDLCtDQUErQyxFQUFFLDBEQUEwRDs7SUFFM0c7Ozs7Ozs7S0FPQztBQUNMOztBQUVBLDBDQUEwQztBQUMxQztJQUNJLHdCQUF3QixFQUFFLHlDQUF5Qzs7SUFFbkU7Ozs7S0FJQztBQUNMOztBQUVBLDhCQUE4QjtBQUM5QjtJQUNJLDBCQUEwQixFQUFFLGtDQUFrQztJQUM5RCx5QkFBeUIsRUFBRSwwREFBMEQ7O0lBRXJGOzs7S0FHQztBQUNMOztBQUVBLDJEQUEyRDtBQUMzRDtJQUNJLFNBQVM7SUFDVCxrQkFBa0IsRUFBRSx3REFBd0Q7SUFDNUUsa0JBQWtCLEVBQUUsMEJBQTBCO0lBQzlDLGNBQWMsRUFBRSw2QkFBNkI7SUFDN0Msa0JBQWtCLEVBQUUseUJBQXlCO0lBQzdDLDhDQUE4QyxFQUFFLGtDQUFrQztJQUNsRixnQkFBZ0IsRUFBRSxzQ0FBc0M7SUFDeEQsc0JBQXNCLEVBQUUsc0NBQXNDO0lBQzlELGtCQUFrQixFQUFFLHNEQUFzRDtJQUMxRSxrQkFBa0IsRUFBRSxzREFBc0Q7SUFDMUUsc0JBQXNCLEVBQUUsNENBQTRDOztJQUVwRTs7Ozs7S0FLQztBQUNMOztBQUVBLDJEQUEyRDtBQUMzRDtJQUNJLDhCQUE4QixFQUFFLG9FQUFvRTs7SUFFcEc7OztLQUdDO0FBQ0w7O0FBRUEscUZBQXFGO0FBQ3JGO0lBQ0ksVUFBVTtJQUNWLGtDQUFrQztJQUNsQzs7dUZBRW1GO0lBQ25GLCtCQUErQjtBQUNuQzs7QUFFQSx5RUFBeUU7QUFDekU7SUFDSSxVQUFVO0lBQ1YsK0JBQStCO0FBQ25DOztBQUVBO0lBQ0ksMkRBQTJEO0lBQzNEO1FBQ0kscUJBQXFCO1FBQ3JCLDBCQUEwQjtRQUMxQiwyQkFBMkI7SUFDL0I7QUFDSjs7QUFFQSx1RUFBdUU7QUFDdkU7SUFDSSwyQkFBMkIsT0FBTyxvRUFBb0U7SUFDdEcsMkJBQTJCLE9BQU8sMkRBQTJEO0lBQzdGLHVCQUF1QixXQUFXLHVEQUF1RDtJQUN6RixpQkFBaUIsaUJBQWlCLG1FQUFtRTtJQUNyRyxtQkFBbUIsZUFBZSx5RUFBeUU7O0lBRTNHOzs7Ozs7S0FNQztBQUNMOztBQUVBLDhGQUE4RjtBQUM5RjtJQUNJLGdDQUFnQyxhQUFhLHdFQUF3RTtJQUNySCxvQ0FBb0MsU0FBUyxvRUFBb0U7SUFDakgsb0NBQW9DLFNBQVMseURBQXlEO0lBQ3RHLHlCQUF5QixvQkFBb0IseURBQXlEO0lBQ3RHLGlCQUFpQiw0QkFBNEIscURBQXFEO0lBQ2xHLGdCQUFnQiw2QkFBNkIsd0RBQXdEO0lBQ3JHLGlEQUFpRCxFQUFFLHNDQUFzQztJQUN6RiwyQkFBMkIsa0JBQWtCLGlEQUFpRDtJQUM5RixnQkFBZ0IsNkJBQTZCLDBEQUEwRDtJQUN2Ryx1Q0FBdUMsTUFBTSx3REFBd0Q7SUFDckcsa0JBQWtCLDJCQUEyQixnREFBZ0Q7SUFDN0YsVUFBVSxtQ0FBbUMsd0VBQXdFOztJQUVySDs7Ozs7Ozs7Ozs7S0FXQztBQUNMOztBQUVBLHNHQUFzRztBQUN0RztJQUNJLGlDQUFpQyxpQkFBaUIsNkVBQTZFO0lBQy9ILHNCQUFzQiw0QkFBNEIsNERBQTREO0lBQzlHLGlCQUFpQixpQ0FBaUMsNkNBQTZDO0lBQy9GLHdDQUF3QyxVQUFVLDBFQUEwRTtJQUM1SCxVQUFVLHdDQUF3QywyREFBMkQ7O0lBRTdHOzs7Ozs7S0FNQztBQUNMOztBQUVBLGdHQUFnRztBQUNoRztJQUNJLG1CQUFtQixFQUFFLGlFQUFpRTs7SUFFdEY7Ozs7S0FJQztBQUNMOztBQUVBLHdGQUF3RjtBQUN4RjtJQUNJLGlDQUFpQyxVQUFVLGNBQWM7SUFDekQsZ0NBQWdDLFlBQVksa0VBQWtFO0lBQzlHLDJCQUEyQixpQkFBaUIsaURBQWlEO0lBQzdGLHNCQUFzQixzQkFBc0Isc0RBQXNEO0lBQ2xHLHdCQUF3QixvQkFBb0IsdURBQXVEO0lBQ25HLGlEQUFpRCxFQUFFLDZEQUE2RDs7SUFFaEg7Ozs7Ozs7S0FPQztBQUNMOztBQUVBLDRFQUE0RTtBQUM1RTtJQUNJLGtCQUFrQixrQkFBa0IsK0RBQStEO0lBQ25HLFNBQVMsMkJBQTJCLHdFQUF3RTtJQUM1RyxVQUFVLDBCQUEwQiw4Q0FBOEM7SUFDbEYsMkJBQTJCLFNBQVMsd0RBQXdEO0lBQzVGLHlCQUF5QixXQUFXLHdDQUF3Qzs7SUFFNUU7Ozs7OztLQU1DO0FBQ0w7O0FBRUEseUVBQXlFO0FBQ3pFO0lBQ0ksb0JBQW9CLGtCQUFrQixrRkFBa0Y7SUFDeEgsb0JBQW9CLGtCQUFrQiwrREFBK0Q7SUFDckcsZ0JBQWdCLHNCQUFzQiwrREFBK0Q7SUFDckcsY0FBYyx3QkFBd0Isc0VBQXNFO0lBQzVHLGlCQUFpQixxQkFBcUIsOERBQThEO0lBQ3BHLDRCQUE0QixVQUFVLHVEQUF1RDs7SUFFN0Y7Ozs7Ozs7S0FPQztBQUNMOztBQUVBLG1FQUFtRTtBQUNuRTtJQUNJLGNBQWMsa0JBQWtCLDRFQUE0RTtJQUM1RyxpQkFBaUIsZUFBZSxvRUFBb0U7SUFDcEcsZ0JBQWdCLGdCQUFnQix1REFBdUQ7SUFDdkYsc0JBQXNCLFVBQVUsc0VBQXNFO0lBQ3RHLHFCQUFxQixXQUFXLCtEQUErRDtJQUMvRixzQkFBc0IsVUFBVSxvREFBb0Q7SUFDcEYsaUJBQWlCLGVBQWUsdUVBQXVFOztJQUV2Rzs7Ozs7Ozs7S0FRQztBQUNMOztBQUVBLDREQUE0RDtBQUM1RDtJQUNJLHlCQUF5QixTQUFTLHlFQUF5RTtJQUMzRyxpQkFBaUIsaUJBQWlCLHlFQUF5RTs7SUFFM0c7OztLQUdDO0FBQ0w7O0FBRUEsMEVBQTBFO0FBQzFFOztJQUVJLHlCQUF5QixVQUFVLHdFQUF3RTtJQUMzRyxpQkFBaUIsa0JBQWtCLDZEQUE2RDs7SUFFaEc7OztLQUdDO0FBQ0w7O0FBRUEsMkVBQTJFO0FBQzNFO0lBQ0kseUJBQXlCLFVBQVUsZ0ZBQWdGO0lBQ25ILDRCQUE0QixPQUFPLDJFQUEyRTs7SUFFOUc7OztLQUdDO0FBQ0w7O0FBRUEsd0ZBQXdGO0FBQ3hGO0lBQ0ksV0FBVyx1QkFBdUIsNEVBQTRFO0lBQzlHLGlCQUFpQixpQkFBaUIsb0VBQW9FOztJQUV0Rzs7O0tBR0M7QUFDTDs7QUFFQSxvQ0FBb0M7QUFDcEM7RUFDRTtJQUNFLDRCQUE0QjtJQUM1QixxQkFBcUI7SUFDckIsb0JBQW9CO0VBQ3RCO0VBQ0E7SUFDRSxpQ0FBaUM7SUFDakMsNEJBQTRCO0lBQzVCLDBCQUEwQjtJQUMxQiw0QkFBNEI7SUFDNUIsOEJBQThCO0VBQ2hDO0VBQ0E7OztJQUdFLDRCQUE0QjtJQUM1QiwrQkFBK0I7SUFDL0Isb0JBQW9CO0VBQ3RCO0FBQ0Y7O0FBRUEsa0VBQWtFO0FBQ2xFO0VBQ0U7SUFDRSwyQkFBMkI7SUFDM0IsNEJBQTRCO0lBQzVCLGlDQUFpQztJQUNqQyxhQUFhO0lBQ2IsY0FBYztFQUNoQjtFQUNBO0lBQ0UsOEJBQThCO0lBQzlCLDBCQUEwQjtJQUMxQiw4QkFBOEI7SUFDOUIseUJBQXlCO0VBQzNCO0VBQ0E7OztJQUdFLDRCQUE0QjtJQUM1QiwrQkFBK0I7RUFDakM7QUFDRjs7QUFFQSx3RkFBd0Y7QUFDeEY7SUFDSSxXQUFXLGdCQUFnQixpRkFBaUY7SUFDNUcsWUFBWSxlQUFlLHNFQUFzRTtJQUNqRyxjQUFjLGFBQWEsa0VBQWtFO0lBQzdGLGFBQWEsY0FBYywwREFBMEQ7SUFDckYsbUJBQW1CLFFBQVEsaURBQWlEO0lBQzVFLDJCQUEyQixFQUFFLDZFQUE2RTtJQUMxRyxjQUFjLGFBQWEsc0VBQXNFO0lBQ2pHLGtCQUFrQixTQUFTLDBEQUEwRDtJQUNyRixtQkFBbUIsUUFBUSxpQ0FBaUM7O0lBRTVEOzs7Ozs7Ozs7O0tBVUM7QUFDTDs7O0FBR0EsbUZBQW1GO0FBQ25GO0lBQ0ksMkJBQTJCLEdBQUcsbUVBQW1FO0lBQ2pHLG9CQUFvQixVQUFVLHVFQUF1RTtJQUNyRyxvQkFBb0IsVUFBVSwyRUFBMkU7SUFDekcsc0JBQXNCLFFBQVEsaURBQWlEO0lBQy9FLGVBQWUsZUFBZSxzRUFBc0U7O0lBRXBHOzs7Ozs7S0FNQztBQUNMOztBQUVBOzs4Q0FFOEM7O0FBRTlDO3lEQUN5RDtBQUN6RDtJQUNJLFVBQVU7QUFDZDs7QUFFQSx5RUFBeUU7QUFDekU7SUFDSSxtQkFBbUIsc0JBQXNCLHdDQUF3QztJQUNqRixrQkFBa0IsdUJBQXVCLGdEQUFnRDtJQUN6RixrQkFBa0IsdUJBQXVCLGlFQUFpRTtJQUMxRyxVQUFVLCtCQUErQixzREFBc0Q7SUFDL0YsZ0JBQWdCLHlCQUF5QixzREFBc0Q7SUFDL0YsdUNBQXVDLEVBQUUsdUNBQXVDOztJQUVoRixhQUFhLDRCQUE0QiwwREFBMEQ7SUFDbkcsYUFBYSw0QkFBNEIsbURBQW1EO0lBQzVGLG1CQUFtQixzQkFBc0IseUJBQXlCO0lBQ2xFLHVCQUF1QixrQkFBa0IsK0NBQStDO0FBQzVGOztBQUVBOzs7Ozs7O0NBT0M7O0FBRUQ7NEJBQzRCO0FBQzVCO0lBQ0ksaUJBQWlCLEdBQUcsK0NBQStDO0lBQ25FLFdBQVcsU0FBUyx5Q0FBeUM7QUFDakU7O0FBRUEseUVBQXlFO0FBQ3pFO0lBQ0ksV0FBVztBQUNmOztBQUVBOzs4Q0FFOEM7O0FBRTlDLGdFQUFnRTtBQUNoRTtJQUNJLGdCQUFnQjtJQUNoQixxQkFBcUI7SUFDckIscUJBQXFCO0lBQ3JCLGlCQUFpQjtJQUNqQixvREFBb0Q7SUFDcEQsNkJBQTZCO0lBQzdCLGtCQUFrQjs7SUFFbEI7Ozs7O0tBS0M7QUFDTDs7QUFFQTtvREFDb0Q7QUFDcEQsaUNBQWlDO0FBQ2pDO0lBQ0ksZ0RBQWdEO0FBQ3BEOztBQUVBLHNEQUFzRDtBQUN0RDtJQUNJO1FBQ0ksc0JBQXNCO1FBQ3RCLGFBQWE7UUFDYixnREFBZ0Q7UUFDaEQscUJBQXFCLElBQUksaUNBQWlDO1FBQzFELGlCQUFpQixPQUFPLGlEQUFpRDtJQUM3RTs7SUFFQTtRQUNJLHNCQUFzQjtRQUN0QixhQUFhO0lBQ2pCO0FBQ0o7O0FBRUEsZ0VBQWdFO0FBQ2hFO0lBQ0kscUJBQXFCO0lBQ3JCLGdCQUFnQjtJQUNoQixvREFBb0Q7SUFDcEQsNkJBQTZCO0lBQzdCLGtCQUFrQjs7SUFFbEI7OztLQUdDO0FBQ0w7O0FBRUEseURBQXlEO0FBQ3pEO0lBQ0ksZ0JBQWdCO0lBQ2hCLHFCQUFxQjs7SUFFckIsNEJBQTRCO0lBQzVCLG9EQUFvRDtJQUNwRCw2QkFBNkI7SUFDN0Isb0NBQW9DOztJQUVwQyxpRkFBaUY7QUFDckY7O0FBRUEsK0NBQStDO0FBQy9DO0lBQ0ksb0RBQW9EO0lBQ3BELDZCQUE2QjtJQUM3QixvQ0FBb0M7O0lBRXBDLDBCQUEwQjtJQUMxQiw4QkFBOEI7QUFDbEM7O0FBRUE7SUFDSSxpQkFBaUIsV0FBVywrQkFBK0I7SUFDM0QsaUJBQWlCO0lBQ2pCLFdBQVc7QUFDZjs7QUFFQTs7OzhDQUc4Qzs7QUFFOUM7SUFDSSxrQkFBa0IsV0FBVyxnQ0FBZ0M7SUFDN0Qsa0JBQWtCLFdBQVcsOERBQThEOztJQUUzRjs7OztLQUlDO0FBQ0w7O0FBRUE7O0lBRUksV0FBVztJQUNYLGtCQUFrQjtJQUNsQixZQUFZO0lBQ1osYUFBYTtJQUNiLHFCQUFxQjtJQUNyQixtQkFBbUI7SUFDbkIsb0JBQW9CO0lBQ3BCLFVBQVUsR0FBRyxtQ0FBbUM7O0lBRWhEOzs7S0FHQztBQUNMOztBQUVBLG1CQUFtQjtBQUNuQjtJQUNJLFNBQVM7SUFDVCxVQUFVO0lBQ1YseUJBQXlCO0FBQzdCOztBQUVBLG9CQUFvQjtBQUNwQjtJQUNJLFlBQVk7SUFDWixXQUFXO0lBQ1gseUJBQXlCO0FBQzdCOztBQUVBOzs7OENBRzhDOztBQUU5QztJQUNJLGtCQUFrQjtJQUNsQixrQkFBa0IsR0FBRyxrREFBa0Q7O0lBRXZFOzs7S0FHQztBQUNMOztBQUVBLDhDQUE4QztBQUM5QztJQUNJLFdBQVc7SUFDWCxrQkFBa0I7SUFDbEIsWUFBWTtJQUNaLGFBQWE7SUFDYixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQixVQUFVOztJQUVWLFNBQVM7SUFDVCxVQUFVO0lBQ1YseUJBQXlCO0FBQzdCOztBQUVBLDhDQUE4QztBQUM5QztJQUNJLFdBQVc7SUFDWCxrQkFBa0I7SUFDbEIsWUFBWTtJQUNaLGFBQWE7SUFDYixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQixVQUFVOztJQUVWLFlBQVk7SUFDWixXQUFXO0lBQ1gseUJBQXlCO0FBQzdCOztBQUVBLG9DQUFvQztBQUNwQztJQUNJLFdBQVc7SUFDWCxrQkFBa0I7SUFDbEIsWUFBWTtJQUNaLGFBQWE7SUFDYixxQkFBcUI7SUFDckIsbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQixVQUFVOztJQUVWLFlBQVk7SUFDWixVQUFVO0lBQ1YseUJBQXlCOztJQUV6Qjs7OztLQUlDO0FBQ0w7O0FBRUE7Ozs4Q0FHOEM7O0FBRTlDO0lBQ0ksa0JBQWtCLFdBQVcsa0NBQWtDO0lBQy9ELGtCQUFrQixXQUFXLG9EQUFvRDs7SUFFakY7Ozs7O0tBS0M7QUFDTDs7QUFFQTs7SUFFSSxXQUFXO0lBQ1gsa0JBQWtCO0lBQ2xCLFdBQVcsSUFBSSxrREFBa0Q7SUFDakUsWUFBWTtJQUNaLHFCQUFxQjtJQUNyQixtQkFBbUI7SUFDbkIsb0JBQW9CO0lBQ3BCLFVBQVUsS0FBSyx1RkFBdUY7O0lBRXRHOzs7S0FHQztBQUNMOztBQUVBLHVDQUF1QztBQUN2QztJQUNJLFNBQVM7SUFDVCxVQUFVO0lBQ1YseUJBQXlCO0FBQzdCOztBQUVBLHdDQUF3QztBQUN4QztJQUNJLFlBQVk7SUFDWixXQUFXO0lBQ1gseUJBQXlCO0FBQzdCOzs7QUFHQTtFQUNFLHVCQUF1QixFQUFFLDRDQUE0QztBQUN2RTs7QUFFQTtFQUNFO0lBQ0Usc0JBQXNCO0lBQ3RCLHlCQUF5QixFQUFFLGtCQUFrQjtFQUMvQztBQUNGOztBQUVBOzs7Q0FHQztBQUNEO0VBQ0UsVUFBVTtBQUNaOztBQUVBOzs7O0VBSUUsa0NBQWtDLEVBQUUsZ0ZBQWdGO0VBQ3BILG9CQUFvQixFQUFFLDREQUE0RDtBQUNwRjs7QUFFQSxxRUFBcUU7QUFDckU7RUFDRSxpQ0FBaUMsRUFBRSxtQ0FBbUM7RUFDdEUseUJBQXlCO0VBQ3pCLDRCQUE0Qjs7RUFFNUI7OztHQUdDO0FBQ0g7O0FBRUEsb0VBQW9FO0FBQ3BFO0VBQ0Usb0NBQW9DLEVBQUUsMEJBQTBCO0VBQ2hFLDZCQUE2QixTQUFTLGdDQUFnQztFQUN0RSwyQkFBMkIsV0FBVyw4QkFBOEI7RUFDcEUsdUJBQXVCLGVBQWUsNkJBQTZCOztFQUVuRSx3QkFBd0I7RUFDeEIsOEJBQThCLFFBQVEsK0JBQStCOztFQUVyRSwwQkFBMEIsWUFBWSwyQkFBMkI7RUFDakUsNEJBQTRCLFVBQVUsbUNBQW1DO0VBQ3pFLGlDQUFpQzs7RUFFakM7Ozs7R0FJQztBQUNIOztBQUVBLDBEQUEwRDtBQUMxRDtFQUNFLG9CQUFvQjtFQUNwQixxQkFBcUI7RUFDckIsMkJBQTJCLFlBQVksK0JBQStCOztFQUV0RSx1QkFBdUIsZ0JBQWdCLDRCQUE0QjtFQUNuRSw0QkFBNEIsV0FBVyxnQ0FBZ0M7RUFDdkUsc0JBQXNCOztFQUV0QixvQkFBb0I7RUFDcEIscUJBQXFCLGtCQUFrQiw4QkFBOEI7RUFDckUsa0NBQWtDO0VBQ2xDLGlDQUFpQzs7RUFFakM7Ozs7R0FJQztBQUNIOztBQUVBLG9EQUFvRDtBQUNwRDtJQUNJLGFBQWEscUJBQXFCLDRCQUE0QjtJQUM5RCxTQUFTLHlCQUF5QixnQ0FBZ0M7SUFDbEUsbUJBQW1CLGVBQWUsOEJBQThCO0lBQ2hFLDJCQUEyQixPQUFPLDZCQUE2Qjs7SUFFL0Q7Ozs7O0tBS0M7QUFDTDs7O0FBR0EsMEJBQTBCO0FBQzFCO0lBQ0ksZUFBZSxtQkFBbUIsc0NBQXNDO0lBQ3hFLHFCQUFxQixhQUFhLHNCQUFzQjtJQUN4RCxvQkFBb0IsY0FBYyw4QkFBOEI7SUFDaEUsbUJBQW1CO0lBQ25CLHVCQUF1Qjs7SUFFdkI7aUNBQzZCLE1BQU0sNEJBQTRCOztJQUUvRDs7OztLQUlDO0FBQ0w7OztBQUdBLDRDQUE0QztBQUM1QztJQUNJLGNBQWMsb0JBQW9CLHdDQUF3Qzs7SUFFMUU7OztLQUdDO0FBQ0w7OztBQUdBLCtDQUErQztBQUMvQztJQUNJLGNBQWMsb0JBQW9CLHNDQUFzQzs7SUFFeEU7OztLQUdDO0FBQ0w7OztBQUdBLG1EQUFtRDtBQUNuRDtJQUNJLHNCQUFzQixZQUFZLDJCQUEyQjtJQUM3RCxhQUFhLHFCQUFxQix3QkFBd0I7O0lBRTFEOzs7O0tBSUM7QUFDTDs7QUFFQSwwQ0FBMEM7QUFDMUM7SUFDSSxlQUFlLGlCQUFpQixpQkFBaUI7SUFDakQsZ0JBQWdCLGdCQUFnQiw0QkFBNEI7SUFDNUQsZUFBZTtJQUNmLGdCQUFnQjs7SUFFaEI7Ozs7O0tBS0M7QUFDTDs7QUFFQSxxREFBcUQ7QUFDckQ7SUFDSSxtQkFBbUIsYUFBYSxxQ0FBcUM7SUFDckUsa0JBQWtCOztJQUVsQjs7O0tBR0M7QUFDTDs7QUFFQSx3REFBd0Q7QUFDeEQ7SUFDSTtRQUNJLGVBQWUsRUFBRSxpRUFBaUU7SUFDdEY7O0lBRUE7OztLQUdDO0FBQ0w7O0FBRUEsNEVBQTRFO0FBQzVFO0lBQ0ksNkJBQTZCLEVBQUUsNENBQTRDO0lBQzNFLGNBQWMsRUFBRSxvQ0FBb0M7SUFDcEQseUJBQXlCLEVBQUUsNkJBQTZCO0lBQ3hELHNCQUFzQixFQUFFLHdEQUF3RDtJQUNoRixtQkFBbUIsRUFBRSxxQ0FBcUM7SUFDMUQseUJBQXlCLEVBQUUsbUNBQW1DO0lBQzlELHFCQUFxQixFQUFFLG9DQUFvQztBQUMvRDs7QUFFQTs7Ozs7Q0FLQzs7QUFFRCxpREFBaUQ7QUFDakQ7SUFDSSwwQkFBMEIsRUFBRSxvQ0FBb0M7SUFDaEUseUJBQXlCLEVBQUUseUNBQXlDO0lBQ3BFLGNBQWMsRUFBRSxtQ0FBbUM7QUFDdkQ7O0FBRUE7OztDQUdDOzs7QUFHRCwyQ0FBMkM7QUFDM0M7SUFDSSxnQkFBZ0IsRUFBRSxzQ0FBc0M7SUFDeEQsaUJBQWlCLEVBQUUsd0NBQXdDO0lBQzNELGdCQUFnQixFQUFFLHNCQUFzQjtJQUN4QyxtQkFBbUIsRUFBRSxtQ0FBbUM7SUFDeEQsbUJBQW1CLEVBQUUsMkJBQTJCO0lBQ2hELGdDQUFnQyxFQUFFLGdDQUFnQztJQUNsRSxjQUFjLEVBQUUsbUNBQW1DO0FBQ3ZEOztBQUVBOzs7O0NBSUM7OztBQUdELCtDQUErQztBQUMvQztJQUNJLGNBQWMsRUFBRSw4QkFBOEI7SUFDOUMsaUJBQWlCLEVBQUUsZ0RBQWdEO0lBQ25FLGdCQUFnQixFQUFFLDhDQUE4QztJQUNoRSxxQkFBcUIsRUFBRSw2QkFBNkI7QUFDeEQ7O0FBRUE7OztDQUdDOzs7QUFHRCx1REFBdUQ7QUFDdkQ7SUFDSSx5QkFBeUIsRUFBRSwrQ0FBK0M7SUFDMUUsa0JBQWtCLEVBQUUsNkJBQTZCO0lBQ2pELG1CQUFtQixFQUFFLG9DQUFvQztJQUN6RCxtQkFBbUIsRUFBRSx3QkFBd0I7O0lBRTdDLHlCQUF5QixFQUFFLDBCQUEwQjtJQUNyRCxrQkFBa0IsRUFBRSw0Q0FBNEM7QUFDcEU7O0FBRUEsa0NBQWtDO0FBQ2xDO0lBQ0ksbUJBQW1CLEVBQUUsZ0RBQWdEO0lBQ3JFOzs7S0FHQztBQUNMOztBQUVBLDJDQUEyQztBQUMzQztJQUNJLE9BQU8sRUFBRSxpREFBaUQ7SUFDMUQsU0FBUyxFQUFFLGtEQUFrRDtJQUM3RCx5QkFBeUIsRUFBRSxxREFBcUQ7SUFDaEYsZ0JBQWdCLEVBQUUsa0RBQWtEO0lBQ3BFOzs7Ozs7S0FNQztBQUNMOztBQUVBLDBEQUEwRDtBQUMxRDtJQUNJO1FBQ0ksYUFBYSxFQUFFLDhEQUE4RDtRQUM3RSxlQUFlLEVBQUUsMkRBQTJEO1FBQzVFOzs7U0FHQztJQUNMOztJQUVBO1FBQ0ksd0JBQXdCLEVBQUUsMERBQTBEO1FBQ3BGLDBCQUEwQixFQUFFLCtDQUErQztRQUMzRSxZQUFZLEVBQUUsZ0NBQWdDO1FBQzlDOzs7U0FHQztJQUNMOztJQUVBO1FBQ0ksV0FBVyxFQUFFLGlDQUFpQztRQUM5QywwQkFBMEIsRUFBRSx3Q0FBd0M7UUFDcEU7OztTQUdDO0lBQ0w7O0lBRUE7UUFDSSxXQUFXLEVBQUUsdUNBQXVDO1FBQ3BELHdCQUF3QixFQUFFLHNDQUFzQztRQUNoRSw4QkFBOEIsRUFBRSxrREFBa0Q7UUFDbEYsV0FBVyxFQUFFLDhCQUE4QjtRQUMzQzs7O1NBR0M7SUFDTDs7SUFFQTtRQUNJLFdBQVcsRUFBRSwwQ0FBMEM7UUFDdkQ7O1NBRUM7SUFDTDtBQUNKOztBQUVBLHNEQUFzRDtBQUN0RDtJQUNJO1FBQ0ksMEJBQTBCLEVBQUUsOENBQThDO1FBQzFFOztTQUVDO0lBQ0w7QUFDSiIsInNvdXJjZXMiOlsid2VicGFjazovLy8uL2Fzc2V0cy9jc3Mvc3R5bGUuY3NzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIEdsb2JhbG5lIHN0eWxlIGRsYSBjYcWCZWdvIGRva3VtZW50dSBIVE1MICovXG5ib2R5IHtcbiAgICBiYWNrZ3JvdW5kOiAjQzU1MzAwIHVybCguLi9pbWFnZS9rb3ppX2xhc2VrX3Rsby5qcGcpIHJlcGVhdDtcbiAgICAvKiBcbiAgICAgICAtIFVzdGF3aWEgdMWCbyBzdHJvbnk6XG4gICAgICAgICAtIEtvbG9yIGJhem93eSB0xYJhOiAjQzU1MzAwIChjaWVtbnkgb2RjaWXFhCBwb21hcmHFhGN6b3dlZ28sIHphcGV3bmlhasSFY3kgc3DDs2pub8WbxIcgd2l6dWFsbsSFKS5cbiAgICAgICAgIC0gT2JyYXogdMWCYTogLi4vaW1hZ2Uva296aV9sYXNla190bG8uanBnICjFm2NpZcW8a2Egd3pnbMSZZG5hIGRvIHBsaWt1IGdyYWZpY3puZWdvIHXFvHl3YW5lZ28gamFrbyB0xYJvIHN0cm9ueSkuXG4gICAgICAgICAtIFN0eWwgcG93dGFyemFuaWE6IHJlcGVhdCAob2JyYXogYsSZZHppZSBwb3d0YXJ6YW55IHcgb2J1IG9zaWFjaCwgWCBpIFksIHd5cGXFgm5pYWrEhWMgY2HFgsSFIHN0cm9uxJkpLiBcbiAgICAqL1xufVxuXG46cm9vdCB7XG4gICAgLS1rbC1saW5rLWNvbG9yOiAjNGE0YTQwO1xuICAgIC0ta2wtbGluay1ob3Zlci1jb2xvcjogIzRmNGIxZjtcbiAgICAtLWtsLWxpbmstdW5kZXJsaW5lOiByZ2JhKDE4NiwgMTczLCAxMzksIDAuOTUpO1xuICAgIC0ta2wtbGluay11bmRlcmxpbmUtaG92ZXI6IHJnYmEoMTIxLCAxMjEsIDU4LCAwLjkyKTtcbiAgICAtLWtsLWxpbmstaG92ZXItYmc6IHJnYmEoMTg2LCAxNzMsIDEzOSwgMC4xOCk7XG4gICAgLS1rbC1saW5rLWZvY3VzLXJpbmc6IHJnYmEoMTIxLCAxMjEsIDU4LCAwLjIyKTtcbn1cblxuLyogR2xvYmFsbmUgc3R5bGUgZGxhIGVsZW1lbnTDs3cgcGFyYWdyYWZ1IChwKSAqL1xucCB7XG4gICAgZm9udC1mYW1pbHk6IEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7XG4gICAgLypcbiAgICAgICAtIFVzdGF3aWEgcm9kemluxJkgY3pjaW9uZWsgZGxhIHRla3N0dSB3IHBhcmFncmFmYWNoOlxuICAgICAgICAgLSBQaWVyd3N6YSBwcmVmZXJvd2FuYSBjemNpb25rYTogQXJpYWwgKGN6eXRlbG5hLCBwb3B1bGFybmEgc2Fucy1zZXJpZikuXG4gICAgICAgICAtIEFsdGVybmF0eXdhOiBIZWx2ZXRpY2EgKHBvZG9ibmEsIHLDs3duaWXFvCBzYW5zLXNlcmlmKS5cbiAgICAgICAgIC0gT3N0YXRlY3puaWU6IGRvd29sbmEgY3pjaW9ua2Egc2Fucy1zZXJpZiBkb3N0xJlwbmEgbmEgdXJ6xIVkemVuaXUgdcW8eXRrb3duaWthLlxuICAgICovXG4gICAgXG4gICAgY29sb3I6ICM3OTc5M2E7XG4gICAgLypcbiAgICAgICAtIFVzdGF3aWEga29sb3IgdGVrc3R1IHcgcGFyYWdyYWZhY2g6XG4gICAgICAgICAtIEtvbG9yICM3OTc5M2EgKHN0b25vd2FueSBvZGNpZcWEIHppZWxlbmksIHBhc3VqxIVjeSBkbyBtb3R5d3UgbmF0dXJ5IGkgcHJ6eWplbW55IGRsYSBva2EpLlxuICAgICovXG59XG5cbi8qIFN0eWxpemFjamEgZGxhIGVsZW1lbnTDs3cgdGFiZWxpICh0YWJsZSkgKi9cbnRhYmxlIHtcbiAgICBjb2xvcjogIzc5NzkzYTtcbiAgICAvKlxuICAgICAgIC0gVXN0YXdpYSBrb2xvciB0ZWtzdHUgd2V3bsSFdHJ6IHRhYmVsOlxuICAgICAgICAgLSBLb2xvciAjNzk3OTNhIChzdG9ub3dhbnkgb2RjaWXFhCB6aWVsZW5pKSwgc3DDs2pueSB6IGtvbG9yeXN0eWvEhSBwYXJhZ3JhZsOzdyAoYHBgKSBpIG9nw7NsbsSFIGVzdGV0eWvEhSBwcm9qZWt0dS5cbiAgICAgICAgIC0gTmFkYWplIHRhYmVsb20gamVkbm9saXR5IHd5Z2zEhWQgaSB1xYJhdHdpYSBjenl0ZWxub8WbxIcgdGVrc3R1LlxuICAgICovXG59XG5cbi8qIFN0eWxpemFjamEgZGxhIGtsYXN5IC50ZXh0LWp1c3RpZnkgKi9cbi50ZXh0LWp1c3RpZnkge1xuICAgIHRleHQtYWxpZ246IGp1c3RpZnk7XG4gICAgLypcbiAgICAgICAtIFVzdGF3aWEgd3lqdXN0b3dhbmllIHRla3N0dSB3IGJsb2t1OlxuICAgICAgICAgLSBLYcW8ZGEgbGluaWEgdGVrc3R1IGplc3Qgd3lyw7N3bnl3YW5hIHphcsOzd25vIGRvIGxld2VqLCBqYWsgaSBwcmF3ZWoga3Jhd8SZZHppIGtvbnRlbmVyYS5cbiAgICAgICAgIC0gVHdvcnp5IHNjaGx1ZG55IGkgcsOzd25vbWllcm55IHd5Z2zEhWQgdGVrc3R1LlxuICAgICovXG5cbiAgICBsaW5lLWhlaWdodDogMjdweDtcbiAgICAvKlxuICAgICAgIC0gVXN0YXdpYSB3eXNva2/Fm8SHIGxpbmlpIG5hIDI3IHBpa3NlbGk6XG4gICAgICAgICAtIFBvcHJhd2lhIGN6eXRlbG5vxZvEhyBwb3ByemV6IGRvZGFuaWUgb2Rwb3dpZWRuaWVnbyBvZHN0xJlwdSBtacSZZHp5IGxpbmlhbWkgdGVrc3R1LlxuICAgICAgICAgLSBJZGVhbG5lIGRsYSBkxYJ1xbxzenljaCBha2FwaXTDs3cgbHViIHRyZcWbY2kgd3ltYWdhasSFY3ljaCB3eXJhxbpuZWdvIG9kZHppZWxlbmlhIHdpZXJzenkuXG4gICAgKi9cbn1cblxuLyogU3R5bGl6YWNqYSBkbGEgZWxlbWVudMOzdyBsaXN0eSB3IGtsYXNpZSAuc29jaWFsICovXG4uc29jaWFsIGxpIHtcbiAgICBwYWRkaW5nLXRvcDogNHB4ICFpbXBvcnRhbnQ7XG4gICAgLypcbiAgICAgICAtIERvZGFqZSBnw7Nybnkgb2RzdMSZcCBvIHdhcnRvxZtjaSA0IHBpa3NlbGkgZG8ga2HFvGRlZ28gZWxlbWVudHUgbGlzdHkgKGA8bGk+YCkgdyBrb250ZW5lcnplIHoga2xhc8SFIGAuc29jaWFsYC5cbiAgICAgICAtIFphc3Rvc293YW5pZSBgIWltcG9ydGFudGA6XG4gICAgICAgICAtIE5hZHBpc3VqZSBpbm5lIHJlZ3XFgnkgQ1NTLCBrdMOzcmUgbW9nxYJ5Ynkgd3DFgnl3YcSHIG5hIHfFgmHFm2Npd2/Fm8SHIGBwYWRkaW5nLXRvcGAuXG4gICAgICAgICAtIFphcGV3bmlhLCDFvGUgdGEgd2FydG/Fm8SHIG9kc3TEmXB1IHphd3N6ZSBixJlkemllIG9ib3dpxIV6eXdhxIcsIG5pZXphbGXFvG5pZSBvZCBpbm55Y2ggc3R5bMOzdy5cblxuICAgICAgIFXFvHljaWUgdGVqIHJlZ3XFgnkgbW/FvGUgYnnEhyBpc3RvdG5lIHcgcHJ6eXBhZGt1LCBnZHkgZWxlbWVudHkgbGlzdHkgdyBgLnNvY2lhbGAgd3ltYWdhasSFIHd5csOzd25hbmlhIGx1YiB3aXp1YWxuZWdvIHJvemR6aWVsZW5pYS5cbiAgICAqL1xufVxuXG4uZ3NjLWNvbnRyb2wtY3NlLCAuZ3NjLWNvbnRyb2wtY3NlLXBsIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmFhZDhiICFpbXBvcnRhbnQ7IC8qIFVzdGF3aWEgdMWCbyBlbGVtZW50w7N3IHd5c3p1a2l3YXJraSBHb29nbGUgQ3VzdG9tIFNlYXJjaCAoYC5nc2MtY29udHJvbC1jc2VgIGkgYC5nc2MtY29udHJvbC1jc2UtcGxgKSBuYSBrb2xvciAjYmFhZDhiIChjaWVwxYJ5IG9kY2llxYQgYmXFvHUpLiAqL1xuICAgIGJvcmRlcjogbm9uZTsgLyogVXN1d2Egd3N6ZWxraWUgb2JyYW1vd2FuaWEgd29rw7PFgiB3eXN6dWtpd2Fya2kgR29vZ2xlIEN1c3RvbSBTZWFyY2guICovXG4gICAgcGFkZGluZzogMHB4ICFpbXBvcnRhbnQ7O1xuICAgIC8qXG4gICAgICAgIC0gYGJhY2tncm91bmQtY29sb3I6ICNiYWFkOGIgIWltcG9ydGFudGA6IFVzdGF3aWEga29sb3IgdMWCYSBuYSBjaWVwxYJ5IG9kY2llxYQgYmXFvHUuIFXFvHljaWUgYCFpbXBvcnRhbnRgIHphcGV3bmlhLCDFvGUgdGVuIGtvbG9yIG5hZHBpc3VqZSBpbm5lIHpkZWZpbmlvd2FuZSBzdHlsZS5cbiAgICAgICAgLSBgYm9yZGVyOiBub25lYDogVXN1d2Egb2JyYW1vd2FuaWEsIGFieSB1enlza2HEhyBzcMOzam55IHd5Z2zEhWQga29tcG9uZW50dSB3IHN0eWx1IHN0cm9ueS5cbiAgICAgICAgLSBgcGFkZGluZzogMHB4YDogVXN1d2EgbWFyZ2luZXN5IFxuICAgICovXG59XG5cbiNjb250ZW50IHtcbiAgICBtYXJnaW4tdG9wOiAtMTdweDsgLyogUHJ6ZXN1d2EgZWxlbWVudCB6IGlkZW50eWZpa2F0b3JlbSBgI2NvbnRlbnRgIDE3IHBpa3NlbGkgZG8gZ8OzcnkuICovXG4gICAgbWluLWhlaWdodDogMzAwcHg7IC8qIFVzdGF3aWEgbWluaW1hbG7EhSB3eXNva2/Fm8SHIGVsZW1lbnR1IG5hIDMwMCBwaWtzZWxpLiAqL1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogVXN0YXdpYSBwb3p5Y2rEmSB3emdsxJlkbsSFLCBhYnkgbW/FvGxpd2UgYnnFgm8gb3NhZHplbmllIGRla29yYWN5am5laiB3YXJzdHd5IGA6OmJlZm9yZWAuICovXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjsgLyogVWtyeXdhIGN6xJnFm8SHIGRla29yYWN5am5laiB3YXJzdHd5LCBrdMOzcmEgd3ljaG9kemnFgmFieSBwb3phIG9ic3phciBnxYLDs3duZWogc2VrY2ppIHRyZcWbY2kuICovXG4gICAgYmFja2dyb3VuZDogI0ZGRkZGRjsgLyogVXN0YXdpYSBiaWHFgmUgdMWCbyBkbGEgZWxlbWVudHUgYCNjb250ZW50YC4gKi9cbiAgICBwYWRkaW5nOiAxNXB4OyAvKiBEb2RhamUgd2V3bsSZdHJ6bnkgb2RzdMSZcCAocGFkZGluZykgMTUgcGlrc2VsaSB6ZSB3c3p5c3RraWNoIHN0cm9uLiAqL1xuICAgIGZvbnQtc2l6ZTogMTJwdDsgLyogVXN0YXdpYSByb3ptaWFyIGN6Y2lvbmtpIGRsYSB0ZWtzdHUgd2V3bsSFdHJ6IGAjY29udGVudGAgbmEgMTIgcHVua3TDs3cuICovXG5cbiAgICAvKlxuICAgICAgICAtIGBtYXJnaW4tdG9wOiAtMTdweGA6IFByemVzdXdhIGVsZW1lbnQgdyBnw7NyxJksIGFieSBza29tcGVuc293YcSHIHByemVzdHJ6ZcWELlxuICAgICAgICAtIGBtaW4taGVpZ2h0OiAzMDBweGA6IFVzdGF3aWEgbWluaW1hbG7EhSB3eXNva2/Fm8SHLCBhYnkgc2VrY2phIGJ5xYJhIHphd3N6ZSB3aWRvY3puYS5cbiAgICAgICAgLSBgYmFja2dyb3VuZDogI0ZGRkZGRmA6IFR3b3J6eSBqYXNuZSB0xYJvIGRsYSBsZXBzemVqIGN6eXRlbG5vxZtjaS5cbiAgICAgICAgLSBgcGFkZGluZzogMTVweGA6IERvZGFqZSBwcnplc3RyemXFhCB3ZXduxJl0cnpuxIUsIHBvcHJhd2lhasSFYyBlc3RldHlrxJkuXG4gICAgICAgIC0gYGZvbnQtc2l6ZTogMTJwdGA6IFVzdGF3aWEgd3lnb2RueSByb3ptaWFyIGN6Y2lvbmtpIGRvIGN6eXRhbmlhLlxuICAgICovXG59XG5cbiNjb250ZW50OjpiZWZvcmUge1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgcG9zaXRpb246IGFic29sdXRlOyAvKiBQb3p3YWxhIHVtaWXFm2NpxIcgZGVrb3JhY3lqbsSFIHdhcnN0d8SZIG5pZXphbGXFvG5pZSBvZCB3xYJhxZtjaXdlaiB0cmXFm2NpLiAqL1xuICAgIHJpZ2h0OiAwOyAvKiBaYWtvdHdpY3phIGVmZWt0IHcgcHJhd3ltIGRvbG55bSByb2d1IHNla2NqaS4gKi9cbiAgICBib3R0b206IDA7IC8qIFpha290d2ljemEgZWZla3QgdyBwcmF3eW0gZG9sbnltIHJvZ3Ugc2VrY2ppLiAqL1xuICAgIHdpZHRoOiA3NjBweDsgLyogT2tyZcWbbGEgc3plcm9rb8WbxIcgbWnEmWtraWVnbyBwcm9taWVuaWEgd3ljaG9kesSFY2VnbyB6IHJvZ3UuICovXG4gICAgaGVpZ2h0OiA0MzBweDsgLyogT2tyZcWbbGEgd3lzb2tvxZvEhyBtacSZa2tpZWdvIHByb21pZW5pYSB3eWNob2R6xIVjZWdvIHogcm9ndS4gKi9cbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsgLyogV3nFgsSFY3phIGludGVyYWtjasSZIHogd2Fyc3R3xIUgZGVrb3JhY3lqbsSFLiAqL1xuICAgIGJhY2tncm91bmQ6XG4gICAgICAgIHJhZGlhbC1ncmFkaWVudChjaXJjbGUgYXQgMTAwJSAxMDAlLCByZ2JhKDE3MiwgMTcyLCAxNzIsIDAuMjQpIDAgMTMlLCByZ2JhKDE3MiwgMTcyLCAxNzIsIDAuMTQpIDI0JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSA1OCUpLFxuICAgICAgICBsaW5lYXItZ3JhZGllbnQoLTI0ZGVnLCByZ2JhKDE4OCwgMTg4LCAxODgsIDAuMjQpIDAlLCByZ2JhKDE4OCwgMTg4LCAxODgsIDAuMTMpIDE1JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSA0MiUpLFxuICAgICAgICBsaW5lYXItZ3JhZGllbnQoLTE0ZGVnLCByZ2JhKDIwOCwgMjA4LCAyMDgsIDAuMTgpIDAlLCByZ2JhKDIwOCwgMjA4LCAyMDgsIDAuMDgpIDE4JSwgcmdiYSgyNTUsIDI1NSwgMjU1LCAwKSA0NiUpO1xuICAgIHotaW5kZXg6IDA7IC8qIFV0cnp5bXVqZSBkZWtvcmFjasSZIHBvZCB0cmXFm2NpxIUgc2VrY2ppLiAqL1xuICAgIC8qXG4gICAgICAgIC0gWsWCb8W8ZW5pZSBgcmFkaWFsLWdyYWRpZW50YCBpIGR3w7NjaCBgbGluZWFyLWdyYWRpZW50YCBkYWplIGVmZWt0IHN6ZXJva2llZ28sXG4gICAgICAgICAgbWnEmWtrbyByb3pjaG9kesSFY2VnbyBzacSZIHByb21pZW5pYSB3eWNob2R6xIVjZWdvIHogcHJhd2VnbyBkb2xuZWdvIHJvZ3UuXG4gICAgICAgIC0gS29sb3J5IHPEhSBzemFyZSBpIHDDs8WCcHJ6ZXpyb2N6eXN0ZSwgYWJ5IGRvZGHEhyBnxYLEmWJpIGJleiB6bWlhbnkgY2hhcmFrdGVydSBzdHJvbnkuXG4gICAgICAgIC0gQ2HFgm/Fm8SHIHN6eWJrbyB6YW5pa2EgZG8gcGXFgm5laiBiaWVsaSwgd2nEmWMgZGVrb3JhY2phIG5pZSBrb25rdXJ1amUgeiB0cmXFm2NpxIUuXG4gICAgKi9cbn1cblxuI2NvbnRlbnQgPiAqIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IC8qIFBvendhbGEga2HFvGRlbXUgYmV6cG/Fm3JlZG5pZW11IGR6aWVja3Ugc2VrY2ppIHBvem9zdGHEhyBwb25hZCBkZWtvcmFjeWpueW0gdMWCZW0uICovXG4gICAgei1pbmRleDogMTsgLyogVXRyenltdWplIHRyZcWbxIcgbmFkIHdhcnN0d8SFIGAjY29udGVudDo6YmVmb3JlYC4gKi9cbn1cblxuLmdvb2dsZS1yZXZpZXdzLXNlY3Rpb24gLmdvb2dsZS1yZXZpZXctY2FyZCxcbi5nb29nbGUtcmV2aWV3cy1zZWN0aW9uIC5nb29nbGUtcmV2aWV3LWNhcmQgLmNhcmQtYm9keSB7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQgIWltcG9ydGFudDsgLyogVXN1d2EgYmlhxYJlIHTFgm8geiBrYXJ0IG9waW5paSBHb29nbGUsIGFieSBuaWUgb2RjaW5hxYJ5IHNpxJkgb2QgZ8WCw7N3bmVnbyB0xYJhIHNla2NqaS4gKi9cbn1cblxuLmdvb2dsZS1yZXZpZXdzLXNlY3Rpb24ge1xuICAgIGNvbG9yOiAjMDAwOyAvKiBVdHJ6eW11amUgY3p5dGVsbnksIGNpZW1ueSBrb2xvciB0ZWtzdHUgdyBzZWtjamkgb3BpbmlpIEdvb2dsZS4gKi9cbn1cblxuLmdvb2dsZS1yZXZpZXdzLXNlY3Rpb24gLmdvb2dsZS1yZXZpZXctY2FyZCB7XG4gICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OyAvKiBXecWCxIVjemEgY2llxYQga2FydCBvcGluaWkgR29vZ2xlLCBhYnkgc2VrY2phIGJ5xYJhIGzFvGVqc3phIHdpenVhbG5pZS4gKi9cbn1cblxuLmdvb2dsZS1yZXZpZXctY29tbWVudC5pcy1jb2xsYXBzZWQge1xuICAgIGRpc3BsYXk6IC13ZWJraXQtYm94OyAvKiBPZ3JhbmljemEgd2llbG9saW5pb3d5IHRla3N0IGtvbWVudGFyemEgZG8gdXN0YWxvbmVqIGxpY3pieSBsaW5paS4gKi9cbiAgICAtd2Via2l0LWJveC1vcmllbnQ6IHZlcnRpY2FsOyAvKiBVc3Rhd2lhIHBpb25vd3kga2llcnVuZWsgdWvFgmFkdSBsaW5paSwgd3ltYWdhbnkgcHJ6ZXogbWVjaGFuaXptIGBsaW5lLWNsYW1wYC4gKi9cbiAgICAtd2Via2l0LWxpbmUtY2xhbXA6IDc7IC8qIFByenljaW5hIGtvbWVudGFyeiBkbyA3IHdpZG9jem55Y2ggbGluaWksIHphbmltIHXFvHl0a293bmlrIHJvendpbmllIHBlxYJuxIUgdHJlxZvEhy4gKi9cbiAgICBvdmVyZmxvdzogaGlkZGVuOyAvKiBVa3J5d2EgbmFkbWlhciB0ZWtzdHUgd3lrcmFjemFqxIVjeSBwb3phIHVzdGFsb255IGxpbWl0IGxpbmlpLiAqL1xuICAgIC8qXG4gICAgICAgIC0gYGRpc3BsYXk6IC13ZWJraXQtYm94YDogQWt0eXd1amUgd2llbG9saW5pb3dlIHByenljaW5hbmllIHRla3N0dSB3IHByemVnbMSFZGFya2FjaCBvcGFydHljaCBvIFdlYktpdC9CbGluay5cbiAgICAgICAgLSBgLXdlYmtpdC1ib3gtb3JpZW50YDogT2tyZcWbbGEsIMW8ZSB0ZWtzdCBtYSB1a8WCYWRhxIcgc2nEmSBwaW9ub3dvLCBsaW5pYSBwb2QgbGluacSFLlxuICAgICAgICAtIGAtd2Via2l0LWxpbmUtY2xhbXBgOiBVc3RhbGEgbWFrc3ltYWxuxIUgbGljemLEmSBsaW5paSB3aWRvY3pueWNoIHcgc3RhbmllIHp3aW5pxJl0eW0uXG4gICAgICAgIC0gYG92ZXJmbG93OiBoaWRkZW5gOiBaYXBvYmllZ2Egd3nFm3dpZXRsYW5pdSBkYWxzemVqIGN6xJnFm2NpIGtvbWVudGFyemEgcG96YSBvYnN6YXJlbSBlbGVtZW50dS5cbiAgICAqL1xufVxuXG4uZ29vZ2xlLXJldmlldy10b2dnbGUge1xuICAgIHBhZGRpbmc6IDAgIWltcG9ydGFudDsgLyogVXRyenltdWplIGxpbmtvd3kgd3lnbMSFZCBwcnp5Y2lza3UgYmV6IGRvZGF0a293ZWdvIG1hcmdpbmVzdSB3ZXduxJl0cnpuZWdvIEJvb3RzdHJhcGEuICovXG4gICAgbWFyZ2luLXRvcDogMC4zNXJlbTsgLyogRG9kYWplIG5pZXdpZWxraSBvZHN0xJlwIG9kIHRyZcWbY2kgb3BpbmlpLCBhYnkgcHJ6eWNpc2sgbmllIHNrbGVqYcWCIHNpxJkgeiB0ZWtzdGVtLiAqL1xuICAgIGJvcmRlcjogMDsgLyogVXN1d2Egc3RhbmRhcmRvd2Ugb2JyYW1vd2FuaWUgcHJ6eWNpc2t1LCBkemnEmWtpIGN6ZW11IHd5Z2zEhWRhIGphayB6d3lrxYJ5IGxpbmsuICovXG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7IC8qIEVsaW1pbnVqZSB0xYJvLCBwb3pvc3Rhd2lhasSFYyBsZWtraSwgdGVrc3Rvd3kgY2hhcmFrdGVyIGVsZW1lbnR1LiAqL1xuICAgIGNvbG9yOiB2YXIoLS1rbC1saW5rLWNvbG9yKSAhaW1wb3J0YW50OyAvKiBVamVkbm9saWNhIGtvbG9yIHogaW5ueW1pIGxpbmthbWkgdHJlxZtjaW93eW1pIHcgc2Vyd2lzaWUuICovXG4gICAgZm9udC1zaXplOiAwLjk1cmVtOyAvKiBEZWxpa2F0bmllIHptbmllanN6YSByb3ptaWFyIHRla3N0dSwgYWJ5IG5pZSBkb21pbm93YcWCIG5hZCBvcGluacSFLiAqL1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7IC8qIFd5csOzxbxuaWEgbGluayBha2NqaSBuaWVjbyBtb2NuaWVqIG5pxbwgend5a8WCeSB0ZWtzdC4gKi9cbiAgICB0ZXh0LWRlY29yYXRpb24tbGluZTogdW5kZXJsaW5lOyAvKiBaYWNob3d1amUga2xhc3ljem55IHd5Z2zEhWQgbGlua3UgcG9ka3JlxZtsb25lZ28uICovXG4gICAgdGV4dC1kZWNvcmF0aW9uLWNvbG9yOiB2YXIoLS1rbC1saW5rLXVuZGVybGluZSk7IC8qIERvcGFzb3d1amUga29sb3IgcG9ka3JlxZtsZW5pYSBkbyBzeXN0ZW11IGxpbmvDs3cgc3Ryb255LiAqL1xuICAgIHRleHQtZGVjb3JhdGlvbi10aGlja25lc3M6IDEuNXB4OyAvKiBVc3Rhd2lhIGJhcmR6aWVqIGN6eXRlbG5lIHBvZGtyZcWbbGVuaWUgbmnFvCBkb215xZtsbmUuICovXG4gICAgdGV4dC11bmRlcmxpbmUtb2Zmc2V0OiAwLjE4ZW07IC8qIE9kc3V3YSBsaW5pxJkgcG9ka3JlxZtsZW5pYSBvZCBsaXRlciBkbGEgbGVwc3plaiBjenl0ZWxub8WbY2kuICovXG4gICAgYm9yZGVyLXJhZGl1czogMC4zNXJlbTsgLyogUG96d2FsYSBlc3RldHljem5pZSBwb2themHEhyBlZmVrdCBmb2N1cy9ob3ZlciB3b2vDs8WCIHByenljaXNrdS4gKi9cbiAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgMC4ycyBlYXNlLCB0ZXh0LWRlY29yYXRpb24tY29sb3IgMC4ycyBlYXNlLCBib3gtc2hhZG93IDAuMnMgZWFzZTsgLyogV3lnxYJhZHphIHByemVqxZtjaWEgc3RhbsOzdyBpbnRlcmFrdHl3bnljaC4gKi9cbiAgICAvKlxuICAgICAgICAtIEJsb2sgc3R5bGl6dWplIHByenljaXNrIGpha28gbGVra2kgbGluayBha2NqaSB6Z29kbnkgeiByZXN6dMSFIGxpbmvDs3cgbmEgc3Ryb25pZS5cbiAgICAgICAgLSBEemnEmWtpIHRlbXUgYFBva2HFvCB3acSZY2VqYCBpIGBQb2thxbwgbW5pZWpgIG5pZSB3eWdsxIVkYWrEhSBqYWsga2xhc3ljem55IHByenljaXNrIGZvcm11bGFyemEuXG4gICAgICAgIC0gWmFzdG9zb3dhbmUga29sb3J5IGkgc3RhbnkgaW50ZXJha3R5d25lIGJhenVqxIUgbmEgem1pZW5ueWNoIHd5a29yenlzdHl3YW55Y2gganXFvCB3IGlubnljaCBzZWtjamFjaCBzZXJ3aXN1LlxuICAgICovXG59XG5cbi5nb29nbGUtcmV2aWV3LXRvZ2dsZTpob3Zlcixcbi5nb29nbGUtcmV2aWV3LXRvZ2dsZTpmb2N1cy12aXNpYmxlIHtcbiAgICBjb2xvcjogdmFyKC0ta2wtbGluay1ob3Zlci1jb2xvcikgIWltcG9ydGFudDsgLyogWm1pZW5pYSBrb2xvciB0ZWtzdHUgdyBzdGFuaWUgaG92ZXIvZm9jdXMgbmEgd2FyaWFudCBha3R5d255LiAqL1xuICAgIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWtsLWxpbmstaG92ZXItYmcpOyAvKiBEb2RhamUgc3VidGVsbmUgdMWCbywga3TDs3JlIHd6bWFjbmlhIHN5Z25hxYIgaW50ZXJha2NqaS4gKi9cbiAgICB0ZXh0LWRlY29yYXRpb24tY29sb3I6IHZhcigtLWtsLWxpbmstdW5kZXJsaW5lLWhvdmVyKTsgLyogQWt0dWFsaXp1amUga29sb3IgcG9ka3JlxZtsZW5pYSB6Z29kbmllIHplIHN0YW5lbSBha3R5d255bS4gKi9cbiAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggdmFyKC0ta2wtbGluay1mb2N1cy1yaW5nKTsgLyogV3nFm3dpZXRsYSBkZWxpa2F0bnkgcmluZyBmb2N1cyBwb3ByYXdpYWrEhWN5IGRvc3TEmXBub8WbxIcgeiBrbGF3aWF0dXJ5LiAqL1xuICAgIG91dGxpbmU6IG5vbmU7IC8qIFVzdXdhIGRvbXnFm2xueSBvdXRsaW5lIHByemVnbMSFZGFya2ksIGJvIHphc3TEmXB1amUgZ28gd8WCYXNueSBmb2N1cyByaW5nLiAqL1xuICAgIC8qXG4gICAgICAgIC0gUmVndcWCYSBvZHBvd2lhZGEgemEgc3DDs2pueSBzdGFuIGhvdmVyL2ZvY3VzIHpnb2RueSB6IHJlc3p0xIUgbGlua8OzdyB0cmXFm2Npb3d5Y2guXG4gICAgICAgIC0gU3pjemVnw7NsbmllIHdhxbxueSBqZXN0IGBmb2N1cy12aXNpYmxlYCwgYWJ5IGVsZW1lbnQgYnnFgiBjenl0ZWxueSB0YWvFvGUgcHJ6eSBuYXdpZ2Fjamkga2xhd2lhdHVyxIUuXG4gICAgKi9cbn1cblxuXG5AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkge1xuICAgICNjb250ZW50IHtcbiAgICAgICAgbWFyZ2luLXRvcDogLTM0cHg7XG4gICAgfVxuICAgIC8qXG4gICAgICAgIC0gVGEgcmVndcWCYSBDU1MgamVzdCBha3R5d25hIHR5bGtvIG5hIHVyesSFZHplbmlhY2gsIGt0w7NyeWNoIHN6ZXJva2/Fm8SHIGVrcmFudSB3eW5vc2kgNzY3cHggbHViIG1uaWVqIChucC4gdGVsZWZvbnkga29tw7Nya293ZSkuXG4gICAgICAgIC0gVXN0YXdpYSBtYXJnaW5lcyBnw7NybnkgZWxlbWVudHUgbyBpZCBgI2NvbnRlbnRgIG5hIC0zNHB4LCBjbyBwcnplc3V3YSB0ZW4gZWxlbWVudCB3IGfDs3LEmSBuYSBtYcWCeWNoIGVrcmFuYWNoLlxuICAgICAgICAtIFRlZ28gdHlwdSB6bWlhbmEgbW/FvGUgcG9wcmF3acSHIHVrxYJhZCBzdHJvbnkgbmEgdXJ6xIVkemVuaWFjaCBtb2JpbG55Y2gsIGRvc3Rvc293dWrEhWMgcHJ6ZXN0cnplxYQgZG8gc3BlY3lmaWN6bnljaCByb3pkemllbGN6b8WbY2kuXG4gICAgICAgIC0gRHppxJlraSB0ZW11IHphd2FydG/Fm8SHIHN0cm9ueSBsZXBpZWogZG9wYXNvd3VqZSBzacSZIGRvIHLDs8W8bnljaCByb3ptaWFyw7N3IGVrcmFuw7N3LlxuICAgICovXG59XG5cbi8qIEtvbnRlbmVyIG1lbnUgYm9jem5lZ28gKHNpZGViYXIpICovXG4jc2lkZWJhciB7XG4gICAgcGFkZGluZy1yaWdodDogMjAlO1xuICAgIC8qXG4gICAgICAgIC0gVXN0YXdpYSBwcmF3ZSB3ecWbY2nDs8WCa293YW5pZSAocGFkZGluZykgZWxlbWVudHUgbyBpZCBgI3NpZGViYXJgIG5hIDIwJS5cbiAgICAgICAgLSBTcHJhd2lhIHRvLCDFvGUgemF3YXJ0b8WbxIcgbWVudSBib2N6bmVnbyBqZXN0IG9kc3VuacSZdGEgb2QgcHJhd2VqIGtyYXfEmWR6aSBrb250ZW5lcmEgbyAyMCUgc3plcm9rb8WbY2kuXG4gICAgICAgIC0gTW/FvGUgdG8gYnnEhyBwcnp5ZGF0bmUsIGdkeSBjaGNlbXkgdXp5c2thxIcgcHJ6ZXN0cnplxYQgd29rw7PFgiBtZW51IGx1YiBqZcWbbGkgY2hjZW15LCBhYnkgbWVudSBuaWUgcHJ6eWxlZ2HFgm8gYmV6cG/Fm3JlZG5pbyBkbyBwcmF3ZWogc3Ryb255IGVrcmFudS5cbiAgICAqL1xufVxuXG4vKiBOYWfFgsOzd2VrIGgyIHcgbWVudSBib2N6bnltIChzaWRlYmFyKSAqL1xuI3NpZGViYXIgaDIge1xuICAgIGhlaWdodDogNDBweDtcbiAgICAvKlxuICAgICAgICAtIFVzdGF3aWEgd3lzb2tvxZvEhyBuYWfFgsOzd2thIChgPGgyPmApIHcgbWVudSBib2N6bnltIG5hIDQwcHguXG4gICAgICAgIC0gWmFwZXduaWEgamVkbm9saXTEhSB3eXNva2/Fm8SHIG5hZ8WCw7N3a2EsIGNvIHBvbWFnYSB3IGVzdGV0eWN6bnltIHd5xZt3aWV0bGFuaXUgZWxlbWVudHUuXG4gICAgKi9cblxuICAgIGJhY2tncm91bmQ6IHVybCguLi9pbWFnZS9rb3ppX2xhc2VrX2J1dHRvbl8yLnBuZykgbm8tcmVwZWF0IHJpZ2h0IHRvcDtcbiAgICAvKlxuICAgICAgICAtIFVzdGF3aWEgdMWCbyBuYWfFgsOzd2thIG5hIG9icmF6ZWsgKGBrb3ppX2xhc2VrX2J1dHRvbl8yLnBuZ2ApLlxuICAgICAgICAtIE9icmF6ZWsgamVzdCB3ecWbd2lldGxhbnkgbmEgcHJhd2VqIGfDs3JuZWoga3Jhd8SZZHppIG5hZ8WCw7N3a2EgKGByaWdodCB0b3BgKSwgY28gemFwZXduaWEgb2Rwb3dpZWRuacSFIGVzdGV0eWvEmSBpIHByenljacSFZ2EgdXdhZ8SZLlxuICAgICAgICAtIFXFvHljaWUgYG5vLXJlcGVhdGAgb3puYWN6YSwgxbxlIG9icmF6ZWsgbmllIGLEmWR6aWUgcG93dGFyemFueSwgYSBqZWR5bmllIHd5xZt3aWV0bG9ueSByYXouXG4gICAgKi9cblxuICAgIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gICAgLypcbiAgICAgICAgLSBVc3Rhd2lhIGRvbG55IG1hcmdpbmVzIG5hZ8WCw7N3a2EgbmEgMTBweC5cbiAgICAgICAgLSBaYXBld25pYSBwcnplc3RyemXFhCBtacSZZHp5IG5hZ8WCw7N3a2llbSBhIGVsZW1lbnRhbWkgem5hamR1asSFY3ltaSBzacSZIHBvbmnFvGVqLCBwb3ByYXdpYWrEhWMgY3p5dGVsbm/Fm8SHLlxuICAgICovXG5cbiAgICBtYXJnaW4tbGVmdDogMHB4O1xuICAgIC8qXG4gICAgICAgIC0gVXN0YXdpYSBsZXd5IG1hcmdpbmVzIG5hZ8WCw7N3a2EgbmEgMHB4LCBhYnkgbmFnxYLDs3dlayBuaWUgbWlhxYIgZG9kYXRrb3dlaiBwcnplc3RyemVuaSB6IGxld2VqIHN0cm9ueS5cbiAgICAgICAgLSBQb3p3YWxhIHRvIG5hIHByZWN5enlqbmUgZG9wYXNvd2FuaWUgbmFnxYLDs3drYSBkbyBwb3pvc3RhxYJ5Y2ggZWxlbWVudMOzdyB3IG1lbnUuXG4gICAgKi9cblxuICAgIG1hcmdpbi1yaWdodDogMjUlO1xuICAgIC8qXG4gICAgICAgIC0gVXN0YXdpYSBwcmF3eSBtYXJnaW5lcyBuYWfFgsOzd2thIG5hIDI1JS5cbiAgICAgICAgLSBad2nEmWtzemEgcHJ6ZXN0cnplxYQgcG8gcHJhd2VqIHN0cm9uaWUgbmFnxYLDs3drYSwgYWJ5IGRvcGFzb3dhxIcgZ28gZG8gc3plcm9rb8WbY2kgbWVudS5cbiAgICAgICAgLSBNb8W8ZSB0byB3cMWCeXdhxIcgbmEgcHJvcG9yY2plIHByemVzdHJ6ZW5pIHcgY2HFgnltIHVrxYJhZHppZSBtZW51LlxuICAgICovXG5cbiAgICBwYWRkaW5nOiAwcHggMHB4IDIwcHggMTBweDtcbiAgICAvKlxuICAgICAgICAtIFVzdGF3aWEgd3nFm2Npw7PFgmtvd2FuaWUgKHBhZGRpbmcpIG5hZ8WCw7N3a2E6IDBweCB6IGfDs3J5LCAwcHggeiBwcmF3ZWogc3Ryb255LCAyMHB4IHogZG/FgnUgaSAxMHB4IHogbGV3ZWogc3Ryb255LlxuICAgICAgICAtIFp3acSZa3N6YSBwcnplc3RyemXFhCBuYSBkb2xlIG5hZ8WCw7N3a2EsIGNvIG1vxbxlIHXFgmF0d2lhxIcgb2RkemllbGVuaWUgdGVrc3R1IG9kIGlubnljaCBlbGVtZW50w7N3LlxuICAgICovXG5cbiAgICBsaW5lLWhlaWdodDogNDBweDtcbiAgICAvKlxuICAgICAgICAtIFVzdGF3aWEgd3lzb2tvxZvEhyBsaW5paSBuYSA0MHB4LlxuICAgICAgICAtIFphcGV3bmlhLCDFvGUgdGVrc3QgdyBuYWfFgsOzd2t1IGLEmWR6aWUgd3nFm3JvZGtvd2FueSB3IHBpb25pZSwgZG9wYXNvd3VqxIVjIGdvIGRvIHd5c29rb8WbY2kgbmFnxYLDs3drYS5cbiAgICAqL1xuXG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICAvKlxuICAgICAgICAtIEtvbndlcnR1amUgd3N6eXN0a2llIGxpdGVyeSB3IHRla8WbY2llIG5hZ8WCw7N3a2EgbmEgd2llbGtpZSBsaXRlcnkuXG4gICAgICAgIC0gUG9wcmF3aWEgY3p5dGVsbm/Fm8SHIG5hZ8WCw7N3a2Egb3JheiBuYWRhamUgbXUgYmFyZHppZWogd3lyYXppc3R5IGkgZm9ybWFsbnkgd3lnbMSFZC5cbiAgICAqL1xuXG4gICAgZm9udC1zaXplOiAxNXB4O1xuICAgIC8qXG4gICAgICAgIC0gVXN0YXdpYSByb3ptaWFyIGN6Y2lvbmtpIG5hIDE1cHguXG4gICAgICAgIC0gWmFwZXduaWEgb2Rwb3dpZWRuacSFIHdpZWxrb8WbxIcgdGVrc3R1LCBhYnkgYnnFgiBvbiBjenl0ZWxueSBpIGVzdGV0eWN6bnkgdyBuYWfFgsOzd2t1LlxuICAgICovXG5cbiAgICBjb2xvcjogI0ZGRkZGRjtcbiAgICAvKlxuICAgICAgICAtIFVzdGF3aWEga29sb3IgdGVrc3R1IG5hZ8WCw7N3a2EgbmEgYmlhxYJ5ICgjRkZGRkZGKS5cbiAgICAgICAgLSBaYXBld25pYSBkb2JyeSBrb250cmFzdCB6IGNpZW1ueW0gdMWCZW0sIGNvIHBvcHJhd2lhIHdpZG9jem5vxZvEhyBpIGN6eXRlbG5vxZvEhyB0ZWtzdHUuXG4gICAgKi9cbn1cblxuLyogUGFkZGluZyBkb2xueSBkbGEgbmFnxYLDs3drw7N3IDxoMj4gKi9cbmgyIHtcbiAgICBwYWRkaW5nLWJvdHRvbTogMTNweDtcbiAgICAvKlxuICAgICAgICAtIFVzdGF3aWEgZG9sbnkgcGFkZGluZyAod3nFm2Npw7PFgmtvd2FuaWUpIG5hZ8WCw7N3a2EgYDxoMj5gIG5hIDEzcHguXG4gICAgICAgIC0gWmFwZXduaWEgcHJ6ZXN0cnplxYQgcG9uacW8ZWogbmFnxYLDs3drYSwgY28gcG9tYWdhIHcgb2RkemllbGVuaXUgdGVrc3R1IG9kIGVsZW1lbnTDs3cgem5hamR1asSFY3ljaCBzacSZIHBvbmnFvGVqLlxuICAgICAgICAtIE1vxbxlIHBvcHJhd2nEhyBlc3RldHlrxJkgc3Ryb255LCB0d29yesSFYyBvZHBvd2llZG5pxIUgb2RsZWfFgm/Fm8SHIG1pxJlkenkgbmFnxYLDs3draWVtIGEgaW5ueW1pIGVsZW1lbnRhbWksIG5wLiB0ZWtzdGVtIGx1YiBvYnJhemthbWkuXG4gICAgKi9cbn1cblxuLyogTmFnxYLDs3dlayBoMSB6IGtsYXPEhSAuaGVhZGVyICovXG5oMS5oZWFkZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgLyogUG96d2FsYSBvc2FkemnEhyBkZWtvcmFjeWpuxIUgbGluacSZIHBvZCBuYWfFgsOzd2tpZW0uICovXG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrOyAvKiBPZ3JhbmljemEgc3plcm9rb8WbxIcgZGVrb3JhY2ppIGRvIHN6ZXJva2/Fm2NpIHNhbWVnbyBuYWfFgsOzd2thLiAqL1xuICAgIHBhZGRpbmctYm90dG9tOiAxOHB4O1xuICAgIC8qXG4gICAgICAgIC0gVXN0YXdpYSBkb2xueSBwYWRkaW5nICh3ecWbY2nDs8WCa293YW5pZSkgbmFnxYLDs3drYSBgPGgxPmAgeiBrbGFzxIUgYC5oZWFkZXJgIG5hIDEzcHguXG4gICAgICAgIC0gRHppxJlraSB0ZW11IG1pxJlkenkgbmFnxYLDs3draWVtIGEgbmFzdMSZcHVqxIVjeW1pIHBvIG5pbSBlbGVtZW50YW1pIChucC4gdGVrc3RlbSBsdWIgb2JyYXprYW1pKSB6b3N0YWplIHN0d29yem9uYSBwcnplc3RyemXFhC5cbiAgICAqL1xuXG4gICAgZm9udC1zaXplOiAxNTAlO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDJlbTtcbiAgICBjb2xvcjogdmFyKC0tYnMtaGVhZGluZy1jb2xvcik7IC8qIEZhbGxiYWNrIGtvbG9ydSBkbGEgcHJ6ZWdsxIVkYXJlayBiZXogd3NwYXJjaWEgZ3JhZGllbnR1IG5hIHRla8WbY2llLiAqL1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICMzYTNhM2EgMCUsICMxZjFmMWYgNjIlLCAjMDAwMDAwIDEwMCUpO1xuICAgIC13ZWJraXQtYmFja2dyb3VuZC1jbGlwOiB0ZXh0O1xuICAgIGJhY2tncm91bmQtY2xpcDogdGV4dDtcbiAgICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgdGV4dC1zaGFkb3c6IDAgMXB4IDFweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTgpO1xuICAgIC8qXG4gICAgICAgIC0gWndpxJlrc3phIHJvem1pYXIgY3pjaW9ua2kgbmFnxYLDs3drYSBgPGgxPmAgZG8gMTUwJSBkb215xZtsbmVnbyByb3ptaWFydSBjemNpb25raS5cbiAgICAgICAgLSBaYXBld25pYSB3acSZa3N6xIUgd2lkb2N6bm/Fm8SHIG5hZ8WCw7N3a2EsIHNwcmF3aWFqxIVjLCDFvGUgamVzdCBiYXJkemllaiB3eXLDs8W8bmlhasSFY3kgc2nEmSBuYSBzdHJvbmllLlxuICAgICAgICAtIE1vxbxlIGJ5xIcgdcW8eXRlY3puZSwgZ2R5IG5hZ8WCw7N3ZWsgbWEgcGXFgm5pxIcgd2HFvG7EhSByb2zEmSB3IHRyZcWbY2ksIHByenljacSFZ2FqxIVjIHV3YWfEmSBvZHdpZWR6YWrEhWN5Y2guXG4gICAgKi9cbn1cblxuaDEuaGVhZGVyOjphZnRlciB7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogMDtcbiAgICBib3R0b206IDRweDtcbiAgICB3aWR0aDogbWluKDE0MHB4LCA2OCUpO1xuICAgIGhlaWdodDogMnB4O1xuICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgcmdiYSgxODYsIDE3MywgMTM5LCAwLjk1KSAwJSwgcmdiYSgxODYsIDE3MywgMTM5LCAwLjI4KSAxMDAlKTtcbiAgICAvKlxuICAgICAgICAtIEtyw7N0a2EgbGluaWEgcG9kIG5hZ8WCw7N3a2llbSBwb3J6xIVka3VqZSB3aXp1YWxuaWUgc2VrY2rEmSBiZXogY2nEmcW8a2llZ28gcG9ka3JlxZtsZW5pYS5cbiAgICAgICAgLSBHcmFkaWVudCBwb3ppb215IHNwcmF3aWEsIMW8ZSBkZWtvcmFjamEgbWnEmWtrbyB6YW5pa2EgemFtaWFzdCBrb8WEY3p5xIcgc2nEmSBvc3Ryby5cbiAgICAgICAgLSBTemVyb2tvxZvEhyBvZ3Jhbmljem9uYSBkbyBjesSZxZtjaSBuYWfFgsOzd2thIHV0cnp5bXVqZSBsZWtraSwgZWxlZ2FuY2tpIGNoYXJha3Rlci5cbiAgICAqL1xufVxuXG4vKiBTZWtjamEgLnNib3gxIHcgbWVudSBib2N6bnltICovXG4jc2lkZWJhci5zYm94MSB7XG4gICAgbWFyZ2luLWJvdHRvbTogNTBweDtcbiAgICAvKlxuICAgICAgICAtIFVzdGF3aWEgZG9sbnkgbWFyZ2luZXMgKG9kc3TEmXApIGRsYSBlbGVtZW50dSBgI3NpZGViYXJgIHogZG9kYXRrb3fEhSBrbGFzxIUgYC5zYm94MWAgbmEgNTBweC5cbiAgICAgICAgLSBEemnEmWtpIHRlbXUsIHBvIGVsZW1lbmNpZSBib2N6bmVnbyBtZW51IChzaWRlYmFyKSwgcG9qYXdpYSBzacSZIHByemVzdHJ6ZcWELCBrdMOzcmEgb2RkemllbGEgZ28gb2QgaW5ueWNoIGVsZW1lbnTDs3cgcG9uacW8ZWouXG4gICAgICAgIC0gSmVzdCB0byBzemN6ZWfDs2xuaWUgdcW8eXRlY3puZSwgZ2R5IGNoY2VteSwgYWJ5IG1lbnUgbmllIGJ5xYJvIHpieXQgY2lhc25vIHVtaWVqc2Nvd2lvbmUgdyBzdG9zdW5rdSBkbyBpbm55Y2ggc2VrY2ppIG5hIHN0cm9uaWUuXG4gICAgKi9cbn1cblxuLyogU2VrY2phIC5zYm94MiB3IG1lbnUgYm9jem55bSAqL1xuI3NpZGViYXIgLnNib3gyIHtcbiAgICBtYXJnaW4tYm90dG9tOiA1MHB4O1xuICAgIC8qXG4gICAgICAgIC0gVXN0YXdpYSBkb2xueSBtYXJnaW5lcyAob2RzdMSZcCkgZGxhIGVsZW1lbnR1IGAjc2lkZWJhcmAgeiBkb2RhdGtvd8SFIGtsYXPEhSBgLnNib3gyYCBuYSA1MHB4LlxuICAgICAgICAtIFRvIHBvd29kdWplLCDFvGUgc2VrY2phIGBzYm94MmAgdyBtZW51IGJvY3pueW0gbWEgcHJ6ZXN0cnplxYQgcG9uacW8ZWosIG9kZHppZWxhasSFYyBqxIUgb2QgaW5ueWNoIGVsZW1lbnTDs3cgbmEgc3Ryb25pZS5cbiAgICAgICAgLSBKZXN0IHRvIHByenlkYXRuZSwgZ2R5IGNoY2VteSB6d2nEmWtzennEhyBvZHN0xJlwIHBvbWnEmWR6eSByw7PFvG55bWkgc2VrY2phbWkgdyBvYnLEmWJpZSBzaWRlYmFydSwgYWJ5IHBvcHJhd2nEhyBlc3RldHlrxJkgaSBjenl0ZWxub8WbxIcuXG4gICAgKi9cbn1cblxuLyogTGlzdGEgbyBrbGFzaWUgLnN0eWxlMSAqL1xudWwuc3R5bGUxIHtcbiAgICBtYXJnaW46IDEwcHg7IC8qIFVzdGF3aWEgbWFyZ2luZXMgKG9kc3TEmXApIHdva8OzxYIgbGlzdHkgbmEgMTBweC4gKi9cbiAgICBwYWRkaW5nOiAwcHg7IC8qIFVzdXdhIHdzemVsa2llIHdjacSZY2lhIChwYWRkaW5nKSB3ZXduxJl0cnpuZSBsaXN0eS4gKi9cbiAgICBsaXN0LXN0eWxlOiBub25lOyAvKiBVc3V3YSBkb215xZtsbnkgc3R5bCBsaXN0eSAobnAuIHB1bmt0eSB3IHByenlwYWRrdSBsaXN0eSBuaWV1cG9yesSFZGtvd2FuZWopLiAqL1xuICAgIGZvbnQtc2l6ZTogMTJwdDsgLyogVXN0YXdpYSByb3ptaWFyIGN6Y2lvbmtpIGRsYSB0ZWtzdHUgdyBlbGVtZW50YWNoIGxpc3R5IG5hIDEyIHB1bmt0w7N3LiAqL1xuXG4gICAgLypcbiAgICAgICAgLSBgbWFyZ2luOiAxMHB4YDogVXN0YXdpYSBtYXJnaW5lcyB3b2vDs8WCIGxpc3R5LCB6YXBld25pYWrEhWMgcHJ6ZXN0cnplxYQgbWnEmWR6eSBsaXN0xIUgYSBpbm55bWkgZWxlbWVudGFtaSBuYSBzdHJvbmllLlxuICAgICAgICAtIGBwYWRkaW5nOiAwcHhgOiBVc3V3YSB3Y2nEmWNpYSB3ZXduxJl0cnpuZSwgc3ByYXdpYWrEhWMsIMW8ZSBlbGVtZW50eSBsaXN0eSB6YWN6eW5hasSFIHNpxJkgYmV6cG/Fm3JlZG5pbyBvZCBrcmF3xJlkemkuXG4gICAgICAgIC0gYGxpc3Qtc3R5bGU6IG5vbmVgOiBVc3V3YSBkb215xZtsbnkgc3R5bCBsaXN0eSwgdW1vxbxsaXdpYWrEhWMgZG9zdG9zb3dhbmllIHd5Z2zEhWR1IGxpc3R5LCBucC4gcHJ6ZXogZG9kYW5pZSBuaWVzdGFuZGFyZG93eWNoIHpuYWN6bmlrw7N3LlxuICAgICAgICAtIGBmb250LXNpemU6IDEycHRgOiBVc3Rhd2lhIG1uaWVqc3p5IHJvem1pYXIgY3pjaW9ua2kgdyBsacWbY2llLCBjbyBzcHJhd2lhLCDFvGUgdGVrc3Qgc3RhamUgc2nEmSBtbmllaiBkb21pbnVqxIVjeSBuYSBzdHJvbmllLlxuICAgICovXG59XG5cbi8qIEVsZW1lbnR5IGxpc3R5ICguc3R5bGUxIGxpKSAqL1xudWwuc3R5bGUxIGxpIHtcbiAgICBwYWRkaW5nOiAxNXB4IDBweCAxNXB4IDBweDsgLyogVXN0YXdpYSB3ZXduxJl0cnpuZSBvZHN0xJlweSAocGFkZGluZykgZGxhIGthxbxkZWdvIGVsZW1lbnR1IGxpc3R5LiAqL1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGVlMmU2OyAvKiBEb2RhamUgZG9sbsSFIHJhbWvEmSAoYm9yZGVyKSBvIGdydWJvxZtjaSAxcHggaSBrb2xvcnplICNkZWUyZTYuICovXG5cbiAgICAvKlxuICAgICAgICAtIGBwYWRkaW5nOiAxNXB4IDBweCAxNXB4IDBweGA6IFVzdGF3aWEgMTVweCBvZHN0xJlwdSBuYSBnw7NyemUgaSBkb2xlIGVsZW1lbnR1IGxpc3R5LCB6YXBld25pYWrEhWMgcHJ6ZXN0cnplxYQgd29rw7PFgiB0ZWtzdHUsIGJleiBkb2RhdGtvd2VnbyBvZHN0xJlwdSBwbyBib2thY2guXG4gICAgICAgIC0gYGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZGVlMmU2YDogRG9kYWplIGRvbG7EhSByYW1rxJkgbyBncnVib8WbY2kgMXB4IGkgYmFyZHpvIGphc255bSBzemFyby1uaWViaWVza2ltIGtvbG9yemUsIG9kZHppZWxhasSFYyBlbGVtZW50eSBsaXN0eSBpIHBvcHJhd2lhasSFYyBlc3RldHlrxJkuXG4gICAgKi9cbn1cblxuLyogT3N0YXRuaSBlbGVtZW50IGxpc3R5ICguc3R5bGUxIGxpOmxhc3QtY2hpbGQpICovXG51bC5zdHlsZTEgbGk6bGFzdC1jaGlsZCB7XG4gICAgYm9yZGVyLWJvdHRvbTogMDtcbiAgICAvKlxuICAgICAgICAtIFVzdXdhIGRvbG7EhSByYW1rxJkgKGJvcmRlci1ib3R0b20pIHogb3N0YXRuaWVnbyBlbGVtZW50dSBsaXN0eS5cbiAgICAgICAgLSBEemnEmWtpIHRlbXUsIG9zdGF0bmkgZWxlbWVudCBsaXN0eSBuaWUgbWEgZG9kYXRrb3dlaiBkb2xuZWogcmFta2ksIGNvIHphcGV3bmlhIGVzdGV0eWN6bnkgd3lnbMSFZCBpIGJyYWsgemLEmWRueWNoIGxpbmlpIG5hIGtvxYRjdSBsaXN0eS5cbiAgICAqL1xufVxuXG4vKiBTdHlsIGRsYSBsaW5rw7N3IHcgbGnFm2NpZSAoLnN0eWxlMSBhKSAqL1xudWwuc3R5bGUxIGEge1xuICAgIGRpc3BsYXk6IGJsb2NrOyAvKiBVc3Rhd2lhIGxpbmtpIGpha28gYmxva293ZSBlbGVtZW50eSwgY28gc3ByYXdpYSwgxbxlIHd5cGXFgm5pYWrEhSBjYcWCxIUgc3plcm9rb8WbxIcgc3dvamVnbyBrb250ZW5lcmEuICovXG4gICAgcGFkZGluZzogMHB4IDBweCAwcHggMHB4OyAvKiBVc3Rhd2lhIHdld27EmXRyem5lIG1hcmdpbmVzeSAocGFkZGluZykgbmEgMHB4IHoga2HFvGRlaiBzdHJvbnkuICovXG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOyAvKiBVc3V3YSBkb215xZtsbsSFIGRla29yYWNqxJkgdGVrc3R1LCBjenlsaSBwb2RrcmXFm2xlbmllIGxpbmt1LiAqL1xuICAgIGNvbG9yOiAjNzk3OTNhOyAvKiBVc3Rhd2lhIGtvbG9yIHRla3N0dSBsaW5rdSBuYSAjNzk3OTNhIChjaWVtbnkgb2RjaWXFhCBvbGl3a293ZWdvKS4gKi9cblxuICAgIC8qXG4gICAgICAgIC0gYGRpc3BsYXk6IGJsb2NrYDogVXN0YXdpYSBsaW5raSBqYWtvIGJsb2tvd2UgZWxlbWVudHksIGR6acSZa2kgY3plbXUgd3lwZcWCbmlhasSFIGNhxYLEhSBzemVyb2tvxZvEhyBrb250ZW5lcmEgaSBzxIUgxYJhdHdpZWpzemUgZG8ga2xpa25pxJljaWEsIHp3xYJhc3pjemEgbmEgdXJ6xIVkemVuaWFjaCBtb2JpbG55Y2guXG4gICAgICAgIC0gYHBhZGRpbmc6IDBweCAwcHggMHB4IDBweGA6IFVzdGF3aWEgemVyb3dlIG9kc3TEmXB5IG9kIGtyYXfEmWR6aSBrb250ZW5lcmEsIGNvIGVsaW1pbnVqZSBkb215xZtsbmUgbWFyZ2luZXN5LlxuICAgICAgICAtIGB0ZXh0LWRlY29yYXRpb246IG5vbmVgOiBVc3V3YSBwb2RrcmXFm2xlbmllIGxpbmt1LCB1bW/FvGxpd2lhasSFYyBkb2RhbmllIG5pZXN0YW5kYXJkb3dlZ28gc3R5bHUsIG5wLiBrb2xvcnUgY3p5IGVmZWt0w7N3IG5hamVjaGFuaWEuXG4gICAgICAgIC0gYGNvbG9yOiAjNzk3OTNhYDogVXN0YXdpYSBrb2xvciB0ZWtzdHUgbmEgY2llbW55IG9saXdrb3d5IG9kY2llxYQsIHphcGV3bmlhasSFYyBzcMOzam5vxZvEhyB3aXp1YWxuxIUgeiByZXN6dMSFIHN0cm9ueS5cbiAgICAqL1xufVxuXG4vKiBTdHlsIGRsYSBsaW5rw7N3IHcgbGnFm2NpZSAoLnN0eWxlMSBhKSB3IG1vbWVuY2llIG5hamVjaGFuaWEga3Vyc29yZW0gKGhvdmVyKSAqL1xudWwuc3R5bGUxIGE6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIC8qXG4gICAgICAgIC0gRG9kYWplIHBvZGtyZcWbbGVuaWUgZG8gbGlua3UsIGdkeSB1xbx5dGtvd25payBuYWplZHppZSBuYSBuaWVnbyBrdXJzb3JlbS5cbiAgICAgICAgLSBEemnEmWtpIHRlbXUgdcW8eXRrb3duaWsgbWEgd2l6dWFsbsSFIGluZm9ybWFjasSZLCDFvGUgbGluayBqZXN0IGludGVyYWt0eXdueSBpIG1vxbxlIHpvc3RhxIcga2xpa25pxJl0eS5cbiAgICAqL1xufVxuXG4vKiBTdHlsIGRsYSBsaW5rw7N3IHcga2xhc2llIC5idXR0b24tc3R5bGUgKi9cbi5idXR0b24tc3R5bGUgYSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwMHB4O1xuICAgIGhlaWdodDogNDBweDtcbiAgICBtYXJnaW4tdG9wOiAzMHB4O1xuICAgIGJhY2tncm91bmQ6IHVybCguLi9pbWFnZS9rb3ppX2xhc2VrX2J1dHRvbl8xLmpwZykgcmVwZWF0O1xuICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGxpbmUtaGVpZ2h0OiA0MHB4O1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgZm9udC1zaXplOiAxNXB4O1xuICAgIGNvbG9yOiAjRkZGRkZGO1xuICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgdHJhbnNpdGlvbjogbm9uZTtcbiAgICAvKlxuICAgICAgICAtIGBkaXNwbGF5OiBibG9ja2AgdXN0YXdpYSBsaW5rIGpha28gYmxva293eSBlbGVtZW50LCB1bW/FvGxpd2lhasSFYyBwZcWCbsSFIGtvbnRyb2zEmSBuYWQgamVnbyB3eW1pYXJhbWkgaSBwb3p5Y2pvbm93YW5pZW0uXG4gICAgICAgIC0gYHdpZHRoOiAxMDBweDsgaGVpZ2h0OiA0MHB4O2AgdXN0YWxhasSFIHJvem1pYXJ5IHByenljaXNrdSAoc3plcm9rb8WbxIcgMTAwcHgsIHd5c29rb8WbxIcgNDBweCkuXG4gICAgICAgIC0gYG1hcmdpbi10b3A6IDMwcHg7YCBkb2RhamUgb2RzdMSZcCBvZCBlbGVtZW50dSBwb3d5xbxlai5cbiAgICAgICAgLSBgYmFja2dyb3VuZDogdXJsKC4uL2ltYWdlL2tvemlfbGFzZWtfYnV0dG9uXzEuanBnKSByZXBlYXQ7YCB1c3Rhd2lhIHTFgm8gcHJ6eWNpc2t1LCBwb3d0YXJ6YWrEhWMgb2JyYXplayB3IHJhemllIHBvdHJ6ZWJ5LlxuICAgICAgICAtIGBib3JkZXItcmFkaXVzOiAxMHB4O2AgemFva3LEhWdsYSByb2dpIHByenljaXNrdSwgbmFkYWrEhWMgbXUgYmFyZHppZWogbm93b2N6ZXNueSB3eWdsxIVkLlxuICAgICAgICAtIGB0ZXh0LWFsaWduOiBjZW50ZXI7YCB3eXLDs3dudWplIHRla3N0IHdld27EhXRyeiBwcnp5Y2lza3UgZG8gxZtyb2RrYS5cbiAgICAgICAgLSBgbGluZS1oZWlnaHQ6IDQwcHg7YCB1c3Rhd2lhIHd5c29rb8WbxIcgd2llcnN6YSBuYSA0MHB4LCBhYnkgdGVrc3QgYnnFgiB3ecWbcm9ka293YW55IHcgcGlvbmllLlxuICAgICAgICAtIGB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO2Agem1pZW5pYSB0ZWtzdCBuYSB3aWVsa2llIGxpdGVyeS5cbiAgICAgICAgLSBgZm9udC1zaXplOiAxNXB4O2AgdXN0YXdpYSByb3ptaWFyIGN6Y2lvbmtpIG5hIDE1cHguXG4gICAgICAgIC0gYGNvbG9yOiAjRkZGRkZGO2AgdXN0YXdpYSBrb2xvciB0ZWtzdHUgbmEgYmlhxYJ5LCBhYnkgYnnFgiBkb2JyemUgd2lkb2N6bnkgbmEgdGxlLlxuICAgICovXG59XG5cbi5idXR0b24tc3R5bGUgYTpob3Zlcixcbi5idXR0b24tc3R5bGUgYTpmb2N1cy12aXNpYmxlIHtcbiAgICBjb2xvcjogI0ZGRkZGRjtcbiAgICBiYWNrZ3JvdW5kOiB1cmwoLi4vaW1hZ2Uva296aV9sYXNla19idXR0b25fMS5qcGcpIHJlcGVhdDtcbiAgICBvdXRsaW5lOiBub25lO1xufVxuXG4vKiBTdHlsIGRsYSBsaW5rw7N3IHcga2xhc2llIC5idXR0b24tc3R5bGUsIHBvc3plcnrEhWN5IHByenljaXNrIHBvd3JvdHUgKi9cbi5idXR0b24tc3R5bGUtaXQgYSB7XG4gICAgd2lkdGg6IDI3MHB4ICFpbXBvcnRhbnQ7XG4gICAgLypcbiAgICAgICAgLSBgd2lkdGg6IDI3MHB4O2AgdXN0YWxhasSFIHN6ZXJva2/Fm8SHIHByenljaXNrdSAoc3plcm9rb8WbxIcgMjcwcHgpLlxuICAgICovXG59XG5cbi8qIFVzdXdhbmllIGRla29yYWNqaSB0ZWtzdHUgeiBsaW5rw7N3IGJleiBrbGFzeSAqL1xuYTpub3QoW2NsYXNzXSkge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICAvKlxuICAgICAgICAtIFNlbGVrdG9yIGBhOm5vdChbY2xhc3NdKWAgd3liaWVyYSB3c3p5c3RraWUgbGlua2kgKGA8YT5gKSwga3TDs3JlIG5pZSBtYWrEhSBwcnp5cGlzYW5laiBrbGFzeS5cbiAgICAgICAgLSBgdGV4dC1kZWNvcmF0aW9uOiBub25lO2AgdXN1d2EgZG9tecWbbG7EhSBkZWtvcmFjasSZIHRla3N0dSAobnAuIHBvZGtyZcWbbGVuaWUpIHogdHljaCBsaW5rw7N3LlxuICAgICAgICAtIEplc3QgdG8gcHJ6eWRhdG5lLCBnZHkgY2hjZW15LCBhYnkgbGlua2kgYmV6IGtsYXN5IG5pZSBtaWHFgnkgZGVrb3JhY2ppLCB3IHByemVjaXdpZcWEc3R3aWUgZG8gbGlua8OzdyB6IHByenlwaXNhbsSFIGtsYXPEhSwga3TDs3JlIG1vZ8SFIGrEhSBtaWXEhyAobnAuIHcgc3R5bHUgaG92ZXIpLlxuICAgICovXG59XG5cbi8qIFBvZGtyZcWbbGFuaWUgbGlua8OzdyBiZXoga2xhc3kgcG8gbmFqZWNoYW5pdSBrdXJzb3JlbSAqL1xuYTpub3QoW2NsYXNzXSk6aG92ZXIge1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICAgIC8qXG4gICAgICAgIC0gU2VsZWt0b3IgYGE6bm90KFtjbGFzc10pOmhvdmVyYCB3eWJpZXJhIHdzenlzdGtpZSBsaW5raSAoYDxhPmApLCBrdMOzcmUgbmllIG1hasSFIHByenlwaXNhbmVqIGtsYXN5LCBpIGt0w7NyZSBzxIUgdyBzdGFuaWUgYDpob3ZlcmAgKG5hamVjaGFuaWUga3Vyc29yZW0pLlxuICAgICAgICAtIGB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtgIGRvZGFqZSBwb2RrcmXFm2xlbmllIGRvIHR5Y2ggbGlua8OzdywgZ2R5IHXFvHl0a293bmlrIG5hIG5pZSBuYWplZHppZS5cbiAgICAgICAgLSBVxbx5Y2llIGA6aG92ZXJgIHVtb8W8bGl3aWEgaW50ZXJha2NqxJkgeiBsaW5raWVtLCB3aXp1YWxuaWUgd3NrYXp1asSFYywgxbxlIGplc3Qgb24gYWt0eXdueSBsdWIga2xpa25pb255LlxuICAgICovXG59XG5cbi8qIExpbmtpIHcgdHJlxZtjaSBtYWrEhSBkZWxpa2F0bmllanN6eSwgYmFyZHppZWogbmF0dXJhbG55IGFrY2VudCBuacW8IGRvbXnFm2xueSBib290c3RyYXBvd3kgbmllYmllc2tpLiAqL1xuI2NvbnRlbnQgOndoZXJlKFxuICAgIHA6bm90KC5idXR0b24tc3R5bGUpLFxuICAgIGxpLFxuICAgIHRkLFxuICAgIC50ZXh0LWp1c3RpZnksXG4gICAgLnNpbmdsZS1wb3N0LWNvbnRlbnQtd3JhcHBlcixcbiAgICAucHJpdmFjeS1jb21wYW55LWJsb2NrLFxuICAgIC5yZXNlcnZlLFxuICAgIC5hY2NvcmRpb24tYm9keSxcbiAgICAuY2FyZC1ib2R5LFxuICAgIC5yZXNlcnZhdGlvbi1jb25maXJtYXRpb24tY2FyZF9fcm93XG4pIGE6bm90KC5idG4pOm5vdCgucGFnZS1saW5rKTpub3QoLmRyb3Bkb3duLWl0ZW0pOm5vdCgubmF2LWxpbmspOm5vdCguc2hvdy1tb3JlKTpub3QoW2RhdGEtdG9nZ2xlPVwibGlnaHRib3hcIl0pOm5vdChbZGF0YS1mYW5jeWJveF0pLFxuI2NvbnRlbnQgLnNpbmdsZS1wb3N0LWNvbnRlbnQtd3JhcHBlciBsaSBhOm5vdCguYnRuKTpub3QoLnBhZ2UtbGluayk6bm90KC5kcm9wZG93bi1pdGVtKTpub3QoLm5hdi1saW5rKTpub3QoLnNob3ctbW9yZSksXG4jY29udGVudCAucmVzZXJ2ZSBsaSBhOm5vdCguYnRuKTpub3QoLnBhZ2UtbGluayk6bm90KC5kcm9wZG93bi1pdGVtKTpub3QoLm5hdi1saW5rKTpub3QoLnNob3ctbW9yZSksXG4jY29udGVudCBsaSBhOm5vdCguYnRuKTpub3QoLnBhZ2UtbGluayk6bm90KC5kcm9wZG93bi1pdGVtKTpub3QoLm5hdi1saW5rKTpub3QoLnNob3ctbW9yZSk6dmlzaXRlZCxcbiNjb250ZW50IHA6bm90KC5idXR0b24tc3R5bGUpIGE6bm90KC5idG4pOm5vdCgucGFnZS1saW5rKTpub3QoLmRyb3Bkb3duLWl0ZW0pOm5vdCgubmF2LWxpbmspOm5vdCguc2hvdy1tb3JlKTp2aXNpdGVkLFxuI2NvbnRlbnQgLmNhcmQtYm9keSBhLmxpbmstc2Vjb25kYXJ5IHtcbiAgICBjb2xvcjogdmFyKC0ta2wtbGluay1jb2xvcikgIWltcG9ydGFudDtcbiAgICB0ZXh0LWRlY29yYXRpb24tbGluZTogdW5kZXJsaW5lO1xuICAgIHRleHQtZGVjb3JhdGlvbi1jb2xvcjogdmFyKC0ta2wtbGluay11bmRlcmxpbmUpO1xuICAgIHRleHQtZGVjb3JhdGlvbi10aGlja25lc3M6IDEuNXB4O1xuICAgIHRleHQtdW5kZXJsaW5lLW9mZnNldDogMC4xOGVtO1xuICAgIGJvcmRlci1yYWRpdXM6IDAuMzVyZW07XG4gICAgdHJhbnNpdGlvbjogY29sb3IgMC4ycyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDAuMnMgZWFzZSwgdGV4dC1kZWNvcmF0aW9uLWNvbG9yIDAuMnMgZWFzZSwgYm94LXNoYWRvdyAwLjJzIGVhc2U7XG59XG5cbiNjb250ZW50IDp3aGVyZShcbiAgICBwOm5vdCguYnV0dG9uLXN0eWxlKSxcbiAgICBsaSxcbiAgICB0ZCxcbiAgICAudGV4dC1qdXN0aWZ5LFxuICAgIC5zaW5nbGUtcG9zdC1jb250ZW50LXdyYXBwZXIsXG4gICAgLnByaXZhY3ktY29tcGFueS1ibG9jayxcbiAgICAucmVzZXJ2ZSxcbiAgICAuYWNjb3JkaW9uLWJvZHksXG4gICAgLmNhcmQtYm9keSxcbiAgICAucmVzZXJ2YXRpb24tY29uZmlybWF0aW9uLWNhcmRfX3Jvd1xuKSBhOm5vdCguYnRuKTpub3QoLnBhZ2UtbGluayk6bm90KC5kcm9wZG93bi1pdGVtKTpub3QoLm5hdi1saW5rKTpub3QoLnNob3ctbW9yZSk6bm90KFtkYXRhLXRvZ2dsZT1cImxpZ2h0Ym94XCJdKTpub3QoW2RhdGEtZmFuY3lib3hdKTpob3ZlcixcbiNjb250ZW50IDp3aGVyZShcbiAgICBwOm5vdCguYnV0dG9uLXN0eWxlKSxcbiAgICB0ZCxcbiAgICAudGV4dC1qdXN0aWZ5LFxuICAgIC5zaW5nbGUtcG9zdC1jb250ZW50LXdyYXBwZXIsXG4gICAgLnByaXZhY3ktY29tcGFueS1ibG9jayxcbiAgICAucmVzZXJ2ZSxcbiAgICAuYWNjb3JkaW9uLWJvZHksXG4gICAgLmNhcmQtYm9keSxcbiAgICAucmVzZXJ2YXRpb24tY29uZmlybWF0aW9uLWNhcmRfX3Jvd1xuKSBhOm5vdCguYnRuKTpub3QoLnBhZ2UtbGluayk6bm90KC5kcm9wZG93bi1pdGVtKTpub3QoLm5hdi1saW5rKTpub3QoLnNob3ctbW9yZSk6bm90KFtkYXRhLXRvZ2dsZT1cImxpZ2h0Ym94XCJdKTpub3QoW2RhdGEtZmFuY3lib3hdKTpmb2N1cy12aXNpYmxlLFxuI2NvbnRlbnQgLnNpbmdsZS1wb3N0LWNvbnRlbnQtd3JhcHBlciBsaSBhOm5vdCguYnRuKTpub3QoLnBhZ2UtbGluayk6bm90KC5kcm9wZG93bi1pdGVtKTpub3QoLm5hdi1saW5rKTpub3QoLnNob3ctbW9yZSk6aG92ZXIsXG4jY29udGVudCAuc2luZ2xlLXBvc3QtY29udGVudC13cmFwcGVyIGxpIGE6bm90KC5idG4pOm5vdCgucGFnZS1saW5rKTpub3QoLmRyb3Bkb3duLWl0ZW0pOm5vdCgubmF2LWxpbmspOm5vdCguc2hvdy1tb3JlKTpmb2N1cy12aXNpYmxlLFxuI2NvbnRlbnQgLnJlc2VydmUgbGkgYTpub3QoLmJ0bik6bm90KC5wYWdlLWxpbmspOm5vdCguZHJvcGRvd24taXRlbSk6bm90KC5uYXYtbGluayk6bm90KC5zaG93LW1vcmUpOmhvdmVyLFxuI2NvbnRlbnQgLnJlc2VydmUgbGkgYTpub3QoLmJ0bik6bm90KC5wYWdlLWxpbmspOm5vdCguZHJvcGRvd24taXRlbSk6bm90KC5uYXYtbGluayk6bm90KC5zaG93LW1vcmUpOmZvY3VzLXZpc2libGUsXG4jY29udGVudCAuY2FyZC1ib2R5IGEubGluay1zZWNvbmRhcnk6aG92ZXIsXG4jY29udGVudCAuY2FyZC1ib2R5IGEubGluay1zZWNvbmRhcnk6Zm9jdXMtdmlzaWJsZSB7XG4gICAgY29sb3I6IHZhcigtLWtsLWxpbmstaG92ZXItY29sb3IpICFpbXBvcnRhbnQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0ta2wtbGluay1ob3Zlci1iZyk7XG4gICAgdGV4dC1kZWNvcmF0aW9uLWNvbG9yOiB2YXIoLS1rbC1saW5rLXVuZGVybGluZS1ob3Zlcik7XG4gICAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHZhcigtLWtsLWxpbmstZm9jdXMtcmluZyk7XG4gICAgb3V0bGluZTogbm9uZTtcbn1cblxuI2NvbnRlbnQgI3NpZGViYXIgYSxcbiNjb250ZW50ICNzaWRlYmFyIGE6dmlzaXRlZCB7XG4gICAgY29sb3I6ICM3OTc5M2EgIWltcG9ydGFudDtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgYm94LXNoYWRvdzogbm9uZTtcbn1cblxuI2NvbnRlbnQgI3NpZGViYXIgYTpob3ZlcixcbiNjb250ZW50ICNzaWRlYmFyIGE6Zm9jdXMtdmlzaWJsZSB7XG4gICAgY29sb3I6ICM3OTc5M2EgIWltcG9ydGFudDtcbiAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTtcbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICAgIG91dGxpbmU6IG5vbmU7XG59XG5cbi5yZXNlcnZhdGlvbi1zdGVwLWJhZGdlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIHBhZGRpbmc6IDAuMTRyZW0gMC41cmVtIDAuMThyZW07XG4gICAgbWFyZ2luOiAwIDAuMzVyZW0gMC4xMnJlbSAwO1xuICAgIGJvcmRlcjogbm9uZTtcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMjQwLCAyMzQsIDIyMiwgMC43Mik7XG4gICAgY29sb3I6ICM3NzcyNGQ7XG4gICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gICAgZm9udC1zaXplOiAwLjY4cmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODIpO1xufVxuXG4udGV4dC1qdXN0aWZ5ID4gLnJlc2VydmF0aW9uLXN0ZXAtYmFkZ2U6Zmlyc3QtY2hpbGQsXG5wID4gLnJlc2VydmF0aW9uLXN0ZXAtYmFkZ2U6Zmlyc3QtY2hpbGQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB0b3A6IC0wLjA1cmVtO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAucmVzZXJ2YXRpb24tc3RlcC1iYWRnZSB7XG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgbWFyZ2luLWJvdHRvbTogMC40NXJlbTtcbiAgICB9XG59XG5cbi8qIFN0eWxpemFjamEgc3RvcGtpIChmb290ZXIpICovXG5mb290ZXIge1xuICAgIGhlaWdodDogYXV0bzsgLyogVXN0YXdpYSB3eXNva2/Fm8SHIHN0b3BraSBuYSBhdXRvbWF0eWN6bsSFLCBkb3N0b3Nvd3VqxIVjIGrEhSBkbyB6YXdhcnRvxZtjaSAqL1xuICAgIHBhZGRpbmc6IDE1cHggMTBweCAxNXB4IDEwcHg7IC8qIERvZGFqZSB3ZXduxJl0cnpuZSBtYXJnaW5lc3kgKHBhZGRpbmcpIHdva8OzxYIgemF3YXJ0b8WbY2kgc3RvcGtpICovXG4gICAgbWFyZ2luLXRvcDogLTE2cHg7IC8qIFVzdGFsYSBnw7NybnkgbWFyZ2luZXMgbmEgLTE2cHgsIGNvIG1vxbxlIHpibGnFvHnEhyBzdG9wa8SZIGRvIGVsZW1lbnR1IHBvd3nFvGVqICovXG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyAvKiBVc3Rhd2lhIHBvenljasSZIHN0b3BraSBuYSAncmVsYXRpdmUnLCBhYnkgdW1vxbxsaXdpxIcgamVqIHByemVzdW5pxJljaWUgdyBzdG9zdW5rdSBkbyBpbm55Y2ggZWxlbWVudMOzdyAqL1xuICAgIHdpZHRoOiAxMDAlOyAvKiBVc3Rhd2lhIHN6ZXJva2/Fm8SHIHN0b3BraSBuYSAxMDAlIHN6ZXJva2/Fm2NpIGRvc3TEmXBuZWdvIGtvbnRlbmVyYSAqL1xuICAgIGNvbG9yOiAjZmZmOyAvKiBVc3Rhd2lhIGtvbG9yIHRla3N0dSBuYSBiaWHFgnkgKi9cbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI0NDQ0NDQzsgLyogRG9kYWplIGRvbG7EhSByYW1rxJkgbyBrb2xvcnplICNDQ0NDQ0MgKi9cbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI0RERERERDsgLyogRG9kYWplIGfDs3JuxIUgcmFta8SZIG8ga29sb3J6ZSAjREREREREICovXG4gICAgYmFja2dyb3VuZDogI2JhYWQ4YjsgLyogRmFsbGJhY2sga29sb3J1IGRsYSBzdGFyc3p5Y2ggcHJ6ZWdsxIVkYXJlayAqL1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICNkMGMwYTQgMCUsICNjMGIwOGYgMzglLCAjYjI5ZjdkIDEwMCUpO1xuICAgIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI2QwYzBhNCAwJSwgI2MwYjA4ZiAzOCUsICNiMjlmN2QgMTAwJSk7XG4gICAgLypcbiAgICAgICAgLSBVxbx5Y2llIGAtd2Via2l0LWxpbmVhci1ncmFkaWVudGAgemFwZXduaWEga29tcGF0eWJpbG5vxZvEhyB6IHByemVnbMSFZGFya2FtaSB3eWtvcnp5c3R1asSFY3ltaSBzaWxuaWsgV2Via2l0IChucC4gU2FmYXJpKS5cbiAgICAgICAgLSBHcmFkaWVudCBqZXN0IHR1dGFqIGJhcmR6byBzdWJ0ZWxueSwgcG9uaWV3YcW8IHByemVjaG9kemkgdHlsa28gbWnEmWR6eSBkd29tYSBpZGVudHljem55bWkga29sb3JhbWkuXG4gICAgICAgIC0gTW/FvGUgdG8gYnnEhyB1xbx5dGVjem5lIGRsYSB1enlza2FuaWEgZWZla3R1IFwid3lnxYJhZHplbmlhXCIgbHViIGpha28gcHJ6eWdvdG93YW5pZSBuYSBww7PFum5pZWpzemUgem1pYW55IGtvbG9yw7N3LlxuICAgICovXG59XG5cbi8qIERvbG5hIHNla2NqYSBmb3JtYWxuYSBzdG9wa2kgKi9cbi5mb290ZXItbGVnYWwtc2VjdGlvbiB7XG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNCQUMxQzg7IC8qIFRlbiBzYW0ga29sb3IgY28gaDMgKi9cbiAgICBtYXJnaW4tdG9wOiAxMHB4OyAvKiBPZGR6aWVsZW5pZSBvZCBrb2x1bW4gKi9cbiAgICBwYWRkaW5nOiAyMHB4IDA7IC8qIFN5bWV0cnljem55IG9kZGVjaCAqL1xufVxuXG4uZm9vdGVyLWxlZ2FsLWJyYW5kaW5nIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtZW5kO1xuICAgIGdhcDogMTBweDtcbiAgICBwYWRkaW5nLXJpZ2h0OiAxMnB4O1xuICAgIC8qXG4gICAgICAgIC0gYGRpc3BsYXk6IGZsZXhgICsgYGZsZXgtZGlyZWN0aW9uOiBjb2x1bW5gIOKAkyB1a8WCYWRhIG5hcGlzIGkgbG9nbyBwaW9ub3dvLCBqZWRubyBwb2QgZHJ1Z2ltLlxuICAgICAgICAtIGBhbGlnbi1pdGVtczogZmxleC1lbmRgIOKAkyBuYSBkdcW8eWNoIGVrcmFuYWNoIGNhxYJhIHByYXdhIHNla2NqYSBwcnp5bGVnYSBlc3RldHljem5pZSBkbyBwcmF3ZWoga3Jhd8SZZHppLlxuICAgICAgICAtIGBnYXA6IDEwcHhgIOKAkyB1dHJ6eW11amUgc3VidGVsbnkgb2RzdMSZcCBtacSZZHp5IGxpbmnEhSBjb3B5cmlnaHQgYSB6bmFraWVtIGdyYWZpY3pueW0uXG4gICAgICAgIC0gYHBhZGRpbmctcmlnaHQ6IDEycHhgIOKAkyBkYWplIGxla2tpIOKAnm9kZGVjaOKAnSBvZCBwcmF3ZWoga3Jhd8SZZHppIGtvbnRlbmVyYS5cbiAgICAqL1xufVxuXG4uZm9vdGVyLWxlZ2FsLWxvZ28tZGVza3RvcC13cmFwIHtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIC8qXG4gICAgICAgIC0gYGFsaWduLWl0ZW1zOiBjZW50ZXJgIOKAkyBjZW50cnVqZSBsb2dvIHcgb3NpIHBpb25vd2VqIHd6Z2zEmWRlbSBzxIVzaWVkbmljaCBrb2x1bW4uXG4gICAgICAgIC0gYGp1c3RpZnktY29udGVudDogY2VudGVyYCDigJMgdXN0YXdpYSB6bmFrIGRva8WCYWRuaWUgcG/Fm3JvZGt1IMWbcm9ka293ZWoga29sdW1ueSBzdG9wa2kuXG4gICAgKi9cbn1cblxuLmZvb3Rlci1sZWdhbC1jb3B5IHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgZ2FwOiAwLjM1cmVtO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIGZvbnQtc2l6ZTogMC44NzVyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgICAvKlxuICAgICAgICAtIGBkaXNwbGF5OiBpbmxpbmUtZmxleGAg4oCTIHBvendhbGEgcHJlY3l6eWpuaWUga29udHJvbG93YcSHIHVrxYJhZCB0ZWtzdHUsIHNlcGFyYXRvcmEgaSBsaW5rdS5cbiAgICAgICAgLSBgYWxpZ24taXRlbXM6IGNlbnRlcmAg4oCTIHd5csOzd251amUgZWxlbWVudHkgbGluaWkgZG8gd3Nww7NsbmVqIG9zaSBwaW9ub3dlai5cbiAgICAgICAgLSBganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZGAg4oCTIG5hIGRlc2t0b3BpZSBsaW5pYSBkb215xZtsbmllIHRyenltYSBzacSZIHByYXdlaiBzdHJvbnkuXG4gICAgICAgIC0gYGdhcDogMC4zNXJlbWAg4oCTIHV0cnp5bXVqZSBtYcWCeSwgZWxlZ2FuY2tpIG9kc3TEmXAgcG9tacSZZHp5IHNlZ21lbnRhbWkgdGVrc3R1LlxuICAgICAgICAtIGBtYXgtd2lkdGg6IDEwMCVgIOKAkyBjaHJvbmkgYmxvayBwcnplZCB3eWNob2R6ZW5pZW0gcG96YSBzemVyb2tvxZvEhyByb2R6aWNhLlxuICAgICAgICAtIGB3aGl0ZS1zcGFjZTogbm93cmFwYCDigJMgdXRyenltdWplIG5hcGlzIHcgamVkbnltIHdpZXJzenUsIGplxZtsaSB0eWxrbyBzemVyb2tvxZvEhyBuYSB0byBwb3p3YWxhLlxuICAgICAgICAtIGBmb250LXNpemU6IDAuODc1cmVtYCDigJMgZGVsaWthdG5pZSB6bW5pZWpzem9ueSB0ZWtzdCBwYXN1asSFY3kgZG8gY2hhcmFrdGVydSBzZWtjamkgZm9ybWFsbmVqLlxuICAgICAgICAtIGBsaW5lLWhlaWdodDogMS4yYCDigJMgendhcnRhIHd5c29rb8WbxIcgbGluaWkgcG9wcmF3aWEgb3B0eWN6bmUgd3lyw7N3bmFuaWUuXG4gICAgKi9cbn1cblxuLmZvb3Rlci1sZWdhbC1jb3B5LXRleHQsXG4uZm9vdGVyLWxlZ2FsLWNvcHkgYSxcbi5mb290ZXItbGVnYWwtY29weS1zZXBhcmF0b3Ige1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgZmxleDogMCAwIGF1dG87XG4gICAgLypcbiAgICAgICAgLSBgd2hpdGUtc3BhY2U6IG5vd3JhcGAg4oCTIGthxbxkeSBzZWdtZW50IHBvem9zdGFqZSBuaWVyb3piaWphbG55LCBjbyB6YXBvYmllZ2EgcHJ6eXBhZGtvd3ltIHrFgmFtYW5pb20uXG4gICAgICAgIC0gYGZsZXg6IDAgMCBhdXRvYCDigJMgZWxlbWVudHkgemFjaG93dWrEhSBzd29qxIUgbmF0dXJhbG7EhSBzemVyb2tvxZvEhyBpIG5pZSBzxIUgxZtjaXNrYW5lIHByemV6IEZsZXhib3guXG4gICAgKi9cbn1cblxuLmZvb3Rlci1sZWdhbC1jb3B5IGEge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAvKlxuICAgICAgICAtIGBkaXNwbGF5OiBpbmxpbmUtYmxvY2tgIOKAkyBsaW5rIHphY2hvd3VqZSBzacSZIHN0YWJpbG5pZWogdyB1a8WCYWR6aWUgZmxleCBuacW8IGN6eXN0eSBpbmxpbmUuXG4gICAgKi9cbn1cblxuLmZvb3Rlci1sZWdhbC1sb2dvIHtcbiAgICB3aWR0aDogbWluKDIyMHB4LCAxMDAlKTtcbiAgICBoZWlnaHQ6IGF1dG87XG4gICAgb3BhY2l0eTogMC42O1xuICAgIGZpbHRlcjogYnJpZ2h0bmVzcygwKSBpbnZlcnQoMSkgZHJvcC1zaGFkb3coMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4xNikpO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIC8qXG4gICAgICAgIC0gYHdpZHRoOiBtaW4oMjIwcHgsIDEwMCUpYCDigJMgbG9nbyBtYSBrb250cm9sb3dhbnksIHN1YnRlbG55IHJvem1pYXIgaSBuaWUgd3ljaG9kemkgcG96YSBrb2x1bW7EmS5cbiAgICAgICAgLSBgaGVpZ2h0OiBhdXRvYCDigJMgemFjaG93dWplIHByb3BvcmNqZSB6bmFrdSBuaWV6YWxlxbxuaWUgb2Qgc3plcm9rb8WbY2kuXG4gICAgICAgIC0gYG9wYWNpdHk6IDAuNmAg4oCTIG9zxYJhYmlhIGtvbnRyYXN0LCBkemnEmWtpIGN6ZW11IGdyYWZpa2EgamVzdCBkZWtvcmFjeWpuYSwgYSBuaWUgZG9taW51asSFY2EuXG4gICAgICAgIC0gYGZpbHRlcjogYnJpZ2h0bmVzcygwKSBpbnZlcnQoMSkgLi4uYCDigJMgemFtaWVuaWEgY2llbW55IHJ5c3VuZWsgbmEgYmlhxYLEhSB3ZXJzasSZIGkgZG9kYWplIG1pxJlra2kgY2llxYQuXG4gICAgICAgIC0gYHBvaW50ZXItZXZlbnRzOiBub25lYCDigJMgem5hayBqZXN0IGNhxYJrb3dpY2llIG5pZWludGVyYWt0eXdueSBpIG5pZSB6YWvFgsOzY2Egb2JzxYJ1Z2kga3Vyc29yYS5cbiAgICAqL1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogOTkxLjk4cHgpIHtcbiAgICAuZm9vdGVyLWxlZ2FsLWJyYW5kaW5nIHtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDE4cHg7XG4gICAgICAgIC8qXG4gICAgICAgICAgICAtIE5hIG1vYmlsZSBwcmF3YSBzZWtjamEgcHJ6ZWNob2R6aSBkbyB1a8WCYWR1IHd5csOzd25hbmVnbyBkbyBsZXdlai5cbiAgICAgICAgICAgIC0gYHBhZGRpbmctcmlnaHQ6IDBgIHVzdXdhIHpixJlkbnkgb2RzdMSZcCBvZCBwcmF3ZWoga3Jhd8SZZHppLlxuICAgICAgICAgICAgLSBgbWFyZ2luLXRvcDogMThweGAgb2RkemllbGEgdGVuIGJsb2sgb2QgcG9wcnplZG5pZWogY3rEmcWbY2kgcG8gesWCb8W8ZW5pdSBrb2x1bW4uXG4gICAgICAgICovXG4gICAgfVxuXG4gICAgLmZvb3Rlci1sZWdhbC1jb3B5IHtcbiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAgICAgICBmb250LXNpemU6IGNsYW1wKDAuNjJyZW0sIDIuMDV2dywgMC44MnJlbSk7XG4gICAgICAgIC8qXG4gICAgICAgICAgICAtIGBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnRgIOKAkyBuYXBpcyB6YWN6eW5hIHNpxJkgb2QgbGV3ZWosIHpnb2RuaWUgeiBtb2JpbG55bSByeXRtZW0gc3RvcGtpLlxuICAgICAgICAgICAgLSBgZm9udC1zaXplOiBjbGFtcCguLi4pYCDigJMgZGVsaWthdG5pZSBza2FsdWplIHRla3N0IG5hIG1hxYJ5Y2ggZWtyYW5hY2gsIGJ5IHVuaWtuxIXEhyBwcnplcGXFgm5pZW5pYS5cbiAgICAgICAgKi9cbiAgICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiA5OTJweCkgYW5kIChtYXgtd2lkdGg6IDExOTkuOThweCkge1xuICAgIC5mb290ZXItbGVnYWwtYnJhbmRpbmcge1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7XG4gICAgICAgIG1hcmdpbi10b3A6IDE4cHg7XG4gICAgICAgIC8qXG4gICAgICAgICAgICAtIFcgxZtyZWRuaW0gemFrcmVzaWUgc3plcm9rb8WbY2kgcHJhd2Ega29sdW1uYSBzY2hvZHppIG5pxbxlaiBpIGNlbnRydWplIHphd2FydG/Fm8SHLlxuICAgICAgICAgICAgLSBUbyBlbGltaW51amUgcHJvYmxlbSDFm2Npc2t1IHd5c3TEmXB1asSFY3kgcHJ6ZWQgcGXFgm55bSB1a8WCYWRlbSBkZXNrdG9wb3d5bSBgeGxgLlxuICAgICAgICAqL1xuICAgIH1cblxuICAgIC5mb290ZXItbGVnYWwtY29weSB7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBmb250LXNpemU6IDAuNzhyZW07XG4gICAgICAgIC8qXG4gICAgICAgICAgICAtIGBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcmAg4oCTIGxpbmlhIGNvcHlyaWdodCBqZXN0IG9wdHljem5pZSB3ecWbcm9ka293YW5hIHcgZG9zdMSZcG5laiBzemVyb2tvxZtjaS5cbiAgICAgICAgICAgIC0gYGZvbnQtc2l6ZTogMC43OHJlbWAg4oCTIGxla2tvIHptbmllanN6b255IHJvem1pYXIgcG9wcmF3aWEgc3RhYmlsbm/Fm8SHIHVrxYJhZHUgdyB0eW0gcHJ6ZWR6aWFsZS5cbiAgICAgICAgKi9cbiAgICB9XG59XG5cbkBtZWRpYSAobWluLXdpZHRoOiAxMjAwcHgpIGFuZCAobWF4LXdpZHRoOiAxMzk5Ljk4cHgpIHtcbiAgICAuZm9vdGVyLWxlZ2FsLWNvcHkge1xuICAgICAgICBmb250LXNpemU6IDAuNzhyZW07XG4gICAgICAgIC8qXG4gICAgICAgICAgICAtIFcgd8SZxbxzenltIGRlc2t0b3BpZSBkZWxpa2F0bmllIHJlZHVrdWplbXkgcm96bWlhciBsaW5paSBwcmF3bmVqLFxuICAgICAgICAgICAgICBhYnkgemFjaG93YcSHIGplZG5vd2llcnN6b3d5IHphcGlzIGJleiB1dHJhdHkgZXN0ZXR5a2kuXG4gICAgICAgICovXG4gICAgfVxufVxuXG4vKlxuICAgIC0gYm9yZGVyLXRvcDogaWRlbnR5Y3pueSBrb2xvciBqYWsgcG9kIG5hZ8WCw7N3a2FtaSAoc3DDs2pub8WbxIcgd2l6dWFsbmEpXG4gICAgLSBtYXJnaW4tdG9wOiB0d29yenkgd3lyYcW6bnkgcG9kemlhxYIgc2VrY2ppXG4gICAgLSBwYWRkaW5nOiBuYWRhamUgZWxlZ2FuY2tpIHJ5dG0gcGlvbm93eVxuKi9cblxuLyogU3R5bGl6YWNqYSBlbGVtZW50w7N3IGZvcm11bGFyemE6IGdydXB5IHdlasWbY2lvd2UsIHBvbGEgdGVrc3Rvd2UgaSBlbGVtZW50eSB6d2nEhXphbmUgeiBncnVwYW1pIHdlasWbY2lvd3ltaSAqL1xuLmlucHV0LWdyb3VwLCBpbnB1dCwgdGV4dGFyZWEsIFxuLmlucHV0LWdyb3VwLXRleHQge1xuICAgIG1hcmdpbi1ib3R0b206IDRweDsgLyogRG9kYWplIG1hcmdpbmVzIGRvbG55IG8gd3lzb2tvxZtjaSA0cHgsIG9kZHppZWxhasSFYyBlbGVtZW50eSBvZCBpbm55Y2ggc2vFgmFkbmlrw7N3IGZvcm11bGFyemEgKi9cbiAgICAvKlxuICAgICAgICAtIGBpbnB1dGAgb2Rub3NpIHNpxJkgZG8gcMOzbCB0ZWtzdG93eWNoIChucC4gcG9sYSBmb3JtdWxhcnphKS5cbiAgICAgICAgLSBgdGV4dGFyZWFgIG9kbm9zaSBzacSZIGRvIHDDs2wgd2llbG9saW5pb3d5Y2ggKG5wLiBwb2xlIGRvIHdwcm93YWR6YW5pYSB0ZWtzdHUgdyB3aWVsdSBsaW5pYWNoKS5cbiAgICAgICAgLSBgLmlucHV0LWdyb3VwYCBpIGAuaW5wdXQtZ3JvdXAtdGV4dGAgb2Rub3N6xIUgc2nEmSBkbyBncnVweSBlbGVtZW50w7N3LCB0YWtpY2ggamFrIGV0eWtpZXR5IGx1YiBwcnp5Y2lza2kgdyBvYnLEmWJpZSBlbGVtZW50dSBgaW5wdXRgIHcgQm9vdHN0cmFwaWUuXG4gICAgICAgIC0gRG9kYW5pZSB0ZWdvIG1hcmdpbmVzdSB6YXBld25pYSBwcnplc3RyemXFhCBtacSZZHp5IGVsZW1lbnRhbWkgZm9ybXVsYXJ6YSwgY28gcG9wcmF3aWEgY3p5dGVsbm/Fm8SHIGkgZXN0ZXR5a8SZLlxuICAgICovXG59XG5cbi8qIFN0eWxpemFjamEgbmFnxYLDs3drYSBoMyB3IHN0b3BjZSAqL1xuLmZvb3RlciBoMyB7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCQUMxQzg7IC8qIERvZGFqZSBkb2xuZSBvYnJhbW93YW5pZSBvIGdydWJvxZtjaSAxcHggaSBrb2xvcnplICNCQUMxQzgsIGNvIG9kZHppZWxhIG5hZ8WCw7N3ZWsgb2QgcmVzenR5IHRyZcWbY2kgKi9cbiAgICBjb2xvcjogI2ZmZjsgLyogVXN0YXdpYSBrb2xvciB0ZWtzdHUgbmEgYmlhxYJ5ICovXG4gICAgZm9udC1zaXplOiAxOHB4OyAvKiBPa3JlxZtsYSByb3ptaWFyIGN6Y2lvbmtpIG5hIDE4cHggKi9cbiAgICBmb250LXdlaWdodDogNjAwOyAvKiBVc3RhbGEgd2FnxJkgY3pjaW9ua2kgbmEgNjAwLCBjbyBzcHJhd2lhLCDFvGUgdGVrc3QgamVzdCBwb2dydWJpb255ICovXG4gICAgbGluZS1oZWlnaHQ6IDI3cHg7IC8qIFVzdGFsYSB3eXNva2/Fm8SHIGxpbmlpIG5hIDI3cHgsIGNvIHBvcHJhd2lhIGN6eXRlbG5vxZvEhyB0ZWtzdHUgKi9cbiAgICBwYWRkaW5nOiAyMHB4IDAgMTBweDsgLyogRG9kYWplIHByemVzdHJ6ZcWEIHdld27EmXRyem7EhSAocGFkZGluZykgd29rw7PFgiB0ZWtzdHU6IDIwcHggbmEgZ8OzcnplLCAwcHggeiBsZXdlaiBpIHByYXdlaiwgMTBweCBuYSBkb2xlICovXG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsgLyogUHJ6ZWtzenRhxYJjYSB3c3p5c3RraWUgbGl0ZXJ5IG5hIHdpZWxraWUgbGl0ZXJ5ICovXG4gICAgLypcbiAgICAgICAgLSBgYm9yZGVyLWJvdHRvbWA6IHPFgnXFvHkgZG8gd3lyw7PFvG5pZW5pYSBuYWfFgsOzd2thIHcgc3RvcGNlLCB0d29yesSFYyB3eXJhxbpuxIUgbGluacSZIG9kZHppZWxhasSFY8SFIGdvIG9kIGlubnljaCBzZWtjamkuXG4gICAgICAgIC0gYGNvbG9yOiAjZmZmYDogemFwZXduaWEsIMW8ZSB0ZWtzdCBixJlkemllIGJpYcWCeSwgY28ga29udHJhc3R1amUgeiB0xYJlbSBzdG9wa2kuXG4gICAgICAgIC0gYGZvbnQtc2l6ZWAsIGBmb250LXdlaWdodGAsIGBsaW5lLWhlaWdodGA6IG9rcmXFm2xhasSFIHR5cG9ncmFmacSZIG5hZ8WCw7N3a2EsIGNvIGN6eW5pIGdvIHd5cmHFum55bSBpIGRvYnJ6ZSB3aWRvY3pueW0uXG4gICAgICAgIC0gYHBhZGRpbmdgOiB6YXBld25pYSBwcnplc3RyemXFhCB3b2vDs8WCIHRla3N0dSwgZHppxJlraSBjemVtdSBuYWfFgsOzd2VrIG5pZSBqZXN0IHpieXQgYmxpc2tvIGlubnljaCBlbGVtZW50w7N3LlxuICAgICovXG59XG5cbi8qIFN0eWxpemFjamEgbGlzdHkgdyBzdG9wY2UgKi9cbi5mb290ZXIgdWwge1xuICAgIGZvbnQtc2l6ZTogMTNweDsgLyogT2tyZcWbbGEgcm96bWlhciBjemNpb25raSBuYSAxM3B4LCBjbyB6YXBld25pYSBvZHBvd2llZG5pxIUgd2llbGtvxZvEhyB0ZWtzdHUgdyBzdG9wY2UgKi9cbiAgICBsaXN0LXN0eWxlLXR5cGU6IG5vbmU7IC8qIFVzdXdhIGRvbXnFm2xueSBzdHlsIHB1bmt0w7N3IGxpc3R5LCBkemnEmWtpIGN6ZW11IGxpc3RhIGplc3Qgd3nFm3dpZXRsYW5hIGJleiBzeW1ib2xpIChidWxsZXQgcG9pbnRzKSAqL1xuICAgIG1hcmdpbi1sZWZ0OiAwOyAvKiBVc3V3YSBsZXd5IG1hcmdpbmVzLCB6YXBld25pYWrEhWMsIMW8ZSBsaXN0YSB6YWN6eW5hIHNpxJkgYmV6cG/Fm3JlZG5pbyBvZCBrcmF3xJlkemkgKi9cbiAgICBwYWRkaW5nLWxlZnQ6IDA7IC8qIFVzdXdhIGxld3kgcGFkZGluZywgY28gcsOzd25pZcW8IHBvbWFnYSB3eXLDs3duYcSHIGxpc3TEmSBkbyBrcmF3xJlkemkgKi9cbiAgICBtYXJnaW4tdG9wOiAxNXB4OyAvKiBEb2RhamUgbWFyZ2luZXMgb2QgZ8OzcnksIGFieSBsaXN0YSBtaWHFgmEgb2RzdMSZcCBvZCBwb3ByemVkemFqxIVjeWNoIGVsZW1lbnTDs3cgKi9cbiAgICBjb2xvcjogI2ZmZjsgLyogVXN0YXdpYSBrb2xvciB0ZWtzdHUgbGlua8OzdyBuYSBiaWHFgnkgKi9cbiAgICAvKlxuICAgICAgICAtIGBmb250LXNpemVgOiBkb3N0b3Nvd3VqZSByb3ptaWFyIHRla3N0dSwgYWJ5IHBhc293YcWCIGRvIG9nw7NsbmVnbyBzdHlsdSBzdG9wa2kuXG4gICAgICAgIC0gYGxpc3Qtc3R5bGUtdHlwZTogbm9uZWA6IHBvd29kdWplLCDFvGUgbGlzdGEgbmllIG1hIGRvbXnFm2xueWNoIHB1bmt0w7N3LCBjbyBzcHJhd2lhLCDFvGUgamVzdCBiYXJkemllaiBtaW5pbWFsaXN0eWN6bmEuXG4gICAgICAgIC0gYG1hcmdpbi1sZWZ0YCBpIGBwYWRkaW5nLWxlZnRgOiB1c3V3YWrEhSB3c3plbGtpZSBkb215xZtsbmUgd2NpxJljaWEsIGNvIHNwcmF3aWEsIMW8ZSBsaXN0YSBqZXN0IHd5csOzd25hbmEgZG8gbGV3ZWoga3Jhd8SZZHppLlxuICAgICAgICAtIGBtYXJnaW4tdG9wYDogZG9kYWplIHByemVzdHJ6ZcWEIG5hZCBsaXN0xIUsIHphcGV3bmlhasSFYyBqZWogb2RkemllbGVuaWUgb2QgaW5ueWNoIGVsZW1lbnTDs3cuXG4gICAgICAgIC0gYGNvbG9yYDogd3liw7NyIGtvbG9ydSBzemFyb8WbY2ksIGt0w7NyeSB6YXBld25pYSBzdWJ0ZWxueSBrb250cmFzdCBpIMWCYXR3xIUgY3p5dGVsbm/Fm8SHIG5hIHRsZSBzdG9wa2kuXG4gICAgKi9cbn1cblxuLyogU3R5bGl6YWNqYSBsaW5rw7N3IHcgbGnFm2NpZSB3IHN0b3BjZSAqL1xuLmZvb3RlciB1bCBsaSBhIHtcbiAgICBwYWRkaW5nOiAwIDAgNXB4IDA7IC8qIFVzdGF3aWEgZG9sbnkgcGFkZGluZyBuYSA1cHgsIGNvIGRhamUgcHJ6ZXN0cnplxYQgcG9uacW8ZWoga2HFvGRlZ28gbGlua3UgKi9cbiAgICBkaXNwbGF5OiBibG9jazsgLyogVXN0YXdpYSBsaW5raSBqYWtvIGVsZW1lbnR5IGJsb2tvd2UsIGR6acSZa2kgY3plbXUgemFqbXVqxIUgY2HFgsSFIGRvc3TEmXBuxIUgc3plcm9rb8WbxIcgKi9cbiAgICAvKlxuICAgICAgICAtIGBwYWRkaW5nYDogb2tyZcWbbGEgd2V3bsSZdHJ6bnkgbWFyZ2luZXMuIFcgdHltIHByenlwYWRrdSBzdG9zb3dhbnkgdHlsa28gZG8gZG9sbmVqIGN6xJnFm2NpLCBkb2RhasSFYyBwcnplc3RyemXFhCBtacSZZHp5IGtvbGVqbnltaSBsaW5rYW1pLlxuICAgICAgICAtIGBkaXNwbGF5OiBibG9ja2A6IHNwcmF3aWEsIMW8ZSBsaW5raSBzdGFqxIUgc2nEmSBlbGVtZW50YW1pIGJsb2tvd3ltaSwgY28gcG96d2FsYSBuYSDFgmF0d2llanN6ZSBrb250cm9sb3dhbmllIGljaCByb3ptaWFyw7N3IGkgb2RzdMSZcMOzdy5cbiAgICAqL1xufVxuXG5cbi8qIFN0eWxpemFjamEgbGlua8OzdyB3IHN0b3BjZSAqL1xuLmZvb3RlciBhIHtcbiAgICBjb2xvcjogI2ZmZjsgLyogVXN0YXdpYSBrb2xvciB0ZWtzdHUgbGlua8OzdyBuYSBiaWHFgnkgKi9cbiAgICAvKlxuICAgICAgICAtIGBjb2xvcmA6IE9rcmXFm2xhIGtvbG9yIHRla3N0dSBkbGEgbGlua8OzdyB3ZXduxIV0cnogc3RvcGtpLlxuICAgICAgICAtIFdhcnRvxZvEhyBgI2ZmZmAgb3puYWN6YSBiaWHFgnkga29sb3IsIGNvIHphcGV3bmlhIGtvbnRyYXN0IHcgcHJ6eXBhZGt1IGNpZW1uaWVqc3plZ28gdMWCYSBzdG9wa2kuXG4gICAgKi9cbn1cblxuLyogU3R5bGl6YWNqYSBuYWfFgsOzd2thIChoNCkgdyBlbGVtZW50YWNoIGxpc3R5IHdzcGFyY2lhICovXG4uc3VwcG9ydExpIGg0IHtcbiAgICBmb250LXNpemU6IDIwcHg7IC8qIE9rcmXFm2xhIHJvem1pYXIgY3pjaW9ua2kgbmEgMjBweCwgY28gc3ByYXdpYSwgxbxlIG5hZ8WCw7N3ZWsgYsSZZHppZSB3eXJhxbpuaWUgd2lkb2N6bnkgKi9cbiAgICBmb250LXdlaWdodDogbGlnaHRlcjsgLyogVXN0YXdpYSB3YWfEmSBjemNpb25raSBuYSAnbGlnaHRlcicsIGNvIHNwcmF3aWEsIMW8ZSB0ZWtzdCBixJlkemllIGNpZcWEc3p5IG5pxbwgc3RhbmRhcmRvd3kgKi9cbiAgICBsaW5lLWhlaWdodDogbm9ybWFsOyAvKiBVc3Rhd2lhIHd5c29rb8WbxIcgbGluaWkgbmEgJ25vcm1hbCcsIGNvIHBvendhbGEgbmEgb2Rwb3dpZWRuaWUgb2RkemllbGVuaWUgbGluaWkgdGVrc3R1ICovXG4gICAgbWFyZ2luLWJvdHRvbTogMCAhaW1wb3J0YW50OyAvKiBVc3Rhd2lhIG1hcmdpbmVzIGRvbG55IG5hIDAsIHd5bXVzemFqxIVjIGJyYWsgb2RzdMSZcHUgcG9uacW8ZWogbmFnxYLDs3drYSAqL1xuICAgIHBhZGRpbmctYm90dG9tOiAwOyAvKiBVc3V3YSBwYWRkaW5nIGRvbG55LCBlbGltaW51asSFYyB3ZXduxJl0cnpueSBvZHN0xJlwIHBvbmnFvGVqIG5hZ8WCw7N3a2EgKi9cbiAgICAvKlxuICAgICAgICAtIGBmb250LXNpemVgOiBVc3Rhd2lhIHJvem1pYXIgY3pjaW9ua2kgbmEgMjBweCwgY28gemFwZXduaWEgb2Rwb3dpZWRuacSFIHdpZG9jem5vxZvEhyB0ZWtzdHUgbmFnxYLDs3drYS5cbiAgICAgICAgLSBgZm9udC13ZWlnaHRgOiBPa3JlxZtsYSBncnVib8WbxIcgY3pjaW9ua2kuIGBsaWdodGVyYCBzcHJhd2lhLCDFvGUgdGVrc3QgbmFnxYLDs3drYSBixJlkemllIGNpZcWEc3p5IG5pxbwgc3RhbmRhcmRvd3kuXG4gICAgICAgIC0gYGxpbmUtaGVpZ2h0YDogVXN0YXdpYSB3eXNva2/Fm8SHIGxpbmlpIG5hIHdhcnRvxZvEhyBkb215xZtsbsSFLCBjbyB3cMWCeXdhIG5hIGN6eXRlbG5vxZvEhyBuYWfFgsOzd2thIHBvcHJ6ZXogb2Rwb3dpZWRuacSFIHByemVzdHJ6ZcWEIG1pxJlkenkgd2llcnN6YW1pLlxuICAgICAgICAtIGBtYXJnaW4tYm90dG9tYDogVXN0YXdpYSBtYXJnaW5lcyBkb2xueSBuYSAwLCBjbyBlbGltaW51amUgcHJ6ZXN0cnplxYQgbWnEmWR6eSBuYWfFgsOzd2tpZW0gYSBuYXN0xJlwbnltaSBlbGVtZW50YW1pIHcgbGnFm2NpZS5cbiAgICAgICAgLSBgIWltcG9ydGFudGA6IFd5bXVzemEgemFzdG9zb3dhbmllIHRlaiByZWd1xYJ5LCBuYXdldCBqZcWbbGkgaW5uZSByZWd1xYJ5IENTUyBtb2fFgnlieSB1c3Rhd2nEhyBpbm55IG1hcmdpbmVzLlxuICAgICAgICAtIGBwYWRkaW5nLWJvdHRvbWA6IFVzdGF3aWEgcGFkZGluZyBuYSAwLCBjbyBlbGltaW51amUgd2V3bsSZdHJ6bsSFIHByemVzdHJ6ZcWEIHBvbmnFvGVqIG5hZ8WCw7N3a2EuXG4gICAgKi9cbn1cblxuLnF1b3RlIHtcbiAgICBmb250LXNpemU6IDkwJTsgLyogVXN0YXdpYSByb3ptaWFyIGN6Y2lvbmtpIG5hIDkwJSBkb215xZtsbmVqIHdpZWxrb8WbY2ksIGNvIHNwcmF3aWEsIMW8ZSB0ZWtzdCBixJlkemllIG5pZWNvIG1uaWVqc3p5ICovXG4gICAgZm9udC1zdHlsZTogaXRhbGljOyAvKiBVc3Rhd2lhIHN0eWwgY3pjaW9ua2kgbmEga3Vyc3l3xJksIGNvIHd5csOzxbxuaWEgdGVrc3QgamFrbyBjeXRhdCAqL1xuICAgIGNvbG9yOiAjNjA2MDYwOyAvKiBVc3Rhd2lhIGtvbG9yIHRla3N0dSBuYSBzemFyeSAoIzYwNjA2MCksIGNvIHphcGV3bmlhIHN1YnRlbG7EhSB3aWRvY3pub8WbxIcgYmV6IG5hZG1pZXJuZWdvIGtvbnRyYXN0dSAqL1xuICAgIC8qXG4gICAgICAgIC0gYGZvbnQtc2l6ZWA6IFVzdGF3aWEgcm96bWlhciBjemNpb25raSBuYSA5MCUgZG9tecWbbG5laiB3aWVsa2/Fm2NpLCBjbyBzcHJhd2lhLCDFvGUgdGVrc3QgYsSZZHppZSBuaWVjbyBtbmllanN6eS5cbiAgICAgICAgLSBgZm9udC1zdHlsZWA6IFVzdGF3aWEgc3R5bCBjemNpb25raSBuYSBrdXJzeXfEmSwgY28gd3lyw7PFvG5pYSB0ZWtzdCBqYWtvIGN5dGF0LlxuICAgICAgICAtIGBjb2xvcmA6IFd5YsOzciBzemFyZWdvIGtvbG9ydSB0ZWtzdHUsIGt0w7NyeSB6YXBld25pYSBzdWJ0ZWxueSBrb250cmFzdCwgaWRlYWxueSBkbyBjeXRhdMOzdy5cbiAgICAqL1xufVxuXG4uc3Vic2NyaWJlLWJ0biAuYnRuIHtcbiAgICBib3JkZXI6IG1lZGl1bSBub25lOyAvKiBVc3V3YSBvYnJhbW93YW5pZSBwcnp5Y2lza3UsIGFieSBwb3pvc3RhxYIgYmV6IHJhbWtpICovXG4gICAgYm9yZGVyLXJhZGl1czogNHB4OyAvKiBaYW9rcsSFZ2xhIHJvZ2kgcHJ6eWNpc2t1IG8gNHB4LCBuYWRhasSFYyBtdSDFgmFnb2RuaWVqc3p5IHd5Z2zEhWQgKi9cbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IC8qIFVzdGF3aWEgZWxlbWVudCBqYWtvIGlubGluZS1ibG9jaywgY28gcG96d2FsYSBuYSBzdG9zb3dhbmllIHN6ZXJva2/Fm2NpIGkgd3lzb2tvxZtjaSAqL1xuICAgIGhlaWdodDogNDBweDsgLyogVXN0YXdpYSB3eXNva2/Fm8SHIHByenljaXNrdSBuYSA0MHB4ICovXG4gICAgcGFkZGluZzogMDsgLyogVXN1d2EgcGFkZGluZywgYWJ5IHByenljaXNrIG5pZSBtaWHFgiB3ZXduxJl0cnpueWNoIG9kc3TEmXDDs3cgKi9cbiAgICB3aWR0aDogMTAwJTsgLyogVXN0YXdpYSBzemVyb2tvxZvEhyBwcnp5Y2lza3UgbmEgMTAwJSBkb3N0xJlwbmVqIHN6ZXJva2/Fm2NpIGtvbnRlbmVyYSAqL1xuICAgIGNvbG9yOiAjZmZmOyAvKiBVc3Rhd2lhIGtvbG9yIHRla3N0dSBwcnp5Y2lza3UgbmEgYmlhxYJ5ICovXG4gICAgbWFyZ2luLXRvcDogMTBweDsgLyogRG9kYWplIG1hcmdpbmVzIG9kIGfDs3J5LCBhYnkgcHJ6eWNpc2sgbWlhxYIgb2RzdMSZcCBvZCBpbm55Y2ggZWxlbWVudMOzdyAqL1xuICAgIC8qXG4gICAgICAgIC0gYGJvcmRlcmA6IFVzdXdhIG9icmFtb3dhbmllIHByenljaXNrdSwgYWJ5IHBvem9zdGHFgiBiZXogcmFta2kuXG4gICAgICAgIC0gYGJvcmRlci1yYWRpdXNgOiBaYW9rcsSFZ2xhIHJvZ2kgcHJ6eWNpc2t1IG8gNHB4LCBuYWRhasSFYyBtdSDFgmFnb2RuaWVqc3p5IHd5Z2zEhWQuXG4gICAgICAgIC0gYGRpc3BsYXlgOiBVc3Rhd2lhIGVsZW1lbnQgamFrbyBpbmxpbmUtYmxvY2ssIGNvIHBvendhbGEgbmEgc3Rvc293YW5pZSBzemVyb2tvxZtjaSBpIHd5c29rb8WbY2kuXG4gICAgICAgIC0gYGhlaWdodGA6IFVzdGF3aWEgd3lzb2tvxZvEhyBwcnp5Y2lza3UgbmEgNDBweCwgY28gd3DFgnl3YSBuYSBqZWdvIHByb3BvcmNqZS5cbiAgICAgICAgLSBgcGFkZGluZ2A6IFVzdXdhIHBhZGRpbmcsIGFieSBwcnp5Y2lzayBuaWUgbWlhxYIgd2V3bsSZdHJ6bnljaCBvZHN0xJlww7N3LlxuICAgICAgICAtIGB3aWR0aGA6IFVzdGF3aWEgc3plcm9rb8WbxIcgcHJ6eWNpc2t1IG5hIDEwMCUsIGNvIHNwcmF3aWEsIMW8ZSBwcnp5Y2lzayByb3pjacSFZ2Egc2nEmSBuYSBjYcWCxIUgc3plcm9rb8WbxIcga29udGVuZXJhLlxuICAgICAgICAtIGBjb2xvcmA6IFVzdGF3aWEga29sb3IgdGVrc3R1IHByenljaXNrdSBuYSBiaWHFgnksIGNvIHphcGV3bmlhIGRvYnLEhSB3aWRvY3pub8WbxIcgbmEgY2llbW55bSB0bGUuXG4gICAgICAgIC0gYG1hcmdpbi10b3BgOiBEb2RhamUgcHJ6ZXN0cnplxYQgbmFkIHByenljaXNraWVtLCB6YXBld25pYWrEhWMgb2RkemllbGVuaWUgZ28gb2QgaW5ueWNoIGVsZW1lbnTDs3cuXG4gICAgKi9cbn1cblxuLnN1YnNjcmliZS1idG4ge1xuICAgIG92ZXJmbG93OiBoaWRkZW47IC8qIFVrcnl3YSB6YXdhcnRvxZvEhywga3TDs3JhIHd5Y2hvZHppIHBvemEgZ3JhbmljZSBlbGVtZW50dSwgemFwb2JpZWdhasSFYyB3ecWbd2lldGxhbml1IG5hZG1pYXJvd2VnbyB0ZWtzdHUgbHViIG9icmF6a8OzdyAqL1xuICAgIC8qXG4gICAgICAgIC0gYG92ZXJmbG93YDogVXN0YXdpYSwgYWJ5IG5hZG1pYXJvd2EgemF3YXJ0b8WbxIcsIGt0w7NyYSBuaWUgbWllxZtjaSBzacSZIHcgb2JyxJliaWUgZWxlbWVudHUsIGJ5xYJhIHVrcnl0YSwgY28gemFwb2JpZWdhIGplaiB3ecWbd2lldGxhbml1IHBvemEga29udGVuZXJlbS5cbiAgICAqL1xufVxuXG4uc29jaWFsIGxpIHtcbiAgICBib3JkZXI6IDJweCBzb2xpZCAjQjVCNUI1OyAvKiBVc3Rhd2lhIG9icmFtb3dhbmllIG8gZ3J1Ym/Fm2NpIDJweCBpIGtvbG9yemUgI0I1QjVCNSBkbGEgZWxlbWVudMOzdyBsaXN0eSAqL1xuICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNTAlOyAvKiBVc3Rhd2lhIHphb2tyxIVnbGVuaWUgbmFyb8W8bmlrw7N3IG5hIDUwJSB3IHByemVnbMSFZGFya2FjaCBXZWJLaXQgKG5wLiBDaHJvbWUsIFNhZmFyaSkgKi9cbiAgICAtbW96LWJvcmRlci1yYWRpdXM6IDUwJTsgLyogVXN0YXdpYSB6YW9rcsSFZ2xlbmllIG5hcm/FvG5pa8OzdyBuYSA1MCUgdyBwcnplZ2zEhWRhcmthY2ggTW96aWxsYSAobnAuIEZpcmVmb3gpICovXG4gICAgLW8tYm9yZGVyLXJhZGl1czogNTAlOyAvKiBVc3Rhd2lhIHphb2tyxIVnbGVuaWUgbmFyb8W8bmlrw7N3IG5hIDUwJSB3IHN0YXJzenljaCB3ZXJzamFjaCBwcnplZ2zEhWRhcmVrIE9wZXJhICovXG4gICAgLW1zLWJvcmRlci1yYWRpdXM6IDUwJTsgLyogVXN0YXdpYSB6YW9rcsSFZ2xlbmllIG5hcm/FvG5pa8OzdyBuYSA1MCUgdyBwcnplZ2zEhWRhcmthY2ggTWljcm9zb2Z0IChucC4gSUUpICovXG4gICAgYm9yZGVyLXJhZGl1czogNTAlOyAvKiBVc3Rhd2lhIHphb2tyxIVnbGVuaWUgbmFyb8W8bmlrw7N3IG5hIDUwJSwgdHdvcnrEhWMgb2tyxIVnxYJ5IGtzenRhxYJ0IGVsZW1lbnR1ICovXG4gICAgZmxvYXQ6IGxlZnQ7IC8qIFVzdGF3aWEgZWxlbWVudHkgbGlzdHksIGFieSBwxYJ5d2HFgnkgcG8gbGV3ZWogc3Ryb25pZSwgdW1vxbxsaXdpYWrEhWMgamUgd3nFm3dpZXRsYW5pZSBvYm9rIHNpZWJpZSAqL1xuICAgIGhlaWdodDogMzZweDsgLyogVXN0YXdpYSB3eXNva2/Fm8SHIGVsZW1lbnR1IG5hIDM2cHggKi9cbiAgICBsaW5lLWhlaWdodDogMzZweDsgLyogVXN0YXdpYSB3eXNva2/Fm8SHIGxpbmlpIG5hIDM2cHgsIGNvIHd5csOzd251amUgdGVrc3QgcGlvbm93byB3IGVsZW1lbmNpZSAqL1xuICAgIG1hcmdpbjogMCA4cHggMCAwOyAvKiBEb2RhamUgbWFyZ2luZXMgOHB4IHogcHJhd2VqIHN0cm9ueSwgZWxpbWludWrEhWMgbWFyZ2luZXMgZ8Ozcm55LCBkb2xueSBpIGxld3kgKi9cbiAgICBwYWRkaW5nOiAwOyAvKiBVc3V3YSB3ZXduxJl0cnpueSBvZHN0xJlwIHcgZWxlbWVuY2llICovXG4gICAgdGV4dC1hbGlnbjogY2VudGVyOyAvKiBVc3Rhd2lhIHd5csOzd25hbmllIHRla3N0dSBuYSDFm3JvZGVrLCBjbyBzcHJhd2lhLCDFvGUgdGVrc3QgYsSZZHppZSBjZW50cm93YW55IHcgZWxlbWVuY2llICovXG4gICAgd2lkdGg6IDM2cHg7IC8qIFVzdGF3aWEgc3plcm9rb8WbxIcgZWxlbWVudHUgbmEgMzZweCAqL1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjVzIGVhc2UgMHM7IC8qIFVzdGF3aWEgYW5pbWFjasSZIGRsYSB3c3p5c3RraWNoIHfFgmHFm2Npd2/Fm2NpIENTUywgdHJ3YWrEhWPEhSAwLjUgc2VrdW5keSB6IMWCYWdvZG55bSBwcnplasWbY2llbSAqL1xuICAgIC1tb3otdHJhbnNpdGlvbjogYWxsIDAuNXMgZWFzZSAwczsgLyogVXN0YXdpYSBhbmltYWNqxJkgZGxhIHfFgmHFm2Npd2/Fm2NpIENTUyB3IHByemVnbMSFZGFya2FjaCBNb3ppbGxhICovXG4gICAgLXdlYmtpdC10cmFuc2l0aW9uOiBhbGwgMC41cyBlYXNlIDBzOyAvKiBVc3Rhd2lhIGFuaW1hY2rEmSBkbGEgd8WCYcWbY2l3b8WbY2kgQ1NTIHcgcHJ6ZWdsxIVkYXJrYWNoIFdlYktpdCAqL1xuICAgIC1tcy10cmFuc2l0aW9uOiBhbGwgMC41cyBlYXNlIDBzOyAvKiBVc3Rhd2lhIGFuaW1hY2rEmSBkbGEgd8WCYcWbY2l3b8WbY2kgQ1NTIHcgcHJ6ZWdsxIVkYXJrYWNoIE1pY3Jvc29mdCAqL1xuICAgIC1vLXRyYW5zaXRpb246IGFsbCAwLjVzIGVhc2UgMHM7IC8qIFVzdGF3aWEgYW5pbWFjasSZIGRsYSB3xYJhxZtjaXdvxZtjaSBDU1MgdyBzdGFyc3p5Y2ggd2Vyc2phY2ggcHJ6ZWdsxIVkYXJlayBPcGVyYSAqL1xuICAgIC8qXG4gICAgICAgIC0gYGJvcmRlcmA6IE9rcmXFm2xhIGdydWJvxZvEhyBpIGtvbG9yIG9icmFtb3dhbmlhIGVsZW1lbnTDs3cgbGlzdHkuXG4gICAgICAgIC0gYGJvcmRlci1yYWRpdXNgOiBaYW9rcsSFZ2xhIG5hcm/FvG5pa2kgZWxlbWVudHUsIHR3b3J6xIVjIG9rcsSFZ8WCeSBrc3p0YcWCdC5cbiAgICAgICAgLSBgZmxvYXRgOiBVc3Rhd2lhIGVsZW1lbnR5IG5hIGxld28sIHVtb8W8bGl3aWFqxIVjIGljaCB1a8WCYWQgb2JvayBzaWViaWUuXG4gICAgICAgIC0gYGhlaWdodGAgaSBgbGluZS1oZWlnaHRgOiBVc3Rhd2lhasSFIHd5c29rb8WbxIcgZWxlbWVudHUgaSB3eXNva2/Fm8SHIGxpbmlpLCB3eXLDs3dudWrEhWMgdGVrc3QgdyBwaW9uaWUuXG4gICAgICAgIC0gYG1hcmdpbmA6IFVzdGF3aWEgb2RzdMSZcCB6IHByYXdlaiBzdHJvbnksIGVsaW1pbnVqxIVjIG1hcmdpbmVzeSB6IGlubnljaCBzdHJvbi5cbiAgICAgICAgLSBgcGFkZGluZ2A6IFVzdXdhIHdzemVsa2llIHdld27EmXRyem5lIG9kc3TEmXB5LlxuICAgICAgICAtIGB0ZXh0LWFsaWduYDogVXN0YXdpYSB0ZWtzdCB3IGVsZW1lbmNpZSBuYSDFm3JvZGVrLlxuICAgICAgICAtIGB3aWR0aGA6IE9rcmXFm2xhIHN6ZXJva2/Fm8SHIGVsZW1lbnR1IG5hIDM2cHgsIGNvIHdwxYJ5d2EgbmEgamVnbyBwcm9wb3JjamUuXG4gICAgICAgIC0gYHRyYW5zaXRpb25gOiBVc3Rhd2lhIGFuaW1hY2rEmSBkbGEgd3N6eXN0a2ljaCB3xYJhxZtjaXdvxZtjaSBDU1MsIGNvIHBvendhbGEgbmEgcMWCeW5uZSBwcnplasWbY2lhIHByenkgem1pYW5pZSBzdGFudSBlbGVtZW50dS5cbiAgICAqL1xufVxuXG4uc29jaWFsIGxpIGEge1xuICAgIGNvbG9yOiAjRURFRkYxOyAvKiBVc3Rhd2lhIGtvbG9yIHRla3N0dSBsaW5rdSBuYSBqYXNueSBvZGNpZcWEIHN6YXJvxZtjaSAoI0VERUZGMSksIGNvIHphcGV3bmlhIHN1YnRlbG7EhSB3aWRvY3pub8WbxIcgbmEgY2llbW5pZWpzenljaCB0xYJhY2ggKi9cbiAgICAvKlxuICAgICAgICAtIGBjb2xvcmA6IE9rcmXFm2xhIGtvbG9yIHRla3N0dSB3IGxpbmthY2ggd2V3bsSFdHJ6IGVsZW1lbnTDs3cgbGlzdHkuIFXFvHl0eSBrb2xvciAoI0VERUZGMSkgemFwZXduaWEgc3VidGVsbsSFLCBqYXNuxIUgYmFyd8SZLCBkb2JyemUga29udHJhc3R1asSFY8SFIHogY2llbW5pZWpzenltIHTFgmVtLlxuICAgICovXG59XG5cbi5zb2NpYWwgbGk6aG92ZXIge1xuICAgIGJvcmRlcjogMnB4IHNvbGlkICMyYzNlNTA7IC8qIFVzdGF3aWEgb2JyYW1vd2FuaWUgbyBncnVib8WbY2kgMnB4IGkga29sb3J6ZSAjMmMzZTUwIChjaWVtbnkgb2RjaWXFhCBncmFuYXR1KSBwb2RjemFzIG5hamVjaGFuaWEga3Vyc29yZW0gKi9cbiAgICBiYWNrZ3JvdW5kOiAjMmMzZTUwOyAvKiBVc3Rhd2lhIHTFgm8gbmEga29sb3IgIzJjM2U1MCAoY2llbW55IGdyYW5hdCkgcG9kY3phcyBuYWplY2hhbmlhIGt1cnNvcmVtICovXG4gICAgLypcbiAgICAgICAgLSBgYm9yZGVyYDogWm1pZW5pYSBvYnJhbW93YW5pZSBuYSAycHggeiBrb2xvcmVtICMyYzNlNTAsIHR3b3J6xIVjIHd5cmHFum55IGVmZWt0IG9icmFtb3dhbmlhIHBvZGN6YXMgbmFqZWNoYW5pYSBrdXJzb3JlbS5cbiAgICAgICAgLSBgYmFja2dyb3VuZGA6IFVzdGF3aWEgdMWCbyBuYSBrb2xvciAjMmMzZTUwLCBjbyBwb3dvZHVqZSwgxbxlIGVsZW1lbnQgbmFiaWVyYSBjaWVtbmllanN6ZWdvIG9kY2llbmlhIHBvZGN6YXMgaW50ZXJha2NqaSB1xbx5dGtvd25pa2EuXG4gICAgKi9cbn1cblxuLnNvY2lhbCBsaSBhIGkge1xuICAgIGZvbnQtc2l6ZTogMTZweDsgLyogVXN0YXdpYSByb3ptaWFyIGN6Y2lvbmtpIGlrb25raSBuYSAxNnB4LCBjbyB6YXBld25pYSBvZHBvd2llZG5pxIUgd2llbGtvxZvEhyBpa29ueSB3IGxpbmt1ICovXG4gICAgbWFyZ2luOiAwIDAgMCA1cHg7IC8qIERvZGFqZSBtYXJnaW5lcyA1cHggcG8gbGV3ZWogc3Ryb25pZSBpa29ueSwgYWJ5IG9kZHppZWxpxIcgasSFIG9kIHRla3N0dSBsdWIgaW5ueWNoIGVsZW1lbnTDs3cgKi9cbiAgICBjb2xvcjogI0VERUZGMSAhaW1wb3J0YW50OyAvKiBVc3Rhd2lhIGtvbG9yIGlrb255IG5hIGphc255IG9kY2llxYQgc3phcm/Fm2NpICgjRURFRkYxKSwgd3ltdXN6YWrEhWMgemFzdG9zb3dhbmllIHRlaiByZWd1xYJ5IHByemV6IGAhaW1wb3J0YW50YCAqL1xuICAgIC8qXG4gICAgICAgIC0gYGZvbnQtc2l6ZWA6IE9rcmXFm2xhIHdpZWxrb8WbxIcgY3pjaW9ua2kgaWtvbnksIGt0w7NyYSBqZXN0IHd5xZt3aWV0bGFuYSB3IGxpbmt1LlxuICAgICAgICAtIGBtYXJnaW5gOiBEb2RhamUgcHJ6ZXN0cnplxYQgcG8gbGV3ZWogc3Ryb25pZSBpa29ueSwgY28gcG9wcmF3aWEgamVqIHd5csOzd25hbmllIHogaW5ueW1pIGVsZW1lbnRhbWkgdyBsaW5rdS5cbiAgICAgICAgLSBgY29sb3JgOiBVc3Rhd2lhIGtvbG9yIGlrb255IG5hIGphc255IG9kY2llxYQgc3phcm/Fm2NpICgjRURFRkYxKSwgdcW8eXdhasSFYyBgIWltcG9ydGFudGAsIGFieSB3eW11c2nEhyBzdG9zb3dhbmllIHRlaiByZWd1xYJ5LCBuYXdldCBqZcWbbGkgaW5uZSBzdHlsZSBqxIUgbmFkcGlzdWrEhS5cbiAgICAqL1xufVxuXG4uZm9vdGVyLWJvdHRvbSB7XG4gICAgYmFja2dyb3VuZDogIzQwRTBEMDsgLyogVXN0YXdpYSB0xYJvIG5hIGplZG5vbGl0eSBrb2xvciAjNDBFMEQwICh0dXJrdXNvd3kpIGpha28gZG9tecWbbG55IGtvbG9yIHTFgmEgKi9cbiAgICBiYWNrZ3JvdW5kOiAtd2Via2l0LWxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI0ZGMDA4MCwgI0ZGOEMwMCwgIzQwRTBEMCk7IC8qIERlZmluaXVqZSB0xYJvIHcgcG9zdGFjaSBncmFkaWVudHUgeiBwcmF3ZWogZG8gbGV3ZWo6IHLDs8W8b3d5ICgjRkYwMDgwKSwgcG9tYXJhxYRjem93eSAoI0ZGOEMwMCksIHR1cmt1c293eSAoIzQwRTBEMCkgZGxhIHByemVnbMSFZGFyZWsgb2JzxYJ1Z3VqxIVjeWNoIC13ZWJraXQgKi9cbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsICNGRjAwODAsICNGRjhDMDAsICM0MEUwRDApOyAvKiBEZWZpbml1amUgdMWCbyB3IHBvc3RhY2kgZ3JhZGllbnR1IHogcHJhd2VqIGRvIGxld2VqOiByw7PFvG93eSAoI0ZGMDA4MCksIHBvbWFyYcWEY3pvd3kgKCNGRjhDMDApLCB0dXJrdXNvd3kgKCM0MEUwRDApICovXG4gICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNEREREREQ7IC8qIFVzdGF3aWEgZ8Ozcm5lIG9icmFtb3dhbmllIG5hIDFweCB3IGtvbG9yemUgc3phcm/Fm2NpICgjREREREREKSwgdHdvcnrEhWMgc3VidGVsbmUgb2RkemllbGVuaWUgc2VrY2ppICovXG4gICAgcGFkZGluZy10b3A6IDIwcHg7IC8qIERvZGFqZSBwcnplc3RyemXFhCAyMHB4IG9kIGfDs3J5LCBhYnkgemFwZXduacSHIG9kcG93aWVkbmnEhSBvZGxlZ8WCb8WbxIcgb2QgaW5ueWNoIGVsZW1lbnTDs3cgKi9cbiAgICBwYWRkaW5nLWJvdHRvbTogNDBweDsgLyogRG9kYWplIHByemVzdHJ6ZcWEIDQwcHggb2QgZG/FgnUsIGFieSB6YXBld25pxIcgd2nEmWtzenkgb2RzdMSZcCBuYSBkb2xlIHNla2NqaSAqL1xuICAgIGNvbG9yOiAjZmZmOyAvKiBVc3Rhd2lhIGtvbG9yIHRla3N0dSBuYSBiaWHFgnkgKCNmZmYpLCB6YXBld25pYWrEhWMgZG9icnkga29udHJhc3QgeiBjaWVtbnltIHTFgmVtICovXG4gICAgLypcbiAgICAgICAgLSBgYmFja2dyb3VuZGA6IERlZmluaXVqZSB0xYJvIHcgcG9zdGFjaSBqZWRub2xpdGVnbyBrb2xvcnUgbHViIGdyYWRpZW50dS4gR3JhZGllbnQgcHJ6ZWNob2R6aSB6IHLDs8W8b3dlZ28gcHJ6ZXogcG9tYXJhxYRjem93eSBkbyB0dXJrdXNvd2Vnby5cbiAgICAgICAgLSBgYm9yZGVyLXRvcGA6IFR3b3J6eSBjaWVua8SFIGxpbmnEmSBvZGR6aWVsYWrEhWPEhSB0ZW4gZWxlbWVudCBvZCBwb3ByemVkemFqxIVjeWNoIGdvIHNla2NqaS5cbiAgICAgICAgLSBgcGFkZGluZy10b3BgIGkgYHBhZGRpbmctYm90dG9tYDogWmFwZXduaWFqxIUgb2Rwb3dpZWRuacSFIHByemVzdHJ6ZcWEIHdld27EmXRyem7EhSwgdHdvcnrEhWMgcHJ6ZXN0cnplxYQgbWnEmWR6eSB0cmXFm2NpxIUgYSBrcmF3xJlkemlhbWkgc2VrY2ppLlxuICAgICAgICAtIGBjb2xvcmA6IFVzdGF3aWEga29sb3IgdGVrc3R1IG5hIGJpYcWCeSwgY28gemFwZXduaWEgd3lzb2tpIGtvbnRyYXN0IGkgbGVwc3rEhSBjenl0ZWxub8WbxIcgbmEgdGxlIGdyYWRpZW50dS5cbiAgICAqL1xufVxuXG4uZm9vdGVyLWJvdHRvbSBwLnB1bGwtbGVmdCB7XG4gICAgcGFkZGluZy10b3A6IDZweDsgLyogRG9kYWplIDZweCBwcnplc3RyemVuaSBvZCBnw7NyeSBkbGEgcGFyYWdyYWZ1IHoga2xhc8SFICdwdWxsLWxlZnQnLCBjbyB6YXBld25pYSBvZHBvd2llZG5pxIUgb2RsZWfFgm/Fm8SHIG9kIHBvcHJ6ZWR6YWrEhWN5Y2ggZWxlbWVudMOzdyAqL1xuICAgIC8qXG4gICAgICAgIC0gYHBhZGRpbmctdG9wYDogVXN0YXdpYSBwcnplc3RyemXFhCA2cHggb2QgZ8OzcnksIGFieSB6YXBld25pxIcgd3lyw7N3bmFuaWUgeiBpbm55bWkgZWxlbWVudGFtaSB3IHNla2NqaSBzdG9wa2kuXG4gICAgKi9cbn1cblxuLnBheW1lbnRzIHtcbiAgICBmb250LXNpemU6IDEuNWVtOyAvKiBVc3Rhd2lhIHJvem1pYXIgY3pjaW9ua2kgbmEgMS41ZW0sIGNvIHNwcmF3aWEsIMW8ZSB0ZWtzdCBixJlkemllIDEuNSByYXp5IHdpxJlrc3p5IG5pxbwgcm96bWlhciBjemNpb25raSBlbGVtZW50dSBuYWRyesSZZG5lZ28gKi9cbiAgICAvKlxuICAgICAgICAtIGBmb250LXNpemVgOiBVc3Rhd2lhIHJvem1pYXIgY3pjaW9ua2kgbmEgMS41ZW0sIGNvIHNwcmF3aWEsIMW8ZSB0ZWtzdCB3IGVsZW1lbmNpZSBgLnBheW1lbnRzYCBixJlkemllIHdpxJlrc3p5IHcgcG9yw7N3bmFuaXUgZG8gZG9tecWbbG5lZ28gcm96bWlhcnUgdGVrc3R1IHcgamVnbyBrb250ZW5lcnplLlxuICAgICovXG59XG5cbi5tYXAtY29udGFpbmVyIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuOyAvKiBVa3J5d2EgemF3YXJ0b8WbxIcgd3ljaG9kesSFY8SFIHBvemEga29udGVuZXIsIHphcGV3bmlhasSFYywgxbxlIG1hcGEgYsSZZHppZSBkb2JyemUgZG9wYXNvd2FuYSBkbyBrb250ZW5lcmEgKi9cbiAgICBwYWRkaW5nLWJvdHRvbTogNTYuMjUlOyAvKiBVc3Rhd2lhIGRvbG55IHBhZGRpbmcgbmEgNTYuMjUlLCBjbyBwb3p3YWxhIG5hIHphY2hvd2FuaWUgcHJvcG9yY2ppIDE2OjkgZGxhIG1hcHkgKi9cbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7IC8qIFVzdGF3aWEgcG96eWNqxJkgZWxlbWVudHUgbmEgJ3JlbGF0aXZlJywgY28gcG96d2FsYSBuYSBrb250cm9sb3dhbmllIHBvenljam9ub3dhbmlhIGVsZW1lbnTDs3cgd2V3bsSZdHJ6bnljaCB3emdsxJlkZW0gdGVnbyBrb250ZW5lcmEgKi9cbiAgICBoZWlnaHQ6IDA7IC8qIFVzdGF3aWEgd3lzb2tvxZvEhyBuYSAwLCBwb25pZXdhxbwgd3lzb2tvxZvEhyBqZXN0IGtvbnRyb2xvd2FuYSBwcnpleiBwYWRkaW5nLWJvdHRvbSwgY28gdXRyenltdWplIHByb3BvcmNqZSAqL1xuICAgIC8qXG4gICAgICAgIC0gYG92ZXJmbG93OiBoaWRkZW5gOiBVa3J5d2EgemF3YXJ0b8WbxIcgd3ljaG9kesSFY8SFIHBvemEgd3ltaWFyeSBrb250ZW5lcmEsIHphcG9iaWVnYWrEhWMgcHJ6ZXdpamFuaXUgbWFweS5cbiAgICAgICAgLSBgcGFkZGluZy1ib3R0b21gOiBVc3Rhd2lhIHBhZGRpbmcsIGt0w7NyeSBvZHBvd2lhZGEgemEgcHJvcG9yY2plIG1hcHkgKDU2LjI1JSBvZHBvd2lhZGEgcHJvcG9yY2ppIDE2OjkpLlxuICAgICAgICAtIGBwb3NpdGlvbjogcmVsYXRpdmVgOiBVbW/FvGxpd2lhIHBvenljam9ub3dhbmllIGVsZW1lbnTDs3cgd2V3bsSZdHJ6bnljaCB3emdsxJlkZW0ga29udGVuZXJhLCB6YWNob3d1asSFYyBrb250cm9sxJkgbmFkIHVrxYJhZGVtLlxuICAgICAgICAtIGBoZWlnaHQ6IDBgOiBVc3Rhd2lhIHd5c29rb8WbxIcgbmEgMCwgcG9uaWV3YcW8IGplc3Qgb25hIHV6YWxlxbxuaW9uYSBvZCBwYWRkaW5ndSwgY28gcG96d2FsYSBuYSB1enlza2FuaWUgb2Rwb3dpZWRuaWNoIHByb3BvcmNqaSB3IHByenlwYWRrdSBtYXB5LlxuICAgICovXG59XG5cbi5tYXAtY29udGFpbmVyIGlmcmFtZSB7XG4gICAgbGVmdDogMDsgLyogVXN0YXdpYSBwb3p5Y2rEmSBpZnJhbWUgbmEgbGV3xIUga3Jhd8SZZMW6IGtvbnRlbmVyYSAubWFwLWNvbnRhaW5lciAqL1xuICAgIHRvcDogMDsgLyogVXN0YXdpYSBwb3p5Y2rEmSBpZnJhbWUgbmEgZ8Ozcm7EhSBrcmF3xJlkxboga29udGVuZXJhIC5tYXAtY29udGFpbmVyICovXG4gICAgaGVpZ2h0OiAxMDAlOyAvKiBVc3Rhd2lhIHd5c29rb8WbxIcgaWZyYW1lIG5hIDEwMCUgd3lzb2tvxZtjaSBrb250ZW5lcmEgLm1hcC1jb250YWluZXIgKi9cbiAgICB3aWR0aDogMTAwJTsgLyogVXN0YXdpYSBzemVyb2tvxZvEhyBpZnJhbWUgbmEgMTAwJSBzemVyb2tvxZtjaSBrb250ZW5lcmEgLm1hcC1jb250YWluZXIgKi9cbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7IC8qIFVzdGF3aWEgcG96eWNqxJkgaWZyYW1lIG5hICdhYnNvbHV0ZScsIGNvIHVtb8W8bGl3aWEgcHJlY3l6eWpuZSB1bWllanNjb3dpZW5pZSB3ZXduxIV0cnoga29udGVuZXJhIC5tYXAtY29udGFpbmVyICovXG4gICAgLypcbiAgICAgICAgLSBgbGVmdGAgaSBgdG9wYDogVXN0YXdpYWrEhSBwb3p5Y2rEmSBpZnJhbWUgbmEgZ8Ozcm55IGxld3kgcsOzZyBrb250ZW5lcmEsIGNvIHNwcmF3aWEsIMW8ZSBpZnJhbWUgemFjenluYSBzacSZIG9kIHRlZ28gcHVua3R1LlxuICAgICAgICAtIGBoZWlnaHRgIGkgYHdpZHRoYDogVXN0YXdpYWrEhSB3eW1pYXJ5IGlmcmFtZSBuYSAxMDAlIHN6ZXJva2/Fm2NpIGkgd3lzb2tvxZtjaSBrb250ZW5lcmEsIGNvIHNwcmF3aWEsIMW8ZSBpZnJhbWUgd3lwZcWCbmlhIGNhxYJ5IGRvc3TEmXBueSBvYnN6YXIuXG4gICAgICAgIC0gYHBvc2l0aW9uOiBhYnNvbHV0ZWA6IFBvenljam9udWplIGlmcmFtZSB3emdsxJlkZW0gbmFqYmxpxbxzemVnbyBlbGVtZW50dSB6IHBvenljasSFIHLDs8W8bsSFIG9kIGBzdGF0aWNgICh3IHR5bSBwcnp5cGFka3Uga29udGVuZXIgLm1hcC1jb250YWluZXIpLlxuICAgICovXG59XG5cbi8qIFNla2NqYSBmb3JtdWxhcnp5ICovXG5mb3JtIGxhYmVsLmVycm9yIHtcbiAgICBwYWRkaW5nLXRvcDogNXB4OyAvKiBEb2RhamUgNXB4IHByemVzdHJ6ZW5pIG9kIGfDs3J5LCBhYnkgZXR5a2lldGEgeiBixYLEmWRlbSBtaWHFgmEgb2Rwb3dpZWRuaSBvZHN0xJlwIG9kIGlubnljaCBlbGVtZW50w7N3ICovXG4gICAgY29sb3I6IHJlZDsgLyogVXN0YXdpYSBrb2xvciB0ZWtzdHUgbmEgY3plcndvbnksIGFieSB3eXLDs8W8bmnEhyBixYLEhWQgKi9cbiAgICBkaXNwbGF5OiBibG9jazsgLyogVXN0YXdpYSBldHlraWV0xJkgamFrbyBibG9rb3d5IGVsZW1lbnQsIGNvIHphcGV3bmlhLCDFvGUgYsSZZHppZSB6YWptb3dhxIcgcGXFgm7EhSBzemVyb2tvxZvEhyBpIHphY3p5bmHEhyBzacSZIHcgbm93ZWogbGluaWkgKi9cbiAgICBmb250LXNpemU6IDEwcHQ7IC8qIFVzdGF3aWEgcm96bWlhciBjemNpb25raSBuYSAxMHB0LCBjbyBzcHJhd2lhLCDFvGUgdGVrc3QgeiBixYLEmWRlbSBqZXN0IG1uaWVqc3p5IG5pxbwgZG9tecWbbG55IHRla3N0IGZvcm11bGFyemEgKi9cbiAgICAvKlxuICAgICAgICAtIGBwYWRkaW5nLXRvcGA6IERvZGFqZSBwcnplc3RyemXFhCA1cHggb2QgZ8OzcnksIGFieSBldHlraWV0YSB6IGLFgsSZZGVtIG1pYcWCYSBvZHN0xJlwIG9kIGlubnljaCBlbGVtZW50w7N3IGZvcm11bGFyemEuXG4gICAgICAgIC0gYGNvbG9yYDogVXN0YXdpYSBrb2xvciB0ZWtzdHUgbmEgY3plcndvbnksIGNvIHVtb8W8bGl3aWEgxYJhdHdlIHphdXdhxbxlbmllIGtvbXVuaWthdHUgbyBixYLEmWR6aWUuXG4gICAgICAgIC0gYGRpc3BsYXk6IGJsb2NrYDogVXN0YXdpYSB3ecWbd2lldGxhbmllIGV0eWtpZXR5IGpha28gZWxlbWVudCBibG9rb3d5LCBjbyBzcHJhd2lhLCDFvGUgemFjenluYSBzacSZIG9uYSB3IG5vd2VqIGxpbmlpIGkgbWEgcGXFgm7EhSBzemVyb2tvxZvEhy5cbiAgICAgICAgLSBgZm9udC1zaXplYDogT2tyZcWbbGEgcm96bWlhciBjemNpb25raSBuYSAxMHB0LCBjbyBzcHJhd2lhLCDFvGUgdGVrc3QgamVzdCBtbmllanN6eSBuacW8IHN0YW5kYXJkb3d5IHRla3N0IHcgZm9ybXVsYXJ6dSwgYWxlIG5hZGFsIHdpZG9jem55LlxuICAgICovXG59XG5cbi5pbnZhbGlkLWZlZWRiYWNrIHtcbiAgICBwYWRkaW5nLXRvcDogNXB4OyAvKiBEb2RhamUgNXB4IHByemVzdHJ6ZW5pIG9kIGfDs3J5LCBhYnkga29tdW5pa2F0IG8gYsWCxJlkemllIG1pYcWCIG9kcG93aWVkbmkgb2RzdMSZcCBvZCBpbm55Y2ggZWxlbWVudMOzdyAqL1xuICAgIGNvbG9yOiByZWQ7IC8qIFVzdGF3aWEga29sb3IgdGVrc3R1IG5hIGN6ZXJ3b255LCBhYnkgd3lyw7PFvG5pxIcgd2lhZG9tb8WbxIcgbyBixYLEmWR6aWUgKi9cbiAgICBkaXNwbGF5OiBibG9jazsgLyogVXN0YXdpYSBlbGVtZW50IGpha28gYmxva293eSwgY28gc3ByYXdpYSwgxbxlIGLEmWR6aWUgemFqbW93YcSHIHBlxYJuxIUgc3plcm9rb8WbxIcgaSB6YWN6eW5hxIcgc2nEmSB3IG5vd2VqIGxpbmlpICovXG4gICAgZm9udC1zaXplOiAxMHB0OyAvKiBVc3Rhd2lhIHJvem1pYXIgY3pjaW9ua2kgbmEgMTBwdCwgY28gc3ByYXdpYSwgxbxlIHRla3N0IGLFgsSZZHUgamVzdCBtbmllanN6eSBuacW8IHN0YW5kYXJkb3d5IHRla3N0ICovXG4gICAgLypcbiAgICAgICAgLSBgcGFkZGluZy10b3BgOiBEb2RhamUgcHJ6ZXN0cnplxYQgNXB4IG9kIGfDs3J5LCBhYnkga29tdW5pa2F0IG8gYsWCxJlkemllIG1pYcWCIHByemVzdHJ6ZcWEIHcgc3Rvc3Vua3UgZG8gaW5ueWNoIGVsZW1lbnTDs3cuXG4gICAgICAgIC0gYGNvbG9yYDogVXN0YXdpYSBjemVyd29ueSBrb2xvciB0ZWtzdHUsIGNvIHphcGV3bmlhLCDFvGUga29tdW5pa2F0IG8gYsWCxJlkemllIGplc3QgxYJhdHd5IGRvIHphdXdhxbxlbmlhLlxuICAgICAgICAtIGBkaXNwbGF5OiBibG9ja2A6IFVzdGF3aWEgd3nFm3dpZXRsYW5pZSBlbGVtZW50dSBqYWtvIGJsb2tvd2VnbywgY28gemFwZXduaWEgcGXFgm7EhSBzemVyb2tvxZvEhyBpIHphY3p5bmEgbm93xIUgbGluacSZLlxuICAgICAgICAtIGBmb250LXNpemVgOiBPa3JlxZtsYSByb3ptaWFyIGN6Y2lvbmtpIG5hIDEwcHQsIGNvIHNwcmF3aWEsIMW8ZSB0ZWtzdCBqZXN0IHd5cmHFum55LCBhbGUgbmllIGRvbWludWrEhWN5IHcgZm9ybXVsYXJ6dS5cbiAgICAqL1xufVxuXG4uZm9ybS1ncm91cCB7XG4gICAgcGFkZGluZy10b3A6IDE1cHg7IC8qIERvZGFqZSBwcnplc3RyemXFhCAxNXB4IG9kIGfDs3J5LCBhYnkgemFwZXduacSHIG9kcG93aWVkbmkgb2RzdMSZcCBtacSZZHp5IGdydXDEhSBww7NsIGZvcm11bGFyemEgYSBpbm55bWkgZWxlbWVudGFtaSAqL1xuICAgIC8qXG4gICAgICAgIC0gYHBhZGRpbmctdG9wYDogV3Byb3dhZHphIDE1cHggcHJ6ZXN0cnplbmkgb2QgZ8OzcnksIGNvIHBvcHJhd2lhIGN6eXRlbG5vxZvEhyBmb3JtdWxhcnphIGkgemFwZXduaWEgb2Rwb3dpZWRuacSFIHNlcGFyYWNqxJkgbWnEmWR6eSBlbGVtZW50YW1pLlxuICAgICovXG59XG5cbnRkID4gLmZvcm0tZ3JvdXAge1xuICAgIHBhZGRpbmc6IDBweDsgLyogVXN1d2Egd2V3bsSZdHJ6bnkgb2RzdMSZcCAocGFkZGluZykgdyBncnVwaWUgZm9ybXVsYXJ6eSB3IGtvbcOzcmthY2ggdGFiZWxpLCBjbyBwb3p3YWxhIG5hIHBlxYJuZSBkb3Bhc293YW5pZSBlbGVtZW50w7N3IGRvIHN6ZXJva2/Fm2NpIGtvbcOzcmtpICovXG4gICAgLypcbiAgICAgICAgLSBgcGFkZGluZ2A6IFVzdGF3aWEgcGFkZGluZyBuYSAwLCBjbyBlbGltaW51amUgd2V3bsSZdHJ6bmUgbWFyZ2luZXN5IHcgZ3J1cGllIGZvcm11bGFyenksIHphcGV3bmlhasSFYywgxbxlIGVsZW1lbnR5IHcgdGFiZWxpIGLEmWTEhSBiYXJkemllaiB6d2FydHkuXG4gICAgKi9cbn1cblxuLnJlc2VydmUge1xuICAgIGZvbnQtc2l6ZTogMTJweDsgLyogVXN0YXdpYSByb3ptaWFyIGN6Y2lvbmtpIG5hIDEycHgsIGNvIHNwcmF3aWEsIMW8ZSB0ZWtzdCB3IGVsZW1lbmNpZSBixJlkemllIG1uaWVqc3p5IG5pxbwgc3RhbmRhcmRvd3kgKi9cbiAgICB0ZXh0LWFsaWduOiBqdXN0aWZ5OyAvKiBXeXLDs3dudWplIHRla3N0IGRvIG9idSBrcmF3xJlkemksIGNvIHNwcmF3aWEsIMW8ZSBsaW5pZSB0ZWtzdHUgYsSZZMSFIHJvemNpxIVnbmnEmXRlLCBhIHRla3N0IHLDs3dub21pZXJuaWUgd3lwZcWCbmkgY2HFgsSFIHN6ZXJva2/Fm8SHIGVsZW1lbnR1ICovXG4gICAgLypcbiAgICAgICAgLSBgZm9udC1zaXplYDogT2tyZcWbbGEgcm96bWlhciBjemNpb25raSBuYSAxMnB4LCBjbyB6YXBld25pYSwgxbxlIHRla3N0IGLEmWR6aWUgd3lyYcW6bnksIGFsZSBtbmllanN6eSBuacW8IGRvbXnFm2xueSB0ZWtzdCB3IGVsZW1lbmNpZS5cbiAgICAgICAgLSBgdGV4dC1hbGlnbmA6IFd5csOzd251amUgdGVrc3QgZG8gbGV3ZWogaSBwcmF3ZWoga3Jhd8SZZHppLCBjbyB0d29yenkgcsOzd27EhSBzemVyb2tvxZvEhyBsaW5paSB0ZWtzdHUgdyBlbGVtZW5jaWUuXG4gICAgKi9cbn1cblxuLyogV3liw7NyIGRvc3TEmXBueWNoIHBva29pIHcgcGllcndzenltIGtyb2t1IHJlemVyd2FjamkuICovXG4ucmVzZXJ2YXRpb24tYXZhaWxhYmlsaXR5IHtcbiAgICBtYXJnaW4tdG9wOiAxLjI1cmVtO1xufVxuXG4vKiBLb211bmlrYXQgd3Nww7NsbnkgZGxhIMWCYWRvd2FuaWEsIGJyYWt1IHBva29pIGkgYsWCxJlkdSBwb8WCxIVjemVuaWEuICovXG4ucmVzZXJ2YXRpb24tYXZhaWxhYmlsaXR5LXN0YXR1cyB7XG4gICAgbWFyZ2luLXRvcDogMC43NXJlbTtcbiAgICBwYWRkaW5nOiAwLjlyZW0gMXJlbTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyMSwgMTIxLCA1OCwgMC4yOCk7XG4gICAgYm9yZGVyLXJhZGl1czogMC42cmVtO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMTg2LCAxNzMsIDEzOSwgMC4xMik7XG4gICAgY29sb3I6ICMzZjNiMzE7XG59XG5cbi5yZXNlcnZhdGlvbi1hdmFpbGFiaWxpdHktc3RhdHVzLmlzLWxvYWRpbmc6OmJlZm9yZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiAxcmVtO1xuICAgIGhlaWdodDogMXJlbTtcbiAgICBtYXJnaW4tcmlnaHQ6IDAuNTVyZW07XG4gICAgYm9yZGVyOiAycHggc29saWQgcmdiYSgxMjEsIDEyMSwgNTgsIDAuMjgpO1xuICAgIGJvcmRlci10b3AtY29sb3I6ICM3OTc5M2E7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIHZlcnRpY2FsLWFsaWduOiAtMC4xNXJlbTtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIGFuaW1hdGlvbjogcmVzZXJ2YXRpb24tYXZhaWxhYmlsaXR5LXNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7XG59XG5cbi5yZXNlcnZhdGlvbi1hdmFpbGFiaWxpdHktc3RhdHVzLmlzLWVycm9yIHtcbiAgICBib3JkZXItY29sb3I6IHJnYmEoMTUzLCA2MywgNDUsIDAuMyk7XG4gICAgYmFja2dyb3VuZDogcmdiYSgxNTMsIDYzLCA0NSwgMC4wOCk7XG4gICAgY29sb3I6ICM3MTM4MmQ7XG59XG5cbi8qIEJyYWsgcG9rb2kgamVzdCBwZcWCbnltIHN0YW5lbSBiaXpuZXNvd3ltLCBkbGF0ZWdvIG90cnp5bXVqZSB3xYJhc27EhSBrYXJ0xJkgemFtaWFzdCBhbGVydHUgdGVjaG5pY3puZWdvLiAqL1xuLnJlc2VydmF0aW9uLWF2YWlsYWJpbGl0eS1zdGF0dXMuaXMtZW1wdHkge1xuICAgIHBhZGRpbmc6IDA7XG4gICAgYm9yZGVyOiAwO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xufVxuXG4ucmVzZXJ2YXRpb24tZW1wdHktY2FyZCB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyMSwgMTIxLCA1OCwgMC4yNCk7XG4gICAgYm9yZGVyLXJhZGl1czogMXJlbTtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTYpIDAlLCByZ2JhKDI0NSwgMjQxLCAyMzEsIDAuOTYpIDEwMCUpO1xuICAgIGJveC1zaGFkb3c6XG4gICAgICAgIDAgOHB4IDIwcHggcmdiYSg3OSwgNzUsIDMxLCAwLjA4KSxcbiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzIpO1xufVxuXG4ucmVzZXJ2YXRpb24tZW1wdHktY2FyZF9faGVhZGluZyB7XG4gICAgcGFkZGluZzogMC44NXJlbSAxcmVtIDAuNzVyZW07XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMTIxLCAxMjEsIDU4LCAwLjIpO1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICNmZmZhZjEgMCUsICNmN2VkZGMgMTAwJSk7XG4gICAgY29sb3I6ICM1YTNkMTI7XG4gICAgZm9udC1mYW1pbHk6IEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIsIHNlcmlmO1xuICAgIGZvbnQtc2l6ZTogMS4xNnJlbTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjI1O1xufVxuXG4ucmVzZXJ2YXRpb24tZW1wdHktY2FyZF9fYm9keSB7XG4gICAgcGFkZGluZzogMXJlbTtcbn1cblxuLnJlc2VydmF0aW9uLWVtcHR5LWNhcmRfX2JvZHkgcCB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGNvbG9yOiAjNTU0NjJmO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG5cbi5yZXNlcnZhdGlvbi1lbXB0eS1jYXJkX19pbnN0cnVjdGlvbiB7XG4gICAgcGFkZGluZzogMC43cmVtIDAuODVyZW07XG4gICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxNDMsIDE2OCwgMTIwLCAwLjM0KTtcbiAgICBib3JkZXItbGVmdDogNHB4IHNvbGlkICM4ZmE4Nzg7XG4gICAgYm9yZGVyLXJhZGl1czogMC42NXJlbTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0NCwgMjQ5LCAyMzksIDAuODIpO1xuICAgIGNvbG9yOiAjNGQ0NTJmICFpbXBvcnRhbnQ7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cblxuLnJlc2VydmF0aW9uLWVtcHR5LWNhcmRfX2NvbnRhY3Qge1xuICAgIG1hcmdpbi10b3A6IDAuNzVyZW0gIWltcG9ydGFudDtcbiAgICBwYWRkaW5nLXRvcDogMC43NXJlbTtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgxMjEsIDEyMSwgNTgsIDAuMTUpO1xufVxuXG4jY29udGVudCAucmVzZXJ2YXRpb24tZW1wdHktY2FyZF9fcGhvbmUge1xuICAgIGNvbG9yOiAjNGY0YjFmO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLnJlc2VydmF0aW9uLXJvb20tbGVnZW5kIHtcbiAgICBtYXJnaW46IDFyZW0gMCAwLjc1cmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgY29sb3I6ICMzNDMxMjY7XG59XG5cbi8qIER3aWUga29sdW1ueSBuYSB3acSZa3N6eWNoIGVrcmFuYWNoOyB1a8WCYWQgbW9iaWxueSBqZXN0IHpkZWZpbmlvd2FueSBuacW8ZWouICovXG4ucmVzZXJ2YXRpb24tcm9vbS1ncmlkIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDIsIG1pbm1heCgwLCAxZnIpKTtcbiAgICBnYXA6IDAuODVyZW07XG59XG5cbi8qIFByenkgbmllcGFyenlzdGVqIGxpY3piaWUgcG9rb2kgb3N0YXRuaWEga2FydGEgemFjaG93dWplIHN6ZXJva2/Fm8SHIGtvbHVtbnkgaSBqZXN0IHd5xZtyb2Rrb3dhbmEuICovXG4ucmVzZXJ2YXRpb24tcm9vbS1ncmlkID4gLnJlc2VydmF0aW9uLXJvb20tY2FyZDpsYXN0LWNoaWxkOm50aC1jaGlsZChvZGQpIHtcbiAgICBncmlkLWNvbHVtbjogMSAvIC0xO1xuICAgIGp1c3RpZnktc2VsZjogY2VudGVyO1xuICAgIHdpZHRoOiBjYWxjKCgxMDAlIC0gMC44NXJlbSkgLyAyKTtcbn1cblxuLyogUG9kc3Rhd293eSB3eWdsxIVkIGthcnR5IG5hd2nEhXp1amUgZG8gcGlhc2tvd2VqIHBhbGV0eSBBc3lzdGVudGEgUmV6ZXJ3YWNqaS4gKi9cbmxhYmVsLnJlc2VydmF0aW9uLXJvb20tY2FyZCB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1pbi1oZWlnaHQ6IDEwMCU7XG4gICAgcGFkZGluZzogMCAzcmVtIDFyZW0gMXJlbTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTIxLCAxMjEsIDU4LCAwLjI0KTtcbiAgICBib3JkZXItcmFkaXVzOiAxcmVtO1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NikgMCUsIHJnYmEoMjQ1LCAyNDEsIDIzMSwgMC45NikgMTAwJSk7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgICAgMCA4cHggMjBweCByZ2JhKDc5LCA3NSwgMzEsIDAuMDgpLFxuICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43Mik7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE4cyBlYXNlLCBiYWNrZ3JvdW5kLWNvbG9yIDAuMThzIGVhc2UsIGJveC1zaGFkb3cgMC4xOHMgZWFzZSwgdHJhbnNmb3JtIDAuMThzIGVhc2U7XG59XG5cbmxhYmVsLnJlc2VydmF0aW9uLXJvb20tY2FyZDpob3ZlciB7XG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDEyMSwgMTIxLCA1OCwgMC40OCk7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgICAgMCAxMXB4IDI0cHggcmdiYSg3OSwgNzUsIDMxLCAwLjEyKSxcbiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzgpO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTtcbn1cblxuLyogUGlvbm93eSBwYXNlayBqZXN0IG9zb2JueW0gem5hY3puaWtpZW0gd3lib3J1IGkgcHJ6ZWNob2R6aSByw7N3bmllxbwgcHJ6ZXogbmFnxYLDs3dlay4gKi9cbmxhYmVsLnJlc2VydmF0aW9uLXJvb20tY2FyZDo6YmVmb3JlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMTtcbiAgICB0b3A6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgd2lkdGg6IDVweDtcbiAgICBiYWNrZ3JvdW5kOiAjOGZhODc4O1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTZzIGVhc2U7XG59XG5cbi8qIFphem5hY3plbmllIHptaWVuaWEgZ2VvbWV0cmnEmSBvYnJhbW93YW5pYSwgYmV6IHphbGV3YW5pYSBjYcWCZWoga2FydHkga29sZWpueW0ga29sb3JlbS4gKi9cbmxhYmVsLnJlc2VydmF0aW9uLXJvb20tY2FyZC5pcy1zZWxlY3RlZCxcbmxhYmVsLnJlc2VydmF0aW9uLXJvb20tY2FyZDpoYXMoLnJlc2VydmF0aW9uLXJvb20tY2FyZF9fY2hlY2tib3g6Y2hlY2tlZCkge1xuICAgIGJvcmRlci1jb2xvcjogIzhmYTg3ODtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTYpIDAlLCByZ2JhKDI0NSwgMjQxLCAyMzEsIDAuOTYpIDEwMCUpO1xuICAgIGJveC1zaGFkb3c6XG4gICAgICAgIDAgMCAwIDJweCByZ2JhKDE0MywgMTY4LCAxMjAsIDAuMiksXG4gICAgICAgIDAgMTBweCAyMnB4IHJnYmEoNzksIDc1LCAzMSwgMC4xMSk7XG59XG5cbmxhYmVsLnJlc2VydmF0aW9uLXJvb20tY2FyZC5pcy1zZWxlY3RlZDo6YmVmb3JlLFxubGFiZWwucmVzZXJ2YXRpb24tcm9vbS1jYXJkOmhhcygucmVzZXJ2YXRpb24tcm9vbS1jYXJkX19jaGVja2JveDpjaGVja2VkKTo6YmVmb3JlIHtcbiAgICBvcGFjaXR5OiAxO1xufVxuXG4vKiBGb2t1cyBrbGF3aWF0dXJ5IHBvem9zdGFqZSB3aWRvY3pueSwgYWxlIG5pZSBtb8W8ZSB3eWdsxIVkYcSHIGphayB6YXpuYWN6ZW5pZS4gKi9cbmxhYmVsLnJlc2VydmF0aW9uLXJvb20tY2FyZDpmb2N1cy13aXRoaW46bm90KC5pcy1zZWxlY3RlZCk6bm90KDpoYXMoLnJlc2VydmF0aW9uLXJvb20tY2FyZF9fY2hlY2tib3g6Y2hlY2tlZCkpIHtcbiAgICBib3JkZXItY29sb3I6IHJnYmEoMTIxLCAxMjEsIDU4LCAwLjQ4KTtcbiAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggcmdiYSgxMjEsIDEyMSwgNTgsIDAuMSk7XG59XG5cbi8qIE1vdHl3IGZvcm11bGFyemEgQm9vdHN0cmFwIGRvZGFqZSBjaGVja2JveG93aSB3cmFwcGVyIHpham11asSFY3kgbWllanNjZSBuYWQgdHJlxZtjacSFIGthcnR5LiAqL1xuLnJlc2VydmF0aW9uLXJvb20tY2FyZCA+IC5mb3JtLWNoZWNrIHtcbiAgICBtaW4taGVpZ2h0OiAwO1xuICAgIGhlaWdodDogMDtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbn1cblxuLnJlc2VydmF0aW9uLXJvb20tY2FyZCA+IC5mb3JtLWNoZWNrID4gLmZvcm0tY2hlY2stbGFiZWwge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5yZXNlcnZhdGlvbi1yb29tLWNhcmRfX2NoZWNrYm94IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgei1pbmRleDogMjtcbiAgICB0b3A6IDFyZW07XG4gICAgcmlnaHQ6IDFyZW07XG4gICAgd2lkdGg6IDEuMjVyZW07XG4gICAgaGVpZ2h0OiAxLjI1cmVtO1xuICAgIG1hcmdpbjogMDtcbiAgICBib3JkZXItY29sb3I6IHJnYmEoMTIxLCAxMjEsIDU4LCAwLjY1KTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4xNnMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAwLjE2cyBlYXNlLCBib3JkZXItY29sb3IgMC4xNnMgZWFzZTtcbn1cblxuLnJlc2VydmF0aW9uLXJvb20tY2FyZF9fY2hlY2tib3g6Y2hlY2tlZCB7XG4gICAgYm9yZGVyLWNvbG9yOiAjOGZhODc4O1xuICAgIGJhY2tncm91bmQtY29sb3I6ICM4ZmE4Nzg7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA2KTtcbn1cblxuLyogTmFnxYLDs3dlayBpIHRyZcWbxIcgc8SFIGJsb2thbWksIGNob8SHIHNlbWFudHljem5pZSBrYXJ0YSBwb3pvc3RhamUga2xpa2FsbsSFIGV0eWtpZXTEhSBjaGVja2JveGEuICovXG4ucmVzZXJ2YXRpb24tcm9vbS1jYXJkX19ib2R5LFxuLnJlc2VydmF0aW9uLXJvb20tY2FyZF9faGVhZGluZyxcbi5yZXNlcnZhdGlvbi1yb29tLWNhcmRfX2Rlc2NyaXB0aW9uLFxuLnJlc2VydmF0aW9uLXJvb20tY2FyZF9fcHJpY2UsXG4ucmVzZXJ2YXRpb24tcm9vbS1jYXJkX19mZWF0dXJlcyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8qIE5hZ8WCw7N3ZWsga29yenlzdGEgeiB0eXBvZ3JhZmlpIGkgY2llcMWCZWdvIHTFgmEgem5hbmVnbyB6IHBhbmVsdSBBc3lzdGVudGEgQUkuICovXG4ucmVzZXJ2YXRpb24tcm9vbS1jYXJkX19oZWFkaW5nIHtcbiAgICBtYXJnaW46IDAgLTNyZW0gMC44NXJlbSAtMXJlbTtcbiAgICBwYWRkaW5nOiAwLjg1cmVtIDNyZW0gMC43NXJlbSAxcmVtO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDEyMSwgMTIxLCA1OCwgMC4yKTtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjZmZmYWYxIDAlLCAjZjdlZGRjIDEwMCUpO1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpO1xufVxuXG4ucmVzZXJ2YXRpb24tcm9vbS1jYXJkX19uYW1lIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nLXJpZ2h0OiAwLjI1cmVtO1xuICAgIGNvbG9yOiAjNWEzZDEyO1xuICAgIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiLCBzZXJpZjtcbiAgICBmb250LXNpemU6IDEuMTZyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMjtcbn1cblxuLnJlc2VydmF0aW9uLXJvb20tY2FyZF9fY2FwYWNpdHkge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi10b3A6IDAuMjhyZW07XG4gICAgZm9udC1zaXplOiAwLjgycmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgY29sb3I6ICM2YjUzMzA7XG59XG5cbi5yZXNlcnZhdGlvbi1yb29tLWNhcmRfX2Rlc2NyaXB0aW9uIHtcbiAgICBmb250LXNpemU6IDAuOXJlbTtcbiAgICBsaW5lLWhlaWdodDogMS40NTtcbiAgICBjb2xvcjogIzU1NDYyZjtcbn1cblxuLyogQ2VuYSBqZXN0IG9kZHppZWxvbmEgb2Qgb3Bpc3UsIGFieSBuYWp3YcW8bmllanN6ZSBkYW5lIGRhxYJvIHNpxJkgc3p5YmtvIHByemVza2Fub3dhxIcgd3pyb2tpZW0uICovXG4ucmVzZXJ2YXRpb24tcm9vbS1jYXJkX19wcmljZSB7XG4gICAgbWFyZ2luLXRvcDogMC44cmVtO1xuICAgIHBhZGRpbmctdG9wOiAwLjY1cmVtO1xuICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCByZ2JhKDEyMSwgMTIxLCA1OCwgMC4xNSk7XG4gICAgZm9udC1zaXplOiAwLjlyZW07XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBjb2xvcjogIzVhM2QxMjtcbn1cblxuLyogVWRvZ29kbmllbmlhIHPEhSB1xYJvxbxvbmUgcGlvbm93byB3IGthcHN1xYJrYWNoIGluc3Bpcm93YW55Y2ggd3lib3JlbSBtaWVqc2Nvd2/Fm2NpIG5hIG1hcGllLiAqL1xuLnJlc2VydmF0aW9uLXJvb20tY2FyZF9fZmVhdHVyZXMge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAganVzdGlmeS1pdGVtczogc3RhcnQ7XG4gICAgZ2FwOiAwLjM4cmVtO1xuICAgIG1hcmdpbi10b3A6IDAuN3JlbTtcbn1cblxuLnJlc2VydmF0aW9uLXJvb20tY2FyZF9fZmVhdHVyZSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IGZpdC1jb250ZW50O1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwLjNyZW0gMC42OHJlbTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyMSwgMTIxLCA1OCwgMC4yMik7XG4gICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk0KSAwJSwgcmdiYSgyNDUsIDI0MiwgMjMzLCAwLjk0KSAxMDAlKTtcbiAgICBib3gtc2hhZG93OiAwIDVweCAxMnB4IHJnYmEoNzksIDc1LCAzMSwgMC4wNik7XG4gICAgZm9udC1zaXplOiAwLjc4cmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgbGluZS1oZWlnaHQ6IDEuMjU7XG4gICAgY29sb3I6ICM1ZjU2Mzg7XG59XG5cbi8qIFBvZHBvd2llZMW6IG5pZSBwb3dpbm5hIHByenlsZWdhxIcgYmV6cG/Fm3JlZG5pbyBkbyBvc3RhdG5pZWdvIHJ6xJlkdSBrYXJ0LiAqL1xuLnJlc2VydmF0aW9uLXJvb20tZ3JpZCArIHNtYWxsIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tdG9wOiAwLjlyZW07XG59XG5cbi5yZXNlcnZhdGlvbi1yb29tLWVycm9yIHtcbiAgICBtaW4taGVpZ2h0OiAxLjI1cmVtO1xuICAgIG1hcmdpbi10b3A6IDAuNDVyZW07XG4gICAgY29sb3I6ICNhMDI3MWM7XG59XG5cbi5yZXNlcnZhdGlvbi1yb29tLWVycm9yIHVsIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZy1sZWZ0OiAxLjI1cmVtO1xufVxuXG5Aa2V5ZnJhbWVzIHJlc2VydmF0aW9uLWF2YWlsYWJpbGl0eS1zcGluIHtcbiAgICB0byB7XG4gICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7XG4gICAgfVxufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY3Ljk4cHgpIHtcbiAgICAucmVzZXJ2YXRpb24tcm9vbS1ncmlkIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gICAgfVxuXG4gICAgLnJlc2VydmF0aW9uLXJvb20tZ3JpZCA+IC5yZXNlcnZhdGlvbi1yb29tLWNhcmQ6bGFzdC1jaGlsZDpudGgtY2hpbGQob2RkKSB7XG4gICAgICAgIGdyaWQtY29sdW1uOiBhdXRvO1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICBsYWJlbC5yZXNlcnZhdGlvbi1yb29tLWNhcmQge1xuICAgICAgICBwYWRkaW5nOiAwIDIuOHJlbSAwLjlyZW0gMC45cmVtO1xuICAgIH1cblxuICAgIC5yZXNlcnZhdGlvbi1yb29tLWNhcmRfX2hlYWRpbmcge1xuICAgICAgICBtYXJnaW46IDAgLTIuOHJlbSAwLjhyZW0gLTAuOXJlbTtcbiAgICAgICAgcGFkZGluZzogMC44cmVtIDIuOHJlbSAwLjdyZW0gMC45cmVtO1xuICAgIH1cbn1cblxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbiAgICBsYWJlbC5yZXNlcnZhdGlvbi1yb29tLWNhcmQge1xuICAgICAgICB0cmFuc2l0aW9uOiBub25lO1xuICAgIH1cblxuICAgIC5yZXNlcnZhdGlvbi1hdmFpbGFiaWxpdHktc3RhdHVzLmlzLWxvYWRpbmc6OmJlZm9yZSB7XG4gICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMS42cztcbiAgICB9XG59XG5cbi8qIEtyb2sgMiBrb3J6eXN0YSB6IHRlaiBzYW1laiBwYWxldHkgY28gd3liw7NyIHBva29qdSwgYWxlIGthcnRhIG5pZSBqZXN0IGp1xbwgZWxlbWVudGVtIHphem5hY3phbnltLiAqL1xuLnJlc2VydmF0aW9uLWRldGFpbC1jYXJkIHtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTIxLCAxMjEsIDU4LCAwLjI0KTtcbiAgICBib3JkZXItcmFkaXVzOiAxcmVtO1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45NikgMCUsIHJnYmEoMjQ1LCAyNDEsIDIzMSwgMC45NikgMTAwJSk7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgICAgMCA4cHggMjBweCByZ2JhKDc5LCA3NSwgMzEsIDAuMDgpLFxuICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43Mik7XG59XG5cbi5yZXNlcnZhdGlvbi1kZXRhaWwtY2FyZF9faGVhZGVyIHtcbiAgICBwYWRkaW5nOiAwLjg1cmVtIDFyZW0gMC43NXJlbTtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgxMjEsIDEyMSwgNTgsIDAuMik7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgI2ZmZmFmMSAwJSwgI2Y3ZWRkYyAxMDAlKTtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTtcbn1cblxuLnJlc2VydmF0aW9uLWRldGFpbC1jYXJkX19oZWFkZXIgbGFiZWwge1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGNvbG9yOiAjNWEzZDEyO1xuICAgIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiLCBzZXJpZjtcbiAgICBmb250LXNpemU6IDEuMTZyZW07XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsaW5lLWhlaWdodDogMS4yO1xufVxuXG4ucmVzZXJ2YXRpb24tZGV0YWlsLWNhcmRfX2JvZHkge1xuICAgIHBhZGRpbmc6IDFyZW07XG4gICAgY29sb3I6ICM1NTQ2MmY7XG59XG5cbi8qIFpkasSZY2llIHBvem9zdGFqZSB1enVwZcWCbmllbmllbSBvcGlzdSBuYSB3acSZa3N6eWNoIGVrcmFuYWNoLiAqL1xuLnJlc2VydmF0aW9uLWRldGFpbC1jYXJkX19pbWFnZSB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyMSwgMTIxLCA1OCwgMC4xOCk7XG4gICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICBib3gtc2hhZG93OiAwIDZweCAxNHB4IHJnYmEoNzksIDc1LCAzMSwgMC4wOSk7XG59XG5cbi5yZXNlcnZhdGlvbi1kZXRhaWwtY2FyZF9fcHJpY2UsXG4ucmVzZXJ2YXRpb24tZGV0YWlsLWNhcmRfX2Rlc2NyaXB0aW9uIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAwO1xuICAgIGNvbG9yOiAjNTU0NjJmO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQ1O1xufVxuXG4ucmVzZXJ2YXRpb24tZGV0YWlsLWNhcmRfX3ByaWNlIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwLjhyZW07XG4gICAgcGFkZGluZy1ib3R0b206IDAuNjVyZW07XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMTIxLCAxMjEsIDU4LCAwLjE1KTtcbiAgICBjb2xvcjogIzVhM2QxMjtcbiAgICBmb250LXNpemU6IDAuOTJyZW07XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbn1cblxuLnJlc2VydmF0aW9uLWRldGFpbC1jYXJkX19kZXNjcmlwdGlvbiB7XG4gICAgZm9udC1zaXplOiAwLjlyZW07XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuXG4vKiBLYcW8ZGEgdXPFgnVnYSBkb2RhdGtvd2EgamVzdCBvc29ibnltIHdpZXJzemVtLCBkemnEmWtpIGN6ZW11IMWCYXR3byBvZGN6eXRhxIcgamVqIHN0YW4uICovXG4ucmVzZXJ2YXRpb24tZGV0YWlsLW9wdGlvbiB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIG1hcmdpbi10b3A6IDAuN3JlbTtcbiAgICBwYWRkaW5nOiAwLjdyZW0gMC44cmVtO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxMjEsIDEyMSwgNTgsIDAuMjIpO1xuICAgIGJvcmRlci1yYWRpdXM6IDAuNzVyZW07XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk0KSAwJSwgcmdiYSgyNDUsIDI0MiwgMjMzLCAwLjk0KSAxMDAlKTtcbiAgICBib3gtc2hhZG93OiAwIDVweCAxMnB4IHJnYmEoNzksIDc1LCAzMSwgMC4wNik7XG4gICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTZzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgMC4xNnMgZWFzZSwgYm94LXNoYWRvdyAwLjE2cyBlYXNlO1xufVxuXG4ucmVzZXJ2YXRpb24tZGV0YWlsLW9wdGlvbjo6YmVmb3JlIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHdpZHRoOiA0cHg7XG4gICAgYmFja2dyb3VuZDogIzhmYTg3ODtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE2cyBlYXNlO1xufVxuXG4ucmVzZXJ2YXRpb24tZGV0YWlsLW9wdGlvbjpob3ZlciB7XG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDEyMSwgMTIxLCA1OCwgMC40Mik7XG59XG5cbi5yZXNlcnZhdGlvbi1kZXRhaWwtb3B0aW9uOmhhcygucmVzZXJ2YXRpb24tZGV0YWlsLW9wdGlvbl9fY2hlY2tib3g6Y2hlY2tlZCkge1xuICAgIGJvcmRlci1jb2xvcjogIzhmYTg3ODtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI0NCwgMjQ5LCAyMzksIDAuOTgpIDAlLCByZ2JhKDIzMiwgMjQxLCAyMjQsIDAuOTgpIDEwMCUpO1xuICAgIGJveC1zaGFkb3c6XG4gICAgICAgIDAgMCAwIDJweCByZ2JhKDE0MywgMTY4LCAxMjAsIDAuMTYpLFxuICAgICAgICAwIDdweCAxNXB4IHJnYmEoNzksIDc1LCAzMSwgMC4wOCk7XG59XG5cbi5yZXNlcnZhdGlvbi1kZXRhaWwtb3B0aW9uOmhhcygucmVzZXJ2YXRpb24tZGV0YWlsLW9wdGlvbl9fY2hlY2tib3g6Y2hlY2tlZCk6OmJlZm9yZSB7XG4gICAgb3BhY2l0eTogMTtcbn1cblxuLnJlc2VydmF0aW9uLWRldGFpbC1vcHRpb24gLmZvcm0tY2hlY2sge1xuICAgIG1pbi1oZWlnaHQ6IDA7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmctbGVmdDogMS43NXJlbTtcbn1cblxuLnJlc2VydmF0aW9uLWRldGFpbC1vcHRpb25fX2NoZWNrYm94IHtcbiAgICB3aWR0aDogMS4xNXJlbTtcbiAgICBoZWlnaHQ6IDEuMTVyZW07XG4gICAgbWFyZ2luLXRvcDogMC4xMnJlbTtcbiAgICBib3JkZXItY29sb3I6IHJnYmEoMTIxLCAxMjEsIDU4LCAwLjY1KTtcbn1cblxuLnJlc2VydmF0aW9uLWRldGFpbC1vcHRpb25fX2NoZWNrYm94OmNoZWNrZWQge1xuICAgIGJvcmRlci1jb2xvcjogIzhmYTg3ODtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjOGZhODc4O1xufVxuXG4ucmVzZXJ2YXRpb24tZGV0YWlsLW9wdGlvbiAucmVzZXJ2YXRpb24tZGV0YWlsLW9wdGlvbl9fbGFiZWwge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBhZGRpbmc6IDAgMCAwIDAuMnJlbTtcbiAgICBjb2xvcjogIzRkNDUyZjtcbiAgICBmb250LXNpemU6IDAuODhyZW07XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBsaW5lLWhlaWdodDogMS4zNTtcbn1cblxuLyogV3Nww7Nsbnkgd3lnbMSFZCBpIGN6eXRlbG55IHN0YW4gcG9kcG93aWVkemkgbmEga2HFvGR5bSBldGFwaWUgZm9ybXVsYXJ6YS4gKi9cbi5yZXNlcnZhdGlvbi1oaW50LXRvZ2dsZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGNvbG9yOiAjNjk3NDUxICFpbXBvcnRhbnQ7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB0ZXh0LWRlY29yYXRpb24tdGhpY2tuZXNzOiAxcHg7XG4gICAgdGV4dC11bmRlcmxpbmUtb2Zmc2V0OiAwLjE2ZW07XG59XG5cbi5yZXNlcnZhdGlvbi1oaW50LXRvZ2dsZV9fY2xvc2Uge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi8qIEJvb3RzdHJhcCBkb2RhamUgYXJpYS1kZXNjcmliZWRieSB3ecWCxIVjem5pZSBuYSBjemFzLCBnZHkgd8WCYcWbY2l3eSBwb3BvdmVyIGplc3Qgb3R3YXJ0eS4gKi9cbi5yZXNlcnZhdGlvbi1oaW50LXRvZ2dsZVthcmlhLWRlc2NyaWJlZGJ5XSAucmVzZXJ2YXRpb24taGludC10b2dnbGVfX29wZW4ge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbi5yZXNlcnZhdGlvbi1oaW50LXRvZ2dsZVthcmlhLWRlc2NyaWJlZGJ5XSAucmVzZXJ2YXRpb24taGludC10b2dnbGVfX2Nsb3NlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUgIWltcG9ydGFudDtcbn1cblxuLnJlc2VydmF0aW9uLWhpbnQtdG9nZ2xlOmhvdmVyLFxuLnJlc2VydmF0aW9uLWhpbnQtdG9nZ2xlOmZvY3VzLXZpc2libGUsXG4ucmVzZXJ2YXRpb24taGludC10b2dnbGVbYXJpYS1leHBhbmRlZD1cInRydWVcIl0ge1xuICAgIGNvbG9yOiAjNGQ1OTM4ICFpbXBvcnRhbnQ7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgdGV4dC1kZWNvcmF0aW9uLWNvbG9yOiByZ2JhKDEwNSwgMTE2LCA4MSwgMC42OCk7XG59XG5cbi5yZXNlcnZhdGlvbi1oaW50LXRvZ2dsZTpmb2N1cy12aXNpYmxlIHtcbiAgICBib3JkZXItcmFkaXVzOiAwLjI1cmVtO1xuICAgIG91dGxpbmU6IDJweCBzb2xpZCByZ2JhKDE0MywgMTY4LCAxMjAsIDAuNTIpO1xuICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7XG59XG5cbi8qXG4gKiBTemHFgndpb3d5IHRvbiB3acSFxbxlIHBvZHBvd2llZMW6IHogemllbG9uby1rcmVtb3fEhSBwYWxldMSFIGZvcm11bGFyemEsXG4gKiBhbGUgbmFkYWwgb2Ryw7PFvG5pYSB3YXJzdHfEmSBwb21vY25pY3rEhSBvZCB3xYJhxZtjaXd5Y2gga2FydCB6IGRhbnltaS5cbiAqL1xuLnJlc2VydmF0aW9uLWhpbnQtcG9wb3ZlciB7XG4gICAgLS1icy1wb3BvdmVyLW1heC13aWR0aDogMjJyZW07XG4gICAgLS1icy1wb3BvdmVyLWJnOiAjZmFmYmY3O1xuICAgIC0tYnMtcG9wb3Zlci1ib3JkZXItY29sb3I6IHJnYmEoMTEyLCAxMjYsIDgzLCAwLjQpO1xuICAgIC0tYnMtcG9wb3Zlci1ib3JkZXItcmFkaXVzOiAwLjlyZW07XG4gICAgLS1icy1wb3BvdmVyLWJveC1zaGFkb3c6IDAgMTBweCAyOHB4IHJnYmEoNzksIDc1LCAzMSwgMC4xNSk7XG4gICAgLS1icy1wb3BvdmVyLWhlYWRlci1jb2xvcjogIzRkNTkzODtcbiAgICAtLWJzLXBvcG92ZXItaGVhZGVyLWJnOiAjZTllZWUxO1xuICAgIC0tYnMtcG9wb3Zlci1ib2R5LWNvbG9yOiAjNTA1NDQyO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG59XG5cbi5yZXNlcnZhdGlvbi1oaW50LXBvcG92ZXIgLnBvcG92ZXItaGVhZGVyIHtcbiAgICBib3JkZXItYm90dG9tLWNvbG9yOiByZ2JhKDExMiwgMTI2LCA4MywgMC4yNCk7XG4gICAgZm9udC1mYW1pbHk6IEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIsIHNlcmlmO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG5cbi5yZXNlcnZhdGlvbi1oaW50LXBvcG92ZXIgLnBvcG92ZXItYm9keSB7XG4gICAgZm9udC1zaXplOiAwLjg0cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjQ4O1xufVxuXG4ucmVzZXJ2YXRpb24taGludC1wb3BvdmVyIC5wb3BvdmVyLWJvZHkgYSB7XG4gICAgY29sb3I6ICM1MzY4M2Y7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICB0ZXh0LWRlY29yYXRpb24tbGluZTogdW5kZXJsaW5lO1xuICAgIHRleHQtZGVjb3JhdGlvbi1jb2xvcjogcmdiYSg4MywgMTA0LCA2MywgMC43Mik7XG4gICAgdGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzczogMC4wOGVtO1xuICAgIHRleHQtdW5kZXJsaW5lLW9mZnNldDogMC4xNmVtO1xufVxuXG4ucmVzZXJ2YXRpb24taGludC1wb3BvdmVyIC5wb3BvdmVyLWJvZHkgYTpob3Zlcixcbi5yZXNlcnZhdGlvbi1oaW50LXBvcG92ZXIgLnBvcG92ZXItYm9keSBhOmZvY3VzLXZpc2libGUge1xuICAgIGNvbG9yOiAjMzU0NzI4O1xuICAgIHRleHQtZGVjb3JhdGlvbi1jb2xvcjogY3VycmVudENvbG9yO1xufVxuXG4ucmVzZXJ2YXRpb24taGludC1wb3BvdmVyIC5wb3BvdmVyLWJvZHkgYTpmb2N1cy12aXNpYmxlIHtcbiAgICBib3JkZXItcmFkaXVzOiAwLjE4cmVtO1xuICAgIG91dGxpbmU6IDJweCBzb2xpZCByZ2JhKDE0MywgMTY4LCAxMjAsIDAuNTgpO1xuICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7XG59XG5cbi8qIFN0cnphxYJrYSBzeWduYWxpenVqZSwgxbxlIGRva3VtZW50IHpvc3RhbmllIG90d2FydHkgdyBub3dlaiBrYXJjaWUuICovXG4ucmVzZXJ2YXRpb24taGludC1wb3BvdmVyIC5wb3BvdmVyLWJvZHkgYVt0YXJnZXQ9XCJfYmxhbmtcIl06OmFmdGVyIHtcbiAgICBtYXJnaW4tbGVmdDogMC4xOGVtO1xuICAgIGNvbnRlbnQ6IFwi4oaXXCI7XG4gICAgZm9udC1zaXplOiAwLjgyZW07XG59XG5cbi5yZXNlcnZhdGlvbi1kZXRhaWwtb3B0aW9uX19oaW50IHtcbiAgICBtYXJnaW46IDAuMzhyZW0gMCAwIDEuOTVyZW07XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjcuOThweCkge1xuICAgIC5yZXNlcnZhdGlvbi1kZXRhaWwtY2FyZF9faGVhZGVyIHtcbiAgICAgICAgcGFkZGluZzogMC44cmVtIDAuOXJlbSAwLjdyZW07XG4gICAgfVxuXG4gICAgLnJlc2VydmF0aW9uLWRldGFpbC1jYXJkX19ib2R5IHtcbiAgICAgICAgcGFkZGluZzogMC45cmVtO1xuICAgIH1cblxuICAgIC5yZXNlcnZhdGlvbi1kZXRhaWwtb3B0aW9uIHtcbiAgICAgICAgcGFkZGluZzogMC42NXJlbSAwLjdyZW07XG4gICAgfVxufVxuXG5AbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuICAgIC5yZXNlcnZhdGlvbi1kZXRhaWwtb3B0aW9uLFxuICAgIC5yZXNlcnZhdGlvbi1kZXRhaWwtb3B0aW9uOjpiZWZvcmUge1xuICAgICAgICB0cmFuc2l0aW9uOiBub25lO1xuICAgIH1cbn1cblxuLyogV3Nww7Nsbnkgd3lnbMSFZCBww7NsIEtyb2t1IDMgb3JheiB3eWJvcnUgZGF0IHcgS3Jva3UgMS4gKi9cbi5yZXNlcnZhdGlvbi1mb3JtLWNvbnRyb2wge1xuICAgIG1pbi1oZWlnaHQ6IDIuOHJlbTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyMSwgMTIxLCA1OCwgMC4zOCk7XG4gICAgYm9yZGVyLXJhZGl1czogMC43cmVtO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTMsIDI0OCwgMC45Nik7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgICAgaW5zZXQgMCAxcHggMnB4IHJnYmEoNzksIDc1LCAzMSwgMC4wNCksXG4gICAgICAgIDAgM3B4IDlweCByZ2JhKDc5LCA3NSwgMzEsIDAuMDQpO1xuICAgIGNvbG9yOiAjNGQ0NTJmO1xuICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE2cyBlYXNlLCBib3gtc2hhZG93IDAuMTZzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgMC4xNnMgZWFzZTtcbn1cblxuLnJlc2VydmF0aW9uLWZvcm0tY29udHJvbDpob3ZlciB7XG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDEyMSwgMTIxLCA1OCwgMC41OCk7XG59XG5cbi5yZXNlcnZhdGlvbi1mb3JtLWNvbnRyb2w6Zm9jdXMge1xuICAgIGJvcmRlci1jb2xvcjogIzhmYTg3ODtcbiAgICBiYWNrZ3JvdW5kOiAjZmZmO1xuICAgIGJveC1zaGFkb3c6XG4gICAgICAgIDAgMCAwIDAuMnJlbSByZ2JhKDE0MywgMTY4LCAxMjAsIDAuMiksXG4gICAgICAgIDAgNXB4IDEycHggcmdiYSg3OSwgNzUsIDMxLCAwLjA2KTtcbn1cblxuLnJlc2VydmF0aW9uLWZvcm0tY29udHJvbDpkaXNhYmxlZCB7XG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDEyMSwgMTIxLCA1OCwgMC4xOCk7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyMzUsIDIzMiwgMjIzLCAwLjc4KTtcbiAgICBjb2xvcjogIzc3NzI2NDtcbn1cblxuLypcbiAqIGpRdWVyeSB1xbx5d2Ega2xhc3kgYGVycm9yYCwgYSBmb3JtdWxhcnogU3ltZm9ueS9Cb290c3RyYXAga2xhc3kgYGlzLWludmFsaWRgLlxuICogT2JhIMW6csOzZMWCYSBixYLEmWR1IG11c3rEhSBwcm93YWR6acSHIGRvIGlkZW50eWN6bmVnbyB3eWdsxIVkdSBwb2xhLlxuICovXG4ucmVzZXJ2YXRpb24tZm9ybS1jb250cm9sLmVycm9yLFxuLnJlc2VydmF0aW9uLWZvcm0tY29udHJvbC5pcy1pbnZhbGlkLFxuLnJlc2VydmF0aW9uLWZvcm0tY29udHJvbFthcmlhLWludmFsaWQ9XCJ0cnVlXCJdIHtcbiAgICBib3JkZXItY29sb3I6ICNiNjRiNDM7XG4gICAgYmFja2dyb3VuZDogI2ZmZjlmODtcbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBub25lO1xuICAgIGJveC1zaGFkb3c6XG4gICAgICAgIDAgMCAwIDAuMThyZW0gcmdiYSgxODIsIDc1LCA2NywgMC4xNCksXG4gICAgICAgIGluc2V0IDAgMXB4IDJweCByZ2JhKDExMCwgMzUsIDMwLCAwLjA0KTtcbn1cblxuLnJlc2VydmF0aW9uLWZvcm0tY29udHJvbC5lcnJvcjpmb2N1cyxcbi5yZXNlcnZhdGlvbi1mb3JtLWNvbnRyb2wuaXMtaW52YWxpZDpmb2N1cyxcbi5yZXNlcnZhdGlvbi1mb3JtLWNvbnRyb2xbYXJpYS1pbnZhbGlkPVwidHJ1ZVwiXTpmb2N1cyB7XG4gICAgYm9yZGVyLWNvbG9yOiAjYTMzZDM2O1xuICAgIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gICAgYm94LXNoYWRvdzogMCAwIDAgMC4yMnJlbSByZ2JhKDE4MiwgNzUsIDY3LCAwLjIpO1xufVxuXG4vKiBGb3JtdWxhcnplIHJlemVyd2FjamkgaSBrb250YWt0dSBrb3J6eXN0YWrEhSB6IHR5Y2ggc2FteWNoIGthcnQgb3JheiBvZHN0xJlww7N3LiAqL1xuLnJlc2VydmF0aW9uLWNsaWVudC1mb3JtLFxuLnJlc2VydmF0aW9uLWNvbnRhY3QtZm9ybSB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBnYXA6IDFyZW07XG4gICAgbWFyZ2luLXRvcDogMS4xNXJlbTtcbn1cblxuLnJlc2VydmF0aW9uLWZvcm0tY2FyZCB7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyMSwgMTIxLCA1OCwgMC4yNCk7XG4gICAgYm9yZGVyLXJhZGl1czogMXJlbTtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTYpIDAlLCByZ2JhKDI0NSwgMjQxLCAyMzEsIDAuOTYpIDEwMCUpO1xuICAgIGJveC1zaGFkb3c6XG4gICAgICAgIDAgOHB4IDIwcHggcmdiYSg3OSwgNzUsIDMxLCAwLjA4KSxcbiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNzIpO1xufVxuXG4ucmVzZXJ2YXRpb24tZm9ybS1jYXJkX19oZWFkZXIge1xuICAgIHBhZGRpbmc6IDAuNzhyZW0gMXJlbSAwLjcycmVtO1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCByZ2JhKDEyMSwgMTIxLCA1OCwgMC4yKTtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjZmZmYWYxIDAlLCAjZjdlZGRjIDEwMCUpO1xufVxuXG4ucmVzZXJ2YXRpb24tZm9ybS1jYXJkX19oZWFkZXIgaDIge1xuICAgIG1hcmdpbjogMDtcbiAgICBjb2xvcjogIzVhM2QxMjtcbiAgICBmb250LWZhbWlseTogR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiwgc2VyaWY7XG4gICAgZm9udC1zaXplOiAxLjE2cmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbGluZS1oZWlnaHQ6IDEuMjtcbn1cblxuLnJlc2VydmF0aW9uLWZvcm0tY2FyZF9fdGl0bGUtcm93IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGdhcDogMC43NXJlbTtcbn1cblxuLnJlc2VydmF0aW9uLWZvcm0tY2FyZF9faGVhZGVyIHAge1xuICAgIG1hcmdpbjogMC4yOHJlbSAwIDA7XG4gICAgY29sb3I6ICM2YjY1NDU7XG4gICAgZm9udC1zaXplOiAwLjhyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMzU7XG59XG5cbi5yZXNlcnZhdGlvbi1mb3JtLWNhcmRfX2JvZHkge1xuICAgIGRpc3BsYXk6IGdyaWQ7XG4gICAgZ2FwOiAwLjlyZW07XG4gICAgcGFkZGluZzogMXJlbTtcbn1cblxuLnJlc2VydmF0aW9uLWZvcm0tZmllbGQge1xuICAgIG1pbi13aWR0aDogMDtcbn1cblxuOmlzKC5yZXNlcnZhdGlvbi1jbGllbnQtZm9ybSwgLnJlc2VydmF0aW9uLWNvbnRhY3QtZm9ybSkgLnJlc2VydmF0aW9uLWZvcm0tZmllbGQgPiBsYWJlbCxcbjppcygucmVzZXJ2YXRpb24tY2xpZW50LWZvcm0sIC5yZXNlcnZhdGlvbi1jb250YWN0LWZvcm0pIC5mb3JtLWxhYmVsIHtcbiAgICBtYXJnaW46IDAgMCAwLjM2cmVtO1xuICAgIHBhZGRpbmc6IDA7XG4gICAgY29sb3I6ICM1NTQ2MmY7XG4gICAgZm9udC1zaXplOiAwLjg4cmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG5cbjppcygucmVzZXJ2YXRpb24tY2xpZW50LWZvcm0sIC5yZXNlcnZhdGlvbi1jb250YWN0LWZvcm0pIC5yZXNlcnZhdGlvbi1mb3JtLWZpZWxkIC5yZXNlcnZhdGlvbi1oaW50LXRvZ2dsZSB7XG4gICAgbWFyZ2luLXRvcDogMC4zOHJlbTtcbn1cblxuOmlzKC5yZXNlcnZhdGlvbi1jbGllbnQtZm9ybSwgLnJlc2VydmF0aW9uLWNvbnRhY3QtZm9ybSkgOmlzKGxhYmVsLmVycm9yLCAuaW52YWxpZC1mZWVkYmFjaykge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbjogMC4zcmVtIDAgMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIGNvbG9yOiAjYTMzZDM2O1xuICAgIGZvbnQtc2l6ZTogMTBwdDtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjM1O1xufVxuXG46aXMoLnJlc2VydmF0aW9uLWNsaWVudC1mb3JtLCAucmVzZXJ2YXRpb24tY29udGFjdC1mb3JtKSAucmVzZXJ2YXRpb24tZm9ybS1maWVsZDpoYXMoLnJlc2VydmF0aW9uLWZvcm0tY29udHJvbC5lcnJvcikgPiBsYWJlbCxcbjppcygucmVzZXJ2YXRpb24tY2xpZW50LWZvcm0sIC5yZXNlcnZhdGlvbi1jb250YWN0LWZvcm0pIC5yZXNlcnZhdGlvbi1mb3JtLWZpZWxkOmhhcygucmVzZXJ2YXRpb24tZm9ybS1jb250cm9sLmlzLWludmFsaWQpID4gbGFiZWwsXG46aXMoLnJlc2VydmF0aW9uLWNsaWVudC1mb3JtLCAucmVzZXJ2YXRpb24tY29udGFjdC1mb3JtKSAucmVzZXJ2YXRpb24tZm9ybS1maWVsZDpoYXMoLnJlc2VydmF0aW9uLWZvcm0tY29udHJvbFthcmlhLWludmFsaWQ9XCJ0cnVlXCJdKSA+IGxhYmVsIHtcbiAgICBjb2xvcjogIzhmMzMyZDtcbn1cblxuLnJlc2VydmF0aW9uLWZvcm0tZ3JpZCB7XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBnYXA6IDAuOXJlbTtcbn1cblxuLnJlc2VydmF0aW9uLWZvcm0tZ3JpZC0tY29udGFjdCxcbi5yZXNlcnZhdGlvbi1mb3JtLWdyaWQtLWNvbXBhbnktbWFpbiB7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgbWlubWF4KDAsIDFmcikpO1xufVxuXG4ucmVzZXJ2YXRpb24tZm9ybS1ncmlkLS1hZGRyZXNzIHtcbiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG1pbm1heCgwLCAyZnIpIG1pbm1heCg4LjVyZW0sIDFmcik7XG59XG5cbi5yZXNlcnZhdGlvbi1mb3JtLWNvbnRyb2wtLXRleHRhcmVhIHtcbiAgICBtaW4taGVpZ2h0OiA3cmVtO1xuICAgIHJlc2l6ZTogdmVydGljYWw7XG59XG5cbi5yZXNlcnZhdGlvbi1jb250YWN0LWZvcm1fX21lc3NhZ2Uge1xuICAgIG1pbi1oZWlnaHQ6IDEwcmVtO1xufVxuXG4vKiBFdHlraWV0YSDigJ5vcGNqb25hbG5pZeKAnSBvZHLDs8W8bmlhIGRhbmUgZG8gZmFrdHVyeSBvZCB3eW1hZ2FuZWogemdvZHkuICovXG4ucmVzZXJ2YXRpb24tY2xpZW50LWNvbXBhbnktdG9nZ2xlIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDAsIDFmcikgYXV0bztcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMC4zNXJlbSAwLjc1cmVtO1xuICAgIHBhZGRpbmc6IDAuNzhyZW0gMXJlbSAwLjcycmVtO1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICNmZmZhZjEgMCUsICNmN2VkZGMgMTAwJSk7XG4gICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjE2cyBlYXNlO1xufVxuXG4ucmVzZXJ2YXRpb24tY2xpZW50LWNvbXBhbnktdG9nZ2xlX19jb250cm9sIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgIG1pbi13aWR0aDogMDtcbn1cblxuLnJlc2VydmF0aW9uLWNsaWVudC1jaGVja2JveCB7XG4gICAgZmxleDogMCAwIGF1dG87XG4gICAgd2lkdGg6IDEuMTVyZW07XG4gICAgaGVpZ2h0OiAxLjE1cmVtO1xuICAgIG1hcmdpbjogMC4xMnJlbSAwLjU1cmVtIDAgMDtcbiAgICBib3JkZXItY29sb3I6IHJnYmEoMTIxLCAxMjEsIDU4LCAwLjY1KTtcbn1cblxuLnJlc2VydmF0aW9uLWNsaWVudC1jaGVja2JveDpjaGVja2VkIHtcbiAgICBib3JkZXItY29sb3I6ICM4ZmE4Nzg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzhmYTg3ODtcbn1cblxuLnJlc2VydmF0aW9uLWNsaWVudC1mb3JtIC5yZXNlcnZhdGlvbi1jbGllbnQtY29tcGFueS10b2dnbGVfX2xhYmVsIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBjb2xvcjogIzVhM2QxMjtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZm9udC1mYW1pbHk6IEdlb3JnaWEsIFwiVGltZXMgTmV3IFJvbWFuXCIsIHNlcmlmO1xuICAgIGZvbnQtc2l6ZTogMS4wOHJlbTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjM7XG59XG5cbi5yZXNlcnZhdGlvbi1mb3JtLWJhZGdlIHtcbiAgICBwYWRkaW5nOiAwLjIycmVtIDAuNThyZW07XG4gICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxMjEsIDEyMSwgNTgsIDAuMjIpO1xuICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4O1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43NCk7XG4gICAgY29sb3I6ICM2YjY1NDU7XG4gICAgZm9udC1zaXplOiAwLjdyZW07XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wMmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjI7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbn1cblxuLnJlc2VydmF0aW9uLWNsaWVudC1jb21wYW55LXRvZ2dsZV9faGludCB7XG4gICAgZ3JpZC1jb2x1bW46IDEgLyAtMTtcbiAgICBtYXJnaW4tbGVmdDogMS43cmVtO1xufVxuXG4ucmVzZXJ2YXRpb24tY2xpZW50LWNvbXBhbnktZmllbGRzIHtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgxMjEsIDEyMSwgNTgsIDAuMTgpO1xufVxuXG4vKiBQbyB6YXpuYWN6ZW5pdSBvcGNqb25hbG5hIHNla2NqYSBrb250eW51dWplIHppZWxvbnkgc3RhbiB3eWJvcnUgem5hbnkgeiBLcm9rw7N3IDEgaSAyLiAqL1xuLnJlc2VydmF0aW9uLWNsaWVudC1jb21wYW55LWNhcmQ6aGFzKC5yZXNlcnZhdGlvbi1jbGllbnQtY2hlY2tib3g6Y2hlY2tlZCksXG4ucmVzZXJ2YXRpb24tY2xpZW50LWNvbXBhbnktY2FyZC5pcy1vcGVuIHtcbiAgICBib3JkZXItY29sb3I6ICM4ZmE4Nzg7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgICAgMCAwIDAgMXB4IHJnYmEoMTQzLCAxNjgsIDEyMCwgMC4xMiksXG4gICAgICAgIDAgOHB4IDIwcHggcmdiYSg3OSwgNzUsIDMxLCAwLjA4KTtcbn1cblxuLnJlc2VydmF0aW9uLWNsaWVudC1jb21wYW55LWNhcmQ6aGFzKC5yZXNlcnZhdGlvbi1jbGllbnQtY2hlY2tib3g6Y2hlY2tlZCkgLnJlc2VydmF0aW9uLWNsaWVudC1jb21wYW55LXRvZ2dsZSxcbi5yZXNlcnZhdGlvbi1jbGllbnQtY29tcGFueS1jYXJkLmlzLW9wZW4gLnJlc2VydmF0aW9uLWNsaWVudC1jb21wYW55LXRvZ2dsZSB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgI2ZmZmFmMSAwJSwgI2Y3ZWRkYyAxMDAlKTtcbiAgICBib3gtc2hhZG93OiBpbnNldCA0cHggMCAwICM4ZmE4Nzg7XG59XG5cbi5yZXNlcnZhdGlvbi1jbGllbnQtY29uc2VudC1jYXJkIHtcbiAgICBib3JkZXItY29sb3I6IHJnYmEoMTIxLCAxMjEsIDU4LCAwLjM0KTtcbn1cblxuLnJlc2VydmF0aW9uLWNsaWVudC1jb25zZW50IC5mb3JtLWNoZWNrIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZy1sZWZ0OiAxLjhyZW07XG59XG5cbi5yZXNlcnZhdGlvbi1jbGllbnQtY29uc2VudCAuZm9ybS1jaGVjay1pbnB1dCB7XG4gICAgd2lkdGg6IDEuMTVyZW07XG4gICAgaGVpZ2h0OiAxLjE1cmVtO1xuICAgIG1hcmdpbi10b3A6IDAuMTJyZW07XG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDEyMSwgMTIxLCA1OCwgMC42NSk7XG59XG5cbi5yZXNlcnZhdGlvbi1jbGllbnQtY29uc2VudCAuZm9ybS1jaGVjay1pbnB1dDpjaGVja2VkIHtcbiAgICBib3JkZXItY29sb3I6ICM4ZmE4Nzg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzhmYTg3ODtcbn1cblxuLnJlc2VydmF0aW9uLWNsaWVudC1jb25zZW50IC5mb3JtLWNoZWNrLWlucHV0LmVycm9yLFxuLnJlc2VydmF0aW9uLWNsaWVudC1jb25zZW50IC5mb3JtLWNoZWNrLWlucHV0W2FyaWEtaW52YWxpZD1cInRydWVcIl0ge1xuICAgIGJvcmRlci1jb2xvcjogI2I2NGI0MztcbiAgICBib3gtc2hhZG93OiAwIDAgMCAwLjE4cmVtIHJnYmEoMTgyLCA3NSwgNjcsIDAuMTQpO1xufVxuXG4ucmVzZXJ2YXRpb24tY2xpZW50LWNvbnNlbnQtY2FyZDpoYXMoLmZvcm0tY2hlY2staW5wdXQuZXJyb3IpLFxuLnJlc2VydmF0aW9uLWNsaWVudC1jb25zZW50LWNhcmQ6aGFzKC5mb3JtLWNoZWNrLWlucHV0W2FyaWEtaW52YWxpZD1cInRydWVcIl0pIHtcbiAgICBib3JkZXItY29sb3I6IHJnYmEoMTgyLCA3NSwgNjcsIDAuNjgpO1xuICAgIGJveC1zaGFkb3c6XG4gICAgICAgIDAgMCAwIDJweCByZ2JhKDE4MiwgNzUsIDY3LCAwLjEpLFxuICAgICAgICAwIDhweCAyMHB4IHJnYmEoNzksIDc1LCAzMSwgMC4wOCk7XG59XG5cbi5yZXNlcnZhdGlvbi1jbGllbnQtZm9ybSAucmVzZXJ2YXRpb24tY2xpZW50LWNvbnNlbnRfX2xhYmVsIHtcbiAgICBtYXJnaW46IDA7XG4gICAgcGFkZGluZzogMCAwIDAgMC4xNXJlbTtcbiAgICBjb2xvcjogIzRkNDUyZjtcbiAgICBmb250LXNpemU6IDAuODZyZW07XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBsaW5lLWhlaWdodDogMS40Mjtcbn1cblxuLyogS2FydGEgdGVybWludSBzcGluYSB3aXp1YWxuaWUgcGllcndzenkga3JvayB6IGtvbGVqbnltaSBldGFwYW1pIHJlemVyd2FjamkuICovXG4ucmVzZXJ2YXRpb24tZGF0ZS1jYXJkIHtcbiAgICBtYXJnaW46IDEuMXJlbSAwO1xufVxuXG4ucmVzZXJ2YXRpb24tZGF0ZS1jYXJkX19pY29uIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA1MCU7XG4gICAgcmlnaHQ6IDFyZW07XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpO1xuICAgIGNvbG9yOiAjNmI2NTQ1O1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4ucmVzZXJ2YXRpb24tZGF0ZS1jYXJkX19lcnJvciB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWluLWhlaWdodDogMS4yNWVtO1xuICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBjb2xvcjogI2EzM2QzNjtcbiAgICBmb250LXdlaWdodDogNjAwO1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY3Ljk4cHgpIHtcbiAgICAucmVzZXJ2YXRpb24tZm9ybS1ncmlkLS1jb250YWN0LFxuICAgIC5yZXNlcnZhdGlvbi1mb3JtLWdyaWQtLWNvbXBhbnktbWFpbixcbiAgICAucmVzZXJ2YXRpb24tZm9ybS1ncmlkLS1hZGRyZXNzIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7XG4gICAgfVxuXG4gICAgLnJlc2VydmF0aW9uLWZvcm0tY2FyZF9faGVhZGVyLFxuICAgIC5yZXNlcnZhdGlvbi1jbGllbnQtY29tcGFueS10b2dnbGUge1xuICAgICAgICBwYWRkaW5nOiAwLjc1cmVtIDAuOXJlbSAwLjdyZW07XG4gICAgfVxuXG4gICAgLnJlc2VydmF0aW9uLWZvcm0tY2FyZF9fYm9keSB7XG4gICAgICAgIHBhZGRpbmc6IDAuOXJlbTtcbiAgICB9XG5cbn1cblxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbiAgICAucmVzZXJ2YXRpb24tZm9ybS1jb250cm9sLFxuICAgIC5yZXNlcnZhdGlvbi1jbGllbnQtY29tcGFueS10b2dnbGUge1xuICAgICAgICB0cmFuc2l0aW9uOiBub25lO1xuICAgIH1cbn1cblxuLmZvcm0tY2hlY2sgbGFiZWwge1xuICAgIHBhZGRpbmctdG9wOiAwcHg7IC8qIFVzdXdhIHByemVzdHJ6ZcWEIG9kIGfDs3J5LCBhYnkgZXR5a2lldGEgZm9ybXVsYXJ6YSBiecWCYSB3eXLDs3duYW5hIGJleiBkb2RhdGtvd2VnbyBvZHN0xJlwdSAqL1xuICAgIHBhZGRpbmctbGVmdDogNXB4OyAvKiBEb2RhamUgNXB4IHByemVzdHJ6ZW5pIHogbGV3ZWogc3Ryb255LCBhYnkgemFwZXduacSHIG9kc3TEmXAgbWnEmWR6eSBldHlraWV0xIUgYSBrb250cm9sa8SFIGZvcm11bGFyemEgKi9cbiAgICAvKlxuICAgICAgICAtIGBwYWRkaW5nLXRvcGA6IFVzdGF3aWEgcGFkZGluZyBuYSAwLCBjbyBzcHJhd2lhLCDFvGUgZXR5a2lldGEgbmllIG1hIGRvZGF0a293ZWdvIG9kc3TEmXB1IG9kIGfDs3J5LlxuICAgICAgICAtIGBwYWRkaW5nLWxlZnRgOiBEb2RhamUgNXB4IHByemVzdHJ6ZW5pIHBvIGxld2VqIHN0cm9uaWUsIGNvIHBvcHJhd2lhIGN6eXRlbG5vxZvEhyBpIG9kZHppZWxhIGV0eWtpZXTEmSBvZCBlbGVtZW50dSBmb3JtdWxhcnphLlxuICAgICovXG59XG5cbi5zdWJtaXQge1xuICAgIG1hcmdpbi10b3A6IDIwcHg7IC8qIERvZGFqZSBwcnplc3RyemXFhCAyMHB4IG9kIGfDs3J5LCBhYnkgcHJ6eWNpc2sgZm9ybXVsYXJ6YSBtaWHFgiBvZHBvd2llZG5pIG9kc3TEmXAgb2QgaW5ueWNoIGVsZW1lbnTDs3cgKi9cbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4OyAvKiBEb2RhamUgcHJ6ZXN0cnplxYQgMTBweCBvZCBkb8WCdSwgYWJ5IHByenljaXNrIGZvcm11bGFyemEgbmllIGJ5xYIgemJ5dCBibGlza28gaW5ueWNoIGVsZW1lbnTDs3cgcG9uacW8ZWogKi9cbiAgICAvKlxuICAgICAgICAtIGBtYXJnaW4tdG9wYDogV3Byb3dhZHphIG9kc3TEmXAgMjBweCBvZCBnw7NyeSwgY28gemFwZXduaWEgb2Rwb3dpZWRuacSFIHNlcGFyYWNqxJkgb2QgaW5ueWNoIGVsZW1lbnTDs3cgZm9ybXVsYXJ6YS5cbiAgICAgICAgLSBgbWFyZ2luLWJvdHRvbWA6IERvZGFqZSAxMHB4IHByemVzdHJ6ZW5pIG9kIGRvxYJ1LCBjbyB6YXBvYmllZ2EgemJpamFuaXUgc2nEmSBwcnp5Y2lza3UgeiBpbm55bWkgZWxlbWVudGFtaS5cbiAgICAqL1xufVxuXG4vKiBHxYLDs3duYSBha2NqYSBmb3JtdWxhcnphIGplc3Qgd3lyYcW6bmEsIGFsZSBwb3pvc3RhamUgdyBuYXR1cmFsbmVqIHBhbGVjaWUgc3Ryb255LiAqL1xuLnJlc2VydmF0aW9uLWFjdGlvbi1yb3cge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBtYXJnaW46IDFyZW0gMCAwLjY1cmVtO1xuICAgIHBhZGRpbmc6IDA7XG59XG5cbi5yZXNlcnZhdGlvbi1hY3Rpb24tcm93IC5zdWJtaXQge1xuICAgIG1hcmdpbjogMDtcbn1cblxuLnJlc2VydmF0aW9uLXByaW1hcnktYWN0aW9uIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIG1pbi13aWR0aDogMTJyZW07XG4gICAgbWluLWhlaWdodDogMi44NXJlbTtcbiAgICBwYWRkaW5nOiAwLjY1cmVtIDEuMjVyZW07XG4gICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgxMjEsIDkyLCA0OCwgMC40OCk7XG4gICAgYm9yZGVyLXJhZGl1czogMC43NXJlbTtcbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjZmZmYWYxIDAlLCAjZjdlZGRjIDEwMCUpO1xuICAgIGJveC1zaGFkb3c6XG4gICAgICAgIDAgN3B4IDE1cHggcmdiYSg5MCwgNjEsIDE4LCAwLjEzKSxcbiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODIpO1xuICAgIGNvbG9yOiAjNWEzZDEyO1xuICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgdGV4dC1zaGFkb3c6IG5vbmU7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTZzIGVhc2UsIGJvcmRlci1jb2xvciAwLjE2cyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTZzIGVhc2UsIGJveC1zaGFkb3cgMC4xNnMgZWFzZTtcbn1cblxuLyogS2FydHkga2/FhGNvd2UgemFjaG93dWrEhSB3eWdsxIVkIGZvcm11bGFyenksIGFsZSBla3Nwb251asSFIHN0YXR1cyBpIGtvbGVqbmUgZHppYcWCYW5pYS4gKi9cbi5yZXNlcnZhdGlvbi1jb25maXJtYXRpb24tY2FyZCB7XG4gICAgbWFyZ2luLXRvcDogMS4xNXJlbTtcbiAgICBib3JkZXItY29sb3I6IHJnYmEoMTQzLCAxNjgsIDEyMCwgMC42Mik7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgICAgMCAwIDAgMnB4IHJnYmEoMTQzLCAxNjgsIDEyMCwgMC4xKSxcbiAgICAgICAgMCA4cHggMjBweCByZ2JhKDc5LCA3NSwgMzEsIDAuMDgpO1xufVxuXG4ucmVzZXJ2YXRpb24tY29uZmlybWF0aW9uLWNhcmRfX2hlYWRlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogMC44cmVtO1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDRweCAwIDAgIzhmYTg3ODtcbn1cblxuLnJlc2VydmF0aW9uLWNvbmZpcm1hdGlvbi1jYXJkX19pY29uIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBmbGV4OiAwIDAgYXV0bztcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIHdpZHRoOiAyLjE1cmVtO1xuICAgIGhlaWdodDogMi4xNXJlbTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE0MywgMTY4LCAxMjAsIDAuNSk7XG4gICAgYm9yZGVyLXJhZGl1czogNTAlO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMjMyLCAyNDEsIDIyNCwgMC45Mik7XG4gICAgY29sb3I6ICM2MDczNGU7XG4gICAgZm9udC1zaXplOiAwLjlyZW07XG59XG5cbi8qIFdhcmlhbnR5IHN0YXR1c3UgcG96d2FsYWrEhSBvZHLDs8W8bmnEhyBzdWtjZXMsIHd5Z2FzxYJ5IGxpbmsgaSBixYLEhWQgYmV6IHptaWFueSBrb25zdHJ1a2NqaSBrYXJ0eS4gKi9cbi5yZXNlcnZhdGlvbi1jb25maXJtYXRpb24tY2FyZC0td2FybmluZyB7XG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE3OCwgMTMyLCA2OCwgMC41NSk7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgICAgMCAwIDAgMnB4IHJnYmEoMTc4LCAxMzIsIDY4LCAwLjA5KSxcbiAgICAgICAgMCA4cHggMjBweCByZ2JhKDc5LCA3NSwgMzEsIDAuMDgpO1xufVxuXG4ucmVzZXJ2YXRpb24tY29uZmlybWF0aW9uLWNhcmQtLXdhcm5pbmcgLnJlc2VydmF0aW9uLWNvbmZpcm1hdGlvbi1jYXJkX19oZWFkZXIge1xuICAgIGJveC1zaGFkb3c6IGluc2V0IDRweCAwIDAgI2IyODQ0NDtcbn1cblxuLnJlc2VydmF0aW9uLWNvbmZpcm1hdGlvbi1jYXJkLS13YXJuaW5nIC5yZXNlcnZhdGlvbi1jb25maXJtYXRpb24tY2FyZF9faWNvbiB7XG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE3OCwgMTMyLCA2OCwgMC40OCk7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI0OCwgMjM1LCAwLjk1KTtcbiAgICBjb2xvcjogIzhhNjIyYjtcbn1cblxuLnJlc2VydmF0aW9uLWNvbmZpcm1hdGlvbi1jYXJkLS1kYW5nZXIge1xuICAgIGJvcmRlci1jb2xvcjogcmdiYSgxNjcsIDgzLCA3MywgMC41NSk7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgICAgMCAwIDAgMnB4IHJnYmEoMTY3LCA4MywgNzMsIDAuMDgpLFxuICAgICAgICAwIDhweCAyMHB4IHJnYmEoNzksIDc1LCAzMSwgMC4wOCk7XG59XG5cbi5yZXNlcnZhdGlvbi1jb25maXJtYXRpb24tY2FyZC0tZGFuZ2VyIC5yZXNlcnZhdGlvbi1jb25maXJtYXRpb24tY2FyZF9faGVhZGVyIHtcbiAgICBib3gtc2hhZG93OiBpbnNldCA0cHggMCAwICNhNzUzNDk7XG59XG5cbi5yZXNlcnZhdGlvbi1jb25maXJtYXRpb24tY2FyZC0tZGFuZ2VyIC5yZXNlcnZhdGlvbi1jb25maXJtYXRpb24tY2FyZF9faWNvbiB7XG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE2NywgODMsIDczLCAwLjQ4KTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjQ1LCAyNDMsIDAuOTYpO1xuICAgIGNvbG9yOiAjOGIzZjM3O1xufVxuXG4ucmVzZXJ2YXRpb24tY29uZmlybWF0aW9uLWNhcmRfX2JvZHkge1xuICAgIGdhcDogMC44NXJlbTtcbn1cblxuLnJlc2VydmF0aW9uLWNvbmZpcm1hdGlvbi1jYXJkX19kZXRhaWxzIHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIG1hcmdpbjogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTIxLCAxMjEsIDU4LCAwLjE4KTtcbiAgICBib3JkZXItcmFkaXVzOiAwLjc1cmVtO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTMsIDI0OCwgMC43OCk7XG59XG5cbi5yZXNlcnZhdGlvbi1jb25maXJtYXRpb24tY2FyZF9fcm93IHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogbWlubWF4KDguNXJlbSwgbWF4LWNvbnRlbnQpIG1pbm1heCgwLCAxZnIpO1xuICAgIGdhcDogMC44cmVtO1xuICAgIHBhZGRpbmc6IDAuNjhyZW0gMC44cmVtO1xufVxuXG4ucmVzZXJ2YXRpb24tY29uZmlybWF0aW9uLWNhcmRfX3JvdyArIC5yZXNlcnZhdGlvbi1jb25maXJtYXRpb24tY2FyZF9fcm93IHtcbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgcmdiYSgxMjEsIDEyMSwgNTgsIDAuMTQpO1xufVxuXG4ucmVzZXJ2YXRpb24tY29uZmlybWF0aW9uLWNhcmRfX3Jvdy0tY29tcGFjdCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgZ2FwOiAwLjNyZW07XG59XG5cbi5yZXNlcnZhdGlvbi1jb25maXJtYXRpb24tY2FyZF9fcm93LS1jb21wYWN0IGR0IHtcbiAgICBmbGV4OiAwIDAgYXV0bztcbn1cblxuLnJlc2VydmF0aW9uLWNvbmZpcm1hdGlvbi1jYXJkX19yb3ctLWNvbXBhY3QgZGQge1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG5cbi5yZXNlcnZhdGlvbi1jb25maXJtYXRpb24tY2FyZF9fcm93IGR0LFxuLnJlc2VydmF0aW9uLWNvbmZpcm1hdGlvbi1jYXJkX19yb3cgZGQge1xuICAgIG1hcmdpbjogMDtcbiAgICBvdmVyZmxvdy13cmFwOiBhbnl3aGVyZTtcbiAgICBsaW5lLWhlaWdodDogMS40O1xufVxuXG4ucmVzZXJ2YXRpb24tY29uZmlybWF0aW9uLWNhcmRfX3JvdyBkdCB7XG4gICAgY29sb3I6ICM2YjY1NDU7XG4gICAgZm9udC1zaXplOiAwLjc4cmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG59XG5cbi5yZXNlcnZhdGlvbi1jb25maXJtYXRpb24tY2FyZF9fcm93IGRkIHtcbiAgICBjb2xvcjogIzRkNDUyZjtcbiAgICBmb250LXNpemU6IDAuODZyZW07XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbn1cblxuLnJlc2VydmF0aW9uLWNvbmZpcm1hdGlvbi1jYXJkX19ub3RpY2Uge1xuICAgIHBhZGRpbmc6IDAuNzVyZW0gMC44NXJlbTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyMSwgMTIxLCA1OCwgMC4xOCk7XG4gICAgYm9yZGVyLWxlZnQtd2lkdGg6IDRweDtcbiAgICBib3JkZXItcmFkaXVzOiAwLjdyZW07XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1MywgMjQ4LCAwLjgyKTtcbiAgICBjb2xvcjogIzU1NDYyZjtcbn1cblxuLnJlc2VydmF0aW9uLWNvbmZpcm1hdGlvbi1jYXJkX19ub3RpY2Ugc3Ryb25nIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBtYXJnaW4tYm90dG9tOiAwLjIycmVtO1xuICAgIGNvbG9yOiAjNWEzZDEyO1xuICAgIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiLCBzZXJpZjtcbiAgICBmb250LXNpemU6IDAuOXJlbTtcbn1cblxuLnJlc2VydmF0aW9uLWNvbmZpcm1hdGlvbi1jYXJkX19ub3RpY2UgcCB7XG4gICAgbWFyZ2luOiAwO1xuICAgIGNvbG9yOiBpbmhlcml0O1xuICAgIGZvbnQtc2l6ZTogMC44MnJlbTtcbiAgICBsaW5lLWhlaWdodDogMS40ODtcbn1cblxuLnJlc2VydmF0aW9uLWNvbmZpcm1hdGlvbi1jYXJkX19ub3RpY2UtLWltcG9ydGFudCB7XG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDE3OCwgMTMyLCA2OCwgMC4zNCk7XG4gICAgYm9yZGVyLWxlZnQtY29sb3I6ICNiMjg0NDQ7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI0OCwgMjM1LCAwLjkyKTtcbn1cblxuLnJlc2VydmF0aW9uLWNvbmZpcm1hdGlvbi1jYXJkX19ub3RpY2UtLW11dGVkIHtcbiAgICBib3JkZXItbGVmdC1jb2xvcjogIzhmYTg3ODtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDI0NCwgMjQ5LCAyMzksIDAuNzIpO1xufVxuXG4ucmVzZXJ2YXRpb24tY29uZmlybWF0aW9uLWNhcmRfX25vdGljZS0tZGFuZ2VyIHtcbiAgICBib3JkZXItY29sb3I6IHJnYmEoMTY3LCA4MywgNzMsIDAuMjgpO1xuICAgIGJvcmRlci1sZWZ0LWNvbG9yOiAjYTc1MzQ5O1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNDUsIDI0MywgMC45KTtcbiAgICBjb2xvcjogIzcxM2YzOTtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc2Ny45OHB4KSB7XG4gICAgLnJlc2VydmF0aW9uLWNvbmZpcm1hdGlvbi1jYXJkX19yb3cge1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjtcbiAgICAgICAgZ2FwOiAwLjE4cmVtO1xuICAgIH1cbn1cblxuLnJlc2VydmF0aW9uLXByaW1hcnktYWN0aW9uOmhvdmVyIHtcbiAgICBib3JkZXItY29sb3I6IHJnYmEoMTIxLCA5MiwgNDgsIDAuNzIpO1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsICNmYmYxZGYgMCUsICNlZWRjYzAgMTAwJSk7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgICAgMCA5cHggMThweCByZ2JhKDkwLCA2MSwgMTgsIDAuMTgpLFxuICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC43Mik7XG4gICAgY29sb3I6ICM0YzMzMGY7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xufVxuXG4ucmVzZXJ2YXRpb24tcHJpbWFyeS1hY3Rpb246Zm9jdXMtdmlzaWJsZSB7XG4gICAgYm9yZGVyLWNvbG9yOiAjOGZhODc4O1xuICAgIGJveC1zaGFkb3c6XG4gICAgICAgIDAgMCAwIDAuMjNyZW0gcmdiYSgxNDMsIDE2OCwgMTIwLCAwLjMpLFxuICAgICAgICAwIDhweCAxN3B4IHJnYmEoOTAsIDYxLCAxOCwgMC4xNik7XG4gICAgY29sb3I6ICM0YzMzMGY7XG4gICAgb3V0bGluZTogbm9uZTtcbn1cblxuLnJlc2VydmF0aW9uLXByaW1hcnktYWN0aW9uOmFjdGl2ZSB7XG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDEyMSwgOTIsIDQ4LCAwLjc4KTtcbiAgICBiYWNrZ3JvdW5kOiAjZWNkN2I3O1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDlweCByZ2JhKDkwLCA2MSwgMTgsIDAuMTQpO1xuICAgIGNvbG9yOiAjNGMzMzBmO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTtcbn1cblxuLnJlc2VydmF0aW9uLXByaW1hcnktYWN0aW9uOmRpc2FibGVkLFxuLnJlc2VydmF0aW9uLXByaW1hcnktYWN0aW9uLmRpc2FibGVkIHtcbiAgICBib3JkZXItY29sb3I6IHJnYmEoMTIxLCA5MiwgNDgsIDAuMik7XG4gICAgYmFja2dyb3VuZDogI2VlZTlkZjtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICAgIGNvbG9yOiAjNzc3MjY0O1xuICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7XG4gICAgb3BhY2l0eTogMC43ODtcbiAgICB0ZXh0LXNoYWRvdzogbm9uZTtcbiAgICB0cmFuc2Zvcm06IG5vbmU7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjcuOThweCkge1xuICAgIC5yZXNlcnZhdGlvbi1hY3Rpb24tcm93LFxuICAgIC5yZXNlcnZhdGlvbi1wcmltYXJ5LWFjdGlvbiB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cbn1cblxuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbiAgICAucmVzZXJ2YXRpb24tcHJpbWFyeS1hY3Rpb24ge1xuICAgICAgICB0cmFuc2l0aW9uOiBub25lO1xuICAgIH1cbn1cblxubGFiZWwge1xuICAgIHBhZGRpbmctdG9wOiAxNXB4OyAvKiBEb2RhamUgcHJ6ZXN0cnplxYQgMTVweCBvZCBnw7NyeSwgY28gemFwZXduaWEgb2Rwb3dpZWRuaSBvZHN0xJlwIG1pxJlkenkgZXR5a2lldMSFIGEgaW5ueW1pIGVsZW1lbnRhbWkgZm9ybXVsYXJ6YSAqL1xuICAgIC8qXG4gICAgICAgIC0gYHBhZGRpbmctdG9wYDogV3Byb3dhZHphIDE1cHggcHJ6ZXN0cnplbmkgb2QgZ8OzcnksIGNvIHBvcHJhd2lhIGN6eXRlbG5vxZvEhyBmb3JtdWxhcnphLCBkYWrEhWMgZXR5a2llY2llIG9kcG93aWVkbmnEhSBzZXBhcmFjasSZLlxuICAgICovXG59XG5cbmxhYmVsLnJvZG8ge1xuICAgIHBhZGRpbmctdG9wOiAwcHg7IC8qIFVzdXdhIHByemVzdHJ6ZcWEIG9kIGfDs3J5LCBhYnkgZXR5a2lldGEgJ3JvZG8nIGJ5xYJhIHd5csOzd25hbmEgYmV6IGRvZGF0a293ZWdvIG9kc3TEmXB1ICovXG4gICAgZm9udC1zaXplOiAxNXB4OyAvKiBVc3Rhd2lhIHJvem1pYXIgY3pjaW9ua2kgbmEgMTVweCwgY28gc3ByYXdpYSwgxbxlIHRla3N0IGV0eWtpZXR5IGLEmWR6aWUgY3p5dGVsbnkgaSBkb3N0b3Nvd2FueSBkbyBpbm55Y2ggZWxlbWVudMOzdyBmb3JtdWxhcnphICovXG4gICAgLypcbiAgICAgICAgLSBgcGFkZGluZy10b3BgOiBXcHJvd2FkemEgMHB4IHByemVzdHJ6ZW5pIG9kIGfDs3J5LCBjbyBlbGltaW51amUgZG9kYXRrb3d5IG9kc3TEmXAsIHphcGV3bmlhasSFYywgxbxlIGV0eWtpZXRhIGplc3Qgd3lyw7N3bmFuYSBkbyByZXN6dHkgZWxlbWVudMOzdy5cbiAgICAgICAgLSBgZm9udC1zaXplYDogVXN0YXdpYSByb3ptaWFyIGN6Y2lvbmtpIG5hIDE1cHgsIGNvIHphcGV3bmlhIG9kcG93aWVkbmnEhSB3aWVsa2/Fm8SHIHRla3N0dSwgemFjaG93dWrEhWMgamVnbyBjenl0ZWxub8WbxIcuXG4gICAgKi9cbn1cblxuI3Jlc2VydmVfY2xpZW50X1JvZG8ge1xuICAgIHBhZGRpbmctdG9wOiAwO1xufVxuXG4uc3dpdGNoLWN1c3RvbSB7XG4gICAgcGFkZGluZy10b3A6IDBweDsgLyogVXN1d2EgcHJ6ZXN0cnplxYQgb2QgZ8OzcnksIGFieSBlbGVtZW50IGJ5xYIgd3lyw7N3bmFueSBiZXogZG9kYXRrb3dlZ28gb2RzdMSZcHUgKi9cbiAgICAvKlxuICAgICAgICAtIGBwYWRkaW5nLXRvcGA6IFdwcm93YWR6YSAwcHggcHJ6ZXN0cnplbmkgb2QgZ8OzcnksIGNvIGVsaW1pbnVqZSBkb2RhdGtvd3kgb2RzdMSZcCBpIHNwcmF3aWEsIMW8ZSBlbGVtZW50IGplc3Qgd3lyw7N3bmFueSB6IHJlc3p0xIUgemF3YXJ0b8WbY2kuXG4gICAgKi9cbn1cblxuLmNvbC1mb3JtLWxhYmVsIHtcbiAgICBwYWRkaW5nLXRvcDogMTVweDsgLyogRG9kYWplIDE1cHggcHJ6ZXN0cnplbmkgb2QgZ8OzcnksIHphcGV3bmlhasSFYyBvZHBvd2llZG5pIG9kc3TEmXAgbWnEmWR6eSBldHlraWV0xIUgYSBpbm55bWkgZWxlbWVudGFtaSAqL1xuICAgIC8qXG4gICAgICAgIC0gYHBhZGRpbmctdG9wYDogV3Byb3dhZHphIDE1cHggcHJ6ZXN0cnplbmkgb2QgZ8OzcnksIGNvIHBvcHJhd2lhIGN6eXRlbG5vxZvEhyBpIGVzdGV0eWvEmSBldHlraWV0eSBwb3ByemV6IHphY2hvd2FuaWUgb2RzdMSZcHUgb2QgaW5ueWNoIGVsZW1lbnTDs3cuXG4gICAgKi9cbn1cblxuLyogU2VrY2phIGdhbGVyaWkgKi9cbi5la2tvLWxpZ2h0Ym94LW5hdi1vdmVybGF5IGEge1xuICAgIGNvbG9yOiAjMDAwMDAwOyAvKiBVc3Rhd2lhIGtvbG9yIGxpbmvDs3cgdyBuYXdpZ2FjamkgZWtyYW51IGxpZ2h0Ym94IG5hIGN6YXJueSAoIzAwMDAwMCksIHphcGV3bmlhasSFYyBkb2JyxIUgd2lkb2N6bm/Fm8SHIG5hIHRsZSAqL1xuICAgIC8qXG4gICAgICAgIC0gYGNvbG9yYDogT2tyZcWbbGEga29sb3IgdGVrc3R1IGxpbmvDs3cgdyBuYXdpZ2FjamkgbGlnaHRib3hhLiBDemFybnkgKCMwMDAwMDApIHphcGV3bmlhIHd5cmHFum55IGtvbnRyYXN0IGkgZG9icsSFIGN6eXRlbG5vxZvEhy5cbiAgICAqL1xufVxuXG4uanVtYm90cm9uIHtcbiAgICBkaXNwbGF5OiBmbGV4OyAvKiBVc3Rhd2lhIGtvbnRlbmVyIGpha28gZmxleGJveCwgY28gcG96d2FsYSBuYSDFgmF0d2Ugd3lyw7N3bmFuaWUgaSByb3ptaWVzemN6YW5pZSBlbGVtZW50w7N3IHcgcG96aW9taWUgKi9cbiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoJy4uL2ltYWdlL2tvemlfbGFzZWtfaGVhZGVyLmpwZycpOyAvKiBVc3Rhd2lhIHTFgm8ganVtYm90cm9uYSBuYSBvYnJhemVrIHogb2tyZcWbbG9uZWogxZtjaWXFvGtpICovXG4gICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjsgLyogVXN0YXdpYSB0xYJvIG5hIHd5xZtyb2Rrb3dhbmUgdyBwb3ppb21pZSBpIHBpb25pZSAqL1xuICAgIGJhY2tncm91bmQtcmVwZWF0OiBuby1yZXBlYXQ7IC8qIFphcG9iaWVnYSBwb3d0YXJ6YW5pdSB0xYJhLCBhYnkgYnnFgm8gd3nFm3dpZXRsYW5lIHR5bGtvIHJheiAqL1xuICAgIGJhY2tncm91bmQtc2l6ZTogMTAwJSAxMDAlOyAvKiBEb3Bhc293dWplIHTFgm8gZG8gcm96bWlhcsOzdyBrb250ZW5lcmEsIHd5cGXFgm5pYWrEhWMgY2HFgnkgb2JzemFyICovXG4gICAgbGV0dGVyLXNwYWNpbmc6IDJweDsgLyogWndpxJlrc3phIHByemVzdHJ6ZcWEIG1pxJlkenkgbGl0ZXJhbWksIGNvIHBvcHJhd2lhIGN6eXRlbG5vxZvEhyB0ZWtzdHUgKi9cbiAgICBjb2xvcjogIzQ0MDUwNTsgLyogVXN0YXdpYSBrb2xvciB0ZWtzdHUgbmEgY2llbW55IG9kY2llxYQgY3plcndpZW5pICgjNDQwNTA1KSAqL1xuICAgIGZvbnQtc2l6ZTogOHB0OyAvKiBVc3Rhd2lhIHJvem1pYXIgY3pjaW9ua2kgbmEgOCBwdW5rdMOzdywgY28gc3ByYXdpYSwgxbxlIHRla3N0IGplc3QgbW5pZWpzenkgKi9cbiAgICBwYWRkaW5nLWJvdHRvbTogMzUlOyAvKiBEb2RhamUgZG9sbnkgcGFkZGluZyBvIHdhcnRvxZtjaSAzNSUgd3lzb2tvxZtjaSwgY28gem1pZW5pYSBwcm9wb3JjamUga29udGVuZXJhICovXG4gICAgcGFkZGluZy10b3A6IDVweDsgLyogRG9kYWplIDVweCBwYWRkaW5ndSBvZCBnw7NyeSAqL1xuICAgIHBhZGRpbmctbGVmdDogNXB4OyAvKiBEb2RhamUgNXB4IHBhZGRpbmd1IHogbGV3ZWogc3Ryb255ICovXG4gICAgbWFyZ2luLWJvdHRvbTogLTE3cHg7IC8qIFVzdGF3aWEgdWplbW55IG1hcmdpbmVzIGRvbG55LCBjbyBwb3p3YWxhIG5hIG5ha8WCYWRhbmllIHNpxJkgZWxlbWVudMOzdyBwb25pxbxlaiAqL1xuICAgIC8qXG4gICAgICAgIC0gYGRpc3BsYXk6IGZsZXhgOiBQb3p3YWxhIG5hIGVsYXN0eWN6bmUgcm96bWllc3pjemFuaWUgZWxlbWVudMOzdyB3ZXduxIV0cnoganVtYm90cm9uYS5cbiAgICAgICAgLSBgYmFja2dyb3VuZC1pbWFnZWA6IFVzdGF3aWEgdMWCbyBuYSBvYnJhemVrIHogb2tyZcWbbG9uZWogxZtjaWXFvGtpLlxuICAgICAgICAtIGBiYWNrZ3JvdW5kLXBvc2l0aW9uYDogQ2VudHJ1amUgdMWCbyB6YXLDs3dubyB3IHBvemlvbWllLCBqYWsgaSB3IHBpb25pZS5cbiAgICAgICAgLSBgYmFja2dyb3VuZC1yZXBlYXRgOiBaYXBvYmllZ2EgcG93dGFyemFuaXUgdMWCYS5cbiAgICAgICAgLSBgYmFja2dyb3VuZC1zaXplYDogRG9wYXNvd3VqZSB0xYJvIGRvIHd5bWlhcsOzdyBrb250ZW5lcmEuXG4gICAgICAgIC0gYGxldHRlci1zcGFjaW5nYDogWndpxJlrc3phIHByemVzdHJ6ZcWEIG1pxJlkenkgbGl0ZXJhbWkgdyBjZWx1IHBvcHJhd3kgY3p5dGVsbm/Fm2NpLlxuICAgICAgICAtIGBjb2xvcmA6IE9rcmXFm2xhIGtvbG9yIHRla3N0dSBuYSBjaWVtbm9jemVyd29ueS5cbiAgICAgICAgLSBgZm9udC1zaXplYDogVXN0YXdpYSByb3ptaWFyIGN6Y2lvbmtpIG5hIDhwdCwgY28gc3ByYXdpYSwgxbxlIGplc3Qgb25hIG1uaWVqc3phLlxuICAgICAgICAtIGBwYWRkaW5nLWJvdHRvbWA6IFp3acSZa3N6YSBwcnplc3RyemXFhCBuYSBkb2xlIGtvbnRlbmVyYSwgem1pZW5pYWrEhWMgamVnbyBwcm9wb3JjamUuXG4gICAgICAgIC0gYHBhZGRpbmctdG9wYCBpIGBwYWRkaW5nLWxlZnRgOiBVc3Rhd2lhasSFIG1hxYJ5IHBhZGRpbmcgdyBnw7NybmVqIGkgbGV3ZWogY3rEmcWbY2kuXG4gICAgICAgIC0gYG1hcmdpbi1ib3R0b21gOiBVc3Rhd2lhIHVqZW1ueSBtYXJnaW5lcyBkb2xueSwgY28gcG96d2FsYSBuYSBuYWvFgmFkYW5pZSBzacSZIGVsZW1lbnTDs3cuXG4gICAgKi9cbn1cblxuLmJnLWxpZ2h0IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmFhZDhiICFpbXBvcnRhbnQ7IC8qIFVzdGF3aWEgdMWCbyBuYSBrb2xvciBvIG9kY2llbml1IG9saXdrb3d5bSAoI2JhYWQ4YiksIHogdcW8eWNpZW0gIWltcG9ydGFudCwgYWJ5IHd5bXVzacSHIHphc3Rvc293YW5pZSB0ZWogcmVndcWCeSAqL1xuICAgIHBhZGRpbmctbGVmdDogMTBweDsgLyogRG9kYWplIHBhZGRpbmcgbyB3YXJ0b8WbY2kgMTBweCBwbyBsZXdlaiBzdHJvbmllIGVsZW1lbnR1ICovXG4gICAgcGFkZGluZy1yaWdodDogMTBweDsgLyogRG9kYWplIHBhZGRpbmcgbyB3YXJ0b8WbY2kgMTBweCBwbyBwcmF3ZWogc3Ryb25pZSBlbGVtZW50dSAqL1xuICAgIC8qXG4gICAgICAgIC0gYGJhY2tncm91bmQtY29sb3JgOiBPa3JlxZtsYSBrb2xvciB0xYJhIG5hIG9saXdrb3d5IG9kY2llxYQgKCNiYWFkOGIpLCBwcnp5IHXFvHljaXUgIWltcG9ydGFudCB3IGNlbHUgbmFkcGlzYW5pYSBpbm55Y2ggcmVndcWCLlxuICAgICAgICAtIGBwYWRkaW5nLWxlZnRgIGkgYHBhZGRpbmctcmlnaHRgOiBEb2RhasSFIHByemVzdHJ6ZcWEIHdld27EmXRyem7EhSBwbyBib2thY2ggZWxlbWVudHUsIGNvIHphcGV3bmlhIG9kcG93aWVkbmnEhSBvZGxlZ8WCb8WbxIcgb2Qga3Jhd8SZZHppLlxuICAgICovXG59XG5cbi5uYXYtaXRlbSB7XG4gICAgcGFkZGluZzogM3B4ICFpbXBvcnRhbnQ7IC8qIFVzdGF3aWEgcGFkZGluZyBuYSAzcHggd2Ugd3N6eXN0a2ljaCBzdHJvbmFjaCBlbGVtZW50dSwgeiB1xbx5Y2llbSAhaW1wb3J0YW50LCBhYnkgd3ltdXNpxIcgemFzdG9zb3dhbmllIHRlaiByZWd1xYJ5ICovXG4gICAgLypcbiAgICAgICAgLSBgcGFkZGluZ2A6IERvZGFqZSBwcnplc3RyemXFhCB3ZXduxJl0cnpuxIUgbyB3YXJ0b8WbY2kgM3B4IHdlIHdzenlzdGtpY2ggc3Ryb25hY2ggZWxlbWVudHUuXG4gICAgICAgIC0gYCFpbXBvcnRhbnRgOiBXeW11c3phLCBhYnkgdGEgcmVndcWCYSBtaWHFgmEgd3nFvHN6eSBwcmlvcnl0ZXQgdyBzdG9zdW5rdSBkbyBpbm55Y2ggcmVndcWCLlxuICAgICovXG59XG5cbi5wYWdlLWxpbmsge1xuICAgIGNvbG9yOiAjNzk3OTNhOyAvKiBVc3Rhd2lhIGtvbG9yIHRla3N0dSBuYSBvZGNpZcWEIHppZWxvbmthd2VnbyBiZcW8dSAoIzc5NzkzYSkgZGxhIGxpbmvDs3cgbmEgc3Ryb25hY2ggcGFnaW5hY2ppICovXG4gICAgLypcbiAgICAgICAgLSBgY29sb3JgOiBPa3JlxZtsYSBrb2xvciB0ZWtzdHUgbGlua3UgbmEgb2RjaWXFhCB6aWVsb25rYXdlZ28gYmXFvHUgKCM3OTc5M2EpLCBrdMOzcnkgZG9icnplIGtvbnRyYXN0dWplIHogdMWCZW0uXG4gICAgKi9cbn1cblxuLnBhZ2UtaXRlbS5hY3RpdmUgLnBhZ2UtbGluayB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2JhYWQ4YiAhaW1wb3J0YW50OyAvKiBVc3Rhd2lhIGtvbG9yIHTFgmEgbmEgb2RjaWXFhCBiZcW8dSAoI2JhYWQ4YikgZGxhIGFrdHl3bmVnbyBsaW5rdSBwYWdpbmFjamkgKi9cbiAgICBib3JkZXItY29sb3I6ICNiYWFkOGIgIWltcG9ydGFudDsgLyogVXN0YXdpYSBrb2xvciByYW1raSBuYSBvZGNpZcWEIGJlxbx1ICgjYmFhZDhiKSBkbGEgYWt0eXduZWdvIGxpbmt1IHBhZ2luYWNqaSAqL1xuICAgIC8qXG4gICAgICAgIC0gYGJhY2tncm91bmQtY29sb3JgOiBPa3JlxZtsYSBrb2xvciB0xYJhIGFrdHl3bmVnbyBsaW5rdSBuYSBiZcW8b3d5ICgjYmFhZDhiKSwgd3lyw7PFvG5pYWrEhWMgZ28gbmEgdGxlIGlubnljaC5cbiAgICAgICAgLSBgYm9yZGVyLWNvbG9yYDogVXN0YXdpYSBrb2xvciByYW1raSBha3R5d25lZ28gbGlua3UgbmEgdGVuIHNhbSBvZGNpZcWEIGJlxbx1LCBjbyB6YXBld25pYSBzcMOzam5vxZvEhyB3aXp1YWxuxIUuXG4gICAgICAgIC0gYCFpbXBvcnRhbnRgOiBXeW11c3phIHphc3Rvc293YW5pZSB0ZWogcmVndcWCeSwgbmF3ZXQgamXFm2xpIGlubmUgcmVndcWCeSBtb2fFgnlieSB1c3Rhd2nEhyBpbm5lIGtvbG9yeS5cbiAgICAqL1xufVxuXG4uYnRuLW91dGxpbmUtZGFyazpub3QoOmRpc2FibGVkKTpub3QoLmRpc2FibGVkKS5hY3RpdmUsXG4uYnRuLmJ0bi1vdXRsaW5lLWRhcms6aG92ZXIge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYgIWltcG9ydGFudDsgLyogVXN0YXdpYSB0xYJvIG5hIGJpYcWCeSBrb2xvciAoI0ZGRkZGRikgZGxhIGFrdHl3bmVnbyBsdWIgbmFqZWNoYW5lZ28gcHJ6eWNpc2t1ICovXG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDsgLyogT2tyZcWbbGEgc3R5bCByYW1raSBqYWtvIGNpxIVnxYJ5IChzb2xpZCksIHphcGV3bmlhasSFYyB3eXJhxbpuxIUgZ3JhbmljxJkgKi9cbiAgICBib3JkZXItd2lkdGg6IDAuNXB4OyAvKiBVc3Rhd2lhIGdydWJvxZvEhyByYW1raSBuYSAwLjVweCwgY28gZGFqZSBzdWJ0ZWxuxIUgZ3JhbmljxJkgKi9cbiAgICAvKlxuICAgICAgICAtIGBiYWNrZ3JvdW5kLWNvbG9yYDogVXN0YXdpYSB0xYJvIG5hIGJpYcWCeSBrb2xvciAoI0ZGRkZGRikgZGxhIHByenljaXNrdSB3IHN0YW5pZSBha3R5d255bSBsdWIgcG8gbmFqZWNoYW5pdS5cbiAgICAgICAgLSBgYm9yZGVyLXN0eWxlYDogT2tyZcWbbGEsIMW8ZSByYW1rYSBixJlkemllIGNpxIVnxYJhLCBjbyBwb3ByYXdpYSB3aWRvY3pub8WbxIcgcHJ6eWNpc2t1LlxuICAgICAgICAtIGBib3JkZXItd2lkdGhgOiBPa3JlxZtsYSBncnVib8WbxIcgcmFta2kgbmEgMC41cHgsIGNvIHphcGV3bmlhIHN1YnRlbG7EhSwgYWxlIHd5cmHFum7EhSBncmFuaWPEmS5cbiAgICAgICAgLSBgIWltcG9ydGFudGA6IFd5bXVzemEgemFzdG9zb3dhbmllIHRlaiByZWd1xYJ5LCBuYXdldCBqZcWbbGkgaW5uZSByZWd1xYJ5IG1vZ8WCeWJ5IHVzdGF3acSHIGlubmUga29sb3J5IGx1YiBzdHlsZS5cbiAgICAqL1xufVxuXG4uYnRuLW91dGxpbmUtZGFyayB7XG5cdGJvcmRlci1zdHlsZTogc29saWQ7IC8qIFVzdGF3aWEgc3R5bCByYW1raSBuYSBjacSFZ8WCeSwgY28gemFwZXduaWEgd3lyYcW6bsSFIGdyYW5pY8SZIHdva8OzxYIgcHJ6eWNpc2t1ICovXG5cdGJvcmRlci13aWR0aDogMC41cHg7IC8qIFVzdGF3aWEgZ3J1Ym/Fm8SHIHJhbWtpIG5hIDAuNXB4LCBjbyB6YXBld25pYSBzdWJ0ZWxuxIUsIGFsZSB3aWRvY3puxIUgZ3JhbmljxJkgKi9cblx0Lypcblx0XHQtIGBib3JkZXItc3R5bGVgOiBPa3JlxZtsYSwgxbxlIHJhbWthIGLEmWR6aWUgY2nEhWfFgmEsIGNvIHBvbWFnYSB3IHd5cmHFum55bSBvZGR6aWVsZW5pdSBwcnp5Y2lza3Ugb2QgdMWCYS5cblx0XHQtIGBib3JkZXItd2lkdGhgOiBPa3JlxZtsYSBncnVib8WbxIcgcmFta2kgbmEgMC41cHgsIGNvIHR3b3J6eSBkZWxpa2F0bsSFIGdyYW5pY8SZIHdva8OzxYIgcHJ6eWNpc2t1LlxuXHQgKi9cbn1cbiBcbi5jdXN0b20tYnRuLXNpemUge1xuXHRtYXJnaW4tdG9wOiAzcHg7IC8qIFVzdGF3aWEgZ8Ozcm55IG1hcmdpbmVzIG5hIDNweCwgY28gemFwZXduaWEgbmlld2llbGtpIG9kc3TEmXAgb2QgZWxlbWVudHUgbmFkIHByenljaXNraWVtICovXG5cdHBhZGRpbmc6IDBweCAhaW1wb3J0YW50OyAvKiBVc3V3YSBwYWRkaW5nLCB1c3Rhd2lhasSFYyBnbyBuYSAwcHgsIGFieSBwcnp5Y2lzayBtaWHFgiBtaW5pbWFsbmUgd2V3bsSZdHJ6bmUgb2RzdMSZcHkgKi9cblx0bWFyZ2luLWJvdHRvbTogYXV0bzsgLyogVXN0YXdpYSBhdXRvbWF0eWN6bnkgbWFyZ2luZXMgZG9sbnksIGNvIHBvendhbGEgbmEgZWxhc3R5Y3puZSByb3ptaWVzemN6ZW5pZSBwcnp5Y2lza3UgdyBkYW55bSBrb250ZW5lcnplICovXG5cdG1hcmdpbi1sZWZ0OiAzcHg7IC8qIERvZGFqZSBtYXJnaW5lcyB6IGxld2VqIHN0cm9ueSBvIHdhcnRvxZtjaSAzcHgsIHphcGV3bmlhasSFYyBvZHN0xJlwIG9kIGVsZW1lbnR1IG9ib2sgKi9cblx0bWFyZ2luLXJpZ2h0OiAzcHg7IC8qIERvZGFqZSBtYXJnaW5lcyB6IHByYXdlaiBzdHJvbnkgbyB3YXJ0b8WbY2kgM3B4LCB6YXBld25pYWrEhWMgb2RzdMSZcCBvZCBlbGVtZW50dSBvYm9rICovXG5cdC8qXG5cdFx0LSBgbWFyZ2luLXRvcGA6IFVzdGF3aWEgbWFyZ2luZXMgZ8Ozcm55IG5hIDNweCwgY28gd3DFgnl3YSBuYSByb3ptaWVzemN6ZW5pZSBwcnp5Y2lza3Ugd3pnbMSZZGVtIGlubnljaCBlbGVtZW50w7N3LlxuXHRcdC0gYHBhZGRpbmdgOiBVc3V3YSB3c3plbGtpZSB3ZXduxJl0cnpuZSBvZHN0xJlweSwgY28gbW/FvGUgYnnEhyBwcnp5ZGF0bmUgZG8gcHJlY3l6eWpuZWdvIGRvcGFzb3dhbmlhIHJvem1pYXJ1IHByenljaXNrdS5cblx0XHQtIGBtYXJnaW4tYm90dG9tYDogVXN0YXdpYSBkb2xueSBtYXJnaW5lcyBuYSBgYXV0b2AsIGNvIHVtb8W8bGl3aWEgZWxhc3R5Y3puZSByb3ptaWVzemN6ZW5pZSBwcnp5Y2lza3UuXG5cdFx0LSBgbWFyZ2luLWxlZnRgIGkgYG1hcmdpbi1yaWdodGA6IERvZGFqxIUgbWFyZ2luZXN5IHBvIGJva2FjaCBwcnp5Y2lza3UsIHphcGV3bmlhasSFYyBvZHBvd2llZG5pZSBvZHN0xJlweSBvZCBpbm55Y2ggZWxlbWVudMOzdy5cblx0ICovXG59XG4gXG4uY3VzdG9tLW1lbnUge1xuXHRiYWNrZ3JvdW5kLWNvbG9yOiAjZGJkM2M3ICFpbXBvcnRhbnQ7IC8qIFVzdGF3aWEgdMWCbyBtZW51IG5hIGtvbG9yICNkYmQzYzcsIGt0w7NyeSBqZXN0IHN0b25vd2FueW0gb2RjaWVuaWVtIGJlxbx1LCB6YXBld25pYWrEhWN5bSBzdWJ0ZWxuxIUgZXN0ZXR5a8SZICovXG5cdC8qXG5cdFx0LSBgYmFja2dyb3VuZC1jb2xvcmA6IFVzdGF3aWEga29sb3IgdMWCYSBuYSAjZGJkM2M3LCBjbyBuYWRhamUgbWVudSBqYXNueSBiZcW8b3d5IG9kY2llxYQuXG5cdFx0LSBgIWltcG9ydGFudGA6IFd5bXVzemEgemFzdG9zb3dhbmllIHRlaiByZWd1xYJ5LCBuYXdldCBqZcWbbGkgaW5uZSByZWd1xYJ5IENTUyBtb2fEhSB1c3Rhd2nEhyBpbm5lIGtvbG9yeSB0xYJhLlxuXHQgKi9cbn1cbiBcbiNwb2tvamUsICNmbGFnaSB7XG4gICAgbWFyZ2luLWJvdHRvbTogNHB4ICFpbXBvcnRhbnQ7IC8qIFVzdGF3aWEgZG9sbnkgbWFyZ2luZXMgbmEgNHB4IGRsYSBlbGVtZW50w7N3IG8gSUQgJ3Bva29qZScgaSAnZmxhZ2knLCB6YXBld25pYWrEhWMgbWHFgnkgb2RzdMSZcCBvZCBpbm55Y2ggZWxlbWVudMOzdyBwb25pxbxlaiAqL1xuICAgIC8qXG4gICAgICAgIC0gYG1hcmdpbi1ib3R0b21gOiBVc3Rhd2lhIGRvbG55IG1hcmdpbmVzIG5hIDRweCwgY28gemFwZXduaWEgb2Rwb3dpZWRuacSFIHByemVzdHJ6ZcWEIG1pxJlkenkgdHltaSBlbGVtZW50YW1pIGEgaW5ueW1pIHpuYWpkdWrEhWN5bWkgc2nEmSBwb25pxbxlai5cbiAgICAgICAgLSBgIWltcG9ydGFudGA6IFd5bXVzemEgemFzdG9zb3dhbmllIHRlaiByZWd1xYJ5LCBuYXdldCBqZcWbbGkgaW5uZSByZWd1xYJ5IENTUyBtb2fEhSB1c3Rhd2nEhyBpbm55IG1hcmdpbmVzLlxuICAgICovXG59XG5cbi5nc2MtY29udHJvbC1jc2Uge1xuICAgIGJvcmRlcjogMHB4ICFpbXBvcnRhbnQ7IC8qIFVzdXdhIHJhbWvEmSAoYm9yZGVyKSB3b2vDs8WCIGVsZW1lbnR1IG8ga2xhc2llICdnc2MtY29udHJvbC1jc2UnLCB6YXBld25pYWrEhWMgYnJhayBvYnJhbW93YW5pYSAqL1xuICAgIC8qXG4gICAgICAgIC0gYGJvcmRlcmA6IFVzdGF3aWEgc3plcm9rb8WbxIcgcmFta2kgbmEgMHB4LCBjbyBjYcWCa293aWNpZSB1c3V3YSBvYnJhbW93YW5pZSBlbGVtZW50dS5cbiAgICAgICAgLSBgIWltcG9ydGFudGA6IFd5bXVzemEgemFzdG9zb3dhbmllIHRlaiByZWd1xYJ5LCBuYXdldCBqZcWbbGkgaW5uZSByZWd1xYJ5IENTUyBtb2fEhSB1c3Rhd2nEhyBpbm7EhSByYW1rxJkuXG4gICAgKi9cbn1cblxuLm5hdmJhci10b2dnbGVyIHtcbiAgICBtYXJnaW46IDdweCAhaW1wb3J0YW50OyAvKiBVc3Rhd2lhIG1hcmdpbmVzIHdva8OzxYIgcHJ6eWNpc2t1IHJvendpamFuaWEgbmEgN3B4LCBjbyB6YXBld25pYSBvZHBvd2llZG5pxIUgcHJ6ZXN0cnplxYQgd29rw7PFgiBwcnp5Y2lza3UgKi9cbiAgICAvKlxuICAgICAgICAtIGBtYXJnaW5gOiBVc3Rhd2lhIG1hcmdpbmVzIG5hIDdweCB3ZSB3c3p5c3RraWNoIGtpZXJ1bmthY2ggKGfDs3JhLCBkw7PFgiwgbGV3bywgcHJhd28pLCB0d29yesSFYyBwcnplc3RyemXFhCB3b2vDs8WCIGVsZW1lbnR1LlxuICAgICAgICAtIGAhaW1wb3J0YW50YDogV3ltdXN6YSB6YXN0b3Nvd2FuaWUgdGVqIHJlZ3XFgnksIG5hd2V0IGplxZtsaSBpbm5lIHJlZ3XFgnkgQ1NTIG1vZ8SFIHVzdGF3acSHIGlubnkgbWFyZ2luZXMuXG4gICAgKi9cbn1cblxuLm5hdmJhci5uYXZiYXItbGlnaHQuYmctbGlnaHQge1xuICAgIGJhY2tncm91bmQ6ICNiYWFkOGIgIWltcG9ydGFudDsgLyogRmFsbGJhY2sga29sb3J1IGRsYSBwcnplZ2zEhWRhcmVrIGJleiB3c3BhcmNpYSBncmFkaWVudMOzdy4gKi9cbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCAjZDBjMGE0IDAlLCAjYzBiMDhmIDM4JSwgI2IyOWY3ZCAxMDAlKSAhaW1wb3J0YW50OyAvKiBHxYLDs3dueSBncmFkaWVudCBiZWxraSBtZW51LiAqL1xuICAgIGJhY2tncm91bmQ6IC13ZWJraXQtbGluZWFyLWdyYWRpZW50KHRvcCwgI2QwYzBhNCAwJSwgI2MwYjA4ZiAzOCUsICNiMjlmN2QgMTAwJSkgIWltcG9ydGFudDsgLyogV2Vyc2phIGtvbXBhdHliaWxuYSBkbGEgc3RhcnN6eWNoIFdlYktpdMOzdy4gKi9cbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyNiwgMTAyLCA2NywgMC4xOCk7IC8qIEJhcmR6byBzdWJ0ZWxueSBvYnJ5cyBvZGNpbmFqxIVjeSBiZWxrxJkgb2QgdMWCYSBzdHJvbnkuICovXG4gICAgYm94LXNoYWRvdzpcbiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMzIpLFxuICAgICAgICAwIDJweCA4cHggcmdiYSg3NCwgNTcsIDMwLCAwLjA2KTtcbiAgICAvKlxuICAgICAgICAtIEdyYWRpZW50IG9kcG93aWFkYSB0ZW11IHNhbWVtdSBraWVydW5rb3dpIGNvIHN0b3BrYSwgYWJ5IHphY2hvd2HEhyBzcMOzam5vxZvEhyBnw7NyYeKAk2TDs8WCLlxuICAgICAgICAtIGBpbnNldGAgcm96amHFm25pYSBnw7NybsSFIGtyYXfEmWTFuiBpIGRvZGFqZSBsZWtraSBwb8WCeXNrLlxuICAgICAgICAtIFpld27EmXRyem55IGNpZcWEIGplc3QgYmFyZHpvIG1hxYJ5LCDFvGVieSBiZWxrYSBuaWUgd3lnbMSFZGHFgmEgY2nEmcW8a28uXG4gICAgKi9cbn1cblxuLm5hdmJhci1uYXYge1xuICBmbGV4LXdyYXA6IHdyYXAgIWltcG9ydGFudDsgLyogUG96d2FsYSBtZW51IHphd2lqYcSHIHNpxJkgZG8ga29sZWpuZWdvIHdpZXJzemEsIGdkeSBuaWUgbWllxZtjaSBzacSZIHcgamVkbmVqIGxpbmlpICovXG4gIHdpZHRoOiAxMDAlOyAgICAgICAgICAgICAgICAvKiBVc3Rhd2lhIHN6ZXJva2/Fm8SHIHBhc2thIG5hd2lnYWN5am5lZ28gbmEgMTAwJSBzemVyb2tvxZtjaSBrb250ZW5lcmEgKi9cbiAgLypcbiAgICAgIC0gYGZsZXgtd3JhcDogd3JhcGAg4oCTIFBvendhbGEsIGFieSBlbGVtZW50eSB3ZXduxIV0cnogYC5uYXZiYXItbmF2YCAoY3p5bGkgcHJ6eWNpc2tpIGkgbGlua2kgbWVudSkgcHJ6ZWNob2R6acWCeSBkbyBrb2xlam5laiBsaW5paSwgXG4gICAgICAgIGdkeSBqZXN0IHpieXQgbWHFgm8gbWllanNjYSB3IHBvemlvbWllLiBEemnEmWtpIHRlbXUgbWVudSBuaWUgd3lqZcW8ZMW8YSBwb3phIHdpZG9jem7EhSBjesSZxZvEhyBzdHJvbnkuXG4gICAgICAtIGAhaW1wb3J0YW50YCDigJMgV3ltdXN6YSB6YXN0b3Nvd2FuaWUgdGVqIHJlZ3XFgnkgbmF3ZXQgamXFm2xpIGlubmUgc3R5bGUgbW9nxYJ5YnkgasSFIG5hZHBpc2HEhyAobnAuIGRvbXnFm2xuZSB1c3Rhd2llbmlhIEJvb3RzdHJhcGEpLlxuICAgICAgLSBgd2lkdGg6IDEwMCVgIOKAkyBSb3pjacSFZ2EgY2HFgnkgcGFzZWsgbmF3aWdhY3lqbnkgbmEgY2HFgsSFIHN6ZXJva2/Fm8SHIHJvZHppY2EgKGBjb250YWluZXJgIGx1YiBgbmF2YmFyYCksIGNvIHphcGV3bmlhIHNww7Nqbm/Fm8SHIHVrxYJhZHVcbiAgICAgICAgaSB6YXBvYmllZ2EgZWZla3Rvd2kg4oCexZtjacWbbmnEmWNpYeKAnSBtZW51IHBvZGN6YXMgem1pYW55IHN6ZXJva2/Fm2NpIG9rbmEuXG4gICovXG59XG5cbi5zbWFsbCwgc21hbGwge1xuICAgIHdpZHRoOiAyMDBweDsgLyogVXN0YXdpYSBzemVyb2tvxZvEhyBlbGVtZW50w7N3IHoga2xhc8SFICdzbWFsbCcgbHViIHRhZ2llbSAnc21hbGwnIG5hIDIwMHB4ICovXG4gICAgLypcbiAgICAgICAgLSBgd2lkdGhgOiBPa3JlxZtsYSBzemVyb2tvxZvEhyBlbGVtZW50dSBuYSAyMDBweCwgY28gc3ByYXdpYSwgxbxlIGVsZW1lbnR5IHRlIGLEmWTEhSBtaWHFgnkgc3RhxYLEhSBzemVyb2tvxZvEhy5cbiAgICAgICAgLSBgc21hbGxgOiBEb3R5Y3p5IHphcsOzd25vIGVsZW1lbnTDs3cgeiBrbGFzxIUgYC5zbWFsbGAsIGphayBpIHRhZ3UgSFRNTCBgPHNtYWxsPmAuXG4gICAgKi9cbn1cblxuLmZpZ3VyZSB7XG4gICAgd2lkdGg6IDYwMCU7IC8qIFVzdGF3aWEgc3plcm9rb8WbxIcgZWxlbWVudHUgbmEgNjAwJSBqZWdvIG5vcm1hbG5laiBzemVyb2tvxZtjaSwgY28gbW/FvGUgc3ByYXdpxIcsIMW8ZSBlbGVtZW50IGLEmWR6aWUgYmFyZHpvIHN6ZXJva2kgKi9cbiAgICBoZWlnaHQ6IDYwJTsgLyogVXN0YXdpYSB3eXNva2/Fm8SHIGVsZW1lbnR1IG5hIDYwJSBqZWdvIG5vcm1hbG5laiB3eXNva2/Fm2NpICovXG4gICAgLypcbiAgICAgICAgLSBgd2lkdGhgOiBPa3JlxZtsYSBzemVyb2tvxZvEhyBlbGVtZW50dSBqYWtvIDYwMCUgamVnbyBuYXR1cmFsbmVqIHN6ZXJva2/Fm2NpLCBjbyBtb8W8ZSBzcG93b2Rvd2HEhywgxbxlIGLEmWR6aWUgb24gem5hY3puaWUgc3plcnN6eSBuacW8IG9yeWdpbmFsbnkgcm96bWlhci5cbiAgICAgICAgLSBgaGVpZ2h0YDogVXN0YXdpYSB3eXNva2/Fm8SHIGVsZW1lbnR1IG5hIDYwJSBqZWdvIHBpZXJ3b3RuZWogd3lzb2tvxZtjaSwgY28gem1pZW5pYSBwcm9wb3JjamUgZWxlbWVudHUuXG4gICAgKi9cbn1cblxuLmltZy1mbHVpZCB7XG4gICAgcGFkZGluZzogN3B4OyAvKiBEb2RhamUgd2V3bsSZdHJ6bmUgb2RzdMSZcHkgbyB3YXJ0b8WbY2kgN3B4IGRvIHdzenlzdGtpY2ggc3Ryb24gZWxlbWVudHUgKi9cbiAgICAvKlxuICAgICAgICAtIGBwYWRkaW5nYDogT2tyZcWbbGEgd2V3bsSZdHJ6bnkgb2RzdMSZcCB3b2vDs8WCIHphd2FydG/Fm2NpIGVsZW1lbnR1LCBjbyB3cMWCeXdhIG5hIHByemVzdHJ6ZcWEIG1pxJlkenkgdHJlxZtjacSFIGEgamVnbyBrcmF3xJlkemnEhS4gV2FydG/Fm8SHIDdweCB6YXBld25pYSBuaWV3aWVsa2kgbWFyZ2luZXMgd29rw7PFgiBvYnJhemthLlxuICAgICovXG59XG5cbi5jYXJvdXNlbCB7XG4gICAgbWFyZ2luLXRvcDogLTE3cHggIWltcG9ydGFudDsgLyogVXN0YWxhIG1hcmdpbmVzIGfDs3JueSBuYSAtMTdweCwgcHJ6ZXN1d2FqxIVjIGVsZW1lbnQgdyBnw7NyxJkgKi9cbiAgICAvKlxuICAgICAgICAtIGBtYXJnaW4tdG9wYDogVXN0YXdpYSBtYXJnaW5lcyBnw7NybnkgbmEgLTE3cHgsIGNvIHBvd29kdWplIHByemVzdW5pxJljaWUgZWxlbWVudHUgdyBnw7NyxJkgbyAxN3B4LiBaYXN0b3Nvd2FuaWUgYCFpbXBvcnRhbnRgIHd5bXVzemEgbmFkcGlzYW5pZSBpbm55Y2ggcmVndcWCIENTUy5cbiAgICAqL1xufVxuXG4uY2Fyb3VzZWwtY29udHJvbC1wcmV2LWljb24ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgLyogVXN0YXdpYSBwb3p5Y2rEmSBlbGVtZW50dSBuYSBhYnNvbHV0bsSFLCB3emdsxJlkZW0gbmFqYmxpxbxzemVnbyBwcnpvZGthIG8gcG96eWNqaSBpbm5laiBuacW8ICdzdGF0aWMnICovXG4gICAgbGVmdDogNXB4OyAvKiBVc3Rhd2lhIGVsZW1lbnQgNXB4IG9kIGxld2VqIGtyYXfEmWR6aSBrb250ZW5lcmEgKi9cbiAgICAvKlxuICAgICAgICAtIGBwb3NpdGlvbjogYWJzb2x1dGVgOiBVc3Rhd2lhIHBvenljasSZIGVsZW1lbnR1IG5hIGFic29sdXRuxIUsIGNvIG96bmFjemEsIMW8ZSB6b3N0YW5pZSBvbiB1bWllc3pjem9ueSB3IHN0b3N1bmt1IGRvIG5hamJsacW8c3plZ28ga29udGVuZXJhIG8gcG96eWNqaSBpbm5laiBuacW8ICdzdGF0aWMnLlxuICAgICAgICAtIGBsZWZ0YDogT2tyZcWbbGEgcG96eWNqxJkgZWxlbWVudHUgd3pnbMSZZGVtIGxld2VqIGtyYXfEmWR6aSByb2R6aWNhLiBVc3Rhd2llbmllIG5hIDVweCBzcHJhd2lhLCDFvGUgZWxlbWVudCBqZXN0IG9kZGFsb255IG8gNXB4IG9kIGxld2VqIGtyYXfEmWR6aS5cbiAgICAqL1xufVxuXG4uY2Fyb3VzZWwtY29udHJvbC1uZXh0LWljb24ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsgLyogVXN0YXdpYSBwb3p5Y2rEmSBlbGVtZW50dSBuYSBhYnNvbHV0bsSFLCB3emdsxJlkZW0gbmFqYmxpxbxzemVnbyBwcnpvZGthIG8gcG96eWNqaSBpbm5laiBuacW8ICdzdGF0aWMnICovXG4gICAgcmlnaHQ6IDVweDsgLyogVXN0YXdpYSBlbGVtZW50IDVweCBvZCBwcmF3ZWoga3Jhd8SZZHppIGtvbnRlbmVyYSAqL1xuICAgIC8qXG4gICAgICAgIC0gYHBvc2l0aW9uOiBhYnNvbHV0ZWA6IFVzdGF3aWEgcG96eWNqxJkgZWxlbWVudHUgbmEgYWJzb2x1dG7EhSwgY28gb3puYWN6YSwgxbxlIHpvc3RhbmllIG9uIHVtaWVzemN6b255IHcgc3Rvc3Vua3UgZG8gbmFqYmxpxbxzemVnbyBrb250ZW5lcmEgbyBwb3p5Y2ppIGlubmVqIG5pxbwgJ3N0YXRpYycuXG4gICAgICAgIC0gYHJpZ2h0YDogT2tyZcWbbGEgcG96eWNqxJkgZWxlbWVudHUgd3pnbMSZZGVtIHByYXdlaiBrcmF3xJlkemkgcm9kemljYS4gVXN0YXdpZW5pZSBuYSA1cHggc3ByYXdpYSwgxbxlIGVsZW1lbnQgamVzdCBvZGRhbG9ueSBvIDVweCBvZCBwcmF3ZWoga3Jhd8SZZHppLlxuICAgICovXG59XG5cbmltZy53ZWF0aGVyIHtcbiAgICBoZWlnaHQ6IDcwcHg7IC8qIFVzdGF3aWEgd3lzb2tvxZvEhyBvYnJhenUgbmEgNzBweCAqL1xuICAgIHdpZHRoOiA3MHB4OyAgLyogVXN0YXdpYSBzemVyb2tvxZvEhyBvYnJhenUgbmEgNzBweCAqL1xuICAgIC8qXG4gICAgICAgIC0gYGhlaWdodGA6IE9rcmXFm2xhIHd5c29rb8WbxIcgb2JyYXp1IG5hIDcwcHgsIHphcGV3bmlhasSFYyBzdGHFgsSFIHdpZWxrb8WbxIcgZGxhIG9icmF6dSBwb2dvZHkuXG4gICAgICAgIC0gYHdpZHRoYDogT2tyZcWbbGEgc3plcm9rb8WbxIcgb2JyYXp1IG5hIDcwcHgsIHphcGV3bmlhasSFYywgxbxlIG9icmF6IGLEmWR6aWUgbWlhxYIgcsOzd27EhSBzemVyb2tvxZvEhyBpIHd5c29rb8WbxIcuXG4gICAgKi9cbn1cblxuc3Bhbi53ZWF0aGVyIHtcbiAgICBjb2xvcjogIzc5NzkzYTsgLyogVXN0YXdpYSBrb2xvciB0ZWtzdHUgbmEgc3phcm8temllbG9ueSAoIzc5NzkzYSkgKi9cbiAgICBmb250LXNpemU6IDI1cHg7IC8qIFVzdGF3aWEgcm96bWlhciBjemNpb25raSBuYSAyNXB4LCBjbyBzcHJhd2lhLCDFvGUgdGVrc3QgYsSZZHppZSBkb2JyemUgd2lkb2N6bnkgKi9cbiAgICAvKlxuICAgICAgICAtIGBjb2xvcmA6IE9rcmXFm2xhIGtvbG9yIHRla3N0dSBuYSBzemFyby16aWVsb255LCBrdMOzcnkgcGFzdWplIGRvIG9nw7NsbmVnbyBzdHlsdSBzdHJvbnkuXG4gICAgICAgIC0gYGZvbnQtc2l6ZWA6IFVzdGF3aWEgcm96bWlhciBjemNpb25raSBuYSAyNXB4LCBjbyB6YXBld25pYSB3eXJhxbpuxIUgd2lkb2N6bm/Fm8SHIHRla3N0dS5cbiAgICAqL1xufVxuXG5kaXYud2VhdGhlciB7XG5cdGRpc3BsYXk6IGZsZXg7IC8qIFVzdGF3aWEga29udGVuZXIgbmEgZmxleGJveCwgdW1vxbxsaXdpYWrEhWMgZWxhc3R5Y3puZSByb3ptaWVzemN6YW5pZSBlbGVtZW50w7N3IHdld27EhXRyeiAqL1xuXHRhbGlnbi1pdGVtczogY2VudGVyOyAvKiBXeXLDs3dudWplIGVsZW1lbnR5IHcgcGlvbmllIG5hIMWbcm9ka3Uga29udGVuZXJhICovXG5cdG1hcmdpbi10b3A6IC0yNXB4OyAvKiBEb2RhamUgbmVnYXR5d255IG1hcmdpbmVzIG5hIGfDs3J6ZSwgcHJ6ZXN1d2FqxIVjIGVsZW1lbnQgdyBnw7NyxJkgKi9cblx0bWFyZ2luLWJvdHRvbTogLTE1cHg7IC8qIERvZGFqZSBuZWdhdHl3bnkgbWFyZ2luZXMgbmEgZG9sZSwgcHJ6ZXN1d2FqxIVjIGVsZW1lbnQgdyBkw7PFgiAqL1xuXHRtYXJnaW4tbGVmdDogLTEwcHg7IC8qIERvZGFqZSBuZWdhdHl3bnkgbWFyZ2luZXMgcG8gbGV3ZWogc3Ryb25pZSwgcHJ6ZXN1d2FqxIVjIGVsZW1lbnQgdyBsZXdvICovXG5cdC8qXG5cdFx0LSBgZGlzcGxheTogZmxleGA6IFXFvHl3YSBtb2RlbHUgZmxleGJveCwgY28gdcWCYXR3aWEgcm96bWllc3pjemFuaWUgZWxlbWVudMOzdyB3IGtvbnRlbmVyemUuXG5cdFx0LSBgYWxpZ24taXRlbXM6IGNlbnRlcmA6IFd5csOzd251amUgd3N6eXN0a2llIGVsZW1lbnR5IHdld27EhXRyeiBrb250ZW5lcmEgZG8gxZtyb2RrYSB3IG9zaSBwaW9ub3dlai5cblx0XHQtIGBtYXJnaW4tdG9wYCwgYG1hcmdpbi1ib3R0b21gLCBgbWFyZ2luLWxlZnRgOiBTdG9zdWrEhSBuZWdhdHl3bmUgbWFyZ2luZXN5LCBhYnkgcHJ6ZXN1bsSFxIcga29udGVuZXIgd3pnbMSZZGVtIGlubnljaCBlbGVtZW50w7N3LlxuXHQqL1xufVxuIFxucC53ZWF0aGVyIHtcbiAgICBwYWRkaW5nOiAwcHggMHB4IDBweCAwcHg7IC8qIFVzdGF3aWEgcGFkZGluZyBuYSAwIHoga2HFvGRlaiBzdHJvbnksIGVsaW1pbnVqxIVjIHByemVzdHJ6ZcWEIHdld27EmXRyem7EhSB3b2vDs8WCIHRla3N0dSAqL1xuICAgIG1hcmdpbjogMHB4IDBweCAwcHggMHB4OyAvKiBVc3Rhd2lhIG1hcmdpbmVzIG5hIDAgeiBrYcW8ZGVqIHN0cm9ueSwgZWxpbWludWrEhWMgcHJ6ZXN0cnplxYQgemV3bsSZdHJ6bsSFIHdva8OzxYIgZWxlbWVudHUgKi9cbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7IC8qIFVzdXdhIGRvbXnFm2xuxIUgZGVrb3JhY2rEmSB0ZWtzdHUgKG5wLiBwb2RrcmXFm2xlbmllIGxpbmvDs3cpICovXG4gICAgY29sb3I6ICM3OTc5M2E7IC8qIFVzdGF3aWEga29sb3IgdGVrc3R1IG5hIG9kY2llxYQgemllbGVuaSAoIzc5NzkzYSkgKi9cbiAgICAvKlxuICAgICAgICAtIGBwYWRkaW5nYDogVXN1d2Egd2V3bsSZdHJ6bnkgb2RzdMSZcCAocGFkZGluZykgd29rw7PFgiB0ZWtzdHUsIGNvIHBvd29kdWplLCDFvGUgZWxlbWVudCBqZXN0IGJhcmR6aWVqIHp3YXJ0eW0gYmxva2llbS5cbiAgICAgICAgLSBgbWFyZ2luYDogVXN0YXdpYSBtYXJnaW5lc3kgbmEgMCwgY28gZWxpbWludWplIHByemVzdHJ6ZcWEIHdva8OzxYIgZWxlbWVudHUuXG4gICAgICAgIC0gYHRleHQtZGVjb3JhdGlvbmA6IFphcGV3bmlhLCDFvGUgdGVrc3QgbmllIGLEmWR6aWUgcG9ka3JlxZtsb255IGFuaSB3IMW8YWRlbiBpbm55IHNwb3PDs2Igb3pkb2Jpb255LlxuICAgICAgICAtIGBjb2xvcmA6IFVzdGF3aWEga29sb3IgdGVrc3R1IG5hIHppZWxvbnksIGNvIHBhc3VqZSBkbyBvZ8OzbG5lZ28gc3R5bHUgc3Ryb255LlxuICAgICovXG59XG5cbiNsb2NhdGlvbnMtbWVudSB7XG4gICAgbWFyZ2luLWJvdHRvbTogMjBweDsgLyogRG9kYWplIHByemVzdHJ6ZcWEIHBvbmnFvGVqIGVsZW1lbnR1IG1lbnUsIGFieSBvZGR6aWVsacSHIGdvIG9kIGlubnljaCBlbGVtZW50w7N3ICovXG4gICAgd2lkdGg6IDEwMCU7IC8qIFVzdGF3aWEgc3plcm9rb8WbxIcgZWxlbWVudHUgbmEgMTAwJSBzemVyb2tvxZtjaSBkb3N0xJlwbmVqIHcgamVnbyBrb250ZW5lcnplICovXG4gICAgcGFkZGluZzogMC40cmVtIDAuMnJlbSAwO1xuICAgIC8qXG4gICAgICAgIC0gYG1hcmdpbi1ib3R0b21gOiBVc3Rhd2lhIGRvbG55IG1hcmdpbmVzIG5hIDIwcHgsIGNvIHBvendhbGEgbmEgcHJ6ZXN0cnplxYQgbWnEmWR6eSB0eW0gZWxlbWVudGVtIGEgaW5ueW1pIHBvbmnFvGVqLlxuICAgICAgICAtIGB3aWR0aGA6IFVzdGF3aWEgc3plcm9rb8WbxIcgbWVudSBuYSAxMDAlIGRvc3TEmXBuZWogc3plcm9rb8WbY2ksIHNwcmF3aWFqxIVjLCDFvGUgZWxlbWVudCB3eXBlxYJuaWEgY2HFgsSFIGRvc3TEmXBuxIUgcHJ6ZXN0cnplxYQuXG4gICAgKi9cbn1cblxuI2xvY2F0aW9ucy1saXN0IHVsIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDBweCAhaW1wb3J0YW50OyAvKiBVc3V3YSBkb215xZtsbmUgd2NpxJljaWUgb2QgbGV3ZWogc3Ryb255IGxpc3R5LCB6YXBld25pYWrEhWMgamVqIHBlxYJuZSB3eXLDs3duYW5pZSBkbyBsZXdlaiBrcmF3xJlkemkgKi9cbiAgICAvKlxuICAgICAgICAtIGBwYWRkaW5nLWxlZnRgOiBVc3Rhd2lhIHBhZGRpbmcgKG9kc3TEmXApIHBvIGxld2VqIHN0cm9uaWUgbGlzdHkgbmEgMHB4LCBjbyBlbGltaW51amUgZG9tecWbbG5lIHdjacSZY2llLlxuICAgICAgICAtIGAhaW1wb3J0YW50YDogV3ltdXN6YSB6YXN0b3Nvd2FuaWUgdGVqIHJlZ3XFgnksIG5hd2V0IGplxZtsaSBpbm5lIHJlZ3XFgnkgQ1NTIG1pYcWCeWJ5IHVzdGF3acSHIGlubmUgd2FydG/Fm2NpIGRsYSBwYWRkaW5ndS5cbiAgICAqL1xufVxuXG4jbG9jYXRpb25zLWxpc3Qge1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsgLyogVXN1bmnEmWNpZSB3eWtyb3Brb3dhbmlhLCBhYnkgbGlzdGEgYnnFgmEgYmV6IHB1bmt0w7N3IHByemVkIGthxbxkeW0gZWxlbWVudGVtICovXG4gICAgZm9udC1zaXplOiAxMHB0OyAgICAgICAvKiBVc3Rhd2llbmllIHJvem1pYXJ1IGN6Y2lvbmtpIG5hIDEwcHQsIGNvIHNwcmF3aWEsIMW8ZSB0ZWtzdCBqZXN0IG1uaWVqc3p5LCBhbGUgY3p5dGVsbnkgKi9cbiAgICBjb2xvcjogIzAwMDAwMDsgICAgICAgIC8qIEtvbG9yIGN6Y2lvbmtpIG5hIGN6YXJueSwgemFwZXduaWFqxIVjIGRvYnLEhSBjenl0ZWxub8WbxIcgKi9cbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7ICAgIC8qIFd5csOzd25hbmllIHRla3N0dSB3IGVsZW1lbmNpZSBsaXN0eSBkbyDFm3JvZGthICovXG4gICAgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZGRjsgLyogVXN0YXdpZW5pZSBiaWHFgmVnbyB0xYJhIGRsYSBsaXN0eSAqL1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsgLyogUG9kd8Ozam5lIHVzdW5pxJljaWUgd3lrcm9wa293YW5pYSwgemFwZXduaWFqxIVjIGJyYWsgcHVua3TDs3cgKi9cbiAgICBwYWRkaW5nOiAwOyAgICAgICAgICAgIC8qIFVzdW5pxJljaWUgZG9tecWbbG55Y2ggbWFyZ2luZXPDs3cgd2V3bsSZdHJ6bnljaCAocGFkZGluZykgKi9cbiAgICBtYXJnaW46IDA7ICAgICAgICAgICAgIC8qIFVzdW5pxJljaWUgZG9tecWbbG55Y2ggbWFyZ2luZXPDs3cgemV3bsSZdHJ6bnljaCAobWFyZ2luKSAqL1xuICAgIGRpc3BsYXk6IGZsZXg7ICAgICAgICAgLyogVcW8eWNpZSBlbGFzdHljem5lZ28gdWvFgmFkdSBkbGEgbGlzdHksIGNvIHVtb8W8bGl3aWEgZWxhc3R5Y3puZSByb3ptaWVzemN6ZW5pZSBlbGVtZW50w7N3ICovXG4gICAgZmxleC13cmFwOiB3cmFwOyAgICAgICAvKiBQb3p3b2xlbmllIGVsZW1lbnRvbSBuYSB6YXdpamFuaWUgc2nEmSwgZ2R5IG5pZSBtYSB3eXN0YXJjemFqxIVjbyBtaWVqc2NhIHcgamVkbnltIHdpZXJzenUgKi9cbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgLyogUm96bWllc3pjemVuaWUgZWxlbWVudMOzdyB3IGVzdGV0eWN6bnltLCBjZW50cmFsbnltIHVrxYJhZHppZSBrYXBzdcWCZWsgKi9cbiAgICBnYXA6IDAuNTJyZW0gMC40MnJlbTsgICAgICAgICAvKiBVc3RhbGVuaWUgb2RzdMSZcHUgcG9tacSZZHp5IGVsZW1lbnRhbWkgdyBwb3ppb21pZSBvcmF6IHBpb25pZSAqL1xuICAgIC8qXG4gICAgICAgIC0gYGxpc3Qtc3R5bGUtdHlwZWA6IFVzdXdhIGRvbXnFm2xuZSB3eWtyb3Brb3dhbmllIHByemVkIGVsZW1lbnRhbWkgbGlzdHkuXG4gICAgICAgIC0gYGZvbnQtc2l6ZWA6IFVzdGF3aWEgcm96bWlhciBjemNpb25raSBuYSAxMHB0LCBjbyBkYWplIG1hxYJ5LCBhbGUgY3p5dGVsbnkgdGVrc3QuXG4gICAgICAgIC0gYGNvbG9yYDogT2tyZcWbbGEga29sb3IgdGVrc3R1IG5hIGN6YXJueSAoIzAwMDAwMCksIGNvIHphcGV3bmlhIGRvYnLEhSB3aWRvY3pub8WbxIcuXG4gICAgICAgIC0gYHRleHQtYWxpZ25gOiBVc3Rhd2lhIHRla3N0IG5hIHd5xZtyb2Rrb3dhbnkgdyBvYnLEmWJpZSBsaXN0eS5cbiAgICAgICAgLSBgYmFja2dyb3VuZC1jb2xvcmA6IE9rcmXFm2xhIHTFgm8gbGlzdHkgbmEgYmlhxYJ5IGtvbG9yLlxuICAgICAgICAtIGBwYWRkaW5nYDogVXN1d2Egd2V3bsSZdHJ6bnkgb2RzdMSZcCAocGFkZGluZykgdyBjZWx1IHd5Y3p5c3pjemVuaWEgZG9tecWbbG55Y2ggc3R5bMOzdy5cbiAgICAgICAgLSBgbWFyZ2luYDogVXN1d2EgemV3bsSZdHJ6bnkgb2RzdMSZcCAobWFyZ2luKSwgY28gcG93b2R1amUsIMW8ZSBsaXN0YSBqZXN0IGRva8WCYWRuaWUgZG9wYXNvd2FuYSBkbyByb2R6aWNhLlxuICAgICAgICAtIGBkaXNwbGF5OiBmbGV4YDogVcW8eXdhIGVsYXN0eWN6bmVnbyB1a8WCYWR1LCB1bW/FvGxpd2lhasSFY2VnbyBkeW5hbWljem5lIHJvem1pZXN6Y3plbmllIGVsZW1lbnTDs3cuXG4gICAgICAgIC0gYGZsZXgtd3JhcGA6IFBvendhbGEgbmEgemF3aWphbmllIGVsZW1lbnTDs3cgdyByYXppZSBicmFrdSB3eXN0YXJjemFqxIVjbyBtaWVqc2NhLlxuICAgICAgICAtIGBqdXN0aWZ5LWNvbnRlbnRgOiBaYXBld25pYSByw7N3bm9taWVybmUgcm96bWllc3pjemVuaWUgZWxlbWVudMOzdyB6IG9kc3TEmXBhbWkgbWnEmWR6eSBuaW1pLlxuICAgICAgICAtIGBnYXBgOiBPa3JlxZtsYSBwcnplc3RyemXFhCBwb21pxJlkenkgZWxlbWVudGFtaSB3IHBvemlvbWllIGkgcGlvbmllLlxuICAgICovXG59XG5cbiNsb2NhdGlvbnMtbGlzdCBsaSB7XG4gICAgY3Vyc29yOiBwb2ludGVyOyAgICAgICAgICAvKiBabWlhbmEga3Vyc29yYSBuYSB3c2thxbpuaWssIGNvIHN1Z2VydWplLCDFvGUgZWxlbWVudCBqZXN0IGtsaWthbnkgKi9cbiAgICBwYWRkaW5nOiAwLjM0cmVtIDAuNzhyZW07ICAgICAgICAgICAgICAvKiBEcm9ibmUgd2NpxJljaWEgd2V3bsSZdHJ6bmUgKHBhZGRpbmcpIHdva8OzxYIgdGVrc3R1IHcga2HFvGR5bSBlbGVtZW5jaWUgbGlzdHkgKi9cbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyMSwgMTIxLCA1OCwgMC4yMik7IC8qIERlbGlrYXRuZSBvYnJhbW93YW5pZSB3IHRvbmFjamkgbGlua8OzdyBzdHJvbnkgKi9cbiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsgICAgICAgIC8qIE1pxJlra2ksIGthcHN1xYJrb3d5IGtzenRhxYJ0IGVsZW1lbnR1ICovXG4gICAgbWFyZ2luLWJvdHRvbTogMDsgICAgICAgIC8qIE9kc3TEmXAgbWnEmWR6eSBlbGVtZW50YW1pIG9ic8WCdWd1amUgZmxleCBnYXAgKi9cbiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTgwZGVnLCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTYpIDAlLCByZ2JhKDI0NSwgMjQyLCAyMzMsIDAuOTYpIDEwMCUpO1xuICAgIGNvbG9yOiB2YXIoLS1rbC1saW5rLWNvbG9yKTtcbiAgICBmb250LXNpemU6IDAuODRyZW07XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBsaW5lLWhlaWdodDogMS4yNTtcbiAgICBib3gtc2hhZG93OiAwIDZweCAxNHB4IHJnYmEoNzksIDc1LCAzMSwgMC4wNik7XG4gICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjJzIGVhc2UsIGJvcmRlci1jb2xvciAwLjJzIGVhc2UsIGNvbG9yIDAuMnMgZWFzZSwgYmFja2dyb3VuZC1jb2xvciAwLjJzIGVhc2U7XG4gICAgLypcbiAgICAgICAgLSBgY3Vyc29yOiBwb2ludGVyYDogWm1pZW5pYSBrdXJzb3IgbmEgd3NrYcW6bmlrLCBzeWduYWxpenVqxIVjLCDFvGUgZWxlbWVudCBqZXN0IGludGVyYWt0eXdueS5cbiAgICAgICAgLSBgcGFkZGluZ2A6IFVzdGF3aWEgd2V3bsSZdHJ6bmUgd2NpxJljaWUgdyBlbGVtZW5jaWUsIGNvIHBvcHJhd2lhIGN6eXRlbG5vxZvEhyBpIGVzdGV0eWvEmS5cbiAgICAgICAgLSBgYm9yZGVyYDogRG9kYWplIGNpZW5raWUsIGN6YXJuZSBvYnJhbW93YW5pZSB3b2vDs8WCIGthxbxkZWdvIGVsZW1lbnR1IGxpc3R5LlxuICAgICAgICAtIGBib3JkZXItcmFkaXVzYDogWmFva3LEhWdsYSByb2dpIGVsZW1lbnR1LCB0d29yesSFYyBiYXJkemllaiB6YWF3YW5zb3dhbnkgd3lnbMSFZC5cbiAgICAgICAgLSBgbWFyZ2luLWJvdHRvbWA6IFphcGV3bmlhIG9kc3TEmXAgbWnEmWR6eSBlbGVtZW50YW1pIGxpc3R5LCBwb3ByYXdpYWrEhWMgcHJ6ZWpyenlzdG/Fm8SHLlxuICAgICovXG59XG5cbiNsb2NhdGlvbnMtbGlzdCBsaTpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyMzksIDIzNCwgMjIwLCAwLjk4KSAwJSwgcmdiYSgyMjgsIDIyMSwgMTk5LCAwLjk4KSAxMDAlKTtcbiAgICBib3JkZXItY29sb3I6IHJnYmEoMTIxLCAxMjEsIDU4LCAwLjQyKTtcbiAgICBjb2xvcjogdmFyKC0ta2wtbGluay1ob3Zlci1jb2xvcik7XG4gICAgYm94LXNoYWRvdzogMCA4cHggMTZweCByZ2JhKDc5LCA3NSwgMzEsIDAuMSk7XG4gICAgLypcbiAgICAgICAgLSBgYmFja2dyb3VuZC1jb2xvcmA6IFVzdGF3aWEga29sb3IgdMWCYSBuYSAjYmFhZDhiLCBjbyBwb3dvZHVqZSwgxbxlIGVsZW1lbnQgbGlzdHkgem1pZW5pYSB3eWdsxIVkLCBnZHkgdcW8eXRrb3duaWsgbmFqZWR6aWUgbmEgbmllZ28ga3Vyc29yZW0uXG4gICAgICAgIC0gYCFpbXBvcnRhbnRgOiBXeW11c3phIHphc3Rvc293YW5pZSB0ZWogcmVndcWCeSwgbmF3ZXQgamXFm2xpIGlubmUgcmVndcWCeSBDU1MgbW9nxYJ5YnkgdXN0YXdpxIcgaW5ueSBrb2xvciB0xYJhLlxuICAgICovXG59XG5cbiNsb2NhdGlvbnMtbGlzdCBsaTpmb2N1cy12aXNpYmxlIHtcbiAgICBvdXRsaW5lOiBub25lO1xuICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMjEsIDEyMSwgNTgsIDAuNDYpO1xuICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCByZ2JhKDEyMSwgMTIxLCA1OCwgMC4xNCksIDAgOHB4IDE2cHggcmdiYSg3OSwgNzUsIDMxLCAwLjA4KTtcbn1cblxuI2xvY2F0aW9ucy1saXN0IGxpLmlzLWFjdGl2ZSB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgxODYsIDE3MywgMTM5LCAwLjk2KSAwJSwgcmdiYSgxMjEsIDEyMSwgNTgsIDAuOTYpIDEwMCUpO1xuICAgIGJvcmRlci1jb2xvcjogcmdiYSg3OSwgNzUsIDMxLCAwLjQpO1xuICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgIGJveC1zaGFkb3c6IDAgOXB4IDE4cHggcmdiYSg3OSwgNzUsIDMxLCAwLjE2KTtcbn1cblxuI2xvY2F0aW9ucy1saXN0IGxpLmlzLWFjdGl2ZTpob3ZlcixcbiNsb2NhdGlvbnMtbGlzdCBsaS5pcy1hY3RpdmU6Zm9jdXMtdmlzaWJsZSB7XG4gICAgY29sb3I6ICNmZmZmZmY7XG59XG5cbi5tYXAtY29udGFpbmVyLWFyZWEge1xuICAgIGRpc3BsYXk6IGZsZXg7IC8qIFXFvHl3YSBmbGV4Ym94YSBkbyByb3ptaWVzemN6YW5pYSBlbGVtZW50w7N3IHdld27EhXRyeiBrb250ZW5lcmEgKi9cbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOyAvKiBVc3RhbGEga2llcnVuZWsgdWvFgmFkdSBuYSBrb2x1bW5vd3ksIGVsZW1lbnR5IGLEmWTEhSB1c3Rhd2lvbmUgamVkZW4gcG9kIGRydWdpbSAqL1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IC8qIFd5csOzd251amUgZWxlbWVudHkgd3pkxYJ1xbwgb3NpIHBvcHJ6ZWN6bmVqIChwb3ppb21laikgZG8gxZtyb2RrYSBrb250ZW5lcmEgKi9cbiAgICBwYWRkaW5nLWJvdHRvbTogMjBweDsgLyogRG9kYWplIDIwcHggcGFkZGluZ3Ugb2QgZG/FgnUga29udGVuZXJhICovXG4gICAgLypcbiAgICAgICAgLSBgZGlzcGxheTogZmxleGA6IFVtb8W8bGl3aWEga29yenlzdGFuaWUgeiBtb2RlbHUgZmxleGJveCwgY28gdcWCYXR3aWEgdWvFgmFkYW5pZSBlbGVtZW50w7N3IHcga29udGVuZXJ6ZS5cbiAgICAgICAgLSBgZmxleC1kaXJlY3Rpb246IGNvbHVtbmA6IFptaWVuaWEga2llcnVuZWsgdWvFgmFkdSBuYSBwaW9ub3d5IChrb2x1bW5vd3kpLlxuICAgICAgICAtIGBhbGlnbi1pdGVtczogY2VudGVyYDogV3lyw7N3bnVqZSBlbGVtZW50eSBuYSDFm3JvZGt1IHcgcG96aW9taWUgdyBrb250ZW5lcnplLlxuICAgICAgICAtIGBwYWRkaW5nLWJvdHRvbWA6IFphcGV3bmlhIGRvZGF0a293xIUgcHJ6ZXN0cnplxYQgd2V3bsSZdHJ6bsSFIHUgZG/FgnUga29udGVuZXJhLlxuICAgICovXG59XG5cbi8qIFNla2NqYSBwb2JpZXJhbmlhIHBsaWvDs3cgR1BYIHBvZCBtYXDEhSB0cmFzIHJvd2Vyb3d5Y2ggKi9cbi5iaWtlLXJvdXRlcy1leHBvcnQge1xuICAgIG1hcmdpbjogMCAwIDEuNzVyZW07XG4gICAgcGFkZGluZzogMC41NXJlbSAwLjZyZW07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjYzZjN2M4O1xuICAgIGJvcmRlci1yYWRpdXM6IDAuNHJlbTtcbiAgICBib3gtc2hhZG93OiBub25lO1xuICAgIGZvbnQtZmFtaWx5OiAnSW50ZXInLCAnUm9ib3RvJywgQXJpYWwsIHNhbnMtc2VyaWY7XG4gICAgLypcbiAgICAgICAgLSBSYW1rYSBpIGJpYcWCZSB0xYJvIHPEhSBkb3Bhc293YW5lIGRvIHBhbmVsaSB6YWvFgmFkZWsgemUgc3Ryb255IHVzxYJ1ZyBpIHJlc3RhdXJhY2ppLlxuICAgICAgICAtIFNla2NqYSBqZXN0IG9zb2JueW0sIHN1YnRlbG55bSBibG9raWVtLCBhbGUgbmllIGtvbmt1cnVqZSB3aXp1YWxuaWUgeiBtYXDEhS5cbiAgICAqL1xufVxuXG4uYmlrZS1yb3V0ZXMtZXhwb3J0LXRpdGxlIHtcbiAgICBtYXJnaW46IDAgMCAwLjI1cmVtO1xuICAgIC8qXG4gICAgICAgIC0gTmFnxYLDs3dlayBtYSB6YWNob3dhxIcgd3lnbMSFZCB6d3lrxYJlZ28gcG9ncnViaW9uZWdvIHRla3N0dSwgamFrIG9waXMgXCJXeWJpZXJ6IHRyYXPEmS4uLlwiIG5hZCBtYXDEhS5cbiAgICAqL1xufVxuXG4uYmlrZS1yb3V0ZXMtZXhwb3J0ID4gcDpub3QoLmJpa2Utcm91dGVzLWV4cG9ydC10aXRsZSk6bm90KC5iaWtlLXJvdXRlcy1leHBvcnQtbm90ZSkge1xuICAgIG1hcmdpbjogMDtcbiAgICBmb250LXNpemU6IDAuODhyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNDU7XG4gICAgdGV4dC1hbGlnbjoganVzdGlmeTtcbn1cblxuLmJpa2Utcm91dGVzLWV4cG9ydC1saXN0IHtcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdhcDogMC40cmVtO1xuICAgIG1hcmdpbi10b3A6IDAuNjVyZW07XG4gICAgLypcbiAgICAgICAgLSBMaXN0YSB1a8WCYWRhIHRyYXN5IGplZG5hIHBvZCBkcnVnxIUsIHphY2hvd3VqxIVjIHLDs3dueSBvZHN0xJlwIG1pxJlkenkgcHJ6eWNpc2thbWkgR1BYLlxuICAgICovXG59XG5cbi5iaWtlLXJvdXRlLWV4cG9ydC1jYXJkIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGdhcDogMC43cmVtO1xuICAgIHBhZGRpbmc6IDAuNDVyZW0gMC42cmVtO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44OCk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg3OSwgNzUsIDMxLCAwLjE2KTtcbiAgICBib3JkZXItbGVmdDogNXB4IHNvbGlkIHZhcigtLXJvdXRlLWNvbG9yKTtcbiAgICBib3JkZXItcmFkaXVzOiAwLjU1cmVtO1xuICAgIC8qXG4gICAgICAgIC0gTGV3YSBrcmF3xJlkxboga29yenlzdGEgeiBrb2xvcnUgdHJhc3ksIMW8ZWJ5IHXFvHl0a293bmlrIMWCYXR3byBwb3dpxIV6YcWCIHBsaWsgR1BYIHogbGluacSFIG5hIG1hcGllLlxuICAgICovXG59XG5cbi5iaWtlLXJvdXRlLWV4cG9ydC1pbmZvIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgbWluLXdpZHRoOiAwO1xuICAgIGZsZXg6IDEgMSBhdXRvO1xuICAgIGdhcDogMC41NXJlbTtcbn1cblxuLmJpa2Utcm91dGUtZXhwb3J0LWNvbG9yIHtcbiAgICB3aWR0aDogMC42MnJlbTtcbiAgICBoZWlnaHQ6IDAuNjJyZW07XG4gICAgZmxleDogMCAwIGF1dG87XG4gICAgYmFja2dyb3VuZDogdmFyKC0tcm91dGUtY29sb3IpO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggY29sb3ItbWl4KGluIHNyZ2IsIHZhcigtLXJvdXRlLWNvbG9yKSAyMCUsIHRyYW5zcGFyZW50KTtcbiAgICAvKlxuICAgICAgICAtIE1hxYJhIGtyb3BrYSBwb3d0YXJ6YSBrb2xvciB0cmFzeSBiZXogendpxJlrc3phbmlhIGNpxJnFvGFydSB3aXp1YWxuZWdvIGthcnR5LlxuICAgICovXG59XG5cbi5iaWtlLXJvdXRlLWV4cG9ydC1pbmZvIGgzLFxuLmJpa2Utcm91dGUtZXhwb3J0LWluZm8gcCB7XG4gICAgbWFyZ2luOiAwO1xufVxuXG4uYmlrZS1yb3V0ZS1leHBvcnQtaW5mbyA+IGRpdiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogMC4yNXJlbSAwLjU1cmVtO1xuICAgIG1pbi13aWR0aDogMDtcbn1cblxuLmJpa2Utcm91dGUtZXhwb3J0LWluZm8gaDMge1xuICAgIG1pbi13aWR0aDogMDtcbiAgICBmb250LXNpemU6IDAuODJyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMjU7XG59XG5cbi5iaWtlLXJvdXRlLWV4cG9ydC1pbmZvIHAsXG4uYmlrZS1yb3V0ZXMtZXhwb3J0LW5vdGUge1xuICAgIGNvbG9yOiAjNjY2MjRjO1xuICAgIGZvbnQtc2l6ZTogMC43MnJlbTtcbn1cblxuLmJpa2Utcm91dGUtZXhwb3J0LWFjdGlvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleDogMCAwIGF1dG87XG4gICAgZmxleC13cmFwOiBub3dyYXA7XG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDtcbiAgICBnYXA6IDAuMzVyZW07XG59XG5cbi5iaWtlLXJvdXRlLWV4cG9ydC1hY3Rpb24ge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgcGFkZGluZzogMC4zcmVtIDAuNDVyZW07XG4gICAgY29sb3I6ICMzNDMyMTkgIWltcG9ydGFudDtcbiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tcm91dGUtY29sb3IpIDEyJSwgd2hpdGUpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLXJvdXRlLWNvbG9yKTtcbiAgICBib3JkZXItcmFkaXVzOiAwLjRyZW07XG4gICAgZm9udDogaW5oZXJpdDtcbiAgICBmb250LXNpemU6IDAuNzJyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuMjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgLypcbiAgICAgICAgLSBQcnp5Y2lza2kgZHppZWR6aWN6xIUga29sb3IgdHJhc3kgamFrbyBvYnJ5cyBpIGRlbGlrYXRuZSB0xYJvLCBhbGUgcG96b3N0YWrEhSBjenl0ZWxuZSBuYSBiaWHFgnltIHBhbmVsdS5cbiAgICAqL1xufVxuXG4uYmlrZS1yb3V0ZS1leHBvcnQtYWN0aW9uOmhvdmVyLFxuLmJpa2Utcm91dGUtZXhwb3J0LWFjdGlvbjpmb2N1cy12aXNpYmxlIHtcbiAgICBiYWNrZ3JvdW5kOiBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tcm91dGUtY29sb3IpIDI0JSwgd2hpdGUpO1xuICAgIG91dGxpbmU6IDJweCBzb2xpZCBjb2xvci1taXgoaW4gc3JnYiwgdmFyKC0tcm91dGUtY29sb3IpIDM1JSwgdHJhbnNwYXJlbnQpO1xuICAgIG91dGxpbmUtb2Zmc2V0OiAycHg7XG59XG5cbi5iaWtlLXJvdXRlcy1leHBvcnQtbm90ZSB7XG4gICAgbWFyZ2luOiAwLjZyZW0gMCAwO1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYztcbiAgICAvKlxuICAgICAgICAtIERvcGlzZWsgd3lqYcWbbmlhLCDFvGUgR1BYIHphd2llcmEgd8WCYcWbY2l3xIUgdHJhc8SZLCBiZXogb2RjaW5rYSBkb2phemR1IHogS296aWVnbyBMYXNrdS5cbiAgICAqL1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzY3cHgpIHtcbiAgICAuYmlrZS1yb3V0ZS1leHBvcnQtY2FyZCB7XG4gICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIH1cblxuICAgIC5iaWtlLXJvdXRlLWV4cG9ydC1hY3Rpb25zIHtcbiAgICAgICAgZmxleC13cmFwOiB3cmFwO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gICAgfVxufVxuXG4jbWFwIHtcbiAgICB3aWR0aDogMTAwJTsgLyogVXN0YWxhIHN6ZXJva2/Fm8SHIG1hcHkgbmEgMTAwJSBzemVyb2tvxZtjaSByb2R6aWNhIChwZcWCbmEgc3plcm9rb8WbxIcgZG9zdMSZcG5lZ28ga29udGVuZXJhKSAqL1xuICAgIGhlaWdodDogNjAwcHg7IC8qIFVzdGFsYSB3eXNva2/Fm8SHIG1hcHkgbmEgNjAwcHggKi9cbiAgICAvKlxuICAgICAgICAtIGB3aWR0aDogMTAwJWA6IFNwcmF3aWEsIMW8ZSBtYXBhIHpham11amUgY2HFgsSFIHN6ZXJva2/Fm8SHIGRvc3TEmXBuZWdvIGtvbnRlbmVyYS5cbiAgICAgICAgLSBgaGVpZ2h0OiA2MDBweGA6IFVzdGFsYSB3eXNva2/Fm8SHIG1hcHkgbmEgNjAwcHgsIGNvIHphcGV3bmlhIG9kcG93aWVkbmnEhSBwcnplc3RyemXFhCBkbyB3ecWbd2lldGxlbmlhIG1hcHkuXG4gICAgKi9cbn1cblxuYS5zaG93LW1vcmUge1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50OyAvKiBVc3V3YSBkb215xZtsbsSFIGRla29yYWNqxJkgdGVrc3R1IChucC4gcG9ka3JlxZtsZW5pZSkgbGlua3UgKi9cbiAgICBjb2xvcjogIzc5NzkzYSAhaW1wb3J0YW50OyAvKiBVc3Rhd2lhIGtvbG9yIHRla3N0dSBsaW5rdSBuYSAjNzk3OTNhIChzemFyby16aWVsb255KSAqL1xuICAgIC8qXG4gICAgICAgIC0gYHRleHQtZGVjb3JhdGlvbjogbm9uZWA6IFVzdXdhIHBvZGtyZcWbbGVuaWUgeiBsaW5rdSwgY28gbmFkYWplIG11IGN6eXN0c3p5IHd5Z2zEhWQuXG4gICAgICAgIC0gYGNvbG9yOiAjNzk3OTNhYDogT2tyZcWbbGEga29sb3IgdGVrc3R1IGxpbmt1LCBrdMOzcnkgamVzdCBzemFyby16aWVsb255LCBwYXN1asSFY3kgZG8gb2fDs2xuZWdvIHN0eWx1IHN0cm9ueS5cbiAgICAqL1xufVxuXG5hLnNob3ctbW9yZTpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgIWltcG9ydGFudDsgLyogRG9kYWplIHBvZGtyZcWbbGVuaWUgZG8gbGlua3UgcG9kY3phcyBuYWplY2hhbmlhIGt1cnNvcmVtICovXG4gICAgLypcbiAgICAgICAgLSBgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmVgOiBEb2RhamUgcG9ka3JlxZtsZW5pZSBkbyBsaW5rdSwgY28gc3lnbmFsaXp1amUgaW50ZXJha3R5d25vxZvEhyBwb2RjemFzIG5hamVjaGFuaWEgbmEgbmllZ28uXG4gICAgKi9cbn1cblxuLmxlYWZsZXQtcG9wdXAtY29udGVudCBhLnNob3ctbW9yZS5wb3B1cC10b2dnbGUtbGluayxcbi5sZWFmbGV0LXBvcHVwLWNvbnRlbnQgYS5zaG93LW1vcmUucG9wdXAtdG9nZ2xlLWxpbms6dmlzaXRlZCxcbi5sZWFmbGV0LXBvcHVwLWNvbnRlbnQgYS5zaG93LWxlc3MucG9wdXAtdG9nZ2xlLWxpbmssXG4ubGVhZmxldC1wb3B1cC1jb250ZW50IGEuc2hvdy1sZXNzLnBvcHVwLXRvZ2dsZS1saW5rOnZpc2l0ZWQge1xuICAgIGRpc3BsYXk6IHRhYmxlO1xuICAgIHdpZHRoOiBhdXRvO1xuICAgIG1hcmdpbjogNnB4IGF1dG8gMDtcbiAgICBwYWRkaW5nOiAwLjA4cmVtIDAuMzhyZW07XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgIGNvbG9yOiB2YXIoLS1rbC1saW5rLWNvbG9yKSAhaW1wb3J0YW50O1xuICAgIHRleHQtZGVjb3JhdGlvbi1saW5lOiB1bmRlcmxpbmUgIWltcG9ydGFudDtcbiAgICB0ZXh0LWRlY29yYXRpb24tY29sb3I6IHZhcigtLWtsLWxpbmstdW5kZXJsaW5lKSAhaW1wb3J0YW50O1xuICAgIHRleHQtZGVjb3JhdGlvbi10aGlja25lc3M6IDEuNXB4ICFpbXBvcnRhbnQ7XG4gICAgdGV4dC11bmRlcmxpbmUtb2Zmc2V0OiAwLjE4ZW07XG4gICAgYm9yZGVyLXJhZGl1czogMC4zNXJlbTtcbiAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgMC4ycyBlYXNlLCB0ZXh0LWRlY29yYXRpb24tY29sb3IgMC4ycyBlYXNlLCBib3gtc2hhZG93IDAuMnMgZWFzZTtcbiAgICBmb250LXN0eWxlOiBub3JtYWw7XG4gICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gICAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5sZWFmbGV0LXBvcHVwLWNvbnRlbnQgYS5zaG93LW1vcmUucG9wdXAtdG9nZ2xlLWxpbms6aG92ZXIsXG4ubGVhZmxldC1wb3B1cC1jb250ZW50IGEuc2hvdy1tb3JlLnBvcHVwLXRvZ2dsZS1saW5rOmZvY3VzLXZpc2libGUsXG4ubGVhZmxldC1wb3B1cC1jb250ZW50IGEuc2hvdy1sZXNzLnBvcHVwLXRvZ2dsZS1saW5rOmhvdmVyLFxuLmxlYWZsZXQtcG9wdXAtY29udGVudCBhLnNob3ctbGVzcy5wb3B1cC10b2dnbGUtbGluazpmb2N1cy12aXNpYmxlIHtcbiAgICBjb2xvcjogdmFyKC0ta2wtbGluay1ob3Zlci1jb2xvcikgIWltcG9ydGFudDtcbiAgICB0ZXh0LWRlY29yYXRpb24tY29sb3I6IHZhcigtLWtsLWxpbmstaG92ZXItY29sb3IpICFpbXBvcnRhbnQ7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0ta2wtbGluay1ob3Zlci1iZyk7XG4gICAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHZhcigtLWtsLWxpbmstZm9jdXMtcmluZyk7XG4gICAgb3V0bGluZTogbm9uZTtcbn1cblxuLmxlYWZsZXQtcG9wdXAtY29udGVudCAucG9wdXAtdGl0bGUge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICBtYXJnaW4tYm90dG9tOiAwLjM1cmVtO1xuICAgIHBhZGRpbmc6IDAuMjhyZW0gMC43MnJlbSAwLjM0cmVtO1xuICAgIGJvcmRlci1yYWRpdXM6IDAuNDVyZW07XG4gICAgYmFja2dyb3VuZDogcmdiYSgxMjEsIDEyMSwgNTgsIDAuMSk7XG4gICAgY29sb3I6ICM0ZjRmMjU7XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsaW5lLWhlaWdodDogMS4zO1xufVxuXG4ubGVhZmxldC1wb3B1cC5rb3ppLWxhc2VrLXBvcHVwIC5sZWFmbGV0LXBvcHVwLWNvbnRlbnQtd3JhcHBlciB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNDgsIDI0NCwgMjMyLCAwLjk4KSAwJSwgcmdiYSgyNDIsIDIzNiwgMjIwLCAwLjk4KSAxMDAlKTtcbn1cblxuLmxlYWZsZXQtcG9wdXAua296aS1sYXNlay1wb3B1cCAubGVhZmxldC1wb3B1cC10aXAge1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMjQyLCAyMzYsIDIyMCwgMC45OCk7XG59XG5cbi5sZWFmbGV0LXBvcHVwLmtvemktbGFzZWstcG9wdXAgLnBvcHVwLXRpdGxlIHtcbiAgICBwYWRkaW5nOiAwLjI0cmVtIDAuNjhyZW0gMC4zcmVtO1xuICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAgIGNvbG9yOiAjNDc0MTFmO1xuICAgIGZvbnQtZmFtaWx5OiBHZW9yZ2lhLCBcIlRpbWVzIE5ldyBSb21hblwiLCBzZXJpZjtcbiAgICBmb250LXNpemU6IDEuMDJyZW07XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtO1xufVxuXG5wLmFyZWEge1xuICAgIGNvbG9yOiAjMDAwMDAwOyAgICAgLyogS29sb3IgY3pjaW9ua2kgdXN0YXdpb255IG5hIGN6YXJueSAqL1xuICAgIGZvbnQtc2l6ZTogOXB0OyAgICAgLyogUm96bWlhciBjemNpb25raSB1c3Rhd2lvbnkgbmEgOSBwdW5rdMOzdyAqL1xuICAgIHRleHQtYWxpZ246IGxlZnQ7ICAgLyogV3lyw7N3bmFuaWUgdGVrc3R1IGRvIGxld2VqIHN0cm9ueSAqL1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsgLyogVXN0YXdpZW5pZSBrdXJzeXd5IGRsYSB0ZWtzdHUgKi9cbiAgICAvKlxuICAgICAgICAtIGBjb2xvcmA6IE9rcmXFm2xhIGtvbG9yIGN6Y2lvbmtpLiBDemFybnkga29sb3IgemFwZXduaWEgZG9icsSFIGN6eXRlbG5vxZvEhyBuYSBqYXNueW0gdGxlLlxuICAgICAgICAtIGBmb250LXNpemVgOiBVc3RhbGEgcm96bWlhciBjemNpb25raSBuYSA5cHQsIGNvIGRhamUgbmlld2llbGtpLCBhbGUgY3p5dGVsbnkgdGVrc3QuXG4gICAgICAgIC0gYHRleHQtYWxpZ25gOiBXeXLDs3dudWplIHRla3N0IGRvIGxld2VqLCBjbyBqZXN0IHR5cG93ZSBkbGEgZMWCdWdpY2ggYmxva8OzdyB0ZWtzdHUuXG4gICAgICAgIC0gYGZvbnQtc3R5bGVgOiBXcHJvd2FkemEga3Vyc3l3xJksIGNvIG5hZGFqZSB0ZWtzdG93aSBkZWxpa2F0bnksIHd5csOzxbxuaWFqxIVjeSBzacSZIHd5Z2zEhWQuXG4gICAgKi9cbn1cblxucC5hcmVhbG9uZyB7XG4gICAgY29sb3I6ICM3OTc5M2E7ICAgICAvKiBLb2xvciBjemNpb25raSB1c3Rhd2lvbnkgbmEgY2llbW55IMW8w7PFgnR5L3ppZWxvbnkgKi9cbiAgICBmb250LXNpemU6IDlwdDsgICAgIC8qIFJvem1pYXIgY3pjaW9ua2kgdXN0YXdpb255IG5hIDkgcHVua3TDs3cgKi9cbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IC8qIFd5csOzd25hbmllIHRla3N0dSBkbyBjZW50cnVtICovXG4gICAgLypcbiAgICAgICAgLSBgY29sb3JgOiBPa3JlxZtsYSBrb2xvciBjemNpb25raSBuYSAjNzk3OTNhLCBjbyBkYWplIHN1YnRlbG55LCBuYXR1cmFsbnkgb2RjaWXFhCB6aWVsZW5pLlxuICAgICAgICAtIGBmb250LXNpemVgOiBSb3ptaWFyIGN6Y2lvbmtpIHVzdGFsb255IG5hIDlwdCwgY28gamVzdCBvZHBvd2llZG5pZSBkbGEgZHJvYm55Y2ggaW5mb3JtYWNqaS5cbiAgICAgICAgLSBgdGV4dC1hbGlnbmA6IFd5csOzd251amUgdGVrc3QgZG8gxZtyb2RrYSwgY28gamVzdCBjesSZc3RvIHN0b3Nvd2FuZSB3IG5hZ8WCw7N3a2FjaCBsdWIgZWxlbWVudGFjaCBkZWtvcmFjeWpueWNoLlxuICAgICovXG59XG5cbnAuYXJlYS1kZXNjIHtcbiAgICBjb2xvcjogIzAwMDAwMDsgICAgIC8qIEtvbG9yIGN6Y2lvbmtpIHVzdGF3aW9ueSBuYSBjemFybnkgKi9cbiAgICBmb250LXNpemU6IDExcHQ7ICAgICAvKiBSb3ptaWFyIGN6Y2lvbmtpIHVzdGF3aW9ueSBuYSAxMSBwdW5rdMOzdyAqL1xuICAgIHRleHQtYWxpZ246IGp1c3RpZnk7IC8qIFd5csOzd25hbmllIHRla3N0dSBkbyBvYnUga3Jhd8SZZHppIChqdXN0b3dhbmllKSAqL1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsgIC8qIFN0eWwgY3pjaW9ua2kgdXN0YXdpb255IG5hIGt1cnN5d8SZICovXG4gICAgcGFkZGluZy10b3A6IDEwcHg7ICAgIC8qIE9kc3TEmXAgb2QgZ8OzcnkgZWxlbWVudHUgKi9cbiAgICBwYWRkaW5nLWJvdHRvbTogMTBweDsgLyogT2RzdMSZcCBvZCBkb8WCdSBlbGVtZW50dSAqL1xuICAgIGxpbmUtaGVpZ2h0OiAyM3B4OyAgICAvKiBXeXNva2/Fm8SHIGxpbmlpIHVzdGF3aW9uYSBuYSAyM3B4LCBjbyB3cMWCeXdhIG5hIGN6eXRlbG5vxZvEhyAqL1xuICAgIC8qXG4gICAgICAgIC0gYGNvbG9yYDogS29sb3IgY3pjaW9ua2kgdXN0YXdpb255IG5hIGN6YXJueSwgY28gemFwZXduaWEga29udHJhc3QgaSBjenl0ZWxub8WbxIcuXG4gICAgICAgIC0gYGZvbnQtc2l6ZWA6IFJvem1pYXIgY3pjaW9ua2kgMTFwdCwgY28gamVzdCB3eXN0YXJjemFqxIVjbyBkdcW8eW0gcm96bWlhcmVtIGRsYSB0ZWtzdHUgb3Bpc293ZWdvLlxuICAgICAgICAtIGB0ZXh0LWFsaWduYDogVXN0YXdpYSBqdXN0b3dhbmllIHRla3N0dSwgZHppxJlraSBjemVtdSB0ZWtzdCBqZXN0IHLDs3dub21pZXJuaWUgcm96bWllc3pjem9ueSBuYSBjYcWCZWogc3plcm9rb8WbY2kuXG4gICAgICAgIC0gYGZvbnQtc3R5bGVgOiBVc3Rhd2lhIGN6Y2lvbmvEmSBuYSBrdXJzeXfEmSwgY28gbW/FvGUgZG9kYcSHIGVsZWdhbmNqaSBsdWIgd3lyw7PFvG5pZW5pYS5cbiAgICAgICAgLSBgcGFkZGluZy10b3BgOiBEb2RhamUgb2RzdMSZcCBvZCBnw7NybmVqIGtyYXfEmWR6aSBlbGVtZW50dS5cbiAgICAgICAgLSBgcGFkZGluZy1ib3R0b21gOiBEb2RhamUgb2RzdMSZcCBvZCBkb2xuZWoga3Jhd8SZZHppIGVsZW1lbnR1LlxuICAgICAgICAtIGBsaW5lLWhlaWdodGA6IE9rcmXFm2xhIHd5c29rb8WbxIcgbGluaWksIGNvIHBvcHJhd2lhIGN6eXRlbG5vxZvEhyBwcnpleiB6d2nEmWtzemVuaWUgcHJ6ZXN0cnplbmkgbWnEmWR6eSB3aWVyc3phbWkuXG4gICAgKi9cbn1cblxuLmFjY29yZGlvbi1ib2R5IHtcbiAgICBtYXJnaW4tdG9wOiAtMTVweDsgLyogVWplbW55IG1hcmdpbmVzIG5hIGfDs3J6ZSwgcHJ6ZXN1d2EgemF3YXJ0b8WbxIcgbyAxNXB4IHcgZ8OzcsSZICovXG4gICAgLypcbiAgICAgICAgLSBgbWFyZ2luLXRvcGA6IE9rcmXFm2xhIHVqZW1ueSBtYXJnaW5lcyBvIHdhcnRvxZtjaSAtMTVweCwgY28gcG93b2R1amUgcHJ6ZXN1bmnEmWNpZSB6YXdhcnRvxZtjaSB3IGfDs3LEmSBvIDE1cHggd3pnbMSZZGVtIGplaiBub3JtYWxuZWogcG96eWNqaS5cbiAgICAqL1xufVxuXG4uYWNjb3JkaW9uLWNvbGxhcHNlIHtcbiAgICBmb250LXNpemU6IDExcHQ7IC8qIFVzdGFsYSByb3ptaWFyIGN6Y2lvbmtpIG5hIDExIHB1bmt0w7N3LCBjbyB6YXBld25pYSBkb2JyxIUgY3p5dGVsbm/Fm8SHICovXG4gICAgY29sb3I6ICMwMDA7IC8qIEtvbG9yIGN6Y2lvbmtpIHVzdGF3aW9ueSBuYSBjemFybnkgKi9cbiAgICB0ZXh0LWFsaWduOiBqdXN0aWZ5OyAvKiBXeXLDs3dudWplIHRla3N0IGRvIG9idSBrcmF3xJlkemksIGNvIHR3b3J6eSByw7N3bsSFIHN6ZXJva2/Fm8SHIHdpZXJzenkgKi9cbiAgICBsaW5lLWhlaWdodDogMjdweDsgLyogT2tyZcWbbGEgd3lzb2tvxZvEhyBsaW5paSBuYSAyN3B4LCBjbyBwb3ByYXdpYSBjenl0ZWxub8WbxIcgdGVrc3R1ICovXG4gICAgLypcbiAgICAgICAgLSBgZm9udC1zaXplYDogT2tyZcWbbGEgcm96bWlhciBjemNpb25raSBuYSAxMXB0LCBjbyBqZXN0IG9kcG93aWVkbmllIGRsYSB0ZWtzdHUgbyBzdGFuZGFyZG93ZWogd2llbGtvxZtjaS5cbiAgICAgICAgLSBgY29sb3JgOiBVc3RhbGEga29sb3IgY3pjaW9ua2kgbmEgY3phcm55ICgjMDAwKSwgemFwZXduaWFqxIVjIGtvbnRyYXN0IGkgY3p5dGVsbm/Fm8SHLlxuICAgICAgICAtIGB0ZXh0LWFsaWduYDogV3lyw7N3bnVqZSB0ZWtzdCBkbyBvYnUga3Jhd8SZZHppLCBjbyBkYWplIGVzdGV0eWN6bnkgd3lnbMSFZCBpIHLDs3dub21pZXJuZSByb3ptaWVzemN6ZW5pZSB0ZWtzdHUuXG4gICAgICAgIC0gYGxpbmUtaGVpZ2h0YDogT2tyZcWbbGEgd3lzb2tvxZvEhyBsaW5paSBuYSAyN3B4LCBjbyB6YXBld25pYSB3eWdvZG55IG9kc3TEmXAgbWnEmWR6eSB3aWVyc3phbWkgdGVrc3R1LCBwb3ByYXdpYWrEhWMga29tZm9ydCBjenl0YW5pYS5cbiAgICAqL1xufVxuXG4uYWNjb3JkaW9uLWJ1dHRvbiB7XG4gICAgLS1icy1hY2NvcmRpb24tYnRuLWZvY3VzLWJvcmRlci1jb2xvcjogI2ZmZmZmZjsgLyogVXN0YWxhIGJpYcWCeSBrb2xvciBvYnJhbW93YW5pYSBwcnp5IGZvY3VzZSBuYSBwcnp5Y2lza3UgKi9cbiAgICAtLWJzLWFjY29yZGlvbi1idG4tcGFkZGluZy14OiAwLjc1cmVtOyAvKiBabW5pZWpzemEgcGFkZGluZyBwbyBib2thY2ggcHJ6eWNpc2t1LCBjbyB6YXBld25pYSBiYXJkemllaiBrb21wYWt0b3d5IHd5Z2zEhWQgKi9cbiAgICAtLWJzLWFjY29yZGlvbi1idG4tcGFkZGluZy15OiAwLjVyZW07IC8qIFptbmllanN6YSBwYWRkaW5nIHcgcGlvbmllIHByenljaXNrdSwgYWJ5IHphb3N6Y3rEmWR6acSHIHByemVzdHJ6ZcWEICovXG4gICAgLypcbiAgICAgICAgLSBgLS1icy1hY2NvcmRpb24tYnRuLWZvY3VzLWJvcmRlci1jb2xvcmA6IE9rcmXFm2xhIGtvbG9yIG9icmFtb3dhbmlhIHByenljaXNrdSwga3TDs3J5IHBvamF3aWEgc2nEmSBwb2RjemFzIGZvY3VzZSwgdXN0YXdpb255IG5hIGJpYcWCeSAoI2ZmZmZmZikuXG4gICAgICAgIC0gYC0tYnMtYWNjb3JkaW9uLWJ0bi1wYWRkaW5nLXhgOiBabW5pZWpzemEgcHJ6ZXN0cnplxYQgd2V3bsSFdHJ6IHByenljaXNrdSBwbyBib2thY2ggZG8gMC43NXJlbSwgY28gc3ByYXdpYSwgxbxlIHByenljaXNrIGplc3Qgd8SZxbxzenkuXG4gICAgICAgIC0gYC0tYnMtYWNjb3JkaW9uLWJ0bi1wYWRkaW5nLXlgOiBabW5pZWpzemEgcHJ6ZXN0cnplxYQgd2V3bsSFdHJ6IHByenljaXNrdSB3IHBpb25pZSBkbyAwLjVyZW0sIGNvIHNwcmF3aWEsIMW8ZSBwcnp5Y2lzayBqZXN0IG1uaWVqc3p5IHcgcGlvbmllLlxuICAgICovXG59XG5cbi8qIEtvbG9yIHTFgmEgZGxhIHdzenlzdGtpY2ggbWlhc3QsIGtpZWR5IHPEhSB6YW1rbmnEmXRlICovXG4uYWNjb3JkaW9uLWJ1dHRvbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2JhYWQ4YjsgLyogVXN0YWxhIGtvbG9yIHTFgmEgcHJ6eWNpc2t1IG5hIGRlbGlrYXRueSBvZGNpZcWEIMW8w7PFgnRlZ28vemllbG9uZWdvICgjYmFhZDhiKSAqL1xuICAgIGNvbG9yOiAjMDAwOyAvKiBVc3RhbGEga29sb3IgY3pjaW9ua2kgbmEgY3phcm55LCB6YXBld25pYWrEhWMgZG9icnkga29udHJhc3QgeiB0xYJlbSAqL1xuICAgIC8qXG4gICAgICAgIC0gYGJhY2tncm91bmQtY29sb3JgOiBVc3RhbGEga29sb3IgdMWCYSBwcnp5Y2lza3UsIGNvIHNwcmF3aWEsIMW8ZSBtYSBvbiBzdWJ0ZWxueSwgbmF0dXJhbG55IG9kY2llxYQgxbzDs8WCdG8temllbG9ueS5cbiAgICAgICAgLSBgY29sb3JgOiBPa3JlxZtsYSBrb2xvciBjemNpb25raSBwcnp5Y2lza3UgbmEgY3phcm55ICgjMDAwKSwgY28gemFwZXduaWEgb2Rwb3dpZWRuacSFIHdpZG9jem5vxZvEhyB0ZWtzdHUgbmEgdGxlLlxuICAgICovXG59XG5cbi8qIFptaWFuYSBrb2xvcnUgdMWCYSBwbyByb3p3aW5pxJljaXUgKi9cbi5hY2NvcmRpb24tYnV0dG9uOm5vdCguY29sbGFwc2VkKSB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Q3ZDBiNDsgLyogWm1pZW5pYSBrb2xvciB0xYJhIHByenljaXNrdSBuYSBqYcWbbmllanN6eSBvZGNpZcWEIGJlxbxvd28temllbG9ueSBwbyBqZWdvIHJvendpbmnEmWNpdSAqL1xuICAgIGNvbG9yOiAjMDAwOyAvKiBLb2xvciBjemNpb25raSAtIGN6YXJueSwgemFwZXduaWEgb2Rwb3dpZWRuaSBrb250cmFzdCBpIGN6eXRlbG5vxZvEhyB0ZWtzdHUgKi9cbiAgICAvKlxuICAgICAgICAtIGBiYWNrZ3JvdW5kLWNvbG9yYDogWm1pZW5pYSBrb2xvciB0xYJhIHByenljaXNrdSBuYSBqYcWbbmllanN6eSBvZGNpZcWEICgjZDdkMGI0KSBwbyBqZWdvIHJvendpbmnEmWNpdSwgY28gZGFqZSBlZmVrdCB6bWlhbnkgc3RhbnUuXG4gICAgICAgIC0gYGNvbG9yYDogT2tyZcWbbGEga29sb3IgY3pjaW9ua2kgbmEgY3phcm55ICgjMDAwKSwgYWJ5IHRla3N0IHBvem9zdGHFgiB3eXJhxbpueSBpIGN6eXRlbG55IG5hIG5vd3ltIHRsZS5cbiAgICAqL1xufVxuXG4vKiBLb2xvciBwbyBuYWplY2hhbml1ICovXG4uYWNjb3JkaW9uLWJ1dHRvbjpob3ZlciB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2UxZDhjMDsgLyogSmHFm25pZWpzenkgc3phcnkgcG8gbmFqZWNoYW5pdSwgY28gZGFqZSBzdWJ0ZWxuxIUgem1pYW7EmSBrb2xvcnUgKi9cbiAgICBjb2xvcjogIzAwMDsgLyogVXBld25paiBzacSZLCDFvGUga29sb3IgY3pjaW9ua2kgcG96b3N0YWplIGN6YXJueSwgemFwZXduaWFqxIVjIGRvYnJ5IGtvbnRyYXN0ICovXG4gICAgLypcbiAgICAgICAgLSBgYmFja2dyb3VuZC1jb2xvcmA6IFVzdGFsYSBqYcWbbmllanN6eSBzemFyeSBrb2xvciB0xYJhICgjZTFkOGMwKSBwbyBuYWplY2hhbml1LCBjbyBwb3ByYXdpYSBpbnRlcmFrdHl3bm/Fm8SHIGVsZW1lbnR1LlxuICAgICAgICAtIGBjb2xvcmA6IEtvbG9yIGN6Y2lvbmtpIHBvem9zdGFqZSBjemFybnkgKCMwMDApLCBhYnkgemFjaG93YcSHIGN6eXRlbG5vxZvEhyB0ZWtzdHUgbmEgdGxlLlxuICAgICovXG59XG5cbi8qIFVrcnljaWUgb2JyYW1vd2FuaWEgcG8ga2xpa25pxJljaXUgKGZvY3VzKSAqL1xuLmFjY29yZGlvbi1idXR0b246Zm9jdXMge1xuICAgIG91dGxpbmU6IG5vbmU7IC8qIFVzdXdhIG9icmFtb3dhbmllIGZvY3VzLCBjbyBzcHJhd2lhLCDFvGUgZWxlbWVudCBuaWUgYsSZZHppZSBtaWHFgiBzdGFuZGFyZG93ZWdvIG5pZWJpZXNraWVnbyBvYnJhbW93YW5pYSBwbyBrbGlrbmnEmWNpdSAqL1xuICAgIGJveC1zaGFkb3c6IG5vbmU7IC8qIFVzdXdhIGV3ZW50dWFsbnkgY2llxYQgZm9jdXMsIGFieSB6YWNob3dhxIcgY3p5c3RvxZvEhyBkZXNpZ251ICovXG4gICAgY29sb3I6ICMwMDA7IC8qIFVwZXduaWogc2nEmSwgxbxlIGtvbG9yIGN6Y2lvbmtpIHBvem9zdGFqZSBjemFybnksIHphcGV3bmlhasSFYyBkb2JyxIUgd2lkb2N6bm/Fm8SHIHRla3N0dSAqL1xuICAgIC8qXG4gICAgICAgIC0gYG91dGxpbmVgOiBVc3Rhd2llbmllIG5hIGBub25lYCB1c3V3YSBzdGFuZGFyZG93ZSBvYnJhbW93YW5pZSBmb2N1cywga3TDs3JlIHBvamF3aWEgc2nEmSB3b2vDs8WCIGVsZW1lbnTDs3cgcG8gaWNoIGtsaWtuacSZY2l1LlxuICAgICAgICAtIGBib3gtc2hhZG93YDogVXN0YXdpZW5pZSBuYSBgbm9uZWAgZWxpbWludWplIGNpZcWEIGZvY3VzLCBjbyBwb3ByYXdpYSBlc3RldHlrxJksIHN6Y3plZ8OzbG5pZSB3IHByenlwYWRrdSBwcm9zdHljaCBpbnRlcmZlanPDs3cuXG4gICAgICAgIC0gYGNvbG9yYDogS29sb3IgY3pjaW9ua2kgcG96b3N0YWplIGN6YXJueSAoIzAwMCksIGFieSB0ZWtzdCBiecWCIGRvYnJ6ZSB3aWRvY3pueSBpIGN6eXRlbG55LlxuICAgICovXG59XG5cbi8qIFdzcMOzbG5hIHN0eWxpemFjamEgZGxhIGxvYWRlcmEgKi9cbiNwYWdlLWxvYWRlciB7XG4gICAgcG9zaXRpb246IGZpeGVkOyAvKiBMb2FkZXIgdyBzdGHFgmVqIHBvenljamksIHphd3N6ZSB3aWRvY3pueSAqL1xuICAgIHRvcDogMDsgICAgICAgICAgIC8qIE9kIGfDs3JuZWoga3Jhd8SZZHppICovXG4gICAgbGVmdDogMDsgICAgICAgICAgLyogT2QgbGV3ZWoga3Jhd8SZZHppICovXG4gICAgd2lkdGg6IDEwMHZ3OyAgICAgLyogTmEgY2HFgsSFIHN6ZXJva2/Fm8SHIG9rbmEgKi9cbiAgICBoZWlnaHQ6IDEwMHZoOyAgICAvKiBOYSBjYcWCxIUgd3lzb2tvxZvEhyBva25hICovXG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpOyAvKiBKYXNuZSwgcMOzxYJwcnplenJvY3p5c3RlIHTFgm8gKi9cbiAgICB6LWluZGV4OiA5OTk5OyAgICAvKiBXeXNva2kgcHJpb3J5dGV0IOKAkyBwb25hZCBjYcWCxIUgdHJlxZtjacSFICovXG4gICAgZGlzcGxheTogZmxleDsgICAgLyogRmxleGJveDogdcWCYXR3aWEgY2VudHJvd2FuaWUgKi9cbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgLyogUG96aW9tZSBjZW50cm93YW5pZSAqL1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7ICAgICAvKiBQaW9ub3dlIGNlbnRyb3dhbmllICovXG4gICAgLypcbiAgICAgICAgLSBgcG9zaXRpb246IGZpeGVkYDogR3dhcmFudHVqZSB3aWRvY3pub8WbxIcgbmF3ZXQgcHJ6eSBwcnpld2lqYW5pdS5cbiAgICAgICAgLSBgYmFja2dyb3VuZGA6IFN1YnRlbG5lLCBhbGUgY3p5dGVsbmUgdMWCby5cbiAgICAgICAgLSBgei1pbmRleGA6IFBvbmFkIHRyZcWbY2nEhSwgYWxlIHBvbmnFvGVqIG1vZGFsbnljaCBva2llbmVrIEZhbmN5Ym94YS5cbiAgICAgICAgLSBgZGlzcGxheTogZmxleGA6IFXFgmF0d2lhIHBvenljam9ub3dhbmllIHNwaW5uZXJhLlxuICAgICovXG59XG5cbi8qIFVrcnljaWUgbG9hZGVyYSBwbyB6YcWCYWRvd2FuaXUgc3Ryb255ICovXG4jcGFnZS1sb2FkZXIuaGlkZGVuIHtcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IC8qIENhxYJrb3dpY2llIHVzdXdhIGxvYWRlciB6IHdpZG9rdSAqL1xuICAgIC8qXG4gICAgICAgIC0gYGRpc3BsYXk6IG5vbmVgOiBOaWUgdHlsa28gdWtyeXdhLCBhbGUgendhbG5pYSBtaWVqc2NlIHcgRE9NLWllLlxuICAgICAgICAtIGAhaW1wb3J0YW50YDogR3dhcmFudHVqZSwgxbxlIHJlZ3XFgmEgcHJ6ZXdhxbx5IGlubmUuXG4gICAgKi9cbn1cblxuLyogU3R5bCBkbGEgd2nEmWtzemVnbyBzcGlubmVyYSAqL1xuI3BhZ2UtbG9hZGVyIC5zcGlubmVyLWJvcmRlciB7XG4gICAgd2lkdGg6IDRyZW07ICAgICAgICAgICAgICAgLyogWndpxJlrc3phIHJvem1pYXIgc3Bpbm5lcmEgKi9cbiAgICBoZWlnaHQ6IDRyZW07ICAgICAgICAgICAgICAvKiBad2nEmWtzemEgcm96bWlhciBzcGlubmVyYSAqL1xuICAgIGNvbG9yOiAjYmFhZDhiOyAgICAgICAgICAgIC8qIFVzdGF3aWEga29sb3Igc3Bpbm5lcmEgKi9cbiAgICBib3JkZXItd2lkdGg6IDAuNXJlbTsgICAgICAvKiBHcnVic3phIG9icsSZY3ogKi9cbiAgICBib3JkZXItY29sb3I6ICNiYWFkOGI7ICAgICAvKiBPYnLEmWN6IHogb2xpd2tvd3ltIGtvbG9yZW0gKi9cbiAgICBib3JkZXItcmlnaHQtY29sb3I6IHRyYW5zcGFyZW50OyAvKiBUd29yenkgZWZla3Qgb2Jyb3R1IHByemV6IFwicHJ6ZXJ3YW5pZVwiIG9icsSZY3p5ICovXG4gICAgLypcbiAgICAgICAgLSBXeWdsxIVkIGRvc3Rvc293YW55IGRvIHN0eWxpc3R5a2kgc3Ryb255LlxuICAgICAgICAtIE1vxbxuYSB6bWllbmlhxIcgYGNvbG9yYC9gYm9yZGVyLWNvbG9yYCwgYnkgbGVwaWVqIHBhc293YcWCIGRvIGlubnljaCBlbGVtZW50w7N3LlxuICAgICovXG59XG5cbi8qIFN0eWwgZGxhIHR5dHXFgnUgc2VrY2ppIHVzxYJ1ZyAqL1xuLnNlcnZpY2VJdC10aXRsZSB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7IC8qIFBvZ3J1YmllbmllIHR5dHXFgnUgc2VrY2ppICovXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IC8qIFBvZGtyZcWbbGVuaWUgdHl0dcWCdSAqL1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgLyogVXN0YXdpZW5pZSBlbGVtZW50dSB3IGplZG5laiBsaW5paSAqL1xuICAgIG1hcmdpbi1ib3R0b206IDVweDsgLyogT2RzdMSZcCBkb2xueSBkbGEgd2l6dWFsbmVnbyBvZGR6aWVsZW5pYSAqL1xuICAgIC8qXG4gICAgICAgIC0gYGZvbnQtd2VpZ2h0YDogWmFwZXduaWEgbGVwc3rEhSB3aWRvY3pub8WbxIcgdHl0dcWCdSBkemnEmWtpIHBvZ3J1Ymllbml1LlxuICAgICAgICAtIGB0ZXh0LWRlY29yYXRpb25gOiBEb2RhamUgcG9ka3JlxZtsZW5pZSwgYWJ5IHd5csOzxbxuacSHIHR5dHXFgi5cbiAgICAgICAgLSBgZGlzcGxheWA6IFVzdGF3aWEgdWvFgmFkIHR5dHXFgnUgdyBqZWRuZWogbGluaWksIHVtb8W8bGl3aWFqxIVjIGRvZGFuaWUgb2RzdMSZcMOzdy5cbiAgICAgICAgLSBgbWFyZ2luLWJvdHRvbWA6IFR3b3J6eSBvZHN0xJlwIGRvbG55LCBjbyBwb3ByYXdpYSBjenl0ZWxub8WbxIcuXG4gICAgKi9cbn1cblxuLyogU3R5bCBkbGEgb3Bpc3Ugc2VrY2ppIHVzxYJ1ZyAqL1xuLnNlcnZpY2VJdC1kZXNjcmlwdGlvbiB7XG4gICAgZGlzcGxheTogYmxvY2s7IC8qIEthxbxkeSBvcGlzIGplc3Qgd3nFm3dpZXRsYW55IHcgbm93ZWogbGluaWkgKi9cbiAgICBtYXJnaW4tdG9wOiAzcHg7IC8qIE1hxYJ5IG9kc3TEmXAgZ8Ozcm55IGRsYSBsZXBzemVqIGN6eXRlbG5vxZtjaSAqL1xuICAgIHRleHQtYWxpZ246IGp1c3RpZnk7IC8qIEp1c3Rvd2FuaWUgdGVrc3R1LCBhYnkgcm96Y2nEhWdhxYIgc2nEmSBuYSBjYcWCxIUgc3plcm9rb8WbxIcga29udGVuZXJhICovXG4gICAgLypcbiAgICAgICAgLSBgZGlzcGxheWA6IFVzdGF3aWEgb3Bpc3kgamFrbyBibG9rb3dlLCBkemnEmWtpIGN6ZW11IHBvamF3aWFqxIUgc2nEmSBwb2QgdHl0dcWCZW0uXG4gICAgICAgIC0gYG1hcmdpbi10b3BgOiBEb2RhamUgbmlld2llbGtpIG9kc3TEmXAgbmFkIG9waXNlbSwgYWJ5IG5pZSBzdHlrYcWCIHNpxJkgeiB0eXR1xYJlbS5cbiAgICAgICAgLSBgdGV4dC1hbGlnbmA6IEp1c3R1amUgdGVrc3QsIGFieSBiecWCIHJvemNpxIVnbmnEmXR5IG5hIGNhxYLEhSBzemVyb2tvxZvEhyBrb250ZW5lcmEuXG4gICAgKi9cbn1cblxuLyogU3R5bCBkbGEga29udGVuZXJhIHdpYWRvbW/Fm2NpIGN6YXR1ICovXG4jY2hhdC1tZXNzYWdlcyB7XG4gICAgbWFyZ2luOiAyMHB4IGF1dG87ICAvKiBLb250ZW5lciB3ecWbcm9ka293YW55IHBvemlvbW8gICovXG4gICAgcGFkZGluZzogMTBweDsgLyogV2V3bsSZdHJ6bmUgb2RzdMSZcHkgZGxhIGtvbWZvcnR1IGN6eXRhbmlhICovXG4gICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsgLyogU3VidGVsbmUgb2JyYW1vd2FuaWUgKi9cbiAgICBib3JkZXItcmFkaXVzOiAxMHB4OyAvKiBaYW9rcsSFZ2xlbmllIHJvZ8OzdyBkbGEgZXN0ZXR5a2kgKi9cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjlmOWY5OyAvKiBKYXNuZSB0xYJvIGRsYSBjenl0ZWxub8WbY2kgKi9cbiAgICBvdmVyZmxvdy15OiBhdXRvOyAvKiBQYXNlayBwcnpld2lqYW5pYSB3IHBpb25pZSwgZ2R5IHdpYWRvbW/Fm2NpIGplc3QgemEgZHXFvG8gKi9cbiAgICBoZWlnaHQ6IDQwMHB4OyAvKiBTdGHFgmEgd3lzb2tvxZvEhyBrb250ZW5lcmEgKi9cbiAgICAvKlxuICAgICAgICAtIEtvbnRlbmVyIGRvc3Rvc293YW55IGRvIHByemV3aWphbmlhIHdpYWRvbW/Fm2NpLlxuICAgICAgICAtIFd5Z2zEhWQgcHJ6eWphem55IHXFvHl0a293bmlrb3dpIHogbWnEmWtraW1pIGtyYXfEmWR6aWFtaS5cbiAgICAqL1xufVxuXG4vKiBTdHlsIHdpYWRvbW/Fm2NpIEFJIGkgdcW8eXRrb3duaWthICovXG4ubWVzc2FnZSB7XG4gICAgZGlzcGxheTogZmxleDsgLyogVWvFgmFkIHBvemlvbXk6IGF2YXRhciArIHRyZcWbxIcgKi9cbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsgLyogQXZhdGFyIHd5csOzd25hbnkgZG8gZ8OzcnkgKi9cbiAgICBnYXA6IDEwcHg7IC8qIE9kc3TEmXAgbWnEmWR6eSBhdmF0YXIgYSB0cmXFm2NpxIUgKi9cbiAgICBtYXJnaW4tYm90dG9tOiAxNXB4OyAvKiBQcnplc3RyemXFhCBtacSZZHp5IHdpYWRvbW/Fm2NpYW1pICovXG4gICAgLypcbiAgICAgICAgLSBXaWFkb21vxZtjaSB6b3JnYW5pem93YW5lIHcgamVkbmVqIGxpbmlpIHogemFjaG93YW5pZW0gb2RzdMSZcMOzdy5cbiAgICAqL1xufVxuXG4vKiBTdHlsIHRyZcWbY2kgd2lhZG9tb8WbY2kgQUkgKi9cbi5haS1tZXNzYWdlIC5haS1jb250ZW50LFxuLnVzZXItbWVzc2FnZSAudXNlci1jb250ZW50IHtcbiAgICBkaXNwbGF5OiBibG9jazsgLyogVWvFgmFkIGJsb2tvd3kgZGxhIHRyZcWbY2kgKi9cbiAgICBwYWRkaW5nOiAxMHB4OyAvKiBXZXduxJl0cnpuZSBvZHN0xJlweSAqL1xuICAgIGZvbnQtZmFtaWx5OiBBcmlhbCwgc2Fucy1zZXJpZjsgLyogQ3pjaW9ua2EgZGxhIGNhxYJlaiB0cmXFm2NpICovXG4gICAgbGluZS1oZWlnaHQ6IDEuNTsgLyogQ3p5dGVsbmUgb2RzdMSZcHkgbWnEmWR6eSB3aWVyc3phbWkgKi9cbiAgICBmb250LXNpemU6IDE0cHg7IC8qIEN6eXRlbG55IHJvem1pYXIgdGVrc3R1ICovXG4gICAgYm9yZGVyLXJhZGl1czogMTBweDsgLyogWmFva3LEhWdsb25lIHJvZ2kgKi9cbiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpOyAvKiBTdWJ0ZWxueSBjaWXFhCBkbGEgd2l6dWFsbmVnbyB1bmllc2llbmlhICovXG59XG5cbi8qIFTFgm8gaSBrb2xvciB0ZWtzdHUgQUkgKi9cbi5haS1tZXNzYWdlIC5haS1jb250ZW50IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTdmM2ZmOyAvKiBTdWJ0ZWxuZSBuaWViaWVza2llIHTFgm8gZGxhIHdpYWRvbW/Fm2NpIEFJICovXG4gICAgY29sb3I6ICM3OTc5M2E7IC8qIEtvbG9yIHRla3N0dSBBSSAqL1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4vKiBUxYJvIGkga29sb3IgdGVrc3R1IHXFvHl0a293bmlrYSAqL1xuLnVzZXItbWVzc2FnZSAudXNlci1jb250ZW50IHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGZmZmUyOyAvKiBEZWxpa2F0bmUgemllbG9uZSB0xYJvIGRsYSB3aWFkb21vxZtjaSB1xbx5dGtvd25pa2EgKi9cbn1cblxuLyogU3R5bCB0ZWtzdHUgdyB3aWFkb21vxZtjaWFjaCAqL1xuLm1lc3NhZ2UgcCB7XG4gICAgbWFyZ2luOiAwIDAgNXB4OyAvKiBNbmllanN6eSBvZHN0xJlwIG1pxJlkenkgdGVrc3RlbSBhIGxpc3TEhSAqL1xufVxuXG4vKiBTdHlsIGxpc3R5IHcgd2lhZG9tb8WbY2lhY2ggKi9cbi5tZXNzYWdlIHVsIHtcbiAgICBtYXJnaW46IDA7IC8qIFVzdcWEIGRvbXnFm2xuZSBtYXJnaW5lc3kgKi9cbiAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7IC8qIFdjacSZY2llIGRsYSBwdW5rdMOzdyBsaXN0eSAqL1xuICAgIGxpc3Qtc3R5bGUtdHlwZTogZGlzYzsgLyogS2xhc3ljem5lIHd5cHVua3Rvd2FuaWUgKi9cbiAgICBjb2xvcjogIzc5NzkzYTtcbn1cblxuLyogRWxlbWVudHkgbGlzdHkgKi9cbi5tZXNzYWdlIGxpIHtcbiAgICBtYXJnaW4tYm90dG9tOiA1cHg7IC8qIE9kc3TEmXAgbWnEmWR6eSBwdW5rdGFtaSBsaXN0eSAqL1xufVxuXG4vKiBVc3VuacSZY2llIG9kc3TEmXB1IGRsYSBvc3RhdG5pZWdvIGVsZW1lbnR1IGxpc3R5ICovXG4ubWVzc2FnZSBsaTpsYXN0LWNoaWxkIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xufVxuXG4uYWktaW5saW5lLWZpcnN0LXBhcmFncmFwaCB7XG4gICAgZGlzcGxheTogaW5saW5lO1xufVxuXG4uYWktcmVuZGVyZWQtY29udGVudCB7XG4gICAgZGlzcGxheTogY29udGVudHM7XG59XG5cbi8qIFN0eWwgYXZhdGFyw7N3ICovXG4uYXZhdGFyIHtcbiAgICB3aWR0aDogNDBweDsgLyogU3plcm9rb8WbxIcgYXZhdGFyYSAqL1xuICAgIGhlaWdodDogNDBweDsgLyogV3lzb2tvxZvEhyBhdmF0YXJhICovXG4gICAgYm9yZGVyLXJhZGl1czogNTAlOyAvKiBBdmF0YXIgdyBmb3JtaWUga2/FgmEgKi9cbiAgICBvYmplY3QtZml0OiBjb3ZlcjsgLyogT2JyYXogd3lwZcWCbmlhIGF2YXRhciBwcm9wb3Jjam9uYWxuaWUgKi9cbiAgICAvKlxuICAgICAgICAtIEF2YXRhciB3IGVzdGV0eWN6bnltIGZvcm1hY2llIGtvxYJhLlxuICAgICAgICAtIFphY2hvd2FuaWUgcHJvcG9yY2ppIG9icmF6w7N3LlxuICAgICovXG59XG5cbi8qIE5hcGlzIMWCYWRvd2FuaWEgbWEgZGVsaWthdG5pZSBcIm9kZHljaGHEh1wiLCDFvGVieSBzdWdlcm93YcSHIHByYWPEmSBtb2RlbHUgYmV6IGFncmVzeXduZWogYW5pbWFjamkuICovXG4uYWktbG9hZGluZy10ZXh0IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGNvbG9yOiAjNWY1NjMwO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgdGV4dC1zaGFkb3c6IDAgMXB4IDAgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjU1KTtcbiAgICBhbmltYXRpb246IGFpVGhpbmtpbmdQdWxzZSAxLjhzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xufVxuXG4uYWktbG9hZGluZy10ZXh0OjphZnRlciB7XG4gICAgY29udGVudDogJy4uLic7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiAxLjJlbTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIHZlcnRpY2FsLWFsaWduOiBib3R0b207XG4gICAgYW5pbWF0aW9uOiBhaVRoaW5raW5nRG90cyAxLjJzIHN0ZXBzKDQsIGVuZCkgaW5maW5pdGU7XG59XG5cbi8qIFNlcGFyYXRvciB3aWFkb21vxZtjaSAqL1xuLm1lc3NhZ2UtZGl2aWRlciB7XG4gICAgYm9yZGVyOiBub25lOyAvKiBCcmFrIG9icmFtb3dhbmlhIHN0YW5kYXJkb3dlZ28gKi9cbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2RkZDsgLyogTGluaWEgb2RkemllbGFqxIVjYSB3aWFkb21vxZtjaSAqL1xuICAgIG1hcmdpbjogMTBweCAwOyAvKiBPZHN0xJlweSBuYWQgaSBwb2QgbGluacSFICovXG4gICAgd2lkdGg6IDgwJTsgLyogU3plcm9rb8WbxIcgc2VwYXJhdG9yYSAqL1xuICAgIGFsaWduLXNlbGY6IGNlbnRlcjsgLyogV3nFm3JvZGtvd2FuaWUgc2VwYXJhdG9yYSAqL1xuICAgIC8qXG4gICAgICAgIC0gU2VwYXJhdG9yIGRsYSB3aXp1YWxuZWdvIHJvemR6aWVsZW5pYSBncnVwIHdpYWRvbW/Fm2NpLlxuICAgICovXG59XG5cbi8qIFN0eWwgdHltY3phc293ZWdvIGtvbXVuaWthdHUgcmVuZGVyb3dhbmlhIEhUTUwgKi9cblxuLyogT2RyxJlibmUgcGFsZXR5IGtvbG9yw7N3IGRsYSBjemF0w7N3OiB0ZW4gc2FtIHVrxYJhZCwgaW5uYSBpZGVudHlmaWthY2phIHdpenVhbG5hLlxuICAgQ3phdCBvZ8OzbG55OiBkZWxpa2F0bmEgc3phxYJ3aWEgLyBsZcWbbmEgemllbGXFhC5cbiAgIEN6YXQgcmV6ZXJ3YWN5am55OiBjaWVwxYJ5IHBpYXNlayAvIG1pb2Rvd2UgYWtjZW50eS4gKi9cblxuXG4vKiBPZ8OzbG55IGN6YXQgQUkgKi9cblxuLmNoYXQtcGFuZWwtaGVhZGVyIHtcbiAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIHBhZGRpbmc6IDAuODVyZW0gMXJlbTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyMSwgMTIxLCA1OCwgMC4yMik7XG4gICAgYm9yZGVyLXJhZGl1czogMTZweCAxNnB4IDAgMDtcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiYSgxMjEsIDEyMSwgNTgsIDAuMjYpO1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45OCkgMCUsIHJnYmEoMjQ1LCAyNDEsIDIzMSwgMC45OCkgMTAwJSk7XG4gICAgYm94LXNoYWRvdzpcbiAgICAgICAgMCAxMnB4IDI4cHggcmdiYSg3OSwgNzUsIDMxLCAwLjEyKSxcbiAgICAgICAgaW5zZXQgMCAxcHggMCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODUpO1xufVxuXG4uY2hhdC1wYW5lbC1oZWFkaW5nLWxpbmUge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIGdhcDogMC40NXJlbSAwLjc1cmVtO1xuICAgIG1hcmdpbi1ib3R0b206IDAuMDhyZW07XG59XG5cbi5jaGF0LXBhbmVsLXN0YXR1cyB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IDAuNHJlbTtcbiAgICBwYWRkaW5nOiAwLjI0cmVtIDAuNjJyZW07XG4gICAgYm9yZGVyLXJhZGl1czogOTk5cHg7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpO1xuICAgIGNvbG9yOiAjNWY1YTNhO1xuICAgIGZvbnQtc2l6ZTogMC43MnJlbTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTtcbiAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAxcHggcmdiYSgxMjEsIDEyMSwgNTgsIDAuMTYpO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xufVxuXG4uY2hhdC1wYW5lbC1zdGF0dXMtZG90IHtcbiAgICB3aWR0aDogMC41cmVtO1xuICAgIGhlaWdodDogMC41cmVtO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBiYWNrZ3JvdW5kOiAjMzliODVkO1xuICAgIGJveC1zaGFkb3c6IDAgMCAwIDRweCByZ2JhKDU3LCAxODQsIDkzLCAwLjE0KTtcbn1cblxuLmNoYXQtcGFuZWwtdGl0bGUge1xuICAgIG1hcmdpbjogMDtcbiAgICBjb2xvcjogIzRmNGIxZjtcbiAgICBmb250LWZhbWlseTogR2VvcmdpYSwgXCJUaW1lcyBOZXcgUm9tYW5cIiwgc2VyaWY7XG4gICAgZm9udC1zaXplOiAxLjI0cmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjEyO1xufVxuXG4uY2hhdC1wYW5lbC1zdW1tYXJ5IHtcbiAgICBtYXJnaW46IDA7XG4gICAgY29sb3I6ICM0YTVkNDI7XG4gICAgZm9udC1zaXplOiAwLjkycmVtO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG59XG5cbi5jaGF0LXBhbmVsLW1vZGUge1xuICAgIG1hcmdpbi1ib3R0b206IDAuMDhyZW07XG4gICAgY29sb3I6ICM1ZjVhM2E7XG4gICAgZm9udC1zaXplOiAwLjg0cmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgbGluZS1oZWlnaHQ6IDEuMzU7XG59XG5cbi5jaGF0LXBhbmVsLWRlc2NyaXB0aW9uIHtcbiAgICBjb2xvcjogIzZiNjU0NTtcbiAgICBmb250LXNpemU6IDAuODZyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNDI7XG59XG5cbi5jaGF0LWlucHV0LXdyYXBwZXIge1xuICAgIG1hcmdpbi10b3A6IDAuOXJlbTtcbiAgICBwYWRkaW5nOiAwLjc1cmVtIDAuOXJlbSAwLjNyZW0gIWltcG9ydGFudDtcbn1cblxuLmNoYXQtaW5wdXQtd3JhcHBlci5pcy1idXN5IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG59XG5cbi5jaGF0LWlucHV0LXdyYXBwZXIuaXMtYnVzeTo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAwO1xuICAgIGJvcmRlci1yYWRpdXM6IDE0cHg7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE4KTtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbn1cblxuLmNoYXQtaW5wdXQtYnVzeS1zdGF0dXMge1xuICAgIG1hcmdpbi10b3A6IDAuNDVyZW07XG4gICAgbWFyZ2luLWJvdHRvbTogMC4ycmVtO1xuICAgIGZvbnQtc2l6ZTogMC43OHJlbTtcbiAgICBsaW5lLWhlaWdodDogMS4zNTtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjAxZW07XG59XG5cbi5nZW5lcmFsLWNoYXQtdGhlbWUgLmNoYXQtcGFuZWwtaGVhZGVyIHtcbiAgICBib3JkZXItY29sb3I6IHJnYmEoMTIxLCAxMjEsIDU4LCAwLjIyKTtcbn1cblxuLmJvb2tpbmctY2hhdC10aGVtZSAuY2hhdC1wYW5lbC1oZWFkZXIge1xuICAgIGJvcmRlci1jb2xvcjogcmdiYSgxMjEsIDEyMSwgNTgsIDAuMjIpO1xufVxuXG4uYm9va2luZy1jaGF0LXRoZW1lIC5jaGF0LXBhbmVsLXN0YXR1cyB7XG4gICAgY29sb3I6ICM2YjRiMTc7XG4gICAgYm94LXNoYWRvdzogaW5zZXQgMCAwIDAgMXB4IHJnYmEoMTgxLCAxNDEsIDcyLCAwLjIpO1xufVxuXG4uYm9va2luZy1jaGF0LXRoZW1lIC5jaGF0LXBhbmVsLXRpdGxlIHtcbiAgICBjb2xvcjogIzVhM2QxMjtcbn1cblxuLmJvb2tpbmctY2hhdC10aGVtZSAuY2hhdC1wYW5lbC1tb2RlIHtcbiAgICBjb2xvcjogIzZhNGExNjtcbn1cblxuLmJvb2tpbmctY2hhdC10aGVtZSAuY2hhdC1wYW5lbC1kZXNjcmlwdGlvbiB7XG4gICAgY29sb3I6ICM2YjUzMzA7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5jaGF0LXBhbmVsLWhlYWRlciB7XG4gICAgICAgIHBhZGRpbmc6IDAuOHJlbSAwLjlyZW07XG4gICAgfVxuXG4gICAgLmNoYXQtcGFuZWwtdGl0bGUge1xuICAgICAgICBmb250LXNpemU6IDEuMTJyZW07XG4gICAgfVxuXG4gICAgLmNoYXQtcGFuZWwtaGVhZGluZy1saW5lIHtcbiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gICAgICAgIGdhcDogMC4zNXJlbSAwLjU1cmVtO1xuICAgIH1cblxuICAgIC5jaGF0LXBhbmVsLXN1bW1hcnksXG4gICAgLmNoYXQtcGFuZWwtbW9kZSxcbiAgICAuY2hhdC1wYW5lbC1kZXNjcmlwdGlvbiB7XG4gICAgICAgIGZvbnQtc2l6ZTogMC43NnJlbTtcbiAgICB9XG5cbiAgICAuY2hhdC1wYW5lbC1zdGF0dXMge1xuICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICB9XG59XG5cbi5nZW5lcmFsLWNoYXQtdGhlbWUgI2NoYXQtbWVzc2FnZXMge1xuICAgIG1hcmdpbjogMCBhdXRvIDIwcHg7XG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDEyMSwgMTIxLCA1OCwgMC4yMik7XG4gICAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItdG9wOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IDAgMCAxNnB4IDE2cHg7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgI2Y3ZmFmMyAwJSwgI2VlZjVlNyAxMDAlKTtcbiAgICBib3gtc2hhZG93OlxuICAgICAgICAwIDEycHggMjhweCByZ2JhKDc5LCA3NSwgMzEsIDAuMDgpLFxuICAgICAgICBpbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI4KTtcbn1cblxuLmdlbmVyYWwtY2hhdC10aGVtZSAjY2hhdC1tZXNzYWdlcyAuYWktbWVzc2FnZSAuYWktY29udGVudCB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2RmZWFkMiAwJSwgI2M5ZGRiOCAxMDAlKTtcbiAgICBjb2xvcjogIzI0MzcxYztcbn1cblxuLmdlbmVyYWwtY2hhdC10aGVtZSAjY2hhdC1tZXNzYWdlcyAudXNlci1tZXNzYWdlIC51c2VyLWNvbnRlbnQge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmNGYwZGYgMCUsICNlOGRmYzcgMTAwJSk7XG4gICAgY29sb3I6ICMzZjNhMmI7XG59XG5cbi5nZW5lcmFsLWNoYXQtdGhlbWUgI2NoYXQtbWVzc2FnZXMgLmFpLW1lc3NhZ2UgLmFpLWNvbnRlbnQgcCxcbi5nZW5lcmFsLWNoYXQtdGhlbWUgI2NoYXQtbWVzc2FnZXMgLmFpLW1lc3NhZ2UgLmFpLWNvbnRlbnQgbGksXG4uZ2VuZXJhbC1jaGF0LXRoZW1lICNjaGF0LW1lc3NhZ2VzIC5haS1tZXNzYWdlIC5haS1jb250ZW50IHNwYW4sXG4uZ2VuZXJhbC1jaGF0LXRoZW1lICNjaGF0LW1lc3NhZ2VzIC5haS1tZXNzYWdlIC5haS1jb250ZW50IHN0cm9uZyxcbi5nZW5lcmFsLWNoYXQtdGhlbWUgI2NoYXQtbWVzc2FnZXMgLm1lc3NhZ2UgdWwge1xuICAgIGNvbG9yOiAjMjQzNzFjO1xufVxuXG4uZ2VuZXJhbC1jaGF0LXRoZW1lICNjaGF0LW1lc3NhZ2VzIC51c2VyLW1lc3NhZ2UgLnVzZXItY29udGVudCBwLFxuLmdlbmVyYWwtY2hhdC10aGVtZSAjY2hhdC1tZXNzYWdlcyAudXNlci1tZXNzYWdlIC51c2VyLWNvbnRlbnQgbGksXG4uZ2VuZXJhbC1jaGF0LXRoZW1lICNjaGF0LW1lc3NhZ2VzIC51c2VyLW1lc3NhZ2UgLnVzZXItY29udGVudCBzcGFuLFxuLmdlbmVyYWwtY2hhdC10aGVtZSAjY2hhdC1tZXNzYWdlcyAudXNlci1tZXNzYWdlIC51c2VyLWNvbnRlbnQgc3Ryb25nIHtcbiAgICBjb2xvcjogIzNmM2EyYjtcbn1cblxuLmdlbmVyYWwtY2hhdC10aGVtZSAjY2hhdC1tZXNzYWdlcyAuYWktbWVzc2FnZSAuYWktY29udGVudCBhLFxuLmdlbmVyYWwtY2hhdC10aGVtZSAjY2hhdC1tZXNzYWdlcyAudXNlci1tZXNzYWdlIC51c2VyLWNvbnRlbnQgYSB7XG4gICAgY29sb3I6ICMwYjYzYzk7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgdGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzczogMS41cHg7XG4gICAgdGV4dC11bmRlcmxpbmUtb2Zmc2V0OiAycHg7XG59XG5cbi5nZW5lcmFsLWNoYXQtdGhlbWUgI2NoYXQtbWVzc2FnZXMgLmFpLW1lc3NhZ2UgLmFpLWNvbnRlbnQgYTpob3Zlcixcbi5nZW5lcmFsLWNoYXQtdGhlbWUgI2NoYXQtbWVzc2FnZXMgLmFpLW1lc3NhZ2UgLmFpLWNvbnRlbnQgYTpmb2N1cyxcbi5nZW5lcmFsLWNoYXQtdGhlbWUgI2NoYXQtbWVzc2FnZXMgLnVzZXItbWVzc2FnZSAudXNlci1jb250ZW50IGE6aG92ZXIsXG4uZ2VuZXJhbC1jaGF0LXRoZW1lICNjaGF0LW1lc3NhZ2VzIC51c2VyLW1lc3NhZ2UgLnVzZXItY29udGVudCBhOmZvY3VzIHtcbiAgICBjb2xvcjogIzA4NGQ5Yjtcbn1cblxuLmdlbmVyYWwtY2hhdC10aGVtZSAuY2hhdC1pbnB1dC13cmFwcGVyIC5jaGF0LWlucHV0IHtcbiAgICBib3JkZXItY29sb3I6ICM5Y2FmODg7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZiZmNmODtcbn1cblxuLmdlbmVyYWwtY2hhdC10aGVtZSAuY2hhdC1pbnB1dC13cmFwcGVyIC5jaGF0LWlucHV0OmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6ICM3Zjk2Njc7XG4gICAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMTI3LCAxNTAsIDEwMywgMC4yMik7XG59XG5cbi5nZW5lcmFsLWNoYXQtdGhlbWUgLmNoYXQtaW5wdXQtd3JhcHBlci5pcy1idXN5IC5jaGF0LWlucHV0LFxuLmdlbmVyYWwtY2hhdC10aGVtZSAuY2hhdC1pbnB1dC13cmFwcGVyIC5jaGF0LWlucHV0OmRpc2FibGVkLFxuLmdlbmVyYWwtY2hhdC10aGVtZSAuY2hhdC1pbnB1dC13cmFwcGVyIC5jaGF0LWlucHV0W3JlYWRvbmx5XSB7XG4gICAgYm9yZGVyLWNvbG9yOiAjYjljNGFiO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWYyZTg7XG4gICAgY29sb3I6ICM2YjczNWY7XG4gICAgY3Vyc29yOiBub3QtYWxsb3dlZDtcbiAgICBvcGFjaXR5OiAxO1xufVxuXG4uZ2VuZXJhbC1jaGF0LXRoZW1lIC5jaGF0LWlucHV0LXdyYXBwZXIuaXMtYnVzeSAuY2hhdC1pbnB1dDo6cGxhY2Vob2xkZXIsXG4uZ2VuZXJhbC1jaGF0LXRoZW1lIC5jaGF0LWlucHV0LXdyYXBwZXIgLmNoYXQtaW5wdXQ6ZGlzYWJsZWQ6OnBsYWNlaG9sZGVyLFxuLmdlbmVyYWwtY2hhdC10aGVtZSAuY2hhdC1pbnB1dC13cmFwcGVyIC5jaGF0LWlucHV0W3JlYWRvbmx5XTo6cGxhY2Vob2xkZXIge1xuICAgIGNvbG9yOiAjN2U4NjczO1xufVxuXG4uZ2VuZXJhbC1jaGF0LXRoZW1lIC5jaGF0LWlucHV0LXdyYXBwZXIgLmNoYXQtYnV0dG9uIHtcbiAgICBib3JkZXItY29sb3I6ICM3Zjk2Njc7XG4gICAgY29sb3I6ICM1MzZiM2Y7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2YxZjZlYTtcbn1cblxuLmdlbmVyYWwtY2hhdC10aGVtZSAuY2hhdC1pbnB1dC13cmFwcGVyLmlzLWJ1c3kgLmNoYXQtYnV0dG9uLFxuLmdlbmVyYWwtY2hhdC10aGVtZSAuY2hhdC1pbnB1dC13cmFwcGVyIC5jaGF0LWJ1dHRvbjpkaXNhYmxlZCB7XG4gICAgYm9yZGVyLWNvbG9yOiAjYTZiNjk5O1xuICAgIGNvbG9yOiAjN2E4NjcxO1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNlOGVmZTA7XG4gICAgY3Vyc29yOiB3YWl0O1xuICAgIG9wYWNpdHk6IDE7XG59XG5cbi5nZW5lcmFsLWNoYXQtdGhlbWUgLmNoYXQtaW5wdXQtYnVzeS1zdGF0dXMge1xuICAgIGNvbG9yOiAjNmE3NzVhO1xufVxuXG4uZ2VuZXJhbC1jaGF0LXRoZW1lIC5jaGF0LWlucHV0LXdyYXBwZXIgLmNoYXQtYnV0dG9uOmhvdmVyLFxuLmdlbmVyYWwtY2hhdC10aGVtZSAuY2hhdC1pbnB1dC13cmFwcGVyIC5jaGF0LWJ1dHRvbjpmb2N1cyB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogIzdmOTY2NztcbiAgICBib3JkZXItY29sb3I6ICM3Zjk2Njc7XG4gICAgY29sb3I6ICNmZmZmZmY7XG59XG5cblxuLyogQ3phdCBBSSByZXplcndhY2ppICovXG5cbi5ib29raW5nLWNoYXQtdGhlbWUgI2NoYXQtbWVzc2FnZXMge1xuICAgIG1hcmdpbjogMCBhdXRvIDIwcHg7XG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDEyMSwgMTIxLCA1OCwgMC4yMik7XG4gICAgYm9yZGVyLXdpZHRoOiAxcHg7XG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICBib3JkZXItdG9wOiBub25lO1xuICAgIGJvcmRlci1yYWRpdXM6IDAgMCAxNnB4IDE2cHg7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgI2ZmZmFmMSAwJSwgI2Y3ZWRkYyAxMDAlKTtcbiAgICBib3gtc2hhZG93OlxuICAgICAgICAwIDEycHggMjhweCByZ2JhKDc5LCA3NSwgMzEsIDAuMDgpLFxuICAgICAgICBpbnNldCAwIDAgMCAxcHggcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjI4KTtcbn1cblxuLmJvb2tpbmctY2hhdC10aGVtZSAjY2hhdC1tZXNzYWdlcyAuYWktbWVzc2FnZSAuYWktY29udGVudCB7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZywgI2YyZGRiNCAwJSwgI2U2Yzk4ZCAxMDAlKTtcbiAgICBjb2xvcjogIzRhMzIwZTtcbn1cblxuLmJvb2tpbmctY2hhdC10aGVtZSAjY2hhdC1tZXNzYWdlcyAudXNlci1tZXNzYWdlIC51c2VyLWNvbnRlbnQge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmNWVhZDcgMCUsICNlN2QxYWQgMTAwJSk7XG4gICAgY29sb3I6ICM0NjMyMTk7XG59XG5cbi5ib29raW5nLWNoYXQtdGhlbWUgI2NoYXQtbWVzc2FnZXMgLmFpLW1lc3NhZ2UgLmFpLWNvbnRlbnQgcCxcbi5ib29raW5nLWNoYXQtdGhlbWUgI2NoYXQtbWVzc2FnZXMgLmFpLW1lc3NhZ2UgLmFpLWNvbnRlbnQgbGksXG4uYm9va2luZy1jaGF0LXRoZW1lICNjaGF0LW1lc3NhZ2VzIC5haS1tZXNzYWdlIC5haS1jb250ZW50IHNwYW4sXG4uYm9va2luZy1jaGF0LXRoZW1lICNjaGF0LW1lc3NhZ2VzIC5haS1tZXNzYWdlIC5haS1jb250ZW50IHN0cm9uZyxcbi5ib29raW5nLWNoYXQtdGhlbWUgI2NoYXQtbWVzc2FnZXMgLm1lc3NhZ2UgdWwge1xuICAgIGNvbG9yOiAjNGEzMjBlO1xufVxuXG4uYm9va2luZy1jaGF0LXRoZW1lICNjaGF0LW1lc3NhZ2VzIC51c2VyLW1lc3NhZ2UgLnVzZXItY29udGVudCBwLFxuLmJvb2tpbmctY2hhdC10aGVtZSAjY2hhdC1tZXNzYWdlcyAudXNlci1tZXNzYWdlIC51c2VyLWNvbnRlbnQgbGksXG4uYm9va2luZy1jaGF0LXRoZW1lICNjaGF0LW1lc3NhZ2VzIC51c2VyLW1lc3NhZ2UgLnVzZXItY29udGVudCBzcGFuLFxuLmJvb2tpbmctY2hhdC10aGVtZSAjY2hhdC1tZXNzYWdlcyAudXNlci1tZXNzYWdlIC51c2VyLWNvbnRlbnQgc3Ryb25nIHtcbiAgICBjb2xvcjogIzQ2MzIxOTtcbn1cblxuLmJvb2tpbmctY2hhdC10aGVtZSAjY2hhdC1tZXNzYWdlcyAuYWktbWVzc2FnZSAuYWktY29udGVudCBhLFxuLmJvb2tpbmctY2hhdC10aGVtZSAjY2hhdC1tZXNzYWdlcyAudXNlci1tZXNzYWdlIC51c2VyLWNvbnRlbnQgYSB7XG4gICAgY29sb3I6ICMwYjYzYzk7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgdGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzczogMS41cHg7XG4gICAgdGV4dC11bmRlcmxpbmUtb2Zmc2V0OiAycHg7XG59XG5cbi5ib29raW5nLWNoYXQtdGhlbWUgI2NoYXQtbWVzc2FnZXMgLmFpLW1lc3NhZ2UgLmFpLWNvbnRlbnQgYTpob3Zlcixcbi5ib29raW5nLWNoYXQtdGhlbWUgI2NoYXQtbWVzc2FnZXMgLmFpLW1lc3NhZ2UgLmFpLWNvbnRlbnQgYTpmb2N1cyxcbi5ib29raW5nLWNoYXQtdGhlbWUgI2NoYXQtbWVzc2FnZXMgLnVzZXItbWVzc2FnZSAudXNlci1jb250ZW50IGE6aG92ZXIsXG4uYm9va2luZy1jaGF0LXRoZW1lICNjaGF0LW1lc3NhZ2VzIC51c2VyLW1lc3NhZ2UgLnVzZXItY29udGVudCBhOmZvY3VzIHtcbiAgICBjb2xvcjogIzA4NGQ5Yjtcbn1cblxuLmJvb2tpbmctY2hhdC10aGVtZSAuY2hhdC1pbnB1dC13cmFwcGVyIC5jaGF0LWlucHV0IHtcbiAgICBib3JkZXItY29sb3I6ICNjOWE4NmE7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmRmODtcbn1cblxuLmJvb2tpbmctY2hhdC10aGVtZSAuY2hhdC1pbnB1dC13cmFwcGVyIC5jaGF0LWlucHV0OmZvY3VzIHtcbiAgICBib3JkZXItY29sb3I6ICNiNThkNDg7XG4gICAgYm94LXNoYWRvdzogMCAwIDAgMC4ycmVtIHJnYmEoMTgxLCAxNDEsIDcyLCAwLjIyKTtcbn1cblxuLmJvb2tpbmctY2hhdC10aGVtZSAuY2hhdC1pbnB1dC13cmFwcGVyLmlzLWJ1c3kgLmNoYXQtaW5wdXQsXG4uYm9va2luZy1jaGF0LXRoZW1lIC5jaGF0LWlucHV0LXdyYXBwZXIgLmNoYXQtaW5wdXQ6ZGlzYWJsZWQsXG4uYm9va2luZy1jaGF0LXRoZW1lIC5jaGF0LWlucHV0LXdyYXBwZXIgLmNoYXQtaW5wdXRbcmVhZG9ubHldIHtcbiAgICBib3JkZXItY29sb3I6ICNkN2MyOWE7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZWVlMztcbiAgICBjb2xvcjogIzhhNzg1ZDtcbiAgICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICAgIG9wYWNpdHk6IDE7XG59XG5cbi5ib29raW5nLWNoYXQtdGhlbWUgLmNoYXQtaW5wdXQtd3JhcHBlci5pcy1idXN5IC5jaGF0LWlucHV0OjpwbGFjZWhvbGRlcixcbi5ib29raW5nLWNoYXQtdGhlbWUgLmNoYXQtaW5wdXQtd3JhcHBlciAuY2hhdC1pbnB1dDpkaXNhYmxlZDo6cGxhY2Vob2xkZXIsXG4uYm9va2luZy1jaGF0LXRoZW1lIC5jaGF0LWlucHV0LXdyYXBwZXIgLmNoYXQtaW5wdXRbcmVhZG9ubHldOjpwbGFjZWhvbGRlciB7XG4gICAgY29sb3I6ICM5ODg0Njg7XG59XG5cbi5ib29raW5nLWNoYXQtdGhlbWUgLmNoYXQtaW5wdXQtd3JhcHBlciAuY2hhdC1idXR0b24ge1xuICAgIGJvcmRlci1jb2xvcjogI2I1OGQ0ODtcbiAgICBjb2xvcjogIzgwNjAyYTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmNmU3O1xufVxuXG4uYm9va2luZy1jaGF0LXRoZW1lIC5jaGF0LWlucHV0LXdyYXBwZXIuaXMtYnVzeSAuY2hhdC1idXR0b24sXG4uYm9va2luZy1jaGF0LXRoZW1lIC5jaGF0LWlucHV0LXdyYXBwZXIgLmNoYXQtYnV0dG9uOmRpc2FibGVkIHtcbiAgICBib3JkZXItY29sb3I6ICNjZGIwN2E7XG4gICAgY29sb3I6ICM5YjdmNGI7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y0ZWFkNztcbiAgICBjdXJzb3I6IHdhaXQ7XG4gICAgb3BhY2l0eTogMTtcbn1cblxuLmJvb2tpbmctY2hhdC10aGVtZSAuY2hhdC1pbnB1dC1idXN5LXN0YXR1cyB7XG4gICAgY29sb3I6ICM4ZDcyNDI7XG59XG5cbi5ib29raW5nLWNoYXQtdGhlbWUgLmNoYXQtaW5wdXQtd3JhcHBlciAuY2hhdC1idXR0b246aG92ZXIsXG4uYm9va2luZy1jaGF0LXRoZW1lIC5jaGF0LWlucHV0LXdyYXBwZXIgLmNoYXQtYnV0dG9uOmZvY3VzIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYjU4ZDQ4O1xuICAgIGJvcmRlci1jb2xvcjogI2I1OGQ0ODtcbiAgICBjb2xvcjogI2ZmZmZmZjtcbn1cblxuLmh0bWwtcmVuZGVyLW5vdGljZSB7XG4gICAgZGlzcGxheTogYmxvY2s7ICAgICAgICAvKiBLb211bmlrYXQgcG9qYXdpYSBzacSZIHBvZCBvZHBvd2llZHppxIUgQUksIHphd3N6ZSB3IG9zb2JueW0gd2llcnN6dSAqL1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsgICAgLyogS3Vyc3l3YSBkbGEgd3lyw7PFvG5pZW5pYSB0ZWtzdHUgcG9tb2NuaWN6ZWdvICovXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7ICAgICAvKiBQb2dydWJpZW5pZSDigJMgbGVwc3phIGN6eXRlbG5vxZvEhyAqL1xuICAgIG1hcmdpbi10b3A6IDhweDsgICAgICAgLyogRGVsaWthdG55IG9kc3TEmXAgb2QgdGVrc3R1IEFJIHBvd3nFvGVqICovXG4gICAgLypcbiAgICAgICAgLSBLb211bmlrYXQgd3nFm3dpZXRsYSBzacSZIGN6eXRlbG5pZSBwb2QgdHJlxZtjacSFIG9kcG93aWVkemkgQUkuXG4gICAgICAgIC0gS3Vyc3l3YSBpIHBvZ3J1YmllbmllIHBvZGtyZcWbbGFqxIUgdHltY3phc293eSwgaW5mb3JtYWN5am55IGNoYXJha3RlciB0ZWtzdHUuXG4gICAgKi9cbn1cblxuLyogUHVscyBzdGVydWplIGphc25vxZtjacSFIHRla3N0dSwgYSBvc29ibmEgYW5pbWFjamEga3JvcGVrIGRhamUgZWZla3QgXCJtecWbbGVuaWFcIi4gKi9cbkBrZXlmcmFtZXMgYWlUaGlua2luZ1B1bHNlIHtcbiAgICAwJSxcbiAgICAxMDAlIHtcbiAgICAgICAgb3BhY2l0eTogMC43MjtcbiAgICB9XG5cbiAgICA1MCUge1xuICAgICAgICBvcGFjaXR5OiAxO1xuICAgIH1cbn1cblxuQGtleWZyYW1lcyBhaVRoaW5raW5nRG90cyB7XG4gICAgMCUge1xuICAgICAgICB3aWR0aDogMDtcbiAgICB9XG5cbiAgICAxMDAlIHtcbiAgICAgICAgd2lkdGg6IDEuMmVtO1xuICAgIH1cbn1cblxuLyogV3lyw7PFvG5pb25hIHJhbWthIHBvIHVkYW55bSB6YWtvxYRjemVuaXUgcmV6ZXJ3YWNqaSAqL1xuLmNoYXQtbmV4dC1ib29raW5nLW5vdGljZSB7XG4gICAgbWFyZ2luOiAxMnB4IDAgMThweCA1MHB4O1xuICAgIHBhZGRpbmc6IDEycHggMTZweDtcbiAgICBib3JkZXI6IDFweCBzb2xpZCAjYmZhMzZhO1xuICAgIGJvcmRlci1sZWZ0OiA1cHggc29saWQgIzhkNzM0NDtcbiAgICBib3JkZXItcmFkaXVzOiAxMnB4O1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsICNmZmY4ZWEgMCUsICNmNmVkZDkgMTAwJSk7XG4gICAgY29sb3I6ICM2YjViMzM7XG4gICAgZm9udC1zaXplOiAxNHB4O1xuICAgIGxpbmUtaGVpZ2h0OiAxLjU7XG4gICAgYm94LXNoYWRvdzogMCA4cHggMjJweCByZ2JhKDE0MSwgMTE1LCA2OCwgMC4xMCk7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5jaGF0LW5leHQtYm9va2luZy1ub3RpY2Uge1xuICAgICAgICBtYXJnaW4tbGVmdDogMDtcbiAgICB9XG59XG5cbi5zaG9ydC1idG4ge1xuICAgIHdpZHRoOiA3MCU7ICAgICAgICAgICAgIC8qIFVzdGF3aWEgc3plcm9rb8WbxIcgcHJ6eWNpc2t1IG5hIDcwJSBzemVyb2tvxZtjaSBrb250ZW5lcmEsIHNwcmF3aWFqxIVjLCDFvGUgcHJ6eWNpc2sgbmllIGplc3QgemJ5dCBzemVyb2tpICovXG4gICAgbWluLXdpZHRoOiAxMjBweDsgICAgICAgLyogWmFwZXduaWEsIMW8ZSBwcnp5Y2lzayBuaWUgYsSZZHppZSBtbmllanN6eSBuacW8IDEyMHB4LCBjbyBwb3ByYXdpYSBjenl0ZWxub8WbxIcgbmEgbWHFgnljaCBla3JhbmFjaCAqL1xuICAgIG1heC13aWR0aDogMzAwcHg7ICAgICAgIC8qIE9ncmFuaWN6YSBtYWtzeW1hbG7EhSBzemVyb2tvxZvEhyBwcnp5Y2lza3UgZG8gMzAwcHgsIGNvIHphcG9iaWVnYSB6Ynl0IGR1xbxlbXUgcm96Y2nEhWduacSZY2l1IG5hIHN6ZXJva2ljaCBrb250ZW5lcmFjaCAqL1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7ICAgIC8qIFphcG9iaWVnYSDFgmFtYW5pdSBzacSZIHRla3N0dSB3ZXduxIV0cnogcHJ6eWNpc2t1IGRvIG5vd2VqIGxpbmlpLCB1dHJ6eW11asSFYyBnbyB3IGplZG5laiBsaW5paSAqL1xuICAgIG92ZXJmbG93OiBoaWRkZW47ICAgICAgIC8qIFVrcnl3YSBuYWRtaWFyb3d5IHRla3N0IGx1YiB6YXdhcnRvxZvEhywga3TDs3JhIG5pZSBtaWXFm2NpIHNpxJkgdyB6YWRhbmVqIHN6ZXJva2/Fm2NpICovXG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7LyogSmXFm2xpIHRla3N0IG5pZSBtaWXFm2NpIHNpxJkgdyBwcnp5Y2lza3UsIHBvamF3aWEgc2nEmSB3aWVsb2tyb3BlayBuYSBrb8WEY3UgKi9cbiAgICBtYXJnaW46IDAgYXV0bzsgICAgICAgICAvKiBBdXRvbWF0eWN6bmllIHd5xZtyb2Rrb3d1amUgcHJ6eWNpc2sgdyBwb3ppb21pZSB3IG9icsSZYmllIGplZ28ga29udGVuZXJhICovXG4gICAgZGlzcGxheTogYmxvY2s7ICAgICAgICAgLyogVXN0YXdpYSBwcnp5Y2lzayBqYWtvIGJsb2tvd3ksIGR6acSZa2kgY3plbXUgbWFyZ2luIGR6aWHFgmEgcG9wcmF3bmllIGkgcHJ6eWNpc2sgamVzdCB0cmFrdG93YW55IGphayBvc29ibnkgZWxlbWVudCB3IHdpZXJzenUgKi9cbiAgICAvKlxuICAgICAgICAtIGB3aWR0aDogNzAlYCDigJMgUHJ6eWNpc2sgemFqbXVqZSA3MCUgc3plcm9rb8WbY2kgc3dvamVnbyBrb250ZW5lcmEsIGR6acSZa2kgY3plbXUgd3lnbMSFZGEgZXN0ZXR5Y3puaWUgaSBuaWUgamVzdCB6Ynl0IHN6ZXJva2kuXG4gICAgICAgIC0gYG1pbi13aWR0aDogMTIwcHhgIOKAkyBDaHJvbmkgcHJ6ZWQgemJ5dCBtYcWCeW0gcHJ6eWNpc2tpZW0sIGNvIGplc3Qgd2HFvG5lIGRsYSBrb21mb3J0dSB1xbx5dGtvd25pa2EgbmEgdXJ6xIVkemVuaWFjaCBtb2JpbG55Y2guXG4gICAgICAgIC0gYG1heC13aWR0aDogMzAwcHhgIOKAkyBaYXBvYmllZ2EgbmFkbWllcm5lbXUgcm96Y2nEhWduacSZY2l1IHByenljaXNrdSBuYSBkdcW8eWNoIGVrcmFuYWNoLlxuICAgICAgICAtIGB3aGl0ZS1zcGFjZTogbm93cmFwYCDigJMgVGVrc3QgcG96b3N0YWplIHcgamVkbmVqIGxpbmlpLCBiZXogxYJhbWFuaWEuXG4gICAgICAgIC0gYG92ZXJmbG93OiBoaWRkZW5gIOKAkyBVa3J5d2Egd3N6ZWxrxIUgemF3YXJ0b8WbxIcgd3ljaG9kesSFY8SFIHBvemEgcHJ6eWNpc2suXG4gICAgICAgIC0gYHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzYCDigJMgR2R5IHRla3N0IHNpxJkgbmllIG1pZcWbY2ksIHBvamF3aWEgc2nEmSB3aWVsb2tyb3BlayAoYC4uLmApLCBzeWduYWxpenVqxIVjIHVjacSZY2llIHRyZcWbY2kuXG4gICAgICAgIC0gYG1hcmdpbjogMCBhdXRvYCDigJMgUHJ6eWNpc2tpIHPEhSB3ecWbcm9ka293YW5lIHcga29udGVuZXJ6ZSwgbmllemFsZcW8bmllIG9kIGplZ28gc3plcm9rb8WbY2kuXG4gICAgICAgIC0gYGRpc3BsYXk6IGJsb2NrYCDigJMgU3ByYXdpYSwgxbxlIHByenljaXNrIGplc3QgdHJha3Rvd2FueSBqYWtvIGJsb2ssIGNvIHVtb8W8bGl3aWEgcHJhd2lkxYJvd2UgY2VudHJvd2FuaWUgemEgcG9tb2PEhSBtYXJnaW5lc8Ozdy5cbiAgICAqL1xufVxuXG5cbi8qIFVzdGF3aWVuaWUgcHJ6eWNpc2vDs3cgdyBwaW9ub3dlaiBrb2x1bW5pZSAqL1xuLmZsb2F0aW5nLWJ1dHRvbnMge1xuICAgIHBvc2l0aW9uOiBmaXhlZDsgLyogVXN0YXdpYSBwb3p5Y2rEmSBqYWtvIHN0YcWCxIUsIGR6acSZa2kgY3plbXUgcHJ6eWNpc2tpIHBvem9zdGFqxIUgdyB0eW0gc2FteW0gbWllanNjdSBwb2RjemFzIHByemV3aWphbmlhICovXG4gICAgYm90dG9tOiAyMHB4OyAvKiBVc3Rhd2lhIG9kbGVnxYJvxZvEhyBwcnp5Y2lza8OzdyBvZCBkb2xuZWoga3Jhd8SZZHppIGVrcmFudSBuYSAyMHB4ICovXG4gICAgcmlnaHQ6IDIwcHg7IC8qIFVzdGF3aWEgcHJ6eWNpc2tpIDIwcHggb2QgcHJhd2VqIGtyYXfEmWR6aSBla3JhbnUgKi9cbiAgICBkaXNwbGF5OiBmbGV4OyAvKiBVxbx5d2EgbW9kZWx1IGZsZXhib3ggZG8gcm96bWllc3pjemVuaWEgZWxlbWVudMOzdyAqL1xuICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IC8qIFVzdGF3aWEgcHJ6eWNpc2tpIGplZGVuIHBvZCBkcnVnaW0gdyBwaW9ub3dlaiBrb2x1bW5pZSAqL1xuICAgIGdhcDogMTJweDsgLyogRG9kYWplIG9kcm9iaW7EmSB3acSZY2VqIG9kZGVjaHUgbWnEmWR6eSBwcnp5Y2lza2FtaSAqL1xuICAgIHotaW5kZXg6IDExMDA7IC8qIFVwZXduaWEgc2nEmSwgxbxlIHByenljaXNraSBzxIUgbmFkIGlubnltaSBlbGVtZW50YW1pIHN0cm9ueSAqL1xuICAgIC8qXG4gICAgICAgIC0gYHBvc2l0aW9uOiBmaXhlZGAgLSBaYXBld25pYSwgxbxlIHByenljaXNraSBwb3pvc3RhasSFIHcgamVkbnltIG1pZWpzY3UgcG9kY3phcyBwcnpld2lqYW5pYSBzdHJvbnkuXG4gICAgICAgIC0gYGJvdHRvbTogMjBweGAgLSBQcnplc3V3YSBwcnp5Y2lza2kgMjBweCBvZCBkb2xuZWoga3Jhd8SZZHppLCB6YXBld25pYWrEhWMgY3p5dGVsbm/Fm8SHLlxuICAgICAgICAtIGByaWdodDogMjBweGAgLSBVbWllc3pjemEgcHJ6eWNpc2tpIDIwcHggb2QgcHJhd2VqIGtyYXfEmWR6aSwgZHppxJlraSBjemVtdSBzxIUgxYJhdHdvIGRvc3TEmXBuZS5cbiAgICAgICAgLSBgZGlzcGxheTogZmxleGAgLSBVbW/FvGxpd2lhIHXFvHljaWUgZmxleGJveGEgZG8gd3lyw7N3bmFuaWEgZWxlbWVudMOzdy5cbiAgICAgICAgLSBgZmxleC1kaXJlY3Rpb246IGNvbHVtbmAgLSBVc3Rhd2lhIGVsZW1lbnR5IHcga29sdW1uaWUsIHVtaWVzemN6YWrEhWMgamUgamVkZW4gcG9kIGRydWdpbS5cbiAgICAgICAgLSBgZ2FwOiAxMHB4YCAtIERvZGFqZSAxMHB4IG9kc3TEmXB1IG1pxJlkenkgcHJ6eWNpc2thbWksIGFieSBuaWUgYnnFgnkgemJ5dCBibGlza28gc2llYmllLlxuICAgICAgICAtIGB6LWluZGV4OiAxMTAwYCAtIFphcGV3bmlhLCDFvGUgcHJ6eWNpc2tpIHPEhSB3ecW8ZWogbmnFvCBpbm5lIGVsZW1lbnR5IG5hIHN0cm9uaWUuXG4gICAgKi9cbn1cblxuLyogRGxhIHN0cm9uIHogbmlza8SFIHJlQ0FQVENIQSAobnAuIGtvbnRha3QgbHViIGFzeXN0ZW50IEFJKSkgKi9cbi5mbG9hdGluZy1idXR0b25zLS1yYWlzZWQge1xuICAgIGJvdHRvbTogOTBweDsgXG4gICAgLyogd3nFvGVqICovXG59XG5cbi8qIERvc3Rvc293YW5pZSBzdHlsdSBwcnp5Y2lza8OzdyAqL1xuLmN1c3RvbS1idG4ge1xuICAgIGRpc3BsYXk6IGZsZXg7IC8qIFVtb8W8bGl3aWEgdcW8eWNpZSBmbGV4Ym94YSBkbyB3eXLDs3duYW5pYSB0cmXFm2NpIHByenljaXNrdSAqL1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7IC8qIFd5csOzd251amUgaWtvbsSZIGkgdGVrc3QgZG8gxZtyb2RrYSB3IHBpb25pZSAqL1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOyAvKiBXeXLDs3dudWplIGlrb27EmSBpIHRla3N0IGRvIMWbcm9ka2EgdyBwb3ppb21pZSAqL1xuICAgIGdhcDogMTBweDsgLyogRG9kYWplIG9kc3TEmXAgMTBweCBtacSZZHp5IGlrb27EhSBhIHRla3N0ZW0gKi9cbiAgICBwYWRkaW5nOiAxMHB4IDE4cHg7IC8qIERvZGFqZSB3eWdvZG55LCBhbGUgbGVra2kgb2RzdMSZcCB3ZXduxJl0cnpueSAqL1xuICAgIG1pbi13aWR0aDogMTgwcHg7IC8qIFphcGV3bmlhIG1pbmltYWxuxIUgc3plcm9rb8WbxIcgMjAwcHgsIGFieSBwcnp5Y2lza2kgYnnFgnkgcHJvcG9yY2pvbmFsbmUgKi9cbiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IC8qIFd5csOzd251amUgdGVrc3QgdyBwcnp5Y2lza3UgZG8gxZtyb2RrYSAqL1xuICAgIGZvbnQtc2l6ZTogOTMlOyAvKiBMZWtraWUgem1uaWVqc3plbmllIHRla3N0dSovXG4gICAgY29sb3I6ICM1ZjVhM2E7IC8qIENpZXDFgnkgb2RjaWXFhCBkb3Bhc293YW55IGRvIHN0eWxpc3R5a2kgc3Ryb255ICovXG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjk4KSAwJSwgcmdiYSgyNDUsIDI0MSwgMjMxLCAwLjk4KSAxMDAlKTsgLyogRGVsaWthdG55IGtyZW1vd3kgZ3JhZGllbnQgemFtaWFzdCBwxYJhc2tpZWogYmllbGkgKi9cbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDEyMSwgMTIxLCA1OCwgMC4yMikgIWltcG9ydGFudDsgLyogU3VidGVsbmUgb2JyYW1vd2FuaWUgdyB0b25hY2ppIGxpbmvDs3cgKi9cbiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsgLyogTWnEmWtraSwga2Fwc3XFgmtvd3kga3N6dGHFgnQgKi9cbiAgICBib3gtc2hhZG93OlxuICAgICAgICAwIDEycHggMjhweCByZ2JhKDc5LCA3NSwgMzEsIDAuMTQpLFxuICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44NSk7IC8qIExla2tpIGNpZcWEIHogbWnEmWtraW0gcm96xZt3aWV0bGVuaWVtICovXG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDRweCk7IC8qIERlbGlrYXRuZSB3eWfFgmFkemVuaWUgbmFkIHTFgmVtIHN0cm9ueSAqL1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4ycyBlYXNlLCBjb2xvciAwLjJzIGVhc2UsIGJvcmRlci1jb2xvciAwLjJzIGVhc2UsIGJveC1zaGFkb3cgMC4ycyBlYXNlOyAvKiBTcG9rb2puZSBwcnplasWbY2lhIHN0YW7Ds3cgKi9cbiAgICAvKlxuICAgICAgICAtIGBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmYCAtIFVzdGF3aWEgYmlhxYJlIHTFgm8gcHJ6eWNpc2t1LCBjbyBwYXN1amUgZG8gbmV1dHJhbG5lZ28gc3R5bHUgc3Ryb255LlxuICAgICAgICAtIGBkaXNwbGF5OiBmbGV4YCAtIFVtb8W8bGl3aWEgxYJhdHdlIHd5csOzd25hbmllIGlrb24gaSB0ZWtzdHUgd2V3bsSFdHJ6IHByenljaXNrdS5cbiAgICAgICAgLSBgYWxpZ24taXRlbXM6IGNlbnRlcmAgLSBaYXBld25pYSB3eXLDs3duYW5pZSB0cmXFm2NpIHcgcGlvbmllLlxuICAgICAgICAtIGBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcmAgLSBXeXLDs3dudWplIHRyZcWbxIcgdyBwb3ppb21pZSwgemFwZXduaWFqxIVjIGVzdGV0eWN6bnkgd3lnbMSFZC5cbiAgICAgICAgLSBgZ2FwOiAxMHB4YCAtIERvZGFqZSBvZHN0xJlwIDEwcHggbWnEmWR6eSBpa29uxIUgYSB0ZWtzdGVtLCBwb3ByYXdpYWrEhWMgY3p5dGVsbm/Fm8SHLlxuICAgICAgICAtIGBmb250LXdlaWdodDogYm9sZGAgLSBTcHJhd2lhLCDFvGUgdGVrc3QgcHJ6eWNpc2t1IGplc3QgYmFyZHppZWogd2lkb2N6bnkuXG4gICAgICAgIC0gYGJvcmRlci13aWR0aDogMnB4ICFpbXBvcnRhbnRgIC0gWmFwZXduaWEgamVkbm9saXTEhSBzemVyb2tvxZvEhyBvYnJhbW93YW5pYSBkbGEgd3N6eXN0a2ljaCBwcnp5Y2lza8Ozdy5cbiAgICAgICAgLSBgcGFkZGluZzogMTJweCAyMHB4YCAtIERvZGFqZSBtYXJnaW5lc3kgd2V3bsSZdHJ6bmUsIGFieSB0ZWtzdCBpIGlrb255IG5pZSBiecWCeSBwcnp5IGtyYXfEmWR6aS5cbiAgICAgICAgLSBgbWluLXdpZHRoOiAyMDBweGAgLSBVc3Rhd2lhIG1pbmltYWxuxIUgc3plcm9rb8WbxIcsIGR6acSZa2kgY3plbXUgd3N6eXN0a2llIHByenljaXNraSBzxIUgcsOzd25laiB3aWVsa2/Fm2NpLlxuICAgICAgICAtIGB0ZXh0LWFsaWduOiBjZW50ZXJgIC0gV3lyw7N3bnVqZSB0ZWtzdCB3IHByenljaXNrdSBkbyDFm3JvZGthLlxuICAgICAgICAtIGBmb250LXNpemU6IDk1JWAgLSBMZWtraWUgem1uaWVqc3plbmllIGN6Y2lvbmtpLlxuICAgICovXG59XG5cbi8qIEVmZWt0IGhvdmVyICovXG4uY3VzdG9tLWJ0bjpob3ZlciB7XG4gICAgY29sb3I6ICM0ZjRiMWYgIWltcG9ydGFudDsgLyogSG92ZXIgcHJ6eWNpZW1uaWEgdGVrc3QsIGFsZSBiZXogYWdyZXN5d25lZ28ga29udHJhc3R1ICovXG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDE4MGRlZywgcmdiYSgyMzksIDIzNCwgMjIwLCAwLjk4KSAwJSwgcmdiYSgyMjYsIDIxOCwgMTk0LCAwLjk4KSAxMDAlKTsgLyogU3VidGVsbmEgem1pYW5hIHTFgmEgemFtaWFzdCBtb2NuZWdvIHByemXFgsSFY3plbmlhICovXG4gICAgYm9yZGVyLWNvbG9yOiByZ2JhKDEyMSwgMTIxLCA1OCwgMC40KSAhaW1wb3J0YW50OyAvKiBNaW5pbWFsbmllIG1vY25pZWpzenkgb2JyeXMgKi9cbiAgICBib3gtc2hhZG93OlxuICAgICAgICAwIDE0cHggMzBweCByZ2JhKDc5LCA3NSwgMzEsIDAuMTgpLFxuICAgICAgICBpbnNldCAwIDFweCAwIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsgLyogRGVsaWthdG5pZSBnxYLEmWJzenkgY2llxYQgdyBob3ZlcnplICovXG4gICAgLypcbiAgICAgICAgLSBgY29sb3I6IHdoaXRlICFpbXBvcnRhbnRgIC0gWm1pZW5pYSBrb2xvciB0ZWtzdHUgbmEgYmlhxYJ5IHBvIG5hamVjaGFuaXUsIHphcGV3bmlhasSFYyBsZXBzenkga29udHJhc3QuXG4gICAgKi9cbn1cblxuLyogSWtvbnkgKi9cbi5jdXN0b20tYnRuIGkge1xuICAgIGZvbnQtc2l6ZTogMjBweDsgLyogSWtvbnkgbGVra28gem1uaWVqc3pvbmUsIMW8ZWJ5IHByenljaXNrIGJ5xYIgbMW8ZWpzenkgb3B0eWN6bmllICovXG4gICAgLypcbiAgICAgICAgLSBgZm9udC1zaXplOiAyMnB4YCAtIFVzdGF3aWEgd2llbGtvxZvEhyBpa29uIG5hIDIycHgsIGR6acSZa2kgY3plbXUgc8SFIGRvYnJ6ZSB3aWRvY3puZSBpIHByb3BvcmNqb25hbG5lIGRvIHRla3N0dS5cbiAgICAqL1xufVxuXG4vKiBHxYLDs3duZSB1c3Rhd2llbmlhIHN0eWx1IGthbGVuZGFyemEgTGl0ZXBpY2tlciAqL1xuLmxpdGVwaWNrZXIge1xuICAgIGZvbnQtc2l6ZTogMTZweDsgLyogVXN0YXdpYSBiYXpvd3kgcm96bWlhciBjemNpb25raSBrYWxlbmRhcnphICovXG4gICAgcGFkZGluZzogMS4ycmVtOyAvKiBEb2RhamUgcHJ6ZXN0cnplxYQgd2V3bsSZdHJ6bsSFIHdva8OzxYIgemF3YXJ0b8WbY2kgKi9cbiAgICBib3JkZXItcmFkaXVzOiAwLjVyZW07IC8qIFphb2tyxIVnbGEgcm9naSBrYWxlbmRhcnphICovXG4gICAgYm94LXNoYWRvdzogbm9uZTsgLyogVXN1d2EgZG9tecWbbG55IGNpZcWEICovXG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0yM3B4KTtcbiAgICBmb250LWZhbWlseTogdmFyKC0tYnMtYm9keS1mb250LWZhbWlseSwgc3lzdGVtLXVpLCBzYW5zLXNlcmlmKTsgLyogRG9wYXNvd3VqZSBjemNpb25rxJkgZG8gc3R5bHUgQm9vdHN0cmFwICovXG4gICAgLypcbiAgICAgICAgLSBgZm9udC1zaXplOiAxNnB4YCDigJMgUG9kc3Rhd293eSByb3ptaWFyIHRla3N0dSB3ZXduxIV0cnoga2FsZW5kYXJ6YS5cbiAgICAgICAgLSBgcGFkZGluZzogMS4ycmVtYCDigJMgRG9kYWplIHd5Z29kbnkgb2RzdMSZcCB3ZXduxIV0cnoga29udGVuZXJhLlxuICAgICAgICAtIGBib3JkZXItcmFkaXVzOiAwLjVyZW1gIOKAkyBaYW9rcsSFZ2xhIGtyYXfEmWR6aWUgY2HFgmVnbyBrb21wb25lbnR1LlxuICAgICAgICAtIGBib3gtc2hhZG93OiBub25lYCDigJMgVXN1d2EgY2llxYQsIGJ5IHphY2hvd2HEhyBwxYJhc2tpIHd5Z2zEhWQuXG4gICAgICAgIC0gYGZvbnQtZmFtaWx5OiB2YXIoLS1icy1ib2R5LWZvbnQtZmFtaWx5LCAuLi4pYCDigJMgRG9wYXNvd3VqZSBmb250IGRvIEJvb3RzdHJhcGEuXG4gICAgKi9cbn1cblxuLyogU3R5bCBuYWfFgsOzd2vDs3cgeiBuYXp3xIUgbWllc2nEhWNhIGkgcm9raWVtICovXG4ubGl0ZXBpY2tlciAubW9udGgtaXRlbS1uYW1lLFxuLmxpdGVwaWNrZXIgLm1vbnRoLWl0ZW0teWVhciB7XG4gICAgZm9udC1zaXplOiAxLjFyZW07IC8qIFVzdGF3aWEgcm96bWlhciBjemNpb25raSBuYXp3IG1pZXNpxJljeSBpIGxhdCAqL1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7IC8qIFBvZ3J1YmllbmllIHRla3N0dSBkbGEgbGVwc3plaiBjenl0ZWxub8WbY2kgKi9cbiAgICBjb2xvcjogIzQ0NDsgLyogQ2llbW5vc3phcnkga29sb3IgcGFzdWrEhWN5IGRvIG5ldXRyYWxuZWoga29sb3J5c3R5a2kgc3Ryb255ICovXG4gICAgLypcbiAgICAgICAgLSBgZm9udC1zaXplOiAxLjFyZW1gIOKAkyBad2nEmWtzemEgY3p5dGVsbm/Fm8SHIG5hZ8WCw7N3a8OzdyBtaWVzacSZY3kgaSBsYXQuXG4gICAgICAgIC0gYGZvbnQtd2VpZ2h0OiA2MDBgIOKAkyBVd3lkYXRuaWEgbmFnxYLDs3draS5cbiAgICAgICAgLSBgY29sb3I6ICM0NDRgIOKAkyBOYWRhamUgbmV1dHJhbG55IGkgc3Rvbm93YW55IGtvbG9yIHRla3N0b3dpLlxuICAgICovXG59XG5cbi8qIFN0eWwgcG9qZWR5bmN6ZWdvIGRuaWEgdyBMaXRlcGlja2VyemUgKi9cbi5saXRlcGlja2VyIC5kYXktaXRlbSB7XG4gICAgd2lkdGg6IDIuNnJlbTsgICAgICAgICAgICAgIC8qIFN0YcWCYSBzemVyb2tvxZvEhyBrb23Ds3JraSBkbmlhICovXG4gICAgaGVpZ2h0OiAyLjZyZW07ICAgICAgICAgICAgIC8qIFN0YcWCYSB3eXNva2/Fm8SHIGtvbcOzcmtpIGRuaWEgKi9cbiAgICBsaW5lLWhlaWdodDogMi42cmVtOyAgICAgICAgLyogV3nFm3JvZGtvd2FuaWUgbGljemJ5IGRuaWEgdyBwaW9uaWUgKi9cbiAgICBib3JkZXItcmFkaXVzOiAwLjM3NXJlbTsgICAgLyogWmFva3LEhWdsZW5pZSByb2fDs3cgZG5pYSAqL1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7ICAgICAvKiBQYWRkaW5nL2JvcmRlciBuaWUgcG93acSZa3N6YSBrb23Ds3JraSAqL1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjsgICAgICAgICAvKiBXecWbcm9ka293YW5pZSBwb3ppb21lIHRla3N0dSB3IGRuaXUgKi9cbiAgICAvKiBcbiAgICAgICAgVVdBR0k6XG4gICAgICAgIC0gTklFIHN0b3N1amVteSBtYXJnaW5lc8OzdyAobWFyZ2luKSwgYm8gbW9nxIUgcm96amVjaGHEhyBzaWF0a8SZIHcgdGFiZWxpLlxuICAgICAgICAtIEplxZtsaSBjaGNlc3ogc3VidGVsbmUgb2RkemllbGVuaWUgZG5pLCBsZXBpZWogdcW8ecSHIGxla2tpIGJvcmRlciwgcGFkZGluZyBsdWIgYm94LXNoYWRvdy5cbiAgICAgICAgLSBNb8W8ZXN6IHptaWVuacSHIHJvem1pYXIgKDIuNnJlbSkgd2VkxYJ1ZyBwb3RyemViLCB6YWNob3d1asSFYyBwcm9wb3JjamUgc2lhdGtpLlxuICAgICovXG59XG5cbi8qIE5hZ8WCw7N3a2kgZG5pIHR5Z29kbmlhIChQbiwgV3QsIMWaci4uLikgKi9cbi5saXRlcGlja2VyIC5kYXktaXRlbS1oZWFkZXIge1xuICAgIGZvbnQtc2l6ZTogMC44NXJlbTsgLyogTW5pZWpzemEgY3pjaW9ua2EgZGxhIG5hencgZG5pIHR5Z29kbmlhICovXG4gICAgZm9udC13ZWlnaHQ6IDYwMDsgLyogUG9ncnViaWVuaWUgbmF6dyBkbmkgKi9cbiAgICBjb2xvcjogIzZjNzU3ZDsgLyogVcW8eXdhIG9kY2llbmlhIHN6YXJvxZtjaSB6IEJvb3RzdHJhcGEgKi9cbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOyAvKiBaYW1pZW5pYSB0ZWtzdCBuYSB3aWVsa2llIGxpdGVyeSAqL1xuICAgIC8qXG4gICAgICAgIC0gYGZvbnQtc2l6ZTogMC44NXJlbWAg4oCTIFN1YnRlbG5pZWpzenkgcm96bWlhciBkbGEgbmFnxYLDs3drw7N3IGRuaSB0eWdvZG5pYS5cbiAgICAgICAgLSBgZm9udC13ZWlnaHQ6IDYwMGAg4oCTIEN6eW5pIG5hZ8WCw7N3a2kgYmFyZHppZWogd2lkb2N6bnltaS5cbiAgICAgICAgLSBgY29sb3I6ICM2Yzc1N2RgIOKAkyBVdHJ6eW11amUgc3DDs2pub8WbxIcgeiBrb2xvcnlzdHlrxIUgQm9vdHN0cmFwYS5cbiAgICAgICAgLSBgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZWAg4oCTIFN0b3N1amUgd2Vyc2FsaWtpICh3aWVsa2llIGxpdGVyeSkuXG4gICAgKi9cbn1cblxuLyogU3R5bCBkb215xZtsbnkgc3RyemHFgmVrIGRvIHptaWFueSBtaWVzacSZY3kgKi9cbi5saXRlcGlja2VyIC5idXR0b24tcHJldmlvdXMtbW9udGggc3ZnIHBhdGgsXG4ubGl0ZXBpY2tlciAuYnV0dG9uLW5leHQtbW9udGggc3ZnIHBhdGgge1xuICAgIGZpbGw6ICMzMzMgIWltcG9ydGFudDsgLyogRG9tecWbbG55IGtvbG9yIGlrb24gc3RyemHFgmVrIChjaWVtbm9zemFyeSkgKi9cbiAgICB0cmFuc2l0aW9uOiBmaWxsIDAuMnMgZWFzZS1pbi1vdXQ7IC8qIFDFgnlubmUgcHJ6ZWrFm2NpZSBrb2xvcnUgcHJ6eSBuYWplY2hhbml1ICovXG4gICAgLypcbiAgICAgICAgLSBgZmlsbDogIzMzM2Ag4oCTIE5hZGFqZSBjaWVtbnkga29sb3IgaWtvbiBzdHJ6YcWCZWsuXG4gICAgICAgIC0gYHRyYW5zaXRpb246IGZpbGwgMC4ycyBlYXNlLWluLW91dGAg4oCTIFphcGV3bmlhIHDFgnlubm/Fm8SHIHByenkgem1pYW5pZSBrb2xvcnUuXG4gICAgKi9cbn1cblxuLyogU3R5bCBzdHJ6YcWCZWsgcG8gbmFqZWNoYW5pdSAqL1xuLmxpdGVwaWNrZXIgLmJ1dHRvbi1wcmV2aW91cy1tb250aDpob3ZlciBzdmcgcGF0aCxcbi5saXRlcGlja2VyIC5idXR0b24tbmV4dC1tb250aDpob3ZlciBzdmcgcGF0aCB7XG4gICAgZmlsbDogI2FkYTA3ZCAhaW1wb3J0YW50OyAvKiBabWllbmlhIGtvbG9yIHN0cnphxYJlayBuYSBvbGl3a293eSBwbyBuYWplY2hhbml1ICovXG4gICAgLypcbiAgICAgICAgLSBgZmlsbDogI2JhYWQ4YmAg4oCTIEtvbG9yIGhvdmVyYSBkbGEgc3RyemHFgmVrOiBvbGl3a293eS5cbiAgICAqL1xufVxuXG4vKiBTdHlsIGRuaWEgcG8gbmFqZWNoYW5pdSAqL1xuLmxpdGVwaWNrZXIgLmRheS1pdGVtOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjYmFhZDhiICFpbXBvcnRhbnQ7IC8qIE9saXdrb3dlIHTFgm8gcG8gbmFqZWNoYW5pdSAqL1xuICAgIGNvbG9yOiBibGFjayAhaW1wb3J0YW50OyAvKiBDemFybnkgdGVrc3QgcG8gbmFqZWNoYW5pdSAqL1xuICAgIG91dGxpbmU6IG5vbmUgIWltcG9ydGFudDsgLyogVXN1d2Ega29udHVyIHphem5hY3plbmlhICovXG4gICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OyAvKiBVc3V3YSBjaWXFhCAqL1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIGJsYWNrOyAvKiBEb2RhamUgY3phcm7EhSByYW1rxJkgKi9cbiAgICAvKlxuICAgICAgICAtIGBiYWNrZ3JvdW5kLWNvbG9yOiAjYmFhZDhiYCDigJMgVMWCbyB3IGtvbG9yemUgb2xpd2tvd3ltIHByenkgaG92ZXJ6ZS5cbiAgICAgICAgLSBgY29sb3I6IGJsYWNrYCDigJMgWmFwZXduaWEgY3p5dGVsbm/Fm8SHIG5hIG9saXdrb3d5bSB0bGUuXG4gICAgICAgIC0gYG91dGxpbmU6IG5vbmVgIOKAkyBVc3V3YSBuaWVwb3RyemVibnkga29udHVyIGZva3VzYS5cbiAgICAgICAgLSBgYm94LXNoYWRvdzogbm9uZWAg4oCTIFVzdXdhIGNpZW5pZSBkbGEgYmFyZHppZWog4oCecMWCYXNraWVnb+KAnSB3eWdsxIVkdS5cbiAgICAgICAgLSBgYm9yZGVyOiAxcHggc29saWQgYmxhY2tgIOKAkyBSYW1rYSBwb2RrcmXFm2xhasSFY2EgYWt0eXdueSBkemllxYQuXG4gICAgKi9cbn1cblxuLyogU3R5bCBkbmlhIG96bmFjem9uZWdvIGpha28gcG9jesSFdGVrIGx1YiBrb25pZWMgemFrcmVzdSAqL1xuLmxpdGVwaWNrZXIgLmRheS1pdGVtLmlzLXN0YXJ0LWRhdGUsXG4ubGl0ZXBpY2tlciAuZGF5LWl0ZW0uaXMtZW5kLWRhdGUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNhZGEwN2QgIWltcG9ydGFudDsgLyogT2xpd2tvd2UgdMWCbyBkbGEgZG5pYSBwb2N6xIV0a293ZWdvIGkga2/FhGNvd2VnbyAqL1xuICAgIGNvbG9yOiB3aGl0ZSAhaW1wb3J0YW50OyAvKiBCaWHFgnkgdGVrc3QgZGxhIGtvbnRyYXN0dSAqL1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkOyAvKiBQb2dydWJpZW5pZSBkYXR5ICovXG4gICAgYm9yZGVyOiBub25lOyAvKiBVc3V3YSByYW1rxJkgKi9cbiAgICAvKlxuICAgICAgICAtIGBiYWNrZ3JvdW5kLWNvbG9yOiAjYWRhMDdkYCDigJMgT2xpd2tvd3kga29sb3IgZGxhIGJyemVnb3d5Y2ggZG5pLlxuICAgICAgICAtIGBjb2xvcjogd2hpdGVgIOKAkyBLb250cmFzdHVqxIVjeSB0ZWtzdCBkbGEgY3p5dGVsbm/Fm2NpLlxuICAgICAgICAtIGBmb250LXdlaWdodDogYm9sZGAg4oCTIFBvZGtyZcWbbGVuaWUgaXN0b3RueWNoIGRhdC5cbiAgICAgICAgLSBgYm9yZGVyOiBub25lYCDigJMgQnJhayBvYnJhbW93YW5pYSDigJMgcHJvc3RvdGEgaSBwcnplanJ6eXN0b8WbxIcuXG4gICAgKi9cbn1cblxuLyogU3R5bCBkbmkgdyB6YXpuYWN6b255bSB6YWtyZXNpZSAobWnEmWR6eSBkYXRhbWkpICovXG4ubGl0ZXBpY2tlciAuZGF5LWl0ZW0uaXMtaW4tcmFuZ2Uge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNkM2QzYWEgIWltcG9ydGFudDsgLyogSmFzbmEgb2xpd2tvd2EgamFrbyB0xYJvIGRsYSB6YWtyZXN1ICovXG4gICAgY29sb3I6IGJsYWNrICFpbXBvcnRhbnQ7IC8qIEN6YXJueSB0ZWtzdCB3IHphem5hY3pvbnltIHpha3Jlc2llICovXG4gICAgLypcbiAgICAgICAgLSBgYmFja2dyb3VuZC1jb2xvcjogI2QzZDNhYWAg4oCTIEphc25hIG9saXdrYSBqYWtvIHTFgm8gZGxhIGRhdCBwb8WbcmVkbmljaC5cbiAgICAgICAgLSBgY29sb3I6IGJsYWNrYCDigJMgVXRyenltdWplIGRvYnLEhSBjenl0ZWxub8WbxIcgbmEgdGxlLlxuICAgICovXG59XG5cbi8qIFN0eWwgdMWCYSBkbGEgbW9kYWxhIEZhbmN5Ym94IChwZcWCbm9la3Jhbm93ZSBwb2TFm3dpZXRsZW5pZSB6ZGrEmWNpYSkgKi9cbi5mYW5jeWJveF9fYmFja2Ryb3Age1xuICAgIGJhY2tncm91bmQ6ICNDNTUzMDAgdXJsKC4uL2ltYWdlL2tvemlfbGFzZWtfdGxvLmpwZykgcmVwZWF0ICFpbXBvcnRhbnQ7IC8qIFBvbWFyYcWEY3pvd2UgdMWCbyB6IHRla3N0dXLEhSBqYWtvIHd6w7NyICovXG4gICAgb3BhY2l0eTogMSAhaW1wb3J0YW50OyAvKiBQZcWCbmEgbmllcHJ6ZXpyb2N6eXN0b8WbxIcgdMWCYSAqL1xuXG4gICAgLypcbiAgICAgICAgLSBgYmFja2dyb3VuZDogI0M1NTMwMCB1cmwoLi4vaW1hZ2Uva296aV9sYXNla190bG8uanBnKSByZXBlYXRgIOKAkyBQb21hcmHFhGN6b3dlIHTFgm8gKCNDNTUzMDApIHogcG93dGFyemFqxIVjeW0gc2nEmSBvYnJhemVtIHRla3N0dXJ5LlxuICAgICAgICAtIGBvcGFjaXR5OiAxYCDigJMgQnJhayBwcnplenJvY3p5c3RvxZtjaSwgdMWCbyBqZXN0IHcgcGXFgm5pIHdpZG9jem5lLlxuICAgICovXG59XG5cbi8qIFN0eWwgYmF6b3d5IGRsYSBwcnp5Y2lza8OzdyBuYXdpZ2FjeWpueWNoIEZhbmN5Ym94IChuYXN0xJlwbnkvcG9wcnplZG5pKSAqL1xuLmYtYnV0dG9uLmlzLW5leHQsXG4uZi1idXR0b24uaXMtcHJldiB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjg1KSAhaW1wb3J0YW50OyAvKiBQw7PFgnByemV6cm9jenlzdGUgYmlhxYJlIHTFgm8gcHJ6eWNpc2vDs3cgKi9cbiAgICBib3JkZXItcmFkaXVzOiA1MCU7IC8qIFphb2tyxIVnbG9ueSAob2tyxIVnxYJ5KSBrc3p0YcWCdCAqL1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE1KTsgLyogRGVsaWthdG55IGNpZcWEIGRsYSBlZmVrdHUgd3lwdWvFgm/Fm2NpICovXG4gICAgd2lkdGg6IDQ4cHg7IC8qIFN6ZXJva2/Fm8SHIHByenljaXNrdSAqL1xuICAgIGhlaWdodDogNDhweDsgLyogV3lzb2tvxZvEhyBwcnp5Y2lza3UgKi9cbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuM3MgZWFzZTsgLyogR8WCYWRrYSBhbmltYWNqYSBwcnp5IHptaWFuaWUgdMWCYSAqL1xuICAgIGRpc3BsYXk6IGZsZXg7IC8qIFVzdGF3aWVuaWUgZWxlbWVudMOzdyB3ZXduxIV0cnogcHJ6eWNpc2t1IGpha28gZmxleGJveCAqL1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOyAvKiBXeXLDs3duYW5pZSBwb3ppb21lIGRvIMWbcm9ka2EgKi9cbiAgICBhbGlnbi1pdGVtczogY2VudGVyOyAvKiBXeXLDs3duYW5pZSBwaW9ub3dlIGRvIMWbcm9ka2EgKi9cblxuICAgIC8qXG4gICAgICAgIC0gYGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44NSlgIOKAkyBCaWHFgmUgdMWCbyB6IGxla2vEhSBwcnplenJvY3p5c3RvxZtjacSFIGRsYSBzdWJ0ZWxuZWdvIHd5Z2zEhWR1LlxuICAgICAgICAtIGBib3JkZXItcmFkaXVzOiA1MCVgIOKAkyBOYWRhamUgcHJ6eWNpc2tvd2kgaWRlYWxuaWUgb2tyxIVnxYJ5IGtzenRhxYJ0LlxuICAgICAgICAtIGBib3gtc2hhZG93YCDigJMgQ2llxYQgcnp1Y2FueSBwcnpleiBwcnp5Y2lzaywgZG9kYWrEhWN5IGfFgsSZYmkuXG4gICAgICAgIC0gYHdpZHRoYCBpIGBoZWlnaHRgIOKAkyBTdGHFgmUgd3ltaWFyeSBwcnp5Y2lza3UgKDQ4eDQ4cHgpLlxuICAgICAgICAtIGB0cmFuc2l0aW9uYCDigJMgRWZla3QgcHJ6ZWrFm2NpYSBwcnp5IHptaWFuaWUga29sb3J1IHTFgmEuXG4gICAgICAgIC0gYGRpc3BsYXk6IGZsZXhgLCBganVzdGlmeS1jb250ZW50YCwgYGFsaWduLWl0ZW1zYCDigJMgV3nFm3JvZGtvd2FuaWUgaWtvbmtpIHN0cnphxYJraSB3ZXduxIV0cnogcHJ6eWNpc2t1LlxuICAgICovXG59XG5cbi8qIFN0eWwgZGxhIGlrb24gU1ZHIOKAkyBjemFybmUgc3RyemHFgmtpICovXG4uZi1idXR0b24uaXMtbmV4dCBzdmcgcGF0aCxcbi5mLWJ1dHRvbi5pcy1wcmV2IHN2ZyBwYXRoIHtcbiAgICBzdHJva2U6ICMwMDAgIWltcG9ydGFudDsgLyogQ3phcm55IGtvbG9yIG9icnlzdSBzdHJ6YcWCa2kgKi9cbiAgICBzdHJva2Utd2lkdGg6IDI7IC8qIEdydWJvxZvEhyBvYnJ5c3UgKi9cbiAgICBmaWxsOiBub25lOyAvKiBCcmFrIHd5cGXFgm5pZW5pYSDigJMgdHlsa28ga29udHVyICovXG5cbiAgICAvKlxuICAgICAgICAtIGBzdHJva2U6ICMwMDBgIOKAkyBLbGFzeWN6bnksIGN6YXJueSBvYnJ5cyBzdHJ6YcWCZWsuXG4gICAgICAgIC0gYHN0cm9rZS13aWR0aDogMmAg4oCTIE5pZWNvIHBvZ3J1Ymlvbnkga29udHVyIGRsYSBsZXBzemVqIHdpZG9jem5vxZtjaS5cbiAgICAgICAgLSBgZmlsbDogbm9uZWAg4oCTIFVzdW5pxJljaWUgd3lwZcWCbmllbmlhLCBhYnkgemFjaG93YcSHIGxla2tvxZvEhyBpa29uLlxuICAgICovXG59XG5cbi8qIEhvdmVyIOKAkyBkZWxpa2F0bmUgd3ptb2NuaWVuaWUgdMWCYSAqL1xuLmYtYnV0dG9uLmlzLW5leHQ6aG92ZXIsXG4uZi1idXR0b24uaXMtcHJldjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAxKSAhaW1wb3J0YW50OyAvKiBQZcWCbmUgYmlhxYJlIHTFgm8gcHJ6eSBuYWplY2hhbml1ICovXG5cbiAgICAvKlxuICAgICAgICAtIGBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDEpYCDigJMgWndpxJlrc3plbmllIGtvbnRyYXN0dSBwcnp5IGhvdmVyemUuXG4gICAgICAgIC0gYCFpbXBvcnRhbnRgIOKAkyBXeW11c3plbmllIHN0eWx1IG5hZCBkb215xZtsbnltIHTFgmVtIEZhbmN5Ym94YS5cbiAgICAqL1xufVxuXG4vKiBTdHlsIHByenljaXNrdSB6YW1rbmnEmWNpYSAoWCkg4oCTIG1pbmltYWxpc3R5Y3pueSwgYmV6IHTFgmEgaSBjaWVuaWEgKi9cbi5mLWJ1dHRvbi5pcy1jbG9zZS1idG4ge1xuICAgIGJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDsgICAgIC8qIFVzdW5pxJljaWUgdMWCYSAqL1xuICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsgICAgIC8qIFVzdW5pxJljaWUgY2llbmlhICovXG4gICAgYm9yZGVyOiBub25lOyAgICAgICAgICAgICAgICAgICAgLyogQnJhayBvYnJhbW93YW5pYSAqL1xuICAgIHdpZHRoOiBhdXRvOyAgICAgICAgICAgICAgICAgICAgIC8qIEF1dG9tYXR5Y3puYSBzemVyb2tvxZvEhyAqL1xuICAgIGhlaWdodDogYXV0bzsgICAgICAgICAgICAgICAgICAgIC8qIEF1dG9tYXR5Y3puYSB3eXNva2/Fm8SHICovXG4gICAgcGFkZGluZzogOHB4OyAgICAgICAgICAgICAgICAgICAgLyogV2V3bsSZdHJ6bnkgb2RzdMSZcCDigJMgd2nEmWtzenkga29tZm9ydCBrbGlrbmnEmWNpYSAqL1xuICAgIHRvcDogMjBweDsgICAgICAgICAgICAgICAgICAgICAgIC8qIE9kc3TEmXAgb2QgZ8OzcnkgKi9cbiAgICByaWdodDogMjBweDsgICAgICAgICAgICAgICAgICAgICAvKiBPZHN0xJlwIG9kIHByYXdlaiAqL1xuXG4gICAgLypcbiAgICAgICAgLSBgYmFja2dyb3VuZDogbm9uZWAg4oCTIEJyYWsga29sb3J1IHTFgmEg4oCTIHByenljaXNrIHBvem9zdGFqZSBuZXV0cmFsbnkuXG4gICAgICAgIC0gYGJveC1zaGFkb3c6IG5vbmVgIOKAkyBCcmFrIGNpZW5pYSDigJMgY3p5c3R5LCBwcm9zdHkgd3lnbMSFZC5cbiAgICAgICAgLSBgcGFkZGluZzogOHB4YCDigJMgV2nEmWtzenkgb2JzemFyIGtsaWthbG55IGRsYSB3eWdvZHkgdcW8eXRrb3duaWthLlxuICAgICAgICAtIGB0b3BgIGkgYHJpZ2h0YCDigJMgRGVsaWthdG5lIG9kc3VuacSZY2llIG9kIGtyYXfEmWR6aSBva25hLlxuICAgICovXG59XG5cbi8qIFN0eWwgY3phcm5lZ28ga3J6ecW8eWthICovXG4uZi1idXR0b24uaXMtY2xvc2UtYnRuIHN2ZyBwYXRoIHtcbiAgICBzdHJva2U6ICMwMDAgIWltcG9ydGFudDsgICAgICAgLyogQ3phcm55IGtvbG9yIGtyZXNraSAoaWtvbmtpIFwiWFwiKSAqL1xuICAgIHN0cm9rZS13aWR0aDogMjsgICAgICAgICAgICAgICAvKiBHcnVib8WbxIcga3Jlc2tpICovXG4gICAgZmlsbDogbm9uZTsgICAgICAgICAgICAgICAgICAgIC8qIEJyYWsgd3lwZcWCbmllbmlhIHdld27EhXRyeiBpa29ua2kgKi9cblxuICAgIC8qXG4gICAgICAgIC0gYHN0cm9rZTogIzAwMGAg4oCTIFphcGV3bmlhIGRvYnLEhSB3aWRvY3pub8WbxIcgaWtvbnkgemFta25pxJljaWEuXG4gICAgICAgIC0gYHN0cm9rZS13aWR0aDogMmAg4oCTIExla2tvIHBvZ3J1YmlvbmEga3Jlc2thIOKAkyBkbGEgY3p5dGVsbm/Fm2NpLlxuICAgICAgICAtIGBmaWxsOiBub25lYCDigJMgSWtvbmthIHBvem9zdGFqZSB0eWxrbyBsaW5pb3dhLCBiZXogd3lwZcWCbmllbmlhLlxuICAgICovXG59XG5cbi8qIEhvdmVyIGVmZWt0IOKAkyBvcGNqb25hbG55IChsZWtrYSB6bWlhbmEga29sb3J1KSAqL1xuLmYtYnV0dG9uLmlzLWNsb3NlLWJ0bjpob3ZlciBzdmcgcGF0aCB7XG4gICAgc3Ryb2tlOiAjNDQ0ICFpbXBvcnRhbnQ7IC8qIENpZW1ub3N6YXJ5IGtvbG9yIHBvZGN6YXMgbmFqZWNoYW5pYSBrdXJzb3JlbSAqL1xuXG4gICAgLypcbiAgICAgICAgLSBgc3Ryb2tlOiAjNDQ0YCDigJMgRGVsaWthdG5hIHptaWFuYSBrb2xvcnUgaWtvbnkgcHJ6eSBob3ZlcnplLlxuICAgICAgICAtIGAhaW1wb3J0YW50YCDigJMgV3ltdXN6YSBuYWRwaXNhbmllIGRvbXnFm2xuZWdvIHN0eWx1IEZhbmN5Ym94LlxuICAgICovXG59XG5cbi8qIFN0eWwgcGFza2EgaW5mb3JtYWN5am5lZ28gKG51bWVyYWNqYSB6ZGrEmcSHIHcgZ2FsZXJpaSkgKi9cbi5mYW5jeWJveF9faW5mb2JhciB7XG4gICAgY29sb3I6ICMwMDAgIWltcG9ydGFudDsgLyogQ3phcm55IGtvbG9yIHRla3N0dSAqL1xuICAgIGJhY2tncm91bmQ6IG5vbmUgIWltcG9ydGFudDsgLyogQnJhayB0xYJhICovXG4gICAgZm9udC1zaXplOiAwLjk1cmVtOyAvKiBMZWtrbyB6bW5pZWpzem9ueSB0ZWtzdCAqL1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7IC8qIMWacmVkbmlhIGdydWJvxZvEhyBjemNpb25raSAqL1xuICAgIHRvcDogMjBweDsgLyogT2RzdMSZcCBvZCBnw7NyeSAqL1xuICAgIGxlZnQ6IDIwcHg7IC8qIE9kc3TEmXAgb2QgbGV3ZWoga3Jhd8SZZHppICovXG4gICAgcG9zaXRpb246IGFic29sdXRlOyAvKiBQb3p5Y2pvbm93YW5pZSB3IHJvZ3UgKi9cbiAgICB0ZXh0LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KTsgLyogRGVsaWthdG55IGNpZcWEIGRsYSBsZXBzemVqIGN6eXRlbG5vxZtjaSBuYSBjaWVtbnltIHRsZSAqL1xuXG4gICAgLypcbiAgICAgICAgLSBgY29sb3I6ICMwMDBgIOKAkyBDenl0ZWxueSBjemFybnkgdGVrc3QuXG4gICAgICAgIC0gYGJhY2tncm91bmQ6IG5vbmVgIOKAkyBCcmFrIHTFgmEg4oCTIHByb3N0eSB3eWdsxIVkLlxuICAgICAgICAtIGBmb250LXNpemU6IDAuOTVyZW1gIOKAkyBEeXNrcmV0bmEgd2llbGtvxZvEhyBmb250dS5cbiAgICAgICAgLSBgZm9udC13ZWlnaHQ6IDUwMGAg4oCTIFpiYWxhbnNvd2FuYSBncnVib8WbxIcg4oCTIG5pZSB6YSBsZWtrYSwgbmllIHphIGdydWJhLlxuICAgICAgICAtIGB0b3BgIGkgYGxlZnRgIOKAkyBVbWllc3pjemVuaWUgdyBsZXd5bSBnw7NybnltIHJvZ3UuXG4gICAgICAgIC0gYHRleHQtc2hhZG93YCDigJMgRG9kYXRrb3dhIHdhcnN0d2Ega29udHJhc3R1IHByenkgamFzbnljaCB0xYJhY2guXG4gICAgKi9cbn1cblxuLyogVWtyeWNpZSBkb215xZtsbmVnbyBzcGlubmVyYSBGYW5jeWJveGEgKi9cbi5mYW5jeWJveF9fc3Bpbm5lciB7XG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OyAvKiBDYcWCa293aXRlIHVrcnljaWUgc3Bpbm5lcmEgRmFuY3lib3hhICovXG5cbiAgICAvKlxuICAgICAgICAtIGBkaXNwbGF5OiBub25lYCDigJMgRGV6YWt0eXd1amUgd2lkb2N6bm/Fm8SHIHdidWRvd2FuZWdvIHNwaW5uZXJhIEZhbmN5Ym94YS5cbiAgICAgICAgLSBgIWltcG9ydGFudGAg4oCTIEd3YXJhbnR1amUsIMW8ZSB0YSByZWd1xYJhIG5hZHBpc3plIHdzenlzdGtpZSBpbm5lIHN0eWxlLlxuICAgICAgICAtIFXFvHl3YW5lIHcgcHJ6eXBhZGt1IGtvcnp5c3RhbmlhIHogd8WCYXNuZWdvIHNwaW5uZXJhIMWCYWRvd2FuaWEgKG5wLiAjcGFnZS1sb2FkZXIpLlxuICAgICovXG59XG5cbi8qIFN0eWwgcG9kcGlzdSBwb2QgemRqxJljaWVtICovXG4uZmFuY3lib3hfX2NhcHRpb24ge1xuICAgIG1hcmdpbi10b3A6IDhweCAhaW1wb3J0YW50OyAvKiBabW5pZWpzem9ueSBvZHN0xJlwIG9kIHpkasSZY2lhICovXG4gICAgcGFkZGluZy10b3A6IDAgIWltcG9ydGFudDsgLyogVXN1bmnEmWNpZSBkb2RhdGtvd2VnbyB3ZXduxJl0cnpuZWdvIG1hcmdpbmVzdSBuYSBnw7NyemUgKi9cblxuICAgIC8qXG4gICAgICAgIC0gYG1hcmdpbi10b3A6IDhweGAg4oCTIE1pbmltYWxueSBvZHN0xJlwIG1pxJlkenkgemRqxJljaWVtIGEgcG9kcGlzZW0uXG4gICAgICAgIC0gYHBhZGRpbmctdG9wOiAwYCDigJMgQnJhayBkb2RhdGtvd2VqIHByemVzdHJ6ZW5pIHdld27EmXRyem5laiBvZCBnw7NyeS5cbiAgICAqL1xufVxuXG4vKiBTdHlsIHRla3N0dSBwb2RwaXN1IHd5xZt3aWV0bGFuZWdvIHcgcmFtY2UgcG9kIHpkasSZY2llbSAqL1xuLnF1b3RlLWdhbGxlcnkge1xuICAgIG1hcmdpbjogMDtcbiAgICBmb250LXNpemU6IDEuMjVyZW07IC8qIFp3acSZa3N6b255IHJvem1pYXIgY3pjaW9ua2kgZGxhIGxlcHN6ZWogY3p5dGVsbm/Fm2NpICovXG4gICAgZm9udC1zdHlsZTogaXRhbGljOyAvKiBLdXJzeXdhIGRsYSBlbGVnYW5jamkgKi9cbiAgICBjb2xvcjogIzFhMWExYTsgLyogQ2llbW5vc3phcnkga29sb3IgdGVrc3R1ICovXG4gICAgdGV4dC1hbGlnbjogY2VudGVyOyAvKiBXecWbcm9ka293YW5pZSB0ZWtzdHUgKi9cbiAgICBmb250LWZhbWlseTogR2VvcmdpYSwgJ1RpbWVzIE5ldyBSb21hbicsIHNlcmlmOyAvKiBLbGFzeWN6bmEsIHN6ZXJ5Zm93YSBjemNpb25rYSAqL1xuICAgIGxpbmUtaGVpZ2h0OiAxLjU7IC8qIE9wdHltYWxueSBvZHN0xJlwIG1pxJlkenkgd2llcnN6YW1pICovXG4gICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsgLyogRGVsaWthdG5lLCBqYXNub3N6YXJlIG9icmFtb3dhbmllICovXG4gICAgcGFkZGluZzogMTBweCAyNXB4OyAvKiBXZXduxJl0cnpueSBvZHN0xJlwOiBnw7NyYS9kw7PFgiAxMHB4LCBsZXdvL3ByYXdvIDI1cHggKi9cbiAgICBib3JkZXItcmFkaXVzOiA1cHg7IC8qIExla2tvIHphb2tyxIVnbG9uZSByb2dpIGRsYSDFgmFnb2RuaWVqc3plZ28gd3lnbMSFZHUgKi9cbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOyAvKiBCaWHFgmUgdMWCbyBkbGEgd3lyYcW6bmVqIHNlcGFyYWNqaSBvZCB0xYJhICovXG4gICAgXG4gICAgLypcbiAgICAgICAgLSBgZm9udC1zaXplOiAxLjI1cmVtYCDigJMgV2nEmWtzenkgcm96bWlhciB0ZWtzdHUgdcWCYXR3aWEgY3p5dGFuaWUuXG4gICAgICAgIC0gYHBhZGRpbmc6IDEwcHggMjVweGAg4oCTIETFgnXFvHN6YSByYW1rYSBwb3ppb21hLCB3aXp1YWxuaWUgc3plcnN6YSBuacW8IHpkasSZY2llLlxuICAgICAgICAtIGBib3JkZXI6IDFweCBzb2xpZCAjZGRkYCDigJMgUmFta2EsIGt0w7NyYSBuaWUgcHJ6eXTFgmFjemEgd2l6dWFsbmllLlxuICAgICAgICAtIGBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmYCDigJMgVMWCbyBwb2QgbmFwaXNlbSwga3TDs3JlIGdvIHd5csOzxbxuaWEuXG4gICAgKi9cbn1cblxuLyogU3R5bCB6YW9rcsSFZ2xvbnljaCByb2fDs3cgZGxhIHpkasSZxIcgbHViIHJhbWVrIHcgZ2FsZXJpaSAqL1xuLmdhbGxlcnktcm91bmRlZCB7XG4gICAgYm9yZGVyLXJhZGl1czogMTJweCAhaW1wb3J0YW50OyAvKiBXeW11c3phIGVmZWt0IHphb2tyxIVnbGVuaWEgbmF3ZXQgamXFm2xpIGlubmUgcmVndcWCeSBnbyBuYWRwaXN1asSFICovXG4gICAgXG4gICAgLypcbiAgICAgICAgLSBgYm9yZGVyLXJhZGl1czogMTJweGAg4oCTIFd5cmHFum5pZSB6YW9rcsSFZ2xvbmUgcm9naSBuYWRhasSFIGVsZW1lbnRvbSBiYXJkemllaiBwcnp5amF6bnksIG5vd29jemVzbnkgd3lnbMSFZC5cbiAgICAgICAgLSBgIWltcG9ydGFudGAg4oCTIFByaW9yeXRldCB0ZWogcmVndcWCeTsgemFwZXduaWEsIMW8ZSB6YW9rcsSFZ2xlbmllIHpvc3RhbmllIHphc3Rvc293YW5lIG5hd2V0IHByenkgaW5ueWNoLCBrb2xpZHVqxIVjeWNoIHN0eWxhY2guXG4gICAgKi9cbn1cblxuLyogU3RhbiBwb2N6xIV0a293eSBqZXN0IGRvZGF3YW55IHByemV6IEpTLCBkemnEmWtpIGN6ZW11IGJleiBKUyB6ZGrEmWNpYSBzxIUgd2lkb2N6bmUuICovXG5bZGF0YS1nYWxsZXJ5LXJldmVhbF0uZ2FsbGVyeS1yZXZlYWwtLXBlbmRpbmcge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAxOHB4LCAwKTtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgICBvcGFjaXR5IDQyMG1zIGVhc2Utb3V0IHZhcigtLWdhbGxlcnktcmV2ZWFsLWRlbGF5LCAwbXMpLFxuICAgICAgICB0cmFuc2Zvcm0gNDIwbXMgY3ViaWMtYmV6aWVyKDAuMjIsIDEsIDAuMzYsIDEpIHZhcigtLWdhbGxlcnktcmV2ZWFsLWRlbGF5LCAwbXMpO1xuICAgIHdpbGwtY2hhbmdlOiBvcGFjaXR5LCB0cmFuc2Zvcm07XG59XG5cbi8qIFN0YW4ga2/FhGNvd3kgxYJhZ29kbmllIHByenl3cmFjYSBwZcWCbsSFIHdpZG9jem5vxZvEhyBpIHfFgmHFm2Npd8SFIHBvenljasSZLiAqL1xuW2RhdGEtZ2FsbGVyeS1yZXZlYWxdLmdhbGxlcnktcmV2ZWFsLS12aXNpYmxlIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG59XG5cbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XG4gICAgLyogU3phbnVqZW15IHN5c3RlbW93ZSB1c3Rhd2llbmllIG9ncmFuaWN6YWrEhWNlIGFuaW1hY2plLiAqL1xuICAgIFtkYXRhLWdhbGxlcnktcmV2ZWFsXSB7XG4gICAgICAgIG9wYWNpdHk6IDEgIWltcG9ydGFudDtcbiAgICAgICAgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDtcbiAgICB9XG59XG5cbi8qIFN0eWwgemFrxYJhZGVrICh0YWJzKSBiZXogZG9sbmVqIHJhbWtpIOKAkyBzcMOzam5hIHJhbWthIHdva8OzxYIgY2HFgm/Fm2NpICovXG4ubmF2LXRhYnMge1xuICAgIG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudDsgICAgICAvKiBVc3V3YSBkb215xZtsbnkgbWFyZ2luZXMgbmEgZG9sZSDigJMgdGFicyBwcnp5bGVnYWrEhSBkbyB6YXdhcnRvxZtjaSAqL1xuICAgIGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDsgICAgICAvKiBXecWCxIVjemEgY2llxYQgcG9kIHpha8WCYWRrYW1pIOKAkyB3eWdsxIVkIGJhcmR6aWVqIOKAnnDFgmFza2nigJ0gKi9cbiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgICAgICAgICAgLyogUHJ6ZXpyb2N6eXN0ZSB0xYJvIOKAkyBpbnRlZ3J1amUgc2nEmSB6IHTFgmVtIGtvbnRlbmVyYSAqL1xuICAgIG1hcmdpbi1sZWZ0OiAtM3B4OyAgICAgICAgICAgICAgICAvKiBNaW5pbWFsbmUgcHJ6ZXN1bmnEmWNpZSB3IGxld28g4oCTIGtvcmVrdGEgd2l6dWFsbmVnbyBkb3Bhc293YW5pYSAqL1xuICAgIGJvcmRlci1ib3R0b206IG5vbmU7ICAgICAgICAgICAgICAvKiBVc3V3YSBkb2xuxIUgcmFta8SZIOKAkyByYW1rYSBwb2phd2kgc2nEmSB0eWxrbyB3b2vDs8WCIGNhxYJvxZtjaSAoa29udGVuZXJhKSAqL1xuICAgIFxuICAgIC8qXG4gICAgICAgIC0gYG1hcmdpbi1ib3R0b206IDAgIWltcG9ydGFudGAg4oCTIFpha8WCYWRraSBwcnp5bGVnYWrEhSBiZXpwb8WbcmVkbmlvIGRvIHRyZcWbY2ksIGJleiBvZHN0xJlwdS5cbiAgICAgICAgLSBgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50YCDigJMgQnJhayBjaWVuaWEgcG9kIHpha8WCYWRrYW1pOyBjenlzdHksIG1pbmltYWxpc3R5Y3pueSBlZmVrdC5cbiAgICAgICAgLSBgYmFja2dyb3VuZDogdHJhbnNwYXJlbnRgIOKAkyBQcnplenJvY3p5c3RlIHTFgm8g4oCTIHRhYnMgc3RhcGlhasSFIHNpxJkgeiBvdG9jemVuaWVtLlxuICAgICAgICAtIGBtYXJnaW4tbGVmdDogLTNweGAg4oCTIExla2thIGtvcmVrdGEgcG/Fgm/FvGVuaWE7IHd5csOzd251amUgdGFicyB3emdsxJlkZW0gcmFta2kga29udGVuZXJhLlxuICAgICAgICAtIGBib3JkZXItYm90dG9tOiBub25lYCDigJMgVXN1d2EgcG96aW9txIUgbGluacSZIG5hIGRvbGUgdGFic8OzdzsgcmFta2EgdHlsa28gd29rw7PFgiBnxYLDs3duZWdvIGJveGEuXG4gICAgKi9cbn1cblxuLyogU3R5bCBuaWVha3R5d255Y2ggemFrxYJhZGVrICh0YWLDs3cpIOKAkyB3eXJhxbpueSBib3JkZXIgdHlsa28gbmEgZ8OzcnplLCBwbyBib2thY2ggaSBqYXNuZSB0xYJvICovXG4ubmF2LXRhYnMgLm5hdi1saW5rIHtcbiAgICBib3JkZXItcmFkaXVzOiAwLjRyZW0gMC40cmVtIDAgMDsgICAgICAgICAgICAvKiBaYW9rcsSFZ2xlbmllIHR5bGtvIG5hIGfDs3J6ZSDigJMgd2l6dWFsbmllIG9kZHppZWxhIHpha8WCYWRraSBvZCByZXN6dHkgKi9cbiAgICBib3JkZXI6IDFweCBzb2xpZCAjYzZjN2M4ICFpbXBvcnRhbnQ7ICAgICAgICAvKiBEZWxpa2F0bmEsIGphc25hIHJhbWthIHdva8OzxYIgemFrxYJhZGtpIOKAkyAhaW1wb3J0YW50IHd5bXVzemEgc3R5bCAqL1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmEgIWltcG9ydGFudDsgICAgICAgIC8qIEJhcmR6byBqYXNuZSB0xYJvIChvZmYtd2hpdGUpIOKAkyBzdG9ub3dhbmUgaSBuZXV0cmFsbmUgKi9cbiAgICBjb2xvcjogIzllOWI5YiAhaW1wb3J0YW50OyAgICAgICAgICAgICAgICAgICAvKiBKYXNub3N6YXJ5IHRla3N0IOKAkyBtbmllaiBrb250cmFzdG93eSBuacW8IGFrdHl3bnkgdGFiICovXG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogKFBvcHJ6ZWRuaWEgZGVrbGFyYWNqYSwgem9zdGFqZSBuYWRwaXNhbmEgbmnFvGVqKSAqL1xuICAgIGZvbnQtd2VpZ2h0OiA0MDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFfFgmHFm2Npd3kg4oCTIHp3eWvFgmEgZ3J1Ym/Fm8SHIGN6Y2lvbmtpLCBiZXogcG9ncnViaWVuaWEgKi9cbiAgICBmb250LWZhbWlseTogJ0ludGVyJywgJ1JvYm90bycsIEFyaWFsLCBzYW5zLXNlcmlmOyAvKiBOb3dvY3plc25hLCBiZXpzemVyeWZvd2EgY3pjaW9ua2EgKi9cbiAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7ICAgICAgICAgICAgICAgICAvKiBCcmFrIGNpZW5pYSDigJMgcMWCYXNraSwgbWluaW1hbGlzdHljem55IHd5Z2zEhWQgKi9cbiAgICBtYXJnaW4tYm90dG9tOiAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCcmFrIG9kc3TEmXB1IHBvZCB6YWvFgmFka8SFIOKAkyB0YWJzIHByenlsZWdhasSFIGRvIHRyZcWbY2kgKi9cbiAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjJzLCBiYWNrZ3JvdW5kIDAuMnM7ICAgICAvKiBQxYJ5bm5hIGFuaW1hY2phIHptaWFueSBrb2xvcnUgaSB0xYJhIHByenkgaW50ZXJha2NqaSAqL1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVtb8W8bGl3aWEgcG96eWNqb25vd2FuaWUgd3pnbMSZZGVtIGtvbnRlbmVyYSAqL1xuICAgIHotaW5kZXg6IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFpha8WCYWRrYSB6bmFqZHVqZSBzacSZIHd5xbxlaiBuacW8IGlubmUgZWxlbWVudHkgKG5wLiByYW1rYSBrb250ZW5lcmEpICovXG5cbiAgICAvKlxuICAgICAgICAtIGBib3JkZXItcmFkaXVzOiAwLjRyZW0gMC40cmVtIDAgMGAg4oCTIFphb2tyxIVnbGVuaWUgdHlsa28gbmEgZ8OzcnplLCBwb2RrcmXFm2xhIOKAnmthcnRrb3d54oCdIHd5Z2zEhWQgdGFiw7N3LlxuICAgICAgICAtIGBib3JkZXI6IDFweCBzb2xpZCAjYzZjN2M4ICFpbXBvcnRhbnRgIOKAkyBKYXNuYSwgbmV1dHJhbG5hIHJhbWthLCB3eW11c3pvbmEgcHJpb3J5dGV0ZW0uXG4gICAgICAgIC0gYGJhY2tncm91bmQtY29sb3I6ICNmOGY5ZmEgIWltcG9ydGFudGAg4oCTIEJhcmR6byBqYXNuZSwgcHJhd2llIGJpYcWCZSB0xYJvIHBvZGtyZcWbbGFqxIVjZSBuaWVha3R5d25vxZvEhy5cbiAgICAgICAgLSBgY29sb3I6ICM5ZTliOWIgIWltcG9ydGFudGAg4oCTIEphc25vc3phcnkgdGVrc3Qg4oCTIG1uaWVqIGRvbWludWrEhWN5IG5pxbwgYWt0eXdueSB0YWIuXG4gICAgICAgIC0gYGZvbnQtd2VpZ2h0OiA0MDBgIOKAkyBTdGFuZGFyZG93YSBncnVib8WbxIcgdGVrc3R1LCBjenl0ZWxuYSBpIGVsZWdhbmNrYS5cbiAgICAgICAgLSBgZm9udC1mYW1pbHk6ICdJbnRlcicsICdSb2JvdG8nLCBBcmlhbCwgc2Fucy1zZXJpZmAg4oCTIE5vd29jemVzbmEgaSB1bml3ZXJzYWxuYSByb2R6aW5hIGZvbnTDs3cuXG4gICAgICAgIC0gYGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudGAg4oCTIEJyYWsgZWZla3R1IGNpZW5pYSDigJMgcHJvc3RvdGEgaSBwcnplanJ6eXN0b8WbxIcuXG4gICAgICAgIC0gYG1hcmdpbi1ib3R0b206IDBgIOKAkyBaYWvFgmFka2EgcHJ6eWxlZ2EgZG8gZ8WCw7N3bmVqIHRyZcWbY2kgYmV6IHByemVyd3kuXG4gICAgICAgIC0gYHRyYW5zaXRpb246IGNvbG9yIDAuMnMsIGJhY2tncm91bmQgMC4yc2Ag4oCTIEFuaW1hY2phIGtvbG9yw7N3IHByenkgaG92ZXJ6ZS9ha3R5d2FjamkuXG4gICAgICAgIC0gYHBvc2l0aW9uOiByZWxhdGl2ZWAgaSBgei1pbmRleDogMmAg4oCTIFVzdGF3aWVuaWUgd2Fyc3R3b3dlLCBwb3p3YWxhIHpha8WCYWRjZSDigJ53eWrFm8SH4oCdIG5hZCByYW1rxJkga29udGVuZXJhLlxuICAgICovXG59XG5cbi8qIFN0eWwgYWt0eXduZWogemFrxYJhZGtpIOKAkyB6YWvFgmFka2EgbmFjaG9kemkgbmEgcmFta8SZIHBhbmVsdSwgc3ByYXdpYSB3cmHFvGVuaWUgcG/FgsSFY3pvbmVqIHogcGFuZWxlbSAqL1xuLm5hdi10YWJzIC5uYXYtbGluay5hY3RpdmUge1xuICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmYgIWltcG9ydGFudDsgICAgICAgICAgICAgICAgLyogQmlhxYJlIHTFgm8g4oCTIHNww7NqbmUgeiBwYW5lbGVtLCB3eXJhxbpuaWUgb2RjaW5hIGFrdHl3bsSFIHpha8WCYWRrxJkgb2QgaW5ueWNoICovXG4gICAgY29sb3I6ICM0NDQgIWltcG9ydGFudDsgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBDaWVtbmllanN6eSBzemFyeSB0ZWtzdCDigJMgd2nEmWtzenkga29udHJhc3QgaSBjenl0ZWxub8WbxIcgKi9cbiAgICBmb250LXdlaWdodDogYm9sZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBvZ3J1YmllbmllIHRla3N0dSDigJMgcG9ka3JlxZtsYSBha3R5d25vxZvEhyAqL1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZmZmICFpbXBvcnRhbnQ7ICAgICAgICAgLyogRG9sbmEgcmFta2EgdyBrb2xvcnplIHTFgmEgcGFuZWx1IChiaWHFgmEpIOKAkyDigJ5uYWNob2R6aeKAnSBuYSByYW1rxJkgcGFuZWx1ICovXG4gICAgei1pbmRleDogMzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBaYWvFgmFka2EgbmEgbmFqd3nFvHN6ZWogd2Fyc3R3aWUg4oCTIHphd3N6ZSBwb25hZCBwYW5lbGVtICovXG5cbiAgICAvKlxuICAgICAgICAtIGBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmICFpbXBvcnRhbnRgIOKAkyBCaWHFgmUgdMWCbyB6YWvFgmFka2ksIGlkZW50eWN6bmUgamFrIHBhbmVsLCBkYWplIGVmZWt0IOKAnnByemVyd2FuaWHigJ0gcmFta2kgcG9kIHpha8WCYWRrxIUuXG4gICAgICAgIC0gYGNvbG9yOiAjNDQ0ICFpbXBvcnRhbnRgIOKAkyBDaWVtbnkgc3phcnkga29sb3IgdGVrc3R1LCBjenl0ZWxueSBpIGVsZWdhbmNraS5cbiAgICAgICAgLSBgZm9udC13ZWlnaHQ6IGJvbGRgIOKAkyBQb2dydWJpb255IHRla3N0IHd5cmHFum5pZSBvZHLDs8W8bmlhIGFrdHl3bsSFIHpha8WCYWRrxJkuXG4gICAgICAgIC0gYGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZmZmICFpbXBvcnRhbnRgIOKAkyBCaWHFgmEgZG9sbmEgcmFta2E7IHNwcmF3aWEgd3JhxbxlbmllLCDFvGUgemFrxYJhZGthIOKAnm5hY2hvZHpp4oCdIG5hIHBhbmVsIGkgxYLEhWN6eSBzacSZIHogbmltIHcgY2HFgm/Fm8SHLlxuICAgICAgICAtIGB6LWluZGV4OiAzYCDigJMgWmFrxYJhZGthIHphd3N6ZSBqZXN0IOKAnm5hIHdpZXJ6Y2h14oCdLCBuaWUgcHJ6eWtyeWplIGplaiDFvGFkZW4gZWxlbWVudCBwYW5lbHUuXG4gICAgKi9cbn1cblxuLyogTGVra2kgb3ZlcmxhcCBha3R5d25laiB6YWvFgmFka2kg4oCTIGVsaW1pbnVqZSB3aWRvY3pueSDigJ5zY2hvZGVr4oCdIG5hIGdyYW5pY3kgemFrxYJhZGtpIGkgcGFuZWx1ICovXG4ubmF2LXRhYnMgLm5hdi1saW5rLmFjdGl2ZSB7XG4gICAgbWFyZ2luLWJvdHRvbTogLTFweDsgLyogWmFrxYJhZGthIG5hY2hvZHppIGRvbG7EhSBrcmF3xJlkemnEhSBuYSBwYW5lbCwgd3lyw7N3bnVqxIVjIHJhbWtpICovXG4gICAgXG4gICAgLypcbiAgICAgICAgLSBgbWFyZ2luLWJvdHRvbTogLTFweGAg4oCTIFVqZW1ueSBtYXJnaW5lcyBzcHJhd2lhLCDFvGUgZG9sbmEga3Jhd8SZZMW6IHpha8WCYWRraSBsZWtrbyBuYWNob2R6aSBuYSBwYW5lbC5cbiAgICAgICAgLSBFbGltaW51amUgZWZla3Qg4oCec2Nob2RrYeKAnSAocHJ6ZXJ3eSBsdWIgcG9kd8Ozam5laiBsaW5paSkgcG9tacSZZHp5IGFrdHl3bsSFIHpha8WCYWRrxIUgYSBwYW5lbGVtLlxuICAgICAgICAtIE5hZGFqZSB3cmHFvGVuaWUgaWRlYWxuZWogY2nEhWfFgm/Fm2NpIHJhbWtpLCBkemnEmWtpIGN6ZW11IGludGVyZmVqcyB3eWdsxIVkYSBuYSBkb3ByYWNvd2FueSBpIHByb2Zlc2pvbmFsbnkuXG4gICAgKi9cbn1cblxuLyogUGFuZWwgeiB0cmXFm2NpxIUgemFrxYJhZGtpIOKAkyBwZcWCbmEgcmFta2EgZG9va2/FgmEsIGFsZSBiZXogZ8Ozcm5laiByYW1raSBwb2QgemFrxYJhZGthbWkgKi9cbi50YWItY29udGVudCwgLnRhYi1wYW5lIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmICFpbXBvcnRhbnQ7ICAgICAgICAgLyogQmlhxYJlIHTFgm8gKi9cbiAgICBib3JkZXItcmFkaXVzOiAwIDAgMC40cmVtIDAuNHJlbTsgICAgICAgICAgIC8qIFphb2tyxIVnbGVuaWUgdHlsa28gZG9sbnljaCByb2fDs3cg4oCTIMWCYWdvZG55LCBub3dvY3plc255IHd5Z2zEhWQgKi9cbiAgICBib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7ICAgICAgICAgICAgICAgIC8qIEJyYWsgY2llbmlhIOKAkyBtaW5pbWFsaXN0eWN6bnksIHDFgmFza2kgZGVzaWduICovXG4gICAgcGFkZGluZzogMC41cmVtIDAuNXJlbTsgICAgICAgICAgICAgICAgICAgICAvKiBPZHBvd2llZG5pIG9kc3TEmXAgd2V3bsSFdHJ6IHBhbmVsdSBkbGEgY3p5dGVsbm/Fm2NpICovXG4gICAgbWFyZ2luLXRvcDogMCAhaW1wb3J0YW50OyAgICAgICAgICAgICAgICAgICAvKiBQYW5lbCBwcnp5bGVnYSBkbyB6YWvFgmFkZWsg4oCTIGJyYWsgb2RzdMSZcHUgbmEgZ8OzcnplICovXG4gICAgZm9udC1mYW1pbHk6ICdJbnRlcicsICdSb2JvdG8nLCBBcmlhbCwgc2Fucy1zZXJpZjsgLyogTm93b2N6ZXNuYSwgY3p5dGVsbmEgY3pjaW9ua2EgZGxhIHNww7Nqbm/Fm2NpIHogemFrxYJhZGthbWkgKi9cbiAgICBcbiAgICAvKlxuICAgICAgICAtIGBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmYCDigJMgQmlhxYJlIHTFgm8uXG4gICAgICAgIC0gYGJvcmRlci1yYWRpdXM6IDAgMCAwLjRyZW0gMC40cmVtYCDigJMgWmFva3LEhWdsZW5pZSB0eWxrbyBuYSBkb2xlLCBnw7NybmUgcm9naSBwcm9zdG9rxIV0bmUg4oCTIGRvcGFzb3dhbmUgcG9kIHpha8WCYWRraS5cbiAgICAgICAgLSBgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50YCDigJMgUMWCYXNraSB3eWdsxIVkLCBiZXogZWZla3R1IGfFgsSZYmkg4oCTIG5vd29jemVzbnkgaSBjenlzdHkuXG4gICAgICAgIC0gYHBhZGRpbmc6IDAuNXJlbSAwLjVyZW1gIOKAkyBXZXduxJl0cnpueSBtYXJnaW5lcyB1xYJhdHdpYSBjenl0YW5pZSB0cmXFm2NpIHcgcGFuZWx1LlxuICAgICAgICAtIGBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnRgIOKAkyBQYW5lbCBzdHlrYSBzacSZIGJlenBvxZtyZWRuaW8geiB6YWvFgmFka2FtaSwgdHdvcnrEhWMgc3DDs2puxIUgY2HFgm/Fm8SHLlxuICAgICAgICAtIGBmb250LWZhbWlseTogJ0ludGVyJywgJ1JvYm90bycsIEFyaWFsLCBzYW5zLXNlcmlmYCDigJMgU3DDs2pub8WbxIcgdHlwb2dyYWZpY3puYSB6IG5hZ8WCw7N3a2FtaSBpIHpha8WCYWRrYW1pLlxuICAgICovXG59XG5cbi8qIFJhbWthIHBhbmVsdSB0cmXFm2NpIGxla2tvIHByemVzdW5pxJl0YSB3IGfDs3LEmSDigJMg4oCeY2hvd2Egc2nEmeKAnSBwb2QgemFrxYJhZGtpICovXG4udGFiLWNvbnRlbnQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgICAgICAgICAgICAgICAgIC8qIFVtb8W8bGl3aWEgcHJ6ZXN1d2FuaWUgcGFuZWx1IHd6Z2zEmWRlbSBub3JtYWxuZWdvIHBvxYJvxbxlbmlhICovXG4gICAgdG9wOiAtMXB4OyAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUGFuZWwgcHJ6ZXN1bmnEmXR5IHcgZ8OzcsSZIG8gMXB4IOKAkyBncnVib8WbxIcgcmFta2kgbmFrxYJhZGEgc2nEmSBwb2QgdGFicyAqL1xuICAgIHotaW5kZXg6IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFBhbmVsIHpuYWpkdWplIHNpxJkg4oCecG9k4oCdIGFrdHl3bsSFIHpha8WCYWRrxIUgKi9cbiAgICBtYXJnaW4tdG9wOiAtM3B4ICFpbXBvcnRhbnQ7ICAgICAgICAvKiBMZWtrbyBwb2Rub3NpIHBhbmVsLCB3eXLDs3dudWrEhWMgcG96aW9tIHogemFrxYJhZGthbWkgKi9cbiAgICBib3JkZXI6IDFweCBzb2xpZCAjYzZjN2M4OyAgICAgICAgICAvKiBKYXNuYSwgbmV1dHJhbG5hIHJhbWthIHdva8OzxYIgcGFuZWx1ICovXG5cbiAgICAvKlxuICAgICAgICAtIGBwb3NpdGlvbjogcmVsYXRpdmVgIOKAkyBQb3p3YWxhIHByemVzdW7EhcSHIHBhbmVsIGJleiB6bWlhbnkgcG/Fgm/FvGVuaWEgaW5ueWNoIGVsZW1lbnTDs3cuXG4gICAgICAgIC0gYHRvcDogLTFweGAg4oCTIFBhbmVsIOKAnndjaG9kemnigJ0gcG9kIHpha8WCYWRraSBuYSBncnVib8WbxIcgcmFta2kgKGVmZWt0IGplZG5vbGl0ZWogcmFta2kgd29rw7PFgiBjYcWCb8WbY2kpLlxuICAgICAgICAtIGB6LWluZGV4OiAxYCDigJMgUGFuZWwgamVzdCBwb2QgemFrxYJhZGthbWk7IGFrdHl3bmEgemFrxYJhZGthIG1hIHd5xbxzenkgei1pbmRleCBpIG5hY2hvZHppIG5hIHBhbmVsLlxuICAgICAgICAtIGBtYXJnaW4tdG9wOiAtM3B4ICFpbXBvcnRhbnRgIOKAkyBXeXLDs3dudWplIHBvxYJvxbxlbmllIHBhbmVsdSwgYWJ5IHJhbWtpIHRhYnPDs3cgaSBwYW5lbHUgxYLEhWN6ecWCeSBzacSZIGJleiDigJ5zY2hvZGth4oCdLlxuICAgICAgICAtIGBib3JkZXI6IDFweCBzb2xpZCAjYzZjN2M4YCDigJMgU3VidGVsbmEgcmFta2Egd29rw7PFgiBwYW5lbHUsIHNww7NqbmEgeiByYW1rxIUgemFrxYJhZGVrLlxuICAgICovXG59XG5cbi8qIFN0eWwgcG9qZWR5bmN6ZWdvIGVsZW1lbnR1IHVzxYJ1Z2kg4oCTIHd5Z29kbmUgb2RzdMSZcHkgaSBjenl0ZWxueSB0ZWtzdCAqL1xuLnNlcnZpY2UtaXRlbSB7XG4gICAgcGFkZGluZzogMS4xZW0gMS41ZW07ICAgICAgICAgICAgICAgICAvKiBXacSZa3N6eSB3ZXduxJl0cnpueSBvZHN0xJlwIOKAkyB0ZWtzdCBtYSB3acSZY2VqIHByemVzdHJ6ZW5pLCByYW1rYSB3eWdsxIVkYSDigJ5sxbxlauKAnSAqL1xuICAgIG1hcmdpbi1ib3R0b206IDIuMmVtOyAgICAgICAgICAgICAgICAgLyogRHXFvHkgb2RzdMSZcCBwb2Qgc3BvZGVtIOKAkyBrYcW8ZHkgZWxlbWVudCB3eXJhxbpuaWUgb2RkemllbG9ueSAqL1xuICAgIGxpbmUtaGVpZ2h0OiAxLjc7ICAgICAgICAgICAgICAgICAgICAgLyogV2nEmWtzenkgb2RzdMSZcCBtacSZZHp5IGxpbmlhbWkg4oCTIHBvcHJhd2lhIGN6eXRlbG5vxZvEhyBvcGlzw7N3ICovXG4gICAgY29sb3I6ICM1NjU2NTY7ICAgICAgICAgICAgICAgICAgICAgICAvKiBDaWVtbm9zemFyeSBrb2xvciB0ZWtzdHUg4oCTIMWCYWdvZG5pZWpzenkgZGxhIG9jenUgbmnFvCBjenlzdGEgY3plcsWEICovXG4gICAgZm9udC1zaXplOiAxLjA5ZW07ICAgICAgICAgICAgICAgICAgICAvKiBNaW5pbWFsbmllIHBvd2nEmWtzem9ueSByb3ptaWFyIHRla3N0dSB3emdsxJlkZW0gZG9tecWbbG5lZ28gKi9cbiAgICB0cmFuc2l0aW9uOiBib3gtc2hhZG93IDAuMThzOyAgICAgICAgIC8qIFDFgnlubmEgYW5pbWFjamEgY2llbmlhIHByenkgaW50ZXJha2NqaSAobnAuIGhvdmVyKSAqL1xuXG4gICAgLypcbiAgICAgICAgLSBgcGFkZGluZzogMS4xZW0gMS41ZW1gIOKAkyBEdcW8eSBrb21mb3J0b3d5IG1hcmdpbmVzIHdld27EmXRyem55LCB3eWdvZG55IG5hIHVyesSFZHplbmlhY2ggbW9iaWxueWNoIGkgZGVza3RvcC5cbiAgICAgICAgLSBgbWFyZ2luLWJvdHRvbTogMi4yZW1gIOKAkyBTcG9yeSBvZHN0xJlwIG1pxJlkenkgdXPFgnVnYW1pOyBsaXN0YSBqZXN0IHByemVqcnp5c3RhIGkgbmllbmF0xYJvY3pvbmEuXG4gICAgICAgIC0gYGxpbmUtaGVpZ2h0OiAxLjdgIOKAkyBPZHN0xJlweSBtacSZZHp5IGxpbmlhbWkgcG9wcmF3aWFqxIUga29tZm9ydCBjenl0YW5pYSBuYXdldCBkxYJ1xbxzenljaCBvcGlzw7N3LlxuICAgICAgICAtIGBjb2xvcjogIzU2NTY1NmAg4oCTIE1pxJlra2EsIGNpZW1uYSBzemFyb8WbxIc7IHByb2Zlc2pvbmFsbnkgaSBwcnp5amF6bnkgZWZla3QuXG4gICAgICAgIC0gYGZvbnQtc2l6ZTogMS4wOWVtYCDigJMgT2Ryb2JpbsSZIHdpxJlrc3p5IHRla3N0LCDFgmF0d2llanN6eSBkbyBjenl0YW5pYS5cbiAgICAgICAgLSBgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjE4c2Ag4oCTIEVmZWt0IHDFgnlubmVqIGFuaW1hY2ppIGNpZW5pYSBwcnp5IG5wLiBuYWplY2hhbml1IGt1cnNvcmVtLlxuICAgICovXG59XG5cbi8qIE5hendhIG1pZWpzY2EvdXPFgnVnaSDigJMgd3lyw7PFvG5pZW5pZSB0eXR1xYJ1IHcgcmFtYWNoIGxpc3R5IHVzxYJ1ZyAqL1xuLnNlcnZpY2UtcGxhY2UtbmFtZSB7XG4gICAgY29sb3I6ICM3OTc5M2E7ICAgICAgICAgICAgICAgICAvKiBPbGl3a293eSwgY2llcMWCeSBvZGNpZcWEIOKAkyBzdWJ0ZWxuZSBuYXdpxIV6YW5pZSBkbyBuYXR1cnksIMWbd2lldG55IGFrY2VudCAqL1xuICAgIGZvbnQtc2l6ZTogMS4xOWVtOyAgICAgICAgICAgICAgLyogTWluaW1hbG5pZSBwb3dpxJlrc3pvbnkgdGVrc3Qg4oCTIHd5cmHFum5pZSBvZGR6aWVsYSBuYXp3xJkgb2Qgb3Bpc3UgKi9cbiAgICBmb250LXdlaWdodDogNjAwOyAgICAgICAgICAgICAgIC8qIFDDs8WCcG9ncnViaWVuaWUg4oCTIG1vY255LCBhbGUgbmllIHByemVzYWR6b255IGFrY2VudCAqL1xuICAgIHBhZGRpbmctYm90dG9tOiAwLjIyZW07ICAgICAgICAgLyogRG9kYXRrb3d5IG9kc3TEmXAgcG9kIHNwb2RlbSDigJMgcG9wcmF3aWEgc2VwYXJhY2rEmSBvZCByZXN6dHkgdHJlxZtjaSAqL1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgICAgICAgICAgLyogUG96d2FsYSBzdG9zb3dhxIcgb2RzdMSZcHkgcGlvbm93ZSBpIHphY2hvd3VqZSBsaW5pb3d5IHVrxYJhZCAqL1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjAxZW07ICAgICAgICAgLyogRGVsaWthdG5lIHJvenN1bmnEmWNpZSBsaXRlciDigJMgbGVwc3phIGN6eXRlbG5vxZvEhyAqL1xuICAgIGxpbmUtaGVpZ2h0OiAxLjE4OyAgICAgICAgICAgICAgLyogWndpxJl6xYJlLCBsZWtrbyB6YWfEmXN6Y3pvbmUgd2llcnN6ZSDigJMgdGVrc3QgamVzdCB6d2FydHkgaSBlbGVnYW5ja2kgKi9cblxuICAgIC8qXG4gICAgICAgIC0gYGNvbG9yOiAjNzk3OTNhYCDigJMgT2xpd2tvd3kgb2RjaWXFhCwgY2llcMWCeSBpIHByenlqZW1ueSBkbGEgb2thOyBuYWRhamUgaW5keXdpZHVhbG55IGNoYXJha3RlciB0eXR1xYJvbS5cbiAgICAgICAgLSBgZm9udC1zaXplOiAxLjE5ZW1gIOKAkyBOYXp3YSBtaWVqc2NhIGRlbGlrYXRuaWUgd3lyw7PFvG5pYSBzacSZIHJvem1pYXJlbSBuYSB0bGUgcmVzenR5IHRyZcWbY2kuXG4gICAgICAgIC0gYGZvbnQtd2VpZ2h0OiA2MDBgIOKAkyBQw7PFgnBvZ3J1YmllbmllIHphcGV3bmlhIGRvYnJ5IGJhbGFucyBtacSZZHp5IGxla2tvxZtjacSFIGEgY3p5dGVsbm/Fm2NpxIUuXG4gICAgICAgIC0gYHBhZGRpbmctYm90dG9tOiAwLjIyZW1gIOKAkyBPZGR6aWVsYSBuYXp3xJkgb2Qgb3Bpc3UsIG5pZSBwb3p3YWxhasSFYyBuYSDigJ56bGFuaWUgc2nEmeKAnSB0ZWtzdHUuXG4gICAgICAgIC0gYGRpc3BsYXk6IGlubGluZS1ibG9ja2Ag4oCTIFVtb8W8bGl3aWEgc3Rvc293YW5pZSBwYWRkaW5nw7N3IGkgemFjaG93YW5pZSBzcMOzam5vxZtjaSB3IHVrxYJhZHppZS5cbiAgICAgICAgLSBgbGV0dGVyLXNwYWNpbmc6IDAuMDFlbWAg4oCTIE1pbmltYWxuZSB6d2nEmWtzemVuaWUgb2RzdMSZcHUgbWnEmWR6eSB6bmFrYW1pIHBvcHJhd2lhIHd5Z2zEhWQgaSBjenl0ZWxub8WbxIcuXG4gICAgICAgIC0gYGxpbmUtaGVpZ2h0OiAxLjE4YCDigJMgS29tcGFrdG93ZSwgc2NobHVkbmUgd2llcnN6ZSBiZXogbmFkbWllcm55Y2ggb2RzdMSZcMOzdy5cbiAgICAqL1xufVxuXG4vKiBJa29ueSB3IGxpxZtjaWUgdXPFgnVnIOKAkyBqZWRub2xpdHkga29sb3IgaSBzcMOzam55IHJvem1pYXIgKi9cbi5zZXJ2aWNlLWxpc3QgaSB7XG4gICAgY29sb3I6ICM1NjU2NTYgIWltcG9ydGFudDsgICAgICAgIC8qIEfFgsSZYm9rYSwgY2llbW5vc3phcmEgYmFyd2Eg4oCTIHN1YnRlbG55LCBwcm9mZXNqb25hbG55IGFrY2VudCBkbGEgaWtvbiAqL1xuICAgIGZvbnQtc2l6ZTogMC45NmVtOyAgICAgICAgICAgICAgICAvKiBNaW5pbWFsbmllIHptbmllanN6b255IHJvem1pYXIg4oCTIGhhcm1vbml6dWplIHogdGVrc3RlbSwgbmllIGRvbWludWplICovXG5cbiAgICAvKlxuICAgICAgICAtIGBjb2xvcjogIzU2NTY1NiAhaW1wb3J0YW50YCDigJMgWmFwZXduaWEgc3DDs2pub8WbxIcgd3N6eXN0a2ljaCBpa29uIHcgcmFtYWNoIGxpc3R5IHVzxYJ1ZzsgxYJhZ29kbmllanN6eSBlZmVrdCBuacW8IGN6eXN0YSBjemVyxYQuXG4gICAgICAgIC0gYGZvbnQtc2l6ZTogMC45NmVtYCDigJMgSWtvbnkgc8SFIG5pZWNvIG1uaWVqc3plIG9kIGRvbXnFm2xuZWdvIHJvem1pYXJ1IHRla3N0dSwgcHJ6ZXogY28gcGXFgm5pxIUgcm9sxJkgdXp1cGXFgm5pZW5pYSwgYSBuaWUgZ8WCw7N3bmVnbyBha2NlbnR1LlxuICAgICovXG59XG5cbi8qIEd3aWF6ZGtpIG9jZW55IHcgbGnFm2NpZSB1c8WCdWcg4oCTIHd5csOzxbxuaWFqxIVjeSBrb2xvciBpIG1uaWVqc3p5IHJvem1pYXIgKi9cbi5zZXJ2aWNlLWxpc3QgLmZhLXN0YXIsXG4uc2VydmljZS1saXN0IC5mYS1zdGFyLWhhbGYtYWx0IHtcbiAgICBjb2xvcjogI2ZmYzEwNyAhaW1wb3J0YW50OyAgICAgICAgIC8qIENoYXJha3RlcnlzdHljem55IMW8w7PFgnR5IChCb290c3RyYXBvd3kpIOKAkyBuYXR5Y2htaWFzdCBzdWdlcnVqZSBvY2VuxJkgKi9cbiAgICBmb250LXNpemU6IDAuODVlbTsgICAgICAgICAgICAgICAgIC8qIEd3aWF6ZGtpIHPEhSBtbmllanN6ZSBuacW8IHRla3N0LCBuaWUgZG9taW51asSFIG5hZCB0cmXFm2NpxIUgKi9cblxuICAgIC8qXG4gICAgICAgIC0gYGNvbG9yOiAjZmZjMTA3ICFpbXBvcnRhbnRgIOKAkyBJbnRlbnN5d255IMW8w7PFgnR5IG9kY2llxYQgem5hbnkgeiBCb290c3RyYXBhOyB1xbx5dGtvd25payBvZCByYXp1IHJvenBvem5hamUgc3ltYm9saWvEmSBvY2VueS5cbiAgICAgICAgLSBgZm9udC1zaXplOiAwLjg1ZW1gIOKAkyBHd2lhemRraSBzxIUgZHlza3JldG5lLCBuaWUgcHJ6ZXPFgmFuaWFqxIUgbmF6d3kgbWllanNjYSBhbmkgb3Bpc3UuXG4gICAgKi9cbn1cblxuLyogTGlzdGEgdXPFgnVnIOKAkyBqZWRub2xpdHkga29sb3IgdGVrc3R1IGkgbGVra28gem1uaWVqc3pvbnkgcm96bWlhciBmb250dSAqL1xuLnNlcnZpY2UtbGlzdCB7XG4gICAgY29sb3I6ICM1NTVjNjYgIWltcG9ydGFudDsgICAgICAgICAvKiBTdG9ub3dhbnksIHN6YXJvLW5pZWJpZXNraSBvZGNpZcWEIOKAkyBwcnp5amF6bnkgZGxhIG9rYSwgcHJvZmVzam9uYWxueSB3eWdsxIVkICovXG4gICAgZm9udC1zaXplOiAwLjk2ZW0gIWltcG9ydGFudDsgICAgICAvKiBNaW5pbWFsbmllIG1uaWVqc3p5IHRla3N0IOKAkyBzdWJ0ZWxueSwgbmllIHByenl0xYJhY3phIHJlc3p0eSBpbnRlcmZlanN1ICovXG5cbiAgICAvKlxuICAgICAgICAtIGBjb2xvcjogIzU1NWM2NiAhaW1wb3J0YW50YCDigJMgRGVsaWthdG5pZSBwcnp5Z2Fzem9ueSBrb2xvciB0ZWtzdHU7IHd5csOzxbxuaWEgc2nEmSBuYSB0bGUgYmllbGksIGFsZSBuaWUgamVzdCBhZ3Jlc3l3bnkgamFrIGN6eXN0YSBjemVyxYQuXG4gICAgICAgIC0gYGZvbnQtc2l6ZTogMC45NmVtICFpbXBvcnRhbnRgIOKAkyBUZWtzdCBsZWtrbyBwb21uaWVqc3pvbnkgd3pnbMSZZGVtIGRvbXnFm2xuZWdvIHJvem1pYXJ1LCB6YXBld25pYSBsZWtrb8WbxIcgaSBlbGVnYW5jasSZLlxuICAgICovXG59XG5cbi8qIExpY3piYSBvY2VuIChyYXRpbmcpIHcgbGnFm2NpZSB1c8WCdWcg4oCTIGR5c2tyZXRueSB3eWdsxIVkLCBuaWUgZG9taW51amUgbmFkIGd3aWF6ZGthbWkgKi9cbi5zZXJ2aWNlLWxpc3QgLnNlcnZpY2UtcmF0aW5nLW51bWJlciB7XG4gICAgY29sb3I6ICNhYWE7ICAgICAgICAgICAgICAgICAgICAgIC8qIEphc25vc3phcnkgb2RjaWXFhCDigJMgbGljemJhIG9jZW4gamVzdCB3aWRvY3puYSwgYWxlIG5pZSBwcnp5Y2nEhWdhIHd6cm9rdSAqL1xuICAgIGZvbnQtc2l6ZTogMC45MmVtOyAgICAgICAgICAgICAgICAvKiBQb21uaWVqc3pvbnkgdGVrc3Qg4oCTIGxpY3piYSBvY2VuIHRvIHR5bGtvIGluZm9ybWFjamEgcG9tb2NuaWN6YSAqL1xuXG4gICAgLypcbiAgICAgICAgLSBgY29sb3I6ICNhYWFgIOKAkyBCYXJkem8gamFzbmEgc3phcm/Fm8SHOyBsaWN6YmEgb2NlbiBqZXN0IHN1YnRlbG5hIGkgbmllIGtvbmt1cnVqZSB6IGfFgsOzd255bSB0ZWtzdGVtLlxuICAgICAgICAtIGBmb250LXNpemU6IDAuOTJlbWAg4oCTIFd5cmHFum5pZSBtbmllanN6eSByb3ptaWFyIG5pxbwgcmVzenRhIHRla3N0dSDigJMgcG9ka3JlxZtsYSwgxbxlIHRvIGluZm9ybWFjamEgZG9kYXRrb3dhLlxuICAgICovXG59XG5cbi8qIDEuIEtvbXBha3Qg4oCTIG5ham1uaWVqc3plIGVrcmFueSAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDU0MHB4KSB7XG4gIC5uYXYtdGFicyB7XG4gICAgZm9udC1zaXplOiAwLjgwZW0gIWltcG9ydGFudDtcbiAgICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XG4gIH1cbiAgLm5hdi10YWJzIC5uYXYtbGluayB7XG4gICAgcGFkZGluZzogMC4xMGVtIDAuMjRlbSAhaW1wb3J0YW50O1xuICAgIGZvbnQtc2l6ZTogMC43OGVtICFpbXBvcnRhbnQ7XG4gICAgbWluLXdpZHRoOiA0NnB4ICFpbXBvcnRhbnQ7XG4gICAgbGluZS1oZWlnaHQ6IDEuMDEgIWltcG9ydGFudDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQ7XG4gIH1cbiAgLm5hdi10YWJzIC5mYSxcbiAgLm5hdi10YWJzIC5mYXMsXG4gIC5uYXYtdGFicyAuZmEtc29saWQge1xuICAgIGZvbnQtc2l6ZTogMC43MGVtICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAwLjA0ZW0gIWltcG9ydGFudDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogLTJweDtcbiAgfVxufVxuXG4vKiAyLiBQcnpld2lqYW5lIHpha8WCYWRraTogdGFibGV0eSwgbWHFgmUgbGFwdG9weSwgxZtyZWRuaWUgZWtyYW55ICovXG5AbWVkaWEgKG1pbi13aWR0aDogNTQxcHgpIGFuZCAobWF4LXdpZHRoOiAxMjAwcHgpIHtcbiAgLm5hdi10YWJzIHtcbiAgICBvdmVyZmxvdy14OiBhdXRvICFpbXBvcnRhbnQ7XG4gICAgZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcbiAgICAtd2Via2l0LW92ZXJmbG93LXNjcm9sbGluZzogdG91Y2g7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmb250LXNpemU6IDFlbTtcbiAgfVxuICAubmF2LXRhYnMgLm5hdi1saW5rIHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwICFpbXBvcnRhbnQ7XG4gICAgbWluLXdpZHRoOiA4OHB4ICFpbXBvcnRhbnQ7XG4gICAgcGFkZGluZzogMC40NWVtIDFlbSAhaW1wb3J0YW50O1xuICAgIGZvbnQtc2l6ZTogMWVtICFpbXBvcnRhbnQ7XG4gIH1cbiAgLm5hdi10YWJzIC5mYSxcbiAgLm5hdi10YWJzIC5mYXMsXG4gIC5uYXYtdGFicyAuZmEtc29saWQge1xuICAgIGZvbnQtc2l6ZTogMC44OGVtICFpbXBvcnRhbnQ7XG4gICAgbWFyZ2luLXJpZ2h0OiAwLjE1ZW0gIWltcG9ydGFudDtcbiAgfVxufVxuXG4vKiBPcGFrb3dhbmllIGRsYSBpa29uIHcgc3RvcGNlIOKAkyB6YXBld25pYSByw7N3bnkgcm96a8WCYWQgaSBpZGVhbG5lIHd5csOzd25hbmllIHcgcGlvbmllICovXG4uaWNvbi1ib3gge1xuICAgIHdpZHRoOiAyNHB4OyAgICAgICAgICAgICAgIC8qIFN0YcWCYSBzemVyb2tvxZvEhyDigJMga2HFvGRhIGlrb25hIHpham11amUgZG9rxYJhZG5pZSB0eWxlIHNhbW8gbWllanNjYSB3IHBvemlvbWllICovXG4gICAgaGVpZ2h0OiAyNHB4OyAgICAgICAgICAgICAgLyogU3RhxYJhIHd5c29rb8WbxIcg4oCTIHphY2hvd3VqZSBzcMOzam55IHJ5dG0gbWnEmWR6eSBrb2xlam55bWkgd2llcnN6YW1pICovXG4gICAgZmxleC1zaHJpbms6IDA7ICAgICAgICAgICAgLyogWmFwb2JpZWdhIHp3xJnFvGFuaXUgc2nEmSBrb2x1bW55IHogaWtvbsSFIG5hIG1uaWVqc3p5Y2ggZWtyYW5hY2ggKi9cbiAgICBkaXNwbGF5OiBmbGV4OyAgICAgICAgICAgICAvKiBVbW/FvGxpd2lhIGNlbnRyb3dhbmllIHphd2FydG/Fm2NpIHByenkgcG9tb2N5IEZsZXhib3hhICovXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgICAgICAgLyogUGlvbm93ZSB3ecWbcm9ka293YW5pZSBpa29ueSB3IHJhbWFjaCBwdWRlxYJrYSAqL1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsgLyogSWtvbmEgd3lyw7N3bmFuYSBkbyBsZXdlaiBrcmF3xJlkemkg4oCTIG5hdHVyYWxuZSB1c3Rhd2llbmllIGRsYSBqxJl6eWvDs3cgTFRSICovXG4gICAgbGluZS1oZWlnaHQ6IDE7ICAgICAgICAgICAgLyogVXN1d2EgZG9kYXRrb3d5IG9kc3TEmXAgd3luaWthasSFY3kgeiBtZXRyeWtpIGN6Y2lvbmtpIEZvbnQgQXdlc29tZSAqL1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgICAgICAgIC8qIFBvendhbGEgbmEgZHJvYm7EhSwgcHJlY3l6eWpuxIUga29yZWt0xJkgcG/Fgm/FvGVuaWEgaWtvbnkgKi9cbiAgICBwYWRkaW5nLWJvdHRvbTogNXB4OyAgICAgICAvKiBQb2Rub3NpIGlrb27EmSBsZWtrbyBrdSBnw7NyemUgKi9cblxuICAgIC8qXG4gICAgICAgIC0gYHdpZHRoOiAyNHB4YCDigJMgSmVkbm9saXRhIHN6ZXJva2/Fm8SHIGtvbHVtbnkgeiBpa29uxIU7IHRla3N0IG9ib2sgemF3c3plIHphY3p5bmEgc2nEmSB3IHRlaiBzYW1laiBwb3p5Y2ppLlxuICAgICAgICAtIGBoZWlnaHQ6IDI0cHhgIOKAkyBTdGHFgmEgd3lzb2tvxZvEhyByYW1raSDigJMgdHdvcnp5IHdpenVhbG5pZSByw7N3bnkgcnl0bSBwaW9ub3d5IG1pxJlkenkgd2llcnN6YW1pLlxuICAgICAgICAtIGBmbGV4LXNocmluazogMGAg4oCTIENocm9uaSBrb2x1bW7EmSB6IGlrb27EhSBwcnplZCBrb21wcmVzasSFIHByenkgd8SFc2tpY2ggdWvFgmFkYWNoLlxuICAgICAgICAtIGBkaXNwbGF5OiBmbGV4YCDigJMgVW1vxbxsaXdpYSDFgmF0d2UgY2VudHJvd2FuaWUgemF3YXJ0b8WbY2kgdyBwaW9uaWUgaSBwb3ppb21pZS5cbiAgICAgICAgLSBgYWxpZ24taXRlbXM6IGNlbnRlcmAg4oCTIFd5csOzd251amUgaWtvbsSZIGRva8WCYWRuaWUgbmEgxZtyb2RrdSB3IG9zaSBwaW9ub3dlai5cbiAgICAgICAgLSBganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0YCDigJMgVXN0YXdpYSBpa29uxJkgcG8gbGV3ZWosIHpnb2RuaWUgeiBraWVydW5raWVtIGN6eXRhbmlhLlxuICAgICAgICAtIGBsaW5lLWhlaWdodDogMWAg4oCTIFJlZHVrdWplIOKAnnBvd2lldHJ6ZeKAnSB3b2vDs8WCIGdsaWZ1IEZvbnQgQXdlc29tZSwgemFwZXduaWFqxIVjIHdpenVhbG5lIHd5xZtyb2Rrb3dhbmllLlxuICAgICAgICAtIGBwb3NpdGlvbjogcmVsYXRpdmVgIOKAkyBEYWplIG1vxbxsaXdvxZvEhyBzdWJ0ZWxuZWogcmVndWxhY2ppIHBvxYJvxbxlbmlhIChucC4gYHRvcDogMC41cHhgIGRsYSBwZXJmZWtjeWpuZWdvIGJhbGFuc3UpLlxuICAgICAgICAtIGBwYWRkaW5nLWJvdHRvbTogNXB4O2Ag4oCTIHVub3NpIGlrb25lIGt1IGfDs3J6ZS5cbiAgICAqL1xufVxuXG5cbi8qIExpbmtpIHcgc3RvcGNlIOKAkyBuZXV0cmFsbmUgaSB1cG9yesSFZGtvd2FuZTsgbmllIHphYnVyemFqxIUgd3lyw7N3bmFuaWEgeiBpa29uYW1pICovXG4uZm9vdGVyLWxpc3QgYSB7XG4gICAgcGFkZGluZzogMCAwIDAgMCAhaW1wb3J0YW50OyAgLyogVXN1d2Egd2V3bsSZdHJ6bmUgbWFyZ2luZXN5LCBrdMOzcmUgbW9nxYJ5IHBvd29kb3dhxIcgcHJ6ZXN1bmnEmWNpYSAqL1xuICAgIG1hcmdpbjogMCAhaW1wb3J0YW50OyAgICAgICAgIC8qIExpa3dpZHVqZSBtYXJnaW5lc3kgZG9kYW5lIHByemV6IHpld27EmXRyem5lIHN0eWxlIChucC4gQm9vdHN0cmFwYSkgKi9cbiAgICBsaW5lLWhlaWdodDogaW5oZXJpdDsgICAgICAgICAvKiBQcnplam11amUgd3lzb2tvxZvEhyBsaW5paSB6IGVsZW1lbnR1IG5hZHJ6xJlkbmVnbyBkbGEgc3DDs2pub8WbY2kgcGlvbm93ZWogKi9cbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyAgICAgICAvKiBXeXLDs3dudWplIMWbcm9kZWsgbGlua3Ugd3pnbMSZZGVtIMWbcm9ka2EgaWtvbnkgKi9cbiAgICBkaXNwbGF5OiBpbmxpbmU7ICAgICAgICAgICAgICAvKiBQcnp5d3JhY2Ega2xhc3ljem55LCB0ZWtzdG93eSBjaGFyYWt0ZXIgbGlua8OzdyAoYmV6IGlubGluZS1ibG9jaykgKi9cblxuICAgIC8qXG4gICAgICAgIC0gYHBhZGRpbmc6IDBgIOKAkyBVc3V3YSBkb215xZtsbmUgb2RzdMSZcHksIGt0w7NyZSBtb2fFgnkgcHJ6ZXN1d2HEhyB0ZWtzdCB3IHBpb25pZS5cbiAgICAgICAgLSBgbWFyZ2luOiAwYCDigJMgUmVzZXR1amUgbWFyZ2luZXN5LCBieSB6YWNob3dhxIcgcsOzd25lIHJvem1pZXN6Y3plbmllIHcgb2JyxJliaWUgbGlzdHkuXG4gICAgICAgIC0gYGxpbmUtaGVpZ2h0OiBpbmhlcml0YCDigJMgU3DDs2puYSB3eXNva2/Fm8SHIGxpbmlpOyB0ZWtzdCBpIGlrb255IHPEhSB3eXLDs3duYW5lIGRvIGplZG5laiBvc2kuXG4gICAgICAgIC0gYHZlcnRpY2FsLWFsaWduOiBtaWRkbGVgIOKAkyBJZGVhbG5lIGRvcGFzb3dhbmllIHBpb25vd2UgZG8gxZtyb2RrYSBpa29ueS5cbiAgICAgICAgLSBgZGlzcGxheTogaW5saW5lYCDigJMgTGluayB6YWNob3d1amUgc2nEmSBqYWsgend5a8WCeSB0ZWtzdCwgZHppxJlraSBjemVtdSBjYcWCb8WbxIcgd3lnbMSFZGEgbmF0dXJhbG5pZSBpIHLDs3duby5cbiAgICAqL1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgS0FSVVpFTEEg4oCTIFBPRFNUQVdPV0EgU1RSVUtUVVJBXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKiBQb2plZHluY3p5IHNsYWpkIGthcnV6ZWxpIOKAkyBjennFm2NpbXkgcGFkZGluZyxcbiAgIMW8ZWJ5IHBlxYJuxIUga29udHJvbMSZIG5hZCBvZHN0xJlwYW1pIHByemVqxIXFgiAuc2xpZGUtYm94ICovXG4ja2FydXplbGExIC5jYXJvdXNlbC1pdGVtIHtcbiAgICBwYWRkaW5nOiAwO1xufVxuXG4vKiBHxYLDs3duZSBwdWRlxYJrbyBzbGFqZHUg4oCTIHTFgm8sIGNpZcWELCB3eXNva2/Fm8SHIGkgY2VudHJvd2FuaWUgemF3YXJ0b8WbY2kgKi9cbiNrYXJ1emVsYTEgLnNsaWRlLWJveCB7XG4gICAgYmFja2dyb3VuZDogI2ZmZmZmZjsgICAgICAgICAgICAgICAgICAgICAvKiBKYXNuZSB0xYJvIHBhc3VqxIVjZSBkbyByZXN6dHkgc3Ryb255ICovXG4gICAgcGFkZGluZzogMTJweCAyNHB4OyAgICAgICAgICAgICAgICAgICAgICAvKiBEZWxpa2F0bmUgd2V3bsSZdHJ6bmUgbWFyZ2luZXN5IHdva8OzxYIgdHJlxZtjaSAqL1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgICAgICAgICAgICAgICAgICAgICAgLyogUG9kc3Rhd2EgZGxhIGVsZW1lbnTDs3cgYWJzb2x1dG5pZSBwb3p5Y2pvbm93YW55Y2ggKG5wLiByb2dpKSAqL1xuICAgIHotaW5kZXg6IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV2Fyc3R3YSBiYXpvd2Eg4oCTIG5hZCBuacSFIHBvamF3acSFIHNpxJkgcm9naSBpIHRla3N0ICovXG4gICAgb3ZlcmZsb3c6IGhpZGRlbjsgICAgICAgICAgICAgICAgICAgICAgICAvKiBVa3J5d2EgZXdlbnR1YWxuZSB3eWNob2R6xIVjZSBlbGVtZW50eSBkZWtvcmFjeWpuZSAqL1xuICAgIGJveC1zaGFkb3c6IDAgNHB4IDE1cHggcmdiYSgwLDAsMCwwLjA4KTsgLyogTWnEmWtraSBjaWXFhCBuYWRhasSFY3kgZWZla3Qg4oCea2FydHnigJ0gKi9cblxuICAgIGhlaWdodDogNDAwcHg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RhxYJhIHd5c29rb8WbxIcgc2xhamR1IOKAkyBzcMOzam55IHd5Z2zEhWQgbWnEmWR6eSBzbGFqZGFtaSAqL1xuICAgIGRpc3BsYXk6IGZsZXg7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRHppxJlraSBmbGV4IG1vxbxlbXkgxYJhdHdvIHd5Y2VudHJvd2HEhyB6YXdhcnRvxZvEhyAqL1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7ICAgICAgICAgICAgICAgICAgICAgLyogQ2VudHJvd2FuaWUgdyBwaW9uaWUgKi9cbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgICAgICAgICAgICAgICAgIC8qIENlbnRyb3dhbmllIHcgcG96aW9taWUgKGRsYSAucm93IHcgxZtyb2RrdSkgKi9cbn1cblxuLypcbiAgICAtIGBiYWNrZ3JvdW5kYCDigJMgYmlhxYJlIHTFgm8gd3lyw7PFvG5pYSBzbGFqZCBuYSB0bGUgc3Ryb255LlxuICAgIC0gYHBhZGRpbmdgIOKAkyBuYWRhamUgc8WCYWLEhSDigJ5yYW1rxJkgcG93aWV0cnpuxIXigJ0gd2V3bsSFdHJ6IHNsYWpkdS5cbiAgICAtIGBwb3NpdGlvbjogcmVsYXRpdmVgIOKAkyBrb25pZWN6bmUgZGxhIGRla29yYWNqaSBhYnNvbHV0bmllIHBvenljam9ub3dhbnljaC5cbiAgICAtIGBvdmVyZmxvdzogaGlkZGVuYCDigJMgbmljIG5pZSDigJ53eXN0YWpl4oCdIHBvemEgcHVkZcWCa28uXG4gICAgLSBgaGVpZ2h0OiA0MDBweGAg4oCTIHVqZWRub2xpY29uYSB3eXNva2/Fm8SHIHXFgmF0d2lhIHByb2pla3QgZ3JhZmljem55LlxuICAgIC0gYGRpc3BsYXk6IGZsZXhgICsgYGFsaWduLWl0ZW1zYCArIGBqdXN0aWZ5LWNvbnRlbnRgIOKAkyB3eWdvZG5lIGNlbnRyb3dhbmllIHphd2FydG/Fm2NpLlxuKi9cblxuLyogT2JyYXogdyBzbGFqZHppZSDigJMgZG9wYXNvd2FueSBkbyB3eXNva2/Fm2NpIHNsYWpkdSxcbiAgIHogemFjaG93YW5pZW0gcHJvcG9yY2ppICovXG4ja2FydXplbGExIC5zbGlkZS1ib3ggLnNsaWRlLWltYWdlIHtcbiAgICBtYXgtaGVpZ2h0OiAzNDBweDsgIC8qIDQwMHB4ICh3eXMuIHNsYWpkdSkgLSBvay4gMsOXMzBweCDigJ5vZGRlY2h14oCdICovXG4gICAgd2lkdGg6IGF1dG87ICAgICAgICAvKiBTemVyb2tvxZvEhyB3eW5pa2EgeiBwcm9wb3Jjamkgb2JyYXprYSAqL1xufVxuXG4vKiBXbsSZdHJ6ZSBzbGFqZHUgKEJvb3RzdHJhcCAucm93KSBtYSB3eXBlxYJuaWHEhyBjYcWCZSBwdWRlxYJrbyAuc2xpZGUtYm94ICovXG4ja2FydXplbGExIC5zbGlkZS1ib3ggPiAucm93IHtcbiAgICB3aWR0aDogMTAwJTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFRZUE9HUkFGSUEgVyBTTElEReKAmUFDSFxuICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyogQmF6b3d5IHN0eWwgdHl0dcWCdSBzbGFqZHUg4oCTIGdyYWRpZW50b3d5LCBlbGVnYW5ja2kgbmFnxYLDs3dlayAqL1xuLnNsaWRlLXRpdGxlIHtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcbiAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7XG4gICAgbGluZS1oZWlnaHQ6IDEuMTU7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjM2I0YjJlLCAjYjQ4YTUyKTtcbiAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogdGV4dDtcbiAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XG5cbiAgICAvKlxuICAgICAgICAtIGBmb250LXdlaWdodDogNjAwYCDigJMgbGVra28gd3ptb2NuaW9ueSwgYWxlIG5pZSDigJ5rcnp5Y3rEhWN54oCdIG5hZ8WCw7N3ZWsuXG4gICAgICAgIC0gYGxldHRlci1zcGFjaW5nOiAwLjVweGAg4oCTIHN1YnRlbG5lIHJvenN1bmnEmWNpZSBsaXRlciBwb3ByYXdpYWrEhWNlIGN6eXRlbG5vxZvEhy5cbiAgICAgICAgLSBHcmFkaWVudCB0ZWtzdHUgbmF3acSFenVqZSBkbyBrb2xvcnlzdHlraSBLb3ppIExhc2VrICh6aWVsZcWEICsgesWCb3RvKS5cbiAgICAgICAgLSBgYmFja2dyb3VuZC1jbGlwOiB0ZXh0YCArIGBjb2xvcjogdHJhbnNwYXJlbnRgIOKAkyBrbGFzeWN6bnkgZWZla3Qg4oCeesWCb3RlZ2/igJ0gbmFnxYLDs3drYS5cbiAgICAqL1xufVxuXG4vKiBOYSBrYXJ1emVsaSAja2FydXplbGExIHd5bXVzemFteSByZXNwb25zeXdueSByb3ptaWFyIHR5dHXFgnU6XG4gICBtbmllanN6eSBuYSBtYcWCeWNoIGVrcmFuYWNoLCB3acSZa3N6eSBuYSBkdcW8eWNoLiAqL1xuLyogRG9tecWbbG5hIHNrYWxhIOKAkyB6YWNob3d1amVteSAqL1xuI2thcnV6ZWxhMSAuc2xpZGUtdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogY2xhbXAoMi40cmVtLCAyLjByZW0gKyAxLjV2dywgNC4ycmVtKTtcbn1cblxuLyogUHJ6eSBzemVyb2tvxZtjaSBkbyA4MDBweCB6bW5pZWpzemFteSBza2FsxJkgdHl0dcWCdSAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDEwMDBweCkge1xuICAgICNrYXJ1emVsYTEgLnNsaWRlLXRpdGxlIHtcbiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDtcbiAgICAgICAgaHlwaGVuczogYXV0bztcbiAgICAgICAgZm9udC1zaXplOiBjbGFtcCgxLjZyZW0sIDEuNHJlbSArIDEuMHZ3LCAzLjByZW0pO1xuICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4ycHg7ICAgLyogeiAwLjUg4oaSIDAuMiwgYmFyZHppZWogendhcnRlICovXG4gICAgICAgIGxpbmUtaGVpZ2h0OiAxLjA1OyAgICAgIC8qIHogMS4xNSDihpIgMS4wNSwgY2lhxZtuaWVqLCBhbGUgbmFkYWwgY3p5dGVsbmllICovXG4gICAgfVxuXG4gICAgI2thcnV6ZWxhMSAuc2xpZGUtbGluayAge1xuICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkO1xuICAgICAgICBoeXBoZW5zOiBhdXRvO1xuICAgIH1cbn1cblxuLyogUG9kdHl0dcWCIOKAkyBkZWxpa2F0bmllanN6eSBncmFkaWVudCBpIGxla2tvIHd6bW9jbmlvbnkgdGVrc3QgKi9cbi5zbGlkZS1zdWJ0aXRsZSB7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuM3B4O1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjNGY0ZjRmLCAjOGI4YjhiKTtcbiAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogdGV4dDtcbiAgICBjb2xvcjogdHJhbnNwYXJlbnQ7XG5cbiAgICAvKlxuICAgICAgICAtIEzFvGVqc3p5IGdyYWRpZW50IChzemFyb8WbY2kpIOKAkyBuaWUga29ua3VydWplIHogdHl0dcWCZW0uXG4gICAgICAgIC0gYGZvbnQtd2VpZ2h0OiA1MDBgIOKAkyB3eXLDs8W8bmllbmllLCBhbGUgYmV6IGNpxJnFvGtvxZtjaSBuYWfFgsOzd2thLlxuICAgICovXG59XG5cbi8qIExpbmsgdyBzbGFqZHppZSDigJMgc3VidGVsbnkgZ3JhZGllbnQgdHlsa28gbmEgdGVrxZtjaWUgKi9cbi5zbGlkZS1saW5rIGEge1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuXG4gICAgLyogZ3JhZGllbnQgd2V3bsSFdHJ6IGxpdGVyICovXG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCAjMmU3ZDMyLCAjNGY4YjRmKTtcbiAgICAtd2Via2l0LWJhY2tncm91bmQtY2xpcDogdGV4dDtcbiAgICAtd2Via2l0LXRleHQtZmlsbC1jb2xvcjogdHJhbnNwYXJlbnQ7XG5cbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMjVzIGVhc2UtaW4tb3V0LCB0ZXh0LWRlY29yYXRpb24tY29sb3IgMC4yNXMgZWFzZS1pbi1vdXQ7XG59XG5cbi8qIEhvdmVyIOKAkyBqYcWbbmllanN6eSBncmFkaWVudCArIHBvZGtyZcWbbGVuaWUgKi9cbi5zbGlkZS1saW5rIGE6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgIzNmYTE0NCwgIzZkY2Y2ZCk7XG4gICAgLXdlYmtpdC1iYWNrZ3JvdW5kLWNsaXA6IHRleHQ7XG4gICAgLXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6IHRyYW5zcGFyZW50O1xuXG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gICAgdGV4dC1kZWNvcmF0aW9uLXRoaWNrbmVzczogMnB4O1xufVxuXG4uc2xpZGUtaW1hZ2Uge1xuICAgIG1pbi1oZWlnaHQ6IDM1MHB4OyAgICAgICAgICAvKiBNaW5pbWFsbmEgd3lzb2tvxZvEhyB6ZGrEmWNpYSAqL1xuICAgIG9iamVjdC1maXQ6IGNvdmVyO1xuICAgIHdpZHRoOiAxMDAlO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgWsWBT1RFIFJPR0kg4oCTIFdBUklBTlQgUEXFgU5ZICguZnJhbWUtY29ybmVycylcbiAgIERsYSBzbGFqZMOzdywgZ2R6aWUgcmFta2Egb2Jlam11amUgd2nEmWtzenkgYmxvayAobnAuIHRla3N0ICsgb2JyYXopXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uZnJhbWUtY29ybmVycyB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlOyAgICAgICAgICAvKiBQdW5rdCBvZG5pZXNpZW5pYSBkbGEgcm9nw7N3ICovXG4gICAgcGFkZGluZzogMjRweCA0OHB4OyAgICAgICAgICAvKiBCZXpwaWVjem55IG9kc3TEmXAgbWnEmWR6eSB0cmXFm2NpxIUgYSByYW1rxIUg4oCTIHBvemlvbW8gd2nEmWNlaiAqL1xuXG4gICAgLypcbiAgICAgICAgLSBgcGFkZGluZzogMjRweCA0OHB4YCDigJMgcGlvbm93byAyNHB4LCBwb3ppb21vIDQ4cHg6XG4gICAgICAgICAgICDigKIgdGVrc3QgaSBvYnJheiBuaWUg4oCea2xlasSFIHNpxJnigJ0gZG8gcm9nw7N3LFxuICAgICAgICAgICAg4oCiIHJvZ2kgcG96b3N0YWrEhSBkZWtvcmFjasSFLCBhIG5pZSBlbGVtZW50ZW0gbmFjaG9kesSFY3ltIG5hIHRyZcWbxIcuXG4gICAgKi9cbn1cblxuLmZyYW1lLWNvcm5lcnM6OmJlZm9yZSxcbi5mcmFtZS1jb3JuZXJzOjphZnRlciB7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDE3MHB4O1xuICAgIGhlaWdodDogMTM1cHg7XG4gICAgYm9yZGVyLWNvbG9yOiAjYzM5YjVhO1xuICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgei1pbmRleDogMTsgIC8qIHJvZ2kgcG9kIHRla3N0ZW0sIGFsZSBuYWQgdMWCZW0gKi9cblxuICAgIC8qXG4gICAgICAgIC0gU3plcm9rb8WbxIcgaSB3eXNva2/Fm8SHIGRvYnJhbmUgcG9kIHdpxJlrc3p5IGJsb2sgKHRla3N0ICsgemRqxJljaWUpLlxuICAgICAgICAtIGBwb2ludGVyLWV2ZW50czogbm9uZWAg4oCTIHJvZ2kgbmlnZHkgbmllIGJsb2t1asSFIGtsaWtuacSZxIcgdyBsaW5raS5cbiAgICAqL1xufVxuXG4vKiBHw7NybnkgbGV3eSByw7NnICovXG4uZnJhbWUtY29ybmVyczo6YmVmb3JlIHtcbiAgICB0b3A6IDE2cHg7XG4gICAgbGVmdDogMTZweDtcbiAgICBib3JkZXItd2lkdGg6IDJweCAwIDAgMnB4O1xufVxuXG4vKiBEb2xueSBwcmF3eSByw7NnICovXG4uZnJhbWUtY29ybmVyczo6YWZ0ZXIge1xuICAgIGJvdHRvbTogMTZweDtcbiAgICByaWdodDogMTZweDtcbiAgICBib3JkZXItd2lkdGg6IDAgMnB4IDJweCAwO1xufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgWsWBT1RFIFJPR0kg4oCUIFRSSVBMRSBCT1RUT00gKC5mcmFtZS1jb3JuZXJzLXRyaXBsZS1ib3R0b20pXG4gICBHw7NyYS1sZXdhICsgZMOzxYItcHJhd2EgKyBkw7PFgi1sZXdhXG4gICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4uZnJhbWUtY29ybmVycy10cmlwbGUtYm90dG9tIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgcGFkZGluZzogMjRweCA0OHB4OyAgLyogQmV6cGllY3pueSBvZHN0xJlwLCBzcMOzam55IHogaW5ueW1pIHdhcmlhbnRhbWkgKi9cblxuICAgIC8qXG4gICAgICAgIC0gVGVuIHNhbSBwYWRkaW5nIGNvIHcgLmZyYW1lLWNvcm5lcnMg4oCTIHNww7Nqbm/Fm8SHIHdpenVhbG5hLlxuICAgICAgICAtIFB1bmt0IG9kbmllc2llbmlhIGRsYSB3c3p5c3RraWNoIHJvZ8Ozdy5cbiAgICAqL1xufVxuXG4vKiAtLS0gUsOzZyAxIOKAlCBHw5NSQSBMRVdBIChqYWsgd2Ugd3pvcmN1KSAtLS0gKi9cbi5mcmFtZS1jb3JuZXJzLXRyaXBsZS1ib3R0b206OmJlZm9yZSB7XG4gICAgY29udGVudDogXCJcIjtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgd2lkdGg6IDE3MHB4O1xuICAgIGhlaWdodDogMTM1cHg7XG4gICAgYm9yZGVyLWNvbG9yOiAjYzM5YjVhO1xuICAgIGJvcmRlci1zdHlsZTogc29saWQ7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgei1pbmRleDogMTtcblxuICAgIHRvcDogMTZweDtcbiAgICBsZWZ0OiAxNnB4O1xuICAgIGJvcmRlci13aWR0aDogMnB4IDAgMCAycHg7XG59XG5cbi8qIC0tLSBSw7NnIDIg4oCUIETDk8WBIFBSQVdBIChqYWsgd2Ugd3pvcmN1KSAtLS0gKi9cbi5mcmFtZS1jb3JuZXJzLXRyaXBsZS1ib3R0b206OmFmdGVyIHtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMTcwcHg7XG4gICAgaGVpZ2h0OiAxMzVweDtcbiAgICBib3JkZXItY29sb3I6ICNjMzliNWE7XG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiAxO1xuXG4gICAgYm90dG9tOiAxNnB4O1xuICAgIHJpZ2h0OiAxNnB4O1xuICAgIGJvcmRlci13aWR0aDogMCAycHggMnB4IDA7XG59XG5cbi8qIC0tLSBSw7NnIDMg4oCUIETDk8WBIExFV0EgKE5PV1kpIC0tLSAqL1xuLmZyYW1lLWNvcm5lcnMtdHJpcGxlLWJvdHRvbSAuY29ybmVyLWV4dHJhLWJvdHRvbTo6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIlwiO1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB3aWR0aDogMTcwcHg7XG4gICAgaGVpZ2h0OiAxMzVweDtcbiAgICBib3JkZXItY29sb3I6ICNjMzliNWE7XG4gICAgYm9yZGVyLXN0eWxlOiBzb2xpZDtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB6LWluZGV4OiAxO1xuXG4gICAgYm90dG9tOiAxNnB4O1xuICAgIGxlZnQ6IDE2cHg7XG4gICAgYm9yZGVyLXdpZHRoOiAwIDAgMnB4IDJweDtcblxuICAgIC8qXG4gICAgICAgIC0gRG9kYXRrb3d5IGRvbG55IGxld3kgcsOzZyDigJMgdHdvcnp5IHVrxYJhZDpcbiAgICAgICAgICBnw7NyYS1sZXdhICsgZMOzxYItbGV3YSArIGTDs8WCLXByYXdhLlxuICAgICAgICAtIFBvem9zdGFqZW15IHcgdHltIHNhbXltIHN0eWx1IGNvIC5mcmFtZS1jb3JuZXJzLlxuICAgICovXG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICBaxYFPVEUgUk9HSSDigJMgV0FSSUFOVCBURUtTVE9XWSAoLmZyYW1lLWNvcm5lcnMtdGV4dClcbiAgIERvIHNsYWpkdSAyIOKAkyByYW1rYSBvYmVqbXVqZSB0eWxrbyBrb2x1bW7EmSB6IHRla3N0ZW1cbiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi5mcmFtZS1jb3JuZXJzLXRleHQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgICAgICAgICAgLyogUG9kc3Rhd2EgZGxhIHBzZXVkby1lbGVtZW50w7N3ICovXG4gICAgcGFkZGluZzogMjRweCA0OHB4OyAgICAgICAgICAvKiBOaWVjbyBtbmllanN6eSBwYWRkaW5nIHBpb25vd3ksIHdpxJlrc3p5IHBvemlvbXkgKi9cblxuICAgIC8qXG4gICAgICAgIC0gYHBhZGRpbmc6IDI0cHggNDhweGAg4oCTIHBpb25vd28gZGVsaWthdG5pZSBtbmllaiwgcG96aW9tbyB3acSZY2VqOlxuICAgICAgICAgICAg4oCiIHRla3N0IHpvc3RhamUgd3lyYcW6bmllIG9kc3VuacSZdHkgb2Qgcm9nw7N3LFxuICAgICAgICAgICAg4oCiIGVmZWt0IOKAnnByZW1pdW3igJ0gZHppxJlraSBzemVyc3p5bSBtYXJnaW5lc29tIGJvY3pueW0sXG4gICAgICAgICAgICDigKIgYmV6IHJ5enlrYSBuYWNob2R6ZW5pYSByYW1raSBuYSB0ZWtzdCB3IHRyeWJpZSByZXNwb25zeXdueW0uXG4gICAgKi9cbn1cblxuLmZyYW1lLWNvcm5lcnMtdGV4dDo6YmVmb3JlLFxuLmZyYW1lLWNvcm5lcnMtdGV4dDo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6IFwiXCI7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHdpZHRoOiA5MHB4OyAgIC8qIE1uaWVqc3plIHd5bWlhcnkg4oCTIGRvcGFzb3dhbmUgZG8gYmxva3UgdGVrc3R1ICovXG4gICAgaGVpZ2h0OiA2MHB4O1xuICAgIGJvcmRlci1jb2xvcjogI2MzOWI1YTtcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgIHotaW5kZXg6IDM7ICAgIC8qIExla2tpZSBwb2RiaWNpZSB3YXJzdHd5IOKAkyBuYWQgdMWCZW0sIGFsZSB0ZWtzdCBkemnEmWtpIHBhZGRpbmdvd2kgbmllIHdjaG9kemkgdyByb2dpICovXG5cbiAgICAvKlxuICAgICAgICAtIE1uaWVqc3p5IHByb3N0b2vEhXQgbmnFvCB3IC5mcmFtZS1jb3JuZXJzIOKAkyBkemnEmWtpIHRlbXUgcmFta2FcbiAgICAgICAgICB3eWdsxIVkYSBzdWJ0ZWxuaWUgcHJ6eSBzYW15bSB0ZWvFm2NpZS5cbiAgICAqL1xufVxuXG4vKiBHw7NybnkgbGV3eSByw7NnIHdhcmlhbnR1IHRla3N0b3dlZ28gKi9cbi5mcmFtZS1jb3JuZXJzLXRleHQ6OmJlZm9yZSB7XG4gICAgdG9wOiAxMnB4O1xuICAgIGxlZnQ6IDEycHg7XG4gICAgYm9yZGVyLXdpZHRoOiAycHggMCAwIDJweDtcbn1cblxuLyogRG9sbnkgcHJhd3kgcsOzZyB3YXJpYW50dSB0ZWtzdG93ZWdvICovXG4uZnJhbWUtY29ybmVycy10ZXh0OjphZnRlciB7XG4gICAgYm90dG9tOiAxMnB4O1xuICAgIHJpZ2h0OiAxMnB4O1xuICAgIGJvcmRlci13aWR0aDogMCAycHggMnB4IDA7XG59XG5cblxuLm5hdmJhciAuZ29vZ2xlLWNzZS1uYXYge1xuICB3aWR0aDogMzAwcHggIWltcG9ydGFudDsgLyogU3RhxYJhIHN6ZXJva2/Fm8SHIHd5c3p1a2l3YXJraSB3IG5hdmJhcnplICovXG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA5OTBweCkge1xuICAubmF2YmFyIC5nb29nbGUtY3NlLW5hdiB7XG4gICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDtcbiAgICBtYXJnaW4tbGVmdDogMCAhaW1wb3J0YW50OyAvKiByZXNldCBtcy1hdXRvICovXG4gIH1cbn1cblxuLypcbiAgICAtIGBwYWRkaW5nOiAwYCDigJMgdXN1bmnEmWNpZSBkb215xZtsbnljaCBvZHN0xJlww7N3IEdvb2dsZSBDU0UsXG4gICAgLSB6YXBvYmllZ2Eg4oCecm96cHljaGFuaXXigJ0gbmF2YmFydSB3IHBpb25pZS5cbiovXG4uZ3NjLWNvbnRyb2wtY3NlIHtcbiAgcGFkZGluZzogMDtcbn1cblxuLm5hdmJhciAuZ29vZ2xlLWNzZS1uYXYgLmdzYy1jb250cm9sLWNzZSxcbi5uYXZiYXIgLmdvb2dsZS1jc2UtbmF2IC5nc2MtY29udHJvbC1jc2UtcGwsXG4ubmF2YmFyIC5nb29nbGUtY3NlLW5hdiAuZ3NjLXNlYXJjaC1ib3gsXG4ubmF2YmFyIC5nb29nbGUtY3NlLW5hdiAuZ3NjLXNlYXJjaC1ib3gtdG9vbHMge1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OyAvKiBVc3V3YSDigJ5wbGFtxJnigJ0gdMWCYSBHb29nbGUgQ1NFLCBhYnkga29tcG9uZW50IHN0YXBpYcWCIHNpxJkgeiBncmFkaWVudGVtIGJlbGtpLiAqL1xuICBib3JkZXI6IDAgIWltcG9ydGFudDsgLyogQ3p5xZtjaSBkb2RhdGtvd2Ugb2JyeXN5IGdlbmVyb3dhbmUgcHJ6ZXogd2lkZ2V0IEdvb2dsZS4gKi9cbn1cblxuLyogUGFzZWsgbmF3aWdhY2ppOiBvZGNodWR6b25lIHBvbGUgR29vZ2xlIENTRSBiZXogemplxbxkxbxhbmlhIHcgZMOzxYIgKi9cbi5uYXZiYXIgLmdvb2dsZS1jc2UtbmF2IHRhYmxlLmdzYy1zZWFyY2gtYm94IHRkIHtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZSAhaW1wb3J0YW50OyAvKiBQaW9ub3dlIGNlbnRyb3dhbmllIHphd2FydG/Fm2NpICovXG4gIHBhZGRpbmctdG9wOiAwICFpbXBvcnRhbnQ7XG4gIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XG5cbiAgLypcbiAgICAgIC0gYHZlcnRpY2FsLWFsaWduOiBtaWRkbGVgIOKAkyBrbHVjem93ZSwgxbxlYnkgaW5wdXQgbmllIOKAnm9wYWRhxYLigJ0sXG4gICAgICAtIHplcm93eSBwYWRkaW5nIOKAkyBicmFrIG5pZWtvbnRyb2xvd2FueWNoIHByemVzdW5pxJnEhyB3IGTDs8WCLlxuICAqL1xufVxuXG4vKiBPYnVkb3dhIHBvbGEgaW5wdXQg4oCTIG9kcG93aWFkYSB6YSByYW1rxJksIHd5c29rb8WbxIcgaSBjZW50cm93YW5pZSAqL1xuLm5hdmJhciAuZ29vZ2xlLWNzZS1uYXYgLmdzYy1pbnB1dC1ib3gge1xuICBib3JkZXI6IDFweCBzb2xpZCAjMDUwNTA1ICFpbXBvcnRhbnQ7IC8qIENpZW5rYSwgd3lyYcW6bmEgcmFta2EgKi9cbiAgYm9yZGVyLXJhZGl1czogNnB4ICFpbXBvcnRhbnQ7ICAgICAgICAvKiBEZWxpa2F0bmllIHphb2tyxIVnbG9uZSByb2dpICovXG4gIGJhY2tncm91bmQ6ICNmZmYgIWltcG9ydGFudDsgICAgICAgICAgLyogUGV3bmUgYmlhxYJlIHTFgm8gcG9kIGlucHV0ICovXG4gIGhlaWdodDogMzRweCAhaW1wb3J0YW50OyAgICAgICAgICAgICAgLyogV3lzb2tvxZvEhyBzcMOzam5hIHogbmF2YmFyICovXG5cbiAgZGlzcGxheTogZmxleCAhaW1wb3J0YW50O1xuICBhbGlnbi1pdGVtczogY2VudGVyICFpbXBvcnRhbnQ7ICAgICAgIC8qIFBpb25vd2UgY2VudHJvd2FuaWUgaW5wdXRhICovXG5cbiAgcGFkZGluZzogMCAxMHB4ICFpbXBvcnRhbnQ7ICAgICAgICAgICAvKiBPZGRlY2ggdGVrc3R1IG9kIHJhbWtpICovXG4gIG92ZXJmbG93OiB2aXNpYmxlICFpbXBvcnRhbnQ7ICAgICAgICAgLyogWmFwb2JpZWdhIG9iY2luYW5pdSB6YXdhcnRvxZtjaSAqL1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94ICFpbXBvcnRhbnQ7XG5cbiAgLypcbiAgICAgIC0gd3JhcHBlciBwcnplam11amUgcmFta8SZIChpbnB1dCBqZXN0IOKAnmdvxYJ54oCdKSxcbiAgICAgIC0gYGZsZXggKyBhbGlnbi1pdGVtczpjZW50ZXJgIGd3YXJhbnR1amUgc3RhYmlsbmUgd3nFm3JvZGtvd2FuaWUsXG4gICAgICAtIHBhZGRpbmcgbmEgd3JhcHBlcnplID0gbGVwc3phIGtvbnRyb2xhIGxheW91dHUgbmnFvCBuYSBpbnB1dC5cbiAgKi9cbn1cblxuLyogUG9sZSBpbnB1dCDigJMgd3lwZcWCbmlhIG9idWRvd8SZLCBiZXogd8WCYXNueWNoIGRla29yYWNqaSAqL1xuLm5hdmJhciAuZ29vZ2xlLWNzZS1uYXYgaW5wdXQuZ3NjLWlucHV0IHtcbiAgYm9yZGVyOiAwICFpbXBvcnRhbnQ7XG4gIG91dGxpbmU6IDAgIWltcG9ydGFudDtcbiAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OyAgICAgICAgICAgLyogUGXFgm5lIOKAnm9kY2h1ZHplbmll4oCdIGlucHV0YSAqL1xuXG4gIGhlaWdodDogMTAwJSAhaW1wb3J0YW50OyAgICAgICAgICAgICAgIC8qIERvcGFzb3dhbmllIGRvIHdyYXBwZXJhICovXG4gIGxpbmUtaGVpZ2h0OiAzNHB4ICFpbXBvcnRhbnQ7ICAgICAgICAgIC8qIE9wdHljem5lIGNlbnRyb3dhbmllIHRla3N0dSAqL1xuICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xuXG4gIG1hcmdpbjogMCAhaW1wb3J0YW50O1xuICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7ICAgICAgICAgICAgICAgICAvKiBQYWRkaW5nIG9ic8WCdWd1amUgd3JhcHBlciAqL1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94ICFpbXBvcnRhbnQ7XG5cbiAgLypcbiAgICAgIC0gYnJhayByYW1raSBpIGNpZW5pYSDihpIgcGXFgm5hIGtvbnRyb2xhIHN0eWx1IHByemV6IHdyYXBwZXIsXG4gICAgICAtIGBoZWlnaHQ6IDEwMCVgID0gYnJhayByb3pqYXpkw7N3IHBpb25vd3ljaCxcbiAgICAgIC0gYGxpbmUtaGVpZ2h0YCBzdGFiaWxpenVqZSBwb3p5Y2rEmSB0ZWtzdHUgdyByw7PFvG55Y2ggcHJ6ZWdsxIVkYXJrYWNoLlxuICAqL1xufVxuXG4vKiBLb250ZW5lciDigJMgcG96aW9tZSB1c3Rhd2llbmllIGlrb24gc29jaWFsIG1lZGlhICovXG4uc29jaWFsLXdyYXBwZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7ICAgICAgICAgICAgICAgICAgICAvKiBVa8WCYWQgcG96aW9teSAoZmxleGJveCkgKi9cbiAgICBnYXA6IDE4cHg7ICAgICAgICAgICAgICAgICAgICAgICAgLyogU3RhxYJ5IG9kc3TEmXAgbWnEmWR6eSBpa29uYW1pICovXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjsgICAgICAgICAgICAgIC8qIFd5csOzd25hbmllIHcgb3NpIHBpb25vd2VqICovXG4gICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0OyAgICAgIC8qIElrb255IHd5csOzd25hbmUgZG8gbGV3ZWogKi9cblxuICAgIC8qXG4gICAgICAgIC0gYGRpc3BsYXk6IGZsZXhgIOKGkiBwcm9zdGUsIHN0YWJpbG5lIHVzdGF3aWVuaWUgb2JvayBzaWViaWUsXG4gICAgICAgIC0gYGdhcGAg4oaSIGtvbnRyb2xvd2FueSBvZHN0xJlwIGJleiB1xbx5d2FuaWEgbWFyZ2luZXPDs3csXG4gICAgICAgIC0gYGFsaWduLWl0ZW1zOiBjZW50ZXJgIOKGkiBicmFrIOKAnnDFgnl3YW5pYeKAnSBpa29uIHByenkgcsOzxbxueWNoIGZvbnRhY2gsXG4gICAgICAgIC0gYGp1c3RpZnktY29udGVudGAg4oaSIMWCYXR3YSB6bWlhbmEgbmEgYGNlbnRlcmAsIGplxZtsaSBjaGNlbXkgd3nFm3JvZGtvd2HEhy5cbiAgICAqL1xufVxuXG5cbi8qIExpbmsg4oCTIGJhemEgZGxhIGlrb255ICovXG4uc29jaWFsLWljb24ge1xuICAgIGZvbnQtc2l6ZTogMjZweDsgICAgICAgICAgICAgICAgICAvKiBDenl0ZWxueSwgYWxlIG5pZW5hY2hhbG55IHJvem1pYXIgKi9cbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7ICAgICAgICAgICAgLyogQnJhayBwb2RrcmXFm2xlbmlhICovXG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7ICAgICAgICAgICAgIC8qIFN0YWJpbG5lIGNlbnRyb3dhbmllIGlrb24gKi9cbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuXG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZSxcbiAgICAgICAgICAgICAgICBvcGFjaXR5IDAuMnMgZWFzZTsgICAgIC8qIFDFgnlubnksIGVsZWdhbmNraSBob3ZlciAqL1xuXG4gICAgLypcbiAgICAgICAgLSBgaW5saW5lLWZsZXhgIOKGkiBwb3p3YWxhIGtvbnRyb2xvd2HEhyBwb3p5Y2rEmSBpa29ueSxcbiAgICAgICAgLSBicmFrIGRla29yYWNqaSDihpIgY3p5c3RhIGZvcm1hLFxuICAgICAgICAtIHVtaWFya293YW55IHJvem1pYXIg4oaSIGVzdGV0eWthIGhvdGVsb3dhLCBuaWUg4oCec29jaWFsIG1lZGlhIHdhbGzigJ0uXG4gICAgKi9cbn1cblxuXG4vKiBJa29uYSBGYWNlYm9va2Eg4oCTIG9maWNqYWxueSBrb2xvciBtYXJraSAqL1xuLnNvY2lhbC1pY29uLmZhY2Vib29rIHtcbiAgICBjb2xvcjogIzE4NzdGMjsgICAgICAgICAgICAgICAgICAgLyogT2ZpY2phbG55IG5pZWJpZXNraSBrb2xvciBGYWNlYm9va2EgKi9cblxuICAgIC8qXG4gICAgICAgIC0gS29sb3IgemdvZG55IHogYnJhbmRib29raWVtIEZCLFxuICAgICAgICAtIG5hZHBpc3VqZSBld2VudHVhbG5lIGR6aWVkemljemVuaWUgeiBgLnN0eWxlMSBhYC5cbiAgICAqL1xufVxuXG5cbi8qIElrb25hIEluc3RhZ3JhbWEg4oCTIHVwcm9zemN6b255IGtvbG9yIG1hcmtpICovXG4uc29jaWFsLWljb24uaW5zdGFncmFtIHtcbiAgICBjb2xvcjogI0U0NDA1RjsgICAgICAgICAgICAgICAgICAgLyogT2ZpY2phbG55IHLDs8W8b3d5IGtvbG9yIEluc3RhZ3JhbWEgKi9cblxuICAgIC8qXG4gICAgICAgIC0gVcW8eXR5IGfFgsOzd255IGtvbG9yIG1hcmtpIHphbWlhc3QgZ3JhZGllbnR1LFxuICAgICAgICAtIHphY2hvd3VqZSBlbGVnYW5jasSZIChncmFkaWVudCBiecWCYnkgemJ5dCBhZ3Jlc3l3bnkgd2l6dWFsbmllKS5cbiAgICAqL1xufVxuXG5cbi8qIEVmZWt0IGhvdmVyIOKAkyBzdWJ0ZWxuZSBwb2RrcmXFm2xlbmllIGludGVyYWtjamkgKi9cbi5zb2NpYWwtaWNvbjpob3ZlciB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxLjE1KTsgICAgICAgICAgIC8qIERlbGlrYXRuZSBwb3dpxJlrc3plbmllICovXG4gICAgb3BhY2l0eTogMC44NTsgICAgICAgICAgICAgICAgICAgIC8qIExla2tpZSBwcnp5Z2FzemVuaWUgKi9cblxuICAgIC8qXG4gICAgICAgIC0gYHNjYWxlYCDihpIgY3p5dGVsbnkgc3lnbmHFgiBpbnRlcmFrY2ppLFxuICAgICAgICAtIGBvcGFjaXR5YCDihpIgbWnEmWtraSBlZmVrdCB6YW1pYXN0IHptaWFueSBrb2xvcnUsXG4gICAgICAgIC0gYnJhayBhZ3Jlc3l3bnljaCBhbmltYWNqaSDihpIgc3DDs2pub8WbxIcgeiBrbGltYXRlbSBLb3ppZWdvIExhc2t1LlxuICAgICovXG59XG5cbi8qIExpc3RhIHcgc3RvcGNlIOKAkyBwb2R6aWHFgiBuYSAyIGtvbHVtbnkgKi9cbi5mb290ZXItbGlzdC1jb2x1bW5zIHtcbiAgICBjb2x1bW4tY291bnQ6IDI7ICAgICAgICAgICAgICAgIC8qIER3aWUga29sdW1ueSAqL1xuICAgIGNvbHVtbi1nYXA6IDMwcHg7ICAgICAgICAgICAgICAgLyogT2RzdMSZcCBtacSZZHp5IGtvbHVtbmFtaSAqL1xuICAgIHBhZGRpbmctbGVmdDogMDtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuXG4gICAgLypcbiAgICAgICAgLSBgY29sdW1uLWNvdW50OiAyYCDihpIgYXV0b21hdHljem55IHBvZHppYcWCIG5hIGR3aWUga29sdW1ueSxcbiAgICAgICAgLSBicmFrIGluZ2VyZW5jamkgdyBIVE1MLFxuICAgICAgICAtIHLDs3duZSB3eXBlxYJuaWVuaWUgcHJ6ZXN0cnplbmkgdyBrb2x1bW5pZSxcbiAgICAgICAgLSBkb2JyZSByb3p3acSFemFuaWUgcHJ6eSB6bWllbm5laiBsaWN6YmllIGxpbmvDs3cgKG5wLiBibG9nIHR5bGtvIFBMKS5cbiAgICAqL1xufVxuXG4vKiBFbGVtZW50IGxpc3R5IOKAkyB1bmlrYW15IMWCYW1hbmlhIG1pxJlkenkga29sdW1uYW1pICovXG4uZm9vdGVyLWxpc3QtY29sdW1ucyBsaSB7XG4gICAgYnJlYWstaW5zaWRlOiBhdm9pZDsgICAgICAgICAgICAvKiBOaWUgcm96ZHppZWxhIHBvamVkeW5jemVnbyBsaW5rdSAqL1xuICAgIG1hcmdpbi1ib3R0b206IDJweDtcblxuICAgIC8qXG4gICAgICAgIC0gYGJyZWFrLWluc2lkZTogYXZvaWRgIOKGkiB6YXBvYmllZ2Egcm96amVjaGFuaXUgbGlua3UsXG4gICAgICAgIC0gbWHFgnkgbWFyZ2luZXMg4oaSIGzFvGVqc3p5IHdpenVhbG5pZSBmb290ZXIuXG4gICAgKi9cbn1cblxuLyogV2Vyc2phIG1vYmlsbmEg4oCTIGtvbHVtbnkgdyBzdG9wY2UgdyBqZWRuZWoga29sdW1uaWUgKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkge1xuICAgIC5mb290ZXItbGlzdC1jb2x1bW5zIHtcbiAgICAgICAgY29sdW1uLWNvdW50OiAxOyAvKiBXeW11c3phIGplZG7EhSBrb2x1bW7EmSDigJMgbGVwc3phIGN6eXRlbG5vxZvEhyBuYSBtYcWCeWNoIGVrcmFuYWNoICovXG4gICAgfVxuXG4gICAgLypcbiAgICAgICAgLSBgbWF4LXdpZHRoOiA3NjhweGAg4oCTIHN0YW5kYXJkb3d5IGJyZWFrcG9pbnQgZGxhIHRhYmxldMOzdyBpIHRlbGVmb27Ds3cuXG4gICAgICAgIC0gYGNvbHVtbi1jb3VudDogMWAg4oCTIHVzdXdhIHBvZHppYcWCIG5hIHdpZWxlIGtvbHVtbiwgZHppxJlraSBjemVtdSBsaXN0YSBuaWUgamVzdCDFm2NpxZtuacSZdGEuXG4gICAgKi9cbn1cblxuLyogUHJ6eWNpc2sgcmV6ZXJ3YWNqaSDigJMgd2Vyc2phIHN1YnRlbG5hIChwb3pvc3RhamVteSBwcnp5IGxla2tpZWogZm9ybWllKSAqL1xuLmJ0bi1yZXNlcnZhdGlvbiB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7IC8qIEJyYWsgd3lwZcWCbmllbmlhIOKAkyBlbGVnYW5ja2kgbWluaW1hbGl6bSAqL1xuICAgIGNvbG9yOiAjN2Y3NDU2OyAvKiBTdG9ub3dhbnkgb2xpd2tvd3kga29sb3IgdGVrc3R1ICovXG4gICAgYm9yZGVyOiAxcHggc29saWQgI2FkYTA3ZDsgLyogRGVsaWthdG5hIG9saXdrb3dhIHJhbWthICovXG4gICAgcGFkZGluZzogMC41cmVtIDEuMnJlbTsgLyogTmllY28gbW5pZWpzenkgbmnFvCBrbGFzeWN6bnkgLmJ0biDigJMgbW5pZWogYWdyZXN5d255ICovXG4gICAgYm9yZGVyLXJhZGl1czogMTBweDsgLyogTWnEmWtraWUsIG5vd29jemVzbmUgemFva3LEhWdsZW5pZSAqL1xuICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7IC8qIFDFgnlubmUgcHJ6ZWrFm2NpZSBlZmVrdMOzdyBob3ZlciAqL1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsgLyogTmF0dXJhbG5lIHphY2hvd2FuaWUgdyB1a8WCYWR6aWUgKi9cbn1cblxuLypcbiAgICAtIGBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudGAg4oCTIHphY2hvd3VqZSBsZWtrb8WbxIcgd2l6dWFsbsSFLlxuICAgIC0gYGNvbG9yYCArIGBib3JkZXJgIOKAkyBidWR1asSFIHN1YnRlbG55LCBob3RlbG93eSBrbGltYXQuXG4gICAgLSBgYm9yZGVyLXJhZGl1czogMTBweGAg4oCTIGRlbGlrYXRuYSBlbGVnYW5jamEuXG4gICAgLSBgdHJhbnNpdGlvbmAg4oCTIGJyYWsg4oCec3phcnBhbmlh4oCdIHByenkgaG92ZXIuXG4qL1xuXG4vKiBFZmVrdCBwbyBuYWplY2hhbml1IOKAkyBkeXNrcmV0bmUgcG9ka3JlxZtsZW5pZSAqL1xuLmJ0bi1yZXNlcnZhdGlvbjpob3ZlciB7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7IC8qIFN1YnRlbG5lIHphem5hY3plbmllIGludGVyYWtjamkgKi9cbiAgICBib3JkZXI6IDFweCBzb2xpZCAjYWRhMDdkOyAvKiBaYWNob3d1amVteSBzcMOzam5vxZvEhyB6IHdlcnNqxIUgYmF6b3fEhSAqL1xuICAgIGNvbG9yOiAjN2Y3NDU2OyAvKiBCZXogem1pYW55IGtvbG9ydSDigJMgbWluaW1hbGl6bSAqL1xufVxuXG4vKlxuICAgIC0gSG92ZXIgbmllIHptaWVuaWEgdMWCYSDigJMgcG96b3N0YWplbXkgcHJ6eSBzcG9rb2pueW0gZWZla2NpZS5cbiAgICAtIFBvZGtyZcWbbGVuaWUgamVzdCBsZWtraW0gc3lnbmHFgmVtIGtsaWtuacSZY2lhLlxuKi9cblxuXG4vKiBOYWfFgsOzd2VrIHNla2NqaSB3IFBvbGl0eWNlIFByeXdhdG5vxZtjaSAqL1xuLnByaXZhY3ktc2VjdGlvbi10aXRsZSB7XG4gICAgZm9udC13ZWlnaHQ6IDYwMDsgLyogV3lyYcW6bmllanN6ZSB3eXLDs8W8bmllbmllIG5hZ8WCw7N3a2EgKi9cbiAgICBmb250LXNpemU6IDEuMXJlbTsgLyogTmllY28gd2nEmWtzenkgbmnFvCBzdGFuZGFyZG93eSB0ZWtzdCAqL1xuICAgIG1hcmdpbi10b3A6IDMwcHg7IC8qIE9kZGVjaCBuYWQgc2VrY2rEhSAqL1xuICAgIG1hcmdpbi1ib3R0b206IDEwcHg7IC8qIE1uaWVqc3p5IG9kc3TEmXAgcG9kIG5hZ8WCw7N3a2llbSAqL1xuICAgIHBhZGRpbmctYm90dG9tOiA1cHg7IC8qIE1pZWpzY2UgbmEgZG9sbsSFIGxpbmnEmSAqL1xuICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjZTVlNWU1OyAvKiBTdWJ0ZWxuZSBvZGR6aWVsZW5pZSBzZWtjamkgKi9cbiAgICBjb2xvcjogIzVhNTg1ODsgLyogRGVsaWthdG55LCBwcm9mZXNqb25hbG55IHN6YXJ5ICovXG59XG5cbi8qXG4gICAgLSBgYm9yZGVyLWJvdHRvbWAg4oCTIHdpenVhbG55IHNlcGFyYXRvciB0cmXFm2NpLlxuICAgIC0gYG1hcmdpbi10b3BgIOKAkyByeXRtIG1pxJlkenkgc2VrY2phbWkuXG4gICAgLSBgY29sb3JgIOKAkyBzcG9rb2puaWVqc3p5IG5pxbwgY3p5c3RhIGN6ZXLFhC5cbiovXG5cblxuLyogQmxvayB6IGRhbnltaSBmaXJteSB3IFBvbGl0eWNlIFByeXdhdG5vxZtjaSAqL1xuLnByaXZhY3ktY29tcGFueS1ibG9jayB7XG4gICAgY29sb3I6ICM1NjU2NTY7IC8qIE5ldXRyYWxueSwgY3p5dGVsbnkgc3phcnkgKi9cbiAgICBmb250LXNpemU6IDEuMDllbTsgLyogTWluaW1hbG5pZSB3acSZa3N6YSBjemNpb25rYSBkbGEgY3p5dGVsbm/Fm2NpICovXG4gICAgbGluZS1oZWlnaHQ6IDEuNzsgLyogS29tZm9ydCBjenl0YW5pYSBwcnp5IGTFgnXFvHN6eWNoIHRyZcWbY2lhY2ggKi9cbiAgICBtYXJnaW46IDE1cHggMCAyMHB4IDA7IC8qIE9kc3TEmXAgbmFkIGkgcG9kIGJsb2tpZW0gKi9cbn1cblxuLypcbiAgICAtIGBsaW5lLWhlaWdodDogMS43YCDigJMgendpxJlrc3pvbmEgY3p5dGVsbm/Fm8SHLlxuICAgIC0gYGZvbnQtc2l6ZWAg4oCTIGRlbGlrYXRuZSB3eXLDs8W8bmllbmllIGJleiBhZ3Jlc2ppLlxuKi9cblxuXG4vKiBTZWtjamUgdHJlxZtjaSB3IFBvbGl0eWNlIFByeXdhdG5vxZtjaSDigJMgamFzbmUga2FydHkgKi9cbi5wcml2YWN5LXNlY3Rpb24tY2FyZCB7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogI2Y5ZjlmOTsgLyogQmFyZHpvIGphc255IHN6YXJ5IOKAkyBsZWtraSBrb250cmFzdCB6IHTFgmVtICovXG4gICAgcGFkZGluZzogMjBweCAyNHB4OyAvKiBXZXduxJl0cnpueSBvZGRlY2ggdGVrc3R1ICovXG4gICAgYm9yZGVyLXJhZGl1czogMTRweDsgLyogTWnEmWtraWUsIHByenlqYXpuZSB6YW9rcsSFZ2xlbmllICovXG4gICAgbWFyZ2luLWJvdHRvbTogMjJweDsgLyogUnl0bSBtacSZZHp5IGthcnRhbWkgKi9cblxuICAgIGJvcmRlcjogMXB4IHNvbGlkICNlY2VjZWM7IC8qIERlbGlrYXRuZSBvYnJhbW93YW5pZSAqL1xuICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsgLyogU3VidGVsbmEga3Vyc3l3YSBkbGEgd3lyw7PFvG5pZW5pYSB0cmXFm2NpICovXG59XG5cbi8qIFRla3N0IHcgYmFuZXJ6ZSB6Z29keSBjb29raWVzICovXG4ja2wtY29uc2VudC1iYW5uZXIgLnRleHQtbXV0ZWQge1xuICAgIHRleHQtYWxpZ246IGp1c3RpZnk7IC8qIFd5anVzdG93YW5pZSB0ZWtzdHUgZGxhIGxlcHN6ZWogY3p5dGVsbm/Fm2NpICovXG4gICAgLypcbiAgICAgICAgLSBgdGV4dC1hbGlnbjoganVzdGlmeWAg4oCTIFd5csOzd251amUgdGVrc3QgZG8gb2J1IGtyYXfEmWR6aSxcbiAgICAgICAgICBkemnEmWtpIGN6ZW11IGtvbXVuaWthdCB3eWdsxIVkYSBjennFm2NpZWouXG4gICAgKi9cbn1cblxuLyogR8WCw7N3bmUgdXN0YXdpZW5pYSBiYW5lcmEgemdvZHkgY29va2llcyAqL1xuI2tsLWNvbnNlbnQtYmFubmVyIHtcbiAgICBsZWZ0OiAwOyAvKiBQcnp5a2xlamVuaWUgYmFuZXJhIGRvIGxld2VqIGtyYXfEmWR6aSBla3JhbnUgKi9cbiAgICBib3R0b206IDA7IC8qIERvbXnFm2xuaWUgYmFuZXIgb3NhZHpvbnkgcHJ6eSBkb2xuZWoga3Jhd8SZZHppICovXG4gICAgd2lkdGg6IGNhbGMoMTAwdncgLSAxcmVtKTsgLyogUHJhd2llIHBlxYJuYSBzemVyb2tvxZvEhyBla3JhbnUgeiBtYcWCeW0gbWFyZ2luZXNlbSAqL1xuICAgIG1heC13aWR0aDogNjAwcHg7IC8qIE9ncmFuaWN6ZW5pZSBzemVyb2tvxZtjaSBuYSB3acSZa3N6eWNoIGVrcmFuYWNoICovXG4gICAgLypcbiAgICAgICAgLSBgbGVmdDogMGAg4oCTIEJhbmVyIHphY3p5bmEgc2nEmSBvZCBsZXdlaiBzdHJvbnkgZWtyYW51LlxuICAgICAgICAtIGBib3R0b206IDBgIOKAkyBOYSB3acSZa3N6eWNoIGVrcmFuYWNoIHBvem9zdGFqZSBwcnp5IHNhbXltIGRvbGUuXG4gICAgICAgIC0gYHdpZHRoOiBjYWxjKDEwMHZ3IC0gMXJlbSlgIOKAkyBEYWplIHN6ZXJva2/Fm8SHIHByYXdpZSBjYcWCZWdvIGVrcmFudSxcbiAgICAgICAgICBhbGUgem9zdGF3aWEgZGVsaWthdG55IG9kc3TEmXAgb2Qga3Jhd8SZZHppLlxuICAgICAgICAtIGBtYXgtd2lkdGg6IDYwMHB4YCDigJMgQ2hyb25pIHByemVkIHpieXQgc3plcm9raW0gYmFuZXJlbSBuYSBkZXNrdG9waWUuXG4gICAgKi9cbn1cblxuLyogTWHFgmUgZWtyYW55IOKAkyBwb2Rub3NpbXkgYmFuZXIgbmFkIHDFgnl3YWrEhWNlIHByenljaXNraSAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSwgKG1heC1oZWlnaHQ6IDQyMHB4KSB7XG4gICAgI2tsLWNvbnNlbnQtYmFubmVyIHtcbiAgICAgICAgYm90dG9tOiAxODBweDsgLyogUG9kbmllc2llbmllIGJhbmVyYSBuYWQgcHJ6eWNpc2tpOiByZXplcndhY2phIC8gQUkgLyBjemF0ICovXG4gICAgICAgIG1heC13aWR0aDogbm9uZTsgLyogTmEgbW9iaWxlIGkgbmlza2ljaCBla3JhbmFjaCBwZcWCbmEga29udHJvbGEgc3plcm9rb8WbY2kgKi9cbiAgICAgICAgLypcbiAgICAgICAgICAgIC0gYGJvdHRvbTogMTEwcHhgIOKAkyBCYW5lciBuaWUgbmFjaG9kemkgbmEgcMWCeXdhasSFY2UgcHJ6eWNpc2tpLlxuICAgICAgICAgICAgLSBgbWF4LXdpZHRoOiBub25lYCDigJMgTmEgbWHFgnljaCBla3JhbmFjaCBuaWUgb2dyYW5pY3phbXkgc2nEmSBsaW1pdGVtIGRlc2t0b3Bvd3ltLlxuICAgICAgICAqL1xuICAgIH1cblxuICAgICNrbC1jb25zZW50LWJhbm5lciAua2wtY29uc2VudC1sYXlvdXQge1xuICAgICAgICBkaXNwbGF5OiBncmlkICFpbXBvcnRhbnQ7IC8qIE5hIG1vYmlsZSBwcnplY2hvZHppbXkgeiBmbGV4YSBuYSBwcm9zdHkgdWvFgmFkIHNpYXRraSAqL1xuICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsgLyogSmVkbmEga29sdW1uYSDigJMgdGVrc3QgaSBwcnp5Y2lza2kgcG9kIHNvYsSFICovXG4gICAgICAgIGdhcDogMC43NXJlbTsgLyogTGVra2kgb2RzdMSZcCBtacSZZHp5IGJsb2thbWkgKi9cbiAgICAgICAgLypcbiAgICAgICAgICAgIC0gYGRpc3BsYXk6IGdyaWRgIOKAkyBSZXNldHVqZSB6YWNob3dhbmllIGR3dWtvbHVtbm93ZSB6IGRlc2t0b3B1LlxuICAgICAgICAgICAgLSBgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnJgIOKAkyBKZWRlbiBibG9rIG5hIGNhxYLEhSBzemVyb2tvxZvEhy5cbiAgICAgICAgKi9cbiAgICB9XG5cbiAgICAja2wtY29uc2VudC1iYW5uZXIgLmtsLWNvbnNlbnQtdGV4dCB7XG4gICAgICAgIHdpZHRoOiAxMDAlOyAvKiBUZWtzdCB6YWptdWplIGNhxYLEhSBzemVyb2tvxZvEhyAqL1xuICAgICAgICBtYXJnaW4tcmlnaHQ6IDAgIWltcG9ydGFudDsgLyogVXN1d2EgZGVza3RvcG93eSBtYXJnaW5lcyBwbyBwcmF3ZWogKi9cbiAgICAgICAgLypcbiAgICAgICAgICAgIC0gYHdpZHRoOiAxMDAlYCDigJMgS29uaWVjIHogcHVzdHltIG1pZWpzY2VtIHBvIHByYXdlaiBzdHJvbmllLlxuICAgICAgICAgICAgLSBgbWFyZ2luLXJpZ2h0OiAwYCDigJMgWmVydWplIG1hcmdpbmVzIHogd2Vyc2ppIGRlc2t0b3Bvd2VqLlxuICAgICAgICAqL1xuICAgIH1cblxuICAgICNrbC1jb25zZW50LWJhbm5lciAua2wtY29uc2VudC1hY3Rpb25zIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7IC8qIEJsb2sgcHJ6eWNpc2vDs3cgbmEgcGXFgm7EhSBzemVyb2tvxZvEhyAqL1xuICAgICAgICBkaXNwbGF5OiBncmlkICFpbXBvcnRhbnQ7IC8qIFByenljaXNraSB1a8WCYWRhbXkgcHJ6ZXdpZHl3YWxuaWUgKi9cbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOyAvKiBEd2EgcHJ6eWNpc2tpIG9ib2sgc2llYmllLCBqZcWbbGkgc2nEmSBtaWVzemN6xIUgKi9cbiAgICAgICAgZ2FwOiAwLjVyZW07IC8qIE9kc3TEmXAgbWnEmWR6eSBwcnp5Y2lza2FtaSAqL1xuICAgICAgICAvKlxuICAgICAgICAgICAgLSBgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyYCDigJMgRHdhIHLDs3duZSBwcnp5Y2lza2kgb2JvayBzaWViaWUuXG4gICAgICAgICAgICAtIFRvIGRhamUgxYJhZG5pZWpzenkgZWZla3QgbmnFvCDigJ5wb3pvc3RhxYJvxZvEhyBwbyBrb2x1bW5pZeKAnS5cbiAgICAgICAgKi9cbiAgICB9XG5cbiAgICAja2wtY29uc2VudC1iYW5uZXIgLmtsLWNvbnNlbnQtYWN0aW9ucyAuYnRuIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7IC8qIEthxbxkeSBwcnp5Y2lzayB3eXBlxYJuaWEgc3dvasSFIGtvbcOzcmvEmSAqL1xuICAgICAgICAvKlxuICAgICAgICAgICAgLSBgd2lkdGg6IDEwMCVgIOKAkyBTcMOzam5hIHN6ZXJva2/Fm8SHIGkgd3lnb2RuZSBrbGlrbmnEmWNpZS5cbiAgICAgICAgKi9cbiAgICB9XG59XG5cbi8qIEJhcmR6byB3xIVza2llIGVrcmFueSDigJMgcHJ6eWNpc2tpIGplZGVuIHBvZCBkcnVnaW0gKi9cbkBtZWRpYSAobWF4LXdpZHRoOiA0MjBweCkge1xuICAgICNrbC1jb25zZW50LWJhbm5lciAua2wtY29uc2VudC1hY3Rpb25zIHtcbiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7IC8qIE5hIGJhcmR6byBtYcWCeW0gZWtyYW5pZSBwcnp5Y2lza2kgcGlvbm93byAqL1xuICAgICAgICAvKlxuICAgICAgICAgICAgLSBgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnJgIOKAkyBNYWtzeW1hbG5hIGN6eXRlbG5vxZvEhyBpIGJyYWsgxZtjaXNrdS5cbiAgICAgICAgKi9cbiAgICB9XG59XG4iXSwibmFtZXMiOltdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9*/