react-bootstrap-table-ng-overlay 4.18.0 → 4.19.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/react-bootstrap-table-ng-overlay.js +3 -3
- package/dist/react-bootstrap-table-ng-overlay.min.js +3 -3
- package/lib/index.d.ts +0 -6
- package/lib/index.js +3 -3
- package/lib/index.js.map +1 -1
- package/lib/src/loading-overlay-spinner.d.ts +8 -0
- package/lib/src/loading-overlay-spinner.js +34 -0
- package/lib/src/loading-overlay-spinner.js.map +1 -0
- package/lib/src/loading-overlay-styles.d.ts +52 -0
- package/lib/src/loading-overlay-styles.js +78 -0
- package/lib/src/loading-overlay-styles.js.map +1 -0
- package/lib/src/loading-overlay.d.ts +63 -0
- package/lib/src/loading-overlay.js +179 -0
- package/lib/src/loading-overlay.js.map +1 -0
- package/package.json +7 -6
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["react","react-dom"],t):"object"==typeof exports?exports.ReactBootstrapTableNgOverlay=t(require("react"),require("react-dom")):e.ReactBootstrapTableNgOverlay=t(e.React,e.ReactDOM)}(self,(e,t)=>(()=>{var n={3(e){"use strict";e.exports=t},88(e,t,n){"use strict";n.r(t),n.d(t,{cache:()=>Re,css:()=>Ne,cx:()=>Se,flush:()=>ke,getRegisteredStyles:()=>Oe,hydrate:()=>we,injectGlobal:()=>_e,keyframes:()=>Ae,merge:()=>Ce,sheet:()=>Te});var r=function(){function e(e){var t=this;this._insertTag=function(e){var n;n=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,n),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){this.ctr%(this.isSpeedy?65e3:1)==0&&this._insertTag(function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}(this));var t=this.tags[this.tags.length-1];if(this.isSpeedy){var n=function(e){if(e.sheet)return e.sheet;for(var t=0;t<document.styleSheets.length;t++)if(document.styleSheets[t].ownerNode===e)return document.styleSheets[t]}(t);try{n.insertRule(e,n.cssRules.length)}catch(e){}}else t.appendChild(document.createTextNode(e));this.ctr++},t.flush=function(){this.tags.forEach(function(e){var t;return null==(t=e.parentNode)?void 0:t.removeChild(e)}),this.tags=[],this.ctr=0},e}(),a=Math.abs,i=String.fromCharCode,s=Object.assign;function o(e){return e.trim()}function c(e,t,n){return e.replace(t,n)}function l(e,t){return e.indexOf(t)}function u(e,t){return 0|e.charCodeAt(t)}function d(e,t,n){return e.slice(t,n)}function p(e){return e.length}function f(e){return e.length}function h(e,t){return t.push(e),e}var v=1,m=1,y=0,g=0,x=0,E="";function b(e,t,n,r,a,i,s){return{value:e,root:t,parent:n,type:r,props:a,children:i,line:v,column:m,length:s,return:""}}function k(e,t){return s(b("",null,null,"",null,null,0),e,{length:-e.length},t)}function w(){return x=g>0?u(E,--g):0,m--,10===x&&(m=1,v--),x}function S(){return x=g<y?u(E,g++):0,m++,10===x&&(m=1,v++),x}function C(){return u(E,g)}function O(){return g}function _(e,t){return d(E,e,t)}function A(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function N(e){return v=m=1,y=p(E=e),g=0,[]}function T(e){return E="",e}function R(e){return o(_(g-1,P(91===e?e+2:40===e?e+1:e)))}function $(e){for(;(x=C())&&x<33;)S();return A(e)>2||A(x)>3?"":" "}function j(e,t){for(;--t&&S()&&!(x<48||x>102||x>57&&x<65||x>70&&x<97););return _(e,O()+(t<6&&32==C()&&32==S()))}function P(e){for(;S();)switch(x){case e:return g;case 34:case 39:34!==e&&39!==e&&P(x);break;case 40:41===e&&P(e);break;case 92:S()}return g}function M(e,t){for(;S()&&e+x!==57&&(e+x!==84||47!==C()););return"/*"+_(t,g-1)+"*"+i(47===e?e:S())}function D(e){for(;!A(C());)S();return _(e,g)}var L="-ms-",F="-moz-",I="-webkit-",q="comm",G="rule",V="decl",W="@keyframes";function z(e,t){for(var n="",r=f(e),a=0;a<r;a++)n+=t(e[a],a,e,t)||"";return n}function U(e,t,n,r){switch(e.type){case"@layer":if(e.children.length)break;case"@import":case V:return e.return=e.return||e.value;case q:return"";case W:return e.return=e.value+"{"+z(e.children,r)+"}";case G:e.value=e.props.join(",")}return p(n=z(e.children,r))?e.return=e.value+"{"+n+"}":""}function B(e){return T(H("",null,null,null,[""],e=N(e),0,[0],e))}function H(e,t,n,r,a,s,o,d,f){for(var v=0,m=0,y=o,g=0,x=0,E=0,b=1,k=1,_=1,A=0,N="",T=a,P=s,L=r,F=N;k;)switch(E=A,A=S()){case 40:if(108!=E&&58==u(F,y-1)){-1!=l(F+=c(R(A),"&","&\f"),"&\f")&&(_=-1);break}case 34:case 39:case 91:F+=R(A);break;case 9:case 10:case 13:case 32:F+=$(E);break;case 92:F+=j(O()-1,7);continue;case 47:switch(C()){case 42:case 47:h(Y(M(S(),O()),t,n),f);break;default:F+="/"}break;case 123*b:d[v++]=p(F)*_;case 125*b:case 59:case 0:switch(A){case 0:case 125:k=0;case 59+m:-1==_&&(F=c(F,/\f/g,"")),x>0&&p(F)-y&&h(x>32?Z(F+";",r,n,y-1):Z(c(F," ","")+";",r,n,y-2),f);break;case 59:F+=";";default:if(h(L=X(F,t,n,v,m,a,d,N,T=[],P=[],y),s),123===A)if(0===m)H(F,t,L,L,T,s,y,d,P);else switch(99===g&&110===u(F,3)?100:g){case 100:case 108:case 109:case 115:H(e,L,L,r&&h(X(e,L,L,0,0,a,d,N,a,T=[],y),P),a,P,y,d,r?T:P);break;default:H(F,L,L,L,[""],P,0,d,P)}}v=m=x=0,b=_=1,N=F="",y=o;break;case 58:y=1+p(F),x=E;default:if(b<1)if(123==A)--b;else if(125==A&&0==b++&&125==w())continue;switch(F+=i(A),A*b){case 38:_=m>0?1:(F+="\f",-1);break;case 44:d[v++]=(p(F)-1)*_,_=1;break;case 64:45===C()&&(F+=R(S())),g=C(),m=y=p(N=F+=D(O())),A++;break;case 45:45===E&&2==p(F)&&(b=0)}}return s}function X(e,t,n,r,i,s,l,u,p,h,v){for(var m=i-1,y=0===i?s:[""],g=f(y),x=0,E=0,k=0;x<r;++x)for(var w=0,S=d(e,m+1,m=a(E=l[x])),C=e;w<g;++w)(C=o(E>0?y[w]+" "+S:c(S,/&\f/g,y[w])))&&(p[k++]=C);return b(e,t,n,0===i?G:u,p,h,v)}function Y(e,t,n){return b(e,t,n,q,i(x),d(e,2,-2),0)}function Z(e,t,n,r){return b(e,t,n,V,d(e,0,r),d(e,r+1,-1),r)}var J=function(e,t,n){for(var r=0,a=0;r=a,a=C(),38===r&&12===a&&(t[n]=1),!A(a);)S();return _(e,g)},K=function(e,t){return T(function(e,t){var n=-1,r=44;do{switch(A(r)){case 0:38===r&&12===C()&&(t[n]=1),e[n]+=J(g-1,t,n);break;case 2:e[n]+=R(r);break;case 4:if(44===r){e[++n]=58===C()?"&\f":"",t[n]=e[n].length;break}default:e[n]+=i(r)}}while(r=S());return e}(N(e),t))},Q=new WeakMap,ee=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,n=e.parent,r=e.column===n.column&&e.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||Q.get(n))&&!r){Q.set(e,!0);for(var a=[],i=K(t,a),s=n.props,o=0,c=0;o<i.length;o++)for(var l=0;l<s.length;l++,c++)e.props[c]=a[o]?i[o].replace(/&\f/g,s[l]):s[l]+" "+i[o]}}},te=function(e){if("decl"===e.type){var t=e.value;108===t.charCodeAt(0)&&98===t.charCodeAt(2)&&(e.return="",e.value="")}};function ne(e,t){switch(function(e,t){return 45^u(e,0)?(((t<<2^u(e,0))<<2^u(e,1))<<2^u(e,2))<<2^u(e,3):0}(e,t)){case 5103:return I+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return I+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return I+e+F+e+L+e+e;case 6828:case 4268:return I+e+L+e+e;case 6165:return I+e+L+"flex-"+e+e;case 5187:return I+e+c(e,/(\w+).+(:[^]+)/,I+"box-$1$2"+L+"flex-$1$2")+e;case 5443:return I+e+L+"flex-item-"+c(e,/flex-|-self/,"")+e;case 4675:return I+e+L+"flex-line-pack"+c(e,/align-content|flex-|-self/,"")+e;case 5548:return I+e+L+c(e,"shrink","negative")+e;case 5292:return I+e+L+c(e,"basis","preferred-size")+e;case 6060:return I+"box-"+c(e,"-grow","")+I+e+L+c(e,"grow","positive")+e;case 4554:return I+c(e,/([^-])(transform)/g,"$1"+I+"$2")+e;case 6187:return c(c(c(e,/(zoom-|grab)/,I+"$1"),/(image-set)/,I+"$1"),e,"")+e;case 5495:case 3959:return c(e,/(image-set\([^]*)/,I+"$1$`$1");case 4968:return c(c(e,/(.+:)(flex-)?(.*)/,I+"box-pack:$3"+L+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+I+e+e;case 4095:case 3583:case 4068:case 2532:return c(e,/(.+)-inline(.+)/,I+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(p(e)-1-t>6)switch(u(e,t+1)){case 109:if(45!==u(e,t+4))break;case 102:return c(e,/(.+:)(.+)-([^]+)/,"$1"+I+"$2-$3$1"+F+(108==u(e,t+3)?"$3":"$2-$3"))+e;case 115:return~l(e,"stretch")?ne(c(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==u(e,t+1))break;case 6444:switch(u(e,p(e)-3-(~l(e,"!important")&&10))){case 107:return c(e,":",":"+I)+e;case 101:return c(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+I+(45===u(e,14)?"inline-":"")+"box$3$1"+I+"$2$3$1"+L+"$2box$3")+e}break;case 5936:switch(u(e,t+11)){case 114:return I+e+L+c(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return I+e+L+c(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return I+e+L+c(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return I+e+L+e+e}return e}var re=[function(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case V:e.return=ne(e.value,e.length);break;case W:return z([k(e,{value:c(e.value,"@","@"+I)})],r);case G:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,function(t){switch(function(e,t){return(e=t.exec(e))?e[0]:e}(t,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return z([k(e,{props:[c(t,/:(read-\w+)/,":-moz-$1")]})],r);case"::placeholder":return z([k(e,{props:[c(t,/:(plac\w+)/,":"+I+"input-$1")]}),k(e,{props:[c(t,/:(plac\w+)/,":-moz-$1")]}),k(e,{props:[c(t,/:(plac\w+)/,L+"input-$1")]})],r)}return""})}}],ae=function(e){var t=e.key;if("css"===t){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))})}var a,i,s=e.stylisPlugins||re,o={},c=[];a=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),function(e){for(var t=e.getAttribute("data-emotion").split(" "),n=1;n<t.length;n++)o[t[n]]=!0;c.push(e)});var l,u,d,p,h=[U,(p=function(e){l.insert(e)},function(e){e.root||(e=e.return)&&p(e)})],v=(u=[ee,te].concat(s,h),d=f(u),function(e,t,n,r){for(var a="",i=0;i<d;i++)a+=u[i](e,t,n,r)||"";return a});i=function(e,t,n,r){l=n,z(B(e?e+"{"+t.styles+"}":t.styles),v),r&&(m.inserted[t.name]=!0)};var m={key:t,sheet:new r({key:t,container:a,nonce:e.nonce,speedy:e.speedy,prepend:e.prepend,insertionPoint:e.insertionPoint}),nonce:e.nonce,inserted:o,registered:{},insert:i};return m.sheet.hydrate(c),m};var ie={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,scale:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};function se(e){var t=Object.create(null);return function(n){return void 0===t[n]&&(t[n]=e(n)),t[n]}}var oe=/[A-Z]|^ms/g,ce=/_EMO_([^_]+?)_([^]*?)_EMO_/g,le=function(e){return 45===e.charCodeAt(1)},ue=function(e){return null!=e&&"boolean"!=typeof e},de=se(function(e){return le(e)?e:e.replace(oe,"-$&").toLowerCase()}),pe=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(ce,function(e,t,n){return he={name:t,styles:n,next:he},t})}return 1===ie[e]||le(e)||"number"!=typeof t||0===t?t:t+"px"};function fe(e,t,n){if(null==n)return"";var r=n;if(void 0!==r.__emotion_styles)return r;switch(typeof n){case"boolean":return"";case"object":var a=n;if(1===a.anim)return he={name:a.name,styles:a.styles,next:he},a.name;var i=n;if(void 0!==i.styles){var s=i.next;if(void 0!==s)for(;void 0!==s;)he={name:s.name,styles:s.styles,next:he},s=s.next;return i.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var a=0;a<n.length;a++)r+=fe(e,t,n[a])+";";else for(var i in n){var s=n[i];if("object"!=typeof s){var o=s;null!=t&&void 0!==t[o]?r+=i+"{"+t[o]+"}":ue(o)&&(r+=de(i)+":"+pe(i,o)+";")}else if(!Array.isArray(s)||"string"!=typeof s[0]||null!=t&&void 0!==t[s[0]]){var c=fe(e,t,s);switch(i){case"animation":case"animationName":r+=de(i)+":"+c+";";break;default:r+=i+"{"+c+"}"}}else for(var l=0;l<s.length;l++)ue(s[l])&&(r+=de(i)+":"+pe(i,s[l])+";")}return r}(e,t,n);case"function":if(void 0!==e){var o=he,c=n(e);return he=o,fe(e,t,c)}}var l=n;if(null==t)return l;var u=t[l];return void 0!==u?u:l}var he,ve=/label:\s*([^\s;{]+)\s*(;|$)/g;function me(e,t,n){if(1===e.length&&"object"==typeof e[0]&&null!==e[0]&&void 0!==e[0].styles)return e[0];var r=!0,a="";he=void 0;var i=e[0];null==i||void 0===i.raw?(r=!1,a+=fe(n,t,i)):a+=i[0];for(var s=1;s<e.length;s++){if(a+=fe(n,t,e[s]),r)a+=i[s]}ve.lastIndex=0;for(var o,c="";null!==(o=ve.exec(a));)c+="-"+o[1];var l=function(e){for(var t,n=0,r=0,a=e.length;a>=4;++r,a-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(a){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)}(a)+c;return{name:l,styles:a,next:he}}function ye(e,t,n){var r="";return n.split(" ").forEach(function(n){void 0!==e[n]?t.push(e[n]+";"):n&&(r+=n+" ")}),r}function ge(e,t){if(void 0===e.inserted[t.name])return e.insert("",t,e.sheet,!0)}function xe(e,t,n){var r=[],a=ye(e,r,n);return r.length<2?n:a+t(r)}var Ee=function e(t){for(var n="",r=0;r<t.length;r++){var a=t[r];if(null!=a){var i=void 0;switch(typeof a){case"boolean":break;case"object":if(Array.isArray(a))i=e(a);else for(var s in i="",a)a[s]&&s&&(i&&(i+=" "),i+=s);break;default:i=a}i&&(n&&(n+=" "),n+=i)}}return n},be=function(e){var t=ae(e);t.sheet.speedy=function(e){this.isSpeedy=e},t.compat=!0;var n=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var a=me(n,t.registered,void 0);return function(e,t,n){!function(e,t,n){var r=e.key+"-"+t.name;!1===n&&void 0===e.registered[r]&&(e.registered[r]=t.styles)}(e,t,n);var r=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var a=t;do{e.insert(t===a?"."+r:"",a,e.sheet,!0),a=a.next}while(void 0!==a)}}(t,a,!1),t.key+"-"+a.name};return{css:n,cx:function(){for(var e=arguments.length,r=new Array(e),a=0;a<e;a++)r[a]=arguments[a];return xe(t.registered,n,Ee(r))},injectGlobal:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var a=me(n,t.registered);ge(t,a)},keyframes:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var a=me(n,t.registered),i="animation-"+a.name;return ge(t,{name:a.name,styles:"@keyframes "+i+"{"+a.styles+"}"}),i},hydrate:function(e){e.forEach(function(e){t.inserted[e]=!0})},flush:function(){t.registered={},t.inserted={},t.sheet.flush()},sheet:t.sheet,cache:t,getRegisteredStyles:ye.bind(null,t.registered),merge:xe.bind(null,t.registered,n)}}({key:"css"}),ke=be.flush,we=be.hydrate,Se=be.cx,Ce=be.merge,Oe=be.getRegisteredStyles,_e=be.injectGlobal,Ae=be.keyframes,Ne=be.css,Te=be.sheet,Re=be.cache},310(e,t,n){"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(null,arguments)}function a(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}function i(e,t){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},i(e,t)}function s(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,i(e,t)}function o(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}n.r(t),n.d(t,{CSSTransition:()=>C,ReplaceTransition:()=>j,SwitchTransition:()=>V,Transition:()=>k,TransitionGroup:()=>R,config:()=>p});var c=n(442),l=n.n(c),u=n(3),d=n.n(u);const p={disabled:!1},f=l().createContext(null);var h=function(e){return e.scrollTop},v="unmounted",m="exited",y="entering",g="entered",x="exiting",E=function(e){function t(t,n){var r;r=e.call(this,t,n)||this;var a,i=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?i?(a=m,r.appearStatus=y):a=g:a=t.unmountOnExit||t.mountOnEnter?v:m,r.state={status:a},r.nextCallback=null,r}s(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===v?{status:m}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==y&&n!==g&&(t=y):n!==y&&n!==g||(t=x)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===y){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:d().findDOMNode(this);n&&h(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===m&&this.setState({status:v})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,a=this.props.nodeRef?[r]:[d().findDOMNode(this),r],i=a[0],s=a[1],o=this.getTimeouts(),c=r?o.appear:o.enter;!e&&!n||p.disabled?this.safeSetState({status:g},function(){t.props.onEntered(i)}):(this.props.onEnter(i,s),this.safeSetState({status:y},function(){t.props.onEntering(i,s),t.onTransitionEnd(c,function(){t.safeSetState({status:g},function(){t.props.onEntered(i,s)})})}))},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:d().findDOMNode(this);t&&!p.disabled?(this.props.onExit(r),this.safeSetState({status:x},function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,function(){e.safeSetState({status:m},function(){e.props.onExited(r)})})})):this.safeSetState({status:m},function(){e.props.onExited(r)})},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:d().findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var a=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],i=a[0],s=a[1];this.props.addEndListener(i,s)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},n.render=function(){var e=this.state.status;if(e===v)return null;var t=this.props,n=t.children,r=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,a(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return l().createElement(f.Provider,{value:null},"function"==typeof n?n(e,r):l().cloneElement(l().Children.only(n),r))},t}(l().Component);function b(){}E.contextType=f,E.propTypes={},E.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:b,onEntering:b,onEntered:b,onExit:b,onExiting:b,onExited:b},E.UNMOUNTED=v,E.EXITED=m,E.ENTERING=y,E.ENTERED=g,E.EXITING=x;const k=E;var w=function(e,t){return e&&t&&t.split(" ").forEach(function(t){return r=t,void((n=e).classList?n.classList.remove(r):"string"==typeof n.className?n.className=o(n.className,r):n.setAttribute("class",o(n.className&&n.className.baseVal||"",r)));var n,r})},S=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).appliedClasses={appear:{},enter:{},exit:{}},t.onEnter=function(e,n){var r=t.resolveArguments(e,n),a=r[0],i=r[1];t.removeClasses(a,"exit"),t.addClass(a,i?"appear":"enter","base"),t.props.onEnter&&t.props.onEnter(e,n)},t.onEntering=function(e,n){var r=t.resolveArguments(e,n),a=r[0],i=r[1]?"appear":"enter";t.addClass(a,i,"active"),t.props.onEntering&&t.props.onEntering(e,n)},t.onEntered=function(e,n){var r=t.resolveArguments(e,n),a=r[0],i=r[1]?"appear":"enter";t.removeClasses(a,i),t.addClass(a,i,"done"),t.props.onEntered&&t.props.onEntered(e,n)},t.onExit=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"appear"),t.removeClasses(n,"enter"),t.addClass(n,"exit","base"),t.props.onExit&&t.props.onExit(e)},t.onExiting=function(e){var n=t.resolveArguments(e)[0];t.addClass(n,"exit","active"),t.props.onExiting&&t.props.onExiting(e)},t.onExited=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"exit"),t.addClass(n,"exit","done"),t.props.onExited&&t.props.onExited(e)},t.resolveArguments=function(e,n){return t.props.nodeRef?[t.props.nodeRef.current,e]:[e,n]},t.getClassNames=function(e){var n=t.props.classNames,r="string"==typeof n,a=r?""+(r&&n?n+"-":"")+e:n[e];return{baseClassName:a,activeClassName:r?a+"-active":n[e+"Active"],doneClassName:r?a+"-done":n[e+"Done"]}},t}s(t,e);var n=t.prototype;return n.addClass=function(e,t,n){var r=this.getClassNames(t)[n+"ClassName"],a=this.getClassNames("enter").doneClassName;"appear"===t&&"done"===n&&a&&(r+=" "+a),"active"===n&&e&&h(e),r&&(this.appliedClasses[t][n]=r,function(e,t){e&&t&&t.split(" ").forEach(function(t){return r=t,void((n=e).classList?n.classList.add(r):function(e,t){return e.classList?!!t&&e.classList.contains(t):-1!==(" "+(e.className.baseVal||e.className)+" ").indexOf(" "+t+" ")}(n,r)||("string"==typeof n.className?n.className=n.className+" "+r:n.setAttribute("class",(n.className&&n.className.baseVal||"")+" "+r)));var n,r})}(e,r))},n.removeClasses=function(e,t){var n=this.appliedClasses[t],r=n.base,a=n.active,i=n.done;this.appliedClasses[t]={},r&&w(e,r),a&&w(e,a),i&&w(e,i)},n.render=function(){var e=this.props,t=(e.classNames,a(e,["classNames"]));return l().createElement(k,r({},t,{onEnter:this.onEnter,onEntered:this.onEntered,onEntering:this.onEntering,onExit:this.onExit,onExiting:this.onExiting,onExited:this.onExited}))},t}(l().Component);S.defaultProps={classNames:""},S.propTypes={};const C=S;function O(e,t){var n=Object.create(null);return e&&c.Children.map(e,function(e){return e}).forEach(function(e){n[e.key]=function(e){return t&&(0,c.isValidElement)(e)?t(e):e}(e)}),n}function _(e,t,n){return null!=n[t]?n[t]:e.props[t]}function A(e,t,n){var r=O(e.children),a=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,a=Object.create(null),i=[];for(var s in e)s in t?i.length&&(a[s]=i,i=[]):i.push(s);var o={};for(var c in t){if(a[c])for(r=0;r<a[c].length;r++){var l=a[c][r];o[a[c][r]]=n(l)}o[c]=n(c)}for(r=0;r<i.length;r++)o[i[r]]=n(i[r]);return o}(t,r);return Object.keys(a).forEach(function(i){var s=a[i];if((0,c.isValidElement)(s)){var o=i in t,l=i in r,u=t[i],d=(0,c.isValidElement)(u)&&!u.props.in;!l||o&&!d?l||!o||d?l&&o&&(0,c.isValidElement)(u)&&(a[i]=(0,c.cloneElement)(s,{onExited:n.bind(null,s),in:u.props.in,exit:_(s,"exit",e),enter:_(s,"enter",e)})):a[i]=(0,c.cloneElement)(s,{in:!1}):a[i]=(0,c.cloneElement)(s,{onExited:n.bind(null,s),in:!0,exit:_(s,"exit",e),enter:_(s,"enter",e)})}}),a}var N=Object.values||function(e){return Object.keys(e).map(function(t){return e[t]})},T=function(e){function t(t,n){var r,a=(r=e.call(this,t,n)||this).handleExited.bind(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(r));return r.state={contextValue:{isMounting:!0},handleExited:a,firstRender:!0},r}s(t,e);var n=t.prototype;return n.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},n.componentWillUnmount=function(){this.mounted=!1},t.getDerivedStateFromProps=function(e,t){var n,r,a=t.children,i=t.handleExited;return{children:t.firstRender?(n=e,r=i,O(n.children,function(e){return(0,c.cloneElement)(e,{onExited:r.bind(null,e),in:!0,appear:_(e,"appear",n),enter:_(e,"enter",n),exit:_(e,"exit",n)})})):A(e,a,i),firstRender:!1}},n.handleExited=function(e,t){var n=O(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState(function(t){var n=r({},t.children);return delete n[e.key],{children:n}}))},n.render=function(){var e=this.props,t=e.component,n=e.childFactory,r=a(e,["component","childFactory"]),i=this.state.contextValue,s=N(this.state.children).map(n);return delete r.appear,delete r.enter,delete r.exit,null===t?l().createElement(f.Provider,{value:i},s):l().createElement(f.Provider,{value:i},l().createElement(t,r,s))},t}(l().Component);T.propTypes={},T.defaultProps={component:"div",childFactory:function(e){return e}};const R=T;var $=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).handleEnter=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEnter",0,n)},t.handleEntering=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntering",0,n)},t.handleEntered=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntered",0,n)},t.handleExit=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExit",1,n)},t.handleExiting=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExiting",1,n)},t.handleExited=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExited",1,n)},t}s(t,e);var n=t.prototype;return n.handleLifecycle=function(e,t,n){var r,a=this.props.children,i=l().Children.toArray(a)[t];if(i.props[e]&&(r=i.props)[e].apply(r,n),this.props[e]){var s=i.props.nodeRef?void 0:d().findDOMNode(this);this.props[e](s)}},n.render=function(){var e=this.props,t=e.children,n=e.in,r=a(e,["children","in"]),i=l().Children.toArray(t),s=i[0],o=i[1];return delete r.onEnter,delete r.onEntering,delete r.onEntered,delete r.onExit,delete r.onExiting,delete r.onExited,l().createElement(R,r,n?l().cloneElement(s,{key:"first",onEnter:this.handleEnter,onEntering:this.handleEntering,onEntered:this.handleEntered}):l().cloneElement(o,{key:"second",onEnter:this.handleExit,onEntering:this.handleExiting,onEntered:this.handleExited}))},t}(l().Component);$.propTypes={};const j=$;var P,M;var D="out-in",L="in-out",F=function(e,t,n){return function(){var r;e.props[t]&&(r=e.props)[t].apply(r,arguments),n()}},I=((P={})[D]=function(e){var t=e.current,n=e.changeState;return l().cloneElement(t,{in:!1,onExited:F(t,"onExited",function(){n(y,null)})})},P[L]=function(e){var t=e.current,n=e.changeState,r=e.children;return[t,l().cloneElement(r,{in:!0,onEntered:F(r,"onEntered",function(){n(y)})})]},P),q=((M={})[D]=function(e){var t=e.children,n=e.changeState;return l().cloneElement(t,{in:!0,onEntered:F(t,"onEntered",function(){n(g,l().cloneElement(t,{in:!0}))})})},M[L]=function(e){var t=e.current,n=e.children,r=e.changeState;return[l().cloneElement(t,{in:!1,onExited:F(t,"onExited",function(){r(g,l().cloneElement(n,{in:!0}))})}),l().cloneElement(n,{in:!0})]},M),G=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).state={status:g,current:null},t.appeared=!1,t.changeState=function(e,n){void 0===n&&(n=t.state.current),t.setState({status:e,current:n})},t}s(t,e);var n=t.prototype;return n.componentDidMount=function(){this.appeared=!0},t.getDerivedStateFromProps=function(e,t){return null==e.children?{current:null}:t.status===y&&e.mode===L?{status:y}:!t.current||(n=t.current,r=e.children,n===r||l().isValidElement(n)&&l().isValidElement(r)&&null!=n.key&&n.key===r.key)?{current:l().cloneElement(e.children,{in:!0})}:{status:x};var n,r},n.render=function(){var e,t=this.props,n=t.children,r=t.mode,a=this.state,i=a.status,s=a.current,o={children:n,current:s,changeState:this.changeState,status:i};switch(i){case y:e=q[r](o);break;case x:e=I[r](o);break;case g:e=s}return l().createElement(f.Provider,{value:{isMounting:!this.appeared}},e)},t}(l().Component);G.propTypes={},G.defaultProps={mode:D};const V=G},442(t){"use strict";t.exports=e},544(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return a(t,e),t},s=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const o=n(88),c=n(310),l=i(n(442)),u=s(n(968)),d=s(n(908));class p extends l.default.Component{constructor(e){super(e),this.wrapper=(0,l.createRef)(),this.nodeRef=(0,l.createRef)(),this.getStyles=(e,t)=>{const n=d.default[e](t,this.props),r=this.props.styles?this.props.styles[e]:void 0;return r?"function"==typeof r?r(n,this.props):r:n},this.cx=(e,...t)=>{const n=Array.isArray(e)?e:[e];return(0,o.cx)(...n.map(e=>{var t;return e?`${null!==(t=this.props.classNamePrefix)&&void 0!==t?t:"_loading_overlay_"}${e}`:""}),...t)},this.state={overflowCSS:{}}}componentDidMount(){const e=window.getComputedStyle(this.wrapper.current),t=["overflow","overflowX","overflowY"].reduce((t,n)=>("visible"!==e[n]&&(t[n]="hidden"),t),{});this.setState({overflowCSS:t})}componentDidUpdate(e){const{active:t}=this.props;t&&(this.wrapper.current.scrollTop=0)}render(){const{children:e,className:t,onClick:n,active:r,fadeSpeed:a=500,spinner:i,text:s}=this.props;return l.default.createElement("div",{"data-testid":"wrapper",ref:this.wrapper,className:this.cx(["wrapper",r&&"wrapper--active"],(0,o.css)(this.getStyles("wrapper",r?this.state.overflowCSS:{})),t)},l.default.createElement(c.CSSTransition,{in:r,classNames:"_loading-overlay-transition",timeout:a,unmountOnExit:!0,ref:this.nodeRef,addEndListener:()=>{}},e=>l.default.createElement("div",{"data-testid":"overlay",className:this.cx("overlay",(0,o.css)(this.getStyles("overlay",e))),onClick:n},l.default.createElement("div",{className:this.cx("content",(0,o.css)(this.getStyles("content"))),ref:this.nodeRef},i&&("boolean"==typeof i?l.default.createElement(u.default,{cx:this.cx,getStyles:this.getStyles}):i),s))),e)}}t.default=p},556(e,t,n){e.exports=n(694)()},694(e,t,n){"use strict";var r=n(925);function a(){}function i(){}i.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,i,s){if(s!==r){var o=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw o.name="Invariant Violation",o}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:a};return n.PropTypes=n,n}},862(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(n(556)),i=r(n(442)),s=r(n(544));t.default=e=>t=>{var n;return(n=class extends i.default.Component{componentDidMount(){if(t){const{wrapper:e}=this.overlay,t=e.current.firstChild,n=e.current.parentElement.querySelector("thead"),r=e.current.parentElement.querySelector("tbody"),a=e.current.parentElement.querySelector("caption");let i=window.getComputedStyle(n).height;a&&(i=parseFloat(i.replace("px","")).toString(),i+=parseFloat(window.getComputedStyle(a).height.replace("px","")).toString(),i=`${i}px`),t.style.marginTop=i,t.style.height=window.getComputedStyle(r).height}}render(){return i.default.createElement(s.default,{ref:e=>this.overlay=e,...e,active:t},this.props.children)}}).propTypes={children:a.default.element.isRequired},n}},908(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(88),a=r.keyframes`
|
|
1
|
+
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("react"),require("react-dom")):"function"==typeof define&&define.amd?define(["react","react-dom"],t):"object"==typeof exports?exports.ReactBootstrapTableNgOverlay=t(require("react"),require("react-dom")):e.ReactBootstrapTableNgOverlay=t(e.React,e.ReactDOM)}(self,(e,t)=>(()=>{var n={3(e){"use strict";e.exports=t},88(e,t,n){"use strict";n.r(t),n.d(t,{cache:()=>Re,css:()=>Ae,cx:()=>Se,flush:()=>ke,getRegisteredStyles:()=>Oe,hydrate:()=>we,injectGlobal:()=>_e,keyframes:()=>Ne,merge:()=>Ce,sheet:()=>Te});var r=function(){function e(e){var t=this;this._insertTag=function(e){var n;n=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,n),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){this.ctr%(this.isSpeedy?65e3:1)==0&&this._insertTag(function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}(this));var t=this.tags[this.tags.length-1];if(this.isSpeedy){var n=function(e){if(e.sheet)return e.sheet;for(var t=0;t<document.styleSheets.length;t++)if(document.styleSheets[t].ownerNode===e)return document.styleSheets[t]}(t);try{n.insertRule(e,n.cssRules.length)}catch(e){}}else t.appendChild(document.createTextNode(e));this.ctr++},t.flush=function(){this.tags.forEach(function(e){var t;return null==(t=e.parentNode)?void 0:t.removeChild(e)}),this.tags=[],this.ctr=0},e}(),a=Math.abs,i=String.fromCharCode,s=Object.assign;function o(e){return e.trim()}function c(e,t,n){return e.replace(t,n)}function l(e,t){return e.indexOf(t)}function u(e,t){return 0|e.charCodeAt(t)}function d(e,t,n){return e.slice(t,n)}function p(e){return e.length}function f(e){return e.length}function h(e,t){return t.push(e),e}var v=1,m=1,g=0,y=0,x=0,E="";function b(e,t,n,r,a,i,s){return{value:e,root:t,parent:n,type:r,props:a,children:i,line:v,column:m,length:s,return:""}}function k(e,t){return s(b("",null,null,"",null,null,0),e,{length:-e.length},t)}function w(){return x=y>0?u(E,--y):0,m--,10===x&&(m=1,v--),x}function S(){return x=y<g?u(E,y++):0,m++,10===x&&(m=1,v++),x}function C(){return u(E,y)}function O(){return y}function _(e,t){return d(E,e,t)}function N(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function A(e){return v=m=1,g=p(E=e),y=0,[]}function T(e){return E="",e}function R(e){return o(_(y-1,j(91===e?e+2:40===e?e+1:e)))}function $(e){for(;(x=C())&&x<33;)S();return N(e)>2||N(x)>3?"":" "}function P(e,t){for(;--t&&S()&&!(x<48||x>102||x>57&&x<65||x>70&&x<97););return _(e,O()+(t<6&&32==C()&&32==S()))}function j(e){for(;S();)switch(x){case e:return y;case 34:case 39:34!==e&&39!==e&&j(x);break;case 40:41===e&&j(e);break;case 92:S()}return y}function M(e,t){for(;S()&&e+x!==57&&(e+x!==84||47!==C()););return"/*"+_(t,y-1)+"*"+i(47===e?e:S())}function D(e){for(;!N(C());)S();return _(e,y)}var L="-ms-",F="-moz-",I="-webkit-",q="comm",G="rule",V="decl",W="@keyframes";function z(e,t){for(var n="",r=f(e),a=0;a<r;a++)n+=t(e[a],a,e,t)||"";return n}function U(e,t,n,r){switch(e.type){case"@layer":if(e.children.length)break;case"@import":case V:return e.return=e.return||e.value;case q:return"";case W:return e.return=e.value+"{"+z(e.children,r)+"}";case G:e.value=e.props.join(",")}return p(n=z(e.children,r))?e.return=e.value+"{"+n+"}":""}function B(e){return T(H("",null,null,null,[""],e=A(e),0,[0],e))}function H(e,t,n,r,a,s,o,d,f){for(var v=0,m=0,g=o,y=0,x=0,E=0,b=1,k=1,_=1,N=0,A="",T=a,j=s,L=r,F=A;k;)switch(E=N,N=S()){case 40:if(108!=E&&58==u(F,g-1)){-1!=l(F+=c(R(N),"&","&\f"),"&\f")&&(_=-1);break}case 34:case 39:case 91:F+=R(N);break;case 9:case 10:case 13:case 32:F+=$(E);break;case 92:F+=P(O()-1,7);continue;case 47:switch(C()){case 42:case 47:h(Y(M(S(),O()),t,n),f);break;default:F+="/"}break;case 123*b:d[v++]=p(F)*_;case 125*b:case 59:case 0:switch(N){case 0:case 125:k=0;case 59+m:-1==_&&(F=c(F,/\f/g,"")),x>0&&p(F)-g&&h(x>32?Z(F+";",r,n,g-1):Z(c(F," ","")+";",r,n,g-2),f);break;case 59:F+=";";default:if(h(L=X(F,t,n,v,m,a,d,A,T=[],j=[],g),s),123===N)if(0===m)H(F,t,L,L,T,s,g,d,j);else switch(99===y&&110===u(F,3)?100:y){case 100:case 108:case 109:case 115:H(e,L,L,r&&h(X(e,L,L,0,0,a,d,A,a,T=[],g),j),a,j,g,d,r?T:j);break;default:H(F,L,L,L,[""],j,0,d,j)}}v=m=x=0,b=_=1,A=F="",g=o;break;case 58:g=1+p(F),x=E;default:if(b<1)if(123==N)--b;else if(125==N&&0==b++&&125==w())continue;switch(F+=i(N),N*b){case 38:_=m>0?1:(F+="\f",-1);break;case 44:d[v++]=(p(F)-1)*_,_=1;break;case 64:45===C()&&(F+=R(S())),y=C(),m=g=p(A=F+=D(O())),N++;break;case 45:45===E&&2==p(F)&&(b=0)}}return s}function X(e,t,n,r,i,s,l,u,p,h,v){for(var m=i-1,g=0===i?s:[""],y=f(g),x=0,E=0,k=0;x<r;++x)for(var w=0,S=d(e,m+1,m=a(E=l[x])),C=e;w<y;++w)(C=o(E>0?g[w]+" "+S:c(S,/&\f/g,g[w])))&&(p[k++]=C);return b(e,t,n,0===i?G:u,p,h,v)}function Y(e,t,n){return b(e,t,n,q,i(x),d(e,2,-2),0)}function Z(e,t,n,r){return b(e,t,n,V,d(e,0,r),d(e,r+1,-1),r)}var J=function(e,t,n){for(var r=0,a=0;r=a,a=C(),38===r&&12===a&&(t[n]=1),!N(a);)S();return _(e,y)},K=function(e,t){return T(function(e,t){var n=-1,r=44;do{switch(N(r)){case 0:38===r&&12===C()&&(t[n]=1),e[n]+=J(y-1,t,n);break;case 2:e[n]+=R(r);break;case 4:if(44===r){e[++n]=58===C()?"&\f":"",t[n]=e[n].length;break}default:e[n]+=i(r)}}while(r=S());return e}(A(e),t))},Q=new WeakMap,ee=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,n=e.parent,r=e.column===n.column&&e.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||Q.get(n))&&!r){Q.set(e,!0);for(var a=[],i=K(t,a),s=n.props,o=0,c=0;o<i.length;o++)for(var l=0;l<s.length;l++,c++)e.props[c]=a[o]?i[o].replace(/&\f/g,s[l]):s[l]+" "+i[o]}}},te=function(e){if("decl"===e.type){var t=e.value;108===t.charCodeAt(0)&&98===t.charCodeAt(2)&&(e.return="",e.value="")}};function ne(e,t){switch(function(e,t){return 45^u(e,0)?(((t<<2^u(e,0))<<2^u(e,1))<<2^u(e,2))<<2^u(e,3):0}(e,t)){case 5103:return I+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return I+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return I+e+F+e+L+e+e;case 6828:case 4268:return I+e+L+e+e;case 6165:return I+e+L+"flex-"+e+e;case 5187:return I+e+c(e,/(\w+).+(:[^]+)/,I+"box-$1$2"+L+"flex-$1$2")+e;case 5443:return I+e+L+"flex-item-"+c(e,/flex-|-self/,"")+e;case 4675:return I+e+L+"flex-line-pack"+c(e,/align-content|flex-|-self/,"")+e;case 5548:return I+e+L+c(e,"shrink","negative")+e;case 5292:return I+e+L+c(e,"basis","preferred-size")+e;case 6060:return I+"box-"+c(e,"-grow","")+I+e+L+c(e,"grow","positive")+e;case 4554:return I+c(e,/([^-])(transform)/g,"$1"+I+"$2")+e;case 6187:return c(c(c(e,/(zoom-|grab)/,I+"$1"),/(image-set)/,I+"$1"),e,"")+e;case 5495:case 3959:return c(e,/(image-set\([^]*)/,I+"$1$`$1");case 4968:return c(c(e,/(.+:)(flex-)?(.*)/,I+"box-pack:$3"+L+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+I+e+e;case 4095:case 3583:case 4068:case 2532:return c(e,/(.+)-inline(.+)/,I+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if(p(e)-1-t>6)switch(u(e,t+1)){case 109:if(45!==u(e,t+4))break;case 102:return c(e,/(.+:)(.+)-([^]+)/,"$1"+I+"$2-$3$1"+F+(108==u(e,t+3)?"$3":"$2-$3"))+e;case 115:return~l(e,"stretch")?ne(c(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==u(e,t+1))break;case 6444:switch(u(e,p(e)-3-(~l(e,"!important")&&10))){case 107:return c(e,":",":"+I)+e;case 101:return c(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+I+(45===u(e,14)?"inline-":"")+"box$3$1"+I+"$2$3$1"+L+"$2box$3")+e}break;case 5936:switch(u(e,t+11)){case 114:return I+e+L+c(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return I+e+L+c(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return I+e+L+c(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return I+e+L+e+e}return e}var re=[function(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case V:e.return=ne(e.value,e.length);break;case W:return z([k(e,{value:c(e.value,"@","@"+I)})],r);case G:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,function(t){switch(function(e,t){return(e=t.exec(e))?e[0]:e}(t,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return z([k(e,{props:[c(t,/:(read-\w+)/,":-moz-$1")]})],r);case"::placeholder":return z([k(e,{props:[c(t,/:(plac\w+)/,":"+I+"input-$1")]}),k(e,{props:[c(t,/:(plac\w+)/,":-moz-$1")]}),k(e,{props:[c(t,/:(plac\w+)/,L+"input-$1")]})],r)}return""})}}],ae=function(e){var t=e.key;if("css"===t){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))})}var a,i,s=e.stylisPlugins||re,o={},c=[];a=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),function(e){for(var t=e.getAttribute("data-emotion").split(" "),n=1;n<t.length;n++)o[t[n]]=!0;c.push(e)});var l,u,d,p,h=[U,(p=function(e){l.insert(e)},function(e){e.root||(e=e.return)&&p(e)})],v=(u=[ee,te].concat(s,h),d=f(u),function(e,t,n,r){for(var a="",i=0;i<d;i++)a+=u[i](e,t,n,r)||"";return a});i=function(e,t,n,r){l=n,z(B(e?e+"{"+t.styles+"}":t.styles),v),r&&(m.inserted[t.name]=!0)};var m={key:t,sheet:new r({key:t,container:a,nonce:e.nonce,speedy:e.speedy,prepend:e.prepend,insertionPoint:e.insertionPoint}),nonce:e.nonce,inserted:o,registered:{},insert:i};return m.sheet.hydrate(c),m};var ie={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,scale:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1};function se(e){var t=Object.create(null);return function(n){return void 0===t[n]&&(t[n]=e(n)),t[n]}}var oe=/[A-Z]|^ms/g,ce=/_EMO_([^_]+?)_([^]*?)_EMO_/g,le=function(e){return 45===e.charCodeAt(1)},ue=function(e){return null!=e&&"boolean"!=typeof e},de=se(function(e){return le(e)?e:e.replace(oe,"-$&").toLowerCase()}),pe=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(ce,function(e,t,n){return he={name:t,styles:n,next:he},t})}return 1===ie[e]||le(e)||"number"!=typeof t||0===t?t:t+"px"};function fe(e,t,n){if(null==n)return"";var r=n;if(void 0!==r.__emotion_styles)return r;switch(typeof n){case"boolean":return"";case"object":var a=n;if(1===a.anim)return he={name:a.name,styles:a.styles,next:he},a.name;var i=n;if(void 0!==i.styles){var s=i.next;if(void 0!==s)for(;void 0!==s;)he={name:s.name,styles:s.styles,next:he},s=s.next;return i.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var a=0;a<n.length;a++)r+=fe(e,t,n[a])+";";else for(var i in n){var s=n[i];if("object"!=typeof s){var o=s;null!=t&&void 0!==t[o]?r+=i+"{"+t[o]+"}":ue(o)&&(r+=de(i)+":"+pe(i,o)+";")}else if(!Array.isArray(s)||"string"!=typeof s[0]||null!=t&&void 0!==t[s[0]]){var c=fe(e,t,s);switch(i){case"animation":case"animationName":r+=de(i)+":"+c+";";break;default:r+=i+"{"+c+"}"}}else for(var l=0;l<s.length;l++)ue(s[l])&&(r+=de(i)+":"+pe(i,s[l])+";")}return r}(e,t,n);case"function":if(void 0!==e){var o=he,c=n(e);return he=o,fe(e,t,c)}}var l=n;if(null==t)return l;var u=t[l];return void 0!==u?u:l}var he,ve=/label:\s*([^\s;{]+)\s*(;|$)/g;function me(e,t,n){if(1===e.length&&"object"==typeof e[0]&&null!==e[0]&&void 0!==e[0].styles)return e[0];var r=!0,a="";he=void 0;var i=e[0];null==i||void 0===i.raw?(r=!1,a+=fe(n,t,i)):a+=i[0];for(var s=1;s<e.length;s++){if(a+=fe(n,t,e[s]),r)a+=i[s]}ve.lastIndex=0;for(var o,c="";null!==(o=ve.exec(a));)c+="-"+o[1];var l=function(e){for(var t,n=0,r=0,a=e.length;a>=4;++r,a-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(a){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)}(a)+c;return{name:l,styles:a,next:he}}function ge(e,t,n){var r="";return n.split(" ").forEach(function(n){void 0!==e[n]?t.push(e[n]+";"):n&&(r+=n+" ")}),r}function ye(e,t){if(void 0===e.inserted[t.name])return e.insert("",t,e.sheet,!0)}function xe(e,t,n){var r=[],a=ge(e,r,n);return r.length<2?n:a+t(r)}var Ee=function e(t){for(var n="",r=0;r<t.length;r++){var a=t[r];if(null!=a){var i=void 0;switch(typeof a){case"boolean":break;case"object":if(Array.isArray(a))i=e(a);else for(var s in i="",a)a[s]&&s&&(i&&(i+=" "),i+=s);break;default:i=a}i&&(n&&(n+=" "),n+=i)}}return n},be=function(e){var t=ae(e);t.sheet.speedy=function(e){this.isSpeedy=e},t.compat=!0;var n=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var a=me(n,t.registered,void 0);return function(e,t,n){!function(e,t,n){var r=e.key+"-"+t.name;!1===n&&void 0===e.registered[r]&&(e.registered[r]=t.styles)}(e,t,n);var r=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var a=t;do{e.insert(t===a?"."+r:"",a,e.sheet,!0),a=a.next}while(void 0!==a)}}(t,a,!1),t.key+"-"+a.name};return{css:n,cx:function(){for(var e=arguments.length,r=new Array(e),a=0;a<e;a++)r[a]=arguments[a];return xe(t.registered,n,Ee(r))},injectGlobal:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var a=me(n,t.registered);ye(t,a)},keyframes:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];var a=me(n,t.registered),i="animation-"+a.name;return ye(t,{name:a.name,styles:"@keyframes "+i+"{"+a.styles+"}"}),i},hydrate:function(e){e.forEach(function(e){t.inserted[e]=!0})},flush:function(){t.registered={},t.inserted={},t.sheet.flush()},sheet:t.sheet,cache:t,getRegisteredStyles:ge.bind(null,t.registered),merge:xe.bind(null,t.registered,n)}}({key:"css"}),ke=be.flush,we=be.hydrate,Se=be.cx,Ce=be.merge,Oe=be.getRegisteredStyles,_e=be.injectGlobal,Ne=be.keyframes,Ae=be.css,Te=be.sheet,Re=be.cache},310(e,t,n){"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)({}).hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(null,arguments)}function a(e,t){if(null==e)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==t.indexOf(r))continue;n[r]=e[r]}return n}function i(e,t){return i=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},i(e,t)}function s(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,i(e,t)}function o(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}n.r(t),n.d(t,{CSSTransition:()=>C,ReplaceTransition:()=>P,SwitchTransition:()=>V,Transition:()=>k,TransitionGroup:()=>R,config:()=>p});var c=n(442),l=n.n(c),u=n(3),d=n.n(u);const p={disabled:!1},f=l().createContext(null);var h=function(e){return e.scrollTop},v="unmounted",m="exited",g="entering",y="entered",x="exiting",E=function(e){function t(t,n){var r;r=e.call(this,t,n)||this;var a,i=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?i?(a=m,r.appearStatus=g):a=y:a=t.unmountOnExit||t.mountOnEnter?v:m,r.state={status:a},r.nextCallback=null,r}s(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===v?{status:m}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==g&&n!==y&&(t=g):n!==g&&n!==y||(t=x)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===g){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:d().findDOMNode(this);n&&h(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===m&&this.setState({status:v})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,a=this.props.nodeRef?[r]:[d().findDOMNode(this),r],i=a[0],s=a[1],o=this.getTimeouts(),c=r?o.appear:o.enter;!e&&!n||p.disabled?this.safeSetState({status:y},function(){t.props.onEntered(i)}):(this.props.onEnter(i,s),this.safeSetState({status:g},function(){t.props.onEntering(i,s),t.onTransitionEnd(c,function(){t.safeSetState({status:y},function(){t.props.onEntered(i,s)})})}))},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:d().findDOMNode(this);t&&!p.disabled?(this.props.onExit(r),this.safeSetState({status:x},function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,function(){e.safeSetState({status:m},function(){e.props.onExited(r)})})})):this.safeSetState({status:m},function(){e.props.onExited(r)})},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:d().findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var a=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],i=a[0],s=a[1];this.props.addEndListener(i,s)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},n.render=function(){var e=this.state.status;if(e===v)return null;var t=this.props,n=t.children,r=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,a(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return l().createElement(f.Provider,{value:null},"function"==typeof n?n(e,r):l().cloneElement(l().Children.only(n),r))},t}(l().Component);function b(){}E.contextType=f,E.propTypes={},E.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:b,onEntering:b,onEntered:b,onExit:b,onExiting:b,onExited:b},E.UNMOUNTED=v,E.EXITED=m,E.ENTERING=g,E.ENTERED=y,E.EXITING=x;const k=E;var w=function(e,t){return e&&t&&t.split(" ").forEach(function(t){return r=t,void((n=e).classList?n.classList.remove(r):"string"==typeof n.className?n.className=o(n.className,r):n.setAttribute("class",o(n.className&&n.className.baseVal||"",r)));var n,r})},S=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).appliedClasses={appear:{},enter:{},exit:{}},t.onEnter=function(e,n){var r=t.resolveArguments(e,n),a=r[0],i=r[1];t.removeClasses(a,"exit"),t.addClass(a,i?"appear":"enter","base"),t.props.onEnter&&t.props.onEnter(e,n)},t.onEntering=function(e,n){var r=t.resolveArguments(e,n),a=r[0],i=r[1]?"appear":"enter";t.addClass(a,i,"active"),t.props.onEntering&&t.props.onEntering(e,n)},t.onEntered=function(e,n){var r=t.resolveArguments(e,n),a=r[0],i=r[1]?"appear":"enter";t.removeClasses(a,i),t.addClass(a,i,"done"),t.props.onEntered&&t.props.onEntered(e,n)},t.onExit=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"appear"),t.removeClasses(n,"enter"),t.addClass(n,"exit","base"),t.props.onExit&&t.props.onExit(e)},t.onExiting=function(e){var n=t.resolveArguments(e)[0];t.addClass(n,"exit","active"),t.props.onExiting&&t.props.onExiting(e)},t.onExited=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"exit"),t.addClass(n,"exit","done"),t.props.onExited&&t.props.onExited(e)},t.resolveArguments=function(e,n){return t.props.nodeRef?[t.props.nodeRef.current,e]:[e,n]},t.getClassNames=function(e){var n=t.props.classNames,r="string"==typeof n,a=r?""+(r&&n?n+"-":"")+e:n[e];return{baseClassName:a,activeClassName:r?a+"-active":n[e+"Active"],doneClassName:r?a+"-done":n[e+"Done"]}},t}s(t,e);var n=t.prototype;return n.addClass=function(e,t,n){var r=this.getClassNames(t)[n+"ClassName"],a=this.getClassNames("enter").doneClassName;"appear"===t&&"done"===n&&a&&(r+=" "+a),"active"===n&&e&&h(e),r&&(this.appliedClasses[t][n]=r,function(e,t){e&&t&&t.split(" ").forEach(function(t){return r=t,void((n=e).classList?n.classList.add(r):function(e,t){return e.classList?!!t&&e.classList.contains(t):-1!==(" "+(e.className.baseVal||e.className)+" ").indexOf(" "+t+" ")}(n,r)||("string"==typeof n.className?n.className=n.className+" "+r:n.setAttribute("class",(n.className&&n.className.baseVal||"")+" "+r)));var n,r})}(e,r))},n.removeClasses=function(e,t){var n=this.appliedClasses[t],r=n.base,a=n.active,i=n.done;this.appliedClasses[t]={},r&&w(e,r),a&&w(e,a),i&&w(e,i)},n.render=function(){var e=this.props,t=(e.classNames,a(e,["classNames"]));return l().createElement(k,r({},t,{onEnter:this.onEnter,onEntered:this.onEntered,onEntering:this.onEntering,onExit:this.onExit,onExiting:this.onExiting,onExited:this.onExited}))},t}(l().Component);S.defaultProps={classNames:""},S.propTypes={};const C=S;function O(e,t){var n=Object.create(null);return e&&c.Children.map(e,function(e){return e}).forEach(function(e){n[e.key]=function(e){return t&&(0,c.isValidElement)(e)?t(e):e}(e)}),n}function _(e,t,n){return null!=n[t]?n[t]:e.props[t]}function N(e,t,n){var r=O(e.children),a=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,a=Object.create(null),i=[];for(var s in e)s in t?i.length&&(a[s]=i,i=[]):i.push(s);var o={};for(var c in t){if(a[c])for(r=0;r<a[c].length;r++){var l=a[c][r];o[a[c][r]]=n(l)}o[c]=n(c)}for(r=0;r<i.length;r++)o[i[r]]=n(i[r]);return o}(t,r);return Object.keys(a).forEach(function(i){var s=a[i];if((0,c.isValidElement)(s)){var o=i in t,l=i in r,u=t[i],d=(0,c.isValidElement)(u)&&!u.props.in;!l||o&&!d?l||!o||d?l&&o&&(0,c.isValidElement)(u)&&(a[i]=(0,c.cloneElement)(s,{onExited:n.bind(null,s),in:u.props.in,exit:_(s,"exit",e),enter:_(s,"enter",e)})):a[i]=(0,c.cloneElement)(s,{in:!1}):a[i]=(0,c.cloneElement)(s,{onExited:n.bind(null,s),in:!0,exit:_(s,"exit",e),enter:_(s,"enter",e)})}}),a}var A=Object.values||function(e){return Object.keys(e).map(function(t){return e[t]})},T=function(e){function t(t,n){var r,a=(r=e.call(this,t,n)||this).handleExited.bind(function(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}(r));return r.state={contextValue:{isMounting:!0},handleExited:a,firstRender:!0},r}s(t,e);var n=t.prototype;return n.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},n.componentWillUnmount=function(){this.mounted=!1},t.getDerivedStateFromProps=function(e,t){var n,r,a=t.children,i=t.handleExited;return{children:t.firstRender?(n=e,r=i,O(n.children,function(e){return(0,c.cloneElement)(e,{onExited:r.bind(null,e),in:!0,appear:_(e,"appear",n),enter:_(e,"enter",n),exit:_(e,"exit",n)})})):N(e,a,i),firstRender:!1}},n.handleExited=function(e,t){var n=O(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState(function(t){var n=r({},t.children);return delete n[e.key],{children:n}}))},n.render=function(){var e=this.props,t=e.component,n=e.childFactory,r=a(e,["component","childFactory"]),i=this.state.contextValue,s=A(this.state.children).map(n);return delete r.appear,delete r.enter,delete r.exit,null===t?l().createElement(f.Provider,{value:i},s):l().createElement(f.Provider,{value:i},l().createElement(t,r,s))},t}(l().Component);T.propTypes={},T.defaultProps={component:"div",childFactory:function(e){return e}};const R=T;var $=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).handleEnter=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEnter",0,n)},t.handleEntering=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntering",0,n)},t.handleEntered=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntered",0,n)},t.handleExit=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExit",1,n)},t.handleExiting=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExiting",1,n)},t.handleExited=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExited",1,n)},t}s(t,e);var n=t.prototype;return n.handleLifecycle=function(e,t,n){var r,a=this.props.children,i=l().Children.toArray(a)[t];if(i.props[e]&&(r=i.props)[e].apply(r,n),this.props[e]){var s=i.props.nodeRef?void 0:d().findDOMNode(this);this.props[e](s)}},n.render=function(){var e=this.props,t=e.children,n=e.in,r=a(e,["children","in"]),i=l().Children.toArray(t),s=i[0],o=i[1];return delete r.onEnter,delete r.onEntering,delete r.onEntered,delete r.onExit,delete r.onExiting,delete r.onExited,l().createElement(R,r,n?l().cloneElement(s,{key:"first",onEnter:this.handleEnter,onEntering:this.handleEntering,onEntered:this.handleEntered}):l().cloneElement(o,{key:"second",onEnter:this.handleExit,onEntering:this.handleExiting,onEntered:this.handleExited}))},t}(l().Component);$.propTypes={};const P=$;var j,M;var D="out-in",L="in-out",F=function(e,t,n){return function(){var r;e.props[t]&&(r=e.props)[t].apply(r,arguments),n()}},I=((j={})[D]=function(e){var t=e.current,n=e.changeState;return l().cloneElement(t,{in:!1,onExited:F(t,"onExited",function(){n(g,null)})})},j[L]=function(e){var t=e.current,n=e.changeState,r=e.children;return[t,l().cloneElement(r,{in:!0,onEntered:F(r,"onEntered",function(){n(g)})})]},j),q=((M={})[D]=function(e){var t=e.children,n=e.changeState;return l().cloneElement(t,{in:!0,onEntered:F(t,"onEntered",function(){n(y,l().cloneElement(t,{in:!0}))})})},M[L]=function(e){var t=e.current,n=e.children,r=e.changeState;return[l().cloneElement(t,{in:!1,onExited:F(t,"onExited",function(){r(y,l().cloneElement(n,{in:!0}))})}),l().cloneElement(n,{in:!0})]},M),G=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),a=0;a<n;a++)r[a]=arguments[a];return(t=e.call.apply(e,[this].concat(r))||this).state={status:y,current:null},t.appeared=!1,t.changeState=function(e,n){void 0===n&&(n=t.state.current),t.setState({status:e,current:n})},t}s(t,e);var n=t.prototype;return n.componentDidMount=function(){this.appeared=!0},t.getDerivedStateFromProps=function(e,t){return null==e.children?{current:null}:t.status===g&&e.mode===L?{status:g}:!t.current||(n=t.current,r=e.children,n===r||l().isValidElement(n)&&l().isValidElement(r)&&null!=n.key&&n.key===r.key)?{current:l().cloneElement(e.children,{in:!0})}:{status:x};var n,r},n.render=function(){var e,t=this.props,n=t.children,r=t.mode,a=this.state,i=a.status,s=a.current,o={children:n,current:s,changeState:this.changeState,status:i};switch(i){case g:e=q[r](o);break;case x:e=I[r](o);break;case y:e=s}return l().createElement(f.Provider,{value:{isMounting:!this.appeared}},e)},t}(l().Component);G.propTypes={},G.defaultProps={mode:D};const V=G},346(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=n(88),i=r(n(556)),s=r(n(442)),o=({getStyles:e,cx:t})=>s.default.createElement("div",{className:t("spinner",(0,a.css)(e("spinner")))},s.default.createElement("svg",{viewBox:"25 25 50 50"},s.default.createElement("circle",{cx:"50",cy:"50",r:"20",fill:"none",strokeWidth:"2",strokeMiterlimit:"10"})));o.propTypes={getStyles:i.default.func.isRequired,cx:i.default.func.isRequired},t.default=o},442(t){"use strict";t.exports=e},554(e,t,n){"use strict";var r,a=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var a=Object.getOwnPropertyDescriptor(t,n);a&&!("get"in a?!t.__esModule:a.writable||a.configurable)||(a={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,a)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),i=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),s=this&&this.__importStar||(r=function(e){return r=Object.getOwnPropertyNames||function(e){var t=[];for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[t.length]=n);return t},r(e)},function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n=r(e),s=0;s<n.length;s++)"default"!==n[s]&&a(t,e,n[s]);return i(t,e),t}),o=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const c=n(88),l=n(310),u=s(n(442)),d=o(n(346)),p=o(n(947));class f extends u.default.Component{constructor(e){super(e),this.wrapper=(0,u.createRef)(),this.nodeRef=(0,u.createRef)(),this.getStyles=(e,t)=>{const n=p.default[e](t,this.props),r=this.props.styles?this.props.styles[e]:void 0;return r?"function"==typeof r?r(n,this.props):r:n},this.cx=(e,...t)=>{const n=Array.isArray(e)?e:[e];return(0,c.cx)(...n.map(e=>e?`${this.props.classNamePrefix??"_loading_overlay_"}${e}`:""),...t)},this.state={overflowCSS:{}}}componentDidMount(){const e=window.getComputedStyle(this.wrapper.current),t=["overflow","overflowX","overflowY"].reduce((t,n)=>("visible"!==e[n]&&(t[n]="hidden"),t),{});this.setState({overflowCSS:t})}componentDidUpdate(e){const{active:t}=this.props;t&&(this.wrapper.current.scrollTop=0)}render(){const{children:e,className:t,onClick:n,active:r,fadeSpeed:a=500,spinner:i,text:s}=this.props;return u.default.createElement("div",{"data-testid":"wrapper",ref:this.wrapper,className:this.cx(["wrapper",r&&"wrapper--active"],(0,c.css)(this.getStyles("wrapper",r?this.state.overflowCSS:{})),t)},u.default.createElement(l.CSSTransition,{in:r,classNames:"_loading-overlay-transition",timeout:a,unmountOnExit:!0,ref:this.nodeRef,addEndListener:()=>{}},e=>u.default.createElement("div",{"data-testid":"overlay",className:this.cx("overlay",(0,c.css)(this.getStyles("overlay",e))),onClick:n},u.default.createElement("div",{className:this.cx("content",(0,c.css)(this.getStyles("content"))),ref:this.nodeRef},i&&("boolean"==typeof i?u.default.createElement(d.default,{cx:this.cx,getStyles:this.getStyles}):i),s))),e)}}t.default=f},556(e,t,n){e.exports=n(694)()},694(e,t,n){"use strict";var r=n(925);function a(){}function i(){}i.resetWarningCache=a,e.exports=function(){function e(e,t,n,a,i,s){if(s!==r){var o=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw o.name="Invariant Violation",o}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:i,resetWarningCache:a};return n.PropTypes=n,n}},862(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const a=r(n(556)),i=r(n(442)),s=r(n(554));t.default=e=>t=>{var n;return(n=class extends i.default.Component{componentDidMount(){if(t){const{wrapper:e}=this.overlay,t=e.current.firstChild,n=e.current.parentElement.querySelector("thead"),r=e.current.parentElement.querySelector("tbody"),a=e.current.parentElement.querySelector("caption");let i=window.getComputedStyle(n).height;a&&(i=parseFloat(i.replace("px","")).toString(),i+=parseFloat(window.getComputedStyle(a).height.replace("px","")).toString(),i=`${i}px`),t.style.marginTop=i,t.style.height=window.getComputedStyle(r).height}}render(){return i.default.createElement(s.default,{ref:e=>{this.overlay=e},...e,active:t},this.props.children)}}).propTypes={children:a.default.element.isRequired},n}},925(e){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},947(e,t,n){"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(88),a=r.keyframes`
|
|
2
2
|
from {
|
|
3
3
|
transform: rotate(0deg);
|
|
4
4
|
}
|
|
@@ -18,5 +18,5 @@
|
|
|
18
18
|
stroke-dasharray: 89,200;
|
|
19
19
|
stroke-dashoffset: -124px;
|
|
20
20
|
}
|
|
21
|
-
`,s={wrapper:e=>
|
|
22
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLW92ZXJsYXkvZGlzdC9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctb3ZlcmxheS5taW4uanMiLCJtYXBwaW5ncyI6IkNBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELEVBQVFHLFFBQVEsU0FBVUEsUUFBUSxjQUMxQixtQkFBWEMsUUFBeUJBLE9BQU9DLElBQzlDRCxPQUFPLENBQUMsUUFBUyxhQUFjSixHQUNMLGlCQUFaQyxRQUNkQSxRQUFzQyw2QkFBSUQsRUFBUUcsUUFBUSxTQUFVQSxRQUFRLGNBRTVFSixFQUFtQyw2QkFBSUMsRUFBUUQsRUFBWSxNQUFHQSxFQUFlLFNBQzlFLENBVEQsQ0FTR08sS0FBTSxDQUFDQyxFQUFrQ0MsSSwrQkNUNUNOLEVBQU9ELFFBQVVPLEMsaU1DeURqQixJQUFJQyxFQUEwQixXQUU1QixTQUFTQSxFQUFXQyxHQUNsQixJQUFJQyxFQUFRQyxLQUVaQSxLQUFLQyxXQUFhLFNBQVVDLEdBQzFCLElBQUlDLEVBSUFBLEVBRnNCLElBQXRCSixFQUFNSyxLQUFLQyxPQUNUTixFQUFNTyxlQUNDUCxFQUFNTyxlQUFlQyxZQUNyQlIsRUFBTVMsUUFDTlQsRUFBTVUsVUFBVUMsV0FFaEJYLEVBQU1JLE9BR1JKLEVBQU1LLEtBQUtMLEVBQU1LLEtBQUtDLE9BQVMsR0FBR0UsWUFHN0NSLEVBQU1VLFVBQVVFLGFBQWFULEVBQUtDLEdBRWxDSixFQUFNSyxLQUFLUSxLQUFLVixFQUNsQixFQUVBRixLQUFLYSxjQUE4QkMsSUFBbkJoQixFQUFRaUIsUUFBd0NqQixFQUFRaUIsT0FDeEVmLEtBQUtJLEtBQU8sR0FDWkosS0FBS2dCLElBQU0sRUFDWGhCLEtBQUtpQixNQUFRbkIsRUFBUW1CLE1BRXJCakIsS0FBS2tCLElBQU1wQixFQUFRb0IsSUFDbkJsQixLQUFLUyxVQUFZWCxFQUFRVyxVQUN6QlQsS0FBS1EsUUFBVVYsRUFBUVUsUUFD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QUFTQyxFQUFRQSxFQUFPRCxRQUFTa21CLEdBR3BFam1CLEVBQU9ELE9BQ2YsQyxPQ3JCQWttQixFQUFvQnhULEVBQUt6UyxJQUN4QixJQUFJcW1CLEVBQVNybUIsR0FBVUEsRUFBT3FmLFdBQzdCLElBQU9yZixFQUFpQixRQUN4QixJQUFNLEVBRVAsT0FEQWltQixFQUFvQkssRUFBRUQsRUFBUSxDQUFFRSxFQUFHRixJQUM1QkEsR0NMUkosRUFBb0JLLEVBQUksQ0FBQ3ZtQixFQUFTeW1CLEtBQ2pDLElBQUksSUFBSTVrQixLQUFPNGtCLEVBQ1hQLEVBQW9COVMsRUFBRXFULEVBQVk1a0IsS0FBU3FrQixFQUFvQjlTLEVBQUVwVCxFQUFTNkIsSUFDNUU4QixPQUFPK2IsZUFBZTFmLEVBQVM2QixFQUFLLENBQUU0ZCxZQUFZLEVBQU05VyxJQUFLOGQsRUFBVzVrQixNQ0ozRXFrQixFQUFvQjlTLEVBQUksQ0FBQ2hFLEVBQUt1TCxJQUFVaFgsT0FBTzVCLFVBQVU4USxlQUFldEosS0FBSzZGLEVBQUt1TCxHQ0NsRnVMLEVBQW9CdFQsRUFBSzVTLElBQ0gsb0JBQVgwbUIsUUFBMEJBLE9BQU9DLGFBQzFDaGpCLE9BQU8rYixlQUFlMWYsRUFBUzBtQixPQUFPQyxZQUFhLENBQUU3aUIsTUFBTyxXQUU3REgsT0FBTytiLGVBQWUxZixFQUFTLGFBQWMsQ0FBRThELE9BQU8sS0NGN0JvaUIsRUFBb0IsSSIsInNvdXJjZXMiOlsid2VicGFjazovLy93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHVtZCB7XCJyb290XCI6XCJSZWFjdERPTVwiLFwiY29tbW9uanMyXCI6XCJyZWFjdC1kb21cIixcImNvbW1vbmpzXCI6XCJyZWFjdC1kb21cIixcImFtZFwiOlwicmVhY3QtZG9tXCJ9Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zaGVldC9kaXN0L2Vtb3Rpb24tc2hlZXQuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1V0aWxpdHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVG9rZW5pemVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL0VudW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvU2VyaWFsaXplci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QYXJzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL2NhY2hlL2Rpc3QvZW1vdGlvbi1jYWNoZS5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9NaWRkbGV3YXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91bml0bGVzcy9kaXN0L2Vtb3Rpb24tdW5pdGxlc3MuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9tZW1vaXplL2Rpc3QvZW1vdGlvbi1tZW1vaXplLmVzbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc2VyaWFsaXplL2Rpc3QvZW1vdGlvbi1zZXJpYWxpemUuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9oYXNoL2Rpc3QvZW1vdGlvbi1oYXNoLmVzbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdXRpbHMvZGlzdC9lbW90aW9uLXV0aWxzLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jc3MvY3JlYXRlLWluc3RhbmNlL2Rpc3QvZW1vdGlvbi1jc3MtY3JlYXRlLWluc3RhbmNlLmVzbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY3NzL2Rpc3QvZW1vdGlvbi1jc3MuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9tLWhlbHBlcnMvZXNtL3JlbW92ZUNsYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9jb25maWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cENvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL3V0aWxzL3JlZmxvdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vQ1NTVHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9tLWhlbHBlcnMvZXNtL2FkZENsYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kb20taGVscGVycy9lc20vaGFzQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL3V0aWxzL0NoaWxkTWFwcGluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbkdyb3VwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1JlcGxhY2VUcmFuc2l0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9Td2l0Y2hUcmFuc2l0aW9uLmpzIiwid2VicGFjazovLy9leHRlcm5hbCB1bWQge1wicm9vdFwiOlwiUmVhY3RcIixcImNvbW1vbmpzMlwiOlwicmVhY3RcIixcImNvbW1vbmpzXCI6XCJyZWFjdFwiLFwiYW1kXCI6XCJyZWFjdFwifSIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtbG9hZGluZy1vdmVybGF5LW5leHRnZW4vbGliL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctb3ZlcmxheS9pbmRleC50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWxvYWRpbmctb3ZlcmxheS1uZXh0Z2VuL2xpYi9zdHlsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC1sb2FkaW5nLW92ZXJsYXktbmV4dGdlbi9saWIvY29tcG9uZW50cy9TcGlubmVyLmpzIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly8vd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly8vd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZShcInJlYWN0XCIpLCByZXF1aXJlKFwicmVhY3QtZG9tXCIpKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtcInJlYWN0XCIsIFwicmVhY3QtZG9tXCJdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ092ZXJsYXlcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInJlYWN0LWRvbVwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wiUmVhY3RCb290c3RyYXBUYWJsZU5nT3ZlcmxheVwiXSA9IGZhY3Rvcnkocm9vdFtcIlJlYWN0XCJdLCByb290W1wiUmVhY3RET01cIl0pO1xufSkoc2VsZiwgKF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzQ0Ml9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18zX18pID0+IHtcbnJldHVybiAiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzNfXzsiLCJ2YXIgaXNEZXZlbG9wbWVudCA9IGZhbHNlO1xuXG4vKlxuXG5CYXNlZCBvZmYgZ2xhbW9yJ3MgU3R5bGVTaGVldCwgdGhhbmtzIFN1bmlsIOKdpO+4j1xuXG5oaWdoIHBlcmZvcm1hbmNlIFN0eWxlU2hlZXQgZm9yIGNzcy1pbi1qcyBzeXN0ZW1zXG5cbi0gdXNlcyBtdWx0aXBsZSBzdHlsZSB0YWdzIGJlaGluZCB0aGUgc2NlbmVzIGZvciBtaWxsaW9ucyBvZiBydWxlc1xuLSB1c2VzIGBpbnNlcnRSdWxlYCBmb3IgYXBwZW5kaW5nIGluIHByb2R1Y3Rpb24gZm9yICptdWNoKiBmYXN0ZXIgcGVyZm9ybWFuY2VcblxuLy8gdXNhZ2VcblxuaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0J1xuXG5sZXQgc3R5bGVTaGVldCA9IG5ldyBTdHlsZVNoZWV0KHsga2V5OiAnJywgY29udGFpbmVyOiBkb2N1bWVudC5oZWFkIH0pXG5cbnN0eWxlU2hlZXQuaW5zZXJ0KCcjYm94IHsgYm9yZGVyOiAxcHggc29saWQgcmVkOyB9Jylcbi0gYXBwZW5kcyBhIGNzcyBydWxlIGludG8gdGhlIHN0eWxlc2hlZXRcblxuc3R5bGVTaGVldC5mbHVzaCgpXG4tIGVtcHRpZXMgdGhlIHN0eWxlc2hlZXQgb2YgYWxsIGl0cyBjb250ZW50c1xuXG4qL1xuXG5mdW5jdGlvbiBzaGVldEZvclRhZyh0YWcpIHtcbiAgaWYgKHRhZy5zaGVldCkge1xuICAgIHJldHVybiB0YWcuc2hlZXQ7XG4gIH0gLy8gdGhpcyB3ZWlyZG5lc3MgYnJvdWdodCB0byB5b3UgYnkgZmlyZWZveFxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldLm93bmVyTm9kZSA9PT0gdGFnKSB7XG4gICAgICByZXR1cm4gZG9jdW1lbnQuc3R5bGVTaGVldHNbaV07XG4gICAgfVxuICB9IC8vIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGFsd2F5cyByZXR1cm4gd2l0aCBhIHZhbHVlXG4gIC8vIFRTIGNhbid0IHVuZGVyc3RhbmQgaXQgdGhvdWdoIHNvIHdlIG1ha2UgaXQgc3RvcCBjb21wbGFpbmluZyBoZXJlXG5cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgdGFnID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgdGFnLnNldEF0dHJpYnV0ZSgnZGF0YS1lbW90aW9uJywgb3B0aW9ucy5rZXkpO1xuXG4gIGlmIChvcHRpb25zLm5vbmNlICE9PSB1bmRlZmluZWQpIHtcbiAgICB0YWcuc2V0QXR0cmlidXRlKCdub25jZScsIG9wdGlvbnMubm9uY2UpO1xuICB9XG5cbiAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgcmV0dXJuIHRhZztcbn1cblxudmFyIFN0eWxlU2hlZXQgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAvLyBVc2luZyBOb2RlIGluc3RlYWQgb2YgSFRNTEVsZW1lbnQgc2luY2UgY29udGFpbmVyIG1heSBiZSBhIFNoYWRvd1Jvb3RcbiAgZnVuY3Rpb24gU3R5bGVTaGVldChvcHRpb25zKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcblxuICAgIHRoaXMuX2luc2VydFRhZyA9IGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBiZWZvcmU7XG5cbiAgICAgIGlmIChfdGhpcy50YWdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBpZiAoX3RoaXMuaW5zZXJ0aW9uUG9pbnQpIHtcbiAgICAgICAgICBiZWZvcmUgPSBfdGhpcy5pbnNlcnRpb25Qb2ludC5uZXh0U2libGluZztcbiAgICAgICAgfSBlbHNlIGlmIChfdGhpcy5wcmVwZW5kKSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuY29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuYmVmb3JlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWZvcmUgPSBfdGhpcy50YWdzW190aGlzLnRhZ3MubGVuZ3RoIC0gMV0ubmV4dFNpYmxpbmc7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLmNvbnRhaW5lci5pbnNlcnRCZWZvcmUodGFnLCBiZWZvcmUpO1xuXG4gICAgICBfdGhpcy50YWdzLnB1c2godGFnKTtcbiAgICB9O1xuXG4gICAgdGhpcy5pc1NwZWVkeSA9IG9wdGlvbnMuc3BlZWR5ID09PSB1bmRlZmluZWQgPyAhaXNEZXZlbG9wbWVudCA6IG9wdGlvbnMuc3BlZWR5O1xuICAgIHRoaXMudGFncyA9IFtdO1xuICAgIHRoaXMuY3RyID0gMDtcbiAgICB0aGlzLm5vbmNlID0gb3B0aW9ucy5ub25jZTsgLy8ga2V5IGlzIHRoZSB2YWx1ZSBvZiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSwgaXQncyB1c2VkIHRvIGlkZW50aWZ5IGRpZmZlcmVudCBzaGVldHNcblxuICAgIHRoaXMua2V5ID0gb3B0aW9ucy5rZXk7XG4gICAgdGhpcy5jb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lcjtcbiAgICB0aGlzLnByZXBlbmQgPSBvcHRpb25zLnByZXBlbmQ7XG4gICAgdGhpcy5pbnNlcnRpb25Qb2ludCA9IG9wdGlvbnMuaW5zZXJ0aW9uUG9pbnQ7XG4gICAgdGhpcy5iZWZvcmUgPSBudWxsO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFN0eWxlU2hlZXQucHJvdG90eXBlO1xuXG4gIF9wcm90by5oeWRyYXRlID0gZnVuY3Rpb24gaHlkcmF0ZShub2Rlcykge1xuICAgIG5vZGVzLmZvckVhY2godGhpcy5faW5zZXJ0VGFnKTtcbiAgfTtcblxuICBfcHJvdG8uaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHJ1bGUpIHtcbiAgICAvLyB0aGUgbWF4IGxlbmd0aCBpcyBob3cgbWFueSBydWxlcyB3ZSBoYXZlIHBlciBzdHlsZSB0YWcsIGl0J3MgNjUwMDAgaW4gc3BlZWR5IG1vZGVcbiAgICAvLyBpdCdzIDEgaW4gZGV2IGJlY2F1c2Ugd2UgaW5zZXJ0IHNvdXJjZSBtYXBzIHRoYXQgbWFwIGEgc2luZ2xlIHJ1bGUgdG8gYSBsb2NhdGlvblxuICAgIC8vIGFuZCB5b3UgY2FuIG9ubHkgaGF2ZSBvbmUgc291cmNlIG1hcCBwZXIgc3R5bGUgdGFnXG4gICAgaWYgKHRoaXMuY3RyICUgKHRoaXMuaXNTcGVlZHkgPyA2NTAwMCA6IDEpID09PSAwKSB7XG4gICAgICB0aGlzLl9pbnNlcnRUYWcoY3JlYXRlU3R5bGVFbGVtZW50KHRoaXMpKTtcbiAgICB9XG5cbiAgICB2YXIgdGFnID0gdGhpcy50YWdzW3RoaXMudGFncy5sZW5ndGggLSAxXTtcblxuICAgIGlmICh0aGlzLmlzU3BlZWR5KSB7XG4gICAgICB2YXIgc2hlZXQgPSBzaGVldEZvclRhZyh0YWcpO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSB1bHRyYWZhc3QgdmVyc2lvbiwgd29ya3MgYWNyb3NzIGJyb3dzZXJzXG4gICAgICAgIC8vIHRoZSBiaWcgZHJhd2JhY2sgaXMgdGhhdCB0aGUgY3NzIHdvbid0IGJlIGVkaXRhYmxlIGluIGRldnRvb2xzXG4gICAgICAgIHNoZWV0Lmluc2VydFJ1bGUocnVsZSwgc2hlZXQuY3NzUnVsZXMubGVuZ3RoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGFnLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHJ1bGUpKTtcbiAgICB9XG5cbiAgICB0aGlzLmN0cisrO1xuICB9O1xuXG4gIF9wcm90by5mbHVzaCA9IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgIHRoaXMudGFncy5mb3JFYWNoKGZ1bmN0aW9uICh0YWcpIHtcbiAgICAgIHZhciBfdGFnJHBhcmVudE5vZGU7XG5cbiAgICAgIHJldHVybiAoX3RhZyRwYXJlbnROb2RlID0gdGFnLnBhcmVudE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfdGFnJHBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGFnKTtcbiAgICB9KTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG4gIH07XG5cbiAgcmV0dXJuIFN0eWxlU2hlZXQ7XG59KCk7XG5cbmV4cG9ydCB7IFN0eWxlU2hlZXQgfTtcbiIsIi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCB2YXIgYWJzID0gTWF0aC5hYnNcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn1cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IHZhciBmcm9tID0gU3RyaW5nLmZyb21DaGFyQ29kZVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fVxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgdmFyIGFzc2lnbiA9IE9iamVjdC5hc3NpZ25cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhc2ggKHZhbHVlLCBsZW5ndGgpIHtcblx0cmV0dXJuIGNoYXJhdCh2YWx1ZSwgMCkgXiA0NSA/ICgoKCgoKChsZW5ndGggPDwgMikgXiBjaGFyYXQodmFsdWUsIDApKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMSkpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAyKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDMpIDogMFxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJpbSAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLnRyaW0oKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtSZWdFeHB9IHBhdHRlcm5cbiAqIEByZXR1cm4ge3N0cmluZz99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaCAodmFsdWUsIHBhdHRlcm4pIHtcblx0cmV0dXJuICh2YWx1ZSA9IHBhdHRlcm4uZXhlYyh2YWx1ZSkpID8gdmFsdWVbMF0gOiB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHsoc3RyaW5nfFJlZ0V4cCl9IHBhdHRlcm5cbiAqIEBwYXJhbSB7c3RyaW5nfSByZXBsYWNlbWVudFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZSAodmFsdWUsIHBhdHRlcm4sIHJlcGxhY2VtZW50KSB7XG5cdHJldHVybiB2YWx1ZS5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaW5kZXhvZiAodmFsdWUsIHNlYXJjaCkge1xuXHRyZXR1cm4gdmFsdWUuaW5kZXhPZihzZWFyY2gpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXJhdCAodmFsdWUsIGluZGV4KSB7XG5cdHJldHVybiB2YWx1ZS5jaGFyQ29kZUF0KGluZGV4KSB8IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc3Vic3RyICh2YWx1ZSwgYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gdmFsdWUuc2xpY2UoYmVnaW4sIGVuZClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmxlbiAodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlLmxlbmd0aFxufVxuXG4vKipcbiAqIEBwYXJhbSB7YW55W119IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzaXplb2YgKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEBwYXJhbSB7YW55W119IGFycmF5XG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmQgKHZhbHVlLCBhcnJheSkge1xuXHRyZXR1cm4gYXJyYXkucHVzaCh2YWx1ZSksIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJyYXlcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lIChhcnJheSwgY2FsbGJhY2spIHtcblx0cmV0dXJuIGFycmF5Lm1hcChjYWxsYmFjaykuam9pbignJylcbn1cbiIsImltcG9ydCB7ZnJvbSwgdHJpbSwgY2hhcmF0LCBzdHJsZW4sIHN1YnN0ciwgYXBwZW5kLCBhc3NpZ259IGZyb20gJy4vVXRpbGl0eS5qcydcblxuZXhwb3J0IHZhciBsaW5lID0gMVxuZXhwb3J0IHZhciBjb2x1bW4gPSAxXG5leHBvcnQgdmFyIGxlbmd0aCA9IDBcbmV4cG9ydCB2YXIgcG9zaXRpb24gPSAwXG5leHBvcnQgdmFyIGNoYXJhY3RlciA9IDBcbmV4cG9ydCB2YXIgY2hhcmFjdGVycyA9ICcnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0IHwgbnVsbH0gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmdbXSB8IHN0cmluZ30gcHJvcHNcbiAqIEBwYXJhbSB7b2JqZWN0W10gfCBzdHJpbmd9IGNoaWxkcmVuXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub2RlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCB0eXBlLCBwcm9wcywgY2hpbGRyZW4sIGxlbmd0aCkge1xuXHRyZXR1cm4ge3ZhbHVlOiB2YWx1ZSwgcm9vdDogcm9vdCwgcGFyZW50OiBwYXJlbnQsIHR5cGU6IHR5cGUsIHByb3BzOiBwcm9wcywgY2hpbGRyZW46IGNoaWxkcmVuLCBsaW5lOiBsaW5lLCBjb2x1bW46IGNvbHVtbiwgbGVuZ3RoOiBsZW5ndGgsIHJldHVybjogJyd9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcm9wc1xuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29weSAocm9vdCwgcHJvcHMpIHtcblx0cmV0dXJuIGFzc2lnbihub2RlKCcnLCBudWxsLCBudWxsLCAnJywgbnVsbCwgbnVsbCwgMCksIHJvb3QsIHtsZW5ndGg6IC1yb290Lmxlbmd0aH0sIHByb3BzKVxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoYXIgKCkge1xuXHRyZXR1cm4gY2hhcmFjdGVyXG59XG5cbi8qKlxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJldiAoKSB7XG5cdGNoYXJhY3RlciA9IHBvc2l0aW9uID4gMCA/IGNoYXJhdChjaGFyYWN0ZXJzLCAtLXBvc2l0aW9uKSA6IDBcblxuXHRpZiAoY29sdW1uLS0sIGNoYXJhY3RlciA9PT0gMTApXG5cdFx0Y29sdW1uID0gMSwgbGluZS0tXG5cblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5leHQgKCkge1xuXHRjaGFyYWN0ZXIgPSBwb3NpdGlvbiA8IGxlbmd0aCA/IGNoYXJhdChjaGFyYWN0ZXJzLCBwb3NpdGlvbisrKSA6IDBcblxuXHRpZiAoY29sdW1uKyssIGNoYXJhY3RlciA9PT0gMTApXG5cdFx0Y29sdW1uID0gMSwgbGluZSsrXG5cblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBlZWsgKCkge1xuXHRyZXR1cm4gY2hhcmF0KGNoYXJhY3RlcnMsIHBvc2l0aW9uKVxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhcmV0ICgpIHtcblx0cmV0dXJuIHBvc2l0aW9uXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGJlZ2luXG4gKiBAcGFyYW0ge251bWJlcn0gZW5kXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzbGljZSAoYmVnaW4sIGVuZCkge1xuXHRyZXR1cm4gc3Vic3RyKGNoYXJhY3RlcnMsIGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuICh0eXBlKSB7XG5cdHN3aXRjaCAodHlwZSkge1xuXHRcdC8vIFxcMCBcXHQgXFxuIFxcciBcXHMgd2hpdGVzcGFjZSB0b2tlblxuXHRcdGNhc2UgMDogY2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuXHRcdFx0cmV0dXJuIDVcblx0XHQvLyAhICsgLCAvID4gQCB+IGlzb2xhdGUgdG9rZW5cblx0XHRjYXNlIDMzOiBjYXNlIDQzOiBjYXNlIDQ0OiBjYXNlIDQ3OiBjYXNlIDYyOiBjYXNlIDY0OiBjYXNlIDEyNjpcblx0XHQvLyA7IHsgfSBicmVha3BvaW50IHRva2VuXG5cdFx0Y2FzZSA1OTogY2FzZSAxMjM6IGNhc2UgMTI1OlxuXHRcdFx0cmV0dXJuIDRcblx0XHQvLyA6IGFjY29tcGFuaWVkIHRva2VuXG5cdFx0Y2FzZSA1ODpcblx0XHRcdHJldHVybiAzXG5cdFx0Ly8gXCIgJyAoIFsgb3BlbmluZyBkZWxpbWl0IHRva2VuXG5cdFx0Y2FzZSAzNDogY2FzZSAzOTogY2FzZSA0MDogY2FzZSA5MTpcblx0XHRcdHJldHVybiAyXG5cdFx0Ly8gKSBdIGNsb3NpbmcgZGVsaW1pdCB0b2tlblxuXHRcdGNhc2UgNDE6IGNhc2UgOTM6XG5cdFx0XHRyZXR1cm4gMVxuXHR9XG5cblx0cmV0dXJuIDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge2FueVtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gYWxsb2MgKHZhbHVlKSB7XG5cdHJldHVybiBsaW5lID0gY29sdW1uID0gMSwgbGVuZ3RoID0gc3RybGVuKGNoYXJhY3RlcnMgPSB2YWx1ZSksIHBvc2l0aW9uID0gMCwgW11cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAqIEByZXR1cm4ge2FueX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlYWxsb2MgKHZhbHVlKSB7XG5cdHJldHVybiBjaGFyYWN0ZXJzID0gJycsIHZhbHVlXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlbGltaXQgKHR5cGUpIHtcblx0cmV0dXJuIHRyaW0oc2xpY2UocG9zaXRpb24gLSAxLCBkZWxpbWl0ZXIodHlwZSA9PT0gOTEgPyB0eXBlICsgMiA6IHR5cGUgPT09IDQwID8gdHlwZSArIDEgOiB0eXBlKSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyh0b2tlbml6ZXIoYWxsb2ModmFsdWUpKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gd2hpdGVzcGFjZSAodHlwZSkge1xuXHR3aGlsZSAoY2hhcmFjdGVyID0gcGVlaygpKVxuXHRcdGlmIChjaGFyYWN0ZXIgPCAzMylcblx0XHRcdG5leHQoKVxuXHRcdGVsc2Vcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuIHRva2VuKHR5cGUpID4gMiB8fCB0b2tlbihjaGFyYWN0ZXIpID4gMyA/ICcnIDogJyAnXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hpbGRyZW5cbiAqIEByZXR1cm4ge3N0cmluZ1tdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemVyIChjaGlsZHJlbikge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuXHRcdFx0Y2FzZSAwOiBhcHBlbmQoaWRlbnRpZmllcihwb3NpdGlvbiAtIDEpLCBjaGlsZHJlbilcblx0XHRcdFx0YnJlYWtcblx0XHRcdGNhc2UgMjogYXBwZW5kKGRlbGltaXQoY2hhcmFjdGVyKSwgY2hpbGRyZW4pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRkZWZhdWx0OiBhcHBlbmQoZnJvbShjaGFyYWN0ZXIpLCBjaGlsZHJlbilcblx0XHR9XG5cblx0cmV0dXJuIGNoaWxkcmVuXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge251bWJlcn0gY291bnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwaW5nIChpbmRleCwgY291bnQpIHtcblx0d2hpbGUgKC0tY291bnQgJiYgbmV4dCgpKVxuXHRcdC8vIG5vdCAwLTkgQS1GIGEtZlxuXHRcdGlmIChjaGFyYWN0ZXIgPCA0OCB8fCBjaGFyYWN0ZXIgPiAxMDIgfHwgKGNoYXJhY3RlciA+IDU3ICYmIGNoYXJhY3RlciA8IDY1KSB8fCAoY2hhcmFjdGVyID4gNzAgJiYgY2hhcmFjdGVyIDwgOTcpKVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gc2xpY2UoaW5kZXgsIGNhcmV0KCkgKyAoY291bnQgPCA2ICYmIHBlZWsoKSA9PSAzMiAmJiBuZXh0KCkgPT0gMzIpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ZXIgKHR5cGUpIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0Ly8gXSApIFwiICdcblx0XHRcdGNhc2UgdHlwZTpcblx0XHRcdFx0cmV0dXJuIHBvc2l0aW9uXG5cdFx0XHQvLyBcIiAnXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OlxuXHRcdFx0XHRpZiAodHlwZSAhPT0gMzQgJiYgdHlwZSAhPT0gMzkpXG5cdFx0XHRcdFx0ZGVsaW1pdGVyKGNoYXJhY3Rlcilcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIChcblx0XHRcdGNhc2UgNDA6XG5cdFx0XHRcdGlmICh0eXBlID09PSA0MSlcblx0XHRcdFx0XHRkZWxpbWl0ZXIodHlwZSlcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRuZXh0KClcblx0XHRcdFx0YnJlYWtcblx0XHR9XG5cblx0cmV0dXJuIHBvc2l0aW9uXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tbWVudGVyICh0eXBlLCBpbmRleCkge1xuXHR3aGlsZSAobmV4dCgpKVxuXHRcdC8vIC8vXG5cdFx0aWYgKHR5cGUgKyBjaGFyYWN0ZXIgPT09IDQ3ICsgMTApXG5cdFx0XHRicmVha1xuXHRcdC8vIC8qXG5cdFx0ZWxzZSBpZiAodHlwZSArIGNoYXJhY3RlciA9PT0gNDIgKyA0MiAmJiBwZWVrKCkgPT09IDQ3KVxuXHRcdFx0YnJlYWtcblxuXHRyZXR1cm4gJy8qJyArIHNsaWNlKGluZGV4LCBwb3NpdGlvbiAtIDEpICsgJyonICsgZnJvbSh0eXBlID09PSA0NyA/IHR5cGUgOiBuZXh0KCkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmaWVyIChpbmRleCkge1xuXHR3aGlsZSAoIXRva2VuKHBlZWsoKSkpXG5cdFx0bmV4dCgpXG5cblx0cmV0dXJuIHNsaWNlKGluZGV4LCBwb3NpdGlvbilcbn1cbiIsImV4cG9ydCB2YXIgTVMgPSAnLW1zLSdcbmV4cG9ydCB2YXIgTU9aID0gJy1tb3otJ1xuZXhwb3J0IHZhciBXRUJLSVQgPSAnLXdlYmtpdC0nXG5cbmV4cG9ydCB2YXIgQ09NTUVOVCA9ICdjb21tJ1xuZXhwb3J0IHZhciBSVUxFU0VUID0gJ3J1bGUnXG5leHBvcnQgdmFyIERFQ0xBUkFUSU9OID0gJ2RlY2wnXG5cbmV4cG9ydCB2YXIgUEFHRSA9ICdAcGFnZSdcbmV4cG9ydCB2YXIgTUVESUEgPSAnQG1lZGlhJ1xuZXhwb3J0IHZhciBJTVBPUlQgPSAnQGltcG9ydCdcbmV4cG9ydCB2YXIgQ0hBUlNFVCA9ICdAY2hhcnNldCdcbmV4cG9ydCB2YXIgVklFV1BPUlQgPSAnQHZpZXdwb3J0J1xuZXhwb3J0IHZhciBTVVBQT1JUUyA9ICdAc3VwcG9ydHMnXG5leHBvcnQgdmFyIERPQ1VNRU5UID0gJ0Bkb2N1bWVudCdcbmV4cG9ydCB2YXIgTkFNRVNQQUNFID0gJ0BuYW1lc3BhY2UnXG5leHBvcnQgdmFyIEtFWUZSQU1FUyA9ICdAa2V5ZnJhbWVzJ1xuZXhwb3J0IHZhciBGT05UX0ZBQ0UgPSAnQGZvbnQtZmFjZSdcbmV4cG9ydCB2YXIgQ09VTlRFUl9TVFlMRSA9ICdAY291bnRlci1zdHlsZSdcbmV4cG9ydCB2YXIgRk9OVF9GRUFUVVJFX1ZBTFVFUyA9ICdAZm9udC1mZWF0dXJlLXZhbHVlcydcbmV4cG9ydCB2YXIgTEFZRVIgPSAnQGxheWVyJ1xuIiwiaW1wb3J0IHtJTVBPUlQsIExBWUVSLCBDT01NRU5ULCBSVUxFU0VULCBERUNMQVJBVElPTiwgS0VZRlJBTUVTfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge3N0cmxlbiwgc2l6ZW9mfSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUgKGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHR2YXIgb3V0cHV0ID0gJydcblx0dmFyIGxlbmd0aCA9IHNpemVvZihjaGlsZHJlbilcblxuXHRmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKVxuXHRcdG91dHB1dCArPSBjYWxsYmFjayhjaGlsZHJlbltpXSwgaSwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ2lmeSAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgTEFZRVI6IGlmIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCkgYnJlYWtcblx0XHRjYXNlIElNUE9SVDogY2FzZSBERUNMQVJBVElPTjogcmV0dXJuIGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC5yZXR1cm4gfHwgZWxlbWVudC52YWx1ZVxuXHRcdGNhc2UgQ09NTUVOVDogcmV0dXJuICcnXG5cdFx0Y2FzZSBLRVlGUkFNRVM6IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spICsgJ30nXG5cdFx0Y2FzZSBSVUxFU0VUOiBlbGVtZW50LnZhbHVlID0gZWxlbWVudC5wcm9wcy5qb2luKCcsJylcblx0fVxuXG5cdHJldHVybiBzdHJsZW4oY2hpbGRyZW4gPSBzZXJpYWxpemUoZWxlbWVudC5jaGlsZHJlbiwgY2FsbGJhY2spKSA/IGVsZW1lbnQucmV0dXJuID0gZWxlbWVudC52YWx1ZSArICd7JyArIGNoaWxkcmVuICsgJ30nIDogJydcbn1cbiIsImltcG9ydCB7Q09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7YWJzLCBjaGFyYXQsIHRyaW0sIGZyb20sIHNpemVvZiwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgcmVwbGFjZSwgaW5kZXhvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtub2RlLCBjaGFyLCBwcmV2LCBuZXh0LCBwZWVrLCBjYXJldCwgYWxsb2MsIGRlYWxsb2MsIGRlbGltaXQsIHdoaXRlc3BhY2UsIGVzY2FwaW5nLCBpZGVudGlmaWVyLCBjb21tZW50ZXJ9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7b2JqZWN0W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21waWxlICh2YWx1ZSkge1xuXHRyZXR1cm4gZGVhbGxvYyhwYXJzZSgnJywgbnVsbCwgbnVsbCwgbnVsbCwgWycnXSwgdmFsdWUgPSBhbGxvYyh2YWx1ZSksIDAsIFswXSwgdmFsdWUpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBydWxlc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNldHNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBzZXVkb1xuICogQHBhcmFtIHtudW1iZXJbXX0gcG9pbnRzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBkZWNsYXJhdGlvbnNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBydWxlLCBydWxlcywgcnVsZXNldHMsIHBzZXVkbywgcG9pbnRzLCBkZWNsYXJhdGlvbnMpIHtcblx0dmFyIGluZGV4ID0gMFxuXHR2YXIgb2Zmc2V0ID0gMFxuXHR2YXIgbGVuZ3RoID0gcHNldWRvXG5cdHZhciBhdHJ1bGUgPSAwXG5cdHZhciBwcm9wZXJ0eSA9IDBcblx0dmFyIHByZXZpb3VzID0gMFxuXHR2YXIgdmFyaWFibGUgPSAxXG5cdHZhciBzY2FubmluZyA9IDFcblx0dmFyIGFtcGVyc2FuZCA9IDFcblx0dmFyIGNoYXJhY3RlciA9IDBcblx0dmFyIHR5cGUgPSAnJ1xuXHR2YXIgcHJvcHMgPSBydWxlc1xuXHR2YXIgY2hpbGRyZW4gPSBydWxlc2V0c1xuXHR2YXIgcmVmZXJlbmNlID0gcnVsZVxuXHR2YXIgY2hhcmFjdGVycyA9IHR5cGVcblxuXHR3aGlsZSAoc2Nhbm5pbmcpXG5cdFx0c3dpdGNoIChwcmV2aW91cyA9IGNoYXJhY3RlciwgY2hhcmFjdGVyID0gbmV4dCgpKSB7XG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAocHJldmlvdXMgIT0gMTA4ICYmIGNoYXJhdChjaGFyYWN0ZXJzLCBsZW5ndGggLSAxKSA9PSA1OCkge1xuXHRcdFx0XHRcdGlmIChpbmRleG9mKGNoYXJhY3RlcnMgKz0gcmVwbGFjZShkZWxpbWl0KGNoYXJhY3RlciksICcmJywgJyZcXGYnKSwgJyZcXGYnKSAhPSAtMSlcblx0XHRcdFx0XHRcdGFtcGVyc2FuZCA9IC0xXG5cdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0fVxuXHRcdFx0Ly8gXCIgJyBbXG5cdFx0XHRjYXNlIDM0OiBjYXNlIDM5OiBjYXNlIDkxOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGRlbGltaXQoY2hhcmFjdGVyKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gXFx0IFxcbiBcXHIgXFxzXG5cdFx0XHRjYXNlIDk6IGNhc2UgMTA6IGNhc2UgMTM6IGNhc2UgMzI6XG5cdFx0XHRcdGNoYXJhY3RlcnMgKz0gd2hpdGVzcGFjZShwcmV2aW91cylcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcXG5cdFx0XHRjYXNlIDkyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IGVzY2FwaW5nKGNhcmV0KCkgLSAxLCA3KVxuXHRcdFx0XHRjb250aW51ZVxuXHRcdFx0Ly8gL1xuXHRcdFx0Y2FzZSA0Nzpcblx0XHRcdFx0c3dpdGNoIChwZWVrKCkpIHtcblx0XHRcdFx0XHRjYXNlIDQyOiBjYXNlIDQ3OlxuXHRcdFx0XHRcdFx0YXBwZW5kKGNvbW1lbnQoY29tbWVudGVyKG5leHQoKSwgY2FyZXQoKSksIHJvb3QsIHBhcmVudCksIGRlY2xhcmF0aW9ucylcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gJy8nXG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIHtcblx0XHRcdGNhc2UgMTIzICogdmFyaWFibGU6XG5cdFx0XHRcdHBvaW50c1tpbmRleCsrXSA9IHN0cmxlbihjaGFyYWN0ZXJzKSAqIGFtcGVyc2FuZFxuXHRcdFx0Ly8gfSA7IFxcMFxuXHRcdFx0Y2FzZSAxMjUgKiB2YXJpYWJsZTogY2FzZSA1OTogY2FzZSAwOlxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3Rlcikge1xuXHRcdFx0XHRcdC8vIFxcMCB9XG5cdFx0XHRcdFx0Y2FzZSAwOiBjYXNlIDEyNTogc2Nhbm5pbmcgPSAwXG5cdFx0XHRcdFx0Ly8gO1xuXHRcdFx0XHRcdGNhc2UgNTkgKyBvZmZzZXQ6IGlmIChhbXBlcnNhbmQgPT0gLTEpIGNoYXJhY3RlcnMgPSByZXBsYWNlKGNoYXJhY3RlcnMsIC9cXGYvZywgJycpXG5cdFx0XHRcdFx0XHRpZiAocHJvcGVydHkgPiAwICYmIChzdHJsZW4oY2hhcmFjdGVycykgLSBsZW5ndGgpKVxuXHRcdFx0XHRcdFx0XHRhcHBlbmQocHJvcGVydHkgPiAzMiA/IGRlY2xhcmF0aW9uKGNoYXJhY3RlcnMgKyAnOycsIHJ1bGUsIHBhcmVudCwgbGVuZ3RoIC0gMSkgOiBkZWNsYXJhdGlvbihyZXBsYWNlKGNoYXJhY3RlcnMsICcgJywgJycpICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDIpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEAgO1xuXHRcdFx0XHRcdGNhc2UgNTk6IGNoYXJhY3RlcnMgKz0gJzsnXG5cdFx0XHRcdFx0Ly8geyBydWxlL2F0LXJ1bGVcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0YXBwZW5kKHJlZmVyZW5jZSA9IHJ1bGVzZXQoY2hhcmFjdGVycywgcm9vdCwgcGFyZW50LCBpbmRleCwgb2Zmc2V0LCBydWxlcywgcG9pbnRzLCB0eXBlLCBwcm9wcyA9IFtdLCBjaGlsZHJlbiA9IFtdLCBsZW5ndGgpLCBydWxlc2V0cylcblxuXHRcdFx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PT0gMTIzKVxuXHRcdFx0XHRcdFx0XHRpZiAob2Zmc2V0ID09PSAwKVxuXHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJvb3QsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCBwcm9wcywgcnVsZXNldHMsIGxlbmd0aCwgcG9pbnRzLCBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0ZWxzZVxuXHRcdFx0XHRcdFx0XHRcdHN3aXRjaCAoYXRydWxlID09PSA5OSAmJiBjaGFyYXQoY2hhcmFjdGVycywgMykgPT09IDExMCA/IDEwMCA6IGF0cnVsZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gZCBsIG0gc1xuXHRcdFx0XHRcdFx0XHRcdFx0Y2FzZSAxMDA6IGNhc2UgMTA4OiBjYXNlIDEwOTogY2FzZSAxMTU6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKHZhbHVlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcnVsZSAmJiBhcHBlbmQocnVsZXNldCh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIDAsIDAsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHJ1bGVzLCBwcm9wcyA9IFtdLCBsZW5ndGgpLCBjaGlsZHJlbiksIHJ1bGVzLCBjaGlsZHJlbiwgbGVuZ3RoLCBwb2ludHMsIHJ1bGUgPyBwcm9wcyA6IGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0cGFyc2UoY2hhcmFjdGVycywgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgWycnXSwgY2hpbGRyZW4sIDAsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aW5kZXggPSBvZmZzZXQgPSBwcm9wZXJ0eSA9IDAsIHZhcmlhYmxlID0gYW1wZXJzYW5kID0gMSwgdHlwZSA9IGNoYXJhY3RlcnMgPSAnJywgbGVuZ3RoID0gcHNldWRvXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyA6XG5cdFx0XHRjYXNlIDU4OlxuXHRcdFx0XHRsZW5ndGggPSAxICsgc3RybGVuKGNoYXJhY3RlcnMpLCBwcm9wZXJ0eSA9IHByZXZpb3VzXG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpZiAodmFyaWFibGUgPCAxKVxuXHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT0gMTIzKVxuXHRcdFx0XHRcdFx0LS12YXJpYWJsZVxuXHRcdFx0XHRcdGVsc2UgaWYgKGNoYXJhY3RlciA9PSAxMjUgJiYgdmFyaWFibGUrKyA9PSAwICYmIHByZXYoKSA9PSAxMjUpXG5cdFx0XHRcdFx0XHRjb250aW51ZVxuXG5cdFx0XHRcdHN3aXRjaCAoY2hhcmFjdGVycyArPSBmcm9tKGNoYXJhY3RlciksIGNoYXJhY3RlciAqIHZhcmlhYmxlKSB7XG5cdFx0XHRcdFx0Ly8gJlxuXHRcdFx0XHRcdGNhc2UgMzg6XG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSBvZmZzZXQgPiAwID8gMSA6IChjaGFyYWN0ZXJzICs9ICdcXGYnLCAtMSlcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gLFxuXHRcdFx0XHRcdGNhc2UgNDQ6XG5cdFx0XHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSAoc3RybGVuKGNoYXJhY3RlcnMpIC0gMSkgKiBhbXBlcnNhbmQsIGFtcGVyc2FuZCA9IDFcblx0XHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdFx0Ly8gQFxuXHRcdFx0XHRcdGNhc2UgNjQ6XG5cdFx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0XHRpZiAocGVlaygpID09PSA0NSlcblx0XHRcdFx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KG5leHQoKSlcblxuXHRcdFx0XHRcdFx0YXRydWxlID0gcGVlaygpLCBvZmZzZXQgPSBsZW5ndGggPSBzdHJsZW4odHlwZSA9IGNoYXJhY3RlcnMgKz0gaWRlbnRpZmllcihjYXJldCgpKSksIGNoYXJhY3RlcisrXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIC1cblx0XHRcdFx0XHRjYXNlIDQ1OlxuXHRcdFx0XHRcdFx0aWYgKHByZXZpb3VzID09PSA0NSAmJiBzdHJsZW4oY2hhcmFjdGVycykgPT0gMilcblx0XHRcdFx0XHRcdFx0dmFyaWFibGUgPSAwXG5cdFx0XHRcdH1cblx0XHR9XG5cblx0cmV0dXJuIHJ1bGVzZXRzXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW119IHByb3BzXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNldCAodmFsdWUsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0dmFyIHBvc3QgPSBvZmZzZXQgLSAxXG5cdHZhciBydWxlID0gb2Zmc2V0ID09PSAwID8gcnVsZXMgOiBbJyddXG5cdHZhciBzaXplID0gc2l6ZW9mKHJ1bGUpXG5cblx0Zm9yICh2YXIgaSA9IDAsIGogPSAwLCBrID0gMDsgaSA8IGluZGV4OyArK2kpXG5cdFx0Zm9yICh2YXIgeCA9IDAsIHkgPSBzdWJzdHIodmFsdWUsIHBvc3QgKyAxLCBwb3N0ID0gYWJzKGogPSBwb2ludHNbaV0pKSwgeiA9IHZhbHVlOyB4IDwgc2l6ZTsgKyt4KVxuXHRcdFx0aWYgKHogPSB0cmltKGogPiAwID8gcnVsZVt4XSArICcgJyArIHkgOiByZXBsYWNlKHksIC8mXFxmL2csIHJ1bGVbeF0pKSlcblx0XHRcdFx0cHJvcHNbaysrXSA9IHpcblxuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBvZmZzZXQgPT09IDAgPyBSVUxFU0VUIDogdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnQgKHZhbHVlLCByb290LCBwYXJlbnQpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgQ09NTUVOVCwgZnJvbShjaGFyKCkpLCBzdWJzdHIodmFsdWUsIDIsIC0yKSwgMClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICogQHJldHVybiB7b2JqZWN0fVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVjbGFyYXRpb24gKHZhbHVlLCByb290LCBwYXJlbnQsIGxlbmd0aCkge1xuXHRyZXR1cm4gbm9kZSh2YWx1ZSwgcm9vdCwgcGFyZW50LCBERUNMQVJBVElPTiwgc3Vic3RyKHZhbHVlLCAwLCBsZW5ndGgpLCBzdWJzdHIodmFsdWUsIGxlbmd0aCArIDEsIC0xKSwgbGVuZ3RoKVxufVxuIiwiaW1wb3J0IHsgU3R5bGVTaGVldCB9IGZyb20gJ0BlbW90aW9uL3NoZWV0JztcbmltcG9ydCB7IGRlYWxsb2MsIGFsbG9jLCBuZXh0LCB0b2tlbiwgZnJvbSwgcGVlaywgZGVsaW1pdCwgc2xpY2UsIHBvc2l0aW9uLCBSVUxFU0VULCBjb21iaW5lLCBtYXRjaCwgc2VyaWFsaXplLCBjb3B5LCByZXBsYWNlLCBXRUJLSVQsIE1PWiwgTVMsIEtFWUZSQU1FUywgREVDTEFSQVRJT04sIGhhc2gsIGNoYXJhdCwgc3RybGVuLCBpbmRleG9mLCBzdHJpbmdpZnksIHJ1bGVzaGVldCwgbWlkZGxld2FyZSwgY29tcGlsZSB9IGZyb20gJ3N0eWxpcyc7XG5pbXBvcnQgJ0BlbW90aW9uL3dlYWstbWVtb2l6ZSc7XG5pbXBvcnQgJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nID0gZnVuY3Rpb24gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKGJlZ2luLCBwb2ludHMsIGluZGV4KSB7XG4gIHZhciBwcmV2aW91cyA9IDA7XG4gIHZhciBjaGFyYWN0ZXIgPSAwO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgcHJldmlvdXMgPSBjaGFyYWN0ZXI7XG4gICAgY2hhcmFjdGVyID0gcGVlaygpOyAvLyAmXFxmXG5cbiAgICBpZiAocHJldmlvdXMgPT09IDM4ICYmIGNoYXJhY3RlciA9PT0gMTIpIHtcbiAgICAgIHBvaW50c1tpbmRleF0gPSAxO1xuICAgIH1cblxuICAgIGlmICh0b2tlbihjaGFyYWN0ZXIpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBuZXh0KCk7XG4gIH1cblxuICByZXR1cm4gc2xpY2UoYmVnaW4sIHBvc2l0aW9uKTtcbn07XG5cbnZhciB0b1J1bGVzID0gZnVuY3Rpb24gdG9SdWxlcyhwYXJzZWQsIHBvaW50cykge1xuICAvLyBwcmV0ZW5kIHdlJ3ZlIHN0YXJ0ZWQgd2l0aCBhIGNvbW1hXG4gIHZhciBpbmRleCA9IC0xO1xuICB2YXIgY2hhcmFjdGVyID0gNDQ7XG5cbiAgZG8ge1xuICAgIHN3aXRjaCAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgY2FzZSAwOlxuICAgICAgICAvLyAmXFxmXG4gICAgICAgIGlmIChjaGFyYWN0ZXIgPT09IDM4ICYmIHBlZWsoKSA9PT0gMTIpIHtcbiAgICAgICAgICAvLyB0aGlzIGlzIG5vdCAxMDAlIGNvcnJlY3QsIHdlIGRvbid0IGFjY291bnQgZm9yIGxpdGVyYWwgc2VxdWVuY2VzIGhlcmUgLSBsaWtlIGZvciBleGFtcGxlIHF1b3RlZCBzdHJpbmdzXG4gICAgICAgICAgLy8gc3R5bGlzIGluc2VydHMgXFxmIGFmdGVyICYgdG8ga25vdyB3aGVuICYgd2hlcmUgaXQgc2hvdWxkIHJlcGxhY2UgdGhpcyBzZXF1ZW5jZSB3aXRoIHRoZSBjb250ZXh0IHNlbGVjdG9yXG4gICAgICAgICAgLy8gYW5kIHdoZW4gaXQgc2hvdWxkIGp1c3QgY29uY2F0ZW5hdGUgdGhlIG91dGVyIGFuZCBpbm5lciBzZWxlY3RvcnNcbiAgICAgICAgICAvLyBpdCdzIHZlcnkgdW5saWtlbHkgZm9yIHRoaXMgc2VxdWVuY2UgdG8gYWN0dWFsbHkgYXBwZWFyIGluIGEgZGlmZmVyZW50IGNvbnRleHQsIHNvIHdlIGp1c3QgbGV2ZXJhZ2UgdGhpcyBmYWN0IGhlcmVcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nKHBvc2l0aW9uIC0gMSwgcG9pbnRzLCBpbmRleCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIDI6XG4gICAgICAgIHBhcnNlZFtpbmRleF0gKz0gZGVsaW1pdChjaGFyYWN0ZXIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSA0OlxuICAgICAgICAvLyBjb21tYVxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSA0NCkge1xuICAgICAgICAgIC8vIGNvbG9uXG4gICAgICAgICAgcGFyc2VkWysraW5kZXhdID0gcGVlaygpID09PSA1OCA/ICcmXFxmJyA6ICcnO1xuICAgICAgICAgIHBvaW50c1tpbmRleF0gPSBwYXJzZWRbaW5kZXhdLmxlbmd0aDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAvLyBmYWxsdGhyb3VnaFxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGZyb20oY2hhcmFjdGVyKTtcbiAgICB9XG4gIH0gd2hpbGUgKGNoYXJhY3RlciA9IG5leHQoKSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG5cbnZhciBnZXRSdWxlcyA9IGZ1bmN0aW9uIGdldFJ1bGVzKHZhbHVlLCBwb2ludHMpIHtcbiAgcmV0dXJuIGRlYWxsb2ModG9SdWxlcyhhbGxvYyh2YWx1ZSksIHBvaW50cykpO1xufTsgLy8gV2Vha1NldCB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlLCBidXQgb25seSBXZWFrTWFwIGlzIHN1cHBvcnRlZCBpbiBJRTExXG5cblxudmFyIGZpeGVkRWxlbWVudHMgPSAvKiAjX19QVVJFX18gKi9uZXcgV2Vha01hcCgpO1xudmFyIGNvbXBhdCA9IGZ1bmN0aW9uIGNvbXBhdChlbGVtZW50KSB7XG4gIGlmIChlbGVtZW50LnR5cGUgIT09ICdydWxlJyB8fCAhZWxlbWVudC5wYXJlbnQgfHwgLy8gcG9zaXRpdmUgLmxlbmd0aCBpbmRpY2F0ZXMgdGhhdCB0aGlzIHJ1bGUgY29udGFpbnMgcHNldWRvXG4gIC8vIG5lZ2F0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGhhcyBiZWVuIGFscmVhZHkgcHJlZml4ZWRcbiAgZWxlbWVudC5sZW5ndGggPCAxKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZTtcbiAgdmFyIHBhcmVudCA9IGVsZW1lbnQucGFyZW50O1xuICB2YXIgaXNJbXBsaWNpdFJ1bGUgPSBlbGVtZW50LmNvbHVtbiA9PT0gcGFyZW50LmNvbHVtbiAmJiBlbGVtZW50LmxpbmUgPT09IHBhcmVudC5saW5lO1xuXG4gIHdoaWxlIChwYXJlbnQudHlwZSAhPT0gJ3J1bGUnKSB7XG4gICAgcGFyZW50ID0gcGFyZW50LnBhcmVudDtcbiAgICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuICB9IC8vIHNob3J0LWNpcmN1aXQgZm9yIHRoZSBzaW1wbGVzdCBjYXNlXG5cblxuICBpZiAoZWxlbWVudC5wcm9wcy5sZW5ndGggPT09IDEgJiYgdmFsdWUuY2hhckNvZGVBdCgwKSAhPT0gNThcbiAgLyogY29sb24gKi9cbiAgJiYgIWZpeGVkRWxlbWVudHMuZ2V0KHBhcmVudCkpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gaWYgdGhpcyBpcyBhbiBpbXBsaWNpdGx5IGluc2VydGVkIHJ1bGUgKHRoZSBvbmUgZWFnZXJseSBpbnNlcnRlZCBhdCB0aGUgZWFjaCBuZXcgbmVzdGVkIGxldmVsKVxuICAvLyB0aGVuIHRoZSBwcm9wcyBoYXMgYWxyZWFkeSBiZWVuIG1hbmlwdWxhdGVkIGJlZm9yZWhhbmQgYXMgdGhleSB0aGF0IGFycmF5IGlzIHNoYXJlZCBiZXR3ZWVuIGl0IGFuZCBpdHMgXCJydWxlIHBhcmVudFwiXG5cblxuICBpZiAoaXNJbXBsaWNpdFJ1bGUpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmaXhlZEVsZW1lbnRzLnNldChlbGVtZW50LCB0cnVlKTtcbiAgdmFyIHBvaW50cyA9IFtdO1xuICB2YXIgcnVsZXMgPSBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKTtcbiAgdmFyIHBhcmVudFJ1bGVzID0gcGFyZW50LnByb3BzO1xuXG4gIGZvciAodmFyIGkgPSAwLCBrID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBwYXJlbnRSdWxlcy5sZW5ndGg7IGorKywgaysrKSB7XG4gICAgICBlbGVtZW50LnByb3BzW2tdID0gcG9pbnRzW2ldID8gcnVsZXNbaV0ucmVwbGFjZSgvJlxcZi9nLCBwYXJlbnRSdWxlc1tqXSkgOiBwYXJlbnRSdWxlc1tqXSArIFwiIFwiICsgcnVsZXNbaV07XG4gICAgfVxuICB9XG59O1xudmFyIHJlbW92ZUxhYmVsID0gZnVuY3Rpb24gcmVtb3ZlTGFiZWwoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlID09PSAnZGVjbCcpIHtcbiAgICB2YXIgdmFsdWUgPSBlbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCAvLyBjaGFyY29kZSBmb3IgbFxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMCkgPT09IDEwOCAmJiAvLyBjaGFyY29kZSBmb3IgYlxuICAgIHZhbHVlLmNoYXJDb2RlQXQoMikgPT09IDk4KSB7XG4gICAgICAvLyB0aGlzIGlnbm9yZXMgbGFiZWxcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSAnJztcbiAgICAgIGVsZW1lbnQudmFsdWUgPSAnJztcbiAgICB9XG4gIH1cbn07XG5cbi8qIGVzbGludC1kaXNhYmxlIG5vLWZhbGx0aHJvdWdoICovXG5cbmZ1bmN0aW9uIHByZWZpeCh2YWx1ZSwgbGVuZ3RoKSB7XG4gIHN3aXRjaCAoaGFzaCh2YWx1ZSwgbGVuZ3RoKSkge1xuICAgIC8vIGNvbG9yLWFkanVzdFxuICAgIGNhc2UgNTEwMzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAncHJpbnQtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYW5pbWF0aW9uLCBhbmltYXRpb24tKGRlbGF5fGRpcmVjdGlvbnxkdXJhdGlvbnxmaWxsLW1vZGV8aXRlcmF0aW9uLWNvdW50fG5hbWV8cGxheS1zdGF0ZXx0aW1pbmctZnVuY3Rpb24pXG5cbiAgICBjYXNlIDU3Mzc6XG4gICAgY2FzZSA0MjAxOlxuICAgIGNhc2UgMzE3NzpcbiAgICBjYXNlIDM0MzM6XG4gICAgY2FzZSAxNjQxOlxuICAgIGNhc2UgNDQ1NzpcbiAgICBjYXNlIDI5MjE6IC8vIHRleHQtZGVjb3JhdGlvbiwgZmlsdGVyLCBjbGlwLXBhdGgsIGJhY2tmYWNlLXZpc2liaWxpdHksIGNvbHVtbiwgYm94LWRlY29yYXRpb24tYnJlYWtcblxuICAgIGNhc2UgNTU3MjpcbiAgICBjYXNlIDYzNTY6XG4gICAgY2FzZSA1ODQ0OlxuICAgIGNhc2UgMzE5MTpcbiAgICBjYXNlIDY2NDU6XG4gICAgY2FzZSAzMDA1OiAvLyBtYXNrLCBtYXNrLWltYWdlLCBtYXNrLShtb2RlfGNsaXB8c2l6ZSksIG1hc2stKHJlcGVhdHxvcmlnaW4pLCBtYXNrLXBvc2l0aW9uLCBtYXNrLWNvbXBvc2l0ZSxcblxuICAgIGNhc2UgNjM5MTpcbiAgICBjYXNlIDU4Nzk6XG4gICAgY2FzZSA1NjIzOlxuICAgIGNhc2UgNjEzNTpcbiAgICBjYXNlIDQ1OTk6XG4gICAgY2FzZSA0ODU1OiAvLyBiYWNrZ3JvdW5kLWNsaXAsIGNvbHVtbnMsIGNvbHVtbi0oY291bnR8ZmlsbHxnYXB8cnVsZXxydWxlLWNvbG9yfHJ1bGUtc3R5bGV8cnVsZS13aWR0aHxzcGFufHdpZHRoKVxuXG4gICAgY2FzZSA0MjE1OlxuICAgIGNhc2UgNjM4OTpcbiAgICBjYXNlIDUxMDk6XG4gICAgY2FzZSA1MzY1OlxuICAgIGNhc2UgNTYyMTpcbiAgICBjYXNlIDM4Mjk6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyBhcHBlYXJhbmNlLCB1c2VyLXNlbGVjdCwgdHJhbnNmb3JtLCBoeXBoZW5zLCB0ZXh0LXNpemUtYWRqdXN0XG5cbiAgICBjYXNlIDUzNDk6XG4gICAgY2FzZSA0MjQ2OlxuICAgIGNhc2UgNDgxMDpcbiAgICBjYXNlIDY5Njg6XG4gICAgY2FzZSAyNzU2OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTU9aICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gZmxleCwgZmxleC1kaXJlY3Rpb25cblxuICAgIGNhc2UgNjgyODpcbiAgICBjYXNlIDQyNjg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gb3JkZXJcblxuICAgIGNhc2UgNjE2NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtJyArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYWxpZ24taXRlbXNcblxuICAgIGNhc2UgNTE4NzpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIHJlcGxhY2UodmFsdWUsIC8oXFx3KykuKyg6W15dKykvLCBXRUJLSVQgKyAnYm94LSQxJDInICsgTVMgKyAnZmxleC0kMSQyJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1zZWxmXG5cbiAgICBjYXNlIDU0NDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWl0ZW0tJyArIHJlcGxhY2UodmFsdWUsIC9mbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWNvbnRlbnRcblxuICAgIGNhc2UgNDY3NTpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgJ2ZsZXgtbGluZS1wYWNrJyArIHJlcGxhY2UodmFsdWUsIC9hbGlnbi1jb250ZW50fGZsZXgtfC1zZWxmLywgJycpICsgdmFsdWU7XG4gICAgLy8gZmxleC1zaHJpbmtcblxuICAgIGNhc2UgNTU0ODpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ3NocmluaycsICduZWdhdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gZmxleC1iYXNpc1xuXG4gICAgY2FzZSA1MjkyOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnYmFzaXMnLCAncHJlZmVycmVkLXNpemUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtZ3Jvd1xuXG4gICAgY2FzZSA2MDYwOlxuICAgICAgcmV0dXJuIFdFQktJVCArICdib3gtJyArIHJlcGxhY2UodmFsdWUsICctZ3JvdycsICcnKSArIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAnZ3JvdycsICdwb3NpdGl2ZScpICsgdmFsdWU7XG4gICAgLy8gdHJhbnNpdGlvblxuXG4gICAgY2FzZSA0NTU0OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHJlcGxhY2UodmFsdWUsIC8oW14tXSkodHJhbnNmb3JtKS9nLCAnJDEnICsgV0VCS0lUICsgJyQyJykgKyB2YWx1ZTtcbiAgICAvLyBjdXJzb3JcblxuICAgIGNhc2UgNjE4NzpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyh6b29tLXxncmFiKS8sIFdFQktJVCArICckMScpLCAvKGltYWdlLXNldCkvLCBXRUJLSVQgKyAnJDEnKSwgdmFsdWUsICcnKSArIHZhbHVlO1xuICAgIC8vIGJhY2tncm91bmQsIGJhY2tncm91bmQtaW1hZ2VcblxuICAgIGNhc2UgNTQ5NTpcbiAgICBjYXNlIDM5NTk6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyhpbWFnZS1zZXRcXChbXl0qKS8sIFdFQktJVCArICckMScgKyAnJGAkMScpO1xuICAgIC8vIGp1c3RpZnktY29udGVudFxuXG4gICAgY2FzZSA0OTY4OlxuICAgICAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZSh2YWx1ZSwgLyguKzopKGZsZXgtKT8oLiopLywgV0VCS0lUICsgJ2JveC1wYWNrOiQzJyArIE1TICsgJ2ZsZXgtcGFjazokMycpLCAvcy4rLWJbXjtdKy8sICdqdXN0aWZ5JykgKyBXRUJLSVQgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIChtYXJnaW58cGFkZGluZyktaW5saW5lLShzdGFydHxlbmQpXG5cbiAgICBjYXNlIDQwOTU6XG4gICAgY2FzZSAzNTgzOlxuICAgIGNhc2UgNDA2ODpcbiAgICBjYXNlIDI1MzI6XG4gICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKyktaW5saW5lKC4rKS8sIFdFQktJVCArICckMSQyJykgKyB2YWx1ZTtcbiAgICAvLyAobWlufG1heCk/KHdpZHRofGhlaWdodHxpbmxpbmUtc2l6ZXxibG9jay1zaXplKVxuXG4gICAgY2FzZSA4MTE2OlxuICAgIGNhc2UgNzA1OTpcbiAgICBjYXNlIDU3NTM6XG4gICAgY2FzZSA1NTM1OlxuICAgIGNhc2UgNTQ0NTpcbiAgICBjYXNlIDU3MDE6XG4gICAgY2FzZSA0OTMzOlxuICAgIGNhc2UgNDY3NzpcbiAgICBjYXNlIDU1MzM6XG4gICAgY2FzZSA1Nzg5OlxuICAgIGNhc2UgNTAyMTpcbiAgICBjYXNlIDQ3NjU6XG4gICAgICAvLyBzdHJldGNoLCBtYXgtY29udGVudCwgbWluLWNvbnRlbnQsIGZpbGwtYXZhaWxhYmxlXG4gICAgICBpZiAoc3RybGVuKHZhbHVlKSAtIDEgLSBsZW5ndGggPiA2KSBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkpIHtcbiAgICAgICAgLy8gKG0pYXgtY29udGVudCwgKG0paW4tY29udGVudFxuICAgICAgICBjYXNlIDEwOTpcbiAgICAgICAgICAvLyAtXG4gICAgICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgNCkgIT09IDQ1KSBicmVhaztcbiAgICAgICAgLy8gKGYpaWxsLWF2YWlsYWJsZSwgKGYpaXQtY29udGVudFxuXG4gICAgICAgIGNhc2UgMTAyOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoLispLShbXl0rKS8sICckMScgKyBXRUJLSVQgKyAnJDItJDMnICsgJyQxJyArIE1PWiArIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDMpID09IDEwOCA/ICckMycgOiAnJDItJDMnKSkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKHMpdHJldGNoXG5cbiAgICAgICAgY2FzZSAxMTU6XG4gICAgICAgICAgcmV0dXJuIH5pbmRleG9mKHZhbHVlLCAnc3RyZXRjaCcpID8gcHJlZml4KHJlcGxhY2UodmFsdWUsICdzdHJldGNoJywgJ2ZpbGwtYXZhaWxhYmxlJyksIGxlbmd0aCkgKyB2YWx1ZSA6IHZhbHVlO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgLy8gcG9zaXRpb246IHN0aWNreVxuXG4gICAgY2FzZSA0OTQ5OlxuICAgICAgLy8gKHMpdGlja3k/XG4gICAgICBpZiAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAxKSAhPT0gMTE1KSBicmVhaztcbiAgICAvLyBkaXNwbGF5OiAoZmxleHxpbmxpbmUtZmxleClcblxuICAgIGNhc2UgNjQ0NDpcbiAgICAgIHN3aXRjaCAoY2hhcmF0KHZhbHVlLCBzdHJsZW4odmFsdWUpIC0gMyAtICh+aW5kZXhvZih2YWx1ZSwgJyFpbXBvcnRhbnQnKSAmJiAxMCkpKSB7XG4gICAgICAgIC8vIHN0aWMoayl5XG4gICAgICAgIGNhc2UgMTA3OlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAnOicsICc6JyArIFdFQktJVCkgKyB2YWx1ZTtcbiAgICAgICAgLy8gKGlubGluZS0pP2ZsKGUpeFxuXG4gICAgICAgIGNhc2UgMTAxOlxuICAgICAgICAgIHJldHVybiByZXBsYWNlKHZhbHVlLCAvKC4rOikoW147IV0rKSg7fCEuKyk/LywgJyQxJyArIFdFQktJVCArIChjaGFyYXQodmFsdWUsIDE0KSA9PT0gNDUgPyAnaW5saW5lLScgOiAnJykgKyAnYm94JDMnICsgJyQxJyArIFdFQktJVCArICckMiQzJyArICckMScgKyBNUyArICckMmJveCQzJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgYnJlYWs7XG4gICAgLy8gd3JpdGluZy1tb2RlXG5cbiAgICBjYXNlIDU5MzY6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMTEpKSB7XG4gICAgICAgIC8vIHZlcnRpY2FsLWwocilcbiAgICAgICAgY2FzZSAxMTQ6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0YicpICsgdmFsdWU7XG4gICAgICAgIC8vIHZlcnRpY2FsLXIobClcblxuICAgICAgICBjYXNlIDEwODpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ3RiLXJsJykgKyB2YWx1ZTtcbiAgICAgICAgLy8gaG9yaXpvbnRhbCgtKXRiXG5cbiAgICAgICAgY2FzZSA0NTpcbiAgICAgICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsIC9bc3ZoXVxcdystW3RibHJdezJ9LywgJ2xyJykgKyB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG52YXIgcHJlZml4ZXIgPSBmdW5jdGlvbiBwcmVmaXhlcihlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG4gIGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKSBpZiAoIWVsZW1lbnRbXCJyZXR1cm5cIl0pIHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG4gICAgY2FzZSBERUNMQVJBVElPTjpcbiAgICAgIGVsZW1lbnRbXCJyZXR1cm5cIl0gPSBwcmVmaXgoZWxlbWVudC52YWx1ZSwgZWxlbWVudC5sZW5ndGgpO1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIEtFWUZSQU1FUzpcbiAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICB2YWx1ZTogcmVwbGFjZShlbGVtZW50LnZhbHVlLCAnQCcsICdAJyArIFdFQktJVClcbiAgICAgIH0pXSwgY2FsbGJhY2spO1xuXG4gICAgY2FzZSBSVUxFU0VUOlxuICAgICAgaWYgKGVsZW1lbnQubGVuZ3RoKSByZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgc3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcbiAgICAgICAgICAvLyA6cmVhZC0ob25seXx3cml0ZSlcbiAgICAgICAgICBjYXNlICc6cmVhZC1vbmx5JzpcbiAgICAgICAgICBjYXNlICc6cmVhZC13cml0ZSc6XG4gICAgICAgICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgICAgICAgcHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgICAvLyA6cGxhY2Vob2xkZXJcblxuICAgICAgICAgIGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldXG4gICAgICAgICAgICB9KSwgY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV1cbiAgICAgICAgICAgIH0pXSwgY2FsbGJhY2spO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfSk7XG4gIH1cbn07XG5cbnZhciBkZWZhdWx0U3R5bGlzUGx1Z2lucyA9IFtwcmVmaXhlcl07XG5cbnZhciBjcmVhdGVDYWNoZSA9IGZ1bmN0aW9uIGNyZWF0ZUNhY2hlKG9wdGlvbnMpIHtcbiAgdmFyIGtleSA9IG9wdGlvbnMua2V5O1xuXG4gIGlmIChrZXkgPT09ICdjc3MnKSB7XG4gICAgdmFyIHNzclN0eWxlcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWVtb3Rpb25dOm5vdChbZGF0YS1zXSlcIik7IC8vIGdldCBTU1JlZCBzdHlsZXMgb3V0IG9mIHRoZSB3YXkgb2YgUmVhY3QncyBoeWRyYXRpb25cbiAgICAvLyBkb2N1bWVudC5oZWFkIGlzIGEgc2FmZSBwbGFjZSB0byBtb3ZlIHRoZW0gdG8odGhvdWdoIG5vdGUgZG9jdW1lbnQuaGVhZCBpcyBub3QgbmVjZXNzYXJpbHkgdGhlIGxhc3QgcGxhY2UgdGhleSB3aWxsIGJlKVxuICAgIC8vIG5vdGUgdGhpcyB2ZXJ5IHZlcnkgaW50ZW50aW9uYWxseSB0YXJnZXRzIGFsbCBzdHlsZSBlbGVtZW50cyByZWdhcmRsZXNzIG9mIHRoZSBrZXkgdG8gZW5zdXJlXG4gICAgLy8gdGhhdCBjcmVhdGluZyBhIGNhY2hlIHdvcmtzIGluc2lkZSBvZiByZW5kZXIgb2YgYSBSZWFjdCBjb21wb25lbnRcblxuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoc3NyU3R5bGVzLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgLy8gd2Ugd2FudCB0byBvbmx5IG1vdmUgZWxlbWVudHMgd2hpY2ggaGF2ZSBhIHNwYWNlIGluIHRoZSBkYXRhLWVtb3Rpb24gYXR0cmlidXRlIHZhbHVlXG4gICAgICAvLyBiZWNhdXNlIHRoYXQgaW5kaWNhdGVzIHRoYXQgaXQgaXMgYW4gRW1vdGlvbiAxMSBzZXJ2ZXItc2lkZSByZW5kZXJlZCBzdHlsZSBlbGVtZW50c1xuICAgICAgLy8gd2hpbGUgd2Ugd2lsbCBhbHJlYWR5IGlnbm9yZSBFbW90aW9uIDExIGNsaWVudC1zaWRlIGluc2VydGVkIHN0eWxlcyBiZWNhdXNlIG9mIHRoZSA6bm90KFtkYXRhLXNdKSBwYXJ0IGluIHRoZSBzZWxlY3RvclxuICAgICAgLy8gRW1vdGlvbiAxMCBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgZGlkIG5vdCBoYXZlIGRhdGEtcyAoYnV0IGltcG9ydGFudGx5IGRpZCBub3QgaGF2ZSBhIHNwYWNlIGluIHRoZWlyIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGVzKVxuICAgICAgLy8gc28gY2hlY2tpbmcgZm9yIHRoZSBzcGFjZSBlbnN1cmVzIHRoYXQgbG9hZGluZyBFbW90aW9uIDExIGFmdGVyIEVtb3Rpb24gMTAgaGFzIGluc2VydGVkIHNvbWUgc3R5bGVzXG4gICAgICAvLyB3aWxsIG5vdCByZXN1bHQgaW4gdGhlIEVtb3Rpb24gMTAgc3R5bGVzIGJlaW5nIGRlc3Ryb3llZFxuICAgICAgdmFyIGRhdGFFbW90aW9uQXR0cmlidXRlID0gbm9kZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicpO1xuXG4gICAgICBpZiAoZGF0YUVtb3Rpb25BdHRyaWJ1dGUuaW5kZXhPZignICcpID09PSAtMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQobm9kZSk7XG4gICAgICBub2RlLnNldEF0dHJpYnV0ZSgnZGF0YS1zJywgJycpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIHN0eWxpc1BsdWdpbnMgPSBvcHRpb25zLnN0eWxpc1BsdWdpbnMgfHwgZGVmYXVsdFN0eWxpc1BsdWdpbnM7XG5cbiAgdmFyIGluc2VydGVkID0ge307XG4gIHZhciBjb250YWluZXI7XG4gIHZhciBub2Rlc1RvSHlkcmF0ZSA9IFtdO1xuXG4gIHtcbiAgICBjb250YWluZXIgPSBvcHRpb25zLmNvbnRhaW5lciB8fCBkb2N1bWVudC5oZWFkO1xuICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoIC8vIHRoaXMgbWVhbnMgd2Ugd2lsbCBpZ25vcmUgZWxlbWVudHMgd2hpY2ggZG9uJ3QgaGF2ZSBhIHNwYWNlIGluIHRoZW0gd2hpY2hcbiAgICAvLyBtZWFucyB0aGF0IHRoZSBzdHlsZSBlbGVtZW50cyB3ZSdyZSBsb29raW5nIGF0IGFyZSBvbmx5IEVtb3Rpb24gMTEgc2VydmVyLXJlbmRlcmVkIHN0eWxlIGVsZW1lbnRzXG4gICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcInN0eWxlW2RhdGEtZW1vdGlvbl49XFxcIlwiICsga2V5ICsgXCIgXFxcIl1cIiksIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICB2YXIgYXR0cmliID0gbm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWVtb3Rpb25cIikuc3BsaXQoJyAnKTtcblxuICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhdHRyaWIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaW5zZXJ0ZWRbYXR0cmliW2ldXSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIG5vZGVzVG9IeWRyYXRlLnB1c2gobm9kZSk7XG4gICAgfSk7XG4gIH1cblxuICB2YXIgX2luc2VydDtcblxuICB2YXIgb21uaXByZXNlbnRQbHVnaW5zID0gW2NvbXBhdCwgcmVtb3ZlTGFiZWxdO1xuXG4gIHtcbiAgICB2YXIgY3VycmVudFNoZWV0O1xuICAgIHZhciBmaW5hbGl6aW5nUGx1Z2lucyA9IFtzdHJpbmdpZnksIHJ1bGVzaGVldChmdW5jdGlvbiAocnVsZSkge1xuICAgICAgY3VycmVudFNoZWV0Lmluc2VydChydWxlKTtcbiAgICB9KV07XG4gICAgdmFyIHNlcmlhbGl6ZXIgPSBtaWRkbGV3YXJlKG9tbmlwcmVzZW50UGx1Z2lucy5jb25jYXQoc3R5bGlzUGx1Z2lucywgZmluYWxpemluZ1BsdWdpbnMpKTtcblxuICAgIHZhciBzdHlsaXMgPSBmdW5jdGlvbiBzdHlsaXMoc3R5bGVzKSB7XG4gICAgICByZXR1cm4gc2VyaWFsaXplKGNvbXBpbGUoc3R5bGVzKSwgc2VyaWFsaXplcik7XG4gICAgfTtcblxuICAgIF9pbnNlcnQgPSBmdW5jdGlvbiBpbnNlcnQoc2VsZWN0b3IsIHNlcmlhbGl6ZWQsIHNoZWV0LCBzaG91bGRDYWNoZSkge1xuICAgICAgY3VycmVudFNoZWV0ID0gc2hlZXQ7XG5cbiAgICAgIHN0eWxpcyhzZWxlY3RvciA/IHNlbGVjdG9yICsgXCJ7XCIgKyBzZXJpYWxpemVkLnN0eWxlcyArIFwifVwiIDogc2VyaWFsaXplZC5zdHlsZXMpO1xuXG4gICAgICBpZiAoc2hvdWxkQ2FjaGUpIHtcbiAgICAgICAgY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9IHRydWU7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIHZhciBjYWNoZSA9IHtcbiAgICBrZXk6IGtleSxcbiAgICBzaGVldDogbmV3IFN0eWxlU2hlZXQoe1xuICAgICAga2V5OiBrZXksXG4gICAgICBjb250YWluZXI6IGNvbnRhaW5lcixcbiAgICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgICAgc3BlZWR5OiBvcHRpb25zLnNwZWVkeSxcbiAgICAgIHByZXBlbmQ6IG9wdGlvbnMucHJlcGVuZCxcbiAgICAgIGluc2VydGlvblBvaW50OiBvcHRpb25zLmluc2VydGlvblBvaW50XG4gICAgfSksXG4gICAgbm9uY2U6IG9wdGlvbnMubm9uY2UsXG4gICAgaW5zZXJ0ZWQ6IGluc2VydGVkLFxuICAgIHJlZ2lzdGVyZWQ6IHt9LFxuICAgIGluc2VydDogX2luc2VydFxuICB9O1xuICBjYWNoZS5zaGVldC5oeWRyYXRlKG5vZGVzVG9IeWRyYXRlKTtcbiAgcmV0dXJuIGNhY2hlO1xufTtcblxuZXhwb3J0IHsgY3JlYXRlQ2FjaGUgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHtNUywgTU9aLCBXRUJLSVQsIFJVTEVTRVQsIEtFWUZSQU1FUywgREVDTEFSQVRJT059IGZyb20gJy4vRW51bS5qcydcbmltcG9ydCB7bWF0Y2gsIGNoYXJhdCwgc3Vic3RyLCBzdHJsZW4sIHNpemVvZiwgcmVwbGFjZSwgY29tYmluZX0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuaW1wb3J0IHtjb3B5LCB0b2tlbml6ZX0gZnJvbSAnLi9Ub2tlbml6ZXIuanMnXG5pbXBvcnQge3NlcmlhbGl6ZX0gZnJvbSAnLi9TZXJpYWxpemVyLmpzJ1xuaW1wb3J0IHtwcmVmaXh9IGZyb20gJy4vUHJlZml4ZXIuanMnXG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbltdfSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJuIHtmdW5jdGlvbn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1pZGRsZXdhcmUgKGNvbGxlY3Rpb24pIHtcblx0dmFyIGxlbmd0aCA9IHNpemVvZihjb2xsZWN0aW9uKVxuXG5cdHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuXHRcdHZhciBvdXRwdXQgPSAnJ1xuXG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRcdG91dHB1dCArPSBjb2xsZWN0aW9uW2ldKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHx8ICcnXG5cblx0XHRyZXR1cm4gb3V0cHV0XG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBydWxlc2hlZXQgKGNhbGxiYWNrKSB7XG5cdHJldHVybiBmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdGlmICghZWxlbWVudC5yb290KVxuXHRcdFx0aWYgKGVsZW1lbnQgPSBlbGVtZW50LnJldHVybilcblx0XHRcdFx0Y2FsbGJhY2soZWxlbWVudClcblx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlZml4ZXIgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0aWYgKGVsZW1lbnQubGVuZ3RoID4gLTEpXG5cdFx0aWYgKCFlbGVtZW50LnJldHVybilcblx0XHRcdHN3aXRjaCAoZWxlbWVudC50eXBlKSB7XG5cdFx0XHRcdGNhc2UgREVDTEFSQVRJT046IGVsZW1lbnQucmV0dXJuID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoLCBjaGlsZHJlbilcblx0XHRcdFx0XHRyZXR1cm5cblx0XHRcdFx0Y2FzZSBLRVlGUkFNRVM6XG5cdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7dmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpfSldLCBjYWxsYmFjaylcblx0XHRcdFx0Y2FzZSBSVUxFU0VUOlxuXHRcdFx0XHRcdGlmIChlbGVtZW50Lmxlbmd0aClcblx0XHRcdFx0XHRcdHJldHVybiBjb21iaW5lKGVsZW1lbnQucHJvcHMsIGZ1bmN0aW9uICh2YWx1ZSkge1xuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKG1hdGNoKHZhbHVlLCAvKDo6cGxhY1xcdyt8OnJlYWQtXFx3KykvKSkge1xuXHRcdFx0XHRcdFx0XHRcdC8vIDpyZWFkLShvbmx5fHdyaXRlKVxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJzpyZWFkLW9ubHknOiBjYXNlICc6cmVhZC13cml0ZSc6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHJlYWQtXFx3KykvLCAnOicgKyBNT1ogKyAnJDEnKV19KV0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHRcdC8vIDpwbGFjZWhvbGRlclxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJzo6cGxhY2Vob2xkZXInOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgV0VCS0lUICsgJ2lucHV0LSQxJyldfSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgJzonICsgTU9aICsgJyQxJyldfSksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNvcHkoZWxlbWVudCwge3Byb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocGxhY1xcdyspLywgTVMgKyAnaW5wdXQtJDEnKV19KVxuXHRcdFx0XHRcdFx0XHRcdFx0XSwgY2FsbGJhY2spXG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gJydcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5hbWVzcGFjZSAoZWxlbWVudCkge1xuXHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdGVsZW1lbnQucHJvcHMgPSBlbGVtZW50LnByb3BzLm1hcChmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuIGNvbWJpbmUodG9rZW5pemUodmFsdWUpLCBmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBjaGlsZHJlbikge1xuXHRcdFx0XHRcdHN3aXRjaCAoY2hhcmF0KHZhbHVlLCAwKSkge1xuXHRcdFx0XHRcdFx0Ly8gXFxmXG5cdFx0XHRcdFx0XHRjYXNlIDEyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gc3Vic3RyKHZhbHVlLCAxLCBzdHJsZW4odmFsdWUpKVxuXHRcdFx0XHRcdFx0Ly8gXFwwICggKyA+IH5cblx0XHRcdFx0XHRcdGNhc2UgMDogY2FzZSA0MDogY2FzZSA0MzogY2FzZSA2MjogY2FzZSAxMjY6XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZVxuXHRcdFx0XHRcdFx0Ly8gOlxuXHRcdFx0XHRcdFx0Y2FzZSA1ODpcblx0XHRcdFx0XHRcdFx0aWYgKGNoaWxkcmVuWysraW5kZXhdID09PSAnZ2xvYmFsJylcblx0XHRcdFx0XHRcdFx0XHRjaGlsZHJlbltpbmRleF0gPSAnJywgY2hpbGRyZW5bKytpbmRleF0gPSAnXFxmJyArIHN1YnN0cihjaGlsZHJlbltpbmRleF0sIGluZGV4ID0gMSwgLTEpXG5cdFx0XHRcdFx0XHQvLyBcXHNcblx0XHRcdFx0XHRcdGNhc2UgMzI6XG5cdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdHN3aXRjaCAoaW5kZXgpIHtcblx0XHRcdFx0XHRcdFx0XHRjYXNlIDA6IGVsZW1lbnQgPSB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNpemVvZihjaGlsZHJlbikgPiAxID8gJycgOiB2YWx1ZVxuXHRcdFx0XHRcdFx0XHRcdGNhc2UgaW5kZXggPSBzaXplb2YoY2hpbGRyZW4pIC0gMTogY2FzZSAyOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGluZGV4ID09PSAyID8gdmFsdWUgKyBlbGVtZW50ICsgZWxlbWVudCA6IHZhbHVlICsgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSlcblx0XHRcdH0pXG5cdH1cbn1cbiIsInZhciB1bml0bGVzc0tleXMgPSB7XG4gIGFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiAxLFxuICBhc3BlY3RSYXRpbzogMSxcbiAgYm9yZGVySW1hZ2VPdXRzZXQ6IDEsXG4gIGJvcmRlckltYWdlU2xpY2U6IDEsXG4gIGJvcmRlckltYWdlV2lkdGg6IDEsXG4gIGJveEZsZXg6IDEsXG4gIGJveEZsZXhHcm91cDogMSxcbiAgYm94T3JkaW5hbEdyb3VwOiAxLFxuICBjb2x1bW5Db3VudDogMSxcbiAgY29sdW1uczogMSxcbiAgZmxleDogMSxcbiAgZmxleEdyb3c6IDEsXG4gIGZsZXhQb3NpdGl2ZTogMSxcbiAgZmxleFNocmluazogMSxcbiAgZmxleE5lZ2F0aXZlOiAxLFxuICBmbGV4T3JkZXI6IDEsXG4gIGdyaWRSb3c6IDEsXG4gIGdyaWRSb3dFbmQ6IDEsXG4gIGdyaWRSb3dTcGFuOiAxLFxuICBncmlkUm93U3RhcnQ6IDEsXG4gIGdyaWRDb2x1bW46IDEsXG4gIGdyaWRDb2x1bW5FbmQ6IDEsXG4gIGdyaWRDb2x1bW5TcGFuOiAxLFxuICBncmlkQ29sdW1uU3RhcnQ6IDEsXG4gIG1zR3JpZFJvdzogMSxcbiAgbXNHcmlkUm93U3BhbjogMSxcbiAgbXNHcmlkQ29sdW1uOiAxLFxuICBtc0dyaWRDb2x1bW5TcGFuOiAxLFxuICBmb250V2VpZ2h0OiAxLFxuICBsaW5lSGVpZ2h0OiAxLFxuICBvcGFjaXR5OiAxLFxuICBvcmRlcjogMSxcbiAgb3JwaGFuczogMSxcbiAgc2NhbGU6IDEsXG4gIHRhYlNpemU6IDEsXG4gIHdpZG93czogMSxcbiAgekluZGV4OiAxLFxuICB6b29tOiAxLFxuICBXZWJraXRMaW5lQ2xhbXA6IDEsXG4gIC8vIFNWRy1yZWxhdGVkIHByb3BlcnRpZXNcbiAgZmlsbE9wYWNpdHk6IDEsXG4gIGZsb29kT3BhY2l0eTogMSxcbiAgc3RvcE9wYWNpdHk6IDEsXG4gIHN0cm9rZURhc2hhcnJheTogMSxcbiAgc3Ryb2tlRGFzaG9mZnNldDogMSxcbiAgc3Ryb2tlTWl0ZXJsaW1pdDogMSxcbiAgc3Ryb2tlT3BhY2l0eTogMSxcbiAgc3Ryb2tlV2lkdGg6IDFcbn07XG5cbmV4cG9ydCB7IHVuaXRsZXNzS2V5cyBhcyBkZWZhdWx0IH07XG4iLCJmdW5jdGlvbiBtZW1vaXplKGZuKSB7XG4gIHZhciBjYWNoZSA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHJldHVybiBmdW5jdGlvbiAoYXJnKSB7XG4gICAgaWYgKGNhY2hlW2FyZ10gPT09IHVuZGVmaW5lZCkgY2FjaGVbYXJnXSA9IGZuKGFyZyk7XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59XG5cbmV4cG9ydCB7IG1lbW9pemUgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGhhc2hTdHJpbmcgZnJvbSAnQGVtb3Rpb24vaGFzaCc7XG5pbXBvcnQgdW5pdGxlc3MgZnJvbSAnQGVtb3Rpb24vdW5pdGxlc3MnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnQGVtb3Rpb24vbWVtb2l6ZSc7XG5cbnZhciBpc0RldmVsb3BtZW50ID0gZmFsc2U7XG5cbnZhciBoeXBoZW5hdGVSZWdleCA9IC9bQS1aXXxebXMvZztcbnZhciBhbmltYXRpb25SZWdleCA9IC9fRU1PXyhbXl9dKz8pXyhbXl0qPylfRU1PXy9nO1xuXG52YXIgaXNDdXN0b21Qcm9wZXJ0eSA9IGZ1bmN0aW9uIGlzQ3VzdG9tUHJvcGVydHkocHJvcGVydHkpIHtcbiAgcmV0dXJuIHByb3BlcnR5LmNoYXJDb2RlQXQoMSkgPT09IDQ1O1xufTtcblxudmFyIGlzUHJvY2Vzc2FibGVWYWx1ZSA9IGZ1bmN0aW9uIGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJztcbn07XG5cbnZhciBwcm9jZXNzU3R5bGVOYW1lID0gLyogI19fUFVSRV9fICovbWVtb2l6ZShmdW5jdGlvbiAoc3R5bGVOYW1lKSB7XG4gIHJldHVybiBpc0N1c3RvbVByb3BlcnR5KHN0eWxlTmFtZSkgPyBzdHlsZU5hbWUgOiBzdHlsZU5hbWUucmVwbGFjZShoeXBoZW5hdGVSZWdleCwgJy0kJicpLnRvTG93ZXJDYXNlKCk7XG59KTtcblxudmFyIHByb2Nlc3NTdHlsZVZhbHVlID0gZnVuY3Rpb24gcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZSkge1xuICBzd2l0Y2ggKGtleSkge1xuICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgY2FzZSAnYW5pbWF0aW9uTmFtZSc6XG4gICAgICB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoYW5pbWF0aW9uUmVnZXgsIGZ1bmN0aW9uIChtYXRjaCwgcDEsIHAyKSB7XG4gICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgIG5hbWU6IHAxLFxuICAgICAgICAgICAgICBzdHlsZXM6IHAyLFxuICAgICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcDE7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIGlmICh1bml0bGVzc1trZXldICE9PSAxICYmICFpc0N1c3RvbVByb3BlcnR5KGtleSkgJiYgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gMCkge1xuICAgIHJldHVybiB2YWx1ZSArICdweCc7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59O1xuXG52YXIgbm9Db21wb25lbnRTZWxlY3Rvck1lc3NhZ2UgPSAnQ29tcG9uZW50IHNlbGVjdG9ycyBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggJyArICdAZW1vdGlvbi9iYWJlbC1wbHVnaW4sIHRoZSBzd2MgRW1vdGlvbiBwbHVnaW4sIG9yIGFub3RoZXIgRW1vdGlvbi1hd2FyZSAnICsgJ2NvbXBpbGVyIHRyYW5zZm9ybS4nO1xuXG5mdW5jdGlvbiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKSB7XG4gIGlmIChpbnRlcnBvbGF0aW9uID09IG51bGwpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICB2YXIgY29tcG9uZW50U2VsZWN0b3IgPSBpbnRlcnBvbGF0aW9uO1xuXG4gIGlmIChjb21wb25lbnRTZWxlY3Rvci5fX2Vtb3Rpb25fc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcblxuICAgIHJldHVybiBjb21wb25lbnRTZWxlY3RvcjtcbiAgfVxuXG4gIHN3aXRjaCAodHlwZW9mIGludGVycG9sYXRpb24pIHtcbiAgICBjYXNlICdib29sZWFuJzpcbiAgICAgIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuXG4gICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgIHtcbiAgICAgICAgdmFyIGtleWZyYW1lcyA9IGludGVycG9sYXRpb247XG5cbiAgICAgICAgaWYgKGtleWZyYW1lcy5hbmltID09PSAxKSB7XG4gICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgbmFtZToga2V5ZnJhbWVzLm5hbWUsXG4gICAgICAgICAgICBzdHlsZXM6IGtleWZyYW1lcy5zdHlsZXMsXG4gICAgICAgICAgICBuZXh0OiBjdXJzb3JcbiAgICAgICAgICB9O1xuICAgICAgICAgIHJldHVybiBrZXlmcmFtZXMubmFtZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZXJpYWxpemVkU3R5bGVzID0gaW50ZXJwb2xhdGlvbjtcblxuICAgICAgICBpZiAoc2VyaWFsaXplZFN0eWxlcy5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhciBuZXh0ID0gc2VyaWFsaXplZFN0eWxlcy5uZXh0O1xuXG4gICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgLy8gbm90IHRoZSBtb3N0IGVmZmljaWVudCB0aGluZyBldmVyIGJ1dCB0aGlzIGlzIGEgcHJldHR5IHJhcmUgY2FzZVxuICAgICAgICAgICAgLy8gYW5kIHRoZXJlIHdpbGwgYmUgdmVyeSBmZXcgaXRlcmF0aW9ucyBvZiB0aGlzIGdlbmVyYWxseVxuICAgICAgICAgICAgd2hpbGUgKG5leHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICBjdXJzb3IgPSB7XG4gICAgICAgICAgICAgICAgbmFtZTogbmV4dC5uYW1lLFxuICAgICAgICAgICAgICAgIHN0eWxlczogbmV4dC5zdHlsZXMsXG4gICAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIG5leHQgPSBuZXh0Lm5leHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIHN0eWxlcyA9IHNlcmlhbGl6ZWRTdHlsZXMuc3R5bGVzICsgXCI7XCI7XG4gICAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjcmVhdGVTdHJpbmdGcm9tT2JqZWN0KG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBpbnRlcnBvbGF0aW9uKTtcbiAgICAgIH1cblxuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICAgIHtcbiAgICAgICAgaWYgKG1lcmdlZFByb3BzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YXIgcHJldmlvdXNDdXJzb3IgPSBjdXJzb3I7XG4gICAgICAgICAgdmFyIHJlc3VsdCA9IGludGVycG9sYXRpb24obWVyZ2VkUHJvcHMpO1xuICAgICAgICAgIGN1cnNvciA9IHByZXZpb3VzQ3Vyc29yO1xuICAgICAgICAgIHJldHVybiBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCByZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gIH0gLy8gZmluYWxpemUgc3RyaW5nIHZhbHVlcyAocmVndWxhciBzdHJpbmdzIGFuZCBmdW5jdGlvbnMgaW50ZXJwb2xhdGVkIGludG8gY3NzIGNhbGxzKVxuXG5cbiAgdmFyIGFzU3RyaW5nID0gaW50ZXJwb2xhdGlvbjtcblxuICBpZiAocmVnaXN0ZXJlZCA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGFzU3RyaW5nO1xuICB9XG5cbiAgdmFyIGNhY2hlZCA9IHJlZ2lzdGVyZWRbYXNTdHJpbmddO1xuICByZXR1cm4gY2FjaGVkICE9PSB1bmRlZmluZWQgPyBjYWNoZWQgOiBhc1N0cmluZztcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqKSB7XG4gIHZhciBzdHJpbmcgPSAnJztcblxuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBvYmoubGVuZ3RoOyBpKyspIHtcbiAgICAgIHN0cmluZyArPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCBvYmpbaV0pICsgXCI7XCI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgIHZhciB2YWx1ZSA9IG9ialtrZXldO1xuXG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0Jykge1xuICAgICAgICB2YXIgYXNTdHJpbmcgPSB2YWx1ZTtcblxuICAgICAgICBpZiAocmVnaXN0ZXJlZCAhPSBudWxsICYmIHJlZ2lzdGVyZWRbYXNTdHJpbmddICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzdHJpbmcgKz0ga2V5ICsgXCJ7XCIgKyByZWdpc3RlcmVkW2FzU3RyaW5nXSArIFwifVwiO1xuICAgICAgICB9IGVsc2UgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZShhc1N0cmluZykpIHtcbiAgICAgICAgICBzdHJpbmcgKz0gcHJvY2Vzc1N0eWxlTmFtZShrZXkpICsgXCI6XCIgKyBwcm9jZXNzU3R5bGVWYWx1ZShrZXksIGFzU3RyaW5nKSArIFwiO1wiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoa2V5ID09PSAnTk9fQ09NUE9ORU5UX1NFTEVDVE9SJyAmJiBpc0RldmVsb3BtZW50KSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB0eXBlb2YgdmFsdWVbMF0gPT09ICdzdHJpbmcnICYmIChyZWdpc3RlcmVkID09IG51bGwgfHwgcmVnaXN0ZXJlZFt2YWx1ZVswXV0gPT09IHVuZGVmaW5lZCkpIHtcbiAgICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgdmFsdWUubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBpZiAoaXNQcm9jZXNzYWJsZVZhbHVlKHZhbHVlW19pXSkpIHtcbiAgICAgICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCB2YWx1ZVtfaV0pICsgXCI7XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBpbnRlcnBvbGF0ZWQgPSBoYW5kbGVJbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzLCByZWdpc3RlcmVkLCB2YWx1ZSk7XG5cbiAgICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgICAgY2FzZSAnYW5pbWF0aW9uJzpcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoa2V5KSArIFwiOlwiICsgaW50ZXJwb2xhdGVkICsgXCI7XCI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAge1xuXG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IGtleSArIFwie1wiICsgaW50ZXJwb2xhdGVkICsgXCJ9XCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gc3RyaW5nO1xufVxuXG52YXIgbGFiZWxQYXR0ZXJuID0gL2xhYmVsOlxccyooW15cXHM7e10rKVxccyooO3wkKS9nOyAvLyB0aGlzIGlzIHRoZSBjdXJzb3IgZm9yIGtleWZyYW1lc1xuLy8ga2V5ZnJhbWVzIGFyZSBzdG9yZWQgb24gdGhlIFNlcmlhbGl6ZWRTdHlsZXMgb2JqZWN0IGFzIGEgbGlua2VkIGxpc3RcblxudmFyIGN1cnNvcjtcbmZ1bmN0aW9uIHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCByZWdpc3RlcmVkLCBtZXJnZWRQcm9wcykge1xuICBpZiAoYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdvYmplY3QnICYmIGFyZ3NbMF0gIT09IG51bGwgJiYgYXJnc1swXS5zdHlsZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBhcmdzWzBdO1xuICB9XG5cbiAgdmFyIHN0cmluZ01vZGUgPSB0cnVlO1xuICB2YXIgc3R5bGVzID0gJyc7XG4gIGN1cnNvciA9IHVuZGVmaW5lZDtcbiAgdmFyIHN0cmluZ3MgPSBhcmdzWzBdO1xuXG4gIGlmIChzdHJpbmdzID09IG51bGwgfHwgc3RyaW5ncy5yYXcgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0cmluZ01vZGUgPSBmYWxzZTtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgc3RyaW5ncyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIGFzVGVtcGxhdGVTdHJpbmdzQXJyID0gc3RyaW5ncztcblxuICAgIHN0eWxlcyArPSBhc1RlbXBsYXRlU3RyaW5nc0FyclswXTtcbiAgfSAvLyB3ZSBzdGFydCBhdCAxIHNpbmNlIHdlJ3ZlIGFscmVhZHkgaGFuZGxlZCB0aGUgZmlyc3QgYXJnXG5cblxuICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBzdHlsZXMgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgYXJnc1tpXSk7XG5cbiAgICBpZiAoc3RyaW5nTW9kZSkge1xuICAgICAgdmFyIHRlbXBsYXRlU3RyaW5nc0FyciA9IHN0cmluZ3M7XG5cbiAgICAgIHN0eWxlcyArPSB0ZW1wbGF0ZVN0cmluZ3NBcnJbaV07XG4gICAgfVxuICB9IC8vIHVzaW5nIGEgZ2xvYmFsIHJlZ2V4IHdpdGggLmV4ZWMgaXMgc3RhdGVmdWwgc28gbGFzdEluZGV4IGhhcyB0byBiZSByZXNldCBlYWNoIHRpbWVcblxuXG4gIGxhYmVsUGF0dGVybi5sYXN0SW5kZXggPSAwO1xuICB2YXIgaWRlbnRpZmllck5hbWUgPSAnJztcbiAgdmFyIG1hdGNoOyAvLyBodHRwczovL2VzYmVuY2guY29tL2JlbmNoLzViODA5YzJjZjI5NDk4MDBhMGY2MWZiNVxuXG4gIHdoaWxlICgobWF0Y2ggPSBsYWJlbFBhdHRlcm4uZXhlYyhzdHlsZXMpKSAhPT0gbnVsbCkge1xuICAgIGlkZW50aWZpZXJOYW1lICs9ICctJyArIG1hdGNoWzFdO1xuICB9XG5cbiAgdmFyIG5hbWUgPSBoYXNoU3RyaW5nKHN0eWxlcykgKyBpZGVudGlmaWVyTmFtZTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgc3R5bGVzOiBzdHlsZXMsXG4gICAgbmV4dDogY3Vyc29yXG4gIH07XG59XG5cbmV4cG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9O1xuIiwiLyogZXNsaW50LWRpc2FibGUgKi9cbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvbXVybXVyaGFzaC1qc1xuLy8gUG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2FhcHBsZWJ5L3NtaGFzaGVyL2Jsb2IvNjFhMDUzMGYyODI3N2YyZTg1MGJmYzM5NjAwY2U2MWQwMmI1MThkZS9zcmMvTXVybXVySGFzaDIuY3BwI0wzNy1MODZcbmZ1bmN0aW9uIG11cm11cjIoc3RyKSB7XG4gIC8vICdtJyBhbmQgJ3InIGFyZSBtaXhpbmcgY29uc3RhbnRzIGdlbmVyYXRlZCBvZmZsaW5lLlxuICAvLyBUaGV5J3JlIG5vdCByZWFsbHkgJ21hZ2ljJywgdGhleSBqdXN0IGhhcHBlbiB0byB3b3JrIHdlbGwuXG4gIC8vIGNvbnN0IG0gPSAweDViZDFlOTk1O1xuICAvLyBjb25zdCByID0gMjQ7XG4gIC8vIEluaXRpYWxpemUgdGhlIGhhc2hcbiAgdmFyIGggPSAwOyAvLyBNaXggNCBieXRlcyBhdCBhIHRpbWUgaW50byB0aGUgaGFzaFxuXG4gIHZhciBrLFxuICAgICAgaSA9IDAsXG4gICAgICBsZW4gPSBzdHIubGVuZ3RoO1xuXG4gIGZvciAoOyBsZW4gPj0gNDsgKytpLCBsZW4gLT0gNCkge1xuICAgIGsgPSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmYgfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDggfCAoc3RyLmNoYXJDb2RlQXQoKytpKSAmIDB4ZmYpIDw8IDE2IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAyNDtcbiAgICBrID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgICBrIF49XG4gICAgLyogayA+Pj4gcjogKi9cbiAgICBrID4+PiAyNDtcbiAgICBoID1cbiAgICAvKiBNYXRoLmltdWwoaywgbSk6ICovXG4gICAgKGsgJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoayA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KSBeXG4gICAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gSGFuZGxlIHRoZSBsYXN0IGZldyBieXRlcyBvZiB0aGUgaW5wdXQgYXJyYXlcblxuXG4gIHN3aXRjaCAobGVuKSB7XG4gICAgY2FzZSAzOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDIpICYgMHhmZikgPDwgMTY7XG5cbiAgICBjYXNlIDI6XG4gICAgICBoIF49IChzdHIuY2hhckNvZGVBdChpICsgMSkgJiAweGZmKSA8PCA4O1xuXG4gICAgY2FzZSAxOlxuICAgICAgaCBePSBzdHIuY2hhckNvZGVBdChpKSAmIDB4ZmY7XG4gICAgICBoID1cbiAgICAgIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgICAgIChoICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGggPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gIH0gLy8gRG8gYSBmZXcgZmluYWwgbWl4ZXMgb2YgdGhlIGhhc2ggdG8gZW5zdXJlIHRoZSBsYXN0IGZld1xuICAvLyBieXRlcyBhcmUgd2VsbC1pbmNvcnBvcmF0ZWQuXG5cblxuICBoIF49IGggPj4+IDEzO1xuICBoID1cbiAgLyogTWF0aC5pbXVsKGgsIG0pOiAqL1xuICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICByZXR1cm4gKChoIF4gaCA+Pj4gMTUpID4+PiAwKS50b1N0cmluZygzNik7XG59XG5cbmV4cG9ydCB7IG11cm11cjIgYXMgZGVmYXVsdCB9O1xuIiwidmFyIGlzQnJvd3NlciA9IHRydWU7XG5cbmZ1bmN0aW9uIGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lcykge1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gJyc7XG4gIGNsYXNzTmFtZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjbGFzc05hbWUpIHtcbiAgICBpZiAocmVnaXN0ZXJlZFtjbGFzc05hbWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlZ2lzdGVyZWRTdHlsZXMucHVzaChyZWdpc3RlcmVkW2NsYXNzTmFtZV0gKyBcIjtcIik7XG4gICAgfSBlbHNlIGlmIChjbGFzc05hbWUpIHtcbiAgICAgIHJhd0NsYXNzTmFtZSArPSBjbGFzc05hbWUgKyBcIiBcIjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmF3Q2xhc3NOYW1lO1xufVxudmFyIHJlZ2lzdGVyU3R5bGVzID0gZnVuY3Rpb24gcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoIC8vIHdlIG9ubHkgbmVlZCB0byBhZGQgdGhlIHN0eWxlcyB0byB0aGUgcmVnaXN0ZXJlZCBjYWNoZSBpZiB0aGVcbiAgLy8gY2xhc3MgbmFtZSBjb3VsZCBiZSB1c2VkIGZ1cnRoZXIgZG93blxuICAvLyB0aGUgdHJlZSBidXQgaWYgaXQncyBhIHN0cmluZyB0YWcsIHdlIGtub3cgaXQgd29uJ3RcbiAgLy8gc28gd2UgZG9uJ3QgaGF2ZSB0byBhZGQgaXQgdG8gcmVnaXN0ZXJlZCBjYWNoZS5cbiAgLy8gdGhpcyBpbXByb3ZlcyBtZW1vcnkgdXNhZ2Ugc2luY2Ugd2UgY2FuIGF2b2lkIHN0b3JpbmcgdGhlIHdob2xlIHN0eWxlIHN0cmluZ1xuICAoaXNTdHJpbmdUYWcgPT09IGZhbHNlIHx8IC8vIHdlIG5lZWQgdG8gYWx3YXlzIHN0b3JlIGl0IGlmIHdlJ3JlIGluIGNvbXBhdCBtb2RlIGFuZFxuICAvLyBpbiBub2RlIHNpbmNlIGVtb3Rpb24tc2VydmVyIHJlbGllcyBvbiB3aGV0aGVyIGEgc3R5bGUgaXMgaW5cbiAgLy8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgdG8ga25vdyB3aGV0aGVyIGEgc3R5bGUgaXMgZ2xvYmFsIG9yIG5vdFxuICAvLyBhbHNvLCBub3RlIHRoYXQgdGhpcyBjaGVjayB3aWxsIGJlIGRlYWQgY29kZSBlbGltaW5hdGVkIGluIHRoZSBicm93c2VyXG4gIGlzQnJvd3NlciA9PT0gZmFsc2UgKSAmJiBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIGNhY2hlLnJlZ2lzdGVyZWRbY2xhc3NOYW1lXSA9IHNlcmlhbGl6ZWQuc3R5bGVzO1xuICB9XG59O1xudmFyIGluc2VydFN0eWxlcyA9IGZ1bmN0aW9uIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgaXNTdHJpbmdUYWcpIHtcbiAgcmVnaXN0ZXJTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKTtcbiAgdmFyIGNsYXNzTmFtZSA9IGNhY2hlLmtleSArIFwiLVwiICsgc2VyaWFsaXplZC5uYW1lO1xuXG4gIGlmIChjYWNoZS5pbnNlcnRlZFtzZXJpYWxpemVkLm5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICB2YXIgY3VycmVudCA9IHNlcmlhbGl6ZWQ7XG5cbiAgICBkbyB7XG4gICAgICBjYWNoZS5pbnNlcnQoc2VyaWFsaXplZCA9PT0gY3VycmVudCA/IFwiLlwiICsgY2xhc3NOYW1lIDogJycsIGN1cnJlbnQsIGNhY2hlLnNoZWV0LCB0cnVlKTtcblxuICAgICAgY3VycmVudCA9IGN1cnJlbnQubmV4dDtcbiAgICB9IHdoaWxlIChjdXJyZW50ICE9PSB1bmRlZmluZWQpO1xuICB9XG59O1xuXG5leHBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCBpbnNlcnRTdHlsZXMsIHJlZ2lzdGVyU3R5bGVzIH07XG4iLCJpbXBvcnQgY3JlYXRlQ2FjaGUgZnJvbSAnQGVtb3Rpb24vY2FjaGUnO1xuaW1wb3J0IHsgc2VyaWFsaXplU3R5bGVzIH0gZnJvbSAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCB7IGdldFJlZ2lzdGVyZWRTdHlsZXMsIGluc2VydFN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3V0aWxzJztcblxuZnVuY3Rpb24gaW5zZXJ0V2l0aG91dFNjb3BpbmcoY2FjaGUsIHNlcmlhbGl6ZWQpIHtcbiAgaWYgKGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBjYWNoZS5pbnNlcnQoJycsIHNlcmlhbGl6ZWQsIGNhY2hlLnNoZWV0LCB0cnVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtZXJnZShyZWdpc3RlcmVkLCBjc3MsIGNsYXNzTmFtZSkge1xuICB2YXIgcmVnaXN0ZXJlZFN0eWxlcyA9IFtdO1xuICB2YXIgcmF3Q2xhc3NOYW1lID0gZ2V0UmVnaXN0ZXJlZFN0eWxlcyhyZWdpc3RlcmVkLCByZWdpc3RlcmVkU3R5bGVzLCBjbGFzc05hbWUpO1xuXG4gIGlmIChyZWdpc3RlcmVkU3R5bGVzLmxlbmd0aCA8IDIpIHtcbiAgICByZXR1cm4gY2xhc3NOYW1lO1xuICB9XG5cbiAgcmV0dXJuIHJhd0NsYXNzTmFtZSArIGNzcyhyZWdpc3RlcmVkU3R5bGVzKTtcbn1cblxudmFyIGNyZWF0ZUVtb3Rpb24gPSBmdW5jdGlvbiBjcmVhdGVFbW90aW9uKG9wdGlvbnMpIHtcbiAgdmFyIGNhY2hlID0gY3JlYXRlQ2FjaGUob3B0aW9ucyk7XG5cbiAgY2FjaGUuc2hlZXQuc3BlZWR5ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG5cbiAgICB0aGlzLmlzU3BlZWR5ID0gdmFsdWU7XG4gIH07XG5cbiAgY2FjaGUuY29tcGF0ID0gdHJ1ZTtcblxuICB2YXIgY3NzID0gZnVuY3Rpb24gY3NzKCkge1xuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkLCB1bmRlZmluZWQpO1xuICAgIGluc2VydFN0eWxlcyhjYWNoZSwgc2VyaWFsaXplZCwgZmFsc2UpO1xuICAgIHJldHVybiBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgfTtcblxuICB2YXIga2V5ZnJhbWVzID0gZnVuY3Rpb24ga2V5ZnJhbWVzKCkge1xuICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgIH1cblxuICAgIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIGNhY2hlLnJlZ2lzdGVyZWQpO1xuICAgIHZhciBhbmltYXRpb24gPSBcImFuaW1hdGlvbi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcbiAgICBpbnNlcnRXaXRob3V0U2NvcGluZyhjYWNoZSwge1xuICAgICAgbmFtZTogc2VyaWFsaXplZC5uYW1lLFxuICAgICAgc3R5bGVzOiBcIkBrZXlmcmFtZXMgXCIgKyBhbmltYXRpb24gKyBcIntcIiArIHNlcmlhbGl6ZWQuc3R5bGVzICsgXCJ9XCJcbiAgICB9KTtcbiAgICByZXR1cm4gYW5pbWF0aW9uO1xuICB9O1xuXG4gIHZhciBpbmplY3RHbG9iYWwgPSBmdW5jdGlvbiBpbmplY3RHbG9iYWwoKSB7XG4gICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4zKSwgX2tleTMgPSAwOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICBhcmdzW19rZXkzXSA9IGFyZ3VtZW50c1tfa2V5M107XG4gICAgfVxuXG4gICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoYXJncywgY2FjaGUucmVnaXN0ZXJlZCk7XG4gICAgaW5zZXJ0V2l0aG91dFNjb3BpbmcoY2FjaGUsIHNlcmlhbGl6ZWQpO1xuICB9O1xuXG4gIHZhciBjeCA9IGZ1bmN0aW9uIGN4KCkge1xuICAgIGZvciAodmFyIF9sZW40ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNCksIF9rZXk0ID0gMDsgX2tleTQgPCBfbGVuNDsgX2tleTQrKykge1xuICAgICAgYXJnc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgIH1cblxuICAgIHJldHVybiBtZXJnZShjYWNoZS5yZWdpc3RlcmVkLCBjc3MsIGNsYXNzbmFtZXMoYXJncykpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgY3NzOiBjc3MsXG4gICAgY3g6IGN4LFxuICAgIGluamVjdEdsb2JhbDogaW5qZWN0R2xvYmFsLFxuICAgIGtleWZyYW1lczoga2V5ZnJhbWVzLFxuICAgIGh5ZHJhdGU6IGZ1bmN0aW9uIGh5ZHJhdGUoaWRzKSB7XG4gICAgICBpZHMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIGNhY2hlLmluc2VydGVkW2tleV0gPSB0cnVlO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBmbHVzaDogZnVuY3Rpb24gZmx1c2goKSB7XG4gICAgICBjYWNoZS5yZWdpc3RlcmVkID0ge307XG4gICAgICBjYWNoZS5pbnNlcnRlZCA9IHt9O1xuICAgICAgY2FjaGUuc2hlZXQuZmx1c2goKTtcbiAgICB9LFxuICAgIHNoZWV0OiBjYWNoZS5zaGVldCxcbiAgICBjYWNoZTogY2FjaGUsXG4gICAgZ2V0UmVnaXN0ZXJlZFN0eWxlczogZ2V0UmVnaXN0ZXJlZFN0eWxlcy5iaW5kKG51bGwsIGNhY2hlLnJlZ2lzdGVyZWQpLFxuICAgIG1lcmdlOiBtZXJnZS5iaW5kKG51bGwsIGNhY2hlLnJlZ2lzdGVyZWQsIGNzcylcbiAgfTtcbn07XG5cbnZhciBjbGFzc25hbWVzID0gZnVuY3Rpb24gY2xhc3NuYW1lcyhhcmdzKSB7XG4gIHZhciBjbHMgPSAnJztcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgYXJnID0gYXJnc1tpXTtcbiAgICBpZiAoYXJnID09IG51bGwpIGNvbnRpbnVlO1xuICAgIHZhciB0b0FkZCA9IHZvaWQgMDtcblxuICAgIHN3aXRjaCAodHlwZW9mIGFyZykge1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICAgICAgdG9BZGQgPSBjbGFzc25hbWVzKGFyZyk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRvQWRkID0gJyc7XG5cbiAgICAgICAgICAgIGZvciAodmFyIGsgaW4gYXJnKSB7XG4gICAgICAgICAgICAgIGlmIChhcmdba10gJiYgaykge1xuICAgICAgICAgICAgICAgIHRvQWRkICYmICh0b0FkZCArPSAnICcpO1xuICAgICAgICAgICAgICAgIHRvQWRkICs9IGs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgdG9BZGQgPSBhcmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodG9BZGQpIHtcbiAgICAgIGNscyAmJiAoY2xzICs9ICcgJyk7XG4gICAgICBjbHMgKz0gdG9BZGQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNscztcbn07XG5cbmV4cG9ydCB7IGNyZWF0ZUVtb3Rpb24gYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGNyZWF0ZUVtb3Rpb24gZnJvbSAnLi4vY3JlYXRlLWluc3RhbmNlL2Rpc3QvZW1vdGlvbi1jc3MtY3JlYXRlLWluc3RhbmNlLmVzbS5qcyc7XG5pbXBvcnQgJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCAnQGVtb3Rpb24vc2VyaWFsaXplJztcbmltcG9ydCAnQGVtb3Rpb24vdXRpbHMnO1xuXG52YXIgX2NyZWF0ZUVtb3Rpb24gPSBjcmVhdGVFbW90aW9uKHtcbiAga2V5OiAnY3NzJ1xufSksXG4gICAgZmx1c2ggPSBfY3JlYXRlRW1vdGlvbi5mbHVzaCxcbiAgICBoeWRyYXRlID0gX2NyZWF0ZUVtb3Rpb24uaHlkcmF0ZSxcbiAgICBjeCA9IF9jcmVhdGVFbW90aW9uLmN4LFxuICAgIG1lcmdlID0gX2NyZWF0ZUVtb3Rpb24ubWVyZ2UsXG4gICAgZ2V0UmVnaXN0ZXJlZFN0eWxlcyA9IF9jcmVhdGVFbW90aW9uLmdldFJlZ2lzdGVyZWRTdHlsZXMsXG4gICAgaW5qZWN0R2xvYmFsID0gX2NyZWF0ZUVtb3Rpb24uaW5qZWN0R2xvYmFsLFxuICAgIGtleWZyYW1lcyA9IF9jcmVhdGVFbW90aW9uLmtleWZyYW1lcyxcbiAgICBjc3MgPSBfY3JlYXRlRW1vdGlvbi5jc3MsXG4gICAgc2hlZXQgPSBfY3JlYXRlRW1vdGlvbi5zaGVldCxcbiAgICBjYWNoZSA9IF9jcmVhdGVFbW90aW9uLmNhY2hlO1xuXG5leHBvcnQgeyBjYWNoZSwgY3NzLCBjeCwgZmx1c2gsIGdldFJlZ2lzdGVyZWRTdHlsZXMsIGh5ZHJhdGUsIGluamVjdEdsb2JhbCwga2V5ZnJhbWVzLCBtZXJnZSwgc2hlZXQgfTtcbiIsImZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICByZXR1cm4gX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAobikge1xuICAgIGZvciAodmFyIGUgPSAxOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKSB7XG4gICAgICB2YXIgdCA9IGFyZ3VtZW50c1tlXTtcbiAgICAgIGZvciAodmFyIHIgaW4gdCkgKHt9KS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsIHIpICYmIChuW3JdID0gdFtyXSk7XG4gICAgfVxuICAgIHJldHVybiBuO1xuICB9LCBfZXh0ZW5kcy5hcHBseShudWxsLCBhcmd1bWVudHMpO1xufVxuZXhwb3J0IHsgX2V4dGVuZHMgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHtcbiAgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9O1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7XG4gICAgaWYgKC0xICE9PSBlLmluZGV4T2YobikpIGNvbnRpbnVlO1xuICAgIHRbbl0gPSByW25dO1xuICB9XG4gIHJldHVybiB0O1xufVxuZXhwb3J0IHsgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0LCBlKSB7XG4gIHJldHVybiBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQsIGUpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gPSBlLCB0O1xuICB9LCBfc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5leHBvcnQgeyBfc2V0UHJvdG90eXBlT2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBzZXRQcm90b3R5cGVPZiBmcm9tIFwiLi9zZXRQcm90b3R5cGVPZi5qc1wiO1xuZnVuY3Rpb24gX2luaGVyaXRzTG9vc2UodCwgbykge1xuICB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoby5wcm90b3R5cGUpLCB0LnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IHQsIHNldFByb3RvdHlwZU9mKHQsIG8pO1xufVxuZXhwb3J0IHsgX2luaGVyaXRzTG9vc2UgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIHJlcGxhY2VDbGFzc05hbWUob3JpZ0NsYXNzLCBjbGFzc1RvUmVtb3ZlKSB7XG4gIHJldHVybiBvcmlnQ2xhc3MucmVwbGFjZShuZXcgUmVnRXhwKFwiKF58XFxcXHMpXCIgKyBjbGFzc1RvUmVtb3ZlICsgXCIoPzpcXFxcc3wkKVwiLCAnZycpLCAnJDEnKS5yZXBsYWNlKC9cXHMrL2csICcgJykucmVwbGFjZSgvXlxccyp8XFxzKiQvZywgJycpO1xufVxuLyoqXG4gKiBSZW1vdmVzIGEgQ1NTIGNsYXNzIGZyb20gYSBnaXZlbiBlbGVtZW50LlxuICogXG4gKiBAcGFyYW0gZWxlbWVudCB0aGUgZWxlbWVudFxuICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzIG5hbWVcbiAqL1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlbW92ZUNsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHtcbiAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZWxlbWVudC5jbGFzc05hbWUgPT09ICdzdHJpbmcnKSB7XG4gICAgZWxlbWVudC5jbGFzc05hbWUgPSByZXBsYWNlQ2xhc3NOYW1lKGVsZW1lbnQuY2xhc3NOYW1lLCBjbGFzc05hbWUpO1xuICB9IGVsc2Uge1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFzcycsIHJlcGxhY2VDbGFzc05hbWUoZWxlbWVudC5jbGFzc05hbWUgJiYgZWxlbWVudC5jbGFzc05hbWUuYmFzZVZhbCB8fCAnJywgY2xhc3NOYW1lKSk7XG4gIH1cbn0iLCJleHBvcnQgZGVmYXVsdCB7XG4gIGRpc2FibGVkOiBmYWxzZVxufTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuZXhwb3J0IGRlZmF1bHQgUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTsiLCJleHBvcnQgdmFyIGZvcmNlUmVmbG93ID0gZnVuY3Rpb24gZm9yY2VSZWZsb3cobm9kZSkge1xuICByZXR1cm4gbm9kZS5zY3JvbGxUb3A7XG59OyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IGNvbmZpZyBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyB0aW1lb3V0c1NoYXBlIH0gZnJvbSAnLi91dGlscy9Qcm9wVHlwZXMnO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cENvbnRleHQgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXBDb250ZXh0JztcbmltcG9ydCB7IGZvcmNlUmVmbG93IH0gZnJvbSAnLi91dGlscy9yZWZsb3cnO1xuZXhwb3J0IHZhciBVTk1PVU5URUQgPSAndW5tb3VudGVkJztcbmV4cG9ydCB2YXIgRVhJVEVEID0gJ2V4aXRlZCc7XG5leHBvcnQgdmFyIEVOVEVSSU5HID0gJ2VudGVyaW5nJztcbmV4cG9ydCB2YXIgRU5URVJFRCA9ICdlbnRlcmVkJztcbmV4cG9ydCB2YXIgRVhJVElORyA9ICdleGl0aW5nJztcbi8qKlxuICogVGhlIFRyYW5zaXRpb24gY29tcG9uZW50IGxldHMgeW91IGRlc2NyaWJlIGEgdHJhbnNpdGlvbiBmcm9tIG9uZSBjb21wb25lbnRcbiAqIHN0YXRlIHRvIGFub3RoZXIgX292ZXIgdGltZV8gd2l0aCBhIHNpbXBsZSBkZWNsYXJhdGl2ZSBBUEkuIE1vc3QgY29tbW9ubHlcbiAqIGl0J3MgdXNlZCB0byBhbmltYXRlIHRoZSBtb3VudGluZyBhbmQgdW5tb3VudGluZyBvZiBhIGNvbXBvbmVudCwgYnV0IGNhbiBhbHNvXG4gKiBiZSB1c2VkIHRvIGRlc2NyaWJlIGluLXBsYWNlIHRyYW5zaXRpb24gc3RhdGVzIGFzIHdlbGwuXG4gKlxuICogLS0tXG4gKlxuICogKipOb3RlKio6IGBUcmFuc2l0aW9uYCBpcyBhIHBsYXRmb3JtLWFnbm9zdGljIGJhc2UgY29tcG9uZW50LiBJZiB5b3UncmUgdXNpbmdcbiAqIHRyYW5zaXRpb25zIGluIENTUywgeW91J2xsIHByb2JhYmx5IHdhbnQgdG8gdXNlXG4gKiBbYENTU1RyYW5zaXRpb25gXShodHRwczovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2Nzcy10cmFuc2l0aW9uKVxuICogaW5zdGVhZC4gSXQgaW5oZXJpdHMgYWxsIHRoZSBmZWF0dXJlcyBvZiBgVHJhbnNpdGlvbmAsIGJ1dCBjb250YWluc1xuICogYWRkaXRpb25hbCBmZWF0dXJlcyBuZWNlc3NhcnkgdG8gcGxheSBuaWNlIHdpdGggQ1NTIHRyYW5zaXRpb25zIChoZW5jZSB0aGVcbiAqIG5hbWUgb2YgdGhlIGNvbXBvbmVudCkuXG4gKlxuICogLS0tXG4gKlxuICogQnkgZGVmYXVsdCB0aGUgYFRyYW5zaXRpb25gIGNvbXBvbmVudCBkb2VzIG5vdCBhbHRlciB0aGUgYmVoYXZpb3Igb2YgdGhlXG4gKiBjb21wb25lbnQgaXQgcmVuZGVycywgaXQgb25seSB0cmFja3MgXCJlbnRlclwiIGFuZCBcImV4aXRcIiBzdGF0ZXMgZm9yIHRoZVxuICogY29tcG9uZW50cy4gSXQncyB1cCB0byB5b3UgdG8gZ2l2ZSBtZWFuaW5nIGFuZCBlZmZlY3QgdG8gdGhvc2Ugc3RhdGVzLiBGb3JcbiAqIGV4YW1wbGUgd2UgY2FuIGFkZCBzdHlsZXMgdG8gYSBjb21wb25lbnQgd2hlbiBpdCBlbnRlcnMgb3IgZXhpdHM6XG4gKlxuICogYGBganN4XG4gKiBpbXBvcnQgeyBUcmFuc2l0aW9uIH0gZnJvbSAncmVhY3QtdHJhbnNpdGlvbi1ncm91cCc7XG4gKlxuICogY29uc3QgZHVyYXRpb24gPSAzMDA7XG4gKlxuICogY29uc3QgZGVmYXVsdFN0eWxlID0ge1xuICogICB0cmFuc2l0aW9uOiBgb3BhY2l0eSAke2R1cmF0aW9ufW1zIGVhc2UtaW4tb3V0YCxcbiAqICAgb3BhY2l0eTogMCxcbiAqIH1cbiAqXG4gKiBjb25zdCB0cmFuc2l0aW9uU3R5bGVzID0ge1xuICogICBlbnRlcmluZzogeyBvcGFjaXR5OiAxIH0sXG4gKiAgIGVudGVyZWQ6ICB7IG9wYWNpdHk6IDEgfSxcbiAqICAgZXhpdGluZzogIHsgb3BhY2l0eTogMCB9LFxuICogICBleGl0ZWQ6ICB7IG9wYWNpdHk6IDAgfSxcbiAqIH07XG4gKlxuICogY29uc3QgRmFkZSA9ICh7IGluOiBpblByb3AgfSkgPT4gKFxuICogICA8VHJhbnNpdGlvbiBpbj17aW5Qcm9wfSB0aW1lb3V0PXtkdXJhdGlvbn0+XG4gKiAgICAge3N0YXRlID0+IChcbiAqICAgICAgIDxkaXYgc3R5bGU9e3tcbiAqICAgICAgICAgLi4uZGVmYXVsdFN0eWxlLFxuICogICAgICAgICAuLi50cmFuc2l0aW9uU3R5bGVzW3N0YXRlXVxuICogICAgICAgfX0+XG4gKiAgICAgICAgIEknbSBhIGZhZGUgVHJhbnNpdGlvbiFcbiAqICAgICAgIDwvZGl2PlxuICogICAgICl9XG4gKiAgIDwvVHJhbnNpdGlvbj5cbiAqICk7XG4gKiBgYGBcbiAqXG4gKiBUaGVyZSBhcmUgNCBtYWluIHN0YXRlcyBhIFRyYW5zaXRpb24gY2FuIGJlIGluOlxuICogIC0gYCdlbnRlcmluZydgXG4gKiAgLSBgJ2VudGVyZWQnYFxuICogIC0gYCdleGl0aW5nJ2BcbiAqICAtIGAnZXhpdGVkJ2BcbiAqXG4gKiBUcmFuc2l0aW9uIHN0YXRlIGlzIHRvZ2dsZWQgdmlhIHRoZSBgaW5gIHByb3AuIFdoZW4gYHRydWVgIHRoZSBjb21wb25lbnRcbiAqIGJlZ2lucyB0aGUgXCJFbnRlclwiIHN0YWdlLiBEdXJpbmcgdGhpcyBzdGFnZSwgdGhlIGNvbXBvbmVudCB3aWxsIHNoaWZ0IGZyb21cbiAqIGl0cyBjdXJyZW50IHRyYW5zaXRpb24gc3RhdGUsIHRvIGAnZW50ZXJpbmcnYCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZVxuICogdHJhbnNpdGlvbiBhbmQgdGhlbiB0byB0aGUgYCdlbnRlcmVkJ2Agc3RhZ2Ugb25jZSBpdCdzIGNvbXBsZXRlLiBMZXQncyB0YWtlXG4gKiB0aGUgZm9sbG93aW5nIGV4YW1wbGUgKHdlJ2xsIHVzZSB0aGVcbiAqIFt1c2VTdGF0ZV0oaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2hvb2tzLXJlZmVyZW5jZS5odG1sI3VzZXN0YXRlKSBob29rKTpcbiAqXG4gKiBgYGBqc3hcbiAqIGZ1bmN0aW9uIEFwcCgpIHtcbiAqICAgY29uc3QgW2luUHJvcCwgc2V0SW5Qcm9wXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2PlxuICogICAgICAgPFRyYW5zaXRpb24gaW49e2luUHJvcH0gdGltZW91dD17NTAwfT5cbiAqICAgICAgICAge3N0YXRlID0+IChcbiAqICAgICAgICAgICAvLyAuLi5cbiAqICAgICAgICAgKX1cbiAqICAgICAgIDwvVHJhbnNpdGlvbj5cbiAqICAgICAgIDxidXR0b24gb25DbGljaz17KCkgPT4gc2V0SW5Qcm9wKHRydWUpfT5cbiAqICAgICAgICAgQ2xpY2sgdG8gRW50ZXJcbiAqICAgICAgIDwvYnV0dG9uPlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogV2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQgdGhlIGNvbXBvbmVudCB3aWxsIHNoaWZ0IHRvIHRoZSBgJ2VudGVyaW5nJ2Agc3RhdGVcbiAqIGFuZCBzdGF5IHRoZXJlIGZvciA1MDBtcyAodGhlIHZhbHVlIG9mIGB0aW1lb3V0YCkgYmVmb3JlIGl0IGZpbmFsbHkgc3dpdGNoZXNcbiAqIHRvIGAnZW50ZXJlZCdgLlxuICpcbiAqIFdoZW4gYGluYCBpcyBgZmFsc2VgIHRoZSBzYW1lIHRoaW5nIGhhcHBlbnMgZXhjZXB0IHRoZSBzdGF0ZSBtb3ZlcyBmcm9tXG4gKiBgJ2V4aXRpbmcnYCB0byBgJ2V4aXRlZCdgLlxuICovXG5cbnZhciBUcmFuc2l0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRyYW5zaXRpb24ocHJvcHMsIGNvbnRleHQpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkgfHwgdGhpcztcbiAgICB2YXIgcGFyZW50R3JvdXAgPSBjb250ZXh0OyAvLyBJbiB0aGUgY29udGV4dCBvZiBhIFRyYW5zaXRpb25Hcm91cCBhbGwgZW50ZXJzIGFyZSByZWFsbHkgYXBwZWFyc1xuXG4gICAgdmFyIGFwcGVhciA9IHBhcmVudEdyb3VwICYmICFwYXJlbnRHcm91cC5pc01vdW50aW5nID8gcHJvcHMuZW50ZXIgOiBwcm9wcy5hcHBlYXI7XG4gICAgdmFyIGluaXRpYWxTdGF0dXM7XG4gICAgX3RoaXMuYXBwZWFyU3RhdHVzID0gbnVsbDtcblxuICAgIGlmIChwcm9wcy5pbikge1xuICAgICAgaWYgKGFwcGVhcikge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRVhJVEVEO1xuICAgICAgICBfdGhpcy5hcHBlYXJTdGF0dXMgPSBFTlRFUklORztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBFTlRFUkVEO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAocHJvcHMudW5tb3VudE9uRXhpdCB8fCBwcm9wcy5tb3VudE9uRW50ZXIpIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IFVOTU9VTlRFRDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBFWElURUQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBzdGF0dXM6IGluaXRpYWxTdGF0dXNcbiAgICB9O1xuICAgIF90aGlzLm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgVHJhbnNpdGlvbi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMoX3JlZiwgcHJldlN0YXRlKSB7XG4gICAgdmFyIG5leHRJbiA9IF9yZWYuaW47XG5cbiAgICBpZiAobmV4dEluICYmIHByZXZTdGF0ZS5zdGF0dXMgPT09IFVOTU9VTlRFRCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH0gLy8gZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUocHJldlByb3BzKSB7XG4gIC8vICAgbGV0IG5leHRTdGF0dXMgPSBudWxsXG4gIC8vICAgaWYgKHByZXZQcm9wcyAhPT0gdGhpcy5wcm9wcykge1xuICAvLyAgICAgY29uc3QgeyBzdGF0dXMgfSA9IHRoaXMuc3RhdGVcbiAgLy8gICAgIGlmICh0aGlzLnByb3BzLmluKSB7XG4gIC8vICAgICAgIGlmIChzdGF0dXMgIT09IEVOVEVSSU5HICYmIHN0YXR1cyAhPT0gRU5URVJFRCkge1xuICAvLyAgICAgICAgIG5leHRTdGF0dXMgPSBFTlRFUklOR1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9IGVsc2Uge1xuICAvLyAgICAgICBpZiAoc3RhdHVzID09PSBFTlRFUklORyB8fCBzdGF0dXMgPT09IEVOVEVSRUQpIHtcbiAgLy8gICAgICAgICBuZXh0U3RhdHVzID0gRVhJVElOR1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG4gIC8vICAgfVxuICAvLyAgIHJldHVybiB7IG5leHRTdGF0dXMgfVxuICAvLyB9XG4gIDtcblxuICB2YXIgX3Byb3RvID0gVHJhbnNpdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy51cGRhdGVTdGF0dXModHJ1ZSwgdGhpcy5hcHBlYXJTdGF0dXMpO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUocHJldlByb3BzKSB7XG4gICAgdmFyIG5leHRTdGF0dXMgPSBudWxsO1xuXG4gICAgaWYgKHByZXZQcm9wcyAhPT0gdGhpcy5wcm9wcykge1xuICAgICAgdmFyIHN0YXR1cyA9IHRoaXMuc3RhdGUuc3RhdHVzO1xuXG4gICAgICBpZiAodGhpcy5wcm9wcy5pbikge1xuICAgICAgICBpZiAoc3RhdHVzICE9PSBFTlRFUklORyAmJiBzdGF0dXMgIT09IEVOVEVSRUQpIHtcbiAgICAgICAgICBuZXh0U3RhdHVzID0gRU5URVJJTkc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChzdGF0dXMgPT09IEVOVEVSSU5HIHx8IHN0YXR1cyA9PT0gRU5URVJFRCkge1xuICAgICAgICAgIG5leHRTdGF0dXMgPSBFWElUSU5HO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVTdGF0dXMoZmFsc2UsIG5leHRTdGF0dXMpO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMuY2FuY2VsTmV4dENhbGxiYWNrKCk7XG4gIH07XG5cbiAgX3Byb3RvLmdldFRpbWVvdXRzID0gZnVuY3Rpb24gZ2V0VGltZW91dHMoKSB7XG4gICAgdmFyIHRpbWVvdXQgPSB0aGlzLnByb3BzLnRpbWVvdXQ7XG4gICAgdmFyIGV4aXQsIGVudGVyLCBhcHBlYXI7XG4gICAgZXhpdCA9IGVudGVyID0gYXBwZWFyID0gdGltZW91dDtcblxuICAgIGlmICh0aW1lb3V0ICE9IG51bGwgJiYgdHlwZW9mIHRpbWVvdXQgIT09ICdudW1iZXInKSB7XG4gICAgICBleGl0ID0gdGltZW91dC5leGl0O1xuICAgICAgZW50ZXIgPSB0aW1lb3V0LmVudGVyOyAvLyBUT0RPOiByZW1vdmUgZmFsbGJhY2sgZm9yIG5leHQgbWFqb3JcblxuICAgICAgYXBwZWFyID0gdGltZW91dC5hcHBlYXIgIT09IHVuZGVmaW5lZCA/IHRpbWVvdXQuYXBwZWFyIDogZW50ZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGV4aXQ6IGV4aXQsXG4gICAgICBlbnRlcjogZW50ZXIsXG4gICAgICBhcHBlYXI6IGFwcGVhclxuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLnVwZGF0ZVN0YXR1cyA9IGZ1bmN0aW9uIHVwZGF0ZVN0YXR1cyhtb3VudGluZywgbmV4dFN0YXR1cykge1xuICAgIGlmIChtb3VudGluZyA9PT0gdm9pZCAwKSB7XG4gICAgICBtb3VudGluZyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChuZXh0U3RhdHVzICE9PSBudWxsKSB7XG4gICAgICAvLyBuZXh0U3RhdHVzIHdpbGwgYWx3YXlzIGJlIEVOVEVSSU5HIG9yIEVYSVRJTkcuXG4gICAgICB0aGlzLmNhbmNlbE5leHRDYWxsYmFjaygpO1xuXG4gICAgICBpZiAobmV4dFN0YXR1cyA9PT0gRU5URVJJTkcpIHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMudW5tb3VudE9uRXhpdCB8fCB0aGlzLnByb3BzLm1vdW50T25FbnRlcikge1xuICAgICAgICAgIHZhciBub2RlID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gdGhpcy5wcm9wcy5ub2RlUmVmLmN1cnJlbnQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTsgLy8gaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9wdWxsLzc0OVxuICAgICAgICAgIC8vIFdpdGggdW5tb3VudE9uRXhpdCBvciBtb3VudE9uRW50ZXIsIHRoZSBlbnRlciBhbmltYXRpb24gc2hvdWxkIGhhcHBlbiBhdCB0aGUgdHJhbnNpdGlvbiBiZXR3ZWVuIGBleGl0ZWRgIGFuZCBgZW50ZXJpbmdgLlxuICAgICAgICAgIC8vIFRvIG1ha2UgdGhlIGFuaW1hdGlvbiBoYXBwZW4sICB3ZSBoYXZlIHRvIHNlcGFyYXRlIGVhY2ggcmVuZGVyaW5nIGFuZCBhdm9pZCBiZWluZyBwcm9jZXNzZWQgYXMgYmF0Y2hlZC5cblxuICAgICAgICAgIGlmIChub2RlKSBmb3JjZVJlZmxvdyhub2RlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucGVyZm9ybUVudGVyKG1vdW50aW5nKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGVyZm9ybUV4aXQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMucHJvcHMudW5tb3VudE9uRXhpdCAmJiB0aGlzLnN0YXRlLnN0YXR1cyA9PT0gRVhJVEVEKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBVTk1PVU5URURcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucGVyZm9ybUVudGVyID0gZnVuY3Rpb24gcGVyZm9ybUVudGVyKG1vdW50aW5nKSB7XG4gICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICB2YXIgZW50ZXIgPSB0aGlzLnByb3BzLmVudGVyO1xuICAgIHZhciBhcHBlYXJpbmcgPSB0aGlzLmNvbnRleHQgPyB0aGlzLmNvbnRleHQuaXNNb3VudGluZyA6IG1vdW50aW5nO1xuXG4gICAgdmFyIF9yZWYyID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gW2FwcGVhcmluZ10gOiBbUmVhY3RET00uZmluZERPTU5vZGUodGhpcyksIGFwcGVhcmluZ10sXG4gICAgICAgIG1heWJlTm9kZSA9IF9yZWYyWzBdLFxuICAgICAgICBtYXliZUFwcGVhcmluZyA9IF9yZWYyWzFdO1xuXG4gICAgdmFyIHRpbWVvdXRzID0gdGhpcy5nZXRUaW1lb3V0cygpO1xuICAgIHZhciBlbnRlclRpbWVvdXQgPSBhcHBlYXJpbmcgPyB0aW1lb3V0cy5hcHBlYXIgOiB0aW1lb3V0cy5lbnRlcjsgLy8gbm8gZW50ZXIgYW5pbWF0aW9uIHNraXAgcmlnaHQgdG8gRU5URVJFRFxuICAgIC8vIGlmIHdlIGFyZSBtb3VudGluZyBhbmQgcnVubmluZyB0aGlzIGl0IG1lYW5zIGFwcGVhciBfbXVzdF8gYmUgc2V0XG5cbiAgICBpZiAoIW1vdW50aW5nICYmICFlbnRlciB8fCBjb25maWcuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBFTlRFUkVEXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyZWQobWF5YmVOb2RlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJvcHMub25FbnRlcihtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICBzdGF0dXM6IEVOVEVSSU5HXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMyLnByb3BzLm9uRW50ZXJpbmcobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG5cbiAgICAgIF90aGlzMi5vblRyYW5zaXRpb25FbmQoZW50ZXJUaW1lb3V0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMi5zYWZlU2V0U3RhdGUoe1xuICAgICAgICAgIHN0YXR1czogRU5URVJFRFxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMyLnByb3BzLm9uRW50ZXJlZChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8ucGVyZm9ybUV4aXQgPSBmdW5jdGlvbiBwZXJmb3JtRXhpdCgpIHtcbiAgICB2YXIgX3RoaXMzID0gdGhpcztcblxuICAgIHZhciBleGl0ID0gdGhpcy5wcm9wcy5leGl0O1xuICAgIHZhciB0aW1lb3V0cyA9IHRoaXMuZ2V0VGltZW91dHMoKTtcbiAgICB2YXIgbWF5YmVOb2RlID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gdW5kZWZpbmVkIDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7IC8vIG5vIGV4aXQgYW5pbWF0aW9uIHNraXAgcmlnaHQgdG8gRVhJVEVEXG5cbiAgICBpZiAoIWV4aXQgfHwgY29uZmlnLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRlZChtYXliZU5vZGUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcm9wcy5vbkV4aXQobWF5YmVOb2RlKTtcbiAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICBzdGF0dXM6IEVYSVRJTkdcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczMucHJvcHMub25FeGl0aW5nKG1heWJlTm9kZSk7XG5cbiAgICAgIF90aGlzMy5vblRyYW5zaXRpb25FbmQodGltZW91dHMuZXhpdCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgX3RoaXMzLnByb3BzLm9uRXhpdGVkKG1heWJlTm9kZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNhbmNlbE5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIGNhbmNlbE5leHRDYWxsYmFjaygpIHtcbiAgICBpZiAodGhpcy5uZXh0Q2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIHRoaXMubmV4dENhbGxiYWNrLmNhbmNlbCgpO1xuICAgICAgdGhpcy5uZXh0Q2FsbGJhY2sgPSBudWxsO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8uc2FmZVNldFN0YXRlID0gZnVuY3Rpb24gc2FmZVNldFN0YXRlKG5leHRTdGF0ZSwgY2FsbGJhY2spIHtcbiAgICAvLyBUaGlzIHNob3VsZG4ndCBiZSBuZWNlc3NhcnksIGJ1dCB0aGVyZSBhcmUgd2VpcmQgcmFjZSBjb25kaXRpb25zIHdpdGhcbiAgICAvLyBzZXRTdGF0ZSBjYWxsYmFja3MgYW5kIHVubW91bnRpbmcgaW4gdGVzdGluZywgc28gYWx3YXlzIG1ha2Ugc3VyZSB0aGF0XG4gICAgLy8gd2UgY2FuIGNhbmNlbCBhbnkgcGVuZGluZyBzZXRTdGF0ZSBjYWxsYmFja3MgYWZ0ZXIgd2UgdW5tb3VudC5cbiAgICBjYWxsYmFjayA9IHRoaXMuc2V0TmV4dENhbGxiYWNrKGNhbGxiYWNrKTtcbiAgICB0aGlzLnNldFN0YXRlKG5leHRTdGF0ZSwgY2FsbGJhY2spO1xuICB9O1xuXG4gIF9wcm90by5zZXROZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiBzZXROZXh0Q2FsbGJhY2soY2FsbGJhY2spIHtcbiAgICB2YXIgX3RoaXM0ID0gdGhpcztcblxuICAgIHZhciBhY3RpdmUgPSB0cnVlO1xuXG4gICAgdGhpcy5uZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgICAgIF90aGlzNC5uZXh0Q2FsbGJhY2sgPSBudWxsO1xuICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHRoaXMubmV4dENhbGxiYWNrLmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5uZXh0Q2FsbGJhY2s7XG4gIH07XG5cbiAgX3Byb3RvLm9uVHJhbnNpdGlvbkVuZCA9IGZ1bmN0aW9uIG9uVHJhbnNpdGlvbkVuZCh0aW1lb3V0LCBoYW5kbGVyKSB7XG4gICAgdGhpcy5zZXROZXh0Q2FsbGJhY2soaGFuZGxlcik7XG4gICAgdmFyIG5vZGUgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyB0aGlzLnByb3BzLm5vZGVSZWYuY3VycmVudCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpO1xuICAgIHZhciBkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyID0gdGltZW91dCA9PSBudWxsICYmICF0aGlzLnByb3BzLmFkZEVuZExpc3RlbmVyO1xuXG4gICAgaWYgKCFub2RlIHx8IGRvZXNOb3RIYXZlVGltZW91dE9yTGlzdGVuZXIpIHtcbiAgICAgIHNldFRpbWVvdXQodGhpcy5uZXh0Q2FsbGJhY2ssIDApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3BzLmFkZEVuZExpc3RlbmVyKSB7XG4gICAgICB2YXIgX3JlZjMgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyBbdGhpcy5uZXh0Q2FsbGJhY2tdIDogW25vZGUsIHRoaXMubmV4dENhbGxiYWNrXSxcbiAgICAgICAgICBtYXliZU5vZGUgPSBfcmVmM1swXSxcbiAgICAgICAgICBtYXliZU5leHRDYWxsYmFjayA9IF9yZWYzWzFdO1xuXG4gICAgICB0aGlzLnByb3BzLmFkZEVuZExpc3RlbmVyKG1heWJlTm9kZSwgbWF5YmVOZXh0Q2FsbGJhY2spO1xuICAgIH1cblxuICAgIGlmICh0aW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIHNldFRpbWVvdXQodGhpcy5uZXh0Q2FsbGJhY2ssIHRpbWVvdXQpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBzdGF0dXMgPSB0aGlzLnN0YXRlLnN0YXR1cztcblxuICAgIGlmIChzdGF0dXMgPT09IFVOTU9VTlRFRCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgX2luID0gX3RoaXMkcHJvcHMuaW4sXG4gICAgICAgIF9tb3VudE9uRW50ZXIgPSBfdGhpcyRwcm9wcy5tb3VudE9uRW50ZXIsXG4gICAgICAgIF91bm1vdW50T25FeGl0ID0gX3RoaXMkcHJvcHMudW5tb3VudE9uRXhpdCxcbiAgICAgICAgX2FwcGVhciA9IF90aGlzJHByb3BzLmFwcGVhcixcbiAgICAgICAgX2VudGVyID0gX3RoaXMkcHJvcHMuZW50ZXIsXG4gICAgICAgIF9leGl0ID0gX3RoaXMkcHJvcHMuZXhpdCxcbiAgICAgICAgX3RpbWVvdXQgPSBfdGhpcyRwcm9wcy50aW1lb3V0LFxuICAgICAgICBfYWRkRW5kTGlzdGVuZXIgPSBfdGhpcyRwcm9wcy5hZGRFbmRMaXN0ZW5lcixcbiAgICAgICAgX29uRW50ZXIgPSBfdGhpcyRwcm9wcy5vbkVudGVyLFxuICAgICAgICBfb25FbnRlcmluZyA9IF90aGlzJHByb3BzLm9uRW50ZXJpbmcsXG4gICAgICAgIF9vbkVudGVyZWQgPSBfdGhpcyRwcm9wcy5vbkVudGVyZWQsXG4gICAgICAgIF9vbkV4aXQgPSBfdGhpcyRwcm9wcy5vbkV4aXQsXG4gICAgICAgIF9vbkV4aXRpbmcgPSBfdGhpcyRwcm9wcy5vbkV4aXRpbmcsXG4gICAgICAgIF9vbkV4aXRlZCA9IF90aGlzJHByb3BzLm9uRXhpdGVkLFxuICAgICAgICBfbm9kZVJlZiA9IF90aGlzJHByb3BzLm5vZGVSZWYsXG4gICAgICAgIGNoaWxkUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY2hpbGRyZW5cIiwgXCJpblwiLCBcIm1vdW50T25FbnRlclwiLCBcInVubW91bnRPbkV4aXRcIiwgXCJhcHBlYXJcIiwgXCJlbnRlclwiLCBcImV4aXRcIiwgXCJ0aW1lb3V0XCIsIFwiYWRkRW5kTGlzdGVuZXJcIiwgXCJvbkVudGVyXCIsIFwib25FbnRlcmluZ1wiLCBcIm9uRW50ZXJlZFwiLCBcIm9uRXhpdFwiLCBcIm9uRXhpdGluZ1wiLCBcIm9uRXhpdGVkXCIsIFwibm9kZVJlZlwiXSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgLyojX19QVVJFX18qL1xuICAgICAgLy8gYWxsb3dzIGZvciBuZXN0ZWQgVHJhbnNpdGlvbnNcbiAgICAgIFJlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgfSwgdHlwZW9mIGNoaWxkcmVuID09PSAnZnVuY3Rpb24nID8gY2hpbGRyZW4oc3RhdHVzLCBjaGlsZFByb3BzKSA6IFJlYWN0LmNsb25lRWxlbWVudChSZWFjdC5DaGlsZHJlbi5vbmx5KGNoaWxkcmVuKSwgY2hpbGRQcm9wcykpXG4gICAgKTtcbiAgfTtcblxuICByZXR1cm4gVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuVHJhbnNpdGlvbi5jb250ZXh0VHlwZSA9IFRyYW5zaXRpb25Hcm91cENvbnRleHQ7XG5UcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIEEgUmVhY3QgcmVmZXJlbmNlIHRvIERPTSBlbGVtZW50IHRoYXQgbmVlZCB0byB0cmFuc2l0aW9uOlxuICAgKiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTExMjcxMzAvNDY3MTkzMlxuICAgKlxuICAgKiAgIC0gV2hlbiBgbm9kZVJlZmAgcHJvcCBpcyB1c2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZCB0byBjYWxsYmFjayBmdW5jdGlvbnNcbiAgICogICAgICAoZS5nLiBgb25FbnRlcmApIGJlY2F1c2UgdXNlciBhbHJlYWR5IGhhcyBkaXJlY3QgYWNjZXNzIHRvIHRoZSBub2RlLlxuICAgKiAgIC0gV2hlbiBjaGFuZ2luZyBga2V5YCBwcm9wIG9mIGBUcmFuc2l0aW9uYCBpbiBhIGBUcmFuc2l0aW9uR3JvdXBgIGEgbmV3XG4gICAqICAgICBgbm9kZVJlZmAgbmVlZCB0byBiZSBwcm92aWRlZCB0byBgVHJhbnNpdGlvbmAgd2l0aCBjaGFuZ2VkIGBrZXlgIHByb3BcbiAgICogICAgIChzZWVcbiAgICogICAgIFt0ZXN0L0NTU1RyYW5zaXRpb24tdGVzdC5qc10oaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9ibG9iLzEzNDM1Zjg5N2IzYWI3MWY2ZTE5ZDcyNGYxNDU1OTZmNTkxMDU4MWMvdGVzdC9DU1NUcmFuc2l0aW9uLXRlc3QuanMjTDM2Mi1MNDM3KSkuXG4gICAqL1xuICBub2RlUmVmOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IHR5cGVvZiBFbGVtZW50ID09PSAndW5kZWZpbmVkJyA/IFByb3BUeXBlcy5hbnkgOiBmdW5jdGlvbiAocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgICAgdmFyIHZhbHVlID0gcHJvcFZhbHVlW2tleV07XG4gICAgICByZXR1cm4gUHJvcFR5cGVzLmluc3RhbmNlT2YodmFsdWUgJiYgJ293bmVyRG9jdW1lbnQnIGluIHZhbHVlID8gdmFsdWUub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldy5FbGVtZW50IDogRWxlbWVudCkocHJvcFZhbHVlLCBrZXksIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCk7XG4gICAgfVxuICB9KSxcblxuICAvKipcbiAgICogQSBgZnVuY3Rpb25gIGNoaWxkIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgYSBSZWFjdCBlbGVtZW50LiBUaGlzIGZ1bmN0aW9uIGlzXG4gICAqIGNhbGxlZCB3aXRoIHRoZSBjdXJyZW50IHRyYW5zaXRpb24gc3RhdHVzIChgJ2VudGVyaW5nJ2AsIGAnZW50ZXJlZCdgLFxuICAgKiBgJ2V4aXRpbmcnYCwgYCdleGl0ZWQnYCksIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGFwcGx5IGNvbnRleHRcbiAgICogc3BlY2lmaWMgcHJvcHMgdG8gYSBjb21wb25lbnQuXG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiA8VHJhbnNpdGlvbiBpbj17dGhpcy5zdGF0ZS5pbn0gdGltZW91dD17MTUwfT5cbiAgICogICB7c3RhdGUgPT4gKFxuICAgKiAgICAgPE15Q29tcG9uZW50IGNsYXNzTmFtZT17YGZhZGUgZmFkZS0ke3N0YXRlfWB9IC8+XG4gICAqICAgKX1cbiAgICogPC9UcmFuc2l0aW9uPlxuICAgKiBgYGBcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLCBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSkuaXNSZXF1aXJlZCxcblxuICAvKipcbiAgICogU2hvdyB0aGUgY29tcG9uZW50OyB0cmlnZ2VycyB0aGUgZW50ZXIgb3IgZXhpdCBzdGF0ZXNcbiAgICovXG4gIGluOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgY2hpbGQgY29tcG9uZW50IGlzIG1vdW50ZWQgaW1tZWRpYXRlbHkgYWxvbmcgd2l0aFxuICAgKiB0aGUgcGFyZW50IGBUcmFuc2l0aW9uYCBjb21wb25lbnQuIElmIHlvdSB3YW50IHRvIFwibGF6eSBtb3VudFwiIHRoZSBjb21wb25lbnQgb24gdGhlXG4gICAqIGZpcnN0IGBpbj17dHJ1ZX1gIHlvdSBjYW4gc2V0IGBtb3VudE9uRW50ZXJgLiBBZnRlciB0aGUgZmlyc3QgZW50ZXIgdHJhbnNpdGlvbiB0aGUgY29tcG9uZW50IHdpbGwgc3RheVxuICAgKiBtb3VudGVkLCBldmVuIG9uIFwiZXhpdGVkXCIsIHVubGVzcyB5b3UgYWxzbyBzcGVjaWZ5IGB1bm1vdW50T25FeGl0YC5cbiAgICovXG4gIG1vdW50T25FbnRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBzdGF5cyBtb3VudGVkIGFmdGVyIGl0IHJlYWNoZXMgdGhlIGAnZXhpdGVkJ2Agc3RhdGUuXG4gICAqIFNldCBgdW5tb3VudE9uRXhpdGAgaWYgeW91J2QgcHJlZmVyIHRvIHVubW91bnQgdGhlIGNvbXBvbmVudCBhZnRlciBpdCBmaW5pc2hlcyBleGl0aW5nLlxuICAgKi9cbiAgdW5tb3VudE9uRXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBkb2VzIG5vdCBwZXJmb3JtIHRoZSBlbnRlciB0cmFuc2l0aW9uIHdoZW5cbiAgICogaXQgZmlyc3QgbW91bnRzLCByZWdhcmRsZXNzIG9mIHRoZSB2YWx1ZSBvZiBgaW5gLiBJZiB5b3Ugd2FudCB0aGlzXG4gICAqIGJlaGF2aW9yLCBzZXQgYm90aCBgYXBwZWFyYCBhbmQgYGluYCB0byBgdHJ1ZWAuXG4gICAqXG4gICAqID4gKipOb3RlKio6IHRoZXJlIGFyZSBubyBzcGVjaWFsIGFwcGVhciBzdGF0ZXMgbGlrZSBgYXBwZWFyaW5nYC9gYXBwZWFyZWRgLCB0aGlzIHByb3BcbiAgICogPiBvbmx5IGFkZHMgYW4gYWRkaXRpb25hbCBlbnRlciB0cmFuc2l0aW9uLiBIb3dldmVyLCBpbiB0aGVcbiAgICogPiBgPENTU1RyYW5zaXRpb24+YCBjb21wb25lbnQgdGhhdCBmaXJzdCBlbnRlciB0cmFuc2l0aW9uIGRvZXMgcmVzdWx0IGluXG4gICAqID4gYWRkaXRpb25hbCBgLmFwcGVhci0qYCBjbGFzc2VzLCB0aGF0IHdheSB5b3UgY2FuIGNob29zZSB0byBzdHlsZSBpdFxuICAgKiA+IGRpZmZlcmVudGx5LlxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgZW50ZXIgdHJhbnNpdGlvbnMuXG4gICAqL1xuICBlbnRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGV4aXQgdHJhbnNpdGlvbnMuXG4gICAqL1xuICBleGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogVGhlIGR1cmF0aW9uIG9mIHRoZSB0cmFuc2l0aW9uLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqIFJlcXVpcmVkIHVubGVzcyBgYWRkRW5kTGlzdGVuZXJgIGlzIHByb3ZpZGVkLlxuICAgKlxuICAgKiBZb3UgbWF5IHNwZWNpZnkgYSBzaW5nbGUgdGltZW91dCBmb3IgYWxsIHRyYW5zaXRpb25zOlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogdGltZW91dD17NTAwfVxuICAgKiBgYGBcbiAgICpcbiAgICogb3IgaW5kaXZpZHVhbGx5OlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogdGltZW91dD17e1xuICAgKiAgYXBwZWFyOiA1MDAsXG4gICAqICBlbnRlcjogMzAwLFxuICAgKiAgZXhpdDogNTAwLFxuICAgKiB9fVxuICAgKiBgYGBcbiAgICpcbiAgICogLSBgYXBwZWFyYCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YgYGVudGVyYFxuICAgKiAtIGBlbnRlcmAgZGVmYXVsdHMgdG8gYDBgXG4gICAqIC0gYGV4aXRgIGRlZmF1bHRzIHRvIGAwYFxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyIHwgeyBlbnRlcj86IG51bWJlciwgZXhpdD86IG51bWJlciwgYXBwZWFyPzogbnVtYmVyIH19XG4gICAqL1xuICB0aW1lb3V0OiBmdW5jdGlvbiB0aW1lb3V0KHByb3BzKSB7XG4gICAgdmFyIHB0ID0gdGltZW91dHNTaGFwZTtcbiAgICBpZiAoIXByb3BzLmFkZEVuZExpc3RlbmVyKSBwdCA9IHB0LmlzUmVxdWlyZWQ7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHQuYXBwbHkodm9pZCAwLCBbcHJvcHNdLmNvbmNhdChhcmdzKSk7XG4gIH0sXG5cbiAgLyoqXG4gICAqIEFkZCBhIGN1c3RvbSB0cmFuc2l0aW9uIGVuZCB0cmlnZ2VyLiBDYWxsZWQgd2l0aCB0aGUgdHJhbnNpdGlvbmluZ1xuICAgKiBET00gbm9kZSBhbmQgYSBgZG9uZWAgY2FsbGJhY2suIEFsbG93cyBmb3IgbW9yZSBmaW5lIGdyYWluZWQgdHJhbnNpdGlvbiBlbmRcbiAgICogbG9naWMuIFRpbWVvdXRzIGFyZSBzdGlsbCB1c2VkIGFzIGEgZmFsbGJhY2sgaWYgcHJvdmlkZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiBhZGRFbmRMaXN0ZW5lcj17KG5vZGUsIGRvbmUpID0+IHtcbiAgICogICAvLyB1c2UgdGhlIGNzcyB0cmFuc2l0aW9uZW5kIGV2ZW50IHRvIG1hcmsgdGhlIGZpbmlzaCBvZiBhIHRyYW5zaXRpb25cbiAgICogICBub2RlLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCBkb25lLCBmYWxzZSk7XG4gICAqIH19XG4gICAqIGBgYFxuICAgKi9cbiAgYWRkRW5kTGlzdGVuZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBiZWZvcmUgdGhlIFwiZW50ZXJpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpIC0+IHZvaWRcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJlbnRlcmluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXJpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJlbnRlcmVkXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKSAtPiB2b2lkXG4gICAqL1xuICBvbkVudGVyZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBiZWZvcmUgdGhlIFwiZXhpdGluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0OiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZXhpdGluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZXhpdGVkXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWRcbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuY1xufSA6IHt9OyAvLyBOYW1lIHRoZSBmdW5jdGlvbiBzbyBpdCBpcyBjbGVhcmVyIGluIHRoZSBkb2N1bWVudGF0aW9uXG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5UcmFuc2l0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgaW46IGZhbHNlLFxuICBtb3VudE9uRW50ZXI6IGZhbHNlLFxuICB1bm1vdW50T25FeGl0OiBmYWxzZSxcbiAgYXBwZWFyOiBmYWxzZSxcbiAgZW50ZXI6IHRydWUsXG4gIGV4aXQ6IHRydWUsXG4gIG9uRW50ZXI6IG5vb3AsXG4gIG9uRW50ZXJpbmc6IG5vb3AsXG4gIG9uRW50ZXJlZDogbm9vcCxcbiAgb25FeGl0OiBub29wLFxuICBvbkV4aXRpbmc6IG5vb3AsXG4gIG9uRXhpdGVkOiBub29wXG59O1xuVHJhbnNpdGlvbi5VTk1PVU5URUQgPSBVTk1PVU5URUQ7XG5UcmFuc2l0aW9uLkVYSVRFRCA9IEVYSVRFRDtcblRyYW5zaXRpb24uRU5URVJJTkcgPSBFTlRFUklORztcblRyYW5zaXRpb24uRU5URVJFRCA9IEVOVEVSRUQ7XG5UcmFuc2l0aW9uLkVYSVRJTkcgPSBFWElUSU5HO1xuZXhwb3J0IGRlZmF1bHQgVHJhbnNpdGlvbjsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGFkZE9uZUNsYXNzIGZyb20gJ2RvbS1oZWxwZXJzL2FkZENsYXNzJztcbmltcG9ydCByZW1vdmVPbmVDbGFzcyBmcm9tICdkb20taGVscGVycy9yZW1vdmVDbGFzcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRyYW5zaXRpb24gZnJvbSAnLi9UcmFuc2l0aW9uJztcbmltcG9ydCB7IGNsYXNzTmFtZXNTaGFwZSB9IGZyb20gJy4vdXRpbHMvUHJvcFR5cGVzJztcbmltcG9ydCB7IGZvcmNlUmVmbG93IH0gZnJvbSAnLi91dGlscy9yZWZsb3cnO1xuXG52YXIgX2FkZENsYXNzID0gZnVuY3Rpb24gYWRkQ2xhc3Mobm9kZSwgY2xhc3Nlcykge1xuICByZXR1cm4gbm9kZSAmJiBjbGFzc2VzICYmIGNsYXNzZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGFkZE9uZUNsYXNzKG5vZGUsIGMpO1xuICB9KTtcbn07XG5cbnZhciByZW1vdmVDbGFzcyA9IGZ1bmN0aW9uIHJlbW92ZUNsYXNzKG5vZGUsIGNsYXNzZXMpIHtcbiAgcmV0dXJuIG5vZGUgJiYgY2xhc3NlcyAmJiBjbGFzc2VzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiByZW1vdmVPbmVDbGFzcyhub2RlLCBjKTtcbiAgfSk7XG59O1xuLyoqXG4gKiBBIHRyYW5zaXRpb24gY29tcG9uZW50IGluc3BpcmVkIGJ5IHRoZSBleGNlbGxlbnRcbiAqIFtuZy1hbmltYXRlXShodHRwczovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmdBbmltYXRlKSBsaWJyYXJ5LCB5b3Ugc2hvdWxkXG4gKiB1c2UgaXQgaWYgeW91J3JlIHVzaW5nIENTUyB0cmFuc2l0aW9ucyBvciBhbmltYXRpb25zLiBJdCdzIGJ1aWx0IHVwb24gdGhlXG4gKiBbYFRyYW5zaXRpb25gXShodHRwczovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24pXG4gKiBjb21wb25lbnQsIHNvIGl0IGluaGVyaXRzIGFsbCBvZiBpdHMgcHJvcHMuXG4gKlxuICogYENTU1RyYW5zaXRpb25gIGFwcGxpZXMgYSBwYWlyIG9mIGNsYXNzIG5hbWVzIGR1cmluZyB0aGUgYGFwcGVhcmAsIGBlbnRlcmAsXG4gKiBhbmQgYGV4aXRgIHN0YXRlcyBvZiB0aGUgdHJhbnNpdGlvbi4gVGhlIGZpcnN0IGNsYXNzIGlzIGFwcGxpZWQgYW5kIHRoZW4gYVxuICogc2Vjb25kIGAqLWFjdGl2ZWAgY2xhc3MgaW4gb3JkZXIgdG8gYWN0aXZhdGUgdGhlIENTUyB0cmFuc2l0aW9uLiBBZnRlciB0aGVcbiAqIHRyYW5zaXRpb24sIG1hdGNoaW5nIGAqLWRvbmVgIGNsYXNzIG5hbWVzIGFyZSBhcHBsaWVkIHRvIHBlcnNpc3QgdGhlXG4gKiB0cmFuc2l0aW9uIHN0YXRlLlxuICpcbiAqIGBgYGpzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogICBjb25zdCBbaW5Qcm9wLCBzZXRJblByb3BdID0gdXNlU3RhdGUoZmFsc2UpO1xuICogICByZXR1cm4gKFxuICogICAgIDxkaXY+XG4gKiAgICAgICA8Q1NTVHJhbnNpdGlvbiBpbj17aW5Qcm9wfSB0aW1lb3V0PXsyMDB9IGNsYXNzTmFtZXM9XCJteS1ub2RlXCI+XG4gKiAgICAgICAgIDxkaXY+XG4gKiAgICAgICAgICAge1wiSSdsbCByZWNlaXZlIG15LW5vZGUtKiBjbGFzc2VzXCJ9XG4gKiAgICAgICAgIDwvZGl2PlxuICogICAgICAgPC9DU1NUcmFuc2l0aW9uPlxuICogICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgb25DbGljaz17KCkgPT4gc2V0SW5Qcm9wKHRydWUpfT5cbiAqICAgICAgICAgQ2xpY2sgdG8gRW50ZXJcbiAqICAgICAgIDwvYnV0dG9uPlxuICogICAgIDwvZGl2PlxuICogICApO1xuICogfVxuICogYGBgXG4gKlxuICogV2hlbiB0aGUgYGluYCBwcm9wIGlzIHNldCB0byBgdHJ1ZWAsIHRoZSBjaGlsZCBjb21wb25lbnQgd2lsbCBmaXJzdCByZWNlaXZlXG4gKiB0aGUgY2xhc3MgYGV4YW1wbGUtZW50ZXJgLCB0aGVuIHRoZSBgZXhhbXBsZS1lbnRlci1hY3RpdmVgIHdpbGwgYmUgYWRkZWQgaW5cbiAqIHRoZSBuZXh0IHRpY2suIGBDU1NUcmFuc2l0aW9uYCBbZm9yY2VzIGFcbiAqIHJlZmxvd10oaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9ibG9iLzUwMDczMDNlNzI5YTc0YmU2NmEyMWMzZTIyMDVlNDkxNjgyMTUyNGIvc3JjL0NTU1RyYW5zaXRpb24uanMjTDIwOC1MMjE1KVxuICogYmV0d2VlbiBiZWZvcmUgYWRkaW5nIHRoZSBgZXhhbXBsZS1lbnRlci1hY3RpdmVgLiBUaGlzIGlzIGFuIGltcG9ydGFudCB0cmlja1xuICogYmVjYXVzZSBpdCBhbGxvd3MgdXMgdG8gdHJhbnNpdGlvbiBiZXR3ZWVuIGBleGFtcGxlLWVudGVyYCBhbmRcbiAqIGBleGFtcGxlLWVudGVyLWFjdGl2ZWAgZXZlbiB0aG91Z2ggdGhleSB3ZXJlIGFkZGVkIGltbWVkaWF0ZWx5IG9uZSBhZnRlclxuICogYW5vdGhlci4gTW9zdCBub3RhYmx5LCB0aGlzIGlzIHdoYXQgbWFrZXMgaXQgcG9zc2libGUgZm9yIHVzIHRvIGFuaW1hdGVcbiAqIF9hcHBlYXJhbmNlXy5cbiAqXG4gKiBgYGBjc3NcbiAqIC5teS1ub2RlLWVudGVyIHtcbiAqICAgb3BhY2l0eTogMDtcbiAqIH1cbiAqIC5teS1ub2RlLWVudGVyLWFjdGl2ZSB7XG4gKiAgIG9wYWNpdHk6IDE7XG4gKiAgIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XG4gKiB9XG4gKiAubXktbm9kZS1leGl0IHtcbiAqICAgb3BhY2l0eTogMTtcbiAqIH1cbiAqIC5teS1ub2RlLWV4aXQtYWN0aXZlIHtcbiAqICAgb3BhY2l0eTogMDtcbiAqICAgdHJhbnNpdGlvbjogb3BhY2l0eSAyMDBtcztcbiAqIH1cbiAqIGBgYFxuICpcbiAqIGAqLWFjdGl2ZWAgY2xhc3NlcyByZXByZXNlbnQgd2hpY2ggc3R5bGVzIHlvdSB3YW50IHRvIGFuaW1hdGUgKip0byoqLCBzbyBpdCdzXG4gKiBpbXBvcnRhbnQgdG8gYWRkIGB0cmFuc2l0aW9uYCBkZWNsYXJhdGlvbiBvbmx5IHRvIHRoZW0sIG90aGVyd2lzZSB0cmFuc2l0aW9uc1xuICogbWlnaHQgbm90IGJlaGF2ZSBhcyBpbnRlbmRlZCEgVGhpcyBtaWdodCBub3QgYmUgb2J2aW91cyB3aGVuIHRoZSB0cmFuc2l0aW9uc1xuICogYXJlIHN5bW1ldHJpY2FsLCBpLmUuIHdoZW4gYCotZW50ZXItYWN0aXZlYCBpcyB0aGUgc2FtZSBhcyBgKi1leGl0YCwgbGlrZSBpblxuICogdGhlIGV4YW1wbGUgYWJvdmUgKG1pbnVzIGB0cmFuc2l0aW9uYCksIGJ1dCBpdCBiZWNvbWVzIGFwcGFyZW50IGluIG1vcmVcbiAqIGNvbXBsZXggdHJhbnNpdGlvbnMuXG4gKlxuICogKipOb3RlKio6IElmIHlvdSdyZSB1c2luZyB0aGVcbiAqIFtgYXBwZWFyYF0oaHR0cDovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24jVHJhbnNpdGlvbi1wcm9wLWFwcGVhcilcbiAqIHByb3AsIG1ha2Ugc3VyZSB0byBkZWZpbmUgc3R5bGVzIGZvciBgLmFwcGVhci0qYCBjbGFzc2VzIGFzIHdlbGwuXG4gKi9cblxuXG52YXIgQ1NTVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShDU1NUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBDU1NUcmFuc2l0aW9uKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSB8fCB0aGlzO1xuICAgIF90aGlzLmFwcGxpZWRDbGFzc2VzID0ge1xuICAgICAgYXBwZWFyOiB7fSxcbiAgICAgIGVudGVyOiB7fSxcbiAgICAgIGV4aXQ6IHt9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRW50ZXIgPSBmdW5jdGlvbiAobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZykge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudCA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudFswXSxcbiAgICAgICAgICBhcHBlYXJpbmcgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnRbMV07XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgJ2V4aXQnKTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgYXBwZWFyaW5nID8gJ2FwcGVhcicgOiAnZW50ZXInLCAnYmFzZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FbnRlcikge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkVudGVyKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkVudGVyaW5nID0gZnVuY3Rpb24gKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQyID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MlswXSxcbiAgICAgICAgICBhcHBlYXJpbmcgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQyWzFdO1xuXG4gICAgICB2YXIgdHlwZSA9IGFwcGVhcmluZyA/ICdhcHBlYXInIDogJ2VudGVyJztcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgdHlwZSwgJ2FjdGl2ZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FbnRlcmluZykge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkVudGVyaW5nKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkVudGVyZWQgPSBmdW5jdGlvbiAobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZykge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDMgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQzWzBdLFxuICAgICAgICAgIGFwcGVhcmluZyA9IF90aGlzJHJlc29sdmVBcmd1bWVudDNbMV07XG5cbiAgICAgIHZhciB0eXBlID0gYXBwZWFyaW5nID8gJ2FwcGVhcicgOiAnZW50ZXInO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsIHR5cGUpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCB0eXBlLCAnZG9uZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FbnRlcmVkKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRW50ZXJlZChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FeGl0ID0gZnVuY3Rpb24gKG1heWJlTm9kZSkge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDQgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDRbMF07XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgJ2FwcGVhcicpO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdlbnRlcicpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCAnZXhpdCcsICdiYXNlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkV4aXQpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FeGl0KG1heWJlTm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRXhpdGluZyA9IGZ1bmN0aW9uIChtYXliZU5vZGUpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQ1ID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQ1WzBdO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCAnZXhpdCcsICdhY3RpdmUnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRXhpdGluZykge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkV4aXRpbmcobWF5YmVOb2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FeGl0ZWQgPSBmdW5jdGlvbiAobWF5YmVOb2RlKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NiA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NlswXTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnZXhpdCcpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCAnZXhpdCcsICdkb25lJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkV4aXRlZCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkV4aXRlZChtYXliZU5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5yZXNvbHZlQXJndW1lbnRzID0gZnVuY3Rpb24gKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpIHtcbiAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5ub2RlUmVmID8gW190aGlzLnByb3BzLm5vZGVSZWYuY3VycmVudCwgbWF5YmVOb2RlXSAvLyBoZXJlIGBtYXliZU5vZGVgIGlzIGFjdHVhbGx5IGBhcHBlYXJpbmdgXG4gICAgICA6IFttYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nXTtcbiAgICB9O1xuXG4gICAgX3RoaXMuZ2V0Q2xhc3NOYW1lcyA9IGZ1bmN0aW9uICh0eXBlKSB7XG4gICAgICB2YXIgY2xhc3NOYW1lcyA9IF90aGlzLnByb3BzLmNsYXNzTmFtZXM7XG4gICAgICB2YXIgaXNTdHJpbmdDbGFzc05hbWVzID0gdHlwZW9mIGNsYXNzTmFtZXMgPT09ICdzdHJpbmcnO1xuICAgICAgdmFyIHByZWZpeCA9IGlzU3RyaW5nQ2xhc3NOYW1lcyAmJiBjbGFzc05hbWVzID8gY2xhc3NOYW1lcyArIFwiLVwiIDogJyc7XG4gICAgICB2YXIgYmFzZUNsYXNzTmFtZSA9IGlzU3RyaW5nQ2xhc3NOYW1lcyA/IFwiXCIgKyBwcmVmaXggKyB0eXBlIDogY2xhc3NOYW1lc1t0eXBlXTtcbiAgICAgIHZhciBhY3RpdmVDbGFzc05hbWUgPSBpc1N0cmluZ0NsYXNzTmFtZXMgPyBiYXNlQ2xhc3NOYW1lICsgXCItYWN0aXZlXCIgOiBjbGFzc05hbWVzW3R5cGUgKyBcIkFjdGl2ZVwiXTtcbiAgICAgIHZhciBkb25lQ2xhc3NOYW1lID0gaXNTdHJpbmdDbGFzc05hbWVzID8gYmFzZUNsYXNzTmFtZSArIFwiLWRvbmVcIiA6IGNsYXNzTmFtZXNbdHlwZSArIFwiRG9uZVwiXTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhc2VDbGFzc05hbWU6IGJhc2VDbGFzc05hbWUsXG4gICAgICAgIGFjdGl2ZUNsYXNzTmFtZTogYWN0aXZlQ2xhc3NOYW1lLFxuICAgICAgICBkb25lQ2xhc3NOYW1lOiBkb25lQ2xhc3NOYW1lXG4gICAgICB9O1xuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gQ1NTVHJhbnNpdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmFkZENsYXNzID0gZnVuY3Rpb24gYWRkQ2xhc3Mobm9kZSwgdHlwZSwgcGhhc2UpIHtcbiAgICB2YXIgY2xhc3NOYW1lID0gdGhpcy5nZXRDbGFzc05hbWVzKHR5cGUpW3BoYXNlICsgXCJDbGFzc05hbWVcIl07XG5cbiAgICB2YXIgX3RoaXMkZ2V0Q2xhc3NOYW1lcyA9IHRoaXMuZ2V0Q2xhc3NOYW1lcygnZW50ZXInKSxcbiAgICAgICAgZG9uZUNsYXNzTmFtZSA9IF90aGlzJGdldENsYXNzTmFtZXMuZG9uZUNsYXNzTmFtZTtcblxuICAgIGlmICh0eXBlID09PSAnYXBwZWFyJyAmJiBwaGFzZSA9PT0gJ2RvbmUnICYmIGRvbmVDbGFzc05hbWUpIHtcbiAgICAgIGNsYXNzTmFtZSArPSBcIiBcIiArIGRvbmVDbGFzc05hbWU7XG4gICAgfSAvLyBUaGlzIGlzIHRvIGZvcmNlIGEgcmVwYWludCxcbiAgICAvLyB3aGljaCBpcyBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gdHJhbnNpdGlvbiBzdHlsZXMgd2hlbiBhZGRpbmcgYSBjbGFzcyBuYW1lLlxuXG5cbiAgICBpZiAocGhhc2UgPT09ICdhY3RpdmUnKSB7XG4gICAgICBpZiAobm9kZSkgZm9yY2VSZWZsb3cobm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKGNsYXNzTmFtZSkge1xuICAgICAgdGhpcy5hcHBsaWVkQ2xhc3Nlc1t0eXBlXVtwaGFzZV0gPSBjbGFzc05hbWU7XG5cbiAgICAgIF9hZGRDbGFzcyhub2RlLCBjbGFzc05hbWUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVtb3ZlQ2xhc3NlcyA9IGZ1bmN0aW9uIHJlbW92ZUNsYXNzZXMobm9kZSwgdHlwZSkge1xuICAgIHZhciBfdGhpcyRhcHBsaWVkQ2xhc3NlcyQgPSB0aGlzLmFwcGxpZWRDbGFzc2VzW3R5cGVdLFxuICAgICAgICBiYXNlQ2xhc3NOYW1lID0gX3RoaXMkYXBwbGllZENsYXNzZXMkLmJhc2UsXG4gICAgICAgIGFjdGl2ZUNsYXNzTmFtZSA9IF90aGlzJGFwcGxpZWRDbGFzc2VzJC5hY3RpdmUsXG4gICAgICAgIGRvbmVDbGFzc05hbWUgPSBfdGhpcyRhcHBsaWVkQ2xhc3NlcyQuZG9uZTtcbiAgICB0aGlzLmFwcGxpZWRDbGFzc2VzW3R5cGVdID0ge307XG5cbiAgICBpZiAoYmFzZUNsYXNzTmFtZSkge1xuICAgICAgcmVtb3ZlQ2xhc3Mobm9kZSwgYmFzZUNsYXNzTmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGFjdGl2ZUNsYXNzTmFtZSkge1xuICAgICAgcmVtb3ZlQ2xhc3Mobm9kZSwgYWN0aXZlQ2xhc3NOYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoZG9uZUNsYXNzTmFtZSkge1xuICAgICAgcmVtb3ZlQ2xhc3Mobm9kZSwgZG9uZUNsYXNzTmFtZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgXyA9IF90aGlzJHByb3BzLmNsYXNzTmFtZXMsXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNsYXNzTmFtZXNcIl0pO1xuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgICAgb25FbnRlcjogdGhpcy5vbkVudGVyLFxuICAgICAgb25FbnRlcmVkOiB0aGlzLm9uRW50ZXJlZCxcbiAgICAgIG9uRW50ZXJpbmc6IHRoaXMub25FbnRlcmluZyxcbiAgICAgIG9uRXhpdDogdGhpcy5vbkV4aXQsXG4gICAgICBvbkV4aXRpbmc6IHRoaXMub25FeGl0aW5nLFxuICAgICAgb25FeGl0ZWQ6IHRoaXMub25FeGl0ZWRcbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIENTU1RyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cbkNTU1RyYW5zaXRpb24uZGVmYXVsdFByb3BzID0ge1xuICBjbGFzc05hbWVzOiAnJ1xufTtcbkNTU1RyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gX2V4dGVuZHMoe30sIFRyYW5zaXRpb24ucHJvcFR5cGVzLCB7XG4gIC8qKlxuICAgKiBUaGUgYW5pbWF0aW9uIGNsYXNzTmFtZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50IGFzIGl0IGFwcGVhcnMsIGVudGVycyxcbiAgICogZXhpdHMgb3IgaGFzIGZpbmlzaGVkIHRoZSB0cmFuc2l0aW9uLiBBIHNpbmdsZSBuYW1lIGNhbiBiZSBwcm92aWRlZCwgd2hpY2hcbiAgICogd2lsbCBiZSBzdWZmaXhlZCBmb3IgZWFjaCBzdGFnZSwgZS5nLiBgY2xhc3NOYW1lcz1cImZhZGVcImAgYXBwbGllczpcbiAgICpcbiAgICogLSBgZmFkZS1hcHBlYXJgLCBgZmFkZS1hcHBlYXItYWN0aXZlYCwgYGZhZGUtYXBwZWFyLWRvbmVgXG4gICAqIC0gYGZhZGUtZW50ZXJgLCBgZmFkZS1lbnRlci1hY3RpdmVgLCBgZmFkZS1lbnRlci1kb25lYFxuICAgKiAtIGBmYWRlLWV4aXRgLCBgZmFkZS1leGl0LWFjdGl2ZWAsIGBmYWRlLWV4aXQtZG9uZWBcbiAgICpcbiAgICogQSBmZXcgZGV0YWlscyB0byBub3RlIGFib3V0IGhvdyB0aGVzZSBjbGFzc2VzIGFyZSBhcHBsaWVkOlxuICAgKlxuICAgKiAxLiBUaGV5IGFyZSBfam9pbmVkXyB3aXRoIHRoZSBvbmVzIHRoYXQgYXJlIGFscmVhZHkgZGVmaW5lZCBvbiB0aGUgY2hpbGRcbiAgICogICAgY29tcG9uZW50LCBzbyBpZiB5b3Ugd2FudCB0byBhZGQgc29tZSBiYXNlIHN0eWxlcywgeW91IGNhbiB1c2VcbiAgICogICAgYGNsYXNzTmFtZWAgd2l0aG91dCB3b3JyeWluZyB0aGF0IGl0IHdpbGwgYmUgb3ZlcnJpZGRlbi5cbiAgICpcbiAgICogMi4gSWYgdGhlIHRyYW5zaXRpb24gY29tcG9uZW50IG1vdW50cyB3aXRoIGBpbj17ZmFsc2V9YCwgbm8gY2xhc3NlcyBhcmVcbiAgICogICAgYXBwbGllZCB5ZXQuIFlvdSBtaWdodCBiZSBleHBlY3RpbmcgYCotZXhpdC1kb25lYCwgYnV0IGlmIHlvdSB0aGlua1xuICAgKiAgICBhYm91dCBpdCwgYSBjb21wb25lbnQgY2Fubm90IGZpbmlzaCBleGl0aW5nIGlmIGl0IGhhc24ndCBlbnRlcmVkIHlldC5cbiAgICpcbiAgICogMi4gYGZhZGUtYXBwZWFyLWRvbmVgIGFuZCBgZmFkZS1lbnRlci1kb25lYCB3aWxsIF9ib3RoXyBiZSBhcHBsaWVkLiBUaGlzXG4gICAqICAgIGFsbG93cyB5b3UgdG8gZGVmaW5lIGRpZmZlcmVudCBiZWhhdmlvciBmb3Igd2hlbiBhcHBlYXJpbmcgaXMgZG9uZSBhbmRcbiAgICogICAgd2hlbiByZWd1bGFyIGVudGVyaW5nIGlzIGRvbmUsIHVzaW5nIHNlbGVjdG9ycyBsaWtlXG4gICAqICAgIGAuZmFkZS1lbnRlci1kb25lOm5vdCguZmFkZS1hcHBlYXItZG9uZSlgLiBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIGFwcGx5XG4gICAqICAgIGFuIGVwaWMgZW50cmFuY2UgYW5pbWF0aW9uIHdoZW4gZWxlbWVudCBmaXJzdCBhcHBlYXJzIGluIHRoZSBET00gdXNpbmdcbiAgICogICAgW0FuaW1hdGUuY3NzXShodHRwczovL2RhbmVkZW4uZ2l0aHViLmlvL2FuaW1hdGUuY3NzLykuIE90aGVyd2lzZSB5b3UgY2FuXG4gICAqICAgIHNpbXBseSB1c2UgYGZhZGUtZW50ZXItZG9uZWAgZm9yIGRlZmluaW5nIGJvdGggY2FzZXMuXG4gICAqXG4gICAqIEVhY2ggaW5kaXZpZHVhbCBjbGFzc05hbWVzIGNhbiBhbHNvIGJlIHNwZWNpZmllZCBpbmRlcGVuZGVudGx5IGxpa2U6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNsYXNzTmFtZXM9e3tcbiAgICogIGFwcGVhcjogJ215LWFwcGVhcicsXG4gICAqICBhcHBlYXJBY3RpdmU6ICdteS1hY3RpdmUtYXBwZWFyJyxcbiAgICogIGFwcGVhckRvbmU6ICdteS1kb25lLWFwcGVhcicsXG4gICAqICBlbnRlcjogJ215LWVudGVyJyxcbiAgICogIGVudGVyQWN0aXZlOiAnbXktYWN0aXZlLWVudGVyJyxcbiAgICogIGVudGVyRG9uZTogJ215LWRvbmUtZW50ZXInLFxuICAgKiAgZXhpdDogJ215LWV4aXQnLFxuICAgKiAgZXhpdEFjdGl2ZTogJ215LWFjdGl2ZS1leGl0JyxcbiAgICogIGV4aXREb25lOiAnbXktZG9uZS1leGl0JyxcbiAgICogfX1cbiAgICogYGBgXG4gICAqXG4gICAqIElmIHlvdSB3YW50IHRvIHNldCB0aGVzZSBjbGFzc2VzIHVzaW5nIENTUyBNb2R1bGVzOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBpbXBvcnQgc3R5bGVzIGZyb20gJy4vc3R5bGVzLmNzcyc7XG4gICAqIGBgYFxuICAgKlxuICAgKiB5b3UgbWlnaHQgd2FudCB0byB1c2UgY2FtZWxDYXNlIGluIHlvdXIgQ1NTIGZpbGUsIHRoYXQgd2F5IGNvdWxkIHNpbXBseVxuICAgKiBzcHJlYWQgdGhlbSBpbnN0ZWFkIG9mIGxpc3RpbmcgdGhlbSBvbmUgYnkgb25lOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjbGFzc05hbWVzPXt7IC4uLnN0eWxlcyB9fVxuICAgKiBgYGBcbiAgICpcbiAgICogQHR5cGUge3N0cmluZyB8IHtcbiAgICogIGFwcGVhcj86IHN0cmluZyxcbiAgICogIGFwcGVhckFjdGl2ZT86IHN0cmluZyxcbiAgICogIGFwcGVhckRvbmU/OiBzdHJpbmcsXG4gICAqICBlbnRlcj86IHN0cmluZyxcbiAgICogIGVudGVyQWN0aXZlPzogc3RyaW5nLFxuICAgKiAgZW50ZXJEb25lPzogc3RyaW5nLFxuICAgKiAgZXhpdD86IHN0cmluZyxcbiAgICogIGV4aXRBY3RpdmU/OiBzdHJpbmcsXG4gICAqICBleGl0RG9uZT86IHN0cmluZyxcbiAgICogfX1cbiAgICovXG4gIGNsYXNzTmFtZXM6IGNsYXNzTmFtZXNTaGFwZSxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2VudGVyJyBvciAnYXBwZWFyJyBjbGFzcyBpc1xuICAgKiBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2VudGVyLWFjdGl2ZScgb3JcbiAgICogJ2FwcGVhci1hY3RpdmUnIGNsYXNzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXJpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZW50ZXInIG9yXG4gICAqICdhcHBlYXInIGNsYXNzZXMgYXJlICoqcmVtb3ZlZCoqIGFuZCB0aGUgYGRvbmVgIGNsYXNzIGlzIGFkZGVkIHRvIHRoZSBET00gbm9kZS5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2V4aXQnIGNsYXNzIGlzXG4gICAqIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWRcbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpXG4gICAqL1xuICBvbkV4aXQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZXhpdC1hY3RpdmUnIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWRcbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpXG4gICAqL1xuICBvbkV4aXRpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZXhpdCcgY2xhc3Nlc1xuICAgKiBhcmUgKipyZW1vdmVkKiogYW5kIHRoZSBgZXhpdC1kb25lYCBjbGFzcyBpcyBhZGRlZCB0byB0aGUgRE9NIG5vZGUuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWRcbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmNcbn0pIDoge307XG5leHBvcnQgZGVmYXVsdCBDU1NUcmFuc2l0aW9uOyIsImltcG9ydCBoYXNDbGFzcyBmcm9tICcuL2hhc0NsYXNzJztcbi8qKlxuICogQWRkcyBhIENTUyBjbGFzcyB0byBhIGdpdmVuIGVsZW1lbnQuXG4gKiBcbiAqIEBwYXJhbSBlbGVtZW50IHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3MgbmFtZVxuICovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFkZENsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO2Vsc2UgaWYgKCFoYXNDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpKSBpZiAodHlwZW9mIGVsZW1lbnQuY2xhc3NOYW1lID09PSAnc3RyaW5nJykgZWxlbWVudC5jbGFzc05hbWUgPSBlbGVtZW50LmNsYXNzTmFtZSArIFwiIFwiICsgY2xhc3NOYW1lO2Vsc2UgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgKGVsZW1lbnQuY2xhc3NOYW1lICYmIGVsZW1lbnQuY2xhc3NOYW1lLmJhc2VWYWwgfHwgJycpICsgXCIgXCIgKyBjbGFzc05hbWUpO1xufSIsIi8qKlxuICogQ2hlY2tzIGlmIGEgZ2l2ZW4gZWxlbWVudCBoYXMgYSBDU1MgY2xhc3MuXG4gKiBcbiAqIEBwYXJhbSBlbGVtZW50IHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3MgbmFtZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBoYXNDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSByZXR1cm4gISFjbGFzc05hbWUgJiYgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcbiAgcmV0dXJuIChcIiBcIiArIChlbGVtZW50LmNsYXNzTmFtZS5iYXNlVmFsIHx8IGVsZW1lbnQuY2xhc3NOYW1lKSArIFwiIFwiKS5pbmRleE9mKFwiIFwiICsgY2xhc3NOYW1lICsgXCIgXCIpICE9PSAtMTtcbn0iLCJpbXBvcnQgeyBDaGlsZHJlbiwgY2xvbmVFbGVtZW50LCBpc1ZhbGlkRWxlbWVudCB9IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogR2l2ZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gLCByZXR1cm4gYW4gb2JqZWN0IG1hcHBpbmcga2V5IHRvIGNoaWxkLlxuICpcbiAqIEBwYXJhbSB7Kn0gY2hpbGRyZW4gYHRoaXMucHJvcHMuY2hpbGRyZW5gXG4gKiBAcmV0dXJuIHtvYmplY3R9IE1hcHBpbmcgb2Yga2V5IHRvIGNoaWxkXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoaWxkTWFwcGluZyhjaGlsZHJlbiwgbWFwRm4pIHtcbiAgdmFyIG1hcHBlciA9IGZ1bmN0aW9uIG1hcHBlcihjaGlsZCkge1xuICAgIHJldHVybiBtYXBGbiAmJiBpc1ZhbGlkRWxlbWVudChjaGlsZCkgPyBtYXBGbihjaGlsZCkgOiBjaGlsZDtcbiAgfTtcblxuICB2YXIgcmVzdWx0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgaWYgKGNoaWxkcmVuKSBDaGlsZHJlbi5tYXAoY2hpbGRyZW4sIGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIGM7XG4gIH0pLmZvckVhY2goZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgLy8gcnVuIHRoZSBtYXAgZnVuY3Rpb24gaGVyZSBpbnN0ZWFkIHNvIHRoYXQgdGhlIGtleSBpcyB0aGUgY29tcHV0ZWQgb25lXG4gICAgcmVzdWx0W2NoaWxkLmtleV0gPSBtYXBwZXIoY2hpbGQpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cbi8qKlxuICogV2hlbiB5b3UncmUgYWRkaW5nIG9yIHJlbW92aW5nIGNoaWxkcmVuIHNvbWUgbWF5IGJlIGFkZGVkIG9yIHJlbW92ZWQgaW4gdGhlXG4gKiBzYW1lIHJlbmRlciBwYXNzLiBXZSB3YW50IHRvIHNob3cgKmJvdGgqIHNpbmNlIHdlIHdhbnQgdG8gc2ltdWx0YW5lb3VzbHlcbiAqIGFuaW1hdGUgZWxlbWVudHMgaW4gYW5kIG91dC4gVGhpcyBmdW5jdGlvbiB0YWtlcyBhIHByZXZpb3VzIHNldCBvZiBrZXlzXG4gKiBhbmQgYSBuZXcgc2V0IG9mIGtleXMgYW5kIG1lcmdlcyB0aGVtIHdpdGggaXRzIGJlc3QgZ3Vlc3Mgb2YgdGhlIGNvcnJlY3RcbiAqIG9yZGVyaW5nLiBJbiB0aGUgZnV0dXJlIHdlIG1heSBleHBvc2Ugc29tZSBvZiB0aGUgdXRpbGl0aWVzIGluXG4gKiBSZWFjdE11bHRpQ2hpbGQgdG8gbWFrZSB0aGlzIGVhc3ksIGJ1dCBmb3Igbm93IFJlYWN0IGl0c2VsZiBkb2VzIG5vdFxuICogZGlyZWN0bHkgaGF2ZSB0aGlzIGNvbmNlcHQgb2YgdGhlIHVuaW9uIG9mIHByZXZDaGlsZHJlbiBhbmQgbmV4dENoaWxkcmVuXG4gKiBzbyB3ZSBpbXBsZW1lbnQgaXQgaGVyZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gcHJldiBwcmV2IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHBhcmFtIHtvYmplY3R9IG5leHQgbmV4dCBjaGlsZHJlbiBhcyByZXR1cm5lZCBmcm9tXG4gKiBgUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZygpYC5cbiAqIEByZXR1cm4ge29iamVjdH0gYSBrZXkgc2V0IHRoYXQgY29udGFpbnMgYWxsIGtleXMgaW4gYHByZXZgIGFuZCBhbGwga2V5c1xuICogaW4gYG5leHRgIGluIGEgcmVhc29uYWJsZSBvcmRlci5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2VDaGlsZE1hcHBpbmdzKHByZXYsIG5leHQpIHtcbiAgcHJldiA9IHByZXYgfHwge307XG4gIG5leHQgPSBuZXh0IHx8IHt9O1xuXG4gIGZ1bmN0aW9uIGdldFZhbHVlRm9yS2V5KGtleSkge1xuICAgIHJldHVybiBrZXkgaW4gbmV4dCA/IG5leHRba2V5XSA6IHByZXZba2V5XTtcbiAgfSAvLyBGb3IgZWFjaCBrZXkgb2YgYG5leHRgLCB0aGUgbGlzdCBvZiBrZXlzIHRvIGluc2VydCBiZWZvcmUgdGhhdCBrZXkgaW5cbiAgLy8gdGhlIGNvbWJpbmVkIGxpc3RcblxuXG4gIHZhciBuZXh0S2V5c1BlbmRpbmcgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICB2YXIgcGVuZGluZ0tleXMgPSBbXTtcblxuICBmb3IgKHZhciBwcmV2S2V5IGluIHByZXYpIHtcbiAgICBpZiAocHJldktleSBpbiBuZXh0KSB7XG4gICAgICBpZiAocGVuZGluZ0tleXMubGVuZ3RoKSB7XG4gICAgICAgIG5leHRLZXlzUGVuZGluZ1twcmV2S2V5XSA9IHBlbmRpbmdLZXlzO1xuICAgICAgICBwZW5kaW5nS2V5cyA9IFtdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwZW5kaW5nS2V5cy5wdXNoKHByZXZLZXkpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBpO1xuICB2YXIgY2hpbGRNYXBwaW5nID0ge307XG5cbiAgZm9yICh2YXIgbmV4dEtleSBpbiBuZXh0KSB7XG4gICAgaWYgKG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XSkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XS5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcGVuZGluZ05leHRLZXkgPSBuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV07XG4gICAgICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV1baV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ05leHRLZXkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNoaWxkTWFwcGluZ1tuZXh0S2V5XSA9IGdldFZhbHVlRm9yS2V5KG5leHRLZXkpO1xuICB9IC8vIEZpbmFsbHksIGFkZCB0aGUga2V5cyB3aGljaCBkaWRuJ3QgYXBwZWFyIGJlZm9yZSBhbnkga2V5IGluIGBuZXh0YFxuXG5cbiAgZm9yIChpID0gMDsgaSA8IHBlbmRpbmdLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgY2hpbGRNYXBwaW5nW3BlbmRpbmdLZXlzW2ldXSA9IGdldFZhbHVlRm9yS2V5KHBlbmRpbmdLZXlzW2ldKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZE1hcHBpbmc7XG59XG5cbmZ1bmN0aW9uIGdldFByb3AoY2hpbGQsIHByb3AsIHByb3BzKSB7XG4gIHJldHVybiBwcm9wc1twcm9wXSAhPSBudWxsID8gcHJvcHNbcHJvcF0gOiBjaGlsZC5wcm9wc1twcm9wXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEluaXRpYWxDaGlsZE1hcHBpbmcocHJvcHMsIG9uRXhpdGVkKSB7XG4gIHJldHVybiBnZXRDaGlsZE1hcHBpbmcocHJvcHMuY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIHJldHVybiBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgIGluOiB0cnVlLFxuICAgICAgYXBwZWFyOiBnZXRQcm9wKGNoaWxkLCAnYXBwZWFyJywgcHJvcHMpLFxuICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIHByb3BzKSxcbiAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgcHJvcHMpXG4gICAgfSk7XG4gIH0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE5leHRDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBwcmV2Q2hpbGRNYXBwaW5nLCBvbkV4aXRlZCkge1xuICB2YXIgbmV4dENoaWxkTWFwcGluZyA9IGdldENoaWxkTWFwcGluZyhuZXh0UHJvcHMuY2hpbGRyZW4pO1xuICB2YXIgY2hpbGRyZW4gPSBtZXJnZUNoaWxkTWFwcGluZ3MocHJldkNoaWxkTWFwcGluZywgbmV4dENoaWxkTWFwcGluZyk7XG4gIE9iamVjdC5rZXlzKGNoaWxkcmVuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgY2hpbGQgPSBjaGlsZHJlbltrZXldO1xuICAgIGlmICghaXNWYWxpZEVsZW1lbnQoY2hpbGQpKSByZXR1cm47XG4gICAgdmFyIGhhc1ByZXYgPSAoa2V5IGluIHByZXZDaGlsZE1hcHBpbmcpO1xuICAgIHZhciBoYXNOZXh0ID0gKGtleSBpbiBuZXh0Q2hpbGRNYXBwaW5nKTtcbiAgICB2YXIgcHJldkNoaWxkID0gcHJldkNoaWxkTWFwcGluZ1trZXldO1xuICAgIHZhciBpc0xlYXZpbmcgPSBpc1ZhbGlkRWxlbWVudChwcmV2Q2hpbGQpICYmICFwcmV2Q2hpbGQucHJvcHMuaW47IC8vIGl0ZW0gaXMgbmV3IChlbnRlcmluZylcblxuICAgIGlmIChoYXNOZXh0ICYmICghaGFzUHJldiB8fCBpc0xlYXZpbmcpKSB7XG4gICAgICAvLyBjb25zb2xlLmxvZygnZW50ZXJpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgICAgaW46IHRydWUsXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoIWhhc05leHQgJiYgaGFzUHJldiAmJiAhaXNMZWF2aW5nKSB7XG4gICAgICAvLyBpdGVtIGlzIG9sZCAoZXhpdGluZylcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdsZWF2aW5nJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBpbjogZmFsc2VcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoaGFzTmV4dCAmJiBoYXNQcmV2ICYmIGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkpIHtcbiAgICAgIC8vIGl0ZW0gaGFzbid0IGNoYW5nZWQgdHJhbnNpdGlvbiBzdGF0ZXNcbiAgICAgIC8vIGNvcHkgb3ZlciB0aGUgbGFzdCB0cmFuc2l0aW9uIHByb3BzO1xuICAgICAgLy8gY29uc29sZS5sb2coJ3VuY2hhbmdlZCcsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogcHJldkNoaWxkLnByb3BzLmluLFxuICAgICAgICBleGl0OiBnZXRQcm9wKGNoaWxkLCAnZXhpdCcsIG5leHRQcm9wcyksXG4gICAgICAgIGVudGVyOiBnZXRQcm9wKGNoaWxkLCAnZW50ZXInLCBuZXh0UHJvcHMpXG4gICAgICB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2hpbGRyZW47XG59IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWRcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuaW1wb3J0IHsgZ2V0Q2hpbGRNYXBwaW5nLCBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nLCBnZXROZXh0Q2hpbGRNYXBwaW5nIH0gZnJvbSAnLi91dGlscy9DaGlsZE1hcHBpbmcnO1xuXG52YXIgdmFsdWVzID0gT2JqZWN0LnZhbHVlcyB8fCBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLm1hcChmdW5jdGlvbiAoaykge1xuICAgIHJldHVybiBvYmpba107XG4gIH0pO1xufTtcblxudmFyIGRlZmF1bHRQcm9wcyA9IHtcbiAgY29tcG9uZW50OiAnZGl2JyxcbiAgY2hpbGRGYWN0b3J5OiBmdW5jdGlvbiBjaGlsZEZhY3RvcnkoY2hpbGQpIHtcbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cbn07XG4vKipcbiAqIFRoZSBgPFRyYW5zaXRpb25Hcm91cD5gIGNvbXBvbmVudCBtYW5hZ2VzIGEgc2V0IG9mIHRyYW5zaXRpb24gY29tcG9uZW50c1xuICogKGA8VHJhbnNpdGlvbj5gIGFuZCBgPENTU1RyYW5zaXRpb24+YCkgaW4gYSBsaXN0LiBMaWtlIHdpdGggdGhlIHRyYW5zaXRpb25cbiAqIGNvbXBvbmVudHMsIGA8VHJhbnNpdGlvbkdyb3VwPmAgaXMgYSBzdGF0ZSBtYWNoaW5lIGZvciBtYW5hZ2luZyB0aGUgbW91bnRpbmdcbiAqIGFuZCB1bm1vdW50aW5nIG9mIGNvbXBvbmVudHMgb3ZlciB0aW1lLlxuICpcbiAqIENvbnNpZGVyIHRoZSBleGFtcGxlIGJlbG93LiBBcyBpdGVtcyBhcmUgcmVtb3ZlZCBvciBhZGRlZCB0byB0aGUgVG9kb0xpc3QgdGhlXG4gKiBgaW5gIHByb3AgaXMgdG9nZ2xlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBgPFRyYW5zaXRpb25Hcm91cD5gLlxuICpcbiAqIE5vdGUgdGhhdCBgPFRyYW5zaXRpb25Hcm91cD5gICBkb2VzIG5vdCBkZWZpbmUgYW55IGFuaW1hdGlvbiBiZWhhdmlvciFcbiAqIEV4YWN0bHkgX2hvd18gYSBsaXN0IGl0ZW0gYW5pbWF0ZXMgaXMgdXAgdG8gdGhlIGluZGl2aWR1YWwgdHJhbnNpdGlvblxuICogY29tcG9uZW50LiBUaGlzIG1lYW5zIHlvdSBjYW4gbWl4IGFuZCBtYXRjaCBhbmltYXRpb25zIGFjcm9zcyBkaWZmZXJlbnQgbGlzdFxuICogaXRlbXMuXG4gKi9cblxudmFyIFRyYW5zaXRpb25Hcm91cCA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUcmFuc2l0aW9uR3JvdXAsIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFRyYW5zaXRpb25Hcm91cChwcm9wcywgY29udGV4dCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSB8fCB0aGlzO1xuXG4gICAgdmFyIGhhbmRsZUV4aXRlZCA9IF90aGlzLmhhbmRsZUV4aXRlZC5iaW5kKF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTsgLy8gSW5pdGlhbCBjaGlsZHJlbiBzaG91bGQgYWxsIGJlIGVudGVyaW5nLCBkZXBlbmRlbnQgb24gYXBwZWFyXG5cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IHRydWVcbiAgICAgIH0sXG4gICAgICBoYW5kbGVFeGl0ZWQ6IGhhbmRsZUV4aXRlZCxcbiAgICAgIGZpcnN0UmVuZGVyOiB0cnVlXG4gICAgfTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gVHJhbnNpdGlvbkdyb3VwLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLm1vdW50ZWQgPSB0cnVlO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgY29udGV4dFZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6IGZhbHNlXG4gICAgICB9XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5tb3VudGVkID0gZmFsc2U7XG4gIH07XG5cbiAgVHJhbnNpdGlvbkdyb3VwLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIF9yZWYpIHtcbiAgICB2YXIgcHJldkNoaWxkTWFwcGluZyA9IF9yZWYuY2hpbGRyZW4sXG4gICAgICAgIGhhbmRsZUV4aXRlZCA9IF9yZWYuaGFuZGxlRXhpdGVkLFxuICAgICAgICBmaXJzdFJlbmRlciA9IF9yZWYuZmlyc3RSZW5kZXI7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNoaWxkcmVuOiBmaXJzdFJlbmRlciA/IGdldEluaXRpYWxDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBoYW5kbGVFeGl0ZWQpIDogZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIGhhbmRsZUV4aXRlZCksXG4gICAgICBmaXJzdFJlbmRlcjogZmFsc2VcbiAgICB9O1xuICB9IC8vIG5vZGUgaXMgYHVuZGVmaW5lZGAgd2hlbiB1c2VyIHByb3ZpZGVkIGBub2RlUmVmYCBwcm9wXG4gIDtcblxuICBfcHJvdG8uaGFuZGxlRXhpdGVkID0gZnVuY3Rpb24gaGFuZGxlRXhpdGVkKGNoaWxkLCBub2RlKSB7XG4gICAgdmFyIGN1cnJlbnRDaGlsZE1hcHBpbmcgPSBnZXRDaGlsZE1hcHBpbmcodGhpcy5wcm9wcy5jaGlsZHJlbik7XG4gICAgaWYgKGNoaWxkLmtleSBpbiBjdXJyZW50Q2hpbGRNYXBwaW5nKSByZXR1cm47XG5cbiAgICBpZiAoY2hpbGQucHJvcHMub25FeGl0ZWQpIHtcbiAgICAgIGNoaWxkLnByb3BzLm9uRXhpdGVkKG5vZGUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm1vdW50ZWQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICAgIHZhciBjaGlsZHJlbiA9IF9leHRlbmRzKHt9LCBzdGF0ZS5jaGlsZHJlbik7XG5cbiAgICAgICAgZGVsZXRlIGNoaWxkcmVuW2NoaWxkLmtleV07XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBDb21wb25lbnQgPSBfdGhpcyRwcm9wcy5jb21wb25lbnQsXG4gICAgICAgIGNoaWxkRmFjdG9yeSA9IF90aGlzJHByb3BzLmNoaWxkRmFjdG9yeSxcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY29tcG9uZW50XCIsIFwiY2hpbGRGYWN0b3J5XCJdKTtcblxuICAgIHZhciBjb250ZXh0VmFsdWUgPSB0aGlzLnN0YXRlLmNvbnRleHRWYWx1ZTtcbiAgICB2YXIgY2hpbGRyZW4gPSB2YWx1ZXModGhpcy5zdGF0ZS5jaGlsZHJlbikubWFwKGNoaWxkRmFjdG9yeSk7XG4gICAgZGVsZXRlIHByb3BzLmFwcGVhcjtcbiAgICBkZWxldGUgcHJvcHMuZW50ZXI7XG4gICAgZGVsZXRlIHByb3BzLmV4aXQ7XG5cbiAgICBpZiAoQ29tcG9uZW50ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChDb21wb25lbnQsIHByb3BzLCBjaGlsZHJlbikpO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2l0aW9uR3JvdXA7XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblRyYW5zaXRpb25Hcm91cC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBgPFRyYW5zaXRpb25Hcm91cD5gIHJlbmRlcnMgYSBgPGRpdj5gIGJ5IGRlZmF1bHQuIFlvdSBjYW4gY2hhbmdlIHRoaXNcbiAgICogYmVoYXZpb3IgYnkgcHJvdmlkaW5nIGEgYGNvbXBvbmVudGAgcHJvcC5cbiAgICogSWYgeW91IHVzZSBSZWFjdCB2MTYrIGFuZCB3b3VsZCBsaWtlIHRvIGF2b2lkIGEgd3JhcHBpbmcgYDxkaXY+YCBlbGVtZW50XG4gICAqIHlvdSBjYW4gcGFzcyBpbiBgY29tcG9uZW50PXtudWxsfWAuIFRoaXMgaXMgdXNlZnVsIGlmIHRoZSB3cmFwcGluZyBkaXZcbiAgICogYm9ya3MgeW91ciBjc3Mgc3R5bGVzLlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuYW55LFxuXG4gIC8qKlxuICAgKiBBIHNldCBvZiBgPFRyYW5zaXRpb24+YCBjb21wb25lbnRzLCB0aGF0IGFyZSB0b2dnbGVkIGBpbmAgYW5kIG91dCBhcyB0aGV5XG4gICAqIGxlYXZlLiB0aGUgYDxUcmFuc2l0aW9uR3JvdXA+YCB3aWxsIGluamVjdCBzcGVjaWZpYyB0cmFuc2l0aW9uIHByb3BzLCBzb1xuICAgKiByZW1lbWJlciB0byBzcHJlYWQgdGhlbSB0aHJvdWdoIGlmIHlvdSBhcmUgd3JhcHBpbmcgdGhlIGA8VHJhbnNpdGlvbj5gIGFzXG4gICAqIHdpdGggb3VyIGA8RmFkZT5gIGV4YW1wbGUuXG4gICAqXG4gICAqIFdoaWxlIHRoaXMgY29tcG9uZW50IGlzIG1lYW50IGZvciBtdWx0aXBsZSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gXG4gICAqIGNoaWxkcmVuLCBzb21ldGltZXMgeW91IG1heSB3YW50IHRvIGhhdmUgYSBzaW5nbGUgdHJhbnNpdGlvbiBjaGlsZCB3aXRoXG4gICAqIGNvbnRlbnQgdGhhdCB5b3Ugd2FudCB0byBiZSB0cmFuc2l0aW9uZWQgb3V0IGFuZCBpbiB3aGVuIHlvdSBjaGFuZ2UgaXRcbiAgICogKGUuZy4gcm91dGVzLCBpbWFnZXMgZXRjLikgSW4gdGhhdCBjYXNlIHlvdSBjYW4gY2hhbmdlIHRoZSBga2V5YCBwcm9wIG9mXG4gICAqIHRoZSB0cmFuc2l0aW9uIGNoaWxkIGFzIHlvdSBjaGFuZ2UgaXRzIGNvbnRlbnQsIHRoaXMgd2lsbCBjYXVzZVxuICAgKiBgVHJhbnNpdGlvbkdyb3VwYCB0byB0cmFuc2l0aW9uIHRoZSBjaGlsZCBvdXQgYW5kIGJhY2sgaW4uXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgYXBwZWFyIGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZW50ZXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGV4aXQgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgZXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFlvdSBtYXkgbmVlZCB0byBhcHBseSByZWFjdGl2ZSB1cGRhdGVzIHRvIGEgY2hpbGQgYXMgaXQgaXMgZXhpdGluZy5cbiAgICogVGhpcyBpcyBnZW5lcmFsbHkgZG9uZSBieSB1c2luZyBgY2xvbmVFbGVtZW50YCBob3dldmVyIGluIHRoZSBjYXNlIG9mIGFuIGV4aXRpbmdcbiAgICogY2hpbGQgdGhlIGVsZW1lbnQgaGFzIGFscmVhZHkgYmVlbiByZW1vdmVkIGFuZCBub3QgYWNjZXNzaWJsZSB0byB0aGUgY29uc3VtZXIuXG4gICAqXG4gICAqIElmIHlvdSBkbyBuZWVkIHRvIHVwZGF0ZSBhIGNoaWxkIGFzIGl0IGxlYXZlcyB5b3UgY2FuIHByb3ZpZGUgYSBgY2hpbGRGYWN0b3J5YFxuICAgKiB0byB3cmFwIGV2ZXJ5IGNoaWxkLCBldmVuIHRoZSBvbmVzIHRoYXQgYXJlIGxlYXZpbmcuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKGNoaWxkOiBSZWFjdEVsZW1lbnQpIC0+IFJlYWN0RWxlbWVudFxuICAgKi9cbiAgY2hpbGRGYWN0b3J5OiBQcm9wVHlwZXMuZnVuY1xufSA6IHt9O1xuVHJhbnNpdGlvbkdyb3VwLmRlZmF1bHRQcm9wcyA9IGRlZmF1bHRQcm9wcztcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb25Hcm91cDsiLCJmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKGUpIHtcbiAgaWYgKHZvaWQgMCA9PT0gZSkgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICByZXR1cm4gZTtcbn1cbmV4cG9ydCB7IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cCc7XG4vKipcbiAqIFRoZSBgPFJlcGxhY2VUcmFuc2l0aW9uPmAgY29tcG9uZW50IGlzIGEgc3BlY2lhbGl6ZWQgYFRyYW5zaXRpb25gIGNvbXBvbmVudFxuICogdGhhdCBhbmltYXRlcyBiZXR3ZWVuIHR3byBjaGlsZHJlbi5cbiAqXG4gKiBgYGBqc3hcbiAqIDxSZXBsYWNlVHJhbnNpdGlvbiBpbj5cbiAqICAgPEZhZGU+PGRpdj5JIGFwcGVhciBmaXJzdDwvZGl2PjwvRmFkZT5cbiAqICAgPEZhZGU+PGRpdj5JIHJlcGxhY2UgdGhlIGFib3ZlPC9kaXY+PC9GYWRlPlxuICogPC9SZXBsYWNlVHJhbnNpdGlvbj5cbiAqIGBgYFxuICovXG5cbnZhciBSZXBsYWNlVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShSZXBsYWNlVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gUmVwbGFjZVRyYW5zaXRpb24oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIF9hcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgX2FyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChfYXJncykpIHx8IHRoaXM7XG5cbiAgICBfdGhpcy5oYW5kbGVFbnRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRW50ZXInLCAwLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRW50ZXJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgICAgYXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkVudGVyaW5nJywgMCwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUVudGVyZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjQpLCBfa2V5NCA9IDA7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcbiAgICAgICAgYXJnc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkVudGVyZWQnLCAwLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRXhpdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW41ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNSksIF9rZXk1ID0gMDsgX2tleTUgPCBfbGVuNTsgX2tleTUrKykge1xuICAgICAgICBhcmdzW19rZXk1XSA9IGFyZ3VtZW50c1tfa2V5NV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRXhpdCcsIDEsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFeGl0aW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjYgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW42KSwgX2tleTYgPSAwOyBfa2V5NiA8IF9sZW42OyBfa2V5NisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTZdID0gYXJndW1lbnRzW19rZXk2XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FeGl0aW5nJywgMSwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUV4aXRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW43ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNyksIF9rZXk3ID0gMDsgX2tleTcgPCBfbGVuNzsgX2tleTcrKykge1xuICAgICAgICBhcmdzW19rZXk3XSA9IGFyZ3VtZW50c1tfa2V5N107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRXhpdGVkJywgMSwgYXJncyk7XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBSZXBsYWNlVHJhbnNpdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZUxpZmVjeWNsZSA9IGZ1bmN0aW9uIGhhbmRsZUxpZmVjeWNsZShoYW5kbGVyLCBpZHgsIG9yaWdpbmFsQXJncykge1xuICAgIHZhciBfY2hpbGQkcHJvcHM7XG5cbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIHZhciBjaGlsZCA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pW2lkeF07XG4gICAgaWYgKGNoaWxkLnByb3BzW2hhbmRsZXJdKSAoX2NoaWxkJHByb3BzID0gY2hpbGQucHJvcHMpW2hhbmRsZXJdLmFwcGx5KF9jaGlsZCRwcm9wcywgb3JpZ2luYWxBcmdzKTtcblxuICAgIGlmICh0aGlzLnByb3BzW2hhbmRsZXJdKSB7XG4gICAgICB2YXIgbWF5YmVOb2RlID0gY2hpbGQucHJvcHMubm9kZVJlZiA/IHVuZGVmaW5lZCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpO1xuICAgICAgdGhpcy5wcm9wc1toYW5kbGVyXShtYXliZU5vZGUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIGluUHJvcCA9IF90aGlzJHByb3BzLmluLFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImluXCJdKTtcblxuICAgIHZhciBfUmVhY3QkQ2hpbGRyZW4kdG9BcnIgPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKSxcbiAgICAgICAgZmlyc3QgPSBfUmVhY3QkQ2hpbGRyZW4kdG9BcnJbMF0sXG4gICAgICAgIHNlY29uZCA9IF9SZWFjdCRDaGlsZHJlbiR0b0FyclsxXTtcblxuICAgIGRlbGV0ZSBwcm9wcy5vbkVudGVyO1xuICAgIGRlbGV0ZSBwcm9wcy5vbkVudGVyaW5nO1xuICAgIGRlbGV0ZSBwcm9wcy5vbkVudGVyZWQ7XG4gICAgZGVsZXRlIHByb3BzLm9uRXhpdDtcbiAgICBkZWxldGUgcHJvcHMub25FeGl0aW5nO1xuICAgIGRlbGV0ZSBwcm9wcy5vbkV4aXRlZDtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwLCBwcm9wcywgaW5Qcm9wID8gUmVhY3QuY2xvbmVFbGVtZW50KGZpcnN0LCB7XG4gICAgICBrZXk6ICdmaXJzdCcsXG4gICAgICBvbkVudGVyOiB0aGlzLmhhbmRsZUVudGVyLFxuICAgICAgb25FbnRlcmluZzogdGhpcy5oYW5kbGVFbnRlcmluZyxcbiAgICAgIG9uRW50ZXJlZDogdGhpcy5oYW5kbGVFbnRlcmVkXG4gICAgfSkgOiBSZWFjdC5jbG9uZUVsZW1lbnQoc2Vjb25kLCB7XG4gICAgICBrZXk6ICdzZWNvbmQnLFxuICAgICAgb25FbnRlcjogdGhpcy5oYW5kbGVFeGl0LFxuICAgICAgb25FbnRlcmluZzogdGhpcy5oYW5kbGVFeGl0aW5nLFxuICAgICAgb25FbnRlcmVkOiB0aGlzLmhhbmRsZUV4aXRlZFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gUmVwbGFjZVRyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblJlcGxhY2VUcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgaW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGNoaWxkcmVuOiBmdW5jdGlvbiBjaGlsZHJlbihwcm9wcywgcHJvcE5hbWUpIHtcbiAgICBpZiAoUmVhY3QuQ2hpbGRyZW4uY291bnQocHJvcHNbcHJvcE5hbWVdKSAhPT0gMikgcmV0dXJuIG5ldyBFcnJvcihcIlxcXCJcIiArIHByb3BOYW1lICsgXCJcXFwiIG11c3QgYmUgZXhhY3RseSB0d28gdHJhbnNpdGlvbiBjb21wb25lbnRzLlwiKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufSA6IHt9O1xuZXhwb3J0IGRlZmF1bHQgUmVwbGFjZVRyYW5zaXRpb247IiwiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5cbnZhciBfbGVhdmVSZW5kZXJzLCBfZW50ZXJSZW5kZXJzO1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEVOVEVSRUQsIEVOVEVSSU5HLCBFWElUSU5HIH0gZnJvbSAnLi9UcmFuc2l0aW9uJztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5cbmZ1bmN0aW9uIGFyZUNoaWxkcmVuRGlmZmVyZW50KG9sZENoaWxkcmVuLCBuZXdDaGlsZHJlbikge1xuICBpZiAob2xkQ2hpbGRyZW4gPT09IG5ld0NoaWxkcmVuKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KG9sZENoaWxkcmVuKSAmJiBSZWFjdC5pc1ZhbGlkRWxlbWVudChuZXdDaGlsZHJlbikgJiYgb2xkQ2hpbGRyZW4ua2V5ICE9IG51bGwgJiYgb2xkQ2hpbGRyZW4ua2V5ID09PSBuZXdDaGlsZHJlbi5rZXkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogRW51bSBvZiBtb2RlcyBmb3IgU3dpdGNoVHJhbnNpdGlvbiBjb21wb25lbnRcbiAqIEBlbnVtIHsgc3RyaW5nIH1cbiAqL1xuXG5cbmV4cG9ydCB2YXIgbW9kZXMgPSB7XG4gIG91dDogJ291dC1pbicsXG4gIGluOiAnaW4tb3V0J1xufTtcblxudmFyIGNhbGxIb29rID0gZnVuY3Rpb24gY2FsbEhvb2soZWxlbWVudCwgbmFtZSwgY2IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2VsZW1lbnQkcHJvcHM7XG5cbiAgICBlbGVtZW50LnByb3BzW25hbWVdICYmIChfZWxlbWVudCRwcm9wcyA9IGVsZW1lbnQucHJvcHMpW25hbWVdLmFwcGx5KF9lbGVtZW50JHByb3BzLCBhcmd1bWVudHMpO1xuICAgIGNiKCk7XG4gIH07XG59O1xuXG52YXIgbGVhdmVSZW5kZXJzID0gKF9sZWF2ZVJlbmRlcnMgPSB7fSwgX2xlYXZlUmVuZGVyc1ttb2Rlcy5vdXRdID0gZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGN1cnJlbnQgPSBfcmVmLmN1cnJlbnQsXG4gICAgICBjaGFuZ2VTdGF0ZSA9IF9yZWYuY2hhbmdlU3RhdGU7XG4gIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY3VycmVudCwge1xuICAgIGluOiBmYWxzZSxcbiAgICBvbkV4aXRlZDogY2FsbEhvb2soY3VycmVudCwgJ29uRXhpdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hhbmdlU3RhdGUoRU5URVJJTkcsIG51bGwpO1xuICAgIH0pXG4gIH0pO1xufSwgX2xlYXZlUmVuZGVyc1ttb2Rlcy5pbl0gPSBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIGN1cnJlbnQgPSBfcmVmMi5jdXJyZW50LFxuICAgICAgY2hhbmdlU3RhdGUgPSBfcmVmMi5jaGFuZ2VTdGF0ZSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW47XG4gIHJldHVybiBbY3VycmVudCwgUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgaW46IHRydWUsXG4gICAgb25FbnRlcmVkOiBjYWxsSG9vayhjaGlsZHJlbiwgJ29uRW50ZXJlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5nZVN0YXRlKEVOVEVSSU5HKTtcbiAgICB9KVxuICB9KV07XG59LCBfbGVhdmVSZW5kZXJzKTtcbnZhciBlbnRlclJlbmRlcnMgPSAoX2VudGVyUmVuZGVycyA9IHt9LCBfZW50ZXJSZW5kZXJzW21vZGVzLm91dF0gPSBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjMuY2hpbGRyZW4sXG4gICAgICBjaGFuZ2VTdGF0ZSA9IF9yZWYzLmNoYW5nZVN0YXRlO1xuICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgaW46IHRydWUsXG4gICAgb25FbnRlcmVkOiBjYWxsSG9vayhjaGlsZHJlbiwgJ29uRW50ZXJlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5nZVN0YXRlKEVOVEVSRUQsIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICBpbjogdHJ1ZVxuICAgICAgfSkpO1xuICAgIH0pXG4gIH0pO1xufSwgX2VudGVyUmVuZGVyc1ttb2Rlcy5pbl0gPSBmdW5jdGlvbiAoX3JlZjQpIHtcbiAgdmFyIGN1cnJlbnQgPSBfcmVmNC5jdXJyZW50LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmNC5jaGlsZHJlbixcbiAgICAgIGNoYW5nZVN0YXRlID0gX3JlZjQuY2hhbmdlU3RhdGU7XG4gIHJldHVybiBbUmVhY3QuY2xvbmVFbGVtZW50KGN1cnJlbnQsIHtcbiAgICBpbjogZmFsc2UsXG4gICAgb25FeGl0ZWQ6IGNhbGxIb29rKGN1cnJlbnQsICdvbkV4aXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5nZVN0YXRlKEVOVEVSRUQsIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICBpbjogdHJ1ZVxuICAgICAgfSkpO1xuICAgIH0pXG4gIH0pLCBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICBpbjogdHJ1ZVxuICB9KV07XG59LCBfZW50ZXJSZW5kZXJzKTtcbi8qKlxuICogQSB0cmFuc2l0aW9uIGNvbXBvbmVudCBpbnNwaXJlZCBieSB0aGUgW3Z1ZSB0cmFuc2l0aW9uIG1vZGVzXShodHRwczovL3Z1ZWpzLm9yZy92Mi9ndWlkZS90cmFuc2l0aW9ucy5odG1sI1RyYW5zaXRpb24tTW9kZXMpLlxuICogWW91IGNhbiB1c2UgaXQgd2hlbiB5b3Ugd2FudCB0byBjb250cm9sIHRoZSByZW5kZXIgYmV0d2VlbiBzdGF0ZSB0cmFuc2l0aW9ucy5cbiAqIEJhc2VkIG9uIHRoZSBzZWxlY3RlZCBtb2RlIGFuZCB0aGUgY2hpbGQncyBrZXkgd2hpY2ggaXMgdGhlIGBUcmFuc2l0aW9uYCBvciBgQ1NTVHJhbnNpdGlvbmAgY29tcG9uZW50LCB0aGUgYFN3aXRjaFRyYW5zaXRpb25gIG1ha2VzIGEgY29uc2lzdGVudCB0cmFuc2l0aW9uIGJldHdlZW4gdGhlbS5cbiAqXG4gKiBJZiB0aGUgYG91dC1pbmAgbW9kZSBpcyBzZWxlY3RlZCwgdGhlIGBTd2l0Y2hUcmFuc2l0aW9uYCB3YWl0cyB1bnRpbCB0aGUgb2xkIGNoaWxkIGxlYXZlcyBhbmQgdGhlbiBpbnNlcnRzIGEgbmV3IGNoaWxkLlxuICogSWYgdGhlIGBpbi1vdXRgIG1vZGUgaXMgc2VsZWN0ZWQsIHRoZSBgU3dpdGNoVHJhbnNpdGlvbmAgaW5zZXJ0cyBhIG5ldyBjaGlsZCBmaXJzdCwgd2FpdHMgZm9yIHRoZSBuZXcgY2hpbGQgdG8gZW50ZXIgYW5kIHRoZW4gcmVtb3ZlcyB0aGUgb2xkIGNoaWxkLlxuICpcbiAqICoqTm90ZSoqOiBJZiB5b3Ugd2FudCB0aGUgYW5pbWF0aW9uIHRvIGhhcHBlbiBzaW11bHRhbmVvdXNseVxuICogKHRoYXQgaXMsIHRvIGhhdmUgdGhlIG9sZCBjaGlsZCByZW1vdmVkIGFuZCBhIG5ldyBjaGlsZCBpbnNlcnRlZCAqKmF0IHRoZSBzYW1lIHRpbWUqKiksXG4gKiB5b3Ugc2hvdWxkIHVzZVxuICogW2BUcmFuc2l0aW9uR3JvdXBgXShodHRwczovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24tZ3JvdXApXG4gKiBpbnN0ZWFkLlxuICpcbiAqIGBgYGpzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICogIHJldHVybiAoXG4gKiAgICA8U3dpdGNoVHJhbnNpdGlvbj5cbiAqICAgICAgPENTU1RyYW5zaXRpb25cbiAqICAgICAgICBrZXk9e3N0YXRlID8gXCJHb29kYnllLCB3b3JsZCFcIiA6IFwiSGVsbG8sIHdvcmxkIVwifVxuICogICAgICAgIGFkZEVuZExpc3RlbmVyPXsobm9kZSwgZG9uZSkgPT4gbm9kZS5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCBkb25lLCBmYWxzZSl9XG4gKiAgICAgICAgY2xhc3NOYW1lcz0nZmFkZSdcbiAqICAgICAgPlxuICogICAgICAgIDxidXR0b24gb25DbGljaz17KCkgPT4gc2V0U3RhdGUoc3RhdGUgPT4gIXN0YXRlKX0+XG4gKiAgICAgICAgICB7c3RhdGUgPyBcIkdvb2RieWUsIHdvcmxkIVwiIDogXCJIZWxsbywgd29ybGQhXCJ9XG4gKiAgICAgICAgPC9idXR0b24+XG4gKiAgICAgIDwvQ1NTVHJhbnNpdGlvbj5cbiAqICAgIDwvU3dpdGNoVHJhbnNpdGlvbj5cbiAqICApO1xuICogfVxuICogYGBgXG4gKlxuICogYGBgY3NzXG4gKiAuZmFkZS1lbnRlcntcbiAqICAgIG9wYWNpdHk6IDA7XG4gKiB9XG4gKiAuZmFkZS1leGl0e1xuICogICAgb3BhY2l0eTogMTtcbiAqIH1cbiAqIC5mYWRlLWVudGVyLWFjdGl2ZXtcbiAqICAgIG9wYWNpdHk6IDE7XG4gKiB9XG4gKiAuZmFkZS1leGl0LWFjdGl2ZXtcbiAqICAgIG9wYWNpdHk6IDA7XG4gKiB9XG4gKiAuZmFkZS1lbnRlci1hY3RpdmUsXG4gKiAuZmFkZS1leGl0LWFjdGl2ZXtcbiAqICAgIHRyYW5zaXRpb246IG9wYWNpdHkgNTAwbXM7XG4gKiB9XG4gKiBgYGBcbiAqL1xuXG52YXIgU3dpdGNoVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShTd2l0Y2hUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTd2l0Y2hUcmFuc2l0aW9uKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSB8fCB0aGlzO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgc3RhdHVzOiBFTlRFUkVELFxuICAgICAgY3VycmVudDogbnVsbFxuICAgIH07XG4gICAgX3RoaXMuYXBwZWFyZWQgPSBmYWxzZTtcblxuICAgIF90aGlzLmNoYW5nZVN0YXRlID0gZnVuY3Rpb24gKHN0YXR1cywgY3VycmVudCkge1xuICAgICAgaWYgKGN1cnJlbnQgPT09IHZvaWQgMCkge1xuICAgICAgICBjdXJyZW50ID0gX3RoaXMuc3RhdGUuY3VycmVudDtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IHN0YXR1cyxcbiAgICAgICAgY3VycmVudDogY3VycmVudFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTd2l0Y2hUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLmFwcGVhcmVkID0gdHJ1ZTtcbiAgfTtcblxuICBTd2l0Y2hUcmFuc2l0aW9uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wcywgc3RhdGUpIHtcbiAgICBpZiAocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudDogbnVsbFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUuc3RhdHVzID09PSBFTlRFUklORyAmJiBwcm9wcy5tb2RlID09PSBtb2Rlcy5pbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBFTlRFUklOR1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUuY3VycmVudCAmJiBhcmVDaGlsZHJlbkRpZmZlcmVudChzdGF0ZS5jdXJyZW50LCBwcm9wcy5jaGlsZHJlbikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogRVhJVElOR1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudDogUmVhY3QuY2xvbmVFbGVtZW50KHByb3BzLmNoaWxkcmVuLCB7XG4gICAgICAgIGluOiB0cnVlXG4gICAgICB9KVxuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBtb2RlID0gX3RoaXMkcHJvcHMubW9kZSxcbiAgICAgICAgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICBzdGF0dXMgPSBfdGhpcyRzdGF0ZS5zdGF0dXMsXG4gICAgICAgIGN1cnJlbnQgPSBfdGhpcyRzdGF0ZS5jdXJyZW50O1xuICAgIHZhciBkYXRhID0ge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgY3VycmVudDogY3VycmVudCxcbiAgICAgIGNoYW5nZVN0YXRlOiB0aGlzLmNoYW5nZVN0YXRlLFxuICAgICAgc3RhdHVzOiBzdGF0dXNcbiAgICB9O1xuICAgIHZhciBjb21wb25lbnQ7XG5cbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSBFTlRFUklORzpcbiAgICAgICAgY29tcG9uZW50ID0gZW50ZXJSZW5kZXJzW21vZGVdKGRhdGEpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBFWElUSU5HOlxuICAgICAgICBjb21wb25lbnQgPSBsZWF2ZVJlbmRlcnNbbW9kZV0oZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEVOVEVSRUQ6XG4gICAgICAgIGNvbXBvbmVudCA9IGN1cnJlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6ICF0aGlzLmFwcGVhcmVkXG4gICAgICB9XG4gICAgfSwgY29tcG9uZW50KTtcbiAgfTtcblxuICByZXR1cm4gU3dpdGNoVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuU3dpdGNoVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBUcmFuc2l0aW9uIG1vZGVzLlxuICAgKiBgb3V0LWluYDogQ3VycmVudCBlbGVtZW50IHRyYW5zaXRpb25zIG91dCBmaXJzdCwgdGhlbiB3aGVuIGNvbXBsZXRlLCB0aGUgbmV3IGVsZW1lbnQgdHJhbnNpdGlvbnMgaW4uXG4gICAqIGBpbi1vdXRgOiBOZXcgZWxlbWVudCB0cmFuc2l0aW9ucyBpbiBmaXJzdCwgdGhlbiB3aGVuIGNvbXBsZXRlLCB0aGUgY3VycmVudCBlbGVtZW50IHRyYW5zaXRpb25zIG91dC5cbiAgICpcbiAgICogQHR5cGUgeydvdXQtaW4nfCdpbi1vdXQnfVxuICAgKi9cbiAgbW9kZTogUHJvcFR5cGVzLm9uZU9mKFttb2Rlcy5pbiwgbW9kZXMub3V0XSksXG5cbiAgLyoqXG4gICAqIEFueSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSlcbn0gOiB7fTtcblN3aXRjaFRyYW5zaXRpb24uZGVmYXVsdFByb3BzID0ge1xuICBtb2RlOiBtb2Rlcy5vdXRcbn07XG5leHBvcnQgZGVmYXVsdCBTd2l0Y2hUcmFuc2l0aW9uOyIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX187IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19zZXRNb2R1bGVEZWZhdWx0KSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xufSkgOiBmdW5jdGlvbihvLCB2KSB7XG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xufSk7XG52YXIgX19pbXBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydFN0YXIpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xuICAgIHZhciByZXN1bHQgPSB7fTtcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbi8vIFR5cGUgZGVmaW5pdGlvbnMgZm9yIFJlYWN0LUxvYWRpbmctT3ZlcmxheSAxLjBcbi8vIFByb2plY3Q6IGh0dHBzOi8vZ2l0aHViLmNvbS9kZXJyaWNrcGVsbGV0aWVyL3JlYWN0LWxvYWRpbmctb3ZlcmxheVxuLy8gRGVmaW5pdGlvbnMgYnk6IERlZmluaXRlbHlUeXBlZCA8aHR0cHM6Ly9naXRodWIuY29tL0RlZmluaXRlbHlUeXBlZD5cbi8vIERlZmluaXRpb25zOiBodHRwczovL2dpdGh1Yi5jb20vRGVmaW5pdGVseVR5cGVkL0RlZmluaXRlbHlUeXBlZFxuY29uc3QgY3NzXzEgPSByZXF1aXJlKFwiQGVtb3Rpb24vY3NzXCIpO1xuY29uc3QgcmVhY3RfdHJhbnNpdGlvbl9ncm91cF8xID0gcmVxdWlyZShcInJlYWN0LXRyYW5zaXRpb24tZ3JvdXBcIik7XG5jb25zdCByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG5jb25zdCBTcGlubmVyXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIi4vY29tcG9uZW50cy9TcGlubmVyXCIpKTtcbmNvbnN0IHN0eWxlc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCIuL3N0eWxlc1wiKSk7XG5jbGFzcyBMb2FkaW5nT3ZlcmxheSBleHRlbmRzIHJlYWN0XzEuZGVmYXVsdC5Db21wb25lbnQge1xuICAgIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgICAgIHN1cGVyKHByb3BzKTtcbiAgICAgICAgdGhpcy53cmFwcGVyID0gKDAsIHJlYWN0XzEuY3JlYXRlUmVmKSgpO1xuICAgICAgICB0aGlzLm5vZGVSZWYgPSAoMCwgcmVhY3RfMS5jcmVhdGVSZWYpKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZXR1cm4gYW4gZW1vdGlvbiBjc3Mgb2JqZWN0IGZvciBhIGdpdmVuIGVsZW1lbnQga2V5XG4gICAgICAgICAqIElmIGEgY3VzdG9tIHN0eWxlIHdhcyBwcm92aWRlZCB2aWEgcHJvcHMsIHJ1biBpdCB3aXRoXG4gICAgICAgICAqIHRoZSBiYXNlIGNzcyBvYmouXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmdldFN0eWxlcyA9IChrZXksIHByb3ZpZGVkU3RhdGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2UgPSBzdHlsZXNfMS5kZWZhdWx0W2tleV0ocHJvdmlkZWRTdGF0ZSwgdGhpcy5wcm9wcyk7XG4gICAgICAgICAgICBjb25zdCBjdXN0b20gPSB0aGlzLnByb3BzLnN0eWxlcyA/IHRoaXMucHJvcHMuc3R5bGVzW2tleV0gOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBpZiAoIWN1c3RvbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYXNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgO1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBjdXN0b20gPT09IFwiZnVuY3Rpb25cIiA/IGN1c3RvbShiYXNlLCB0aGlzLnByb3BzKSA6IGN1c3RvbTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIENvbnZlbmllbmNlIGN4IHdyYXBwZXIgdG8gYWRkIHByZWZpeCBjbGFzc2VzIHRvIGVhY2ggb2YgdGhlIGNoaWxkXG4gICAgICAgICAqIGVsZW1lbnRzIGZvciBzdHlsaW5nIHB1cnBvc2VzLlxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jeCA9IChuYW1lcywgLi4uYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXJyID0gQXJyYXkuaXNBcnJheShuYW1lcykgPyBuYW1lcyA6IFtuYW1lc107XG4gICAgICAgICAgICByZXR1cm4gKDAsIGNzc18xLmN4KSguLi5hcnIubWFwKChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lXG4gICAgICAgICAgICAgICAgICAgID8gYCR7KF9hID0gdGhpcy5wcm9wcy5jbGFzc05hbWVQcmVmaXgpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFwiX2xvYWRpbmdfb3ZlcmxheV9cIn0ke25hbWV9YFxuICAgICAgICAgICAgICAgICAgICA6IFwiXCI7XG4gICAgICAgICAgICB9KSwgLi4uYXJncyk7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc3RhdGUgPSB7IG92ZXJmbG93Q1NTOiB7fSB9O1xuICAgIH1cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlclN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcy53cmFwcGVyLmN1cnJlbnQpO1xuICAgICAgICBjb25zdCBvdmVyZmxvd0NTUyA9IFtcIm92ZXJmbG93XCIsIFwib3ZlcmZsb3dYXCIsIFwib3ZlcmZsb3dZXCJdLnJlZHVjZSgobSwgaSkgPT4ge1xuICAgICAgICAgICAgaWYgKHdyYXBwZXJTdHlsZVtpXSAhPT0gXCJ2aXNpYmxlXCIpXG4gICAgICAgICAgICAgICAgbVtpXSA9IFwiaGlkZGVuXCI7XG4gICAgICAgICAgICByZXR1cm4gbTtcbiAgICAgICAgfSwge30pO1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgb3ZlcmZsb3dDU1MgfSk7XG4gICAgfVxuICAgIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICAgICAgY29uc3QgeyBhY3RpdmUgfSA9IHRoaXMucHJvcHM7XG4gICAgICAgIGlmIChhY3RpdmUpXG4gICAgICAgICAgICB0aGlzLndyYXBwZXIuY3VycmVudC5zY3JvbGxUb3AgPSAwO1xuICAgIH1cbiAgICByZW5kZXIoKSB7XG4gICAgICAgIGNvbnN0IHsgY2hpbGRyZW4sIGNsYXNzTmFtZSwgb25DbGljaywgYWN0aXZlLCBmYWRlU3BlZWQgPSA1MDAsIHNwaW5uZXIsIHRleHQsIH0gPSB0aGlzLnByb3BzO1xuICAgICAgICByZXR1cm4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgXCJkYXRhLXRlc3RpZFwiOiBcIndyYXBwZXJcIiwgcmVmOiB0aGlzLndyYXBwZXIsIGNsYXNzTmFtZTogdGhpcy5jeChbXCJ3cmFwcGVyXCIsIGFjdGl2ZSAmJiBcIndyYXBwZXItLWFjdGl2ZVwiXSwgKDAsIGNzc18xLmNzcykodGhpcy5nZXRTdHlsZXMoXCJ3cmFwcGVyXCIsIGFjdGl2ZSA/IHRoaXMuc3RhdGUub3ZlcmZsb3dDU1MgOiB7fSkpLCBjbGFzc05hbWUpIH0sXG4gICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChyZWFjdF90cmFuc2l0aW9uX2dyb3VwXzEuQ1NTVHJhbnNpdGlvbiwgeyBpbjogYWN0aXZlLCBjbGFzc05hbWVzOiBcIl9sb2FkaW5nLW92ZXJsYXktdHJhbnNpdGlvblwiLCB0aW1lb3V0OiBmYWRlU3BlZWQsIHVubW91bnRPbkV4aXQ6IHRydWUsIHJlZjogdGhpcy5ub2RlUmVmLCBhZGRFbmRMaXN0ZW5lcjogKCkgPT4geyB9IH0sIChzdGF0ZSkgPT4gKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHsgXCJkYXRhLXRlc3RpZFwiOiBcIm92ZXJsYXlcIiwgY2xhc3NOYW1lOiB0aGlzLmN4KFwib3ZlcmxheVwiLCAoMCwgY3NzXzEuY3NzKSh0aGlzLmdldFN0eWxlcyhcIm92ZXJsYXlcIiwgc3RhdGUpKSksIG9uQ2xpY2s6IG9uQ2xpY2sgfSxcbiAgICAgICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogdGhpcy5jeChcImNvbnRlbnRcIiwgKDAsIGNzc18xLmNzcykodGhpcy5nZXRTdHlsZXMoXCJjb250ZW50XCIpKSksIHJlZjogdGhpcy5ub2RlUmVmIH0sXG4gICAgICAgICAgICAgICAgICAgIHNwaW5uZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICh0eXBlb2Ygc3Bpbm5lciA9PT0gXCJib29sZWFuXCIgPyAocmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoU3Bpbm5lcl8xLmRlZmF1bHQsIHsgY3g6IHRoaXMuY3gsIGdldFN0eWxlczogdGhpcy5nZXRTdHlsZXMgfSkpIDogKHNwaW5uZXIpKSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dCkpKSksXG4gICAgICAgICAgICBjaGlsZHJlbikpO1xuICAgIH1cbn1cbmV4cG9ydHMuZGVmYXVsdCA9IExvYWRpbmdPdmVybGF5O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG5cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb24oKSB7fVxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbldpdGhSZXNldCgpIHt9XG5lbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LnJlc2V0V2FybmluZ0NhY2hlID0gZW1wdHlGdW5jdGlvbjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gc2hpbShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgIGlmIChzZWNyZXQgPT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAvLyBJdCBpcyBzdGlsbCBzYWZlIHdoZW4gY2FsbGVkIGZyb20gUmVhY3QuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAnVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICApO1xuICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIHRocm93IGVycjtcbiAgfTtcbiAgc2hpbS5pc1JlcXVpcmVkID0gc2hpbTtcbiAgZnVuY3Rpb24gZ2V0U2hpbSgpIHtcbiAgICByZXR1cm4gc2hpbTtcbiAgfTtcbiAgLy8gSW1wb3J0YW50IVxuICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBzaGltLFxuICAgIGJpZ2ludDogc2hpbSxcbiAgICBib29sOiBzaGltLFxuICAgIGZ1bmM6IHNoaW0sXG4gICAgbnVtYmVyOiBzaGltLFxuICAgIG9iamVjdDogc2hpbSxcbiAgICBzdHJpbmc6IHNoaW0sXG4gICAgc3ltYm9sOiBzaGltLFxuXG4gICAgYW55OiBzaGltLFxuICAgIGFycmF5T2Y6IGdldFNoaW0sXG4gICAgZWxlbWVudDogc2hpbSxcbiAgICBlbGVtZW50VHlwZTogc2hpbSxcbiAgICBpbnN0YW5jZU9mOiBnZXRTaGltLFxuICAgIG5vZGU6IHNoaW0sXG4gICAgb2JqZWN0T2Y6IGdldFNoaW0sXG4gICAgb25lT2Y6IGdldFNoaW0sXG4gICAgb25lT2ZUeXBlOiBnZXRTaGltLFxuICAgIHNoYXBlOiBnZXRTaGltLFxuICAgIGV4YWN0OiBnZXRTaGltLFxuXG4gICAgY2hlY2tQcm9wVHlwZXM6IGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQsXG4gICAgcmVzZXRXYXJuaW5nQ2FjaGU6IGVtcHR5RnVuY3Rpb25cbiAgfTtcblxuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwiLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IExvYWRpbmdPdmVybGF5IGZyb20gXCJyZWFjdC1sb2FkaW5nLW92ZXJsYXktbmV4dGdlblwiO1xuXG5pbnRlcmZhY2UgVGFibGVMb2FkaW5nT3ZlcmxheVdyYXBwZXJQcm9wcyB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IChvcHRpb25zPzogYW55KSA9PiAobG9hZGluZz86IGJvb2xlYW4pID0+XG4gIGNsYXNzIFRhYmxlTG9hZGluZ092ZXJsYXlXcmFwcGVyIGV4dGVuZHMgUmVhY3QuQ29tcG9uZW50PFRhYmxlTG9hZGluZ092ZXJsYXlXcmFwcGVyUHJvcHM+IHtcbiAgICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgICAgY2hpbGRyZW46IFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWQsXG4gICAgfTtcblxuICAgIG92ZXJsYXk6IGFueTtcblxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgaWYgKGxvYWRpbmcpIHtcbiAgICAgICAgY29uc3QgeyB3cmFwcGVyIH0gPSB0aGlzLm92ZXJsYXk7XG4gICAgICAgIGNvbnN0IG1hc2tlciA9IHdyYXBwZXIuY3VycmVudC5maXJzdENoaWxkO1xuICAgICAgICBjb25zdCBoZWFkZXJET00gPSB3cmFwcGVyLmN1cnJlbnQucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKFwidGhlYWRcIik7XG4gICAgICAgIGNvbnN0IGJvZHlET00gPSB3cmFwcGVyLmN1cnJlbnQucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKFwidGJvZHlcIik7XG4gICAgICAgIGNvbnN0IGNhcHRpb25ET00gPVxuICAgICAgICAgIHdyYXBwZXIuY3VycmVudC5wYXJlbnRFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJjYXB0aW9uXCIpO1xuICAgICAgICBsZXQgbWFyZ2luVG9wID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoaGVhZGVyRE9NKS5oZWlnaHQ7XG4gICAgICAgIGlmIChjYXB0aW9uRE9NKSB7XG4gICAgICAgICAgbWFyZ2luVG9wID0gcGFyc2VGbG9hdChtYXJnaW5Ub3AucmVwbGFjZShcInB4XCIsIFwiXCIpKS50b1N0cmluZygpO1xuICAgICAgICAgIG1hcmdpblRvcCArPSBwYXJzZUZsb2F0KFxuICAgICAgICAgICAgd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2FwdGlvbkRPTSkuaGVpZ2h0LnJlcGxhY2UoXCJweFwiLCBcIlwiKVxuICAgICAgICAgICkudG9TdHJpbmcoKTtcbiAgICAgICAgICBtYXJnaW5Ub3AgPSBgJHttYXJnaW5Ub3B9cHhgO1xuICAgICAgICB9XG4gICAgICAgIG1hc2tlci5zdHlsZS5tYXJnaW5Ub3AgPSBtYXJnaW5Ub3A7XG4gICAgICAgIG1hc2tlci5zdHlsZS5oZWlnaHQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShib2R5RE9NKS5oZWlnaHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVuZGVyKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPExvYWRpbmdPdmVybGF5XG4gICAgICAgICAgcmVmPXsobjogYW55KSA9PiAodGhpcy5vdmVybGF5ID0gbil9XG4gICAgICAgICAgey4uLm9wdGlvbnN9XG4gICAgICAgICAgYWN0aXZlPXtsb2FkaW5nfVxuICAgICAgICA+XG4gICAgICAgICAge3RoaXMucHJvcHMuY2hpbGRyZW59XG4gICAgICAgIDwvTG9hZGluZ092ZXJsYXk+XG4gICAgICApO1xuICAgIH1cbiAgfTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY3NzXzEgPSByZXF1aXJlKFwiQGVtb3Rpb24vY3NzXCIpO1xuY29uc3Qgcm90YXRlMzYwID0gKDAsIGNzc18xLmtleWZyYW1lcykgYFxuICBmcm9tIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuICB0byB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxuYDtcbmNvbnN0IHNwaW5uZXJEYXNoID0gKDAsIGNzc18xLmtleWZyYW1lcykgYFxuICAwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMSwyMDA7XG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IDA7XG4gIH1cbiAgNTAlIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiA4OSwyMDA7XG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0zNXB4O1xuICB9XG4gIDEwMCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDg5LDIwMDtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogLTEyNHB4O1xuICB9XG5gO1xuY29uc3QgU1RZTEVTID0ge1xuICAgIHdyYXBwZXI6IChzdGF0ZSkgPT4gKE9iamVjdC5hc3NpZ24oeyBwb3NpdGlvbjogXCJyZWxhdGl2ZVwiIH0sIHN0YXRlKSksXG4gICAgb3ZlcmxheTogKHN0YXRlLCBwcm9wcykgPT4gKHtcbiAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgICB0b3A6IFwiMHB4XCIsXG4gICAgICAgIGxlZnQ6IFwiMHB4XCIsXG4gICAgICAgIGRpc3BsYXk6IFwiZmxleFwiLFxuICAgICAgICB0ZXh0QWxpZ246IFwiY2VudGVyXCIsXG4gICAgICAgIGZvbnRTaXplOiBcIjEuMmVtXCIsXG4gICAgICAgIGNvbG9yOiBcIiNGRkZcIixcbiAgICAgICAgYmFja2dyb3VuZDogXCJyZ2JhKDAsIDAsIDAsIDAuNylcIixcbiAgICAgICAgekluZGV4OiA4MDAsXG4gICAgICAgIHRyYW5zaXRpb246IGBvcGFjaXR5ICR7cHJvcHMuZmFkZVNwZWVkfW1zIGVhc2UtaW5gLFxuICAgICAgICBvcGFjaXR5OiBzdGF0ZSA9PT0gXCJlbnRlcmluZ1wiIHx8IHN0YXRlID09PSBcImVudGVyZWRcIiA/IDEgOiAwLFxuICAgIH0pLFxuICAgIGNvbnRlbnQ6ICgpID0+ICh7XG4gICAgICAgIG1hcmdpbjogXCJhdXRvXCIsXG4gICAgfSksXG4gICAgc3Bpbm5lcjogKCkgPT4gKHtcbiAgICAgICAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgICAgICAgbWFyZ2luOiBcIjBweCBhdXRvIDEwcHggYXV0b1wiLFxuICAgICAgICB3aWR0aDogXCI1MHB4XCIsXG4gICAgICAgIG1heEhlaWdodDogXCIxMDAlXCIsXG4gICAgICAgIFwiJjpiZWZvcmVcIjoge1xuICAgICAgICAgICAgY29udGVudDogJ1wiXCInLFxuICAgICAgICAgICAgZGlzcGxheTogXCJibG9ja1wiLFxuICAgICAgICAgICAgcGFkZGluZ1RvcDogXCIxMDAlXCIsXG4gICAgICAgIH0sXG4gICAgICAgIFwiJiBzdmdcIjoge1xuICAgICAgICAgICAgYW5pbWF0aW9uOiBgJHtyb3RhdGUzNjB9IDJzIGxpbmVhciBpbmZpbml0ZWAsXG4gICAgICAgICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiBcImNlbnRlciBjZW50ZXJcIixcbiAgICAgICAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgICAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICAgICAgICB0b3A6IFwiMFwiLFxuICAgICAgICAgICAgYm90dG9tOiBcIjBcIixcbiAgICAgICAgICAgIGxlZnQ6IFwiMFwiLFxuICAgICAgICAgICAgcmlnaHQ6IFwiMFwiLFxuICAgICAgICAgICAgbWFyZ2luOiBcImF1dG9cIixcbiAgICAgICAgICAgIFwiJiBjaXJjbGVcIjoge1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogYCR7c3Bpbm5lckRhc2h9IDEuNXMgZWFzZS1pbi1vdXQgaW5maW5pdGVgLFxuICAgICAgICAgICAgICAgIHN0cm9rZURhc2hhcnJheTogXCIxLDIwMFwiLFxuICAgICAgICAgICAgICAgIHN0cm9rZURhc2hvZmZzZXQ6IDAsXG4gICAgICAgICAgICAgICAgc3Ryb2tlTGluZWNhcDogXCJyb3VuZFwiLFxuICAgICAgICAgICAgICAgIHN0cm9rZTogXCIjRkZGXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH0pLFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IFNUWUxFUztcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXN0eWxlcy5qcy5tYXAiLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3QgY3NzXzEgPSByZXF1aXJlKFwiQGVtb3Rpb24vY3NzXCIpO1xuY29uc3QgcHJvcF90eXBlc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJwcm9wLXR5cGVzXCIpKTtcbmNvbnN0IHJlYWN0XzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcInJlYWN0XCIpKTtcbmNvbnN0IFNwaW5uZXIgPSAoeyBnZXRTdHlsZXMsIGN4IH0pID0+IChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogY3goXCJzcGlubmVyXCIsICgwLCBjc3NfMS5jc3MpKGdldFN0eWxlcyhcInNwaW5uZXJcIikpKSB9LFxuICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIHsgdmlld0JveDogXCIyNSAyNSA1MCA1MFwiIH0sXG4gICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwiY2lyY2xlXCIsIHsgY3g6IFwiNTBcIiwgY3k6IFwiNTBcIiwgcjogXCIyMFwiLCBmaWxsOiBcIm5vbmVcIiwgc3Ryb2tlV2lkdGg6IFwiMlwiLCBzdHJva2VNaXRlcmxpbWl0OiBcIjEwXCIgfSkpKSk7XG5TcGlubmVyLnByb3BUeXBlcyA9IHtcbiAgICBnZXRTdHlsZXM6IHByb3BfdHlwZXNfMS5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxcbiAgICBjeDogcHJvcF90eXBlc18xLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IFNwaW5uZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1TcGlubmVyLmpzLm1hcCIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oODYyKTtcbiJdLCJuYW1lcyI6WyJyb290IiwiZmFjdG9yeSIsImV4cG9ydHMiLCJtb2R1bGUiLCJyZXF1aXJlIiwiZGVmaW5lIiwiYW1kIiwic2VsZiIsIl9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfXzQ0Ml9fIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fM19fIiwiU3R5bGVTaGVldCIsIm9wdGlvbnMiLCJfdGhpcyIsInRoaXMiLCJfaW5zZXJ0VGFnIiwidGFnIiwiYmVmb3JlIiwidGFncyIsImxlbmd0aCIsImluc2VydGlvblBvaW50IiwibmV4dFNpYmxpbmciLCJwcmVwZW5kIiwiY29udGFpbmVyIiwiZmlyc3RDaGlsZCIsImluc2VydEJlZm9yZSIsInB1c2giLCJpc1NwZWVkeSIsInVuZGVmaW5lZCIsInNwZWVkeSIsImN0ciIsIm5vbmNlIiwia2V5IiwiX3Byb3RvIiwicHJvdG90eXBlIiwiaHlkcmF0ZSIsIm5vZGVzIiwiZm9yRWFjaCIsImluc2VydCIsInJ1bGUiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImNyZWF0ZVRleHROb2RlIiwiY3JlYXRlU3R5bGVFbGVtZW50Iiwic2hlZXQiLCJpIiwic3R5bGVTaGVldHMiLCJvd25lck5vZGUiLCJzaGVldEZvclRhZyIsImluc2VydFJ1bGUiLCJjc3NSdWxlcyIsImUiLCJmbHVzaCIsIl90YWckcGFyZW50Tm9kZSIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsImFicyIsIk1hdGgiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJPYmplY3QiLCJhc3NpZ24iLCJ0cmltIiwidmFsdWUiLCJwYXR0ZXJuIiwicmVwbGFjZW1lbnQiLCJyZXBsYWNlIiwiaW5kZXhvZiIsInNlYXJjaCIsImluZGV4T2YiLCJpbmRleCIsImNoYXJDb2RlQXQiLCJiZWdpbiIsImVuZCIsInNsaWNlIiwiYXJyYXkiLCJsaW5lIiwiY29sdW1uIiwicG9zaXRpb24iLCJjaGFyYWN0ZXIiLCJjaGFyYWN0ZXJzIiwibm9kZSIsInBhcmVudCIsInR5cGUiLCJwcm9wcyIsImNoaWxkcmVuIiwicmV0dXJuIiwicHJldiIsIm5leHQiLCJwZWVrIiwiY2FyZXQiLCJ0b2tlbiIsImFsbG9jIiwiZGVhbGxvYyIsImRlbGltaXQiLCJkZWxpbWl0ZXIiLCJ3aGl0ZXNwYWNlIiwiZXNjYXBpbmciLCJjb3VudCIsImNvbW1lbnRlciIsImlkZW50aWZpZXIiLCJDT01NRU5UIiwiY2FsbGJhY2siLCJvdXRwdXQiLCJzdHJpbmdpZnkiLCJlbGVtZW50Iiwiam9pbiIsImNvbXBpbGUiLCJwYXJzZSIsInJ1bGVzIiwicnVsZXNldHMiLCJwc2V1ZG8iLCJwb2ludHMiLCJkZWNsYXJhdGlvbnMiLCJvZmZzZXQiLCJhdHJ1bGUiLCJwcm9wZXJ0eSIsInByZXZpb3VzIiwidmFyaWFibGUiLCJzY2FubmluZyIsImFtcGVyc2FuZCIsInJlZmVyZW5jZSIsImNvbW1lbnQiLCJkZWNsYXJhdGlvbiIsInJ1bGVzZXQiLCJwb3N0Iiwic2l6ZSIsImoiLCJrIiwieCIsInkiLCJ6IiwiaWRlbnRpZmllcldpdGhQb2ludFRyYWNraW5nIiwiZ2V0UnVsZXMiLCJwYXJzZWQiLCJ0b1J1bGVzIiwiZml4ZWRFbGVtZW50cyIsIldlYWtNYXAiLCJjb21wYXQiLCJpc0ltcGxpY2l0UnVsZSIsImdldCIsInNldCIsInBhcmVudFJ1bGVzIiwicmVtb3ZlTGFiZWwiLCJoYXNoIiwiZGVmYXVsdFN0eWxpc1BsdWdpbnMiLCJtYXAiLCJleGVjIiwiY3JlYXRlQ2FjaGUiLCJzc3JTdHlsZXMiLCJxdWVyeVNlbGVjdG9yQWxsIiwiQXJyYXkiLCJjYWxsIiwiZ2V0QXR0cmlidXRlIiwiaGVhZCIsIl9pbnNlcnQiLCJzdHlsaXNQbHVnaW5zIiwiaW5zZXJ0ZWQiLCJub2Rlc1RvSHlkcmF0ZSIsImF0dHJpYiIsInNwbGl0IiwiY3VycmVudFNoZWV0IiwiY29sbGVjdGlvbiIsImZpbmFsaXppbmdQbHVnaW5zIiwic2VyaWFsaXplciIsImNvbmNhdCIsInNlbGVjdG9yIiwic2VyaWFsaXplZCIsInNob3VsZENhY2hlIiwic3R5bGVzIiwiY2FjaGUiLCJuYW1lIiwicmVnaXN0ZXJlZCIsInVuaXRsZXNzS2V5cyIsImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50IiwiYXNwZWN0UmF0aW8iLCJib3JkZXJJbWFnZU91dHNldCIsImJvcmRlckltYWdlU2xpY2UiLCJib3JkZXJJbWFnZVdpZHRoIiwiYm94RmxleCIsImJveEZsZXhHcm91cCIsImJveE9yZGluYWxHcm91cCIsImNvbHVtbkNvdW50IiwiY29sdW1ucyIsImZsZXgiLCJmbGV4R3JvdyIsImZsZXhQb3NpdGl2ZSIsImZsZXhTaHJpbmsiLCJmbGV4TmVnYXRpdmUiLCJmbGV4T3JkZXIiLCJncmlkUm93IiwiZ3JpZFJvd0VuZCIsImdyaWRSb3dTcGFuIiwiZ3JpZFJvd1N0YXJ0IiwiZ3JpZENvbHVtbiIsImdyaWRDb2x1bW5FbmQiLCJncmlkQ29sdW1uU3BhbiIsImdyaWRDb2x1bW5TdGFydCIsIm1zR3JpZFJvdyIsIm1zR3JpZFJvd1NwYW4iLCJtc0dyaWRDb2x1bW4iLCJtc0dyaWRDb2x1bW5TcGFuIiwiZm9udFdlaWdodCIsImxpbmVIZWlnaHQiLCJvcGFjaXR5Iiwib3JkZXIiLCJvcnBoYW5zIiwic2NhbGUiLCJ0YWJTaXplIiwid2lkb3dzIiwiekluZGV4Iiwiem9vbSIsIldlYmtpdExpbmVDbGFtcCIsImZpbGxPcGFjaXR5IiwiZmxvb2RPcGFjaXR5Iiwic3RvcE9wYWNpdHkiLCJzdHJva2VEYXNoYXJyYXkiLCJzdHJva2VEYXNob2Zmc2V0Iiwic3Ryb2tlTWl0ZXJsaW1pdCIsInN0cm9rZU9wYWNpdHkiLCJzdHJva2VXaWR0aCIsIm1lbW9pemUiLCJmbiIsImNyZWF0ZSIsImFyZyIsImh5cGhlbmF0ZVJlZ2V4IiwiYW5pbWF0aW9uUmVnZXgiLCJpc0N1c3RvbVByb3BlcnR5IiwiaXNQcm9jZXNzYWJsZVZhbHVlIiwicHJvY2Vzc1N0eWxlTmFtZSIsInN0eWxlTmFtZSIsInRvTG93ZXJDYXNlIiwicHJvY2Vzc1N0eWxlVmFsdWUiLCJtYXRjaCIsInAxIiwicDIiLCJjdXJzb3IiLCJoYW5kbGVJbnRlcnBvbGF0aW9uIiwibWVyZ2VkUHJvcHMiLCJpbnRlcnBvbGF0aW9uIiwiY29tcG9uZW50U2VsZWN0b3IiLCJfX2Vtb3Rpb25fc3R5bGVzIiwia2V5ZnJhbWVzIiwiYW5pbSIsInNlcmlhbGl6ZWRTdHlsZXMiLCJvYmoiLCJzdHJpbmciLCJpc0FycmF5IiwiYXNTdHJpbmciLCJpbnRlcnBvbGF0ZWQiLCJfaSIsImNyZWF0ZVN0cmluZ0Zyb21PYmplY3QiLCJwcmV2aW91c0N1cnNvciIsInJlc3VsdCIsImNhY2hlZCIsImxhYmVsUGF0dGVybiIsInNlcmlhbGl6ZVN0eWxlcyIsImFyZ3MiLCJzdHJpbmdNb2RlIiwic3RyaW5ncyIsInJhdyIsImxhc3RJbmRleCIsImlkZW50aWZpZXJOYW1lIiwic3RyIiwiaCIsImxlbiIsInRvU3RyaW5nIiwiZ2V0UmVnaXN0ZXJlZFN0eWxlcyIsInJlZ2lzdGVyZWRTdHlsZXMiLCJjbGFzc05hbWVzIiwicmF3Q2xhc3NOYW1lIiwiY2xhc3NOYW1lIiwiaW5zZXJ0V2l0aG91dFNjb3BpbmciLCJtZXJnZSIsImNzcyIsImNsYXNzbmFtZXMiLCJjbHMiLCJ0b0FkZCIsIl9jcmVhdGVFbW90aW9uIiwiX2xlbiIsImFyZ3VtZW50cyIsIl9rZXkiLCJpc1N0cmluZ1RhZyIsInJlZ2lzdGVyU3R5bGVzIiwiY3VycmVudCIsImluc2VydFN0eWxlcyIsImN4IiwiX2xlbjQiLCJfa2V5NCIsImluamVjdEdsb2JhbCIsIl9sZW4zIiwiX2tleTMiLCJfbGVuMiIsIl9rZXkyIiwiYW5pbWF0aW9uIiwiaWRzIiwiYmluZCIsImNyZWF0ZUVtb3Rpb24iLCJfZXh0ZW5kcyIsIm4iLCJ0IiwiciIsImhhc093blByb3BlcnR5IiwiYXBwbHkiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsIl9zZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiX2luaGVyaXRzTG9vc2UiLCJvIiwiY29uc3RydWN0b3IiLCJyZXBsYWNlQ2xhc3NOYW1lIiwib3JpZ0NsYXNzIiwiY2xhc3NUb1JlbW92ZSIsIlJlZ0V4cCIsImRpc2FibGVkIiwiZm9yY2VSZWZsb3ciLCJzY3JvbGxUb3AiLCJVTk1PVU5URUQiLCJFWElURUQiLCJFTlRFUklORyIsIkVOVEVSRUQiLCJFWElUSU5HIiwiVHJhbnNpdGlvbiIsIl9SZWFjdCRDb21wb25lbnQiLCJjb250ZXh0IiwiaW5pdGlhbFN0YXR1cyIsImFwcGVhciIsImlzTW91bnRpbmciLCJlbnRlciIsImFwcGVhclN0YXR1cyIsImluIiwidW5tb3VudE9uRXhpdCIsIm1vdW50T25FbnRlciIsInN0YXRlIiwic3RhdHVzIiwibmV4dENhbGxiYWNrIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwiX3JlZiIsInByZXZTdGF0ZSIsImNvbXBvbmVudERpZE1vdW50IiwidXBkYXRlU3RhdHVzIiwiY29tcG9uZW50RGlkVXBkYXRlIiwicHJldlByb3BzIiwibmV4dFN0YXR1cyIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwiY2FuY2VsTmV4dENhbGxiYWNrIiwiZ2V0VGltZW91dHMiLCJleGl0IiwidGltZW91dCIsIm1vdW50aW5nIiwibm9kZVJlZiIsInBlcmZvcm1FbnRlciIsInBlcmZvcm1FeGl0Iiwic2V0U3RhdGUiLCJfdGhpczIiLCJhcHBlYXJpbmciLCJfcmVmMiIsIm1heWJlTm9kZSIsIm1heWJlQXBwZWFyaW5nIiwidGltZW91dHMiLCJlbnRlclRpbWVvdXQiLCJjb25maWciLCJzYWZlU2V0U3RhdGUiLCJvbkVudGVyZWQiLCJvbkVudGVyIiwib25FbnRlcmluZyIsIm9uVHJhbnNpdGlvbkVuZCIsIl90aGlzMyIsIm9uRXhpdCIsIm9uRXhpdGluZyIsIm9uRXhpdGVkIiwiY2FuY2VsIiwibmV4dFN0YXRlIiwic2V0TmV4dENhbGxiYWNrIiwiX3RoaXM0IiwiYWN0aXZlIiwiZXZlbnQiLCJoYW5kbGVyIiwiZG9lc05vdEhhdmVUaW1lb3V0T3JMaXN0ZW5lciIsImFkZEVuZExpc3RlbmVyIiwiX3JlZjMiLCJtYXliZU5leHRDYWxsYmFjayIsInNldFRpbWVvdXQiLCJyZW5kZXIiLCJfdGhpcyRwcm9wcyIsImNoaWxkUHJvcHMiLCJUcmFuc2l0aW9uR3JvdXBDb250ZXh0IiwiUHJvdmlkZXIiLCJvbmx5Iiwibm9vcCIsImNvbnRleHRUeXBlIiwicHJvcFR5cGVzIiwiZGVmYXVsdFByb3BzIiwicmVtb3ZlQ2xhc3MiLCJjbGFzc2VzIiwiYyIsImNsYXNzTGlzdCIsInJlbW92ZSIsImJhc2VWYWwiLCJDU1NUcmFuc2l0aW9uIiwiYXBwbGllZENsYXNzZXMiLCJfdGhpcyRyZXNvbHZlQXJndW1lbnQiLCJyZXNvbHZlQXJndW1lbnRzIiwicmVtb3ZlQ2xhc3NlcyIsImFkZENsYXNzIiwiX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MiIsIl90aGlzJHJlc29sdmVBcmd1bWVudDMiLCJnZXRDbGFzc05hbWVzIiwiaXNTdHJpbmdDbGFzc05hbWVzIiwiYmFzZUNsYXNzTmFtZSIsImFjdGl2ZUNsYXNzTmFtZSIsImRvbmVDbGFzc05hbWUiLCJwaGFzZSIsImFkZCIsImNvbnRhaW5zIiwiaGFzQ2xhc3MiLCJfYWRkQ2xhc3MiLCJfdGhpcyRhcHBsaWVkQ2xhc3NlcyQiLCJiYXNlIiwiZG9uZSIsImdldENoaWxkTWFwcGluZyIsIm1hcEZuIiwiQ2hpbGRyZW4iLCJjaGlsZCIsImlzVmFsaWRFbGVtZW50IiwibWFwcGVyIiwiZ2V0UHJvcCIsInByb3AiLCJnZXROZXh0Q2hpbGRNYXBwaW5nIiwibmV4dFByb3BzIiwicHJldkNoaWxkTWFwcGluZyIsIm5leHRDaGlsZE1hcHBpbmciLCJnZXRWYWx1ZUZvcktleSIsIm5leHRLZXlzUGVuZGluZyIsInBlbmRpbmdLZXlzIiwicHJldktleSIsImNoaWxkTWFwcGluZyIsIm5leHRLZXkiLCJwZW5kaW5nTmV4dEtleSIsIm1lcmdlQ2hpbGRNYXBwaW5ncyIsImtleXMiLCJoYXNQcmV2IiwiaGFzTmV4dCIsInByZXZDaGlsZCIsImlzTGVhdmluZyIsImNsb25lRWxlbWVudCIsInZhbHVlcyIsIlRyYW5zaXRpb25Hcm91cCIsImhhbmRsZUV4aXRlZCIsIlJlZmVyZW5jZUVycm9yIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsImNvbnRleHRWYWx1ZSIsImZpcnN0UmVuZGVyIiwibW91bnRlZCIsImN1cnJlbnRDaGlsZE1hcHBpbmciLCJDb21wb25lbnQiLCJjb21wb25lbnQiLCJjaGlsZEZhY3RvcnkiLCJSZXBsYWNlVHJhbnNpdGlvbiIsIl9hcmdzIiwiaGFuZGxlRW50ZXIiLCJoYW5kbGVMaWZlY3ljbGUiLCJoYW5kbGVFbnRlcmluZyIsImhhbmRsZUVudGVyZWQiLCJoYW5kbGVFeGl0IiwiX2xlbjUiLCJfa2V5NSIsImhhbmRsZUV4aXRpbmciLCJfbGVuNiIsIl9rZXk2IiwiX2xlbjciLCJfa2V5NyIsImlkeCIsIm9yaWdpbmFsQXJncyIsIl9jaGlsZCRwcm9wcyIsInRvQXJyYXkiLCJpblByb3AiLCJfUmVhY3QkQ2hpbGRyZW4kdG9BcnIiLCJmaXJzdCIsInNlY29uZCIsIl9sZWF2ZVJlbmRlcnMiLCJfZW50ZXJSZW5kZXJzIiwibW9kZXMiLCJjYWxsSG9vayIsImNiIiwiX2VsZW1lbnQkcHJvcHMiLCJsZWF2ZVJlbmRlcnMiLCJjaGFuZ2VTdGF0ZSIsImVudGVyUmVuZGVycyIsIl9yZWY0IiwiU3dpdGNoVHJhbnNpdGlvbiIsImFwcGVhcmVkIiwibW9kZSIsIm9sZENoaWxkcmVuIiwibmV3Q2hpbGRyZW4iLCJfdGhpcyRzdGF0ZSIsImRhdGEiLCJfX2NyZWF0ZUJpbmRpbmciLCJtIiwiazIiLCJkZXNjIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX19lc01vZHVsZSIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsImRlZmluZVByb3BlcnR5IiwiX19zZXRNb2R1bGVEZWZhdWx0IiwidiIsIl9faW1wb3J0U3RhciIsIm1vZCIsIl9faW1wb3J0RGVmYXVsdCIsImNzc18xIiwicmVhY3RfdHJhbnNpdGlvbl9ncm91cF8xIiwicmVhY3RfMSIsIlNwaW5uZXJfMSIsInN0eWxlc18xIiwiTG9hZGluZ092ZXJsYXkiLCJkZWZhdWx0Iiwic3VwZXIiLCJ3cmFwcGVyIiwiY3JlYXRlUmVmIiwiZ2V0U3R5bGVzIiwicHJvdmlkZWRTdGF0ZSIsImN1c3RvbSIsIm5hbWVzIiwiYXJyIiwiX2EiLCJjbGFzc05hbWVQcmVmaXgiLCJvdmVyZmxvd0NTUyIsIndyYXBwZXJTdHlsZSIsIndpbmRvdyIsImdldENvbXB1dGVkU3R5bGUiLCJyZWR1Y2UiLCJvbkNsaWNrIiwiZmFkZVNwZWVkIiwic3Bpbm5lciIsInRleHQiLCJyZWYiLCJSZWFjdFByb3BUeXBlc1NlY3JldCIsImVtcHR5RnVuY3Rpb24iLCJlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0IiwicmVzZXRXYXJuaW5nQ2FjaGUiLCJzaGltIiwicHJvcE5hbWUiLCJjb21wb25lbnROYW1lIiwibG9jYXRpb24iLCJwcm9wRnVsbE5hbWUiLCJzZWNyZXQiLCJlcnIiLCJFcnJvciIsImdldFNoaW0iLCJpc1JlcXVpcmVkIiwiUmVhY3RQcm9wVHlwZXMiLCJiaWdpbnQiLCJib29sIiwiZnVuYyIsIm51bWJlciIsIm9iamVjdCIsInN5bWJvbCIsImFueSIsImFycmF5T2YiLCJlbGVtZW50VHlwZSIsImluc3RhbmNlT2YiLCJvYmplY3RPZiIsIm9uZU9mIiwib25lT2ZUeXBlIiwic2hhcGUiLCJleGFjdCIsImNoZWNrUHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwibG9hZGluZyIsIm92ZXJsYXkiLCJtYXNrZXIiLCJoZWFkZXJET00iLCJwYXJlbnRFbGVtZW50IiwicXVlcnlTZWxlY3RvciIsImJvZHlET00iLCJjYXB0aW9uRE9NIiwibWFyZ2luVG9wIiwiaGVpZ2h0IiwicGFyc2VGbG9hdCIsInN0eWxlIiwicm90YXRlMzYwIiwic3Bpbm5lckRhc2giLCJTVFlMRVMiLCJ3aWR0aCIsInRvcCIsImxlZnQiLCJkaXNwbGF5IiwidGV4dEFsaWduIiwiZm9udFNpemUiLCJjb2xvciIsImJhY2tncm91bmQiLCJ0cmFuc2l0aW9uIiwiY29udGVudCIsIm1hcmdpbiIsIm1heEhlaWdodCIsInBhZGRpbmdUb3AiLCJ0cmFuc2Zvcm1PcmlnaW4iLCJib3R0b20iLCJyaWdodCIsInN0cm9rZUxpbmVjYXAiLCJzdHJva2UiLCJwcm9wX3R5cGVzXzEiLCJTcGlubmVyIiwidmlld0JveCIsImN5IiwiZmlsbCIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJnZXR0ZXIiLCJkIiwiYSIsImRlZmluaXRpb24iLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9
|
|
21
|
+
`,s={wrapper:e=>({position:"relative",...e}),overlay:(e,t)=>({position:"absolute",height:"100%",width:"100%",top:"0px",left:"0px",display:"flex",textAlign:"center",fontSize:"1.2em",color:"#FFF",background:"rgba(0, 0, 0, 0.7)",zIndex:800,transition:`opacity ${t.fadeSpeed}ms ease-in`,opacity:"entering"===e||"entered"===e?1:0}),content:()=>({margin:"auto"}),spinner:()=>({position:"relative",margin:"0px auto 10px auto",width:"50px",maxHeight:"100%","&:before":{content:'""',display:"block",paddingTop:"100%"},"& svg":{animation:`${a} 2s linear infinite`,height:"100%",transformOrigin:"center center",width:"100%",position:"absolute",top:"0",bottom:"0",left:"0",right:"0",margin:"auto","& circle":{animation:`${i} 1.5s ease-in-out infinite`,strokeDasharray:"1,200",strokeDashoffset:0,strokeLinecap:"round",stroke:"#FFF"}}})};t.default=s}},r={};function a(e){var t=r[e];if(void 0!==t)return t.exports;var i=r[e]={exports:{}};return n[e].call(i.exports,i,i.exports,a),i.exports}return a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a(862)})());
|
|
22
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhY3QtYm9vdHN0cmFwLXRhYmxlLW5nLW92ZXJsYXkvZGlzdC9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctb3ZlcmxheS5taW4uanMiLCJtYXBwaW5ncyI6IkNBQUEsU0FBMkNBLEVBQU1DLEdBQzFCLGlCQUFaQyxTQUEwQyxpQkFBWEMsT0FDeENBLE9BQU9ELFFBQVVELEVBQVFHLFFBQVEsU0FBVUEsUUFBUSxjQUMxQixtQkFBWEMsUUFBeUJBLE9BQU9DLElBQzlDRCxPQUFPLENBQUMsUUFBUyxhQUFjSixHQUNMLGlCQUFaQyxRQUNkQSxRQUFzQyw2QkFBSUQsRUFBUUcsUUFBUSxTQUFVQSxRQUFRLGNBRTVFSixFQUFtQyw2QkFBSUMsRUFBUUQsRUFBWSxNQUFHQSxFQUFlLFNBQzlFLENBVEQsQ0FTR08sS0FBTSxDQUFDQyxFQUFrQ0MsSSwrQkNUNUNOLEVBQU9ELFFBQVVPLEMsaU1DeURqQixJQUFJQyxFQUEwQixXQUU1QixTQUFTQSxFQUFXQyxHQUNsQixJQUFJQyxFQUFRQyxLQUVaQSxLQUFLQyxXQUFhLFNBQVVDLEdBQzFCLElBQUlDLEVBSUFBLEVBRnNCLElBQXRCSixFQUFNSyxLQUFLQyxPQUNUTixFQUFNTyxlQUNDUCxFQUFNTyxlQUFlQyxZQUNyQlIsRUFBTVMsUUFDTlQsRUFBTVUsVUFBVUMsV0FFaEJYLEVBQU1JLE9BR1JKLEVBQU1LLEtBQUtMLEVBQU1LLEtBQUtDLE9BQVMsR0FBR0UsWUFHN0NSLEVBQU1VLFVBQVVFLGFBQWFULEVBQUtDLEdBRWxDSixFQUFNSyxLQUFLUSxLQUFLVixFQUNsQixFQUVBRixLQUFLYSxjQUE4QkMsSUFBbkJoQixFQUFRaUIsUUFBd0NqQixFQUFRaUIsT0FDeEVmLEtBQUtJLEtBQU8sR0FDWkosS0FBS2dCLElBQU0sRUFDWGhCLEtBQUtpQixNQUFRbkIsRUFBUW1CLE1BRXJCakIsS0FBS2tCLElBQU1wQixFQUFRb0IsSUFDbkJsQixLQUFLUyxVQUFZWCxFQUFRVyxVQUN6QlQsS0FBS1EsUUFBVVYsRUFBUVUsUUFD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LEVBQVMwa0IsRUFBeUJFLEdBQVksQ0FHakQ3a0IsUUFBUyxDQUFDLEdBT1gsT0FIQStrQixFQUFvQkYsR0FBVXRiLEtBQUt0SixFQUFPRCxRQUFTQyxFQUFRQSxFQUFPRCxRQUFTNGtCLEdBR3BFM2tCLEVBQU9ELE9BQ2YsQyxPQ3JCQTRrQixFQUFvQmxTLEVBQUt6UyxJQUN4QixJQUFJK2tCLEVBQVMva0IsR0FBVUEsRUFBT2dsQixXQUM3QixJQUFPaGxCLEVBQWlCLFFBQ3hCLElBQU0sRUFFUCxPQURBMmtCLEVBQW9CTSxFQUFFRixFQUFRLENBQUVHLEVBQUdILElBQzVCQSxHQ0xSSixFQUFvQk0sRUFBSSxDQUFDbGxCLEVBQVNvbEIsS0FDakMsSUFBSSxJQUFJdmpCLEtBQU91akIsRUFDWFIsRUFBb0J4UixFQUFFZ1MsRUFBWXZqQixLQUFTK2lCLEVBQW9CeFIsRUFBRXBULEVBQVM2QixJQUM1RThCLE9BQU8waEIsZUFBZXJsQixFQUFTNkIsRUFBSyxDQUFFeWpCLFlBQVksRUFBTTNjLElBQUt5YyxFQUFXdmpCLE1DSjNFK2lCLEVBQW9CeFIsRUFBSSxDQUFDaEUsRUFBS3VMLElBQVVoWCxPQUFPNUIsVUFBVThRLGVBQWV0SixLQUFLNkYsRUFBS3VMLEdDQ2xGaUssRUFBb0JoUyxFQUFLNVMsSUFDSCxvQkFBWHVsQixRQUEwQkEsT0FBT0MsYUFDMUM3aEIsT0FBTzBoQixlQUFlcmxCLEVBQVN1bEIsT0FBT0MsWUFBYSxDQUFFMWhCLE1BQU8sV0FFN0RILE9BQU8waEIsZUFBZXJsQixFQUFTLGFBQWMsQ0FBRThELE9BQU8sS0NGN0I4Z0IsRUFBb0IsSSIsInNvdXJjZXMiOlsid2VicGFjazovLy93ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHVtZCB7XCJyb290XCI6XCJSZWFjdERPTVwiLFwiY29tbW9uanMyXCI6XCJyZWFjdC1kb21cIixcImNvbW1vbmpzXCI6XCJyZWFjdC1kb21cIixcImFtZFwiOlwicmVhY3QtZG9tXCJ9Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9zaGVldC9kaXN0L2Vtb3Rpb24tc2hlZXQuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL1V0aWxpdHkuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvVG9rZW5pemVyLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9zdHlsaXMvc3JjL0VudW0uanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3N0eWxpcy9zcmMvU2VyaWFsaXplci5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9QYXJzZXIuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL0BlbW90aW9uL2NhY2hlL2Rpc3QvZW1vdGlvbi1jYWNoZS5icm93c2VyLmVzbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvc3R5bGlzL3NyYy9NaWRkbGV3YXJlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi91bml0bGVzcy9kaXN0L2Vtb3Rpb24tdW5pdGxlc3MuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9tZW1vaXplL2Rpc3QvZW1vdGlvbi1tZW1vaXplLmVzbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vc2VyaWFsaXplL2Rpc3QvZW1vdGlvbi1zZXJpYWxpemUuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9oYXNoL2Rpc3QvZW1vdGlvbi1oYXNoLmVzbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vdXRpbHMvZGlzdC9lbW90aW9uLXV0aWxzLmJyb3dzZXIuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AZW1vdGlvbi9jc3MvY3JlYXRlLWluc3RhbmNlL2Rpc3QvZW1vdGlvbi1jc3MtY3JlYXRlLWluc3RhbmNlLmVzbS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGVtb3Rpb24vY3NzL2Rpc3QvZW1vdGlvbi1jc3MuZXNtLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9zZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9tLWhlbHBlcnMvZXNtL3JlbW92ZUNsYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9jb25maWcuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cENvbnRleHQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL3V0aWxzL3JlZmxvdy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vQ1NTVHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvZG9tLWhlbHBlcnMvZXNtL2FkZENsYXNzLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9kb20taGVscGVycy9lc20vaGFzQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL3V0aWxzL0NoaWxkTWFwcGluZy5qcyIsIndlYnBhY2s6Ly8vLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbkdyb3VwLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1JlcGxhY2VUcmFuc2l0aW9uLmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9Td2l0Y2hUcmFuc2l0aW9uLmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1vdmVybGF5L3NyYy9sb2FkaW5nLW92ZXJsYXktc3Bpbm5lci50c3giLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIHVtZCB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanMyXCI6XCJyZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1vdmVybGF5L3NyYy9sb2FkaW5nLW92ZXJsYXkudHN4Iiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2luZGV4LmpzIiwid2VicGFjazovLy8uL25vZGVfbW9kdWxlcy9wcm9wLXR5cGVzL2ZhY3RvcnlXaXRoVGhyb3dpbmdTaGltcy5qcyIsIndlYnBhY2s6Ly8vLi9wYWNrYWdlcy9yZWFjdC1ib290c3RyYXAtdGFibGUtbmctb3ZlcmxheS9pbmRleC50c3giLCJ3ZWJwYWNrOi8vLy4vbm9kZV9tb2R1bGVzL3Byb3AtdHlwZXMvbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0LmpzIiwid2VicGFjazovLy8uL3BhY2thZ2VzL3JlYWN0LWJvb3RzdHJhcC10YWJsZS1uZy1vdmVybGF5L3NyYy9sb2FkaW5nLW92ZXJsYXktc3R5bGVzLnRzeCIsIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovLy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vL3dlYnBhY2svc3RhcnR1cCJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJyZWFjdFwiKSwgcmVxdWlyZShcInJlYWN0LWRvbVwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJyZWFjdFwiLCBcInJlYWN0LWRvbVwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJSZWFjdEJvb3RzdHJhcFRhYmxlTmdPdmVybGF5XCJdID0gZmFjdG9yeShyZXF1aXJlKFwicmVhY3RcIiksIHJlcXVpcmUoXCJyZWFjdC1kb21cIikpO1xuXHRlbHNlXG5cdFx0cm9vdFtcIlJlYWN0Qm9vdHN0cmFwVGFibGVOZ092ZXJsYXlcIl0gPSBmYWN0b3J5KHJvb3RbXCJSZWFjdFwiXSwgcm9vdFtcIlJlYWN0RE9NXCJdKTtcbn0pKHNlbGYsIChfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX180NDJfXywgX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fM19fKSA9PiB7XG5yZXR1cm4gIiwibW9kdWxlLmV4cG9ydHMgPSBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18zX187IiwidmFyIGlzRGV2ZWxvcG1lbnQgPSBmYWxzZTtcblxuLypcblxuQmFzZWQgb2ZmIGdsYW1vcidzIFN0eWxlU2hlZXQsIHRoYW5rcyBTdW5pbCDinaTvuI9cblxuaGlnaCBwZXJmb3JtYW5jZSBTdHlsZVNoZWV0IGZvciBjc3MtaW4tanMgc3lzdGVtc1xuXG4tIHVzZXMgbXVsdGlwbGUgc3R5bGUgdGFncyBiZWhpbmQgdGhlIHNjZW5lcyBmb3IgbWlsbGlvbnMgb2YgcnVsZXNcbi0gdXNlcyBgaW5zZXJ0UnVsZWAgZm9yIGFwcGVuZGluZyBpbiBwcm9kdWN0aW9uIGZvciAqbXVjaCogZmFzdGVyIHBlcmZvcm1hbmNlXG5cbi8vIHVzYWdlXG5cbmltcG9ydCB7IFN0eWxlU2hlZXQgfSBmcm9tICdAZW1vdGlvbi9zaGVldCdcblxubGV0IHN0eWxlU2hlZXQgPSBuZXcgU3R5bGVTaGVldCh7IGtleTogJycsIGNvbnRhaW5lcjogZG9jdW1lbnQuaGVhZCB9KVxuXG5zdHlsZVNoZWV0Lmluc2VydCgnI2JveCB7IGJvcmRlcjogMXB4IHNvbGlkIHJlZDsgfScpXG4tIGFwcGVuZHMgYSBjc3MgcnVsZSBpbnRvIHRoZSBzdHlsZXNoZWV0XG5cbnN0eWxlU2hlZXQuZmx1c2goKVxuLSBlbXB0aWVzIHRoZSBzdHlsZXNoZWV0IG9mIGFsbCBpdHMgY29udGVudHNcblxuKi9cblxuZnVuY3Rpb24gc2hlZXRGb3JUYWcodGFnKSB7XG4gIGlmICh0YWcuc2hlZXQpIHtcbiAgICByZXR1cm4gdGFnLnNoZWV0O1xuICB9IC8vIHRoaXMgd2VpcmRuZXNzIGJyb3VnaHQgdG8geW91IGJ5IGZpcmVmb3hcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChkb2N1bWVudC5zdHlsZVNoZWV0c1tpXS5vd25lck5vZGUgPT09IHRhZykge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LnN0eWxlU2hlZXRzW2ldO1xuICAgIH1cbiAgfSAvLyB0aGlzIGZ1bmN0aW9uIHNob3VsZCBhbHdheXMgcmV0dXJuIHdpdGggYSB2YWx1ZVxuICAvLyBUUyBjYW4ndCB1bmRlcnN0YW5kIGl0IHRob3VnaCBzbyB3ZSBtYWtlIGl0IHN0b3AgY29tcGxhaW5pbmcgaGVyZVxuXG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlU3R5bGVFbGVtZW50KG9wdGlvbnMpIHtcbiAgdmFyIHRhZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHRhZy5zZXRBdHRyaWJ1dGUoJ2RhdGEtZW1vdGlvbicsIG9wdGlvbnMua2V5KTtcblxuICBpZiAob3B0aW9ucy5ub25jZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGFnLnNldEF0dHJpYnV0ZSgnbm9uY2UnLCBvcHRpb25zLm5vbmNlKTtcbiAgfVxuXG4gIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnJykpO1xuICB0YWcuc2V0QXR0cmlidXRlKCdkYXRhLXMnLCAnJyk7XG4gIHJldHVybiB0YWc7XG59XG5cbnZhciBTdHlsZVNoZWV0ID0gLyojX19QVVJFX18qL2Z1bmN0aW9uICgpIHtcbiAgLy8gVXNpbmcgTm9kZSBpbnN0ZWFkIG9mIEhUTUxFbGVtZW50IHNpbmNlIGNvbnRhaW5lciBtYXkgYmUgYSBTaGFkb3dSb290XG4gIGZ1bmN0aW9uIFN0eWxlU2hlZXQob3B0aW9ucykge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG5cbiAgICB0aGlzLl9pbnNlcnRUYWcgPSBmdW5jdGlvbiAodGFnKSB7XG4gICAgICB2YXIgYmVmb3JlO1xuXG4gICAgICBpZiAoX3RoaXMudGFncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgaWYgKF90aGlzLmluc2VydGlvblBvaW50KSB7XG4gICAgICAgICAgYmVmb3JlID0gX3RoaXMuaW5zZXJ0aW9uUG9pbnQubmV4dFNpYmxpbmc7XG4gICAgICAgIH0gZWxzZSBpZiAoX3RoaXMucHJlcGVuZCkge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmNvbnRhaW5lci5maXJzdENoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJlZm9yZSA9IF90aGlzLmJlZm9yZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYmVmb3JlID0gX3RoaXMudGFnc1tfdGhpcy50YWdzLmxlbmd0aCAtIDFdLm5leHRTaWJsaW5nO1xuICAgICAgfVxuXG4gICAgICBfdGhpcy5jb250YWluZXIuaW5zZXJ0QmVmb3JlKHRhZywgYmVmb3JlKTtcblxuICAgICAgX3RoaXMudGFncy5wdXNoKHRhZyk7XG4gICAgfTtcblxuICAgIHRoaXMuaXNTcGVlZHkgPSBvcHRpb25zLnNwZWVkeSA9PT0gdW5kZWZpbmVkID8gIWlzRGV2ZWxvcG1lbnQgOiBvcHRpb25zLnNwZWVkeTtcbiAgICB0aGlzLnRhZ3MgPSBbXTtcbiAgICB0aGlzLmN0ciA9IDA7XG4gICAgdGhpcy5ub25jZSA9IG9wdGlvbnMubm9uY2U7IC8vIGtleSBpcyB0aGUgdmFsdWUgb2YgdGhlIGRhdGEtZW1vdGlvbiBhdHRyaWJ1dGUsIGl0J3MgdXNlZCB0byBpZGVudGlmeSBkaWZmZXJlbnQgc2hlZXRzXG5cbiAgICB0aGlzLmtleSA9IG9wdGlvbnMua2V5O1xuICAgIHRoaXMuY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXI7XG4gICAgdGhpcy5wcmVwZW5kID0gb3B0aW9ucy5wcmVwZW5kO1xuICAgIHRoaXMuaW5zZXJ0aW9uUG9pbnQgPSBvcHRpb25zLmluc2VydGlvblBvaW50O1xuICAgIHRoaXMuYmVmb3JlID0gbnVsbDtcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTdHlsZVNoZWV0LnByb3RvdHlwZTtcblxuICBfcHJvdG8uaHlkcmF0ZSA9IGZ1bmN0aW9uIGh5ZHJhdGUobm9kZXMpIHtcbiAgICBub2Rlcy5mb3JFYWNoKHRoaXMuX2luc2VydFRhZyk7XG4gIH07XG5cbiAgX3Byb3RvLmluc2VydCA9IGZ1bmN0aW9uIGluc2VydChydWxlKSB7XG4gICAgLy8gdGhlIG1heCBsZW5ndGggaXMgaG93IG1hbnkgcnVsZXMgd2UgaGF2ZSBwZXIgc3R5bGUgdGFnLCBpdCdzIDY1MDAwIGluIHNwZWVkeSBtb2RlXG4gICAgLy8gaXQncyAxIGluIGRldiBiZWNhdXNlIHdlIGluc2VydCBzb3VyY2UgbWFwcyB0aGF0IG1hcCBhIHNpbmdsZSBydWxlIHRvIGEgbG9jYXRpb25cbiAgICAvLyBhbmQgeW91IGNhbiBvbmx5IGhhdmUgb25lIHNvdXJjZSBtYXAgcGVyIHN0eWxlIHRhZ1xuICAgIGlmICh0aGlzLmN0ciAlICh0aGlzLmlzU3BlZWR5ID8gNjUwMDAgOiAxKSA9PT0gMCkge1xuICAgICAgdGhpcy5faW5zZXJ0VGFnKGNyZWF0ZVN0eWxlRWxlbWVudCh0aGlzKSk7XG4gICAgfVxuXG4gICAgdmFyIHRhZyA9IHRoaXMudGFnc1t0aGlzLnRhZ3MubGVuZ3RoIC0gMV07XG5cbiAgICBpZiAodGhpcy5pc1NwZWVkeSkge1xuICAgICAgdmFyIHNoZWV0ID0gc2hlZXRGb3JUYWcodGFnKTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gdGhpcyBpcyB0aGUgdWx0cmFmYXN0IHZlcnNpb24sIHdvcmtzIGFjcm9zcyBicm93c2Vyc1xuICAgICAgICAvLyB0aGUgYmlnIGRyYXdiYWNrIGlzIHRoYXQgdGhlIGNzcyB3b24ndCBiZSBlZGl0YWJsZSBpbiBkZXZ0b29sc1xuICAgICAgICBzaGVldC5pbnNlcnRSdWxlKHJ1bGUsIHNoZWV0LmNzc1J1bGVzLmxlbmd0aCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShydWxlKSk7XG4gICAgfVxuXG4gICAgdGhpcy5jdHIrKztcbiAgfTtcblxuICBfcHJvdG8uZmx1c2ggPSBmdW5jdGlvbiBmbHVzaCgpIHtcbiAgICB0aGlzLnRhZ3MuZm9yRWFjaChmdW5jdGlvbiAodGFnKSB7XG4gICAgICB2YXIgX3RhZyRwYXJlbnROb2RlO1xuXG4gICAgICByZXR1cm4gKF90YWckcGFyZW50Tm9kZSA9IHRhZy5wYXJlbnROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX3RhZyRwYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRhZyk7XG4gICAgfSk7XG4gICAgdGhpcy50YWdzID0gW107XG4gICAgdGhpcy5jdHIgPSAwO1xuICB9O1xuXG4gIHJldHVybiBTdHlsZVNoZWV0O1xufSgpO1xuXG5leHBvcnQgeyBTdHlsZVNoZWV0IH07XG4iLCIvKipcbiAqIEBwYXJhbSB7bnVtYmVyfVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgdmFyIGFicyA9IE1hdGguYWJzXG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCB2YXIgZnJvbSA9IFN0cmluZy5mcm9tQ2hhckNvZGVcblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH1cbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IHZhciBhc3NpZ24gPSBPYmplY3QuYXNzaWduXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNoICh2YWx1ZSwgbGVuZ3RoKSB7XG5cdHJldHVybiBjaGFyYXQodmFsdWUsIDApIF4gNDUgPyAoKCgoKCgobGVuZ3RoIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAwKSkgPDwgMikgXiBjaGFyYXQodmFsdWUsIDEpKSA8PCAyKSBeIGNoYXJhdCh2YWx1ZSwgMikpIDw8IDIpIF4gY2hhcmF0KHZhbHVlLCAzKSA6IDBcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyaW0gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS50cmltKClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7UmVnRXhwfSBwYXR0ZXJuXG4gKiBAcmV0dXJuIHtzdHJpbmc/fVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWF0Y2ggKHZhbHVlLCBwYXR0ZXJuKSB7XG5cdHJldHVybiAodmFsdWUgPSBwYXR0ZXJuLmV4ZWModmFsdWUpKSA/IHZhbHVlWzBdIDogdmFsdWVcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7KHN0cmluZ3xSZWdFeHApfSBwYXR0ZXJuXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVwbGFjZW1lbnRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2UgKHZhbHVlLCBwYXR0ZXJuLCByZXBsYWNlbWVudCkge1xuXHRyZXR1cm4gdmFsdWUucmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBzZWFyY2hcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4b2YgKHZhbHVlLCBzZWFyY2gpIHtcblx0cmV0dXJuIHZhbHVlLmluZGV4T2Yoc2VhcmNoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyYXQgKHZhbHVlLCBpbmRleCkge1xuXHRyZXR1cm4gdmFsdWUuY2hhckNvZGVBdChpbmRleCkgfCAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge251bWJlcn0gYmVnaW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBlbmRcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0ciAodmFsdWUsIGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHZhbHVlLnNsaWNlKGJlZ2luLCBlbmQpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJsZW4gKHZhbHVlKSB7XG5cdHJldHVybiB2YWx1ZS5sZW5ndGhcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2FueVtdfSB2YWx1ZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2l6ZW9mICh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUubGVuZ3RoXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcGFyYW0ge2FueVtdfSBhcnJheVxuICogQHJldHVybiB7YW55fVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kICh2YWx1ZSwgYXJyYXkpIHtcblx0cmV0dXJuIGFycmF5LnB1c2godmFsdWUpLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGFycmF5XG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZSAoYXJyYXksIGNhbGxiYWNrKSB7XG5cdHJldHVybiBhcnJheS5tYXAoY2FsbGJhY2spLmpvaW4oJycpXG59XG4iLCJpbXBvcnQge2Zyb20sIHRyaW0sIGNoYXJhdCwgc3RybGVuLCBzdWJzdHIsIGFwcGVuZCwgYXNzaWdufSBmcm9tICcuL1V0aWxpdHkuanMnXG5cbmV4cG9ydCB2YXIgbGluZSA9IDFcbmV4cG9ydCB2YXIgY29sdW1uID0gMVxuZXhwb3J0IHZhciBsZW5ndGggPSAwXG5leHBvcnQgdmFyIHBvc2l0aW9uID0gMFxuZXhwb3J0IHZhciBjaGFyYWN0ZXIgPSAwXG5leHBvcnQgdmFyIGNoYXJhY3RlcnMgPSAnJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3QgfCBudWxsfSByb290XG4gKiBAcGFyYW0ge29iamVjdCB8IG51bGx9IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nW10gfCBzdHJpbmd9IHByb3BzXG4gKiBAcGFyYW0ge29iamVjdFtdIHwgc3RyaW5nfSBjaGlsZHJlblxuICogQHBhcmFtIHtudW1iZXJ9IGxlbmd0aFxuICovXG5leHBvcnQgZnVuY3Rpb24gbm9kZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgdHlwZSwgcHJvcHMsIGNoaWxkcmVuLCBsZW5ndGgpIHtcblx0cmV0dXJuIHt2YWx1ZTogdmFsdWUsIHJvb3Q6IHJvb3QsIHBhcmVudDogcGFyZW50LCB0eXBlOiB0eXBlLCBwcm9wczogcHJvcHMsIGNoaWxkcmVuOiBjaGlsZHJlbiwgbGluZTogbGluZSwgY29sdW1uOiBjb2x1bW4sIGxlbmd0aDogbGVuZ3RoLCByZXR1cm46ICcnfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdH0gcHJvcHNcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvcHkgKHJvb3QsIHByb3BzKSB7XG5cdHJldHVybiBhc3NpZ24obm9kZSgnJywgbnVsbCwgbnVsbCwgJycsIG51bGwsIG51bGwsIDApLCByb290LCB7bGVuZ3RoOiAtcm9vdC5sZW5ndGh9LCBwcm9wcylcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGFyICgpIHtcblx0cmV0dXJuIGNoYXJhY3RlclxufVxuXG4vKipcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXYgKCkge1xuXHRjaGFyYWN0ZXIgPSBwb3NpdGlvbiA+IDAgPyBjaGFyYXQoY2hhcmFjdGVycywgLS1wb3NpdGlvbikgOiAwXG5cblx0aWYgKGNvbHVtbi0tLCBjaGFyYWN0ZXIgPT09IDEwKVxuXHRcdGNvbHVtbiA9IDEsIGxpbmUtLVxuXG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuZXh0ICgpIHtcblx0Y2hhcmFjdGVyID0gcG9zaXRpb24gPCBsZW5ndGggPyBjaGFyYXQoY2hhcmFjdGVycywgcG9zaXRpb24rKykgOiAwXG5cblx0aWYgKGNvbHVtbisrLCBjaGFyYWN0ZXIgPT09IDEwKVxuXHRcdGNvbHVtbiA9IDEsIGxpbmUrK1xuXG5cdHJldHVybiBjaGFyYWN0ZXJcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwZWVrICgpIHtcblx0cmV0dXJuIGNoYXJhdChjaGFyYWN0ZXJzLCBwb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXJldCAoKSB7XG5cdHJldHVybiBwb3NpdGlvblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBiZWdpblxuICogQHBhcmFtIHtudW1iZXJ9IGVuZFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2xpY2UgKGJlZ2luLCBlbmQpIHtcblx0cmV0dXJuIHN1YnN0cihjaGFyYWN0ZXJzLCBiZWdpbiwgZW5kKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtudW1iZXJ9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbiAodHlwZSkge1xuXHRzd2l0Y2ggKHR5cGUpIHtcblx0XHQvLyBcXDAgXFx0IFxcbiBcXHIgXFxzIHdoaXRlc3BhY2UgdG9rZW5cblx0XHRjYXNlIDA6IGNhc2UgOTogY2FzZSAxMDogY2FzZSAxMzogY2FzZSAzMjpcblx0XHRcdHJldHVybiA1XG5cdFx0Ly8gISArICwgLyA+IEAgfiBpc29sYXRlIHRva2VuXG5cdFx0Y2FzZSAzMzogY2FzZSA0MzogY2FzZSA0NDogY2FzZSA0NzogY2FzZSA2MjogY2FzZSA2NDogY2FzZSAxMjY6XG5cdFx0Ly8gOyB7IH0gYnJlYWtwb2ludCB0b2tlblxuXHRcdGNhc2UgNTk6IGNhc2UgMTIzOiBjYXNlIDEyNTpcblx0XHRcdHJldHVybiA0XG5cdFx0Ly8gOiBhY2NvbXBhbmllZCB0b2tlblxuXHRcdGNhc2UgNTg6XG5cdFx0XHRyZXR1cm4gM1xuXHRcdC8vIFwiICcgKCBbIG9wZW5pbmcgZGVsaW1pdCB0b2tlblxuXHRcdGNhc2UgMzQ6IGNhc2UgMzk6IGNhc2UgNDA6IGNhc2UgOTE6XG5cdFx0XHRyZXR1cm4gMlxuXHRcdC8vICkgXSBjbG9zaW5nIGRlbGltaXQgdG9rZW5cblx0XHRjYXNlIDQxOiBjYXNlIDkzOlxuXHRcdFx0cmV0dXJuIDFcblx0fVxuXG5cdHJldHVybiAwXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJuIHthbnlbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsbG9jICh2YWx1ZSkge1xuXHRyZXR1cm4gbGluZSA9IGNvbHVtbiA9IDEsIGxlbmd0aCA9IHN0cmxlbihjaGFyYWN0ZXJzID0gdmFsdWUpLCBwb3NpdGlvbiA9IDAsIFtdXG59XG5cbi8qKlxuICogQHBhcmFtIHthbnl9IHZhbHVlXG4gKiBAcmV0dXJuIHthbnl9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWFsbG9jICh2YWx1ZSkge1xuXHRyZXR1cm4gY2hhcmFjdGVycyA9ICcnLCB2YWx1ZVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWxpbWl0ICh0eXBlKSB7XG5cdHJldHVybiB0cmltKHNsaWNlKHBvc2l0aW9uIC0gMSwgZGVsaW1pdGVyKHR5cGUgPT09IDkxID8gdHlwZSArIDIgOiB0eXBlID09PSA0MCA/IHR5cGUgKyAxIDogdHlwZSkpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybiB7c3RyaW5nW119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2tlbml6ZSAodmFsdWUpIHtcblx0cmV0dXJuIGRlYWxsb2ModG9rZW5pemVyKGFsbG9jKHZhbHVlKSkpXG59XG5cbi8qKlxuICogQHBhcmFtIHtudW1iZXJ9IHR5cGVcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdoaXRlc3BhY2UgKHR5cGUpIHtcblx0d2hpbGUgKGNoYXJhY3RlciA9IHBlZWsoKSlcblx0XHRpZiAoY2hhcmFjdGVyIDwgMzMpXG5cdFx0XHRuZXh0KClcblx0XHRlbHNlXG5cdFx0XHRicmVha1xuXG5cdHJldHVybiB0b2tlbih0eXBlKSA+IDIgfHwgdG9rZW4oY2hhcmFjdGVyKSA+IDMgPyAnJyA6ICcgJ1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nW119IGNoaWxkcmVuXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRva2VuaXplciAoY2hpbGRyZW4pIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHRzd2l0Y2ggKHRva2VuKGNoYXJhY3RlcikpIHtcblx0XHRcdGNhc2UgMDogYXBwZW5kKGlkZW50aWZpZXIocG9zaXRpb24gLSAxKSwgY2hpbGRyZW4pXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHRjYXNlIDI6IGFwcGVuZChkZWxpbWl0KGNoYXJhY3RlciksIGNoaWxkcmVuKVxuXHRcdFx0XHRicmVha1xuXHRcdFx0ZGVmYXVsdDogYXBwZW5kKGZyb20oY2hhcmFjdGVyKSwgY2hpbGRyZW4pXG5cdFx0fVxuXG5cdHJldHVybiBjaGlsZHJlblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtudW1iZXJ9IGNvdW50XG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlc2NhcGluZyAoaW5kZXgsIGNvdW50KSB7XG5cdHdoaWxlICgtLWNvdW50ICYmIG5leHQoKSlcblx0XHQvLyBub3QgMC05IEEtRiBhLWZcblx0XHRpZiAoY2hhcmFjdGVyIDwgNDggfHwgY2hhcmFjdGVyID4gMTAyIHx8IChjaGFyYWN0ZXIgPiA1NyAmJiBjaGFyYWN0ZXIgPCA2NSkgfHwgKGNoYXJhY3RlciA+IDcwICYmIGNoYXJhY3RlciA8IDk3KSlcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuIHNsaWNlKGluZGV4LCBjYXJldCgpICsgKGNvdW50IDwgNiAmJiBwZWVrKCkgPT0gMzIgJiYgbmV4dCgpID09IDMyKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZVxuICogQHJldHVybiB7bnVtYmVyfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGVsaW1pdGVyICh0eXBlKSB7XG5cdHdoaWxlIChuZXh0KCkpXG5cdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblx0XHRcdC8vIF0gKSBcIiAnXG5cdFx0XHRjYXNlIHR5cGU6XG5cdFx0XHRcdHJldHVybiBwb3NpdGlvblxuXHRcdFx0Ly8gXCIgJ1xuXHRcdFx0Y2FzZSAzNDogY2FzZSAzOTpcblx0XHRcdFx0aWYgKHR5cGUgIT09IDM0ICYmIHR5cGUgIT09IDM5KVxuXHRcdFx0XHRcdGRlbGltaXRlcihjaGFyYWN0ZXIpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyAoXG5cdFx0XHRjYXNlIDQwOlxuXHRcdFx0XHRpZiAodHlwZSA9PT0gNDEpXG5cdFx0XHRcdFx0ZGVsaW1pdGVyKHR5cGUpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXFxuXHRcdFx0Y2FzZSA5Mjpcblx0XHRcdFx0bmV4dCgpXG5cdFx0XHRcdGJyZWFrXG5cdFx0fVxuXG5cdHJldHVybiBwb3NpdGlvblxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEByZXR1cm4ge251bWJlcn1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1lbnRlciAodHlwZSwgaW5kZXgpIHtcblx0d2hpbGUgKG5leHQoKSlcblx0XHQvLyAvL1xuXHRcdGlmICh0eXBlICsgY2hhcmFjdGVyID09PSA0NyArIDEwKVxuXHRcdFx0YnJlYWtcblx0XHQvLyAvKlxuXHRcdGVsc2UgaWYgKHR5cGUgKyBjaGFyYWN0ZXIgPT09IDQyICsgNDIgJiYgcGVlaygpID09PSA0Nylcblx0XHRcdGJyZWFrXG5cblx0cmV0dXJuICcvKicgKyBzbGljZShpbmRleCwgcG9zaXRpb24gLSAxKSArICcqJyArIGZyb20odHlwZSA9PT0gNDcgPyB0eXBlIDogbmV4dCgpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpZmllciAoaW5kZXgpIHtcblx0d2hpbGUgKCF0b2tlbihwZWVrKCkpKVxuXHRcdG5leHQoKVxuXG5cdHJldHVybiBzbGljZShpbmRleCwgcG9zaXRpb24pXG59XG4iLCJleHBvcnQgdmFyIE1TID0gJy1tcy0nXG5leHBvcnQgdmFyIE1PWiA9ICctbW96LSdcbmV4cG9ydCB2YXIgV0VCS0lUID0gJy13ZWJraXQtJ1xuXG5leHBvcnQgdmFyIENPTU1FTlQgPSAnY29tbSdcbmV4cG9ydCB2YXIgUlVMRVNFVCA9ICdydWxlJ1xuZXhwb3J0IHZhciBERUNMQVJBVElPTiA9ICdkZWNsJ1xuXG5leHBvcnQgdmFyIFBBR0UgPSAnQHBhZ2UnXG5leHBvcnQgdmFyIE1FRElBID0gJ0BtZWRpYSdcbmV4cG9ydCB2YXIgSU1QT1JUID0gJ0BpbXBvcnQnXG5leHBvcnQgdmFyIENIQVJTRVQgPSAnQGNoYXJzZXQnXG5leHBvcnQgdmFyIFZJRVdQT1JUID0gJ0B2aWV3cG9ydCdcbmV4cG9ydCB2YXIgU1VQUE9SVFMgPSAnQHN1cHBvcnRzJ1xuZXhwb3J0IHZhciBET0NVTUVOVCA9ICdAZG9jdW1lbnQnXG5leHBvcnQgdmFyIE5BTUVTUEFDRSA9ICdAbmFtZXNwYWNlJ1xuZXhwb3J0IHZhciBLRVlGUkFNRVMgPSAnQGtleWZyYW1lcydcbmV4cG9ydCB2YXIgRk9OVF9GQUNFID0gJ0Bmb250LWZhY2UnXG5leHBvcnQgdmFyIENPVU5URVJfU1RZTEUgPSAnQGNvdW50ZXItc3R5bGUnXG5leHBvcnQgdmFyIEZPTlRfRkVBVFVSRV9WQUxVRVMgPSAnQGZvbnQtZmVhdHVyZS12YWx1ZXMnXG5leHBvcnQgdmFyIExBWUVSID0gJ0BsYXllcidcbiIsImltcG9ydCB7SU1QT1JULCBMQVlFUiwgQ09NTUVOVCwgUlVMRVNFVCwgREVDTEFSQVRJT04sIEtFWUZSQU1FU30gZnJvbSAnLi9FbnVtLmpzJ1xuaW1wb3J0IHtzdHJsZW4sIHNpemVvZn0gZnJvbSAnLi9VdGlsaXR5LmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplIChjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0dmFyIG91dHB1dCA9ICcnXG5cdHZhciBsZW5ndGggPSBzaXplb2YoY2hpbGRyZW4pXG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKylcblx0XHRvdXRwdXQgKz0gY2FsbGJhY2soY2hpbGRyZW5baV0sIGksIGNoaWxkcmVuLCBjYWxsYmFjaykgfHwgJydcblxuXHRyZXR1cm4gb3V0cHV0XG59XG5cbi8qKlxuICogQHBhcmFtIHtvYmplY3R9IGVsZW1lbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICogQHBhcmFtIHtvYmplY3RbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdHJpbmdpZnkgKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIExBWUVSOiBpZiAoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGgpIGJyZWFrXG5cdFx0Y2FzZSBJTVBPUlQ6IGNhc2UgREVDTEFSQVRJT046IHJldHVybiBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQucmV0dXJuIHx8IGVsZW1lbnQudmFsdWVcblx0XHRjYXNlIENPTU1FTlQ6IHJldHVybiAnJ1xuXHRcdGNhc2UgS0VZRlJBTUVTOiByZXR1cm4gZWxlbWVudC5yZXR1cm4gPSBlbGVtZW50LnZhbHVlICsgJ3snICsgc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSArICd9J1xuXHRcdGNhc2UgUlVMRVNFVDogZWxlbWVudC52YWx1ZSA9IGVsZW1lbnQucHJvcHMuam9pbignLCcpXG5cdH1cblxuXHRyZXR1cm4gc3RybGVuKGNoaWxkcmVuID0gc2VyaWFsaXplKGVsZW1lbnQuY2hpbGRyZW4sIGNhbGxiYWNrKSkgPyBlbGVtZW50LnJldHVybiA9IGVsZW1lbnQudmFsdWUgKyAneycgKyBjaGlsZHJlbiArICd9JyA6ICcnXG59XG4iLCJpbXBvcnQge0NPTU1FTlQsIFJVTEVTRVQsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge2FicywgY2hhcmF0LCB0cmltLCBmcm9tLCBzaXplb2YsIHN0cmxlbiwgc3Vic3RyLCBhcHBlbmQsIHJlcGxhY2UsIGluZGV4b2Z9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7bm9kZSwgY2hhciwgcHJldiwgbmV4dCwgcGVlaywgY2FyZXQsIGFsbG9jLCBkZWFsbG9jLCBkZWxpbWl0LCB3aGl0ZXNwYWNlLCBlc2NhcGluZywgaWRlbnRpZmllciwgY29tbWVudGVyfSBmcm9tICcuL1Rva2VuaXplci5qcydcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm4ge29iamVjdFtdfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGlsZSAodmFsdWUpIHtcblx0cmV0dXJuIGRlYWxsb2MocGFyc2UoJycsIG51bGwsIG51bGwsIG51bGwsIFsnJ10sIHZhbHVlID0gYWxsb2ModmFsdWUpLCAwLCBbMF0sIHZhbHVlKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7b2JqZWN0fSByb290XG4gKiBAcGFyYW0ge29iamVjdD99IHBhcmVudFxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZVxuICogQHBhcmFtIHtzdHJpbmdbXX0gcnVsZXNcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzZXRzXG4gKiBAcGFyYW0ge251bWJlcltdfSBwc2V1ZG9cbiAqIEBwYXJhbSB7bnVtYmVyW119IHBvaW50c1xuICogQHBhcmFtIHtzdHJpbmdbXX0gZGVjbGFyYXRpb25zXG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZSAodmFsdWUsIHJvb3QsIHBhcmVudCwgcnVsZSwgcnVsZXMsIHJ1bGVzZXRzLCBwc2V1ZG8sIHBvaW50cywgZGVjbGFyYXRpb25zKSB7XG5cdHZhciBpbmRleCA9IDBcblx0dmFyIG9mZnNldCA9IDBcblx0dmFyIGxlbmd0aCA9IHBzZXVkb1xuXHR2YXIgYXRydWxlID0gMFxuXHR2YXIgcHJvcGVydHkgPSAwXG5cdHZhciBwcmV2aW91cyA9IDBcblx0dmFyIHZhcmlhYmxlID0gMVxuXHR2YXIgc2Nhbm5pbmcgPSAxXG5cdHZhciBhbXBlcnNhbmQgPSAxXG5cdHZhciBjaGFyYWN0ZXIgPSAwXG5cdHZhciB0eXBlID0gJydcblx0dmFyIHByb3BzID0gcnVsZXNcblx0dmFyIGNoaWxkcmVuID0gcnVsZXNldHNcblx0dmFyIHJlZmVyZW5jZSA9IHJ1bGVcblx0dmFyIGNoYXJhY3RlcnMgPSB0eXBlXG5cblx0d2hpbGUgKHNjYW5uaW5nKVxuXHRcdHN3aXRjaCAocHJldmlvdXMgPSBjaGFyYWN0ZXIsIGNoYXJhY3RlciA9IG5leHQoKSkge1xuXHRcdFx0Ly8gKFxuXHRcdFx0Y2FzZSA0MDpcblx0XHRcdFx0aWYgKHByZXZpb3VzICE9IDEwOCAmJiBjaGFyYXQoY2hhcmFjdGVycywgbGVuZ3RoIC0gMSkgPT0gNTgpIHtcblx0XHRcdFx0XHRpZiAoaW5kZXhvZihjaGFyYWN0ZXJzICs9IHJlcGxhY2UoZGVsaW1pdChjaGFyYWN0ZXIpLCAnJicsICcmXFxmJyksICcmXFxmJykgIT0gLTEpXG5cdFx0XHRcdFx0XHRhbXBlcnNhbmQgPSAtMVxuXHRcdFx0XHRcdGJyZWFrXG5cdFx0XHRcdH1cblx0XHRcdC8vIFwiICcgW1xuXHRcdFx0Y2FzZSAzNDogY2FzZSAzOTogY2FzZSA5MTpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBkZWxpbWl0KGNoYXJhY3Rlcilcblx0XHRcdFx0YnJlYWtcblx0XHRcdC8vIFxcdCBcXG4gXFxyIFxcc1xuXHRcdFx0Y2FzZSA5OiBjYXNlIDEwOiBjYXNlIDEzOiBjYXNlIDMyOlxuXHRcdFx0XHRjaGFyYWN0ZXJzICs9IHdoaXRlc3BhY2UocHJldmlvdXMpXG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyBcXFxuXHRcdFx0Y2FzZSA5Mjpcblx0XHRcdFx0Y2hhcmFjdGVycyArPSBlc2NhcGluZyhjYXJldCgpIC0gMSwgNylcblx0XHRcdFx0Y29udGludWVcblx0XHRcdC8vIC9cblx0XHRcdGNhc2UgNDc6XG5cdFx0XHRcdHN3aXRjaCAocGVlaygpKSB7XG5cdFx0XHRcdFx0Y2FzZSA0MjogY2FzZSA0Nzpcblx0XHRcdFx0XHRcdGFwcGVuZChjb21tZW50KGNvbW1lbnRlcihuZXh0KCksIGNhcmV0KCkpLCByb290LCBwYXJlbnQpLCBkZWNsYXJhdGlvbnMpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRjaGFyYWN0ZXJzICs9ICcvJ1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrXG5cdFx0XHQvLyB7XG5cdFx0XHRjYXNlIDEyMyAqIHZhcmlhYmxlOlxuXHRcdFx0XHRwb2ludHNbaW5kZXgrK10gPSBzdHJsZW4oY2hhcmFjdGVycykgKiBhbXBlcnNhbmRcblx0XHRcdC8vIH0gOyBcXDBcblx0XHRcdGNhc2UgMTI1ICogdmFyaWFibGU6IGNhc2UgNTk6IGNhc2UgMDpcblx0XHRcdFx0c3dpdGNoIChjaGFyYWN0ZXIpIHtcblx0XHRcdFx0XHQvLyBcXDAgfVxuXHRcdFx0XHRcdGNhc2UgMDogY2FzZSAxMjU6IHNjYW5uaW5nID0gMFxuXHRcdFx0XHRcdC8vIDtcblx0XHRcdFx0XHRjYXNlIDU5ICsgb2Zmc2V0OiBpZiAoYW1wZXJzYW5kID09IC0xKSBjaGFyYWN0ZXJzID0gcmVwbGFjZShjaGFyYWN0ZXJzLCAvXFxmL2csICcnKVxuXHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5ID4gMCAmJiAoc3RybGVuKGNoYXJhY3RlcnMpIC0gbGVuZ3RoKSlcblx0XHRcdFx0XHRcdFx0YXBwZW5kKHByb3BlcnR5ID4gMzIgPyBkZWNsYXJhdGlvbihjaGFyYWN0ZXJzICsgJzsnLCBydWxlLCBwYXJlbnQsIGxlbmd0aCAtIDEpIDogZGVjbGFyYXRpb24ocmVwbGFjZShjaGFyYWN0ZXJzLCAnICcsICcnKSArICc7JywgcnVsZSwgcGFyZW50LCBsZW5ndGggLSAyKSwgZGVjbGFyYXRpb25zKVxuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyBAIDtcblx0XHRcdFx0XHRjYXNlIDU5OiBjaGFyYWN0ZXJzICs9ICc7J1xuXHRcdFx0XHRcdC8vIHsgcnVsZS9hdC1ydWxlXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdGFwcGVuZChyZWZlcmVuY2UgPSBydWxlc2V0KGNoYXJhY3RlcnMsIHJvb3QsIHBhcmVudCwgaW5kZXgsIG9mZnNldCwgcnVsZXMsIHBvaW50cywgdHlwZSwgcHJvcHMgPSBbXSwgY2hpbGRyZW4gPSBbXSwgbGVuZ3RoKSwgcnVsZXNldHMpXG5cblx0XHRcdFx0XHRcdGlmIChjaGFyYWN0ZXIgPT09IDEyMylcblx0XHRcdFx0XHRcdFx0aWYgKG9mZnNldCA9PT0gMClcblx0XHRcdFx0XHRcdFx0XHRwYXJzZShjaGFyYWN0ZXJzLCByb290LCByZWZlcmVuY2UsIHJlZmVyZW5jZSwgcHJvcHMsIHJ1bGVzZXRzLCBsZW5ndGgsIHBvaW50cywgY2hpbGRyZW4pXG5cdFx0XHRcdFx0XHRcdGVsc2Vcblx0XHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGF0cnVsZSA9PT0gOTkgJiYgY2hhcmF0KGNoYXJhY3RlcnMsIDMpID09PSAxMTAgPyAxMDAgOiBhdHJ1bGUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGQgbCBtIHNcblx0XHRcdFx0XHRcdFx0XHRcdGNhc2UgMTAwOiBjYXNlIDEwODogY2FzZSAxMDk6IGNhc2UgMTE1OlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRwYXJzZSh2YWx1ZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIHJ1bGUgJiYgYXBwZW5kKHJ1bGVzZXQodmFsdWUsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCAwLCAwLCBydWxlcywgcG9pbnRzLCB0eXBlLCBydWxlcywgcHJvcHMgPSBbXSwgbGVuZ3RoKSwgY2hpbGRyZW4pLCBydWxlcywgY2hpbGRyZW4sIGxlbmd0aCwgcG9pbnRzLCBydWxlID8gcHJvcHMgOiBjaGlsZHJlbilcblx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHBhcnNlKGNoYXJhY3RlcnMsIHJlZmVyZW5jZSwgcmVmZXJlbmNlLCByZWZlcmVuY2UsIFsnJ10sIGNoaWxkcmVuLCAwLCBwb2ludHMsIGNoaWxkcmVuKVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGluZGV4ID0gb2Zmc2V0ID0gcHJvcGVydHkgPSAwLCB2YXJpYWJsZSA9IGFtcGVyc2FuZCA9IDEsIHR5cGUgPSBjaGFyYWN0ZXJzID0gJycsIGxlbmd0aCA9IHBzZXVkb1xuXHRcdFx0XHRicmVha1xuXHRcdFx0Ly8gOlxuXHRcdFx0Y2FzZSA1ODpcblx0XHRcdFx0bGVuZ3RoID0gMSArIHN0cmxlbihjaGFyYWN0ZXJzKSwgcHJvcGVydHkgPSBwcmV2aW91c1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aWYgKHZhcmlhYmxlIDwgMSlcblx0XHRcdFx0XHRpZiAoY2hhcmFjdGVyID09IDEyMylcblx0XHRcdFx0XHRcdC0tdmFyaWFibGVcblx0XHRcdFx0XHRlbHNlIGlmIChjaGFyYWN0ZXIgPT0gMTI1ICYmIHZhcmlhYmxlKysgPT0gMCAmJiBwcmV2KCkgPT0gMTI1KVxuXHRcdFx0XHRcdFx0Y29udGludWVcblxuXHRcdFx0XHRzd2l0Y2ggKGNoYXJhY3RlcnMgKz0gZnJvbShjaGFyYWN0ZXIpLCBjaGFyYWN0ZXIgKiB2YXJpYWJsZSkge1xuXHRcdFx0XHRcdC8vICZcblx0XHRcdFx0XHRjYXNlIDM4OlxuXHRcdFx0XHRcdFx0YW1wZXJzYW5kID0gb2Zmc2V0ID4gMCA/IDEgOiAoY2hhcmFjdGVycyArPSAnXFxmJywgLTEpXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vICxcblx0XHRcdFx0XHRjYXNlIDQ0OlxuXHRcdFx0XHRcdFx0cG9pbnRzW2luZGV4KytdID0gKHN0cmxlbihjaGFyYWN0ZXJzKSAtIDEpICogYW1wZXJzYW5kLCBhbXBlcnNhbmQgPSAxXG5cdFx0XHRcdFx0XHRicmVha1xuXHRcdFx0XHRcdC8vIEBcblx0XHRcdFx0XHRjYXNlIDY0OlxuXHRcdFx0XHRcdFx0Ly8gLVxuXHRcdFx0XHRcdFx0aWYgKHBlZWsoKSA9PT0gNDUpXG5cdFx0XHRcdFx0XHRcdGNoYXJhY3RlcnMgKz0gZGVsaW1pdChuZXh0KCkpXG5cblx0XHRcdFx0XHRcdGF0cnVsZSA9IHBlZWsoKSwgb2Zmc2V0ID0gbGVuZ3RoID0gc3RybGVuKHR5cGUgPSBjaGFyYWN0ZXJzICs9IGlkZW50aWZpZXIoY2FyZXQoKSkpLCBjaGFyYWN0ZXIrK1xuXHRcdFx0XHRcdFx0YnJlYWtcblx0XHRcdFx0XHQvLyAtXG5cdFx0XHRcdFx0Y2FzZSA0NTpcblx0XHRcdFx0XHRcdGlmIChwcmV2aW91cyA9PT0gNDUgJiYgc3RybGVuKGNoYXJhY3RlcnMpID09IDIpXG5cdFx0XHRcdFx0XHRcdHZhcmlhYmxlID0gMFxuXHRcdFx0XHR9XG5cdFx0fVxuXG5cdHJldHVybiBydWxlc2V0c1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcbiAqIEBwYXJhbSB7c3RyaW5nW119IHJ1bGVzXG4gKiBAcGFyYW0ge251bWJlcltdfSBwb2ludHNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBwcm9wc1xuICogQHBhcmFtIHtzdHJpbmdbXX0gY2hpbGRyZW5cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJ1bGVzZXQgKHZhbHVlLCByb290LCBwYXJlbnQsIGluZGV4LCBvZmZzZXQsIHJ1bGVzLCBwb2ludHMsIHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKSB7XG5cdHZhciBwb3N0ID0gb2Zmc2V0IC0gMVxuXHR2YXIgcnVsZSA9IG9mZnNldCA9PT0gMCA/IHJ1bGVzIDogWycnXVxuXHR2YXIgc2l6ZSA9IHNpemVvZihydWxlKVxuXG5cdGZvciAodmFyIGkgPSAwLCBqID0gMCwgayA9IDA7IGkgPCBpbmRleDsgKytpKVxuXHRcdGZvciAodmFyIHggPSAwLCB5ID0gc3Vic3RyKHZhbHVlLCBwb3N0ICsgMSwgcG9zdCA9IGFicyhqID0gcG9pbnRzW2ldKSksIHogPSB2YWx1ZTsgeCA8IHNpemU7ICsreClcblx0XHRcdGlmICh6ID0gdHJpbShqID4gMCA/IHJ1bGVbeF0gKyAnICcgKyB5IDogcmVwbGFjZSh5LCAvJlxcZi9nLCBydWxlW3hdKSkpXG5cdFx0XHRcdHByb3BzW2srK10gPSB6XG5cblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgb2Zmc2V0ID09PSAwID8gUlVMRVNFVCA6IHR5cGUsIHByb3BzLCBjaGlsZHJlbiwgbGVuZ3RoKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICogQHBhcmFtIHtvYmplY3R9IHJvb3RcbiAqIEBwYXJhbSB7b2JqZWN0P30gcGFyZW50XG4gKiBAcmV0dXJuIHtvYmplY3R9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21tZW50ICh2YWx1ZSwgcm9vdCwgcGFyZW50KSB7XG5cdHJldHVybiBub2RlKHZhbHVlLCByb290LCBwYXJlbnQsIENPTU1FTlQsIGZyb20oY2hhcigpKSwgc3Vic3RyKHZhbHVlLCAyLCAtMiksIDApXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcGFyYW0ge29iamVjdH0gcm9vdFxuICogQHBhcmFtIHtvYmplY3Q/fSBwYXJlbnRcbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGhcbiAqIEByZXR1cm4ge29iamVjdH1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRlY2xhcmF0aW9uICh2YWx1ZSwgcm9vdCwgcGFyZW50LCBsZW5ndGgpIHtcblx0cmV0dXJuIG5vZGUodmFsdWUsIHJvb3QsIHBhcmVudCwgREVDTEFSQVRJT04sIHN1YnN0cih2YWx1ZSwgMCwgbGVuZ3RoKSwgc3Vic3RyKHZhbHVlLCBsZW5ndGggKyAxLCAtMSksIGxlbmd0aClcbn1cbiIsImltcG9ydCB7IFN0eWxlU2hlZXQgfSBmcm9tICdAZW1vdGlvbi9zaGVldCc7XG5pbXBvcnQgeyBkZWFsbG9jLCBhbGxvYywgbmV4dCwgdG9rZW4sIGZyb20sIHBlZWssIGRlbGltaXQsIHNsaWNlLCBwb3NpdGlvbiwgUlVMRVNFVCwgY29tYmluZSwgbWF0Y2gsIHNlcmlhbGl6ZSwgY29weSwgcmVwbGFjZSwgV0VCS0lULCBNT1osIE1TLCBLRVlGUkFNRVMsIERFQ0xBUkFUSU9OLCBoYXNoLCBjaGFyYXQsIHN0cmxlbiwgaW5kZXhvZiwgc3RyaW5naWZ5LCBydWxlc2hlZXQsIG1pZGRsZXdhcmUsIGNvbXBpbGUgfSBmcm9tICdzdHlsaXMnO1xuaW1wb3J0ICdAZW1vdGlvbi93ZWFrLW1lbW9pemUnO1xuaW1wb3J0ICdAZW1vdGlvbi9tZW1vaXplJztcblxudmFyIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyA9IGZ1bmN0aW9uIGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhiZWdpbiwgcG9pbnRzLCBpbmRleCkge1xuICB2YXIgcHJldmlvdXMgPSAwO1xuICB2YXIgY2hhcmFjdGVyID0gMDtcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHByZXZpb3VzID0gY2hhcmFjdGVyO1xuICAgIGNoYXJhY3RlciA9IHBlZWsoKTsgLy8gJlxcZlxuXG4gICAgaWYgKHByZXZpb3VzID09PSAzOCAmJiBjaGFyYWN0ZXIgPT09IDEyKSB7XG4gICAgICBwb2ludHNbaW5kZXhdID0gMTtcbiAgICB9XG5cbiAgICBpZiAodG9rZW4oY2hhcmFjdGVyKSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgbmV4dCgpO1xuICB9XG5cbiAgcmV0dXJuIHNsaWNlKGJlZ2luLCBwb3NpdGlvbik7XG59O1xuXG52YXIgdG9SdWxlcyA9IGZ1bmN0aW9uIHRvUnVsZXMocGFyc2VkLCBwb2ludHMpIHtcbiAgLy8gcHJldGVuZCB3ZSd2ZSBzdGFydGVkIHdpdGggYSBjb21tYVxuICB2YXIgaW5kZXggPSAtMTtcbiAgdmFyIGNoYXJhY3RlciA9IDQ0O1xuXG4gIGRvIHtcbiAgICBzd2l0Y2ggKHRva2VuKGNoYXJhY3RlcikpIHtcbiAgICAgIGNhc2UgMDpcbiAgICAgICAgLy8gJlxcZlxuICAgICAgICBpZiAoY2hhcmFjdGVyID09PSAzOCAmJiBwZWVrKCkgPT09IDEyKSB7XG4gICAgICAgICAgLy8gdGhpcyBpcyBub3QgMTAwJSBjb3JyZWN0LCB3ZSBkb24ndCBhY2NvdW50IGZvciBsaXRlcmFsIHNlcXVlbmNlcyBoZXJlIC0gbGlrZSBmb3IgZXhhbXBsZSBxdW90ZWQgc3RyaW5nc1xuICAgICAgICAgIC8vIHN0eWxpcyBpbnNlcnRzIFxcZiBhZnRlciAmIHRvIGtub3cgd2hlbiAmIHdoZXJlIGl0IHNob3VsZCByZXBsYWNlIHRoaXMgc2VxdWVuY2Ugd2l0aCB0aGUgY29udGV4dCBzZWxlY3RvclxuICAgICAgICAgIC8vIGFuZCB3aGVuIGl0IHNob3VsZCBqdXN0IGNvbmNhdGVuYXRlIHRoZSBvdXRlciBhbmQgaW5uZXIgc2VsZWN0b3JzXG4gICAgICAgICAgLy8gaXQncyB2ZXJ5IHVubGlrZWx5IGZvciB0aGlzIHNlcXVlbmNlIHRvIGFjdHVhbGx5IGFwcGVhciBpbiBhIGRpZmZlcmVudCBjb250ZXh0LCBzbyB3ZSBqdXN0IGxldmVyYWdlIHRoaXMgZmFjdCBoZXJlXG4gICAgICAgICAgcG9pbnRzW2luZGV4XSA9IDE7XG4gICAgICAgIH1cblxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGlkZW50aWZpZXJXaXRoUG9pbnRUcmFja2luZyhwb3NpdGlvbiAtIDEsIHBvaW50cywgaW5kZXgpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyOlxuICAgICAgICBwYXJzZWRbaW5kZXhdICs9IGRlbGltaXQoY2hhcmFjdGVyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgNDpcbiAgICAgICAgLy8gY29tbWFcbiAgICAgICAgaWYgKGNoYXJhY3RlciA9PT0gNDQpIHtcbiAgICAgICAgICAvLyBjb2xvblxuICAgICAgICAgIHBhcnNlZFsrK2luZGV4XSA9IHBlZWsoKSA9PT0gNTggPyAnJlxcZicgOiAnJztcbiAgICAgICAgICBwb2ludHNbaW5kZXhdID0gcGFyc2VkW2luZGV4XS5sZW5ndGg7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgLy8gZmFsbHRocm91Z2hcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcGFyc2VkW2luZGV4XSArPSBmcm9tKGNoYXJhY3Rlcik7XG4gICAgfVxuICB9IHdoaWxlIChjaGFyYWN0ZXIgPSBuZXh0KCkpO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuXG52YXIgZ2V0UnVsZXMgPSBmdW5jdGlvbiBnZXRSdWxlcyh2YWx1ZSwgcG9pbnRzKSB7XG4gIHJldHVybiBkZWFsbG9jKHRvUnVsZXMoYWxsb2ModmFsdWUpLCBwb2ludHMpKTtcbn07IC8vIFdlYWtTZXQgd291bGQgYmUgbW9yZSBhcHByb3ByaWF0ZSwgYnV0IG9ubHkgV2Vha01hcCBpcyBzdXBwb3J0ZWQgaW4gSUUxMVxuXG5cbnZhciBmaXhlZEVsZW1lbnRzID0gLyogI19fUFVSRV9fICovbmV3IFdlYWtNYXAoKTtcbnZhciBjb21wYXQgPSBmdW5jdGlvbiBjb21wYXQoZWxlbWVudCkge1xuICBpZiAoZWxlbWVudC50eXBlICE9PSAncnVsZScgfHwgIWVsZW1lbnQucGFyZW50IHx8IC8vIHBvc2l0aXZlIC5sZW5ndGggaW5kaWNhdGVzIHRoYXQgdGhpcyBydWxlIGNvbnRhaW5zIHBzZXVkb1xuICAvLyBuZWdhdGl2ZSAubGVuZ3RoIGluZGljYXRlcyB0aGF0IHRoaXMgcnVsZSBoYXMgYmVlbiBhbHJlYWR5IHByZWZpeGVkXG4gIGVsZW1lbnQubGVuZ3RoIDwgMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciB2YWx1ZSA9IGVsZW1lbnQudmFsdWU7XG4gIHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudDtcbiAgdmFyIGlzSW1wbGljaXRSdWxlID0gZWxlbWVudC5jb2x1bW4gPT09IHBhcmVudC5jb2x1bW4gJiYgZWxlbWVudC5saW5lID09PSBwYXJlbnQubGluZTtcblxuICB3aGlsZSAocGFyZW50LnR5cGUgIT09ICdydWxlJykge1xuICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnQ7XG4gICAgaWYgKCFwYXJlbnQpIHJldHVybjtcbiAgfSAvLyBzaG9ydC1jaXJjdWl0IGZvciB0aGUgc2ltcGxlc3QgY2FzZVxuXG5cbiAgaWYgKGVsZW1lbnQucHJvcHMubGVuZ3RoID09PSAxICYmIHZhbHVlLmNoYXJDb2RlQXQoMCkgIT09IDU4XG4gIC8qIGNvbG9uICovXG4gICYmICFmaXhlZEVsZW1lbnRzLmdldChwYXJlbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIGlmIHRoaXMgaXMgYW4gaW1wbGljaXRseSBpbnNlcnRlZCBydWxlICh0aGUgb25lIGVhZ2VybHkgaW5zZXJ0ZWQgYXQgdGhlIGVhY2ggbmV3IG5lc3RlZCBsZXZlbClcbiAgLy8gdGhlbiB0aGUgcHJvcHMgaGFzIGFscmVhZHkgYmVlbiBtYW5pcHVsYXRlZCBiZWZvcmVoYW5kIGFzIHRoZXkgdGhhdCBhcnJheSBpcyBzaGFyZWQgYmV0d2VlbiBpdCBhbmQgaXRzIFwicnVsZSBwYXJlbnRcIlxuXG5cbiAgaWYgKGlzSW1wbGljaXRSdWxlKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZml4ZWRFbGVtZW50cy5zZXQoZWxlbWVudCwgdHJ1ZSk7XG4gIHZhciBwb2ludHMgPSBbXTtcbiAgdmFyIHJ1bGVzID0gZ2V0UnVsZXModmFsdWUsIHBvaW50cyk7XG4gIHZhciBwYXJlbnRSdWxlcyA9IHBhcmVudC5wcm9wcztcblxuICBmb3IgKHZhciBpID0gMCwgayA9IDA7IGkgPCBydWxlcy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAodmFyIGogPSAwOyBqIDwgcGFyZW50UnVsZXMubGVuZ3RoOyBqKyssIGsrKykge1xuICAgICAgZWxlbWVudC5wcm9wc1trXSA9IHBvaW50c1tpXSA/IHJ1bGVzW2ldLnJlcGxhY2UoLyZcXGYvZywgcGFyZW50UnVsZXNbal0pIDogcGFyZW50UnVsZXNbal0gKyBcIiBcIiArIHJ1bGVzW2ldO1xuICAgIH1cbiAgfVxufTtcbnZhciByZW1vdmVMYWJlbCA9IGZ1bmN0aW9uIHJlbW92ZUxhYmVsKGVsZW1lbnQpIHtcbiAgaWYgKGVsZW1lbnQudHlwZSA9PT0gJ2RlY2wnKSB7XG4gICAgdmFyIHZhbHVlID0gZWxlbWVudC52YWx1ZTtcblxuICAgIGlmICggLy8gY2hhcmNvZGUgZm9yIGxcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDApID09PSAxMDggJiYgLy8gY2hhcmNvZGUgZm9yIGJcbiAgICB2YWx1ZS5jaGFyQ29kZUF0KDIpID09PSA5OCkge1xuICAgICAgLy8gdGhpcyBpZ25vcmVzIGxhYmVsXG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gJyc7XG4gICAgICBlbGVtZW50LnZhbHVlID0gJyc7XG4gICAgfVxuICB9XG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1mYWxsdGhyb3VnaCAqL1xuXG5mdW5jdGlvbiBwcmVmaXgodmFsdWUsIGxlbmd0aCkge1xuICBzd2l0Y2ggKGhhc2godmFsdWUsIGxlbmd0aCkpIHtcbiAgICAvLyBjb2xvci1hZGp1c3RcbiAgICBjYXNlIDUxMDM6XG4gICAgICByZXR1cm4gV0VCS0lUICsgJ3ByaW50LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFuaW1hdGlvbiwgYW5pbWF0aW9uLShkZWxheXxkaXJlY3Rpb258ZHVyYXRpb258ZmlsbC1tb2RlfGl0ZXJhdGlvbi1jb3VudHxuYW1lfHBsYXktc3RhdGV8dGltaW5nLWZ1bmN0aW9uKVxuXG4gICAgY2FzZSA1NzM3OlxuICAgIGNhc2UgNDIwMTpcbiAgICBjYXNlIDMxNzc6XG4gICAgY2FzZSAzNDMzOlxuICAgIGNhc2UgMTY0MTpcbiAgICBjYXNlIDQ0NTc6XG4gICAgY2FzZSAyOTIxOiAvLyB0ZXh0LWRlY29yYXRpb24sIGZpbHRlciwgY2xpcC1wYXRoLCBiYWNrZmFjZS12aXNpYmlsaXR5LCBjb2x1bW4sIGJveC1kZWNvcmF0aW9uLWJyZWFrXG5cbiAgICBjYXNlIDU1NzI6XG4gICAgY2FzZSA2MzU2OlxuICAgIGNhc2UgNTg0NDpcbiAgICBjYXNlIDMxOTE6XG4gICAgY2FzZSA2NjQ1OlxuICAgIGNhc2UgMzAwNTogLy8gbWFzaywgbWFzay1pbWFnZSwgbWFzay0obW9kZXxjbGlwfHNpemUpLCBtYXNrLShyZXBlYXR8b3JpZ2luKSwgbWFzay1wb3NpdGlvbiwgbWFzay1jb21wb3NpdGUsXG5cbiAgICBjYXNlIDYzOTE6XG4gICAgY2FzZSA1ODc5OlxuICAgIGNhc2UgNTYyMzpcbiAgICBjYXNlIDYxMzU6XG4gICAgY2FzZSA0NTk5OlxuICAgIGNhc2UgNDg1NTogLy8gYmFja2dyb3VuZC1jbGlwLCBjb2x1bW5zLCBjb2x1bW4tKGNvdW50fGZpbGx8Z2FwfHJ1bGV8cnVsZS1jb2xvcnxydWxlLXN0eWxlfHJ1bGUtd2lkdGh8c3Bhbnx3aWR0aClcblxuICAgIGNhc2UgNDIxNTpcbiAgICBjYXNlIDYzODk6XG4gICAgY2FzZSA1MTA5OlxuICAgIGNhc2UgNTM2NTpcbiAgICBjYXNlIDU2MjE6XG4gICAgY2FzZSAzODI5OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgdmFsdWU7XG4gICAgLy8gYXBwZWFyYW5jZSwgdXNlci1zZWxlY3QsIHRyYW5zZm9ybSwgaHlwaGVucywgdGV4dC1zaXplLWFkanVzdFxuXG4gICAgY2FzZSA1MzQ5OlxuICAgIGNhc2UgNDI0NjpcbiAgICBjYXNlIDQ4MTA6XG4gICAgY2FzZSA2OTY4OlxuICAgIGNhc2UgMjc1NjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1PWiArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGZsZXgsIGZsZXgtZGlyZWN0aW9uXG5cbiAgICBjYXNlIDY4Mjg6XG4gICAgY2FzZSA0MjY4OlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIG9yZGVyXG5cbiAgICBjYXNlIDYxNjU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LScgKyB2YWx1ZSArIHZhbHVlO1xuICAgIC8vIGFsaWduLWl0ZW1zXG5cbiAgICBjYXNlIDUxODc6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyByZXBsYWNlKHZhbHVlLCAvKFxcdyspLisoOlteXSspLywgV0VCS0lUICsgJ2JveC0kMSQyJyArIE1TICsgJ2ZsZXgtJDEkMicpICsgdmFsdWU7XG4gICAgLy8gYWxpZ24tc2VsZlxuXG4gICAgY2FzZSA1NDQzOlxuICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyAnZmxleC1pdGVtLScgKyByZXBsYWNlKHZhbHVlLCAvZmxleC18LXNlbGYvLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBhbGlnbi1jb250ZW50XG5cbiAgICBjYXNlIDQ2NzU6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArICdmbGV4LWxpbmUtcGFjaycgKyByZXBsYWNlKHZhbHVlLCAvYWxpZ24tY29udGVudHxmbGV4LXwtc2VsZi8sICcnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtc2hyaW5rXG5cbiAgICBjYXNlIDU1NDg6XG4gICAgICByZXR1cm4gV0VCS0lUICsgdmFsdWUgKyBNUyArIHJlcGxhY2UodmFsdWUsICdzaHJpbmsnLCAnbmVnYXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIGZsZXgtYmFzaXNcblxuICAgIGNhc2UgNTI5MjpcbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2Jhc2lzJywgJ3ByZWZlcnJlZC1zaXplJykgKyB2YWx1ZTtcbiAgICAvLyBmbGV4LWdyb3dcblxuICAgIGNhc2UgNjA2MDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyAnYm94LScgKyByZXBsYWNlKHZhbHVlLCAnLWdyb3cnLCAnJykgKyBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgJ2dyb3cnLCAncG9zaXRpdmUnKSArIHZhbHVlO1xuICAgIC8vIHRyYW5zaXRpb25cblxuICAgIGNhc2UgNDU1NDpcbiAgICAgIHJldHVybiBXRUJLSVQgKyByZXBsYWNlKHZhbHVlLCAvKFteLV0pKHRyYW5zZm9ybSkvZywgJyQxJyArIFdFQktJVCArICckMicpICsgdmFsdWU7XG4gICAgLy8gY3Vyc29yXG5cbiAgICBjYXNlIDYxODc6XG4gICAgICByZXR1cm4gcmVwbGFjZShyZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oem9vbS18Z3JhYikvLCBXRUJLSVQgKyAnJDEnKSwgLyhpbWFnZS1zZXQpLywgV0VCS0lUICsgJyQxJyksIHZhbHVlLCAnJykgKyB2YWx1ZTtcbiAgICAvLyBiYWNrZ3JvdW5kLCBiYWNrZ3JvdW5kLWltYWdlXG5cbiAgICBjYXNlIDU0OTU6XG4gICAgY2FzZSAzOTU5OlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oaW1hZ2Utc2V0XFwoW15dKikvLCBXRUJLSVQgKyAnJDEnICsgJyRgJDEnKTtcbiAgICAvLyBqdXN0aWZ5LWNvbnRlbnRcblxuICAgIGNhc2UgNDk2ODpcbiAgICAgIHJldHVybiByZXBsYWNlKHJlcGxhY2UodmFsdWUsIC8oLis6KShmbGV4LSk/KC4qKS8sIFdFQktJVCArICdib3gtcGFjazokMycgKyBNUyArICdmbGV4LXBhY2s6JDMnKSwgL3MuKy1iW147XSsvLCAnanVzdGlmeScpICsgV0VCS0lUICsgdmFsdWUgKyB2YWx1ZTtcbiAgICAvLyAobWFyZ2lufHBhZGRpbmcpLWlubGluZS0oc3RhcnR8ZW5kKVxuXG4gICAgY2FzZSA0MDk1OlxuICAgIGNhc2UgMzU4MzpcbiAgICBjYXNlIDQwNjg6XG4gICAgY2FzZSAyNTMyOlxuICAgICAgcmV0dXJuIHJlcGxhY2UodmFsdWUsIC8oLispLWlubGluZSguKykvLCBXRUJLSVQgKyAnJDEkMicpICsgdmFsdWU7XG4gICAgLy8gKG1pbnxtYXgpPyh3aWR0aHxoZWlnaHR8aW5saW5lLXNpemV8YmxvY2stc2l6ZSlcblxuICAgIGNhc2UgODExNjpcbiAgICBjYXNlIDcwNTk6XG4gICAgY2FzZSA1NzUzOlxuICAgIGNhc2UgNTUzNTpcbiAgICBjYXNlIDU0NDU6XG4gICAgY2FzZSA1NzAxOlxuICAgIGNhc2UgNDkzMzpcbiAgICBjYXNlIDQ2Nzc6XG4gICAgY2FzZSA1NTMzOlxuICAgIGNhc2UgNTc4OTpcbiAgICBjYXNlIDUwMjE6XG4gICAgY2FzZSA0NzY1OlxuICAgICAgLy8gc3RyZXRjaCwgbWF4LWNvbnRlbnQsIG1pbi1jb250ZW50LCBmaWxsLWF2YWlsYWJsZVxuICAgICAgaWYgKHN0cmxlbih2YWx1ZSkgLSAxIC0gbGVuZ3RoID4gNikgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDEpKSB7XG4gICAgICAgIC8vIChtKWF4LWNvbnRlbnQsIChtKWluLWNvbnRlbnRcbiAgICAgICAgY2FzZSAxMDk6XG4gICAgICAgICAgLy8gLVxuICAgICAgICAgIGlmIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDQpICE9PSA0NSkgYnJlYWs7XG4gICAgICAgIC8vIChmKWlsbC1hdmFpbGFibGUsIChmKWl0LWNvbnRlbnRcblxuICAgICAgICBjYXNlIDEwMjpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKC4rKS0oW15dKykvLCAnJDEnICsgV0VCS0lUICsgJyQyLSQzJyArICckMScgKyBNT1ogKyAoY2hhcmF0KHZhbHVlLCBsZW5ndGggKyAzKSA9PSAxMDggPyAnJDMnIDogJyQyLSQzJykpICsgdmFsdWU7XG4gICAgICAgIC8vIChzKXRyZXRjaFxuXG4gICAgICAgIGNhc2UgMTE1OlxuICAgICAgICAgIHJldHVybiB+aW5kZXhvZih2YWx1ZSwgJ3N0cmV0Y2gnKSA/IHByZWZpeChyZXBsYWNlKHZhbHVlLCAnc3RyZXRjaCcsICdmaWxsLWF2YWlsYWJsZScpLCBsZW5ndGgpICsgdmFsdWUgOiB2YWx1ZTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIC8vIHBvc2l0aW9uOiBzdGlja3lcblxuICAgIGNhc2UgNDk0OTpcbiAgICAgIC8vIChzKXRpY2t5P1xuICAgICAgaWYgKGNoYXJhdCh2YWx1ZSwgbGVuZ3RoICsgMSkgIT09IDExNSkgYnJlYWs7XG4gICAgLy8gZGlzcGxheTogKGZsZXh8aW5saW5lLWZsZXgpXG5cbiAgICBjYXNlIDY0NDQ6XG4gICAgICBzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgc3RybGVuKHZhbHVlKSAtIDMgLSAofmluZGV4b2YodmFsdWUsICchaW1wb3J0YW50JykgJiYgMTApKSkge1xuICAgICAgICAvLyBzdGljKGspeVxuICAgICAgICBjYXNlIDEwNzpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgJzonLCAnOicgKyBXRUJLSVQpICsgdmFsdWU7XG4gICAgICAgIC8vIChpbmxpbmUtKT9mbChlKXhcblxuICAgICAgICBjYXNlIDEwMTpcbiAgICAgICAgICByZXR1cm4gcmVwbGFjZSh2YWx1ZSwgLyguKzopKFteOyFdKykoO3whLispPy8sICckMScgKyBXRUJLSVQgKyAoY2hhcmF0KHZhbHVlLCAxNCkgPT09IDQ1ID8gJ2lubGluZS0nIDogJycpICsgJ2JveCQzJyArICckMScgKyBXRUJLSVQgKyAnJDIkMycgKyAnJDEnICsgTVMgKyAnJDJib3gkMycpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGJyZWFrO1xuICAgIC8vIHdyaXRpbmctbW9kZVxuXG4gICAgY2FzZSA1OTM2OlxuICAgICAgc3dpdGNoIChjaGFyYXQodmFsdWUsIGxlbmd0aCArIDExKSkge1xuICAgICAgICAvLyB2ZXJ0aWNhbC1sKHIpXG4gICAgICAgIGNhc2UgMTE0OlxuICAgICAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgcmVwbGFjZSh2YWx1ZSwgL1tzdmhdXFx3Ky1bdGJscl17Mn0vLCAndGInKSArIHZhbHVlO1xuICAgICAgICAvLyB2ZXJ0aWNhbC1yKGwpXG5cbiAgICAgICAgY2FzZSAxMDg6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICd0Yi1ybCcpICsgdmFsdWU7XG4gICAgICAgIC8vIGhvcml6b250YWwoLSl0YlxuXG4gICAgICAgIGNhc2UgNDU6XG4gICAgICAgICAgcmV0dXJuIFdFQktJVCArIHZhbHVlICsgTVMgKyByZXBsYWNlKHZhbHVlLCAvW3N2aF1cXHcrLVt0YmxyXXsyfS8sICdscicpICsgdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBXRUJLSVQgKyB2YWx1ZSArIE1TICsgdmFsdWUgKyB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxudmFyIHByZWZpeGVyID0gZnVuY3Rpb24gcHJlZml4ZXIoZWxlbWVudCwgaW5kZXgsIGNoaWxkcmVuLCBjYWxsYmFjaykge1xuICBpZiAoZWxlbWVudC5sZW5ndGggPiAtMSkgaWYgKCFlbGVtZW50W1wicmV0dXJuXCJdKSBzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuICAgIGNhc2UgREVDTEFSQVRJT046XG4gICAgICBlbGVtZW50W1wicmV0dXJuXCJdID0gcHJlZml4KGVsZW1lbnQudmFsdWUsIGVsZW1lbnQubGVuZ3RoKTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBLRVlGUkFNRVM6XG4gICAgICByZXR1cm4gc2VyaWFsaXplKFtjb3B5KGVsZW1lbnQsIHtcbiAgICAgICAgdmFsdWU6IHJlcGxhY2UoZWxlbWVudC52YWx1ZSwgJ0AnLCAnQCcgKyBXRUJLSVQpXG4gICAgICB9KV0sIGNhbGxiYWNrKTtcblxuICAgIGNhc2UgUlVMRVNFVDpcbiAgICAgIGlmIChlbGVtZW50Lmxlbmd0aCkgcmV0dXJuIGNvbWJpbmUoZWxlbWVudC5wcm9wcywgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIHN3aXRjaCAobWF0Y2godmFsdWUsIC8oOjpwbGFjXFx3K3w6cmVhZC1cXHcrKS8pKSB7XG4gICAgICAgICAgLy8gOnJlYWQtKG9ubHl8d3JpdGUpXG4gICAgICAgICAgY2FzZSAnOnJlYWQtb25seSc6XG4gICAgICAgICAgY2FzZSAnOnJlYWQtd3JpdGUnOlxuICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7XG4gICAgICAgICAgICAgIHByb3BzOiBbcmVwbGFjZSh2YWx1ZSwgLzoocmVhZC1cXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSldLCBjYWxsYmFjayk7XG4gICAgICAgICAgLy8gOnBsYWNlaG9sZGVyXG5cbiAgICAgICAgICBjYXNlICc6OnBsYWNlaG9sZGVyJzpcbiAgICAgICAgICAgIHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXVxuICAgICAgICAgICAgfSksIGNvcHkoZWxlbWVudCwge1xuICAgICAgICAgICAgICBwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldXG4gICAgICAgICAgICB9KV0sIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH0pO1xuICB9XG59O1xuXG52YXIgZGVmYXVsdFN0eWxpc1BsdWdpbnMgPSBbcHJlZml4ZXJdO1xuXG52YXIgY3JlYXRlQ2FjaGUgPSBmdW5jdGlvbiBjcmVhdGVDYWNoZShvcHRpb25zKSB7XG4gIHZhciBrZXkgPSBvcHRpb25zLmtleTtcblxuICBpZiAoa2V5ID09PSAnY3NzJykge1xuICAgIHZhciBzc3JTdHlsZXMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKFwic3R5bGVbZGF0YS1lbW90aW9uXTpub3QoW2RhdGEtc10pXCIpOyAvLyBnZXQgU1NSZWQgc3R5bGVzIG91dCBvZiB0aGUgd2F5IG9mIFJlYWN0J3MgaHlkcmF0aW9uXG4gICAgLy8gZG9jdW1lbnQuaGVhZCBpcyBhIHNhZmUgcGxhY2UgdG8gbW92ZSB0aGVtIHRvKHRob3VnaCBub3RlIGRvY3VtZW50LmhlYWQgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBsYXN0IHBsYWNlIHRoZXkgd2lsbCBiZSlcbiAgICAvLyBub3RlIHRoaXMgdmVyeSB2ZXJ5IGludGVudGlvbmFsbHkgdGFyZ2V0cyBhbGwgc3R5bGUgZWxlbWVudHMgcmVnYXJkbGVzcyBvZiB0aGUga2V5IHRvIGVuc3VyZVxuICAgIC8vIHRoYXQgY3JlYXRpbmcgYSBjYWNoZSB3b3JrcyBpbnNpZGUgb2YgcmVuZGVyIG9mIGEgUmVhY3QgY29tcG9uZW50XG5cbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHNzclN0eWxlcywgZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgIC8vIHdlIHdhbnQgdG8gb25seSBtb3ZlIGVsZW1lbnRzIHdoaWNoIGhhdmUgYSBzcGFjZSBpbiB0aGUgZGF0YS1lbW90aW9uIGF0dHJpYnV0ZSB2YWx1ZVxuICAgICAgLy8gYmVjYXVzZSB0aGF0IGluZGljYXRlcyB0aGF0IGl0IGlzIGFuIEVtb3Rpb24gMTEgc2VydmVyLXNpZGUgcmVuZGVyZWQgc3R5bGUgZWxlbWVudHNcbiAgICAgIC8vIHdoaWxlIHdlIHdpbGwgYWxyZWFkeSBpZ25vcmUgRW1vdGlvbiAxMSBjbGllbnQtc2lkZSBpbnNlcnRlZCBzdHlsZXMgYmVjYXVzZSBvZiB0aGUgOm5vdChbZGF0YS1zXSkgcGFydCBpbiB0aGUgc2VsZWN0b3JcbiAgICAgIC8vIEVtb3Rpb24gMTAgY2xpZW50LXNpZGUgaW5zZXJ0ZWQgc3R5bGVzIGRpZCBub3QgaGF2ZSBkYXRhLXMgKGJ1dCBpbXBvcnRhbnRseSBkaWQgbm90IGhhdmUgYSBzcGFjZSBpbiB0aGVpciBkYXRhLWVtb3Rpb24gYXR0cmlidXRlcylcbiAgICAgIC8vIHNvIGNoZWNraW5nIGZvciB0aGUgc3BhY2UgZW5zdXJlcyB0aGF0IGxvYWRpbmcgRW1vdGlvbiAxMSBhZnRlciBFbW90aW9uIDEwIGhhcyBpbnNlcnRlZCBzb21lIHN0eWxlc1xuICAgICAgLy8gd2lsbCBub3QgcmVzdWx0IGluIHRoZSBFbW90aW9uIDEwIHN0eWxlcyBiZWluZyBkZXN0cm95ZWRcbiAgICAgIHZhciBkYXRhRW1vdGlvbkF0dHJpYnV0ZSA9IG5vZGUuZ2V0QXR0cmlidXRlKCdkYXRhLWVtb3Rpb24nKTtcblxuICAgICAgaWYgKGRhdGFFbW90aW9uQXR0cmlidXRlLmluZGV4T2YoJyAnKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKG5vZGUpO1xuICAgICAgbm9kZS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcycsICcnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHZhciBzdHlsaXNQbHVnaW5zID0gb3B0aW9ucy5zdHlsaXNQbHVnaW5zIHx8IGRlZmF1bHRTdHlsaXNQbHVnaW5zO1xuXG4gIHZhciBpbnNlcnRlZCA9IHt9O1xuICB2YXIgY29udGFpbmVyO1xuICB2YXIgbm9kZXNUb0h5ZHJhdGUgPSBbXTtcblxuICB7XG4gICAgY29udGFpbmVyID0gb3B0aW9ucy5jb250YWluZXIgfHwgZG9jdW1lbnQuaGVhZDtcbiAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKCAvLyB0aGlzIG1lYW5zIHdlIHdpbGwgaWdub3JlIGVsZW1lbnRzIHdoaWNoIGRvbid0IGhhdmUgYSBzcGFjZSBpbiB0aGVtIHdoaWNoXG4gICAgLy8gbWVhbnMgdGhhdCB0aGUgc3R5bGUgZWxlbWVudHMgd2UncmUgbG9va2luZyBhdCBhcmUgb25seSBFbW90aW9uIDExIHNlcnZlci1yZW5kZXJlZCBzdHlsZSBlbGVtZW50c1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJzdHlsZVtkYXRhLWVtb3Rpb25ePVxcXCJcIiArIGtleSArIFwiIFxcXCJdXCIpLCBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgdmFyIGF0dHJpYiA9IG5vZGUuZ2V0QXR0cmlidXRlKFwiZGF0YS1lbW90aW9uXCIpLnNwbGl0KCcgJyk7XG5cbiAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXR0cmliLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGluc2VydGVkW2F0dHJpYltpXV0gPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBub2Rlc1RvSHlkcmF0ZS5wdXNoKG5vZGUpO1xuICAgIH0pO1xuICB9XG5cbiAgdmFyIF9pbnNlcnQ7XG5cbiAgdmFyIG9tbmlwcmVzZW50UGx1Z2lucyA9IFtjb21wYXQsIHJlbW92ZUxhYmVsXTtcblxuICB7XG4gICAgdmFyIGN1cnJlbnRTaGVldDtcbiAgICB2YXIgZmluYWxpemluZ1BsdWdpbnMgPSBbc3RyaW5naWZ5LCBydWxlc2hlZXQoZnVuY3Rpb24gKHJ1bGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldC5pbnNlcnQocnVsZSk7XG4gICAgfSldO1xuICAgIHZhciBzZXJpYWxpemVyID0gbWlkZGxld2FyZShvbW5pcHJlc2VudFBsdWdpbnMuY29uY2F0KHN0eWxpc1BsdWdpbnMsIGZpbmFsaXppbmdQbHVnaW5zKSk7XG5cbiAgICB2YXIgc3R5bGlzID0gZnVuY3Rpb24gc3R5bGlzKHN0eWxlcykge1xuICAgICAgcmV0dXJuIHNlcmlhbGl6ZShjb21waWxlKHN0eWxlcyksIHNlcmlhbGl6ZXIpO1xuICAgIH07XG5cbiAgICBfaW5zZXJ0ID0gZnVuY3Rpb24gaW5zZXJ0KHNlbGVjdG9yLCBzZXJpYWxpemVkLCBzaGVldCwgc2hvdWxkQ2FjaGUpIHtcbiAgICAgIGN1cnJlbnRTaGVldCA9IHNoZWV0O1xuXG4gICAgICBzdHlsaXMoc2VsZWN0b3IgPyBzZWxlY3RvciArIFwie1wiICsgc2VyaWFsaXplZC5zdHlsZXMgKyBcIn1cIiA6IHNlcmlhbGl6ZWQuc3R5bGVzKTtcblxuICAgICAgaWYgKHNob3VsZENhY2hlKSB7XG4gICAgICAgIGNhY2hlLmluc2VydGVkW3NlcmlhbGl6ZWQubmFtZV0gPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICB2YXIgY2FjaGUgPSB7XG4gICAga2V5OiBrZXksXG4gICAgc2hlZXQ6IG5ldyBTdHlsZVNoZWV0KHtcbiAgICAgIGtleToga2V5LFxuICAgICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgICBub25jZTogb3B0aW9ucy5ub25jZSxcbiAgICAgIHNwZWVkeTogb3B0aW9ucy5zcGVlZHksXG4gICAgICBwcmVwZW5kOiBvcHRpb25zLnByZXBlbmQsXG4gICAgICBpbnNlcnRpb25Qb2ludDogb3B0aW9ucy5pbnNlcnRpb25Qb2ludFxuICAgIH0pLFxuICAgIG5vbmNlOiBvcHRpb25zLm5vbmNlLFxuICAgIGluc2VydGVkOiBpbnNlcnRlZCxcbiAgICByZWdpc3RlcmVkOiB7fSxcbiAgICBpbnNlcnQ6IF9pbnNlcnRcbiAgfTtcbiAgY2FjaGUuc2hlZXQuaHlkcmF0ZShub2Rlc1RvSHlkcmF0ZSk7XG4gIHJldHVybiBjYWNoZTtcbn07XG5cbmV4cG9ydCB7IGNyZWF0ZUNhY2hlIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCB7TVMsIE1PWiwgV0VCS0lULCBSVUxFU0VULCBLRVlGUkFNRVMsIERFQ0xBUkFUSU9OfSBmcm9tICcuL0VudW0uanMnXG5pbXBvcnQge21hdGNoLCBjaGFyYXQsIHN1YnN0ciwgc3RybGVuLCBzaXplb2YsIHJlcGxhY2UsIGNvbWJpbmV9IGZyb20gJy4vVXRpbGl0eS5qcydcbmltcG9ydCB7Y29weSwgdG9rZW5pemV9IGZyb20gJy4vVG9rZW5pemVyLmpzJ1xuaW1wb3J0IHtzZXJpYWxpemV9IGZyb20gJy4vU2VyaWFsaXplci5qcydcbmltcG9ydCB7cHJlZml4fSBmcm9tICcuL1ByZWZpeGVyLmpzJ1xuXG4vKipcbiAqIEBwYXJhbSB7ZnVuY3Rpb25bXX0gY29sbGVjdGlvblxuICogQHJldHVybiB7ZnVuY3Rpb259XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtaWRkbGV3YXJlIChjb2xsZWN0aW9uKSB7XG5cdHZhciBsZW5ndGggPSBzaXplb2YoY29sbGVjdGlvbilcblxuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4LCBjaGlsZHJlbiwgY2FsbGJhY2spIHtcblx0XHR2YXIgb3V0cHV0ID0gJydcblxuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspXG5cdFx0XHRvdXRwdXQgKz0gY29sbGVjdGlvbltpXShlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB8fCAnJ1xuXG5cdFx0cmV0dXJuIG91dHB1dFxuXHR9XG59XG5cbi8qKlxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqIEByZXR1cm4ge2Z1bmN0aW9ufVxuICovXG5leHBvcnQgZnVuY3Rpb24gcnVsZXNoZWV0IChjYWxsYmFjaykge1xuXHRyZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRpZiAoIWVsZW1lbnQucm9vdClcblx0XHRcdGlmIChlbGVtZW50ID0gZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRcdGNhbGxiYWNrKGVsZW1lbnQpXG5cdH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge29iamVjdH0gZWxlbWVudFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4XG4gKiBAcGFyYW0ge29iamVjdFtdfSBjaGlsZHJlblxuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2tcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZWZpeGVyIChlbGVtZW50LCBpbmRleCwgY2hpbGRyZW4sIGNhbGxiYWNrKSB7XG5cdGlmIChlbGVtZW50Lmxlbmd0aCA+IC0xKVxuXHRcdGlmICghZWxlbWVudC5yZXR1cm4pXG5cdFx0XHRzd2l0Y2ggKGVsZW1lbnQudHlwZSkge1xuXHRcdFx0XHRjYXNlIERFQ0xBUkFUSU9OOiBlbGVtZW50LnJldHVybiA9IHByZWZpeChlbGVtZW50LnZhbHVlLCBlbGVtZW50Lmxlbmd0aCwgY2hpbGRyZW4pXG5cdFx0XHRcdFx0cmV0dXJuXG5cdFx0XHRcdGNhc2UgS0VZRlJBTUVTOlxuXHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW2NvcHkoZWxlbWVudCwge3ZhbHVlOiByZXBsYWNlKGVsZW1lbnQudmFsdWUsICdAJywgJ0AnICsgV0VCS0lUKX0pXSwgY2FsbGJhY2spXG5cdFx0XHRcdGNhc2UgUlVMRVNFVDpcblx0XHRcdFx0XHRpZiAoZWxlbWVudC5sZW5ndGgpXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29tYmluZShlbGVtZW50LnByb3BzLCBmdW5jdGlvbiAodmFsdWUpIHtcblx0XHRcdFx0XHRcdFx0c3dpdGNoIChtYXRjaCh2YWx1ZSwgLyg6OnBsYWNcXHcrfDpyZWFkLVxcdyspLykpIHtcblx0XHRcdFx0XHRcdFx0XHQvLyA6cmVhZC0ob25seXx3cml0ZSlcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6cmVhZC1vbmx5JzogY2FzZSAnOnJlYWQtd3JpdGUnOlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNlcmlhbGl6ZShbY29weShlbGVtZW50LCB7cHJvcHM6IFtyZXBsYWNlKHZhbHVlLCAvOihyZWFkLVxcdyspLywgJzonICsgTU9aICsgJyQxJyldfSldLCBjYWxsYmFjaylcblx0XHRcdFx0XHRcdFx0XHQvLyA6cGxhY2Vob2xkZXJcblx0XHRcdFx0XHRcdFx0XHRjYXNlICc6OnBsYWNlaG9sZGVyJzpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzZXJpYWxpemUoW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIFdFQktJVCArICdpbnB1dC0kMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sICc6JyArIE1PWiArICckMScpXX0pLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjb3B5KGVsZW1lbnQsIHtwcm9wczogW3JlcGxhY2UodmFsdWUsIC86KHBsYWNcXHcrKS8sIE1TICsgJ2lucHV0LSQxJyldfSlcblx0XHRcdFx0XHRcdFx0XHRcdF0sIGNhbGxiYWNrKVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0cmV0dXJuICcnXG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0fVxufVxuXG4vKipcbiAqIEBwYXJhbSB7b2JqZWN0fSBlbGVtZW50XG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXhcbiAqIEBwYXJhbSB7b2JqZWN0W119IGNoaWxkcmVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBuYW1lc3BhY2UgKGVsZW1lbnQpIHtcblx0c3dpdGNoIChlbGVtZW50LnR5cGUpIHtcblx0XHRjYXNlIFJVTEVTRVQ6XG5cdFx0XHRlbGVtZW50LnByb3BzID0gZWxlbWVudC5wcm9wcy5tYXAoZnVuY3Rpb24gKHZhbHVlKSB7XG5cdFx0XHRcdHJldHVybiBjb21iaW5lKHRva2VuaXplKHZhbHVlKSwgZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgY2hpbGRyZW4pIHtcblx0XHRcdFx0XHRzd2l0Y2ggKGNoYXJhdCh2YWx1ZSwgMCkpIHtcblx0XHRcdFx0XHRcdC8vIFxcZlxuXHRcdFx0XHRcdFx0Y2FzZSAxMjpcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHN1YnN0cih2YWx1ZSwgMSwgc3RybGVuKHZhbHVlKSlcblx0XHRcdFx0XHRcdC8vIFxcMCAoICsgPiB+XG5cdFx0XHRcdFx0XHRjYXNlIDA6IGNhc2UgNDA6IGNhc2UgNDM6IGNhc2UgNjI6IGNhc2UgMTI2OlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWVcblx0XHRcdFx0XHRcdC8vIDpcblx0XHRcdFx0XHRcdGNhc2UgNTg6XG5cdFx0XHRcdFx0XHRcdGlmIChjaGlsZHJlblsrK2luZGV4XSA9PT0gJ2dsb2JhbCcpXG5cdFx0XHRcdFx0XHRcdFx0Y2hpbGRyZW5baW5kZXhdID0gJycsIGNoaWxkcmVuWysraW5kZXhdID0gJ1xcZicgKyBzdWJzdHIoY2hpbGRyZW5baW5kZXhdLCBpbmRleCA9IDEsIC0xKVxuXHRcdFx0XHRcdFx0Ly8gXFxzXG5cdFx0XHRcdFx0XHRjYXNlIDMyOlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gaW5kZXggPT09IDEgPyAnJyA6IHZhbHVlXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRzd2l0Y2ggKGluZGV4KSB7XG5cdFx0XHRcdFx0XHRcdFx0Y2FzZSAwOiBlbGVtZW50ID0gdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBzaXplb2YoY2hpbGRyZW4pID4gMSA/ICcnIDogdmFsdWVcblx0XHRcdFx0XHRcdFx0XHRjYXNlIGluZGV4ID0gc2l6ZW9mKGNoaWxkcmVuKSAtIDE6IGNhc2UgMjpcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBpbmRleCA9PT0gMiA/IHZhbHVlICsgZWxlbWVudCArIGVsZW1lbnQgOiB2YWx1ZSArIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pXG5cdFx0XHR9KVxuXHR9XG59XG4iLCJ2YXIgdW5pdGxlc3NLZXlzID0ge1xuICBhbmltYXRpb25JdGVyYXRpb25Db3VudDogMSxcbiAgYXNwZWN0UmF0aW86IDEsXG4gIGJvcmRlckltYWdlT3V0c2V0OiAxLFxuICBib3JkZXJJbWFnZVNsaWNlOiAxLFxuICBib3JkZXJJbWFnZVdpZHRoOiAxLFxuICBib3hGbGV4OiAxLFxuICBib3hGbGV4R3JvdXA6IDEsXG4gIGJveE9yZGluYWxHcm91cDogMSxcbiAgY29sdW1uQ291bnQ6IDEsXG4gIGNvbHVtbnM6IDEsXG4gIGZsZXg6IDEsXG4gIGZsZXhHcm93OiAxLFxuICBmbGV4UG9zaXRpdmU6IDEsXG4gIGZsZXhTaHJpbms6IDEsXG4gIGZsZXhOZWdhdGl2ZTogMSxcbiAgZmxleE9yZGVyOiAxLFxuICBncmlkUm93OiAxLFxuICBncmlkUm93RW5kOiAxLFxuICBncmlkUm93U3BhbjogMSxcbiAgZ3JpZFJvd1N0YXJ0OiAxLFxuICBncmlkQ29sdW1uOiAxLFxuICBncmlkQ29sdW1uRW5kOiAxLFxuICBncmlkQ29sdW1uU3BhbjogMSxcbiAgZ3JpZENvbHVtblN0YXJ0OiAxLFxuICBtc0dyaWRSb3c6IDEsXG4gIG1zR3JpZFJvd1NwYW46IDEsXG4gIG1zR3JpZENvbHVtbjogMSxcbiAgbXNHcmlkQ29sdW1uU3BhbjogMSxcbiAgZm9udFdlaWdodDogMSxcbiAgbGluZUhlaWdodDogMSxcbiAgb3BhY2l0eTogMSxcbiAgb3JkZXI6IDEsXG4gIG9ycGhhbnM6IDEsXG4gIHNjYWxlOiAxLFxuICB0YWJTaXplOiAxLFxuICB3aWRvd3M6IDEsXG4gIHpJbmRleDogMSxcbiAgem9vbTogMSxcbiAgV2Via2l0TGluZUNsYW1wOiAxLFxuICAvLyBTVkctcmVsYXRlZCBwcm9wZXJ0aWVzXG4gIGZpbGxPcGFjaXR5OiAxLFxuICBmbG9vZE9wYWNpdHk6IDEsXG4gIHN0b3BPcGFjaXR5OiAxLFxuICBzdHJva2VEYXNoYXJyYXk6IDEsXG4gIHN0cm9rZURhc2hvZmZzZXQ6IDEsXG4gIHN0cm9rZU1pdGVybGltaXQ6IDEsXG4gIHN0cm9rZU9wYWNpdHk6IDEsXG4gIHN0cm9rZVdpZHRoOiAxXG59O1xuXG5leHBvcnQgeyB1bml0bGVzc0tleXMgYXMgZGVmYXVsdCB9O1xuIiwiZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICB2YXIgY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICByZXR1cm4gZnVuY3Rpb24gKGFyZykge1xuICAgIGlmIChjYWNoZVthcmddID09PSB1bmRlZmluZWQpIGNhY2hlW2FyZ10gPSBmbihhcmcpO1xuICAgIHJldHVybiBjYWNoZVthcmddO1xuICB9O1xufVxuXG5leHBvcnQgeyBtZW1vaXplIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBoYXNoU3RyaW5nIGZyb20gJ0BlbW90aW9uL2hhc2gnO1xuaW1wb3J0IHVuaXRsZXNzIGZyb20gJ0BlbW90aW9uL3VuaXRsZXNzJztcbmltcG9ydCBtZW1vaXplIGZyb20gJ0BlbW90aW9uL21lbW9pemUnO1xuXG52YXIgaXNEZXZlbG9wbWVudCA9IGZhbHNlO1xuXG52YXIgaHlwaGVuYXRlUmVnZXggPSAvW0EtWl18Xm1zL2c7XG52YXIgYW5pbWF0aW9uUmVnZXggPSAvX0VNT18oW15fXSs/KV8oW15dKj8pX0VNT18vZztcblxudmFyIGlzQ3VzdG9tUHJvcGVydHkgPSBmdW5jdGlvbiBpc0N1c3RvbVByb3BlcnR5KHByb3BlcnR5KSB7XG4gIHJldHVybiBwcm9wZXJ0eS5jaGFyQ29kZUF0KDEpID09PSA0NTtcbn07XG5cbnZhciBpc1Byb2Nlc3NhYmxlVmFsdWUgPSBmdW5jdGlvbiBpc1Byb2Nlc3NhYmxlVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgdHlwZW9mIHZhbHVlICE9PSAnYm9vbGVhbic7XG59O1xuXG52YXIgcHJvY2Vzc1N0eWxlTmFtZSA9IC8qICNfX1BVUkVfXyAqL21lbW9pemUoZnVuY3Rpb24gKHN0eWxlTmFtZSkge1xuICByZXR1cm4gaXNDdXN0b21Qcm9wZXJ0eShzdHlsZU5hbWUpID8gc3R5bGVOYW1lIDogc3R5bGVOYW1lLnJlcGxhY2UoaHlwaGVuYXRlUmVnZXgsICctJCYnKS50b0xvd2VyQ2FzZSgpO1xufSk7XG5cbnZhciBwcm9jZXNzU3R5bGVWYWx1ZSA9IGZ1bmN0aW9uIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWUpIHtcbiAgc3dpdGNoIChrZXkpIHtcbiAgICBjYXNlICdhbmltYXRpb24nOlxuICAgIGNhc2UgJ2FuaW1hdGlvbk5hbWUnOlxuICAgICAge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKGFuaW1hdGlvblJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gsIHAxLCBwMikge1xuICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICBuYW1lOiBwMSxcbiAgICAgICAgICAgICAgc3R5bGVzOiBwMixcbiAgICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmV0dXJuIHAxO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICBpZiAodW5pdGxlc3Nba2V5XSAhPT0gMSAmJiAhaXNDdXN0b21Qcm9wZXJ0eShrZXkpICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IDApIHtcbiAgICByZXR1cm4gdmFsdWUgKyAncHgnO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcblxudmFyIG5vQ29tcG9uZW50U2VsZWN0b3JNZXNzYWdlID0gJ0NvbXBvbmVudCBzZWxlY3RvcnMgY2FuIG9ubHkgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoICcgKyAnQGVtb3Rpb24vYmFiZWwtcGx1Z2luLCB0aGUgc3djIEVtb3Rpb24gcGx1Z2luLCBvciBhbm90aGVyIEVtb3Rpb24tYXdhcmUgJyArICdjb21waWxlciB0cmFuc2Zvcm0uJztcblxuZnVuY3Rpb24gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbikge1xuICBpZiAoaW50ZXJwb2xhdGlvbiA9PSBudWxsKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgdmFyIGNvbXBvbmVudFNlbGVjdG9yID0gaW50ZXJwb2xhdGlvbjtcblxuICBpZiAoY29tcG9uZW50U2VsZWN0b3IuX19lbW90aW9uX3N0eWxlcyAhPT0gdW5kZWZpbmVkKSB7XG5cbiAgICByZXR1cm4gY29tcG9uZW50U2VsZWN0b3I7XG4gIH1cblxuICBzd2l0Y2ggKHR5cGVvZiBpbnRlcnBvbGF0aW9uKSB7XG4gICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICAgIH1cblxuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICB7XG4gICAgICAgIHZhciBrZXlmcmFtZXMgPSBpbnRlcnBvbGF0aW9uO1xuXG4gICAgICAgIGlmIChrZXlmcmFtZXMuYW5pbSA9PT0gMSkge1xuICAgICAgICAgIGN1cnNvciA9IHtcbiAgICAgICAgICAgIG5hbWU6IGtleWZyYW1lcy5uYW1lLFxuICAgICAgICAgICAgc3R5bGVzOiBrZXlmcmFtZXMuc3R5bGVzLFxuICAgICAgICAgICAgbmV4dDogY3Vyc29yXG4gICAgICAgICAgfTtcbiAgICAgICAgICByZXR1cm4ga2V5ZnJhbWVzLm5hbWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2VyaWFsaXplZFN0eWxlcyA9IGludGVycG9sYXRpb247XG5cbiAgICAgICAgaWYgKHNlcmlhbGl6ZWRTdHlsZXMuc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YXIgbmV4dCA9IHNlcmlhbGl6ZWRTdHlsZXMubmV4dDtcblxuICAgICAgICAgIGlmIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIC8vIG5vdCB0aGUgbW9zdCBlZmZpY2llbnQgdGhpbmcgZXZlciBidXQgdGhpcyBpcyBhIHByZXR0eSByYXJlIGNhc2VcbiAgICAgICAgICAgIC8vIGFuZCB0aGVyZSB3aWxsIGJlIHZlcnkgZmV3IGl0ZXJhdGlvbnMgb2YgdGhpcyBnZW5lcmFsbHlcbiAgICAgICAgICAgIHdoaWxlIChuZXh0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY3Vyc29yID0ge1xuICAgICAgICAgICAgICAgIG5hbWU6IG5leHQubmFtZSxcbiAgICAgICAgICAgICAgICBzdHlsZXM6IG5leHQuc3R5bGVzLFxuICAgICAgICAgICAgICAgIG5leHQ6IGN1cnNvclxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBuZXh0ID0gbmV4dC5uZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBzdHlsZXMgPSBzZXJpYWxpemVkU3R5bGVzLnN0eWxlcyArIFwiO1wiO1xuICAgICAgICAgIHJldHVybiBzdHlsZXM7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY3JlYXRlU3RyaW5nRnJvbU9iamVjdChtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgaW50ZXJwb2xhdGlvbik7XG4gICAgICB9XG5cbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgICB7XG4gICAgICAgIGlmIChtZXJnZWRQcm9wcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdmFyIHByZXZpb3VzQ3Vyc29yID0gY3Vyc29yO1xuICAgICAgICAgIHZhciByZXN1bHQgPSBpbnRlcnBvbGF0aW9uKG1lcmdlZFByb3BzKTtcbiAgICAgICAgICBjdXJzb3IgPSBwcmV2aW91c0N1cnNvcjtcbiAgICAgICAgICByZXR1cm4gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgcmVzdWx0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICB9IC8vIGZpbmFsaXplIHN0cmluZyB2YWx1ZXMgKHJlZ3VsYXIgc3RyaW5ncyBhbmQgZnVuY3Rpb25zIGludGVycG9sYXRlZCBpbnRvIGNzcyBjYWxscylcblxuXG4gIHZhciBhc1N0cmluZyA9IGludGVycG9sYXRpb247XG5cbiAgaWYgKHJlZ2lzdGVyZWQgPT0gbnVsbCkge1xuICAgIHJldHVybiBhc1N0cmluZztcbiAgfVxuXG4gIHZhciBjYWNoZWQgPSByZWdpc3RlcmVkW2FzU3RyaW5nXTtcbiAgcmV0dXJuIGNhY2hlZCAhPT0gdW5kZWZpbmVkID8gY2FjaGVkIDogYXNTdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVN0cmluZ0Zyb21PYmplY3QobWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIG9iaikge1xuICB2YXIgc3RyaW5nID0gJyc7XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqKSkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2JqLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzdHJpbmcgKz0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgb2JqW2ldKSArIFwiO1wiO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICB2YXIgdmFsdWUgPSBvYmpba2V5XTtcblxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFyIGFzU3RyaW5nID0gdmFsdWU7XG5cbiAgICAgICAgaWYgKHJlZ2lzdGVyZWQgIT0gbnVsbCAmJiByZWdpc3RlcmVkW2FzU3RyaW5nXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc3RyaW5nICs9IGtleSArIFwie1wiICsgcmVnaXN0ZXJlZFthc1N0cmluZ10gKyBcIn1cIjtcbiAgICAgICAgfSBlbHNlIGlmIChpc1Byb2Nlc3NhYmxlVmFsdWUoYXNTdHJpbmcpKSB7XG4gICAgICAgICAgc3RyaW5nICs9IHByb2Nlc3NTdHlsZU5hbWUoa2V5KSArIFwiOlwiICsgcHJvY2Vzc1N0eWxlVmFsdWUoa2V5LCBhc1N0cmluZykgKyBcIjtcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ05PX0NPTVBPTkVOVF9TRUxFQ1RPUicgJiYgaXNEZXZlbG9wbWVudCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihub0NvbXBvbmVudFNlbGVjdG9yTWVzc2FnZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlWzBdID09PSAnc3RyaW5nJyAmJiAocmVnaXN0ZXJlZCA9PSBudWxsIHx8IHJlZ2lzdGVyZWRbdmFsdWVbMF1dID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IHZhbHVlLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgaWYgKGlzUHJvY2Vzc2FibGVWYWx1ZSh2YWx1ZVtfaV0pKSB7XG4gICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIHByb2Nlc3NTdHlsZVZhbHVlKGtleSwgdmFsdWVbX2ldKSArIFwiO1wiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgaW50ZXJwb2xhdGVkID0gaGFuZGxlSW50ZXJwb2xhdGlvbihtZXJnZWRQcm9wcywgcmVnaXN0ZXJlZCwgdmFsdWUpO1xuXG4gICAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ2FuaW1hdGlvbic6XG4gICAgICAgICAgICBjYXNlICdhbmltYXRpb25OYW1lJzpcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBwcm9jZXNzU3R5bGVOYW1lKGtleSkgKyBcIjpcIiArIGludGVycG9sYXRlZCArIFwiO1wiO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHtcblxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBrZXkgKyBcIntcIiArIGludGVycG9sYXRlZCArIFwifVwiO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHN0cmluZztcbn1cblxudmFyIGxhYmVsUGF0dGVybiA9IC9sYWJlbDpcXHMqKFteXFxzO3tdKylcXHMqKDt8JCkvZzsgLy8gdGhpcyBpcyB0aGUgY3Vyc29yIGZvciBrZXlmcmFtZXNcbi8vIGtleWZyYW1lcyBhcmUgc3RvcmVkIG9uIHRoZSBTZXJpYWxpemVkU3R5bGVzIG9iamVjdCBhcyBhIGxpbmtlZCBsaXN0XG5cbnZhciBjdXJzb3I7XG5mdW5jdGlvbiBzZXJpYWxpemVTdHlsZXMoYXJncywgcmVnaXN0ZXJlZCwgbWVyZ2VkUHJvcHMpIHtcbiAgaWYgKGFyZ3MubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmdzWzBdID09PSAnb2JqZWN0JyAmJiBhcmdzWzBdICE9PSBudWxsICYmIGFyZ3NbMF0uc3R5bGVzICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYXJnc1swXTtcbiAgfVxuXG4gIHZhciBzdHJpbmdNb2RlID0gdHJ1ZTtcbiAgdmFyIHN0eWxlcyA9ICcnO1xuICBjdXJzb3IgPSB1bmRlZmluZWQ7XG4gIHZhciBzdHJpbmdzID0gYXJnc1swXTtcblxuICBpZiAoc3RyaW5ncyA9PSBudWxsIHx8IHN0cmluZ3MucmF3ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdHJpbmdNb2RlID0gZmFsc2U7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIHN0cmluZ3MpO1xuICB9IGVsc2Uge1xuICAgIHZhciBhc1RlbXBsYXRlU3RyaW5nc0FyciA9IHN0cmluZ3M7XG5cbiAgICBzdHlsZXMgKz0gYXNUZW1wbGF0ZVN0cmluZ3NBcnJbMF07XG4gIH0gLy8gd2Ugc3RhcnQgYXQgMSBzaW5jZSB3ZSd2ZSBhbHJlYWR5IGhhbmRsZWQgdGhlIGZpcnN0IGFyZ1xuXG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgc3R5bGVzICs9IGhhbmRsZUludGVycG9sYXRpb24obWVyZ2VkUHJvcHMsIHJlZ2lzdGVyZWQsIGFyZ3NbaV0pO1xuXG4gICAgaWYgKHN0cmluZ01vZGUpIHtcbiAgICAgIHZhciB0ZW1wbGF0ZVN0cmluZ3NBcnIgPSBzdHJpbmdzO1xuXG4gICAgICBzdHlsZXMgKz0gdGVtcGxhdGVTdHJpbmdzQXJyW2ldO1xuICAgIH1cbiAgfSAvLyB1c2luZyBhIGdsb2JhbCByZWdleCB3aXRoIC5leGVjIGlzIHN0YXRlZnVsIHNvIGxhc3RJbmRleCBoYXMgdG8gYmUgcmVzZXQgZWFjaCB0aW1lXG5cblxuICBsYWJlbFBhdHRlcm4ubGFzdEluZGV4ID0gMDtcbiAgdmFyIGlkZW50aWZpZXJOYW1lID0gJyc7XG4gIHZhciBtYXRjaDsgLy8gaHR0cHM6Ly9lc2JlbmNoLmNvbS9iZW5jaC81YjgwOWMyY2YyOTQ5ODAwYTBmNjFmYjVcblxuICB3aGlsZSAoKG1hdGNoID0gbGFiZWxQYXR0ZXJuLmV4ZWMoc3R5bGVzKSkgIT09IG51bGwpIHtcbiAgICBpZGVudGlmaWVyTmFtZSArPSAnLScgKyBtYXRjaFsxXTtcbiAgfVxuXG4gIHZhciBuYW1lID0gaGFzaFN0cmluZyhzdHlsZXMpICsgaWRlbnRpZmllck5hbWU7XG5cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBuYW1lLFxuICAgIHN0eWxlczogc3R5bGVzLFxuICAgIG5leHQ6IGN1cnNvclxuICB9O1xufVxuXG5leHBvcnQgeyBzZXJpYWxpemVTdHlsZXMgfTtcbiIsIi8qIGVzbGludC1kaXNhYmxlICovXG4vLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vZ2FyeWNvdXJ0L211cm11cmhhc2gtanNcbi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9hYXBwbGVieS9zbWhhc2hlci9ibG9iLzYxYTA1MzBmMjgyNzdmMmU4NTBiZmMzOTYwMGNlNjFkMDJiNTE4ZGUvc3JjL011cm11ckhhc2gyLmNwcCNMMzctTDg2XG5mdW5jdGlvbiBtdXJtdXIyKHN0cikge1xuICAvLyAnbScgYW5kICdyJyBhcmUgbWl4aW5nIGNvbnN0YW50cyBnZW5lcmF0ZWQgb2ZmbGluZS5cbiAgLy8gVGhleSdyZSBub3QgcmVhbGx5ICdtYWdpYycsIHRoZXkganVzdCBoYXBwZW4gdG8gd29yayB3ZWxsLlxuICAvLyBjb25zdCBtID0gMHg1YmQxZTk5NTtcbiAgLy8gY29uc3QgciA9IDI0O1xuICAvLyBJbml0aWFsaXplIHRoZSBoYXNoXG4gIHZhciBoID0gMDsgLy8gTWl4IDQgYnl0ZXMgYXQgYSB0aW1lIGludG8gdGhlIGhhc2hcblxuICB2YXIgayxcbiAgICAgIGkgPSAwLFxuICAgICAgbGVuID0gc3RyLmxlbmd0aDtcblxuICBmb3IgKDsgbGVuID49IDQ7ICsraSwgbGVuIC09IDQpIHtcbiAgICBrID0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmIHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCA4IHwgKHN0ci5jaGFyQ29kZUF0KCsraSkgJiAweGZmKSA8PCAxNiB8IChzdHIuY2hhckNvZGVBdCgrK2kpICYgMHhmZikgPDwgMjQ7XG4gICAgayA9XG4gICAgLyogTWF0aC5pbXVsKGssIG0pOiAqL1xuICAgIChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGsgPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNik7XG4gICAgayBePVxuICAgIC8qIGsgPj4+IHI6ICovXG4gICAgayA+Pj4gMjQ7XG4gICAgaCA9XG4gICAgLyogTWF0aC5pbXVsKGssIG0pOiAqL1xuICAgIChrICYgMHhmZmZmKSAqIDB4NWJkMWU5OTUgKyAoKGsgPj4+IDE2KSAqIDB4ZTk5NSA8PCAxNikgXlxuICAgIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICB9IC8vIEhhbmRsZSB0aGUgbGFzdCBmZXcgYnl0ZXMgb2YgdGhlIGlucHV0IGFycmF5XG5cblxuICBzd2l0Y2ggKGxlbikge1xuICAgIGNhc2UgMzpcbiAgICAgIGggXj0gKHN0ci5jaGFyQ29kZUF0KGkgKyAyKSAmIDB4ZmYpIDw8IDE2O1xuXG4gICAgY2FzZSAyOlxuICAgICAgaCBePSAoc3RyLmNoYXJDb2RlQXQoaSArIDEpICYgMHhmZikgPDwgODtcblxuICAgIGNhc2UgMTpcbiAgICAgIGggXj0gc3RyLmNoYXJDb2RlQXQoaSkgJiAweGZmO1xuICAgICAgaCA9XG4gICAgICAvKiBNYXRoLmltdWwoaCwgbSk6ICovXG4gICAgICAoaCAmIDB4ZmZmZikgKiAweDViZDFlOTk1ICsgKChoID4+PiAxNikgKiAweGU5OTUgPDwgMTYpO1xuICB9IC8vIERvIGEgZmV3IGZpbmFsIG1peGVzIG9mIHRoZSBoYXNoIHRvIGVuc3VyZSB0aGUgbGFzdCBmZXdcbiAgLy8gYnl0ZXMgYXJlIHdlbGwtaW5jb3Jwb3JhdGVkLlxuXG5cbiAgaCBePSBoID4+PiAxMztcbiAgaCA9XG4gIC8qIE1hdGguaW11bChoLCBtKTogKi9cbiAgKGggJiAweGZmZmYpICogMHg1YmQxZTk5NSArICgoaCA+Pj4gMTYpICogMHhlOTk1IDw8IDE2KTtcbiAgcmV0dXJuICgoaCBeIGggPj4+IDE1KSA+Pj4gMCkudG9TdHJpbmcoMzYpO1xufVxuXG5leHBvcnQgeyBtdXJtdXIyIGFzIGRlZmF1bHQgfTtcbiIsInZhciBpc0Jyb3dzZXIgPSB0cnVlO1xuXG5mdW5jdGlvbiBnZXRSZWdpc3RlcmVkU3R5bGVzKHJlZ2lzdGVyZWQsIHJlZ2lzdGVyZWRTdHlsZXMsIGNsYXNzTmFtZXMpIHtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9ICcnO1xuICBjbGFzc05hbWVzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoY2xhc3NOYW1lKSB7XG4gICAgaWYgKHJlZ2lzdGVyZWRbY2xhc3NOYW1lXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWdpc3RlcmVkU3R5bGVzLnB1c2gocmVnaXN0ZXJlZFtjbGFzc05hbWVdICsgXCI7XCIpO1xuICAgIH0gZWxzZSBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICByYXdDbGFzc05hbWUgKz0gY2xhc3NOYW1lICsgXCIgXCI7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJhd0NsYXNzTmFtZTtcbn1cbnZhciByZWdpc3RlclN0eWxlcyA9IGZ1bmN0aW9uIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZykge1xuICB2YXIgY2xhc3NOYW1lID0gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG5cbiAgaWYgKCAvLyB3ZSBvbmx5IG5lZWQgdG8gYWRkIHRoZSBzdHlsZXMgdG8gdGhlIHJlZ2lzdGVyZWQgY2FjaGUgaWYgdGhlXG4gIC8vIGNsYXNzIG5hbWUgY291bGQgYmUgdXNlZCBmdXJ0aGVyIGRvd25cbiAgLy8gdGhlIHRyZWUgYnV0IGlmIGl0J3MgYSBzdHJpbmcgdGFnLCB3ZSBrbm93IGl0IHdvbid0XG4gIC8vIHNvIHdlIGRvbid0IGhhdmUgdG8gYWRkIGl0IHRvIHJlZ2lzdGVyZWQgY2FjaGUuXG4gIC8vIHRoaXMgaW1wcm92ZXMgbWVtb3J5IHVzYWdlIHNpbmNlIHdlIGNhbiBhdm9pZCBzdG9yaW5nIHRoZSB3aG9sZSBzdHlsZSBzdHJpbmdcbiAgKGlzU3RyaW5nVGFnID09PSBmYWxzZSB8fCAvLyB3ZSBuZWVkIHRvIGFsd2F5cyBzdG9yZSBpdCBpZiB3ZSdyZSBpbiBjb21wYXQgbW9kZSBhbmRcbiAgLy8gaW4gbm9kZSBzaW5jZSBlbW90aW9uLXNlcnZlciByZWxpZXMgb24gd2hldGhlciBhIHN0eWxlIGlzIGluXG4gIC8vIHRoZSByZWdpc3RlcmVkIGNhY2hlIHRvIGtub3cgd2hldGhlciBhIHN0eWxlIGlzIGdsb2JhbCBvciBub3RcbiAgLy8gYWxzbywgbm90ZSB0aGF0IHRoaXMgY2hlY2sgd2lsbCBiZSBkZWFkIGNvZGUgZWxpbWluYXRlZCBpbiB0aGUgYnJvd3NlclxuICBpc0Jyb3dzZXIgPT09IGZhbHNlICkgJiYgY2FjaGUucmVnaXN0ZXJlZFtjbGFzc05hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICBjYWNoZS5yZWdpc3RlcmVkW2NsYXNzTmFtZV0gPSBzZXJpYWxpemVkLnN0eWxlcztcbiAgfVxufTtcbnZhciBpbnNlcnRTdHlsZXMgPSBmdW5jdGlvbiBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGlzU3RyaW5nVGFnKSB7XG4gIHJlZ2lzdGVyU3R5bGVzKGNhY2hlLCBzZXJpYWxpemVkLCBpc1N0cmluZ1RhZyk7XG4gIHZhciBjbGFzc05hbWUgPSBjYWNoZS5rZXkgKyBcIi1cIiArIHNlcmlhbGl6ZWQubmFtZTtcblxuICBpZiAoY2FjaGUuaW5zZXJ0ZWRbc2VyaWFsaXplZC5uYW1lXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdmFyIGN1cnJlbnQgPSBzZXJpYWxpemVkO1xuXG4gICAgZG8ge1xuICAgICAgY2FjaGUuaW5zZXJ0KHNlcmlhbGl6ZWQgPT09IGN1cnJlbnQgPyBcIi5cIiArIGNsYXNzTmFtZSA6ICcnLCBjdXJyZW50LCBjYWNoZS5zaGVldCwgdHJ1ZSk7XG5cbiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7XG4gICAgfSB3aGlsZSAoY3VycmVudCAhPT0gdW5kZWZpbmVkKTtcbiAgfVxufTtcblxuZXhwb3J0IHsgZ2V0UmVnaXN0ZXJlZFN0eWxlcywgaW5zZXJ0U3R5bGVzLCByZWdpc3RlclN0eWxlcyB9O1xuIiwiaW1wb3J0IGNyZWF0ZUNhY2hlIGZyb20gJ0BlbW90aW9uL2NhY2hlJztcbmltcG9ydCB7IHNlcmlhbGl6ZVN0eWxlcyB9IGZyb20gJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgeyBnZXRSZWdpc3RlcmVkU3R5bGVzLCBpbnNlcnRTdHlsZXMgfSBmcm9tICdAZW1vdGlvbi91dGlscyc7XG5cbmZ1bmN0aW9uIGluc2VydFdpdGhvdXRTY29waW5nKGNhY2hlLCBzZXJpYWxpemVkKSB7XG4gIGlmIChjYWNoZS5pbnNlcnRlZFtzZXJpYWxpemVkLm5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gY2FjaGUuaW5zZXJ0KCcnLCBzZXJpYWxpemVkLCBjYWNoZS5zaGVldCwgdHJ1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWVyZ2UocmVnaXN0ZXJlZCwgY3NzLCBjbGFzc05hbWUpIHtcbiAgdmFyIHJlZ2lzdGVyZWRTdHlsZXMgPSBbXTtcbiAgdmFyIHJhd0NsYXNzTmFtZSA9IGdldFJlZ2lzdGVyZWRTdHlsZXMocmVnaXN0ZXJlZCwgcmVnaXN0ZXJlZFN0eWxlcywgY2xhc3NOYW1lKTtcblxuICBpZiAocmVnaXN0ZXJlZFN0eWxlcy5sZW5ndGggPCAyKSB7XG4gICAgcmV0dXJuIGNsYXNzTmFtZTtcbiAgfVxuXG4gIHJldHVybiByYXdDbGFzc05hbWUgKyBjc3MocmVnaXN0ZXJlZFN0eWxlcyk7XG59XG5cbnZhciBjcmVhdGVFbW90aW9uID0gZnVuY3Rpb24gY3JlYXRlRW1vdGlvbihvcHRpb25zKSB7XG4gIHZhciBjYWNoZSA9IGNyZWF0ZUNhY2hlKG9wdGlvbnMpO1xuXG4gIGNhY2hlLnNoZWV0LnNwZWVkeSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuXG4gICAgdGhpcy5pc1NwZWVkeSA9IHZhbHVlO1xuICB9O1xuXG4gIGNhY2hlLmNvbXBhdCA9IHRydWU7XG5cbiAgdmFyIGNzcyA9IGZ1bmN0aW9uIGNzcygpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgdmFyIHNlcmlhbGl6ZWQgPSBzZXJpYWxpemVTdHlsZXMoYXJncywgY2FjaGUucmVnaXN0ZXJlZCwgdW5kZWZpbmVkKTtcbiAgICBpbnNlcnRTdHlsZXMoY2FjaGUsIHNlcmlhbGl6ZWQsIGZhbHNlKTtcbiAgICByZXR1cm4gY2FjaGUua2V5ICsgXCItXCIgKyBzZXJpYWxpemVkLm5hbWU7XG4gIH07XG5cbiAgdmFyIGtleWZyYW1lcyA9IGZ1bmN0aW9uIGtleWZyYW1lcygpIHtcbiAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgIGFyZ3NbX2tleTJdID0gYXJndW1lbnRzW19rZXkyXTtcbiAgICB9XG5cbiAgICB2YXIgc2VyaWFsaXplZCA9IHNlcmlhbGl6ZVN0eWxlcyhhcmdzLCBjYWNoZS5yZWdpc3RlcmVkKTtcbiAgICB2YXIgYW5pbWF0aW9uID0gXCJhbmltYXRpb24tXCIgKyBzZXJpYWxpemVkLm5hbWU7XG4gICAgaW5zZXJ0V2l0aG91dFNjb3BpbmcoY2FjaGUsIHtcbiAgICAgIG5hbWU6IHNlcmlhbGl6ZWQubmFtZSxcbiAgICAgIHN0eWxlczogXCJAa2V5ZnJhbWVzIFwiICsgYW5pbWF0aW9uICsgXCJ7XCIgKyBzZXJpYWxpemVkLnN0eWxlcyArIFwifVwiXG4gICAgfSk7XG4gICAgcmV0dXJuIGFuaW1hdGlvbjtcbiAgfTtcblxuICB2YXIgaW5qZWN0R2xvYmFsID0gZnVuY3Rpb24gaW5qZWN0R2xvYmFsKCkge1xuICAgIGZvciAodmFyIF9sZW4zID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMyksIF9rZXkzID0gMDsgX2tleTMgPCBfbGVuMzsgX2tleTMrKykge1xuICAgICAgYXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgIH1cblxuICAgIHZhciBzZXJpYWxpemVkID0gc2VyaWFsaXplU3R5bGVzKGFyZ3MsIGNhY2hlLnJlZ2lzdGVyZWQpO1xuICAgIGluc2VydFdpdGhvdXRTY29waW5nKGNhY2hlLCBzZXJpYWxpemVkKTtcbiAgfTtcblxuICB2YXIgY3ggPSBmdW5jdGlvbiBjeCgpIHtcbiAgICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjQpLCBfa2V5NCA9IDA7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcbiAgICAgIGFyZ3NbX2tleTRdID0gYXJndW1lbnRzW19rZXk0XTtcbiAgICB9XG5cbiAgICByZXR1cm4gbWVyZ2UoY2FjaGUucmVnaXN0ZXJlZCwgY3NzLCBjbGFzc25hbWVzKGFyZ3MpKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGNzczogY3NzLFxuICAgIGN4OiBjeCxcbiAgICBpbmplY3RHbG9iYWw6IGluamVjdEdsb2JhbCxcbiAgICBrZXlmcmFtZXM6IGtleWZyYW1lcyxcbiAgICBoeWRyYXRlOiBmdW5jdGlvbiBoeWRyYXRlKGlkcykge1xuICAgICAgaWRzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBjYWNoZS5pbnNlcnRlZFtrZXldID0gdHJ1ZTtcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgZmx1c2g6IGZ1bmN0aW9uIGZsdXNoKCkge1xuICAgICAgY2FjaGUucmVnaXN0ZXJlZCA9IHt9O1xuICAgICAgY2FjaGUuaW5zZXJ0ZWQgPSB7fTtcbiAgICAgIGNhY2hlLnNoZWV0LmZsdXNoKCk7XG4gICAgfSxcbiAgICBzaGVldDogY2FjaGUuc2hlZXQsXG4gICAgY2FjaGU6IGNhY2hlLFxuICAgIGdldFJlZ2lzdGVyZWRTdHlsZXM6IGdldFJlZ2lzdGVyZWRTdHlsZXMuYmluZChudWxsLCBjYWNoZS5yZWdpc3RlcmVkKSxcbiAgICBtZXJnZTogbWVyZ2UuYmluZChudWxsLCBjYWNoZS5yZWdpc3RlcmVkLCBjc3MpXG4gIH07XG59O1xuXG52YXIgY2xhc3NuYW1lcyA9IGZ1bmN0aW9uIGNsYXNzbmFtZXMoYXJncykge1xuICB2YXIgY2xzID0gJyc7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGFyZyA9IGFyZ3NbaV07XG4gICAgaWYgKGFyZyA9PSBudWxsKSBjb250aW51ZTtcbiAgICB2YXIgdG9BZGQgPSB2b2lkIDA7XG5cbiAgICBzd2l0Y2ggKHR5cGVvZiBhcmcpIHtcbiAgICAgIGNhc2UgJ2Jvb2xlYW4nOlxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgICAgICAgIHRvQWRkID0gY2xhc3NuYW1lcyhhcmcpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0b0FkZCA9ICcnO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBrIGluIGFyZykge1xuICAgICAgICAgICAgICBpZiAoYXJnW2tdICYmIGspIHtcbiAgICAgICAgICAgICAgICB0b0FkZCAmJiAodG9BZGQgKz0gJyAnKTtcbiAgICAgICAgICAgICAgICB0b0FkZCArPSBrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgIHRvQWRkID0gYXJnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRvQWRkKSB7XG4gICAgICBjbHMgJiYgKGNscyArPSAnICcpO1xuICAgICAgY2xzICs9IHRvQWRkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjbHM7XG59O1xuXG5leHBvcnQgeyBjcmVhdGVFbW90aW9uIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBjcmVhdGVFbW90aW9uIGZyb20gJy4uL2NyZWF0ZS1pbnN0YW5jZS9kaXN0L2Vtb3Rpb24tY3NzLWNyZWF0ZS1pbnN0YW5jZS5lc20uanMnO1xuaW1wb3J0ICdAZW1vdGlvbi9jYWNoZSc7XG5pbXBvcnQgJ0BlbW90aW9uL3NlcmlhbGl6ZSc7XG5pbXBvcnQgJ0BlbW90aW9uL3V0aWxzJztcblxudmFyIF9jcmVhdGVFbW90aW9uID0gY3JlYXRlRW1vdGlvbih7XG4gIGtleTogJ2Nzcydcbn0pLFxuICAgIGZsdXNoID0gX2NyZWF0ZUVtb3Rpb24uZmx1c2gsXG4gICAgaHlkcmF0ZSA9IF9jcmVhdGVFbW90aW9uLmh5ZHJhdGUsXG4gICAgY3ggPSBfY3JlYXRlRW1vdGlvbi5jeCxcbiAgICBtZXJnZSA9IF9jcmVhdGVFbW90aW9uLm1lcmdlLFxuICAgIGdldFJlZ2lzdGVyZWRTdHlsZXMgPSBfY3JlYXRlRW1vdGlvbi5nZXRSZWdpc3RlcmVkU3R5bGVzLFxuICAgIGluamVjdEdsb2JhbCA9IF9jcmVhdGVFbW90aW9uLmluamVjdEdsb2JhbCxcbiAgICBrZXlmcmFtZXMgPSBfY3JlYXRlRW1vdGlvbi5rZXlmcmFtZXMsXG4gICAgY3NzID0gX2NyZWF0ZUVtb3Rpb24uY3NzLFxuICAgIHNoZWV0ID0gX2NyZWF0ZUVtb3Rpb24uc2hlZXQsXG4gICAgY2FjaGUgPSBfY3JlYXRlRW1vdGlvbi5jYWNoZTtcblxuZXhwb3J0IHsgY2FjaGUsIGNzcywgY3gsIGZsdXNoLCBnZXRSZWdpc3RlcmVkU3R5bGVzLCBoeWRyYXRlLCBpbmplY3RHbG9iYWwsIGtleWZyYW1lcywgbWVyZ2UsIHNoZWV0IH07XG4iLCJmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgcmV0dXJuIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKG4pIHtcbiAgICBmb3IgKHZhciBlID0gMTsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKykge1xuICAgICAgdmFyIHQgPSBhcmd1bWVudHNbZV07XG4gICAgICBmb3IgKHZhciByIGluIHQpICh7fSkuaGFzT3duUHJvcGVydHkuY2FsbCh0LCByKSAmJiAobltyXSA9IHRbcl0pO1xuICAgIH1cbiAgICByZXR1cm4gbjtcbiAgfSwgX2V4dGVuZHMuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn1cbmV4cG9ydCB7IF9leHRlbmRzIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7XG4gIGlmIChudWxsID09IHIpIHJldHVybiB7fTtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkge1xuICAgIGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTtcbiAgICB0W25dID0gcltuXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YodCwgZSkge1xuICByZXR1cm4gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDtcbiAgfSwgX3NldFByb3RvdHlwZU9mKHQsIGUpO1xufVxuZXhwb3J0IHsgX3NldFByb3RvdHlwZU9mIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgc2V0UHJvdG90eXBlT2YgZnJvbSBcIi4vc2V0UHJvdG90eXBlT2YuanNcIjtcbmZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHQsIG8pIHtcbiAgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG8ucHJvdG90eXBlKSwgdC5wcm90b3R5cGUuY29uc3RydWN0b3IgPSB0LCBzZXRQcm90b3R5cGVPZih0LCBvKTtcbn1cbmV4cG9ydCB7IF9pbmhlcml0c0xvb3NlIGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiByZXBsYWNlQ2xhc3NOYW1lKG9yaWdDbGFzcywgY2xhc3NUb1JlbW92ZSkge1xuICByZXR1cm4gb3JpZ0NsYXNzLnJlcGxhY2UobmV3IFJlZ0V4cChcIihefFxcXFxzKVwiICsgY2xhc3NUb1JlbW92ZSArIFwiKD86XFxcXHN8JClcIiwgJ2cnKSwgJyQxJykucmVwbGFjZSgvXFxzKy9nLCAnICcpLnJlcGxhY2UoL15cXHMqfFxccyokL2csICcnKTtcbn1cbi8qKlxuICogUmVtb3ZlcyBhIENTUyBjbGFzcyBmcm9tIGEgZ2l2ZW4gZWxlbWVudC5cbiAqIFxuICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIENTUyBjbGFzcyBuYW1lXG4gKi9cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZW1vdmVDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSB7XG4gICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGVsZW1lbnQuY2xhc3NOYW1lID09PSAnc3RyaW5nJykge1xuICAgIGVsZW1lbnQuY2xhc3NOYW1lID0gcmVwbGFjZUNsYXNzTmFtZShlbGVtZW50LmNsYXNzTmFtZSwgY2xhc3NOYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCByZXBsYWNlQ2xhc3NOYW1lKGVsZW1lbnQuY2xhc3NOYW1lICYmIGVsZW1lbnQuY2xhc3NOYW1lLmJhc2VWYWwgfHwgJycsIGNsYXNzTmFtZSkpO1xuICB9XG59IiwiZXhwb3J0IGRlZmF1bHQge1xuICBkaXNhYmxlZDogZmFsc2Vcbn07IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmV4cG9ydCBkZWZhdWx0IFJlYWN0LmNyZWF0ZUNvbnRleHQobnVsbCk7IiwiZXhwb3J0IHZhciBmb3JjZVJlZmxvdyA9IGZ1bmN0aW9uIGZvcmNlUmVmbG93KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuc2Nyb2xsVG9wO1xufTsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBjb25maWcgZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgdGltZW91dHNTaGFwZSB9IGZyb20gJy4vdXRpbHMvUHJvcFR5cGVzJztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5pbXBvcnQgeyBmb3JjZVJlZmxvdyB9IGZyb20gJy4vdXRpbHMvcmVmbG93JztcbmV4cG9ydCB2YXIgVU5NT1VOVEVEID0gJ3VubW91bnRlZCc7XG5leHBvcnQgdmFyIEVYSVRFRCA9ICdleGl0ZWQnO1xuZXhwb3J0IHZhciBFTlRFUklORyA9ICdlbnRlcmluZyc7XG5leHBvcnQgdmFyIEVOVEVSRUQgPSAnZW50ZXJlZCc7XG5leHBvcnQgdmFyIEVYSVRJTkcgPSAnZXhpdGluZyc7XG4vKipcbiAqIFRoZSBUcmFuc2l0aW9uIGNvbXBvbmVudCBsZXRzIHlvdSBkZXNjcmliZSBhIHRyYW5zaXRpb24gZnJvbSBvbmUgY29tcG9uZW50XG4gKiBzdGF0ZSB0byBhbm90aGVyIF9vdmVyIHRpbWVfIHdpdGggYSBzaW1wbGUgZGVjbGFyYXRpdmUgQVBJLiBNb3N0IGNvbW1vbmx5XG4gKiBpdCdzIHVzZWQgdG8gYW5pbWF0ZSB0aGUgbW91bnRpbmcgYW5kIHVubW91bnRpbmcgb2YgYSBjb21wb25lbnQsIGJ1dCBjYW4gYWxzb1xuICogYmUgdXNlZCB0byBkZXNjcmliZSBpbi1wbGFjZSB0cmFuc2l0aW9uIHN0YXRlcyBhcyB3ZWxsLlxuICpcbiAqIC0tLVxuICpcbiAqICoqTm90ZSoqOiBgVHJhbnNpdGlvbmAgaXMgYSBwbGF0Zm9ybS1hZ25vc3RpYyBiYXNlIGNvbXBvbmVudC4gSWYgeW91J3JlIHVzaW5nXG4gKiB0cmFuc2l0aW9ucyBpbiBDU1MsIHlvdSdsbCBwcm9iYWJseSB3YW50IHRvIHVzZVxuICogW2BDU1NUcmFuc2l0aW9uYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9jc3MtdHJhbnNpdGlvbilcbiAqIGluc3RlYWQuIEl0IGluaGVyaXRzIGFsbCB0aGUgZmVhdHVyZXMgb2YgYFRyYW5zaXRpb25gLCBidXQgY29udGFpbnNcbiAqIGFkZGl0aW9uYWwgZmVhdHVyZXMgbmVjZXNzYXJ5IHRvIHBsYXkgbmljZSB3aXRoIENTUyB0cmFuc2l0aW9ucyAoaGVuY2UgdGhlXG4gKiBuYW1lIG9mIHRoZSBjb21wb25lbnQpLlxuICpcbiAqIC0tLVxuICpcbiAqIEJ5IGRlZmF1bHQgdGhlIGBUcmFuc2l0aW9uYCBjb21wb25lbnQgZG9lcyBub3QgYWx0ZXIgdGhlIGJlaGF2aW9yIG9mIHRoZVxuICogY29tcG9uZW50IGl0IHJlbmRlcnMsIGl0IG9ubHkgdHJhY2tzIFwiZW50ZXJcIiBhbmQgXCJleGl0XCIgc3RhdGVzIGZvciB0aGVcbiAqIGNvbXBvbmVudHMuIEl0J3MgdXAgdG8geW91IHRvIGdpdmUgbWVhbmluZyBhbmQgZWZmZWN0IHRvIHRob3NlIHN0YXRlcy4gRm9yXG4gKiBleGFtcGxlIHdlIGNhbiBhZGQgc3R5bGVzIHRvIGEgY29tcG9uZW50IHdoZW4gaXQgZW50ZXJzIG9yIGV4aXRzOlxuICpcbiAqIGBgYGpzeFxuICogaW1wb3J0IHsgVHJhbnNpdGlvbiB9IGZyb20gJ3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAnO1xuICpcbiAqIGNvbnN0IGR1cmF0aW9uID0gMzAwO1xuICpcbiAqIGNvbnN0IGRlZmF1bHRTdHlsZSA9IHtcbiAqICAgdHJhbnNpdGlvbjogYG9wYWNpdHkgJHtkdXJhdGlvbn1tcyBlYXNlLWluLW91dGAsXG4gKiAgIG9wYWNpdHk6IDAsXG4gKiB9XG4gKlxuICogY29uc3QgdHJhbnNpdGlvblN0eWxlcyA9IHtcbiAqICAgZW50ZXJpbmc6IHsgb3BhY2l0eTogMSB9LFxuICogICBlbnRlcmVkOiAgeyBvcGFjaXR5OiAxIH0sXG4gKiAgIGV4aXRpbmc6ICB7IG9wYWNpdHk6IDAgfSxcbiAqICAgZXhpdGVkOiAgeyBvcGFjaXR5OiAwIH0sXG4gKiB9O1xuICpcbiAqIGNvbnN0IEZhZGUgPSAoeyBpbjogaW5Qcm9wIH0pID0+IChcbiAqICAgPFRyYW5zaXRpb24gaW49e2luUHJvcH0gdGltZW91dD17ZHVyYXRpb259PlxuICogICAgIHtzdGF0ZSA9PiAoXG4gKiAgICAgICA8ZGl2IHN0eWxlPXt7XG4gKiAgICAgICAgIC4uLmRlZmF1bHRTdHlsZSxcbiAqICAgICAgICAgLi4udHJhbnNpdGlvblN0eWxlc1tzdGF0ZV1cbiAqICAgICAgIH19PlxuICogICAgICAgICBJJ20gYSBmYWRlIFRyYW5zaXRpb24hXG4gKiAgICAgICA8L2Rpdj5cbiAqICAgICApfVxuICogICA8L1RyYW5zaXRpb24+XG4gKiApO1xuICogYGBgXG4gKlxuICogVGhlcmUgYXJlIDQgbWFpbiBzdGF0ZXMgYSBUcmFuc2l0aW9uIGNhbiBiZSBpbjpcbiAqICAtIGAnZW50ZXJpbmcnYFxuICogIC0gYCdlbnRlcmVkJ2BcbiAqICAtIGAnZXhpdGluZydgXG4gKiAgLSBgJ2V4aXRlZCdgXG4gKlxuICogVHJhbnNpdGlvbiBzdGF0ZSBpcyB0b2dnbGVkIHZpYSB0aGUgYGluYCBwcm9wLiBXaGVuIGB0cnVlYCB0aGUgY29tcG9uZW50XG4gKiBiZWdpbnMgdGhlIFwiRW50ZXJcIiBzdGFnZS4gRHVyaW5nIHRoaXMgc3RhZ2UsIHRoZSBjb21wb25lbnQgd2lsbCBzaGlmdCBmcm9tXG4gKiBpdHMgY3VycmVudCB0cmFuc2l0aW9uIHN0YXRlLCB0byBgJ2VudGVyaW5nJ2AgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGVcbiAqIHRyYW5zaXRpb24gYW5kIHRoZW4gdG8gdGhlIGAnZW50ZXJlZCdgIHN0YWdlIG9uY2UgaXQncyBjb21wbGV0ZS4gTGV0J3MgdGFrZVxuICogdGhlIGZvbGxvd2luZyBleGFtcGxlICh3ZSdsbCB1c2UgdGhlXG4gKiBbdXNlU3RhdGVdKGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9ob29rcy1yZWZlcmVuY2UuaHRtbCN1c2VzdGF0ZSkgaG9vayk6XG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgIGNvbnN0IFtpblByb3AsIHNldEluUHJvcF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdj5cbiAqICAgICAgIDxUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9ezUwMH0+XG4gKiAgICAgICAgIHtzdGF0ZSA9PiAoXG4gKiAgICAgICAgICAgLy8gLi4uXG4gKiAgICAgICAgICl9XG4gKiAgICAgICA8L1RyYW5zaXRpb24+XG4gKiAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHNldEluUHJvcCh0cnVlKX0+XG4gKiAgICAgICAgIENsaWNrIHRvIEVudGVyXG4gKiAgICAgICA8L2J1dHRvbj5cbiAqICAgICA8L2Rpdj5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIFdoZW4gdGhlIGJ1dHRvbiBpcyBjbGlja2VkIHRoZSBjb21wb25lbnQgd2lsbCBzaGlmdCB0byB0aGUgYCdlbnRlcmluZydgIHN0YXRlXG4gKiBhbmQgc3RheSB0aGVyZSBmb3IgNTAwbXMgKHRoZSB2YWx1ZSBvZiBgdGltZW91dGApIGJlZm9yZSBpdCBmaW5hbGx5IHN3aXRjaGVzXG4gKiB0byBgJ2VudGVyZWQnYC5cbiAqXG4gKiBXaGVuIGBpbmAgaXMgYGZhbHNlYCB0aGUgc2FtZSB0aGluZyBoYXBwZW5zIGV4Y2VwdCB0aGUgc3RhdGUgbW92ZXMgZnJvbVxuICogYCdleGl0aW5nJ2AgdG8gYCdleGl0ZWQnYC5cbiAqL1xuXG52YXIgVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUcmFuc2l0aW9uKHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpIHx8IHRoaXM7XG4gICAgdmFyIHBhcmVudEdyb3VwID0gY29udGV4dDsgLy8gSW4gdGhlIGNvbnRleHQgb2YgYSBUcmFuc2l0aW9uR3JvdXAgYWxsIGVudGVycyBhcmUgcmVhbGx5IGFwcGVhcnNcblxuICAgIHZhciBhcHBlYXIgPSBwYXJlbnRHcm91cCAmJiAhcGFyZW50R3JvdXAuaXNNb3VudGluZyA/IHByb3BzLmVudGVyIDogcHJvcHMuYXBwZWFyO1xuICAgIHZhciBpbml0aWFsU3RhdHVzO1xuICAgIF90aGlzLmFwcGVhclN0YXR1cyA9IG51bGw7XG5cbiAgICBpZiAocHJvcHMuaW4pIHtcbiAgICAgIGlmIChhcHBlYXIpIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVYSVRFRDtcbiAgICAgICAgX3RoaXMuYXBwZWFyU3RhdHVzID0gRU5URVJJTkc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRU5URVJFRDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHByb3BzLnVubW91bnRPbkV4aXQgfHwgcHJvcHMubW91bnRPbkVudGVyKSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBVTk1PVU5URUQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gRVhJVEVEO1xuICAgICAgfVxuICAgIH1cblxuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgc3RhdHVzOiBpbml0aWFsU3RhdHVzXG4gICAgfTtcbiAgICBfdGhpcy5uZXh0Q2FsbGJhY2sgPSBudWxsO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIFRyYW5zaXRpb24uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKF9yZWYsIHByZXZTdGF0ZSkge1xuICAgIHZhciBuZXh0SW4gPSBfcmVmLmluO1xuXG4gICAgaWYgKG5leHRJbiAmJiBwcmV2U3RhdGUuc3RhdHVzID09PSBVTk1PVU5URUQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9IC8vIGdldFNuYXBzaG90QmVmb3JlVXBkYXRlKHByZXZQcm9wcykge1xuICAvLyAgIGxldCBuZXh0U3RhdHVzID0gbnVsbFxuICAvLyAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgLy8gICAgIGNvbnN0IHsgc3RhdHVzIH0gPSB0aGlzLnN0YXRlXG4gIC8vICAgICBpZiAodGhpcy5wcm9wcy5pbikge1xuICAvLyAgICAgICBpZiAoc3RhdHVzICE9PSBFTlRFUklORyAmJiBzdGF0dXMgIT09IEVOVEVSRUQpIHtcbiAgLy8gICAgICAgICBuZXh0U3RhdHVzID0gRU5URVJJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfSBlbHNlIHtcbiAgLy8gICAgICAgaWYgKHN0YXR1cyA9PT0gRU5URVJJTkcgfHwgc3RhdHVzID09PSBFTlRFUkVEKSB7XG4gIC8vICAgICAgICAgbmV4dFN0YXR1cyA9IEVYSVRJTkdcbiAgLy8gICAgICAgfVxuICAvLyAgICAgfVxuICAvLyAgIH1cbiAgLy8gICByZXR1cm4geyBuZXh0U3RhdHVzIH1cbiAgLy8gfVxuICA7XG5cbiAgdmFyIF9wcm90byA9IFRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMudXBkYXRlU3RhdHVzKHRydWUsIHRoaXMuYXBwZWFyU3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKHByZXZQcm9wcykge1xuICAgIHZhciBuZXh0U3RhdHVzID0gbnVsbDtcblxuICAgIGlmIChwcmV2UHJvcHMgIT09IHRoaXMucHJvcHMpIHtcbiAgICAgIHZhciBzdGF0dXMgPSB0aGlzLnN0YXRlLnN0YXR1cztcblxuICAgICAgaWYgKHRoaXMucHJvcHMuaW4pIHtcbiAgICAgICAgaWYgKHN0YXR1cyAhPT0gRU5URVJJTkcgJiYgc3RhdHVzICE9PSBFTlRFUkVEKSB7XG4gICAgICAgICAgbmV4dFN0YXR1cyA9IEVOVEVSSU5HO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3RhdHVzID09PSBFTlRFUklORyB8fCBzdGF0dXMgPT09IEVOVEVSRUQpIHtcbiAgICAgICAgICBuZXh0U3RhdHVzID0gRVhJVElORztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU3RhdHVzKGZhbHNlLCBuZXh0U3RhdHVzKTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLmNhbmNlbE5leHRDYWxsYmFjaygpO1xuICB9O1xuXG4gIF9wcm90by5nZXRUaW1lb3V0cyA9IGZ1bmN0aW9uIGdldFRpbWVvdXRzKCkge1xuICAgIHZhciB0aW1lb3V0ID0gdGhpcy5wcm9wcy50aW1lb3V0O1xuICAgIHZhciBleGl0LCBlbnRlciwgYXBwZWFyO1xuICAgIGV4aXQgPSBlbnRlciA9IGFwcGVhciA9IHRpbWVvdXQ7XG5cbiAgICBpZiAodGltZW91dCAhPSBudWxsICYmIHR5cGVvZiB0aW1lb3V0ICE9PSAnbnVtYmVyJykge1xuICAgICAgZXhpdCA9IHRpbWVvdXQuZXhpdDtcbiAgICAgIGVudGVyID0gdGltZW91dC5lbnRlcjsgLy8gVE9ETzogcmVtb3ZlIGZhbGxiYWNrIGZvciBuZXh0IG1ham9yXG5cbiAgICAgIGFwcGVhciA9IHRpbWVvdXQuYXBwZWFyICE9PSB1bmRlZmluZWQgPyB0aW1lb3V0LmFwcGVhciA6IGVudGVyO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBleGl0OiBleGl0LFxuICAgICAgZW50ZXI6IGVudGVyLFxuICAgICAgYXBwZWFyOiBhcHBlYXJcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by51cGRhdGVTdGF0dXMgPSBmdW5jdGlvbiB1cGRhdGVTdGF0dXMobW91bnRpbmcsIG5leHRTdGF0dXMpIHtcbiAgICBpZiAobW91bnRpbmcgPT09IHZvaWQgMCkge1xuICAgICAgbW91bnRpbmcgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAobmV4dFN0YXR1cyAhPT0gbnVsbCkge1xuICAgICAgLy8gbmV4dFN0YXR1cyB3aWxsIGFsd2F5cyBiZSBFTlRFUklORyBvciBFWElUSU5HLlxuICAgICAgdGhpcy5jYW5jZWxOZXh0Q2FsbGJhY2soKTtcblxuICAgICAgaWYgKG5leHRTdGF0dXMgPT09IEVOVEVSSU5HKSB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnVubW91bnRPbkV4aXQgfHwgdGhpcy5wcm9wcy5tb3VudE9uRW50ZXIpIHtcbiAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHRoaXMucHJvcHMubm9kZVJlZi5jdXJyZW50IDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvcHVsbC83NDlcbiAgICAgICAgICAvLyBXaXRoIHVubW91bnRPbkV4aXQgb3IgbW91bnRPbkVudGVyLCB0aGUgZW50ZXIgYW5pbWF0aW9uIHNob3VsZCBoYXBwZW4gYXQgdGhlIHRyYW5zaXRpb24gYmV0d2VlbiBgZXhpdGVkYCBhbmQgYGVudGVyaW5nYC5cbiAgICAgICAgICAvLyBUbyBtYWtlIHRoZSBhbmltYXRpb24gaGFwcGVuLCAgd2UgaGF2ZSB0byBzZXBhcmF0ZSBlYWNoIHJlbmRlcmluZyBhbmQgYXZvaWQgYmVpbmcgcHJvY2Vzc2VkIGFzIGJhdGNoZWQuXG5cbiAgICAgICAgICBpZiAobm9kZSkgZm9yY2VSZWZsb3cobm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnBlcmZvcm1FbnRlcihtb3VudGluZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBlcmZvcm1FeGl0KCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLnByb3BzLnVubW91bnRPbkV4aXQgJiYgdGhpcy5zdGF0ZS5zdGF0dXMgPT09IEVYSVRFRCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogVU5NT1VOVEVEXG4gICAgICB9KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnBlcmZvcm1FbnRlciA9IGZ1bmN0aW9uIHBlcmZvcm1FbnRlcihtb3VudGluZykge1xuICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgdmFyIGVudGVyID0gdGhpcy5wcm9wcy5lbnRlcjtcbiAgICB2YXIgYXBwZWFyaW5nID0gdGhpcy5jb250ZXh0ID8gdGhpcy5jb250ZXh0LmlzTW91bnRpbmcgOiBtb3VudGluZztcblxuICAgIHZhciBfcmVmMiA9IHRoaXMucHJvcHMubm9kZVJlZiA/IFthcHBlYXJpbmddIDogW1JlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpLCBhcHBlYXJpbmddLFxuICAgICAgICBtYXliZU5vZGUgPSBfcmVmMlswXSxcbiAgICAgICAgbWF5YmVBcHBlYXJpbmcgPSBfcmVmMlsxXTtcblxuICAgIHZhciB0aW1lb3V0cyA9IHRoaXMuZ2V0VGltZW91dHMoKTtcbiAgICB2YXIgZW50ZXJUaW1lb3V0ID0gYXBwZWFyaW5nID8gdGltZW91dHMuYXBwZWFyIDogdGltZW91dHMuZW50ZXI7IC8vIG5vIGVudGVyIGFuaW1hdGlvbiBza2lwIHJpZ2h0IHRvIEVOVEVSRURcbiAgICAvLyBpZiB3ZSBhcmUgbW91bnRpbmcgYW5kIHJ1bm5pbmcgdGhpcyBpdCBtZWFucyBhcHBlYXIgX211c3RfIGJlIHNldFxuXG4gICAgaWYgKCFtb3VudGluZyAmJiAhZW50ZXIgfHwgY29uZmlnLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgIHN0YXR1czogRU5URVJFRFxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIucHJvcHMub25FbnRlcmVkKG1heWJlTm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLm9uRW50ZXIobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgc3RhdHVzOiBFTlRFUklOR1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyaW5nKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuXG4gICAgICBfdGhpczIub25UcmFuc2l0aW9uRW5kKGVudGVyVGltZW91dCwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczIuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgICBzdGF0dXM6IEVOVEVSRURcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMi5wcm9wcy5vbkVudGVyZWQobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgX3Byb3RvLnBlcmZvcm1FeGl0ID0gZnVuY3Rpb24gcGVyZm9ybUV4aXQoKSB7XG4gICAgdmFyIF90aGlzMyA9IHRoaXM7XG5cbiAgICB2YXIgZXhpdCA9IHRoaXMucHJvcHMuZXhpdDtcbiAgICB2YXIgdGltZW91dHMgPSB0aGlzLmdldFRpbWVvdXRzKCk7XG4gICAgdmFyIG1heWJlTm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHVuZGVmaW5lZCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpOyAvLyBubyBleGl0IGFuaW1hdGlvbiBza2lwIHJpZ2h0IHRvIEVYSVRFRFxuXG4gICAgaWYgKCFleGl0IHx8IGNvbmZpZy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpczMucHJvcHMub25FeGl0ZWQobWF5YmVOb2RlKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMucHJvcHMub25FeGl0KG1heWJlTm9kZSk7XG4gICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgc3RhdHVzOiBFWElUSU5HXG4gICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMzLnByb3BzLm9uRXhpdGluZyhtYXliZU5vZGUpO1xuXG4gICAgICBfdGhpczMub25UcmFuc2l0aW9uRW5kKHRpbWVvdXRzLmV4aXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRlZChtYXliZU5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jYW5jZWxOZXh0Q2FsbGJhY2sgPSBmdW5jdGlvbiBjYW5jZWxOZXh0Q2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMubmV4dENhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICB0aGlzLm5leHRDYWxsYmFjay5jYW5jZWwoKTtcbiAgICAgIHRoaXMubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnNhZmVTZXRTdGF0ZSA9IGZ1bmN0aW9uIHNhZmVTZXRTdGF0ZShuZXh0U3RhdGUsIGNhbGxiYWNrKSB7XG4gICAgLy8gVGhpcyBzaG91bGRuJ3QgYmUgbmVjZXNzYXJ5LCBidXQgdGhlcmUgYXJlIHdlaXJkIHJhY2UgY29uZGl0aW9ucyB3aXRoXG4gICAgLy8gc2V0U3RhdGUgY2FsbGJhY2tzIGFuZCB1bm1vdW50aW5nIGluIHRlc3RpbmcsIHNvIGFsd2F5cyBtYWtlIHN1cmUgdGhhdFxuICAgIC8vIHdlIGNhbiBjYW5jZWwgYW55IHBlbmRpbmcgc2V0U3RhdGUgY2FsbGJhY2tzIGFmdGVyIHdlIHVubW91bnQuXG4gICAgY2FsbGJhY2sgPSB0aGlzLnNldE5leHRDYWxsYmFjayhjYWxsYmFjayk7XG4gICAgdGhpcy5zZXRTdGF0ZShuZXh0U3RhdGUsIGNhbGxiYWNrKTtcbiAgfTtcblxuICBfcHJvdG8uc2V0TmV4dENhbGxiYWNrID0gZnVuY3Rpb24gc2V0TmV4dENhbGxiYWNrKGNhbGxiYWNrKSB7XG4gICAgdmFyIF90aGlzNCA9IHRoaXM7XG5cbiAgICB2YXIgYWN0aXZlID0gdHJ1ZTtcblxuICAgIHRoaXMubmV4dENhbGxiYWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgIGFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICBfdGhpczQubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICB0aGlzLm5leHRDYWxsYmFjay5jYW5jZWwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMubmV4dENhbGxiYWNrO1xuICB9O1xuXG4gIF9wcm90by5vblRyYW5zaXRpb25FbmQgPSBmdW5jdGlvbiBvblRyYW5zaXRpb25FbmQodGltZW91dCwgaGFuZGxlcikge1xuICAgIHRoaXMuc2V0TmV4dENhbGxiYWNrKGhhbmRsZXIpO1xuICAgIHZhciBub2RlID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gdGhpcy5wcm9wcy5ub2RlUmVmLmN1cnJlbnQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICB2YXIgZG9lc05vdEhhdmVUaW1lb3V0T3JMaXN0ZW5lciA9IHRpbWVvdXQgPT0gbnVsbCAmJiAhdGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcjtcblxuICAgIGlmICghbm9kZSB8fCBkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyKSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMubmV4dENhbGxiYWNrLCAwKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcikge1xuICAgICAgdmFyIF9yZWYzID0gdGhpcy5wcm9wcy5ub2RlUmVmID8gW3RoaXMubmV4dENhbGxiYWNrXSA6IFtub2RlLCB0aGlzLm5leHRDYWxsYmFja10sXG4gICAgICAgICAgbWF5YmVOb2RlID0gX3JlZjNbMF0sXG4gICAgICAgICAgbWF5YmVOZXh0Q2FsbGJhY2sgPSBfcmVmM1sxXTtcblxuICAgICAgdGhpcy5wcm9wcy5hZGRFbmRMaXN0ZW5lcihtYXliZU5vZGUsIG1heWJlTmV4dENhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBpZiAodGltZW91dCAhPSBudWxsKSB7XG4gICAgICBzZXRUaW1lb3V0KHRoaXMubmV4dENhbGxiYWNrLCB0aW1lb3V0KTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgc3RhdHVzID0gdGhpcy5zdGF0ZS5zdGF0dXM7XG5cbiAgICBpZiAoc3RhdHVzID09PSBVTk1PVU5URUQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIF9pbiA9IF90aGlzJHByb3BzLmluLFxuICAgICAgICBfbW91bnRPbkVudGVyID0gX3RoaXMkcHJvcHMubW91bnRPbkVudGVyLFxuICAgICAgICBfdW5tb3VudE9uRXhpdCA9IF90aGlzJHByb3BzLnVubW91bnRPbkV4aXQsXG4gICAgICAgIF9hcHBlYXIgPSBfdGhpcyRwcm9wcy5hcHBlYXIsXG4gICAgICAgIF9lbnRlciA9IF90aGlzJHByb3BzLmVudGVyLFxuICAgICAgICBfZXhpdCA9IF90aGlzJHByb3BzLmV4aXQsXG4gICAgICAgIF90aW1lb3V0ID0gX3RoaXMkcHJvcHMudGltZW91dCxcbiAgICAgICAgX2FkZEVuZExpc3RlbmVyID0gX3RoaXMkcHJvcHMuYWRkRW5kTGlzdGVuZXIsXG4gICAgICAgIF9vbkVudGVyID0gX3RoaXMkcHJvcHMub25FbnRlcixcbiAgICAgICAgX29uRW50ZXJpbmcgPSBfdGhpcyRwcm9wcy5vbkVudGVyaW5nLFxuICAgICAgICBfb25FbnRlcmVkID0gX3RoaXMkcHJvcHMub25FbnRlcmVkLFxuICAgICAgICBfb25FeGl0ID0gX3RoaXMkcHJvcHMub25FeGl0LFxuICAgICAgICBfb25FeGl0aW5nID0gX3RoaXMkcHJvcHMub25FeGl0aW5nLFxuICAgICAgICBfb25FeGl0ZWQgPSBfdGhpcyRwcm9wcy5vbkV4aXRlZCxcbiAgICAgICAgX25vZGVSZWYgPSBfdGhpcyRwcm9wcy5ub2RlUmVmLFxuICAgICAgICBjaGlsZFByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNoaWxkcmVuXCIsIFwiaW5cIiwgXCJtb3VudE9uRW50ZXJcIiwgXCJ1bm1vdW50T25FeGl0XCIsIFwiYXBwZWFyXCIsIFwiZW50ZXJcIiwgXCJleGl0XCIsIFwidGltZW91dFwiLCBcImFkZEVuZExpc3RlbmVyXCIsIFwib25FbnRlclwiLCBcIm9uRW50ZXJpbmdcIiwgXCJvbkVudGVyZWRcIiwgXCJvbkV4aXRcIiwgXCJvbkV4aXRpbmdcIiwgXCJvbkV4aXRlZFwiLCBcIm5vZGVSZWZcIl0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIC8qI19fUFVSRV9fKi9cbiAgICAgIC8vIGFsbG93cyBmb3IgbmVzdGVkIFRyYW5zaXRpb25zXG4gICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgIH0sIHR5cGVvZiBjaGlsZHJlbiA9PT0gJ2Z1bmN0aW9uJyA/IGNoaWxkcmVuKHN0YXR1cywgY2hpbGRQcm9wcykgOiBSZWFjdC5jbG9uZUVsZW1lbnQoUmVhY3QuQ2hpbGRyZW4ub25seShjaGlsZHJlbiksIGNoaWxkUHJvcHMpKVxuICAgICk7XG4gIH07XG5cbiAgcmV0dXJuIFRyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblRyYW5zaXRpb24uY29udGV4dFR5cGUgPSBUcmFuc2l0aW9uR3JvdXBDb250ZXh0O1xuVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBBIFJlYWN0IHJlZmVyZW5jZSB0byBET00gZWxlbWVudCB0aGF0IG5lZWQgdG8gdHJhbnNpdGlvbjpcbiAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxMTI3MTMwLzQ2NzE5MzJcbiAgICpcbiAgICogICAtIFdoZW4gYG5vZGVSZWZgIHByb3AgaXMgdXNlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQgdG8gY2FsbGJhY2sgZnVuY3Rpb25zXG4gICAqICAgICAgKGUuZy4gYG9uRW50ZXJgKSBiZWNhdXNlIHVzZXIgYWxyZWFkeSBoYXMgZGlyZWN0IGFjY2VzcyB0byB0aGUgbm9kZS5cbiAgICogICAtIFdoZW4gY2hhbmdpbmcgYGtleWAgcHJvcCBvZiBgVHJhbnNpdGlvbmAgaW4gYSBgVHJhbnNpdGlvbkdyb3VwYCBhIG5ld1xuICAgKiAgICAgYG5vZGVSZWZgIG5lZWQgdG8gYmUgcHJvdmlkZWQgdG8gYFRyYW5zaXRpb25gIHdpdGggY2hhbmdlZCBga2V5YCBwcm9wXG4gICAqICAgICAoc2VlXG4gICAqICAgICBbdGVzdC9DU1NUcmFuc2l0aW9uLXRlc3QuanNdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvYmxvYi8xMzQzNWY4OTdiM2FiNzFmNmUxOWQ3MjRmMTQ1NTk2ZjU5MTA1ODFjL3Rlc3QvQ1NTVHJhbnNpdGlvbi10ZXN0LmpzI0wzNjItTDQzNykpLlxuICAgKi9cbiAgbm9kZVJlZjogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBjdXJyZW50OiB0eXBlb2YgRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcgPyBQcm9wVHlwZXMuYW55IDogZnVuY3Rpb24gKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpIHtcbiAgICAgIHZhciB2YWx1ZSA9IHByb3BWYWx1ZVtrZXldO1xuICAgICAgcmV0dXJuIFByb3BUeXBlcy5pbnN0YW5jZU9mKHZhbHVlICYmICdvd25lckRvY3VtZW50JyBpbiB2YWx1ZSA/IHZhbHVlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuRWxlbWVudCA6IEVsZW1lbnQpKHByb3BWYWx1ZSwga2V5LCBjb21wb25lbnROYW1lLCBsb2NhdGlvbiwgcHJvcEZ1bGxOYW1lLCBzZWNyZXQpO1xuICAgIH1cbiAgfSksXG5cbiAgLyoqXG4gICAqIEEgYGZ1bmN0aW9uYCBjaGlsZCBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGEgUmVhY3QgZWxlbWVudC4gVGhpcyBmdW5jdGlvbiBpc1xuICAgKiBjYWxsZWQgd2l0aCB0aGUgY3VycmVudCB0cmFuc2l0aW9uIHN0YXR1cyAoYCdlbnRlcmluZydgLCBgJ2VudGVyZWQnYCxcbiAgICogYCdleGl0aW5nJ2AsIGAnZXhpdGVkJ2ApLCB3aGljaCBjYW4gYmUgdXNlZCB0byBhcHBseSBjb250ZXh0XG4gICAqIHNwZWNpZmljIHByb3BzIHRvIGEgY29tcG9uZW50LlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogPFRyYW5zaXRpb24gaW49e3RoaXMuc3RhdGUuaW59IHRpbWVvdXQ9ezE1MH0+XG4gICAqICAge3N0YXRlID0+IChcbiAgICogICAgIDxNeUNvbXBvbmVudCBjbGFzc05hbWU9e2BmYWRlIGZhZGUtJHtzdGF0ZX1gfSAvPlxuICAgKiAgICl9XG4gICAqIDwvVHJhbnNpdGlvbj5cbiAgICogYGBgXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCwgUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pLmlzUmVxdWlyZWQsXG5cbiAgLyoqXG4gICAqIFNob3cgdGhlIGNvbXBvbmVudDsgdHJpZ2dlcnMgdGhlIGVudGVyIG9yIGV4aXQgc3RhdGVzXG4gICAqL1xuICBpbjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQgdGhlIGNoaWxkIGNvbXBvbmVudCBpcyBtb3VudGVkIGltbWVkaWF0ZWx5IGFsb25nIHdpdGhcbiAgICogdGhlIHBhcmVudCBgVHJhbnNpdGlvbmAgY29tcG9uZW50LiBJZiB5b3Ugd2FudCB0byBcImxhenkgbW91bnRcIiB0aGUgY29tcG9uZW50IG9uIHRoZVxuICAgKiBmaXJzdCBgaW49e3RydWV9YCB5b3UgY2FuIHNldCBgbW91bnRPbkVudGVyYC4gQWZ0ZXIgdGhlIGZpcnN0IGVudGVyIHRyYW5zaXRpb24gdGhlIGNvbXBvbmVudCB3aWxsIHN0YXlcbiAgICogbW91bnRlZCwgZXZlbiBvbiBcImV4aXRlZFwiLCB1bmxlc3MgeW91IGFsc28gc3BlY2lmeSBgdW5tb3VudE9uRXhpdGAuXG4gICAqL1xuICBtb3VudE9uRW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgc3RheXMgbW91bnRlZCBhZnRlciBpdCByZWFjaGVzIHRoZSBgJ2V4aXRlZCdgIHN0YXRlLlxuICAgKiBTZXQgYHVubW91bnRPbkV4aXRgIGlmIHlvdSdkIHByZWZlciB0byB1bm1vdW50IHRoZSBjb21wb25lbnQgYWZ0ZXIgaXQgZmluaXNoZXMgZXhpdGluZy5cbiAgICovXG4gIHVubW91bnRPbkV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgZG9lcyBub3QgcGVyZm9ybSB0aGUgZW50ZXIgdHJhbnNpdGlvbiB3aGVuXG4gICAqIGl0IGZpcnN0IG1vdW50cywgcmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgYGluYC4gSWYgeW91IHdhbnQgdGhpc1xuICAgKiBiZWhhdmlvciwgc2V0IGJvdGggYGFwcGVhcmAgYW5kIGBpbmAgdG8gYHRydWVgLlxuICAgKlxuICAgKiA+ICoqTm90ZSoqOiB0aGVyZSBhcmUgbm8gc3BlY2lhbCBhcHBlYXIgc3RhdGVzIGxpa2UgYGFwcGVhcmluZ2AvYGFwcGVhcmVkYCwgdGhpcyBwcm9wXG4gICAqID4gb25seSBhZGRzIGFuIGFkZGl0aW9uYWwgZW50ZXIgdHJhbnNpdGlvbi4gSG93ZXZlciwgaW4gdGhlXG4gICAqID4gYDxDU1NUcmFuc2l0aW9uPmAgY29tcG9uZW50IHRoYXQgZmlyc3QgZW50ZXIgdHJhbnNpdGlvbiBkb2VzIHJlc3VsdCBpblxuICAgKiA+IGFkZGl0aW9uYWwgYC5hcHBlYXItKmAgY2xhc3NlcywgdGhhdCB3YXkgeW91IGNhbiBjaG9vc2UgdG8gc3R5bGUgaXRcbiAgICogPiBkaWZmZXJlbnRseS5cbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEVuYWJsZSBvciBkaXNhYmxlIGVudGVyIHRyYW5zaXRpb25zLlxuICAgKi9cbiAgZW50ZXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBleGl0IHRyYW5zaXRpb25zLlxuICAgKi9cbiAgZXhpdDogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIFRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNpdGlvbiwgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBSZXF1aXJlZCB1bmxlc3MgYGFkZEVuZExpc3RlbmVyYCBpcyBwcm92aWRlZC5cbiAgICpcbiAgICogWW91IG1heSBzcGVjaWZ5IGEgc2luZ2xlIHRpbWVvdXQgZm9yIGFsbCB0cmFuc2l0aW9uczpcbiAgICpcbiAgICogYGBganN4XG4gICAqIHRpbWVvdXQ9ezUwMH1cbiAgICogYGBgXG4gICAqXG4gICAqIG9yIGluZGl2aWR1YWxseTpcbiAgICpcbiAgICogYGBganN4XG4gICAqIHRpbWVvdXQ9e3tcbiAgICogIGFwcGVhcjogNTAwLFxuICAgKiAgZW50ZXI6IDMwMCxcbiAgICogIGV4aXQ6IDUwMCxcbiAgICogfX1cbiAgICogYGBgXG4gICAqXG4gICAqIC0gYGFwcGVhcmAgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIGBlbnRlcmBcbiAgICogLSBgZW50ZXJgIGRlZmF1bHRzIHRvIGAwYFxuICAgKiAtIGBleGl0YCBkZWZhdWx0cyB0byBgMGBcbiAgICpcbiAgICogQHR5cGUge251bWJlciB8IHsgZW50ZXI/OiBudW1iZXIsIGV4aXQ/OiBudW1iZXIsIGFwcGVhcj86IG51bWJlciB9fVxuICAgKi9cbiAgdGltZW91dDogZnVuY3Rpb24gdGltZW91dChwcm9wcykge1xuICAgIHZhciBwdCA9IHRpbWVvdXRzU2hhcGU7XG4gICAgaWYgKCFwcm9wcy5hZGRFbmRMaXN0ZW5lcikgcHQgPSBwdC5pc1JlcXVpcmVkO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHB0LmFwcGx5KHZvaWQgMCwgW3Byb3BzXS5jb25jYXQoYXJncykpO1xuICB9LFxuXG4gIC8qKlxuICAgKiBBZGQgYSBjdXN0b20gdHJhbnNpdGlvbiBlbmQgdHJpZ2dlci4gQ2FsbGVkIHdpdGggdGhlIHRyYW5zaXRpb25pbmdcbiAgICogRE9NIG5vZGUgYW5kIGEgYGRvbmVgIGNhbGxiYWNrLiBBbGxvd3MgZm9yIG1vcmUgZmluZSBncmFpbmVkIHRyYW5zaXRpb24gZW5kXG4gICAqIGxvZ2ljLiBUaW1lb3V0cyBhcmUgc3RpbGwgdXNlZCBhcyBhIGZhbGxiYWNrIGlmIHByb3ZpZGVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBgYGBqc3hcbiAgICogYWRkRW5kTGlzdGVuZXI9eyhub2RlLCBkb25lKSA9PiB7XG4gICAqICAgLy8gdXNlIHRoZSBjc3MgdHJhbnNpdGlvbmVuZCBldmVudCB0byBtYXJrIHRoZSBmaW5pc2ggb2YgYSB0cmFuc2l0aW9uXG4gICAqICAgbm9kZS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgZG9uZSwgZmFsc2UpO1xuICAgKiB9fVxuICAgKiBgYGBcbiAgICovXG4gIGFkZEVuZExpc3RlbmVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYmVmb3JlIHRoZSBcImVudGVyaW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKSAtPiB2b2lkXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZW50ZXJpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYWZ0ZXIgdGhlIFwiZW50ZXJlZFwiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbCkgLT4gdm9pZFxuICAgKi9cbiAgb25FbnRlcmVkOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgYmVmb3JlIHRoZSBcImV4aXRpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImV4aXRpbmdcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQpIC0+IHZvaWRcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImV4aXRlZFwiIHN0YXR1cyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmNcbn0gOiB7fTsgLy8gTmFtZSB0aGUgZnVuY3Rpb24gc28gaXQgaXMgY2xlYXJlciBpbiB0aGUgZG9jdW1lbnRhdGlvblxuXG5mdW5jdGlvbiBub29wKCkge31cblxuVHJhbnNpdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGluOiBmYWxzZSxcbiAgbW91bnRPbkVudGVyOiBmYWxzZSxcbiAgdW5tb3VudE9uRXhpdDogZmFsc2UsXG4gIGFwcGVhcjogZmFsc2UsXG4gIGVudGVyOiB0cnVlLFxuICBleGl0OiB0cnVlLFxuICBvbkVudGVyOiBub29wLFxuICBvbkVudGVyaW5nOiBub29wLFxuICBvbkVudGVyZWQ6IG5vb3AsXG4gIG9uRXhpdDogbm9vcCxcbiAgb25FeGl0aW5nOiBub29wLFxuICBvbkV4aXRlZDogbm9vcFxufTtcblRyYW5zaXRpb24uVU5NT1VOVEVEID0gVU5NT1VOVEVEO1xuVHJhbnNpdGlvbi5FWElURUQgPSBFWElURUQ7XG5UcmFuc2l0aW9uLkVOVEVSSU5HID0gRU5URVJJTkc7XG5UcmFuc2l0aW9uLkVOVEVSRUQgPSBFTlRFUkVEO1xuVHJhbnNpdGlvbi5FWElUSU5HID0gRVhJVElORztcbmV4cG9ydCBkZWZhdWx0IFRyYW5zaXRpb247IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBhZGRPbmVDbGFzcyBmcm9tICdkb20taGVscGVycy9hZGRDbGFzcyc7XG5pbXBvcnQgcmVtb3ZlT25lQ2xhc3MgZnJvbSAnZG9tLWhlbHBlcnMvcmVtb3ZlQ2xhc3MnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUcmFuc2l0aW9uIGZyb20gJy4vVHJhbnNpdGlvbic7XG5pbXBvcnQgeyBjbGFzc05hbWVzU2hhcGUgfSBmcm9tICcuL3V0aWxzL1Byb3BUeXBlcyc7XG5pbXBvcnQgeyBmb3JjZVJlZmxvdyB9IGZyb20gJy4vdXRpbHMvcmVmbG93JztcblxudmFyIF9hZGRDbGFzcyA9IGZ1bmN0aW9uIGFkZENsYXNzKG5vZGUsIGNsYXNzZXMpIHtcbiAgcmV0dXJuIG5vZGUgJiYgY2xhc3NlcyAmJiBjbGFzc2VzLnNwbGl0KCcgJykuZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBhZGRPbmVDbGFzcyhub2RlLCBjKTtcbiAgfSk7XG59O1xuXG52YXIgcmVtb3ZlQ2xhc3MgPSBmdW5jdGlvbiByZW1vdmVDbGFzcyhub2RlLCBjbGFzc2VzKSB7XG4gIHJldHVybiBub2RlICYmIGNsYXNzZXMgJiYgY2xhc3Nlcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gcmVtb3ZlT25lQ2xhc3Mobm9kZSwgYyk7XG4gIH0pO1xufTtcbi8qKlxuICogQSB0cmFuc2l0aW9uIGNvbXBvbmVudCBpbnNwaXJlZCBieSB0aGUgZXhjZWxsZW50XG4gKiBbbmctYW5pbWF0ZV0oaHR0cHM6Ly9kb2NzLmFuZ3VsYXJqcy5vcmcvYXBpL25nQW5pbWF0ZSkgbGlicmFyeSwgeW91IHNob3VsZFxuICogdXNlIGl0IGlmIHlvdSdyZSB1c2luZyBDU1MgdHJhbnNpdGlvbnMgb3IgYW5pbWF0aW9ucy4gSXQncyBidWlsdCB1cG9uIHRoZVxuICogW2BUcmFuc2l0aW9uYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uKVxuICogY29tcG9uZW50LCBzbyBpdCBpbmhlcml0cyBhbGwgb2YgaXRzIHByb3BzLlxuICpcbiAqIGBDU1NUcmFuc2l0aW9uYCBhcHBsaWVzIGEgcGFpciBvZiBjbGFzcyBuYW1lcyBkdXJpbmcgdGhlIGBhcHBlYXJgLCBgZW50ZXJgLFxuICogYW5kIGBleGl0YCBzdGF0ZXMgb2YgdGhlIHRyYW5zaXRpb24uIFRoZSBmaXJzdCBjbGFzcyBpcyBhcHBsaWVkIGFuZCB0aGVuIGFcbiAqIHNlY29uZCBgKi1hY3RpdmVgIGNsYXNzIGluIG9yZGVyIHRvIGFjdGl2YXRlIHRoZSBDU1MgdHJhbnNpdGlvbi4gQWZ0ZXIgdGhlXG4gKiB0cmFuc2l0aW9uLCBtYXRjaGluZyBgKi1kb25lYCBjbGFzcyBuYW1lcyBhcmUgYXBwbGllZCB0byBwZXJzaXN0IHRoZVxuICogdHJhbnNpdGlvbiBzdGF0ZS5cbiAqXG4gKiBgYGBqc3hcbiAqIGZ1bmN0aW9uIEFwcCgpIHtcbiAqICAgY29uc3QgW2luUHJvcCwgc2V0SW5Qcm9wXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAqICAgcmV0dXJuIChcbiAqICAgICA8ZGl2PlxuICogICAgICAgPENTU1RyYW5zaXRpb24gaW49e2luUHJvcH0gdGltZW91dD17MjAwfSBjbGFzc05hbWVzPVwibXktbm9kZVwiPlxuICogICAgICAgICA8ZGl2PlxuICogICAgICAgICAgIHtcIkknbGwgcmVjZWl2ZSBteS1ub2RlLSogY2xhc3Nlc1wifVxuICogICAgICAgICA8L2Rpdj5cbiAqICAgICAgIDwvQ1NTVHJhbnNpdGlvbj5cbiAqICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG9uQ2xpY2s9eygpID0+IHNldEluUHJvcCh0cnVlKX0+XG4gKiAgICAgICAgIENsaWNrIHRvIEVudGVyXG4gKiAgICAgICA8L2J1dHRvbj5cbiAqICAgICA8L2Rpdj5cbiAqICAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIFdoZW4gdGhlIGBpbmAgcHJvcCBpcyBzZXQgdG8gYHRydWVgLCB0aGUgY2hpbGQgY29tcG9uZW50IHdpbGwgZmlyc3QgcmVjZWl2ZVxuICogdGhlIGNsYXNzIGBleGFtcGxlLWVudGVyYCwgdGhlbiB0aGUgYGV4YW1wbGUtZW50ZXItYWN0aXZlYCB3aWxsIGJlIGFkZGVkIGluXG4gKiB0aGUgbmV4dCB0aWNrLiBgQ1NTVHJhbnNpdGlvbmAgW2ZvcmNlcyBhXG4gKiByZWZsb3ddKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvYmxvYi81MDA3MzAzZTcyOWE3NGJlNjZhMjFjM2UyMjA1ZTQ5MTY4MjE1MjRiL3NyYy9DU1NUcmFuc2l0aW9uLmpzI0wyMDgtTDIxNSlcbiAqIGJldHdlZW4gYmVmb3JlIGFkZGluZyB0aGUgYGV4YW1wbGUtZW50ZXItYWN0aXZlYC4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgdHJpY2tcbiAqIGJlY2F1c2UgaXQgYWxsb3dzIHVzIHRvIHRyYW5zaXRpb24gYmV0d2VlbiBgZXhhbXBsZS1lbnRlcmAgYW5kXG4gKiBgZXhhbXBsZS1lbnRlci1hY3RpdmVgIGV2ZW4gdGhvdWdoIHRoZXkgd2VyZSBhZGRlZCBpbW1lZGlhdGVseSBvbmUgYWZ0ZXJcbiAqIGFub3RoZXIuIE1vc3Qgbm90YWJseSwgdGhpcyBpcyB3aGF0IG1ha2VzIGl0IHBvc3NpYmxlIGZvciB1cyB0byBhbmltYXRlXG4gKiBfYXBwZWFyYW5jZV8uXG4gKlxuICogYGBgY3NzXG4gKiAubXktbm9kZS1lbnRlciB7XG4gKiAgIG9wYWNpdHk6IDA7XG4gKiB9XG4gKiAubXktbm9kZS1lbnRlci1hY3RpdmUge1xuICogICBvcGFjaXR5OiAxO1xuICogICB0cmFuc2l0aW9uOiBvcGFjaXR5IDIwMG1zO1xuICogfVxuICogLm15LW5vZGUtZXhpdCB7XG4gKiAgIG9wYWNpdHk6IDE7XG4gKiB9XG4gKiAubXktbm9kZS1leGl0LWFjdGl2ZSB7XG4gKiAgIG9wYWNpdHk6IDA7XG4gKiAgIHRyYW5zaXRpb246IG9wYWNpdHkgMjAwbXM7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBgKi1hY3RpdmVgIGNsYXNzZXMgcmVwcmVzZW50IHdoaWNoIHN0eWxlcyB5b3Ugd2FudCB0byBhbmltYXRlICoqdG8qKiwgc28gaXQnc1xuICogaW1wb3J0YW50IHRvIGFkZCBgdHJhbnNpdGlvbmAgZGVjbGFyYXRpb24gb25seSB0byB0aGVtLCBvdGhlcndpc2UgdHJhbnNpdGlvbnNcbiAqIG1pZ2h0IG5vdCBiZWhhdmUgYXMgaW50ZW5kZWQhIFRoaXMgbWlnaHQgbm90IGJlIG9idmlvdXMgd2hlbiB0aGUgdHJhbnNpdGlvbnNcbiAqIGFyZSBzeW1tZXRyaWNhbCwgaS5lLiB3aGVuIGAqLWVudGVyLWFjdGl2ZWAgaXMgdGhlIHNhbWUgYXMgYCotZXhpdGAsIGxpa2UgaW5cbiAqIHRoZSBleGFtcGxlIGFib3ZlIChtaW51cyBgdHJhbnNpdGlvbmApLCBidXQgaXQgYmVjb21lcyBhcHBhcmVudCBpbiBtb3JlXG4gKiBjb21wbGV4IHRyYW5zaXRpb25zLlxuICpcbiAqICoqTm90ZSoqOiBJZiB5b3UncmUgdXNpbmcgdGhlXG4gKiBbYGFwcGVhcmBdKGh0dHA6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uI1RyYW5zaXRpb24tcHJvcC1hcHBlYXIpXG4gKiBwcm9wLCBtYWtlIHN1cmUgdG8gZGVmaW5lIHN0eWxlcyBmb3IgYC5hcHBlYXItKmAgY2xhc3NlcyBhcyB3ZWxsLlxuICovXG5cblxudmFyIENTU1RyYW5zaXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoQ1NTVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gQ1NTVHJhbnNpdGlvbigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcbiAgICBfdGhpcy5hcHBsaWVkQ2xhc3NlcyA9IHtcbiAgICAgIGFwcGVhcjoge30sXG4gICAgICBlbnRlcjoge30sXG4gICAgICBleGl0OiB7fVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkVudGVyID0gZnVuY3Rpb24gKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnRbMF0sXG4gICAgICAgICAgYXBwZWFyaW5nID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50WzFdO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdleGl0Jyk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsIGFwcGVhcmluZyA/ICdhcHBlYXInIDogJ2VudGVyJywgJ2Jhc2UnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRW50ZXIpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FbnRlcihtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FbnRlcmluZyA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MiA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDJbMF0sXG4gICAgICAgICAgYXBwZWFyaW5nID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MlsxXTtcblxuICAgICAgdmFyIHR5cGUgPSBhcHBlYXJpbmcgPyAnYXBwZWFyJyA6ICdlbnRlcic7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsIHR5cGUsICdhY3RpdmUnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRW50ZXJpbmcpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FbnRlcmluZyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FbnRlcmVkID0gZnVuY3Rpb24gKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQzID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50M1swXSxcbiAgICAgICAgICBhcHBlYXJpbmcgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQzWzFdO1xuXG4gICAgICB2YXIgdHlwZSA9IGFwcGVhcmluZyA/ICdhcHBlYXInIDogJ2VudGVyJztcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCB0eXBlKTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgdHlwZSwgJ2RvbmUnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRW50ZXJlZCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkVudGVyZWQobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRXhpdCA9IGZ1bmN0aW9uIChtYXliZU5vZGUpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQ0ID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQ0WzBdO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdhcHBlYXInKTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnZW50ZXInKTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgJ2V4aXQnLCAnYmFzZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FeGl0KSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRXhpdChtYXliZU5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkV4aXRpbmcgPSBmdW5jdGlvbiAobWF5YmVOb2RlKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NSA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NVswXTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgJ2V4aXQnLCAnYWN0aXZlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkV4aXRpbmcpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FeGl0aW5nKG1heWJlTm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRXhpdGVkID0gZnVuY3Rpb24gKG1heWJlTm9kZSkge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDYgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDZbMF07XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgJ2V4aXQnKTtcblxuICAgICAgX3RoaXMuYWRkQ2xhc3Mobm9kZSwgJ2V4aXQnLCAnZG9uZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FeGl0ZWQpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FeGl0ZWQobWF5YmVOb2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICByZXR1cm4gX3RoaXMucHJvcHMubm9kZVJlZiA/IFtfdGhpcy5wcm9wcy5ub2RlUmVmLmN1cnJlbnQsIG1heWJlTm9kZV0gLy8gaGVyZSBgbWF5YmVOb2RlYCBpcyBhY3R1YWxseSBgYXBwZWFyaW5nYFxuICAgICAgOiBbbWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZ107XG4gICAgfTtcblxuICAgIF90aGlzLmdldENsYXNzTmFtZXMgPSBmdW5jdGlvbiAodHlwZSkge1xuICAgICAgdmFyIGNsYXNzTmFtZXMgPSBfdGhpcy5wcm9wcy5jbGFzc05hbWVzO1xuICAgICAgdmFyIGlzU3RyaW5nQ2xhc3NOYW1lcyA9IHR5cGVvZiBjbGFzc05hbWVzID09PSAnc3RyaW5nJztcbiAgICAgIHZhciBwcmVmaXggPSBpc1N0cmluZ0NsYXNzTmFtZXMgJiYgY2xhc3NOYW1lcyA/IGNsYXNzTmFtZXMgKyBcIi1cIiA6ICcnO1xuICAgICAgdmFyIGJhc2VDbGFzc05hbWUgPSBpc1N0cmluZ0NsYXNzTmFtZXMgPyBcIlwiICsgcHJlZml4ICsgdHlwZSA6IGNsYXNzTmFtZXNbdHlwZV07XG4gICAgICB2YXIgYWN0aXZlQ2xhc3NOYW1lID0gaXNTdHJpbmdDbGFzc05hbWVzID8gYmFzZUNsYXNzTmFtZSArIFwiLWFjdGl2ZVwiIDogY2xhc3NOYW1lc1t0eXBlICsgXCJBY3RpdmVcIl07XG4gICAgICB2YXIgZG9uZUNsYXNzTmFtZSA9IGlzU3RyaW5nQ2xhc3NOYW1lcyA/IGJhc2VDbGFzc05hbWUgKyBcIi1kb25lXCIgOiBjbGFzc05hbWVzW3R5cGUgKyBcIkRvbmVcIl07XG4gICAgICByZXR1cm4ge1xuICAgICAgICBiYXNlQ2xhc3NOYW1lOiBiYXNlQ2xhc3NOYW1lLFxuICAgICAgICBhY3RpdmVDbGFzc05hbWU6IGFjdGl2ZUNsYXNzTmFtZSxcbiAgICAgICAgZG9uZUNsYXNzTmFtZTogZG9uZUNsYXNzTmFtZVxuICAgICAgfTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IENTU1RyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5hZGRDbGFzcyA9IGZ1bmN0aW9uIGFkZENsYXNzKG5vZGUsIHR5cGUsIHBoYXNlKSB7XG4gICAgdmFyIGNsYXNzTmFtZSA9IHRoaXMuZ2V0Q2xhc3NOYW1lcyh0eXBlKVtwaGFzZSArIFwiQ2xhc3NOYW1lXCJdO1xuXG4gICAgdmFyIF90aGlzJGdldENsYXNzTmFtZXMgPSB0aGlzLmdldENsYXNzTmFtZXMoJ2VudGVyJyksXG4gICAgICAgIGRvbmVDbGFzc05hbWUgPSBfdGhpcyRnZXRDbGFzc05hbWVzLmRvbmVDbGFzc05hbWU7XG5cbiAgICBpZiAodHlwZSA9PT0gJ2FwcGVhcicgJiYgcGhhc2UgPT09ICdkb25lJyAmJiBkb25lQ2xhc3NOYW1lKSB7XG4gICAgICBjbGFzc05hbWUgKz0gXCIgXCIgKyBkb25lQ2xhc3NOYW1lO1xuICAgIH0gLy8gVGhpcyBpcyB0byBmb3JjZSBhIHJlcGFpbnQsXG4gICAgLy8gd2hpY2ggaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHRyYW5zaXRpb24gc3R5bGVzIHdoZW4gYWRkaW5nIGEgY2xhc3MgbmFtZS5cblxuXG4gICAgaWYgKHBoYXNlID09PSAnYWN0aXZlJykge1xuICAgICAgaWYgKG5vZGUpIGZvcmNlUmVmbG93KG5vZGUpO1xuICAgIH1cblxuICAgIGlmIChjbGFzc05hbWUpIHtcbiAgICAgIHRoaXMuYXBwbGllZENsYXNzZXNbdHlwZV1bcGhhc2VdID0gY2xhc3NOYW1lO1xuXG4gICAgICBfYWRkQ2xhc3Mobm9kZSwgY2xhc3NOYW1lKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbW92ZUNsYXNzZXMgPSBmdW5jdGlvbiByZW1vdmVDbGFzc2VzKG5vZGUsIHR5cGUpIHtcbiAgICB2YXIgX3RoaXMkYXBwbGllZENsYXNzZXMkID0gdGhpcy5hcHBsaWVkQ2xhc3Nlc1t0eXBlXSxcbiAgICAgICAgYmFzZUNsYXNzTmFtZSA9IF90aGlzJGFwcGxpZWRDbGFzc2VzJC5iYXNlLFxuICAgICAgICBhY3RpdmVDbGFzc05hbWUgPSBfdGhpcyRhcHBsaWVkQ2xhc3NlcyQuYWN0aXZlLFxuICAgICAgICBkb25lQ2xhc3NOYW1lID0gX3RoaXMkYXBwbGllZENsYXNzZXMkLmRvbmU7XG4gICAgdGhpcy5hcHBsaWVkQ2xhc3Nlc1t0eXBlXSA9IHt9O1xuXG4gICAgaWYgKGJhc2VDbGFzc05hbWUpIHtcbiAgICAgIHJlbW92ZUNsYXNzKG5vZGUsIGJhc2VDbGFzc05hbWUpO1xuICAgIH1cblxuICAgIGlmIChhY3RpdmVDbGFzc05hbWUpIHtcbiAgICAgIHJlbW92ZUNsYXNzKG5vZGUsIGFjdGl2ZUNsYXNzTmFtZSk7XG4gICAgfVxuXG4gICAgaWYgKGRvbmVDbGFzc05hbWUpIHtcbiAgICAgIHJlbW92ZUNsYXNzKG5vZGUsIGRvbmVDbGFzc05hbWUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIF8gPSBfdGhpcyRwcm9wcy5jbGFzc05hbWVzLFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjbGFzc05hbWVzXCJdKTtcblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIG9uRW50ZXI6IHRoaXMub25FbnRlcixcbiAgICAgIG9uRW50ZXJlZDogdGhpcy5vbkVudGVyZWQsXG4gICAgICBvbkVudGVyaW5nOiB0aGlzLm9uRW50ZXJpbmcsXG4gICAgICBvbkV4aXQ6IHRoaXMub25FeGl0LFxuICAgICAgb25FeGl0aW5nOiB0aGlzLm9uRXhpdGluZyxcbiAgICAgIG9uRXhpdGVkOiB0aGlzLm9uRXhpdGVkXG4gICAgfSkpO1xuICB9O1xuXG4gIHJldHVybiBDU1NUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5DU1NUcmFuc2l0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lczogJydcbn07XG5DU1NUcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IF9leHRlbmRzKHt9LCBUcmFuc2l0aW9uLnByb3BUeXBlcywge1xuICAvKipcbiAgICogVGhlIGFuaW1hdGlvbiBjbGFzc05hbWVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudCBhcyBpdCBhcHBlYXJzLCBlbnRlcnMsXG4gICAqIGV4aXRzIG9yIGhhcyBmaW5pc2hlZCB0aGUgdHJhbnNpdGlvbi4gQSBzaW5nbGUgbmFtZSBjYW4gYmUgcHJvdmlkZWQsIHdoaWNoXG4gICAqIHdpbGwgYmUgc3VmZml4ZWQgZm9yIGVhY2ggc3RhZ2UsIGUuZy4gYGNsYXNzTmFtZXM9XCJmYWRlXCJgIGFwcGxpZXM6XG4gICAqXG4gICAqIC0gYGZhZGUtYXBwZWFyYCwgYGZhZGUtYXBwZWFyLWFjdGl2ZWAsIGBmYWRlLWFwcGVhci1kb25lYFxuICAgKiAtIGBmYWRlLWVudGVyYCwgYGZhZGUtZW50ZXItYWN0aXZlYCwgYGZhZGUtZW50ZXItZG9uZWBcbiAgICogLSBgZmFkZS1leGl0YCwgYGZhZGUtZXhpdC1hY3RpdmVgLCBgZmFkZS1leGl0LWRvbmVgXG4gICAqXG4gICAqIEEgZmV3IGRldGFpbHMgdG8gbm90ZSBhYm91dCBob3cgdGhlc2UgY2xhc3NlcyBhcmUgYXBwbGllZDpcbiAgICpcbiAgICogMS4gVGhleSBhcmUgX2pvaW5lZF8gd2l0aCB0aGUgb25lcyB0aGF0IGFyZSBhbHJlYWR5IGRlZmluZWQgb24gdGhlIGNoaWxkXG4gICAqICAgIGNvbXBvbmVudCwgc28gaWYgeW91IHdhbnQgdG8gYWRkIHNvbWUgYmFzZSBzdHlsZXMsIHlvdSBjYW4gdXNlXG4gICAqICAgIGBjbGFzc05hbWVgIHdpdGhvdXQgd29ycnlpbmcgdGhhdCBpdCB3aWxsIGJlIG92ZXJyaWRkZW4uXG4gICAqXG4gICAqIDIuIElmIHRoZSB0cmFuc2l0aW9uIGNvbXBvbmVudCBtb3VudHMgd2l0aCBgaW49e2ZhbHNlfWAsIG5vIGNsYXNzZXMgYXJlXG4gICAqICAgIGFwcGxpZWQgeWV0LiBZb3UgbWlnaHQgYmUgZXhwZWN0aW5nIGAqLWV4aXQtZG9uZWAsIGJ1dCBpZiB5b3UgdGhpbmtcbiAgICogICAgYWJvdXQgaXQsIGEgY29tcG9uZW50IGNhbm5vdCBmaW5pc2ggZXhpdGluZyBpZiBpdCBoYXNuJ3QgZW50ZXJlZCB5ZXQuXG4gICAqXG4gICAqIDIuIGBmYWRlLWFwcGVhci1kb25lYCBhbmQgYGZhZGUtZW50ZXItZG9uZWAgd2lsbCBfYm90aF8gYmUgYXBwbGllZC4gVGhpc1xuICAgKiAgICBhbGxvd3MgeW91IHRvIGRlZmluZSBkaWZmZXJlbnQgYmVoYXZpb3IgZm9yIHdoZW4gYXBwZWFyaW5nIGlzIGRvbmUgYW5kXG4gICAqICAgIHdoZW4gcmVndWxhciBlbnRlcmluZyBpcyBkb25lLCB1c2luZyBzZWxlY3RvcnMgbGlrZVxuICAgKiAgICBgLmZhZGUtZW50ZXItZG9uZTpub3QoLmZhZGUtYXBwZWFyLWRvbmUpYC4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCBhcHBseVxuICAgKiAgICBhbiBlcGljIGVudHJhbmNlIGFuaW1hdGlvbiB3aGVuIGVsZW1lbnQgZmlyc3QgYXBwZWFycyBpbiB0aGUgRE9NIHVzaW5nXG4gICAqICAgIFtBbmltYXRlLmNzc10oaHR0cHM6Ly9kYW5lZGVuLmdpdGh1Yi5pby9hbmltYXRlLmNzcy8pLiBPdGhlcndpc2UgeW91IGNhblxuICAgKiAgICBzaW1wbHkgdXNlIGBmYWRlLWVudGVyLWRvbmVgIGZvciBkZWZpbmluZyBib3RoIGNhc2VzLlxuICAgKlxuICAgKiBFYWNoIGluZGl2aWR1YWwgY2xhc3NOYW1lcyBjYW4gYWxzbyBiZSBzcGVjaWZpZWQgaW5kZXBlbmRlbnRseSBsaWtlOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjbGFzc05hbWVzPXt7XG4gICAqICBhcHBlYXI6ICdteS1hcHBlYXInLFxuICAgKiAgYXBwZWFyQWN0aXZlOiAnbXktYWN0aXZlLWFwcGVhcicsXG4gICAqICBhcHBlYXJEb25lOiAnbXktZG9uZS1hcHBlYXInLFxuICAgKiAgZW50ZXI6ICdteS1lbnRlcicsXG4gICAqICBlbnRlckFjdGl2ZTogJ215LWFjdGl2ZS1lbnRlcicsXG4gICAqICBlbnRlckRvbmU6ICdteS1kb25lLWVudGVyJyxcbiAgICogIGV4aXQ6ICdteS1leGl0JyxcbiAgICogIGV4aXRBY3RpdmU6ICdteS1hY3RpdmUtZXhpdCcsXG4gICAqICBleGl0RG9uZTogJ215LWRvbmUtZXhpdCcsXG4gICAqIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiBJZiB5b3Ugd2FudCB0byBzZXQgdGhlc2UgY2xhc3NlcyB1c2luZyBDU1MgTW9kdWxlczpcbiAgICpcbiAgICogYGBganNcbiAgICogaW1wb3J0IHN0eWxlcyBmcm9tICcuL3N0eWxlcy5jc3MnO1xuICAgKiBgYGBcbiAgICpcbiAgICogeW91IG1pZ2h0IHdhbnQgdG8gdXNlIGNhbWVsQ2FzZSBpbiB5b3VyIENTUyBmaWxlLCB0aGF0IHdheSBjb3VsZCBzaW1wbHlcbiAgICogc3ByZWFkIHRoZW0gaW5zdGVhZCBvZiBsaXN0aW5nIHRoZW0gb25lIGJ5IG9uZTpcbiAgICpcbiAgICogYGBganNcbiAgICogY2xhc3NOYW1lcz17eyAuLi5zdHlsZXMgfX1cbiAgICogYGBgXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmcgfCB7XG4gICAqICBhcHBlYXI/OiBzdHJpbmcsXG4gICAqICBhcHBlYXJBY3RpdmU/OiBzdHJpbmcsXG4gICAqICBhcHBlYXJEb25lPzogc3RyaW5nLFxuICAgKiAgZW50ZXI/OiBzdHJpbmcsXG4gICAqICBlbnRlckFjdGl2ZT86IHN0cmluZyxcbiAgICogIGVudGVyRG9uZT86IHN0cmluZyxcbiAgICogIGV4aXQ/OiBzdHJpbmcsXG4gICAqICBleGl0QWN0aXZlPzogc3RyaW5nLFxuICAgKiAgZXhpdERvbmU/OiBzdHJpbmcsXG4gICAqIH19XG4gICAqL1xuICBjbGFzc05hbWVzOiBjbGFzc05hbWVzU2hhcGUsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdlbnRlcicgb3IgJ2FwcGVhcicgY2xhc3MgaXNcbiAgICogYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdlbnRlci1hY3RpdmUnIG9yXG4gICAqICdhcHBlYXItYWN0aXZlJyBjbGFzcyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2VudGVyJyBvclxuICAgKiAnYXBwZWFyJyBjbGFzc2VzIGFyZSAqKnJlbW92ZWQqKiBhbmQgdGhlIGBkb25lYCBjbGFzcyBpcyBhZGRlZCB0byB0aGUgRE9NIG5vZGUuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdleGl0JyBjbGFzcyBpc1xuICAgKiBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KVxuICAgKi9cbiAgb25FeGl0OiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2V4aXQtYWN0aXZlJyBpcyBhcHBsaWVkLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KVxuICAgKi9cbiAgb25FeGl0aW5nOiBQcm9wVHlwZXMuZnVuYyxcblxuICAvKipcbiAgICogQSBgPFRyYW5zaXRpb24+YCBjYWxsYmFjayBmaXJlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgJ2V4aXQnIGNsYXNzZXNcbiAgICogYXJlICoqcmVtb3ZlZCoqIGFuZCB0aGUgYGV4aXQtZG9uZWAgY2xhc3MgaXMgYWRkZWQgdG8gdGhlIERPTSBub2RlLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KVxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jXG59KSA6IHt9O1xuZXhwb3J0IGRlZmF1bHQgQ1NTVHJhbnNpdGlvbjsiLCJpbXBvcnQgaGFzQ2xhc3MgZnJvbSAnLi9oYXNDbGFzcyc7XG4vKipcbiAqIEFkZHMgYSBDU1MgY2xhc3MgdG8gYSBnaXZlbiBlbGVtZW50LlxuICogXG4gKiBAcGFyYW0gZWxlbWVudCB0aGUgZWxlbWVudFxuICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzIG5hbWVcbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBhZGRDbGFzcyhlbGVtZW50LCBjbGFzc05hbWUpIHtcbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0KSBlbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtlbHNlIGlmICghaGFzQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSkgaWYgKHR5cGVvZiBlbGVtZW50LmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIGVsZW1lbnQuY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWUgKyBcIiBcIiArIGNsYXNzTmFtZTtlbHNlIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFzcycsIChlbGVtZW50LmNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTmFtZS5iYXNlVmFsIHx8ICcnKSArIFwiIFwiICsgY2xhc3NOYW1lKTtcbn0iLCIvKipcbiAqIENoZWNrcyBpZiBhIGdpdmVuIGVsZW1lbnQgaGFzIGEgQ1NTIGNsYXNzLlxuICogXG4gKiBAcGFyYW0gZWxlbWVudCB0aGUgZWxlbWVudFxuICogQHBhcmFtIGNsYXNzTmFtZSB0aGUgQ1NTIGNsYXNzIG5hbWVcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFzQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdCkgcmV0dXJuICEhY2xhc3NOYW1lICYmIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSk7XG4gIHJldHVybiAoXCIgXCIgKyAoZWxlbWVudC5jbGFzc05hbWUuYmFzZVZhbCB8fCBlbGVtZW50LmNsYXNzTmFtZSkgKyBcIiBcIikuaW5kZXhPZihcIiBcIiArIGNsYXNzTmFtZSArIFwiIFwiKSAhPT0gLTE7XG59IiwiaW1wb3J0IHsgQ2hpbGRyZW4sIGNsb25lRWxlbWVudCwgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG4vKipcbiAqIEdpdmVuIGB0aGlzLnByb3BzLmNoaWxkcmVuYCwgcmV0dXJuIGFuIG9iamVjdCBtYXBwaW5nIGtleSB0byBjaGlsZC5cbiAqXG4gKiBAcGFyYW0geyp9IGNoaWxkcmVuIGB0aGlzLnByb3BzLmNoaWxkcmVuYFxuICogQHJldHVybiB7b2JqZWN0fSBNYXBwaW5nIG9mIGtleSB0byBjaGlsZFxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGlsZE1hcHBpbmcoY2hpbGRyZW4sIG1hcEZuKSB7XG4gIHZhciBtYXBwZXIgPSBmdW5jdGlvbiBtYXBwZXIoY2hpbGQpIHtcbiAgICByZXR1cm4gbWFwRm4gJiYgaXNWYWxpZEVsZW1lbnQoY2hpbGQpID8gbWFwRm4oY2hpbGQpIDogY2hpbGQ7XG4gIH07XG5cbiAgdmFyIHJlc3VsdCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGlmIChjaGlsZHJlbikgQ2hpbGRyZW4ubWFwKGNoaWxkcmVuLCBmdW5jdGlvbiAoYykge1xuICAgIHJldHVybiBjO1xuICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgIC8vIHJ1biB0aGUgbWFwIGZ1bmN0aW9uIGhlcmUgaW5zdGVhZCBzbyB0aGF0IHRoZSBrZXkgaXMgdGhlIGNvbXB1dGVkIG9uZVxuICAgIHJlc3VsdFtjaGlsZC5rZXldID0gbWFwcGVyKGNoaWxkKTtcbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG4vKipcbiAqIFdoZW4geW91J3JlIGFkZGluZyBvciByZW1vdmluZyBjaGlsZHJlbiBzb21lIG1heSBiZSBhZGRlZCBvciByZW1vdmVkIGluIHRoZVxuICogc2FtZSByZW5kZXIgcGFzcy4gV2Ugd2FudCB0byBzaG93ICpib3RoKiBzaW5jZSB3ZSB3YW50IHRvIHNpbXVsdGFuZW91c2x5XG4gKiBhbmltYXRlIGVsZW1lbnRzIGluIGFuZCBvdXQuIFRoaXMgZnVuY3Rpb24gdGFrZXMgYSBwcmV2aW91cyBzZXQgb2Yga2V5c1xuICogYW5kIGEgbmV3IHNldCBvZiBrZXlzIGFuZCBtZXJnZXMgdGhlbSB3aXRoIGl0cyBiZXN0IGd1ZXNzIG9mIHRoZSBjb3JyZWN0XG4gKiBvcmRlcmluZy4gSW4gdGhlIGZ1dHVyZSB3ZSBtYXkgZXhwb3NlIHNvbWUgb2YgdGhlIHV0aWxpdGllcyBpblxuICogUmVhY3RNdWx0aUNoaWxkIHRvIG1ha2UgdGhpcyBlYXN5LCBidXQgZm9yIG5vdyBSZWFjdCBpdHNlbGYgZG9lcyBub3RcbiAqIGRpcmVjdGx5IGhhdmUgdGhpcyBjb25jZXB0IG9mIHRoZSB1bmlvbiBvZiBwcmV2Q2hpbGRyZW4gYW5kIG5leHRDaGlsZHJlblxuICogc28gd2UgaW1wbGVtZW50IGl0IGhlcmUuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IHByZXYgcHJldiBjaGlsZHJlbiBhcyByZXR1cm5lZCBmcm9tXG4gKiBgUmVhY3RUcmFuc2l0aW9uQ2hpbGRNYXBwaW5nLmdldENoaWxkTWFwcGluZygpYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBuZXh0IG5leHQgY2hpbGRyZW4gYXMgcmV0dXJuZWQgZnJvbVxuICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoKWAuXG4gKiBAcmV0dXJuIHtvYmplY3R9IGEga2V5IHNldCB0aGF0IGNvbnRhaW5zIGFsbCBrZXlzIGluIGBwcmV2YCBhbmQgYWxsIGtleXNcbiAqIGluIGBuZXh0YCBpbiBhIHJlYXNvbmFibGUgb3JkZXIuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIG1lcmdlQ2hpbGRNYXBwaW5ncyhwcmV2LCBuZXh0KSB7XG4gIHByZXYgPSBwcmV2IHx8IHt9O1xuICBuZXh0ID0gbmV4dCB8fCB7fTtcblxuICBmdW5jdGlvbiBnZXRWYWx1ZUZvcktleShrZXkpIHtcbiAgICByZXR1cm4ga2V5IGluIG5leHQgPyBuZXh0W2tleV0gOiBwcmV2W2tleV07XG4gIH0gLy8gRm9yIGVhY2gga2V5IG9mIGBuZXh0YCwgdGhlIGxpc3Qgb2Yga2V5cyB0byBpbnNlcnQgYmVmb3JlIHRoYXQga2V5IGluXG4gIC8vIHRoZSBjb21iaW5lZCBsaXN0XG5cblxuICB2YXIgbmV4dEtleXNQZW5kaW5nID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgdmFyIHBlbmRpbmdLZXlzID0gW107XG5cbiAgZm9yICh2YXIgcHJldktleSBpbiBwcmV2KSB7XG4gICAgaWYgKHByZXZLZXkgaW4gbmV4dCkge1xuICAgICAgaWYgKHBlbmRpbmdLZXlzLmxlbmd0aCkge1xuICAgICAgICBuZXh0S2V5c1BlbmRpbmdbcHJldktleV0gPSBwZW5kaW5nS2V5cztcbiAgICAgICAgcGVuZGluZ0tleXMgPSBbXTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGVuZGluZ0tleXMucHVzaChwcmV2S2V5KTtcbiAgICB9XG4gIH1cblxuICB2YXIgaTtcbiAgdmFyIGNoaWxkTWFwcGluZyA9IHt9O1xuXG4gIGZvciAodmFyIG5leHRLZXkgaW4gbmV4dCkge1xuICAgIGlmIChuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV0pIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuZXh0S2V5c1BlbmRpbmdbbmV4dEtleV0ubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHBlbmRpbmdOZXh0S2V5ID0gbmV4dEtleXNQZW5kaW5nW25leHRLZXldW2ldO1xuICAgICAgICBjaGlsZE1hcHBpbmdbbmV4dEtleXNQZW5kaW5nW25leHRLZXldW2ldXSA9IGdldFZhbHVlRm9yS2V5KHBlbmRpbmdOZXh0S2V5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjaGlsZE1hcHBpbmdbbmV4dEtleV0gPSBnZXRWYWx1ZUZvcktleShuZXh0S2V5KTtcbiAgfSAvLyBGaW5hbGx5LCBhZGQgdGhlIGtleXMgd2hpY2ggZGlkbid0IGFwcGVhciBiZWZvcmUgYW55IGtleSBpbiBgbmV4dGBcblxuXG4gIGZvciAoaSA9IDA7IGkgPCBwZW5kaW5nS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNoaWxkTWFwcGluZ1twZW5kaW5nS2V5c1tpXV0gPSBnZXRWYWx1ZUZvcktleShwZW5kaW5nS2V5c1tpXSk7XG4gIH1cblxuICByZXR1cm4gY2hpbGRNYXBwaW5nO1xufVxuXG5mdW5jdGlvbiBnZXRQcm9wKGNoaWxkLCBwcm9wLCBwcm9wcykge1xuICByZXR1cm4gcHJvcHNbcHJvcF0gIT0gbnVsbCA/IHByb3BzW3Byb3BdIDogY2hpbGQucHJvcHNbcHJvcF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nKHByb3BzLCBvbkV4aXRlZCkge1xuICByZXR1cm4gZ2V0Q2hpbGRNYXBwaW5nKHByb3BzLmNoaWxkcmVuLCBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICByZXR1cm4gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICBpbjogdHJ1ZSxcbiAgICAgIGFwcGVhcjogZ2V0UHJvcChjaGlsZCwgJ2FwcGVhcicsIHByb3BzKSxcbiAgICAgIGVudGVyOiBnZXRQcm9wKGNoaWxkLCAnZW50ZXInLCBwcm9wcyksXG4gICAgICBleGl0OiBnZXRQcm9wKGNoaWxkLCAnZXhpdCcsIHByb3BzKVxuICAgIH0pO1xuICB9KTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXROZXh0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcywgcHJldkNoaWxkTWFwcGluZywgb25FeGl0ZWQpIHtcbiAgdmFyIG5leHRDaGlsZE1hcHBpbmcgPSBnZXRDaGlsZE1hcHBpbmcobmV4dFByb3BzLmNoaWxkcmVuKTtcbiAgdmFyIGNoaWxkcmVuID0gbWVyZ2VDaGlsZE1hcHBpbmdzKHByZXZDaGlsZE1hcHBpbmcsIG5leHRDaGlsZE1hcHBpbmcpO1xuICBPYmplY3Qua2V5cyhjaGlsZHJlbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGNoaWxkID0gY2hpbGRyZW5ba2V5XTtcbiAgICBpZiAoIWlzVmFsaWRFbGVtZW50KGNoaWxkKSkgcmV0dXJuO1xuICAgIHZhciBoYXNQcmV2ID0gKGtleSBpbiBwcmV2Q2hpbGRNYXBwaW5nKTtcbiAgICB2YXIgaGFzTmV4dCA9IChrZXkgaW4gbmV4dENoaWxkTWFwcGluZyk7XG4gICAgdmFyIHByZXZDaGlsZCA9IHByZXZDaGlsZE1hcHBpbmdba2V5XTtcbiAgICB2YXIgaXNMZWF2aW5nID0gaXNWYWxpZEVsZW1lbnQocHJldkNoaWxkKSAmJiAhcHJldkNoaWxkLnByb3BzLmluOyAvLyBpdGVtIGlzIG5ldyAoZW50ZXJpbmcpXG5cbiAgICBpZiAoaGFzTmV4dCAmJiAoIWhhc1ByZXYgfHwgaXNMZWF2aW5nKSkge1xuICAgICAgLy8gY29uc29sZS5sb2coJ2VudGVyaW5nJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICAgIGluOiB0cnVlLFxuICAgICAgICBleGl0OiBnZXRQcm9wKGNoaWxkLCAnZXhpdCcsIG5leHRQcm9wcyksXG4gICAgICAgIGVudGVyOiBnZXRQcm9wKGNoaWxkLCAnZW50ZXInLCBuZXh0UHJvcHMpXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFoYXNOZXh0ICYmIGhhc1ByZXYgJiYgIWlzTGVhdmluZykge1xuICAgICAgLy8gaXRlbSBpcyBvbGQgKGV4aXRpbmcpXG4gICAgICAvLyBjb25zb2xlLmxvZygnbGVhdmluZycsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgaW46IGZhbHNlXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGhhc05leHQgJiYgaGFzUHJldiAmJiBpc1ZhbGlkRWxlbWVudChwcmV2Q2hpbGQpKSB7XG4gICAgICAvLyBpdGVtIGhhc24ndCBjaGFuZ2VkIHRyYW5zaXRpb24gc3RhdGVzXG4gICAgICAvLyBjb3B5IG92ZXIgdGhlIGxhc3QgdHJhbnNpdGlvbiBwcm9wcztcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd1bmNoYW5nZWQnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIG9uRXhpdGVkOiBvbkV4aXRlZC5iaW5kKG51bGwsIGNoaWxkKSxcbiAgICAgICAgaW46IHByZXZDaGlsZC5wcm9wcy5pbixcbiAgICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBuZXh0UHJvcHMpLFxuICAgICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgbmV4dFByb3BzKVxuICAgICAgfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNoaWxkcmVuO1xufSIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cENvbnRleHQgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXBDb250ZXh0JztcbmltcG9ydCB7IGdldENoaWxkTWFwcGluZywgZ2V0SW5pdGlhbENoaWxkTWFwcGluZywgZ2V0TmV4dENoaWxkTWFwcGluZyB9IGZyb20gJy4vdXRpbHMvQ2hpbGRNYXBwaW5nJztcblxudmFyIHZhbHVlcyA9IE9iamVjdC52YWx1ZXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICByZXR1cm4gT2JqZWN0LmtleXMob2JqKS5tYXAoZnVuY3Rpb24gKGspIHtcbiAgICByZXR1cm4gb2JqW2tdO1xuICB9KTtcbn07XG5cbnZhciBkZWZhdWx0UHJvcHMgPSB7XG4gIGNvbXBvbmVudDogJ2RpdicsXG4gIGNoaWxkRmFjdG9yeTogZnVuY3Rpb24gY2hpbGRGYWN0b3J5KGNoaWxkKSB7XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9XG59O1xuLyoqXG4gKiBUaGUgYDxUcmFuc2l0aW9uR3JvdXA+YCBjb21wb25lbnQgbWFuYWdlcyBhIHNldCBvZiB0cmFuc2l0aW9uIGNvbXBvbmVudHNcbiAqIChgPFRyYW5zaXRpb24+YCBhbmQgYDxDU1NUcmFuc2l0aW9uPmApIGluIGEgbGlzdC4gTGlrZSB3aXRoIHRoZSB0cmFuc2l0aW9uXG4gKiBjb21wb25lbnRzLCBgPFRyYW5zaXRpb25Hcm91cD5gIGlzIGEgc3RhdGUgbWFjaGluZSBmb3IgbWFuYWdpbmcgdGhlIG1vdW50aW5nXG4gKiBhbmQgdW5tb3VudGluZyBvZiBjb21wb25lbnRzIG92ZXIgdGltZS5cbiAqXG4gKiBDb25zaWRlciB0aGUgZXhhbXBsZSBiZWxvdy4gQXMgaXRlbXMgYXJlIHJlbW92ZWQgb3IgYWRkZWQgdG8gdGhlIFRvZG9MaXN0IHRoZVxuICogYGluYCBwcm9wIGlzIHRvZ2dsZWQgYXV0b21hdGljYWxseSBieSB0aGUgYDxUcmFuc2l0aW9uR3JvdXA+YC5cbiAqXG4gKiBOb3RlIHRoYXQgYDxUcmFuc2l0aW9uR3JvdXA+YCAgZG9lcyBub3QgZGVmaW5lIGFueSBhbmltYXRpb24gYmVoYXZpb3IhXG4gKiBFeGFjdGx5IF9ob3dfIGEgbGlzdCBpdGVtIGFuaW1hdGVzIGlzIHVwIHRvIHRoZSBpbmRpdmlkdWFsIHRyYW5zaXRpb25cbiAqIGNvbXBvbmVudC4gVGhpcyBtZWFucyB5b3UgY2FuIG1peCBhbmQgbWF0Y2ggYW5pbWF0aW9ucyBhY3Jvc3MgZGlmZmVyZW50IGxpc3RcbiAqIGl0ZW1zLlxuICovXG5cbnZhciBUcmFuc2l0aW9uR3JvdXAgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVHJhbnNpdGlvbkdyb3VwLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBUcmFuc2l0aW9uR3JvdXAocHJvcHMsIGNvbnRleHQpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcywgY29udGV4dCkgfHwgdGhpcztcblxuICAgIHZhciBoYW5kbGVFeGl0ZWQgPSBfdGhpcy5oYW5kbGVFeGl0ZWQuYmluZChfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7IC8vIEluaXRpYWwgY2hpbGRyZW4gc2hvdWxkIGFsbCBiZSBlbnRlcmluZywgZGVwZW5kZW50IG9uIGFwcGVhclxuXG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIGNvbnRleHRWYWx1ZToge1xuICAgICAgICBpc01vdW50aW5nOiB0cnVlXG4gICAgICB9LFxuICAgICAgaGFuZGxlRXhpdGVkOiBoYW5kbGVFeGl0ZWQsXG4gICAgICBmaXJzdFJlbmRlcjogdHJ1ZVxuICAgIH07XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgdmFyIF9wcm90byA9IFRyYW5zaXRpb25Hcm91cC5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5tb3VudGVkID0gdHJ1ZTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGNvbnRleHRWYWx1ZToge1xuICAgICAgICBpc01vdW50aW5nOiBmYWxzZVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgIHRoaXMubW91bnRlZCA9IGZhbHNlO1xuICB9O1xuXG4gIFRyYW5zaXRpb25Hcm91cC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBfcmVmKSB7XG4gICAgdmFyIHByZXZDaGlsZE1hcHBpbmcgPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgICBoYW5kbGVFeGl0ZWQgPSBfcmVmLmhhbmRsZUV4aXRlZCxcbiAgICAgICAgZmlyc3RSZW5kZXIgPSBfcmVmLmZpcnN0UmVuZGVyO1xuICAgIHJldHVybiB7XG4gICAgICBjaGlsZHJlbjogZmlyc3RSZW5kZXIgPyBnZXRJbml0aWFsQ2hpbGRNYXBwaW5nKG5leHRQcm9wcywgaGFuZGxlRXhpdGVkKSA6IGdldE5leHRDaGlsZE1hcHBpbmcobmV4dFByb3BzLCBwcmV2Q2hpbGRNYXBwaW5nLCBoYW5kbGVFeGl0ZWQpLFxuICAgICAgZmlyc3RSZW5kZXI6IGZhbHNlXG4gICAgfTtcbiAgfSAvLyBub2RlIGlzIGB1bmRlZmluZWRgIHdoZW4gdXNlciBwcm92aWRlZCBgbm9kZVJlZmAgcHJvcFxuICA7XG5cbiAgX3Byb3RvLmhhbmRsZUV4aXRlZCA9IGZ1bmN0aW9uIGhhbmRsZUV4aXRlZChjaGlsZCwgbm9kZSkge1xuICAgIHZhciBjdXJyZW50Q2hpbGRNYXBwaW5nID0gZ2V0Q2hpbGRNYXBwaW5nKHRoaXMucHJvcHMuY2hpbGRyZW4pO1xuICAgIGlmIChjaGlsZC5rZXkgaW4gY3VycmVudENoaWxkTWFwcGluZykgcmV0dXJuO1xuXG4gICAgaWYgKGNoaWxkLnByb3BzLm9uRXhpdGVkKSB7XG4gICAgICBjaGlsZC5wcm9wcy5vbkV4aXRlZChub2RlKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5tb3VudGVkKSB7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgICB2YXIgY2hpbGRyZW4gPSBfZXh0ZW5kcyh7fSwgc3RhdGUuY2hpbGRyZW4pO1xuXG4gICAgICAgIGRlbGV0ZSBjaGlsZHJlbltjaGlsZC5rZXldO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgICB9O1xuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgQ29tcG9uZW50ID0gX3RoaXMkcHJvcHMuY29tcG9uZW50LFxuICAgICAgICBjaGlsZEZhY3RvcnkgPSBfdGhpcyRwcm9wcy5jaGlsZEZhY3RvcnksXG4gICAgICAgIHByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX3RoaXMkcHJvcHMsIFtcImNvbXBvbmVudFwiLCBcImNoaWxkRmFjdG9yeVwiXSk7XG5cbiAgICB2YXIgY29udGV4dFZhbHVlID0gdGhpcy5zdGF0ZS5jb250ZXh0VmFsdWU7XG4gICAgdmFyIGNoaWxkcmVuID0gdmFsdWVzKHRoaXMuc3RhdGUuY2hpbGRyZW4pLm1hcChjaGlsZEZhY3RvcnkpO1xuICAgIGRlbGV0ZSBwcm9wcy5hcHBlYXI7XG4gICAgZGVsZXRlIHByb3BzLmVudGVyO1xuICAgIGRlbGV0ZSBwcm9wcy5leGl0O1xuXG4gICAgaWYgKENvbXBvbmVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IGNvbnRleHRWYWx1ZVxuICAgICAgfSwgY2hpbGRyZW4pO1xuICAgIH1cblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZTogY29udGV4dFZhbHVlXG4gICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBwcm9wcywgY2hpbGRyZW4pKTtcbiAgfTtcblxuICByZXR1cm4gVHJhbnNpdGlvbkdyb3VwO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5UcmFuc2l0aW9uR3JvdXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICAvKipcbiAgICogYDxUcmFuc2l0aW9uR3JvdXA+YCByZW5kZXJzIGEgYDxkaXY+YCBieSBkZWZhdWx0LiBZb3UgY2FuIGNoYW5nZSB0aGlzXG4gICAqIGJlaGF2aW9yIGJ5IHByb3ZpZGluZyBhIGBjb21wb25lbnRgIHByb3AuXG4gICAqIElmIHlvdSB1c2UgUmVhY3QgdjE2KyBhbmQgd291bGQgbGlrZSB0byBhdm9pZCBhIHdyYXBwaW5nIGA8ZGl2PmAgZWxlbWVudFxuICAgKiB5b3UgY2FuIHBhc3MgaW4gYGNvbXBvbmVudD17bnVsbH1gLiBUaGlzIGlzIHVzZWZ1bCBpZiB0aGUgd3JhcHBpbmcgZGl2XG4gICAqIGJvcmtzIHlvdXIgY3NzIHN0eWxlcy5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmFueSxcblxuICAvKipcbiAgICogQSBzZXQgb2YgYDxUcmFuc2l0aW9uPmAgY29tcG9uZW50cywgdGhhdCBhcmUgdG9nZ2xlZCBgaW5gIGFuZCBvdXQgYXMgdGhleVxuICAgKiBsZWF2ZS4gdGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAgd2lsbCBpbmplY3Qgc3BlY2lmaWMgdHJhbnNpdGlvbiBwcm9wcywgc29cbiAgICogcmVtZW1iZXIgdG8gc3ByZWFkIHRoZW0gdGhyb3VnaCBpZiB5b3UgYXJlIHdyYXBwaW5nIHRoZSBgPFRyYW5zaXRpb24+YCBhc1xuICAgKiB3aXRoIG91ciBgPEZhZGU+YCBleGFtcGxlLlxuICAgKlxuICAgKiBXaGlsZSB0aGlzIGNvbXBvbmVudCBpcyBtZWFudCBmb3IgbXVsdGlwbGUgYFRyYW5zaXRpb25gIG9yIGBDU1NUcmFuc2l0aW9uYFxuICAgKiBjaGlsZHJlbiwgc29tZXRpbWVzIHlvdSBtYXkgd2FudCB0byBoYXZlIGEgc2luZ2xlIHRyYW5zaXRpb24gY2hpbGQgd2l0aFxuICAgKiBjb250ZW50IHRoYXQgeW91IHdhbnQgdG8gYmUgdHJhbnNpdGlvbmVkIG91dCBhbmQgaW4gd2hlbiB5b3UgY2hhbmdlIGl0XG4gICAqIChlLmcuIHJvdXRlcywgaW1hZ2VzIGV0Yy4pIEluIHRoYXQgY2FzZSB5b3UgY2FuIGNoYW5nZSB0aGUgYGtleWAgcHJvcCBvZlxuICAgKiB0aGUgdHJhbnNpdGlvbiBjaGlsZCBhcyB5b3UgY2hhbmdlIGl0cyBjb250ZW50LCB0aGlzIHdpbGwgY2F1c2VcbiAgICogYFRyYW5zaXRpb25Hcm91cGAgdG8gdHJhbnNpdGlvbiB0aGUgY2hpbGQgb3V0IGFuZCBiYWNrIGluLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGFwcGVhciBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBBIGNvbnZlbmllbmNlIHByb3AgdGhhdCBlbmFibGVzIG9yIGRpc2FibGVzIGVudGVyIGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBleGl0IGFuaW1hdGlvbnNcbiAgICogZm9yIGFsbCBjaGlsZHJlbi4gTm90ZSB0aGF0IHNwZWNpZnlpbmcgdGhpcyB3aWxsIG92ZXJyaWRlIGFueSBkZWZhdWx0cyBzZXRcbiAgICogb24gaW5kaXZpZHVhbCBjaGlsZHJlbiBUcmFuc2l0aW9ucy5cbiAgICovXG4gIGV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBZb3UgbWF5IG5lZWQgdG8gYXBwbHkgcmVhY3RpdmUgdXBkYXRlcyB0byBhIGNoaWxkIGFzIGl0IGlzIGV4aXRpbmcuXG4gICAqIFRoaXMgaXMgZ2VuZXJhbGx5IGRvbmUgYnkgdXNpbmcgYGNsb25lRWxlbWVudGAgaG93ZXZlciBpbiB0aGUgY2FzZSBvZiBhbiBleGl0aW5nXG4gICAqIGNoaWxkIHRoZSBlbGVtZW50IGhhcyBhbHJlYWR5IGJlZW4gcmVtb3ZlZCBhbmQgbm90IGFjY2Vzc2libGUgdG8gdGhlIGNvbnN1bWVyLlxuICAgKlxuICAgKiBJZiB5b3UgZG8gbmVlZCB0byB1cGRhdGUgYSBjaGlsZCBhcyBpdCBsZWF2ZXMgeW91IGNhbiBwcm92aWRlIGEgYGNoaWxkRmFjdG9yeWBcbiAgICogdG8gd3JhcCBldmVyeSBjaGlsZCwgZXZlbiB0aGUgb25lcyB0aGF0IGFyZSBsZWF2aW5nLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihjaGlsZDogUmVhY3RFbGVtZW50KSAtPiBSZWFjdEVsZW1lbnRcbiAgICovXG4gIGNoaWxkRmFjdG9yeTogUHJvcFR5cGVzLmZ1bmNcbn0gOiB7fTtcblRyYW5zaXRpb25Hcm91cC5kZWZhdWx0UHJvcHMgPSBkZWZhdWx0UHJvcHM7XG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uR3JvdXA7IiwiZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChlKSB7XG4gIGlmICh2b2lkIDAgPT09IGUpIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgcmV0dXJuIGU7XG59XG5leHBvcnQgeyBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXAgZnJvbSAnLi9UcmFuc2l0aW9uR3JvdXAnO1xuLyoqXG4gKiBUaGUgYDxSZXBsYWNlVHJhbnNpdGlvbj5gIGNvbXBvbmVudCBpcyBhIHNwZWNpYWxpemVkIGBUcmFuc2l0aW9uYCBjb21wb25lbnRcbiAqIHRoYXQgYW5pbWF0ZXMgYmV0d2VlbiB0d28gY2hpbGRyZW4uXG4gKlxuICogYGBganN4XG4gKiA8UmVwbGFjZVRyYW5zaXRpb24gaW4+XG4gKiAgIDxGYWRlPjxkaXY+SSBhcHBlYXIgZmlyc3Q8L2Rpdj48L0ZhZGU+XG4gKiAgIDxGYWRlPjxkaXY+SSByZXBsYWNlIHRoZSBhYm92ZTwvZGl2PjwvRmFkZT5cbiAqIDwvUmVwbGFjZVRyYW5zaXRpb24+XG4gKiBgYGBcbiAqL1xuXG52YXIgUmVwbGFjZVRyYW5zaXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoUmVwbGFjZVRyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIFJlcGxhY2VUcmFuc2l0aW9uKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBfYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIF9hcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoX2FyZ3MpKSB8fCB0aGlzO1xuXG4gICAgX3RoaXMuaGFuZGxlRW50ZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkVudGVyJywgMCwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUVudGVyaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjMgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4zKSwgX2tleTMgPSAwOyBfa2V5MyA8IF9sZW4zOyBfa2V5MysrKSB7XG4gICAgICAgIGFyZ3NbX2tleTNdID0gYXJndW1lbnRzW19rZXkzXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FbnRlcmluZycsIDAsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFbnRlcmVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjQgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW40KSwgX2tleTQgPSAwOyBfa2V5NCA8IF9sZW40OyBfa2V5NCsrKSB7XG4gICAgICAgIGFyZ3NbX2tleTRdID0gYXJndW1lbnRzW19rZXk0XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FbnRlcmVkJywgMCwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUV4aXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNSA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjUpLCBfa2V5NSA9IDA7IF9rZXk1IDwgX2xlbjU7IF9rZXk1KyspIHtcbiAgICAgICAgYXJnc1tfa2V5NV0gPSBhcmd1bWVudHNbX2tleTVdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkV4aXQnLCAxLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRXhpdGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW42ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNiksIF9rZXk2ID0gMDsgX2tleTYgPCBfbGVuNjsgX2tleTYrKykge1xuICAgICAgICBhcmdzW19rZXk2XSA9IGFyZ3VtZW50c1tfa2V5Nl07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRXhpdGluZycsIDEsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFeGl0ZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjcpLCBfa2V5NyA9IDA7IF9rZXk3IDwgX2xlbjc7IF9rZXk3KyspIHtcbiAgICAgICAgYXJnc1tfa2V5N10gPSBhcmd1bWVudHNbX2tleTddO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkV4aXRlZCcsIDEsIGFyZ3MpO1xuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gUmVwbGFjZVRyYW5zaXRpb24ucHJvdG90eXBlO1xuXG4gIF9wcm90by5oYW5kbGVMaWZlY3ljbGUgPSBmdW5jdGlvbiBoYW5kbGVMaWZlY3ljbGUoaGFuZGxlciwgaWR4LCBvcmlnaW5hbEFyZ3MpIHtcbiAgICB2YXIgX2NoaWxkJHByb3BzO1xuXG4gICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICB2YXIgY2hpbGQgPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKVtpZHhdO1xuICAgIGlmIChjaGlsZC5wcm9wc1toYW5kbGVyXSkgKF9jaGlsZCRwcm9wcyA9IGNoaWxkLnByb3BzKVtoYW5kbGVyXS5hcHBseShfY2hpbGQkcHJvcHMsIG9yaWdpbmFsQXJncyk7XG5cbiAgICBpZiAodGhpcy5wcm9wc1toYW5kbGVyXSkge1xuICAgICAgdmFyIG1heWJlTm9kZSA9IGNoaWxkLnByb3BzLm5vZGVSZWYgPyB1bmRlZmluZWQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICAgIHRoaXMucHJvcHNbaGFuZGxlcl0obWF5YmVOb2RlKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBpblByb3AgPSBfdGhpcyRwcm9wcy5pbixcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY2hpbGRyZW5cIiwgXCJpblwiXSk7XG5cbiAgICB2YXIgX1JlYWN0JENoaWxkcmVuJHRvQXJyID0gUmVhY3QuQ2hpbGRyZW4udG9BcnJheShjaGlsZHJlbiksXG4gICAgICAgIGZpcnN0ID0gX1JlYWN0JENoaWxkcmVuJHRvQXJyWzBdLFxuICAgICAgICBzZWNvbmQgPSBfUmVhY3QkQ2hpbGRyZW4kdG9BcnJbMV07XG5cbiAgICBkZWxldGUgcHJvcHMub25FbnRlcjtcbiAgICBkZWxldGUgcHJvcHMub25FbnRlcmluZztcbiAgICBkZWxldGUgcHJvcHMub25FbnRlcmVkO1xuICAgIGRlbGV0ZSBwcm9wcy5vbkV4aXQ7XG4gICAgZGVsZXRlIHByb3BzLm9uRXhpdGluZztcbiAgICBkZWxldGUgcHJvcHMub25FeGl0ZWQ7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cCwgcHJvcHMsIGluUHJvcCA/IFJlYWN0LmNsb25lRWxlbWVudChmaXJzdCwge1xuICAgICAga2V5OiAnZmlyc3QnLFxuICAgICAgb25FbnRlcjogdGhpcy5oYW5kbGVFbnRlcixcbiAgICAgIG9uRW50ZXJpbmc6IHRoaXMuaGFuZGxlRW50ZXJpbmcsXG4gICAgICBvbkVudGVyZWQ6IHRoaXMuaGFuZGxlRW50ZXJlZFxuICAgIH0pIDogUmVhY3QuY2xvbmVFbGVtZW50KHNlY29uZCwge1xuICAgICAga2V5OiAnc2Vjb25kJyxcbiAgICAgIG9uRW50ZXI6IHRoaXMuaGFuZGxlRXhpdCxcbiAgICAgIG9uRW50ZXJpbmc6IHRoaXMuaGFuZGxlRXhpdGluZyxcbiAgICAgIG9uRW50ZXJlZDogdGhpcy5oYW5kbGVFeGl0ZWRcbiAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuIFJlcGxhY2VUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5SZXBsYWNlVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIGluOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBjaGlsZHJlbjogZnVuY3Rpb24gY2hpbGRyZW4ocHJvcHMsIHByb3BOYW1lKSB7XG4gICAgaWYgKFJlYWN0LkNoaWxkcmVuLmNvdW50KHByb3BzW3Byb3BOYW1lXSkgIT09IDIpIHJldHVybiBuZXcgRXJyb3IoXCJcXFwiXCIgKyBwcm9wTmFtZSArIFwiXFxcIiBtdXN0IGJlIGV4YWN0bHkgdHdvIHRyYW5zaXRpb24gY29tcG9uZW50cy5cIik7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn0gOiB7fTtcbmV4cG9ydCBkZWZhdWx0IFJlcGxhY2VUcmFuc2l0aW9uOyIsImltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZVwiO1xuXG52YXIgX2xlYXZlUmVuZGVycywgX2VudGVyUmVuZGVycztcblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBFTlRFUkVELCBFTlRFUklORywgRVhJVElORyB9IGZyb20gJy4vVHJhbnNpdGlvbic7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuXG5mdW5jdGlvbiBhcmVDaGlsZHJlbkRpZmZlcmVudChvbGRDaGlsZHJlbiwgbmV3Q2hpbGRyZW4pIHtcbiAgaWYgKG9sZENoaWxkcmVuID09PSBuZXdDaGlsZHJlbikgcmV0dXJuIGZhbHNlO1xuXG4gIGlmIChSZWFjdC5pc1ZhbGlkRWxlbWVudChvbGRDaGlsZHJlbikgJiYgUmVhY3QuaXNWYWxpZEVsZW1lbnQobmV3Q2hpbGRyZW4pICYmIG9sZENoaWxkcmVuLmtleSAhPSBudWxsICYmIG9sZENoaWxkcmVuLmtleSA9PT0gbmV3Q2hpbGRyZW4ua2V5KSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4vKipcbiAqIEVudW0gb2YgbW9kZXMgZm9yIFN3aXRjaFRyYW5zaXRpb24gY29tcG9uZW50XG4gKiBAZW51bSB7IHN0cmluZyB9XG4gKi9cblxuXG5leHBvcnQgdmFyIG1vZGVzID0ge1xuICBvdXQ6ICdvdXQtaW4nLFxuICBpbjogJ2luLW91dCdcbn07XG5cbnZhciBjYWxsSG9vayA9IGZ1bmN0aW9uIGNhbGxIb29rKGVsZW1lbnQsIG5hbWUsIGNiKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIF9lbGVtZW50JHByb3BzO1xuXG4gICAgZWxlbWVudC5wcm9wc1tuYW1lXSAmJiAoX2VsZW1lbnQkcHJvcHMgPSBlbGVtZW50LnByb3BzKVtuYW1lXS5hcHBseShfZWxlbWVudCRwcm9wcywgYXJndW1lbnRzKTtcbiAgICBjYigpO1xuICB9O1xufTtcblxudmFyIGxlYXZlUmVuZGVycyA9IChfbGVhdmVSZW5kZXJzID0ge30sIF9sZWF2ZVJlbmRlcnNbbW9kZXMub3V0XSA9IGZ1bmN0aW9uIChfcmVmKSB7XG4gIHZhciBjdXJyZW50ID0gX3JlZi5jdXJyZW50LFxuICAgICAgY2hhbmdlU3RhdGUgPSBfcmVmLmNoYW5nZVN0YXRlO1xuICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGN1cnJlbnQsIHtcbiAgICBpbjogZmFsc2UsXG4gICAgb25FeGl0ZWQ6IGNhbGxIb29rKGN1cnJlbnQsICdvbkV4aXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5nZVN0YXRlKEVOVEVSSU5HLCBudWxsKTtcbiAgICB9KVxuICB9KTtcbn0sIF9sZWF2ZVJlbmRlcnNbbW9kZXMuaW5dID0gZnVuY3Rpb24gKF9yZWYyKSB7XG4gIHZhciBjdXJyZW50ID0gX3JlZjIuY3VycmVudCxcbiAgICAgIGNoYW5nZVN0YXRlID0gX3JlZjIuY2hhbmdlU3RhdGUsXG4gICAgICBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuO1xuICByZXR1cm4gW2N1cnJlbnQsIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgIGluOiB0cnVlLFxuICAgIG9uRW50ZXJlZDogY2FsbEhvb2soY2hpbGRyZW4sICdvbkVudGVyZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGFuZ2VTdGF0ZShFTlRFUklORyk7XG4gICAgfSlcbiAgfSldO1xufSwgX2xlYXZlUmVuZGVycyk7XG52YXIgZW50ZXJSZW5kZXJzID0gKF9lbnRlclJlbmRlcnMgPSB7fSwgX2VudGVyUmVuZGVyc1ttb2Rlcy5vdXRdID0gZnVuY3Rpb24gKF9yZWYzKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYzLmNoaWxkcmVuLFxuICAgICAgY2hhbmdlU3RhdGUgPSBfcmVmMy5jaGFuZ2VTdGF0ZTtcbiAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgIGluOiB0cnVlLFxuICAgIG9uRW50ZXJlZDogY2FsbEhvb2soY2hpbGRyZW4sICdvbkVudGVyZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGFuZ2VTdGF0ZShFTlRFUkVELCBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgaW46IHRydWVcbiAgICAgIH0pKTtcbiAgICB9KVxuICB9KTtcbn0sIF9lbnRlclJlbmRlcnNbbW9kZXMuaW5dID0gZnVuY3Rpb24gKF9yZWY0KSB7XG4gIHZhciBjdXJyZW50ID0gX3JlZjQuY3VycmVudCxcbiAgICAgIGNoaWxkcmVuID0gX3JlZjQuY2hpbGRyZW4sXG4gICAgICBjaGFuZ2VTdGF0ZSA9IF9yZWY0LmNoYW5nZVN0YXRlO1xuICByZXR1cm4gW1JlYWN0LmNsb25lRWxlbWVudChjdXJyZW50LCB7XG4gICAgaW46IGZhbHNlLFxuICAgIG9uRXhpdGVkOiBjYWxsSG9vayhjdXJyZW50LCAnb25FeGl0ZWQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICBjaGFuZ2VTdGF0ZShFTlRFUkVELCBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgaW46IHRydWVcbiAgICAgIH0pKTtcbiAgICB9KVxuICB9KSwgUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgaW46IHRydWVcbiAgfSldO1xufSwgX2VudGVyUmVuZGVycyk7XG4vKipcbiAqIEEgdHJhbnNpdGlvbiBjb21wb25lbnQgaW5zcGlyZWQgYnkgdGhlIFt2dWUgdHJhbnNpdGlvbiBtb2Rlc10oaHR0cHM6Ly92dWVqcy5vcmcvdjIvZ3VpZGUvdHJhbnNpdGlvbnMuaHRtbCNUcmFuc2l0aW9uLU1vZGVzKS5cbiAqIFlvdSBjYW4gdXNlIGl0IHdoZW4geW91IHdhbnQgdG8gY29udHJvbCB0aGUgcmVuZGVyIGJldHdlZW4gc3RhdGUgdHJhbnNpdGlvbnMuXG4gKiBCYXNlZCBvbiB0aGUgc2VsZWN0ZWQgbW9kZSBhbmQgdGhlIGNoaWxkJ3Mga2V5IHdoaWNoIGlzIHRoZSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gIGNvbXBvbmVudCwgdGhlIGBTd2l0Y2hUcmFuc2l0aW9uYCBtYWtlcyBhIGNvbnNpc3RlbnQgdHJhbnNpdGlvbiBiZXR3ZWVuIHRoZW0uXG4gKlxuICogSWYgdGhlIGBvdXQtaW5gIG1vZGUgaXMgc2VsZWN0ZWQsIHRoZSBgU3dpdGNoVHJhbnNpdGlvbmAgd2FpdHMgdW50aWwgdGhlIG9sZCBjaGlsZCBsZWF2ZXMgYW5kIHRoZW4gaW5zZXJ0cyBhIG5ldyBjaGlsZC5cbiAqIElmIHRoZSBgaW4tb3V0YCBtb2RlIGlzIHNlbGVjdGVkLCB0aGUgYFN3aXRjaFRyYW5zaXRpb25gIGluc2VydHMgYSBuZXcgY2hpbGQgZmlyc3QsIHdhaXRzIGZvciB0aGUgbmV3IGNoaWxkIHRvIGVudGVyIGFuZCB0aGVuIHJlbW92ZXMgdGhlIG9sZCBjaGlsZC5cbiAqXG4gKiAqKk5vdGUqKjogSWYgeW91IHdhbnQgdGhlIGFuaW1hdGlvbiB0byBoYXBwZW4gc2ltdWx0YW5lb3VzbHlcbiAqICh0aGF0IGlzLCB0byBoYXZlIHRoZSBvbGQgY2hpbGQgcmVtb3ZlZCBhbmQgYSBuZXcgY2hpbGQgaW5zZXJ0ZWQgKiphdCB0aGUgc2FtZSB0aW1lKiopLFxuICogeW91IHNob3VsZCB1c2VcbiAqIFtgVHJhbnNpdGlvbkdyb3VwYF0oaHR0cHM6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uLWdyb3VwKVxuICogaW5zdGVhZC5cbiAqXG4gKiBgYGBqc3hcbiAqIGZ1bmN0aW9uIEFwcCgpIHtcbiAqICBjb25zdCBbc3RhdGUsIHNldFN0YXRlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAqICByZXR1cm4gKFxuICogICAgPFN3aXRjaFRyYW5zaXRpb24+XG4gKiAgICAgIDxDU1NUcmFuc2l0aW9uXG4gKiAgICAgICAga2V5PXtzdGF0ZSA/IFwiR29vZGJ5ZSwgd29ybGQhXCIgOiBcIkhlbGxvLCB3b3JsZCFcIn1cbiAqICAgICAgICBhZGRFbmRMaXN0ZW5lcj17KG5vZGUsIGRvbmUpID0+IG5vZGUuYWRkRXZlbnRMaXN0ZW5lcihcInRyYW5zaXRpb25lbmRcIiwgZG9uZSwgZmFsc2UpfVxuICogICAgICAgIGNsYXNzTmFtZXM9J2ZhZGUnXG4gKiAgICAgID5cbiAqICAgICAgICA8YnV0dG9uIG9uQ2xpY2s9eygpID0+IHNldFN0YXRlKHN0YXRlID0+ICFzdGF0ZSl9PlxuICogICAgICAgICAge3N0YXRlID8gXCJHb29kYnllLCB3b3JsZCFcIiA6IFwiSGVsbG8sIHdvcmxkIVwifVxuICogICAgICAgIDwvYnV0dG9uPlxuICogICAgICA8L0NTU1RyYW5zaXRpb24+XG4gKiAgICA8L1N3aXRjaFRyYW5zaXRpb24+XG4gKiAgKTtcbiAqIH1cbiAqIGBgYFxuICpcbiAqIGBgYGNzc1xuICogLmZhZGUtZW50ZXJ7XG4gKiAgICBvcGFjaXR5OiAwO1xuICogfVxuICogLmZhZGUtZXhpdHtcbiAqICAgIG9wYWNpdHk6IDE7XG4gKiB9XG4gKiAuZmFkZS1lbnRlci1hY3RpdmV7XG4gKiAgICBvcGFjaXR5OiAxO1xuICogfVxuICogLmZhZGUtZXhpdC1hY3RpdmV7XG4gKiAgICBvcGFjaXR5OiAwO1xuICogfVxuICogLmZhZGUtZW50ZXItYWN0aXZlLFxuICogLmZhZGUtZXhpdC1hY3RpdmV7XG4gKiAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDUwMG1zO1xuICogfVxuICogYGBgXG4gKi9cblxudmFyIFN3aXRjaFRyYW5zaXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoU3dpdGNoVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gU3dpdGNoVHJhbnNpdGlvbigpIHtcbiAgICB2YXIgX3RoaXM7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChhcmdzKSkgfHwgdGhpcztcbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHN0YXR1czogRU5URVJFRCxcbiAgICAgIGN1cnJlbnQ6IG51bGxcbiAgICB9O1xuICAgIF90aGlzLmFwcGVhcmVkID0gZmFsc2U7XG5cbiAgICBfdGhpcy5jaGFuZ2VTdGF0ZSA9IGZ1bmN0aW9uIChzdGF0dXMsIGN1cnJlbnQpIHtcbiAgICAgIGlmIChjdXJyZW50ID09PSB2b2lkIDApIHtcbiAgICAgICAgY3VycmVudCA9IF90aGlzLnN0YXRlLmN1cnJlbnQ7XG4gICAgICB9XG5cbiAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBzdGF0dXMsXG4gICAgICAgIGN1cnJlbnQ6IGN1cnJlbnRcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICB2YXIgX3Byb3RvID0gU3dpdGNoVHJhbnNpdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgdGhpcy5hcHBlYXJlZCA9IHRydWU7XG4gIH07XG5cbiAgU3dpdGNoVHJhbnNpdGlvbi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMocHJvcHMsIHN0YXRlKSB7XG4gICAgaWYgKHByb3BzLmNoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGN1cnJlbnQ6IG51bGxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLnN0YXR1cyA9PT0gRU5URVJJTkcgJiYgcHJvcHMubW9kZSA9PT0gbW9kZXMuaW4pIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogRU5URVJJTkdcbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKHN0YXRlLmN1cnJlbnQgJiYgYXJlQ2hpbGRyZW5EaWZmZXJlbnQoc3RhdGUuY3VycmVudCwgcHJvcHMuY2hpbGRyZW4pKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IEVYSVRJTkdcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnQ6IFJlYWN0LmNsb25lRWxlbWVudChwcm9wcy5jaGlsZHJlbiwge1xuICAgICAgICBpbjogdHJ1ZVxuICAgICAgfSlcbiAgICB9O1xuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIF90aGlzJHByb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wcy5jaGlsZHJlbixcbiAgICAgICAgbW9kZSA9IF90aGlzJHByb3BzLm1vZGUsXG4gICAgICAgIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgc3RhdHVzID0gX3RoaXMkc3RhdGUuc3RhdHVzLFxuICAgICAgICBjdXJyZW50ID0gX3RoaXMkc3RhdGUuY3VycmVudDtcbiAgICB2YXIgZGF0YSA9IHtcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbixcbiAgICAgIGN1cnJlbnQ6IGN1cnJlbnQsXG4gICAgICBjaGFuZ2VTdGF0ZTogdGhpcy5jaGFuZ2VTdGF0ZSxcbiAgICAgIHN0YXR1czogc3RhdHVzXG4gICAgfTtcbiAgICB2YXIgY29tcG9uZW50O1xuXG4gICAgc3dpdGNoIChzdGF0dXMpIHtcbiAgICAgIGNhc2UgRU5URVJJTkc6XG4gICAgICAgIGNvbXBvbmVudCA9IGVudGVyUmVuZGVyc1ttb2RlXShkYXRhKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgRVhJVElORzpcbiAgICAgICAgY29tcG9uZW50ID0gbGVhdmVSZW5kZXJzW21vZGVdKGRhdGEpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBFTlRFUkVEOlxuICAgICAgICBjb21wb25lbnQgPSBjdXJyZW50O1xuICAgIH1cblxuICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICB2YWx1ZToge1xuICAgICAgICBpc01vdW50aW5nOiAhdGhpcy5hcHBlYXJlZFxuICAgICAgfVxuICAgIH0sIGNvbXBvbmVudCk7XG4gIH07XG5cbiAgcmV0dXJuIFN3aXRjaFRyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblN3aXRjaFRyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICAvKipcbiAgICogVHJhbnNpdGlvbiBtb2Rlcy5cbiAgICogYG91dC1pbmA6IEN1cnJlbnQgZWxlbWVudCB0cmFuc2l0aW9ucyBvdXQgZmlyc3QsIHRoZW4gd2hlbiBjb21wbGV0ZSwgdGhlIG5ldyBlbGVtZW50IHRyYW5zaXRpb25zIGluLlxuICAgKiBgaW4tb3V0YDogTmV3IGVsZW1lbnQgdHJhbnNpdGlvbnMgaW4gZmlyc3QsIHRoZW4gd2hlbiBjb21wbGV0ZSwgdGhlIGN1cnJlbnQgZWxlbWVudCB0cmFuc2l0aW9ucyBvdXQuXG4gICAqXG4gICAqIEB0eXBlIHsnb3V0LWluJ3wnaW4tb3V0J31cbiAgICovXG4gIG1vZGU6IFByb3BUeXBlcy5vbmVPZihbbW9kZXMuaW4sIG1vZGVzLm91dF0pLFxuXG4gIC8qKlxuICAgKiBBbnkgYFRyYW5zaXRpb25gIG9yIGBDU1NUcmFuc2l0aW9uYCBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmVsZW1lbnQuaXNSZXF1aXJlZF0pXG59IDoge307XG5Td2l0Y2hUcmFuc2l0aW9uLmRlZmF1bHRQcm9wcyA9IHtcbiAgbW9kZTogbW9kZXMub3V0XG59O1xuZXhwb3J0IGRlZmF1bHQgU3dpdGNoVHJhbnNpdGlvbjsiLCJpbXBvcnQgeyBjc3MgfSBmcm9tIFwiQGVtb3Rpb24vY3NzXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gXCJwcm9wLXR5cGVzXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBMb2FkaW5nT3ZlcmxheVN0eWxlcyB9IGZyb20gXCIuL2xvYWRpbmctb3ZlcmxheVwiO1xuXG5pbnRlcmZhY2UgU3Bpbm5lclByb3BzIHtcbiAgZ2V0U3R5bGVzOiAoa2V5OiBrZXlvZiBMb2FkaW5nT3ZlcmxheVN0eWxlcywgcHJvdmlkZWRTdGF0ZT86IHN0cmluZykgPT4gYW55O1xuICBjeDogKGNsYXNzTmFtZTogc3RyaW5nLCBzdHlsZU5hbWU6IHN0cmluZykgPT4gc3RyaW5nO1xufVxuXG5jb25zdCBTcGlubmVyOiBSZWFjdC5GQzxTcGlubmVyUHJvcHM+ID0gKHsgZ2V0U3R5bGVzLCBjeCB9KSA9PiAoXG4gIDxkaXYgY2xhc3NOYW1lPXtjeChcInNwaW5uZXJcIiwgY3NzKGdldFN0eWxlcyhcInNwaW5uZXJcIikpKX0+XG4gICAgPHN2ZyB2aWV3Qm94PVwiMjUgMjUgNTAgNTBcIj5cbiAgICAgIDxjaXJjbGVcbiAgICAgICAgY3g9XCI1MFwiXG4gICAgICAgIGN5PVwiNTBcIlxuICAgICAgICByPVwiMjBcIlxuICAgICAgICBmaWxsPVwibm9uZVwiXG4gICAgICAgIHN0cm9rZVdpZHRoPVwiMlwiXG4gICAgICAgIHN0cm9rZU1pdGVybGltaXQ9XCIxMFwiXG4gICAgICAvPlxuICAgIDwvc3ZnPlxuICA8L2Rpdj5cbik7XG5cblNwaW5uZXIucHJvcFR5cGVzID0ge1xuICBnZXRTdHlsZXM6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGN4OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgU3Bpbm5lcjtcbiIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX187IiwiLy8gVHlwZSBkZWZpbml0aW9ucyBmb3IgUmVhY3QtTG9hZGluZy1PdmVybGF5IDEuMFxuLy8gUHJvamVjdDogaHR0cHM6Ly9naXRodWIuY29tL2RlcnJpY2twZWxsZXRpZXIvcmVhY3QtbG9hZGluZy1vdmVybGF5XG4vLyBEZWZpbml0aW9ucyBieTogRGVmaW5pdGVseVR5cGVkIDxodHRwczovL2dpdGh1Yi5jb20vRGVmaW5pdGVseVR5cGVkPlxuLy8gRGVmaW5pdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9EZWZpbml0ZWx5VHlwZWQvRGVmaW5pdGVseVR5cGVkXG5pbXBvcnQgeyBjc3MsIGN4IH0gZnJvbSBcIkBlbW90aW9uL2Nzc1wiO1xuaW1wb3J0IHsgQ1NTVHJhbnNpdGlvbiB9IGZyb20gXCJyZWFjdC10cmFuc2l0aW9uLWdyb3VwXCI7XG5cbmltcG9ydCBSZWFjdCwgeyBjcmVhdGVSZWYgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBTcGlubmVyIGZyb20gXCIuL2xvYWRpbmctb3ZlcmxheS1zcGlubmVyXCI7XG5pbXBvcnQgU1RZTEVTIGZyb20gXCIuL2xvYWRpbmctb3ZlcmxheS1zdHlsZXNcIjtcblxuZXhwb3J0IHR5cGUgTG9hZGluZ092ZXJsYXlTdHlsZXMgPSB7XG4gIGNvbnRlbnQ/OiAoYmFzZTogUmVhY3QuQ1NTUHJvcGVydGllcykgPT4gUmVhY3QuQ1NTUHJvcGVydGllcztcbiAgb3ZlcmxheT86IChiYXNlOiBSZWFjdC5DU1NQcm9wZXJ0aWVzKSA9PiBSZWFjdC5DU1NQcm9wZXJ0aWVzO1xuICBzcGlubmVyPzogKGJhc2U6IFJlYWN0LkNTU1Byb3BlcnRpZXMpID0+IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG4gIHdyYXBwZXI/OiAoYmFzZTogUmVhY3QuQ1NTUHJvcGVydGllcywgcHJvcHM/OiBhbnkpID0+IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRpbmdPdmVybGF5UHJvcHMge1xuICAvKiogZGVmYXVsdDogYGB0cnVlYGAgLSB3aGV0aGVyIHRoZSBsb2FkZXIgaXMgdmlzaWJsZS4gKi9cbiAgYWN0aXZlPzogYm9vbGVhbjtcblxuICAvKiogZGVmYXVsdDogYGA1MDBgYCAtIHRoZSB0cmFuc2l0aW9uIHNwZWVkIGZvciBmYWRpbmcgb3V0IHRoZSBvdmVybGF5LiAqL1xuICBmYWRlU3BlZWQ/OiBudW1iZXI7XG5cbiAgLyoqIGRlZmF1bHQ6IGBgdW5kZWZpbmVkYGAgLSBjbGljayBoYW5kbGVyIGZvciB0aGUgb3ZlcmxheSB3aGVuIGFjdGl2ZS4gKi9cbiAgb25DbGljaz86IFJlYWN0Lk1vdXNlRXZlbnRIYW5kbGVyPEhUTUxEaXZFbGVtZW50PjtcblxuICAvKipcbiAgICogZGVmYXVsdDogYGB1bmRlZmluZWRgYCAtIHRoZSBjbGFzc05hbWUgZm9yIHRoZSB3cmFwcGluZyBgYDxkaXYgLz5gYCB0aGF0XG4gICAqICBpcyBwcmVzZW50IHdoZXRoZXIgYWN0aXZlIG9yIG5vdC5cbiAgICovXG4gIGNsYXNzTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogZGVmYXVsdDogYGBfbG9hZGluZ19vdmVybGF5X2BgIC0gdGhlIHByZWZpeCBmb3IgYWxsIGNsYXNzTmFtZXMgb24gdGhlXG4gICAqIGdlbmVyYXRlZCBlbGVtZW50cy4gc2VlIFN0eWxpbmcgZm9yIG1vcmUgaW5mby5cbiAgICovXG4gIGNsYXNzTmFtZVByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogZGVmYXVsdDogYGBmYWxzZWBgIC0gcmVuZGVycyB0aGUgZGVmYXVsdCBzcGlubmVyIHdoZW4gdHJ1ZSAoYW5kIHdoZW4gdGhlXG4gICAqIGxvYWRlciBpcyBhY3RpdmUpLiBPdGhlcndpc2UgeW91IGNhbiBwcm92aWRlIGFueSB2YWxpZCByZWFjdCBub2RlIHRvIHVzZVxuICAgKiB5b3VyIG93biBzcGlubmVyLlxuICAgKi9cbiAgc3Bpbm5lcj86IGJvb2xlYW4gfCBSZWFjdC5SZWFjdE5vZGU7XG5cbiAgLyoqXG4gICAqIGRlZmF1bHQ6IGBgdW5kZWZpbmVkYGAgLSB0aGUgdGV4dCBvciByZWFjdCBub2RlIHRvIHJlbmRlciBpbiB0aGUgbG9hZGVyIG92ZXJsYXkgd2hlbiBhY3RpdmUuXG4gICAqL1xuICB0ZXh0PzogUmVhY3QuUmVhY3ROb2RlO1xuXG4gIC8qKlxuICAgKiBkZWZhdWx0OiBgYHVuZGVmaW5lZGBgIC0gc2VlIFN0eWxpbmcgZm9yIG1vcmUgaW5mby5cbiAgICovXG4gIHN0eWxlcz86IExvYWRpbmdPdmVybGF5U3R5bGVzO1xuXG4gIGNoaWxkcmVuPzogYW55O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExvYWRpbmdPdmVybGF5U3RhdGUge1xuICBvdmVyZmxvd0NTUzogYW55O1xufVxuXG5jbGFzcyBMb2FkaW5nT3ZlcmxheSBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxcbiAgTG9hZGluZ092ZXJsYXlQcm9wcyxcbiAgTG9hZGluZ092ZXJsYXlTdGF0ZVxuPiB7XG4gIHdyYXBwZXI6IGFueSA9IGNyZWF0ZVJlZigpO1xuICBub2RlUmVmOiBhbnkgPSBjcmVhdGVSZWYoKTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogTG9hZGluZ092ZXJsYXlQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyBvdmVyZmxvd0NTUzoge30gfTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIGNvbnN0IHdyYXBwZXJTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMud3JhcHBlci5jdXJyZW50KTtcbiAgICBjb25zdCBvdmVyZmxvd0NTUyA9IFtcIm92ZXJmbG93XCIsIFwib3ZlcmZsb3dYXCIsIFwib3ZlcmZsb3dZXCJdLnJlZHVjZShcbiAgICAgIChtOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBpOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHdyYXBwZXJTdHlsZVtpIGFzIGFueV0gIT09IFwidmlzaWJsZVwiKSBtW2ldID0gXCJoaWRkZW5cIjtcbiAgICAgICAgcmV0dXJuIG07XG4gICAgICB9LFxuICAgICAge31cbiAgICApO1xuICAgIHRoaXMuc2V0U3RhdGUoeyBvdmVyZmxvd0NTUyB9KTtcbiAgfVxuXG4gIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHM6IExvYWRpbmdPdmVybGF5UHJvcHMpIHtcbiAgICBjb25zdCB7IGFjdGl2ZSB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoYWN0aXZlKSB0aGlzLndyYXBwZXIuY3VycmVudC5zY3JvbGxUb3AgPSAwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBlbW90aW9uIGNzcyBvYmplY3QgZm9yIGEgZ2l2ZW4gZWxlbWVudCBrZXlcbiAgICogSWYgYSBjdXN0b20gc3R5bGUgd2FzIHByb3ZpZGVkIHZpYSBwcm9wcywgcnVuIGl0IHdpdGhcbiAgICogdGhlIGJhc2UgY3NzIG9iai5cbiAgICovXG4gIGdldFN0eWxlcyA9IChrZXk6IGtleW9mIExvYWRpbmdPdmVybGF5U3R5bGVzLCBwcm92aWRlZFN0YXRlPzogYW55KSA9PiB7XG4gICAgY29uc3QgYmFzZSA9IFNUWUxFU1trZXldKHByb3ZpZGVkU3RhdGUsIHRoaXMucHJvcHMpO1xuICAgIGNvbnN0IGN1c3RvbSA9IHRoaXMucHJvcHMuc3R5bGVzID8gdGhpcy5wcm9wcy5zdHlsZXNba2V5XSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoIWN1c3RvbSkgeyByZXR1cm4gYmFzZSB9O1xuICAgIHJldHVybiB0eXBlb2YgY3VzdG9tID09PSBcImZ1bmN0aW9uXCIgPyBjdXN0b20oYmFzZSwgdGhpcy5wcm9wcykgOiBjdXN0b207XG4gIH07XG5cbiAgLyoqXG4gICAqIENvbnZlbmllbmNlIGN4IHdyYXBwZXIgdG8gYWRkIHByZWZpeCBjbGFzc2VzIHRvIGVhY2ggb2YgdGhlIGNoaWxkXG4gICAqIGVsZW1lbnRzIGZvciBzdHlsaW5nIHB1cnBvc2VzLlxuICAgKi9cbiAgY3ggPSAobmFtZXM6IGFueSwgLi4uYXJnczogYW55W10pID0+IHtcbiAgICBjb25zdCBhcnIgPSBBcnJheS5pc0FycmF5KG5hbWVzKSA/IG5hbWVzIDogW25hbWVzXTtcbiAgICByZXR1cm4gY3goXG4gICAgICAuLi5hcnIubWFwKChuYW1lKSA9PlxuICAgICAgICBuYW1lXG4gICAgICAgICAgPyBgJHt0aGlzLnByb3BzLmNsYXNzTmFtZVByZWZpeCA/PyBcIl9sb2FkaW5nX292ZXJsYXlfXCJ9JHtuYW1lfWBcbiAgICAgICAgICA6IFwiXCJcbiAgICAgICksXG4gICAgICAuLi5hcmdzXG4gICAgKTtcbiAgfTtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBvbkNsaWNrLFxuICAgICAgYWN0aXZlLFxuICAgICAgZmFkZVNwZWVkID0gNTAwLFxuICAgICAgc3Bpbm5lcixcbiAgICAgIHRleHQsXG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBkYXRhLXRlc3RpZD1cIndyYXBwZXJcIlxuICAgICAgICByZWY9e3RoaXMud3JhcHBlcn1cbiAgICAgICAgY2xhc3NOYW1lPXt0aGlzLmN4KFxuICAgICAgICAgIFtcIndyYXBwZXJcIiwgYWN0aXZlICYmIFwid3JhcHBlci0tYWN0aXZlXCJdLFxuICAgICAgICAgIGNzcyh0aGlzLmdldFN0eWxlcyhcIndyYXBwZXJcIiwgYWN0aXZlID8gdGhpcy5zdGF0ZS5vdmVyZmxvd0NTUyA6IHt9KSksXG4gICAgICAgICAgY2xhc3NOYW1lXG4gICAgICAgICl9XG4gICAgICA+XG4gICAgICAgIDxDU1NUcmFuc2l0aW9uXG4gICAgICAgICAgaW49e2FjdGl2ZX1cbiAgICAgICAgICBjbGFzc05hbWVzPVwiX2xvYWRpbmctb3ZlcmxheS10cmFuc2l0aW9uXCJcbiAgICAgICAgICB0aW1lb3V0PXtmYWRlU3BlZWR9XG4gICAgICAgICAgdW5tb3VudE9uRXhpdFxuICAgICAgICAgIHJlZj17dGhpcy5ub2RlUmVmfVxuICAgICAgICAgIGFkZEVuZExpc3RlbmVyPXsoKSA9PiB7IH19XG4gICAgICAgID5cbiAgICAgICAgICB7KHN0YXRlKSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwib3ZlcmxheVwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jeChcbiAgICAgICAgICAgICAgICBcIm92ZXJsYXlcIixcbiAgICAgICAgICAgICAgICBjc3ModGhpcy5nZXRTdHlsZXMoXCJvdmVybGF5XCIsIHN0YXRlKSlcbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17dGhpcy5jeChcImNvbnRlbnRcIiwgY3NzKHRoaXMuZ2V0U3R5bGVzKFwiY29udGVudFwiKSkpfVxuICAgICAgICAgICAgICAgIHJlZj17dGhpcy5ub2RlUmVmfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3NwaW5uZXIgJiZcbiAgICAgICAgICAgICAgICAgICh0eXBlb2Ygc3Bpbm5lciA9PT0gXCJib29sZWFuXCIgPyAoXG4gICAgICAgICAgICAgICAgICAgIDxTcGlubmVyIGN4PXt0aGlzLmN4fSBnZXRTdHlsZXM9e3RoaXMuZ2V0U3R5bGVzfSAvPlxuICAgICAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICAgICAgc3Bpbm5lclxuICAgICAgICAgICAgICAgICAgKSl9XG4gICAgICAgICAgICAgICAge3RleHR9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9DU1NUcmFuc2l0aW9uPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IExvYWRpbmdPdmVybGF5O1xuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICB2YXIgUmVhY3RJcyA9IHJlcXVpcmUoJ3JlYWN0LWlzJyk7XG5cbiAgLy8gQnkgZXhwbGljaXRseSB1c2luZyBgcHJvcC10eXBlc2AgeW91IGFyZSBvcHRpbmcgaW50byBuZXcgZGV2ZWxvcG1lbnQgYmVoYXZpb3IuXG4gIC8vIGh0dHA6Ly9mYi5tZS9wcm9wLXR5cGVzLWluLXByb2RcbiAgdmFyIHRocm93T25EaXJlY3RBY2Nlc3MgPSB0cnVlO1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZmFjdG9yeVdpdGhUeXBlQ2hlY2tlcnMnKShSZWFjdElzLmlzRWxlbWVudCwgdGhyb3dPbkRpcmVjdEFjY2Vzcyk7XG59IGVsc2Uge1xuICAvLyBCeSBleHBsaWNpdGx5IHVzaW5nIGBwcm9wLXR5cGVzYCB5b3UgYXJlIG9wdGluZyBpbnRvIG5ldyBwcm9kdWN0aW9uIGJlaGF2aW9yLlxuICAvLyBodHRwOi8vZmIubWUvcHJvcC10eXBlcy1pbi1wcm9kXG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9mYWN0b3J5V2l0aFRocm93aW5nU2hpbXMnKSgpO1xufVxuIiwiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTMtcHJlc2VudCwgRmFjZWJvb2ssIEluYy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciBSZWFjdFByb3BUeXBlc1NlY3JldCA9IHJlcXVpcmUoJy4vbGliL1JlYWN0UHJvcFR5cGVzU2VjcmV0Jyk7XG5cbmZ1bmN0aW9uIGVtcHR5RnVuY3Rpb24oKSB7fVxuZnVuY3Rpb24gZW1wdHlGdW5jdGlvbldpdGhSZXNldCgpIHt9XG5lbXB0eUZ1bmN0aW9uV2l0aFJlc2V0LnJlc2V0V2FybmluZ0NhY2hlID0gZW1wdHlGdW5jdGlvbjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gc2hpbShwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUsIGxvY2F0aW9uLCBwcm9wRnVsbE5hbWUsIHNlY3JldCkge1xuICAgIGlmIChzZWNyZXQgPT09IFJlYWN0UHJvcFR5cGVzU2VjcmV0KSB7XG4gICAgICAvLyBJdCBpcyBzdGlsbCBzYWZlIHdoZW4gY2FsbGVkIGZyb20gUmVhY3QuXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBlcnIgPSBuZXcgRXJyb3IoXG4gICAgICAnQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gJyArXG4gICAgICAnVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gJyArXG4gICAgICAnUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcydcbiAgICApO1xuICAgIGVyci5uYW1lID0gJ0ludmFyaWFudCBWaW9sYXRpb24nO1xuICAgIHRocm93IGVycjtcbiAgfTtcbiAgc2hpbS5pc1JlcXVpcmVkID0gc2hpbTtcbiAgZnVuY3Rpb24gZ2V0U2hpbSgpIHtcbiAgICByZXR1cm4gc2hpbTtcbiAgfTtcbiAgLy8gSW1wb3J0YW50IVxuICAvLyBLZWVwIHRoaXMgbGlzdCBpbiBzeW5jIHdpdGggcHJvZHVjdGlvbiB2ZXJzaW9uIGluIGAuL2ZhY3RvcnlXaXRoVHlwZUNoZWNrZXJzLmpzYC5cbiAgdmFyIFJlYWN0UHJvcFR5cGVzID0ge1xuICAgIGFycmF5OiBzaGltLFxuICAgIGJpZ2ludDogc2hpbSxcbiAgICBib29sOiBzaGltLFxuICAgIGZ1bmM6IHNoaW0sXG4gICAgbnVtYmVyOiBzaGltLFxuICAgIG9iamVjdDogc2hpbSxcbiAgICBzdHJpbmc6IHNoaW0sXG4gICAgc3ltYm9sOiBzaGltLFxuXG4gICAgYW55OiBzaGltLFxuICAgIGFycmF5T2Y6IGdldFNoaW0sXG4gICAgZWxlbWVudDogc2hpbSxcbiAgICBlbGVtZW50VHlwZTogc2hpbSxcbiAgICBpbnN0YW5jZU9mOiBnZXRTaGltLFxuICAgIG5vZGU6IHNoaW0sXG4gICAgb2JqZWN0T2Y6IGdldFNoaW0sXG4gICAgb25lT2Y6IGdldFNoaW0sXG4gICAgb25lT2ZUeXBlOiBnZXRTaGltLFxuICAgIHNoYXBlOiBnZXRTaGltLFxuICAgIGV4YWN0OiBnZXRTaGltLFxuXG4gICAgY2hlY2tQcm9wVHlwZXM6IGVtcHR5RnVuY3Rpb25XaXRoUmVzZXQsXG4gICAgcmVzZXRXYXJuaW5nQ2FjaGU6IGVtcHR5RnVuY3Rpb25cbiAgfTtcblxuICBSZWFjdFByb3BUeXBlcy5Qcm9wVHlwZXMgPSBSZWFjdFByb3BUeXBlcztcblxuICByZXR1cm4gUmVhY3RQcm9wVHlwZXM7XG59O1xuIiwiLyogZXNsaW50IG5vLXJldHVybi1hc3NpZ246IDAgKi9cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IExvYWRpbmdPdmVybGF5IGZyb20gXCIuL3NyYy9sb2FkaW5nLW92ZXJsYXlcIjtcblxuaW50ZXJmYWNlIFRhYmxlTG9hZGluZ092ZXJsYXlXcmFwcGVyUHJvcHMge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xufVxuXG5leHBvcnQgZGVmYXVsdCAob3B0aW9ucz86IGFueSkgPT4gKGxvYWRpbmc/OiBib29sZWFuKSA9PlxuICBjbGFzcyBUYWJsZUxvYWRpbmdPdmVybGF5V3JhcHBlciBleHRlbmRzIFJlYWN0LkNvbXBvbmVudDxUYWJsZUxvYWRpbmdPdmVybGF5V3JhcHBlclByb3BzPiB7XG4gICAgc3RhdGljIHByb3BUeXBlcyA9IHtcbiAgICAgIGNoaWxkcmVuOiBQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkLFxuICAgIH07XG5cbiAgICBvdmVybGF5OiBhbnk7XG5cbiAgICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGlmIChsb2FkaW5nKSB7XG4gICAgICAgIGNvbnN0IHsgd3JhcHBlciB9ID0gdGhpcy5vdmVybGF5O1xuICAgICAgICBjb25zdCBtYXNrZXIgPSB3cmFwcGVyLmN1cnJlbnQuZmlyc3RDaGlsZDtcbiAgICAgICAgY29uc3QgaGVhZGVyRE9NID0gd3JhcHBlci5jdXJyZW50LnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcihcInRoZWFkXCIpO1xuICAgICAgICBjb25zdCBib2R5RE9NID0gd3JhcHBlci5jdXJyZW50LnBhcmVudEVsZW1lbnQucXVlcnlTZWxlY3RvcihcInRib2R5XCIpO1xuICAgICAgICBjb25zdCBjYXB0aW9uRE9NID1cbiAgICAgICAgICB3cmFwcGVyLmN1cnJlbnQucGFyZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yKFwiY2FwdGlvblwiKTtcbiAgICAgICAgbGV0IG1hcmdpblRvcCA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGhlYWRlckRPTSkuaGVpZ2h0O1xuICAgICAgICBpZiAoY2FwdGlvbkRPTSkge1xuICAgICAgICAgIG1hcmdpblRvcCA9IHBhcnNlRmxvYXQobWFyZ2luVG9wLnJlcGxhY2UoXCJweFwiLCBcIlwiKSkudG9TdHJpbmcoKTtcbiAgICAgICAgICBtYXJnaW5Ub3AgKz0gcGFyc2VGbG9hdChcbiAgICAgICAgICAgIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGNhcHRpb25ET00pLmhlaWdodC5yZXBsYWNlKFwicHhcIiwgXCJcIilcbiAgICAgICAgICApLnRvU3RyaW5nKCk7XG4gICAgICAgICAgbWFyZ2luVG9wID0gYCR7bWFyZ2luVG9wfXB4YDtcbiAgICAgICAgfVxuICAgICAgICBtYXNrZXIuc3R5bGUubWFyZ2luVG9wID0gbWFyZ2luVG9wO1xuICAgICAgICBtYXNrZXIuc3R5bGUuaGVpZ2h0ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoYm9keURPTSkuaGVpZ2h0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlbmRlcigpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxMb2FkaW5nT3ZlcmxheVxuICAgICAgICAgIHJlZj17KG46IGFueSkgPT4geyB0aGlzLm92ZXJsYXkgPSBuOyB9fVxuICAgICAgICAgIHsuLi5vcHRpb25zfVxuICAgICAgICAgIGFjdGl2ZT17bG9hZGluZ31cbiAgICAgICAgPlxuICAgICAgICAgIHt0aGlzLnByb3BzLmNoaWxkcmVufVxuICAgICAgICA8L0xvYWRpbmdPdmVybGF5PlxuICAgICAgKTtcbiAgICB9XG4gIH07XG4iLCIvKipcbiAqIENvcHlyaWdodCAoYykgMjAxMy1wcmVzZW50LCBGYWNlYm9vaywgSW5jLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIFJlYWN0UHJvcFR5cGVzU2VjcmV0ID0gJ1NFQ1JFVF9ET19OT1RfUEFTU19USElTX09SX1lPVV9XSUxMX0JFX0ZJUkVEJztcblxubW9kdWxlLmV4cG9ydHMgPSBSZWFjdFByb3BUeXBlc1NlY3JldDtcbiIsImltcG9ydCB7IGtleWZyYW1lcyB9IGZyb20gXCJAZW1vdGlvbi9jc3NcIjtcblxuY29uc3Qgcm90YXRlMzYwID0ga2V5ZnJhbWVzYFxuICBmcm9tIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTtcbiAgfVxuICB0byB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTtcbiAgfVxuYDtcblxuY29uc3Qgc3Bpbm5lckRhc2ggPSBrZXlmcmFtZXNgXG4gIDAlIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAxLDIwMDtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogMDtcbiAgfVxuICA1MCUge1xuICAgIHN0cm9rZS1kYXNoYXJyYXk6IDg5LDIwMDtcbiAgICBzdHJva2UtZGFzaG9mZnNldDogLTM1cHg7XG4gIH1cbiAgMTAwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogODksMjAwO1xuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMTI0cHg7XG4gIH1cbmA7XG5cbmNvbnN0IFNUWUxFUyA9IHtcbiAgd3JhcHBlcjogKHN0YXRlOiBhbnkpID0+ICh7XG4gICAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgICAuLi5zdGF0ZSxcbiAgfSksXG4gIG92ZXJsYXk6IChzdGF0ZTogYW55LCBwcm9wczogYW55KSA9PiAoe1xuICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgaGVpZ2h0OiBcIjEwMCVcIixcbiAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgdG9wOiBcIjBweFwiLFxuICAgIGxlZnQ6IFwiMHB4XCIsXG4gICAgZGlzcGxheTogXCJmbGV4XCIsXG4gICAgdGV4dEFsaWduOiBcImNlbnRlclwiLFxuICAgIGZvbnRTaXplOiBcIjEuMmVtXCIsXG4gICAgY29sb3I6IFwiI0ZGRlwiLFxuICAgIGJhY2tncm91bmQ6IFwicmdiYSgwLCAwLCAwLCAwLjcpXCIsXG4gICAgekluZGV4OiA4MDAsXG4gICAgdHJhbnNpdGlvbjogYG9wYWNpdHkgJHtwcm9wcy5mYWRlU3BlZWR9bXMgZWFzZS1pbmAsXG4gICAgb3BhY2l0eTogc3RhdGUgPT09IFwiZW50ZXJpbmdcIiB8fCBzdGF0ZSA9PT0gXCJlbnRlcmVkXCIgPyAxIDogMCxcbiAgfSksXG4gIGNvbnRlbnQ6ICgpID0+ICh7XG4gICAgbWFyZ2luOiBcImF1dG9cIixcbiAgfSksXG4gIHNwaW5uZXI6ICgpID0+ICh7XG4gICAgcG9zaXRpb246IFwicmVsYXRpdmVcIixcbiAgICBtYXJnaW46IFwiMHB4IGF1dG8gMTBweCBhdXRvXCIsXG4gICAgd2lkdGg6IFwiNTBweFwiLFxuICAgIG1heEhlaWdodDogXCIxMDAlXCIsXG4gICAgXCImOmJlZm9yZVwiOiB7XG4gICAgICBjb250ZW50OiAnXCJcIicsXG4gICAgICBkaXNwbGF5OiBcImJsb2NrXCIsXG4gICAgICBwYWRkaW5nVG9wOiBcIjEwMCVcIixcbiAgICB9LFxuICAgIFwiJiBzdmdcIjoge1xuICAgICAgYW5pbWF0aW9uOiBgJHtyb3RhdGUzNjB9IDJzIGxpbmVhciBpbmZpbml0ZWAsXG4gICAgICBoZWlnaHQ6IFwiMTAwJVwiLFxuICAgICAgdHJhbnNmb3JtT3JpZ2luOiBcImNlbnRlciBjZW50ZXJcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIHBvc2l0aW9uOiBcImFic29sdXRlXCIsXG4gICAgICB0b3A6IFwiMFwiLFxuICAgICAgYm90dG9tOiBcIjBcIixcbiAgICAgIGxlZnQ6IFwiMFwiLFxuICAgICAgcmlnaHQ6IFwiMFwiLFxuICAgICAgbWFyZ2luOiBcImF1dG9cIixcbiAgICAgIFwiJiBjaXJjbGVcIjoge1xuICAgICAgICBhbmltYXRpb246IGAke3NwaW5uZXJEYXNofSAxLjVzIGVhc2UtaW4tb3V0IGluZmluaXRlYCxcbiAgICAgICAgc3Ryb2tlRGFzaGFycmF5OiBcIjEsMjAwXCIsXG4gICAgICAgIHN0cm9rZURhc2hvZmZzZXQ6IDAsXG4gICAgICAgIHN0cm9rZUxpbmVjYXA6IFwicm91bmRcIixcbiAgICAgICAgc3Ryb2tlOiBcIiNGRkZcIixcbiAgICAgIH0sXG4gICAgfSxcbiAgfSksXG59O1xuXG5leHBvcnQgZGVmYXVsdCBTVFlMRVM7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXyg4NjIpO1xuIl0sIm5hbWVzIjpbInJvb3QiLCJmYWN0b3J5IiwiZXhwb3J0cyIsIm1vZHVsZSIsInJlcXVpcmUiLCJkZWZpbmUiLCJhbWQiLCJzZWxmIiwiX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV9fNDQyX18iLCJfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFX18zX18iLCJTdHlsZVNoZWV0Iiwib3B0aW9ucyIsIl90aGlzIiwidGhpcyIsIl9pbnNlcnRUYWciLCJ0YWciLCJiZWZvcmUiLCJ0YWdzIiwibGVuZ3RoIiwiaW5zZXJ0aW9uUG9pbnQiLCJuZXh0U2libGluZyIsInByZXBlbmQiLCJjb250YWluZXIiLCJmaXJzdENoaWxkIiwiaW5zZXJ0QmVmb3JlIiwicHVzaCIsImlzU3BlZWR5IiwidW5kZWZpbmVkIiwic3BlZWR5IiwiY3RyIiwibm9uY2UiLCJrZXkiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJoeWRyYXRlIiwibm9kZXMiLCJmb3JFYWNoIiwiaW5zZXJ0IiwicnVsZSIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsInNldEF0dHJpYnV0ZSIsImFwcGVuZENoaWxkIiwiY3JlYXRlVGV4dE5vZGUiLCJjcmVhdGVTdHlsZUVsZW1lbnQiLCJzaGVldCIsImkiLCJzdHlsZVNoZWV0cyIsIm93bmVyTm9kZSIsInNoZWV0Rm9yVGFnIiwiaW5zZXJ0UnVsZSIsImNzc1J1bGVzIiwiZSIsImZsdXNoIiwiX3RhZyRwYXJlbnROb2RlIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwiYWJzIiwiTWF0aCIsIlN0cmluZyIsImZyb21DaGFyQ29kZSIsIk9iamVjdCIsImFzc2lnbiIsInRyaW0iLCJ2YWx1ZSIsInBhdHRlcm4iLCJyZXBsYWNlbWVudCIsInJlcGxhY2UiLCJpbmRleG9mIiwic2VhcmNoIiwiaW5kZXhPZiIsImluZGV4IiwiY2hhckNvZGVBdCIsImJlZ2luIiwiZW5kIiwic2xpY2UiLCJhcnJheSIsImxpbmUiLCJjb2x1bW4iLCJwb3NpdGlvbiIsImNoYXJhY3RlciIsImNoYXJhY3RlcnMiLCJub2RlIiwicGFyZW50IiwidHlwZSIsInByb3BzIiwiY2hpbGRyZW4iLCJyZXR1cm4iLCJwcmV2IiwibmV4dCIsInBlZWsiLCJjYXJldCIsInRva2VuIiwiYWxsb2MiLCJkZWFsbG9jIiwiZGVsaW1pdCIsImRlbGltaXRlciIsIndoaXRlc3BhY2UiLCJlc2NhcGluZyIsImNvdW50IiwiY29tbWVudGVyIiwiaWRlbnRpZmllciIsIkNPTU1FTlQiLCJjYWxsYmFjayIsIm91dHB1dCIsInN0cmluZ2lmeSIsImVsZW1lbnQiLCJqb2luIiwiY29tcGlsZSIsInBhcnNlIiwicnVsZXMiLCJydWxlc2V0cyIsInBzZXVkbyIsInBvaW50cyIsImRlY2xhcmF0aW9ucyIsIm9mZnNldCIsImF0cnVsZSIsInByb3BlcnR5IiwicHJldmlvdXMiLCJ2YXJpYWJsZSIsInNjYW5uaW5nIiwiYW1wZXJzYW5kIiwicmVmZXJlbmNlIiwiY29tbWVudCIsImRlY2xhcmF0aW9uIiwicnVsZXNldCIsInBvc3QiLCJzaXplIiwiaiIsImsiLCJ4IiwieSIsInoiLCJpZGVudGlmaWVyV2l0aFBvaW50VHJhY2tpbmciLCJnZXRSdWxlcyIsInBhcnNlZCIsInRvUnVsZXMiLCJmaXhlZEVsZW1lbnRzIiwiV2Vha01hcCIsImNvbXBhdCIsImlzSW1wbGljaXRSdWxlIiwiZ2V0Iiwic2V0IiwicGFyZW50UnVsZXMiLCJyZW1vdmVMYWJlbCIsImhhc2giLCJkZWZhdWx0U3R5bGlzUGx1Z2lucyIsIm1hcCIsImV4ZWMiLCJjcmVhdGVDYWNoZSIsInNzclN0eWxlcyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJBcnJheSIsImNhbGwiLCJnZXRBdHRyaWJ1dGUiLCJoZWFkIiwiX2luc2VydCIsInN0eWxpc1BsdWdpbnMiLCJpbnNlcnRlZCIsIm5vZGVzVG9IeWRyYXRlIiwiYXR0cmliIiwic3BsaXQiLCJjdXJyZW50U2hlZXQiLCJjb2xsZWN0aW9uIiwiZmluYWxpemluZ1BsdWdpbnMiLCJzZXJpYWxpemVyIiwiY29uY2F0Iiwic2VsZWN0b3IiLCJzZXJpYWxpemVkIiwic2hvdWxkQ2FjaGUiLCJzdHlsZXMiLCJjYWNoZSIsIm5hbWUiLCJyZWdpc3RlcmVkIiwidW5pdGxlc3NLZXlzIiwiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnQiLCJhc3BlY3RSYXRpbyIsImJvcmRlckltYWdlT3V0c2V0IiwiYm9yZGVySW1hZ2VTbGljZSIsImJvcmRlckltYWdlV2lkdGgiLCJib3hGbGV4IiwiYm94RmxleEdyb3VwIiwiYm94T3JkaW5hbEdyb3VwIiwiY29sdW1uQ291bnQiLCJjb2x1bW5zIiwiZmxleCIsImZsZXhHcm93IiwiZmxleFBvc2l0aXZlIiwiZmxleFNocmluayIsImZsZXhOZWdhdGl2ZSIsImZsZXhPcmRlciIsImdyaWRSb3ciLCJncmlkUm93RW5kIiwiZ3JpZFJvd1NwYW4iLCJncmlkUm93U3RhcnQiLCJncmlkQ29sdW1uIiwiZ3JpZENvbHVtbkVuZCIsImdyaWRDb2x1bW5TcGFuIiwiZ3JpZENvbHVtblN0YXJ0IiwibXNHcmlkUm93IiwibXNHcmlkUm93U3BhbiIsIm1zR3JpZENvbHVtbiIsIm1zR3JpZENvbHVtblNwYW4iLCJmb250V2VpZ2h0IiwibGluZUhlaWdodCIsIm9wYWNpdHkiLCJvcmRlciIsIm9ycGhhbnMiLCJzY2FsZSIsInRhYlNpemUiLCJ3aWRvd3MiLCJ6SW5kZXgiLCJ6b29tIiwiV2Via2l0TGluZUNsYW1wIiwiZmlsbE9wYWNpdHkiLCJmbG9vZE9wYWNpdHkiLCJzdG9wT3BhY2l0eSIsInN0cm9rZURhc2hhcnJheSIsInN0cm9rZURhc2hvZmZzZXQiLCJzdHJva2VNaXRlcmxpbWl0Iiwic3Ryb2tlT3BhY2l0eSIsInN0cm9rZVdpZHRoIiwibWVtb2l6ZSIsImZuIiwiY3JlYXRlIiwiYXJnIiwiaHlwaGVuYXRlUmVnZXgiLCJhbmltYXRpb25SZWdleCIsImlzQ3VzdG9tUHJvcGVydHkiLCJpc1Byb2Nlc3NhYmxlVmFsdWUiLCJwcm9jZXNzU3R5bGVOYW1lIiwic3R5bGVOYW1lIiwidG9Mb3dlckNhc2UiLCJwcm9jZXNzU3R5bGVWYWx1ZSIsIm1hdGNoIiwicDEiLCJwMiIsImN1cnNvciIsImhhbmRsZUludGVycG9sYXRpb24iLCJtZXJnZWRQcm9wcyIsImludGVycG9sYXRpb24iLCJjb21wb25lbnRTZWxlY3RvciIsIl9fZW1vdGlvbl9zdHlsZXMiLCJrZXlmcmFtZXMiLCJhbmltIiwic2VyaWFsaXplZFN0eWxlcyIsIm9iaiIsInN0cmluZyIsImlzQXJyYXkiLCJhc1N0cmluZyIsImludGVycG9sYXRlZCIsIl9pIiwiY3JlYXRlU3RyaW5nRnJvbU9iamVjdCIsInByZXZpb3VzQ3Vyc29yIiwicmVzdWx0IiwiY2FjaGVkIiwibGFiZWxQYXR0ZXJuIiwic2VyaWFsaXplU3R5bGVzIiwiYXJncyIsInN0cmluZ01vZGUiLCJzdHJpbmdzIiwicmF3IiwibGFzdEluZGV4IiwiaWRlbnRpZmllck5hbWUiLCJzdHIiLCJoIiwibGVuIiwidG9TdHJpbmciLCJnZXRSZWdpc3RlcmVkU3R5bGVzIiwicmVnaXN0ZXJlZFN0eWxlcyIsImNsYXNzTmFtZXMiLCJyYXdDbGFzc05hbWUiLCJjbGFzc05hbWUiLCJpbnNlcnRXaXRob3V0U2NvcGluZyIsIm1lcmdlIiwiY3NzIiwiY2xhc3NuYW1lcyIsImNscyIsInRvQWRkIiwiX2NyZWF0ZUVtb3Rpb24iLCJfbGVuIiwiYXJndW1lbnRzIiwiX2tleSIsImlzU3RyaW5nVGFnIiwicmVnaXN0ZXJTdHlsZXMiLCJjdXJyZW50IiwiaW5zZXJ0U3R5bGVzIiwiY3giLCJfbGVuNCIsIl9rZXk0IiwiaW5qZWN0R2xvYmFsIiwiX2xlbjMiLCJfa2V5MyIsIl9sZW4yIiwiX2tleTIiLCJhbmltYXRpb24iLCJpZHMiLCJiaW5kIiwiY3JlYXRlRW1vdGlvbiIsIl9leHRlbmRzIiwibiIsInQiLCJyIiwiaGFzT3duUHJvcGVydHkiLCJhcHBseSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwiX3NldFByb3RvdHlwZU9mIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJfaW5oZXJpdHNMb29zZSIsIm8iLCJjb25zdHJ1Y3RvciIsInJlcGxhY2VDbGFzc05hbWUiLCJvcmlnQ2xhc3MiLCJjbGFzc1RvUmVtb3ZlIiwiUmVnRXhwIiwiZGlzYWJsZWQiLCJmb3JjZVJlZmxvdyIsInNjcm9sbFRvcCIsIlVOTU9VTlRFRCIsIkVYSVRFRCIsIkVOVEVSSU5HIiwiRU5URVJFRCIsIkVYSVRJTkciLCJUcmFuc2l0aW9uIiwiX1JlYWN0JENvbXBvbmVudCIsImNvbnRleHQiLCJpbml0aWFsU3RhdHVzIiwiYXBwZWFyIiwiaXNNb3VudGluZyIsImVudGVyIiwiYXBwZWFyU3RhdHVzIiwiaW4iLCJ1bm1vdW50T25FeGl0IiwibW91bnRPbkVudGVyIiwic3RhdGUiLCJzdGF0dXMiLCJuZXh0Q2FsbGJhY2siLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJfcmVmIiwicHJldlN0YXRlIiwiY29tcG9uZW50RGlkTW91bnQiLCJ1cGRhdGVTdGF0dXMiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJuZXh0U3RhdHVzIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJjYW5jZWxOZXh0Q2FsbGJhY2siLCJnZXRUaW1lb3V0cyIsImV4aXQiLCJ0aW1lb3V0IiwibW91bnRpbmciLCJub2RlUmVmIiwicGVyZm9ybUVudGVyIiwicGVyZm9ybUV4aXQiLCJzZXRTdGF0ZSIsIl90aGlzMiIsImFwcGVhcmluZyIsIl9yZWYyIiwibWF5YmVOb2RlIiwibWF5YmVBcHBlYXJpbmciLCJ0aW1lb3V0cyIsImVudGVyVGltZW91dCIsImNvbmZpZyIsInNhZmVTZXRTdGF0ZSIsIm9uRW50ZXJlZCIsIm9uRW50ZXIiLCJvbkVudGVyaW5nIiwib25UcmFuc2l0aW9uRW5kIiwiX3RoaXMzIiwib25FeGl0Iiwib25FeGl0aW5nIiwib25FeGl0ZWQiLCJjYW5jZWwiLCJuZXh0U3RhdGUiLCJzZXROZXh0Q2FsbGJhY2siLCJfdGhpczQiLCJhY3RpdmUiLCJldmVudCIsImhhbmRsZXIiLCJkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyIiwiYWRkRW5kTGlzdGVuZXIiLCJfcmVmMyIsIm1heWJlTmV4dENhbGxiYWNrIiwic2V0VGltZW91dCIsInJlbmRlciIsIl90aGlzJHByb3BzIiwiY2hpbGRQcm9wcyIsIlRyYW5zaXRpb25Hcm91cENvbnRleHQiLCJQcm92aWRlciIsIm9ubHkiLCJub29wIiwiY29udGV4dFR5cGUiLCJwcm9wVHlwZXMiLCJkZWZhdWx0UHJvcHMiLCJyZW1vdmVDbGFzcyIsImNsYXNzZXMiLCJjIiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwiYmFzZVZhbCIsIkNTU1RyYW5zaXRpb24iLCJhcHBsaWVkQ2xhc3NlcyIsIl90aGlzJHJlc29sdmVBcmd1bWVudCIsInJlc29sdmVBcmd1bWVudHMiLCJyZW1vdmVDbGFzc2VzIiwiYWRkQ2xhc3MiLCJfdGhpcyRyZXNvbHZlQXJndW1lbnQyIiwiX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MyIsImdldENsYXNzTmFtZXMiLCJpc1N0cmluZ0NsYXNzTmFtZXMiLCJiYXNlQ2xhc3NOYW1lIiwiYWN0aXZlQ2xhc3NOYW1lIiwiZG9uZUNsYXNzTmFtZSIsInBoYXNlIiwiYWRkIiwiY29udGFpbnMiLCJoYXNDbGFzcyIsIl9hZGRDbGFzcyIsIl90aGlzJGFwcGxpZWRDbGFzc2VzJCIsImJhc2UiLCJkb25lIiwiZ2V0Q2hpbGRNYXBwaW5nIiwibWFwRm4iLCJDaGlsZHJlbiIsImNoaWxkIiwiaXNWYWxpZEVsZW1lbnQiLCJtYXBwZXIiLCJnZXRQcm9wIiwicHJvcCIsImdldE5leHRDaGlsZE1hcHBpbmciLCJuZXh0UHJvcHMiLCJwcmV2Q2hpbGRNYXBwaW5nIiwibmV4dENoaWxkTWFwcGluZyIsImdldFZhbHVlRm9yS2V5IiwibmV4dEtleXNQZW5kaW5nIiwicGVuZGluZ0tleXMiLCJwcmV2S2V5IiwiY2hpbGRNYXBwaW5nIiwibmV4dEtleSIsInBlbmRpbmdOZXh0S2V5IiwibWVyZ2VDaGlsZE1hcHBpbmdzIiwia2V5cyIsImhhc1ByZXYiLCJoYXNOZXh0IiwicHJldkNoaWxkIiwiaXNMZWF2aW5nIiwiY2xvbmVFbGVtZW50IiwidmFsdWVzIiwiVHJhbnNpdGlvbkdyb3VwIiwiaGFuZGxlRXhpdGVkIiwiUmVmZXJlbmNlRXJyb3IiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiY29udGV4dFZhbHVlIiwiZmlyc3RSZW5kZXIiLCJtb3VudGVkIiwiY3VycmVudENoaWxkTWFwcGluZyIsIkNvbXBvbmVudCIsImNvbXBvbmVudCIsImNoaWxkRmFjdG9yeSIsIlJlcGxhY2VUcmFuc2l0aW9uIiwiX2FyZ3MiLCJoYW5kbGVFbnRlciIsImhhbmRsZUxpZmVjeWNsZSIsImhhbmRsZUVudGVyaW5nIiwiaGFuZGxlRW50ZXJlZCIsImhhbmRsZUV4aXQiLCJfbGVuNSIsIl9rZXk1IiwiaGFuZGxlRXhpdGluZyIsIl9sZW42IiwiX2tleTYiLCJfbGVuNyIsIl9rZXk3IiwiaWR4Iiwib3JpZ2luYWxBcmdzIiwiX2NoaWxkJHByb3BzIiwidG9BcnJheSIsImluUHJvcCIsIl9SZWFjdCRDaGlsZHJlbiR0b0FyciIsImZpcnN0Iiwic2Vjb25kIiwiX2xlYXZlUmVuZGVycyIsIl9lbnRlclJlbmRlcnMiLCJtb2RlcyIsImNhbGxIb29rIiwiY2IiLCJfZWxlbWVudCRwcm9wcyIsImxlYXZlUmVuZGVycyIsImNoYW5nZVN0YXRlIiwiZW50ZXJSZW5kZXJzIiwiX3JlZjQiLCJTd2l0Y2hUcmFuc2l0aW9uIiwiYXBwZWFyZWQiLCJtb2RlIiwib2xkQ2hpbGRyZW4iLCJuZXdDaGlsZHJlbiIsIl90aGlzJHN0YXRlIiwiZGF0YSIsIlNwaW5uZXIiLCJnZXRTdHlsZXMiLCJ2aWV3Qm94IiwiY3kiLCJmaWxsIiwiZnVuYyIsImlzUmVxdWlyZWQiLCJMb2FkaW5nT3ZlcmxheSIsInN1cGVyIiwid3JhcHBlciIsImNyZWF0ZVJlZiIsInByb3ZpZGVkU3RhdGUiLCJjdXN0b20iLCJuYW1lcyIsImFyciIsImNsYXNzTmFtZVByZWZpeCIsIm92ZXJmbG93Q1NTIiwid3JhcHBlclN0eWxlIiwid2luZG93IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInJlZHVjZSIsIm0iLCJvbkNsaWNrIiwiZmFkZVNwZWVkIiwic3Bpbm5lciIsInRleHQiLCJyZWYiLCJSZWFjdFByb3BUeXBlc1NlY3JldCIsImVtcHR5RnVuY3Rpb24iLCJlbXB0eUZ1bmN0aW9uV2l0aFJlc2V0IiwicmVzZXRXYXJuaW5nQ2FjaGUiLCJzaGltIiwicHJvcE5hbWUiLCJjb21wb25lbnROYW1lIiwibG9jYXRpb24iLCJwcm9wRnVsbE5hbWUiLCJzZWNyZXQiLCJlcnIiLCJFcnJvciIsImdldFNoaW0iLCJSZWFjdFByb3BUeXBlcyIsImJpZ2ludCIsImJvb2wiLCJudW1iZXIiLCJvYmplY3QiLCJzeW1ib2wiLCJhbnkiLCJhcnJheU9mIiwiZWxlbWVudFR5cGUiLCJpbnN0YW5jZU9mIiwib2JqZWN0T2YiLCJvbmVPZiIsIm9uZU9mVHlwZSIsInNoYXBlIiwiZXhhY3QiLCJjaGVja1Byb3BUeXBlcyIsIlByb3BUeXBlcyIsImxvYWRpbmciLCJvdmVybGF5IiwibWFza2VyIiwiaGVhZGVyRE9NIiwicGFyZW50RWxlbWVudCIsInF1ZXJ5U2VsZWN0b3IiLCJib2R5RE9NIiwiY2FwdGlvbkRPTSIsIm1hcmdpblRvcCIsImhlaWdodCIsInBhcnNlRmxvYXQiLCJzdHlsZSIsInJvdGF0ZTM2MCIsInNwaW5uZXJEYXNoIiwiU1RZTEVTIiwid2lkdGgiLCJ0b3AiLCJsZWZ0IiwiZGlzcGxheSIsInRleHRBbGlnbiIsImZvbnRTaXplIiwiY29sb3IiLCJiYWNrZ3JvdW5kIiwidHJhbnNpdGlvbiIsImNvbnRlbnQiLCJtYXJnaW4iLCJtYXhIZWlnaHQiLCJwYWRkaW5nVG9wIiwidHJhbnNmb3JtT3JpZ2luIiwiYm90dG9tIiwicmlnaHQiLCJzdHJva2VMaW5lY2FwIiwic3Ryb2tlIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImdldHRlciIsIl9fZXNNb2R1bGUiLCJkIiwiYSIsImRlZmluaXRpb24iLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyJdLCJpZ25vcmVMaXN0IjpbXSwic291cmNlUm9vdCI6IiJ9
|