@borgar/fx 4.10.2 → 4.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/fx.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";const e="operator",t="error",n="context",l="range_beam",r="range_ternary",o="range_named",s="structured",u="unknown",i="UnaryExpression",a="BinaryExpression",c="ReferenceIdentifier",f="CallExpression",p="LetExpression";function h(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=!1,l="";const r=[],o=()=>{l&&r.push(t?l:{value:l,braced:n}),l=""};for(let t=0;t<e.length;t++){const r=e[t];"["===r?(o(),n=!0):"]"===r?(o(),n=!1):l+=r}return o(),r}function g(e){return{context:h(e,!0)}}function d(e){const t={},n=h(e);if(n.length>1)t.workbookName=n[n.length-2].value,t.sheetName=n[n.length-1].value;else if(1===n.length){const e=n[0];e.braced?t.workbookName=e.value:t.sheetName=e.value}return t}const m=e=>e&&(":"===e.value||".:"===e.value||":."===e.value||".:."===e.value)&&{operator:e.value},x=e=>e&&"range"===e.type&&{r0:e.value},y=e=>e&&e.type===r&&{r0:e.value},v=e=>e&&"range"===e.type&&{r1:e.value},$=t=>t&&t.type===e&&"!"===t.value&&{},w=e=>e&&e.type===l&&{r0:e.value},N=e=>e&&e.type===s&&{struct:e.value},E=(e,t)=>{const l=t.xlsx?d:g;return e&&e.type===n?l(e.value):e&&"context_quote"===e.type?l(e.value.slice(1,-1).replace(/''/g,"'")):void 0},R=e=>e&&e.type===o&&{name:e.value},b=[[y],[x,m,v],[x],[w],[E,$,y],[E,$,x,m,v],[E,$,x],[E,$,w]],A=b.concat([[R],[E,$,R],[N],[R,N],[E,$,R,N]]);function C(e,t){const n={withLocation:!1,mergeRefs:!1,allowTernary:!1,allowNamed:!0,r1c1:!1,xlsx:!1,...t},l=je(e,Le,n),r=n.xlsx?{workbookName:"",sheetName:"",r0:"",r1:"",name:"",operator:""}:{context:[],r0:"",r1:"",name:"",operator:""};l.length&&"fx_prefix"===l[0].type&&l.shift();const o=n.allowNamed?A:b;for(let e=0;e<o.length;e++){const t={...r};if(o[e].length===l.length){const r=o[e].every(((e,r)=>{const o=e(l[r],n);return Object.assign(t,o),o}));if(r)return t}}return null}const T=/[^0-9A-Za-z._¡¤§¨ª\u00ad¯-\uffff]/;function k(e){let t="",n=0,l=0;const r=e.context||[];for(let e=r.length;e>-1;e--){const o=r[e];if(o){t=(l%2?"["+o+"]":o)+t,n+=+T.test(o),l++}}return n&&(t="'"+t.replace(/'/g,"''")+"'"),t?t+"!":t}function L(e){let t="",n=0;const{workbookName:l,sheetName:r}=e;return l&&(t+="["+l+"]",n+=+T.test(l)),r&&(t+=r,n+=+T.test(r)),n&&(t="'"+t.replace(/'/g,"''")+"'"),t?t+"!":t}const I=(e,t,n)=>Math.min(Math.max(t,e),n),_=(e,t)=>(t?"$":"")+S(e),O=(e,t)=>(t?"$":"")+String(e+1),U=String.fromCharCode;function F(e){const t=e||"",n=t.length;let l=0;if(n>2){const e=t.charCodeAt(n-3);l+=676*(1+e-(e>95?32:0)-65)}if(n>1){const e=t.charCodeAt(n-2);l+=26*(1+e-(e>95?32:0)-65)}if(n){const e=t.charCodeAt(n-1);l+=e-(e>95?32:0)-65}return l}function S(e){return(e>=702?U(((e-702)/676-0)%26+65):"")+(e>=26?U((e/26-1)%26+65):"")+U(e%26+65)}function M(e){return"both"===e?".:.":"head"===e?".:":"tail"===e?":.":":"}function D(e,t){return e&&t?"both":e?"head":t?"tail":void 0}function z(e){let{top:t,left:n,bottom:l,right:r,trim:o}=e;const{$left:s,$right:u,$top:i,$bottom:a}=e,c=null==n,f=null==r,p=null==t,h=null==l;t=I(0,0|t,1048575),n=I(0,0|n,16383),!c&&!p&&f&&h?(l=t,r=n):(l=I(0,0|l,1048575),r=I(0,0|r,16383));const g=M(o);if(0===t&&l>=1048575&&!c&&!f&&(!(s&&!c||u&&!f)||n===r)||p&&h)return _(n,s)+g+_(r,u);return 0===n&&r>=16383&&!p&&!h&&(!(i&&!p||a&&!h)||t===l)||c&&f?O(t,i)+g+O(l,a):c||p||f||!h?c||!p||f||h?c||p||!f||h?!c||p||f||h?r!==n||l!==t||u!==s||a!==i?_(n,s)+O(t,i)+g+_(r,u)+O(l,a):_(n,s)+O(t,i):_(r,u)+O(t,i)+g+O(l,a):_(n,s)+O(t,i)+g+O(l,a):_(n,s)+O(l,a)+g+_(r,u):_(n,s)+O(t,i)+g+_(r,u)}function j(e){const t=/^(?=.)(\$(?=\D))?([A-Za-z]{0,3})?(\$)?([1-9][0-9]{0,6})?$/.exec(e);return t&&(t[2]||t[4])?[t[4]?(n=t[4],+n-1):null,t[2]?F(t[2]):null,!!t[3],!!t[1]]:null;var n}function q(e){let t=null,n=null,l=null,r=null,o=!1,s=!1,u=!1,i=!1;const[a,c,f,p,h]=e.split(/(\.?:\.?)/);if(p||h)return null;const g=D(!!c&&"."===c[0],!!c&&"."===c[c.length-1]),d=j(a),m=f?j(f):null;if(!d||f&&!m)return null;if(null!=d[0]&&null!=d[1]?[t,n,o,s]=d:null==d[0]&&null!=d[1]?[,n,,s]=d:null!=d[0]&&null==d[1]&&([t,,o]=d),f)null!=m[0]&&null!=m[1]?[l,r,u,i]=m:null==m[0]&&null!=m[1]?[,r,,i]=m:null!=m[0]&&null==m[1]&&([l,,u]=m);else{if(null==t||null==n)return null;l=t,r=n,u=o,i=s}null!=r&&(null==n||null!=n&&r<n)&&([n,r,s,i]=[r,n,i,s]),null!=l&&(null==t||null!=t&&l<t)&&([t,l,o,u]=[l,t,u,o]);const x={top:t,left:n,bottom:l,right:r,$top:o,$left:s,$bottom:u,$right:i};return g&&(x.trim=g),x}function B(e){let{allowNamed:t=!0,allowTernary:n=!1,xlsx:l=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=C(e,{allowNamed:t,allowTernary:n,xlsx:l,r1c1:!1});if(r&&(r.r0||r.name)){let e=null;return r.r0&&(e=q(r.r1?r.r0+r.operator+r.r1:r.r0)),e?l?{workbookName:r.workbookName,sheetName:r.sheetName,range:e}:{context:r.context,range:e}:r.name?l?{workbookName:r.workbookName,sheetName:r.sheetName,name:r.name}:{context:r.context,name:r.name}:null}return null}function Z(e){let{xlsx:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t?L(e):k(e);return n+(e.name?e.name:z(e.range))}function P(e){return null==e.top&&(e.top=0,e.$top=!1),null==e.bottom&&(e.bottom=1048575,e.$bottom=!1),null==e.left&&(e.left=0,e.$left=!1),null==e.right&&(e.right=16383,e.$right=!1),e}const X=/^\[('['#@[\]]|[^'#@[\]])+\]/i,W=/^([^#@[\]:]+)/i,G={headers:1,data:2,totals:4,all:8,"this row":16,"@":16},H=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Object.freeze(t)},Y={0:H(),1:H("headers"),2:H("data"),4:H("totals"),8:H("all"),16:H("this row"),3:H("headers","data"),6:H("data","totals")},K=function(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=X.exec(e);if(n){const e=n[0].slice(1,-1).replace(/'(['#@[\]])/g,"$1");return[n[0],e]}return t&&(n=W.exec(e),n)?[n[0],n[0]]:null};function V(e){const t=[];let n,l,r=0,o=e,s=0;if(!(n=/^(\[\s*)/.exec(o)))return null;if(l=/^\[#([a-z ]+)\]/i.exec(o)){const e=l[1].toLowerCase();if(r+=l[0].length,!G[e])return null;s|=G[e]}else if(l=K(o,!1))r+=l[0].length,t.push(l[1]);else{let l=!0;for(o=o.slice(n[1].length),r+=n[1].length;l&&(n=/^\[#([a-z ]+)\](\s*,\s*)?/i.exec(o));){const e=n[1].toLowerCase();if(!G[e])return null;s|=G[e],o=o.slice(n[0].length),r+=n[0].length,l=!!n[2]}if(l&&(n=/^@/.exec(o))&&(s|=G["@"],o=o.slice(1),r+=1,l="]"!==o[0]),!(s in Y))return null;const u=l?K(e.slice(r)):null;if(u){if(r+=u[0].length,t.push(u[1]),o=e.slice(r),":"===o[0]){o=o.slice(1),r++;const e=K(o);if(!e)return null;r+=e[0].length,t.push(e[1])}l=!1}for(;" "===e[r];)r++;if(l||"]"!==e[r])return null;r++}const u=Y[s];return{columns:t,sections:u?u.concat():u,length:r,token:e.slice(0,r)}}function Q(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{xlsx:!1};const n=C(e,t);if(n&&n.struct){const e=V(n.struct);if(e&&e.length===n.struct.length)return t.xlsx?{workbookName:n.workbookName,sheetName:n.sheetName,table:n.name,columns:e.columns,sections:e.sections}:{context:n.context,table:n.name,columns:e.columns,sections:e.sections}}return null}function J(e){return e.replace(/([[\]#'@])/g,"'$1")}function ee(e){return!/^[a-zA-Z0-9\u00a1-\uffff]+$/.test(e)}function te(e){return e[0].toUpperCase()+e.slice(1).toLowerCase()}function ne(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{xlsx:n,thisRow:l}=t;let r=n?L(e):k(e);e.table&&(r+=e.table);const o=e.columns?.length??0,s=e.sections?.length??0;if(1!==s||o)if(s||1!==o){r+="[";const t=!l&&1===s&&"this row"===e.sections[0].toLowerCase();t?r+="@":s&&(r+=e.sections.map((e=>`[#${te(e)}]`)).join(","),o&&(r+=",")),t&&1===e.columns.length&&!ee(e.columns[0])?r+=J(e.columns[0]):o&&(r+=e.columns.slice(0,2).map((e=>`[${J(e)}]`)).join(":")),r+="]"}else r+=`[${J(e.columns[0])}]`;else r+=`[#${te(e.sections[0])}]`;return r}const le=/^(?!!)(\[(?:[^\]])+\])?([0-9A-Za-z._¡¤§¨ª\u00ad¯-\uffff]+)?(?=!)/,re=/^'(?:''|[^'])*('|$)(?=!)/,oe="\\$?[A-Z]{1,3}\\$?[1-9][0-9]{0,6}",se="\\$?[A-Z]{1,3}",ue="\\$?[1-9][0-9]{0,6}",ie="(?![a-z0-9_\\u00a1-\\uffff])",ae=new RegExp(`^${se}\\.?:\\.?${se}${ie}`,"i"),ce=new RegExp(`^${ue}\\.?:\\.?${ue}${ie}`,"i"),fe=new RegExp(`^${oe}${ie}`,"i"),pe=new RegExp(`^((${se}|${ue})\\.?:\\.?${oe}|${oe}\\.?:\\.?(${se}|${ue}))(?![\\w($.])`,"i"),he="(?:R(?:\\[[+-]?\\d+\\]|[1-9][0-9]{0,6})?)",ge="(?:C(?:\\[[+-]?\\d+\\]|[1-9][0-9]{0,4})?)",de=new RegExp(`^${ge}(\\.?:\\.?${ge})?${ie}`,"i"),me=new RegExp(`^${he}(\\.?:\\.?${he})?${ie}`,"i"),xe=new RegExp(`^(?:(?=[RC])${he}${ge})${ie}`,"i"),ye=new RegExp(`^(${he}${ge}(\\.?:\\.?${ge}|\\.?:\\.?${he})(?![[\\d])|(${he}|${ge})(\\.?:\\.?${he}${ge}))${ie}`,"i"),ve=/^[a-zA-Z\\_\u00a1-\uffff][a-zA-Z0-9\\_.?\u00a1-\uffff]{0,254}/i;function $e(e,t){return n=>{const l=t.exec(n);if(l)return{type:e,value:l[0]}}}function we(e){const t=ve.exec(e);if(t){const e=t[0].toLowerCase();return"\\"===e[0]&&t[0].length<3||("r"===e||"c"===e)?null:{type:o,value:t[0]}}}const Ne=/^'(?:[^[\]]+?)?(?:\[(.+?)\])?(?:[^[\]]+?)'$/,Ee=/^'\[(.+?)\]'$/;function Re(e,t){const l=re.exec(e);if(l){const e=l[0];if(t.xlsx&&Ee.test(e)||Ne.test(e))return{type:"context_quote",value:e}}const r=le.exec(e);if(r){const[,e,l]=r;if(e&&l||l||e&&!l&&t.xlsx)return{type:n,value:r[0]}}}function be(e){const t=V(e);if(t){let n=t.length;for(;" "===e[n];)n++;if("!"!==e[n])return{type:s,value:t.token}}return null}const Ae=/([RC])(\[?)(-?\d+)/gi,Ce=/(\d+|[a-zA-Z]+)/gi;function Te(e,t){let n,o;if(t.r1c1){if(t.allowTernary&&(n=ye.exec(e))?o={type:r,value:n[0]}:(n=xe.exec(e))?o={type:"range",value:n[0]}:((n=me.exec(e))||(n=de.exec(e)))&&(o={type:l,value:n[0]}),o){for(Ae.lastIndex=0;null!==(n=Ae.exec(o.value));){const e=("R"===n[1]?1048575:16383)+(n[2]?0:1),t=parseInt(n[3],10);if(t>e||t<-e)return null}return o}}else if(t.allowTernary&&(n=pe.exec(e))?o={type:r,value:n[0]}:(n=ae.exec(e))||(n=ce.exec(e))?o={type:l,value:n[0]}:(n=fe.exec(e))&&(o={type:"range",value:n[0]}),o){for(Ce.lastIndex=0;null!==(n=Ce.exec(o.value));)if(/^\d/.test(n[1])){if(parseInt(n[1],10)-1>1048575)return null}else if(F(n[1])>16383)return null;return o}}const ke=[$e(t,/^#(NAME\?|FIELD!|CALC!|VALUE!|REF!|DIV\/0!|NULL!|NUM!|N\/A|GETTING_DATA\b|SPILL!|UNKNOWN!|FIELD\b|CALC\b|SYNTAX\?|ERROR!|CONNECT!|BLOCKED!|EXTERNAL!)/i),$e("operator-trim",/^(\.:\.|\.:|:\.)/),$e(e,/^(<=|>=|<>|[-+/*^%&<>=]|[{},;]|[()]|@|:|!|#)/),$e("func",/^[A-Z_]+[A-Z\d_.]*(?=\()/i),$e("bool",/^(TRUE|FALSE)\b/i),$e("newline",/^\n+/),$e("whitespace",/^[ \f\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/),$e("string",/^"(?:""|[^"])*("|$)/),Re,Te,be,$e("number",/^(?:\d+(\.\d+)?(?:[eE][+-]?\d+)?|\d+)/),we],Le=[function(t,n){if(n.r1c1)return"!"===t[0]?{type:e,value:t[0]}:null;const l=/^(!|\.?:\.?)/.exec(t);return l?{type:e,value:l[1]}:null},Re,Te,be,we],Ie={};function _e(e,t){if(e.length){const n=e[0];t[n]=t[n]||{},_e(e.slice(1),t[n])}else t.$=!0}[["range",":","range"],["range",".:","range"],["range",":.","range"],["range",".:.","range"],["range"],[l],[r],[n,"!","range",":","range"],[n,"!","range",".:","range"],[n,"!","range",":.","range"],[n,"!","range",".:.","range"],[n,"!","range"],[n,"!",l],[n,"!",r],["context_quote","!","range",":","range"],["context_quote","!","range",".:","range"],["context_quote","!","range",":.","range"],["context_quote","!","range",".:.","range"],["context_quote","!","range"],["context_quote","!",l],["context_quote","!",r],[o],[n,"!",o],["context_quote","!",o],[s],[o,s],[n,"!",o,s],["context_quote","!",o,s]].forEach((e=>_e(e.concat().reverse(),Ie)));const Oe=function(t,n,l){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;const o=t[l-r];if(o){const s=o.type===e?o.value:o.type;if(s in n)return Oe(t,n[s],l,r+1)}return n.$?r:0};function Ue(e){const t=[];for(let n=e.length-1;n>=0;n--){let l=e[n];const r=Oe(e,Ie,n);if(r){const t=e.slice(n-r+1,n+1);l={...l},l.value=t.map((e=>e.value)).join(""),l.loc&&t[0].loc&&(l.loc[0]=t[0].loc[0]),n-=r-1}t.unshift(l)}return t}const Fe=(e,t)=>e&&e.type===t,Se={withLocation:!1,mergeRefs:!0,allowTernary:!1,negativeNumbers:!0,r1c1:!1},Me=e=>e.type===o||"func"===e.type,De=t=>!Fe(t,e)||"%"===t.value||"}"===t.value||")"===t.value||"#"===t.value;function ze(t){let n,l=0,r=0;for(const s of t){if(s.type===e)if("("===s.value){if(r++,"func"===n.type){const e=n.value.toLowerCase();"lambda"!==e&&"let"!==e||(l=r)}}else")"===s.value&&(r--,r<l&&(l=0));else l&&s.type===u&&/^[rc]$/.test(s.value)&&(s.type=o);n=s}return t}function je(t,n){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const r=Object.assign({},Se,l),{withLocation:o,mergeRefs:s,negativeNumbers:i}=r,a=[];let c=0,f=0,p=0;const h=[];let g=null,d=null,m=null;const x=e=>{const t=e.type===u,n=m&&m.type===u;m&&(t&&n||t&&Me(m)||n&&Me(e))?(m.value+=e.value,m.type=u,o&&(m.loc[1]=e.loc[1])):("operator-trim"===e.type&&(h.push(a.length),e.type=u),a.push(e),m=e,"whitespace"!==e.type&&"newline"!==e.type&&(d=g,g=e))};if("="===t[0]){c++,x({type:"fx_prefix",value:"=",...o?{loc:[0,1]}:{}})}for(;c<t.length;){const l=c,s=t.slice(c);let h="",y="";for(let e=0;e<n.length;e++){const t=n[e](s,r);if(t){h=t.type,y=t.value,c+=y.length;break}}h||(h=u,y=t[c],c++);const v={type:h,value:y,...o?{loc:[l,c]}:{}};if(m&&"func"===m.type&&"("===y){const e=m.value.toLowerCase();"lambda"!==e&&"let"!==e||f++}if(h===u){const e=y.toLowerCase();p+="r"===e||"c"===e?1:0}if("string"===h){const e=y.length;if('""'===y);else if('"'===y||'"'!==y[e-1])v.unterminated=!0;else if('""'!==y&&'"'===y[e-2]){let t=e-1;for(;'"'===y[t];)t--;!(t+1)^(e-t+1)%2==0&&(v.unterminated=!0)}}if(i&&"number"===h){const t=m;if(t&&Fe(t,e)&&"-"===t.value&&(!d||Fe(d,"fx_prefix")||!De(d))){const e=a.pop();v.value="-"+y,o&&(v.loc[0]=e.loc[0]),g=d,m=a[a.length-1]}}x(v)}p&&f&&ze(a);for(const t of h){const n=a[t-1],l=a[t-1];n&&"range"===n.type&&l&&"range"===l.type?a[t].type=e:a[t].type=u}return s?Ue(a):a}function qe(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return je(e,ke,t)}function Be(e){return!!e&&("range"===e.type||e.type===l||e.type===r)}function Ze(e){return!!e&&("range"===e.type||e.type===l||e.type===r||e.type===s||e.type===o)}function Pe(e){return!!e&&("bool"===e.type||e.type===t||"number"===e.type||"string"===e.type)}function Xe(e){return!!e&&e.type===t}function We(e){return!!e&&("whitespace"===e.type||"newline"===e.type)}function Ge(e){return!!e&&"func"===e.type}function He(e){return!!e&&"fx_prefix"===e.type}function Ye(t){return!!t&&t.type===e}const Ke="(END)",Ve=["ANCHORARRAY","CHOOSE","DROP","IF","IFS","INDEX","INDIRECT","LAMBDA","LET","OFFSET","REDUCE","SINGLE","SWITCH","TAKE","TRIMRANGE","XLOOKUP"],Qe=e=>Ve.includes(e.toUpperCase()),Je=function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=(e&&e.value)+"";return!!Ze(e)||(!(!t||!Ye(e)||":"!==n&&","!==n&&n.trim())||(!(!Ge(e)||!Qe(n))||!(!Xe(e)||"#REF!"!==n)))},et=e=>!!e&&(e.type===c||("ErrorLiteral"===e.type||e.type===t)&&"#REF!"===e.value||e.type===a&&(":"===e.operator||" "===e.operator||","===e.operator)||Ze(e)||e.type===f&&Qe(e.callee.name)),tt={};let nt,lt,rt,ot=!1,st=!1;function ut(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const n=new Error(e);throw n.source=lt.map((e=>e.value)).join(""),n.sourceOffset=lt.slice(0,t??rt).reduce(((e,t)=>e+t.value.length),0),n}function it(){let e,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=rt;do{e=lt[++n]}while(e&&(We(e)||Ye(e)&&"("===e.value));return Je(e,t)}function at(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(e&&e!==nt.id&&ut(`Expected ${e} but got ${nt.id}`),We(lt[rt])){const e=et(t),n=e&&it(!1),l=e&&lt[rt+1]&&"("===lt[rt+1].value;if(!n&&!l)for(;We(lt[rt]);)rt++}if(rt>=lt.length)return void(nt=tt[Ke]);const n=lt[rt];let l;return rt+=1,n.unterminated&&ut("Encountered an unterminated token"),Ye(n)?(l=tt[n.value],l||ut(`Unknown operator ${n.value}`)):We(n)?l=tt["(WHITESPACE)"]:Pe(n)?l=tt.Literal:Ze(n)?l=tt[c]:Ge(n)?l=tt["(FUNCTION)"]:ut(`Unexpected ${n.type} token: ${n.value}`),nt=Object.create(l),nt.type=n.type,nt.value=n.value,n.loc&&(nt.loc=[...n.loc]),nt}function ct(e){let t=nt;at(null,t);let n=t.nud();for(;e<nt.lbp;)t=nt,at(null,t),n=t.led(n);return n}const ft={nud:()=>ut("Invalid syntax"),led:()=>ut("Missing operator")};function pt(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=tt[e];return n?t>=n.lbp&&(n.lbp=t):(n={...ft},n.id=e,n.value=e,n.lbp=t,tt[e]=n),n}function ht(e,t,n){const l=pt(e,t);return l.led=n||function(e){this.type=a,this.operator=this.value,delete this.value;const n=ct(t);return this.arguments=[e,n],this.loc&&(this.loc=[e.loc[0],n.loc[1]]),this},l}function gt(e,t){const n=pt(e,0);return n.lbp=70,n.led=t||function(e){return this.type=i,this.operator=this.value,delete this.value,this.arguments=[e],this.loc&&(this.loc[0]=e.loc[0]),this},n}function dt(e,t){const n=pt(e);return n.nud=t||function(){this.type=i,this.operator=this.value,delete this.value;const e=ct(70);return this.arguments=[e],this.loc&&(this.loc[1]=e.loc[1]),this},n}function mt(e,t){return ht(e,t,(function(n){et(n)||ut(`Unexpected ${e} operator`);const l=ct(t);return et(l)||ut(`Unexpected ${nt.type} following ${this.id}`),this.type=a,this.operator=this.value.trim()?this.value:" ",delete this.value,this.arguments=[n,l],this.loc&&(this.loc=[n.loc[0],l.loc[1]]),this}))}pt(Ke),mt(":",80);const xt=mt(",",80);mt("(WHITESPACE)",80);const yt=e=>{const t=xt.lbp>0;return null!=e&&(xt.lbp=e?80:0),t};function vt(e){const t=[],n={};let l,r=!1;const o=yt(!1);if(")"!==nt.id)for(;!r;){We(nt)&&at();const e=rt,o=ct(0);if(","===nt.id){if(o.type===c&&"name"===o.kind){const e=o.value.toLowerCase();e in n&&ut("Duplicate name: "+o.value),n[e]=1;const l={type:"Identifier",name:o.value};o.loc&&(l.loc=o.loc),t.push(l)}else rt=e,ut("LAMBDA argument is not a name");at(",")}else l=o,r=!0}return yt(o),delete this.value,this.type="LambdaExpression",this.params=t,this.body=l||null,e.loc&&(this.loc=[e.loc[0],nt.loc[1]]),at(")",this),this}function $t(e){const t=[],n=[],l={};let r,o=0;const s=(e,s)=>{if(r&&ut("Unexpected argument following calculation"),s&&o>=2)r=e;else{if(!(o%2))if(e&&e.type===c&&"name"===e.kind){const n=e.value.toLowerCase();n in l&&ut("Duplicate name: "+e.value),l[n]=1,t.push({type:"Identifier",name:e.value,loc:e.loc})}else o>=2?r=e:ut("Argument is not a name");else n.push(e)}o++},u=yt(!1);let i=!1;if(")"!==nt.id){for(;")"!==nt.id;)if(We(nt)&&at(),","===nt.id)s(null),i=!0,at();else{s(ct(0),","!==nt.id),i=!1,","===nt.id&&(at(","),i=!0)}yt(u)}i&&s(null,!0),void 0===r&&ut("Unexpected end of arguments"),yt(u),delete this.value,this.type=p,this.declarations=[],t.length||ut("Unexpected end of arguments");for(let e=0;e<t.length;e++){const l={type:"LetDeclarator",id:t[e],init:n[e],loc:t[e].loc&&[t[e].loc[0],n[e].loc[1]]};this.declarations.push(l)}return this.body=r,e.loc&&(this.loc=[e.loc[0],nt.loc[1]]),at(")",this),this}function wt(){let e=1;return()=>"fxg"+e++}function Nt(e,t){return null==e&&null==t||e===t}function Et(e,t){if(Array.isArray(e)!==Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!Nt(e[n],t[n]))return!1;return!0}function Rt(e,t){return!e&&!t||String(e).toLowerCase()===String(t).toLowerCase()}function bt(e,t){if((e.name||t.name)&&e.name!==t.name)return!1;if(e.columns||t.columns){if(e.table!==t.table)return!1;if(!Et(e.columns,t.columns))return!1;if(!Et(e.sections,t.sections))return!1}return!!(!e.range&&!t.range||Nt(e.range.top,t.range.top)&&Nt(e.range.bottom,t.range.bottom)&&Nt(e.range.left,t.range.left)&&Nt(e.range.right,t.range.right))&&!(!Rt(e.workbookName,t.workbookName)||!Rt(e.sheetName,t.sheetName))}function At(e,t,n){return e.sheetName||(e.sheetName=t),e.workbookName||(e.workbookName=n),e}gt("%"),gt("#",(function(e){return et(e)||ut("# expects a reference"),this.type=i,this.operator=this.value,delete this.value,this.arguments=[e],this})),dt("+"),dt("-"),dt("@"),ht("^",50),ht("*",40),ht("/",40),ht("+",30),ht("-",30),ht("&",20),ht("=",10),ht("<",10),ht(">",10),ht("<=",10),ht(">=",10),ht("<>",10),pt("Literal").nud=function(){const{type:e,value:n}=this;if(this.type="Literal",this.raw=n,"number"===e)this.value=+n;else if("bool"===e)this.value="TRUE"===n.toUpperCase();else if(e===t)this.type="ErrorLiteral",this.value=n.toUpperCase();else{if("string"!==e)throw new Error("Unsupported literal type: "+e);this.value=n.slice(1,-1).replace(/""/g,'"')}return this},pt(c).nud=function(){return this.type===o?this.kind="name":this.type===s?this.kind="table":this.type===l?this.kind="beam":this.kind="range",this.type=c,this},pt(")"),dt("(",(function(){const e=yt(!0),t=ct(0);return at(")",t),yt(e),t})),pt("(FUNCTION)").nud=function(){return this},ht("(",90,(function(e){let t={type:"Identifier",name:e.value};"(FUNCTION)"!==e.id&&("LambdaExpression"===e.type||e.type===f||e.type===p||e.type===c||e.type===i&&"#"===e.value||"ErrorLiteral"===e.type&&"#REF!"===e.value?t=e:ut("Unexpected call",rt-1));const n=e.value.toLowerCase();if("lambda"===n)return vt.call(this,e);if("let"===n)return $t.call(this,e);const l=[];let r=!1;if(")"!==nt.id){const e=yt(!1);for(;")"!==nt.id;)if(We(nt)&&at(),","===nt.id)l.push(null),r=!0,at();else{const e=ct(0);l.push(e),r=!1,","===nt.id&&(at(","),r=!0)}yt(e)}r&&l.push(null);const o=nt;return delete this.value,this.type=f,this.callee=t,e.loc&&(this.callee.loc=[...e.loc]),this.arguments=l,e.loc&&(this.loc=[e.loc[0],o.loc[1]]),at(")",this),this})),pt("}"),pt(";"),dt("{",(function(){"}"===nt.id&&ut("Unexpected empty array");let e=[],t=!1;const n=[e],l=yt(!1);for(;!t;){if(We(nt)&&at(),Pe(nt))e.push(tt.Literal.nud.call(nt)),at();else if(ot&&et(nt))e.push(tt[c].nud.call(nt)),at();else if(st&&Ge(nt)){const t=ct(0);e.push(t)}else ut(`Unexpected ${nt.type} in array: ${nt.value}`);","===nt.id?at(","):";"===nt.id?(at(";"),e=[],n.push(e)):t=!0}const r=nt;return at("}"),yt(l),this.type="ArrayExpression",this.elements=n,this.loc&&(this.loc[1]=r.loc[1]),delete this.value,this}));const Ct=(e,t,n)=>Math.min(Math.max(t,e),n);function Tt(e,t){return t?String(e+1):e?"["+e+"]":""}function kt(e){let{r0:t,c0:n,r1:l,c1:r}=e;const{$c0:o,$c1:s,$r0:u,$r1:i}=e,a=null==t,c=null==n;let f=null==l,p=null==r;const h=M(e.trim),g=!!e.trim;t=Ct(u?0:-1048575,0|t,1048575),n=Ct(o?0:-16383,0|n,16383),!a&&f&&!c&&p?(l=t,f=!1,r=n,p=!1):(l=Ct(i?0:-1048575,0|l,1048575),r=Ct(s?0:-16383,0|r,16383));if(0===t&&l>=1048575&&!c&&!p||a&&f){const e=Tt(n,o),t=Tt(r,s);return"C"+(e!==t||g?e+h+"C"+t:e)}if(0===n&&r>=16383&&!a&&!f||c&&p){const e=Tt(t,u),n=Tt(l,i);return"R"+(e!==n||g?e+h+"R"+n:e)}const d=Tt(t,u),m=Tt(l,i),x=Tt(n,o),y=Tt(r,s);return a||f||c||p?(a?"":"R"+d)+(c?"":"C"+x)+h+(f?"":"R"+m)+(p?"":"C"+y):d!==m||x!==y?"R"+d+"C"+x+h+"R"+m+"C"+y:"R"+d+"C"+x}function Lt(e){let t=null,n=null,l=null,r=null;const o=/^R(?:\[([+-]?\d+)\]|(\d+))?/.exec(e);o&&(o[1]?(t=parseInt(o[1],10),l=!1):o[2]?(t=parseInt(o[2],10)-1,l=!0):(t=0,l=!1),e=e.slice(o[0].length));const s=/^C(?:\[([+-]?\d+)\]|(\d+))?/.exec(e);return s&&(s[1]?(n=parseInt(s[1],10),r=!1):s[2]?(n=parseInt(s[2],10)-1,r=!0):(n=0,r=!1),e=e.slice(s[0].length)),!o&&!s||e.length?null:[t,n,l,r]}function It(e){let t=null;const[n,l,r,o]=e.split(/(\.?:\.?)/);if(o)return null;const s=Lt(n),u=D(!!l&&"."===l[0],!!l&&"."===l[l.length-1]);if(s){const[e,n,l,o]=s;if(r){const s=Lt(r);if(!s)return null;{t={};const[r,u,i,a]=s;null!=e&&null!=r?(t.r0=l===i?Math.min(e,r):e,t.$r0=l,t.r1=l===i?Math.max(e,r):r,t.$r1=i):null!=e&&null==r?(t.r0=e,t.$r0=l,t.r1=null,t.$r1=l):null==e&&null!=r?(t.r0=r,t.$r0=i,t.r1=null,t.$r1=i):null==e&&null==r&&(t.r0=null,t.$r0=!1,t.r1=null,t.$r1=!1),null!=n&&null!=u?(t.c0=o===a?Math.min(n,u):n,t.$c0=o,t.c1=o===a?Math.max(n,u):u,t.$c1=a):null!=n&&null==u?(t.c0=n,t.$c0=o,t.c1=null,t.$c1=o):null==n&&null!=u?(t.c0=u,t.$c0=a,t.c1=null,t.$c1=a):null==n&&null==u&&(t.c0=null,t.$c0=!1,t.c1=null,t.$c1=!1)}}else t=null!=e&&null==n?{r0:e,c0:null,r1:e,c1:null,$r0:l,$c0:!1,$r1:l,$c1:!1}:null==e&&null!=n?{r0:null,c0:n,r1:null,c1:n,$r0:!1,$c0:o,$r1:!1,$c1:o}:{r0:e||0,c0:n||0,r1:e||0,c1:n||0,$r0:l||!1,$c0:o||!1,$r1:l||!1,$c1:o||!1}}return t&&u&&(t.trim=u),t}function _t(e){let{allowNamed:t=!0,allowTernary:n=!1,xlsx:l=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=C(e,{allowNamed:t,allowTernary:n,xlsx:l,r1c1:!0});if(r&&(r.r0||r.name)){const e=r.r1?It(r.r0+r.operator+r.r1):It(r.r0);return e?l?{workbookName:r.workbookName,sheetName:r.sheetName,range:e}:{context:r.context,range:e}:r.name?l?{workbookName:r.workbookName,sheetName:r.sheetName,name:r.name}:{context:r.context,name:r.name}:null}return null}function Ot(e){let{xlsx:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=t?L(e):k(e);return n+(e.name?e.name:kt(e.range))}const Ut=(e,t,n)=>null==t?null:e?t:t-n,Ft={withLocation:!1,mergeRefs:!1,allowTernary:!0,r1c1:!1};function St(e,t,n,l){let r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=e;if(null!=o&&!t){if(o=n+e,o<0){if(!r)return NaN;o=l+o+1}if(o>l){if(!r)return NaN;o-=l+1}}return o}const Mt={wrapEdges:!0,mergeRefs:!0,allowTernary:!0,xlsx:!1};const Dt=Object.freeze({OPERATOR:e,BOOLEAN:"bool",ERROR:t,NUMBER:"number",FUNCTION:"func",NEWLINE:"newline",WHITESPACE:"whitespace",STRING:"string",CONTEXT:n,CONTEXT_QUOTE:"context_quote",REF_RANGE:"range",REF_BEAM:l,REF_TERNARY:r,REF_NAMED:o,REF_STRUCT:s,FX_PREFIX:"fx_prefix",UNKNOWN:u}),zt=Object.freeze({UNARY:i,BINARY:a,REFERENCE:c,LITERAL:"Literal",ERROR:"ErrorLiteral",CALL:f,ARRAY:"ArrayExpression",IDENTIFIER:"Identifier"});exports.MAX_COLS=16383,exports.MAX_ROWS=1048575,exports.addA1RangeBounds=P,exports.addTokenMeta=function(e){let{sheetName:t="",workbookName:n=""}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const o=[];let i=null;const a=wt(),c=[],f=()=>o.length+(i?1:0);return e.forEach(((e,p)=>{if(e.index=p,e.depth=f(),"("===e.value)o.push(e),e.depth=f();else if(")"===e.value){const t=o.pop();if(t){const n=a();e.groupId=n,e.depth=t.depth,t.groupId=n}else e.error=!0}else if("{"===e.value)i?e.error=!0:(i=e,e.depth=f());else if("}"===e.value){if(i){const t=a();e.groupId=t,e.depth=i.depth,i.groupId=t}else e.error=!0;i=null}else if("range"===e.type||e.type===l||e.type===r||e.type===s){const l=e.type===s?Q(e.value,{xlsx:!0}):B(e.value,{allowTernary:!0,xlsx:!0});if(l&&(l.range||l.columns)){l.source=e.value,At(l,t,n);const r=c.find((e=>bt(e,l)));r?e.groupId=r.groupId:(l.groupId=a(),e.groupId=l.groupId,c.push(l))}}else e.type===u&&(e.error=!0)})),e},exports.fixRanges=function e(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{addBounds:!1};if("string"==typeof t)return e(qe(t,n),n).map((e=>e.value)).join("");if(!Array.isArray(t))throw new Error("fixRanges expects an array of tokens");const{addBounds:l,r1c1:r,xlsx:o,thisRow:u}=n;if(r)throw new Error("fixRanges does not have an R1C1 mode");let i=0;return t.map((e=>{const t={...e};e.loc&&(t.loc=[...e.loc]);let n=0;if(t.type===s){const e=ne(Q(t.value,{xlsx:o}),{xlsx:o,thisRow:u});n=e.length-t.value.length,t.value=e}else if(Be(t)){const e=B(t.value,{xlsx:o,allowTernary:!0}),r=e.range;l&&P(r);const s=Z(e,{xlsx:o});n=s.length-t.value.length,t.value=s}return i||n?(t.loc&&(t.loc[0]+=i),i+=n,t.loc&&(t.loc[1]+=i)):i+=n,t}))},exports.fromCol=F,exports.isError=Xe,exports.isFunction=Ge,exports.isFxPrefix=He,exports.isLiteral=Pe,exports.isOperator=Ye,exports.isRange=Be,exports.isReference=Ze,exports.isWhitespace=We,exports.mergeRefTokens=Ue,exports.nodeTypes=zt,exports.parse=function(e,t){if("string"==typeof e)lt=qe(e,{withLocation:!1,...t,mergeRefs:!0});else{if(!Array.isArray(e))throw new Error("Parse requires a string or array of tokens.");lt=e}for(ot=t?.permitArrayRanges,st=t?.permitArrayCalls,rt=0;We(lt[rt])||He(lt[rt]);)rt++;at(),yt(!0);const n=ct(0);return at(Ke),n},exports.parseA1Ref=B,exports.parseR1C1Ref=_t,exports.parseStructRef=Q,exports.stringifyA1Ref=Z,exports.stringifyR1C1Ref=Ot,exports.stringifyStructRef=ne,exports.toCol=S,exports.tokenTypes=Dt,exports.tokenize=qe,exports.translateToA1=function(e,n){let l=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Mt;const r=q(n),o="string"==typeof e,s={...Mt,...l},u=o?qe(e,{withLocation:!1,mergeRefs:s.mergeRefs,xlsx:s.xlsx,allowTernary:s.allowTernary,r1c1:!0}):e;let i=0;const a={xlsx:s.xlsx,allowTernary:s.allowTernary};return u.forEach((e=>{if(Be(e)){const n=e.value,l=_t(n,a),o=l.range,u={},c=St(o.r0,o.$r0,r.top,1048575,s.wrapEdges),f=St(o.r1,o.$r1,r.top,1048575,s.wrapEdges);c>f?(u.top=f,u.$top=o.$r1,u.bottom=c,u.$bottom=o.$r0):(u.top=c,u.$top=o.$r0,u.bottom=f,u.$bottom=o.$r1);const p=St(o.c0,o.$c0,r.left,16383,s.wrapEdges),h=St(o.c1,o.$c1,r.left,16383,s.wrapEdges);p>h?(u.left=h,u.$left=o.$c1,u.right=p,u.$right=o.$c0):(u.left=p,u.$left=o.$c0,u.right=h,u.$right=o.$c1),o.trim&&(u.trim=o.trim),isNaN(c)||isNaN(f)||isNaN(p)||isNaN(h)?(e.type=t,e.value="#REF!",delete e.groupId):(l.range=u,e.value=Z(l,a)),e.loc&&(e.loc[0]+=i,i+=e.value.length-n.length,e.loc[1]+=i)}else i&&e.loc&&(e.loc[0]+=i,e.loc[1]+=i)})),o?u.map((e=>e.value)).join(""):u},exports.translateToR1C1=function(e,t){let{xlsx:n=!1,allowTernary:l=!0}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{top:r,left:o}=q(t),s="string"==typeof e,u=s?qe(e,{...Ft,xlsx:n,allowTernary:l}):e;let i=0;const a={xlsx:n,allowTernary:l};return u.forEach((e=>{if(Be(e)){const t=e.value,n=B(t,a),l=n.range,s={};s.r0=Ut(l.$top,l.top,r),s.r1=Ut(l.$bottom,l.bottom,r),s.c0=Ut(l.$left,l.left,o),s.c1=Ut(l.$right,l.right,o),s.$r0=l.$top,s.$r1=l.$bottom,s.$c0=l.$left,s.$c1=l.$right,l.trim&&(s.trim=l.trim),n.range=s,e.value=Ot(n,a),e.loc&&(e.loc[0]+=i,i+=e.value.length-t.length,e.loc[1]+=i)}else i&&e.loc&&(e.loc[0]+=i,e.loc[1]+=i)})),s?u.map((e=>e.value)).join(""):u};
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnguanMiLCJzb3VyY2VzIjpbXSwic291cmNlc0NvbnRlbnQiOltdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=
1
+ "use strict";const e="operator",t="operator-trim",n="bool",l="error",r="number",o="func",s="newline",u="whitespace",i="string",a="context_quote",c="context",f="range",p="range_beam",h="range_ternary",g="range_named",d="structured",m="fx_prefix",x="unknown",y="UnaryExpression",v="BinaryExpression",$="ReferenceIdentifier",w="Literal",R="ErrorLiteral",N="CallExpression",E="LambdaExpression",b="LetExpression",A="ArrayExpression",C="Identifier",k=16383,T=1048575;function L(e){const t=e||"",n=t.length;let l=0;if(n>2){const e=t.charCodeAt(n-3);l+=676*(1+e-(e>95?32:0)-65)}if(n>1){const e=t.charCodeAt(n-2);l+=26*(1+e-(e>95?32:0)-65)}if(n){const e=t.charCodeAt(n-1);l+=e-(e>95?32:0)-65}return l}const I=/^\[('['#@[\]]|[^'#@[\]])+\]/i,O=/^([^#@[\]:]+)/i,U={headers:1,data:2,totals:4,all:8,"this row":16,"@":16},F=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return Object.freeze(t)},_={0:F(),1:F("headers"),2:F("data"),4:F("totals"),8:F("all"),16:F("this row"),3:F("headers","data"),6:F("data","totals")},S=function(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],n=I.exec(e);if(n){const e=n[0].slice(1,-1).replace(/'(['#@[\]])/g,"$1");return[n[0],e]}return t&&(n=O.exec(e),n)?[n[0],n[0]]:null};function M(e){const t=[];let n,l,r=0,o=e,s=0;if(!(n=/^(\[\s*)/.exec(o)))return null;if(l=/^\[#([a-z ]+)\]/i.exec(o)){const e=l[1].toLowerCase();if(r+=l[0].length,!U[e])return null;s|=U[e]}else if(l=S(o,!1))r+=l[0].length,t.push(l[1]);else{let l=!0;for(o=o.slice(n[1].length),r+=n[1].length;l&&(n=/^\[#([a-z ]+)\](\s*,\s*)?/i.exec(o));){const e=n[1].toLowerCase();if(!U[e])return null;s|=U[e],o=o.slice(n[0].length),r+=n[0].length,l=!!n[2]}if(l&&(n=/^@/.exec(o))&&(s|=U["@"],o=o.slice(1),r+=1,l="]"!==o[0]),!(s in _))return null;const u=l?S(e.slice(r)):null;if(u){if(r+=u[0].length,t.push(u[1]),o=e.slice(r),":"===o[0]){o=o.slice(1),r++;const e=S(o);if(!e)return null;r+=e[0].length,t.push(e[1])}l=!1}for(;" "===e[r];)r++;if(l||"]"!==e[r])return null;r++}const u=_[s];return{columns:t,sections:u?u.concat():u,length:r,token:e.slice(0,r)}}const D=/^(?!!)(\[(?:[^\]])+\])?([0-9A-Za-z._¡¤§¨ª\u00ad¯-\uffff]+)?(?=!)/,z=/^'(?:''|[^'])*('|$)(?=!)/,j="\\$?[A-Z]{1,3}\\$?[1-9][0-9]{0,6}",B="\\$?[A-Z]{1,3}",Z="\\$?[1-9][0-9]{0,6}",X="\\.?:\\.?",P="(?![a-z0-9_\\u00a1-\\uffff])",W=new RegExp(`^${B}${X}${B}${P}`,"i"),G=new RegExp(`^${Z}${X}${Z}${P}`,"i"),Y=new RegExp(`^${j}${P}`,"i"),H=new RegExp(`^((${B}|${Z})${X}${j}|${j}${X}(${B}|${Z}))(?![\\w($.])`,"i"),K="(?:R(?:\\[[+-]?\\d+\\]|[1-9][0-9]{0,6})?)",q="(?:C(?:\\[[+-]?\\d+\\]|[1-9][0-9]{0,4})?)",V=new RegExp(`^${q}(${X}${q})?${P}`,"i"),Q=new RegExp(`^${K}(${X}${K})?${P}`,"i"),J=new RegExp(`^(?:(?=[RC])${K}${q})${P}`,"i"),ee=new RegExp(`^(${K}${q}(${X}${q}|${X}${K})(?![[\\d])|(${K}|${q})(${X}${K}${q}))${P}`,"i"),te=/^[a-zA-Z\\_\u00a1-\uffff][a-zA-Z0-9\\_.?\u00a1-\uffff]{0,254}/i;function ne(e,t){return n=>{const l=t.exec(n);if(l)return{type:e,value:l[0]}}}function le(e){const t=te.exec(e);if(t){const e=t[0].toLowerCase();return"\\"===e[0]&&t[0].length<3||("r"===e||"c"===e)?null:{type:g,value:t[0]}}}const re=/^'(?:[^[\]]+?)?(?:\[(.+?)\])?(?:[^[\]]+?)'$/,oe=/^'\[(.+?)\]'$/;function se(e,t){const n=z.exec(e);if(n){const e=n[0];if(t.xlsx&&oe.test(e)||re.test(e))return{type:a,value:e}}const l=D.exec(e);if(l){const[,e,n]=l;if(e&&n||n||e&&!n&&t.xlsx)return{type:c,value:l[0]}}}function ue(e){const t=M(e);if(t){let n=t.length;for(;" "===e[n];)n++;if("!"!==e[n])return{type:d,value:t.token}}return null}const ie=/([RC])(\[?)(-?\d+)/gi,ae=/(\d+|[a-zA-Z]+)/gi;function ce(e,t){let n,l;if(t.r1c1){if(t.allowTernary&&(n=ee.exec(e))?l={type:h,value:n[0]}:(n=J.exec(e))?l={type:f,value:n[0]}:((n=Q.exec(e))||(n=V.exec(e)))&&(l={type:p,value:n[0]}),l){for(ie.lastIndex=0;null!==(n=ie.exec(l.value));){const e=("R"===n[1]?T:k)+(n[2]?0:1),t=parseInt(n[3],10);if(t>e||t<-e)return null}return l}}else if(t.allowTernary&&(n=H.exec(e))?l={type:h,value:n[0]}:(n=W.exec(e))||(n=G.exec(e))?l={type:p,value:n[0]}:(n=Y.exec(e))&&(l={type:f,value:n[0]}),l){for(ae.lastIndex=0;null!==(n=ae.exec(l.value));)if(/^\d/.test(n[1])){if(parseInt(n[1],10)-1>T)return null}else if(L(n[1])>k)return null;return l}}const fe=[ne(l,/^#(NAME\?|FIELD!|CALC!|VALUE!|REF!|DIV\/0!|NULL!|NUM!|N\/A|GETTING_DATA\b|SPILL!|UNKNOWN!|FIELD\b|CALC\b|SYNTAX\?|ERROR!|CONNECT!|BLOCKED!|EXTERNAL!)/i),ne(t,/^(\.:\.|\.:|:\.)/),ne(e,/^(<=|>=|<>|[-+/*^%&<>=]|[{},;]|[()]|@|:|!|#)/),ne(o,/^[A-Z_]+[A-Z\d_.]*(?=\()/i),ne(n,/^(TRUE|FALSE)\b/i),ne(s,/^\n+/),ne(u,/^[ \f\r\t\v\u00a0\u1680\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]+/),ne(i,/^"(?:""|[^"])*("|$)/),se,ce,ue,ne(r,/^(?:\d+(\.\d+)?(?:[eE][+-]?\d+)?|\d+)/),le],pe=[function(t,n){if(n.r1c1)return"!"===t[0]?{type:e,value:t[0]}:null;const l=/^(!|\.?:\.?)/.exec(t);return l?{type:e,value:l[1]}:null},se,ce,ue,le],he={};function ge(e,t){if(e.length){const n=e[0];t[n]=t[n]||{},ge(e.slice(1),t[n])}else t.$=!0}[[f,":",f],[f,".:",f],[f,":.",f],[f,".:.",f],[f],[p],[h],[c,"!",f,":",f],[c,"!",f,".:",f],[c,"!",f,":.",f],[c,"!",f,".:.",f],[c,"!",f],[c,"!",p],[c,"!",h],[a,"!",f,":",f],[a,"!",f,".:",f],[a,"!",f,":.",f],[a,"!",f,".:.",f],[a,"!",f],[a,"!",p],[a,"!",h],[g],[c,"!",g],[a,"!",g],[d],[g,d],[c,"!",g,d],[a,"!",g,d]].forEach((e=>ge(e.concat().reverse(),he)));const de=function(t,n,l){let r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;const o=t[l-r];if(o){const s=o.type===e?o.value:o.type;if(s in n)return de(t,n[s],l,r+1)}return n.$?r:0};function me(e){const t=[];for(let n=e.length-1;n>=0;n--){let l=e[n];const r=de(e,he,n);if(r){const t=e.slice(n-r+1,n+1);l={...l},l.value=t.map((e=>e.value)).join(""),l.loc&&t[0].loc&&(l.loc[0]=t[0].loc[0]),n-=r-1}t.unshift(l)}return t}const xe=(e,t)=>e&&e.type===t,ye={withLocation:!1,mergeRefs:!0,allowTernary:!1,negativeNumbers:!0,r1c1:!1},ve=e=>e.type===g||e.type===o,$e=t=>!xe(t,e)||"%"===t.value||"}"===t.value||")"===t.value||"#"===t.value;function we(n,l){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const c=Object.assign({},ye,a),{withLocation:p,mergeRefs:h,negativeNumbers:d}=c,y=[];let v=0,$=0,w=0;const R=[];let N=null,E=null,b=null;const A=e=>{const n=e.type===x,l=b&&b.type===x;b&&(n&&l||n&&ve(b)||l&&ve(e))?(b.value+=e.value,b.type=x,p&&(b.loc[1]=e.loc[1])):(e.type===t&&(R.push(y.length),e.type=x),y.push(e),b=e,e.type!==u&&e.type!==s&&(E=N,N=e))};if("="===n[0]){v++,A({type:m,value:"=",...p?{loc:[0,1]}:{}})}for(;v<n.length;){const t=v,s=n.slice(v);let u="",a="";for(let e=0;e<l.length;e++){const t=l[e](s,c);if(t){u=t.type,a=t.value,v+=a.length;break}}u||(u=x,a=n[v],v++);const f={type:u,value:a,...p?{loc:[t,v]}:{}};if(b&&b.type===o&&"("===a){const e=b.value.toLowerCase();"lambda"!==e&&"let"!==e||$++}if(u===x){const e=a.toLowerCase();w+="r"===e||"c"===e?1:0}if(u===i){const e=a.length;if('""'===a);else if('"'===a||'"'!==a[e-1])f.unterminated=!0;else if('""'!==a&&'"'===a[e-2]){let t=e-1;for(;'"'===a[t];)t--;!(t+1)^(e-t+1)%2==0&&(f.unterminated=!0)}}if(d&&u===r){const t=b;if(t&&xe(t,e)&&"-"===t.value&&(!E||xe(E,m)||!$e(E))){const e=y.pop();f.value="-"+a,p&&(f.loc[0]=e.loc[0]),N=E,b=y[y.length-1]}}A(f)}w&&$&&function(t){let n,l=0,r=0;for(const s of t){if(s.type===e)if("("===s.value){if(r++,n.type===o){const e=n.value.toLowerCase();"lambda"!==e&&"let"!==e||(l=r)}}else")"===s.value&&(r--,r<l&&(l=0));else l&&s.type===x&&/^[rc]$/.test(s.value)&&(s.type=g);n=s}}(y);for(const t of R){const n=y[t-1],l=y[t-1];n&&n.type===f&&l&&l.type===f?y[t].type=e:y[t].type=x}return h?me(y):y}function Re(e){return we(e,fe,arguments.length>1&&void 0!==arguments[1]?arguments[1]:{})}function Ne(e){return!!e&&(e.type===f||e.type===p||e.type===h)}function Ee(e){return!!e&&(e.type===f||e.type===p||e.type===h||e.type===d||e.type===g)}function be(e){return!!e&&(e.type===n||e.type===l||e.type===r||e.type===i)}function Ae(e){return!!e&&e.type===l}function Ce(e){return!!e&&(e.type===u||e.type===s)}function ke(e){return!!e&&e.type===o}function Te(e){return!!e&&e.type===m}function Le(t){return!!t&&t.type===e}const Ie="(END)",Oe="(FUNCTION)",Ue="(WHITESPACE)",Fe=["ANCHORARRAY","CHOOSE","DROP","IF","IFS","INDEX","INDIRECT","LAMBDA","LET","OFFSET","REDUCE","SINGLE","SWITCH","TAKE","TRIMRANGE","XLOOKUP"],_e=e=>Fe.includes(e.toUpperCase()),Se=e=>!!e&&(e.type===$||(e.type===R||e.type===l)&&"#REF!"===e.value||e.type===v&&(":"===e.operator||" "===e.operator||","===e.operator)||Ee(e)||e.type===N&&_e(e.callee.name)),Me={};let De,ze,je,Be=!1,Ze=!1;function Xe(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const n=new Error(e);throw n.source=ze.map((e=>e.value)).join(""),n.sourceOffset=ze.slice(0,t??je).reduce(((e,t)=>e+t.value.length),0),n}function Pe(){let e,t=arguments.length>0&&void 0!==arguments[0]&&arguments[0],n=je;do{e=ze[++n]}while(e&&(Ce(e)||Le(e)&&"("===e.value));return function(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const n=(e&&e.value)+"";return!(!Ee(e)&&(!t||!Le(e)||":"!==n&&","!==n&&n.trim())&&(!ke(e)||!_e(n))&&(!Ae(e)||"#REF!"!==n))}(e,t)}function We(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(e&&e!==De.id&&Xe(`Expected ${e} but got ${De.id}`),Ce(ze[je])){const e=Se(t),n=e&&Pe(!1),l=e&&ze[je+1]&&"("===ze[je+1].value;if(!n&&!l)for(;Ce(ze[je]);)je++}if(je>=ze.length)return void(De=Me[Ie]);const n=ze[je];let l;return je+=1,n.unterminated&&Xe("Encountered an unterminated token"),Le(n)?(l=Me[n.value],l||Xe(`Unknown operator ${n.value}`)):Ce(n)?l=Me[Ue]:be(n)?l=Me[w]:Ee(n)?l=Me[$]:ke(n)?l=Me[Oe]:Xe(`Unexpected ${n.type} token: ${n.value}`),De=Object.create(l),De.type=n.type,De.value=n.value,n.loc&&(De.loc=[...n.loc]),De}function Ge(e){let t=De;We(null,t);let n=t.nud();for(;e<De.lbp;)t=De,We(null,t),n=t.led(n);return n}const Ye={nud:()=>Xe("Invalid syntax"),led:()=>Xe("Missing operator")};function He(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=Me[e];return n?t>=n.lbp&&(n.lbp=t):(n={...Ye},n.id=e,n.value=e,n.lbp=t,Me[e]=n),n}function Ke(e,t,n){const l=He(e,t);return l.led=n||function(e){this.type=v,this.operator=this.value,delete this.value;const n=Ge(t);return this.arguments=[e,n],this.loc&&(this.loc=[e.loc[0],n.loc[1]]),this},l}function qe(e,t){const n=He(e,0);return n.lbp=70,n.led=t||function(e){return this.type=y,this.operator=this.value,delete this.value,this.arguments=[e],this.loc&&(this.loc[0]=e.loc[0]),this},n}function Ve(e,t){const n=He(e);return n.nud=t||function(){this.type=y,this.operator=this.value,delete this.value;const e=Ge(70);return this.arguments=[e],this.loc&&(this.loc[1]=e.loc[1]),this},n}function Qe(e,t){return Ke(e,t,(function(n){Se(n)||Xe(`Unexpected ${e} operator`);const l=Ge(t);return Se(l)||Xe(`Unexpected ${De.type} following ${this.id}`),this.type=v,this.operator=this.value.trim()?this.value:" ",delete this.value,this.arguments=[n,l],this.loc&&(this.loc=[n.loc[0],l.loc[1]]),this}))}He(Ie),Qe(":",80);const Je=Qe(",",80);Qe(Ue,80);const et=e=>{const t=Je.lbp>0;return null!=e&&(Je.lbp=e?80:0),t};function tt(e){const t=[],n={};let l,r=!1;const o=et(!1);if(")"!==De.id)for(;!r;){Ce(De)&&We();const e=je,o=Ge(0);if(","===De.id){if(o.type===$&&"name"===o.kind){const e=o.value.toLowerCase();e in n&&Xe("Duplicate name: "+o.value),n[e]=1;const l={type:C,name:o.value};o.loc&&(l.loc=o.loc),t.push(l)}else je=e,Xe("LAMBDA argument is not a name");We(",")}else l=o,r=!0}return et(o),delete this.value,this.type=E,this.params=t,this.body=l||null,e.loc&&(this.loc=[e.loc[0],De.loc[1]]),We(")",this),this}function nt(e){const t=[],n=[],l={};let r,o=0;const s=(e,s)=>{if(r&&Xe("Unexpected argument following calculation"),s&&o>=2)r=e;else{if(!(o%2))if(e&&e.type===$&&"name"===e.kind){const n=e.value.toLowerCase();n in l&&Xe("Duplicate name: "+e.value),l[n]=1,t.push({type:C,name:e.value,loc:e.loc})}else o>=2?r=e:Xe("Argument is not a name");else n.push(e)}o++},u=et(!1);let i=!1;if(")"!==De.id){for(;")"!==De.id;)if(Ce(De)&&We(),","===De.id)s(null),i=!0,We();else{s(Ge(0),","!==De.id),i=!1,","===De.id&&(We(","),i=!0)}et(u)}i&&s(null,!0),void 0===r&&Xe("Unexpected end of arguments"),et(u),delete this.value,this.type=b,this.declarations=[],t.length||Xe("Unexpected end of arguments");for(let e=0;e<t.length;e++){const l={type:"LetDeclarator",id:t[e],init:n[e],loc:t[e].loc&&[t[e].loc[0],n[e].loc[1]]};this.declarations.push(l)}return this.body=r,e.loc&&(this.loc=[e.loc[0],De.loc[1]]),We(")",this),this}function lt(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=!1,l="";const r=[],o=()=>{l&&r.push(t?l:{value:l,braced:n}),l=""};for(let t=0;t<e.length;t++){const r=e[t];"["===r?(o(),n=!0):"]"===r?(o(),n=!1):l+=r}return o(),r}function rt(e){return{context:lt(e,!0)}}function ot(e){const t={},n=lt(e);if(n.length>1)t.workbookName=n[n.length-2].value,t.sheetName=n[n.length-1].value;else if(1===n.length){const e=n[0];e.braced?t.workbookName=e.value:t.sheetName=e.value}return t}qe("%"),qe("#",(function(e){return Se(e)||Xe("# expects a reference"),this.type=y,this.operator=this.value,delete this.value,this.arguments=[e],this})),Ve("+"),Ve("-"),Ve("@"),Ke("^",50),Ke("*",40),Ke("/",40),Ke("+",30),Ke("-",30),Ke("&",20),Ke("=",10),Ke("<",10),Ke(">",10),Ke("<=",10),Ke(">=",10),Ke("<>",10),He(w).nud=function(){const{type:e,value:t}=this;if(this.type=w,this.raw=t,e===r)this.value=+t;else if(e===n)this.value="TRUE"===t.toUpperCase();else if(e===l)this.type=R,this.value=t.toUpperCase();else{if(e!==i)throw new Error("Unsupported literal type: "+e);this.value=t.slice(1,-1).replace(/""/g,'"')}return this},He($).nud=function(){return this.type===g?this.kind="name":this.type===d?this.kind="table":this.type===p?this.kind="beam":this.kind="range",this.type=$,this},He(")"),Ve("(",(function(){const e=et(!0),t=Ge(0);return We(")",t),et(e),t})),He(Oe).nud=function(){return this},Ke("(",90,(function(e){let t={type:C,name:e.value};e.id!==Oe&&(e.type===E||e.type===N||e.type===b||e.type===$||e.type===y&&"#"===e.value||e.type===R&&"#REF!"===e.value?t=e:Xe("Unexpected call",je-1));const n=e.value.toLowerCase();if("lambda"===n)return tt.call(this,e);if("let"===n)return nt.call(this,e);const l=[];let r=!1;if(")"!==De.id){const e=et(!1);for(;")"!==De.id;)if(Ce(De)&&We(),","===De.id)l.push(null),r=!0,We();else{const e=Ge(0);l.push(e),r=!1,","===De.id&&(We(","),r=!0)}et(e)}r&&l.push(null);const o=De;return delete this.value,this.type=N,this.callee=t,e.loc&&(this.callee.loc=[...e.loc]),this.arguments=l,e.loc&&(this.loc=[e.loc[0],o.loc[1]]),We(")",this),this})),He("}"),He(";"),Ve("{",(function(){"}"===De.id&&Xe("Unexpected empty array");let e=[],t=!1;const n=[e],l=et(!1);for(;!t;){if(Ce(De)&&We(),be(De))e.push(Me[w].nud.call(De)),We();else if(Be&&Se(De))e.push(Me[$].nud.call(De)),We();else if(Ze&&ke(De)){const t=Ge(0);e.push(t)}else Xe(`Unexpected ${De.type} in array: ${De.value}`);","===De.id?We(","):";"===De.id?(We(";"),e=[],n.push(e)):t=!0}const r=De;return We("}"),et(l),this.type=A,this.elements=n,this.loc&&(this.loc[1]=r.loc[1]),delete this.value,this}));const st=e=>e&&(":"===e.value||".:"===e.value||":."===e.value||".:."===e.value)&&{operator:e.value},ut=e=>e&&e.type===f&&{r0:e.value},it=e=>e&&e.type===h&&{r0:e.value},at=e=>e&&e.type===f&&{r1:e.value},ct=t=>t&&t.type===e&&"!"===t.value&&{},ft=e=>e&&e.type===p&&{r0:e.value},pt=e=>e&&e.type===d&&{struct:e.value},ht=(e,t)=>{const n=t.xlsx?ot:rt;return e&&e.type===c?n(e.value):e&&e.type===a?n(e.value.slice(1,-1).replace(/''/g,"'")):void 0},gt=e=>e&&e.type===g&&{name:e.value},dt=[[it],[ut,st,at],[ut],[ft],[ht,ct,it],[ht,ct,ut,st,at],[ht,ct,ut],[ht,ct,ft]],mt=dt.concat([[gt],[ht,ct,gt],[pt],[gt,pt],[ht,ct,gt,pt]]);function xt(e,t){const n={withLocation:!1,mergeRefs:!1,allowTernary:!1,allowNamed:!0,r1c1:!1,xlsx:!1,...t},l=we(e,pe,n),r=n.xlsx?{workbookName:"",sheetName:"",r0:"",r1:"",name:"",operator:""}:{context:[],r0:"",r1:"",name:"",operator:""};l.length&&l[0].type===m&&l.shift();const o=n.allowNamed?mt:dt;for(let e=0;e<o.length;e++){const t={...r};if(o[e].length===l.length){const r=o[e].every(((e,r)=>{const o=e(l[r],n);return Object.assign(t,o),o}));if(r)return t}}return null}const yt=String.fromCharCode;function vt(e){return(e>=702?yt(((e-702)/676-0)%26+65):"")+(e>=26?yt((e/26-1)%26+65):"")+yt(e%26+65)}const $t=/[^0-9A-Za-z._¡¤§¨ª\u00ad¯-\uffff]/;function wt(e){let t="",n=0,l=0;const r=e.context||[];for(let e=r.length;e>-1;e--){const o=r[e];if(o){t=(l%2?"["+o+"]":o)+t,n+=+$t.test(o),l++}}return n&&(t="'"+t.replace(/'/g,"''")+"'"),t?t+"!":t}function Rt(e){let t="",n=0;const{workbookName:l,sheetName:r}=e;return l&&(t+="["+l+"]",n+=+$t.test(l)),r&&(t+=r,n+=+$t.test(r)),n&&(t="'"+t.replace(/'/g,"''")+"'"),t?t+"!":t}const Nt=(e,t,n)=>Math.min(Math.max(t,e),n),Et=(e,t)=>(t?"$":"")+vt(e),bt=(e,t)=>(t?"$":"")+String(e+1);function At(e){return"both"===e?".:.":"head"===e?".:":"tail"===e?":.":":"}function Ct(e,t){return e&&t?"both":e?"head":t?"tail":void 0}function kt(e){const t=/^(?=.)(\$(?=\D))?([A-Za-z]{0,3})?(\$)?([1-9][0-9]{0,6})?$/.exec(e);return t&&(t[2]||t[4])?[t[4]?(n=t[4],+n-1):null,t[2]?L(t[2]):null,!!t[3],!!t[1]]:null;var n}function Tt(e){let t=null,n=null,l=null,r=null,o=!1,s=!1,u=!1,i=!1;const[a,c,f,p,h]=e.split(/(\.?:\.?)/);if(p||h)return null;const g=Ct(!!c&&"."===c[0],!!c&&"."===c[c.length-1]),d=kt(a),m=f?kt(f):null;if(!d||f&&!m)return null;if(null!=d[0]&&null!=d[1]?[t,n,o,s]=d:null==d[0]&&null!=d[1]?[,n,,s]=d:null!=d[0]&&null==d[1]&&([t,,o]=d),f)null!=m[0]&&null!=m[1]?[l,r,u,i]=m:null==m[0]&&null!=m[1]?[,r,,i]=m:null!=m[0]&&null==m[1]&&([l,,u]=m);else{if(null==t||null==n)return null;l=t,r=n,u=o,i=s}null!=r&&(null==n||null!=n&&r<n)&&([n,r,s,i]=[r,n,i,s]),null!=l&&(null==t||null!=t&&l<t)&&([t,l,o,u]=[l,t,u,o]);const x={top:t,left:n,bottom:l,right:r,$top:o,$left:s,$bottom:u,$right:i};return g&&(x.trim=g),x}function Lt(e){let{allowNamed:t=!0,allowTernary:n=!1,xlsx:l=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=xt(e,{allowNamed:t,allowTernary:n,xlsx:l,r1c1:!1});if(r&&(r.r0||r.name)){let e=null;return r.r0&&(e=Tt(r.r1?r.r0+r.operator+r.r1:r.r0)),e?l?{workbookName:r.workbookName,sheetName:r.sheetName,range:e}:{context:r.context,range:e}:r.name?l?{workbookName:r.workbookName,sheetName:r.sheetName,name:r.name}:{context:r.context,name:r.name}:null}return null}function It(e){let{xlsx:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(t?Rt(e):wt(e))+(e.name?e.name:function(e){let{top:t,left:n,bottom:l,right:r,trim:o}=e;const{$left:s,$right:u,$top:i,$bottom:a}=e,c=null==n,f=null==r,p=null==t,h=null==l;t=Nt(0,0|t,T),n=Nt(0,0|n,k),!c&&!p&&f&&h?(l=t,r=n):(l=Nt(0,0|l,T),r=Nt(0,0|r,k));const g=At(o);return 0===t&&l>=T&&!c&&!f&&(!(s&&!c||u&&!f)||n===r)||p&&h?Et(n,s)+g+Et(r,u):0===n&&r>=k&&!p&&!h&&(!(i&&!p||a&&!h)||t===l)||c&&f?bt(t,i)+g+bt(l,a):c||p||f||!h?c||!p||f||h?c||p||!f||h?!c||p||f||h?r!==n||l!==t||u!==s||a!==i?Et(n,s)+bt(t,i)+g+Et(r,u)+bt(l,a):Et(n,s)+bt(t,i):Et(r,u)+bt(t,i)+g+bt(l,a):Et(n,s)+bt(t,i)+g+bt(l,a):Et(n,s)+bt(l,a)+g+Et(r,u):Et(n,s)+bt(t,i)+g+Et(r,u)}(e.range))}function Ot(e){return null==e.top&&(e.top=0,e.$top=!1),null==e.bottom&&(e.bottom=T,e.$bottom=!1),null==e.left&&(e.left=0,e.$left=!1),null==e.right&&(e.right=k,e.$right=!1),e}function Ut(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{xlsx:!1};const n=xt(e,t);if(n&&n.struct){const e=M(n.struct);if(e&&e.length===n.struct.length)return t.xlsx?{workbookName:n.workbookName,sheetName:n.sheetName,table:n.name,columns:e.columns,sections:e.sections}:{context:n.context,table:n.name,columns:e.columns,sections:e.sections}}return null}function Ft(e,t){return null==e&&null==t||e===t}function _t(e,t){if(Array.isArray(e)!==Array.isArray(t)||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(!Ft(e[n],t[n]))return!1;return!0}function St(e,t){return!e&&!t||String(e).toLowerCase()===String(t).toLowerCase()}const Mt=(e,t,n)=>Math.min(Math.max(t,e),n);function Dt(e,t){return t?String(e+1):e?"["+e+"]":""}function zt(e){let t=null,n=null,l=null,r=null;const o=/^R(?:\[([+-]?\d+)\]|(\d+))?/.exec(e);o&&(o[1]?(t=parseInt(o[1],10),l=!1):o[2]?(t=parseInt(o[2],10)-1,l=!0):(t=0,l=!1),e=e.slice(o[0].length));const s=/^C(?:\[([+-]?\d+)\]|(\d+))?/.exec(e);return s&&(s[1]?(n=parseInt(s[1],10),r=!1):s[2]?(n=parseInt(s[2],10)-1,r=!0):(n=0,r=!1),e=e.slice(s[0].length)),!o&&!s||e.length?null:[t,n,l,r]}function jt(e){let t=null;const[n,l,r,o]=e.split(/(\.?:\.?)/);if(o)return null;const s=zt(n),u=Ct(!!l&&"."===l[0],!!l&&"."===l[l.length-1]);if(s){const[e,n,l,o]=s;if(r){const s=zt(r);if(!s)return null;{t={};const[r,u,i,a]=s;null!=e&&null!=r?(t.r0=l===i?Math.min(e,r):e,t.$r0=l,t.r1=l===i?Math.max(e,r):r,t.$r1=i):null!=e&&null==r?(t.r0=e,t.$r0=l,t.r1=null,t.$r1=l):null==e&&null!=r?(t.r0=r,t.$r0=i,t.r1=null,t.$r1=i):null==e&&null==r&&(t.r0=null,t.$r0=!1,t.r1=null,t.$r1=!1),null!=n&&null!=u?(t.c0=o===a?Math.min(n,u):n,t.$c0=o,t.c1=o===a?Math.max(n,u):u,t.$c1=a):null!=n&&null==u?(t.c0=n,t.$c0=o,t.c1=null,t.$c1=o):null==n&&null!=u?(t.c0=u,t.$c0=a,t.c1=null,t.$c1=a):null==n&&null==u&&(t.c0=null,t.$c0=!1,t.c1=null,t.$c1=!1)}}else t=null!=e&&null==n?{r0:e,c0:null,r1:e,c1:null,$r0:l,$c0:!1,$r1:l,$c1:!1}:null==e&&null!=n?{r0:null,c0:n,r1:null,c1:n,$r0:!1,$c0:o,$r1:!1,$c1:o}:{r0:e||0,c0:n||0,r1:e||0,c1:n||0,$r0:l||!1,$c0:o||!1,$r1:l||!1,$c1:o||!1}}return t&&u&&(t.trim=u),t}function Bt(e){let{allowNamed:t=!0,allowTernary:n=!1,xlsx:l=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=xt(e,{allowNamed:t,allowTernary:n,xlsx:l,r1c1:!0});if(r&&(r.r0||r.name)){const e=r.r1?jt(r.r0+r.operator+r.r1):jt(r.r0);return e?l?{workbookName:r.workbookName,sheetName:r.sheetName,range:e}:{context:r.context,range:e}:r.name?l?{workbookName:r.workbookName,sheetName:r.sheetName,name:r.name}:{context:r.context,name:r.name}:null}return null}function Zt(e){let{xlsx:t=!1}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return(t?Rt(e):wt(e))+(e.name?e.name:function(e){let{r0:t,c0:n,r1:l,c1:r}=e;const{$c0:o,$c1:s,$r0:u,$r1:i}=e,a=null==t,c=null==n;let f=null==l,p=null==r;const h=At(e.trim),g=!!e.trim;if(t=Mt(u?0:-1048575,0|t,T),n=Mt(o?0:-16383,0|n,k),!a&&f&&!c&&p?(l=t,f=!1,r=n,p=!1):(l=Mt(i?0:-1048575,0|l,T),r=Mt(s?0:-16383,0|r,k)),0===t&&l>=T&&!c&&!p||a&&f){const e=Dt(n,o),t=Dt(r,s);return"C"+(e!==t||g?e+h+"C"+t:e)}if(0===n&&r>=k&&!a&&!f||c&&p){const e=Dt(t,u),n=Dt(l,i);return"R"+(e!==n||g?e+h+"R"+n:e)}const d=Dt(t,u),m=Dt(l,i),x=Dt(n,o),y=Dt(r,s);return a||f||c||p?(a?"":"R"+d)+(c?"":"C"+x)+h+(f?"":"R"+m)+(p?"":"C"+y):d!==m||x!==y?"R"+d+"C"+x+h+"R"+m+"C"+y:"R"+d+"C"+x}(e.range))}const Xt=(e,t,n)=>null==t?null:e?t:t-n,Pt={withLocation:!1,mergeRefs:!1,allowTernary:!0,r1c1:!1};function Wt(e,t,n,l){let r=!(arguments.length>4&&void 0!==arguments[4])||arguments[4],o=e;if(null!=o&&!t){if(o=n+e,o<0){if(!r)return NaN;o=l+o+1}if(o>l){if(!r)return NaN;o-=l+1}}return o}const Gt={wrapEdges:!0,mergeRefs:!0,allowTernary:!0,xlsx:!1};function Yt(e){return e.replace(/([[\]#'@])/g,"'$1")}function Ht(e){return e[0].toUpperCase()+e.slice(1).toLowerCase()}function Kt(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const{xlsx:n,thisRow:l}=t;let r=n?Rt(e):wt(e);e.table&&(r+=e.table);const o=e.columns?.length??0,s=e.sections?.length??0;if(1!==s||o)if(s||1!==o){r+="[";const t=!l&&1===s&&"this row"===e.sections[0].toLowerCase();t?r+="@":s&&(r+=e.sections.map((e=>`[#${Ht(e)}]`)).join(","),o&&(r+=",")),t&&1===e.columns.length&&(u=e.columns[0],/^[a-zA-Z0-9\u00a1-\uffff]+$/.test(u))?r+=Yt(e.columns[0]):o&&(r+=e.columns.slice(0,2).map((e=>`[${Yt(e)}]`)).join(":")),r+="]"}else r+=`[${Yt(e.columns[0])}]`;else r+=`[#${Ht(e.sections[0])}]`;var u;return r}const qt=Object.freeze({OPERATOR:e,BOOLEAN:n,ERROR:l,NUMBER:r,FUNCTION:o,NEWLINE:s,WHITESPACE:u,STRING:i,CONTEXT:c,CONTEXT_QUOTE:a,REF_RANGE:f,REF_BEAM:p,REF_TERNARY:h,REF_NAMED:g,REF_STRUCT:d,FX_PREFIX:m,UNKNOWN:x}),Vt=Object.freeze({UNARY:y,BINARY:v,REFERENCE:$,LITERAL:w,ERROR:R,CALL:N,ARRAY:A,IDENTIFIER:C});exports.MAX_COLS=k,exports.MAX_ROWS=T,exports.addA1RangeBounds=Ot,exports.addTokenMeta=function(e){let{sheetName:t="",workbookName:n=""}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const l=[];let r=null;const o=function(){let e=1;return()=>"fxg"+e++}(),s=[],u=()=>l.length+(r?1:0);return e.forEach(((e,i)=>{if(e.index=i,e.depth=u(),"("===e.value)l.push(e),e.depth=u();else if(")"===e.value){const t=l.pop();if(t){const n=o();e.groupId=n,e.depth=t.depth,t.groupId=n}else e.error=!0}else if("{"===e.value)r?e.error=!0:(r=e,e.depth=u());else if("}"===e.value){if(r){const t=o();e.groupId=t,e.depth=r.depth,r.groupId=t}else e.error=!0;r=null}else if(e.type===f||e.type===p||e.type===h||e.type===d){const l=e.type===d?Ut(e.value,{xlsx:!0}):Lt(e.value,{allowTernary:!0,xlsx:!0});if(l&&(l.range||l.columns)){l.source=e.value,function(e,t,n){e.sheetName||(e.sheetName=t),e.workbookName||(e.workbookName=n)}(l,t,n);const r=s.find((e=>function(e,t){if((e.name||t.name)&&e.name!==t.name)return!1;if(e.columns||t.columns){if(e.table!==t.table)return!1;if(!_t(e.columns,t.columns))return!1;if(!_t(e.sections,t.sections))return!1}return!!(!e.range&&!t.range||Ft(e.range.top,t.range.top)&&Ft(e.range.bottom,t.range.bottom)&&Ft(e.range.left,t.range.left)&&Ft(e.range.right,t.range.right))&&!(!St(e.workbookName,t.workbookName)||!St(e.sheetName,t.sheetName))}(e,l)));r?e.groupId=r.groupId:(l.groupId=o(),e.groupId=l.groupId,s.push(l))}}else e.type===x&&(e.error=!0)})),e},exports.fixRanges=function e(t){let n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{addBounds:!1};if("string"==typeof t)return e(Re(t,n),n).map((e=>e.value)).join("");if(!Array.isArray(t))throw new Error("fixRanges expects an array of tokens");const{addBounds:l,r1c1:r,xlsx:o,thisRow:s}=n;if(r)throw new Error("fixRanges does not have an R1C1 mode");let u=0;return t.map((e=>{const t={...e};e.loc&&(t.loc=[...e.loc]);let n=0;if(t.type===d){const e=Kt(Ut(t.value,{xlsx:o}),{xlsx:o,thisRow:s});n=e.length-t.value.length,t.value=e}else if(Ne(t)){const e=Lt(t.value,{xlsx:o,allowTernary:!0}),r=e.range;l&&Ot(r);const s=It(e,{xlsx:o});n=s.length-t.value.length,t.value=s}return u||n?(t.loc&&(t.loc[0]+=u),u+=n,t.loc&&(t.loc[1]+=u)):u+=n,t}))},exports.fromCol=L,exports.isError=Ae,exports.isFunction=ke,exports.isFxPrefix=Te,exports.isLiteral=be,exports.isOperator=Le,exports.isRange=Ne,exports.isReference=Ee,exports.isWhitespace=Ce,exports.mergeRefTokens=me,exports.nodeTypes=Vt,exports.parse=function(e,t){if("string"==typeof e)ze=Re(e,{withLocation:!1,...t,mergeRefs:!0});else{if(!Array.isArray(e))throw new Error("Parse requires a string or array of tokens.");ze=e}for(Be=t?.permitArrayRanges,Ze=t?.permitArrayCalls,je=0;Ce(ze[je])||Te(ze[je]);)je++;We(),et(!0);const n=Ge(0);return We(Ie),n},exports.parseA1Ref=Lt,exports.parseR1C1Ref=Bt,exports.parseStructRef=Ut,exports.stringifyA1Ref=It,exports.stringifyR1C1Ref=Zt,exports.stringifyStructRef=Kt,exports.toCol=vt,exports.tokenTypes=qt,exports.tokenize=Re,exports.translateToA1=function(e,t){let n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:Gt;const r=Tt(t),o="string"==typeof e,s={...Gt,...n},u=o?Re(e,{withLocation:!1,mergeRefs:s.mergeRefs,xlsx:s.xlsx,allowTernary:s.allowTernary,r1c1:!0}):e;let i=0;const a={xlsx:s.xlsx,allowTernary:s.allowTernary};return u.forEach((e=>{if(Ne(e)){const t=e.value,n=Bt(t,a),o=n.range,u={},c=Wt(o.r0,o.$r0,r.top,T,s.wrapEdges),f=Wt(o.r1,o.$r1,r.top,T,s.wrapEdges);c>f?(u.top=f,u.$top=o.$r1,u.bottom=c,u.$bottom=o.$r0):(u.top=c,u.$top=o.$r0,u.bottom=f,u.$bottom=o.$r1);const p=Wt(o.c0,o.$c0,r.left,k,s.wrapEdges),h=Wt(o.c1,o.$c1,r.left,k,s.wrapEdges);p>h?(u.left=h,u.$left=o.$c1,u.right=p,u.$right=o.$c0):(u.left=p,u.$left=o.$c0,u.right=h,u.$right=o.$c1),o.trim&&(u.trim=o.trim),isNaN(c)||isNaN(f)||isNaN(p)||isNaN(h)?(e.type=l,e.value="#REF!",delete e.groupId):(n.range=u,e.value=It(n,a)),e.loc&&(e.loc[0]+=i,i+=e.value.length-t.length,e.loc[1]+=i)}else i&&e.loc&&(e.loc[0]+=i,e.loc[1]+=i)})),o?u.map((e=>e.value)).join(""):u},exports.translateToR1C1=function(e,t){let{xlsx:n=!1,allowTernary:l=!0}=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};const{top:r,left:o}=Tt(t),s="string"==typeof e,u=s?Re(e,{...Pt,xlsx:n,allowTernary:l}):e;let i=0;const a={xlsx:n,allowTernary:l};return u.forEach((e=>{if(Ne(e)){const t=e.value,n=Lt(t,a),l=n.range,s={};s.r0=Xt(l.$top,l.top,r),s.r1=Xt(l.$bottom,l.bottom,r),s.c0=Xt(l.$left,l.left,o),s.c1=Xt(l.$right,l.right,o),s.$r0=l.$top,s.$r1=l.$bottom,s.$c0=l.$left,s.$c1=l.$right,l.trim&&(s.trim=l.trim),n.range=s,e.value=Zt(n,a),e.loc&&(e.loc[0]+=i,i+=e.value.length-t.length,e.loc[1]+=i)}else i&&e.loc&&(e.loc[0]+=i,e.loc[1]+=i)})),s?u.map((e=>e.value)).join(""):u};
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnguanMiLCJzb3VyY2VzIjpbIi4uL2xpYi9jb25zdGFudHMuanMiLCIuLi9saWIvZnJvbUNvbC5qcyIsIi4uL2xpYi9wYXJzZVNSYW5nZS5qcyIsIi4uL2xpYi9sZXhlclBhcnRzLmpzIiwiLi4vbGliL21lcmdlUmVmVG9rZW5zLmpzIiwiLi4vbGliL2xleGVyLmpzIiwiLi4vbGliL2lzVHlwZS5qcyIsIi4uL2xpYi9wYXJzZXIuanMiLCIuLi9saWIvcGFyc2VSZWYuanMiLCIuLi9saWIvdG9Db2wuanMiLCIuLi9saWIvc3RyaW5naWZ5UHJlZml4LmpzIiwiLi4vbGliL2ExLmpzIiwiLi4vbGliL3BhcnNlU3RydWN0UmVmLmpzIiwiLi4vbGliL2FkZFRva2VuTWV0YS5qcyIsIi4uL2xpYi9yYy5qcyIsIi4uL2xpYi90cmFuc2xhdGUuanMiLCIuLi9saWIvc3RyaW5naWZ5U3RydWN0UmVmLmpzIiwiLi4vbGliL2luZGV4LmpzIiwiLi4vbGliL2ZpeFJhbmdlcy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgT1BFUkFUT1IgPSAnb3BlcmF0b3InO1xuZXhwb3J0IGNvbnN0IE9QRVJBVE9SX1RSSU0gPSAnb3BlcmF0b3ItdHJpbSc7XG5leHBvcnQgY29uc3QgQk9PTEVBTiA9ICdib29sJztcbmV4cG9ydCBjb25zdCBFUlJPUiA9ICdlcnJvcic7XG5leHBvcnQgY29uc3QgTlVNQkVSID0gJ251bWJlcic7XG5leHBvcnQgY29uc3QgRlVOQ1RJT04gPSAnZnVuYyc7XG5leHBvcnQgY29uc3QgTkVXTElORSA9ICduZXdsaW5lJztcbmV4cG9ydCBjb25zdCBXSElURVNQQUNFID0gJ3doaXRlc3BhY2UnO1xuZXhwb3J0IGNvbnN0IFNUUklORyA9ICdzdHJpbmcnO1xuZXhwb3J0IGNvbnN0IENPTlRFWFRfUVVPVEUgPSAnY29udGV4dF9xdW90ZSc7XG5leHBvcnQgY29uc3QgQ09OVEVYVCA9ICdjb250ZXh0JztcbmV4cG9ydCBjb25zdCBSRUZfUkFOR0UgPSAncmFuZ2UnO1xuZXhwb3J0IGNvbnN0IFJFRl9CRUFNID0gJ3JhbmdlX2JlYW0nO1xuZXhwb3J0IGNvbnN0IFJFRl9URVJOQVJZID0gJ3JhbmdlX3Rlcm5hcnknO1xuZXhwb3J0IGNvbnN0IFJFRl9OQU1FRCA9ICdyYW5nZV9uYW1lZCc7XG5leHBvcnQgY29uc3QgUkVGX1NUUlVDVCA9ICdzdHJ1Y3R1cmVkJztcbmV4cG9ydCBjb25zdCBGWF9QUkVGSVggPSAnZnhfcHJlZml4JztcbmV4cG9ydCBjb25zdCBVTktOT1dOID0gJ3Vua25vd24nO1xuXG5leHBvcnQgY29uc3QgVU5BUlkgPSAnVW5hcnlFeHByZXNzaW9uJztcbmV4cG9ydCBjb25zdCBCSU5BUlkgPSAnQmluYXJ5RXhwcmVzc2lvbic7XG5leHBvcnQgY29uc3QgUkVGRVJFTkNFID0gJ1JlZmVyZW5jZUlkZW50aWZpZXInO1xuZXhwb3J0IGNvbnN0IExJVEVSQUwgPSAnTGl0ZXJhbCc7XG5leHBvcnQgY29uc3QgRVJST1JfTElURVJBTCA9ICdFcnJvckxpdGVyYWwnO1xuZXhwb3J0IGNvbnN0IENBTEwgPSAnQ2FsbEV4cHJlc3Npb24nO1xuZXhwb3J0IGNvbnN0IExBTUJEQSA9ICdMYW1iZGFFeHByZXNzaW9uJztcbmV4cG9ydCBjb25zdCBMRVQgPSAnTGV0RXhwcmVzc2lvbic7XG5leHBvcnQgY29uc3QgQVJSQVkgPSAnQXJyYXlFeHByZXNzaW9uJztcbmV4cG9ydCBjb25zdCBJREVOVElGSUVSID0gJ0lkZW50aWZpZXInO1xuZXhwb3J0IGNvbnN0IExFVF9ERUNMID0gJ0xldERlY2xhcmF0b3InO1xuXG5leHBvcnQgY29uc3QgTUFYX0NPTFMgPSAoMiAqKiAxNCkgLSAxOyAvLyAxNjM4M1xuZXhwb3J0IGNvbnN0IE1BWF9ST1dTID0gKDIgKiogMjApIC0gMTsgLy8gMTA0ODU3NVxuIiwiLyoqXG4gKiBDb252ZXJ0IGEgY29sdW1uIHN0cmluZyByZXByZXNlbnRhdGlvbiB0byBhIDAgYmFzZWRcbiAqIG9mZnNldCBudW1iZXIgKGBcIkNcImAgPSBgMmApLlxuICpcbiAqIFRoZSBtZXRob2QgZXhwZWN0cyBhIHZhbGlkIGNvbHVtbiBpZGVudGlmaWVyIG1hZGUgdXAgb2YgX29ubHlfXG4gKiBBLVogbGV0dGVycywgd2hpY2ggbWF5IGJlIGVpdGhlciB1cHBlciBvciBsb3dlciBjYXNlLiBPdGhlciBpbnB1dCB3aWxsXG4gKiByZXR1cm4gZ2FyYmFnZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sdW1uU3RyaW5nICBUaGUgY29sdW1uIHN0cmluZyBpZGVudGlmaWVyXG4gKiBAcmV0dXJucyB7bnVtYmVyfSAgWmVybyBiYXNlZCBjb2x1bW4gaW5kZXggbnVtYmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmcm9tQ29sIChjb2x1bW5TdHJpbmcpIHtcbiAgY29uc3QgeCA9IChjb2x1bW5TdHJpbmcgfHwgJycpO1xuICBjb25zdCBsID0geC5sZW5ndGg7XG4gIGxldCBuID0gMDtcbiAgaWYgKGwgPiAyKSB7XG4gICAgY29uc3QgYyA9IHguY2hhckNvZGVBdChsIC0gMyk7XG4gICAgY29uc3QgYSA9IGMgPiA5NSA/IDMyIDogMDtcbiAgICBuICs9ICgxICsgYyAtIGEgLSA2NSkgKiA2NzY7XG4gIH1cbiAgaWYgKGwgPiAxKSB7XG4gICAgY29uc3QgYyA9IHguY2hhckNvZGVBdChsIC0gMik7XG4gICAgY29uc3QgYSA9IGMgPiA5NSA/IDMyIDogMDtcbiAgICBuICs9ICgxICsgYyAtIGEgLSA2NSkgKiAyNjtcbiAgfVxuICBpZiAobCkge1xuICAgIGNvbnN0IGMgPSB4LmNoYXJDb2RlQXQobCAtIDEpO1xuICAgIGNvbnN0IGEgPSBjID4gOTUgPyAzMiA6IDA7XG4gICAgbiArPSAoYyAtIGEpIC0gNjU7XG4gIH1cbiAgcmV0dXJuIG47XG59XG4iLCJjb25zdCByZV9TUmNvbHVtbkIgPSAvXlxcWygnWycjQFtcXF1dfFteJyNAW1xcXV0pK1xcXS9pO1xuY29uc3QgcmVfU1Jjb2x1bW5OID0gL14oW14jQFtcXF06XSspL2k7XG5cbmNvbnN0IGtleVRlcm1zID0ge1xuICAnaGVhZGVycyc6IDEsXG4gICdkYXRhJzogMixcbiAgJ3RvdGFscyc6IDQsXG4gICdhbGwnOiA4LFxuICAndGhpcyByb3cnOiAxNixcbiAgJ0AnOiAxNlxufTtcblxuY29uc3QgZnogPSAoLi4uYSkgPT4gT2JqZWN0LmZyZWV6ZShhKTtcblxuLy8gb25seSBjb21iaW5hdGlvbnMgYWxsb3dlZCBhcmU6ICNkYXRhICsgKCNoZWFkZXJzIHwgI3RvdGFscyB8ICNkYXRhKVxuY29uc3Qgc2VjdGlvbk1hcCA9IHtcbiAgLy8gbm8gdGVybXNcbiAgMDogZnooKSxcbiAgLy8gc2luZ2xlIHRlcm1cbiAgMTogZnooJ2hlYWRlcnMnKSxcbiAgMjogZnooJ2RhdGEnKSxcbiAgNDogZnooJ3RvdGFscycpLFxuICA4OiBmeignYWxsJyksXG4gIDE2OiBmeigndGhpcyByb3cnKSxcbiAgLy8gaGVhZGVycytkYXRhXG4gIDM6IGZ6KCdoZWFkZXJzJywgJ2RhdGEnKSxcbiAgLy8gdG90YWxzK2RhdGFcbiAgNjogZnooJ2RhdGEnLCAndG90YWxzJylcbn07XG5cbmNvbnN0IG1hdGNoQ29sdW1uID0gKHMsIGFsbG93VW5icmFjZWQgPSB0cnVlKSA9PiB7XG4gIGxldCBtID0gcmVfU1Jjb2x1bW5CLmV4ZWMocyk7XG4gIGlmIChtKSB7XG4gICAgY29uc3QgdmFsdWUgPSBtWzBdLnNsaWNlKDEsIC0xKS5yZXBsYWNlKC8nKFsnI0BbXFxdXSkvZywgJyQxJyk7XG4gICAgcmV0dXJuIFsgbVswXSwgdmFsdWUgXTtcbiAgfVxuICBpZiAoYWxsb3dVbmJyYWNlZCkge1xuICAgIG0gPSByZV9TUmNvbHVtbk4uZXhlYyhzKTtcbiAgICBpZiAobSkge1xuICAgICAgcmV0dXJuIFsgbVswXSwgbVswXSBdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNSYW5nZSAocmF3KSB7XG4gIGNvbnN0IGNvbHVtbnMgPSBbXTtcbiAgbGV0IHBvcyA9IDA7XG4gIGxldCBzID0gcmF3O1xuICBsZXQgbTtcbiAgbGV0IG0xO1xuICBsZXQgdGVybXMgPSAwO1xuXG4gIC8vIHN0YXJ0IG9mIHN0cnVjdHVyZWQgcmVmP1xuICBpZiAoKG0gPSAvXihcXFtcXHMqKS8uZXhlYyhzKSkpIHtcbiAgICAvLyBxdWlja2x5IGRldGVybWluZSBpZiB0aGlzIGlzIGEgc2ltcGxlIGtleXdvcmQgb3IgY29sdW1uXG4gICAgLy8gWyNrZXl3b3JkXVxuICAgIGlmICgobTEgPSAvXlxcWyMoW2EteiBdKylcXF0vaS5leGVjKHMpKSkge1xuICAgICAgY29uc3QgayA9IG0xWzFdLnRvTG93ZXJDYXNlKCk7XG4gICAgICBwb3MgKz0gbTFbMF0ubGVuZ3RoO1xuICAgICAgaWYgKGtleVRlcm1zW2tdKSB7XG4gICAgICAgIHRlcm1zIHw9IGtleVRlcm1zW2tdO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBbY29sdW1uXVxuICAgIGVsc2UgaWYgKChtMSA9IG1hdGNoQ29sdW1uKHMsIGZhbHNlKSkpIHtcbiAgICAgIHBvcyArPSBtMVswXS5sZW5ndGg7XG4gICAgICBjb2x1bW5zLnB1c2gobTFbMV0pO1xuICAgIH1cbiAgICAvLyB1c2UgdGhlIFwibm9ybWFsXCIgbWV0aG9kXG4gICAgLy8gW1sja2V5d29yZF1dXG4gICAgLy8gW1tjb2x1bW5dXVxuICAgIC8vIFtAXVxuICAgIC8vIFtAY29sdW1uXVxuICAgIC8vIFtAW2NvbHVtbl1dXG4gICAgLy8gW0Bjb2x1bW46Y29sdW1uXVxuICAgIC8vIFtAY29sdW1uOltjb2x1bW5dXVxuICAgIC8vIFtAW2NvbHVtbl06Y29sdW1uXVxuICAgIC8vIFtAW2NvbHVtbl06W2NvbHVtbl1dXG4gICAgLy8gW2NvbHVtbjpjb2x1bW5dXG4gICAgLy8gW2NvbHVtbjpbY29sdW1uXV1cbiAgICAvLyBbW2NvbHVtbl06Y29sdW1uXVxuICAgIC8vIFtbY29sdW1uXTpbY29sdW1uXV1cbiAgICAvLyBbWyNrZXl3b3JkXSxjb2x1bW5dXG4gICAgLy8gW1sja2V5d29yZF0sY29sdW1uOmNvbHVtbl1cbiAgICAvLyBbWyNrZXl3b3JkXSxbI2tleXdvcmRdLGNvbHVtbjpjb2x1bW5dXG4gICAgLy8gLi4uXG4gICAgZWxzZSB7XG4gICAgICBsZXQgZXhwZWN0X21vcmUgPSB0cnVlO1xuICAgICAgcyA9IHMuc2xpY2UobVsxXS5sZW5ndGgpO1xuICAgICAgcG9zICs9IG1bMV0ubGVuZ3RoO1xuICAgICAgLy8gbWF0Y2gga2V5d29yZHMgYXMgd2UgZmluZCB0aGVtXG4gICAgICB3aGlsZSAoXG4gICAgICAgIGV4cGVjdF9tb3JlICYmXG4gICAgICAgIChtID0gL15cXFsjKFthLXogXSspXFxdKFxccyosXFxzKik/L2kuZXhlYyhzKSlcbiAgICAgICkge1xuICAgICAgICBjb25zdCBrID0gbVsxXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICBpZiAoa2V5VGVybXNba10pIHtcbiAgICAgICAgICB0ZXJtcyB8PSBrZXlUZXJtc1trXTtcbiAgICAgICAgICBzID0gcy5zbGljZShtWzBdLmxlbmd0aCk7XG4gICAgICAgICAgcG9zICs9IG1bMF0ubGVuZ3RoO1xuICAgICAgICAgIGV4cGVjdF9tb3JlID0gISFtWzJdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBpcyB0aGVyZSBhbiBAIHNwZWNpZmllcj9cbiAgICAgIGlmIChleHBlY3RfbW9yZSAmJiAobSA9IC9eQC8uZXhlYyhzKSkpIHtcbiAgICAgICAgdGVybXMgfD0ga2V5VGVybXNbJ0AnXTtcbiAgICAgICAgcyA9IHMuc2xpY2UoMSk7XG4gICAgICAgIHBvcyArPSAxO1xuICAgICAgICBleHBlY3RfbW9yZSA9IHNbMF0gIT09ICddJztcbiAgICAgIH1cbiAgICAgIC8vIG5vdCBhbGwga2V5d29yZCB0ZXJtcyBtYXkgYmUgY29tYmluZWRcbiAgICAgIGlmICghKHRlcm1zIGluIHNlY3Rpb25NYXApKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgLy8gY29sdW1uIGRlZmluaXRpb25zXG4gICAgICBjb25zdCBsZWZ0Q29sID0gZXhwZWN0X21vcmUgPyBtYXRjaENvbHVtbihyYXcuc2xpY2UocG9zKSkgOiBudWxsO1xuICAgICAgaWYgKGxlZnRDb2wpIHtcbiAgICAgICAgcG9zICs9IGxlZnRDb2xbMF0ubGVuZ3RoO1xuICAgICAgICBjb2x1bW5zLnB1c2gobGVmdENvbFsxXSk7XG4gICAgICAgIHMgPSByYXcuc2xpY2UocG9zKTtcbiAgICAgICAgaWYgKHNbMF0gPT09ICc6Jykge1xuICAgICAgICAgIHMgPSBzLnNsaWNlKDEpO1xuICAgICAgICAgIHBvcysrO1xuICAgICAgICAgIGNvbnN0IHJpZ2h0Q29sID0gbWF0Y2hDb2x1bW4ocyk7XG4gICAgICAgICAgaWYgKHJpZ2h0Q29sKSB7XG4gICAgICAgICAgICBwb3MgKz0gcmlnaHRDb2xbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgY29sdW1ucy5wdXNoKHJpZ2h0Q29sWzFdKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZXhwZWN0X21vcmUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIGFkdmFuY2Ugd3NcbiAgICAgIHdoaWxlIChyYXdbcG9zXSA9PT0gJyAnKSB7XG4gICAgICAgIHBvcysrO1xuICAgICAgfVxuICAgICAgLy8gY2xvc2UgdGhlIHJlZlxuICAgICAgaWYgKGV4cGVjdF9tb3JlIHx8IHJhd1twb3NdICE9PSAnXScpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICAvLyBzdGVwIG92ZXIgdGhlIGNsb3NpbmcgXVxuICAgICAgcG9zKys7XG4gICAgfVxuICB9XG4gIGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgc2VjdGlvbnMgPSBzZWN0aW9uTWFwW3Rlcm1zXTtcbiAgcmV0dXJuIHtcbiAgICBjb2x1bW5zLFxuICAgIHNlY3Rpb25zOiBzZWN0aW9ucyA/IHNlY3Rpb25zLmNvbmNhdCgpIDogc2VjdGlvbnMsXG4gICAgbGVuZ3RoOiBwb3MsXG4gICAgdG9rZW46IHJhdy5zbGljZSgwLCBwb3MpXG4gIH07XG59XG4iLCJpbXBvcnQge1xuICBPUEVSQVRPUixcbiAgQk9PTEVBTixcbiAgRVJST1IsXG4gIE5VTUJFUixcbiAgRlVOQ1RJT04sXG4gIE5FV0xJTkUsXG4gIFdISVRFU1BBQ0UsXG4gIFNUUklORyxcbiAgQ09OVEVYVCxcbiAgQ09OVEVYVF9RVU9URSxcbiAgUkVGX1JBTkdFLFxuICBSRUZfQkVBTSxcbiAgUkVGX05BTUVELFxuICBSRUZfVEVSTkFSWSxcbiAgUkVGX1NUUlVDVCxcbiAgTUFYX0NPTFMsXG4gIE1BWF9ST1dTLFxuICBPUEVSQVRPUl9UUklNXG59IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IGZyb21Db2wgfSBmcm9tICcuL2Zyb21Db2wuanMnO1xuaW1wb3J0IHsgcGFyc2VTUmFuZ2UgfSBmcm9tICcuL3BhcnNlU1JhbmdlLmpzJztcblxuY29uc3QgcmVfRVJST1IgPSAvXiMoTkFNRVxcP3xGSUVMRCF8Q0FMQyF8VkFMVUUhfFJFRiF8RElWXFwvMCF8TlVMTCF8TlVNIXxOXFwvQXxHRVRUSU5HX0RBVEFcXGJ8U1BJTEwhfFVOS05PV04hfEZJRUxEXFxifENBTENcXGJ8U1lOVEFYXFw/fEVSUk9SIXxDT05ORUNUIXxCTE9DS0VEIXxFWFRFUk5BTCEpL2k7XG5jb25zdCByZV9PUEVSQVRPUiA9IC9eKDw9fD49fDw+fFstKy8qXiUmPD49XXxbe30sO118WygpXXxAfDp8IXwjKS87XG5jb25zdCByZV9CT09MRUFOID0gL14oVFJVRXxGQUxTRSlcXGIvaTtcbmNvbnN0IHJlX0ZVTkNUSU9OID0gL15bQS1aX10rW0EtWlxcZF8uXSooPz1cXCgpL2k7XG5jb25zdCByZV9ORVdMSU5FID0gL15cXG4rLztcbmNvbnN0IHJlX1dISVRFU1BBQ0UgPSAvXlsgXFxmXFxyXFx0XFx2XFx1MDBhMFxcdTE2ODBcXHUyMDAwLVxcdTIwMGFcXHUyMDI4XFx1MjAyOVxcdTIwMmZcXHUyMDVmXFx1MzAwMFxcdWZlZmZdKy87XG5jb25zdCByZV9TVFJJTkcgPSAvXlwiKD86XCJcInxbXlwiXSkqKFwifCQpLztcbmNvbnN0IHJlX05VTUJFUiA9IC9eKD86XFxkKyhcXC5cXGQrKT8oPzpbZUVdWystXT9cXGQrKT98XFxkKykvO1xuY29uc3QgcmVfQ09OVEVYVCA9IC9eKD8hISkoXFxbKD86W15cXF1dKStcXF0pPyhbMC05QS1aYS16Ll/CocKkwqfCqMKqXFx1MDBhZMKvLVxcdWZmZmZdKyk/KD89ISkvO1xuY29uc3QgcmVfQ09OVEVYVF9RVU9URSA9IC9eJyg/OicnfFteJ10pKignfCQpKD89ISkvO1xuY29uc3QgcmVfUkFOR0VfVFJJTSA9IC9eKFxcLjpcXC58XFwuOnw6XFwuKS87XG5cbmNvbnN0IHJuZ1BhcnQgPSAnXFxcXCQ/W0EtWl17MSwzfVxcXFwkP1sxLTldWzAtOV17MCw2fSc7XG5jb25zdCBjb2xQYXJ0ID0gJ1xcXFwkP1tBLVpdezEsM30nO1xuY29uc3Qgcm93UGFydCA9ICdcXFxcJD9bMS05XVswLTldezAsNn0nO1xuY29uc3QgcmFuZ2VPcCA9ICdcXFxcLj86XFxcXC4/JztcbmNvbnN0IG5leHROb3RDaGFyID0gJyg/IVthLXowLTlfXFxcXHUwMGExLVxcXFx1ZmZmZl0pJztcbmNvbnN0IHJlX0ExQ09MID0gbmV3IFJlZ0V4cChgXiR7Y29sUGFydH0ke3JhbmdlT3B9JHtjb2xQYXJ0fSR7bmV4dE5vdENoYXJ9YCwgJ2knKTtcbmNvbnN0IHJlX0ExUk9XID0gbmV3IFJlZ0V4cChgXiR7cm93UGFydH0ke3JhbmdlT3B9JHtyb3dQYXJ0fSR7bmV4dE5vdENoYXJ9YCwgJ2knKTtcbmNvbnN0IHJlX0ExUkFOR0UgPSBuZXcgUmVnRXhwKGBeJHtybmdQYXJ0fSR7bmV4dE5vdENoYXJ9YCwgJ2knKTtcbmNvbnN0IHJlX0ExUEFSVElBTCA9IG5ldyBSZWdFeHAoYF4oKCR7Y29sUGFydH18JHtyb3dQYXJ0fSkke3JhbmdlT3B9JHtybmdQYXJ0fXwke3JuZ1BhcnR9JHtyYW5nZU9wfSgke2NvbFBhcnR9fCR7cm93UGFydH0pKSg/IVtcXFxcdygkLl0pYCwgJ2knKTtcbmNvbnN0IHJQYXJ0ID0gJyg/OlIoPzpcXFxcW1srLV0/XFxcXGQrXFxcXF18WzEtOV1bMC05XXswLDZ9KT8pJztcbmNvbnN0IGNQYXJ0ID0gJyg/OkMoPzpcXFxcW1srLV0/XFxcXGQrXFxcXF18WzEtOV1bMC05XXswLDR9KT8pJztcbmNvbnN0IHJlX1JDQ09MID0gbmV3IFJlZ0V4cChgXiR7Y1BhcnR9KCR7cmFuZ2VPcH0ke2NQYXJ0fSk/JHtuZXh0Tm90Q2hhcn1gLCAnaScpO1xuY29uc3QgcmVfUkNST1cgPSBuZXcgUmVnRXhwKGBeJHtyUGFydH0oJHtyYW5nZU9wfSR7clBhcnR9KT8ke25leHROb3RDaGFyfWAsICdpJyk7XG5jb25zdCByZV9SQ1JBTkdFID0gbmV3IFJlZ0V4cChgXig/Oig/PVtSQ10pJHtyUGFydH0ke2NQYXJ0fSkke25leHROb3RDaGFyfWAsICdpJyk7XG5jb25zdCByZV9SQ1BBUlRJQUwgPSBuZXcgUmVnRXhwKGBeKCR7clBhcnR9JHtjUGFydH0oJHtyYW5nZU9wfSR7Y1BhcnR9fCR7cmFuZ2VPcH0ke3JQYXJ0fSkoPyFbW1xcXFxkXSl8KCR7clBhcnR9fCR7Y1BhcnR9KSgke3JhbmdlT3B9JHtyUGFydH0ke2NQYXJ0fSkpJHtuZXh0Tm90Q2hhcn1gLCAnaScpO1xuXG4vLyBUaGUgYWR2ZXJ0aXplZCBuYW1lZCByYW5nZXMgcnVsZXMgYXJlIGEgYml0IG9mZiBmcm9tIHdoYXQgRXhjZWwgc2VlbXMgdG8gZG86XG4vLyBpbiB0aGUgXCJleHRlbmRlZCByYW5nZVwiIG9mIGNoYXJzLCBpdCBsb29rcyBsaWtlIGl0IGFsbG93cyBtb3N0IHRoaW5ncyBhYm92ZVxuLy8gVSswMEIwIHdpdGggdGhlIHJhbmdlIGJldHdlZW4gVSswMEEwLVUrMDBBRiByYXRoZXIgcmFuZG9tLlxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4vLyBjb25zdCByZV9OQU1FRCA9IC9eW2EtekEtWlxcXFxfwqHCpMKnwqjCqlxcdTAwYWTCr1xcdTAwYjAtXFx1ZmZmZl1bYS16QS1aMC05XFxcXF8uP8KhwqTCp8KowqpcXHUwMGFkwq9cXHUwMGIwLVxcdWZmZmZdezAsMjU0fS9pO1xuLy8gSSd2ZSBzaW1wbGlmaWVkIHRvIGFsbG93aW5nIGV2ZXJ5dGhpbmcgYWJvdmUgVSswMEExOlxuY29uc3QgcmVfTkFNRUQgPSAvXlthLXpBLVpcXFxcX1xcdTAwYTEtXFx1ZmZmZl1bYS16QS1aMC05XFxcXF8uP1xcdTAwYTEtXFx1ZmZmZl17MCwyNTR9L2k7XG5cbmZ1bmN0aW9uIG1ha2VIYW5kbGVyICh0eXBlLCByZSkge1xuICByZXR1cm4gc3RyID0+IHtcbiAgICBjb25zdCBtID0gcmUuZXhlYyhzdHIpO1xuICAgIGlmIChtKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiB0eXBlLCB2YWx1ZTogbVswXSB9O1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gbGV4TmFtZWQgKHN0cikge1xuICBjb25zdCBtID0gcmVfTkFNRUQuZXhlYyhzdHIpO1xuICBpZiAobSkge1xuICAgIGNvbnN0IGxjID0gbVswXS50b0xvd2VyQ2FzZSgpO1xuICAgIC8vIG5hbWVzIHN0YXJ0aW5nIHdpdGggXFwgbXVzdCBiZSBhdCBsZWFzdCAzIGNoYXIgbG9uZ1xuICAgIGlmIChsY1swXSA9PT0gJ1xcXFwnICYmIG1bMF0ubGVuZ3RoIDwgMykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIC8vIHNpbmdsZSBjaGFyYWN0ZXJzIFIgYW5kIEMgYXJlIGZvcmJpZGRlbiBhcyBuYW1lc1xuICAgIGlmIChsYyA9PT0gJ3InIHx8IGxjID09PSAnYycpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4geyB0eXBlOiBSRUZfTkFNRUQsIHZhbHVlOiBtWzBdIH07XG4gIH1cbn1cblxuY29uc3QgcmVfUVVPVEVEX1ZBTFVFID0gL14nKD86W15bXFxdXSs/KT8oPzpcXFsoLis/KVxcXSk/KD86W15bXFxdXSs/KSckLztcbmNvbnN0IHJlX1FVT1RFRF9WQUxVRV9YTFNYID0gL14nXFxbKC4rPylcXF0nJC87XG5mdW5jdGlvbiBsZXhDb250ZXh0IChzdHIsIG9wdGlvbnMpIHtcbiAgY29uc3QgbXEgPSByZV9DT05URVhUX1FVT1RFLmV4ZWMoc3RyKTtcbiAgaWYgKG1xKSB7XG4gICAgY29uc3QgdmFsdWUgPSBtcVswXTtcbiAgICBjb25zdCBpc1ZhbGlkID0gb3B0aW9ucy54bHN4XG4gICAgICA/IHJlX1FVT1RFRF9WQUxVRV9YTFNYLnRlc3QodmFsdWUpIHx8IHJlX1FVT1RFRF9WQUxVRS50ZXN0KHZhbHVlKVxuICAgICAgOiByZV9RVU9URURfVkFMVUUudGVzdCh2YWx1ZSk7XG4gICAgaWYgKGlzVmFsaWQpIHtcbiAgICAgIHJldHVybiB7IHR5cGU6IENPTlRFWFRfUVVPVEUsIHZhbHVlOiB2YWx1ZSB9O1xuICAgIH1cbiAgfVxuICAvLyB4bHN4IHhtbCB1c2VzIGEgdmFyaWFudCBvZiB0aGUgc3ludGF4IHRoYXQgaGFzIGV4dGVybmFsIHJlZmVyZW5jZXMgaW5cbiAgLy8gYnJhY2V0cy4gQW55IG9mOiBbMV1TaGVldDEhQTEsICdbMV1TaGVldCBvbmUnIUExLCBbMV0hbmFtZWRcbiAgLy8gV2UncmUgb25seSBjb25jZXJuZWQgd2l0aCB0aGUgbm9uIHF1b3RlZCB2ZXJzaW9uIGhlcmUgYXMgdGhlIHF1b3RlZCB2ZXJzaW9uXG4gIC8vIGRvZXNuJ3QgY3VycmVudGx5IGV4YW1pbmUgd2hhdCBpcyBpbiB0aGUgcXVvdGVzLlxuICBjb25zdCBtID0gcmVfQ09OVEVYVC5leGVjKHN0cik7XG4gIGlmIChtKSB7XG4gICAgY29uc3QgWyAsIGEsIGIgXSA9IG07XG4gICAgY29uc3QgdmFsaWQgPSAoXG4gICAgICAoKGEgJiYgYikgfHwgYikgfHwgLy8gXCJbYV1iIVwiIG9yIFwiYiFcIiBmb3Jtc1xuICAgICAgKGEgJiYgIWIgJiYgb3B0aW9ucy54bHN4KSAvLyBcIlthXVwiIGZvcm0gKGFsbG93ZWQgaW4geGxzeCBtb2RlKVxuICAgICk7XG4gICAgaWYgKHZhbGlkKSB7XG4gICAgICByZXR1cm4geyB0eXBlOiBDT05URVhULCB2YWx1ZTogbVswXSB9O1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBsZXhTdHJ1Y3R1cmVkIChzdHIpIHtcbiAgY29uc3Qgc3RydWN0RGF0YSA9IHBhcnNlU1JhbmdlKHN0cik7XG4gIGlmIChzdHJ1Y3REYXRhKSB7XG4gICAgLy8gd2UgaGF2ZSBhIG1hdGNoIGZvciBhIHZhbGlkIFNSXG4gICAgbGV0IGkgPSBzdHJ1Y3REYXRhLmxlbmd0aDtcbiAgICAvLyBza2lwIHRhaWxpbmcgd2hpdGVzcGFjZVxuICAgIHdoaWxlIChzdHJbaV0gPT09ICcgJykge1xuICAgICAgaSsrO1xuICAgIH1cbiAgICAvLyBhbmQgZW5zdXJlIHRoYXQgaXQgaXNuJ3QgZm9sbG93ZWQgYnkgYSAhXG4gICAgaWYgKHN0cltpXSAhPT0gJyEnKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBSRUZfU1RSVUNULFxuICAgICAgICB2YWx1ZTogc3RydWN0RGF0YS50b2tlblxuICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IHJlUkNOdW1zID0gLyhbUkNdKShcXFs/KSgtP1xcZCspL2dpO1xuY29uc3QgcmVBMU51bXMgPSAvKFxcZCt8W2EtekEtWl0rKS9naTtcbmZ1bmN0aW9uIGxleFJhbmdlIChzdHIsIG9wdGlvbnMpIHtcbiAgbGV0IG0sIHQ7XG4gIGlmIChvcHRpb25zLnIxYzEpIHtcbiAgICAvLyBSQyBub3RhdGlvblxuICAgIGlmIChvcHRpb25zLmFsbG93VGVybmFyeSAmJiAobSA9IHJlX1JDUEFSVElBTC5leGVjKHN0cikpKSB7XG4gICAgICB0ID0geyB0eXBlOiBSRUZfVEVSTkFSWSwgdmFsdWU6IG1bMF0gfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoKG0gPSByZV9SQ1JBTkdFLmV4ZWMoc3RyKSkpIHtcbiAgICAgIHQgPSB7IHR5cGU6IFJFRl9SQU5HRSwgdmFsdWU6IG1bMF0gfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoKG0gPSByZV9SQ1JPVy5leGVjKHN0cikpIHx8IChtID0gcmVfUkNDT0wuZXhlYyhzdHIpKSkge1xuICAgICAgdCA9IHsgdHlwZTogUkVGX0JFQU0sIHZhbHVlOiBtWzBdIH07XG4gICAgfVxuICAgIGlmICh0KSB7XG4gICAgICByZVJDTnVtcy5sYXN0SW5kZXggPSAwO1xuICAgICAgd2hpbGUgKChtID0gcmVSQ051bXMuZXhlYyh0LnZhbHVlKSkgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeCA9IChtWzFdID09PSAnUicgPyBNQVhfUk9XUyA6IE1BWF9DT0xTKSArIChtWzJdID8gMCA6IDEpO1xuICAgICAgICBjb25zdCB2YWwgPSBwYXJzZUludChtWzNdLCAxMCk7XG4gICAgICAgIGlmICh2YWwgPiB4IHx8IHZhbCA8IC14KSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0O1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICAvLyBBMSBub3RhdGlvblxuICAgIGlmIChvcHRpb25zLmFsbG93VGVybmFyeSAmJiAobSA9IHJlX0ExUEFSVElBTC5leGVjKHN0cikpKSB7XG4gICAgICB0ID0geyB0eXBlOiBSRUZfVEVSTkFSWSwgdmFsdWU6IG1bMF0gfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoKG0gPSByZV9BMUNPTC5leGVjKHN0cikpIHx8IChtID0gcmVfQTFST1cuZXhlYyhzdHIpKSkge1xuICAgICAgdCA9IHsgdHlwZTogUkVGX0JFQU0sIHZhbHVlOiBtWzBdIH07XG4gICAgfVxuICAgIGVsc2UgaWYgKChtID0gcmVfQTFSQU5HRS5leGVjKHN0cikpKSB7XG4gICAgICB0ID0geyB0eXBlOiBSRUZfUkFOR0UsIHZhbHVlOiBtWzBdIH07XG4gICAgfVxuICAgIGlmICh0KSB7XG4gICAgICByZUExTnVtcy5sYXN0SW5kZXggPSAwO1xuICAgICAgLy8gWFhYOiBjYW4gcHJvYmFibHkgb3B0aW1pemUgdGhpcyBhcyB3ZSBrbm93IGxldHRlcnMgY2FuIG9ubHkgYmUgMyBhdCBtYXhcbiAgICAgIHdoaWxlICgobSA9IHJlQTFOdW1zLmV4ZWModC52YWx1ZSkpICE9PSBudWxsKSB7XG4gICAgICAgIGlmICgvXlxcZC8udGVzdChtWzFdKSkgeyAvLyByb3dcbiAgICAgICAgICBpZiAoKHBhcnNlSW50KG1bMV0sIDEwKSAtIDEpID4gTUFYX1JPV1MpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChmcm9tQ29sKG1bMV0pID4gTUFYX0NPTFMpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHQ7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGxleFJlZk9wIChzLCBvcHRzKSB7XG4gIC8vIGluIFIxQzEgbW9kZSB3ZSBvbmx5IGFsbG93ICFcbiAgaWYgKG9wdHMucjFjMSkge1xuICAgIHJldHVybiAoc1swXSA9PT0gJyEnKVxuICAgICAgPyB7IHR5cGU6IE9QRVJBVE9SLCB2YWx1ZTogc1swXSB9XG4gICAgICA6IG51bGw7XG4gIH1cbiAgLy8gaW4gQTEgbW9kZSB3ZSBhbGxvdyBbICchJywgJzonLCAnLjonLCAnOi4nLCAnLjouJ11cbiAgY29uc3QgbSA9IC9eKCF8XFwuPzpcXC4/KS8uZXhlYyhzKTtcbiAgaWYgKG0pIHtcbiAgICByZXR1cm4geyB0eXBlOiBPUEVSQVRPUiwgdmFsdWU6IG1bMV0gfTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuZXhwb3J0IGNvbnN0IGxleGVycyA9IFtcbiAgbWFrZUhhbmRsZXIoRVJST1IsIHJlX0VSUk9SKSxcbiAgbWFrZUhhbmRsZXIoT1BFUkFUT1JfVFJJTSwgcmVfUkFOR0VfVFJJTSksXG4gIG1ha2VIYW5kbGVyKE9QRVJBVE9SLCByZV9PUEVSQVRPUiksXG4gIG1ha2VIYW5kbGVyKEZVTkNUSU9OLCByZV9GVU5DVElPTiksXG4gIG1ha2VIYW5kbGVyKEJPT0xFQU4sIHJlX0JPT0xFQU4pLFxuICBtYWtlSGFuZGxlcihORVdMSU5FLCByZV9ORVdMSU5FKSxcbiAgbWFrZUhhbmRsZXIoV0hJVEVTUEFDRSwgcmVfV0hJVEVTUEFDRSksXG4gIG1ha2VIYW5kbGVyKFNUUklORywgcmVfU1RSSU5HKSxcbiAgbGV4Q29udGV4dCxcbiAgbGV4UmFuZ2UsXG4gIGxleFN0cnVjdHVyZWQsXG4gIG1ha2VIYW5kbGVyKE5VTUJFUiwgcmVfTlVNQkVSKSxcbiAgbGV4TmFtZWRcbl07XG5cbmV4cG9ydCBjb25zdCBsZXhlcnNSZWZzID0gW1xuICBsZXhSZWZPcCxcbiAgbGV4Q29udGV4dCxcbiAgbGV4UmFuZ2UsXG4gIGxleFN0cnVjdHVyZWQsXG4gIGxleE5hbWVkXG5dO1xuIiwiaW1wb3J0IHsgQ09OVEVYVCwgQ09OVEVYVF9RVU9URSwgUkVGX1JBTkdFLCBSRUZfTkFNRUQsIFJFRl9CRUFNLCBSRUZfVEVSTkFSWSwgT1BFUkFUT1IsIFJFRl9TVFJVQ1QgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5cbmNvbnN0IEVORCA9ICckJztcblxuY29uc3QgdmFsaWRSdW5zTWVyZ2UgPSBbXG4gIFsgUkVGX1JBTkdFLCAnOicsIFJFRl9SQU5HRSBdLFxuICBbIFJFRl9SQU5HRSwgJy46JywgUkVGX1JBTkdFIF0sXG4gIFsgUkVGX1JBTkdFLCAnOi4nLCBSRUZfUkFOR0UgXSxcbiAgWyBSRUZfUkFOR0UsICcuOi4nLCBSRUZfUkFOR0UgXSxcbiAgWyBSRUZfUkFOR0UgXSxcbiAgWyBSRUZfQkVBTSBdLFxuICBbIFJFRl9URVJOQVJZIF0sXG4gIFsgQ09OVEVYVCwgJyEnLCBSRUZfUkFOR0UsICc6JywgUkVGX1JBTkdFIF0sXG4gIFsgQ09OVEVYVCwgJyEnLCBSRUZfUkFOR0UsICcuOicsIFJFRl9SQU5HRSBdLFxuICBbIENPTlRFWFQsICchJywgUkVGX1JBTkdFLCAnOi4nLCBSRUZfUkFOR0UgXSxcbiAgWyBDT05URVhULCAnIScsIFJFRl9SQU5HRSwgJy46LicsIFJFRl9SQU5HRSBdLFxuICBbIENPTlRFWFQsICchJywgUkVGX1JBTkdFIF0sXG4gIFsgQ09OVEVYVCwgJyEnLCBSRUZfQkVBTSBdLFxuICBbIENPTlRFWFQsICchJywgUkVGX1RFUk5BUlkgXSxcbiAgWyBDT05URVhUX1FVT1RFLCAnIScsIFJFRl9SQU5HRSwgJzonLCBSRUZfUkFOR0UgXSxcbiAgWyBDT05URVhUX1FVT1RFLCAnIScsIFJFRl9SQU5HRSwgJy46JywgUkVGX1JBTkdFIF0sXG4gIFsgQ09OVEVYVF9RVU9URSwgJyEnLCBSRUZfUkFOR0UsICc6LicsIFJFRl9SQU5HRSBdLFxuICBbIENPTlRFWFRfUVVPVEUsICchJywgUkVGX1JBTkdFLCAnLjouJywgUkVGX1JBTkdFIF0sXG4gIFsgQ09OVEVYVF9RVU9URSwgJyEnLCBSRUZfUkFOR0UgXSxcbiAgWyBDT05URVhUX1FVT1RFLCAnIScsIFJFRl9CRUFNIF0sXG4gIFsgQ09OVEVYVF9RVU9URSwgJyEnLCBSRUZfVEVSTkFSWSBdLFxuICBbIFJFRl9OQU1FRCBdLFxuICBbIENPTlRFWFQsICchJywgUkVGX05BTUVEIF0sXG4gIFsgQ09OVEVYVF9RVU9URSwgJyEnLCBSRUZfTkFNRUQgXSxcbiAgWyBSRUZfU1RSVUNUIF0sXG4gIFsgUkVGX05BTUVELCBSRUZfU1RSVUNUIF0sXG4gIFsgQ09OVEVYVCwgJyEnLCBSRUZfTkFNRUQsIFJFRl9TVFJVQ1QgXSxcbiAgWyBDT05URVhUX1FVT1RFLCAnIScsIFJFRl9OQU1FRCwgUkVGX1NUUlVDVCBdXG5dO1xuXG4vLyB2YWxpZCB0b2tlbiBydW5zIGFyZSBjb252ZXJ0ZWQgdG8gYSB0cmVlIHN0cnVjdHVyZVxuY29uc3QgcmVmUGFydHNUcmVlID0ge307XG5mdW5jdGlvbiBwYWNrTGlzdCAoZiwgbm9kZSkge1xuICBpZiAoZi5sZW5ndGgpIHtcbiAgICBjb25zdCBrZXkgPSBmWzBdO1xuICAgIG5vZGVba2V5XSA9IG5vZGVba2V5XSB8fCB7fTtcbiAgICBwYWNrTGlzdChmLnNsaWNlKDEpLCBub2RlW2tleV0pO1xuICB9XG4gIGVsc2Uge1xuICAgIG5vZGVbRU5EXSA9IHRydWU7XG4gIH1cbn1cbnZhbGlkUnVuc01lcmdlLmZvckVhY2gocnVuID0+IHBhY2tMaXN0KHJ1bi5jb25jYXQoKS5yZXZlcnNlKCksIHJlZlBhcnRzVHJlZSkpO1xuXG4vLyBhdHRlbXB0IHRvIG1hdGNoIGEgYmFja3dhcmRzIHJ1biBvZiB0b2tlbnMgZnJvbSBhIGdpdmVuIHBvaW50XG4vLyB0byBhIHBhdGggaW4gdGhlIHRyZWVcbmNvbnN0IG1hdGNoZXIgPSAodG9rZW5zLCBjdXJyTm9kZSwgYW5jaG9ySW5kZXgsIGluZGV4ID0gMCkgPT4ge1xuICBjb25zdCB0b2tlbiA9IHRva2Vuc1thbmNob3JJbmRleCAtIGluZGV4XTtcbiAgaWYgKHRva2VuKSB7XG4gICAgY29uc3Qga2V5ID0gKHRva2VuLnR5cGUgPT09IE9QRVJBVE9SKSA/IHRva2VuLnZhbHVlIDogdG9rZW4udHlwZTtcbiAgICBpZiAoa2V5IGluIGN1cnJOb2RlKSB7XG4gICAgICByZXR1cm4gbWF0Y2hlcih0b2tlbnMsIGN1cnJOb2RlW2tleV0sIGFuY2hvckluZGV4LCBpbmRleCArIDEpO1xuICAgIH1cbiAgfVxuICBpZiAoY3Vyck5vZGVbRU5EXSkge1xuICAgIC8vIHdlIG1heSBlbmQgaGVyZSBzbyB0aGlzIGlzIGEgbWF0Y2hcbiAgICByZXR1cm4gaW5kZXg7XG4gIH1cbiAgLy8gbm8gbWF0Y2hcbiAgcmV0dXJuIDA7XG59O1xuXG4vKipcbiAqIE1lcmdlcyBjb250ZXh0IHdpdGggcmVmZXJlbmNlIHRva2VucyBhcyBwb3NzaWJsZSBpbiBhIGxpc3Qgb2YgdG9rZW5zLlxuICpcbiAqIFdoZW4gZ2l2ZW4gYSB0b2tlbmxpc3QsIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIG5ldyBsaXN0IHdpdGggcmFuZ2VzIHJldHVybmVkXG4gKiBhcyB3aG9sZSByZWZlcmVuY2VzIChgU2hlZXQxIUExOkIyYCkgcmF0aGVyIHRoYW4gc2VwYXJhdGUgdG9rZW5zIGZvciBlYWNoXG4gKiBwYXJ0OiAoYFNoZWV0MWAsYCFgLGBBMWAsYDpgLGBCMmApLlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8VG9rZW4+fSB0b2tlbmxpc3QgQW4gYXJyYXkgb2YgdG9rZW5zIChmcm9tIGB0b2tlbml6ZSgpYClcbiAqIEByZXR1cm5zIHtBcnJheTxUb2tlbj59IEEgbmV3IGxpc3Qgb2YgdG9rZW5zIHdpdGggcmFuZ2UgcGFydHMgbWVyZ2VkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VSZWZUb2tlbnMgKHRva2VubGlzdCkge1xuICBjb25zdCBmaW5hbFRva2VucyA9IFtdO1xuICAvLyB0aGlzIHNlZWtzIGJhY2t3YXJkcyBiZWNhdXNlIGl0J3MgcmVhbGx5IHRoZSByYW5nZSBwYXJ0XG4gIC8vIHRoYXQgY29udHJvbHMgd2hhdCBjYW4gYmUgam9pbmVkLlxuICBmb3IgKGxldCBpID0gdG9rZW5saXN0Lmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgbGV0IHRva2VuID0gdG9rZW5saXN0W2ldO1xuICAgIGNvbnN0IHZhbGlkID0gbWF0Y2hlcih0b2tlbmxpc3QsIHJlZlBhcnRzVHJlZSwgaSk7XG4gICAgaWYgKHZhbGlkKSB7XG4gICAgICBjb25zdCB0b01lcmdlID0gdG9rZW5saXN0LnNsaWNlKGkgLSB2YWxpZCArIDEsIGkgKyAxKTtcbiAgICAgIC8vIHVzZSB0aGUgbWV0YSBwcm9wZXJ0aWVzIGZyb20gdGhlIFwiZmlyc3RcIiB0b2tlbiAocmlnaHQtbW9zdCB0b2tlbilcbiAgICAgIHRva2VuID0geyAuLi50b2tlbiB9O1xuICAgICAgdG9rZW4udmFsdWUgPSB0b01lcmdlLm1hcChkID0+IGQudmFsdWUpLmpvaW4oJycpO1xuICAgICAgLy8gYWRqdXN0IHRoZSBvZmZzZXRzIHRvIGluY2x1ZGUgYWxsIHRoZSB0ZXh0XG4gICAgICBpZiAodG9rZW4ubG9jICYmIHRvTWVyZ2VbMF0ubG9jKSB7XG4gICAgICAgIHRva2VuLmxvY1swXSA9IHRvTWVyZ2VbMF0ubG9jWzBdO1xuICAgICAgfVxuICAgICAgaSAtPSB2YWxpZCAtIDE7XG4gICAgfVxuICAgIGZpbmFsVG9rZW5zLnVuc2hpZnQodG9rZW4pO1xuICB9XG4gIHJldHVybiBmaW5hbFRva2Vucztcbn1cbiIsImltcG9ydCB7XG4gIEZYX1BSRUZJWCxcbiAgTkVXTElORSxcbiAgTlVNQkVSLFxuICBPUEVSQVRPUixcbiAgUkVGX05BTUVELFxuICBTVFJJTkcsXG4gIFVOS05PV04sXG4gIFdISVRFU1BBQ0UsXG4gIEZVTkNUSU9OLFxuICBPUEVSQVRPUl9UUklNLFxuICBSRUZfUkFOR0Vcbn0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgbGV4ZXJzIH0gZnJvbSAnLi9sZXhlclBhcnRzLmpzJztcbmltcG9ydCB7IG1lcmdlUmVmVG9rZW5zIH0gZnJvbSAnLi9tZXJnZVJlZlRva2Vucy5qcyc7XG5cbmNvbnN0IGlzVHlwZSA9ICh0LCB0eXBlKSA9PiB0ICYmIHQudHlwZSA9PT0gdHlwZTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gIHdpdGhMb2NhdGlvbjogZmFsc2UsXG4gIG1lcmdlUmVmczogdHJ1ZSxcbiAgYWxsb3dUZXJuYXJ5OiBmYWxzZSxcbiAgbmVnYXRpdmVOdW1iZXJzOiB0cnVlLFxuICByMWMxOiBmYWxzZVxufTtcblxuY29uc3QgaXNUZXh0VG9rZW4gPSB0b2tlbiA9PiB7XG4gIHJldHVybiAoXG4gICAgdG9rZW4udHlwZSA9PT0gUkVGX05BTUVEIHx8XG4gICAgdG9rZW4udHlwZSA9PT0gRlVOQ1RJT05cbiAgKTtcbn07XG5cbmNvbnN0IGNhdXNlc0JpbmFyeU1pbnVzID0gdG9rZW4gPT4ge1xuICByZXR1cm4gIWlzVHlwZSh0b2tlbiwgT1BFUkFUT1IpIHx8IChcbiAgICB0b2tlbi52YWx1ZSA9PT0gJyUnIHx8XG4gICAgdG9rZW4udmFsdWUgPT09ICd9JyB8fFxuICAgIHRva2VuLnZhbHVlID09PSAnKScgfHxcbiAgICB0b2tlbi52YWx1ZSA9PT0gJyMnXG4gICk7XG59O1xuXG5mdW5jdGlvbiBmaXhSQ05hbWVzICh0b2tlbnMpIHtcbiAgbGV0IHdpdGhpbkNhbGwgPSAwO1xuICBsZXQgcGFyZW5EZXB0aCA9IDA7XG4gIGxldCBsYXN0VG9rZW47XG4gIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7XG4gICAgaWYgKHRva2VuLnR5cGUgPT09IE9QRVJBVE9SKSB7XG4gICAgICBpZiAodG9rZW4udmFsdWUgPT09ICcoJykge1xuICAgICAgICBwYXJlbkRlcHRoKys7XG4gICAgICAgIGlmIChsYXN0VG9rZW4udHlwZSA9PT0gRlVOQ1RJT04pIHtcbiAgICAgICAgICBjb25zdCB2ID0gbGFzdFRva2VuLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKHYgPT09ICdsYW1iZGEnIHx8IHYgPT09ICdsZXQnKSB7XG4gICAgICAgICAgICB3aXRoaW5DYWxsID0gcGFyZW5EZXB0aDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHRva2VuLnZhbHVlID09PSAnKScpIHtcbiAgICAgICAgcGFyZW5EZXB0aC0tO1xuICAgICAgICBpZiAocGFyZW5EZXB0aCA8IHdpdGhpbkNhbGwpIHtcbiAgICAgICAgICB3aXRoaW5DYWxsID0gMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh3aXRoaW5DYWxsICYmIHRva2VuLnR5cGUgPT09IFVOS05PV04gJiYgL15bcmNdJC8udGVzdCh0b2tlbi52YWx1ZSkpIHtcbiAgICAgIHRva2VuLnR5cGUgPSBSRUZfTkFNRUQ7XG4gICAgfVxuICAgIGxhc3RUb2tlbiA9IHRva2VuO1xuICB9XG4gIHJldHVybiB0b2tlbnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb2tlbnMgKGZ4LCB0b2tlbkhhbmRsZXJzLCBvcHRpb25zID0ge30pIHtcbiAgY29uc3Qgb3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBvcHRpb25zKTtcbiAgY29uc3QgeyB3aXRoTG9jYXRpb24sIG1lcmdlUmVmcywgbmVnYXRpdmVOdW1iZXJzIH0gPSBvcHRzO1xuICBjb25zdCB0b2tlbnMgPSBbXTtcbiAgbGV0IHBvcyA9IDA7XG4gIGxldCBsZXRPckxhbWJkYSA9IDA7XG4gIGxldCB1bmtub3duUkMgPSAwO1xuICBjb25zdCB0cmltT3BzID0gW107XG5cbiAgbGV0IHRhaWwwID0gbnVsbDsgLy8gbGFzdCBub24td2hpdGVzcGFjZSB0b2tlblxuICBsZXQgdGFpbDEgPSBudWxsOyAvLyBwZW51bHRpbWF0ZSBub24td2hpdGVzcGFjZSB0b2tlblxuICBsZXQgbGFzdFRva2VuID0gbnVsbDsgLy8gbGFzdCB0b2tlblxuICBjb25zdCBwdXNoVG9rZW4gPSB0b2tlbiA9PiB7XG4gICAgY29uc3QgaXNDdXJyVW5rbm93biA9IHRva2VuLnR5cGUgPT09IFVOS05PV047XG4gICAgY29uc3QgaXNMYXN0VW5rbm93biA9IGxhc3RUb2tlbiAmJiBsYXN0VG9rZW4udHlwZSA9PT0gVU5LTk9XTjtcbiAgICBpZiAobGFzdFRva2VuICYmIChcbiAgICAgIChpc0N1cnJVbmtub3duICYmIGlzTGFzdFVua25vd24pIHx8XG4gICAgICAoaXNDdXJyVW5rbm93biAmJiBpc1RleHRUb2tlbihsYXN0VG9rZW4pKSB8fFxuICAgICAgKGlzTGFzdFVua25vd24gJiYgaXNUZXh0VG9rZW4odG9rZW4pKVxuICAgICkpIHtcbiAgICAgIC8vIFVOS05PV04gdG9rZW5zIFwiY29udGFtaW5hdGVcIiBzaWJsaW5nIHRleHQgdG9rZW5zXG4gICAgICBsYXN0VG9rZW4udmFsdWUgKz0gdG9rZW4udmFsdWU7XG4gICAgICBsYXN0VG9rZW4udHlwZSA9IFVOS05PV047XG4gICAgICBpZiAod2l0aExvY2F0aW9uKSB7XG4gICAgICAgIGxhc3RUb2tlbi5sb2NbMV0gPSB0b2tlbi5sb2NbMV07XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaWYgKHRva2VuLnR5cGUgPT09IE9QRVJBVE9SX1RSSU0pIHtcbiAgICAgICAgdHJpbU9wcy5wdXNoKHRva2Vucy5sZW5ndGgpO1xuICAgICAgICB0b2tlbi50eXBlID0gVU5LTk9XTjtcbiAgICAgIH1cbiAgICAgIC8vIHB1c2ggdG9rZW4gYXMgbm9ybWFsbHlcbiAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcbiAgICAgIGxhc3RUb2tlbiA9IHRva2VuO1xuICAgICAgaWYgKHRva2VuLnR5cGUgIT09IFdISVRFU1BBQ0UgJiYgdG9rZW4udHlwZSAhPT0gTkVXTElORSkge1xuICAgICAgICB0YWlsMSA9IHRhaWwwO1xuICAgICAgICB0YWlsMCA9IHRva2VuO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBpZiAoZnhbMF0gPT09ICc9Jykge1xuICAgIGNvbnN0IHRva2VuID0ge1xuICAgICAgdHlwZTogRlhfUFJFRklYLFxuICAgICAgdmFsdWU6ICc9JyxcbiAgICAgIC4uLih3aXRoTG9jYXRpb24gPyB7IGxvYzogWyAwLCAxIF0gfSA6IHt9KVxuICAgIH07XG4gICAgcG9zKys7XG4gICAgcHVzaFRva2VuKHRva2VuKTtcbiAgfVxuXG4gIHdoaWxlIChwb3MgPCBmeC5sZW5ndGgpIHtcbiAgICBjb25zdCBzdGFydFBvcyA9IHBvcztcbiAgICBjb25zdCBzID0gZnguc2xpY2UocG9zKTtcbiAgICBsZXQgdG9rZW5UeXBlID0gJyc7XG4gICAgbGV0IHRva2VuVmFsdWUgPSAnJztcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2VuSGFuZGxlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHQgPSB0b2tlbkhhbmRsZXJzW2ldKHMsIG9wdHMpO1xuICAgICAgaWYgKHQpIHtcbiAgICAgICAgdG9rZW5UeXBlID0gdC50eXBlO1xuICAgICAgICB0b2tlblZhbHVlID0gdC52YWx1ZTtcbiAgICAgICAgcG9zICs9IHRva2VuVmFsdWUubGVuZ3RoO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRva2VuVHlwZSkge1xuICAgICAgdG9rZW5UeXBlID0gVU5LTk9XTjtcbiAgICAgIHRva2VuVmFsdWUgPSBmeFtwb3NdO1xuICAgICAgcG9zKys7XG4gICAgfVxuXG4gICAgY29uc3QgdG9rZW4gPSB7XG4gICAgICB0eXBlOiB0b2tlblR5cGUsXG4gICAgICB2YWx1ZTogdG9rZW5WYWx1ZSxcbiAgICAgIC4uLih3aXRoTG9jYXRpb24gPyB7IGxvYzogWyBzdGFydFBvcywgcG9zIF0gfSA6IHt9KVxuICAgIH07XG5cbiAgICAvLyBtYWtlIGEgbm90ZSBpZiB3ZSBmb3VuZCBhIGxldC9sYW1iZGEgY2FsbFxuICAgIGlmIChsYXN0VG9rZW4gJiYgbGFzdFRva2VuLnR5cGUgPT09IEZVTkNUSU9OICYmIHRva2VuVmFsdWUgPT09ICcoJykge1xuICAgICAgY29uc3QgbGFzdExDID0gbGFzdFRva2VuLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICBpZiAobGFzdExDID09PSAnbGFtYmRhJyB8fCBsYXN0TEMgPT09ICdsZXQnKSB7XG4gICAgICAgIGxldE9yTGFtYmRhKys7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIG1ha2UgYSBub3RlIGlmIHdlIGZvdW5kIGEgUiBvciBDIHVua25vd25cbiAgICBpZiAodG9rZW5UeXBlID09PSBVTktOT1dOKSB7XG4gICAgICBjb25zdCB2YWxMQyA9IHRva2VuVmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgICAgIHVua25vd25SQyArPSAodmFsTEMgPT09ICdyJyB8fCB2YWxMQyA9PT0gJ2MnKSA/IDEgOiAwO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGZvciB0ZXJtaW5hdGlvblxuICAgIGlmICh0b2tlblR5cGUgPT09IFNUUklORykge1xuICAgICAgY29uc3QgbCA9IHRva2VuVmFsdWUubGVuZ3RoO1xuICAgICAgaWYgKHRva2VuVmFsdWUgPT09ICdcIlwiJykge1xuICAgICAgICAvLyBjb21tb24gY2FzZSB0aGF0IElTIHRlcm1pbmF0ZWRcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHRva2VuVmFsdWUgPT09ICdcIicgfHwgdG9rZW5WYWx1ZVtsIC0gMV0gIT09ICdcIicpIHtcbiAgICAgICAgdG9rZW4udW50ZXJtaW5hdGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKHRva2VuVmFsdWUgIT09ICdcIlwiJyAmJiB0b2tlblZhbHVlW2wgLSAyXSA9PT0gJ1wiJykge1xuICAgICAgICBsZXQgcCA9IGwgLSAxO1xuICAgICAgICB3aGlsZSAodG9rZW5WYWx1ZVtwXSA9PT0gJ1wiJykgeyBwLS07IH1cbiAgICAgICAgY29uc3QgYXRTdGFydCA9IChwICsgMSk7XG4gICAgICAgIGNvbnN0IG9kZE51bSA9ICgobCAtIHAgKyAxKSAlIDIgPT09IDApO1xuICAgICAgICBpZiAoIWF0U3RhcnQgXiBvZGROdW0pIHtcbiAgICAgICAgICB0b2tlbi51bnRlcm1pbmF0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5lZ2F0aXZlTnVtYmVycyAmJiB0b2tlblR5cGUgPT09IE5VTUJFUikge1xuICAgICAgY29uc3QgbGFzdDEgPSBsYXN0VG9rZW47XG4gICAgICAvLyBkbyB3ZSBoYXZlIGEgbnVtYmVyIHByZWNlZGVkIGJ5IGEgbWludXM/XG4gICAgICBpZiAobGFzdDEgJiYgaXNUeXBlKGxhc3QxLCBPUEVSQVRPUikgJiYgbGFzdDEudmFsdWUgPT09ICctJykge1xuICAgICAgICAvLyBtaXNzaW5nIHRhaWwxIG1lYW5zIHdlIGFyZSBhdCB0aGUgc3RhcnQgb2YgdGhlIHN0cmVhbVxuICAgICAgICBpZiAoXG4gICAgICAgICAgIXRhaWwxIHx8XG4gICAgICAgICAgaXNUeXBlKHRhaWwxLCBGWF9QUkVGSVgpIHx8XG4gICAgICAgICAgIWNhdXNlc0JpbmFyeU1pbnVzKHRhaWwxKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBtaW51cyA9IHRva2Vucy5wb3AoKTtcbiAgICAgICAgICB0b2tlbi52YWx1ZSA9ICctJyArIHRva2VuVmFsdWU7XG4gICAgICAgICAgaWYgKHdpdGhMb2NhdGlvbikge1xuICAgICAgICAgICAgLy8gZW5zdXJlIG9mZnNldHMgYXJlIHVwIHRvIGRhdGVcbiAgICAgICAgICAgIHRva2VuLmxvY1swXSA9IG1pbnVzLmxvY1swXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gbmV4dCBzdGVwIHRyaWVzIHRvIGNvdW50ZXIgdGhlIHNjcmV3aW5nIGFyb3VuZCB3aXRoIHRoZSB0YWlsaW5nXG4gICAgICAgICAgLy8gaXQgc2hvdWxkIGJlIGNvcnJlY3QgYWdhaW4gb25jZSB3ZSBwdXNoVG9rZW4oKVxuICAgICAgICAgIHRhaWwwID0gdGFpbDE7XG4gICAgICAgICAgbGFzdFRva2VuID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHB1c2hUb2tlbih0b2tlbik7XG4gIH1cblxuICAvLyBpZiB3ZSBlbmNvdW50ZXJlZCBib3RoIGEgTEFNQkRBL0xFVCBjYWxsLCBhbmQgdW5rbm93biAncicgb3IgJ2MnIHRva2Vuc1xuICAvLyB3ZSdsbCB0dXJuIHRoZSB1bmtub3duIHRva2VucyBpbnRvIG5hbWVzIHdpdGhpbiB0aGUgY2FsbC5cbiAgaWYgKHVua25vd25SQyAmJiBsZXRPckxhbWJkYSkge1xuICAgIGZpeFJDTmFtZXModG9rZW5zKTtcbiAgfVxuXG4gIC8vIEFueSBPUEVSQVRPUl9UUklNIHRva2VucyBoYXZlIGJlZW4gaW5kZXhlZCBhbHJlYWR5LCB0aGV5IG5vdyBuZWVkIHRvIGJlXG4gIC8vIGVpdGhlciB0dXJuZWQgaW50byBPUEVSQVRPUnMgb3IgVU5LTk9XTnMuIFRyaW0gb3BlcmF0b3JzIGFyZSBvbmx5IGFsbG93ZWRcbiAgLy8gYmV0d2VlbiB0d28gUkVGX1JBTkdFIHRva2VucyBhcyB0aGV5IGFyZSBub3QgdmFsaWQgaW4gZXhwcmVzc2lvbnMgYXMgZnVsbFxuICAvLyBvcGVyYXRvcnMuXG4gIGZvciAoY29uc3QgaW5kZXggb2YgdHJpbU9wcykge1xuICAgIGNvbnN0IGJlZm9yZSA9IHRva2Vuc1tpbmRleCAtIDFdO1xuICAgIGNvbnN0IGFmdGVyID0gdG9rZW5zW2luZGV4IC0gMV07XG4gICAgaWYgKGJlZm9yZSAmJiBiZWZvcmUudHlwZSA9PT0gUkVGX1JBTkdFICYmIGFmdGVyICYmIGFmdGVyLnR5cGUgPT09IFJFRl9SQU5HRSkge1xuICAgICAgdG9rZW5zW2luZGV4XS50eXBlID0gT1BFUkFUT1I7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdG9rZW5zW2luZGV4XS50eXBlID0gVU5LTk9XTjtcbiAgICB9XG4gIH1cblxuICBpZiAobWVyZ2VSZWZzKSB7XG4gICAgcmV0dXJuIG1lcmdlUmVmVG9rZW5zKHRva2Vucyk7XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG4vKipcbiAqIEJyZWFrcyBhIHN0cmluZyBmb3JtdWxhIGludG8gYSBsaXN0IG9mIHRva2Vucy5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgb3V0cHV0IHdpbGwgYmUgYW4gYXJyYXkgb2Ygb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHRva2VuczpcbiAqXG4gKiBgYGBqc1xuICogW1xuICogICB7IHR5cGU6IEZYX1BSRUZJWCwgdmFsdWU6ICc9JyB9LFxuICogICB7IHR5cGU6IEZVTkNUSU9OLCB2YWx1ZTogJ1NVTScgfSxcbiAqICAgeyB0eXBlOiBPUEVSQVRPUiwgdmFsdWU6ICcoJyB9LFxuICogICB7IHR5cGU6IFJFRl9SQU5HRSwgdmFsdWU6ICdBMTpCMicgfSxcbiAqICAgeyB0eXBlOiBPUEVSQVRPUiwgdmFsdWU6ICcpJyB9XG4gKiBdXG4gKiBgYGBcbiAqXG4gKiBUb2tlbiB0eXBlcyBtYXkgYmUgZm91bmQgYXMgYW4gT2JqZWN0IGFzIHRoZVxuICogW2B0b2tlblR5cGVzYCBleHBvcnRde0BsaW5rIHRva2VuVHlwZXN9IG9uIHRoZSBwYWNrYWdlXG4gKiAoYGltcG9ydCB7dG9rZW5UeXBlc30gZnJvbSAnQGJvcmdhci9meCc7YCkuXG4gKlxuICogVG8gc3VwcG9ydCBzeW50YXggaGlnaGxpZ2h0aW5nIGFzIHlvdSB0eXBlLCBgU1RSSU5HYCB0b2tlbnMgYXJlIGFsbG93ZWQgdG8gYmVcbiAqIFwidW50ZXJtaW5hdGVkXCIuIEZvciBleGFtcGxlLCB0aGUgaW5jb21wbGV0ZSBmb3JtdWxhIGA9XCJIZWxsbyB3b3JsZGAgd291bGQgYmVcbiAqIHRva2VuaXplZCBhczpcbiAqXG4gKiBgYGBqc1xuICogW1xuICogICB7IHR5cGU6IEZYX1BSRUZJWCwgdmFsdWU6ICc9JyB9LFxuICogICB7IHR5cGU6IFNUUklORywgdmFsdWU6ICdcIkhlbGxvIHdvcmxkJywgdW50ZXJtaW5hdGVkOiB0cnVlIH0sXG4gKiBdXG4gKiBgYGBcbiAqXG4gKiBAc2VlIHRva2VuVHlwZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtdWxhIEFuIEV4Y2VsIGZvcm11bGEgc3RyaW5nIChhbiBFeGNlbCBleHByZXNzaW9uKSBvciBhbiBhcnJheSBvZiB0b2tlbnMuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dICBPcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93VGVybmFyeT1mYWxzZV0gIEVuYWJsZXMgdGhlIHJlY29nbml0aW9uIG9mIHRlcm5hcnkgcmFuZ2VzIGluIHRoZSBzdHlsZSBvZiBgQTE6QWAgb3IgYEExOjFgLiBUaGVzZSBhcmUgc3VwcG9ydGVkIGJ5IEdvb2dsZSBTaGVldHMgYnV0IG5vdCBFeGNlbC4gU2VlOiBSZWZlcmVuY2VzLm1kLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5uZWdhdGl2ZU51bWJlcnM9dHJ1ZV0gIE1lcmdlcyB1bmFyeSBtaW51c2VzIHdpdGggdGhlaXIgaW1tZWRpYXRlbHkgZm9sbG93aW5nIG51bWJlciB0b2tlbnMgKGAtYCxgMWApID0+IGAtMWAgKGFsdGVybmF0aXZlbHkgdGhlc2Ugd2lsbCBiZSB1bmFyeSBvcGVyYXRpb25zIGluIHRoZSB0cmVlKS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucjFjMT1mYWxzZV0gIFJhbmdlcyBhcmUgZXhwZWN0ZWQgdG8gYmUgaW4gdGhlIFIxQzEgc3R5bGUgZm9ybWF0IHJhdGhlciB0aGFuIHRoZSBtb3JlIHBvcHVsYXIgQTEgc3R5bGUuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLndpdGhMb2NhdGlvbj10cnVlXSAgTm9kZXMgd2lsbCBpbmNsdWRlIHNvdXJjZSBwb3NpdGlvbiBvZmZzZXRzIHRvIHRoZSB0b2tlbnM6IGB7IGxvYzogWyBzdGFydCwgZW5kIF0gfWBcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMubWVyZ2VSZWZzPXRydWVdICBTaG91bGQgcmFuZ2VzIGJlIHJldHVybmVkIGFzIHdob2xlIHJlZmVyZW5jZXMgKGBTaGVldDEhQTE6QjJgKSBvciBhcyBzZXBhcmF0ZSB0b2tlbnMgZm9yIGVhY2ggcGFydDogKGBTaGVldDFgLGAhYCxgQTFgLGA6YCxgQjJgKS4gVGhpcyBpcyB0aGUgc2FtZSBhcyBjYWxsaW5nIFtgbWVyZ2VSZWZUb2tlbnNgXSgjbWVyZ2VSZWZUb2tlbnMpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnhsc3g9ZmFsc2VdICBFbmFibGVzIGEgYFsxXVNoZWV0MSFBMWAgb3IgYFsxXSFuYW1lYCBzeW50YXggZm9ybSBmb3IgZXh0ZXJuYWwgd29ya2Jvb2tzIGZvdW5kIG9ubHkgaW4gWExTWCBmaWxlcy5cbiAqIEByZXR1cm5zIHtBcnJheTxUb2tlbj59IEFuIEFTVCBvZiBub2Rlc1xuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemUgKGZvcm11bGEsIG9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gZ2V0VG9rZW5zKGZvcm11bGEsIGxleGVycywgb3B0aW9ucyk7XG59XG4iLCJpbXBvcnQge1xuICBSRUZfUkFOR0UsIFJFRl9CRUFNLCBSRUZfTkFNRUQsIFJFRl9URVJOQVJZLCBSRUZfU1RSVUNULFxuICBGWF9QUkVGSVgsIFdISVRFU1BBQ0UsIE5FV0xJTkUsXG4gIEZVTkNUSU9OLCBPUEVSQVRPUixcbiAgRVJST1IsIFNUUklORywgTlVNQkVSLCBCT09MRUFOXG59IGZyb20gJy4vY29uc3RhbnRzLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBhIHJhbmdlLlxuICpcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBpbnB1dCBpcyBhIHRva2VuIHRoYXQgaGFzIGEgdHlwZSBvZiBlaXRoZXIgUkVGX1JBTkdFXG4gKiAoYEExYCBvciBgQTE6QjJgKSwgUkVGX1RFUk5BUlkgKGBBMTpBYCwgYEExOjFgLCBgMTpBMWAsIG9yIGBBOkExYCksIG9yXG4gKiBSRUZfQkVBTSAoYEE6QWAgb3IgYDE6MWApLiBJbiBhbGwgb3RoZXIgY2FzZXMgYGZhbHNlYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdG9rZW4gQSB0b2tlblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyByYW5nZSwgRmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSYW5nZSAodG9rZW4pIHtcbiAgcmV0dXJuICEhdG9rZW4gJiYgKFxuICAgIHRva2VuLnR5cGUgPT09IFJFRl9SQU5HRSB8fFxuICAgIHRva2VuLnR5cGUgPT09IFJFRl9CRUFNIHx8XG4gICAgdG9rZW4udHlwZSA9PT0gUkVGX1RFUk5BUllcbiAgKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBhIHJlZmVyZW5jZS5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgaXMgYSB0b2tlbiBvZiB0eXBlIFJFRl9SQU5HRSAoYEExYCBvciBgQTE6QjJgKSxcbiAqIFJFRl9URVJOQVJZIChgQTE6QWAsIGBBMToxYCwgYDE6QTFgLCBvciBgQTpBMWApLCBSRUZfQkVBTSAoYEE6QWAgb3IgYDE6MWApLFxuICogb3IgUkVGX05BTUVEIChgbXlyYW5nZWApLiBJbiBhbGwgb3RoZXIgY2FzZXMgYGZhbHNlYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdG9rZW4gVGhlIHRva2VuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIHJlZmVyZW5jZSwgRmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZWZlcmVuY2UgKHRva2VuKSB7XG4gIHJldHVybiAhIXRva2VuICYmIChcbiAgICB0b2tlbi50eXBlID09PSBSRUZfUkFOR0UgfHxcbiAgICB0b2tlbi50eXBlID09PSBSRUZfQkVBTSB8fFxuICAgIHRva2VuLnR5cGUgPT09IFJFRl9URVJOQVJZIHx8XG4gICAgdG9rZW4udHlwZSA9PT0gUkVGX1NUUlVDVCB8fFxuICAgIHRva2VuLnR5cGUgPT09IFJFRl9OQU1FRFxuICApO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIGEgbGl0ZXJhbC5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgaXMgYSB0b2tlbiBvZiB0eXBlIEJPT0xFQU4gKGBUUlVFYCBvciBgRkFMU0VgKSxcbiAqIEVSUk9SIChgI1ZBTFVFIWApLCBOVU1CRVIgKDEyMy40KSwgb3IgU1RSSU5HIChgXCJsb3JlbSBpcHN1bVwiYCkuIEluIGFsbCBvdGhlclxuICogY2FzZXMgYGZhbHNlYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdG9rZW4gVGhlIHRva2VuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIGxpdGVyYWwsIEZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTGl0ZXJhbCAodG9rZW4pIHtcbiAgcmV0dXJuICEhdG9rZW4gJiYgKFxuICAgIHRva2VuLnR5cGUgPT09IEJPT0xFQU4gfHxcbiAgICB0b2tlbi50eXBlID09PSBFUlJPUiB8fFxuICAgIHRva2VuLnR5cGUgPT09IE5VTUJFUiB8fFxuICAgIHRva2VuLnR5cGUgPT09IFNUUklOR1xuICApO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIGFuIGVycm9yLlxuICpcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBpbnB1dCBpcyBhIHRva2VuIG9mIHR5cGUgRVJST1IgKGAjVkFMVUUhYCkuIEluIGFsbFxuICogb3RoZXIgY2FzZXMgYGZhbHNlYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdG9rZW4gVGhlIHRva2VuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIGVycm9yLCBGYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0Vycm9yICh0b2tlbikge1xuICByZXR1cm4gISF0b2tlbiAmJiB0b2tlbi50eXBlID09PSBFUlJPUjtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyB3aGl0ZXNwYWNlLlxuICpcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBpbnB1dCBpcyBhIHRva2VuIG9mIHR5cGUgV0hJVEVTUEFDRSAoYCBgKSBvclxuICogTkVXTElORSAoYFxcbmApLiBJbiBhbGwgb3RoZXIgY2FzZXMgYGZhbHNlYCBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0ge2FueX0gdG9rZW4gVGhlIHRva2VuXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIHdoaXRlc3BhY2UsIEZhbHNlIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzV2hpdGVzcGFjZSAodG9rZW4pIHtcbiAgcmV0dXJuICEhdG9rZW4gJiYgKFxuICAgIHRva2VuLnR5cGUgPT09IFdISVRFU1BBQ0UgfHxcbiAgICB0b2tlbi50eXBlID09PSBORVdMSU5FXG4gICk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgdG9rZW4gaXMgYSBmdW5jdGlvbi5cbiAqXG4gKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgaW5wdXQgaXMgYSB0b2tlbiBvZiB0eXBlIEZVTkNUSU9OLlxuICogSW4gYWxsIG90aGVyIGNhc2VzIGBmYWxzZWAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHthbnl9IHRva2VuIFRoZSB0b2tlblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBmdW5jdGlvbiwgRmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbiAodG9rZW4pIHtcbiAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gRlVOQ1RJT047XG59XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIGlucHV0IGlzIGEgdG9rZW4gb2YgdHlwZSBGWF9QUkVGSVggKGxlYWRpbmcgYD1gIGluXG4gKiBmb3JtdWxhKS4gSW4gYWxsIG90aGVyIGNhc2VzIGBmYWxzZWAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHthbnl9IHRva2VuIFRoZSB0b2tlblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBlZmZlY3RzIHByZWZpeCwgRmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNGeFByZWZpeCAodG9rZW4pIHtcbiAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gRlhfUFJFRklYO1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIHRva2VuIGlzIGFuIG9wZXJhdG9yLlxuICpcbiAqIFJldHVybnMgYHRydWVgIGlmIHRoZSBpbnB1dCBpcyBhIHRva2VuIG9mIHR5cGUgT1BFUkFUT1IgKGArYCBvciBgOmApLiBJbiBhbGxcbiAqIG90aGVyIGNhc2VzIGBmYWxzZWAgaXMgcmV0dXJuZWQuXG4gKlxuICogQHBhcmFtIHthbnl9IHRva2VuIFRoZSB0b2tlblxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCB0b2tlbiBpcyBvcGVyYXRvciwgRmFsc2Ugb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNPcGVyYXRvciAodG9rZW4pIHtcbiAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gT1BFUkFUT1I7XG59XG4iLCIvKlxuICogRXhjZWwgZm9ybXVsYSBsYW5ndWFnZSBwYXJzZXJcbiAqXG4gKiBUaGlzIHBhcnNlciBpcyBhIFRvcC1Eb3duIE9wZXJhdG9yIFByZWNlZGVuY2UgKFByYXR0KSBwYXJzZXIuIEl0J3MgYmFzZWQgb25cbiAqIHRoZSBvbmUgdGhhdCBEb3VnbGFzIENyb2NrZm9yZCBkZXNjcmliZXMgaW4gQ2hhcHRlciA5IG9mIHRoZSBPJ1JlaWxseSBib29rXG4gKiBCZXV0aWZ1bCBDb2RlIChodHRwOi8vY3JvY2tmb3JkLmNvbS9qYXZhc2NyaXB0L3Rkb3AvdGRvcC5odG1sKS5cbiAqXG4gKiBUaGUgcGFyc2VyIGhhbmRsZXMgbW9zdCBiYXNpYyB0aGluZ3MgRXhjZWwvU2hlZXRzIGRvIGV4Y2VwdDpcbiAqIGBTaGVldDE6U2hlZXQyIUExYCByZWZlcmVuY2VzIGNyb3NzIGNvbnRleHRzICgzRCByZWZlcmVuY2VzKVxuICovXG5pbXBvcnQge1xuICBpc1JlZmVyZW5jZSxcbiAgaXNMaXRlcmFsLFxuICBpc0Z1bmN0aW9uLFxuICBpc1doaXRlc3BhY2UsXG4gIGlzRnhQcmVmaXgsXG4gIGlzT3BlcmF0b3IsXG4gIGlzRXJyb3Jcbn0gZnJvbSAnLi9pc1R5cGUuanMnO1xuaW1wb3J0IHtcbiAgVU5BUlksXG4gIEJJTkFSWSxcbiAgUkVGRVJFTkNFLFxuICBMSVRFUkFMLFxuICBFUlJPUl9MSVRFUkFMLFxuICBDQUxMLFxuICBMQU1CREEsXG4gIEFSUkFZLFxuICBJREVOVElGSUVSLFxuICBOVU1CRVIsXG4gIEJPT0xFQU4sXG4gIEVSUk9SLFxuICBTVFJJTkcsXG4gIExFVCxcbiAgTEVUX0RFQ0wsXG4gIFJFRl9OQU1FRCxcbiAgUkVGX1NUUlVDVCxcbiAgUkVGX0JFQU1cbn0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuXG5pbXBvcnQgeyB0b2tlbml6ZSB9IGZyb20gJy4vbGV4ZXIuanMnO1xuXG5jb25zdCBFTkQgPSAnKEVORCknO1xuY29uc3QgRlVOQ1RJT04gPSAnKEZVTkNUSU9OKSc7XG5jb25zdCBXSElURVNQQUNFID0gJyhXSElURVNQQUNFKSc7XG5cbmNvbnN0IHJlZkZ1bmN0aW9ucyA9IFtcbiAgJ0FOQ0hPUkFSUkFZJyxcbiAgJ0NIT09TRScsXG4gICdEUk9QJyxcbiAgJ0lGJyxcbiAgJ0lGUycsXG4gICdJTkRFWCcsXG4gICdJTkRJUkVDVCcsXG4gICdMQU1CREEnLFxuICAnTEVUJyxcbiAgJ09GRlNFVCcsXG4gICdSRURVQ0UnLFxuICAnU0lOR0xFJyxcbiAgJ1NXSVRDSCcsXG4gICdUQUtFJyxcbiAgJ1RSSU1SQU5HRScsXG4gICdYTE9PS1VQJ1xuXTtcblxuY29uc3QgaXNSZWZlcmVuY2VGdW5jdGlvbk5hbWUgPSBmbk5hbWUgPT4ge1xuICByZXR1cm4gcmVmRnVuY3Rpb25zLmluY2x1ZGVzKGZuTmFtZS50b1VwcGVyQ2FzZSgpKTtcbn07XG5cbmNvbnN0IGlzUmVmZXJlbmNlVG9rZW4gPSAodG9rZW4sIGFsbG93T3BlcmF0b3JzID0gZmFsc2UpID0+IHtcbiAgY29uc3QgdmFsdWUgPSAodG9rZW4gJiYgdG9rZW4udmFsdWUpICsgJyc7XG4gIGlmIChpc1JlZmVyZW5jZSh0b2tlbikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoYWxsb3dPcGVyYXRvcnMgJiYgaXNPcGVyYXRvcih0b2tlbikgJiYgKHZhbHVlID09PSAnOicgfHwgdmFsdWUgPT09ICcsJyB8fCAhdmFsdWUudHJpbSgpKSkge1xuICAgIHJldHVybiB0cnVlOyAvLyBqb2luLCB1bmlvbiwgaW50ZXJzZWN0aW9uXG4gIH1cbiAgaWYgKGlzRnVuY3Rpb24odG9rZW4pICYmIGlzUmVmZXJlbmNlRnVuY3Rpb25OYW1lKHZhbHVlKSkge1xuICAgIHJldHVybiB0cnVlOyAvLyBmdW5jdGlvbiB0aGF0IHlpZWxkcyByZWZlcmVuY2VcbiAgfVxuICBpZiAoaXNFcnJvcih0b2tlbikgJiYgdmFsdWUgPT09ICcjUkVGIScpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCBpc1JlZmVyZW5jZU5vZGUgPSBub2RlID0+IHtcbiAgcmV0dXJuICghIW5vZGUpICYmIChcbiAgICAobm9kZS50eXBlID09PSBSRUZFUkVOQ0UpIHx8XG4gICAgKChub2RlLnR5cGUgPT09IEVSUk9SX0xJVEVSQUwgfHwgbm9kZS50eXBlID09PSBFUlJPUikgJiYgbm9kZS52YWx1ZSA9PT0gJyNSRUYhJykgfHxcbiAgICAobm9kZS50eXBlID09PSBCSU5BUlkgJiYgKFxuICAgICAgbm9kZS5vcGVyYXRvciA9PT0gJzonIHx8XG4gICAgICBub2RlLm9wZXJhdG9yID09PSAnICcgfHxcbiAgICAgIG5vZGUub3BlcmF0b3IgPT09ICcsJylcbiAgICApIHx8XG4gICAgaXNSZWZlcmVuY2Uobm9kZSkgfHxcbiAgICAobm9kZS50eXBlID09PSBDQUxMICYmIGlzUmVmZXJlbmNlRnVuY3Rpb25OYW1lKG5vZGUuY2FsbGVlLm5hbWUpKVxuICApO1xufTtcblxuY29uc3Qgc3ltYm9sVGFibGUgPSB7fTtcbmxldCBjdXJyZW50Tm9kZTtcbmxldCB0b2tlbnM7XG5sZXQgdG9rZW5JbmRleDtcbmxldCBwZXJtaXRBcnJheVJhbmdlcyA9IGZhbHNlO1xubGV0IHBlcm1pdEFycmF5Q2FsbHMgPSBmYWxzZTtcblxuZnVuY3Rpb24gaGFsdCAobWVzc2FnZSwgYXRJbmRleCA9IG51bGwpIHtcbiAgY29uc3QgZXJyID0gbmV3IEVycm9yKG1lc3NhZ2UpO1xuICBlcnIuc291cmNlID0gdG9rZW5zLm1hcChkID0+IGQudmFsdWUpLmpvaW4oJycpO1xuICBlcnIuc291cmNlT2Zmc2V0ID0gdG9rZW5zXG4gICAgLnNsaWNlKDAsIGF0SW5kZXggPz8gdG9rZW5JbmRleClcbiAgICAucmVkdWNlKChhLCBkKSA9PiBhICsgZC52YWx1ZS5sZW5ndGgsIDApO1xuICB0aHJvdyBlcnI7XG59XG5cbi8vIEExIEExIHwgQTEgKEExKSB8IEExICgoQTEpKSB8IEExICggKEExKSApIHwgLi4uXG5mdW5jdGlvbiByZWZJc1VwY29taW5nIChhbGxvd09wZXJhdG9ycyA9IGZhbHNlKSB7XG4gIGxldCBpID0gdG9rZW5JbmRleDtcbiAgbGV0IG5leHQ7XG4gIGRvIHtcbiAgICBuZXh0ID0gdG9rZW5zWysraV07XG4gIH1cbiAgd2hpbGUgKFxuICAgIG5leHQgJiYgKFxuICAgICAgaXNXaGl0ZXNwYWNlKG5leHQpIHx8XG4gICAgICAoaXNPcGVyYXRvcihuZXh0KSAmJiBuZXh0LnZhbHVlID09PSAnKCcpXG4gICAgKVxuICApO1xuICByZXR1cm4gaXNSZWZlcmVuY2VUb2tlbihuZXh0LCBhbGxvd09wZXJhdG9ycyk7XG59XG5cbmZ1bmN0aW9uIGFkdmFuY2UgKGV4cGVjdE5leHQgPSBudWxsLCBsZWZ0Tm9kZSA9IG51bGwpIHtcbiAgaWYgKGV4cGVjdE5leHQgJiYgZXhwZWN0TmV4dCAhPT0gY3VycmVudE5vZGUuaWQpIHtcbiAgICBoYWx0KGBFeHBlY3RlZCAke2V4cGVjdE5leHR9IGJ1dCBnb3QgJHtjdXJyZW50Tm9kZS5pZH1gKTtcbiAgfVxuICAvLyBsb29rIGFoZWFkIHRvIHNlZSBpZiB3ZSBoYXZlICggKCBcIiBcIiwgXCIoXCIgKSsgUkVGIClcbiAgaWYgKGlzV2hpdGVzcGFjZSh0b2tlbnNbdG9rZW5JbmRleF0pKSB7XG4gICAgLy8gcG90ZW50aWFsIGludGVyc2VjdGlvbiBvcGVyYXRpb24gKHNvIGRvbid0IGFsbG93IG9wZXJhdG9ycyBhcyB1cGNvbWluZylcbiAgICBjb25zdCBoYXZlUmVmID0gaXNSZWZlcmVuY2VOb2RlKGxlZnROb2RlKTtcbiAgICBjb25zdCBwb3NzaWJsZVdTT3AgPSBoYXZlUmVmICYmIHJlZklzVXBjb21pbmcoZmFsc2UpO1xuICAgIGNvbnN0IG5leHRJc0NhbGwgPSBoYXZlUmVmICYmIHRva2Vuc1t0b2tlbkluZGV4ICsgMV0gJiYgdG9rZW5zW3Rva2VuSW5kZXggKyAxXS52YWx1ZSA9PT0gJygnO1xuICAgIGlmICghcG9zc2libGVXU09wICYmICFuZXh0SXNDYWxsKSB7XG4gICAgICAvLyBpZ25vcmUgd2hpdGVzcGFjZVxuICAgICAgd2hpbGUgKGlzV2hpdGVzcGFjZSh0b2tlbnNbdG9rZW5JbmRleF0pKSB7XG4gICAgICAgIHRva2VuSW5kZXgrKztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgLy8gRU9UXG4gIGlmICh0b2tlbkluZGV4ID49IHRva2Vucy5sZW5ndGgpIHtcbiAgICBjdXJyZW50Tm9kZSA9IHN5bWJvbFRhYmxlW0VORF07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgdG9rZW4gPSB0b2tlbnNbdG9rZW5JbmRleF07XG4gIHRva2VuSW5kZXggKz0gMTtcblxuICBpZiAodG9rZW4udW50ZXJtaW5hdGVkKSB7XG4gICAgaGFsdCgnRW5jb3VudGVyZWQgYW4gdW50ZXJtaW5hdGVkIHRva2VuJyk7XG4gIH1cblxuICBsZXQgbm9kZTtcbiAgaWYgKGlzT3BlcmF0b3IodG9rZW4pKSB7XG4gICAgbm9kZSA9IHN5bWJvbFRhYmxlW3Rva2VuLnZhbHVlXTtcbiAgICBpZiAoIW5vZGUpIHtcbiAgICAgIGhhbHQoYFVua25vd24gb3BlcmF0b3IgJHt0b2tlbi52YWx1ZX1gKTtcbiAgICB9XG4gIH1cbiAgZWxzZSBpZiAoaXNXaGl0ZXNwYWNlKHRva2VuKSkge1xuICAgIG5vZGUgPSBzeW1ib2xUYWJsZVtXSElURVNQQUNFXTtcbiAgfVxuICBlbHNlIGlmIChpc0xpdGVyYWwodG9rZW4pKSB7XG4gICAgbm9kZSA9IHN5bWJvbFRhYmxlW0xJVEVSQUxdO1xuICB9XG4gIGVsc2UgaWYgKGlzUmVmZXJlbmNlKHRva2VuKSkge1xuICAgIG5vZGUgPSBzeW1ib2xUYWJsZVtSRUZFUkVOQ0VdO1xuICB9XG4gIGVsc2UgaWYgKGlzRnVuY3Rpb24odG9rZW4pKSB7XG4gICAgbm9kZSA9IHN5bWJvbFRhYmxlW0ZVTkNUSU9OXTtcbiAgfVxuICBlbHNlIHtcbiAgICBoYWx0KGBVbmV4cGVjdGVkICR7dG9rZW4udHlwZX0gdG9rZW46ICR7dG9rZW4udmFsdWV9YCk7XG4gIH1cblxuICBjdXJyZW50Tm9kZSA9IE9iamVjdC5jcmVhdGUobm9kZSk7XG4gIGN1cnJlbnROb2RlLnR5cGUgPSB0b2tlbi50eXBlO1xuICBjdXJyZW50Tm9kZS52YWx1ZSA9IHRva2VuLnZhbHVlO1xuICBpZiAodG9rZW4ubG9jKSB7XG4gICAgY3VycmVudE5vZGUubG9jID0gWyAuLi50b2tlbi5sb2MgXTtcbiAgfVxuICByZXR1cm4gY3VycmVudE5vZGU7XG59XG5cbmZ1bmN0aW9uIGV4cHJlc3Npb24gKHJicCkge1xuICBsZXQgdCA9IGN1cnJlbnROb2RlO1xuICBhZHZhbmNlKG51bGwsIHQpO1xuICBsZXQgbGVmdCA9IHQubnVkKCk7XG4gIHdoaWxlIChyYnAgPCBjdXJyZW50Tm9kZS5sYnApIHtcbiAgICB0ID0gY3VycmVudE5vZGU7XG4gICAgYWR2YW5jZShudWxsLCB0KTtcbiAgICBsZWZ0ID0gdC5sZWQobGVmdCk7XG4gIH1cbiAgcmV0dXJuIGxlZnQ7XG59XG5cbmNvbnN0IG9yaWdpbmFsX3N5bWJvbCA9IHtcbiAgLy8gbnVsbCBkZW5vdGF0aW9uXG4gIG51ZDogKCkgPT4gaGFsdCgnSW52YWxpZCBzeW50YXgnKSwgLy8gVW5kZWZpbmVkXG4gIC8vIGxlZnQgZGVub3RhdGlvblxuICBsZWQ6ICgpID0+IGhhbHQoJ01pc3Npbmcgb3BlcmF0b3InKVxufTtcblxuLy8gYnAgPSBiaW5kaW5nIHBvd2VyXG5mdW5jdGlvbiBzeW1ib2wgKGlkLCBicCA9IDApIHtcbiAgbGV0IHMgPSBzeW1ib2xUYWJsZVtpZF07XG4gIGlmIChzKSB7XG4gICAgaWYgKGJwID49IHMubGJwKSB7XG4gICAgICBzLmxicCA9IGJwO1xuICAgIH1cbiAgfVxuICBlbHNlIHtcbiAgICBzID0geyAuLi5vcmlnaW5hbF9zeW1ib2wgfTtcbiAgICBzLmlkID0gaWQ7XG4gICAgcy52YWx1ZSA9IGlkO1xuICAgIHMubGJwID0gYnA7XG4gICAgc3ltYm9sVGFibGVbaWRdID0gcztcbiAgfVxuICByZXR1cm4gcztcbn1cblxuZnVuY3Rpb24gaW5maXggKGlkLCBicCwgbGVkKSB7XG4gIGNvbnN0IHMgPSBzeW1ib2woaWQsIGJwKTtcbiAgcy5sZWQgPSBsZWQgfHwgZnVuY3Rpb24gKGxlZnQpIHtcbiAgICB0aGlzLnR5cGUgPSBCSU5BUlk7XG4gICAgdGhpcy5vcGVyYXRvciA9IHRoaXMudmFsdWU7XG4gICAgZGVsZXRlIHRoaXMudmFsdWU7XG4gICAgY29uc3QgcmlnaHQgPSBleHByZXNzaW9uKGJwKTtcbiAgICB0aGlzLmFyZ3VtZW50cyA9IFsgbGVmdCwgcmlnaHQgXTtcbiAgICBpZiAodGhpcy5sb2MpIHtcbiAgICAgIHRoaXMubG9jID0gWyBsZWZ0LmxvY1swXSwgcmlnaHQubG9jWzFdIF07XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICByZXR1cm4gcztcbn1cblxuZnVuY3Rpb24gcG9zdGZpeCAoaWQsIGxlZCkge1xuICBjb25zdCBzID0gc3ltYm9sKGlkLCAwKTtcbiAgcy5sYnAgPSA3MDtcbiAgcy5sZWQgPSBsZWQgfHwgZnVuY3Rpb24gKGxlZnQpIHtcbiAgICB0aGlzLnR5cGUgPSBVTkFSWTtcbiAgICB0aGlzLm9wZXJhdG9yID0gdGhpcy52YWx1ZTtcbiAgICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgICB0aGlzLmFyZ3VtZW50cyA9IFsgbGVmdCBdO1xuICAgIGlmICh0aGlzLmxvYykge1xuICAgICAgdGhpcy5sb2NbMF0gPSBsZWZ0LmxvY1swXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH07XG4gIHJldHVybiBzO1xufVxuXG5mdW5jdGlvbiBwcmVmaXggKGlkLCBudWQpIHtcbiAgY29uc3QgcyA9IHN5bWJvbChpZCk7XG4gIHMubnVkID0gbnVkIHx8IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLnR5cGUgPSBVTkFSWTtcbiAgICB0aGlzLm9wZXJhdG9yID0gdGhpcy52YWx1ZTtcbiAgICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgICBjb25zdCBzdWJleHByID0gZXhwcmVzc2lvbig3MCk7XG4gICAgdGhpcy5hcmd1bWVudHMgPSBbIHN1YmV4cHIgXTtcbiAgICBpZiAodGhpcy5sb2MpIHtcbiAgICAgIHRoaXMubG9jWzFdID0gc3ViZXhwci5sb2NbMV07XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9O1xuICByZXR1cm4gcztcbn1cblxuZnVuY3Rpb24gcmFuZ2VJbmZpeCAoaWQsIGJwKSB7XG4gIHJldHVybiBpbmZpeChpZCwgYnAsIGZ1bmN0aW9uIChsZWZ0KSB7XG4gICAgaWYgKCFpc1JlZmVyZW5jZU5vZGUobGVmdCkpIHtcbiAgICAgIGhhbHQoYFVuZXhwZWN0ZWQgJHtpZH0gb3BlcmF0b3JgKTtcbiAgICB9XG4gICAgY29uc3QgcmlnaHQgPSBleHByZXNzaW9uKGJwKTtcbiAgICBpZiAoIWlzUmVmZXJlbmNlTm9kZShyaWdodCwgdHJ1ZSkpIHtcbiAgICAgIGhhbHQoYFVuZXhwZWN0ZWQgJHtjdXJyZW50Tm9kZS50eXBlfSBmb2xsb3dpbmcgJHt0aGlzLmlkfWApO1xuICAgIH1cbiAgICB0aGlzLnR5cGUgPSBCSU5BUlk7XG4gICAgdGhpcy5vcGVyYXRvciA9IHRoaXMudmFsdWUudHJpbSgpID8gdGhpcy52YWx1ZSA6ICcgJzsgLy8gaGFjayBhcm91bmQgd2hpdGVzcGFjZSBvcFxuICAgIGRlbGV0ZSB0aGlzLnZhbHVlO1xuICAgIHRoaXMuYXJndW1lbnRzID0gWyBsZWZ0LCByaWdodCBdO1xuICAgIGlmICh0aGlzLmxvYykge1xuICAgICAgdGhpcy5sb2MgPSBbIGxlZnQubG9jWzBdLCByaWdodC5sb2NbMV0gXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xufVxuXG5zeW1ib2woRU5EKTtcblxuLy8gcmVmZXJlbmNlIG9wZXJhdG9yc1xucmFuZ2VJbmZpeCgnOicsIDgwKTsgLy8gcmFuZ2Ugam9pbi9leHRlbmQgPUI3Ok9GRlNFVChBMSwxMCwxMClcbmNvbnN0IGNvbW1hID0gcmFuZ2VJbmZpeCgnLCcsIDgwKTsgLy8gdW5pb24gPUI3OkQ3LEM2OkM4XG5yYW5nZUluZml4KFdISVRFU1BBQ0UsIDgwKTsgLy8gaW50ZXJzZWN0OiA9Qjc6RDcgQzY6QzhcblxuLy8gRXhjZWwncyBncmFtbWFyIGlzIGFtYmlndW91cy4gVGhpcyB0dXJucyB0aGUgLCBvcGVyYXRvcidzIGxlZnQgYmluZGluZ1xuLy8gcG93ZXIgb24vb2ZmIHdoaWNoIGFsbG93cyB1cyB0byB0cmVhdCAsIGFzIGEgc3ltYm9sIHdoZXJlIHdlIG5lZWQuXG5jb25zdCB1bmlvblJlZnMgPSBlbmFibGUgPT4ge1xuICBjb25zdCBjdXJyU3RhdGUgPSBjb21tYS5sYnAgPiAwO1xuICBpZiAoZW5hYmxlICE9IG51bGwpIHsgY29tbWEubGJwID0gZW5hYmxlID8gODAgOiAwOyB9XG4gIHJldHVybiBjdXJyU3RhdGU7XG59O1xuXG4vLyBhcml0aG1ldGljIGFuZCBzdHJpbmcgb3BlcmF0aW9uc1xucG9zdGZpeCgnJScpOyAvLyBwZXJjZW50XG5wb3N0Zml4KCcjJywgZnVuY3Rpb24gKGxlZnQpIHsgLy8gc3BpbGxlZCByYW5nZSAoX3hsZm4uQU5DSE9SQVJSQVkpXG4gIGlmICghaXNSZWZlcmVuY2VOb2RlKGxlZnQpKSB7XG4gICAgaGFsdCgnIyBleHBlY3RzIGEgcmVmZXJlbmNlJyk7XG4gIH1cbiAgdGhpcy50eXBlID0gVU5BUlk7XG4gIHRoaXMub3BlcmF0b3IgPSB0aGlzLnZhbHVlO1xuICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgdGhpcy5hcmd1bWVudHMgPSBbIGxlZnQgXTtcbiAgcmV0dXJuIHRoaXM7XG59KTsgLy8gcmFuZ2VcbnByZWZpeCgnKycpOyAvLyB1bmFyeSBwbHVzXG5wcmVmaXgoJy0nKTsgLy8gdW5hcnkgbWludXNcbnByZWZpeCgnQCcpOyAvLyBpbXBsaWNpdCBpbnRlcnNlY3Rpb24gKF94bGZuLlNJTkdMRSlcbmluZml4KCdeJywgNTApOyAvLyBwb3dlclxuaW5maXgoJyonLCA0MCk7IC8vIG11bHRpcGx5XG5pbmZpeCgnLycsIDQwKTsgLy8gZGl2aWRlXG5pbmZpeCgnKycsIDMwKTsgLy8gYWRkXG5pbmZpeCgnLScsIDMwKTsgLy8gc3VidHJhY3RcbmluZml4KCcmJywgMjApOyAvLyB0ZXh0IGNvbmNhdFxuXG4vLyBjb21wYXJpc29uXG5pbmZpeCgnPScsIDEwKTtcbmluZml4KCc8JywgMTApO1xuaW5maXgoJz4nLCAxMCk7XG5pbmZpeCgnPD0nLCAxMCk7XG5pbmZpeCgnPj0nLCAxMCk7XG5pbmZpeCgnPD4nLCAxMCk7XG5zeW1ib2woTElURVJBTCkubnVkID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCB7IHR5cGUsIHZhbHVlIH0gPSB0aGlzO1xuICB0aGlzLnR5cGUgPSBMSVRFUkFMO1xuICB0aGlzLnJhdyA9IHZhbHVlO1xuICBpZiAodHlwZSA9PT0gTlVNQkVSKSB7XG4gICAgdGhpcy52YWx1ZSA9ICt2YWx1ZTtcbiAgfVxuICBlbHNlIGlmICh0eXBlID09PSBCT09MRUFOKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlLnRvVXBwZXJDYXNlKCkgPT09ICdUUlVFJztcbiAgfVxuICBlbHNlIGlmICh0eXBlID09PSBFUlJPUikge1xuICAgIHRoaXMudHlwZSA9IEVSUk9SX0xJVEVSQUw7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gIH1cbiAgZWxzZSBpZiAodHlwZSA9PT0gU1RSSU5HKSB7XG4gICAgLy8gRklYTUU6IHRocm93IGFuIGVycm9yIGlmIHRoZSBzdHJpbmcgaXMgdW50ZXJtaW5hdGVkXG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlLnNsaWNlKDEsIC0xKS5yZXBsYWNlKC9cIlwiL2csICdcIicpO1xuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgbGl0ZXJhbCB0eXBlOiAnICsgdHlwZSk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59O1xuc3ltYm9sKFJFRkVSRU5DRSkubnVkID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy50eXBlID09PSBSRUZfTkFNRUQpIHtcbiAgICB0aGlzLmtpbmQgPSAnbmFtZSc7XG4gIH1cbiAgZWxzZSBpZiAodGhpcy50eXBlID09PSBSRUZfU1RSVUNUKSB7XG4gICAgdGhpcy5raW5kID0gJ3RhYmxlJzsgLy8gc3RydWN0dXJlZCA/XG4gIH1cbiAgZWxzZSBpZiAodGhpcy50eXBlID09PSBSRUZfQkVBTSkge1xuICAgIHRoaXMua2luZCA9ICdiZWFtJztcbiAgfVxuICBlbHNlIHtcbiAgICB0aGlzLmtpbmQgPSAncmFuZ2UnO1xuICB9XG4gIHRoaXMudHlwZSA9IFJFRkVSRU5DRTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vLyBwYXJlbnNcbnN5bWJvbCgnKScpO1xucHJlZml4KCcoJywgZnVuY3Rpb24gKCkge1xuICBjb25zdCBwcmV2U3RhdGUgPSB1bmlvblJlZnModHJ1ZSk7XG4gIGNvbnN0IGUgPSBleHByZXNzaW9uKDApO1xuICBhZHZhbmNlKCcpJywgZSk7XG4gIHVuaW9uUmVmcyhwcmV2U3RhdGUpO1xuICByZXR1cm4gZTtcbn0pO1xuXG4vLyBmdW5jdGlvbiBjYWxsXG5zeW1ib2woRlVOQ1RJT04pLm51ZCA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHRoaXM7XG59O1xuaW5maXgoJygnLCA5MCwgZnVuY3Rpb24gKGxlZnQpIHtcbiAgbGV0IGNhbGxlZSA9IHtcbiAgICB0eXBlOiBJREVOVElGSUVSLFxuICAgIG5hbWU6IGxlZnQudmFsdWVcbiAgfTtcbiAgaWYgKGxlZnQuaWQgIT09IEZVTkNUSU9OKSB7XG4gICAgaWYgKFxuICAgICAgbGVmdC50eXBlID09PSBMQU1CREEgfHxcbiAgICAgIC8vIEV4Y2VsIG9ubHkgYWxsb3dzIGNhbGxzIHRvIFwibmFtZXNcIiBhbmQgcmVmIGZ1bmN0aW9ucy4gU2luY2Ugd2UgZG9uJ3RcbiAgICAgIC8vIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGUgdHdvICh0aGlzIHJlcXVpcmVzIGEgdGFibGUgb2YgZnVuY3Rpb24gbmFtZXMpXG4gICAgICAvLyB3ZSdyZSBvdmVybHkgcGVybWlzc2l2ZSBoZXJlOlxuICAgICAgbGVmdC50eXBlID09PSBDQUxMIHx8XG4gICAgICBsZWZ0LnR5cGUgPT09IExFVCB8fFxuICAgICAgbGVmdC50eXBlID09PSBSRUZFUkVOQ0UgfHxcbiAgICAgIChsZWZ0LnR5cGUgPT09IFVOQVJZICYmIGxlZnQudmFsdWUgPT09ICcjJykgfHwgLy8gQmVjYXVzZSBpdCdzIHJlYWxseSBTSU5HTEUoLi4uKSgpXG4gICAgICAobGVmdC50eXBlID09PSBFUlJPUl9MSVRFUkFMICYmIGxlZnQudmFsdWUgPT09ICcjUkVGIScpXG4gICAgKSB7XG4gICAgICAvLyBpbiB0aGUgY2FzZSBvZiBSRUZFUkVOQ0UsIGRvIHdlIHdhbnQgdG8gc2V0IHRoZSBub2RlIHRvIElkZW50aWZpZXI/XG4gICAgICBjYWxsZWUgPSBsZWZ0O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGhhbHQoJ1VuZXhwZWN0ZWQgY2FsbCcsIHRva2VuSW5kZXggLSAxKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgbGNGbiA9IGxlZnQudmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGxjRm4gPT09ICdsYW1iZGEnKSB7XG4gICAgcmV0dXJuIHBhcnNlTGFtYmRhLmNhbGwodGhpcywgbGVmdCk7XG4gIH1cbiAgaWYgKGxjRm4gPT09ICdsZXQnKSB7XG4gICAgcmV0dXJuIHBhcnNlTGV0LmNhbGwodGhpcywgbGVmdCk7XG4gIH1cbiAgY29uc3QgYXJncyA9IFtdO1xuICBsZXQgbGFzdFdhc0NvbW1hID0gZmFsc2U7XG4gIGlmIChjdXJyZW50Tm9kZS5pZCAhPT0gJyknKSB7XG4gICAgY29uc3QgcHJldlN0YXRlID0gdW5pb25SZWZzKGZhbHNlKTtcbiAgICB3aGlsZSAoY3VycmVudE5vZGUuaWQgIT09ICcpJykge1xuICAgICAgaWYgKGlzV2hpdGVzcGFjZShjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgYWR2YW5jZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGN1cnJlbnROb2RlLmlkID09PSAnLCcpIHtcbiAgICAgICAgYXJncy5wdXNoKG51bGwpO1xuICAgICAgICBsYXN0V2FzQ29tbWEgPSB0cnVlO1xuICAgICAgICBhZHZhbmNlKCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgYXJnID0gZXhwcmVzc2lvbigwKTtcbiAgICAgICAgYXJncy5wdXNoKGFyZyk7XG4gICAgICAgIGxhc3RXYXNDb21tYSA9IGZhbHNlO1xuICAgICAgICBpZiAoY3VycmVudE5vZGUuaWQgPT09ICcsJykge1xuICAgICAgICAgIGFkdmFuY2UoJywnKTtcbiAgICAgICAgICBsYXN0V2FzQ29tbWEgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHVuaW9uUmVmcyhwcmV2U3RhdGUpO1xuICB9XG4gIGlmIChsYXN0V2FzQ29tbWEpIHtcbiAgICBhcmdzLnB1c2gobnVsbCk7XG4gIH1cbiAgY29uc3QgY2xvc2VQYXJlbiA9IGN1cnJlbnROb2RlO1xuICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgdGhpcy50eXBlID0gQ0FMTDtcbiAgdGhpcy5jYWxsZWUgPSBjYWxsZWU7XG4gIGlmIChsZWZ0LmxvYykge1xuICAgIHRoaXMuY2FsbGVlLmxvYyA9IFsgLi4ubGVmdC5sb2MgXTtcbiAgfVxuICB0aGlzLmFyZ3VtZW50cyA9IGFyZ3M7XG4gIGlmIChsZWZ0LmxvYykge1xuICAgIHRoaXMubG9jID0gWyBsZWZ0LmxvY1swXSwgY2xvc2VQYXJlbi5sb2NbMV0gXTtcbiAgfVxuICBhZHZhbmNlKCcpJywgdGhpcyk7XG4gIHJldHVybiB0aGlzO1xufSk7XG5cbmZ1bmN0aW9uIHBhcnNlTGFtYmRhIChsZWZ0KSB7XG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgY29uc3QgYXJnTmFtZXMgPSB7fTtcbiAgbGV0IGJvZHk7XG4gIGxldCBkb25lID0gZmFsc2U7XG4gIGNvbnN0IHByZXZTdGF0ZSA9IHVuaW9uUmVmcyhmYWxzZSk7XG4gIGlmIChjdXJyZW50Tm9kZS5pZCAhPT0gJyknKSB7XG4gICAgd2hpbGUgKCFkb25lKSB7XG4gICAgICBpZiAoaXNXaGl0ZXNwYWNlKGN1cnJlbnROb2RlKSkge1xuICAgICAgICBhZHZhbmNlKCk7XG4gICAgICB9XG4gICAgICBjb25zdCBhcmdUb2tlbkluZGV4ID0gdG9rZW5JbmRleDtcbiAgICAgIGNvbnN0IGFyZyA9IGV4cHJlc3Npb24oMCk7XG4gICAgICBpZiAoY3VycmVudE5vZGUuaWQgPT09ICcsJykge1xuICAgICAgICAvLyBhbGwgYnV0IGxhc3QgYXJncyBtdXN0IGJlIG5hbWVzXG4gICAgICAgIGlmIChhcmcudHlwZSA9PT0gUkVGRVJFTkNFICYmIGFyZy5raW5kID09PSAnbmFtZScpIHtcbiAgICAgICAgICAvLyBuYW1lcyBtYXkgbm90IGJlIGR1cGxpY2F0ZXNcbiAgICAgICAgICBjb25zdCBjdXJyTmFtZSA9IGFyZy52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgIGlmIChjdXJyTmFtZSBpbiBhcmdOYW1lcykge1xuICAgICAgICAgICAgaGFsdCgnRHVwbGljYXRlIG5hbWU6ICcgKyBhcmcudmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBhcmdOYW1lc1tjdXJyTmFtZV0gPSAxO1xuICAgICAgICAgIGNvbnN0IGEgPSB7IHR5cGU6IElERU5USUZJRVIsIG5hbWU6IGFyZy52YWx1ZSB9O1xuICAgICAgICAgIGlmIChhcmcubG9jKSB7IGEubG9jID0gYXJnLmxvYzsgfVxuICAgICAgICAgIGFyZ3MucHVzaChhKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICB0b2tlbkluZGV4ID0gYXJnVG9rZW5JbmRleDtcbiAgICAgICAgICBoYWx0KCdMQU1CREEgYXJndW1lbnQgaXMgbm90IGEgbmFtZScpO1xuICAgICAgICB9XG4gICAgICAgIGFkdmFuY2UoJywnKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBib2R5ID0gYXJnO1xuICAgICAgICBkb25lID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdW5pb25SZWZzKHByZXZTdGF0ZSk7XG4gIGRlbGV0ZSB0aGlzLnZhbHVlO1xuICB0aGlzLnR5cGUgPSBMQU1CREE7XG4gIHRoaXMucGFyYW1zID0gYXJncztcbiAgdGhpcy5ib2R5ID0gYm9keSB8fCBudWxsO1xuICBpZiAobGVmdC5sb2MpIHtcbiAgICB0aGlzLmxvYyA9IFsgbGVmdC5sb2NbMF0sIGN1cnJlbnROb2RlLmxvY1sxXSBdO1xuICB9XG4gIGFkdmFuY2UoJyknLCB0aGlzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGV0IChsZWZ0KSB7XG4gIGNvbnN0IGFyZ3MgPSBbXTtcbiAgY29uc3QgdmFscyA9IFtdO1xuICBjb25zdCBhcmdOYW1lcyA9IHt9O1xuICBsZXQgYm9keTtcbiAgbGV0IGFyZ0NvdW50ZXIgPSAwO1xuICBjb25zdCBhZGRBcmd1bWVudCA9IChhcmcsIGxhc3RBcmcpID0+IHtcbiAgICBpZiAoYm9keSkge1xuICAgICAgaGFsdCgnVW5leHBlY3RlZCBhcmd1bWVudCBmb2xsb3dpbmcgY2FsY3VsYXRpb24nKTtcbiAgICB9XG4gICAgaWYgKGxhc3RBcmcgJiYgYXJnQ291bnRlciA+PSAyKSB7XG4gICAgICBib2R5ID0gYXJnO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnN0IHdhbnROYW1lID0gIShhcmdDb3VudGVyICUgMik7XG4gICAgICBpZiAod2FudE5hbWUpIHtcbiAgICAgICAgaWYgKGFyZyAmJiAoYXJnLnR5cGUgPT09IFJFRkVSRU5DRSAmJiBhcmcua2luZCA9PT0gJ25hbWUnKSkge1xuICAgICAgICAgIC8vIG5hbWVzIG1heSBub3QgYmUgZHVwbGljYXRlc1xuICAgICAgICAgIGNvbnN0IGN1cnJOYW1lID0gYXJnLnZhbHVlLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgaWYgKGN1cnJOYW1lIGluIGFyZ05hbWVzKSB7XG4gICAgICAgICAgICBoYWx0KCdEdXBsaWNhdGUgbmFtZTogJyArIGFyZy52YWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFyZ05hbWVzW2N1cnJOYW1lXSA9IDE7XG4gICAgICAgICAgYXJncy5wdXNoKHsgdHlwZTogSURFTlRJRklFUiwgbmFtZTogYXJnLnZhbHVlLCBsb2M6IGFyZy5sb2MgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJnQ291bnRlciA+PSAyKSB7XG4gICAgICAgICAgYm9keSA9IGFyZztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBoYWx0KCdBcmd1bWVudCBpcyBub3QgYSBuYW1lJyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB2YWxzLnB1c2goYXJnKTtcbiAgICAgIH1cbiAgICB9XG4gICAgYXJnQ291bnRlcisrO1xuICB9O1xuICBjb25zdCBwcmV2U3RhdGUgPSB1bmlvblJlZnMoZmFsc2UpO1xuICBsZXQgbGFzdFdhc0NvbW1hID0gZmFsc2U7XG4gIGlmIChjdXJyZW50Tm9kZS5pZCAhPT0gJyknKSB7XG4gICAgd2hpbGUgKGN1cnJlbnROb2RlLmlkICE9PSAnKScpIHtcbiAgICAgIGlmIChpc1doaXRlc3BhY2UoY3VycmVudE5vZGUpKSB7XG4gICAgICAgIGFkdmFuY2UoKTtcbiAgICAgIH1cbiAgICAgIGlmIChjdXJyZW50Tm9kZS5pZCA9PT0gJywnKSB7XG4gICAgICAgIGFkZEFyZ3VtZW50KG51bGwpO1xuICAgICAgICBsYXN0V2FzQ29tbWEgPSB0cnVlO1xuICAgICAgICBhZHZhbmNlKCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgYXJnID0gZXhwcmVzc2lvbigwKTtcbiAgICAgICAgYWRkQXJndW1lbnQoYXJnLCBjdXJyZW50Tm9kZS5pZCAhPT0gJywnKTtcbiAgICAgICAgbGFzdFdhc0NvbW1hID0gZmFsc2U7XG4gICAgICAgIGlmIChjdXJyZW50Tm9kZS5pZCA9PT0gJywnKSB7XG4gICAgICAgICAgYWR2YW5jZSgnLCcpO1xuICAgICAgICAgIGxhc3RXYXNDb21tYSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgdW5pb25SZWZzKHByZXZTdGF0ZSk7XG4gIH1cbiAgaWYgKGxhc3RXYXNDb21tYSkge1xuICAgIGFkZEFyZ3VtZW50KG51bGwsIHRydWUpO1xuICB9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZmluZWRcbiAgaWYgKGJvZHkgPT09IHVuZGVmaW5lZCkge1xuICAgIGhhbHQoJ1VuZXhwZWN0ZWQgZW5kIG9mIGFyZ3VtZW50cycpO1xuICB9XG4gIHVuaW9uUmVmcyhwcmV2U3RhdGUpO1xuICBkZWxldGUgdGhpcy52YWx1ZTtcbiAgdGhpcy50eXBlID0gTEVUO1xuICB0aGlzLmRlY2xhcmF0aW9ucyA9IFtdO1xuICBpZiAoIWFyZ3MubGVuZ3RoKSB7XG4gICAgaGFsdCgnVW5leHBlY3RlZCBlbmQgb2YgYXJndW1lbnRzJyk7XG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgcyA9IHtcbiAgICAgIHR5cGU6IExFVF9ERUNMLFxuICAgICAgaWQ6IGFyZ3NbaV0sXG4gICAgICBpbml0OiB2YWxzW2ldLFxuICAgICAgbG9jOiBhcmdzW2ldLmxvYyAmJiBbIGFyZ3NbaV0ubG9jWzBdLCB2YWxzW2ldLmxvY1sxXSBdXG4gICAgfTtcbiAgICB0aGlzLmRlY2xhcmF0aW9ucy5wdXNoKHMpO1xuICB9XG4gIHRoaXMuYm9keSA9IGJvZHk7XG4gIGlmIChsZWZ0LmxvYykge1xuICAgIHRoaXMubG9jID0gWyBsZWZ0LmxvY1swXSwgY3VycmVudE5vZGUubG9jWzFdIF07XG4gIH1cbiAgYWR2YW5jZSgnKScsIHRoaXMpO1xuICByZXR1cm4gdGhpcztcbn1cblxuLy8gYXJyYXkgbGl0ZXJhbFxuc3ltYm9sKCd9Jyk7XG5zeW1ib2woJzsnKTtcbnByZWZpeCgneycsIGZ1bmN0aW9uICgpIHtcbiAgaWYgKGN1cnJlbnROb2RlLmlkID09PSAnfScpIHsgLy8gYXJyYXlzIG11c3Qgbm90IGJlIGVtcHR5XG4gICAgaGFsdCgnVW5leHBlY3RlZCBlbXB0eSBhcnJheScpO1xuICB9XG4gIGxldCByb3cgPSBbXTtcbiAgbGV0IGRvbmUgPSBmYWxzZTtcbiAgY29uc3Qgcm93cyA9IFsgcm93IF07XG4gIGNvbnN0IHByZXZTdGF0ZSA9IHVuaW9uUmVmcyhmYWxzZSk7XG4gIHdoaWxlICghZG9uZSkge1xuICAgIGlmIChpc1doaXRlc3BhY2UoY3VycmVudE5vZGUpKSB7XG4gICAgICBhZHZhbmNlKCk7XG4gICAgfVxuICAgIC8vIGFycmF5cyBhbGxvdyBvbmx5IGxpdGVyYWxzLCByYW5nZXMgKGluIEdTaGVldHMpIGFuZCAsOzogb3BlcmF0b3JzLlxuICAgIC8vIEZJWE1FOiBpZiB7IG5lZ2F0aXZlTnVtYmVyczogZmFsc2UgfSB3ZSBtdXN0IGNvbnN1bWUgbWludXNlcyBhcyB3ZWxsLlxuICAgIC8vIEV4Y2VsIGFsbG93cyA9ey0xfSBidXQgbm90ID17KC0xKX0gYW5kID17MSV9XG4gICAgaWYgKGlzTGl0ZXJhbChjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJvdy5wdXNoKHN5bWJvbFRhYmxlW0xJVEVSQUxdLm51ZC5jYWxsKGN1cnJlbnROb2RlKSk7XG4gICAgICBhZHZhbmNlKCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHBlcm1pdEFycmF5UmFuZ2VzICYmIGlzUmVmZXJlbmNlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJvdy5wdXNoKHN5bWJvbFRhYmxlW1JFRkVSRU5DRV0ubnVkLmNhbGwoY3VycmVudE5vZGUpKTtcbiAgICAgIGFkdmFuY2UoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAocGVybWl0QXJyYXlDYWxscyAmJiBpc0Z1bmN0aW9uKGN1cnJlbnROb2RlKSkge1xuICAgICAgY29uc3QgYXJnID0gZXhwcmVzc2lvbigwKTtcbiAgICAgIHJvdy5wdXNoKGFyZyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgaGFsdChgVW5leHBlY3RlZCAke2N1cnJlbnROb2RlLnR5cGV9IGluIGFycmF5OiAke2N1cnJlbnROb2RlLnZhbHVlfWApO1xuICAgIH1cbiAgICBpZiAoY3VycmVudE5vZGUuaWQgPT09ICcsJykge1xuICAgICAgLy8gbmV4dCBpdGVtXG4gICAgICBhZHZhbmNlKCcsJyk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGN1cnJlbnROb2RlLmlkID09PSAnOycpIHtcbiAgICAgIC8vIG5leHQgcm93XG4gICAgICBhZHZhbmNlKCc7Jyk7XG4gICAgICByb3cgPSBbXTtcbiAgICAgIHJvd3MucHVzaChyb3cpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGRvbmUgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBjb25zdCBjbG9zaW5nQnJhY2UgPSBjdXJyZW50Tm9kZTtcbiAgYWR2YW5jZSgnfScpO1xuICB1bmlvblJlZnMocHJldlN0YXRlKTtcbiAgdGhpcy50eXBlID0gQVJSQVk7XG4gIHRoaXMuZWxlbWVudHMgPSByb3dzO1xuICBpZiAodGhpcy5sb2MpIHtcbiAgICB0aGlzLmxvY1sxXSA9IGNsb3NpbmdCcmFjZS5sb2NbMV07XG4gIH1cbiAgZGVsZXRlIHRoaXMudmFsdWU7XG4gIHJldHVybiB0aGlzO1xufSk7XG5cbi8qKlxuICogUGFyc2VzIGEgc3RyaW5nIGZvcm11bGEgb3IgbGlzdCBvZiB0b2tlbnMgaW50byBhbiBBU1QuXG4gKlxuICogVGhlIHBhcnNlciByZXF1aXJlcyBgbWVyZ2VSZWZzYCB0byBoYXZlIGJlZW4gYHRydWVgIGluIHRva2VubGlzdCBvcHRpb25zLFxuICogYmVjYXVzZSBpdCBkb2VzIG5vdCByZWNvZ25pemUgcmVmZXJlbmNlIGNvbnRleHQgdG9rZW5zLlxuICpcbiAqIFRoZSBBU1QgQWJzdHJhY3QgU3ludGF4IFRyZWUncyBmb3JtYXQgaXMgZG9jdW1lbnRlZCBpblxuICogW0FTVF9mb3JtYXQubWRdKC4vQVNUX2Zvcm1hdC5tZClcbiAqXG4gKiBAc2VlIG5vZGVUeXBlc1xuICogQHBhcmFtIHsoc3RyaW5nIHwgVG9rZW5bXSl9IGZvcm11bGEgQW4gRXhjZWwgZm9ybXVsYSBzdHJpbmcgKGFuIEV4Y2VsIGV4cHJlc3Npb24pIG9yIGFuIGFycmF5IG9mIHRva2Vucy5cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gIE9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYWxsb3dOYW1lZD10cnVlXSAgRW5hYmxlIHBhcnNpbmcgbmFtZXMgYXMgd2VsbCBhcyByYW5nZXMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93VGVybmFyeT1mYWxzZV0gIEVuYWJsZXMgdGhlIHJlY29nbml0aW9uIG9mIHRlcm5hcnkgcmFuZ2VzIGluIHRoZSBzdHlsZSBvZiBgQTE6QWAgb3IgYEExOjFgLiBUaGVzZSBhcmUgc3VwcG9ydGVkIGJ5IEdvb2dsZSBTaGVldHMgYnV0IG5vdCBFeGNlbC4gU2VlOiBSZWZlcmVuY2VzLm1kLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5uZWdhdGl2ZU51bWJlcnM9dHJ1ZV0gIE1lcmdlcyB1bmFyeSBtaW51c2VzIHdpdGggdGhlaXIgaW1tZWRpYXRlbHkgZm9sbG93aW5nIG51bWJlciB0b2tlbnMgKGAtYCxgMWApID0+IGAtMWAgKGFsdGVybmF0aXZlbHkgdGhlc2Ugd2lsbCBiZSB1bmFyeSBvcGVyYXRpb25zIGluIHRoZSB0cmVlKS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMucGVybWl0QXJyYXlSYW5nZXM9ZmFsc2VdICBSYW5nZXMgYXJlIGFsbG93ZWQgYXMgZWxlbWVudHMgb2YgYXJyYXlzLiBUaGlzIGlzIGEgZmVhdHVyZSBpbiBHb29nbGUgU2hlZXRzIHdoaWxlIEV4Y2VsIGRvZXMgbm90IGFsbG93IGl0LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5wZXJtaXRBcnJheUNhbGxzPWZhbHNlXSAgRnVuY3Rpb24gY2FsbHMgYXJlIGFsbG93ZWQgYXMgZWxlbWVudHMgb2YgYXJyYXlzLiBUaGlzIGlzIGEgZmVhdHVyZSBpbiBHb29nbGUgU2hlZXRzIHdoaWxlIEV4Y2VsIGRvZXMgbm90IGFsbG93IGl0LlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy5yMWMxPWZhbHNlXSAgUmFuZ2VzIGFyZSBleHBlY3RlZCB0byBiZSBpbiB0aGUgUjFDMSBzdHlsZSBmb3JtYXQgcmF0aGVyIHRoYW4gdGhlIG1vcmUgcG9wdWxhciBBMSBzdHlsZS5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMud2l0aExvY2F0aW9uPWZhbHNlXSAgTm9kZXMgd2lsbCBpbmNsdWRlIHNvdXJjZSBwb3NpdGlvbiBvZmZzZXRzIHRvIHRoZSB0b2tlbnM6IGB7IGxvYzogWyBzdGFydCwgZW5kIF0gfWBcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMueGxzeD1mYWxzZV0gIFN3aXRjaGVzIHRvIHRoZSBgWzFdU2hlZXQxIUExYCBvciBgWzFdIW5hbWVgIHByZWZpeCBzeW50YXggZm9ybSBmb3IgZXh0ZXJuYWwgd29ya2Jvb2tzLiBTZWU6IFtQcmVmaXhlcy5tZF0oLi9QcmVmaXhlcy5tZClcbiAqIEByZXR1cm5zIHtBc3RFeHByZXNzaW9ufSBBbiBBU1Qgb2Ygbm9kZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlIChmb3JtdWxhLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZm9ybXVsYSA9PT0gJ3N0cmluZycpIHtcbiAgICB0b2tlbnMgPSB0b2tlbml6ZShmb3JtdWxhLCB7XG4gICAgICB3aXRoTG9jYXRpb246IGZhbHNlLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIG1lcmdlUmVmczogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoZm9ybXVsYSkpIHtcbiAgICB0b2tlbnMgPSBmb3JtdWxhO1xuICB9XG4gIGVsc2Uge1xuICAgIHRocm93IG5ldyBFcnJvcignUGFyc2UgcmVxdWlyZXMgYSBzdHJpbmcgb3IgYXJyYXkgb2YgdG9rZW5zLicpO1xuICB9XG4gIC8vIGFsbG93IHJhbmdlcyBpbiBhcnJheSBcImxpdGVyYWxzXCI/XG4gIHBlcm1pdEFycmF5UmFuZ2VzID0gb3B0aW9ucz8ucGVybWl0QXJyYXlSYW5nZXM7XG4gIC8vIGFsbG93IGNhbGxzIGluIGFycmF5cyBcImxpdGVyYWxzXCI/XG4gIHBlcm1pdEFycmF5Q2FsbHMgPSBvcHRpb25zPy5wZXJtaXRBcnJheUNhbGxzO1xuICAvLyBzZXQgaW5kZXggdG8gc3RhcnRcbiAgdG9rZW5JbmRleCA9IDA7XG4gIC8vIGRpc2NhcmQgcmVkdW5kYW50IHdoaXRlc3BhY2UgYW5kID0gcHJlZml4XG4gIHdoaWxlIChpc1doaXRlc3BhY2UodG9rZW5zW3Rva2VuSW5kZXhdKSB8fCBpc0Z4UHJlZml4KHRva2Vuc1t0b2tlbkluZGV4XSkpIHtcbiAgICB0b2tlbkluZGV4Kys7XG4gIH1cbiAgYWR2YW5jZSgpO1xuICB1bmlvblJlZnModHJ1ZSk7XG4gIGNvbnN0IHJvb3QgPSBleHByZXNzaW9uKDApO1xuICBhZHZhbmNlKEVORCk7XG4gIHJldHVybiByb290O1xufVxuIiwiaW1wb3J0IHtcbiAgRlhfUFJFRklYLFxuICBDT05URVhULFxuICBDT05URVhUX1FVT1RFLFxuICBSRUZfUkFOR0UsXG4gIFJFRl9URVJOQVJZLFxuICBSRUZfTkFNRUQsXG4gIFJFRl9CRUFNLFxuICBSRUZfU1RSVUNULFxuICBPUEVSQVRPUlxufSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5pbXBvcnQgeyBsZXhlcnNSZWZzIH0gZnJvbSAnLi9sZXhlclBhcnRzLmpzJztcbmltcG9ydCB7IGdldFRva2VucyB9IGZyb20gJy4vbGV4ZXIuanMnO1xuXG4vLyBMaWJlcmFsbHkgc3BsaXQgYSBjb250ZXh0IHN0cmluZyB1cCBpbnRvIHBhcnRzLlxuLy8gUGVybWl0cyBhbnkgY29tYmluYXRpb24gb2YgYnJhY2VkIGFuZCB1bmJyYWNlZCBpdGVtcy5cbmV4cG9ydCBmdW5jdGlvbiBzcGxpdFByZWZpeCAoc3RyLCBzdHJpbmdzT25seSA9IGZhbHNlKSB7XG4gIGxldCBpbkJyYWNlID0gZmFsc2U7XG4gIGxldCBjdXJyU3RyID0gJyc7XG4gIGNvbnN0IHBhcnRzID0gW107XG4gIGNvbnN0IGZsdXNoID0gKCkgPT4ge1xuICAgIGlmIChjdXJyU3RyKSB7XG4gICAgICBwYXJ0cy5wdXNoKFxuICAgICAgICBzdHJpbmdzT25seVxuICAgICAgICAgID8gY3VyclN0clxuICAgICAgICAgIDogeyB2YWx1ZTogY3VyclN0ciwgYnJhY2VkOiBpbkJyYWNlIH1cbiAgICAgICk7XG4gICAgfVxuICAgIGN1cnJTdHIgPSAnJztcbiAgfTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBjaGFyID0gc3RyW2ldO1xuICAgIGlmIChjaGFyID09PSAnWycpIHtcbiAgICAgIGZsdXNoKCk7XG4gICAgICBpbkJyYWNlID0gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoY2hhciA9PT0gJ10nKSB7XG4gICAgICBmbHVzaCgpO1xuICAgICAgaW5CcmFjZSA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGN1cnJTdHIgKz0gY2hhcjtcbiAgICB9XG4gIH1cbiAgZmx1c2goKTtcbiAgcmV0dXJuIHBhcnRzO1xufVxuXG5mdW5jdGlvbiBzcGxpdENvbnRleHQgKGNvbnRleHRTdHJpbmcpIHtcbiAgcmV0dXJuIHsgY29udGV4dDogc3BsaXRQcmVmaXgoY29udGV4dFN0cmluZywgdHJ1ZSkgfTtcbn1cblxuZnVuY3Rpb24gc3BsaXRDb250ZXh0WGxzeCAoY29udGV4dFN0cmluZykge1xuICBjb25zdCBjb250ZXh0ID0ge307XG4gIGNvbnN0IGN0eCA9IHNwbGl0UHJlZml4KGNvbnRleHRTdHJpbmcpO1xuICBpZiAoY3R4Lmxlbmd0aCA+IDEpIHtcbiAgICBjb250ZXh0Lndvcmtib29rTmFtZSA9IGN0eFtjdHgubGVuZ3RoIC0gMl0udmFsdWU7XG4gICAgY29udGV4dC5zaGVldE5hbWUgPSBjdHhbY3R4Lmxlbmd0aCAtIDFdLnZhbHVlO1xuICB9XG4gIGVsc2UgaWYgKGN0eC5sZW5ndGggPT09IDEpIHtcbiAgICBjb25zdCBpdGVtID0gY3R4WzBdO1xuICAgIGlmIChpdGVtLmJyYWNlZCkge1xuICAgICAgY29udGV4dC53b3JrYm9va05hbWUgPSBpdGVtLnZhbHVlO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGNvbnRleHQuc2hlZXROYW1lID0gaXRlbS52YWx1ZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59XG5cbmNvbnN0IHVucXVvdGUgPSBkID0+IGQuc2xpY2UoMSwgLTEpLnJlcGxhY2UoLycnL2csIFwiJ1wiKTtcblxuY29uc3QgcFJhbmdlT3AgPSB0ID0+IHQgJiYgKHQudmFsdWUgPT09ICc6JyB8fCB0LnZhbHVlID09PSAnLjonIHx8IHQudmFsdWUgPT09ICc6LicgfHwgdC52YWx1ZSA9PT0gJy46LicpICYmIHsgb3BlcmF0b3I6IHQudmFsdWUgfTtcbmNvbnN0IHBSYW5nZSA9IHQgPT4gdCAmJiB0LnR5cGUgPT09IFJFRl9SQU5HRSAmJiB7IHIwOiB0LnZhbHVlIH07XG5jb25zdCBwUGFydGlhbCA9IHQgPT4gdCAmJiB0LnR5cGUgPT09IFJFRl9URVJOQVJZICYmIHsgcjA6IHQudmFsdWUgfTtcbmNvbnN0IHBSYW5nZTIgPSB0ID0+IHQgJiYgdC50eXBlID09PSBSRUZfUkFOR0UgJiYgeyByMTogdC52YWx1ZSB9O1xuY29uc3QgcEJhbmcgPSB0ID0+IHQgJiYgdC50eXBlID09PSBPUEVSQVRPUiAmJiB0LnZhbHVlID09PSAnIScgJiYge307XG5jb25zdCBwQmVhbSA9IHQgPT4gdCAmJiB0LnR5cGUgPT09IFJFRl9CRUFNICYmIHsgcjA6IHQudmFsdWUgfTtcbmNvbnN0IHBTdHJ1Y3VyZWQgPSB0ID0+IHQgJiYgdC50eXBlID09PSBSRUZfU1RSVUNUICYmIHsgc3RydWN0OiB0LnZhbHVlIH07XG5jb25zdCBwQ29udGV4dCA9ICh0LCBvcHRzKSA9PiB7XG4gIGNvbnN0IHNwbGl0dGVyID0gb3B0cy54bHN4ID8gc3BsaXRDb250ZXh0WGxzeCA6IHNwbGl0Q29udGV4dDtcbiAgaWYgKHQgJiYgdC50eXBlID09PSBDT05URVhUKSB7XG4gICAgcmV0dXJuIHNwbGl0dGVyKHQudmFsdWUpO1xuICB9XG4gIGlmICh0ICYmIHQudHlwZSA9PT0gQ09OVEVYVF9RVU9URSkge1xuICAgIHJldHVybiBzcGxpdHRlcih1bnF1b3RlKHQudmFsdWUpKTtcbiAgfVxufTtcbmNvbnN0IHBOYW1lZCA9IHQgPT4gdCAmJiB0LnR5cGUgPT09IFJFRl9OQU1FRCAmJiB7IG5hbWU6IHQudmFsdWUgfTtcblxuY29uc3QgdmFsaWRSdW5zID0gW1xuICBbIHBQYXJ0aWFsIF0sXG4gIFsgcFJhbmdlLCBwUmFuZ2VPcCwgcFJhbmdlMiBdLFxuICBbIHBSYW5nZSBdLFxuICBbIHBCZWFtIF0sXG4gIFsgcENvbnRleHQsIHBCYW5nLCBwUGFydGlhbCBdLFxuICBbIHBDb250ZXh0LCBwQmFuZywgcFJhbmdlLCBwUmFuZ2VPcCwgcFJhbmdlMiBdLFxuICBbIHBDb250ZXh0LCBwQmFuZywgcFJhbmdlIF0sXG4gIFsgcENvbnRleHQsIHBCYW5nLCBwQmVhbSBdXG5dO1xuXG5jb25zdCB2YWxpZFJ1bnNOYW1lZCA9IHZhbGlkUnVucy5jb25jYXQoW1xuICBbIHBOYW1lZCBdLFxuICBbIHBDb250ZXh0LCBwQmFuZywgcE5hbWVkIF0sXG4gIFsgcFN0cnVjdXJlZCBdLFxuICBbIHBOYW1lZCwgcFN0cnVjdXJlZCBdLFxuICBbIHBDb250ZXh0LCBwQmFuZywgcE5hbWVkLCBwU3RydWN1cmVkIF1cbl0pO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VSZWYgKHJlZiwgb3B0cykge1xuICBjb25zdCBvcHRpb25zID0ge1xuICAgIHdpdGhMb2NhdGlvbjogZmFsc2UsXG4gICAgbWVyZ2VSZWZzOiBmYWxzZSxcbiAgICBhbGxvd1Rlcm5hcnk6IGZhbHNlLFxuICAgIGFsbG93TmFtZWQ6IHRydWUsXG4gICAgcjFjMTogZmFsc2UsXG4gICAgeGxzeDogZmFsc2UsXG4gICAgLi4ub3B0c1xuICB9O1xuICBjb25zdCB0b2tlbnMgPSBnZXRUb2tlbnMocmVmLCBsZXhlcnNSZWZzLCBvcHRpb25zKTtcbiAgY29uc3QgcmVmRGF0YSA9IG9wdGlvbnMueGxzeFxuICAgID8ge1xuICAgICAgd29ya2Jvb2tOYW1lOiAnJyxcbiAgICAgIHNoZWV0TmFtZTogJycsXG4gICAgICByMDogJycsXG4gICAgICByMTogJycsXG4gICAgICBuYW1lOiAnJyxcbiAgICAgIG9wZXJhdG9yOiAnJ1xuICAgIH1cbiAgICA6IHtcbiAgICAgIGNvbnRleHQ6IFtdLFxuICAgICAgcjA6ICcnLFxuICAgICAgcjE6ICcnLFxuICAgICAgbmFtZTogJycsXG4gICAgICBvcGVyYXRvcjogJydcbiAgICB9O1xuICAvLyBkaXNjYXJkIHRoZSBcIj1cIi1wcmVmaXggaWYgaXQgaXMgdGhlcmVcbiAgaWYgKHRva2Vucy5sZW5ndGggJiYgdG9rZW5zWzBdLnR5cGUgPT09IEZYX1BSRUZJWCkge1xuICAgIHRva2Vucy5zaGlmdCgpO1xuICB9XG4gIGNvbnN0IHJ1bnMgPSBvcHRpb25zLmFsbG93TmFtZWQgPyB2YWxpZFJ1bnNOYW1lZCA6IHZhbGlkUnVucztcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBydW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgZGF0YSA9IHsgLi4ucmVmRGF0YSB9O1xuICAgIGlmIChydW5zW2ldLmxlbmd0aCA9PT0gdG9rZW5zLmxlbmd0aCkge1xuICAgICAgY29uc3QgdmFsaWQgPSBydW5zW2ldLmV2ZXJ5KChwYXJzZSwgaikgPT4ge1xuICAgICAgICBjb25zdCBkID0gcGFyc2UodG9rZW5zW2pdLCBvcHRpb25zKTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihkYXRhLCBkKTtcbiAgICAgICAgcmV0dXJuIGQ7XG4gICAgICB9KTtcbiAgICAgIGlmICh2YWxpZCkge1xuICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iLCJjb25zdCBjaGFyRnJvbSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cbi8qKlxuICogQ29udmVydCBhIDAgYmFzZWQgb2Zmc2V0IG51bWJlciB0byBhIGNvbHVtbiBzdHJpbmdcbiAqIHJlcHJlc2VudGF0aW9uIChgMmAgPSBgXCJDXCJgKS5cbiAqXG4gKiBUaGUgbWV0aG9kIGV4cGVjdHMgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCAxNjM4My4gT3RoZXIgaW5wdXQgd2lsbFxuICogcmV0dXJuIGdhcmJhZ2UuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGNvbHVtbkluZGV4IFplcm8gYmFzZWQgY29sdW1uIGluZGV4IG51bWJlclxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbHVtbiBzdHJpbmcgaWRlbnRpZmllclxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9Db2wgKGNvbHVtbkluZGV4KSB7XG4gIHJldHVybiAoXG4gICAgKGNvbHVtbkluZGV4ID49IDcwMlxuICAgICAgPyBjaGFyRnJvbSgoKCgoY29sdW1uSW5kZXggLSA3MDIpIC8gNjc2KSAtIDApICUgMjYpICsgNjUpXG4gICAgICA6ICcnKSArXG4gICAgKGNvbHVtbkluZGV4ID49IDI2XG4gICAgICA/IGNoYXJGcm9tKCgoKChjb2x1bW5JbmRleCAvIDI2KSAtIDEpICUgMjYpICsgNjUpKVxuICAgICAgOiAnJykgK1xuICAgIGNoYXJGcm9tKChjb2x1bW5JbmRleCAlIDI2KSArIDY1KVxuICApO1xufVxuIiwiY29uc3QgcmVCYW5uZWRDaGFycyA9IC9bXjAtOUEtWmEtei5fwqHCpMKnwqjCqlxcdTAwYWTCry1cXHVmZmZmXS87XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlQcmVmaXggKHJlZikge1xuICBsZXQgcHJlID0gJyc7XG4gIGxldCBxdW90ZSA9IDA7XG4gIGxldCBudGggPSAwO1xuICBjb25zdCBjb250ZXh0ID0gcmVmLmNvbnRleHQgfHwgW107XG4gIGZvciAobGV0IGkgPSBjb250ZXh0Lmxlbmd0aDsgaSA+IC0xOyBpLS0pIHtcbiAgICBjb25zdCBzY29wZSA9IGNvbnRleHRbaV07XG4gICAgaWYgKHNjb3BlKSB7XG4gICAgICBjb25zdCBwYXJ0ID0gKG50aCAlIDIpID8gJ1snICsgc2NvcGUgKyAnXScgOiBzY29wZTtcbiAgICAgIHByZSA9IHBhcnQgKyBwcmU7XG4gICAgICBxdW90ZSArPSArcmVCYW5uZWRDaGFycy50ZXN0KHNjb3BlKTtcbiAgICAgIG50aCsrO1xuICAgIH1cbiAgfVxuICBpZiAocXVvdGUpIHtcbiAgICBwcmUgPSBcIidcIiArIHByZS5yZXBsYWNlKC8nL2csIFwiJydcIikgKyBcIidcIjtcbiAgfVxuICByZXR1cm4gcHJlID8gcHJlICsgJyEnIDogcHJlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5UHJlZml4QWx0IChyZWYpIHtcbiAgbGV0IHByZSA9ICcnO1xuICBsZXQgcXVvdGUgPSAwO1xuICBjb25zdCB7IHdvcmtib29rTmFtZSwgc2hlZXROYW1lIH0gPSByZWY7XG4gIGlmICh3b3JrYm9va05hbWUpIHtcbiAgICBwcmUgKz0gJ1snICsgd29ya2Jvb2tOYW1lICsgJ10nO1xuICAgIHF1b3RlICs9ICtyZUJhbm5lZENoYXJzLnRlc3Qod29ya2Jvb2tOYW1lKTtcbiAgfVxuICBpZiAoc2hlZXROYW1lKSB7XG4gICAgcHJlICs9IHNoZWV0TmFtZTtcbiAgICBxdW90ZSArPSArcmVCYW5uZWRDaGFycy50ZXN0KHNoZWV0TmFtZSk7XG4gIH1cbiAgaWYgKHF1b3RlKSB7XG4gICAgcHJlID0gXCInXCIgKyBwcmUucmVwbGFjZSgvJy9nLCBcIicnXCIpICsgXCInXCI7XG4gIH1cbiAgcmV0dXJuIHByZSA/IHByZSArICchJyA6IHByZTtcbn1cbiIsImltcG9ydCB7IE1BWF9ST1dTLCBNQVhfQ09MUyB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHBhcnNlUmVmIH0gZnJvbSAnLi9wYXJzZVJlZi5qcyc7XG5pbXBvcnQgeyB0b0NvbCB9IGZyb20gJy4vdG9Db2wuanMnO1xuaW1wb3J0IHsgZnJvbUNvbCB9IGZyb20gJy4vZnJvbUNvbC5qcyc7XG5pbXBvcnQgeyBzdHJpbmdpZnlQcmVmaXgsIHN0cmluZ2lmeVByZWZpeEFsdCB9IGZyb20gJy4vc3RyaW5naWZ5UHJlZml4LmpzJztcblxuY29uc3QgY2xhbXAgPSAobWluLCB2YWwsIG1heCkgPT4gTWF0aC5taW4oTWF0aC5tYXgodmFsLCBtaW4pLCBtYXgpO1xuY29uc3QgdG9Db2xTdHIgPSAoYywgYSkgPT4gKGEgPyAnJCcgOiAnJykgKyB0b0NvbChjKTtcbmNvbnN0IHRvUm93U3RyID0gKHIsIGEpID0+IChhID8gJyQnIDogJycpICsgdG9Sb3cocik7XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tUm93IChyb3dTdHIpIHtcbiAgcmV0dXJuICtyb3dTdHIgLSAxO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9Sb3cgKHRvcCkge1xuICByZXR1cm4gU3RyaW5nKHRvcCArIDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9SZWxhdGl2ZSAocmFuZ2UpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHJhbmdlLCB7ICRsZWZ0OiBmYWxzZSwgJHJpZ2h0OiBmYWxzZSwgJHRvcDogZmFsc2UsICRib3R0b206IGZhbHNlIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9BYnNvbHV0ZSAocmFuZ2UpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHJhbmdlLCB7ICRsZWZ0OiB0cnVlLCAkcmlnaHQ6IHRydWUsICR0b3A6IHRydWUsICRib3R0b206IHRydWUgfSk7XG59XG5cbi8qKlxuICogQGlnbm9yZVxuICogQHBhcmFtIHsnaGVhZCcgfCAndGFpbCcgfCAnYm90aCcgfCBudWxsIHwgdW5kZWZpbmVkfSB0cmltIERvZXMgdGhlIHJhbmdlIGhhdmUgdHJpbW1pbmc/XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgYXBwcm9wcmlhdGUgcmFuZ2Ugam9pbiBvcGVyYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gcmFuZ2VPcGVyYXRvciAodHJpbSkge1xuICBpZiAodHJpbSA9PT0gJ2JvdGgnKSB7XG4gICAgcmV0dXJuICcuOi4nO1xuICB9XG4gIGVsc2UgaWYgKHRyaW0gPT09ICdoZWFkJykge1xuICAgIHJldHVybiAnLjonO1xuICB9XG4gIGVsc2UgaWYgKHRyaW0gPT09ICd0YWlsJykge1xuICAgIHJldHVybiAnOi4nO1xuICB9XG4gIHJldHVybiAnOic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmltRGlyZWN0aW9uIChoZWFkLCB0YWlsKSB7XG4gIGlmIChoZWFkICYmIHRhaWwpIHtcbiAgICByZXR1cm4gJ2JvdGgnO1xuICB9XG4gIGlmIChoZWFkKSB7XG4gICAgcmV0dXJuICdoZWFkJztcbiAgfVxuICBpZiAodGFpbCkge1xuICAgIHJldHVybiAndGFpbCc7XG4gIH1cbn1cblxuLyoqXG4gKiBTdHJpbmdpZnkgYSByYW5nZSBvYmplY3QgaW50byBBMSBzeW50YXguXG4gKlxuICogQHByaXZhdGVcbiAqIEBpZ25vcmVcbiAqIEBzZWUgcGFyc2VBMVJlZlxuICogQHBhcmFtIHtSYW5nZUExfSByYW5nZSAgQSByYW5nZSBvYmplY3RcbiAqIEByZXR1cm5zIHtzdHJpbmd9ICBBbiBBMS1zdHlsZSBzdHJpbmcgcmVwcmVzZW5hdGlvbiBvZiBhIHJhbmdlXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b0ExIChyYW5nZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJlZmVyLWNvbnN0XG4gIGxldCB7IHRvcCwgbGVmdCwgYm90dG9tLCByaWdodCwgdHJpbSB9ID0gcmFuZ2U7XG4gIGNvbnN0IHsgJGxlZnQsICRyaWdodCwgJHRvcCwgJGJvdHRvbSB9ID0gcmFuZ2U7XG4gIGNvbnN0IG5vTGVmdCA9IGxlZnQgPT0gbnVsbDtcbiAgY29uc3Qgbm9SaWdodCA9IHJpZ2h0ID09IG51bGw7XG4gIGNvbnN0IG5vVG9wID0gdG9wID09IG51bGw7XG4gIGNvbnN0IG5vQm90dG9tID0gYm90dG9tID09IG51bGw7XG4gIC8vIGFsbG93IHNraXBwaW5nIHJpZ2h0IGFuZCBib3R0b20gdG8gZGVmaW5lIGEgY2VsbFxuICB0b3AgPSBjbGFtcCgwLCB0b3AgfCAwLCBNQVhfUk9XUyk7XG4gIGxlZnQgPSBjbGFtcCgwLCBsZWZ0IHwgMCwgTUFYX0NPTFMpO1xuICBpZiAoIW5vTGVmdCAmJiAhbm9Ub3AgJiYgbm9SaWdodCAmJiBub0JvdHRvbSkge1xuICAgIGJvdHRvbSA9IHRvcDtcbiAgICByaWdodCA9IGxlZnQ7XG4gIH1cbiAgZWxzZSB7XG4gICAgYm90dG9tID0gY2xhbXAoMCwgYm90dG9tIHwgMCwgTUFYX1JPV1MpO1xuICAgIHJpZ2h0ID0gY2xhbXAoMCwgcmlnaHQgfCAwLCBNQVhfQ09MUyk7XG4gIH1cbiAgY29uc3Qgb3AgPSByYW5nZU9wZXJhdG9yKHRyaW0pO1xuICAvLyBBOkFcbiAgY29uc3QgYWxsUm93cyA9IHRvcCA9PT0gMCAmJiBib3R0b20gPj0gTUFYX1JPV1M7XG4gIGNvbnN0IGhhdmVBYnNDb2wgPSAoJGxlZnQgJiYgIW5vTGVmdCkgfHwgKCRyaWdodCAmJiAhbm9SaWdodCk7XG4gIGlmICgoYWxsUm93cyAmJiAhbm9MZWZ0ICYmICFub1JpZ2h0ICYmICghaGF2ZUFic0NvbCB8fCBsZWZ0ID09PSByaWdodCkpIHx8IChub1RvcCAmJiBub0JvdHRvbSkpIHtcbiAgICByZXR1cm4gdG9Db2xTdHIobGVmdCwgJGxlZnQpICsgb3AgKyB0b0NvbFN0cihyaWdodCwgJHJpZ2h0KTtcbiAgfVxuICAvLyAxOjFcbiAgY29uc3QgYWxsQ29scyA9IGxlZnQgPT09IDAgJiYgcmlnaHQgPj0gTUFYX0NPTFM7XG4gIGNvbnN0IGhhdmVBYnNSb3cgPSAoJHRvcCAmJiAhbm9Ub3ApIHx8ICgkYm90dG9tICYmICFub0JvdHRvbSk7XG4gIGlmICgoYWxsQ29scyAmJiAhbm9Ub3AgJiYgIW5vQm90dG9tICYmICghaGF2ZUFic1JvdyB8fCB0b3AgPT09IGJvdHRvbSkpIHx8IChub0xlZnQgJiYgbm9SaWdodCkpIHtcbiAgICByZXR1cm4gdG9Sb3dTdHIodG9wLCAkdG9wKSArIG9wICsgdG9Sb3dTdHIoYm90dG9tLCAkYm90dG9tKTtcbiAgfVxuICAvLyBBMToxXG4gIGlmICghbm9MZWZ0ICYmICFub1RvcCAmJiAhbm9SaWdodCAmJiBub0JvdHRvbSkge1xuICAgIHJldHVybiB0b0NvbFN0cihsZWZ0LCAkbGVmdCkgKyB0b1Jvd1N0cih0b3AsICR0b3ApICsgb3AgKyB0b0NvbFN0cihyaWdodCwgJHJpZ2h0KTtcbiAgfVxuICAvLyBBOkExID0+IEExOjFcbiAgaWYgKCFub0xlZnQgJiYgbm9Ub3AgJiYgIW5vUmlnaHQgJiYgIW5vQm90dG9tKSB7XG4gICAgcmV0dXJuIHRvQ29sU3RyKGxlZnQsICRsZWZ0KSArIHRvUm93U3RyKGJvdHRvbSwgJGJvdHRvbSkgKyBvcCArIHRvQ29sU3RyKHJpZ2h0LCAkcmlnaHQpO1xuICB9XG4gIC8vIEExOkFcbiAgaWYgKCFub0xlZnQgJiYgIW5vVG9wICYmIG5vUmlnaHQgJiYgIW5vQm90dG9tKSB7XG4gICAgcmV0dXJuIHRvQ29sU3RyKGxlZnQsICRsZWZ0KSArIHRvUm93U3RyKHRvcCwgJHRvcCkgKyBvcCArIHRvUm93U3RyKGJvdHRvbSwgJGJvdHRvbSk7XG4gIH1cbiAgLy8gQTpBMSA9PiBBMTpBXG4gIGlmIChub0xlZnQgJiYgIW5vVG9wICYmICFub1JpZ2h0ICYmICFub0JvdHRvbSkge1xuICAgIHJldHVybiB0b0NvbFN0cihyaWdodCwgJHJpZ2h0KSArIHRvUm93U3RyKHRvcCwgJHRvcCkgKyBvcCArIHRvUm93U3RyKGJvdHRvbSwgJGJvdHRvbSk7XG4gIH1cbiAgLy8gQTE6QTFcbiAgaWYgKHJpZ2h0ICE9PSBsZWZ0IHx8IGJvdHRvbSAhPT0gdG9wIHx8ICRyaWdodCAhPT0gJGxlZnQgfHwgJGJvdHRvbSAhPT0gJHRvcCkge1xuICAgIHJldHVybiB0b0NvbFN0cihsZWZ0LCAkbGVmdCkgKyB0b1Jvd1N0cih0b3AsICR0b3ApICsgb3AgK1xuICAgICAgICAgICB0b0NvbFN0cihyaWdodCwgJHJpZ2h0KSArIHRvUm93U3RyKGJvdHRvbSwgJGJvdHRvbSk7XG4gIH1cbiAgLy8gQTFcbiAgcmV0dXJuIHRvQ29sU3RyKGxlZnQsICRsZWZ0KSArIHRvUm93U3RyKHRvcCwgJHRvcCk7XG59XG5cbmZ1bmN0aW9uIHNwbGl0QTEgKHN0cikge1xuICBjb25zdCBtID0gL14oPz0uKShcXCQoPz1cXEQpKT8oW0EtWmEtel17MCwzfSk/KFxcJCk/KFsxLTldWzAtOV17MCw2fSk/JC8uZXhlYyhzdHIpO1xuICBpZiAoIW0gfHwgKCFtWzJdICYmICFtWzRdKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBbXG4gICAgbVs0XSA/IGZyb21Sb3cobVs0XSkgOiBudWxsLCAvLyByb3cgaW5kZXggb3IgbnVsbFxuICAgIG1bMl0gPyBmcm9tQ29sKG1bMl0pIDogbnVsbCwgLy8gY29sIGluZGV4IG9yIG51bGxcbiAgICAhIW1bM10sIC8vIGlzIHJvdyBhYnNvbHV0ZT9cbiAgICAhIW1bMV0gIC8vIGlzIGNvbCBhYnNvbHV0ZT9cbiAgXTtcbn1cblxuLyoqXG4gKiBQYXJzZSBhIHNpbXBsZSBzdHJpbmcgcmVmZXJlbmNlIHRvIGFuIEExIHJhbmdlIGludG8gYSByYW5nZSBvYmplY3QuXG4gKiBXaWxsIGFjY2VwdCBgQTFgLCBgQTJgLCBgQTpBYCwgb3IgYDE6MWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBpZ25vcmVcbiAqIEBzZWUgcGFyc2VBMVJlZlxuICogQHBhcmFtIHtzdHJpbmd9IHJhbmdlU3RyaW5nICBBIHJhbmdlIHN0cmluZ1xuICogQHJldHVybnMgeyhSYW5nZUExfG51bGwpfSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgdmFsaWQgcmFuZ2Ugb3IgbnVsbCBpZiBpdCBpcyBpbnZhbGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbUExIChyYW5nZVN0cmluZykge1xuICBsZXQgdG9wID0gbnVsbDtcbiAgbGV0IGxlZnQgPSBudWxsO1xuICBsZXQgYm90dG9tID0gbnVsbDtcbiAgbGV0IHJpZ2h0ID0gbnVsbDtcbiAgbGV0ICR0b3AgPSBmYWxzZTtcbiAgbGV0ICRsZWZ0ID0gZmFsc2U7XG4gIGxldCAkYm90dG9tID0gZmFsc2U7XG4gIGxldCAkcmlnaHQgPSBmYWxzZTtcbiAgY29uc3QgWyBwYXJ0MSwgb3AxLCBwYXJ0Miwgb3AyLCBwYXJ0MyBdID0gcmFuZ2VTdHJpbmcuc3BsaXQoLyhcXC4/OlxcLj8pLyk7XG4gIGlmIChvcDIgfHwgcGFydDMpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCB0cmltID0gdHJpbURpcmVjdGlvbighIW9wMSAmJiBvcDFbMF0gPT09ICcuJywgISFvcDEgJiYgb3AxW29wMS5sZW5ndGggLSAxXSA9PT0gJy4nKTtcbiAgY29uc3QgcDEgPSBzcGxpdEExKHBhcnQxKTtcbiAgY29uc3QgcDIgPSBwYXJ0MiA/IHNwbGl0QTEocGFydDIpIDogbnVsbDtcbiAgaWYgKCFwMSB8fCAocGFydDIgJiYgIXAyKSkge1xuICAgIC8vIGludmFsaWQgc2VjdGlvblxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIHBhcnQgMSBiaXRzXG4gIGlmIChwMVswXSAhPSBudWxsICYmIHAxWzFdICE9IG51bGwpIHtcbiAgICBbIHRvcCwgbGVmdCwgJHRvcCwgJGxlZnQgXSA9IHAxO1xuICB9XG4gIGVsc2UgaWYgKHAxWzBdID09IG51bGwgJiYgcDFbMV0gIT0gbnVsbCkge1xuICAgIFsgLCBsZWZ0LCAsICRsZWZ0IF0gPSBwMTtcbiAgfVxuICBlbHNlIGlmIChwMVswXSAhPSBudWxsICYmIHAxWzFdID09IG51bGwpIHtcbiAgICBbIHRvcCwgLCAkdG9wIF0gPSBwMTtcbiAgfVxuICAvLyBwYXJ0IDIgYml0c1xuICBpZiAoIXBhcnQyKSB7XG4gICAgLy8gcGFydCAyIG11c3QgZXhpc3QgaWYgZWl0aGVyIHRvcCBvciBsZWZ0IGlzIG51bGw6XG4gICAgLy8gdGhpcyBkaXNhbGxvd3MgYSBzaW5nbGUgbnVtIG9yIGNvbCBwYXR0ZXJuc1xuICAgIGlmICh0b3AgPT0gbnVsbCB8fCBsZWZ0ID09IG51bGwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBib3R0b20gPSB0b3A7XG4gICAgcmlnaHQgPSBsZWZ0O1xuICAgICRib3R0b20gPSAkdG9wO1xuICAgICRyaWdodCA9ICRsZWZ0O1xuICB9XG4gIGVsc2UgaWYgKHAyWzBdICE9IG51bGwgJiYgcDJbMV0gIT0gbnVsbCkge1xuICAgIFsgYm90dG9tLCByaWdodCwgJGJvdHRvbSwgJHJpZ2h0IF0gPSBwMjtcbiAgfVxuICBlbHNlIGlmIChwMlswXSA9PSBudWxsICYmIHAyWzFdICE9IG51bGwpIHtcbiAgICBbICwgcmlnaHQsICwgJHJpZ2h0IF0gPSBwMjtcbiAgfVxuICBlbHNlIGlmIChwMlswXSAhPSBudWxsICYmIHAyWzFdID09IG51bGwpIHtcbiAgICBbIGJvdHRvbSwgLCAkYm90dG9tIF0gPSBwMjtcbiAgfVxuICAvLyBmbGlwIGxlZnQvcmlnaHQgYW5kIHRvcC9ib3R0b20gYXMgbmVlZGVkXG4gIC8vIGZvciBwYXJ0aWFsIHJhbmdlcyB3ZSBwZXJmZXIgdGhlIGNvb3JkIG9uIHRoZSBsZWZ0LXNpZGUgb2YgdGhlIDpcbiAgaWYgKHJpZ2h0ICE9IG51bGwgJiYgKGxlZnQgPT0gbnVsbCB8fCAobGVmdCAhPSBudWxsICYmIHJpZ2h0IDwgbGVmdCkpKSB7XG4gICAgWyBsZWZ0LCByaWdodCwgJGxlZnQsICRyaWdodCBdID0gWyByaWdodCwgbGVmdCwgJHJpZ2h0LCAkbGVmdCBdO1xuICB9XG4gIGlmIChib3R0b20gIT0gbnVsbCAmJiAodG9wID09IG51bGwgfHwgKHRvcCAhPSBudWxsICYmIGJvdHRvbSA8IHRvcCkpKSB7XG4gICAgWyB0b3AsIGJvdHRvbSwgJHRvcCwgJGJvdHRvbSBdID0gWyBib3R0b20sIHRvcCwgJGJvdHRvbSwgJHRvcCBdO1xuICB9XG4gIGNvbnN0IHIgPSB7IHRvcCwgbGVmdCwgYm90dG9tLCByaWdodCwgJHRvcCwgJGxlZnQsICRib3R0b20sICRyaWdodCB9O1xuICBpZiAodHJpbSkgeyByLnRyaW0gPSB0cmltOyB9XG4gIHJldHVybiByO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgc3RyaW5nIHJlZmVyZW5jZSBpbnRvIGFuIG9iamVjdCByZXByZXNlbnRpbmcgaXQuXG4gKlxuICogYGBganNcbiAqIHBhcnNlQTFSZWYoJ1NoZWV0MSFBJDE6JEIyJyk7XG4gKiAvLyA9PiB7XG4gKiAvLyAgIGNvbnRleHQ6IFsgJ1NoZWV0MScgXSxcbiAqIC8vICAgcmFuZ2U6IHtcbiAqIC8vICAgICB0b3A6IDAsXG4gKiAvLyAgICAgbGVmdDogMCxcbiAqIC8vICAgICBib3R0b206IDEsXG4gKiAvLyAgICAgcmlnaHQ6IDFcbiAqIC8vICAgICAkdG9wOiB0cnVlLFxuICogLy8gICAgICRsZWZ0OiBmYWxzZSxcbiAqIC8vICAgICAkYm90dG9tOiBmYWxzZSxcbiAqIC8vICAgICAkcmlnaHQ6IHRydWVcbiAqIC8vICAgfVxuICogLy8gfVxuICogYGBgXG4gKlxuICogRm9yIEE6QSBvciBBMTpBIHN0eWxlIHJhbmdlcywgYG51bGxgIHdpbGwgYmUgdXNlZCBmb3IgYW55IGRpbWVuc2lvbnMgdGhhdCB0aGVcbiAqIHN5bnRheCBkb2VzIG5vdCBzcGVjaWZ5OlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWZTdHJpbmcgIEFuIEExLXN0eWxlIHJlZmVyZW5jZSBzdHJpbmdcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gIE9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYWxsb3dOYW1lZD10cnVlXSAgRW5hYmxlIHBhcnNpbmcgbmFtZXMgYXMgd2VsbCBhcyByYW5nZXMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93VGVybmFyeT1mYWxzZV0gIEVuYWJsZXMgdGhlIHJlY29nbml0aW9uIG9mIHRlcm5hcnkgcmFuZ2VzIGluIHRoZSBzdHlsZSBvZiBgQTE6QWAgb3IgYEExOjFgLiBUaGVzZSBhcmUgc3VwcG9ydGVkIGJ5IEdvb2dsZSBTaGVldHMgYnV0IG5vdCBFeGNlbC4gU2VlOiBSZWZlcmVuY2VzLm1kLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy54bHN4PWZhbHNlXSAgU3dpdGNoZXMgdG8gdGhlIGBbMV1TaGVldDEhQTFgIG9yIGBbMV0hbmFtZWAgcHJlZml4IHN5bnRheCBmb3JtIGZvciBleHRlcm5hbCB3b3JrYm9va3MuIFNlZTogW1ByZWZpeGVzLm1kXSguL1ByZWZpeGVzLm1kKVxuICogQHJldHVybnMgeyhSZWZlcmVuY2VBMXxudWxsKX0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIHZhbGlkIHJlZmVyZW5jZSBvciBudWxsIGlmIGl0IGlzIGludmFsaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUExUmVmIChyZWZTdHJpbmcsIHsgYWxsb3dOYW1lZCA9IHRydWUsIGFsbG93VGVybmFyeSA9IGZhbHNlLCB4bHN4ID0gZmFsc2UgfSA9IHt9KSB7XG4gIGNvbnN0IGQgPSBwYXJzZVJlZihyZWZTdHJpbmcsIHsgYWxsb3dOYW1lZCwgYWxsb3dUZXJuYXJ5LCB4bHN4LCByMWMxOiBmYWxzZSB9KTtcbiAgaWYgKGQgJiYgKGQucjAgfHwgZC5uYW1lKSkge1xuICAgIGxldCByYW5nZSA9IG51bGw7XG4gICAgaWYgKGQucjApIHtcbiAgICAgIHJhbmdlID0gZnJvbUExKGQucjEgPyBkLnIwICsgZC5vcGVyYXRvciArIGQucjEgOiBkLnIwKTtcbiAgICB9XG4gICAgaWYgKHJhbmdlKSB7XG4gICAgICByZXR1cm4geGxzeFxuICAgICAgICA/IHsgd29ya2Jvb2tOYW1lOiBkLndvcmtib29rTmFtZSwgc2hlZXROYW1lOiBkLnNoZWV0TmFtZSwgcmFuZ2UgfVxuICAgICAgICA6IHsgY29udGV4dDogZC5jb250ZXh0LCByYW5nZSB9O1xuICAgIH1cbiAgICBpZiAoZC5uYW1lKSB7XG4gICAgICByZXR1cm4geGxzeFxuICAgICAgICA/IHsgd29ya2Jvb2tOYW1lOiBkLndvcmtib29rTmFtZSwgc2hlZXROYW1lOiBkLnNoZWV0TmFtZSwgbmFtZTogZC5uYW1lIH1cbiAgICAgICAgOiB7IGNvbnRleHQ6IGQuY29udGV4dCwgbmFtZTogZC5uYW1lIH07XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEdldCBhbiBBMS1zdHlsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSByZWZlcmVuY2Ugb2JqZWN0LlxuICpcbiAqIGBgYGpzXG4gKiBzdHJpbmdpZnlBMVJlZih7XG4gKiAgIGNvbnRleHQ6IFsgJ1NoZWV0MScgXSxcbiAqICAgcmFuZ2U6IHtcbiAqICAgICB0b3A6IDAsXG4gKiAgICAgbGVmdDogMCxcbiAqICAgICBib3R0b206IDEsXG4gKiAgICAgcmlnaHQ6IDEsXG4gKiAgICAgJHRvcDogdHJ1ZSxcbiAqICAgICAkbGVmdDogZmFsc2UsXG4gKiAgICAgJGJvdHRvbTogZmFsc2UsXG4gKiAgICAgJHJpZ2h0OiB0cnVlXG4gKiAgIH1cbiAqIH0pO1xuICogLy8gPT4gJ1NoZWV0MSFBJDE6JEIyJ1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtSZWZlcmVuY2VBMX0gcmVmT2JqZWN0IEEgcmVmZXJlbmNlIG9iamVjdFxuICogQHBhcmFtIHtvYmplY3R9IFtvcHRpb25zPXt9XSAgT3B0aW9uc1xuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy54bHN4PWZhbHNlXSAgU3dpdGNoZXMgdG8gdGhlIGBbMV1TaGVldDEhQTFgIG9yIGBbMV0hbmFtZWAgcHJlZml4IHN5bnRheCBmb3JtIGZvciBleHRlcm5hbCB3b3JrYm9va3MuIFNlZTogW1ByZWZpeGVzLm1kXSguL1ByZWZpeGVzLm1kKVxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHJlZmVyZW5jZSBpbiBBMS1zdHlsZSBzdHJpbmcgZm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlBMVJlZiAocmVmT2JqZWN0LCB7IHhsc3ggPSBmYWxzZSB9ID0ge30pIHtcbiAgY29uc3QgcHJlZml4ID0geGxzeFxuICAgID8gc3RyaW5naWZ5UHJlZml4QWx0KHJlZk9iamVjdClcbiAgICA6IHN0cmluZ2lmeVByZWZpeChyZWZPYmplY3QpO1xuICByZXR1cm4gcHJlZml4ICsgKFxuICAgIHJlZk9iamVjdC5uYW1lID8gcmVmT2JqZWN0Lm5hbWUgOiB0b0ExKHJlZk9iamVjdC5yYW5nZSlcbiAgKTtcbn1cblxuLyoqXG4gKiBGaWxsIHRoZSBhbnkgbWlzc2luZyBib3VuZHMgaW4gcmFuZ2Ugb2JqZWN0cy4gVG9wIHdpbGwgYmUgc2V0IHRvIDAsIGJvdHRvbSB0b1xuICogMTA0ODU3NSwgbGVmdCB0byAwLCBhbmQgcmlnaHQgdG8gMTYzODMsIGlmIHRoZXkgYXJlIGBudWxsYCBvciBgdW5kZWZpbmVkYC5cbiAqXG4gKiBgYGBqc1xuICogYWRkQTFSYW5nZUJvdW5kcyh7XG4gKiAgIGNvbnRleHQ6IFsgJ1NoZWV0MScgXSxcbiAqICAgcmFuZ2U6IHtcbiAqICAgICB0b3A6IDAsXG4gKiAgICAgbGVmdDogMCxcbiAqICAgICBib3R0b206IDEsXG4gKiAgICAgJHRvcDogdHJ1ZSxcbiAqICAgICAkbGVmdDogZmFsc2UsXG4gKiAgICAgJGJvdHRvbTogZmFsc2UsXG4gKiAgIH1cbiAqIH0pO1xuICogLy8gPT4ge1xuICogLy8gICBjb250ZXh0OiBbICdTaGVldDEnIF0sXG4gKiAvLyAgIHJhbmdlOiB7XG4gKiAvLyAgICAgdG9wOiAwLFxuICogLy8gICAgIGxlZnQ6IDAsXG4gKiAvLyAgICAgYm90dG9tOiAxLFxuICogLy8gICAgIHJpZ2h0OiAxNjM4MyxcbiAqIC8vICAgICAkdG9wOiB0cnVlLFxuICogLy8gICAgICRsZWZ0OiBmYWxzZSxcbiAqIC8vICAgICAkYm90dG9tOiBmYWxzZSxcbiAqIC8vICAgICAkcmlnaHQ6IGZhbHNlXG4gKiAvLyAgIH1cbiAqIC8vIH1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7UmFuZ2VBMX0gcmFuZ2UgVGhlIHJhbmdlIHBhcnQgb2YgYSByZWZlcmVuY2Ugb2JqZWN0LlxuICogQHJldHVybnMge1JhbmdlQTF9IHNhbWUgcmFuZ2Ugd2l0aCBtaXNzaW5nIGJvdW5kcyBmaWxsZWQgaW4uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRBMVJhbmdlQm91bmRzIChyYW5nZSkge1xuICBpZiAocmFuZ2UudG9wID09IG51bGwpIHtcbiAgICByYW5nZS50b3AgPSAwO1xuICAgIHJhbmdlLiR0b3AgPSBmYWxzZTtcbiAgfVxuICBpZiAocmFuZ2UuYm90dG9tID09IG51bGwpIHtcbiAgICByYW5nZS5ib3R0b20gPSBNQVhfUk9XUztcbiAgICByYW5nZS4kYm90dG9tID0gZmFsc2U7XG4gIH1cbiAgaWYgKHJhbmdlLmxlZnQgPT0gbnVsbCkge1xuICAgIHJhbmdlLmxlZnQgPSAwO1xuICAgIHJhbmdlLiRsZWZ0ID0gZmFsc2U7XG4gIH1cbiAgaWYgKHJhbmdlLnJpZ2h0ID09IG51bGwpIHtcbiAgICByYW5nZS5yaWdodCA9IE1BWF9DT0xTO1xuICAgIHJhbmdlLiRyaWdodCA9IGZhbHNlO1xuICB9XG4gIHJldHVybiByYW5nZTtcbn1cbiIsImltcG9ydCB7IHBhcnNlUmVmIH0gZnJvbSAnLi9wYXJzZVJlZi5qcyc7XG5pbXBvcnQgeyBwYXJzZVNSYW5nZSB9IGZyb20gJy4vcGFyc2VTUmFuZ2UuanMnO1xuXG4vKipcbiAqIFBhcnNlIGEgc3RydWN0dXJlZCByZWZlcmVuY2Ugc3RyaW5nIGludG8gYW4gb2JqZWN0IHJlcHJlc2VudGluZyBpdC5cbiAqXG4gKiBgYGBqc1xuICogcGFyc2VTdHJ1Y3RSZWYoJ3dvcmtib29rLnhsc3ghdGFibGVOYW1lW1sjRGF0YV0sW0NvbHVtbjFdOltDb2x1bW4yXV0nKTtcbiAqIC8vID0+IHtcbiAqIC8vICAgY29udGV4dDogWyAnd29ya2Jvb2sueGxzeCcgXSxcbiAqIC8vICAgc2VjdGlvbnM6IFsgJ2RhdGEnIF0sXG4gKiAvLyAgIGNvbHVtbnM6IFsgJ215IGNvbHVtbicsICdAZm9vJyBdLFxuICogLy8gICB0YWJsZTogJ3RhYmxlTmFtZScsXG4gKiAvLyB9XG4gKiBgYGBcbiAqXG4gKiBGb3IgQTpBIG9yIEExOkEgc3R5bGUgcmFuZ2VzLCBgbnVsbGAgd2lsbCBiZSB1c2VkIGZvciBhbnkgZGltZW5zaW9ucyB0aGF0IHRoZVxuICogc3ludGF4IGRvZXMgbm90IHNwZWNpZnk6XG4gKlxuICogQHR1dG9yaWFsIFJlZmVyZW5jZXMubWRcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWYgIEEgc3RydWN0dXJlZCByZWZlcmVuY2Ugc3RyaW5nXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dICBPcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnhsc3g9ZmFsc2VdICBTd2l0Y2hlcyB0byB0aGUgYFsxXVNoZWV0MSFBMWAgb3IgYFsxXSFuYW1lYCBwcmVmaXggc3ludGF4IGZvcm0gZm9yIGV4dGVybmFsIHdvcmtib29rcy4gU2VlOiBbUHJlZml4ZXMubWRdKC4vUHJlZml4ZXMubWQpXG4gKiBAcmV0dXJucyB7KFJlZmVyZW5jZVN0cnVjdHxudWxsKX0gQW4gb2JqZWN0IHJlcHJlc2VudGluZyBhIHZhbGlkIHJlZmVyZW5jZSBvciBudWxsIGlmIGl0IGlzIGludmFsaWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVN0cnVjdFJlZiAocmVmLCBvcHRpb25zID0geyB4bHN4OiBmYWxzZSB9KSB7XG4gIGNvbnN0IHIgPSBwYXJzZVJlZihyZWYsIG9wdGlvbnMpO1xuICBpZiAociAmJiByLnN0cnVjdCkge1xuICAgIGNvbnN0IHN0cnVjdERhdGEgPSBwYXJzZVNSYW5nZShyLnN0cnVjdCk7XG4gICAgaWYgKHN0cnVjdERhdGEgJiYgc3RydWN0RGF0YS5sZW5ndGggPT09IHIuc3RydWN0Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuIG9wdGlvbnMueGxzeFxuICAgICAgICA/IHtcbiAgICAgICAgICB3b3JrYm9va05hbWU6IHIud29ya2Jvb2tOYW1lLFxuICAgICAgICAgIHNoZWV0TmFtZTogci5zaGVldE5hbWUsXG4gICAgICAgICAgdGFibGU6IHIubmFtZSxcbiAgICAgICAgICBjb2x1bW5zOiBzdHJ1Y3REYXRhLmNvbHVtbnMsXG4gICAgICAgICAgc2VjdGlvbnM6IHN0cnVjdERhdGEuc2VjdGlvbnNcbiAgICAgICAgfVxuICAgICAgICA6IHtcbiAgICAgICAgICBjb250ZXh0OiByLmNvbnRleHQsXG4gICAgICAgICAgdGFibGU6IHIubmFtZSxcbiAgICAgICAgICBjb2x1bW5zOiBzdHJ1Y3REYXRhLmNvbHVtbnMsXG4gICAgICAgICAgc2VjdGlvbnM6IHN0cnVjdERhdGEuc2VjdGlvbnNcbiAgICAgICAgfTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG4iLCJpbXBvcnQgeyBSRUZfUkFOR0UsIFJFRl9CRUFNLCBSRUZfVEVSTkFSWSwgVU5LTk9XTiwgUkVGX1NUUlVDVCB9IGZyb20gJy4vY29uc3RhbnRzLmpzJztcbmltcG9ydCB7IHBhcnNlQTFSZWYgfSBmcm9tICcuL2ExLmpzJztcbmltcG9ydCB7IHBhcnNlU3RydWN0UmVmIH0gZnJvbSAnLi9wYXJzZVN0cnVjdFJlZi5qcyc7XG5cbmZ1bmN0aW9uIGdldElEZXIgKCkge1xuICBsZXQgaSA9IDE7XG4gIHJldHVybiAoKSA9PiAnZnhnJyArIChpKyspO1xufVxuXG5mdW5jdGlvbiBzYW1lVmFsdWUgKGEsIGIpIHtcbiAgaWYgKGEgPT0gbnVsbCAmJiBiID09IG51bGwpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gYSA9PT0gYjtcbn1cblxuZnVuY3Rpb24gc2FtZUFycmF5IChhLCBiKSB7XG4gIGlmICgoQXJyYXkuaXNBcnJheShhKSAhPT0gQXJyYXkuaXNBcnJheShiKSkgfHwgYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIGlmICghc2FtZVZhbHVlKGFbaV0sIGJbaV0pKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBzYW1lU3RyIChhLCBiKSB7XG4gIGlmICghYSAmJiAhYikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBTdHJpbmcoYSkudG9Mb3dlckNhc2UoKSA9PT0gU3RyaW5nKGIpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIGlzRXF1aXZhbGVudCAocmVmQSwgcmVmQikge1xuICAvLyBpZiBuYW1lZCwgbmFtZSBtdXN0IG1hdGNoXG4gIGlmICgocmVmQS5uYW1lIHx8IHJlZkIubmFtZSkgJiYgcmVmQS5uYW1lICE9PSByZWZCLm5hbWUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gaWYgc3RydWN0dXJlZFxuICBpZiAoKHJlZkEuY29sdW1ucyB8fCByZWZCLmNvbHVtbnMpKSB7XG4gICAgaWYgKHJlZkEudGFibGUgIT09IHJlZkIudGFibGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKCFzYW1lQXJyYXkocmVmQS5jb2x1bW5zLCByZWZCLmNvbHVtbnMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICghc2FtZUFycmF5KHJlZkEuc2VjdGlvbnMsIHJlZkIuc2VjdGlvbnMpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIC8vIGlmIHJhbmdlZCwgcmFuZ2UgbXVzdCBoYXZlIHRoZSBzYW1lIGRpbWVuc2lvbnMgKHdlIGRvbid0IGNhcmUgYWJvdXQgJClcbiAgaWYgKHJlZkEucmFuZ2UgfHwgcmVmQi5yYW5nZSkge1xuICAgIGlmIChcbiAgICAgICFzYW1lVmFsdWUocmVmQS5yYW5nZS50b3AsIHJlZkIucmFuZ2UudG9wKSB8fFxuICAgICAgIXNhbWVWYWx1ZShyZWZBLnJhbmdlLmJvdHRvbSwgcmVmQi5yYW5nZS5ib3R0b20pIHx8XG4gICAgICAhc2FtZVZhbHVlKHJlZkEucmFuZ2UubGVmdCwgcmVmQi5yYW5nZS5sZWZ0KSB8fFxuICAgICAgIXNhbWVWYWx1ZShyZWZBLnJhbmdlLnJpZ2h0LCByZWZCLnJhbmdlLnJpZ2h0KVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICAvLyBtdXN0IGhhdmUgc2FtZSBjb250ZXh0XG4gIGlmIChcbiAgICAhc2FtZVN0cihyZWZBLndvcmtib29rTmFtZSwgcmVmQi53b3JrYm9va05hbWUpIHx8XG4gICAgIXNhbWVTdHIocmVmQS5zaGVldE5hbWUsIHJlZkIuc2hlZXROYW1lKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIGFkZENvbnRleHQgKHJlZiwgc2hlZXROYW1lLCB3b3JrYm9va05hbWUpIHtcbiAgaWYgKCFyZWYuc2hlZXROYW1lKSB7XG4gICAgcmVmLnNoZWV0TmFtZSA9IHNoZWV0TmFtZTtcbiAgfVxuICBpZiAoIXJlZi53b3JrYm9va05hbWUpIHtcbiAgICByZWYud29ya2Jvb2tOYW1lID0gd29ya2Jvb2tOYW1lO1xuICB9XG4gIHJldHVybiByZWY7XG59XG5cbi8qKlxuICogUnVucyB0aHJvdWdoIGEgbGlzdCBvZiB0b2tlbnMgYW5kIGFkZHMgZXh0cmEgYXR0cmlidXRlcyBzdWNoIGFzIG1hdGNoaW5nXG4gKiBwYXJlbnMgYW5kIHJhbmdlcy5cbiAqXG4gKiBUaGUgYGNvbnRleHRgIHBhcmFtZXRlciBkZWZpbmVzIGRlZmF1bHQgcmVmZXJlbmNlIGF0dHJpYnV0ZXM6XG4gKiBgeyB3b3JrYm9va05hbWU6ICdyZXBvcnQueGxzeCcsIHNoZWV0TmFtZTogJ1NoZWV0MScgfWAuXG4gKiBJZiBzdXBwbGllZCwgdGhlc2UgYXJlIHVzZWQgdG8gbWF0Y2ggYEExYCB0byBgU2hlZXQxIUExYC5cbiAqXG4gKiBBbGwgdG9rZW5zIHdpbGwgYmUgdGFnZ2VkIHdpdGggYSBgLmRlcHRoYCBudW1iZXIgdmFsdWUgdG8gaW5kaWNhdGluZyB0aGVcbiAqIGxldmVsIG9mIG5lc3RpbmcgaW4gcGFyZW50aGVzZXMgYXMgd2VsbCBhcyBhbiBgLmluZGV4YCBudW1iZXIgaW5kaWNhdGluZ1xuICogdGhlaXIgemVybyBiYXNlZCBwb3NpdGlvbiBpbiB0aGUgbGlzdC5cbiAqXG4gKiBUaGUgcmV0dXJuZWQgb3V0cHV0IHdpbGwgYmUgdGhlIHNhbWUgYXJyYXkgb2YgdG9rZW5zIGJ1dCB0aGUgZm9sbG93aW5nXG4gKiBwcm9wZXJ0aWVzIHdpbGwgYWRkZWQgdG8gdG9rZW5zIChhcyBhcHBsaWNhYmxlKTpcbiAqXG4gKiAjIyMjIFBhcmVudGhlc2VzICggKVxuICpcbiAqIE1hdGNoaW5nIHBhcmVucyB3aWxsIGJlIHRhZ2dlZCB3aXRoIGAuZ3JvdXBJZGAgc3RyaW5nIGlkZW50aWZpZXIgYXMgd2VsbCBhc1xuICogYSBgLmRlcHRoYCBudW1iZXIgdmFsdWUgKGluZGljYXRpbmcgdGhlIGxldmVsIG9mIG5lc3RpbmcpLlxuICpcbiAqIENsb3NpbmcgcGFyZW5zIHdpdGhvdXQgYSBjb3VudGVycGFydCB3aWxsIGJlIHRhZ2dlZCB3aXRoIGAuZXJyb3JgXG4gKiAoYm9vbGVhbiB0cnVlKS5cbiAqXG4gKiAjIyMjIEN1cmx5IGJyYWNrZXRzIHsgfVxuICpcbiAqIE1hdGNoaW5nIGN1cmx5IGJyYWNrZXRzIHdpbGwgYmUgdGFnZ2VkIHdpdGggYC5ncm91cElkYCBzdHJpbmcgaWRlbnRpZmllci5cbiAqIFRoZXNlIG1heSBub3QgYmUgbmVzdGVkIGluIEV4Y2VsLlxuICpcbiAqIENsb3NpbmcgY3VybHkgYnJhY2tldHMgd2l0aG91dCBhIGNvdW50ZXJwYXJ0IHdpbGwgYmUgdGFnZ2VkIHdpdGggYC5lcnJvcmBcbiAqIChib29sZWFuIGB0cnVlYCkuXG4gKlxuICogIyMjIyBSYW5nZXMgKGBSRUZfUkFOR0VgIG9yIGBSRUZfQkVBTWAgdHlwZSB0b2tlbnMpXG4gKlxuICogQWxsIHJhbmdlcyB3aWxsIGJlIHRhZ2dlZCB3aXRoIGAuZ3JvdXBJZGAgc3RyaW5nIGlkZW50aWZpZXIgcmVnYXJkbGVzcyBvZlxuICogdGhlIG51bWJlciBvZiB0aW1lcyB0aGV5IG9jY3VyLlxuICpcbiAqICMjIyMgVG9rZW5zIG9mIHR5cGUgYFVOS05PV05gXG4gKlxuICogQWxsIHdpbGwgYmUgdGFnZ2VkIHdpdGggYC5lcnJvcmAgKGJvb2xlYW4gYHRydWVgKS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PFRva2VuPn0gdG9rZW5saXN0IEFuIGFycmF5IG9mIHRva2VucyAoZnJvbSBgdG9rZW5pemUoKWApXG4gKiBAcGFyYW0ge29iamVjdH0gW2NvbnRleHQ9e31dIEEgY29udGVzdCB1c2VkIHRvIG1hdGNoIGBBMWAgdG8gYFNoZWV0MSFBMWAuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvbnRleHQuc2hlZXROYW1lPScnXSBBbiBpbXBsaWVkIHNoZWV0IG5hbWUgKCdTaGVldDEnKVxuICogQHBhcmFtIHtzdHJpbmd9IFtjb250ZXh0Lndvcmtib29rTmFtZT0nJ10gQW4gaW1wbGllZCB3b3JrYm9vayBuYW1lICgncmVwb3J0Lnhsc3gnKVxuICogQHJldHVybnMge0FycmF5PFRva2VuRW5oYW5jZWQ+fSBUaGUgaW5wdXQgYXJyYXkgd2l0aCB0aGUgZW5jaGFuY2VkIHRva2Vuc1xuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkVG9rZW5NZXRhICh0b2tlbmxpc3QsIHsgc2hlZXROYW1lID0gJycsIHdvcmtib29rTmFtZSA9ICcnIH0gPSB7fSkge1xuICBjb25zdCBwYXJlblN0YWNrID0gW107XG4gIGxldCBhcnJheVN0YXJ0ID0gbnVsbDtcbiAgY29uc3QgdWlkID0gZ2V0SURlcigpO1xuICBjb25zdCBrbm93blJlZnMgPSBbXTtcblxuICBjb25zdCBnZXRDdXJyRGVwdGggPSAoKSA9PiBwYXJlblN0YWNrLmxlbmd0aCArIChhcnJheVN0YXJ0ID8gMSA6IDApO1xuXG4gIHRva2VubGlzdC5mb3JFYWNoKCh0b2tlbiwgaSkgPT4ge1xuICAgIHRva2VuLmluZGV4ID0gaTtcbiAgICB0b2tlbi5kZXB0aCA9IGdldEN1cnJEZXB0aCgpO1xuICAgIGlmICh0b2tlbi52YWx1ZSA9PT0gJygnKSB7XG4gICAgICBwYXJlblN0YWNrLnB1c2godG9rZW4pO1xuICAgICAgdG9rZW4uZGVwdGggPSBnZXRDdXJyRGVwdGgoKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodG9rZW4udmFsdWUgPT09ICcpJykge1xuICAgICAgY29uc3QgY291bnRlciA9IHBhcmVuU3RhY2sucG9wKCk7XG4gICAgICBpZiAoY291bnRlcikge1xuICAgICAgICBjb25zdCBwYWlySWQgPSB1aWQoKTtcbiAgICAgICAgdG9rZW4uZ3JvdXBJZCA9IHBhaXJJZDtcbiAgICAgICAgdG9rZW4uZGVwdGggPSBjb3VudGVyLmRlcHRoO1xuICAgICAgICBjb3VudGVyLmdyb3VwSWQgPSBwYWlySWQ7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgdG9rZW4uZXJyb3IgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0b2tlbi52YWx1ZSA9PT0gJ3snKSB7XG4gICAgICBpZiAoIWFycmF5U3RhcnQpIHtcbiAgICAgICAgYXJyYXlTdGFydCA9IHRva2VuO1xuICAgICAgICB0b2tlbi5kZXB0aCA9IGdldEN1cnJEZXB0aCgpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRva2VuLmVycm9yID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAodG9rZW4udmFsdWUgPT09ICd9Jykge1xuICAgICAgaWYgKGFycmF5U3RhcnQpIHtcbiAgICAgICAgY29uc3QgcGFpcklkID0gdWlkKCk7XG4gICAgICAgIHRva2VuLmdyb3VwSWQgPSBwYWlySWQ7XG4gICAgICAgIHRva2VuLmRlcHRoID0gYXJyYXlTdGFydC5kZXB0aDtcbiAgICAgICAgYXJyYXlTdGFydC5ncm91cElkID0gcGFpcklkO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHRva2VuLmVycm9yID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGFycmF5U3RhcnQgPSBudWxsO1xuICAgIH1cbiAgICBlbHNlIGlmIChcbiAgICAgIHRva2VuLnR5cGUgPT09IFJFRl9SQU5HRSB8fFxuICAgICAgdG9rZW4udHlwZSA9PT0gUkVGX0JFQU0gfHxcbiAgICAgIHRva2VuLnR5cGUgPT09IFJFRl9URVJOQVJZIHx8XG4gICAgICB0b2tlbi50eXBlID09PSBSRUZfU1RSVUNUXG4gICAgKSB7XG4gICAgICBjb25zdCByZWYgPSAodG9rZW4udHlwZSA9PT0gUkVGX1NUUlVDVClcbiAgICAgICAgPyBwYXJzZVN0cnVjdFJlZih0b2tlbi52YWx1ZSwgeyB4bHN4OiB0cnVlIH0pXG4gICAgICAgIDogcGFyc2VBMVJlZih0b2tlbi52YWx1ZSwgeyBhbGxvd1Rlcm5hcnk6IHRydWUsIHhsc3g6IHRydWUgfSk7XG4gICAgICBpZiAocmVmICYmIChyZWYucmFuZ2UgfHwgcmVmLmNvbHVtbnMpKSB7XG4gICAgICAgIHJlZi5zb3VyY2UgPSB0b2tlbi52YWx1ZTtcbiAgICAgICAgYWRkQ29udGV4dChyZWYsIHNoZWV0TmFtZSwgd29ya2Jvb2tOYW1lKTtcbiAgICAgICAgY29uc3Qga25vd24gPSBrbm93blJlZnMuZmluZChkID0+IGlzRXF1aXZhbGVudChkLCByZWYpKTtcbiAgICAgICAgaWYgKGtub3duKSB7XG4gICAgICAgICAgdG9rZW4uZ3JvdXBJZCA9IGtub3duLmdyb3VwSWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgcmVmLmdyb3VwSWQgPSB1aWQoKTtcbiAgICAgICAgICB0b2tlbi5ncm91cElkID0gcmVmLmdyb3VwSWQ7XG4gICAgICAgICAga25vd25SZWZzLnB1c2gocmVmKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmICh0b2tlbi50eXBlID09PSBVTktOT1dOKSB7XG4gICAgICB0b2tlbi5lcnJvciA9IHRydWU7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHRva2VubGlzdDtcbn1cbiIsIi8qXG4qKiBSQyBub3RhdGlvbiB3b3JrcyBkaWZmZXJlbnRseSBmcm9tIEExIGluIHRoYXQgd2UgY2FuJ3QgbWVyZ2Ugc3RhdGljXG4qKiByZWZlcmVuY2VzIGpvaW5lZCBieSBgOmAuIE1lcmdpbmcgY2FuIG9ubHkgd29yayBiZXR3ZWVuIHJlZmVyZW5jZXNcbioqIHRoYXQgYXJlIHJlbGF0aXZlL2Fic29sdXRlIG9uIHRoZSBzYW1lIGF4ZXMsIHNvOlxuKiogLSBSMUMxOlIyQzIgd2lsbCB3b3JrLFxuKiogLSBSWzFdQzE6UlsyXUMyIHdpbGwgYWxzbyB3b3JrLCBidXRcbioqIC0gUlsxXUNbMV06UjJDMiBkb2Vzbid0IGhhdmUgYSBkaXJlY3QgcmVjdGFuZ2xlIHJlcHJlc2VudGlvbiB3aXRob3V0IGNvbnRleHQuXG4qL1xuaW1wb3J0IHsgcmFuZ2VPcGVyYXRvciwgdHJpbURpcmVjdGlvbiB9IGZyb20gJy4vYTEuanMnO1xuaW1wb3J0IHsgTUFYX1JPV1MsIE1BWF9DT0xTIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgcGFyc2VSZWYgfSBmcm9tICcuL3BhcnNlUmVmLmpzJztcbmltcG9ydCB7IHN0cmluZ2lmeVByZWZpeCwgc3RyaW5naWZ5UHJlZml4QWx0IH0gZnJvbSAnLi9zdHJpbmdpZnlQcmVmaXguanMnO1xuXG5jb25zdCBjbGFtcCA9IChtaW4sIHZhbCwgbWF4KSA9PiBNYXRoLm1pbihNYXRoLm1heCh2YWwsIG1pbiksIG1heCk7XG5cbmZ1bmN0aW9uIHRvQ29vcmQgKHZhbHVlLCBpc0Ficykge1xuICBpZiAoaXNBYnMpIHtcbiAgICByZXR1cm4gU3RyaW5nKHZhbHVlICsgMSk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlID8gJ1snICsgdmFsdWUgKyAnXScgOiAnJztcbn1cblxuLyoqXG4gKiBTdHJpbmdpZnkgYSByYW5nZSBvYmplY3QgaW50byBSMUMxIHN5bnRheC5cbiAqXG4gKiBAaWdub3JlXG4gKiBAcHJpdmF0ZVxuICogQHNlZSBwYXJzZVIxQzFSZWZcbiAqIEBwYXJhbSB7UmFuZ2VSMUMxfSByYW5nZSAgQSByYW5nZSBvYmplY3RcbiAqIEByZXR1cm5zIHtzdHJpbmd9ICBBbiBSMUMxLXN0eWxlIHN0cmluZyByZXByZXNlbmF0aW9uIG9mIGEgcmFuZ2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvUjFDMSAocmFuZ2UpIHtcbiAgbGV0IHsgcjAsIGMwLCByMSwgYzEgfSA9IHJhbmdlO1xuICBjb25zdCB7ICRjMCwgJGMxLCAkcjAsICRyMSB9ID0gcmFuZ2U7XG4gIGNvbnN0IG51bGxSMCA9IHIwID09IG51bGw7XG4gIGNvbnN0IG51bGxDMCA9IGMwID09IG51bGw7XG4gIGxldCBudWxsUjEgPSByMSA9PSBudWxsO1xuICBsZXQgbnVsbEMxID0gYzEgPT0gbnVsbDtcbiAgY29uc3Qgb3AgPSByYW5nZU9wZXJhdG9yKHJhbmdlLnRyaW0pO1xuICBjb25zdCBoYXNUcmltID0gISFyYW5nZS50cmltO1xuICByMCA9IGNsYW1wKCRyMCA/IDAgOiAtTUFYX1JPV1MsIHIwIHwgMCwgTUFYX1JPV1MpO1xuICBjMCA9IGNsYW1wKCRjMCA/IDAgOiAtTUFYX0NPTFMsIGMwIHwgMCwgTUFYX0NPTFMpO1xuICBpZiAoIW51bGxSMCAmJiBudWxsUjEgJiYgIW51bGxDMCAmJiBudWxsQzEpIHtcbiAgICByMSA9IHIwO1xuICAgIG51bGxSMSA9IGZhbHNlO1xuICAgIGMxID0gYzA7XG4gICAgbnVsbEMxID0gZmFsc2U7XG4gIH1cbiAgZWxzZSB7XG4gICAgcjEgPSBjbGFtcCgkcjEgPyAwIDogLU1BWF9ST1dTLCByMSB8IDAsIE1BWF9ST1dTKTtcbiAgICBjMSA9IGNsYW1wKCRjMSA/IDAgOiAtTUFYX0NPTFMsIGMxIHwgMCwgTUFYX0NPTFMpO1xuICB9XG4gIC8vIEM6Q1xuICBjb25zdCBhbGxSb3dzID0gcjAgPT09IDAgJiYgcjEgPj0gTUFYX1JPV1M7XG4gIGlmICgoYWxsUm93cyAmJiAhbnVsbEMwICYmICFudWxsQzEpIHx8IChudWxsUjAgJiYgbnVsbFIxKSkge1xuICAgIGNvbnN0IGEgPSB0b0Nvb3JkKGMwLCAkYzApO1xuICAgIGNvbnN0IGIgPSB0b0Nvb3JkKGMxLCAkYzEpO1xuICAgIHJldHVybiAnQycgKyAoYSA9PT0gYiAmJiAhaGFzVHJpbSA/IGEgOiBhICsgb3AgKyAnQycgKyBiKTtcbiAgfVxuICAvLyBSOlJcbiAgY29uc3QgYWxsQ29scyA9IGMwID09PSAwICYmIGMxID49IE1BWF9DT0xTO1xuICBpZiAoKGFsbENvbHMgJiYgIW51bGxSMCAmJiAhbnVsbFIxKSB8fCAobnVsbEMwICYmIG51bGxDMSkpIHtcbiAgICBjb25zdCBhID0gdG9Db29yZChyMCwgJHIwKTtcbiAgICBjb25zdCBiID0gdG9Db29yZChyMSwgJHIxKTtcbiAgICByZXR1cm4gJ1InICsgKGEgPT09IGIgJiYgIWhhc1RyaW0gPyBhIDogYSArIG9wICsgJ1InICsgYik7XG4gIH1cbiAgY29uc3Qgc19yMCA9IHRvQ29vcmQocjAsICRyMCk7XG4gIGNvbnN0IHNfcjEgPSB0b0Nvb3JkKHIxLCAkcjEpO1xuICBjb25zdCBzX2MwID0gdG9Db29yZChjMCwgJGMwKTtcbiAgY29uc3Qgc19jMSA9IHRvQ29vcmQoYzEsICRjMSk7XG4gIC8vIFJDOlIsIFJDOkNcbiAgaWYgKG51bGxSMCB8fCBudWxsUjEgfHwgbnVsbEMwIHx8IG51bGxDMSkge1xuICAgIHJldHVybiAoXG4gICAgICAobnVsbFIwID8gJycgOiAnUicgKyBzX3IwKSArXG4gICAgICAobnVsbEMwID8gJycgOiAnQycgKyBzX2MwKSArXG4gICAgICBvcCArXG4gICAgICAobnVsbFIxID8gJycgOiAnUicgKyBzX3IxKSArXG4gICAgICAobnVsbEMxID8gJycgOiAnQycgKyBzX2MxKVxuICAgICk7XG4gIH1cbiAgLy8gUkM6UkNcbiAgaWYgKHNfcjAgIT09IHNfcjEgfHwgc19jMCAhPT0gc19jMSkge1xuICAgIHJldHVybiAnUicgKyBzX3IwICsgJ0MnICsgc19jMCArIG9wICsgJ1InICsgc19yMSArICdDJyArIHNfYzE7XG4gIH1cbiAgLy8gUkNcbiAgcmV0dXJuICdSJyArIHNfcjAgKyAnQycgKyBzX2MwO1xufVxuXG5mdW5jdGlvbiBwYXJzZVIxQzFQYXJ0IChyZWYpIHtcbiAgbGV0IHIwID0gbnVsbDtcbiAgbGV0IGMwID0gbnVsbDtcbiAgbGV0ICRyMCA9IG51bGw7XG4gIGxldCAkYzAgPSBudWxsO1xuICAvLyBSIHBhcnRcbiAgY29uc3Qgcm0gPSAvXlIoPzpcXFsoWystXT9cXGQrKVxcXXwoXFxkKykpPy8uZXhlYyhyZWYpO1xuICBpZiAocm0pIHtcbiAgICBpZiAocm1bMV0pIHtcbiAgICAgIHIwID0gcGFyc2VJbnQocm1bMV0sIDEwKTtcbiAgICAgICRyMCA9IGZhbHNlO1xuICAgIH1cbiAgICBlbHNlIGlmIChybVsyXSkge1xuICAgICAgcjAgPSBwYXJzZUludChybVsyXSwgMTApIC0gMTtcbiAgICAgICRyMCA9IHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgcjAgPSAwO1xuICAgICAgJHIwID0gZmFsc2U7XG4gICAgfVxuICAgIHJlZiA9IHJlZi5zbGljZShybVswXS5sZW5ndGgpO1xuICB9XG4gIC8vIEMgcGFydFxuICBjb25zdCBjbSA9IC9eQyg/OlxcWyhbKy1dP1xcZCspXFxdfChcXGQrKSk/Ly5leGVjKHJlZik7XG4gIGlmIChjbSkge1xuICAgIGlmIChjbVsxXSkge1xuICAgICAgYzAgPSBwYXJzZUludChjbVsxXSwgMTApO1xuICAgICAgJGMwID0gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNtWzJdKSB7XG4gICAgICBjMCA9IHBhcnNlSW50KGNtWzJdLCAxMCkgLSAxO1xuICAgICAgJGMwID0gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjMCA9IDA7XG4gICAgICAkYzAgPSBmYWxzZTtcbiAgICB9XG4gICAgcmVmID0gcmVmLnNsaWNlKGNtWzBdLmxlbmd0aCk7XG4gIH1cbiAgLy8gbXVzdCBoYXZlIGF0IGxlYXN0IG9uZSBwYXJ0IChhbmQgbm90aGluZyBtb3JlKVxuICBpZiAoKCFybSAmJiAhY20pIHx8IHJlZi5sZW5ndGgpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gWyByMCwgYzAsICRyMCwgJGMwIF07XG59XG5cbi8qKlxuICogUGFyc2UgYSBzaW1wbGUgc3RyaW5nIHJlZmVyZW5jZSB0byBhbiBSMUMxIHJhbmdlIGludG8gYSByYW5nZSBvYmplY3QuXG4gKlxuICogQHByaXZhdGVcbiAqIEBpZ25vcmVcbiAqIEBzZWUgcGFyc2VBMVJlZlxuICogQHBhcmFtIHtzdHJpbmd9IHJhbmdlU3RyaW5nICBBIHJhbmdlIHN0cmluZ1xuICogQHJldHVybnMgeyhSYW5nZVIxQzF8bnVsbCl9IEFuIG9iamVjdCByZXByZXNlbnRpbmcgYSB2YWxpZCByZWZlcmVuY2Ugb3IgbnVsbCBpZiBpdCBpcyBpbnZhbGlkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZnJvbVIxQzEgKHJhbmdlU3RyaW5nKSB7XG4gIGxldCBmaW5hbCA9IG51bGw7XG4gIGNvbnN0IFsgcGFydDEsIG9wLCBwYXJ0Miwgb3ZlcmZsb3cgXSA9IHJhbmdlU3RyaW5nLnNwbGl0KC8oXFwuPzpcXC4/KS8pO1xuICBpZiAob3ZlcmZsb3cpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByYW5nZSA9IHBhcnNlUjFDMVBhcnQocGFydDEpO1xuICBjb25zdCB0cmltID0gdHJpbURpcmVjdGlvbighIW9wICYmIG9wWzBdID09PSAnLicsICEhb3AgJiYgb3Bbb3AubGVuZ3RoIC0gMV0gPT09ICcuJyk7XG4gIGlmIChyYW5nZSkge1xuICAgIGNvbnN0IFsgcjAsIGMwLCAkcjAsICRjMCBdID0gcmFuZ2U7XG4gICAgaWYgKHBhcnQyKSB7XG4gICAgICBjb25zdCBleHRlbmRUbyA9IHBhcnNlUjFDMVBhcnQocGFydDIpO1xuICAgICAgaWYgKGV4dGVuZFRvKSB7XG4gICAgICAgIGZpbmFsID0ge307XG4gICAgICAgIGNvbnN0IFsgcjEsIGMxLCAkcjEsICRjMSBdID0gZXh0ZW5kVG87XG4gICAgICAgIC8vIHJvd3NcbiAgICAgICAgaWYgKHIwICE9IG51bGwgJiYgcjEgIT0gbnVsbCkge1xuICAgICAgICAgIGZpbmFsLnIwID0gJHIwID09PSAkcjEgPyBNYXRoLm1pbihyMCwgcjEpIDogcjA7XG4gICAgICAgICAgZmluYWwuJHIwID0gJHIwO1xuICAgICAgICAgIGZpbmFsLnIxID0gJHIwID09PSAkcjEgPyBNYXRoLm1heChyMCwgcjEpIDogcjE7XG4gICAgICAgICAgZmluYWwuJHIxID0gJHIxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHIwICE9IG51bGwgJiYgcjEgPT0gbnVsbCkge1xuICAgICAgICAgIC8vIHBhcnRpYWwgUkM6Q1xuICAgICAgICAgIGZpbmFsLnIwID0gcjA7XG4gICAgICAgICAgZmluYWwuJHIwID0gJHIwO1xuICAgICAgICAgIGZpbmFsLnIxID0gbnVsbDtcbiAgICAgICAgICBmaW5hbC4kcjEgPSAkcjA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocjAgPT0gbnVsbCAmJiByMSAhPSBudWxsKSB7XG4gICAgICAgICAgLy8gcGFydGlhbCBDOlJDXG4gICAgICAgICAgZmluYWwucjAgPSByMTtcbiAgICAgICAgICBmaW5hbC4kcjAgPSAkcjE7XG4gICAgICAgICAgZmluYWwucjEgPSBudWxsO1xuICAgICAgICAgIGZpbmFsLiRyMSA9ICRyMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChyMCA9PSBudWxsICYmIHIxID09IG51bGwpIHtcbiAgICAgICAgICAvLyBDOkNcbiAgICAgICAgICBmaW5hbC5yMCA9IG51bGw7XG4gICAgICAgICAgZmluYWwuJHIwID0gZmFsc2U7XG4gICAgICAgICAgZmluYWwucjEgPSBudWxsO1xuICAgICAgICAgIGZpbmFsLiRyMSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbHVtbnNcbiAgICAgICAgaWYgKGMwICE9IG51bGwgJiYgYzEgIT0gbnVsbCkge1xuICAgICAgICAgIGZpbmFsLmMwID0gJGMwID09PSAkYzEgPyBNYXRoLm1pbihjMCwgYzEpIDogYzA7XG4gICAgICAgICAgZmluYWwuJGMwID0gJGMwO1xuICAgICAgICAgIGZpbmFsLmMxID0gJGMwID09PSAkYzEgPyBNYXRoLm1heChjMCwgYzEpIDogYzE7XG4gICAgICAgICAgZmluYWwuJGMxID0gJGMxO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGMwICE9IG51bGwgJiYgYzEgPT0gbnVsbCkge1xuICAgICAgICAgIGZpbmFsLmMwID0gYzA7XG4gICAgICAgICAgZmluYWwuJGMwID0gJGMwO1xuICAgICAgICAgIGZpbmFsLmMxID0gbnVsbDtcbiAgICAgICAgICBmaW5hbC4kYzEgPSAkYzA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYzAgPT0gbnVsbCAmJiBjMSAhPSBudWxsKSB7XG4gICAgICAgICAgZmluYWwuYzAgPSBjMTtcbiAgICAgICAgICBmaW5hbC4kYzAgPSAkYzE7XG4gICAgICAgICAgZmluYWwuYzEgPSBudWxsO1xuICAgICAgICAgIGZpbmFsLiRjMSA9ICRjMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjMCA9PSBudWxsICYmIGMxID09IG51bGwpIHtcbiAgICAgICAgICBmaW5hbC5jMCA9IG51bGw7XG4gICAgICAgICAgZmluYWwuJGMwID0gZmFsc2U7XG4gICAgICAgICAgZmluYWwuYzEgPSBudWxsO1xuICAgICAgICAgIGZpbmFsLiRjMSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHJhbmdlIG9ubHkgLSBubyBzZWNvbmQgcGFydFxuICAgIGVsc2UgaWYgKHIwICE9IG51bGwgJiYgYzAgPT0gbnVsbCkge1xuICAgICAgZmluYWwgPSB7XG4gICAgICAgIHIwOiByMCxcbiAgICAgICAgYzA6IG51bGwsXG4gICAgICAgIHIxOiByMCxcbiAgICAgICAgYzE6IG51bGwsXG4gICAgICAgICRyMDogJHIwLFxuICAgICAgICAkYzA6IGZhbHNlLFxuICAgICAgICAkcjE6ICRyMCxcbiAgICAgICAgJGMxOiBmYWxzZVxuICAgICAgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAocjAgPT0gbnVsbCAmJiBjMCAhPSBudWxsKSB7XG4gICAgICBmaW5hbCA9IHtcbiAgICAgICAgcjA6IG51bGwsXG4gICAgICAgIGMwOiBjMCxcbiAgICAgICAgcjE6IG51bGwsXG4gICAgICAgIGMxOiBjMCxcbiAgICAgICAgJHIwOiBmYWxzZSxcbiAgICAgICAgJGMwOiAkYzAsXG4gICAgICAgICRyMTogZmFsc2UsXG4gICAgICAgICRjMTogJGMwXG4gICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIGZpbmFsID0ge1xuICAgICAgICByMDogcjAgfHwgMCxcbiAgICAgICAgYzA6IGMwIHx8IDAsXG4gICAgICAgIHIxOiByMCB8fCAwLFxuICAgICAgICBjMTogYzAgfHwgMCxcbiAgICAgICAgJHIwOiAkcjAgfHwgZmFsc2UsXG4gICAgICAgICRjMDogJGMwIHx8IGZhbHNlLFxuICAgICAgICAkcjE6ICRyMCB8fCBmYWxzZSxcbiAgICAgICAgJGMxOiAkYzAgfHwgZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9XG4gIGlmIChmaW5hbCAmJiB0cmltKSB7XG4gICAgZmluYWwudHJpbSA9IHRyaW07XG4gIH1cbiAgcmV0dXJuIGZpbmFsO1xufVxuXG4vKipcbiAqIFBhcnNlIGEgc3RyaW5nIHJlZmVyZW5jZSBpbnRvIGFuIG9iamVjdCByZXByZXNlbnRpbmcgaXQuXG4gKlxuICogYGBganNcbiAqIHBhcnNlUjFDMVJlZignU2hlZXQxIVJbOV1DOTpSWzldQzknKTtcbiAqIC8vID0+IHtcbiAqIC8vICAgY29udGV4dDogWyAnU2hlZXQxJyBdLFxuICogLy8gICByYW5nZToge1xuICogLy8gICAgIHIwOiA5LFxuICogLy8gICAgIGMwOiA4LFxuICogLy8gICAgIHIxOiA5LFxuICogLy8gICAgIGMxOiA4LFxuICogLy8gICAgICRjMDogdHJ1ZSxcbiAqIC8vICAgICAkYzE6IHRydWVcbiAqIC8vICAgICAkcjA6IGZhbHNlLFxuICogLy8gICAgICRyMTogZmFsc2VcbiAqIC8vICAgfVxuICogLy8gfVxuICogYGBgXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHJlZlN0cmluZyBBbiBSMUMxLXN0eWxlIHJlZmVyZW5jZSBzdHJpbmdcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gIE9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMuYWxsb3dOYW1lZD10cnVlXSAgRW5hYmxlIHBhcnNpbmcgbmFtZXMgYXMgd2VsbCBhcyByYW5nZXMuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93VGVybmFyeT1mYWxzZV0gIEVuYWJsZXMgdGhlIHJlY29nbml0aW9uIG9mIHRlcm5hcnkgcmFuZ2VzIGluIHRoZSBzdHlsZSBvZiBgQTE6QWAgb3IgYEExOjFgLiBUaGVzZSBhcmUgc3VwcG9ydGVkIGJ5IEdvb2dsZSBTaGVldHMgYnV0IG5vdCBFeGNlbC4gU2VlOiBSZWZlcmVuY2VzLm1kLlxuICogQHBhcmFtIHtib29sZWFufSBbb3B0aW9ucy54bHN4PWZhbHNlXSAgU3dpdGNoZXMgdG8gdGhlIGBbMV1TaGVldDEhQTFgIG9yIGBbMV0hbmFtZWAgcHJlZml4IHN5bnRheCBmb3JtIGZvciBleHRlcm5hbCB3b3JrYm9va3MuIFNlZTogW1ByZWZpeGVzLm1kXSguL1ByZWZpeGVzLm1kKVxuICogQHJldHVybnMgeyhSZWZlcmVuY2VSMUMxfG51bGwpfSBBbiBvYmplY3QgcmVwcmVzZW50aW5nIGEgdmFsaWQgcmVmZXJlbmNlIG9yIG51bGwgaWYgaXQgaXMgaW52YWxpZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUjFDMVJlZiAocmVmU3RyaW5nLCB7IGFsbG93TmFtZWQgPSB0cnVlLCBhbGxvd1Rlcm5hcnkgPSBmYWxzZSwgeGxzeCA9IGZhbHNlIH0gPSB7fSkge1xuICBjb25zdCBkID0gcGFyc2VSZWYocmVmU3RyaW5nLCB7IGFsbG93TmFtZWQsIGFsbG93VGVybmFyeSwgeGxzeCwgcjFjMTogdHJ1ZSB9KTtcbiAgaWYgKGQgJiYgKGQucjAgfHwgZC5uYW1lKSkge1xuICAgIGNvbnN0IHJhbmdlID0gZC5yMVxuICAgICAgPyBmcm9tUjFDMShkLnIwICsgZC5vcGVyYXRvciArIGQucjEpXG4gICAgICA6IGZyb21SMUMxKGQucjApO1xuICAgIGlmIChyYW5nZSkge1xuICAgICAgcmV0dXJuIHhsc3hcbiAgICAgICAgPyB7IHdvcmtib29rTmFtZTogZC53b3JrYm9va05hbWUsIHNoZWV0TmFtZTogZC5zaGVldE5hbWUsIHJhbmdlIH1cbiAgICAgICAgOiB7IGNvbnRleHQ6IGQuY29udGV4dCwgcmFuZ2UgfTtcbiAgICB9XG4gICAgaWYgKGQubmFtZSkge1xuICAgICAgcmV0dXJuIHhsc3hcbiAgICAgICAgPyB7IHdvcmtib29rTmFtZTogZC53b3JrYm9va05hbWUsIHNoZWV0TmFtZTogZC5zaGVldE5hbWUsIG5hbWU6IGQubmFtZSB9XG4gICAgICAgIDogeyBjb250ZXh0OiBkLmNvbnRleHQsIG5hbWU6IGQubmFtZSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiBHZXQgYW4gUjFDMS1zdHlsZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSByZWZlcmVuY2Ugb2JqZWN0LlxuICpcbiAqIGBgYGpzXG4gKiBzdHJpbmdpZnlSMUMxUmVmKHtcbiAqICAgY29udGV4dDogWyAnU2hlZXQxJyBdLFxuICogICByYW5nZToge1xuICogICAgIHIwOiA5LFxuICogICAgIGMwOiA4LFxuICogICAgIHIxOiA5LFxuICogICAgIGMxOiA4LFxuICogICAgICRjMDogdHJ1ZSxcbiAqICAgICAkYzE6IHRydWVcbiAqICAgICAkcjA6IGZhbHNlLFxuICogICAgICRyMTogZmFsc2VcbiAqICAgfVxuICogfSk7XG4gKiAvLyA9PiAnU2hlZXQxIVJbOV1DOTpSWzldQzknXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1JlZmVyZW5jZVIxQzF9IHJlZk9iamVjdCBBIHJlZmVyZW5jZSBvYmplY3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gIE9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMueGxzeD1mYWxzZV0gIFN3aXRjaGVzIHRvIHRoZSBgWzFdU2hlZXQxIUExYCBvciBgWzFdIW5hbWVgIHByZWZpeCBzeW50YXggZm9ybSBmb3IgZXh0ZXJuYWwgd29ya2Jvb2tzLiBTZWU6IFtQcmVmaXhlcy5tZF0oLi9QcmVmaXhlcy5tZClcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSByZWZlcmVuY2UgaW4gUjFDMS1zdHlsZSBzdHJpbmcgZm9ybWF0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnlSMUMxUmVmIChyZWZPYmplY3QsIHsgeGxzeCA9IGZhbHNlIH0gPSB7fSkge1xuICBjb25zdCBwcmVmaXggPSB4bHN4XG4gICAgPyBzdHJpbmdpZnlQcmVmaXhBbHQocmVmT2JqZWN0KVxuICAgIDogc3RyaW5naWZ5UHJlZml4KHJlZk9iamVjdCk7XG4gIHJldHVybiBwcmVmaXggKyAoXG4gICAgcmVmT2JqZWN0Lm5hbWUgPyByZWZPYmplY3QubmFtZSA6IHRvUjFDMShyZWZPYmplY3QucmFuZ2UpXG4gICk7XG59XG4iLCJpbXBvcnQgeyBNQVhfUk9XUywgTUFYX0NPTFMsIEVSUk9SIH0gZnJvbSAnLi9jb25zdGFudHMuanMnO1xuaW1wb3J0IHsgZnJvbUExLCBwYXJzZUExUmVmLCBzdHJpbmdpZnlBMVJlZiB9IGZyb20gJy4vYTEuanMnO1xuaW1wb3J0IHsgcGFyc2VSMUMxUmVmLCBzdHJpbmdpZnlSMUMxUmVmIH0gZnJvbSAnLi9yYy5qcyc7XG5pbXBvcnQgeyB0b2tlbml6ZSB9IGZyb20gJy4vbGV4ZXIuanMnO1xuaW1wb3J0IHsgaXNSYW5nZSB9IGZyb20gJy4vaXNUeXBlLmpzJztcblxuY29uc3QgY2FsYyA9IChhYnMsIHZYLCBhWCkgPT4ge1xuICBpZiAodlggPT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBhYnMgPyB2WCA6IHZYIC0gYVg7XG59O1xuXG5jb25zdCBzZXR0aW5ncyA9IHtcbiAgd2l0aExvY2F0aW9uOiBmYWxzZSxcbiAgbWVyZ2VSZWZzOiBmYWxzZSxcbiAgYWxsb3dUZXJuYXJ5OiB0cnVlLFxuICByMWMxOiBmYWxzZVxufTtcblxuLyoqXG4gKiBUcmFuc2xhdGVzIHJhbmdlcyBpbiBhIGZvcm11bGEgb3IgbGlzdCBvZiB0b2tlbnMgZnJvbSBhYnNvbHV0ZSBBMSBzeW50YXggdG9cbiAqIHJlbGF0aXZlIFIxQzEgc3ludGF4LlxuICpcbiAqIFJldHVybnMgdGhlIHNhbWUgZm9ybXVsYSB3aXRoIHRoZSByYW5nZXMgdHJhbnNsYXRlZC4gSWYgYW4gYXJyYXkgb2YgdG9rZW5zXG4gKiB3YXMgc3VwcGxpZWQsIHRoZW4gdGhlIHNhbWUgYXJyYXkgaXMgcmV0dXJuZWQuXG4gKlxuICogYGBganNcbiAqIHRyYW5zbGF0ZVRvUjFDMShcIj1TVU0oRTEwLCRFJDIsU2hlZXQhJEUkMylcIiwgXCJEMTBcIik7XG4gKiAvLyA9PiBcIj1TVU0oUkNbMV0sUjJDNSxTaGVldCFSM0M1KVwiKTtcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7KHN0cmluZyB8IEFycmF5PFRva2VuPil9IGZvcm11bGEgQSBzdHJpbmcgKGFuIEV4Y2VsIGZvcm11bGEpIG9yIGEgdG9rZW4gbGlzdCB0aGF0IHNob3VsZCBiZSBhZGp1c3RlZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhbmNob3JDZWxsIEEgc2ltcGxlIHN0cmluZyByZWZlcmVuY2UgdG8gYW4gQTEgY2VsbCBJRCAoYEFGMTIzYCBvcmAkQyQ1YCkuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dIFRoZSBvcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnhsc3g9ZmFsc2VdICBTd2l0Y2hlcyB0byB0aGUgYFsxXVNoZWV0MSFBMWAgb3IgYFsxXSFuYW1lYCBwcmVmaXggc3ludGF4IGZvcm0gZm9yIGV4dGVybmFsIHdvcmtib29rcy4gU2VlOiBbUHJlZml4ZXMubWRdKC4vUHJlZml4ZXMubWQpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93VGVybmFyeT10cnVlXSAgRW5hYmxlcyB0aGUgcmVjb2duaXRpb24gb2YgdGVybmFyeSByYW5nZXMgaW4gdGhlIHN0eWxlIG9mIGBBMTpBYCBvciBgQTE6MWAuIFRoZXNlIGFyZSBzdXBwb3J0ZWQgYnkgR29vZ2xlIFNoZWV0cyBidXQgbm90IEV4Y2VsLiBTZWU6IFJlZmVyZW5jZXMubWQuXG4gKiBAcmV0dXJucyB7KHN0cmluZyB8IEFycmF5PFRva2VuPil9IEEgZm9ybXVsYSBzdHJpbmcgb3IgdG9rZW4gbGlzdCAoZGVwZW5kaW5nIG9uIHdoaWNoIHdhcyBpbnB1dClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZVRvUjFDMSAoZm9ybXVsYSwgYW5jaG9yQ2VsbCwgeyB4bHN4ID0gZmFsc2UsIGFsbG93VGVybmFyeSA9IHRydWUgfSA9IHt9KSB7XG4gIGNvbnN0IHsgdG9wLCBsZWZ0IH0gPSBmcm9tQTEoYW5jaG9yQ2VsbCk7XG4gIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIGZvcm11bGEgPT09ICdzdHJpbmcnO1xuXG4gIGNvbnN0IHRva2VucyA9IGlzU3RyaW5nXG4gICAgPyB0b2tlbml6ZShmb3JtdWxhLCB7IC4uLnNldHRpbmdzLCB4bHN4LCBhbGxvd1Rlcm5hcnkgfSlcbiAgICA6IGZvcm11bGE7XG5cbiAgbGV0IG9mZnNldFNrZXcgPSAwO1xuICBjb25zdCByZWZPcHRzID0geyB4bHN4LCBhbGxvd1Rlcm5hcnkgfTtcbiAgdG9rZW5zLmZvckVhY2godG9rZW4gPT4ge1xuICAgIGlmIChpc1JhbmdlKHRva2VuKSkge1xuICAgICAgY29uc3QgdG9rZW5WYWx1ZSA9IHRva2VuLnZhbHVlO1xuICAgICAgY29uc3QgcmVmID0gcGFyc2VBMVJlZih0b2tlblZhbHVlLCByZWZPcHRzKTtcbiAgICAgIGNvbnN0IGQgPSByZWYucmFuZ2U7XG4gICAgICBjb25zdCByYW5nZSA9IHt9O1xuICAgICAgcmFuZ2UucjAgPSBjYWxjKGQuJHRvcCwgZC50b3AsIHRvcCk7XG4gICAgICByYW5nZS5yMSA9IGNhbGMoZC4kYm90dG9tLCBkLmJvdHRvbSwgdG9wKTtcbiAgICAgIHJhbmdlLmMwID0gY2FsYyhkLiRsZWZ0LCBkLmxlZnQsIGxlZnQpO1xuICAgICAgcmFuZ2UuYzEgPSBjYWxjKGQuJHJpZ2h0LCBkLnJpZ2h0LCBsZWZ0KTtcbiAgICAgIHJhbmdlLiRyMCA9IGQuJHRvcDtcbiAgICAgIHJhbmdlLiRyMSA9IGQuJGJvdHRvbTtcbiAgICAgIHJhbmdlLiRjMCA9IGQuJGxlZnQ7XG4gICAgICByYW5nZS4kYzEgPSBkLiRyaWdodDtcbiAgICAgIGlmIChkLnRyaW0pIHtcbiAgICAgICAgcmFuZ2UudHJpbSA9IGQudHJpbTtcbiAgICAgIH1cbiAgICAgIHJlZi5yYW5nZSA9IHJhbmdlO1xuICAgICAgdG9rZW4udmFsdWUgPSBzdHJpbmdpZnlSMUMxUmVmKHJlZiwgcmVmT3B0cyk7XG4gICAgICAvLyBpZiB0b2tlbiBpbmNsdWRlcyBvZmZzZXRzLCB0aG9zZSBvZmZzZXRzIGFyZSBub3cgbGlrZWx5IHdyb25nIVxuICAgICAgaWYgKHRva2VuLmxvYykge1xuICAgICAgICB0b2tlbi5sb2NbMF0gKz0gb2Zmc2V0U2tldztcbiAgICAgICAgb2Zmc2V0U2tldyArPSB0b2tlbi52YWx1ZS5sZW5ndGggLSB0b2tlblZhbHVlLmxlbmd0aDtcbiAgICAgICAgdG9rZW4ubG9jWzFdICs9IG9mZnNldFNrZXc7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKG9mZnNldFNrZXcgJiYgdG9rZW4ubG9jKSB7XG4gICAgICB0b2tlbi5sb2NbMF0gKz0gb2Zmc2V0U2tldztcbiAgICAgIHRva2VuLmxvY1sxXSArPSBvZmZzZXRTa2V3O1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGlzU3RyaW5nXG4gICAgPyB0b2tlbnMubWFwKGQgPT4gZC52YWx1ZSkuam9pbignJylcbiAgICA6IHRva2Vucztcbn1cblxuZnVuY3Rpb24gdG9GaXhlZCAodmFsLCBhYnMsIGJhc2UsIG1heCwgd3JhcEVkZ2VzID0gdHJ1ZSkge1xuICBsZXQgdiA9IHZhbDtcbiAgaWYgKHYgIT0gbnVsbCAmJiAhYWJzKSB7XG4gICAgdiA9IGJhc2UgKyB2YWw7XG4gICAgLy8gRXhjZWwgXCJ3cmFwcyBhcm91bmRcIiB3aGVuIHZhbHVlIGdvZXMgb3V0IG9mIGxvd2VyIGJvdW5kcy5cbiAgICAvLyBJdCdzIGEgYml0IHF1aXJreSBvbiBlbnRyeSBhcyBFeGNlbCBfcmVhbGx5IHdhbnRzXyB0byByZS1yZXdpdGUgdGhlXG4gICAgLy8gcmVmZXJlbmNlcyBidXQgdGhlIGJlaGF2aW91ciBpcyBjb25zaXN0ZW50IHdpdGggSU5ESVJFQ1Q6XG4gICAgLy8gLi4uIEluIEExOiBSQ1stMV0gPT4gUjFDWzE2MzgzXS5cbiAgICBpZiAodiA8IDApIHtcbiAgICAgIGlmICghd3JhcEVkZ2VzKSB7XG4gICAgICAgIHJldHVybiBOYU47XG4gICAgICB9XG4gICAgICB2ID0gbWF4ICsgdiArIDE7XG4gICAgfVxuICAgIC8vIC4uLiBJbiBCMTogPVJDWzE2MzgzXSA9PiA9UkNbLTFdXG4gICAgaWYgKHYgPiBtYXgpIHtcbiAgICAgIGlmICghd3JhcEVkZ2VzKSB7XG4gICAgICAgIHJldHVybiBOYU47XG4gICAgICB9XG4gICAgICB2IC09IG1heCArIDE7XG4gICAgfVxuICB9XG4gIHJldHVybiB2O1xufVxuXG5jb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgd3JhcEVkZ2VzOiB0cnVlLFxuICBtZXJnZVJlZnM6IHRydWUsXG4gIGFsbG93VGVybmFyeTogdHJ1ZSxcbiAgeGxzeDogZmFsc2Vcbn07XG5cbi8qKlxuICogVHJhbnNsYXRlcyByYW5nZXMgaW4gYSBmb3JtdWxhIG9yIGxpc3Qgb2YgdG9rZW5zIGZyb20gcmVsYXRpdmUgUjFDMSBzeW50YXggdG9cbiAqIGFic29sdXRlIEExIHN5bnRheC5cbiAqXG4gKiBSZXR1cm5zIHRoZSBzYW1lIGZvcm11bGEgd2l0aCB0aGUgcmFuZ2VzIHRyYW5zbGF0ZWQuIElmIGFuIGFycmF5IG9mIHRva2Vuc1xuICogd2FzIHN1cHBsaWVkLCB0aGVuIHRoZSBzYW1lIGFycmF5IGlzIHJldHVybmVkLlxuICpcbiAqIGBgYGpzXG4gKiB0cmFuc2xhdGVUb0ExKFwiPVNVTShSQ1sxXSxSMkM1LFNoZWV0IVIzQzUpXCIsIFwiRDEwXCIpO1xuICogLy8gPT4gXCI9U1VNKEUxMCwkRSQyLFNoZWV0ISRFJDMpXCIpO1xuICogYGBgXG4gKlxuICogSWYgYW4gaW5wdXQgcmFuZ2UgaXMgLTEsLTEgcmVsYXRpdmUgcm93cy9jb2x1bW5zIGFuZCB0aGUgYW5jaG9yIGlzIEExLCB0aGVcbiAqIHJlc3VsdGluZyByYW5nZSB3aWxsIChieSBkZWZhdWx0KSB3cmFwIGFyb3VuZCB0byB0aGUgYm90dG9tIG9mIHRoZSBzaGVldFxuICogcmVzdWx0aW5nIGluIHRoZSByYW5nZSBYRkQxMDQ4NTc2LiBUaGlzIG1heSBub3QgYmUgd2hhdCB5b3Ugd2FudCBzbyBtYXkgc2V0XG4gKiBgd3JhcEVkZ2VzYCB0byBmYWxzZSB3aGljaCB3aWxsIGluc3RlYWQgdHVybiB0aGUgcmFuZ2UgaW50byBhIGAjUkVGIWAgZXJyb3IuXG4gKlxuICogYGBganNcbiAqIHRyYW5zbGF0ZVRvQTEoXCI9UlstMV1DWy0xXVwiLCBcIkExXCIpO1xuICogLy8gPT4gXCI9WEZEMTA0ODU3NlwiKTtcbiAqXG4gKiB0cmFuc2xhdGVUb0ExKFwiPVJbLTFdQ1stMV1cIiwgXCJBMVwiLCB7IHdyYXBFZGdlczogZmFsc2UgfSk7XG4gKiAvLyA9PiBcIj0jUkVGIVwiKTtcbiAqIGBgYFxuICpcbiAqIE5vdGUgdGhhdCBpZiB5b3UgYXJlIHBhc3NpbmcgaW4gYSBsaXN0IG9mIHRva2VucyB0aGF0IHdhcyBub3QgY3JlYXRlZCB1c2luZ1xuICogYG1lcmdlUmVmc2AgYW5kIHlvdSBkaXNhYmxlIGVkZ2Ugd3JhcHBpbmcgKG9yIHlvdSBzaW1wbHkgc2V0IGJvdGggb3B0aW9uc1xuICogdG8gZmFsc2UpLCB5b3UgY2FuIGVuZCB1cCB3aXRoIGEgZm9ybXVsYSBzdWNoIGFzIGA9I1JFRiE6QjJgIG9yXG4gKiBgPVNoZWV0MyEjUkVGITpGM2AuIFRoZXNlIGFyZSB2YWxpZCBmb3JtdWxhcyBpbiB0aGUgRXhjZWwgZm9ybXVsYSBsYW5ndWFnZVxuICogYW5kIEV4Y2VsIHdpbGwgYWNjZXB0IHRoZW0sIGJ1dCB0aGV5IGFyZSBub3Qgc3VwcG9ydGVkIGluIEdvb2dsZSBTaGVldHMuXG4gKlxuICogQHBhcmFtIHsoc3RyaW5nIHwgQXJyYXk8VG9rZW4+KX0gZm9ybXVsYSBBIHN0cmluZyAoYW4gRXhjZWwgZm9ybXVsYSkgb3IgYSB0b2tlbiBsaXN0IHRoYXQgc2hvdWxkIGJlIGFkanVzdGVkLlxuICogQHBhcmFtIHtzdHJpbmd9IGFuY2hvckNlbGwgQSBzaW1wbGUgc3RyaW5nIHJlZmVyZW5jZSB0byBhbiBBMSBjZWxsIElEIChgQUYxMjNgIG9yYCRDJDVgKS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9ucz17fV0gVGhlIG9wdGlvbnNcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMud3JhcEVkZ2VzPXRydWVdICBXcmFwIG91dC1vZi1ib3VuZHMgcmFuZ2VzIGFyb3VuZCBzaGVldCBlZGdlcyByYXRoZXIgdGhhbiB0dXJuaW5nIHRoZW0gdG8gI1JFRiEgZXJyb3JzXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLm1lcmdlUmVmcz10cnVlXSAgIFNob3VsZCByYW5nZXMgYmUgdHJlYXRlZCBhcyB3aG9sZSByZWZlcmVuY2VzIChgU2hlZXQxIUExOkIyYCkgb3IgYXMgc2VwYXJhdGUgdG9rZW5zIGZvciBlYWNoIHBhcnQ6IChgU2hlZXQxYCxgIWAsYEExYCxgOmAsYEIyYCkuXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnhsc3g9ZmFsc2VdICBTd2l0Y2hlcyB0byB0aGUgYFsxXVNoZWV0MSFBMWAgb3IgYFsxXSFuYW1lYCBwcmVmaXggc3ludGF4IGZvcm0gZm9yIGV4dGVybmFsIHdvcmtib29rcy4gU2VlOiBbUHJlZml4ZXMubWRdKC4vUHJlZml4ZXMubWQpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFsbG93VGVybmFyeT10cnVlXSAgRW5hYmxlcyB0aGUgcmVjb2duaXRpb24gb2YgdGVybmFyeSByYW5nZXMgaW4gdGhlIHN0eWxlIG9mIGBBMTpBYCBvciBgQTE6MWAuIFRoZXNlIGFyZSBzdXBwb3J0ZWQgYnkgR29vZ2xlIFNoZWV0cyBidXQgbm90IEV4Y2VsLiBTZWU6IFJlZmVyZW5jZXMubWQuXG4gKiBAcmV0dXJucyB7KHN0cmluZyB8IEFycmF5PFRva2VuPil9IEEgZm9ybXVsYSBzdHJpbmcgb3IgdG9rZW4gbGlzdCAoZGVwZW5kaW5nIG9uIHdoaWNoIHdhcyBpbnB1dClcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbGF0ZVRvQTEgKGZvcm11bGEsIGFuY2hvckNlbGwsIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucykge1xuICBjb25zdCBhbmNob3IgPSBmcm9tQTEoYW5jaG9yQ2VsbCk7XG4gIGNvbnN0IGlzU3RyaW5nID0gdHlwZW9mIGZvcm11bGEgPT09ICdzdHJpbmcnO1xuICBjb25zdCBvcHRzID0geyAuLi5kZWZhdWx0T3B0aW9ucywgLi4ub3B0aW9ucyB9O1xuXG4gIGNvbnN0IHRva2VucyA9IGlzU3RyaW5nXG4gICAgPyB0b2tlbml6ZShmb3JtdWxhLCB7XG4gICAgICB3aXRoTG9jYXRpb246IGZhbHNlLFxuICAgICAgbWVyZ2VSZWZzOiBvcHRzLm1lcmdlUmVmcyxcbiAgICAgIHhsc3g6IG9wdHMueGxzeCxcbiAgICAgIGFsbG93VGVybmFyeTogb3B0cy5hbGxvd1Rlcm5hcnksXG4gICAgICByMWMxOiB0cnVlXG4gICAgfSlcbiAgICA6IGZvcm11bGE7XG5cbiAgbGV0IG9mZnNldFNrZXcgPSAwO1xuICBjb25zdCByZWZPcHRzID0geyB4bHN4OiBvcHRzLnhsc3gsIGFsbG93VGVybmFyeTogb3B0cy5hbGxvd1Rlcm5hcnkgfTtcbiAgdG9rZW5zLmZvckVhY2godG9rZW4gPT4ge1xuICAgIGlmIChpc1JhbmdlKHRva2VuKSkge1xuICAgICAgY29uc3QgdG9rZW5WYWx1ZSA9IHRva2VuLnZhbHVlO1xuICAgICAgY29uc3QgcmVmID0gcGFyc2VSMUMxUmVmKHRva2VuVmFsdWUsIHJlZk9wdHMpO1xuICAgICAgY29uc3QgZCA9IHJlZi5yYW5nZTtcbiAgICAgIGNvbnN0IHJhbmdlID0ge307XG4gICAgICBjb25zdCByMCA9IHRvRml4ZWQoZC5yMCwgZC4kcjAsIGFuY2hvci50b3AsIE1BWF9ST1dTLCBvcHRzLndyYXBFZGdlcyk7XG4gICAgICBjb25zdCByMSA9IHRvRml4ZWQoZC5yMSwgZC4kcjEsIGFuY2hvci50b3AsIE1BWF9ST1dTLCBvcHRzLndyYXBFZGdlcyk7XG4gICAgICBpZiAocjAgPiByMSkge1xuICAgICAgICByYW5nZS50b3AgPSByMTtcbiAgICAgICAgcmFuZ2UuJHRvcCA9IGQuJHIxO1xuICAgICAgICByYW5nZS5ib3R0b20gPSByMDtcbiAgICAgICAgcmFuZ2UuJGJvdHRvbSA9IGQuJHIwO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJhbmdlLnRvcCA9IHIwO1xuICAgICAgICByYW5nZS4kdG9wID0gZC4kcjA7XG4gICAgICAgIHJhbmdlLmJvdHRvbSA9IHIxO1xuICAgICAgICByYW5nZS4kYm90dG9tID0gZC4kcjE7XG4gICAgICB9XG4gICAgICBjb25zdCBjMCA9IHRvRml4ZWQoZC5jMCwgZC4kYzAsIGFuY2hvci5sZWZ0LCBNQVhfQ09MUywgb3B0cy53cmFwRWRnZXMpO1xuICAgICAgY29uc3QgYzEgPSB0b0ZpeGVkKGQuYzEsIGQuJGMxLCBhbmNob3IubGVmdCwgTUFYX0NPTFMsIG9wdHMud3JhcEVkZ2VzKTtcbiAgICAgIGlmIChjMCA+IGMxKSB7XG4gICAgICAgIHJhbmdlLmxlZnQgPSBjMTtcbiAgICAgICAgcmFuZ2UuJGxlZnQgPSBkLiRjMTtcbiAgICAgICAgcmFuZ2UucmlnaHQgPSBjMDtcbiAgICAgICAgcmFuZ2UuJHJpZ2h0ID0gZC4kYzA7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgcmFuZ2UubGVmdCA9IGMwO1xuICAgICAgICByYW5nZS4kbGVmdCA9IGQuJGMwO1xuICAgICAgICByYW5nZS5yaWdodCA9IGMxO1xuICAgICAgICByYW5nZS4kcmlnaHQgPSBkLiRjMTtcbiAgICAgIH1cbiAgICAgIGlmIChkLnRyaW0pIHtcbiAgICAgICAgcmFuZ2UudHJpbSA9IGQudHJpbTtcbiAgICAgIH1cbiAgICAgIGlmIChpc05hTihyMCkgfHwgaXNOYU4ocjEpIHx8IGlzTmFOKGMwKSB8fCBpc05hTihjMSkpIHtcbiAgICAgICAgLy8gY29udmVydCB0byByZWYgZXJyb3JcbiAgICAgICAgdG9rZW4udHlwZSA9IEVSUk9SO1xuICAgICAgICB0b2tlbi52YWx1ZSA9ICcjUkVGISc7XG4gICAgICAgIGRlbGV0ZSB0b2tlbi5ncm91cElkO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIHJlZi5yYW5nZSA9IHJhbmdlO1xuICAgICAgICB0b2tlbi52YWx1ZSA9IHN0cmluZ2lmeUExUmVmKHJlZiwgcmVmT3B0cyk7XG4gICAgICB9XG4gICAgICAvLyBpZiB0b2tlbiBpbmNsdWRlcyBvZmZzZXRzLCB0aG9zZSBvZmZzZXRzIGFyZSBub3cgbGlrZWx5IHdyb25nIVxuICAgICAgaWYgKHRva2VuLmxvYykge1xuICAgICAgICB0b2tlbi5sb2NbMF0gKz0gb2Zmc2V0U2tldztcbiAgICAgICAgb2Zmc2V0U2tldyArPSB0b2tlbi52YWx1ZS5sZW5ndGggLSB0b2tlblZhbHVlLmxlbmd0aDtcbiAgICAgICAgdG9rZW4ubG9jWzFdICs9IG9mZnNldFNrZXc7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKG9mZnNldFNrZXcgJiYgdG9rZW4ubG9jKSB7XG4gICAgICB0b2tlbi5sb2NbMF0gKz0gb2Zmc2V0U2tldztcbiAgICAgIHRva2VuLmxvY1sxXSArPSBvZmZzZXRTa2V3O1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGlzU3RyaW5nXG4gICAgPyB0b2tlbnMubWFwKGQgPT4gZC52YWx1ZSkuam9pbignJylcbiAgICA6IHRva2Vucztcbn1cbiIsImltcG9ydCB7IHN0cmluZ2lmeVByZWZpeCwgc3RyaW5naWZ5UHJlZml4QWx0IH0gZnJvbSAnLi9zdHJpbmdpZnlQcmVmaXguanMnO1xuXG5mdW5jdGlvbiBxdW90ZUNvbG5hbWUgKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoLyhbW1xcXSMnQF0pL2csICdcXCckMScpO1xufVxuXG5mdW5jdGlvbiBuZWVkc0JyYWNlcyAoc3RyKSB7XG4gIHJldHVybiAhL15bYS16QS1aMC05XFx1MDBhMS1cXHVmZmZmXSskLy50ZXN0KHN0cik7XG59XG5cbmZ1bmN0aW9uIHRvU2VudGVuY2VDYXNlIChzdHIpIHtcbiAgcmV0dXJuIHN0clswXS50b1VwcGVyQ2FzZSgpICsgc3RyLnNsaWNlKDEpLnRvTG93ZXJDYXNlKCk7XG59XG5cbi8qKlxuICogR2V0IGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgc3RydWN0dXJlZCByZWZlcmVuY2Ugb2JqZWN0LlxuICpcbiAqIGBgYGpzXG4gKiBzdHJpbmdpZnlTdHJ1Y3RSZWYoe1xuICogICBjb250ZXh0OiBbICd3b3JrYm9vay54bHN4JyBdLFxuICogICBzZWN0aW9uczogWyAnZGF0YScgXSxcbiAqICAgY29sdW1uczogWyAnbXkgY29sdW1uJywgJ0Bmb28nIF0sXG4gKiAgIHRhYmxlOiAndGFibGVOYW1lJyxcbiAqIH0pO1xuICogLy8gPT4gJ3dvcmtib29rLnhsc3ghdGFibGVOYW1lW1sjRGF0YV0sW0NvbHVtbjFdOltDb2x1bW4yXV0nXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1JlZmVyZW5jZVN0cnVjdH0gcmVmT2JqZWN0IEEgc3RydWN0dXJlZCByZWZlcmVuY2Ugb2JqZWN0XG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dICBPcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnhsc3g9ZmFsc2VdICBTd2l0Y2hlcyB0byB0aGUgYFsxXVNoZWV0MSFBMWAgb3IgYFsxXSFuYW1lYCBwcmVmaXggc3ludGF4IGZvcm0gZm9yIGV4dGVybmFsIHdvcmtib29rcy4gU2VlOiBbUHJlZml4ZXMubWRdKC4vUHJlZml4ZXMubWQpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnRoaXNSb3c9ZmFsc2VdICBFbmZvcmNlcyB1c2luZyB0aGUgYFsjVGhpcyBSb3ddYCBpbnN0ZWFkIG9mIHRoZSBgQGAgc2hvcnRoYW5kIHdoZW4gc2VyaWFsaXppbmcgc3RydWN0dXJlZCByYW5nZXMuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgc3RydWN0dXJlZCByZWZlcmVuY2UgaW4gc3RyaW5nIGZvcm1hdFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5naWZ5U3RydWN0UmVmIChyZWZPYmplY3QsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IHhsc3gsIHRoaXNSb3cgfSA9IG9wdGlvbnM7XG4gIGxldCBzID0geGxzeFxuICAgID8gc3RyaW5naWZ5UHJlZml4QWx0KHJlZk9iamVjdClcbiAgICA6IHN0cmluZ2lmeVByZWZpeChyZWZPYmplY3QpO1xuXG4gIGlmIChyZWZPYmplY3QudGFibGUpIHtcbiAgICBzICs9IHJlZk9iamVjdC50YWJsZTtcbiAgfVxuICBjb25zdCBudW1Db2x1bW5zID0gcmVmT2JqZWN0LmNvbHVtbnM/Lmxlbmd0aCA/PyAwO1xuICBjb25zdCBudW1TZWN0aW9ucyA9IHJlZk9iamVjdC5zZWN0aW9ucz8ubGVuZ3RoID8/IDA7XG4gIC8vIHNpbmdsZSBzZWN0aW9uXG4gIGlmIChudW1TZWN0aW9ucyA9PT0gMSAmJiAhbnVtQ29sdW1ucykge1xuICAgIHMgKz0gYFsjJHt0b1NlbnRlbmNlQ2FzZShyZWZPYmplY3Quc2VjdGlvbnNbMF0pfV1gO1xuICB9XG4gIC8vIHNpbmdsZSBjb2x1bW5cbiAgZWxzZSBpZiAoIW51bVNlY3Rpb25zICYmIG51bUNvbHVtbnMgPT09IDEpIHtcbiAgICBzICs9IGBbJHtxdW90ZUNvbG5hbWUocmVmT2JqZWN0LmNvbHVtbnNbMF0pfV1gO1xuICB9XG4gIGVsc2Uge1xuICAgIHMgKz0gJ1snO1xuICAgIC8vIHNpbmdsZSBbI3RoaXMgcm93XSBzZWN0aW9ucyBnZXQgbm9ybWFsaXplZCB0byBhbiBAIGJ5IGRlZmF1bHRcbiAgICBjb25zdCBzaW5nbGVBdCA9ICF0aGlzUm93ICYmIG51bVNlY3Rpb25zID09PSAxICYmIHJlZk9iamVjdC5zZWN0aW9uc1swXS50b0xvd2VyQ2FzZSgpID09PSAndGhpcyByb3cnO1xuICAgIGlmIChzaW5nbGVBdCkge1xuICAgICAgcyArPSAnQCc7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bVNlY3Rpb25zKSB7XG4gICAgICBzICs9IHJlZk9iamVjdC5zZWN0aW9uc1xuICAgICAgICAubWFwKGQgPT4gYFsjJHt0b1NlbnRlbmNlQ2FzZShkKX1dYClcbiAgICAgICAgLmpvaW4oJywnKTtcbiAgICAgIGlmIChudW1Db2x1bW5zKSB7XG4gICAgICAgIHMgKz0gJywnO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBhIGNhc2Ugb2YgYSBzaW5nbGUgYWxwaGFudW1iZXJpYyBjb2x1bW4gd2l0aCBhIFsjdGhpcyByb3ddIGJlY29tZXMgW0Bjb2xdXG4gICAgaWYgKHNpbmdsZUF0ICYmIHJlZk9iamVjdC5jb2x1bW5zLmxlbmd0aCA9PT0gMSAmJiAhbmVlZHNCcmFjZXMocmVmT2JqZWN0LmNvbHVtbnNbMF0pKSB7XG4gICAgICBzICs9IHF1b3RlQ29sbmFtZShyZWZPYmplY3QuY29sdW1uc1swXSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKG51bUNvbHVtbnMpIHtcbiAgICAgIHMgKz0gcmVmT2JqZWN0LmNvbHVtbnMuc2xpY2UoMCwgMilcbiAgICAgICAgLm1hcChkID0+IChgWyR7cXVvdGVDb2xuYW1lKGQpfV1gKSlcbiAgICAgICAgLmpvaW4oJzonKTtcbiAgICB9XG4gICAgcyArPSAnXSc7XG4gIH1cbiAgcmV0dXJuIHM7XG59XG4iLCJleHBvcnQgeyB0b2tlbml6ZSB9IGZyb20gJy4vbGV4ZXIuanMnO1xuZXhwb3J0IHsgcGFyc2UgfSBmcm9tICcuL3BhcnNlci5qcyc7XG5leHBvcnQgeyBhZGRUb2tlbk1ldGEgfSBmcm9tICcuL2FkZFRva2VuTWV0YS5qcyc7XG5leHBvcnQgeyB0cmFuc2xhdGVUb1IxQzEsIHRyYW5zbGF0ZVRvQTEgfSBmcm9tICcuL3RyYW5zbGF0ZS5qcyc7XG5leHBvcnQgeyBNQVhfQ09MUywgTUFYX1JPV1MgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5leHBvcnQgeyBtZXJnZVJlZlRva2VucyB9IGZyb20gJy4vbWVyZ2VSZWZUb2tlbnMuanMnO1xuZXhwb3J0IHsgZml4UmFuZ2VzIH0gZnJvbSAnLi9maXhSYW5nZXMuanMnO1xuZXhwb3J0IHtcbiAgaXNFcnJvcixcbiAgaXNGdW5jdGlvbixcbiAgaXNGeFByZWZpeCxcbiAgaXNMaXRlcmFsLFxuICBpc09wZXJhdG9yLFxuICBpc1JhbmdlLFxuICBpc1JlZmVyZW5jZSxcbiAgaXNXaGl0ZXNwYWNlXG59IGZyb20gJy4vaXNUeXBlLmpzJztcblxuZXhwb3J0IHsgZnJvbUNvbCB9IGZyb20gJy4vZnJvbUNvbC5qcyc7XG5leHBvcnQgeyB0b0NvbCB9IGZyb20gJy4vdG9Db2wuanMnO1xuXG5leHBvcnQge1xuICBwYXJzZUExUmVmLFxuICBzdHJpbmdpZnlBMVJlZixcbiAgYWRkQTFSYW5nZUJvdW5kc1xufSBmcm9tICcuL2ExLmpzJztcblxuZXhwb3J0IHtcbiAgcGFyc2VSMUMxUmVmLFxuICBzdHJpbmdpZnlSMUMxUmVmXG59IGZyb20gJy4vcmMuanMnO1xuXG5leHBvcnQgeyBzdHJpbmdpZnlTdHJ1Y3RSZWYgfSBmcm9tICcuL3N0cmluZ2lmeVN0cnVjdFJlZi5qcyc7XG5leHBvcnQgeyBwYXJzZVN0cnVjdFJlZiB9IGZyb20gJy4vcGFyc2VTdHJ1Y3RSZWYuanMnO1xuXG5pbXBvcnQge1xuICAvLyB0b2tlbiB0eXBlc1xuICBPUEVSQVRPUixcbiAgQk9PTEVBTixcbiAgRVJST1IsXG4gIE5VTUJFUixcbiAgRlVOQ1RJT04sXG4gIE5FV0xJTkUsXG4gIFdISVRFU1BBQ0UsXG4gIFNUUklORyxcbiAgQ09OVEVYVCxcbiAgQ09OVEVYVF9RVU9URSxcbiAgUkVGX1JBTkdFLFxuICBSRUZfQkVBTSxcbiAgUkVGX1RFUk5BUlksXG4gIFJFRl9OQU1FRCxcbiAgUkVGX1NUUlVDVCxcbiAgRlhfUFJFRklYLFxuICBVTktOT1dOLFxuICAvLyBBU1QgdHlwZXNcbiAgVU5BUlksXG4gIEJJTkFSWSxcbiAgUkVGRVJFTkNFLFxuICBMSVRFUkFMLFxuICBFUlJPUl9MSVRFUkFMLFxuICBDQUxMLFxuICBBUlJBWSxcbiAgSURFTlRJRklFUlxufSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5cbi8qKlxuICogQSBkaWN0aW9uYXJ5IG9mIHRoZSB0eXBlcyB1c2VkIHRvIGlkZW50aWZ5IHRva2VuIHZhcmlhbnRzLlxuICpcbiAqIEByZWFkb25seVxuICogQGNvbnN0YW50IHtPYmplY3Q8c3RyaW5nPn0gdG9rZW5UeXBlc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IE9QRVJBVE9SIC0gTmV3bGluZSAoYFxcbmApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gQk9PTEVBTiAtIEJvb2xlYW4gbGl0ZXJhbCAoYFRSVUVgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEVSUk9SIC0gRXJyb3IgbGl0ZXJhbCAoYCNWQUxVRSFgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IE5VTUJFUiAtIE51bWJlciBsaXRlcmFsIChgMTIzLjRgLCBgLTEuNWUrMmApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gRlVOQ1RJT04gLSBGdW5jdGlvbiBuYW1lIChgU1VNYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBORVdMSU5FIC0gTmV3bGluZSBjaGFyYWN0ZXIgKGBcXG5gKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFdISVRFU1BBQ0UgLSBXaGl0ZXNwYWNlIGNoYXJhY3RlciBzZXF1ZW5jZSAoYCBgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFNUUklORyAtIFN0cmluZyBsaXRlcmFsIChgXCJMb3JlbSBpcHN1bVwiYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBDT05URVhUIC0gUmVmZXJlbmNlIGNvbnRleHQgKFtXb3JrYm9vay54bHN4XVNoZWV0MSlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBDT05URVhUX1FVT1RFIC0gUXVvdGVkIHJlZmVyZW5jZSBjb250ZXh0IChgJ1tNeSB3b3JrYm9vay54bHN4XVNoZWV0MSdgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFRl9SQU5HRSAtIEEgcmFuZ2UgaWRlbnRpZmllciAoYEExYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRUZfQkVBTSAtIEEgcmFuZ2UgXCJiZWFtXCIgaWRlbnRpZmllciAoYEE6QWAgb3IgYDE6MWApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gUkVGX1RFUk5BUlkgLSBBIHRlcm5hcnkgcmFuZ2UgaWRlbnRpZmllciAoYEIyOkJgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFRl9OQU1FRCAtIEEgbmFtZSAvIG5hbWVkIHJhbmdlIGlkZW50aWZpZXIgKGBpbmNvbWVgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IFJFRl9TVFJVQ1QgLSBBIHN0cnVjdHVyZWQgcmVmZXJlbmNlIGlkZW50aWZpZXIgKGB0YWJsZVtbQ29sdW1uMV06W0NvbHVtbjJdXWApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gRlhfUFJFRklYIC0gQSBsZWFkaW5nIGVxdWFscyBzaWduIGF0IHRoZSBzdGFydCBvZiBhIGZvcm11bGEgKGA9YClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBVTktOT1dOIC0gQW55IHVuaWRlbnRpZmlhYmxlIHJhbmdlIG9mIGNoYXJhY3RlcnMuXG4gKiBAc2VlIHRva2VuaXplXG4gKi9cbmV4cG9ydCBjb25zdCB0b2tlblR5cGVzID0gT2JqZWN0LmZyZWV6ZSh7XG4gIE9QRVJBVE9SLFxuICBCT09MRUFOLFxuICBFUlJPUixcbiAgTlVNQkVSLFxuICBGVU5DVElPTixcbiAgTkVXTElORSxcbiAgV0hJVEVTUEFDRSxcbiAgU1RSSU5HLFxuICBDT05URVhULFxuICBDT05URVhUX1FVT1RFLFxuICBSRUZfUkFOR0UsXG4gIFJFRl9CRUFNLFxuICBSRUZfVEVSTkFSWSxcbiAgUkVGX05BTUVELFxuICBSRUZfU1RSVUNULFxuICBGWF9QUkVGSVgsXG4gIFVOS05PV05cbn0pO1xuXG4vKipcbiAqIEEgZGljdGlvbmFyeSBvZiB0aGUgdHlwZXMgdXNlZCB0byBpZGVudGlmeSBBU1Qgbm9kZSB2YXJpYW50cy5cbiAqXG4gKiBAcmVhZG9ubHlcbiAqIEBjb25zdGFudCB7T2JqZWN0PHN0cmluZz59IG5vZGVUeXBlc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFVOQVJZIC0gQSB1bmFyeSBvcGVyYXRpb24gKGAxMCVgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEJJTkFSWSAtIEEgYmluYXJ5IG9wZXJhdGlvbiAoYDEwKzEwYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBSRUZFUkVOQ0UgLSBBIHJhbmdlIGlkZW50aWZpZXIgKGBBMWApXG4gKiBAcHJvcGVydHkge3N0cmluZ30gTElURVJBTCAtIEEgbGl0ZXJhbCAobnVtYmVyLCBzdHJpbmcsIG9yIGJvb2xlYW4pIChgMTIzYCwgYFwiZm9vXCJgLCBgZmFsc2VgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IEVSUk9SIC0gQW4gZXJyb3IgbGl0ZXJhbCAoYCNWQUxVRSFgKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IENBTEwgLSBBIGZ1bmN0aW9uIGNhbGwgZXhwcmVzc2lvbiAoYFNVTSgxLDIpYClcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBBUlJBWSAtIEFuIGFycmF5IGV4cHJlc3Npb24gKGB7MSwyOzMsNH1gKVxuICogQHByb3BlcnR5IHtzdHJpbmd9IElERU5USUZJRVIgLSBBIGZ1bmN0aW9uIG5hbWUgaWRlbnRpZmllciAoYFNVTWApXG4gKiBAc2VlIHBhcnNlXG4gKi9cbmV4cG9ydCBjb25zdCBub2RlVHlwZXMgPSBPYmplY3QuZnJlZXplKHtcbiAgVU5BUlksXG4gIEJJTkFSWSxcbiAgUkVGRVJFTkNFLFxuICBMSVRFUkFMLFxuICBFUlJPUjogRVJST1JfTElURVJBTCxcbiAgQ0FMTCxcbiAgQVJSQVksXG4gIElERU5USUZJRVJcbn0pO1xuIiwiaW1wb3J0IHsgaXNSYW5nZSB9IGZyb20gJy4vaXNUeXBlLmpzJztcbmltcG9ydCB7IHBhcnNlQTFSZWYsIHN0cmluZ2lmeUExUmVmLCBhZGRBMVJhbmdlQm91bmRzIH0gZnJvbSAnLi9hMS5qcyc7XG5pbXBvcnQgeyBwYXJzZVN0cnVjdFJlZiB9IGZyb20gJy4vcGFyc2VTdHJ1Y3RSZWYuanMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5U3RydWN0UmVmIH0gZnJvbSAnLi9zdHJpbmdpZnlTdHJ1Y3RSZWYuanMnO1xuaW1wb3J0IHsgdG9rZW5pemUgfSBmcm9tICcuL2xleGVyLmpzJztcbmltcG9ydCB7IFJFRl9TVFJVQ1QgfSBmcm9tICcuL2NvbnN0YW50cy5qcyc7XG5cbi8vIFRoZXJlIGlzIG5vIFIxQzEgY291bnRlcnBhcnQgdG8gdGhpcy4gVGhpcyBpcyBiZWNhdXNlIHdpdGhvdXQgYW4gYW5jaG9yIGNlbGxcbi8vIGl0IGlzIGltcG9zc2libGUgdG8gZGV0ZXJtaW5lIGlmIGEgcmVsYXRpdmUrYWJzb2x1dGUgcmFuZ2UgKFJbMV1DWzFdOlI1QzUpXG4vLyBuZWVkcyB0byBiZSBmbGlwcGVkIG9yIG5vdC4gVGhlIHNvbHV0aW9uIGlzIHRvIGNvbnZlcnQgdG8gQTEgZmlyc3Q6XG4vLyB0cmFuc2xhdGVUb1JDKGZpeFJhbmdlcyh0cmFuc2xhdGVUb0ExKC4uLikpKVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgQTEgc3R5bGUgcmFuZ2VzIGFuZCBzdHJ1Y3R1cmVkIHJlZmVyZW5jZXMgaW4gYSBmb3JtdWxhIG9yIGxpc3Qgb2ZcbiAqIHRva2Vucy5cbiAqIFxuICogSXQgZW5zdXJlcyB0aGF0IHRoYXQgdGhlIHRvcCBhbmQgbGVmdCBjb29yZGluYXRlcyBvZiBhbiBBMSByYW5nZSBhcmUgb24gdGhlXG4gKiBsZWZ0LWhhbmQgc2lkZSBvZiBhIGNvbG9uIG9wZXJhdG9yOlxuICpcbiAqIGBCMjpBMWAg4oaSIGBBMTpCMmAgIFxuICogYDE6QTFgIOKGkiBgQTE6MWAgIFxuICogYEE6QTFgIOKGkiBgQTE6QWAgIFxuICogYEI6QWAg4oaSIGBBOkJgICBcbiAqIGAyOjFgIOKGkiBgMToyYCAgXG4gKiBgQTE6QTFgIOKGkiBgQTFgICBcbiAqXG4gKiBXaGVuIGB7IGFkZEJvdW5kczogdHJ1ZSB9YCBpcyBwYXNzZWQgYXMgYW4gb3B0aW9uLCB0aGUgbWlzc2luZyBib3VuZHMgYXJlXG4gKiBhbHNvIGFkZGVkLiBUaGlzIGNhbiBiZSBkb25lIHRvIGVuc3VyZSBFeGNlbCBjb21wYXRpYmxlIHJhbmdlcy4gVGhlIGZpeGVzXG4gKiB0aGVuIGFkZGl0aW9uYWxseSBpbmNsdWRlOlxuICpcbiAqIGAxOkExYCDihpIgYEExOjFgIOKGkiBgMToxYCAgXG4gKiBgQTpBMWAg4oaSIGBBMTpBYCDihpIgYEE6QWAgIFxuICogYEExOkFgIOKGkiBgQTpBYCAgXG4gKiBgQTE6MWAg4oaSIGBBOjFgICBcbiAqIGBCMjpCYCDihpIgYEIyOjEwNDg1NzZgICBcbiAqIGBCMjoyYCDihpIgYEIyOlhGRDJgICBcbiAqXG4gKiBTdHJ1Y3R1cmVkIHJhbmdlcyBhcmUgbm9ybWFsaXplZCBjbGVhbmVkIHVwIHRvIGhhdmUgY29uc2lzdGVudCBvcmRlciBhbmRcbiAqIGNhcGl0YWxpemF0aW9uIG9mIHNlY3Rpb25zIGFzIHdlbGwgYXMgcmVtb3ZpbmcgcmVkdW5kYW50IG9uZXMuXG4gKlxuICogUmV0dXJucyB0aGUgc2FtZSBmb3JtdWxhIHdpdGggdGhlIHJhbmdlcyB1cGRhdGVkLiBJZiBhbiBhcnJheSBvZiB0b2tlbnMgd2FzXG4gKiBzdXBwbGllZCwgdGhlbiBhIG5ldyBhcnJheSBpcyByZXR1cm5lZC5cbiAqXG4gKiBAcGFyYW0geyhzdHJpbmcgfCBBcnJheTxUb2tlbj4pfSBmb3JtdWxhIEEgc3RyaW5nIChhbiBFeGNlbCBmb3JtdWxhKSBvciBhIHRva2VuIGxpc3QgdGhhdCBzaG91bGQgYmUgYWRqdXN0ZWQuXG4gKiBAcGFyYW0ge29iamVjdH0gW29wdGlvbnM9e31dICBPcHRpb25zXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLmFkZEJvdW5kcz1mYWxzZV0gIEZpbGwgaW4gYW55IHVuZGVmaW5lZCBib3VuZHMgb2YgcmFuZ2Ugb2JqZWN0cy4gVG9wIHRvIDAsIGJvdHRvbSB0byAxMDQ4NTc1LCBsZWZ0IHRvIDAsIGFuZCByaWdodCB0byAxNjM4My5cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMueGxzeD1mYWxzZV0gIFN3aXRjaGVzIHRvIHRoZSBgWzFdU2hlZXQxIUExYCBvciBgWzFdIW5hbWVgIHByZWZpeCBzeW50YXggZm9ybSBmb3IgZXh0ZXJuYWwgd29ya2Jvb2tzLiBTZWU6IFtQcmVmaXhlcy5tZF0oLi9QcmVmaXhlcy5tZClcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdGlvbnMudGhpc1Jvdz1mYWxzZV0gIEVuZm9yY2VzIHVzaW5nIHRoZSBgWyNUaGlzIFJvd11gIGluc3RlYWQgb2YgdGhlIGBAYCBzaG9ydGhhbmQgd2hlbiBzZXJpYWxpemluZyBzdHJ1Y3R1cmVkIHJhbmdlcy5cbiAqIEByZXR1cm5zIHsoc3RyaW5nIHwgQXJyYXk8VG9rZW4+KX0gQSBmb3JtdWxhIHN0cmluZyBvciB0b2tlbiBsaXN0IChkZXBlbmRpbmcgb24gd2hpY2ggd2FzIGlucHV0KVxuICovXG5leHBvcnQgZnVuY3Rpb24gZml4UmFuZ2VzIChmb3JtdWxhLCBvcHRpb25zID0geyBhZGRCb3VuZHM6IGZhbHNlIH0pIHtcbiAgaWYgKHR5cGVvZiBmb3JtdWxhID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmaXhSYW5nZXModG9rZW5pemUoZm9ybXVsYSwgb3B0aW9ucyksIG9wdGlvbnMpXG4gICAgICAubWFwKGQgPT4gZC52YWx1ZSlcbiAgICAgIC5qb2luKCcnKTtcbiAgfVxuICBpZiAoIUFycmF5LmlzQXJyYXkoZm9ybXVsYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpeFJhbmdlcyBleHBlY3RzIGFuIGFycmF5IG9mIHRva2VucycpO1xuICB9XG4gIGNvbnN0IHsgYWRkQm91bmRzLCByMWMxLCB4bHN4LCB0aGlzUm93IH0gPSBvcHRpb25zO1xuICBpZiAocjFjMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignZml4UmFuZ2VzIGRvZXMgbm90IGhhdmUgYW4gUjFDMSBtb2RlJyk7XG4gIH1cbiAgbGV0IG9mZnNldFNrZXcgPSAwO1xuICByZXR1cm4gZm9ybXVsYS5tYXAodCA9PiB7XG4gICAgY29uc3QgdG9rZW4gPSB7IC4uLnQgfTtcbiAgICBpZiAodC5sb2MpIHtcbiAgICAgIHRva2VuLmxvYyA9IFsgLi4udC5sb2MgXTtcbiAgICB9XG4gICAgbGV0IG9mZnNldERlbHRhID0gMDtcbiAgICBpZiAodG9rZW4udHlwZSA9PT0gUkVGX1NUUlVDVCkge1xuICAgICAgY29uc3Qgc3JlZiA9IHBhcnNlU3RydWN0UmVmKHRva2VuLnZhbHVlLCB7IHhsc3ggfSk7XG4gICAgICBjb25zdCBuZXdWYWx1ZSA9IHN0cmluZ2lmeVN0cnVjdFJlZihzcmVmLCB7IHhsc3gsIHRoaXNSb3cgfSk7XG4gICAgICBvZmZzZXREZWx0YSA9IG5ld1ZhbHVlLmxlbmd0aCAtIHRva2VuLnZhbHVlLmxlbmd0aDtcbiAgICAgIHRva2VuLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUmFuZ2UodG9rZW4pKSB7XG4gICAgICBjb25zdCByZWYgPSBwYXJzZUExUmVmKHRva2VuLnZhbHVlLCB7IHhsc3gsIGFsbG93VGVybmFyeTogdHJ1ZSB9KTtcbiAgICAgIGNvbnN0IHJhbmdlID0gcmVmLnJhbmdlO1xuICAgICAgLy8gZmlsbCBtaXNzaW5nIGRpbWVuc2lvbnM/XG4gICAgICBpZiAoYWRkQm91bmRzKSB7XG4gICAgICAgIGFkZEExUmFuZ2VCb3VuZHMocmFuZ2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgbmV3VmFsdWUgPSBzdHJpbmdpZnlBMVJlZihyZWYsIHsgeGxzeCB9KTtcbiAgICAgIG9mZnNldERlbHRhID0gbmV3VmFsdWUubGVuZ3RoIC0gdG9rZW4udmFsdWUubGVuZ3RoO1xuICAgICAgdG9rZW4udmFsdWUgPSBuZXdWYWx1ZTtcbiAgICB9XG4gICAgLy8gZW5zdXJlIHRoYXQgcG9zaXRpb25pbmcgaXMgc3RpbGwgY29ycmVjdFxuICAgIGlmIChvZmZzZXRTa2V3IHx8IG9mZnNldERlbHRhKSB7XG4gICAgICBpZiAodG9rZW4ubG9jKSB7XG4gICAgICAgIHRva2VuLmxvY1swXSArPSBvZmZzZXRTa2V3O1xuICAgICAgfVxuICAgICAgb2Zmc2V0U2tldyArPSBvZmZzZXREZWx0YTtcbiAgICAgIGlmICh0b2tlbi5sb2MpIHtcbiAgICAgICAgdG9rZW4ubG9jWzFdICs9IG9mZnNldFNrZXc7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgb2Zmc2V0U2tldyArPSBvZmZzZXREZWx0YTtcbiAgICB9XG4gICAgcmV0dXJuIHRva2VuO1xuICB9KTtcbn1cblxuIl0sIm5hbWVzIjpbIk9QRVJBVE9SIiwiT1BFUkFUT1JfVFJJTSIsIkJPT0xFQU4iLCJFUlJPUiIsIk5VTUJFUiIsIkZVTkNUSU9OIiwiTkVXTElORSIsIldISVRFU1BBQ0UiLCJTVFJJTkciLCJDT05URVhUX1FVT1RFIiwiQ09OVEVYVCIsIlJFRl9SQU5HRSIsIlJFRl9CRUFNIiwiUkVGX1RFUk5BUlkiLCJSRUZfTkFNRUQiLCJSRUZfU1RSVUNUIiwiRlhfUFJFRklYIiwiVU5LTk9XTiIsIlVOQVJZIiwiQklOQVJZIiwiUkVGRVJFTkNFIiwiTElURVJBTCIsIkVSUk9SX0xJVEVSQUwiLCJDQUxMIiwiTEFNQkRBIiwiTEVUIiwiQVJSQVkiLCJJREVOVElGSUVSIiwiTUFYX0NPTFMiLCJNQVhfUk9XUyIsImZyb21Db2wiLCJjb2x1bW5TdHJpbmciLCJ4IiwibCIsImxlbmd0aCIsIm4iLCJjIiwiY2hhckNvZGVBdCIsInJlX1NSY29sdW1uQiIsInJlX1NSY29sdW1uTiIsImtleVRlcm1zIiwiaGVhZGVycyIsImRhdGEiLCJ0b3RhbHMiLCJhbGwiLCJmeiIsIl9sZW4iLCJhcmd1bWVudHMiLCJhIiwiQXJyYXkiLCJfa2V5IiwiT2JqZWN0IiwiZnJlZXplIiwic2VjdGlvbk1hcCIsIm1hdGNoQ29sdW1uIiwicyIsImFsbG93VW5icmFjZWQiLCJ1bmRlZmluZWQiLCJtIiwiZXhlYyIsInZhbHVlIiwic2xpY2UiLCJyZXBsYWNlIiwicGFyc2VTUmFuZ2UiLCJyYXciLCJjb2x1bW5zIiwibTEiLCJwb3MiLCJ0ZXJtcyIsImsiLCJ0b0xvd2VyQ2FzZSIsInB1c2giLCJleHBlY3RfbW9yZSIsImxlZnRDb2wiLCJyaWdodENvbCIsInNlY3Rpb25zIiwiY29uY2F0IiwidG9rZW4iLCJyZV9DT05URVhUIiwicmVfQ09OVEVYVF9RVU9URSIsInJuZ1BhcnQiLCJjb2xQYXJ0Iiwicm93UGFydCIsInJhbmdlT3AiLCJuZXh0Tm90Q2hhciIsInJlX0ExQ09MIiwiUmVnRXhwIiwicmVfQTFST1ciLCJyZV9BMVJBTkdFIiwicmVfQTFQQVJUSUFMIiwiclBhcnQiLCJjUGFydCIsInJlX1JDQ09MIiwicmVfUkNST1ciLCJyZV9SQ1JBTkdFIiwicmVfUkNQQVJUSUFMIiwicmVfTkFNRUQiLCJtYWtlSGFuZGxlciIsInR5cGUiLCJyZSIsInN0ciIsImxleE5hbWVkIiwibGMiLCJyZV9RVU9URURfVkFMVUUiLCJyZV9RVU9URURfVkFMVUVfWExTWCIsImxleENvbnRleHQiLCJvcHRpb25zIiwibXEiLCJ4bHN4IiwidGVzdCIsImIiLCJsZXhTdHJ1Y3R1cmVkIiwic3RydWN0RGF0YSIsImkiLCJyZVJDTnVtcyIsInJlQTFOdW1zIiwibGV4UmFuZ2UiLCJ0IiwicjFjMSIsImFsbG93VGVybmFyeSIsImxhc3RJbmRleCIsInZhbCIsInBhcnNlSW50IiwibGV4ZXJzIiwibGV4ZXJzUmVmcyIsIm9wdHMiLCJyZWZQYXJ0c1RyZWUiLCJwYWNrTGlzdCIsImYiLCJub2RlIiwia2V5IiwiZm9yRWFjaCIsInJ1biIsInJldmVyc2UiLCJtYXRjaGVyIiwidG9rZW5zIiwiY3Vyck5vZGUiLCJhbmNob3JJbmRleCIsImluZGV4IiwibWVyZ2VSZWZUb2tlbnMiLCJ0b2tlbmxpc3QiLCJmaW5hbFRva2VucyIsInZhbGlkIiwidG9NZXJnZSIsIm1hcCIsImQiLCJqb2luIiwibG9jIiwidW5zaGlmdCIsImlzVHlwZSIsImRlZmF1bHRPcHRpb25zIiwid2l0aExvY2F0aW9uIiwibWVyZ2VSZWZzIiwibmVnYXRpdmVOdW1iZXJzIiwiaXNUZXh0VG9rZW4iLCJjYXVzZXNCaW5hcnlNaW51cyIsImdldFRva2VucyIsImZ4IiwidG9rZW5IYW5kbGVycyIsImFzc2lnbiIsImxldE9yTGFtYmRhIiwidW5rbm93blJDIiwidHJpbU9wcyIsInRhaWwwIiwidGFpbDEiLCJsYXN0VG9rZW4iLCJwdXNoVG9rZW4iLCJpc0N1cnJVbmtub3duIiwiaXNMYXN0VW5rbm93biIsInN0YXJ0UG9zIiwidG9rZW5UeXBlIiwidG9rZW5WYWx1ZSIsImxhc3RMQyIsInZhbExDIiwidW50ZXJtaW5hdGVkIiwicCIsImxhc3QxIiwibWludXMiLCJwb3AiLCJ3aXRoaW5DYWxsIiwicGFyZW5EZXB0aCIsInYiLCJmaXhSQ05hbWVzIiwiYmVmb3JlIiwiYWZ0ZXIiLCJ0b2tlbml6ZSIsImZvcm11bGEiLCJpc1JhbmdlIiwiaXNSZWZlcmVuY2UiLCJpc0xpdGVyYWwiLCJpc0Vycm9yIiwiaXNXaGl0ZXNwYWNlIiwiaXNGdW5jdGlvbiIsImlzRnhQcmVmaXgiLCJpc09wZXJhdG9yIiwiRU5EIiwicmVmRnVuY3Rpb25zIiwiaXNSZWZlcmVuY2VGdW5jdGlvbk5hbWUiLCJmbk5hbWUiLCJpbmNsdWRlcyIsInRvVXBwZXJDYXNlIiwiaXNSZWZlcmVuY2VOb2RlIiwib3BlcmF0b3IiLCJjYWxsZWUiLCJuYW1lIiwic3ltYm9sVGFibGUiLCJjdXJyZW50Tm9kZSIsInRva2VuSW5kZXgiLCJwZXJtaXRBcnJheVJhbmdlcyIsInBlcm1pdEFycmF5Q2FsbHMiLCJoYWx0IiwibWVzc2FnZSIsImF0SW5kZXgiLCJlcnIiLCJFcnJvciIsInNvdXJjZSIsInNvdXJjZU9mZnNldCIsInJlZHVjZSIsInJlZklzVXBjb21pbmciLCJuZXh0IiwiYWxsb3dPcGVyYXRvcnMiLCJ0cmltIiwiaXNSZWZlcmVuY2VUb2tlbiIsImFkdmFuY2UiLCJleHBlY3ROZXh0IiwibGVmdE5vZGUiLCJpZCIsImhhdmVSZWYiLCJwb3NzaWJsZVdTT3AiLCJuZXh0SXNDYWxsIiwiY3JlYXRlIiwiZXhwcmVzc2lvbiIsInJicCIsImxlZnQiLCJudWQiLCJsYnAiLCJsZWQiLCJvcmlnaW5hbF9zeW1ib2wiLCJzeW1ib2wiLCJicCIsImluZml4IiwidGhpcyIsInJpZ2h0IiwicG9zdGZpeCIsInByZWZpeCIsInN1YmV4cHIiLCJyYW5nZUluZml4IiwiY29tbWEiLCJ1bmlvblJlZnMiLCJlbmFibGUiLCJjdXJyU3RhdGUiLCJwYXJzZUxhbWJkYSIsImFyZ3MiLCJhcmdOYW1lcyIsImJvZHkiLCJkb25lIiwicHJldlN0YXRlIiwiYXJnVG9rZW5JbmRleCIsImFyZyIsImtpbmQiLCJjdXJyTmFtZSIsInBhcmFtcyIsInBhcnNlTGV0IiwidmFscyIsImFyZ0NvdW50ZXIiLCJhZGRBcmd1bWVudCIsImxhc3RBcmciLCJsYXN0V2FzQ29tbWEiLCJkZWNsYXJhdGlvbnMiLCJpbml0Iiwic3BsaXRQcmVmaXgiLCJzdHJpbmdzT25seSIsImluQnJhY2UiLCJjdXJyU3RyIiwicGFydHMiLCJmbHVzaCIsImJyYWNlZCIsImNoYXIiLCJzcGxpdENvbnRleHQiLCJjb250ZXh0U3RyaW5nIiwiY29udGV4dCIsInNwbGl0Q29udGV4dFhsc3giLCJjdHgiLCJ3b3JrYm9va05hbWUiLCJzaGVldE5hbWUiLCJpdGVtIiwiZSIsImxjRm4iLCJjYWxsIiwiY2xvc2VQYXJlbiIsInJvdyIsInJvd3MiLCJjbG9zaW5nQnJhY2UiLCJlbGVtZW50cyIsInBSYW5nZU9wIiwicFJhbmdlIiwicjAiLCJwUGFydGlhbCIsInBSYW5nZTIiLCJyMSIsInBCYW5nIiwicEJlYW0iLCJwU3RydWN1cmVkIiwic3RydWN0IiwicENvbnRleHQiLCJzcGxpdHRlciIsInBOYW1lZCIsInZhbGlkUnVucyIsInZhbGlkUnVuc05hbWVkIiwicGFyc2VSZWYiLCJyZWYiLCJhbGxvd05hbWVkIiwicmVmRGF0YSIsInNoaWZ0IiwicnVucyIsImV2ZXJ5IiwicGFyc2UiLCJqIiwiY2hhckZyb20iLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJ0b0NvbCIsImNvbHVtbkluZGV4IiwicmVCYW5uZWRDaGFycyIsInN0cmluZ2lmeVByZWZpeCIsInByZSIsInF1b3RlIiwibnRoIiwic2NvcGUiLCJzdHJpbmdpZnlQcmVmaXhBbHQiLCJjbGFtcCIsIm1pbiIsIm1heCIsIk1hdGgiLCJ0b0NvbFN0ciIsInRvUm93U3RyIiwiciIsInJhbmdlT3BlcmF0b3IiLCJ0cmltRGlyZWN0aW9uIiwiaGVhZCIsInRhaWwiLCJzcGxpdEExIiwicm93U3RyIiwiZnJvbUExIiwicmFuZ2VTdHJpbmciLCJ0b3AiLCJib3R0b20iLCIkdG9wIiwiJGxlZnQiLCIkYm90dG9tIiwiJHJpZ2h0IiwicGFydDEiLCJvcDEiLCJwYXJ0MiIsIm9wMiIsInBhcnQzIiwic3BsaXQiLCJwMSIsInAyIiwicGFyc2VBMVJlZiIsInJlZlN0cmluZyIsInJhbmdlIiwic3RyaW5naWZ5QTFSZWYiLCJyZWZPYmplY3QiLCJub0xlZnQiLCJub1JpZ2h0Iiwibm9Ub3AiLCJub0JvdHRvbSIsIm9wIiwidG9BMSIsImFkZEExUmFuZ2VCb3VuZHMiLCJwYXJzZVN0cnVjdFJlZiIsInRhYmxlIiwic2FtZVZhbHVlIiwic2FtZUFycmF5IiwiaXNBcnJheSIsInNhbWVTdHIiLCJ0b0Nvb3JkIiwiaXNBYnMiLCJwYXJzZVIxQzFQYXJ0IiwiYzAiLCIkcjAiLCIkYzAiLCJybSIsImNtIiwiZnJvbVIxQzEiLCJmaW5hbCIsIm92ZXJmbG93IiwiZXh0ZW5kVG8iLCJjMSIsIiRyMSIsIiRjMSIsInBhcnNlUjFDMVJlZiIsInN0cmluZ2lmeVIxQzFSZWYiLCJudWxsUjAiLCJudWxsQzAiLCJudWxsUjEiLCJudWxsQzEiLCJoYXNUcmltIiwic19yMCIsInNfcjEiLCJzX2MwIiwic19jMSIsInRvUjFDMSIsImNhbGMiLCJhYnMiLCJ2WCIsImFYIiwic2V0dGluZ3MiLCJ0b0ZpeGVkIiwiYmFzZSIsIndyYXBFZGdlcyIsIk5hTiIsInF1b3RlQ29sbmFtZSIsInRvU2VudGVuY2VDYXNlIiwic3RyaW5naWZ5U3RydWN0UmVmIiwidGhpc1JvdyIsIm51bUNvbHVtbnMiLCJudW1TZWN0aW9ucyIsInNpbmdsZUF0IiwidG9rZW5UeXBlcyIsIm5vZGVUeXBlcyIsInBhcmVuU3RhY2siLCJhcnJheVN0YXJ0IiwidWlkIiwiZ2V0SURlciIsImtub3duUmVmcyIsImdldEN1cnJEZXB0aCIsImRlcHRoIiwiY291bnRlciIsInBhaXJJZCIsImdyb3VwSWQiLCJlcnJvciIsImFkZENvbnRleHQiLCJrbm93biIsImZpbmQiLCJyZWZBIiwicmVmQiIsImlzRXF1aXZhbGVudCIsImZpeFJhbmdlcyIsImFkZEJvdW5kcyIsIm9mZnNldFNrZXciLCJvZmZzZXREZWx0YSIsIm5ld1ZhbHVlIiwicm9vdCIsImFuY2hvckNlbGwiLCJhbmNob3IiLCJpc1N0cmluZyIsInJlZk9wdHMiLCJpc05hTiJdLCJtYXBwaW5ncyI6ImFBQU8sTUFBTUEsRUFBVyxXQUNYQyxFQUFnQixnQkFDaEJDLEVBQVUsT0FDVkMsRUFBUSxRQUNSQyxFQUFTLFNBQ1RDLEVBQVcsT0FDWEMsRUFBVSxVQUNWQyxFQUFhLGFBQ2JDLEVBQVMsU0FDVEMsRUFBZ0IsZ0JBQ2hCQyxFQUFVLFVBQ1ZDLEVBQVksUUFDWkMsRUFBVyxhQUNYQyxFQUFjLGdCQUNkQyxFQUFZLGNBQ1pDLEVBQWEsYUFDYkMsRUFBWSxZQUNaQyxFQUFVLFVBRVZDLEVBQVEsa0JBQ1JDLEVBQVMsbUJBQ1RDLEVBQVksc0JBQ1pDLEVBQVUsVUFDVkMsRUFBZ0IsZUFDaEJDLEVBQU8saUJBQ1BDLEVBQVMsbUJBQ1RDLEVBQU0sZ0JBQ05DLEVBQVEsa0JBQ1JDLEVBQWEsYUFHYkMsRUFBWSxNQUNaQyxFQUFZLFFDckJsQixTQUFTQyxFQUFTQyxHQUN2QixNQUFNQyxFQUFLRCxHQUFnQixHQUNyQkUsRUFBSUQsRUFBRUUsT0FDWixJQUFJQyxFQUFJLEVBQ1IsR0FBSUYsRUFBSSxFQUFHLENBQ1QsTUFBTUcsRUFBSUosRUFBRUssV0FBV0osRUFBSSxHQUUzQkUsR0FBd0IsS0FBbEIsRUFBSUMsR0FEQUEsRUFBSSxHQUFLLEdBQUssR0FDTixHQUNwQixDQUNBLEdBQUlILEVBQUksRUFBRyxDQUNULE1BQU1HLEVBQUlKLEVBQUVLLFdBQVdKLEVBQUksR0FFM0JFLEdBQXdCLElBQWxCLEVBQUlDLEdBREFBLEVBQUksR0FBSyxHQUFLLEdBQ04sR0FDcEIsQ0FDQSxHQUFJSCxFQUFHLENBQ0wsTUFBTUcsRUFBSUosRUFBRUssV0FBV0osRUFBSSxHQUUzQkUsR0FBTUMsR0FESUEsRUFBSSxHQUFLLEdBQUssR0FDVCxFQUNqQixDQUNBLE9BQU9ELENBQ1QsQ0MvQkEsTUFBTUcsRUFBZSwr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