
/* ── Cross-browser base ──────────────────────────────────── */
html {
    -webkit-text-size-adjust: 100%;
    -ms-text-size-adjust: 100%;
    scroll-behavior: smooth;
}

/* DarkReader override — Force preservation of original aesthetic */
html[data-darkreader-mode],
html[data-darkreader-scheme],
[data-darkreader-inline-bgcolor],
[data-darkreader-inline-color],
[data-darkreader-inline-border] {
    -webkit-filter: none !important;
            filter: none !important;
    --darkreader-inline-bgcolor: initial !important;
    --darkreader-inline-color: initial !important;
    --darkreader-inline-border: initial !important;
}

@font-face {
    font-family: 'SF Mono';
    font-display: swap;
    src: local('SF Mono'), local('SFMono-Regular');
}

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

/* Custom Scrollbar */
::-webkit-scrollbar {
    width: 6px;
    height: 6px;
}

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

::-webkit-scrollbar-thumb {
    background: var(--border-strong);
    border-radius: var(--radius-full);
    border: 1px solid transparent;
}

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

/* For Firefox */
* {
    scrollbar-width: thin;
    scrollbar-color: var(--border-strong) var(--bg-secondary);
}

img, video { max-width: 100%; height: auto; display: block; }

/* ── Design Tokens ───────────────────────────────────────── */
:root {

    /* Spacing scale */
    --space-1: 0.25rem;
    --space-2: 0.5rem;
    --space-3: 0.75rem;
    --space-4: 1rem;
    --space-5: 1.25rem;
    --space-6: 1.5rem;
    --space-8: 2rem;
    --space-10: 2.5rem;
    --space-12: 3rem;

    /* Border radius */
    --radius-xs: 6px;
    --radius-sm: 10px;
    --radius-md: 14px;
    --radius-lg: 20px;
    --radius-xl: 28px;
    --radius-full: 9999px;

    /* Motion */
    --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
    --ease-spring: cubic-bezier(0.34, 1.56, 0.64, 1);
    --duration-fast: 150ms;
    --duration-base: 220ms;
    --duration-slow: 380ms;

    /* ── Dark Theme — Sherlock Dark Academia (221B Baker St) ────── */
    --bg-primary-dark:    #11100f; /* Deep mahogany / pipe smoke */
    --bg-secondary-dark:  #181615; /* Old leather armchair */
    --bg-elevated-dark:   #1f1c1b;
    --card-bg-dark:       rgba(28, 25, 24, 0.35); /* Smoky glass */
    --text-primary-dark:  #e6dfd1; /* Victorian letterhead / Parchment */
    --text-secondary-dark:#a19b8e; /* London smog / Dusty archive */
    --text-tertiary-dark: #787367;
    --accent-dark:        #c29f68; /* Antique Brass / Pocket Watch / Magnifying Glass */
    --accent-glow-dark:   rgba(194, 159, 104, 0.15);
    --border-dark:        rgba(194, 159, 104, 0.12);
    --border-strong-dark: rgba(194, 159, 104, 0.28);
    --btn-bg-dark:        rgba(194, 159, 104, 0.08); /* Faded brass tint */
    --btn-hover-dark:     rgba(194, 159, 104, 0.18);
    --shadow-dark:        0 8px 32px rgba(0, 0, 0, 0.5);
    --shadow-hover-dark:  0 16px 48px rgba(0, 0, 0, 0.7);
    --particle-color-dark: '#c29f68'; /* Floating ash / dust motes in gaslight */
    --terminal-bg-dark:   rgba(17, 16, 15, 0.30); /* Heavy blur for foggy night effect */

    /* ── Light Theme ─────────────────────────────────────── */
    --bg-primary-light:    #fdfcfb; /* Warmer, softer off-white */
    --bg-secondary-light:  #f5f1ed;
    --bg-elevated-light:   #ffffff;
    --card-bg-light:       rgba(255, 255, 255, 0.65);
    --text-primary-light:  #2d2621; /* Softened charcoal-brown, not 'dead black' */
    --text-secondary-light:#5c544e; /* Muted academic brown */
    --text-tertiary-light: #9e948d;
    --accent-light:        #8B4513;
    --accent-glow-light:   rgba(139, 69, 19, 0.12);
    --border-light:        rgba(139, 69, 19, 0.12);
    --border-strong-light: rgba(139, 69, 19, 0.22);
    --btn-bg-light:        rgba(139, 69, 19, 0.04); 
    --btn-hover-light:     rgba(139, 69, 19, 0.08);
    --shadow-light:        0 4px 20px rgba(45, 38, 33, 0.06); 
    --shadow-hover-light:  0 8px 32px rgba(45, 38, 33, 0.10); 
    --particle-color-light: '#7a3e12'; /* Espresso-coffee brown — deep, warm, matches #8B4513 accent perfectly */
    --terminal-bg-light:   rgba(253, 252, 251, 0.60); 

    /* ── Active tokens (defaults = dark) ─────────────────── */
    --bg-primary:    var(--bg-primary-dark);
    --bg-secondary:  var(--bg-secondary-dark);
    --bg-elevated:   var(--bg-elevated-dark);
    --card-bg:       var(--card-bg-dark);
    --text-primary:  var(--text-primary-dark);
    --text-secondary:var(--text-secondary-dark);
    --text-tertiary: var(--text-tertiary-dark);
    --accent:        var(--accent-dark);
    --accent-glow:   var(--accent-glow-dark);
    --border:        var(--border-dark);
    --border-strong: var(--border-strong-dark);
    --btn-bg:        var(--btn-bg-dark);
    --btn-hover:     var(--btn-hover-dark);
    --shadow:        var(--shadow-dark);
    --shadow-hover:  var(--shadow-hover-dark);
    --terminal-bg:   var(--terminal-bg-dark);
    --particle-color:var(--particle-color-dark);
}

body.light-theme {
    --bg-primary:    var(--bg-primary-light);
    --bg-secondary:  var(--bg-secondary-light);
    --bg-elevated:   var(--bg-elevated-light);
    --card-bg:       var(--card-bg-light);
    --text-primary:  var(--text-primary-light);
    --text-secondary:var(--text-secondary-light);
    --text-tertiary: var(--text-tertiary-light);
    --accent:        var(--accent-light);
    --accent-glow:   var(--accent-glow-light);
    --border:        var(--border-light);
    --border-strong: var(--border-strong-light);
    --btn-bg:        var(--btn-bg-light);
    --btn-hover:     var(--btn-hover-light);
    --shadow:        var(--shadow-light);
    --shadow-hover:  var(--shadow-hover-light);
    --terminal-bg:   var(--terminal-bg-light);
    --particle-color:var(--particle-color-light);
}

/* ── Base ────────────────────────────────────────────────── */
body {
    font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI',
                 Roboto, Helvetica, Arial, sans-serif;
    background: #11100f; /* fallback: no CSS vars support */
    background: var(--bg-primary);
    color: #e6dfd1; /* fallback */
    color: var(--text-primary);
    line-height: 1.6;
    min-height: 100vh;
    min-height: -webkit-fill-available;
    overflow-x: hidden;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    text-rendering: optimizeLegibility;
    transition: background-color var(--duration-base) ease,
                color var(--duration-base) ease;
}

/* ── SVGs (Inline Icons) ─────────────────────────────────── */
svg {
    vertical-align: middle;
    transition: transform var(--duration-fast) var(--ease-out), 
                fill var(--duration-base) ease, 
                stroke var(--duration-base) ease;
}

[class*="btn"] svg, 
[class*="link"] svg, 
.social-link svg, 
.tech-item svg {
    pointer-events: none; /* Let parent handle interactions */
}

/* ── Profile Section ─────────────────────────────────────── */
.profile-card,
.interest-tags {
    -moz-user-select: none;
         user-select: none;
    -webkit-user-select: none;
}

/* ── Focus & Selection ───────────────────────────────────── */
*:focus { outline: none; }
*:focus-visible {
    outline: 2px solid var(--accent);
    outline-offset: 3px;
    border-radius: var(--radius-xs);
}
::-moz-selection { background: rgba(255,255,255,0.12); }
::selection { background: rgba(255,255,255,0.12); }
body.light-theme ::-moz-selection { background: rgba(139,69,19,0.15); }
body.light-theme ::selection { background: rgba(139,69,19,0.15); }

/* ── Tap highlight removal ───────────────────────────────── */
button, a, [role="button"],
.tech-item, .social-link, .contact-btn,
.header-btn, .profile-btn, .session-btn {
    -webkit-tap-highlight-color: transparent;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
       -moz-user-select: none;
            user-select: none;
}

/* ── Layout ──────────────────────────────────────────────── */
.container {
    width: 100%;
    max-width: 1080px;
    margin: 0 auto;
    padding: 0 var(--space-6);
}

#particles-js {
    position: fixed;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    z-index: -1;
    pointer-events: none;
    /* GPU compositing hint — offloads canvas rendering from CPU to the GPU */
    will-change: transform;
    -webkit-transform: translateZ(0);
    transform: translateZ(0);
}

/* Promote the canvas element to a separate GPU compositing layer */
#particles-js canvas {
    display: block;
    -webkit-transform: translateZ(0);
    transform: translateZ(0);
}

#particles-js.fallback-background {
    background:
        radial-gradient(2px 2px at 20px 30px, var(--accent), transparent),
        radial-gradient(1px 1px at 90px 40px, var(--accent), transparent);
    background-size: 200px 100px;
    -webkit-animation: particleFloat 20s ease-in-out infinite;
    animation: particleFloat 20s ease-in-out infinite;
    opacity: 0.2; /* Slightly lower for better readability */
}

body.light-theme #particles-js {
    opacity: 0.85; /* Rich and vivid in light mode */
}

@keyframes particleFloat {
    0%, 100% { transform: translate3d(0, 0, 0); }
    50%       { transform: translate3d(5px, -5px, 0); }
}

body.fallback-mode {
    background: linear-gradient(135deg, var(--bg-primary), var(--bg-secondary));
}

/* ══════════════════════════════════════════════════════════
   HEADER
══════════════════════════════════════════════════════════ */
@keyframes headerEnter {
    from { -webkit-transform: translateY(-50px); transform: translateY(-50px); opacity: 0; }
    to { -webkit-transform: translateY(0); transform: translateY(0); opacity: 1; }
}

@-webkit-keyframes headerEnter {
    from { -webkit-transform: translateY(-50px); opacity: 0; }
    to { -webkit-transform: translateY(0); opacity: 1; }
}

.header {
    position: relative;
    z-index: 100;
    width: 100%;
    -webkit-animation: headerEnter 1s cubic-bezier(0.19, 1, 0.22, 1) both;
    animation: headerEnter 1s cubic-bezier(0.19, 1, 0.22, 1) both;
}

.header-inner {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: var(--space-5) var(--space-6);
    max-width: 1080px;
    margin: 0 auto;
}

/* Logo */
.header-logo {
    font-family: 'SF Mono', 'Monaco', 'Cascadia Code', 'Roboto Mono', monospace;
    font-size: 1.25rem;
    font-weight: 700;
    color: var(--accent);
    letter-spacing: 0.5px;
    display: flex;
    align-items: center;
    gap: var(--space-2);
    text-decoration: none;
}

.network-icon svg circle,
.network-icon svg line {
    transition: stroke var(--duration-base) ease;
}

.header-left {
    display: flex;
    align-items: center;
    gap: var(--space-6);
}

.header-btn-group {
    display: flex;
    align-items: center;
    gap: var(--space-2);
    margin-left: var(--space-2);
}

/* Buttons */
.header-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: var(--space-2);
    height: 36px;
    padding: 0 var(--space-4);
    border-radius: var(--radius-full);
    background: var(--btn-bg);
    border: 1px solid var(--border);
    color: var(--text-primary);
    font-size: 0.875rem;
    font-weight: 500;
    font-family: inherit;
    letter-spacing: 0.2px;
    cursor: pointer;
    text-decoration: none;
    transition:
        background var(--duration-base) var(--ease-out),
        border-color var(--duration-base) var(--ease-out),
        color var(--duration-base) var(--ease-out),
        transform var(--duration-fast) var(--ease-out),
        box-shadow var(--duration-base) var(--ease-out);
    position: relative;
    z-index: 2;
    white-space: nowrap;
}

.header-btn:hover {
    background: var(--btn-hover);
    border-color: var(--border-strong);
    transform: translateY(-1px);
    box-shadow: var(--shadow);
}

.header-btn:active {
    transform: translateY(0) scale(0.97);
}

.header-right {
    display: flex;
    align-items: center;
    gap: var(--space-2);
}

/* Theme toggle icons */
.theme-btn .fa-sun  { display: none; }
.theme-btn .fa-moon { display: block; }
body.light-theme .theme-btn .fa-sun  { display: block; }
body.light-theme .theme-btn .fa-moon { display: none; }

/* ══════════════════════════════════════════════════════════
   MAIN CONTENT
══════════════════════════════════════════════════════════ */
@keyframes contentEnter {
    from { -webkit-transform: translateY(30px); opacity: 0; }
    to { -webkit-transform: translateY(0); opacity: 1; }
}

@-webkit-keyframes contentEnter {
    from { -webkit-transform: translateY(30px); opacity: 0; }
    to { -webkit-transform: translateY(0); opacity: 1; }
}

.main-content {
    position: relative;
    z-index: 1;
    width: 100%;
    min-height: calc(100vh - 80px);
    padding: 3.5rem 0 var(--space-12);
}

.content {
    display: flex;
    justify-content: space-between;
    align-items: flex-start;
    gap: var(--space-10);
    width: 100%;
    margin-bottom: var(--space-8);
}

.left-section {
    flex: 1;
    min-width: 0;
    max-width: 600px;
    -webkit-animation: contentEnter 1s cubic-bezier(0.215, 0.610, 0.355, 1) both;
    animation: contentEnter 1s cubic-bezier(0.215, 0.610, 0.355, 1) both;
    -webkit-animation-delay: 0.1s;
    animation-delay: 0.1s;
}

.right-section {
    flex-shrink: 0;
    width: 300px;
    -webkit-animation: contentEnter 1s cubic-bezier(0.215, 0.610, 0.355, 1) both;
    animation: contentEnter 1s cubic-bezier(0.215, 0.610, 0.355, 1) both;
    -webkit-animation-delay: 0.25s;
    animation-delay: 0.25s;
}

/* ── About / Hero ────────────────────────────────────────── */
.about {
    padding: var(--space-4) 0;
    -webkit-user-select: text;
       -moz-user-select: text;
            user-select: text;
}

/* "PxeCore" glitch heading */
.glitch {
    margin-bottom: var(--space-1);
    font-size: 1.8rem;
    font-weight: 700;
    color: var(--text-primary);
    letter-spacing: 0.5px;
    line-height: 1.2;
    animation: header-breathing 6s infinite ease-in-out;
}

@keyframes header-breathing {
    0%, 100% { text-shadow: 0 0 5px rgba(194, 159, 104, 0); }
    50% { text-shadow: 0 0 15px var(--accent-glow); }
}

/* "Hey." greeting */
.hi-text {
    font-size: 1.8rem; /* fallback for browsers without clamp() */
    font-size: clamp(1.6rem, 3vw, 2rem);
    font-weight: 700;
    color: var(--accent);
    letter-spacing: -0.5px;
    margin-top: var(--space-1);
    margin-bottom: var(--space-3);
    animation: fadeSlideDown 0.8s var(--ease-out) both;
    display: inline-block;
}

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

.hero-subtext {
    display: flex;
    align-items: center;
    gap: var(--space-3);
    margin-bottom: var(--space-3);
}

.hero-subtext .line {
    display: block;
    width: 6px;
    height: 6px;
    background: var(--accent);
    opacity: 0.8;
    border-radius: var(--radius-full);
    flex-shrink: 0;
}

.hero-subtext p {
    font-size: 0.95rem;
    color: var(--text-secondary);
    letter-spacing: 0.2px;
}

.about > p {
    font-size: 1rem;
    color: var(--text-secondary);
    line-height: 1.75;
    max-width: 52ch;
}

.highlight {
    color: var(--text-secondary);
    font-style: italic;
    font-size: 0.9rem;
    display: block;
    margin-top: var(--space-2);
    opacity: 0.75;
}

/* ── Tech Stack ──────────────────────────────────────────── */
.tech-stack {
    display: flex;
    gap: var(--space-3);
    margin-top: 2.6rem; /* Balanced spacing to prevent overlap without pushing buttons too far down */
    flex-wrap: wrap;
    position: relative;
    z-index: 10;
}

