react-install-command
Version:
A React component for rendering a 'npm install package-name' command block. Supports multiple package managers and themes. Drop it into your MDX code, a ShadCN UI component, a Tailwind codebase, use built-in styles or go unstyled. You choose.
3 lines • 180 kB
JavaScript
"use client";
import{createElement as z,forwardRef as bt,useState as Q,useEffect as rt}from"react";var yt=Object.freeze({left:0,top:0,width:16,height:16}),_=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),Z=Object.freeze({...yt,..._}),J=Object.freeze({...Z,body:"",hidden:!1});function Vt(t,n){let o={};!t.hFlip!=!n.hFlip&&(o.hFlip=!0),!t.vFlip!=!n.vFlip&&(o.vFlip=!0);let i=((t.rotate||0)+(n.rotate||0))%4;return i&&(o.rotate=i),o}function st(t,n){let o=Vt(t,n);for(let i in J)i in _?i in t&&!(i in o)&&(o[i]=_[i]):i in n?o[i]=n[i]:i in t&&(o[i]=t[i]);return o}function Wt(t,n){let o=t.icons,i=t.aliases||Object.create(null),e=Object.create(null);function r(s){if(o[s])return e[s]=[];if(!(s in e)){e[s]=null;let c=i[s]&&i[s].parent,a=c&&r(c);a&&(e[s]=[c].concat(a))}return e[s]}return Object.keys(o).concat(Object.keys(i)).forEach(r),e}function _t(t,n,o){let i=t.icons,e=t.aliases||Object.create(null),r={};function s(c){r=st(i[c]||e[c],r)}return s(n),o.forEach(s),st(t,r)}function xt(t,n){let o=[];if(typeof t!="object"||typeof t.icons!="object")return o;t.not_found instanceof Array&&t.not_found.forEach(e=>{n(e,null),o.push(e)});let i=Wt(t);for(let e in i){let r=i[e];r&&(n(e,_t(t,e,r)),o.push(e))}return o}var Ht={provider:"",aliases:{},not_found:{},...yt};function U(t,n){for(let o in n)if(o in t&&typeof t[o]!=typeof n[o])return!1;return!0}function vt(t){if(typeof t!="object"||t===null)return null;let n=t;if(typeof n.prefix!="string"||!t.icons||typeof t.icons!="object"||!U(t,Ht))return null;let o=n.icons;for(let e in o){let r=o[e];if(!e||typeof r.body!="string"||!U(r,J))return null}let i=n.aliases||Object.create(null);for(let e in i){let r=i[e],s=r.parent;if(!e||typeof s!="string"||!o[s]&&!i[s]||!U(r,J))return null}return n}var It=/^[a-z0-9]+(-[a-z0-9]+)*$/,H=(t,n,o,i="")=>{let e=t.split(":");if(t.slice(0,1)==="@"){if(e.length<2||e.length>3)return null;i=e.shift().slice(1)}if(e.length>3||!e.length)return null;if(e.length>1){let c=e.pop(),a=e.pop(),l={provider:e.length>0?e[0]:i,prefix:a,name:c};return n&&!V(l)?null:l}let r=e[0],s=r.split("-");if(s.length>1){let c={provider:i,prefix:s.shift(),name:s.join("-")};return n&&!V(c)?null:c}if(o&&i===""){let c={provider:i,prefix:"",name:r};return n&&!V(c,o)?null:c}return null},V=(t,n)=>t?!!((n&&t.prefix===""||t.prefix)&&t.name):!1,ct=Object.create(null);function Qt(t,n){return{provider:t,prefix:n,icons:Object.create(null),missing:new Set}}function N(t,n){let o=ct[t]||(ct[t]=Object.create(null));return o[n]||(o[n]=Qt(t,n))}function St(t,n){return vt(n)?xt(n,(o,i)=>{i?t.icons[o]=i:t.missing.add(o)}):[]}function Ut(t,n,o){try{if(typeof o.body=="string")return t.icons[n]={...o},!0}catch{}return!1}var B=!1;function kt(t){return typeof t=="boolean"&&(B=t),B}function at(t){let n=typeof t=="string"?H(t,!0,B):t;if(n){let o=N(n.provider,n.prefix),i=n.name;return o.icons[i]||(o.missing.has(i)?null:void 0)}}function qt(t,n){let o=H(t,!0,B);if(!o)return!1;let i=N(o.provider,o.prefix);return n?Ut(i,o.name,n):(i.missing.add(o.name),!0)}function zt(t,n){if(typeof t!="object")return!1;if(typeof n!="string"&&(n=t.provider||""),B&&!n&&!t.prefix){let e=!1;return vt(t)&&(t.prefix="",xt(t,(r,s)=>{qt(r,s)&&(e=!0)})),e}let o=t.prefix;if(!V({provider:n,prefix:o,name:"a"}))return!1;let i=N(n,o);return!!St(i,t)}var Pt=Object.freeze({width:null,height:null}),wt=Object.freeze({...Pt,..._}),Jt=/(-?[0-9.]*[0-9]+[0-9.]*)/g,Xt=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function lt(t,n,o){if(n===1)return t;if(o=o||100,typeof t=="number")return Math.ceil(t*n*o)/o;if(typeof t!="string")return t;let i=t.split(Jt);if(i===null||!i.length)return t;let e=[],r=i.shift(),s=Xt.test(r);for(;;){if(s){let c=parseFloat(r);isNaN(c)?e.push(r):e.push(Math.ceil(c*n*o)/o)}else e.push(r);if(r=i.shift(),r===void 0)return e.join("");s=!s}}function Yt(t,n="defs"){let o="",i=t.indexOf("<"+n);for(;i>=0;){let e=t.indexOf(">",i),r=t.indexOf("</"+n);if(e===-1||r===-1)break;let s=t.indexOf(">",r);if(s===-1)break;o+=t.slice(e+1,r).trim(),t=t.slice(0,i).trim()+t.slice(s+1)}return{defs:o,content:t}}function Kt(t,n){return t?"<defs>"+t+"</defs>"+n:n}function Zt(t,n,o){let i=Yt(t);return Kt(i.defs,n+i.content+o)}var te=t=>t==="unset"||t==="undefined"||t==="none";function ee(t,n){let o={...Z,...t},i={...wt,...n},e={left:o.left,top:o.top,width:o.width,height:o.height},r=o.body;[o,i].forEach(I=>{let g=[],p=I.hFlip,T=I.vFlip,v=I.rotate;p?T?v+=2:(g.push("translate("+(e.width+e.left).toString()+" "+(0-e.top).toString()+")"),g.push("scale(-1 1)"),e.top=e.left=0):T&&(g.push("translate("+(0-e.left).toString()+" "+(e.height+e.top).toString()+")"),g.push("scale(1 -1)"),e.top=e.left=0);let S;switch(v<0&&(v-=Math.floor(v/4)*4),v=v%4,v){case 1:S=e.height/2+e.top,g.unshift("rotate(90 "+S.toString()+" "+S.toString()+")");break;case 2:g.unshift("rotate(180 "+(e.width/2+e.left).toString()+" "+(e.height/2+e.top).toString()+")");break;case 3:S=e.width/2+e.left,g.unshift("rotate(-90 "+S.toString()+" "+S.toString()+")");break}v%2===1&&(e.left!==e.top&&(S=e.left,e.left=e.top,e.top=S),e.width!==e.height&&(S=e.width,e.width=e.height,e.height=S)),g.length&&(r=Zt(r,'<g transform="'+g.join(" ")+'">',"</g>"))});let s=i.width,c=i.height,a=e.width,l=e.height,f,d;s===null?(d=c===null?"1em":c==="auto"?l:c,f=lt(d,a/l)):(f=s==="auto"?a:s,d=c===null?lt(f,l/a):c==="auto"?l:c);let u={},m=(I,g)=>{te(g)||(u[I]=g.toString())};m("width",f),m("height",d);let b=[e.left,e.top,a,l];return u.viewBox=b.join(" "),{attributes:u,viewBox:b,body:r}}var ne=/\sid="(\S+)"/g,oe="IconifyId"+Date.now().toString(16)+(Math.random()*16777216|0).toString(16),ie=0;function re(t,n=oe){let o=[],i;for(;i=ne.exec(t);)o.push(i[1]);if(!o.length)return t;let e="suffix"+(Math.random()*16777216|Date.now()).toString(16);return o.forEach(r=>{let s=typeof n=="function"?n(r):n+(ie++).toString(),c=r.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");t=t.replace(new RegExp('([#;"])('+c+')([")]|\\.[a-z])',"g"),"$1"+s+e+"$3")}),t=t.replace(new RegExp(e,"g"),""),t}var X=Object.create(null);function se(t,n){X[t]=n}function Y(t){return X[t]||X[""]}function tt(t){let n;if(typeof t.resources=="string")n=[t.resources];else if(n=t.resources,!(n instanceof Array)||!n.length)return null;return{resources:n,path:t.path||"/",maxURL:t.maxURL||500,rotate:t.rotate||750,timeout:t.timeout||5e3,random:t.random===!0,index:t.index||0,dataAfterTimeout:t.dataAfterTimeout!==!1}}var et=Object.create(null),A=["https://api.simplesvg.com","https://api.unisvg.com"],W=[];for(;A.length>0;)A.length===1||Math.random()>.5?W.push(A.shift()):W.push(A.pop());et[""]=tt({resources:["https://api.iconify.design"].concat(W)});function ce(t,n){let o=tt(n);return o===null?!1:(et[t]=o,!0)}function nt(t){return et[t]}var ae=()=>{let t;try{if(t=fetch,typeof t=="function")return t}catch{}},ft=ae();function le(t,n){let o=nt(t);if(!o)return 0;let i;if(!o.maxURL)i=0;else{let e=0;o.resources.forEach(s=>{e=Math.max(e,s.length)});let r=n+".json?icons=";i=o.maxURL-e-o.path.length-r.length}return i}function fe(t){return t===404}var ue=(t,n,o)=>{let i=[],e=le(t,n),r="icons",s={type:r,provider:t,prefix:n,icons:[]},c=0;return o.forEach((a,l)=>{c+=a.length+1,c>=e&&l>0&&(i.push(s),s={type:r,provider:t,prefix:n,icons:[]},c=a.length),s.icons.push(a)}),i.push(s),i};function de(t){if(typeof t=="string"){let n=nt(t);if(n)return n.path}return"/"}var pe=(t,n,o)=>{if(!ft){o("abort",424);return}let i=de(n.provider);switch(n.type){case"icons":{let r=n.prefix,c=n.icons.join(","),a=new URLSearchParams({icons:c});i+=r+".json?"+a.toString();break}case"custom":{let r=n.uri;i+=r.slice(0,1)==="/"?r.slice(1):r;break}default:o("abort",400);return}let e=503;ft(t+i).then(r=>{let s=r.status;if(s!==200){setTimeout(()=>{o(fe(s)?"abort":"next",s)});return}return e=501,r.json()}).then(r=>{if(typeof r!="object"||r===null){setTimeout(()=>{r===404?o("abort",r):o("next",e)});return}setTimeout(()=>{o("success",r)})}).catch(()=>{o("next",e)})},ge={prepare:ue,send:pe};function he(t){let n={loaded:[],missing:[],pending:[]},o=Object.create(null);t.sort((e,r)=>e.provider!==r.provider?e.provider.localeCompare(r.provider):e.prefix!==r.prefix?e.prefix.localeCompare(r.prefix):e.name.localeCompare(r.name));let i={provider:"",prefix:"",name:""};return t.forEach(e=>{if(i.name===e.name&&i.prefix===e.prefix&&i.provider===e.provider)return;i=e;let r=e.provider,s=e.prefix,c=e.name,a=o[r]||(o[r]=Object.create(null)),l=a[s]||(a[s]=N(r,s)),f;c in l.icons?f=n.loaded:s===""||l.missing.has(c)?f=n.missing:f=n.pending;let d={provider:r,prefix:s,name:c};f.push(d)}),n}function Ct(t,n){t.forEach(o=>{let i=o.loaderCallbacks;i&&(o.loaderCallbacks=i.filter(e=>e.id!==n))})}function me(t){t.pendingCallbacksFlag||(t.pendingCallbacksFlag=!0,setTimeout(()=>{t.pendingCallbacksFlag=!1;let n=t.loaderCallbacks?t.loaderCallbacks.slice(0):[];if(!n.length)return;let o=!1,i=t.provider,e=t.prefix;n.forEach(r=>{let s=r.icons,c=s.pending.length;s.pending=s.pending.filter(a=>{if(a.prefix!==e)return!0;let l=a.name;if(t.icons[l])s.loaded.push({provider:i,prefix:e,name:l});else if(t.missing.has(l))s.missing.push({provider:i,prefix:e,name:l});else return o=!0,!0;return!1}),s.pending.length!==c&&(o||Ct([t],r.id),r.callback(s.loaded.slice(0),s.missing.slice(0),s.pending.slice(0),r.abort))})}))}var be=0;function ye(t,n,o){let i=be++,e=Ct.bind(null,o,i);if(!n.pending.length)return e;let r={id:i,icons:n,callback:t,abort:e};return o.forEach(s=>{(s.loaderCallbacks||(s.loaderCallbacks=[])).push(r)}),e}function xe(t,n=!0,o=!1){let i=[];return t.forEach(e=>{let r=typeof e=="string"?H(e,n,o):e;r&&i.push(r)}),i}var ve={resources:[],index:0,timeout:2e3,rotate:750,random:!1,dataAfterTimeout:!1};function Ie(t,n,o,i){let e=t.resources.length,r=t.random?Math.floor(Math.random()*e):t.index,s;if(t.random){let h=t.resources.slice(0);for(s=[];h.length>1;){let C=Math.floor(Math.random()*h.length);s.push(h[C]),h=h.slice(0,C).concat(h.slice(C+1))}s=s.concat(h)}else s=t.resources.slice(r).concat(t.resources.slice(0,r));let c=Date.now(),a="pending",l=0,f,d=null,u=[],m=[];typeof i=="function"&&m.push(i);function b(){d&&(clearTimeout(d),d=null)}function I(){a==="pending"&&(a="aborted"),b(),u.forEach(h=>{h.status==="pending"&&(h.status="aborted")}),u=[]}function g(h,C){C&&(m=[]),typeof h=="function"&&m.push(h)}function p(){return{startTime:c,payload:n,status:a,queriesSent:l,queriesPending:u.length,subscribe:g,abort:I}}function T(){a="failed",m.forEach(h=>{h(void 0,f)})}function v(){u.forEach(h=>{h.status==="pending"&&(h.status="aborted")}),u=[]}function S(h,C,O){let M=C!=="success";switch(u=u.filter(j=>j!==h),a){case"pending":break;case"failed":if(M||!t.dataAfterTimeout)return;break;default:return}if(C==="abort"){f=O,T();return}if(M){f=O,u.length||(s.length?E():T());return}if(b(),v(),!t.random){let j=t.resources.indexOf(h.resource);j!==-1&&j!==t.index&&(t.index=j)}a="completed",m.forEach(j=>{j(O)})}function E(){if(a!=="pending")return;b();let h=s.shift();if(h===void 0){if(u.length){d=setTimeout(()=>{b(),a==="pending"&&(v(),T())},t.timeout);return}T();return}let C={status:"pending",resource:h,callback:(O,M)=>{S(C,O,M)}};u.push(C),l++,d=setTimeout(E,t.rotate),o(h,n,C.callback)}return setTimeout(E),p}function Tt(t){let n={...ve,...t},o=[];function i(){o=o.filter(c=>c().status==="pending")}function e(c,a,l){let f=Ie(n,c,a,(d,u)=>{i(),l&&l(d,u)});return o.push(f),f}function r(c){return o.find(a=>c(a))||null}return{query:e,find:r,setIndex:c=>{n.index=c},getIndex:()=>n.index,cleanup:i}}function ut(){}var q=Object.create(null);function Se(t){if(!q[t]){let n=nt(t);if(!n)return;let o=Tt(n),i={config:n,redundancy:o};q[t]=i}return q[t]}function ke(t,n,o){let i,e;if(typeof t=="string"){let r=Y(t);if(!r)return o(void 0,424),ut;e=r.send;let s=Se(t);s&&(i=s.redundancy)}else{let r=tt(t);if(r){i=Tt(r);let s=t.resources?t.resources[0]:"",c=Y(s);c&&(e=c.send)}}return!i||!e?(o(void 0,424),ut):i.query(n,e,o)().abort}function dt(){}function Pe(t){t.iconsLoaderFlag||(t.iconsLoaderFlag=!0,setTimeout(()=>{t.iconsLoaderFlag=!1,me(t)}))}function we(t){let n=[],o=[];return t.forEach(i=>{(i.match(It)?n:o).push(i)}),{valid:n,invalid:o}}function D(t,n,o){function i(){let e=t.pendingIcons;n.forEach(r=>{e&&e.delete(r),t.icons[r]||t.missing.add(r)})}if(o&&typeof o=="object")try{if(!St(t,o).length){i();return}}catch(e){console.error(e)}i(),Pe(t)}function pt(t,n){t instanceof Promise?t.then(o=>{n(o)}).catch(()=>{n(null)}):n(t)}function Ce(t,n){t.iconsToLoad?t.iconsToLoad=t.iconsToLoad.concat(n).sort():t.iconsToLoad=n,t.iconsQueueFlag||(t.iconsQueueFlag=!0,setTimeout(()=>{t.iconsQueueFlag=!1;let{provider:o,prefix:i}=t,e=t.iconsToLoad;if(delete t.iconsToLoad,!e||!e.length)return;let r=t.loadIcon;if(t.loadIcons&&(e.length>1||!r)){pt(t.loadIcons(e,i,o),f=>{D(t,e,f)});return}if(r){e.forEach(f=>{let d=r(f,i,o);pt(d,u=>{let m=u?{prefix:i,icons:{[f]:u}}:null;D(t,[f],m)})});return}let{valid:s,invalid:c}=we(e);if(c.length&&D(t,c,null),!s.length)return;let a=i.match(It)?Y(o):null;if(!a){D(t,s,null);return}a.prepare(o,i,s).forEach(f=>{ke(o,f,d=>{D(t,f.icons,d)})})}))}var Te=(t,n)=>{let o=xe(t,!0,kt()),i=he(o);if(!i.pending.length){let a=!0;return n&&setTimeout(()=>{a&&n(i.loaded,i.missing,i.pending,dt)}),()=>{a=!1}}let e=Object.create(null),r=[],s,c;return i.pending.forEach(a=>{let{provider:l,prefix:f}=a;if(f===c&&l===s)return;s=l,c=f,r.push(N(l,f));let d=e[l]||(e[l]=Object.create(null));d[f]||(d[f]=[])}),i.pending.forEach(a=>{let{provider:l,prefix:f,name:d}=a,u=N(l,f),m=u.pendingIcons||(u.pendingIcons=new Set);m.has(d)||(m.add(d),e[l][f].push(d))}),r.forEach(a=>{let l=e[a.provider][a.prefix];l.length&&Ce(a,l)}),n?ye(n,i,r):dt};function $e(t,n){let o={...t};for(let i in n){let e=n[i],r=typeof e;i in Pt?(e===null||e&&(r==="string"||r==="number"))&&(o[i]=e):r===typeof o[i]&&(o[i]=i==="rotate"?e%4:e)}return o}var je=/[\s,]+/;function Ee(t,n){n.split(je).forEach(o=>{switch(o.trim()){case"horizontal":t.hFlip=!0;break;case"vertical":t.vFlip=!0;break}})}function Oe(t,n=0){let o=t.replace(/^-?[0-9.]*/,"");function i(e){for(;e<0;)e+=4;return e%4}if(o===""){let e=parseInt(t);return isNaN(e)?0:i(e)}else if(o!==t){let e=0;switch(o){case"%":e=25;break;case"deg":e=90}if(e){let r=parseFloat(t.slice(0,t.length-o.length));return isNaN(r)?0:(r=r/e,r%1===0?i(r):0)}}return n}function Me(t,n){let o=t.indexOf("xlink:")===-1?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(let i in n)o+=" "+i+'="'+n[i]+'"';return'<svg xmlns="http://www.w3.org/2000/svg"'+o+">"+t+"</svg>"}function Ne(t){return t.replace(/"/g,"'").replace(/%/g,"%25").replace(/#/g,"%23").replace(/</g,"%3C").replace(/>/g,"%3E").replace(/\s+/g," ")}function Re(t){return"data:image/svg+xml,"+Ne(t)}function Le(t){return'url("'+Re(t)+'")'}var F;function Ae(){try{F=window.trustedTypes.createPolicy("iconify",{createHTML:t=>t})}catch{F=null}}function De(t){return F===void 0&&Ae(),F?F.createHTML(t):t}var $t={...wt,inline:!1},Fe={xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink","aria-hidden":!0,role:"img"},Be={display:"inline-block"},K={backgroundColor:"currentColor"},jt={backgroundColor:"transparent"},gt={Image:"var(--svg)",Repeat:"no-repeat",Size:"100% 100%"},ht={WebkitMask:K,mask:K,background:jt};for(let t in ht){let n=ht[t];for(let o in gt)n[t+o]=gt[o]}var Ge={...$t,inline:!0};function mt(t){return t+(t.match(/^[-0-9.]+$/)?"px":"")}var Ve=(t,n,o)=>{let i=n.inline?Ge:$t,e=$e(i,n),r=n.mode||"svg",s={},c=n.style||{},a={...r==="svg"?Fe:{}};if(o){let g=H(o,!1,!0);if(g){let p=["iconify"],T=["provider","prefix"];for(let v of T)g[v]&&p.push("iconify--"+g[v]);a.className=p.join(" ")}}for(let g in n){let p=n[g];if(p!==void 0)switch(g){case"icon":case"style":case"children":case"onLoad":case"mode":case"ssr":break;case"_ref":a.ref=p;break;case"className":a[g]=(a[g]?a[g]+" ":"")+p;break;case"inline":case"hFlip":case"vFlip":e[g]=p===!0||p==="true"||p===1;break;case"flip":typeof p=="string"&&Ee(e,p);break;case"color":s.color=p;break;case"rotate":typeof p=="string"?e[g]=Oe(p):typeof p=="number"&&(e[g]=p);break;case"ariaHidden":case"aria-hidden":p!==!0&&p!=="true"&&delete a["aria-hidden"];break;default:i[g]===void 0&&(a[g]=p)}}let l=ee(t,e),f=l.attributes;if(e.inline&&(s.verticalAlign="-0.125em"),r==="svg"){a.style={...s,...c},Object.assign(a,f);let g=0,p=n.id;return typeof p=="string"&&(p=p.replace(/-/g,"_")),a.dangerouslySetInnerHTML={__html:De(re(l.body,p?()=>p+"ID"+g++:"iconifyReact"))},z("svg",a)}let{body:d,width:u,height:m}=t,b=r==="mask"||(r==="bg"?!1:d.indexOf("currentColor")!==-1),I=Me(d,{...f,width:u+"",height:m+""});return a.style={...s,"--svg":Le(I),width:mt(f.width),height:mt(f.height),...Be,...b?K:jt,...c},z("span",a)};kt(!0);se("",ge);if(typeof document<"u"&&typeof window<"u"){let t=window;if(t.IconifyPreload!==void 0){let n=t.IconifyPreload,o="Invalid IconifyPreload syntax.";typeof n=="object"&&n!==null&&(n instanceof Array?n:[n]).forEach(i=>{try{(typeof i!="object"||i===null||i instanceof Array||typeof i.icons!="object"||typeof i.prefix!="string"||!zt(i))&&console.error(o)}catch{console.error(o)}})}if(t.IconifyProviders!==void 0){let n=t.IconifyProviders;if(typeof n=="object"&&n!==null)for(let o in n){let i="IconifyProviders["+o+"] is invalid.";try{let e=n[o];if(typeof e!="object"||!e||e.resources===void 0)continue;ce(o,e)||console.error(i)}catch{console.error(i)}}}}function Et(t){let[n,o]=Q(!!t.ssr),[i,e]=Q({});function r(m){if(m){let b=t.icon;if(typeof b=="object")return{name:"",data:b};let I=at(b);if(I)return{name:b,data:I}}return{name:""}}let[s,c]=Q(r(!!t.ssr));function a(){let m=i.callback;m&&(m(),e({}))}function l(m){if(JSON.stringify(s)!==JSON.stringify(m))return a(),c(m),!0}function f(){var m;let b=t.icon;if(typeof b=="object"){l({name:"",data:b});return}let I=at(b);if(l({name:b,data:I}))if(I===void 0){let g=Te([b],f);e({callback:g})}else I&&((m=t.onLoad)===null||m===void 0||m.call(t,b))}rt(()=>(o(!0),a),[]),rt(()=>{n&&f()},[t.icon,n]);let{name:d,data:u}=s;return u?Ve({...Z,...u},t,d):t.children?t.children:z("span",{})}var $=bt((t,n)=>Et({...t,_ref:n})),Je=bt((t,n)=>Et({inline:!0,...t,_ref:n}));import G from"react";import{useCallback as We,useEffect as ot,useState as _e}from"react";import{jsx as x,jsxs as R}from"react/jsx-runtime";var w=(...t)=>t.filter(Boolean).join(" "),Ot=()=>x($,{icon:"lucide:copy",width:24,height:24,"aria-label":"Copy to clipboard"}),Mt=[{id:"npm",name:"npm",icon:()=>x($,{icon:"logos:npm-icon",width:24,height:24,"aria-label":"npm package manager"}),getCommand:(t,n)=>{let{isDev:o,isPeer:i,isOptional:e,isGlobal:r,useShorthand:s,version:c,tag:a}=n,l=s?"i":"install",f=[o&&(s?"-D":"--save-dev"),i&&"--save-peer",e&&"--save-optional",r&&"-g"].filter(Boolean).join(" "),d=c?`${t}@${c}`:a?`${t}@${a}`:t;return`npm ${l}${f?` ${f}`:""} ${d}`}},{id:"yarn",name:"Yarn",icon:()=>x($,{icon:"logos:yarn",width:24,height:24,"aria-label":"Yarn package manager"}),getCommand:(t,n)=>{let{isDev:o,isPeer:i,isOptional:e,isGlobal:r,version:s,tag:c}=n,a=[r&&"global","add",o&&"--dev",i&&"--peer",e&&"--optional"].filter(Boolean).join(" "),l=s?`${t}@${s}`:c?`${t}@${c}`:t;return`yarn ${a} ${l}`}},{id:"pnpm",name:"pnpm",icon:()=>x($,{icon:"logos:pnpm",width:24,height:24,"aria-label":"pnpm package manager"}),getCommand:(t,n)=>{let{isDev:o,isPeer:i,isOptional:e,isGlobal:r,useShorthand:s,version:c,tag:a}=n,l=s?"i":"install",f=[o&&(s?"-D":"--save-dev"),i&&"--save-peer",e&&"--save-optional",r&&"-g"].filter(Boolean).join(" "),d=c?`${t}@${c}`:a?`${t}@${a}`:t;return`pnpm ${l}${f?` ${f}`:""} ${d}`}},{id:"bun",name:"Bun",icon:()=>x($,{icon:"logos:bun",width:24,height:24,"aria-label":"Bun package manager"}),getCommand:(t,n)=>{let{isDev:o,isPeer:i,isOptional:e,isGlobal:r,useShorthand:s,version:c,tag:a}=n,l=s?"i":"install",f=[o&&(s?"-d":"--dev"),i&&"--peer",e&&"--optional",r&&"-g"].filter(Boolean).join(" "),d=c?`${t}@${c}`:a?`${t}@${a}`:t;return`bun ${l}${f?` ${f}`:""} ${d}`}},{id:"deno",name:"Deno",icon:()=>x($,{icon:"logos:deno",width:24,height:24,"aria-label":"Deno package manager"}),getCommand:(t,n)=>{let{version:o,tag:i,registry:e}=n;return`deno add ${t.split(/\s+/).map(c=>c.startsWith("jsr:")||c.startsWith("npm:")?c:e?`${e}:${c}`:`npm:${c}`).map(c=>o?`${c}@${o}`:i?`${c}@${i}`:c).join(" ")}`}}],He=[{id:"uv",name:"uv",icon:()=>x($,{icon:"catppuccin:uv",width:24,height:24,"aria-label":"uv package manager"}),getCommand:(t,n)=>{let{isDev:o,isGlobal:i,version:e,tag:r}=n,s=[o&&"--dev"].filter(Boolean).join(" "),c=e?`${t}==${e}`:r?`${t}@${r}`:t;return`uv add${s?` ${s}`:""} ${c}`}},{id:"pip",name:"pip",icon:()=>x($,{icon:"logos:python",width:24,height:24,"aria-label":"pip package manager"}),getCommand:(t,n)=>{let{isDev:o,isGlobal:i,version:e,tag:r}=n,s=[].filter(Boolean).join(" "),c=e?`${t}==${e}`:r?`${t}@${r}`:t;return`pip install${s?` ${s}`:""} ${c}`}}],Qe={root:({children:t,className:n})=>x("div",{className:w("install-block",n),children:t}),navigation:({children:t,className:n})=>x("div",{className:w("install-block-nav",n),children:t}),tab:({children:t,isSelected:n,onClick:o,className:i,slotClassNames:e})=>R("button",{type:"button",onClick:o,"data-state":n?"active":"default",className:w("install-block-tab",i),children:[x("div",{className:"install-block-tab-content",children:G.Children.map(t,r=>{if(G.isValidElement(r)){if(r.type===$)return G.cloneElement(r,{className:w(r.props.className,e==null?void 0:e.tabIcon)});if(r.type==="span")return G.cloneElement(r,{className:w(r.props.className,e==null?void 0:e.tabText)})}return r})}),x("div",{className:w("install-block-tab-indicator",e==null?void 0:e.tabIndicator),"data-state":n?"active":"default"})]}),tabIndicator:({isSelected:t,className:n})=>x("div",{className:w("install-block-tab-indicator",n),"data-state":t?"active":"default"}),commandContainer:({children:t,className:n})=>x("div",{className:w("install-block-content",n),children:t}),commandPrefix:({className:t})=>x("span",{className:w("install-block-prefix",t),children:"$"}),commandText:({children:t,className:n,slotClassNames:o})=>{let e=String(t).split(/\s+/),r=e[0],s=e.slice(1).join(" ");return R("code",{className:w("install-block-text",n),children:[x("span",{className:w("install-block-text-command",(o==null?void 0:o.commandTextCommand)||""),children:r}),s?` ${s}`:""]})},copyButton:({onClick:t,className:n})=>x("button",{type:"button",onClick:t,className:w("install-block-copy",n),"aria-label":"Copy command",children:Ot()})},Ue=({packageName:t="",isDev:n=!1,isPeer:o=!1,isOptional:i=!1,isGlobal:e=!1,useShorthand:r=!1,version:s,tag:c,registry:a,managers:l=Mt,customCommands:f,slots:d={},slotClassNames:u={},onCopy:m,onTabChange:b,theme:I="system",copyIcon:g=Ot,classNameFn:p=w,commandPrefix:T="$",storageType:v="none",storageKey:S="preferred-package-manager"})=>{let E=We(()=>{var y;if(v!=="none"){let k=(v==="local"?localStorage:sessionStorage).getItem(S);if(k&&l.some(L=>L.id===k))return k}if(f)for(let[P]of Object.entries(f)){let k=l.find(L=>L.id===P);if(k)return k.id}if(t){if(t.includes("jsr:")||a==="jsr"){let k=l.find(L=>L.id==="deno");if(k)return k.id}let P=l.find(k=>k.id==="npm");if(P)return P.id}return(y=l[0])==null?void 0:y.id},[f,t,a,l,v,S]),[h,C]=_e(E());ot(()=>{v!=="none"&&(v==="local"?localStorage:sessionStorage).setItem(S,h)},[h,v,S]),ot(()=>{let y=document.documentElement;I==="system"?y.removeAttribute("data-theme"):y.setAttribute("data-theme",I)},[I]),ot(()=>{C(E())},[E]);let O={...Qe,...d},{root:M,navigation:j,tab:Nt,tabIndicator:qe,commandContainer:Rt,commandPrefix:Lt,commandText:At,copyButton:Dt}=O,it=y=>{if(f!=null&&f[y])return f[y];let P=l.find(k=>k.id===y);return P!=null&&P.getCommand?P.getCommand(t,{isDev:n,isPeer:o,isOptional:i,isGlobal:e,useShorthand:r,version:s,tag:c,registry:a}):""},Ft=y=>{C(y);let P=l.find(k=>k.id===y);b&&P&&b(y,P)},Bt=()=>{let y=it(h);navigator.clipboard.writeText(y);let P=l.find(k=>k.id===h);m&&P&&m(y,P)};if(l.length===0)return null;let Gt=it(h);return R(M,{className:p("install-block",u.root||""),children:[x(j,{className:p("install-block-nav",u.navigation||""),children:l.map(y=>R(Nt,{isSelected:h===y.id,onClick:()=>Ft(y.id),className:p("install-block-tab",u.tab||""),slotClassNames:u,children:[y.icon(),x("span",{children:y.name})]},y.id))}),R(Rt,{className:p("install-block-content",u.commandContainer||""),children:[R("div",{className:w("install-block-group",u.commandGroup||""),children:[x(Lt,{className:p("install-block-prefix",u.commandPrefix||""),children:T}),x(At,{className:p("install-block-text",u.commandText||""),slotClassNames:u,children:Gt})]}),x(Dt,{className:p("install-block-copy",u.copyButton||""),onClick:Bt,children:G.cloneElement(g(),{className:w(g().props.className,u.copyButtonIcon||"")})})]})]})};export{Ue as InstallCommand,w as cn,Mt as javascriptManagers,He as pythonManagers};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BpY29uaWZ5K3JlYWN0QDUuMi4wX3JlYWN0QDE4LjMuMS9ub2RlX21vZHVsZXMvQGljb25pZnkvcmVhY3QvZGlzdC9pY29uaWZ5LmpzIiwgIi4uL3NyYy9JbnN0YWxsQ29tbWFuZC50c3giXSwKICAic291cmNlc0NvbnRlbnQiOiBbIid1c2UgY2xpZW50JztcblxuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgZm9yd2FyZFJlZiwgdXNlU3RhdGUsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuY29uc3QgZGVmYXVsdEljb25EaW1lbnNpb25zID0gT2JqZWN0LmZyZWV6ZShcbiAge1xuICAgIGxlZnQ6IDAsXG4gICAgdG9wOiAwLFxuICAgIHdpZHRoOiAxNixcbiAgICBoZWlnaHQ6IDE2XG4gIH1cbik7XG5jb25zdCBkZWZhdWx0SWNvblRyYW5zZm9ybWF0aW9ucyA9IE9iamVjdC5mcmVlemUoe1xuICByb3RhdGU6IDAsXG4gIHZGbGlwOiBmYWxzZSxcbiAgaEZsaXA6IGZhbHNlXG59KTtcbmNvbnN0IGRlZmF1bHRJY29uUHJvcHMgPSBPYmplY3QuZnJlZXplKHtcbiAgLi4uZGVmYXVsdEljb25EaW1lbnNpb25zLFxuICAuLi5kZWZhdWx0SWNvblRyYW5zZm9ybWF0aW9uc1xufSk7XG5jb25zdCBkZWZhdWx0RXh0ZW5kZWRJY29uUHJvcHMgPSBPYmplY3QuZnJlZXplKHtcbiAgLi4uZGVmYXVsdEljb25Qcm9wcyxcbiAgYm9keTogXCJcIixcbiAgaGlkZGVuOiBmYWxzZVxufSk7XG5cbmZ1bmN0aW9uIG1lcmdlSWNvblRyYW5zZm9ybWF0aW9ucyhvYmoxLCBvYmoyKSB7XG4gIGNvbnN0IHJlc3VsdCA9IHt9O1xuICBpZiAoIW9iajEuaEZsaXAgIT09ICFvYmoyLmhGbGlwKSB7XG4gICAgcmVzdWx0LmhGbGlwID0gdHJ1ZTtcbiAgfVxuICBpZiAoIW9iajEudkZsaXAgIT09ICFvYmoyLnZGbGlwKSB7XG4gICAgcmVzdWx0LnZGbGlwID0gdHJ1ZTtcbiAgfVxuICBjb25zdCByb3RhdGUgPSAoKG9iajEucm90YXRlIHx8IDApICsgKG9iajIucm90YXRlIHx8IDApKSAlIDQ7XG4gIGlmIChyb3RhdGUpIHtcbiAgICByZXN1bHQucm90YXRlID0gcm90YXRlO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmZ1bmN0aW9uIG1lcmdlSWNvbkRhdGEocGFyZW50LCBjaGlsZCkge1xuICBjb25zdCByZXN1bHQgPSBtZXJnZUljb25UcmFuc2Zvcm1hdGlvbnMocGFyZW50LCBjaGlsZCk7XG4gIGZvciAoY29uc3Qga2V5IGluIGRlZmF1bHRFeHRlbmRlZEljb25Qcm9wcykge1xuICAgIGlmIChrZXkgaW4gZGVmYXVsdEljb25UcmFuc2Zvcm1hdGlvbnMpIHtcbiAgICAgIGlmIChrZXkgaW4gcGFyZW50ICYmICEoa2V5IGluIHJlc3VsdCkpIHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBkZWZhdWx0SWNvblRyYW5zZm9ybWF0aW9uc1trZXldO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoa2V5IGluIGNoaWxkKSB7XG4gICAgICByZXN1bHRba2V5XSA9IGNoaWxkW2tleV07XG4gICAgfSBlbHNlIGlmIChrZXkgaW4gcGFyZW50KSB7XG4gICAgICByZXN1bHRba2V5XSA9IHBhcmVudFtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG5mdW5jdGlvbiBnZXRJY29uc1RyZWUoZGF0YSwgbmFtZXMpIHtcbiAgY29uc3QgaWNvbnMgPSBkYXRhLmljb25zO1xuICBjb25zdCBhbGlhc2VzID0gZGF0YS5hbGlhc2VzIHx8IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCByZXNvbHZlZCA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBmdW5jdGlvbiByZXNvbHZlKG5hbWUpIHtcbiAgICBpZiAoaWNvbnNbbmFtZV0pIHtcbiAgICAgIHJldHVybiByZXNvbHZlZFtuYW1lXSA9IFtdO1xuICAgIH1cbiAgICBpZiAoIShuYW1lIGluIHJlc29sdmVkKSkge1xuICAgICAgcmVzb2x2ZWRbbmFtZV0gPSBudWxsO1xuICAgICAgY29uc3QgcGFyZW50ID0gYWxpYXNlc1tuYW1lXSAmJiBhbGlhc2VzW25hbWVdLnBhcmVudDtcbiAgICAgIGNvbnN0IHZhbHVlID0gcGFyZW50ICYmIHJlc29sdmUocGFyZW50KTtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlZFtuYW1lXSA9IFtwYXJlbnRdLmNvbmNhdCh2YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXNvbHZlZFtuYW1lXTtcbiAgfVxuICAoT2JqZWN0LmtleXMoaWNvbnMpLmNvbmNhdChPYmplY3Qua2V5cyhhbGlhc2VzKSkpLmZvckVhY2gocmVzb2x2ZSk7XG4gIHJldHVybiByZXNvbHZlZDtcbn1cblxuZnVuY3Rpb24gaW50ZXJuYWxHZXRJY29uRGF0YShkYXRhLCBuYW1lLCB0cmVlKSB7XG4gIGNvbnN0IGljb25zID0gZGF0YS5pY29ucztcbiAgY29uc3QgYWxpYXNlcyA9IGRhdGEuYWxpYXNlcyB8fCAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgbGV0IGN1cnJlbnRQcm9wcyA9IHt9O1xuICBmdW5jdGlvbiBwYXJzZShuYW1lMikge1xuICAgIGN1cnJlbnRQcm9wcyA9IG1lcmdlSWNvbkRhdGEoXG4gICAgICBpY29uc1tuYW1lMl0gfHwgYWxpYXNlc1tuYW1lMl0sXG4gICAgICBjdXJyZW50UHJvcHNcbiAgICApO1xuICB9XG4gIHBhcnNlKG5hbWUpO1xuICB0cmVlLmZvckVhY2gocGFyc2UpO1xuICByZXR1cm4gbWVyZ2VJY29uRGF0YShkYXRhLCBjdXJyZW50UHJvcHMpO1xufVxuXG5mdW5jdGlvbiBwYXJzZUljb25TZXQoZGF0YSwgY2FsbGJhY2spIHtcbiAgY29uc3QgbmFtZXMgPSBbXTtcbiAgaWYgKHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBkYXRhLmljb25zICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIG5hbWVzO1xuICB9XG4gIGlmIChkYXRhLm5vdF9mb3VuZCBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgZGF0YS5ub3RfZm91bmQuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgY2FsbGJhY2sobmFtZSwgbnVsbCk7XG4gICAgICBuYW1lcy5wdXNoKG5hbWUpO1xuICAgIH0pO1xuICB9XG4gIGNvbnN0IHRyZWUgPSBnZXRJY29uc1RyZWUoZGF0YSk7XG4gIGZvciAoY29uc3QgbmFtZSBpbiB0cmVlKSB7XG4gICAgY29uc3QgaXRlbSA9IHRyZWVbbmFtZV07XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIGNhbGxiYWNrKG5hbWUsIGludGVybmFsR2V0SWNvbkRhdGEoZGF0YSwgbmFtZSwgaXRlbSkpO1xuICAgICAgbmFtZXMucHVzaChuYW1lKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hbWVzO1xufVxuXG5jb25zdCBvcHRpb25hbFByb3BlcnR5RGVmYXVsdHMgPSB7XG4gIHByb3ZpZGVyOiBcIlwiLFxuICBhbGlhc2VzOiB7fSxcbiAgbm90X2ZvdW5kOiB7fSxcbiAgLi4uZGVmYXVsdEljb25EaW1lbnNpb25zXG59O1xuZnVuY3Rpb24gY2hlY2tPcHRpb25hbFByb3BzKGl0ZW0sIGRlZmF1bHRzKSB7XG4gIGZvciAoY29uc3QgcHJvcCBpbiBkZWZhdWx0cykge1xuICAgIGlmIChwcm9wIGluIGl0ZW0gJiYgdHlwZW9mIGl0ZW1bcHJvcF0gIT09IHR5cGVvZiBkZWZhdWx0c1twcm9wXSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHF1aWNrbHlWYWxpZGF0ZUljb25TZXQob2JqKSB7XG4gIGlmICh0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IGRhdGEgPSBvYmo7XG4gIGlmICh0eXBlb2YgZGF0YS5wcmVmaXggIT09IFwic3RyaW5nXCIgfHwgIW9iai5pY29ucyB8fCB0eXBlb2Ygb2JqLmljb25zICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKCFjaGVja09wdGlvbmFsUHJvcHMob2JqLCBvcHRpb25hbFByb3BlcnR5RGVmYXVsdHMpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgaWNvbnMgPSBkYXRhLmljb25zO1xuICBmb3IgKGNvbnN0IG5hbWUgaW4gaWNvbnMpIHtcbiAgICBjb25zdCBpY29uID0gaWNvbnNbbmFtZV07XG4gICAgaWYgKFxuICAgICAgLy8gTmFtZSBjYW5ub3QgYmUgZW1wdHlcbiAgICAgICFuYW1lIHx8IC8vIE11c3QgaGF2ZSBib2R5XG4gICAgICB0eXBlb2YgaWNvbi5ib2R5ICE9PSBcInN0cmluZ1wiIHx8IC8vIENoZWNrIG90aGVyIHByb3BzXG4gICAgICAhY2hlY2tPcHRpb25hbFByb3BzKFxuICAgICAgICBpY29uLFxuICAgICAgICBkZWZhdWx0RXh0ZW5kZWRJY29uUHJvcHNcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBjb25zdCBhbGlhc2VzID0gZGF0YS5hbGlhc2VzIHx8IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBmb3IgKGNvbnN0IG5hbWUgaW4gYWxpYXNlcykge1xuICAgIGNvbnN0IGljb24gPSBhbGlhc2VzW25hbWVdO1xuICAgIGNvbnN0IHBhcmVudCA9IGljb24ucGFyZW50O1xuICAgIGlmIChcbiAgICAgIC8vIE5hbWUgY2Fubm90IGJlIGVtcHR5XG4gICAgICAhbmFtZSB8fCAvLyBQYXJlbnQgbXVzdCBiZSBzZXQgYW5kIHBvaW50IHRvIGV4aXN0aW5nIGljb25cbiAgICAgIHR5cGVvZiBwYXJlbnQgIT09IFwic3RyaW5nXCIgfHwgIWljb25zW3BhcmVudF0gJiYgIWFsaWFzZXNbcGFyZW50XSB8fCAvLyBDaGVjayBvdGhlciBwcm9wc1xuICAgICAgIWNoZWNrT3B0aW9uYWxQcm9wcyhcbiAgICAgICAgaWNvbixcbiAgICAgICAgZGVmYXVsdEV4dGVuZGVkSWNvblByb3BzXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmNvbnN0IG1hdGNoSWNvbk5hbWUgPSAvXlthLXowLTldKygtW2EtejAtOV0rKSokLztcbmNvbnN0IHN0cmluZ1RvSWNvbiA9ICh2YWx1ZSwgdmFsaWRhdGUsIGFsbG93U2ltcGxlTmFtZSwgcHJvdmlkZXIgPSBcIlwiKSA9PiB7XG4gIGNvbnN0IGNvbG9uU2VwYXJhdGVkID0gdmFsdWUuc3BsaXQoXCI6XCIpO1xuICBpZiAodmFsdWUuc2xpY2UoMCwgMSkgPT09IFwiQFwiKSB7XG4gICAgaWYgKGNvbG9uU2VwYXJhdGVkLmxlbmd0aCA8IDIgfHwgY29sb25TZXBhcmF0ZWQubGVuZ3RoID4gMykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHByb3ZpZGVyID0gY29sb25TZXBhcmF0ZWQuc2hpZnQoKS5zbGljZSgxKTtcbiAgfVxuICBpZiAoY29sb25TZXBhcmF0ZWQubGVuZ3RoID4gMyB8fCAhY29sb25TZXBhcmF0ZWQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgaWYgKGNvbG9uU2VwYXJhdGVkLmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCBuYW1lMiA9IGNvbG9uU2VwYXJhdGVkLnBvcCgpO1xuICAgIGNvbnN0IHByZWZpeCA9IGNvbG9uU2VwYXJhdGVkLnBvcCgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHtcbiAgICAgIC8vIEFsbG93IHByb3ZpZGVyIHdpdGhvdXQgJ0AnOiBcInByb3ZpZGVyOnByZWZpeDpuYW1lXCJcbiAgICAgIHByb3ZpZGVyOiBjb2xvblNlcGFyYXRlZC5sZW5ndGggPiAwID8gY29sb25TZXBhcmF0ZWRbMF0gOiBwcm92aWRlcixcbiAgICAgIHByZWZpeCxcbiAgICAgIG5hbWU6IG5hbWUyXG4gICAgfTtcbiAgICByZXR1cm4gdmFsaWRhdGUgJiYgIXZhbGlkYXRlSWNvbk5hbWUocmVzdWx0KSA/IG51bGwgOiByZXN1bHQ7XG4gIH1cbiAgY29uc3QgbmFtZSA9IGNvbG9uU2VwYXJhdGVkWzBdO1xuICBjb25zdCBkYXNoU2VwYXJhdGVkID0gbmFtZS5zcGxpdChcIi1cIik7XG4gIGlmIChkYXNoU2VwYXJhdGVkLmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBwcm92aWRlcixcbiAgICAgIHByZWZpeDogZGFzaFNlcGFyYXRlZC5zaGlmdCgpLFxuICAgICAgbmFtZTogZGFzaFNlcGFyYXRlZC5qb2luKFwiLVwiKVxuICAgIH07XG4gICAgcmV0dXJuIHZhbGlkYXRlICYmICF2YWxpZGF0ZUljb25OYW1lKHJlc3VsdCkgPyBudWxsIDogcmVzdWx0O1xuICB9XG4gIGlmIChhbGxvd1NpbXBsZU5hbWUgJiYgcHJvdmlkZXIgPT09IFwiXCIpIHtcbiAgICBjb25zdCByZXN1bHQgPSB7XG4gICAgICBwcm92aWRlcixcbiAgICAgIHByZWZpeDogXCJcIixcbiAgICAgIG5hbWVcbiAgICB9O1xuICAgIHJldHVybiB2YWxpZGF0ZSAmJiAhdmFsaWRhdGVJY29uTmFtZShyZXN1bHQsIGFsbG93U2ltcGxlTmFtZSkgPyBudWxsIDogcmVzdWx0O1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbmNvbnN0IHZhbGlkYXRlSWNvbk5hbWUgPSAoaWNvbiwgYWxsb3dTaW1wbGVOYW1lKSA9PiB7XG4gIGlmICghaWNvbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gISEvLyBDaGVjayBwcmVmaXg6IGNhbm5vdCBiZSBlbXB0eSwgdW5sZXNzIGFsbG93U2ltcGxlTmFtZSBpcyBlbmFibGVkXG4gIC8vIENoZWNrIG5hbWU6IGNhbm5vdCBiZSBlbXB0eVxuICAoKGFsbG93U2ltcGxlTmFtZSAmJiBpY29uLnByZWZpeCA9PT0gXCJcIiB8fCAhIWljb24ucHJlZml4KSAmJiAhIWljb24ubmFtZSk7XG59O1xuXG5jb25zdCBkYXRhU3RvcmFnZSA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuZnVuY3Rpb24gbmV3U3RvcmFnZShwcm92aWRlciwgcHJlZml4KSB7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZXIsXG4gICAgcHJlZml4LFxuICAgIGljb25zOiAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICBtaXNzaW5nOiAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpXG4gIH07XG59XG5mdW5jdGlvbiBnZXRTdG9yYWdlKHByb3ZpZGVyLCBwcmVmaXgpIHtcbiAgY29uc3QgcHJvdmlkZXJTdG9yYWdlID0gZGF0YVN0b3JhZ2VbcHJvdmlkZXJdIHx8IChkYXRhU3RvcmFnZVtwcm92aWRlcl0gPSAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSk7XG4gIHJldHVybiBwcm92aWRlclN0b3JhZ2VbcHJlZml4XSB8fCAocHJvdmlkZXJTdG9yYWdlW3ByZWZpeF0gPSBuZXdTdG9yYWdlKHByb3ZpZGVyLCBwcmVmaXgpKTtcbn1cbmZ1bmN0aW9uIGFkZEljb25TZXQoc3RvcmFnZSwgZGF0YSkge1xuICBpZiAoIXF1aWNrbHlWYWxpZGF0ZUljb25TZXQoZGF0YSkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIHBhcnNlSWNvblNldChkYXRhLCAobmFtZSwgaWNvbikgPT4ge1xuICAgIGlmIChpY29uKSB7XG4gICAgICBzdG9yYWdlLmljb25zW25hbWVdID0gaWNvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RvcmFnZS5taXNzaW5nLmFkZChuYW1lKTtcbiAgICB9XG4gIH0pO1xufVxuZnVuY3Rpb24gYWRkSWNvblRvU3RvcmFnZShzdG9yYWdlLCBuYW1lLCBpY29uKSB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiBpY29uLmJvZHkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHN0b3JhZ2UuaWNvbnNbbmFtZV0gPSB7IC4uLmljb24gfTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gbGlzdEljb25zKHByb3ZpZGVyLCBwcmVmaXgpIHtcbiAgbGV0IGFsbEljb25zID0gW107XG4gIGNvbnN0IHByb3ZpZGVycyA9IHR5cGVvZiBwcm92aWRlciA9PT0gXCJzdHJpbmdcIiA/IFtwcm92aWRlcl0gOiBPYmplY3Qua2V5cyhkYXRhU3RvcmFnZSk7XG4gIHByb3ZpZGVycy5mb3JFYWNoKChwcm92aWRlcjIpID0+IHtcbiAgICBjb25zdCBwcmVmaXhlcyA9IHR5cGVvZiBwcm92aWRlcjIgPT09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHByZWZpeCA9PT0gXCJzdHJpbmdcIiA/IFtwcmVmaXhdIDogT2JqZWN0LmtleXMoZGF0YVN0b3JhZ2VbcHJvdmlkZXIyXSB8fCB7fSk7XG4gICAgcHJlZml4ZXMuZm9yRWFjaCgocHJlZml4MikgPT4ge1xuICAgICAgY29uc3Qgc3RvcmFnZSA9IGdldFN0b3JhZ2UocHJvdmlkZXIyLCBwcmVmaXgyKTtcbiAgICAgIGFsbEljb25zID0gYWxsSWNvbnMuY29uY2F0KFxuICAgICAgICBPYmplY3Qua2V5cyhzdG9yYWdlLmljb25zKS5tYXAoXG4gICAgICAgICAgKG5hbWUpID0+IChwcm92aWRlcjIgIT09IFwiXCIgPyBcIkBcIiArIHByb3ZpZGVyMiArIFwiOlwiIDogXCJcIikgKyBwcmVmaXgyICsgXCI6XCIgKyBuYW1lXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfSk7XG4gIH0pO1xuICByZXR1cm4gYWxsSWNvbnM7XG59XG5cbmxldCBzaW1wbGVOYW1lcyA9IGZhbHNlO1xuZnVuY3Rpb24gYWxsb3dTaW1wbGVOYW1lcyhhbGxvdykge1xuICBpZiAodHlwZW9mIGFsbG93ID09PSBcImJvb2xlYW5cIikge1xuICAgIHNpbXBsZU5hbWVzID0gYWxsb3c7XG4gIH1cbiAgcmV0dXJuIHNpbXBsZU5hbWVzO1xufVxuZnVuY3Rpb24gZ2V0SWNvbkRhdGEobmFtZSkge1xuICBjb25zdCBpY29uID0gdHlwZW9mIG5hbWUgPT09IFwic3RyaW5nXCIgPyBzdHJpbmdUb0ljb24obmFtZSwgdHJ1ZSwgc2ltcGxlTmFtZXMpIDogbmFtZTtcbiAgaWYgKGljb24pIHtcbiAgICBjb25zdCBzdG9yYWdlID0gZ2V0U3RvcmFnZShpY29uLnByb3ZpZGVyLCBpY29uLnByZWZpeCk7XG4gICAgY29uc3QgaWNvbk5hbWUgPSBpY29uLm5hbWU7XG4gICAgcmV0dXJuIHN0b3JhZ2UuaWNvbnNbaWNvbk5hbWVdIHx8IChzdG9yYWdlLm1pc3NpbmcuaGFzKGljb25OYW1lKSA/IG51bGwgOiB2b2lkIDApO1xuICB9XG59XG5mdW5jdGlvbiBhZGRJY29uKG5hbWUsIGRhdGEpIHtcbiAgY29uc3QgaWNvbiA9IHN0cmluZ1RvSWNvbihuYW1lLCB0cnVlLCBzaW1wbGVOYW1lcyk7XG4gIGlmICghaWNvbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBzdG9yYWdlID0gZ2V0U3RvcmFnZShpY29uLnByb3ZpZGVyLCBpY29uLnByZWZpeCk7XG4gIGlmIChkYXRhKSB7XG4gICAgcmV0dXJuIGFkZEljb25Ub1N0b3JhZ2Uoc3RvcmFnZSwgaWNvbi5uYW1lLCBkYXRhKTtcbiAgfSBlbHNlIHtcbiAgICBzdG9yYWdlLm1pc3NpbmcuYWRkKGljb24ubmFtZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGFkZENvbGxlY3Rpb24oZGF0YSwgcHJvdmlkZXIpIHtcbiAgaWYgKHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh0eXBlb2YgcHJvdmlkZXIgIT09IFwic3RyaW5nXCIpIHtcbiAgICBwcm92aWRlciA9IGRhdGEucHJvdmlkZXIgfHwgXCJcIjtcbiAgfVxuICBpZiAoc2ltcGxlTmFtZXMgJiYgIXByb3ZpZGVyICYmICFkYXRhLnByZWZpeCkge1xuICAgIGxldCBhZGRlZCA9IGZhbHNlO1xuICAgIGlmIChxdWlja2x5VmFsaWRhdGVJY29uU2V0KGRhdGEpKSB7XG4gICAgICBkYXRhLnByZWZpeCA9IFwiXCI7XG4gICAgICBwYXJzZUljb25TZXQoZGF0YSwgKG5hbWUsIGljb24pID0+IHtcbiAgICAgICAgaWYgKGFkZEljb24obmFtZSwgaWNvbikpIHtcbiAgICAgICAgICBhZGRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gYWRkZWQ7XG4gIH1cbiAgY29uc3QgcHJlZml4ID0gZGF0YS5wcmVmaXg7XG4gIGlmICghdmFsaWRhdGVJY29uTmFtZSh7XG4gICAgcHJvdmlkZXIsXG4gICAgcHJlZml4LFxuICAgIG5hbWU6IFwiYVwiXG4gIH0pKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IHN0b3JhZ2UgPSBnZXRTdG9yYWdlKHByb3ZpZGVyLCBwcmVmaXgpO1xuICByZXR1cm4gISFhZGRJY29uU2V0KHN0b3JhZ2UsIGRhdGEpO1xufVxuZnVuY3Rpb24gaWNvbkxvYWRlZChuYW1lKSB7XG4gIHJldHVybiAhIWdldEljb25EYXRhKG5hbWUpO1xufVxuZnVuY3Rpb24gZ2V0SWNvbihuYW1lKSB7XG4gIGNvbnN0IHJlc3VsdCA9IGdldEljb25EYXRhKG5hbWUpO1xuICByZXR1cm4gcmVzdWx0ID8ge1xuICAgIC4uLmRlZmF1bHRJY29uUHJvcHMsXG4gICAgLi4ucmVzdWx0XG4gIH0gOiByZXN1bHQ7XG59XG5cbmNvbnN0IGRlZmF1bHRJY29uU2l6ZUN1c3RvbWlzYXRpb25zID0gT2JqZWN0LmZyZWV6ZSh7XG4gIHdpZHRoOiBudWxsLFxuICBoZWlnaHQ6IG51bGxcbn0pO1xuY29uc3QgZGVmYXVsdEljb25DdXN0b21pc2F0aW9ucyA9IE9iamVjdC5mcmVlemUoe1xuICAvLyBEaW1lbnNpb25zXG4gIC4uLmRlZmF1bHRJY29uU2l6ZUN1c3RvbWlzYXRpb25zLFxuICAvLyBUcmFuc2Zvcm1hdGlvbnNcbiAgLi4uZGVmYXVsdEljb25UcmFuc2Zvcm1hdGlvbnNcbn0pO1xuXG5jb25zdCB1bml0c1NwbGl0ID0gLygtP1swLTkuXSpbMC05XStbMC05Ll0qKS9nO1xuY29uc3QgdW5pdHNUZXN0ID0gL14tP1swLTkuXSpbMC05XStbMC05Ll0qJC9nO1xuZnVuY3Rpb24gY2FsY3VsYXRlU2l6ZShzaXplLCByYXRpbywgcHJlY2lzaW9uKSB7XG4gIGlmIChyYXRpbyA9PT0gMSkge1xuICAgIHJldHVybiBzaXplO1xuICB9XG4gIHByZWNpc2lvbiA9IHByZWNpc2lvbiB8fCAxMDA7XG4gIGlmICh0eXBlb2Ygc2l6ZSA9PT0gXCJudW1iZXJcIikge1xuICAgIHJldHVybiBNYXRoLmNlaWwoc2l6ZSAqIHJhdGlvICogcHJlY2lzaW9uKSAvIHByZWNpc2lvbjtcbiAgfVxuICBpZiAodHlwZW9mIHNpemUgIT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gc2l6ZTtcbiAgfVxuICBjb25zdCBvbGRQYXJ0cyA9IHNpemUuc3BsaXQodW5pdHNTcGxpdCk7XG4gIGlmIChvbGRQYXJ0cyA9PT0gbnVsbCB8fCAhb2xkUGFydHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHNpemU7XG4gIH1cbiAgY29uc3QgbmV3UGFydHMgPSBbXTtcbiAgbGV0IGNvZGUgPSBvbGRQYXJ0cy5zaGlmdCgpO1xuICBsZXQgaXNOdW1iZXIgPSB1bml0c1Rlc3QudGVzdChjb2RlKTtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAoaXNOdW1iZXIpIHtcbiAgICAgIGNvbnN0IG51bSA9IHBhcnNlRmxvYXQoY29kZSk7XG4gICAgICBpZiAoaXNOYU4obnVtKSkge1xuICAgICAgICBuZXdQYXJ0cy5wdXNoKGNvZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3UGFydHMucHVzaChNYXRoLmNlaWwobnVtICogcmF0aW8gKiBwcmVjaXNpb24pIC8gcHJlY2lzaW9uKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbmV3UGFydHMucHVzaChjb2RlKTtcbiAgICB9XG4gICAgY29kZSA9IG9sZFBhcnRzLnNoaWZ0KCk7XG4gICAgaWYgKGNvZGUgPT09IHZvaWQgMCkge1xuICAgICAgcmV0dXJuIG5ld1BhcnRzLmpvaW4oXCJcIik7XG4gICAgfVxuICAgIGlzTnVtYmVyID0gIWlzTnVtYmVyO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNwbGl0U1ZHRGVmcyhjb250ZW50LCB0YWcgPSBcImRlZnNcIikge1xuICBsZXQgZGVmcyA9IFwiXCI7XG4gIGNvbnN0IGluZGV4ID0gY29udGVudC5pbmRleE9mKFwiPFwiICsgdGFnKTtcbiAgd2hpbGUgKGluZGV4ID49IDApIHtcbiAgICBjb25zdCBzdGFydCA9IGNvbnRlbnQuaW5kZXhPZihcIj5cIiwgaW5kZXgpO1xuICAgIGNvbnN0IGVuZCA9IGNvbnRlbnQuaW5kZXhPZihcIjwvXCIgKyB0YWcpO1xuICAgIGlmIChzdGFydCA9PT0gLTEgfHwgZW5kID09PSAtMSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNvbnN0IGVuZEVuZCA9IGNvbnRlbnQuaW5kZXhPZihcIj5cIiwgZW5kKTtcbiAgICBpZiAoZW5kRW5kID09PSAtMSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZnMgKz0gY29udGVudC5zbGljZShzdGFydCArIDEsIGVuZCkudHJpbSgpO1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnNsaWNlKDAsIGluZGV4KS50cmltKCkgKyBjb250ZW50LnNsaWNlKGVuZEVuZCArIDEpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZGVmcyxcbiAgICBjb250ZW50XG4gIH07XG59XG5mdW5jdGlvbiBtZXJnZURlZnNBbmRDb250ZW50KGRlZnMsIGNvbnRlbnQpIHtcbiAgcmV0dXJuIGRlZnMgPyBcIjxkZWZzPlwiICsgZGVmcyArIFwiPC9kZWZzPlwiICsgY29udGVudCA6IGNvbnRlbnQ7XG59XG5mdW5jdGlvbiB3cmFwU1ZHQ29udGVudChib2R5LCBzdGFydCwgZW5kKSB7XG4gIGNvbnN0IHNwbGl0ID0gc3BsaXRTVkdEZWZzKGJvZHkpO1xuICByZXR1cm4gbWVyZ2VEZWZzQW5kQ29udGVudChzcGxpdC5kZWZzLCBzdGFydCArIHNwbGl0LmNvbnRlbnQgKyBlbmQpO1xufVxuXG5jb25zdCBpc1Vuc2V0S2V5d29yZCA9ICh2YWx1ZSkgPT4gdmFsdWUgPT09IFwidW5zZXRcIiB8fCB2YWx1ZSA9PT0gXCJ1bmRlZmluZWRcIiB8fCB2YWx1ZSA9PT0gXCJub25lXCI7XG5mdW5jdGlvbiBpY29uVG9TVkcoaWNvbiwgY3VzdG9taXNhdGlvbnMpIHtcbiAgY29uc3QgZnVsbEljb24gPSB7XG4gICAgLi4uZGVmYXVsdEljb25Qcm9wcyxcbiAgICAuLi5pY29uXG4gIH07XG4gIGNvbnN0IGZ1bGxDdXN0b21pc2F0aW9ucyA9IHtcbiAgICAuLi5kZWZhdWx0SWNvbkN1c3RvbWlzYXRpb25zLFxuICAgIC4uLmN1c3RvbWlzYXRpb25zXG4gIH07XG4gIGNvbnN0IGJveCA9IHtcbiAgICBsZWZ0OiBmdWxsSWNvbi5sZWZ0LFxuICAgIHRvcDogZnVsbEljb24udG9wLFxuICAgIHdpZHRoOiBmdWxsSWNvbi53aWR0aCxcbiAgICBoZWlnaHQ6IGZ1bGxJY29uLmhlaWdodFxuICB9O1xuICBsZXQgYm9keSA9IGZ1bGxJY29uLmJvZHk7XG4gIFtmdWxsSWNvbiwgZnVsbEN1c3RvbWlzYXRpb25zXS5mb3JFYWNoKChwcm9wcykgPT4ge1xuICAgIGNvbnN0IHRyYW5zZm9ybWF0aW9ucyA9IFtdO1xuICAgIGNvbnN0IGhGbGlwID0gcHJvcHMuaEZsaXA7XG4gICAgY29uc3QgdkZsaXAgPSBwcm9wcy52RmxpcDtcbiAgICBsZXQgcm90YXRpb24gPSBwcm9wcy5yb3RhdGU7XG4gICAgaWYgKGhGbGlwKSB7XG4gICAgICBpZiAodkZsaXApIHtcbiAgICAgICAgcm90YXRpb24gKz0gMjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyYW5zZm9ybWF0aW9ucy5wdXNoKFxuICAgICAgICAgIFwidHJhbnNsYXRlKFwiICsgKGJveC53aWR0aCArIGJveC5sZWZ0KS50b1N0cmluZygpICsgXCIgXCIgKyAoMCAtIGJveC50b3ApLnRvU3RyaW5nKCkgKyBcIilcIlxuICAgICAgICApO1xuICAgICAgICB0cmFuc2Zvcm1hdGlvbnMucHVzaChcInNjYWxlKC0xIDEpXCIpO1xuICAgICAgICBib3gudG9wID0gYm94LmxlZnQgPSAwO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodkZsaXApIHtcbiAgICAgIHRyYW5zZm9ybWF0aW9ucy5wdXNoKFxuICAgICAgICBcInRyYW5zbGF0ZShcIiArICgwIC0gYm94LmxlZnQpLnRvU3RyaW5nKCkgKyBcIiBcIiArIChib3guaGVpZ2h0ICsgYm94LnRvcCkudG9TdHJpbmcoKSArIFwiKVwiXG4gICAgICApO1xuICAgICAgdHJhbnNmb3JtYXRpb25zLnB1c2goXCJzY2FsZSgxIC0xKVwiKTtcbiAgICAgIGJveC50b3AgPSBib3gubGVmdCA9IDA7XG4gICAgfVxuICAgIGxldCB0ZW1wVmFsdWU7XG4gICAgaWYgKHJvdGF0aW9uIDwgMCkge1xuICAgICAgcm90YXRpb24gLT0gTWF0aC5mbG9vcihyb3RhdGlvbiAvIDQpICogNDtcbiAgICB9XG4gICAgcm90YXRpb24gPSByb3RhdGlvbiAlIDQ7XG4gICAgc3dpdGNoIChyb3RhdGlvbikge1xuICAgICAgY2FzZSAxOlxuICAgICAgICB0ZW1wVmFsdWUgPSBib3guaGVpZ2h0IC8gMiArIGJveC50b3A7XG4gICAgICAgIHRyYW5zZm9ybWF0aW9ucy51bnNoaWZ0KFxuICAgICAgICAgIFwicm90YXRlKDkwIFwiICsgdGVtcFZhbHVlLnRvU3RyaW5nKCkgKyBcIiBcIiArIHRlbXBWYWx1ZS50b1N0cmluZygpICsgXCIpXCJcbiAgICAgICAgKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIDI6XG4gICAgICAgIHRyYW5zZm9ybWF0aW9ucy51bnNoaWZ0KFxuICAgICAgICAgIFwicm90YXRlKDE4MCBcIiArIChib3gud2lkdGggLyAyICsgYm94LmxlZnQpLnRvU3RyaW5nKCkgKyBcIiBcIiArIChib3guaGVpZ2h0IC8gMiArIGJveC50b3ApLnRvU3RyaW5nKCkgKyBcIilcIlxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgMzpcbiAgICAgICAgdGVtcFZhbHVlID0gYm94LndpZHRoIC8gMiArIGJveC5sZWZ0O1xuICAgICAgICB0cmFuc2Zvcm1hdGlvbnMudW5zaGlmdChcbiAgICAgICAgICBcInJvdGF0ZSgtOTAgXCIgKyB0ZW1wVmFsdWUudG9TdHJpbmcoKSArIFwiIFwiICsgdGVtcFZhbHVlLnRvU3RyaW5nKCkgKyBcIilcIlxuICAgICAgICApO1xuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgaWYgKHJvdGF0aW9uICUgMiA9PT0gMSkge1xuICAgICAgaWYgKGJveC5sZWZ0ICE9PSBib3gudG9wKSB7XG4gICAgICAgIHRlbXBWYWx1ZSA9IGJveC5sZWZ0O1xuICAgICAgICBib3gubGVmdCA9IGJveC50b3A7XG4gICAgICAgIGJveC50b3AgPSB0ZW1wVmFsdWU7XG4gICAgICB9XG4gICAgICBpZiAoYm94LndpZHRoICE9PSBib3guaGVpZ2h0KSB7XG4gICAgICAgIHRlbXBWYWx1ZSA9IGJveC53aWR0aDtcbiAgICAgICAgYm94LndpZHRoID0gYm94LmhlaWdodDtcbiAgICAgICAgYm94LmhlaWdodCA9IHRlbXBWYWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRyYW5zZm9ybWF0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGJvZHkgPSB3cmFwU1ZHQ29udGVudChcbiAgICAgICAgYm9keSxcbiAgICAgICAgJzxnIHRyYW5zZm9ybT1cIicgKyB0cmFuc2Zvcm1hdGlvbnMuam9pbihcIiBcIikgKyAnXCI+JyxcbiAgICAgICAgXCI8L2c+XCJcbiAgICAgICk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgY3VzdG9taXNhdGlvbnNXaWR0aCA9IGZ1bGxDdXN0b21pc2F0aW9ucy53aWR0aDtcbiAgY29uc3QgY3VzdG9taXNhdGlvbnNIZWlnaHQgPSBmdWxsQ3VzdG9taXNhdGlvbnMuaGVpZ2h0O1xuICBjb25zdCBib3hXaWR0aCA9IGJveC53aWR0aDtcbiAgY29uc3QgYm94SGVpZ2h0ID0gYm94LmhlaWdodDtcbiAgbGV0IHdpZHRoO1xuICBsZXQgaGVpZ2h0O1xuICBpZiAoY3VzdG9taXNhdGlvbnNXaWR0aCA9PT0gbnVsbCkge1xuICAgIGhlaWdodCA9IGN1c3RvbWlzYXRpb25zSGVpZ2h0ID09PSBudWxsID8gXCIxZW1cIiA6IGN1c3RvbWlzYXRpb25zSGVpZ2h0ID09PSBcImF1dG9cIiA/IGJveEhlaWdodCA6IGN1c3RvbWlzYXRpb25zSGVpZ2h0O1xuICAgIHdpZHRoID0gY2FsY3VsYXRlU2l6ZShoZWlnaHQsIGJveFdpZHRoIC8gYm94SGVpZ2h0KTtcbiAgfSBlbHNlIHtcbiAgICB3aWR0aCA9IGN1c3RvbWlzYXRpb25zV2lkdGggPT09IFwiYXV0b1wiID8gYm94V2lkdGggOiBjdXN0b21pc2F0aW9uc1dpZHRoO1xuICAgIGhlaWdodCA9IGN1c3RvbWlzYXRpb25zSGVpZ2h0ID09PSBudWxsID8gY2FsY3VsYXRlU2l6ZSh3aWR0aCwgYm94SGVpZ2h0IC8gYm94V2lkdGgpIDogY3VzdG9taXNhdGlvbnNIZWlnaHQgPT09IFwiYXV0b1wiID8gYm94SGVpZ2h0IDogY3VzdG9taXNhdGlvbnNIZWlnaHQ7XG4gIH1cbiAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuICBjb25zdCBzZXRBdHRyID0gKHByb3AsIHZhbHVlKSA9PiB7XG4gICAgaWYgKCFpc1Vuc2V0S2V5d29yZCh2YWx1ZSkpIHtcbiAgICAgIGF0dHJpYnV0ZXNbcHJvcF0gPSB2YWx1ZS50b1N0cmluZygpO1xuICAgIH1cbiAgfTtcbiAgc2V0QXR0cihcIndpZHRoXCIsIHdpZHRoKTtcbiAgc2V0QXR0cihcImhlaWdodFwiLCBoZWlnaHQpO1xuICBjb25zdCB2aWV3Qm94ID0gW2JveC5sZWZ0LCBib3gudG9wLCBib3hXaWR0aCwgYm94SGVpZ2h0XTtcbiAgYXR0cmlidXRlcy52aWV3Qm94ID0gdmlld0JveC5qb2luKFwiIFwiKTtcbiAgcmV0dXJuIHtcbiAgICBhdHRyaWJ1dGVzLFxuICAgIHZpZXdCb3gsXG4gICAgYm9keVxuICB9O1xufVxuXG5jb25zdCByZWdleCA9IC9cXHNpZD1cIihcXFMrKVwiL2c7XG5jb25zdCByYW5kb21QcmVmaXggPSBcIkljb25pZnlJZFwiICsgRGF0ZS5ub3coKS50b1N0cmluZygxNikgKyAoTWF0aC5yYW5kb20oKSAqIDE2Nzc3MjE2IHwgMCkudG9TdHJpbmcoMTYpO1xubGV0IGNvdW50ZXIgPSAwO1xuZnVuY3Rpb24gcmVwbGFjZUlEcyhib2R5LCBwcmVmaXggPSByYW5kb21QcmVmaXgpIHtcbiAgY29uc3QgaWRzID0gW107XG4gIGxldCBtYXRjaDtcbiAgd2hpbGUgKG1hdGNoID0gcmVnZXguZXhlYyhib2R5KSkge1xuICAgIGlkcy5wdXNoKG1hdGNoWzFdKTtcbiAgfVxuICBpZiAoIWlkcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gYm9keTtcbiAgfVxuICBjb25zdCBzdWZmaXggPSBcInN1ZmZpeFwiICsgKE1hdGgucmFuZG9tKCkgKiAxNjc3NzIxNiB8IERhdGUubm93KCkpLnRvU3RyaW5nKDE2KTtcbiAgaWRzLmZvckVhY2goKGlkKSA9PiB7XG4gICAgY29uc3QgbmV3SUQgPSB0eXBlb2YgcHJlZml4ID09PSBcImZ1bmN0aW9uXCIgPyBwcmVmaXgoaWQpIDogcHJlZml4ICsgKGNvdW50ZXIrKykudG9TdHJpbmcoKTtcbiAgICBjb25zdCBlc2NhcGVkSUQgPSBpZC5yZXBsYWNlKC9bLiorP14ke30oKXxbXFxdXFxcXF0vZywgXCJcXFxcJCZcIik7XG4gICAgYm9keSA9IGJvZHkucmVwbGFjZShcbiAgICAgIC8vIEFsbG93ZWQgY2hhcmFjdGVycyBiZWZvcmUgaWQ6IFsjO1wiXVxuICAgICAgLy8gQWxsb3dlZCBjaGFyYWN0ZXJzIGFmdGVyIGlkOiBbKVwiXSwgLlthLXpdXG4gICAgICBuZXcgUmVnRXhwKCcoWyM7XCJdKSgnICsgZXNjYXBlZElEICsgJykoW1wiKV18XFxcXC5bYS16XSknLCBcImdcIiksXG4gICAgICBcIiQxXCIgKyBuZXdJRCArIHN1ZmZpeCArIFwiJDNcIlxuICAgICk7XG4gIH0pO1xuICBib2R5ID0gYm9keS5yZXBsYWNlKG5ldyBSZWdFeHAoc3VmZml4LCBcImdcIiksIFwiXCIpO1xuICByZXR1cm4gYm9keTtcbn1cblxuY29uc3Qgc3RvcmFnZSA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuZnVuY3Rpb24gc2V0QVBJTW9kdWxlKHByb3ZpZGVyLCBpdGVtKSB7XG4gIHN0b3JhZ2VbcHJvdmlkZXJdID0gaXRlbTtcbn1cbmZ1bmN0aW9uIGdldEFQSU1vZHVsZShwcm92aWRlcikge1xuICByZXR1cm4gc3RvcmFnZVtwcm92aWRlcl0gfHwgc3RvcmFnZVtcIlwiXTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQVBJQ29uZmlnKHNvdXJjZSkge1xuICBsZXQgcmVzb3VyY2VzO1xuICBpZiAodHlwZW9mIHNvdXJjZS5yZXNvdXJjZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXNvdXJjZXMgPSBbc291cmNlLnJlc291cmNlc107XG4gIH0gZWxzZSB7XG4gICAgcmVzb3VyY2VzID0gc291cmNlLnJlc291cmNlcztcbiAgICBpZiAoIShyZXNvdXJjZXMgaW5zdGFuY2VvZiBBcnJheSkgfHwgIXJlc291cmNlcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgLy8gQVBJIGhvc3RzXG4gICAgcmVzb3VyY2VzLFxuICAgIC8vIFJvb3QgcGF0aFxuICAgIHBhdGg6IHNvdXJjZS5wYXRoIHx8IFwiL1wiLFxuICAgIC8vIFVSTCBsZW5ndGggbGltaXRcbiAgICBtYXhVUkw6IHNvdXJjZS5tYXhVUkwgfHwgNTAwLFxuICAgIC8vIFRpbWVvdXQgYmVmb3JlIG5leHQgaG9zdCBpcyB1c2VkLlxuICAgIHJvdGF0ZTogc291cmNlLnJvdGF0ZSB8fCA3NTAsXG4gICAgLy8gVGltZW91dCBiZWZvcmUgZmFpbGluZyBxdWVyeS5cbiAgICB0aW1lb3V0OiBzb3VyY2UudGltZW91dCB8fCA1ZTMsXG4gICAgLy8gUmFuZG9taXNlIGRlZmF1bHQgQVBJIGVuZCBwb2ludC5cbiAgICByYW5kb206IHNvdXJjZS5yYW5kb20gPT09IHRydWUsXG4gICAgLy8gU3RhcnQgaW5kZXhcbiAgICBpbmRleDogc291cmNlLmluZGV4IHx8IDAsXG4gICAgLy8gUmVjZWl2ZSBkYXRhIGFmdGVyIHRpbWUgb3V0ICh1c2VkIGlmIHRpbWUgb3V0IGtpY2tzIGluIGZpcnN0LCB0aGVuIEFQSSBtb2R1bGUgc2VuZHMgZGF0YSBhbnl3YXkpLlxuICAgIGRhdGFBZnRlclRpbWVvdXQ6IHNvdXJjZS5kYXRhQWZ0ZXJUaW1lb3V0ICE9PSBmYWxzZVxuICB9O1xuICByZXR1cm4gcmVzdWx0O1xufVxuY29uc3QgY29uZmlnU3RvcmFnZSA9IC8qIEBfX1BVUkVfXyAqLyBPYmplY3QuY3JlYXRlKG51bGwpO1xuY29uc3QgZmFsbEJhY2tBUElTb3VyY2VzID0gW1xuICBcImh0dHBzOi8vYXBpLnNpbXBsZXN2Zy5jb21cIixcbiAgXCJodHRwczovL2FwaS51bmlzdmcuY29tXCJcbl07XG5jb25zdCBmYWxsQmFja0FQSSA9IFtdO1xud2hpbGUgKGZhbGxCYWNrQVBJU291cmNlcy5sZW5ndGggPiAwKSB7XG4gIGlmIChmYWxsQmFja0FQSVNvdXJjZXMubGVuZ3RoID09PSAxKSB7XG4gICAgZmFsbEJhY2tBUEkucHVzaChmYWxsQmFja0FQSVNvdXJjZXMuc2hpZnQoKSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKE1hdGgucmFuZG9tKCkgPiAwLjUpIHtcbiAgICAgIGZhbGxCYWNrQVBJLnB1c2goZmFsbEJhY2tBUElTb3VyY2VzLnNoaWZ0KCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmYWxsQmFja0FQSS5wdXNoKGZhbGxCYWNrQVBJU291cmNlcy5wb3AoKSk7XG4gICAgfVxuICB9XG59XG5jb25maWdTdG9yYWdlW1wiXCJdID0gY3JlYXRlQVBJQ29uZmlnKHtcbiAgcmVzb3VyY2VzOiBbXCJodHRwczovL2FwaS5pY29uaWZ5LmRlc2lnblwiXS5jb25jYXQoZmFsbEJhY2tBUEkpXG59KTtcbmZ1bmN0aW9uIGFkZEFQSVByb3ZpZGVyKHByb3ZpZGVyLCBjdXN0b21Db25maWcpIHtcbiAgY29uc3QgY29uZmlnID0gY3JlYXRlQVBJQ29uZmlnKGN1c3RvbUNvbmZpZyk7XG4gIGlmIChjb25maWcgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uZmlnU3RvcmFnZVtwcm92aWRlcl0gPSBjb25maWc7XG4gIHJldHVybiB0cnVlO1xufVxuZnVuY3Rpb24gZ2V0QVBJQ29uZmlnKHByb3ZpZGVyKSB7XG4gIHJldHVybiBjb25maWdTdG9yYWdlW3Byb3ZpZGVyXTtcbn1cbmZ1bmN0aW9uIGxpc3RBUElQcm92aWRlcnMoKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhjb25maWdTdG9yYWdlKTtcbn1cblxuY29uc3QgZGV0ZWN0RmV0Y2ggPSAoKSA9PiB7XG4gIGxldCBjYWxsYmFjaztcbiAgdHJ5IHtcbiAgICBjYWxsYmFjayA9IGZldGNoO1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gIH1cbn07XG5sZXQgZmV0Y2hNb2R1bGUgPSBkZXRlY3RGZXRjaCgpO1xuZnVuY3Rpb24gc2V0RmV0Y2goZmV0Y2gyKSB7XG4gIGZldGNoTW9kdWxlID0gZmV0Y2gyO1xufVxuZnVuY3Rpb24gZ2V0RmV0Y2goKSB7XG4gIHJldHVybiBmZXRjaE1vZHVsZTtcbn1cbmZ1bmN0aW9uIGNhbGN1bGF0ZU1heExlbmd0aChwcm92aWRlciwgcHJlZml4KSB7XG4gIGNvbnN0IGNvbmZpZyA9IGdldEFQSUNvbmZpZyhwcm92aWRlcik7XG4gIGlmICghY29uZmlnKSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbiAgbGV0IHJlc3VsdDtcbiAgaWYgKCFjb25