{"id":393388,"date":"2026-08-12T17:26:30","date_gmt":"2026-08-12T20:26:30","guid":{"rendered":"https:\/\/mkt.estrategia.com\/med\/ato-final-revalida\/acessar\/"},"modified":"2026-09-05T20:04:09","modified_gmt":"2026-09-05T23:04:09","slug":"acessar","status":"publish","type":"page","link":"https:\/\/mkt.estrategia.com\/med\/ato-final-revalida\/acessar\/","title":{"rendered":"Acessar \u00b7 Ato Final Revalida"},"content":{"rendered":"\n<style id=\"lp-divi-reset\">#main-header,#main-footer,#footer-info,#et-secondary-nav,header.et-l,.et_pb_section_0_tb_header,#wpadminbar,#top-header,#et-top-navigation,#et-secondary-menu,#footer-widgets,#footer-bottom,#et-main-area > footer,.mobile_nav,.mobile_menu_bar,#et_mobile_nav_menu,#et-info,.main_title,.post-meta,.et_post_meta_wrapper,.nav_container,.et_search_outer{display:none !important}html,body{margin:0 !important;padding:0 !important;overflow-x:hidden !important;overflow-y:auto !important;scroll-behavior:auto !important;-webkit-overflow-scrolling:touch !important;height:auto !important;background:#030a09 !important}.et_smooth_scroll_disabled #page-container,.et_smooth_scroll_disabled,#page-container,#et-main-area,#et-boc{overflow:visible !important;height:auto !important}#page-container{background:#030a09 !important}#page-container,#et-main-area,#primary-content,#main-content,#main-content > .container,#content-area,#left-area,article.type-page,.entry-content,.et_pb_section,.et_pb_row,.et_pb_column,.et_pb_text,.et_pb_text_inner,.et_pb_module{width:100% !important;max-width:none !important;margin:0 !important;padding:0 !important;float:none !important;background:transparent !important;box-shadow:none !important}#content-area.clearfix,#main-content > .container.clearfix{display:block !important}.entry-content > p:empty{display:none !important}.entry-content > p{margin:0 !important;padding:0 !important}.entry-content > br{display:none !important}#page-container .container::before,#page-container .container::after,.entry-content .container::before,.entry-content .container::after,#left-area .container::before,#left-area .container::after,article.type-page .container::before,article.type-page .container::after{display:none !important;content:none !important;background:transparent !important;width:0 !important;height:0 !important}<\/style>\n<link rel=\"preconnect\" href=\"https:\/\/fonts.googleapis.com\">\n<link rel=\"preconnect\" href=\"https:\/\/fonts.gstatic.com\" crossorigin>\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@400;600;700;800&#038;family=Figtree:wght@400;500;600;700;800&#038;display=swap\" rel=\"stylesheet\">\n<style id=\"af-css\">:root{--bg:#0A1220;--bg-2:#0E1930;--bg-3:#131F3A;--ink:#F4F0E6;--ink-dim:#B8C0D0;--ink-mute:#7C8698;--amber:#F2B04A;--amber-strong:#E89A1F;--amber-soft:rgba(242,176,74,.12);--green:#4CC38A;--red:#E5675C;--blue:#2F7FC0;--line:rgba(244,240,230,.09);--card:#101B33;--card-2:#0C1526;--radius:16px;--radius-sm:10px;--shadow:0 18px 50px rgba(2,6,16,.55);--font:'Poppins',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}*{margin:0;padding:0;box-sizing:border-box}html{scroll-behavior:smooth}body{font-family:var(--font);background:var(--bg);color:var(--ink);line-height:1.6;overflow-x:hidden;-webkit-font-smoothing:antialiased}img{max-width:100%;display:block}a{color:inherit;text-decoration:none}button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit}input,select,textarea{font-family:inherit;font-size:16px}::selection{background:var(--amber);color:#0A1220}.stage-bg{position:fixed;top:0;right:0;bottom:0;left:0;z-index:-2;background:radial-gradient(1200px 600px at 78% -10%,rgba(242,176,74,.10),transparent 60%),radial-gradient(900px 500px at 12% 8%,rgba(47,127,192,.10),transparent 55%),radial-gradient(1000px 800px at 50% 115%,rgba(242,176,74,.06),transparent 60%),var(--bg)}.stage-bg::after{content:\"\";position:absolute;top:0;right:0;bottom:0;left:0;opacity:.35;background-image:linear-gradient(rgba(244,240,230,.025) 1px,transparent 1px),linear-gradient(90deg,rgba(244,240,230,.025) 1px,transparent 1px);background-size:56px 56px;mask-image:radial-gradient(ellipse 90% 70% at 50% 0%,#000 30%,transparent 75%)}h1,h2,h3{line-height:1.15;font-weight:800;letter-spacing:-.02em}.kicker{font-size:11px;font-weight:700;letter-spacing:.22em;text-transform:uppercase;color:var(--amber);display:flex;align-items:center;gap:10px}.kicker.center{justify-content:center}.wrap{width:min(1120px,92%);margin:0 auto}.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;font-weight:700;font-size:15px;padding:16px 30px;border-radius:999px;transition:transform .18s ease,box-shadow .18s ease,background .18s ease;white-space:nowrap}.btn-amber{background:linear-gradient(180deg,var(--amber),var(--amber-strong));color:#20150A;box-shadow:0 10px 30px rgba(242,176,74,.28)}.btn-amber:hover{transform:translateY(-2px);box-shadow:0 16px 40px rgba(242,176,74,.4)}.btn-ghost{border:1px solid var(--line);color:var(--ink-dim)}.btn-ghost:hover{border-color:var(--amber);color:var(--amber)}.btn-sm{padding:10px 20px;font-size:13.5px}.btn[disabled]{opacity:.45;cursor:not-allowed;transform:none!important}.card{background:linear-gradient(180deg,var(--card),var(--card-2));border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.pill{display:inline-flex;align-items:center;gap:8px;padding:7px 16px;border-radius:999px;border:1px solid var(--line);background:rgba(16,27,51,.7);font-size:12.5px;font-weight:600;color:var(--ink-dim)}.pill .dot{width:7px;height:7px;border-radius:50%;background:var(--green);box-shadow:0 0 10px var(--green);animation:pulse 2s infinite}@keyframes pulse{50%{opacity:.4}}.topbar{position:sticky;top:0;z-index:50;backdrop-filter:blur(14px);background:rgba(10,18,32,.82);border-bottom:1px solid var(--line)}.topbar .wrap{display:flex;align-items:center;justify-content:space-between;padding:14px 0}.brand{display:flex;flex-direction:column;align-items:flex-start;gap:7px}.brand-logo{height:30px;width:auto;display:block}.brand b{font-size:15px;letter-spacing:.01em}.brand small{display:block;font-size:9.5px;letter-spacing:.26em;color:var(--amber);font-weight:700;text-transform:uppercase}.hero{position:relative;padding:84px 0 70px;text-align:center}.hero::before{content:\"\";position:absolute;left:50%;top:-40px;transform:translateX(-50%);width:640px;height:520px;background:radial-gradient(closest-side,rgba(242,176,74,.16),transparent);pointer-events:none;filter:blur(4px)}.hero .pill{margin-bottom:26px}.hero h1{font-size:clamp(34px,5.4vw,60px);max-width:900px;margin:0 auto 8px}.hero h1 .glow{color:var(--amber);text-shadow:0 0 42px rgba(242,176,74,.45)}.hero .sub{font-size:clamp(16px,2vw,19px);color:var(--ink-dim);max-width:680px;margin:18px auto 34px}.hero-ctas{display:flex;gap:14px;justify-content:center;flex-wrap:wrap;margin-bottom:44px}.prova-switch{display:inline-flex;background:var(--card-2);border:1px solid var(--line);border-radius:999px;padding:5px;gap:4px;margin-bottom:30px}.prova-switch button{padding:10px 26px;border-radius:999px;font-weight:700;font-size:14px;color:var(--ink-mute);transition:.2s}.prova-switch button.on{background:var(--amber);color:#20150A}.count{display:flex;gap:14px;justify-content:center;flex-wrap:wrap}.count .unit{min-width:86px;padding:16px 10px;border-radius:var(--radius-sm);background:linear-gradient(180deg,var(--card),var(--card-2));border:1px solid var(--line)}.count .n{font-size:34px;font-weight:800;color:var(--amber);font-variant-numeric:tabular-nums;line-height:1}.count .l{font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-mute);margin-top:8px}.count-label{margin-top:14px;font-size:13px;color:var(--ink-mute)}.bancas{border-block:1px solid var(--line);padding:18px 0;background:rgba(12,21,38,.5)}.bancas .wrap{display:flex;gap:34px;justify-content:center;flex-wrap:wrap;font-size:13px;font-weight:700;letter-spacing:.1em;color:var(--ink-mute);text-transform:uppercase}.ato{padding:96px 0;position:relative}.ato-head{max-width:720px;margin-bottom:52px}.ato-head.center{margin-inline:auto;text-align:center}.ato-num{font-size:88px;font-weight:800;color:transparent;-webkit-text-stroke:1.5px rgba(242,176,74,.28);line-height:1;position:absolute;top:64px;right:4%;user-select:none;pointer-events:none}.ato h2{font-size:clamp(26px,3.6vw,40px);margin-top:16px}.ato h2 em{font-style:normal;color:var(--amber)}.ato .lead{color:var(--ink-dim);margin-top:14px;font-size:16.5px}.eventos{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px}.evento{padding:26px 22px;border-radius:var(--radius);border:1px solid var(--line);background:linear-gradient(180deg,var(--card),var(--card-2));transition:.25s;position:relative;overflow:hidden}.evento:hover{transform:translateY(-4px);border-color:rgba(242,176,74,.4)}.evento .ic{width:44px;height:44px;border-radius:12px;background:var(--amber-soft);color:var(--amber);display:grid;place-items:center;margin-bottom:16px}.evento h3{font-size:16.5px;margin-bottom:8px}.evento p{font-size:13.5px;color:var(--ink-dim)}.evento .tagpts{position:absolute;top:16px;right:16px;font-size:10.5px;font-weight:800;color:var(--amber);letter-spacing:.08em}.score-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:18px;margin-top:10px}.score-card{padding:30px 26px;border-radius:var(--radius);border:1px solid var(--line);background:linear-gradient(180deg,var(--card),var(--card-2));position:relative;overflow:hidden}.score-card::after{content:\"\";position:absolute;top:auto;right:0;bottom:0;left:0;height:3px;background:linear-gradient(90deg,var(--amber),transparent)}.score-card .big{font-size:44px;font-weight:800;color:var(--amber);line-height:1}.score-card .big small{font-size:16px;color:var(--ink-mute);font-weight:600}.score-card h3{font-size:17px;margin:10px 0 8px}.score-card p{font-size:13.5px;color:var(--ink-dim)}.mec-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:14px;margin-top:34px}.mec{display:flex;gap:14px;align-items:flex-start;padding:18px;border-radius:var(--radius-sm);background:rgba(16,27,51,.5);border:1px solid var(--line);font-size:13.5px;color:var(--ink-dim)}.mec svg{flex:none;color:var(--amber);margin-top:2px}.mec b{color:var(--ink)}.premios{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:16px;margin-top:34px}.premio{text-align:center;padding:28px 20px;border-radius:var(--radius);border:1px solid rgba(242,176,74,.25);background:linear-gradient(180deg,rgba(242,176,74,.08),transparent 70%),linear-gradient(180deg,var(--card),var(--card-2))}.premio .pos{font-size:11px;font-weight:800;letter-spacing:.2em;color:var(--amber);text-transform:uppercase}.premio .what{font-size:21px;font-weight:800;margin-top:8px}.premio-note{margin-top:14px;font-size:12px;color:var(--ink-mute);text-align:center}.cal-tabs{display:flex;gap:8px;margin-bottom:26px;flex-wrap:wrap}.cal-tabs button{padding:11px 26px;border-radius:999px;border:1px solid var(--line);font-weight:700;font-size:14px;color:var(--ink-mute);transition:.2s}.cal-tabs button.on{background:var(--amber);border-color:var(--amber);color:#20150A}.semana-label{font-size:12px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute);margin:30px 0 12px}.aula-row{display:flex;align-items:center;gap:18px;padding:15px 20px;border-radius:var(--radius-sm);border:1px solid var(--line);background:rgba(16,27,51,.45);margin-bottom:8px;transition:.2s}.aula-row:hover{border-color:rgba(242,176,74,.35);background:rgba(16,27,51,.8)}.aula-row .data{flex:none;width:64px;text-align:center;font-weight:800;color:var(--amber);font-size:15px;line-height:1.2}.aula-row .data small{display:block;font-size:10px;letter-spacing:.14em;color:var(--ink-mute);font-weight:700}.aula-row .titulo{flex:1;font-weight:600;font-size:14.5px}.aula-row .hora{flex:none;font-size:12.5px;color:var(--ink-mute);font-variant-numeric:tabular-nums}.aula-row .tipo{flex:none;font-size:10px;font-weight:800;letter-spacing:.1em;padding:5px 12px;border-radius:999px;text-transform:uppercase}.tipo-marco{background:var(--amber-soft);color:var(--amber)}.tipo-aula{background:rgba(47,127,192,.14);color:#7FB4DE}.tipo-prova{background:rgba(76,195,138,.14);color:var(--green)}.regras{padding:30px 34px;margin-top:34px}.regras ol{counter-reset:r;list-style:none;display:grid;gap:13px}.regras li{position:relative;padding-left:40px;font-size:14px;color:var(--ink-dim);line-height:1.55}.regras li b{color:var(--ink)}.regras li::before{counter-increment:r;content:counter(r);position:absolute;left:0;top:1px;width:26px;height:26px;border-radius:50%;background:var(--amber-soft);color:var(--amber);font-weight:800;font-size:12px;display:grid;place-items:center}.tl-card{padding:16px 34px 22px;margin-bottom:26px}.tl-nota{border-top:1px solid var(--line);margin-top:6px;padding-top:18px;font-size:13.5px;color:var(--amber);font-weight:600}.painel-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(148px,1fr));gap:10px}.painel-item{padding:16px 12px;border:1px solid var(--line);border-radius:12px;background:rgba(16,27,51,.5);text-align:center;transition:.2s}.painel-item:hover{border-color:rgba(242,176,74,.4)}.painel-item b{display:block;font-size:13.5px;margin-bottom:4px}.painel-item span{font-size:11.5px;color:var(--ink-mute);line-height:1.4;display:block}.painel-nota{text-align:center;font-size:13px;color:var(--ink-dim);margin-top:16px}.prof-strip{margin-top:38px;padding-top:30px;border-top:1px solid var(--line)}.prof-strip>p{color:var(--ink-dim);font-size:14px;margin-top:12px}.prof-chips{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}.prof-chips span{padding:8px 16px;border:1px solid var(--line);border-radius:999px;font-size:12.5px;font-weight:600;color:var(--ink-dim)}.prof-nota{font-size:12.5px;color:var(--ink-mute);margin-top:16px}.field .hint{font-size:11.5px;color:var(--ink-mute);margin-top:6px;line-height:1.5}.onboard{padding:26px 30px;margin-bottom:26px;border-color:rgba(242,176,74,.4)}.onboard .ob-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px;margin:16px 0 18px}.onboard .ob-item{padding:14px 16px;border:1px solid var(--line);border-radius:12px;background:rgba(10,18,32,.5);font-size:13px;color:var(--ink-dim)}.onboard .ob-item b{display:block;color:var(--ink);margin-bottom:4px;font-size:13.5px}.onboard .ob-item .n{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:50%;background:var(--amber-soft);color:var(--amber);font-weight:800;font-size:11px;margin-bottom:8px}.onboard .ob-acts{display:flex;gap:12px;flex-wrap:wrap;align-items:center}.onboard-rec{padding:0;overflow:hidden;border-color:var(--line)}.onboard-rec summary{cursor:pointer;list-style:none;padding:15px 30px;font-size:12px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--amber);transition:color .16s}.onboard-rec summary::-webkit-details-marker{display:none}.onboard-rec summary::before{content:'\u25b8';display:inline-block;width:14px}.onboard-rec[open] summary::before{content:'\u25be'}.onboard-rec summary:hover{color:var(--ink)}.onboard-rec .ob-grid{margin:6px 30px 18px}.onboard-rec .ob-acts{padding:0 30px 22px}.conf-passos{margin:22px 0}.conf-passos .passo h3{font-size:14.5px}.conf-passos .passo p{font-size:13px}.conf-passos .passo .btn{margin-top:10px}.social-strip{display:flex;align-items:baseline;gap:18px;flex-wrap:wrap;margin-bottom:36px}.social-strip .huge{font-size:clamp(56px,8vw,96px);font-weight:800;color:var(--amber);line-height:1;text-shadow:0 0 60px rgba(242,176,74,.3)}.social-strip p{font-size:17px;color:var(--ink-dim);max-width:380px}.aprovados{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px}.aprovado{padding:18px 20px;border-radius:var(--radius-sm);border:1px solid var(--line);background:rgba(16,27,51,.5);font-size:13px}.aprovado .lugar{font-size:10px;font-weight:800;letter-spacing:.16em;color:var(--amber);text-transform:uppercase}.aprovado b{display:block;margin:4px 0 2px;font-size:14px}.aprovado span{color:var(--ink-mute);font-size:12.5px}.faq{max-width:760px;margin:0 auto}.faq details{border:1px solid var(--line);border-radius:var(--radius-sm);background:rgba(16,27,51,.5);margin-bottom:10px;overflow:hidden}.faq summary{padding:18px 22px;font-weight:600;font-size:15px;cursor:pointer;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:14px}.faq summary::-webkit-details-marker{display:none}.faq summary::after{content:\"+\";font-size:22px;color:var(--amber);flex:none;transition:.2s}.faq details[open] summary::after{transform:rotate(45deg)}.faq .a{padding:0 22px 20px;color:var(--ink-dim);font-size:14px}.final-cta{text-align:center;padding:110px 0;position:relative}.final-cta::before{content:\"\";position:absolute;left:50%;bottom:0;transform:translateX(-50%);width:800px;height:420px;background:radial-gradient(closest-side,rgba(242,176,74,.14),transparent);pointer-events:none}.final-cta h2{font-size:clamp(28px,4.4vw,48px);max-width:760px;margin:0 auto 16px}.final-cta p{color:var(--ink-dim);margin-bottom:34px}footer{border-top:1px solid var(--line);padding:34px 0;font-size:12px;color:var(--ink-mute);text-align:center}.rv{opacity:0;transform:translateY(16px);transition:opacity .4s ease,transform .4s ease}.rv.in{opacity:1;transform:none}@media (prefers-reduced-motion:reduce){.rv{opacity:1;transform:none;transition:none}}.auth-wrap{min-height:100vh;display:grid;place-items:center;padding:60px 4%}.auth-card{width:min(560px,100%);padding:44px 40px;border-radius:20px;background:linear-gradient(180deg,var(--card),var(--card-2));border:1px solid var(--line);box-shadow:var(--shadow)}.auth-card h1{font-size:26px;margin:14px 0 6px}.auth-card .sub{font-size:14px;color:var(--ink-dim);margin-bottom:30px}.field{margin-bottom:18px}.field label{display:block;font-size:12.5px;font-weight:700;letter-spacing:.04em;color:var(--ink-dim);margin-bottom:8px}.field input,.field select{width:100%;padding:14px 16px;border-radius:12px;border:1px solid var(--line);background:rgba(10,18,32,.7);color:var(--ink);outline:none;transition:.2s}.field input:focus,.field select:focus{border-color:var(--amber);box-shadow:0 0 0 3px rgba(242,176,74,.15)}.field .err{display:none;font-size:12px;color:var(--red);margin-top:6px}.field.invalid input{border-color:var(--red)}.field.invalid .err{display:block}.radio-cards{display:grid;grid-template-columns:1fr 1fr;gap:10px}.radio-cards.three{grid-template-columns:repeat(3,1fr)}.radio-card{position:relative}.radio-card input{position:absolute;opacity:0;top:0;right:0;bottom:0;left:0;cursor:pointer}.radio-card .face{display:flex;align-items:center;justify-content:center;min-height:52px;height:100%;padding:10px 12px;border-radius:12px;border:1px solid var(--line);text-align:center;font-size:13.5px;font-weight:600;color:var(--ink-dim);transition:.2s;cursor:pointer}.radio-card input:checked + .face{border-color:var(--amber);background:var(--amber-soft);color:var(--amber)}.form-note{font-size:12px;color:var(--ink-mute);margin-top:16px;text-align:center}.auth-alt{text-align:center;margin-top:22px;font-size:13.5px;color:var(--ink-mute)}.auth-alt a{color:var(--amber);font-weight:600}.auth-erro{background:rgba(217,86,74,.1);border:1px solid rgba(217,86,74,.5);color:var(--red);font-size:13.5px;font-weight:600;padding:11px 14px;border-radius:12px;margin-bottom:14px;line-height:1.5}.auth-card.com-marca{padding:0;overflow:hidden}.auth-card.com-marca .auth-body{padding:30px 40px 38px}.auth-brand{position:relative;overflow:hidden;padding:28px 40px 24px;color:#fff;background:linear-gradient(135deg,#03565D 0%,#04737B 45%,#058C95 100%)}.auth-brand .ab-logo{height:26px;width:auto;display:block;margin-bottom:16px}.auth-brand .ab-mark{font-family:'Poppins',var(--font);font-weight:800;font-size:31px;line-height:1;letter-spacing:.015em;color:#fff}.auth-brand .ab-sub{font-size:11.5px;letter-spacing:.3em;font-weight:700;color:rgba(255,255,255,.82);margin-top:8px}.auth-fatos{display:flex;gap:8px;flex-wrap:wrap;margin:-14px 0 26px}.auth-fatos span{font-size:11.5px;font-weight:700;color:var(--amber);background:var(--amber-soft);padding:5px 11px;border-radius:99px;white-space:nowrap}@media (max-width:560px){.auth-card.com-marca .auth-body{padding:24px 22px 30px}.auth-brand{padding:22px 22px 20px}.auth-brand .ab-mark{font-size:26px}}.app{display:grid;grid-template-columns:250px 1fr;min-height:100vh}.sidebar{border-right:1px solid var(--line);background:rgba(12,21,38,.65);display:flex;flex-direction:column;padding:26px 18px;position:sticky;top:0;height:100vh}.sidebar .brand{margin-bottom:34px;padding:0 8px}.side-label{font-size:10px;font-weight:800;letter-spacing:.24em;color:var(--ink-mute);text-transform:uppercase;padding:0 12px;margin-bottom:10px}.nav-item{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:12px;font-size:14px;font-weight:600;color:var(--ink-dim);transition:.18s;margin-bottom:4px;width:100%;text-align:left}.nav-item svg{flex:none}.nav-item:hover{background:rgba(242,176,74,.07);color:var(--ink)}.nav-item.on{background:linear-gradient(180deg,var(--amber),var(--amber-strong));color:#20150A}.nav-item .badge{margin-left:auto;font-size:10px;font-weight:800;background:var(--amber-soft);color:var(--amber);padding:3px 9px;border-radius:8px;line-height:1.3;text-align:center}.nav-item.on .badge{background:rgba(32,21,10,.18);color:#20150A}.side-foot{margin-top:auto;border-top:1px solid var(--line);padding-top:18px}.jornada-bar{padding:0 8px;margin-bottom:16px}.jornada-bar .row{display:flex;justify-content:space-between;font-size:10.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-mute);margin-bottom:8px}.jornada-bar .row b{color:var(--amber)}.jornada-track{height:5px;border-radius:99px;background:rgba(244,240,230,.08);overflow:hidden}.jornada-fill{height:100%;border-radius:99px;background:linear-gradient(90deg,var(--amber),var(--amber-strong));transition:width .6s ease}.user-chip{display:flex;align-items:center;gap:10px;padding:8px}.user-chip .av{width:36px;height:36px;border-radius:50%;background:var(--amber-soft);color:var(--amber);display:grid;place-items:center;font-weight:800;font-size:13px;flex:none}.user-chip b{font-size:13px;display:block;line-height:1.3}.user-chip small{font-size:11px;color:var(--ink-mute)}.user-chip .out{margin-left:auto;color:var(--ink-mute);padding:6px;display:inline-flex;align-items:center}.user-chip .out+.out{margin-left:0}.user-chip .out:hover{color:var(--ink)}.user-chip #btnSair:hover{color:var(--red)}.main{padding:44px clamp(20px,4vw,56px);max-width:1160px;margin-left:auto;margin-right:auto;width:100%}.af-welcome{padding:0;overflow:hidden;margin-bottom:8px;display:grid;grid-template-columns:230px 1fr}.af-welcome .afw-media{position:relative;background:#0b1a1c;min-height:100%}.af-welcome .afw-media img{position:absolute;top:0;left:0;width:100%;height:100%;object-fit:cover;display:block}.af-welcome .afw-badge{position:absolute;left:12px;bottom:12px;background:var(--amber);color:#fff;font-weight:800;font-size:11.5px;letter-spacing:.02em;padding:5px 11px;border-radius:99px;box-shadow:0 6px 16px rgba(5,140,149,.35)}.af-welcome .afw-body{padding:20px 26px}.af-welcome .afw-body h3{font-size:18px;margin:0 0 6px;color:var(--ink)}.af-welcome .afw-body p{font-size:13.5px;color:var(--ink-dim);line-height:1.55;margin:0 0 14px}.af-welcome .afw-nota{font-size:12px;color:var(--ink-mute);margin-top:10px}@media (max-width:620px){.af-welcome{grid-template-columns:1fr}.af-welcome .afw-media{min-height:0;height:158px}.af-welcome .afw-body{padding:18px 20px 22px}}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;flex-wrap:wrap;margin-bottom:34px}.page-head h1{font-size:clamp(24px,3vw,32px);margin-top:8px}.page-head .desc{color:var(--ink-dim);font-size:14.5px;max-width:560px;margin-top:10px}.pts-chip{flex:none;display:inline-flex;align-items:center;gap:8px;padding:10px 18px;border-radius:999px;border:1px solid rgba(242,176,74,.35);background:var(--amber-soft);font-size:12.5px;font-weight:800;color:var(--amber);letter-spacing:.04em}.ofensiva-card{display:grid;grid-template-columns:auto 1fr auto;gap:30px;align-items:center;padding:30px 34px;margin-bottom:30px}.ofensiva-card .flame{text-align:center}.ofensiva-card .flame .n{font-size:56px;font-weight:800;color:var(--amber);line-height:1}.ofensiva-card .flame .l{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-mute);font-weight:700}.ofensiva-card h3{font-size:12px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-mute);margin-bottom:8px}.ofensiva-card .msg{font-size:14.5px;color:var(--ink-dim)}.progress{height:7px;border-radius:99px;background:rgba(244,240,230,.08);overflow:hidden;margin-top:14px}.progress .fill{height:100%;border-radius:99px;background:linear-gradient(90deg,var(--amber),var(--amber-strong));transition:width .6s ease}.progress-note{font-size:12px;color:var(--ink-mute);margin-top:8px}.rank-pts{text-align:right}.rank-pts .n{font-size:38px;font-weight:800;color:var(--amber);line-height:1}.rank-pts .n small{font-size:15px;color:var(--ink-mute);font-weight:600}.rank-pts .l{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-mute);font-weight:700}.checkin-grid{display:grid;grid-template-columns:330px 1fr;gap:18px;align-items:start}.cal-card{padding:22px 20px}.cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.cal-head b{font-size:15px}.cal-nav{width:34px;height:34px;border-radius:50%;border:1px solid var(--line);display:grid;place-items:center;color:var(--ink-dim);transition:.15s}.cal-nav:hover{border-color:var(--amber);color:var(--amber)}.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;text-align:center}.cal-dow{font-size:9px;font-weight:800;letter-spacing:.12em;color:var(--ink-mute);padding:7px 0;text-transform:uppercase}.cal-day{position:relative;aspect-ratio:1;display:grid;place-items:center;font-size:13px;font-weight:600;border-radius:10px;color:var(--ink-mute);border:1px solid transparent}.cal-day.has{color:var(--ink);background:rgba(16,27,51,.65);border-color:var(--line);cursor:pointer;transition:.15s}.cal-day.has:hover{border-color:rgba(242,176,74,.5)}.cal-day.today{border-color:var(--amber)}.cal-day.sel{background:var(--amber);border-color:var(--amber);color:#20150A}.cal-day .dot{position:absolute;bottom:4px;left:50%;transform:translateX(-50%);width:5px;height:5px;border-radius:50%}.cal-day.sel .dot{background:#20150A}.dot-ok{background:var(--green)}.dot-miss{background:var(--red)}.dot-next{background:rgba(244,240,230,.35)}.cal-legend{display:flex;gap:13px;justify-content:center;margin-top:14px;padding-top:12px;border-top:1px solid var(--line);font-size:11px;color:var(--ink-mute);flex-wrap:wrap}.cal-legend i{width:7px;height:7px;border-radius:50%;display:inline-block;margin-right:5px}.cal-legend .hoje-i{width:9px;height:9px;background:transparent;border:1.5px solid var(--amber)}.day-panel{display:grid;grid-template-columns:repeat(auto-fit,minmax(290px,1fr));gap:16px}.day-empty{padding:24px 26px;border-radius:var(--radius);border:1px solid var(--line);background:rgba(16,27,51,.5);color:var(--ink-dim);font-size:14px}.ev-card{overflow:hidden;display:flex;flex-direction:column;padding:0}.ev-thumb{position:relative;aspect-ratio:16\/9;overflow:hidden;background:radial-gradient(120% 160% at 80% -20%,rgba(242,176,74,.35),transparent 55%),linear-gradient(135deg,#16234233,#0C1526),var(--bg-3)}.ev-thumb img{width:100%;height:100%;object-fit:cover;display:block}.ev-thumb::after{content:\"\";position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(180deg,transparent 40%,rgba(10,18,32,.72))}.ev-thumb .fall{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;color:rgba(242,176,74,.5)}.ev-badge{position:absolute;left:14px;bottom:12px;z-index:2;display:inline-flex;gap:8px;align-items:center;background:rgba(10,18,32,.88);border:1px solid rgba(244,240,230,.14);padding:7px 15px;border-radius:999px;font-size:10px;font-weight:800;letter-spacing:.14em;color:var(--ink);text-transform:uppercase}.ev-badge svg{color:var(--amber)}.ev-body{padding:20px 22px 22px;display:flex;flex-direction:column;gap:11px;flex:1}.ev-when{font-size:10.5px;letter-spacing:.16em;font-weight:800;color:var(--ink-mute);text-transform:uppercase}.ev-body h3{font-size:16px;line-height:1.3}.ev-cta{align-self:flex-start}.ev-ctas{display:flex;flex-wrap:wrap;gap:10px;align-items:center}.ev-cta-off{opacity:.45;cursor:default;pointer-events:none}.aulas-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(330px,1fr));gap:18px;margin-bottom:8px}.ev-card.ev-today{border-color:var(--amber);box-shadow:0 0 0 1px var(--amber)}.ev-badge-hoje{left:auto;right:12px;background:var(--amber);color:#0A1220}.mrow .t .sub{color:var(--ink-mute);font-weight:400;font-size:12.5px}.mrow .acts{display:flex;gap:8px;flex:none}.btn-ico{width:34px;height:34px;flex:none;border:1px solid var(--line);border-radius:9px;display:inline-flex;align-items:center;justify-content:center;color:var(--ink-dim);transition:.18s}.btn-ico:hover{border-color:var(--amber);color:var(--amber)}.btn-ico.off{opacity:.4;pointer-events:none}.mrow.hoje{border-color:rgba(242,176,74,.55)}.row-form{border:1px solid var(--line);border-top:none;border-radius:0 0 14px 14px;padding:14px 18px;margin:-10px 0 12px;background:rgba(12,21,38,.55)}.cal-big .cal-grid{gap:6px}.cal-day.big{aspect-ratio:auto;min-height:66px;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:2px;padding:9px 4px 14px;border-radius:10px}.cal-day.big .n{font-weight:700;line-height:1}.cal-day.big .lbl{font-size:8.5px;line-height:1.15;color:var(--ink-dim);font-weight:600}.cal-day.big.sel .lbl{color:#20150A}.trilha{position:relative;padding-left:24px;margin-bottom:10px}.trilha::before{content:\"\";position:absolute;left:6px;top:12px;bottom:12px;width:2px;background:var(--line)}.tr-item{position:relative;margin-bottom:12px}.tr-dot{position:absolute;left:-23px;top:24px;width:12px;height:12px;border-radius:50%;background:var(--ink-mute);border:2px solid var(--bg)}.tr-item.ok .tr-dot{background:var(--green)}.tr-item.miss .tr-dot{background:var(--red)}.tr-item.now .tr-dot{background:var(--amber);box-shadow:0 0 14px rgba(242,176,74,.8)}.tr-card{display:flex;gap:16px;padding:14px 16px;border:1px solid var(--line);border-radius:14px;background:rgba(16,27,51,.5)}.tr-item.now .tr-card{border-color:rgba(242,176,74,.55);background:linear-gradient(180deg,var(--card),var(--card-2))}.tr-item.ok .tr-card{opacity:.72}.tr-item.ok .tr-card:hover{opacity:1}.tr-data{flex:none;width:56px;text-align:center;font-weight:800;color:var(--amber);font-size:24px;line-height:1;padding-top:4px}.tr-data small{display:block;font-size:9.5px;letter-spacing:.16em;color:var(--ink-mute);font-weight:700;margin-top:4px}.tr-data em{display:block;font-style:normal;font-size:8.5px;letter-spacing:.14em;font-weight:800;color:#20150A;background:var(--amber);border-radius:5px;padding:2px 0;margin-top:6px;text-transform:uppercase}.tr-item.ok .tr-data{color:var(--green)}.tr-item.next .tr-data{color:var(--ink-dim)}.tr-thumb{flex:none;width:118px;border-radius:9px;overflow:hidden;background:var(--card-2);align-self:flex-start;aspect-ratio:16\/9;position:relative}.tr-thumb img{width:100%;height:100%;object-fit:cover}.tr-thumb .fall{display:grid;place-items:center;height:100%;color:var(--ink-mute)}.tr-thumb.sim-thumb{display:grid;place-items:center;background:var(--amber-soft);color:var(--amber)}.tr-item.tr-sim .tr-card{cursor:default}.tr-item.tr-sim .tr-card:hover{border-color:var(--line)}.tr-main{flex:1;min-width:0}.tr-when{font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-mute);font-weight:700}.tr-main>b{font-size:14.5px;display:block;margin:3px 0 8px}.tr-foot{display:flex;gap:10px;align-items:center;flex-wrap:wrap;justify-content:space-between}.tr-main .row-form{border:none;border-top:1px solid var(--line);border-radius:0;padding:12px 0 0;margin:12px 0 0;background:none}@media (max-width:640px){.tr-thumb{width:86px}}@media (max-width:480px){.tr-thumb{display:none}}.ev-div{border-top:1px solid var(--line);margin:4px 0}.ev-note{font-size:12.5px;color:var(--ink-dim);line-height:1.55}.ev-kicker{font-size:9.5px;font-weight:800;letter-spacing:.18em;color:var(--ink-mute);text-transform:uppercase}.ev-missao{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.aula-card{padding:22px 24px;margin-bottom:12px;display:grid;grid-template-columns:70px 1fr auto;gap:20px;align-items:center}.aula-card .data{text-align:center;font-weight:800;color:var(--amber);font-size:17px;line-height:1.2}.aula-card .data small{display:block;font-size:10px;letter-spacing:.14em;color:var(--ink-mute);font-weight:700}.aula-card .info h3{font-size:15.5px;margin-bottom:5px}.aula-card .info .meta{font-size:12.5px;color:var(--ink-mute);display:flex;gap:14px;flex-wrap:wrap}.aula-card .info .meta .tipo{font-size:10px;font-weight:800;letter-spacing:.1em;padding:3px 10px;border-radius:999px;text-transform:uppercase}.aula-actions{display:flex;flex-direction:column;gap:8px;align-items:stretch;min-width:210px}.checkin-form{display:flex;gap:8px}.checkin-form input{flex:1;min-width:0;padding:10px 14px;border-radius:10px;border:1px solid var(--line);background:rgba(10,18,32,.7);color:var(--ink);font-size:13px;outline:none}.checkin-form input:focus{border-color:var(--amber)}.state-tag{display:inline-flex;align-items:center;gap:8px;justify-content:center;font-size:12px;font-weight:700;padding:9px 14px;border-radius:10px}.state-ok{background:rgba(76,195,138,.13);color:var(--green)}.state-miss{background:rgba(229,103,92,.12);color:var(--red)}.state-wait{background:rgba(244,240,230,.06);color:var(--ink-mute)}.aula-card.done{border-color:rgba(76,195,138,.3)}.aula-card.today{border-color:rgba(242,176,74,.5);box-shadow:0 0 0 1px rgba(242,176,74,.3),var(--shadow)}.hoje-flag{font-size:10px;font-weight:800;letter-spacing:.14em;color:var(--amber);text-transform:uppercase}.hero-missao{display:grid;grid-template-columns:minmax(220px,360px) 1fr;overflow:hidden;padding:0;border-color:rgba(242,176,74,.45);box-shadow:0 0 0 1px rgba(242,176,74,.25),var(--shadow);margin-bottom:8px}.hero-missao .ev-thumb{aspect-ratio:auto;min-height:200px;height:100%}.hero-missao .hm-body{padding:26px 30px;display:flex;flex-direction:column;gap:12px;justify-content:center}.hero-missao .hm-kicker{font-size:10.5px;font-weight:800;letter-spacing:.2em;color:var(--amber);text-transform:uppercase}.hero-missao h3{font-size:20px;line-height:1.25}.hero-missao .hm-note{font-size:13.5px;color:var(--ink-dim)}.hero-missao .btn{align-self:flex-start}.hero-missao.done{border-color:rgba(76,195,138,.4);box-shadow:0 0 0 1px rgba(76,195,138,.2),var(--shadow)}.sec-h{display:flex;align-items:center;gap:10px;font-size:11px;font-weight:800;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-mute);margin:28px 0 12px}.sec-h .cnt{background:var(--amber-soft);color:var(--amber);border-radius:999px;padding:2px 10px;font-size:10.5px;letter-spacing:.05em}.sec-h .cnt.g{background:rgba(76,195,138,.12);color:var(--green)}.mrow{display:flex;align-items:center;gap:16px;padding:13px 18px;border:1px solid var(--line);border-radius:12px;background:rgba(16,27,51,.5);margin-bottom:8px;transition:.15s}.mrow:hover{border-color:rgba(242,176,74,.35)}.mrow .data{flex:none;width:52px;text-align:center;font-weight:800;color:var(--amber);font-size:14px;line-height:1.15}.mrow .data small{display:block;font-size:9px;letter-spacing:.12em;color:var(--ink-mute);font-weight:700}.mrow .t{flex:1;font-weight:600;font-size:14px;min-width:0}.mrow .res{flex:none;font-size:12.5px;font-weight:700;color:var(--green)}.mrow.done{opacity:.72}.mrow.done:hover{opacity:1;border-color:rgba(76,195,138,.35)}.mrow.done .data{color:var(--green)}.prox-nota{font-size:12.5px;color:var(--ink-mute);margin:-2px 0 8px;padding:0 4px;line-height:1.5}@media (max-width:560px){.mrow{flex-wrap:wrap;gap:12px 14px;padding:14px 16px}.mrow .t{flex:1 1 0}.mrow > .btn{flex:1 0 100%;justify-content:center}}.tag-late{color:var(--red);font-weight:800}.tag-done{color:var(--green);font-weight:800}.quiz-box{padding:30px 32px}.quiz-box .qhead{font-size:11px;font-weight:800;letter-spacing:.18em;color:var(--amber);text-transform:uppercase;margin-bottom:10px}.quiz-q{margin-bottom:26px;padding-bottom:26px;border-bottom:1px solid var(--line)}.quiz-q:last-of-type{border-bottom:none}.quiz-q .enun{font-size:15px;margin-bottom:14px;color:var(--ink)}.quiz-opts{display:flex;gap:10px}.quiz-opts button{padding:10px 28px;border-radius:10px;border:1px solid var(--line);font-weight:700;font-size:13.5px;color:var(--ink-dim);transition:.15s}.quiz-opts button:hover{border-color:var(--amber);color:var(--amber)}.quiz-opts button.sel{background:var(--amber-soft);border-color:var(--amber);color:var(--amber)}.quiz-opts button.hit{background:rgba(76,195,138,.15);border-color:var(--green);color:var(--green)}.quiz-opts button.errado{background:rgba(229,103,92,.13);border-color:var(--red);color:var(--red)}.quiz-q .enun{white-space:pre-wrap}.quiz-opts.mult{flex-direction:column;align-items:stretch}.quiz-opts.mult button{display:flex;align-items:flex-start;gap:12px;text-align:left;padding:12px 16px;font-weight:500;font-size:14px;line-height:1.5}.quiz-opts.mult button .lt{flex:none;width:26px;height:26px;border-radius:8px;display:flex;align-items:center;justify-content:center;font-size:12.5px;font-weight:800;border:1px solid var(--line);color:var(--ink-dim);margin-top:-1px}.quiz-opts.mult button.sel .lt{border-color:var(--amber);color:var(--amber)}.quiz-opts.mult button.hit .lt{border-color:var(--green);color:var(--green)}.quiz-opts.mult button.errado .lt{border-color:var(--red);color:var(--red)}.quiz-coment{margin-top:14px;border:1px solid var(--line);border-radius:12px;overflow:hidden}.quiz-coment summary{cursor:pointer;padding:11px 16px;font-size:12px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--amber);list-style:none}.quiz-coment summary::before{content:'\u25b8 '}.quiz-coment[open] summary::before{content:'\u25be '}.quiz-coment summary::-webkit-details-marker{display:none}.quiz-coment .cbody{padding:4px 16px 16px;font-size:14px;line-height:1.65;color:var(--ink-dim);white-space:pre-wrap;word-break:break-word}.quiz-result{padding:20px;border-radius:12px;background:var(--amber-soft);border:1px solid rgba(242,176,74,.3);font-size:14.5px;margin-top:8px}.quiz-result b{color:var(--amber)}.quiz-status{position:sticky;bottom:14px;z-index:5;margin-top:10px;padding:12px 18px;border-radius:12px;border:1px solid var(--line);background:var(--card-2);box-shadow:0 8px 24px rgba(0,0,0,.35);font-size:13px;font-weight:600;color:var(--ink-dim);text-align:center}.quiz-status b{color:var(--amber)}.quiz-status b.ok{color:var(--green)}.qnav{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:22px}.qnav .qn{width:34px;height:34px;border-radius:9px;border:1px solid var(--line);font-size:12.5px;font-weight:700;color:var(--ink-dim);display:grid;place-items:center;background:var(--card-2);transition:.15s;padding:0}.qnav .qn:hover{border-color:var(--amber);color:var(--amber)}.qnav .qn.ok{background:rgba(76,195,138,.13);border-color:rgba(76,195,138,.4);color:var(--green)}.qnav .qn.err{background:rgba(229,103,92,.12);border-color:rgba(229,103,92,.4);color:var(--red)}.qnav .qn.cur{outline:2px solid var(--amber);outline-offset:1.5px;color:var(--ink)}.qctrl{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-top:24px;flex-wrap:wrap}.qline{font-size:13px;color:var(--ink-mute)}.qline b{color:var(--amber)}.qline b.ok{color:var(--green)}.quiz-coment .cbody a{color:var(--amber);text-decoration:underline;word-break:break-all}.sim-chips{display:flex;gap:8px;flex-wrap:wrap;margin:14px 0}.sim-chips span{padding:7px 14px;border-radius:999px;border:1px solid var(--line);font-size:12px;font-weight:700;color:var(--ink-dim);background:var(--amber-soft)}.sim-quando{display:inline-flex;align-items:center;gap:16px;background:var(--amber-soft);border:1px solid rgba(5,140,149,.28);border-radius:16px;padding:15px 22px;text-align:left;vertical-align:top}.sim-quando .sq-ico{flex:none;width:46px;height:46px;border-radius:12px;background:var(--amber);color:#fff;display:grid;place-items:center}.sim-quando .sq-label{font-size:10px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-mute)}.sim-quando .sq-dia{font-size:22px;font-weight:800;color:var(--ink);line-height:1.15;margin-top:2px}.sim-quando .sq-hora{font-size:13px;color:var(--ink-dim);font-weight:600;margin-top:2px}.sim-bloqueado{margin-top:24px;background:var(--line)!important;color:var(--ink-mute)!important;box-shadow:none!important;cursor:not-allowed;pointer-events:none;font-weight:700}@media (max-width:480px){.sim-quando{gap:12px;padding:13px 16px}.sim-quando .sq-dia{font-size:18px}}.sim-regras{list-style:none;display:grid;gap:10px}.sim-regras li{position:relative;padding-left:26px;font-size:14px;color:var(--ink-dim);line-height:1.55}.sim-regras li::before{content:\"\";position:absolute;left:2px;top:7px;width:8px;height:8px;border-radius:50%;background:var(--amber)}.sim-regras li b{color:var(--ink)}.prova-layout{display:grid;grid-template-columns:240px 1fr;gap:18px;align-items:start}.prova-side{position:sticky;top:20px}.prova-timer{display:flex;align-items:center;justify-content:center;gap:8px;padding:16px;font-size:26px;font-weight:800;font-variant-numeric:tabular-nums;border-bottom:1px solid var(--line)}.prova-timer.urgente{color:var(--red);animation:pulse 1s infinite}.qmap{display:grid;grid-template-columns:repeat(5,1fr);gap:6px;padding:14px 16px;max-height:320px;overflow-y:auto}.qmap button{position:relative;aspect-ratio:1;border:1px solid var(--line);border-radius:8px;font-size:11.5px;font-weight:700;color:var(--ink-mute);transition:.12s}.qmap button:hover{border-color:var(--amber)}.qmap button.respondida{background:var(--amber-soft);border-color:var(--amber);color:var(--amber)}.qmap button.atual{outline:2px solid var(--amber);outline-offset:1px;color:var(--ink)}.qmap button.marcada::after{content:\"\";position:absolute;top:3px;right:3px;width:6px;height:6px;border-radius:50%;background:var(--blue)}.prova-meta{padding:12px 16px;font-size:12px;font-weight:600;color:var(--ink-mute);text-align:center;border-top:1px solid var(--line)}.prova-area{font-size:10.5px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:var(--blue);margin-bottom:8px}.prova-nav{display:flex;justify-content:space-between;gap:10px;margin-top:20px;flex-wrap:wrap}.prova-nav .marc-on{border-color:var(--blue);color:var(--blue)}.prova-protegida{-webkit-user-select:none;user-select:none}.sim-demo-note{margin-top:16px;padding:13px 18px;border:1px dashed var(--line);border-radius:12px;font-size:13px;color:var(--ink-mute);text-align:center}.sim-demo-note a{color:var(--amber);font-weight:700;text-decoration:underline}@media (max-width:920px){.prova-layout{grid-template-columns:1fr}.prova-side{position:static}.qmap{max-height:180px}}.passos{counter-reset:passo}.passo{display:flex;gap:18px;padding:20px 0;border-bottom:1px solid var(--line)}.passo:last-child{border-bottom:none}.passo::before{counter-increment:passo;content:counter(passo);flex:none;width:34px;height:34px;border-radius:50%;background:var(--amber-soft);color:var(--amber);font-weight:800;font-size:14px;display:grid;place-items:center}.passo h3{font-size:15px;margin-bottom:4px}.passo p{font-size:13.5px;color:var(--ink-dim)}.locked-card{text-align:center;padding:60px 30px}.locked-card .ic{width:64px;height:64px;border-radius:18px;background:var(--amber-soft);color:var(--amber);display:grid;place-items:center;margin:0 auto 20px}.locked-card p{color:var(--ink-mute);font-size:14.5px;max-width:420px;margin:0 auto}.pos-card{display:grid;grid-template-columns:auto 1fr;gap:34px;align-items:center;padding:32px 36px;margin-bottom:26px}.pos-card .pos{font-size:60px;font-weight:800;color:var(--amber);line-height:1}.pos-card .pos small{font-size:16px;color:var(--ink-mute);font-weight:600}.pos-breakdown{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:18px}.pb{padding:14px 16px;border-radius:12px;background:rgba(10,18,32,.55);border:1px solid var(--line)}.pb .row{display:flex;justify-content:space-between;font-size:12px;font-weight:700;margin-bottom:8px}.pb .row span:last-child{color:var(--ink-mute);font-variant-numeric:tabular-nums}.rank-table{width:100%;border-collapse:collapse;font-size:14px}.rank-table th{font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute);text-align:left;padding:12px 16px;border-bottom:1px solid var(--line);font-weight:800}.rank-table td{padding:13px 16px;border-bottom:1px solid var(--line)}.rank-table tr:last-child td{border-bottom:none}.rank-table .pts{text-align:right;font-weight:700;font-variant-numeric:tabular-nums}.rank-table tr.me td{background:var(--amber-soft);font-weight:700}.rank-table tr.me td:first-child{border-radius:10px 0 0 10px}.rank-table tr.me td:last-child{border-radius:0 10px 10px 0}.rank-gap td{text-align:center;color:var(--ink-mute);font-size:12px;padding:8px}.medal{display:inline-grid;place-items:center;width:26px;height:26px;border-radius:50%;font-size:11.5px;font-weight:800;background:rgba(244,240,230,.07);color:var(--ink-dim)}.medal.g{background:var(--amber);color:#20150A}.medal.s{background:#C6CDD9;color:#1A2233}.medal.b{background:#B0793F;color:#20150A}.aviso{padding:22px 26px;margin-bottom:12px}.aviso .a-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:8px}.aviso .a-data{font-size:10.5px;font-weight:800;letter-spacing:.16em;color:var(--ink-mute);text-transform:uppercase}.aviso .a-novo{font-size:9.5px;font-weight:800;letter-spacing:.12em;background:var(--amber);color:#20150A;padding:3px 10px;border-radius:999px;text-transform:uppercase}.aviso h3{font-size:16.5px;margin-bottom:6px}.aviso p{font-size:14px;color:var(--ink-dim)}.aviso .a-cta{margin-top:14px}.canal-pills{display:flex;gap:8px;margin-bottom:18px;flex-wrap:wrap}.canal-pills button{padding:9px 20px;border-radius:999px;border:1px solid var(--line);font-weight:700;font-size:13px;color:var(--ink-mute);transition:.2s}.canal-pills button.on{background:var(--amber);border-color:var(--amber);color:#20150A}.composer{padding:20px 22px;margin-bottom:18px}.composer textarea{width:100%;min-height:74px;resize:vertical;padding:12px 14px;border-radius:12px;border:1px solid var(--line);background:rgba(10,18,32,.7);color:var(--ink);outline:none;font-size:14px;font-family:inherit}.composer textarea:focus{border-color:var(--amber)}.composer .c-foot{display:flex;justify-content:space-between;align-items:center;gap:10px;margin-top:10px;font-size:11.5px;color:var(--ink-mute);flex-wrap:wrap}.post{padding:20px 24px;margin-bottom:12px}.post.pin{border-color:rgba(242,176,74,.4)}.post .p-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}.post .p-av{width:34px;height:34px;border-radius:50%;background:var(--amber-soft);color:var(--amber);display:grid;place-items:center;font-weight:800;font-size:12px;flex:none}.post .p-nome{font-size:13.5px;font-weight:700}.post .p-meta{font-size:11px;color:var(--ink-mute)}.post .p-pin{margin-left:auto;font-size:9.5px;font-weight:800;letter-spacing:.12em;color:var(--amber);text-transform:uppercase;border:1px solid rgba(242,176,74,.4);padding:3px 10px;border-radius:999px;flex:none}.post .p-body{font-size:14px;color:var(--ink);white-space:pre-wrap;line-height:1.6;overflow-wrap:anywhere}.post .p-actions{display:flex;gap:8px;align-items:center;margin-top:14px;flex-wrap:wrap}.react{padding:6px 14px;border-radius:999px;border:1px solid var(--line);font-size:12.5px;color:var(--ink-dim);transition:.15s}.react:hover{border-color:var(--amber)}.react.on{background:var(--amber-soft);border-color:rgba(242,176,74,.5);color:var(--amber)}.p-link{font-size:12px;color:var(--ink-mute);margin-left:auto}.p-link:hover{color:var(--red)}.coms{margin-top:14px;border-top:1px solid var(--line);padding-top:12px;display:flex;flex-direction:column;gap:10px}.com{display:flex;gap:10px;font-size:13px}.com .p-av{width:26px;height:26px;font-size:10px}.com .c-b{background:rgba(10,18,32,.55);border:1px solid var(--line);border-radius:10px;padding:8px 12px;flex:1}.com .c-b b{font-size:12px;display:block;margin-bottom:2px}.com-form{display:flex;gap:8px;margin-top:12px}.com-form input{flex:1;min-width:0;padding:10px 14px;border-radius:10px;border:1px solid var(--line);background:rgba(10,18,32,.7);color:var(--ink);font-size:13px;outline:none}.com-form input:focus{border-color:var(--amber)}.demo-banner{background:rgba(47,127,192,.12);border:1px solid rgba(47,127,192,.3);border-radius:var(--radius-sm);padding:12px 18px;font-size:12.5px;color:#9CC4E4;margin-bottom:26px}.demo-banner b{color:#CBE2F4}.toast{position:fixed;bottom:26px;left:50%;transform:translateX(-50%) translateY(20px);background:var(--card);border:1px solid rgba(242,176,74,.4);color:var(--ink);padding:14px 26px;border-radius:12px;font-size:14px;font-weight:600;opacity:0;pointer-events:none;transition:.3s;z-index:100005;box-shadow:var(--shadow)}.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}@media (max-width:920px){.app{grid-template-columns:1fr}.checkin-grid{grid-template-columns:1fr}.hero-missao{grid-template-columns:1fr}.hero-missao .ev-thumb{aspect-ratio:16\/9;min-height:0;height:auto}.sidebar{position:fixed;top:auto;right:0;bottom:0;left:0;height:auto;flex-direction:row;align-items:center;padding:10px 12px;border-right:none;border-top:1px solid var(--line);z-index:60;background:rgba(10,18,32,.96);backdrop-filter:blur(14px)}.sidebar .brand,.side-label,.side-foot{display:none}.sidebar nav{display:flex;width:100%;justify-content:space-around}.nav-item{flex-direction:column;gap:4px;font-size:10px;padding:8px 6px;margin:0}.nav-item .badge{display:none}.main{padding-bottom:120px;max-width:100%}.ofensiva-card{grid-template-columns:1fr;text-align:center;gap:18px}.rank-pts{text-align:center}.aula-card{grid-template-columns:56px 1fr}.aula-actions{grid-column:1\/-1;min-width:0}.pos-card{grid-template-columns:1fr;text-align:center}.pos-breakdown{grid-template-columns:1fr}.radio-cards.three{grid-template-columns:1fr}.ato-num{display:none}}.auth-overlay{position:relative;width:100%;min-height:100vh;display:flex;justify-content:center;align-items:flex-start;padding:24px 4% calc(24px + env(safe-area-inset-bottom));background:var(--bg)}.auth-overlay .auth-card{margin:0 auto;width:min(560px,92vw)}.auth-overlay .field input,.auth-overlay .field select{background:#fff;color:var(--ink);border-color:var(--line)}.auth-overlay .field input:focus{border-color:var(--amber)}html{-webkit-tap-highlight-color:transparent}body{overscroll-behavior-y:contain}.btn,.nav-item,.quiz-opts button,.qmap button,.btn-ico,.qnav .qn{touch-action:manipulation}.btn:active,.quiz-opts button:active,.btn-ico:active,.qnav .qn:active{transform:scale(.97)}.nav-item{transition:background .18s,color .18s,transform .12s}.nav-item:active{transform:scale(.96)}@keyframes viewIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.view-anim{animation:viewIn .22s ease}@media (max-width:920px){.sidebar{padding-bottom:calc(10px + env(safe-area-inset-bottom))}.checkin-form input,.field input,.field select{font-size:16px}.main{padding-top:20px}}.sim-guard{position:fixed;top:0;left:0;right:0;bottom:0;width:100%;height:100%;z-index:100002;display:grid;place-items:center;background:rgba(14,42,46,.55);padding:20px}.sim-guard .sg-card{background:var(--card);border:1px solid var(--line);border-radius:16px;max-width:460px;padding:28px 30px;box-shadow:var(--shadow)}.tr-card[data-yt]{cursor:pointer;transition:border-color .15s,box-shadow .15s}.tr-card[data-yt]:hover{border-color:rgba(5,140,149,.5);box-shadow:0 6px 18px rgba(14,42,46,.08)}.tr-card[data-yt]:hover .tr-main>b{color:var(--amber)}.prova-topo{position:sticky;top:12px;z-index:40;display:flex;align-items:center;gap:22px;padding:16px 24px;margin-bottom:16px;flex-wrap:wrap}.pt-timer{font-size:34px;font-weight:800;font-variant-numeric:tabular-nums;line-height:1;color:var(--ink)}.pt-timer.urgente{color:var(--red);animation:pulse 1s infinite}.pt-rotulo{font-size:10px;font-weight:800;letter-spacing:.16em;text-transform:uppercase;color:var(--ink-mute);margin-top:4px}.pt-meta{font-size:13.5px;color:var(--ink-dim);font-weight:600}.pt-meta b{color:var(--amber)}.pt-acoes{margin-left:auto;display:flex;gap:10px;align-items:center;flex-wrap:wrap}.pt-confirm{font-size:12.5px;color:var(--ink-dim)}.prova-mapa{display:none;flex-wrap:wrap;gap:5px;margin-bottom:22px;padding-bottom:18px;border-bottom:1px solid var(--line)}.prova-mapa.aberto{display:flex;animation:viewIn .18s ease}.prova-mapa button{position:relative;width:32px;height:32px;border:1px solid var(--line);border-radius:8px;font-size:11px;font-weight:700;color:var(--ink-mute);background:var(--card);padding:0;transition:.12s}.prova-mapa button:hover{border-color:var(--amber)}.prova-mapa button.respondida{background:var(--amber-soft);border-color:var(--amber);color:var(--amber)}.prova-mapa button.atual{outline:2px solid var(--amber);outline-offset:1px;color:var(--ink)}.prova-mapa button.marcada::after{content:\"\";position:absolute;top:2px;right:2px;width:6px;height:6px;border-radius:50%;background:var(--blue)}@media (max-width:920px){.prova-topo{top:8px;gap:14px;padding:14px 18px}.pt-timer{font-size:26px}.prova-mapa button{width:30px;height:30px}}.pt-salto{padding:5px 12px;border:1px solid var(--line);border-radius:999px;font-size:12px;font-weight:700;color:var(--ink-dim);background:var(--card);transition:.15s}.pt-salto:hover{border-color:var(--amber);color:var(--amber)}.pt-salto.azul{color:var(--blue);border-color:rgba(47,102,168,.35)}.pt-salto.azul:hover{border-color:var(--blue)}.q-img{display:block;max-width:100%;height:auto;border-radius:10px;border:1px solid var(--line);margin:10px 0;background:#fff}.ind-card{position:relative;overflow:hidden;padding:26px 30px;margin-bottom:22px}.ind-card::before{content:'';position:absolute;top:-90px;right:-70px;width:320px;height:280px;background:radial-gradient(closest-side,var(--amber-soft),transparent 70%);pointer-events:none}.ind-grid{position:relative;display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,1fr);gap:26px;align-items:center}.ind-left h3{font-size:20px;margin:8px 0 6px}.ind-left .regra{font-size:13.5px;color:var(--ink-dim);line-height:1.55;margin:0 0 16px}.ind-linklabel{font-size:11px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-mute);margin-bottom:6px}.ind-linkrow{display:flex;gap:10px;flex-wrap:wrap;align-items:stretch}.ind-linkrow input{flex:1;min-width:200px;padding:12px 14px;border:1px solid var(--line);border-radius:12px;background:var(--bg-2);color:var(--ink-dim);font-size:13px;font-family:inherit}.ind-acts{display:flex;gap:10px;flex-wrap:wrap;margin-top:12px}.btn-wa{display:inline-flex;align-items:center;gap:8px}.btn-wa svg{flex:none}.ind-placar{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:22px 18px;border-radius:18px;background:linear-gradient(180deg,var(--amber-strong),var(--amber));color:#fff;text-align:center;box-shadow:0 12px 28px rgba(5,140,149,.28)}[data-theme='dark'] .ind-placar{color:#04292C}.ind-placar-n{font-size:44px;font-weight:800;line-height:1}.ind-placar-l{font-size:12px;font-weight:700;letter-spacing:.04em;opacity:.92}.ind-placar-pts{margin-top:8px;font-size:14px;font-weight:800;background:rgba(255,255,255,.22);padding:4px 12px;border-radius:999px}.ind-score{font-size:13.5px;color:var(--ink-dim);text-align:center;margin-top:16px}.ind-score b{color:var(--amber);font-size:16px}.ind-friends{position:relative;display:flex;gap:8px;flex-wrap:wrap;margin-top:18px;padding-top:16px;border-top:1px dashed var(--line)}.ind-friend{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;font-weight:600;color:var(--ink-dim);padding:6px 12px;border:1px solid var(--line);border-radius:999px;background:var(--card)}.ind-friend .st{width:7px;height:7px;border-radius:50%;background:var(--ink-mute);flex:none}.ind-friend.ok{color:var(--ink);border-color:transparent;background:var(--amber-soft)}.ind-friend.ok .st{background:var(--green)}@media (max-width:760px){.ind-grid{grid-template-columns:1fr;gap:20px}.ind-cartela{align-items:flex-start}.ind-score{text-align:left}.ind-slots{gap:8px}.ind-slot{width:46px;height:54px}}:root{--bg:#E9F1F2;--bg-2:#E1ECEE;--bg-3:#D9E7E9;--ink:#0E2A2E;--ink-dim:#41585D;--ink-mute:#7E959B;--amber:#058C95;--amber-strong:#04737B;--amber-soft:rgba(5,140,149,.09);--green:#1E9E6E;--red:#D9564A;--blue:#2F66A8;--line:rgba(14,42,46,.16);--card:#FFFFFF;--card-2:#FAFDFD;--shadow:0 14px 36px rgba(14,42,46,.10),0 2px 8px rgba(14,42,46,.06);--font:'Figtree','Poppins',-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif}::selection{background:var(--amber);color:#fff}.stage-bg{background:radial-gradient(1100px 520px at 85% -12%,rgba(34,184,193,.12),transparent 60%),radial-gradient(820px 480px at 6% 4%,rgba(47,102,168,.07),transparent 55%),linear-gradient(180deg,#F6FAFB,var(--bg) 55%)}.stage-bg::after{opacity:.5;background-image:linear-gradient(rgba(5,140,149,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(5,140,149,.045) 1px,transparent 1px)}body{-webkit-font-smoothing:antialiased}h1,h2,h3{letter-spacing:-.015em}.btn-amber{background:linear-gradient(180deg,#0AA2AC,var(--amber));color:#fff;box-shadow:0 8px 22px rgba(5,140,149,.28)}.btn-amber:hover{box-shadow:0 14px 30px rgba(5,140,149,.36)}.btn-ghost{color:var(--ink-dim)}.card{background:var(--card);box-shadow:var(--shadow)}.pill{background:#fff}::-webkit-scrollbar{width:10px;height:10px}::-webkit-scrollbar-track{background:transparent}::-webkit-scrollbar-thumb{background:rgba(5,140,149,.28);border-radius:99px;border:3px solid var(--bg)}::-webkit-scrollbar-thumb:hover{background:rgba(5,140,149,.5)}.sidebar{background:#fff;border-right:1px solid var(--line)}.sidebar .brand{background:linear-gradient(135deg,#058C95,#0AA2AC 70%,#22B8C1);border-radius:14px;padding:16px 14px;margin:0 0 30px;box-shadow:0 10px 24px rgba(5,140,149,.25)}.sidebar .brand small{color:rgba(255,255,255,.85)}.nav-item:hover{background:var(--amber-soft);color:var(--amber)}.nav-item.on{background:linear-gradient(180deg,#0AA2AC,var(--amber));color:#fff;box-shadow:0 8px 18px rgba(5,140,149,.28)}.nav-item.on .badge{background:rgba(255,255,255,.2);color:#fff}.jornada-track{background:rgba(14,42,46,.08)}.user-chip .out:hover{color:var(--red)}.pts-chip{border-color:rgba(5,140,149,.3)}.progress{background:rgba(14,42,46,.08)}.onboard{border-color:rgba(5,140,149,.35)}.onboard .ob-item{background:var(--card-2)}.cal-tabs button.on{color:#fff}.premio{border-color:rgba(5,140,149,.25);background:linear-gradient(180deg,rgba(5,140,149,.06),transparent 70%),var(--card)}.cal-day.has{background:var(--bg-2);border-color:var(--line)}.cal-day.has:hover{border-color:rgba(5,140,149,.5)}.cal-day.sel{background:var(--amber);border-color:var(--amber);color:#fff}.cal-day.sel .dot{background:#fff}.cal-day.big.sel .lbl{color:rgba(255,255,255,.85)}.dot-next{background:rgba(14,42,46,.25)}.day-empty{background:var(--card);color:var(--ink-dim)}.ev-thumb{background:radial-gradient(120% 160% at 80% -20%,rgba(34,184,193,.28),transparent 55%),linear-gradient(135deg,#DCEDEE,#C9E2E4)}.ev-thumb::after{background:linear-gradient(180deg,transparent 55%,rgba(10,34,38,.5))}.ev-thumb .fall{color:rgba(5,140,149,.45)}.ev-badge-hoje{background:var(--amber);color:#fff}.mrow{background:var(--card)}.mrow:hover{border-color:rgba(5,140,149,.4)}.mrow.hoje{border-color:rgba(5,140,149,.55)}.row-form{background:var(--card-2)}.tr-card{background:var(--card)}.tr-item.now .tr-card{border-color:rgba(5,140,149,.5);background:#fff}.tr-item.now .tr-dot{box-shadow:0 0 12px rgba(5,140,149,.6)}.checkin-form input,.com-form input,.composer textarea{background:#fff;color:var(--ink)}.state-wait{background:rgba(14,42,46,.05)}.aula-card.today{border-color:rgba(5,140,149,.5);box-shadow:0 0 0 1px rgba(5,140,149,.28),var(--shadow)}.hero-missao{border-color:rgba(5,140,149,.4);box-shadow:0 0 0 1px rgba(5,140,149,.2),var(--shadow)}.hero-missao.done{border-color:rgba(30,158,110,.4);box-shadow:0 0 0 1px rgba(30,158,110,.2),var(--shadow)}.ev-card.ev-today{border-color:var(--amber);box-shadow:0 0 0 1px var(--amber),var(--shadow)}.sec-h .cnt.g{background:rgba(30,158,110,.1)}.quiz-opts button{background:#fff}.quiz-opts button.hit{background:rgba(30,158,110,.09)}.quiz-opts button.errado{background:rgba(217,86,74,.08)}.quiz-opts.mult button .lt{background:var(--bg-2);border-color:transparent}.quiz-opts.mult button.sel .lt{background:var(--amber-soft)}.quiz-opts.mult button.hit .lt{background:rgba(30,158,110,.12)}.quiz-opts.mult button.errado .lt{background:rgba(217,86,74,.1)}.quiz-coment{background:var(--card-2)}.quiz-result{border-color:rgba(5,140,149,.3)}.quiz-status{background:#fff;box-shadow:0 10px 26px rgba(14,42,46,.14)}.pb{background:var(--card-2)}.medal{background:rgba(14,42,46,.06)}.medal.g{background:var(--amber);color:#fff}.medal.s{background:#D7DfE6;color:#33414F}.medal.b{background:#C08A52;color:#fff}.demo-banner{background:rgba(47,102,168,.07);border-color:rgba(47,102,168,.22);color:#3A6089}.demo-banner b{color:#2F66A8}.toast{border-color:rgba(5,140,149,.4)}@media (max-width:920px){.sidebar{background:rgba(255,255,255,.94);border-top:1px solid var(--line)}}[data-theme='dark']{--bg:#0A181A;--bg-2:#0D1E21;--bg-3:#102529;--ink:#EAF4F5;--ink-dim:#A9C2C6;--ink-mute:#6F8B90;--amber:#22B8C1;--amber-strong:#0AA2AC;--amber-soft:rgba(34,184,193,.12);--green:#4CC38A;--red:#E5675C;--blue:#5B93D6;--line:rgba(234,244,245,.10);--card:#0F2124;--card-2:#0C1B1E;--shadow:0 18px 50px rgba(2,10,11,.55)}[data-theme='dark'] .stage-bg{background:radial-gradient(1100px 520px at 85% -12%,rgba(34,184,193,.10),transparent 60%),radial-gradient(820px 480px at 6% 4%,rgba(47,102,168,.08),transparent 55%),linear-gradient(180deg,#0C1D20,var(--bg) 55%)}[data-theme='dark'] .stage-bg::before{opacity:.07}[data-theme='dark'] .stage-bg::after{opacity:.35;background-image:linear-gradient(rgba(34,184,193,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(34,184,193,.05) 1px,transparent 1px)}[data-theme='dark'] .btn-amber{background:linear-gradient(180deg,#22B8C1,#0AA2AC);color:#04292C;box-shadow:0 8px 22px rgba(34,184,193,.25)}[data-theme='dark'] .btn-amber:hover{box-shadow:0 14px 30px rgba(34,184,193,.35)}[data-theme='dark'] .pill{background:var(--card)}[data-theme='dark'] ::-webkit-scrollbar-thumb{background:rgba(34,184,193,.3)}[data-theme='dark'] .sidebar{background:#0C1D20}[data-theme='dark'] .nav-item.on{color:#04292C}[data-theme='dark'] .nav-item.on .badge{background:rgba(4,41,44,.25);color:#04292C}[data-theme='dark'] .jornada-track{background:rgba(234,244,245,.10)}[data-theme='dark'] .progress{background:rgba(234,244,245,.10)}[data-theme='dark'] .cal-day.sel{color:#04292C}[data-theme='dark'] .cal-day.sel .dot{background:#04292C}[data-theme='dark'] .cal-day.big.sel .lbl{color:rgba(4,41,44,.8)}[data-theme='dark'] .dot-next{background:rgba(234,244,245,.28)}[data-theme='dark'] .ev-thumb{background:radial-gradient(120% 160% at 80% -20%,rgba(34,184,193,.25),transparent 55%),linear-gradient(135deg,#12282C,#0D1E21)}[data-theme='dark'] .ev-thumb .fall{color:rgba(34,184,193,.4)}[data-theme='dark'] .ev-badge-hoje{color:#04292C}[data-theme='dark'] .tr-item.now .tr-card{background:var(--card)}[data-theme='dark'] .checkin-form input,[data-theme='dark'] .com-form input,[data-theme='dark'] .composer textarea{background:var(--bg-2);color:var(--ink);border-color:var(--line)}[data-theme='dark'] .state-wait{background:rgba(234,244,245,.06)}[data-theme='dark'] .quiz-opts button{background:var(--card-2)}[data-theme='dark'] .quiz-opts button.hit{background:rgba(76,195,138,.10)}[data-theme='dark'] .quiz-opts button.errado{background:rgba(229,103,92,.10)}[data-theme='dark'] .quiz-status{background:var(--card);box-shadow:0 10px 26px rgba(2,10,11,.5)}[data-theme='dark'] .medal{background:rgba(234,244,245,.08)}[data-theme='dark'] .medal.g{color:#04292C}[data-theme='dark'] .demo-banner{background:rgba(91,147,214,.10);border-color:rgba(91,147,214,.28);color:#A9C6E8}[data-theme='dark'] .demo-banner b{color:#BFD8F4}@media (max-width:920px){[data-theme='dark'] .sidebar{background:rgba(12,29,32,.96)}}#af-root h1,#af-root h2,#af-root h3,#af-root h4{color:var(--ink)}#af-root .ofensiva-card h3{color:var(--ink-mute)}#af-root .rank-table th{color:var(--ink-mute)}<\/style>\n<link rel=\"manifest\" href=\"data:application\/manifest+json;base64,eyJuYW1lIjogIkF0byBGaW5hbCBSZXZhbGlkYSBcdTAwYjcgRXN0cmF0XHUwMGU5Z2lhIE1FRCIsICJzaG9ydF9uYW1lIjogIkF0byBGaW5hbCIsICJzdGFydF91cmwiOiAiaHR0cHM6Ly9ta3QuZXN0cmF0ZWdpYS5jb20vbWVkL2F0by1maW5hbC1yZXZhbGlkYS9hcmVhLz92PTE3MTcyMyIsICJzY29wZSI6ICJodHRwczovL21rdC5lc3RyYXRlZ2lhLmNvbS9tZWQvYXRvLWZpbmFsLXJldmFsaWRhLyIsICJkaXNwbGF5IjogInN0YW5kYWxvbmUiLCAiYmFja2dyb3VuZF9jb2xvciI6ICIjRjNGOEY5IiwgInRoZW1lX2NvbG9yIjogIiMwNThDOTUiLCAiaWNvbnMiOiBbeyJzcmMiOiAiaHR0cHM6Ly9sc25kbHdhZGZpcm51bHptcWtlcy5zdXBhYmFzZS5jby9zdG9yYWdlL3YxL29iamVjdC9wdWJsaWMvYXBwL2ljb25lLTE5Mi5wbmciLCAic2l6ZXMiOiAiMTkyeDE5MiIsICJ0eXBlIjogImltYWdlL3BuZyJ9LCB7InNyYyI6ICJodHRwczovL2xzbmRsd2FkZmlybnVsem1xa2VzLnN1cGFiYXNlLmNvL3N0b3JhZ2UvdjEvb2JqZWN0L3B1YmxpYy9hcHAvaWNvbmUtNTEyLnBuZyIsICJzaXplcyI6ICI1MTJ4NTEyIiwgInR5cGUiOiAiaW1hZ2UvcG5nIiwgInB1cnBvc2UiOiAiYW55In1dfQ==\"><meta name=\"theme-color\" content=\"#058C95\"><meta name=\"apple-mobile-web-app-capable\" content=\"yes\"><meta name=\"mobile-web-app-capable\" content=\"yes\"><meta name=\"apple-mobile-web-app-status-bar-style\" content=\"default\"><meta name=\"apple-mobile-web-app-title\" content=\"Ato Final\"><link rel=\"apple-touch-icon\" href=\"https:\/\/lsndlwadfirnulzmqkes.supabase.co\/storage\/v1\/object\/public\/app\/icone-512.png\"><link rel=\"icon\" type=\"image\/png\" href=\"https:\/\/lsndlwadfirnulzmqkes.supabase.co\/storage\/v1\/object\/public\/app\/icone-192.png\">\n<style id=\"af-blindagem\">html,body{background:var(--bg)!important;color:var(--ink)!important;font-family:var(--font)!important}html,body{display:block!important;visibility:visible!important;opacity:1!important}#af-root{display:block!important;visibility:visible!important;opacity:1!important}#page-container,#et-main-area,#main-content,#primary-content,#content-area,#left-area,.entry-content,article.page{display:block!important;visibility:visible!important;opacity:1!important}.et_pb_section,.et_pb_row,.et_pb_column,.et_pb_module,.et_pb_code,.et_pb_text{visibility:visible!important;opacity:1!important}#page-container,#et-main-area,#main-content,#primary-content,.container,#content-area,#left-area,.entry-content,article.page{width:100%!important;max-width:100%!important;padding:0!important;margin:0!important;background:transparent!important;float:none!important}#main-header,#top-header,#main-footer,#footer-bottom,.et-l--header,.et-l--footer,#et-secondary-nav,.et_pb_scroll_top{display:none!important}#af-root h1,#af-root h2,#af-root h3{font-family:var(--font)!important}@media (min-width:921px){.sidebar{position:fixed!important;top:0;left:0;bottom:0;width:250px;height:100vh!important;overflow-y:auto;z-index:60}.app>.main{grid-column:2!important}}<\/style>\n<script id=\"af-theme\" nowprocket>try{if(JSON.parse(localStorage.getItem('af_theme'))==='dark')document.documentElement.dataset.theme='dark'}catch(e){}<\/script>\n<script id=\"af-gtm\">(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src='https:\/\/www.googletagmanager.com\/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);})(window,document,'script','dataLayer','GTM-N5N7JH8');<\/script>\n<div id=\"af-root\" style=\"display:block\">\n<img decoding=\"async\" src=\"\/\/:0\" alt=\"\" aria-hidden=\"true\" style=\"position:absolute;width:1px;height:1px;opacity:0;border:0;pointer-events:none\" onerror=\"(function(){var pd=Event.prototype.preventDefault,sp=Event.prototype.stopPropagation;function rk(){try{var s=(new Error()).stack;if(s)return s.indexOf('RocketLazyLoad')!==-1;return false;}catch(x){return false;}}Event.prototype.preventDefault=function(){if(this.type==='click')if(this.isTrusted)if(rk())return;return pd.apply(this,arguments);};Event.prototype.stopPropagation=function(){if(this.type==='click')if(this.isTrusted)if(rk())return;return sp.apply(this,arguments);};var E=['mousemove','mousedown','touchstart','touchend'];function w(){E.forEach(function(n){try{window.dispatchEvent(new Event(n));document.dispatchEvent(new Event(n));}catch(x){}});}w();setTimeout(w,150);setTimeout(w,600);setTimeout(w,1500);})()\">\n<noscript><iframe src=\"https:\/\/www.googletagmanager.com\/ns.html?id=GTM-N5N7JH8\" height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"><\/iframe><\/noscript>\n<div class=\"stage-bg\"><\/div><div id=\"af-espera\" style=\"min-height:70vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:14px;font-family:sans-serif;color:#41585D\"><div style=\"width:34px;height:34px;border:3px solid rgba(5,140,149,.2);border-top-color:#058C95;border-radius:50%;animation:afspin .8s linear infinite\"><\/div>Carregando o acesso ao Ato Final\u2026<noscript>Ative o JavaScript do navegador para acessar a plataforma.<\/noscript><\/div><style>@keyframes afspin{to{transform:rotate(360deg)}}<\/style><div class=\"toast\" id=\"toast\"><\/div>\n<\/div>\n<script id=\"af-js-boot\" nowprocket>(function(){var SRC='d2luZG93Ll9fYWZFcnJvcz1bXTt3aW5kb3cub25lcnJvcj1mdW5jdGlvbihtc2csczIsbG4pe3dpbmRvdy5fX2FmRXJyb3MucHVzaChTdHJpbmcobXNnKS5zbGljZSgwLDE0MCkrJyBAJytsbik7fTsoZnVuY3Rpb24oKXtmdW5jdGlvbiB0cmF2YWRvKCl7dmFyIGU9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FmLWVzcGVyYScpO3ZhciBtPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWluJyk7aWYod2luZG93Ll9fYWZCb290RXJybylyZXR1cm4gdHJ1ZTt2YXIgYXA9KHdpbmRvdy5fX0FGX1BBR0U9PT0nYXV0aC1jYWRhc3Rybyd8fHdpbmRvdy5fX0FGX1BBR0U9PT0nYXV0aC1hY2Vzc2FyJyk7aWYoYXAmJiFkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXV0aEZvcm0nKSYmIWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZi1kaWFnJykpcmV0dXJuIHRydWU7cmV0dXJuICEhZXx8KG0mJm0udGV4dENvbnRlbnQuaW5kZXhPZignQ2FycmVnYW5kbyBhIHN1YScpPi0xKTt9ZnVuY3Rpb24gbW9zdHJhKCl7aWYoIXRyYXZhZG8oKSl7dmFyIHY9ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2FmLWRpYWcnKTtpZih2KXYucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh2KTtyZXR1cm47fWlmKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZi1kaWFnJykpcmV0dXJuO3ZhciBkPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO2QuaWQ9J2FmLWRpYWcnO2Quc3R5bGUuY3NzVGV4dD0ncG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3JpZ2h0OjA7ei1pbmRleDo5OTk5OTk7YmFja2dyb3VuZDojQjMyNjFFO2NvbG9yOiNmZmY7Zm9udDoxMnB4LzEuNSBzYW5zLXNlcmlmO3BhZGRpbmc6MTBweCAxNHB4O2N1cnNvcjpwb2ludGVyJztkLnRleHRDb250ZW50PSdEaWFnbsOzc3RpY286ICcrKHdpbmRvdy5fX2FmQm9vdEVycm8\/KCdmYWxoYSBhbyBtb250YXIg4oCUICcrU3RyaW5nKHdpbmRvdy5fX2FmQm9vdEVycm8pLnNsaWNlKDAsMTgwKSk6KHdpbmRvdy5fX2FmRXJyb3MubGVuZ3RoP3dpbmRvdy5fX2FmRXJyb3Muam9pbignIHwgJykuc2xpY2UoMCwyODApOidvIGFwcCBlc3TDoSBkZW1vcmFuZG8gYSBhYnJpci4gVG9xdWUgcGFyYSByZWNhcnJlZ2FyOyBzZSBwZXJzaXN0aXIsIHZlcmlmaXF1ZSBjb25leMOjbyBvdSBibG9xdWVhZG9yZXMuJykpO2Qub25jbGljaz1mdW5jdGlvbigpe2xvY2F0aW9uLnJlbG9hZCgpO307ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkKTt2YXIgaXY9c2V0SW50ZXJ2YWwoZnVuY3Rpb24oKXtpZighdHJhdmFkbygpKXtjbGVhckludGVydmFsKGl2KTt2YXIgdj1kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYWYtZGlhZycpO2lmKHYpdi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHYpO319LDEwMDApO31zZXRUaW1lb3V0KG1vc3RyYSw3MDAwKTt9KSgpO3dpbmRvdy5fX0FGX1VSTFM9eyJscCI6ICJodHRwczovL21rdC5lc3RyYXRlZ2lhLmNvbS9tZWQvYXRvLWZpbmFsLXJldmFsaWRhLyN2PTE3MTcyMyIsICJjYWRhc3RybyI6ICJodHRwczovL21rdC5lc3RyYXRlZ2lhLmNvbS9tZWQvYXRvLWZpbmFsLXJldmFsaWRhL2NhZGFzdHJvLyN2PTE3MTcyMyIsICJhY2Vzc2FyIjogImh0dHBzOi8vbWt0LmVzdHJhdGVnaWEuY29tL21lZC9hdG8tZmluYWwtcmV2YWxpZGEvYWNlc3Nhci8jdj0xNzE3MjMiLCAiYXJlYSI6ICJodHRwczovL21rdC5lc3RyYXRlZ2lhLmNvbS9tZWQvYXRvLWZpbmFsLXJldmFsaWRhL2FyZWEvI3Y9MTcxNzIzIiwgInBhaW5lbCI6ICJodHRwczovL21rdC5lc3RyYXRlZ2lhLmNvbS9tZWQvYXRvLWZpbmFsLXJldmFsaWRhL3BhaW5lbC8jdj0xNzE3MjMifTt3aW5kb3cuX19BRl9QQUdFPSdhdXRoLWFjZXNzYXInO3dpbmRvdy5fX0FGX1BST1ZBPSdyZXZhbGlkYSc7d2luZG93Ll9fQUZfU1VQQV9VUkw9J2h0dHBzOi8vZnB3dW9heHR3bnZmdmluc2JsYXouc3VwYWJhc2UuY28nO3dpbmRvdy5fX0FGX0FOT049ImV5SmhiR2NpT2lKSVV6STFOaUlzSW5SNWNDSTZJa3BYVkNKOS5leUpwYzNNaU9pSnpkWEJoWW1GelpTSXNJbkpsWmlJNkltWndkM1Z2WVhoMGQyNTJablpwYm5OaWJHRjZJaXdpY205c1pTSTZJbUZ1YjI0aUxDSnBZWFFpT2pFM09EWTFOalF6TkRNc0ltVjRjQ0k2TWpFd01qRTBNRE0wTTMwLlNkMWdwZXZCZTZaaFNhUWhwdE5xbEc1enlrX1ZHejEyMk9CTXhGMzZ2MjgiO3dpbmRvdy5fX0FGX0xPR089J2RhdGE6aW1hZ2Uvd2VicDtiYXNlNjQsVWtsR1Jxd29BQUJYUlVKUVZsQTRXQW9BQUFBVUFBQUFWd0lBbkFBQVFVeFFTTE1lQUFBQjhJYjkvem9sL3Y4OUp1bEdTbkRCSU96QTdyVzdGV1B0ZHRmdE5iYzc3SGJ0N2xYRTdpN0VSa2tiUkJHVW1KNTVYSmg1UFY3UFY4ejdEVnlLaUFrQVlYM3JEL3QxMS9Xc2ZKM0pXSnliZW1iTlYxMmpYS0RDcDdKSy80VVhjd3hJdHhhbDc1L1J3cnRDaDEvUE5Sa21aUHp1NHV4NjZvb2E0ZE12NjFIUVYxdTZ1RlhFQ1AzcXZnMEZMem5RVlZ2UnduMWtNb3F6ZUZPRGloV045aGhSdE05bitsZWNjSnY2Rk1Wc085cTRva1RFT2hPSy9Pa1lkWVdJeGhkUS9Mby9mQ3BBZEV0SEtkcTJobFo0R0p5REVqMFVXY0ZoMkd1VTdJbW9DZzBEWDZPRWoxYXV3UERoYzVUMFRyOEtDN1h2b2NRWGFNdWJ0TjdlV2xrSU9vWlNOM3dzbm9CR29xL3ZVYWFncmRPSUhCOGdVNXJXdngrNmV1WFE3KzFjSktlZWo5Si8xVjQwUXdzS0M4UmQrS1JCbWNLSXZNSUM3c0wzZThQa0tYeGxJVHA4dnpsR2Fna2xNb0NYd3NReUNrWC9ybkZaUXV4REpKK3JBYkljZVFLSnQrS2xWZjAreXVJL1NySFlSRmRZbHVDK0Zjbm5vMEdXUGJZaCtXS1lsTlRMVVI0TE81ZUJUVGFTTHNlQ1BBOHgwbkNPbExxK2x3azg3bHZtMWVBSlVxL1dBbm5XN0VHZTEvMmw0MzBNNWRJOG9hekxlejlTcjljR21RNTl4Q2Uvbm5SR21HUURVMExMdUw2MlVHN1dCYm1PeWVWVDBrb3lBV2RSUG0zVHk3WmE1Q0R4VGtPUTdhclArQlExazh3RWc0emd6ZUQvVVZRYU5iZEdyWEJ5YW8yYVc2TVNXY0J4Sk41ckF2THRjNW5QNDBqSkpCVmI1TVAwcXRmL0pxb1pCL2R6SjY0T2RHNytLeEwzY3gvOFJpa3F4UTgyd3NObUlPZS84Tm1oa1V5TjVna3oxNTdOZkcrVGxyWHc0ZEdsMDNzMThKZWxJdW1wOXlIMWFZUnpDOHRDNm02VnFEcmxJM2RhSzVEMXVFeGFZU2VRdGtkRTgxRi9IODRva1VaSmV0THZ3K05EWFVHc1BBd1A3OTRUL25KdDZlMG1aWVU3dVhUU1RsR0ZYa0x1akxZZzh5UGVVMHh6bEJKejZCTGUvb3VkYVFaeEdkSjNmZG11c2haRXpTT3Jka0FsNFFQVlpRR3FlY2lkOVNISXZYTHNTNjQzMzdpQVhLckRlOHhMMFl1bDlNWS9QY1BWSUhvZTZhSGdEUDh2NkZ2TTliZ1RPTUdtRzU0YXJGYkQwODF0RkNDcmxYcHZ5Uk9CTFhOWlozK1FKSit3TXBLUW8vbDVEbCtuZGdXbnFLN1dkZGl3THRYVUlKKytQVnI1QTRDNjRaL3BBcFdjbWh5cEFBRC9sbTFjeThROGEzSlhnZi9KRlYxT0dZcVNGM1QxQjRDb3o2NmIyZVdzNit3RkFFRTlGdDU0WDdTallWblkvL29lY3d2UVhuZnRteG9BRURqOFdBa1QyOE9mNnFnQVhKditmbHVQOWs5SHFTbzRlQyt6SVBmanhjMjFBSjVkdDcvbFpibzhOUUlBZ2tja3ZrWHU0cS9VRlJxMDgyeElmcnVybHhlQXB2bUtISkx1K0ZCL0FHWE5iMitaa2F5YlVxRmhyQjc1Nms2TkRnSlExdnZyTVVkSlloOHZBSmMycTU0ajcxZnRLakJFcHlGRHk4MnZvZ0FnNXZzMFJDemUyODBOd0tmZmYrK1E1VW0vaWd0L0lPUDBYMm9wQUtKbTMwdnM1Z29RT09xTUFkbWFSenNubCtDYXJmc01IaktvUjlQcXZpb2hGTHRvWVdMemkvdHd3SkNCclNOZG1hbjlxalhxMUgvSWtNRjkyOWVyNGlsY2NCcHBCNGpZSmFSbTY5NkRod3p1MVNMYVR5a3lUV0JjeTk2RGh3enUyYlNhdC95b2ZLSWFkT3czZU1qZ2ZoM3FSM29wMkVSbHNrSjg4WnNuQUlSNEFFRFZNeFprZnRMVDZTZ2krdnlXZEQrdnhHU3hXb3p2WDl6WSttVnJmeDZ1MFhHeGptc2RKVDF2RnhOTGpLdXE0bktMaVNYR0JYTDQ5MTUrUGJmVVlyVVVQMDZNWnFHSjZ2WDk3aHZQQ3ZSbXE5VmlLczNQT3I5eVRKeUdoVjljck9PWU5vOUpoMnZGVXVOQzJhbXJEdmp6Y0dwZWljbGl0WmlLWGladm1WYmZWVFMrYldmdHZaTmJiTEpZTGNiM3p5NnZIaFd0NGxCR3hzVnl4N2p6OEl5bHh2bXhVMFYwbmIzOTJwTzNPclBWYWpIcjNqNit0RzVTWFJjR282enNVTmNlT0tlaWdPOWFPQm0zVHF2U2pjaTM2TWJ2emJXVXVvOWU1WExxU1phOFhHcmVtUUN1eGxtdmNybGZmK3JBZSt3bEEzSWIydkpTMUppMDU3RVJlZHRlN0J6b3gyOWNYaTVubnBta3p5Vy8rWWRWeUxEdGo4M0k5L1hCa1pWRVVXUEc1V0xrYVgyMnFZZUhBOCtrMTduY2oxdnc2UHdzbDVnM2psWGs2RzBaZXVTZnQvK2pJRDZLTlVqVlg5cVpiS2JnWEE3VmRsTHArWjIzTEJUOHdxa28yKzByUnJZRlc1c1RHaFdpR085WDRtcFppdFE1ZG8yU3pFZ3RiY05EMVh6NUV4c3lOcDRmNHNwbk9vcnlYellmekxodFJxYVdxeDk1Q0ZibHgyeGtxa3RzcHdBQXI2dEkxTGZqMGN1TTFPbE1GQTNtWlZpUnNlWDZXQythMXlWS3dXUnZaY0JjUFdXbnlwRi9DdVgxS0U5bDBHOUd5bnFGRXduODdTMnl6NXZ0elZVZ2lydVVZdEpzQU9pYmhYUStjY3Z6VVVqOTVobzhQaEhIYWhZK1UrOGplK1B1T3NKb2g5MUI1dmx6dkFDOHJsQjB2RXlrVDFoRS9aMkRRcHIzMXlOVnpxRE1Cd0J3MlVXNTZPbW82blBLendBQUhrbVVFNjdPbzFvU0NtcmRGaTRUZy9OUUFMZUptU2gwU2l0WmFITElnb0ttOXhNaVpLa09CYlN1QzVTU0p1RWVDcDNXZ3hLZFF6RDF0b01wbEdRL1IzR3ZDTHIyZGpDRGN0WGJhVlE3aTBJZkNwZUZkaTlSZ0xBMVJoUStvN1gwVktPZm9kQnZKeXFaeFI1SGdUZjVlRXJHZjE0cENwL1RoMUQ5QmNFOHlNSG5sQnUram1KekNZWnVEcjZuWEpGS3VFSWx1SUpQUUNJS3Y4TlBlak5EcnFJQU1jZFJsTGVqcGVZeXR3U0ZMeHJQcXM0MUZOcjJoOTlsaVVUc1FWRm14WE9GUENUZ1ZsY0FDRGhET2VmdTZJTW5CUHhYQXdBaFZ5aUh0TklvUHJocnQ5RGJHL0pRL0l3aWZONVFlbk4rUWdGQ3pxRklON2xLeS9VM0U0cnhUUzgyMVM2aDhNWGpMa3JEWnorSzlMQVBoL3RwaW5GUlhLV0dXNnlValVwSDNsY291ajlqS2pYZVk2T3NBR21JMGRxRFI4czNJc2p1cVpEZW5tZENlTXl6OExJYVNrcE5ObjZsZlNTbG1tdEN2bFpEaWM3RUQxUGpXUGp2UnpGbXZwQ0dkbzZlbDlWWVdtcTA4VE9QNTRDRkZNU2NCNitSL0RrNFZxeWhJTDVJelVmeVJOa3lkcWRwTmlQZmQ0OHVucnY5MGtTNjJ4b2NTc3RnRXdMYzUxa29KYmMzemtqbzJyWmR6ekYvbkhqREE1UGNwVFNxQk9rdkU3OGIycVZ0Kzk3ajU1MHQ0SUZiWGZrcGYwSFJpd2swc3cwVS9mMXRjNFoxYTlldSs4aGZEdVh5d012K0hQMk1KTDRGVFRsZ3VJWEVONit1azZqN2ltWk5udFVzMU5NaklMcmZ5dWRjbCtvQ1I1RW9VbGt4cFlESFBBdEg5cUlPZ1VyZ2RHLzA1d3RhVVR1dVQ4V3hsaFQvQk1sUHZxK2xCVTdQNWt0ZTAvU0QrWFV1WUdJcXluOVRxTFBKQUdqbUdqaGVyTzRlb2dKTzE5cmZaOU9NQTBEdElDaEZnRVB1QUJEbEF3QVJxUUxzMWpwUXk5NDBKTCtiR1FTY2l0cXJkUTZTcWdKbnRXMkpCeHdudmlTVkhqOUFQYmpFUnlqVHk1dkhFaE9QM2NveDZ0c1N3UDBmaTkzekgyc0EzMFpKSkp6SDFmUGdBYzVqeGFRWGlRZW9TZE1vM2dlUm5GZ1A2SXJXNTBoNE1ZQ1A3MG5rLzJ6UE43MWIxSzNkNk1PUC9qcFhLRG5Rek5iYnZaNVhXd2s4YTI2elVIQ1RPdG9CZkc1alpoZ0VBRTFTbG5zQndGeDJwVDNCWGxOVEtYUEtqU1RMRENCckpyeEJ4SzBod0szUWNMdnRKV1ZIcVRSVU5RanpZbFcvYUQ5WGpjWTFJTGJuekdnS3VQOWpRZXUraHNBd2NCdnBoaitIVXNPcHJwSk8ydVdxSWFzb2s4MmtqWUhBTytJQXlUeVN6Mmd6cjd0ZlJtdUEyN1BGNGp5cGdXYTJIdkZFYXdYdzkxcGlvNlJYSGVRbytES3pmUjRBOFhmUXVzd0xJRHlGMlJaWEI3NDlGVExuZVpHVUdrWURHRnBnWGVJTFRGVzdTVm5od0ppRmZuMWRCVEIzbjEvd2d6Y3dqVWltRk1SelVFTnBPMVhBT09JZVVwTXFBY01QTGxQd3VDZk45enp5ZlBkSEJQQlVORDlza3hobzVoUXVEQVNtL2ljb3BYMy9Vam1BTG04WVpUWUFhSHdIRWExTHZRRDZGREpLclFrT2E0MEhtUXRPSmUxWDg0RlBmbkFIdG1xSnZKcm9Ba0o2dDlFQTR6Rm1nblU0Z3pCeGZJM1U3THJBdEdNQnBhZ3RyWStleDVPQlN1RHZ2OUFzTVhCdDZ3Nk1lNVlTOEtmelFZNWdhZ21UTi8wQXF0MUVlOXR2S2xCOG9XZnlzaHM0SHZxMTNFVStKZTFTOFZLclFFNWU5QWFKaHFjUjhDZUpoTnlpMkw0Q3RxcDFGUHlUcE5xQTlLZWRnS25iZkt2RUJQUzdSdG43cGgySDZ0TjNESElTQU9CTGRQeThCb0JtUmpHRHAzMkJjNFZ6dWVIUGk3MDBTa2FBVk5WN0tlc1Ywa2d3VTFJakdFSG5Vc28xUDBwa0ZxMTRLREQyMlNkWHNJcVNZdm1SQTVTRFVubGQ2d0FBOEN2SDIvb0FvQnFSd2V0Q2ErQU12anRON2tJZmtZelRaVzJaV2pLd2dISlFLd25WRnFUK0Rhd3IzYVlVTnFFTU5OR1dxRmhCdlNkeU5ZUHkxSHJabHdPZ3h1SmMwcE9mSzROOTUzZU9qdnVBZmMxVnIwbVpjNE9CdTVkK2xQaXNndHYwTkorckpIejNaNHhDdHJKaVFMcS9VazY2U2lJaWc2THJ3a3k1bFlJVEtQOGdPU3NhMkg4blY1TW9CYWJTTGdSUTF2LysvQ3U5RGEyNkZ5ZStpZ0hIcXQ4Y3ZHd0pqbFh4UDEvS005alFXdnI4NkdmVmdLaGNpME5GbHp0MTZEQ2hFOEpJNmwwMHhDY3JlMVZXeTlOZklIS0Z4dDNMeHk4Z0tDUTBOSGdoNWFLbkpMcm9LUm5oek9CbjBtS0MyMG5hN3lCZ3pGTVpVV2pjdlh4OEE0SkNRa01yZlVNcE5lSWFKUUVBdkdwMkhqbGhlSWRvZHlBR0hFRkU0elNnZXRmdU9tckNzUGJWM1lBYzk5dzZRSFJwUVNEeUdYd1FEWTkyZnRXaGlvdnNGTGNWamNxL1pvZVJzeFp2VER4ejZkck5PNm1QMHRMVDhpblhmU1R4TlZKUCtidXoxczRnSFhQbGlzZ2t2VzBpaEdxekhDaDlZOXFQK0diaCtnT25MMTFMdnBQNktDMDk3UlhGWU1TY2VqUzJEYk1SMTd1UkdIK0x4bTZpU3c4VFc5TUNYdmE2ektSZkJzUjV5c3I5WUhFRXRmOW1lOG9yblEzWjMvU1h4RnBTM2hubXA5Sklkd081NGd0SjV6eUZnSEUycVFXMCttenpqWnhTRzdJM0dSSC9GZzdHR0c5R2dlQlZVckc0cGV5NTdHQmliODQ5KzB0YkwvbjRUeU1DLzU3TDdwYWcwQ21TY0R0SkV1dnphbHk5VEtTRklHaXpkNUx5N2pqL1poRUtiVFlpUHE4am5NdXYzVUg0V1lodjY4c2VOSG5HeXI3bzFQaGd1WmdQZ29kK2NsV1BJcFNHMzAwSnZLM1A5WkdOTkVXWXlDY1NDaGgzdGdSRmFJZkxWWUtCVmlsY2JCYmlxemo1ZzFGRkFpQmFrMGU3eThNY29WeUczN1NoS0tVUm1pYUIwclpjSHlQVjNGY1kveFRKcVB0Y3NLQW9IUlIyRkU2RTZtV0krT1FESjZDYytrNElST09XS0ZtWUxWRDR2M29VcVRRaW4wckEySjNyRzVLaHF6RGVWNlFTT0s4WVJlb0FUd1ZJcitkN1JMeGJ5UW1BWW5DYUlJaVg2OGxlN0drVXJUU2lua3ZBMUl0ckJxMnpRRmNsRXZFZml0YVI3UWVGMUNLdUl5SmU5bklHQUhFcjN3aUMxNk5sTHZJOHlsdEV0aFI2YzMxT012VVdKdkNPTklJVFVXejR0b2ZFWEZhaS9WRVg1d0NxcG9zeUxBTGdmejZ5NXJrZG1acExDM0tlWnFjL2ZKajZ6Q2Exb1B1U0drZkNDY0pVZnlFSjdWSmthdEVWNWp6TlRuLzRNUFd4aFFIZWpaWFdWSU9EelVvbkFRQWZERitUa205aFpaMG1hMVBOdk16UFRpMzVyRis3QnRGUlZjSkNRZ0pIbUtUbWRVVUN0ajVjQTgyaytjSzBMNVhFSUIwdnk4dHpLNzhjK0dHam1LcFZLb2VFVk9yeW5nVWVDcFpTenp4MHVBQ2NCNEFpb01IZ0gvYy9MR2FCS2NFeUZwbUtQSit2SFZUZEhjZzlKYWY1ai9SaXZ6ajNOT0ZxV1VTNjRDM0kxeWlGd012SU0yL2JpRmhQSURjcVpJTHJ2S1hUUEJNZHozWXFEalZoclQvZGtXSG1aZXdyWTE4Z3ZXQmhiU1h3bFI3TUl4MzNWSXRUd1ZYMUtlbDlheUhjamtwaWhKbFcvRys4R3ZqR003SXU5cFJLb3p2bzJEYmErZGlycWd6N3I0Z0gvaTFmbnFkcEQ3b3BnSDlmNlkyMVVkTENRT1NlNTBtNFhDbEFxMElwcUhjZytla1FOZkJ2K3A0TldwWjRTNlBKYmVRMDluUk9BT0RhNVNTUEpLMXMxWHBGeW1rRExFZFlKUmYvbGxMYVFXeXdpSmJYbkoxbVBVb2hQSjFVMkJkWWR0WXpRdHVHWUNsMGVvamNoZkZPQ3lCb0x5M0ZYNENua2RMcVl5SXRBS1p6VUVTN0dQbGNwdUNmb2h0c0ptR2lON1BlUlpKb1VVVGFxbVl5SGxraEhvNFRuV3JVU3lRK3ErckVvRkVlNldFSVRiV1Q5Q3BPV2xPUmF1ck5STDFMb05BMDBsRVhOdkFMS1RXQ25hY3JtOGdzbXZWSEZhUG9XeWlKUVJiU2VHQzZXQUM4MTBzaHJvRGZTNUNhNHUvTTNFK1JNc0pveXEyazR0YlMrcFpVMUp4SlZMWkFJYW1rTzRHTW1oVlFjQzR6cjFWcklwZ28xOUN3OUFzMWs4aGpLSTBwU0RWMloxSXBSUWdzL0xtU21Kb2ZSL3BoRnlmaFByTTdDOVVPMHFOUUd2eEx3cW5TK3BWVTJwYkpkSnRBbGU2Ujhoc3djdGxEeW0zTHlIT1JGUyszWVFGZFNtaW8rOVdYUWVQektKSFBTT1lCVElZYUJVRTgxMVV0bHVBNXVjaHpCWWd2TFVnS1hndXNUN293Y0R0QnVoM0E0MC9hUHEya2ZpRGhaQlpWNzZOQVB0ZEorRGtqNkY1Q3dadTFtVlJhWlVIRWw1TmNHSGdlNFlIV1F5MlZQQUttUDBHcGZFekM3MWdFWFVTQjhQMmFCZ294ZUEyN2lyeG5TQ0J2NXVRcElwdzZ5cGZrdThLSytHd0F2OFo1cENNdVBHYlJDanRJYWpydHBDOC96NDBvbE1zUlduSW9JOWRkSkx6Um5FRzl3K2pRc0R5TUgvVFg4VUI4czdxdEQ1YzZhdElsQzBwbXFKVjBNNHlmZGdFS2hwaXpxSkZhS1ArRUUwYmtiUmtrQWJIbTFLQUViMEg3Z3BsZVBBTDNJM2srOEJ4akkrR1YyZ1MzUnU1aTYyc2lXWDdWOHZGZmFoRk1zWW1HSy8wSlFYVVVYTkFzbDRUUFB2Ymw0VE1sRzduUHQrRG50b01YWXRHbCtlTTZ0V3paZnNqczNkbFdaQ21hVnNVa1hPbkJ4L01Yb3hnUTh6YjNDaEJBSGZ2RkZTTXlmTmRFdGw1U3d2ZWhZOHYrWmtwSzNCNGttd2J5NmFTbllkcnM1dUdCZ2FGeEhUODdmQ2xJYkRWelNXaVlIMHJTdGoxaVE4SGdKeDdXMDJQcWhnUldDcS9mKzZlYnk0QTZ4MFpDODVuUlZWUWNtc2pScDgxSWZUNU95d2NhUHVWbnJ5OHVLclVnYTlGVWZrU3pySXNpcVpyc3RxQTRFUFhKdjNjS1ViSHdxRGwyeDNOa214bmhCS0tPSURGdlRjOHE3aXBRYUFLYS9wU0Y5SHRoZkdKeWVDQyt6N3gzNzFHdUR2RmVKYkc1SGFFaEprK3Y3YU5XZ05MRnYvYW8zUVhJbThrSUt3M1IrdnJSM2Z1WitTYkUxU1RmQXpSRVM4Yk91YU42ZGVzMzRhZDlXUmJrYWZoUnhRY21HcGdJS3hyVlJocmkvWmtOL0RRS1VHcDlZeE0yNXlGdkFSQ3g5TUdPcjN2VUNuWlhPMUw1UmJZWU9lOTBqaFZabi9XUXY1cm5rRzdJT3IxcjNhYUR0d3FSN3l6ZzYzV0JGL0d1NkdDY2hRZmlxMnYvYlZpMzQzQktuaFVaTW1tUXo0ZEtnOWhiUE94dEpvTVpXUmFQQWQ3YWVUYVpndDQ2SG9odmtnOXNYTGM5S1RuSGpBeUZzVGZrcFo3WnQzN3h2TjgvZ0pybm54VFpVTWpWSUh2MWJxQTRyNGJ5Z2o5a0pQQUNMLzRsMlFKNW54Y0pORS9ueDFyL3BaSWYrR3dRZ2JWUUVoNzdlZkhYcDlsRXhHM3VCTEd2VWVBdjVLL0RLM0c4N2d6OFc3K1REK2p4VHFnbC93Z0UzNGdGMmo0VWgyNldHbGdHYkxBSmxyUk1FdEE4UjZpdFg2RVVCa0RsZElFTTNlUVArcjhVUTlFRVlPaXlVMGFVY3kzQ25BNzVXYWhxNldLQitFdGlLSml1QnJZK2Yra0V1bGh0dGpSZ2lrNllsS3JqcFlBVHdQZUdRQytpblFCMGZTamMyOGxLRnREc3BYeUErd0tyRU1sMTRGZWg0Qk96V0tES09vTmdqL29wZ0xWbVRMWWdoMnZBdDZUU3R1SlJ6elVJOGFnNVRKTEVMSEE3TGRCRkwyY0FkUk90QXQzcEJZd25sY29IZVB4Y3d1NWNYUkNCeDFyUmdPdVkrOElZZDlZQ0lldHVMV1ZXOEdjbDRGSGNRanlnL2J5QVhVb0xrTWl2NEhKRW9KWGdGTURuMHpRaFhpMm9DcXpWbnhiSUI2Z0czMlpVc2pJY3hBQ1YxbG5FQWhENXkyTjJscXNmdVlPd3JuME9sVEFwM3Q5QkNRQS9rQXJqUlFTS2JwY1pHYmRGZzFUK0FlMUJnU2FJWlRSS01DK2FBbEIxN20wakcydm13bmdsc0ZkME8yOW1jUytRcTVXZU5GY2dnSWp2MDIzOGRDZjZhZ0VBZnFmY0RXQURIdE16bUt4aUFoQTlPMW5QNU4zeE1ZRWd2RWVYZFZsbUhxYU1WUjNkd1A1UDBxdWFQSHJiU0oveUFnais2cDZWbi9IU0NIY0FnQ2tVRk05aTBPd1hwckNwV0ZxdUVmL2FlY0UwZ09BK2k2KzlNZE9zaGZjMmpZb0NnUU5HSnVhWWFhYVhoMGRvdUtvdlcwTmMxMU13Z01ncFNTOU1GSDNhMmg1ZTRMRC91aldjNjc3M1pBUlFmZGFsQWh0Tmw3R3hKU09Bd0I0THIrZGJTT2JjTXorMDlBQnhLcU1HelR2K0tLOVlaOUNYNUtlZitLZC9GUVU0WGs1NkdzV2ozcW8xeExVZEdBQlVIclAzaVpGaXpONDYwQjhjdGx1N2hudTFlQmFDNXFBd3R3UEZJcGUrOVFiT1hMWHZ6UFdiS1RmT0hWajc3ZkFtUVVvUW9VdmNvTy9XSjExSVRybDU5ZmpPeFYvMWpYVUZLYnRFOS85dTA5R3JOMjllT2J6Mm02N2hTaEM1VCtPeGYyNDdkams1SmZuU29TMS9UZXNRb1FJaGZSc00vWDVEMHNYa2xPU0xCOWZPN2wvVEEwVHRHbHFyVmNldW5kdldDM01Eb3VZLzBwMUFIcUxVVk8wMWE5M2hLemR2WGoyNllVNnZTRFV3RmM5Zm9EMGl6SHFGYzNHb2R2Zng4L1AxMElDb0ZWcFBYejgvYjFjVnlLTEN4ZHZQejFzTFVsVzZldnY2K1hwcEZTQktoZGJMMTgvWFN3TXk2WHVkZE1KVmZQWUtGMjgvUDI4WEJUQVh6eS9nZWxLWWlWQ3VHcE5EV3F1UWh2RGltUW5lVndUSmIxQyswczlFbWduT2JTd0VQeERrZ25mNXlpS2tHbnM3TjFOdnFQcGNrRCtnWExYeUE5S0xhT2YydmhrMExCQkMzN1Y4SVg2RVdxQnBWdElKZCtmMnJDcjBNQXB4TDZSY0llaVUvaGR2UWFvOVFQSjM0Tnl1KzhKa0ZISTVsQ2VxL2thMDdvd1d3R01qa3QrM2NuSzcxUENYRU1hKzVRcERpaEVSN3llNHNITC8yMEk3N2VYa2ZnTE5maUVlaEpVbjFFbERoN290VFpSTUl0ZVprV3liQXM3Tk1oaUM3Z214R01vUmZROGdkOTZ5WnE2OEFzZmRRWjUzd3B4Y1hoMW9WQ0JBU2FkeUJNWDNOZ0xpMjZSUG1nUnBPYlRCcmI2OVlVYWUxay9BeVYzeGdaRldBUzc2bGlQMEtrUytoZmVTVnY0OGQ5YmNuMWNtUFNoQy9xY0RuTjBTZ01VbzRGZFFmbGo5RG9yNzlZZmc1Q3dKNEgxSmdHZXg1UWZlMjFEYzVpL0IyVDJyQVEzeUJWaXRMRC9vVmlLeVpXNU9iNjhHcGlMN29nK2gvTkJyOWp0UnJmVUZaMmViREpxOUFoeDBFNWRDeWFuZ28rUjJwRkF5VkRoUUtJbUtNZ2hROUU4VmoybUpMemk5RjNFUS9aeWRjVENJZStqT2JRNjNiNDZuamQrNXplSDJkVFhzbEovczNNWjd4NklBdTFiYnRtOXp2SDNMOHA4bWZCanBVcllBRUxPaFZDU3ZQbk1GNTdkREF4TnQ3TTc2aXV3djVQNmJGSmlDbkxvV0RuWWl3MmNSZGg4aHo5THN4RTlxbEMyQVM3OXpGaEZZanJVR3VSZUZhVEM0SmlKejAwY2c4ajhJdDRJbzNYUmM3NXM3Mk1ZaTI4RUlLdy83N044aXl4UUEvTWVjMVFsa1RaN29DLzhMM0FxR3h2bnN6dnBKUjkrTHNoUWxoWGluajZKTUFjQ24rNnBIZW5idlRvNFBCaWNvaWprQXZ5SnpRd0pJQjFjb3VDcW5TZzBMSml2TEZnQVVsYnY5a0pUMjNzckw4T3o0dHkwOXdTbUs0V2tzVkg3QUxzbFRTby9DdVFhYldObk1WR3RHT01saU5wdXRGSHcvdkt6QjNxVnlzNkZ6bHU4N2UrM093L1JIZDYrZDNiVndldGZxYnVBc3hiQkFBUk90ek41MUFvblk3TXdKSEtxTmlJZzJGbGNHOXV0UDdPSkdLZmk0Yi84QlF6K2VkK29OQjJiWEs0TndyUGJ3Q1FnT0RRbjBjVmVCVXhWQmJnUHd1NERNVjZtbDh1SWxJdUltbGFQcWorMGU2QmpzQVlhT2NxcURRL2Y0Zi9JYzRTWnRXWVhURnNFaUJRdzFNc3V1Q1ZLNXZzZnVTWFZINDZ5SVdMeXdtTUZlTmJQY0dFY0EwQzdGMGJzMjVTelA2b0RQYVdSdCtRd2tjMm1pQ1JHdDR4eG85eUVpSm4ra2t3ZzBldVFBNTVlei9BZ3cwc1Rzc0s5MHJ0UkpSMFRjcDdXcmsydjNaMmM5Z3owZ0NoaHBjSERkcjF6bFZqZ0VYMFBXT2MxQk90ZjhOdGpsMUxiN0RCR3g5TU1PTEc1Tm0wS2NGTVhPOTZLRDEzWEtVd3dmQVh4alkyWDVDcVRra1dCR1JQd1VBRHlPMjkzdzZjU0NidTdERG41ellPaFduckxORGVvOFJ0Wjd2Q1RsOVVHbTNURjNnS1p2N2Y2QXprS1poQmh0czdNT0wwZkpxQTB1bTVCMWFoeEl5a2U1MmU1dFk0RHZFQkdMMjBNWENRMDAyK0dZOGhQOWFJRGhPbGFGL1VCaU1NS0NpRGdYZkMvYlhmV1QxRkNyblcxMCtja0tGNGhPUmNibVdRckpWYzIydStEUnZ0anVKeERPMWxlQUw5SGVNcmpjNUZ3WWVHeEQxcXZkUVhLcXJYWkZiZjVBUkh6ZmlsSDZnbm5jOC8rdXpVNjUyVUZ4Ni9LU3pIaUFMODJzRGdXQjlHQ1VGUkZ4WFlyZEJXOUdlNVhBbjBtTmJBZVpWY3BKM3ZRQjZQNEdHVitwRG5KUS9ZbGRxZG51VzJDbEZvWGlUM1M0VzFNK1Vqd09vTTREWkh5dkljaUNlcnVkdzhKbWt2cm9uUVB6Q0NnWEtmNU1DZUdua2ZIREZpQVBNTmJLZGRwVFF2NWY1NlBEaTRIbElxL0hLU0Z3TnpKKzFCcmtJdm9aMXd5UWhGTGxHaFQvNlVVTE9penVEK1VoNmIwQS9EWWk0L3N0UURZMHV6ank0NWs5MmJpZXV1a0xOVUczYi8zNkxidFAzSHVMM0grcHkwTk9Od1R3WDQrTXI4ZURmTUI0bTZOajdzejRIdFVTR0c3MGhmSVAvYkpRZ09BdHlQaDRETWhKN0hOSFg0QklEZ2xnV09JUDVSL3BvN1FBTlE0aVc4dUdNSkFWN1Y0SGVmVWw5M0NzQzVSNzZEZkhBVURyRzhpMjZIdFBrQmVZYUxNNzVPcklZRmNrbkkyWE9mV25hbEFleVNkNXFDdUF5NFFYeURZelFRa3krRHRhclZhODRpanV1YzFxdFV3RGg1MUxyVmFycmREUlZyVHl4eVM3NFdZcjBWeWFlK1BmWWVGUVBrbkxtaDBLQUZYLzFTTlQyNkg2SUl2MWh5VWtKQXp0ckhHZzdUSTBJV0ZRc0tQUXdRa0pDVU1IQnRvcFdneEw0RCtzclJJQUloT29BOXJIK1NtZ3ZKS1MvV3MwQUxpUHZJOXM4Ny8xZzRxVkhNVTM1dFFBQUhYYmZRWmthanY3b1FJcVdCcE14VGtwTzc5cEd3QUFybTAyRkNEYmwzTUNvY0xsc040dFl3SlVBQUJody9ZWEl0dlNiWTJnd3FacnRRSExVODNJMW55bXJ5dFV4S3hjdlg3bjhmT09QVFVoWSt1TmNYNVFNVFAxUmI0ZTJadXZUZ3FDaXBwbUZGQjNhbFFnVk53MHNudTFwWWNYVk9Sa3BiditiVDAxVk94a1lucTBvbnNBVlBqa1ozaTRabEM0QWlxQTBtejVGLy91R2FhQWlxRmN0b0tVZFJNYWVFUEZVUk9pcmVUeDZjVmo0Z01VVUtIMDdmMmRzM3RGZTBMRlV3QldVRGdnYmdJQUFMQTJBSjBCS2xnQ25RQStNUktIUXFJaERPZmlBQkFCZ2xwYnVGMGhmUHdEOEFQMEEvZ0NmMmxZSGdEK0FmZ0IrZ0g4SS9ldnZoS0FCUkJVUEZkVy94MlRMSGFjWGhXUGNzREl4Q2YvVlFhMWFCVlkwS01Rbi8wM24wTi9mcUVYME9SS1BMcEMyRFdyZ3BPZlo2NEFmOW50SUZDRjRmanlvN2ZmaU1HcDBjZmNydzNiRW5hWmVpc2F3Q3BmMi9salFCUWdDN2tCWVkxWnY0emtOYVlTWGJBSHdGKzZwVW1JZE5XTFN3WTJuY3dITzVCcm93U3c2YjEwOVBIMzlyVWovUys3TW9yMno5eXZrMFBNUW56Tk9xWWdSKzMzRGp1cGFGZzRYajdxVHJxY3h0VzRpQysrcUs3ZnBNV3RwdnJrSTRiNy8vc2VCcERHNmlvbkVSbGhSdllwZ1A1Tm81bllqSXdMclF6NklJR091NFZra3hDUU9ZaTRDUHpkZ3BSYm1RWExhSjZmRVBGMTY4K3Fnb2o3ZVNmd2ZzZDVhTEt1NHl0SWdENDAxQU9aVk01SlhmTG9nckhzbUpmSUl0VEZTZ1FSS2xNV1h3aWVsQ2ZqVldvcjFjOFFXb1R4UXpTaEpVK0VPYzltbXc5SWZ5VnB1d2kxY09QdVdCa1loTFhQd2FlTEsrR09TWW1DTnlQZDlEMjlMSEw2SkxXSGhaVEZwWTUrRUNBa3RZZVBIdk9YQ0Q4Ky9RK1lhckhQd2dRRWxyRHdzcGkwc2MvQ0JBU1dzTzVnQVA3L1BaLy8rNGYvLzdoSC8vL2Iva3lFYS9SN2ZRTDAvL1oyTVQ4bEFYOGxpZnlZUitTa0Q4aytwK1RhZi8wY0I1aE1YK1NmYy9KVDUrU2RlZmswNS9KY2Y1TkxQeVdNL0plbjVKMEQrVGRmNU5TUHliNS9KcXArVFFGK1ROZS9KcjUrVGlINU5NZnlaV3gvSldEOG1WSmY4bTQveVpxWDVPVXMyNXpoV2ZrdW44bVlZL0pscFROdWEzbi82MmliK1RLam45NW4vNWkvbVA4MWVaWS84Y0gvOGRrWGhmL2xhTFg4Sk1BQUFBQllUVkFnWEFjQUFEdy9lSEJoWTJ0bGRDQmlaV2RwYmowaTc3dS9JaUJwWkQwaVZ6Vk5NRTF3UTJWb2FVaDZjbVZUZWs1VVkzcHJZemxrSWo4K0lEeDRPbmh0Y0cxbGRHRWdlRzFzYm5NNmVEMGlZV1J2WW1VNmJuTTZiV1YwWVM4aUlIZzZlRzF3ZEdzOUlrRmtiMkpsSUZoTlVDQkRiM0psSURjdU1pMWpNREF3SURjNUxqVTJObVZpWXpVc0lESXdNakl2TURVdk1Ea3RNRGM2TWpJNk1qa2dJQ0FnSUNBZ0lDSStJRHh5WkdZNlVrUkdJSGh0Ykc1ek9uSmtaajBpYUhSMGNEb3ZMM2QzZHk1M015NXZjbWN2TVRrNU9TOHdNaTh5TWkxeVpHWXRjM2x1ZEdGNExXNXpJeUkrSUR4eVpHWTZSR1Z6WTNKcGNIUnBiMjRnY21SbU9tRmliM1YwUFNJaUlIaHRiRzV6T25odGNEMGlhSFIwY0RvdkwyNXpMbUZrYjJKbExtTnZiUzk0WVhBdk1TNHdMeUlnZUcxc2JuTTZlRzF3VFUwOUltaDBkSEE2THk5dWN5NWhaRzlpWlM1amIyMHZlR0Z3THpFdU1DOXRiUzhpSUhodGJHNXpPbk4wUlhaMFBTSm9kSFJ3T2k4dmJuTXVZV1J2WW1VdVkyOXRMM2hoY0M4eExqQXZjMVI1Y0dVdlVtVnpiM1Z5WTJWRmRtVnVkQ01pSUhodGJHNXpPbVJqUFNKb2RIUndPaTh2Y0hWeWJDNXZjbWN2WkdNdlpXeGxiV1Z1ZEhNdk1TNHhMeUlnZUcxc2JuTTZjR2h2ZEc5emFHOXdQU0pvZEhSd09pOHZibk11WVdSdlltVXVZMjl0TDNCb2IzUnZjMmh2Y0M4eExqQXZJaUI0YlhBNlEzSmxZWFJ2Y2xSdmIydzlJa0ZrYjJKbElGQm9iM1J2YzJodmNDQXlNUzR5SUNoWGFXNWtiM2R6S1NJZ2VHMXdPa055WldGMFpVUmhkR1U5SWpJd01qQXRNRGN0TURGVU1URTZNVGM2TWpVdE1ETTZNREFpSUhodGNEcE5aWFJoWkdGMFlVUmhkR1U5SWpJd01qSXRNRGd0TWpWVU1UTTZOVGs2TVRndE1ETTZNREFpSUhodGNEcE5iMlJwWm5sRVlYUmxQU0l5TURJeUxUQTRMVEkxVkRFek9qVTVPakU0TFRBek9qQXdJaUI0YlhCTlRUcEpibk4wWVc1alpVbEVQU0o0YlhBdWFXbGtPbUV3WWprME1XVmtMVE00TkRRdE5ESTBNQzA1TmpkaExURTBaakF4WlRabE5HWTRNU0lnZUcxd1RVMDZSRzlqZFcxbGJuUkpSRDBpWVdSdlltVTZaRzlqYVdRNmNHaHZkRzl6YUc5d09tUm1NVFUyT0RVeUxXWTBZelF0TlRFMFlTMDRORFUxTFdJNE9EUXpaamxtTWpBNVlTSWdlRzF3VFUwNlQzSnBaMmx1WVd4RWIyTjFiV1Z1ZEVsRVBTSjRiWEF1Wkdsa09qaGhOREprWmpFMExUWm1aREV0TmpNME1TMDVNVEl4TFRFMlpEVTROVGxtTlRBelppSWdaR002Wm05eWJXRjBQU0pwYldGblpTOXdibWNpSUhCb2IzUnZjMmh2Y0RwRGIyeHZjazF2WkdVOUlqTWlQaUE4ZUcxd1RVMDZTR2x6ZEc5eWVUNGdQSEprWmpwVFpYRStJRHh5WkdZNmJHa2djM1JGZG5RNllXTjBhVzl1UFNKamNtVmhkR1ZrSWlCemRFVjJkRHBwYm5OMFlXNWpaVWxFUFNKNGJYQXVhV2xrT2poaE5ESmtaakUwTFRabVpERXROak0wTVMwNU1USXhMVEUyWkRVNE5UbG1OVEF6WmlJZ2MzUkZkblE2ZDJobGJqMGlNakF5TUMwd055MHdNVlF4TVRveE56b3lOUzB3TXpvd01DSWdjM1JGZG5RNmMyOW1kSGRoY21WQloyVnVkRDBpUVdSdlltVWdVR2h2ZEc5emFHOXdJREl4TGpJZ0tGZHBibVJ2ZDNNcElpOCtJRHh5WkdZNmJHa2djM1JGZG5RNllXTjBhVzl1UFNKellYWmxaQ0lnYzNSRmRuUTZhVzV6ZEdGdVkyVkpSRDBpZUcxd0xtbHBaRHBrTURrNVlXUTJZeTFoTWpZd0xUaGxORE10WWpSa055MHlOek16TlRreU9UTXhZVFlpSUhOMFJYWjBPbmRvWlc0OUlqSXdNakF0TURjdE1ERlVNVEU2TVRjNk1qVXRNRE02TURBaUlITjBSWFowT25OdlpuUjNZWEpsUVdkbGJuUTlJa0ZrYjJKbElGQm9iM1J2YzJodmNDQXlNUzR5SUNoWGFXNWtiM2R6S1NJZ2MzUkZkblE2WTJoaGJtZGxaRDBpTHlJdlBpQThjbVJtT214cElITjBSWFowT21GamRHbHZiajBpYzJGMlpXUWlJSE4wUlhaME9tbHVjM1JoYm1ObFNVUTlJbmh0Y0M1cGFXUTZZVEJpT1RReFpXUXRNemcwTkMwME1qUXdMVGsyTjJFdE1UUm1NREZsTm1VMFpqZ3hJaUJ6ZEVWMmREcDNhR1Z1UFNJeU1ESXlMVEE0TFRJMVZERXpPalU1T2pFNExUQXpPakF3SWlCemRFVjJkRHB6YjJaMGQyRnlaVUZuWlc1MFBTSkJaRzlpWlNCUWFHOTBiM05vYjNBZ01qTXVOQ0FvVjJsdVpHOTNjeWtpSUhOMFJYWjBPbU5vWVc1blpXUTlJaThpTHo0Z1BDOXlaR1k2VTJWeFBpQThMM2h0Y0UxTk9raHBjM1J2Y25rK0lEeHdhRzkwYjNOb2IzQTZSRzlqZFcxbGJuUkJibU5sYzNSdmNuTStJRHh5WkdZNlFtRm5QaUE4Y21SbU9teHBQbUZrYjJKbE9tUnZZMmxrT25Cb2IzUnZjMmh2Y0RveFpUZzJZbVl5Tmkwell6azJMV1JoTkRrdE9HRTFPUzFoT0RVeFpqWXpNR1ZpT0dJOEwzSmtaanBzYVQ0Z1BISmtaanBzYVQ1NGJYQXVaR2xrT21NNE16Z3hNamxpTFRVNVl6SXRZMkkwT1MxaE9ESmpMV0UwWVdWa1ltTmxOMlpoTXp3dmNtUm1PbXhwUGlBOEwzSmtaanBDWVdjK0lEd3ZjR2h2ZEc5emFHOXdPa1J2WTNWdFpXNTBRVzVqWlhOMGIzSnpQaUE4TDNKa1pqcEVaWE5qY21sd2RHbHZiajRnUEM5eVpHWTZVa1JHUGlBOEwzZzZlRzF3YldWMFlUNGdQRDk0Y0dGamEyVjBJR1Z1WkQwaWNpSS9QZz09JzsKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIEEgTElHQSBNRUQgwrcgQVRPIEZJTkFMIDIwMjYgwrcgcHJvdMOzdGlwbyBmcm9udC1lbmQKICAgRGFkb3MgZGVtbyBlbSBsb2NhbFN0b3JhZ2UgKHByZWZpeG8gYWZfKS4gVG9kbyBhY2Vzc28gYSBkYWRvcwogICBwYXNzYSBwZWxvIG9iamV0byBgc3RvcmVgOiBhIGZhc2UgMiB0cm9jYSBlc3NhcyBmdW7Dp8O1ZXMgcG9yCiAgIGNoYW1hZGFzIFN1cGFiYXNlIHNlbSBtZXhlciBubyByZXN0byBkbyBhcHAgKHBhZHLDo28gRGVzYWZpbyAyMSkuCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwovKiBwb2x5ZmlsbCBkZSBTdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0IChpT1M8MTAvQ2hyb21lPDU3KTogdXNhZG8gbm8gY291bnRkb3duCiAgIGRhIExQIGUgbm8gY3JvbsO0bWV0cm8gZG8gc2ltdWxhZG87IHNlbSBlbGUsIFR5cGVFcnJvciBlbSBhcGFyZWxobyBhbnRpZ28KICAgdHJhdmF2YSBvIHRpY2suIEF1ZGl0b3JpYSAxMS8wOC4gKi8KaWYgKCFTdHJpbmcucHJvdG90eXBlLnBhZFN0YXJ0KSB7CiAgU3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydCA9IGZ1bmN0aW9uKGxlbiwgcGFkKXsKICAgIHZhciBzID0gU3RyaW5nKHRoaXMpOyBwYWQgPSBwYWQgPT09IHVuZGVmaW5lZCA\/ICcgJyA6IFN0cmluZyhwYWQpOwogICAgaWYgKHMubGVuZ3RoID49IGxlbiB8fCAhcGFkKSByZXR1cm4gczsKICAgIHZhciBmaWxsID0gJyc7IHdoaWxlIChmaWxsLmxlbmd0aCA8IGxlbiAtIHMubGVuZ3RoKSBmaWxsICs9IHBhZDsKICAgIHJldHVybiBmaWxsLnNsaWNlKDAsIGxlbiAtIHMubGVuZ3RoKSArIHM7CiAgfTsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLSBqb3JuYWRhcyAtLS0tLS0tLS0tLS0tLS0tICovCi8vIENhbGVuZMOhcmlvIEVOQU1FRDogb2ZpY2lhbCwgZXh0cmHDrWRvIGRhcyBww6FnaW5hcyBkbyBXUAovLyAoYXRvLWZpbmFsLXJlc2lkZW5jaWEtbWVkaWNhLTIwMjYgKyBvYnNlcnZhdG9yaW8tZW5hbWVkKSBlbSAyOS8wNy8yMDI2LgovLyBDYWxlbmTDoXJpbyBSZXZhbGlkYSAyMDI2LjI6IFBST1ZJU8OTUklPLCBlc3BlbGhhIGEgZXN0cnV0dXJhIGRhIGVkacOnw6NvCi8vIDIwMjYuMS4gQXR1YWxpemFyIHF1YW5kbyBvIElORVAgY29uZmlybWFyIGFzIGRhdGFzLgp2YXIgSk9STkFEQVMgPSB7CiAgZW5hbWVkOiB7CiAgICBub21lOiAnRU5BTUVEIDIwMjYnLAogICAgbGlnYTogJ0F0byBGaW5hbCDCtyBFTkFNRUQnLAogICAgaW5pY2lvOiAnMjAyNi0wOC0yNicsICAgLy8gYSBqb3JuYWRhIGNvbWXDp2EgbmEgQXVsYSBJbmF1Z3VyYWwgKDI2LzA4LCAxOWgpOyBvIDHCuiBjaGVjay1pbiBzZWd1ZSBuYSBQcmVtb25pw6fDo28gKDMwLzA4KQogICAgcHJvdmE6ICcyMDI2LTA5LTEzJywKICAgIHByb3Zpc29yaW86IGZhbHNlLAogICAgcGFydGljaXBhbnRlczogMTQ4MiwKICAgIC8vIFTDrXR1bG9zIGUgbGlua3Mgb2ZpY2lhaXMgZG8gZS1tYWlsIGRhIGNvb3JkZW5hw6fDo28gKDI5LzA3LzIwMjYpCiAgICAvLyBlbjAwIChzZW1hbmEgMCA9IEFiZXJ0dXJhKTogU0VNIHBhbGF2cmEtY2hhdmUgZSBTRU0gcXVlc3TDtWVzIOKAlCBuw6NvIGVudHJhCiAgICAvLyBuYSByw6lndWEgZGUgcG9udG9zIChwcmVzZW7Dp2Egc2VndWUgMTMgYXVsYXMgw5cgNDApLiBPIGxpbmsgZG8gWW91VHViZQogICAgLy8gw6kgUExBQ0VIT0xERVIgKHJlcGV0aWRvIGRhIFByZW1vbmnDp8OjbykgYXTDqSBhIGxpdmUgb2ZpY2lhbCBzZXIgY3JpYWRhLgogICAgZXZlbnRvczogWwogICAgICB7IGlkOidlbjAwJywgZGF0YTonMjAyNi0wOC0yNicsIGhvcmE6JzE5OjAwJywgdGl0dWxvOidBdWxhIEluYXVndXJhbCDCtyBUdWRvIHNvYnJlIG8gQXRvIEZpbmFsIEVOQU1FRCAyMDI2JywgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYTowLCBxdWl6OmZhbHNlLCB5dDonaHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g\/dj15SmlrWVFKLUk0SSZsaXN0PVBMYjJJRW90S2NZSVUmaW5kZXg9MTYnIH0sCiAgICAgIHsgaWQ6J2VuMDEnLCBkYXRhOicyMDI2LTA4LTMwJywgaG9yYTonMDg6MDAgw6BzIDE2OjAwJywgdGl0dWxvOidQcmVtb25pw6fDo28gRU5BTUVEIDIwMjYnLCAgICAgICAgICAgICAgICAgICAgICAgICAgdGlwbzonbWFyY28nLCBzZW1hbmE6MSwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9GV1dlbmJINkk5bycgfSwKICAgICAgeyBpZDonZW4wMicsIGRhdGE6JzIwMjYtMDgtMzEnLCBob3JhOicxOTowMCDDoHMgMjE6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBHaW5lY29sb2dpYScsICAgICAgICAgICAgICAgICAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjEsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvbjhyMlcyMG54bGMnIH0sCiAgICAgIHsgaWQ6J2VuMDMnLCBkYXRhOicyMDI2LTA5LTAxJywgaG9yYTonMTk6MDAgw6BzIDIxOjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgUGVkaWF0cmlhIFBhcnRlIEknLCAgICAgICAgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYToxLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL1gyN1lQVmpWcDY0JyB9LAogICAgICB7IGlkOidlbjA0JywgZGF0YTonMjAyNi0wOS0wMicsIGhvcmE6JzE5OjAwIMOgcyAyMTozMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IENpcnVyZ2lhIFBhcnRlIEknLCAgICAgICAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MSwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9kTUl0Y3lwYWV5RScgfSwKICAgICAgeyBpZDonZW4wNScsIGRhdGE6JzIwMjYtMDktMDMnLCBob3JhOicxOTowMCDDoHMgMjM6MDAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBDbMOtbmljYSBNw6lkaWNhIFBhcnRlIEknLCAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MSwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9GMVZRMGlvaE02aycgfSwKICAgICAgeyBpZDonZW4wNicsIGRhdGE6JzIwMjYtMDktMDQnLCBob3JhOicxOTowMCDDoHMgMjE6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBNZWRpY2luYSBQcmV2ZW50aXZhIFBhcnRlIEknLCAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjEsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvVnAtekJIVmJ2R0UnIH0sCiAgICAgIHsgaWQ6J2VuMDcnLCBkYXRhOicyMDI2LTA5LTA2JywgaG9yYTonMTQ6MDAgw6BzIDE5OjAwJywgdGl0dWxvOidTaW11bGFkbyBGSU5BTCBFTkFNRUQgMjAyNicsICAgICAgICAgICAgICAgICAgICAgIHRpcG86J21hcmNvJywgc2VtYW5hOjIsIHF1aXo6ZmFsc2UsIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvWWUzaVFqeW50ZEUnIH0sCiAgICAgIHsgaWQ6J2VuMDgnLCBkYXRhOicyMDI2LTA5LTA3JywgaG9yYTonMTk6MDAgw6BzIDIxOjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgT2JzdGV0csOtY2lhJywgICAgICAgICAgICAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MiwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9ucU1IbXZESHZMOCcgfSwKICAgICAgeyBpZDonZW4wOScsIGRhdGE6JzIwMjYtMDktMDgnLCBob3JhOicxOTowMCDDoHMgMjE6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBQZWRpYXRyaWEgUGFydGUgSUknLCAgICAgICAgICAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjIsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvMzJpeU1Za0pLLUEnIH0sCiAgICAgIHsgaWQ6J2VuMTAnLCBkYXRhOicyMDI2LTA5LTA5JywgaG9yYTonMTk6MDAgw6BzIDIxOjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgQ2lydXJnaWEgUGFydGUgSUknLCAgICAgICAgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYToyLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL3U5TWdOSlp1Tkc4JyB9LAogICAgICB7IGlkOidlbjExJywgZGF0YTonMjAyNi0wOS0xMCcsIGhvcmE6JzE5OjAwIMOgcyAyMzowMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IENsw61uaWNhIE3DqWRpY2EgUGFydGUgSUknLCAgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYToyLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL2VaOHpVcHNCRWJRJyB9LAogICAgICB7IGlkOidlbjEyJywgZGF0YTonMjAyNi0wOS0xMScsIGhvcmE6JzE5OjAwIMOgcyAyMTozMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IE1lZGljaW5hIFByZXZlbnRpdmEgUGFydGUgSUknLCAgdGlwbzonYXVsYScsICBzZW1hbmE6MiwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS91aUMzT2dBUTQxRScgfSwKICAgICAgeyBpZDonZW4xMycsIGRhdGE6JzIwMjYtMDktMTInLCBob3JhOicwODowMCDDoHMgMTY6MDAnLCB0aXR1bG86J1Jldmlzw6NvIGRlIFbDqXNwZXJhIEVOQU1FRCAyMDI2IMK3IGFvIHZpdm8nLCAgICAgICAgdGlwbzonbWFyY28nLCBzZW1hbmE6MiwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9XeGEyanJCTF9ZYycgfSwKICAgICAgeyBpZDonZW4xNCcsIGRhdGE6JzIwMjYtMDktMTMnLCBob3JhOidhIHBhcnRpciBkYXMgMTY6MDAnLCB0aXR1bG86J0dhYmFyaXRvIEVOQU1FRCAyMDI2JywgICAgICAgICAgICAgICAgICAgICAgICB0aXBvOidwcm92YScsIHNlbWFuYToyLCBxdWl6OmZhbHNlLCB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL196SVZVQlE4VEo4JyB9CiAgICBdLAogICAgc2ltdWxhZG9JZDogJ2VuMDcnCiAgfSwKICByZXZhbGlkYTogewogICAgbm9tZTogJ1JldmFsaWRhIElORVAgMjAyNi4yJywKICAgIGxpZ2E6ICdBdG8gRmluYWwgwrcgUmV2YWxpZGEnLAogICAgaW5pY2lvOiAnMjAyNi0wOC0yNicsCiAgICBwcm92YTogJzIwMjYtMDktMTMnLAogICAgcHJvdmlzb3JpbzogZmFsc2UsCiAgICBwYXJ0aWNpcGFudGVzOiA3NDMsCiAgICAvLyBDYWxlbmTDoXJpbyBvZmljaWFsIChJZ29yLCAxMi8wOCkuIFJvZGEgbmEgTUVTTUEgamFuZWxhIGRvIEVOQU1FRCAoMjYvMDjigJMxMy8wOSksCiAgICAvLyBIb3JhIGRhIFZlcmRhZGUgw6BzIDEyaC4gUmV2aXPDo28gZGUgVsOpc3BlcmEgKHJ2MTMpIGUgR2FiYXJpdG8gKHJ2MTQpIHPDo28KICAgIC8vIENPTVBBUlRJTEhBRE9TIEVOQU1FRCtSZXZhbGlkYS4g4pqg77iPIHl0IGRhIEFiZXJ0dXJhIChydjAwLCAyNi8wOCAyMGgpIFBFTkRFTlRFLgogICAgZXZlbnRvczogWwogICAgICB7IGlkOidydjAwJywgZGF0YTonMjAyNi0wOC0yNicsIGhvcmE6JzIwOjAwJywgdGl0dWxvOidBdWxhIEluYXVndXJhbCDCtyBUdWRvIHNvYnJlIG8gQXRvIEZpbmFsIFJldmFsaWRhIElORVAgMjAyNi4yJywgdGlwbzonYXVsYScsIHNlbWFuYTowLCBxdWl6OmZhbHNlLCB5dDonJyB9LAogICAgICB7IGlkOidydjAxJywgZGF0YTonMjAyNi0wOC0zMCcsIGhvcmE6JzA4OjAwIMOgcyAxNjowMCcsIHRpdHVsbzonUHJlbW9uacOnw6NvIFJldmFsaWRhIElORVAgMjAyNi4yJywgICAgICAgICAgICAgICAgICB0aXBvOidtYXJjbycsIHNlbWFuYToxLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL0w1aGRGT3BvbHFnJyB9LAogICAgICB7IGlkOidydjAyJywgZGF0YTonMjAyNi0wOC0zMScsIGhvcmE6JzEyOjAwIMOgcyAxNDozMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IEdpbmVjb2xvZ2lhJywgICAgICAgICAgICAgICAgICAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjEsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvM3RjV1JZQWdJOXMnIH0sCiAgICAgIHsgaWQ6J3J2MDMnLCBkYXRhOicyMDI2LTA5LTAxJywgaG9yYTonMTI6MDAgw6BzIDE0OjMwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgUGVkaWF0cmlhIFBhcnRlIEknLCAgICAgICAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MSwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9ocHliaE9ma2g4SScgfSwKICAgICAgeyBpZDoncnYwNCcsIGRhdGE6JzIwMjYtMDktMDInLCBob3JhOicxMjowMCDDoHMgMTQ6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBDaXJ1cmdpYSBQYXJ0ZSBJJywgICAgICAgICAgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYToxLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL0dRVEhjOU9vdkNVJyB9LAogICAgICB7IGlkOidydjA1JywgZGF0YTonMjAyNi0wOS0wMycsIGhvcmE6JzEyOjAwIMOgcyAxNjowMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IENsw61uaWNhIE3DqWRpY2EgUGFydGUgSScsICAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MSwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9DNG1YRkZnU01sSScgfSwKICAgICAgeyBpZDoncnYwNicsIGRhdGE6JzIwMjYtMDktMDQnLCBob3JhOicxMjowMCDDoHMgMTQ6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBNZWRpY2luYSBQcmV2ZW50aXZhIFBhcnRlIEknLCAgICB0aXBvOidhdWxhJywgIHNlbWFuYToxLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL1VxZ3liOUNoS2N3JyB9LAogICAgICB7IGlkOidydjA3JywgZGF0YTonMjAyNi0wOS0wNicsIGhvcmE6JzE0OjAwIMOgcyAxOTowMCcsIHRpdHVsbzonU2ltdWxhZG8gRmluYWwgUmV2YWxpZGEgSU5FUCAyMDI2LjInLCAgICAgICAgICAgICAgdGlwbzonbWFyY28nLCBzZW1hbmE6MiwgcXVpejpmYWxzZSwgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9jX0dxbmE5WEh5TScgfSwKICAgICAgeyBpZDoncnYwOCcsIGRhdGE6JzIwMjYtMDktMDcnLCBob3JhOicxMjowMCDDoHMgMTQ6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBPYnN0ZXRyw61jaWEnLCAgICAgICAgICAgICAgICAgICAgdGlwbzonYXVsYScsICBzZW1hbmE6MiwgcXVpejp0cnVlLCAgeXQ6J2h0dHBzOi8veW91dHViZS5jb20vbGl2ZS9fS0JBQkZVRlJOWScgfSwKICAgICAgeyBpZDoncnYwOScsIGRhdGE6JzIwMjYtMDktMDgnLCBob3JhOicxMjowMCDDoHMgMTQ6MzAnLCB0aXR1bG86J0hvcmEgZGEgVmVyZGFkZSDCtyBQZWRpYXRyaWEgUGFydGUgSUknLCAgICAgICAgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYToyLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlLzktcXJJX295dlBjJyB9LAogICAgICB7IGlkOidydjEwJywgZGF0YTonMjAyNi0wOS0wOScsIGhvcmE6JzEyOjAwIMOgcyAxNDozMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IENpcnVyZ2lhIFBhcnRlIElJJywgICAgICAgICAgICAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjIsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvNzdFSHUtaU9iTGMnIH0sCiAgICAgIHsgaWQ6J3J2MTEnLCBkYXRhOicyMDI2LTA5LTEwJywgaG9yYTonMTI6MDAgw6BzIDE2OjAwJywgdGl0dWxvOidIb3JhIGRhIFZlcmRhZGUgwrcgQ2zDrW5pY2EgTcOpZGljYSBQYXJ0ZSBJSScsICAgICAgICB0aXBvOidhdWxhJywgIHNlbWFuYToyLCBxdWl6OnRydWUsICB5dDonaHR0cHM6Ly95b3V0dWJlLmNvbS9saXZlL0U2ZVNyTGcxbEkwJyB9LAogICAgICB7IGlkOidydjEyJywgZGF0YTonMjAyNi0wOS0xMScsIGhvcmE6JzEyOjAwIMOgcyAxNDozMCcsIHRpdHVsbzonSG9yYSBkYSBWZXJkYWRlIMK3IE1lZGljaW5hIFByZXZlbnRpdmEgUGFydGUgSUknLCAgIHRpcG86J2F1bGEnLCAgc2VtYW5hOjIsIHF1aXo6dHJ1ZSwgIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvZ2IwdHpkTk1mWTAnIH0sCiAgICAgIHsgaWQ6J3J2MTMnLCBkYXRhOicyMDI2LTA5LTEyJywgaG9yYTonMDg6MDAgw6BzIDE2OjAwJywgdGl0dWxvOidSZXZpc8OjbyBkZSBWw6lzcGVyYSBFTkFNRUQgZSBSZXZhbGlkYSBJTkVQIMK3IGFvIHZpdm8nLCB0aXBvOidtYXJjbycsIHNlbWFuYToyLCBxdWl6OnRydWUsIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvVXJxWnRZRU1teEEnIH0sCiAgICAgIHsgaWQ6J3J2MTQnLCBkYXRhOicyMDI2LTA5LTEzJywgaG9yYTonYSBwYXJ0aXIgZGFzIDE2OjAwJywgdGl0dWxvOidHYWJhcml0byBFTkFNRUQgZSBSZXZhbGlkYSBJTkVQIDIwMjYuMicsICAgICAgIHRpcG86J3Byb3ZhJywgc2VtYW5hOjIsIHF1aXo6ZmFsc2UsIHl0OidodHRwczovL3lvdXR1YmUuY29tL2xpdmUvb0ljbGNfbXp6MVknIH0KICAgIF0sCiAgICBzaW11bGFkb0lkOiAncnYwNycKICB9Cn07CgovKiBBIEpPUk5BREEgKGVzdHVkbykgdmFsZSAyLjAwMCBwdHMuIEluZGljYcOnw6NvIHZpcm91IELDlE5VUyBTRU0gVEVUTyBlbSBjaW1hCiAgIGRpc3NvICgxMS8wOCkg4oCUIG7Do28gaMOhIG1haXMgdW0gInRvdGFsIiBmaXhvLiAqLwp2YXIgUE9OVE9TID0geyBwcmVzZW5jYTogNTIwLCBtaXNzb2VzOiA3ODAsIHNpbXVsYWRvOiA3MDAsIGpvcm5hZGE6IDIwMDAgfTsKLyogw6F0b21vcyBFWEFUT1MgZGEgcsOpZ3VhIChkZWNpc8OjbyAwNC8wOCk6IHNlbSBwb250byBxdWVicmFkbyBlbSBsdWdhciBuZW5odW0gKi8KdmFyIFBUX0FVTEEgPSA0MCwgUFRfQVVMQV9SRVRSTyA9IDMwOyAgICAgICAgICAgICAgICAgIC8vIDc1JSBleGF0byBubyByZXRyb2F0aXZvCnZhciBQVF9ESUEgPSA2NSwgUFRfRElBX1BJU08gPSAyNiwgUFRfRElBX0FDRVJUT1MgPSAzOTsgLy8gcGlzbyA0MCUgZXhhdG8KdmFyIFBUX1NJTV9BQ0VSVE8gPSA3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaW11bGFkbzogNyBwb3IgYWNlcnRvCi8qIGluZGljYcOnw7VlcyAocmV2aXPDo28gMTEvMDgsIGRlY2lzw6NvIGRvIElnb3IpOiAyMCBwdHMgcG9yIGFtaWdvIHF1ZSBzZSBJTlNDUkVWRQogICBwZWxvIHNldSBsaW5rIOKAlCBBVVRPTcOBVElDTyBubyBjYWRhc3RybyAobsOjbyBleGlnZSBtYWlzIHBhcnRpY2lwYXIpIGUgU0VNIFRFVE8KICAgKCJxdWFudG8gbWFpcyBpbmRpY2FyLCBtZWxob3IiKS4gQsO0bnVzIGVtIGNpbWEgZG9zIDIuMDAwLiBOw4NPIGVudHJhIG5vCiAgIGRlc2VtcGF0ZS4gKi8KdmFyIFBUX0lORCA9IDIwOwp2YXIgREVNT19LRVlXT1JEID0gJyc7IC8vIHByb2R1w6fDo286IG7Do28gZXhpc3RlIGNoYXZlIGRlbW87IHZhbGlkYcOnw6NvIMOpIG5vIHNlcnZpZG9yCi8qIHJlc3Bvc3RhcyBwYXJjaWFpcyBkZSB1bSBldmVudG8gKHByb2R1w6fDo286IGNvbnRhZGFzIGRvIENBQ0hFIGRvIHNlcnZpZG9yKSAqLwpmdW5jdGlvbiBuUmVzcG9zdGFzRXZlbnRvKGV2SWQpewogIHZhciBxcyA9IENBQ0hFLnF1ZXN0b2VzW2V2SWRdIHx8IFtdOwogIHZhciBuID0gMDsKICBxcy5mb3JFYWNoKGZ1bmN0aW9uKHEpeyBpZiAoQ0FDSEUucmVzcG9zdGFzW3EuaWRdKSBuKys7IH0pOwogIHJldHVybiBuOwp9Ci8qIEV2ZW50b3MgY29tIGNoZWNrLWluIChwcmVzZW7Dp2EpOiB0b2RvcyBNRU5PUyBhIEFiZXJ0dXJhIChzZW1hbmEgMCkgZSBvCiAgIFNpbXVsYWRvLiBEZXJpdmFkbyBkYSBqb3JuYWRhIGF0aXZhIHByYSBmdW5jaW9uYXIgZW0gcXVhbHF1ZXIgdmVydGljYWwKICAgKEVOQU1FRCB1c2EgZW4qLCBSZXZhbGlkYSB1c2EgcnYqKS4gKi8KZnVuY3Rpb24gZXZlbnRvc0NvbUNoYXZlKHByb3ZhKXsKICB2YXIgaiA9IEpPUk5BREFTW3Byb3ZhXSB8fCBKT1JOQURBUy5lbmFtZWQ7CiAgdmFyIG91dCA9IFtdOwogIGouZXZlbnRvcy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyBpZiAoZS5zZW1hbmEgIT09IDAgJiYgZS5pZCAhPT0gai5zaW11bGFkb0lkKSBvdXQucHVzaChlLmlkKTsgfSk7CiAgcmV0dXJuIG91dDsKfQp2YXIgVEVNX0NIQVZFID0gZXZlbnRvc0NvbUNoYXZlKCh3aW5kb3cuX19BRl9QUk9WQSA9PT0gJ3JldmFsaWRhJykgPyAncmV2YWxpZGEnIDogJ2VuYW1lZCcpOwoKLyogUHJlZml4byBkZSBsb2NhbFN0b3JhZ2UvY29va2llIHBvciB2ZXJ0aWNhbDogRU5BTUVEIGUgUmV2YWxpZGEgbW9yYW0gbm8gTUVTTU8KICAgZG9tw61uaW8gKG1rdC5lc3RyYXRlZ2lhLmNvbSksIG9uZGUgbyBsb2NhbFN0b3JhZ2Ugw6kgQ09NUEFSVElMSEFETy4gU2VtIGlzc28sIGEKICAgc2Vzc8OjbyBkZSB1bSBhbHVubyBkbyBFTkFNRUQgdmF6YXJpYSAoY29tIGRhZG9zIHF1ZWJyYWRvcykgcHJhIMOhcmVhIGRvIFJldmFsaWRhLgogICBFTkFNRUQgbWFudMOpbSBvIHByZWZpeG8gaGlzdMOzcmljbyAnYWZfJyAobsOjbyBkZXNsb2dhIG5pbmd1w6ltIGrDoSBsb2dhZG8pOwogICBSZXZhbGlkYSB1c2EgJ2FmX3J2XycuICovCnZhciBMU1AgPSAod2luZG93Ll9fQUZfUFJPVkEgPT09ICdyZXZhbGlkYScpID8gJ2FmX3J2XycgOiAnYWZfJzsKCi8qIE1PRE8gREUgVkFMSURBw4fDg08gZGEgY29vcmRlbmHDp8OjbyDigJQgREVTTElHQVIgTk8gTEFOw4dBTUVOVE8gKGZhbHNlKS4KICAgQ29tIHRydWU6IGhvamUgPSAzMC8wOCAoZGlhIGRhIGVzdHJlaWEpLCBxdWVzdMO1ZXMgZGUgVE9ET1Mgb3MgZGlhcwogICBsaWJlcmFkYXMsIFNpbXVsYWRvIGFiZXJ0byBwYXJhIHByZWVuY2hlciBlIGdhYmFyaXRvIGxpYmVyYWRvIGFww7NzIG8KICAgZW52aW8sIGNvbSBib3TDo28gZGUgcmVmYXplci4gVW0gYmFubmVyIGF2aXNhIHF1ZSDDqSBhbWJpZW50ZSBkZSB0ZXN0ZS4gKi8KdmFyIE1PRE9fVkFMSURBQ0FPID0gZmFsc2U7ICAvLyBMQU7Dh0FNRU5UTyAxMC8wODogYmxvcXVlaW9zIHJlYWlzIHByb3MgYWx1bm9zCgovKiBWSVPDg08gRE8gQ09PUkRFTkFET1IgKGxhbsOnYW1lbnRvIDEwLzA4KTogQ1BGcyBkZXN0YSBsaXN0YSBlbnhlcmdhbSBhCiAgIHBsYXRhZm9ybWEgY29tcGxldGEgYW50ZXMgZGEgZXN0cmVpYSAodHJpbGhhLCBxdWVzdMO1ZXMsIHNpbXVsYWRvKSBzZW0KICAgYWJyaXIgbmFkYSBwcm9zIGFsdW5vcy4gU8OzIFZJU1VBTElaQcOHw4NPOiBvIHNlcnZpZG9yIG1hbnTDqW0gYXMgcmVncmFzCiAgIHJlYWlzIGUgcmVjdXNhIGHDp8O1ZXMgZm9yYSBkZSBob3JhLiAqLwp2YXIgQ1BGU19DT09SRCA9IFtdOwpmdW5jdGlvbiBtb2RvUHJldmlldygpewogIGlmIChNT0RPX1ZBTElEQUNBTykgcmV0dXJuIHRydWU7CiAgdHJ5IHsgcmV0dXJuICEhKENBQ0hFLnVzZXIgJiYgQ1BGU19DT09SRC5pbmRleE9mKENBQ0hFLnVzZXIuY3BmKSA+IC0xKTsgfSBjYXRjaChlKXsgcmV0dXJuIGZhbHNlOyB9Cn0KCi8qIEF0YWxob3MgZGUgb3BlcmHDp8OjbyAoP2hvamUsID9zaW1kdXIsID9zaW1yZXNldCBlIG8gYXRhbGhvIGRlIGRlbW8gZG8gU2ltdWxhZG8pCiAgIHPDsyBmdW5jaW9uYW0gZW0gbmF2ZWdhZG9yIHF1ZSBqw6EgcGFzc291IHBlbG8gZ2F0ZSBkbyBhZG1pbiAoYWZfYWRtaW5fb2spLiAqLwpmdW5jdGlvbiBpc09wZXJhY2FvKCl7IHRyeSB7IHJldHVybiAhIWxvY2FsU3RvcmFnZS5nZXRJdGVtKExTUCsnYWRtaW5fb2snKTsgfSBjYXRjaChlKXsgcmV0dXJuIGZhbHNlOyB9IH0KCi8qIFF1aXp6ZXMgZGVtbzogNSBxdWVzdMO1ZXMgQ2VydG8vRXJyYWRvIHBvciBhdWxhIChwYWRyw6NvIGRvIENKKS4KICAgQ29udGXDumRvIGlsdXN0cmF0aXZvLCBvIHRpbWUgZGUgcHJvZmVzc29yZXMgc3Vic3RpdHVpIG5hIGZhc2UgMi4gKi8KdmFyIFFVSVpfQkFOSyA9IHsKICBlbjAyOiBbCiAgICB7IHE6J05vIHJhc3RyZWFtZW50byBkbyBjw6JuY2VyIGRlIGNvbG8gdXRlcmlubywgYSBjaXRvbG9naWEgb25jw7N0aWNhIGRldmUgc2VyIGluaWNpYWRhIGFvcyAyNSBhbm9zIGVtIG11bGhlcmVzIHF1ZSBqw6EgdGl2ZXJhbSBhdGl2aWRhZGUgc2V4dWFsLicsIHI6J0MnIH0sCiAgICB7IHE6J0EgY2FuZGlkw61hc2UgdnVsdm92YWdpbmFsIGRlIHJlcGV0acOnw6NvIMOpIHRyYXRhZGEgY29tIG1ldHJvbmlkYXpvbCBvcmFsIGVtIGRvc2Ugw7puaWNhLicsIHI6J0UnIH0sCiAgICB7IHE6J05hIGRvZW7Dp2EgaW5mbGFtYXTDs3JpYSBww6lsdmljYSwgbyB0cmF0YW1lbnRvIGFtYnVsYXRvcmlhbCDDqSBhY2VpdMOhdmVsIGVtIHF1YWRyb3MgbGV2ZXMsIHNlbSBzaW5haXMgZGUgYWJzY2Vzc28uJywgcjonQycgfSwKICAgIHsgcTonTyBhbnRpY29uY2VwY2lvbmFsIGNvbWJpbmFkbyDDqSBvIG3DqXRvZG8gZGUgZXNjb2xoYSBlbSBtdWxoZXJlcyBjb20gZW54YXF1ZWNhIGNvbSBhdXJhLicsIHI6J0UnIH0sCiAgICB7IHE6J0Egc8OtbmRyb21lIGRvcyBvdsOhcmlvcyBwb2xpY8Otc3RpY29zIGV4aWdlLCBwZWxvIGNyaXTDqXJpbyBkZSBSb3R0ZXJkYW0sIGEgcHJlc2Vuw6dhIHNpbXVsdMOibmVhIGRvcyB0csOqcyBjcml0w6lyaW9zIGRpYWduw7NzdGljb3MuJywgcjonRScgfQogIF0sCiAgZW4wNTogWwogICAgeyBxOidOYSBjZXRvYWNpZG9zZSBkaWFiw6l0aWNhLCBhIGluc3VsaW5hIHPDsyBkZXZlIHNlciBpbmljaWFkYSBhcMOzcyBjb3JyZcOnw6NvIGRlIHBvdMOhc3NpbyBzw6lyaWNvIGFiYWl4byBkZSAzLDMgbUVxL0wuJywgcjonQycgfSwKICAgIHsgcTonQSBwbmV1bW9uaWEgYWRxdWlyaWRhIG5hIGNvbXVuaWRhZGUgY29tIENVUkItNjUgaWd1YWwgYSB6ZXJvIGV4aWdlIGludGVybmHDp8OjbyBob3NwaXRhbGFyLicsIHI6J0UnIH0sCiAgICB7IHE6J05vIGluZmFydG8gYWd1ZG8gZG8gbWlvY8OhcmRpbyBjb20gc3VwcmEgZGUgU1QsIG8gdGVtcG8gcG9ydGEtYmFsw6NvIGlkZWFsIMOpIGRlIGF0w6kgOTAgbWludXRvcy4nLCByOidDJyB9LAogICAgeyBxOidBIGRvZW7Dp2EgcmVuYWwgY3LDtG5pY2Egw6kgZGVmaW5pZGEgcG9yIGFsdGVyYcOnw7VlcyBlc3RydXR1cmFpcyBvdSBmdW5jaW9uYWlzIG1hbnRpZGFzIHBvciBtYWlzIGRlIDMgbWVzZXMuJywgcjonQycgfSwKICAgIHsgcTonTyB0cmF0YW1lbnRvIGRlIHByaW1laXJhIGxpbmhhIGRhIGhpcGVydGVuc8OjbyBlbSBuZWdyb3MgbsOjbyBkaWFiw6l0aWNvcyBwcmlvcml6YSBpbmliaWRvcmVzIGRhIEVDQS4nLCByOidFJyB9CiAgXQp9OwpmdW5jdGlvbiBxdWl6RG9FdmVudG8oZXYpewogIHZhciBhZG0gPSBudWxsOyAvLyBwcm9kdcOnw6NvOiBxdWVzdMO1ZXMgdsOqbSBTw5MgZG8gYmFuY28KICByZXR1cm4gKENBQ0hFLnF1ZXN0b2VzW2V2LmlkXSB8fCBbXSk7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0gU2ltdWxhZG8gRmluYWwgSU4tUExBVEZPUk0gLS0tLS0tLS0tLS0tLS0tLQogICBNb2RlbG8gcmVwbGljYWRvIGRvIFNpbXVsYWRvIEVOQU1FRCBSRUFMIGRhIHBsYXRhZm9ybWEgZG8gTUVECiAgIChxdWVzdGlvbnNfZGIuc2VsbGFibGVfc3R1ZGVudF9leGFtcyBubyBBdGhlbmE6IDEwMCBxdWVzdMO1ZXMgZGUKICAgNCBhbHRlcm5hdGl2YXMgQeKAk0QsIDVoIGRlIHByb3ZhLCBqYW5lbGEgY29tIGluw61jaW8vZmltIGUgZ2FiYXJpdG8KICAgbGliZXJhZG8gc8OzIG5vIGVuY2VycmFtZW50bykgKyByZWdyYXMgZGEgcGxhdGFmb3JtYSBkbyBBdG8gRmluYWwKICAgKHJlcG8gYXJlYS1wYXJ0aWNpcGFudGUtZW5hbWVkKTogbG9iYnkgY29tIGRlY2xhcmHDp8OjbyBkZSBmYWlyLXBsYXksCiAgIGNyb27DtG1ldHJvIHNlbSBwYXVzYSwgbmF2ZWdhZG9yIGRlIHF1ZXN0w7VlcywgbWFyY2FyIHBhcmEgcmV2aXNhciwKICAgYXV0b3NhdmUsIHRlbnRhdGl2YSDDum5pY2EsIGFudGktY8OzcGlhLCBnYWJhcml0byBjb21lbnRhZG8gcmV0aWRvCiAgIGF0w6kgbyBmaW0gZGEgamFuZWxhLiBRdWVzdMO1ZXMgREVNT05TVFJBVElWQVMgYXTDqSBvcyBwcm9mZXNzb3JlcwogICBlbnRyZWdhcmVtIChhIGFiYSBTSU1VTEFETyBkYSBwbGFuaWxoYSBhaW5kYSB0ZW0gbyBjb250ZcO6ZG8gZG8gQ0opLiAqLwp2YXIgU0lNX0NGRyA9IHsKICBlbmFtZWQ6ICAgeyBxdWVzdG9lczoxMDAsIGR1cmFjYW9NaW46MzAwLCBob3JhQWJyZTonMTQ6MDAnLCBob3JhRmVjaGE6JzE5OjAwJyB9LAogIHJldmFsaWRhOiB7IHF1ZXN0b2VzOjEwMCwgZHVyYWNhb01pbjozMDAsIGhvcmFBYnJlOicxNDowMCcsIGhvcmFGZWNoYTonMTk6MDAnIH0KfTsKdmFyIFNJTV9BUkVBUyA9IFsnQ2zDrW5pY2EgTcOpZGljYScsJ0NpcnVyZ2lhJywnUGVkaWF0cmlhJywnR2luZWNvbG9naWEgZSBPYnN0ZXRyw61jaWEnLCdNZWRpY2luYSBQcmV2ZW50aXZhJ107CmZ1bmN0aW9uIHNpbXVsYWRvUXVlc3RvZXMocHJvdmEpewogIC8vIDIwIHF1ZXN0w7VlcyBwb3IgZ3JhbmRlIMOhcmVhIChkaXN0cmlidWnDp8OjbyBvZmljaWFsIGRvIEVOQU1FRCkKICB2YXIgY2ZnID0gU0lNX0NGR1twcm92YV0gfHwgU0lNX0NGRy5lbmFtZWQ7CiAgdmFyIGxldHJhcyA9IFsnQScsJ0InLCdDJywnRCddOwogIHZhciBvdXQgPSBbXTsKICBmb3IgKHZhciBpPTA7aTxjZmcucXVlc3RvZXM7aSsrKXsKICAgIHZhciBhcmVhID0gU0lNX0FSRUFTW01hdGguZmxvb3IoaSAvIChjZmcucXVlc3RvZXMgLyBTSU1fQVJFQVMubGVuZ3RoKSldIHx8IFNJTV9BUkVBU1swXTsKICAgIG91dC5wdXNoKHsKICAgICAgYXJlYTogYXJlYSwKICAgICAgcTogJ1F1ZXN0w6NvIGRlbW9uc3RyYXRpdmEgJysoaSsxKSsnIMK3ICcrYXJlYSsnLiBObyBwcm9qZXRvIGZpbmFsLCBlbnRyYSBhcXVpIHVtIGNhc28gY2zDrW5pY28gY29tcGxldG8gbm8gcGFkcsOjbyBJTkVQL0VOQU1FRCBlbGFib3JhZG8gcGVsb3MgcHJvZmVzc29yZXM6IGFwcmVzZW50YcOnw6NvIGRvIHBhY2llbnRlLCBkYWRvcyBkZSBleGFtZSBlIGEgcGVyZ3VudGEuJywKICAgICAgYWx0czogbGV0cmFzLm1hcChmdW5jdGlvbihsKXsgcmV0dXJuIHsgbDpsLCB0OidBbHRlcm5hdGl2YSBkZW1vbnN0cmF0aXZhICcrbCsnIGRhIHF1ZXN0w6NvICcrKGkrMSkrJy4nIH07IH0pLAogICAgICByOiBsZXRyYXNbaSAlIDRdLAogICAgICBjOiAnQ29tZW50w6FyaW8gZGVtb25zdHJhdGl2byBkbyBwcm9mZXNzb3IgcGFyYSBhIHF1ZXN0w6NvICcrKGkrMSkrJyAoJythcmVhKycpOiBmdW5kYW1lbnRhw6fDo28gZGEgYWx0ZXJuYXRpdmEgY29ycmV0YSBlIHBvciBxdWUgYXMgZGVtYWlzIGVzdMOjbyBlcnJhZGFzLicKICAgIH0pOwogIH0KICByZXR1cm4gb3V0Owp9CgovKiBSYW5raW5nIGRlbW8gcG9yIHByb3ZhICovCnZhciBSQU5LX0RFTU8gPSB7CiAgZW5hbWVkOiBbJ01pY2hhZWwgRi4nLCdQYXRyw61jaWEgRy4nLCdKb8OjbyBQLicsJ2dhYnJpZWxhIGYuJywnVmljdMOzcmlhIEwuJywnQnLDoXVsaW8gUy4nLCdKdWxpYW5hIEYuJywnQ3Jpc3RpYW4gUi4nLCdDYW1pbGx5IE0uJywnTHVhbmEgUi4nLCdSZW5hdG8gQS4nLCdCaWFuY2EgVC4nLCdGZWxpcGUgTi4nLCdBbGluZSBDLicsJ0RpZWdvIE0uJ10sCiAgcmV2YWxpZGE6IFsnWWVzZW5pYSBSLicsJ0NhcmxvcyBWLicsJ01hcsOtYSBQLicsJ0pvbmF0aGFuIE8uJywnRGFuaWVsYSBRLicsJ0x1aXMgRi4nLCdBbmRyZWEgTS4nLCdQZWRybyBILicsJ1Jvc2EgRS4nLCdNaWd1ZWwgQS4nLCdDYW1pbGEgRC4nLCdKb3PDqSBMLicsJ1Bhb2xhIFMuJywnSXbDoW4gRy4nLCdLYXJlbiBCLiddCn07CgovKiBTbGlkZXMgZGFzIGF1bGFzOiBjb2xlIG8gbGluayBkbyBEcml2ZSBkZSBjYWRhIGF1bGEgcXVhbmRvIG8gdGltZSBlbnZpYXIuCiAgIENoYXZlID0gaWQgZG8gZXZlbnRvIChKT1JOQURBUyBhY2ltYSkuIEF1bGEgc2VtIGxpbmsgbW9zdHJhICJTbGlkZXMgZW0gYnJldmUiLiAqLwp2YXIgU0xJREVTID0gewogIGVuMDA6JycsIGVuMDE6JycsIGVuMDI6JycsIGVuMDM6JycsIGVuMDQ6JycsIGVuMDU6JycsIGVuMDY6JycsIGVuMDc6JycsCiAgZW4wODonJywgZW4wOTonJywgZW4xMDonJywgZW4xMTonJywgZW4xMjonJywgZW4xMzonJywgZW4xNDonJywKICBydjAxOicnLCBydjAyOicnLCBydjAzOicnLCBydjA0OicnLCBydjA1OicnLCBydjA2OicnLCBydjA3OicnLAogIHJ2MDg6JycsIHJ2MDk6JycsIHJ2MTA6JycsIHJ2MTE6JycsIHJ2MTI6JycsIHJ2MTM6JycsIHJ2MTQ6JycKfTsKCi8qIEFVTEEgSU5BVUdVUkFMIG5vIFlvdVR1YmU6ICJBYmVydHVyYSBBdG8gRmluYWwgRU5BTUVEIDIwMjYiIChsaW5rIG9maWNpYWwgZG8KICAgSWdvciwgMTEvMDgpLiBTdWJzdGl0dWl1IGEgcGxheWxpc3QgZ2Vuw6lyaWNhIG5hIHNlw6fDo28gIlByw7N4aW1hIHRyYW5zbWlzc8OjbyIKICAgZG8gSW7DrWNpbzogbWFuZGFyIG8gYWx1bm8gcHJvIHbDrWRlbyBkYSBlc3RyZWlhIGRlaXhhIGVsZSBhIHVtIHRvcXVlIGRvCiAgICJEZWZpbmlyIGxlbWJyZXRlIiBOQVRJVk8gZG8gWW91VHViZSwgcXVlIMOpIG8gcXVlIGEgZ2VudGUgcXVlciAoYSBwbGF5bGlzdAogICBleGlnaWEgY2HDp2FyIGEgYXVsYSBjZXJ0YSBhbnRlcykuIE1lc21vIGxpbmsgbm8gY2FtcG8geXQgZG8gZW4wMC4gKi8KdmFyIFlUX0FCRVJUVVJBID0gJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9eUppa1lRSi1JNEkmbGlzdD1QTGIySUVvdEtjWUlVJmluZGV4PTE2JzsKCi8qIFbDrWRlbyBkZSBib2FzLXZpbmRhcyAoImNvbWVjZSBwb3IgYXF1aSIpIGRvIEluw61jaW8g4oCUIGVtYmVkIFBPUiBQUk9WQS4KICAgVmF6aW8gPSBvIGNhcmQgTsODTyBhcGFyZWNlIChsaWdhIHNvemluaG8gcXVhbmRvIGEgcHJvdmEgZ2FuaGEgdW0gZW1iZWQpLgogICBFTkFNRUQ6IHbDrWRlbyBvZmljaWFsIG5vIFBhbmRhIFZpZGVvIChJZ29yLCAxMy8wOCkuIFJldmFsaWRhOiBhaW5kYSBzZW0gdsOtZGVvLiAqLwp2YXIgVklERU9fQlZfUE9SX1BST1ZBID0gewogIGVuYW1lZDogJ2h0dHBzOi8vcGxheWVyLXZ6LTcyOGNkYTgwLTJlZi50di5wYW5kYXZpZGVvLmNvbS5ici9lbWJlZC8\/dj03M2MwNmIxMS00ZGQwLTQyZGItYjFjNC1mZTRhOGIzYzc3ZTMnLAogIHJldmFsaWRhOiAnJwp9OwoKLyogUFLDik1JT1MgcmV0aXJhZG9zIFRFTVBPUkFSSUFNRU5URSAocGVkaWRvIGRvIElnb3IsIDExLzA4KSBlbnF1YW50byBhIHJlZ3JhIGRlCiAgIGluZGljYcOnw6NvIMOXIHJhbmtpbmcgw6kgYWNlcnRhZGEuIFJlbGlnYXIgPSB0cnVlICh2b2x0YSBvIGNhcmQgTm90ZWJvb2svVGFibGV0LwogICBLaXQgKyBvIHNvcnRlaW8gZGUgS2l0cyBubyByb2RhcMOpIGRhcyBmYWl4YXMpLiAqLwp2YXIgTU9TVFJBUl9QUkVNSU9TID0gZmFsc2U7CgovKiBCUSBNRUQgZGUgUG9ydGFzIEFiZXJ0YXMgKEJRIGdyw6F0aXMgZW0gYWdvc3RvLzI2KTogY2FyZCBwcsOpLWpvcm5hZGEgbm8gSW7DrWNpbyAqLwp2YXIgQlFNRURfVVJMID0gJ2h0dHBzOi8vbWt0LmVzdHJhdGVnaWEuY29tL21lZC9icS1tZWQtcG9ydGFzLWFiZXJ0YXMvP3V0bV9zb3VyY2U9YXRvZmluYWwmdXRtX21lZGl1bT1hcmVhLWRvLWFsdW5vJnV0bV9jYW1wYWlnbj1icW1lZC1wb3J0YXMtYWJlcnRhcyc7CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgUFJPRFXDh8ODTyDCtyBjYW1hZGEgZGUgZGFkb3MgU3VwYWJhc2UgKGF0by1maW5hbC1lbmFtZWQpCiAgIE8gZnJvbnQgcm9kYSBubyBXUCBjb20gYSBBTk9OIEtFWTsgc2VncmVkb3MgZSB2YWxpZGHDp8OjbyB2aXZlbQogICBuYXMgUlBDcyBTRUNVUklUWSBERUZJTkVSIChkYi8wMDAxICsgZGIvMDAwMikuIEEgc2Vzc8OjbyDDqSBvIENQRgogICBlbSBsb2NhbFN0b3JhZ2UgKGFmX2NwZiwgcGFkcsOjbyBCb2zDo28pOyBvIGJvb3QgaGlkcmF0YSBvIENBQ0hFCiAgIHZpYSBlc3RhZG9fcGFydGljaXBhbnRlIGUgb3MgcmVuZGVycyBjb250aW51YW0gU8ONTkNST05PUy4KICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCgoKLyogUmVzZ2F0ZSBkZSBjbGlxdWUgKHByb2R1w6fDo28pOiBzZSBhbGd1bSBzY3JpcHQgZG8gdGVtYSAoZGVsYXktSlMgZG8gV1AKICAgUm9ja2V0IGV0Yy4pIGVuZ29saXIgbyBjbGlxdWUgbnVtIGxpbmsgaW50ZXJubywgbmF2ZWdhbW9zIG1lc21vIGFzc2ltLgogICBTZSBhIG5hdmVnYcOnw6NvIHBhZHLDo28gYWNvbnRlY2VyLCBhIHDDoWdpbmEgZGVzY2FycmVnYSBlIG8gdGltZXIgbW9ycmUuICovCmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZSl7CiAgaWYgKGUuYnV0dG9uICE9PSAwIHx8IGUubWV0YUtleSB8fCBlLmN0cmxLZXkgfHwgZS5zaGlmdEtleSB8fCBlLmFsdEtleSkgcmV0dXJuOwogIHZhciBhID0gZS50YXJnZXQgJiYgZS50YXJnZXQuY2xvc2VzdCA\/IGUudGFyZ2V0LmNsb3Nlc3QoJ2FbaHJlZl0nKSA6IG51bGw7CiAgaWYgKCFhIHx8IGEudGFyZ2V0ID09PSAnX2JsYW5rJykgcmV0dXJuOwogIHZhciBocmVmID0gYS5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSB8fCAnJzsKICBpZiAoIWhyZWYgfHwgaHJlZi5jaGFyQXQoMCkgPT09ICcjJyB8fCAvXmphdmFzY3JpcHQ6L2kudGVzdChocmVmKSkgcmV0dXJuOwogIHRyeSB7IGlmIChhLm9yaWdpbiAmJiBhLm9yaWdpbiAhPT0gbG9jYXRpb24ub3JpZ2luKSByZXR1cm47IH0gY2F0Y2goeCl7fQogIHZhciBkZXN0aW5vID0gYS5ocmVmOwogIHNldFRpbWVvdXQoZnVuY3Rpb24oKXsgbG9jYXRpb24uaHJlZiA9IGRlc3Rpbm87IH0sIDM1MCk7Cn0sIHRydWUpOwpkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGUpewogIGlmICghZS5pc1RydXN0ZWQpIHJldHVybjsKICB2YXIgYiA9IGUudGFyZ2V0ICYmIGUudGFyZ2V0LmNsb3Nlc3QgPyBlLnRhcmdldC5jbG9zZXN0KCdidXR0b25bdHlwZT0ic3VibWl0Il0nKSA6IG51bGw7CiAgaWYgKCFiIHx8ICFiLmZvcm0gfHwgYi5kaXNhYmxlZCkgcmV0dXJuOwogIHZhciBmID0gYi5mb3JtLCB0MCA9IERhdGUubm93KCk7CiAgc2V0VGltZW91dChmdW5jdGlvbigpewogICAgLy8gbyBzdWJtaXQgcmVhbCBERVNURSBjbGlxdWUgcm9kb3U\/IChjb21wYXJhciBjb20gbyBpbnN0YW50ZSBkbyBjbGlxdWU7CiAgICAvLyBhIHZlcnPDo28gYW50aWdhIGNvbXBhcmF2YSBjb20gImFnb3JhIiBlIHJlLWRpc3BhcmF2YSBUT0RPIHN1Ym1pdCDigJQgUlBDCiAgICAvLyBkdXBsYSBlbSBjYWRhIGxvZ2luL2NhZGFzdHJvLCBtYXNjYXJhZGEgcGVsYSBpZGVtcG90w6puY2lhIGRvIHNlcnZpZG9yKQogICAgaWYgKChmLl9fdWx0aW1vU3VibWl0IHx8IDApID49IHQwKSByZXR1cm47CiAgICBpZiAoIWYuaXNDb25uZWN0ZWQpIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmbHV4byBqw6EgY29uY2x1aXUgZSByZW1vdmV1IG8gZm9ybQogICAgaWYgKGYuY2hlY2tWYWxpZGl0eSAmJiAhZi5jaGVja1ZhbGlkaXR5KCkpIHJldHVybjsgICAgICAgLy8gY2FtcG8gZmFsdGFuZG86IG8gYmFsw6NvIGRvIG5hdmVnYWRvciBndWlhCiAgICBmLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdzdWJtaXQnLCB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUgfSkpOwogIH0sIDQwMCk7Cn0sIHRydWUpOwoKCi8qIC0tLS0tLS0tLS0gbGVtYnJldGVzIGRlIGF1bGEgKC5pY3M6IEdvb2dsZS9BcHBsZS9PdXRsb29rKSAtLS0tLS0tLS0tICovCnZhciBJQ09fU0lOTyA9ICc8c3ZnIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xOCA4YTYgNiAwIDEwLTEyIDBjMCA3LTMgOS0zIDloMThzLTMtMi0zLTkiLz48cGF0aCBkPSJNMTMuNyAyMWEyIDIgMCAwMS0zLjQgMCIvPjwvc3ZnPic7CnZhciBJQ09fV0EgPSAnPHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iY3VycmVudENvbG9yIiBhcmlhLWhpZGRlbj0idHJ1ZSI+PHBhdGggZD0iTTEyIDJhMTAgMTAgMCAwMC04LjYgMTUuMUwyIDIybDUtMS4zQTEwIDEwIDAgMTAxMiAyem0wIDE4LjJjLTEuNSAwLTMtLjQtNC4zLTEuMmwtLjMtLjItMyAuOC44LTIuOS0uMi0uM0E4LjIgOC4yIDAgMTExMiAyMC4yem00LjYtNi4xYy0uMy0uMS0xLjUtLjctMS43LS44LS4yLS4xLS40LS4xLS42LjEtLjIuMy0uNy44LS44IDEtLjEuMi0uMy4yLS41LjFhNi43IDYuNyAwIDAxLTMuMy0yLjljLS4zLS40IDAtLjUuMS0uN2wuNC0uNWMuMS0uMi4xLS4zIDAtLjVsLS44LTEuOWMtLjItLjUtLjQtLjQtLjYtLjRoLS41Yy0uMiAwLS41LjEtLjcuMy0uOS45LTEuMSAyLjItLjIgMy43YTExIDExIDAgMDA0LjMgNGMuNi4zIDEuNS43IDIuNC42LjgtLjEgMS42LS42IDEuOS0xLjIuMi0uNS4yLTEgLjEtMS4xLS4xLS4yLS4zLS4yLS41LS4zeiIvPjwvc3ZnPic7CgovKiAtLS0tLS0tLS0tIGFwcCBpbnN0YWzDoXZlbCAoUFdBKSAtLS0tLS0tLS0tCiAgIENhcmQgZGUgaW5zdGFsYcOnw6NvIHJlbW92aWRvIGRvIEluw61jaW8gYSBwZWRpZG8gZG8gSWdvciAoMDYvMDgpLiBPIG1hbmlmZXN0CiAgIHNlZ3VlIG5hcyBww6FnaW5hcyAoaW5zdGFsw6F2ZWwgcGVsbyBtZW51IGRvIG5hdmVnYWRvcik7IG8gbGlzdGVuZXIgYWJhaXhvCiAgIGNvbnRpbnVhIHN1cHJpbWluZG8gbyBiYW5uZXIgYXV0b23DoXRpY28gZGUgaW5zdGFsYcOnw6NvIGRvIENocm9tZS4gKi8Kd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZWluc3RhbGxwcm9tcHQnLCBmdW5jdGlvbihlKXsgZS5wcmV2ZW50RGVmYXVsdCgpOyB9KTsKCgovKiAtLS0tLS0tLS0tIGd1YXJkYSBkbyBTaW11bGFkbzogYXZpc28gYW8gc2FpciBkYSBwcm92YSAtLS0tLS0tLS0tICovCnZhciBwcm92YUF0aXZhID0gZmFsc2U7CmZ1bmN0aW9uIHByb3ZhQmVmb3JlVW5sb2FkKGUpeyBlLnByZXZlbnREZWZhdWx0KCk7IGUucmV0dXJuVmFsdWUgPSAnJzsgfQpmdW5jdGlvbiBsaWdhckd1YXJkYVByb3ZhKCl7CiAgcHJvdmFBdGl2YSA9IHRydWU7CiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2JlZm9yZXVubG9hZCcsIHByb3ZhQmVmb3JlVW5sb2FkKTsKfQpmdW5jdGlvbiBkZXNsaWdhckd1YXJkYVByb3ZhKCl7CiAgcHJvdmFBdGl2YSA9IGZhbHNlOwogIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBwcm92YUJlZm9yZVVubG9hZCk7Cn0KZnVuY3Rpb24gZ3VhcmRhUHJvdmFNb2RhbChwcm9zc2VndWlyKXsKICB2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKICBlbC5jbGFzc05hbWUgPSAnc2ltLWd1YXJkJzsKICBlbC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0ic2ctY2FyZCI+JysKICAgICc8ZGl2IGNsYXNzPSJraWNrZXIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjEycHgiPlNpbXVsYWRvIGVtIGFuZGFtZW50bzwvZGl2PicrCiAgICAnPHAgc3R5bGU9ImZvbnQtc2l6ZToxNC41cHg7bGluZS1oZWlnaHQ6MS42O2NvbG9yOnZhcigtLWluay1kaW0pO21hcmdpbi1ib3R0b206OHB4Ij5Wb2PDqiBlc3TDoSBubyBtZWlvIGRvIFNpbXVsYWRvIEZpbmFsLiBTZSBzYWlyIGRlc3RhIHRlbGEsIDxiIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmspIj5vIGNyb27DtG1ldHJvIGNvbnRpbnVhIGNvcnJlbmRvPC9iPiBlIGEgcHJvdmEgc2VndWUgdmFsZW5kbzogYXMgcmVzcG9zdGFzIGRhZGFzIGF0w6kgYXF1aSBmaWNhbSBzYWx2YXMgbmEgc3VhIGNvbnRhLjwvcD4nKwogICAgJzxwIHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1pbmstbXV0ZSk7bWFyZ2luLWJvdHRvbToxOHB4Ij5TYWlhIGFwZW5hcyBzZSBmb3IgbmVjZXNzw6FyaW8uIFBhcmEgZW52aWFyIGEgcHJvdmEsIHVzZSBvIGJvdMOjbyBGaW5hbGl6YXIgc2ltdWxhZG8uPC9wPicrCiAgICAnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2dhcDoxMHB4O2ZsZXgtd3JhcDp3cmFwIj4nKwogICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tYW1iZXIgYnRuLXNtIiBpZD0ic2dGaWNhciI+Q29udGludWFyIGEgcHJvdmE8L2J1dHRvbj4nKwogICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBpZD0ic2dTYWlyIj5TYWlyIG1lc21vIGFzc2ltPC9idXR0b24+PC9kaXY+PC9kaXY+JzsKICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsKTsKICBlbC5xdWVyeVNlbGVjdG9yKCcjc2dGaWNhcicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgZWwucmVtb3ZlKCk7IH0pOwogIGVsLnF1ZXJ5U2VsZWN0b3IoJyNzZ1NhaXInKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICBlbC5yZW1vdmUoKTsgZGVzbGlnYXJHdWFyZGFQcm92YSgpOyBwcm9zc2VndWlyKCk7CiAgfSk7Cn0KCi8qIFVSTHMgZGEgZXN0cnV0dXJhIGRlIHDDoWdpbmFzIG5vIFdQIChwYWRyw6NvIEJvbMOjbzogYSBVUkwgbXVkYSBhbyBuYXZlZ2FyKSAqLwp2YXIgQUZfVVJMUyA9IHdpbmRvdy5fX0FGX1VSTFMgfHwgeyBscDonLi8nLCBjYWRhc3RybzonI2NhZGFzdHJvJywgYWNlc3NhcjonIycsIGFyZWE6JyMnIH07CgovKiBWRVJUSUNBTCAobXVsdGktbmljaG8pOiBvIHB1YmxpY2Fkb3IgaW5qZXRhIF9fQUZfUFJPVkEgcG9yIGRlcGxveS4gRU5BTUVEIGUKICAgUmV2YWxpZGEgcm9kYW0gbyBNRVNNTyBidW5kbGUsIGNhZGEgdW0gbmEgc3VhIFVSTCBlIG5vIHNldSBTdXBhYmFzZS4gU2VtCiAgIGluamXDp8OjbyAoYXJxdWl2byBsb2NhbCksIGNhaSBubyBFTkFNRUQuICovCnZhciBBRl9QUk9WQSA9ICh3aW5kb3cuX19BRl9QUk9WQSA9PT0gJ3JldmFsaWRhJykgPyAncmV2YWxpZGEnIDogJ2VuYW1lZCc7Ci8qIE1hcmNhIHBvciBwcm92YTogc8OzIG8gcsOzdHVsbyBjdXJ0byB1c2FkbyBuYXMgZnJhc2VzIGRlIFVJICh0w610dWxvcyBlIGRhdGFzCiAgIGRhcyBhdWxhcyBqw6EgdsOqbSBwcm9udG9zIGRlIEpPUk5BREFTW3Byb3ZhXSkuICovCnZhciBCUkFORCA9IHsKICBlbmFtZWQ6ICAgeyBjdXJ0YTonRU5BTUVEJywgICBzdWI6J0VOQU1FRCDCtyAyMDI2JywgICAgICAgICAgdGFnOidBdG8gRmluYWwgwrcgRU5BTUVEIDIwMjYnLCAgICAgICAgICAgICAgaW5hdWc6J1ByZW1vbmnDp8OjbyBFTkFNRUQgMjAyNicgfSwKICByZXZhbGlkYTogeyBjdXJ0YTonUmV2YWxpZGEnLCBzdWI6J1JldmFsaWRhIMK3IElORVAgMjAyNi4yJywgdGFnOidBdG8gRmluYWwgwrcgUmV2YWxpZGEgSU5FUCAyMDI2LjInLCAgICAgIGluYXVnOidQcmVtb25pw6fDo28gUmV2YWxpZGEgSU5FUCAyMDI2LjInIH0KfTsKdmFyIEFGX0JSQU5EID0gQlJBTkRbQUZfUFJPVkFdIHx8IEJSQU5ELmVuYW1lZDsKCi8qIEluZGljYcOnw6NvOiBjYXB0dXJhID9yZWY9IGVtIFFVQUxRVUVSIHDDoWdpbmEgZSBndWFyZGEgYXTDqSBvIGNhZGFzdHJvICovCnRyeSB7CiAgdmFyIF9tcmVmID0gbG9jYXRpb24uc2VhcmNoLm1hdGNoKC9bPyZdcmVmPShbYS16MC05XXs2LDE2fSkvaSk7CiAgaWYgKF9tcmVmKSBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMU1ArJ3JlZicsIF9tcmVmWzFdLnRvTG93ZXJDYXNlKCkpOwp9IGNhdGNoKGUpe30KLyogU3VwYWJhc2UgcG9yIGRlcGxveTogbyBwdWJsaWNhZG9yIGluamV0YSBfX0FGX1NVUEFfVVJML19fQUZfQU5PTiBjb25mb3JtZSBvCiAgIHZlcnRpY2FsIChFTkFNRUQgZSBSZXZhbGlkYSB0w6ptIFBST0pFVE9TIFNFUEFSQURPUykuIEZhbGxiYWNrID0gRU5BTUVELCBwcm8KICAgYXJxdWl2byBsb2NhbCBhYnJpciBzZW0gY29uZmlnLiAqLwp2YXIgU1VQQV9VUkwgPSB3aW5kb3cuX19BRl9TVVBBX1VSTCB8fCAnaHR0cHM6Ly9sc25kbHdhZGZpcm51bHptcWtlcy5zdXBhYmFzZS5jbyc7CnZhciBTVVBBX0FOT04gPSB3aW5kb3cuX19BRl9BTk9OIHx8ICdleUpoYkdjaU9pSklVekkxTmlJc0luUjVjQ0k2SWtwWFZDSjkuZXlKcGMzTWlPaUp6ZFhCaFltRnpaU0lzSW5KbFppSTZJbXh6Ym1Sc2QyRmtabWx5Ym5Wc2VtMXhhMlZ6SWl3aWNtOXNaU0k2SW1GdWIyNGlMQ0pwWVhRaU9qRTNPRFUzTnpRek1qQXNJbVY0Y0NJNk1qRXdNVE0xTURNeU1IMC5DUVV0QWJIdW9YaU1pRGVzLTd6SmhOZHhGRkFUSkN0SFpvZTd4T25ueFRnJzsKCi8qID09PSBDUk06IGVzcGVsaG8gZGEgaW5zY3JpY2FvIHBybyBTRk1DIHZpYSBWZXJzbyAoYWRtaW4tYWpheCkuIE5hbyBibG9xdWVpYSBvIGZsdXhvIGRvIGFsdW5vLgogICBkb25lKCkgbmF2ZWdhIG5hIGhvcmEgKGxvY2F0aW9uLmhyZWYpIC0+IG8gUE9TVCB0ZW0gcXVlIHNhaXIgU0lOQ1JPTk8gY29tIGtlZXBhbGl2ZTsKICAgcG9yIGlzc28gYSBnZW8gcmVzb2x2ZSBubyBib290IChwYWRyYW8gZG8gZm9ybSBjbGFzc2ljbyksIG5hbyBubyBzdWJtaXQuID09PSAqLwp2YXIgX19hZlNmbWNWZXJzbyA9IDM7CnZhciBfX2FmU2ZtY0dlbyA9IHsgY2l0eTogJycsIHJlZ2lvbjogJycgfTsKdHJ5IHsKICBmZXRjaCgnaHR0cHM6Ly9leHRyZW1lLWlwLWxvb2t1cC5jb20vanNvbi8\/a2V5PWtyZkdIenI3MDVVVGhNb2p4M2FQJykKICAgIC50aGVuKGZ1bmN0aW9uKHIpeyByZXR1cm4gci5qc29uKCk7IH0pCiAgICAudGhlbihmdW5jdGlvbihkKXsKICAgICAgX19hZlNmbWNHZW8uY2l0eSA9IChkICYmIGQuY2l0eSkgPyBkLmNpdHkgOiAnJzsKICAgICAgX19hZlNmbWNHZW8ucmVnaW9uID0gKGQgJiYgZC5yZWdpb24pID8gZC5yZWdpb24gOiAnJzsKICAgIH0pCiAgICAuY2F0Y2goZnVuY3Rpb24oKXt9KTsKfSBjYXRjaChlKXt9CmZ1bmN0aW9uIGFmU2ZtY1V0bSgpewogIHZhciBvdXQgPSB7IHV0bV9zb3VyY2U6JycsIHV0bV9tZWRpdW06JycsIHV0bV9jYW1wYWlnbjonJywgdXRtX3Rlcm06JycsIHV0bV9jb250ZW50OicnIH07CiAgdmFyIGtzID0gT2JqZWN0LmtleXMob3V0KTsKICB2YXIgYW55ID0gZmFsc2U7CiAgdHJ5IHsKICAgIHZhciBxcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7CiAgICBrcy5mb3JFYWNoKGZ1bmN0aW9uKGspeyB2YXIgdiA9IHFzLmdldChrKTsgaWYgKHYpIHsgb3V0W2tdID0gdjsgYW55ID0gdHJ1ZTsgfSB9KTsKICB9IGNhdGNoKGUpe30KICBpZiAoYW55KSByZXR1cm4gb3V0OwogIHZhciByYXcgPSBudWxsOwogIHRyeSB7CiAgICB2YXIgcm93ID0gZG9jdW1lbnQuY29va2llLnNwbGl0KCc7ICcpLmZpbmQoZnVuY3Rpb24ocil7IHJldHVybiByLmluZGV4T2YoJ2VzdHJhdGVnaWFfdXRtPScpID09PSAwOyB9KTsKICAgIGlmIChyb3cpIHJhdyA9IGRlY29kZVVSSUNvbXBvbmVudChyb3cuc3Vic3RyaW5nKHJvdy5pbmRleE9mKCc9JykgKyAxKSk7CiAgfSBjYXRjaChlKXt9CiAgaWYgKCFyYXcpIHsgdHJ5IHsgcmF3ID0gd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKCdlc3RyYXRlZ2lhX3V0bScpOyB9IGNhdGNoKGUpe30gfQogIGlmIChyYXcpIHsKICAgIHRyeSB7CiAgICAgIHZhciBwID0gSlNPTi5wYXJzZShyYXcpOwogICAgICBpZiAocCAmJiBwLnRzICYmIHAudiAmJiAoRGF0ZS5ub3coKSAtIHAudHMpIDw9IDQ4KjM2ZTUpIHsKICAgICAgICBrcy5mb3JFYWNoKGZ1bmN0aW9uKGspeyBpZiAocC52W2tdKSBvdXRba10gPSBwLnZba107IH0pOwogICAgICB9CiAgICB9IGNhdGNoKGUpe30KICB9CiAgcmV0dXJuIG91dDsKfQpmdW5jdGlvbiBhZlNmbWNFbnZpYXIoKXsKICB2YXIgZyA9IGZ1bmN0aW9uKGlkKXsgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpOyByZXR1cm4gKGVsICYmIGVsLnZhbHVlKSA\/IGVsLnZhbHVlIDogJyc7IH07CiAgdmFyIHV0bSA9IGFmU2ZtY1V0bSgpOwogIHZhciBhcmVhID0gJyc7CiAgdHJ5IHsgYXJlYSA9ICh3aW5kb3cuX19BRl9VUkxTICYmIHdpbmRvdy5fX0FGX1VSTFMuYXJlYSkgPyB3aW5kb3cuX19BRl9VUkxTLmFyZWEuc3BsaXQoJz8nKVswXSA6ICcnOyB9IGNhdGNoKGUpe30KICB2YXIgZiA9IHsKICAgIE5vbWVfQ29tcGxldG86IGcoJ2ZOb21lJyksCiAgICBFbWFpbDogZygnZkVtYWlsJyksCiAgICBUZWxlZm9uZTogZygnZldoYXRzJyksCiAgICBBbm9fZGVfRm9ybWF0dXJhOiBnKCdmTW9tZW50bycpLAogICAgUGFnaW5hX09yaWdlbTogd2luZG93LmxvY2F0aW9uLmhyZWYsCiAgICB1dG1fc291cmNlOiB1dG0udXRtX3NvdXJjZSwgdXRtX21lZGl1bTogdXRtLnV0bV9tZWRpdW0sIHV0bV9jYW1wYWlnbjogdXRtLnV0bV9jYW1wYWlnbiwKICAgIHV0bV90ZXJtOiB1dG0udXRtX3Rlcm0sIHV0bV9jb250ZW50OiB1dG0udXRtX2NvbnRlbnQsCiAgICBjaGF2ZV9kZTogJzAxX0VNRURfTEVBRFNfVE9UQUlTJywKICAgIG1pZDogJzUxNTAwOTAxOCcsCiAgICBDb3JpbmdhXzAyOiBhcmVhLAogICAgSW50ZXJlc3NlX0NvbmN1cnNvOiAnZW1lZCcsCiAgICB3ZWxjb21lOiAnb2ZmJywKICAgIEludGVyZXNzZV9BcmVhOiAnRU1FRF9BcmVhJywKICAgIENvcmluZ2FfMDE6ICdsYW5kaW5nLXBhZ2UnLAogICAgTW9kb19kZV9lbnRyYWRhOiAnbGFuZGluZy1wYWdlJywKICAgIEludGVyZXNzZV9FdmVudG86ICh3aW5kb3cuX19BRl9QUk9WQSA9PT0gJ3JldmFsaWRhJykgPyAnQXRvIEZpbmFsIFJldmFsaWRhIElORVAgMjAyNi4yJyA6ICdBdG8gRmluYWwgRU5BTUVEIDIwMjYnLAogICAgZGV2X3phcHA6ICdvZmYnLAogICAgQ2lkYWRlX2RlX09yaWdlbV9kb19JUDogJycsCiAgICBFc3RhZG9fZGVfT3JpZ2VtX2RvX0lQOiAnJwogIH07CiAgaWYgKCFmLkVtYWlsKSByZXR1cm47CiAgZi5DaWRhZGVfZGVfT3JpZ2VtX2RvX0lQID0gX19hZlNmbWNHZW8uY2l0eTsKICBmLkVzdGFkb19kZV9PcmlnZW1fZG9fSVAgPSBfX2FmU2ZtY0dlby5yZWdpb247CiAgdmFyIGxlYWQgPSBPYmplY3Qua2V5cyhmKS5tYXAoZnVuY3Rpb24oayl7IHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoaykgKyAnPScgKyBlbmNvZGVVUklDb21wb25lbnQoZltrXSk7IH0pLmpvaW4oJyYnKTsKICB2YXIgY29ycG8gPSAnYWN0aW9uPWFqYXhfc3VibWl0X2Zvcm1fbmV3JmxlYWQ9JyArIGVuY29kZVVSSUNvbXBvbmVudChsZWFkKTsKICBmZXRjaCgnaHR0cHM6Ly9ta3QuZXN0cmF0ZWdpYS5jb20vbWVkL3dwLWFkbWluL2FkbWluLWFqYXgucGhwJywgewogICAgbWV0aG9kOiAnUE9TVCcsCiAgICBoZWFkZXJzOiB7ICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04JyB9LAogICAgYm9keTogY29ycG8sCiAgICBrZWVwYWxpdmU6IHRydWUKICB9KS5jYXRjaChmdW5jdGlvbigpe30pOwp9Ci8qIEV2ZW50byBkZSBjb252ZXJzYW8gcHJvIEdUTSAoR1RNLU41TjdKSDgpOiBhIGJhdGVyaWEgZGUgTGVhZCAoTWV0YSBQaXhlbCwgR0E0CiAgIGdlbmVyYXRlX2xlYWQsIEJpbmcpIGRpc3BhcmEgbm8gZXZlbnRvIGN1c3RvbWl6YWRvICdmb3JtX3N1Ym1pdCcgZW0gcXVhbHF1ZXIgcGFnaW5hCiAgIGRvIG1rdC4gUmVwbGljYSBkbyBwdXNoRm9ybVN1Ym1pdFRvRGF0YUxheWVyIGRvIGZvcm0gY2xhc3NpY28gKyB1c2VyRGF0YS4qIChjYWRlaWEKICAgcHJpbWFyaWEgZG8gYWR2YW5jZWQgbWF0Y2hpbmcpICsgaW5wdXRzIG9jdWx0b3MgI2VtYWlsLyNmaXJzdF9uYW1lLyNwaG9uZSAoY2FkZWlhIGRlCiAgIGZhbGxiYWNrIGRvcyBtYWNyb3MpLiBkb25lKCkgbmF2ZWdhIG5hIGhvcmEsIGVudGFvIHNlZ3VyYW1vcyBhIG5hdmVnYWNhbyBubwogICBldmVudENhbGxiYWNrIGNvbSB0ZXRvIGRlIDkwMG1zIHByb3MgcGl4ZWxzIHNhaXJlbS4gKi8KZnVuY3Rpb24gYWZHdG1MZWFkKGNiKXsKICB2YXIgZmltID0gZmFsc2U7CiAgdmFyIGdvID0gZnVuY3Rpb24oKXsgaWYgKGZpbSkgcmV0dXJuOyBmaW0gPSB0cnVlOyB0cnkgeyBjYigpOyB9IGNhdGNoKGUpe30gfTsKICB0cnkgewogICAgdmFyIGcgPSBmdW5jdGlvbihpZCl7IHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsgcmV0dXJuIChlbCAmJiBlbC52YWx1ZSkgPyBlbC52YWx1ZSA6ICcnOyB9OwogICAgdmFyIG5vbWUgPSBnKCdmTm9tZScpLCBlbWFpbCA9IGcoJ2ZFbWFpbCcpLCB0ZWwgPSBnKCdmV2hhdHMnKTsKICAgIHZhciBwYXJ0ZXMgPSBub21lLnRyaW0oKS5zcGxpdCgvXHMrLyk7CiAgICB2YXIgcHJpbWVpcm8gPSBwYXJ0ZXMubGVuZ3RoID8gcGFydGVzWzBdLnRvTG93ZXJDYXNlKCkgOiAnJzsKICAgIHZhciB1bHRpbW8gPSBwYXJ0ZXMubGVuZ3RoID4gMSA\/IHBhcnRlc1twYXJ0ZXMubGVuZ3RoIC0gMV0udG9Mb3dlckNhc2UoKSA6ICcnOwogICAgdmFyIG1rID0gZnVuY3Rpb24oaWQsIHZhbCl7CiAgICAgIGlmICghdmFsKSByZXR1cm47CiAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKICAgICAgaWYgKCFlbCkgeyBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7IGVsLnR5cGUgPSAnaGlkZGVuJzsgZWwuaWQgPSBpZDsgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbCk7IH0KICAgICAgZWwudmFsdWUgPSB2YWw7CiAgICB9OwogICAgbWsoJ2ZpcnN0X25hbWUnLCBub21lKTsgbWsoJ2VtYWlsJywgZW1haWwpOyBtaygncGhvbmUnLCB0ZWwpOwogICAgd2luZG93LmRhdGFMYXllciA9IHdpbmRvdy5kYXRhTGF5ZXIgfHwgW107CiAgICB3aW5kb3cuZGF0YUxheWVyLnB1c2goewogICAgICBldmVudDogJ2Zvcm1fc3VibWl0JywKICAgICAgZXZlbnRNb2RlbDogewogICAgICAgIGZvcm1faWQ6ICdmb3Jtc19sYXlvdXQnLAogICAgICAgIGZvcm1fbmFtZTogbnVsbCwKICAgICAgICBmb3JtX2Rlc3RpbmF0aW9uOiB3aW5kb3cubG9jYXRpb24uaHJlZiwKICAgICAgICBmb3JtX2xlbmd0aDogNSwKICAgICAgICBmb3JtX3N1Ym1pdF90ZXh0OiAnSW5zY3JldmVyIGUgZW50cmFyJywKICAgICAgICBlbWFpbDogZW1haWwKICAgICAgfSwKICAgICAgdXNlckRhdGE6IHsgZW1haWw6IGVtYWlsLnRvTG93ZXJDYXNlKCksIGZpcnN0TmFtZTogcHJpbWVpcm8sIGxhc3ROYW1lOiB1bHRpbW8sIHBob25lOiB0ZWwgfSwKICAgICAgZW1haWw6IGVtYWlsLAogICAgICBldmVudENhbGxiYWNrOiBnbywKICAgICAgZXZlbnRUaW1lb3V0OiA3MDAKICAgIH0pOwogIH0gY2F0Y2goZSl7IGdvKCk7IH0KICBzZXRUaW1lb3V0KGdvLCA5MDApOwp9CmZ1bmN0aW9uIHNiUnBjKGZuLCBib2R5KXsKICByZXR1cm4gZmV0Y2goU1VQQV9VUkwgKyAnL3Jlc3QvdjEvcnBjLycgKyBmbiwgewogICAgbWV0aG9kOiAnUE9TVCcsCiAgICBoZWFkZXJzOiB7ICdhcGlrZXknOiBTVVBBX0FOT04sICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgU1VQQV9BTk9OLCAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nIH0sCiAgICBib2R5OiBKU09OLnN0cmluZ2lmeShib2R5IHx8IHt9KQogIH0pLnRoZW4oZnVuY3Rpb24ocil7IHJldHVybiByLmpzb24oKTsgfSk7Cn0KZnVuY3Rpb24gc2JTZWxlY3QocGF0aCl7CiAgcmV0dXJuIGZldGNoKFNVUEFfVVJMICsgJy9yZXN0L3YxLycgKyBwYXRoLCB7CiAgICBoZWFkZXJzOiB7ICdhcGlrZXknOiBTVVBBX0FOT04sICdBdXRob3JpemF0aW9uJzogJ0JlYXJlciAnICsgU1VQQV9BTk9OIH0KICB9KS50aGVuKGZ1bmN0aW9uKHIpeyByZXR1cm4gci5qc29uKCk7IH0pOwp9CgovKiBjYWNoZSBoaWRyYXRhZG8gbm8gYm9vdDsgb3MgcmVuZGVycyBsZWVtIGRhcXVpIGRlIGZvcm1hIHPDrW5jcm9uYSAqLwp2YXIgQ0FDSEUgPSB7CiAgdXNlcjogbnVsbCwgICAgICAgICAgLy8ge25vbWUsIGVtYWlsLCBwcm92YSwgY3BmfQogIGNoZWNraW5zOiB7fSwgICAgICAgIC8vIGV2SWQgLT4ge2FvX3Zpdm8sIHRzfQogIHJlc3Bvc3Rhczoge30sICAgICAgIC8vIHF1ZXN0YW9faWQgLT4ge2V2ZW50b19pZCwgbGV0cmEsIGFjZXJ0b3UsIGNvcnJldGEsIGNvbWVudGFyaW99CiAgcXVlc3RvZXM6IHt9LCAgICAgICAgLy8gZXZJZCAtPiBbe2lkLCBvcmRlbSwgYXJlYSwgcSwgYWx0c31dCiAgc2ltUmVzOiBudWxsLCAgICAgICAgLy8ge2FjZXJ0b3MsIHRvdGFsLCByZXNwb3N0YXN9CiAgc2ltUHJvZzogbnVsbCwgICAgICAgLy8ge2luaWNpYWRvX2VtLCByZXNwb3N0YXMsIG1hcmNhZGFzfQogIHJhbmtpbmc6IG51bGwKfTsKLyogU2Vzc8OjbyBSRVNJTElFTlRFOiBvIFNhZmFyaSBkbyBpUGhvbmUgKG1vZG8gcHJpdmFkbyAvIGJsb3F1ZWlvIGRlIGNvb2tpZXMpCiAgIHBvZGUgcmVjdXNhciBvIGxvY2FsU3RvcmFnZS4gU2VtIGZhbGxiYWNrLCBhIHNlc3PDo28gbW9ycmUgbmEgdHJvY2EgZGUKICAgcMOhZ2luYSBlIG8gYWx1bm8gZmljYSBwcmVzbyBubyBsYcOnbyBhY2Vzc2FyIOKGkiDDoXJlYSDihpIgYWNlc3Nhci4gKi8KdmFyIF9zZXNzYW9NZW0gPSBudWxsOwpmdW5jdGlvbiBfY29va2llR2V0KG4pewogIHZhciBtID0gZG9jdW1lbnQuY29va2llLm1hdGNoKCcoXnw7ICknICsgbiArICc9KFteO10qKScpOwogIHJldHVybiBtID8gZGVjb2RlVVJJQ29tcG9uZW50KG1bMl0pIDogbnVsbDsKfQpmdW5jdGlvbiBfY29va2llU2V0KG4sIHYsIGRpYXMpewogIHRyeSB7CiAgICBkb2N1bWVudC5jb29raWUgPSBuICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHYpICsgJztwYXRoPS9tZWQvYXRvLWZpbmFsLWVuYW1lZC87bWF4LWFnZT0nICsKICAgICAgKGRpYXMgPyBkaWFzICogODY0MDAgOiAwKSArICc7U2FtZVNpdGU9TGF4JyArIChsb2NhdGlvbi5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyAnO1NlY3VyZScgOiAnJyk7CiAgfSBjYXRjaChlKXt9Cn0KZnVuY3Rpb24gc2Vzc2FvU2V0KGNwZil7CiAgX3Nlc3Nhb01lbSA9IGNwZjsKICB0cnkgeyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMU1ArJ2NwZicsIGNwZik7IH0gY2F0Y2goZSl7fQogIF9jb29raWVTZXQoTFNQKydjcGYnLCBjcGYsIDMwKTsKfQpmdW5jdGlvbiBzZXNzYW9MaW1wYSgpewogIF9zZXNzYW9NZW0gPSBudWxsOwogIHRyeSB7IGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKExTUCsnY3BmJyk7IH0gY2F0Y2goZSl7fQogIF9jb29raWVTZXQoTFNQKydjcGYnLCAnJywgMCk7Cn0KZnVuY3Rpb24gY3BmU2Fsdm8oKXsKICB2YXIgdiA9IG51bGw7CiAgdHJ5IHsgdiA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKExTUCsnY3BmJyk7IH0gY2F0Y2goZSl7fQogIGlmICghdikgdiA9IF9jb29raWVHZXQoTFNQKydjcGYnKTsKICBpZiAoIXYpIHYgPSBfc2Vzc2FvTWVtOwogIGlmICh2KSB7IF9zZXNzYW9NZW0gPSB2OyB0cnkgeyBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShMU1ArJ2NwZicsIHYpOyB9IGNhdGNoKGUpe30gfQogIHJldHVybiB2Owp9CmZ1bmN0aW9uIGFybWF6ZW5hbWVudG9PaygpewogIHRyeSB7IGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdfX3QnLCAnMScpOyBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSgnX190Jyk7IHJldHVybiB0cnVlOyB9IGNhdGNoKGUpeyByZXR1cm4gZmFsc2U7IH0KfQoKZnVuY3Rpb24gaGlkcmF0YXIoKXsKICB2YXIgY3BmID0gY3BmU2Fsdm8oKTsKICBpZiAoIWNwZikgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7CiAgcmV0dXJuIFByb21pc2UuYWxsKFsKICAgIHNiUnBjKCdlc3RhZG9fcGFydGljaXBhbnRlJywgeyBwX2NwZjogY3BmIH0pLAogICAgc2JTZWxlY3QoJ3F1aXpfcXVlc3RvZXM\/c2VsZWN0PWlkLGV2ZW50b19pZCxvcmRlbSxhcmVhLGVudW5jaWFkbyxhbHRlcm5hdGl2YXMmb3JkZXI9b3JkZW0nKQogIF0pLnRoZW4oZnVuY3Rpb24ocmVzKXsKICAgIHZhciBlc3QgPSByZXNbMF0sIHFzID0gcmVzWzFdOwogICAgaWYgKCFlc3QgfHwgZXN0LnN0YXR1cyAhPT0gJ29rJykgcmV0dXJuIGZhbHNlOwogICAgQ0FDSEUudXNlciA9IHsgbm9tZTogZXN0Lm5vbWUsIGVtYWlsOiBlc3QuZW1haWwsIHByb3ZhOiBlc3QucHJvdmEsIGNwZjogY3BmIH07CiAgICBDQUNIRS5yZWZDb2RlID0gZXN0LnJlZl9jb2RlIHx8ICcnOwogICAgQ0FDSEUuaW5kaWNhY29lcyA9IGVzdC5pbmRpY2Fjb2VzIHx8IHsgdmFsaWRhczogMCwgcGVuZGVudGVzOiAwLCBsaXN0YTogW10gfTsKICAgIENBQ0hFLmNoZWNraW5zID0ge307CiAgICBPYmplY3Qua2V5cyhlc3QuY2hlY2tpbnMgfHwge30pLmZvckVhY2goZnVuY3Rpb24oZXYpewogICAgICBDQUNIRS5jaGVja2luc1tldl0gPSB7IGFvVml2bzogZXN0LmNoZWNraW5zW2V2XS5hb192aXZvLCB0czogZXN0LmNoZWNraW5zW2V2XS50cyAqIDEwMDAgfTsKICAgIH0pOwogICAgQ0FDSEUucmVzcG9zdGFzID0ge307CiAgICAoZXN0LnJlc3Bvc3RhcyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihyKXsgQ0FDSEUucmVzcG9zdGFzW3IucXVlc3Rhb19pZF0gPSByOyB9KTsKICAgIENBQ0hFLnNpbVJlcyA9IGVzdC5zaW11bGFkb19yZXN1bHQgfHwgbnVsbDsKICAgIENBQ0hFLnNpbVByb2cgPSBlc3Quc2ltdWxhZG9fcHJvZ3Jlc3MgfHwgbnVsbDsKICAgIENBQ0hFLnF1ZXN0b2VzID0ge307CiAgICAoQXJyYXkuaXNBcnJheShxcykgPyBxcyA6IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHJvdyl7CiAgICAgIChDQUNIRS5xdWVzdG9lc1tyb3cuZXZlbnRvX2lkXSA9IENBQ0hFLnF1ZXN0b2VzW3Jvdy5ldmVudG9faWRdIHx8IFtdKS5wdXNoKHsKICAgICAgICBpZDogcm93LmlkLCBvcmRlbTogcm93Lm9yZGVtLCBhcmVhOiByb3cuYXJlYSwgcTogcm93LmVudW5jaWFkbywgYWx0czogcm93LmFsdGVybmF0aXZhcwogICAgICB9KTsKICAgIH0pOwogICAgcmV0dXJuIHRydWU7CiAgfSk7Cn0KCi8qIHN0b3JlOiBNRVNNQSBpbnRlcmZhY2Ugc8OtbmNyb25hIGRvIHByb3TDs3RpcG8sIHNlcnZpZGEgcGVsbyBDQUNIRSAqLwp2YXIgc3RvcmUgPSB7CiAgX2s6IGZ1bmN0aW9uKGspeyByZXR1cm4gTFNQICsgazsgfSwKICBnZXQ6IGZ1bmN0aW9uKGssIGZiKXsgdHJ5IHsgdmFyIHYgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLl9rKGspKTsgcmV0dXJuIHYgPyBKU09OLnBhcnNlKHYpIDogKGZiPT09dW5kZWZpbmVkPyBudWxsOiBmYik7IH0gY2F0Y2goZSl7IHJldHVybiAoZmI9PT11bmRlZmluZWQ\/IG51bGw6IGZiKTsgfSB9LAogIHNldDogZnVuY3Rpb24oaywgdil7IHRyeSB7IGxvY2FsU3RvcmFnZS5zZXRJdGVtKHRoaXMuX2soayksIEpTT04uc3RyaW5naWZ5KHYpKTsgfSBjYXRjaChlKXt9IH0sCgogIHNlc3Npb246IGZ1bmN0aW9uKCl7IHJldHVybiBjcGZTYWx2bygpOyB9LAogIGxvZ291dDogZnVuY3Rpb24oKXsgc2Vzc2FvTGltcGEoKTsgfSwKICBtZTogZnVuY3Rpb24oKXsgcmV0dXJuIENBQ0hFLnVzZXI7IH0sCgogIGNoZWNraW5zOiBmdW5jdGlvbigpeyByZXR1cm4gQ0FDSEUuY2hlY2tpbnM7IH0sCgogIC8vIG1pc3PDo28gImN1bXByaWRhIiA9IFRPREFTIGFzIHF1ZXN0w7VlcyBkbyBkaWEgcmVzcG9uZGlkYXMgbm8gc2Vydmlkb3IKICBtaXNzb2VzOiBmdW5jdGlvbigpewogICAgdmFyIG91dCA9IHt9OwogICAgT2JqZWN0LmtleXMoQ0FDSEUucXVlc3RvZXMpLmZvckVhY2goZnVuY3Rpb24oZXYpewogICAgICB2YXIgcXMgPSBDQUNIRS5xdWVzdG9lc1tldl07CiAgICAgIGlmICghcXMubGVuZ3RoKSByZXR1cm47CiAgICAgIHZhciByZXNwID0gcXMuZmlsdGVyKGZ1bmN0aW9uKHEpeyByZXR1cm4gQ0FDSEUucmVzcG9zdGFzW3EuaWRdOyB9KTsKICAgICAgaWYgKHJlc3AubGVuZ3RoID09PSBxcy5sZW5ndGgpIHsKICAgICAgICBvdXRbZXZdID0gewogICAgICAgICAgYWNlcnRvczogcmVzcC5maWx0ZXIoZnVuY3Rpb24ocSl7IHJldHVybiBDQUNIRS5yZXNwb3N0YXNbcS5pZF0uYWNlcnRvdTsgfSkubGVuZ3RoLAogICAgICAgICAgdG90YWw6IHFzLmxlbmd0aCwKICAgICAgICAgIHRzOiAwCiAgICAgICAgfTsKICAgICAgfQogICAgfSk7CiAgICByZXR1cm4gb3V0OwogIH0sCgogIC8vIG5vdGEgJSBkbyBTaW11bGFkbyBGaW5hbCAocmVzdWx0YWRvIGRvIHNlcnZpZG9yKQogIHNpbXVsYWRvOiBmdW5jdGlvbigpewogICAgaWYgKCFDQUNIRS5zaW1SZXMgfHwgIUNBQ0hFLnNpbVJlcy50b3RhbCkgcmV0dXJuIG51bGw7CiAgICByZXR1cm4geyBub3RhOiBNYXRoLnJvdW5kKDEwMCAqIENBQ0hFLnNpbVJlcy5hY2VydG9zIC8gQ0FDSEUuc2ltUmVzLnRvdGFsKSB9OwogIH0KfTsKCi8qIC0tLS0tLS0tLS0tLS0tLS0gdXRpbGlkYWRlcyAtLS0tLS0tLS0tLS0tLS0tICovCmZ1bmN0aW9uICQocywgZWwpeyByZXR1cm4gKGVsfHxkb2N1bWVudCkucXVlcnlTZWxlY3RvcihzKTsgfQpmdW5jdGlvbiAkJChzLCBlbCl7IHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCgoZWx8fGRvY3VtZW50KS5xdWVyeVNlbGVjdG9yQWxsKHMpKTsgfQovKiBlc2MgZXNjYXBhIFRBTULDiU0gYXNwYXMgKCIgJyk6IGEgdmFyaWFudGUgYW50aWdhIHRleHRDb250ZW50LT5pbm5lckhUTUwgc8OzCiAgIGVzY2FwYXZhICYgPCA+LCBlbnTDo28gVVJML25vbWUgaW50ZXJwb2xhZG8gZGVudHJvIGRlIHVtIGF0cmlidXRvIChzcmM9Ii4uIiwKICAgaHJlZj0iLi4iKSBwb2RpYSBxdWVicmFyIG8gYXRyaWJ1dG8gZSBwbGFudGFyIG9uLi4uPSAoWFNTIHZpYSBtaWRpYUhUTUwgZSB2aWEKICAgbGV0cmEgZGUgYWx0ZXJuYXRpdmEpLiBBdWRpdG9yaWEgMTEvMDguICovCmZ1bmN0aW9uIGVzYyhzKXsgcmV0dXJuIFN0cmluZyhzPT1udWxsPycnOnMpLnJlcGxhY2UoL1smPD4iJ10vZywgZnVuY3Rpb24oYyl7CiAgcmV0dXJuIHsnJic6JyZhbXA7JywnPCc6JyZsdDsnLCc+JzonJmd0OycsJyInOicmcXVvdDsnLCInIjonJiMzOTsnfVtjXTsgfSk7IH0KZnVuY3Rpb24gdG9hc3QobXNnKXsgdmFyIHQ9JCgnI3RvYXN0Jyk7IGlmKCF0KSByZXR1cm47IHQudGV4dENvbnRlbnQ9bXNnOyB0LmNsYXNzTGlzdC5hZGQoJ3Nob3cnKTsgY2xlYXJUaW1lb3V0KHRvYXN0Ll90KTsgdG9hc3QuX3Q9c2V0VGltZW91dChmdW5jdGlvbigpeyB0LmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTsgfSwgMzIwMCk7IH0KZnVuY3Rpb24gZGF0YUJSKGlzbyl7IHZhciBwPWlzby5zcGxpdCgnLScpOyByZXR1cm4gcFsyXSsnLycrcFsxXTsgfQp2YXIgTUVTRVMgPSBbJ0pBTicsJ0ZFVicsJ01BUicsJ0FCUicsJ01BSScsJ0pVTicsJ0pVTCcsJ0FHTycsJ1NFVCcsJ09VVCcsJ05PVicsJ0RFWiddOwp2YXIgTUVTRVNfRlVMTCA9IFsnSmFuZWlybycsJ0ZldmVyZWlybycsJ01hcsOnbycsJ0FicmlsJywnTWFpbycsJ0p1bmhvJywnSnVsaG8nLCdBZ29zdG8nLCdTZXRlbWJybycsJ091dHVicm8nLCdOb3ZlbWJybycsJ0RlemVtYnJvJ107Ci8qIGFjZWl0YSAvbGl2ZS9JRCwgeW91dHUuYmUvSUQsIC9lbWJlZC9JRCBFIHdhdGNoP3Y9SUQgKGEgQXVsYSBJbmF1Z3VyYWwgdmVpbwogICBubyBmb3JtYXRvIHdhdGNoP3Y9LCBxdWUgY2HDrWEgZW0gIndhdGNoIiBlIHF1ZWJyYXZhIGEgdGh1bWIpICovCmZ1bmN0aW9uIHl0VGh1bWIodXJsKXsKICBpZiAoIXVybCkgcmV0dXJuIG51bGw7CiAgdmFyIG0gPSB1cmwubWF0Y2goL1s\/Jl12PShbXHctXXs2LH0pLykgfHwgdXJsLm1hdGNoKC9cLyg\/OmxpdmV8ZW1iZWQpXC8oW1x3LV17Nix9KS8pIHx8IHVybC5tYXRjaCgveW91dHVcLmJlXC8oW1x3LV17Nix9KS8pOwogIHZhciBpZCA9IG0gPyBtWzFdIDogdXJsLnNwbGl0KCcvJykucG9wKCkuc3BsaXQoJz8nKVswXTsKICByZXR1cm4gJ2h0dHBzOi8vaS55dGltZy5jb20vdmkvJytpZCsnL2hxZGVmYXVsdC5qcGcnOwp9CmZ1bmN0aW9uIGRpYU1lcyhpc28peyB2YXIgcD1pc28uc3BsaXQoJy0nKTsgcmV0dXJuIHsgZDpwWzJdLCBtOk1FU0VTW3BhcnNlSW50KHBbMV0sMTApLTFdIH07IH0KZnVuY3Rpb24gZGlhcyhhLCBiKXsgcmV0dXJuIE1hdGgucm91bmQoKG5ldyBEYXRlKGIrJ1QxMjowMDowMCcpIC0gbmV3IERhdGUoYSsnVDEyOjAwOjAwJykpIC8gODY0MDAwMDApOyB9CgovKiBEYXRhIHNpbXVsYWRhIGRvIHByb3TDs3RpcG86IGZvcmEgZGEgamFuZWxhIGRhIGpvcm5hZGEsIG8gcGFpbmVsIHVzYSB1bWEKICAgZGF0YSBkZW1vIG5vIG1laW8gZGEgMsKqIHNlbWFuYSBwYXJhIGRhciB2aWRhIMOgIGRlbW9uc3RyYcOnw6NvLgogICBTb2JyZXNjcmV2YSBjb20gP2hvamU9QUFBQS1NTS1ERCBuYSBVUkwuICovCmZ1bmN0aW9uIGhvamVJU08oam9ybmFkYSl7CiAgLy8gUFJPRFXDh8ODTzogc2VtcHJlIGEgZGF0YSByZWFsIGVtIEJSVCAobyBzZXJ2aWRvciByZXZhbGlkYSB0b2RhcyBhcyBkYXRhcykKICB2YXIgaXNvID0gbmV3IERhdGUoKS50b0xvY2FsZURhdGVTdHJpbmcoJ3N2JywgeyB0aW1lWm9uZTogJ0FtZXJpY2EvU2FvX1BhdWxvJyB9KTsKICByZXR1cm4geyBpc286IGlzbywgc2ltdWxhZGE6IGZhbHNlIH07Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0gcG9udHVhw6fDo28gLS0tLS0tLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiBjYWxjUG9udG9zKHVzZXIpewogIHZhciBqID0gSk9STkFEQVNbdXNlci5wcm92YV07CiAgdmFyIGhvamUgPSBob2plSVNPKGopLmlzbzsKICB2YXIgY2hlY2tzID0gc3RvcmUuY2hlY2tpbnModXNlci5lbWFpbCk7CiAgdmFyIG1pc3MgPSBzdG9yZS5taXNzb2VzKHVzZXIuZW1haWwpOwogIHZhciBzaW0gPSBzdG9yZS5zaW11bGFkbyh1c2VyLmVtYWlsKTsKCiAgdmFyIGV2UGFzc2Fkb3MgPSBqLmV2ZW50b3MuZmlsdGVyKGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5kYXRhIDw9IGhvamU7IH0pOwogIHZhciBuQ2hlY2tzID0gT2JqZWN0LmtleXMoY2hlY2tzKS5sZW5ndGg7CiAgdmFyIHB0c1ByZXMgPSAwOwogIGouZXZlbnRvcy5mb3JFYWNoKGZ1bmN0aW9uKGUpewogICAgdmFyIGMgPSBjaGVja3NbZS5pZF07CiAgICBpZiAoIWMpIHJldHVybjsKICAgIHB0c1ByZXMgKz0gKCh0eXBlb2YgYyA9PT0gJ29iamVjdCcgJiYgYy5hb1Zpdm8gPT09IGZhbHNlKSA\/IFBUX0FVTEFfUkVUUk8gOiBQVF9BVUxBKTsKICB9KTsKCiAgdmFyIHF1aXp6ZXMgPSBqLmV2ZW50b3MuZmlsdGVyKGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5xdWl6OyB9KTsKICB2YXIgcHRzTWlzcyA9IDAsIG5NaXNzID0gMDsKICBxdWl6emVzLmZvckVhY2goZnVuY3Rpb24oZSl7IHZhciBtID0gbWlzc1tlLmlkXTsgaWYgKG0peyBuTWlzcysrOyBwdHNNaXNzICs9IFBUX0RJQV9QSVNPICsgTWF0aC5yb3VuZChQVF9ESUFfQUNFUlRPUyAqIG0uYWNlcnRvcyAvIG0udG90YWwpOyB9IH0pOwoKICB2YXIgcHRzU2ltID0gQ0FDSEUuc2ltUmVzID8gUFRfU0lNX0FDRVJUTyAqIENBQ0hFLnNpbVJlcy5hY2VydG9zIDogMDsKICB2YXIgcHRzSW5kID0gUFRfSU5EICogKChDQUNIRS5pbmRpY2Fjb2VzICYmIENBQ0hFLmluZGljYWNvZXMudmFsaWRhcykgfHwgMCk7ICAvLyBzZW0gdGV0bwoKICAvLyBvZmVuc2l2YTogZGlhcy1ldmVudG8gY29uc2VjdXRpdm9zIGNvbSBjaGVjay1pbiwgY29udGFuZG8gZGUgdHLDoXMgcHJhCiAgLy8gZnJlbnRlIOKAlCBzw7Mgc29icmUgZXZlbnRvcyBDT00gY2hhdmUgKGVuMDAgSW5hdWd1cmFsIGUgZW4wNyBTaW11bGFkbyBuw6NvCiAgLy8gdMOqbSBjaGVjay1pbiBlIG7Do28gcG9kZW0gcXVlYnJhciBhIHNlcXXDqm5jaWEpCiAgdmFyIHNlcSA9IDA7CiAgdmFyIGV2U3RyZWFrID0gZXZQYXNzYWRvcy5maWx0ZXIoZnVuY3Rpb24oZSl7IHJldHVybiBURU1fQ0hBVkUuaW5kZXhPZihlLmlkKSA+IC0xOyB9KTsKICBmb3IgKHZhciBpID0gZXZTdHJlYWsubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHsKICAgIGlmIChjaGVja3NbZXZTdHJlYWtbaV0uaWRdKSBzZXErKzsgZWxzZSBicmVhazsKICB9CgogIHJldHVybiB7CiAgICBwcmVzZW5jYTogcHRzUHJlcywgbWlzc29lczogcHRzTWlzcywgc2ltdWxhZG86IHB0c1NpbSwgaW5kaWNhY2FvOiBwdHNJbmQsCiAgICB0b3RhbDogcHRzUHJlcyArIHB0c01pc3MgKyBwdHNTaW0gKyBwdHNJbmQsCiAgICBuQ2hlY2tzOiBuQ2hlY2tzLCBuRXZlbnRvczogVEVNX0NIQVZFLmxlbmd0aCwgbkV2UGFzc2Fkb3M6IGV2UGFzc2Fkb3MubGVuZ3RoLAogICAgbk1pc3M6IG5NaXNzLCBuUXVpenplczogcXVpenplcy5sZW5ndGgsIG9mZW5zaXZhOiBzZXEsIHNpbTogc2ltCiAgfTsKfQpmdW5jdGlvbiBmbXRQdHMobil7IHJldHVybiBTdHJpbmcoTWF0aC5yb3VuZChuKSk7IH0KCi8qIFRleHRvIOKGkiBIVE1MIGRhcyBxdWVzdMO1ZXMvY29tZW50w6FyaW9zOiBlc2NhcGEsIHRyYW5zZm9ybWEgVVJMIGRlIElNQUdFTQogICAod2VicC9wbmcvanBnL2dpZiDigJQgZXguOiBtw61kaWEgZG8gV1AgY29tIGFzIGltYWdlbnMgZGFzIHF1ZXN0w7VlcykgZW0gPGltZz4KICAgcmVzcG9uc2l2YSBlIGRlbWFpcyBVUkxzIGVtIGxpbmsgY2xpY8OhdmVsLiAqLwpmdW5jdGlvbiBtaWRpYUhUTUwodHh0KXsKICBpZiAoIXR4dCkgcmV0dXJuICcnOwogIHJldHVybiBlc2ModHh0KS5yZXBsYWNlKC9odHRwcz86XC9cL1teXHM8XSsvZywgZnVuY3Rpb24odSl7CiAgICB2YXIgZmltID0gJyc7CiAgICB2YXIgbSA9IHUubWF0Y2goL1spLiw7Ol0rJC8pOwogICAgaWYgKG0peyBmaW0gPSBtWzBdOyB1ID0gdS5zbGljZSgwLCB1Lmxlbmd0aCAtIGZpbS5sZW5ndGgpOyB9CiAgICBpZiAoL1wuKHdlYnB8cG5nfGpwZT9nfGdpZikoXD9bXlxzXSopPyQvaS50ZXN0KHUpKQogICAgICByZXR1cm4gJzxpbWcgY2xhc3M9InEtaW1nIiBzcmM9IicrdSsnIiBhbHQ9IkltYWdlbSBkYSBxdWVzdMOjbyIgbG9hZGluZz0ibGF6eSI+JytmaW07CiAgICByZXR1cm4gJzxhIGhyZWY9IicrdSsnIiB0YXJnZXQ9Il9ibGFuayIgcmVsPSJub29wZW5lciI+Jyt1Kyc8L2E+JytmaW07CiAgfSk7Cn0KCi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICBMQU5ESU5HCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpmdW5jdGlvbiBpbml0TGFuZGluZygpewogIC8vIHJldmVhbCBvbiBzY3JvbGwg4oCUIENPTSBndWFyZGE6IEludGVyc2VjdGlvbk9ic2VydmVyIHPDsyBleGlzdGUgYSBwYXJ0aXIgZGUKICAvLyBpT1MgMTIuMi9DaHJvbWUgNTE7IHNlbSBhIGd1YXJkYSwgZW0gYXBhcmVsaG8gbWFpcyBhbnRpZ28gYSAxwqogbGluaGEgYXF1aQogIC8vIGxhbsOnYXZhIGUgYSBMUCBpbnRlaXJhIGZpY2F2YSBlbSBicmFuY28gKDM4IHNlw6fDtWVzIC5ydiBwcmVzYXMgZW0gb3BhY2l0eTowKQogIC8vIHNlbSBuZW0gbyBkaWFnbsOzc3RpY28uIEFnb3JhIG8gZmFsbGJhY2sgc2ltcGxlc21lbnRlIHJldmVsYSB0dWRvLgogIGlmICh0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicpIHsKICAgIHZhciBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihmdW5jdGlvbihlcyl7CiAgICAgIGVzLmZvckVhY2goZnVuY3Rpb24oZSl7IGlmIChlLmlzSW50ZXJzZWN0aW5nKXsgZS50YXJnZXQuY2xhc3NMaXN0LmFkZCgnaW4nKTsgaW8udW5vYnNlcnZlKGUudGFyZ2V0KTsgfSB9KTsKICAgIH0sIHsgdGhyZXNob2xkOiAwLjAxLCByb290TWFyZ2luOiAnMHB4IDBweCAyNSUgMHB4JyB9KTsKICAgICQkKCcucnYnKS5mb3JFYWNoKGZ1bmN0aW9uKGVsLCBpKXsgZWwuc3R5bGUudHJhbnNpdGlvbkRlbGF5ID0gKGklNikqNjArJ21zJzsgaW8ub2JzZXJ2ZShlbCk7IH0pOwogIH0gZWxzZSB7CiAgICAkJCgnLnJ2JykuZm9yRWFjaChmdW5jdGlvbihlbCl7IGVsLmNsYXNzTGlzdC5hZGQoJ2luJyk7IH0pOwogIH0KCiAgLy8gZGVmYXVsdCBkbyB0b2dnbGUgc2VndWUgbyB2ZXJ0aWNhbCBwdWJsaWNhZG8gKExQIGRvIFJldmFsaWRhIGFicmUgbm8gUmV2YWxpZGEpCiAgdmFyIHByb3ZhU2VsID0gQUZfUFJPVkE7CgogIC8vIGNvdW50ZG93bjogbWlyYSBhIFBSw5NYSU1BIHRyYW5zbWlzc8OjbyBmdXR1cmEgKGEgQXVsYSBJbmF1Z3VyYWwgYW50ZWNlZGUgYQogIC8vIGpvcm5hZGEpLCBjb20gYSBob3JhIGRlIGluw61jaW8gZXh0cmHDrWRhIGRvIGNhbXBvIGhvcmEgZGUgY2FkYSBldmVudG8KICBmdW5jdGlvbiBwcm94aW1vRXZlbnRvKGopewogICAgdmFyIGFnb3JhID0gbmV3IERhdGUoKTsKICAgIGZvciAodmFyIGkgPSAwOyBpIDwgai5ldmVudG9zLmxlbmd0aDsgaSsrKXsKICAgICAgdmFyIGUgPSBqLmV2ZW50b3NbaV07CiAgICAgIHZhciBtID0gKGUuaG9yYSB8fCAnJykubWF0Y2goLyhcZHsxLDJ9KTooXGR7Mn0pLyk7CiAgICAgIHZhciBhbHZvID0gbmV3IERhdGUoZS5kYXRhICsgJ1QnICsgKCcwJysobT9tWzFdOicwOCcpKS5zbGljZSgtMikgKyAnOicgKyAobT9tWzJdOicwMCcpICsgJzowMC0wMzowMCcpOwogICAgICBpZiAoYWx2byA+IGFnb3JhKSByZXR1cm4geyBldjogZSwgYWx2bzogYWx2byB9OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGZ1bmN0aW9uIHRpY2soKXsKICAgIHZhciBqID0gSk9STkFEQVNbcHJvdmFTZWxdOwogICAgdmFyIHB4ID0gcHJveGltb0V2ZW50byhqKTsKICAgIHZhciBhbHZvID0gcHggPyBweC5hbHZvIDogbmV3IERhdGUoai5pbmljaW8gKyAnVDA4OjAwOjAwLTAzOjAwJyk7CiAgICB2YXIgZGlmZiA9IE1hdGgubWF4KDAsIGFsdm8gLSBuZXcgRGF0ZSgpKTsKICAgIHZhciBkID0gTWF0aC5mbG9vcihkaWZmLzg2NDAwMDAwKSwgaCA9IE1hdGguZmxvb3IoZGlmZi8zNjAwMDAwKSUyNCwKICAgICAgICBtID0gTWF0aC5mbG9vcihkaWZmLzYwMDAwKSU2MCwgcyA9IE1hdGguZmxvb3IoZGlmZi8xMDAwKSU2MDsKICAgICQoJyNjZC1kJykudGV4dENvbnRlbnQgPSBTdHJpbmcoZCkucGFkU3RhcnQoMiwnMCcpOwogICAgJCgnI2NkLWgnKS50ZXh0Q29udGVudCA9IFN0cmluZyhoKS5wYWRTdGFydCgyLCcwJyk7CiAgICAkKCcjY2QtbScpLnRleHRDb250ZW50ID0gU3RyaW5nKG0pLnBhZFN0YXJ0KDIsJzAnKTsKICAgICQoJyNjZC1zJykudGV4dENvbnRlbnQgPSBTdHJpbmcocykucGFkU3RhcnQoMiwnMCcpOwogICAgJCgnI2NvdW50TGFiZWwnKS50ZXh0Q29udGVudCA9ICdwYXJhIGEgcHLDs3hpbWEgdHJhbnNtaXNzw6NvOiAnICsKICAgICAgKHB4ID8gcHguZXYudGl0dWxvIDogai5ldmVudG9zWzBdLnRpdHVsbyk7CiAgfQogIHNldEludGVydmFsKHRpY2ssIDEwMDApOyB0aWNrKCk7CgogICQkKCcjcHJvdmFTd2l0Y2ggYnV0dG9uJykuZm9yRWFjaChmdW5jdGlvbihiKXsKICAgIGIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAkJCgnI3Byb3ZhU3dpdGNoIGJ1dHRvbicpLmZvckVhY2goZnVuY3Rpb24oeCl7IHguY2xhc3NMaXN0LnJlbW92ZSgnb24nKTsgfSk7CiAgICAgIGIuY2xhc3NMaXN0LmFkZCgnb24nKTsgcHJvdmFTZWwgPSBiLmRhdGFzZXQucHJvdmE7IHRpY2soKTsKICAgICAgdmFyIGNhbEJ0biA9ICQoJy5jYWwtdGFicyBidXR0b25bZGF0YS1jYWw9IicrcHJvdmFTZWwrJyJdJyk7IGlmIChjYWxCdG4pIGNhbEJ0bi5jbGljaygpOwogICAgfSk7CiAgfSk7CgogIC8vIGNhbGVuZMOhcmlvCiAgZnVuY3Rpb24gcmVuZGVyQ2FsKHByb3ZhKXsKICAgIHZhciBqID0gSk9STkFEQVNbcHJvdmFdOwogICAgdmFyIGh0bWwgPSAnJzsKICAgIGlmIChqLnByb3Zpc29yaW8pIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImRlbW8tYmFubmVyIj48Yj5EYXRhcyBwcm92aXPDs3JpYXMuPC9iPiBBIHByb2dyYW1hw6fDo28gb2ZpY2lhbCBkbyBSZXZhbGlkYSBJTkVQIDIwMjYuMiBzZXLDoSBjb25maXJtYWRhIGFww7NzIGEgcHVibGljYcOnw6NvIGRvIGVkaXRhbC4gQSBlc3RydXR1cmEgYWJhaXhvIGVzcGVsaGEgYSBlZGnDp8OjbyAyMDI2LjEuPC9kaXY+JzsKICAgIFswLDEsMl0uZm9yRWFjaChmdW5jdGlvbihzZW0pewogICAgICB2YXIgZXZzID0gai5ldmVudG9zLmZpbHRlcihmdW5jdGlvbihlKXsgcmV0dXJuIGUuc2VtYW5hID09PSBzZW07IH0pOwogICAgICBpZiAoIWV2cy5sZW5ndGgpIHJldHVybjsKICAgICAgdmFyIHJvdHVsbyA9IHNlbT09PTAgPyAnQWJlcnR1cmEnIDogKHNlbT09PTE\/JzHCqiBzZW1hbmEnOicywqogc2VtYW5hJyk7CiAgICAgIHZhciBmYWl4YSA9IGV2c1swXS5kYXRhID09PSBldnNbZXZzLmxlbmd0aC0xXS5kYXRhCiAgICAgICAgPyBkYXRhQlIoZXZzWzBdLmRhdGEpCiAgICAgICAgOiBkYXRhQlIoZXZzWzBdLmRhdGEpKycgYSAnK2RhdGFCUihldnNbZXZzLmxlbmd0aC0xXS5kYXRhKTsKICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ic2VtYW5hLWxhYmVsIj4nK3JvdHVsbysnIMK3ICcrZmFpeGErJzwvZGl2Pic7CiAgICAgIGV2cy5mb3JFYWNoKGZ1bmN0aW9uKGUpewogICAgICAgIHZhciBkbSA9IGRpYU1lcyhlLmRhdGEpOwogICAgICAgIHZhciB0aXBvQ2xzID0gZS50aXBvPT09J21hcmNvJyA\/ICd0aXBvLW1hcmNvJyA6IGUudGlwbz09PSdwcm92YScgPyAndGlwby1wcm92YScgOiAndGlwby1hdWxhJzsKICAgICAgICB2YXIgdGlwb1R4dCA9IGUudGlwbz09PSdtYXJjbycgPyAnTWFyY28nIDogZS50aXBvPT09J3Byb3ZhJyA\/ICdEaWEgZGEgcHJvdmEnIDogJ0F1bGEnOwogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImF1bGEtcm93IHJ2IGluIj48ZGl2IGNsYXNzPSJkYXRhIj4nK2RtLmQrJzxzbWFsbD4nK2RtLm0rJzwvc21hbGw+PC9kaXY+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJ0aXR1bG8iPicrZXNjKGUudGl0dWxvKSsnPC9kaXY+JysKICAgICAgICAgICc8YSBjbGFzcz0iaG9yYSIgaHJlZj0iJytBRl9VUkxTLmNhZGFzdHJvKyciIHRpdGxlPSJJbnNjcmV2YS1zZSBncmF0dWl0YW1lbnRlIHBhcmEgYXNzaXN0aXIiIHN0eWxlPSJjb2xvcjp2YXIoLS1hbWJlcik7Zm9udC13ZWlnaHQ6NjAwIj5RdWVybyBhc3Npc3RpcjwvYT4nKwogICAgICAgICAgJzxkaXYgY2xhc3M9ImhvcmEiPicrZXNjKGUuaG9yYSkrJzwvZGl2PicrCiAgICAgICAgICAnPHNwYW4gY2xhc3M9InRpcG8gJyt0aXBvQ2xzKyciPicrdGlwb1R4dCsnPC9zcGFuPjwvZGl2Pic7CiAgICAgIH0pOwogICAgfSk7CiAgICAkKCcjY2FsQm9keScpLmlubmVySFRNTCA9IGh0bWw7CiAgfQogICQkKCcuY2FsLXRhYnMgYnV0dG9uJykuZm9yRWFjaChmdW5jdGlvbihiKXsKICAgIGIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAkJCgnLmNhbC10YWJzIGJ1dHRvbicpLmZvckVhY2goZnVuY3Rpb24oeCl7IHguY2xhc3NMaXN0LnJlbW92ZSgnb24nKTsgfSk7CiAgICAgIGIuY2xhc3NMaXN0LmFkZCgnb24nKTsgcmVuZGVyQ2FsKGIuZGF0YXNldC5jYWwpOwogICAgfSk7CiAgfSk7CiAgLy8gc2luY3Jvbml6YSB0b2dnbGUgZGUgcHJvdmEgKyBjYWxlbmTDoXJpbyBjb20gbyB2ZXJ0aWNhbCBwdWJsaWNhZG8KICAkJCgnI3Byb3ZhU3dpdGNoIGJ1dHRvbicpLmZvckVhY2goZnVuY3Rpb24oeCl7IHguY2xhc3NMaXN0LnRvZ2dsZSgnb24nLCB4LmRhdGFzZXQucHJvdmEgPT09IHByb3ZhU2VsKTsgfSk7CiAgJCQoJy5jYWwtdGFicyBidXR0b24nKS5mb3JFYWNoKGZ1bmN0aW9uKHgpeyB4LmNsYXNzTGlzdC50b2dnbGUoJ29uJywgeC5kYXRhc2V0LmNhbCA9PT0gcHJvdmFTZWwpOyB9KTsKICByZW5kZXJDYWwocHJvdmFTZWwpOwp9CgovKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgQ0FEQVNUUk8gLyBBQ0VTU0FSCiAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpmdW5jdGlvbiBtYXNrV2hhdHMoaW5wdXQpewogIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24oKXsKICAgIHZhciB2ID0gaW5wdXQudmFsdWUucmVwbGFjZSgvXEQvZywnJykuc2xpY2UoMCwxMSk7CiAgICBpZiAodi5sZW5ndGggPiA2KSBpbnB1dC52YWx1ZSA9ICcoJyt2LnNsaWNlKDAsMikrJykgJyt2LnNsaWNlKDIsNykrJy0nK3Yuc2xpY2UoNyk7CiAgICBlbHNlIGlmICh2Lmxlbmd0aCA+IDIpIGlucHV0LnZhbHVlID0gJygnK3Yuc2xpY2UoMCwyKSsnKSAnK3Yuc2xpY2UoMik7CiAgICBlbHNlIGlucHV0LnZhbHVlID0gdjsKICB9KTsKfQpmdW5jdGlvbiBtYXNrQ3BmKGlucHV0KXsKICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCdpbnB1dCcsIGZ1bmN0aW9uKCl7CiAgICB2YXIgdiA9IGlucHV0LnZhbHVlLnJlcGxhY2UoL1xEL2csJycpLnNsaWNlKDAsMTEpOwogICAgdmFyIG91dCA9IHY7CiAgICBpZiAodi5sZW5ndGggPiA5KSBvdXQgPSB2LnNsaWNlKDAsMykrJy4nK3Yuc2xpY2UoMyw2KSsnLicrdi5zbGljZSg2LDkpKyctJyt2LnNsaWNlKDkpOwogICAgZWxzZSBpZiAodi5sZW5ndGggPiA2KSBvdXQgPSB2LnNsaWNlKDAsMykrJy4nK3Yuc2xpY2UoMyw2KSsnLicrdi5zbGljZSg2KTsKICAgIGVsc2UgaWYgKHYubGVuZ3RoID4gMykgb3V0ID0gdi5zbGljZSgwLDMpKycuJyt2LnNsaWNlKDMpOwogICAgaW5wdXQudmFsdWUgPSBvdXQ7CiAgfSk7Cn0KZnVuY3Rpb24gY3BmVmFsaWRvKGMpewogIGMgPSBjLnJlcGxhY2UoL1xEL2csJycpOwogIGlmIChjLmxlbmd0aCAhPT0gMTEpIHJldHVybiBmYWxzZTsKICBpZiAoL14oXGQpXDF7MTB9JC8udGVzdChjKSkgcmV0dXJuIGZhbHNlOwogIGZvciAodmFyIHQgPSA5OyB0IDwgMTE7IHQrKykgewogICAgdmFyIGQgPSAwOwogICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0OyBpKyspIGQgKz0gcGFyc2VJbnQoYy5jaGFyQXQoaSksMTApICogKCh0KzEpIC0gaSk7CiAgICBkID0gKCgxMCpkKSAlIDExKSAlIDEwOwogICAgaWYgKGQgIT09IHBhcnNlSW50KGMuY2hhckF0KHQpLDEwKSkgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiBzZXRJbnZhbGlkKGYsIG9uKXsgdmFyIGVsID0gJCgnW2RhdGEtZj0iJytmKyciXScpOyBpZiAoZWwpIGVsLmNsYXNzTGlzdC50b2dnbGUoJ2ludmFsaWQnLCAhIW9uKTsgfQoKLyogaW5pdENhZGFzdHJvL2luaXRBY2Vzc2FyL2luaXRDb25maXJtYWNhbyBSRU1PVklET1MgbmEgYXVkaXRvcmlhIGRlIDExLzA4OgogICBlcmFtIG8gcHJvdMOzdGlwbyBlbSBsb2NhbFN0b3JhZ2UgKHN0b3JlLmFkZFVzZXIvZmluZFVzZXJCeUNwZi9sb2dpbiksIHDDoWdpbmFzCiAgIGNhZGFzdHJvLmh0bWwvYWNlc3Nhci5odG1sL2NvbmZpcm1hY2FvLmh0bWwgcXVlIE7Dg08gc8OjbyBwdWJsaWNhZGFzIOKAlCBwcm9kdcOnw6NvCiAgIHVzYSByZW5kZXJBdXRoIChhdXRoLWNhZGFzdHJvL2F1dGgtYWNlc3NhcikgY29udHJhIG8gU3VwYWJhc2UuIEZpY2F2YW0gbm8KICAgYnVuZGxlIGRlIHRvZG8gYWx1bm8gc2VtIG51bmNhIHJvZGFyLiAqLwoKLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgIMOBUkVBIERFIE1FTUJST1MKICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCi8qIC0tLS0tLS0tLS0gQVVUSCBkZSBwcm9kdcOnw6NvICh1bWEgcMOhZ2luYSBzw7M6IGFjZXNzYXIgKyBjYWRhc3RybykgLS0tLS0tLS0tLSAqLwpmdW5jdGlvbiBjcGZEVihjKXsKICB2YXIgZCA9IChjfHwnJykucmVwbGFjZSgvXEQvZywnJyk7CiAgaWYgKGQubGVuZ3RoICE9PSAxMSB8fCAvXihcZClcMXsxMH0kLy50ZXN0KGQpKSByZXR1cm4gZmFsc2U7CiAgdmFyIHM9MCxpOyBmb3IoaT0wO2k8OTtpKyspIHMrPSgrZFtpXSkqKDEwLWkpOyB2YXIgdjE9KHMqMTApJTExOyBpZih2MT09PTEwKXYxPTA7CiAgcz0wOyBmb3IoaT0wO2k8MTA7aSsrKSBzKz0oK2RbaV0pKigxMS1pKTsgdmFyIHYyPShzKjEwKSUxMTsgaWYodjI9PT0xMCl2Mj0wOwogIHJldHVybiB2MT09PStkWzldICYmIHYyPT09K2RbMTBdOwp9Ci8qIE1vbWVudG8gbmEgZ3JhZHVhw6fDo28gKDExLzA4KTogTUVTTUEgcGVyZ3VudGEgZSBNRVNNQVMgb3DDp8O1ZXMgZGEgcGVzcXVpc2EKICAgQlEgTUVEIEZSRUUgbm8gVHlwZWZvcm0gKHJOUFFCZnJnLCBjYW1wbyBxMl9zdGFnZSkg4oCUIG8gZGFkbyBkbyBjYWRhc3RybwogICBjcnV6YSAxOjEgY29tIG8gZGEgcGVzcXVpc2EuIEdyYXZhZG8gZW0gcGFydGljaXBhbnRlcy5tb21lbnRvIChwX21vbWVudG8pLiAqLwovKiBPIHDDumJsaWNvIGRlIGNhZGEgcHJvdmEgw6kgRElGRVJFTlRFLCBlbnTDo28gYXMgb3DDp8O1ZXMgbXVkYW0gcG9yIHZlcnRpY2FsCiAgIChlc3BlbGhvIGRvIHNwbGl0IFJlc2lkw6puY2lhIMOXIFJldmFsaWRhIGRvIGZvcm0pOiBFTkFNRUQgdXNhIHEyX3N0YWdlIChhbm8gZGUKICAgZ3JhZHVhw6fDo28pOyBSZXZhbGlkYSB1c2EgcXJfc3RhZ2UgKGdyYWR1YcOnw6NvIG5vIGV4dGVyaW9yIC8gcmV2YWxpZGHDp8OjbykuICovCnZhciBNT01FTlRPU19QT1JfUFJPVkEgPSB7CiAgZW5hbWVkOiBbCiAgICAnRXN0b3Ugbm8gMcK6IG91IG5vIDLCuiBhbm8gZGEgZ3JhZHVhw6fDo28nLAogICAgJ0VzdG91IG5vIDPCuiBvdSBubyA0wrogYW5vIGRhIGdyYWR1YcOnw6NvJywKICAgICdFc3RvdSBubyA1wrogYW5vIGRhIGdyYWR1YcOnw6NvJywKICAgICdFc3RvdSBubyA2wrogYW5vIGRhIGdyYWR1YcOnw6NvJywKICAgICdTb3UgbcOpZGljbyBmb3JtYWRvJwogIF0sCiAgcmV2YWxpZGE6IFsKICAgICdBaW5kYSBlc3RvdSBuYSBncmFkdWHDp8OjbyBkZSBNZWRpY2luYSBubyBleHRlcmlvcicsCiAgICAnU291IGZvcm1hZG8gbm8gZXh0ZXJpb3IsIG1hcyBhaW5kYSBuw6NvIHJldmFsaWRlaSBtZXUgZGlwbG9tYScsCiAgICAnSsOhIHJldmFsaWRlaSBtZXUgZGlwbG9tYScKICBdCn07CnZhciBNT01FTlRPU19HUkFEID0gTU9NRU5UT1NfUE9SX1BST1ZBW0FGX1BST1ZBXSB8fCBNT01FTlRPU19QT1JfUFJPVkEuZW5hbWVkOwoKZnVuY3Rpb24gcmVuZGVyQXV0aChtb2RvKXsKICBtb2RvID0gbW9kbyB8fCAnYWNlc3Nhcic7CiAgdmFyIGVzcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZi1lc3BlcmEnKTsKICBpZiAoZXNwKSBlc3AucmVtb3ZlKCk7CiAgdmFyIGVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F1dGhWaWV3JykgfHwgKGZ1bmN0aW9uKCl7CiAgICB2YXIgZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyBkLmlkID0gJ2F1dGhWaWV3JzsgZC5jbGFzc05hbWUgPSAnYXV0aC1vdmVybGF5JzsKICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZCk7IHJldHVybiBkOwogIH0pKCk7CiAgdmFyIGFjZXNzYXIgPSBtb2RvID09PSAnYWNlc3Nhcic7CiAgLy8gbG9nbyBlbWJ1dGlkbyBwZWxvIHB1YmxpY2Fkb3IgKF9fQUZfTE9HTyk7IG5vIGFycXVpdm8gbG9jYWwgYSBwYXN0YSBkZQogIC8vIGFzc2V0cyBmaWNhIHVtIG7DrXZlbCBhY2ltYTsgc2UgbmFkYSByZXNvbHZlciwgbyBvbmVycm9yIHRpcmEgbyA8aW1nPgogIHZhciBsb2dvID0gd2luZG93Ll9fQUZfTE9HTyB8fCAnLi4vYXNzZXRzL2xvZ28tZXN0cmF0ZWdpYS1tZWQtYnJhbmNvLndlYnAnOwogIGVsLmlubmVySFRNTCA9ICc8ZGl2IGNsYXNzPSJhdXRoLWNhcmQgY29tLW1hcmNhIj4nKwogICAgJzxkaXYgY2xhc3M9ImF1dGgtYnJhbmQiPicrCiAgICAnPGltZyBjbGFzcz0iYWItbG9nbyIgc3JjPSInK2xvZ28rJyIgYWx0PSJFc3RyYXTDqWdpYSBNRUQiIG9uZXJyb3I9InRoaXMucmVtb3ZlKCkiPicrCiAgICAnPGRpdiBjbGFzcz0iYWItbWFyayI+QVRPIEZJTkFMPC9kaXY+JysKICAgICc8ZGl2IGNsYXNzPSJhYi1zdWIiPicrQUZfQlJBTkQuc3ViKyc8L2Rpdj4nKwogICAgJzwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0iYXV0aC1ib2R5Ij4nKwogICAgJzxoMT4nKyhhY2Vzc2FyID8gJ0FjZXNzYXIgbWluaGEgw6FyZWEnIDogJ0luc2NyacOnw6NvIGdyYXR1aXRhJykrJzwvaDE+JysKICAgICc8cCBjbGFzcz0ic3ViIj4nKyhhY2Vzc2FyCiAgICAgID8gJ0RpZ2l0ZSBvIENQRiB1c2FkbyBuYSBpbnNjcmnDp8OjbyBwYXJhIGVudHJhciBubyBzZXUgcGFpbmVsLicKICAgICAgOiAnQ3JpZSBhIHN1YSBjb250YSBlIGVudHJlIG5hIGRpc3B1dGEgZG8gQXRvIEZpbmFsIHJ1bW8gYW8gJytBRl9CUkFORC5jdXJ0YSsnLicpKyc8L3A+JysKICAgIChhY2Vzc2FyID8gJycgOgogICAgICAnPGRpdiBjbGFzcz0iYXV0aC1mYXRvcyI+PHNwYW4+QXVsYXMgYW8gdml2bzwvc3Bhbj48c3Bhbj5RdWVzdMO1ZXMgY29tZW50YWRhczwvc3Bhbj48c3Bhbj5TaW11bGFkbyBGaW5hbDwvc3Bhbj48c3Bhbj4xMDAlIGdyYXR1aXRvPC9zcGFuPjwvZGl2PicpKwogICAgJzxmb3JtIGlkPSJhdXRoRm9ybSI+JysKICAgIChhY2Vzc2FyID8gJycgOgogICAgICAnPGRpdiBjbGFzcz0iZmllbGQiPjxsYWJlbD5Ob21lIGNvbXBsZXRvPC9sYWJlbD48aW5wdXQgaWQ9ImZOb21lIiB0eXBlPSJ0ZXh0IiBhdXRvY29tcGxldGU9Im5hbWUiIHJlcXVpcmVkPjwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJmaWVsZCI+PGxhYmVsPkUtbWFpbDwvbGFiZWw+PGlucHV0IGlkPSJmRW1haWwiIHR5cGU9ImVtYWlsIiBhdXRvY29tcGxldGU9ImVtYWlsIiByZXF1aXJlZD48L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0iZmllbGQiPjxsYWJlbD5XaGF0c0FwcCAoY29tIERERCk8L2xhYmVsPjxpbnB1dCBpZD0iZldoYXRzIiB0eXBlPSJ0ZWwiIGF1dG9jb21wbGV0ZT0idGVsIiBwbGFjZWhvbGRlcj0iKDExKSA5OTk5OS05OTk5Ij48L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0iZmllbGQiPjxsYWJlbD5RdWFsIGEgc3VhIHNpdHVhw6fDo28gYXR1YWw\/PC9sYWJlbD4nKwogICAgICAnPHNlbGVjdCBpZD0iZk1vbWVudG8iIHJlcXVpcmVkPicrCiAgICAgICc8b3B0aW9uIHZhbHVlPSIiIGRpc2FibGVkIHNlbGVjdGVkPlNlbGVjaW9uZSBvIHNldSBtb21lbnRvPC9vcHRpb24+JysKICAgICAgTU9NRU5UT1NfR1JBRC5tYXAoZnVuY3Rpb24obSl7IHJldHVybiAnPG9wdGlvbiB2YWx1ZT0iJytlc2MobSkrJyI+Jytlc2MobSkrJzwvb3B0aW9uPic7IH0pLmpvaW4oJycpKwogICAgICAnPC9zZWxlY3Q+PC9kaXY+JykrCiAgICAnPGRpdiBjbGFzcz0iZmllbGQiPjxsYWJlbD5DUEY8L2xhYmVsPjxpbnB1dCBpZD0iZkNwZiIgdHlwZT0idGV4dCIgaW5wdXRtb2RlPSJudW1lcmljIiBhdXRvY29tcGxldGU9Im9mZiIgcGxhY2Vob2xkZXI9IjAwMC4wMDAuMDAwLTAwIiByZXF1aXJlZD4nKwogICAgJzxkaXYgY2xhc3M9ImhpbnQiPlVzYW1vcyBvIENQRiBzw7MgcHJhIGlkZW50aWZpY2FyIGEgc3VhIGNvbnRhIG5hIGRpc3B1dGEgZSB2YWxpZGFyIGEgcHJlbWlhw6fDo28uIEVsZSBuw6NvIGFwYXJlY2UgcHJhIG5pbmd1w6ltLjwvZGl2PjwvZGl2PicrCiAgICAnPGRpdiBjbGFzcz0iYXV0aC1lcnJvIiBpZD0iYXV0aEVycm8iIHJvbGU9ImFsZXJ0IiBoaWRkZW4+PC9kaXY+JysKICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIiB0eXBlPSJzdWJtaXQiIHN0eWxlPSJ3aWR0aDoxMDAlIiBpZD0iYXV0aEJ0biI+JysoYWNlc3NhciA\/ICdFbnRyYXInIDogJ0luc2NyZXZlciBlIGVudHJhcicpKyc8L2J1dHRvbj4nKwogICAgJzwvZm9ybT4nKwogICAgJzxkaXYgY2xhc3M9ImF1dGgtYWx0Ij4nKyhhY2Vzc2FyCiAgICAgID8gJ0FpbmRhIG7Do28gdGVtIGNvbnRhPyA8YSBocmVmPSInKyh3aW5kb3cuX19BRl9VUkxTID8gQUZfVVJMUy5jYWRhc3RybyA6ICcjJykrJyIgaWQ9ImF1dGhUcm9jYSI+SW5zY3JldmEtc2UgZ3LDoXRpczwvYT4nCiAgICAgIDogJ0rDoSBmZXogc3VhIGluc2NyacOnw6NvPyA8YSBocmVmPSInKyh3aW5kb3cuX19BRl9VUkxTID8gQUZfVVJMUy5hY2Vzc2FyIDogJyMnKSsnIiBpZD0iYXV0aFRyb2NhIj5BY2Vzc2FyIGNvbSBtZXUgQ1BGPC9hPicpKyc8L2Rpdj48L2Rpdj48L2Rpdj4nOwoKICB2YXIgZmMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZkNwZicpOwogIGZjLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgZnVuY3Rpb24oKXsKICAgIHZhciBkID0gZmMudmFsdWUucmVwbGFjZSgvXEQvZywnJykuc2xpY2UoMCwxMSk7CiAgICBmYy52YWx1ZSA9IGQucmVwbGFjZSgvKFxkezN9KShcZCkvLCckMS4kMicpLnJlcGxhY2UoLyhcZHszfSlcLihcZHszfSkoXGQpLywnJDEuJDIuJDMnKS5yZXBsYWNlKC9cLihcZHszfSkoXGR7MSwyfSkkLywnLiQxLSQyJyk7CiAgfSk7CiAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F1dGhUcm9jYScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZXYpewogICAgLy8gY29tIHDDoWdpbmFzIHJlYWlzIChwYWRyw6NvIEJvbMOjbyksIGEgdHJvY2EgTkFWRUdBOyBzZW0gZWxhcywgYWx0ZXJuYSBhIHZpZXcKICAgIHZhciBhbHZvID0gYWNlc3NhciA\/IEFGX1VSTFMuY2FkYXN0cm8gOiBBRl9VUkxTLmFjZXNzYXI7CiAgICBpZiAod2luZG93Ll9fQUZfVVJMUyAmJiBhbHZvICYmIGFsdm8uY2hhckF0KDApICE9PSAnIycpIHJldHVybjsgLy8gZGVpeGEgbyA8YT4gbmF2ZWdhcgogICAgZXYucHJldmVudERlZmF1bHQoKTsgcmVuZGVyQXV0aChhY2Vzc2FyID8gJ2NhZGFzdHJvJyA6ICdhY2Vzc2FyJyk7CiAgfSk7CiAgLyogcmFkYXIgZG8gc3VibWl0OiBvIGJlYWNvbiBkZSBjYXJnYSBuw6NvIGVueGVyZ2EgbyBxdWUgYWNvbnRlY2UgZW50cmUgbwogICAgIHRvcXVlIGVtICJFbnRyYXIiIGUgYSBjaGVnYWRhIG5hIMOhcmVhIOKAlCBjYWRhIGV0YXBhIHJlcG9ydGEgYSBmYXNlLAogICAgIGluY2x1c2l2ZSBvIHByw7NwcmlvIHRvcXVlIChkaXN0aW5ndWUgInRvcXVlIG7Do28gcmVnaXN0cm91IiBkZQogICAgICJoYW5kbGVyIHJvZG91IGUgcGFyb3UgZW0gWCIpICovCiAgdmFyIGRpYWcgPSBmdW5jdGlvbihmKXsgdHJ5IHsgaWYgKHdpbmRvdy5fX2FmRW52aWEpIHdpbmRvdy5fX2FmRW52aWEoZik7IH0gY2F0Y2goZSl7fSB9OwogIHZhciBxdWVtID0gYWNlc3NhciA\/ICdsb2dpbicgOiAnY2FkYXN0cm8nOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoQnRuJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBkaWFnKHF1ZW0gKyAnX2JvdGFvJyk7IH0pOwogIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoRm9ybScpLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIGZ1bmN0aW9uKGV2KXsKICAgIGV2LnByZXZlbnREZWZhdWx0KCk7CiAgICBldi50YXJnZXQuX191bHRpbW9TdWJtaXQgPSBEYXRlLm5vdygpOwogICAgaWYgKGV2LnRhcmdldC5jaGVja1ZhbGlkaXR5ICYmICFldi50YXJnZXQuY2hlY2tWYWxpZGl0eSgpKSB7CiAgICAgIGlmIChldi50YXJnZXQucmVwb3J0VmFsaWRpdHkpIGV2LnRhcmdldC5yZXBvcnRWYWxpZGl0eSgpOwogICAgICBkaWFnKHF1ZW0gKyAnX2Zvcm1faW52YWxpZG8nKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFyIGJ0biA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoQnRuJyk7CiAgICBpZiAoIWJ0bikgcmV0dXJuOyAgLy8gb3ZlcmxheSBqw6EgcmVtb3ZpZGE6IG8gZmx1eG8gZGVzdGUgY2xpcXVlIGrDoSBjb25jbHVpdQogICAgLy8gZXJybyBJTkxJTkUgbm8gY2FydMOjbyAobsOjbyBzw7MgdG9hc3QpOiBvIHRvYXN0IHZpdmUgbm8gcm9kYXDDqSwgb25kZSBvCiAgICAvLyBiYW5uZXIgZGUgY29va2llcyBkbyBXUCBzZSBzb2JyZXDDtWUgbm8gY2VsdWxhciDigJQgbyBhbHVubyBuw6NvIHZpYSBvIG1vdGl2bwogICAgLy8gZGEgcmVjdXNhIGUgYWNoYXZhIHF1ZSBvIGJvdMOjbyBuw6NvIGZleiBuYWRhLiBBdWRpdG9yaWEgMTEvMDguCiAgICB2YXIgZXJyb0JveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdXRoRXJybycpOwogICAgdmFyIG1vc3RyYUVycm8gPSBmdW5jdGlvbihtc2cpeyBpZiAoZXJyb0JveCl7IGVycm9Cb3gudGV4dENvbnRlbnQgPSBtc2c7IGVycm9Cb3guaGlkZGVuID0gZmFsc2U7IH0gdG9hc3QobXNnKTsgfTsKICAgIGlmIChlcnJvQm94KSBlcnJvQm94LmhpZGRlbiA9IHRydWU7CiAgICB2YXIgY3BmID0gZmMudmFsdWUucmVwbGFjZSgvXEQvZywnJyk7CiAgICBpZiAoIWNwZkRWKGNwZikpIHsgbW9zdHJhRXJybygnQ1BGIGludsOhbGlkby4gQ29uZmlyYSBvcyBuw7ptZXJvcy4nKTsgZGlhZyhxdWVtICsgJ19kdl9pbnZhbGlkbycpOyByZXR1cm47IH0KICAgIGJ0bi5kaXNhYmxlZCA9IHRydWU7IGJ0bi50ZXh0Q29udGVudCA9ICdVbSBpbnN0YW50ZeKApic7CiAgICBkaWFnKHF1ZW0gKyAnX3N1Ym1pdCcpOwogICAgdmFyIGRvbmUgPSBmdW5jdGlvbigpeyBkaWFnKHF1ZW0gKyAnX29rJyk7IHNlc3Nhb1NldChjcGYpOwogICAgICBpZiAod2luZG93Ll9fQUZfUEFHRSA9PT0gJ2FyZWEnKSB7IGVsLnJlbW92ZSgpOyBpbml0QXJlYSgpOyB9CiAgICAgIGVsc2UgeyBsb2NhdGlvbi5ocmVmID0gQUZfVVJMUy5hcmVhICsgKEFGX1VSTFMuYXJlYS5pbmRleE9mKCc\/JykgPiAtMSA\/ICcmJyA6ICc\/JykgKyAnZT0xJzsgfSB9OwogICAgdmFyIGZhbGhhID0gZnVuY3Rpb24obXNnKXsgZGlhZyhxdWVtICsgJ19yZWN1c2E6JyArIFN0cmluZyhtc2cpLnNsaWNlKDAsNjApKTsgYnRuLmRpc2FibGVkID0gZmFsc2U7CiAgICAgIGJ0bi50ZXh0Q29udGVudCA9IGFjZXNzYXIgPyAnRW50cmFyJyA6ICdJbnNjcmV2ZXIgZSBlbnRyYXInOyBtb3N0cmFFcnJvKG1zZyk7IH07CiAgICAvKiByZWRlIG3Ds3ZlbCBwb2RlIGRlaXhhciBvIGZldGNoIHBlbmR1cmFkbyBzZW0gcmVqZWl0YXI6IHNlbSB0ZXRvLCBvIGJvdMOjbwogICAgICAgZmljYSBwcmVzbyBlbSAiVW0gaW5zdGFudGXigKYiIGUgbyBhbHVubyByZWNhcnJlZ2EgYSBww6FnaW5hICovCiAgICB2YXIgY29tVGV0byA9IGZ1bmN0aW9uKHApeyByZXR1cm4gUHJvbWlzZS5yYWNlKFtwLCBuZXcgUHJvbWlzZShmdW5jdGlvbihfLCByZWopewogICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7IHJlaihuZXcgRXJyb3IoJ3RpbWVvdXRfMTJzJykpOyB9LCAxMjAwMCk7IH0pXSk7IH07CiAgICBpZiAoYWNlc3NhcikgewogICAgICBjb21UZXRvKHNiUnBjKCdsb2dpbl9jcGYnLCB7IHBfY3BmOiBjcGYgfSkpLnRoZW4oZnVuY3Rpb24ocil7CiAgICAgICAgaWYgKHIuc3RhdHVzID09PSAnb2snKSBkb25lKCk7CiAgICAgICAgZWxzZSBmYWxoYSgnQ1BGIG7Do28gZW5jb250cmFkby4gRmHDp2EgYSBzdWEgaW5zY3Jpw6fDo28gZ3JhdHVpdGEuJyk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycil7IGRpYWcoJ2xvZ2luX2Vycm86JyArIFN0cmluZygoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpLnNsaWNlKDAsODApKTsKICAgICAgICBmYWxoYSgnU2VtIGNvbmV4w6NvLiBUZW50ZSBub3ZhbWVudGUuJyk7IH0pOwogICAgfSBlbHNlIHsKICAgICAgY29tVGV0byhzYlJwYygnY2FkYXN0cmFyJywgewogICAgICAgIHBfbm9tZTogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZOb21lJykudmFsdWUsCiAgICAgICAgcF9lbWFpbDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZFbWFpbCcpLnZhbHVlLAogICAgICAgIHBfd2hhdHM6IChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZldoYXRzJykudmFsdWUgfHwgbnVsbCksCiAgICAgICAgcF9jcGY6IGNwZiwgcF9wcm92YTogQUZfUFJPVkEsCiAgICAgICAgcF9tb21lbnRvOiAoZnVuY3Rpb24oKXsgdmFyIHMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZk1vbWVudG8nKTsgcmV0dXJuIChzICYmIHMudmFsdWUpIHx8IG51bGw7IH0pKCksCiAgICAgICAgcF9yZWY6IChmdW5jdGlvbigpeyB0cnkgeyByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oTFNQKydyZWYnKSB8fCBudWxsOyB9IGNhdGNoKGUpeyByZXR1cm4gbnVsbDsgfSB9KSgpCiAgICAgIH0pKS50aGVuKGZ1bmN0aW9uKHIpewogICAgICAgIGlmIChyLnN0YXR1cyA9PT0gJ29rJyB8fCByLnN0YXR1cyA9PT0gJ2phX2NhZGFzdHJhZG8nKSB7CiAgICAgICAgICB0cnkgeyBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShMU1ArJ3JlZicpOyB9IGNhdGNoKGUpe30KICAgICAgICAgIHRyeSB7IGFmU2ZtY0VudmlhcigpOyB9IGNhdGNoKGUpe30KICAgICAgICAgIGFmR3RtTGVhZChkb25lKTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoci5zdGF0dXMgPT09ICdjcGZfaW52YWxpZG8nKSBmYWxoYSgnQ1BGIGludsOhbGlkby4gQ29uZmlyYSBvcyBuw7ptZXJvcy4nKTsKICAgICAgICBlbHNlIGZhbGhhKCdOw6NvIGZvaSBwb3Nzw612ZWwgY29uY2x1aXIuIENvbmZpcmEgb3MgZGFkb3MuJyk7CiAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGVycil7IGRpYWcoJ2NhZGFzdHJvX2Vycm86JyArIFN0cmluZygoZXJyICYmIGVyci5tZXNzYWdlKSB8fCBlcnIpLnNsaWNlKDAsODApKTsKICAgICAgICBmYWxoYSgnU2VtIGNvbmV4w6NvLiBUZW50ZSBub3ZhbWVudGUuJyk7IH0pOwogICAgfQogIH0pOwp9CgpmdW5jdGlvbiBpbml0QXJlYSgpewogIHZhciBkaWFnQSA9IGZ1bmN0aW9uKGYpeyB0cnkgeyBpZiAod2luZG93Ll9fYWZFbnZpYSkgd2luZG93Ll9fYWZFbnZpYShmKTsgfSBjYXRjaChlKXt9IH07CiAgaWYgKCFjcGZTYWx2bygpKSB7CiAgICAvLyB2ZWlvIGRvIGxvZ2luIGUgYSBzZXNzw6NvIG7Do28gc29icmV2aXZldTogbmF2ZWdhZG9yIGJsb3F1ZWFuZG8gYXJtYXplbmFtZW50bwogICAgaWYgKC9bPyZdZT0xLy50ZXN0KGxvY2F0aW9uLnNlYXJjaCkpIHsKICAgICAgZGlhZ0EoJ2FyZWFfYW50aV9sYWNvJyk7CiAgICAgIGRvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImF1dGgtb3ZlcmxheSI+PGRpdiBjbGFzcz0iYXV0aC1jYXJkIj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJraWNrZXIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjEwcHgiPicrQUZfQlJBTkQudGFnKyc8L2Rpdj4nKwogICAgICAgICc8aDE+QXRpdmUgb3MgZGFkb3MgZG8gc2l0ZTwvaDE+JysKICAgICAgICAnPHAgY2xhc3M9InN1YiI+U2V1IGFjZXNzbyBmb2kgY29uZmlybWFkbywgbWFzIGVzdGUgbmF2ZWdhZG9yIGVzdMOhIGltcGVkaW5kbyBvIHNpdGUgZGUgZ3VhcmRhciBhIHN1YSBzZXNzw6NvLCBlbnTDo28gbsOjbyBjb25zZWd1aW1vcyBtYW50ZXIgdm9jw6ogY29uZWN0YWRvLjwvcD4nKwogICAgICAgICc8cCBjbGFzcz0ic3ViIj48Yj5ObyBpUGhvbmU6PC9iPiBzYWlhIGRhIE5hdmVnYcOnw6NvIFByaXZhZGEgb3UgdsOhIGVtIEFqdXN0ZXMg4oaSIFNhZmFyaSBlIGRlc2F0aXZlICJCbG9xdWVhciB0b2RvcyBvcyBjb29raWVzIi4gPGI+Tm8gQW5kcm9pZDo8L2I+IHBlcm1pdGEgY29va2llcyBwYXJhIGVzdGUgc2l0ZS48L3A+JysKICAgICAgICAnPGEgY2xhc3M9ImJ0biBidG4tYW1iZXIiIGhyZWY9IicrQUZfVVJMUy5hY2Vzc2FyKyciIHN0eWxlPSJ3aWR0aDoxMDAlO2p1c3RpZnktY29udGVudDpjZW50ZXIiPlRlbnRhciBub3ZhbWVudGU8L2E+PC9kaXY+PC9kaXY+JzsKICAgICAgcmV0dXJuOwogICAgfQogICAgZGlhZ0EoJ2FyZWFfc2VtX3Nlc3NhbycpOwogICAgaWYgKHdpbmRvdy5fX0FGX1VSTFMpIHsgbG9jYXRpb24uaHJlZiA9IEFGX1VSTFMuYWNlc3NhcjsgcmV0dXJuOyB9CiAgICByZW5kZXJBdXRoKGxvY2F0aW9uLmhhc2ggPT09ICcjY2FkYXN0cm8nID8gJ2NhZGFzdHJvJyA6ICdhY2Vzc2FyJyk7CiAgICByZXR1cm47CiAgfQogIHZhciBtYWluRWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbicpOwogIGlmIChtYWluRWwpIG1haW5FbC5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0iY2FyZCIgc3R5bGU9InBhZGRpbmc6NDBweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1pbmstZGltKTttYXJnaW4tdG9wOjQwcHgiPkNhcnJlZ2FuZG8gYSBzdWEgw6FyZWHigKY8L2Rpdj4nOwogIGhpZHJhdGFyKCkudGhlbihmdW5jdGlvbihvayl7CiAgICBpZiAoIW9rKSB7IGRpYWdBKCdhcmVhX2hpZHJhdGFyX2ZhbGhvdScpOyBzdG9yZS5sb2dvdXQoKTsgcmVuZGVyQXV0aCgnYWNlc3NhcicpOyByZXR1cm47IH0KICAgIGRpYWdBKCdhcmVhX29rJyk7CiAgICBpbmljaWFyQXBwKCk7CiAgfSkuY2F0Y2goZnVuY3Rpb24oZXJyKXsKICAgIGRpYWdBKCdhcmVhX3NlbV9jb25leGFvOicgKyBTdHJpbmcoKGVyciAmJiBlcnIubWVzc2FnZSkgfHwgZXJyKS5zbGljZSgwLDgwKSk7CiAgICBpZiAobWFpbkVsKSBtYWluRWwuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjQwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0taW5rLWRpbSk7bWFyZ2luLXRvcDo0MHB4Ij5TZW0gY29uZXjDo28uIFJlY2FycmVndWUgYSBww6FnaW5hLjwvZGl2Pic7CiAgfSk7Cn0KCmZ1bmN0aW9uIGluaWNpYXJBcHAoKXsKICB2YXIgdXNlciA9IHN0b3JlLm1lKCk7CiAgaWYgKCF1c2VyKSB7IHJlbmRlckF1dGgoJ2FjZXNzYXInKTsgcmV0dXJuOyB9CiAgdmFyIGogPSBKT1JOQURBU1t1c2VyLnByb3ZhXTsKICB2YXIgaG9qZSA9IGhvamVJU08oaik7CiAgLy8gQSBkYXRhIGVyYSBjb25nZWxhZGEgbm8gbG9hZCBlIG51bmNhIHJlYXZhbGlhZGE6IGNvbW8gbyBhcHAgw6kgaW5zdGFsw6F2ZWwKICAvLyAoUFdBIHN0YW5kYWxvbmUpIGUgbyBpT1MgbWFudMOpbSBhIGFiYSB2aXZhIHBvciBkaWFzLCBxdWVtIGFicmlzc2UgbmEgdsOpc3BlcmEKICAvLyBlIHZvbHRhc3NlIG5vIGRpYSBkYSBhdWxhIE7Dg08gdmlhIG8gY2hlY2staW4gbGliZXJhciBuZW0gYSBqb3JuYWRhIHZpcmFyIGVtCiAgLy8gMjYvMDguIEd1YXJkYSBhIGRhdGEgY2FycmVnYWRhOyBzZSBvIGRpYSBCUlQgbXVkYXIgKHJldG9tYWRhIGRlIGFiYS9QV0EpLAogIC8vIHJlY2FycmVnYSDigJQgcmVpZHJhdGEgdHVkbyBjb20gYSBkYXRhIGNlcnRhLiBBdWRpdG9yaWEgMTEvMDguCiAgdmFyIGRpYUNhcnJlZ2FkbyA9IGhvamUuaXNvOwogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBmdW5jdGlvbigpewogICAgaWYgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSAhPT0gJ3Zpc2libGUnKSByZXR1cm47CiAgICBpZiAoaG9qZUlTTyhqKS5pc28gIT09IGRpYUNhcnJlZ2FkbykgbG9jYXRpb24ucmVsb2FkKCk7CiAgfSk7CgogIC8vIHNoZWxsCiAgJCgnI2JyYW5kTGlnYScpLnRleHRDb250ZW50ID0gai5saWdhOwogICQoJyN1Tm9tZScpLnRleHRDb250ZW50ID0gdXNlci5ub21lLnNwbGl0KCcgJylbMF0gKyAnICcgKyAodXNlci5ub21lLnNwbGl0KCcgJylbMV18fCcnKS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArICcuJzsKICAkKCcjdVByb3ZhJykudGV4dENvbnRlbnQgPSBqLm5vbWU7CiAgJCgnI3VBdicpLnRleHRDb250ZW50ID0gdXNlci5ub21lLnNwbGl0KCcgJykuc2xpY2UoMCwyKS5tYXAoZnVuY3Rpb24ocCl7IHJldHVybiBwLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpOyB9KS5qb2luKCcnKTsKICB2YXIgc2ltRE0gPSBkaWFNZXMoai5ldmVudG9zLmZpbmQoZnVuY3Rpb24oZSl7IHJldHVybiBlLmlkID09PSBqLnNpbXVsYWRvSWQ7IH0pLmRhdGEpOwogICQoJyNiYWRnZVNpbScpLmlubmVySFRNTCA9IHNpbURNLmQgKyAnPGJyPicgKyBzaW1ETS5tOwogICQoJyNidG5TYWlyJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBzdG9yZS5sb2dvdXQoKTsgbG9jYXRpb24uaHJlZiA9IHdpbmRvdy5fX0FGX1VSTFMgPyBBRl9VUkxTLmxwIDogbG9jYXRpb24uaHJlZjsgfSk7CgogIC8vIGF0YWxobyBwcm8gUGFpbmVsIGRlIG9wZXJhw6fDo286IGVuZ3JlbmFnZW0gcmV2ZWxhZGEgU8OTIHBhcmEgb3MgQ1BGcyBkZQogIC8vIGNvb3JkZW5hw6fDo28gKHBhZHLDo28gZGEgZW5ncmVuYWdlbSBkbyBCb2zDo28gZGEgQ29ydWphKS4gTyBwYWluZWwgdGVtIGNoYXZlCiAgLy8gcHLDs3ByaWEgbm8gc2Vydmlkb3I7IGlzdG8gw6kgc8OzIG8gY2FtaW5obyBhdMOpIGVsZSwgbsOjbyB1bWEgcGVybWlzc8Ojby4KICB2YXIgYnRuUGFpbmVsID0gJCgnI2J0blBhaW5lbCcpOwogIGlmIChidG5QYWluZWwgJiYgQ1BGU19DT09SRC5pbmRleE9mKHVzZXIuY3BmKSA+IC0xKSB7CiAgICBidG5QYWluZWwuaHJlZiA9ICh3aW5kb3cuX19BRl9VUkxTICYmIEFGX1VSTFMucGFpbmVsKSB8fCAnLi4vcGFpbmVsLyc7CiAgICBidG5QYWluZWwuaGlkZGVuID0gZmFsc2U7CiAgfQoKICAvLyBtb2RvIGNsYXJvL2VzY3VybyAocGVyc2lzdGlkbyBlbSBhZl90aGVtZTsgYXBsaWNhZG8gbm8gPGhlYWQ+IHNlbSBmbGFzaCkKICB2YXIgSUNPX1NPTCA9ICc8c3ZnIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjQuMiIvPjxwYXRoIGQ9Ik0xMiAydjIuNk0xMiAxOS40VjIyTTIgMTJoMi42TTE5LjQgMTJIMjJNNC45IDQuOWwxLjkgMS45TTE3LjIgMTcuMmwxLjkgMS45TTQuOSAxOS4xbDEuOS0xLjlNMTcuMiA2LjhsMS45LTEuOSIvPjwvc3ZnPic7CiAgdmFyIElDT19MVUEgPSAnPHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMjAuNCAxNC4yQTguNiA4LjYgMCAxIDEgOS44IDMuNmE3IDcgMCAxIDAgMTAuNiAxMC42eiIvPjwvc3ZnPic7CiAgdmFyIGJ0blRlbWEgPSAkKCcjYnRuVGVtYScpOwogIGZ1bmN0aW9uIHBpbnRhVGVtYSgpeyBpZiAoYnRuVGVtYSkgYnRuVGVtYS5pbm5lckhUTUwgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGF0YXNldC50aGVtZSA9PT0gJ2RhcmsnID8gSUNPX1NPTCA6IElDT19MVUE7IH0KICBpZiAoYnRuVGVtYSkgYnRuVGVtYS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICB2YXIgZXNjdXJvID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRhdGFzZXQudGhlbWUgPT09ICdkYXJrJzsKICAgIGlmIChlc2N1cm8pIHsgZGVsZXRlIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kYXRhc2V0LnRoZW1lOyBzdG9yZS5zZXQoJ3RoZW1lJywgJ2NsYXJvJyk7IH0KICAgIGVsc2UgeyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGF0YXNldC50aGVtZSA9ICdkYXJrJzsgc3RvcmUuc2V0KCd0aGVtZScsICdkYXJrJyk7IH0KICAgIHBpbnRhVGVtYSgpOwogIH0pOwogIHBpbnRhVGVtYSgpOwoKICB2YXIgdG90YWxEaWFzID0gZGlhcyhqLmluaWNpbywgai5wcm92YSkgKyAxOwogIHZhciBkaWFBdHVhbCA9IE1hdGgubWluKHRvdGFsRGlhcywgTWF0aC5tYXgoMSwgZGlhcyhqLmluaWNpbywgaG9qZS5pc28pICsgMSkpOwogIGlmIChob2plLmlzbyA8IGouaW5pY2lvKSB7CiAgICAkKCcjZGlhSm9ybmFkYScpLnRleHRDb250ZW50ID0gJ0NvbWXDp2EgZW0gJyArIGRhdGFCUihqLmluaWNpbyk7CiAgICAkKCcjam9ybmFkYUZpbGwnKS5zdHlsZS53aWR0aCA9ICcwJSc7CiAgfSBlbHNlIHsKICAgICQoJyNkaWFKb3JuYWRhJykudGV4dENvbnRlbnQgPSAnRGlhICcgKyBkaWFBdHVhbCArICcgZGUgJyArIHRvdGFsRGlhczsKICAgICQoJyNqb3JuYWRhRmlsbCcpLnN0eWxlLndpZHRoID0gTWF0aC5yb3VuZChkaWFBdHVhbC90b3RhbERpYXMqMTAwKSArICclJzsKICB9CgogIGZ1bmN0aW9uIGRlbW9CYW5uZXIoKXsKICAgIHZhciBtc2dzID0gW107CiAgICBpZiAoTU9ET19WQUxJREFDQU8pIG1zZ3MucHVzaCgnPGI+QW1iaWVudGUgZGUgdGVzdGU6PC9iPiB0dWRvIGxpYmVyYWRvIGFudGVzIGRhIGVzdHJlaWE7IHJlZ2lzdHJvcyBzZXLDo28gemVyYWRvcyBubyBsYW7Dp2FtZW50by4nKTsKICAgIGVsc2UgaWYgKG1vZG9QcmV2aWV3KCkpIG1zZ3MucHVzaCgnPGI+Vmlzw6NvIGRvIGNvb3JkZW5hZG9yOjwvYj4gdm9jw6ogdsOqIG8gY29udGXDumRvIGFudGVzIGRhIGVzdHJlaWE7IGFzIGHDp8O1ZXMgc2VndWVtIGFzIHJlZ3JhcyByZWFpcyBkb3MgYWx1bm9zLicpOwogICAgZWxzZSBpZiAoaG9qZS5zaW11bGFkYSkgbXNncy5wdXNoKCc8Yj5WaXN1YWxpemHDp8OjbyBkYSBvcGVyYcOnw6NvOjwvYj4gZGF0YSBzaW11bGFkYSAnICsgZGF0YUJSKGhvamUuaXNvKSk7CiAgICAvLyAocHLDqS1qb3JuYWRhIHNlbSBiYW5uZXI6IG8gY2hpcCAiRmFsdGFtIE4gZGlhcyIsIGEgc2lkZWJhciBlIG8KICAgIC8vICJIb2plIG5hIGpvcm5hZGEiIGrDoSBjb211bmljYW0gYSBkYXRhOyBiYW5uZXIgcmVwZXRpYSAzeCBhIG1lc21hIGluZm8pCiAgICBpZiAoai5wcm92aXNvcmlvKSBtc2dzLnB1c2goJ0RhdGFzIGRvIFJldmFsaWRhIDIwMjYuMiA8Yj5wcm92aXPDs3JpYXM8L2I+IGF0w6kgbyBlZGl0YWwgZG8gSU5FUCcpOwogICAgaWYgKCFtc2dzLmxlbmd0aCkgcmV0dXJuICcnOwogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJkZW1vLWJhbm5lciI+JyArIG1zZ3Muam9pbignIMK3ICcpICsgJy48L2Rpdj4nOwogIH0KCiAgZnVuY3Rpb24gcGFnZUhlYWQoa2lja2VyLCB0aXR1bG8sIGRlc2MsIGNoaXApewogICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJwYWdlLWhlYWQiPjxkaXY+PHNwYW4gY2xhc3M9ImtpY2tlciI+JytraWNrZXIrJzwvc3Bhbj48aDE+Jyt0aXR1bG8rJzwvaDE+JysKICAgICAgJzxwIGNsYXNzPSJkZXNjIj4nK2Rlc2MrJzwvcD48L2Rpdj48c3BhbiBjbGFzcz0icHRzLWNoaXAiPicrY2hpcCsnPC9zcGFuPjwvZGl2Pic7CiAgfQoKICAvKiAtLS0tLS0tLS0tIEFVTEFTICh0b2RhcyBhcyB0cmFuc21pc3PDtWVzICsgY2hlY2staW4gZW1idXRpZG8pIC0tLS0tLS0tLS0gKi8KICBmdW5jdGlvbiBldmVudG9zRG9EaWEoaXNvKXsgcmV0dXJuIGouZXZlbnRvcy5maWx0ZXIoZnVuY3Rpb24oZSl7IHJldHVybiBlLmRhdGEgPT09IGlzbzsgfSk7IH0KCiAgdmFyIElDT19QTEFZID0gJzxzdmcgd2lkdGg9IjExIiBoZWlnaHQ9IjExIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9ImN1cnJlbnRDb2xvciI+PHBhdGggZD0iTTcgNGwxMyA4LTEzIDh6Ii8+PC9zdmc+JzsKICB2YXIgSUNPX0RMID0gJzxzdmcgd2lkdGg9IjEyIiBoZWlnaHQ9IjEyIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIuMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIj48cGF0aCBkPSJNMTIgM3YxMiIvPjxwYXRoIGQ9Ik02IDExbDYgNiA2LTYiLz48cGF0aCBkPSJNNCAyMWgxNiIvPjwvc3ZnPic7CgogIHZhciBJQ09fUFJPVkEgPSAnPHN2ZyB3aWR0aD0iMjgiIGhlaWdodD0iMjgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS43IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxyZWN0IHg9IjUiIHk9IjMiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxOCIgcng9IjIiLz48cGF0aCBkPSJNOS41IDN2Mi40aDVWMyIvPjxwYXRoIGQ9Ik04LjUgMTFsMS42IDEuNkwxMy41IDkiLz48cGF0aCBkPSJNOC41IDE2aDciLz48L3N2Zz4nOwoKICBmdW5jdGlvbiB0cmlsaGFJdGVtKGUpewogICAgdmFyIGNoZWNrcyA9IHN0b3JlLmNoZWNraW5zKHVzZXIuZW1haWwpOwogICAgdmFyIHFzID0gc3RvcmUubWlzc29lcyh1c2VyLmVtYWlsKTsKICAgIHZhciBkb25lID0gISFjaGVja3NbZS5pZF07CiAgICB2YXIgZnV0dXJhID0gZS5kYXRhID4gaG9qZS5pc287CiAgICB2YXIgaXNIb2plID0gZS5kYXRhID09PSBob2plLmlzbzsKICAgIHZhciBkbSA9IGRpYU1lcyhlLmRhdGEpOwogICAgdmFyIG0gPSBxc1tlLmlkXTsKCiAgICAvLyBPIFNJTVVMQURPIEZJTkFMIG7Do28gw6kgdmlkZW9hdWxhIChwZWRpZG8gZG8gSWdvciwgMTIvMDgpOiByZW5kZXJpemEgY29tbwogICAgLy8gUFJPVkEg4oCUIMOtY29uZSBkZSBnYWJhcml0byAoc2VtIHRodW1iIGRvIFlvdVR1YmUsIHNlbSBwbGF5L3NsaWRlcyksIGFwb250YQogICAgLy8gcHJhIGFiYSBkbyBTaW11bGFkbyBuYSBwbGF0YWZvcm1hLCBuw6NvIHBybyBZb3VUdWJlLgogICAgaWYgKGUuaWQgPT09IGouc2ltdWxhZG9JZCkgewogICAgICB2YXIgY2xzUyA9IGZ1dHVyYSA\/ICduZXh0JyA6IGlzSG9qZSA\/ICdub3cnIDogJ21pc3MnOwogICAgICB2YXIgaG9yYVMgPSBTdHJpbmcoZS5ob3JhIHx8ICcnKTsKICAgICAgdmFyIGN0YVMgPSAoZnV0dXJhICYmICFtb2RvUHJldmlldygpKQogICAgICAgID8gJzxzcGFuIGNsYXNzPSJyZXMiIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmstbXV0ZSkiPkFicmUgZW0gJytkYXRhQlIoZS5kYXRhKSsnLCDDoHMgJytlc2MoaG9yYVMuc3BsaXQoJyAnKVswXSkrJzwvc3Bhbj4nCiAgICAgICAgOiAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciBidG4tc20iIGRhdGEtZ290bz0ic2ltdWxhZG8iPklyIHBhcmEgbyBTaW11bGFkbzwvYnV0dG9uPic7CiAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0idHItaXRlbSB0ci1zaW0gJytjbHNTKyciPjxzcGFuIGNsYXNzPSJ0ci1kb3QiPjwvc3Bhbj48ZGl2IGNsYXNzPSJ0ci1jYXJkIj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJ0ci1kYXRhIj4nK2RtLmQrJzxzbWFsbD4nK2RtLm0rJzwvc21hbGw+JysoaXNIb2plPyc8ZW0+SG9qZTwvZW0+JzonJykrJzwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9InRyLXRodW1iIHNpbS10aHVtYiI+JytJQ09fUFJPVkErJzwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9InRyLW1haW4iPicrCiAgICAgICAgJzxkaXYgY2xhc3M9InRyLXdoZW4iPlNpbXVsYWRvIEZpbmFsIMK3ICcrZXNjKGUuaG9yYSkrJzwvZGl2PicrCiAgICAgICAgJzxiPicrZXNjKGUudGl0dWxvKSsnPC9iPicrCiAgICAgICAgJzxkaXYgY2xhc3M9InRyLWZvb3QiPjxzcGFuIHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwIj4nKwogICAgICAgIGN0YVMrJzxzcGFuIGNsYXNzPSJzdGF0ZS10YWciPlByb3ZhIMO6bmljYSDCtyAxMDAgcXVlc3TDtWVzIG5hIHBsYXRhZm9ybWE8L3NwYW4+PC9zcGFuPjwvZGl2PicrCiAgICAgICAgJzwvZGl2PjwvZGl2PjwvZGl2Pic7CiAgICB9CgogICAgdmFyIHRpcG9MYWJlbCA9IGUudGlwbz09PSdwcm92YScgPyAnRGlhIGRhIHByb3ZhJyA6IGUudGlwbz09PSdtYXJjbycgPyAnRXZlbnRvJyA6ICdBdWxhJzsKICAgIHZhciB0aHVtYiA9IGUueXQKICAgICAgPyAnPGltZyBzcmM9IicreXRUaHVtYihlLnl0KSsnIiBhbHQ9IiIgbG9hZGluZz0ibGF6eSIgb25lcnJvcj0idGhpcy5yZW1vdmUoKSI+JwogICAgICA6ICc8ZGl2IGNsYXNzPSJmYWxsIj48c3ZnIHdpZHRoPSIyNiIgaGVpZ2h0PSIyNiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIxLjYiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCI+PGNpcmNsZSBjeD0iOSIgY3k9IjEwIiByPSIyLjIiLz48Y2lyY2xlIGN4PSIxNSIgY3k9IjEwIiByPSIyLjIiLz48cGF0aCBkPSJNNCAyMGMwLTYgMi0xMyA4LTEzczggNyA4IDEzIi8+PHBhdGggZD0iTTkgNGwzIDIgMy0yIi8+PC9zdmc+PC9kaXY+JzsKCiAgICB2YXIgYWN0cyA9ICc8c3BhbiBjbGFzcz0iYWN0cyI+JysKICAgICAgKGZ1dHVyYQogICAgICAgID8gJzxhIGNsYXNzPSJidG4taWNvIiBocmVmPSInKyhlLnl0IHx8ICdodHRwczovL3d3dy55b3V0dWJlLmNvbS9AZXN0cmF0ZWdpYW1lZCcpKyciIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIiB0aXRsZT0iRGVmaW5pciBsZW1icmV0ZSBubyBZb3VUdWJlIiBhcmlhLWxhYmVsPSJEZWZpbmlyIGxlbWJyZXRlIG5vIFlvdVR1YmUiPicrSUNPX1NJTk8rJzwvYT4nCiAgICAgICAgOiAnPGEgY2xhc3M9ImJ0bi1pY28iIGhyZWY9IicrKGUueXQgfHwgJ2h0dHBzOi8vd3d3LnlvdXR1YmUuY29tL0Blc3RyYXRlZ2lhbWVkJykrJyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiIHRpdGxlPSJBc3Npc3RpciDDoCBhdWxhIiBhcmlhLWxhYmVsPSJBc3Npc3RpciDDoCBhdWxhIj4nK0lDT19QTEFZKyc8L2E+JykrCiAgICAgIChTTElERVNbZS5pZF0KICAgICAgICA\/ICc8YSBjbGFzcz0iYnRuLWljbyIgaHJlZj0iJytTTElERVNbZS5pZF0rJyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiIHRpdGxlPSJCYWl4YXIgc2xpZGVzIiBhcmlhLWxhYmVsPSJCYWl4YXIgc2xpZGVzIj4nK0lDT19ETCsnPC9hPicKICAgICAgICA6ICc8c3BhbiBjbGFzcz0iYnRuLWljbyBvZmYiIHRpdGxlPSJTbGlkZXMgZW0gYnJldmUiPicrSUNPX0RMKyc8L3NwYW4+JykrJzwvc3Bhbj4nOwoKICAgIHZhciB0ZW1DaGF2ZSA9IFRFTV9DSEFWRS5pbmRleE9mKGUuaWQpID4gLTE7CiAgICB2YXIgY2hpcCA9IGRvbmUKICAgICAgPyAnPHNwYW4gY2xhc3M9InJlcyI+UHJlc2VudGU8L3NwYW4+JwogICAgICA6IGZ1dHVyYQogICAgICAgID8gKG1vZG9QcmV2aWV3KCkgJiYgdGVtQ2hhdmUKICAgICAgICAgICAgPyAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciBidG4tc20iIGRhdGEtZXhwYW5kPSInK2UuaWQrJyI+RmF6ZXIgY2hlY2staW48L2J1dHRvbj4nCiAgICAgICAgICAgIDogJzxzcGFuIGNsYXNzPSJyZXMiIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmstbXV0ZSkiPkFnZW5kYWRhPC9zcGFuPicpCiAgICAgICAgOiAoaXNIb2plIHx8ICF0ZW1DaGF2ZSA\/ICcnIDogJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBkYXRhLWV4cGFuZD0iJytlLmlkKyciPlJlY3VwZXJhcjwvYnV0dG9uPicpOwoKICAgIHZhciBxdWVzdG9lcyA9ICcnOwogICAgaWYgKGUucXVpeiAmJiAoIWZ1dHVyYSB8fCBtb2RvUHJldmlldygpKSkgewogICAgICB2YXIgblByb2dRID0gblJlc3Bvc3Rhc0V2ZW50byhlLmlkKTsKICAgICAgcXVlc3RvZXMgPSBtCiAgICAgICAgPyAnPHNwYW4gY2xhc3M9InJlcyIgc3R5bGU9ImZvbnQtc2l6ZToxMnB4Ij5RdWVzdMO1ZXMgJyttLmFjZXJ0b3MrJy8nK20udG90YWwrJzwvc3Bhbj4nCiAgICAgICAgOiAocXVpekRvRXZlbnRvKGUpLmxlbmd0aAogICAgICAgICAgICA\/ICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgZGF0YS1xdWl6PSInK2UuaWQrJyI+JysoblByb2dRID8gJ0NvbnRpbnVhciBxdWVzdMO1ZXMgKCcrblByb2dRKycvJytxdWl6RG9FdmVudG8oZSkubGVuZ3RoKycpJyA6ICdRdWVzdMO1ZXMgZG8gZGlhIMK3IGF0w6kgJytQVF9ESUErJyBwdHMnKSsnPC9idXR0b24+JwogICAgICAgICAgICA6ICc8c3BhbiBjbGFzcz0ic3RhdGUtdGFnIHN0YXRlLXdhaXQiPlF1ZXN0w7VlcyBlbSBwcmVwYXJhw6fDo288L3NwYW4+Jyk7CiAgICB9CgogICAgdmFyIGZvcm0gPSAoIWRvbmUgJiYgKCFmdXR1cmEgfHwgbW9kb1ByZXZpZXcoKSkgJiYgVEVNX0NIQVZFLmluZGV4T2YoZS5pZCkgPiAtMSkKICAgICAgPyAnPGRpdiBjbGFzcz0icm93LWZvcm0iIGlkPSJyZi0nK2UuaWQrJyIgc3R5bGU9ImRpc3BsYXk6JysoaXNIb2plPycnOidub25lJykrJyI+JysKICAgICAgICAnPGRpdiBjbGFzcz0iZXYta2lja2VyIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo4cHgiPlBhbGF2cmEtY2hhdmUgZGEgYXVsYSDCtyByZXZlbGFkYSBkdXJhbnRlIGEgdHJhbnNtaXNzw6NvIMK3ICcrKGlzSG9qZSA\/ICd2YWxlICcrUFRfQVVMQSsnIHB0cycgOiAncmV0cm9hdGl2byDCtyB2YWxlICcrUFRfQVVMQV9SRVRSTysnIHB0cycpKyc8L2Rpdj4nKwogICAgICAgICc8Zm9ybSBjbGFzcz0iY2hlY2tpbi1mb3JtIiBkYXRhLWV2PSInK2UuaWQrJyI+JysKICAgICAgICAnPGlucHV0IHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJEaWdpdGUgYSBwYWxhdnJhLWNoYXZlIiBhcmlhLWxhYmVsPSJQYWxhdnJhLWNoYXZlIGRhIGF1bGEiIGF1dG9jb21wbGV0ZT0ib2ZmIj4nKwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIGJ0bi1zbSIgdHlwZT0ic3VibWl0Ij4nKyhpc0hvamU\/J0NoZWNrLWluJzonQ29uZmlybWFyIHByZXNlbsOnYSAocmV0cm9hdGl2YSknKSsnPC9idXR0b24+PC9mb3JtPjwvZGl2PicKICAgICAgOiAnJzsKCiAgICB2YXIgY2xzID0gZG9uZSA\/ICdvaycgOiBmdXR1cmEgPyAnbmV4dCcgOiBpc0hvamUgPyAnbm93JyA6ICdtaXNzJzsKICAgIHJldHVybiAnPGRpdiBjbGFzcz0idHItaXRlbSAnK2NscysnIj48c3BhbiBjbGFzcz0idHItZG90Ij48L3NwYW4+PGRpdiBjbGFzcz0idHItY2FyZCInKyhlLnl0ID8gJyBkYXRhLXl0PSInK2UueXQrJyIgdGl0bGU9IkFicmlyIGVzdGEgYXVsYSBubyBZb3VUdWJlIicgOiAnJykrJz4nKwogICAgICAnPGRpdiBjbGFzcz0idHItZGF0YSI+JytkbS5kKyc8c21hbGw+JytkbS5tKyc8L3NtYWxsPicrKGlzSG9qZT8nPGVtPkhvamU8L2VtPic6JycpKyc8L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0idHItdGh1bWIiPicrdGh1bWIrJzwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJ0ci1tYWluIj4nKwogICAgICAnPGRpdiBjbGFzcz0idHItd2hlbiI+Jyt0aXBvTGFiZWwrJyDCtyAnK2VzYyhlLmhvcmEpKyc8L2Rpdj4nKwogICAgICAnPGI+Jytlc2MoZS50aXR1bG8pKyc8L2I+JysKICAgICAgJzxkaXYgY2xhc3M9InRyLWZvb3QiPjxzcGFuIHN0eWxlPSJkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwIj4nK2NoaXArcXVlc3RvZXMrJzwvc3Bhbj4nK2FjdHMrJzwvZGl2PicrZm9ybSsKICAgICAgJzwvZGl2PjwvZGl2PjwvZGl2Pic7CiAgfQoKICBmdW5jdGlvbiB3aXJlQXVsYXMoKXsKICAgIC8vIGNhcmQgaW50ZWlybyBjbGljw6F2ZWw6IHTDrXR1bG8sIHRodW1iIG91IMOhcmVhIGxpdnJlIGFicmVtIGEgYXVsYSBubwogICAgLy8gWW91VHViZTsgY29udHJvbGVzIGludGVybm9zIChjaGVjay1pbiwgcXVlc3TDtWVzLCDDrWNvbmVzKSBmaWNhbSBpbnRhY3RvcwogICAgJCQoJy50ci1jYXJkW2RhdGEteXRdJykuZm9yRWFjaChmdW5jdGlvbihjYXJkKXsKICAgICAgY2FyZC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKGV2KXsKICAgICAgICBpZiAoZXYudGFyZ2V0LmNsb3Nlc3QoJ2EsYnV0dG9uLGlucHV0LGZvcm0sLnJvdy1mb3JtLGRldGFpbHMnKSkgcmV0dXJuOwogICAgICAgIHdpbmRvdy5vcGVuKGNhcmQuZGF0YXNldC55dCwgJ19ibGFuaycsICdub29wZW5lcicpOwogICAgICB9KTsKICAgIH0pOwogICAgJCQoJy5jaGVja2luLWZvcm0nKS5mb3JFYWNoKGZ1bmN0aW9uKGYpewogICAgICBmLmFkZEV2ZW50TGlzdGVuZXIoJ3N1Ym1pdCcsIGZ1bmN0aW9uKGV2KXsKICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIC8vIGNhcmltYmEgcHJhIHF1ZSBvIHJlc2dhdGUgYW50aS1Sb2NrZXQgZ2xvYmFsIChkb2N1bWVudCBjbGljaykgbsOjbwogICAgICAgIC8vIHJlLWRpc3BhcmUgZXN0ZSBzdWJtaXQgZW0gNDAwbXMg4oaSIHJlZ2lzdHJhcl9jaGVja2luIGRvYnJhZG8gKyB0b2FzdAogICAgICAgIC8vICJ2b2PDqiBqw6EgY29uZmlybW91IHByZXNlbsOnYSIuIE1lc21hIGJsaW5kYWdlbSBkbyBmb3JtIGRlIGF1dGguCiAgICAgICAgZXYudGFyZ2V0Ll9fdWx0aW1vU3VibWl0ID0gRGF0ZS5ub3coKTsKICAgICAgICB2YXIgdmFsID0gZi5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLnZhbHVlLnRyaW0oKTsKICAgICAgICB2YXIgYnRuID0gZi5xdWVyeVNlbGVjdG9yKCdidXR0b24nKTsKICAgICAgICBpZiAoYnRuLmRpc2FibGVkKSByZXR1cm47CiAgICAgICAgYnRuLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAvLyBQUk9EVcOHw4NPOiBhIHBhbGF2cmEtY2hhdmUgw6kgdmFsaWRhZGEgTk8gU0VSVklET1IgKHNlZ3JlZG8gbm8gYmFuY28pOwogICAgICAgIC8vIG8gc2Vydmlkb3IgdGFtYsOpbSBkZWNpZGUgc2UgbyBjaGVjay1pbiDDqSBhbyB2aXZvIG91IHJldHJvYXRpdm8KICAgICAgICBzYlJwYygncmVnaXN0cmFyX2NoZWNraW4nLCB7IHBfY3BmOiBDQUNIRS51c2VyLmNwZiwgcF9ldmVudG86IGYuZGF0YXNldC5ldiwgcF9wYWxhdnJhOiB2YWwgfSkKICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHJlcyl7CiAgICAgICAgICAgIGJ0bi5kaXNhYmxlZCA9IGZhbHNlOwogICAgICAgICAgICBpZiAocmVzLnN0YXR1cyA9PT0gJ29rJykgewogICAgICAgICAgICAgIENBQ0hFLmNoZWNraW5zW2YuZGF0YXNldC5ldl0gPSB7IGFvVml2bzogcmVzLmFvX3Zpdm8sIHRzOiBEYXRlLm5vdygpIH07CiAgICAgICAgICAgICAgdmFyIGdhbmhvID0gcmVzLmFvX3Zpdm8gPyBQVF9BVUxBIDogUFRfQVVMQV9SRVRSTzsKICAgICAgICAgICAgICB0b2FzdCgnUHJlc2Vuw6dhIGNvbmZpcm1hZGEgwrcgKycrZm10UHRzKGdhbmhvKSsnIHB0cycrKHJlcy5hb192aXZvID8gJycgOiAnIChyZXRyb2F0aXZvIMK3IDc1JSknKSsnLiBPZmVuc2l2YSBhdGl2YSEnKTsKICAgICAgICAgICAgICB2YXIgeSA9IHdpbmRvdy5zY3JvbGxZOwogICAgICAgICAgICAgIHJlbmRlckF1bGFzKCk7CiAgICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIHkpOwogICAgICAgICAgICB9IGVsc2UgaWYgKHJlcy5zdGF0dXMgPT09ICdqYV9mZWl0bycpIHsKICAgICAgICAgICAgICB0b2FzdCgnVm9jw6ogasOhIGNvbmZpcm1vdSBwcmVzZW7Dp2EgbmVzdGEgYXVsYS4nKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMuc3RhdHVzID09PSAnZXZlbnRvX2Z1dHVybycpIHsKICAgICAgICAgICAgICB0b2FzdCgnTyBjaGVjay1pbiBhYnJlIG5vIGRpYSBkYSBhdWxhLicpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRvYXN0KCdQYWxhdnJhLWNoYXZlIGluY29ycmV0YS4gRWxhIMOpIHJldmVsYWRhIGR1cmFudGUgYSB0cmFuc21pc3PDo28uJyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pCiAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24oKXsgYnRuLmRpc2FibGVkID0gZmFsc2U7IHRvYXN0KCdTZW0gY29uZXjDo28uIFRlbnRlIG5vdmFtZW50ZS4nKTsgfSk7CiAgICAgIH0pOwogICAgfSk7CiAgICAkJCgnW2RhdGEtZXhwYW5kXScpLmZvckVhY2goZnVuY3Rpb24oYil7CiAgICAgIGIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgIHZhciBmID0gJCgnI3JmLScgKyBiLmRhdGFzZXQuZXhwYW5kKTsKICAgICAgICBpZiAoIWYpIHJldHVybjsKICAgICAgICB2YXIgYWJyaXIgPSBmLnN0eWxlLmRpc3BsYXkgPT09ICdub25lJzsKICAgICAgICAkJCgnLnJvdy1mb3JtJykuZm9yRWFjaChmdW5jdGlvbih4KXsgaWYgKHguaWQgIT09ICdyZi0nICsgYi5kYXRhc2V0LmV4cGFuZCkgeC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOyB9KTsKICAgICAgICBmLnN0eWxlLmRpc3BsYXkgPSBhYnJpciA\/ICcnIDogJ25vbmUnOwogICAgICAgIGlmIChhYnJpcikgZi5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLmZvY3VzKCk7CiAgICAgIH0pOwogICAgfSk7CiAgICAkJCgnW2RhdGEtcXVpel0nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpewogICAgICBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgcmVuZGVyUXVpeihiLmRhdGFzZXQucXVpeik7IH0pOwogICAgfSk7CiAgICAkJCgnW2RhdGEtZ290b10nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpewogICAgICBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgZ28oYi5kYXRhc2V0LmdvdG8pOyB9KTsKICAgIH0pOwogIH0KCiAgZnVuY3Rpb24gcmVuZGVyQXVsYXMoKXsKICAgIHZhciBwID0gY2FsY1BvbnRvcyh1c2VyKTsKICAgIHZhciBjaGVja3MgPSBzdG9yZS5jaGVja2lucyh1c2VyLmVtYWlsKTsKICAgIHZhciBldkhvamUgPSBldmVudG9zRG9EaWEoaG9qZS5pc28pOwogICAgdmFyIHByaW1laXJhQ29tQ2hhdmUgPSBqLmV2ZW50b3MuZmluZChmdW5jdGlvbihlKXsgcmV0dXJuIFRFTV9DSEFWRS5pbmRleE9mKGUuaWQpID4gLTE7IH0pIHx8IGouZXZlbnRvc1swXTsKICAgIHZhciBtc2dPZmVuc2l2YSA9IGV2SG9qZS5sZW5ndGgKICAgICAgPyAnSG9qZSB0ZW0gJyArIChldkhvamUubGVuZ3RoPjE\/J2F1bGFzJzonYXVsYScpICsgJzogJyArIGV2SG9qZS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuICc8Yj4nK2VzYyhlLnRpdHVsbykrJzwvYj4nO30pLmpvaW4oJyBlICcpICsgJy4gJyArCiAgICAgICAgKGV2SG9qZS5zb21lKGZ1bmN0aW9uKGUpeyByZXR1cm4gVEVNX0NIQVZFLmluZGV4T2YoZS5pZCkgPiAtMTsgfSkKICAgICAgICAgID8gJ0Zhw6dhIG8gY2hlY2staW4gY29tIGEgcGFsYXZyYS1jaGF2ZSByZXZlbGFkYSBhbyB2aXZvLicKICAgICAgICAgIDogJ0Fwcm92ZWl0ZSBhIHRyYW5zbWlzc8OjbyBhbyB2aXZvIG5vIFlvdVR1YmUuJykKICAgICAgOiBob2plLmlzbyA8IGouaW5pY2lvCiAgICAgICAgPyAnU3VhIHByaW1laXJhIHByZXNlbsOnYTogJytlc2MocHJpbWVpcmFDb21DaGF2ZS50aXR1bG8pKycgKCcrZGF0YUJSKHByaW1laXJhQ29tQ2hhdmUuZGF0YSkrJykuJwogICAgICAgIDogJ07Do28gaMOhIGF1bGEgaG9qZS4gUmVjdXBlcmUgcHJlc2Vuw6dhcyBwZW5kZW50ZXMgbmEgdHJpbGhhIGFiYWl4by4nOwoKICAgIHZhciBodG1sID0gcGFnZUhlYWQoJ1N1YSBqb3JuYWRhIGRlIGF1bGFzJywgJ0F1bGFzJywKICAgICAgJ0Fzc2lzdGEsIGJhaXhlIG9zIHNsaWRlcyBlIGNvbmZpcm1lIHByZXNlbsOnYSBjb20gYSBwYWxhdnJhLWNoYXZlIHJldmVsYWRhIGFvIHZpdm8uJywKICAgICAgJzUyMCBwdHMgZW0gam9nbycpOwogICAgaHRtbCArPSBkZW1vQmFubmVyKCk7CiAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJjYXJkIG9mZW5zaXZhLWNhcmQiPicrCiAgICAgICc8ZGl2IGNsYXNzPSJmbGFtZSI+PGRpdiBjbGFzcz0ibiI+JytwLm9mZW5zaXZhKyc8L2Rpdj48ZGl2IGNsYXNzPSJsIj5hdWxhcyBzZWd1aWRhczwvZGl2PjwvZGl2PicrCiAgICAgICc8ZGl2PjxoMz5TdWEgb2ZlbnNpdmE8L2gzPjxkaXYgY2xhc3M9Im1zZyI+Jyttc2dPZmVuc2l2YSsnPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9InByb2dyZXNzIj48ZGl2IGNsYXNzPSJmaWxsIiBzdHlsZT0id2lkdGg6JysocC5uQ2hlY2tzL3AubkV2ZW50b3MqMTAwKSsnJSI+PC9kaXY+PC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9InByb2dyZXNzLW5vdGUiPicrcC5uQ2hlY2tzKycgZGUgJytwLm5FdmVudG9zKycgcHJlc2Vuw6dhcyBhdMOpIGFxdWk8L2Rpdj48L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0icmFuay1wdHMiPjxkaXYgY2xhc3M9Im4iPicrZm10UHRzKHAucHJlc2VuY2EpKycgPHNtYWxsPi8gJytQT05UT1MucHJlc2VuY2ErJyBwdHM8L3NtYWxsPjwvZGl2PjxkaXYgY2xhc3M9ImwiPlByZXNlbsOnYSBuYSBjbGFzc2lmaWNhw6fDo288L2Rpdj4nKwogICAgICAnPC9kaXY+JysKICAgICAgJzwvZGl2Pic7CgogICAgWzAsMSwyXS5mb3JFYWNoKGZ1bmN0aW9uKHNlbSl7CiAgICAgIHZhciBldnMgPSBqLmV2ZW50b3MuZmlsdGVyKGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5zZW1hbmEgPT09IHNlbTsgfSk7CiAgICAgIGlmICghZXZzLmxlbmd0aCkgcmV0dXJuOwogICAgICAvLyBwcmVzZW7Dp2FzIGNvbnRhZGFzIHPDsyBzb2JyZSBldmVudG9zIENPTSBjaGF2ZSAoYSBBYmVydHVyYSBlIG8gZGlhIGRvCiAgICAgIC8vIFNpbXVsYWRvIG7Do28gdMOqbSBjaGVjay1pbiBlIG7Do28gZW50cmFtIG5vIGRlbm9taW5hZG9yKQogICAgICB2YXIgY29tQ2hhdmUgPSBldnMuZmlsdGVyKGZ1bmN0aW9uKGUpeyByZXR1cm4gVEVNX0NIQVZFLmluZGV4T2YoZS5pZCkgPiAtMTsgfSk7CiAgICAgIHZhciBmZWl0YXMgPSBjb21DaGF2ZS5maWx0ZXIoZnVuY3Rpb24oZSl7IHJldHVybiBjaGVja3NbZS5pZF07IH0pLmxlbmd0aDsKICAgICAgdmFyIHJvdHVsbyA9IHNlbT09PTAgPyAnQWJlcnR1cmEnIDogJ1NlbWFuYSAnK3NlbTsKICAgICAgdmFyIGZhaXhhID0gZXZzWzBdLmRhdGEgPT09IGV2c1tldnMubGVuZ3RoLTFdLmRhdGEKICAgICAgICA\/IGRhdGFCUihldnNbMF0uZGF0YSkKICAgICAgICA6IGRhdGFCUihldnNbMF0uZGF0YSkrJyBhICcrZGF0YUJSKGV2c1tldnMubGVuZ3RoLTFdLmRhdGEpOwogICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJzZWMtaCI+Jytyb3R1bG8rJyDCtyAnK2ZhaXhhKwogICAgICAgIChjb21DaGF2ZS5sZW5ndGggPyAnIDxzcGFuIGNsYXNzPSJjbnQnKyhmZWl0YXM9PT1jb21DaGF2ZS5sZW5ndGg\/JyBnJzonJykrJyI+JytmZWl0YXMrJy8nK2NvbUNoYXZlLmxlbmd0aCsnIHByZXNlbsOnYXM8L3NwYW4+JyA6ICcnKSsnPC9kaXY+JzsKICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0idHJpbGhhIj4nK2V2cy5tYXAodHJpbGhhSXRlbSkuam9pbignJykrJzwvZGl2Pic7CiAgICB9KTsKCiAgICAkKCcjbWFpbicpLmlubmVySFRNTCA9IGh0bWw7CiAgICB3aXJlQXVsYXMoKTsKICB9CgogIC8qIC0tLS0tLS0tLS0gSU7DjUNJTyAoY29tZWNlIHBvciBhcXVpKSAtLS0tLS0tLS0tICovCiAgLy8gQSBPUkRFTSBETyBJTsONQ0lPIE1VREEgQ09NIEEgRkFTRSAoZGVjaXPDo28gZG8gSWdvciwgMTAvMDgpLiBBbnRlcyBkYQogIC8vIGVzdHJlaWEgbyBhbHVubyBuw6NvIHRlbSBvIHF1ZSBmYXplciBob2plOiBvIHRvcG8gbW9zdHJhIG8gcXVlIGVsZSBQT0RFCiAgLy8gZmF6ZXIgYWdvcmEgKHByw7N4aW1hIHRyYW5zbWlzc8OjbywgaW5kaWNhciBhbWlnb3MpIGUgYXMgcmVncmFzL0JRIE1FRAogIC8vIGRlc2NlbS4gQSBwYXJ0aXIgZGUgMjYvMDggbyBkaWEgZGUgaG9qZSBlIGEgcG9udHVhw6fDo28gc29iZW0sIGUgbyAiQ29tbwogIC8vIHZhaSBmdW5jaW9uYXIiIHJlY29saGUgbnVtIDxkZXRhaWxzPi4gQSB0cm9jYSDDqSBhdXRvbcOhdGljYSBwZWxhIGRhdGEuCiAgZnVuY3Rpb24gcmVuZGVySW5pY2lvKCl7CiAgICB2YXIgcCA9IGNhbGNQb250b3ModXNlcik7CiAgICB2YXIgZXZIb2plID0gZXZlbnRvc0RvRGlhKGhvamUuaXNvKTsKICAgIHZhciBxcyA9IHN0b3JlLm1pc3NvZXModXNlci5lbWFpbCk7CiAgICB2YXIgY2hlY2tzID0gc3RvcmUuY2hlY2tpbnModXNlci5lbWFpbCk7CiAgICB2YXIgYXRyYXNhZGFzID0gai5ldmVudG9zLmZpbHRlcihmdW5jdGlvbihlKXsgcmV0dXJuIGUucXVpeiAmJiBlLmRhdGEgPCBob2plLmlzbyAmJiAhcXNbZS5pZF07IH0pLmxlbmd0aDsKICAgIHZhciBwcmVFc3RyZWlhID0gaG9qZS5pc28gPCBqLmluaWNpbzsKCiAgICB2YXIgaHRtbCA9IHBhZ2VIZWFkKCdDb21lY2UgcG9yIGFxdWknLCAnQmVtLXZpbmRvLCAnK2VzYyh1c2VyLm5vbWUuc3BsaXQoJyAnKVswXSkrJy4nLAogICAgICAnQXF1aSBjb21lw6dhIGEgc3VhIGpvcm5hZGEgZGUgcmV0YSBmaW5hbCBydW1vIGFvICcrQUZfQlJBTkQuY3VydGErJy4nLAogICAgICAocHJlRXN0cmVpYSA\/ICdGYWx0YW0gJytkaWFzKGhvamUuaXNvLCBqLmluaWNpbykrJyBkaWFzJyA6ICdEaWEgJytkaWFBdHVhbCsnIGRlICcrdG90YWxEaWFzKSk7CgogICAgaHRtbCArPSBkZW1vQmFubmVyKCk7CgogICAgLyogLS0tIEJMT0NPUzogbW9udGFkb3MgYXF1aSwgb3JkZW5hZG9zIHBvciBmYXNlIG5vIGZpbSBkYSBmdW7Dp8OjbyAtLS0gKi8KCiAgICAvLyBWw61kZW8gZGUgYm9hcy12aW5kYXMgKGhvamUgZGVzbGlnYWRvIHBlbGEgZmxhZzsgdm9sdGEgY29tbyBpdGVtIDIgbmEKICAgIC8vIHByw6ktZXN0cmVpYSBxdWFuZG8gbyBJZ29yIGdyYXZhcikuIG1heC13aWR0aCBzZWd1cmEgYSBhbHR1cmEgZG8gcGxheWVyCiAgICAvLyAxNjo5IHBybyBhbHVubyBlbnhlcmdhciBxdWUgaMOhIGNvbnRlw7pkbyBhYmFpeG8gZGEgZG9icmEgKHBlZGlkbyAwOC8wOCkuCiAgICB2YXIgdmlkZW9CViA9IFZJREVPX0JWX1BPUl9QUk9WQVtBRl9QUk9WQV0gfHwgJyc7CiAgICB2YXIgYlZpZGVvID0gdmlkZW9CVgogICAgICA\/ICc8ZGl2IGNsYXNzPSJjYXJkIiBzdHlsZT0icGFkZGluZzowO292ZXJmbG93OmhpZGRlbjttYXJnaW4tYm90dG9tOjIycHg7bWF4LXdpZHRoOjcwMHB4Ij4nKwogICAgICAgICc8ZGl2IHN0eWxlPSJwYWRkaW5nOjE4cHggMjRweCAxNHB4Ij4nKwogICAgICAgICc8aDMgc3R5bGU9Im1hcmdpbjowIDAgMnB4Ij5Db21lY2UgcG9yIGFxdWk8L2gzPicrCiAgICAgICAgJzxwIHN0eWxlPSJmb250LXNpemU6MTMuNXB4O2NvbG9yOnZhcigtLWluay1kaW0pO21hcmdpbjowIj5BIGpvcm5hZGEsIG9zIHBvbnRvcyBlIG9zIHByw6ptaW9zIGVtIHBvdWNvcyBtaW51dG9zLjwvcD48L2Rpdj4nKwogICAgICAgICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nLXRvcDo1Ni4yNSU7YmFja2dyb3VuZDojMDAwIj4nKwogICAgICAgICc8aWZyYW1lIHNyYz0iJyt2aWRlb0JWKyciIHRpdGxlPSJWw61kZW8gZGUgYm9hcy12aW5kYXMgZG8gQXRvIEZpbmFsIiAnKwogICAgICAgICdzdHlsZT0icG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7Ym9yZGVyOjAiICcrCiAgICAgICAgJ2FsbG93PSJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZTsgZnVsbHNjcmVlbiIgJysKICAgICAgICAnYWxsb3dmdWxsc2NyZWVuIGxvYWRpbmc9ImxhenkiPjwvaWZyYW1lPicrCiAgICAgICAgJzwvZGl2PjwvZGl2PicKICAgICAgOiAnJzsKCiAgICAvLyBDb21vIHZhaSBmdW5jaW9uYXI6IEFCRVJUTyBhbnRlcyBkYSBlc3RyZWlhICjDqSBvcmllbnRhw6fDo28gbm92YSksCiAgICAvLyBSRUNPTEhJRE8gZHVyYW50ZSBhIGpvcm5hZGEgKHZpcmEgY29uc3VsdGEsIG7Do28gb2N1cGEgYSBkb2JyYSkKICAgIHZhciBwYXNzb3MgPSAnPGRpdiBjbGFzcz0ib2ItZ3JpZCI+JysKICAgICAgJzxkaXYgY2xhc3M9Im9iLWl0ZW0iPjxzcGFuIGNsYXNzPSJuIj4xPC9zcGFuPjxiPkFzc2lzdGEgZSBmYcOnYSBvIGNoZWNrLWluPC9iPkEgcGFsYXZyYS1jaGF2ZSByZXZlbGFkYSBhbyB2aXZvIGNvbmZpcm1hIHN1YSBwcmVzZW7Dp2E6IDQwIHB0cyBhbyB2aXZvLCAzMCByZXRyb2F0aXZhLjwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJvYi1pdGVtIj48c3BhbiBjbGFzcz0ibiI+Mjwvc3Bhbj48Yj5SZXNvbHZhIGFzIHF1ZXN0w7VlcyBkbyBkaWE8L2I+VW0gYmxvY28gcG9yIGF1bGEsIGNvcnJlw6fDo28gbmEgaG9yYTogYXTDqSA2NSBwdHMgcG9yIGRpYS48L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0ib2ItaXRlbSI+PHNwYW4gY2xhc3M9Im4iPjM8L3NwYW4+PGI+RmVjaGUgY29tIG8gU2ltdWxhZG8gRmluYWw8L2I+UHJvdmEgw7puaWNhOiA3IHB0cyBwb3IgYWNlcnRvLCBhdMOpIDcwMC4gTyB0b3AgMTAgbGV2YSBvcyBwcsOqbWlvcy48L2Rpdj4nKwogICAgICAnPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9Im9iLWFjdHMiPicrCiAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIGJ0bi1zbSIgZGF0YS1nb3RvPSJhdWxhcyI+SXIgcGFyYSBhcyBhdWxhczwvYnV0dG9uPicrCiAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgZGF0YS1nb3RvPSJxdWVzdG9lcyI+UmVzb2x2ZXIgcXVlc3TDtWVzPC9idXR0b24+JysKICAgICAgJzxzcGFuIHN0eWxlPSJmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1pbmstbXV0ZSkiPkFzIHJlZ3JhcyBjb21wbGV0YXMgZmljYW0gbm8gZ3J1cG8gb2ZpY2lhbCBkbyBXaGF0c0FwcC48L3NwYW4+PC9kaXY+JzsKICAgIHZhciBiQ29tbyA9IHByZUVzdHJlaWEKICAgICAgPyAnPGRpdiBjbGFzcz0iY2FyZCBvbmJvYXJkIj48ZGl2IGNsYXNzPSJraWNrZXIiPkNvbW8gdmFpIGZ1bmNpb25hciwgZW0gMyBwYXNzb3M8L2Rpdj4nK3Bhc3NvcysnPC9kaXY+JwogICAgICA6ICc8ZGV0YWlscyBjbGFzcz0iY2FyZCBvbmJvYXJkIG9uYm9hcmQtcmVjIj48c3VtbWFyeT5SZWxlbWJyYXIgY29tbyBmdW5jaW9uYTwvc3VtbWFyeT4nK3Bhc3NvcysnPC9kZXRhaWxzPic7CgogICAgLy8gQlEgTUVEIEZSRUU6IHPDsyBFTlFVQU5UTyBhIGpvcm5hZGEgbsOjbyBjb21lw6dhIChwZWRpZG8gZG8gSWdvciwgMTAvMDgpLgogICAgLy8gRmljYSBwb3Igw5pMVElNTzogw6kgcG9udGUgcHJhIGZvcmEgZGEgcGxhdGFmb3JtYS4KICAgIHZhciBiQnEgPSBwcmVFc3RyZWlhCiAgICAgID8gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjI0cHggMjhweDttYXJnaW4tYm90dG9tOjIycHg7ZGlzcGxheTpmbGV4O2dhcDoxOHB4O2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcDtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbiI+JysKICAgICAgICAnPGRpdiBzdHlsZT0iZmxleDoxO21pbi13aWR0aDoyNDBweCI+PGRpdiBjbGFzcz0ia2lja2VyIj5FbnF1YW50byBhIGpvcm5hZGEgbsOjbyBjb21lw6dhPC9kaXY+JysKICAgICAgICAnPGgzIHN0eWxlPSJtYXJnaW46NnB4IDAgNHB4Ij5CUU1FRCBkZSBQb3J0YXMgQWJlcnRhczogdHJlaW5lIGRlIGdyYcOnYTwvaDM+JysKICAgICAgICAnPHAgc3R5bGU9ImZvbnQtc2l6ZToxMy41cHg7Y29sb3I6dmFyKC0taW5rLWRpbSk7bWFyZ2luOjAiPkJhbmNvIGRlIFF1ZXN0w7VlcyBsaWJlcmFkbyBlbSBhZ29zdG8uIFRyZWluZSBubyBwYWRyw6NvIGRhIHN1YSBwcm92YSBhdMOpIGEgZXN0cmVpYS48L3A+PC9kaXY+JysKICAgICAgICAnPGEgY2xhc3M9ImJ0biBidG4tYW1iZXIiIGhyZWY9IicrQlFNRURfVVJMKyciIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj5BY2Vzc2FyIG8gQlFNRUQgZ3LDoXRpczwvYT48L2Rpdj4nCiAgICAgIDogJyc7CgogICAgLy8gSW5kaXF1ZSBlIGdhbmhlIHBvbnRvczogU0VNIFRFVE8gKHJldmlzw6NvIDExLzA4KSDigJQgcGxhY2FyIHF1ZSBzw7MgY3Jlc2NlLgogICAgLy8gVmFsZSBhdXRvbcOhdGljbyBxdWFuZG8gbyBhbWlnbyBzZSBpbnNjcmV2ZSBwZWxvIGxpbms7IG7Do28gaMOhIG1haXMgdmFnYQogICAgLy8gbmVtIHBlbmRlbnRlLiBRdWFudG8gbWFpcyBpbmRpY2FyLCBtYWlzIHBvbnRvcy4KICAgIHZhciBpbmRpY2EgPSBDQUNIRS5pbmRpY2Fjb2VzIHx8IHsgdmFsaWRhczogMCwgcGVuZGVudGVzOiAwLCBsaXN0YTogW10gfTsKICAgIHZhciBsaW5rSW5kID0gQUZfVVJMUy5jYWRhc3RybyArIChBRl9VUkxTLmNhZGFzdHJvLmluZGV4T2YoJz8nKSA+IC0xID8gJyYnIDogJz8nKSArICdyZWY9JyArIChDQUNIRS5yZWZDb2RlIHx8ICcnKTsKICAgIHZhciBtc2daYXAgPSAnRXN0b3UgbmEgcmV0YSBmaW5hbCBkbyAnK0FGX0JSQU5ELmN1cnRhKycgY29tIG8gQXRvIEZpbmFsIGRvIEVzdHJhdMOpZ2lhIE1FRDogYXVsYXMgYW8gdml2bywgcXVlc3TDtWVzIGNvbWVudGFkYXMgZSBTaW11bGFkbywgdHVkbyBncmF0dWl0by4gSW5zY3JldmEtc2UgcGVsbyBtZXUgbGluazogJyArIGxpbmtJbmQ7CiAgICB2YXIgbkluZCA9IGluZGljYS52YWxpZGFzIHx8IDA7CiAgICB2YXIgcHRzSW5kQXR1YWwgPSBQVF9JTkQgKiBuSW5kOwogICAgdmFyIHNjb3JlVHh0ID0gbkluZAogICAgICA\/ICc8Yj4rJytwdHNJbmRBdHVhbCsnIHB0czwvYj4gasOhIHNvbWFkb3MgwrcgJytuSW5kKycgYW1pZ28nKyhuSW5kPjE\/J3MgaW5zY3JpdG9zJzonIGluc2NyaXRvJykrJyBwZWxvIHNldSBsaW5rJwogICAgICA6ICdDb21wYXJ0aWxoZSBzZXUgbGluazogY2FkYSBhbWlnbyBxdWUgc2UgaW5zY3JldmVyIHZhbGUgKycrUFRfSU5EKycgcHRzLCBzZW0gbGltaXRlLic7CiAgICB2YXIgYW1pZ29zID0gKGluZGljYS5saXN0YSB8fCBbXSkubWFwKGZ1bmN0aW9uKGEpewogICAgICByZXR1cm4gJzxzcGFuIGNsYXNzPSJpbmQtZnJpZW5kIG9rIj48c3BhbiBjbGFzcz0ic3QiPjwvc3Bhbj4nK2VzYyhhLm5vbWUpKyc8L3NwYW4+JzsKICAgIH0pLmpvaW4oJycpOwogICAgdmFyIGJJbmQgPSAnPGRpdiBjbGFzcz0ic2VjLWgiPkluZGlxdWUgZSBnYW5oZSBwb250b3M8L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0iY2FyZCBpbmQtY2FyZCI+PGRpdiBjbGFzcz0iaW5kLWdyaWQiPicrCiAgICAgICc8ZGl2IGNsYXNzPSJpbmQtbGVmdCI+JysKICAgICAgJzxkaXYgY2xhc3M9ImtpY2tlciI+UHJvZ3JhbWEgZGUgaW5kaWNhw6fDo28gwrcgc2VtIGxpbWl0ZTwvZGl2PicrCiAgICAgICc8aDM+Q2FkYSBhbWlnbyBxdWUgc2UgaW5zY3JldmUgdmFsZSAnK1BUX0lORCsnIHB0czwvaDM+JysKICAgICAgJzxwIGNsYXNzPSJyZWdyYSI+Q29udGEgYXV0b23DoXRpY28gYXNzaW0gcXVlIG8gYW1pZ28gc2UgaW5zY3JldmUgcGVsbyBzZXUgbGluay4gTsOjbyBow6EgdGV0bzogcXVhbnRvIG1haXMgaW5kaWNhciwgbWFpcyBwb250b3MuPC9wPicrCiAgICAgICc8ZGl2IGNsYXNzPSJpbmQtbGlua2xhYmVsIj5TZXUgbGluayBwZXNzb2FsPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9ImluZC1saW5rcm93Ij4nKwogICAgICAnPGlucHV0IGlkPSJpbmRMaW5rIiByZWFkb25seSB2YWx1ZT0iJytlc2MobGlua0luZCkrJyIgYXJpYS1sYWJlbD0iU2V1IGxpbmsgZGUgaW5kaWNhw6fDo28iPicrCiAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIGJ0bi1zbSIgaWQ9ImluZENvcGlhciI+Q29waWFyIGxpbms8L2J1dHRvbj48L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0iaW5kLWFjdHMiPicrCiAgICAgICc8YSBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20gYnRuLXdhIiBocmVmPSJodHRwczovL3dhLm1lLz90ZXh0PScrZW5jb2RlVVJJQ29tcG9uZW50KG1zZ1phcCkrJyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPicrSUNPX1dBKycgQ29udmlkYXIgcGVsbyBXaGF0c0FwcDwvYT48L2Rpdj4nKwogICAgICAnPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9ImluZC1wbGFjYXIiPicrCiAgICAgICc8ZGl2IGNsYXNzPSJpbmQtcGxhY2FyLW4iPicrbkluZCsnPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9ImluZC1wbGFjYXItbCI+JysobkluZD09PTE\/J2FtaWdvIGluc2NyaXRvJzonYW1pZ29zIGluc2NyaXRvcycpKyc8L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0iaW5kLXBsYWNhci1wdHMiPisnK3B0c0luZEF0dWFsKycgcHRzPC9kaXY+JysKICAgICAgJzwvZGl2PjwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJpbmQtc2NvcmUiPicrc2NvcmVUeHQrJzwvZGl2PicrCiAgICAgIChhbWlnb3MgPyAnPGRpdiBjbGFzcz0iaW5kLWZyaWVuZHMiPicrYW1pZ29zKyc8L2Rpdj4nIDogJycpKwogICAgICAnPC9kaXY+JzsKCiAgICAvLyBjYXJkICJVc2UgY29tbyBhcGxpY2F0aXZvIiByZW1vdmlkbyBkbyBJbsOtY2lvIGEgcGVkaWRvIGRvIElnb3IgKDA2LzA4KTsKICAgIC8vIG8gbWFuaWZlc3QgUFdBIGNvbnRpbnVhIG5hcyBww6FnaW5hcyAoaW5zdGFsw6F2ZWwgcGVsbyBtZW51IGRvIG5hdmVnYWRvcikKICAgIHZhciBiSG9qZSA9ICcnOwogICAgaWYgKGV2SG9qZS5sZW5ndGgpIHsKICAgICAgYkhvamUgKz0gJzxkaXYgY2xhc3M9InNlYy1oIj5Ib2plIG5hIGpvcm5hZGE8L2Rpdj4nOwogICAgICBldkhvamUuZm9yRWFjaChmdW5jdGlvbihlKXsKICAgICAgICB2YXIgZG9uZSA9ICEhY2hlY2tzW2UuaWRdOwogICAgICAgIHZhciB0ZW1DaCA9IFRFTV9DSEFWRS5pbmRleE9mKGUuaWQpID4gLTE7CiAgICAgICAgdmFyIGRtID0gZGlhTWVzKGUuZGF0YSk7CiAgICAgICAgYkhvamUgKz0gJzxkaXYgY2xhc3M9Im1yb3cnKyhkb25lPycgZG9uZSc6JycpKyciPjxkaXYgY2xhc3M9ImRhdGEiPicrZG0uZCsnPHNtYWxsPicrZG0ubSsnPC9zbWFsbD48L2Rpdj4nKwogICAgICAgICAgJzxkaXYgY2xhc3M9InQiPicrZXNjKGUudGl0dWxvKSsnPGJyPjxzcGFuIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmstZGltKTtmb250LXdlaWdodDo0MDA7Zm9udC1zaXplOjEzcHgiPicrZXNjKGUuaG9yYSkrKGRvbmU\/JyDCtyBwcmVzZW7Dp2EgY29uZmlybWFkYSc6dGVtQ2g\/JyDCtyBwYWxhdnJhLWNoYXZlIHJldmVsYWRhIGFvIHZpdm8gwrcgdmFsZSAnK1BUX0FVTEErJyBwdHMnOicgwrcgdHJhbnNtaXNzw6NvIGFvIHZpdm8gbm8gWW91VHViZScpKyc8L3NwYW4+PC9kaXY+JysKICAgICAgICAgICh0ZW1DaAogICAgICAgICAgICA\/ICc8YnV0dG9uIGNsYXNzPSJidG4gJysoZG9uZT8nYnRuLWdob3N0JzonYnRuLWFtYmVyJykrJyBidG4tc20iIGRhdGEtZ290bz0iYXVsYXMiPicrKGRvbmU\/J1ZlciBhdWxhJzonRmF6ZXIgY2hlY2staW4nKSsnPC9idXR0b24+JwogICAgICAgICAgICA6ICc8YSBjbGFzcz0iYnRuIGJ0bi1hbWJlciBidG4tc20iIGhyZWY9IicrKGUueXR8fCdodHRwczovL3d3dy55b3V0dWJlLmNvbS9AZXN0cmF0ZWdpYW1lZCcpKyciIHRhcmdldD0iX2JsYW5rIiByZWw9Im5vb3BlbmVyIj5Bc3Npc3RpciBhbyB2aXZvPC9hPicpKyc8L2Rpdj4nOwogICAgICB9KTsKICAgIH0gZWxzZSBpZiAocHJlRXN0cmVpYSkgewogICAgICAvLyBwcsOpLWVzdHJlaWEgKGF0w6kgYSBBdWxhIEluYXVndXJhbCk6IENBUlTDg08gREUgQk9BUy1WSU5EQVMgY29tIGEgdGh1bWIgZG8KICAgICAgLy8gZXZlbnRvICsgYSBtZW5zYWdlbSBkZSByZWNlcMOnw6NvIChwZWRpZG8gZG8gY29vcmRlbmFkb3IsIDEyLzA4KSArIG8gQ1RBCiAgICAgIC8vIGRvIGxlbWJyZXRlIE5BVElWTyBkbyBZb3VUdWJlLiBBIGRhdGEgYXBhcmVjZSBTw5MgYXF1aSAobyBjYWJlw6dhbGhvIG7Do28KICAgICAgLy8gcmVwZXRlLCBvIGNoaXAgbW9zdHJhIGEgY29udGFnZW0pIHByYSBuw6NvIG1hcnRlbGFyIDN4LgogICAgICAvLyBTw5MgYXBhcmVjZSBxdWFuZG8gYSBBdWxhIEluYXVndXJhbCBKw4EgdGVtIGxpbmsgZG8gWW91VHViZSAocHJveC55dCkuIFNlbQogICAgICAvLyBsaW5rIChleC46IFJldmFsaWRhIGVucXVhbnRvIGEgbGl2ZSBuw6NvIGV4aXN0ZSDigJQgcGVkaWRvIGRvIElnb3IgMTIvMDgpLCBvCiAgICAgIC8vIGNhcmQgZmljYSBkZSBmb3JhOiBuYWRhIGRlIHRodW1iIHZhemlhIG5lbSAiRGVmaW5pciBsZW1icmV0ZSIgcHJhIGx1Z2FyCiAgICAgIC8vIG5lbmh1bS4gVm9sdGEgc296aW5obyBxdWFuZG8gbyB5b3V0dWJlX3VybCBkbyBldmVudG8gZm9yIHByZWVuY2hpZG8uCiAgICAgIHZhciBwcm94ID0gai5ldmVudG9zLmZpbmQoZnVuY3Rpb24oZSl7IHJldHVybiBlLmRhdGEgPj0gaG9qZS5pc287IH0pIHx8IGouZXZlbnRvc1swXTsKICAgICAgaWYgKHByb3ggJiYgcHJveC55dCkgewogICAgICAgIHZhciBwcm94WXQgPSBwcm94Lnl0OwogICAgICAgIHZhciBwcm94VGh1bWIgPSB5dFRodW1iKHByb3hZdCk7CiAgICAgICAgdmFyIHByb3hUaXR1bG8gPSBwcm94LnRpdHVsby5zcGxpdCgnIMK3ICcpWzBdOwogICAgICAgIGJIb2plICs9ICc8ZGl2IGNsYXNzPSJzZWMtaCI+U3VhIGpvcm5hZGEgY29tZcOnYSBhcXVpPC9kaXY+JysKICAgICAgICAgICc8YXJ0aWNsZSBjbGFzcz0iY2FyZCBhZi13ZWxjb21lIj4nKwogICAgICAgICAgJzxkaXYgY2xhc3M9ImFmdy1tZWRpYSI+JysKICAgICAgICAgIChwcm94VGh1bWIgPyAnPGltZyBzcmM9IicrcHJveFRodW1iKyciIGFsdD0iJytlc2MocHJveFRpdHVsbykrJyIgbG9hZGluZz0ibGF6eSIgb25lcnJvcj0idGhpcy5zdHlsZS5kaXNwbGF5PVwnbm9uZVwnIj4nIDogJycpKwogICAgICAgICAgJzxzcGFuIGNsYXNzPSJhZnctYmFkZ2UiPicrZGF0YUJSKHByb3guZGF0YSkrJyDCtyAnK2VzYyhwcm94LmhvcmEpKyc8L3NwYW4+PC9kaXY+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJhZnctYm9keSI+JysKICAgICAgICAgICc8aDM+UXVlIGJvbSB0ZXIgdm9jw6ogbm8gQXRvIEZpbmFsITwvaDM+JysKICAgICAgICAgICc8cD5QYXJhYsOpbnMgcG9yIGFjZXNzYXIgYSBzdWEgw6FyZWEuIEEgcmV0YSBmaW5hbCBydW1vIGFvICcrQUZfQlJBTkQuY3VydGErJyBjb21lw6dhIG5hIDxiPicrZXNjKHByb3hUaXR1bG8pKyc8L2I+LCBkaWEgPGI+JytkYXRhQlIocHJveC5kYXRhKSsnLCDDoHMgJytlc2MocHJveC5ob3JhKSsnPC9iPiwgYW8gdml2byBubyBZb3VUdWJlLiBBdGl2ZSBvIGxlbWJyZXRlIHBhcmEgbsOjbyBwZXJkZXIgYSBlc3RyZWlhLjwvcD4nKwogICAgICAgICAgJzxhIGNsYXNzPSJidG4gYnRuLWFtYmVyIGJ0bi1zbSIgaHJlZj0iJytwcm94WXQrJyIgdGFyZ2V0PSJfYmxhbmsiIHJlbD0ibm9vcGVuZXIiPicrSUNPX1NJTk8rJyBEZWZpbmlyIGxlbWJyZXRlIG5vIFlvdVR1YmU8L2E+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJhZnctbm90YSI+TyBZb3VUdWJlIHRlIGF2aXNhIG5hIGhvcmEgZW0gcXVlIGEgdHJhbnNtaXNzw6NvIGVudHJhciBBTyBWSVZPLjwvZGl2PicrCiAgICAgICAgICAnPC9kaXY+PC9hcnRpY2xlPic7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGJIb2plICs9ICc8ZGl2IGNsYXNzPSJzZWMtaCI+SG9qZSBuYSBqb3JuYWRhPC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0iZGF5LWVtcHR5Ij5TZW0gdHJhbnNtaXNzw6NvIGhvamUuIFJlY3VwZXJlIHF1ZXN0w7VlcyBhdHJhc2FkYXMgb3UgcmV2ZWphIGFzIGdyYXZhw6fDtWVzLjwvZGl2Pic7CiAgICB9CgogICAgaWYgKGF0cmFzYWRhcykgewogICAgICBiSG9qZSArPSAnPGRpdiBjbGFzcz0ibXJvdyI+PGRpdiBjbGFzcz0iZGF0YSI+JythdHJhc2FkYXMrJzxzbWFsbD4nKyhhdHJhc2FkYXM9PT0xPydkaWEnOidkaWFzJykrJzwvc21hbGw+PC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0idCI+QXTDqSA8YiBzdHlsZT0iY29sb3I6dmFyKC0tYW1iZXIpIj4nKyhhdHJhc2FkYXMgKiBQVF9ESUEpKycgcHRzPC9iPiBlc3BlcmFuZG8gcG9yIHZvY8OqLiBRdWVzdMO1ZXMgYXRyYXNhZGFzIHZhbGVtIGlndWFsIGF0w6kgbyBlbmNlcnJhbWVudG8gZG8gR2FiYXJpdG8uPC9kaXY+JysKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciBidG4tc20iIGRhdGEtZ290bz0icXVlc3RvZXMiPlJlY3VwZXJhciBwb250b3M8L2J1dHRvbj48L2Rpdj4nOwogICAgfQoKICAgIC8vIFBvbnR1YcOnw6NvOiBzb21lIG5hIHByw6ktZXN0cmVpYSBlbnF1YW50byBvIHBsYWNhciDDqSB6ZXJvIChjYXJkIGRlIHplcm9zCiAgICAvLyBuw6NvIGluZm9ybWEgbmFkYSk7IHJlYXBhcmVjZSBhc3NpbSBxdWUgYSAxwqogaW5kaWNhw6fDo28gdmlyYSBwb250b3MKICAgIHZhciBiUHRzID0gKHByZUVzdHJlaWEgJiYgIXAudG90YWwpCiAgICAgID8gJycKICAgICAgOiAnPGRpdiBjbGFzcz0ic2VjLWgiPlN1YSBwb250dWHDp8OjbzwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjI2cHggMzBweCI+JysKICAgICAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjM4cHg7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOnZhcigtLWFtYmVyKSI+JytmbXRQdHMocC50b3RhbCkrJyA8c21hbGwgc3R5bGU9ImZvbnQtc2l6ZToxNXB4O2NvbG9yOnZhcigtLWluay1tdXRlKTtmb250LXdlaWdodDo2MDAiPnB0czwvc21hbGw+PC9kaXY+JysKICAgICAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1pbmstbXV0ZSk7bWFyZ2luLXRvcDoycHgiPmpvcm5hZGEgYXTDqSAnK2ZtdFB0cyhQT05UT1Muam9ybmFkYSkrJyBwdHMgKyBpbmRpY2HDp8O1ZXMgKHNlbSB0ZXRvKTwvZGl2PicrCiAgICAgICAgJzxkaXYgc3R5bGU9ImRpc3BsYXk6ZmxleDtnYXA6MjZweDtmbGV4LXdyYXA6d3JhcDttYXJnaW4tdG9wOjE0cHg7Zm9udC1zaXplOjE0cHg7Y29sb3I6dmFyKC0taW5rLWRpbSkiPicrCiAgICAgICAgJzxzcGFuPjxiIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmspIj5QcmVzZW7Dp2E8L2I+ICcrZm10UHRzKHAucHJlc2VuY2EpKycgLyAnK1BPTlRPUy5wcmVzZW5jYSsnPC9zcGFuPicrCiAgICAgICAgJzxzcGFuPjxiIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmspIj5RdWVzdMO1ZXM8L2I+ICcrZm10UHRzKHAubWlzc29lcykrJyAvICcrUE9OVE9TLm1pc3NvZXMrJzwvc3Bhbj4nKwogICAgICAgICc8c3Bhbj48YiBzdHlsZT0iY29sb3I6dmFyKC0taW5rKSI+U2ltdWxhZG8gRmluYWw8L2I+ICcrZm10UHRzKHAuc2ltdWxhZG8pKycgLyAnK1BPTlRPUy5zaW11bGFkbysnPC9zcGFuPicrCiAgICAgICAgJzxzcGFuPjxiIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmspIj5JbmRpY2HDp8O1ZXM8L2I+ICsnK2ZtdFB0cyhwLmluZGljYWNhbykrJyA8c21hbGwgc3R5bGU9ImNvbG9yOnZhcigtLWluay1tdXRlKSI+YsO0bnVzPC9zbWFsbD48L3NwYW4+PC9kaXY+JysKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGRhdGEtZ290bz0icmFua2luZyIgc3R5bGU9Im1hcmdpbi10b3A6MThweCI+VmVyIG1pbmhhIHBvc2nDp8OjbyBuYSBjbGFzc2lmaWNhw6fDo288L2J1dHRvbj48L2Rpdj4nOwoKICAgIC8vIE9SREVNIFBPUiBGQVNFCiAgICBodG1sICs9IHByZUVzdHJlaWEKICAgICAgLy8gYW50ZXMgZGUgMjYvMDg6IG8gVsONREVPIGRlIGJvYXMtdmluZGFzIHByaW1laXJvIChwZWRpZG8gZG8gSWdvciAxMy8wOCDigJQKICAgICAgLy8gcXVhbmRvIGV4aXN0ZTsgbm8gUmV2YWxpZGEgYlZpZGVvIMOpICcnIGUgc29tZSksIGRlcG9pcyAiQ29tbyB2YWkKICAgICAgLy8gZnVuY2lvbmFyIiwgbyBjYXJkIGRhIEF1bGEgSW5hdWd1cmFsIGUgYSBwb250ZSBleHRlcm5hIHBvciDDumx0aW1vCiAgICAgID8gYlZpZGVvICsgYkNvbW8gKyBiSG9qZSArIGJJbmQgKyBiUHRzICsgYkJxCiAgICAgIC8vIGR1cmFudGUgYSBqb3JuYWRhOiBob2plIOKGkiBwbGFjYXIg4oaSIGluZGljYcOnw7VlcyDihpIgcmVncmFzIHJlY29saGlkYXMKICAgICAgOiBiSG9qZSArIGJQdHMgKyBiSW5kICsgYlZpZGVvICsgYkNvbW87CgogICAgJCgnI21haW4nKS5pbm5lckhUTUwgPSBodG1sOwogICAgJCQoJ1tkYXRhLWdvdG9dJykuZm9yRWFjaChmdW5jdGlvbihiKXsKICAgICAgYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IGdvKGIuZGF0YXNldC5nb3RvKTsgfSk7CiAgICB9KTsKICAgIHZhciBiYyA9ICQoJyNpbmRDb3BpYXInKTsKICAgIGlmIChiYykgYmMuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICB2YXIgaW5wID0gJCgnI2luZExpbmsnKTsKICAgICAgdHJ5IHsgaW5wLnNlbGVjdCgpOyBpbnAuc2V0U2VsZWN0aW9uUmFuZ2UoMCwgOTk5KTsgZG9jdW1lbnQuZXhlY0NvbW1hbmQoJ2NvcHknKTsgfSBjYXRjaChlKXt9CiAgICAgIGlmIChuYXZpZ2F0b3IuY2xpcGJvYXJkICYmIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KSBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChpbnAudmFsdWUpLmNhdGNoKGZ1bmN0aW9uKCl7fSk7CiAgICAgIGJjLnRleHRDb250ZW50ID0gJ0NvcGlhZG8g4pyTJzsKICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyBiYy50ZXh0Q29udGVudCA9ICdDb3BpYXIgbGluayc7IH0sIDE4MDApOwogICAgICB0b2FzdCgnTGluayBjb3BpYWRvLiBDb21wYXJ0aWxoZSBjb20gb3MgYW1pZ29zIScpOwogICAgfSk7CiAgfQoKICAvKiAtLS0tLS0tLS0tIFFVRVNUw5VFUyAoaMOtYnJpZG86IGhlcm8gZGUgaG9qZSArIGxpc3RhcyBjb21wYWN0YXMpIC0tLS0tLS0tLS0gKi8KICBmdW5jdGlvbiByZW5kZXJRdWVzdG9lcygpewogICAgdmFyIHAgPSBjYWxjUG9udG9zKHVzZXIpOwogICAgdmFyIG1pc3MgPSBzdG9yZS5taXNzb2VzKHVzZXIuZW1haWwpOwogICAgdmFyIGxpYmVyYWRhcyA9IGouZXZlbnRvcy5maWx0ZXIoZnVuY3Rpb24oZSl7IHJldHVybiBlLnF1aXogJiYgKG1vZG9QcmV2aWV3KCkgfHwgZS5kYXRhIDw9IGhvamUuaXNvKTsgfSk7CiAgICB2YXIgZGVIb2plID0gbGliZXJhZGFzLmZpbHRlcihmdW5jdGlvbihlKXsgcmV0dXJuIGUuZGF0YSA9PT0gaG9qZS5pc287IH0pOwogICAgdmFyIGF0cmFzYWRhcyA9IGxpYmVyYWRhcy5maWx0ZXIoZnVuY3Rpb24oZSl7IHJldHVybiAobW9kb1ByZXZpZXcoKSA\/IGUuZGF0YSAhPT0gaG9qZS5pc28gOiBlLmRhdGEgPCBob2plLmlzbykgJiYgIW1pc3NbZS5pZF07IH0pCiAgICAgIC5zb3J0KGZ1bmN0aW9uKGEsYil7IHJldHVybiBhLmRhdGEgPCBiLmRhdGEgPyAxIDogLTE7IH0pOwogICAgdmFyIGN1bXByaWRhcyA9IGxpYmVyYWRhcy5maWx0ZXIoZnVuY3Rpb24oZSl7IHJldHVybiBtaXNzW2UuaWRdICYmIGUuZGF0YSAhPT0gaG9qZS5pc287IH0pCiAgICAgIC5zb3J0KGZ1bmN0aW9uKGEsYil7IHJldHVybiBhLmRhdGEgPCBiLmRhdGEgPyAxIDogLTE7IH0pOwogICAgdmFyIHB0c1Bvck1pc3NhbyA9IFBUX0RJQTsKICAgIHZhciBmYWx0YW0gPSBwLm5RdWl6emVzIC0gcC5uTWlzczsKCiAgICB2YXIgaHRtbCA9IHBhZ2VIZWFkKCdSZXNvbHZhIGUgcG9udHVlJywgJ1F1ZXN0w7VlcycsCiAgICAgICdVbSBibG9jbyBwb3IgYXVsYSwgbm8gcGFkcsOjbyBkYSBzdWEgcHJvdmE6IGNvcnJlw6fDo28gaW1lZGlhdGEgZSBnYWJhcml0byBjb21lbnRhZG8uJywKICAgICAgZm10UHRzKHAubWlzc29lcykgKyAnIC8gJyArIFBPTlRPUy5taXNzb2VzICsgJyBwdHMnKTsKICAgIGh0bWwgKz0gZGVtb0Jhbm5lcigpOwoKICAgIC8vIEJMT1FVRUlPIGF0w6kgbyBkaWEgZGEgMcKqIGF1bGEgY29tIHF1ZXN0w7VlcyAocGVkaWRvIGRvIElnb3IsIDEyLzA4KSDigJQgbWVzbWEKICAgIC8vIGxpbmd1YWdlbSBkbyBTaW11bGFkbzogYmxvY28gZGUgREFUQSBkZXN0YWNhZG8gKyBtZW5zYWdlbSwgc2VtIGEgbGlzdGEuCiAgICB2YXIgcHJpbWVpcm9RdWl6ID0gai5ldmVudG9zLmZpbmQoZnVuY3Rpb24oZSl7IHJldHVybiBlLnF1aXo7IH0pOwogICAgaWYgKHByaW1laXJvUXVpeiAmJiAhbW9kb1ByZXZpZXcoKSAmJiBob2plLmlzbyA8IHByaW1laXJvUXVpei5kYXRhKSB7CiAgICAgIHZhciBwcSA9IHByaW1laXJvUXVpei5kYXRhLnNwbGl0KCctJyk7CiAgICAgIHZhciBxRGF0YUV4dGVuc28gPSBwYXJzZUludChwcVsyXSwxMCkgKyAnIGRlICcgKyBNRVNFU19GVUxMW3BhcnNlSW50KHBxWzFdLDEwKS0xXTsKICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iY2FyZCBsb2NrZWQtY2FyZCI+JysKICAgICAgICAnPGRpdiBjbGFzcz0ic2ltLXF1YW5kbyI+JysKICAgICAgICAnPGRpdiBjbGFzcz0ic3EtaWNvIj4nK0lDT19QUk9WQSsnPC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0ic3EtdHh0Ij48ZGl2IGNsYXNzPSJzcS1sYWJlbCI+UXVhbmRvIGFicmVtPC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0ic3EtZGlhIj4nK3FEYXRhRXh0ZW5zbysnPC9kaXY+JysKICAgICAgICAnPGRpdiBjbGFzcz0ic3EtaG9yYSI+bm8gZGlhIGRlIGNhZGEgYXVsYSwgdW1hIG5vdmEgcm9kYWRhPC9kaXY+PC9kaXY+PC9kaXY+JysKICAgICAgICAnPHAgc3R5bGU9Im1hcmdpbi10b3A6MjBweCI+QXMgcXVlc3TDtWVzIGFicmVtIG5vIGRpYSBkZSBjYWRhIGF1bGEsIG5vIHBhZHLDo28gZGEgc3VhIHByb3ZhLCBjb20gY29ycmXDp8OjbyBuYSBob3JhLCBlIHZhbGVtIGF0w6kgJytQVF9ESUErJyBwdHMgcG9yIGRpYS4gQXTDqSBsw6EsIGdhcmFudGEgYSBzdWEgcHJlc2Vuw6dhIG5hcyB0cmFuc21pc3PDtWVzIGUgc29tZSBwb250b3MgbmEgc3VhIGNsYXNzaWZpY2HDp8Ojby48L3A+JysKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1hbWJlciBzaW0tYmxvcXVlYWRvIiB0eXBlPSJidXR0b24iIGRpc2FibGVkIGFyaWEtZGlzYWJsZWQ9InRydWUiPicrSUNPX0xPQ0srJyBBYnJlbSBlbSAnK2RhdGFCUihwcmltZWlyb1F1aXouZGF0YSkrJzwvYnV0dG9uPicrCiAgICAgICAgJzwvZGl2Pic7CiAgICAgICQoJyNtYWluJykuaW5uZXJIVE1MID0gaHRtbDsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjI2cHggMzBweDttYXJnaW4tYm90dG9tOjI2cHgiPicrCiAgICAgICc8ZGl2IGNsYXNzPSJraWNrZXIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjEwcHgiPkZhdGlhIGRlIHF1ZXN0w7VlczwvZGl2PicrCiAgICAgICc8ZGl2IHN0eWxlPSJmb250LXNpemU6MzhweDtmb250LXdlaWdodDo4MDA7Y29sb3I6dmFyKC0tYW1iZXIpIj4nK2ZtdFB0cyhwLm1pc3NvZXMpKycgPHNtYWxsIHN0eWxlPSJmb250LXNpemU6MTVweDtjb2xvcjp2YXIoLS1pbmstbXV0ZSk7Zm9udC13ZWlnaHQ6NjAwIj4vICcrUE9OVE9TLm1pc3NvZXMrJyBwdHMgwrcgJytwLm5NaXNzKycgZGUgJytwLm5RdWl6emVzKycgcmVzb2x2aWRhczwvc21hbGw+PC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9InByb2dyZXNzIj48ZGl2IGNsYXNzPSJmaWxsIiBzdHlsZT0id2lkdGg6JysocC5uTWlzcy9wLm5RdWl6emVzKjEwMCkrJyUiPjwvZGl2PjwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJwcm9ncmVzcy1ub3RlIj4nKyhmYWx0YW0gPiAwCiAgICAgICAgPyAnRmFsdGFtIDxiIHN0eWxlPSJjb2xvcjp2YXIoLS1hbWJlcikiPicrZmFsdGFtKycgJysoZmFsdGFtPT09MT8nZGlhJzonZGlhcycpKyc8L2I+IGRlIHF1ZXN0w7Vlcy4nCiAgICAgICAgOiAnVG9kYXMgYXMgcXVlc3TDtWVzIHJlc29sdmlkYXMuIEFnb3JhIGRlZmVuZGEgbm8gU2ltdWxhZG8uJykrJzwvZGl2PjwvZGl2Pic7CgogICAgdmFyIHBsYXkgPSAnPHN2ZyB3aWR0aD0iMTEiIGhlaWdodD0iMTEiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iY3VycmVudENvbG9yIj48cGF0aCBkPSJNNyA0bDEzIDgtMTMgOHoiLz48L3N2Zz4nOwoKICAgIGZ1bmN0aW9uIG1yb3coZSl7CiAgICAgIHZhciBkbSA9IGRpYU1lcyhlLmRhdGEpOwogICAgICB2YXIgbSA9IG1pc3NbZS5pZF07CiAgICAgIHZhciBuUHJvZyA9IG5SZXNwb3N0YXNFdmVudG8oZS5pZCk7CiAgICAgIHZhciBhY2FvID0gbQogICAgICAgID8gJzxzcGFuIGNsYXNzPSJyZXMiPicrbS5hY2VydG9zKycvJyttLnRvdGFsKycgwrcgKyAnKyhQVF9ESUFfUElTTyArIE1hdGgucm91bmQoUFRfRElBX0FDRVJUT1MqbS5hY2VydG9zL20udG90YWwpKSsnIHB0czwvc3Bhbj4nKwogICAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBkYXRhLXF1aXo9IicrZS5pZCsnIj5SZXZlcjwvYnV0dG9uPicKICAgICAgICA6ICc8c3BhbiBjbGFzcz0icmVzIiBzdHlsZT0iY29sb3I6dmFyKC0tYW1iZXIpIj5hdMOpICcrZm10UHRzKHB0c1Bvck1pc3NhbykrJyBwdHM8L3NwYW4+JysKICAgICAgICAgIChxdWl6RG9FdmVudG8oZSkubGVuZ3RoCiAgICAgICAgICAgID8gJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBkYXRhLXF1aXo9IicrZS5pZCsnIj4nKyhuUHJvZz8gJ0NvbnRpbnVhciAoJytuUHJvZysnIGRlICcrcXVpekRvRXZlbnRvKGUpLmxlbmd0aCsnKScgOiAobW9kb1ByZXZpZXcoKSA\/ICdSZXNvbHZlcicgOiAnUmVzb2x2ZXIgKGF0cmFzYWRhcyknKSkrJzwvYnV0dG9uPicKICAgICAgICAgICAgOiAnPHNwYW4gY2xhc3M9InJlcyIgc3R5bGU9ImNvbG9yOnZhcigtLWluay1tdXRlKSI+RW0gcHJlcGFyYcOnw6NvPC9zcGFuPicpOwogICAgICByZXR1cm4gJzxkaXYgY2xhc3M9Im1yb3cnKyhtPycgZG9uZSc6JycpKyciPjxkaXYgY2xhc3M9ImRhdGEiPicrZG0uZCsnPHNtYWxsPicrZG0ubSsnPC9zbWFsbD48L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJ0Ij4nK2VzYyhlLnRpdHVsbykrJzwvZGl2PicrYWNhbysnPC9kaXY+JzsKICAgIH0KCiAgICAvLyAxKSBNaXNzw6NvIGRlIGhvamU6IGNhcmQgaGVybwogICAgaWYgKCFsaWJlcmFkYXMubGVuZ3RoKSB7CiAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImNhcmQgbG9ja2VkLWNhcmQiPjxwPkFzIHF1ZXN0w7VlcyBhYnJlbSBqdW50byBjb20gYSBwcmltZWlyYSBhdWxhIGRhIGpvcm5hZGEuPC9wPjwvZGl2Pic7CiAgICB9IGVsc2UgaWYgKGRlSG9qZS5sZW5ndGgpIHsKICAgICAgZGVIb2plLmZvckVhY2goZnVuY3Rpb24oZSl7CiAgICAgICAgdmFyIG0gPSBtaXNzW2UuaWRdOwogICAgICAgIHZhciBwSXNvID0gZS5kYXRhLnNwbGl0KCctJyk7CiAgICAgICAgdmFyIGRhdGFMYWJlbCA9IHBhcnNlSW50KHBJc29bMl0sMTApKycgZGUgJytNRVNFU19GVUxMW3BhcnNlSW50KHBJc29bMV0sMTApLTFdOwogICAgICAgIHZhciB0aHVtYiA9IGUueXQKICAgICAgICAgID8gJzxpbWcgc3JjPSInK3l0VGh1bWIoZS55dCkrJyIgYWx0PSIiIGxvYWRpbmc9ImxhenkiIG9uZXJyb3I9InRoaXMucmVtb3ZlKCkiPicKICAgICAgICAgIDogJzxkaXYgY2xhc3M9ImZhbGwiPjxzdmcgd2lkdGg9IjQ0IiBoZWlnaHQ9IjQ0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjEuNiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj48Y2lyY2xlIGN4PSI5IiBjeT0iMTAiIHI9IjIuMiIvPjxjaXJjbGUgY3g9IjE1IiBjeT0iMTAiIHI9IjIuMiIvPjxwYXRoIGQ9Ik00IDIwYzAtNiAyLTEzIDgtMTNzOCA3IDggMTMiLz48cGF0aCBkPSJNOSA0bDMgMiAzLTIiLz48L3N2Zz48L2Rpdj4nOwogICAgICAgIGh0bWwgKz0gJzxhcnRpY2xlIGNsYXNzPSJjYXJkIGhlcm8tbWlzc2FvJysobT8nIGRvbmUnOicnKSsnIj4nKwogICAgICAgICAgJzxkaXYgY2xhc3M9ImV2LXRodW1iIj4nK3RodW1iKyc8c3BhbiBjbGFzcz0iZXYtYmFkZ2UiPicrcGxheSsnIFF1ZXN0w7VlcyBkZSBob2plPC9zcGFuPjwvZGl2PicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0iaG0tYm9keSI+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJobS1raWNrZXIiPicrKG0\/J1F1ZXN0w7VlcyBkZSBob2plIHJlc29sdmlkYXMnOidRdWVzdMO1ZXMgZGUgaG9qZScpKycgwrcgJytkYXRhTGFiZWwrJzwvZGl2PicrCiAgICAgICAgICAnPGgzPicrZXNjKGUudGl0dWxvKSsnPC9oMz4nKwogICAgICAgICAgKG0KICAgICAgICAgICAgPyAnPHAgY2xhc3M9ImhtLW5vdGUiPlZvY8OqIGZleiA8YiBzdHlsZT0iY29sb3I6dmFyKC0tZ3JlZW4pIj4nK20uYWNlcnRvcysnIGRlICcrbS50b3RhbCsnPC9iPiBlIHNvbW91IDxiIHN0eWxlPSJjb2xvcjp2YXIoLS1ncmVlbikiPicrKFBUX0RJQV9QSVNPICsgTWF0aC5yb3VuZChQVF9ESUFfQUNFUlRPUyptLmFjZXJ0b3MvbS50b3RhbCkpKycgcHRzPC9iPi4gVm9sdGUgYW1hbmjDoyBwYXJhIGFzIHByw7N4aW1hcy48L3A+JysKICAgICAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGRhdGEtcXVpej0iJytlLmlkKyciPlJldmVyIGdhYmFyaXRvPC9idXR0b24+JwogICAgICAgICAgICA6IChmdW5jdGlvbigpewogICAgICAgICAgICAgICAgdmFyIG5xID0gcXVpekRvRXZlbnRvKGUpLmxlbmd0aDsKICAgICAgICAgICAgICAgIHZhciBuUHJvZyA9IG5SZXNwb3N0YXNFdmVudG8oZS5pZCk7CiAgICAgICAgICAgICAgICByZXR1cm4gJzxwIGNsYXNzPSJobS1ub3RlIj4nK25xKycgcXVlc3TDtWVzIG5vIHBhZHLDo28gZGEgc3VhIHByb3ZhLCBjb3JyZcOnw6NvIGltZWRpYXRhIHF1ZXN0w6NvIGEgcXVlc3TDo28uIENvbmNsdWlyIG8gZGlhIGdhcmFudGUgPGIgc3R5bGU9ImNvbG9yOnZhcigtLWFtYmVyKSI+JytmbXRQdHMoMC40KnB0c1Bvck1pc3NhbykrJyBwdHM8L2I+IGUgb3MgYWNlcnRvcyBjb21wbGV0YW0gYXTDqSA8YiBzdHlsZT0iY29sb3I6dmFyKC0tYW1iZXIpIj4nK2ZtdFB0cyhwdHNQb3JNaXNzYW8pKyc8L2I+LjwvcD4nKwogICAgICAgICAgICAgICAgICAobnEKICAgICAgICAgICAgICAgICAgICA\/ICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIiBkYXRhLXF1aXo9IicrZS5pZCsnIj4nKyhuUHJvZz8gJ0NvbnRpbnVhciBkZSBvbmRlIHBhcm91ICgnK25Qcm9nKycgZGUgJytucSsnKScgOiAnUmVzb2x2ZXIgYXMgcXVlc3TDtWVzIGRlIGhvamUnKSsnPC9idXR0b24+JwogICAgICAgICAgICAgICAgICAgIDogJzxzcGFuIGNsYXNzPSJzdGF0ZS10YWcgc3RhdGUtd2FpdCI+UXVlc3TDtWVzIGRlc3RlIGRpYSBlbSBwcmVwYXJhw6fDo288L3NwYW4+Jyk7CiAgICAgICAgICAgICAgfSkoKSkrCiAgICAgICAgICAnPC9kaXY+PC9hcnRpY2xlPic7CiAgICAgIH0pOwogICAgfSBlbHNlIHsKICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iZGF5LWVtcHR5Ij5Ib2plIG7Do28gdGVtIHF1ZXN0w7VlcyBub3Zhcy4gJysoYXRyYXNhZGFzLmxlbmd0aD8nQXByb3ZlaXRlIHBhcmEgcmVjdXBlcmFyIGFzIHBlbmRlbnRlcyBhYmFpeG8uJzonQm9tIGRlc2NhbnNvLCBhIGpvcm5hZGEgY29udGludWEgYW1hbmjDoy4nKSsnPC9kaXY+JzsKICAgIH0KCiAgICAvLyAyKSBBdHJhc2FkYXM6IGxpc3RhIGRlIHJlY3VwZXJhw6fDo28KICAgIGlmIChhdHJhc2FkYXMubGVuZ3RoKSB7CiAgICAgIGh0bWwgKz0gbW9kb1ByZXZpZXcoKQogICAgICAgID8gJzxkaXYgY2xhc3M9InNlYy1oIj5Ub2RvcyBvcyBkaWFzIGxpYmVyYWRvcyA8c3BhbiBjbGFzcz0iY250Ij4nK2F0cmFzYWRhcy5sZW5ndGgrJyBwYXJhIHZhbGlkYXI8L3NwYW4+PC9kaXY+JwogICAgICAgIDogJzxkaXYgY2xhc3M9InNlYy1oIj5SZWN1cGVyZSBwb250b3MgPHNwYW4gY2xhc3M9ImNudCI+JythdHJhc2FkYXMubGVuZ3RoKycgcGVuZGVudGUnKyhhdHJhc2FkYXMubGVuZ3RoPjE\/J3MnOicnKSsnPC9zcGFuPjwvZGl2Pic7CiAgICAgIGF0cmFzYWRhcy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyBodG1sICs9IG1yb3coZSk7IH0pOwogICAgfQoKICAgIC8vIDMpIEN1bXByaWRhczogaGlzdMOzcmljbyBkaXNjcmV0bwogICAgaWYgKGN1bXByaWRhcy5sZW5ndGgpIHsKICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0ic2VjLWgiPkN1bXByaWRhcyA8c3BhbiBjbGFzcz0iY250IGciPicrY3VtcHJpZGFzLmxlbmd0aCsnPC9zcGFuPjwvZGl2Pic7CiAgICAgIGN1bXByaWRhcy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyBodG1sICs9IG1yb3coZSk7IH0pOwogICAgfQoKICAgICQoJyNtYWluJykuaW5uZXJIVE1MID0gaHRtbDsKICAgICQkKCdbZGF0YS1xdWl6XScpLmZvckVhY2goZnVuY3Rpb24oYil7CiAgICAgIGIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyByZW5kZXJRdWl6KGIuZGF0YXNldC5xdWl6KTsgfSk7CiAgICB9KTsKICB9CgogIGZ1bmN0aW9uIHJlbmRlclF1aXooZXZJZCl7CiAgICB2YXIgZSA9IGouZXZlbnRvcy5maW5kKGZ1bmN0aW9uKHgpeyByZXR1cm4geC5pZCA9PT0gZXZJZDsgfSk7CiAgICB2YXIgcXMgPSBxdWl6RG9FdmVudG8oZSk7CiAgICBpZiAoIXFzLmxlbmd0aCkgewogICAgICAvLyBkaWEgYWluZGEgc2VtIHF1ZXN0w7VlcyBjYXJyZWdhZGFzOiBlc3RhZG8gaW5mb3JtYXRpdm8sIG51bmNhIHRlbGEgbW9ydGEKICAgICAgJCgnI21haW4nKS5pbm5lckhUTUwgPSAnPGRpdiBjbGFzcz0icGFnZS1oZWFkIj48ZGl2PicrCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBpZD0iYnRuVm9sdGFyIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNnB4Ij5Wb2x0YXIgw6BzIHF1ZXN0w7VlczwvYnV0dG9uPicrCiAgICAgICAgJzxzcGFuIGNsYXNzPSJraWNrZXIiPlF1ZXN0w7VlcyBkbyBkaWE8L3NwYW4+PGgxIHN0eWxlPSJmb250LXNpemU6MjJweCI+Jytlc2MoZS50aXR1bG8pKyc8L2gxPjwvZGl2PjwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9ImNhcmQgbG9ja2VkLWNhcmQiPjxoMyBzdHlsZT0ibWFyZ2luLWJvdHRvbTo4cHgiPlF1ZXN0w7VlcyBlbSBwcmVwYXJhw6fDo288L2gzPicrCiAgICAgICAgJzxwPkFzIHF1ZXN0w7VlcyBkZXN0ZSBkaWEgZXN0w6NvIHNlbmRvIGZpbmFsaXphZGFzIHBlbG9zIHByb2Zlc3NvcmVzIGUgYXBhcmVjZW0gYXF1aSBhbnRlcyBkYSBhdWxhLiBFbnF1YW50byBpc3NvLCByZXNvbHZhIG9zIGRpYXMgasOhIGxpYmVyYWRvcy48L3A+PC9kaXY+JzsKICAgICAgJCgnI2J0blZvbHRhcicpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgcmVuZGVyUXVlc3RvZXMpOwogICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7CiAgICAgIHJldHVybjsKICAgIH0KICAgIC8vIFBST0RVw4fDg086IG8gcHJvZ3Jlc3NvIMOpIG8gY29uanVudG8gZGUgcmVzcG9zdGFzIErDgSBHUkFWQURBUyBubyBzZXJ2aWRvcgogICAgLy8gKENBQ0hFLnJlc3Bvc3RhcywgcG9yIHF1ZXN0YW9faWQpIOKAlCB2YWxlIGVtIHF1YWxxdWVyIGFwYXJlbGhvLiBPIGdhYmFyaXRvCiAgICAvLyBlIG8gY29tZW50w6FyaW8gc8OzIGV4aXN0ZW0gbm8gY2xpZW50ZSBERVBPSVMgZGUgcmVzcG9uZGVyIChzZWdyZWRvIG5vIGJhbmNvKS4KICAgIGZ1bmN0aW9uIHJlc3AoaSl7IHJldHVybiBxc1tpXSA\/IENBQ0hFLnJlc3Bvc3Rhc1txc1tpXS5pZF0gOiB1bmRlZmluZWQ7IH0KICAgIGZ1bmN0aW9uIG5SZXNwKCl7IHZhciBuID0gMDsgcXMuZm9yRWFjaChmdW5jdGlvbihfLCBpKXsgaWYgKHJlc3AoaSkpIG4rKzsgfSk7IHJldHVybiBuOyB9CiAgICBmdW5jdGlvbiBhY2VydG9zKCl7IHZhciBuID0gMDsgcXMuZm9yRWFjaChmdW5jdGlvbihfLCBpKXsgdmFyIHIgPSByZXNwKGkpOyBpZiAociAmJiByLmFjZXJ0b3UpIG4rKzsgfSk7IHJldHVybiBuOyB9CiAgICBmdW5jdGlvbiBjb21wbGV0bygpeyByZXR1cm4gcXMubGVuZ3RoID4gMCAmJiBuUmVzcCgpID49IHFzLmxlbmd0aDsgfQogICAgZnVuY3Rpb24gbGV0cmFMYWJlbChxLCB2KXsgcmV0dXJuIHEuYWx0cyA\/IHYgOiAodiA9PT0gJ0MnID8gJ0NlcnRvJyA6ICdFcnJhZG8nKTsgfQoKICAgIHZhciBhdHVhbCA9IDA7CiAgICB3aGlsZSAoYXR1YWwgPCBxcy5sZW5ndGggJiYgcmVzcChhdHVhbCkpIGF0dWFsKys7CiAgICBpZiAoYXR1YWwgPj0gcXMubGVuZ3RoKSBhdHVhbCA9IDA7CgogICAgZnVuY3Rpb24gY29tZW50YXJpb0hUTUwoaSl7CiAgICAgIHZhciBxID0gcXNbaV0sIHIgPSByZXNwKGkpOwogICAgICBpZiAoIXIgfHwgIXIuY29tZW50YXJpbykgcmV0dXJuICcnOwogICAgICByZXR1cm4gJzxkZXRhaWxzIGNsYXNzPSJxdWl6LWNvbWVudCI+PHN1bW1hcnk+R2FiYXJpdG86ICcrbGV0cmFMYWJlbChxLCByLmNvcnJldGEpKycgwrcgVmVyIGNvbWVudMOhcmlvPC9zdW1tYXJ5PicrCiAgICAgICAgJzxkaXYgY2xhc3M9ImNib2R5Ij4nK21pZGlhSFRNTChyLmNvbWVudGFyaW8pKyc8L2Rpdj48L2RldGFpbHM+JzsKICAgIH0KCiAgICBmdW5jdGlvbiBuYXZIVE1MKCl7CiAgICAgIHJldHVybiAnPGRpdiBjbGFzcz0icW5hdiI+Jytxcy5tYXAoZnVuY3Rpb24ocSwgaSl7CiAgICAgICAgdmFyIGNscyA9ICdxbicgKyAoaSA9PT0gYXR1YWwgPyAnIGN1cicgOiAnJyk7CiAgICAgICAgdmFyIHIgPSByZXNwKGkpOwogICAgICAgIGlmIChyKSBjbHMgKz0gci5hY2VydG91ID8gJyBvaycgOiAnIGVycic7CiAgICAgICAgcmV0dXJuICc8YnV0dG9uIGNsYXNzPSInK2NscysnIiBkYXRhLW5xPSInK2krJyIgYXJpYS1sYWJlbD0iSXIgcGFyYSBhIHF1ZXN0w6NvICcrKGkrMSkrJyI+JysoaSsxKSsnPC9idXR0b24+JzsKICAgICAgfSkuam9pbignJykrJzwvZGl2Pic7CiAgICB9CgogICAgZnVuY3Rpb24gcmVzdW1vSFRNTCgpewogICAgICB2YXIgYWMgPSBhY2VydG9zKCksIHRvdCA9IHFzLmxlbmd0aDsKICAgICAgdmFyIHB0cyA9IFBUX0RJQV9QSVNPICsgTWF0aC5yb3VuZChQVF9ESUFfQUNFUlRPUyAqIGFjIC8gdG90KTsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJxdWl6LXJlc3VsdCIgc3R5bGU9Im1hcmdpbi1ib3R0b206MjBweCI+UmVzb2x2aWRvOiA8Yj4nK2FjKycgZGUgJyt0b3QrJzwvYj4gwrcgPGI+JytmbXRQdHMocHRzKSsnIHB0czwvYj4gbmEgY2xhc3NpZmljYcOnw6NvLiAnKwogICAgICAgICdObyBtYXBhOiB2ZXJkZSDDqSBvIGdhYmFyaXRvLCB2ZXJtZWxobyDDqSBvbmRlIHZvY8OqIGVycm91LjwvZGl2Pic7CiAgICB9CgogICAgZnVuY3Rpb24gcXVlc3Rhb0hUTUwoaSl7CiAgICAgIHZhciBxID0gcXNbaV0sIHIgPSByZXNwKGkpOwogICAgICB2YXIgYnRuID0gZnVuY3Rpb24odiwgcm90dWxvLCBsdCl7CiAgICAgICAgdmFyIGNscyA9ICcnOwogICAgICAgIGlmIChyKSB7CiAgICAgICAgICBpZiAodiA9PT0gci5jb3JyZXRhKSBjbHMgPSAnIGNsYXNzPSJoaXQiJzsKICAgICAgICAgIGVsc2UgaWYgKHYgPT09IHIubGV0cmEpIGNscyA9ICcgY2xhc3M9ImVycmFkbyInOwogICAgICAgIH0KICAgICAgICByZXR1cm4gJzxidXR0b24gdHlwZT0iYnV0dG9uIicrY2xzKycgZGF0YS12PSInK3YrJyInKyhyID8gJyBkaXNhYmxlZCcgOiAnJykrJz4nKwogICAgICAgICAgKGx0ID8gJzxiIGNsYXNzPSJsdCI+JytsdCsnPC9iPjxzcGFuPicrZXNjKHJvdHVsbykrJzwvc3Bhbj4nIDogcm90dWxvKSsnPC9idXR0b24+JzsKICAgICAgfTsKICAgICAgdmFyIG9wdHMgPSBxLmFsdHMKICAgICAgICA\/IHEuYWx0cy5tYXAoZnVuY3Rpb24oYSl7IHJldHVybiBidG4oYS5sLCBhLnQsIGEubCk7IH0pLmpvaW4oJycpCiAgICAgICAgOiBidG4oJ0MnLCAnQ2VydG8nKSArIGJ0bignRScsICdFcnJhZG8nKTsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJxdWl6LXEiIGRhdGEtcT0iJytpKyciPjxkaXYgY2xhc3M9InFoZWFkIj5RdWVzdMOjbyAnKyhpKzEpKycgZGUgJytxcy5sZW5ndGgrJzwvZGl2PicrCiAgICAgICAgJzxwIGNsYXNzPSJlbnVuIj4nK21pZGlhSFRNTChxLnEpKyc8L3A+JysKICAgICAgICAnPGRpdiBjbGFzcz0icXVpei1vcHRzJysocS5hbHRzID8gJyBtdWx0JyA6ICcnKSsnIj4nK29wdHMrJzwvZGl2PicrCiAgICAgICAgY29tZW50YXJpb0hUTUwoaSkrCiAgICAgICAgJzwvZGl2Pic7CiAgICB9CgogICAgZnVuY3Rpb24gcHJveEluZGljZSgpewogICAgICBpZiAoIWNvbXBsZXRvKCkpIHsKICAgICAgICBmb3IgKHZhciBrID0gMTsgayA8PSBxcy5sZW5ndGg7IGsrKykgewogICAgICAgICAgdmFyIGkyID0gKGF0dWFsICsgaykgJSBxcy5sZW5ndGg7CiAgICAgICAgICBpZiAoIXJlc3AoaTIpKSByZXR1cm4gaTI7CiAgICAgICAgfQogICAgICAgIHJldHVybiAtMTsKICAgICAgfQogICAgICByZXR1cm4gYXR1YWwgKyAxIDwgcXMubGVuZ3RoID8gYXR1YWwgKyAxIDogLTE7CiAgICB9CgogICAgZnVuY3Rpb24gY3RybEhUTUwoKXsKICAgICAgdmFyIHByb3ggPSBwcm94SW5kaWNlKCk7CiAgICAgIHZhciBhYyA9IGFjZXJ0b3MoKTsKICAgICAgcmV0dXJuICc8ZGl2IGNsYXNzPSJxY3RybCI+JysKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGlkPSJxQW50IicrKGF0dWFsID09PSAwID8gJyBkaXNhYmxlZCcgOiAnJykrJz5BbnRlcmlvcjwvYnV0dG9uPicrCiAgICAgICAgJzxzcGFuIGNsYXNzPSJxbGluZSI+PGI+JytuUmVzcCgpKyc8L2I+IGRlICcrcXMubGVuZ3RoKycgcmVzcG9uZGlkYXMgwrcgPGIgY2xhc3M9Im9rIj4nK2FjKyc8L2I+ICcrKGFjID09PSAxID8gJ2FjZXJ0bycgOiAnYWNlcnRvcycpKyc8L3NwYW4+JysKICAgICAgICAocHJveCA+PSAwCiAgICAgICAgICA\/ICc8YnV0dG9uIGNsYXNzPSJidG4gJysocmVzcChhdHVhbCkgPyAnYnRuLWFtYmVyJyA6ICdidG4tZ2hvc3QnKSsnIGJ0bi1zbSIgaWQ9InFQcm94Ij5QcsOzeGltYSBxdWVzdMOjbzwvYnV0dG9uPicKICAgICAgICAgIDogJzxzcGFuIHN0eWxlPSJ3aWR0aDo4OHB4Ij48L3NwYW4+JykrCiAgICAgICAgJzwvZGl2Pic7CiAgICB9CgogICAgZnVuY3Rpb24gcmVuZGVyKCl7CiAgICAgIHZhciBodG1sID0gJzxkaXYgY2xhc3M9InBhZ2UtaGVhZCI+PGRpdj4nKwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgaWQ9ImJ0blZvbHRhciIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTZweCI+Vm9sdGFyIMOgcyBxdWVzdMO1ZXM8L2J1dHRvbj4nKwogICAgICAgICc8c3BhbiBjbGFzcz0ia2lja2VyIj5RdWVzdMO1ZXMgZG8gZGlhPC9zcGFuPjxoMSBzdHlsZT0iZm9udC1zaXplOjIycHgiPicrZXNjKGUudGl0dWxvKSsnPC9oMT4nKwogICAgICAgICc8cCBjbGFzcz0iZGVzYyI+VW1hIHF1ZXN0w6NvIHBvciB2ZXosIGNvbSBjb3JyZcOnw6NvIGltZWRpYXRhOiBhbyBtYXJjYXIsIGEgYWx0ZXJuYXRpdmEgdHJhdmEgZSBvIGdhYmFyaXRvIGFwYXJlY2UgY29tIG8gY29tZW50w6FyaW8gZG8gcHJvZmVzc29yLiBVc2UgbyBtYXBhIHBhcmEgbmF2ZWdhcjsgcG9kZSBzYWlyIGUgdm9sdGFyLCBvIHByb2dyZXNzbyBmaWNhIHNhbHZvIG5hIHN1YSBjb250YS48L3A+PC9kaXY+PC9kaXY+JzsKICAgICAgaWYgKGNvbXBsZXRvKCkpIGh0bWwgKz0gcmVzdW1vSFRNTCgpOwogICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJjYXJkIHF1aXotYm94Ij4nK25hdkhUTUwoKStxdWVzdGFvSFRNTChhdHVhbCkrY3RybEhUTUwoKSsnPC9kaXY+JzsKICAgICAgJCgnI21haW4nKS5pbm5lckhUTUwgPSBodG1sOwogICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7CgogICAgICAkKCcjYnRuVm9sdGFyJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW5kZXJRdWVzdG9lcyk7CiAgICAgICQkKCcucW5hdiAucW4nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpewogICAgICAgIGIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBhdHVhbCA9ICtiLmRhdGFzZXQubnE7IHJlbmRlcigpOyB9KTsKICAgICAgfSk7CiAgICAgIHZhciBhbnQgPSAkKCcjcUFudCcpOwogICAgICBpZiAoYW50KSBhbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBpZiAoYXR1YWwgPiAwKSB7IGF0dWFsLS07IHJlbmRlcigpOyB9IH0pOwogICAgICB2YXIgcHggPSAkKCcjcVByb3gnKTsKICAgICAgaWYgKHB4KSBweC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICAgICAgdmFyIHAyID0gcHJveEluZGljZSgpOwogICAgICAgIGlmIChwMiA+PSAwKSB7IGF0dWFsID0gcDI7IHJlbmRlcigpOyB9CiAgICAgIH0pOwogICAgICBpZiAoIXJlc3AoYXR1YWwpKSB7CiAgICAgICAgJCQoJy5xdWl6LW9wdHMgYnV0dG9uJykuZm9yRWFjaChmdW5jdGlvbihiKXsKICAgICAgICAgIGIuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpewogICAgICAgICAgICB2YXIgaSA9IGF0dWFsLCBxID0gcXNbaV07CiAgICAgICAgICAgICQkKCcucXVpei1vcHRzIGJ1dHRvbicpLmZvckVhY2goZnVuY3Rpb24oeCl7IHguZGlzYWJsZWQgPSB0cnVlOyB9KTsKICAgICAgICAgICAgc2JScGMoJ3Jlc3BvbmRlcl9xdWVzdGFvJywgeyBwX2NwZjogQ0FDSEUudXNlci5jcGYsIHBfcXVlc3RhbzogcS5pZCwgcF9sZXRyYTogYi5kYXRhc2V0LnYgfSkKICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihycil7CiAgICAgICAgICAgICAgICBpZiAocnIuc3RhdHVzID09PSAnb2snKSB7CiAgICAgICAgICAgICAgICAgIENBQ0hFLnJlc3Bvc3Rhc1txLmlkXSA9IHsgZXZlbnRvX2lkOiBldklkLCBsZXRyYTogYi5kYXRhc2V0LnYsCiAgICAgICAgICAgICAgICAgICAgYWNlcnRvdTogcnIuYWNlcnRvdSwgY29ycmV0YTogcnIuY29ycmV0YSwgY29tZW50YXJpbzogcnIuY29tZW50YXJpbyB9OwogICAgICAgICAgICAgICAgICBpZiAoY29tcGxldG8oKSkgdG9hc3QoJ1F1ZXN0w7VlcyBkbyBkaWEgY29uY2x1w61kYXM6ICcrYWNlcnRvcygpKycvJytxcy5sZW5ndGgpOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyci5zdGF0dXMgPT09ICdqYV9yZXNwb25kaWRhJykgewogICAgICAgICAgICAgICAgICB0b2FzdCgnRXN0YSBxdWVzdMOjbyBqw6EgZm9pIHJlc3BvbmRpZGEgZW0gb3V0cm8gYWNlc3NvLiBBdHVhbGl6YW5kb+KApicpOwogICAgICAgICAgICAgICAgICBoaWRyYXRhcigpLnRoZW4ocmVuZGVyKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyci5zdGF0dXMgPT09ICdldmVudG9fZnV0dXJvJykgewogICAgICAgICAgICAgICAgICB0b2FzdCgnQXMgcXVlc3TDtWVzIGRlc3RlIGRpYSBhYnJlbSBuYSBkYXRhIGRhIGF1bGEuJyk7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICB0b2FzdCgnTsOjbyBmb2kgcG9zc8OtdmVsIHJlZ2lzdHJhci4gVGVudGUgbm92YW1lbnRlLicpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgcmVuZGVyKCk7CiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICAuY2F0Y2goZnVuY3Rpb24oKXsgdG9hc3QoJ1NlbSBjb25leMOjby4gQSByZXNwb3N0YSBuw6NvIGZvaSByZWdpc3RyYWRhLicpOyByZW5kZXIoKTsgfSk7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQoKICAgIHJlbmRlcigpOwogIH0KCiAgLyogLS0tLS0tLS0tLSBTSU1VTEFETyBGSU5BTCDCtyBQUk9EVcOHw4NPIChwcm92YSDDum5pY2EsIHNlcnZpZG9yIG1hbmRhKSAtLS0tLS0tLS0tICovCiAgLy8gRXNwZWxobyB2aXN1YWwgZGEgamFuZWxhIG9maWNpYWwgKG8gc2Vydmlkb3IgUkVWQUxJREEgdHVkbyBlbSBzaW11bGFkb19jb25maWcpCiAgdmFyIFNJTV9KQU5FTEEgPSB7IGRhdGE6ICcyMDI2LTA5LTA2JywgYWJyZTogJzE0OjAwJywgZmVjaGE6ICcxOTowMCcsIGR1cmFjYW9NaW46IDMwMCB9OwogIGZ1bmN0aW9uIHNpbUFnb3JhQlJUKCl7IHJldHVybiBuZXcgRGF0ZShuZXcgRGF0ZSgpLnRvTG9jYWxlU3RyaW5nKCdlbi1VUycsIHsgdGltZVpvbmU6ICdBbWVyaWNhL1Nhb19QYXVsbycgfSkpOyB9CiAgZnVuY3Rpb24gc2ltQWJyZVRzKCl7IHJldHVybiBuZXcgRGF0ZShTSU1fSkFORUxBLmRhdGEgKyAnVCcgKyBTSU1fSkFORUxBLmFicmUgKyAnOjAwLTAzOjAwJykuZ2V0VGltZSgpOyB9CiAgZnVuY3Rpb24gc2ltRmVjaGFUcygpeyByZXR1cm4gbmV3IERhdGUoU0lNX0pBTkVMQS5kYXRhICsgJ1QnICsgU0lNX0pBTkVMQS5mZWNoYSArICc6MDAtMDM6MDAnKS5nZXRUaW1lKCk7IH0KICBmdW5jdGlvbiBzaW1HYWJhcml0b0xpYmVyYWRvKCl7IHJldHVybiBtb2RvUHJldmlldygpIHx8IERhdGUubm93KCkgPiBzaW1GZWNoYVRzKCk7IH0KICB2YXIgSUNPX0xPQ0sgPSAnPHN2ZyB3aWR0aD0iMTUiIGhlaWdodD0iMTUiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMi4yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjotMnB4Ij48cmVjdCB4PSI1IiB5PSIxMSIgd2lkdGg9IjE0IiBoZWlnaHQ9IjEwIiByeD0iMiIvPjxwYXRoIGQ9Ik04IDExVjdhNCA0IDAgMDE4IDB2NCIvPjwvc3ZnPic7CgogIGZ1bmN0aW9uIHJlbmRlclNpbXVsYWRvKCl7CiAgICB2YXIgcCA9IGNhbGNQb250b3ModXNlcik7CiAgICB2YXIgY2ZnID0gU0lNX0NGR1t1c2VyLnByb3ZhXSB8fCBTSU1fQ0ZHLmVuYW1lZDsKICAgIHZhciBldlNpbSA9IGouZXZlbnRvcy5maW5kKGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5pZCA9PT0gai5zaW11bGFkb0lkOyB9KTsKICAgIHZhciBodG1sID0gcGFnZUhlYWQoJ1NpbXVsYWRvIEZpbmFsIMK3ICcgKyBkYXRhQlIoZXZTaW0uZGF0YSksICdTaW11bGFkbyBGaW5hbCcsCiAgICAgICdQcm92YSDDum5pY2EgbmEgcGxhdGFmb3JtYTogNyBwdHMgcG9yIGFjZXJ0bywgYXTDqSA3MDAuIEdhYmFyaXRvIGNvbWVudGFkbyBhcMOzcyBvIGVuY2VycmFtZW50by4nLAogICAgICAnNzAwIHB0cyBlbSBqb2dvJyk7CgogICAgdmFyIGNoaXBzID0gJzxkaXYgY2xhc3M9InNpbS1jaGlwcyI+JysKICAgICAgJzxzcGFuPicrY2ZnLnF1ZXN0b2VzKycgcXVlc3TDtWVzPC9zcGFuPicrCiAgICAgICc8c3Bhbj40IGFsdGVybmF0aXZhczwvc3Bhbj4nKwogICAgICAnPHNwYW4+cXVlc3TDtWVzIGluw6lkaXRhczwvc3Bhbj4nKwogICAgICAnPHNwYW4+cHJvZmVzc29yZXMgZXNwZWNpYWxpc3Rhczwvc3Bhbj48L2Rpdj4nOwoKICAgIGlmIChDQUNIRS5zaW1SZXMpIHsKICAgICAgdmFyIHJlcyA9IENBQ0hFLnNpbVJlczsKICAgICAgaWYgKHNpbUdhYmFyaXRvTGliZXJhZG8oKSkgewogICAgICAgIHZhciBub3RhID0gTWF0aC5yb3VuZCgxMDAgKiByZXMuYWNlcnRvcyAvIE1hdGgubWF4KDEsIHJlcy50b3RhbCkpOwogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjQwcHg7dGV4dC1hbGlnbjpjZW50ZXIiPicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0ia2lja2VyIGNlbnRlciIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTRweCI+U2ltdWxhZG8gY29uY2x1w61kbzwvZGl2PicrCiAgICAgICAgICAnPGRpdiBzdHlsZT0iZm9udC1zaXplOjU0cHg7Zm9udC13ZWlnaHQ6ODAwO2NvbG9yOnZhcigtLWFtYmVyKSI+Jytub3RhKyclPC9kaXY+JysKICAgICAgICAgICc8cCBzdHlsZT0iY29sb3I6dmFyKC0taW5rLWRpbSk7bWFyZ2luOjhweCAwIDRweCI+JytyZXMuYWNlcnRvcysnIGRlICcrcmVzLnRvdGFsKycgcXVlc3TDtWVzIMK3IGFjZXJ0b3Mgbm8gU2ltdWxhZG8gRmluYWw8L3A+JysKICAgICAgICAgICc8cCBzdHlsZT0iZm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLWdyZWVuKSI+KyAnK2ZtdFB0cyhwLnNpbXVsYWRvKSsnIHB0cyBuYSBjbGFzc2lmaWNhw6fDo288L3A+JysKICAgICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIiBpZD0iYnRuR2FiYXJpdG8iIHN0eWxlPSJtYXJnaW4tdG9wOjIwcHgiPlZlciBnYWJhcml0byBjb21lbnRhZG88L2J1dHRvbj4nKwogICAgICAgICAgJzwvZGl2Pic7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gcmVzdWx0YWRvIFJFVElETyBhdMOpIG8gZW5jZXJyYW1lbnRvOiBzw7MgYSBjb25maXJtYcOnw6NvIGRvIHByZWVuY2hpbWVudG8KICAgICAgICB2YXIgcHJlZW5jaGlkYXMgPSBPYmplY3Qua2V5cyhyZXMucmVzcG9zdGFzIHx8IHt9KS5sZW5ndGg7CiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iY2FyZCIgc3R5bGU9InBhZGRpbmc6NDBweDt0ZXh0LWFsaWduOmNlbnRlciI+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJraWNrZXIgY2VudGVyIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNHB4Ij5Qcm92YSBlbnZpYWRhPC9kaXY+JysKICAgICAgICAgICc8cCBzdHlsZT0iZm9udC1zaXplOjE3cHg7Zm9udC13ZWlnaHQ6NzAwO21hcmdpbi1ib3R0b206NnB4Ij5TZXUgU2ltdWxhZG8gRmluYWwgZm9pIHJlZ2lzdHJhZG8uPC9wPicrCiAgICAgICAgICAnPHAgc3R5bGU9ImNvbG9yOnZhcigtLWluay1kaW0pIj5Wb2PDqiBwcmVlbmNoZXUgPGI+JytwcmVlbmNoaWRhcysnIGRlICcrcmVzLnRvdGFsKyc8L2I+IHF1ZXN0w7Vlcy48L3A+JysKICAgICAgICAgICc8cCBzdHlsZT0iY29sb3I6dmFyKC0taW5rLW11dGUpO2ZvbnQtc2l6ZToxM3B4O21hcmdpbi10b3A6MTZweCI+TyByZXN1bHRhZG8sIG9zIHBvbnRvcyBlIG8gZ2FiYXJpdG8gY29tZW50YWRvIHNlcsOjbyBsaWJlcmFkb3MgcGFyYSB0b2RvcyDDoHMgJytTSU1fSkFORUxBLmZlY2hhKycsIGFww7NzIG8gZW5jZXJyYW1lbnRvIGRhIHByb3ZhLjwvcD4nKwogICAgICAgICAgJzwvZGl2Pic7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIC8vIEpBTkVMQSBwb3IgREFUQSArIEhPUkEgcmVhaXMgKEJSVCk6IG8gYm90w6NvIHPDsyBkZXN0cmF2YSBlbSAwNi8wOSDDoHMgMTRoCiAgICAgIC8vIChwZWRpZG8gZG8gSWdvciAxMi8wOCk7IG8gc2Vydmlkb3IgcmV2YWxpZGEgZGUgcXVhbHF1ZXIgamVpdG8uCiAgICAgIHZhciBhZ29yYSA9IERhdGUubm93KCksIGFicmVUcyA9IHNpbUFicmVUcygpLCBmZWNoYVRzID0gc2ltRmVjaGFUcygpOwogICAgICB2YXIgcHJvZyA9IENBQ0hFLnNpbVByb2c7CiAgICAgIHZhciBhYmVydG8gPSBtb2RvUHJldmlldygpIHx8IChhZ29yYSA+PSBhYnJlVHMgJiYgYWdvcmEgPD0gZmVjaGFUcyk7CiAgICAgIHZhciBwSXNvID0gZXZTaW0uZGF0YS5zcGxpdCgnLScpOwogICAgICB2YXIgZGF0YUV4dGVuc28gPSBwYXJzZUludChwSXNvWzJdLDEwKSArICcgZGUgJyArIE1FU0VTX0ZVTExbcGFyc2VJbnQocElzb1sxXSwxMCktMV07CiAgICAgIC8vIGJsb2NvIGRlIERBVEEvSE9SQSBiZW0gY2xhcmEgZSBkZXN0YWNhZGEKICAgICAgdmFyIHF1YW5kbyA9ICc8ZGl2IGNsYXNzPSJzaW0tcXVhbmRvIj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJzcS1pY28iPicrSUNPX1BST1ZBKyc8L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJzcS10eHQiPjxkaXYgY2xhc3M9InNxLWxhYmVsIj5RdWFuZG8gYWNvbnRlY2U8L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJzcS1kaWEiPicrZGF0YUV4dGVuc28rJzwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9InNxLWhvcmEiPmRhcyAnK1NJTV9KQU5FTEEuYWJyZSsnIMOgcyAnK1NJTV9KQU5FTEEuZmVjaGErJyDCtyBob3LDoXJpbyBkZSBCcmFzw61saWE8L2Rpdj48L2Rpdj48L2Rpdj4nOwoKICAgICAgaWYgKCFtb2RvUHJldmlldygpICYmIGFnb3JhID4gZmVjaGFUcykgewogICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9ImNhcmQgbG9ja2VkLWNhcmQiPicrcXVhbmRvKwogICAgICAgICAgJzxoMyBzdHlsZT0ibWFyZ2luOjIycHggMCA4cHgiPk8gcHJhem8gZG8gU2ltdWxhZG8gRmluYWwgZW5jZXJyb3U8L2gzPicrCiAgICAgICAgICAnPHA+QSBwcm92YSBmaWNvdSBkaXNwb27DrXZlbCBlbSAnK2RhdGFCUihldlNpbS5kYXRhKSsnLCBkYXMgJytTSU1fSkFORUxBLmFicmUrJyDDoHMgJytTSU1fSkFORUxBLmZlY2hhKycsIGUgbsOjbyBhY2VpdGEgZW52aW8gcmV0cm9hdGl2by4gQSBkaXNwdXRhIGNvbnRpbnVhOiBwcmVzZW7Dp2EgZSBxdWVzdMO1ZXMgc2VndWVtIHZhbGVuZG8gcG9udG9zLjwvcD48L2Rpdj4nOwogICAgICB9IGVsc2UgaWYgKCFhYmVydG8pIHsKICAgICAgICAvLyBBSU5EQSBOw4NPIEFCUklVIChhbnRlcyBkbyBkaWEgT1Ugbm8gZGlhIGFudGVzIGRhcyAxNGgpIOKGkiBib3TDo28gQkxPUVVFQURPCiAgICAgICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iY2FyZCBsb2NrZWQtY2FyZCI+JytxdWFuZG8rCiAgICAgICAgICAnPHAgc3R5bGU9Im1hcmdpbi10b3A6MjBweCI+TyBTaW11bGFkbyBhY29udGVjZSBhcXVpIG5hIHBsYXRhZm9ybWEsIG5vIGV4YXRvIG1vZGVsbyBkYSBwcm92YSBvZmljaWFsLiBBdMOpIGzDoSwgZ2FyYW50YSBhIHN1YSBwcmVzZW7Dp2EgbmFzIGF1bGFzIGUgcmVzb2x2YSBhcyBxdWVzdMO1ZXMsIGdhcmFudGluZG8gbWFpcyBwb250b3MgbmEgc3VhIGNsYXNzaWZpY2HDp8Ojby48L3A+JysKICAgICAgICAgICc8ZGl2IHN0eWxlPSJkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlciI+JytjaGlwcysnPC9kaXY+JysKICAgICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIHNpbS1ibG9xdWVhZG8iIHR5cGU9ImJ1dHRvbiIgZGlzYWJsZWQgYXJpYS1kaXNhYmxlZD0idHJ1ZSI+JytJQ09fTE9DSysnIEFicmUgZW0gJytkYXRhQlIoZXZTaW0uZGF0YSkrJywgw6BzICcrU0lNX0pBTkVMQS5hYnJlKyc8L2J1dHRvbj4nKwogICAgICAgICAgJzwvZGl2Pic7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgLy8gQUJFUlRPIOKGkiBib3TDo28gYXRpdm8KICAgICAgICBodG1sICs9ICc8YXJ0aWNsZSBjbGFzcz0iY2FyZCBoZXJvLW1pc3NhbyIgc3R5bGU9ImdyaWQtdGVtcGxhdGUtY29sdW1uczoxZnIiPjxkaXYgY2xhc3M9ImhtLWJvZHkiIHN0eWxlPSJwYWRkaW5nOjMwcHggMzRweCI+JysKICAgICAgICAgIHF1YW5kbysKICAgICAgICAgICc8aDMgc3R5bGU9Im1hcmdpbi10b3A6MThweCI+Jytlc2MoZXZTaW0udGl0dWxvKSsnPC9oMz4nKwogICAgICAgICAgY2hpcHMrCiAgICAgICAgICAnPHAgY2xhc3M9ImhtLW5vdGUiPicrKHByb2cKICAgICAgICAgICAgPyAnU2V1IGNyb27DtG1ldHJvIGVzdMOhIHJvZGFuZG8gbm8gc2Vydmlkb3IgZSBhcyByZXNwb3N0YXMgZXN0w6NvIHNhbHZhcy4gQ29udGludWUgZGUgb25kZSBwYXJvdS4nCiAgICAgICAgICAgIDogJ1Byb3ZhIMO6bmljYSBubyBtb2RlbG8gb2ZpY2lhbDogJytjZmcucXVlc3RvZXMrJyBxdWVzdMO1ZXMsICcrY2ZnLmR1cmFjYW9NaW4rJyBtaW51dG9zIGNvcnJpZG9zLCBlbmNlcnJhbWVudG8gw6BzICcrU0lNX0pBTkVMQS5mZWNoYSsnIHBhcmEgdG9kb3MuIFJlc2VydmUgbyB0ZW1wbyBhbnRlcyBkZSBpbmljaWFyLicpKyc8L3A+JysKICAgICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWFtYmVyIiBpZD0iYnRuUHJvdmEiPicrKHByb2cgPyAnQ29udGludWFyIHNpbXVsYWRvJyA6ICdJciBwYXJhIG8gc2ltdWxhZG8nKSsnPC9idXR0b24+JysKICAgICAgICAgICc8L2Rpdj48L2FydGljbGU+JzsKICAgICAgfQogICAgfQogICAgJCgnI21haW4nKS5pbm5lckhUTUwgPSBodG1sOwogICAgdmFyIGJwID0gJCgnI2J0blByb3ZhJyk7IGlmIChicCkgYnAuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW5kZXJTaW11bGFkb0V4YW0pOwogICAgdmFyIGJnID0gJCgnI2J0bkdhYmFyaXRvJyk7IGlmIChiZykgYmcuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW5kZXJTaW11bGFkb0dhYmFyaXRvKTsKICB9CgogIGZ1bmN0aW9uIHJlbmRlclNpbXVsYWRvRXhhbSgpewogICAgdmFyIGNmZyA9IFNJTV9DRkdbdXNlci5wcm92YV0gfHwgU0lNX0NGRy5lbmFtZWQ7CiAgICB2YXIgZXZTaW0gPSBqLmV2ZW50b3MuZmluZChmdW5jdGlvbihlKXsgcmV0dXJuIGUuaWQgPT09IGouc2ltdWxhZG9JZDsgfSk7CgogICAgLy8g4pSA4pSAIExPQkJZIChmYWlyLXBsYXkpIOKUgOKUgAogICAgaWYgKCFDQUNIRS5zaW1Qcm9nKSB7CiAgICAgIHZhciBodG1sID0gJzxkaXYgY2xhc3M9InBhZ2UtaGVhZCI+PGRpdj4nKwogICAgICAgICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgaWQ9ImJ0blZvbHRhciIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTZweCI+Vm9sdGFyPC9idXR0b24+JysKICAgICAgICAnPHNwYW4gY2xhc3M9ImtpY2tlciI+U2ltdWxhZG8gRmluYWw8L3NwYW4+PGgxIHN0eWxlPSJmb250LXNpemU6MjJweCI+Jytlc2MoZXZTaW0udGl0dWxvKSsnPC9oMT48L2Rpdj48L2Rpdj4nOwogICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJjYXJkIiBzdHlsZT0icGFkZGluZzozMHB4IDM0cHgiPicrCiAgICAgICAgJzxkaXYgY2xhc3M9ImtpY2tlciIgc3R5bGU9Im1hcmdpbi1ib3R0b206MTRweCI+QW50ZXMgZGUgY29tZcOnYXI8L2Rpdj4nKwogICAgICAgICc8dWwgY2xhc3M9InNpbS1yZWdyYXMiPicrCiAgICAgICAgJzxsaT48Yj4nK2NmZy5xdWVzdG9lcysnIHF1ZXN0w7VlczwvYj4gZGUgbcO6bHRpcGxhIGVzY29saGEgKEEgYSBEKSwgJytTSU1fQVJFQVMubGVuZ3RoKycgZ3JhbmRlcyDDoXJlYXM8L2xpPicrCiAgICAgICAgJzxsaT48Yj4nK2NmZy5kdXJhY2FvTWluKycgbWludXRvczwvYj4gZGUgcHJvdmEsIHNlbSBwYXVzYXIgbyBjcm9uw7RtZXRybzwvbGk+JysKICAgICAgICAnPGxpPkEgcHJvdmEgZW5jZXJyYSDDoHMgPGI+JytTSU1fSkFORUxBLmZlY2hhKyc8L2I+IHBhcmEgdG9kb3M6IHF1ZW0gY29tZcOnYSBtYWlzIHRhcmRlIHRlbSBtZW5vcyB0ZW1wbzwvbGk+JysKICAgICAgICAnPGxpPjxiPlRlbnRhdGl2YSDDum5pY2E8L2I+LCBjb20gcmVzcG9zdGFzIHNhbHZhcyBhdXRvbWF0aWNhbWVudGUgbmEgc3VhIGNvbnRhPC9saT4nKwogICAgICAgICc8bGk+QW8gdGVybWluYXIsIHZvY8OqIHbDqiBzZXVzIGFjZXJ0b3M7IG8gPGI+Z2FiYXJpdG8gY29tZW50YWRvPC9iPiDDqSBsaWJlcmFkbyBwYXJhIHRvZG9zIGFww7NzIG8gZW5jZXJyYW1lbnRvPC9saT4nKwogICAgICAgICc8L3VsPicrCiAgICAgICAgJzxwIHN0eWxlPSJmb250LXNpemU6MTNweDtjb2xvcjp2YXIoLS1pbmstbXV0ZSk7bGluZS1oZWlnaHQ6MS42O21hcmdpbjoxNnB4IDAgNHB4Ij5BbyBpbmljaWFyLCB2b2PDqiBkZWNsYXJhIHF1ZSBmYXLDoSBhIHByb3ZhIDxiPnNlbSBhdXjDrWxpbyBleHRlcm5vPC9iPiAocGVzc29hcywgbWF0ZXJpYWlzIG91IGludGVsaWfDqm5jaWEgYXJ0aWZpY2lhbCkuIE9zIHJlZ2lzdHJvcyBkZSBpbsOtY2lvLCBlbnZpbyBlIHJlc3Bvc3RhcyBzw6NvIGF1ZGl0YWRvcyBwZWxhIG9yZ2FuaXphw6fDo28sIGUgYSBjb25zdGF0YcOnw6NvIGRlIGZyYXVkZSBsZXZhIMOgIGRlc2NsYXNzaWZpY2HDp8OjbyBkbyBBdG8gRmluYWwuPC9wPicrCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tYW1iZXIiIGlkPSJidG5JbmljaWFyIiBzdHlsZT0ibWFyZ2luLXRvcDoxNHB4Ij5MaSBlIGNvbmNvcmRvIMK3IEluaWNpYXIgc2ltdWxhZG88L2J1dHRvbj48L2Rpdj4nOwogICAgICAkKCcjbWFpbicpLmlubmVySFRNTCA9IGh0bWw7CiAgICAgICQoJyNidG5Wb2x0YXInKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHJlbmRlclNpbXVsYWRvKTsKICAgICAgJCgnI2J0bkluaWNpYXInKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICAgICAgdmFyIGIgPSAkKCcjYnRuSW5pY2lhcicpOyBiLmRpc2FibGVkID0gdHJ1ZTsgYi50ZXh0Q29udGVudCA9ICdJbmljaWFuZG\/igKYnOwogICAgICAgIHNiUnBjKCdzaW11bGFkb19pbmljaWFyJywgeyBwX2NwZjogQ0FDSEUudXNlci5jcGYgfSkudGhlbihmdW5jdGlvbihyKXsKICAgICAgICAgIGlmIChyLnN0YXR1cyA9PT0gJ29rJykgewogICAgICAgICAgICBDQUNIRS5zaW1Qcm9nID0geyBpbmljaWFkb19lbTogci5pbmljaWFkb19lbSwgcmVzcG9zdGFzOiB7fSwgbWFyY2FkYXM6IFtdLAogICAgICAgICAgICAgIGZlY2hhX3RzOiBEYXRlLnBhcnNlKHIuZmVjaGFfdHMpLCBkdXJhY2FvX21pbjogci5kdXJhY2FvX21pbiwKICAgICAgICAgICAgICBza2V3OiBEYXRlLnBhcnNlKHIuYWdvcmEpIC0gRGF0ZS5ub3coKSB9OwogICAgICAgICAgICAvLyBhcyBxdWVzdMO1ZXMgZG8gc2ltdWxhZG8gc8OzIGZpY2FtIHZpc8OtdmVpcyBjb20gYSBqYW5lbGEgYWJlcnRhCiAgICAgICAgICAgIHNiU2VsZWN0KCdxdWl6X3F1ZXN0b2VzP3NlbGVjdD1pZCxldmVudG9faWQsb3JkZW0sYXJlYSxlbnVuY2lhZG8sYWx0ZXJuYXRpdmFzJmV2ZW50b19pZD1lcS4nK2V2U2ltLmlkKycmb3JkZXI9b3JkZW0nKQogICAgICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHFzKXsKICAgICAgICAgICAgICAgIENBQ0hFLnF1ZXN0b2VzW2V2U2ltLmlkXSA9IChBcnJheS5pc0FycmF5KHFzKSA\/IHFzIDogW10pLm1hcChmdW5jdGlvbihyb3cpewogICAgICAgICAgICAgICAgICByZXR1cm4geyBpZDogcm93LmlkLCBvcmRlbTogcm93Lm9yZGVtLCBhcmVhOiByb3cuYXJlYSwgcTogcm93LmVudW5jaWFkbywgYWx0czogcm93LmFsdGVybmF0aXZhcyB9OwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZW5kZXJTaW11bGFkb0V4YW0oKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgIH0gZWxzZSBpZiAoci5zdGF0dXMgPT09ICduYW9fYWJlcnRvJykgeyBiLmRpc2FibGVkID0gZmFsc2U7IGIudGV4dENvbnRlbnQgPSAnTGkgZSBjb25jb3JkbyDCtyBJbmljaWFyIHNpbXVsYWRvJzsgdG9hc3QoJ0EgcHJvdmEgYWJyZSDDoHMgJytTSU1fSkFORUxBLmFicmUrJy4nKTsgfQogICAgICAgICAgZWxzZSBpZiAoci5zdGF0dXMgPT09ICdlbmNlcnJhZG8nKSB7IHRvYXN0KCdBIGphbmVsYSBkYSBwcm92YSBqw6EgZW5jZXJyb3UuJyk7IHJlbmRlclNpbXVsYWRvKCk7IH0KICAgICAgICAgIGVsc2UgaWYgKHIuc3RhdHVzID09PSAnamFfcmVzcG9uZGlkbycpIHsgaGlkcmF0YXIoKS50aGVuKHJlbmRlclNpbXVsYWRvKTsgfQogICAgICAgICAgZWxzZSB7IGIuZGlzYWJsZWQgPSBmYWxzZTsgYi50ZXh0Q29udGVudCA9ICdMaSBlIGNvbmNvcmRvIMK3IEluaWNpYXIgc2ltdWxhZG8nOyB0b2FzdCgnTsOjbyBmb2kgcG9zc8OtdmVsIGluaWNpYXIuIFRlbnRlIG5vdmFtZW50ZS4nKTsgfQogICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKCl7IGIuZGlzYWJsZWQgPSBmYWxzZTsgYi50ZXh0Q29udGVudCA9ICdMaSBlIGNvbmNvcmRvIMK3IEluaWNpYXIgc2ltdWxhZG8nOyB0b2FzdCgnU2VtIGNvbmV4w6NvLiBUZW50ZSBub3ZhbWVudGUuJyk7IH0pOwogICAgICB9KTsKICAgICAgcmV0dXJuOwogICAgfQoKICAgIC8vIOKUgOKUgCBQUk9WQSAobGF5b3V0OiBjcm9uw7RtZXRybyBlbSBkZXN0YXF1ZSBubyB0b3BvICsgbWFwYSBob3Jpem9udGFsICsgcXVlc3TDo28gZW0gdGVsYSBjaGVpYSkg4pSA4pSACiAgICB2YXIgcHJvZyA9IENBQ0hFLnNpbVByb2c7CiAgICBwcm9nLnJlc3Bvc3RhcyA9IHByb2cucmVzcG9zdGFzIHx8IHt9OwogICAgcHJvZy5tYXJjYWRhcyA9IHByb2cubWFyY2FkYXMgfHwgW107CiAgICB2YXIgcXMgPSBDQUNIRS5xdWVzdG9lc1tldlNpbS5pZF0gfHwgW107CiAgICBpZiAoIXFzLmxlbmd0aCkgewogICAgICBzYlNlbGVjdCgncXVpel9xdWVzdG9lcz9zZWxlY3Q9aWQsZXZlbnRvX2lkLG9yZGVtLGFyZWEsZW51bmNpYWRvLGFsdGVybmF0aXZhcyZldmVudG9faWQ9ZXEuJytldlNpbS5pZCsnJm9yZGVyPW9yZGVtJykKICAgICAgICAudGhlbihmdW5jdGlvbihyb3dzKXsKICAgICAgICAgIENBQ0hFLnF1ZXN0b2VzW2V2U2ltLmlkXSA9IChBcnJheS5pc0FycmF5KHJvd3MpID8gcm93cyA6IFtdKS5tYXAoZnVuY3Rpb24ocm93KXsKICAgICAgICAgICAgcmV0dXJuIHsgaWQ6IHJvdy5pZCwgb3JkZW06IHJvdy5vcmRlbSwgYXJlYTogcm93LmFyZWEsIHE6IHJvdy5lbnVuY2lhZG8sIGFsdHM6IHJvdy5hbHRlcm5hdGl2YXMgfTsKICAgICAgICAgIH0pOwogICAgICAgICAgcmVuZGVyU2ltdWxhZG9FeGFtKCk7CiAgICAgICAgfSk7CiAgICAgICQoJyNtYWluJykuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjQwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0taW5rLWRpbSkiPkNhcnJlZ2FuZG8gYSBwcm92YeKApjwvZGl2Pic7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHZhciBhdHVhbCA9IDA7CiAgICB2YXIgc2tldyA9IHByb2cuc2tldyB8fCAwOwogICAgdmFyIGluaVRzID0gRGF0ZS5wYXJzZShwcm9nLmluaWNpYWRvX2VtKTsKICAgIHZhciBmZWNoYVRzID0gcHJvZy5mZWNoYV90cyB8fCBzaW1GZWNoYVRzKCk7CiAgICB2YXIgZHVyTWluID0gcHJvZy5kdXJhY2FvX21pbiB8fCBjZmcuZHVyYWNhb01pbjsKICAgIHZhciBmaW0gPSBNYXRoLm1pbihpbmlUcyArIGR1ck1pbiAqIDYwMDAwLCBmZWNoYVRzIC0gNjAwMDApIC0gc2tldzsKCiAgICB2YXIgaHRtbDIgPSAnPGRpdiBpZD0icHJvdmFCb3giPicrCiAgICAgICc8ZGl2IGNsYXNzPSJjYXJkIHByb3ZhLXRvcG8iPicrCiAgICAgICc8ZGl2PjxkaXYgY2xhc3M9InB0LXRpbWVyIiBpZD0ic2ltVGltZXIiPi0tOi0tPC9kaXY+JysKICAgICAgJzxkaXYgY2xhc3M9InB0LXJvdHVsbyI+VGVtcG8gcmVzdGFudGU8L2Rpdj48L2Rpdj4nKwogICAgICAnPGRpdiBjbGFzcz0icHQtbWV0YSIgaWQ9InNpbU1ldGEiPjwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJwdC1hY29lcyI+PGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGlkPSJidG5NYXBhIj5NYXBhIGRlIHF1ZXN0w7VlczwvYnV0dG9uPjxzcGFuIGlkPSJzaW1BY29lcyIgc3R5bGU9ImRpc3BsYXk6aW5saW5lLWZsZXg7Z2FwOjEwcHg7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwIj48L3NwYW4+PC9kaXY+JysKICAgICAgJzwvZGl2PicrCiAgICAgICc8ZGl2IGNsYXNzPSJjYXJkIHF1aXotYm94IiBzdHlsZT0icGFkZGluZzoyNHB4IDI4cHgiPicrCiAgICAgICc8ZGl2IGNsYXNzPSJwcm92YS1tYXBhIiBpZD0icW1hcCI+Jytxcy5tYXAoZnVuY3Rpb24oXywgaSl7IHJldHVybiAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtaT0iJytpKyciPicrKGkrMSkrJzwvYnV0dG9uPic7IH0pLmpvaW4oJycpKyc8L2Rpdj4nKwogICAgICAnPGRpdiBpZD0icUFyZWEiPjwvZGl2PjwvZGl2PjwvZGl2Pic7CiAgICAkKCcjbWFpbicpLmlubmVySFRNTCA9IGh0bWwyOwoKICAgIGxpZ2FyR3VhcmRhUHJvdmEoKTsKICAgIHZhciBib3ggPSAkKCcjcHJvdmFCb3gnKTsKICAgIGJveC5jbGFzc0xpc3QuYWRkKCdwcm92YS1wcm90ZWdpZGEnKTsKICAgIFsnY29weScsJ2N1dCcsJ2NvbnRleHRtZW51J10uZm9yRWFjaChmdW5jdGlvbihldk5hbWUpewogICAgICBib3guYWRkRXZlbnRMaXN0ZW5lcihldk5hbWUsIGZ1bmN0aW9uKGUpeyBlLnByZXZlbnREZWZhdWx0KCk7IH0pOwogICAgfSk7CgogICAgZnVuY3Rpb24gbWFwYUFiZXJ0bygpeyByZXR1cm4gJCgnI3FtYXAnKS5jbGFzc0xpc3QuY29udGFpbnMoJ2FiZXJ0bycpOyB9CiAgICBmdW5jdGlvbiBhbHRlcm5hTWFwYShmb3JjYXIpewogICAgICB2YXIgbSA9ICQoJyNxbWFwJyk7CiAgICAgIHZhciBhYnJpciA9IGZvcmNhciA9PT0gdHJ1ZSA\/IHRydWUgOiBmb3JjYXIgPT09IGZhbHNlID8gZmFsc2UgOiAhbWFwYUFiZXJ0bygpOwogICAgICBtLmNsYXNzTGlzdC50b2dnbGUoJ2FiZXJ0bycsIGFicmlyKTsKICAgICAgJCgnI2J0bk1hcGEnKS5jbGFzc0xpc3QudG9nZ2xlKCdtYXJjLW9uJywgYWJyaXIpOwogICAgfQogICAgJCgnI2J0bk1hcGEnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IGFsdGVybmFNYXBhKCk7IH0pOwoKICAgIHZhciBzYWx2YXJUID0gbnVsbDsKICAgIGZ1bmN0aW9uIHNhbHZhclJlbW90bygpewogICAgICBjbGVhclRpbWVvdXQoc2FsdmFyVCk7CiAgICAgIHNhbHZhclQgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7CiAgICAgICAgc2JScGMoJ3NpbXVsYWRvX3NhbHZhcicsIHsgcF9jcGY6IENBQ0hFLnVzZXIuY3BmLAogICAgICAgICAgcF9yZXNwb3N0YXM6IHByb2cucmVzcG9zdGFzLCBwX21hcmNhZGFzOiBwcm9nLm1hcmNhZGFzIH0pLmNhdGNoKGZ1bmN0aW9uKCl7fSk7CiAgICAgIH0sIDgwMCk7CiAgICB9CiAgICBmdW5jdGlvbiByZXNwb25kaWRhcygpeyByZXR1cm4gT2JqZWN0LmtleXMocHJvZy5yZXNwb3N0YXMpLmxlbmd0aDsgfQogICAgZnVuY3Rpb24gbWFyY2FkYShpKXsgcmV0dXJuIHByb2cubWFyY2FkYXMuaW5kZXhPZihxc1tpXS5pZCkgPiAtMTsgfQoKICAgIC8vIHNhbHRhIHByYSBwcsOzeGltYSBxdWVzdMOjbyBkbyB0aXBvIChlbSBicmFuY28gLyBtYXJjYWRhKSwgY2lyY3VsYXIgYSBwYXJ0aXIgZGEgYXR1YWwKICAgIGZ1bmN0aW9uIHNhbHRhUGFyYSh0aXBvKXsKICAgICAgZm9yICh2YXIgayA9IDE7IGsgPD0gcXMubGVuZ3RoOyBrKyspIHsKICAgICAgICB2YXIgaTIgPSAoYXR1YWwgKyBrKSAlIHFzLmxlbmd0aDsKICAgICAgICBpZiAodGlwbyA9PT0gJ2JyYW5jbycgJiYgcHJvZy5yZXNwb3N0YXNbcXNbaTJdLmlkXSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gbW9zdHJhUXVlc3RhbyhpMik7CiAgICAgICAgaWYgKHRpcG8gPT09ICdtYXJjYWRhJyAmJiBtYXJjYWRhKGkyKSkgcmV0dXJuIG1vc3RyYVF1ZXN0YW8oaTIpOwogICAgICB9CiAgICAgIHRvYXN0KHRpcG8gPT09ICdicmFuY28nID8gJ05lbmh1bWEgcXVlc3TDo28gZW0gYnJhbmNvLicgOiAnTmVuaHVtYSBxdWVzdMOjbyBtYXJjYWRhLicpOwogICAgfQoKICAgIGZ1bmN0aW9uIHBpbnRhTWFwYSgpewogICAgICAkJCgnI3FtYXAgYnV0dG9uJykuZm9yRWFjaChmdW5jdGlvbihiKXsKICAgICAgICB2YXIgaSA9ICtiLmRhdGFzZXQuaTsKICAgICAgICBiLmNsYXNzTmFtZSA9IChwcm9nLnJlc3Bvc3Rhc1txc1tpXS5pZF0gIT09IHVuZGVmaW5lZCA\/ICdyZXNwb25kaWRhJyA6ICcnKSArCiAgICAgICAgICAoaSA9PT0gYXR1YWwgPyAnIGF0dWFsJyA6ICcnKSArIChtYXJjYWRhKGkpID8gJyBtYXJjYWRhJyA6ICcnKTsKICAgICAgfSk7CiAgICAgIHZhciBlbUJyYW5jbyA9IHFzLmxlbmd0aCAtIHJlc3BvbmRpZGFzKCk7CiAgICAgICQoJyNzaW1NZXRhJykuaW5uZXJIVE1MID0gJzxiPicrcmVzcG9uZGlkYXMoKSsnPC9iPiBkZSAnK3FzLmxlbmd0aCsKICAgICAgICAoZW1CcmFuY28gPyAnIMK3IDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0icHQtc2FsdG8iIGlkPSJzYWx0b0JyYW5jbyIgdGl0bGU9IklyIHBhcmEgYSBwcsOzeGltYSBlbSBicmFuY28iPicrZW1CcmFuY28rJyBlbSBicmFuY288L2J1dHRvbj4nIDogJyDCtyB0dWRvIHJlc3BvbmRpZG8nKSsKICAgICAgICAocHJvZy5tYXJjYWRhcy5sZW5ndGggPyAnIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0icHQtc2FsdG8gYXp1bCIgaWQ9InNhbHRvTWFyY2FkYSIgdGl0bGU9IklyIHBhcmEgYSBwcsOzeGltYSBtYXJjYWRhIj4nK3Byb2cubWFyY2FkYXMubGVuZ3RoKycgbWFyY2FkYScrKHByb2cubWFyY2FkYXMubGVuZ3RoPjE\/J3MnOicnKSsnPC9idXR0b24+JyA6ICcnKTsKICAgICAgdmFyIHNiID0gJCgnI3NhbHRvQnJhbmNvJyk7IGlmIChzYikgc2IuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBzYWx0YVBhcmEoJ2JyYW5jbycpOyB9KTsKICAgICAgdmFyIHNtID0gJCgnI3NhbHRvTWFyY2FkYScpOyBpZiAoc20pIHNtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgc2FsdGFQYXJhKCdtYXJjYWRhJyk7IH0pOwogICAgfQoKICAgIHZhciBmaW5hbGl6YW5kbyA9IGZhbHNlOwogICAgZnVuY3Rpb24gZmluYWxpemFyKCl7CiAgICAgIGlmIChmaW5hbGl6YW5kbykgcmV0dXJuOwogICAgICBmaW5hbGl6YW5kbyA9IHRydWU7CiAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpOwogICAgICBjbGVhclRpbWVvdXQoc2FsdmFyVCk7CiAgICAgIHNiUnBjKCdzaW11bGFkb19zYWx2YXInLCB7IHBfY3BmOiBDQUNIRS51c2VyLmNwZiwgcF9yZXNwb3N0YXM6IHByb2cucmVzcG9zdGFzLCBwX21hcmNhZGFzOiBwcm9nLm1hcmNhZGFzIH0pCiAgICAgICAgLnRoZW4oZnVuY3Rpb24oKXsgcmV0dXJuIHNiUnBjKCdzaW11bGFkb19maW5hbGl6YXInLCB7IHBfY3BmOiBDQUNIRS51c2VyLmNwZiB9KTsgfSkKICAgICAgICAudGhlbihmdW5jdGlvbihyKXsKICAgICAgICAgIGlmIChyLnN0YXR1cyA9PT0gJ29rJyB8fCByLnN0YXR1cyA9PT0gJ2phX3Jlc3BvbmRpZG8nKSB7CiAgICAgICAgICAgIGRlc2xpZ2FyR3VhcmRhUHJvdmEoKTsKICAgICAgICAgICAgdG9hc3Qoci5zdGF0dXMgIT09ICdvaycgPyAnU2ltdWxhZG8gasOhIHJlZ2lzdHJhZG8uJwogICAgICAgICAgICAgIDogKHIuZ2FiYXJpdG9fbGliZXJhZG8gPyAnU2ltdWxhZG8gZW52aWFkbzogJytyLmFjZXJ0b3MrJy8nK3IudG90YWwrJyBhY2VydG9zLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogJ1Byb3ZhIGVudmlhZGEhIFJlc3VsdGFkbyBlIGdhYmFyaXRvIHNhZW0gw6BzICcrU0lNX0pBTkVMQS5mZWNoYSsnLicpKTsKICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpeyBsb2NhdGlvbi5yZWxvYWQoKTsgfSwgOTAwKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgZmluYWxpemFuZG8gPSBmYWxzZTsKICAgICAgICAgIHRvYXN0KCdOw6NvIGZvaSBwb3Nzw612ZWwgZW52aWFyICgnK3Iuc3RhdHVzKycpLiBUZW50ZSBkZSBub3ZvLicpOwogICAgICAgICAgcGludGFBY29lcyhmYWxzZSk7CiAgICAgICAgfSkKICAgICAgICAuY2F0Y2goZnVuY3Rpb24oKXsgZmluYWxpemFuZG8gPSBmYWxzZTsgdG9hc3QoJ1NlbSBjb25leMOjby4gVGVudGUgZW52aWFyIGRlIG5vdm8uJyk7IHBpbnRhQWNvZXMoZmFsc2UpOyB9KTsKICAgIH0KCiAgICBmdW5jdGlvbiBwaW50YUFjb2VzKGNvbmZpcm1hbmRvKXsKICAgICAgdmFyIGVsID0gJCgnI3NpbUFjb2VzJyk7CiAgICAgIGlmIChjb25maXJtYW5kbykgewogICAgICAgIGFsdGVybmFNYXBhKHRydWUpOyAgLy8gcmV2aXPDo286IG1hcGEgw6kgaW5kaXNwZW5zw6F2ZWwgYXF1aQogICAgICAgIHZhciBlbUJyYW5jbyA9IHFzLmxlbmd0aCAtIHJlc3BvbmRpZGFzKCk7CiAgICAgICAgZWwuaW5uZXJIVE1MID0gJzxzcGFuIGNsYXNzPSJwdC1jb25maXJtIj4nKwogICAgICAgICAgKGVtQnJhbmNvID4gMCA\/ICc8Yj4nK2VtQnJhbmNvKycgZW0gYnJhbmNvPC9iPi4gRmluYWxpemFyPycgOiAnVHVkbyByZXNwb25kaWRvLiBGaW5hbGl6YXI\/JykrJzwvc3Bhbj4nKwogICAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tYW1iZXIgYnRuLXNtIiBpZD0iYnRuRmltU2ltIj5TaW0sIGZpbmFsaXphcjwvYnV0dG9uPicrCiAgICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGlkPSJidG5Db250aW51YSI+Q29udGludWFyPC9idXR0b24+JzsKICAgICAgICAkKCcjYnRuRmltU2ltJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmaW5hbGl6YXIpOwogICAgICAgICQoJyNidG5Db250aW51YScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgcGludGFBY29lcyhmYWxzZSk7IH0pOwogICAgICB9IGVsc2UgewogICAgICAgIGVsLmlubmVySFRNTCA9ICc8YnV0dG9uIGNsYXNzPSJidG4gYnRuLWdob3N0IGJ0bi1zbSIgaWQ9ImJ0blBlZGlyRmltIj5GaW5hbGl6YXIgc2ltdWxhZG88L2J1dHRvbj4nOwogICAgICAgICQoJyNidG5QZWRpckZpbScpLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgcGludGFBY29lcyh0cnVlKTsgfSk7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiBtb3N0cmFRdWVzdGFvKGkpewogICAgICBhdHVhbCA9IGk7CiAgICAgIHZhciBxID0gcXNbaV07CiAgICAgIHZhciBtID0gbWFyY2FkYShpKTsKICAgICAgJCgnI3FBcmVhJykuaW5uZXJIVE1MID0KICAgICAgICAocS5hcmVhID8gJzxkaXYgY2xhc3M9InByb3ZhLWFyZWEiPicrZXNjKHEuYXJlYSkrJzwvZGl2PicgOiAnJykrCiAgICAgICAgJzxkaXYgY2xhc3M9InFoZWFkIiBzdHlsZT0iZm9udC1zaXplOjExcHg7Zm9udC13ZWlnaHQ6ODAwO2xldHRlci1zcGFjaW5nOi4xOGVtO2NvbG9yOnZhcigtLWFtYmVyKTt0ZXh0LXRyYW5zZm9ybTp1cHBlcmNhc2U7bWFyZ2luLWJvdHRvbToxMHB4Ij5RdWVzdMOjbyAnKyhpKzEpKycgZGUgJytxcy5sZW5ndGgrJzwvZGl2PicrCiAgICAgICAgJzxwIGNsYXNzPSJlbnVuIiBzdHlsZT0iZm9udC1zaXplOjE1cHg7bWFyZ2luLWJvdHRvbToxNHB4O3doaXRlLXNwYWNlOnByZS13cmFwIj4nK21pZGlhSFRNTChxLnEpKyc8L3A+JysKICAgICAgICAnPGRpdiBjbGFzcz0icXVpei1vcHRzIG11bHQiPicrcS5hbHRzLm1hcChmdW5jdGlvbihhKXsKICAgICAgICAgIHJldHVybiAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRhdGEtdj0iJythLmwrJyIgY2xhc3M9IicrKHByb2cucmVzcG9zdGFzW3EuaWRdID09PSBhLmwgPyAnc2VsJyA6ICcnKSsnIj48YiBjbGFzcz0ibHQiPicrYS5sKyc8L2I+PHNwYW4+Jytlc2MoYS50KSsnPC9zcGFuPjwvYnV0dG9uPic7CiAgICAgICAgfSkuam9pbignJykrJzwvZGl2PicrCiAgICAgICAgJzxkaXYgY2xhc3M9InByb3ZhLW5hdiI+JysKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20iIGlkPSJxQW50IiAnKyhpID09PSAwID8gJ2Rpc2FibGVkJyA6ICcnKSsnPkFudGVyaW9yPC9idXR0b24+JysKICAgICAgICAnPGJ1dHRvbiBjbGFzcz0iYnRuIGJ0bi1naG9zdCBidG4tc20gJysobSA\/ICdtYXJjLW9uJyA6ICcnKSsnIiBpZD0icU1hcmNhIj4nKyhtID8gJ01hcmNhZGEgcGFyYSByZXZpc2FyJyA6ICdNYXJjYXIgcGFyYSByZXZpc2FyJykrJzwvYnV0dG9uPicrCiAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBpZD0icVByb3giICcrKGkgPT09IHFzLmxlbmd0aC0xID8gJ2Rpc2FibGVkJyA6ICcnKSsnPlByw7N4aW1hPC9idXR0b24+JysKICAgICAgICAnPC9kaXY+JzsKICAgICAgJCQoJyNxQXJlYSAucXVpei1vcHRzIGJ1dHRvbicpLmZvckVhY2goZnVuY3Rpb24oYil7CiAgICAgICAgYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICAgICAgICBwcm9nLnJlc3Bvc3Rhc1txLmlkXSA9IGIuZGF0YXNldC52OwogICAgICAgICAgc2FsdmFyUmVtb3RvKCk7CiAgICAgICAgICAkJCgnI3FBcmVhIC5xdWl6LW9wdHMgYnV0dG9uJykuZm9yRWFjaChmdW5jdGlvbih4KXsgeC5jbGFzc0xpc3QudG9nZ2xlKCdzZWwnLCB4ID09PSBiKTsgfSk7CiAgICAgICAgICBwaW50YU1hcGEoKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICAgICQoJyNxQW50JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBpZiAoYXR1YWwgPiAwKSBtb3N0cmFRdWVzdGFvKGF0dWFsLTEpOyB9KTsKICAgICAgJCgnI3FQcm94JykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbigpeyBpZiAoYXR1YWwgPCBxcy5sZW5ndGgtMSkgbW9zdHJhUXVlc3RhbyhhdHVhbCsxKTsgfSk7CiAgICAgICQoJyNxTWFyY2EnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7CiAgICAgICAgdmFyIGl4ID0gcHJvZy5tYXJjYWRhcy5pbmRleE9mKHEuaWQpOwogICAgICAgIGlmIChpeCA+IC0xKSBwcm9nLm1hcmNhZGFzLnNwbGljZShpeCwgMSk7IGVsc2UgcHJvZy5tYXJjYWRhcy5wdXNoKHEuaWQpOwogICAgICAgIHNhbHZhclJlbW90bygpOyBtb3N0cmFRdWVzdGFvKGkpOwogICAgICB9KTsKICAgICAgcGludGFNYXBhKCk7CiAgICB9CgogICAgdmFyIHRpbWVyID0gc2V0SW50ZXJ2YWwodGljaywgMTAwMCk7CiAgICBmdW5jdGlvbiB0aWNrKCl7CiAgICAgIHZhciBlbCA9ICQoJyNzaW1UaW1lcicpOwogICAgICBpZiAoIWVsKSB7IGNsZWFySW50ZXJ2YWwodGltZXIpOyByZXR1cm47IH0KICAgICAgdmFyIHMgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKChmaW0gLSBEYXRlLm5vdygpKSAvIDEwMDApKTsKICAgICAgdmFyIGggPSBNYXRoLmZsb29yKHMvMzYwMCksIG0yID0gTWF0aC5mbG9vcigocyUzNjAwKS82MCksIHNlZyA9IHMlNjA7CiAgICAgIGVsLnRleHRDb250ZW50ID0gKGg+MCA\/IFN0cmluZyhoKS5wYWRTdGFydCgyLCcwJykrJzonIDogJycpICsgU3RyaW5nKG0yKS5wYWRTdGFydCgyLCcwJykrJzonK1N0cmluZyhzZWcpLnBhZFN0YXJ0KDIsJzAnKTsKICAgICAgZWwuY2xhc3NMaXN0LnRvZ2dsZSgndXJnZW50ZScsIHMgPD0gNjApOwogICAgICBpZiAocyA8PSAwKSBmaW5hbGl6YXIoKTsKICAgIH0KCiAgICBwaW50YUFjb2VzKGZhbHNlKTsKICAgIG1vc3RyYVF1ZXN0YW8oMCk7CiAgICB0aWNrKCk7CiAgICAkJCgnI3FtYXAgYnV0dG9uJykuZm9yRWFjaChmdW5jdGlvbihiKXsKICAgICAgYi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uKCl7IG1vc3RyYVF1ZXN0YW8oK2IuZGF0YXNldC5pKTsgfSk7CiAgICB9KTsKICB9CgogIC8vIEdhYmFyaXRvIGNvbWVudGFkbyBkbyBzaW11bGFkbzogbyBzZXJ2aWRvciBTw5MgZW50cmVnYSBhcMOzcyBvIGVuY2VycmFtZW50bwogIGZ1bmN0aW9uIHJlbmRlclNpbXVsYWRvR2FiYXJpdG8oKXsKICAgIHZhciBldlNpbSA9IGouZXZlbnRvcy5maW5kKGZ1bmN0aW9uKGUpeyByZXR1cm4gZS5pZCA9PT0gai5zaW11bGFkb0lkOyB9KTsKICAgICQoJyNtYWluJykuaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjQwcHg7dGV4dC1hbGlnbjpjZW50ZXI7Y29sb3I6dmFyKC0taW5rLWRpbSkiPkNhcnJlZ2FuZG8gbyBnYWJhcml0b+KApjwvZGl2Pic7CiAgICBzYlJwYygnc2ltdWxhZG9fZ2FiYXJpdG8nLCB7IHBfY3BmOiBDQUNIRS51c2VyLmNwZiB9KS50aGVuKGZ1bmN0aW9uKGcpewogICAgICBpZiAoZy5zdGF0dXMgIT09ICdvaycpIHsgdG9hc3QoJ08gZ2FiYXJpdG8gw6kgbGliZXJhZG8gYXDDs3MgbyBlbmNlcnJhbWVudG8uJyk7IHJlbmRlclNpbXVsYWRvKCk7IHJldHVybjsgfQogICAgICB2YXIgcXMgPSBDQUNIRS5xdWVzdG9lc1tldlNpbS5pZF0gfHwgW107CiAgICAgIHZhciByZXMgPSBDQUNIRS5zaW1SZXMgfHwgeyByZXNwb3N0YXM6IHt9IH07CiAgICAgIHZhciBwb3JJZCA9IHt9OwogICAgICAoZy5pdGVucyB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbihpdCl7IHBvcklkW2l0LnF1ZXN0YW9faWRdID0gaXQ7IH0pOwogICAgICBmdW5jdGlvbiBwaW50YSgpewogICAgICAgIHZhciBodG1sID0gJzxkaXYgY2xhc3M9InBhZ2UtaGVhZCI+PGRpdj4nKwogICAgICAgICAgJzxidXR0b24gY2xhc3M9ImJ0biBidG4tZ2hvc3QgYnRuLXNtIiBpZD0iYnRuVm9sdGFyIiBzdHlsZT0ibWFyZ2luLWJvdHRvbToxNnB4Ij5Wb2x0YXIgYW8gU2ltdWxhZG88L2J1dHRvbj4nKwogICAgICAgICAgJzxzcGFuIGNsYXNzPSJraWNrZXIiPkdhYmFyaXRvIGNvbWVudGFkbzwvc3Bhbj48aDEgc3R5bGU9ImZvbnQtc2l6ZToyMnB4Ij4nK2VzYyhldlNpbS50aXR1bG8pKyc8L2gxPicrCiAgICAgICAgICAoQ0FDSEUuc2ltUmVzID8gJzxwIGNsYXNzPSJkZXNjIj5Wb2PDqiBmZXogPGI+JytDQUNIRS5zaW1SZXMuYWNlcnRvcysnIGRlICcrQ0FDSEUuc2ltUmVzLnRvdGFsKyc8L2I+LiBPIGdhYmFyaXRvIGVzdMOhIGVtIHZlcmRlOyBvbmRlIHZvY8OqIGVycm91LCBhIHN1YSBtYXJjYcOnw6NvIGFwYXJlY2UgZW0gdmVybWVsaG8uPC9wPicgOiAnJykrCiAgICAgICAgICAnPC9kaXY+PC9kaXY+JzsKICAgICAgICBodG1sICs9ICc8ZGl2IGNsYXNzPSJjYXJkIHF1aXotYm94Ij4nOwogICAgICAgIHFzLmZvckVhY2goZnVuY3Rpb24ocSwgaSl7CiAgICAgICAgICB2YXIgaXQgPSBwb3JJZFtxLmlkXSB8fCB7fTsKICAgICAgICAgIHZhciBtaW5oYSA9IChyZXMucmVzcG9zdGFzIHx8IHt9KVtxLmlkXTsKICAgICAgICAgIGh0bWwgKz0gJzxkaXYgY2xhc3M9InF1aXotcSI+JysocS5hcmVhID8gJzxkaXYgY2xhc3M9InByb3ZhLWFyZWEiPicrZXNjKHEuYXJlYSkrJzwvZGl2PicgOiAnJykrCiAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJxaGVhZCI+UXVlc3TDo28gJysoaSsxKSsnIGRlICcrcXMubGVuZ3RoKyc8L2Rpdj4nKwogICAgICAgICAgICAnPHAgY2xhc3M9ImVudW4iPicrbWlkaWFIVE1MKHEucSkrJzwvcD4nKwogICAgICAgICAgICAnPGRpdiBjbGFzcz0icXVpei1vcHRzIG11bHQiPicrcS5hbHRzLm1hcChmdW5jdGlvbihhKXsKICAgICAgICAgICAgICB2YXIgY2xzID0gYS5sID09PSBpdC5jb3JyZXRhID8gJ2hpdCcgOiAobWluaGEgPT09IGEubCA\/ICdlcnJhZG8nIDogJycpOwogICAgICAgICAgICAgIHJldHVybiAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGRpc2FibGVkIGNsYXNzPSInK2NscysnIj48YiBjbGFzcz0ibHQiPicrYS5sKyc8L2I+PHNwYW4+Jytlc2MoYS50KSsnPC9zcGFuPjwvYnV0dG9uPic7CiAgICAgICAgICAgIH0pLmpvaW4oJycpKyc8L2Rpdj4nKwogICAgICAgICAgICAoaXQuY29tZW50YXJpbyA\/ICc8ZGV0YWlscyBjbGFzcz0icXVpei1jb21lbnQiPjxzdW1tYXJ5PlZlciBjb21lbnTDoXJpbzwvc3VtbWFyeT48ZGl2IGNsYXNzPSJjYm9keSI+JyttaWRpYUhUTUwoaXQuY29tZW50YXJpbykrJzwvZGl2PjwvZGV0YWlscz4nIDogJycpKwogICAgICAgICAgICAnPC9kaXY+JzsKICAgICAgICB9KTsKICAgICAgICBodG1sICs9ICc8L2Rpdj4nOwogICAgICAgICQoJyNtYWluJykuaW5uZXJIVE1MID0gaHRtbDsKICAgICAgICAkKCcjYnRuVm9sdGFyJykuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCByZW5kZXJTaW11bGFkbyk7CiAgICAgIH0KICAgICAgaWYgKCFxcy5sZW5ndGgpIHsKICAgICAgICBzYlNlbGVjdCgncXVpel9xdWVzdG9lcz9zZWxlY3Q9aWQsZXZlbnRvX2lkLG9yZGVtLGFyZWEsZW51bmNpYWRvLGFsdGVybmF0aXZhcyZldmVudG9faWQ9ZXEuJytldlNpbS5pZCsnJm9yZGVyPW9yZGVtJykKICAgICAgICAgIC50aGVuKGZ1bmN0aW9uKHJvd3MpewogICAgICAgICAgICBDQUNIRS5xdWVzdG9lc1tldlNpbS5pZF0gPSBxcyA9IChBcnJheS5pc0FycmF5KHJvd3MpID8gcm93cyA6IFtdKS5tYXAoZnVuY3Rpb24ocm93KXsKICAgICAgICAgICAgICByZXR1cm4geyBpZDogcm93LmlkLCBvcmRlbTogcm93Lm9yZGVtLCBhcmVhOiByb3cuYXJlYSwgcTogcm93LmVudW5jaWFkbywgYWx0czogcm93LmFsdGVybmF0aXZhcyB9OwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgcGludGEoKTsKICAgICAgICAgIH0pOwogICAgICB9IGVsc2UgcGludGEoKTsKICAgIH0pOwogIH0KCiAgLyogLS0tLS0tLS0tLSBSQU5LSU5HIC0tLS0tLS0tLS0gKi8KICBmdW5jdGlvbiByZW5kZXJSYW5raW5nKCl7CiAgICB2YXIgcCA9IGNhbGNQb250b3ModXNlcik7CiAgICB2YXIgaHRtbCA9IHBhZ2VIZWFkKCdDbGFzc2lmaWNhw6fDo28gZ2VyYWwgwrcgJyArIGoubGlnYSwgJ1N1YSBwb3Npw6fDo28gbmEgY2xhc3NpZmljYcOnw6NvJywKICAgICAgJ1N1YSBQT1NJw4fDg08gw6kgYSBzdWEgcG9udHVhw6fDo28gdG90YWw6IGpvcm5hZGEgZGUgZXN0dWRvIChhdMOpIDIuMDAwOiBwcmVzZW7Dp2EsIHF1ZXN0w7VlcyBlIFNpbXVsYWRvKSArIGluZGljYcOnw7VlcyAoc2VtIHRldG8pLCB0dWRvIHNvbWFkby4gRW1wYXRlPyBNYWlvciBub3RhIG5vIFNpbXVsYWRvLCBkZXBvaXMgYWNlcnRvcyBuYXMgcXVlc3TDtWVzIGUgY2hlY2staW4gbWFpcyBjZWRvLicsCiAgICAgICdDbGFzc2lmaWNhw6fDo28gYW8gdml2bycpOwogICAgaHRtbCArPSAnPGRpdiBjbGFzcz0iY2FyZCIgc3R5bGU9InBhZGRpbmc6NDBweDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjp2YXIoLS1pbmstZGltKSIgaWQ9InJrTG9hZCI+Q2FycmVnYW5kbyBvIHJhbmtpbmfigKY8L2Rpdj4nOwogICAgJCgnI21haW4nKS5pbm5lckhUTUwgPSBodG1sOwoKICAgIC8vIFBST0RVw4fDg086IHBvc2nDp8OjbyBlIHBsYWNhciB2w6ptIGRvIHNlcnZpZG9yIChyYW5raW5nX2dlcmFsKSwgY29tIGEKICAgIC8vIGNhc2NhdGEgZGUgZGVzZW1wYXRlIGUgbm9tZXMgYWJyZXZpYWRvcyBzZW0gUElJCiAgICBzYlJwYygncmFua2luZ19nZXJhbCcsIHsgcF9jcGY6IENBQ0hFLnVzZXIuY3BmIH0pLnRoZW4oZnVuY3Rpb24ocil7CiAgICAgIGlmICghciB8fCByLnN0YXR1cyAhPT0gJ29rJykgeyAkKCcjcmtMb2FkJykudGV4dENvbnRlbnQgPSAnTsOjbyBmb2kgcG9zc8OtdmVsIGNhcnJlZ2FyIG8gcmFua2luZyBhZ29yYS4nOyByZXR1cm47IH0KICAgICAgdmFyIHByZVRlbXBvcmFkYSA9IGhvamUuaXNvIDwgai5pbmljaW87CiAgICAgIHZhciBtcCA9IHIubWV1c19wb250b3MgfHwgeyBwcmVzOiAwLCBxdWVzdDogMCwgc2ltOiAwLCBpbmQ6IDAsIGVzdHVkbzogMCwgdG90YWw6IDAgfTsKICAgICAgdmFyIGVzdHVkbyA9IChtcC5lc3R1ZG8gIT0gbnVsbCkgPyBtcC5lc3R1ZG8gOiAobXAucHJlcyArIG1wLnF1ZXN0ICsgbXAuc2ltKTsKICAgICAgdmFyIHRvdGFsID0gKG1wLnRvdGFsICE9IG51bGwpID8gbXAudG90YWwgOiAoZXN0dWRvICsgKG1wLmluZCB8fCAwKSk7CiAgICAgIC8vIGEgUE9TScOHw4NPIG5vIHJhbmtpbmcgw6kgZGVjaWRpZGEgcGVsYSBwb250dWHDp8OjbyBUT1RBTDogam9ybmFkYSBkZSBlc3R1ZG8KICAgICAgLy8gKGF0w6kgMi4wMDApICsgaW5kaWNhw6fDtWVzIChzZW0gdGV0bykuIERlY2lzw6NvIGRvIElnb3IgMTEvMDguCiAgICAgIHZhciBvdXQgPSAnPGRpdiBjbGFzcz0iY2FyZCBwb3MtY2FyZCI+PGRpdj48ZGl2IGNsYXNzPSJwb3MiPicrKHByZVRlbXBvcmFkYSA\/ICfCtycgOiByLm1pbmhhX3BvcysnwronKSsnIDxzbWFsbD5kZSAnKyhyLnRvdGFsX3BhcnRpY2lwYW50ZXN8fDEpLnRvTG9jYWxlU3RyaW5nKCdwdC1CUicpKyc8L3NtYWxsPjwvZGl2PjwvZGl2PicrCiAgICAgICAgJzxkaXY+PGRpdiBjbGFzcz0ia2lja2VyIiBzdHlsZT0ibWFyZ2luLWJvdHRvbTo4cHgiPlZvY8OqIMK3IHBhcmNpYWwgZGUgYWdvcmE8L2Rpdj4nKwogICAgICAgICc8ZGl2IHN0eWxlPSJmb250LXNpemU6MjRweDtmb250LXdlaWdodDo4MDAiPicrZm10UHRzKHRvdGFsKSsnIHB0cyA8c21hbGwgc3R5bGU9ImZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLWluay1tdXRlKTtmb250LXdlaWdodDo2MDAiPmRlY2lkZSBhIHN1YSBwb3Npw6fDo288L3NtYWxsPjwvZGl2PicrCiAgICAgICAgKChtcC5pbmR8fDApID8gJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0taW5rLW11dGUpO21hcmdpbi10b3A6MnB4Ij5qb3JuYWRhICcrZm10UHRzKGVzdHVkbykrJyArICcrZm10UHRzKG1wLmluZCkrJyBkZSBpbmRpY2HDp8O1ZXM8L2Rpdj4nIDogJycpKwogICAgICAgICc8ZGl2IGNsYXNzPSJwb3MtYnJlYWtkb3duIj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJwYiI+PGRpdiBjbGFzcz0icm93Ij48c3Bhbj5QcmVzZW7Dp2E8L3NwYW4+PHNwYW4+JytmbXRQdHMobXAucHJlcykrJyAvICcrUE9OVE9TLnByZXNlbmNhKyc8L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0icHJvZ3Jlc3MiPjxkaXYgY2xhc3M9ImZpbGwiIHN0eWxlPSJ3aWR0aDonKyhtcC5wcmVzL1BPTlRPUy5wcmVzZW5jYSoxMDApKyclIj48L2Rpdj48L2Rpdj48L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJwYiI+PGRpdiBjbGFzcz0icm93Ij48c3Bhbj5RdWVzdMO1ZXM8L3NwYW4+PHNwYW4+JytmbXRQdHMobXAucXVlc3QpKycgLyAnK1BPTlRPUy5taXNzb2VzKyc8L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0icHJvZ3Jlc3MiPjxkaXYgY2xhc3M9ImZpbGwiIHN0eWxlPSJ3aWR0aDonKyhtcC5xdWVzdC9QT05UT1MubWlzc29lcyoxMDApKyclIj48L2Rpdj48L2Rpdj48L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJwYiI+PGRpdiBjbGFzcz0icm93Ij48c3Bhbj5TaW11bGFkbyBGaW5hbDwvc3Bhbj48c3Bhbj4nK2ZtdFB0cyhtcC5zaW0pKycgLyAnK1BPTlRPUy5zaW11bGFkbysnPC9zcGFuPjwvZGl2PjxkaXYgY2xhc3M9InByb2dyZXNzIj48ZGl2IGNsYXNzPSJmaWxsIiBzdHlsZT0id2lkdGg6JysobXAuc2ltL1BPTlRPUy5zaW11bGFkbyoxMDApKyclIj48L2Rpdj48L2Rpdj48L2Rpdj4nKwogICAgICAgICc8ZGl2IGNsYXNzPSJwYiI+PGRpdiBjbGFzcz0icm93Ij48c3Bhbj5JbmRpY2HDp8O1ZXM8L3NwYW4+PHNwYW4+KycrZm10UHRzKG1wLmluZHx8MCkrJyA8c21hbGwgc3R5bGU9ImNvbG9yOnZhcigtLWluay1tdXRlKSI+Y29udGEgbmEgY2xhc3NpZmljYcOnw6NvPC9zbWFsbD48L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0icHJvZ3Jlc3MiPjxkaXYgY2xhc3M9ImZpbGwiIHN0eWxlPSJ3aWR0aDonK01hdGgubWluKDEwMCwobXAuaW5kfHwwKS8yMDAqMTAwKSsnJSI+PC9kaXY+PC9kaXY+PC9kaXY+JysKICAgICAgICAnPC9kaXY+PC9kaXY+PC9kaXY+JzsKCiAgICAgIC8vIHByZW1pYcOnw7VlcyArIGZhaXhhcyBkZSBjb25xdWlzdGEgKHByw6ptaW9zIHJldGlyYWRvcyB0ZW1wb3JhcmlhbWVudGUpCiAgICAgIG91dCArPSAnPGRpdiBjbGFzcz0iY2FyZCIgc3R5bGU9InBhZGRpbmc6MjZweCAzMHB4O21hcmdpbi1ib3R0b206MjJweCI+JzsKICAgICAgaWYgKE1PU1RSQVJfUFJFTUlPUykgewogICAgICAgIG91dCArPSAnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtmbGV4LXdyYXA6d3JhcDtnYXA6OHB4O21hcmdpbi1ib3R0b206MTRweCI+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJraWNrZXIiPlByZW1pYcOnw7VlczwvZGl2PjxzbWFsbCBzdHlsZT0iY29sb3I6dmFyKC0taW5rLW11dGUpO2ZvbnQtc2l6ZToxMnB4Ij5wcm92aXPDs3JpbyDCtyBjb25maXJtYcOnw6NvIGF0w6kgbyBTaW11bGFkbyBGaW5hbDwvc21hbGw+PC9kaXY+JysKICAgICAgICAgICc8ZGl2IGNsYXNzPSJwcmVtaW9zIiBzdHlsZT0ibWFyZ2luLXRvcDowIj4nKwogICAgICAgICAgJzxkaXYgY2xhc3M9InByZW1pbyI+PGRpdiBjbGFzcz0icG9zIj4xwrogbHVnYXI8L2Rpdj48ZGl2IGNsYXNzPSJ3aGF0Ij5Ob3RlYm9vazwvZGl2PjwvZGl2PicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0icHJlbWlvIj48ZGl2IGNsYXNzPSJwb3MiPjLCuiBsdWdhcjwvZGl2PjxkaXYgY2xhc3M9IndoYXQiPlRhYmxldDwvZGl2PjwvZGl2PicrCiAgICAgICAgICAnPGRpdiBjbGFzcz0icHJlbWlvIj48ZGl2IGNsYXNzPSJwb3MiPjPCuiBhIDEwwro8L2Rpdj48ZGl2IGNsYXNzPSJ3aGF0Ij5LaXQgQ29ydWphIE1FRDwvZGl2PjwvZGl2PjwvZGl2Pic7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgb3V0ICs9ICc8ZGl2IGNsYXNzPSJraWNrZXIiIHN0eWxlPSJtYXJnaW4tYm90dG9tOjhweCI+UHJlbWlhw6fDo288L2Rpdj4nKwogICAgICAgICAgJzxwIHN0eWxlPSJmb250LXNpemU6MTRweDtjb2xvcjp2YXIoLS1pbmstZGltKTttYXJnaW46MCI+QSBwcmVtaWHDp8OjbyBkbyBBdG8gRmluYWwgc2Vyw6EgZGl2dWxnYWRhIGVtIGJyZXZlIG5vIGdydXBvIG9maWNpYWwuICcrCiAgICAgICAgICAnU2lnYSBhY3VtdWxhbmRvIHBvbnRvcyBuYSBqb3JuYWRhOiBxdWFuZG8gYXMgcmVncmFzIHNhw61yZW0sIHN1YSBwb3Npw6fDo28gasOhIGNvbnRhLjwvcD4nOwogICAgICB9CiAgICAgIC8vIG5vdGEgZGUgZmFpeGFzIHJlbW92aWRhIGEgcGVkaWRvIGRvIElnb3IgKDEyLzA4KQogICAgICBvdXQgKz0gJzwvZGl2Pic7CgogICAgICBvdXQgKz0gJzxkaXYgY2xhc3M9ImNhcmQiIHN0eWxlPSJwYWRkaW5nOjIwcHggOHB4IDhweCI+JysKICAgICAgICAnPGRpdiBzdHlsZT0iZGlzcGxheTpmbGV4O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2FsaWduLWl0ZW1zOmNlbnRlcjtwYWRkaW5nOjAgMjJweCA4cHgiPicrCiAgICAgICAgJzxkaXYgY2xhc3M9ImtpY2tlciI+Q2xhc3NpZmljYcOnw6NvIGdlcmFsPC9kaXY+PHNtYWxsIHN0eWxlPSJjb2xvcjp2YXIoLS1pbmstbXV0ZSk7Zm9udC1zaXplOjEycHgiPnRvcCAxMCArIHN1YSB2aXppbmhhbsOnYTwvc21hbGw+PC9kaXY+JysKICAgICAgICAnPHRhYmxlIGNsYXNzPSJyYW5rLXRhYmxlIj48dGhlYWQ+PHRyPjx0aCBzdHlsZT0id2lkdGg6NjBweCI+IzwvdGg+PHRoPlBhcnRpY2lwYW50ZTwvdGg+PHRoIHN0eWxlPSJ0ZXh0LWFsaWduOnJpZ2h0Ij5Qb250b3M8L3RoPjwvdHI+PC90aGVhZD48dGJvZHk+JzsKICAgICAgdmFyIGFudCA9IDA7CiAgICAgIChyLmJvYXJkIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uKHJvdyl7CiAgICAgICAgaWYgKGFudCAmJiByb3cucG9zID4gYW50ICsgMSkgewogICAgICAgICAgb3V0ICs9ICc8dHIgY2xhc3M9InJhbmstZ2FwIj48dGQgY29sc3Bhbj0iMyI+wrcgwrcgwrcgJysocm93LnBvcyAtIGFudCAtIDEpLnRvTG9jYWxlU3RyaW5nKCdwdC1CUicpKycgcGFydGljaXBhbnRlJysocm93LnBvcy1hbnQtMT4xPydzJzonJykrJyDCtyDCtyDCtzwvdGQ+PC90cj4nOwogICAgICAgIH0KICAgICAgICBhbnQgPSByb3cucG9zOwogICAgICAgIHZhciBtZWRhbCA9IHJvdy5wb3M9PT0xPyc8c3BhbiBjbGFzcz0ibWVkYWwgZyI+MTwvc3Bhbj4nOnJvdy5wb3M9PT0yPyc8c3BhbiBjbGFzcz0ibWVkYWwgcyI+Mjwvc3Bhbj4nOnJvdy5wb3M9PT0zPyc8c3BhbiBjbGFzcz0ibWVkYWwgYiI+Mzwvc3Bhbj4nOic8c3BhbiBjbGFzcz0ibWVkYWwiPicrcm93LnBvcysnPC9zcGFuPic7CiAgICAgICAgb3V0ICs9ICc8dHInKyhyb3cubWU\/JyBjbGFzcz0ibWUiJzonJykrJz48dGQ+JyttZWRhbCsnPC90ZD48dGQ+Jytlc2Mocm93Lm5vbWUpKyhyb3cubWU\/JyDCtyB2b2PDqic6JycpKyc8L3RkPjx0ZCBjbGFzcz0icHRzIj4nK2ZtdFB0cyhyb3cucHRzKSsnPC90ZD48L3RyPic7CiAgICAgIH0pOwogICAgICBvdXQgKz0gJzwvdGJvZHk+PC90YWJsZT48L2Rpdj4nOwogICAgICAkKCcjbWFpbicpLmlubmVySFRNTCA9IHBhZ2VIZWFkKCdDbGFzc2lmaWNhw6fDo28gZ2VyYWwgwrcgJyArIGoubGlnYSwgJ1N1YSBwb3Npw6fDo28gbmEgY2xhc3NpZmljYcOnw6NvJywKICAgICAgICAnU3VhIFBPU0nDh8ODTyDDqSBhIHN1YSBwb250dWHDp8OjbyB0b3RhbDogam9ybmFkYSBkZSBlc3R1ZG8gKGF0w6kgMi4wMDA6IHByZXNlbsOnYSwgcXVlc3TDtWVzIGUgU2ltdWxhZG8pICsgaW5kaWNhw6fDtWVzIChzZW0gdGV0byksIHR1ZG8gc29tYWRvLiBFbXBhdGU\/IE1haW9yIG5vdGEgbm8gU2ltdWxhZG8sIGRlcG9pcyBhY2VydG9zIG5hcyBxdWVzdMO1ZXMgZSBjaGVjay1pbiBtYWlzIGNlZG8uJywKICAgICAgICAoci50b3RhbF9wYXJ0aWNpcGFudGVzfHwxKS50b0xvY2FsZVN0cmluZygncHQtQlInKSArICcgcGFydGljaXBhbnRlcycpICsgb3V0OwogICAgfSkuY2F0Y2goZnVuY3Rpb24oKXsgdmFyIGVsID0gJCgnI3JrTG9hZCcpOyBpZiAoZWwpIGVsLnRleHRDb250ZW50ID0gJ1NlbSBjb25leMOjbyBjb20gbyByYW5raW5nLic7IH0pOwogIH0KCiAgLyogLS0tLS0tLS0tLSByb3RlYWRvciBkZSBhYmFzIC0tLS0tLS0tLS0gKi8KICB2YXIgVEFCUyA9IHsgaW5pY2lvOnJlbmRlckluaWNpbywgYXVsYXM6cmVuZGVyQXVsYXMsIHF1ZXN0b2VzOnJlbmRlclF1ZXN0b2VzLCBzaW11bGFkbzpyZW5kZXJTaW11bGFkbywgcmFua2luZzpyZW5kZXJSYW5raW5nIH07CiAgdmFyIFRBQl9BTElBUyA9IHsgY2hlY2tpbjonYXVsYXMnLCBtaXNzb2VzOidxdWVzdG9lcycgfTsKICBmdW5jdGlvbiBnbyh0YWIpewogICAgaWYgKFRBQl9BTElBU1t0YWJdKSB0YWIgPSBUQUJfQUxJQVNbdGFiXTsKICAgIGlmICghVEFCU1t0YWJdKSB0YWIgPSAnaW5pY2lvJzsKICAgIGlmIChwcm92YUF0aXZhKSB7IGd1YXJkYVByb3ZhTW9kYWwoZnVuY3Rpb24oKXsgZ28odGFiKTsgfSk7IHJldHVybjsgfQogICAgJCQoJy5uYXYtaXRlbScpLmZvckVhY2goZnVuY3Rpb24oYil7IGIuY2xhc3NMaXN0LnRvZ2dsZSgnb24nLCBiLmRhdGFzZXQudGFiID09PSB0YWIpOyB9KTsKICAgIFRBQlNbdGFiXSgpOwogICAgLy8gdHJhbnNpw6fDo28gZGUgdGVsYSAoc2Vuc2HDp8OjbyBkZSBhcHA6IGNhZGEgYWJhIGVudHJhIGFuaW1hZGEpCiAgICB2YXIgbUVsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21haW4nKTsKICAgIGlmIChtRWwpIHsgbUVsLmNsYXNzTGlzdC5yZW1vdmUoJ3ZpZXctYW5pbScpOyB2b2lkIG1FbC5vZmZzZXRXaWR0aDsgbUVsLmNsYXNzTGlzdC5hZGQoJ3ZpZXctYW5pbScpOyB9CiAgICBpZiAobG9jYXRpb24uaGFzaCAhPT0gJyMnK3RhYikgaGlzdG9yeS5yZXBsYWNlU3RhdGUobnVsbCwgJycsICcjJyt0YWIpOwogICAgd2luZG93LnNjcm9sbFRvKDAsMCk7CiAgfQogICQkKCcubmF2LWl0ZW0nKS5mb3JFYWNoKGZ1bmN0aW9uKGIpeyBiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oKXsgZ28oYi5kYXRhc2V0LnRhYik7IH0pOyB9KTsKICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignaGFzaGNoYW5nZScsIGZ1bmN0aW9uKCl7IGdvKGxvY2F0aW9uLmhhc2guc2xpY2UoMSkpOyB9KTsKICBnbyhsb2NhdGlvbi5oYXNoLnNsaWNlKDEpIHx8ICdpbmljaW8nKTsKfQoKLyogUGFpbmVsIGFkbWluOiDDqSBidW5kbGUgUFLDk1BSSU8gKGFkbWluLmpzL2FkbWluLmh0bWwvYWRtaW4uY3NzKSBjb20gZ2F0ZQogICBzZXJ2ZXItc2lkZS4gTyBwcm90w7N0aXBvIGluaXRBZG1pbiAoY2hhdmUgZml4YSBubyBjw7NkaWdvICsgZmxhZyBlbQogICBsb2NhbFN0b3JhZ2UsIFpFUk8gdmFsaWRhw6fDo28gbm8gc2Vydmlkb3IpIGZvaSBSRU1PVklETyBuYSBhdWRpdG9yaWEgZGUKICAgMTEvMDg6IG51bmNhIHJvZGF2YSBlbSBwcm9kdcOnw6NvIChhIHDDoWdpbmEgL3BhaW5lbC8gY2FycmVnYSBhZG1pbi5qcywgbsOjbwogICBlc3RlIGFwcC5qcykgZSBlbWJhcmNhdmEgdW1hIGNoYXZlIGZhbHNhIG5vIGJ1bmRsZSBww7pibGljbyBkZSB0b2RvIGFsdW5vLiAqLwoKLyogLS0tLS0tLS0tLS0tLS0tLSBib290IC0tLS0tLS0tLS0tLS0tLS0gKi8KKGZ1bmN0aW9uKCl7CiAgdmFyIHBhZ2UgPSB3aW5kb3cuX19BRl9QQUdFOwogIHRyeSB7CiAgICBpZiAocGFnZSA9PT0gJ2xhbmRpbmcnKSBpbml0TGFuZGluZygpOwogICAgZWxzZSBpZiAocGFnZSA9PT0gJ2F1dGgtY2FkYXN0cm8nKSByZW5kZXJBdXRoKCdjYWRhc3RybycpOwogICAgZWxzZSBpZiAocGFnZSA9PT0gJ2F1dGgtYWNlc3NhcicpIHJlbmRlckF1dGgoJ2FjZXNzYXInKTsKICAgIGVsc2UgaWYgKHBhZ2UgPT09ICdhcmVhJykgaW5pdEFyZWEoKTsKICB9IGNhdGNoIChlKSB7CiAgICAvLyBzZSBhIG1vbnRhZ2VtIHF1ZWJyYXIgKGV4Ljogc8OzIGVtIGNlcnRvIFNhZmFyaSksIE7Dg08gZGVpeGEgdGVsYSBicmFuY2EKICAgIC8vIG11ZGE6IHB1YmxpY2EgYSBjYXVzYSBuYSB0ZWxhIChvIGFsdW5vIGNvbnNlZ3VlIG1hbmRhciBwcmludCkgZSBzaW5hbGl6YQogICAgLy8gcHJvIHdhdGNoZG9nIGRvIHB1YmxpY2Fkb3IuIEF1ZGl0b3JpYSAxMS8wOC4KICAgIHdpbmRvdy5fX2FmQm9vdEVycm8gPSAoZSAmJiAoZS5tZXNzYWdlIHx8IGUubmFtZSkpIHx8IFN0cmluZyhlKTsKICAgIHRyeSB7CiAgICAgIHZhciBib3ggPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbWFpbicpIHx8IGRvY3VtZW50LmJvZHk7CiAgICAgIHZhciBkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgIGQuc3R5bGUuY3NzVGV4dCA9ICdwYWRkaW5nOjI0cHg7bWFyZ2luOjE2cHg7Ym9yZGVyLXJhZGl1czoxMnB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkICNEOTU2NEE7Zm9udDoxNHB4LzEuNiAtYXBwbGUtc3lzdGVtLHNhbnMtc2VyaWY7Y29sb3I6IzBFMkEyRTttYXgtd2lkdGg6NTIwcHgnOwogICAgICBkLmlubmVySFRNTCA9ICc8YiBzdHlsZT0iY29sb3I6I0IzMjYxRSI+TsOjbyBjb25zZWd1aSBhYnJpciBlc3RhIHRlbGEgbm8gc2V1IG5hdmVnYWRvci48L2I+PGJyPicgKwogICAgICAgICdBdHVhbGl6ZSBhIHDDoWdpbmEuIFNlIGNvbnRpbnVhciwgdGlyZSB1bSBwcmludCBkZXN0YSBtZW5zYWdlbSBlIGVudmllIGFvIHN1cG9ydGUuPGJyPicgKwogICAgICAgICc8c21hbGwgc3R5bGU9ImNvbG9yOiM3RTk1OUIiPkRldGFsaGUgdMOpY25pY28gKCcgKyBwYWdlICsgJyk6ICcgKyBlc2Mod2luZG93Ll9fYWZCb290RXJybykuc2xpY2UoMCwxNjApICsgJzwvc21hbGw+JzsKICAgICAgdmFyIGVzcCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhZi1lc3BlcmEnKTsgaWYgKGVzcCkgZXNwLnJlbW92ZSgpOwogICAgICBib3guYXBwZW5kQ2hpbGQoZCk7CiAgICB9IGNhdGNoIChlMikge30KICAgIGlmICh3aW5kb3cuX19hZkVudmlhKSB7IHRyeSB7IHdpbmRvdy5fX2FmRW52aWEoJ2Jvb3RfZXJybzonICsgU3RyaW5nKHdpbmRvdy5fX2FmQm9vdEVycm8pLnNsaWNlKDAsODApKTsgfSBjYXRjaChlMyl7fSB9CiAgfQp9KSgpOwo=';function inject(){var bin=atob(SRC),code;try{code=new TextDecoder('utf-8').decode(Uint8Array.from(bin,function(c){return c.charCodeAt(0);}));}catch(e){try{code=decodeURIComponent(escape(bin));}catch(e2){code=bin;}}var s=document.createElement('script');s.id='af-js';s.text=code;document.body.appendChild(s);}function boot(){if(document.body){try{inject();}catch(e){window.__afBootErro=(e&&(e.message||e.name))||String(e);var alvo=document.getElementById('main')||document.body;var esp=document.getElementById('af-espera');if(esp)esp.remove();if(alvo){var d=document.createElement('div');d.style.cssText='padding:24px;margin:16px;border-radius:12px;background:#fff;border:1px solid #D9564A;font:14px\/1.6 -apple-system,sans-serif;color:#0E2A2E;max-width:520px';d.textContent='N\u00e3o foi poss\u00edvel abrir no seu navegador. Atualize a p\u00e1gina; se continuar, tire um print e envie ao suporte. ('+String(window.__afBootErro).slice(0,120)+')';alvo.appendChild(d);}}}else{setTimeout(boot,20);}}boot();})();<\/script>\n\n<script>\n(function () {\n  \"use strict\";\n  if (window.__estrategiaUtmV3) return;\n  window.__estrategiaUtmV3 = 1;\n  const UTM_PARAMS = [\n    \"utm_source\",\n    \"utm_medium\",\n    \"utm_campaign\",\n    \"utm_content\",\n    \"utm_term\",\n  ];\n  const CLID_PARAMS = [\"ttclid\", \"fbclid\", \"gclid\"];\n  const OWNED_HOSTS = [\n    \"estrategia.com\",\n    \"estrategiaconcursos.com.br\",\n    \"estrategiamed.com.br\",\n    \"estrategiamilitares.com.br\",\n    \"estrategiavestibulares.com.br\",\n    \"estrategiacarreirajuridica.com.br\",\n    \"estrategiaoab.com.br\",\n    \"estrategiamedicina.com.br\",\n  ];\n  const STORAGE_KEY = \"estrategia_utm\";\n  const COOKIE_NAME = \"estrategia_utm\";\n  const COOKIE_HOURS = 48;   \/\/ janela de atribuicao do cookie\n  function rootCookieDomain() {\n    const host = window.location.hostname;\n    const match = OWNED_HOSTS.find(\n      (d) => host === d || host.endsWith(\".\" + d)\n    );\n    return match ? \".\" + match : null;\n  }\n  function writeStore(obj) {\n    const json = JSON.stringify({ ts: Date.now(), v: obj });\n    try {\n      window.localStorage.setItem(STORAGE_KEY, json);\n    } catch (e) {\n      \/* modo privado \/ storage bloqueado *\/\n    }\n    const domain = rootCookieDomain();\n    if (!domain) return;\n    const expires = new Date(\n      Date.now() + COOKIE_HOURS * 36e5\n    ).toUTCString();\n    document.cookie =\n      COOKIE_NAME +\n      \"=\" +\n      encodeURIComponent(json) +\n      \"; expires=\" + expires +\n      \"; path=\/; domain=\" + domain +\n      \"; SameSite=Lax; Secure\";\n  }\n  function unwrap(json) {\n    let payload;\n    try {\n      payload = JSON.parse(json);\n    } catch (e) {\n      return null;\n    }\n    if (!payload || typeof payload !== \"object\") return null;\n    if (!payload.ts || !payload.v) return null;\n    if (Date.now() - payload.ts > COOKIE_HOURS * 36e5) return null;\n    return payload.v;\n  }\n  function readStore() {\n    const cookie = document.cookie\n      .split(\"; \")\n      .find((row) => row.indexOf(COOKIE_NAME + \"=\") === 0);\n    if (cookie) {\n      const v = unwrap(\n        decodeURIComponent(cookie.slice(COOKIE_NAME.length + 1))\n      );\n      if (v) return v;\n    }\n    try {\n      const raw = window.localStorage.getItem(STORAGE_KEY);\n      if (raw) return unwrap(raw);\n    } catch (e) {\n      \/* storage bloqueado *\/\n    }\n    return null;\n  }\n  function collectFromUrl() {\n    const urlParams = new URLSearchParams(window.location.search);\n    const found = {};\n    UTM_PARAMS.concat(CLID_PARAMS).forEach((param) => {\n      const value = urlParams.get(param);\n      if (value) found[param] = value;\n    });\n    return Object.keys(found).length ? found : null;\n  }\n  function resolveAttribution() {\n    const fromUrl = collectFromUrl();\n    if (fromUrl) {\n      writeStore(fromUrl);\n      return fromUrl;\n    }\n    return readStore();\n  }\n  const ATTRIBUTION = resolveAttribution();\n  function isOwnedUrl(url) {\n    try {\n      const host = new URL(url, window.location.origin).hostname;\n      return OWNED_HOSTS.some((d) => host === d || host.endsWith(\".\" + d));\n    } catch (e) {\n      return false;\n    }\n  }\n  function appendParamsToHref(href, params) {\n    try {\n      const url = new URL(href, window.location.origin);\n      Object.keys(params).forEach((key) => {\n        if (!url.searchParams.has(key)) {\n          url.searchParams.set(key, params[key]);\n        }\n      });\n      return url.toString();\n    } catch (e) {\n      return href;\n    }\n  }\n  function eachMatch(root, selector, fn) {\n    if (root.nodeType === 1) {\n      if (root.matches) {\n        if (root.matches(selector)) fn(root);\n      }\n    }\n    root.querySelectorAll(selector).forEach(fn);\n  }\n  function decorateLink(el) {\n    const href = el.getAttribute(\"href\");\n    if (!href || href.charAt(0) === \"#\") return;\n    if (!isOwnedUrl(href)) return;\n    let target;\n    try {\n      target = new URL(href, window.location.origin);\n    } catch (e) {\n      return;\n    }\n    if (target.hostname === window.location.hostname) return;\n    el.setAttribute(\"href\", appendParamsToHref(href, ATTRIBUTION));\n  }\n  function propagateToLinks(root) {\n    root = root || document;\n    if (!ATTRIBUTION) return;\n    eachMatch(root, \"a[href]\", decorateLink);\n  }\n  function injectIntoForms(root) {\n    root = root || document;\n    if (!ATTRIBUTION) return;\n    eachMatch(root, \"form\", function (form) {\n      if (form.dataset.utmInjected === \"1\") return;\n      Object.keys(ATTRIBUTION).forEach((param) => {\n        let input = form.querySelector('input[name=\"' + param + '\"]');\n        if (!input) {\n          input = document.createElement(\"input\");\n          input.type = \"hidden\";\n          input.name = param;\n          form.appendChild(input);\n        }\n        input.value = ATTRIBUTION[param];\n      });\n      form.dataset.utmInjected = \"1\";\n    });\n  }\n  function observeDom() {\n    if (!document.body) return;\n    const observer = new MutationObserver((mutations) => {\n      mutations.forEach((mutation) => {\n        mutation.addedNodes.forEach((node) => {\n          if (node.nodeType !== 1) return;\n          propagateToLinks(node);\n          injectIntoForms(node);\n        });\n      });\n    });\n    observer.observe(document.body, { childList: true, subtree: true });\n  }\n  function init() {\n    propagateToLinks();\n    injectIntoForms();\n    observeDom();\n  }\n  if (document.readyState === \"loading\") {\n    document.addEventListener(\"DOMContentLoaded\", init);\n  } else {\n    init();\n  }\n})();\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Carregando o acesso ao Ato Final\u2026Ative o JavaScript do navegador para acessar a plataforma.<\/p>\n","protected":false},"author":78,"featured_media":0,"parent":393386,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_et_pb_use_builder":"","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[],"tags":[],"class_list":["post-393388","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/pages\/393388","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/users\/78"}],"replies":[{"embeddable":true,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/comments?post=393388"}],"version-history":[{"count":11,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/pages\/393388\/revisions"}],"predecessor-version":[{"id":395747,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/pages\/393388\/revisions\/395747"}],"up":[{"embeddable":true,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/pages\/393386"}],"wp:attachment":[{"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/media?parent=393388"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/categories?post=393388"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mkt.estrategia.com\/med\/wp-json\/wp\/v2\/tags?post=393388"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}