.tech-item {
    width: 42px;
    height: 42px;
    border-radius: var(--radius-full);
    background: var(--btn-bg);
    border: 1px solid var(--border);
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--accent);
    font-size: 1.1rem;
    cursor: pointer;
    position: relative;
    transition:
        background var(--duration-base) var(--ease-out),
        border-color var(--duration-base) var(--ease-out),
        transform var(--duration-fast) var(--ease-spring);
    will-change: transform;
}

.tech-item:hover {
    background: var(--btn-hover);
    border-color: var(--border-strong);
    transform: translateY(-4px);
    box-shadow: 0 8px 24px var(--accent-glow);
}

/* Tooltip - Moved back to TOP but with better spacing and z-index */
.tech-item::before {
    content: attr(data-tooltip);
    position: absolute;
    bottom: calc(100% + 10px); /* Appear above icon */
    left: 50%;
    transform: translateX(-50%) translateY(6px);
    background: var(--bg-elevated);
    color: var(--text-primary);
    border: 1px solid var(--border-strong);
    padding: 5px 11px;
    border-radius: var(--radius-xs);
    font-size: 0.78rem;
    font-weight: 500;
    white-space: nowrap;
    opacity: 0;
    pointer-events: none;
    transition: opacity var(--duration-base) ease,
                transform var(--duration-base) ease;
    z-index: 100;
    box-shadow: 0 4px 16px rgba(0,0,0,0.15);
}

.tech-item:hover::before {
    opacity: 1;
    transform: translateX(-50%) translateY(0);
}

.tech-item:hover::before,
.tech-item.tooltip-visible::before {
    opacity: 1;
    transform: translateX(-50%) translateY(0);
}

/* ── Contact Buttons ─────────────────────────────────────── */
.contact-buttons {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-3);
    margin-top: var(--space-6);
    position: relative;
    z-index: 2;
}

.contact-btn {
    display: inline-flex;
    align-items: center;
    gap: var(--space-2);
    height: 42px;
    padding: 0 var(--space-5);
    border-radius: var(--radius-sm);
    background: var(--btn-bg);
    border: 1px solid var(--border);
    color: var(--text-primary);
    font-size: 0.9rem;
    font-weight: 500;
    font-family: inherit;
    cursor: pointer;
    text-decoration: none;
    transition:
        background var(--duration-base) var(--ease-out),
        border-color var(--duration-base) var(--ease-out),
        transform var(--duration-fast) var(--ease-out),
        box-shadow var(--duration-base) var(--ease-out);
}

.contact-btn:hover {
    background: var(--btn-hover);
    border-color: var(--border-strong);
    transform: translateY(-2px);
    box-shadow: var(--shadow);
}

.contact-btn:active {
    transform: translateY(0) scale(0.97);
}

.contact-btn i { font-size: 1rem; }

#session-copied {
    display: none;
    align-self: center;
    font-size: 0.82rem;
    font-weight: 500;
    color: var(--accent);
    letter-spacing: 0.3px;
}

/* ══════════════════════════════════════════════════════════
   PROFILE CARD
══════════════════════════════════════════════════════════ */
.profile-card {
    width: 100%;
    background: #1c1918; /* solid fallback for no CSS vars */
    background: var(--card-bg);
    border-radius: var(--radius-xl);
    border: 1px solid rgba(194,159,104,0.12);
    border: 1px solid var(--border);
    overflow: hidden;
    isolation: isolate;
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;
    /* Device-aware blur: Premium on desktop, performant on mobile */
    -webkit-backdrop-filter: blur(var(--blur-amount, 12px)) saturate(110%);
            backdrop-filter: blur(var(--blur-amount, 12px)) saturate(110%);
    will-change: transform, opacity;

    box-shadow: var(--shadow);
    transition:
        transform var(--duration-slow) var(--ease-out),
        box-shadow var(--duration-slow) var(--ease-out),
        border-color var(--duration-base) ease;
    position: relative;
    z-index: 2;
}

.profile-card:hover {
    transform: translateY(-6px);
    box-shadow: var(--shadow-hover);
    border-color: var(--border-strong);
}

/* Banner */
.card-header {
    position: relative;
    height: 88px;
    overflow: visible; /* allow avatar to overflow below */
}

.site-harmony-banner {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    overflow: hidden;
    border-radius: var(--radius-xl) var(--radius-xl) 0 0;
    background-color: var(--bg-secondary);
    background-size: cover;
    background-position: center;
    /* High-quality noise fallback for load failures */
    background-image: linear-gradient(rgba(17, 16, 15, 0.4), rgba(17, 16, 15, 0.4)),
                      url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");
    transition: background-image 0.5s ease;
}

body.light-theme .site-harmony-banner {
    background-image: linear-gradient(rgba(253, 252, 251, 0.2), rgba(253, 252, 251, 0.2)),
                      url("data:image/svg+xml,%3Csvg viewBox='0 0 200 200' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noiseFilter'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.65' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noiseFilter)'/%3E%3C/svg%3E");
}

/* Avatar */
.profile-img {
    position: absolute;
    left: 50%;
    bottom: -38px;
    transform: translateX(-50%);
    width: 76px;
    height: 76px;
    border-radius: 50%;
    -o-object-fit: cover;
       object-fit: cover;
    border: 3px solid var(--bg-primary);
    box-shadow: 0 4px 20px rgba(0,0,0,0.5);
    z-index: 10;
    -webkit-user-select: none;
       -moz-user-select: none;
            user-select: none;
    transition: border-color var(--duration-base) ease;
}

.card-body {
    padding: 50px var(--space-5) var(--space-5);
}

.profile-info { text-align: center; }

.profile-info h2 {
    font-size: 1.1rem;
    font-weight: 600;
    color: var(--text-primary);
    letter-spacing: -0.2px;
    margin-bottom: var(--space-2);
}

.profile-meta {
    display: flex;
    justify-content: center;
    gap: var(--space-2);
    margin-bottom: var(--space-3);
}

.badge {
    display: inline-flex;
    align-items: center;
    padding: 3px 10px;
    border-radius: var(--radius-full);
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.3px;
    border: 1px solid var(--border);
    background: var(--btn-bg);
    color: var(--text-secondary);
}

.profile-action {
    display: flex;
    justify-content: center;
    margin-bottom: var(--space-4);
}

.profile-btn {
    height: 26px;
    padding: 0 var(--space-3);
    border-radius: var(--radius-full);
    background: var(--btn-bg);
    border: 1px solid var(--border);
    color: var(--text-secondary);
    font-size: 0.72rem;
    font-weight: 600;
    letter-spacing: 0.4px;
    cursor: pointer;
    font-family: inherit;
    transition:
        background var(--duration-base) ease,
        border-color var(--duration-base) ease,
        color var(--duration-fast) ease,
        transform var(--duration-fast) var(--ease-spring);
}

.profile-btn:hover {
    background: var(--accent);
    color: var(--bg-primary);
    border-color: var(--accent);
    transform: translateY(-1px);
}

/* ── Audio Vocalizer (divider line style) ─────────────────── */
.audio-vocalizer {
    height: 1px;
    width: 100%;
    margin: var(--space-6) auto;
    background: linear-gradient(90deg, 
        transparent 0%, 
        var(--border) 15%, 
        var(--border) 85%, 
        transparent 100%
    );
    position: relative;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all var(--duration-base) var(--ease-out);
    /* Hardware acceleration */
    transform: translateZ(0);
}

.audio-vocalizer:hover {
    background: linear-gradient(90deg, 
        transparent 0%, 
        var(--border-strong) 15%, 
        var(--border-strong) 85%, 
        transparent 100%
    );
}

.audio-vocalizer:hover .vocalizer-play-btn {
    transform: translate(-50%, -50%) scale(1.5);
    color: var(--accent);
    filter: drop-shadow(0 0 8px var(--accent-glow));
    opacity: 1;
}

.vocalizer-play-btn {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--text-tertiary);
    background: none;
    padding: 0;
    font-size: 11px;
    opacity: 0.55;
    z-index: 2;
    transition: all var(--duration-base) var(--ease-spring);
}

.audio-vocalizer.playing::after {
    display: none;
}

.audio-vocalizer.playing .vocalizer-play-btn {
    opacity: 0;
    pointer-events: none;
    transform: translate(-50%, -50%) scale(0.8);
}

.vocalizer-bars {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
    display: flex;
    align-items: center;
    justify-content: center; /* Fix left drift */
    gap: 3px;
    padding: 0 var(--space-8);
    opacity: 0;
    transition: opacity var(--duration-base) ease;
    min-width: 160px;
}

.audio-vocalizer.playing .vocalizer-bars { opacity: 1; }

.vocalizer-bar {
    width: 3px;
    height: 8px;
    background: var(--accent);
    border-radius: 2px;
    opacity: 0.8;
}

@keyframes eq1  { 0%,100%{transform:scaleY(.3)} 50%{transform:scaleY(1.8)} }
@keyframes eq2  { 0%,100%{transform:scaleY(.5)} 50%{transform:scaleY(1.4)} }
@keyframes eq3  { 0%,100%{transform:scaleY(.4)} 50%{transform:scaleY(2.0)} }
@keyframes eq4  { 0%,100%{transform:scaleY(.6)} 50%{transform:scaleY(1.6)} }
@keyframes eq5  { 0%,100%{transform:scaleY(.3)} 50%{transform:scaleY(1.5)} }
@keyframes eq6  { 0%,100%{transform:scaleY(.5)} 50%{transform:scaleY(1.8)} }
@keyframes eq7  { 0%,100%{transform:scaleY(.4)} 50%{transform:scaleY(1.3)} }
@keyframes eq8  { 0%,100%{transform:scaleY(.6)} 50%{transform:scaleY(2.1)} }
@keyframes eq9  { 0%,100%{transform:scaleY(.3)} 50%{transform:scaleY(1.9)} }
@keyframes eq10 { 0%,100%{transform:scaleY(.5)} 50%{transform:scaleY(1.4)} }

.audio-vocalizer.playing .vocalizer-bar:nth-child(1)  { animation: eq1  0.60s infinite ease-in-out; opacity:1; }
.audio-vocalizer.playing .vocalizer-bar:nth-child(2)  { animation: eq2  0.70s infinite ease-in-out; opacity:1; }
.audio-vocalizer.playing .vocalizer-bar:nth-child(3)  { animation: eq3  0.50s infinite ease-in-out; opacity:1; }
.audio-vocalizer.playing .vocalizer-bar:nth-child(4)  { animation: eq4  0.80s infinite ease-in-out; opacity:1; }
.audio-vocalizer.playing .vocalizer-bar:nth-child(5)  { animation: eq5  0.60s infinite ease-in-out; opacity:1; }
.audio-vocalizer.playing .vocalizer-bar:nth-child(6)  { animation: eq6  0.90s infinite ease-in-out; opacity:1; }
.audio-vocalizer.playing .vocalizer-bar:nth-child(7)  { animation: eq7  0.40s infinite ease-in-out; opacity:1; }
.audio-vocalizer.playing .vocalizer-bar:nth-child(8)  { animation: eq8  0.70s infinite ease-in-out; opacity:1; }
.audio-vocalizer.playing .vocalizer-bar:nth-child(9)  { animation: eq9  0.50s infinite ease-in-out; opacity:1; }
.audio-vocalizer.playing .vocalizer-bar:nth-child(10) { animation: eq10 0.80s infinite ease-in-out; opacity:1; }

.audio-vocalizer.playing .vocalizer-bar {
    box-shadow: 0 0 6px rgba(255,255,255,0.2);
}

/* ── Interests ───────────────────────────────────────────── */
.interests h3 {
    font-size: 0.72rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.8px;
    color: var(--text-tertiary);
    margin-bottom: var(--space-3);
    text-align: center;
}

.interest-tags {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: var(--space-2);
    margin-bottom: var(--space-4);
}

.interest-tags span {
    padding: 4px 12px;
    border-radius: var(--radius-full);
    background: var(--btn-bg);
    border: 1px solid var(--border);
    color: var(--text-secondary);
    font-size: 0.78rem;
    font-weight: 500;
    transition:
        background var(--duration-base) ease,
        color var(--duration-base) ease,
        transform var(--duration-fast) var(--ease-spring);
}

.interest-tags span:hover {
    background: var(--btn-hover);
    color: var(--text-primary);
    transform: translateY(-2px);
}

/* ── Social Links ────────────────────────────────────────── */
.social-links {
    display: flex;
    justify-content: center;
    gap: var(--space-3);
}

.social-link {
    width: 38px;
    height: 38px;
    border-radius: var(--radius-full);
    background: var(--btn-bg);
    border: 1px solid var(--border);
    display: flex;
    align-items: center;
    justify-content: center;
    color: var(--accent);
    font-size: 1rem;
    text-decoration: none;
    transition:
        background var(--duration-base) ease,
        border-color var(--duration-base) ease,
        color var(--duration-base) ease,
        transform var(--duration-fast) var(--ease-spring),
        box-shadow var(--duration-base) ease;
}

.social-link:hover {
    background: var(--btn-hover);
    border-color: var(--border-strong);
    color: var(--text-primary);
    transform: translateY(-3px);
    box-shadow: var(--shadow);
}

/* ══════════════════════════════════════════════════════════
   TERMINAL
══════════════════════════════════════════════════════════ */
.terminal-container {
    width: 100%;
    margin: var(--space-6) 0 0;
    position: relative;
    z-index: 2;
    -webkit-transform: translateZ(0);
    transform: translateZ(0);
    -webkit-animation: contentEnter 1s cubic-bezier(0.215, 0.610, 0.355, 1) both;
    animation: contentEnter 1s cubic-bezier(0.215, 0.610, 0.355, 1) both;
    -webkit-animation-delay: 0.4s;
    animation-delay: 0.4s;
}

.terminal {
    background: rgba(17,16,15,0.45); /* solid fallback */
    background: var(--terminal-bg);
    border-radius: var(--radius-lg);
    border: 1px solid rgba(194,159,104,0.12);
    border: 1px solid var(--border);
    overflow: hidden;
    isolation: isolate;
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;
    -webkit-backdrop-filter: blur(2px) saturate(110%);
            backdrop-filter: blur(2px) saturate(110%);
    box-shadow: var(--shadow);

    border-top: 1px solid var(--border-strong);
    transition: border-color var(--duration-base) ease;
}

.terminal-header {
    display: flex;
    align-items: center;
    gap: var(--space-2);
    padding: var(--space-3) var(--space-4);
    background: rgba(0,0,0,0.4);
    will-change: opacity;
    -webkit-transform: translateZ(0);
    transform: translateZ(0);
    border-bottom: 1px solid var(--border);
}

body.light-theme .terminal-header {
    background: rgba(0,0,0,0.04);
}

/* macOS-style traffic lights */
.terminal-btn {
    width: 12px;
    height: 12px;
    border-radius: 50%;
    cursor: pointer;
    flex-shrink: 0;
    transition: transform var(--duration-fast) ease,
                -webkit-filter var(--duration-fast) ease;
    transition: filter var(--duration-fast) ease,
                transform var(--duration-fast) ease;
    transition: filter var(--duration-fast) ease,
                transform var(--duration-fast) ease,
                -webkit-filter var(--duration-fast) ease;
    -webkit-tap-highlight-color: transparent;
    -webkit-user-select: none;
       -moz-user-select: none;
            user-select: none;
}

.terminal-btn:hover  { -webkit-filter: brightness(1.15); filter: brightness(1.15); transform: scale(1.1); }
.terminal-btn:active { transform: scale(0.88); -webkit-filter: brightness(0.8); filter: brightness(0.8); }

/* Unified Terminal Buttons — Vintage / Dark Academia Aesthetic */
.terminal-btn.red {
    background: #c05c5c; /* Muted Crimson */
    box-shadow: inset 0 1px 2px rgba(255,255,255,0.2), 0 0 8px rgba(192, 92, 92, 0.4);
    opacity: 0.9;
}

.terminal-btn.yellow {
    background: #d49a4c; /* Muted Gold */
    box-shadow: inset 0 1px 2px rgba(255,255,255,0.2), 0 0 8px rgba(212, 154, 76, 0.4);
    opacity: 0.9;
}

.terminal-btn.green {
    background: #6b8e5f; /* Muted Sage */
    box-shadow: inset 0 1px 2px rgba(255,255,255,0.2), 0 0 8px rgba(107, 142, 95, 0.4);
    opacity: 0.9;
}

