{"id":39,"date":"2026-07-22T06:47:01","date_gmt":"2026-07-22T06:47:01","guid":{"rendered":"https:\/\/portfolio.ierare.com\/?page_id=39"},"modified":"2026-09-21T12:37:05","modified_gmt":"2026-09-21T12:37:05","slug":"portfolio","status":"publish","type":"page","link":"https:\/\/portfolio.ierare.com\/","title":{"rendered":"Portfolio"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n        <link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\r\n        <link href=\"https:\/\/fonts.googleapis.com\/css2?family=Sora:wght@300;400;500;600;700;800&family=Inter:wght@400;600;700&display=swap\" rel=\"stylesheet\">\r\n        <style>\r\n  \/* Applied only on pages where this shortcode is present. *\/\r\n  html.ierare-has-portfolio,\r\n  body.ierare-has-portfolio{ overflow-x:clip; }\r\n\r\n  \/* Elementor (and similar boxed-layout builders) wrap page content in\r\n     containers that carry their own max-width + side padding. When this\r\n     shortcode's markup sits inside one of those, the CSS below widens\r\n     every such ancestor up the tree so the portfolio can go full-bleed.\r\n     The JS full-bleed routine (ierareFullBleed) does the same thing more\r\n     surgically at runtime; this is the no-JS \/ first-paint safety net. *\/\r\n  body.ierare-has-portfolio .elementor,\r\n  body.ierare-has-portfolio .elementor-section,\r\n  body.ierare-has-portfolio .elementor-container,\r\n  body.ierare-has-portfolio .elementor-widget-wrap,\r\n  body.ierare-has-portfolio .elementor-column,\r\n  body.ierare-has-portfolio .elementor-column > .elementor-widget-wrap,\r\n  body.ierare-has-portfolio .e-con,\r\n  body.ierare-has-portfolio .e-con-inner{\r\n    max-width:none !important;\r\n    width:100% !important;\r\n    padding-left:0 !important;\r\n    padding-right:0 !important;\r\n    margin-left:0 !important;\r\n    margin-right:0 !important;\r\n  }\r\n  \/* Theme-level wrappers (.site-content, #content, #primary, etc.) are\r\n     narrowed less predictably across themes, so those are left to the\r\n     JS ancestor-walk below (ierareReleaseThemeClipping), which only\r\n     touches elements that are actual ancestors of this shortcode's\r\n     root \u2014 never anything elsewhere on the page. *\/\r\n\r\n  .ierare-portfolio-root{\r\n    --navy:#2b2727; --navy-deep:#1a1717; --cream:#ffffff; --card:#FFFFFF;\r\n    --gold:#FDD10D; --lime:#D7E552; --slate:#6b6464; --ink:#2b2727;\r\n    --ink-soft:#6b6464; --line:#E7E2E2; --radius:16px;\r\n    --shadow: 0 10px 30px -14px rgba(43,39,39,.25);\r\n    background:var(--cream); color:var(--ink); font-family:'Sora',sans-serif;\r\n    -webkit-font-smoothing:antialiased;\r\n    position:relative;\r\n    display:block;\r\n    width:100vw;\r\n    max-width:none !important;\r\n    min-width:100vw;\r\n    margin:0;\r\n    padding:0;\r\n    overflow-x:clip;\r\n    isolation:isolate;\r\n  }\r\n  .ierare-portfolio-root *{box-sizing:border-box;}\r\n  \/* Theme accessibility \"Skip to content\" link \u2014 it shows unstyled at the top-left\r\n     on this page because the theme's own hide-until-focus CSS doesn't apply here. *\/\r\n  body:has(.ierare-portfolio-root) .skip-link,\r\n  body:has(.ierare-portfolio-root) a.skip-link,\r\n  body:has(.ierare-portfolio-root) .screen-reader-shortcut,\r\n  body:has(.ierare-portfolio-root) a[href=\"#content\"].screen-reader-text,\r\n  body.ierare-has-portfolio .skip-link,\r\n  body.ierare-has-portfolio a.skip-link{ display:none !important; }\r\n  #colophon, .site-footer, body > footer, footer.wp-block-template-part{ display:none !important; }\r\n  #masthead, .site-header, body > header, header.wp-block-template-part{ display:none !important; }\r\n  .entry-title, .page-title, h1.entry-title, .wp-block-post-title, .elementor-widget-theme-post-title, .page-header{ display:none !important; }\r\n  .wp-block-group:has(> .wp-block-post-title){ display:none !important; }\r\n  \/* Header \u2014 matches Figma: logo left, links grouped right, two-line hamburger far right. *\/\r\n  .ierare-portfolio-root header{ position:sticky; top:0; z-index:40; background:#ffffff; padding:0 clamp(20px,2.6vw,50px);}\r\n  .ierare-portfolio-root .header-inner{ position:relative; width:100%; height:96px; display:flex; align-items:center; gap:clamp(20px,3vw,56px);}\r\n  .ierare-portfolio-root .logo{ font-family:'Sora',sans-serif; font-weight:800; font-size:30px; line-height:1; color:#2b2727; display:flex; align-items:center; flex:0 0 auto; text-transform:lowercase; text-decoration:none; margin-right:auto;}\r\n  .ierare-portfolio-root .logo .dot{ color:#FDD10D;}\r\n  .ierare-portfolio-root .main-nav{ display:flex; align-items:center; gap:clamp(18px,2vw,36px);}\r\n  .ierare-portfolio-root .main-nav > a{ color:#0a0a0a; font-family:'Sora',sans-serif; font-weight:600; font-size:18px; letter-spacing:-.6px; text-transform:uppercase; text-decoration:none; white-space:nowrap; transition:color .18s ease;}\r\n  .ierare-portfolio-root .main-nav > a:hover{ color:#FDD10D;}\r\n  .ierare-portfolio-root .menu-btn{ position:relative; z-index:110; flex:0 0 auto; width:56px; height:44px; padding:0; margin-left:clamp(0px,1vw,20px); background:transparent; border:0; display:flex; flex-direction:column; align-items:flex-end; justify-content:center; gap:9px; cursor:pointer; -webkit-tap-highlight-color:transparent;}\r\n  .ierare-portfolio-root .menu-btn span{ display:block; width:52px; height:2px; background:#0a0a0a; border-radius:2px; transition:transform .25s ease, opacity .2s ease, width .25s ease;}\r\n  .ierare-portfolio-root .menu-btn:hover span:nth-child(2){ width:36px;}\r\n  .ierare-portfolio-root .menu-btn.open span:nth-child(1){ transform:translateY(5.5px) rotate(45deg);}\r\n  .ierare-portfolio-root .menu-btn.open span:nth-child(2){ transform:translateY(-5.5px) rotate(-45deg); width:52px;}\r\n  .ierare-portfolio-root .menu-btn:focus-visible{ outline:3px solid #FDD10D; outline-offset:2px;}\r\n  \/* Slide-down panel opened by the hamburger *\/\r\n  \/* Full-screen mobile menu takeover *\/\r\n  .ierare-portfolio-root .nav-panel{ position:fixed; inset:0; background:#ffffff; z-index:100; display:flex; flex-direction:column; opacity:0; visibility:hidden; transform:translateY(-12px); transition:opacity .22s ease, transform .22s ease, visibility .22s; overflow-y:auto;}\r\n  .ierare-portfolio-root .nav-panel.open{ opacity:1; visibility:visible; transform:translateY(0);}\r\n  .ierare-portfolio-root .nav-panel-top{ display:flex; align-items:center; justify-content:space-between; padding:20px clamp(20px,4vw,40px);}\r\n  .ierare-portfolio-root .nav-panel-logo{ font-family:'Sora',sans-serif; font-weight:800; font-size:26px; color:#2b2727; text-transform:lowercase; text-decoration:none;}\r\n  .ierare-portfolio-root .nav-panel-logo .dot{ color:var(--gold);}\r\n  .ierare-portfolio-root .nav-panel-close{ width:36px; height:36px; background:none; border:0; display:flex; align-items:center; justify-content:center; cursor:pointer; -webkit-tap-highlight-color:transparent;}\r\n  .ierare-portfolio-root .nav-panel-close svg{ width:24px; height:24px; stroke:#0a0a0a; fill:none; stroke-width:2; stroke-linecap:round;}\r\n  .ierare-portfolio-root .nav-panel-list{ flex:1; padding:28px clamp(20px,4vw,40px) 8px; display:flex; flex-direction:column;}\r\n  .ierare-portfolio-root .nav-panel .panel-link{ display:block; padding:14px 0; color:#171821; font-family:'Sora',sans-serif; font-weight:500; font-size:1.15rem; text-transform:none; letter-spacing:0; text-decoration:none; transition:color .15s ease;}\r\n  .ierare-portfolio-root .nav-panel .panel-row{ display:flex; align-items:center; justify-content:space-between; gap:12px;}\r\n  .ierare-portfolio-root .nav-panel .panel-row .panel-link{ flex:1;}\r\n  .ierare-portfolio-root .nav-panel .panel-link[data-level=\"2\"]{ padding-left:20px; font-size:1.02rem; color:#3a3a3a;}\r\n  .ierare-portfolio-root .nav-panel .panel-item[data-level=\"2\"] .panel-row .panel-link{ padding-left:20px;}\r\n  .ierare-portfolio-root .nav-panel .panel-link[data-level=\"3\"]{ padding-left:40px; font-size:.95rem; color:#5c5c5c;}\r\n  .ierare-portfolio-root .nav-panel .panel-link.is-active{ color:#e8491d;}\r\n  .ierare-portfolio-root .panel-toggle{ position:relative; flex:0 0 auto; width:32px; height:32px; display:flex; align-items:center; justify-content:center; background:none; border:0; cursor:pointer; -webkit-tap-highlight-color:transparent; color:#0a0a0a;}\r\n  .ierare-portfolio-root .panel-toggle svg{ position:absolute; width:18px; height:18px; stroke:currentColor; fill:none; stroke-width:2; stroke-linecap:round; transition:opacity .18s ease, transform .18s ease;}\r\n  .ierare-portfolio-root .panel-toggle .icon-close{ opacity:0; transform:rotate(-90deg);}\r\n  .ierare-portfolio-root .panel-toggle .icon-plus{ opacity:1; transform:rotate(0deg);}\r\n  .ierare-portfolio-root .panel-toggle[aria-expanded=\"true\"] .icon-plus{ opacity:0; transform:rotate(90deg);}\r\n  .ierare-portfolio-root .panel-toggle[aria-expanded=\"true\"] .icon-close{ opacity:1; transform:rotate(0deg);}\r\n  .ierare-portfolio-root .panel-sub{ display:grid; grid-template-rows:0fr; opacity:0; transition:grid-template-rows .25s ease, opacity .2s ease;}\r\n  .ierare-portfolio-root .panel-sub > *{ overflow:hidden; min-height:0;}\r\n  .ierare-portfolio-root .panel-item.panel-open > .panel-sub{ grid-template-rows:1fr; opacity:1;}\r\n  .ierare-portfolio-root .nav-panel-cta{ display:flex; align-items:center; justify-content:center; margin:24px clamp(20px,4vw,40px) 40px; background:var(--gold); color:#2b2727; font-family:'Sora',sans-serif; font-weight:700; font-size:1rem; padding:17px 24px; border-radius:999px; text-decoration:none; text-align:center;}\r\n\r\n  \/* E-Commerce mega-dropdown (desktop only \u2014 collapses into the mobile\r\n     hamburger panel's plain \"E-Commerce\" entry on small screens, since\r\n     .nav-mega is hidden there and .main-nav itself is hidden). *\/\r\n  .ierare-portfolio-root .nav-mega{ position:relative;}\r\n  .ierare-portfolio-root .nav-mega-trigger{ display:flex; align-items:center; gap:6px; background:none; border:0; padding:0; color:#0a0a0a; font-family:'Sora',sans-serif; font-weight:600; font-size:18px; letter-spacing:-.6px; text-transform:uppercase; text-decoration:none; cursor:pointer; transition:color .18s ease;}\r\n  .ierare-portfolio-root .nav-mega-trigger:hover{ color:var(--gold);}\r\n  .ierare-portfolio-root .nav-mega-chevron{ width:15px; height:15px; stroke:currentColor; fill:none; stroke-width:2.2; stroke-linecap:round; stroke-linejoin:round; transition:transform .2s ease; flex:0 0 auto;}\r\n  .ierare-portfolio-root .nav-mega.open .nav-mega-trigger .nav-mega-chevron{ transform:rotate(180deg);}\r\n  .ierare-portfolio-root .nav-mega-panel{ position:absolute; top:100%; left:50%; transform:translateX(-50%) translateY(8px); margin-top:22px; display:flex; align-items:flex-start; background:#ffffff; border:1px solid var(--line); border-radius:18px; box-shadow:0 24px 48px -18px rgba(43,39,39,.28); padding:12px; opacity:0; visibility:hidden; pointer-events:none; transition:opacity .2s ease, transform .2s ease, visibility .2s; z-index:60;}\r\n  .ierare-portfolio-root .nav-mega.open .nav-mega-panel{ opacity:1; visibility:visible; pointer-events:auto; transform:translateX(-50%) translateY(0);}\r\n  .ierare-portfolio-root .nav-mega-cats{ display:flex; flex-direction:column; gap:2px; width:250px; flex:0 0 auto; padding-right:8px;}\r\n  .ierare-portfolio-root .nav-mega-cat{ display:flex; align-items:center; justify-content:space-between; gap:10px; width:100%; text-align:left; background:transparent; border:1.5px solid transparent; border-radius:12px; padding:13px 16px; font-family:'Sora',sans-serif; font-weight:600; font-size:.92rem; color:rgba(43,39,39,.55); text-decoration:none; cursor:pointer; transition:background-color .15s ease, border-color .15s ease, color .15s ease;}\r\n  .ierare-portfolio-root .nav-mega-cat:hover{ background:rgba(43,39,39,.05); color:#2b2727;}\r\n  .ierare-portfolio-root .nav-mega-cat.active[data-cat=\"amazon\"]{ background:#ffffff; border-color:var(--line); box-shadow:0 2px 8px -4px rgba(43,39,39,.12); color:#2b2727;}\r\n  .ierare-portfolio-root .nav-mega-cat.active:not([data-cat=\"amazon\"]){ background:rgba(43,39,39,.05); color:#2b2727;}\r\n  .ierare-portfolio-root .nav-mega-cat .nav-mega-chevron{ width:14px; height:14px; opacity:.6; transform:rotate(-90deg); transition:transform .2s ease;}\r\n  .ierare-portfolio-root .nav-mega-cat.active .nav-mega-chevron{ transform:rotate(0deg);}\r\n  .ierare-portfolio-root .nav-mega-links{ position:relative; display:flex; flex-direction:column; gap:2px; width:270px; flex:0 0 auto; padding:2px 4px; margin-left:6px; padding-left:22px; transition:opacity .18s ease, width .18s ease, margin-left .18s ease, padding-left .18s ease;}\r\n  .ierare-portfolio-root .nav-mega-link{ display:block; padding:10px 6px; border-radius:8px; font-family:'Sora',sans-serif; font-weight:600; font-size:.92rem; line-height:1.35; color:rgba(43,39,39,.6); text-decoration:none; text-transform:none; opacity:1; transition:color .15s ease, opacity .2s ease;}\r\n  .ierare-portfolio-root .nav-mega-link:hover{ color:#2b2727;}\r\n  \/* Fade the whole right-hand column when its category has no links to show,\r\n     rather than instantly snapping with display:none. *\/\r\n  .ierare-portfolio-root .nav-mega-links.is-empty{ opacity:0; width:0; margin-left:0; padding-left:0; pointer-events:none; overflow:hidden;}\r\n  .ierare-portfolio-root .nav-mega-link[hidden]{ display:none;}\r\n  \/* eCommerce sits near the left edge and its panel is ~550px wide \u2014 anchor\r\n     left instead of centering, so it doesn't overflow past the header's left edge. *\/\r\n  .ierare-portfolio-root .nav-mega-panel{ left:0; transform:translateY(8px);}\r\n  .ierare-portfolio-root .nav-mega.open .nav-mega-panel{ transform:translateY(0);}\r\n  @media (max-width:1100px){ .ierare-portfolio-root .nav-mega{ display:none;} }\r\n\r\n  \/* Simple single-column dropdowns: Digital Marketing, Resources, About Us *\/\r\n  .ierare-portfolio-root .nav-simple{ position:relative;}\r\n  .ierare-portfolio-root .nav-simple-panel{ position:absolute; top:100%; left:50%; transform:translateX(-50%) translateY(8px); margin-top:22px; min-width:280px; display:flex; flex-direction:column; gap:2px; background:#ffffff; border:1px solid var(--line); border-radius:18px; box-shadow:0 24px 48px -18px rgba(43,39,39,.28); padding:10px; opacity:0; visibility:hidden; pointer-events:none; transition:opacity .2s ease, transform .2s ease, visibility .2s; z-index:60;}\r\n  .ierare-portfolio-root .nav-simple.open .nav-simple-panel{ opacity:1; visibility:visible; pointer-events:auto; transform:translateX(-50%) translateY(0);}\r\n  .ierare-portfolio-root .nav-simple.open .nav-mega-trigger .nav-mega-chevron{ transform:rotate(180deg);}\r\n  .ierare-portfolio-root .nav-simple-panel a{ display:block; padding:12px 16px; border-radius:10px; font-family:'Sora',sans-serif; font-weight:600; font-size:.92rem; color:rgba(43,39,39,.7); text-decoration:none; text-transform:none; white-space:nowrap; transition:background-color .15s ease, color .15s ease;}\r\n  .ierare-portfolio-root .nav-simple-panel a:hover{ background:rgba(43,39,39,.05); color:#2b2727;}\r\n  \/* About Us is the right-most nav item \u2014 anchor its panel to the right edge\r\n     of the trigger instead of centering, so it never spills past the header. *\/\r\n  .ierare-portfolio-root #ierareAboutDropdown .nav-simple-panel{ left:auto; right:0; transform:translateY(8px);}\r\n  .ierare-portfolio-root #ierareAboutDropdown.open .nav-simple-panel{ transform:translateY(0);}\r\n  @media (max-width:1100px){ .ierare-portfolio-root .nav-simple{ display:none;} }\r\n  .ierare-portfolio-root .cta-btn-outline{ display:flex; align-items:center; justify-content:center; margin-top:8px; background:#2b2727; color:#fff; font-family:'Sora',sans-serif; font-weight:700; font-size:.95rem; padding:15px 24px; border-radius:999px; border:1px solid #2b2727; text-decoration:none; transition:all .25s ease;}\r\n  .ierare-portfolio-root .cta-btn-outline:hover{ background:#FDD10D; border-color:#FDD10D; color:#2b2727;}\r\n  \/* Desktop: no hamburger \u2014 links + Let's Connect sit inline in the bar *\/\r\n  .ierare-portfolio-root .header-cta{ display:none; flex:0 0 auto; margin:0; padding:12px 26px; font-size:.9rem; width:auto;}\r\n  @media (min-width:1101px){\r\n    .ierare-portfolio-root .menu-btn, .ierare-portfolio-root .nav-panel{ display:none !important;}\r\n    .ierare-portfolio-root .header-cta{ display:inline-flex;}\r\n  }\r\n  \/* Tablet + mobile: inline links collapse into the hamburger panel *\/\r\n  @media (max-width:1100px){\r\n    .ierare-portfolio-root .main-nav{ display:none;}\r\n    .ierare-portfolio-root .header-inner{ height:80px;}\r\n    .ierare-portfolio-root .filters{ top:80px;}\r\n    .ierare-portfolio-root .logo{ font-size:26px;}\r\n  }\r\n  @media (max-width:560px){\r\n    .ierare-portfolio-root .header-inner{ height:68px;}\r\n    .ierare-portfolio-root .filters{ top:68px;}\r\n    .ierare-portfolio-root .logo{ font-size:22px;}\r\n    .ierare-portfolio-root .menu-btn{ width:40px; height:36px; gap:7px;}\r\n    .ierare-portfolio-root .menu-btn span{ width:34px;}\r\n    .ierare-portfolio-root .menu-btn:hover span:nth-child(2){ width:24px;}\r\n    .ierare-portfolio-root .menu-btn.open span:nth-child(1){ transform:translateY(4.5px) rotate(45deg);}\r\n    .ierare-portfolio-root .menu-btn.open span:nth-child(2){ transform:translateY(-4.5px) rotate(-45deg); width:34px;}\r\n  }\r\n  .ierare-portfolio-root .ierare-hero{ position:relative; min-height:60vh; display:flex; flex-direction:column; align-items:flex-start; justify-content:center; background:#ffffff; padding:80px 40px 60px 0; text-align:left; overflow:hidden; box-sizing:border-box; max-width:1920px; margin:0 auto; width:100%;}\r\n  .ierare-portfolio-root .hero-eyebrow{ color:#2b2727; text-transform:uppercase; letter-spacing:.1em; font-weight:700; font-family:'Inter',sans-serif; font-size:40px; margin-top:18px; padding-left:190px;}\r\n  .ierare-portfolio-root .hero-title{ font-family:'Sora',sans-serif; font-weight:800; font-size:clamp(3.2rem,13vw,150px); color:#FDD100; letter-spacing:.01em; line-height:1; margin:0; text-transform:uppercase; padding-left:190px;}\r\n  @media (min-width:601px) and (max-width:1100px){\r\n    .ierare-portfolio-root .ierare-hero{ padding:48px 40px 50px; min-height:auto; justify-content:flex-start;}\r\n    .ierare-portfolio-root .hero-title{ padding-left:0; font-size:clamp(3rem,11vw,6.5rem); white-space:nowrap; word-break:normal;}\r\n    .ierare-portfolio-root .hero-eyebrow{ padding-left:0; font-size:clamp(1.6rem,3.6vw,2.2rem);}\r\n  }\r\n  @media (max-width:600px){\r\n    .ierare-portfolio-root .ierare-hero{ padding:24px 20px 64px; min-height:auto; justify-content:flex-start;}\r\n    .ierare-portfolio-root .hero-title{ padding-left:0; font-size:clamp(2rem,12vw,4rem); white-space:nowrap; word-break:normal;}\r\n    .ierare-portfolio-root .hero-eyebrow{ padding-left:0; font-size:clamp(1.4rem,7vw,1.8rem); line-height:1.25;}\r\n  }\r\n  .ierare-portfolio-root h1,.ierare-portfolio-root h2,.ierare-portfolio-root h3{\r\n    font-family:'Sora',sans-serif; font-weight:600; letter-spacing:.2px;\r\n  }\r\n  .ierare-portfolio-root a{color:inherit;}\r\n  .ierare-portfolio-root button{font-family:inherit; cursor:pointer;}\r\n  .ierare-portfolio-root :focus-visible{ outline:3px solid var(--gold); outline-offset:2px; }\r\n  .ierare-portfolio-root .grain{ position:absolute; inset:0; pointer-events:none; opacity:.045; z-index:0; mix-blend-mode:multiply;}\r\n  .ierare-portfolio-root .filters{ position:sticky; top:96px; z-index:30; background:var(--cream); padding:22px 24px 14px; border-bottom:1px solid var(--line); margin:0;}\r\n  .ierare-portfolio-root .filters-inner{max-width:1440px; margin:0 auto; padding:0 40px;}\r\n  .ierare-portfolio-root .filter-row{ display:flex; gap:10px; overflow-x:auto; padding:7px 4px 10px; scrollbar-width:none; justify-content:center;}\r\n  .ierare-portfolio-root .filter-row.is-overflowing{ justify-content:flex-start;}\r\n  .ierare-portfolio-root .filter-row::-webkit-scrollbar{display:none;}\r\n  .ierare-portfolio-root .pill{ flex:0 0 auto; position:relative; top:0 !important; margin:0 !important; transform:none !important; min-height:38px; line-height:1.2; border-style:solid !important; border-width:1.5px !important; border-color:var(--navy) !important; background:var(--navy); color:#FFFFFF; padding:9px 18px; border-radius:999px; font-weight:700; font-size:.88rem; box-shadow:none; transition:background-color .18s ease, border-color .18s ease, color .18s ease, box-shadow .18s ease;}\r\n  .ierare-portfolio-root .pill:hover:not(.active){ background:#3d3737; border-color:var(--navy) !important;}\r\n  .ierare-portfolio-root .pill.active,\r\n  .ierare-portfolio-root .pill.active:hover,\r\n  .ierare-portfolio-root .pill.active:focus,\r\n  .ierare-portfolio-root .pill.active:focus-visible,\r\n  .ierare-portfolio-root .pill.active:active{ background:var(--gold); border-color:var(--gold) !important; color:var(--navy-deep); outline:none !important; box-shadow:none !important;}\r\n  .ierare-portfolio-root .pill:hover,\r\n  .ierare-portfolio-root .pill:focus,\r\n  .ierare-portfolio-root .pill:focus-visible,\r\n  .ierare-portfolio-root .pill:active{ top:0 !important; margin:0 !important; transform:none !important; outline:none !important;}\r\n  .ierare-portfolio-root .pill{ -webkit-tap-highlight-color:transparent;}\r\n  .ierare-portfolio-root .swatch{width:9px; height:9px; border-radius:50%; display:inline-block; flex:0 0 auto;}\r\n  .ierare-portfolio-root .layout{ max-width:1440px; margin:0 auto; padding:0 40px; display:flex; align-items:flex-start; gap:32px; position:relative; z-index:1;}\r\n  .ierare-portfolio-root .sidebar{ flex:0 0 320px; position:sticky; top:190px; padding:26px 0 40px;}\r\n  @media (min-width:1025px) and (max-width:1280px){\r\n    .ierare-portfolio-root .sidebar{ flex-basis:240px;}\r\n  }\r\n  .ierare-portfolio-root .chip-filter-group{ display:flex; flex-direction:column; gap:14px;}\r\n  .ierare-portfolio-root .chip-filter-wrap{ position:relative; width:100%;}\r\n  .ierare-portfolio-root .filters-toggle{ display:none; width:100%; align-items:center; justify-content:center; gap:10px; background:var(--card); border:1.5px solid var(--line); border-radius:14px; padding:13px 16px; font-family:inherit; font-weight:700; font-size:.9rem; color:var(--navy); box-shadow:0 2px 8px -4px rgba(43,39,39,.12);}\r\n  .ierare-portfolio-root .filters-toggle svg{ width:18px; height:18px; stroke:var(--navy); fill:none; stroke-width:2.2; stroke-linecap:round; stroke-linejoin:round;}\r\n  .ierare-portfolio-root .filters-toggle.active{ border-color:var(--navy);}\r\n  @media (max-width:1024px){\r\n    .ierare-portfolio-root .layout{ flex-direction:column; align-items:stretch;}\r\n    .ierare-portfolio-root .sidebar{ position:static !important; top:auto !important; flex:none; width:100%; max-width:none; padding:10px 0 0; box-sizing:border-box;}\r\n    .ierare-portfolio-root .filters-toggle{ display:flex;}\r\n    .ierare-portfolio-root .chip-filter-group{ display:none; flex-direction:column; width:100%; margin-top:8px;}\r\n    .ierare-portfolio-root .chip-filter-group.open{ display:flex;}\r\n    .ierare-portfolio-root .chip-filter-group,\r\n    .ierare-portfolio-root .chip-filter-wrap,\r\n    .ierare-portfolio-root .chip-filter-wrap .dd-trigger{\r\n      width:100% !important;\r\n      max-width:none !important;\r\n      box-sizing:border-box;\r\n    }\r\n  }\r\n  @media (min-width:601px) and (max-width:1024px){\r\n    .ierare-portfolio-root .chip-filter-group,\r\n    .ierare-portfolio-root .chip-filter-wrap{\r\n      max-width:340px !important;\r\n    }\r\n  }\r\n  \/* Filter pill bar (Collection \/ Imagery \/ Basic EBC \/ etc.) AND the\r\n     Explore All \/ All Types sidebar are not sticky anywhere below desktop.\r\n     Uses the same 1100px breakpoint as the main-nav hamburger switch so\r\n     there's no gap between this and the 1024px-scoped rule above. *\/\r\n  @media (max-width:1100px){\r\n    .ierare-portfolio-root .filters{ position:static !important; top:auto !important;}\r\n    .ierare-portfolio-root .sidebar{ position:static !important; top:auto !important;}\r\n  }\r\n  @media (max-width:767px){\r\n    .ierare-portfolio-root header{ position:static;}\r\n    .ierare-portfolio-root .filters{ position:static; top:auto; padding:16px 20px 12px;}\r\n    .ierare-portfolio-root .filters-inner{ padding:0;}\r\n    .ierare-portfolio-root .layout{ padding:0 20px;}\r\n    .ierare-portfolio-root .filter-row{ display:grid; grid-template-columns:repeat(3, 1fr); overflow-x:visible; padding:4px;}\r\n    .ierare-portfolio-root .filter-row .pill{ width:100%; justify-content:center; text-align:center; padding:9px 8px; font-size:.78rem;}\r\n  }\r\n  .ierare-portfolio-root .dd-trigger{ width:100%; display:flex; align-items:center; justify-content:space-between; gap:12px; background:var(--card); border:1.5px solid var(--line); border-radius:16px; padding:18px 22px; font-family:inherit; font-weight:600; font-size:1.02rem; color:var(--navy); box-shadow:0 2px 8px -4px rgba(43,39,39,.12); transition:border-color .15s ease, box-shadow .15s ease;}\r\n  .ierare-portfolio-root .dd-trigger:active{ transform:translateY(1px);}\r\n  .ierare-portfolio-root .dd-trigger.open{ border-color:var(--navy); box-shadow:0 10px 22px -12px rgba(43,39,39,.4);}\r\n  .ierare-portfolio-root .dd-trigger-left{ display:flex; align-items:center; gap:10px; min-width:0;}\r\n  .ierare-portfolio-root .dd-trigger-label{ overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}\r\n  .ierare-portfolio-root .dd-trigger-left .swatch{ width:10px; height:10px;}\r\n  .ierare-portfolio-root .dd-chevron{ width:18px; height:18px; flex:0 0 auto; stroke:var(--navy); fill:none; stroke-width:2; stroke-linecap:round; stroke-linejoin:round; transition:transform .2s ease;}\r\n  .ierare-portfolio-root .dd-trigger.open .dd-chevron{ transform:rotate(180deg);}\r\n  \/* Explore All \/ All Types triggers were sized for desktop \u2014 scale down\r\n     for tablet and below so they don't look oversized. Placed after the\r\n     base rule above so it correctly wins regardless of media-query order\r\n     elsewhere in the file. *\/\r\n  @media (max-width:1100px){\r\n    .ierare-portfolio-root .dd-trigger{ padding:10px 14px; font-size:.82rem; border-radius:10px;}\r\n    .ierare-portfolio-root .dd-chevron{ width:15px; height:15px;}\r\n  }\r\n  .ierare-portfolio-root .dd-panel{ position:static; width:100%; height:0; display:flex; flex-wrap:wrap; gap:8px; padding:0; margin-top:0; max-height:0; overflow:hidden; opacity:0; transition:max-height .28s ease, opacity .2s ease, margin-top .28s ease;}\r\n  .ierare-portfolio-root .dd-panel.open{ opacity:1; margin-top:10px; height:auto; max-height:900px; overflow:visible;}\r\n  .ierare-portfolio-root .chip{ flex:0 0 auto; border:1.5px solid var(--line); background:transparent; color:var(--ink); padding:11px 20px; border-radius:999px; font-weight:600; font-size:.9rem; display:flex; align-items:center; gap:7px; white-space:nowrap;}\r\n  .ierare-portfolio-root .chip:hover:not(.active){ border-color:var(--navy); background:rgba(43,39,39,.06);}\r\n  .ierare-portfolio-root .chip.active{ background:var(--navy); color:var(--cream); border-color:var(--navy);}\r\n  .ierare-portfolio-root .chip .count{opacity:.55; font-weight:500; margin-left:2px;}\r\n  .ierare-portfolio-root .chip.active .count{opacity:.75;}\r\n  .ierare-portfolio-root main{max-width:none; margin:0; padding:26px 0 180px 0; flex:1; min-width:0; position:relative; z-index:1;}\r\n  .ierare-portfolio-root .result-count{ font-size:.85rem; color:var(--ink-soft); margin-bottom:16px; font-weight:600;}\r\n  .ierare-portfolio-root .grid{ display:grid; grid-template-columns:repeat(3,1fr); gap:24px;}\r\n  @media (max-width:1100px){ .ierare-portfolio-root .grid{ grid-template-columns:repeat(2,1fr); gap:20px;} }\r\n  @media (max-width:767px){ .ierare-portfolio-root .grid{grid-template-columns:1fr; gap:20px;} }\r\n  .ierare-portfolio-root .pagination{ display:flex; align-items:center; justify-content:center; gap:8px; flex-wrap:wrap; margin-top:40px;}\r\n  .ierare-portfolio-root .load-more-btn{ display:inline-flex; align-items:center; gap:8px; background:#2b2727; color:#ffffff; border:0; border-radius:999px; padding:14px 30px; font-family:'Sora',sans-serif; font-weight:700; font-size:.92rem; cursor:pointer; transition:background-color .18s ease, color .18s ease;}\r\n  .ierare-portfolio-root .load-more-btn span{ font-weight:500; opacity:.7;}\r\n  .ierare-portfolio-root .load-more-btn:hover{ background:var(--gold); color:#2b2727;}\r\n  .ierare-portfolio-root .page-btn{ min-width:40px; height:40px; padding:0 12px; border-radius:10px; border:1.5px solid var(--line); background:var(--card); color:var(--navy); font-weight:700; font-size:.88rem; display:inline-flex; align-items:center; justify-content:center; transition:all .15s ease;}\r\n  .ierare-portfolio-root .page-btn:hover:not(:disabled):not(.active){ border-color:var(--navy); background:rgba(43,39,39,.05);}\r\n  .ierare-portfolio-root .page-btn.active{ background:var(--navy); border-color:var(--navy); color:var(--cream); cursor:default;}\r\n  .ierare-portfolio-root .page-btn:disabled{ opacity:.35; cursor:default;}\r\n  .ierare-portfolio-root .page-btn.page-nav{ font-size:1.05rem;}\r\n  .ierare-portfolio-root .page-ellipsis{ color:var(--ink-soft); font-weight:700; padding:0 4px;}\r\n  .ierare-portfolio-root .card{ background:transparent; border-radius:14px; overflow:hidden; box-shadow:none; cursor:pointer; border:1px solid var(--line); text-align:left; padding:0; position:relative; transition:opacity .22s ease, border-color .22s ease; display:flex; flex-direction:column;}\r\n  .ierare-portfolio-root .card:hover{ border-color:rgba(43,39,39,.3);}\r\n  .ierare-portfolio-root .card:hover{ opacity:.88;}\r\n  .ierare-portfolio-root .tab{ position:absolute; top:14px; left:14px; padding:7px 16px; border-radius:999px; font-size:.68rem; font-weight:800; text-transform:uppercase; letter-spacing:.06em; color:var(--navy-deep); z-index:3; box-shadow:0 4px 10px -4px rgba(43,39,39,.3);}\r\n  .ierare-portfolio-root .art{ aspect-ratio:554\/380; height:auto; position:relative; z-index:1; overflow:hidden; background-size:cover; background-repeat:no-repeat; background-position:center; background-color:#EFEBEB; border-radius:0; border-bottom:1px solid var(--line);}\r\n  .ierare-portfolio-root .work-pills{ position:absolute; z-index:2; bottom:14px; left:14px; right:14px; display:flex; flex-wrap:wrap; gap:8px;}\r\n  .ierare-portfolio-root .work-pill{ background:var(--gold); color:var(--navy-deep); font-size:.68rem; font-weight:800; text-transform:uppercase; letter-spacing:.05em; padding:6px 14px; border-radius:999px;}\r\n  .ierare-portfolio-root .card-body{ padding:20px 18px 18px; flex:1; display:flex; flex-direction:column; gap:10px; color:var(--navy-deep); background:transparent;}\r\n  .ierare-portfolio-root .brand{ font-size:.75rem; font-weight:600; text-transform:none; letter-spacing:0; color:rgba(43,39,39,.55);}\r\n  .ierare-portfolio-root .product{ font-size:1.15rem; font-weight:700; color:var(--navy-deep); line-height:1.3; font-family:'Sora',sans-serif; margin-top:8px; overflow-wrap:break-word;}\r\n  .ierare-portfolio-root .view-row{ margin-top:6px; display:flex; align-items:center; justify-content:space-between; gap:8px; flex-wrap:wrap;}\r\n  .ierare-portfolio-root .view-link{ font-size:.85rem; font-weight:700; color:var(--navy-deep); display:flex; align-items:center; gap:6px; flex:0 0 auto; white-space:nowrap;}\r\n  .ierare-portfolio-root .view-link .arrow{ transition:transform .18s;}\r\n  .ierare-portfolio-root .card:hover .view-link .arrow{ transform:translateX(4px);}\r\n  .ierare-portfolio-root .card-date{ font-size:.72rem; font-weight:600; color:rgba(43,39,39,.6); text-transform:uppercase; letter-spacing:.04em; white-space:nowrap; flex:0 0 auto;}\r\n  .ierare-portfolio-root .overlay{ position:fixed; inset:0; background:var(--cream); z-index:100; transform:translateY(100%); transition:transform .38s cubic-bezier(.22,.8,.3,1); overflow-y:auto;}\r\n  .ierare-portfolio-root .overlay.open{ transform:translateY(0);}\r\n  .ierare-portfolio-root .overlay-bar{ position:sticky; top:0; z-index:5; background:rgba(255,255,255,.96); backdrop-filter:blur(6px); border-bottom:1px solid var(--line); padding:14px 24px; display:flex; align-items:center; justify-content:space-between;}\r\n  .ierare-portfolio-root .back-btn{ background:none; border:1.5px solid var(--navy); color:var(--navy); padding:8px 16px 8px 12px; border-radius:999px; font-weight:700; font-size:.85rem; display:flex; align-items:center; gap:6px;}\r\n  .ierare-portfolio-root .back-btn:hover{ background:rgba(43,39,39,.06);}\r\n  .ierare-portfolio-root .cs-eyebrow{ font-weight:700; font-size:.78rem; letter-spacing:.12em; text-transform:uppercase; color:var(--slate); margin-bottom:10px;}\r\n  .ierare-portfolio-root .cs-info-col h2{ font-size:clamp(1.6rem,2.6vw,2.3rem); color:var(--navy); margin:0 0 14px; line-height:1.1;}\r\n  .ierare-portfolio-root .cs-panel{ display:inline-flex; flex-wrap:wrap; gap:6px; justify-content:center; padding:6px; border-radius:20px; background:linear-gradient(155deg, #F9CE6B 0%, #EFAC2A 100%); box-shadow:0 16px 32px -16px rgba(43,39,39,.4), inset 0 1px 0 rgba(255,255,255,.45); margin:20px auto 26px; max-width:100%;}\r\n  .ierare-portfolio-root .cs-pill{ display:flex; align-items:center; gap:8px; padding:11px 20px; border-radius:14px; color:var(--navy-deep); font-weight:600; font-size:.86rem; text-decoration:none; white-space:nowrap;}\r\n  .ierare-portfolio-root .cs-pill-icon{ display:flex; width:16px; height:16px; flex:0 0 auto;}\r\n  .ierare-portfolio-root .cs-pill-icon svg{ width:100%; height:100%; stroke:currentColor; fill:none; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round;}\r\n  .ierare-portfolio-root .cs-pill-static{ cursor:default;}\r\n  .ierare-portfolio-root .cs-pill-link{ transition:background-color .16s ease, transform .16s ease;}\r\n  .ierare-portfolio-root .cs-pill-link:hover{ background:rgba(255,255,255,.4); transform:translateY(-1px);}\r\n  @media (max-width:767px){\r\n    .ierare-portfolio-root .cs-panel{ width:100%;}\r\n    .ierare-portfolio-root .cs-pill{ flex:1 1 calc(50% - 6px); justify-content:center;}\r\n  }\r\n  .ierare-portfolio-root .cs-specs{ max-width:700px; margin:0 auto; display:flex; flex-wrap:wrap; gap:10px; justify-content:center;}\r\n  .ierare-portfolio-root .cs-spec{ background:var(--card); border:1px solid var(--line); border-radius:10px; padding:8px 14px; font-size:.82rem; font-weight:600; color:var(--navy);}\r\n  .ierare-portfolio-root .cs-spec span{ color:var(--ink-soft); font-weight:500;}\r\n  .ierare-portfolio-root .cs-strategy{ max-width:900px; margin:0 auto; padding:44px 24px 0;}\r\n  .ierare-portfolio-root .cs-strategy h3{ color:var(--navy); font-size:1.1rem; text-transform:uppercase; letter-spacing:.08em; margin:0 0 22px; text-align:center;}\r\n  .ierare-portfolio-root .bar-row{ margin-bottom:16px;}\r\n  .ierare-portfolio-root .bar-label{ display:flex; justify-content:space-between; font-weight:700; font-size:.85rem; color:var(--navy); margin-bottom:6px;}\r\n  .ierare-portfolio-root .bar-track{ height:10px; background:#EFEBEB; border-radius:999px; overflow:hidden;}\r\n  .ierare-portfolio-root .bar-fill{ height:100%; background:linear-gradient(90deg,var(--gold),var(--lime)); border-radius:999px;}\r\n  .ierare-portfolio-root .bar-sub{ font-size:.78rem; color:var(--ink-soft); margin-top:4px;}\r\n  .ierare-portfolio-root .cs-gallery{ width:100%; max-width:none; margin:0; padding:40px clamp(20px,3vw,48px) 80px; overflow-x:hidden; box-sizing:border-box;}\r\n  .ierare-portfolio-root .cs-section{ margin-bottom:44px;}\r\n  .ierare-portfolio-root .cs-section:last-child{ margin-bottom:0;}\r\n  .ierare-portfolio-root .cs-section h3{ text-align:center; color:var(--navy); font-size:1.2rem; margin-bottom:20px;}\r\n  .ierare-portfolio-root .cs-subgroup-row{ display:flex; flex-direction:row; align-items:flex-start; gap:24px;}\r\n  .ierare-portfolio-root .cs-subgroup-row .cs-subgroup{ flex:1; min-width:0; margin-bottom:0;}\r\n  @media (max-width:600px){\r\n    .ierare-portfolio-root .cs-subgroup-row{ gap:10px;}\r\n  }\r\n  .ierare-portfolio-root .cs-subgroup{ margin-bottom:26px;}\r\n  .ierare-portfolio-root .cs-subgroup:last-child{ margin-bottom:0;}\r\n  .ierare-portfolio-root .cs-subgroup h4{ text-align:center; color:var(--slate); font-size:.8rem; font-weight:700; text-transform:uppercase; letter-spacing:.08em; margin:0 0 12px;}\r\n  .ierare-portfolio-root .gallery-hero-row{ width:100%; display:grid; grid-template-columns:minmax(0,7fr) minmax(0,3fr); align-items:start; gap:24px; margin-bottom:44px;}\r\n  .ierare-portfolio-root .gallery-hero-row--no-media{ grid-template-columns:1fr; max-width:640px; margin-left:auto; margin-right:auto;}\r\n  .ierare-portfolio-root .gallery-slideshow{ width:100%; min-width:0; background:#2b2727; border-radius:20px; padding:18px; display:flex; flex-direction:column; gap:14px;}\r\n  .ierare-portfolio-root .gallery-main{ position:relative; background:#EFEBEB; border-radius:12px; overflow:hidden; width:100%; height:clamp(340px,38vw,520px); display:flex; align-items:center; justify-content:center; cursor:zoom-in;}\r\n  .ierare-portfolio-root .gallery-main img{ width:100%; height:100%; object-fit:contain; display:block;}\r\n  .ierare-portfolio-root .gallery-nav{ position:absolute; top:50%; transform:translateY(-50%); width:38px; height:38px; border-radius:50%; background:rgba(255,255,255,.92); color:#2b2727; border:none; display:flex; align-items:center; justify-content:center; font-size:1.15rem; font-weight:700; box-shadow:0 4px 12px rgba(0,0,0,.28); transition:background-color .15s ease, transform .15s ease; z-index:2;}\r\n  .ierare-portfolio-root .gallery-nav:hover{ background:#fff; transform:translateY(-50%) scale(1.06);}\r\n  .ierare-portfolio-root .gallery-prev{ left:10px;}\r\n  .ierare-portfolio-root .gallery-next{ right:10px;}\r\n  .ierare-portfolio-root .gallery-thumbs{ display:flex; gap:10px; overflow-x:auto; padding:2px; scrollbar-width:none;}\r\n  .ierare-portfolio-root .gallery-thumbs::-webkit-scrollbar{display:none;}\r\n  .ierare-portfolio-root .gallery-thumb{ flex:0 0 auto; width:64px; height:64px; border-radius:9px; overflow:hidden; border:2px solid transparent; background:#EFEBEB; padding:0; opacity:.7; transition:opacity .15s ease, border-color .15s ease;}\r\n  .ierare-portfolio-root .gallery-thumb:hover{ opacity:1;}\r\n  .ierare-portfolio-root .gallery-thumb.active{ border-color:var(--gold); opacity:1;}\r\n  .ierare-portfolio-root .gallery-thumb img{ width:100%; height:100%; object-fit:cover; display:block;}\r\n  \/* Right-hand info column: title\/brand\/links\/specs, next to the slideshow. *\/\r\n  .ierare-portfolio-root .cs-info-col{ display:flex; flex-direction:column; align-items:center; text-align:center; gap:6px; padding:4px;}\r\n  .ierare-portfolio-root .cs-info-col .cs-panel{ margin:16px auto 20px;}\r\n  .ierare-portfolio-root .cs-info-col .cs-specs{ margin:0 auto;}\r\n  @media (max-width:900px){\r\n    .ierare-portfolio-root .gallery-hero-row{ grid-template-columns:1fr;}\r\n    .ierare-portfolio-root .gallery-main{ height:clamp(280px,62vw,440px);}\r\n  }\r\n  \/* Full-screen lightbox \u2014 opened by clicking the main slideshow image or\r\n     any EBC\/A+ thumbnail. Shows one image at a time with prev\/next arrows,\r\n     a thumbnail strip for the current image set, Escape\/backdrop\/arrow-key\r\n     to close or navigate. *\/\r\n  .ierare-portfolio-root .ierare-lightbox{ position:fixed; inset:0; z-index:300; background:rgba(10,9,9,.94); display:flex; flex-direction:column; align-items:center; justify-content:center; gap:14px; padding:64px 88px 20px; box-sizing:border-box; opacity:0; visibility:hidden; transition:opacity .2s ease, visibility .2s ease;}\r\n  .ierare-portfolio-root .ierare-lightbox.open{ opacity:1; visibility:visible;}\r\n  .ierare-portfolio-root .lightbox-stage{ position:relative; flex:1 1 auto; min-height:0; max-width:min(1500px,96vw); width:100%; display:flex; align-items:center; justify-content:center;}\r\n  .ierare-portfolio-root .lightbox-stage img{ max-width:100%; max-height:calc(100vh - 220px); object-fit:contain; border-radius:10px; display:block;}\r\n  .ierare-portfolio-root .lightbox-close{ position:absolute; top:18px; right:18px; width:44px; height:44px; border-radius:50%; background:rgba(255,255,255,.14); color:#fff; border:none; font-size:1.6rem; line-height:1; display:flex; align-items:center; justify-content:center; z-index:2;}\r\n  .ierare-portfolio-root .lightbox-close:hover{ background:rgba(255,255,255,.26);}\r\n  .ierare-portfolio-root .lightbox-nav{ position:fixed; top:50%; transform:translateY(-50%); width:48px; height:48px; border-radius:50%; background:rgba(255,255,255,.14); color:#fff; border:none; font-size:1.3rem; font-weight:700; display:flex; align-items:center; justify-content:center; z-index:2;}\r\n  .ierare-portfolio-root .lightbox-nav:hover{ background:rgba(255,255,255,.26);}\r\n  .ierare-portfolio-root .lightbox-next{ right:22px;}\r\n  .ierare-portfolio-root .lightbox-thumbs{ flex:0 0 auto; display:flex; gap:8px; margin-top:0; max-width:92vw; overflow-x:auto; padding:4px; scrollbar-width:none;}\r\n  .ierare-portfolio-root .lightbox-caption{ font-family:'Sora',sans-serif; font-weight:700; font-size:clamp(1.1rem,2.6vw,1.6rem); color:#EDE3CC; letter-spacing:.01em; flex:0 0 auto; margin-top:0; text-align:center;}\r\n  .ierare-portfolio-root .lightbox-thumbs::-webkit-scrollbar{ display:none;}\r\n  .ierare-portfolio-root .lightbox-thumbs button{ flex:0 0 auto; width:54px; height:54px; border-radius:8px; overflow:hidden; border:2px solid transparent; opacity:.6; background:#333; padding:0;}\r\n  .ierare-portfolio-root .lightbox-thumbs button.active{ border-color:var(--gold); opacity:1;}\r\n  .ierare-portfolio-root .lightbox-thumbs img{ width:100%; height:100%; object-fit:cover; display:block;}\r\n  @media (max-width:600px){\r\n    .ierare-portfolio-root .lightbox-nav{ width:40px; height:40px;}\r\n    .ierare-portfolio-root .ierare-lightbox{ padding:64px 12px 16px;}\r\n    .ierare-portfolio-root .lightbox-stage img{ max-height:calc(100vh - 200px);}\r\n    .ierare-portfolio-root .lightbox-next{ right:8px;}\r\n  }\r\n  .ierare-portfolio-root .gal-grid{ display:grid; grid-template-columns:repeat(2,1fr); gap:18px;}\r\n  .ierare-portfolio-root .gal-grid--stack{ grid-template-columns:1fr; gap:22px; max-width:760px; margin:0 auto;}\r\n  @media (max-width:767px){\r\n    .ierare-portfolio-root .gal-grid{grid-template-columns:1fr;}\r\n    .ierare-portfolio-root .cs-gallery{ padding:28px 20px 60px;}\r\n    .ierare-portfolio-root .cs-section{ margin-bottom:36px;}\r\n  }\r\n  .ierare-portfolio-root .gal-tile{ border-radius:14px; overflow:hidden; box-shadow:var(--shadow); background-color:#EFEBEB; display:flex;}\r\n  .ierare-portfolio-root .gal-tile--full{ grid-column:1 \/ -1;}\r\n  .ierare-portfolio-root .gal-tile img{ display:block; width:100%; height:auto;}\r\n  .ierare-portfolio-root .empty{ text-align:center; padding:60px 20px; color:var(--ink-soft);}\r\n  .ierare-portfolio-root .empty strong{ display:block; color:var(--navy); font-size:1.2rem; margin-bottom:6px; font-family:'Sora';}\r\n\r\n  \/* ---------- Case study: Sidebar Index layout ---------- *\/\r\n  .ierare-portfolio-root .cs-layout{ display:grid; grid-template-columns:320px minmax(0,1fr); gap:56px; max-width:1440px; margin:0 auto; padding:36px 48px 100px; box-sizing:border-box; align-items:start;}\r\n  .ierare-portfolio-root .cs-side{ position:sticky; top:92px; display:flex; flex-direction:column; gap:26px; max-height:calc(100vh - 116px); overflow-y:auto; scrollbar-width:none;}\r\n  .ierare-portfolio-root .cs-side::-webkit-scrollbar{ display:none;}\r\n  .ierare-portfolio-root .cs-side-brand{ font-size:.72rem; font-weight:700; letter-spacing:.14em; text-transform:uppercase; color:var(--ink-soft);}\r\n  .ierare-portfolio-root .cs-side-title{ margin:8px 0 0; font-family:'Sora',sans-serif; font-size:2rem; font-weight:800; line-height:1.15; color:var(--navy);}\r\n  .ierare-portfolio-root .cs-side-tags{ display:flex; gap:6px; flex-wrap:wrap; margin-top:14px;}\r\n  .ierare-portfolio-root .cs-side-tag{ background:var(--gold); color:#2b2727; font-size:.68rem; font-weight:800; text-transform:uppercase; letter-spacing:.05em; padding:6px 12px; border-radius:999px;}\r\n  .ierare-portfolio-root .cs-facts{ margin:0; display:flex; flex-direction:column;}\r\n  .ierare-portfolio-root .cs-fact{ display:flex; justify-content:space-between; gap:12px; padding:12px 0; border-top:1px solid var(--line); font-size:.86rem;}\r\n  .ierare-portfolio-root .cs-fact:last-child{ border-bottom:1px solid var(--line);}\r\n  .ierare-portfolio-root .cs-fact dt{ color:var(--ink-soft); font-weight:500;}\r\n  .ierare-portfolio-root .cs-fact dd{ margin:0; font-weight:700; color:var(--navy); text-align:right;}\r\n  .ierare-portfolio-root .cs-nav{ display:flex; flex-direction:column; gap:2px;}\r\n  .ierare-portfolio-root .cs-nav-label{ font-size:.7rem; font-weight:700; letter-spacing:.14em; text-transform:uppercase; color:var(--ink-soft); margin-bottom:6px;}\r\n  .ierare-portfolio-root .cs-nav-link{ display:flex; align-items:center; gap:10px; padding:9px 0; font-weight:600; font-size:.9rem; color:var(--ink-soft); text-decoration:none; transition:color .15s ease;}\r\n  .ierare-portfolio-root .cs-nav-dot{ width:8px; height:8px; border-radius:50%; background:var(--line); flex:0 0 auto; transition:background-color .15s ease;}\r\n  .ierare-portfolio-root .cs-nav-link:hover{ color:var(--navy);}\r\n  .ierare-portfolio-root .cs-nav-link.active{ color:var(--navy); font-weight:700;}\r\n  .ierare-portfolio-root .cs-nav-link.active .cs-nav-dot{ background:var(--gold);}\r\n  .ierare-portfolio-root .cs-links{ display:flex; flex-direction:column; gap:8px;}\r\n  .ierare-portfolio-root .cs-link-row{ display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:8px;}\r\n  .ierare-portfolio-root .cs-link{ display:flex; align-items:center; justify-content:center; gap:8px; padding:13px 14px; border-radius:12px; border:1.5px solid #2b2727; background:transparent; color:#2b2727; font-weight:700; font-size:.85rem; text-decoration:none; transition:background-color .18s ease, color .18s ease, border-color .18s ease;}\r\n  .ierare-portfolio-root .cs-link svg{ width:16px; height:16px; flex:0 0 auto; stroke:currentColor; fill:none; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round;}\r\n  .ierare-portfolio-root .cs-link--primary{ background:#2b2727; color:#ffffff;}\r\n  .ierare-portfolio-root .cs-link:hover{ background:var(--gold); border-color:var(--gold); color:#2b2727;}\r\n  .ierare-portfolio-root .cs-main{ min-width:0; display:flex; flex-direction:column; gap:56px;}\r\n  .ierare-portfolio-root .cs-main .cs-block,\r\n  .ierare-portfolio-root .cs-main .cs-section,\r\n  .ierare-portfolio-root .cs-main .cs-strategy{ margin:0; padding:0; max-width:none; scroll-margin-top:92px;}\r\n  .ierare-portfolio-root .cs-main .cs-block-head{ display:flex; align-items:baseline; gap:8px; margin:0 0 18px; font-family:'Sora',sans-serif; font-size:1.35rem; font-weight:700; letter-spacing:0; text-transform:none; color:var(--navy); text-align:left;}\r\n  .ierare-portfolio-root .cs-block-count{ font-size:.95rem; color:var(--ink-soft); font-weight:600;}\r\n  .ierare-portfolio-root .cs-main .cs-subgroup h4{ text-align:left;}\r\n  .ierare-portfolio-root .cs-gal{ display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:16px; grid-auto-flow:dense;}\r\n  .ierare-portfolio-root .cs-gal-tile{ position:relative; display:block; aspect-ratio:1\/1; padding:0; border-radius:14px; overflow:hidden; background:#F4F1F1; border:1px solid var(--line); cursor:zoom-in;}\r\n  .ierare-portfolio-root .cs-gal-tile img{ width:100%; height:100%; object-fit:contain; display:block; transition:transform .3s ease;}\r\n  .ierare-portfolio-root .cs-gal-tile:hover img{ transform:scale(1.03);}\r\n  .ierare-portfolio-root .cs-gal-tile--lead{ grid-column:span 2; grid-row:span 2;}\r\n\r\n  @media (max-width:900px){\r\n    .ierare-portfolio-root .cs-layout{ display:flex; flex-direction:column; gap:0; padding:20px 20px 80px;}\r\n    \/* The sidebar's pieces become direct items of the page column, so the\r\n       section index can stay pinned while the whole page scrolls. *\/\r\n    .ierare-portfolio-root .cs-side{ display:contents;}\r\n    .ierare-portfolio-root .cs-side-head{ order:1; margin-bottom:18px;}\r\n    .ierare-portfolio-root .cs-side-title{ font-size:1.6rem;}\r\n    .ierare-portfolio-root .cs-facts{ order:2; display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px; margin-bottom:16px;}\r\n    .ierare-portfolio-root .cs-fact,\r\n    .ierare-portfolio-root .cs-fact:last-child{ flex-direction:column; justify-content:flex-start; gap:2px; padding:10px 12px; border:0; border-radius:10px; background:#F4F1F1;}\r\n    .ierare-portfolio-root .cs-fact dt{ font-size:.68rem;}\r\n    .ierare-portfolio-root .cs-fact dd{ text-align:left; font-size:.82rem;}\r\n    .ierare-portfolio-root .cs-links{ order:3; display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); gap:8px; margin-bottom:20px;}\r\n    .ierare-portfolio-root .cs-link-row{ display:contents;}\r\n    .ierare-portfolio-root .cs-link{ padding:12px 6px; font-size:.76rem; border-radius:10px;}\r\n    .ierare-portfolio-root .cs-link svg{ display:none;}\r\n    .ierare-portfolio-root .cs-nav{ order:4; position:sticky; top:64px; z-index:4; align-self:stretch; width:100%; box-sizing:border-box; flex-direction:row; gap:22px; overflow-x:auto; scrollbar-width:none; background:var(--cream); margin:0 0 24px; padding:0; border:0; box-shadow:inset 0 -1px 0 var(--line), 0 -1px 0 var(--line);}\r\n    .ierare-portfolio-root .cs-nav--single{ display:none;}\r\n    .ierare-portfolio-root .cs-nav::-webkit-scrollbar{ display:none;}\r\n    .ierare-portfolio-root .cs-nav-label,\r\n    .ierare-portfolio-root .cs-nav-dot{ display:none;}\r\n    .ierare-portfolio-root .cs-nav-link{ flex:0 0 auto; padding:14px 0 11px; border-bottom:3px solid transparent; white-space:nowrap; font-size:.82rem;}\r\n    .ierare-portfolio-root .cs-nav-link.active{ border-bottom-color:var(--gold);}\r\n    .ierare-portfolio-root .cs-main{ order:5; gap:40px;}\r\n    .ierare-portfolio-root .cs-main .cs-block,\r\n    .ierare-portfolio-root .cs-main .cs-section,\r\n    .ierare-portfolio-root .cs-main .cs-strategy{ scroll-margin-top:124px;}\r\n    .ierare-portfolio-root .cs-gal{ grid-template-columns:repeat(2,minmax(0,1fr)); gap:10px;}\r\n    .ierare-portfolio-root .cs-gal-tile--lead{ grid-column:span 2; grid-row:auto;}\r\n  }\r\n\r\n  \/* ---------- Footer ---------- *\/\r\n  .ierare-portfolio-root .ierare-footer{ position:relative; z-index:1; padding:0 clamp(12px,1.4vw,24px) clamp(12px,1.4vw,24px); font-family:'Sora',sans-serif; color:#2b2727;}\r\n  .ierare-portfolio-root .ft-card{ background:#F5F5F5; border-radius:18px; padding:20px; box-sizing:border-box;}\r\n  .ierare-portfolio-root .ft-topbar{ display:flex; align-items:center; justify-content:space-between; gap:20px; flex-wrap:wrap; background:#0a0a0a; border-radius:10px; padding:20px 24px;}\r\n  .ierare-portfolio-root .ft-mail{ display:inline-flex; align-items:center; gap:14px; color:#ffffff; text-decoration:none; font-weight:600; font-size:clamp(1.15rem,1.9vw,1.75rem); letter-spacing:-.02em;}\r\n  .ierare-portfolio-root .ft-mail svg{ width:24px; height:24px; flex:0 0 auto; stroke:#ffffff; fill:none; stroke-width:1.8; stroke-linecap:round; stroke-linejoin:round;}\r\n  .ierare-portfolio-root .ft-mail:hover{ color:var(--gold);}\r\n  .ierare-portfolio-root .ft-social{ display:flex; align-items:center; gap:6px;}\r\n  .ierare-portfolio-root .ft-social a{ display:block; width:52px; height:52px; border-radius:12px; transition:transform .18s ease;}\r\n  .ierare-portfolio-root .ft-social a:nth-child(odd){ transform:rotate(-4deg);}\r\n  .ierare-portfolio-root .ft-social a:nth-child(even){ transform:rotate(4deg);}\r\n  .ierare-portfolio-root .ft-social a:hover{ transform:rotate(0) translateY(-3px);}\r\n  .ierare-portfolio-root .ft-social img{ width:100%; height:100%; object-fit:contain; display:block;}\r\n  .ierare-portfolio-root .ft-cta{ display:flex; align-items:center; justify-content:space-between; gap:32px; padding:clamp(56px,7vw,110px) clamp(20px,3vw,56px) clamp(48px,6vw,96px);}\r\n  .ierare-portfolio-root .ft-headline{ margin:0; font-family:'Sora',sans-serif; font-weight:800; font-size:clamp(2.4rem,6.4vw,7rem); line-height:.95; letter-spacing:-.02em; text-transform:uppercase; color:#2b2727;}\r\n  .ierare-portfolio-root .ft-gold{ color:#FDD10D;}\r\n  .ierare-portfolio-root .ft-talk{ flex:0 0 auto; display:inline-flex; align-items:center; justify-content:center; background:#2b2727; color:#ffffff; text-decoration:none; text-transform:uppercase; font-weight:700; font-size:.9rem; letter-spacing:.01em; padding:20px 36px; border-radius:999px; transition:background-color .18s ease, color .18s ease;}\r\n  .ierare-portfolio-root .ft-talk:hover{ background:#FDD10D; color:#2b2727;}\r\n  .ierare-portfolio-root .ft-info{ display:grid; grid-template-columns:minmax(0,2fr) minmax(0,1fr) minmax(0,1fr) auto; gap:32px; align-items:start; padding:0 clamp(20px,3vw,56px);}\r\n  .ierare-portfolio-root .ft-col{ display:flex; flex-direction:column; gap:4px; min-width:0;}\r\n  .ierare-portfolio-root .ft-label{ margin:0 0 10px; font-family:'Sora',sans-serif; font-size:1.35rem; font-weight:600; letter-spacing:-.02em; color:rgba(10,10,10,.55);}\r\n  .ierare-portfolio-root .ft-label--dark{ color:#2b2727;}\r\n  .ierare-portfolio-root .ft-value{ color:#2b2727; text-decoration:none; font-weight:600; font-size:1.3rem; letter-spacing:-.02em; line-height:1.3; overflow-wrap:anywhere;}\r\n  .ierare-portfolio-root .ft-value:hover{ color:#8a6d00;}\r\n  .ierare-portfolio-root .ft-sr{ position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap;}\r\n  .ierare-portfolio-root .ft-news{ position:relative; display:flex; align-items:center; max-width:460px; border:1px solid rgba(6,2,0,.14); border-radius:999px; background:#ffffff; padding:5px 5px 5px 22px;}\r\n  .ierare-portfolio-root .ft-news input{ flex:1; min-width:0; border:0; outline:0; background:transparent; font-family:inherit; font-size:1rem; font-weight:500; color:#2b2727; padding:12px 0;}\r\n  .ierare-portfolio-root .ft-news input::placeholder{ color:rgba(10,10,10,.5);}\r\n  .ierare-portfolio-root .ft-news:focus-within{ border-color:#2b2727;}\r\n  .ierare-portfolio-root .ft-news button{ flex:0 0 auto; width:44px; height:44px; border-radius:50%; border:0; background:#0a0a0a; display:flex; align-items:center; justify-content:center; cursor:pointer; transition:background-color .18s ease;}\r\n  .ierare-portfolio-root .ft-news button svg{ width:18px; height:18px; stroke:#ffffff; fill:none; stroke-width:2.2; stroke-linecap:round; stroke-linejoin:round;}\r\n  .ierare-portfolio-root .ft-news button:hover{ background:#FDD10D;}\r\n  .ierare-portfolio-root .ft-news button:hover svg{ stroke:#2b2727;}\r\n  .ierare-portfolio-root .ft-news.is-error{ border-color:#c0392b;}\r\n  .ierare-portfolio-root .ft-badges{ display:flex; gap:14px; align-items:center;}\r\n  .ierare-portfolio-root .ft-badges img{ height:96px; width:auto; border-radius:14px; display:block;}\r\n  .ierare-portfolio-root .ft-bottom{ display:flex; align-items:center; justify-content:space-between; gap:16px; flex-wrap:wrap; padding:clamp(48px,6vw,96px) clamp(20px,3vw,56px) 12px;}\r\n  .ierare-portfolio-root .ft-copy{ margin:0; font-size:1.05rem; font-weight:500; color:#2b2727;}\r\n  .ierare-portfolio-root .ft-top{ display:inline-flex; align-items:center; gap:10px; color:#2b2727; text-decoration:none; font-weight:600; font-size:1.4rem; letter-spacing:-.02em;}\r\n  .ierare-portfolio-root .ft-top svg{ width:22px; height:22px; stroke:currentColor; fill:none; stroke-width:2; stroke-linecap:round; stroke-linejoin:round; transition:transform .18s ease;}\r\n  .ierare-portfolio-root .ft-top:hover svg{ transform:translateY(-3px);}\r\n\r\n  \/* Tablet: newsletter full width, contact columns side by side *\/\r\n  @media (max-width:1100px){\r\n    .ierare-portfolio-root .ft-info{ grid-template-columns:repeat(2,minmax(0,1fr)); row-gap:40px;}\r\n    .ierare-portfolio-root .ft-col--news{ grid-column:1 \/ -1;}\r\n    .ierare-portfolio-root .ft-badges{ grid-column:1 \/ -1;}\r\n  }\r\n  \/* Phone *\/\r\n  @media (max-width:767px){\r\n    .ierare-portfolio-root .ierare-footer{ padding:0 10px 10px;}\r\n    .ierare-portfolio-root .ft-card{ padding:12px; border-radius:16px;}\r\n    .ierare-portfolio-root .ft-topbar{ flex-direction:column; align-items:flex-start; gap:16px; padding:20px;}\r\n    .ierare-portfolio-root .ft-mail{ font-size:1.25rem; gap:12px;}\r\n    .ierare-portfolio-root .ft-social a{ width:46px; height:46px;}\r\n    .ierare-portfolio-root .ft-cta{ flex-direction:column; align-items:flex-start; gap:24px; padding:48px 12px 40px;}\r\n    .ierare-portfolio-root .ft-headline{ font-size:clamp(2.1rem,10.5vw,3rem);}\r\n    .ierare-portfolio-root .ft-talk{ padding:16px 28px; font-size:.82rem;}\r\n    .ierare-portfolio-root .ft-info{ grid-template-columns:1fr; row-gap:32px; padding:0 12px;}\r\n    .ierare-portfolio-root .ft-label{ font-size:1.1rem; margin-bottom:8px;}\r\n    .ierare-portfolio-root .ft-value{ font-size:1.15rem;}\r\n    .ierare-portfolio-root .ft-news{ max-width:none;}\r\n    .ierare-portfolio-root .ft-badges img{ height:74px; border-radius:12px;}\r\n    .ierare-portfolio-root .ft-bottom{ flex-direction:column-reverse; align-items:flex-start; gap:18px; padding:44px 12px 8px; border-top:0;}\r\n    .ierare-portfolio-root .ft-copy{ font-size:.9rem; color:rgba(10,10,10,.65);}\r\n    .ierare-portfolio-root .ft-top{ font-size:1.1rem;}\r\n  }\r\n\r\n  .ierare-back-to-top{\r\n    position:fixed;\r\n    right:28px;\r\n    bottom:28px;\r\n    z-index:70;\r\n    width:52px;\r\n    height:52px;\r\n    border-radius:50%;\r\n    background:#2b2727;\r\n    border:1.5px solid #2b2727;\r\n    box-shadow:0 10px 26px -8px rgba(43,39,39,.45);\r\n    display:flex;\r\n    align-items:center;\r\n    justify-content:center;\r\n    opacity:0;\r\n    visibility:hidden;\r\n    transform:translateY(14px);\r\n    transition:opacity .22s ease, transform .22s ease, background-color .18s ease, border-color .18s ease, box-shadow .18s ease;\r\n    cursor:pointer;\r\n    -webkit-tap-highlight-color:transparent;\r\n  }\r\n  .ierare-back-to-top.visible{ opacity:1; visibility:visible; transform:translateY(0);}\r\n  .ierare-back-to-top:hover{ background:var(--gold); border-color:var(--gold); box-shadow:0 14px 30px -8px rgba(43,39,39,.55); transform:translateY(-3px);}\r\n  .ierare-back-to-top:hover svg{ stroke:#2b2727;}\r\n  .ierare-back-to-top svg{ width:20px; height:20px; stroke:#ffffff; fill:none; stroke-width:2.6; stroke-linecap:round; stroke-linejoin:round; transition:stroke .18s ease;}\r\n  .ierare-back-to-top:focus-visible{ outline:3px solid var(--gold); outline-offset:3px;}\r\n  @media (max-width:560px){\r\n    .ierare-back-to-top{ right:16px; bottom:16px; width:46px; height:46px;}\r\n    .ierare-back-to-top svg{ width:18px; height:18px;}\r\n  }\r\n        <\/style>\r\n<div class=\"ierare-portfolio-root\" id=\"ierarePortfolioRoot\">\r\n<svg class=\"grain\" width=\"100%\" height=\"100%\">\r\n  <filter id=\"ierare-n\"><feTurbulence type=\"fractalNoise\" baseFrequency=\"0.85\" numOctaves=\"2\" stitchTiles=\"stitch\"\/><\/filter>\r\n  <rect width=\"100%\" height=\"100%\" filter=\"url(#ierare-n)\"\/>\r\n<\/svg>\r\n<header>\r\n  <div class=\"header-inner\">\r\n    <a class=\"logo\" href=\"https:\/\/www.ierare.com\/\" aria-label=\"i.e.rare home\">i<span class=\"dot\">.<\/span>e<span class=\"dot\">.<\/span>rare<\/a>\r\n    <nav class=\"main-nav\" aria-label=\"Main\">\r\n      <a href=\"https:\/\/redesign.ierare.com\/\">Home<\/a>\r\n\r\n      <div class=\"nav-mega\" id=\"ierareEcomMega\">\r\n        <a class=\"nav-mega-trigger\" href=\"https:\/\/redesign.ierare.com\/ierare-stores-marketplaces\/\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n          eCommerce\r\n          <svg class=\"nav-mega-chevron\" viewBox=\"0 0 24 24\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\r\n        <\/a>\r\n        <div class=\"nav-mega-panel\">\r\n          <div class=\"nav-mega-cats\">\r\n            <a class=\"nav-mega-cat active\" data-cat=\"amazon\" href=\"https:\/\/redesign.ierare.com\/ierare-amazon-marketplace\/\">\r\n              Amazon Services\r\n              <svg class=\"nav-mega-chevron\" viewBox=\"0 0 24 24\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\r\n            <\/a>\r\n            <a class=\"nav-mega-cat\" data-cat=\"shopify\" href=\"https:\/\/redesign.ierare.com\/3-1-sub-service-shopify-stores\/\">Shopify Stores<\/a>\r\n            <a class=\"nav-mega-cat\" data-cat=\"launch\" href=\"https:\/\/redesign.ierare.com\/ierare-new-product-launch\/\">New Product Launch<\/a>\r\n            <a class=\"nav-mega-cat\" data-cat=\"fba\" href=\"https:\/\/redesign.ierare.com\/ierare-fba-reimbursements\/\">FBA Reimbursement Recovery<\/a>\r\n          <\/div>\r\n          <div class=\"nav-mega-links\">\r\n            <a class=\"nav-mega-link\" data-cat=\"amazon\" href=\"https:\/\/redesign.ierare.com\/2-1-sub-service-amazon-account-management\/\">Amazon Account Management<\/a>\r\n            <a class=\"nav-mega-link\" data-cat=\"amazon\" href=\"https:\/\/redesign.ierare.com\/ierare-sponsored-ads-management\/\">Sponsored Ads Management<\/a>\r\n            <a class=\"nav-mega-link\" data-cat=\"amazon\" href=\"https:\/\/redesign.ierare.com\/ierare-product-listing-optimization\/\">Product listing Optimization<\/a>\r\n            <a class=\"nav-mega-link\" data-cat=\"amazon\" href=\"https:\/\/redesign.ierare.com\/ierare-improve-product-visibility\/\">Improve Product Visibility<\/a>\r\n            <a class=\"nav-mega-link\" data-cat=\"amazon\" href=\"https:\/\/redesign.ierare.com\/product-photography-image-editing\/\">Product Photography and Image Editing<\/a>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"nav-simple\" id=\"ierareMarketingDropdown\">\r\n        <a class=\"nav-mega-trigger\" href=\"https:\/\/redesign.ierare.com\/ierare-digital-service\/\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n          Digital Marketing\r\n          <svg class=\"nav-mega-chevron\" viewBox=\"0 0 24 24\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\r\n        <\/a>\r\n        <div class=\"nav-simple-panel\">\r\n          <a href=\"https:\/\/redesign.ierare.com\/ierare-search-engine-optimization\/\">Search Engine Optimization<\/a>\r\n          <a href=\"https:\/\/redesign.ierare.com\/ierare-ai-search-optimization\/\">AI Search Optimization Services<\/a>\r\n          <a href=\"https:\/\/redesign.ierare.com\/ierare-ecommerce-seo-services\/\">Ecommerce SEO Services<\/a>\r\n          <a href=\"https:\/\/redesign.ierare.com\/ierare-content-marketing\/\">Content Marketing<\/a>\r\n          <a href=\"https:\/\/redesign.ierare.com\/ierare-paid-search-management\/\">Paid Search Management<\/a>\r\n          <a href=\"https:\/\/redesign.ierare.com\/ierare-social-media-advertising\/\">Social Media Advertising<\/a>\r\n          <a href=\"https:\/\/redesign.ierare.com\/ierare-conversion-optimization\/\">Conversion Rate Optimization<\/a>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <a href=\"https:\/\/redesign.ierare.com\/ierare-white-label-services\/\">White Label<\/a>\r\n\r\n      <div class=\"nav-simple\" id=\"ierareResourcesDropdown\">\r\n        <a class=\"nav-mega-trigger\" href=\"https:\/\/redesign.ierare.com\/ierare-resources\/\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n          Resources\r\n          <svg class=\"nav-mega-chevron\" viewBox=\"0 0 24 24\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\r\n        <\/a>\r\n        <div class=\"nav-simple-panel\">\r\n          <a href=\"https:\/\/redesign.ierare.com\/blog\/\">Blogs<\/a>\r\n          <a href=\"https:\/\/portfolio.ierare.com\/\">Portfolio<\/a>\r\n          <a href=\"https:\/\/redesign.ierare.com\/case-studies-new\/\">Case Study<\/a>\r\n        <\/div>\r\n      <\/div>\r\n\r\n      <div class=\"nav-simple\" id=\"ierareAboutDropdown\">\r\n        <a class=\"nav-mega-trigger\" href=\"https:\/\/redesign.ierare.com\/1-1-about-page\/\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n          About Us\r\n          <svg class=\"nav-mega-chevron\" viewBox=\"0 0 24 24\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\r\n        <\/a>\r\n        <div class=\"nav-simple-panel\">\r\n          <a href=\"https:\/\/redesign.ierare.com\/ierare-team-page\/\">Team Page<\/a>\r\n          <a href=\"https:\/\/redesign.ierare.com\/ierare-team-trips\/\">Team Trips<\/a>\r\n        <\/div>\r\n      <\/div>\r\n    <\/nav>\r\n    <a class=\"cta-btn-outline header-cta\" href=\"https:\/\/www.ierare.com\/contact-us\/\" target=\"_blank\" rel=\"noopener\">Let's Connect<\/a>\r\n    <button class=\"menu-btn\" id=\"ierareMenuBtn\" type=\"button\" aria-label=\"Open menu\" aria-expanded=\"false\" aria-controls=\"ierareNavPanel\">\r\n      <span><\/span><span><\/span>\r\n    <\/button>\r\n    <div class=\"nav-panel\" id=\"ierareNavPanel\">\r\n      <div class=\"nav-panel-top\">\r\n        <a class=\"nav-panel-logo\" href=\"https:\/\/redesign.ierare.com\/\" aria-label=\"i.e.rare home\">i<span class=\"dot\">.<\/span>e<span class=\"dot\">.<\/span>rare<\/a>\r\n        <button class=\"nav-panel-close\" id=\"ierareNavPanelClose\" type=\"button\" aria-label=\"Close menu\">\r\n          <svg viewBox=\"0 0 24 24\"><path d=\"M6 6l12 12M18 6L6 18\"\/><\/svg>\r\n        <\/button>\r\n      <\/div>\r\n      <div class=\"nav-panel-list\">\r\n        <a class=\"panel-link\" href=\"https:\/\/redesign.ierare.com\/\">Home<\/a>\r\n\r\n        <div class=\"panel-item\" data-level=\"1\">\r\n          <div class=\"panel-row\">\r\n            <a class=\"panel-link\" href=\"https:\/\/redesign.ierare.com\/ierare-stores-marketplaces\/\">eCommerce<\/a>\r\n            <button class=\"panel-toggle\" type=\"button\" aria-label=\"Toggle eCommerce submenu\" aria-expanded=\"false\">\r\n              <svg class=\"icon-plus\" viewBox=\"0 0 24 24\"><path d=\"M12 5v14M5 12h14\"\/><\/svg>\r\n              <svg class=\"icon-close\" viewBox=\"0 0 24 24\"><path d=\"M6 6l12 12M18 6L6 18\"\/><\/svg>\r\n            <\/button>\r\n          <\/div>\r\n          <div class=\"panel-sub\"><div class=\"panel-sub-inner\">\r\n            <div class=\"panel-item\" data-level=\"2\">\r\n              <div class=\"panel-row\">\r\n                <a class=\"panel-link\" href=\"https:\/\/redesign.ierare.com\/ierare-amazon-marketplace\/\">Amazon Services<\/a>\r\n                <button class=\"panel-toggle\" type=\"button\" aria-label=\"Toggle Amazon Services submenu\" aria-expanded=\"false\">\r\n                  <svg class=\"icon-plus\" viewBox=\"0 0 24 24\"><path d=\"M12 5v14M5 12h14\"\/><\/svg>\r\n                  <svg class=\"icon-close\" viewBox=\"0 0 24 24\"><path d=\"M6 6l12 12M18 6L6 18\"\/><\/svg>\r\n                <\/button>\r\n              <\/div>\r\n              <div class=\"panel-sub\"><div class=\"panel-sub-inner\">\r\n                <a class=\"panel-link\" data-level=\"3\" href=\"https:\/\/redesign.ierare.com\/2-1-sub-service-amazon-account-management\/\">Amazon Account Management<\/a>\r\n                <a class=\"panel-link\" data-level=\"3\" href=\"https:\/\/redesign.ierare.com\/ierare-sponsored-ads-management\/\">Sponsored Ads Management<\/a>\r\n                <a class=\"panel-link\" data-level=\"3\" href=\"https:\/\/redesign.ierare.com\/ierare-product-listing-optimization\/\">Product listing Optimization<\/a>\r\n                <a class=\"panel-link\" data-level=\"3\" href=\"https:\/\/redesign.ierare.com\/ierare-improve-product-visibility\/\">Improve Product Visibility<\/a>\r\n                <a class=\"panel-link\" data-level=\"3\" href=\"https:\/\/redesign.ierare.com\/product-photography-image-editing\/\">Product Photography and Image Editing<\/a>\r\n              <\/div><\/div>\r\n            <\/div>\r\n            <a class=\"panel-link\" data-level=\"2\" href=\"https:\/\/redesign.ierare.com\/3-1-sub-service-shopify-stores\/\">Shopify Stores<\/a>\r\n            <a class=\"panel-link\" data-level=\"2\" href=\"https:\/\/redesign.ierare.com\/ierare-new-product-launch\/\">New Product Launch<\/a>\r\n            <a class=\"panel-link\" data-level=\"2\" href=\"https:\/\/redesign.ierare.com\/ierare-fba-reimbursements\/\">FBA Reimbursement Recovery<\/a>\r\n          <\/div><\/div>\r\n        <\/div>\r\n\r\n        <div class=\"panel-item\" data-level=\"1\">\r\n          <div class=\"panel-row\">\r\n            <a class=\"panel-link\" href=\"https:\/\/redesign.ierare.com\/ierare-digital-service\/\">Digital Marketing<\/a>\r\n            <button class=\"panel-toggle\" type=\"button\" aria-label=\"Toggle Digital Marketing submenu\" aria-expanded=\"false\">\r\n              <svg class=\"icon-plus\" viewBox=\"0 0 24 24\"><path d=\"M12 5v14M5 12h14\"\/><\/svg>\r\n              <svg class=\"icon-close\" viewBox=\"0 0 24 24\"><path d=\"M6 6l12 12M18 6L6 18\"\/><\/svg>\r\n            <\/button>\r\n          <\/div>\r\n          <div class=\"panel-sub\"><div class=\"panel-sub-inner\">\r\n            <a class=\"panel-link\" data-level=\"2\" href=\"https:\/\/redesign.ierare.com\/ierare-search-engine-optimization\/\">Search Engine Optimization<\/a>\r\n            <a class=\"panel-link\" data-level=\"2\" href=\"https:\/\/redesign.ierare.com\/ierare-ai-search-optimization\/\">AI Search Optimization Services<\/a>\r\n            <a class=\"panel-link\" data-level=\"2\" href=\"https:\/\/redesign.ierare.com\/ierare-ecommerce-seo-services\/\">Ecommerce SEO Services<\/a>\r\n            <a class=\"panel-link\" data-level=\"2\" href=\"https:\/\/redesign.ierare.com\/ierare-content-marketing\/\">Content Marketing<\/a>\r\n            <a class=\"panel-link\" data-level=\"2\" href=\"https:\/\/redesign.ierare.com\/ierare-paid-search-management\/\">Paid Search Management<\/a>\r\n            <a class=\"panel-link\" data-level=\"2\" href=\"https:\/\/redesign.ierare.com\/ierare-social-media-advertising\/\">Social Media Advertising<\/a>\r\n            <a class=\"panel-link\" data-level=\"2\" href=\"https:\/\/redesign.ierare.com\/ierare-conversion-optimization\/\">Conversion Rate Optimization<\/a>\r\n          <\/div><\/div>\r\n        <\/div>\r\n\r\n        <a class=\"panel-link\" href=\"https:\/\/redesign.ierare.com\/ierare-white-label-services\/\">White Label<\/a>\r\n\r\n        <div class=\"panel-item\" data-level=\"1\">\r\n          <div class=\"panel-row\">\r\n            <a class=\"panel-link\" href=\"https:\/\/redesign.ierare.com\/ierare-resources\/\">Resources<\/a>\r\n            <button class=\"panel-toggle\" type=\"button\" aria-label=\"Toggle Resources submenu\" aria-expanded=\"false\">\r\n              <svg class=\"icon-plus\" viewBox=\"0 0 24 24\"><path d=\"M12 5v14M5 12h14\"\/><\/svg>\r\n              <svg class=\"icon-close\" viewBox=\"0 0 24 24\"><path d=\"M6 6l12 12M18 6L6 18\"\/><\/svg>\r\n            <\/button>\r\n          <\/div>\r\n          <div class=\"panel-sub\"><div class=\"panel-sub-inner\">\r\n            <a class=\"panel-link\" data-level=\"2\" href=\"https:\/\/redesign.ierare.com\/blog\/\">Blogs<\/a>\r\n            <a class=\"panel-link\" data-level=\"2\" href=\"https:\/\/portfolio.ierare.com\/\">Portfolio<\/a>\r\n            <a class=\"panel-link\" data-level=\"2\" href=\"https:\/\/redesign.ierare.com\/case-studies-new\/\">Case Study<\/a>\r\n          <\/div><\/div>\r\n        <\/div>\r\n\r\n        <div class=\"panel-item\" data-level=\"1\">\r\n          <div class=\"panel-row\">\r\n            <a class=\"panel-link\" href=\"https:\/\/redesign.ierare.com\/1-1-about-page\/\">About Us<\/a>\r\n            <button class=\"panel-toggle\" type=\"button\" aria-label=\"Toggle About Us submenu\" aria-expanded=\"false\">\r\n              <svg class=\"icon-plus\" viewBox=\"0 0 24 24\"><path d=\"M12 5v14M5 12h14\"\/><\/svg>\r\n              <svg class=\"icon-close\" viewBox=\"0 0 24 24\"><path d=\"M6 6l12 12M18 6L6 18\"\/><\/svg>\r\n            <\/button>\r\n          <\/div>\r\n          <div class=\"panel-sub\"><div class=\"panel-sub-inner\">\r\n            <a class=\"panel-link\" data-level=\"2\" href=\"https:\/\/redesign.ierare.com\/ierare-team-page\/\">Team Page<\/a>\r\n            <a class=\"panel-link\" data-level=\"2\" href=\"https:\/\/redesign.ierare.com\/ierare-team-trips\/\">Team Trips<\/a>\r\n          <\/div><\/div>\r\n        <\/div>\r\n      <\/div>\r\n      <a class=\"nav-panel-cta\" href=\"https:\/\/www.ierare.com\/contact-us\/\" target=\"_blank\" rel=\"noopener\">Schedule a Call<\/a>\r\n    <\/div>\r\n  <\/div>\r\n<\/header>\r\n<div class=\"ierare-hero\">\r\n  <h1 class=\"hero-title\">Portfolio<\/h1>\r\n  <div class=\"hero-eyebrow\">Design in Details<\/div>\r\n<\/div>\r\n<div class=\"filters\">\r\n  <div class=\"filters-inner\">\r\n    <div class=\"filter-row\" id=\"ierareWorkRow\"><\/div>\r\n  <\/div>\r\n<\/div>\r\n<div class=\"layout\">\r\n  <aside class=\"sidebar\">\r\n    <button class=\"filters-toggle\" id=\"ierareFiltersToggle\" type=\"button\" aria-expanded=\"false\" aria-controls=\"ierareChipFilterGroup\">\r\n      <svg viewBox=\"0 0 24 24\"><path d=\"M4 7h16M4 12h16M4 17h16\"\/><\/svg>\r\n      Filters\r\n    <\/button>\r\n    <div class=\"chip-filter-group\" id=\"ierareChipFilterGroup\">\r\n      <div class=\"chip-filter-wrap\">\r\n        <button class=\"dd-trigger\" id=\"ierareCatDDTrigger\" type=\"button\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n          <span class=\"dd-trigger-left\">\r\n            <span class=\"swatch\" id=\"ierareCatDDSwatch\"><\/span>\r\n            <span class=\"dd-trigger-label\" id=\"ierareCatDDLabel\">All Categories<\/span>\r\n          <\/span>\r\n          <svg class=\"dd-chevron\" viewBox=\"0 0 24 24\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\r\n        <\/button>\r\n        <div class=\"dd-panel\" id=\"ierareCatDDPanel\"><\/div>\r\n      <\/div>\r\n      <div class=\"chip-filter-wrap\">\r\n        <button class=\"dd-trigger\" id=\"ierareTypeDDTrigger\" type=\"button\" aria-haspopup=\"true\" aria-expanded=\"false\">\r\n          <span class=\"dd-trigger-left\">\r\n            <span class=\"dd-trigger-label\" id=\"ierareTypeDDLabel\">All Types<\/span>\r\n          <\/span>\r\n          <svg class=\"dd-chevron\" viewBox=\"0 0 24 24\"><path d=\"M6 9l6 6 6-6\"\/><\/svg>\r\n        <\/button>\r\n        <div class=\"dd-panel\" id=\"ierareTypeDDPanel\"><\/div>\r\n      <\/div>\r\n    <\/div>\r\n  <\/aside>\r\n  <main>\r\n    <div class=\"result-count\" id=\"ierareResultCount\"><\/div>\r\n    <div class=\"grid\" id=\"ierareGrid\"><\/div>\r\n    <div class=\"pagination\" id=\"ierarePagination\"><\/div>\r\n  <\/main>\r\n<\/div>\r\n<footer class=\"ierare-footer\" aria-label=\"Site footer\">\r\n  <div class=\"ft-card\">\r\n    <div class=\"ft-topbar\">\r\n      <a class=\"ft-mail\" href=\"mailto:info@ierare.com\">\r\n        <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M21 3 3 10.5l7 2.5 2.5 7L21 3z\"\/><path d=\"M10 13l4.5-4.5\"\/><\/svg>\r\n        info@ierare.com\r\n      <\/a>\r\n      <div class=\"ft-social\">\r\n        <a href=\"https:\/\/www.facebook.com\/profile.php?id=61574178265522#\" aria-label=\"Instagram\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/redesign.ierare.com\/wp-content\/uploads\/2025\/09\/social-2.png\" alt=\"\" width=\"52\" height=\"52\" loading=\"lazy\"><\/a>\r\n\t\t      <a href=\"https:\/\/www.instagram.com\/i.e.rare\/\" aria-label=\"X\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/redesign.ierare.com\/wp-content\/uploads\/2025\/09\/social-1.png\" alt=\"\" width=\"52\" height=\"52\" loading=\"lazy\"><\/a>\r\n      <a href=\"https:\/\/www.upwork.com\/agencies\/1422993631028305920\/\r\n\" aria-label=\"LinkedIn\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/redesign.ierare.com\/wp-content\/uploads\/2025\/09\/social-4.png\" alt=\"\" width=\"52\" height=\"52\" loading=\"lazy\"><\/a>\r\n \r\n        <a href=\"https:\/\/www.linkedin.com\/company\/ierare-pvt-ltd\/\" aria-label=\"Dribbble\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/redesign.ierare.com\/wp-content\/uploads\/2025\/09\/social-3.png\" alt=\"\" width=\"52\" height=\"52\" loading=\"lazy\"><\/a>\r\n           <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"ft-cta\">\r\n      <h2 class=\"ft-headline\"><span class=\"ft-gold\">Thinking<\/span> of<br>something big?<\/h2>\r\n      <a class=\"ft-talk\" href=\"https:\/\/www.ierare.com\/contact-us\/\">Let's talk!<\/a>\r\n    <\/div>\r\n\r\n    <div class=\"ft-info\">\r\n      <div class=\"ft-col ft-col--news\">\r\n        <h3 class=\"ft-label ft-label--dark\">Our Newsletter<\/h3>\r\n                  <form class=\"ft-news\" id=\"ierareNewsForm\" novalidate>\r\n            <label class=\"ft-sr\" for=\"ierareNewsEmail\">Your email address<\/label>\r\n            <input type=\"email\" id=\"ierareNewsEmail\" name=\"email\" placeholder=\"Your email address\" autocomplete=\"email\" required>\r\n            <button type=\"submit\" aria-label=\"Subscribe\">\r\n              <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M5 12h14M13 6l6 6-6 6\"\/><\/svg>\r\n            <\/button>\r\n          <\/form>\r\n              <\/div>\r\n      <div class=\"ft-col\">\r\n        <h3 class=\"ft-label\">Call us<\/h3>\r\n        <a class=\"ft-value\" href=\"tel:+19178297534\">+1 917 829 7534<\/a>\r\n        <a class=\"ft-value\" href=\"tel:+918980801618\">+91 89808 01618<\/a>\r\n      <\/div>\r\n      <div class=\"ft-col\">\r\n        <h3 class=\"ft-label\">Drop us a line<\/h3>\r\n        <a class=\"ft-value\" href=\"mailto:info@ierare.com\">info@ierare.com<\/a>\r\n      <\/div>\r\n      <div class=\"ft-badges\">\r\n        <img decoding=\"async\" src=\"https:\/\/redesign.ierare.com\/wp-content\/uploads\/2025\/09\/image-880.jpeg\" alt=\"Amazon Ads verified partner\" loading=\"lazy\">\r\n        <img decoding=\"async\" src=\"https:\/\/redesign.ierare.com\/wp-content\/uploads\/2025\/09\/image-879.jpeg\" alt=\"Amazon Selling Partner 360\" loading=\"lazy\">\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"ft-bottom\">\r\n      <p class=\"ft-copy\">&copy; 2026 I.E.RARE, All rights reserved.<\/p>\r\n      <a class=\"ft-top\" href=\"#\" id=\"ierareFooterTop\">Back to top\r\n        <svg viewBox=\"0 0 24 24\" aria-hidden=\"true\"><path d=\"M12 19V5M6 11l6-6 6 6\"\/><\/svg>\r\n      <\/a>\r\n    <\/div>\r\n  <\/div>\r\n<\/footer>\r\n<div class=\"overlay\" id=\"ierareOverlay\" aria-hidden=\"true\">\r\n  <div class=\"overlay-bar\">\r\n    <button class=\"back-btn\" id=\"ierareCloseBtn\">&larr; Back to portfolio<\/button>\r\n  <\/div>\r\n  <div id=\"ierareOverlayContent\"><\/div>\r\n<\/div>\r\n<div class=\"ierare-lightbox\" id=\"ierareLightbox\" aria-hidden=\"true\">\r\n  <button class=\"lightbox-close\" id=\"ierareLightboxClose\" type=\"button\" aria-label=\"Close\">&times;<\/button>\r\n  <div class=\"lightbox-stage\">\r\n    <img decoding=\"async\" id=\"ierareLightboxImg\" src=\"\" alt=\"\">\r\n  <\/div>\r\n  <button class=\"lightbox-nav lightbox-next\" id=\"ierareLightboxNext\" type=\"button\" aria-label=\"Next image\">&rarr;<\/button>\r\n  <div class=\"lightbox-thumbs\" id=\"ierareLightboxThumbs\"><\/div>\r\n  <div class=\"lightbox-caption\" id=\"ierareLightboxCaption\"><\/div>\r\n<\/div>\r\n<button class=\"ierare-back-to-top\" id=\"ierareBackToTop\" type=\"button\" aria-label=\"Back to top\">\r\n  <svg viewBox=\"0 0 24 24\"><path d=\"M12 19V5M5 12l7-7 7 7\"\/><\/svg>\r\n<\/button>\r\n<\/div>\r\n\r\n<script id=\"ierare-js-payload\" type=\"text\/plain\">KGZ1bmN0aW9uKCl7DQoNCiAgY29uc3QgUFJPSkVDVFMgPSBbeyJpZCI6MzQ3LCJwcm9kdWN0IjoiUEIyIFx1MDAyNiM4MjExOyBDb29raWUgTWl4IiwiYXNpbiI6IkIwQzlLTlRSMTUiLCJjYXRlZ29yeSI6IkZvb2QiLCJjYXRlZ29yeV9zaG9ydCI6IkZvb2QiLCJ3b3JrX3R5cGVzIjpbIkltYWdlcnkiXSwidHlwZSI6IkphclwvVHViIiwidXNlY2FzZSI6IkJha2luZyBtaXhlcyIsImJyYW5kIjoiUEIyIEZvb2RzIiwid2Vic2l0ZV9saW5rIjoiaHR0cHM6XC9cL3BiMi5jb21cLyIsInByb2R1Y3RfbGluayI6Imh0dHBzOlwvXC93d3cuYW1hem9uLmNvbVwvc3RvcmVzXC9QQjJcL3BhZ2VcLzlCQzFBN0I2LUZBRjItNEIzNy05REM1LTMzMzYwNzEyQzc1Nj9scF9hc2luPUIwQkNLTVo1N0wiLCJzdG9yZWZyb250X2xpbmsiOiJodHRwczpcL1wvd3d3LmFtYXpvbi5jb21cL3N0b3Jlc1wvUEIyXC9wYWdlXC85QkMxQTdCNi1GQUYyLTRCMzctOURDNS0zMzM2MDcxMkM3NTY\/bHBfYXNpbj1CMEJDS01aNTdMIiwidGh1bWIiOiJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA4XC9HYWxsZXJ5LUltYWdlLTEtMi53ZWJwIiwic2VjdGlvbnMiOlt7ImxhYmVsIjoiR2FsbGVyeSBJbWFnZXMiLCJpbWFnZXMiOlsiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wOFwvR2FsbGVyeS1JbWFnZS0xLTIud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDhcL0dhbGxlcnktSW1hZ2UtMi53ZWJwIl0sInN1Ymdyb3VwcyI6W119XSwic3RyYXRlZ3kiOltdLCJkYXRlIjoiQXVnIDEyLCAyMDI2IiwiZGF0ZV9zb3J0IjoxNzg2NTIwMjg0LCJ2aWV3cyI6NTZ9LHsiaWQiOjMyMSwicHJvZHVjdCI6IkppbmdsZSBWaWRlbyBHYW1lIFN3ZWF0ZXIiLCJhc2luIjoiIiwiY2F0ZWdvcnkiOiJGYXNoaW9uIiwiY2F0ZWdvcnlfc2hvcnQiOiJGYXNoaW9uIiwid29ya190eXBlcyI6WyJJbWFnZXJ5Il0sInR5cGUiOiJBcHBhcmVsIiwidXNlY2FzZSI6IkFjY2Vzc29yaWVzIiwiYnJhbmQiOiJMb29rIEh1bWFuIiwid2Vic2l0ZV9saW5rIjoiaHR0cHM6XC9cL3d3dy5sb29raHVtYW4uY29tXC9hcnRpc3RcL2xvb2todW1hbiIsInByb2R1Y3RfbGluayI6IiIsInN0b3JlZnJvbnRfbGluayI6IiIsInRodW1iIjoiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wOFwvQjBGSDc4WURRWS5NQUlOLWNvcHkud2VicCIsInNlY3Rpb25zIjpbeyJsYWJlbCI6IkdhbGxlcnkgSW1hZ2VzIiwiaW1hZ2VzIjpbImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDhcL0IwRkg3OFlEUVkuTUFJTi1jb3B5LndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA4XC9CMEZINzhZRFFZLlBUMDEtY29weS53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wOFwvQjBGSDc4WURRWS5QVDAyLWNvcHkud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDhcL0IwRkg3OFlEUVkuUFQwMy1jb3B5LndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA4XC9CMEZINzhZRFFZLlBUMDQtY29weS53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wOFwvQjBGSDc4WURRWS5QVDA1LWNvcHkud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDhcL0IwRkg3OFlEUVkuUFQwNi1jb3B5LndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA4XC9CMEZINzhZRFFZLlBUMDctY29weS53ZWJwIl0sInN1Ymdyb3VwcyI6W119XSwic3RyYXRlZ3kiOltdLCJkYXRlIjoiQXVnIDMsIDIwMjYiLCJkYXRlX3NvcnQiOjE3ODU3MzkzMjgsInZpZXdzIjo3Mn0seyJpZCI6MzE0LCJwcm9kdWN0IjoiNiBQQ3MgUmF0dGxlIFNldCIsImFzaW4iOiJCMEM2RjlMNzNZIiwiY2F0ZWdvcnkiOiJUb3lzIiwiY2F0ZWdvcnlfc2hvcnQiOiJUb3lzIiwid29ya190eXBlcyI6WyJJbWFnZXJ5Il0sInR5cGUiOiJFZHVjYXRpb25hbCBraXRzIiwidXNlY2FzZSI6IlRveXMiLCJicmFuZCI6Iklubm92aXRveSIsIndlYnNpdGVfbGluayI6Imh0dHBzOlwvXC9pbm5vdml0b3kuY29tXC8iLCJwcm9kdWN0X2xpbmsiOiJodHRwczpcL1wvd3d3LmFtYXpvbi5pblwvZHBcL0IwQzZGOUw3M1kiLCJzdG9yZWZyb250X2xpbmsiOiJodHRwczpcL1wvd3d3LmFtYXpvbi5pblwvc3RvcmVzXC9JTk5PVklUT1lcL3BhZ2VcLzI5RDE4RUMwLTM4NDQtNEFDRi1CMjQzLUY3RDY4RUUzOUYxRiIsInRodW1iIjoiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wOFwvR2FsbGVyeS1JbWFnZS0xLTEud2VicCIsInNlY3Rpb25zIjpbeyJsYWJlbCI6IkdhbGxlcnkgSW1hZ2VzIiwiaW1hZ2VzIjpbImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDhcL0dhbGxlcnktSW1hZ2UtMS0xLndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA4XC9HYWxsZXJ5LUltYWdlLTItY29weS1zY2FsZWQud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDhcL0dhbGxlcnktSW1hZ2UtMy1jb3B5LXNjYWxlZC53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wOFwvR2FsbGVyeS1JbWFnZS00LWNvcHktc2NhbGVkLndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA4XC9HYWxsZXJ5LUltYWdlLTUtY29weS1zY2FsZWQud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDhcL0dhbGxlcnktSW1hZ2UtNi1jb3B5LXNjYWxlZC53ZWJwIl0sInN1Ymdyb3VwcyI6W119XSwic3RyYXRlZ3kiOltdLCJkYXRlIjoiQXVnIDMsIDIwMjYiLCJkYXRlX3NvcnQiOjE3ODU3MzkwMTUsInZpZXdzIjoxMn0seyJpZCI6Mjk0LCJwcm9kdWN0IjoiQ3VubmluZyBGb3ggUHV6emxlIiwiYXNpbiI6IkIwQjZDUlgzNEYiLCJjYXRlZ29yeSI6IlRveXMiLCJjYXRlZ29yeV9zaG9ydCI6IlRveXMiLCJ3b3JrX3R5cGVzIjpbIkltYWdlcnkiXSwidHlwZSI6IkdhbWVzIiwidXNlY2FzZSI6IlB1enpsZXMiLCJicmFuZCI6Imx1Yml3b29kIiwid2Vic2l0ZV9saW5rIjoiaHR0cHM6XC9cL2x1Yml3b29kLmNvbVwvIiwicHJvZHVjdF9saW5rIjoiaHR0cHM6XC9cL3d3dy5hbWF6b24uc2dcL0x1Yml3b29kLUN1bm5pbmctV29vZGVuLUppZ3Nhdy1QdXp6bGVcL2RwXC9CMEI2Q1JYMzRGIiwic3RvcmVmcm9udF9saW5rIjoiIiwidGh1bWIiOiJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA4XC9CMEI2Q1JYMzRGLk1BSU4tY29weS53ZWJwIiwic2VjdGlvbnMiOlt7ImxhYmVsIjoiR2FsbGVyeSBJbWFnZXMiLCJpbWFnZXMiOlsiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wOFwvQjBCNkNSWDM0Ri5NQUlOLWNvcHkud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDhcL0IwQjZDUlgzNEYuTUFJTl8xLWNvcHkud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDhcL0IwQjZDUlgzNEYuUFQwMS1jb3B5LndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA4XC9CMEI2Q1JYMzRGLlBUMDItY29weS53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wOFwvQjBCNkNSWDM0Ri5QVDAzLWNvcHkud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDhcL0IwQjZDUlgzNEYuUFQwNC1jb3B5LndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA4XC9CMEI2Q1JYMzRGLlBUMDUtY29weS53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wOFwvQjBCNkNSWDM0Ri5QVDA2LWNvcHkud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDhcL0IwQjZDUlgzNEYuUFQwNy1jb3B5LndlYnAiXSwic3ViZ3JvdXBzIjpbXX1dLCJzdHJhdGVneSI6W10sImRhdGUiOiJBdWcgMywgMjAyNiIsImRhdGVfc29ydCI6MTc4NTczODEwNywidmlld3MiOjE2fSx7ImlkIjoyNzksInByb2R1Y3QiOiJCYXRocm9iZSIsImFzaW4iOiJCMEZGWjhOM0JEIiwiY2F0ZWdvcnkiOiJGYXNoaW9uIiwiY2F0ZWdvcnlfc2hvcnQiOiJGYXNoaW9uIiwid29ya190eXBlcyI6WyJJbWFnZXJ5Il0sInR5cGUiOiJBcHBhcmVsIiwidXNlY2FzZSI6IkFjY2Vzc29yaWVzIiwiYnJhbmQiOiJmbHVmZiBjbyIsIndlYnNpdGVfbGluayI6Imh0dHBzOlwvXC9mbHVmZi5jbyIsInByb2R1Y3RfbGluayI6Imh0dHBzOlwvXC93d3cuYW1hem9uLmluXC8tXC9oaVwvRmx1ZmZDb1wvZHBcL0IwRkZaOE4zQkQiLCJzdG9yZWZyb250X2xpbmsiOiJodHRwczpcL1wvd3d3LmFtYXpvbi5jb21cL3N0b3Jlc1wvcGFnZVwvOUI1QTU5NUEtREZERi00MEFFLUJERkItQUM2RkYzRThFRkQ3IiwidGh1bWIiOiJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA4XC9HYWxsZXJ5LUltYWdlLTAwMS53ZWJwIiwic2VjdGlvbnMiOlt7ImxhYmVsIjoiR2FsbGVyeSBJbWFnZXMiLCJpbWFnZXMiOlsiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wOFwvR2FsbGVyeS1JbWFnZS0wMDEud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDhcL0dhbGxlcnktSW1hZ2UtMS53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wOFwvR2FsbGVyeS1JbWFnZS0yLS53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wOFwvR2FsbGVyeS1JbWFnZS0zLS53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wOFwvR2FsbGVyeS1JbWFnZS00LS53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wOFwvR2FsbGVyeS1JbWFnZS01LS53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wOFwvR2FsbGVyeS1JbWFnZS02LS53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wOFwvR2FsbGVyeS1JbWFnZS03LS53ZWJwIl0sInN1Ymdyb3VwcyI6W119XSwic3RyYXRlZ3kiOltdLCJkYXRlIjoiQXVnIDMsIDIwMjYiLCJkYXRlX3NvcnQiOjE3ODU3MzQ5NDEsInZpZXdzIjo5fSx7ImlkIjoyNjEsInByb2R1Y3QiOiJEaGFyaXNoYWggXHUwMDI2IzgyMTE7IFNoaWtha2FpIFNoYW1wb28iLCJhc2luIjoiQjA4TkZHVjY3UiIsImNhdGVnb3J5IjoiQmVhdXR5IiwiY2F0ZWdvcnlfc2hvcnQiOiJCZWF1dHkiLCJ3b3JrX3R5cGVzIjpbIkltYWdlcnkiXSwidHlwZSI6IkJvdHRsZSIsInVzZWNhc2UiOiJTaGFtcG9vcyIsImJyYW5kIjoiZGhhcmlzaGFoIGF5dXJ2ZWRhIiwid2Vic2l0ZV9saW5rIjoiaHR0cHM6XC9cL2RoYXJpc2hhaGF5dXJ2ZWRhLmNvbVwvIiwicHJvZHVjdF9saW5rIjoiaHR0cHM6XC9cL3d3dy5hbWF6b24uaW5cL0RoYXJpc2hhaC1OYXR1cmFscy1TaGlrYWthaS1BeXVydmVkaWMtSGFpcmZhbGxcL2RwXC9CMDhORkdWNjdSIiwic3RvcmVmcm9udF9saW5rIjoiaHR0cHM6XC9cL3d3dy5hbWF6b24uaW5cL3N0b3Jlc1wvRGhhcmlzaGFoQXl1cnZlZGFcL3BhZ2VcLzlDOEVENDE0LTJDNzgtNDk5NC1COERFLUI1QTFGRjhCQTdDNyIsInRodW1iIjoiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS1pbWFnZS0xLTEtMS53ZWJwIiwic2VjdGlvbnMiOlt7ImxhYmVsIjoiR2FsbGVyeSBJbWFnZXMiLCJpbWFnZXMiOlsiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS1pbWFnZS0xLTEtMS53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS1pbWFnZS0yLTEtMS53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS1pbWFnZS0zLTYud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktaW1hZ2UtNC0xLTEud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktaW1hZ2UtNS0ud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktaW1hZ2UtNi0ud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktaW1hZ2UtNy0ud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktaW1hZ2UtNy0xLS53ZWJwIl0sInN1Ymdyb3VwcyI6W119XSwic3RyYXRlZ3kiOltdLCJkYXRlIjoiSnVsIDI5LCAyMDI2IiwiZGF0ZV9zb3J0IjoxNzg1MzA3MzExLCJ2aWV3cyI6MTB9LHsiaWQiOjI1NCwicHJvZHVjdCI6IlBlcHBlcm1pbnQgTWludCBUYWJsZXRzIiwiYXNpbiI6IkIwODk1N1dYNDgiLCJjYXRlZ29yeSI6IkZvb2QiLCJjYXRlZ29yeV9zaG9ydCI6IkZvb2QiLCJ3b3JrX3R5cGVzIjpbIkltYWdlcnkiXSwidHlwZSI6IlBpbGxzIFwvIENhcHN1bGVzIiwidXNlY2FzZSI6IkNvbnN1bWFibGVzIiwiYnJhbmQiOiJCaWcgU2t5Iiwid2Vic2l0ZV9saW5rIjoiaHR0cHM6XC9cL2JpZ3NreWJyYW5kcy5jb21cLyIsInByb2R1Y3RfbGluayI6Imh0dHBzOlwvXC93d3cuYW1hem9uLmNvbVwvQmlnLVNreS1TdWdhci1QZXBwZXJtaW50LUNhbmR5XC9kcFwvQjA4OTU3V1g0OD90aD0xIiwic3RvcmVmcm9udF9saW5rIjoiaHR0cHM6XC9cL3d3dy5hbWF6b24uY29tXC9zdG9yZXNcL0JJR1NLWVwvcGFnZVwvQ0RDODY2MjktRDdGQS00RDI4LThCOUMtRUY4Njc5QjdFRkFFIiwidGh1bWIiOiJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9HYWxsZXJ5LUltYWdlLTEtNC53ZWJwIiwic2VjdGlvbnMiOlt7ImxhYmVsIjoiR2FsbGVyeSBJbWFnZXMiLCJpbWFnZXMiOlsiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS1JbWFnZS0xLTQud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktSW1hZ2UtMi00LndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9HYWxsZXJ5LUltYWdlLTMtNS53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS1JbWFnZS00LS53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS1JbWFnZS01LTUud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktSW1hZ2UtNi01LndlYnAiXSwic3ViZ3JvdXBzIjpbXX1dLCJzdHJhdGVneSI6W10sImRhdGUiOiJKdWwgMjksIDIwMjYiLCJkYXRlX3NvcnQiOjE3ODUzMDYyMjMsInZpZXdzIjoxMn0seyJpZCI6MjQ0LCJwcm9kdWN0IjoiS2luZ3Nwb3J0IFRvaWxldCBTZWF0IiwiYXNpbiI6IkIwOFNNUENUUFciLCJjYXRlZ29yeSI6IkhvbWUiLCJjYXRlZ29yeV9zaG9ydCI6IkhvbWUiLCJ3b3JrX3R5cGVzIjpbIkltYWdlcnkiXSwidHlwZSI6IkFjY2Vzc29yaWVzIiwidXNlY2FzZSI6IkFjY2Vzc29yaWVzIiwiYnJhbmQiOiJCYXRoIFJveWFsIiwid2Vic2l0ZV9saW5rIjoiaHR0cHM6XC9cL2JhdGhyb3lhbGUuY29tXC8iLCJwcm9kdWN0X2xpbmsiOiJodHRwczpcL1wvd3d3LmFtYXpvbi5pblwvUk9ZQUxFLUJSNzIwLTAwLUtpbmdzcG9ydC1GYW1pbHktVG9pbGV0XC9kcFwvQjA4U01QQ1RQVyIsInN0b3JlZnJvbnRfbGluayI6IiIsInRodW1iIjoiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS1JbWFnZS0xLTMud2VicCIsInNlY3Rpb25zIjpbeyJsYWJlbCI6IkdhbGxlcnkgSW1hZ2VzIiwiaW1hZ2VzIjpbImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktSW1hZ2UtMS0zLndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9HYWxsZXJ5LUltYWdlLTItMy53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS1JbWFnZS0zLTQud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktSW1hZ2UtNC00LndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9HYWxsZXJ5LUltYWdlLTUtNC53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS1JbWFnZS02LTQud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktSW1hZ2UtNy00LndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9HYWxsZXJ5LUltYWdlLTgtMi53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS1JbWFnZS05LndlYnAiXSwic3ViZ3JvdXBzIjpbXX1dLCJzdHJhdGVneSI6W10sImRhdGUiOiJKdWwgMjksIDIwMjYiLCJkYXRlX3NvcnQiOjE3ODUzMDU0ODAsInZpZXdzIjo5fSx7ImlkIjoyMzYsInByb2R1Y3QiOiJTbWFydCBTZWN1cml0eSBBbGFybSIsImFzaW4iOiJCMEZDVDNZNkQ3IiwiY2F0ZWdvcnkiOiJBdXRvbW90aXZlIiwiY2F0ZWdvcnlfc2hvcnQiOiJBdXRvbW90aXZlIiwid29ya190eXBlcyI6WyJJbWFnZXJ5Il0sInR5cGUiOiJBY2Nlc3NvcmllcyIsInVzZWNhc2UiOiJHYWRnZXRzIiwiYnJhbmQiOiJTb25pcyIsIndlYnNpdGVfbGluayI6Imh0dHBzOlwvXC9ub2VudHJ5c3lzdGVtLmNvbVwvIiwicHJvZHVjdF9saW5rIjoiaHR0cHM6XC9cL3d3dy5hbWF6b24uY28udWtcL05vRW50cnktU29uaXMtV2lyZWxlc3MtQWxhcm0tU3lzdGVtXC9kcFwvQjBGQ1QzWTZENyIsInN0b3JlZnJvbnRfbGluayI6IiIsInRodW1iIjoiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS0xLXNjYWxlZC53ZWJwIiwic2VjdGlvbnMiOlt7ImxhYmVsIjoiR2FsbGVyeSBJbWFnZXMiLCJpbWFnZXMiOlsiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS0xLXNjYWxlZC53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS0yLXNjYWxlZC53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS0zLXNjYWxlZC53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS00LS1zY2FsZWQud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktNS1zY2FsZWQud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktNi0tc2NhbGVkLndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9HYWxsZXJ5LTctc2NhbGVkLndlYnAiXSwic3ViZ3JvdXBzIjpbXX1dLCJzdHJhdGVneSI6W10sImRhdGUiOiJKdWwgMjksIDIwMjYiLCJkYXRlX3NvcnQiOjE3ODUzMDQ3NDgsInZpZXdzIjoyfSx7ImlkIjoyMjcsInByb2R1Y3QiOiJUcmF2ZWwgSW5mbGF0YWJsZSBDdXNoaW9uIiwiYXNpbiI6IiIsImNhdGVnb3J5IjoiQ3JhZnRzIiwiY2F0ZWdvcnlfc2hvcnQiOiJDcmFmdHMiLCJ3b3JrX3R5cGVzIjpbIkltYWdlcnkiXSwidHlwZSI6IkFjY2Vzc29yaWVzIiwidXNlY2FzZSI6IkN1c2hpb25zIiwiYnJhbmQiOiJTZWF0IHRvIFNsZWVwIiwid2Vic2l0ZV9saW5rIjoiaHR0cHM6XC9cL3d3dy5zZWF0dG9zbGVlcC5jby51a1wvP3Nyc2x0aWQ9QWZtQk9vcnhkcmxHN2dUMDFTcUdzMXQzSEZ5TXJudXhPSVJVa0VkdHQ2ZkhpS0F3SUg2WnFjOHYiLCJwcm9kdWN0X2xpbmsiOiIiLCJzdG9yZWZyb250X2xpbmsiOiIiLCJ0aHVtYiI6Imh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktSW1hZ2VzLTEtLndlYnAiLCJzZWN0aW9ucyI6W3sibGFiZWwiOiJHYWxsZXJ5IEltYWdlcyIsImltYWdlcyI6WyJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9HYWxsZXJ5LUltYWdlcy0xLS53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS1JbWFnZXMtMXYyLndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9HYWxsZXJ5LUltYWdlcy0yLndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9HYWxsZXJ5LUltYWdlcy0zLndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9HYWxsZXJ5LUltYWdlcy00LndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9HYWxsZXJ5LUltYWdlcy01LS53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS1JbWFnZXMtNi53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS1JbWFnZXMtNy53ZWJwIl0sInN1Ymdyb3VwcyI6W119XSwic3RyYXRlZ3kiOltdLCJkYXRlIjoiSnVsIDI5LCAyMDI2IiwiZGF0ZV9zb3J0IjoxNzg1MzA0NDI1LCJ2aWV3cyI6Nn0seyJpZCI6MjE2LCJwcm9kdWN0IjoiV2lnZ2x5IFdpZ2dsZSBUb3kiLCJhc2luIjoiQjBINFZDWkZOWCIsImNhdGVnb3J5IjoiVG95cyIsImNhdGVnb3J5X3Nob3J0IjoiVG95cyIsIndvcmtfdHlwZXMiOlsiSW1hZ2VyeSIsIlByZW1pdW0gQSsiXSwidHlwZSI6IkZpZ3VyZXMiLCJ1c2VjYXNlIjoiVG95cyIsImJyYW5kIjoiSW5ub3ZpdG95Iiwid2Vic2l0ZV9saW5rIjoiaHR0cHM6XC9cL2lubm92aXRveS5jb21cLyIsInByb2R1Y3RfbGluayI6Imh0dHBzOlwvXC93d3cuYW1hem9uLmluXC9EYW5jaW5nLUNhdGVycGlsbGFyLVRvZGRsZXJzLUNyYXdsaW5nLURldmVsb3BtZW50XC9kcFwvQjBINFZDWkZOWCIsInN0b3JlZnJvbnRfbGluayI6Imh0dHBzOlwvXC93d3cuYW1hem9uLmluXC9zdG9yZXNcL0lOTk9WSVRPWVwvcGFnZVwvMjlEMThFQzAtMzg0NC00QUNGLUIyNDMtRjdENjhFRTM5RjFGIiwidGh1bWIiOiJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9HYWxsZXJ5LUltYWdlLTEtMi1zY2FsZWQud2VicCIsInNlY3Rpb25zIjpbeyJsYWJlbCI6IkdhbGxlcnkgSW1hZ2VzIiwiaW1hZ2VzIjpbImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktSW1hZ2UtMS0yLXNjYWxlZC53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS1JbWFnZS0yLTItc2NhbGVkLndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9HYWxsZXJ5LUltYWdlLTMtMy1zY2FsZWQud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktSW1hZ2UtNC0zLXNjYWxlZC53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS1JbWFnZS01LTMtc2NhbGVkLndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9HYWxsZXJ5LUltYWdlLTYtMy1zY2FsZWQud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktSW1hZ2UtNy0zLXNjYWxlZC53ZWJwIl0sInN1Ymdyb3VwcyI6W119LHsibGFiZWwiOiJQcmVtaXVtIEErIENvbnRlbnQiLCJpbWFnZXMiOltdLCJzdWJncm91cHMiOlt7ImxhYmVsIjoiRGVza3RvcCIsImltYWdlcyI6WyJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9XaWdnbGUtV2luZ3MtUHJlbWl1bS1BLUNvbnRlbnQtZGVza3RvcC1zY2FsZWQud2VicCJdfSx7ImxhYmVsIjoiTW9iaWxlIiwiaW1hZ2VzIjpbImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL1dpZ2dsZS1XaW5ncy1QcmVtaXVtLUEtQ29udGVudC1tb2JpbGUtc2NhbGVkLndlYnAiXX1dfV0sInN0cmF0ZWd5IjpbXSwiZGF0ZSI6Ikp1bCAyOSwgMjAyNiIsImRhdGVfc29ydCI6MTc4NTMwMzY3OSwidmlld3MiOjU4fSx7ImlkIjoxOTgsInByb2R1Y3QiOiJEdWFsIEZpbmlzaCBCcmFjZWxldCIsImFzaW4iOiJCMEcyVDNEM1g2IiwiY2F0ZWdvcnkiOiJGYXNoaW9uIiwiY2F0ZWdvcnlfc2hvcnQiOiJGYXNoaW9uIiwid29ya190eXBlcyI6WyJJbWFnZXJ5IiwiUHJlbWl1bSBBKyJdLCJ0eXBlIjoiQWNjZXNzb3JpZXMiLCJ1c2VjYXNlIjoiSmV3ZWxyeSIsImJyYW5kIjoiRm91bmRhdGlvbiBHaWZ0cyIsIndlYnNpdGVfbGluayI6Imh0dHBzOlwvXC9mb3VuZGF0aW9uZ2lmdC5jb21cLyIsInByb2R1Y3RfbGluayI6Imh0dHBzOlwvXC93d3cuYW1hem9uLmluXC9EdWFsLUZpbmlzaC1Hb2xkLUJyYWNlbGV0LU1hblwvZHBcL0IwRzJUM0QzWDYiLCJzdG9yZWZyb250X2xpbmsiOiJodHRwczpcL1wvd3d3LmFtYXpvbi5pblwvc3RvcmVzXC9GR0ZvdW5kYXRpb25HaWZ0XC9wYWdlXC82NUEzRDcwOC02NjM3LTQ1RDMtOEE3OC05MTM2NUY5NzBFMkYiLCJ0aHVtYiI6Imh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktSW1hZ2UtMS0ud2VicCIsInNlY3Rpb25zIjpbeyJsYWJlbCI6IkdhbGxlcnkgSW1hZ2VzIiwiaW1hZ2VzIjpbImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktSW1hZ2UtMS0ud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktSW1hZ2UtMVYyLndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9HYWxsZXJ5LUltYWdlLTItLndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9HYWxsZXJ5LUltYWdlLTMtMi53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS1JbWFnZS00LTIud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktSW1hZ2UtNS0yLndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9HYWxsZXJ5LUltYWdlLTYtMi53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS1JbWFnZS03LTIud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktSW1hZ2UtOC0xLndlYnAiXSwic3ViZ3JvdXBzIjpbXX0seyJsYWJlbCI6IlByZW1pdW0gQSsgQ29udGVudCIsImltYWdlcyI6W10sInN1Ymdyb3VwcyI6W3sibGFiZWwiOiJEZXNrdG9wIiwiaW1hZ2VzIjpbImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL1ByZW1pdW0tQS1jb250ZW50LWRlc2t0b3Atc2NhbGVkLndlYnAiXX0seyJsYWJlbCI6Ik1vYmlsZSIsImltYWdlcyI6WyJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9QcmVtaXVtLUEtY29udGVudC1tb2JpbGUtc2NhbGVkLndlYnAiXX1dfV0sInN0cmF0ZWd5IjpbXSwiZGF0ZSI6Ikp1bCAyOSwgMjAyNiIsImRhdGVfc29ydCI6MTc4NTMwMjgyOCwidmlld3MiOjIzfSx7ImlkIjoxNjAsInByb2R1Y3QiOiJCYXJ0ZW5kaW5nIEtpdCIsImFzaW4iOiJCMDdWUzQ5UEY5IiwiY2F0ZWdvcnkiOiJIb21lIiwiY2F0ZWdvcnlfc2hvcnQiOiJIb21lIiwid29ya190eXBlcyI6WyJJbWFnZXJ5Il0sInR5cGUiOiJCYXJ0ZW5kaW5nIEtpdCIsInVzZWNhc2UiOiJCYXIgU2V0cyIsImJyYW5kIjoiQmFyc3Rhc2giLCJ3ZWJzaXRlX2xpbmsiOiJodHRwczpcL1wvYmFyc3Rhc2guY29tXC8iLCJwcm9kdWN0X2xpbmsiOiJodHRwczpcL1wvd3d3LmFtYXpvbi5jb21cL0JhclN0YXNoLVBpZWNlLUJhcnRlbmRlci1LaXQtU3RhbmRcL2RwXC9CMDdWUzQ5UEY5Iiwic3RvcmVmcm9udF9saW5rIjoiaHR0cHM6XC9cL3d3dy5hbWF6b24uY29tXC9zdG9yZXNcL0JhcnN0YXNoXC9wYWdlXC9DNUFFQTkwNC03MDVBLTQ3MjUtOTdDQS0yOEIwOURFM0U2MzMiLCJ0aHVtYiI6Imh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktSW1hZ2UtMS53ZWJwIiwic2VjdGlvbnMiOlt7ImxhYmVsIjoiR2FsbGVyeSBJbWFnZXMiLCJpbWFnZXMiOlsiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS1JbWFnZS0xLndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9HYWxsZXJ5LUltYWdlLTIud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktSW1hZ2UtMy53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS1JbWFnZS00LndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9HYWxsZXJ5LUltYWdlLTUud2VicCIsImh0dHBzOlwvXC9wb3J0Zm9saW8uaWVyYXJlLmNvbVwvd3AtY29udGVudFwvdXBsb2Fkc1wvMjAyNlwvMDdcL0dhbGxlcnktSW1hZ2UtNi53ZWJwIiwiaHR0cHM6XC9cL3BvcnRmb2xpby5pZXJhcmUuY29tXC93cC1jb250ZW50XC91cGxvYWRzXC8yMDI2XC8wN1wvR2FsbGVyeS1JbWFnZS03LndlYnAiLCJodHRwczpcL1wvcG9ydGZvbGlvLmllcmFyZS5jb21cL3dwLWNvbnRlbnRcL3VwbG9hZHNcLzIwMjZcLzA3XC9HYWxsZXJ5LUltYWdlLTgud2VicCJdLCJzdWJncm91cHMiOltdfV0sInN0cmF0ZWd5IjpbXSwiZGF0ZSI6Ikp1bCAyMiwgMjAyNiIsImRhdGVfc29ydCI6MTc4NDcxNjk3OSwidmlld3MiOjY3fV07DQogIGNvbnN0IElFUkFSRV9BSkFYX1VSTCA9ICJodHRwczovL3BvcnRmb2xpby5pZXJhcmUuY29tL3dwLWFkbWluL2FkbWluLWFqYXgucGhwIjsNCg0KICBjb25zdCBXT1JLX1RZUEVTID0gWyJJbWFnZXJ5IiwgIkJhc2ljIEVCQyIsICJQcmVtaXVtIEErIiwgIkJyYW5kIFN0b3J5IiwgIlN0b3JlZnJvbnQiXTsNCiAgY29uc3QgQ0FURUdPUklFUyA9IFsiQmVhdXR5IiwgIkhlYWx0aCIsICJIb21lIiwgIkZhc2hpb24iLCAiVG95cyIsICJQZXRzIiwgIkZvb2QiLCAiU3BvcnRzIiwgIkVsZWN0cm9uaWNzIiwgIkF1dG9tb3RpdmUiLCAiQ3JhZnRzIiwgIkdhcmRlbiJdOw0KICBjb25zdCBQUk9EVUNUX1RZUEVTID0gWyJCb3R0bGUiLCAiSmFyIiwgIkJhZyIsICJCb3giLCAiUGlsbHMiLCAiUG93ZGVyIiwgIlR1YmUiLCAiU3ByYXkiLCAiU2FjaGV0IiwgIkNvbXBhY3QiLCAiSGFuZFRvb2xzIiwgIlN0b3JhZ2UgQ29udGFpbmVycyIsICJEZWNvcnMiLCAiQXBwYXJlbCIsICJGb290d2VhciIsICJBY2Nlc3NvcmllcyIsICJFZHVjYXRpb25hbCBraXRzIiwgIkdhbWVzIiwgIkZpZ3VyZXMiLCAiR2VhciIsICJXZWFyYWJsZSBEZXZpY2VzIiwgIkVsZWN0cm9uaWMgRGV2aWNlcyIsICJTdXBwbGllcyJdOw0KDQogIGZ1bmN0aW9uIGNvbG9yRm9yQ2F0ZWdvcnkoY2F0KXsNCiAgICBsZXQgaGFzaCA9IDA7DQogICAgZm9yIChsZXQgaT0wO2k8Y2F0Lmxlbmd0aDtpKyspeyBoYXNoID0gY2F0LmNoYXJDb2RlQXQoaSkgKyAoKGhhc2g8PDUpLWhhc2gpOyB9DQogICAgY29uc3QgaHVlID0gTWF0aC5hYnMoaGFzaCkgJSAzNjA7DQogICAgcmV0dXJuIHsgYmc6YGhzbCgke2h1ZX0sIDU4JSwgNTYlKWAsIGRhcms6YGhzbCgke2h1ZX0sIDU1JSwgMzglKWAsIHRhZzpgaHNsKCR7aHVlfSwgNTUlLCA0MiUpYCB9Ow0KICB9DQoNCiAgZnVuY3Rpb24gbGlnaHRTd2F0Y2hGb3JDYXRlZ29yeShjYXQpew0KICAgIGxldCBoYXNoID0gMDsNCiAgICBmb3IgKGxldCBpPTA7aTxjYXQubGVuZ3RoO2krKyl7IGhhc2ggPSBjYXQuY2hhckNvZGVBdChpKSArICgoaGFzaDw8NSktaGFzaCk7IH0NCiAgICBjb25zdCBodWUgPSBNYXRoLmFicyhoYXNoKSAlIDM2MDsNCiAgICByZXR1cm4gYGhzbCgke2h1ZX0sIDcwJSwgNzIlKWA7DQogIH0NCg0KICBmdW5jdGlvbiBjYXJkVGludEZvckNhdGVnb3J5KGNhdCl7DQogICAgbGV0IGhhc2ggPSAwOw0KICAgIGZvciAobGV0IGk9MDtpPGNhdC5sZW5ndGg7aSsrKXsgaGFzaCA9IGNhdC5jaGFyQ29kZUF0KGkpICsgKChoYXNoPDw1KS1oYXNoKTsgfQ0KICAgIGNvbnN0IGh1ZSA9IE1hdGguYWJzKGhhc2gpICUgMzYwOw0KICAgIHJldHVybiBgaHNsKCR7aHVlfSwgNjUlLCA4MyUpYDsNCiAgfQ0KDQogIGxldCBhY3RpdmVUeXBlID0gIkFsbCI7DQogIGxldCBhY3RpdmVDYXQgPSAiQWxsIjsNCiAgbGV0IGFjdGl2ZVByb2R1Y3RUeXBlID0gIkFsbCI7DQogIGxldCBjdXJyZW50UGFnZSA9IDE7DQogIGNvbnN0IFBBR0VfU0laRSA9IDEyOw0KDQogIGNvbnN0IHdvcmtSb3cgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWVyYXJlV29ya1JvdycpOw0KICBjb25zdCBncmlkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2llcmFyZUdyaWQnKTsNCiAgY29uc3QgcmVzdWx0Q291bnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWVyYXJlUmVzdWx0Q291bnQnKTsNCiAgY29uc3QgcGFnaW5hdGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZXJhcmVQYWdpbmF0aW9uJyk7DQogIGNvbnN0IG92ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWVyYXJlT3ZlcmxheScpOw0KICBjb25zdCBvdmVybGF5Q29udGVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZXJhcmVPdmVybGF5Q29udGVudCcpOw0KICBjb25zdCBjbG9zZUJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZXJhcmVDbG9zZUJ0bicpOw0KICBjb25zdCBsaWdodGJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZXJhcmVMaWdodGJveCcpOw0KICBjb25zdCBsaWdodGJveEltZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZXJhcmVMaWdodGJveEltZycpOw0KICBjb25zdCBsaWdodGJveFRodW1icyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZXJhcmVMaWdodGJveFRodW1icycpOw0KICBjb25zdCBsaWdodGJveENhcHRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWVyYXJlTGlnaHRib3hDYXB0aW9uJyk7DQogIGNvbnN0IGxpZ2h0Ym94TmV4dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZXJhcmVMaWdodGJveE5leHQnKTsNCiAgY29uc3QgbGlnaHRib3hDbG9zZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZXJhcmVMaWdodGJveENsb3NlJyk7DQoNCiAgaWYgKG92ZXJsYXkgJiYgb3ZlcmxheS5wYXJlbnRFbGVtZW50ICE9PSBkb2N1bWVudC5ib2R5KSB7DQogICAgY29uc3Qgb3ZlcmxheUhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCiAgICBvdmVybGF5SG9zdC5jbGFzc05hbWUgPSAnaWVyYXJlLXBvcnRmb2xpby1yb290JzsNCiAgICBvdmVybGF5SG9zdC5zdHlsZS5kaXNwbGF5ID0gJ2NvbnRlbnRzJzsNCiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG92ZXJsYXlIb3N0KTsNCiAgICBvdmVybGF5SG9zdC5hcHBlbmRDaGlsZChvdmVybGF5KTsNCiAgICBpZiAobGlnaHRib3gpIG92ZXJsYXlIb3N0LmFwcGVuZENoaWxkKGxpZ2h0Ym94KTsNCiAgfQ0KDQogIGNvbnN0IGRyb3Bkb3ducyA9IFtdOw0KICBmdW5jdGlvbiBtYWtlRHJvcGRvd24odHJpZ2dlcklkLCBwYW5lbElkKXsNCiAgICBjb25zdCB0cmlnZ2VyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodHJpZ2dlcklkKTsNCiAgICBjb25zdCBwYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHBhbmVsSWQpOw0KICAgIGlmICghdHJpZ2dlciB8fCAhcGFuZWwpIHJldHVybiBudWxsOw0KICAgIGxldCBvcGVuID0gZmFsc2U7DQogICAgY29uc3QgYXBpID0gew0KICAgICAgdHJpZ2dlciwgcGFuZWwsDQogICAgICBnZXQgaXNPcGVuKCl7IHJldHVybiBvcGVuOyB9LA0KICAgICAgY2xvc2UoKXsNCiAgICAgICAgb3BlbiA9IGZhbHNlOw0KICAgICAgICB0cmlnZ2VyLmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTsNCiAgICAgICAgcGFuZWwuY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpOw0KICAgICAgICB0cmlnZ2VyLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsJ2ZhbHNlJyk7DQogICAgICB9LA0KICAgICAgdG9nZ2xlKCl7DQogICAgICAgIGRyb3Bkb3ducy5mb3JFYWNoKGQgPT4geyBpZiAoZCAhPT0gYXBpKSBkLmNsb3NlKCk7IH0pOw0KICAgICAgICBvcGVuID0gIW9wZW47DQogICAgICAgIHRyaWdnZXIuY2xhc3NMaXN0LnRvZ2dsZSgnb3BlbicsIG9wZW4pOw0KICAgICAgICBwYW5lbC5jbGFzc0xpc3QudG9nZ2xlKCdvcGVuJywgb3Blbik7DQogICAgICAgIHRyaWdnZXIuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgU3RyaW5nKG9wZW4pKTsNCiAgICAgIH0NCiAgICB9Ow0KICAgIHRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSk9PnsgZS5zdG9wUHJvcGFnYXRpb24oKTsgYXBpLnRvZ2dsZSgpOyB9KTsNCiAgICBkcm9wZG93bnMucHVzaChhcGkpOw0KICAgIHJldHVybiBhcGk7DQogIH0NCg0KICBjb25zdCBjYXRERCA9IG1ha2VEcm9wZG93bignaWVyYXJlQ2F0RERUcmlnZ2VyJywgJ2llcmFyZUNhdEREUGFuZWwnKTsNCiAgY29uc3QgdHlwZUREID0gbWFrZURyb3Bkb3duKCdpZXJhcmVUeXBlRERUcmlnZ2VyJywgJ2llcmFyZVR5cGVERFBhbmVsJyk7DQogIGNvbnN0IGNhdERETGFiZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWVyYXJlQ2F0RERMYWJlbCcpOw0KICBjb25zdCBjYXRERFN3YXRjaCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZXJhcmVDYXRERFN3YXRjaCcpOw0KICBjb25zdCB0eXBlRERMYWJlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZXJhcmVUeXBlRERMYWJlbCcpOw0KDQogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpPT57DQogICAgZHJvcGRvd25zLmZvckVhY2goZD0+ew0KICAgICAgaWYgKGQuaXNPcGVuICYmICFkLnBhbmVsLmNvbnRhaW5zKGUudGFyZ2V0KSAmJiAhZC50cmlnZ2VyLmNvbnRhaW5zKGUudGFyZ2V0KSkgZC5jbG9zZSgpOw0KICAgIH0pOw0KICB9KTsNCiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGU9PnsNCiAgICBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSBkcm9wZG93bnMuZm9yRWFjaChkPT5kLmNsb3NlKCkpOw0KICB9KTsNCg0KICBjb25zdCBmaWx0ZXJzVG9nZ2xlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2llcmFyZUZpbHRlcnNUb2dnbGUnKTsNCiAgY29uc3QgY2hpcEZpbHRlckdyb3VwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2llcmFyZUNoaXBGaWx0ZXJHcm91cCcpOw0KICBpZiAoZmlsdGVyc1RvZ2dsZSAmJiBjaGlwRmlsdGVyR3JvdXApIHsNCiAgICBmaWx0ZXJzVG9nZ2xlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCk9PnsNCiAgICAgIGNvbnN0IGlzT3BlbiA9IGNoaXBGaWx0ZXJHcm91cC5jbGFzc0xpc3QudG9nZ2xlKCdvcGVuJyk7DQogICAgICBmaWx0ZXJzVG9nZ2xlLmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScsIGlzT3Blbik7DQogICAgICBmaWx0ZXJzVG9nZ2xlLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIFN0cmluZyhpc09wZW4pKTsNCiAgICAgIGlmICghaXNPcGVuKSBkcm9wZG93bnMuZm9yRWFjaChkPT5kLmNsb3NlKCkpOw0KICAgIH0pOw0KICB9DQoNCiAgZnVuY3Rpb24gbWF0Y2hlc0ZpbHRlcnMocCwgb3ZlcnJpZGVzKXsNCiAgICBvdmVycmlkZXMgPSBvdmVycmlkZXMgfHwge307DQogICAgY29uc3QgdHlwZSA9ICd0eXBlJyBpbiBvdmVycmlkZXMgPyBvdmVycmlkZXMudHlwZSA6IGFjdGl2ZVR5cGU7DQogICAgY29uc3QgY2F0ID0gJ2NhdCcgaW4gb3ZlcnJpZGVzID8gb3ZlcnJpZGVzLmNhdCA6IGFjdGl2ZUNhdDsNCiAgICBjb25zdCBwdHlwZSA9ICdwdHlwZScgaW4gb3ZlcnJpZGVzID8gb3ZlcnJpZGVzLnB0eXBlIDogYWN0aXZlUHJvZHVjdFR5cGU7DQogICAgcmV0dXJuICh0eXBlPT09IkFsbCJ8fChwLndvcmtfdHlwZXN8fFtdKS5pbmNsdWRlcyh0eXBlKSkgJiYNCiAgICAgIChjYXQ9PT0iQWxsInx8Y2F0PT09Ik1vc3QgUmVjZW50Inx8cC5jYXRlZ29yeV9zaG9ydD09PWNhdCkgJiYNCiAgICAgIChwdHlwZT09PSJBbGwifHwocC50eXBlfHwnJykudHJpbSgpLnRvTG93ZXJDYXNlKCk9PT1wdHlwZS50b0xvd2VyQ2FzZSgpKTsNCiAgfQ0KDQogIGZ1bmN0aW9uIGNvdW50Rm9yKG92ZXJyaWRlcyl7DQogICAgcmV0dXJuIFBST0pFQ1RTLmZpbHRlcihwID0+IG1hdGNoZXNGaWx0ZXJzKHAsIG92ZXJyaWRlcykpLmxlbmd0aDsNCiAgfQ0KDQogIGZ1bmN0aW9uIGZpeFJvd0NlbnRlcmluZyhlbCl7DQogICAgaWYoIWVsKSByZXR1cm47DQogICAgZWwuY2xhc3NMaXN0LnRvZ2dsZSgnaXMtb3ZlcmZsb3dpbmcnLCBlbC5zY3JvbGxXaWR0aCA+IGVsLmNsaWVudFdpZHRoICsgMSk7DQogIH0NCg0KICBmdW5jdGlvbiByZW5kZXJXb3JrUGlsbHMoKXsNCiAgICBjb25zdCBhbGwgPSBbIkFsbCIsIC4uLldPUktfVFlQRVNdOw0KICAgIGNvbnN0IHdvcmtMYWJlbCA9IHcgPT4gdyA9PT0gIkFsbCIgPyAiQ29sbGVjdGlvbiIgOiB3Ow0KICAgIHdvcmtSb3cuaW5uZXJIVE1MID0gYWxsLm1hcCh3PT4NCiAgICAgIGA8YnV0dG9uIGNsYXNzPSJwaWxsICR7dz09PWFjdGl2ZVR5cGU\/J2FjdGl2ZSc6Jyd9IiBkYXRhLXc9IiR7d30iPiR7d29ya0xhYmVsKHcpfTwvYnV0dG9uPmANCiAgICApLmpvaW4oJycpOw0KICAgIHdvcmtSb3cucXVlcnlTZWxlY3RvckFsbCgnLnBpbGwnKS5mb3JFYWNoKGJ0bj0+ew0KICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCk9PnsgYWN0aXZlVHlwZSA9IGJ0bi5kYXRhc2V0Lnc7IGN1cnJlbnRQYWdlID0gMTsgcmVuZGVyQWxsKCk7IH0pOw0KICAgIH0pOw0KICAgIGZpeFJvd0NlbnRlcmluZyh3b3JrUm93KTsNCiAgfQ0KDQogIGZ1bmN0aW9uIHJlbmRlckNhdGVnb3J5RHJvcGRvd24oKXsNCiAgICBpZiAoIWNhdEREKSByZXR1cm47DQogICAgY29uc3QgYWxsID0gWyJNb3N0IFJlY2VudCIsICJBbGwiLCAuLi5DQVRFR09SSUVTXTsNCiAgICBjb25zdCBsYWJlbEZvciA9IGMgPT4gYyA9PT0gIkFsbCIgPyAiRXhwbG9yZSBBbGwiIDogYzsNCiAgICBjb25zdCBzd2F0Y2hGb3IgPSBjID0+IChjID09PSAiQWxsIiB8fCBjID09PSAiTW9zdCBSZWNlbnQiKSA\/ICJ2YXIoLS1nb2xkKSIgOiBsaWdodFN3YXRjaEZvckNhdGVnb3J5KGMpOw0KDQogICAgY2F0RERTd2F0Y2guc3R5bGUuYmFja2dyb3VuZCA9IHN3YXRjaEZvcihhY3RpdmVDYXQpOw0KICAgIGNhdERETGFiZWwudGV4dENvbnRlbnQgPSBsYWJlbEZvcihhY3RpdmVDYXQpOw0KDQogICAgY2F0REQucGFuZWwuaW5uZXJIVE1MID0gYWxsLm1hcChjPT57DQogICAgICBjb25zdCBuID0gY291bnRGb3Ioe2NhdDogY30pOw0KICAgICAgY29uc3QgaXNBY3RpdmUgPSBjPT09YWN0aXZlQ2F0Ow0KICAgICAgcmV0dXJuIGA8YnV0dG9uIGNsYXNzPSJjaGlwICR7aXNBY3RpdmU\/J2FjdGl2ZSc6Jyd9IiBkYXRhLWM9IiR7Y30iPg0KICAgICAgICA8c3BhbiBjbGFzcz0ic3dhdGNoIiBzdHlsZT0iYmFja2dyb3VuZDoke3N3YXRjaEZvcihjKX0iPjwvc3Bhbj4ke2xhYmVsRm9yKGMpfTxzcGFuIGNsYXNzPSJjb3VudCI+JHtufTwvc3Bhbj4NCiAgICAgIDwvYnV0dG9uPmA7DQogICAgfSkuam9pbignJyk7DQogICAgY2F0REQucGFuZWwucXVlcnlTZWxlY3RvckFsbCgnLmNoaXAnKS5mb3JFYWNoKGJ0bj0+ew0KICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCk9PnsgYWN0aXZlQ2F0ID0gYnRuLmRhdGFzZXQuYzsgY3VycmVudFBhZ2UgPSAxOyBjYXRERC5jbG9zZSgpOyByZW5kZXJBbGwoKTsgfSk7DQogICAgfSk7DQogIH0NCg0KICBmdW5jdGlvbiByZW5kZXJUeXBlRHJvcGRvd24oKXsNCiAgICBpZiAoIXR5cGVERCkgcmV0dXJuOw0KICAgIGNvbnN0IGFsbCA9IFsiQWxsIiwgLi4uUFJPRFVDVF9UWVBFU107DQogICAgY29uc3QgbGFiZWxGb3IgPSB0ID0+IHQgPT09ICJBbGwiID8gIkFsbCBUeXBlcyIgOiB0Ow0KDQogICAgdHlwZURETGFiZWwudGV4dENvbnRlbnQgPSBsYWJlbEZvcihhY3RpdmVQcm9kdWN0VHlwZSk7DQoNCiAgICB0eXBlREQucGFuZWwuaW5uZXJIVE1MID0gYWxsLm1hcCh0PT57DQogICAgICBjb25zdCBuID0gY291bnRGb3Ioe3B0eXBlOiB0fSk7DQogICAgICBjb25zdCBpc0FjdGl2ZSA9IHQ9PT1hY3RpdmVQcm9kdWN0VHlwZTsNCiAgICAgIHJldHVybiBgPGJ1dHRvbiBjbGFzcz0iY2hpcCAke2lzQWN0aXZlPydhY3RpdmUnOicnfSIgZGF0YS10PSIke3R9Ij4ke2xhYmVsRm9yKHQpfTxzcGFuIGNsYXNzPSJjb3VudCI+JHtufTwvc3Bhbj48L2J1dHRvbj5gOw0KICAgIH0pLmpvaW4oJycpOw0KICAgIHR5cGVERC5wYW5lbC5xdWVyeVNlbGVjdG9yQWxsKCcuY2hpcCcpLmZvckVhY2goYnRuPT57DQogICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKT0+eyBhY3RpdmVQcm9kdWN0VHlwZSA9IGJ0bi5kYXRhc2V0LnQ7IGN1cnJlbnRQYWdlID0gMTsgdHlwZURELmNsb3NlKCk7IHJlbmRlckFsbCgpOyB9KTsNCiAgICB9KTsNCiAgfQ0KDQogIGZ1bmN0aW9uIGZpbHRlcmVkKCl7DQogICAgbGV0IGxpc3QgPSBQUk9KRUNUUy5maWx0ZXIocCA9PiBtYXRjaGVzRmlsdGVycyhwKSk7DQogICAgaWYgKGFjdGl2ZUNhdCA9PT0gIk1vc3QgUmVjZW50Iikgew0KICAgICAgbGlzdCA9IGxpc3Quc2xpY2UoKS5zb3J0KChhLGIpID0+IChiLmRhdGVfc29ydHx8MCkgLSAoYS5kYXRlX3NvcnR8fDApKTsNCiAgICB9DQogICAgcmV0dXJuIGxpc3Q7DQogIH0NCg0KICBmdW5jdGlvbiBjYXJkSFRNTChwLCBpZHgpew0KICAgIGNvbnN0IGMgPSBjb2xvckZvckNhdGVnb3J5KHAuY2F0ZWdvcnlfc2hvcnQgfHwgJ0dlbmVyYWwnKTsNCiAgICBjb25zdCB0aW50ID0gY2FyZFRpbnRGb3JDYXRlZ29yeShwLmNhdGVnb3J5X3Nob3J0IHx8ICdHZW5lcmFsJyk7DQogICAgY29uc3QgYmdTdHlsZSA9IHAudGh1bWINCiAgICAgID8gYGJhY2tncm91bmQtaW1hZ2U6dXJsKCcke3AudGh1bWJ9JylgDQogICAgICA6IGBiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCgxNTBkZWcsICR7Yy5iZ30sICR7Yy5kYXJrfSlgOw0KICAgIGNvbnN0IHdvcmtQaWxsc0hUTUwgPSAocC53b3JrX3R5cGVzICYmIHAud29ya190eXBlcy5sZW5ndGgpDQogICAgICA\/IGA8ZGl2IGNsYXNzPSJ3b3JrLXBpbGxzIj4ke3Aud29ya190eXBlcy5zbGljZSgwLCAzKS5tYXAodyA9PiBgPHNwYW4gY2xhc3M9IndvcmstcGlsbCI+JHt3fTwvc3Bhbj5gKS5qb2luKCcnKX08L2Rpdj5gDQogICAgICA6ICcnOw0KICAgIHJldHVybiBgDQogICAgPGJ1dHRvbiBjbGFzcz0iY2FyZCIgZGF0YS1pZHg9IiR7aWR4fSI+DQogICAgICA8ZGl2IGNsYXNzPSJhcnQiIHN0eWxlPSIke2JnU3R5bGV9Ij4NCiAgICAgICAgPHNwYW4gY2xhc3M9InRhYiIgc3R5bGU9ImJhY2tncm91bmQ6JHt0aW50fSI+JHtwLmNhdGVnb3J5X3Nob3J0fTwvc3Bhbj4NCiAgICAgICAgJHt3b3JrUGlsbHNIVE1MfQ0KICAgICAgPC9kaXY+DQogICAgICA8ZGl2IGNsYXNzPSJjYXJkLWJvZHkiPg0KICAgICAgICA8ZGl2IGNsYXNzPSJicmFuZCI+JHtwLmJyYW5kfTwvZGl2Pg0KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0Ij4ke3AucHJvZHVjdH08L2Rpdj4NCiAgICAgICAgPGRpdiBjbGFzcz0idmlldy1yb3ciPg0KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ2aWV3LWxpbmsiPlZpZXcgY2FzZSBzdHVkeSA8c3BhbiBjbGFzcz0iYXJyb3ciPiZyYXJyOzwvc3Bhbj48L3NwYW4+DQogICAgICAgICAgJHtwLmRhdGUgPyBgPHNwYW4gY2xhc3M9ImNhcmQtZGF0ZSI+JHtwLmRhdGV9PC9zcGFuPmAgOiAnJ30NCiAgICAgICAgPC9kaXY+DQogICAgICA8L2Rpdj4NCiAgICA8L2J1dHRvbj5gOw0KICB9DQoNCiAgLy8gQmVsb3cgdGhpcyB3aWR0aCwgdXNlIGluZmluaXRlIHNjcm9sbCBpbnN0ZWFkIG9mIG51bWJlcmVkIHBhZ2luYXRpb24g4oCUDQogIC8vIHNpZGVzdGVwcyBhbnkgZW52aXJvbm1lbnQgd2hlcmUgdGhlIG51bWJlcmVkIHBhZ2luYXRpb24gVUkgaXNuJ3QNCiAgLy8gcmVuZGVyaW5nIGNvcnJlY3RseSwgYW5kIGlzIGEgc21vb3RoZXIgcGF0dGVybiBvbiB0b3VjaCBkZXZpY2VzIGFueXdheS4NCiAgY29uc3QgSU5GSU5JVEVfU0NST0xMX0JSRUFLUE9JTlQgPSAxMTAwOw0KICBmdW5jdGlvbiBpc0luZmluaXRlU2Nyb2xsTW9kZSgpew0KICAgIHJldHVybiB3aW5kb3cuaW5uZXJXaWR0aCA8PSBJTkZJTklURV9TQ1JPTExfQlJFQUtQT0lOVDsNCiAgfQ0KDQogIGxldCBpbmZpbml0ZVNjcm9sbExpc3QgPSBbXTsNCiAgbGV0IGluZmluaXRlU2Nyb2xsU2hvd24gPSAwOw0KICBsZXQgaW5maW5pdGVTY3JvbGxBY3RpdmUgPSBmYWxzZTsNCiAgbGV0IGluZmluaXRlU2Nyb2xsTG9hZGluZyA9IGZhbHNlOw0KDQogIGZ1bmN0aW9uIHJlbmRlckdyaWQoKXsNCiAgICBjb25zdCBsaXN0ID0gZmlsdGVyZWQoKTsNCiAgICByZXN1bHRDb3VudC50ZXh0Q29udGVudCA9IGAke2xpc3QubGVuZ3RofSBwcm9qZWN0JHtsaXN0Lmxlbmd0aCE9PTE\/J3MnOicnfWA7DQogICAgY29uc3QgZXhpc3RpbmdFbXB0eSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZXJhcmVFbXB0eVN0YXRlJyk7DQogICAgaWYoZXhpc3RpbmdFbXB0eSkgZXhpc3RpbmdFbXB0eS5yZW1vdmUoKTsNCiAgICBpbmZpbml0ZVNjcm9sbEFjdGl2ZSA9IGZhbHNlOw0KICAgIGlmKGxpc3QubGVuZ3RoPT09MCl7DQogICAgICBncmlkLmlubmVySFRNTCA9ICcnOw0KICAgICAgcGFnaW5hdGlvbi5pbm5lckhUTUwgPSAnJzsNCiAgICAgIGdyaWQuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlcmVuZCcsIGA8ZGl2IGNsYXNzPSJlbXB0eSIgaWQ9ImllcmFyZUVtcHR5U3RhdGUiPjxzdHJvbmc+Tm8gcHJvamVjdHMgaGVyZSB5ZXQ8L3N0cm9uZz5UcnkgYSBkaWZmZXJlbnQgdHlwZSBvciBjYXRlZ29yeS48L2Rpdj5gKTsNCiAgICAgIHJldHVybjsNCiAgICB9DQoNCiAgICBpZiAoaXNJbmZpbml0ZVNjcm9sbE1vZGUoKSkgew0KICAgICAgcGFnaW5hdGlvbi5pbm5lckhUTUwgPSAnJzsNCiAgICAgIGluZmluaXRlU2Nyb2xsTGlzdCA9IGxpc3Q7DQogICAgICBpbmZpbml0ZVNjcm9sbFNob3duID0gTWF0aC5taW4oUEFHRV9TSVpFLCBsaXN0Lmxlbmd0aCk7DQogICAgICBpbmZpbml0ZVNjcm9sbEFjdGl2ZSA9IHRydWU7DQogICAgICByZW5kZXJJbmZpbml0ZVNjcm9sbEJhdGNoKCk7DQogICAgICByZXR1cm47DQogICAgfQ0KDQogICAgY29uc3QgdG90YWxQYWdlcyA9IE1hdGgubWF4KDEsIE1hdGguY2VpbChsaXN0Lmxlbmd0aCAvIFBBR0VfU0laRSkpOw0KICAgIGlmKGN1cnJlbnRQYWdlID4gdG90YWxQYWdlcykgY3VycmVudFBhZ2UgPSB0b3RhbFBhZ2VzOw0KICAgIGlmKGN1cnJlbnRQYWdlIDwgMSkgY3VycmVudFBhZ2UgPSAxOw0KDQogICAgY29uc3Qgc3RhcnQgPSAoY3VycmVudFBhZ2UgLSAxKSAqIFBBR0VfU0laRTsNCiAgICBjb25zdCBwYWdlTGlzdCA9IGxpc3Quc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgUEFHRV9TSVpFKTsNCg0KICAgIGdyaWQuaW5uZXJIVE1MID0gcGFnZUxpc3QubWFwKChwLGkpPT5jYXJkSFRNTChwLGkpKS5qb2luKCcnKTsNCiAgICBncmlkLnF1ZXJ5U2VsZWN0b3JBbGwoJy5jYXJkJykuZm9yRWFjaChjYXJkPT57DQogICAgICBjYXJkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCk9PiBvcGVuRGV0YWlsKHBhZ2VMaXN0W3BhcnNlSW50KGNhcmQuZGF0YXNldC5pZHgpXSwgdHJ1ZSkpOw0KICAgIH0pOw0KDQogICAgcmVuZGVyUGFnaW5hdGlvbih0b3RhbFBhZ2VzKTsNCiAgfQ0KDQogIGZ1bmN0aW9uIHJlbmRlckluZmluaXRlU2Nyb2xsQmF0Y2goKXsNCiAgICBjb25zdCBwYWdlTGlzdCA9IGluZmluaXRlU2Nyb2xsTGlzdC5zbGljZSgwLCBpbmZpbml0ZVNjcm9sbFNob3duKTsNCiAgICBncmlkLmlubmVySFRNTCA9IHBhZ2VMaXN0Lm1hcCgocCxpKT0+Y2FyZEhUTUwocCxpKSkuam9pbignJyk7DQogICAgZ3JpZC5xdWVyeVNlbGVjdG9yQWxsKCcuY2FyZCcpLmZvckVhY2goY2FyZD0+ew0KICAgICAgY2FyZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpPT4gb3BlbkRldGFpbChwYWdlTGlzdFtwYXJzZUludChjYXJkLmRhdGFzZXQuaWR4KV0sIHRydWUpKTsNCiAgICB9KTsNCiAgICAvLyAiTG9hZCBtb3JlIiBidXR0b246IGFsd2F5cyB3b3JrcywgZXZlbiBpZiBhdXRvLWxvYWRpbmcgb24gc2Nyb2xsDQogICAgLy8gZG9lc24ndCBmaXJlIGluIHRoaXMgdGhlbWUvcGFnZS1idWlsZGVyIGVudmlyb25tZW50Lg0KICAgIGNvbnN0IHJlbWFpbmluZyA9IGluZmluaXRlU2Nyb2xsTGlzdC5sZW5ndGggLSBpbmZpbml0ZVNjcm9sbFNob3duOw0KICAgIHBhZ2luYXRpb24uaW5uZXJIVE1MID0gcmVtYWluaW5nID4gMA0KICAgICAgPyBgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJsb2FkLW1vcmUtYnRuIiBpZD0iaWVyYXJlTG9hZE1vcmUiPkxvYWQgbW9yZSA8c3Bhbj4oJHtyZW1haW5pbmd9IG1vcmUpPC9zcGFuPjwvYnV0dG9uPmANCiAgICAgIDogJyc7DQogICAgY29uc3QgYnRuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2llcmFyZUxvYWRNb3JlJyk7DQogICAgaWYgKGJ0bikgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgbG9hZE5leHRCYXRjaCk7DQogICAgaW5maW5pdGVTY3JvbGxMb2FkaW5nID0gZmFsc2U7DQogIH0NCg0KICBmdW5jdGlvbiBsb2FkTmV4dEJhdGNoKCl7DQogICAgaWYgKCFpbmZpbml0ZVNjcm9sbEFjdGl2ZSB8fCBpbmZpbml0ZVNjcm9sbFNob3duID49IGluZmluaXRlU2Nyb2xsTGlzdC5sZW5ndGgpIHJldHVybjsNCiAgICBpbmZpbml0ZVNjcm9sbExvYWRpbmcgPSB0cnVlOw0KICAgIGluZmluaXRlU2Nyb2xsU2hvd24gPSBNYXRoLm1pbihpbmZpbml0ZVNjcm9sbFNob3duICsgUEFHRV9TSVpFLCBpbmZpbml0ZVNjcm9sbExpc3QubGVuZ3RoKTsNCiAgICByZW5kZXJJbmZpbml0ZVNjcm9sbEJhdGNoKCk7DQogIH0NCg0KICAvLyBBdXRvLWxvYWQ6IG1lYXN1cmUgd2hlcmUgdGhlIGJvdHRvbSBvZiB0aGUgZ3JpZCBzaXRzIHJlbGF0aXZlIHRvIHRoZQ0KICAvLyBzY3JlZW4gKGdldEJvdW5kaW5nQ2xpZW50UmVjdCksIGluc3RlYWQgb2YgcmVhZGluZyB3aW5kb3cuc2Nyb2xsWS4NCiAgLy8gVGhhdCB3b3JrcyB3aGljaGV2ZXIgZWxlbWVudCBhY3R1YWxseSBzY3JvbGxzIOKAlCB0aGUgd2luZG93LCA8Ym9keT4sDQogIC8vIG9yIGEgdGhlbWUvRWxlbWVudG9yIHdyYXBwZXIuIFRoZSBzY3JvbGwgbGlzdGVuZXIgaXMgYXR0YWNoZWQgdG8gdGhlDQogIC8vIGRvY3VtZW50IGluIGNhcHR1cmUgbW9kZSBzbyBpdCBhbHNvIGNhdGNoZXMgc2Nyb2xsaW5nIGluc2lkZSB0aG9zZQ0KICAvLyB3cmFwcGVycywgd2hvc2Ugc2Nyb2xsIGV2ZW50cyBuZXZlciByZWFjaCB3aW5kb3cuDQogIGZ1bmN0aW9uIGNoZWNrSW5maW5pdGVTY3JvbGwoKXsNCiAgICBpZiAoIWluZmluaXRlU2Nyb2xsQWN0aXZlIHx8IGluZmluaXRlU2Nyb2xsTG9hZGluZykgcmV0dXJuOw0KICAgIGlmIChpbmZpbml0ZVNjcm9sbFNob3duID49IGluZmluaXRlU2Nyb2xsTGlzdC5sZW5ndGgpIHJldHVybjsNCiAgICBjb25zdCBncmlkQm90dG9tID0gZ3JpZC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5ib3R0b207DQogICAgaWYgKGdyaWRCb3R0b20gLSB3aW5kb3cuaW5uZXJIZWlnaHQgPCA2MDApIGxvYWROZXh0QmF0Y2goKTsNCiAgfQ0KICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBjaGVja0luZmluaXRlU2Nyb2xsLCB7cGFzc2l2ZTp0cnVlLCBjYXB0dXJlOnRydWV9KTsNCiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGNoZWNrSW5maW5pdGVTY3JvbGwsIHtwYXNzaXZlOnRydWV9KTsNCiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgY2hlY2tJbmZpbml0ZVNjcm9sbCwge3Bhc3NpdmU6dHJ1ZX0pOw0KDQogIGZ1bmN0aW9uIGdvVG9QYWdlKG4pew0KICAgIGN1cnJlbnRQYWdlID0gbjsNCiAgICByZW5kZXJHcmlkKCk7DQogICAgZ3JpZC5zY3JvbGxJbnRvVmlldyh7YmVoYXZpb3I6J3Ntb290aCcsIGJsb2NrOidzdGFydCd9KTsNCiAgfQ0KDQogIGZ1bmN0aW9uIHJlbmRlclBhZ2luYXRpb24odG90YWxQYWdlcyl7DQogICAgaWYodG90YWxQYWdlcyA8PSAxKXsgcGFnaW5hdGlvbi5pbm5lckhUTUwgPSAnJzsgcmV0dXJuOyB9DQoNCiAgICBjb25zdCBwYWdlcyA9IFtdOw0KICAgIGZvcihsZXQgbj0xOyBuPD10b3RhbFBhZ2VzOyBuKyspew0KICAgICAgaWYobj09PTEgfHwgbj09PXRvdGFsUGFnZXMgfHwgTWF0aC5hYnMobi1jdXJyZW50UGFnZSk8PTEpew0KICAgICAgICBwYWdlcy5wdXNoKG4pOw0KICAgICAgfSBlbHNlIGlmKHBhZ2VzW3BhZ2VzLmxlbmd0aC0xXSAhPT0gJ+KApicpew0KICAgICAgICBwYWdlcy5wdXNoKCfigKYnKTsNCiAgICAgIH0NCiAgICB9DQoNCiAgICBjb25zdCBidG5zID0gcGFnZXMubWFwKG4gPT4NCiAgICAgIG4gPT09ICfigKYnDQogICAgICAgID8gYDxzcGFuIGNsYXNzPSJwYWdlLWVsbGlwc2lzIj4maGVsbGlwOzwvc3Bhbj5gDQogICAgICAgIDogYDxidXR0b24gY2xhc3M9InBhZ2UtYnRuICR7bj09PWN1cnJlbnRQYWdlPydhY3RpdmUnOicnfSIgZGF0YS1wYWdlPSIke259Ij4ke259PC9idXR0b24+YA0KICAgICkuam9pbignJyk7DQoNCiAgICBwYWdpbmF0aW9uLmlubmVySFRNTCA9IGANCiAgICAgIDxidXR0b24gY2xhc3M9InBhZ2UtYnRuIHBhZ2UtbmF2IiBkYXRhLXBhZ2U9IiR7Y3VycmVudFBhZ2UtMX0iICR7Y3VycmVudFBhZ2U9PT0xPydkaXNhYmxlZCc6Jyd9IGFyaWEtbGFiZWw9IlByZXZpb3VzIHBhZ2UiPiZsYXJyOzwvYnV0dG9uPg0KICAgICAgJHtidG5zfQ0KICAgICAgPGJ1dHRvbiBjbGFzcz0icGFnZS1idG4gcGFnZS1uYXYiIGRhdGEtcGFnZT0iJHtjdXJyZW50UGFnZSsxfSIgJHtjdXJyZW50UGFnZT09PXRvdGFsUGFnZXM\/J2Rpc2FibGVkJzonJ30gYXJpYS1sYWJlbD0iTmV4dCBwYWdlIj4mcmFycjs8L2J1dHRvbj4NCiAgICBgOw0KDQogICAgcGFnaW5hdGlvbi5xdWVyeVNlbGVjdG9yQWxsKCcucGFnZS1idG5bZGF0YS1wYWdlXTpub3QoOmRpc2FibGVkKScpLmZvckVhY2goYnRuPT57DQogICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKT0+IGdvVG9QYWdlKHBhcnNlSW50KGJ0bi5kYXRhc2V0LnBhZ2UpKSk7DQogICAgfSk7DQogIH0NCg0KICBmdW5jdGlvbiByZW5kZXJBbGwoKXsgcmVuZGVyV29ya1BpbGxzKCk7IHJlbmRlckNhdGVnb3J5RHJvcGRvd24oKTsgcmVuZGVyVHlwZURyb3Bkb3duKCk7IHJlbmRlckdyaWQoKTsgfQ0KDQogIGZ1bmN0aW9uIGlzU3RhY2tlZFNlY3Rpb24obGFiZWwpew0KICAgIHJldHVybiAvYmFzaWMgZWJjfHByZW1pdW0gYVwrL2kudGVzdChsYWJlbCB8fCAnJyk7DQogIH0NCg0KICBmdW5jdGlvbiBvcGVuRGV0YWlsKHAsIHB1c2hIaXN0b3J5KXsNCiAgICBpZiAocHVzaEhpc3RvcnkpIHsNCiAgICAgIGhpc3RvcnkucHVzaFN0YXRlKHsgaWVyYXJlT3ZlcmxheTogdHJ1ZSB9LCAnJywgbG9jYXRpb24uaHJlZik7DQogICAgfQ0KICAgIGNvbnN0IGZhY3RzID0gWw0KICAgICAgWydDYXRlZ29yeScsIHAuY2F0ZWdvcnlfc2hvcnRdLA0KICAgICAgWydUeXBlJywgcC50eXBlXSwNCiAgICAgIFsnVXNlY2FzZScsIHAudXNlY2FzZV0sDQogICAgXS5maWx0ZXIocyA9PiBzWzFdKTsNCg0KICAgIGNvbnN0IGdhbEdyaWQgPSAoaW1hZ2VzLCBzdGFja2VkKSA9PiBgPGRpdiBjbGFzcz0iZ2FsLWdyaWQgJHtzdGFja2VkID8gJ2dhbC1ncmlkLS1zdGFjaycgOiAnJ30iPiR7KGltYWdlc3x8W10pLm1hcCgodXJsLGkpID0+IGA8ZGl2IGNsYXNzPSJnYWwtdGlsZSIgZGF0YS1pZHg9IiR7aX0iPjxpbWcgc3JjPSIke3VybH0iIGFsdD0iIiBsb2FkaW5nPSJsYXp5Ij48L2Rpdj5gKS5qb2luKCcnKX08L2Rpdj5gOw0KDQogICAgbGV0IGdhbGxlcnlTZWN0aW9uID0gbnVsbDsNCiAgICBsZXQgcmVzdFNlY3Rpb25zID0gcC5zZWN0aW9ucyB8fCBbXTsNCiAgICBpZiAocC5zZWN0aW9ucyAmJiBwLnNlY3Rpb25zLmxlbmd0aCkgew0KICAgICAgZ2FsbGVyeVNlY3Rpb24gPSBwLnNlY3Rpb25zLmZpbmQoc2VjID0+IC9nYWxsZXJ5L2kudGVzdChzZWMubGFiZWwpKSB8fCBudWxsOw0KICAgICAgcmVzdFNlY3Rpb25zID0gcC5zZWN0aW9ucy5maWx0ZXIoc2VjID0+IHNlYyAhPT0gZ2FsbGVyeVNlY3Rpb24pOw0KICAgIH0NCiAgICBjb25zdCBpbWFnZXMgPSBnYWxsZXJ5U2VjdGlvbiA\/IChnYWxsZXJ5U2VjdGlvbi5pbWFnZXMgfHwgW10pIDogW107DQogICAgY29uc3QgaGFzU3RyYXRlZ3kgPSAhIShwLnN0cmF0ZWd5ICYmIHAuc3RyYXRlZ3kubGVuZ3RoKTsNCg0KICAgIC8vICJPbiB0aGlzIHBhZ2UiIGluZGV4IOKAlCBvbmUgZW50cnkgcGVyIHNlY3Rpb24gdGhhdCBhY3R1YWxseSBleGlzdHMuDQogICAgY29uc3QgbmF2SXRlbXMgPSBbXTsNCiAgICBpZiAoaW1hZ2VzLmxlbmd0aCkgbmF2SXRlbXMucHVzaCh7IGlkOiAnY3Mtc2VjLWdhbGxlcnknLCBsYWJlbDogJ0dhbGxlcnkgaW1hZ2VzJyB9KTsNCiAgICBpZiAoaGFzU3RyYXRlZ3kpIG5hdkl0ZW1zLnB1c2goeyBpZDogJ2NzLXNlYy1zdHJhdGVneScsIGxhYmVsOiAnRGVzaWduIHN0cmF0ZWd5JyB9KTsNCiAgICByZXN0U2VjdGlvbnMuZm9yRWFjaCgoc2VjLCBzaSkgPT4gbmF2SXRlbXMucHVzaCh7IGlkOiAnY3Mtc2VjLScgKyBzaSwgbGFiZWw6IHNlYy5sYWJlbCB9KSk7DQoNCiAgICBjb25zdCBuYXZIVE1MID0gbmF2SXRlbXMubGVuZ3RoID8gYA0KICAgICAgPG5hdiBjbGFzcz0iY3MtbmF2ICR7bmF2SXRlbXMubGVuZ3RoIDwgMiA\/ICdjcy1uYXYtLXNpbmdsZScgOiAnJ30iIGFyaWEtbGFiZWw9IlNlY3Rpb25zIj4NCiAgICAgICAgPGRpdiBjbGFzcz0iY3MtbmF2LWxhYmVsIj5PbiB0aGlzIHBhZ2U8L2Rpdj4NCiAgICAgICAgJHtuYXZJdGVtcy5tYXAoKG4sIGkpID0+IGA8YSBjbGFzcz0iY3MtbmF2LWxpbmsgJHtpPT09MD8nYWN0aXZlJzonJ30iIGhyZWY9IiMke24uaWR9IiBkYXRhLXRhcmdldD0iJHtuLmlkfSI+PHNwYW4gY2xhc3M9ImNzLW5hdi1kb3QiPjwvc3Bhbj4ke24ubGFiZWx9PC9hPmApLmpvaW4oJycpfQ0KICAgICAgPC9uYXY+YCA6ICcnOw0KDQogICAgY29uc3QgbGlua0J0biA9IChocmVmLCBpY29uLCBsYWJlbCwgcHJpbWFyeSkgPT4gaHJlZg0KICAgICAgPyBgPGEgY2xhc3M9ImNzLWxpbmsgJHtwcmltYXJ5ID8gJ2NzLWxpbmstLXByaW1hcnknIDogJyd9IiBocmVmPSIke2hyZWZ9IiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+JHtpY29ufTxzcGFuPiR7bGFiZWx9PC9zcGFuPjwvYT5gIDogJyc7DQogICAgY29uc3Qgc2Vjb25kYXJ5TGlua3MgPSBbDQogICAgICBsaW5rQnRuKHAud2Vic2l0ZV9saW5rLCBJQ09OUy5nbG9iZSwgJ1dlYnNpdGUnLCBmYWxzZSksDQogICAgICBsaW5rQnRuKHAuc3RvcmVmcm9udF9saW5rLCBJQ09OUy5zdG9yZSwgJ1N0b3JlZnJvbnQnLCBmYWxzZSksDQogICAgXS5qb2luKCcnKTsNCiAgICBjb25zdCBsaW5rc0hUTUwgPSAocC5wcm9kdWN0X2xpbmsgfHwgcC53ZWJzaXRlX2xpbmsgfHwgcC5zdG9yZWZyb250X2xpbmspID8gYA0KICAgICAgPGRpdiBjbGFzcz0iY3MtbGlua3MiPg0KICAgICAgICAke2xpbmtCdG4ocC5wcm9kdWN0X2xpbmssIElDT05TLmJhZywgJ1ZpZXcgcHJvZHVjdCcsIHRydWUpfQ0KICAgICAgICAke3NlY29uZGFyeUxpbmtzID8gYDxkaXYgY2xhc3M9ImNzLWxpbmstcm93Ij4ke3NlY29uZGFyeUxpbmtzfTwvZGl2PmAgOiAnJ30NCiAgICAgIDwvZGl2PmAgOiAnJzsNCg0KICAgIGNvbnN0IHRhZ3NIVE1MID0gKHAud29ya190eXBlcyAmJiBwLndvcmtfdHlwZXMubGVuZ3RoKQ0KICAgICAgPyBgPGRpdiBjbGFzcz0iY3Mtc2lkZS10YWdzIj4ke3Aud29ya190eXBlcy5tYXAodyA9PiBgPHNwYW4gY2xhc3M9ImNzLXNpZGUtdGFnIj4ke3d9PC9zcGFuPmApLmpvaW4oJycpfTwvZGl2PmAgOiAnJzsNCg0KICAgIGNvbnN0IHNpZGVIVE1MID0gYA0KICAgICAgPGFzaWRlIGNsYXNzPSJjcy1zaWRlIj4NCiAgICAgICAgPGRpdiBjbGFzcz0iY3Mtc2lkZS1oZWFkIj4NCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjcy1zaWRlLWJyYW5kIj4ke3AuYnJhbmR9PC9kaXY+DQogICAgICAgICAgPGgyIGNsYXNzPSJjcy1zaWRlLXRpdGxlIj4ke3AucHJvZHVjdH08L2gyPg0KICAgICAgICAgICR7dGFnc0hUTUx9DQogICAgICAgIDwvZGl2Pg0KICAgICAgICAke2ZhY3RzLmxlbmd0aCA\/IGA8ZGwgY2xhc3M9ImNzLWZhY3RzIj4ke2ZhY3RzLm1hcChmID0+IGA8ZGl2IGNsYXNzPSJjcy1mYWN0Ij48ZHQ+JHtmWzBdfTwvZHQ+PGRkPiR7ZlsxXX08L2RkPjwvZGl2PmApLmpvaW4oJycpfTwvZGw+YCA6ICcnfQ0KICAgICAgICAke25hdkhUTUx9DQogICAgICAgICR7bGlua3NIVE1MfQ0KICAgICAgPC9hc2lkZT5gOw0KDQogICAgLy8gR2FsbGVyeTogZmlyc3QgaW1hZ2UgaXMgdGhlIGxhcmdlIGxlYWQgdGlsZSwgdGhlIHJlc3QgZmlsbCB0aGUgZ3JpZC4NCiAgICBjb25zdCBnYWxsZXJ5SFRNTCA9IGltYWdlcy5sZW5ndGggPyBgDQogICAgICA8c2VjdGlvbiBjbGFzcz0iY3MtYmxvY2siIGlkPSJjcy1zZWMtZ2FsbGVyeSI+DQogICAgICAgIDxoMyBjbGFzcz0iY3MtYmxvY2staGVhZCI+R2FsbGVyeSBpbWFnZXM8L2gzPg0KICAgICAgICA8ZGl2IGNsYXNzPSJjcy1nYWwiPg0KICAgICAgICAgICR7aW1hZ2VzLm1hcCgodXJsLCBpKSA9PiBgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJjcy1nYWwtdGlsZSAke2k9PT0wPydjcy1nYWwtdGlsZS0tbGVhZCc6Jyd9IiBkYXRhLWlkeD0iJHtpfSIgYXJpYS1sYWJlbD0iT3BlbiBpbWFnZSAke2krMX0gZnVsbCBzY3JlZW4iPjxpbWcgc3JjPSIke3VybH0iIGFsdD0iIiBsb2FkaW5nPSJsYXp5Ij48L2J1dHRvbj5gKS5qb2luKCcnKX0NCiAgICAgICAgPC9kaXY+DQogICAgICA8L3NlY3Rpb24+YCA6ICcnOw0KDQogICAgY29uc3Qgc3RyYXRlZ3lIVE1MID0gaGFzU3RyYXRlZ3kgPyBgDQogICAgICA8ZGl2IGNsYXNzPSJjcy1zdHJhdGVneSIgaWQ9ImNzLXNlYy1zdHJhdGVneSI+DQogICAgICAgIDxoMyBjbGFzcz0iY3MtYmxvY2staGVhZCI+RGVzaWduIHN0cmF0ZWd5PC9oMz4NCiAgICAgICAgJHtwLnN0cmF0ZWd5Lm1hcChzID0+IGANCiAgICAgICAgICA8ZGl2IGNsYXNzPSJiYXItcm93Ij4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJhci1sYWJlbCI+PHNwYW4+JHtzWzBdfTwvc3Bhbj48c3Bhbj4ke3NbMV19JTwvc3Bhbj48L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJhci10cmFjayI+PGRpdiBjbGFzcz0iYmFyLWZpbGwiIHN0eWxlPSJ3aWR0aDoke3NbMV19JSI+PC9kaXY+PC9kaXY+DQogICAgICAgICAgICAke3NbMl0gPyBgPGRpdiBjbGFzcz0iYmFyLXN1YiI+JHtzWzJdfTwvZGl2PmAgOiAnJ30NCiAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgYCkuam9pbignJyl9DQogICAgICA8L2Rpdj5gIDogJyc7DQoNCiAgICAvLyBQcmVtaXVtIEErLCBCYXNpYyBFQkMsIGV0Yy4g4oCUIGtlZXAgdGhlIC5jcy1zZWN0aW9uIGNsYXNzIHNvDQogICAgLy8gaWVyYXJlV2lyZVNlY3Rpb25zKCkgc3RpbGwgd2lyZXMgdGhlaXIgaW1hZ2VzIHRvIHRoZSBsaWdodGJveC4NCiAgICBjb25zdCByZXN0SFRNTCA9IHJlc3RTZWN0aW9ucy5tYXAoKHNlYywgc2kpID0+IHsNCiAgICAgIGNvbnN0IHN0YWNrZWQgPSBpc1N0YWNrZWRTZWN0aW9uKHNlYy5sYWJlbCk7DQogICAgICBjb25zdCBib2R5ID0gKHNlYy5zdWJncm91cHMgJiYgc2VjLnN1Ymdyb3Vwcy5sZW5ndGgpDQogICAgICAgID8gYDxkaXYgY2xhc3M9ImNzLXN1Ymdyb3VwLXJvdyI+JHtzZWMuc3ViZ3JvdXBzLm1hcCgoc2csIHNnaSkgPT4gYA0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY3Mtc3ViZ3JvdXAiIGRhdGEtc2VjPSIke3NpfSIgZGF0YS1zdWI9IiR7c2dpfSI+DQogICAgICAgICAgICAgIDxoND4ke3NnLmxhYmVsfTwvaDQ+DQogICAgICAgICAgICAgICR7Z2FsR3JpZChzZy5pbWFnZXMsIHN0YWNrZWQpfQ0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgYCkuam9pbignJyl9PC9kaXY+YA0KICAgICAgICA6IGA8ZGl2IGRhdGEtc2VjPSIke3NpfSI+JHtnYWxHcmlkKHNlYy5pbWFnZXMsIHN0YWNrZWQpfTwvZGl2PmA7DQogICAgICByZXR1cm4gYA0KICAgICAgICA8c2VjdGlvbiBjbGFzcz0iY3Mtc2VjdGlvbiIgaWQ9ImNzLXNlYy0ke3NpfSI+DQogICAgICAgICAgPGgzIGNsYXNzPSJjcy1ibG9jay1oZWFkIj4ke3NlYy5sYWJlbH08L2gzPg0KICAgICAgICAgICR7Ym9keX0NCiAgICAgICAgPC9zZWN0aW9uPmA7DQogICAgfSkuam9pbignJyk7DQoNCiAgICBjb25zdCBoYXNBbnlNZWRpYSA9IGltYWdlcy5sZW5ndGggfHwgcmVzdFNlY3Rpb25zLmxlbmd0aDsNCiAgICBjb25zdCBlbXB0eUhUTUwgPSBoYXNBbnlNZWRpYSA\/ICcnIDogYDxkaXYgY2xhc3M9ImVtcHR5Ij48c3Ryb25nPk5vIGltYWdlcyB5ZXQ8L3N0cm9uZz5BZGQgaW1hZ2VzIHRvIHRoaXMgcHJvamVjdCB0byBzaG93IHRoZW0gaGVyZS48L2Rpdj5gOw0KDQogICAgb3ZlcmxheUNvbnRlbnQuaW5uZXJIVE1MID0gYA0KICAgICAgPGRpdiBjbGFzcz0iY3MtbGF5b3V0Ij4NCiAgICAgICAgJHtzaWRlSFRNTH0NCiAgICAgICAgPGRpdiBjbGFzcz0iY3MtbWFpbiI+DQogICAgICAgICAgJHtnYWxsZXJ5SFRNTH0NCiAgICAgICAgICAke3N0cmF0ZWd5SFRNTH0NCiAgICAgICAgICAke3Jlc3RIVE1MfQ0KICAgICAgICAgICR7ZW1wdHlIVE1MfQ0KICAgICAgICA8L2Rpdj4NCiAgICAgIDwvZGl2Pg0KICAgIGA7DQogICAgaWVyYXJlQWRqdXN0R2FsbGVyeVRpbGVzKG92ZXJsYXlDb250ZW50KTsNCiAgICBpZXJhcmVTZXR1cEdhbGxlcnlTbGlkZXNob3coW10sICcnKTsNCiAgICBpZXJhcmVXaXJlU2VjdGlvbnMocmVzdFNlY3Rpb25zKTsNCiAgICBvdmVybGF5Q29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY3MtZ2FsLXRpbGUnKS5mb3JFYWNoKHRpbGUgPT4gew0KICAgICAgdGlsZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IGllcmFyZU9wZW5MaWdodGJveChpbWFnZXMsIHBhcnNlSW50KHRpbGUuZGF0YXNldC5pZHgpLCBnYWxsZXJ5U2VjdGlvbiA\/IGdhbGxlcnlTZWN0aW9uLmxhYmVsIDogJ0dhbGxlcnknKSk7DQogICAgfSk7DQogICAgaWVyYXJlU2V0dXBTZWN0aW9uTmF2KCk7DQogICAgb3ZlcmxheS5jbGFzc0xpc3QuYWRkKCdvcGVuJyk7DQogICAgb3ZlcmxheS5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywnZmFsc2UnKTsNCiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUub3ZlcmZsb3c9J2hpZGRlbic7DQogICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdz0naGlkZGVuJzsNCiAgICBvdmVybGF5LnNjcm9sbFRvcCA9IDA7DQogICAgY2xvc2VCdG4uZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pOw0KDQogICAgaWYgKHAuaWQgJiYgSUVSQVJFX0FKQVhfVVJMKSB7DQogICAgICBjb25zdCBib2R5ID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpOw0KICAgICAgYm9keS5zZXQoJ2FjdGlvbicsICdpZXJhcmVfdHJhY2tfdmlldycpOw0KICAgICAgYm9keS5zZXQoJ3Bvc3RfaWQnLCBwLmlkKTsNCiAgICAgIGZldGNoKElFUkFSRV9BSkFYX1VSTCwgeyBtZXRob2Q6ICdQT1NUJywgYm9keTogYm9keSB9KS5jYXRjaChmdW5jdGlvbigpe30pOw0KICAgIH0NCiAgfQ0KDQogIGZ1bmN0aW9uIGllcmFyZVNldHVwU2VjdGlvbk5hdigpew0KICAgIGNvbnN0IGxpbmtzID0gb3ZlcmxheUNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgnLmNzLW5hdi1saW5rJyk7DQogICAgbGlua3MuZm9yRWFjaChsaW5rID0+IHsNCiAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4gew0KICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQogICAgICAgIGNvbnN0IHRhcmdldCA9IG92ZXJsYXlDb250ZW50LnF1ZXJ5U2VsZWN0b3IoJyMnICsgbGluay5kYXRhc2V0LnRhcmdldCk7DQogICAgICAgIGlmICh0YXJnZXQpIHRhcmdldC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICdzdGFydCcgfSk7DQogICAgICB9KTsNCiAgICB9KTsNCiAgICBpZXJhcmVVcGRhdGVTZWN0aW9uTmF2KCk7DQogIH0NCg0KICBmdW5jdGlvbiBpZXJhcmVVcGRhdGVTZWN0aW9uTmF2KCl7DQogICAgY29uc3QgbGlua3MgPSBvdmVybGF5Q29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCcuY3MtbmF2LWxpbmsnKTsNCiAgICBpZiAoIWxpbmtzLmxlbmd0aCkgcmV0dXJuOw0KICAgIGNvbnN0IG9mZnNldCA9IHdpbmRvdy5pbm5lcldpZHRoIDw9IDkwMCA\/IDE1MCA6IDEzMDsNCiAgICBsZXQgY3VycmVudCA9IGxpbmtzWzBdLmRhdGFzZXQudGFyZ2V0Ow0KICAgIGxpbmtzLmZvckVhY2gobCA9PiB7DQogICAgICBjb25zdCB0ID0gb3ZlcmxheUNvbnRlbnQucXVlcnlTZWxlY3RvcignIycgKyBsLmRhdGFzZXQudGFyZ2V0KTsNCiAgICAgIGlmICh0ICYmIHQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIC0gb2Zmc2V0IDw9IDApIGN1cnJlbnQgPSBsLmRhdGFzZXQudGFyZ2V0Ow0KICAgIH0pOw0KICAgIGlmIChvdmVybGF5LnNjcm9sbFRvcCArIG92ZXJsYXkuY2xpZW50SGVpZ2h0ID49IG92ZXJsYXkuc2Nyb2xsSGVpZ2h0IC0gNCkgew0KICAgICAgY3VycmVudCA9IGxpbmtzW2xpbmtzLmxlbmd0aCAtIDFdLmRhdGFzZXQudGFyZ2V0Ow0KICAgIH0NCiAgICBsaW5rcy5mb3JFYWNoKGwgPT4gew0KICAgICAgY29uc3Qgb24gPSBsLmRhdGFzZXQudGFyZ2V0ID09PSBjdXJyZW50Ow0KICAgICAgaWYgKG9uICYmICFsLmNsYXNzTGlzdC5jb250YWlucygnYWN0aXZlJykgJiYgd2luZG93LmlubmVyV2lkdGggPD0gOTAwKSB7DQogICAgICAgIGNvbnN0IG5hdiA9IGwucGFyZW50RWxlbWVudDsNCiAgICAgICAgaWYgKG5hdikgbmF2LnNjcm9sbFRvKHsgbGVmdDogbC5vZmZzZXRMZWZ0IC0gMjAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTsNCiAgICAgIH0NCiAgICAgIGwuY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJywgb24pOw0KICAgIH0pOw0KICB9DQogIG92ZXJsYXkuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaWVyYXJlVXBkYXRlU2VjdGlvbk5hdiwgeyBwYXNzaXZlOiB0cnVlIH0pOw0KDQogIGNvbnN0IElDT05TID0gew0KICAgIGdsb2JlOiAnPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjkiLz48cGF0aCBkPSJNMyAxMmgxOCIvPjxwYXRoIGQ9Ik0xMiAzYzIuNCAyLjkgMi40IDE1LjEgMCAxOE0xMiAzYy0yLjQgMi45LTIuNCAxNS4xIDAgMTgiLz48L3N2Zz4nLA0KICAgIGJhZzogJzxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNNi41IDhoMTFsMSAxMi41aC0xM3oiLz48cGF0aCBkPSJNOSA4VjZhMyAzIDAgMCAxIDYgMHYyIi8+PC9zdmc+JywNCiAgICBzdG9yZTogJzxzdmcgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNNC41IDkgNS41IDRoMTNsMSA1Ii8+PHBhdGggZD0iTTQuNSA5YTIgMiAwIDAgMCA0IDAgMiAyIDAgMCAwIDQgMCAyIDIgMCAwIDAgNCAwIDIgMiAwIDAgMCA0IDAiLz48cGF0aCBkPSJNNS41IDl2MTFoMTNWOSIvPjxwYXRoIGQ9Ik0xMCAyMHYtNmg0djYiLz48L3N2Zz4nLA0KICB9Ow0KICBmdW5jdGlvbiBsaW5rUGlsbHNIVE1MRm9yKHApew0KICAgIHJldHVybiBgDQogICAgICA8ZGl2IGNsYXNzPSJjcy1wYW5lbCI+DQogICAgICAgICR7cC53ZWJzaXRlX2xpbmsgPyBgPGEgY2xhc3M9ImNzLXBpbGwgY3MtcGlsbC1saW5rIiBocmVmPSIke3Aud2Vic2l0ZV9saW5rfSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPjxzcGFuIGNsYXNzPSJjcy1waWxsLWljb24iPiR7SUNPTlMuZ2xvYmV9PC9zcGFuPldlYnNpdGU8L2E+YCA6ICcnfQ0KICAgICAgICAke3AucHJvZHVjdF9saW5rID8gYDxhIGNsYXNzPSJjcy1waWxsIGNzLXBpbGwtbGluayIgaHJlZj0iJHtwLnByb2R1Y3RfbGlua30iIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj48c3BhbiBjbGFzcz0iY3MtcGlsbC1pY29uIj4ke0lDT05TLmJhZ308L3NwYW4+UHJvZHVjdDwvYT5gIDogJyd9DQogICAgICAgICR7cC5zdG9yZWZyb250X2xpbmsgPyBgPGEgY2xhc3M9ImNzLXBpbGwgY3MtcGlsbC1saW5rIiBocmVmPSIke3Auc3RvcmVmcm9udF9saW5rfSIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPjxzcGFuIGNsYXNzPSJjcy1waWxsLWljb24iPiR7SUNPTlMuc3RvcmV9PC9zcGFuPlN0b3JlZnJvbnQ8L2E+YCA6ICcnfQ0KICAgICAgPC9kaXY+DQogICAgYDsNCiAgfQ0KDQogIGZ1bmN0aW9uIGllcmFyZUFkanVzdEdhbGxlcnlUaWxlcyhjb250YWluZXIpew0KICAgIGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCcuZ2FsLXRpbGUgaW1nJykuZm9yRWFjaChpbWcgPT4gew0KICAgICAgY29uc3QgYXBwbHkgPSAoKSA9PiB7DQogICAgICAgIGNvbnN0IHRpbGUgPSBpbWcuY2xvc2VzdCgnLmdhbC10aWxlJyk7DQogICAgICAgIGlmICghdGlsZSB8fCAhaW1nLm5hdHVyYWxXaWR0aCB8fCAhaW1nLm5hdHVyYWxIZWlnaHQpIHJldHVybjsNCiAgICAgICAgY29uc3QgaXNXaWRlID0gKGltZy5uYXR1cmFsV2lkdGggLyBpbWcubmF0dXJhbEhlaWdodCkgPj0gMS4zOw0KICAgICAgICB0aWxlLmNsYXNzTGlzdC50b2dnbGUoJ2dhbC10aWxlLS1mdWxsJywgaXNXaWRlKTsNCiAgICAgIH07DQogICAgICBpZiAoaW1nLmNvbXBsZXRlKSBhcHBseSgpOw0KICAgICAgZWxzZSBpbWcuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGFwcGx5LCB7b25jZTp0cnVlfSk7DQogICAgfSk7DQogIH0NCg0KICBsZXQgaWVyYXJlR2FsbGVyeVRpbWVyID0gbnVsbDsNCiAgbGV0IGllcmFyZVJlc3VtZUdhbGxlcnlBdXRvcGxheSA9IG51bGw7DQoNCiAgZnVuY3Rpb24gaWVyYXJlU2V0dXBHYWxsZXJ5U2xpZGVzaG93KGltYWdlcywgbGFiZWwpew0KICAgIGllcmFyZVJlc3VtZUdhbGxlcnlBdXRvcGxheSA9IG51bGw7DQogICAgaWYgKGllcmFyZUdhbGxlcnlUaW1lcikgeyBjbGVhckludGVydmFsKGllcmFyZUdhbGxlcnlUaW1lcik7IGllcmFyZUdhbGxlcnlUaW1lciA9IG51bGw7IH0NCiAgICBpZiAoIWltYWdlcyB8fCAhaW1hZ2VzLmxlbmd0aCkgcmV0dXJuOw0KDQogICAgY29uc3Qgcm9vdCA9IG92ZXJsYXlDb250ZW50LnF1ZXJ5U2VsZWN0b3IoJyNpZXJhcmVHYWxsZXJ5U2xpZGVzaG93Jyk7DQogICAgaWYgKCFyb290KSByZXR1cm47DQogICAgY29uc3QgbWFpblN0YWdlID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcuZ2FsbGVyeS1tYWluJyk7DQogICAgY29uc3QgbWFpbkltZyA9IHJvb3QucXVlcnlTZWxlY3RvcignI2llcmFyZUdhbGxlcnlNYWluSW1nJyk7DQogICAgY29uc3QgdGh1bWJzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCcuZ2FsbGVyeS10aHVtYicpOw0KICAgIGNvbnN0IHByZXZCdG4gPSByb290LnF1ZXJ5U2VsZWN0b3IoJy5nYWxsZXJ5LXByZXYnKTsNCiAgICBjb25zdCBuZXh0QnRuID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcuZ2FsbGVyeS1uZXh0Jyk7DQogICAgbGV0IGlkeCA9IDA7DQoNCiAgICBmdW5jdGlvbiBzaG93KGkpew0KICAgICAgaWR4ID0gKChpICUgaW1hZ2VzLmxlbmd0aCkgKyBpbWFnZXMubGVuZ3RoKSAlIGltYWdlcy5sZW5ndGg7DQogICAgICBtYWluSW1nLnNyYyA9IGltYWdlc1tpZHhdOw0KICAgICAgdGh1bWJzLmZvckVhY2goKHQsIHRpKSA9PiB0LmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScsIHRpID09PSBpZHgpKTsNCiAgICB9DQogICAgZnVuY3Rpb24gZ29OZXh0KCl7IHNob3coaWR4ICsgMSk7IH0NCiAgICBmdW5jdGlvbiBnb1ByZXYoKXsgc2hvdyhpZHggLSAxKTsgfQ0KICAgIGZ1bmN0aW9uIHJlc3RhcnRBdXRvcGxheSgpew0KICAgICAgaWYgKGltYWdlcy5sZW5ndGggPCAyKSByZXR1cm47DQogICAgICBpZiAoaWVyYXJlR2FsbGVyeVRpbWVyKSBjbGVhckludGVydmFsKGllcmFyZUdhbGxlcnlUaW1lcik7DQogICAgICBpZXJhcmVHYWxsZXJ5VGltZXIgPSBzZXRJbnRlcnZhbChnb05leHQsIDQwMDApOw0KICAgIH0NCg0KICAgIGlmIChtYWluU3RhZ2UpIG1haW5TdGFnZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKT0+ew0KICAgICAgaWYgKGUudGFyZ2V0LmNsb3Nlc3QoJy5nYWxsZXJ5LW5hdicpKSByZXR1cm47DQogICAgICBpZXJhcmVPcGVuTGlnaHRib3goaW1hZ2VzLCBpZHgsIGxhYmVsKTsNCiAgICB9KTsNCg0KICAgIGlmIChpbWFnZXMubGVuZ3RoID4gMSkgew0KICAgICAgdGh1bWJzLmZvckVhY2goKHQsIHRpKSA9PiB0LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4geyBzaG93KHRpKTsgcmVzdGFydEF1dG9wbGF5KCk7IH0pKTsNCiAgICAgIGlmIChuZXh0QnRuKSBuZXh0QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHsgZS5zdG9wUHJvcGFnYXRpb24oKTsgZ29OZXh0KCk7IHJlc3RhcnRBdXRvcGxheSgpOyB9KTsNCiAgICAgIGlmIChwcmV2QnRuKSBwcmV2QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHsgZS5zdG9wUHJvcGFnYXRpb24oKTsgZ29QcmV2KCk7IHJlc3RhcnRBdXRvcGxheSgpOyB9KTsNCiAgICAgIGllcmFyZVJlc3VtZUdhbGxlcnlBdXRvcGxheSA9IHJlc3RhcnRBdXRvcGxheTsNCiAgICAgIHJlc3RhcnRBdXRvcGxheSgpOw0KICAgIH0NCiAgfQ0KDQogIGZ1bmN0aW9uIGllcmFyZVdpcmVTZWN0aW9ucyhyZXN0U2VjdGlvbnMpew0KICAgIGlmICghcmVzdFNlY3Rpb25zIHx8ICFyZXN0U2VjdGlvbnMubGVuZ3RoKSByZXR1cm47DQogICAgb3ZlcmxheUNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgnLmNzLXNlY3Rpb24nKS5mb3JFYWNoKChzZWN0aW9uRWwsIHNpKSA9PiB7DQogICAgICBjb25zdCBzZWMgPSByZXN0U2VjdGlvbnNbc2ldOw0KICAgICAgaWYgKCFzZWMpIHJldHVybjsNCiAgICAgIGlmIChzZWMuc3ViZ3JvdXBzICYmIHNlYy5zdWJncm91cHMubGVuZ3RoKSB7DQogICAgICAgIHNlY3Rpb25FbC5xdWVyeVNlbGVjdG9yQWxsKCcuY3Mtc3ViZ3JvdXAnKS5mb3JFYWNoKChncm91cCwgc2dpKSA9PiB7DQogICAgICAgICAgY29uc3Qgc2cgPSBzZWMuc3ViZ3JvdXBzW3NnaV07DQogICAgICAgICAgaWYgKCFzZykgcmV0dXJuOw0KICAgICAgICAgIGNvbnN0IGxhYmVsID0gc2cubGFiZWwgPyBgJHtzZWMubGFiZWx9IOKAlCAke3NnLmxhYmVsfWAgOiBzZWMubGFiZWw7DQogICAgICAgICAgZ3JvdXAucXVlcnlTZWxlY3RvckFsbCgnLmdhbC10aWxlJykuZm9yRWFjaCh0aWxlPT57DQogICAgICAgICAgICB0aWxlLnN0eWxlLmN1cnNvciA9ICd6b29tLWluJzsNCiAgICAgICAgICAgIHRpbGUuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKT0+IGllcmFyZU9wZW5MaWdodGJveChzZy5pbWFnZXMgfHwgW10sIHBhcnNlSW50KHRpbGUuZGF0YXNldC5pZHgpLCBsYWJlbCkpOw0KICAgICAgICAgIH0pOw0KICAgICAgICB9KTsNCiAgICAgIH0gZWxzZSB7DQogICAgICAgIHNlY3Rpb25FbC5xdWVyeVNlbGVjdG9yQWxsKCcuZ2FsLXRpbGUnKS5mb3JFYWNoKHRpbGU9PnsNCiAgICAgICAgICB0aWxlLnN0eWxlLmN1cnNvciA9ICd6b29tLWluJzsNCiAgICAgICAgICB0aWxlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCk9PiBpZXJhcmVPcGVuTGlnaHRib3goc2VjLmltYWdlcyB8fCBbXSwgcGFyc2VJbnQodGlsZS5kYXRhc2V0LmlkeCksIHNlYy5sYWJlbCkpOw0KICAgICAgICB9KTsNCiAgICAgIH0NCiAgICB9KTsNCiAgfQ0KDQogIGxldCBpZXJhcmVMaWdodGJveEltYWdlcyA9IFtdOw0KICBsZXQgaWVyYXJlTGlnaHRib3hJbmRleCA9IDA7DQoNCiAgZnVuY3Rpb24gaWVyYXJlU2hvd0xpZ2h0Ym94SW1hZ2UoaSl7DQogICAgaWYgKCFsaWdodGJveCB8fCAhaWVyYXJlTGlnaHRib3hJbWFnZXMubGVuZ3RoKSByZXR1cm47DQogICAgaWVyYXJlTGlnaHRib3hJbmRleCA9ICgoaSAlIGllcmFyZUxpZ2h0Ym94SW1hZ2VzLmxlbmd0aCkgKyBpZXJhcmVMaWdodGJveEltYWdlcy5sZW5ndGgpICUgaWVyYXJlTGlnaHRib3hJbWFnZXMubGVuZ3RoOw0KICAgIGxpZ2h0Ym94SW1nLnNyYyA9IGllcmFyZUxpZ2h0Ym94SW1hZ2VzW2llcmFyZUxpZ2h0Ym94SW5kZXhdOw0KICAgIGxpZ2h0Ym94VGh1bWJzLnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpLmZvckVhY2goKGIsIHRpKSA9PiBiLmNsYXNzTGlzdC50b2dnbGUoJ2FjdGl2ZScsIHRpID09PSBpZXJhcmVMaWdodGJveEluZGV4KSk7DQogIH0NCg0KICBmdW5jdGlvbiBpZXJhcmVPcGVuTGlnaHRib3goaW1hZ2VzLCBzdGFydEluZGV4LCBsYWJlbCl7DQogICAgaWYgKCFsaWdodGJveCB8fCAhaW1hZ2VzIHx8ICFpbWFnZXMubGVuZ3RoKSByZXR1cm47DQogICAgaWVyYXJlTGlnaHRib3hJbWFnZXMgPSBpbWFnZXM7DQogICAgaWYgKGllcmFyZUdhbGxlcnlUaW1lcikgeyBjbGVhckludGVydmFsKGllcmFyZUdhbGxlcnlUaW1lcik7IGllcmFyZUdhbGxlcnlUaW1lciA9IG51bGw7IH0NCg0KICAgIGxpZ2h0Ym94VGh1bWJzLmlubmVySFRNTCA9IGltYWdlcy5sZW5ndGggPiAxDQogICAgICA\/IGltYWdlcy5tYXAoKHVybCwgaSkgPT4gYDxidXR0b24gdHlwZT0iYnV0dG9uIiBkYXRhLWlkeD0iJHtpfSIgYXJpYS1sYWJlbD0iVmlldyBpbWFnZSAke2krMX0iPjxpbWcgc3JjPSIke3VybH0iIGFsdD0iIiBsb2FkaW5nPSJsYXp5Ij48L2J1dHRvbj5gKS5qb2luKCcnKQ0KICAgICAgOiAnJzsNCiAgICBsaWdodGJveFRodW1icy5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24nKS5mb3JFYWNoKGJ0bj0+ew0KICAgICAgYnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCk9PiBpZXJhcmVTaG93TGlnaHRib3hJbWFnZShwYXJzZUludChidG4uZGF0YXNldC5pZHgpKSk7DQogICAgfSk7DQogICAgaWYgKGxpZ2h0Ym94TmV4dCkgbGlnaHRib3hOZXh0LnN0eWxlLmRpc3BsYXkgPSBpbWFnZXMubGVuZ3RoID4gMSA\/ICcnIDogJ25vbmUnOw0KICAgIGlmIChsaWdodGJveENhcHRpb24pIGxpZ2h0Ym94Q2FwdGlvbi50ZXh0Q29udGVudCA9IGxhYmVsIHx8ICcnOw0KDQogICAgaWVyYXJlU2hvd0xpZ2h0Ym94SW1hZ2Uoc3RhcnRJbmRleCB8fCAwKTsNCiAgICBsaWdodGJveC5jbGFzc0xpc3QuYWRkKCdvcGVuJyk7DQogICAgbGlnaHRib3guc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICdmYWxzZScpOw0KICB9DQoNCiAgZnVuY3Rpb24gaWVyYXJlQ2xvc2VMaWdodGJveCgpew0KICAgIGlmICghbGlnaHRib3gpIHJldHVybjsNCiAgICBsaWdodGJveC5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7DQogICAgbGlnaHRib3guc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsICd0cnVlJyk7DQogICAgaWYgKGllcmFyZVJlc3VtZUdhbGxlcnlBdXRvcGxheSkgaWVyYXJlUmVzdW1lR2FsbGVyeUF1dG9wbGF5KCk7DQogIH0NCg0KICBpZiAobGlnaHRib3hDbG9zZSkgbGlnaHRib3hDbG9zZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGllcmFyZUNsb3NlTGlnaHRib3gpOw0KICBpZiAobGlnaHRib3hOZXh0KSBsaWdodGJveE5leHQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKT0+IGllcmFyZVNob3dMaWdodGJveEltYWdlKGllcmFyZUxpZ2h0Ym94SW5kZXggKyAxKSk7DQogIGlmIChsaWdodGJveCkgbGlnaHRib3guYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSk9PnsgaWYgKGUudGFyZ2V0ID09PSBsaWdodGJveCkgaWVyYXJlQ2xvc2VMaWdodGJveCgpOyB9KTsNCiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGU9PnsNCiAgICBpZiAoIWxpZ2h0Ym94IHx8ICFsaWdodGJveC5jbGFzc0xpc3QuY29udGFpbnMoJ29wZW4nKSkgcmV0dXJuOw0KICAgIGlmIChlLmtleSA9PT0gJ0VzY2FwZScpIGllcmFyZUNsb3NlTGlnaHRib3goKTsNCiAgICBpZiAoZS5rZXkgPT09ICdBcnJvd1JpZ2h0JykgaWVyYXJlU2hvd0xpZ2h0Ym94SW1hZ2UoaWVyYXJlTGlnaHRib3hJbmRleCArIDEpOw0KICAgIGlmIChlLmtleSA9PT0gJ0Fycm93TGVmdCcpIGllcmFyZVNob3dMaWdodGJveEltYWdlKGllcmFyZUxpZ2h0Ym94SW5kZXggLSAxKTsNCiAgfSk7DQoNCiAgZnVuY3Rpb24gY2xvc2VEZXRhaWwoKXsNCiAgICBvdmVybGF5LmNsYXNzTGlzdC5yZW1vdmUoJ29wZW4nKTsNCiAgICBvdmVybGF5LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCd0cnVlJyk7DQogICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLm92ZXJmbG93PScnOw0KICAgIGRvY3VtZW50LmJvZHkuc3R5bGUub3ZlcmZsb3c9Jyc7DQogICAgaWYgKGllcmFyZUdhbGxlcnlUaW1lcikgeyBjbGVhckludGVydmFsKGllcmFyZUdhbGxlcnlUaW1lcik7IGllcmFyZUdhbGxlcnlUaW1lciA9IG51bGw7IH0NCiAgICBpZiAobGlnaHRib3gpIHsgbGlnaHRib3guY2xhc3NMaXN0LnJlbW92ZSgnb3BlbicpOyBsaWdodGJveC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywndHJ1ZScpOyB9DQogIH0NCg0KICBjbG9zZUJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpPT57DQogICAgLy8gQ29uc3VtZSB0aGUgaGlzdG9yeSBlbnRyeSBwdXNoZWQgd2hlbiB0aGUgb3ZlcmxheSBvcGVuZWQsIHNvIHRoZQ0KICAgIC8vIGJhY2sgYnV0dG9uIGRvZXNuJ3QgbGVhdmUgYSBzdGFsZSAiZm9yd2FyZCIgZW50cnkgc2l0dGluZyB0aGVyZSDigJQNCiAgICAvLyB0aGUgcG9wc3RhdGUgbGlzdGVuZXIgYmVsb3cgZG9lcyB0aGUgYWN0dWFsIGNsb3NpbmcuDQogICAgaWYgKGhpc3Rvcnkuc3RhdGUgJiYgaGlzdG9yeS5zdGF0ZS5pZXJhcmVPdmVybGF5KSBoaXN0b3J5LmJhY2soKTsNCiAgICBlbHNlIGNsb3NlRGV0YWlsKCk7DQogIH0pOw0KICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgZT0+eyBpZihlLmtleT09PSdFc2NhcGUnICYmICEobGlnaHRib3ggJiYgbGlnaHRib3guY2xhc3NMaXN0LmNvbnRhaW5zKCdvcGVuJykpKSBjbG9zZURldGFpbCgpOyB9KTsNCiAgbGV0IGllcmFyZUxhc3RJbmZpbml0ZU1vZGUgPSBudWxsOw0KICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCk9PnsNCiAgICBmaXhSb3dDZW50ZXJpbmcod29ya1Jvdyk7DQogICAgZHJvcGRvd25zLmZvckVhY2goZD0+ZC5jbG9zZSgpKTsNCiAgICBjb25zdCBub3dJbmZpbml0ZSA9IGlzSW5maW5pdGVTY3JvbGxNb2RlKCk7DQogICAgaWYgKGllcmFyZUxhc3RJbmZpbml0ZU1vZGUgPT09IG51bGwpIGllcmFyZUxhc3RJbmZpbml0ZU1vZGUgPSBub3dJbmZpbml0ZTsNCiAgICBpZiAobm93SW5maW5pdGUgIT09IGllcmFyZUxhc3RJbmZpbml0ZU1vZGUpIHsNCiAgICAgIGllcmFyZUxhc3RJbmZpbml0ZU1vZGUgPSBub3dJbmZpbml0ZTsNCiAgICAgIGN1cnJlbnRQYWdlID0gMTsNCiAgICAgIHJlbmRlckdyaWQoKTsNCiAgICB9DQogIH0pOw0KDQogIC8vIEJyb3dzZXIvaGFyZHdhcmUgQmFjayBidXR0b246IGlmIHRoZSBjYXNlIHN0dWR5IG92ZXJsYXkgaXMgb3BlbiwNCiAgLy8gY2xvc2UgaXQgaW5zdGVhZCBvZiBuYXZpZ2F0aW5nIGF3YXkgZnJvbSB0aGUgcGFnZSBlbnRpcmVseS4NCiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJywgKCk9PnsNCiAgICBpZiAob3ZlcmxheS5jbGFzc0xpc3QuY29udGFpbnMoJ29wZW4nKSkgY2xvc2VEZXRhaWwoKTsNCiAgfSk7DQoNCiAgY29uc3QgcG9ydGZvbGlvUm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZXJhcmVQb3J0Zm9saW9Sb290Jyk7DQoNCiAgbGV0IGZ1bGxCbGVlZEZyYW1lID0gbnVsbDsNCg0KICBmdW5jdGlvbiBpZXJhcmVSZWxlYXNlVGhlbWVDbGlwcGluZyhlbCl7DQogICAgbGV0IHBhcmVudCA9IGVsID8gZWwucGFyZW50RWxlbWVudCA6IG51bGw7DQogICAgd2hpbGUocGFyZW50ICYmIHBhcmVudCAhPT0gZG9jdW1lbnQuYm9keSAmJiBwYXJlbnQgIT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl7DQogICAgICBjb25zdCBzdHlsZXMgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShwYXJlbnQpOw0KICAgICAgaWYoc3R5bGVzLm92ZXJmbG93WCA9PT0gJ2hpZGRlbicgfHwgc3R5bGVzLm92ZXJmbG93WCA9PT0gJ2NsaXAnKXsNCiAgICAgICAgcGFyZW50LnN0eWxlLnNldFByb3BlcnR5KCdvdmVyZmxvdy14JywgJ3Zpc2libGUnLCAnaW1wb3J0YW50Jyk7DQogICAgICB9DQogICAgICAvLyBFbGVtZW50b3IgKGFuZCBtYW55IGJveGVkIHRoZW1lcykgd3JhcCBwYWdlIGNvbnRlbnQgaW4gY29udGFpbmVycw0KICAgICAgLy8gd2l0aCB0aGVpciBvd24gbWF4LXdpZHRoICsgc2lkZSBwYWRkaW5nICguZWxlbWVudG9yLXNlY3Rpb24sDQogICAgICAvLyAuZS1jb24sIC5lbGVtZW50b3ItY29udGFpbmVyLCAuc2l0ZS1jb250ZW50LCBldGMpLiBPdmVycmlkaW5nDQogICAgICAvLyBvdmVyZmxvdy14IGFsb25lIGRvZXMgbm90aGluZyBpZiB0aGUgcGFyZW50IGl0c2VsZiBpcyBuYXJyb3dlcg0KICAgICAgLy8gdGhhbiB0aGUgdmlld3BvcnQg4oCUIHRoZSBwb3J0Zm9saW8gcm9vdCBpcyBzdGlsbCBsYWlkIG91dCBpbnNpZGUNCiAgICAgIC8vIHRoYXQgbmFycm93ZXIgYm94IGJlZm9yZSBpdHMgb3duIGZ1bGwtYmxlZWQgc3R5bGVzIGV2ZXIgYXBwbHkuDQogICAgICAvLyBTbyBhbnkgYW5jZXN0b3Igd2l0aCBhIG1heC13aWR0aCBsZXNzIHRoYW4gdGhlIHZpZXdwb3J0LCBvciBhbnkNCiAgICAgIC8vIGhvcml6b250YWwgcGFkZGluZywgZ2V0cyBuZXV0cmFsaXplZCB0b28uDQogICAgICBjb25zdCBtYXhXaWR0aFB4ID0gcGFyc2VGbG9hdChzdHlsZXMubWF4V2lkdGgpOw0KICAgICAgaWYoc3R5bGVzLm1heFdpZHRoICYmIHN0eWxlcy5tYXhXaWR0aCAhPT0gJ25vbmUnICYmICFpc05hTihtYXhXaWR0aFB4KSAmJiBtYXhXaWR0aFB4IDwgd2luZG93LmlubmVyV2lkdGgpew0KICAgICAgICBwYXJlbnQuc3R5bGUuc2V0UHJvcGVydHkoJ21heC13aWR0aCcsICdub25lJywgJ2ltcG9ydGFudCcpOw0KICAgICAgfQ0KICAgICAgaWYocGFyc2VGbG9hdChzdHlsZXMucGFkZGluZ0xlZnQpID4gMCl7IHBhcmVudC5zdHlsZS5zZXRQcm9wZXJ0eSgncGFkZGluZy1sZWZ0JywgJzAnLCAnaW1wb3J0YW50Jyk7IH0NCiAgICAgIGlmKHBhcnNlRmxvYXQoc3R5bGVzLnBhZGRpbmdSaWdodCkgPiAwKXsgcGFyZW50LnN0eWxlLnNldFByb3BlcnR5KCdwYWRkaW5nLXJpZ2h0JywgJzAnLCAnaW1wb3J0YW50Jyk7IH0NCiAgICAgIGlmKHN0eWxlcy53aWR0aCAmJiBzdHlsZXMud2lkdGggIT09ICdhdXRvJyAmJiBwYXJlbnQudGFnTmFtZSAhPT0gJ0JPRFknICYmIHBhcmVudC50YWdOYW1lICE9PSAnSFRNTCcpew0KICAgICAgICBjb25zdCB3aWR0aFB4ID0gcGFyc2VGbG9hdChzdHlsZXMud2lkdGgpOw0KICAgICAgICBpZighaXNOYU4od2lkdGhQeCkgJiYgd2lkdGhQeCA8IHdpbmRvdy5pbm5lcldpZHRoKXsNCiAgICAgICAgICBwYXJlbnQuc3R5bGUuc2V0UHJvcGVydHkoJ3dpZHRoJywgJzEwMCUnLCAnaW1wb3J0YW50Jyk7DQogICAgICAgIH0NCiAgICAgIH0NCiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnRFbGVtZW50Ow0KICAgIH0NCiAgfQ0KDQogIGZ1bmN0aW9uIGllcmFyZUZ1bGxCbGVlZCgpew0KICAgIGlmKCFwb3J0Zm9saW9Sb290KSByZXR1cm47DQoNCiAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LmFkZCgnaWVyYXJlLWhhcy1wb3J0Zm9saW8nKTsNCiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoJ2llcmFyZS1oYXMtcG9ydGZvbGlvJyk7DQogICAgaWVyYXJlUmVsZWFzZVRoZW1lQ2xpcHBpbmcocG9ydGZvbGlvUm9vdCk7DQoNCiAgICBjb25zdCB2aWV3cG9ydFdpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoOw0KDQogICAgcG9ydGZvbGlvUm9vdC5zdHlsZS5zZXRQcm9wZXJ0eSgnd2lkdGgnLCB2aWV3cG9ydFdpZHRoICsgJ3B4JywgJ2ltcG9ydGFudCcpOw0KICAgIHBvcnRmb2xpb1Jvb3Quc3R5bGUuc2V0UHJvcGVydHkoJ21pbi13aWR0aCcsIHZpZXdwb3J0V2lkdGggKyAncHgnLCAnaW1wb3J0YW50Jyk7DQogICAgcG9ydGZvbGlvUm9vdC5zdHlsZS5zZXRQcm9wZXJ0eSgnbWF4LXdpZHRoJywgJ25vbmUnLCAnaW1wb3J0YW50Jyk7DQogICAgcG9ydGZvbGlvUm9vdC5zdHlsZS5zZXRQcm9wZXJ0eSgnbWFyZ2luLWxlZnQnLCAnMCcsICdpbXBvcnRhbnQnKTsNCiAgICBwb3J0Zm9saW9Sb290LnN0eWxlLnNldFByb3BlcnR5KCdtYXJnaW4tcmlnaHQnLCAnMCcsICdpbXBvcnRhbnQnKTsNCiAgICBwb3J0Zm9saW9Sb290LnN0eWxlLnNldFByb3BlcnR5KCdsZWZ0JywgJzAnLCAnaW1wb3J0YW50Jyk7DQoNCiAgICBjb25zdCBsZWZ0T2Zmc2V0ID0gcG9ydGZvbGlvUm9vdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0Ow0KICAgIHBvcnRmb2xpb1Jvb3Quc3R5bGUuc2V0UHJvcGVydHkoJ2xlZnQnLCAoLWxlZnRPZmZzZXQpICsgJ3B4JywgJ2ltcG9ydGFudCcpOw0KICB9DQoNCiAgZnVuY3Rpb24gc2NoZWR1bGVGdWxsQmxlZWQoKXsNCiAgICBpZihmdWxsQmxlZWRGcmFtZSkgY2FuY2VsQW5pbWF0aW9uRnJhbWUoZnVsbEJsZWVkRnJhbWUpOw0KICAgIGZ1bGxCbGVlZEZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpPT57DQogICAgICBpZXJhcmVGdWxsQmxlZWQoKTsNCiAgICAgIGZpeFJvd0NlbnRlcmluZyh3b3JrUm93KTsNCiAgICB9KTsNCiAgfQ0KDQogIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBzY2hlZHVsZUZ1bGxCbGVlZCwge3Bhc3NpdmU6dHJ1ZX0pOw0KICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignb3JpZW50YXRpb25jaGFuZ2UnLCBzY2hlZHVsZUZ1bGxCbGVlZCwge3Bhc3NpdmU6dHJ1ZX0pOw0KICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHNjaGVkdWxlRnVsbEJsZWVkKTsNCg0KICBpZihkb2N1bWVudC5mb250cyAmJiBkb2N1bWVudC5mb250cy5yZWFkeSl7DQogICAgZG9jdW1lbnQuZm9udHMucmVhZHkudGhlbihzY2hlZHVsZUZ1bGxCbGVlZCk7DQogIH0NCg0KICBzY2hlZHVsZUZ1bGxCbGVlZCgpOw0KDQogIGNvbnN0IG1lbnVCdG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWVyYXJlTWVudUJ0bicpOw0KICBjb25zdCBuYXZQYW5lbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpZXJhcmVOYXZQYW5lbCcpOw0KICBjb25zdCBuYXZQYW5lbENsb3NlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2llcmFyZU5hdlBhbmVsQ2xvc2UnKTsNCiAgZnVuY3Rpb24gc2V0TWVudShvcGVuLCBmcm9tUG9wc3RhdGUpew0KICAgIGlmICghbWVudUJ0biB8fCAhbmF2UGFuZWwpIHJldHVybjsNCiAgICBjb25zdCB3YXNPcGVuID0gbmF2UGFuZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdvcGVuJyk7DQogICAgbWVudUJ0bi5jbGFzc0xpc3QudG9nZ2xlKCdvcGVuJywgb3Blbik7DQogICAgbmF2UGFuZWwuY2xhc3NMaXN0LnRvZ2dsZSgnb3BlbicsIG9wZW4pOw0KICAgIG1lbnVCdG4uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgU3RyaW5nKG9wZW4pKTsNCiAgICBtZW51QnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIG9wZW4gPyAnQ2xvc2UgbWVudScgOiAnT3BlbiBtZW51Jyk7DQogICAgZG9jdW1lbnQuYm9keS5zdHlsZS5vdmVyZmxvdyA9IG9wZW4gPyAnaGlkZGVuJyA6ICcnOw0KICAgIGlmICghZnJvbVBvcHN0YXRlKSB7DQogICAgICAvLyBLZWVwIGhpc3RvcnkgaW4gc3luYyB3aXRoIHRoZSBtZW51J3Mgb3duIG9wZW4vY2xvc2UgY2FsbHMgKGNsaWNrLA0KICAgICAgLy8gRXNjYXBlLCBsaW5rIHRhcCwgcmVzaXplKSBzbyBhIGxhdGVyIEJhY2sgcHJlc3MgYmVoYXZlcyBjb3JyZWN0bHkNCiAgICAgIC8vIHdoZXRoZXIgdGhlIHVzZXIgb3BlbmVkIHRoZSBtZW51LCBjbG9zZWQgaXQsIG9yIG5hdmlnYXRlZCBhd2F5Lg0KICAgICAgaWYgKG9wZW4gJiYgIXdhc09wZW4pIGhpc3RvcnkucHVzaFN0YXRlKHsgaWVyYXJlTWVudTogdHJ1ZSB9LCAnJywgbG9jYXRpb24uaHJlZik7DQogICAgICBlbHNlIGlmICghb3BlbiAmJiB3YXNPcGVuICYmIGhpc3Rvcnkuc3RhdGUgJiYgaGlzdG9yeS5zdGF0ZS5pZXJhcmVNZW51KSBoaXN0b3J5LmJhY2soKTsNCiAgICB9DQogIH0NCiAgaWYgKG1lbnVCdG4gJiYgbmF2UGFuZWwpIHsNCiAgICBtZW51QnRuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpPT57IGUuc3RvcFByb3BhZ2F0aW9uKCk7IHNldE1lbnUoIW5hdlBhbmVsLmNsYXNzTGlzdC5jb250YWlucygnb3BlbicpKTsgfSk7DQogICAgaWYgKG5hdlBhbmVsQ2xvc2UpIG5hdlBhbmVsQ2xvc2UuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKT0+IHNldE1lbnUoZmFsc2UpKTsNCiAgICAvLyBBIHRhcCBvbiBhIGxpbmsgKG5vdCBhICsvw5cgdG9nZ2xlIGJ1dHRvbikgbmF2aWdhdGVzLCBzbyBjbG9zZSB0aGUNCiAgICAvLyBmdWxsLXNjcmVlbiBtZW51IGZpcnN0IGZvciBhIGNsZWFuIHRyYW5zaXRpb24gYmFjay4NCiAgICBuYXZQYW5lbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKT0+eyBpZiAoZS50YXJnZXQuY2xvc2VzdCgnYScpKSBzZXRNZW51KGZhbHNlKTsgfSk7DQogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKT0+eyBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSBzZXRNZW51KGZhbHNlKTsgfSk7DQogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsICgpPT4gc2V0TWVudShmYWxzZSkpOw0KICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdwb3BzdGF0ZScsICgpPT57DQogICAgICBpZiAobmF2UGFuZWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdvcGVuJykpIHNldE1lbnUoZmFsc2UsIHRydWUpOw0KICAgIH0pOw0KDQogICAgLy8gTmVzdGVkIGFjY29yZGlvbjogZWFjaCAucGFuZWwtdG9nZ2xlIGV4cGFuZHMvY29sbGFwc2VzIGl0cyBzaWJsaW5nDQogICAgLy8gLnBhbmVsLXN1YiwgYW5kIGNvbG9ycyBpdHMgb3duIHJvdydzIGxpbmsgdG8gbWF0Y2ggdGhlIGFjdGl2ZSBzdGF0ZQ0KICAgIC8vIChtYXRjaGVzIHRoZSByZWZlcmVuY2U6IGxhYmVsIHR1cm5zIHJlZC9vcmFuZ2Ugd2hpbGUgZXhwYW5kZWQpLg0KICAgIG5hdlBhbmVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5wYW5lbC10b2dnbGUnKS5mb3JFYWNoKGJ0biA9PiB7DQogICAgICBidG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4gew0KICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpOw0KICAgICAgICBjb25zdCBpdGVtID0gYnRuLmNsb3Nlc3QoJy5wYW5lbC1pdGVtJyk7DQogICAgICAgIGlmICghaXRlbSkgcmV0dXJuOw0KICAgICAgICBjb25zdCBpc09wZW4gPSBpdGVtLmNsYXNzTGlzdC50b2dnbGUoJ3BhbmVsLW9wZW4nKTsNCiAgICAgICAgYnRuLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIFN0cmluZyhpc09wZW4pKTsNCiAgICAgICAgY29uc3Qgcm93TGluayA9IGl0ZW0ucXVlcnlTZWxlY3RvcignOnNjb3BlID4gLnBhbmVsLXJvdyA+IC5wYW5lbC1saW5rJyk7DQogICAgICAgIGlmIChyb3dMaW5rKSByb3dMaW5rLmNsYXNzTGlzdC50b2dnbGUoJ2lzLWFjdGl2ZScsIGlzT3Blbik7DQogICAgICB9KTsNCiAgICB9KTsNCiAgfQ0KDQogIGNvbnN0IGVjb21NZWdhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2llcmFyZUVjb21NZWdhJyk7DQogIGlmIChlY29tTWVnYSkgew0KICAgIGNvbnN0IHRyaWdnZXIgPSBlY29tTWVnYS5xdWVyeVNlbGVjdG9yKCcubmF2LW1lZ2EtdHJpZ2dlcicpOw0KICAgIGNvbnN0IGNhdHMgPSBlY29tTWVnYS5xdWVyeVNlbGVjdG9yQWxsKCcubmF2LW1lZ2EtY2F0Jyk7DQogICAgY29uc3QgbGlua3MgPSBlY29tTWVnYS5xdWVyeVNlbGVjdG9yQWxsKCcubmF2LW1lZ2EtbGluaycpOw0KICAgIGNvbnN0IGxpbmtzQ29sID0gZWNvbU1lZ2EucXVlcnlTZWxlY3RvcignLm5hdi1tZWdhLWxpbmtzJyk7DQogICAgbGV0IGNsb3NlVGltZXIgPSBudWxsOw0KDQogICAgZnVuY3Rpb24gb3Blbk1lZ2EoKXsNCiAgICAgIGlmIChjbG9zZVRpbWVyKSB7IGNsZWFyVGltZW91dChjbG9zZVRpbWVyKTsgY2xvc2VUaW1lciA9IG51bGw7IH0NCiAgICAgIGVjb21NZWdhLmNsYXNzTGlzdC5hZGQoJ29wZW4nKTsNCiAgICAgIHRyaWdnZXIuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ3RydWUnKTsNCiAgICB9DQogICAgZnVuY3Rpb24gY2xvc2VNZWdhKCl7DQogICAgICBlY29tTWVnYS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7DQogICAgICB0cmlnZ2VyLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpOw0KICAgIH0NCiAgICBmdW5jdGlvbiBzY2hlZHVsZUNsb3NlKCl7DQogICAgICBpZiAoY2xvc2VUaW1lcikgY2xlYXJUaW1lb3V0KGNsb3NlVGltZXIpOw0KICAgICAgY2xvc2VUaW1lciA9IHNldFRpbWVvdXQoY2xvc2VNZWdhLCAxODApOw0KICAgIH0NCiAgICBmdW5jdGlvbiBzZXRDYXQoY2F0KXsNCiAgICAgIGNhdHMuZm9yRWFjaChjID0+IGMuY2xhc3NMaXN0LnRvZ2dsZSgnYWN0aXZlJywgYy5kYXRhc2V0LmNhdCA9PT0gY2F0KSk7DQogICAgICBsZXQgYW55VmlzaWJsZSA9IGZhbHNlOw0KICAgICAgbGlua3MuZm9yRWFjaChhID0+IHsNCiAgICAgICAgY29uc3Qgc2hvdyA9IGEuZGF0YXNldC5jYXQgPT09IGNhdDsNCiAgICAgICAgYS5oaWRkZW4gPSAhc2hvdzsNCiAgICAgICAgaWYgKHNob3cpIGFueVZpc2libGUgPSB0cnVlOw0KICAgICAgfSk7DQogICAgICAvLyBXaG9sZSByaWdodC1oYW5kIGNvbHVtbiBmYWRlcyBpbi9vdXQgYXMgb25lIHVuaXQgKHJhdGhlciB0aGFuIGVhY2gNCiAgICAgIC8vIGxpbmsgZmFkaW5nIGluZGl2aWR1YWxseSkg4oCUIG1hdGNoZXMgdGhlIHJlZmVyZW5jZTogdGhlIGNvbHVtbiBpcw0KICAgICAgLy8gZW1wdHkgZm9yIFNob3BpZnkvTGF1bmNoL0ZCQSBhbmQgb25seSBhcHBlYXJzIGZvciBBbWF6b24gU2VydmljZXMuDQogICAgICBpZiAobGlua3NDb2wpIGxpbmtzQ29sLmNsYXNzTGlzdC50b2dnbGUoJ2lzLWVtcHR5JywgIWFueVZpc2libGUpOw0KICAgIH0NCg0KICAgIGNhdHMuZm9yRWFjaChjYXQgPT4gew0KICAgICAgY2F0LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCAoKSA9PiBzZXRDYXQoY2F0LmRhdGFzZXQuY2F0KSk7DQogICAgICBjYXQuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXMnLCAoKSA9PiBzZXRDYXQoY2F0LmRhdGFzZXQuY2F0KSk7DQogICAgfSk7DQogICAgY29uc3QgaW5pdGlhbENhdCA9IGVjb21NZWdhLnF1ZXJ5U2VsZWN0b3IoJy5uYXYtbWVnYS1jYXQuYWN0aXZlJyk7DQogICAgaWYgKGluaXRpYWxDYXQpIHNldENhdChpbml0aWFsQ2F0LmRhdGFzZXQuY2F0KTsNCg0KICAgIGVjb21NZWdhLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCBvcGVuTWVnYSk7DQogICAgZWNvbU1lZ2EuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VsZWF2ZScsIHNjaGVkdWxlQ2xvc2UpOw0KICAgIGVjb21NZWdhLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLCBvcGVuTWVnYSk7DQogICAgZWNvbU1lZ2EuYWRkRXZlbnRMaXN0ZW5lcignZm9jdXNvdXQnLCAoZSkgPT4gew0KICAgICAgaWYgKCFlY29tTWVnYS5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpKSBjbG9zZU1lZ2EoKTsNCiAgICB9KTsNCiAgICAvLyBUaGUgdHJpZ2dlciBpcyBub3cgYSByZWFsIGxpbmsgdG8gaXRzIGNhdGVnb3J5IHBhZ2Ug4oCUIGhvdmVyaW5nIHN0aWxsDQogICAgLy8gb3BlbnMgdGhlIHByZXZpZXcgcGFuZWwsIGJ1dCBhIGNsaWNrIG5hdmlnYXRlcyBub3JtYWxseSBpbnN0ZWFkIG9mDQogICAgLy8gdG9nZ2xpbmcsIHNvIG5vIGNsaWNrIGhhbmRsZXIgLyBwcmV2ZW50RGVmYXVsdCBoZXJlLg0KICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKGUpID0+IHsNCiAgICAgIGlmIChlY29tTWVnYS5jbGFzc0xpc3QuY29udGFpbnMoJ29wZW4nKSAmJiAhZWNvbU1lZ2EuY29udGFpbnMoZS50YXJnZXQpKSBjbG9zZU1lZ2EoKTsNCiAgICB9KTsNCiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGUpID0+IHsgaWYgKGUua2V5ID09PSAnRXNjYXBlJykgY2xvc2VNZWdhKCk7IH0pOw0KICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBjbG9zZU1lZ2EpOw0KICB9DQoNCiAgWydpZXJhcmVNYXJrZXRpbmdEcm9wZG93bicsICdpZXJhcmVSZXNvdXJjZXNEcm9wZG93bicsICdpZXJhcmVBYm91dERyb3Bkb3duJ10uZm9yRWFjaChpZCA9PiB7DQogICAgY29uc3Qgd3JhcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsNCiAgICBpZiAoIXdyYXApIHJldHVybjsNCiAgICBjb25zdCB0cmlnZ2VyID0gd3JhcC5xdWVyeVNlbGVjdG9yKCcubmF2LW1lZ2EtdHJpZ2dlcicpOw0KICAgIGxldCBjbG9zZVRpbWVyID0gbnVsbDsNCg0KICAgIGZ1bmN0aW9uIG9wZW4oKXsNCiAgICAgIGlmIChjbG9zZVRpbWVyKSB7IGNsZWFyVGltZW91dChjbG9zZVRpbWVyKTsgY2xvc2VUaW1lciA9IG51bGw7IH0NCiAgICAgIHdyYXAuY2xhc3NMaXN0LmFkZCgnb3BlbicpOw0KICAgICAgdHJpZ2dlci5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAndHJ1ZScpOw0KICAgIH0NCiAgICBmdW5jdGlvbiBjbG9zZSgpew0KICAgICAgd3JhcC5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7DQogICAgICB0cmlnZ2VyLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpOw0KICAgIH0NCiAgICBmdW5jdGlvbiBzY2hlZHVsZUNsb3NlKCl7DQogICAgICBpZiAoY2xvc2VUaW1lcikgY2xlYXJUaW1lb3V0KGNsb3NlVGltZXIpOw0KICAgICAgY2xvc2VUaW1lciA9IHNldFRpbWVvdXQoY2xvc2UsIDE4MCk7DQogICAgfQ0KDQogICAgd3JhcC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgb3Blbik7DQogICAgd3JhcC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgc2NoZWR1bGVDbG9zZSk7DQogICAgd3JhcC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgb3Blbik7DQogICAgd3JhcC5hZGRFdmVudExpc3RlbmVyKCdmb2N1c291dCcsIChlKSA9PiB7DQogICAgICBpZiAoIXdyYXAuY29udGFpbnMoZS5yZWxhdGVkVGFyZ2V0KSkgY2xvc2UoKTsNCiAgICB9KTsNCiAgICAvLyBUcmlnZ2VyIGlzIG5vdyBhIHJlYWwgbGluayB0byBpdHMgY2F0ZWdvcnkgcGFnZSDigJQgaG92ZXJpbmcgc3RpbGwNCiAgICAvLyBvcGVucyB0aGUgcHJldmlldyBwYW5lbCwgY2xpY2sgbmF2aWdhdGVzIG5vcm1hbGx5IGluc3RlYWQgb2YgdG9nZ2xpbmcuDQogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4gew0KICAgICAgaWYgKHdyYXAuY2xhc3NMaXN0LmNvbnRhaW5zKCdvcGVuJykgJiYgIXdyYXAuY29udGFpbnMoZS50YXJnZXQpKSBjbG9zZSgpOw0KICAgIH0pOw0KICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCAoZSkgPT4geyBpZiAoZS5rZXkgPT09ICdFc2NhcGUnKSBjbG9zZSgpOyB9KTsNCiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgY2xvc2UpOw0KICB9KTsNCg0KICBjb25zdCBmb290ZXJUb3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWVyYXJlRm9vdGVyVG9wJyk7DQogIGlmIChmb290ZXJUb3ApIHsNCiAgICBmb290ZXJUb3AuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoZSkgPT4gew0KICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOw0KICAgICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiAwLCBiZWhhdmlvcjogJ3Ntb290aCcgfSk7DQogICAgfSk7DQogIH0NCiAgY29uc3QgbmV3c0Zvcm0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWVyYXJlTmV3c0Zvcm0nKTsNCiAgaWYgKG5ld3NGb3JtKSB7DQogICAgbmV3c0Zvcm0uYWRkRXZlbnRMaXN0ZW5lcignc3VibWl0JywgKGUpID0+IHsNCiAgICAgIGUucHJldmVudERlZmF1bHQoKTsNCiAgICAgIGNvbnN0IGlucHV0ID0gbmV3c0Zvcm0ucXVlcnlTZWxlY3RvcignaW5wdXQnKTsNCiAgICAgIGNvbnN0IGVtYWlsID0gKGlucHV0LnZhbHVlIHx8ICcnKS50cmltKCk7DQogICAgICBjb25zdCBvayA9IC9eW15cc0BdK0BbXlxzQF0rXC5bXlxzQF0rJC8udGVzdChlbWFpbCk7DQogICAgICBuZXdzRm9ybS5jbGFzc0xpc3QudG9nZ2xlKCdpcy1lcnJvcicsICFvayk7DQogICAgICBpZiAoIW9rKSB7IGlucHV0LmZvY3VzKCk7IHJldHVybjsgfQ0KICAgICAgY29uc3Qgc3ViamVjdCA9IGVuY29kZVVSSUNvbXBvbmVudCgnTmV3c2xldHRlciBzaWdudXAnKTsNCiAgICAgIGNvbnN0IGJvZHkgPSBlbmNvZGVVUklDb21wb25lbnQoJ1BsZWFzZSBhZGQgJyArIGVtYWlsICsgJyB0byB0aGUgSS5FLlJBUkUgbmV3c2xldHRlci4nKTsNCiAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gJ21haWx0bzppbmZvQGllcmFyZS5jb20\/c3ViamVjdD0nICsgc3ViamVjdCArICcmYm9keT0nICsgYm9keTsNCiAgICB9KTsNCiAgICBuZXdzRm9ybS5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4gbmV3c0Zvcm0uY2xhc3NMaXN0LnJlbW92ZSgnaXMtZXJyb3InKSk7DQogIH0NCg0KICBjb25zdCBiYWNrVG9Ub3AgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnaWVyYXJlQmFja1RvVG9wJyk7DQogIGlmIChiYWNrVG9Ub3ApIHsNCiAgICBjb25zdCB0b2dnbGVCYWNrVG9Ub3AgPSAoKSA9PiB7DQogICAgICBiYWNrVG9Ub3AuY2xhc3NMaXN0LnRvZ2dsZSgndmlzaWJsZScsIHdpbmRvdy5zY3JvbGxZID4gNDAwKTsNCiAgICB9Ow0KICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0b2dnbGVCYWNrVG9Ub3AsIHtwYXNzaXZlOnRydWV9KTsNCiAgICB0b2dnbGVCYWNrVG9Ub3AoKTsNCiAgICBiYWNrVG9Ub3AuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7DQogICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IDAsIGJlaGF2aW9yOiAnc21vb3RoJyB9KTsNCiAgICB9KTsNCiAgfQ0KDQogIHJlbmRlckFsbCgpOw0KfSkoKTs=<\/script>\r\n<script>\r\n(function(){\r\n  var payloadEl = document.getElementById('ierare-js-payload');\r\n  if (!payloadEl) return;\r\n  var code = atob(payloadEl.textContent.trim());\r\n  var s = document.createElement('script');\r\n  s.textContent = code;\r\n  document.body.appendChild(s);\r\n})();\r\n<\/script>\r\n        \n\n\n\n<p class=\"has-background wp-block-paragraph\" style=\"background-color:#f6feff\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-39","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/portfolio.ierare.com\/index.php?rest_route=\/wp\/v2\/pages\/39","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/portfolio.ierare.com\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/portfolio.ierare.com\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/portfolio.ierare.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/portfolio.ierare.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=39"}],"version-history":[{"count":5,"href":"https:\/\/portfolio.ierare.com\/index.php?rest_route=\/wp\/v2\/pages\/39\/revisions"}],"predecessor-version":[{"id":156,"href":"https:\/\/portfolio.ierare.com\/index.php?rest_route=\/wp\/v2\/pages\/39\/revisions\/156"}],"wp:attachment":[{"href":"https:\/\/portfolio.ierare.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=39"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}