.terminal-btn.red:hover,
.terminal-btn.yellow:hover,
.terminal-btn.green:hover  { 
    opacity: 1; 
    transform: scale(1.2); 
    -webkit-filter: brightness(1.2); 
    filter: brightness(1.2);
    box-shadow: 0 0 15px currentColor; 
}

/* Ensure vibrancy in light theme */
body.light-theme .terminal-btn {
    opacity: 1;
    border: 1px solid rgba(0,0,0,0.05);
    box-shadow: inset 0 1px 2px rgba(255,255,255,0.4), 0 1px 4px rgba(0,0,0,0.15);
}

.terminal-body {
    padding: var(--space-5);
    font-family: 'SF Mono', 'Monaco', 'Cascadia Code', 'Roboto Mono', monospace;
    font-size: 0.88rem;
    line-height: 1.7;
    -webkit-user-select: text;
       -moz-user-select: text;
            user-select: text;
}

.terminal-text {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2);
    margin-bottom: var(--space-2);
}

.prompt {
    color: var(--accent);
    font-weight: 600;
}

.command { color: var(--text-primary); }

.terminal-output {
    color: var(--text-secondary);
    margin-bottom: var(--space-4);
    margin-left: var(--space-2);
    word-break: break-all;
    font-size: 0.85rem;
}

.cursor {
    display: inline-block;
    width: 8px;
    height: 1.1em;
    background: var(--accent);
    border-radius: 1px;
    vertical-align: middle;
    transform: translateY(4px); /* Fine-tuned to the micro-pixel */
    animation: cursorBlink 1.4s ease-in-out infinite;
    margin-left: 2px;
}

@keyframes cursorBlink {
    0%, 100% { opacity: 1; }
    50%       { opacity: 0; }
}

/* ══════════════════════════════════════════════════════════
   PIXEL / GLITCH TITLE ANIMATION
══════════════════════════════════════════════════════════ */
.pixel-text {
    position: relative;
    display: inline-block;
    overflow: visible;
}

.pixel-char {
    display: inline-block;
    transform-origin: center;
    animation: 
        letterDrop 0.8s var(--ease-spring) forwards,
        timedPulse 8s ease-in-out infinite;
    opacity: 0;
    transform: translateY(-40px) rotateX(45deg);
    will-change: transform, opacity;
}

@keyframes letterDrop {
    0%   { opacity: 0; transform: translateY(-40px) rotateX(45deg) scale(0.8); }
    100% { opacity: 1; transform: translateY(0) rotateX(0deg) scale(1); }
}

@keyframes timedPulse {
    0%, 20%   { color: var(--text-primary); transform: scale(1) translateY(0); }
    25%, 30%  { color: var(--accent);       transform: scale(1.04) translateY(-3px); }
    35%, 80%  { color: var(--text-primary); transform: scale(1) translateY(0); }
    85%, 90%  { color: var(--accent);       transform: scale(1.04) translateY(-3px); }
    95%, 100% { color: var(--text-primary); transform: scale(1) translateY(0); }
}

.pixel-char:nth-child(1) { animation-delay: 0.05s, 0.0s; }
.pixel-char:nth-child(2) { animation-delay: 0.12s, 0.1s; }
.pixel-char:nth-child(3) { animation-delay: 0.19s, 0.2s; }
.pixel-char:nth-child(4) { animation-delay: 0.26s, 0.3s; }
.pixel-char:nth-child(5) { animation-delay: 0.33s, 0.4s; }
.pixel-char:nth-child(6) { animation-delay: 0.40s, 0.5s; }

/* ══════════════════════════════════════════════════════════
   FOOTER
══════════════════════════════════════════════════════════ */
.footer {
    position: relative;
    z-index: 2;
    text-align: center;
    padding: var(--space-6) var(--space-4);
    font-size: 0.78rem;
    color: var(--text-tertiary);
    margin-top: var(--space-8);
}

/* ══════════════════════════════════════════════════════════
   RESPONSIVE — TABLET
══════════════════════════════════════════════════════════ */
@media (max-width: 900px) {
    .content {
        flex-direction: column;
        align-items: stretch;
        gap: var(--space-8);
    }

    .left-section  { max-width: 100%; }
    .right-section { width: 100%; max-width: 420px; margin: 0 auto; }
}

/* ══════════════════════════════════════════════════════════
   RESPONSIVE — MOBILE
══════════════════════════════════════════════════════════ */
@media (max-width: 768px) {
    .header-right {
        position: absolute;
        top: var(--space-4);
        right: var(--space-4);
    }

    .header-btn-group {
        width: 100%;
        justify-content: center;
        gap: var(--space-3);
    }

    .resume-overlay {
        width: 95%;
        height: 88vh;
        max-width: none;
    }

    .resume-overlay-content {
        padding: var(--space-6) var(--space-4);
    }

    .mobile-resume-footer {
        display: block;
        padding: var(--space-6) var(--space-4);
        border-top: 1px solid var(--border);
        background: var(--card-bg);
        margin-top: auto;
    }

    .mobile-close-btn {
        width: 100%;
        padding: var(--space-4);
        background: var(--accent);
        color: var(--bg-primary);
        border: none;
        border-radius: var(--radius-md);
        font-weight: 700;
        font-size: 1rem;
        cursor: pointer;
        transition: opacity 0.2s ease;
    }

    .mobile-close-btn:active {
        opacity: 0.8;
    }
}

@media (max-width: 600px) {
    .container { padding: 0 var(--space-4); }

    .header-inner {
        padding: var(--space-4) var(--space-4) var(--space-3);
        flex-direction: column;
        align-items: center;
        gap: var(--space-3);
        position: relative;
    }

    .header-left {
        flex-direction: column;
        align-items: center;
        gap: var(--space-3);
        width: 100%;
    }

    .header-logo {
        justify-content: center;
    }

    .header-btn-group {
        margin-left: 0;
        justify-content: center;
    }

    .header-logo { font-size: 1.1rem; }

    .header-btn {
        height: 34px;
        font-size: 0.82rem;
        padding: 0 var(--space-3);
    }

    .glitch { font-size: 1.6rem; }
    .hi-text { font-size: 1.5rem; }
    .about > p { font-size: 0.95rem; }

    .contact-buttons { gap: var(--space-2); }
    .contact-btn { font-size: 0.85rem; height: 40px; padding: 0 var(--space-4); }

    .tech-stack { gap: var(--space-2); justify-content: center; }
    .tech-item { width: 38px; height: 38px; font-size: 1rem; }

    .terminal-body { padding: var(--space-4); font-size: 0.82rem; }
}

@media (max-width: 380px) {
    .glitch  { font-size: 1.4rem; }
    .hi-text { font-size: 1.3rem; }

    .contact-buttons { flex-direction: column; align-items: stretch; }
    .contact-btn { justify-content: center; }

    .right-section { max-width: none; }
}

/* Accessibility: Reduce motion for users who prefer it */
@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: 0.001ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: 0.001ms !important;
        scroll-behavior: auto !important;
    }
    .cursor {
        animation: none !important;
        opacity: 1 !important;
    }
    #particles-js.fallback-background {
        animation: none !important;
    }
}

/* ======================================================
   RESUME OVERLAY PANEL
====================================================== */
.resume-overlay {
    position: fixed;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%) scale(0.9);
    width: 90%;
    max-width: 720px;
    height: 80vh;
    background: var(--card-bg);
    backdrop-filter: blur(12px) saturate(180%);
    -webkit-backdrop-filter: blur(12px) saturate(180%);
    will-change: transform, opacity;
    -webkit-transform: translateZ(0);
    transform: translate(-50%, -50%) scale(0.9) translateZ(0);
    z-index: 2000;
    box-shadow: 0 30px 90px rgba(0,0,0,0.5);
    border: 1px solid var(--border-strong);
    border-radius: var(--radius-xl);
    display: flex;
    flex-direction: column;
    overflow: hidden;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: 
        transform var(--duration-slow) var(--ease-spring),
        opacity var(--duration-base) ease;
}

.resume-overlay.active {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
    transform: translate(-50%, -50%) scale(1);
}

.resume-overlay.dragging {
    transition: none; /* Smooth drag */
    -webkit-user-select: none;
       -moz-user-select: none;
            user-select: none;
}

.resume-overlay-header {
    padding: var(--space-3) var(--space-5);
    display: flex;
    align-items: center;
    justify-content: center; /* Center title */
    border-bottom: 1px solid var(--border);
    background: rgba(0,0,0,0.05); /* Slight tint for header */
    cursor: -webkit-grab;
    cursor: grab;
    position: relative;
    -webkit-user-select: none;
       -moz-user-select: none;
            user-select: none;
}

.resume-overlay-header:active {
    cursor: -webkit-grabbing;
    cursor: grabbing;
}

.resume-overlay-header .terminal-controls {
    position: absolute;
    left: var(--space-5);
    display: flex;
    align-items: center;
    gap: 8px;
}

.resume-title {
    font-size: 0.75rem;
    font-weight: 700;
    letter-spacing: 1.5px;
    color: var(--text-secondary);
    text-transform: uppercase;
    opacity: 0.8;
}

.resume-overlay-content {
    flex: 1;
    overflow-y: auto;
    padding: var(--space-10) var(--space-8);
    scrollbar-width: thin;
    scrollbar-color: var(--border) transparent;
}

.resume-overlay-content::-webkit-scrollbar {
    width: 5px;
}

.resume-overlay-content::-webkit-scrollbar-thumb {
    background: var(--border-strong);
    border-radius: 10px;
}

.resume-section-box {
    margin-bottom: var(--space-10);
    animation: slideUpFade 0.6s var(--ease-out) both;
}

@keyframes slideUpFade {
    from { opacity: 0; transform: translateY(20px); }
    to   { opacity: 1; transform: translateY(0); }
}

.resume-section-box:nth-child(1) { animation-delay: 0.1s; }
.resume-section-box:nth-child(2) { animation-delay: 0.2s; }
.resume-section-box:nth-child(3) { animation-delay: 0.3s; }
.resume-section-box:nth-child(4) { animation-delay: 0.4s; }

.resume-section-box h3 {
    font-size: 0.72rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 1.8px;
    margin-bottom: var(--space-6);
    display: flex;
    align-items: center;
    gap: var(--space-3);
    color: var(--text-tertiary);
}

.resume-section-box h3 i,
.resume-section-box h3 svg {
    color: var(--accent);
    font-size: 0.95rem;
    margin-right: var(--space-2);
    flex-shrink: 0;
}

.resume-card {
    background: var(--card-bg);
    border: 1px solid var(--border);
    padding: var(--space-6);
    border-radius: var(--radius-lg);
    margin-bottom: var(--space-4);
    transition: all var(--duration-base) ease;
}

.resume-card:hover {
    border-color: var(--border-strong);
    background: var(--btn-bg);
    box-shadow: var(--shadow);
}

.resume-card h4 {
    font-size: 1.15rem;
    font-weight: 700;
    margin-bottom: var(--space-1);
    color: var(--text-primary);
    letter-spacing: -0.3px;
}

.resume-card .subheading {
    font-size: 0.9rem;
    color: var(--text-secondary);
    margin-bottom: var(--space-2);
    font-weight: 500;
}

.resume-card p {
    font-size: 0.98rem;
    color: var(--text-secondary);
    line-height: 1.7;
}

.resume-list {
    list-style: none;
    padding: 0;
}

.resume-list li {
    font-size: 0.95rem;
    color: var(--text-secondary);
    margin-bottom: var(--space-3);
    display: flex;
    align-items: flex-start;
    gap: var(--space-3);
    line-height: 1.6;
}

.resume-list li::before {
    content: ""; /* Removed the ugly '>' indicator */
}

.resume-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
    gap: var(--space-3);
    list-style: none;
    padding: 0;
}

.resume-grid li {
    font-size: 0.95rem;
    color: var(--text-secondary);
    display: flex;
    align-items: center;
    gap: var(--space-2);
}

.resume-footer-badges {
    margin-top: var(--space-8);
    padding-top: var(--space-6);
    border-top: 1px dashed var(--border);
    display: flex;
    justify-content: center;
    opacity: 0.6;
    transition: opacity var(--duration-base) ease;
}

.resume-footer-badges:hover {
    opacity: 1;
}

.web-badges {
    display: flex;
    flex-wrap: wrap;
    gap: 12px;
    justify-content: center;
    max-width: 400px;
}

.web-badges img {
    height: 31px;
    width: 88px;
    image-rendering: pixelated; /* classic retro crisp scaling */
    border: 1px solid transparent;
    transition: transform var(--duration-fast) ease, filter var(--duration-fast) ease, border-color var(--duration-fast) ease;
    filter: grayscale(0.5) opacity(0.85);
    border-radius: 2px;
}

.web-badges img:hover {
    transform: scale(1.05) rotate(-2deg);
    filter: grayscale(0) opacity(1) drop-shadow(0 0 6px var(--accent-glow));
    border-color: var(--accent);
}

.skill-chips {
    display: flex;
    flex-wrap: wrap;
    gap: var(--space-2);
    list-style: none;
}

.skill-chips li {
    background: var(--btn-bg);
    border: 1px solid var(--border);
    padding: 6px 14px;
    border-radius: var(--radius-full);
    font-size: 0.82rem;
    font-weight: 500;
    color: var(--text-secondary);
    transition: all var(--duration-fast) ease;
    position: relative;
    overflow: hidden;
}

.skill-chips li::before {
    content: '';
    position: absolute;
    top: 0; left: -100%;
    width: 100%; height: 100%;
    background: linear-gradient(90deg, transparent, rgba(255,255,255,0.05), transparent);
    transition: all 0.5s ease;
}

.skill-chips li:hover::before {
    left: 100%;
}

.skill-chips li:hover {
    background: var(--accent);
    color: var(--bg-primary);
    border-color: var(--accent);
    transform: translateY(-3px);
    box-shadow: 0 4px 12px var(--accent-glow);
}

.resume-link {
    display: inline-flex;
    align-items: center;
    gap: var(--space-2);
    color: var(--accent);
    text-decoration: none;
    font-weight: 600;
    font-size: 0.9rem;
    margin-top: var(--space-3);
    transition: all var(--duration-fast) ease;
}

.resume-link i, .resume-link svg {
    transition: transform var(--duration-fast) ease, filter var(--duration-fast) ease;
}

.resume-link:hover {
    color: var(--accent-hover);
    transform: translateX(4px);
    opacity: 1;
}

.resume-link:hover i, .resume-link:hover svg {
    transform: scale(1.2);
    filter: drop-shadow(0 0 5px var(--accent-glow));
}

.panel-backdrop {
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(0, 0, 0, 0.45);
    -webkit-backdrop-filter: blur(5px);
            backdrop-filter: blur(5px);
    z-index: 1999;
    opacity: 0;
    visibility: hidden;
    pointer-events: none;
    transition: 
        opacity var(--duration-slow) ease,
        visibility var(--duration-slow) ease;
}

.panel-backdrop.active {
    opacity: 1;
    visibility: visible;
    pointer-events: auto;
}

.mobile-resume-footer {
    display: none;
}
/*# sourceMappingURL=data:application/json;base64,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Z0I7SUFDaEIsNEJBQTRCO0lBQzVCLHlDQUF5QztBQUM3Qzs7QUFFQTtJQUNJLHlCQUF5QjtJQUN6Qix3QkFBd0I7SUFDeEIsMkJBQTJCO0lBQzNCLDJCQUEyQjtBQUMvQjs7QUFFQTtJQUNJLG9CQUFvQjtJQUNwQixtQkFBbUI7SUFDbkIsbUJBQW1CO0lBQ25CLG9CQUFvQjtJQUNwQixxQkFBcUI7SUFDckIsZ0JBQWdCO0lBQ2hCLGlCQUFpQjtJQUNqQiwwQkFBMEI7SUFDMUIsNkNBQTZDO0FBQ2pEOztBQUVBO0lBQ0ksWUFBWTtBQUNoQjs7QUFFQTtJQUNJLGVBQWU7SUFDZixNQUFNO0lBQ04sT0FBTztJQUNQLFFBQVE7SUFDUixTQUFTO0lBQ1QsK0JBQStCO0lBRS9CLGtDQUEwQjtZQUExQiwwQkFBMEI7SUFDMUIsYUFBYTtJQUNiLFVBQVU7SUFDVixrQkFBa0I7SUFDbEIsb0JBQW9CO0lBQ3BCOzs0Q0FFd0M7QUFDNUM7O0FBRUE7SUFDSSxVQUFVO0lBQ1YsbUJBQW1CO0lBQ25CLG9CQUFvQjtBQUN4Qjs7QUFFQTtJQUNJLGFBQWE7QUFDakIiLCJmaWxlIjoic3R5bGUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiXG4vKiDilIDilIAgQ3Jvc3MtYnJvd3NlciBiYXNlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqL1xuaHRtbCB7XG4gICAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xuICAgIC1tcy10ZXh0LXNpemUtYWRqdXN0OiAxMDAlO1xuICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoO1xufVxuXG4vKiBEYXJrUmVhZGVyIG92ZXJyaWRlIOKAlCBGb3JjZSBwcmVzZXJ2YXRpb24gb2Ygb3JpZ2luYWwgYWVzdGhldGljICovXG5odG1sW2RhdGEtZGFya3JlYWRlci1tb2RlXSxcbmh0bWxbZGF0YS1kYXJrcmVhZGVyLXNjaGVtZV0sXG5bZGF0YS1kYXJrcmVhZGVyLWlubGluZS1iZ2NvbG9yXSxcbltkYXRhLWRhcmtyZWFkZXItaW5saW5lLWNvbG9yXSxcbltkYXRhLWRhcmtyZWFkZXItaW5saW5lLWJvcmRlcl0ge1xuICAgIGZpbHRlcjogbm9uZSAhaW1wb3J0YW50O1xuICAgIC0tZGFya3JlYWRlci1pbmxpbmUtYmdjb2xvcjogaW5pdGlhbCAhaW1wb3J0YW50O1xuICAgIC0tZGFya3JlYWRlci1pbmxpbmUtY29sb3I6IGluaXRpYWwgIWltcG9ydGFudDtcbiAgICAtLWRhcmtyZWFkZXItaW5saW5lLWJvcmRlcjogaW5pdGlhbCAhaW1wb3J0YW50O1xufVxuXG5AZm9udC1mYWNlIHtcbiAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nO1xuICAgIGZvbnQtZGlzcGxheTogc3dhcDtcbiAgICBzcmM6IGxvY2FsKCdTRiBNb25vJyksIGxvY2FsKCdTRk1vbm8tUmVndWxhcicpO1xufVxuXG4qLCAqOjpiZWZvcmUsICo6OmFmdGVyIHtcbiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIG1hcmdpbjogMDtcbiAgICBwYWRkaW5nOiAwO1xufVxuXG5pbWcsIHZpZGVvIHsgbWF4LXdpZHRoOiAxMDAlOyBoZWlnaHQ6IGF1dG87IGRpc3BsYXk6IGJsb2NrOyB9XG5cbi8qIOKUgOKUgCBEZXNpZ24gVG9rZW5zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqL1xuOnJvb3Qge1xuXG4gICAgLyogU3BhY2luZyBzY2FsZSAqL1xuICAgIC0tc3BhY2UtMTogMC4yNXJlbTtcbiAgICAtLXNwYWNlLTI6IDAuNXJlbTtcbiAgICAtLXNwYWNlLTM6IDAuNzVyZW07XG4gICAgLS1zcGFjZS00OiAxcmVtO1xuICAgIC0tc3BhY2UtNTogMS4yNXJlbTtcbiAgICAtLXNwYWNlLTY6IDEuNXJlbTtcbiAgICAtLXNwYWNlLTg6IDJyZW07XG4gICAgLS1zcGFjZS0xMDogMi41cmVtO1xuICAgIC0tc3BhY2UtMTI6IDNyZW07XG5cbiAgICAvKiBCb3JkZXIgcmFkaXVzICovXG4gICAgLS1yYWRpdXMteHM6IDZweDtcbiAgICAtLXJhZGl1cy1zbTogMTBweDtcbiAgICAtLXJhZGl1cy1tZDogMTRweDtcbiAgICAtLXJhZGl1cy1sZzogMjBweDtcbiAgICAtLXJhZGl1cy14bDogMjhweDtcbiAgICAtLXJhZGl1cy1mdWxsOiA5OTk5cHg7XG5cbiAgICAvKiBNb3Rpb24gKi9cbiAgICAtLWVhc2Utb3V0OiBjdWJpYy1iZXppZXIoMC4xNiwgMSwgMC4zLCAxKTtcbiAgICAtLWVhc2Utc3ByaW5nOiBjdWJpYy1iZXppZXIoMC4zNCwgMS41NiwgMC42NCwgMSk7XG4gICAgLS1kdXJhdGlvbi1mYXN0OiAxNTBtcztcbiAgICAtLWR1cmF0aW9uLWJhc2U6IDIyMG1zO1xuICAgIC0tZHVyYXRpb24tc2xvdzogMzgwbXM7XG5cbiAgICAvKiDilIDilIAgRGFyayBUaGVtZSDigJQgU2hlcmxvY2sgRGFyayBBY2FkZW1pYSAoMjIxQiBCYWtlciBTdCkg4pSA4pSA4pSA4pSA4pSA4pSAICovXG4gICAgLS1iZy1wcmltYXJ5LWRhcms6ICAgICMxMTEwMGY7IC8qIERlZXAgbWFob2dhbnkgLyBwaXBlIHNtb2tlICovXG4gICAgLS1iZy1zZWNvbmRhcnktZGFyazogICMxODE2MTU7IC8qIE9sZCBsZWF0aGVyIGFybWNoYWlyICovXG4gICAgLS1iZy1lbGV2YXRlZC1kYXJrOiAgICMxZjFjMWI7XG4gICAgLS1jYXJkLWJnLWRhcms6ICAgICAgIHJnYmEoMjgsIDI1LCAyNCwgMC4zNSk7IC8qIFNtb2t5IGdsYXNzICovXG4gICAgLS10ZXh0LXByaW1hcnktZGFyazogICNlNmRmZDE7IC8qIFZpY3RvcmlhbiBsZXR0ZXJoZWFkIC8gUGFyY2htZW50ICovXG4gICAgLS10ZXh0LXNlY29uZGFyeS1kYXJrOiNhMTliOGU7IC8qIExvbmRvbiBzbW9nIC8gRHVzdHkgYXJjaGl2ZSAqL1xuICAgIC0tdGV4dC10ZXJ0aWFyeS1kYXJrOiAjNzg3MzY3O1xuICAgIC0tYWNjZW50LWRhcms6ICAgICAgICAjYzI5ZjY4OyAvKiBBbnRpcXVlIEJyYXNzIC8gUG9ja2V0IFdhdGNoIC8gTWFnbmlmeWluZyBHbGFzcyAqL1xuICAgIC0tYWNjZW50LWdsb3ctZGFyazogICByZ2JhKDE5NCwgMTU5LCAxMDQsIDAuMTUpO1xuICAgIC0tYm9yZGVyLWRhcms6ICAgICAgICByZ2JhKDE5NCwgMTU5LCAxMDQsIDAuMTIpO1xuICAgIC0tYm9yZGVyLXN0cm9uZy1kYXJrOiByZ2JhKDE5NCwgMTU5LCAxMDQsIDAuMjgpO1xuICAgIC0tYnRuLWJnLWRhcms6ICAgICAgICByZ2JhKDE5NCwgMTU5LCAxMDQsIDAuMDgpOyAvKiBGYWRlZCBicmFzcyB0aW50ICovXG4gICAgLS1idG4taG92ZXItZGFyazogICAgIHJnYmEoMTk0LCAxNTksIDEwNCwgMC4xOCk7XG4gICAgLS1zaGFkb3ctZGFyazogICAgICAgIDAgOHB4IDMycHggcmdiYSgwLCAwLCAwLCAwLjUpO1xuICAgIC0tc2hhZG93LWhvdmVyLWRhcms6ICAwIDE2cHggNDhweCByZ2JhKDAsIDAsIDAsIDAuNyk7XG4gICAgLS1wYXJ0aWNsZS1jb2xvci1kYXJrOiAnI2MyOWY2OCc7IC8qIEZsb2F0aW5nIGFzaCAvIGR1c3QgbW90ZXMgaW4gZ2FzbGlnaHQgKi9cbiAgICAtLXRlcm1pbmFsLWJnLWRhcms6ICAgcmdiYSgxNywgMTYsIDE1LCAwLjMwKTsgLyogSGVhdnkgYmx1ciBmb3IgZm9nZ3kgbmlnaHQgZWZmZWN0ICovXG5cbiAgICAvKiDilIDilIAgTGlnaHQgVGhlbWUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovXG4gICAgLS1iZy1wcmltYXJ5LWxpZ2h0OiAgICAjZjRmMmVlO1xuICAgIC0tYmctc2Vjb25kYXJ5LWxpZ2h0OiAgI2VjZThlMDtcbiAgICAtLWJnLWVsZXZhdGVkLWxpZ2h0OiAgICNmZmZmZmY7XG4gICAgLS1jYXJkLWJnLWxpZ2h0OiAgICAgICByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNTUpO1xuICAgIC0tdGV4dC1wcmltYXJ5LWxpZ2h0OiAgIzFhMWExYTtcbiAgICAtLXRleHQtc2Vjb25kYXJ5LWxpZ2h0OiM1YTVhNWE7XG4gICAgLS10ZXh0LXRlcnRpYXJ5LWxpZ2h0OiAjYWFhYWFhO1xuICAgIC0tYWNjZW50LWxpZ2h0OiAgICAgICAgIzhCNDUxMztcbiAgICAtLWFjY2VudC1nbG93LWxpZ2h0OiAgIHJnYmEoMTM5LCA2OSwgMTksIDAuMik7XG4gICAgLS1ib3JkZXItbGlnaHQ6ICAgICAgICByZ2JhKDEzOSwgNjksIDE5LCAwLjE1KTtcbiAgICAtLWJvcmRlci1zdHJvbmctbGlnaHQ6IHJnYmEoMTM5LCA2OSwgMTksIDAuMjgpO1xuICAgIC0tYnRuLWJnLWxpZ2h0OiAgICAgICAgcmdiYSgxMzksIDY5LCAxOSwgMC4wNSk7IC8qIEV4dHJlbWVseSBzdWJ0bGUgd2FybXRoLCBtb3N0bHkgZ3JleSAqL1xuICAgIC0tYnRuLWhvdmVyLWxpZ2h0OiAgICAgcmdiYSgxMzksIDY5LCAxOSwgMC4xMCk7XG4gICAgLS1zaGFkb3ctbGlnaHQ6ICAgICAgICAwIDRweCAxNnB4IHJnYmEoMCwgMCwgMCwgMC4wNSk7IC8qIFNvZnRlciwgdGlnaHRlciByZXN0aW5nIHNoYWRvdyAqL1xuICAgIC0tc2hhZG93LWhvdmVyLWxpZ2h0OiAgMCA4cHggMjRweCByZ2JhKDAsIDAsIDAsIDAuMDgpOyAvKiBSZWR1Y2VkIHNwcmVhZCBmb3IgaG92ZXIgc2hhZG93cyAqL1xuICAgIC0tcGFydGljbGUtY29sb3ItbGlnaHQ6ICcjOEI0NTEzJztcbiAgICAtLXRlcm1pbmFsLWJnLWxpZ2h0OiAgIHJnYmEoMjQ1LCAyNDIsIDIzNSwgMC40NSk7IC8qIFRoaWNrZXIgZnJvc3RlZCBnbGFzcywgbGVzcyB0cmFuc3BhcmVudCAqL1xuXG4gICAgLyog4pSA4pSAIEFjdGl2ZSB0b2tlbnMgKGRlZmF1bHRzID0gZGFyaykg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovXG4gICAgLS1iZy1wcmltYXJ5OiAgICB2YXIoLS1iZy1wcmltYXJ5LWRhcmspO1xuICAgIC0tYmctc2Vjb25kYXJ5OiAgdmFyKC0tYmctc2Vjb25kYXJ5LWRhcmspO1xuICAgIC0tYmctZWxldmF0ZWQ6ICAgdmFyKC0tYmctZWxldmF0ZWQtZGFyayk7XG4gICAgLS1jYXJkLWJnOiAgICAgICB2YXIoLS1jYXJkLWJnLWRhcmspO1xuICAgIC0tdGV4dC1wcmltYXJ5OiAgdmFyKC0tdGV4dC1wcmltYXJ5LWRhcmspO1xuICAgIC0tdGV4dC1zZWNvbmRhcnk6dmFyKC0tdGV4dC1zZWNvbmRhcnktZGFyayk7XG4gICAgLS10ZXh0LXRlcnRpYXJ5OiB2YXIoLS10ZXh0LXRlcnRpYXJ5LWRhcmspO1xuICAgIC0tYWNjZW50OiAgICAgICAgdmFyKC0tYWNjZW50LWRhcmspO1xuICAgIC0tYWNjZW50LWdsb3c6ICAgdmFyKC0tYWNjZW50LWdsb3ctZGFyayk7XG4gICAgLS1ib3JkZXI6ICAgICAgICB2YXIoLS1ib3JkZXItZGFyayk7XG4gICAgLS1ib3JkZXItc3Ryb25nOiB2YXIoLS1ib3JkZXItc3Ryb25nLWRhcmspO1xuICAgIC0tYnRuLWJnOiAgICAgICAgdmFyKC0tYnRuLWJnLWRhcmspO1xuICAgIC0tYnRuLWhvdmVyOiAgICAgdmFyKC0tYnRuLWhvdmVyLWRhcmspO1xuICAgIC0tc2hhZG93OiAgICAgICAgdmFyKC0tc2hhZG93LWRhcmspO1xuICAgIC0tc2hhZG93LWhvdmVyOiAgdmFyKC0tc2hhZG93LWhvdmVyLWRhcmspO1xuICAgIC0tdGVybWluYWwtYmc6ICAgdmFyKC0tdGVybWluYWwtYmctZGFyayk7XG4gICAgLS1wYXJ0aWNsZS1jb2xvcjp2YXIoLS1wYXJ0aWNsZS1jb2xvci1kYXJrKTtcbn1cblxuYm9keS5saWdodC10aGVtZSB7XG4gICAgLS1iZy1wcmltYXJ5OiAgICB2YXIoLS1iZy1wcmltYXJ5LWxpZ2h0KTtcbiAgICAtLWJnLXNlY29uZGFyeTogIHZhcigtLWJnLXNlY29uZGFyeS1saWdodCk7XG4gICAgLS1iZy1lbGV2YXRlZDogICB2YXIoLS1iZy1lbGV2YXRlZC1saWdodCk7XG4gICAgLS1jYXJkLWJnOiAgICAgICB2YXIoLS1jYXJkLWJnLWxpZ2h0KTtcbiAgICAtLXRleHQtcHJpbWFyeTogIHZhcigtLXRleHQtcHJpbWFyeS1saWdodCk7XG4gICAgLS10ZXh0LXNlY29uZGFyeTp2YXIoLS10ZXh0LXNlY29uZGFyeS1saWdodCk7XG4gICAgLS10ZXh0LXRlcnRpYXJ5OiB2YXIoLS10ZXh0LXRlcnRpYXJ5LWxpZ2h0KTtcbiAgICAtLWFjY2VudDogICAgICAgIHZhcigtLWFjY2VudC1saWdodCk7XG4gICAgLS1hY2NlbnQtZ2xvdzogICB2YXIoLS1hY2NlbnQtZ2xvdy1saWdodCk7XG4gICAgLS1ib3JkZXI6ICAgICAgICB2YXIoLS1ib3JkZXItbGlnaHQpO1xuICAgIC0tYm9yZGVyLXN0cm9uZzogdmFyKC0tYm9yZGVyLXN0cm9uZy1saWdodCk7XG4gICAgLS1idG4tYmc6ICAgICAgICB2YXIoLS1idG4tYmctbGlnaHQpO1xuICAgIC0tYnRuLWhvdmVyOiAgICAgdmFyKC0tYnRuLWhvdmVyLWxpZ2h0KTtcbiAgICAtLXNoYWRvdzogICAgICAgIHZhcigtLXNoYWRvdy1saWdodCk7XG4gICAgLS1zaGFkb3ctaG92ZXI6ICB2YXIoLS1zaGFkb3ctaG92ZXItbGlnaHQpO1xuICAgIC0tdGVybWluYWwtYmc6ICAgdmFyKC0tdGVybWluYWwtYmctbGlnaHQpO1xuICAgIC0tcGFydGljbGUtY29sb3I6dmFyKC0tcGFydGljbGUtY29sb3ItbGlnaHQpO1xufVxuXG4vKiDilIDilIAgQmFzZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi9cbmJvZHkge1xuICAgIGZvbnQtZmFtaWx5OiAnSW50ZXInLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsXG4gICAgICAgICAgICAgICAgIFJvYm90bywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZjtcbiAgICBiYWNrZ3JvdW5kOiAjMTExMDBmOyAvKiBmYWxsYmFjazogbm8gQ1NTIHZhcnMgc3VwcG9ydCAqL1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWJnLXByaW1hcnkpO1xuICAgIGNvbG9yOiAjZTZkZmQxOyAvKiBmYWxsYmFjayAqL1xuICAgIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjY7XG4gICAgbWluLWhlaWdodDogMTAwdmg7XG4gICAgbWluLWhlaWdodDogLXdlYmtpdC1maWxsLWF2YWlsYWJsZTtcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XG4gICAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7XG4gICAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTtcbiAgICB0ZXh0LXJlbmRlcmluZzogb3B0aW1pemVMZWdpYmlsaXR5O1xuICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgdmFyKC0tZHVyYXRpb24tYmFzZSkgZWFzZSxcbiAgICAgICAgICAgICAgICBjb2xvciB2YXIoLS1kdXJhdGlvbi1iYXNlKSBlYXNlO1xufVxuXG4vKiDilIDilIAgU1ZHcyAoSW5saW5lIEljb25zKSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi9cbnN2ZyB7XG4gICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tZmFzdCkgdmFyKC0tZWFzZS1vdXQpLCBcbiAgICAgICAgICAgICAgICBmaWxsIHZhcigtLWR1cmF0aW9uLWJhc2UpIGVhc2UsIFxuICAgICAgICAgICAgICAgIHN0cm9rZSB2YXIoLS1kdXJhdGlvbi1iYXNlKSBlYXNlO1xufVxuXG5bY2xhc3MqPVwiYnRuXCJdIHN2ZywgXG5bY2xhc3MqPVwibGlua1wiXSBzdmcsIFxuLnNvY2lhbC1saW5rIHN2ZywgXG4udGVjaC1pdGVtIHN2ZyB7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7IC8qIExldCBwYXJlbnQgaGFuZGxlIGludGVyYWN0aW9ucyAqL1xufVxuXG4vKiDilIDilIAgUHJvZmlsZSBTZWN0aW9uIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqL1xuLnByb2ZpbGUtY2FyZCxcbi5pbnRlcmVzdC10YWdzIHtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xufVxuXG4vKiDilIDilIAgRm9jdXMgJiBTZWxlY3Rpb24g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovXG4qOmZvY3VzIHsgb3V0bGluZTogbm9uZTsgfVxuKjpmb2N1cy12aXNpYmxlIHtcbiAgICBvdXRsaW5lOiAycHggc29saWQgdmFyKC0tYWNjZW50KTtcbiAgICBvdXRsaW5lLW9mZnNldDogM3B4O1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14cyk7XG59XG46OnNlbGVjdGlvbiB7IGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4xMik7IH1cbmJvZHkubGlnaHQtdGhlbWUgOjpzZWxlY3Rpb24geyBiYWNrZ3JvdW5kOiByZ2JhKDEzOSw2OSwxOSwwLjE1KTsgfVxuXG4vKiDilIDilIAgVGFwIGhpZ2hsaWdodCByZW1vdmFsIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqL1xuYnV0dG9uLCBhLCBbcm9sZT1cImJ1dHRvblwiXSxcbi50ZWNoLWl0ZW0sIC5zb2NpYWwtbGluaywgLmNvbnRhY3QtYnRuLFxuLmhlYWRlci1idG4sIC5wcm9maWxlLWJ0biwgLnNlc3Npb24tYnRuIHtcbiAgICAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHRyYW5zcGFyZW50O1xuICAgIC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuLyog4pSA4pSAIExheW91dCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi9cbi5jb250YWluZXIge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1heC13aWR0aDogMTA4MHB4O1xuICAgIG1hcmdpbjogMCBhdXRvO1xuICAgIHBhZGRpbmc6IDAgdmFyKC0tc3BhY2UtNik7XG59XG5cbi8qIOKUgOKUgCBQYXJ0aWNsZXMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovXG4jcGFydGljbGVzLWpzIHtcbiAgICBwb3NpdGlvbjogZml4ZWQ7XG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIHotaW5kZXg6IC0xO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuXG4jcGFydGljbGVzLWpzLmZhbGxiYWNrLWJhY2tncm91bmQge1xuICAgIGJhY2tncm91bmQ6XG4gICAgICAgIHJhZGlhbC1ncmFkaWVudCgycHggMnB4IGF0IDIwcHggMzBweCwgdmFyKC0tYWNjZW50KSwgdHJhbnNwYXJlbnQpLFxuICAgICAgICByYWRpYWwtZ3JhZGllbnQoMXB4IDFweCBhdCA5MHB4IDQwcHgsIHZhcigtLWFjY2VudCksIHRyYW5zcGFyZW50KTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IDIwMHB4IDEwMHB4O1xuICAgIGFuaW1hdGlvbjogcGFydGljbGVGbG9hdCAyMHMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gICAgb3BhY2l0eTogMC4zO1xufVxuXG5Aa2V5ZnJhbWVzIHBhcnRpY2xlRmxvYXQge1xuICAgIDAlLCAxMDAlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTsgfVxuICAgIDUwJSAgICAgICB7IHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoNXB4LCAtNXB4LCAwKTsgfVxufVxuXG5ib2R5LmZhbGxiYWNrLW1vZGUge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcsIHZhcigtLWJnLXByaW1hcnkpLCB2YXIoLS1iZy1zZWNvbmRhcnkpKTtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBIRUFERVJcbuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuLmhlYWRlciB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDEwMDtcbiAgICB3aWR0aDogMTAwJTtcbn1cblxuLmhlYWRlci1pbm5lciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS01KSB2YXIoLS1zcGFjZS02KTtcbiAgICBtYXgtd2lkdGg6IDEwODBweDtcbiAgICBtYXJnaW46IDAgYXV0bztcbn1cblxuLyogTG9nbyAqL1xuLmhlYWRlci1sb2dvIHtcbiAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0Nhc2NhZGlhIENvZGUnLCAnUm9ib3RvIE1vbm8nLCBtb25vc3BhY2U7XG4gICAgZm9udC1zaXplOiAxLjI1cmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgY29sb3I6IHZhcigtLWFjY2VudCk7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTIpO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbn1cblxuLm5ldHdvcmstaWNvbiBzdmcgY2lyY2xlLFxuLm5ldHdvcmstaWNvbiBzdmcgbGluZSB7XG4gICAgdHJhbnNpdGlvbjogc3Ryb2tlIHZhcigtLWR1cmF0aW9uLWJhc2UpIGVhc2U7XG59XG5cbi5oZWFkZXItbGVmdCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtNik7XG59XG5cbi5oZWFkZXItYnRuLWdyb3VwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1zcGFjZS0yKTtcbiAgICBtYXJnaW4tbGVmdDogdmFyKC0tc3BhY2UtMik7XG59XG5cbi8qIEJ1dHRvbnMgKi9cbi5oZWFkZXItYnRuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMik7XG4gICAgaGVpZ2h0OiAzNnB4O1xuICAgIHBhZGRpbmc6IDAgdmFyKC0tc3BhY2UtNCk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWZ1bGwpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWJ0bi1iZyk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTtcbiAgICBmb250LXNpemU6IDAuODc1cmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuMnB4O1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgICAgYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCksXG4gICAgICAgIGJvcmRlci1jb2xvciB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCksXG4gICAgICAgIGNvbG9yIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KSxcbiAgICAgICAgdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWZhc3QpIHZhcigtLWVhc2Utb3V0KSxcbiAgICAgICAgYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDI7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbn1cblxuLmhlYWRlci1idG46aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWJ0bi1ob3Zlcik7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ib3JkZXItc3Ryb25nKTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93KTtcbn1cblxuLmhlYWRlci1idG46YWN0aXZlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMC45Nyk7XG59XG5cbi5oZWFkZXItcmlnaHQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTIpO1xufVxuXG4vKiBUaGVtZSB0b2dnbGUgaWNvbnMgKi9cbi50aGVtZS1idG4gLmZhLXN1biAgeyBkaXNwbGF5OiBub25lOyB9XG4udGhlbWUtYnRuIC5mYS1tb29uIHsgZGlzcGxheTogYmxvY2s7IH1cbmJvZHkubGlnaHQtdGhlbWUgLnRoZW1lLWJ0biAuZmEtc3VuICB7IGRpc3BsYXk6IGJsb2NrOyB9XG5ib2R5LmxpZ2h0LXRoZW1lIC50aGVtZS1idG4gLmZhLW1vb24geyBkaXNwbGF5OiBub25lOyB9XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgTUFJTiBDT05URU5UXG7ilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi5tYWluLWNvbnRlbnQge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAxO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1pbi1oZWlnaHQ6IGNhbGMoMTAwdmggLSA4MHB4KTtcbiAgICBwYWRkaW5nOiAzLjVyZW0gMCB2YXIoLS1zcGFjZS0xMik7XG59XG5cbi5jb250ZW50IHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTEwKTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS04KTtcbn1cblxuLmxlZnQtc2VjdGlvbiB7XG4gICAgZmxleDogMTtcbiAgICBtaW4td2lkdGg6IDA7XG4gICAgbWF4LXdpZHRoOiA2MDBweDtcbn1cblxuLnJpZ2h0LXNlY3Rpb24ge1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIHdpZHRoOiAzMDBweDtcbn1cblxuLyog4pSA4pSAIEFib3V0IC8gSGVybyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi9cbi5hYm91dCB7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2UtNCkgMDtcbiAgICB1c2VyLXNlbGVjdDogdGV4dDtcbn1cblxuLyogXCJsb3dhaXJcIiBnbGl0Y2ggaGVhZGluZyAqL1xuLmdsaXRjaCB7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMSk7XG4gICAgZm9udC1zaXplOiAxLjhyZW07XG4gICAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTtcbiAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7XG4gICAgbGluZS1oZWlnaHQ6IDEuMjtcbn1cblxuLyogXCJIZXkuXCIgZ3JlZXRpbmcgKi9cbi5oaS10ZXh0IHtcbiAgICBmb250LXNpemU6IDEuOHJlbTsgLyogZmFsbGJhY2sgZm9yIGJyb3dzZXJzIHdpdGhvdXQgY2xhbXAoKSAqL1xuICAgIGZvbnQtc2l6ZTogY2xhbXAoMS42cmVtLCAzdncsIDJyZW0pO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgY29sb3I6IHZhcigtLWFjY2VudCk7XG4gICAgbGV0dGVyLXNwYWNpbmc6IC0wLjVweDtcbiAgICBtYXJnaW4tdG9wOiB2YXIoLS1zcGFjZS0xKTtcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0zKTtcbiAgICBhbmltYXRpb246IGZhZGVTbGlkZURvd24gMC44cyB2YXIoLS1lYXNlLW91dCkgYm90aDtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG5cbkBrZXlmcmFtZXMgZmFkZVNsaWRlRG93biB7XG4gICAgZnJvbSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMTZweCk7IH1cbiAgICB0byAgIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOyB9XG59XG5cbi5oZXJvLXN1YnRleHQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTMpO1xuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTMpO1xufVxuXG4uaGVyby1zdWJ0ZXh0IC5saW5lIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICB3aWR0aDogNnB4O1xuICAgIGhlaWdodDogNnB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWFjY2VudCk7XG4gICAgb3BhY2l0eTogMC44O1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcbiAgICBmbGV4LXNocmluazogMDtcbn1cblxuLmhlcm8tc3VidGV4dCBwIHtcbiAgICBmb250LXNpemU6IDAuOTVyZW07XG4gICAgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTtcbiAgICBsZXR0ZXItc3BhY2luZzogMC4ycHg7XG59XG5cbi5hYm91dCA+IHAge1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjc1O1xuICAgIG1heC13aWR0aDogNTJjaDtcbn1cblxuLmhpZ2hsaWdodCB7XG4gICAgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG4gICAgZm9udC1zaXplOiAwLjlyZW07XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtMik7XG4gICAgb3BhY2l0eTogMC43NTtcbn1cblxuLyog4pSA4pSAIFRlY2ggU3RhY2sg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovXG4udGVjaC1zdGFjayB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTMpO1xuICAgIG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTUpO1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMTA7XG59XG5cbi50ZWNoLWl0ZW0ge1xuICAgIHdpZHRoOiA0MnB4O1xuICAgIGhlaWdodDogNDJweDtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tYnRuLWJnKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBjb2xvcjogdmFyKC0tYWNjZW50KTtcbiAgICBmb250LXNpemU6IDEuMXJlbTtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHRyYW5zaXRpb246XG4gICAgICAgIGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpLFxuICAgICAgICBib3JkZXItY29sb3IgdmFyKC0tZHVyYXRpb24tYmFzZSkgdmFyKC0tZWFzZS1vdXQpLFxuICAgICAgICB0cmFuc2Zvcm0gdmFyKC0tZHVyYXRpb24tZmFzdCkgdmFyKC0tZWFzZS1zcHJpbmcpLFxuICAgICAgICBib3gtc2hhZG93IHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KTtcbn1cblxuLnRlY2gtaXRlbTpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tYnRuLWhvdmVyKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWJvcmRlci1zdHJvbmcpO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNHB4KTtcbiAgICBib3gtc2hhZG93OiAwIDhweCAyNHB4IHZhcigtLWFjY2VudC1nbG93KTtcbn1cblxuLyogVG9vbHRpcCAqL1xuLnRlY2gtaXRlbTo6YmVmb3JlIHtcbiAgICBjb250ZW50OiBhdHRyKGRhdGEtdG9vbHRpcCk7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJvdHRvbTogY2FsYygxMDAlICsgOHB4KTtcbiAgICBsZWZ0OiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpIHRyYW5zbGF0ZVkoNHB4KTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iZy1lbGV2YXRlZCk7XG4gICAgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLXN0cm9uZyk7XG4gICAgcGFkZGluZzogNXB4IDExcHg7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLXhzKTtcbiAgICBmb250LXNpemU6IDAuNzhyZW07XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSB2YXIoLS1kdXJhdGlvbi1iYXNlKSBlYXNlLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1iYXNlKSBlYXNlO1xuICAgIHotaW5kZXg6IDEwMDtcbiAgICBib3gtc2hhZG93OiAwIDRweCAxNnB4IHJnYmEoMCwwLDAsMC4zKTtcbn1cblxuLnRlY2gtaXRlbTpob3Zlcjo6YmVmb3JlLFxuLnRlY2gtaXRlbS50b29sdGlwLXZpc2libGU6OmJlZm9yZSB7XG4gICAgb3BhY2l0eTogMTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSkgdHJhbnNsYXRlWSgwKTtcbn1cblxuLyog4pSA4pSAIENvbnRhY3QgQnV0dG9ucyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi9cbi5jb250YWN0LWJ1dHRvbnMge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMyk7XG4gICAgbWFyZ2luLXRvcDogdmFyKC0tc3BhY2UtNik7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIHotaW5kZXg6IDI7XG59XG5cbi5jb250YWN0LWJ0biB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTIpO1xuICAgIGhlaWdodDogNDJweDtcbiAgICBwYWRkaW5nOiAwIHZhcigtLXNwYWNlLTUpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1zbSk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tYnRuLWJnKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO1xuICAgIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpO1xuICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgICBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KSxcbiAgICAgICAgYm9yZGVyLWNvbG9yIHZhcigtLWR1cmF0aW9uLWJhc2UpIHZhcigtLWVhc2Utb3V0KSxcbiAgICAgICAgdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWZhc3QpIHZhcigtLWVhc2Utb3V0KSxcbiAgICAgICAgYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbi1iYXNlKSB2YXIoLS1lYXNlLW91dCk7XG59XG5cbi5jb250YWN0LWJ0bjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tYnRuLWhvdmVyKTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWJvcmRlci1zdHJvbmcpO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMnB4KTtcbiAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3cpO1xufVxuXG4uY29udGFjdC1idG46YWN0aXZlIHtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCkgc2NhbGUoMC45Nyk7XG59XG5cbi5jb250YWN0LWJ0biBpIHsgZm9udC1zaXplOiAxcmVtOyB9XG5cbiNzZXNzaW9uLWNvcGllZCB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG4gICAgZm9udC1zaXplOiAwLjgycmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA1MDA7XG4gICAgY29sb3I6IHZhcigtLWFjY2VudCk7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuM3B4O1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIFBST0ZJTEUgQ0FSRFxu4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4ucHJvZmlsZS1jYXJkIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBiYWNrZ3JvdW5kOiAjMWMxOTE4OyAvKiBzb2xpZCBmYWxsYmFjayBmb3Igbm8gQ1NTIHZhcnMgKi9cbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jYXJkLWJnKTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMteGwpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMTk0LDE1OSwxMDQsMC4xMik7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDJweCkgc2F0dXJhdGUoMTEwJSk7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDJweCkgc2F0dXJhdGUoMTEwJSk7XG5cbiAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3cpO1xuICAgIHRyYW5zaXRpb246XG4gICAgICAgIHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1zbG93KSB2YXIoLS1lYXNlLW91dCksXG4gICAgICAgIGJveC1zaGFkb3cgdmFyKC0tZHVyYXRpb24tc2xvdykgdmFyKC0tZWFzZS1vdXQpLFxuICAgICAgICBib3JkZXItY29sb3IgdmFyKC0tZHVyYXRpb24tYmFzZSkgZWFzZTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMjtcbn1cblxuLnByb2ZpbGUtY2FyZDpob3ZlciB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC02cHgpO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdy1ob3Zlcik7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ib3JkZXItc3Ryb25nKTtcbn1cblxuLyogQmFubmVyICovXG4uY2FyZC1oZWFkZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBoZWlnaHQ6IDg4cHg7XG4gICAgb3ZlcmZsb3c6IHZpc2libGU7IC8qIGFsbG93IGF2YXRhciB0byBvdmVyZmxvdyBiZWxvdyAqL1xufVxuXG4uc2l0ZS1oYXJtb255LWJhbm5lciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14bCkgdmFyKC0tcmFkaXVzLXhsKSAwIDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tYmctc2Vjb25kYXJ5KTtcbiAgICBiYWNrZ3JvdW5kLXNpemU6IGNvdmVyO1xuICAgIGJhY2tncm91bmQtcG9zaXRpb246IGNlbnRlcjtcbiAgICAvKiBIaWdoLXF1YWxpdHkgbm9pc2UgZmFsbGJhY2sgZm9yIGxvYWQgZmFpbHVyZXMgKi9cbiAgICBiYWNrZ3JvdW5kLWltYWdlOiBsaW5lYXItZ3JhZGllbnQocmdiYSgxNywgMTYsIDE1LCAwLjQpLCByZ2JhKDE3LCAxNiwgMTUsIDAuNCkpLFxuICAgICAgICAgICAgICAgICAgICAgIHVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM0Nzdmcgdmlld0JveD0nMCAwIDIwMCAyMDAnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM0UlM0NmaWx0ZXIgaWQ9J25vaXNlRmlsdGVyJyUzRSUzQ2ZlVHVyYnVsZW5jZSB0eXBlPSdmcmFjdGFsTm9pc2UnIGJhc2VGcmVxdWVuY3k9JzAuNjUnIG51bU9jdGF2ZXM9JzMnIHN0aXRjaFRpbGVzPSdzdGl0Y2gnLyUzRSUzQy9maWx0ZXIlM0UlM0NyZWN0IHdpZHRoPScxMDAlMjUnIGhlaWdodD0nMTAwJTI1JyBmaWx0ZXI9J3VybCglMjNub2lzZUZpbHRlciknLyUzRSUzQy9zdmclM0VcIik7XG4gICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1pbWFnZSAwLjVzIGVhc2U7XG59XG5cbi8qIEF2YXRhciAqL1xuLnByb2ZpbGUtaW1nIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogNTAlO1xuICAgIGJvdHRvbTogLTM4cHg7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpO1xuICAgIHdpZHRoOiA3NnB4O1xuICAgIGhlaWdodDogNzZweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgb2JqZWN0LWZpdDogY292ZXI7XG4gICAgYm9yZGVyOiAzcHggc29saWQgdmFyKC0tYmctcHJpbWFyeSk7XG4gICAgYm94LXNoYWRvdzogMCA0cHggMjBweCByZ2JhKDAsMCwwLDAuNSk7XG4gICAgei1pbmRleDogMTA7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIHZhcigtLWR1cmF0aW9uLWJhc2UpIGVhc2U7XG59XG5cbi5jYXJkLWJvZHkge1xuICAgIHBhZGRpbmc6IDUwcHggdmFyKC0tc3BhY2UtNSkgdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5wcm9maWxlLWluZm8geyB0ZXh0LWFsaWduOiBjZW50ZXI7IH1cblxuLnByb2ZpbGUtaW5mbyBoMiB7XG4gICAgZm9udC1zaXplOiAxLjFyZW07XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTtcbiAgICBsZXR0ZXItc3BhY2luZzogLTAuMnB4O1xuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTIpO1xufVxuXG4ucHJvZmlsZS1tZXRhIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMik7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5iYWRnZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBwYWRkaW5nOiAzcHggMTBweDtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtZnVsbCk7XG4gICAgZm9udC1zaXplOiAwLjcycmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG4gICAgbGV0dGVyLXNwYWNpbmc6IDAuM3B4O1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tYnRuLWJnKTtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpO1xufVxuXG4ucHJvZmlsZS1hY3Rpb24ge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNCk7XG59XG5cbi5wcm9maWxlLWJ0biB7XG4gICAgaGVpZ2h0OiAyNnB4O1xuICAgIHBhZGRpbmc6IDAgdmFyKC0tc3BhY2UtMyk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWZ1bGwpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWJ0bi1iZyk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpO1xuICAgIGZvbnQtc2l6ZTogMC43MnJlbTtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjRweDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgICAgYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1iYXNlKSBlYXNlLFxuICAgICAgICBib3JkZXItY29sb3IgdmFyKC0tZHVyYXRpb24tYmFzZSkgZWFzZSxcbiAgICAgICAgY29sb3IgdmFyKC0tZHVyYXRpb24tZmFzdCkgZWFzZSxcbiAgICAgICAgdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWZhc3QpIHZhcigtLWVhc2Utc3ByaW5nKTtcbn1cblxuLnByb2ZpbGUtYnRuOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQpO1xuICAgIGNvbG9yOiB2YXIoLS1iZy1wcmltYXJ5KTtcbiAgICBib3JkZXItY29sb3I6IHZhcigtLWFjY2VudCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xcHgpO1xufVxuXG4vKiDilIDilIAgQXVkaW8gVm9jYWxpemVyIChkaXZpZGVyIGxpbmUgc3R5bGUpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqL1xuLmF1ZGlvLXZvY2FsaXplciB7XG4gICAgaGVpZ2h0OiAxcHg7XG4gICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDkwZGVnLCB0cmFuc3BhcmVudCwgdmFyKC0tYm9yZGVyKSwgdHJhbnNwYXJlbnQpO1xuICAgIG1hcmdpbjogdmFyKC0tc3BhY2UtNCkgMDtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIHZhcigtLWR1cmF0aW9uLWJhc2UpIGVhc2U7XG59XG5cbi5hdWRpby12b2NhbGl6ZXI6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZywgdHJhbnNwYXJlbnQsIHZhcigtLWJvcmRlci1zdHJvbmcpLCB0cmFuc3BhcmVudCk7XG59XG5cbi52b2NhbGl6ZXItcGxheS1idG4ge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IDUwJTtcbiAgICBsZWZ0OiA1MCU7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7XG4gICAgd2lkdGg6IDIycHg7XG4gICAgaGVpZ2h0OiAyMnB4O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC10ZXJ0aWFyeSk7XG4gICAgZm9udC1zaXplOiAxMXB4O1xuICAgIHRyYW5zaXRpb246IGNvbG9yIHZhcigtLWR1cmF0aW9uLWJhc2UpIGVhc2UsIG9wYWNpdHkgdmFyKC0tZHVyYXRpb24tYmFzZSkgZWFzZTtcbiAgICBvcGFjaXR5OiAwLjc7XG59XG5cbi5hdWRpby12b2NhbGl6ZXI6aG92ZXIgLnZvY2FsaXplci1wbGF5LWJ0biB7IG9wYWNpdHk6IDE7IGNvbG9yOiB2YXIoLS1hY2NlbnQpOyB9XG5cbi5hdWRpby12b2NhbGl6ZXIucGxheWluZyAudm9jYWxpemVyLXBsYXktYnRuIHsgb3BhY2l0eTogMDsgcG9pbnRlci1ldmVudHM6IG5vbmU7IH1cblxuLnZvY2FsaXplci1iYXJzIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgdG9wOiA1MCU7XG4gICAgbGVmdDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgLyogRml4IGxlZnQgZHJpZnQgKi9cbiAgICBnYXA6IDNweDtcbiAgICBwYWRkaW5nOiAwIHZhcigtLXNwYWNlLTgpO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNpdGlvbjogb3BhY2l0eSB2YXIoLS1kdXJhdGlvbi1iYXNlKSBlYXNlO1xuICAgIG1pbi13aWR0aDogMTYwcHg7XG59XG5cbi5hdWRpby12b2NhbGl6ZXIucGxheWluZyAudm9jYWxpemVyLWJhcnMgeyBvcGFjaXR5OiAxOyB9XG5cbi52b2NhbGl6ZXItYmFyIHtcbiAgICB3aWR0aDogM3B4O1xuICAgIGhlaWdodDogOHB4O1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWFjY2VudCk7XG4gICAgYm9yZGVyLXJhZGl1czogMnB4O1xuICAgIG9wYWNpdHk6IDAuODtcbn1cblxuQGtleWZyYW1lcyBlcTEgIHsgMCUsMTAwJXt0cmFuc2Zvcm06c2NhbGVZKC4zKX0gNTAle3RyYW5zZm9ybTpzY2FsZVkoMS44KX0gfVxuQGtleWZyYW1lcyBlcTIgIHsgMCUsMTAwJXt0cmFuc2Zvcm06c2NhbGVZKC41KX0gNTAle3RyYW5zZm9ybTpzY2FsZVkoMS40KX0gfVxuQGtleWZyYW1lcyBlcTMgIHsgMCUsMTAwJXt0cmFuc2Zvcm06c2NhbGVZKC40KX0gNTAle3RyYW5zZm9ybTpzY2FsZVkoMi4wKX0gfVxuQGtleWZyYW1lcyBlcTQgIHsgMCUsMTAwJXt0cmFuc2Zvcm06c2NhbGVZKC42KX0gNTAle3RyYW5zZm9ybTpzY2FsZVkoMS42KX0gfVxuQGtleWZyYW1lcyBlcTUgIHsgMCUsMTAwJXt0cmFuc2Zvcm06c2NhbGVZKC4zKX0gNTAle3RyYW5zZm9ybTpzY2FsZVkoMS41KX0gfVxuQGtleWZyYW1lcyBlcTYgIHsgMCUsMTAwJXt0cmFuc2Zvcm06c2NhbGVZKC41KX0gNTAle3RyYW5zZm9ybTpzY2FsZVkoMS44KX0gfVxuQGtleWZyYW1lcyBlcTcgIHsgMCUsMTAwJXt0cmFuc2Zvcm06c2NhbGVZKC40KX0gNTAle3RyYW5zZm9ybTpzY2FsZVkoMS4zKX0gfVxuQGtleWZyYW1lcyBlcTggIHsgMCUsMTAwJXt0cmFuc2Zvcm06c2NhbGVZKC42KX0gNTAle3RyYW5zZm9ybTpzY2FsZVkoMi4xKX0gfVxuQGtleWZyYW1lcyBlcTkgIHsgMCUsMTAwJXt0cmFuc2Zvcm06c2NhbGVZKC4zKX0gNTAle3RyYW5zZm9ybTpzY2FsZVkoMS45KX0gfVxuQGtleWZyYW1lcyBlcTEwIHsgMCUsMTAwJXt0cmFuc2Zvcm06c2NhbGVZKC41KX0gNTAle3RyYW5zZm9ybTpzY2FsZVkoMS40KX0gfVxuXG4uYXVkaW8tdm9jYWxpemVyLnBsYXlpbmcgLnZvY2FsaXplci1iYXI6bnRoLWNoaWxkKDEpICB7IGFuaW1hdGlvbjogZXExICAwLjYwcyBpbmZpbml0ZSBlYXNlLWluLW91dDsgb3BhY2l0eToxOyB9XG4uYXVkaW8tdm9jYWxpemVyLnBsYXlpbmcgLnZvY2FsaXplci1iYXI6bnRoLWNoaWxkKDIpICB7IGFuaW1hdGlvbjogZXEyICAwLjcwcyBpbmZpbml0ZSBlYXNlLWluLW91dDsgb3BhY2l0eToxOyB9XG4uYXVkaW8tdm9jYWxpemVyLnBsYXlpbmcgLnZvY2FsaXplci1iYXI6bnRoLWNoaWxkKDMpICB7IGFuaW1hdGlvbjogZXEzICAwLjUwcyBpbmZpbml0ZSBlYXNlLWluLW91dDsgb3BhY2l0eToxOyB9XG4uYXVkaW8tdm9jYWxpemVyLnBsYXlpbmcgLnZvY2FsaXplci1iYXI6bnRoLWNoaWxkKDQpICB7IGFuaW1hdGlvbjogZXE0ICAwLjgwcyBpbmZpbml0ZSBlYXNlLWluLW91dDsgb3BhY2l0eToxOyB9XG4uYXVkaW8tdm9jYWxpemVyLnBsYXlpbmcgLnZvY2FsaXplci1iYXI6bnRoLWNoaWxkKDUpICB7IGFuaW1hdGlvbjogZXE1ICAwLjYwcyBpbmZpbml0ZSBlYXNlLWluLW91dDsgb3BhY2l0eToxOyB9XG4uYXVkaW8tdm9jYWxpemVyLnBsYXlpbmcgLnZvY2FsaXplci1iYXI6bnRoLWNoaWxkKDYpICB7IGFuaW1hdGlvbjogZXE2ICAwLjkwcyBpbmZpbml0ZSBlYXNlLWluLW91dDsgb3BhY2l0eToxOyB9XG4uYXVkaW8tdm9jYWxpemVyLnBsYXlpbmcgLnZvY2FsaXplci1iYXI6bnRoLWNoaWxkKDcpICB7IGFuaW1hdGlvbjogZXE3ICAwLjQwcyBpbmZpbml0ZSBlYXNlLWluLW91dDsgb3BhY2l0eToxOyB9XG4uYXVkaW8tdm9jYWxpemVyLnBsYXlpbmcgLnZvY2FsaXplci1iYXI6bnRoLWNoaWxkKDgpICB7IGFuaW1hdGlvbjogZXE4ICAwLjcwcyBpbmZpbml0ZSBlYXNlLWluLW91dDsgb3BhY2l0eToxOyB9XG4uYXVkaW8tdm9jYWxpemVyLnBsYXlpbmcgLnZvY2FsaXplci1iYXI6bnRoLWNoaWxkKDkpICB7IGFuaW1hdGlvbjogZXE5ICAwLjUwcyBpbmZpbml0ZSBlYXNlLWluLW91dDsgb3BhY2l0eToxOyB9XG4uYXVkaW8tdm9jYWxpemVyLnBsYXlpbmcgLnZvY2FsaXplci1iYXI6bnRoLWNoaWxkKDEwKSB7IGFuaW1hdGlvbjogZXExMCAwLjgwcyBpbmZpbml0ZSBlYXNlLWluLW91dDsgb3BhY2l0eToxOyB9XG5cbi5hdWRpby12b2NhbGl6ZXIucGxheWluZyAudm9jYWxpemVyLWJhciB7XG4gICAgYm94LXNoYWRvdzogMCAwIDZweCByZ2JhKDI1NSwyNTUsMjU1LDAuMik7XG59XG5cbi8qIOKUgOKUgCBJbnRlcmVzdHMg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovXG4uaW50ZXJlc3RzIGgzIHtcbiAgICBmb250LXNpemU6IDAuNzJyZW07XG4gICAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlO1xuICAgIGxldHRlci1zcGFjaW5nOiAwLjhweDtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC10ZXJ0aWFyeSk7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMyk7XG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uaW50ZXJlc3QtdGFncyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LXdyYXA6IHdyYXA7XG4gICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gICAgZ2FwOiB2YXIoLS1zcGFjZS0yKTtcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS00KTtcbn1cblxuLmludGVyZXN0LXRhZ3Mgc3BhbiB7XG4gICAgcGFkZGluZzogNHB4IDEycHg7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWZ1bGwpO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWJ0bi1iZyk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpO1xuICAgIGZvbnQtc2l6ZTogMC43OHJlbTtcbiAgICBmb250LXdlaWdodDogNTAwO1xuICAgIHRyYW5zaXRpb246XG4gICAgICAgIGJhY2tncm91bmQgdmFyKC0tZHVyYXRpb24tYmFzZSkgZWFzZSxcbiAgICAgICAgY29sb3IgdmFyKC0tZHVyYXRpb24tYmFzZSkgZWFzZSxcbiAgICAgICAgdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWZhc3QpIHZhcigtLWVhc2Utc3ByaW5nKTtcbn1cblxuLmludGVyZXN0LXRhZ3Mgc3Bhbjpob3ZlciB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tYnRuLWhvdmVyKTtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG59XG5cbi8qIOKUgOKUgCBTb2NpYWwgTGlua3Mg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovXG4uc29jaWFsLWxpbmtzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMyk7XG59XG5cbi5zb2NpYWwtbGluayB7XG4gICAgd2lkdGg6IDM4cHg7XG4gICAgaGVpZ2h0OiAzOHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1idG4tYmcpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQpO1xuICAgIGZvbnQtc2l6ZTogMXJlbTtcbiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgICAgYmFja2dyb3VuZCB2YXIoLS1kdXJhdGlvbi1iYXNlKSBlYXNlLFxuICAgICAgICBib3JkZXItY29sb3IgdmFyKC0tZHVyYXRpb24tYmFzZSkgZWFzZSxcbiAgICAgICAgY29sb3IgdmFyKC0tZHVyYXRpb24tYmFzZSkgZWFzZSxcbiAgICAgICAgdHJhbnNmb3JtIHZhcigtLWR1cmF0aW9uLWZhc3QpIHZhcigtLWVhc2Utc3ByaW5nKSxcbiAgICAgICAgYm94LXNoYWRvdyB2YXIoLS1kdXJhdGlvbi1iYXNlKSBlYXNlO1xufVxuXG4uc29jaWFsLWxpbms6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWJ0bi1ob3Zlcik7XG4gICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1ib3JkZXItc3Ryb25nKTtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTNweCk7XG4gICAgYm94LXNoYWRvdzogdmFyKC0tc2hhZG93KTtcbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBURVJNSU5BTFxu4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG4udGVybWluYWwtY29udGFpbmVyIHtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBtYXJnaW46IHZhcigtLXNwYWNlLTYpIDAgMDtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgei1pbmRleDogMjtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVooMCk7XG59XG5cbi50ZXJtaW5hbCB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgxNywxNiwxNSwwLjQ1KTsgLyogc29saWQgZmFsbGJhY2sgKi9cbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS10ZXJtaW5hbC1iZyk7XG4gICAgYm9yZGVyLXJhZGl1czogdmFyKC0tcmFkaXVzLWxnKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE5NCwxNTksMTA0LDAuMTIpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7XG4gICAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgICAtd2Via2l0LWJhY2tkcm9wLWZpbHRlcjogYmx1cigycHgpIHNhdHVyYXRlKDExMCUpO1xuICAgIGJhY2tkcm9wLWZpbHRlcjogYmx1cigycHgpIHNhdHVyYXRlKDExMCUpO1xuICAgIGJveC1zaGFkb3c6IHZhcigtLXNoYWRvdyk7XG5cbiAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYm9yZGVyLXN0cm9uZyk7XG4gICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIHZhcigtLWR1cmF0aW9uLWJhc2UpIGVhc2U7XG59XG5cbi50ZXJtaW5hbC1oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTIpO1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLTMpIHZhcigtLXNwYWNlLTQpO1xuICAgIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4yNSk7XG4gICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLWJvcmRlcik7XG59XG5cbmJvZHkubGlnaHQtdGhlbWUgLnRlcm1pbmFsLWhlYWRlciB7XG4gICAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjA0KTtcbn1cblxuLyogbWFjT1Mtc3R5bGUgdHJhZmZpYyBsaWdodHMgKi9cbi50ZXJtaW5hbC1idG4ge1xuICAgIHdpZHRoOiAxMnB4O1xuICAgIGhlaWdodDogMTJweDtcbiAgICBib3JkZXItcmFkaXVzOiA1MCU7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICAgIGZsZXgtc2hyaW5rOiAwO1xuICAgIHRyYW5zaXRpb246IGZpbHRlciB2YXIoLS1kdXJhdGlvbi1mYXN0KSBlYXNlLFxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1mYXN0KSBlYXNlO1xuICAgIC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gICAgdXNlci1zZWxlY3Q6IG5vbmU7XG59XG5cbi50ZXJtaW5hbC1idG46aG92ZXIgIHsgZmlsdGVyOiBicmlnaHRuZXNzKDEuMTUpOyB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7IH1cbi50ZXJtaW5hbC1idG46YWN0aXZlIHsgdHJhbnNmb3JtOiBzY2FsZSgwLjg4KTsgZmlsdGVyOiBicmlnaHRuZXNzKDAuOCk7IH1cblxuLyogRGFyayB0aGVtZTogYWNjZW50IGRvdHMgKi9cbi50ZXJtaW5hbC1idG4ucmVkLFxuLnRlcm1pbmFsLWJ0bi55ZWxsb3csXG4udGVybWluYWwtYnRuLmdyZWVuIHtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQpO1xuICAgIGJveC1zaGFkb3c6IDAgMCAwIDFweCB2YXIoLS1hY2NlbnQtZ2xvdyksIDAgMnB4IDZweCByZ2JhKDAsMCwwLDAuNCk7XG59XG5cbi8qIExpZ2h0IHRoZW1lOiBjb2xvcmVkIHJlYWwgbWFjT1MgKi9cbmJvZHkubGlnaHQtdGhlbWUgLnRlcm1pbmFsLWJ0bi5yZWQgICAgeyBiYWNrZ3JvdW5kOiAjZDg0YTQ1OyB9XG5ib2R5LmxpZ2h0LXRoZW1lIC50ZXJtaW5hbC1idG4ueWVsbG93IHsgYmFja2dyb3VuZDogI2Q2YTIyYTsgfVxuYm9keS5saWdodC10aGVtZSAudGVybWluYWwtYnRuLmdyZWVuICB7IGJhY2tncm91bmQ6ICMyMmE3M2E7IH1cblxuLnRlcm1pbmFsLWJvZHkge1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLTUpO1xuICAgIGZvbnQtZmFtaWx5OiAnU0YgTW9ubycsICdNb25hY28nLCAnQ2FzY2FkaWEgQ29kZScsICdSb2JvdG8gTW9ubycsIG1vbm9zcGFjZTtcbiAgICBmb250LXNpemU6IDAuODhyZW07XG4gICAgbGluZS1oZWlnaHQ6IDEuNztcbiAgICB1c2VyLXNlbGVjdDogdGV4dDtcbn1cblxuLnRlcm1pbmFsLXRleHQge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC13cmFwOiB3cmFwO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMik7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMik7XG59XG5cbi5wcm9tcHQge1xuICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQpO1xuICAgIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi5jb21tYW5kIHsgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7IH1cblxuLnRlcm1pbmFsLW91dHB1dCB7XG4gICAgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTtcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS00KTtcbiAgICBtYXJnaW4tbGVmdDogdmFyKC0tc3BhY2UtMik7XG4gICAgd29yZC1icmVhazogYnJlYWstYWxsO1xuICAgIGZvbnQtc2l6ZTogMC44NXJlbTtcbn1cblxuLmN1cnNvciB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHdpZHRoOiA4cHg7XG4gICAgaGVpZ2h0OiAxLjFlbTtcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hY2NlbnQpO1xuICAgIGJvcmRlci1yYWRpdXM6IDFweDtcbiAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0cHgpOyAvKiBGaW5lLXR1bmVkIHRvIHRoZSBtaWNyby1waXhlbCAqL1xuICAgIGFuaW1hdGlvbjogY3Vyc29yQmxpbmsgMS40cyBlYXNlLWluLW91dCBpbmZpbml0ZTtcbiAgICBtYXJnaW4tbGVmdDogMnB4O1xufVxuXG5Aa2V5ZnJhbWVzIGN1cnNvckJsaW5rIHtcbiAgICAwJSwgMTAwJSB7IG9wYWNpdHk6IDE7IH1cbiAgICA1MCUgICAgICAgeyBvcGFjaXR5OiAwOyB9XG59XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgUElYRUwgLyBHTElUQ0ggVElUTEUgQU5JTUFUSU9OXG7ilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi5waXhlbC10ZXh0IHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIG92ZXJmbG93OiB2aXNpYmxlO1xufVxuXG4ucGl4ZWwtY2hhciB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHRyYW5zZm9ybS1vcmlnaW46IGNlbnRlcjtcbiAgICBhbmltYXRpb246IFxuICAgICAgICBsZXR0ZXJEcm9wIDAuOHMgdmFyKC0tZWFzZS1zcHJpbmcpIGZvcndhcmRzLFxuICAgICAgICB0aW1lZFB1bHNlIDhzIGVhc2UtaW4tb3V0IGluZmluaXRlO1xuICAgIG9wYWNpdHk6IDA7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC00MHB4KSByb3RhdGVYKDQ1ZGVnKTtcbiAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtLCBvcGFjaXR5O1xufVxuXG5Aa2V5ZnJhbWVzIGxldHRlckRyb3Age1xuICAgIDAlICAgeyBvcGFjaXR5OiAwOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTQwcHgpIHJvdGF0ZVgoNDVkZWcpIHNjYWxlKDAuOCk7IH1cbiAgICAxMDAlIHsgb3BhY2l0eTogMTsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHJvdGF0ZVgoMGRlZykgc2NhbGUoMSk7IH1cbn1cblxuQGtleWZyYW1lcyB0aW1lZFB1bHNlIHtcbiAgICAwJSwgMjAlICAgeyBjb2xvcjogdmFyKC0tdGV4dC1wcmltYXJ5KTsgdHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGVZKDApOyB9XG4gICAgMjUlLCAzMCUgIHsgY29sb3I6IHZhcigtLWFjY2VudCk7ICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNCkgdHJhbnNsYXRlWSgtM3B4KTsgfVxuICAgIDM1JSwgODAlICB7IGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpOyB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVkoMCk7IH1cbiAgICA4NSUsIDkwJSAgeyBjb2xvcjogdmFyKC0tYWNjZW50KTsgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA0KSB0cmFuc2xhdGVZKC0zcHgpOyB9XG4gICAgOTUlLCAxMDAlIHsgY29sb3I6IHZhcigtLXRleHQtcHJpbWFyeSk7IHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlWSgwKTsgfVxufVxuXG4ucGl4ZWwtY2hhcjpudGgtY2hpbGQoMSkgeyBhbmltYXRpb24tZGVsYXk6IDAuMDVzLCAwLjBzOyB9XG4ucGl4ZWwtY2hhcjpudGgtY2hpbGQoMikgeyBhbmltYXRpb24tZGVsYXk6IDAuMTJzLCAwLjFzOyB9XG4ucGl4ZWwtY2hhcjpudGgtY2hpbGQoMykgeyBhbmltYXRpb24tZGVsYXk6IDAuMTlzLCAwLjJzOyB9XG4ucGl4ZWwtY2hhcjpudGgtY2hpbGQoNCkgeyBhbmltYXRpb24tZGVsYXk6IDAuMjZzLCAwLjNzOyB9XG4ucGl4ZWwtY2hhcjpudGgtY2hpbGQoNSkgeyBhbmltYXRpb24tZGVsYXk6IDAuMzNzLCAwLjRzOyB9XG4ucGl4ZWwtY2hhcjpudGgtY2hpbGQoNikgeyBhbmltYXRpb24tZGVsYXk6IDAuNDBzLCAwLjVzOyB9XG5cbi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkFxuICAgRk9PVEVSXG7ilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi9cbi5mb290ZXIge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB6LWluZGV4OiAyO1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS02KSB2YXIoLS1zcGFjZS00KTtcbiAgICBmb250LXNpemU6IDAuNzhyZW07XG4gICAgY29sb3I6IHZhcigtLXRleHQtdGVydGlhcnkpO1xuICAgIG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTgpO1xufVxuXG4vKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZBcbiAgIFJFU1BPTlNJVkUg4oCUIFRBQkxFVFxu4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovXG5AbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHtcbiAgICAuY29udGVudCB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoO1xuICAgICAgICBnYXA6IHZhcigtLXNwYWNlLTgpO1xuICAgIH1cblxuICAgIC5sZWZ0LXNlY3Rpb24gIHsgbWF4LXdpZHRoOiAxMDAlOyB9XG4gICAgLnJpZ2h0LXNlY3Rpb24geyB3aWR0aDogMTAwJTsgbWF4LXdpZHRoOiA0MjBweDsgbWFyZ2luOiAwIGF1dG87IH1cbn1cblxuLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQXG4gICBSRVNQT05TSVZFIOKAlCBNT0JJTEVcbuKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqL1xuQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7XG4gICAgLmhlYWRlci1yaWdodCB7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgdG9wOiB2YXIoLS1zcGFjZS00KTtcbiAgICAgICAgcmlnaHQ6IHZhcigtLXNwYWNlLTQpO1xuICAgIH1cblxuICAgIC5oZWFkZXItYnRuLWdyb3VwIHtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgICAgICBnYXA6IHZhcigtLXNwYWNlLTMpO1xuICAgIH1cblxuICAgIC5yZXN1bWUtb3ZlcmxheSB7XG4gICAgICAgIHdpZHRoOiA5NSU7XG4gICAgICAgIGhlaWdodDogODh2aDtcbiAgICAgICAgbWF4LXdpZHRoOiBub25lO1xuICAgIH1cblxuICAgIC5yZXN1bWUtb3ZlcmxheS1jb250ZW50IHtcbiAgICAgICAgcGFkZGluZzogdmFyKC0tc3BhY2UtNikgdmFyKC0tc3BhY2UtNCk7XG4gICAgfVxuXG4gICAgLm1vYmlsZS1yZXN1bWUtZm9vdGVyIHtcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLTYpIHZhcigtLXNwYWNlLTQpO1xuICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iZyk7XG4gICAgICAgIG1hcmdpbi10b3A6IGF1dG87XG4gICAgfVxuXG4gICAgLm1vYmlsZS1jbG9zZS1idG4ge1xuICAgICAgICB3aWR0aDogMTAwJTtcbiAgICAgICAgcGFkZGluZzogdmFyKC0tc3BhY2UtNCk7XG4gICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWFjY2VudCk7XG4gICAgICAgIGNvbG9yOiB2YXIoLS1iZy1wcmltYXJ5KTtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbWQpO1xuICAgICAgICBmb250LXdlaWdodDogNzAwO1xuICAgICAgICBmb250LXNpemU6IDFyZW07XG4gICAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2U7XG4gICAgfVxuXG4gICAgLm1vYmlsZS1jbG9zZS1idG46YWN0aXZlIHtcbiAgICAgICAgb3BhY2l0eTogMC44O1xuICAgIH1cbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDYwMHB4KSB7XG4gICAgLmNvbnRhaW5lciB7IHBhZGRpbmc6IDAgdmFyKC0tc3BhY2UtNCk7IH1cblxuICAgIC5oZWFkZXItaW5uZXIge1xuICAgICAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS00KSB2YXIoLS1zcGFjZS0zKTtcbiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICAgICAgZ2FwOiB2YXIoLS1zcGFjZS0zKTtcbiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIH1cblxuICAgIC5oZWFkZXItbGVmdCB7XG4gICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gICAgICAgIGdhcDogdmFyKC0tc3BhY2UtMyk7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgIH1cblxuICAgIC5oZWFkZXItbG9nbyB7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIH1cblxuICAgIC5oZWFkZXItYnRuLWdyb3VwIHtcbiAgICAgICAgbWFyZ2luLWxlZnQ6IDA7XG4gICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIH1cblxuICAgIC5oZWFkZXItbG9nbyB7IGZvbnQtc2l6ZTogMS4xcmVtOyB9XG5cbiAgICAuaGVhZGVyLWJ0biB7XG4gICAgICAgIGhlaWdodDogMzRweDtcbiAgICAgICAgZm9udC1zaXplOiAwLjgycmVtO1xuICAgICAgICBwYWRkaW5nOiAwIHZhcigtLXNwYWNlLTMpO1xuICAgIH1cblxuICAgIC5nbGl0Y2ggeyBmb250LXNpemU6IDEuNnJlbTsgfVxuICAgIC5oaS10ZXh0IHsgZm9udC1zaXplOiAxLjVyZW07IH1cbiAgICAuYWJvdXQgPiBwIHsgZm9udC1zaXplOiAwLjk1cmVtOyB9XG5cbiAgICAuY29udGFjdC1idXR0b25zIHsgZ2FwOiB2YXIoLS1zcGFjZS0yKTsgfVxuICAgIC5jb250YWN0LWJ0biB7IGZvbnQtc2l6ZTogMC44NXJlbTsgaGVpZ2h0OiA0MHB4OyBwYWRkaW5nOiAwIHZhcigtLXNwYWNlLTQpOyB9XG5cbiAgICAudGVjaC1zdGFjayB7IGdhcDogdmFyKC0tc3BhY2UtMik7IGp1c3RpZnktY29udGVudDogY2VudGVyOyB9XG4gICAgLnRlY2gtaXRlbSB7IHdpZHRoOiAzOHB4OyBoZWlnaHQ6IDM4cHg7IGZvbnQtc2l6ZTogMXJlbTsgfVxuXG4gICAgLnRlcm1pbmFsLWJvZHkgeyBwYWRkaW5nOiB2YXIoLS1zcGFjZS00KTsgZm9udC1zaXplOiAwLjgycmVtOyB9XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiAzODBweCkge1xuICAgIC5nbGl0Y2ggIHsgZm9udC1zaXplOiAxLjRyZW07IH1cbiAgICAuaGktdGV4dCB7IGZvbnQtc2l6ZTogMS4zcmVtOyB9XG5cbiAgICAuY29udGFjdC1idXR0b25zIHsgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsgYWxpZ24taXRlbXM6IHN0cmV0Y2g7IH1cbiAgICAuY29udGFjdC1idG4geyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgfVxuXG4gICAgLnJpZ2h0LXNlY3Rpb24geyBtYXgtd2lkdGg6IG5vbmU7IH1cbn1cblxuLyogQWNjZXNzaWJpbGl0eTogUmVkdWNlIG1vdGlvbiBmb3IgdXNlcnMgd2hvIHByZWZlciBpdCAqL1xuQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpIHtcbiAgICAqLCAqOjpiZWZvcmUsICo6OmFmdGVyIHtcbiAgICAgICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAwLjAxbXMgIWltcG9ydGFudDtcbiAgICAgICAgdHJhbnNpdGlvbi1kdXJhdGlvbjogMC4wMW1zICFpbXBvcnRhbnQ7XG4gICAgfVxufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgIFJFU1VNRSBPVkVSTEFZIFBBTkVMXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi5yZXN1bWUtb3ZlcmxheSB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogNTAlO1xuICAgIGxlZnQ6IDUwJTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgwLjkpO1xuICAgIHdpZHRoOiA5MCU7XG4gICAgbWF4LXdpZHRoOiA3MjBweDtcbiAgICBoZWlnaHQ6IDgwdmg7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iZyk7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDI0cHgpIHNhdHVyYXRlKDE4MCUpO1xuICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDI0cHgpIHNhdHVyYXRlKDE4MCUpO1xuICAgIHotaW5kZXg6IDIwMDA7XG4gICAgYm94LXNoYWRvdzogMCAzMHB4IDkwcHggcmdiYSgwLDAsMCwwLjUpO1xuICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWJvcmRlci1zdHJvbmcpO1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy14bCk7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xuICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgb3BhY2l0eTogMDtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgdHJhbnNpdGlvbjogXG4gICAgICAgIHRyYW5zZm9ybSB2YXIoLS1kdXJhdGlvbi1zbG93KSB2YXIoLS1lYXNlLXNwcmluZyksXG4gICAgICAgIG9wYWNpdHkgdmFyKC0tZHVyYXRpb24tYmFzZSkgZWFzZSxcbiAgICAgICAgdmlzaWJpbGl0eSB2YXIoLS1kdXJhdGlvbi1iYXNlKSBlYXNlO1xufVxuXG4ucmVzdW1lLW92ZXJsYXkuYWN0aXZlIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHZpc2liaWxpdHk6IHZpc2libGU7XG4gICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgc2NhbGUoMSk7XG59XG5cbi5yZXN1bWUtb3ZlcmxheS5kcmFnZ2luZyB7XG4gICAgdHJhbnNpdGlvbjogbm9uZTsgLyogU21vb3RoIGRyYWcgKi9cbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuLnJlc3VtZS1vdmVybGF5LWhlYWRlciB7XG4gICAgcGFkZGluZzogdmFyKC0tc3BhY2UtMykgdmFyKC0tc3BhY2UtNSk7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOyAvKiBDZW50ZXIgdGl0bGUgKi9cbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMDUpOyAvKiBTbGlnaHQgdGludCBmb3IgaGVhZGVyICovXG4gICAgY3Vyc29yOiBncmFiO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB1c2VyLXNlbGVjdDogbm9uZTtcbn1cblxuLnJlc3VtZS1vdmVybGF5LWhlYWRlcjphY3RpdmUge1xuICAgIGN1cnNvcjogZ3JhYmJpbmc7XG59XG5cbi5yZXN1bWUtb3ZlcmxheS1oZWFkZXIgLnRlcm1pbmFsLWNvbnRyb2xzIHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgbGVmdDogdmFyKC0tc3BhY2UtNSk7XG59XG5cbi5yZXN1bWUtdGl0bGUge1xuICAgIGZvbnQtc2l6ZTogMC43NXJlbTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIGxldHRlci1zcGFjaW5nOiAxLjVweDtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgb3BhY2l0eTogMC44O1xufVxuXG4ucmVzdW1lLW92ZXJsYXktY29udGVudCB7XG4gICAgZmxleDogMTtcbiAgICBvdmVyZmxvdy15OiBhdXRvO1xuICAgIHBhZGRpbmc6IHZhcigtLXNwYWNlLTEwKSB2YXIoLS1zcGFjZS04KTtcbiAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47XG4gICAgc2Nyb2xsYmFyLWNvbG9yOiB2YXIoLS1ib3JkZXIpIHRyYW5zcGFyZW50O1xufVxuXG4ucmVzdW1lLW92ZXJsYXktY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXIge1xuICAgIHdpZHRoOiA1cHg7XG59XG5cbi5yZXN1bWUtb3ZlcmxheS1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tYm9yZGVyLXN0cm9uZyk7XG4gICAgYm9yZGVyLXJhZGl1czogMTBweDtcbn1cblxuLnJlc3VtZS1zZWN0aW9uLWJveCB7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMTApO1xuICAgIGFuaW1hdGlvbjogc2xpZGVVcEZhZGUgMC42cyB2YXIoLS1lYXNlLW91dCkgYm90aDtcbn1cblxuQGtleWZyYW1lcyBzbGlkZVVwRmFkZSB7XG4gICAgZnJvbSB7IG9wYWNpdHk6IDA7IHRyYW5zZm9ybTogdHJhbnNsYXRlWSgyMHB4KTsgfVxuICAgIHRvICAgeyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH1cbn1cblxuLnJlc3VtZS1zZWN0aW9uLWJveDpudGgtY2hpbGQoMSkgeyBhbmltYXRpb24tZGVsYXk6IDAuMXM7IH1cbi5yZXN1bWUtc2VjdGlvbi1ib3g6bnRoLWNoaWxkKDIpIHsgYW5pbWF0aW9uLWRlbGF5OiAwLjJzOyB9XG4ucmVzdW1lLXNlY3Rpb24tYm94Om50aC1jaGlsZCgzKSB7IGFuaW1hdGlvbi1kZWxheTogMC4zczsgfVxuLnJlc3VtZS1zZWN0aW9uLWJveDpudGgtY2hpbGQoNCkgeyBhbmltYXRpb24tZGVsYXk6IDAuNHM7IH1cblxuLnJlc3VtZS1zZWN0aW9uLWJveCBoMyB7XG4gICAgZm9udC1zaXplOiAwLjcycmVtO1xuICAgIGZvbnQtd2VpZ2h0OiA3MDA7XG4gICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTtcbiAgICBsZXR0ZXItc3BhY2luZzogMS44cHg7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtNik7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGdhcDogdmFyKC0tc3BhY2UtMyk7XG4gICAgY29sb3I6IHZhcigtLXRleHQtdGVydGlhcnkpO1xufVxuXG4ucmVzdW1lLXNlY3Rpb24tYm94IGgzIGksXG4ucmVzdW1lLXNlY3Rpb24tYm94IGgzIHN2ZyB7XG4gICAgY29sb3I6IHZhcigtLWFjY2VudCk7XG4gICAgZm9udC1zaXplOiAwLjk1cmVtO1xuICAgIG1hcmdpbi1yaWdodDogdmFyKC0tc3BhY2UtMik7XG4gICAgZmxleC1zaHJpbms6IDA7XG59XG5cbi5yZXN1bWUtY2FyZCB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY2FyZC1iZyk7XG4gICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYm9yZGVyKTtcbiAgICBwYWRkaW5nOiB2YXIoLS1zcGFjZS02KTtcbiAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1yYWRpdXMtbGcpO1xuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTQpO1xuICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS1kdXJhdGlvbi1iYXNlKSBlYXNlO1xufVxuXG4ucmVzdW1lLWNhcmQ6aG92ZXIge1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYm9yZGVyLXN0cm9uZyk7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tYnRuLWJnKTtcbiAgICBib3gtc2hhZG93OiB2YXIoLS1zaGFkb3cpO1xufVxuXG4ucmVzdW1lLWNhcmQgaDQge1xuICAgIGZvbnQtc2l6ZTogMS4xNXJlbTtcbiAgICBmb250LXdlaWdodDogNzAwO1xuICAgIG1hcmdpbi1ib3R0b206IHZhcigtLXNwYWNlLTEpO1xuICAgIGNvbG9yOiB2YXIoLS10ZXh0LXByaW1hcnkpO1xuICAgIGxldHRlci1zcGFjaW5nOiAtMC4zcHg7XG59XG5cbi5yZXN1bWUtY2FyZCAuc3ViaGVhZGluZyB7XG4gICAgZm9udC1zaXplOiAwLjlyZW07XG4gICAgY29sb3I6IHZhcigtLXRleHQtc2Vjb25kYXJ5KTtcbiAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1zcGFjZS0yKTtcbiAgICBmb250LXdlaWdodDogNTAwO1xufVxuXG4ucmVzdW1lLWNhcmQgcCB7XG4gICAgZm9udC1zaXplOiAwLjk4cmVtO1xuICAgIGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7XG4gICAgbGluZS1oZWlnaHQ6IDEuNztcbn1cblxuLnJlc3VtZS1saXN0IHtcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHBhZGRpbmc6IDA7XG59XG5cbi5yZXN1bWUtbGlzdCBsaSB7XG4gICAgZm9udC1zaXplOiAwLjk1cmVtO1xuICAgIGNvbG9yOiB2YXIoLS10ZXh0LXNlY29uZGFyeSk7XG4gICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tc3BhY2UtMyk7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTMpO1xuICAgIGxpbmUtaGVpZ2h0OiAxLjY7XG59XG5cbi5yZXN1bWUtbGlzdCBsaTo6YmVmb3JlIHtcbiAgICBjb250ZW50OiBcIlxcZjEwNVwiO1xuICAgIGZvbnQtZmFtaWx5OiBcIkZvbnQgQXdlc29tZSA2IEZyZWVcIjtcbiAgICBmb250LXdlaWdodDogOTAwO1xuICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQpO1xuICAgIGZvbnQtc2l6ZTogMC44cmVtO1xuICAgIG1hcmdpbi10b3A6IDNweDtcbn1cblxuLnNraWxsLWNoaXBzIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGZsZXgtd3JhcDogd3JhcDtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTIpO1xuICAgIGxpc3Qtc3R5bGU6IG5vbmU7XG59XG5cbi5za2lsbC1jaGlwcyBsaSB7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tYnRuLWJnKTtcbiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1ib3JkZXIpO1xuICAgIHBhZGRpbmc6IDZweCAxNHB4O1xuICAgIGJvcmRlci1yYWRpdXM6IHZhcigtLXJhZGl1cy1mdWxsKTtcbiAgICBmb250LXNpemU6IDAuODJyZW07XG4gICAgZm9udC13ZWlnaHQ6IDUwMDtcbiAgICBjb2xvcjogdmFyKC0tdGV4dC1zZWNvbmRhcnkpO1xuICAgIHRyYW5zaXRpb246IGFsbCB2YXIoLS1kdXJhdGlvbi1mYXN0KSBlYXNlO1xufVxuXG4uc2tpbGwtY2hpcHMgbGk6aG92ZXIge1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWFjY2VudCk7XG4gICAgY29sb3I6IHZhcigtLWJnLXByaW1hcnkpO1xuICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYWNjZW50KTtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7XG59XG5cbi5yZXN1bWUtbGluayB7XG4gICAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBnYXA6IHZhcigtLXNwYWNlLTIpO1xuICAgIGNvbG9yOiB2YXIoLS1hY2NlbnQpO1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgICBmb250LXdlaWdodDogNjAwO1xuICAgIGZvbnQtc2l6ZTogMC45cmVtO1xuICAgIG1hcmdpbi10b3A6IHZhcigtLXNwYWNlLTMpO1xuICAgIHRyYW5zaXRpb246IG9wYWNpdHkgdmFyKC0tZHVyYXRpb24tZmFzdCkgZWFzZTtcbn1cblxuLnJlc3VtZS1saW5rOmhvdmVyIHtcbiAgICBvcGFjaXR5OiAwLjg7XG59XG5cbi5wYW5lbC1iYWNrZHJvcCB7XG4gICAgcG9zaXRpb246IGZpeGVkO1xuICAgIHRvcDogMDtcbiAgICBsZWZ0OiAwO1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNDUpO1xuICAgIC13ZWJraXQtYmFja2Ryb3AtZmlsdGVyOiBibHVyKDVweCk7XG4gICAgYmFja2Ryb3AtZmlsdGVyOiBibHVyKDVweCk7XG4gICAgei1pbmRleDogMTk5OTtcbiAgICBvcGFjaXR5OiAwO1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICB0cmFuc2l0aW9uOiBcbiAgICAgICAgb3BhY2l0eSB2YXIoLS1kdXJhdGlvbi1zbG93KSBlYXNlLFxuICAgICAgICB2aXNpYmlsaXR5IHZhcigtLWR1cmF0aW9uLXNsb3cpIGVhc2U7XG59XG5cbi5wYW5lbC1iYWNrZHJvcC5hY3RpdmUge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICBwb2ludGVyLWV2ZW50czogYXV0bztcbn1cblxuLm1vYmlsZS1yZXN1bWUtZm9vdGVyIHtcbiAgICBkaXNwbGF5OiBub25lO1xufVxuXG4iXX0= */
/* ── Ultra-Performance & Device-Specific Overrides ── */

/* Mobile Optimization: Reduce GPU load for expensive filters */
@media (max-width: 768px) {
    :root {
        --blur-amount: 4px; /* Faster rendering on mobile GPUs */
    }
    
    .profile-card, .terminal, .resume-overlay {
        backdrop-filter: blur(var(--blur-amount)) saturate(100%);
        -webkit-backdrop-filter: blur(var(--blur-amount)) saturate(100%);
    }

    /* Disable complex transitions for faster response */
    * {
        -webkit-tap-highlight-color: transparent;
    }
}

/* Reduced Motion Support: Respect system settings */
@media (prefers-reduced-motion: reduce) {
    *, ::before, ::after {
        animation-delay: -1ms !important;
        animation-duration: 1ms !important;
        animation-iteration-count: 1 !important;
        background-attachment: initial !important;
        scroll-behavior: auto !important;
        transition-duration: 0s !important;
        transition-delay: 0s !important;
    }
}

/* Ensure ultra-smooth scrolling on iOS */
.terminal-content, .resume-content {
    -webkit-overflow-scrolling: touch;
}
