Files
KintoneAppBuilder/backend/Temp/alc_runtime.js

105 lines
2.4 MiB
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

var Fn=Object.defineProperty;var Vn=(n,e,t)=>e in n?Fn(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var F=(n,e,t)=>(Vn(n,typeof e!="symbol"?e+"":e,t),t);var commonjsGlobal=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function getDefaultExportFromCjs(n){return n&&n.__esModule&&Object.prototype.hasOwnProperty.call(n,"default")?n.default:n}function getAugmentedNamespace(n){if(n.__esModule)return n;var e=n.default;if(typeof e=="function"){var t=function r(){return this instanceof r?Reflect.construct(e,arguments,this.constructor):e.apply(this,arguments)};t.prototype=e.prototype}else t={};return Object.defineProperty(t,"__esModule",{value:!0}),Object.keys(n).forEach(function(r){var i=Object.getOwnPropertyDescriptor(n,r);Object.defineProperty(t,r,i.get?i:{enumerable:!0,get:function(){return n[r]}})}),t}var jquery={exports:{}};/*!
* jQuery JavaScript Library v3.7.1
* https://jquery.com/
*
* Copyright OpenJS Foundation and other contributors
* Released under the MIT license
* https://jquery.org/license
*
* Date: 2023-08-28T13:37Z
*/(function(n){(function(e,t){n.exports=e.document?t(e,!0):function(r){if(!r.document)throw new Error("jQuery requires a window with a document");return t(r)}})(typeof window<"u"?window:commonjsGlobal,function(e,t){var r=[],i=Object.getPrototypeOf,s=r.slice,l=r.flat?function(o){return r.flat.call(o)}:function(o){return r.concat.apply([],o)},f=r.push,h=r.indexOf,p={},m=p.toString,y=p.hasOwnProperty,A=y.toString,x=A.call(Object),S={},C=function(a){return typeof a=="function"&&typeof a.nodeType!="number"&&typeof a.item!="function"},H=function(a){return a!=null&&a===a.window},I=e.document,z={type:!0,src:!0,nonce:!0,noModule:!0};function B(o,a,c){c=c||I;var d,g,E=c.createElement("script");if(E.text=o,a)for(d in z)g=a[d]||a.getAttribute&&a.getAttribute(d),g&&E.setAttribute(d,g);c.head.appendChild(E).parentNode.removeChild(E)}function Q(o){return o==null?o+"":typeof o=="object"||typeof o=="function"?p[m.call(o)]||"object":typeof o}var ee="3.7.1",V=/HTML$/i,u=function(o,a){return new u.fn.init(o,a)};u.fn=u.prototype={jquery:ee,constructor:u,length:0,toArray:function(){return s.call(this)},get:function(o){return o==null?s.call(this):o<0?this[o+this.length]:this[o]},pushStack:function(o){var a=u.merge(this.constructor(),o);return a.prevObject=this,a},each:function(o){return u.each(this,o)},map:function(o){return this.pushStack(u.map(this,function(a,c){return o.call(a,c,a)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(u.grep(this,function(o,a){return(a+1)%2}))},odd:function(){return this.pushStack(u.grep(this,function(o,a){return a%2}))},eq:function(o){var a=this.length,c=+o+(o<0?a:0);return this.pushStack(c>=0&&c<a?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:f,sort:r.sort,splice:r.splice},u.extend=u.fn.extend=function(){var o,a,c,d,g,E,_=arguments[0]||{},T=1,b=arguments.length,O=!1;for(typeof _=="boolean"&&(O=_,_=arguments[T]||{},T++),typeof _!="object"&&!C(_)&&(_={}),T===b&&(_=this,T--);T<b;T++)if((o=arguments[T])!=null)for(a in o)d=o[a],!(a==="__proto__"||_===d)&&(O&&d&&(u.isPlainObject(d)||(g=Array.isArray(d)))?(c=_[a],g&&!Array.isArray(c)?E=[]:!g&&!u.isPlainObject(c)?E={}:E=c,g=!1,_[a]=u.extend(O,E,d)):d!==void 0&&(_[a]=d));return _},u.extend({expando:"jQuery"+(ee+Math.random()).replace(/\D/g,""),isReady:!0,error:function(o){throw new Error(o)},noop:function(){},isPlainObject:function(o){var a,c;return!o||m.call(o)!=="[object Object]"?!1:(a=i(o),a?(c=y.call(a,"constructor")&&a.constructor,typeof c=="function"&&A.call(c)===x):!0)},isEmptyObject:function(o){var a;for(a in o)return!1;return!0},globalEval:function(o,a,c){B(o,{nonce:a&&a.nonce},c)},each:function(o,a){var c,d=0;if(Y(o))for(c=o.length;d<c&&a.call(o[d],d,o[d])!==!1;d++);else for(d in o)if(a.call(o[d],d,o[d])===!1)break;return o},text:function(o){var a,c="",d=0,g=o.nodeType;if(!g)for(;a=o[d++];)c+=u.text(a);return g===1||g===11?o.textContent:g===9?o.documentElement.textContent:g===3||g===4?o.nodeValue:c},makeArray:function(o,a){var c=a||[];return o!=null&&(Y(Object(o))?u.merge(c,typeof o=="string"?[o]:o):f.call(c,o)),c},inArray:function(o,a,c){return a==null?-1:h.call(a,o,c)},isXMLDoc:function(o){var a=o&&o.namespaceURI,c=o&&(o.ownerDocument||o).documentElement;return!V.test(a||c&&c.nodeName||"HTML")},merge:function(o,a){for(var c=+a.length,d=0,g=o.length;d<c;d++)o[g++]=a[d];return o.length=g,o},grep:function(o,a,c){for(var d,g=[],E=0,_=o.length,T=!c;E<_;E++)d=!a(o[E],E),d!==T&&g.push(o[E]);return g},map:function(o,a,c){var d,g,E=0,_=[];if(Y(o))for(d=o.length;E<d;E++)g=a(o[E],E,c),g!=null&&_.push(g);else for(E in o)g=a(o[E],E,c),g!=null&&_.push(g);return l(_)},guid:1,support:S}),typeof Symbol=="function"&&(u.fn[Symbol.iterator]=r[Symbol.iterator]),u.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(o,a){p["[object "+a+"]"]=a.toLowerCase()});function Y(o){var a=!!o&&"length"in o&&o.length,c=Q(o);return C(o)||H(o)?!1:c==="array"||a===0||typeof a=="number"&&a>0&&a-1 in o}function U(o,a){return o.nodeName&&o.nodeName.toLowerCase()===a.toLowerCase()}var P=r.pop,q=r.sort,K=r.splice,G="[\\x20\\t\\r\\n\\f]",ie=new RegExp("^"+G+"+|((?:^|[^\\\\])(?:\\\\.)*)"+G+"+$","g");u.contains=function(o,a){var c=a&&a.parentNode;return o===c||!!(c&&c.nodeType===1&&(o.contains?o.contains(c):o.compareDocumentPosition&&o.compareDocumentPosition(c)&16))};var ue=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function de(o,a){return a?o==="\0"?"<22>":o.slice(0,-1)+"\\"+o.charCodeAt(o.length-1).toString(16)+" ":"\\"+o}u.escapeSelector=function(o){return(o+"").replace(ue,de)};var le=I,ve=f;(function(){var o,a,c,d,g,E=ve,_,T,b,O,L,k=u.expando,R=0,W=0,ae=Ut(),_e=Ut(),pe=Ut(),Pe=Ut(),Ne=function(v,w){return v===w&&(g=!0),0},Ye="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ze="(?:\\\\[\\da-fA-F]{1,6}"+G+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",Ee="\\["+G+"*("+ze+")(?:"+G+"*([*^$|!~]?=)"+G+`*(?:'((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)"|(`+ze+"))|)"+G+"*\\]",ht=":("+ze+`)(?:\\((('((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|`+Ee+")*)|.*)\\)|)",ye=new RegExp(G+"+","g"),Ce=new RegExp("^"+G+"*,"+G+"*"),Dt=new RegExp("^"+G+"*([>+~]|"+G+")"+G+"*"),cr=new RegExp(G+"|>"),Xe=new RegExp(ht),Pt=new RegExp("^"+ze+"$"),Qe={ID:new RegExp("^#("+ze+")"),CLASS:new RegExp("^\\.("+ze+")"),TAG:new RegExp("^("+ze+"|[*])"),ATTR:new RegExp("^"+Ee),PSEUDO:new RegExp("^"+ht),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+G+"*(even|odd|(([+-]|)(\\d*)n|)"+G+"*(?:([+-]|)"+G+"*(\\d+)|))"+G+"*\\)|)","i"),bool:new RegExp("^(?:"+Ye+")$","i"),needsContext:new RegExp("^"+G+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+G+"*((?:-\\d)?\\d*)"+G+"*\\)|)(?=[^-]|$)","i")},st=/^(?:input|select|textarea|button)$/i,at=/^h\d$/i,Ue=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ur=/[+~]/,nt=new RegExp("\\\\[\\da-fA-F]{1,6}"+G+"?|\\\\([^\\r\\n\\f])","g"),it=function(v,w){var N="0x"+v.slice(1)-65536;return w||(N<0?String.fromCharCode(N+65536):String.fromCharCode(N>>10|55296,N&1023|56320))},In=function(){lt()},Ln=Gt(function(v){return v.disabled===!0&&U(v,"fieldset")},{dir:"parentNode",next:"legend"});function Mn(){try{return _.activeElement}catch{}}try{E.apply(r=s.call(le.childNodes),le.childNodes),r[le.childNodes.length].nodeType}catch{E={apply:function(w,N){ve.apply(w,s.call(N))},call:function(w){ve.apply(w,s.call(arguments,1))}}}function Ae(v,w,N,D){var M,X,J,ne,Z,me,se,ce=w&&w.ownerDocument,ge=w?w.nodeType:9;if(N=N||[],typeof v!="string"||!v||ge!==1&&ge!==9&&ge!==11)return N;if(!D&&(lt(w),w=w||_,b)){if(ge!==11&&(Z=Ue.exec(v)))if(M=Z[1]){if(ge===9)if(J=w.getElementById(M)){if(J.id===M)return E.call(N,J),N}else return N;else if(ce&&(J=ce.getElementById(M))&&Ae.contains(w,J)&&J.id===M)return E.call(N,J),N}else{if(Z[2])return E.apply(N,w.getElementsByTagName(v)),N;if((M=Z[3])&&w.getElementsByClassName)return E.apply(N,w.getElementsByClassName(M)),N}if(!Pe[v+" "]&&(!O||!O.test(v))){if(se=v,ce=w,ge===1&&(cr.test(v)||Dt.test(v))){for(ce=ur.test(v)&&fr(w.parentNode)||w,(ce!=w||!S.scope)&&((ne=w.getAttribute("id"))?ne=u.escapeSelector(ne):w.setAttribute("id",ne=k)),me=It(v),X=me.length;X--;)me[X]=(ne?"#"+ne:":scope")+" "+Wt(me[X]);se=me.join(",")}try{return E.apply(N,ce.querySelectorAll(se)),N}catch{Pe(v,!0)}finally{ne===k&&w.removeAttribute("id")}}}return zr(v.replace(ie,"$1"),w,N,D)}function Ut(){var v=[];function w(N,D){return v.push(N+" ")>a.cacheLength&&delete w[v.shift()],w[N+" "]=D}return w}function Ke(v){return v[k]=!0,v}function St(v){var w=_.createElement("fieldset");try{return!!v(w)}catch{return!1}finally{w.parentNode&&w.parentNode.removeChild(w),w=null}}function kn(v){return function(w){return U(w,"input")&&w.type===v}}function jn(v){return function(w){return(U(w,"input")||U(w,"button"))&&w.type===v}}function Kr(v){return function(w){return"form"in w?w.parentNode&&w.disabled===!1?"label"in w?"label"in w.parentNode?w.parentNode.disabled===v:w.disabled===v:w.isDisabled===v||w.isDisabled!==!v&&Ln(w)===v:w.disabled===v:"label"in w?w.disabled===v:!1}}function mt(v){return Ke(function(w){return w=+w,Ke(function(N,D){for(var M,X=v([],N.length,w),J=X.length;J--;)N[M=X[J]]&&(N[M]=!(D[M]=N[M]))})})}function fr(v){return v&&typeof v.getElementsByTagName<"u"&&v}function lt(v){var w,N=v?v.ownerDocument||v:le;return N==_||N.nodeType!==9||!N.documentElement||(_=N,T=_.documentElement,b=!u.isXMLDoc(_),L=T.matches||T.webkitMatchesSelector||T.msMatchesSelector,T.msMatchesSelector&&le!=_&&(w=_.defaultView)&&w.top!==w&&w.addEventListener("unload",In),S.getById=St(function(D){return T.appendChild(D).id=u.expando,!_.getElementsByName||!_.getElementsByName(u.expando).length}),S.disconnectedMatch=St(function(D){return L.call(D,"*")}),S.scope=St(function(){return _.querySelectorAll(":scope")}),S.cssHas=St(function(){try{return _.querySelector(":has(*,:jqfake)"),!1}catch{return!0}}),S.getById?(a.filter.ID=function(D){var M=D.replace(nt,it);return function(X){return X.getAttribute("id")===M}},a.find.ID=function(D,M){if(typeof M.getElementById<"u"&&b){var X=M.getElementById(D);return X?[X]:[]}}):(a.filter.ID=function(D){var M=D.replace(nt,it);return function(X){var J=typeof X.getAttributeNode<"u"&&X.getAttributeNode("id");return J&&J.value===M}},a.find.ID=function(D,M){if(typeof M.getElementById<"u"&&b){var X,J,ne,Z=M.getElementById(D);if(Z){if(X=Z.getAttributeNode("id"),X&&X.value===D)return[Z];for(ne=M.getElementsByName(D),J=0;Z=ne[J++];)if(X=Z.getAttributeNode("id"),X&&X.value===D)return[Z]}return[]}}),a.find.TAG=function(D,M){return typeof M.getElementsByTagName<"u"?M.getElementsByTagName(D):M.querySelectorAll(D)},a.find.CLASS=function(D,M){if(typeof M.getElementsByClassName<"u"&&b)return M.getElementsByClassName(D)},O=[],St(function(D){var M;T.appendChild(D).innerHTML="<a id='"+k+"' href='' disabled='disabled'></a><select id='"+k+"-\r\\' disabled='disabled'><option selected=''></option></select>",D.querySelectorAll("[selected]").length||O.push("\\["+G+"*(?:value|"+Ye+")"),D.querySelectorAll("[id~="+k+"-]").length||O.push("~="),D.querySelectorAll("a#"+k+"+*").length||O.push(".#.+[+~]"),D.querySelectorAll(":checked").length||O.push(":checked"),M=_.createElement("input"),M.setAttribute("type","hidden"),D.appendChild(M).setAttribute("name","D"),T.appendChild(D).disabled=!0,D.querySelectorAll(":disabled").length!==2&&O.push(":enabled",":disabled"),M=_.createElement("input"),M.setAttribute("name",""),D.appendChild(M),D.querySelectorAll("[name='']").length||O.push("\\["+G+"*name"+G+"*="+G+`*(?:''|"")`)}),S.cssHas||O.push(":has"),O=O.length&&new RegExp(O.join("|")),Ne=function(D,M){if(D===M)return g=!0,0;var X=!D.compareDocumentPosition-!M.compareDocumentPosition;return X||(X=(D.ownerDocument||D)==(M.ownerDocument||M)?D.compareDocumentPosition(M):1,X&1||!S.sortDetached&&M.compareDocumentPosition(D)===X?D===_||D.ownerDocument==le&&Ae.contains(le,D)?-1:M===_||M.ownerDocument==le&&Ae.contains(le,M)?1:d?h.call(d,D)-h.call(d,M):0:X&4?-1:1)}),_}Ae.matches=function(v,w){return Ae(v,null,null,w)},Ae.matchesSelector=function(v,w){if(lt(v),b&&!Pe[w+" "]&&(!O||!O.test(w)))try{var N=L.call(v,w);if(N||S.disconnectedMatch||v.document&&v.document.nodeType!==11)return N}catch{Pe(w,!0)}return Ae(w,_,null,[v]).length>0},Ae.contains=function(v,w){return(v.ownerDocument||v)!=_&&lt(v),u.contains(v,w)},Ae.attr=function(v,w){(v.ownerDocument||v)!=_&&lt(v);var N=a.attrHandle[w.toLowerCase()],D=N&&y.call(a.attrHandle,w.toLowerCase())?N(v,w,!b):void 0;return D!==void 0?D:v.getAttribute(w)},Ae.error=function(v){throw new Error("Syntax error, unrecognized expression: "+v)},u.uniqueSort=function(v){var w,N=[],D=0,M=0;if(g=!S.sortStable,d=!S.sortStable&&s.call(v,0),q.call(v,Ne),g){for(;w=v[M++];)w===v[M]&&(D=N.push(M));for(;D--;)K.call(v,N[D],1)}return d=null,v},u.fn.uniqueSort=function(){return this.pushStack(u.uniqueSort(s.apply(this)))},a=u.expr={cacheLength:50,createPseudo:Ke,match:Qe,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(v){return v[1]=v[1].replace(nt,it),v[3]=(v[3]||v[4]||v[5]||"").replace(nt,it),v[2]==="~="&&(v[3]=" "+v[3]+" "),v.slice(0,4)},CHILD:function(v){return v[1]=v[1].toLowerCase(),v[1].slice(0,3)==="nth"?(v[3]||Ae.error(v[0]),v[4]=+(v[4]?v[5]+(v[6]||1):2*(v[3]==="even"||v[3]==="odd")),v[5]=+(v[7]+v[8]||v[3]==="odd")):v[3]&&Ae.error(v[0]),v},PSEUDO:function(v){var w,N=!v[6]&&v[2];return Qe.CHILD.test(v[0])?null:(v[3]?v[2]=v[4]||v[5]||"":N&&Xe.test(N)&&(w=It(N,!0))&&(w=N.indexOf(")",N.length-w)-N.length)&&(v[0]=v[0].slice(0,w),v[2]=N.slice(0,w)),v.slice(0,3))}},filter:{TAG:function(v){var w=v.replace(nt,it).toLowerCase();return v==="*"?function(){return!0}:function(N){return U(N,w)}},CLASS:function(v){var w=ae[v+" "];return w||(w=new RegExp("(^|"+G+")"+v+"("+G+"|$)"))&&ae(v,function(N){return w.test(typeof N.className=="string"&&N.className||typeof N.getAttribute<"u"&&N.getAttribute("class")||"")})},ATTR:function(v,w,N){return function(D){var M=Ae.attr(D,v);return M==null?w==="!=":w?(M+="",w==="="?M===N:w==="!="?M!==N:w==="^="?N&&M.indexOf(N)===0:w==="*="?N&&M.indexOf(N)>-1:w==="$="?N&&M.slice(-N.length)===N:w==="~="?(" "+M.replace(ye," ")+" ").indexOf(N)>-1:w==="|="?M===N||M.slice(0,N.length+1)===N+"-":!1):!0}},CHILD:function(v,w,N,D,M){var X=v.slice(0,3)!=="nth",J=v.slice(-4)!=="last",ne=w==="of-type";return D===1&&M===0?function(Z){return!!Z.parentNode}:function(Z,me,se){var ce,ge,oe,Te,He,Ie=X!==J?"nextSibling":"previousSibling",We=Z.parentNode,Je=ne&&Z.nodeName.toLowerCase(),wt=!se&&!ne,Le=!1;if(We){if(X){for(;Ie;){for(oe=Z;oe=oe[Ie];)if(ne?U(oe,Je):oe.nodeType===1)return!1;He=Ie=v==="only"&&!He&&"nextSibling"}return!0}if(He=[J?We.firstChild:We.lastChild],J&&wt){for(ge=We[k]||(We[k]={}),ce=ge[v]||[],Te=ce[0]===R&&ce[1],Le=Te&&ce[2],oe=Te&&We.childNodes[Te];oe=++Te&&oe&&oe[Ie]||(Le=Te=0)||He.pop();)if(oe.nodeType===1&&++Le&&oe===Z){ge[v]=[R,Te,Le];break}}else if(wt&&(ge=Z[k]||(Z[k]={}),ce=ge[v]||[],Te=ce[0]===R&&ce[1],Le=Te),Le===!1)for(;(oe=++Te&&oe&&oe[Ie]||(Le=Te=0)||He.pop())&&!((ne?U(oe,Je):oe.nodeType===1)&&++Le&&(wt&&(ge=oe[k]||(oe[k]={}),ge[v]=[R,Le]),oe===Z)););return Le-=M,Le===D||Le%D===0&&Le/D>=0}}},PSEUDO:function(v,w){var N,D=a.pseudos[v]||a.setFilters[v.toLowerCase()]||Ae.error("unsupported pseudo: "+v);return D[k]?D(w):D.length>1?(N=[v,v,"",w],a.setFilters.hasOwnProperty(v.toLowerCase())?Ke(function(M,X){for(var J,ne=D(M,w),Z=ne.length;Z--;)J=h.call(M,ne[Z]),M[J]=!(X[J]=ne[Z])}):function(M){return D(M,0,N)}):D}},pseudos:{not:Ke(function(v){var w=[],N=[],D=mr(v.replace(ie,"$1"));return D[k]?Ke(function(M,X,J,ne){for(var Z,me=D(M,null,ne,[]),se=M.length;se--;)(Z=me[se])&&(M[se]=!(X[se]=Z))}):function(M,X,J){return w[0]=M,D(w,null,J,N),w[0]=null,!N.pop()}}),has:Ke(function(v){return function(w){return Ae(v,w).length>0}}),contains:Ke(function(v){return v=v.replace(nt,it),function(w){return(w.textContent||u.text(w)).indexOf(v)>-1}}),lang:Ke(function(v){return Pt.test(v||"")||Ae.error("unsupported lang: "+v),v=v.replace(nt,it).toLowerCase(),function(w){var N;do if(N=b?w.lang:w.getAttribute("xml:lang")||w.getAttribute("lang"))return N=N.toLowerCase(),N===v||N.indexOf(v+"-")===0;while((w=w.parentNode)&&w.nodeType===1);return!1}}),target:function(v){var w=e.location&&e.location.hash;return w&&w.slice(1)===v.id},root:function(v){return v===T},focus:function(v){return v===Mn()&&_.hasFocus()&&!!(v.type||v.href||~v.tabIndex)},enabled:Kr(!1),disabled:Kr(!0),checked:function(v){return U(v,"input")&&!!v.checked||U(v,"option")&&!!v.selected},selected:function(v){return v.parentNode&&v.parentNode.selectedIndex,v.selected===!0},empty:function(v){for(v=v.firstChild;v;v=v.nextSibling)if(v.nodeType<6)return!1;return!0},parent:function(v){return!a.pseudos.empty(v)},header:function(v){return at.test(v.nodeName)},input:function(v){return st.test(v.nodeName)},button:function(v){return U(v,"input")&&v.type==="button"||U(v,"button")},text:function(v){var w;return U(v,"input")&&v.type==="text"&&((w=v.getAttribute("type"))==null||w.toLowerCase()==="text")},first:mt(function(){return[0]}),last:mt(function(v,w){return[w-1]}),eq:mt(function(v,w,N){return[N<0?N+w:N]}),even:mt(function(v,w){for(var N=0;N<w;N+=2)v.push(N);return v}),odd:mt(function(v,w){for(var N=1;N<w;N+=2)v.push(N);return v}),lt:mt(function(v,w,N){var D;for(N<0?D=N+w:N>w?D=w:D=N;--D>=0;)v.push(D);return v}),gt:mt(function(v,w,N){for(var D=N<0?N+w:N;++D<w;)v.push(D);return v})}},a.pseudos.nth=a.pseudos.eq;for(o in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})a.pseudos[o]=kn(o);for(o in{submit:!0,reset:!0})a.pseudos[o]=jn(o);function Yr(){}Yr.prototype=a.filters=a.pseudos,a.setFilters=new Yr;function It(v,w){var N,D,M,X,J,ne,Z,me=_e[v+" "];if(me)return w?0:me.slice(0);for(J=v,ne=[],Z=a.preFilter;J;){(!N||(D=Ce.exec(J)))&&(D&&(J=J.slice(D[0].length)||J),ne.push(M=[])),N=!1,(D=Dt.exec(J))&&(N=D.shift(),M.push({value:N,type:D[0].replace(ie," ")}),J=J.slice(N.length));for(X in a.filter)(D=Qe[X].exec(J))&&(!Z[X]||(D=Z[X](D)))&&(N=D.shift(),M.push({value:N,type:X,matches:D}),J=J.slice(N.length));if(!N)break}return w?J.length:J?Ae.error(v):_e(v,ne).slice(0)}function Wt(v){for(var w=0,N=v.length,D="";w<N;w++)D+=v[w].value;return D}function Gt(v,w,N){var D=w.dir,M=w.next,X=M||D,J=N&&X==="parentNode",ne=W++;return w.first?function(Z,me,se){for(;Z=Z[D];)if(Z.nodeType===1||J)return v(Z,me,se);return!1}:function(Z,me,se){var ce,ge,oe=[R,ne];if(se){for(;Z=Z[D];)if((Z.nodeType===1||J)&&v(Z,me,se))return!0}else for(;Z=Z[D];)if(Z.nodeType===1||J)if(ge=Z[k]||(Z[k]={}),M&&U(Z,M))Z=Z[D]||Z;else{if((ce=ge[X])&&ce[0]===R&&ce[1]===ne)return oe[2]=ce[2];if(ge[X]=oe,oe[2]=v(Z,me,se))return!0}return!1}}function dr(v){return v.length>1?function(w,N,D){for(var M=v.length;M--;)if(!v[M](w,N,D))return!1;return!0}:v[0]}function Hn(v,w,N){for(var D=0,M=w.length;D<M;D++)Ae(v,w[D],N);return N}function qt(v,w,N,D,M){for(var X,J=[],ne=0,Z=v.length,me=w!=null;ne<Z;ne++)(X=v[ne])&&(!N||N(X,D,M))&&(J.push(X),me&&w.push(ne));return J}function pr(v,w,N,D,M,X){return D&&!D[k]&&(D=pr(D)),M&&!M[k]&&(M=pr(M,X)),Ke(function(J,ne,Z,me){var se,ce,ge,oe,Te=[],He=[],Ie=ne.length,We=J||Hn(w||"*",Z.nodeType?[Z]:Z,[]),Je=v&&(J||!w)?qt(We,Te,v,Z,me):We;if(N?(oe=M||(J?v:Ie||D)?[]:ne,N(Je,oe,Z,me)):oe=Je,D)for(se=qt(oe,He),D(se,[],Z,me),ce=se.length;ce--;)(ge=se[ce])&&(oe[He[ce]]=!(Je[He[ce]]=ge));if(J){if(M||v){if(M){for(se=[],ce=oe.length;ce--;)(ge=oe[ce])&&se.push(Je[ce]=ge);M(null,oe=[],se,me)}for(ce=oe.length;ce--;)(ge=oe[ce])&&(se=M?h.call(J,ge):Te[ce])>-1&&(J[se]=!(ne[se]=ge))}}else oe=qt(oe===ne?oe.splice(Ie,oe.length):oe),M?M(null,ne,oe,me):E.apply(ne,oe)})}function hr(v){for(var w,N,D,M=v.length,X=a.relative[v[0].type],J=X||a.relative[" "],ne=X?1:0,Z=Gt(function(ce){return ce===w},J,!0),me=Gt(function(ce){return h.call(w,ce)>-1},J,!0),se=[function(ce,ge,oe){var Te=!X&&(oe||ge!=c)||((w=ge).nodeType?Z(ce,ge,oe):me(ce,ge,oe));return w=null,Te}];ne<M;ne++)if(N=a.relative[v[ne].type])se=[Gt(dr(se),N)];else{if(N=a.filter[v[ne].type].apply(null,v[ne].matches),N[k]){for(D=++ne;D<M&&!a.relative[v[D].type];D++);return pr(ne>1&&dr(se),ne>1&&Wt(v.slice(0,ne-1).concat({value:v[ne-2].type===" "?"*":""})).replace(ie,"$1"),N,ne<D&&hr(v.slice(ne,D)),D<M&&hr(v=v.slice(D)),D<M&&Wt(v))}se.push(N)}return dr(se)}function Bn(v,w){var N=w.length>0,D=v.length>0,M=function(X,J,ne,Z,me){var se,ce,ge,oe=0,Te="0",He=X&&[],Ie=[],We=c,Je=X||D&&a.find.TAG("*",me),wt=R+=We==null?1:Math.random()||.1,Le=Je.length;for(me&&(c=J==_||J||me);Te!==Le&&(se=Je[Te])!=null;Te++){if(D&&se){for(ce=0,!J&&se.ownerDocument!=_&&(lt(se),ne=!b);ge=v[ce++];)if(ge(se,J||_,ne)){E.call(Z,se);break}me&&(R=wt)}N&&((se=!ge&&se)&&oe--,X&&He.push(se))}if(oe+=Te,N&&Te!==oe){for(ce=0;ge=w[ce++];)ge(He,Ie,J,ne);if(X){if(oe>0)for(;Te--;)He[Te]||Ie[Te]||(Ie[Te]=P.call(Z));Ie=qt(Ie)}E.apply(Z,Ie),me&&!X&&Ie.length>0&&oe+w.length>1&&u.uniqueSort(Z)}return me&&(R=wt,c=We),He};return N?Ke(M):M}function mr(v,w){var N,D=[],M=[],X=pe[v+" "];if(!X){for(w||(w=It(v)),N=w.length;N--;)X=hr(w[N]),X[k]?D.push(X):M.push(X);X=pe(v,Bn(M,D)),X.selector=v}return X}function zr(v,w,N,D){var M,X,J,ne,Z,me=typeof v=="function"&&v,se=!D&&It(v=me.selector||v);if(N=N||[],se.length===1){if(X=se[0]=se[0].slice(0),X.length>2&&(J=X[0]).type==="ID"&&w.nodeType===9&&b&&a.relative[X[1].type]){if(w=(a.find.ID(J.matches[0].replace(nt,it),w)||[])[0],w)me&&(w=w.parentNode);else return N;v=v.slice(X.shift().value.length)}for(M=Qe.needsContext.test(v)?0:X.length;M--&&(J=X[M],!a.relative[ne=J.type]);)if((Z=a.find[ne])&&(D=Z(J.matches[0].replace(nt,it),ur.test(X[0].type)&&fr(w.parentNode)||w))){if(X.splice(M,1),v=D.length&&Wt(X),!v)return E.apply(N,D),N;break}}return(me||mr(v,se))(D,w,!b,N,!w||ur.test(v)&&fr(w.parentNode)||w),N}S.sortStable=k.split("").sort(Ne).join("")===k,lt(),S.sortDetached=St(function(v){return v.compareDocumentPosition(_.createElement("fieldset"))&1}),u.find=Ae,u.expr[":"]=u.expr.pseudos,u.unique=u.uniqueSort,Ae.compile=mr,Ae.select=zr,Ae.setDocument=lt,Ae.tokenize=It,Ae.escape=u.escapeSelector,Ae.getText=u.text,Ae.isXML=u.isXMLDoc,Ae.selectors=u.expr,Ae.support=u.support,Ae.uniqueSort=u.uniqueSort})();var he=function(o,a,c){for(var d=[],g=c!==void 0;(o=o[a])&&o.nodeType!==9;)if(o.nodeType===1){if(g&&u(o).is(c))break;d.push(o)}return d},Re=function(o,a){for(var c=[];o;o=o.nextSibling)o.nodeType===1&&o!==a&&c.push(o);return c},fe=u.expr.match.needsContext,be=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function we(o,a,c){return C(a)?u.grep(o,function(d,g){return!!a.call(d,g,d)!==c}):a.nodeType?u.grep(o,function(d){return d===a!==c}):typeof a!="string"?u.grep(o,function(d){return h.call(a,d)>-1!==c}):u.filter(a,o,c)}u.filter=function(o,a,c){var d=a[0];return c&&(o=":not("+o+")"),a.length===1&&d.nodeType===1?u.find.matchesSelector(d,o)?[d]:[]:u.find.matches(o,u.grep(a,function(g){return g.nodeType===1}))},u.fn.extend({find:function(o){var a,c,d=this.length,g=this;if(typeof o!="string")return this.pushStack(u(o).filter(function(){for(a=0;a<d;a++)if(u.contains(g[a],this))return!0}));for(c=this.pushStack([]),a=0;a<d;a++)u.find(o,g[a],c);return d>1?u.uniqueSort(c):c},filter:function(o){return this.pushStack(we(this,o||[],!1))},not:function(o){return this.pushStack(we(this,o||[],!0))},is:function(o){return!!we(this,typeof o=="string"&&fe.test(o)?u(o):o||[],!1).length}});var xe,j=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,te=u.fn.init=function(o,a,c){var d,g;if(!o)return this;if(c=c||xe,typeof o=="string")if(o[0]==="<"&&o[o.length-1]===">"&&o.length>=3?d=[null,o,null]:d=j.exec(o),d&&(d[1]||!a))if(d[1]){if(a=a instanceof u?a[0]:a,u.merge(this,u.parseHTML(d[1],a&&a.nodeType?a.ownerDocument||a:I,!0)),be.test(d[1])&&u.isPlainObject(a))for(d in a)C(this[d])?this[d](a[d]):this.attr(d,a[d]);return this}else return g=I.getElementById(d[2]),g&&(this[0]=g,this.length=1),this;else return!a||a.jquery?(a||c).find(o):this.constructor(a).find(o);else{if(o.nodeType)return this[0]=o,this.length=1,this;if(C(o))return c.ready!==void 0?c.ready(o):o(u)}return u.makeArray(o,this)};te.prototype=u.fn,xe=u(I);var Se=/^(?:parents|prev(?:Until|All))/,$e={children:!0,contents:!0,next:!0,prev:!0};u.fn.extend({has:function(o){var a=u(o,this),c=a.length;return this.filter(function(){for(var d=0;d<c;d++)if(u.contains(this,a[d]))return!0})},closest:function(o,a){var c,d=0,g=this.length,E=[],_=typeof o!="string"&&u(o);if(!fe.test(o)){for(;d<g;d++)for(c=this[d];c&&c!==a;c=c.parentNode)if(c.nodeType<11&&(_?_.index(c)>-1:c.nodeType===1&&u.find.matchesSelector(c,o))){E.push(c);break}}return this.pushStack(E.length>1?u.uniqueSort(E):E)},index:function(o){return o?typeof o=="string"?h.call(u(o),this[0]):h.call(this,o.jquery?o[0]:o):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(o,a){return this.pushStack(u.uniqueSort(u.merge(this.get(),u(o,a))))},addBack:function(o){return this.add(o==null?this.prevObject:this.prevObject.filter(o))}});function Me(o,a){for(;(o=o[a])&&o.nodeType!==1;);return o}u.each({parent:function(o){var a=o.parentNode;return a&&a.nodeType!==11?a:null},parents:function(o){return he(o,"parentNode")},parentsUntil:function(o,a,c){return he(o,"parentNode",c)},next:function(o){return Me(o,"nextSibling")},prev:function(o){return Me(o,"previousSibling")},nextAll:function(o){return he(o,"nextSibling")},prevAll:function(o){return he(o,"previousSibling")},nextUntil:function(o,a,c){return he(o,"nextSibling",c)},prevUntil:function(o,a,c){return he(o,"previousSibling",c)},siblings:function(o){return Re((o.parentNode||{}).firstChild,o)},children:function(o){return Re(o.firstChild)},contents:function(o){return o.contentDocument!=null&&i(o.contentDocument)?o.contentDocument:(U(o,"template")&&(o=o.content||o),u.merge([],o.childNodes))}},function(o,a){u.fn[o]=function(c,d){var g=u.map(this,a,c);return o.slice(-5)!=="Until"&&(d=c),d&&typeof d=="string"&&(g=u.filter(d,g)),this.length>1&&($e[o]||u.uniqueSort(g),Se.test(o)&&g.reverse()),this.pushStack(g)}});var Oe=/[^\x20\t\r\n\f]+/g;function Ze(o){var a={};return u.each(o.match(Oe)||[],function(c,d){a[d]=!0}),a}u.Callbacks=function(o){o=typeof o=="string"?Ze(o):u.extend({},o);var a,c,d,g,E=[],_=[],T=-1,b=function(){for(g=g||o.once,d=a=!0;_.length;T=-1)for(c=_.shift();++T<E.length;)E[T].apply(c[0],c[1])===!1&&o.stopOnFalse&&(T=E.length,c=!1);o.memory||(c=!1),a=!1,g&&(c?E=[]:E="")},O={add:function(){return E&&(c&&!a&&(T=E.length-1,_.push(c)),function L(k){u.each(k,function(R,W){C(W)?(!o.unique||!O.has(W))&&E.push(W):W&&W.length&&Q(W)!=="string"&&L(W)})}(arguments),c&&!a&&b()),this},remove:function(){return u.each(arguments,function(L,k){for(var R;(R=u.inArray(k,E,R))>-1;)E.splice(R,1),R<=T&&T--}),this},has:function(L){return L?u.inArray(L,E)>-1:E.length>0},empty:function(){return E&&(E=[]),this},disable:function(){return g=_=[],E=c="",this},disabled:function(){return!E},lock:function(){return g=_=[],!c&&!a&&(E=c=""),this},locked:function(){return!!g},fireWith:function(L,k){return g||(k=k||[],k=[L,k.slice?k.slice():k],_.push(k),a||b()),this},fire:function(){return O.fireWith(this,arguments),this},fired:function(){return!!d}};return O};function Be(o){return o}function ct(o){throw o}function Lt(o,a,c,d){var g;try{o&&C(g=o.promise)?g.call(o).done(a).fail(c):o&&C(g=o.then)?g.call(o,a,c):a.apply(void 0,[o].slice(d))}catch(E){c.apply(void 0,[E])}}u.extend({Deferred:function(o){var a=[["notify","progress",u.Callbacks("memory"),u.Callbacks("memory"),2],["resolve","done",u.Callbacks("once memory"),u.Callbacks("once memory"),0,"resolved"],["reject","fail",u.Callbacks("once memory"),u.Callbacks("once memory"),1,"rejected"]],c="pending",d={state:function(){return c},always:function(){return g.done(arguments).fail(arguments),this},catch:function(E){return d.then(null,E)},pipe:function(){var E=arguments;return u.Deferred(function(_){u.each(a,function(T,b){var O=C(E[b[4]])&&E[b[4]];g[b[1]](function(){var L=O&&O.apply(this,arguments);L&&C(L.promise)?L.promise().progress(_.notify).done(_.resolve).fail(_.reject):_[b[0]+"With"](this,O?[L]:arguments)})}),E=null}).promise()},then:function(E,_,T){var b=0;function O(L,k,R,W){return function(){var ae=this,_e=arguments,pe=function(){var Ne,Ye;if(!(L<b)){if(Ne=R.apply(ae,_e),Ne===k.promise())throw new TypeError("Thenable self-resolution");Ye=Ne&&(typeof Ne=="object"||typeof Ne=="function")&&Ne.then,C(Ye)?W?Ye.call(Ne,O(b,k,Be,W),O(b,k,ct,W)):(b++,Ye.call(Ne,O(b,k,Be,W),O(b,k,ct,W),O(b,k,Be,k.notifyWith))):(R!==Be&&(ae=void 0,_e=[Ne]),(W||k.resolveWith)(ae,_e))}},Pe=W?pe:function(){try{pe()}catch(Ne){u.Deferred.exceptionHook&&u.Deferred.exceptionHook(Ne,Pe.error),L+1>=b&&(R!==ct&&(ae=void 0,_e=[Ne]),k.rejectWith(ae,_e))}};L?Pe():(u.Deferred.getErrorHook?Pe.error=u.Deferred.getErrorHook():u.Deferred.getStackHook&&(Pe.error=u.Deferred.getStackHook()),e.setTimeout(Pe))}}return u.Deferred(function(L){a[0][3].add(O(0,L,C(T)?T:Be,L.notifyWith)),a[1][3].add(O(0,L,C(E)?E:Be)),a[2][3].add(O(0,L,C(_)?_:ct))}).promise()},promise:function(E){return E!=null?u.extend(E,d):d}},g={};return u.each(a,function(E,_){var T=_[2],b=_[5];d[_[1]]=T.add,b&&T.add(function(){c=b},a[3-E][2].disable,a[3-E][3].disable,a[0][2].lock,a[0][3].lock),T.add(_[3].fire),g[_[0]]=function(){return g[_[0]+"With"](this===g?void 0:this,arguments),this},g[_[0]+"With"]=T.fireWith}),d.promise(g),o&&o.call(g,g),g},when:function(o){var a=arguments.length,c=a,d=Array(c),g=s.call(arguments),E=u.Deferred(),_=function(T){return function(b){d[T]=this,g[T]=arguments.length>1?s.call(arguments):b,--a||E.resolveWith(d,g)}};if(a<=1&&(Lt(o,E.done(_(c)).resolve,E.reject,!a),E.state()==="pending"||C(g[c]&&g[c].then)))return E.then();for(;c--;)Lt(g[c],_(c),E.reject);return E.promise()}});var Kt=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;u.Deferred.exceptionHook=function(o,a){e.console&&e.console.warn&&o&&Kt.test(o.name)&&e.console.warn("jQuery.Deferred exception: "+o.message,o.stack,a)},u.readyException=function(o){e.setTimeout(function(){throw o})};var gt=u.Deferred();u.fn.ready=function(o){return gt.then(o).catch(function(a){u.readyException(a)}),this},u.extend({isReady:!1,readyWait:1,ready:function(o){(o===!0?--u.readyWait:u.isReady)||(u.isReady=!0,!(o!==!0&&--u.readyWait>0)&&gt.resolveWith(I,[u]))}}),u.ready.then=gt.then;function ut(){I.removeEventListener("DOMContentLoaded",ut),e.removeEventListener("load",ut),u.ready()}I.readyState==="complete"||I.readyState!=="loading"&&!I.documentElement.doScroll?e.setTimeout(u.ready):(I.addEventListener("DOMContentLoaded",ut),e.addEventListener("load",ut));var Ge=function(o,a,c,d,g,E,_){var T=0,b=o.length,O=c==null;if(Q(c)==="object"){g=!0;for(T in c)Ge(o,a,T,c[T],!0,E,_)}else if(d!==void 0&&(g=!0,C(d)||(_=!0),O&&(_?(a.call(o,d),a=null):(O=a,a=function(L,k,R){return O.call(u(L),R)})),a))for(;T<b;T++)a(o[T],c,_?d:d.call(o[T],T,a(o[T],c)));return g?o:O?a.call(o):b?a(o[0],c):E},Yt=/^-ms-/,et=/-([a-z])/g;function Et(o,a){return a.toUpperCase()}function Fe(o){return o.replace(Yt,"ms-").replace(et,Et)}var ot=function(o){return o.nodeType===1||o.nodeType===9||!+o.nodeType};function tt(){this.expando=u.expando+tt.uid++}tt.uid=1,tt.prototype={cache:function(o){var a=o[this.expando];return a||(a={},ot(o)&&(o.nodeType?o[this.expando]=a:Object.defineProperty(o,this.expando,{value:a,configurable:!0}))),a},set:function(o,a,c){var d,g=this.cache(o);if(typeof a=="string")g[Fe(a)]=c;else for(d in a)g[Fe(d)]=a[d];return g},get:function(o,a){return a===void 0?this.cache(o):o[this.expando]&&o[this.expando][Fe(a)]},access:function(o,a,c){return a===void 0||a&&typeof a=="string"&&c===void 0?this.get(o,a):(this.set(o,a,c),c!==void 0?c:a)},remove:function(o,a){var c,d=o[this.expando];if(d!==void 0){if(a!==void 0)for(Array.isArray(a)?a=a.map(Fe):(a=Fe(a),a=a in d?[a]:a.match(Oe)||[]),c=a.length;c--;)delete d[a[c]];(a===void 0||u.isEmptyObject(d))&&(o.nodeType?o[this.expando]=void 0:delete o[this.expando])}},hasData:function(o){var a=o[this.expando];return a!==void 0&&!u.isEmptyObject(a)}};var re=new tt,De=new tt,Mt=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,kt=/[A-Z]/g;function Xr(o){return o==="true"?!0:o==="false"?!1:o==="null"?null:o===+o+""?+o:Mt.test(o)?JSON.parse(o):o}function gr(o,a,c){var d;if(c===void 0&&o.nodeType===1)if(d="data-"+a.replace(kt,"-$&").toLowerCase(),c=o.getAttribute(d),typeof c=="string"){try{c=Xr(c)}catch{}De.set(o,a,c)}else c=void 0;return c}u.extend({hasData:function(o){return De.hasData(o)||re.hasData(o)},data:function(o,a,c){return De.access(o,a,c)},removeData:function(o,a){De.remove(o,a)},_data:function(o,a,c){return re.access(o,a,c)},_removeData:function(o,a){re.remove(o,a)}}),u.fn.extend({data:function(o,a){var c,d,g,E=this[0],_=E&&E.attributes;if(o===void 0){if(this.length&&(g=De.get(E),E.nodeType===1&&!re.get(E,"hasDataAttrs"))){for(c=_.length;c--;)_[c]&&(d=_[c].name,d.indexOf("data-")===0&&(d=Fe(d.slice(5)),gr(E,d,g[d])));re.set(E,"hasDataAttrs",!0)}return g}return typeof o=="object"?this.each(function(){De.set(this,o)}):Ge(this,function(T){var b;if(E&&T===void 0)return b=De.get(E,o),b!==void 0||(b=gr(E,o),b!==void 0)?b:void 0;this.each(function(){De.set(this,o,T)})},null,a,arguments.length>1,null,!0)},removeData:function(o){return this.each(function(){De.remove(this,o)})}}),u.extend({queue:function(o,a,c){var d;if(o)return a=(a||"fx")+"queue",d=re.get(o,a),c&&(!d||Array.isArray(c)?d=re.access(o,a,u.makeArray(c)):d.push(c)),d||[]},dequeue:function(o,a){a=a||"fx";var c=u.queue(o,a),d=c.length,g=c.shift(),E=u._queueHooks(o,a),_=function(){u.dequeue(o,a)};g==="inprogress"&&(g=c.shift(),d--),g&&(a==="fx"&&c.unshift("inprogress"),delete E.stop,g.call(o,_,E)),!d&&E&&E.empty.fire()},_queueHooks:function(o,a){var c=a+"queueHooks";return re.get(o,c)||re.access(o,c,{empty:u.Callbacks("once memory").add(function(){re.remove(o,[a+"queue",c])})})}}),u.fn.extend({queue:function(o,a){var c=2;return typeof o!="string"&&(a=o,o="fx",c--),arguments.length<c?u.queue(this[0],o):a===void 0?this:this.each(function(){var d=u.queue(this,o,a);u._queueHooks(this,o),o==="fx"&&d[0]!=="inprogress"&&u.dequeue(this,o)})},dequeue:function(o){return this.each(function(){u.dequeue(this,o)})},clearQueue:function(o){return this.queue(o||"fx",[])},promise:function(o,a){var c,d=1,g=u.Deferred(),E=this,_=this.length,T=function(){--d||g.resolveWith(E,[E])};for(typeof o!="string"&&(a=o,o=void 0),o=o||"fx";_--;)c=re.get(E[_],o+"queueHooks"),c&&c.empty&&(d++,c.empty.add(T));return T(),g.promise(a)}});var Er=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,$t=new RegExp("^(?:([+-])=|)("+Er+")([a-z%]*)$","i"),rt=["Top","Right","Bottom","Left"],ft=I.documentElement,_t=function(o){return u.contains(o.ownerDocument,o)},Qr={composed:!0};ft.getRootNode&&(_t=function(o){return u.contains(o.ownerDocument,o)||o.getRootNode(Qr)===o.ownerDocument});var jt=function(o,a){return o=a||o,o.style.display==="none"||o.style.display===""&&_t(o)&&u.css(o,"display")==="none"};function _r(o,a,c,d){var g,E,_=20,T=d?function(){return d.cur()}:function(){return u.css(o,a,"")},b=T(),O=c&&c[3]||(u.cssNumber[a]?"":"px"),L=o.nodeType&&(u.cssNumber[a]||O!=="px"&&+b)&&$t.exec(u.css(o,a));if(L&&L[3]!==O){for(b=b/2,O=O||L[3],L=+b||1;_--;)u.style(o,a,L+O),(1-E)*(1-(E=T()/b||.5))<=0&&(_=0),L=L/E;L=L*2,u.style(o,a,L+O),c=c||[]}return c&&(L=+L||+b||0,g=c[1]?L+(c[1]+1)*c[2]:+c[2],d&&(d.unit=O,d.start=L,d.end=g)),g}var yr={};function Jr(o){var a,c=o.ownerDocument,d=o.nodeName,g=yr[d];return g||(a=c.body.appendChild(c.createElement(d)),g=u.css(a,"display"),a.parentNode.removeChild(a),g==="none"&&(g="block"),yr[d]=g,g)}function yt(o,a){for(var c,d,g=[],E=0,_=o.length;E<_;E++)d=o[E],d.style&&(c=d.style.display,a?(c==="none"&&(g[E]=re.get(d,"display")||null,g[E]||(d.style.display="")),d.style.display===""&&jt(d)&&(g[E]=Jr(d))):c!=="none"&&(g[E]="none",re.set(d,"display",c)));for(E=0;E<_;E++)g[E]!=null&&(o[E].style.display=g[E]);return o}u.fn.extend({show:function(){return yt(this,!0)},hide:function(){return yt(this)},toggle:function(o){return typeof o=="boolean"?o?this.show():this.hide():this.each(function(){jt(this)?u(this).show():u(this).hide()})}});var Ot=/^(?:checkbox|radio)$/i,vr=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,br=/^$|^module$|\/(?:java|ecma)script/i;(function(){var o=I.createDocumentFragment(),a=o.appendChild(I.createElement("div")),c=I.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),a.appendChild(c),S.checkClone=a.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="<textarea>x</textarea>",S.noCloneChecked=!!a.cloneNode(!0).lastChild.defaultValue,a.innerHTML="<option></option>",S.option=!!a.lastChild})();var Ve={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};Ve.tbody=Ve.tfoot=Ve.colgroup=Ve.caption=Ve.thead,Ve.th=Ve.td,S.option||(Ve.optgroup=Ve.option=[1,"<select multiple='multiple'>","</select>"]);function ke(o,a){var c;return typeof o.getElementsByTagName<"u"?c=o.getElementsByTagName(a||"*"):typeof o.querySelectorAll<"u"?c=o.querySelectorAll(a||"*"):c=[],a===void 0||a&&U(o,a)?u.merge([o],c):c}function zt(o,a){for(var c=0,d=o.length;c<d;c++)re.set(o[c],"globalEval",!a||re.get(a[c],"globalEval"))}var Zr=/<|&#?\w+;/;function Ar(o,a,c,d,g){for(var E,_,T,b,O,L,k=a.createDocumentFragment(),R=[],W=0,ae=o.length;W<ae;W++)if(E=o[W],E||E===0)if(Q(E)==="object")u.merge(R,E.nodeType?[E]:E);else if(!Zr.test(E))R.push(a.createTextNode(E));else{for(_=_||k.appendChild(a.createElement("div")),T=(vr.exec(E)||["",""])[1].toLowerCase(),b=Ve[T]||Ve._default,_.innerHTML=b[1]+u.htmlPrefilter(E)+b[2],L=b[0];L--;)_=_.lastChild;u.merge(R,_.childNodes),_=k.firstChild,_.textContent=""}for(k.textContent="",W=0;E=R[W++];){if(d&&u.inArray(E,d)>-1){g&&g.push(E);continue}if(O=_t(E),_=ke(k.appendChild(E),"script"),O&&zt(_),c)for(L=0;E=_[L++];)br.test(E.type||"")&&c.push(E)}return k}var Tr=/^([^.]*)(?:\.(.+)|)/;function vt(){return!0}function bt(){return!1}function Xt(o,a,c,d,g,E){var _,T;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=void 0);for(T in a)Xt(o,T,c,d,a[T],E);return o}if(d==null&&g==null?(g=c,d=c=void 0):g==null&&(typeof c=="string"?(g=d,d=void 0):(g=d,d=c,c=void 0)),g===!1)g=bt;else if(!g)return o;return E===1&&(_=g,g=function(b){return u().off(b),_.apply(this,arguments)},g.guid=_.guid||(_.guid=u.guid++)),o.each(function(){u.event.add(this,a,g,d,c)})}u.event={global:{},add:function(o,a,c,d,g){var E,_,T,b,O,L,k,R,W,ae,_e,pe=re.get(o);if(ot(o))for(c.handler&&(E=c,c=E.handler,g=E.selector),g&&u.find.matchesSelector(ft,g),c.guid||(c.guid=u.guid++),(b=pe.events)||(b=pe.events=Object.create(null)),(_=pe.handle)||(_=pe.handle=function(Pe){return typeof u<"u"&&u.event.triggered!==Pe.type?u.event.dispatch.apply(o,arguments):void 0}),a=(a||"").match(Oe)||[""],O=a.length;O--;)T=Tr.exec(a[O])||[],W=_e=T[1],ae=(T[2]||"").split(".").sort(),W&&(k=u.event.special[W]||{},W=(g?k.delegateType:k.bindType)||W,k=u.event.special[W]||{},L=u.extend({type:W,origType:_e,data:d,handler:c,guid:c.guid,selector:g,needsContext:g&&u.expr.match.needsContext.test(g),namespace:ae.join(".")},E),(R=b[W])||(R=b[W]=[],R.delegateCount=0,(!k.setup||k.setup.call(o,d,ae,_)===!1)&&o.addEventListener&&o.addEventListener(W,_)),k.add&&(k.add.call(o,L),L.handler.guid||(L.handler.guid=c.guid)),g?R.splice(R.delegateCount++,0,L):R.push(L),u.event.global[W]=!0)},remove:function(o,a,c,d,g){var E,_,T,b,O,L,k,R,W,ae,_e,pe=re.hasData(o)&&re.get(o);if(!(!pe||!(b=pe.events))){for(a=(a||"").match(Oe)||[""],O=a.length;O--;){if(T=Tr.exec(a[O])||[],W=_e=T[1],ae=(T[2]||"").split(".").sort(),!W){for(W in b)u.event.remove(o,W+a[O],c,d,!0);continue}for(k=u.event.special[W]||{},W=(d?k.delegateType:k.bindType)||W,R=b[W]||[],T=T[2]&&new RegExp("(^|\\.)"+ae.join("\\.(?:.*\\.|)")+"(\\.|$)"),_=E=R.length;E--;)L=R[E],(g||_e===L.origType)&&(!c||c.guid===L.guid)&&(!T||T.test(L.namespace))&&(!d||d===L.selector||d==="**"&&L.selector)&&(R.splice(E,1),L.selector&&R.delegateCount--,k.remove&&k.remove.call(o,L));_&&!R.length&&((!k.teardown||k.teardown.call(o,ae,pe.handle)===!1)&&u.removeEvent(o,W,pe.handle),delete b[W])}u.isEmptyObject(b)&&re.remove(o,"handle events")}},dispatch:function(o){var a,c,d,g,E,_,T=new Array(arguments.length),b=u.event.fix(o),O=(re.get(this,"events")||Object.create(null))[b.type]||[],L=u.event.special[b.type]||{};for(T[0]=b,a=1;a<arguments.length;a++)T[a]=arguments[a];if(b.delegateTarget=this,!(L.preDispatch&&L.preDispatch.call(this,b)===!1)){for(_=u.event.handlers.call(this,b,O),a=0;(g=_[a++])&&!b.isPropagationStopped();)for(b.currentTarget=g.elem,c=0;(E=g.handlers[c++])&&!b.isImmediatePropagationStopped();)(!b.rnamespace||E.namespace===!1||b.rnamespace.test(E.namespace))&&(b.handleObj=E,b.data=E.data,d=((u.event.special[E.origType]||{}).handle||E.handler).apply(g.elem,T),d!==void 0&&(b.result=d)===!1&&(b.preventDefault(),b.stopPropagation()));return L.postDispatch&&L.postDispatch.call(this,b),b.result}},handlers:function(o,a){var c,d,g,E,_,T=[],b=a.delegateCount,O=o.target;if(b&&O.nodeType&&!(o.type==="click"&&o.button>=1)){for(;O!==this;O=O.parentNode||this)if(O.nodeType===1&&!(o.type==="click"&&O.disabled===!0)){for(E=[],_={},c=0;c<b;c++)d=a[c],g=d.selector+" ",_[g]===void 0&&(_[g]=d.needsContext?u(g,this).index(O)>-1:u.find(g,this,null,[O]).length),_[g]&&E.push(d);E.length&&T.push({elem:O,handlers:E})}}return O=this,b<a.length&&T.push({elem:O,handlers:a.slice(b)}),T},addProp:function(o,a){Object.defineProperty(u.Event.prototype,o,{enumerable:!0,configurable:!0,get:C(a)?function(){if(this.originalEvent)return a(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[o]},set:function(c){Object.defineProperty(this,o,{enumerable:!0,configurable:!0,writable:!0,value:c})}})},fix:function(o){return o[u.expando]?o:new u.Event(o)},special:{load:{noBubble:!0},click:{setup:function(o){var a=this||o;return Ot.test(a.type)&&a.click&&U(a,"input")&&Ht(a,"click",!0),!1},trigger:function(o){var a=this||o;return Ot.test(a.type)&&a.click&&U(a,"input")&&Ht(a,"click"),!0},_default:function(o){var a=o.target;return Ot.test(a.type)&&a.click&&U(a,"input")&&re.get(a,"click")||U(a,"a")}},beforeunload:{postDispatch:function(o){o.result!==void 0&&o.originalEvent&&(o.originalEvent.returnValue=o.result)}}}};function Ht(o,a,c){if(!c){re.get(o,a)===void 0&&u.event.add(o,a,vt);return}re.set(o,a,!1),u.event.add(o,a,{namespace:!1,handler:function(d){var g,E=re.get(this,a);if(d.isTrigger&1&&this[a]){if(E)(u.event.special[a]||{}).delegateType&&d.stopPropagation();else if(E=s.call(arguments),re.set(this,a,E),this[a](),g=re.get(this,a),re.set(this,a,!1),E!==g)return d.stopImmediatePropagation(),d.preventDefault(),g}else E&&(re.set(this,a,u.event.trigger(E[0],E.slice(1),this)),d.stopPropagation(),d.isImmediatePropagationStopped=vt)}})}u.removeEvent=function(o,a,c){o.removeEventListener&&o.removeEventListener(a,c)},u.Event=function(o,a){if(!(this instanceof u.Event))return new u.Event(o,a);o&&o.type?(this.originalEvent=o,this.type=o.type,this.isDefaultPrevented=o.defaultPrevented||o.defaultPrevented===void 0&&o.returnValue===!1?vt:bt,this.target=o.target&&o.target.nodeType===3?o.target.parentNode:o.target,this.currentTarget=o.currentTarget,this.relatedTarget=o.relatedTarget):this.type=o,a&&u.extend(this,a),this.timeStamp=o&&o.timeStamp||Date.now(),this[u.expando]=!0},u.Event.prototype={constructor:u.Event,isDefaultPrevented:bt,isPropagationStopped:bt,isImmediatePropagationStopped:bt,isSimulated:!1,preventDefault:function(){var o=this.originalEvent;this.isDefaultPrevented=vt,o&&!this.isSimulated&&o.preventDefault()},stopPropagation:function(){var o=this.originalEvent;this.isPropagationStopped=vt,o&&!this.isSimulated&&o.stopPropagation()},stopImmediatePropagation:function(){var o=this.originalEvent;this.isImmediatePropagationStopped=vt,o&&!this.isSimulated&&o.stopImmediatePropagation(),this.stopPropagation()}},u.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},u.event.addProp),u.each({focus:"focusin",blur:"focusout"},function(o,a){function c(d){if(I.documentMode){var g=re.get(this,"handle"),E=u.event.fix(d);E.type=d.type==="focusin"?"focus":"blur",E.isSimulated=!0,g(d),E.target===E.currentTarget&&g(E)}else u.event.simulate(a,d.target,u.event.fix(d))}u.event.special[o]={setup:function(){var d;if(Ht(this,o,!0),I.documentMode)d=re.get(this,a),d||this.addEventListener(a,c),re.set(this,a,(d||0)+1);else return!1},trigger:function(){return Ht(this,o),!0},teardown:function(){var d;if(I.documentMode)d=re.get(this,a)-1,d?re.set(this,a,d):(this.removeEventListener(a,c),re.remove(this,a));else return!1},_default:function(d){return re.get(d.target,o)},delegateType:a},u.event.special[a]={setup:function(){var d=this.ownerDocument||this.document||this,g=I.documentMode?this:d,E=re.get(g,a);E||(I.documentMode?this.addEventListener(a,c):d.addEventListener(o,c,!0)),re.set(g,a,(E||0)+1)},teardown:function(){var d=this.ownerDocument||this.document||this,g=I.documentMode?this:d,E=re.get(g,a)-1;E?re.set(g,a,E):(I.documentMode?this.removeEventListener(a,c):d.removeEventListener(o,c,!0),re.remove(g,a))}}}),u.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(o,a){u.event.special[o]={delegateType:a,bindType:a,handle:function(c){var d,g=this,E=c.relatedTarget,_=c.handleObj;return(!E||E!==g&&!u.contains(g,E))&&(c.type=_.origType,d=_.handler.apply(this,arguments),c.type=a),d}}}),u.fn.extend({on:function(o,a,c,d){return Xt(this,o,a,c,d)},one:function(o,a,c,d){return Xt(this,o,a,c,d,1)},off:function(o,a,c){var d,g;if(o&&o.preventDefault&&o.handleObj)return d=o.handleObj,u(o.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if(typeof o=="object"){for(g in o)this.off(g,a,o[g]);return this}return(a===!1||typeof a=="function")&&(c=a,a=void 0),c===!1&&(c=bt),this.each(function(){u.event.remove(this,o,c,a)})}});var en=/<script|<style|<link/i,tn=/checked\s*(?:[^=]|=\s*.checked.)/i,rn=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function Sr(o,a){return U(o,"table")&&U(a.nodeType!==11?a:a.firstChild,"tr")&&u(o).children("tbody")[0]||o}function nn(o){return o.type=(o.getAttribute("type")!==null)+"/"+o.type,o}function on(o){return(o.type||"").slice(0,5)==="true/"?o.type=o.type.slice(5):o.removeAttribute("type"),o}function wr(o,a){var c,d,g,E,_,T,b;if(a.nodeType===1){if(re.hasData(o)&&(E=re.get(o),b=E.events,b)){re.remove(a,"handle events");for(g in b)for(c=0,d=b[g].length;c<d;c++)u.event.add(a,g,b[g][c])}De.hasData(o)&&(_=De.access(o),T=u.extend({},_),De.set(a,T))}}function sn(o,a){var c=a.nodeName.toLowerCase();c==="input"&&Ot.test(o.type)?a.checked=o.checked:(c==="input"||c==="textarea")&&(a.defaultValue=o.defaultValue)}function At(o,a,c,d){a=l(a);var g,E,_,T,b,O,L=0,k=o.length,R=k-1,W=a[0],ae=C(W);if(ae||k>1&&typeof W=="string"&&!S.checkClone&&tn.test(W))return o.each(function(_e){var pe=o.eq(_e);ae&&(a[0]=W.call(this,_e,pe.html())),At(pe,a,c,d)});if(k&&(g=Ar(a,o[0].ownerDocument,!1,o,d),E=g.firstChild,g.childNodes.length===1&&(g=E),E||d)){for(_=u.map(ke(g,"script"),nn),T=_.length;L<k;L++)b=g,L!==R&&(b=u.clone(b,!0,!0),T&&u.merge(_,ke(b,"script"))),c.call(o[L],b,L);if(T)for(O=_[_.length-1].ownerDocument,u.map(_,on),L=0;L<T;L++)b=_[L],br.test(b.type||"")&&!re.access(b,"globalEval")&&u.contains(O,b)&&(b.src&&(b.type||"").toLowerCase()!=="module"?u._evalUrl&&!b.noModule&&u._evalUrl(b.src,{nonce:b.nonce||b.getAttribute("nonce")},O):B(b.textContent.replace(rn,""),b,O))}return o}function $r(o,a,c){for(var d,g=a?u.filter(a,o):o,E=0;(d=g[E])!=null;E++)!c&&d.nodeType===1&&u.cleanData(ke(d)),d.parentNode&&(c&&_t(d)&&zt(ke(d,"script")),d.parentNode.removeChild(d));return o}u.extend({htmlPrefilter:function(o){return o},clone:function(o,a,c){var d,g,E,_,T=o.cloneNode(!0),b=_t(o);if(!S.noCloneChecked&&(o.nodeType===1||o.nodeType===11)&&!u.isXMLDoc(o))for(_=ke(T),E=ke(o),d=0,g=E.length;d<g;d++)sn(E[d],_[d]);if(a)if(c)for(E=E||ke(o),_=_||ke(T),d=0,g=E.length;d<g;d++)wr(E[d],_[d]);else wr(o,T);return _=ke(T,"script"),_.length>0&&zt(_,!b&&ke(o,"script")),T},cleanData:function(o){for(var a,c,d,g=u.event.special,E=0;(c=o[E])!==void 0;E++)if(ot(c)){if(a=c[re.expando]){if(a.events)for(d in a.events)g[d]?u.event.remove(c,d):u.removeEvent(c,d,a.handle);c[re.expando]=void 0}c[De.expando]&&(c[De.expando]=void 0)}}}),u.fn.extend({detach:function(o){return $r(this,o,!0)},remove:function(o){return $r(this,o)},text:function(o){return Ge(this,function(a){return a===void 0?u.text(this):this.empty().each(function(){(this.nodeType===1||this.nodeType===11||this.nodeType===9)&&(this.textContent=a)})},null,o,arguments.length)},append:function(){return At(this,arguments,function(o){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var a=Sr(this,o);a.appendChild(o)}})},prepend:function(){return At(this,arguments,function(o){if(this.nodeType===1||this.nodeType===11||this.nodeType===9){var a=Sr(this,o);a.insertBefore(o,a.firstChild)}})},before:function(){return At(this,arguments,function(o){this.parentNode&&this.parentNode.insertBefore(o,this)})},after:function(){return At(this,arguments,function(o){this.parentNode&&this.parentNode.insertBefore(o,this.nextSibling)})},empty:function(){for(var o,a=0;(o=this[a])!=null;a++)o.nodeType===1&&(u.cleanData(ke(o,!1)),o.textContent="");return this},clone:function(o,a){return o=o??!1,a=a??o,this.map(function(){return u.clone(this,o,a)})},html:function(o){return Ge(this,function(a){var c=this[0]||{},d=0,g=this.length;if(a===void 0&&c.nodeType===1)return c.innerHTML;if(typeof a=="string"&&!en.test(a)&&!Ve[(vr.exec(a)||["",""])[1].toLowerCase()]){a=u.htmlPrefilter(a);try{for(;d<g;d++)c=this[d]||{},c.nodeType===1&&(u.cleanData(ke(c,!1)),c.innerHTML=a);c=0}catch{}}c&&this.empty().append(a)},null,o,arguments.length)},replaceWith:function(){var o=[];return At(this,arguments,function(a){var c=this.parentNode;u.inArray(this,o)<0&&(u.cleanData(ke(this)),c&&c.replaceChild(a,this))},o)}}),u.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(o,a){u.fn[o]=function(c){for(var d,g=[],E=u(c),_=E.length-1,T=0;T<=_;T++)d=T===_?this:this.clone(!0),u(E[T])[a](d),f.apply(g,d.get());return this.pushStack(g)}});var Qt=new RegExp("^("+Er+")(?!px)[a-z%]+$","i"),Jt=/^--/,Bt=function(o){var a=o.ownerDocument.defaultView;return(!a||!a.opener)&&(a=e),a.getComputedStyle(o)},Or=function(o,a,c){var d,g,E={};for(g in a)E[g]=o.style[g],o.style[g]=a[g];d=c.call(o);for(g in a)o.style[g]=E[g];return d},an=new RegExp(rt.join("|"),"i");(function(){function o(){if(O){b.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",O.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",ft.appendChild(b).appendChild(O);var L=e.getComputedStyle(O);c=L.top!=="1%",T=a(L.marginLeft)===12,O.style.right="60%",E=a(L.right)===36,d=a(L.width)===36,O.style.position="absolute",g=a(O.offsetWidth/3)===12,ft.removeChild(b),O=null}}function a(L){return Math.round(parseFloat(L))}var c,d,g,E,_,T,b=I.createElement("div"),O=I.createElement("div");O.style&&(O.style.backgroundClip="content-box",O.cloneNode(!0).style.backgroundClip="",S.clearCloneStyle=O.style.backgroundClip==="content-box",u.extend(S,{boxSizingReliable:function(){return o(),d},pixelBoxStyles:function(){return o(),E},pixelPosition:function(){return o(),c},reliableMarginLeft:function(){return o(),T},scrollboxSize:function(){return o(),g},reliableTrDimensions:function(){var L,k,R,W;return _==null&&(L=I.createElement("table"),k=I.createElement("tr"),R=I.createElement("div"),L.style.cssText="position:absolute;left:-11111px;border-collapse:separate",k.style.cssText="box-sizing:content-box;border:1px solid",k.style.height="1px",R.style.height="9px",R.style.display="block",ft.appendChild(L).appendChild(k).appendChild(R),W=e.getComputedStyle(k),_=parseInt(W.height,10)+parseInt(W.borderTopWidth,10)+parseInt(W.borderBottomWidth,10)===k.offsetHeight,ft.removeChild(L)),_}}))})();function Ct(o,a,c){var d,g,E,_,T=Jt.test(a),b=o.style;return c=c||Bt(o),c&&(_=c.getPropertyValue(a)||c[a],T&&_&&(_=_.replace(ie,"$1")||void 0),_===""&&!_t(o)&&(_=u.style(o,a)),!S.pixelBoxStyles()&&Qt.test(_)&&an.test(a)&&(d=b.width,g=b.minWidth,E=b.maxWidth,b.minWidth=b.maxWidth=b.width=_,_=c.width,b.width=d,b.minWidth=g,b.maxWidth=E)),_!==void 0?_+"":_}function Cr(o,a){return{get:function(){if(o()){delete this.get;return}return(this.get=a).apply(this,arguments)}}}var xr=["Webkit","Moz","ms"],Nr=I.createElement("div").style,Rr={};function ln(o){for(var a=o[0].toUpperCase()+o.slice(1),c=xr.length;c--;)if(o=xr[c]+a,o in Nr)return o}function Zt(o){var a=u.cssProps[o]||Rr[o];return a||(o in Nr?o:Rr[o]=ln(o)||o)}var cn=/^(none|table(?!-c[ea]).+)/,un={position:"absolute",visibility:"hidden",display:"block"},Dr={letterSpacing:"0",fontWeight:"400"};function Pr(o,a,c){var d=$t.exec(a);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):a}function er(o,a,c,d,g,E){var _=a==="width"?1:0,T=0,b=0,O=0;if(c===(d?"border":"content"))return 0;for(;_<4;_+=2)c==="margin"&&(O+=u.css(o,c+rt[_],!0,g)),d?(c==="content"&&(b-=u.css(o,"padding"+rt[_],!0,g)),c!=="margin"&&(b-=u.css(o,"border"+rt[_]+"Width",!0,g))):(b+=u.css(o,"padding"+rt[_],!0,g),c!=="padding"?b+=u.css(o,"border"+rt[_]+"Width",!0,g):T+=u.css(o,"border"+rt[_]+"Width",!0,g));return!d&&E>=0&&(b+=Math.max(0,Math.ceil(o["offset"+a[0].toUpperCase()+a.slice(1)]-E-b-T-.5))||0),b+O}function Ir(o,a,c){var d=Bt(o),g=!S.boxSizingReliable()||c,E=g&&u.css(o,"boxSizing",!1,d)==="border-box",_=E,T=Ct(o,a,d),b="offset"+a[0].toUpperCase()+a.slice(1);if(Qt.test(T)){if(!c)return T;T="auto"}return(!S.boxSizingReliable()&&E||!S.reliableTrDimensions()&&U(o,"tr")||T==="auto"||!parseFloat(T)&&u.css(o,"display",!1,d)==="inline")&&o.getClientRects().length&&(E=u.css(o,"boxSizing",!1,d)==="border-box",_=b in o,_&&(T=o[b])),T=parseFloat(T)||0,T+er(o,a,c||(E?"border":"content"),_,d,T)+"px"}u.extend({cssHooks:{opacity:{get:function(o,a){if(a){var c=Ct(o,"opacity");return c===""?"1":c}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(o,a,c,d){if(!(!o||o.nodeType===3||o.nodeType===8||!o.style)){var g,E,_,T=Fe(a),b=Jt.test(a),O=o.style;if(b||(a=Zt(T)),_=u.cssHooks[a]||u.cssHooks[T],c!==void 0){if(E=typeof c,E==="string"&&(g=$t.exec(c))&&g[1]&&(c=_r(o,a,g),E="number"),c==null||c!==c)return;E==="number"&&!b&&(c+=g&&g[3]||(u.cssNumber[T]?"":"px")),!S.clearCloneStyle&&c===""&&a.indexOf("background")===0&&(O[a]="inherit"),(!_||!("set"in _)||(c=_.set(o,c,d))!==void 0)&&(b?O.setProperty(a,c):O[a]=c)}else return _&&"get"in _&&(g=_.get(o,!1,d))!==void 0?g:O[a]}},css:function(o,a,c,d){var g,E,_,T=Fe(a),b=Jt.test(a);return b||(a=Zt(T)),_=u.cssHooks[a]||u.cssHooks[T],_&&"get"in _&&(g=_.get(o,!0,c)),g===void 0&&(g=Ct(o,a,d)),g==="normal"&&a in Dr&&(g=Dr[a]),c===""||c?(E=parseFloat(g),c===!0||isFinite(E)?E||0:g):g}}),u.each(["height","width"],function(o,a){u.cssHooks[a]={get:function(c,d,g){if(d)return cn.test(u.css(c,"display"))&&(!c.getClientRects().length||!c.getBoundingClientRect().width)?Or(c,un,function(){return Ir(c,a,g)}):Ir(c,a,g)},set:function(c,d,g){var E,_=Bt(c),T=!S.scrollboxSize()&&_.position==="absolute",b=T||g,O=b&&u.css(c,"boxSizing",!1,_)==="border-box",L=g?er(c,a,g,O,_):0;return O&&T&&(L-=Math.ceil(c["offset"+a[0].toUpperCase()+a.slice(1)]-parseFloat(_[a])-er(c,a,"border",!1,_)-.5)),L&&(E=$t.exec(d))&&(E[3]||"px")!=="px"&&(c.style[a]=d,d=u.css(c,a)),Pr(c,d,L)}}}),u.cssHooks.marginLeft=Cr(S.reliableMarginLeft,function(o,a){if(a)return(parseFloat(Ct(o,"marginLeft"))||o.getBoundingClientRect().left-Or(o,{marginLeft:0},function(){return o.getBoundingClientRect().left}))+"px"}),u.each({margin:"",padding:"",border:"Width"},function(o,a){u.cssHooks[o+a]={expand:function(c){for(var d=0,g={},E=typeof c=="string"?c.split(" "):[c];d<4;d++)g[o+rt[d]+a]=E[d]||E[d-2]||E[0];return g}},o!=="margin"&&(u.cssHooks[o+a].set=Pr)}),u.fn.extend({css:function(o,a){return Ge(this,function(c,d,g){var E,_,T={},b=0;if(Array.isArray(d)){for(E=Bt(c),_=d.length;b<_;b++)T[d[b]]=u.css(c,d[b],!1,E);return T}return g!==void 0?u.style(c,d,g):u.css(c,d)},o,a,arguments.length>1)}});function je(o,a,c,d,g){return new je.prototype.init(o,a,c,d,g)}u.Tween=je,je.prototype={constructor:je,init:function(o,a,c,d,g,E){this.elem=o,this.prop=c,this.easing=g||u.easing._default,this.options=a,this.start=this.now=this.cur(),this.end=d,this.unit=E||(u.cssNumber[c]?"":"px")},cur:function(){var o=je.propHooks[this.prop];return o&&o.get?o.get(this):je.propHooks._default.get(this)},run:function(o){var a,c=je.propHooks[this.prop];return this.options.duration?this.pos=a=u.easing[this.easing](o,this.options.duration*o,0,1,this.options.duration):this.pos=a=o,this.now=(this.end-this.start)*a+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):je.propHooks._default.set(this),this}},je.prototype.init.prototype=je.prototype,je.propHooks={_default:{get:function(o){var a;return o.elem.nodeType!==1||o.elem[o.prop]!=null&&o.elem.style[o.prop]==null?o.elem[o.prop]:(a=u.css(o.elem,o.prop,""),!a||a==="auto"?0:a)},set:function(o){u.fx.step[o.prop]?u.fx.step[o.prop](o):o.elem.nodeType===1&&(u.cssHooks[o.prop]||o.elem.style[Zt(o.prop)]!=null)?u.style(o.elem,o.prop,o.now+o.unit):o.elem[o.prop]=o.now}}},je.propHooks.scrollTop=je.propHooks.scrollLeft={set:function(o){o.elem.nodeType&&o.elem.parentNode&&(o.elem[o.prop]=o.now)}},u.easing={linear:function(o){return o},swing:function(o){return .5-Math.cos(o*Math.PI)/2},_default:"swing"},u.fx=je.prototype.init,u.fx.step={};var Tt,Ft,fn=/^(?:toggle|show|hide)$/,dn=/queueHooks$/;function tr(){Ft&&(I.hidden===!1&&e.requestAnimationFrame?e.requestAnimationFrame(tr):e.setTimeout(tr,u.fx.interval),u.fx.tick())}function Lr(){return e.setTimeout(function(){Tt=void 0}),Tt=Date.now()}function Vt(o,a){var c,d=0,g={height:o};for(a=a?1:0;d<4;d+=2-a)c=rt[d],g["margin"+c]=g["padding"+c]=o;return a&&(g.opacity=g.width=o),g}function Mr(o,a,c){for(var d,g=(qe.tweeners[a]||[]).concat(qe.tweeners["*"]),E=0,_=g.length;E<_;E++)if(d=g[E].call(c,a,o))return d}function pn(o,a,c){var d,g,E,_,T,b,O,L,k="width"in a||"height"in a,R=this,W={},ae=o.style,_e=o.nodeType&&jt(o),pe=re.get(o,"fxshow");c.queue||(_=u._queueHooks(o,"fx"),_.unqueued==null&&(_.unqueued=0,T=_.empty.fire,_.empty.fire=function(){_.unqueued||T()}),_.unqueued++,R.always(function(){R.always(function(){_.unqueued--,u.queue(o,"fx").length||_.empty.fire()})}));for(d in a)if(g=a[d],fn.test(g)){if(delete a[d],E=E||g==="toggle",g===(_e?"hide":"show"))if(g==="show"&&pe&&pe[d]!==void 0)_e=!0;else continue;W[d]=pe&&pe[d]||u.style(o,d)}if(b=!u.isEmptyObject(a),!(!b&&u.isEmptyObject(W))){k&&o.nodeType===1&&(c.overflow=[ae.overflow,ae.overflowX,ae.overflowY],O=pe&&pe.display,O==null&&(O=re.get(o,"display")),L=u.css(o,"display"),L==="none"&&(O?L=O:(yt([o],!0),O=o.style.display||O,L=u.css(o,"display"),yt([o]))),(L==="inline"||L==="inline-block"&&O!=null)&&u.css(o,"float")==="none"&&(b||(R.done(function(){ae.display=O}),O==null&&(L=ae.display,O=L==="none"?"":L)),ae.display="inline-block")),c.overflow&&(ae.overflow="hidden",R.always(function(){ae.overflow=c.overflow[0],ae.overflowX=c.overflow[1],ae.overflowY=c.overflow[2]})),b=!1;for(d in W)b||(pe?"hidden"in pe&&(_e=pe.hidden):pe=re.access(o,"fxshow",{display:O}),E&&(pe.hidden=!_e),_e&&yt([o],!0),R.done(function(){_e||yt([o]),re.remove(o,"fxshow");for(d in W)u.style(o,d,W[d])})),b=Mr(_e?pe[d]:0,d,R),d in pe||(pe[d]=b.start,_e&&(b.end=b.start,b.start=0))}}function hn(o,a){var c,d,g,E,_;for(c in o)if(d=Fe(c),g=a[d],E=o[c],Array.isArray(E)&&(g=E[1],E=o[c]=E[0]),c!==d&&(o[d]=E,delete o[c]),_=u.cssHooks[d],_&&"expand"in _){E=_.expand(E),delete o[d];for(c in E)c in o||(o[c]=E[c],a[c]=g)}else a[d]=g}function qe(o,a,c){var d,g,E=0,_=qe.prefilters.length,T=u.Deferred().always(function(){delete b.elem}),b=function(){if(g)return!1;for(var k=Tt||Lr(),R=Math.max(0,O.startTime+O.duration-k),W=R/O.duration||0,ae=1-W,_e=0,pe=O.tweens.length;_e<pe;_e++)O.tweens[_e].run(ae);return T.notifyWith(o,[O,ae,R]),ae<1&&pe?R:(pe||T.notifyWith(o,[O,1,0]),T.resolveWith(o,[O]),!1)},O=T.promise({elem:o,props:u.extend({},a),opts:u.extend(!0,{specialEasing:{},easing:u.easing._default},c),originalProperties:a,originalOptions:c,startTime:Tt||Lr(),duration:c.duration,tweens:[],createTween:function(k,R){var W=u.Tween(o,O.opts,k,R,O.opts.specialEasing[k]||O.opts.easing);return O.tweens.push(W),W},stop:function(k){var R=0,W=k?O.tweens.length:0;if(g)return this;for(g=!0;R<W;R++)O.tweens[R].run(1);return k?(T.notifyWith(o,[O,1,0]),T.resolveWith(o,[O,k])):T.rejectWith(o,[O,k]),this}}),L=O.props;for(hn(L,O.opts.specialEasing);E<_;E++)if(d=qe.prefilters[E].call(O,o,L,O.opts),d)return C(d.stop)&&(u._queueHooks(O.elem,O.opts.queue).stop=d.stop.bind(d)),d;return u.map(L,Mr,O),C(O.opts.start)&&O.opts.start.call(o,O),O.progress(O.opts.progress).done(O.opts.done,O.opts.complete).fail(O.opts.fail).always(O.opts.always),u.fx.timer(u.extend(b,{elem:o,anim:O,queue:O.opts.queue})),O}u.Animation=u.extend(qe,{tweeners:{"*":[function(o,a){var c=this.createTween(o,a);return _r(c.elem,o,$t.exec(a),c),c}]},tweener:function(o,a){C(o)?(a=o,o=["*"]):o=o.match(Oe);for(var c,d=0,g=o.length;d<g;d++)c=o[d],qe.tweeners[c]=qe.tweeners[c]||[],qe.tweeners[c].unshift(a)},prefilters:[pn],prefilter:function(o,a){a?qe.prefilters.unshift(o):qe.prefilters.push(o)}}),u.speed=function(o,a,c){var d=o&&typeof o=="object"?u.extend({},o):{complete:c||!c&&a||C(o)&&o,duration:o,easing:c&&a||a&&!C(a)&&a};return u.fx.off?d.duration=0:typeof d.duration!="number"&&(d.duration in u.fx.speeds?d.duration=u.fx.speeds[d.duration]:d.duration=u.fx.speeds._default),(d.queue==null||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){C(d.old)&&d.old.call(this),d.queue&&u.dequeue(this,d.queue)},d},u.fn.extend({fadeTo:function(o,a,c,d){return this.filter(jt).css("opacity",0).show().end().animate({opacity:a},o,c,d)},animate:function(o,a,c,d){var g=u.isEmptyObject(o),E=u.speed(a,c,d),_=function(){var T=qe(this,u.extend({},o),E);(g||re.get(this,"finish"))&&T.stop(!0)};return _.finish=_,g||E.queue===!1?this.each(_):this.queue(E.queue,_)},stop:function(o,a,c){var d=function(g){var E=g.stop;delete g.stop,E(c)};return typeof o!="string"&&(c=a,a=o,o=void 0),a&&this.queue(o||"fx",[]),this.each(function(){var g=!0,E=o!=null&&o+"queueHooks",_=u.timers,T=re.get(this);if(E)T[E]&&T[E].stop&&d(T[E]);else for(E in T)T[E]&&T[E].stop&&dn.test(E)&&d(T[E]);for(E=_.length;E--;)_[E].elem===this&&(o==null||_[E].queue===o)&&(_[E].anim.stop(c),g=!1,_.splice(E,1));(g||!c)&&u.dequeue(this,o)})},finish:function(o){return o!==!1&&(o=o||"fx"),this.each(function(){var a,c=re.get(this),d=c[o+"queue"],g=c[o+"queueHooks"],E=u.timers,_=d?d.length:0;for(c.finish=!0,u.queue(this,o,[]),g&&g.stop&&g.stop.call(this,!0),a=E.length;a--;)E[a].elem===this&&E[a].queue===o&&(E[a].anim.stop(!0),E.splice(a,1));for(a=0;a<_;a++)d[a]&&d[a].finish&&d[a].finish.call(this);delete c.finish})}}),u.each(["toggle","show","hide"],function(o,a){var c=u.fn[a];u.fn[a]=function(d,g,E){return d==null||typeof d=="boolean"?c.apply(this,arguments):this.animate(Vt(a,!0),d,g,E)}}),u.each({slideDown:Vt("show"),slideUp:Vt("hide"),slideToggle:Vt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(o,a){u.fn[o]=function(c,d,g){return this.animate(a,c,d,g)}}),u.timers=[],u.fx.tick=function(){var o,a=0,c=u.timers;for(Tt=Date.now();a<c.length;a++)o=c[a],!o()&&c[a]===o&&c.splice(a--,1);c.length||u.fx.stop(),Tt=void 0},u.fx.timer=function(o){u.timers.push(o),u.fx.start()},u.fx.interval=13,u.fx.start=function(){Ft||(Ft=!0,tr())},u.fx.stop=function(){Ft=null},u.fx.speeds={slow:600,fast:200,_default:400},u.fn.delay=function(o,a){return o=u.fx&&u.fx.speeds[o]||o,a=a||"fx",this.queue(a,function(c,d){var g=e.setTimeout(c,o);d.stop=function(){e.clearTimeout(g)}})},function(){var o=I.createElement("input"),a=I.createElement("select"),c=a.appendChild(I.createElement("option"));o.type="checkbox",S.checkOn=o.value!=="",S.optSelected=c.selected,o=I.createElement("input"),o.value="t",o.type="radio",S.radioValue=o.value==="t"}();var kr,xt=u.expr.attrHandle;u.fn.extend({attr:function(o,a){return Ge(this,u.attr,o,a,arguments.length>1)},removeAttr:function(o){return this.each(function(){u.removeAttr(this,o)})}}),u.extend({attr:function(o,a,c){var d,g,E=o.nodeType;if(!(E===3||E===8||E===2)){if(typeof o.getAttribute>"u")return u.prop(o,a,c);if((E!==1||!u.isXMLDoc(o))&&(g=u.attrHooks[a.toLowerCase()]||(u.expr.match.bool.test(a)?kr:void 0)),c!==void 0){if(c===null){u.removeAttr(o,a);return}return g&&"set"in g&&(d=g.set(o,c,a))!==void 0?d:(o.setAttribute(a,c+""),c)}return g&&"get"in g&&(d=g.get(o,a))!==null?d:(d=u.find.attr(o,a),d??void 0)}},attrHooks:{type:{set:function(o,a){if(!S.radioValue&&a==="radio"&&U(o,"input")){var c=o.value;return o.setAttribute("type",a),c&&(o.value=c),a}}}},removeAttr:function(o,a){var c,d=0,g=a&&a.match(Oe);if(g&&o.nodeType===1)for(;c=g[d++];)o.removeAttribute(c)}}),kr={set:function(o,a,c){return a===!1?u.removeAttr(o,c):o.setAttribute(c,c),c}},u.each(u.expr.match.bool.source.match(/\w+/g),function(o,a){var c=xt[a]||u.find.attr;xt[a]=function(d,g,E){var _,T,b=g.toLowerCase();return E||(T=xt[b],xt[b]=_,_=c(d,g,E)!=null?b:null,xt[b]=T),_}});var mn=/^(?:input|select|textarea|button)$/i,gn=/^(?:a|area)$/i;u.fn.extend({prop:function(o,a){return Ge(this,u.prop,o,a,arguments.length>1)},removeProp:function(o){return this.each(function(){delete this[u.propFix[o]||o]})}}),u.extend({prop:function(o,a,c){var d,g,E=o.nodeType;if(!(E===3||E===8||E===2))return(E!==1||!u.isXMLDoc(o))&&(a=u.propFix[a]||a,g=u.propHooks[a]),c!==void 0?g&&"set"in g&&(d=g.set(o,c,a))!==void 0?d:o[a]=c:g&&"get"in g&&(d=g.get(o,a))!==null?d:o[a]},propHooks:{tabIndex:{get:function(o){var a=u.find.attr(o,"tabindex");return a?parseInt(a,10):mn.test(o.nodeName)||gn.test(o.nodeName)&&o.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),S.optSelected||(u.propHooks.selected={get:function(o){var a=o.parentNode;return a&&a.parentNode&&a.parentNode.selectedIndex,null},set:function(o){var a=o.parentNode;a&&(a.selectedIndex,a.parentNode&&a.parentNode.selectedIndex)}}),u.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){u.propFix[this.toLowerCase()]=this});function dt(o){var a=o.match(Oe)||[];return a.join(" ")}function pt(o){return o.getAttribute&&o.getAttribute("class")||""}function rr(o){return Array.isArray(o)?o:typeof o=="string"?o.match(Oe)||[]:[]}u.fn.extend({addClass:function(o){var a,c,d,g,E,_;return C(o)?this.each(function(T){u(this).addClass(o.call(this,T,pt(this)))}):(a=rr(o),a.length?this.each(function(){if(d=pt(this),c=this.nodeType===1&&" "+dt(d)+" ",c){for(E=0;E<a.length;E++)g=a[E],c.indexOf(" "+g+" ")<0&&(c+=g+" ");_=dt(c),d!==_&&this.setAttribute("class",_)}}):this)},removeClass:function(o){var a,c,d,g,E,_;return C(o)?this.each(function(T){u(this).removeClass(o.call(this,T,pt(this)))}):arguments.length?(a=rr(o),a.length?this.each(function(){if(d=pt(this),c=this.nodeType===1&&" "+dt(d)+" ",c){for(E=0;E<a.length;E++)for(g=a[E];c.indexOf(" "+g+" ")>-1;)c=c.replace(" "+g+" "," ");_=dt(c),d!==_&&this.setAttribute("class",_)}}):this):this.attr("class","")},toggleClass:function(o,a){var c,d,g,E,_=typeof o,T=_==="string"||Array.isArray(o);return C(o)?this.each(function(b){u(this).toggleClass(o.call(this,b,pt(this),a),a)}):typeof a=="boolean"&&T?a?this.addClass(o):this.removeClass(o):(c=rr(o),this.each(function(){if(T)for(E=u(this),g=0;g<c.length;g++)d=c[g],E.hasClass(d)?E.removeClass(d):E.addClass(d);else(o===void 0||_==="boolean")&&(d=pt(this),d&&re.set(this,"__className__",d),this.setAttribute&&this.setAttribute("class",d||o===!1?"":re.get(this,"__className__")||""))}))},hasClass:function(o){var a,c,d=0;for(a=" "+o+" ";c=this[d++];)if(c.nodeType===1&&(" "+dt(pt(c))+" ").indexOf(a)>-1)return!0;return!1}});var En=/\r/g;u.fn.extend({val:function(o){var a,c,d,g=this[0];return arguments.length?(d=C(o),this.each(function(E){var _;this.nodeType===1&&(d?_=o.call(this,E,u(this).val()):_=o,_==null?_="":typeof _=="number"?_+="":Array.isArray(_)&&(_=u.map(_,function(T){return T==null?"":T+""})),a=u.valHooks[this.type]||u.valHooks[this.nodeName.toLowerCase()],(!a||!("set"in a)||a.set(this,_,"value")===void 0)&&(this.value=_))})):g?(a=u.valHooks[g.type]||u.valHooks[g.nodeName.toLowerCase()],a&&"get"in a&&(c=a.get(g,"value"))!==void 0?c:(c=g.value,typeof c=="string"?c.replace(En,""):c??"")):void 0}}),u.extend({valHooks:{option:{get:function(o){var a=u.find.attr(o,"value");return a??dt(u.text(o))}},select:{get:function(o){var a,c,d,g=o.options,E=o.selectedIndex,_=o.type==="select-one",T=_?null:[],b=_?E+1:g.length;for(E<0?d=b:d=_?E:0;d<b;d++)if(c=g[d],(c.selected||d===E)&&!c.disabled&&(!c.parentNode.disabled||!U(c.parentNode,"optgroup"))){if(a=u(c).val(),_)return a;T.push(a)}return T},set:function(o,a){for(var c,d,g=o.options,E=u.makeArray(a),_=g.length;_--;)d=g[_],(d.selected=u.inArray(u.valHooks.option.get(d),E)>-1)&&(c=!0);return c||(o.selectedIndex=-1),E}}}}),u.each(["radio","checkbox"],function(){u.valHooks[this]={set:function(o,a){if(Array.isArray(a))return o.checked=u.inArray(u(o).val(),a)>-1}},S.checkOn||(u.valHooks[this].get=function(o){return o.getAttribute("value")===null?"on":o.value})});var Nt=e.location,jr={guid:Date.now()},nr=/\?/;u.parseXML=function(o){var a,c;if(!o||typeof o!="string")return null;try{a=new e.DOMParser().parseFromString(o,"text/xml")}catch{}return c=a&&a.getElementsByTagName("parsererror")[0],(!a||c)&&u.error("Invalid XML: "+(c?u.map(c.childNodes,function(d){return d.textContent}).join(`
`):o)),a};var Hr=/^(?:focusinfocus|focusoutblur)$/,Br=function(o){o.stopPropagation()};u.extend(u.event,{trigger:function(o,a,c,d){var g,E,_,T,b,O,L,k,R=[c||I],W=y.call(o,"type")?o.type:o,ae=y.call(o,"namespace")?o.namespace.split("."):[];if(E=k=_=c=c||I,!(c.nodeType===3||c.nodeType===8)&&!Hr.test(W+u.event.triggered)&&(W.indexOf(".")>-1&&(ae=W.split("."),W=ae.shift(),ae.sort()),b=W.indexOf(":")<0&&"on"+W,o=o[u.expando]?o:new u.Event(W,typeof o=="object"&&o),o.isTrigger=d?2:3,o.namespace=ae.join("."),o.rnamespace=o.namespace?new RegExp("(^|\\.)"+ae.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,o.result=void 0,o.target||(o.target=c),a=a==null?[o]:u.makeArray(a,[o]),L=u.event.special[W]||{},!(!d&&L.trigger&&L.trigger.apply(c,a)===!1))){if(!d&&!L.noBubble&&!H(c)){for(T=L.delegateType||W,Hr.test(T+W)||(E=E.parentNode);E;E=E.parentNode)R.push(E),_=E;_===(c.ownerDocument||I)&&R.push(_.defaultView||_.parentWindow||e)}for(g=0;(E=R[g++])&&!o.isPropagationStopped();)k=E,o.type=g>1?T:L.bindType||W,O=(re.get(E,"events")||Object.create(null))[o.type]&&re.get(E,"handle"),O&&O.apply(E,a),O=b&&E[b],O&&O.apply&&ot(E)&&(o.result=O.apply(E,a),o.result===!1&&o.preventDefault());return o.type=W,!d&&!o.isDefaultPrevented()&&(!L._default||L._default.apply(R.pop(),a)===!1)&&ot(c)&&b&&C(c[W])&&!H(c)&&(_=c[b],_&&(c[b]=null),u.event.triggered=W,o.isPropagationStopped()&&k.addEventListener(W,Br),c[W](),o.isPropagationStopped()&&k.removeEventListener(W,Br),u.event.triggered=void 0,_&&(c[b]=_)),o.result}},simulate:function(o,a,c){var d=u.extend(new u.Event,c,{type:o,isSimulated:!0});u.event.trigger(d,null,a)}}),u.fn.extend({trigger:function(o,a){return this.each(function(){u.event.trigger(o,a,this)})},triggerHandler:function(o,a){var c=this[0];if(c)return u.event.trigger(o,a,c,!0)}});var _n=/\[\]$/,Fr=/\r?\n/g,yn=/^(?:submit|button|image|reset|file)$/i,vn=/^(?:input|select|textarea|keygen)/i;function ir(o,a,c,d){var g;if(Array.isArray(a))u.each(a,function(E,_){c||_n.test(o)?d(o,_):ir(o+"["+(typeof _=="object"&&_!=null?E:"")+"]",_,c,d)});else if(!c&&Q(a)==="object")for(g in a)ir(o+"["+g+"]",a[g],c,d);else d(o,a)}u.param=function(o,a){var c,d=[],g=function(E,_){var T=C(_)?_():_;d[d.length]=encodeURIComponent(E)+"="+encodeURIComponent(T??"")};if(o==null)return"";if(Array.isArray(o)||o.jquery&&!u.isPlainObject(o))u.each(o,function(){g(this.name,this.value)});else for(c in o)ir(c,o[c],a,g);return d.join("&")},u.fn.extend({serialize:function(){return u.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var o=u.prop(this,"elements");return o?u.makeArray(o):this}).filter(function(){var o=this.type;return this.name&&!u(this).is(":disabled")&&vn.test(this.nodeName)&&!yn.test(o)&&(this.checked||!Ot.test(o))}).map(function(o,a){var c=u(this).val();return c==null?null:Array.isArray(c)?u.map(c,function(d){return{name:a.name,value:d.replace(Fr,`\r
`)}}):{name:a.name,value:c.replace(Fr,`\r
`)}}).get()}});var bn=/%20/g,An=/#.*$/,Tn=/([?&])_=[^&]*/,Sn=/^(.*?):[ \t]*([^\r\n]*)$/mg,wn=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,$n=/^(?:GET|HEAD)$/,On=/^\/\//,Vr={},or={},Ur="*/".concat("*"),sr=I.createElement("a");sr.href=Nt.href;function Wr(o){return function(a,c){typeof a!="string"&&(c=a,a="*");var d,g=0,E=a.toLowerCase().match(Oe)||[];if(C(c))for(;d=E[g++];)d[0]==="+"?(d=d.slice(1)||"*",(o[d]=o[d]||[]).unshift(c)):(o[d]=o[d]||[]).push(c)}}function Gr(o,a,c,d){var g={},E=o===or;function _(T){var b;return g[T]=!0,u.each(o[T]||[],function(O,L){var k=L(a,c,d);if(typeof k=="string"&&!E&&!g[k])return a.dataTypes.unshift(k),_(k),!1;if(E)return!(b=k)}),b}return _(a.dataTypes[0])||!g["*"]&&_("*")}function ar(o,a){var c,d,g=u.ajaxSettings.flatOptions||{};for(c in a)a[c]!==void 0&&((g[c]?o:d||(d={}))[c]=a[c]);return d&&u.extend(!0,o,d),o}function Cn(o,a,c){for(var d,g,E,_,T=o.contents,b=o.dataTypes;b[0]==="*";)b.shift(),d===void 0&&(d=o.mimeType||a.getResponseHeader("Content-Type"));if(d){for(g in T)if(T[g]&&T[g].test(d)){b.unshift(g);break}}if(b[0]in c)E=b[0];else{for(g in c){if(!b[0]||o.converters[g+" "+b[0]]){E=g;break}_||(_=g)}E=E||_}if(E)return E!==b[0]&&b.unshift(E),c[E]}function xn(o,a,c,d){var g,E,_,T,b,O={},L=o.dataTypes.slice();if(L[1])for(_ in o.converters)O[_.toLowerCase()]=o.converters[_];for(E=L.shift();E;)if(o.responseFields[E]&&(c[o.responseFields[E]]=a),!b&&d&&o.dataFilter&&(a=o.dataFilter(a,o.dataType)),b=E,E=L.shift(),E){if(E==="*")E=b;else if(b!=="*"&&b!==E){if(_=O[b+" "+E]||O["* "+E],!_){for(g in O)if(T=g.split(" "),T[1]===E&&(_=O[b+" "+T[0]]||O["* "+T[0]],_)){_===!0?_=O[g]:O[g]!==!0&&(E=T[0],L.unshift(T[1]));break}}if(_!==!0)if(_&&o.throws)a=_(a);else try{a=_(a)}catch(k){return{state:"parsererror",error:_?k:"No conversion from "+b+" to "+E}}}}return{state:"success",data:a}}u.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Nt.href,type:"GET",isLocal:wn.test(Nt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Ur,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":u.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(o,a){return a?ar(ar(o,u.ajaxSettings),a):ar(u.ajaxSettings,o)},ajaxPrefilter:Wr(Vr),ajaxTransport:Wr(or),ajax:function(o,a){typeof o=="object"&&(a=o,o=void 0),a=a||{};var c,d,g,E,_,T,b,O,L,k,R=u.ajaxSetup({},a),W=R.context||R,ae=R.context&&(W.nodeType||W.jquery)?u(W):u.event,_e=u.Deferred(),pe=u.Callbacks("once memory"),Pe=R.statusCode||{},Ne={},Ye={},ze="canceled",Ee={readyState:0,getResponseHeader:function(ye){var Ce;if(b){if(!E)for(E={};Ce=Sn.exec(g);)E[Ce[1].toLowerCase()+" "]=(E[Ce[1].toLowerCase()+" "]||[]).concat(Ce[2]);Ce=E[ye.toLowerCase()+" "]}return Ce==null?null:Ce.join(", ")},getAllResponseHeaders:function(){return b?g:null},setRequestHeader:function(ye,Ce){return b==null&&(ye=Ye[ye.toLowerCase()]=Ye[ye.toLowerCase()]||ye,Ne[ye]=Ce),this},overrideMimeType:function(ye){return b==null&&(R.mimeType=ye),this},statusCode:function(ye){var Ce;if(ye)if(b)Ee.always(ye[Ee.status]);else for(Ce in ye)Pe[Ce]=[Pe[Ce],ye[Ce]];return this},abort:function(ye){var Ce=ye||ze;return c&&c.abort(Ce),ht(0,Ce),this}};if(_e.promise(Ee),R.url=((o||R.url||Nt.href)+"").replace(On,Nt.protocol+"//"),R.type=a.method||a.type||R.method||R.type,R.dataTypes=(R.dataType||"*").toLowerCase().match(Oe)||[""],R.crossDomain==null){T=I.createElement("a");try{T.href=R.url,T.href=T.href,R.crossDomain=sr.protocol+"//"+sr.host!=T.protocol+"//"+T.host}catch{R.crossDomain=!0}}if(R.data&&R.processData&&typeof R.data!="string"&&(R.data=u.param(R.data,R.traditional)),Gr(Vr,R,a,Ee),b)return Ee;O=u.event&&R.global,O&&u.active++===0&&u.event.trigger("ajaxStart"),R.type=R.type.toUpperCase(),R.hasContent=!$n.test(R.type),d=R.url.replace(An,""),R.hasContent?R.data&&R.processData&&(R.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&(R.data=R.data.replace(bn,"+")):(k=R.url.slice(d.length),R.data&&(R.processData||typeof R.data=="string")&&(d+=(nr.test(d)?"&":"?")+R.data,delete R.data),R.cache===!1&&(d=d.replace(Tn,"$1"),k=(nr.test(d)?"&":"?")+"_="+jr.guid+++k),R.url=d+k),R.ifModified&&(u.lastModified[d]&&Ee.setRequestHeader("If-Modified-Since",u.lastModified[d]),u.etag[d]&&Ee.setRequestHeader("If-None-Match",u.etag[d])),(R.data&&R.hasContent&&R.contentType!==!1||a.contentType)&&Ee.setRequestHeader("Content-Type",R.contentType),Ee.setRequestHeader("Accept",R.dataTypes[0]&&R.accepts[R.dataTypes[0]]?R.accepts[R.dataTypes[0]]+(R.dataTypes[0]!=="*"?", "+Ur+"; q=0.01":""):R.accepts["*"]);for(L in R.headers)Ee.setRequestHeader(L,R.headers[L]);if(R.beforeSend&&(R.beforeSend.call(W,Ee,R)===!1||b))return Ee.abort();if(ze="abort",pe.add(R.complete),Ee.done(R.success),Ee.fail(R.error),c=Gr(or,R,a,Ee),!c)ht(-1,"No Transport");else{if(Ee.readyState=1,O&&ae.trigger("ajaxSend",[Ee,R]),b)return Ee;R.async&&R.timeout>0&&(_=e.setTimeout(function(){Ee.abort("timeout")},R.timeout));try{b=!1,c.send(Ne,ht)}catch(ye){if(b)throw ye;ht(-1,ye)}}function ht(ye,Ce,Dt,cr){var Xe,Pt,Qe,st,at,Ue=Ce;b||(b=!0,_&&e.clearTimeout(_),c=void 0,g=cr||"",Ee.readyState=ye>0?4:0,Xe=ye>=200&&ye<300||ye===304,Dt&&(st=Cn(R,Ee,Dt)),!Xe&&u.inArray("script",R.dataTypes)>-1&&u.inArray("json",R.dataTypes)<0&&(R.converters["text script"]=function(){}),st=xn(R,st,Ee,Xe),Xe?(R.ifModified&&(at=Ee.getResponseHeader("Last-Modified"),at&&(u.lastModified[d]=at),at=Ee.getResponseHeader("etag"),at&&(u.etag[d]=at)),ye===204||R.type==="HEAD"?Ue="nocontent":ye===304?Ue="notmodified":(Ue=st.state,Pt=st.data,Qe=st.error,Xe=!Qe)):(Qe=Ue,(ye||!Ue)&&(Ue="error",ye<0&&(ye=0))),Ee.status=ye,Ee.statusText=(Ce||Ue)+"",Xe?_e.resolveWith(W,[Pt,Ue,Ee]):_e.rejectWith(W,[Ee,Ue,Qe]),Ee.statusCode(Pe),Pe=void 0,O&&ae.trigger(Xe?"ajaxSuccess":"ajaxError",[Ee,R,Xe?Pt:Qe]),pe.fireWith(W,[Ee,Ue]),O&&(ae.trigger("ajaxComplete",[Ee,R]),--u.active||u.event.trigger("ajaxStop")))}return Ee},getJSON:function(o,a,c){return u.get(o,a,c,"json")},getScript:function(o,a){return u.get(o,void 0,a,"script")}}),u.each(["get","post"],function(o,a){u[a]=function(c,d,g,E){return C(d)&&(E=E||g,g=d,d=void 0),u.ajax(u.extend({url:c,type:a,dataType:E,data:d,success:g},u.isPlainObject(c)&&c))}}),u.ajaxPrefilter(function(o){var a;for(a in o.headers)a.toLowerCase()==="content-type"&&(o.contentType=o.headers[a]||"")}),u._evalUrl=function(o,a,c){return u.ajax({url:o,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(d){u.globalEval(d,a,c)}})},u.fn.extend({wrapAll:function(o){var a;return this[0]&&(C(o)&&(o=o.call(this[0])),a=u(o,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&a.insertBefore(this[0]),a.map(function(){for(var c=this;c.firstElementChild;)c=c.firstElementChild;return c}).append(this)),this},wrapInner:function(o){return C(o)?this.each(function(a){u(this).wrapInner(o.call(this,a))}):this.each(function(){var a=u(this),c=a.contents();c.length?c.wrapAll(o):a.append(o)})},wrap:function(o){var a=C(o);return this.each(function(c){u(this).wrapAll(a?o.call(this,c):o)})},unwrap:function(o){return this.parent(o).not("body").each(function(){u(this).replaceWith(this.childNodes)}),this}}),u.expr.pseudos.hidden=function(o){return!u.expr.pseudos.visible(o)},u.expr.pseudos.visible=function(o){return!!(o.offsetWidth||o.offsetHeight||o.getClientRects().length)},u.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch{}};var Nn={0:200,1223:204},Rt=u.ajaxSettings.xhr();S.cors=!!Rt&&"withCredentials"in Rt,S.ajax=Rt=!!Rt,u.ajaxTransport(function(o){var a,c;if(S.cors||Rt&&!o.crossDomain)return{send:function(d,g){var E,_=o.xhr();if(_.open(o.type,o.url,o.async,o.username,o.password),o.xhrFields)for(E in o.xhrFields)_[E]=o.xhrFields[E];o.mimeType&&_.overrideMimeType&&_.overrideMimeType(o.mimeType),!o.crossDomain&&!d["X-Requested-With"]&&(d["X-Requested-With"]="XMLHttpRequest");for(E in d)_.setRequestHeader(E,d[E]);a=function(T){return function(){a&&(a=c=_.onload=_.onerror=_.onabort=_.ontimeout=_.onreadystatechange=null,T==="abort"?_.abort():T==="error"?typeof _.status!="number"?g(0,"error"):g(_.status,_.statusText):g(Nn[_.status]||_.status,_.statusText,(_.responseType||"text")!=="text"||typeof _.responseText!="string"?{binary:_.response}:{text:_.responseText},_.getAllResponseHeaders()))}},_.onload=a(),c=_.onerror=_.ontimeout=a("error"),_.onabort!==void 0?_.onabort=c:_.onreadystatechange=function(){_.readyState===4&&e.setTimeout(function(){a&&c()})},a=a("abort");try{_.send(o.hasContent&&o.data||null)}catch(T){if(a)throw T}},abort:function(){a&&a()}}}),u.ajaxPrefilter(function(o){o.crossDomain&&(o.contents.script=!1)}),u.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(o){return u.globalEval(o),o}}}),u.ajaxPrefilter("script",function(o){o.cache===void 0&&(o.cache=!1),o.crossDomain&&(o.type="GET")}),u.ajaxTransport("script",function(o){if(o.crossDomain||o.scriptAttrs){var a,c;return{send:function(d,g){a=u("<script>").attr(o.scriptAttrs||{}).prop({charset:o.scriptCharset,src:o.url}).on("load error",c=function(E){a.remove(),c=null,E&&g(E.type==="error"?404:200,E.type)}),I.head.appendChild(a[0])},abort:function(){c&&c()}}}});var qr=[],lr=/(=)\?(?=&|$)|\?\?/;u.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var o=qr.pop()||u.expando+"_"+jr.guid++;return this[o]=!0,o}}),u.ajaxPrefilter("json jsonp",function(o,a,c){var d,g,E,_=o.jsonp!==!1&&(lr.test(o.url)?"url":typeof o.data=="string"&&(o.contentType||"").indexOf("application/x-www-form-urlencoded")===0&&lr.test(o.data)&&"data");if(_||o.dataTypes[0]==="jsonp")return d=o.jsonpCallback=C(o.jsonpCallback)?o.jsonpCallback():o.jsonpCallback,_?o[_]=o[_].replace(lr,"$1"+d):o.jsonp!==!1&&(o.url+=(nr.test(o.url)?"&":"?")+o.jsonp+"="+d),o.converters["script json"]=function(){return E||u.error(d+" was not called"),E[0]},o.dataTypes[0]="json",g=e[d],e[d]=function(){E=arguments},c.always(function(){g===void 0?u(e).removeProp(d):e[d]=g,o[d]&&(o.jsonpCallback=a.jsonpCallback,qr.push(d)),E&&C(g)&&g(E[0]),E=g=void 0}),"script"}),S.createHTMLDocument=function(){var o=I.implementation.createHTMLDocument("").body;return o.innerHTML="<form></form><form></form>",o.childNodes.length===2}(),u.parseHTML=function(o,a,c){if(typeof o!="string")return[];typeof a=="boolean"&&(c=a,a=!1);var d,g,E;return a||(S.createHTMLDocument?(a=I.implementation.createHTMLDocument(""),d=a.createElement("base"),d.href=I.location.href,a.head.appendChild(d)):a=I),g=be.exec(o),E=!c&&[],g?[a.createElement(g[1])]:(g=Ar([o],a,E),E&&E.length&&u(E).remove(),u.merge([],g.childNodes))},u.fn.load=function(o,a,c){var d,g,E,_=this,T=o.indexOf(" ");return T>-1&&(d=dt(o.slice(T)),o=o.slice(0,T)),C(a)?(c=a,a=void 0):a&&typeof a=="object"&&(g="POST"),_.length>0&&u.ajax({url:o,type:g||"GET",dataType:"html",data:a}).done(function(b){E=arguments,_.html(d?u("<div>").append(u.parseHTML(b)).find(d):b)}).always(c&&function(b,O){_.each(function(){c.apply(this,E||[b.responseText,O,b])})}),this},u.expr.pseudos.animated=function(o){return u.grep(u.timers,function(a){return o===a.elem}).length},u.offset={setOffset:function(o,a,c){var d,g,E,_,T,b,O,L=u.css(o,"position"),k=u(o),R={};L==="static"&&(o.style.position="relative"),T=k.offset(),E=u.css(o,"top"),b=u.css(o,"left"),O=(L==="absolute"||L==="fixed")&&(E+b).indexOf("auto")>-1,O?(d=k.position(),_=d.top,g=d.left):(_=parseFloat(E)||0,g=parseFloat(b)||0),C(a)&&(a=a.call(o,c,u.extend({},T))),a.top!=null&&(R.top=a.top-T.top+_),a.left!=null&&(R.left=a.left-T.left+g),"using"in a?a.using.call(o,R):k.css(R)}},u.fn.extend({offset:function(o){if(arguments.length)return o===void 0?this:this.each(function(g){u.offset.setOffset(this,o,g)});var a,c,d=this[0];if(d)return d.getClientRects().length?(a=d.getBoundingClientRect(),c=d.ownerDocument.defaultView,{top:a.top+c.pageYOffset,left:a.left+c.pageXOffset}):{top:0,left:0}},position:function(){if(this[0]){var o,a,c,d=this[0],g={top:0,left:0};if(u.css(d,"position")==="fixed")a=d.getBoundingClientRect();else{for(a=this.offset(),c=d.ownerDocument,o=d.offsetParent||c.documentElement;o&&(o===c.body||o===c.documentElement)&&u.css(o,"position")==="static";)o=o.parentNode;o&&o!==d&&o.nodeType===1&&(g=u(o).offset(),g.top+=u.css(o,"borderTopWidth",!0),g.left+=u.css(o,"borderLeftWidth",!0))}return{top:a.top-g.top-u.css(d,"marginTop",!0),left:a.left-g.left-u.css(d,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var o=this.offsetParent;o&&u.css(o,"position")==="static";)o=o.offsetParent;return o||ft})}}),u.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(o,a){var c=a==="pageYOffset";u.fn[o]=function(d){return Ge(this,function(g,E,_){var T;if(H(g)?T=g:g.nodeType===9&&(T=g.defaultView),_===void 0)return T?T[a]:g[E];T?T.scrollTo(c?T.pageXOffset:_,c?_:T.pageYOffset):g[E]=_},o,d,arguments.length)}}),u.each(["top","left"],function(o,a){u.cssHooks[a]=Cr(S.pixelPosition,function(c,d){if(d)return d=Ct(c,a),Qt.test(d)?u(c).position()[a]+"px":d})}),u.each({Height:"height",Width:"width"},function(o,a){u.each({padding:"inner"+o,content:a,"":"outer"+o},function(c,d){u.fn[d]=function(g,E){var _=arguments.length&&(c||typeof g!="boolean"),T=c||(g===!0||E===!0?"margin":"border");return Ge(this,function(b,O,L){var k;return H(b)?d.indexOf("outer")===0?b["inner"+o]:b.document.documentElement["client"+o]:b.nodeType===9?(k=b.documentElement,Math.max(b.body["scroll"+o],k["scroll"+o],b.body["offset"+o],k["offset"+o],k["client"+o])):L===void 0?u.css(b,O,T):u.style(b,O,L,T)},a,_?g:void 0,_)}})}),u.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(o,a){u.fn[a]=function(c){return this.on(a,c)}}),u.fn.extend({bind:function(o,a,c){return this.on(o,null,a,c)},unbind:function(o,a){return this.off(o,null,a)},delegate:function(o,a,c,d){return this.on(a,o,c,d)},undelegate:function(o,a,c){return arguments.length===1?this.off(o,"**"):this.off(a,o||"**",c)},hover:function(o,a){return this.on("mouseenter",o).on("mouseleave",a||o)}}),u.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(o,a){u.fn[a]=function(c,d){return arguments.length>0?this.on(a,null,c,d):this.trigger(a)}});var Rn=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;u.proxy=function(o,a){var c,d,g;if(typeof a=="string"&&(c=o[a],a=o,o=c),!!C(o))return d=s.call(arguments,2),g=function(){return o.apply(a||this,d.concat(s.call(arguments)))},g.guid=o.guid=o.guid||u.guid++,g},u.holdReady=function(o){o?u.readyWait++:u.ready(!0)},u.isArray=Array.isArray,u.parseJSON=JSON.parse,u.nodeName=U,u.isFunction=C,u.isWindow=H,u.camelCase=Fe,u.type=Q,u.now=Date.now,u.isNumeric=function(o){var a=u.type(o);return(a==="number"||a==="string")&&!isNaN(o-parseFloat(o))},u.trim=function(o){return o==null?"":(o+"").replace(Rn,"$1")};var Dn=e.jQuery,Pn=e.$;return u.noConflict=function(o){return e.$===u&&(e.$=Pn),o&&e.jQuery===u&&(e.jQuery=Dn),u},typeof t>"u"&&(e.jQuery=e.$=u),u})})(jquery);var jqueryExports=jquery.exports;const $=getDefaultExportFromCjs(jqueryExports),actionAddins={};class MustInputAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="必須チェック",this.actionProps=[],this.register(),this.props={field:{code:""},message:""},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("message"in e.ActionValue))return i;this.props=e.ActionValue;const s=t.record;if(!(this.props.field.code in s))throw new Error(`フィールド[${this.props.field.code}]が見つかりませんでした。`);const l=s[this.props.field.code].value;if(l===void 0||l==="")return s[this.props.field.code].error=this.props.message,i;i={canNext:!0,result:!0}}catch(s){r.errors.handleError(s,e),i.canNext=!1}return i}register(){actionAddins[this.name]=this}}new MustInputAction;class Formatter{static numberFormat(e,t){let r=Math.floor(Math.abs(e)).toString(),i=Math.abs(e).toString().split(".")[1]||"",s=e<0,l=t.includes("%");l&&(e*=100,r=Math.floor(Math.abs(e)).toString(),i=Math.abs(e).toString().split(".")[1]||"");let[f,h]=t.split(".");if(r=f?r.padStart(f.replace(/[^0]/g,"").length,"0"):r,i=i.padEnd(h?h.length:0,"0"),/,/.test(f)){const m=[];for(;r.length;)m.unshift(r.slice(-3)),r=r.slice(0,-3);r=m.join(",")}let p=h?`${r}.${i}`:r;return p=s?`-${p}`:p,l?`${p}%`:p}static dateFormat(e,t){const r=e.getFullYear(),i=e.getMonth()+1,s=e.getDate(),l=e.getHours(),f=e.getMinutes(),h=e.getSeconds(),p=e.getMilliseconds(),m=-e.getTimezoneOffset()/60,y={yyyy:r.toString(),yy:r.toString().slice(-2),MM:i.toString().padStart(2,"0"),M:i.toString(),dd:s.toString().padStart(2,"0"),d:s.toString(),HH:l.toString().padStart(2,"0"),H:l.toString(),hh:(l>12?l-12:l).toString().padStart(2,"0"),h:(l>12?l-12:l).toString(),mm:f.toString().padStart(2,"0"),m:f.toString(),ss:h.toString().padStart(2,"0"),s:h.toString(),fff:p.toString().padStart(3,"0"),zzz:(m>=0?"+":"-")+Math.abs(m).toString().padStart(2,"0")+":00"};return t.replace(/yyyy|yy|MM|M|dd|d|HH|H|hh|h|mm|m|ss|s|fff|zzz/g,A=>y[A]||A)}}class AutoNumbering{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="自動採番する",this.actionProps=[],this.register(),this.props={field:{code:""},format:"",prefix:"",suffix:"",verName:{name:""}},globalThis.window.$format=this.format,this.register()}async process(n,e,t){let r={canNext:!1,result:!1};try{if(this.actionProps=n.actionProps,!("field"in n.ActionValue)&&!("format"in n.ActionValue))return r;this.props=n.ActionValue;const i=e.record,s=await this.createNumber(this.props);return i[this.props.field.code].value=s,this.props.verName&&this.props.verName.name!==""&&(t.variables[this.props.verName.name]=s),r={canNext:!0,result:!0},r}catch(i){return t.errors.handleError(i,n),{canNext:!1,result:!1}}}execTemplate(n){if(n===void 0)return"";const e=/\$\{([^}]+)\}/g;return n.replace(e,(t,r)=>this.execEval(t,r))}execEval(match,expr){return console.log(match),eval(expr)}format(n){const e=new Date;return Formatter.dateFormat(e,n)}async createNumber(n){let e="",t="",r="",i=1;try{i=await this.fetchNo()}catch(s){console.log(s)}return n.format!==void 0&&n.format!==""?e=Formatter.numberFormat(i,n.format):e=i.toString(10),n.prefix!==void 0&&n.prefix!==""&&(t=this.execTemplate(n.prefix)),n.suffix!==void 0&&n.suffix!==""&&(r=this.execTemplate(n.suffix)),`${t}${e}${r}`}async fetchNo(){let n=1;return await new kintone.Promise((e,t)=>{const r=kintone.api.url("/k/v1/records",!0),i={app:kintone.app.getId(),fields:["$id"],query:"limit 1"};return kintone.api(r,"GET",i).then(s=>{s.records[0]!==null&&(n=parseInt(s.records[0].$id.value,10)+1),e(n)}).catch(s=>{t(s)})})}register(){actionAddins[this.name]=this}}new AutoNumbering;class GroupNode{constructor(e,t){F(this,"index");F(this,"type");F(this,"children");F(this,"parent");F(this,"logicalOperator");this.index=0,this.type=t==null?"root":"logicgroup",this.logicalOperator=e,this.parent=t,this.children=[]}get label(){return this.logicalOperator}get header(){return this.type==="root"?"root":"generic"}get expanded(){return this.children.length>0}static fromJSON(e,t=null){const r=new GroupNode(e.logicalOperator,t);return r.index=e.index,r.children=e.children.map(i=>i.type==="logicgroup"?GroupNode.fromJSON(i,r):ConditionNode.fromJSON(i,r)),r}}class ConditionNode{constructor(e,t,r,i){F(this,"index");F(this,"type");F(this,"parent");F(this,"object");F(this,"operator");F(this,"value");this.index=0,this.type="condition",this.object=e,this.operator=t,this.value=r,this.parent=i}get logicalOperator(){return this.parent.logicalOperator}get header(){return"generic"}static fromJSON(e,t){const r=new ConditionNode(e.object,e.operator,e.value,t);return r.index=e.index,r}}class ConditionTree{constructor(){F(this,"root");F(this,"maxIndex");this.maxIndex=0,this.root=new GroupNode("AND",null)}addNode(e,t){this.maxIndex++,t.index=this.maxIndex,e.children.push(t)}removeNode(e){if(e.parent===null)throw new Error("ルートノード削除できません");{const t=e.parent,r=t.children.indexOf(e);r>-1&&t.children.splice(r,1)}}findByIndex(e){return this.findChildren(this.root,e)}findChildren(e,t){if(e.index===t)return e;for(const r of e.children){if(r.index===t)return r;if(r.type!=="condition"){const i=this.findChildren(r,t);if(i)return i}}}getMaxIndex(e){let t=e.index;return e.type!=="condition"&&e.children.forEach(i=>{const s=this.getMaxIndex(i);s>t&&(t=s)}),t}buildConditionString(e){if(e.type!=="condition"){let t="(";const r=e;for(let i=0;i<r.children.length;i++){const s=this.buildConditionString(r.children[i]);s!==""&&(t+=s,i<r.children.length-1&&(t+=` ${r.logicalOperator} `))}return t+=")",t}else{const t=e;if(t.object&&t.operator){let r=t.value;return r&&typeof r=="object"&&"label"in r&&(r=t.value.label),`${t.object.name} ${t.operator} '${r}'`}else return""}}getConditions(e){const t=[];return e.children.forEach(r=>{r.type==="condition"?t.push(r):t.push(...this.getConditions(r))}),t}getGroups(e){const t=[];return t.push(e.index),e.children.forEach(r=>{r.type!=="condition"&&t.push(...this.getGroups(r))}),t}fromJson(e){const t=JSON.parse(e);return this.root=GroupNode.fromJSON(t),this.maxIndex=this.getMaxIndex(this.root),this.root}toJson(){return JSON.stringify(this.root,(e,t)=>e==="parent"?t?t.type:null:t)}evaluate(e,t){if(e.type==="condition")return this.evaluateCondition(e,t);if(e.type==="logicgroup"||e.type==="root"){const r=e,i=r.children.map(s=>this.evaluate(s,t));if(r.logicalOperator==="AND")return i.every(s=>s);if(r.logicalOperator==="OR")return i.some(s=>s);throw new Error("Unsupported logical operator")}else throw new Error("Unsupported node type")}getCodeValue(e){return e&&typeof e=="object"&&"code"in e?e.code:e}convertCodeValue(e){return Array.isArray(e)?e.map(t=>this.getCodeValue(t)):this.getCodeValue(e)}getContextVarByPath(e,t){return t.split(".").reduce((r,i)=>(r||{})[i],e)}getObjectValue(e,t){if(!(!e||typeof e!="object"||!("objectType"in e))){if(e.objectType==="field"){const r=t.record[e.code];return r.type==="NUMBER"&&r.value!==void 0?Number(r.value):this.convertCodeValue(r.value)}else if(e.objectType==="variable"){const r=this.getContextVarByPath(t.variables,e.name.name);return this.convertCodeValue(r)}else if(e.objectType==="text")return e.sharedText}}getConditionValue(e,t){if(!e||typeof e!="object")return e;if("objectType"in e)return this.getObjectValue(e,t);if("sharedText"in e)return e.sharedText;if("label"in e)return e.label;if("value"in e)return e.value;if("name"in e)return e.name}evaluateCondition(e,t){const{object:r,operator:i,value:s}=e,l=this.getObjectValue(r,t),f=this.getConditionValue(s,t),h=Array.isArray(l),p=Array.isArray(f);if(h&&l.length>1||p&&f.length>1)return this.compareArray(i,l,f);const m=h?l[0]:l,y=p?f[0]:f;switch(i){case"=":case"!=":case">":case">=":case"<":case"<=":return this.compare(i,m,y);case"contains":return this.contains(m,y);case"not contains":return!this.contains(m,y);case"start With":return this.startWith(m,y);case"not start with":return!this.startWith(m,y);case"end with":return this.endsWith(m,y);case"not end with":return this.endsWith(m,y);default:throw new Error("Unsupported operator")}}compare(e,t,r){if((t==null||t==="")&&(r==null||r==="")&&(t="",r=""),t instanceof Date){const i=new Date(r);isNaN(i.getTime())||(r=i)}else if(typeof t=="number"){const i=Number(r);isNaN(i)||(r=i)}else typeof t=="string"&&(r=String(r));switch(e){case"=":return t===r;case"!=":return t!==r;case">":return t>r;case">=":return t>=r;case"<":return t<r;case"<=":return t<=r;default:throw new Error("Unsupported operator for comparison")}}compareArray(e,t,r){const i=Array.isArray(t),s=Array.isArray(r),l=p=>p.slice().sort();t=i?t:[t],r=s?r:[r];const f=l(t),h=l(r);switch(e){case"=":return f.every((p,m)=>p===h[m]);case"!=":return!f.every((p,m)=>p===h[m]);case"contains":return h.every(p=>f.includes(p));case"not contains":return!h.every(p=>f.includes(p));default:return!1}}contains(e,t){return typeof e=="string"&&typeof t=="string"?e.includes(t):!1}startWith(e,t){return typeof e=="string"&&typeof t=="string"?e.startsWith(t):!1}endsWith(e,t){return typeof e=="string"&&typeof t=="string"?e.endsWith(t):!1}}class FieldShownAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="表示/非表示",this.actionProps=[],this.props={field:{code:""},show:"",condition:""},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{return this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("show"in e.ActionValue)||(this.props=e.ActionValue,this.getConditionResult(r)&&(this.props.show==="表示"?kintone.app.record.setFieldShown(this.props.field.code,!0):this.props.show==="非表示"&&kintone.app.record.setFieldShown(this.props.field.code,!1)),i={canNext:!0,result:!0}),i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}getConditionResult(e){const t=this.getCondition(this.props.condition);return t?t.evaluate(t.root,e):!0}getCondition(e){try{const t=new ConditionTree;return t.fromJson(e),t.getConditions(t.root).length>0?t:null}catch{return null}}register(){actionAddins[this.name]=this}}new FieldShownAction;class ErrorShowAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="エラー表示",this.actionProps=[],this.props={message:"",condition:""},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("message"in e.ActionValue)&&!("condition"in e.ActionValue))return i;this.props=e.ActionValue;const s=this.getConditionResult(r);return console.log("条件結果:",s),s&&(t.error=this.props.message,i.canNext=!1),i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}getConditionResult(e){const t=this.getCondition(this.props.condition);return t?t.evaluate(t.root,e):!0}getCondition(e){try{const t=new ConditionTree;return t.fromJson(e),t.getConditions(t.root).length>0?t:null}catch{return null}}register(){actionAddins[this.name]=this}}new ErrorShowAction;const buttonAdd="";class ButtonAddAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="ボタンの配置",this.actionProps=[],this.props={buttonName:"",position:"",eventName:""},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("buttonName"in e.ActionValue)&&!("position"in e.ActionValue))return i;this.props=e.ActionValue;let s;if(this.props.space&&this.props.space.elementId?s=kintone.app.record.getSpaceElement(this.props.space.elementId):s=kintone.app.record.getHeaderMenuSpaceElement(),!s)return i;const l=$(`<button id='${this.props.eventName}' class='alc-button-normal' >${this.props.buttonName}</button>`);this.props.position==="一番左に追加する"?$(s).prepend(l):$(s).append(l);const f=`${t.type}.customButtonClick.${this.props.eventName}`;return l.on("click",()=>{$(document).trigger(f,t)}),i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}register(){actionAddins[this.name]=this}}new ButtonAddAction;class ConditionAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="条件式",this.actionProps=[],this.props={condition:"",verName:{name:""}},this.register()}async process(e,t,r){let i={canNext:!0,result:""};try{if(this.actionProps=e.actionProps,!("condition"in e.ActionValue)&&!("verName"in e.ActionValue))return i;this.props=e.ActionValue;const s=this.getConditionResult(r);return console.log("条件計算結果:",s),s?i={canNext:!0,result:"はい"}:i={canNext:!0,result:"いいえ"},this.props.verName&&this.props.verName.name!==""&&(r.variables[this.props.verName.name]=i.result),i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}getConditionResult(e){const t=this.getCondition(this.props.condition);return t?t.evaluate(t.root,e):!0}getCondition(e){try{const t=new ConditionTree;return t.fromJson(e),t.getConditions(t.root).length>0?t:null}catch{return null}}register(){actionAddins[this.name]=this}}new ConditionAction;var index_browser={},platform$2={};(function(n){Object.defineProperty(n,"__esModule",{value:!0}),n.injectPlatformDeps=n.platformDeps=void 0,n.platformDeps={readFileFromPath:function(){throw new Error("not implemented")},getRequestToken:function(){throw new Error("not implemented")},getDefaultAuth:function(){throw new Error("not implemented")},buildPlatformDependentConfig:function(){throw new Error("not implemented")},buildHeaders:function(){throw new Error("not implemented")},buildFormDataValue:function(){throw new Error("not implemented")},buildBaseUrl:function(){throw new Error("not implemented")},getVersion:function(){throw new Error("not implemented")}};var e=function(t){t.readFileFromPath&&(n.platformDeps.readFileFromPath=t.readFileFromPath),t.getRequestToken&&(n.platformDeps.getRequestToken=t.getRequestToken),t.getDefaultAuth&&(n.platformDeps.getDefaultAuth=t.getDefaultAuth),t.buildPlatformDependentConfig&&(n.platformDeps.buildPlatformDependentConfig=t.buildPlatformDependentConfig),t.buildHeaders&&(n.platformDeps.buildHeaders=t.buildHeaders),t.buildFormDataValue&&(n.platformDeps.buildFormDataValue=t.buildFormDataValue),t.buildBaseUrl&&(n.platformDeps.buildBaseUrl=t.buildBaseUrl),t.getVersion&&(n.platformDeps.getVersion=t.getVersion)};n.injectPlatformDeps=e})(platform$2);var browser$2={},UnsupportedPlatformError$1={},__extends$8=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(r[s]=i[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(UnsupportedPlatformError$1,"__esModule",{value:!0});UnsupportedPlatformError$1.UnsupportedPlatformError=void 0;var UnsupportedPlatformError=function(n){__extends$8(e,n);function e(t){var r=this,i="This function is not supported in ".concat(t," environment");return r=n.call(this,i)||this,Error.captureStackTrace&&Error.captureStackTrace(r,e),r.name="UnsupportedPlatformError",r.platform=t,Object.setPrototypeOf(r,e.prototype),r}return e}(Error);UnsupportedPlatformError$1.UnsupportedPlatformError=UnsupportedPlatformError;function Mime$1(){this._types=Object.create(null),this._extensions=Object.create(null);for(let n=0;n<arguments.length;n++)this.define(arguments[n]);this.define=this.define.bind(this),this.getType=this.getType.bind(this),this.getExtension=this.getExtension.bind(this)}Mime$1.prototype.define=function(n,e){for(let t in n){let r=n[t].map(function(i){return i.toLowerCase()});t=t.toLowerCase();for(let i=0;i<r.length;i++){const s=r[i];if(s[0]!=="*"){if(!e&&s in this._types)throw new Error('Attempt to change mapping for "'+s+'" extension from "'+this._types[s]+'" to "'+t+'". Pass `force=true` to allow this, otherwise remove "'+s+'" from the list of extensions for "'+t+'".');this._types[s]=t}}if(e||!this._extensions[t]){const i=r[0];this._extensions[t]=i[0]!=="*"?i:i.substr(1)}}};Mime$1.prototype.getType=function(n){n=String(n);let e=n.replace(/^.*[/\\]/,"").toLowerCase(),t=e.replace(/^.*\./,"").toLowerCase(),r=e.length<n.length;return(t.length<e.length-1||!r)&&this._types[t]||null};Mime$1.prototype.getExtension=function(n){return n=/^\s*([^;\s]*)/.test(n)&&RegExp.$1,n&&this._extensions[n.toLowerCase()]||null};var Mime_1=Mime$1,standard={"application/andrew-inset":["ez"],"application/applixware":["aw"],"application/atom+xml":["atom"],"application/atomcat+xml":["atomcat"],"application/atomdeleted+xml":["atomdeleted"],"application/atomsvc+xml":["atomsvc"],"application/atsc-dwd+xml":["dwd"],"application/atsc-held+xml":["held"],"application/atsc-rsat+xml":["rsat"],"application/bdoc":["bdoc"],"application/calendar+xml":["xcs"],"application/ccxml+xml":["ccxml"],"application/cdfx+xml":["cdfx"],"application/cdmi-capability":["cdmia"],"application/cdmi-container":["cdmic"],"application/cdmi-domain":["cdmid"],"application/cdmi-object":["cdmio"],"application/cdmi-queue":["cdmiq"],"application/cu-seeme":["cu"],"application/dash+xml":["mpd"],"application/davmount+xml":["davmount"],"application/docbook+xml":["dbk"],"application/dssc+der":["dssc"],"application/dssc+xml":["xdssc"],"application/ecmascript":["es","ecma"],"application/emma+xml":["emma"],"application/emotionml+xml":["emotionml"],"application/epub+zip":["epub"],"application/exi":["exi"],"application/express":["exp"],"application/fdt+xml":["fdt"],"application/font-tdpfr":["pfr"],"application/geo+json":["geojson"],"application/gml+xml":["gml"],"application/gpx+xml":["gpx"],"application/gxf":["gxf"],"application/gzip":["gz"],"application/hjson":["hjson"],"application/hyperstudio":["stk"],"application/inkml+xml":["ink","inkml"],"application/ipfix":["ipfix"],"application/its+xml":["its"],"application/java-archive":["jar","war","ear"],"application/java-serialized-object":["ser"],"application/java-vm":["class"],"application/javascript":["js","mjs"],"application/json":["json","map"],"application/json5":["json5"],"application/jsonml+json":["jsonml"],"application/ld+json":["jsonld"],"application/lgr+xml":["lgr"],"application/lost+xml":["lostxml"],"application/mac-binhex40":["hqx"],"application/mac-compactpro":["cpt"],"application/mads+xml":["mads"],"application/manifest+json":["webmanifest"],"application/marc":["mrc"],"application/marcxml+xml":["mrcx"],"application/mathematica":["ma","nb","mb"],"application/mathml+xml":["mathml"],"application/mbox":["mbox"],"application/mediaservercontrol+xml":["mscml"],"application/metalink+xml":["metalink"],"application/metalink4+xml":["meta4"],"application/mets+xml":["mets"],"application/mmt-aei+xml":["maei"],"application/mmt-usd+xml":["musd"],"application/mods+xml":["mods"],"application/mp21":["m21","mp21"],"application/mp4":["mp4s","m4p"],"application/msword":["doc","dot"],"application/mxf":["mxf"],"application/n-quads":["nq"],"application/n-triples":["nt"],"application/node":["cjs"],"application/octet-stream":["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"],"application/oda":["oda"],"application/oebps-package+xml":["opf"],"application/ogg":["ogx"],"application/omdoc+xml":["omdoc"],"application/onenote":["onetoc","onetoc2","onetmp","onepkg"],"application/oxps":["oxps"],"application/p2p-overlay+xml":["relo"],"application/patch-ops-error+xml":["xer"],"application/pdf":["pdf"],"application/pgp-encrypted":["pgp"],"application/pgp-signature":["asc","sig"],"application/pics-rules":["prf"],"application/pkcs10":["p10"],"application/pkcs7-mime":["p7m","p7c"],"application/pkcs7-signature":["p7s"],"application/pkcs8":["p8"],"application/pkix-attr-cert":["ac"],"application/pkix-cert":["cer"],"application/pkix-crl":["crl"],"application/pkix-pkipath":["pkipath"],"application/pkixcmp":["pki"],"application/pls+xml":["pls"],"application/postscript":["ai","eps","ps"],"application/provenance+xml":["provx"],"application/pskc+xml":["pskcxml"],"application/raml+yaml":["raml"],"application/rdf+xml":["rdf","owl"],"application/reginfo+xml":["rif"],"application/relax-ng-compact-syntax":["rnc"],"application/resource-lists+xml":["rl"],"application/resource-lists-diff+xml":["rld"],"application/rls-services+xml":["rs"],"application/route-apd+xml":["rapd"],"application/route-s-tsid+xml":["sls"],"application/route-usd+xml":["rusd"],"application/rpki-ghostbusters":["gbr"],"application/rpki-manifest":["mft"],"application/rpki-roa":["roa"],"application/rsd+xml":["rsd"],"application/rss+xml":["rss"],"application/rtf":["rtf"],"application/sbml+xml":["sbml"],"application/scvp-cv-request":["scq"],"application/scvp-cv-response":["scs"],"application/scvp-vp-request":["spq"],"application/scvp-vp-response":["spp"],"application/sdp":["sdp"],"application/senml+xml":["senmlx"],"application/sensml+xml":["sensmlx"],"application/set-payment-initiation":["setpay"],"application/set-registration-initiation":["setreg"],"application/shf+xml":["shf"],"application/sieve":["siv","sieve"],"application/smil+xml":["smi","smil"],"application/sparql-query":["rq"],"application/sparql-results+xml":["srx"],"application/srgs":["gram"],"application/srgs+xml":["grxml"],"application/sru+xml":["sru"],"application/ssdl+xml":["ssdl"],"application/ssml+xml":["ssml"],"application/swid+xml":["swidtag"],"application/tei+xml":["tei","teicorpus"],"application/thraud+xml":["tfi"],"application/timestamped-data":["tsd"],"application/toml":["toml"],"application/trig":["trig"],"application/ttml+xml":["ttml"],"application/ubjson":["ubj"],"application/urc-ressheet+xml":["rsheet"],"application/urc-targetdesc+xml":["td"],"application/voicexml+xml":["vxml"],"application/wasm":["wasm"],"application/widget":["wgt"],"application/winhlp":["hlp"],"application/wsdl+xml":["wsdl"],"application/wspolicy+xml":["wspolicy"],"application/xaml+xml":["xaml"],"application/xcap-att+xml":["xav"],"application/xcap-caps+xml":["xca"],"application/xcap-diff+xml":["xdf"],"application/xcap-el+xml":["xel"],"application/xcap-ns+xml":["xns"],"application/xenc+xml":["xenc"],"application/xhtml+xml":["xhtml","xht"],"application/xliff+xml":["xlf"],"application/xml":["xml","xsl","xsd","rng"],"application/xml-dtd":["dtd"],"application/xop+xml":["xop"],"application/xproc+xml":["xpl"],"application/xslt+xml":["*xsl","xslt"],"application/xspf+xml":["xspf"],"application/xv+xml":["mxml","xhvml","xvml","xvm"],"application/yang":["yang"],"application/yin+xml":["yin"],"application/zip":["zip"],"audio/3gpp":["*3gpp"],"audio/adpcm":["adp"],"audio/amr":["amr"],"audio/basic":["au","snd"],"audio/midi":["mid","midi","kar","rmi"],"audio/mobile-xmf":["mxmf"],"audio/mp3":["*mp3"],"audio/mp4":["m4a","mp4a"],"audio/mpeg":["mpga","mp2","mp2a","mp3","m2a","m3a"],"audio/ogg":["oga","ogg","spx","opus"],"audio/s3m":["s3m"],"audio/silk":["sil"],"audio/wav":["wav"],"audio/wave":["*wav"],"audio/webm":["weba"],"audio/xm":["xm"],"font/collection":["ttc"],"font/otf":["otf"],"font/ttf":["ttf"],"font/woff":["woff"],"font/woff2":["woff2"],"image/aces":["exr"],"image/apng":["apng"],"image/avif":["avif"],"image/bmp":["bmp"],"image/cgm":["cgm"],"image/dicom-rle":["drle"],"image/emf":["emf"],"image/fits":["fits"],"image/g3fax":["g3"],"image/gif":["gif"],"image/heic":["heic"],"image/heic-sequence":["heics"],"image/heif":["heif"],"image/heif-sequence":["heifs"],"image/hej2k":["hej2"],"image/hsj2":["hsj2"],"image/ief":["ief"],"image/jls":["jls"],"image/jp2":["jp2","jpg2"],"image/jpeg":["jpeg","jpg","jpe"],"image/jph":["jph"],"image/jphc":["jhc"],"image/jpm":["jpm"],"image/jpx":["jpx","jpf"],"image/jxr":["jxr"],"image/jxra":["jxra"],"image/jxrs":["jxrs"],"image/jxs":["jxs"],"image/jxsc":["jxsc"],"image/jxsi":["jxsi"],"image/jxss":["jxss"],"image/ktx":["ktx"],"image/ktx2":["ktx2"],"image/png":["png"],"image/sgi":["sgi"],"image/svg+xml":["svg","svgz"],"image/t38":["t38"],"image/tiff":["tif","tiff"],"image/tiff-fx":["tfx"],"image/webp":["webp"],"image/wmf":["wmf"],"message/disposition-notification":["disposition-notification"],"message/global":["u8msg"],"message/global-delivery-status":["u8dsn"],"message/global-disposition-notification":["u8mdn"],"message/global-headers":["u8hdr"],"message/rfc822":["eml","mime"],"model/3mf":["3mf"],"model/gltf+json":["gltf"],"model/gltf-binary":["glb"],"model/iges":["igs","iges"],"model/mesh":["msh","mesh","silo"],"model/mtl":["mtl"],"model/obj":["obj"],"model/step+xml":["stpx"],"model/step+zip":["stpz"],"model/step-xml+zip":["stpxz"],"model/stl":["stl"],"model/vrml":["wrl","vrml"],"model/x3d+binary":["*x3db","x3dbz"],"model/x3d+fastinfoset":["x3db"],"model/x3d+vrml":["*x3dv","x3dvz"],"model/x3d+xml":["x3d","x3dz"],"model/x3d-vrml":["x3dv"],"text/cache-manifest":["appcache","manifest"],"text/calendar":["ics","ifb"],"text/coffeescript":["coffee","litcoffee"],"text/css":["css"],"text/csv":["csv"],"text/html":["html","htm","shtml"],"text/jade":["jade"],"text/jsx":["jsx"],"text/less":["less"],"text/markdown":["markdown","md"],"text/mathml":["mml"],"text/mdx":["mdx"],"text/n3":["n3"],"text/plain":["txt","text","conf","def","list","log","in","ini"],"text/richtext":["rtx"],"text/rtf":["*rtf"],"text/sgml":["sgml","sgm"],"text/shex":["shex"],"text/slim":["slim","slm"],"text/spdx":["spdx"],"text/stylus":["stylus","styl"],"text/tab-separated-values":["tsv"],"text/troff":["t","tr","roff","man","me","ms"],"text/turtle":["ttl"],"text/uri-list":["uri","uris","urls"],"text/vcard":["vcard"],"text/vtt":["vtt"],"text/xml":["*xml"],"text/yaml":["yaml","yml"],"video/3gpp":["3gp","3gpp"],"video/3gpp2":["3g2"],"video/h261":["h261"],"video/h263":["h263"],"video/h264":["h264"],"video/iso.segment":["m4s"],"video/jpeg":["jpgv"],"video/jpm":["*jpm","jpgm"],"video/mj2":["mj2","mjp2"],"video/mp2t":["ts"],"video/mp4":["mp4","mp4v","mpg4"],"video/mpeg":["mpeg","mpg","mpe","m1v","m2v"],"video/ogg":["ogv"],"video/quicktime":["qt","mov"],"video/webm":["webm"]};let Mime=Mime_1;var lite=new Mime(standard);const name="@kintone/rest-api-client",version="5.5.2",publishConfig={access:"public"},author={name:"Cybozu, Inc.",url:"https://cybozu.co.jp"},description="Kintone REST API client for JavaScript",main$1="lib/src/index.js",module="esm/src/index.js",browser$1="lib/src/index.browser.js",types="lib/src/index.d.ts",scripts={prebuild:"pnpm clean",build:"tsc --build --force",postbuild:"run-p build:*",lint:"eslint 'src/**/*.ts' --max-warnings 0",prepublishOnly:"run-p build:umd_*",test:"cross-env NODE_OPTIONS=--experimental-vm-modules npx jest","test:ci":"cross-env NODE_OPTIONS=--experimental-vm-modules npx jest --runInBand","build:umd_dev":"rollup -c --environment BUILD:development","build:umd_prod":"rollup -c --environment BUILD:production",clean:"rimraf lib esm umd",fix:"pnpm lint --fix",start:"pnpm build --watch"},repository={type:"git",url:"git+https://github.com/kintone/js-sdk.git",directory:"packages/rest-api-client"},files=["esm","lib","umd","index.mjs"],keywords=["kintone","rest","api-client"],license="MIT",bugs={url:"https://github.com/kintone/js-sdk/issues"},homepage="https://github.com/kintone/js-sdk/tree/main/packages/rest-api-client#readme",engines={node:">=18"},devDependencies={"@rollup/plugin-babel":"^6.0.4","@rollup/plugin-commonjs":"^26.0.1","@rollup/plugin-json":"^6.1.0","@rollup/plugin-node-resolve":"^15.2.3","@rollup/plugin-terser":"^0.4.4","@types/core-js":"^2.5.8","@types/js-base64":"^3.3.1","@types/mime":"^3.0.4","@types/qs":"^6.9.15",rollup:"^4.18.0","rollup-plugin-ecma-version-validator":"^0.2.13","rollup-plugin-license":"^3.4.0","rollup-plugin-node-globals":"^1.4.0","rollup-plugin-polyfill-node":"^0.13.0",webpack:"^5.92.0","webpack-cli":"^5.1.4","babel-loader":"^9.1.3",vite:"^5.2.13",rimraf:"^5.0.7","cross-env":"^7.0.3"},dependencies={"core-js":"^3.37.1",axios:"^1.7.2","form-data":"^4.0.0","js-base64":"^3.7.7",mime:"^3.0.0",qs:"^6.12.1"},exports={".":{types:{import:"./esm/src/index.d.ts",require:"./lib/src/index.d.ts",default:"./lib/src/index.d.ts"},node:{import:"./index.mjs",require:"./lib/src/index.js",default:"./lib/src/index.js"},browser:"./lib/src/index.browser.js"},"./package.json":"./package.json"},require$$2={name,version,publishConfig,author,description,main:main$1,module,browser:browser$1,types,scripts,repository,files,keywords,license,bugs,homepage,engines,devDependencies,dependencies,exports};var __awaiter$5=commonjsGlobal&&commonjsGlobal.__awaiter||function(n,e,t,r){function i(s){return s instanceof t?s:new t(function(l){l(s)})}return new(t||(t=Promise))(function(s,l){function f(m){try{p(r.next(m))}catch(y){l(y)}}function h(m){try{p(r.throw(m))}catch(y){l(y)}}function p(m){m.done?s(m.value):i(m.value).then(f,h)}p((r=r.apply(n,e||[])).next())})},__generator$5=commonjsGlobal&&commonjsGlobal.__generator||function(n,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,i,s,l;return l={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function f(p){return function(m){return h([p,m])}}function h(p){if(r)throw new TypeError("Generator is already executing.");for(;l&&(l=0,p[0]&&(t=0)),t;)try{if(r=1,i&&(s=p[0]&2?i.return:p[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,p[1])).done)return s;switch(i=0,s&&(p=[p[0]&2,s.value]),p[0]){case 0:case 1:s=p;break;case 4:return t.label++,{value:p[1],done:!1};case 5:t.label++,i=p[1],p=[0];continue;case 7:p=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(p[0]===6||p[0]===2)){t=0;continue}if(p[0]===3&&(!s||p[1]>s[0]&&p[1]<s[3])){t.label=p[1];break}if(p[0]===6&&t.label<s[1]){t.label=s[1],s=p;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(p);break}s[2]&&t.ops.pop(),t.trys.pop();continue}p=e.call(n,t)}catch(m){p=[6,m],i=0}finally{r=s=0}if(p[0]&5)throw p[1];return{value:p[0]?p[1]:void 0,done:!0}}},__importDefault$3=commonjsGlobal&&commonjsGlobal.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(browser$2,"__esModule",{value:!0});browser$2.getVersion=browser$2.buildBaseUrl=browser$2.buildFormDataValue=browser$2.buildHeaders=browser$2.buildPlatformDependentConfig=browser$2.getDefaultAuth=browser$2.getRequestToken=browser$2.readFileFromPath=void 0;var UnsupportedPlatformError_1$2=UnsupportedPlatformError$1,lite_1=__importDefault$3(lite),package_json_1=__importDefault$3(require$$2),readFileFromPath=function(n){throw new UnsupportedPlatformError_1$2.UnsupportedPlatformError("Browser")};browser$2.readFileFromPath=readFileFromPath;var getRequestToken=function(){return __awaiter$5(void 0,void 0,void 0,function(){var n,e;return __generator$5(this,function(t){if(typeof kintone=="object"&&kintone!==null&&typeof kintone.getRequestToken=="function")return[2,kintone.getRequestToken()];if(typeof garoon=="object"&&garoon!==null&&typeof((e=(n=garoon.connect)===null||n===void 0?void 0:n.kintone)===null||e===void 0?void 0:e.getRequestToken)=="function")return[2,garoon.connect.kintone.getRequestToken()];throw new Error("session authentication must specify a request token")})})};browser$2.getRequestToken=getRequestToken;var getDefaultAuth=function(){return{type:"session"}};browser$2.getDefaultAuth=getDefaultAuth;var buildPlatformDependentConfig=function(){return{}};browser$2.buildPlatformDependentConfig=buildPlatformDependentConfig;var buildHeaders=function(){return{}};browser$2.buildHeaders=buildHeaders;var buildFormDataValue=function(n,e){var t={};return e&&(t.type=lite_1.default.getType(e)||void 0),new Blob([n],t)};browser$2.buildFormDataValue=buildFormDataValue;var buildBaseUrl=function(n){if(n)return n;if(location===void 0)throw new Error("The baseUrl parameter is required for this environment");var e=location.host,t=location.protocol;return"".concat(t,"//").concat(e)};browser$2.buildBaseUrl=buildBaseUrl;var getVersion=function(){return package_json_1.default.version};browser$2.getVersion=getVersion;var KintoneRestAPIClient$1={},BulkRequestClient$1={},BaseClient$1={},url={};Object.defineProperty(url,"__esModule",{value:!0});url.buildPath=void 0;var buildPath=function(n){var e=n.endpointName,t=n.guestSpaceId,r=n.preview,i=t!==void 0?"/guest/".concat(t):"",s=r?"/preview":"";return"/k".concat(i,"/v1").concat(s,"/").concat(e,".json")};url.buildPath=buildPath;var __assign$7=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$7=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i])}return n},__assign$7.apply(this,arguments)};Object.defineProperty(BaseClient$1,"__esModule",{value:!0});BaseClient$1.BaseClient=void 0;var url_1=url,BaseClient=function(){function n(e,t){this.client=e,this.guestSpaceId=t}return n.prototype.buildPathWithGuestSpaceId=function(e){return(0,url_1.buildPath)(__assign$7(__assign$7({},e),{guestSpaceId:this.guestSpaceId}))},n.prototype.buildPath=function(e){return(0,url_1.buildPath)(e)},n}();BaseClient$1.BaseClient=BaseClient;var __extends$7=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(r[s]=i[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),__assign$6=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$6=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i])}return n},__assign$6.apply(this,arguments)},__rest$3=commonjsGlobal&&commonjsGlobal.__rest||function(n,e){var t={};for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&e.indexOf(r)<0&&(t[r]=n[r]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(n);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(n,r[i])&&(t[r[i]]=n[r[i]]);return t};Object.defineProperty(BulkRequestClient$1,"__esModule",{value:!0});BulkRequestClient$1.BulkRequestClient=void 0;var BaseClient_1$4=BaseClient$1,BulkRequestClient=function(n){__extends$7(e,n);function e(t,r){var i=n.call(this,t,r)||this;return i.REQUESTS_LENGTH_LIMIT=20,i}return e.prototype.send=function(t){var r=this,i=t.requests,s=i.map(function(f){if("endpointName"in f){var h=f.endpointName,p=__rest$3(f,["endpointName"]);return __assign$6({api:r.buildPathWithGuestSpaceId({endpointName:h})},p)}return f}),l=this.buildPathWithGuestSpaceId({endpointName:"bulkRequest"});return this.client.post(l,{requests:s})},e}(BaseClient_1$4.BaseClient);BulkRequestClient$1.BulkRequestClient=BulkRequestClient;var AppClient$1={},__extends$6=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(r[s]=i[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),__assign$5=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$5=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i])}return n},__assign$5.apply(this,arguments)},__awaiter$4=commonjsGlobal&&commonjsGlobal.__awaiter||function(n,e,t,r){function i(s){return s instanceof t?s:new t(function(l){l(s)})}return new(t||(t=Promise))(function(s,l){function f(m){try{p(r.next(m))}catch(y){l(y)}}function h(m){try{p(r.throw(m))}catch(y){l(y)}}function p(m){m.done?s(m.value):i(m.value).then(f,h)}p((r=r.apply(n,e||[])).next())})},__generator$4=commonjsGlobal&&commonjsGlobal.__generator||function(n,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,i,s,l;return l={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function f(p){return function(m){return h([p,m])}}function h(p){if(r)throw new TypeError("Generator is already executing.");for(;l&&(l=0,p[0]&&(t=0)),t;)try{if(r=1,i&&(s=p[0]&2?i.return:p[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,p[1])).done)return s;switch(i=0,s&&(p=[p[0]&2,s.value]),p[0]){case 0:case 1:s=p;break;case 4:return t.label++,{value:p[1],done:!1};case 5:t.label++,i=p[1],p=[0];continue;case 7:p=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(p[0]===6||p[0]===2)){t=0;continue}if(p[0]===3&&(!s||p[1]>s[0]&&p[1]<s[3])){t.label=p[1];break}if(p[0]===6&&t.label<s[1]){t.label=s[1],s=p;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(p);break}s[2]&&t.ops.pop(),t.trys.pop();continue}p=e.call(n,t)}catch(m){p=[6,m],i=0}finally{r=s=0}if(p[0]&5)throw p[1];return{value:p[0]?p[1]:void 0,done:!0}}},__rest$2=commonjsGlobal&&commonjsGlobal.__rest||function(n,e){var t={};for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&e.indexOf(r)<0&&(t[r]=n[r]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(n);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(n,r[i])&&(t[r[i]]=n[r[i]]);return t};Object.defineProperty(AppClient$1,"__esModule",{value:!0});AppClient$1.AppClient=void 0;var BaseClient_1$3=BaseClient$1,AppClient=function(n){__extends$6(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return e.prototype.getFormFields=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/form/fields",preview:r});return this.client.get(s,__assign$5({},i))},e.prototype.addFormFields=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/form/fields",preview:!0});return this.client.post(r,t)},e.prototype.updateFormFields=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/form/fields",preview:!0});return this.client.put(r,t)},e.prototype.deleteFormFields=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/form/fields",preview:!0});return this.client.delete(r,t)},e.prototype.getFormLayout=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/form/layout",preview:r});return this.client.get(s,__assign$5({},i))},e.prototype.updateFormLayout=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/form/layout",preview:!0});return this.client.put(r,t)},e.prototype.getViews=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/views",preview:r});return this.client.get(s,i)},e.prototype.updateViews=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/views",preview:!0});return this.client.put(r,t)},e.prototype.getApp=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app"});return this.client.get(r,t)},e.prototype.getApps=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"apps"});return this.client.get(r,t)},e.prototype.addApp=function(t){return __awaiter$4(this,void 0,void 0,function(){var r,i,s,l,f;return __generator$4(this,function(h){switch(h.label){case 0:return r=t.name,i=t.space,s=this.buildPathWithGuestSpaceId({endpointName:"app",preview:!0}),i?(l=this.buildPathWithGuestSpaceId({endpointName:"space"}),[4,this.client.get(l,{id:i})]):[3,2];case 1:return f=h.sent().defaultThread,[2,this.client.post(s,__assign$5(__assign$5({},t),{thread:f}))];case 2:return[2,this.client.post(s,{name:r})]}})})},e.prototype.getAppSettings=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/settings",preview:r});return this.client.get(s,i)},e.prototype.updateAppSettings=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/settings",preview:!0});return this.client.put(r,t)},e.prototype.getProcessManagement=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/status",preview:r});return this.client.get(s,i)},e.prototype.updateProcessManagement=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/status",preview:!0});return this.client.put(r,t)},e.prototype.getDeployStatus=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/deploy",preview:!0});return this.client.get(r,t)},e.prototype.deployApp=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/deploy",preview:!0});return this.client.post(r,t)},e.prototype.getFieldAcl=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"field/acl",preview:r});return this.client.get(s,__assign$5({},i))},e.prototype.updateFieldAcl=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"field/acl",preview:!0});return this.client.put(r,t)},e.prototype.getAppAcl=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/acl",preview:r});return this.client.get(s,__assign$5({},i))},e.prototype.updateAppAcl=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/acl",preview:!0});return this.client.put(r,t)},e.prototype.evaluateRecordsAcl=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"records/acl/evaluate"});return this.client.get(r,t)},e.prototype.getRecordAcl=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"record/acl",preview:r});return this.client.get(s,__assign$5({},i))},e.prototype.updateRecordAcl=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record/acl",preview:!0});return this.client.put(r,t)},e.prototype.getAppCustomize=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/customize",preview:r});return this.client.get(s,__assign$5({},i))},e.prototype.updateAppCustomize=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/customize",preview:!0});return this.client.put(r,t)},e.prototype.getGeneralNotifications=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/notifications/general",preview:r});return this.client.get(s,__assign$5({},i))},e.prototype.updateGeneralNotifications=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/notifications/general",preview:!0});return this.client.put(r,t)},e.prototype.getPerRecordNotifications=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/notifications/perRecord",preview:r});return this.client.get(s,i)},e.prototype.updatePerRecordNotifications=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/notifications/perRecord",preview:!0});return this.client.put(r,t)},e.prototype.getReminderNotifications=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/notifications/reminder",preview:r});return this.client.get(s,i)},e.prototype.updateReminderNotifications=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/notifications/reminder",preview:!0});return this.client.put(r,t)},e.prototype.getReports=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/reports",preview:r});return this.client.get(s,i)},e.prototype.updateReports=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/reports",preview:!0});return this.client.put(r,t)},e.prototype.getAppActions=function(t){var r=t.preview,i=__rest$2(t,["preview"]),s=this.buildPathWithGuestSpaceId({endpointName:"app/actions",preview:r});return this.client.get(s,i)},e.prototype.updateAppActions=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"app/actions",preview:!0});return this.client.put(r,t)},e}(BaseClient_1$3.BaseClient);AppClient$1.AppClient=AppClient;var RecordClient$1={},error={},KintoneAbortSearchError$1={},__extends$5=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(r[s]=i[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(KintoneAbortSearchError$1,"__esModule",{value:!0});KintoneAbortSearchError$1.KintoneAbortSearchError=void 0;var KintoneAbortSearchError=function(n){__extends$5(e,n);function e(t){var r=n.call(this,t)||this;return r.name="KintoneAbortSearchError",r.message=t,Object.setPrototypeOf(r,e.prototype),r}return e}(Error);KintoneAbortSearchError$1.KintoneAbortSearchError=KintoneAbortSearchError;var KintoneAllRecordsError$1={},__extends$4=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(r[s]=i[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(KintoneAllRecordsError$1,"__esModule",{value:!0});KintoneAllRecordsError$1.KintoneAllRecordsError=void 0;var KintoneAllRecordsError=function(n){__extends$4(e,n);function e(t,r,i,s,l){var f=this,h=i-r.length,p=e.extractErrorIndex(h,s,l),m=e.buildErrorMessage(h,i,p);return f=n.call(this,m)||this,f.name="KintoneAllRecordsError",f.processedRecordsResult=t,f.unprocessedRecords=r,f.error=s,f.errorIndex=p,f.message=m,f.numOfProcessedRecords=h,f.numOfAllRecords=i,Object.setPrototypeOf(f,e.prototype),f}return e.parseErrorIndex=function(t){var r=[];return Object.keys(t).forEach(function(i){var s=i.match(/records\[(\d+)\]/);s&&r.push(Number(s[1]))}),r.length>0?Math.min.apply(Math,r):null},e.extractErrorIndex=function(t,r,i){if(r.bulkRequestIndex!==void 0&&r.errors){var s=e.parseErrorIndex(r.errors);if(s!==null)return t+r.bulkRequestIndex*i+s}},e.buildErrorMessage=function(t,r,i){var s="";return i!==void 0&&(s="An error occurred at records[".concat(i,"]. ")),s+="".concat(t,"/").concat(r," records are processed successfully"),s},e}(Error);KintoneAllRecordsError$1.KintoneAllRecordsError=KintoneAllRecordsError;var KintoneRestAPIError$1={},__extends$3=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(r[s]=i[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(KintoneRestAPIError$1,"__esModule",{value:!0});KintoneRestAPIError$1.KintoneRestAPIError=void 0;var KintoneRestAPIError=function(n){__extends$3(e,n);function e(t){var r=this,i=e.buildErrorResponseDateWithIndex(t),s=i.data,l=i.bulkRequestIndex;return r=n.call(this,s.message)||this,r.name="KintoneRestAPIError",r.id=s.id,r.code=s.code,r.errors=s.errors,r.status=t.status,r.bulkRequestIndex=l,r.headers=t.headers,r.message="[".concat(t.status,"] [").concat(r.code,"] ").concat(r.message," (").concat(r.id,")"),Error.captureStackTrace&&Error.captureStackTrace(r,e),Object.setPrototypeOf(r,e.prototype),r}return e.findErrorResponseDataWithIndex=function(t){for(var r=0;r<t.length;r++)if(Object.keys(t[r]).length!==0){var i=t[r];return{data:i,bulkRequestIndex:r}}throw Error("Missing response data in `results`. This error is likely caused by a bug in Kintone REST API Client. Please file an issue.")},e.buildErrorResponseDateWithIndex=function(t){return"results"in t.data?e.findErrorResponseDataWithIndex(t.data.results):{data:t.data}},e}(Error);KintoneRestAPIError$1.KintoneRestAPIError=KintoneRestAPIError;(function(n){var e=commonjsGlobal&&commonjsGlobal.__createBinding||(Object.create?function(r,i,s,l){l===void 0&&(l=s);var f=Object.getOwnPropertyDescriptor(i,s);(!f||("get"in f?!i.__esModule:f.writable||f.configurable))&&(f={enumerable:!0,get:function(){return i[s]}}),Object.defineProperty(r,l,f)}:function(r,i,s,l){l===void 0&&(l=s),r[l]=i[s]}),t=commonjsGlobal&&commonjsGlobal.__exportStar||function(r,i){for(var s in r)s!=="default"&&!Object.prototype.hasOwnProperty.call(i,s)&&e(i,r,s)};Object.defineProperty(n,"__esModule",{value:!0}),t(KintoneAbortSearchError$1,n),t(KintoneAllRecordsError$1,n),t(KintoneRestAPIError$1,n)})(error);var __extends$2=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(r[s]=i[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),__assign$4=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$4=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i])}return n},__assign$4.apply(this,arguments)},__awaiter$3=commonjsGlobal&&commonjsGlobal.__awaiter||function(n,e,t,r){function i(s){return s instanceof t?s:new t(function(l){l(s)})}return new(t||(t=Promise))(function(s,l){function f(m){try{p(r.next(m))}catch(y){l(y)}}function h(m){try{p(r.throw(m))}catch(y){l(y)}}function p(m){m.done?s(m.value):i(m.value).then(f,h)}p((r=r.apply(n,e||[])).next())})},__generator$3=commonjsGlobal&&commonjsGlobal.__generator||function(n,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,i,s,l;return l={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function f(p){return function(m){return h([p,m])}}function h(p){if(r)throw new TypeError("Generator is already executing.");for(;l&&(l=0,p[0]&&(t=0)),t;)try{if(r=1,i&&(s=p[0]&2?i.return:p[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,p[1])).done)return s;switch(i=0,s&&(p=[p[0]&2,s.value]),p[0]){case 0:case 1:s=p;break;case 4:return t.label++,{value:p[1],done:!1};case 5:t.label++,i=p[1],p=[0];continue;case 7:p=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(p[0]===6||p[0]===2)){t=0;continue}if(p[0]===3&&(!s||p[1]>s[0]&&p[1]<s[3])){t.label=p[1];break}if(p[0]===6&&t.label<s[1]){t.label=s[1],s=p;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(p);break}s[2]&&t.ops.pop(),t.trys.pop();continue}p=e.call(n,t)}catch(m){p=[6,m],i=0}finally{r=s=0}if(p[0]&5)throw p[1];return{value:p[0]?p[1]:void 0,done:!0}}},__rest$1=commonjsGlobal&&commonjsGlobal.__rest||function(n,e){var t={};for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&e.indexOf(r)<0&&(t[r]=n[r]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(n);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(n,r[i])&&(t[r[i]]=n[r[i]]);return t},__spreadArray=commonjsGlobal&&commonjsGlobal.__spreadArray||function(n,e,t){if(t||arguments.length===2)for(var r=0,i=e.length,s;r<i;r++)(s||!(r in e))&&(s||(s=Array.prototype.slice.call(e,0,r)),s[r]=e[r]);return n.concat(s||Array.prototype.slice.call(e))};Object.defineProperty(RecordClient$1,"__esModule",{value:!0});RecordClient$1.RecordClient=void 0;var error_1$1=error,BaseClient_1$2=BaseClient$1,ADD_RECORDS_LIMIT=100,UPDATE_RECORDS_LIMIT=100,DELETE_RECORDS_LIMIT=100,GET_RECORDS_LIMIT=500,RecordClient=function(n){__extends$2(e,n);function e(t,r,i){var s=n.call(this,t,i)||this;return s.bulkRequestClient=r,s.didWarnMaximumOffsetValue=!1,s}return e.prototype.getRecord=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record"});return this.client.get(r,t)},e.prototype.addRecord=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record"});return this.client.post(r,t)},e.prototype.updateRecord=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record"});return this.client.put(r,t)},e.prototype.upsertRecord=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,i,s,l,f,h;return __generator$3(this,function(p){switch(p.label){case 0:return r=t.app,i=t.updateKey,s=t.record,[4,this.getRecords({app:r,query:"".concat(i.field,' = "').concat(i.value,'"')})];case 1:return l=p.sent().records,l.length>0?l[0].$id.type!=="__ID__"?[3,3]:[4,this.updateRecord(t)]:[3,4];case 2:return f=p.sent().revision,[2,{id:l[0].$id.value,revision:f}];case 3:throw new Error("Missing `$id` in `getRecords` response. This error is likely caused by a bug in Kintone REST API Client. Please file an issue.");case 4:return[2,this.addRecord({app:r,record:Object.assign({},s,(h={},h[i.field]={value:i.value},h))})]}})})},e.prototype.getRecords=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,i;return __generator$3(this,function(s){switch(s.label){case 0:return r=this.buildPathWithGuestSpaceId({endpointName:"records"}),[4,this.client.get(r,t)];case 1:return i=s.sent(),this.warnMaximumOffsetValueIfNeeded(t.query),[2,i]}})})},e.prototype.warnMaximumOffsetValueIfNeeded=function(t){if(t){var r=/offset\s+(\d+)/i,i=t.match(r);!this.didWarnMaximumOffsetValue&&i&&Number(i[1])>1e4&&(this.didWarnMaximumOffsetValue=!0,console.warn("Warning: The maximum offset value will be limited to 10,000 in the future. Please use `createCursor()` and `getRecordsByCursor()` instead."))}},e.prototype.addRecords=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,i,s,l;return __generator$3(this,function(f){switch(f.label){case 0:return r=this.buildPathWithGuestSpaceId({endpointName:"records"}),[4,this.client.post(r,t)];case 1:return i=f.sent(),s=i.ids,l=i.revisions,[2,{ids:s,revisions:l,records:s.map(function(h,p){return{id:h,revision:l[p]}})}]}})})},e.prototype.updateRecords=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"records"});return this.client.put(r,t)},e.prototype.deleteRecords=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"records"});return this.client.delete(r,t)},e.prototype.createCursor=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"records/cursor"});return this.client.post(r,t)},e.prototype.getRecordsByCursor=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"records/cursor"});return this.client.get(r,t)},e.prototype.deleteCursor=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"records/cursor"});return this.client.delete(r,t)},e.prototype.getAllRecords=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,i,s,l,f,h,p;return __generator$3(this,function(m){return r=t.condition,i=t.orderBy,s=t.withCursor,l=s===void 0?!0:s,f=__rest$1(t,["condition","orderBy","withCursor"]),i?l?(h=r?"".concat(r," "):"",p="".concat(h).concat(i?"order by ".concat(i):""),[2,this.getAllRecordsWithCursor(__assign$4(__assign$4({},f),{query:p}))]):[2,this.getAllRecordsWithOffset(__assign$4(__assign$4({},f),{orderBy:i,condition:r}))]:[2,this.getAllRecordsWithId(__assign$4(__assign$4({},f),{condition:r}))]})})},e.prototype.getAllRecordsWithId=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,i,s,l,f,h,p,m,y,A;return __generator$3(this,function(x){switch(x.label){case 0:r=t.fields,i=t.condition,s=__rest$1(t,["fields","condition"]),l=r,l&&l.length>0&&l.indexOf("$id")===-1&&(l=__spreadArray(__spreadArray([],l,!0),["$id"],!1)),f=i?"(".concat(i,") and "):"",h=[],p="0",x.label=1;case 1:return m="".concat(f,"$id > ").concat(p," order by $id asc limit ").concat(GET_RECORDS_LIMIT),[4,this.getRecords(__assign$4(__assign$4({},s),{fields:l,query:m}))];case 2:if(y=x.sent(),h=h.concat(y.records),y.records.length<GET_RECORDS_LIMIT)return[3,3];if(A=y.records[y.records.length-1],A.$id.type==="__ID__")p=A.$id.value;else throw new Error("Missing `$id` in `getRecords` response. This error is likely caused by a bug in Kintone REST API Client. Please file an issue.");return[3,1];case 3:return[2,h]}})})},e.prototype.getAllRecordsWithOffset=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,i,s,l,f,h,p,m;return __generator$3(this,function(y){switch(y.label){case 0:r=t.condition,i=t.orderBy,s=__rest$1(t,["condition","orderBy"]),l=r?"".concat(r," "):"",f=[],h=0,y.label=1;case 1:return p="".concat(l).concat(i?"order by ".concat(i," "):"","limit ").concat(GET_RECORDS_LIMIT," offset ").concat(h),[4,this.getRecords(__assign$4(__assign$4({},s),{query:p}))];case 2:return m=y.sent(),f=f.concat(m.records),m.records.length<GET_RECORDS_LIMIT?[3,3]:(h+=GET_RECORDS_LIMIT,[3,1]);case 3:return[2,f]}})})},e.prototype.getAllRecordsWithCursor=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,i,s,l;return __generator$3(this,function(f){switch(f.label){case 0:return[4,this.createCursor(t)];case 1:r=f.sent().id,f.label=2;case 2:f.trys.push([2,6,,8]),i=[],f.label=3;case 3:return[4,this.getRecordsByCursor({id:r})];case 4:return s=f.sent(),i=i.concat(s.records),s.next?[3,3]:[3,5];case 5:return[2,i];case 6:return l=f.sent(),[4,this.deleteCursor({id:r})];case 7:throw f.sent(),l;case 8:return[2]}})})},e.prototype.addAllRecords=function(t){return __awaiter$3(this,void 0,void 0,function(){return __generator$3(this,function(r){if(!t.records.every(function(i){return!Array.isArray(i)&&i instanceof Object}))throw new Error("the `records` parameter must be an array of object.");return[2,this.addAllRecordsRecursive(t,t.records.length,[])]})})},e.prototype.addAllRecordsRecursive=function(t,r,i){return __awaiter$3(this,void 0,void 0,function(){var s,l,f,h,p,m;return __generator$3(this,function(y){switch(y.label){case 0:if(s=this.bulkRequestClient.REQUESTS_LENGTH_LIMIT*ADD_RECORDS_LIMIT,l=t.app,f=t.records,h=f.slice(0,s),h.length===0)return[2,{records:i}];y.label=1;case 1:return y.trys.push([1,3,,4]),[4,this.addAllRecordsWithBulkRequest({app:l,records:h})];case 2:return p=y.sent(),[3,4];case 3:throw m=y.sent(),new error_1$1.KintoneAllRecordsError({records:i},f,r,m,ADD_RECORDS_LIMIT);case 4:return[2,this.addAllRecordsRecursive({app:l,records:f.slice(s)},r,i.concat(p))]}})})},e.prototype.addAllRecordsWithBulkRequest=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,i,s;return __generator$3(this,function(l){switch(l.label){case 0:return r=this.separateArrayRecursive(ADD_RECORDS_LIMIT,[],t.records),i=r.map(function(f){return{method:"POST",endpointName:"records",payload:{app:t.app,records:f}}}),[4,this.bulkRequestClient.send({requests:i})];case 1:return s=l.sent().results,[2,s.map(function(f){var h=f.ids,p=f.revisions;return h.map(function(m,y){return{id:m,revision:p[y]}})}).reduce(function(f,h){return f.concat(h)},[])]}})})},e.prototype.updateAllRecords=function(t){return __awaiter$3(this,void 0,void 0,function(){return __generator$3(this,function(r){return[2,this.updateAllRecordsRecursive(t,t.records.length,[])]})})},e.prototype.updateAllRecordsRecursive=function(t,r,i){return __awaiter$3(this,void 0,void 0,function(){var s,l,f,h,p,m;return __generator$3(this,function(y){switch(y.label){case 0:if(s=this.bulkRequestClient.REQUESTS_LENGTH_LIMIT*UPDATE_RECORDS_LIMIT,l=t.app,f=t.records,h=f.slice(0,s),h.length===0)return[2,{records:i}];y.label=1;case 1:return y.trys.push([1,3,,4]),[4,this.updateAllRecordsWithBulkRequest({app:l,records:h})];case 2:return p=y.sent(),[3,4];case 3:throw m=y.sent(),new error_1$1.KintoneAllRecordsError({records:i},f,r,m,UPDATE_RECORDS_LIMIT);case 4:return[2,this.updateAllRecordsRecursive({app:l,records:f.slice(s)},r,i.concat(p))]}})})},e.prototype.updateAllRecordsWithBulkRequest=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,i,s;return __generator$3(this,function(l){switch(l.label){case 0:return r=this.separateArrayRecursive(UPDATE_RECORDS_LIMIT,[],t.records),i=r.map(function(f){return{method:"PUT",endpointName:"records",payload:{app:t.app,records:f}}}),[4,this.bulkRequestClient.send({requests:i})];case 1:return s=l.sent().results,[2,s.map(function(f){return f.records}).reduce(function(f,h){return f.concat(h)},[])]}})})},e.prototype.deleteAllRecords=function(t){return this.deleteAllRecordsRecursive(t,t.records.length)},e.prototype.deleteAllRecordsRecursive=function(t,r){return __awaiter$3(this,void 0,void 0,function(){var i,s,l,f,h;return __generator$3(this,function(p){switch(p.label){case 0:if(i=this.bulkRequestClient.REQUESTS_LENGTH_LIMIT*DELETE_RECORDS_LIMIT,s=t.app,l=t.records,f=l.slice(0,i),f.length===0)return[2,{}];p.label=1;case 1:return p.trys.push([1,3,,4]),[4,this.deleteAllRecordsWithBulkRequest({app:s,records:f})];case 2:return p.sent(),[3,4];case 3:throw h=p.sent(),new error_1$1.KintoneAllRecordsError({},l,r,h,DELETE_RECORDS_LIMIT);case 4:return[2,this.deleteAllRecordsRecursive({app:s,records:l.slice(i)},r)]}})})},e.prototype.deleteAllRecordsWithBulkRequest=function(t){return __awaiter$3(this,void 0,void 0,function(){var r,i;return __generator$3(this,function(s){switch(s.label){case 0:return r=this.separateArrayRecursive(DELETE_RECORDS_LIMIT,[],t.records),i=r.map(function(l){return{method:"DELETE",endpointName:"records",payload:{app:t.app,ids:l.map(function(f){return f.id}),revisions:l.map(function(f){return f.revision})}}}),[4,this.bulkRequestClient.send({requests:i})];case 1:return s.sent(),[2]}})})},e.prototype.separateArrayRecursive=function(t,r,i){var s=i.slice(0,t);return s.length===0?r:this.separateArrayRecursive(t,__spreadArray(__spreadArray([],r,!0),[s],!1),i.slice(t))},e.prototype.addRecordComment=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record/comment"});return this.client.post(r,t)},e.prototype.deleteRecordComment=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record/comment"});return this.client.delete(r,t)},e.prototype.getRecordComments=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record/comments"});return this.client.get(r,t)},e.prototype.updateRecordAssignees=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record/assignees"});return this.client.put(r,t)},e.prototype.updateRecordStatus=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"record/status"});return this.client.put(r,t)},e.prototype.updateRecordsStatus=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"records/status"});return this.client.put(r,t)},e}(BaseClient_1$2.BaseClient);RecordClient$1.RecordClient=RecordClient;var SpaceClient$1={},__extends$1=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(r[s]=i[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}();Object.defineProperty(SpaceClient$1,"__esModule",{value:!0});SpaceClient$1.SpaceClient=void 0;var BaseClient_1$1=BaseClient$1,SpaceClient=function(n){__extends$1(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return e.prototype.getSpace=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space"});return this.client.get(r,t)},e.prototype.deleteSpace=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space"});return this.client.delete(r,t)},e.prototype.updateSpaceBody=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space/body"});return this.client.put(r,t)},e.prototype.getSpaceMembers=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space/members"});return this.client.get(r,t)},e.prototype.updateSpaceMembers=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space/members"});return this.client.put(r,t)},e.prototype.updateThread=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space/thread"});return this.client.put(r,t)},e.prototype.addThreadComment=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space/thread/comment"});return this.client.post(r,t)},e.prototype.addGuests=function(t){var r=this.buildPath({endpointName:"guests"});return this.client.post(r,t)},e.prototype.deleteGuests=function(t){var r=this.buildPath({endpointName:"guests"});return this.client.delete(r,t)},e.prototype.updateSpaceGuests=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"space/guests"});return this.client.put(r,t)},e.prototype.addSpaceFromTemplate=function(t){var r=this.buildPath({endpointName:"template/space"});return this.client.post(r,t)},e}(BaseClient_1$1.BaseClient);SpaceClient$1.SpaceClient=SpaceClient;var FileClient$1={},browser=typeof self=="object"?self.FormData:window.FormData,__extends=commonjsGlobal&&commonjsGlobal.__extends||function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(r[s]=i[s])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),__awaiter$2=commonjsGlobal&&commonjsGlobal.__awaiter||function(n,e,t,r){function i(s){return s instanceof t?s:new t(function(l){l(s)})}return new(t||(t=Promise))(function(s,l){function f(m){try{p(r.next(m))}catch(y){l(y)}}function h(m){try{p(r.throw(m))}catch(y){l(y)}}function p(m){m.done?s(m.value):i(m.value).then(f,h)}p((r=r.apply(n,e||[])).next())})},__generator$2=commonjsGlobal&&commonjsGlobal.__generator||function(n,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,i,s,l;return l={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function f(p){return function(m){return h([p,m])}}function h(p){if(r)throw new TypeError("Generator is already executing.");for(;l&&(l=0,p[0]&&(t=0)),t;)try{if(r=1,i&&(s=p[0]&2?i.return:p[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,p[1])).done)return s;switch(i=0,s&&(p=[p[0]&2,s.value]),p[0]){case 0:case 1:s=p;break;case 4:return t.label++,{value:p[1],done:!1};case 5:t.label++,i=p[1],p=[0];continue;case 7:p=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(p[0]===6||p[0]===2)){t=0;continue}if(p[0]===3&&(!s||p[1]>s[0]&&p[1]<s[3])){t.label=p[1];break}if(p[0]===6&&t.label<s[1]){t.label=s[1],s=p;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(p);break}s[2]&&t.ops.pop(),t.trys.pop();continue}p=e.call(n,t)}catch(m){p=[6,m],i=0}finally{r=s=0}if(p[0]&5)throw p[1];return{value:p[0]?p[1]:void 0,done:!0}}},__importDefault$2=commonjsGlobal&&commonjsGlobal.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(FileClient$1,"__esModule",{value:!0});FileClient$1.FileClient=void 0;var form_data_1$1=__importDefault$2(browser),platform_1$2=platform$2,UnsupportedPlatformError_1$1=UnsupportedPlatformError$1,BaseClient_1=BaseClient$1,FileClient=function(n){__extends(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return e.prototype.uploadFile=function(t){return __awaiter$2(this,void 0,void 0,function(){var r,i,s,l,m,f,h,p,m,y;return __generator$2(this,function(A){switch(A.label){case 0:if(r=this.buildPathWithGuestSpaceId({endpointName:"file"}),i=new form_data_1$1.default,!("path"in t.file))return[3,5];A.label=1;case 1:return A.trys.push([1,3,,4]),[4,platform_1$2.platformDeps.readFileFromPath(t.file.path)];case 2:return s=A.sent(),l=s.name,m=s.data,i.append("file",m,l),[3,4];case 3:throw f=A.sent(),f instanceof UnsupportedPlatformError_1$1.UnsupportedPlatformError?new Error("uploadFile doesn't allow to accept a file path in ".concat(f.platform," environment.")):f;case 4:return[3,6];case 5:h=t.file,p=h.name,m=h.data,y=platform_1$2.platformDeps.buildFormDataValue(m,p),i.append("file",y,p),A.label=6;case 6:return[2,this.client.postData(r,i)]}})})},e.prototype.downloadFile=function(t){var r=this.buildPathWithGuestSpaceId({endpointName:"file"});return this.client.getData(r,t)},e}(BaseClient_1.BaseClient);FileClient$1.FileClient=FileClient;var http={},AxiosClient$1={};function bind$2(n,e){return function(){return n.apply(e,arguments)}}const{toString}=Object.prototype,{getPrototypeOf}=Object,kindOf=(n=>e=>{const t=toString.call(e);return n[t]||(n[t]=t.slice(8,-1).toLowerCase())})(Object.create(null)),kindOfTest=n=>(n=n.toLowerCase(),e=>kindOf(e)===n),typeOfTest=n=>e=>typeof e===n,{isArray:isArray$4}=Array,isUndefined=typeOfTest("undefined");function isBuffer$1(n){return n!==null&&!isUndefined(n)&&n.constructor!==null&&!isUndefined(n.constructor)&&isFunction(n.constructor.isBuffer)&&n.constructor.isBuffer(n)}const isArrayBuffer=kindOfTest("ArrayBuffer");function isArrayBufferView(n){let e;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?e=ArrayBuffer.isView(n):e=n&&n.buffer&&isArrayBuffer(n.buffer),e}const isString$1=typeOfTest("string"),isFunction=typeOfTest("function"),isNumber$1=typeOfTest("number"),isObject=n=>n!==null&&typeof n=="object",isBoolean$1=n=>n===!0||n===!1,isPlainObject=n=>{if(kindOf(n)!=="object")return!1;const e=getPrototypeOf(n);return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Symbol.toStringTag in n)&&!(Symbol.iterator in n)},isDate$1=kindOfTest("Date"),isFile=kindOfTest("File"),isBlob=kindOfTest("Blob"),isFileList=kindOfTest("FileList"),isStream=n=>isObject(n)&&isFunction(n.pipe),isFormData=n=>{let e;return n&&(typeof FormData=="function"&&n instanceof FormData||isFunction(n.append)&&((e=kindOf(n))==="formdata"||e==="object"&&isFunction(n.toString)&&n.toString()==="[object FormData]"))},isURLSearchParams=kindOfTest("URLSearchParams"),[isReadableStream,isRequest,isResponse,isHeaders]=["ReadableStream","Request","Response","Headers"].map(kindOfTest),trim=n=>n.trim?n.trim():n.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function forEach(n,e,{allOwnKeys:t=!1}={}){if(n===null||typeof n>"u")return;let r,i;if(typeof n!="object"&&(n=[n]),isArray$4(n))for(r=0,i=n.length;r<i;r++)e.call(null,n[r],r,n);else{const s=t?Object.getOwnPropertyNames(n):Object.keys(n),l=s.length;let f;for(r=0;r<l;r++)f=s[r],e.call(null,n[f],f,n)}}function findKey(n,e){e=e.toLowerCase();const t=Object.keys(n);let r=t.length,i;for(;r-- >0;)if(i=t[r],e===i.toLowerCase())return i;return null}const _global=(()=>typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:commonjsGlobal)(),isContextDefined=n=>!isUndefined(n)&&n!==_global;function merge$1(){const{caseless:n}=isContextDefined(this)&&this||{},e={},t=(r,i)=>{const s=n&&findKey(e,i)||i;isPlainObject(e[s])&&isPlainObject(r)?e[s]=merge$1(e[s],r):isPlainObject(r)?e[s]=merge$1({},r):isArray$4(r)?e[s]=r.slice():e[s]=r};for(let r=0,i=arguments.length;r<i;r++)arguments[r]&&forEach(arguments[r],t);return e}const extend=(n,e,t,{allOwnKeys:r}={})=>(forEach(e,(i,s)=>{t&&isFunction(i)?n[s]=bind$2(i,t):n[s]=i},{allOwnKeys:r}),n),stripBOM=n=>(n.charCodeAt(0)===65279&&(n=n.slice(1)),n),inherits=(n,e,t,r)=>{n.prototype=Object.create(e.prototype,r),n.prototype.constructor=n,Object.defineProperty(n,"super",{value:e.prototype}),t&&Object.assign(n.prototype,t)},toFlatObject=(n,e,t,r)=>{let i,s,l;const f={};if(e=e||{},n==null)return e;do{for(i=Object.getOwnPropertyNames(n),s=i.length;s-- >0;)l=i[s],(!r||r(l,n,e))&&!f[l]&&(e[l]=n[l],f[l]=!0);n=t!==!1&&getPrototypeOf(n)}while(n&&(!t||t(n,e))&&n!==Object.prototype);return e},endsWith=(n,e,t)=>{n=String(n),(t===void 0||t>n.length)&&(t=n.length),t-=e.length;const r=n.indexOf(e,t);return r!==-1&&r===t},toArray=n=>{if(!n)return null;if(isArray$4(n))return n;let e=n.length;if(!isNumber$1(e))return null;const t=new Array(e);for(;e-- >0;)t[e]=n[e];return t},isTypedArray=(n=>e=>n&&e instanceof n)(typeof Uint8Array<"u"&&getPrototypeOf(Uint8Array)),forEachEntry=(n,e)=>{const r=(n&&n[Symbol.iterator]).call(n);let i;for(;(i=r.next())&&!i.done;){const s=i.value;e.call(n,s[0],s[1])}},matchAll=(n,e)=>{let t;const r=[];for(;(t=n.exec(e))!==null;)r.push(t);return r},isHTMLForm=kindOfTest("HTMLFormElement"),toCamelCase=n=>n.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(t,r,i){return r.toUpperCase()+i}),hasOwnProperty=(({hasOwnProperty:n})=>(e,t)=>n.call(e,t))(Object.prototype),isRegExp$2=kindOfTest("RegExp"),reduceDescriptors=(n,e)=>{const t=Object.getOwnPropertyDescriptors(n),r={};forEach(t,(i,s)=>{let l;(l=e(i,s,n))!==!1&&(r[s]=l||i)}),Object.defineProperties(n,r)},freezeMethods=n=>{reduceDescriptors(n,(e,t)=>{if(isFunction(n)&&["arguments","caller","callee"].indexOf(t)!==-1)return!1;const r=n[t];if(isFunction(r)){if(e.enumerable=!1,"writable"in e){e.writable=!1;return}e.set||(e.set=()=>{throw Error("Can not rewrite read-only method '"+t+"'")})}})},toObjectSet=(n,e)=>{const t={},r=i=>{i.forEach(s=>{t[s]=!0})};return isArray$4(n)?r(n):r(String(n).split(e)),t},noop$1=()=>{},toFiniteNumber=(n,e)=>n!=null&&Number.isFinite(n=+n)?n:e,ALPHA="abcdefghijklmnopqrstuvwxyz",DIGIT="0123456789",ALPHABET={DIGIT,ALPHA,ALPHA_DIGIT:ALPHA+ALPHA.toUpperCase()+DIGIT},generateString=(n=16,e=ALPHABET.ALPHA_DIGIT)=>{let t="";const{length:r}=e;for(;n--;)t+=e[Math.random()*r|0];return t};function isSpecCompliantForm(n){return!!(n&&isFunction(n.append)&&n[Symbol.toStringTag]==="FormData"&&n[Symbol.iterator])}const toJSONObject=n=>{const e=new Array(10),t=(r,i)=>{if(isObject(r)){if(e.indexOf(r)>=0)return;if(!("toJSON"in r)){e[i]=r;const s=isArray$4(r)?[]:{};return forEach(r,(l,f)=>{const h=t(l,i+1);!isUndefined(h)&&(s[f]=h)}),e[i]=void 0,s}}return r};return t(n,0)},isAsyncFn=kindOfTest("AsyncFunction"),isThenable=n=>n&&(isObject(n)||isFunction(n))&&isFunction(n.then)&&isFunction(n.catch);var utils$1$1={isArray:isArray$4,isArrayBuffer,isBuffer:isBuffer$1,isFormData,isArrayBufferView,isString:isString$1,isNumber:isNumber$1,isBoolean:isBoolean$1,isObject,isPlainObject,isReadableStream,isRequest,isResponse,isHeaders,isUndefined,isDate:isDate$1,isFile,isBlob,isRegExp:isRegExp$2,isFunction,isStream,isURLSearchParams,isTypedArray,isFileList,forEach,merge:merge$1,extend,trim,stripBOM,inherits,toFlatObject,kindOf,kindOfTest,endsWith,toArray,forEachEntry,matchAll,isHTMLForm,hasOwnProperty,hasOwnProp:hasOwnProperty,reduceDescriptors,freezeMethods,toObjectSet,toCamelCase,noop:noop$1,toFiniteNumber,findKey,global:_global,isContextDefined,ALPHABET,generateString,isSpecCompliantForm,toJSONObject,isAsyncFn,isThenable};function AxiosError(n,e,t,r,i){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack,this.message=n,this.name="AxiosError",e&&(this.code=e),t&&(this.config=t),r&&(this.request=r),i&&(this.response=i)}utils$1$1.inherits(AxiosError,Error,{toJSON:function n(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:utils$1$1.toJSONObject(this.config),code:this.code,status:this.response&&this.response.status?this.response.status:null}}});const prototype$1=AxiosError.prototype,descriptors={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach(n=>{descriptors[n]={value:n}});Object.defineProperties(AxiosError,descriptors);Object.defineProperty(prototype$1,"isAxiosError",{value:!0});AxiosError.from=(n,e,t,r,i,s)=>{const l=Object.create(prototype$1);return utils$1$1.toFlatObject(n,l,function(h){return h!==Error.prototype},f=>f!=="isAxiosError"),AxiosError.call(l,n.message,e,t,r,i),l.cause=n,l.name=n.name,s&&Object.assign(l,s),l};var httpAdapter=null;function isVisitable(n){return utils$1$1.isPlainObject(n)||utils$1$1.isArray(n)}function removeBrackets(n){return utils$1$1.endsWith(n,"[]")?n.slice(0,-2):n}function renderKey(n,e,t){return n?n.concat(e).map(function(i,s){return i=removeBrackets(i),!t&&s?"["+i+"]":i}).join(t?".":""):e}function isFlatArray(n){return utils$1$1.isArray(n)&&!n.some(isVisitable)}const predicates=utils$1$1.toFlatObject(utils$1$1,{},null,function n(e){return/^is[A-Z]/.test(e)});function toFormData(n,e,t){if(!utils$1$1.isObject(n))throw new TypeError("target must be an object");e=e||new FormData,t=utils$1$1.toFlatObject(t,{metaTokens:!0,dots:!1,indexes:!1},!1,function(C,H){return!utils$1$1.isUndefined(H[C])});const r=t.metaTokens,i=t.visitor||m,s=t.dots,l=t.indexes,h=(t.Blob||typeof Blob<"u"&&Blob)&&utils$1$1.isSpecCompliantForm(e);if(!utils$1$1.isFunction(i))throw new TypeError("visitor must be a function");function p(S){if(S===null)return"";if(utils$1$1.isDate(S))return S.toISOString();if(!h&&utils$1$1.isBlob(S))throw new AxiosError("Blob is not supported. Use a Buffer instead.");return utils$1$1.isArrayBuffer(S)||utils$1$1.isTypedArray(S)?h&&typeof Blob=="function"?new Blob([S]):Buffer.from(S):S}function m(S,C,H){let I=S;if(S&&!H&&typeof S=="object"){if(utils$1$1.endsWith(C,"{}"))C=r?C:C.slice(0,-2),S=JSON.stringify(S);else if(utils$1$1.isArray(S)&&isFlatArray(S)||(utils$1$1.isFileList(S)||utils$1$1.endsWith(C,"[]"))&&(I=utils$1$1.toArray(S)))return C=removeBrackets(C),I.forEach(function(B,Q){!(utils$1$1.isUndefined(B)||B===null)&&e.append(l===!0?renderKey([C],Q,s):l===null?C:C+"[]",p(B))}),!1}return isVisitable(S)?!0:(e.append(renderKey(H,C,s),p(S)),!1)}const y=[],A=Object.assign(predicates,{defaultVisitor:m,convertValue:p,isVisitable});function x(S,C){if(!utils$1$1.isUndefined(S)){if(y.indexOf(S)!==-1)throw Error("Circular reference detected in "+C.join("."));y.push(S),utils$1$1.forEach(S,function(I,z){(!(utils$1$1.isUndefined(I)||I===null)&&i.call(e,I,utils$1$1.isString(z)?z.trim():z,C,A))===!0&&x(I,C?C.concat(z):[z])}),y.pop()}}if(!utils$1$1.isObject(n))throw new TypeError("data must be an object");return x(n),e}function encode$1(n){const e={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(n).replace(/[!'()~]|%20|%00/g,function(r){return e[r]})}function AxiosURLSearchParams(n,e){this._pairs=[],n&&toFormData(n,this,e)}const prototype=AxiosURLSearchParams.prototype;prototype.append=function n(e,t){this._pairs.push([e,t])};prototype.toString=function n(e){const t=e?function(r){return e.call(this,r,encode$1)}:encode$1;return this._pairs.map(function(i){return t(i[0])+"="+t(i[1])},"").join("&")};function encode$2(n){return encodeURIComponent(n).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function buildURL(n,e,t){if(!e)return n;const r=t&&t.encode||encode$2,i=t&&t.serialize;let s;if(i?s=i(e,t):s=utils$1$1.isURLSearchParams(e)?e.toString():new AxiosURLSearchParams(e,t).toString(r),s){const l=n.indexOf("#");l!==-1&&(n=n.slice(0,l)),n+=(n.indexOf("?")===-1?"?":"&")+s}return n}class InterceptorManager{constructor(){this.handlers=[]}use(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:r?r.synchronous:!1,runWhen:r?r.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){utils$1$1.forEach(this.handlers,function(r){r!==null&&e(r)})}}var InterceptorManager$1=InterceptorManager,transitionalDefaults={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},URLSearchParams$1=typeof URLSearchParams<"u"?URLSearchParams:AxiosURLSearchParams,FormData$1=typeof FormData<"u"?FormData:null,Blob$1=typeof Blob<"u"?Blob:null,platform$1={isBrowser:!0,classes:{URLSearchParams:URLSearchParams$1,FormData:FormData$1,Blob:Blob$1},protocols:["http","https","file","blob","url","data"]};const hasBrowserEnv=typeof window<"u"&&typeof document<"u",hasStandardBrowserEnv=(n=>hasBrowserEnv&&["ReactNative","NativeScript","NS"].indexOf(n)<0)(typeof navigator<"u"&&navigator.product),hasStandardBrowserWebWorkerEnv=(()=>typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function")(),origin=hasBrowserEnv&&window.location.href||"http://localhost";var utils$3=Object.freeze({__proto__:null,hasBrowserEnv,hasStandardBrowserWebWorkerEnv,hasStandardBrowserEnv,origin}),platform={...utils$3,...platform$1};function toURLEncodedForm(n,e){return toFormData(n,new platform.classes.URLSearchParams,Object.assign({visitor:function(t,r,i,s){return platform.isNode&&utils$1$1.isBuffer(t)?(this.append(r,t.toString("base64")),!1):s.defaultVisitor.apply(this,arguments)}},e))}function parsePropPath(n){return utils$1$1.matchAll(/\w+|\[(\w*)]/g,n).map(e=>e[0]==="[]"?"":e[1]||e[0])}function arrayToObject$1(n){const e={},t=Object.keys(n);let r;const i=t.length;let s;for(r=0;r<i;r++)s=t[r],e[s]=n[s];return e}function formDataToJSON(n){function e(t,r,i,s){let l=t[s++];if(l==="__proto__")return!0;const f=Number.isFinite(+l),h=s>=t.length;return l=!l&&utils$1$1.isArray(i)?i.length:l,h?(utils$1$1.hasOwnProp(i,l)?i[l]=[i[l],r]:i[l]=r,!f):((!i[l]||!utils$1$1.isObject(i[l]))&&(i[l]=[]),e(t,r,i[l],s)&&utils$1$1.isArray(i[l])&&(i[l]=arrayToObject$1(i[l])),!f)}if(utils$1$1.isFormData(n)&&utils$1$1.isFunction(n.entries)){const t={};return utils$1$1.forEachEntry(n,(r,i)=>{e(parsePropPath(r),i,t,0)}),t}return null}function stringifySafely(n,e,t){if(utils$1$1.isString(n))try{return(e||JSON.parse)(n),utils$1$1.trim(n)}catch(r){if(r.name!=="SyntaxError")throw r}return(t||JSON.stringify)(n)}const defaults$2={transitional:transitionalDefaults,adapter:["xhr","http","fetch"],transformRequest:[function n(e,t){const r=t.getContentType()||"",i=r.indexOf("application/json")>-1,s=utils$1$1.isObject(e);if(s&&utils$1$1.isHTMLForm(e)&&(e=new FormData(e)),utils$1$1.isFormData(e))return i?JSON.stringify(formDataToJSON(e)):e;if(utils$1$1.isArrayBuffer(e)||utils$1$1.isBuffer(e)||utils$1$1.isStream(e)||utils$1$1.isFile(e)||utils$1$1.isBlob(e)||utils$1$1.isReadableStream(e))return e;if(utils$1$1.isArrayBufferView(e))return e.buffer;if(utils$1$1.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let f;if(s){if(r.indexOf("application/x-www-form-urlencoded")>-1)return toURLEncodedForm(e,this.formSerializer).toString();if((f=utils$1$1.isFileList(e))||r.indexOf("multipart/form-data")>-1){const h=this.env&&this.env.FormData;return toFormData(f?{"files[]":e}:e,h&&new h,this.formSerializer)}}return s||i?(t.setContentType("application/json",!1),stringifySafely(e)):e}],transformResponse:[function n(e){const t=this.transitional||defaults$2.transitional,r=t&&t.forcedJSONParsing,i=this.responseType==="json";if(utils$1$1.isResponse(e)||utils$1$1.isReadableStream(e))return e;if(e&&utils$1$1.isString(e)&&(r&&!this.responseType||i)){const l=!(t&&t.silentJSONParsing)&&i;try{return JSON.parse(e)}catch(f){if(l)throw f.name==="SyntaxError"?AxiosError.from(f,AxiosError.ERR_BAD_RESPONSE,this,null,this.response):f}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:platform.classes.FormData,Blob:platform.classes.Blob},validateStatus:function n(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};utils$1$1.forEach(["delete","get","head","post","put","patch"],n=>{defaults$2.headers[n]={}});var defaults$1$1=defaults$2;const ignoreDuplicateOf=utils$1$1.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]);var parseHeaders=n=>{const e={};let t,r,i;return n&&n.split(`
`).forEach(function(l){i=l.indexOf(":"),t=l.substring(0,i).trim().toLowerCase(),r=l.substring(i+1).trim(),!(!t||e[t]&&ignoreDuplicateOf[t])&&(t==="set-cookie"?e[t]?e[t].push(r):e[t]=[r]:e[t]=e[t]?e[t]+", "+r:r)}),e};const $internals=Symbol("internals");function normalizeHeader(n){return n&&String(n).trim().toLowerCase()}function normalizeValue(n){return n===!1||n==null?n:utils$1$1.isArray(n)?n.map(normalizeValue):String(n)}function parseTokens(n){const e=Object.create(null),t=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=t.exec(n);)e[r[1]]=r[2];return e}const isValidHeaderName=n=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(n.trim());function matchHeaderValue(n,e,t,r,i){if(utils$1$1.isFunction(r))return r.call(this,e,t);if(i&&(e=t),!!utils$1$1.isString(e)){if(utils$1$1.isString(r))return e.indexOf(r)!==-1;if(utils$1$1.isRegExp(r))return r.test(e)}}function formatHeader(n){return n.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(e,t,r)=>t.toUpperCase()+r)}function buildAccessors(n,e){const t=utils$1$1.toCamelCase(" "+e);["get","set","has"].forEach(r=>{Object.defineProperty(n,r+t,{value:function(i,s,l){return this[r].call(this,e,i,s,l)},configurable:!0})})}class AxiosHeaders{constructor(e){e&&this.set(e)}set(e,t,r){const i=this;function s(f,h,p){const m=normalizeHeader(h);if(!m)throw new Error("header name must be a non-empty string");const y=utils$1$1.findKey(i,m);(!y||i[y]===void 0||p===!0||p===void 0&&i[y]!==!1)&&(i[y||h]=normalizeValue(f))}const l=(f,h)=>utils$1$1.forEach(f,(p,m)=>s(p,m,h));if(utils$1$1.isPlainObject(e)||e instanceof this.constructor)l(e,t);else if(utils$1$1.isString(e)&&(e=e.trim())&&!isValidHeaderName(e))l(parseHeaders(e),t);else if(utils$1$1.isHeaders(e))for(const[f,h]of e.entries())s(h,f,r);else e!=null&&s(t,e,r);return this}get(e,t){if(e=normalizeHeader(e),e){const r=utils$1$1.findKey(this,e);if(r){const i=this[r];if(!t)return i;if(t===!0)return parseTokens(i);if(utils$1$1.isFunction(t))return t.call(this,i,r);if(utils$1$1.isRegExp(t))return t.exec(i);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=normalizeHeader(e),e){const r=utils$1$1.findKey(this,e);return!!(r&&this[r]!==void 0&&(!t||matchHeaderValue(this,this[r],r,t)))}return!1}delete(e,t){const r=this;let i=!1;function s(l){if(l=normalizeHeader(l),l){const f=utils$1$1.findKey(r,l);f&&(!t||matchHeaderValue(r,r[f],f,t))&&(delete r[f],i=!0)}}return utils$1$1.isArray(e)?e.forEach(s):s(e),i}clear(e){const t=Object.keys(this);let r=t.length,i=!1;for(;r--;){const s=t[r];(!e||matchHeaderValue(this,this[s],s,e,!0))&&(delete this[s],i=!0)}return i}normalize(e){const t=this,r={};return utils$1$1.forEach(this,(i,s)=>{const l=utils$1$1.findKey(r,s);if(l){t[l]=normalizeValue(i),delete t[s];return}const f=e?formatHeader(s):String(s).trim();f!==s&&delete t[s],t[f]=normalizeValue(i),r[f]=!0}),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return utils$1$1.forEach(this,(r,i)=>{r!=null&&r!==!1&&(t[i]=e&&utils$1$1.isArray(r)?r.join(", "):r)}),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([e,t])=>e+": "+t).join(`
`)}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const r=new this(e);return t.forEach(i=>r.set(i)),r}static accessor(e){const r=(this[$internals]=this[$internals]={accessors:{}}).accessors,i=this.prototype;function s(l){const f=normalizeHeader(l);r[f]||(buildAccessors(i,l),r[f]=!0)}return utils$1$1.isArray(e)?e.forEach(s):s(e),this}}AxiosHeaders.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);utils$1$1.reduceDescriptors(AxiosHeaders.prototype,({value:n},e)=>{let t=e[0].toUpperCase()+e.slice(1);return{get:()=>n,set(r){this[t]=r}}});utils$1$1.freezeMethods(AxiosHeaders);var AxiosHeaders$1=AxiosHeaders;function transformData(n,e){const t=this||defaults$1$1,r=e||t,i=AxiosHeaders$1.from(r.headers);let s=r.data;return utils$1$1.forEach(n,function(f){s=f.call(t,s,i.normalize(),e?e.status:void 0)}),i.normalize(),s}function isCancel(n){return!!(n&&n.__CANCEL__)}function CanceledError(n,e,t){AxiosError.call(this,n??"canceled",AxiosError.ERR_CANCELED,e,t),this.name="CanceledError"}utils$1$1.inherits(CanceledError,AxiosError,{__CANCEL__:!0});function settle(n,e,t){const r=t.config.validateStatus;!t.status||!r||r(t.status)?n(t):e(new AxiosError("Request failed with status code "+t.status,[AxiosError.ERR_BAD_REQUEST,AxiosError.ERR_BAD_RESPONSE][Math.floor(t.status/100)-4],t.config,t.request,t))}function parseProtocol(n){const e=/^([-+\w]{1,25})(:?\/\/|:)/.exec(n);return e&&e[1]||""}function speedometer(n,e){n=n||10;const t=new Array(n),r=new Array(n);let i=0,s=0,l;return e=e!==void 0?e:1e3,function(h){const p=Date.now(),m=r[s];l||(l=p),t[i]=h,r[i]=p;let y=s,A=0;for(;y!==i;)A+=t[y++],y=y%n;if(i=(i+1)%n,i===s&&(s=(s+1)%n),p-l<e)return;const x=m&&p-m;return x?Math.round(A*1e3/x):void 0}}function throttle(n,e){let t=0;const r=1e3/e;let i=null;return function(){const l=this===!0,f=Date.now();if(l||f-t>r)return i&&(clearTimeout(i),i=null),t=f,n.apply(null,arguments);i||(i=setTimeout(()=>(i=null,t=Date.now(),n.apply(null,arguments)),r-(f-t)))}}var progressEventReducer=(n,e,t=3)=>{let r=0;const i=speedometer(50,250);return throttle(s=>{const l=s.loaded,f=s.lengthComputable?s.total:void 0,h=l-r,p=i(h),m=l<=f;r=l;const y={loaded:l,total:f,progress:f?l/f:void 0,bytes:h,rate:p||void 0,estimated:p&&f&&m?(f-l)/p:void 0,event:s,lengthComputable:f!=null};y[e?"download":"upload"]=!0,n(y)},t)},isURLSameOrigin=platform.hasStandardBrowserEnv?function n(){const e=/(msie|trident)/i.test(navigator.userAgent),t=document.createElement("a");let r;function i(s){let l=s;return e&&(t.setAttribute("href",l),l=t.href),t.setAttribute("href",l),{href:t.href,protocol:t.protocol?t.protocol.replace(/:$/,""):"",host:t.host,search:t.search?t.search.replace(/^\?/,""):"",hash:t.hash?t.hash.replace(/^#/,""):"",hostname:t.hostname,port:t.port,pathname:t.pathname.charAt(0)==="/"?t.pathname:"/"+t.pathname}}return r=i(window.location.href),function(l){const f=utils$1$1.isString(l)?i(l):l;return f.protocol===r.protocol&&f.host===r.host}}():function n(){return function(){return!0}}(),cookies=platform.hasStandardBrowserEnv?{write(n,e,t,r,i,s){const l=[n+"="+encodeURIComponent(e)];utils$1$1.isNumber(t)&&l.push("expires="+new Date(t).toGMTString()),utils$1$1.isString(r)&&l.push("path="+r),utils$1$1.isString(i)&&l.push("domain="+i),s===!0&&l.push("secure"),document.cookie=l.join("; ")},read(n){const e=document.cookie.match(new RegExp("(^|;\\s*)("+n+")=([^;]*)"));return e?decodeURIComponent(e[3]):null},remove(n){this.write(n,"",Date.now()-864e5)}}:{write(){},read(){return null},remove(){}};function isAbsoluteURL(n){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(n)}function combineURLs(n,e){return e?n.replace(/\/?\/$/,"")+"/"+e.replace(/^\/+/,""):n}function buildFullPath(n,e){return n&&!isAbsoluteURL(e)?combineURLs(n,e):e}const headersToObject=n=>n instanceof AxiosHeaders$1?{...n}:n;function mergeConfig(n,e){e=e||{};const t={};function r(p,m,y){return utils$1$1.isPlainObject(p)&&utils$1$1.isPlainObject(m)?utils$1$1.merge.call({caseless:y},p,m):utils$1$1.isPlainObject(m)?utils$1$1.merge({},m):utils$1$1.isArray(m)?m.slice():m}function i(p,m,y){if(utils$1$1.isUndefined(m)){if(!utils$1$1.isUndefined(p))return r(void 0,p,y)}else return r(p,m,y)}function s(p,m){if(!utils$1$1.isUndefined(m))return r(void 0,m)}function l(p,m){if(utils$1$1.isUndefined(m)){if(!utils$1$1.isUndefined(p))return r(void 0,p)}else return r(void 0,m)}function f(p,m,y){if(y in e)return r(p,m);if(y in n)return r(void 0,p)}const h={url:s,method:s,data:s,baseURL:l,transformRequest:l,transformResponse:l,paramsSerializer:l,timeout:l,timeoutMessage:l,withCredentials:l,withXSRFToken:l,adapter:l,responseType:l,xsrfCookieName:l,xsrfHeaderName:l,onUploadProgress:l,onDownloadProgress:l,decompress:l,maxContentLength:l,maxBodyLength:l,beforeRedirect:l,transport:l,httpAgent:l,httpsAgent:l,cancelToken:l,socketPath:l,responseEncoding:l,validateStatus:f,headers:(p,m)=>i(headersToObject(p),headersToObject(m),!0)};return utils$1$1.forEach(Object.keys(Object.assign({},n,e)),function(m){const y=h[m]||i,A=y(n[m],e[m],m);utils$1$1.isUndefined(A)&&y!==f||(t[m]=A)}),t}var resolveConfig=n=>{const e=mergeConfig({},n);let{data:t,withXSRFToken:r,xsrfHeaderName:i,xsrfCookieName:s,headers:l,auth:f}=e;e.headers=l=AxiosHeaders$1.from(l),e.url=buildURL(buildFullPath(e.baseURL,e.url),n.params,n.paramsSerializer),f&&l.set("Authorization","Basic "+btoa((f.username||"")+":"+(f.password?unescape(encodeURIComponent(f.password)):"")));let h;if(utils$1$1.isFormData(t)){if(platform.hasStandardBrowserEnv||platform.hasStandardBrowserWebWorkerEnv)l.setContentType(void 0);else if((h=l.getContentType())!==!1){const[p,...m]=h?h.split(";").map(y=>y.trim()).filter(Boolean):[];l.setContentType([p||"multipart/form-data",...m].join("; "))}}if(platform.hasStandardBrowserEnv&&(r&&utils$1$1.isFunction(r)&&(r=r(e)),r||r!==!1&&isURLSameOrigin(e.url))){const p=i&&s&&cookies.read(s);p&&l.set(i,p)}return e};const isXHRAdapterSupported=typeof XMLHttpRequest<"u";var xhrAdapter=isXHRAdapterSupported&&function(n){return new Promise(function(t,r){const i=resolveConfig(n);let s=i.data;const l=AxiosHeaders$1.from(i.headers).normalize();let{responseType:f}=i,h;function p(){i.cancelToken&&i.cancelToken.unsubscribe(h),i.signal&&i.signal.removeEventListener("abort",h)}let m=new XMLHttpRequest;m.open(i.method.toUpperCase(),i.url,!0),m.timeout=i.timeout;function y(){if(!m)return;const x=AxiosHeaders$1.from("getAllResponseHeaders"in m&&m.getAllResponseHeaders()),C={data:!f||f==="text"||f==="json"?m.responseText:m.response,status:m.status,statusText:m.statusText,headers:x,config:n,request:m};settle(function(I){t(I),p()},function(I){r(I),p()},C),m=null}"onloadend"in m?m.onloadend=y:m.onreadystatechange=function(){!m||m.readyState!==4||m.status===0&&!(m.responseURL&&m.responseURL.indexOf("file:")===0)||setTimeout(y)},m.onabort=function(){m&&(r(new AxiosError("Request aborted",AxiosError.ECONNABORTED,i,m)),m=null)},m.onerror=function(){r(new AxiosError("Network Error",AxiosError.ERR_NETWORK,i,m)),m=null},m.ontimeout=function(){let S=i.timeout?"timeout of "+i.timeout+"ms exceeded":"timeout exceeded";const C=i.transitional||transitionalDefaults;i.timeoutErrorMessage&&(S=i.timeoutErrorMessage),r(new AxiosError(S,C.clarifyTimeoutError?AxiosError.ETIMEDOUT:AxiosError.ECONNABORTED,i,m)),m=null},s===void 0&&l.setContentType(null),"setRequestHeader"in m&&utils$1$1.forEach(l.toJSON(),function(S,C){m.setRequestHeader(C,S)}),utils$1$1.isUndefined(i.withCredentials)||(m.withCredentials=!!i.withCredentials),f&&f!=="json"&&(m.responseType=i.responseType),typeof i.onDownloadProgress=="function"&&m.addEventListener("progress",progressEventReducer(i.onDownloadProgress,!0)),typeof i.onUploadProgress=="function"&&m.upload&&m.upload.addEventListener("progress",progressEventReducer(i.onUploadProgress)),(i.cancelToken||i.signal)&&(h=x=>{m&&(r(!x||x.type?new CanceledError(null,n,m):x),m.abort(),m=null)},i.cancelToken&&i.cancelToken.subscribe(h),i.signal&&(i.signal.aborted?h():i.signal.addEventListener("abort",h)));const A=parseProtocol(i.url);if(A&&platform.protocols.indexOf(A)===-1){r(new AxiosError("Unsupported protocol "+A+":",AxiosError.ERR_BAD_REQUEST,n));return}m.send(s||null)})};const composeSignals=(n,e)=>{let t=new AbortController,r;const i=function(h){if(!r){r=!0,l();const p=h instanceof Error?h:this.reason;t.abort(p instanceof AxiosError?p:new CanceledError(p instanceof Error?p.message:p))}};let s=e&&setTimeout(()=>{i(new AxiosError(`timeout ${e} of ms exceeded`,AxiosError.ETIMEDOUT))},e);const l=()=>{n&&(s&&clearTimeout(s),s=null,n.forEach(h=>{h&&(h.removeEventListener?h.removeEventListener("abort",i):h.unsubscribe(i))}),n=null)};n.forEach(h=>h&&h.addEventListener&&h.addEventListener("abort",i));const{signal:f}=t;return f.unsubscribe=l,[f,()=>{s&&clearTimeout(s),s=null}]};var composeSignals$1=composeSignals;const streamChunk=function*(n,e){let t=n.byteLength;if(!e||t<e){yield n;return}let r=0,i;for(;r<t;)i=r+e,yield n.slice(r,i),r=i},readBytes=async function*(n,e,t){for await(const r of n)yield*streamChunk(ArrayBuffer.isView(r)?r:await t(String(r)),e)},trackStream=(n,e,t,r,i)=>{const s=readBytes(n,e,i);let l=0;return new ReadableStream({type:"bytes",async pull(f){const{done:h,value:p}=await s.next();if(h){f.close(),r();return}let m=p.byteLength;t&&t(l+=m),f.enqueue(new Uint8Array(p))},cancel(f){return r(f),s.return()}},{highWaterMark:2})},fetchProgressDecorator=(n,e)=>{const t=n!=null;return r=>setTimeout(()=>e({lengthComputable:t,total:n,loaded:r}))},isFetchSupported=typeof fetch=="function"&&typeof Request=="function"&&typeof Response=="function",isReadableStreamSupported=isFetchSupported&&typeof ReadableStream=="function",encodeText=isFetchSupported&&(typeof TextEncoder=="function"?(n=>e=>n.encode(e))(new TextEncoder):async n=>new Uint8Array(await new Response(n).arrayBuffer())),supportsRequestStream=isReadableStreamSupported&&(()=>{let n=!1;const e=new Request(platform.origin,{body:new ReadableStream,method:"POST",get duplex(){return n=!0,"half"}}).headers.has("Content-Type");return n&&!e})(),DEFAULT_CHUNK_SIZE=64*1024,supportsResponseStream=isReadableStreamSupported&&!!(()=>{try{return utils$1$1.isReadableStream(new Response("").body)}catch{}})(),resolvers={stream:supportsResponseStream&&(n=>n.body)};isFetchSupported&&(n=>{["text","arrayBuffer","blob","formData","stream"].forEach(e=>{!resolvers[e]&&(resolvers[e]=utils$1$1.isFunction(n[e])?t=>t[e]():(t,r)=>{throw new AxiosError(`Response type '${e}' is not supported`,AxiosError.ERR_NOT_SUPPORT,r)})})})(new Response);const getBodyLength=async n=>{if(n==null)return 0;if(utils$1$1.isBlob(n))return n.size;if(utils$1$1.isSpecCompliantForm(n))return(await new Request(n).arrayBuffer()).byteLength;if(utils$1$1.isArrayBufferView(n))return n.byteLength;if(utils$1$1.isURLSearchParams(n)&&(n=n+""),utils$1$1.isString(n))return(await encodeText(n)).byteLength},resolveBodyLength=async(n,e)=>{const t=utils$1$1.toFiniteNumber(n.getContentLength());return t??getBodyLength(e)};var fetchAdapter=isFetchSupported&&(async n=>{let{url:e,method:t,data:r,signal:i,cancelToken:s,timeout:l,onDownloadProgress:f,onUploadProgress:h,responseType:p,headers:m,withCredentials:y="same-origin",fetchOptions:A}=resolveConfig(n);p=p?(p+"").toLowerCase():"text";let[x,S]=i||s||l?composeSignals$1([i,s],l):[],C,H;const I=()=>{!C&&setTimeout(()=>{x&&x.unsubscribe()}),C=!0};let z;try{if(h&&supportsRequestStream&&t!=="get"&&t!=="head"&&(z=await resolveBodyLength(m,r))!==0){let V=new Request(e,{method:"POST",body:r,duplex:"half"}),u;utils$1$1.isFormData(r)&&(u=V.headers.get("content-type"))&&m.setContentType(u),V.body&&(r=trackStream(V.body,DEFAULT_CHUNK_SIZE,fetchProgressDecorator(z,progressEventReducer(h)),null,encodeText))}utils$1$1.isString(y)||(y=y?"cors":"omit"),H=new Request(e,{...A,signal:x,method:t.toUpperCase(),headers:m.normalize().toJSON(),body:r,duplex:"half",withCredentials:y});let B=await fetch(H);const Q=supportsResponseStream&&(p==="stream"||p==="response");if(supportsResponseStream&&(f||Q)){const V={};["status","statusText","headers"].forEach(Y=>{V[Y]=B[Y]});const u=utils$1$1.toFiniteNumber(B.headers.get("content-length"));B=new Response(trackStream(B.body,DEFAULT_CHUNK_SIZE,f&&fetchProgressDecorator(u,progressEventReducer(f,!0)),Q&&I,encodeText),V)}p=p||"text";let ee=await resolvers[utils$1$1.findKey(resolvers,p)||"text"](B,n);return!Q&&I(),S&&S(),await new Promise((V,u)=>{settle(V,u,{data:ee,headers:AxiosHeaders$1.from(B.headers),status:B.status,statusText:B.statusText,config:n,request:H})})}catch(B){throw I(),B&&B.name==="TypeError"&&/fetch/i.test(B.message)?Object.assign(new AxiosError("Network Error",AxiosError.ERR_NETWORK,n,H),{cause:B.cause||B}):AxiosError.from(B,B&&B.code,n,H)}});const knownAdapters={http:httpAdapter,xhr:xhrAdapter,fetch:fetchAdapter};utils$1$1.forEach(knownAdapters,(n,e)=>{if(n){try{Object.defineProperty(n,"name",{value:e})}catch{}Object.defineProperty(n,"adapterName",{value:e})}});const renderReason=n=>`- ${n}`,isResolvedHandle=n=>utils$1$1.isFunction(n)||n===null||n===!1;var adapters={getAdapter:n=>{n=utils$1$1.isArray(n)?n:[n];const{length:e}=n;let t,r;const i={};for(let s=0;s<e;s++){t=n[s];let l;if(r=t,!isResolvedHandle(t)&&(r=knownAdapters[(l=String(t)).toLowerCase()],r===void 0))throw new AxiosError(`Unknown adapter '${l}'`);if(r)break;i[l||"#"+s]=r}if(!r){const s=Object.entries(i).map(([f,h])=>`adapter ${f} `+(h===!1?"is not supported by the environment":"is not available in the build"));let l=e?s.length>1?`since :
`+s.map(renderReason).join(`
`):" "+renderReason(s[0]):"as no adapter specified";throw new AxiosError("There is no suitable adapter to dispatch the request "+l,"ERR_NOT_SUPPORT")}return r},adapters:knownAdapters};function throwIfCancellationRequested(n){if(n.cancelToken&&n.cancelToken.throwIfRequested(),n.signal&&n.signal.aborted)throw new CanceledError(null,n)}function dispatchRequest(n){return throwIfCancellationRequested(n),n.headers=AxiosHeaders$1.from(n.headers),n.data=transformData.call(n,n.transformRequest),["post","put","patch"].indexOf(n.method)!==-1&&n.headers.setContentType("application/x-www-form-urlencoded",!1),adapters.getAdapter(n.adapter||defaults$1$1.adapter)(n).then(function(r){return throwIfCancellationRequested(n),r.data=transformData.call(n,n.transformResponse,r),r.headers=AxiosHeaders$1.from(r.headers),r},function(r){return isCancel(r)||(throwIfCancellationRequested(n),r&&r.response&&(r.response.data=transformData.call(n,n.transformResponse,r.response),r.response.headers=AxiosHeaders$1.from(r.response.headers))),Promise.reject(r)})}const VERSION$1="1.7.2",validators$1={};["object","boolean","number","function","string","symbol"].forEach((n,e)=>{validators$1[n]=function(r){return typeof r===n||"a"+(e<1?"n ":" ")+n}});const deprecatedWarnings={};validators$1.transitional=function n(e,t,r){function i(s,l){return"[Axios v"+VERSION$1+"] Transitional option '"+s+"'"+l+(r?". "+r:"")}return(s,l,f)=>{if(e===!1)throw new AxiosError(i(l," has been removed"+(t?" in "+t:"")),AxiosError.ERR_DEPRECATED);return t&&!deprecatedWarnings[l]&&(deprecatedWarnings[l]=!0,console.warn(i(l," has been deprecated since v"+t+" and will be removed in the near future"))),e?e(s,l,f):!0}};function assertOptions(n,e,t){if(typeof n!="object")throw new AxiosError("options must be an object",AxiosError.ERR_BAD_OPTION_VALUE);const r=Object.keys(n);let i=r.length;for(;i-- >0;){const s=r[i],l=e[s];if(l){const f=n[s],h=f===void 0||l(f,s,n);if(h!==!0)throw new AxiosError("option "+s+" must be "+h,AxiosError.ERR_BAD_OPTION_VALUE);continue}if(t!==!0)throw new AxiosError("Unknown option "+s,AxiosError.ERR_BAD_OPTION)}}var validator={assertOptions,validators:validators$1};const validators=validator.validators;class Axios{constructor(e){this.defaults=e,this.interceptors={request:new InterceptorManager$1,response:new InterceptorManager$1}}async request(e,t){try{return await this._request(e,t)}catch(r){if(r instanceof Error){let i;Error.captureStackTrace?Error.captureStackTrace(i={}):i=new Error;const s=i.stack?i.stack.replace(/^.+\n/,""):"";try{r.stack?s&&!String(r.stack).endsWith(s.replace(/^.+\n.+\n/,""))&&(r.stack+=`
`+s):r.stack=s}catch{}}throw r}}_request(e,t){typeof e=="string"?(t=t||{},t.url=e):t=e||{},t=mergeConfig(this.defaults,t);const{transitional:r,paramsSerializer:i,headers:s}=t;r!==void 0&&validator.assertOptions(r,{silentJSONParsing:validators.transitional(validators.boolean),forcedJSONParsing:validators.transitional(validators.boolean),clarifyTimeoutError:validators.transitional(validators.boolean)},!1),i!=null&&(utils$1$1.isFunction(i)?t.paramsSerializer={serialize:i}:validator.assertOptions(i,{encode:validators.function,serialize:validators.function},!0)),t.method=(t.method||this.defaults.method||"get").toLowerCase();let l=s&&utils$1$1.merge(s.common,s[t.method]);s&&utils$1$1.forEach(["delete","get","head","post","put","patch","common"],S=>{delete s[S]}),t.headers=AxiosHeaders$1.concat(l,s);const f=[];let h=!0;this.interceptors.request.forEach(function(C){typeof C.runWhen=="function"&&C.runWhen(t)===!1||(h=h&&C.synchronous,f.unshift(C.fulfilled,C.rejected))});const p=[];this.interceptors.response.forEach(function(C){p.push(C.fulfilled,C.rejected)});let m,y=0,A;if(!h){const S=[dispatchRequest.bind(this),void 0];for(S.unshift.apply(S,f),S.push.apply(S,p),A=S.length,m=Promise.resolve(t);y<A;)m=m.then(S[y++],S[y++]);return m}A=f.length;let x=t;for(y=0;y<A;){const S=f[y++],C=f[y++];try{x=S(x)}catch(H){C.call(this,H);break}}try{m=dispatchRequest.call(this,x)}catch(S){return Promise.reject(S)}for(y=0,A=p.length;y<A;)m=m.then(p[y++],p[y++]);return m}getUri(e){e=mergeConfig(this.defaults,e);const t=buildFullPath(e.baseURL,e.url);return buildURL(t,e.params,e.paramsSerializer)}}utils$1$1.forEach(["delete","get","head","options"],function n(e){Axios.prototype[e]=function(t,r){return this.request(mergeConfig(r||{},{method:e,url:t,data:(r||{}).data}))}});utils$1$1.forEach(["post","put","patch"],function n(e){function t(r){return function(s,l,f){return this.request(mergeConfig(f||{},{method:e,headers:r?{"Content-Type":"multipart/form-data"}:{},url:s,data:l}))}}Axios.prototype[e]=t(),Axios.prototype[e+"Form"]=t(!0)});var Axios$1=Axios;class CancelToken{constructor(e){if(typeof e!="function")throw new TypeError("executor must be a function.");let t;this.promise=new Promise(function(s){t=s});const r=this;this.promise.then(i=>{if(!r._listeners)return;let s=r._listeners.length;for(;s-- >0;)r._listeners[s](i);r._listeners=null}),this.promise.then=i=>{let s;const l=new Promise(f=>{r.subscribe(f),s=f}).then(i);return l.cancel=function(){r.unsubscribe(s)},l},e(function(s,l,f){r.reason||(r.reason=new CanceledError(s,l,f),t(r.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){if(this.reason){e(this.reason);return}this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);t!==-1&&this._listeners.splice(t,1)}static source(){let e;return{token:new CancelToken(function(i){e=i}),cancel:e}}}var CancelToken$1=CancelToken;function spread(n){return function(t){return n.apply(null,t)}}function isAxiosError(n){return utils$1$1.isObject(n)&&n.isAxiosError===!0}const HttpStatusCode={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(HttpStatusCode).forEach(([n,e])=>{HttpStatusCode[e]=n});var HttpStatusCode$1=HttpStatusCode;function createInstance(n){const e=new Axios$1(n),t=bind$2(Axios$1.prototype.request,e);return utils$1$1.extend(t,Axios$1.prototype,e,{allOwnKeys:!0}),utils$1$1.extend(t,e,null,{allOwnKeys:!0}),t.create=function(i){return createInstance(mergeConfig(n,i))},t}const axios=createInstance(defaults$1$1);axios.Axios=Axios$1;axios.CanceledError=CanceledError;axios.CancelToken=CancelToken$1;axios.isCancel=isCancel;axios.VERSION=VERSION$1;axios.toFormData=toFormData;axios.AxiosError=AxiosError;axios.Cancel=axios.CanceledError;axios.all=function n(e){return Promise.all(e)};axios.spread=spread;axios.isAxiosError=isAxiosError;axios.mergeConfig=mergeConfig;axios.AxiosHeaders=AxiosHeaders$1;axios.formToJSON=n=>formDataToJSON(utils$1$1.isHTMLForm(n)?new FormData(n):n);axios.getAdapter=adapters.getAdapter;axios.HttpStatusCode=HttpStatusCode$1;axios.default=axios;var axios_1$1=axios,__assign$3=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$3=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i])}return n},__assign$3.apply(this,arguments)},__awaiter$1=commonjsGlobal&&commonjsGlobal.__awaiter||function(n,e,t,r){function i(s){return s instanceof t?s:new t(function(l){l(s)})}return new(t||(t=Promise))(function(s,l){function f(m){try{p(r.next(m))}catch(y){l(y)}}function h(m){try{p(r.throw(m))}catch(y){l(y)}}function p(m){m.done?s(m.value):i(m.value).then(f,h)}p((r=r.apply(n,e||[])).next())})},__generator$1=commonjsGlobal&&commonjsGlobal.__generator||function(n,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,i,s,l;return l={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function f(p){return function(m){return h([p,m])}}function h(p){if(r)throw new TypeError("Generator is already executing.");for(;l&&(l=0,p[0]&&(t=0)),t;)try{if(r=1,i&&(s=p[0]&2?i.return:p[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,p[1])).done)return s;switch(i=0,s&&(p=[p[0]&2,s.value]),p[0]){case 0:case 1:s=p;break;case 4:return t.label++,{value:p[1],done:!1};case 5:t.label++,i=p[1],p=[0];continue;case 7:p=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(p[0]===6||p[0]===2)){t=0;continue}if(p[0]===3&&(!s||p[1]>s[0]&&p[1]<s[3])){t.label=p[1];break}if(p[0]===6&&t.label<s[1]){t.label=s[1],s=p;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(p);break}s[2]&&t.ops.pop(),t.trys.pop();continue}p=e.call(n,t)}catch(m){p=[6,m],i=0}finally{r=s=0}if(p[0]&5)throw p[1];return{value:p[0]?p[1]:void 0,done:!0}}},__importDefault$1=commonjsGlobal&&commonjsGlobal.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(AxiosClient$1,"__esModule",{value:!0});AxiosClient$1.AxiosClient=void 0;var axios_1=__importDefault$1(axios_1$1),AxiosClient=function(){function n(e){var t=e.responseHandler,r=e.requestConfigBuilder;this.responseHandler=t,this.requestConfigBuilder=r}return n.prototype.get=function(e,t){return __awaiter$1(this,void 0,void 0,function(){var r;return __generator$1(this,function(i){switch(i.label){case 0:return[4,this.requestConfigBuilder.build("get",e,t)];case 1:return r=i.sent(),[4,this.sendRequest(r)];case 2:return[2,i.sent()]}})})},n.prototype.getData=function(e,t){return __awaiter$1(this,void 0,void 0,function(){var r;return __generator$1(this,function(i){switch(i.label){case 0:return[4,this.requestConfigBuilder.build("get",e,t,{responseType:"arraybuffer"})];case 1:return r=i.sent(),[4,this.sendRequest(r)];case 2:return[2,i.sent()]}})})},n.prototype.post=function(e,t){return __awaiter$1(this,void 0,void 0,function(){var r;return __generator$1(this,function(i){switch(i.label){case 0:return[4,this.requestConfigBuilder.build("post",e,t)];case 1:return r=i.sent(),[4,this.sendRequest(r)];case 2:return[2,i.sent()]}})})},n.prototype.postData=function(e,t){return __awaiter$1(this,void 0,void 0,function(){var r;return __generator$1(this,function(i){switch(i.label){case 0:return[4,this.requestConfigBuilder.build("post",e,t)];case 1:return r=i.sent(),[4,this.sendRequest(r)];case 2:return[2,i.sent()]}})})},n.prototype.put=function(e,t){return __awaiter$1(this,void 0,void 0,function(){var r;return __generator$1(this,function(i){switch(i.label){case 0:return[4,this.requestConfigBuilder.build("put",e,t)];case 1:return r=i.sent(),[4,this.sendRequest(r)];case 2:return[2,i.sent()]}})})},n.prototype.delete=function(e,t){return __awaiter$1(this,void 0,void 0,function(){var r;return __generator$1(this,function(i){switch(i.label){case 0:return[4,this.requestConfigBuilder.build("delete",e,t)];case 1:return r=i.sent(),[4,this.sendRequest(r)];case 2:return[2,i.sent()]}})})},n.prototype.sendRequest=function(e){return this.responseHandler.handle((0,axios_1.default)(__assign$3(__assign$3({},e),{maxBodyLength:1/0,maxContentLength:1/0})))},n}();AxiosClient$1.AxiosClient=AxiosClient;(function(n){Object.defineProperty(n,"__esModule",{value:!0}),n.DefaultHttpClient=void 0;var e=AxiosClient$1;Object.defineProperty(n,"DefaultHttpClient",{enumerable:!0,get:function(){return e.AxiosClient}})})(http);var KintoneRequestConfigBuilder$1={},esErrors=Error,_eval=EvalError,range=RangeError,ref=ReferenceError,syntax=SyntaxError,type=TypeError,uri=URIError,shams=function n(){if(typeof Symbol!="function"||typeof Object.getOwnPropertySymbols!="function")return!1;if(typeof Symbol.iterator=="symbol")return!0;var e={},t=Symbol("test"),r=Object(t);if(typeof t=="string"||Object.prototype.toString.call(t)!=="[object Symbol]"||Object.prototype.toString.call(r)!=="[object Symbol]")return!1;var i=42;e[t]=i;for(t in e)return!1;if(typeof Object.keys=="function"&&Object.keys(e).length!==0||typeof Object.getOwnPropertyNames=="function"&&Object.getOwnPropertyNames(e).length!==0)return!1;var s=Object.getOwnPropertySymbols(e);if(s.length!==1||s[0]!==t||!Object.prototype.propertyIsEnumerable.call(e,t))return!1;if(typeof Object.getOwnPropertyDescriptor=="function"){var l=Object.getOwnPropertyDescriptor(e,t);if(l.value!==i||l.enumerable!==!0)return!1}return!0},origSymbol=typeof Symbol<"u"&&Symbol,hasSymbolSham=shams,hasSymbols$1=function n(){return typeof origSymbol!="function"||typeof Symbol!="function"||typeof origSymbol("foo")!="symbol"||typeof Symbol("bar")!="symbol"?!1:hasSymbolSham()},test={__proto__:null,foo:{}},$Object=Object,hasProto$1=function n(){return{__proto__:test}.foo===test.foo&&!(test instanceof $Object)},ERROR_MESSAGE="Function.prototype.bind called on incompatible ",toStr$1=Object.prototype.toString,max$1=Math.max,funcType="[object Function]",concatty=function n(e,t){for(var r=[],i=0;i<e.length;i+=1)r[i]=e[i];for(var s=0;s<t.length;s+=1)r[s+e.length]=t[s];return r},slicy=function n(e,t){for(var r=[],i=t||0,s=0;i<e.length;i+=1,s+=1)r[s]=e[i];return r},joiny=function(n,e){for(var t="",r=0;r<n.length;r+=1)t+=n[r],r+1<n.length&&(t+=e);return t},implementation$1=function n(e){var t=this;if(typeof t!="function"||toStr$1.apply(t)!==funcType)throw new TypeError(ERROR_MESSAGE+t);for(var r=slicy(arguments,1),i,s=function(){if(this instanceof i){var m=t.apply(this,concatty(r,arguments));return Object(m)===m?m:this}return t.apply(e,concatty(r,arguments))},l=max$1(0,t.length-r.length),f=[],h=0;h<l;h++)f[h]="$"+h;if(i=Function("binder","return function ("+joiny(f,",")+"){ return binder.apply(this,arguments); }")(s),t.prototype){var p=function(){};p.prototype=t.prototype,i.prototype=new p,p.prototype=null}return i},implementation=implementation$1,functionBind=Function.prototype.bind||implementation,call=Function.prototype.call,$hasOwn=Object.prototype.hasOwnProperty,bind$1=functionBind,hasown=bind$1.call(call,$hasOwn),undefined$1,$Error=esErrors,$EvalError=_eval,$RangeError=range,$ReferenceError=ref,$SyntaxError$1=syntax,$TypeError$3=type,$URIError=uri,$Function=Function,getEvalledConstructor=function(n){try{return $Function('"use strict"; return ('+n+").constructor;")()}catch{}},$gOPD$1=Object.getOwnPropertyDescriptor;if($gOPD$1)try{$gOPD$1({},"")}catch{$gOPD$1=null}var throwTypeError=function(){throw new $TypeError$3},ThrowTypeError=$gOPD$1?function(){try{return arguments.callee,throwTypeError}catch{try{return $gOPD$1(arguments,"callee").get}catch{return throwTypeError}}}():throwTypeError,hasSymbols=hasSymbols$1(),hasProto=hasProto$1(),getProto=Object.getPrototypeOf||(hasProto?function(n){return n.__proto__}:null),needsEval={},TypedArray=typeof Uint8Array>"u"||!getProto?undefined$1:getProto(Uint8Array),INTRINSICS={__proto__:null,"%AggregateError%":typeof AggregateError>"u"?undefined$1:AggregateError,"%Array%":Array,"%ArrayBuffer%":typeof ArrayBuffer>"u"?undefined$1:ArrayBuffer,"%ArrayIteratorPrototype%":hasSymbols&&getProto?getProto([][Symbol.iterator]()):undefined$1,"%AsyncFromSyncIteratorPrototype%":undefined$1,"%AsyncFunction%":needsEval,"%AsyncGenerator%":needsEval,"%AsyncGeneratorFunction%":needsEval,"%AsyncIteratorPrototype%":needsEval,"%Atomics%":typeof Atomics>"u"?undefined$1:Atomics,"%BigInt%":typeof BigInt>"u"?undefined$1:BigInt,"%BigInt64Array%":typeof BigInt64Array>"u"?undefined$1:BigInt64Array,"%BigUint64Array%":typeof BigUint64Array>"u"?undefined$1:BigUint64Array,"%Boolean%":Boolean,"%DataView%":typeof DataView>"u"?undefined$1:DataView,"%Date%":Date,"%decodeURI%":decodeURI,"%decodeURIComponent%":decodeURIComponent,"%encodeURI%":encodeURI,"%encodeURIComponent%":encodeURIComponent,"%Error%":$Error,"%eval%":eval,"%EvalError%":$EvalError,"%Float32Array%":typeof Float32Array>"u"?undefined$1:Float32Array,"%Float64Array%":typeof Float64Array>"u"?undefined$1:Float64Array,"%FinalizationRegistry%":typeof FinalizationRegistry>"u"?undefined$1:FinalizationRegistry,"%Function%":$Function,"%GeneratorFunction%":needsEval,"%Int8Array%":typeof Int8Array>"u"?undefined$1:Int8Array,"%Int16Array%":typeof Int16Array>"u"?undefined$1:Int16Array,"%Int32Array%":typeof Int32Array>"u"?undefined$1:Int32Array,"%isFinite%":isFinite,"%isNaN%":isNaN,"%IteratorPrototype%":hasSymbols&&getProto?getProto(getProto([][Symbol.iterator]())):undefined$1,"%JSON%":typeof JSON=="object"?JSON:undefined$1,"%Map%":typeof Map>"u"?undefined$1:Map,"%MapIteratorPrototype%":typeof Map>"u"||!hasSymbols||!getProto?undefined$1:getProto(new Map()[Symbol.iterator]()),"%Math%":Math,"%Number%":Number,"%Object%":Object,"%parseFloat%":parseFloat,"%parseInt%":parseInt,"%Promise%":typeof Promise>"u"?undefined$1:Promise,"%Proxy%":typeof Proxy>"u"?undefined$1:Proxy,"%RangeError%":$RangeError,"%ReferenceError%":$ReferenceError,"%Reflect%":typeof Reflect>"u"?undefined$1:Reflect,"%RegExp%":RegExp,"%Set%":typeof Set>"u"?undefined$1:Set,"%SetIteratorPrototype%":typeof Set>"u"||!hasSymbols||!getProto?undefined$1:getProto(new Set()[Symbol.iterator]()),"%SharedArrayBuffer%":typeof SharedArrayBuffer>"u"?undefined$1:SharedArrayBuffer,"%String%":String,"%StringIteratorPrototype%":hasSymbols&&getProto?getProto(""[Symbol.iterator]()):undefined$1,"%Symbol%":hasSymbols?Symbol:undefined$1,"%SyntaxError%":$SyntaxError$1,"%ThrowTypeError%":ThrowTypeError,"%TypedArray%":TypedArray,"%TypeError%":$TypeError$3,"%Uint8Array%":typeof Uint8Array>"u"?undefined$1:Uint8Array,"%Uint8ClampedArray%":typeof Uint8ClampedArray>"u"?undefined$1:Uint8ClampedArray,"%Uint16Array%":typeof Uint16Array>"u"?undefined$1:Uint16Array,"%Uint32Array%":typeof Uint32Array>"u"?undefined$1:Uint32Array,"%URIError%":$URIError,"%WeakMap%":typeof WeakMap>"u"?undefined$1:WeakMap,"%WeakRef%":typeof WeakRef>"u"?undefined$1:WeakRef,"%WeakSet%":typeof WeakSet>"u"?undefined$1:WeakSet};if(getProto)try{null.error}catch(n){var errorProto=getProto(getProto(n));INTRINSICS["%Error.prototype%"]=errorProto}var doEval=function n(e){var t;if(e==="%AsyncFunction%")t=getEvalledConstructor("async function () {}");else if(e==="%GeneratorFunction%")t=getEvalledConstructor("function* () {}");else if(e==="%AsyncGeneratorFunction%")t=getEvalledConstructor("async function* () {}");else if(e==="%AsyncGenerator%"){var r=n("%AsyncGeneratorFunction%");r&&(t=r.prototype)}else if(e==="%AsyncIteratorPrototype%"){var i=n("%AsyncGenerator%");i&&getProto&&(t=getProto(i.prototype))}return INTRINSICS[e]=t,t},LEGACY_ALIASES={__proto__:null,"%ArrayBufferPrototype%":["ArrayBuffer","prototype"],"%ArrayPrototype%":["Array","prototype"],"%ArrayProto_entries%":["Array","prototype","entries"],"%ArrayProto_forEach%":["Array","prototype","forEach"],"%ArrayProto_keys%":["Array","prototype","keys"],"%ArrayProto_values%":["Array","prototype","values"],"%AsyncFunctionPrototype%":["AsyncFunction","prototype"],"%AsyncGenerator%":["AsyncGeneratorFunction","prototype"],"%AsyncGeneratorPrototype%":["AsyncGeneratorFunction","prototype","prototype"],"%BooleanPrototype%":["Boolean","prototype"],"%DataViewPrototype%":["DataView","prototype"],"%DatePrototype%":["Date","prototype"],"%ErrorPrototype%":["Error","prototype"],"%EvalErrorPrototype%":["EvalError","prototype"],"%Float32ArrayPrototype%":["Float32Array","prototype"],"%Float64ArrayPrototype%":["Float64Array","prototype"],"%FunctionPrototype%":["Function","prototype"],"%Generator%":["GeneratorFunction","prototype"],"%GeneratorPrototype%":["GeneratorFunction","prototype","prototype"],"%Int8ArrayPrototype%":["Int8Array","prototype"],"%Int16ArrayPrototype%":["Int16Array","prototype"],"%Int32ArrayPrototype%":["Int32Array","prototype"],"%JSONParse%":["JSON","parse"],"%JSONStringify%":["JSON","stringify"],"%MapPrototype%":["Map","prototype"],"%NumberPrototype%":["Number","prototype"],"%ObjectPrototype%":["Object","prototype"],"%ObjProto_toString%":["Object","prototype","toString"],"%ObjProto_valueOf%":["Object","prototype","valueOf"],"%PromisePrototype%":["Promise","prototype"],"%PromiseProto_then%":["Promise","prototype","then"],"%Promise_all%":["Promise","all"],"%Promise_reject%":["Promise","reject"],"%Promise_resolve%":["Promise","resolve"],"%RangeErrorPrototype%":["RangeError","prototype"],"%ReferenceErrorPrototype%":["ReferenceError","prototype"],"%RegExpPrototype%":["RegExp","prototype"],"%SetPrototype%":["Set","prototype"],"%SharedArrayBufferPrototype%":["SharedArrayBuffer","prototype"],"%StringPrototype%":["String","prototype"],"%SymbolPrototype%":["Symbol","prototype"],"%SyntaxErrorPrototype%":["SyntaxError","prototype"],"%TypedArrayPrototype%":["TypedArray","prototype"],"%TypeErrorPrototype%":["TypeError","prototype"],"%Uint8ArrayPrototype%":["Uint8Array","prototype"],"%Uint8ClampedArrayPrototype%":["Uint8ClampedArray","prototype"],"%Uint16ArrayPrototype%":["Uint16Array","prototype"],"%Uint32ArrayPrototype%":["Uint32Array","prototype"],"%URIErrorPrototype%":["URIError","prototype"],"%WeakMapPrototype%":["WeakMap","prototype"],"%WeakSetPrototype%":["WeakSet","prototype"]},bind=functionBind,hasOwn$1=hasown,$concat$1=bind.call(Function.call,Array.prototype.concat),$spliceApply=bind.call(Function.apply,Array.prototype.splice),$replace$1=bind.call(Function.call,String.prototype.replace),$strSlice=bind.call(Function.call,String.prototype.slice),$exec=bind.call(Function.call,RegExp.prototype.exec),rePropName=/[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g,reEscapeChar=/\\(\\)?/g,stringToPath=function n(e){var t=$strSlice(e,0,1),r=$strSlice(e,-1);if(t==="%"&&r!=="%")throw new $SyntaxError$1("invalid intrinsic syntax, expected closing `%`");if(r==="%"&&t!=="%")throw new $SyntaxError$1("invalid intrinsic syntax, expected opening `%`");var i=[];return $replace$1(e,rePropName,function(s,l,f,h){i[i.length]=f?$replace$1(h,reEscapeChar,"$1"):l||s}),i},getBaseIntrinsic=function n(e,t){var r=e,i;if(hasOwn$1(LEGACY_ALIASES,r)&&(i=LEGACY_ALIASES[r],r="%"+i[0]+"%"),hasOwn$1(INTRINSICS,r)){var s=INTRINSICS[r];if(s===needsEval&&(s=doEval(r)),typeof s>"u"&&!t)throw new $TypeError$3("intrinsic "+e+" exists, but is not available. Please file an issue!");return{alias:i,name:r,value:s}}throw new $SyntaxError$1("intrinsic "+e+" does not exist!")},getIntrinsic=function n(e,t){if(typeof e!="string"||e.length===0)throw new $TypeError$3("intrinsic name must be a non-empty string");if(arguments.length>1&&typeof t!="boolean")throw new $TypeError$3('"allowMissing" argument must be a boolean');if($exec(/^%?[^%]*%?$/,e)===null)throw new $SyntaxError$1("`%` may not be present anywhere but at the beginning and end of the intrinsic name");var r=stringToPath(e),i=r.length>0?r[0]:"",s=getBaseIntrinsic("%"+i+"%",t),l=s.name,f=s.value,h=!1,p=s.alias;p&&(i=p[0],$spliceApply(r,$concat$1([0,1],p)));for(var m=1,y=!0;m<r.length;m+=1){var A=r[m],x=$strSlice(A,0,1),S=$strSlice(A,-1);if((x==='"'||x==="'"||x==="`"||S==='"'||S==="'"||S==="`")&&x!==S)throw new $SyntaxError$1("property names with quotes must have matching quotes");if((A==="constructor"||!y)&&(h=!0),i+="."+A,l="%"+i+"%",hasOwn$1(INTRINSICS,l))f=INTRINSICS[l];else if(f!=null){if(!(A in f)){if(!t)throw new $TypeError$3("base intrinsic for "+e+" exists, but the property is not available.");return}if($gOPD$1&&m+1>=r.length){var C=$gOPD$1(f,A);y=!!C,y&&"get"in C&&!("originalValue"in C.get)?f=C.get:f=f[A]}else y=hasOwn$1(f,A),f=f[A];y&&!h&&(INTRINSICS[l]=f)}}return f},callBind$1={exports:{}},esDefineProperty,hasRequiredEsDefineProperty;function requireEsDefineProperty(){if(hasRequiredEsDefineProperty)return esDefineProperty;hasRequiredEsDefineProperty=1;var n=getIntrinsic,e=n("%Object.defineProperty%",!0)||!1;if(e)try{e({},"a",{value:1})}catch{e=!1}return esDefineProperty=e,esDefineProperty}var GetIntrinsic$3=getIntrinsic,$gOPD=GetIntrinsic$3("%Object.getOwnPropertyDescriptor%",!0);if($gOPD)try{$gOPD([],"length")}catch{$gOPD=null}var gopd$1=$gOPD,$defineProperty$1=requireEsDefineProperty(),$SyntaxError=syntax,$TypeError$2=type,gopd=gopd$1,defineDataProperty=function n(e,t,r){if(!e||typeof e!="object"&&typeof e!="function")throw new $TypeError$2("`obj` must be an object or a function`");if(typeof t!="string"&&typeof t!="symbol")throw new $TypeError$2("`property` must be a string or a symbol`");if(arguments.length>3&&typeof arguments[3]!="boolean"&&arguments[3]!==null)throw new $TypeError$2("`nonEnumerable`, if provided, must be a boolean or null");if(arguments.length>4&&typeof arguments[4]!="boolean"&&arguments[4]!==null)throw new $TypeError$2("`nonWritable`, if provided, must be a boolean or null");if(arguments.length>5&&typeof arguments[5]!="boolean"&&arguments[5]!==null)throw new $TypeError$2("`nonConfigurable`, if provided, must be a boolean or null");if(arguments.length>6&&typeof arguments[6]!="boolean")throw new $TypeError$2("`loose`, if provided, must be a boolean");var i=arguments.length>3?arguments[3]:null,s=arguments.length>4?arguments[4]:null,l=arguments.length>5?arguments[5]:null,f=arguments.length>6?arguments[6]:!1,h=!!gopd&&gopd(e,t);if($defineProperty$1)$defineProperty$1(e,t,{configurable:l===null&&h?h.configurable:!l,enumerable:i===null&&h?h.enumerable:!i,value:r,writable:s===null&&h?h.writable:!s});else if(f||!i&&!s&&!l)e[t]=r;else throw new $SyntaxError("This environment does not support defining a property as non-configurable, non-writable, or non-enumerable.")},$defineProperty=requireEsDefineProperty(),hasPropertyDescriptors=function n(){return!!$defineProperty};hasPropertyDescriptors.hasArrayLengthDefineBug=function n(){if(!$defineProperty)return null;try{return $defineProperty([],"length",{value:1}).length!==1}catch{return!0}};var hasPropertyDescriptors_1=hasPropertyDescriptors,GetIntrinsic$2=getIntrinsic,define=defineDataProperty,hasDescriptors=hasPropertyDescriptors_1(),gOPD=gopd$1,$TypeError$1=type,$floor$1=GetIntrinsic$2("%Math.floor%"),setFunctionLength=function n(e,t){if(typeof e!="function")throw new $TypeError$1("`fn` is not a function");if(typeof t!="number"||t<0||t>4294967295||$floor$1(t)!==t)throw new $TypeError$1("`length` must be a positive 32-bit integer");var r=arguments.length>2&&!!arguments[2],i=!0,s=!0;if("length"in e&&gOPD){var l=gOPD(e,"length");l&&!l.configurable&&(i=!1),l&&!l.writable&&(s=!1)}return(i||s||!r)&&(hasDescriptors?define(e,"length",t,!0,!0):define(e,"length",t)),e};(function(n){var e=functionBind,t=getIntrinsic,r=setFunctionLength,i=type,s=t("%Function.prototype.apply%"),l=t("%Function.prototype.call%"),f=t("%Reflect.apply%",!0)||e.call(l,s),h=requireEsDefineProperty(),p=t("%Math.max%");n.exports=function(A){if(typeof A!="function")throw new i("a function is required");var x=f(e,l,arguments);return r(x,1+p(0,A.length-(arguments.length-1)),!0)};var m=function(){return f(e,s,arguments)};h?h(n.exports,"apply",{value:m}):n.exports.apply=m})(callBind$1);var callBindExports=callBind$1.exports,GetIntrinsic$1=getIntrinsic,callBind=callBindExports,$indexOf=callBind(GetIntrinsic$1("String.prototype.indexOf")),callBound$1=function n(e,t){var r=GetIntrinsic$1(e,!!t);return typeof r=="function"&&$indexOf(e,".prototype.")>-1?callBind(r):r};const __viteBrowserExternal={},__viteBrowserExternal$1=Object.freeze(Object.defineProperty({__proto__:null,default:__viteBrowserExternal},Symbol.toStringTag,{value:"Module"})),require$$0=getAugmentedNamespace(__viteBrowserExternal$1);var hasMap=typeof Map=="function"&&Map.prototype,mapSizeDescriptor=Object.getOwnPropertyDescriptor&&hasMap?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,mapSize=hasMap&&mapSizeDescriptor&&typeof mapSizeDescriptor.get=="function"?mapSizeDescriptor.get:null,mapForEach=hasMap&&Map.prototype.forEach,hasSet=typeof Set=="function"&&Set.prototype,setSizeDescriptor=Object.getOwnPropertyDescriptor&&hasSet?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,setSize=hasSet&&setSizeDescriptor&&typeof setSizeDescriptor.get=="function"?setSizeDescriptor.get:null,setForEach=hasSet&&Set.prototype.forEach,hasWeakMap=typeof WeakMap=="function"&&WeakMap.prototype,weakMapHas=hasWeakMap?WeakMap.prototype.has:null,hasWeakSet=typeof WeakSet=="function"&&WeakSet.prototype,weakSetHas=hasWeakSet?WeakSet.prototype.has:null,hasWeakRef=typeof WeakRef=="function"&&WeakRef.prototype,weakRefDeref=hasWeakRef?WeakRef.prototype.deref:null,booleanValueOf=Boolean.prototype.valueOf,objectToString=Object.prototype.toString,functionToString=Function.prototype.toString,$match=String.prototype.match,$slice=String.prototype.slice,$replace=String.prototype.replace,$toUpperCase=String.prototype.toUpperCase,$toLowerCase=String.prototype.toLowerCase,$test=RegExp.prototype.test,$concat=Array.prototype.concat,$join=Array.prototype.join,$arrSlice=Array.prototype.slice,$floor=Math.floor,bigIntValueOf=typeof BigInt=="function"?BigInt.prototype.valueOf:null,gOPS=Object.getOwnPropertySymbols,symToString=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Symbol.prototype.toString:null,hasShammedSymbols=typeof Symbol=="function"&&typeof Symbol.iterator=="object",toStringTag=typeof Symbol=="function"&&Symbol.toStringTag&&(typeof Symbol.toStringTag===hasShammedSymbols||"symbol")?Symbol.toStringTag:null,isEnumerable=Object.prototype.propertyIsEnumerable,gPO=(typeof Reflect=="function"?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(n){return n.__proto__}:null);function addNumericSeparator(n,e){if(n===1/0||n===-1/0||n!==n||n&&n>-1e3&&n<1e3||$test.call(/e/,e))return e;var t=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof n=="number"){var r=n<0?-$floor(-n):$floor(n);if(r!==n){var i=String(r),s=$slice.call(e,i.length+1);return $replace.call(i,t,"$&_")+"."+$replace.call($replace.call(s,/([0-9]{3})/g,"$&_"),/_$/,"")}}return $replace.call(e,t,"$&_")}var utilInspect=require$$0,inspectCustom=utilInspect.custom,inspectSymbol=isSymbol(inspectCustom)?inspectCustom:null,objectInspect=function n(e,t,r,i){var s=t||{};if(has$3(s,"quoteStyle")&&s.quoteStyle!=="single"&&s.quoteStyle!=="double")throw new TypeError('option "quoteStyle" must be "single" or "double"');if(has$3(s,"maxStringLength")&&(typeof s.maxStringLength=="number"?s.maxStringLength<0&&s.maxStringLength!==1/0:s.maxStringLength!==null))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var l=has$3(s,"customInspect")?s.customInspect:!0;if(typeof l!="boolean"&&l!=="symbol")throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(has$3(s,"indent")&&s.indent!==null&&s.indent!==" "&&!(parseInt(s.indent,10)===s.indent&&s.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(has$3(s,"numericSeparator")&&typeof s.numericSeparator!="boolean")throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var f=s.numericSeparator;if(typeof e>"u")return"undefined";if(e===null)return"null";if(typeof e=="boolean")return e?"true":"false";if(typeof e=="string")return inspectString(e,s);if(typeof e=="number"){if(e===0)return 1/0/e>0?"0":"-0";var h=String(e);return f?addNumericSeparator(e,h):h}if(typeof e=="bigint"){var p=String(e)+"n";return f?addNumericSeparator(e,p):p}var m=typeof s.depth>"u"?5:s.depth;if(typeof r>"u"&&(r=0),r>=m&&m>0&&typeof e=="object")return isArray$3(e)?"[Array]":"[Object]";var y=getIndent(s,r);if(typeof i>"u")i=[];else if(indexOf(i,e)>=0)return"[Circular]";function A(G,ie,ue){if(ie&&(i=$arrSlice.call(i),i.push(ie)),ue){var de={depth:s.depth};return has$3(s,"quoteStyle")&&(de.quoteStyle=s.quoteStyle),n(G,de,r+1,i)}return n(G,s,r+1,i)}if(typeof e=="function"&&!isRegExp$1(e)){var x=nameOf(e),S=arrObjKeys(e,A);return"[Function"+(x?": "+x:" (anonymous)")+"]"+(S.length>0?" { "+$join.call(S,", ")+" }":"")}if(isSymbol(e)){var C=hasShammedSymbols?$replace.call(String(e),/^(Symbol\(.*\))_[^)]*$/,"$1"):symToString.call(e);return typeof e=="object"&&!hasShammedSymbols?markBoxed(C):C}if(isElement$2(e)){for(var H="<"+$toLowerCase.call(String(e.nodeName)),I=e.attributes||[],z=0;z<I.length;z++)H+=" "+I[z].name+"="+wrapQuotes(quote(I[z].value),"double",s);return H+=">",e.childNodes&&e.childNodes.length&&(H+="..."),H+="</"+$toLowerCase.call(String(e.nodeName))+">",H}if(isArray$3(e)){if(e.length===0)return"[]";var B=arrObjKeys(e,A);return y&&!singleLineValues(B)?"["+indentedJoin(B,y)+"]":"[ "+$join.call(B,", ")+" ]"}if(isError(e)){var Q=arrObjKeys(e,A);return!("cause"in Error.prototype)&&"cause"in e&&!isEnumerable.call(e,"cause")?"{ ["+String(e)+"] "+$join.call($concat.call("[cause]: "+A(e.cause),Q),", ")+" }":Q.length===0?"["+String(e)+"]":"{ ["+String(e)+"] "+$join.call(Q,", ")+" }"}if(typeof e=="object"&&l){if(inspectSymbol&&typeof e[inspectSymbol]=="function"&&utilInspect)return utilInspect(e,{depth:m-r});if(l!=="symbol"&&typeof e.inspect=="function")return e.inspect()}if(isMap(e)){var ee=[];return mapForEach&&mapForEach.call(e,function(G,ie){ee.push(A(ie,e,!0)+" => "+A(G,e))}),collectionOf("Map",mapSize.call(e),ee,y)}if(isSet(e)){var V=[];return setForEach&&setForEach.call(e,function(G){V.push(A(G,e))}),collectionOf("Set",setSize.call(e),V,y)}if(isWeakMap(e))return weakCollectionOf("WeakMap");if(isWeakSet(e))return weakCollectionOf("WeakSet");if(isWeakRef(e))return weakCollectionOf("WeakRef");if(isNumber(e))return markBoxed(A(Number(e)));if(isBigInt(e))return markBoxed(A(bigIntValueOf.call(e)));if(isBoolean(e))return markBoxed(booleanValueOf.call(e));if(isString(e))return markBoxed(A(String(e)));if(typeof window<"u"&&e===window)return"{ [object Window] }";if(typeof globalThis<"u"&&e===globalThis||typeof commonjsGlobal<"u"&&e===commonjsGlobal)return"{ [object globalThis] }";if(!isDate(e)&&!isRegExp$1(e)){var u=arrObjKeys(e,A),Y=gPO?gPO(e)===Object.prototype:e instanceof Object||e.constructor===Object,U=e instanceof Object?"":"null prototype",P=!Y&&toStringTag&&Object(e)===e&&toStringTag in e?$slice.call(toStr(e),8,-1):U?"Object":"",q=Y||typeof e.constructor!="function"?"":e.constructor.name?e.constructor.name+" ":"",K=q+(P||U?"["+$join.call($concat.call([],P||[],U||[]),": ")+"] ":"");return u.length===0?K+"{}":y?K+"{"+indentedJoin(u,y)+"}":K+"{ "+$join.call(u,", ")+" }"}return String(e)};function wrapQuotes(n,e,t){var r=(t.quoteStyle||e)==="double"?'"':"'";return r+n+r}function quote(n){return $replace.call(String(n),/"/g,"&quot;")}function isArray$3(n){return toStr(n)==="[object Array]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isDate(n){return toStr(n)==="[object Date]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isRegExp$1(n){return toStr(n)==="[object RegExp]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isError(n){return toStr(n)==="[object Error]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isString(n){return toStr(n)==="[object String]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isNumber(n){return toStr(n)==="[object Number]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isBoolean(n){return toStr(n)==="[object Boolean]"&&(!toStringTag||!(typeof n=="object"&&toStringTag in n))}function isSymbol(n){if(hasShammedSymbols)return n&&typeof n=="object"&&n instanceof Symbol;if(typeof n=="symbol")return!0;if(!n||typeof n!="object"||!symToString)return!1;try{return symToString.call(n),!0}catch{}return!1}function isBigInt(n){if(!n||typeof n!="object"||!bigIntValueOf)return!1;try{return bigIntValueOf.call(n),!0}catch{}return!1}var hasOwn=Object.prototype.hasOwnProperty||function(n){return n in this};function has$3(n,e){return hasOwn.call(n,e)}function toStr(n){return objectToString.call(n)}function nameOf(n){if(n.name)return n.name;var e=$match.call(functionToString.call(n),/^function\s*([\w$]+)/);return e?e[1]:null}function indexOf(n,e){if(n.indexOf)return n.indexOf(e);for(var t=0,r=n.length;t<r;t++)if(n[t]===e)return t;return-1}function isMap(n){if(!mapSize||!n||typeof n!="object")return!1;try{mapSize.call(n);try{setSize.call(n)}catch{return!0}return n instanceof Map}catch{}return!1}function isWeakMap(n){if(!weakMapHas||!n||typeof n!="object")return!1;try{weakMapHas.call(n,weakMapHas);try{weakSetHas.call(n,weakSetHas)}catch{return!0}return n instanceof WeakMap}catch{}return!1}function isWeakRef(n){if(!weakRefDeref||!n||typeof n!="object")return!1;try{return weakRefDeref.call(n),!0}catch{}return!1}function isSet(n){if(!setSize||!n||typeof n!="object")return!1;try{setSize.call(n);try{mapSize.call(n)}catch{return!0}return n instanceof Set}catch{}return!1}function isWeakSet(n){if(!weakSetHas||!n||typeof n!="object")return!1;try{weakSetHas.call(n,weakSetHas);try{weakMapHas.call(n,weakMapHas)}catch{return!0}return n instanceof WeakSet}catch{}return!1}function isElement$2(n){return!n||typeof n!="object"?!1:typeof HTMLElement<"u"&&n instanceof HTMLElement?!0:typeof n.nodeName=="string"&&typeof n.getAttribute=="function"}function inspectString(n,e){if(n.length>e.maxStringLength){var t=n.length-e.maxStringLength,r="... "+t+" more character"+(t>1?"s":"");return inspectString($slice.call(n,0,e.maxStringLength),e)+r}var i=$replace.call($replace.call(n,/(['\\])/g,"\\$1"),/[\x00-\x1f]/g,lowbyte);return wrapQuotes(i,"single",e)}function lowbyte(n){var e=n.charCodeAt(0),t={8:"b",9:"t",10:"n",12:"f",13:"r"}[e];return t?"\\"+t:"\\x"+(e<16?"0":"")+$toUpperCase.call(e.toString(16))}function markBoxed(n){return"Object("+n+")"}function weakCollectionOf(n){return n+" { ? }"}function collectionOf(n,e,t,r){var i=r?indentedJoin(t,r):$join.call(t,", ");return n+" ("+e+") {"+i+"}"}function singleLineValues(n){for(var e=0;e<n.length;e++)if(indexOf(n[e],`
`)>=0)return!1;return!0}function getIndent(n,e){var t;if(n.indent===" ")t=" ";else if(typeof n.indent=="number"&&n.indent>0)t=$join.call(Array(n.indent+1)," ");else return null;return{base:t,prev:$join.call(Array(e+1),t)}}function indentedJoin(n,e){if(n.length===0)return"";var t=`
`+e.prev+e.base;return t+$join.call(n,","+t)+`
`+e.prev}function arrObjKeys(n,e){var t=isArray$3(n),r=[];if(t){r.length=n.length;for(var i=0;i<n.length;i++)r[i]=has$3(n,i)?e(n[i],n):""}var s=typeof gOPS=="function"?gOPS(n):[],l;if(hasShammedSymbols){l={};for(var f=0;f<s.length;f++)l["$"+s[f]]=s[f]}for(var h in n)has$3(n,h)&&(t&&String(Number(h))===h&&h<n.length||hasShammedSymbols&&l["$"+h]instanceof Symbol||($test.call(/[^\w$]/,h)?r.push(e(h,n)+": "+e(n[h],n)):r.push(h+": "+e(n[h],n))));if(typeof gOPS=="function")for(var p=0;p<s.length;p++)isEnumerable.call(n,s[p])&&r.push("["+e(s[p])+"]: "+e(n[s[p]],n));return r}var GetIntrinsic=getIntrinsic,callBound=callBound$1,inspect=objectInspect,$TypeError=type,$WeakMap=GetIntrinsic("%WeakMap%",!0),$Map=GetIntrinsic("%Map%",!0),$weakMapGet=callBound("WeakMap.prototype.get",!0),$weakMapSet=callBound("WeakMap.prototype.set",!0),$weakMapHas=callBound("WeakMap.prototype.has",!0),$mapGet=callBound("Map.prototype.get",!0),$mapSet=callBound("Map.prototype.set",!0),$mapHas=callBound("Map.prototype.has",!0),listGetNode=function(n,e){for(var t=n,r;(r=t.next)!==null;t=r)if(r.key===e)return t.next=r.next,r.next=n.next,n.next=r,r},listGet=function(n,e){var t=listGetNode(n,e);return t&&t.value},listSet=function(n,e,t){var r=listGetNode(n,e);r?r.value=t:n.next={key:e,next:n.next,value:t}},listHas=function(n,e){return!!listGetNode(n,e)},sideChannel=function n(){var e,t,r,i={assert:function(s){if(!i.has(s))throw new $TypeError("Side channel does not contain "+inspect(s))},get:function(s){if($WeakMap&&s&&(typeof s=="object"||typeof s=="function")){if(e)return $weakMapGet(e,s)}else if($Map){if(t)return $mapGet(t,s)}else if(r)return listGet(r,s)},has:function(s){if($WeakMap&&s&&(typeof s=="object"||typeof s=="function")){if(e)return $weakMapHas(e,s)}else if($Map){if(t)return $mapHas(t,s)}else if(r)return listHas(r,s);return!1},set:function(s,l){$WeakMap&&s&&(typeof s=="object"||typeof s=="function")?(e||(e=new $WeakMap),$weakMapSet(e,s,l)):$Map?(t||(t=new $Map),$mapSet(t,s,l)):(r||(r={key:{},next:null}),listSet(r,s,l))}};return i},replace=String.prototype.replace,percentTwenties=/%20/g,Format={RFC1738:"RFC1738",RFC3986:"RFC3986"},formats$3={default:Format.RFC3986,formatters:{RFC1738:function(n){return replace.call(n,percentTwenties,"+")},RFC3986:function(n){return String(n)}},RFC1738:Format.RFC1738,RFC3986:Format.RFC3986},formats$2=formats$3,has$2=Object.prototype.hasOwnProperty,isArray$2=Array.isArray,hexTable=function(){for(var n=[],e=0;e<256;++e)n.push("%"+((e<16?"0":"")+e.toString(16)).toUpperCase());return n}(),compactQueue=function n(e){for(;e.length>1;){var t=e.pop(),r=t.obj[t.prop];if(isArray$2(r)){for(var i=[],s=0;s<r.length;++s)typeof r[s]<"u"&&i.push(r[s]);t.obj[t.prop]=i}}},arrayToObject=function n(e,t){for(var r=t&&t.plainObjects?Object.create(null):{},i=0;i<e.length;++i)typeof e[i]<"u"&&(r[i]=e[i]);return r},merge=function n(e,t,r){if(!t)return e;if(typeof t!="object"){if(isArray$2(e))e.push(t);else if(e&&typeof e=="object")(r&&(r.plainObjects||r.allowPrototypes)||!has$2.call(Object.prototype,t))&&(e[t]=!0);else return[e,t];return e}if(!e||typeof e!="object")return[e].concat(t);var i=e;return isArray$2(e)&&!isArray$2(t)&&(i=arrayToObject(e,r)),isArray$2(e)&&isArray$2(t)?(t.forEach(function(s,l){if(has$2.call(e,l)){var f=e[l];f&&typeof f=="object"&&s&&typeof s=="object"?e[l]=n(f,s,r):e.push(s)}else e[l]=s}),e):Object.keys(t).reduce(function(s,l){var f=t[l];return has$2.call(s,l)?s[l]=n(s[l],f,r):s[l]=f,s},i)},assign=function n(e,t){return Object.keys(t).reduce(function(r,i){return r[i]=t[i],r},e)},decode=function(n,e,t){var r=n.replace(/\+/g," ");if(t==="iso-8859-1")return r.replace(/%[0-9a-f]{2}/gi,unescape);try{return decodeURIComponent(r)}catch{return r}},limit=1024,encode=function n(e,t,r,i,s){if(e.length===0)return e;var l=e;if(typeof e=="symbol"?l=Symbol.prototype.toString.call(e):typeof e!="string"&&(l=String(e)),r==="iso-8859-1")return escape(l).replace(/%u[0-9a-f]{4}/gi,function(x){return"%26%23"+parseInt(x.slice(2),16)+"%3B"});for(var f="",h=0;h<l.length;h+=limit){for(var p=l.length>=limit?l.slice(h,h+limit):l,m=[],y=0;y<p.length;++y){var A=p.charCodeAt(y);if(A===45||A===46||A===95||A===126||A>=48&&A<=57||A>=65&&A<=90||A>=97&&A<=122||s===formats$2.RFC1738&&(A===40||A===41)){m[m.length]=p.charAt(y);continue}if(A<128){m[m.length]=hexTable[A];continue}if(A<2048){m[m.length]=hexTable[192|A>>6]+hexTable[128|A&63];continue}if(A<55296||A>=57344){m[m.length]=hexTable[224|A>>12]+hexTable[128|A>>6&63]+hexTable[128|A&63];continue}y+=1,A=65536+((A&1023)<<10|p.charCodeAt(y)&1023),m[m.length]=hexTable[240|A>>18]+hexTable[128|A>>12&63]+hexTable[128|A>>6&63]+hexTable[128|A&63]}f+=m.join("")}return f},compact=function n(e){for(var t=[{obj:{o:e},prop:"o"}],r=[],i=0;i<t.length;++i)for(var s=t[i],l=s.obj[s.prop],f=Object.keys(l),h=0;h<f.length;++h){var p=f[h],m=l[p];typeof m=="object"&&m!==null&&r.indexOf(m)===-1&&(t.push({obj:l,prop:p}),r.push(m))}return compactQueue(t),e},isRegExp=function n(e){return Object.prototype.toString.call(e)==="[object RegExp]"},isBuffer=function n(e){return!e||typeof e!="object"?!1:!!(e.constructor&&e.constructor.isBuffer&&e.constructor.isBuffer(e))},combine=function n(e,t){return[].concat(e,t)},maybeMap=function n(e,t){if(isArray$2(e)){for(var r=[],i=0;i<e.length;i+=1)r.push(t(e[i]));return r}return t(e)},utils$2={arrayToObject,assign,combine,compact,decode,encode,isBuffer,isRegExp,maybeMap,merge},getSideChannel=sideChannel,utils$1=utils$2,formats$1=formats$3,has$1=Object.prototype.hasOwnProperty,arrayPrefixGenerators={brackets:function n(e){return e+"[]"},comma:"comma",indices:function n(e,t){return e+"["+t+"]"},repeat:function n(e){return e}},isArray$1=Array.isArray,push=Array.prototype.push,pushToArray=function(n,e){push.apply(n,isArray$1(e)?e:[e])},toISO=Date.prototype.toISOString,defaultFormat=formats$1.default,defaults$1={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:utils$1.encode,encodeValuesOnly:!1,format:defaultFormat,formatter:formats$1.formatters[defaultFormat],indices:!1,serializeDate:function n(e){return toISO.call(e)},skipNulls:!1,strictNullHandling:!1},isNonNullishPrimitive=function n(e){return typeof e=="string"||typeof e=="number"||typeof e=="boolean"||typeof e=="symbol"||typeof e=="bigint"},sentinel={},stringify$1=function n(e,t,r,i,s,l,f,h,p,m,y,A,x,S,C,H,I,z){for(var B=e,Q=z,ee=0,V=!1;(Q=Q.get(sentinel))!==void 0&&!V;){var u=Q.get(e);if(ee+=1,typeof u<"u"){if(u===ee)throw new RangeError("Cyclic object value");V=!0}typeof Q.get(sentinel)>"u"&&(ee=0)}if(typeof m=="function"?B=m(t,B):B instanceof Date?B=x(B):r==="comma"&&isArray$1(B)&&(B=utils$1.maybeMap(B,function(Re){return Re instanceof Date?x(Re):Re})),B===null){if(l)return p&&!H?p(t,defaults$1.encoder,I,"key",S):t;B=""}if(isNonNullishPrimitive(B)||utils$1.isBuffer(B)){if(p){var Y=H?t:p(t,defaults$1.encoder,I,"key",S);return[C(Y)+"="+C(p(B,defaults$1.encoder,I,"value",S))]}return[C(t)+"="+C(String(B))]}var U=[];if(typeof B>"u")return U;var P;if(r==="comma"&&isArray$1(B))H&&p&&(B=utils$1.maybeMap(B,p)),P=[{value:B.length>0?B.join(",")||null:void 0}];else if(isArray$1(m))P=m;else{var q=Object.keys(B);P=y?q.sort(y):q}var K=h?t.replace(/\./g,"%2E"):t,G=i&&isArray$1(B)&&B.length===1?K+"[]":K;if(s&&isArray$1(B)&&B.length===0)return G+"[]";for(var ie=0;ie<P.length;++ie){var ue=P[ie],de=typeof ue=="object"&&typeof ue.value<"u"?ue.value:B[ue];if(!(f&&de===null)){var le=A&&h?ue.replace(/\./g,"%2E"):ue,ve=isArray$1(B)?typeof r=="function"?r(G,le):G:G+(A?"."+le:"["+le+"]");z.set(e,ee);var he=getSideChannel();he.set(sentinel,z),pushToArray(U,n(de,ve,r,i,s,l,f,h,r==="comma"&&H&&isArray$1(B)?null:p,m,y,A,x,S,C,H,I,he))}}return U},normalizeStringifyOptions=function n(e){if(!e)return defaults$1;if(typeof e.allowEmptyArrays<"u"&&typeof e.allowEmptyArrays!="boolean")throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(typeof e.encodeDotInKeys<"u"&&typeof e.encodeDotInKeys!="boolean")throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(e.encoder!==null&&typeof e.encoder<"u"&&typeof e.encoder!="function")throw new TypeError("Encoder has to be a function.");var t=e.charset||defaults$1.charset;if(typeof e.charset<"u"&&e.charset!=="utf-8"&&e.charset!=="iso-8859-1")throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var r=formats$1.default;if(typeof e.format<"u"){if(!has$1.call(formats$1.formatters,e.format))throw new TypeError("Unknown format option provided.");r=e.format}var i=formats$1.formatters[r],s=defaults$1.filter;(typeof e.filter=="function"||isArray$1(e.filter))&&(s=e.filter);var l;if(e.arrayFormat in arrayPrefixGenerators?l=e.arrayFormat:"indices"in e?l=e.indices?"indices":"repeat":l=defaults$1.arrayFormat,"commaRoundTrip"in e&&typeof e.commaRoundTrip!="boolean")throw new TypeError("`commaRoundTrip` must be a boolean, or absent");var f=typeof e.allowDots>"u"?e.encodeDotInKeys===!0?!0:defaults$1.allowDots:!!e.allowDots;return{addQueryPrefix:typeof e.addQueryPrefix=="boolean"?e.addQueryPrefix:defaults$1.addQueryPrefix,allowDots:f,allowEmptyArrays:typeof e.allowEmptyArrays=="boolean"?!!e.allowEmptyArrays:defaults$1.allowEmptyArrays,arrayFormat:l,charset:t,charsetSentinel:typeof e.charsetSentinel=="boolean"?e.charsetSentinel:defaults$1.charsetSentinel,commaRoundTrip:e.commaRoundTrip,delimiter:typeof e.delimiter>"u"?defaults$1.delimiter:e.delimiter,encode:typeof e.encode=="boolean"?e.encode:defaults$1.encode,encodeDotInKeys:typeof e.encodeDotInKeys=="boolean"?e.encodeDotInKeys:defaults$1.encodeDotInKeys,encoder:typeof e.encoder=="function"?e.encoder:defaults$1.encoder,encodeValuesOnly:typeof e.encodeValuesOnly=="boolean"?e.encodeValuesOnly:defaults$1.encodeValuesOnly,filter:s,format:r,formatter:i,serializeDate:typeof e.serializeDate=="function"?e.serializeDate:defaults$1.serializeDate,skipNulls:typeof e.skipNulls=="boolean"?e.skipNulls:defaults$1.skipNulls,sort:typeof e.sort=="function"?e.sort:null,strictNullHandling:typeof e.strictNullHandling=="boolean"?e.strictNullHandling:defaults$1.strictNullHandling}},stringify_1=function(n,e){var t=n,r=normalizeStringifyOptions(e),i,s;typeof r.filter=="function"?(s=r.filter,t=s("",t)):isArray$1(r.filter)&&(s=r.filter,i=s);var l=[];if(typeof t!="object"||t===null)return"";var f=arrayPrefixGenerators[r.arrayFormat],h=f==="comma"&&r.commaRoundTrip;i||(i=Object.keys(t)),r.sort&&i.sort(r.sort);for(var p=getSideChannel(),m=0;m<i.length;++m){var y=i[m];r.skipNulls&&t[y]===null||pushToArray(l,stringify$1(t[y],y,f,h,r.allowEmptyArrays,r.strictNullHandling,r.skipNulls,r.encodeDotInKeys,r.encode?r.encoder:null,r.filter,r.sort,r.allowDots,r.serializeDate,r.format,r.formatter,r.encodeValuesOnly,r.charset,p))}var A=l.join(r.delimiter),x=r.addQueryPrefix===!0?"?":"";return r.charsetSentinel&&(r.charset==="iso-8859-1"?x+="utf8=%26%2310003%3B&":x+="utf8=%E2%9C%93&"),A.length>0?x+A:""},utils=utils$2,has=Object.prototype.hasOwnProperty,isArray=Array.isArray,defaults={allowDots:!1,allowEmptyArrays:!1,allowPrototypes:!1,allowSparse:!1,arrayLimit:20,charset:"utf-8",charsetSentinel:!1,comma:!1,decodeDotInKeys:!1,decoder:utils.decode,delimiter:"&",depth:5,duplicates:"combine",ignoreQueryPrefix:!1,interpretNumericEntities:!1,parameterLimit:1e3,parseArrays:!0,plainObjects:!1,strictNullHandling:!1},interpretNumericEntities=function(n){return n.replace(/&#(\d+);/g,function(e,t){return String.fromCharCode(parseInt(t,10))})},parseArrayValue=function(n,e){return n&&typeof n=="string"&&e.comma&&n.indexOf(",")>-1?n.split(","):n},isoSentinel="utf8=%26%2310003%3B",charsetSentinel="utf8=%E2%9C%93",parseValues=function n(e,t){var r={__proto__:null},i=t.ignoreQueryPrefix?e.replace(/^\?/,""):e;i=i.replace(/%5B/gi,"[").replace(/%5D/gi,"]");var s=t.parameterLimit===1/0?void 0:t.parameterLimit,l=i.split(t.delimiter,s),f=-1,h,p=t.charset;if(t.charsetSentinel)for(h=0;h<l.length;++h)l[h].indexOf("utf8=")===0&&(l[h]===charsetSentinel?p="utf-8":l[h]===isoSentinel&&(p="iso-8859-1"),f=h,h=l.length);for(h=0;h<l.length;++h)if(h!==f){var m=l[h],y=m.indexOf("]="),A=y===-1?m.indexOf("="):y+1,x,S;A===-1?(x=t.decoder(m,defaults.decoder,p,"key"),S=t.strictNullHandling?null:""):(x=t.decoder(m.slice(0,A),defaults.decoder,p,"key"),S=utils.maybeMap(parseArrayValue(m.slice(A+1),t),function(H){return t.decoder(H,defaults.decoder,p,"value")})),S&&t.interpretNumericEntities&&p==="iso-8859-1"&&(S=interpretNumericEntities(S)),m.indexOf("[]=")>-1&&(S=isArray(S)?[S]:S);var C=has.call(r,x);C&&t.duplicates==="combine"?r[x]=utils.combine(r[x],S):(!C||t.duplicates==="last")&&(r[x]=S)}return r},parseObject=function(n,e,t,r){for(var i=r?e:parseArrayValue(e,t),s=n.length-1;s>=0;--s){var l,f=n[s];if(f==="[]"&&t.parseArrays)l=t.allowEmptyArrays&&i===""?[]:[].concat(i);else{l=t.plainObjects?Object.create(null):{};var h=f.charAt(0)==="["&&f.charAt(f.length-1)==="]"?f.slice(1,-1):f,p=t.decodeDotInKeys?h.replace(/%2E/g,"."):h,m=parseInt(p,10);!t.parseArrays&&p===""?l={0:i}:!isNaN(m)&&f!==p&&String(m)===p&&m>=0&&t.parseArrays&&m<=t.arrayLimit?(l=[],l[m]=i):p!=="__proto__"&&(l[p]=i)}i=l}return i},parseKeys=function n(e,t,r,i){if(e){var s=r.allowDots?e.replace(/\.([^.[]+)/g,"[$1]"):e,l=/(\[[^[\]]*])/,f=/(\[[^[\]]*])/g,h=r.depth>0&&l.exec(s),p=h?s.slice(0,h.index):s,m=[];if(p){if(!r.plainObjects&&has.call(Object.prototype,p)&&!r.allowPrototypes)return;m.push(p)}for(var y=0;r.depth>0&&(h=f.exec(s))!==null&&y<r.depth;){if(y+=1,!r.plainObjects&&has.call(Object.prototype,h[1].slice(1,-1))&&!r.allowPrototypes)return;m.push(h[1])}return h&&m.push("["+s.slice(h.index)+"]"),parseObject(m,t,r,i)}},normalizeParseOptions=function n(e){if(!e)return defaults;if(typeof e.allowEmptyArrays<"u"&&typeof e.allowEmptyArrays!="boolean")throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(typeof e.decodeDotInKeys<"u"&&typeof e.decodeDotInKeys!="boolean")throw new TypeError("`decodeDotInKeys` option can only be `true` or `false`, when provided");if(e.decoder!==null&&typeof e.decoder<"u"&&typeof e.decoder!="function")throw new TypeError("Decoder has to be a function.");if(typeof e.charset<"u"&&e.charset!=="utf-8"&&e.charset!=="iso-8859-1")throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");var t=typeof e.charset>"u"?defaults.charset:e.charset,r=typeof e.duplicates>"u"?defaults.duplicates:e.duplicates;if(r!=="combine"&&r!=="first"&&r!=="last")throw new TypeError("The duplicates option must be either combine, first, or last");var i=typeof e.allowDots>"u"?e.decodeDotInKeys===!0?!0:defaults.allowDots:!!e.allowDots;return{allowDots:i,allowEmptyArrays:typeof e.allowEmptyArrays=="boolean"?!!e.allowEmptyArrays:defaults.allowEmptyArrays,allowPrototypes:typeof e.allowPrototypes=="boolean"?e.allowPrototypes:defaults.allowPrototypes,allowSparse:typeof e.allowSparse=="boolean"?e.allowSparse:defaults.allowSparse,arrayLimit:typeof e.arrayLimit=="number"?e.arrayLimit:defaults.arrayLimit,charset:t,charsetSentinel:typeof e.charsetSentinel=="boolean"?e.charsetSentinel:defaults.charsetSentinel,comma:typeof e.comma=="boolean"?e.comma:defaults.comma,decodeDotInKeys:typeof e.decodeDotInKeys=="boolean"?e.decodeDotInKeys:defaults.decodeDotInKeys,decoder:typeof e.decoder=="function"?e.decoder:defaults.decoder,delimiter:typeof e.delimiter=="string"||utils.isRegExp(e.delimiter)?e.delimiter:defaults.delimiter,depth:typeof e.depth=="number"||e.depth===!1?+e.depth:defaults.depth,duplicates:r,ignoreQueryPrefix:e.ignoreQueryPrefix===!0,interpretNumericEntities:typeof e.interpretNumericEntities=="boolean"?e.interpretNumericEntities:defaults.interpretNumericEntities,parameterLimit:typeof e.parameterLimit=="number"?e.parameterLimit:defaults.parameterLimit,parseArrays:e.parseArrays!==!1,plainObjects:typeof e.plainObjects=="boolean"?e.plainObjects:defaults.plainObjects,strictNullHandling:typeof e.strictNullHandling=="boolean"?e.strictNullHandling:defaults.strictNullHandling}},parse$1=function(n,e){var t=normalizeParseOptions(e);if(n===""||n===null||typeof n>"u")return t.plainObjects?Object.create(null):{};for(var r=typeof n=="string"?parseValues(n,t):n,i=t.plainObjects?Object.create(null):{},s=Object.keys(r),l=0;l<s.length;++l){var f=s[l],h=parseKeys(f,r[f],t,typeof n=="string");i=utils.merge(i,h,t)}return t.allowSparse===!0?i:utils.compact(i)},stringify=stringify_1,parse=parse$1,formats=formats$3,lib={formats,parse,stringify},base64={exports:{}};(function(n,e){(function(t,r){n.exports=r()})(typeof self<"u"?self:typeof window<"u"?window:commonjsGlobal,function(){var t="3.7.7",r=t,i=typeof Buffer=="function",s=typeof TextDecoder=="function"?new TextDecoder:void 0,l=typeof TextEncoder=="function"?new TextEncoder:void 0,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",h=Array.prototype.slice.call(f),p=function(j){var te={};return j.forEach(function(Se,$e){return te[Se]=$e}),te}(h),m=/^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/,y=String.fromCharCode.bind(String),A=typeof Uint8Array.from=="function"?Uint8Array.from.bind(Uint8Array):function(j){return new Uint8Array(Array.prototype.slice.call(j,0))},x=function(j){return j.replace(/=/g,"").replace(/[+\/]/g,function(te){return te=="+"?"-":"_"})},S=function(j){return j.replace(/[^A-Za-z0-9\+\/]/g,"")},C=function(j){for(var te,Se,$e,Me,Oe="",Ze=j.length%3,Be=0;Be<j.length;){if((Se=j.charCodeAt(Be++))>255||($e=j.charCodeAt(Be++))>255||(Me=j.charCodeAt(Be++))>255)throw new TypeError("invalid character found");te=Se<<16|$e<<8|Me,Oe+=h[te>>18&63]+h[te>>12&63]+h[te>>6&63]+h[te&63]}return Ze?Oe.slice(0,Ze-3)+"===".substring(Ze):Oe},H=typeof btoa=="function"?function(j){return btoa(j)}:i?function(j){return Buffer.from(j,"binary").toString("base64")}:C,I=i?function(j){return Buffer.from(j).toString("base64")}:function(j){for(var te=4096,Se=[],$e=0,Me=j.length;$e<Me;$e+=te)Se.push(y.apply(null,j.subarray($e,$e+te)));return H(Se.join(""))},z=function(j,te){return te===void 0&&(te=!1),te?x(I(j)):I(j)},B=function(j){if(j.length<2){var te=j.charCodeAt(0);return te<128?j:te<2048?y(192|te>>>6)+y(128|te&63):y(224|te>>>12&15)+y(128|te>>>6&63)+y(128|te&63)}else{var te=65536+(j.charCodeAt(0)-55296)*1024+(j.charCodeAt(1)-56320);return y(240|te>>>18&7)+y(128|te>>>12&63)+y(128|te>>>6&63)+y(128|te&63)}},Q=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,ee=function(j){return j.replace(Q,B)},V=i?function(j){return Buffer.from(j,"utf8").toString("base64")}:l?function(j){return I(l.encode(j))}:function(j){return H(ee(j))},u=function(j,te){return te===void 0&&(te=!1),te?x(V(j)):V(j)},Y=function(j){return u(j,!0)},U=/[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g,P=function(j){switch(j.length){case 4:var te=(7&j.charCodeAt(0))<<18|(63&j.charCodeAt(1))<<12|(63&j.charCodeAt(2))<<6|63&j.charCodeAt(3),Se=te-65536;return y((Se>>>10)+55296)+y((Se&1023)+56320);case 3:return y((15&j.charCodeAt(0))<<12|(63&j.charCodeAt(1))<<6|63&j.charCodeAt(2));default:return y((31&j.charCodeAt(0))<<6|63&j.charCodeAt(1))}},q=function(j){return j.replace(U,P)},K=function(j){if(j=j.replace(/\s+/g,""),!m.test(j))throw new TypeError("malformed base64.");j+="==".slice(2-(j.length&3));for(var te,Se="",$e,Me,Oe=0;Oe<j.length;)te=p[j.charAt(Oe++)]<<18|p[j.charAt(Oe++)]<<12|($e=p[j.charAt(Oe++)])<<6|(Me=p[j.charAt(Oe++)]),Se+=$e===64?y(te>>16&255):Me===64?y(te>>16&255,te>>8&255):y(te>>16&255,te>>8&255,te&255);return Se},G=typeof atob=="function"?function(j){return atob(S(j))}:i?function(j){return Buffer.from(j,"base64").toString("binary")}:K,ie=i?function(j){return A(Buffer.from(j,"base64"))}:function(j){return A(G(j).split("").map(function(te){return te.charCodeAt(0)}))},ue=function(j){return ie(le(j))},de=i?function(j){return Buffer.from(j,"base64").toString("utf8")}:s?function(j){return s.decode(ie(j))}:function(j){return q(G(j))},le=function(j){return S(j.replace(/[-_]/g,function(te){return te=="-"?"+":"/"}))},ve=function(j){return de(le(j))},he=function(j){if(typeof j!="string")return!1;var te=j.replace(/\s+/g,"").replace(/={0,2}$/,"");return!/[^\s0-9a-zA-Z\+/]/.test(te)||!/[^\s0-9a-zA-Z\-_]/.test(te)},Re=function(j){return{value:j,enumerable:!1,writable:!0,configurable:!0}},fe=function(){var j=function(te,Se){return Object.defineProperty(String.prototype,te,Re(Se))};j("fromBase64",function(){return ve(this)}),j("toBase64",function(te){return u(this,te)}),j("toBase64URI",function(){return u(this,!0)}),j("toBase64URL",function(){return u(this,!0)}),j("toUint8Array",function(){return ue(this)})},be=function(){var j=function(te,Se){return Object.defineProperty(Uint8Array.prototype,te,Re(Se))};j("toBase64",function(te){return z(this,te)}),j("toBase64URI",function(){return z(this,!0)}),j("toBase64URL",function(){return z(this,!0)})},we=function(){fe(),be()},xe={version:t,VERSION:r,atob:G,atobPolyfill:K,btoa:H,btoaPolyfill:C,fromBase64:ve,toBase64:u,encode:u,encodeURI:Y,encodeURL:Y,utob:ee,btou:q,decode:ve,isValid:he,fromUint8Array:z,toUint8Array:ue,extendString:fe,extendUint8Array:be,extendBuiltins:we};return xe.Base64={},Object.keys(xe).forEach(function(j){return xe.Base64[j]=xe[j]}),xe})})(base64);var base64Exports=base64.exports,__assign$2=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$2=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i])}return n},__assign$2.apply(this,arguments)},__awaiter=commonjsGlobal&&commonjsGlobal.__awaiter||function(n,e,t,r){function i(s){return s instanceof t?s:new t(function(l){l(s)})}return new(t||(t=Promise))(function(s,l){function f(m){try{p(r.next(m))}catch(y){l(y)}}function h(m){try{p(r.throw(m))}catch(y){l(y)}}function p(m){m.done?s(m.value):i(m.value).then(f,h)}p((r=r.apply(n,e||[])).next())})},__generator=commonjsGlobal&&commonjsGlobal.__generator||function(n,e){var t={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},r,i,s,l;return l={next:f(0),throw:f(1),return:f(2)},typeof Symbol=="function"&&(l[Symbol.iterator]=function(){return this}),l;function f(p){return function(m){return h([p,m])}}function h(p){if(r)throw new TypeError("Generator is already executing.");for(;l&&(l=0,p[0]&&(t=0)),t;)try{if(r=1,i&&(s=p[0]&2?i.return:p[0]?i.throw||((s=i.return)&&s.call(i),0):i.next)&&!(s=s.call(i,p[1])).done)return s;switch(i=0,s&&(p=[p[0]&2,s.value]),p[0]){case 0:case 1:s=p;break;case 4:return t.label++,{value:p[1],done:!1};case 5:t.label++,i=p[1],p=[0];continue;case 7:p=t.ops.pop(),t.trys.pop();continue;default:if(s=t.trys,!(s=s.length>0&&s[s.length-1])&&(p[0]===6||p[0]===2)){t=0;continue}if(p[0]===3&&(!s||p[1]>s[0]&&p[1]<s[3])){t.label=p[1];break}if(p[0]===6&&t.label<s[1]){t.label=s[1],s=p;break}if(s&&t.label<s[2]){t.label=s[2],t.ops.push(p);break}s[2]&&t.ops.pop(),t.trys.pop();continue}p=e.call(n,t)}catch(m){p=[6,m],i=0}finally{r=s=0}if(p[0]&5)throw p[1];return{value:p[0]?p[1]:void 0,done:!0}}},__importDefault=commonjsGlobal&&commonjsGlobal.__importDefault||function(n){return n&&n.__esModule?n:{default:n}};Object.defineProperty(KintoneRequestConfigBuilder$1,"__esModule",{value:!0});KintoneRequestConfigBuilder$1.KintoneRequestConfigBuilder=void 0;var form_data_1=__importDefault(browser),qs_1=__importDefault(lib),js_base64_1=base64Exports,platform_1$1=platform$2,DEFAULT_PROXY_PROTOCOL="http",THRESHOLD_AVOID_REQUEST_URL_TOO_LARGE=4096,KintoneRequestConfigBuilder=function(){function n(e){if(this.baseUrl=e.baseUrl,this.auth=e.auth,this.headers=this.buildHeaders({basicAuth:e.basicAuth,userAgent:e.userAgent}),"httpsAgent"in e){if("clientCertAuth"in e)throw new Error("Cannot specify clientCertAuth along with httpsAgent.");this.httpsAgent=e.httpsAgent}else"clientCertAuth"in e&&(this.clientCertAuth=e.clientCertAuth);this.proxy=e.proxy,this.requestToken=null,this.socketTimeout=e.socketTimeout}return n.prototype.build=function(e,t,r,i){return __awaiter(this,void 0,void 0,function(){var s,l,y,f,h,p,m,y,A,x,S,C,H;return __generator(this,function(I){switch(I.label){case 0:switch(s=__assign$2(__assign$2(__assign$2({method:e,headers:this.headers,url:"".concat(this.baseUrl).concat(t)},i||{}),platform_1$1.platformDeps.buildPlatformDependentConfig({httpsAgent:this.httpsAgent,clientCertAuth:this.clientCertAuth,socketTimeout:this.socketTimeout})),{proxy:this.buildProxyConfig(this.proxy)}),l=e,l){case"get":return[3,1];case"post":return[3,4];case"put":return[3,8];case"delete":return[3,10]}return[3,12];case 1:return y=this.buildRequestUrl(t,r),y.length>THRESHOLD_AVOID_REQUEST_URL_TOO_LARGE?(f=[__assign$2({},s)],S={method:"post",headers:__assign$2(__assign$2({},this.headers),{"X-HTTP-Method-Override":"GET"})},[4,this.buildData(r)]):[3,3];case 2:return[2,__assign$2.apply(void 0,f.concat([(S.data=I.sent(),S)]))];case 3:return[2,__assign$2(__assign$2({},s),{url:y})];case 4:return r instanceof form_data_1.default?[4,this.buildData(r)]:[3,6];case 5:return h=I.sent(),[2,__assign$2(__assign$2({},s),{headers:typeof h.getHeaders=="function"?__assign$2(__assign$2({},this.headers),h.getHeaders()):this.headers,data:h})];case 6:return p=[__assign$2({},s)],C={},[4,this.buildData(r)];case 7:return[2,__assign$2.apply(void 0,p.concat([(C.data=I.sent(),C)]))];case 8:return m=[__assign$2({},s)],H={},[4,this.buildData(r)];case 9:return[2,__assign$2.apply(void 0,m.concat([(H.data=I.sent(),H)]))];case 10:return A=this.buildRequestUrl,x=[t],[4,this.buildData(r)];case 11:return y=A.apply(this,x.concat([I.sent()])),[2,__assign$2(__assign$2({},s),{url:y})];case 12:throw new Error("".concat(e," method is not supported"));case 13:return[2]}})})},n.prototype.buildProxyConfig=function(e){var t;if(e!==void 0){if(e===!1)return!1;var r=e;return r.auth&&(r.auth.username.length===0||r.auth.password.length===0)&&(r.auth=void 0),r.protocol=(t=r.protocol)!==null&&t!==void 0?t:DEFAULT_PROXY_PROTOCOL,r}},n.prototype.buildRequestUrl=function(e,t){return"".concat(this.baseUrl).concat(e,"?").concat(qs_1.default.stringify(t))},n.prototype.buildData=function(e){return __awaiter(this,void 0,void 0,function(){var t;return __generator(this,function(r){switch(r.label){case 0:return this.auth.type!=="session"?[3,2]:[4,this.getRequestToken()];case 1:return t=r.sent(),e instanceof form_data_1.default?(e.append("__REQUEST_TOKEN__",t),[2,e]):[2,__assign$2({__REQUEST_TOKEN__:t},e)];case 2:return[2,e]}})})},n.prototype.buildHeaders=function(e){var t=e.basicAuth,r=e.userAgent,i=t?{Authorization:"Basic ".concat(js_base64_1.Base64.encode("".concat(t.username,":").concat(t.password)))}:{},s=platform_1$1.platformDeps.buildHeaders({userAgent:r}),l=__assign$2(__assign$2({},s),i);switch(this.auth.type){case"password":return __assign$2(__assign$2({},l),{"X-Cybozu-Authorization":js_base64_1.Base64.encode("".concat(this.auth.username,":").concat(this.auth.password))});case"apiToken":{var f=this.auth.apiToken;return Array.isArray(f)?__assign$2(__assign$2({},l),{"X-Cybozu-API-Token":f.join(",")}):__assign$2(__assign$2({},l),{"X-Cybozu-API-Token":f})}case"oAuthToken":return __assign$2(__assign$2({},l),{Authorization:"Bearer ".concat(this.auth.oAuthToken)});default:return __assign$2(__assign$2({},l),{"X-Requested-With":"XMLHttpRequest"})}},n.prototype.getRequestToken=function(){return __awaiter(this,void 0,void 0,function(){var e;return __generator(this,function(t){switch(t.label){case 0:return this.requestToken!==null?[3,2]:(e=this,[4,platform_1$1.platformDeps.getRequestToken()]);case 1:e.requestToken=t.sent(),t.label=2;case 2:return[2,this.requestToken]}})})},n}();KintoneRequestConfigBuilder$1.KintoneRequestConfigBuilder=KintoneRequestConfigBuilder;var KintoneResponseHandler$1={},__assign$1=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign$1=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i])}return n},__assign$1.apply(this,arguments)},__rest=commonjsGlobal&&commonjsGlobal.__rest||function(n,e){var t={};for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&e.indexOf(r)<0&&(t[r]=n[r]);if(n!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,r=Object.getOwnPropertySymbols(n);i<r.length;i++)e.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(n,r[i])&&(t[r[i]]=n[r[i]]);return t};Object.defineProperty(KintoneResponseHandler$1,"__esModule",{value:!0});KintoneResponseHandler$1.KintoneResponseHandler=void 0;var error_1=error,KintoneResponseHandler=function(){function n(e){var t=e.enableAbortSearchError;this.enableAbortSearchError=t}return n.prototype.handle=function(e){var t=this;return e.then(function(r){return t.handleSuccessResponse(r)},function(r){return t.handleErrorResponse(r)})},n.prototype.handleSuccessResponse=function(e){if(this.enableAbortSearchError&&/Filter aborted because of too many search results/.test(e.headers["x-cybozu-warning"]))throw new error_1.KintoneAbortSearchError(e.headers["x-cybozu-warning"]);return e.data},n.prototype.handleErrorResponse=function(e){if(!e.response)throw/mac verify failure/.test(e.toString())?new Error("invalid clientCertAuth setting"):e;var t=e.response,r=t.data,i=__rest(t,["data"]);throw typeof r=="string"?new Error("".concat(i.status,": ").concat(i.statusText)):new error_1.KintoneRestAPIError(__assign$1({data:r},i))},n}();KintoneResponseHandler$1.KintoneResponseHandler=KintoneResponseHandler;var __assign=commonjsGlobal&&commonjsGlobal.__assign||function(){return __assign=Object.assign||function(n){for(var e,t=1,r=arguments.length;t<r;t++){e=arguments[t];for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(n[i]=e[i])}return n},__assign.apply(this,arguments)};Object.defineProperty(KintoneRestAPIClient$1,"__esModule",{value:!0});KintoneRestAPIClient$1.KintoneRestAPIClient=void 0;var BulkRequestClient_1=BulkRequestClient$1,AppClient_1=AppClient$1,RecordClient_1=RecordClient$1,SpaceClient_1=SpaceClient$1,FileClient_1=FileClient$1,http_1=http,KintoneRequestConfigBuilder_1=KintoneRequestConfigBuilder$1,KintoneResponseHandler_1=KintoneResponseHandler$1,platform_1=platform$2,UnsupportedPlatformError_1=UnsupportedPlatformError$1,buildDiscriminatedAuth=function(n){if("username"in n)return __assign({type:"password"},n);if("apiToken"in n)return __assign({type:"apiToken"},n);if("oAuthToken"in n)return __assign({type:"oAuthToken"},n);try{return platform_1.platformDeps.getDefaultAuth()}catch(e){throw e instanceof UnsupportedPlatformError_1.UnsupportedPlatformError?new Error("session authentication is not supported in ".concat(e.platform," environment.")):e}},KintoneRestAPIClient=function(){function n(e){e===void 0&&(e={});var t,r,i;validateOptions(e),this.baseUrl=platform_1.platformDeps.buildBaseUrl(e.baseUrl).replace(/\/+$/,"");var s=buildDiscriminatedAuth((t=e.auth)!==null&&t!==void 0?t:{}),l=new KintoneRequestConfigBuilder_1.KintoneRequestConfigBuilder(__assign(__assign({},e),{baseUrl:this.baseUrl,auth:s})),f=new KintoneResponseHandler_1.KintoneResponseHandler({enableAbortSearchError:(i=(r=e.featureFlags)===null||r===void 0?void 0:r.enableAbortSearchError)!==null&&i!==void 0?i:!1}),h=new http_1.DefaultHttpClient({responseHandler:f,requestConfigBuilder:l}),p=e.guestSpaceId;this.bulkRequest_=new BulkRequestClient_1.BulkRequestClient(h,p),this.record=new RecordClient_1.RecordClient(h,this.bulkRequest_,p),this.app=new AppClient_1.AppClient(h,p),this.space=new SpaceClient_1.SpaceClient(h,p),this.file=new FileClient_1.FileClient(h,p)}return Object.defineProperty(n,"version",{get:function(){return platform_1.platformDeps.getVersion()},enumerable:!1,configurable:!0}),n.prototype.getBaseUrl=function(){return this.baseUrl},n.prototype.bulkRequest=function(e){return this.bulkRequest_.send(e)},n}();KintoneRestAPIClient$1.KintoneRestAPIClient=KintoneRestAPIClient;var validateOptions=function(n){validateBaseUrl(n.baseUrl),validateGuestSpaceId(n.guestSpaceId),validateSocketTimeout(n.socketTimeout)},validateBaseUrl=function(n){if(n!==void 0){var e=new URL(n);if(e.hostname!=="localhost"&&e.protocol!=="https:")throw new Error('The protocol of baseUrl must be "https".')}},validateGuestSpaceId=function(n){if(n===""||n===null)throw new Error("invalid guestSpaceId: got [".concat(n,"]"))},validateSocketTimeout=function(n){if(n!==void 0){var e=parseFloat(n.toString());if(isNaN(e)||e<0)throw new Error("Invalid socketTimeout. Must be a positive number.")}};(function(n){var e=commonjsGlobal&&commonjsGlobal.__createBinding||(Object.create?function(h,p,m,y){y===void 0&&(y=m);var A=Object.getOwnPropertyDescriptor(p,m);(!A||("get"in A?!p.__esModule:A.writable||A.configurable))&&(A={enumerable:!0,get:function(){return p[m]}}),Object.defineProperty(h,y,A)}:function(h,p,m,y){y===void 0&&(y=m),h[y]=p[m]}),t=commonjsGlobal&&commonjsGlobal.__setModuleDefault||(Object.create?function(h,p){Object.defineProperty(h,"default",{enumerable:!0,value:p})}:function(h,p){h.default=p}),r=commonjsGlobal&&commonjsGlobal.__importStar||function(h){if(h&&h.__esModule)return h;var p={};if(h!=null)for(var m in h)m!=="default"&&Object.prototype.hasOwnProperty.call(h,m)&&e(p,h,m);return t(p,h),p},i=commonjsGlobal&&commonjsGlobal.__exportStar||function(h,p){for(var m in h)m!=="default"&&!Object.prototype.hasOwnProperty.call(p,m)&&e(p,h,m)};Object.defineProperty(n,"__esModule",{value:!0}),n.KintoneRestAPIClient=void 0;var s=platform$2,l=r(browser$2);(0,s.injectPlatformDeps)(l);var f=KintoneRestAPIClient$1;Object.defineProperty(n,"KintoneRestAPIClient",{enumerable:!0,get:function(){return f.KintoneRestAPIClient}}),i(error,n)})(index_browser);var FieldType=(n=>(n.CALC="CALC",n.CATEGORY="CATEGORY",n.CHECK_BOX="CHECK_BOX",n.CREATED_TIME="CREATED_TIME",n.CREATOR="CREATOR",n.DATE="DATE",n.DATETIME="DATETIME",n.DROP_DOWN="DROP_DOWN",n.FILE="FILE",n.GROUP="GROUP",n.GROUP_SELECT="GROUP_SELECT",n.LINK="LINK",n.MODIFIER="MODIFIER",n.MULTI_LINE_TEXT="MULTI_LINE_TEXT",n.MULTI_SELECT="MULTI_SELECT",n.NUMBER="NUMBER",n.ORGANIZATION_SELECT="ORGANIZATION_SELECT",n.RADIO_BUTTON="RADIO_BUTTON",n.RECORD_NUMBER="RECORD_NUMBER",n.REFERENCE_TABLE="REFERENCE_TABLE",n.RICH_TEXT="RICH_TEXT",n.SINGLE_LINE_TEXT="SINGLE_LINE_TEXT",n.STATUS="STATUS",n.STATUS_ASSIGNEE="STATUS_ASSIGNEE",n.SUBTABLE="SUBTABLE",n.TIME="TIME",n.UPDATED_TIME="UPDATED_TIME",n.USER_SELECT="USER_SELECT",n))(FieldType||{}),CalcFormat=(n=>(n.NUMBER="NUMBER",n.NUMBER_DIGIT="NUMBER_DIGIT",n.DATETIME="DATETIME",n.DATE="DATE",n.TIME="TIME",n.HOUR_MINUTE="HOUR_MINUTE",n.DAY_HOUR_MINUTE="DAY_HOUR_MINUTE",n))(CalcFormat||{});class Aggregator{constructor(e,t){F(this,"data");F(this,"field");this.data=e,this.field=t}toNumberArray(){return this.data.map(t=>{const r=Number(t);if(isNaN(r))throw new Error(`フィールド「${this.field.code} 」は数値に変換できないため、計算を実行できません。`);return r})}sum(){return this.data.length===0?null:this.toNumberArray().reduce((t,r)=>t+r,0)}avg(){if(this.data.length===0)return null;const e=this.toNumberArray();return e.reduce((r,i)=>r+i,0)/e.length}max(){if(this.data.length===0)return null;if(this.field.type===FieldType.NUMBER){const e=this.toNumberArray();return Math.max(...e)}if(this.field.type===FieldType.CALC){const e=this.field;if(e.format===CalcFormat.NUMBER||e.format===CalcFormat.NUMBER_DIGIT){const t=this.toNumberArray();return Math.max(...t)}}return this.data.reduce((e,t)=>t>e?t:e,this.data[0])}min(){if(this.data.length===0)return null;if(this.field.type===FieldType.NUMBER){const e=this.toNumberArray();return Math.min(...e)}if(this.field.type===FieldType.CALC){const e=this.field;if(e.format===CalcFormat.NUMBER||e.format===CalcFormat.NUMBER_DIGIT){const t=this.toNumberArray();return Math.min(...t)}}return this.data===null||this.data.length===0?null:this.data.reduce((e,t)=>t<e?t:e,this.data[0])}count(){return this.data.length}first(){return this.data.length?this.data[0]:null}last(){return this.data.length?this.data[this.data.length-1]:null}calculate(e){switch(e){case"SUM":return this.sum();case"AVG":return this.avg();case"MAX":return this.max();case"MIN":return this.min();case"COUNT":return this.count();case"FIRST":return this.first();case"LAST":return this.last();default:return null}}}class DataProcessingAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");F(this,"getQuery",(e,t)=>{console.log(e);const r=/var\((.*?)\)/g;let i;for(;(i=r.exec(e))!==null;){const s=i[1];if(s in t)e=e.replace(i[0],t[s]);else throw new Error(`変数${s}が見つかりません`)}return console.log(e),e});F(this,"selectData",async e=>{const t=new index_browser.KintoneRestAPIClient,r=this.props.sources.fields.map(l=>l.code),i=await t.record.getAllRecords({app:this.props.sources.app.id,fields:r,condition:e}),s={};return i.forEach(l=>{for(const[f,h]of Object.entries(l))s[f]||(s[f]={type:h.type,value:[]}),s[f].value.push(h.value)}),s});this.name="データ処理",this.actionProps=[],this.props={displayName:"",condition:"",sources:{app:{id:""},fields:[]}},this.register()}async process(e,t,r){this.actionProps=e.actionProps,this.props=e.ActionValue;const i=JSON.parse(this.props.condition);let s={canNext:!0,result:""};try{if(!this.props)return s;const l=this.getQuery(i.queryString,r.variables),f=await this.selectData(l);if(console.log("data ",f),this.props.verName){const h=this.props.verName.vars.reduce((p,m)=>{const y=f[m.field.code].value,x=new Aggregator(y,m.field).calculate(m.logicalOperator.operator);return p[m.vName]=x,p},{});r.variables[this.props.verName.name]=h,console.log("context ",r)}return s}catch(l){return r.errors.handleError(l,e),s.canNext=!1,s}}register(){actionAddins[this.name]=this}}new DataProcessingAction;class DataUpdateAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"dataMappingProps");this.name="データ更新",this.actionProps=[],this.dataMappingProps={},this.register()}async process(e,t,r){this.actionProps=e.actionProps,this.dataMappingProps=e.ActionValue,console.log(r);let i={canNext:!0,result:""};try{const s=await getLookupFixedFieldCodes(this.dataMappingProps.sources.app.id);this.dataMappingProps.dataMapping.createWithNull?await doUpdate(this.dataMappingProps.dataMapping.data,this.dataMappingProps.sources.app.id,r,!0,s):this.dataMappingProps.dataMapping.data.map(l=>l.isKey).find(l=>l===!0)?await doUpdate(this.dataMappingProps.dataMapping.data,this.dataMappingProps.sources.app.id,r,!1,s):await doCreate(this.dataMappingProps.dataMapping.data,this.dataMappingProps.sources.app.id,r,s)}catch(s){r.errors.handleError(s,e),i.canNext=!1}return console.log("dataMappingProps",this.dataMappingProps),i}register(){actionAddins[this.name]=this}}new DataUpdateAction;const getContextVarByPath=(n,e)=>e.split(".").reduce((t,r)=>(t||{})[r],n),client=new index_browser.KintoneRestAPIClient,getFromValue=(n,e)=>{if(n.from.objectType==="variable"){const t=n.from;return getContextVarByPath(e.variables,t.name.name)}else if(n.from.objectType==="field"){const t=n.from;return e.record[t.code].value}else return n.from.sharedText},doUpdate=async(n,e,t,r,i)=>{const s=await findUpdateField(n,e,t);if(console.log(s),s.records.length===0&&r)await doCreate(n,e,t,i);else{const l=n.filter(h=>Object.keys(h.from).length>0&&!i.includes(h.to.fields[0].code)).map(h=>{if(h.from.objectType==="variable"){const p=h.from;return{value:getContextVarByPath(t.variables,p.name.name),code:h.to.fields[0].code}}else if(h.from.objectType==="field"){const p=h.from;return{value:t.record[p.code].value,code:h.to.fields[0].code}}else return{value:h.from.sharedText,code:h.to.fields[0].code}}),f=s.records.map(h=>{const p={};for(const m of l)h[m.code]&&(p[m.code]={value:m.value});return{id:h.$id.value,record:p}});console.log(f),await client.record.updateRecords({app:e,records:f})}},makeQuery=(n,e)=>{if(n.type===FieldType.NUMBER||n.type===FieldType.RECORD_NUMBER)return`${n.code} = ${Number(e)}`;if(typeof e=="string")return`${n.code} = "${e}"`},findUpdateField=async(n,e,t)=>{const r=n.filter(i=>i.to.app&&i.to.fields&&i.to.fields.length>0&&i.isKey).map(i=>{if(i.from.objectType==="variable"){const s=i.from;return makeQuery(i.to.fields[0],getContextVarByPath(t.variables,s.name.name))}else if(i.from.objectType==="field"){const s=i.from;return makeQuery(i.to.fields[0],t.record[s.code].value)}else return makeQuery(i.to.fields[0],i.from.sharedText)}).join("&");return r.length===0?{records:[]}:await client.record.getRecords({app:e,query:r})},doCreate=async(n,e,t,r)=>{const i=l=>!l.to.fields||l.to.fields.length===0?!1:!!(l.from.objectType==="variable"&&l.from.name.name||l.from.objectType==="field"&&l.from.code||l.from.objectType==="text"&&l.from.sharedText!==null),s=n.filter(i).filter(l=>!r.includes(l.to.fields[0].code)).reduce((l,f)=>({...l,[f.to.fields[0].code]:{value:getFromValue(f,t)}}),{});s&&Object.keys(s).length>0&&(console.log(s),await client.record.addRecord({app:e,record:s}))},getLookupFixedFieldCodes=async n=>await client.app.getFormFields({app:n}).then(e=>Object.values(e.properties).filter(t=>t.lookup!==void 0).flatMap(t=>t.lookup.fieldMappings.map(r=>r.field)));class CurrentFieldGetAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="フィールドの値を取得する",this.actionProps=[],this.props={},this.register()}async process(e,t,r){this.props=e.ActionValue,this.actionProps=e.actionProps;let i={canNext:!0,result:""};try{const s=t.record;if(!(this.props.field.code in s))throw new Error(`フィールド[${this.props.field.code}]が見つかりませんでした。`);this.props.verName&&this.props.verName.name!==""&&(r.variables[this.props.verName.name]=s[this.props.field.code].value)}catch(s){r.errors.handleError(s,e),i.canNext=!1}return i}register(){actionAddins[this.name]=this}}new CurrentFieldGetAction;class RegularCheckAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="正規表現チェック",this.actionProps=[],this.props={field:{code:""},message:"",regExpression:""},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("message"in e.ActionValue)&&!("regExpression"in e.ActionValue))return i;this.props=e.ActionValue;const s=t.record,l=s[this.props.field.code].value;return new RegExp(this.props.regExpression).test(l)?s[this.props.field.code].error=null:s[this.props.field.code].error=this.props.message,i={canNext:!0,result:!0},i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}register(){actionAddins[this.name]=this}}new RegularCheckAction;class MailCheckAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="メールアドレスチェック",this.actionProps=[],this.props={field:{code:""},message:"",emailCheck:""},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("message"in e.ActionValue)&&!("emailCheck"in e.ActionValue))return i;this.props=e.ActionValue;const s=t.record;if(!(this.props.field.code in s))throw new Error(`フィールド[${this.props.field.code}]が見つかりませんでした。`);const l=s[this.props.field.code].value;return this.props.emailCheck==="厳格"?/^[a-zA-Z0-9_-¥.]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+$/.test(l)?(s[this.props.field.code].error=null,i.result=!0):s[this.props.field.code].error=this.props.message:this.props.emailCheck==="ゆるめ"?/^[^@]+@[^@]+$/.test(l)?(s[this.props.field.code].error=null,i.result=!0):s[this.props.field.code].error=this.props.message:i={canNext:!0,result:!0},i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}register(){actionAddins[this.name]=this}}new MailCheckAction;class StrCountCheckAciton{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="文字数チェック",this.actionProps=[],this.props={field:{code:""},message:"",maxLength:0},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("message"in e.ActionValue)&&!("strExpression"in e.ActionValue))return i;this.props=e.ActionValue;const s=t.record,l=s[this.props.field.code].value,f=this.props.maxLength;return l===void 0||l===""||(f<l.length?s[this.props.field.code].error=this.props.message:s[this.props.field.code].error=null,i={canNext:!0,result:!0}),i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}register(){actionAddins[this.name]=this}}new StrCountCheckAciton;class DatetimeGetterAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="現在日時",this.actionProps=[],this.props={verName:{name:""}},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("verName"in e.ActionValue))return i;this.props=e.ActionValue;let s=new Date;return this.props.verName&&this.props.verName.name!==""&&(r.variables[this.props.verName.name]=s.toISOString()),i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}register(){actionAddins[this.name]=this}}new DatetimeGetterAction;class InsertValueAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="値を挿入する",this.actionProps=[],this.props={field:{code:""},condition:"",value:"",show:""},this.register()}checkInputValueBlank(e,t,r,i,s){let l;if(l=t.match(/(\s|\u3000)/),l!==null||t===null||t===""){if(e==="NUMBER"||e==="DATE"||e==="DATETIME"||e==="TIME"||e==="USER_SELECT"||e==="ORGANIZATION_SELECT"||e==="GROUP_SELECT"||e==="RADIO_BUTTON"||e==="DROP_DOWN"||e==="CHECK_BOX"||e==="MULTI_SELECT")throw s.record[r].error="「"+r+"」に挿入しようとした、値に空白文字が含まれています。",new Error("「"+r+"」に挿入しようとした、値に空白文字が含まれています。「値を挿入する」コンポーネントの処理を中断しました。");if(i)throw s.record[r].error="「"+r+"」フィールドは必須項目のため、空白文字は挿入できません。",new Error("「"+r+"」フィールドは必須項目のため、空白文字は挿入できません。「値を挿入する」コンポーネントの処理を中断しました。")}return!0}checkVariableValueBlank(e,t,r,i,s){let l,f;for(let h=0;h<t.length;h++)t[h]!==null&&t[h]!==void 0&&t[h]!==""?l=t[h].match(/(\s|\u3000)/):f=!0;if(l!==null||f||t.length===0){if(e==="NUMBER"||e==="DATE"||e==="DATETIME"||e==="TIME"||e==="USER_SELECT"||e==="ORGANIZATION_SELECT"||e==="GROUP_SELECT"||e==="RADIO_BUTTON"||e==="DROP_DOWN"||e==="CHECK_BOX"||e==="MULTI_SELECT")throw s.record[r].error="「"+r+"」に挿入しようとした、変数の値に空白文字が含まれています。",new Error("「"+r+"」に挿入しようとした、変数の値に空白文字が含まれています。「値を挿入する」コンポーネントの処理を中断しました。");if(i)throw s.record[r].error="「"+r+"」フィールドは必須項目であり、空白・空白文字の値の変数は、挿入できません。",new Error("「"+r+"」フィールドは必須項目であり、空白・空白文字の値の変数は、挿入できません。「値を挿入する」コンポーネントの処理を中断しました。")}return!0}checkInputNumber(e,t,r){let i=Number(e);if(!isFinite(i))throw r.record[t].error="「"+t+"」フィールドに入れようとした値は、無効な日付形式です。",new Error("「"+t+"」フィールドに入れようとした値は、有効な数値ではありません。「値を挿入する」コンポーネントの処理を中断しました。");return!0}checkInputDate(e,t,r){let i=e.match(/(\d{4})-(\d{2})-(\d{2})$/),s=e.match(/(\d{4})-(\d{1})-(\d{1})$/),l=e.match(/(\d{4})-(\d{1})-(\d{2})$/),f=e.match(/(\d{4})-(\d{2})-(\d{1})$/),h=e.match(/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}).(\d{2,3})Z$/),p=e.match(/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$/),m;if(m=new Date(e),m!==void 0&&!isNaN(m.getDate())&&i===null&&l===null&&f===null&&s===null&&p===null&&h===null)throw r.record[t].error="「"+t+"」フィールドに入れようとした値は、無効な日付形式です。",new Error("「"+t+"」フィールドに入れようとした値は、無効な日付形式です。「値を挿入する」コンポーネントの処理を中断しました。");return!0}checkInputTime(e,t,r){if(e.match(/^([0-9]|1[0-9]|2[0-3]):[0-5][0-9]$/)===null)throw r.record[t].error="「"+t+"」フィールドに入れようとした値は、無効な時刻形式です。",new Error("「"+t+"」フィールドに入れようとした値は、無効な時刻形式です。「値を挿入する」コンポーネントの処理を中断しました。「12桁 : 2桁」の値を指定してください。");return!0}changeDateFormat(e,t,r,i){let s,l;if(l=new Date(e),l!==void 0&&!isNaN(l.getDate())){if(t==="DATETIME")return s=l.toISOString(),s;let f=e.match(/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}).(\d{2,3})Z$/),h=e.match(/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})Z$/);if(f!==null||h!==null){let m=l.toLocaleString("ja-JP",{timeZone:"Asia/Tokyo"});console.log(m);let y=m.match(/(\d{4})\/(\d{1,2})\/(\d{1,2})/);if(y!==null){let A=1,x=2,S=3;return`${y[A]}-${y[x]}-${y[S]}`}}let p=e.match(/(\d{4})-(\d{1,2})-(\d{1,2})$/);if(p!==null){let m=1,y=2,A=3;return`${p[m]}-${p[y]}-${p[A]}`}}throw i.record[r].error="「"+r+"」フィールドに入れようとした値は、無効な日付形式です。",new Error("「"+r+"」フィールドに入れようとした値は、無効な日付形式です。「値を挿入する」コンポーネントの処理を中断しました。")}checkInputOption(e,t,r,i){if(t!==void 0){let l=Object.keys(t);for(var s in l)if(l[s]===e)return!0}throw i.record[r].error="「"+r+"」には、存在しない値を挿入しようとしたため、処理を中断しました。",new Error("「"+r+"」には、存在しない値を挿入しようとしたため、処理を中断しました。「値を挿入する」コンポーネントの処理を中断しました。")}async setInputUser(e){let t=[];try{let i=(await kintone.api(kintone.api.url("/v1/users",!0),"GET",{codes:e.join(",")})).users;if(i.length!==e.length)throw new Error;for(let s in i)for(let l in e)i[s].code===e[l]&&t.push(i[s].name);if(t===void 0)throw new Error}catch{return!1}return t}async setInputOrganization(e){let t;try{const i=await kintone.api(kintone.api.url("/v1/organizations.json",!0),"GET",{codes:[e]});if(i.organizations[0].code===e&&(t=i.organizations[0].name),t===void 0)throw new Error}catch{return!1}return t}async setInputGroup(e){let t;try{const i=await kintone.api(kintone.api.url("/v1/groups.json",!0),"GET",{codes:[e]});if(i.groups[0].code===e&&(t=i.groups[0].name),t===void 0)throw new Error}catch{return!1}return t}setValueOfUserObject(e,t,r,i){let s=[];if(r.includes("USER_SELECT"))if(!Array.isArray(t))s.push(t.code);else for(let l=0;l<t.length;l++)s.push(t[l].code);else if(e.includes(".name")||e.includes(".email")||e.includes(".employeeNumber")||e.includes(".extensionNumber")||e.includes(".id")||e.includes(".isGuest")||e.includes(".timezone")||e.includes(".language")||e.includes(".mobilePhone")||e.includes(".phone")||e.includes(".url")){let l=e.substr(e.indexOf(".")+1);if(!Array.isArray(t))s.push(t[l]);else for(let f=0;f<t.length;f++)s.push(t[f][l])}else if(!Array.isArray(t))s.push(t.code);else for(let l=0;l<t.length;l++)s.push(t[l].code);if(s===void 0)throw new Error("「"+i+"」フィールドに入れようとした変数は、無効な入力形式です。");return s}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("value"in e.ActionValue))return i;const l=1,f=3,h=this.actionProps[l].props.modelValue.type,p=this.actionProps[f].props.modelValue,m=this.getConditionResult(r);if(!m)return i;if(h===null)throw new Error("「値を挿入する」コンポーネントで、値を挿入するフィールドが指定されていなかったため、処理が中断されました。");if(h==="FILE"||h==="SUBTABLE"||h==="CATEGORY"||h==="STATUS"||h==="STATUS_ASSIGNEE"||h==="CREATOR"||h==="MODIFIER"||h==="__REVISION__"||h==="RECORD_NUMBER"||h==="__ID__"||h==="CALC"||h==="CREATED_TIME"||h==="UPDATED_TIME")throw new Error("「値を挿入する」コンポーネントで、選択されたフィールドは、値を挿入するコンポーネントでは非対応のフィールドのため、処理を中断しました。");this.props=e.ActionValue;let y=this.props.value;const A=this.props.field.type,x=this.props.field.required,S=this.props.field.code,C=this.props.show;let H=this.props.field.options,I,z=[],B,Q;if(C==="変数"&&m){const u=(Y,U)=>U.split(".").reduce((P,q)=>(P||{})[q],Y);var s=y.substr(0,y.indexOf("."));if(s?B=u(r.variables,s):B=u(r.variables,y),(B===""||B===null)&&(A==="NUMBER"||A==="DATE"||A==="DATETIME"||A==="TIME"||A==="USER_SELECT"||A==="ORGANIZATION_SELECT"||A==="GROUP_SELECT"||A==="RADIO_BUTTON"||A==="DROP_DOWN"||A==="CHECK_BOX"||A==="MULTI_SELECT"))throw new Error("「"+S+"」フィールドに挿入しようとした変数は、値がnullのため、処理を中断しました。");if(B!==null&&typeof B=="object"){let Y=[];if(B.length>0?Y=Object.keys(B[0]):Y=Object.keys(B),Y.includes("code")&&Y.includes("name")){B=this.setValueOfUserObject(y,B,A,S);for(const U of B)z.push(U)}}else I=r.variables[y],z[0]=I;if(z===void 0)throw new Error("「"+S+"」フィールドに入れようとした変数は、無効な入力形式です。");Q=this.checkVariableValueBlank(A,z,S,x,t)}else z.push(y),Q=this.checkInputValueBlank(A,y,S,x,t);let ee,V=[];if(m&&Q){if(A==="SINGLE_LINE_TEXT"||A==="MULTI_LINE_TEXT"||A==="RICH_TEXT"||A==="LINK")ee=z.join(",");else if(A==="NUMBER")this.checkInputNumber(z[0],S,t)&&(ee=Number(z[0]));else if(A==="DATE"||A==="DATETIME"){if(this.checkInputDate(z[0],S,t)){let u=this.changeDateFormat(z[0],A,S,t);u&&(ee=u)}}else if(A==="TIME")this.checkInputTime(z[0],S,t)&&(ee=z[0]);else if(A==="RADIO_BUTTON"||A==="DROP_DOWN")this.checkInputOption(z[0],H,S,t)&&(ee=z[0]);else if(A==="CHECK_BOX"||A==="MULTI_SELECT")this.checkInputOption(z[0],H,S,t)&&(V[0]=z[0]);else if(A==="USER_SELECT"){let u=await this.setInputUser(z);if(!u)throw t.record[S].error="ユーザー選択に、挿入しようとしたユーザー情報は見つかりませんでした。「値を挿入する」コンポーネントの処理を中断しました。",new Error("ユーザー選択に、挿入しようとしたユーザー情報は見つかりませんでした。「値を挿入する」コンポーネントの処理を中断しました。");for(let Y in z)V.push({code:z[Y],name:u[Y]})}else if(A==="ORGANIZATION_SELECT"){let u=await this.setInputOrganization(y);if(u)ee=[{code:y,name:u}];else throw t.record[S].error="組織選択フィールドに、挿入しようとした組織情報は見つかりませんでした。「値を挿入する」コンポーネントの処理を中断しました。",new Error("組織選択フィールドに、挿入しようとした組織情報は見つかりませんでした。「値を挿入する」コンポーネントの処理を中断しました。")}else if(A==="GROUP_SELECT"){let u=await this.setInputGroup(y);if(u)ee=[{code:y,name:u}];else throw t.record[S].error="グループ選択フィールドに、挿入しようとしたグループ情報は見つかりませんでした。「値を挿入する」コンポーネントの処理を中断しました。",new Error("グループ選択フィールドに、挿入しようとしたグループ情報は見つかりませんでした。「値を挿入する」コンポーネントの処理を中断しました。")}}if(!t.type.includes("success"))m&&(ee!==void 0?t.record[S].value=ee:t.record[S].value=V);else{async function u(Y,U,P){return new Promise((q,K)=>{var G={app:U.appId,id:U.recordId,record:{[Y]:{value:P}}};kintone.api(kintone.api.url("/k/v1/record",!0),"PUT",G,ie=>{q(ie)},ie=>{K(ie)})})}m&&(ee!==void 0?t.record[S].value=ee:t.record[S].value=V),ee!==void 0?await u(S,t,ee):await u(S,t,V)}return i={canNext:!0,result:!0},i}catch(l){return r.errors.handleError(l,e),i.canNext=!0,i}}getConditionResult(e){const t=this.getCondition(this.props.condition);return t?t.evaluate(t.root,e):!0}getCondition(e){try{const t=new ConditionTree;return t.fromJson(e),t.getConditions(t.root).length>0?t:null}catch{return null}}register(){actionAddins[this.name]=this}}new InsertValueAction;class GetValueAciton{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="値を取得する",this.actionProps=[],this.props={field:{code:""},verName:{name:""}},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("verName"in e.ActionValue))return i;this.props=e.ActionValue;const l=t.record[this.props.field.code].value;return this.props.verName&&this.props.verName.name!==""&&(r.variables[this.props.verName.name]=l),i={canNext:!0,result:!0},i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}register(){actionAddins[this.name]=this}}new GetValueAciton;class StringJoinAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="文字結合",this.actionProps=[],this.register(),this.props={saveField:{code:""},joinField1:{code:""},joinField2:{code:""},delimiter:""},this.register()}async process(e,t){let r={canNext:!1,result:!1};try{let i=function(x,S,C,H){var I,z,B,Q,ee,V,u,Y,U,P,q,K,G,ie,ue,de;if((((I=H.record[C])==null?void 0:I.value)===void 0||((z=H.record[C])==null?void 0:z.value)===null)&&(H.record[C].value=""),S==="CREATOR"||S==="MODIFIER")x=(B=H.record[C])==null?void 0:B.value.name;else if(S==="DATETIME"||S==="CREATED_TIME"||S==="UPDATED_TIME")((Q=H.record[C])==null?void 0:Q.value)!==void 0&&((ee=H.record[C])==null?void 0:ee.value)!==""?x=Formatter.dateFormat(new Date((V=H.record[C])==null?void 0:V.value),"yyyy-MM-dd HH:mm"):x=(u=H.record[C])==null?void 0:u.value;else if(S==="USER_SELECT"||S==="ORGANIZATION_SELECT"||S==="GROUP_SELECT"||S==="FILE"||S==="STATUS_ASSIGNEE")if(((Y=H.record[C])==null?void 0:Y.value)===void 0||((U=H.record[C])==null?void 0:U.value)==="")x=(P=H.record[C])==null?void 0:P.value;else{const le=(q=H.record[C])==null?void 0:q.value;let ve=[];for(let he=0;he<le.length;he++)ve.push(le[he].name);x=ve.join()}else if(S==="CATEGORY"||S==="CHECK_BOX"||S==="MULTI_SELECT")if(((K=H.record[C])==null?void 0:K.value)===void 0||((G=H.record[C])==null?void 0:G.value)==="")x=(ie=H.record[C])==null?void 0:ie.value;else{const le=(ue=H.record[C])==null?void 0:ue.value;let ve=[];for(let he=0;he<le.length;he++)ve.push(le[he]);x=ve.join()}else S==="STATUS"&&H.type.includes("process")?x=H.nextStatus.value:x=(de=H.record[C])==null?void 0:de.value;return x==null&&(x=""),x};if(this.actionProps=e.actionProps,!("saveField"in e.ActionValue)&&!("joinField1"in e.ActionValue)&&!("joinField2"in e.ActionValue))return r;this.props=e.ActionValue;const s=t.record,l=this.props.joinField1.type,f=this.props.joinField2.type,h=this.props.saveField.type;if(!(h==="SINGLE_LINE_TEXT"||h==="MULTI_LINE_TEXT"||h==="RICH_TEXT"))return t.error="[エラーメッセージ]:結合保存先対応不可。結合しません",t.type.includes("success")&&window.alert("[windows alert]"+t.error),r={canNext:!1,result:!1},r;let p="";p=i(p,l,this.props.joinField1.code,t);let m="";m=i(m,f,this.props.joinField2.code,t);const y=this.props.delimiter;let A="";if(p===""&&m===""?A="":p===""&&m!==""?A=m:m===""&&p!==""?A=p:p!==""&&m!==""&&(A=`${p}${y}${m}`),!t.type.includes("success"))s[this.props.saveField.code].value=A;else{async function x(S,C){return new Promise((H,I)=>{var z={app:C.appId,id:C.recordId,record:{[S]:{value:A}}};kintone.api(kintone.api.url("/k/v1/record",!0),"PUT",z,B=>{H(B)},B=>{I(B)})})}s[this.props.saveField.code].value=A,await x(this.props.saveField.code,t),t.type.includes("index")&&window.alert("文字結合には、一覧画面更新成功後自動リロードしません。必要に応じて手動リロードください。")}return r={canNext:!0,result:!0},r}catch(i){return t.type.includes("success")&&window.alert("[windows alert]処理中異常が発生しました。結合しません。システム担当者へお問合せください。errorメッセージ"+i),t.error="[エラーメッセージ]処理中異常が発生しました。結合しません。システム担当者へお問合せください。errorメッセージ"+i,{canNext:!1,result:!1}}}register(){actionAddins[this.name]=this}}new StringJoinAction;class FullWidthAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="全角チェック",this.actionProps=[],this.props={field:{code:""}},this.register()}async process(e,t,r){var s;let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue))return i;this.props=e.ActionValue;const l=t.record;if(!(this.props.field.code in l))throw new Error(`フィールド「${this.props.field.code}」が見つかりません。`);const f=(s=l[this.props.field.code])==null?void 0:s.value;return(f===void 0||f==="")&&(l[this.props.field.code].error=null),!this.containsFullWidthChars(f)&&!(f===void 0||f==="")?(l[this.props.field.code].error="半角が含まれています",i.canNext=!1):l[this.props.field.code].error=null,i={canNext:!0,result:!0},i}catch(l){return r.errors.handleError(l,e),i.canNext=!1,i}}containsFullWidthChars(e){const t="^[^-~。-゚]+$";return new RegExp(t).test(e)}register(){actionAddins[this.name]=this}}new FullWidthAction;class HalfWidthAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="半角チェック",this.actionProps=[],this.props={field:{code:""}},this.register()}async process(e,t,r){var s;let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue))return i;this.props=e.ActionValue;const l=t.record;if(!(this.props.field.code in l))throw new Error(`フィールド「${this.props.field.code}」が見つかりません。`);const f=(s=l[this.props.field.code])==null?void 0:s.value;return(f===void 0||f==="")&&(l[this.props.field.code].error=null),this.containsHalfWidthChars(f)?l[this.props.field.code].error=null:(l[this.props.field.code].error="全角が含まれています",i.canNext=!1),i={canNext:!0,result:!0},i}catch(l){return r.errors.handleError(l,e),i.canNext=!1,i}}containsHalfWidthChars(e){const t="^[-~。-゚]+$";return new RegExp(t).test(e)}register(){actionAddins[this.name]=this}}new HalfWidthAction;class LoginUserGetterAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="ログインユーザー取得",this.actionProps=[],this.register(),this.props={verName:{name:""}},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{return this.actionProps=e.actionProps,"verName"in e.ActionValue&&(this.props=e.ActionValue,this.props.verName&&this.props.verName.name!==""&&(r.variables[this.props.verName.name]=kintone.getLoginUser()),i={canNext:!0,result:!0}),i}catch(s){return r.errors.handleError(s,e),{canNext:!1,result:!1}}}register(){actionAddins[this.name]=this}}new LoginUserGetterAction;const autoLookup="";var modal={exports:{}},baseComponent={exports:{}},data={exports:{}};/*!
* Bootstrap data.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/var hasRequiredData;function requireData(){return hasRequiredData||(hasRequiredData=1,function(n,e){(function(t,r){n.exports=r()})(commonjsGlobal,function(){const t=new Map;return{set(i,s,l){t.has(i)||t.set(i,new Map);const f=t.get(i);if(!f.has(s)&&f.size!==0){console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(f.keys())[0]}.`);return}f.set(s,l)},get(i,s){return t.has(i)&&t.get(i).get(s)||null},remove(i,s){if(!t.has(i))return;const l=t.get(i);l.delete(s),l.size===0&&t.delete(i)}}})}(data)),data.exports}var eventHandler={exports:{}},util={exports:{}};/*!
* Bootstrap index.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/var hasRequiredUtil;function requireUtil(){return hasRequiredUtil||(hasRequiredUtil=1,function(n,e){(function(t,r){r(e)})(commonjsGlobal,function(t){const s="transitionend",l=P=>(P&&window.CSS&&window.CSS.escape&&(P=P.replace(/#([^\s"#']+)/g,(q,K)=>`#${CSS.escape(K)}`)),P),f=P=>P==null?`${P}`:Object.prototype.toString.call(P).match(/\s([a-z]+)/i)[1].toLowerCase(),h=P=>{do P+=Math.floor(Math.random()*1e6);while(document.getElementById(P));return P},p=P=>{if(!P)return 0;let{transitionDuration:q,transitionDelay:K}=window.getComputedStyle(P);const G=Number.parseFloat(q),ie=Number.parseFloat(K);return!G&&!ie?0:(q=q.split(",")[0],K=K.split(",")[0],(Number.parseFloat(q)+Number.parseFloat(K))*1e3)},m=P=>{P.dispatchEvent(new Event(s))},y=P=>!P||typeof P!="object"?!1:(typeof P.jquery<"u"&&(P=P[0]),typeof P.nodeType<"u"),A=P=>y(P)?P.jquery?P[0]:P:typeof P=="string"&&P.length>0?document.querySelector(l(P)):null,x=P=>{if(!y(P)||P.getClientRects().length===0)return!1;const q=getComputedStyle(P).getPropertyValue("visibility")==="visible",K=P.closest("details:not([open])");if(!K)return q;if(K!==P){const G=P.closest("summary");if(G&&G.parentNode!==K||G===null)return!1}return q},S=P=>!P||P.nodeType!==Node.ELEMENT_NODE||P.classList.contains("disabled")?!0:typeof P.disabled<"u"?P.disabled:P.hasAttribute("disabled")&&P.getAttribute("disabled")!=="false",C=P=>{if(!document.documentElement.attachShadow)return null;if(typeof P.getRootNode=="function"){const q=P.getRootNode();return q instanceof ShadowRoot?q:null}return P instanceof ShadowRoot?P:P.parentNode?C(P.parentNode):null},H=()=>{},I=P=>{P.offsetHeight},z=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,B=[],Q=P=>{document.readyState==="loading"?(B.length||document.addEventListener("DOMContentLoaded",()=>{for(const q of B)q()}),B.push(P)):P()},ee=()=>document.documentElement.dir==="rtl",V=P=>{Q(()=>{const q=z();if(q){const K=P.NAME,G=q.fn[K];q.fn[K]=P.jQueryInterface,q.fn[K].Constructor=P,q.fn[K].noConflict=()=>(q.fn[K]=G,P.jQueryInterface)}})},u=(P,q=[],K=P)=>typeof P=="function"?P(...q):K,Y=(P,q,K=!0)=>{if(!K){u(P);return}const G=5,ie=p(q)+G;let ue=!1;const de=({target:le})=>{le===q&&(ue=!0,q.removeEventListener(s,de),u(P))};q.addEventListener(s,de),setTimeout(()=>{ue||m(q)},ie)},U=(P,q,K,G)=>{const ie=P.length;let ue=P.indexOf(q);return ue===-1?!K&&G?P[ie-1]:P[0]:(ue+=K?1:-1,G&&(ue=(ue+ie)%ie),P[Math.max(0,Math.min(ue,ie-1))])};t.defineJQueryPlugin=V,t.execute=u,t.executeAfterTransition=Y,t.findShadowRoot=C,t.getElement=A,t.getNextActiveElement=U,t.getTransitionDurationFromElement=p,t.getUID=h,t.getjQuery=z,t.isDisabled=S,t.isElement=y,t.isRTL=ee,t.isVisible=x,t.noop=H,t.onDOMContentLoaded=Q,t.parseSelector=l,t.reflow=I,t.toType=f,t.triggerTransitionEnd=m,Object.defineProperty(t,Symbol.toStringTag,{value:"Module"})})}(util,util.exports)),util.exports}/*!
* Bootstrap event-handler.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/var hasRequiredEventHandler;function requireEventHandler(){return hasRequiredEventHandler||(hasRequiredEventHandler=1,function(n,e){(function(t,r){n.exports=r(requireUtil())})(commonjsGlobal,function(t){const r=/[^.]*(?=\..*)\.|.*/,i=/\..*/,s=/::\d+$/,l={};let f=1;const h={mouseenter:"mouseover",mouseleave:"mouseout"},p=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function m(V,u){return u&&`${u}::${f++}`||V.uidEvent||f++}function y(V){const u=m(V);return V.uidEvent=u,l[u]=l[u]||{},l[u]}function A(V,u){return function Y(U){return ee(U,{delegateTarget:V}),Y.oneOff&&Q.off(V,U.type,u),u.apply(V,[U])}}function x(V,u,Y){return function U(P){const q=V.querySelectorAll(u);for(let{target:K}=P;K&&K!==this;K=K.parentNode)for(const G of q)if(G===K)return ee(P,{delegateTarget:K}),U.oneOff&&Q.off(V,P.type,u,Y),Y.apply(K,[P])}}function S(V,u,Y=null){return Object.values(V).find(U=>U.callable===u&&U.delegationSelector===Y)}function C(V,u,Y){const U=typeof u=="string",P=U?Y:u||Y;let q=B(V);return p.has(q)||(q=V),[U,P,q]}function H(V,u,Y,U,P){if(typeof u!="string"||!V)return;let[q,K,G]=C(u,Y,U);u in h&&(K=(Re=>function(fe){if(!fe.relatedTarget||fe.relatedTarget!==fe.delegateTarget&&!fe.delegateTarget.contains(fe.relatedTarget))return Re.call(this,fe)})(K));const ie=y(V),ue=ie[G]||(ie[G]={}),de=S(ue,K,q?Y:null);if(de){de.oneOff=de.oneOff&&P;return}const le=m(K,u.replace(r,"")),ve=q?x(V,Y,K):A(V,K);ve.delegationSelector=q?Y:null,ve.callable=K,ve.oneOff=P,ve.uidEvent=le,ue[le]=ve,V.addEventListener(G,ve,q)}function I(V,u,Y,U,P){const q=S(u[Y],U,P);q&&(V.removeEventListener(Y,q,!!P),delete u[Y][q.uidEvent])}function z(V,u,Y,U){const P=u[Y]||{};for(const[q,K]of Object.entries(P))q.includes(U)&&I(V,u,Y,K.callable,K.delegationSelector)}function B(V){return V=V.replace(i,""),h[V]||V}const Q={on(V,u,Y,U){H(V,u,Y,U,!1)},one(V,u,Y,U){H(V,u,Y,U,!0)},off(V,u,Y,U){if(typeof u!="string"||!V)return;const[P,q,K]=C(u,Y,U),G=K!==u,ie=y(V),ue=ie[K]||{},de=u.startsWith(".");if(typeof q<"u"){if(!Object.keys(ue).length)return;I(V,ie,K,q,P?Y:null);return}if(de)for(const le of Object.keys(ie))z(V,ie,le,u.slice(1));for(const[le,ve]of Object.entries(ue)){const he=le.replace(s,"");(!G||u.includes(he))&&I(V,ie,K,ve.callable,ve.delegationSelector)}},trigger(V,u,Y){if(typeof u!="string"||!V)return null;const U=t.getjQuery(),P=B(u),q=u!==P;let K=null,G=!0,ie=!0,ue=!1;q&&U&&(K=U.Event(u,Y),U(V).trigger(K),G=!K.isPropagationStopped(),ie=!K.isImmediatePropagationStopped(),ue=K.isDefaultPrevented());const de=ee(new Event(u,{bubbles:G,cancelable:!0}),Y);return ue&&de.preventDefault(),ie&&V.dispatchEvent(de),de.defaultPrevented&&K&&K.preventDefault(),de}};function ee(V,u={}){for(const[Y,U]of Object.entries(u))try{V[Y]=U}catch{Object.defineProperty(V,Y,{configurable:!0,get(){return U}})}return V}return Q})}(eventHandler)),eventHandler.exports}var config={exports:{}},manipulator={exports:{}};/*!
* Bootstrap manipulator.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/var hasRequiredManipulator;function requireManipulator(){return hasRequiredManipulator||(hasRequiredManipulator=1,function(n,e){(function(t,r){n.exports=r()})(commonjsGlobal,function(){function t(s){if(s==="true")return!0;if(s==="false")return!1;if(s===Number(s).toString())return Number(s);if(s===""||s==="null")return null;if(typeof s!="string")return s;try{return JSON.parse(decodeURIComponent(s))}catch{return s}}function r(s){return s.replace(/[A-Z]/g,l=>`-${l.toLowerCase()}`)}return{setDataAttribute(s,l,f){s.setAttribute(`data-bs-${r(l)}`,f)},removeDataAttribute(s,l){s.removeAttribute(`data-bs-${r(l)}`)},getDataAttributes(s){if(!s)return{};const l={},f=Object.keys(s.dataset).filter(h=>h.startsWith("bs")&&!h.startsWith("bsConfig"));for(const h of f){let p=h.replace(/^bs/,"");p=p.charAt(0).toLowerCase()+p.slice(1,p.length),l[p]=t(s.dataset[h])}return l},getDataAttribute(s,l){return t(s.getAttribute(`data-bs-${r(l)}`))}}})}(manipulator)),manipulator.exports}/*!
* Bootstrap config.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/var hasRequiredConfig;function requireConfig(){return hasRequiredConfig||(hasRequiredConfig=1,function(n,e){(function(t,r){n.exports=r(requireManipulator(),requireUtil())})(commonjsGlobal,function(t,r){class i{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(l){return l=this._mergeConfigObj(l),l=this._configAfterMerge(l),this._typeCheckConfig(l),l}_configAfterMerge(l){return l}_mergeConfigObj(l,f){const h=r.isElement(f)?t.getDataAttribute(f,"config"):{};return{...this.constructor.Default,...typeof h=="object"?h:{},...r.isElement(f)?t.getDataAttributes(f):{},...typeof l=="object"?l:{}}}_typeCheckConfig(l,f=this.constructor.DefaultType){for(const[h,p]of Object.entries(f)){const m=l[h],y=r.isElement(m)?"element":r.toType(m);if(!new RegExp(p).test(y))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${h}" provided type "${y}" but expected type "${p}".`)}}}return i})}(config)),config.exports}/*!
* Bootstrap base-component.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/var hasRequiredBaseComponent;function requireBaseComponent(){return hasRequiredBaseComponent||(hasRequiredBaseComponent=1,function(n,e){(function(t,r){n.exports=r(requireData(),requireEventHandler(),requireConfig(),requireUtil())})(commonjsGlobal,function(t,r,i,s){const l="5.3.3";class f extends i{constructor(p,m){super(),p=s.getElement(p),p&&(this._element=p,this._config=this._getConfig(m),t.set(this._element,this.constructor.DATA_KEY,this))}dispose(){t.remove(this._element,this.constructor.DATA_KEY),r.off(this._element,this.constructor.EVENT_KEY);for(const p of Object.getOwnPropertyNames(this))this[p]=null}_queueCallback(p,m,y=!0){s.executeAfterTransition(p,m,y)}_getConfig(p){return p=this._mergeConfigObj(p,this._element),p=this._configAfterMerge(p),this._typeCheckConfig(p),p}static getInstance(p){return t.get(s.getElement(p),this.DATA_KEY)}static getOrCreateInstance(p,m={}){return this.getInstance(p)||new this(p,typeof m=="object"?m:null)}static get VERSION(){return l}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(p){return`${p}${this.EVENT_KEY}`}}return f})}(baseComponent)),baseComponent.exports}var selectorEngine={exports:{}};/*!
* Bootstrap selector-engine.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/var hasRequiredSelectorEngine;function requireSelectorEngine(){return hasRequiredSelectorEngine||(hasRequiredSelectorEngine=1,function(n,e){(function(t,r){n.exports=r(requireUtil())})(commonjsGlobal,function(t){const r=s=>{let l=s.getAttribute("data-bs-target");if(!l||l==="#"){let f=s.getAttribute("href");if(!f||!f.includes("#")&&!f.startsWith("."))return null;f.includes("#")&&!f.startsWith("#")&&(f=`#${f.split("#")[1]}`),l=f&&f!=="#"?f.trim():null}return l?l.split(",").map(f=>t.parseSelector(f)).join(","):null},i={find(s,l=document.documentElement){return[].concat(...Element.prototype.querySelectorAll.call(l,s))},findOne(s,l=document.documentElement){return Element.prototype.querySelector.call(l,s)},children(s,l){return[].concat(...s.children).filter(f=>f.matches(l))},parents(s,l){const f=[];let h=s.parentNode.closest(l);for(;h;)f.push(h),h=h.parentNode.closest(l);return f},prev(s,l){let f=s.previousElementSibling;for(;f;){if(f.matches(l))return[f];f=f.previousElementSibling}return[]},next(s,l){let f=s.nextElementSibling;for(;f;){if(f.matches(l))return[f];f=f.nextElementSibling}return[]},focusableChildren(s){const l=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(f=>`${f}:not([tabindex^="-"])`).join(",");return this.find(l,s).filter(f=>!t.isDisabled(f)&&t.isVisible(f))},getSelectorFromElement(s){const l=r(s);return l&&i.findOne(l)?l:null},getElementFromSelector(s){const l=r(s);return l?i.findOne(l):null},getMultipleElementsFromSelector(s){const l=r(s);return l?i.find(l):[]}};return i})}(selectorEngine)),selectorEngine.exports}var backdrop={exports:{}};/*!
* Bootstrap backdrop.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/var hasRequiredBackdrop;function requireBackdrop(){return hasRequiredBackdrop||(hasRequiredBackdrop=1,function(n,e){(function(t,r){n.exports=r(requireEventHandler(),requireConfig(),requireUtil())})(commonjsGlobal,function(t,r,i){const s="backdrop",l="fade",f="show",h=`mousedown.bs.${s}`,p={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},m={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class y extends r{constructor(x){super(),this._config=this._getConfig(x),this._isAppended=!1,this._element=null}static get Default(){return p}static get DefaultType(){return m}static get NAME(){return s}show(x){if(!this._config.isVisible){i.execute(x);return}this._append();const S=this._getElement();this._config.isAnimated&&i.reflow(S),S.classList.add(f),this._emulateAnimation(()=>{i.execute(x)})}hide(x){if(!this._config.isVisible){i.execute(x);return}this._getElement().classList.remove(f),this._emulateAnimation(()=>{this.dispose(),i.execute(x)})}dispose(){this._isAppended&&(t.off(this._element,h),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const x=document.createElement("div");x.className=this._config.className,this._config.isAnimated&&x.classList.add(l),this._element=x}return this._element}_configAfterMerge(x){return x.rootElement=i.getElement(x.rootElement),x}_append(){if(this._isAppended)return;const x=this._getElement();this._config.rootElement.append(x),t.on(x,h,()=>{i.execute(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(x){i.executeAfterTransition(x,this._getElement(),this._config.isAnimated)}}return y})}(backdrop)),backdrop.exports}var componentFunctions={exports:{}};/*!
* Bootstrap component-functions.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/var hasRequiredComponentFunctions;function requireComponentFunctions(){return hasRequiredComponentFunctions||(hasRequiredComponentFunctions=1,function(n,e){(function(t,r){r(e,requireEventHandler(),requireSelectorEngine(),requireUtil())})(commonjsGlobal,function(t,r,i,s){const l=(f,h="hide")=>{const p=`click.dismiss${f.EVENT_KEY}`,m=f.NAME;r.on(document,p,`[data-bs-dismiss="${m}"]`,function(y){if(["A","AREA"].includes(this.tagName)&&y.preventDefault(),s.isDisabled(this))return;const A=i.getElementFromSelector(this)||this.closest(`.${m}`);f.getOrCreateInstance(A)[h]()})};t.enableDismissTrigger=l,Object.defineProperty(t,Symbol.toStringTag,{value:"Module"})})}(componentFunctions,componentFunctions.exports)),componentFunctions.exports}var focustrap={exports:{}};/*!
* Bootstrap focustrap.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/var hasRequiredFocustrap;function requireFocustrap(){return hasRequiredFocustrap||(hasRequiredFocustrap=1,function(n,e){(function(t,r){n.exports=r(requireEventHandler(),requireSelectorEngine(),requireConfig())})(commonjsGlobal,function(t,r,i){const s="focustrap",f=".bs.focustrap",h=`focusin${f}`,p=`keydown.tab${f}`,m="Tab",y="forward",A="backward",x={autofocus:!0,trapElement:null},S={autofocus:"boolean",trapElement:"element"};class C extends i{constructor(I){super(),this._config=this._getConfig(I),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return x}static get DefaultType(){return S}static get NAME(){return s}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),t.off(document,f),t.on(document,h,I=>this._handleFocusin(I)),t.on(document,p,I=>this._handleKeydown(I)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,t.off(document,f))}_handleFocusin(I){const{trapElement:z}=this._config;if(I.target===document||I.target===z||z.contains(I.target))return;const B=r.focusableChildren(z);B.length===0?z.focus():this._lastTabNavDirection===A?B[B.length-1].focus():B[0].focus()}_handleKeydown(I){I.key===m&&(this._lastTabNavDirection=I.shiftKey?A:y)}}return C})}(focustrap)),focustrap.exports}var scrollbar={exports:{}};/*!
* Bootstrap scrollbar.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/var hasRequiredScrollbar;function requireScrollbar(){return hasRequiredScrollbar||(hasRequiredScrollbar=1,function(n,e){(function(t,r){n.exports=r(requireManipulator(),requireSelectorEngine(),requireUtil())})(commonjsGlobal,function(t,r,i){const s=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",l=".sticky-top",f="padding-right",h="margin-right";class p{constructor(){this._element=document.body}getWidth(){const y=document.documentElement.clientWidth;return Math.abs(window.innerWidth-y)}hide(){const y=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,f,A=>A+y),this._setElementAttributes(s,f,A=>A+y),this._setElementAttributes(l,h,A=>A-y)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,f),this._resetElementAttributes(s,f),this._resetElementAttributes(l,h)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(y,A,x){const S=this.getWidth(),C=H=>{if(H!==this._element&&window.innerWidth>H.clientWidth+S)return;this._saveInitialAttribute(H,A);const I=window.getComputedStyle(H).getPropertyValue(A);H.style.setProperty(A,`${x(Number.parseFloat(I))}px`)};this._applyManipulationCallback(y,C)}_saveInitialAttribute(y,A){const x=y.style.getPropertyValue(A);x&&t.setDataAttribute(y,A,x)}_resetElementAttributes(y,A){const x=S=>{const C=t.getDataAttribute(S,A);if(C===null){S.style.removeProperty(A);return}t.removeDataAttribute(S,A),S.style.setProperty(A,C)};this._applyManipulationCallback(y,x)}_applyManipulationCallback(y,A){if(i.isElement(y)){A(y);return}for(const x of r.find(y,this._element))A(x)}}return p})}(scrollbar)),scrollbar.exports}/*!
* Bootstrap modal.js v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/(function(n,e){(function(t,r){n.exports=r(requireBaseComponent(),requireEventHandler(),requireSelectorEngine(),requireBackdrop(),requireComponentFunctions(),requireFocustrap(),requireUtil(),requireScrollbar())})(commonjsGlobal,function(t,r,i,s,l,f,h,p){const m="modal",A=".bs.modal",x=".data-api",S="Escape",C=`hide${A}`,H=`hidePrevented${A}`,I=`hidden${A}`,z=`show${A}`,B=`shown${A}`,Q=`resize${A}`,ee=`click.dismiss${A}`,V=`mousedown.dismiss${A}`,u=`keydown.dismiss${A}`,Y=`click${A}${x}`,U="modal-open",P="fade",q="show",K="modal-static",G=".modal.show",ie=".modal-dialog",ue=".modal-body",de='[data-bs-toggle="modal"]',le={backdrop:!0,focus:!0,keyboard:!0},ve={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class he extends t{constructor(fe,be){super(fe,be),this._dialog=i.findOne(ie,this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new p,this._addEventListeners()}static get Default(){return le}static get DefaultType(){return ve}static get NAME(){return m}toggle(fe){return this._isShown?this.hide():this.show(fe)}show(fe){this._isShown||this._isTransitioning||r.trigger(this._element,z,{relatedTarget:fe}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(U),this._adjustDialog(),this._backdrop.show(()=>this._showElement(fe)))}hide(){!this._isShown||this._isTransitioning||r.trigger(this._element,C).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(q),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated()))}dispose(){r.off(window,A),r.off(this._dialog,A),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new s({isVisible:!!this._config.backdrop,isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new f({trapElement:this._element})}_showElement(fe){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const be=i.findOne(ue,this._dialog);be&&(be.scrollTop=0),h.reflow(this._element),this._element.classList.add(q);const we=()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,r.trigger(this._element,B,{relatedTarget:fe})};this._queueCallback(we,this._dialog,this._isAnimated())}_addEventListeners(){r.on(this._element,u,fe=>{if(fe.key===S){if(this._config.keyboard){this.hide();return}this._triggerBackdropTransition()}}),r.on(window,Q,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),r.on(this._element,V,fe=>{r.one(this._element,ee,be=>{if(!(this._element!==fe.target||this._element!==be.target)){if(this._config.backdrop==="static"){this._triggerBackdropTransition();return}this._config.backdrop&&this.hide()}})})}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(U),this._resetAdjustments(),this._scrollBar.reset(),r.trigger(this._element,I)})}_isAnimated(){return this._element.classList.contains(P)}_triggerBackdropTransition(){if(r.trigger(this._element,H).defaultPrevented)return;const be=this._element.scrollHeight>document.documentElement.clientHeight,we=this._element.style.overflowY;we==="hidden"||this._element.classList.contains(K)||(be||(this._element.style.overflowY="hidden"),this._element.classList.add(K),this._queueCallback(()=>{this._element.classList.remove(K),this._queueCallback(()=>{this._element.style.overflowY=we},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const fe=this._element.scrollHeight>document.documentElement.clientHeight,be=this._scrollBar.getWidth(),we=be>0;if(we&&!fe){const xe=h.isRTL()?"paddingLeft":"paddingRight";this._element.style[xe]=`${be}px`}if(!we&&fe){const xe=h.isRTL()?"paddingRight":"paddingLeft";this._element.style[xe]=`${be}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(fe,be){return this.each(function(){const we=he.getOrCreateInstance(this,fe);if(typeof fe=="string"){if(typeof we[fe]>"u")throw new TypeError(`No method named "${fe}"`);we[fe](be)}})}}return r.on(document,Y,de,function(Re){const fe=i.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&Re.preventDefault(),r.one(fe,z,xe=>{xe.defaultPrevented||r.one(fe,I,()=>{h.isVisible(this)&&this.focus()})});const be=i.findOne(G);be&&he.getInstance(be).hide(),he.getOrCreateInstance(fe).toggle(this)}),l.enableDismissTrigger(he),h.defineJQueryPlugin(he),he})})(modal);var top="top",bottom="bottom",right="right",left="left",auto="auto",basePlacements=[top,bottom,right,left],start="start",end="end",clippingParents="clippingParents",viewport="viewport",popper="popper",reference="reference",variationPlacements=basePlacements.reduce(function(n,e){return n.concat([e+"-"+start,e+"-"+end])},[]),placements=[].concat(basePlacements,[auto]).reduce(function(n,e){return n.concat([e,e+"-"+start,e+"-"+end])},[]),beforeRead="beforeRead",read="read",afterRead="afterRead",beforeMain="beforeMain",main="main",afterMain="afterMain",beforeWrite="beforeWrite",write="write",afterWrite="afterWrite",modifierPhases=[beforeRead,read,afterRead,beforeMain,main,afterMain,beforeWrite,write,afterWrite];function getNodeName(n){return n?(n.nodeName||"").toLowerCase():null}function getWindow(n){if(n==null)return window;if(n.toString()!=="[object Window]"){var e=n.ownerDocument;return e&&e.defaultView||window}return n}function isElement$1(n){var e=getWindow(n).Element;return n instanceof e||n instanceof Element}function isHTMLElement(n){var e=getWindow(n).HTMLElement;return n instanceof e||n instanceof HTMLElement}function isShadowRoot(n){if(typeof ShadowRoot>"u")return!1;var e=getWindow(n).ShadowRoot;return n instanceof e||n instanceof ShadowRoot}function applyStyles(n){var e=n.state;Object.keys(e.elements).forEach(function(t){var r=e.styles[t]||{},i=e.attributes[t]||{},s=e.elements[t];!isHTMLElement(s)||!getNodeName(s)||(Object.assign(s.style,r),Object.keys(i).forEach(function(l){var f=i[l];f===!1?s.removeAttribute(l):s.setAttribute(l,f===!0?"":f)}))})}function effect$2(n){var e=n.state,t={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,t.popper),e.styles=t,e.elements.arrow&&Object.assign(e.elements.arrow.style,t.arrow),function(){Object.keys(e.elements).forEach(function(r){var i=e.elements[r],s=e.attributes[r]||{},l=Object.keys(e.styles.hasOwnProperty(r)?e.styles[r]:t[r]),f=l.reduce(function(h,p){return h[p]="",h},{});!isHTMLElement(i)||!getNodeName(i)||(Object.assign(i.style,f),Object.keys(s).forEach(function(h){i.removeAttribute(h)}))})}}const applyStyles$1={name:"applyStyles",enabled:!0,phase:"write",fn:applyStyles,effect:effect$2,requires:["computeStyles"]};function getBasePlacement(n){return n.split("-")[0]}var max=Math.max,min=Math.min,round=Math.round;function getUAString(){var n=navigator.userAgentData;return n!=null&&n.brands&&Array.isArray(n.brands)?n.brands.map(function(e){return e.brand+"/"+e.version}).join(" "):navigator.userAgent}function isLayoutViewport(){return!/^((?!chrome|android).)*safari/i.test(getUAString())}function getBoundingClientRect(n,e,t){e===void 0&&(e=!1),t===void 0&&(t=!1);var r=n.getBoundingClientRect(),i=1,s=1;e&&isHTMLElement(n)&&(i=n.offsetWidth>0&&round(r.width)/n.offsetWidth||1,s=n.offsetHeight>0&&round(r.height)/n.offsetHeight||1);var l=isElement$1(n)?getWindow(n):window,f=l.visualViewport,h=!isLayoutViewport()&&t,p=(r.left+(h&&f?f.offsetLeft:0))/i,m=(r.top+(h&&f?f.offsetTop:0))/s,y=r.width/i,A=r.height/s;return{width:y,height:A,top:m,right:p+y,bottom:m+A,left:p,x:p,y:m}}function getLayoutRect(n){var e=getBoundingClientRect(n),t=n.offsetWidth,r=n.offsetHeight;return Math.abs(e.width-t)<=1&&(t=e.width),Math.abs(e.height-r)<=1&&(r=e.height),{x:n.offsetLeft,y:n.offsetTop,width:t,height:r}}function contains(n,e){var t=e.getRootNode&&e.getRootNode();if(n.contains(e))return!0;if(t&&isShadowRoot(t)){var r=e;do{if(r&&n.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function getComputedStyle$1(n){return getWindow(n).getComputedStyle(n)}function isTableElement(n){return["table","td","th"].indexOf(getNodeName(n))>=0}function getDocumentElement(n){return((isElement$1(n)?n.ownerDocument:n.document)||window.document).documentElement}function getParentNode(n){return getNodeName(n)==="html"?n:n.assignedSlot||n.parentNode||(isShadowRoot(n)?n.host:null)||getDocumentElement(n)}function getTrueOffsetParent(n){return!isHTMLElement(n)||getComputedStyle$1(n).position==="fixed"?null:n.offsetParent}function getContainingBlock(n){var e=/firefox/i.test(getUAString()),t=/Trident/i.test(getUAString());if(t&&isHTMLElement(n)){var r=getComputedStyle$1(n);if(r.position==="fixed")return null}var i=getParentNode(n);for(isShadowRoot(i)&&(i=i.host);isHTMLElement(i)&&["html","body"].indexOf(getNodeName(i))<0;){var s=getComputedStyle$1(i);if(s.transform!=="none"||s.perspective!=="none"||s.contain==="paint"||["transform","perspective"].indexOf(s.willChange)!==-1||e&&s.willChange==="filter"||e&&s.filter&&s.filter!=="none")return i;i=i.parentNode}return null}function getOffsetParent(n){for(var e=getWindow(n),t=getTrueOffsetParent(n);t&&isTableElement(t)&&getComputedStyle$1(t).position==="static";)t=getTrueOffsetParent(t);return t&&(getNodeName(t)==="html"||getNodeName(t)==="body"&&getComputedStyle$1(t).position==="static")?e:t||getContainingBlock(n)||e}function getMainAxisFromPlacement(n){return["top","bottom"].indexOf(n)>=0?"x":"y"}function within(n,e,t){return max(n,min(e,t))}function withinMaxClamp(n,e,t){var r=within(n,e,t);return r>t?t:r}function getFreshSideObject(){return{top:0,right:0,bottom:0,left:0}}function mergePaddingObject(n){return Object.assign({},getFreshSideObject(),n)}function expandToHashMap(n,e){return e.reduce(function(t,r){return t[r]=n,t},{})}var toPaddingObject=function n(e,t){return e=typeof e=="function"?e(Object.assign({},t.rects,{placement:t.placement})):e,mergePaddingObject(typeof e!="number"?e:expandToHashMap(e,basePlacements))};function arrow(n){var e,t=n.state,r=n.name,i=n.options,s=t.elements.arrow,l=t.modifiersData.popperOffsets,f=getBasePlacement(t.placement),h=getMainAxisFromPlacement(f),p=[left,right].indexOf(f)>=0,m=p?"height":"width";if(!(!s||!l)){var y=toPaddingObject(i.padding,t),A=getLayoutRect(s),x=h==="y"?top:left,S=h==="y"?bottom:right,C=t.rects.reference[m]+t.rects.reference[h]-l[h]-t.rects.popper[m],H=l[h]-t.rects.reference[h],I=getOffsetParent(s),z=I?h==="y"?I.clientHeight||0:I.clientWidth||0:0,B=C/2-H/2,Q=y[x],ee=z-A[m]-y[S],V=z/2-A[m]/2+B,u=within(Q,V,ee),Y=h;t.modifiersData[r]=(e={},e[Y]=u,e.centerOffset=u-V,e)}}function effect$1(n){var e=n.state,t=n.options,r=t.element,i=r===void 0?"[data-popper-arrow]":r;i!=null&&(typeof i=="string"&&(i=e.elements.popper.querySelector(i),!i)||contains(e.elements.popper,i)&&(e.elements.arrow=i))}const arrow$1={name:"arrow",enabled:!0,phase:"main",fn:arrow,effect:effect$1,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function getVariation(n){return n.split("-")[1]}var unsetSides={top:"auto",right:"auto",bottom:"auto",left:"auto"};function roundOffsetsByDPR(n,e){var t=n.x,r=n.y,i=e.devicePixelRatio||1;return{x:round(t*i)/i||0,y:round(r*i)/i||0}}function mapToStyles(n){var e,t=n.popper,r=n.popperRect,i=n.placement,s=n.variation,l=n.offsets,f=n.position,h=n.gpuAcceleration,p=n.adaptive,m=n.roundOffsets,y=n.isFixed,A=l.x,x=A===void 0?0:A,S=l.y,C=S===void 0?0:S,H=typeof m=="function"?m({x,y:C}):{x,y:C};x=H.x,C=H.y;var I=l.hasOwnProperty("x"),z=l.hasOwnProperty("y"),B=left,Q=top,ee=window;if(p){var V=getOffsetParent(t),u="clientHeight",Y="clientWidth";if(V===getWindow(t)&&(V=getDocumentElement(t),getComputedStyle$1(V).position!=="static"&&f==="absolute"&&(u="scrollHeight",Y="scrollWidth")),V=V,i===top||(i===left||i===right)&&s===end){Q=bottom;var U=y&&V===ee&&ee.visualViewport?ee.visualViewport.height:V[u];C-=U-r.height,C*=h?1:-1}if(i===left||(i===top||i===bottom)&&s===end){B=right;var P=y&&V===ee&&ee.visualViewport?ee.visualViewport.width:V[Y];x-=P-r.width,x*=h?1:-1}}var q=Object.assign({position:f},p&&unsetSides),K=m===!0?roundOffsetsByDPR({x,y:C},getWindow(t)):{x,y:C};if(x=K.x,C=K.y,h){var G;return Object.assign({},q,(G={},G[Q]=z?"0":"",G[B]=I?"0":"",G.transform=(ee.devicePixelRatio||1)<=1?"translate("+x+"px, "+C+"px)":"translate3d("+x+"px, "+C+"px, 0)",G))}return Object.assign({},q,(e={},e[Q]=z?C+"px":"",e[B]=I?x+"px":"",e.transform="",e))}function computeStyles(n){var e=n.state,t=n.options,r=t.gpuAcceleration,i=r===void 0?!0:r,s=t.adaptive,l=s===void 0?!0:s,f=t.roundOffsets,h=f===void 0?!0:f,p={placement:getBasePlacement(e.placement),variation:getVariation(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:i,isFixed:e.options.strategy==="fixed"};e.modifiersData.popperOffsets!=null&&(e.styles.popper=Object.assign({},e.styles.popper,mapToStyles(Object.assign({},p,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:l,roundOffsets:h})))),e.modifiersData.arrow!=null&&(e.styles.arrow=Object.assign({},e.styles.arrow,mapToStyles(Object.assign({},p,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:h})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})}const computeStyles$1={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:computeStyles,data:{}};var passive={passive:!0};function effect(n){var e=n.state,t=n.instance,r=n.options,i=r.scroll,s=i===void 0?!0:i,l=r.resize,f=l===void 0?!0:l,h=getWindow(e.elements.popper),p=[].concat(e.scrollParents.reference,e.scrollParents.popper);return s&&p.forEach(function(m){m.addEventListener("scroll",t.update,passive)}),f&&h.addEventListener("resize",t.update,passive),function(){s&&p.forEach(function(m){m.removeEventListener("scroll",t.update,passive)}),f&&h.removeEventListener("resize",t.update,passive)}}const eventListeners={name:"eventListeners",enabled:!0,phase:"write",fn:function n(){},effect,data:{}};var hash$1={left:"right",right:"left",bottom:"top",top:"bottom"};function getOppositePlacement(n){return n.replace(/left|right|bottom|top/g,function(e){return hash$1[e]})}var hash={start:"end",end:"start"};function getOppositeVariationPlacement(n){return n.replace(/start|end/g,function(e){return hash[e]})}function getWindowScroll(n){var e=getWindow(n),t=e.pageXOffset,r=e.pageYOffset;return{scrollLeft:t,scrollTop:r}}function getWindowScrollBarX(n){return getBoundingClientRect(getDocumentElement(n)).left+getWindowScroll(n).scrollLeft}function getViewportRect(n,e){var t=getWindow(n),r=getDocumentElement(n),i=t.visualViewport,s=r.clientWidth,l=r.clientHeight,f=0,h=0;if(i){s=i.width,l=i.height;var p=isLayoutViewport();(p||!p&&e==="fixed")&&(f=i.offsetLeft,h=i.offsetTop)}return{width:s,height:l,x:f+getWindowScrollBarX(n),y:h}}function getDocumentRect(n){var e,t=getDocumentElement(n),r=getWindowScroll(n),i=(e=n.ownerDocument)==null?void 0:e.body,s=max(t.scrollWidth,t.clientWidth,i?i.scrollWidth:0,i?i.clientWidth:0),l=max(t.scrollHeight,t.clientHeight,i?i.scrollHeight:0,i?i.clientHeight:0),f=-r.scrollLeft+getWindowScrollBarX(n),h=-r.scrollTop;return getComputedStyle$1(i||t).direction==="rtl"&&(f+=max(t.clientWidth,i?i.clientWidth:0)-s),{width:s,height:l,x:f,y:h}}function isScrollParent(n){var e=getComputedStyle$1(n),t=e.overflow,r=e.overflowX,i=e.overflowY;return/auto|scroll|overlay|hidden/.test(t+i+r)}function getScrollParent(n){return["html","body","#document"].indexOf(getNodeName(n))>=0?n.ownerDocument.body:isHTMLElement(n)&&isScrollParent(n)?n:getScrollParent(getParentNode(n))}function listScrollParents(n,e){var t;e===void 0&&(e=[]);var r=getScrollParent(n),i=r===((t=n.ownerDocument)==null?void 0:t.body),s=getWindow(r),l=i?[s].concat(s.visualViewport||[],isScrollParent(r)?r:[]):r,f=e.concat(l);return i?f:f.concat(listScrollParents(getParentNode(l)))}function rectToClientRect(n){return Object.assign({},n,{left:n.x,top:n.y,right:n.x+n.width,bottom:n.y+n.height})}function getInnerBoundingClientRect(n,e){var t=getBoundingClientRect(n,!1,e==="fixed");return t.top=t.top+n.clientTop,t.left=t.left+n.clientLeft,t.bottom=t.top+n.clientHeight,t.right=t.left+n.clientWidth,t.width=n.clientWidth,t.height=n.clientHeight,t.x=t.left,t.y=t.top,t}function getClientRectFromMixedType(n,e,t){return e===viewport?rectToClientRect(getViewportRect(n,t)):isElement$1(e)?getInnerBoundingClientRect(e,t):rectToClientRect(getDocumentRect(getDocumentElement(n)))}function getClippingParents(n){var e=listScrollParents(getParentNode(n)),t=["absolute","fixed"].indexOf(getComputedStyle$1(n).position)>=0,r=t&&isHTMLElement(n)?getOffsetParent(n):n;return isElement$1(r)?e.filter(function(i){return isElement$1(i)&&contains(i,r)&&getNodeName(i)!=="body"}):[]}function getClippingRect(n,e,t,r){var i=e==="clippingParents"?getClippingParents(n):[].concat(e),s=[].concat(i,[t]),l=s[0],f=s.reduce(function(h,p){var m=getClientRectFromMixedType(n,p,r);return h.top=max(m.top,h.top),h.right=min(m.right,h.right),h.bottom=min(m.bottom,h.bottom),h.left=max(m.left,h.left),h},getClientRectFromMixedType(n,l,r));return f.width=f.right-f.left,f.height=f.bottom-f.top,f.x=f.left,f.y=f.top,f}function computeOffsets(n){var e=n.reference,t=n.element,r=n.placement,i=r?getBasePlacement(r):null,s=r?getVariation(r):null,l=e.x+e.width/2-t.width/2,f=e.y+e.height/2-t.height/2,h;switch(i){case top:h={x:l,y:e.y-t.height};break;case bottom:h={x:l,y:e.y+e.height};break;case right:h={x:e.x+e.width,y:f};break;case left:h={x:e.x-t.width,y:f};break;default:h={x:e.x,y:e.y}}var p=i?getMainAxisFromPlacement(i):null;if(p!=null){var m=p==="y"?"height":"width";switch(s){case start:h[p]=h[p]-(e[m]/2-t[m]/2);break;case end:h[p]=h[p]+(e[m]/2-t[m]/2);break}}return h}function detectOverflow(n,e){e===void 0&&(e={});var t=e,r=t.placement,i=r===void 0?n.placement:r,s=t.strategy,l=s===void 0?n.strategy:s,f=t.boundary,h=f===void 0?clippingParents:f,p=t.rootBoundary,m=p===void 0?viewport:p,y=t.elementContext,A=y===void 0?popper:y,x=t.altBoundary,S=x===void 0?!1:x,C=t.padding,H=C===void 0?0:C,I=mergePaddingObject(typeof H!="number"?H:expandToHashMap(H,basePlacements)),z=A===popper?reference:popper,B=n.rects.popper,Q=n.elements[S?z:A],ee=getClippingRect(isElement$1(Q)?Q:Q.contextElement||getDocumentElement(n.elements.popper),h,m,l),V=getBoundingClientRect(n.elements.reference),u=computeOffsets({reference:V,element:B,strategy:"absolute",placement:i}),Y=rectToClientRect(Object.assign({},B,u)),U=A===popper?Y:V,P={top:ee.top-U.top+I.top,bottom:U.bottom-ee.bottom+I.bottom,left:ee.left-U.left+I.left,right:U.right-ee.right+I.right},q=n.modifiersData.offset;if(A===popper&&q){var K=q[i];Object.keys(P).forEach(function(G){var ie=[right,bottom].indexOf(G)>=0?1:-1,ue=[top,bottom].indexOf(G)>=0?"y":"x";P[G]+=K[ue]*ie})}return P}function computeAutoPlacement(n,e){e===void 0&&(e={});var t=e,r=t.placement,i=t.boundary,s=t.rootBoundary,l=t.padding,f=t.flipVariations,h=t.allowedAutoPlacements,p=h===void 0?placements:h,m=getVariation(r),y=m?f?variationPlacements:variationPlacements.filter(function(S){return getVariation(S)===m}):basePlacements,A=y.filter(function(S){return p.indexOf(S)>=0});A.length===0&&(A=y);var x=A.reduce(function(S,C){return S[C]=detectOverflow(n,{placement:C,boundary:i,rootBoundary:s,padding:l})[getBasePlacement(C)],S},{});return Object.keys(x).sort(function(S,C){return x[S]-x[C]})}function getExpandedFallbackPlacements(n){if(getBasePlacement(n)===auto)return[];var e=getOppositePlacement(n);return[getOppositeVariationPlacement(n),e,getOppositeVariationPlacement(e)]}function flip(n){var e=n.state,t=n.options,r=n.name;if(!e.modifiersData[r]._skip){for(var i=t.mainAxis,s=i===void 0?!0:i,l=t.altAxis,f=l===void 0?!0:l,h=t.fallbackPlacements,p=t.padding,m=t.boundary,y=t.rootBoundary,A=t.altBoundary,x=t.flipVariations,S=x===void 0?!0:x,C=t.allowedAutoPlacements,H=e.options.placement,I=getBasePlacement(H),z=I===H,B=h||(z||!S?[getOppositePlacement(H)]:getExpandedFallbackPlacements(H)),Q=[H].concat(B).reduce(function(xe,j){return xe.concat(getBasePlacement(j)===auto?computeAutoPlacement(e,{placement:j,boundary:m,rootBoundary:y,padding:p,flipVariations:S,allowedAutoPlacements:C}):j)},[]),ee=e.rects.reference,V=e.rects.popper,u=new Map,Y=!0,U=Q[0],P=0;P<Q.length;P++){var q=Q[P],K=getBasePlacement(q),G=getVariation(q)===start,ie=[top,bottom].indexOf(K)>=0,ue=ie?"width":"height",de=detectOverflow(e,{placement:q,boundary:m,rootBoundary:y,altBoundary:A,padding:p}),le=ie?G?right:left:G?bottom:top;ee[ue]>V[ue]&&(le=getOppositePlacement(le));var ve=getOppositePlacement(le),he=[];if(s&&he.push(de[K]<=0),f&&he.push(de[le]<=0,de[ve]<=0),he.every(function(xe){return xe})){U=q,Y=!1;break}u.set(q,he)}if(Y)for(var Re=S?3:1,fe=function(j){var te=Q.find(function(Se){var $e=u.get(Se);if($e)return $e.slice(0,j).every(function(Me){return Me})});if(te)return U=te,"break"},be=Re;be>0;be--){var we=fe(be);if(we==="break")break}e.placement!==U&&(e.modifiersData[r]._skip=!0,e.placement=U,e.reset=!0)}}const flip$1={name:"flip",enabled:!0,phase:"main",fn:flip,requiresIfExists:["offset"],data:{_skip:!1}};function getSideOffsets(n,e,t){return t===void 0&&(t={x:0,y:0}),{top:n.top-e.height-t.y,right:n.right-e.width+t.x,bottom:n.bottom-e.height+t.y,left:n.left-e.width-t.x}}function isAnySideFullyClipped(n){return[top,right,bottom,left].some(function(e){return n[e]>=0})}function hide(n){var e=n.state,t=n.name,r=e.rects.reference,i=e.rects.popper,s=e.modifiersData.preventOverflow,l=detectOverflow(e,{elementContext:"reference"}),f=detectOverflow(e,{altBoundary:!0}),h=getSideOffsets(l,r),p=getSideOffsets(f,i,s),m=isAnySideFullyClipped(h),y=isAnySideFullyClipped(p);e.modifiersData[t]={referenceClippingOffsets:h,popperEscapeOffsets:p,isReferenceHidden:m,hasPopperEscaped:y},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":m,"data-popper-escaped":y})}const hide$1={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:hide};function distanceAndSkiddingToXY(n,e,t){var r=getBasePlacement(n),i=[left,top].indexOf(r)>=0?-1:1,s=typeof t=="function"?t(Object.assign({},e,{placement:n})):t,l=s[0],f=s[1];return l=l||0,f=(f||0)*i,[left,right].indexOf(r)>=0?{x:f,y:l}:{x:l,y:f}}function offset(n){var e=n.state,t=n.options,r=n.name,i=t.offset,s=i===void 0?[0,0]:i,l=placements.reduce(function(m,y){return m[y]=distanceAndSkiddingToXY(y,e.rects,s),m},{}),f=l[e.placement],h=f.x,p=f.y;e.modifiersData.popperOffsets!=null&&(e.modifiersData.popperOffsets.x+=h,e.modifiersData.popperOffsets.y+=p),e.modifiersData[r]=l}const offset$1={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:offset};function popperOffsets(n){var e=n.state,t=n.name;e.modifiersData[t]=computeOffsets({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})}const popperOffsets$1={name:"popperOffsets",enabled:!0,phase:"read",fn:popperOffsets,data:{}};function getAltAxis(n){return n==="x"?"y":"x"}function preventOverflow(n){var e=n.state,t=n.options,r=n.name,i=t.mainAxis,s=i===void 0?!0:i,l=t.altAxis,f=l===void 0?!1:l,h=t.boundary,p=t.rootBoundary,m=t.altBoundary,y=t.padding,A=t.tether,x=A===void 0?!0:A,S=t.tetherOffset,C=S===void 0?0:S,H=detectOverflow(e,{boundary:h,rootBoundary:p,padding:y,altBoundary:m}),I=getBasePlacement(e.placement),z=getVariation(e.placement),B=!z,Q=getMainAxisFromPlacement(I),ee=getAltAxis(Q),V=e.modifiersData.popperOffsets,u=e.rects.reference,Y=e.rects.popper,U=typeof C=="function"?C(Object.assign({},e.rects,{placement:e.placement})):C,P=typeof U=="number"?{mainAxis:U,altAxis:U}:Object.assign({mainAxis:0,altAxis:0},U),q=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,K={x:0,y:0};if(V){if(s){var G,ie=Q==="y"?top:left,ue=Q==="y"?bottom:right,de=Q==="y"?"height":"width",le=V[Q],ve=le+H[ie],he=le-H[ue],Re=x?-Y[de]/2:0,fe=z===start?u[de]:Y[de],be=z===start?-Y[de]:-u[de],we=e.elements.arrow,xe=x&&we?getLayoutRect(we):{width:0,height:0},j=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:getFreshSideObject(),te=j[ie],Se=j[ue],$e=within(0,u[de],xe[de]),Me=B?u[de]/2-Re-$e-te-P.mainAxis:fe-$e-te-P.mainAxis,Oe=B?-u[de]/2+Re+$e+Se+P.mainAxis:be+$e+Se+P.mainAxis,Ze=e.elements.arrow&&getOffsetParent(e.elements.arrow),Be=Ze?Q==="y"?Ze.clientTop||0:Ze.clientLeft||0:0,ct=(G=q==null?void 0:q[Q])!=null?G:0,Lt=le+Me-ct-Be,Kt=le+Oe-ct,gt=within(x?min(ve,Lt):ve,le,x?max(he,Kt):he);V[Q]=gt,K[Q]=gt-le}if(f){var ut,Ge=Q==="x"?top:left,Yt=Q==="x"?bottom:right,et=V[ee],Et=ee==="y"?"height":"width",Fe=et+H[Ge],ot=et-H[Yt],tt=[top,left].indexOf(I)!==-1,re=(ut=q==null?void 0:q[ee])!=null?ut:0,De=tt?Fe:et-u[Et]-Y[Et]-re+P.altAxis,Mt=tt?et+u[Et]+Y[Et]-re-P.altAxis:ot,kt=x&&tt?withinMaxClamp(De,et,Mt):within(x?De:Fe,et,x?Mt:ot);V[ee]=kt,K[ee]=kt-et}e.modifiersData[r]=K}}const preventOverflow$1={name:"preventOverflow",enabled:!0,phase:"main",fn:preventOverflow,requiresIfExists:["offset"]};function getHTMLElementScroll(n){return{scrollLeft:n.scrollLeft,scrollTop:n.scrollTop}}function getNodeScroll(n){return n===getWindow(n)||!isHTMLElement(n)?getWindowScroll(n):getHTMLElementScroll(n)}function isElementScaled(n){var e=n.getBoundingClientRect(),t=round(e.width)/n.offsetWidth||1,r=round(e.height)/n.offsetHeight||1;return t!==1||r!==1}function getCompositeRect(n,e,t){t===void 0&&(t=!1);var r=isHTMLElement(e),i=isHTMLElement(e)&&isElementScaled(e),s=getDocumentElement(e),l=getBoundingClientRect(n,i,t),f={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(r||!r&&!t)&&((getNodeName(e)!=="body"||isScrollParent(s))&&(f=getNodeScroll(e)),isHTMLElement(e)?(h=getBoundingClientRect(e,!0),h.x+=e.clientLeft,h.y+=e.clientTop):s&&(h.x=getWindowScrollBarX(s))),{x:l.left+f.scrollLeft-h.x,y:l.top+f.scrollTop-h.y,width:l.width,height:l.height}}function order(n){var e=new Map,t=new Set,r=[];n.forEach(function(s){e.set(s.name,s)});function i(s){t.add(s.name);var l=[].concat(s.requires||[],s.requiresIfExists||[]);l.forEach(function(f){if(!t.has(f)){var h=e.get(f);h&&i(h)}}),r.push(s)}return n.forEach(function(s){t.has(s.name)||i(s)}),r}function orderModifiers(n){var e=order(n);return modifierPhases.reduce(function(t,r){return t.concat(e.filter(function(i){return i.phase===r}))},[])}function debounce(n){var e;return function(){return e||(e=new Promise(function(t){Promise.resolve().then(function(){e=void 0,t(n())})})),e}}function mergeByName(n){var e=n.reduce(function(t,r){var i=t[r.name];return t[r.name]=i?Object.assign({},i,r,{options:Object.assign({},i.options,r.options),data:Object.assign({},i.data,r.data)}):r,t},{});return Object.keys(e).map(function(t){return e[t]})}var DEFAULT_OPTIONS={placement:"bottom",modifiers:[],strategy:"absolute"};function areValidElements(){for(var n=arguments.length,e=new Array(n),t=0;t<n;t++)e[t]=arguments[t];return!e.some(function(r){return!(r&&typeof r.getBoundingClientRect=="function")})}function popperGenerator(n){n===void 0&&(n={});var e=n,t=e.defaultModifiers,r=t===void 0?[]:t,i=e.defaultOptions,s=i===void 0?DEFAULT_OPTIONS:i;return function(f,h,p){p===void 0&&(p=s);var m={placement:"bottom",orderedModifiers:[],options:Object.assign({},DEFAULT_OPTIONS,s),modifiersData:{},elements:{reference:f,popper:h},attributes:{},styles:{}},y=[],A=!1,x={state:m,setOptions:function(I){var z=typeof I=="function"?I(m.options):I;C(),m.options=Object.assign({},s,m.options,z),m.scrollParents={reference:isElement$1(f)?listScrollParents(f):f.contextElement?listScrollParents(f.contextElement):[],popper:listScrollParents(h)};var B=orderModifiers(mergeByName([].concat(r,m.options.modifiers)));return m.orderedModifiers=B.filter(function(Q){return Q.enabled}),S(),x.update()},forceUpdate:function(){if(!A){var I=m.elements,z=I.reference,B=I.popper;if(areValidElements(z,B)){m.rects={reference:getCompositeRect(z,getOffsetParent(B),m.options.strategy==="fixed"),popper:getLayoutRect(B)},m.reset=!1,m.placement=m.options.placement,m.orderedModifiers.forEach(function(P){return m.modifiersData[P.name]=Object.assign({},P.data)});for(var Q=0;Q<m.orderedModifiers.length;Q++){if(m.reset===!0){m.reset=!1,Q=-1;continue}var ee=m.orderedModifiers[Q],V=ee.fn,u=ee.options,Y=u===void 0?{}:u,U=ee.name;typeof V=="function"&&(m=V({state:m,options:Y,name:U,instance:x})||m)}}}},update:debounce(function(){return new Promise(function(H){x.forceUpdate(),H(m)})}),destroy:function(){C(),A=!0}};if(!areValidElements(f,h))return x;x.setOptions(p).then(function(H){!A&&p.onFirstUpdate&&p.onFirstUpdate(H)});function S(){m.orderedModifiers.forEach(function(H){var I=H.name,z=H.options,B=z===void 0?{}:z,Q=H.effect;if(typeof Q=="function"){var ee=Q({state:m,name:I,instance:x,options:B}),V=function(){};y.push(ee||V)}})}function C(){y.forEach(function(H){return H()}),y=[]}return x}}var createPopper$2=popperGenerator(),defaultModifiers$1=[eventListeners,popperOffsets$1,computeStyles$1,applyStyles$1],createPopper$1=popperGenerator({defaultModifiers:defaultModifiers$1}),defaultModifiers=[eventListeners,popperOffsets$1,computeStyles$1,applyStyles$1,offset$1,flip$1,preventOverflow$1,arrow$1,hide$1],createPopper=popperGenerator({defaultModifiers});const Popper=Object.freeze(Object.defineProperty({__proto__:null,afterMain,afterRead,afterWrite,applyStyles:applyStyles$1,arrow:arrow$1,auto,basePlacements,beforeMain,beforeRead,beforeWrite,bottom,clippingParents,computeStyles:computeStyles$1,createPopper,createPopperBase:createPopper$2,createPopperLite:createPopper$1,detectOverflow,end,eventListeners,flip:flip$1,hide:hide$1,left,main,modifierPhases,offset:offset$1,placements,popper,popperGenerator,popperOffsets:popperOffsets$1,preventOverflow:preventOverflow$1,read,reference,right,start,top,variationPlacements,viewport,write},Symbol.toStringTag,{value:"Module"}));/*!
* Bootstrap v5.3.3 (https://getbootstrap.com/)
* Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
*/const elementMap=new Map,Data={set(n,e,t){elementMap.has(n)||elementMap.set(n,new Map);const r=elementMap.get(n);if(!r.has(e)&&r.size!==0){console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(r.keys())[0]}.`);return}r.set(e,t)},get(n,e){return elementMap.has(n)&&elementMap.get(n).get(e)||null},remove(n,e){if(!elementMap.has(n))return;const t=elementMap.get(n);t.delete(e),t.size===0&&elementMap.delete(n)}},MAX_UID=1e6,MILLISECONDS_MULTIPLIER=1e3,TRANSITION_END="transitionend",parseSelector=n=>(n&&window.CSS&&window.CSS.escape&&(n=n.replace(/#([^\s"#']+)/g,(e,t)=>`#${CSS.escape(t)}`)),n),toType=n=>n==null?`${n}`:Object.prototype.toString.call(n).match(/\s([a-z]+)/i)[1].toLowerCase(),getUID=n=>{do n+=Math.floor(Math.random()*MAX_UID);while(document.getElementById(n));return n},getTransitionDurationFromElement=n=>{if(!n)return 0;let{transitionDuration:e,transitionDelay:t}=window.getComputedStyle(n);const r=Number.parseFloat(e),i=Number.parseFloat(t);return!r&&!i?0:(e=e.split(",")[0],t=t.split(",")[0],(Number.parseFloat(e)+Number.parseFloat(t))*MILLISECONDS_MULTIPLIER)},triggerTransitionEnd=n=>{n.dispatchEvent(new Event(TRANSITION_END))},isElement=n=>!n||typeof n!="object"?!1:(typeof n.jquery<"u"&&(n=n[0]),typeof n.nodeType<"u"),getElement=n=>isElement(n)?n.jquery?n[0]:n:typeof n=="string"&&n.length>0?document.querySelector(parseSelector(n)):null,isVisible=n=>{if(!isElement(n)||n.getClientRects().length===0)return!1;const e=getComputedStyle(n).getPropertyValue("visibility")==="visible",t=n.closest("details:not([open])");if(!t)return e;if(t!==n){const r=n.closest("summary");if(r&&r.parentNode!==t||r===null)return!1}return e},isDisabled=n=>!n||n.nodeType!==Node.ELEMENT_NODE||n.classList.contains("disabled")?!0:typeof n.disabled<"u"?n.disabled:n.hasAttribute("disabled")&&n.getAttribute("disabled")!=="false",findShadowRoot=n=>{if(!document.documentElement.attachShadow)return null;if(typeof n.getRootNode=="function"){const e=n.getRootNode();return e instanceof ShadowRoot?e:null}return n instanceof ShadowRoot?n:n.parentNode?findShadowRoot(n.parentNode):null},noop=()=>{},reflow=n=>{n.offsetHeight},getjQuery=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,DOMContentLoadedCallbacks=[],onDOMContentLoaded=n=>{document.readyState==="loading"?(DOMContentLoadedCallbacks.length||document.addEventListener("DOMContentLoaded",()=>{for(const e of DOMContentLoadedCallbacks)e()}),DOMContentLoadedCallbacks.push(n)):n()},isRTL=()=>document.documentElement.dir==="rtl",defineJQueryPlugin=n=>{onDOMContentLoaded(()=>{const e=getjQuery();if(e){const t=n.NAME,r=e.fn[t];e.fn[t]=n.jQueryInterface,e.fn[t].Constructor=n,e.fn[t].noConflict=()=>(e.fn[t]=r,n.jQueryInterface)}})},execute=(n,e=[],t=n)=>typeof n=="function"?n(...e):t,executeAfterTransition=(n,e,t=!0)=>{if(!t){execute(n);return}const r=5,i=getTransitionDurationFromElement(e)+r;let s=!1;const l=({target:f})=>{f===e&&(s=!0,e.removeEventListener(TRANSITION_END,l),execute(n))};e.addEventListener(TRANSITION_END,l),setTimeout(()=>{s||triggerTransitionEnd(e)},i)},getNextActiveElement=(n,e,t,r)=>{const i=n.length;let s=n.indexOf(e);return s===-1?!t&&r?n[i-1]:n[0]:(s+=t?1:-1,r&&(s=(s+i)%i),n[Math.max(0,Math.min(s,i-1))])},namespaceRegex=/[^.]*(?=\..*)\.|.*/,stripNameRegex=/\..*/,stripUidRegex=/::\d+$/,eventRegistry={};let uidEvent=1;const customEvents={mouseenter:"mouseover",mouseleave:"mouseout"},nativeEvents=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function makeEventUid(n,e){return e&&`${e}::${uidEvent++}`||n.uidEvent||uidEvent++}function getElementEvents(n){const e=makeEventUid(n);return n.uidEvent=e,eventRegistry[e]=eventRegistry[e]||{},eventRegistry[e]}function bootstrapHandler(n,e){return function t(r){return hydrateObj(r,{delegateTarget:n}),t.oneOff&&EventHandler.off(n,r.type,e),e.apply(n,[r])}}function bootstrapDelegationHandler(n,e,t){return function r(i){const s=n.querySelectorAll(e);for(let{target:l}=i;l&&l!==this;l=l.parentNode)for(const f of s)if(f===l)return hydrateObj(i,{delegateTarget:l}),r.oneOff&&EventHandler.off(n,i.type,e,t),t.apply(l,[i])}}function findHandler(n,e,t=null){return Object.values(n).find(r=>r.callable===e&&r.delegationSelector===t)}function normalizeParameters(n,e,t){const r=typeof e=="string",i=r?t:e||t;let s=getTypeEvent(n);return nativeEvents.has(s)||(s=n),[r,i,s]}function addHandler(n,e,t,r,i){if(typeof e!="string"||!n)return;let[s,l,f]=normalizeParameters(e,t,r);e in customEvents&&(l=(S=>function(C){if(!C.relatedTarget||C.relatedTarget!==C.delegateTarget&&!C.delegateTarget.contains(C.relatedTarget))return S.call(this,C)})(l));const h=getElementEvents(n),p=h[f]||(h[f]={}),m=findHandler(p,l,s?t:null);if(m){m.oneOff=m.oneOff&&i;return}const y=makeEventUid(l,e.replace(namespaceRegex,"")),A=s?bootstrapDelegationHandler(n,t,l):bootstrapHandler(n,l);A.delegationSelector=s?t:null,A.callable=l,A.oneOff=i,A.uidEvent=y,p[y]=A,n.addEventListener(f,A,s)}function removeHandler(n,e,t,r,i){const s=findHandler(e[t],r,i);s&&(n.removeEventListener(t,s,!!i),delete e[t][s.uidEvent])}function removeNamespacedHandlers(n,e,t,r){const i=e[t]||{};for(const[s,l]of Object.entries(i))s.includes(r)&&removeHandler(n,e,t,l.callable,l.delegationSelector)}function getTypeEvent(n){return n=n.replace(stripNameRegex,""),customEvents[n]||n}const EventHandler={on(n,e,t,r){addHandler(n,e,t,r,!1)},one(n,e,t,r){addHandler(n,e,t,r,!0)},off(n,e,t,r){if(typeof e!="string"||!n)return;const[i,s,l]=normalizeParameters(e,t,r),f=l!==e,h=getElementEvents(n),p=h[l]||{},m=e.startsWith(".");if(typeof s<"u"){if(!Object.keys(p).length)return;removeHandler(n,h,l,s,i?t:null);return}if(m)for(const y of Object.keys(h))removeNamespacedHandlers(n,h,y,e.slice(1));for(const[y,A]of Object.entries(p)){const x=y.replace(stripUidRegex,"");(!f||e.includes(x))&&removeHandler(n,h,l,A.callable,A.delegationSelector)}},trigger(n,e,t){if(typeof e!="string"||!n)return null;const r=getjQuery(),i=getTypeEvent(e),s=e!==i;let l=null,f=!0,h=!0,p=!1;s&&r&&(l=r.Event(e,t),r(n).trigger(l),f=!l.isPropagationStopped(),h=!l.isImmediatePropagationStopped(),p=l.isDefaultPrevented());const m=hydrateObj(new Event(e,{bubbles:f,cancelable:!0}),t);return p&&m.preventDefault(),h&&n.dispatchEvent(m),m.defaultPrevented&&l&&l.preventDefault(),m}};function hydrateObj(n,e={}){for(const[t,r]of Object.entries(e))try{n[t]=r}catch{Object.defineProperty(n,t,{configurable:!0,get(){return r}})}return n}function normalizeData(n){if(n==="true")return!0;if(n==="false")return!1;if(n===Number(n).toString())return Number(n);if(n===""||n==="null")return null;if(typeof n!="string")return n;try{return JSON.parse(decodeURIComponent(n))}catch{return n}}function normalizeDataKey(n){return n.replace(/[A-Z]/g,e=>`-${e.toLowerCase()}`)}const Manipulator={setDataAttribute(n,e,t){n.setAttribute(`data-bs-${normalizeDataKey(e)}`,t)},removeDataAttribute(n,e){n.removeAttribute(`data-bs-${normalizeDataKey(e)}`)},getDataAttributes(n){if(!n)return{};const e={},t=Object.keys(n.dataset).filter(r=>r.startsWith("bs")&&!r.startsWith("bsConfig"));for(const r of t){let i=r.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=normalizeData(n.dataset[r])}return e},getDataAttribute(n,e){return normalizeData(n.getAttribute(`data-bs-${normalizeDataKey(e)}`))}};class Config{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(e){return e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e}_mergeConfigObj(e,t){const r=isElement(t)?Manipulator.getDataAttribute(t,"config"):{};return{...this.constructor.Default,...typeof r=="object"?r:{},...isElement(t)?Manipulator.getDataAttributes(t):{},...typeof e=="object"?e:{}}}_typeCheckConfig(e,t=this.constructor.DefaultType){for(const[r,i]of Object.entries(t)){const s=e[r],l=isElement(s)?"element":toType(s);if(!new RegExp(i).test(l))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${r}" provided type "${l}" but expected type "${i}".`)}}}const VERSION="5.3.3";class BaseComponent extends Config{constructor(e,t){super(),e=getElement(e),e&&(this._element=e,this._config=this._getConfig(t),Data.set(this._element,this.constructor.DATA_KEY,this))}dispose(){Data.remove(this._element,this.constructor.DATA_KEY),EventHandler.off(this._element,this.constructor.EVENT_KEY);for(const e of Object.getOwnPropertyNames(this))this[e]=null}_queueCallback(e,t,r=!0){executeAfterTransition(e,t,r)}_getConfig(e){return e=this._mergeConfigObj(e,this._element),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}static getInstance(e){return Data.get(getElement(e),this.DATA_KEY)}static getOrCreateInstance(e,t={}){return this.getInstance(e)||new this(e,typeof t=="object"?t:null)}static get VERSION(){return VERSION}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(e){return`${e}${this.EVENT_KEY}`}}const getSelector=n=>{let e=n.getAttribute("data-bs-target");if(!e||e==="#"){let t=n.getAttribute("href");if(!t||!t.includes("#")&&!t.startsWith("."))return null;t.includes("#")&&!t.startsWith("#")&&(t=`#${t.split("#")[1]}`),e=t&&t!=="#"?t.trim():null}return e?e.split(",").map(t=>parseSelector(t)).join(","):null},SelectorEngine={find(n,e=document.documentElement){return[].concat(...Element.prototype.querySelectorAll.call(e,n))},findOne(n,e=document.documentElement){return Element.prototype.querySelector.call(e,n)},children(n,e){return[].concat(...n.children).filter(t=>t.matches(e))},parents(n,e){const t=[];let r=n.parentNode.closest(e);for(;r;)t.push(r),r=r.parentNode.closest(e);return t},prev(n,e){let t=n.previousElementSibling;for(;t;){if(t.matches(e))return[t];t=t.previousElementSibling}return[]},next(n,e){let t=n.nextElementSibling;for(;t;){if(t.matches(e))return[t];t=t.nextElementSibling}return[]},focusableChildren(n){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map(t=>`${t}:not([tabindex^="-"])`).join(",");return this.find(e,n).filter(t=>!isDisabled(t)&&isVisible(t))},getSelectorFromElement(n){const e=getSelector(n);return e&&SelectorEngine.findOne(e)?e:null},getElementFromSelector(n){const e=getSelector(n);return e?SelectorEngine.findOne(e):null},getMultipleElementsFromSelector(n){const e=getSelector(n);return e?SelectorEngine.find(e):[]}},enableDismissTrigger=(n,e="hide")=>{const t=`click.dismiss${n.EVENT_KEY}`,r=n.NAME;EventHandler.on(document,t,`[data-bs-dismiss="${r}"]`,function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),isDisabled(this))return;const s=SelectorEngine.getElementFromSelector(this)||this.closest(`.${r}`);n.getOrCreateInstance(s)[e]()})},NAME$f="alert",DATA_KEY$a="bs.alert",EVENT_KEY$b=`.${DATA_KEY$a}`,EVENT_CLOSE=`close${EVENT_KEY$b}`,EVENT_CLOSED=`closed${EVENT_KEY$b}`,CLASS_NAME_FADE$5="fade",CLASS_NAME_SHOW$8="show";class Alert extends BaseComponent{static get NAME(){return NAME$f}close(){if(EventHandler.trigger(this._element,EVENT_CLOSE).defaultPrevented)return;this._element.classList.remove(CLASS_NAME_SHOW$8);const t=this._element.classList.contains(CLASS_NAME_FADE$5);this._queueCallback(()=>this._destroyElement(),this._element,t)}_destroyElement(){this._element.remove(),EventHandler.trigger(this._element,EVENT_CLOSED),this.dispose()}static jQueryInterface(e){return this.each(function(){const t=Alert.getOrCreateInstance(this);if(typeof e=="string"){if(t[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);t[e](this)}})}}enableDismissTrigger(Alert,"close");defineJQueryPlugin(Alert);const NAME$e="button",DATA_KEY$9="bs.button",EVENT_KEY$a=`.${DATA_KEY$9}`,DATA_API_KEY$6=".data-api",CLASS_NAME_ACTIVE$3="active",SELECTOR_DATA_TOGGLE$5='[data-bs-toggle="button"]',EVENT_CLICK_DATA_API$6=`click${EVENT_KEY$a}${DATA_API_KEY$6}`;class Button extends BaseComponent{static get NAME(){return NAME$e}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle(CLASS_NAME_ACTIVE$3))}static jQueryInterface(e){return this.each(function(){const t=Button.getOrCreateInstance(this);e==="toggle"&&t[e]()})}}EventHandler.on(document,EVENT_CLICK_DATA_API$6,SELECTOR_DATA_TOGGLE$5,n=>{n.preventDefault();const e=n.target.closest(SELECTOR_DATA_TOGGLE$5);Button.getOrCreateInstance(e).toggle()});defineJQueryPlugin(Button);const NAME$d="swipe",EVENT_KEY$9=".bs.swipe",EVENT_TOUCHSTART=`touchstart${EVENT_KEY$9}`,EVENT_TOUCHMOVE=`touchmove${EVENT_KEY$9}`,EVENT_TOUCHEND=`touchend${EVENT_KEY$9}`,EVENT_POINTERDOWN=`pointerdown${EVENT_KEY$9}`,EVENT_POINTERUP=`pointerup${EVENT_KEY$9}`,POINTER_TYPE_TOUCH="touch",POINTER_TYPE_PEN="pen",CLASS_NAME_POINTER_EVENT="pointer-event",SWIPE_THRESHOLD=40,Default$c={endCallback:null,leftCallback:null,rightCallback:null},DefaultType$c={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class Swipe extends Config{constructor(e,t){super(),this._element=e,!(!e||!Swipe.isSupported())&&(this._config=this._getConfig(t),this._deltaX=0,this._supportPointerEvents=!!window.PointerEvent,this._initEvents())}static get Default(){return Default$c}static get DefaultType(){return DefaultType$c}static get NAME(){return NAME$d}dispose(){EventHandler.off(this._element,EVENT_KEY$9)}_start(e){if(!this._supportPointerEvents){this._deltaX=e.touches[0].clientX;return}this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX)}_end(e){this._eventIsPointerPenTouch(e)&&(this._deltaX=e.clientX-this._deltaX),this._handleSwipe(),execute(this._config.endCallback)}_move(e){this._deltaX=e.touches&&e.touches.length>1?0:e.touches[0].clientX-this._deltaX}_handleSwipe(){const e=Math.abs(this._deltaX);if(e<=SWIPE_THRESHOLD)return;const t=e/this._deltaX;this._deltaX=0,t&&execute(t>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(EventHandler.on(this._element,EVENT_POINTERDOWN,e=>this._start(e)),EventHandler.on(this._element,EVENT_POINTERUP,e=>this._end(e)),this._element.classList.add(CLASS_NAME_POINTER_EVENT)):(EventHandler.on(this._element,EVENT_TOUCHSTART,e=>this._start(e)),EventHandler.on(this._element,EVENT_TOUCHMOVE,e=>this._move(e)),EventHandler.on(this._element,EVENT_TOUCHEND,e=>this._end(e)))}_eventIsPointerPenTouch(e){return this._supportPointerEvents&&(e.pointerType===POINTER_TYPE_PEN||e.pointerType===POINTER_TYPE_TOUCH)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const NAME$c="carousel",DATA_KEY$8="bs.carousel",EVENT_KEY$8=`.${DATA_KEY$8}`,DATA_API_KEY$5=".data-api",ARROW_LEFT_KEY$1="ArrowLeft",ARROW_RIGHT_KEY$1="ArrowRight",TOUCHEVENT_COMPAT_WAIT=500,ORDER_NEXT="next",ORDER_PREV="prev",DIRECTION_LEFT="left",DIRECTION_RIGHT="right",EVENT_SLIDE=`slide${EVENT_KEY$8}`,EVENT_SLID=`slid${EVENT_KEY$8}`,EVENT_KEYDOWN$1=`keydown${EVENT_KEY$8}`,EVENT_MOUSEENTER$1=`mouseenter${EVENT_KEY$8}`,EVENT_MOUSELEAVE$1=`mouseleave${EVENT_KEY$8}`,EVENT_DRAG_START=`dragstart${EVENT_KEY$8}`,EVENT_LOAD_DATA_API$3=`load${EVENT_KEY$8}${DATA_API_KEY$5}`,EVENT_CLICK_DATA_API$5=`click${EVENT_KEY$8}${DATA_API_KEY$5}`,CLASS_NAME_CAROUSEL="carousel",CLASS_NAME_ACTIVE$2="active",CLASS_NAME_SLIDE="slide",CLASS_NAME_END="carousel-item-end",CLASS_NAME_START="carousel-item-start",CLASS_NAME_NEXT="carousel-item-next",CLASS_NAME_PREV="carousel-item-prev",SELECTOR_ACTIVE=".active",SELECTOR_ITEM=".carousel-item",SELECTOR_ACTIVE_ITEM=SELECTOR_ACTIVE+SELECTOR_ITEM,SELECTOR_ITEM_IMG=".carousel-item img",SELECTOR_INDICATORS=".carousel-indicators",SELECTOR_DATA_SLIDE="[data-bs-slide], [data-bs-slide-to]",SELECTOR_DATA_RIDE='[data-bs-ride="carousel"]',KEY_TO_DIRECTION={[ARROW_LEFT_KEY$1]:DIRECTION_RIGHT,[ARROW_RIGHT_KEY$1]:DIRECTION_LEFT},Default$b={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},DefaultType$b={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class Carousel extends BaseComponent{constructor(e,t){super(e,t),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=SelectorEngine.findOne(SELECTOR_INDICATORS,this._element),this._addEventListeners(),this._config.ride===CLASS_NAME_CAROUSEL&&this.cycle()}static get Default(){return Default$b}static get DefaultType(){return DefaultType$b}static get NAME(){return NAME$c}next(){this._slide(ORDER_NEXT)}nextWhenVisible(){!document.hidden&&isVisible(this._element)&&this.next()}prev(){this._slide(ORDER_PREV)}pause(){this._isSliding&&triggerTransitionEnd(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval(()=>this.nextWhenVisible(),this._config.interval)}_maybeEnableCycle(){if(this._config.ride){if(this._isSliding){EventHandler.one(this._element,EVENT_SLID,()=>this.cycle());return}this.cycle()}}to(e){const t=this._getItems();if(e>t.length-1||e<0)return;if(this._isSliding){EventHandler.one(this._element,EVENT_SLID,()=>this.to(e));return}const r=this._getItemIndex(this._getActive());if(r===e)return;const i=e>r?ORDER_NEXT:ORDER_PREV;this._slide(i,t[e])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(e){return e.defaultInterval=e.interval,e}_addEventListeners(){this._config.keyboard&&EventHandler.on(this._element,EVENT_KEYDOWN$1,e=>this._keydown(e)),this._config.pause==="hover"&&(EventHandler.on(this._element,EVENT_MOUSEENTER$1,()=>this.pause()),EventHandler.on(this._element,EVENT_MOUSELEAVE$1,()=>this._maybeEnableCycle())),this._config.touch&&Swipe.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const r of SelectorEngine.find(SELECTOR_ITEM_IMG,this._element))EventHandler.on(r,EVENT_DRAG_START,i=>i.preventDefault());const t={leftCallback:()=>this._slide(this._directionToOrder(DIRECTION_LEFT)),rightCallback:()=>this._slide(this._directionToOrder(DIRECTION_RIGHT)),endCallback:()=>{this._config.pause==="hover"&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout(()=>this._maybeEnableCycle(),TOUCHEVENT_COMPAT_WAIT+this._config.interval))}};this._swipeHelper=new Swipe(this._element,t)}_keydown(e){if(/input|textarea/i.test(e.target.tagName))return;const t=KEY_TO_DIRECTION[e.key];t&&(e.preventDefault(),this._slide(this._directionToOrder(t)))}_getItemIndex(e){return this._getItems().indexOf(e)}_setActiveIndicatorElement(e){if(!this._indicatorsElement)return;const t=SelectorEngine.findOne(SELECTOR_ACTIVE,this._indicatorsElement);t.classList.remove(CLASS_NAME_ACTIVE$2),t.removeAttribute("aria-current");const r=SelectorEngine.findOne(`[data-bs-slide-to="${e}"]`,this._indicatorsElement);r&&(r.classList.add(CLASS_NAME_ACTIVE$2),r.setAttribute("aria-current","true"))}_updateInterval(){const e=this._activeElement||this._getActive();if(!e)return;const t=Number.parseInt(e.getAttribute("data-bs-interval"),10);this._config.interval=t||this._config.defaultInterval}_slide(e,t=null){if(this._isSliding)return;const r=this._getActive(),i=e===ORDER_NEXT,s=t||getNextActiveElement(this._getItems(),r,i,this._config.wrap);if(s===r)return;const l=this._getItemIndex(s),f=x=>EventHandler.trigger(this._element,x,{relatedTarget:s,direction:this._orderToDirection(e),from:this._getItemIndex(r),to:l});if(f(EVENT_SLIDE).defaultPrevented||!r||!s)return;const p=!!this._interval;this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(l),this._activeElement=s;const m=i?CLASS_NAME_START:CLASS_NAME_END,y=i?CLASS_NAME_NEXT:CLASS_NAME_PREV;s.classList.add(y),reflow(s),r.classList.add(m),s.classList.add(m);const A=()=>{s.classList.remove(m,y),s.classList.add(CLASS_NAME_ACTIVE$2),r.classList.remove(CLASS_NAME_ACTIVE$2,y,m),this._isSliding=!1,f(EVENT_SLID)};this._queueCallback(A,r,this._isAnimated()),p&&this.cycle()}_isAnimated(){return this._element.classList.contains(CLASS_NAME_SLIDE)}_getActive(){return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM,this._element)}_getItems(){return SelectorEngine.find(SELECTOR_ITEM,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(e){return isRTL()?e===DIRECTION_LEFT?ORDER_PREV:ORDER_NEXT:e===DIRECTION_LEFT?ORDER_NEXT:ORDER_PREV}_orderToDirection(e){return isRTL()?e===ORDER_PREV?DIRECTION_LEFT:DIRECTION_RIGHT:e===ORDER_PREV?DIRECTION_RIGHT:DIRECTION_LEFT}static jQueryInterface(e){return this.each(function(){const t=Carousel.getOrCreateInstance(this,e);if(typeof e=="number"){t.to(e);return}if(typeof e=="string"){if(t[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);t[e]()}})}}EventHandler.on(document,EVENT_CLICK_DATA_API$5,SELECTOR_DATA_SLIDE,function(n){const e=SelectorEngine.getElementFromSelector(this);if(!e||!e.classList.contains(CLASS_NAME_CAROUSEL))return;n.preventDefault();const t=Carousel.getOrCreateInstance(e),r=this.getAttribute("data-bs-slide-to");if(r){t.to(r),t._maybeEnableCycle();return}if(Manipulator.getDataAttribute(this,"slide")==="next"){t.next(),t._maybeEnableCycle();return}t.prev(),t._maybeEnableCycle()});EventHandler.on(window,EVENT_LOAD_DATA_API$3,()=>{const n=SelectorEngine.find(SELECTOR_DATA_RIDE);for(const e of n)Carousel.getOrCreateInstance(e)});defineJQueryPlugin(Carousel);const NAME$b="collapse",DATA_KEY$7="bs.collapse",EVENT_KEY$7=`.${DATA_KEY$7}`,DATA_API_KEY$4=".data-api",EVENT_SHOW$6=`show${EVENT_KEY$7}`,EVENT_SHOWN$6=`shown${EVENT_KEY$7}`,EVENT_HIDE$6=`hide${EVENT_KEY$7}`,EVENT_HIDDEN$6=`hidden${EVENT_KEY$7}`,EVENT_CLICK_DATA_API$4=`click${EVENT_KEY$7}${DATA_API_KEY$4}`,CLASS_NAME_SHOW$7="show",CLASS_NAME_COLLAPSE="collapse",CLASS_NAME_COLLAPSING="collapsing",CLASS_NAME_COLLAPSED="collapsed",CLASS_NAME_DEEPER_CHILDREN=`:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`,CLASS_NAME_HORIZONTAL="collapse-horizontal",WIDTH="width",HEIGHT="height",SELECTOR_ACTIVES=".collapse.show, .collapse.collapsing",SELECTOR_DATA_TOGGLE$4='[data-bs-toggle="collapse"]',Default$a={parent:null,toggle:!0},DefaultType$a={parent:"(null|element)",toggle:"boolean"};class Collapse extends BaseComponent{constructor(e,t){super(e,t),this._isTransitioning=!1,this._triggerArray=[];const r=SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);for(const i of r){const s=SelectorEngine.getSelectorFromElement(i),l=SelectorEngine.find(s).filter(f=>f===this._element);s!==null&&l.length&&this._triggerArray.push(i)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Default$a}static get DefaultType(){return DefaultType$a}static get NAME(){return NAME$b}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let e=[];if(this._config.parent&&(e=this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(f=>f!==this._element).map(f=>Collapse.getOrCreateInstance(f,{toggle:!1}))),e.length&&e[0]._isTransitioning||EventHandler.trigger(this._element,EVENT_SHOW$6).defaultPrevented)return;for(const f of e)f.hide();const r=this._getDimension();this._element.classList.remove(CLASS_NAME_COLLAPSE),this._element.classList.add(CLASS_NAME_COLLAPSING),this._element.style[r]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=()=>{this._isTransitioning=!1,this._element.classList.remove(CLASS_NAME_COLLAPSING),this._element.classList.add(CLASS_NAME_COLLAPSE,CLASS_NAME_SHOW$7),this._element.style[r]="",EventHandler.trigger(this._element,EVENT_SHOWN$6)},l=`scroll${r[0].toUpperCase()+r.slice(1)}`;this._queueCallback(i,this._element,!0),this._element.style[r]=`${this._element[l]}px`}hide(){if(this._isTransitioning||!this._isShown()||EventHandler.trigger(this._element,EVENT_HIDE$6).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,reflow(this._element),this._element.classList.add(CLASS_NAME_COLLAPSING),this._element.classList.remove(CLASS_NAME_COLLAPSE,CLASS_NAME_SHOW$7);for(const i of this._triggerArray){const s=SelectorEngine.getElementFromSelector(i);s&&!this._isShown(s)&&this._addAriaAndCollapsedClass([i],!1)}this._isTransitioning=!0;const r=()=>{this._isTransitioning=!1,this._element.classList.remove(CLASS_NAME_COLLAPSING),this._element.classList.add(CLASS_NAME_COLLAPSE),EventHandler.trigger(this._element,EVENT_HIDDEN$6)};this._element.style[t]="",this._queueCallback(r,this._element,!0)}_isShown(e=this._element){return e.classList.contains(CLASS_NAME_SHOW$7)}_configAfterMerge(e){return e.toggle=!!e.toggle,e.parent=getElement(e.parent),e}_getDimension(){return this._element.classList.contains(CLASS_NAME_HORIZONTAL)?WIDTH:HEIGHT}_initializeChildren(){if(!this._config.parent)return;const e=this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);for(const t of e){const r=SelectorEngine.getElementFromSelector(t);r&&this._addAriaAndCollapsedClass([t],this._isShown(r))}}_getFirstLevelChildren(e){const t=SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN,this._config.parent);return SelectorEngine.find(e,this._config.parent).filter(r=>!t.includes(r))}_addAriaAndCollapsedClass(e,t){if(e.length)for(const r of e)r.classList.toggle(CLASS_NAME_COLLAPSED,!t),r.setAttribute("aria-expanded",t)}static jQueryInterface(e){const t={};return typeof e=="string"&&/show|hide/.test(e)&&(t.toggle=!1),this.each(function(){const r=Collapse.getOrCreateInstance(this,t);if(typeof e=="string"){if(typeof r[e]>"u")throw new TypeError(`No method named "${e}"`);r[e]()}})}}EventHandler.on(document,EVENT_CLICK_DATA_API$4,SELECTOR_DATA_TOGGLE$4,function(n){(n.target.tagName==="A"||n.delegateTarget&&n.delegateTarget.tagName==="A")&&n.preventDefault();for(const e of SelectorEngine.getMultipleElementsFromSelector(this))Collapse.getOrCreateInstance(e,{toggle:!1}).toggle()});defineJQueryPlugin(Collapse);const NAME$a="dropdown",DATA_KEY$6="bs.dropdown",EVENT_KEY$6=`.${DATA_KEY$6}`,DATA_API_KEY$3=".data-api",ESCAPE_KEY$2="Escape",TAB_KEY$1="Tab",ARROW_UP_KEY$1="ArrowUp",ARROW_DOWN_KEY$1="ArrowDown",RIGHT_MOUSE_BUTTON=2,EVENT_HIDE$5=`hide${EVENT_KEY$6}`,EVENT_HIDDEN$5=`hidden${EVENT_KEY$6}`,EVENT_SHOW$5=`show${EVENT_KEY$6}`,EVENT_SHOWN$5=`shown${EVENT_KEY$6}`,EVENT_CLICK_DATA_API$3=`click${EVENT_KEY$6}${DATA_API_KEY$3}`,EVENT_KEYDOWN_DATA_API=`keydown${EVENT_KEY$6}${DATA_API_KEY$3}`,EVENT_KEYUP_DATA_API=`keyup${EVENT_KEY$6}${DATA_API_KEY$3}`,CLASS_NAME_SHOW$6="show",CLASS_NAME_DROPUP="dropup",CLASS_NAME_DROPEND="dropend",CLASS_NAME_DROPSTART="dropstart",CLASS_NAME_DROPUP_CENTER="dropup-center",CLASS_NAME_DROPDOWN_CENTER="dropdown-center",SELECTOR_DATA_TOGGLE$3='[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)',SELECTOR_DATA_TOGGLE_SHOWN=`${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`,SELECTOR_MENU=".dropdown-menu",SELECTOR_NAVBAR=".navbar",SELECTOR_NAVBAR_NAV=".navbar-nav",SELECTOR_VISIBLE_ITEMS=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",PLACEMENT_TOP=isRTL()?"top-end":"top-start",PLACEMENT_TOPEND=isRTL()?"top-start":"top-end",PLACEMENT_BOTTOM=isRTL()?"bottom-end":"bottom-start",PLACEMENT_BOTTOMEND=isRTL()?"bottom-start":"bottom-end",PLACEMENT_RIGHT=isRTL()?"left-start":"right-start",PLACEMENT_LEFT=isRTL()?"right-start":"left-start",PLACEMENT_TOPCENTER="top",PLACEMENT_BOTTOMCENTER="bottom",Default$9={autoClose:!0,boundary:"clippingParents",display:"dynamic",offset:[0,2],popperConfig:null,reference:"toggle"},DefaultType$9={autoClose:"(boolean|string)",boundary:"(string|element)",display:"string",offset:"(array|string|function)",popperConfig:"(null|object|function)",reference:"(string|element|object)"};class Dropdown extends BaseComponent{constructor(e,t){super(e,t),this._popper=null,this._parent=this._element.parentNode,this._menu=SelectorEngine.next(this._element,SELECTOR_MENU)[0]||SelectorEngine.prev(this._element,SELECTOR_MENU)[0]||SelectorEngine.findOne(SELECTOR_MENU,this._parent),this._inNavbar=this._detectNavbar()}static get Default(){return Default$9}static get DefaultType(){return DefaultType$9}static get NAME(){return NAME$a}toggle(){return this._isShown()?this.hide():this.show()}show(){if(isDisabled(this._element)||this._isShown())return;const e={relatedTarget:this._element};if(!EventHandler.trigger(this._element,EVENT_SHOW$5,e).defaultPrevented){if(this._createPopper(),"ontouchstart"in document.documentElement&&!this._parent.closest(SELECTOR_NAVBAR_NAV))for(const r of[].concat(...document.body.children))EventHandler.on(r,"mouseover",noop);this._element.focus(),this._element.setAttribute("aria-expanded",!0),this._menu.classList.add(CLASS_NAME_SHOW$6),this._element.classList.add(CLASS_NAME_SHOW$6),EventHandler.trigger(this._element,EVENT_SHOWN$5,e)}}hide(){if(isDisabled(this._element)||!this._isShown())return;const e={relatedTarget:this._element};this._completeHide(e)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(e){if(!EventHandler.trigger(this._element,EVENT_HIDE$5,e).defaultPrevented){if("ontouchstart"in document.documentElement)for(const r of[].concat(...document.body.children))EventHandler.off(r,"mouseover",noop);this._popper&&this._popper.destroy(),this._menu.classList.remove(CLASS_NAME_SHOW$6),this._element.classList.remove(CLASS_NAME_SHOW$6),this._element.setAttribute("aria-expanded","false"),Manipulator.removeDataAttribute(this._menu,"popper"),EventHandler.trigger(this._element,EVENT_HIDDEN$5,e)}}_getConfig(e){if(e=super._getConfig(e),typeof e.reference=="object"&&!isElement(e.reference)&&typeof e.reference.getBoundingClientRect!="function")throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`);return e}_createPopper(){if(typeof Popper>"u")throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");let e=this._element;this._config.reference==="parent"?e=this._parent:isElement(this._config.reference)?e=getElement(this._config.reference):typeof this._config.reference=="object"&&(e=this._config.reference);const t=this._getPopperConfig();this._popper=createPopper(e,this._menu,t)}_isShown(){return this._menu.classList.contains(CLASS_NAME_SHOW$6)}_getPlacement(){const e=this._parent;if(e.classList.contains(CLASS_NAME_DROPEND))return PLACEMENT_RIGHT;if(e.classList.contains(CLASS_NAME_DROPSTART))return PLACEMENT_LEFT;if(e.classList.contains(CLASS_NAME_DROPUP_CENTER))return PLACEMENT_TOPCENTER;if(e.classList.contains(CLASS_NAME_DROPDOWN_CENTER))return PLACEMENT_BOTTOMCENTER;const t=getComputedStyle(this._menu).getPropertyValue("--bs-position").trim()==="end";return e.classList.contains(CLASS_NAME_DROPUP)?t?PLACEMENT_TOPEND:PLACEMENT_TOP:t?PLACEMENT_BOTTOMEND:PLACEMENT_BOTTOM}_detectNavbar(){return this._element.closest(SELECTOR_NAVBAR)!==null}_getOffset(){const{offset:e}=this._config;return typeof e=="string"?e.split(",").map(t=>Number.parseInt(t,10)):typeof e=="function"?t=>e(t,this._element):e}_getPopperConfig(){const e={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||this._config.display==="static")&&(Manipulator.setDataAttribute(this._menu,"popper","static"),e.modifiers=[{name:"applyStyles",enabled:!1}]),{...e,...execute(this._config.popperConfig,[e])}}_selectMenuItem({key:e,target:t}){const r=SelectorEngine.find(SELECTOR_VISIBLE_ITEMS,this._menu).filter(i=>isVisible(i));r.length&&getNextActiveElement(r,t,e===ARROW_DOWN_KEY$1,!r.includes(t)).focus()}static jQueryInterface(e){return this.each(function(){const t=Dropdown.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof t[e]>"u")throw new TypeError(`No method named "${e}"`);t[e]()}})}static clearMenus(e){if(e.button===RIGHT_MOUSE_BUTTON||e.type==="keyup"&&e.key!==TAB_KEY$1)return;const t=SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN);for(const r of t){const i=Dropdown.getInstance(r);if(!i||i._config.autoClose===!1)continue;const s=e.composedPath(),l=s.includes(i._menu);if(s.includes(i._element)||i._config.autoClose==="inside"&&!l||i._config.autoClose==="outside"&&l||i._menu.contains(e.target)&&(e.type==="keyup"&&e.key===TAB_KEY$1||/input|select|option|textarea|form/i.test(e.target.tagName)))continue;const f={relatedTarget:i._element};e.type==="click"&&(f.clickEvent=e),i._completeHide(f)}}static dataApiKeydownHandler(e){const t=/input|textarea/i.test(e.target.tagName),r=e.key===ESCAPE_KEY$2,i=[ARROW_UP_KEY$1,ARROW_DOWN_KEY$1].includes(e.key);if(!i&&!r||t&&!r)return;e.preventDefault();const s=this.matches(SELECTOR_DATA_TOGGLE$3)?this:SelectorEngine.prev(this,SELECTOR_DATA_TOGGLE$3)[0]||SelectorEngine.next(this,SELECTOR_DATA_TOGGLE$3)[0]||SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3,e.delegateTarget.parentNode),l=Dropdown.getOrCreateInstance(s);if(i){e.stopPropagation(),l.show(),l._selectMenuItem(e);return}l._isShown()&&(e.stopPropagation(),l.hide(),s.focus())}}EventHandler.on(document,EVENT_KEYDOWN_DATA_API,SELECTOR_DATA_TOGGLE$3,Dropdown.dataApiKeydownHandler);EventHandler.on(document,EVENT_KEYDOWN_DATA_API,SELECTOR_MENU,Dropdown.dataApiKeydownHandler);EventHandler.on(document,EVENT_CLICK_DATA_API$3,Dropdown.clearMenus);EventHandler.on(document,EVENT_KEYUP_DATA_API,Dropdown.clearMenus);EventHandler.on(document,EVENT_CLICK_DATA_API$3,SELECTOR_DATA_TOGGLE$3,function(n){n.preventDefault(),Dropdown.getOrCreateInstance(this).toggle()});defineJQueryPlugin(Dropdown);const NAME$9="backdrop",CLASS_NAME_FADE$4="fade",CLASS_NAME_SHOW$5="show",EVENT_MOUSEDOWN=`mousedown.bs.${NAME$9}`,Default$8={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},DefaultType$8={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Backdrop extends Config{constructor(e){super(),this._config=this._getConfig(e),this._isAppended=!1,this._element=null}static get Default(){return Default$8}static get DefaultType(){return DefaultType$8}static get NAME(){return NAME$9}show(e){if(!this._config.isVisible){execute(e);return}this._append();const t=this._getElement();this._config.isAnimated&&reflow(t),t.classList.add(CLASS_NAME_SHOW$5),this._emulateAnimation(()=>{execute(e)})}hide(e){if(!this._config.isVisible){execute(e);return}this._getElement().classList.remove(CLASS_NAME_SHOW$5),this._emulateAnimation(()=>{this.dispose(),execute(e)})}dispose(){this._isAppended&&(EventHandler.off(this._element,EVENT_MOUSEDOWN),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const e=document.createElement("div");e.className=this._config.className,this._config.isAnimated&&e.classList.add(CLASS_NAME_FADE$4),this._element=e}return this._element}_configAfterMerge(e){return e.rootElement=getElement(e.rootElement),e}_append(){if(this._isAppended)return;const e=this._getElement();this._config.rootElement.append(e),EventHandler.on(e,EVENT_MOUSEDOWN,()=>{execute(this._config.clickCallback)}),this._isAppended=!0}_emulateAnimation(e){executeAfterTransition(e,this._getElement(),this._config.isAnimated)}}const NAME$8="focustrap",DATA_KEY$5="bs.focustrap",EVENT_KEY$5=`.${DATA_KEY$5}`,EVENT_FOCUSIN$2=`focusin${EVENT_KEY$5}`,EVENT_KEYDOWN_TAB=`keydown.tab${EVENT_KEY$5}`,TAB_KEY="Tab",TAB_NAV_FORWARD="forward",TAB_NAV_BACKWARD="backward",Default$7={autofocus:!0,trapElement:null},DefaultType$7={autofocus:"boolean",trapElement:"element"};class FocusTrap extends Config{constructor(e){super(),this._config=this._getConfig(e),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return Default$7}static get DefaultType(){return DefaultType$7}static get NAME(){return NAME$8}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),EventHandler.off(document,EVENT_KEY$5),EventHandler.on(document,EVENT_FOCUSIN$2,e=>this._handleFocusin(e)),EventHandler.on(document,EVENT_KEYDOWN_TAB,e=>this._handleKeydown(e)),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,EventHandler.off(document,EVENT_KEY$5))}_handleFocusin(e){const{trapElement:t}=this._config;if(e.target===document||e.target===t||t.contains(e.target))return;const r=SelectorEngine.focusableChildren(t);r.length===0?t.focus():this._lastTabNavDirection===TAB_NAV_BACKWARD?r[r.length-1].focus():r[0].focus()}_handleKeydown(e){e.key===TAB_KEY&&(this._lastTabNavDirection=e.shiftKey?TAB_NAV_BACKWARD:TAB_NAV_FORWARD)}}const SELECTOR_FIXED_CONTENT=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",SELECTOR_STICKY_CONTENT=".sticky-top",PROPERTY_PADDING="padding-right",PROPERTY_MARGIN="margin-right";class ScrollBarHelper{constructor(){this._element=document.body}getWidth(){const e=document.documentElement.clientWidth;return Math.abs(window.innerWidth-e)}hide(){const e=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,PROPERTY_PADDING,t=>t+e),this._setElementAttributes(SELECTOR_FIXED_CONTENT,PROPERTY_PADDING,t=>t+e),this._setElementAttributes(SELECTOR_STICKY_CONTENT,PROPERTY_MARGIN,t=>t-e)}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,PROPERTY_PADDING),this._resetElementAttributes(SELECTOR_FIXED_CONTENT,PROPERTY_PADDING),this._resetElementAttributes(SELECTOR_STICKY_CONTENT,PROPERTY_MARGIN)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(e,t,r){const i=this.getWidth(),s=l=>{if(l!==this._element&&window.innerWidth>l.clientWidth+i)return;this._saveInitialAttribute(l,t);const f=window.getComputedStyle(l).getPropertyValue(t);l.style.setProperty(t,`${r(Number.parseFloat(f))}px`)};this._applyManipulationCallback(e,s)}_saveInitialAttribute(e,t){const r=e.style.getPropertyValue(t);r&&Manipulator.setDataAttribute(e,t,r)}_resetElementAttributes(e,t){const r=i=>{const s=Manipulator.getDataAttribute(i,t);if(s===null){i.style.removeProperty(t);return}Manipulator.removeDataAttribute(i,t),i.style.setProperty(t,s)};this._applyManipulationCallback(e,r)}_applyManipulationCallback(e,t){if(isElement(e)){t(e);return}for(const r of SelectorEngine.find(e,this._element))t(r)}}const NAME$7="modal",DATA_KEY$4="bs.modal",EVENT_KEY$4=`.${DATA_KEY$4}`,DATA_API_KEY$2=".data-api",ESCAPE_KEY$1="Escape",EVENT_HIDE$4=`hide${EVENT_KEY$4}`,EVENT_HIDE_PREVENTED$1=`hidePrevented${EVENT_KEY$4}`,EVENT_HIDDEN$4=`hidden${EVENT_KEY$4}`,EVENT_SHOW$4=`show${EVENT_KEY$4}`,EVENT_SHOWN$4=`shown${EVENT_KEY$4}`,EVENT_RESIZE$1=`resize${EVENT_KEY$4}`,EVENT_CLICK_DISMISS=`click.dismiss${EVENT_KEY$4}`,EVENT_MOUSEDOWN_DISMISS=`mousedown.dismiss${EVENT_KEY$4}`,EVENT_KEYDOWN_DISMISS$1=`keydown.dismiss${EVENT_KEY$4}`,EVENT_CLICK_DATA_API$2=`click${EVENT_KEY$4}${DATA_API_KEY$2}`,CLASS_NAME_OPEN="modal-open",CLASS_NAME_FADE$3="fade",CLASS_NAME_SHOW$4="show",CLASS_NAME_STATIC="modal-static",OPEN_SELECTOR$1=".modal.show",SELECTOR_DIALOG=".modal-dialog",SELECTOR_MODAL_BODY=".modal-body",SELECTOR_DATA_TOGGLE$2='[data-bs-toggle="modal"]',Default$6={backdrop:!0,focus:!0,keyboard:!0},DefaultType$6={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class Modal extends BaseComponent{constructor(e,t){super(e,t),this._dialog=SelectorEngine.findOne(SELECTOR_DIALOG,this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new ScrollBarHelper,this._addEventListeners()}static get Default(){return Default$6}static get DefaultType(){return DefaultType$6}static get NAME(){return NAME$7}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){this._isShown||this._isTransitioning||EventHandler.trigger(this._element,EVENT_SHOW$4,{relatedTarget:e}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(CLASS_NAME_OPEN),this._adjustDialog(),this._backdrop.show(()=>this._showElement(e)))}hide(){!this._isShown||this._isTransitioning||EventHandler.trigger(this._element,EVENT_HIDE$4).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(CLASS_NAME_SHOW$4),this._queueCallback(()=>this._hideModal(),this._element,this._isAnimated()))}dispose(){EventHandler.off(window,EVENT_KEY$4),EventHandler.off(this._dialog,EVENT_KEY$4),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Backdrop({isVisible:!!this._config.backdrop,isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new FocusTrap({trapElement:this._element})}_showElement(e){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const t=SelectorEngine.findOne(SELECTOR_MODAL_BODY,this._dialog);t&&(t.scrollTop=0),reflow(this._element),this._element.classList.add(CLASS_NAME_SHOW$4);const r=()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,EventHandler.trigger(this._element,EVENT_SHOWN$4,{relatedTarget:e})};this._queueCallback(r,this._dialog,this._isAnimated())}_addEventListeners(){EventHandler.on(this._element,EVENT_KEYDOWN_DISMISS$1,e=>{if(e.key===ESCAPE_KEY$1){if(this._config.keyboard){this.hide();return}this._triggerBackdropTransition()}}),EventHandler.on(window,EVENT_RESIZE$1,()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()}),EventHandler.on(this._element,EVENT_MOUSEDOWN_DISMISS,e=>{EventHandler.one(this._element,EVENT_CLICK_DISMISS,t=>{if(!(this._element!==e.target||this._element!==t.target)){if(this._config.backdrop==="static"){this._triggerBackdropTransition();return}this._config.backdrop&&this.hide()}})})}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide(()=>{document.body.classList.remove(CLASS_NAME_OPEN),this._resetAdjustments(),this._scrollBar.reset(),EventHandler.trigger(this._element,EVENT_HIDDEN$4)})}_isAnimated(){return this._element.classList.contains(CLASS_NAME_FADE$3)}_triggerBackdropTransition(){if(EventHandler.trigger(this._element,EVENT_HIDE_PREVENTED$1).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,r=this._element.style.overflowY;r==="hidden"||this._element.classList.contains(CLASS_NAME_STATIC)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(CLASS_NAME_STATIC),this._queueCallback(()=>{this._element.classList.remove(CLASS_NAME_STATIC),this._queueCallback(()=>{this._element.style.overflowY=r},this._dialog)},this._dialog),this._element.focus())}_adjustDialog(){const e=this._element.scrollHeight>document.documentElement.clientHeight,t=this._scrollBar.getWidth(),r=t>0;if(r&&!e){const i=isRTL()?"paddingLeft":"paddingRight";this._element.style[i]=`${t}px`}if(!r&&e){const i=isRTL()?"paddingRight":"paddingLeft";this._element.style[i]=`${t}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(e,t){return this.each(function(){const r=Modal.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof r[e]>"u")throw new TypeError(`No method named "${e}"`);r[e](t)}})}}EventHandler.on(document,EVENT_CLICK_DATA_API$2,SELECTOR_DATA_TOGGLE$2,function(n){const e=SelectorEngine.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&n.preventDefault(),EventHandler.one(e,EVENT_SHOW$4,i=>{i.defaultPrevented||EventHandler.one(e,EVENT_HIDDEN$4,()=>{isVisible(this)&&this.focus()})});const t=SelectorEngine.findOne(OPEN_SELECTOR$1);t&&Modal.getInstance(t).hide(),Modal.getOrCreateInstance(e).toggle(this)});enableDismissTrigger(Modal);defineJQueryPlugin(Modal);const NAME$6="offcanvas",DATA_KEY$3="bs.offcanvas",EVENT_KEY$3=`.${DATA_KEY$3}`,DATA_API_KEY$1=".data-api",EVENT_LOAD_DATA_API$2=`load${EVENT_KEY$3}${DATA_API_KEY$1}`,ESCAPE_KEY="Escape",CLASS_NAME_SHOW$3="show",CLASS_NAME_SHOWING$1="showing",CLASS_NAME_HIDING="hiding",CLASS_NAME_BACKDROP="offcanvas-backdrop",OPEN_SELECTOR=".offcanvas.show",EVENT_SHOW$3=`show${EVENT_KEY$3}`,EVENT_SHOWN$3=`shown${EVENT_KEY$3}`,EVENT_HIDE$3=`hide${EVENT_KEY$3}`,EVENT_HIDE_PREVENTED=`hidePrevented${EVENT_KEY$3}`,EVENT_HIDDEN$3=`hidden${EVENT_KEY$3}`,EVENT_RESIZE=`resize${EVENT_KEY$3}`,EVENT_CLICK_DATA_API$1=`click${EVENT_KEY$3}${DATA_API_KEY$1}`,EVENT_KEYDOWN_DISMISS=`keydown.dismiss${EVENT_KEY$3}`,SELECTOR_DATA_TOGGLE$1='[data-bs-toggle="offcanvas"]',Default$5={backdrop:!0,keyboard:!0,scroll:!1},DefaultType$5={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class Offcanvas extends BaseComponent{constructor(e,t){super(e,t),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return Default$5}static get DefaultType(){return DefaultType$5}static get NAME(){return NAME$6}toggle(e){return this._isShown?this.hide():this.show(e)}show(e){if(this._isShown||EventHandler.trigger(this._element,EVENT_SHOW$3,{relatedTarget:e}).defaultPrevented)return;this._isShown=!0,this._backdrop.show(),this._config.scroll||new ScrollBarHelper().hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(CLASS_NAME_SHOWING$1);const r=()=>{(!this._config.scroll||this._config.backdrop)&&this._focustrap.activate(),this._element.classList.add(CLASS_NAME_SHOW$3),this._element.classList.remove(CLASS_NAME_SHOWING$1),EventHandler.trigger(this._element,EVENT_SHOWN$3,{relatedTarget:e})};this._queueCallback(r,this._element,!0)}hide(){if(!this._isShown||EventHandler.trigger(this._element,EVENT_HIDE$3).defaultPrevented)return;this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add(CLASS_NAME_HIDING),this._backdrop.hide();const t=()=>{this._element.classList.remove(CLASS_NAME_SHOW$3,CLASS_NAME_HIDING),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||new ScrollBarHelper().reset(),EventHandler.trigger(this._element,EVENT_HIDDEN$3)};this._queueCallback(t,this._element,!0)}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const e=()=>{if(this._config.backdrop==="static"){EventHandler.trigger(this._element,EVENT_HIDE_PREVENTED);return}this.hide()},t=!!this._config.backdrop;return new Backdrop({className:CLASS_NAME_BACKDROP,isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?e:null})}_initializeFocusTrap(){return new FocusTrap({trapElement:this._element})}_addEventListeners(){EventHandler.on(this._element,EVENT_KEYDOWN_DISMISS,e=>{if(e.key===ESCAPE_KEY){if(this._config.keyboard){this.hide();return}EventHandler.trigger(this._element,EVENT_HIDE_PREVENTED)}})}static jQueryInterface(e){return this.each(function(){const t=Offcanvas.getOrCreateInstance(this,e);if(typeof e=="string"){if(t[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);t[e](this)}})}}EventHandler.on(document,EVENT_CLICK_DATA_API$1,SELECTOR_DATA_TOGGLE$1,function(n){const e=SelectorEngine.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&n.preventDefault(),isDisabled(this))return;EventHandler.one(e,EVENT_HIDDEN$3,()=>{isVisible(this)&&this.focus()});const t=SelectorEngine.findOne(OPEN_SELECTOR);t&&t!==e&&Offcanvas.getInstance(t).hide(),Offcanvas.getOrCreateInstance(e).toggle(this)});EventHandler.on(window,EVENT_LOAD_DATA_API$2,()=>{for(const n of SelectorEngine.find(OPEN_SELECTOR))Offcanvas.getOrCreateInstance(n).show()});EventHandler.on(window,EVENT_RESIZE,()=>{for(const n of SelectorEngine.find("[aria-modal][class*=show][class*=offcanvas-]"))getComputedStyle(n).position!=="fixed"&&Offcanvas.getOrCreateInstance(n).hide()});enableDismissTrigger(Offcanvas);defineJQueryPlugin(Offcanvas);const ARIA_ATTRIBUTE_PATTERN=/^aria-[\w-]*$/i,DefaultAllowlist={"*":["class","dir","id","lang","role",ARIA_ATTRIBUTE_PATTERN],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],dd:[],div:[],dl:[],dt:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},uriAttributes=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),SAFE_URL_PATTERN=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,allowedAttribute=(n,e)=>{const t=n.nodeName.toLowerCase();return e.includes(t)?uriAttributes.has(t)?!!SAFE_URL_PATTERN.test(n.nodeValue):!0:e.filter(r=>r instanceof RegExp).some(r=>r.test(t))};function sanitizeHtml(n,e,t){if(!n.length)return n;if(t&&typeof t=="function")return t(n);const i=new window.DOMParser().parseFromString(n,"text/html"),s=[].concat(...i.body.querySelectorAll("*"));for(const l of s){const f=l.nodeName.toLowerCase();if(!Object.keys(e).includes(f)){l.remove();continue}const h=[].concat(...l.attributes),p=[].concat(e["*"]||[],e[f]||[]);for(const m of h)allowedAttribute(m,p)||l.removeAttribute(m.nodeName)}return i.body.innerHTML}const NAME$5="TemplateFactory",Default$4={allowList:DefaultAllowlist,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"<div></div>"},DefaultType$4={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},DefaultContentType={entry:"(string|element|function|null)",selector:"(string|element)"};class TemplateFactory extends Config{constructor(e){super(),this._config=this._getConfig(e)}static get Default(){return Default$4}static get DefaultType(){return DefaultType$4}static get NAME(){return NAME$5}getContent(){return Object.values(this._config.content).map(e=>this._resolvePossibleFunction(e)).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(e){return this._checkContent(e),this._config.content={...this._config.content,...e},this}toHtml(){const e=document.createElement("div");e.innerHTML=this._maybeSanitize(this._config.template);for(const[i,s]of Object.entries(this._config.content))this._setContent(e,s,i);const t=e.children[0],r=this._resolvePossibleFunction(this._config.extraClass);return r&&t.classList.add(...r.split(" ")),t}_typeCheckConfig(e){super._typeCheckConfig(e),this._checkContent(e.content)}_checkContent(e){for(const[t,r]of Object.entries(e))super._typeCheckConfig({selector:t,entry:r},DefaultContentType)}_setContent(e,t,r){const i=SelectorEngine.findOne(r,e);if(i){if(t=this._resolvePossibleFunction(t),!t){i.remove();return}if(isElement(t)){this._putElementInTemplate(getElement(t),i);return}if(this._config.html){i.innerHTML=this._maybeSanitize(t);return}i.textContent=t}}_maybeSanitize(e){return this._config.sanitize?sanitizeHtml(e,this._config.allowList,this._config.sanitizeFn):e}_resolvePossibleFunction(e){return execute(e,[this])}_putElementInTemplate(e,t){if(this._config.html){t.innerHTML="",t.append(e);return}t.textContent=e.textContent}}const NAME$4="tooltip",DISALLOWED_ATTRIBUTES=new Set(["sanitize","allowList","sanitizeFn"]),CLASS_NAME_FADE$2="fade",CLASS_NAME_MODAL="modal",CLASS_NAME_SHOW$2="show",SELECTOR_TOOLTIP_INNER=".tooltip-inner",SELECTOR_MODAL=`.${CLASS_NAME_MODAL}`,EVENT_MODAL_HIDE="hide.bs.modal",TRIGGER_HOVER="hover",TRIGGER_FOCUS="focus",TRIGGER_CLICK="click",TRIGGER_MANUAL="manual",EVENT_HIDE$2="hide",EVENT_HIDDEN$2="hidden",EVENT_SHOW$2="show",EVENT_SHOWN$2="shown",EVENT_INSERTED="inserted",EVENT_CLICK$1="click",EVENT_FOCUSIN$1="focusin",EVENT_FOCUSOUT$1="focusout",EVENT_MOUSEENTER="mouseenter",EVENT_MOUSELEAVE="mouseleave",AttachmentMap={AUTO:"auto",TOP:"top",RIGHT:isRTL()?"left":"right",BOTTOM:"bottom",LEFT:isRTL()?"right":"left"},Default$3={allowList:DefaultAllowlist,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',title:"",trigger:"hover focus"},DefaultType$3={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class Tooltip extends BaseComponent{constructor(e,t){if(typeof Popper>"u")throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(e,t),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return Default$3}static get DefaultType(){return DefaultType$3}static get NAME(){return NAME$4}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){if(this._isEnabled){if(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()){this._leave();return}this._enter()}}dispose(){clearTimeout(this._timeout),EventHandler.off(this._element.closest(SELECTOR_MODAL),EVENT_MODAL_HIDE,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if(this._element.style.display==="none")throw new Error("Please use show on visible elements");if(!(this._isWithContent()&&this._isEnabled))return;const e=EventHandler.trigger(this._element,this.constructor.eventName(EVENT_SHOW$2)),r=(findShadowRoot(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(e.defaultPrevented||!r)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:s}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(s.append(i),EventHandler.trigger(this._element,this.constructor.eventName(EVENT_INSERTED))),this._popper=this._createPopper(i),i.classList.add(CLASS_NAME_SHOW$2),"ontouchstart"in document.documentElement)for(const f of[].concat(...document.body.children))EventHandler.on(f,"mouseover",noop);const l=()=>{EventHandler.trigger(this._element,this.constructor.eventName(EVENT_SHOWN$2)),this._isHovered===!1&&this._leave(),this._isHovered=!1};this._queueCallback(l,this.tip,this._isAnimated())}hide(){if(!this._isShown()||EventHandler.trigger(this._element,this.constructor.eventName(EVENT_HIDE$2)).defaultPrevented)return;if(this._getTipElement().classList.remove(CLASS_NAME_SHOW$2),"ontouchstart"in document.documentElement)for(const i of[].concat(...document.body.children))EventHandler.off(i,"mouseover",noop);this._activeTrigger[TRIGGER_CLICK]=!1,this._activeTrigger[TRIGGER_FOCUS]=!1,this._activeTrigger[TRIGGER_HOVER]=!1,this._isHovered=null;const r=()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),EventHandler.trigger(this._element,this.constructor.eventName(EVENT_HIDDEN$2)))};this._queueCallback(r,this.tip,this._isAnimated())}update(){this._popper&&this._popper.update()}_isWithContent(){return!!this._getTitle()}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(e){const t=this._getTemplateFactory(e).toHtml();if(!t)return null;t.classList.remove(CLASS_NAME_FADE$2,CLASS_NAME_SHOW$2),t.classList.add(`bs-${this.constructor.NAME}-auto`);const r=getUID(this.constructor.NAME).toString();return t.setAttribute("id",r),this._isAnimated()&&t.classList.add(CLASS_NAME_FADE$2),t}setContent(e){this._newContent=e,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(e){return this._templateFactory?this._templateFactory.changeContent(e):this._templateFactory=new TemplateFactory({...this._config,content:e,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{[SELECTOR_TOOLTIP_INNER]:this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(e){return this.constructor.getOrCreateInstance(e.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(CLASS_NAME_FADE$2)}_isShown(){return this.tip&&this.tip.classList.contains(CLASS_NAME_SHOW$2)}_createPopper(e){const t=execute(this._config.placement,[this,e,this._element]),r=AttachmentMap[t.toUpperCase()];return createPopper(this._element,e,this._getPopperConfig(r))}_getOffset(){const{offset:e}=this._config;return typeof e=="string"?e.split(",").map(t=>Number.parseInt(t,10)):typeof e=="function"?t=>e(t,this._element):e}_resolvePossibleFunction(e){return execute(e,[this._element])}_getPopperConfig(e){const t={placement:e,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:r=>{this._getTipElement().setAttribute("data-popper-placement",r.state.placement)}}]};return{...t,...execute(this._config.popperConfig,[t])}}_setListeners(){const e=this._config.trigger.split(" ");for(const t of e)if(t==="click")EventHandler.on(this._element,this.constructor.eventName(EVENT_CLICK$1),this._config.selector,r=>{this._initializeOnDelegatedTarget(r).toggle()});else if(t!==TRIGGER_MANUAL){const r=t===TRIGGER_HOVER?this.constructor.eventName(EVENT_MOUSEENTER):this.constructor.eventName(EVENT_FOCUSIN$1),i=t===TRIGGER_HOVER?this.constructor.eventName(EVENT_MOUSELEAVE):this.constructor.eventName(EVENT_FOCUSOUT$1);EventHandler.on(this._element,r,this._config.selector,s=>{const l=this._initializeOnDelegatedTarget(s);l._activeTrigger[s.type==="focusin"?TRIGGER_FOCUS:TRIGGER_HOVER]=!0,l._enter()}),EventHandler.on(this._element,i,this._config.selector,s=>{const l=this._initializeOnDelegatedTarget(s);l._activeTrigger[s.type==="focusout"?TRIGGER_FOCUS:TRIGGER_HOVER]=l._element.contains(s.relatedTarget),l._leave()})}this._hideModalHandler=()=>{this._element&&this.hide()},EventHandler.on(this._element.closest(SELECTOR_MODAL),EVENT_MODAL_HIDE,this._hideModalHandler)}_fixTitle(){const e=this._element.getAttribute("title");e&&(!this._element.getAttribute("aria-label")&&!this._element.textContent.trim()&&this._element.setAttribute("aria-label",e),this._element.setAttribute("data-bs-original-title",e),this._element.removeAttribute("title"))}_enter(){if(this._isShown()||this._isHovered){this._isHovered=!0;return}this._isHovered=!0,this._setTimeout(()=>{this._isHovered&&this.show()},this._config.delay.show)}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout(()=>{this._isHovered||this.hide()},this._config.delay.hide))}_setTimeout(e,t){clearTimeout(this._timeout),this._timeout=setTimeout(e,t)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(e){const t=Manipulator.getDataAttributes(this._element);for(const r of Object.keys(t))DISALLOWED_ATTRIBUTES.has(r)&&delete t[r];return e={...t,...typeof e=="object"&&e?e:{}},e=this._mergeConfigObj(e),e=this._configAfterMerge(e),this._typeCheckConfig(e),e}_configAfterMerge(e){return e.container=e.container===!1?document.body:getElement(e.container),typeof e.delay=="number"&&(e.delay={show:e.delay,hide:e.delay}),typeof e.title=="number"&&(e.title=e.title.toString()),typeof e.content=="number"&&(e.content=e.content.toString()),e}_getDelegateConfig(){const e={};for(const[t,r]of Object.entries(this._config))this.constructor.Default[t]!==r&&(e[t]=r);return e.selector=!1,e.trigger="manual",e}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(e){return this.each(function(){const t=Tooltip.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof t[e]>"u")throw new TypeError(`No method named "${e}"`);t[e]()}})}}defineJQueryPlugin(Tooltip);const NAME$3="popover",SELECTOR_TITLE=".popover-header",SELECTOR_CONTENT=".popover-body",Default$2={...Tooltip.Default,content:"",offset:[0,8],placement:"right",template:'<div class="popover" role="tooltip"><div class="popover-arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>',trigger:"click"},DefaultType$2={...Tooltip.DefaultType,content:"(null|string|element|function)"};class Popover extends Tooltip{static get Default(){return Default$2}static get DefaultType(){return DefaultType$2}static get NAME(){return NAME$3}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{[SELECTOR_TITLE]:this._getTitle(),[SELECTOR_CONTENT]:this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(e){return this.each(function(){const t=Popover.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof t[e]>"u")throw new TypeError(`No method named "${e}"`);t[e]()}})}}defineJQueryPlugin(Popover);const NAME$2="scrollspy",DATA_KEY$2="bs.scrollspy",EVENT_KEY$2=`.${DATA_KEY$2}`,DATA_API_KEY=".data-api",EVENT_ACTIVATE=`activate${EVENT_KEY$2}`,EVENT_CLICK=`click${EVENT_KEY$2}`,EVENT_LOAD_DATA_API$1=`load${EVENT_KEY$2}${DATA_API_KEY}`,CLASS_NAME_DROPDOWN_ITEM="dropdown-item",CLASS_NAME_ACTIVE$1="active",SELECTOR_DATA_SPY='[data-bs-spy="scroll"]',SELECTOR_TARGET_LINKS="[href]",SELECTOR_NAV_LIST_GROUP=".nav, .list-group",SELECTOR_NAV_LINKS=".nav-link",SELECTOR_NAV_ITEMS=".nav-item",SELECTOR_LIST_ITEMS=".list-group-item",SELECTOR_LINK_ITEMS=`${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`,SELECTOR_DROPDOWN=".dropdown",SELECTOR_DROPDOWN_TOGGLE$1=".dropdown-toggle",Default$1={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},DefaultType$1={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class ScrollSpy extends BaseComponent{constructor(e,t){super(e,t),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement=getComputedStyle(this._element).overflowY==="visible"?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return Default$1}static get DefaultType(){return DefaultType$1}static get NAME(){return NAME$2}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const e of this._observableSections.values())this._observer.observe(e)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(e){return e.target=getElement(e.target)||document.body,e.rootMargin=e.offset?`${e.offset}px 0px -30%`:e.rootMargin,typeof e.threshold=="string"&&(e.threshold=e.threshold.split(",").map(t=>Number.parseFloat(t))),e}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(EventHandler.off(this._config.target,EVENT_CLICK),EventHandler.on(this._config.target,EVENT_CLICK,SELECTOR_TARGET_LINKS,e=>{const t=this._observableSections.get(e.target.hash);if(t){e.preventDefault();const r=this._rootElement||window,i=t.offsetTop-this._element.offsetTop;if(r.scrollTo){r.scrollTo({top:i,behavior:"smooth"});return}r.scrollTop=i}}))}_getNewObserver(){const e={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver(t=>this._observerCallback(t),e)}_observerCallback(e){const t=l=>this._targetLinks.get(`#${l.target.id}`),r=l=>{this._previousScrollData.visibleEntryTop=l.target.offsetTop,this._process(t(l))},i=(this._rootElement||document.documentElement).scrollTop,s=i>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=i;for(const l of e){if(!l.isIntersecting){this._activeTarget=null,this._clearActiveClass(t(l));continue}const f=l.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&f){if(r(l),!i)return;continue}!s&&!f&&r(l)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const e=SelectorEngine.find(SELECTOR_TARGET_LINKS,this._config.target);for(const t of e){if(!t.hash||isDisabled(t))continue;const r=SelectorEngine.findOne(decodeURI(t.hash),this._element);isVisible(r)&&(this._targetLinks.set(decodeURI(t.hash),t),this._observableSections.set(t.hash,r))}}_process(e){this._activeTarget!==e&&(this._clearActiveClass(this._config.target),this._activeTarget=e,e.classList.add(CLASS_NAME_ACTIVE$1),this._activateParents(e),EventHandler.trigger(this._element,EVENT_ACTIVATE,{relatedTarget:e}))}_activateParents(e){if(e.classList.contains(CLASS_NAME_DROPDOWN_ITEM)){SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1,e.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1);return}for(const t of SelectorEngine.parents(e,SELECTOR_NAV_LIST_GROUP))for(const r of SelectorEngine.prev(t,SELECTOR_LINK_ITEMS))r.classList.add(CLASS_NAME_ACTIVE$1)}_clearActiveClass(e){e.classList.remove(CLASS_NAME_ACTIVE$1);const t=SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`,e);for(const r of t)r.classList.remove(CLASS_NAME_ACTIVE$1)}static jQueryInterface(e){return this.each(function(){const t=ScrollSpy.getOrCreateInstance(this,e);if(typeof e=="string"){if(t[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);t[e]()}})}}EventHandler.on(window,EVENT_LOAD_DATA_API$1,()=>{for(const n of SelectorEngine.find(SELECTOR_DATA_SPY))ScrollSpy.getOrCreateInstance(n)});defineJQueryPlugin(ScrollSpy);const NAME$1="tab",DATA_KEY$1="bs.tab",EVENT_KEY$1=`.${DATA_KEY$1}`,EVENT_HIDE$1=`hide${EVENT_KEY$1}`,EVENT_HIDDEN$1=`hidden${EVENT_KEY$1}`,EVENT_SHOW$1=`show${EVENT_KEY$1}`,EVENT_SHOWN$1=`shown${EVENT_KEY$1}`,EVENT_CLICK_DATA_API=`click${EVENT_KEY$1}`,EVENT_KEYDOWN=`keydown${EVENT_KEY$1}`,EVENT_LOAD_DATA_API=`load${EVENT_KEY$1}`,ARROW_LEFT_KEY="ArrowLeft",ARROW_RIGHT_KEY="ArrowRight",ARROW_UP_KEY="ArrowUp",ARROW_DOWN_KEY="ArrowDown",HOME_KEY="Home",END_KEY="End",CLASS_NAME_ACTIVE="active",CLASS_NAME_FADE$1="fade",CLASS_NAME_SHOW$1="show",CLASS_DROPDOWN="dropdown",SELECTOR_DROPDOWN_TOGGLE=".dropdown-toggle",SELECTOR_DROPDOWN_MENU=".dropdown-menu",NOT_SELECTOR_DROPDOWN_TOGGLE=`:not(${SELECTOR_DROPDOWN_TOGGLE})`,SELECTOR_TAB_PANEL='.list-group, .nav, [role="tablist"]',SELECTOR_OUTER=".nav-item, .list-group-item",SELECTOR_INNER=`.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`,SELECTOR_DATA_TOGGLE='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',SELECTOR_INNER_ELEM=`${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`,SELECTOR_DATA_TOGGLE_ACTIVE=`.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`;class Tab extends BaseComponent{constructor(e){super(e),this._parent=this._element.closest(SELECTOR_TAB_PANEL),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),EventHandler.on(this._element,EVENT_KEYDOWN,t=>this._keydown(t)))}static get NAME(){return NAME$1}show(){const e=this._element;if(this._elemIsActive(e))return;const t=this._getActiveElem(),r=t?EventHandler.trigger(t,EVENT_HIDE$1,{relatedTarget:e}):null;EventHandler.trigger(e,EVENT_SHOW$1,{relatedTarget:t}).defaultPrevented||r&&r.defaultPrevented||(this._deactivate(t,e),this._activate(e,t))}_activate(e,t){if(!e)return;e.classList.add(CLASS_NAME_ACTIVE),this._activate(SelectorEngine.getElementFromSelector(e));const r=()=>{if(e.getAttribute("role")!=="tab"){e.classList.add(CLASS_NAME_SHOW$1);return}e.removeAttribute("tabindex"),e.setAttribute("aria-selected",!0),this._toggleDropDown(e,!0),EventHandler.trigger(e,EVENT_SHOWN$1,{relatedTarget:t})};this._queueCallback(r,e,e.classList.contains(CLASS_NAME_FADE$1))}_deactivate(e,t){if(!e)return;e.classList.remove(CLASS_NAME_ACTIVE),e.blur(),this._deactivate(SelectorEngine.getElementFromSelector(e));const r=()=>{if(e.getAttribute("role")!=="tab"){e.classList.remove(CLASS_NAME_SHOW$1);return}e.setAttribute("aria-selected",!1),e.setAttribute("tabindex","-1"),this._toggleDropDown(e,!1),EventHandler.trigger(e,EVENT_HIDDEN$1,{relatedTarget:t})};this._queueCallback(r,e,e.classList.contains(CLASS_NAME_FADE$1))}_keydown(e){if(![ARROW_LEFT_KEY,ARROW_RIGHT_KEY,ARROW_UP_KEY,ARROW_DOWN_KEY,HOME_KEY,END_KEY].includes(e.key))return;e.stopPropagation(),e.preventDefault();const t=this._getChildren().filter(i=>!isDisabled(i));let r;if([HOME_KEY,END_KEY].includes(e.key))r=t[e.key===HOME_KEY?0:t.length-1];else{const i=[ARROW_RIGHT_KEY,ARROW_DOWN_KEY].includes(e.key);r=getNextActiveElement(t,e.target,i,!0)}r&&(r.focus({preventScroll:!0}),Tab.getOrCreateInstance(r).show())}_getChildren(){return SelectorEngine.find(SELECTOR_INNER_ELEM,this._parent)}_getActiveElem(){return this._getChildren().find(e=>this._elemIsActive(e))||null}_setInitialAttributes(e,t){this._setAttributeIfNotExists(e,"role","tablist");for(const r of t)this._setInitialAttributesOnChild(r)}_setInitialAttributesOnChild(e){e=this._getInnerElement(e);const t=this._elemIsActive(e),r=this._getOuterElement(e);e.setAttribute("aria-selected",t),r!==e&&this._setAttributeIfNotExists(r,"role","presentation"),t||e.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(e,"role","tab"),this._setInitialAttributesOnTargetPanel(e)}_setInitialAttributesOnTargetPanel(e){const t=SelectorEngine.getElementFromSelector(e);t&&(this._setAttributeIfNotExists(t,"role","tabpanel"),e.id&&this._setAttributeIfNotExists(t,"aria-labelledby",`${e.id}`))}_toggleDropDown(e,t){const r=this._getOuterElement(e);if(!r.classList.contains(CLASS_DROPDOWN))return;const i=(s,l)=>{const f=SelectorEngine.findOne(s,r);f&&f.classList.toggle(l,t)};i(SELECTOR_DROPDOWN_TOGGLE,CLASS_NAME_ACTIVE),i(SELECTOR_DROPDOWN_MENU,CLASS_NAME_SHOW$1),r.setAttribute("aria-expanded",t)}_setAttributeIfNotExists(e,t,r){e.hasAttribute(t)||e.setAttribute(t,r)}_elemIsActive(e){return e.classList.contains(CLASS_NAME_ACTIVE)}_getInnerElement(e){return e.matches(SELECTOR_INNER_ELEM)?e:SelectorEngine.findOne(SELECTOR_INNER_ELEM,e)}_getOuterElement(e){return e.closest(SELECTOR_OUTER)||e}static jQueryInterface(e){return this.each(function(){const t=Tab.getOrCreateInstance(this);if(typeof e=="string"){if(t[e]===void 0||e.startsWith("_")||e==="constructor")throw new TypeError(`No method named "${e}"`);t[e]()}})}}EventHandler.on(document,EVENT_CLICK_DATA_API,SELECTOR_DATA_TOGGLE,function(n){["A","AREA"].includes(this.tagName)&&n.preventDefault(),!isDisabled(this)&&Tab.getOrCreateInstance(this).show()});EventHandler.on(window,EVENT_LOAD_DATA_API,()=>{for(const n of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE))Tab.getOrCreateInstance(n)});defineJQueryPlugin(Tab);const NAME="toast",DATA_KEY="bs.toast",EVENT_KEY=`.${DATA_KEY}`,EVENT_MOUSEOVER=`mouseover${EVENT_KEY}`,EVENT_MOUSEOUT=`mouseout${EVENT_KEY}`,EVENT_FOCUSIN=`focusin${EVENT_KEY}`,EVENT_FOCUSOUT=`focusout${EVENT_KEY}`,EVENT_HIDE=`hide${EVENT_KEY}`,EVENT_HIDDEN=`hidden${EVENT_KEY}`,EVENT_SHOW=`show${EVENT_KEY}`,EVENT_SHOWN=`shown${EVENT_KEY}`,CLASS_NAME_FADE="fade",CLASS_NAME_HIDE="hide",CLASS_NAME_SHOW="show",CLASS_NAME_SHOWING="showing",DefaultType={animation:"boolean",autohide:"boolean",delay:"number"},Default={animation:!0,autohide:!0,delay:5e3};class Toast extends BaseComponent{constructor(e,t){super(e,t),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return Default}static get DefaultType(){return DefaultType}static get NAME(){return NAME}show(){if(EventHandler.trigger(this._element,EVENT_SHOW).defaultPrevented)return;this._clearTimeout(),this._config.animation&&this._element.classList.add(CLASS_NAME_FADE);const t=()=>{this._element.classList.remove(CLASS_NAME_SHOWING),EventHandler.trigger(this._element,EVENT_SHOWN),this._maybeScheduleHide()};this._element.classList.remove(CLASS_NAME_HIDE),reflow(this._element),this._element.classList.add(CLASS_NAME_SHOW,CLASS_NAME_SHOWING),this._queueCallback(t,this._element,this._config.animation)}hide(){if(!this.isShown()||EventHandler.trigger(this._element,EVENT_HIDE).defaultPrevented)return;const t=()=>{this._element.classList.add(CLASS_NAME_HIDE),this._element.classList.remove(CLASS_NAME_SHOWING,CLASS_NAME_SHOW),EventHandler.trigger(this._element,EVENT_HIDDEN)};this._element.classList.add(CLASS_NAME_SHOWING),this._queueCallback(t,this._element,this._config.animation)}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(CLASS_NAME_SHOW),super.dispose()}isShown(){return this._element.classList.contains(CLASS_NAME_SHOW)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout(()=>{this.hide()},this._config.delay)))}_onInteraction(e,t){switch(e.type){case"mouseover":case"mouseout":{this._hasMouseInteraction=t;break}case"focusin":case"focusout":{this._hasKeyboardInteraction=t;break}}if(t){this._clearTimeout();return}const r=e.relatedTarget;this._element===r||this._element.contains(r)||this._maybeScheduleHide()}_setListeners(){EventHandler.on(this._element,EVENT_MOUSEOVER,e=>this._onInteraction(e,!0)),EventHandler.on(this._element,EVENT_MOUSEOUT,e=>this._onInteraction(e,!1)),EventHandler.on(this._element,EVENT_FOCUSIN,e=>this._onInteraction(e,!0)),EventHandler.on(this._element,EVENT_FOCUSOUT,e=>this._onInteraction(e,!1))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(e){return this.each(function(){const t=Toast.getOrCreateInstance(this,e);if(typeof e=="string"){if(typeof t[e]>"u")throw new TypeError(`No method named "${e}"`);t[e](this)}})}}enableDismissTrigger(Toast);defineJQueryPlugin(Toast);class AutoLookUpAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");F(this,"makeQuery",(e,t)=>{if(typeof t=="number")return`${e.code} = ${t}`;if(typeof t=="string")return`${e.code} = "${t}"`});F(this,"getUpdateRecords",async(e,t)=>await new index_browser.KintoneRestAPIClient().record.getAllRecords({app:this.props.lookupField.app.id,fields:["$id"],condition:this.makeQuery(e,t)}));F(this,"convertForLookup",(e,t,r)=>e.map(i=>({id:Number(i.$id.value),record:{[t.code]:{value:r}}})));F(this,"updateLookupTarget",async e=>{if(e&&e.length>0)try{const r=await new index_browser.KintoneRestAPIClient().record.updateAllRecords({app:this.props.lookupField.app.id,records:e});return!0}catch(t){if(t instanceof index_browser.KintoneAllRecordsError)return this.showError(this.props.lookupField.app,t,e.length),!1;throw t}return!1});F(this,"showSpinnerModel",e=>{let t=$("#alcLookupModal");if(t.length===0){const r=`<div class="bs-scope">
<div class="modal" id="alcLookupModal" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
<div class="modal-dialog-centered">
<div class="modal-dialog modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="alcLookupModalLabel">ルックアップ同期処理</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="row" id="app${e.id}">
<div class="spinner-border text-secondary col-1 " role="alert"></div>
<div class="col">${e.name}</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" data-bs-dismiss="modal">OK</button>
</div>
</div></div></div></div>`;$(r).appendTo("body"),t=$("#alcLookupModal"),t.get()[0].addEventListener("hidden.bs.modal",i=>{Modal.getOrCreateInstance(t.get()[0]).dispose(),$("#alcLookupModal").parent().remove()})}else{const r=$("#alcLookupModal .modal-body"),i=`
<div class="row" id="app${e.id}">
<div class="spinner-border text-secondary col-1 " role="alert">
</div>
<div class="col">${e.name}</div>
<div>`;r.append(i)}Modal.getOrCreateInstance(t.get()[0]).show()});F(this,"showResult",(e,t)=>{const r=$(`#alcLookupModal .modal-body #app${e.id}`),i=` <div class="col-1 text-success">✔</div>
<div class="col">${e.name}</div>
<div class="col">更新件数:${t}件</div>`;r.html(i)});F(this,"showError",(e,t,r)=>{const i=t.error.message,s=t.numOfProcessedRecords,l=t.numOfAllRecords,f=$(`#alcLookupModal .modal-body #app${e.id}`),h=`<div class="col-1 text-danger">✖</div>
<div class="col">${e.name}</div>
<div class="col">更新件数:${s}/${l}</div>
<div class="row text-danger">${i}<div>`;f.html(h)});F(this,"closeDialog",()=>{const e=$("#alcLookupModal");Modal.getOrCreateInstance(e.get()[0]).dispose(),$("#alcLookupModal").parent().remove()});this.name="ルックアップ更新",this.actionProps=[],this.props={},this.register()}async process(e,t,r){this.actionProps=e.actionProps,this.props={...e.ActionValue,condition:JSON.parse(e.ActionValue.condition)};let i={canNext:!0,result:""};try{const s=this.props.lookupField.fields.filter(y=>y.lookup&&y.lookup.relatedApp.app===String(kintone.app.getId()));if(!s||s.length===0)throw new Error(`ルックアップの設定は不正です。${this.props.lookupField.fields[0].label} `);const l=this.props.lookupField.fields[0],f=t.record[l.lookup.relatedKeyField].value,h=await this.getUpdateRecords(l,f);if(h.length===0)return i;const p=this.convertForLookup(h,l,f);console.log("updateRecords",p),this.showSpinnerModel(this.props.lookupField.app),await this.updateLookupTarget(p)&&this.showResult(this.props.lookupField.app,p.length)}catch(s){this.closeDialog(),r.errors.handleError(s,e,"ルックアップ更新中例外が発生しました"),i.canNext=!1}return i}register(){actionAddins[this.name]=this}}new AutoLookUpAction;class FieldDisableAction{constructor(){F(this,"name");F(this,"actionProps");F(this,"props");this.name="編集可/不可",this.actionProps=[],this.props={field:{code:""},editable:"",condition:""},this.register()}async process(e,t,r){let i={canNext:!0,result:!1};try{if(this.actionProps=e.actionProps,!("field"in e.ActionValue)&&!("editable"in e.ActionValue))return i;this.props=e.ActionValue;const s=this.getConditionResult(r),l=t.record;if(!(this.props.field.code in l))throw new Error(`フィールド「${this.props.field.code}」が見つかりません。`);return s&&(this.props.editable==="編集可"?l[this.props.field.code].disabled=!1:this.props.editable==="編集不可"&&(l[this.props.field.code].disabled=!0)),i={canNext:!0,result:!0},i}catch(s){return r.errors.handleError(s,e),i.canNext=!1,i}}getConditionResult(e){const t=this.getCondition(this.props.condition);return t?t.evaluate(t.root,e):!0}getCondition(e){try{const t=new ConditionTree;return t.fromJson(e),t.getConditions(t.root).length>0?t:null}catch{return null}}register(){actionAddins[this.name]=this}}new FieldDisableAction;class ActionProperty{constructor(e,t,r,i,s){F(this,"component");F(this,"props");this.component=e,this.props={name:t,displayName:r,placeholder:i,modelValue:s}}static defaultProperty(){return new ActionProperty("InputText","displayName","表示名","表示を入力してください","")}}class ActionNode{constructor({id:e,name:t,title:r,inputPoint:i,outputPoints:s,actionProps:l}){F(this,"id");F(this,"name");F(this,"inputPoint");F(this,"outputPoints");F(this,"actionProps");F(this,"prevNodeId");F(this,"nextNodeIds");this.id=e,this.name=t,this.inputPoint=i,this.outputPoints=s;const f=ActionProperty.defaultProperty();f.props.modelValue=r,this.actionProps=l,this.nextNodeIds=new Map}get title(){const e=this.actionProps.find(t=>t.props.name==="displayName");return e==null?void 0:e.props.modelValue}get subTitle(){return this.name}get isRoot(){return!1}get ActionValue(){const e={};return this.actionProps.forEach(t=>{e[t.props.name]=t.props.modelValue}),e}}class RootAction{constructor({id:e,name:t,title:r,subTitle:i}){F(this,"id");F(this,"name");F(this,"title");F(this,"subTitle");F(this,"inputPoint");F(this,"outputPoints");F(this,"isRoot");F(this,"actionProps");F(this,"ActionValue");F(this,"prevNodeId");F(this,"nextNodeIds");this.id=e,this.name=t,this.title=r,this.subTitle=i,this.inputPoint="",this.outputPoints=[],this.isRoot=!0,this.actionProps=[],this.ActionValue={},this.nextNodeIds=new Map}}class ActionFlow{constructor(e){F(this,"id");F(this,"actionNodes");e instanceof Array?this.actionNodes=e:this.actionNodes=[e],this.id=""}findNodeById(e){return this.actionNodes.find(t=>t.id===e)}toJSON(){return{id:this.id,actionNodes:this.actionNodes.map(e=>{const{nextNodeIds:t,...r}=e;return{...r,nextNodeIds:Array.from(t.entries())}})}}getRoot(){return this.actionNodes.find(e=>e.isRoot)}static fromJSON(e){const t=JSON.parse(e),r=t.actionNodes.map(s=>{const l=s.isRoot?new RootAction(s):new ActionNode(s);return l.nextNodeIds=new Map(Object.entries(s.nextNodeIds)),l.prevNodeId=s.prevNodeId,l.id=s.id,l}),i=new ActionFlow(r);return i.id=t.id,i}}class ErrorManager{constructor(){F(this,"errors",[])}get hasError(){return this.errors.length>0}handleError(e,t,r){const i=r||"";let s=e instanceof Error?`${i} ${e.message}`:i;console.error(`「${t.name}」処理中例外発生しました。`,e),this.errors.push({error:s,action:t})}setEvent(e){const t=this.errors.map(r=>`「${r.action.name}」処理中例外発生しました。
詳細:${r.error}`);e.error=t.join(`
`)}showError(){const e=this.errors.map(t=>`「${t.action.name}」処理中例外発生しました。
詳細:${t.error}`);window.alert(e)}}const ShowErrorEvents=["app.record.create.submit.success","app.record.edit.submit.success","app.record.index.edit.submit.success"];class ActionProcess{constructor(e,t,r){F(this,"eventId");F(this,"flow");F(this,"event");F(this,"context");this.eventId=e,this.flow=t,this.event=r;const i=new ErrorManager;this.context={record:this.event.record,variables:{},errors:i}}async exec(){const e=this.flow.getRoot();if(e===void 0||e.nextNodeIds.size===0)return;let t=e.nextNodeIds.get("");if(t===void 0)return;let r=this.flow.findNodeById(t),i={canNext:!0};for(;r!==void 0&&i.canNext;){const s=actionAddins[r.name];s!==void 0&&(i=await s.process(r,this.event,this.context));let l="";if(r.outputPoints&&r.outputPoints.length>1&&(l=i.result||""),t=r.nextNodeIds.get(l),t===void 0)break;r=this.flow.findNodeById(t)}this.context.errors.hasError&&(this.context.errors.setEvent(this.event),ShowErrorEvents.includes(this.event.type)&&this.context.errors.showError())}}$(function(){const n=f=>f.filter(h=>h.includes(".change.")),e=f=>f.filter(h=>h.includes(".customButtonClick.")),t=f=>f.filter(h=>!h.includes(".customButtonClick.")&&!h.includes(".change.")),r=Object.keys(alcflow),i=n(r),s=e(r),l=t(r);l.length>0&&kintone.events.on(l,async f=>{const h=alcflow[f.type],p=ActionFlow.fromJSON(h.content);return p!==void 0&&await new ActionProcess(f.type,p,f).exec(),f}),i.length>0&&kintone.events.on(i,f=>{const h=alcflow[f.type],p=ActionFlow.fromJSON(h.content);return p!==void 0&&new ActionProcess(f.type,p,f).exec().then(y=>{const A=f.record;kintone.app.record.set({record:A})}).catch(y=>{console.error(y)}),f}),s.length>0&&s.forEach(f=>{$(document).on(f,async()=>{const h=kintone.app.record.get(),p=alcflow[f],m=ActionFlow.fromJSON(p.content);m!==void 0&&await new ActionProcess(f,m,h).exec();const y=h.record;kintone.app.record.set({record:y})})})});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWxjX3J1bnRpbWUuanMiLCJzb3VyY2VzIjpbIi4uL25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMiLCIuLi9zcmMvYWN0aW9ucy9pbmRleC50cyIsIi4uL3NyYy9hY3Rpb25zL211c3QtaW5wdXQudHMiLCIuLi9zcmMvdXRpbC9mb3JtYXQudHMiLCIuLi9zcmMvYWN0aW9ucy9hdXRvLW51bWJlcmluZy50cyIsIi4uL3NyYy90eXBlcy9Db25kaXRpb25zLnRzIiwiLi4vc3JjL2FjdGlvbnMvZmllbGQtc2hvd24udHMiLCIuLi9zcmMvYWN0aW9ucy9lcnJvci1zaG93LnRzIiwiLi4vc3JjL2FjdGlvbnMvYnV0dG9uLWFkZC50cyIsIi4uL3NyYy9hY3Rpb25zL2NvbmRpdGlvbi1hY3Rpb24udHMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvcGxhdGZvcm0vaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvcGxhdGZvcm0vVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yLmpzIiwiLi4vbm9kZV9tb2R1bGVzL21pbWUvTWltZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9taW1lL3R5cGVzL3N0YW5kYXJkLmpzIiwiLi4vbm9kZV9tb2R1bGVzL21pbWUvbGl0ZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9wbGF0Zm9ybS9icm93c2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BraW50b25lL3Jlc3QtYXBpLWNsaWVudC9saWIvc3JjL3VybC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9jbGllbnQvQmFzZUNsaWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9jbGllbnQvQnVsa1JlcXVlc3RDbGllbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvY2xpZW50L0FwcENsaWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9lcnJvci9LaW50b25lQWJvcnRTZWFyY2hFcnJvci5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9lcnJvci9LaW50b25lQWxsUmVjb3Jkc0Vycm9yLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BraW50b25lL3Jlc3QtYXBpLWNsaWVudC9saWIvc3JjL2Vycm9yL0tpbnRvbmVSZXN0QVBJRXJyb3IuanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvZXJyb3IvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvY2xpZW50L1JlY29yZENsaWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9jbGllbnQvU3BhY2VDbGllbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvZm9ybS1kYXRhL2xpYi9icm93c2VyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BraW50b25lL3Jlc3QtYXBpLWNsaWVudC9saWIvc3JjL2NsaWVudC9GaWxlQ2xpZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2Rpc3QvYnJvd3Nlci9heGlvcy5janMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvaHR0cC9BeGlvc0NsaWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9Aa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9odHRwL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvZXZhbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvcmFuZ2UuanMiLCIuLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3JlZi5qcyIsIi4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvc3ludGF4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy90eXBlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2VzLWVycm9ycy91cmkuanMiLCIuLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvc2hhbXMuanMiLCIuLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvaGFzLXByb3RvL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Z1bmN0aW9uLWJpbmQvaW1wbGVtZW50YXRpb24uanMiLCIuLi9ub2RlX21vZHVsZXMvZnVuY3Rpb24tYmluZC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9oYXNvd24vaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9lcy1kZWZpbmUtcHJvcGVydHkvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZ29wZC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9kZWZpbmUtZGF0YS1wcm9wZXJ0eS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9oYXMtcHJvcGVydHktZGVzY3JpcHRvcnMvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvc2V0LWZ1bmN0aW9uLWxlbmd0aC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kL2NhbGxCb3VuZC5qcyIsIi4uL19fdml0ZS1icm93c2VyLWV4dGVybmFsIiwiLi4vbm9kZV9tb2R1bGVzL29iamVjdC1pbnNwZWN0L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3NpZGUtY2hhbm5lbC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9xcy9saWIvZm9ybWF0cy5qcyIsIi4uL25vZGVfbW9kdWxlcy9xcy9saWIvdXRpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvcXMvbGliL3N0cmluZ2lmeS5qcyIsIi4uL25vZGVfbW9kdWxlcy9xcy9saWIvcGFyc2UuanMiLCIuLi9ub2RlX21vZHVsZXMvcXMvbGliL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2pzLWJhc2U2NC9iYXNlNjQuanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0BraW50b25lL3Jlc3QtYXBpLWNsaWVudC9saWIvc3JjL0tpbnRvbmVSZXNwb25zZUhhbmRsZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvS2ludG9uZVJlc3RBUElDbGllbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50L2xpYi9zcmMvaW5kZXguYnJvd3Nlci5qcyIsIi4uL3NyYy90eXBlcy9GaWVsZExheW91dC50cyIsIi4uL3NyYy91dGlsL2FnZ3JlZ2F0ZXMudHMiLCIuLi9zcmMvYWN0aW9ucy9kYXRhLXByb2Nlc3NpbmcudHMiLCIuLi9zcmMvYWN0aW9ucy9kYXRhLXVwZGF0ZS50cyIsIi4uL3NyYy9hY3Rpb25zL2N1cnJlbnQtZmllbGQtZ2V0LnRzIiwiLi4vc3JjL2FjdGlvbnMvcmVndWxhci1jaGVjay50cyIsIi4uL3NyYy9hY3Rpb25zL21haWwtY2hlY2sudHMiLCIuLi9zcmMvYWN0aW9ucy9jb3VudGVyLWNoZWNrLnRzIiwiLi4vc3JjL2FjdGlvbnMvZGF0ZXRpbWUtZ2V0dGVyLnRzIiwiLi4vc3JjL2FjdGlvbnMvaW5zZXJ0LXZhbHVlLnRzIiwiLi4vc3JjL2FjdGlvbnMvdmFsdWUtZ2V0dGVyLnRzIiwiLi4vc3JjL2FjdGlvbnMvc3RyaW5nLWpvaW4udHMiLCIuLi9zcmMvYWN0aW9ucy92YWxpZGF0aW9uLWZ1bGx3aWR0aC50cyIsIi4uL3NyYy9hY3Rpb25zL3ZhbGlkYXRpb24taGFsZndpZHRoLnRzIiwiLi4vc3JjL2FjdGlvbnMvbG9naW4tdXNlci1nZXR0ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL2Rpc3QvZG9tL2RhdGEuanMiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL2Rpc3QvdXRpbC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvZGlzdC9kb20vZXZlbnQtaGFuZGxlci5qcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvZGlzdC9kb20vbWFuaXB1bGF0b3IuanMiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL2Rpc3QvdXRpbC9jb25maWcuanMiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL2Rpc3QvYmFzZS1jb21wb25lbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL2Rpc3QvZG9tL3NlbGVjdG9yLWVuZ2luZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvZGlzdC91dGlsL2JhY2tkcm9wLmpzIiwiLi4vbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9kaXN0L3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucy5qcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvZGlzdC91dGlsL2ZvY3VzdHJhcC5qcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvZGlzdC91dGlsL3Njcm9sbGJhci5qcyIsIi4uL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvZGlzdC9tb2RhbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZW51bXMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvdy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2luc3RhbmNlT2YuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWF0aC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNMYXlvdXRWaWV3cG9ydC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9jb250YWlucy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFBhcmVudE5vZGUuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvd2l0aGluLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlUGFkZGluZ09iamVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZXhwYW5kVG9IYXNoTWFwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldFZhcmlhdGlvbi5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsQmFyWC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFZpZXdwb3J0UmVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50UmVjdC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2lzU2Nyb2xsUGFyZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0U2Nyb2xsUGFyZW50LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3JlY3RUb0NsaWVudFJlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZXRlY3RPdmVyZmxvdy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvaGlkZS5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL29mZnNldC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEFsdEF4aXMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldE5vZGVTY3JvbGwuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9vcmRlck1vZGlmaWVycy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGVib3VuY2UuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21lcmdlQnlOYW1lLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9jcmVhdGVQb3BwZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3BvcHBlci1saXRlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9wb3BwZXIuanMiLCIuLi9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2Rpc3QvanMvYm9vdHN0cmFwLmVzbS5qcyIsIi4uL3NyYy9hY3Rpb25zL2F1dG8tbG9va3VwLnRzIiwiLi4vc3JjL2FjdGlvbnMvZmllbGQtZGlzYWJsZS50cyIsIi4uL3NyYy90eXBlcy9BY3Rpb25UeXBlcy50cyIsIi4uL3NyYy90eXBlcy9hY3Rpb24tcHJvY2Vzcy50cyIsIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNy4xXG4gKiBodHRwczovL2pxdWVyeS5jb20vXG4gKlxuICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqXG4gKiBEYXRlOiAyMDIzLTA4LTI4VDEzOjM3WlxuICovXG4oIGZ1bmN0aW9uKCBnbG9iYWwsIGZhY3RvcnkgKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0aWYgKCB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIEZvciBDb21tb25KUyBhbmQgQ29tbW9uSlMtbGlrZSBlbnZpcm9ubWVudHMgd2hlcmUgYSBwcm9wZXIgYHdpbmRvd2Bcblx0XHQvLyBpcyBwcmVzZW50LCBleGVjdXRlIHRoZSBmYWN0b3J5IGFuZCBnZXQgalF1ZXJ5LlxuXHRcdC8vIEZvciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3QgaGF2ZSBhIGB3aW5kb3dgIHdpdGggYSBgZG9jdW1lbnRgXG5cdFx0Ly8gKHN1Y2ggYXMgTm9kZS5qcyksIGV4cG9zZSBhIGZhY3RvcnkgYXMgbW9kdWxlLmV4cG9ydHMuXG5cdFx0Ly8gVGhpcyBhY2NlbnR1YXRlcyB0aGUgbmVlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGEgcmVhbCBgd2luZG93YC5cblx0XHQvLyBlLmcuIHZhciBqUXVlcnkgPSByZXF1aXJlKFwianF1ZXJ5XCIpKHdpbmRvdyk7XG5cdFx0Ly8gU2VlIHRpY2tldCB0cmFjLTE0NTQ5IGZvciBtb3JlIGluZm8uXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuXHRcdFx0ZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOlxuXHRcdFx0ZnVuY3Rpb24oIHcgKSB7XG5cdFx0XHRcdGlmICggIXcuZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWN0b3J5KCB3ICk7XG5cdFx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoIGdsb2JhbCApO1xuXHR9XG5cbi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0XG59ICkoIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHtcblxuLy8gRWRnZSA8PSAxMiAtIDEzKywgRmlyZWZveCA8PTE4IC0gNDUrLCBJRSAxMCAtIDExLCBTYWZhcmkgNS4xIC0gOSssIGlPUyA2IC0gOS4xXG4vLyB0aHJvdyBleGNlcHRpb25zIHdoZW4gbm9uLXN0cmljdCBjb2RlIChlLmcuLCBBU1AuTkVUIDQuNSkgYWNjZXNzZXMgc3RyaWN0IG1vZGVcbi8vIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYpLCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uXG4vLyBlbm91Z2ggdGhhdCBhbGwgc3VjaCBhdHRlbXB0cyBhcmUgZ3VhcmRlZCBpbiBhIHRyeSBibG9jay5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyID0gW107XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcblxudmFyIHNsaWNlID0gYXJyLnNsaWNlO1xuXG52YXIgZmxhdCA9IGFyci5mbGF0ID8gZnVuY3Rpb24oIGFycmF5ICkge1xuXHRyZXR1cm4gYXJyLmZsYXQuY2FsbCggYXJyYXkgKTtcbn0gOiBmdW5jdGlvbiggYXJyYXkgKSB7XG5cdHJldHVybiBhcnIuY29uY2F0LmFwcGx5KCBbXSwgYXJyYXkgKTtcbn07XG5cblxudmFyIHB1c2ggPSBhcnIucHVzaDtcblxudmFyIGluZGV4T2YgPSBhcnIuaW5kZXhPZjtcblxudmFyIGNsYXNzMnR5cGUgPSB7fTtcblxudmFyIHRvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZztcblxudmFyIGhhc093biA9IGNsYXNzMnR5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBmblRvU3RyaW5nID0gaGFzT3duLnRvU3RyaW5nO1xuXG52YXIgT2JqZWN0RnVuY3Rpb25TdHJpbmcgPSBmblRvU3RyaW5nLmNhbGwoIE9iamVjdCApO1xuXG52YXIgc3VwcG9ydCA9IHt9O1xuXG52YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzRnVuY3Rpb24oIG9iaiApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTU3LCBGaXJlZm94IDw9NTJcblx0XHQvLyBJbiBzb21lIGJyb3dzZXJzLCB0eXBlb2YgcmV0dXJucyBcImZ1bmN0aW9uXCIgZm9yIEhUTUwgPG9iamVjdD4gZWxlbWVudHNcblx0XHQvLyAoaS5lLiwgYHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9iamVjdFwiICkgPT09IFwiZnVuY3Rpb25cImApLlxuXHRcdC8vIFdlIGRvbid0IHdhbnQgdG8gY2xhc3NpZnkgKmFueSogRE9NIG5vZGUgYXMgYSBmdW5jdGlvbi5cblx0XHQvLyBTdXBwb3J0OiBRdFdlYiA8PTMuOC41LCBXZWJLaXQgPD01MzQuMzQsIHdraHRtbHRvcGRmIHRvb2wgPD0wLjEyLjVcblx0XHQvLyBQbHVzIGZvciBvbGQgV2ViS2l0LCB0eXBlb2YgcmV0dXJucyBcImZ1bmN0aW9uXCIgZm9yIEhUTUwgY29sbGVjdGlvbnNcblx0XHQvLyAoZS5nLiwgYHR5cGVvZiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRpdlwiKSA9PT0gXCJmdW5jdGlvblwiYCkuIChnaC00NzU2KVxuXHRcdHJldHVybiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIG9iai5ub2RlVHlwZSAhPT0gXCJudW1iZXJcIiAmJlxuXHRcdFx0dHlwZW9mIG9iai5pdGVtICE9PSBcImZ1bmN0aW9uXCI7XG5cdH07XG5cblxudmFyIGlzV2luZG93ID0gZnVuY3Rpb24gaXNXaW5kb3coIG9iaiApIHtcblx0XHRyZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93O1xuXHR9O1xuXG5cbnZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcblxuXG5cblx0dmFyIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgPSB7XG5cdFx0dHlwZTogdHJ1ZSxcblx0XHRzcmM6IHRydWUsXG5cdFx0bm9uY2U6IHRydWUsXG5cdFx0bm9Nb2R1bGU6IHRydWVcblx0fTtcblxuXHRmdW5jdGlvbiBET01FdmFsKCBjb2RlLCBub2RlLCBkb2MgKSB7XG5cdFx0ZG9jID0gZG9jIHx8IGRvY3VtZW50O1xuXG5cdFx0dmFyIGksIHZhbCxcblx0XHRcdHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KCBcInNjcmlwdFwiICk7XG5cblx0XHRzY3JpcHQudGV4dCA9IGNvZGU7XG5cdFx0aWYgKCBub2RlICkge1xuXHRcdFx0Zm9yICggaSBpbiBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNjQrLCBFZGdlIDE4K1xuXHRcdFx0XHQvLyBTb21lIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgdGhlIFwibm9uY2VcIiBwcm9wZXJ0eSBvbiBzY3JpcHRzLlxuXHRcdFx0XHQvLyBPbiB0aGUgb3RoZXIgaGFuZCwganVzdCB1c2luZyBgZ2V0QXR0cmlidXRlYCBpcyBub3QgZW5vdWdoIGFzXG5cdFx0XHRcdC8vIHRoZSBgbm9uY2VgIGF0dHJpYnV0ZSBpcyByZXNldCB0byBhbiBlbXB0eSBzdHJpbmcgd2hlbmV2ZXIgaXRcblx0XHRcdFx0Ly8gYmVjb21lcyBicm93c2luZy1jb250ZXh0IGNvbm5lY3RlZC5cblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvaHRtbC9pc3N1ZXMvMjM2OVxuXHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jbm9uY2UtYXR0cmlidXRlc1xuXHRcdFx0XHQvLyBUaGUgYG5vZGUuZ2V0QXR0cmlidXRlYCBjaGVjayB3YXMgYWRkZWQgZm9yIHRoZSBzYWtlIG9mXG5cdFx0XHRcdC8vIGBqUXVlcnkuZ2xvYmFsRXZhbGAgc28gdGhhdCBpdCBjYW4gZmFrZSBhIG5vbmNlLWNvbnRhaW5pbmcgbm9kZVxuXHRcdFx0XHQvLyB2aWEgYW4gb2JqZWN0LlxuXHRcdFx0XHR2YWwgPSBub2RlWyBpIF0gfHwgbm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoIGkgKTtcblx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0c2NyaXB0LnNldEF0dHJpYnV0ZSggaSwgdmFsICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZG9jLmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdCApLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHNjcmlwdCApO1xuXHR9XG5cblxuZnVuY3Rpb24gdG9UeXBlKCBvYmogKSB7XG5cdGlmICggb2JqID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIG9iaiArIFwiXCI7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHkgKGZ1bmN0aW9uaXNoIFJlZ0V4cClcblx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiID9cblx0XHRjbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKCBvYmogKSBdIHx8IFwib2JqZWN0XCIgOlxuXHRcdHR5cGVvZiBvYmo7XG59XG4vKiBnbG9iYWwgU3ltYm9sICovXG4vLyBEZWZpbmluZyB0aGlzIGdsb2JhbCBpbiAuZXNsaW50cmMuanNvbiB3b3VsZCBjcmVhdGUgYSBkYW5nZXIgb2YgdXNpbmcgdGhlIGdsb2JhbFxuLy8gdW5ndWFyZGVkIGluIGFub3RoZXIgcGxhY2UsIGl0IHNlZW1zIHNhZmVyIHRvIGRlZmluZSBnbG9iYWwgb25seSBmb3IgdGhpcyBtb2R1bGVcblxuXG5cbnZhciB2ZXJzaW9uID0gXCIzLjcuMVwiLFxuXG5cdHJodG1sU3VmZml4ID0gL0hUTUwkL2ksXG5cblx0Ly8gRGVmaW5lIGEgbG9jYWwgY29weSBvZiBqUXVlcnlcblx0alF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXG5cdFx0Ly8gVGhlIGpRdWVyeSBvYmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnXG5cdFx0Ly8gTmVlZCBpbml0IGlmIGpRdWVyeSBpcyBjYWxsZWQgKGp1c3QgYWxsb3cgZXJyb3IgdG8gYmUgdGhyb3duIGlmIG5vdCBpbmNsdWRlZClcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCApO1xuXHR9O1xuXG5qUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0ge1xuXG5cdC8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWRcblx0anF1ZXJ5OiB2ZXJzaW9uLFxuXG5cdGNvbnN0cnVjdG9yOiBqUXVlcnksXG5cblx0Ly8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAwXG5cdGxlbmd0aDogMCxcblxuXHR0b0FycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHR9LFxuXG5cdC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1Jcblx0Ly8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXlcblx0Z2V0OiBmdW5jdGlvbiggbnVtICkge1xuXG5cdFx0Ly8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBjbGVhbiBhcnJheVxuXHRcdGlmICggbnVtID09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiBqdXN0IHRoZSBvbmUgZWxlbWVudCBmcm9tIHRoZSBzZXRcblx0XHRyZXR1cm4gbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVuZ3RoIF0gOiB0aGlzWyBudW0gXTtcblx0fSxcblxuXHQvLyBUYWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0YWNrXG5cdC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KVxuXHRwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblxuXHRcdC8vIEJ1aWxkIGEgbmV3IGpRdWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0XG5cdFx0dmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhpcy5jb25zdHJ1Y3RvcigpLCBlbGVtcyApO1xuXG5cdFx0Ly8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5jZSlcblx0XHRyZXQucHJldk9iamVjdCA9IHRoaXM7XG5cblx0XHQvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldFxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0Ly8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC5cblx0ZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2sgKTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRzbGljZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBzbGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICkgKTtcblx0fSxcblxuXHRmaXJzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIDAgKTtcblx0fSxcblxuXHRsYXN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggLTEgKTtcblx0fSxcblxuXHRldmVuOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5ncmVwKCB0aGlzLCBmdW5jdGlvbiggX2VsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gKCBpICsgMSApICUgMjtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRvZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LmdyZXAoIHRoaXMsIGZ1bmN0aW9uKCBfZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiBpICUgMjtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRlcTogZnVuY3Rpb24oIGkgKSB7XG5cdFx0dmFyIGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0aiA9ICtpICsgKCBpIDwgMCA/IGxlbiA6IDAgKTtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGogPj0gMCAmJiBqIDwgbGVuID8gWyB0aGlzWyBqIF0gXSA6IFtdICk7XG5cdH0sXG5cblx0ZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IoKTtcblx0fSxcblxuXHQvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuXG5cdC8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLlxuXHRwdXNoOiBwdXNoLFxuXHRzb3J0OiBhcnIuc29ydCxcblx0c3BsaWNlOiBhcnIuc3BsaWNlXG59O1xuXG5qUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsXG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyAwIF0gfHwge30sXG5cdFx0aSA9IDEsXG5cdFx0bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcblx0XHRkZWVwID0gZmFsc2U7XG5cblx0Ly8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvblxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGRlZXAgPSB0YXJnZXQ7XG5cblx0XHQvLyBTa2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0XG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyBpIF0gfHwge307XG5cdFx0aSsrO1xuXHR9XG5cblx0Ly8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpXG5cdGlmICggdHlwZW9mIHRhcmdldCAhPT0gXCJvYmplY3RcIiAmJiAhaXNGdW5jdGlvbiggdGFyZ2V0ICkgKSB7XG5cdFx0dGFyZ2V0ID0ge307XG5cdH1cblxuXHQvLyBFeHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWRcblx0aWYgKCBpID09PSBsZW5ndGggKSB7XG5cdFx0dGFyZ2V0ID0gdGhpcztcblx0XHRpLS07XG5cdH1cblxuXHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblxuXHRcdC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXNcblx0XHRpZiAoICggb3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdICkgIT0gbnVsbCApIHtcblxuXHRcdFx0Ly8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdFxuXHRcdFx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdFx0XHRjb3B5ID0gb3B0aW9uc1sgbmFtZSBdO1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgT2JqZWN0LnByb3RvdHlwZSBwb2xsdXRpb25cblx0XHRcdFx0Ly8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcFxuXHRcdFx0XHRpZiAoIG5hbWUgPT09IFwiX19wcm90b19fXCIgfHwgdGFyZ2V0ID09PSBjb3B5ICkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzXG5cdFx0XHRcdGlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvcHkgKSB8fFxuXHRcdFx0XHRcdCggY29weUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KCBjb3B5ICkgKSApICkge1xuXHRcdFx0XHRcdHNyYyA9IHRhcmdldFsgbmFtZSBdO1xuXG5cdFx0XHRcdFx0Ly8gRW5zdXJlIHByb3BlciB0eXBlIGZvciB0aGUgc291cmNlIHZhbHVlXG5cdFx0XHRcdFx0aWYgKCBjb3B5SXNBcnJheSAmJiAhQXJyYXkuaXNBcnJheSggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IFtdO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoICFjb3B5SXNBcnJheSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHNyYyApICkge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSB7fTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvcHlJc0FycmF5ID0gZmFsc2U7XG5cblx0XHRcdFx0XHQvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW1cblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBjb3B5ICk7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlc1xuXHRcdFx0XHR9IGVsc2UgaWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBjb3B5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3Rcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBVbmlxdWUgZm9yIGVhY2ggY29weSBvZiBqUXVlcnkgb24gdGhlIHBhZ2Vcblx0ZXhwYW5kbzogXCJqUXVlcnlcIiArICggdmVyc2lvbiArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAvXFxEL2csIFwiXCIgKSxcblxuXHQvLyBBc3N1bWUgalF1ZXJ5IGlzIHJlYWR5IHdpdGhvdXQgdGhlIHJlYWR5IG1vZHVsZVxuXHRpc1JlYWR5OiB0cnVlLFxuXG5cdGVycm9yOiBmdW5jdGlvbiggbXNnICkge1xuXHRcdHRocm93IG5ldyBFcnJvciggbXNnICk7XG5cdH0sXG5cblx0bm9vcDogZnVuY3Rpb24oKSB7fSxcblxuXHRpc1BsYWluT2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBwcm90bywgQ3RvcjtcblxuXHRcdC8vIERldGVjdCBvYnZpb3VzIG5lZ2F0aXZlc1xuXHRcdC8vIFVzZSB0b1N0cmluZyBpbnN0ZWFkIG9mIGpRdWVyeS50eXBlIHRvIGNhdGNoIGhvc3Qgb2JqZWN0c1xuXHRcdGlmICggIW9iaiB8fCB0b1N0cmluZy5jYWxsKCBvYmogKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRwcm90byA9IGdldFByb3RvKCBvYmogKTtcblxuXHRcdC8vIE9iamVjdHMgd2l0aCBubyBwcm90b3R5cGUgKGUuZy4sIGBPYmplY3QuY3JlYXRlKCBudWxsIClgKSBhcmUgcGxhaW5cblx0XHRpZiAoICFwcm90byApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIE9iamVjdHMgd2l0aCBwcm90b3R5cGUgYXJlIHBsYWluIGlmZiB0aGV5IHdlcmUgY29uc3RydWN0ZWQgYnkgYSBnbG9iYWwgT2JqZWN0IGZ1bmN0aW9uXG5cdFx0Q3RvciA9IGhhc093bi5jYWxsKCBwcm90bywgXCJjb25zdHJ1Y3RvclwiICkgJiYgcHJvdG8uY29uc3RydWN0b3I7XG5cdFx0cmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgZm5Ub1N0cmluZy5jYWxsKCBDdG9yICkgPT09IE9iamVjdEZ1bmN0aW9uU3RyaW5nO1xuXHR9LFxuXG5cdGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIG5hbWU7XG5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Ly8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgcHJvdmlkZWQgY29udGV4dDsgZmFsbHMgYmFjayB0byB0aGUgZ2xvYmFsIG9uZVxuXHQvLyBpZiBub3Qgc3BlY2lmaWVkLlxuXHRnbG9iYWxFdmFsOiBmdW5jdGlvbiggY29kZSwgb3B0aW9ucywgZG9jICkge1xuXHRcdERPTUV2YWwoIGNvZGUsIHsgbm9uY2U6IG9wdGlvbnMgJiYgb3B0aW9ucy5ub25jZSB9LCBkb2MgKTtcblx0fSxcblxuXHRlYWNoOiBmdW5jdGlvbiggb2JqLCBjYWxsYmFjayApIHtcblx0XHR2YXIgbGVuZ3RoLCBpID0gMDtcblxuXHRcdGlmICggaXNBcnJheUxpa2UoIG9iaiApICkge1xuXHRcdFx0bGVuZ3RoID0gb2JqLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIG9iaiApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cblx0Ly8gUmV0cmlldmUgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG5cdHRleHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBub2RlLFxuXHRcdFx0cmV0ID0gXCJcIixcblx0XHRcdGkgPSAwLFxuXHRcdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0aWYgKCAhbm9kZVR5cGUgKSB7XG5cblx0XHRcdC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XG5cdFx0XHR3aGlsZSAoICggbm9kZSA9IGVsZW1bIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0Ly8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXNcblx0XHRcdFx0cmV0ICs9IGpRdWVyeS50ZXh0KCBub2RlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICggbm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDExICkge1xuXHRcdFx0cmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7XG5cdFx0fVxuXHRcdGlmICggbm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kb2N1bWVudEVsZW1lbnQudGV4dENvbnRlbnQ7XG5cdFx0fVxuXHRcdGlmICggbm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdFx0fVxuXG5cdFx0Ly8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzXG5cblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkge1xuXHRcdHZhciByZXQgPSByZXN1bHRzIHx8IFtdO1xuXG5cdFx0aWYgKCBhcnIgIT0gbnVsbCApIHtcblx0XHRcdGlmICggaXNBcnJheUxpa2UoIE9iamVjdCggYXJyICkgKSApIHtcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCByZXQsXG5cdFx0XHRcdFx0dHlwZW9mIGFyciA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0XHRbIGFyciBdIDogYXJyXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmNhbGwoIHJldCwgYXJyICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHRpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyLCBpICkge1xuXHRcdHJldHVybiBhcnIgPT0gbnVsbCA/IC0xIDogaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkgKTtcblx0fSxcblxuXHRpc1hNTERvYzogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWVzcGFjZSA9IGVsZW0gJiYgZWxlbS5uYW1lc3BhY2VVUkksXG5cdFx0XHRkb2NFbGVtID0gZWxlbSAmJiAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkuZG9jdW1lbnRFbGVtZW50O1xuXG5cdFx0Ly8gQXNzdW1lIEhUTUwgd2hlbiBkb2N1bWVudEVsZW1lbnQgZG9lc24ndCB5ZXQgZXhpc3QsIHN1Y2ggYXMgaW5zaWRlXG5cdFx0Ly8gZG9jdW1lbnQgZnJhZ21lbnRzLlxuXHRcdHJldHVybiAhcmh0bWxTdWZmaXgudGVzdCggbmFtZXNwYWNlIHx8IGRvY0VsZW0gJiYgZG9jRWxlbS5ub2RlTmFtZSB8fCBcIkhUTUxcIiApO1xuXHR9LFxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdG1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29uZCApIHtcblx0XHR2YXIgbGVuID0gK3NlY29uZC5sZW5ndGgsXG5cdFx0XHRqID0gMCxcblx0XHRcdGkgPSBmaXJzdC5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdO1xuXHRcdH1cblxuXHRcdGZpcnN0Lmxlbmd0aCA9IGk7XG5cblx0XHRyZXR1cm4gZmlyc3Q7XG5cdH0sXG5cblx0Z3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ZXJ0ICkge1xuXHRcdHZhciBjYWxsYmFja0ludmVyc2UsXG5cdFx0XHRtYXRjaGVzID0gW10sXG5cdFx0XHRpID0gMCxcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aCxcblx0XHRcdGNhbGxiYWNrRXhwZWN0ID0gIWludmVydDtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXNcblx0XHQvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvblxuXHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0Y2FsbGJhY2tJbnZlcnNlID0gIWNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpICk7XG5cdFx0XHRpZiAoIGNhbGxiYWNrSW52ZXJzZSAhPT0gY2FsbGJhY2tFeHBlY3QgKSB7XG5cdFx0XHRcdG1hdGNoZXMucHVzaCggZWxlbXNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBtYXRjaGVzO1xuXHR9LFxuXG5cdC8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGFyZyApIHtcblx0XHR2YXIgbGVuZ3RoLCB2YWx1ZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0cmV0ID0gW107XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIgbmV3IHZhbHVlc1xuXHRcdGlmICggaXNBcnJheUxpa2UoIGVsZW1zICkgKSB7XG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2JqZWN0LFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIGVsZW1zICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdFx0cmV0dXJuIGZsYXQoIHJldCApO1xuXHR9LFxuXG5cdC8vIEEgZ2xvYmFsIEdVSUQgY291bnRlciBmb3Igb2JqZWN0c1xuXHRndWlkOiAxLFxuXG5cdC8vIGpRdWVyeS5zdXBwb3J0IGlzIG5vdCB1c2VkIGluIENvcmUgYnV0IG90aGVyIHByb2plY3RzIGF0dGFjaCB0aGVpclxuXHQvLyBwcm9wZXJ0aWVzIHRvIGl0IHNvIGl0IG5lZWRzIHRvIGV4aXN0LlxuXHRzdXBwb3J0OiBzdXBwb3J0XG59ICk7XG5cbmlmICggdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICkge1xuXHRqUXVlcnkuZm5bIFN5bWJvbC5pdGVyYXRvciBdID0gYXJyWyBTeW1ib2wuaXRlcmF0b3IgXTtcbn1cblxuLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwXG5qUXVlcnkuZWFjaCggXCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbFwiLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdFx0Y2xhc3MydHlwZVsgXCJbb2JqZWN0IFwiICsgbmFtZSArIFwiXVwiIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdH0gKTtcblxuZnVuY3Rpb24gaXNBcnJheUxpa2UoIG9iaiApIHtcblxuXHQvLyBTdXBwb3J0OiByZWFsIGlPUyA4LjIgb25seSAobm90IHJlcHJvZHVjaWJsZSBpbiBzaW11bGF0b3IpXG5cdC8vIGBpbmAgY2hlY2sgdXNlZCB0byBwcmV2ZW50IEpJVCBlcnJvciAoZ2gtMjE0NSlcblx0Ly8gaGFzT3duIGlzbid0IHVzZWQgaGVyZSBkdWUgdG8gZmFsc2UgbmVnYXRpdmVzXG5cdC8vIHJlZ2FyZGluZyBOb2RlbGlzdCBsZW5ndGggaW4gSUVcblx0dmFyIGxlbmd0aCA9ICEhb2JqICYmIFwibGVuZ3RoXCIgaW4gb2JqICYmIG9iai5sZW5ndGgsXG5cdFx0dHlwZSA9IHRvVHlwZSggb2JqICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBvYmogKSB8fCBpc1dpbmRvdyggb2JqICkgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHR5cGUgPT09IFwiYXJyYXlcIiB8fCBsZW5ndGggPT09IDAgfHxcblx0XHR0eXBlb2YgbGVuZ3RoID09PSBcIm51bWJlclwiICYmIGxlbmd0aCA+IDAgJiYgKCBsZW5ndGggLSAxICkgaW4gb2JqO1xufVxuXG5cbmZ1bmN0aW9uIG5vZGVOYW1lKCBlbGVtLCBuYW1lICkge1xuXG5cdHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG59XG52YXIgcG9wID0gYXJyLnBvcDtcblxuXG52YXIgc29ydCA9IGFyci5zb3J0O1xuXG5cbnZhciBzcGxpY2UgPSBhcnIuc3BsaWNlO1xuXG5cbnZhciB3aGl0ZXNwYWNlID0gXCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiO1xuXG5cbnZhciBydHJpbUNTUyA9IG5ldyBSZWdFeHAoXG5cdFwiXlwiICsgd2hpdGVzcGFjZSArIFwiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIiArIHdoaXRlc3BhY2UgKyBcIiskXCIsXG5cdFwiZ1wiXG4pO1xuXG5cblxuXG4vLyBOb3RlOiBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmXG5qUXVlcnkuY29udGFpbnMgPSBmdW5jdGlvbiggYSwgYiApIHtcblx0dmFyIGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlO1xuXG5cdHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgKFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExK1xuXHRcdC8vIElFIGRvZXNuJ3QgaGF2ZSBgY29udGFpbnNgIG9uIFNWRy5cblx0XHRhLmNvbnRhaW5zID9cblx0XHRcdGEuY29udGFpbnMoIGJ1cCApIDpcblx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYnVwICkgJiAxNlxuXHQpICk7XG59O1xuXG5cblxuXG4vLyBDU1Mgc3RyaW5nL2lkZW50aWZpZXIgc2VyaWFsaXphdGlvblxuLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNjb21tb24tc2VyaWFsaXppbmctaWRpb21zXG52YXIgcmNzc2VzY2FwZSA9IC8oW1xcMC1cXHgxZlxceDdmXXxeLT9cXGQpfF4tJHxbXlxceDgwLVxcdUZGRkZcXHctXS9nO1xuXG5mdW5jdGlvbiBmY3NzZXNjYXBlKCBjaCwgYXNDb2RlUG9pbnQgKSB7XG5cdGlmICggYXNDb2RlUG9pbnQgKSB7XG5cblx0XHQvLyBVKzAwMDAgTlVMTCBiZWNvbWVzIFUrRkZGRCBSRVBMQUNFTUVOVCBDSEFSQUNURVJcblx0XHRpZiAoIGNoID09PSBcIlxcMFwiICkge1xuXHRcdFx0cmV0dXJuIFwiXFx1RkZGRFwiO1xuXHRcdH1cblxuXHRcdC8vIENvbnRyb2wgY2hhcmFjdGVycyBhbmQgKGRlcGVuZGVudCB1cG9uIHBvc2l0aW9uKSBudW1iZXJzIGdldCBlc2NhcGVkIGFzIGNvZGUgcG9pbnRzXG5cdFx0cmV0dXJuIGNoLnNsaWNlKCAwLCAtMSApICsgXCJcXFxcXCIgKyBjaC5jaGFyQ29kZUF0KCBjaC5sZW5ndGggLSAxICkudG9TdHJpbmcoIDE2ICkgKyBcIiBcIjtcblx0fVxuXG5cdC8vIE90aGVyIHBvdGVudGlhbGx5LXNwZWNpYWwgQVNDSUkgY2hhcmFjdGVycyBnZXQgYmFja3NsYXNoLWVzY2FwZWRcblx0cmV0dXJuIFwiXFxcXFwiICsgY2g7XG59XG5cbmpRdWVyeS5lc2NhcGVTZWxlY3RvciA9IGZ1bmN0aW9uKCBzZWwgKSB7XG5cdHJldHVybiAoIHNlbCArIFwiXCIgKS5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG59O1xuXG5cblxuXG52YXIgcHJlZmVycmVkRG9jID0gZG9jdW1lbnQsXG5cdHB1c2hOYXRpdmUgPSBwdXNoO1xuXG4oIGZ1bmN0aW9uKCkge1xuXG52YXIgaSxcblx0RXhwcixcblx0b3V0ZXJtb3N0Q29udGV4dCxcblx0c29ydElucHV0LFxuXHRoYXNEdXBsaWNhdGUsXG5cdHB1c2ggPSBwdXNoTmF0aXZlLFxuXG5cdC8vIExvY2FsIGRvY3VtZW50IHZhcnNcblx0ZG9jdW1lbnQsXG5cdGRvY3VtZW50RWxlbWVudCxcblx0ZG9jdW1lbnRJc0hUTUwsXG5cdHJidWdneVFTQSxcblx0bWF0Y2hlcyxcblxuXHQvLyBJbnN0YW5jZS1zcGVjaWZpYyBkYXRhXG5cdGV4cGFuZG8gPSBqUXVlcnkuZXhwYW5kbyxcblx0ZGlycnVucyA9IDAsXG5cdGRvbmUgPSAwLFxuXHRjbGFzc0NhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0dG9rZW5DYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdGNvbXBpbGVyQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRub25uYXRpdmVTZWxlY3RvckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0c29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH0sXG5cblx0Ym9vbGVhbnMgPSBcImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxpc21hcHxcIiArXG5cdFx0XCJsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkXCIsXG5cblx0Ly8gUmVndWxhciBleHByZXNzaW9uc1xuXG5cdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtc3ludGF4LTMvI2lkZW50LXRva2VuLWRpYWdyYW1cblx0aWRlbnRpZmllciA9IFwiKD86XFxcXFxcXFxbXFxcXGRhLWZBLUZdezEsNn1cIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiP3xcXFxcXFxcXFteXFxcXHJcXFxcblxcXFxmXXxbXFxcXHctXXxbXlxcMC1cXFxceDdmXSkrXCIsXG5cblx0Ly8gQXR0cmlidXRlIHNlbGVjdG9yczogaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9yc1xuXHRhdHRyaWJ1dGVzID0gXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcIiArIHdoaXRlc3BhY2UgK1xuXG5cdFx0Ly8gT3BlcmF0b3IgKGNhcHR1cmUgMilcblx0XHRcIiooWypeJHwhfl0/PSlcIiArIHdoaXRlc3BhY2UgK1xuXG5cdFx0Ly8gXCJBdHRyaWJ1dGUgdmFsdWVzIG11c3QgYmUgQ1NTIGlkZW50aWZpZXJzIFtjYXB0dXJlIDVdIG9yIHN0cmluZ3MgW2NhcHR1cmUgMyBvciBjYXB0dXJlIDRdXCJcblx0XHRcIiooPzonKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCJ8KFwiICsgaWRlbnRpZmllciArIFwiKSl8KVwiICtcblx0XHR3aGl0ZXNwYWNlICsgXCIqXFxcXF1cIixcblxuXHRwc2V1ZG9zID0gXCI6KFwiICsgaWRlbnRpZmllciArIFwiKSg/OlxcXFwoKFwiICtcblxuXHRcdC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBwcmVGaWx0ZXIsIHByZWZlciBhcmd1bWVudHM6XG5cdFx0Ly8gMS4gcXVvdGVkIChjYXB0dXJlIDM7IGNhcHR1cmUgNCBvciBjYXB0dXJlIDUpXG5cdFx0XCIoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXxcIiArXG5cblx0XHQvLyAyLiBzaW1wbGUgKGNhcHR1cmUgNilcblx0XHRcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpW1xcXFxdXXxcIiArIGF0dHJpYnV0ZXMgKyBcIikqKXxcIiArXG5cblx0XHQvLyAzLiBhbnl0aGluZyBlbHNlIChjYXB0dXJlIDIpXG5cdFx0XCIuKlwiICtcblx0XHRcIilcXFxcKXwpXCIsXG5cblx0Ly8gTGVhZGluZyBhbmQgbm9uLWVzY2FwZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgY2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBwcmVjZWRpbmcgdGhlIGxhdHRlclxuXHRyd2hpdGVzcGFjZSA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcIitcIiwgXCJnXCIgKSxcblxuXHRyY29tbWEgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiosXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblx0cmxlYWRpbmdDb21iaW5hdG9yID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFs+K35dfFwiICsgd2hpdGVzcGFjZSArIFwiKVwiICtcblx0XHR3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblx0cmRlc2NlbmQgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCJ8PlwiICksXG5cblx0cnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3MgKSxcblx0cmlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCBcIl5cIiArIGlkZW50aWZpZXIgKyBcIiRcIiApLFxuXG5cdG1hdGNoRXhwciA9IHtcblx0XHRJRDogbmV3IFJlZ0V4cCggXCJeIyhcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdENMQVNTOiBuZXcgUmVnRXhwKCBcIl5cXFxcLihcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFRBRzogbmV3IFJlZ0V4cCggXCJeKFwiICsgaWRlbnRpZmllciArIFwifFsqXSlcIiApLFxuXHRcdEFUVFI6IG5ldyBSZWdFeHAoIFwiXlwiICsgYXR0cmlidXRlcyApLFxuXHRcdFBTRVVETzogbmV3IFJlZ0V4cCggXCJeXCIgKyBwc2V1ZG9zICksXG5cdFx0Q0hJTEQ6IG5ldyBSZWdFeHAoXG5cdFx0XHRcIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcXFwoXCIgK1xuXHRcdFx0XHR3aGl0ZXNwYWNlICsgXCIqKGV2ZW58b2RkfCgoWystXXwpKFxcXFxkKilufClcIiArIHdoaXRlc3BhY2UgKyBcIiooPzooWystXXwpXCIgK1xuXHRcdFx0XHR3aGl0ZXNwYWNlICsgXCIqKFxcXFxkKyl8KSlcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpXCIsIFwiaVwiICksXG5cdFx0Ym9vbDogbmV3IFJlZ0V4cCggXCJeKD86XCIgKyBib29sZWFucyArIFwiKSRcIiwgXCJpXCIgKSxcblxuXHRcdC8vIEZvciB1c2UgaW4gbGlicmFyaWVzIGltcGxlbWVudGluZyAuaXMoKVxuXHRcdC8vIFdlIHVzZSB0aGlzIGZvciBQT1MgbWF0Y2hpbmcgaW4gYHNlbGVjdGBcblx0XHRuZWVkc0NvbnRleHQ6IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKigoPzotXFxcXGQpP1xcXFxkKilcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpKD89W14tXXwkKVwiLCBcImlcIiApXG5cdH0sXG5cblx0cmlucHV0cyA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJoZWFkZXIgPSAvXmhcXGQkL2ksXG5cblx0Ly8gRWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzXG5cdHJxdWlja0V4cHIgPSAvXig/OiMoW1xcdy1dKyl8KFxcdyspfFxcLihbXFx3LV0rKSkkLyxcblxuXHRyc2libGluZyA9IC9bK35dLyxcblxuXHQvLyBDU1MgZXNjYXBlc1xuXHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2FwZWQtY2hhcmFjdGVyc1xuXHRydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCBcIlxcXFxcXFxcW1xcXFxkYS1mQS1GXXsxLDZ9XCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIj98XFxcXFxcXFwoW15cXFxcclxcXFxuXFxcXGZdKVwiLCBcImdcIiApLFxuXHRmdW5lc2NhcGUgPSBmdW5jdGlvbiggZXNjYXBlLCBub25IZXggKSB7XG5cdFx0dmFyIGhpZ2ggPSBcIjB4XCIgKyBlc2NhcGUuc2xpY2UoIDEgKSAtIDB4MTAwMDA7XG5cblx0XHRpZiAoIG5vbkhleCApIHtcblxuXHRcdFx0Ly8gU3RyaXAgdGhlIGJhY2tzbGFzaCBwcmVmaXggZnJvbSBhIG5vbi1oZXggZXNjYXBlIHNlcXVlbmNlXG5cdFx0XHRyZXR1cm4gbm9uSGV4O1xuXHRcdH1cblxuXHRcdC8vIFJlcGxhY2UgYSBoZXhhZGVjaW1hbCBlc2NhcGUgc2VxdWVuY2Ugd2l0aCB0aGUgZW5jb2RlZCBVbmljb2RlIGNvZGUgcG9pbnRcblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExK1xuXHRcdC8vIEZvciB2YWx1ZXMgb3V0c2lkZSB0aGUgQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lIChCTVApLCBtYW51YWxseSBjb25zdHJ1Y3QgYVxuXHRcdC8vIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0cmV0dXJuIGhpZ2ggPCAwID9cblx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOlxuXHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCA+PiAxMCB8IDB4RDgwMCwgaGlnaCAmIDB4M0ZGIHwgMHhEQzAwICk7XG5cdH0sXG5cblx0Ly8gVXNlZCBmb3IgaWZyYW1lczsgc2VlIGBzZXREb2N1bWVudGAuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCtcblx0Ly8gUmVtb3ZpbmcgdGhlIGZ1bmN0aW9uIHdyYXBwZXIgY2F1c2VzIGEgXCJQZXJtaXNzaW9uIERlbmllZFwiXG5cdC8vIGVycm9yIGluIElFL0VkZ2UuXG5cdHVubG9hZEhhbmRsZXIgPSBmdW5jdGlvbigpIHtcblx0XHRzZXREb2N1bWVudCgpO1xuXHR9LFxuXG5cdGluRGlzYWJsZWRGaWVsZHNldCA9IGFkZENvbWJpbmF0b3IoXG5cdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZSAmJiBub2RlTmFtZSggZWxlbSwgXCJmaWVsZHNldFwiICk7XG5cdFx0fSxcblx0XHR7IGRpcjogXCJwYXJlbnROb2RlXCIsIG5leHQ6IFwibGVnZW5kXCIgfVxuXHQpO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gQWNjZXNzaW5nIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgY2FuIHRocm93IHVuZXhwZWN0ZWRseVxuLy8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzkzXG5mdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblx0fSBjYXRjaCAoIGVyciApIHsgfVxufVxuXG4vLyBPcHRpbWl6ZSBmb3IgcHVzaC5hcHBseSggXywgTm9kZUxpc3QgKVxudHJ5IHtcblx0cHVzaC5hcHBseShcblx0XHQoIGFyciA9IHNsaWNlLmNhbGwoIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzICkgKSxcblx0XHRwcmVmZXJyZWREb2MuY2hpbGROb2Rlc1xuXHQpO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjBcblx0Ly8gRGV0ZWN0IHNpbGVudGx5IGZhaWxpbmcgcHVzaC5hcHBseVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7XG59IGNhdGNoICggZSApIHtcblx0cHVzaCA9IHtcblx0XHRhcHBseTogZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0cHVzaE5hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKCBlbHMgKSApO1xuXHRcdH0sXG5cdFx0Y2FsbDogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHRcdHB1c2hOYXRpdmUuYXBwbHkoIHRhcmdldCwgc2xpY2UuY2FsbCggYXJndW1lbnRzLCAxICkgKTtcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIGZpbmQoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgbSwgaSwgZWxlbSwgbmlkLCBtYXRjaCwgZ3JvdXBzLCBuZXdTZWxlY3Rvcixcblx0XHRuZXdDb250ZXh0ID0gY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQsXG5cblx0XHQvLyBub2RlVHlwZSBkZWZhdWx0cyB0byA5LCBzaW5jZSBjb250ZXh0IGRlZmF1bHRzIHRvIGRvY3VtZW50XG5cdFx0bm9kZVR5cGUgPSBjb250ZXh0ID8gY29udGV4dC5ub2RlVHlwZSA6IDk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGZyb20gY2FsbHMgd2l0aCBpbnZhbGlkIHNlbGVjdG9yIG9yIGNvbnRleHRcblx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgfHwgIXNlbGVjdG9yIHx8XG5cdFx0bm9kZVR5cGUgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgJiYgbm9kZVR5cGUgIT09IDExICkge1xuXG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH1cblxuXHQvLyBUcnkgdG8gc2hvcnRjdXQgZmluZCBvcGVyYXRpb25zIChhcyBvcHBvc2VkIHRvIGZpbHRlcnMpIGluIEhUTUwgZG9jdW1lbnRzXG5cdGlmICggIXNlZWQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0XHRjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDtcblxuXHRcdGlmICggZG9jdW1lbnRJc0hUTUwgKSB7XG5cblx0XHRcdC8vIElmIHRoZSBzZWxlY3RvciBpcyBzdWZmaWNpZW50bHkgc2ltcGxlLCB0cnkgdXNpbmcgYSBcImdldCpCeSpcIiBET00gbWV0aG9kXG5cdFx0XHQvLyAoZXhjZXB0aW5nIERvY3VtZW50RnJhZ21lbnQgY29udGV4dCwgd2hlcmUgdGhlIG1ldGhvZHMgZG9uJ3QgZXhpc3QpXG5cdFx0XHRpZiAoIG5vZGVUeXBlICE9PSAxMSAmJiAoIG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApICkgKSB7XG5cblx0XHRcdFx0Ly8gSUQgc2VsZWN0b3Jcblx0XHRcdFx0aWYgKCAoIG0gPSBtYXRjaFsgMSBdICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb2N1bWVudCBjb250ZXh0XG5cdFx0XHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdFx0aWYgKCBlbGVtLmlkID09PSBtICkge1xuXHRcdFx0XHRcdFx0XHRcdHB1c2guY2FsbCggcmVzdWx0cywgZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEVsZW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICYmICggZWxlbSA9IG5ld0NvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSApICYmXG5cdFx0XHRcdFx0XHRcdGZpbmQuY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJlxuXHRcdFx0XHRcdFx0XHRlbGVtLmlkID09PSBtICkge1xuXG5cdFx0XHRcdFx0XHRcdHB1c2guY2FsbCggcmVzdWx0cywgZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHlwZSBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFsgMiBdICkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHNlbGVjdG9yICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0XHQvLyBDbGFzcyBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCAoIG0gPSBtYXRjaFsgMyBdICkgJiYgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGFrZSBhZHZhbnRhZ2Ugb2YgcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0aWYgKCAhbm9ubmF0aXZlU2VsZWN0b3JDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdICYmXG5cdFx0XHRcdCggIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHRuZXdTZWxlY3RvciA9IHNlbGVjdG9yO1xuXHRcdFx0XHRuZXdDb250ZXh0ID0gY29udGV4dDtcblxuXHRcdFx0XHQvLyBxU0EgY29uc2lkZXJzIGVsZW1lbnRzIG91dHNpZGUgYSBzY29waW5nIHJvb3Qgd2hlbiBldmFsdWF0aW5nIGNoaWxkIG9yXG5cdFx0XHRcdC8vIGRlc2NlbmRhbnQgY29tYmluYXRvcnMsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQuXG5cdFx0XHRcdC8vIEluIHN1Y2ggY2FzZXMsIHdlIHdvcmsgYXJvdW5kIHRoZSBiZWhhdmlvciBieSBwcmVmaXhpbmcgZXZlcnkgc2VsZWN0b3IgaW4gdGhlXG5cdFx0XHRcdC8vIGxpc3Qgd2l0aCBhbiBJRCBzZWxlY3RvciByZWZlcmVuY2luZyB0aGUgc2NvcGUgY29udGV4dC5cblx0XHRcdFx0Ly8gVGhlIHRlY2huaXF1ZSBoYXMgdG8gYmUgdXNlZCBhcyB3ZWxsIHdoZW4gYSBsZWFkaW5nIGNvbWJpbmF0b3IgaXMgdXNlZFxuXHRcdFx0XHQvLyBhcyBzdWNoIHNlbGVjdG9ycyBhcmUgbm90IHJlY29nbml6ZWQgYnkgcXVlcnlTZWxlY3RvckFsbC5cblx0XHRcdFx0Ly8gVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoaXMgdGVjaG5pcXVlLlxuXHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0KCByZGVzY2VuZC50ZXN0KCBzZWxlY3RvciApIHx8IHJsZWFkaW5nQ29tYmluYXRvci50ZXN0KCBzZWxlY3RvciApICkgKSB7XG5cblx0XHRcdFx0XHQvLyBFeHBhbmQgY29udGV4dCBmb3Igc2libGluZyBzZWxlY3RvcnNcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHxcblx0XHRcdFx0XHRcdGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBXZSBjYW4gdXNlIDpzY29wZSBpbnN0ZWFkIG9mIHRoZSBJRCBoYWNrIGlmIHRoZSBicm93c2VyXG5cdFx0XHRcdFx0Ly8gc3VwcG9ydHMgaXQgJiBpZiB3ZSdyZSBub3QgY2hhbmdpbmcgdGhlIGNvbnRleHQuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlblxuXHRcdFx0XHRcdC8vIHN0cmljdC1jb21wYXJpbmcgdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgIT0gY29udGV4dCB8fCAhc3VwcG9ydC5zY29wZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2FwdHVyZSB0aGUgY29udGV4dCBJRCwgc2V0dGluZyBpdCBmaXJzdCBpZiBuZWNlc3Nhcnlcblx0XHRcdFx0XHRcdGlmICggKCBuaWQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSggXCJpZFwiICkgKSApIHtcblx0XHRcdFx0XHRcdFx0bmlkID0galF1ZXJ5LmVzY2FwZVNlbGVjdG9yKCBuaWQgKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHQuc2V0QXR0cmlidXRlKCBcImlkXCIsICggbmlkID0gZXhwYW5kbyApICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJlZml4IGV2ZXJ5IHNlbGVjdG9yIGluIHRoZSBsaXN0XG5cdFx0XHRcdFx0Z3JvdXBzID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0XHRcdFx0aSA9IGdyb3Vwcy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRncm91cHNbIGkgXSA9ICggbmlkID8gXCIjXCIgKyBuaWQgOiBcIjpzY29wZVwiICkgKyBcIiBcIiArXG5cdFx0XHRcdFx0XHRcdHRvU2VsZWN0b3IoIGdyb3Vwc1sgaSBdICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5ld1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oIFwiLFwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsXG5cdFx0XHRcdFx0XHRuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yIClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9IGNhdGNoICggcXNhRXJyb3IgKSB7XG5cdFx0XHRcdFx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSggc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRpZiAoIG5pZCA9PT0gZXhwYW5kbyApIHtcblx0XHRcdFx0XHRcdGNvbnRleHQucmVtb3ZlQXR0cmlidXRlKCBcImlkXCIgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBbGwgb3RoZXJzXG5cdHJldHVybiBzZWxlY3QoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltQ1NTLCBcIiQxXCIgKSwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApO1xufVxuXG4vKipcbiAqIENyZWF0ZSBrZXktdmFsdWUgY2FjaGVzIG9mIGxpbWl0ZWQgc2l6ZVxuICogQHJldHVybnMge2Z1bmN0aW9uKHN0cmluZywgb2JqZWN0KX0gUmV0dXJucyB0aGUgT2JqZWN0IGRhdGEgYWZ0ZXIgc3RvcmluZyBpdCBvbiBpdHNlbGYgd2l0aFxuICpcdHByb3BlcnR5IG5hbWUgdGhlIChzcGFjZS1zdWZmaXhlZCkgc3RyaW5nIGFuZCAoaWYgdGhlIGNhY2hlIGlzIGxhcmdlciB0aGFuIEV4cHIuY2FjaGVMZW5ndGgpXG4gKlx0ZGVsZXRpbmcgdGhlIG9sZGVzdCBlbnRyeVxuICovXG5mdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHtcblx0dmFyIGtleXMgPSBbXTtcblxuXHRmdW5jdGlvbiBjYWNoZSgga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIFVzZSAoa2V5ICsgXCIgXCIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllc1xuXHRcdC8vIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvaXNzdWVzLzE1Nylcblx0XHRpZiAoIGtleXMucHVzaCgga2V5ICsgXCIgXCIgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7XG5cblx0XHRcdC8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllc1xuXHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlzLnNoaWZ0KCkgXTtcblx0XHR9XG5cdFx0cmV0dXJuICggY2FjaGVbIGtleSArIFwiIFwiIF0gPSB2YWx1ZSApO1xuXHR9XG5cdHJldHVybiBjYWNoZTtcbn1cblxuLyoqXG4gKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IGpRdWVyeSBzZWxlY3RvciBtb2R1bGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBtYXJrXG4gKi9cbmZ1bmN0aW9uIG1hcmtGdW5jdGlvbiggZm4gKSB7XG5cdGZuWyBleHBhbmRvIF0gPSB0cnVlO1xuXHRyZXR1cm4gZm47XG59XG5cbi8qKlxuICogU3VwcG9ydCB0ZXN0aW5nIHVzaW5nIGFuIGVsZW1lbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFBhc3NlZCB0aGUgY3JlYXRlZCBlbGVtZW50IGFuZCByZXR1cm5zIGEgYm9vbGVhbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0KCBmbiApIHtcblx0dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJmaWVsZHNldFwiICk7XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gISFmbiggZWwgKTtcblx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGZpbmFsbHkge1xuXG5cdFx0Ly8gUmVtb3ZlIGZyb20gaXRzIHBhcmVudCBieSBkZWZhdWx0XG5cdFx0aWYgKCBlbC5wYXJlbnROb2RlICkge1xuXHRcdFx0ZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWwgKTtcblx0XHR9XG5cblx0XHQvLyByZWxlYXNlIG1lbW9yeSBpbiBJRVxuXHRcdGVsID0gbnVsbDtcblx0fVxufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgaW5wdXQgdHlwZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0UHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBidXR0b25zXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gKCBub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgfHwgbm9kZU5hbWUoIGVsZW0sIFwiYnV0dG9uXCIgKSApICYmXG5cdFx0XHRlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciA6ZW5hYmxlZC86ZGlzYWJsZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZGlzYWJsZWQgdHJ1ZSBmb3IgOmRpc2FibGVkOyBmYWxzZSBmb3IgOmVuYWJsZWRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGRpc2FibGVkICkge1xuXG5cdC8vIEtub3duIDpkaXNhYmxlZCBmYWxzZSBwb3NpdGl2ZXM6IGZpZWxkc2V0W2Rpc2FibGVkXSA+IGxlZ2VuZDpudGgtb2YtdHlwZShuKzIpIDpjYW4tZGlzYWJsZVxuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBPbmx5IGNlcnRhaW4gZWxlbWVudHMgY2FuIG1hdGNoIDplbmFibGVkIG9yIDpkaXNhYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWVuYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1kaXNhYmxlZFxuXHRcdGlmICggXCJmb3JtXCIgaW4gZWxlbSApIHtcblxuXHRcdFx0Ly8gQ2hlY2sgZm9yIGluaGVyaXRlZCBkaXNhYmxlZG5lc3Mgb24gcmVsZXZhbnQgbm9uLWRpc2FibGVkIGVsZW1lbnRzOlxuXHRcdFx0Ly8gKiBsaXN0ZWQgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgZmllbGRzZXRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjYXRlZ29yeS1saXN0ZWRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LWZlLWRpc2FibGVkXG5cdFx0XHQvLyAqIG9wdGlvbiBlbGVtZW50cyBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1vcHRpb24tZGlzYWJsZWRcblx0XHRcdC8vIEFsbCBzdWNoIGVsZW1lbnRzIGhhdmUgYSBcImZvcm1cIiBwcm9wZXJ0eS5cblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICYmIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdC8vIE9wdGlvbiBlbGVtZW50cyBkZWZlciB0byBhIHBhcmVudCBvcHRncm91cCBpZiBwcmVzZW50XG5cdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0ucGFyZW50Tm9kZS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gMTErXG5cdFx0XHRcdC8vIFVzZSB0aGUgaXNEaXNhYmxlZCBzaG9ydGN1dCBwcm9wZXJ0eSB0byBjaGVjayBmb3IgZGlzYWJsZWQgZmllbGRzZXQgYW5jZXN0b3JzXG5cdFx0XHRcdHJldHVybiBlbGVtLmlzRGlzYWJsZWQgPT09IGRpc2FibGVkIHx8XG5cblx0XHRcdFx0XHQvLyBXaGVyZSB0aGVyZSBpcyBubyBpc0Rpc2FibGVkLCBjaGVjayBtYW51YWxseVxuXHRcdFx0XHRcdGVsZW0uaXNEaXNhYmxlZCAhPT0gIWRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRpbkRpc2FibGVkRmllbGRzZXQoIGVsZW0gKSA9PT0gZGlzYWJsZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblxuXHRcdC8vIFRyeSB0byB3aW5ub3cgb3V0IGVsZW1lbnRzIHRoYXQgY2FuJ3QgYmUgZGlzYWJsZWQgYmVmb3JlIHRydXN0aW5nIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eS5cblx0XHQvLyBTb21lIHZpY3RpbXMgZ2V0IGNhdWdodCBpbiBvdXIgbmV0IChsYWJlbCwgbGVnZW5kLCBtZW51LCB0cmFjayksIGJ1dCBpdCBzaG91bGRuJ3Rcblx0XHQvLyBldmVuIGV4aXN0IG9uIHRoZW0sIGxldCBhbG9uZSBoYXZlIGEgYm9vbGVhbiB2YWx1ZS5cblx0XHR9IGVsc2UgaWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHR9XG5cblx0XHQvLyBSZW1haW5pbmcgZWxlbWVudHMgYXJlIG5laXRoZXIgOmVuYWJsZWQgbm9yIDpkaXNhYmxlZFxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICovXG5mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmbiApIHtcblx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGFyZ3VtZW50ICkge1xuXHRcdGFyZ3VtZW50ID0gK2FyZ3VtZW50O1xuXHRcdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0dmFyIGosXG5cdFx0XHRcdG1hdGNoSW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksXG5cdFx0XHRcdGkgPSBtYXRjaEluZGV4ZXMubGVuZ3RoO1xuXG5cdFx0XHQvLyBNYXRjaCBlbGVtZW50cyBmb3VuZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4ZXNcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoIHNlZWRbICggaiA9IG1hdGNoSW5kZXhlc1sgaSBdICkgXSApIHtcblx0XHRcdFx0XHRzZWVkWyBqIF0gPSAhKCBtYXRjaGVzWyBqIF0gPSBzZWVkWyBqIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSApO1xufVxuXG4vKipcbiAqIENoZWNrcyBhIG5vZGUgZm9yIHZhbGlkaXR5IGFzIGEgalF1ZXJ5IHNlbGVjdG9yIGNvbnRleHRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3Q9fSBjb250ZXh0XG4gKiBAcmV0dXJucyB7RWxlbWVudHxPYmplY3R8Qm9vbGVhbn0gVGhlIGlucHV0IG5vZGUgaWYgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIGEgZmFsc3kgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdGVzdENvbnRleHQoIGNvbnRleHQgKSB7XG5cdHJldHVybiBjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnRleHQ7XG59XG5cbi8qKlxuICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbbm9kZV0gQW4gZWxlbWVudCBvciBkb2N1bWVudCBvYmplY3QgdG8gdXNlIHRvIHNldCB0aGUgZG9jdW1lbnRcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqL1xuZnVuY3Rpb24gc2V0RG9jdW1lbnQoIG5vZGUgKSB7XG5cdHZhciBzdWJXaW5kb3csXG5cdFx0ZG9jID0gbm9kZSA/IG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlIDogcHJlZmVycmVkRG9jO1xuXG5cdC8vIFJldHVybiBlYXJseSBpZiBkb2MgaXMgaW52YWxpZCBvciBhbHJlYWR5IHNlbGVjdGVkXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggZG9jID09IGRvY3VtZW50IHx8IGRvYy5ub2RlVHlwZSAhPT0gOSB8fCAhZG9jLmRvY3VtZW50RWxlbWVudCApIHtcblx0XHRyZXR1cm4gZG9jdW1lbnQ7XG5cdH1cblxuXHQvLyBVcGRhdGUgZ2xvYmFsIHZhcmlhYmxlc1xuXHRkb2N1bWVudCA9IGRvYztcblx0ZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXHRkb2N1bWVudElzSFRNTCA9ICFqUXVlcnkuaXNYTUxEb2MoIGRvY3VtZW50ICk7XG5cblx0Ly8gU3VwcG9ydDogaU9TIDcgb25seSwgSUUgOSAtIDExK1xuXHQvLyBPbGRlciBicm93c2VycyBkaWRuJ3Qgc3VwcG9ydCB1bnByZWZpeGVkIGBtYXRjaGVzYC5cblx0bWF0Y2hlcyA9IGRvY3VtZW50RWxlbWVudC5tYXRjaGVzIHx8XG5cdFx0ZG9jdW1lbnRFbGVtZW50LndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY3VtZW50RWxlbWVudC5tc01hdGNoZXNTZWxlY3RvcjtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrXG5cdC8vIEFjY2Vzc2luZyBpZnJhbWUgZG9jdW1lbnRzIGFmdGVyIHVubG9hZCB0aHJvd3MgXCJwZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yc1xuXHQvLyAoc2VlIHRyYWMtMTM5MzYpLlxuXHQvLyBMaW1pdCB0aGUgZml4IHRvIElFICYgRWRnZSBMZWdhY3k7IGRlc3BpdGUgRWRnZSAxNSsgaW1wbGVtZW50aW5nIGBtYXRjaGVzYCxcblx0Ly8gYWxsIElFIDkrIGFuZCBFZGdlIExlZ2FjeSB2ZXJzaW9ucyBpbXBsZW1lbnQgYG1zTWF0Y2hlc1NlbGVjdG9yYCBhcyB3ZWxsLlxuXHRpZiAoIGRvY3VtZW50RWxlbWVudC5tc01hdGNoZXNTZWxlY3RvciAmJlxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRwcmVmZXJyZWREb2MgIT0gZG9jdW1lbnQgJiZcblx0XHQoIHN1YldpbmRvdyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3ICkgJiYgc3ViV2luZG93LnRvcCAhPT0gc3ViV2luZG93ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4K1xuXHRcdHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcInVubG9hZFwiLCB1bmxvYWRIYW5kbGVyICk7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA8MTBcblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudEJ5SWQgcmV0dXJucyBlbGVtZW50cyBieSBuYW1lXG5cdC8vIFRoZSBicm9rZW4gZ2V0RWxlbWVudEJ5SWQgbWV0aG9kcyBkb24ndCBwaWNrIHVwIHByb2dyYW1tYXRpY2FsbHktc2V0IG5hbWVzLFxuXHQvLyBzbyB1c2UgYSByb3VuZGFib3V0IGdldEVsZW1lbnRzQnlOYW1lIHRlc3Rcblx0c3VwcG9ydC5nZXRCeUlkID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBlbCApLmlkID0galF1ZXJ5LmV4cGFuZG87XG5cdFx0cmV0dXJuICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSB8fFxuXHRcdFx0IWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBqUXVlcnkuZXhwYW5kbyApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHQvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3Jcblx0Ly8gb24gYSBkaXNjb25uZWN0ZWQgbm9kZS5cblx0c3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdHJldHVybiBtYXRjaGVzLmNhbGwoIGVsLCBcIipcIiApO1xuXHR9ICk7XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4K1xuXHQvLyBJRS9FZGdlIGRvbid0IHN1cHBvcnQgdGhlIDpzY29wZSBwc2V1ZG8tY2xhc3MuXG5cdHN1cHBvcnQuc2NvcGUgPSBhc3NlcnQoIGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpzY29wZVwiICk7XG5cdH0gKTtcblxuXHQvLyBTdXBwb3J0OiBDaHJvbWUgMTA1IC0gMTExIG9ubHksIFNhZmFyaSAxNS40IC0gMTYuMyBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB0aGUgYDpoYXMoKWAgYXJndW1lbnQgaXMgcGFyc2VkIHVuZm9yZ2l2aW5nbHkuXG5cdC8vIFdlIGluY2x1ZGUgYCpgIGluIHRoZSB0ZXN0IHRvIGRldGVjdCBidWdneSBpbXBsZW1lbnRhdGlvbnMgdGhhdCBhcmVcblx0Ly8gX3NlbGVjdGl2ZWx5XyBmb3JnaXZpbmcgKHNwZWNpZmljYWxseSB3aGVuIHRoZSBsaXN0IGluY2x1ZGVzIGF0IGxlYXN0XG5cdC8vIG9uZSB2YWxpZCBzZWxlY3RvcikuXG5cdC8vIE5vdGUgdGhhdCB3ZSB0cmVhdCBjb21wbGV0ZSBsYWNrIG9mIHN1cHBvcnQgZm9yIGA6aGFzKClgIGFzIGlmIGl0IHdlcmVcblx0Ly8gc3BlYy1jb21wbGlhbnQgc3VwcG9ydCwgd2hpY2ggaXMgZmluZSBiZWNhdXNlIHVzZSBvZiBgOmhhcygpYCBpbiBzdWNoXG5cdC8vIGVudmlyb25tZW50cyB3aWxsIGZhaWwgaW4gdGhlIHFTQSBwYXRoIGFuZCBmYWxsIGJhY2sgdG8galF1ZXJ5IHRyYXZlcnNhbFxuXHQvLyBhbnl3YXkuXG5cdHN1cHBvcnQuY3NzSGFzID0gYXNzZXJ0KCBmdW5jdGlvbigpIHtcblx0XHR0cnkge1xuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3RvciggXCI6aGFzKCosOmpxZmFrZSlcIiApO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9ICk7XG5cblx0Ly8gSUQgZmlsdGVyIGFuZCBmaW5kXG5cdGlmICggc3VwcG9ydC5nZXRCeUlkICkge1xuXHRcdEV4cHIuZmlsdGVyLklEID0gZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJpZFwiICkgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblx0XHRFeHByLmZpbmQuSUQgPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cdFx0XHRcdHJldHVybiBlbGVtID8gWyBlbGVtIF0gOiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdEV4cHIuZmlsdGVyLklEID0gIGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gNyBvbmx5XG5cdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgaXMgbm90IHJlbGlhYmxlIGFzIGEgZmluZCBzaG9ydGN1dFxuXHRcdEV4cHIuZmluZC5JRCA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBub2RlLCBpLCBlbGVtcyxcblx0XHRcdFx0XHRlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHQvLyBWZXJpZnkgdGhlIGlkIGF0dHJpYnV0ZVxuXHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBGYWxsIGJhY2sgb24gZ2V0RWxlbWVudHNCeU5hbWVcblx0XHRcdFx0XHRlbGVtcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUoIGlkICk7XG5cdFx0XHRcdFx0aSA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvLyBUYWdcblx0RXhwci5maW5kLlRBRyA9IGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdC8vIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgZG9uJ3QgaGF2ZSBnRUJUTlxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgKTtcblx0XHR9XG5cdH07XG5cblx0Ly8gQ2xhc3Ncblx0RXhwci5maW5kLkNMQVNTID0gZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCApIHtcblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05hbWUgKTtcblx0XHR9XG5cdH07XG5cblx0LyogUVNBL21hdGNoZXNTZWxlY3RvclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gUVNBIGFuZCBtYXRjaGVzU2VsZWN0b3Igc3VwcG9ydFxuXG5cdHJidWdneVFTQSA9IFtdO1xuXG5cdC8vIEJ1aWxkIFFTQSByZWdleFxuXHQvLyBSZWdleCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGllZ28gUGVyaW5pXG5cdGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdFx0dmFyIGlucHV0O1xuXG5cdFx0ZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBlbCApLmlubmVySFRNTCA9XG5cdFx0XHRcIjxhIGlkPSdcIiArIGV4cGFuZG8gKyBcIicgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT5cIiArXG5cdFx0XHRcIjxzZWxlY3QgaWQ9J1wiICsgZXhwYW5kbyArIFwiLVxcclxcXFwnIGRpc2FibGVkPSdkaXNhYmxlZCc+XCIgK1xuXHRcdFx0XCI8b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PlwiO1xuXG5cdFx0Ly8gU3VwcG9ydDogaU9TIDw9NyAtIDggb25seVxuXHRcdC8vIEJvb2xlYW4gYXR0cmlidXRlcyBhbmQgXCJ2YWx1ZVwiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHkgaW4gc29tZSBYTUwgZG9jdW1lbnRzXG5cdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbc2VsZWN0ZWRdXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKig/OnZhbHVlfFwiICsgYm9vbGVhbnMgKyBcIilcIiApO1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IGlPUyA8PTcgLSA4IG9ubHlcblx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltpZH49XCIgKyBleHBhbmRvICsgXCItXVwiICkubGVuZ3RoICkge1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwifj1cIiApO1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IGlPUyA4IG9ubHlcblx0XHQvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2ODUxXG5cdFx0Ly8gSW4tcGFnZSBgc2VsZWN0b3IjaWQgc2libGluZy1jb21iaW5hdG9yIHNlbGVjdG9yYCBmYWlsc1xuXHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiYSNcIiArIGV4cGFuZG8gKyBcIisqXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCIuIy4rWyt+XVwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MTA1KywgRmlyZWZveCA8PTEwNCssIFNhZmFyaSA8PTE1LjQrXG5cdFx0Ly8gSW4gc29tZSBvZiB0aGUgZG9jdW1lbnQga2luZHMsIHRoZXNlIHNlbGVjdG9ycyB3b3VsZG4ndCB3b3JrIG5hdGl2ZWx5LlxuXHRcdC8vIFRoaXMgaXMgcHJvYmFibHkgT0sgYnV0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3ZSB3YW50IHRvIG1haW50YWluXG5cdFx0Ly8gaGFuZGxpbmcgdGhlbSB0aHJvdWdoIGpRdWVyeSB0cmF2ZXJzYWwgaW4galF1ZXJ5IDMueC5cblx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpjaGVja2VkXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6Y2hlY2tlZFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogV2luZG93cyA4IE5hdGl2ZSBBcHBzXG5cdFx0Ly8gVGhlIHR5cGUgYW5kIG5hbWUgYXR0cmlidXRlcyBhcmUgcmVzdHJpY3RlZCBkdXJpbmcgLmlubmVySFRNTCBhc3NpZ25tZW50XG5cdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcImhpZGRlblwiICk7XG5cdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICkuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJEXCIgKTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMStcblx0XHQvLyBJRSdzIDpkaXNhYmxlZCBzZWxlY3RvciBkb2VzIG5vdCBwaWNrIHVwIHRoZSBjaGlsZHJlbiBvZiBkaXNhYmxlZCBmaWVsZHNldHNcblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0xMDUrLCBGaXJlZm94IDw9MTA0KywgU2FmYXJpIDw9MTUuNCtcblx0XHQvLyBJbiBzb21lIG9mIHRoZSBkb2N1bWVudCBraW5kcywgdGhlc2Ugc2VsZWN0b3JzIHdvdWxkbid0IHdvcmsgbmF0aXZlbHkuXG5cdFx0Ly8gVGhpcyBpcyBwcm9iYWJseSBPSyBidXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdlIHdhbnQgdG8gbWFpbnRhaW5cblx0XHQvLyBoYW5kbGluZyB0aGVtIHRocm91Z2ggalF1ZXJ5IHRyYXZlcnNhbCBpbiBqUXVlcnkgMy54LlxuXHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggZWwgKS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpkaXNhYmxlZFwiICkubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFIDExL0VkZ2UgZG9uJ3QgZmluZCBlbGVtZW50cyBvbiBhIGBbbmFtZT0nJ11gIHF1ZXJ5IGluIHNvbWUgY2FzZXMuXG5cdFx0Ly8gQWRkaW5nIGEgdGVtcG9yYXJ5IGF0dHJpYnV0ZSB0byB0aGUgZG9jdW1lbnQgYmVmb3JlIHRoZSBzZWxlY3Rpb24gd29ya3Ncblx0XHQvLyBhcm91bmQgdGhlIGlzc3VlLlxuXHRcdC8vIEludGVyZXN0aW5nbHksIElFIDEwICYgb2xkZXIgZG9uJ3Qgc2VlbSB0byBoYXZlIHRoZSBpc3N1ZS5cblx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwiXCIgKTtcblx0XHRlbC5hcHBlbmRDaGlsZCggaW5wdXQgKTtcblx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltuYW1lPScnXVwiICkubGVuZ3RoICkge1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIipuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqPVwiICtcblx0XHRcdFx0d2hpdGVzcGFjZSArIFwiKig/OicnfFxcXCJcXFwiKVwiICk7XG5cdFx0fVxuXHR9ICk7XG5cblx0aWYgKCAhc3VwcG9ydC5jc3NIYXMgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgMTA1IC0gMTEwKywgU2FmYXJpIDE1LjQgLSAxNi4zK1xuXHRcdC8vIE91ciByZWd1bGFyIGB0cnktY2F0Y2hgIG1lY2hhbmlzbSBmYWlscyB0byBkZXRlY3QgbmF0aXZlbHktdW5zdXBwb3J0ZWRcblx0XHQvLyBwc2V1ZG8tY2xhc3NlcyBpbnNpZGUgYDpoYXMoKWAgKHN1Y2ggYXMgYDpoYXMoOmNvbnRhaW5zKFwiRm9vXCIpKWApXG5cdFx0Ly8gaW4gYnJvd3NlcnMgdGhhdCBwYXJzZSB0aGUgYDpoYXMoKWAgYXJndW1lbnQgYXMgYSBmb3JnaXZpbmcgc2VsZWN0b3IgbGlzdC5cblx0XHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvc2VsZWN0b3JzLyNyZWxhdGlvbmFsIG5vdyByZXF1aXJlcyB0aGUgYXJndW1lbnRcblx0XHQvLyB0byBiZSBwYXJzZWQgdW5mb3JnaXZpbmdseSwgYnV0IGJyb3dzZXJzIGhhdmUgbm90IHlldCBmdWxseSBhZGp1c3RlZC5cblx0XHRyYnVnZ3lRU0EucHVzaCggXCI6aGFzXCIgKTtcblx0fVxuXG5cdHJidWdneVFTQSA9IHJidWdneVFTQS5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oIFwifFwiICkgKTtcblxuXHQvKiBTb3J0aW5nXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBEb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdHNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXG5cdFx0Ly8gRmxhZyBmb3IgZHVwbGljYXRlIHJlbW92YWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Ly8gU29ydCBvbiBtZXRob2QgZXhpc3RlbmNlIGlmIG9ubHkgb25lIGlucHV0IGhhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvblxuXHRcdHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtcblx0XHRpZiAoIGNvbXBhcmUgKSB7XG5cdFx0XHRyZXR1cm4gY29tcGFyZTtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50XG5cdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRjb21wYXJlID0gKCBhLm93bmVyRG9jdW1lbnQgfHwgYSApID09ICggYi5vd25lckRvY3VtZW50IHx8IGIgKSA/XG5cdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0ZWRcblx0XHRcdDE7XG5cblx0XHQvLyBEaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRpZiAoIGNvbXBhcmUgJiAxIHx8XG5cdFx0XHQoICFzdXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUgKSApIHtcblxuXHRcdFx0Ly8gQ2hvb3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0byBvdXIgcHJlZmVycmVkIGRvY3VtZW50XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0aWYgKCBhID09PSBkb2N1bWVudCB8fCBhLm93bmVyRG9jdW1lbnQgPT0gcHJlZmVycmVkRG9jICYmXG5cdFx0XHRcdGZpbmQuY29udGFpbnMoIHByZWZlcnJlZERvYywgYSApICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRpZiAoIGIgPT09IGRvY3VtZW50IHx8IGIub3duZXJEb2N1bWVudCA9PSBwcmVmZXJyZWREb2MgJiZcblx0XHRcdFx0ZmluZC5jb250YWlucyggcHJlZmVycmVkRG9jLCBiICkgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlclxuXHRcdFx0cmV0dXJuIHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZi5jYWxsKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YuY2FsbCggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBhcmUgJiA0ID8gLTEgOiAxO1xuXHR9O1xuXG5cdHJldHVybiBkb2N1bWVudDtcbn1cblxuZmluZC5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1lbnRzICkge1xuXHRyZXR1cm4gZmluZCggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTtcbn07XG5cbmZpbmQubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7XG5cdHNldERvY3VtZW50KCBlbGVtICk7XG5cblx0aWYgKCBkb2N1bWVudElzSFRNTCAmJlxuXHRcdCFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBleHByICsgXCIgXCIgXSAmJlxuXHRcdCggIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSApICkge1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhciByZXQgPSBtYXRjaGVzLmNhbGwoIGVsZW0sIGV4cHIgKTtcblxuXHRcdFx0Ly8gSUUgOSdzIG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNlIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdFx0aWYgKCByZXQgfHwgc3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCB8fFxuXG5cdFx0XHRcdFx0Ly8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnRcblx0XHRcdFx0XHQvLyBmcmFnbWVudCBpbiBJRSA5XG5cdFx0XHRcdFx0ZWxlbS5kb2N1bWVudCAmJiBlbGVtLmRvY3VtZW50Lm5vZGVUeXBlICE9PSAxMSApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUoIGV4cHIsIHRydWUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZmluZCggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDtcbn07XG5cbmZpbmQuY29udGFpbnMgPSBmdW5jdGlvbiggY29udGV4dCwgZWxlbSApIHtcblxuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0ICkgIT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0fVxuXHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICk7XG59O1xuXG5cbmZpbmQuYXR0ciA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHR9XG5cblx0dmFyIGZuID0gRXhwci5hdHRySGFuZGxlWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSxcblxuXHRcdC8vIERvbid0IGdldCBmb29sZWQgYnkgT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgdHJhYy0xMzgwNylcblx0XHR2YWwgPSBmbiAmJiBoYXNPd24uY2FsbCggRXhwci5hdHRySGFuZGxlLCBuYW1lLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRmbiggZWxlbSwgbmFtZSwgIWRvY3VtZW50SXNIVE1MICkgOlxuXHRcdFx0dW5kZWZpbmVkO1xuXG5cdGlmICggdmFsICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxuXG5cdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApO1xufTtcblxuZmluZC5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdHRocm93IG5ldyBFcnJvciggXCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiBcIiArIG1zZyApO1xufTtcblxuLyoqXG4gKiBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBkdXBsaWNhdGVzXG4gKiBAcGFyYW0ge0FycmF5TGlrZX0gcmVzdWx0c1xuICovXG5qUXVlcnkudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkge1xuXHR2YXIgZWxlbSxcblx0XHRkdXBsaWNhdGVzID0gW10sXG5cdFx0aiA9IDAsXG5cdFx0aSA9IDA7XG5cblx0Ly8gVW5sZXNzIHdlICprbm93KiB3ZSBjYW4gZGV0ZWN0IGR1cGxpY2F0ZXMsIGFzc3VtZSB0aGVpciBwcmVzZW5jZVxuXHQvL1xuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wK1xuXHQvLyBUZXN0aW5nIGZvciBkZXRlY3RpbmcgZHVwbGljYXRlcyBpcyB1bnByZWRpY3RhYmxlIHNvIGluc3RlYWQgYXNzdW1lIHdlIGNhbid0XG5cdC8vIGRlcGVuZCBvbiBkdXBsaWNhdGUgZGV0ZWN0aW9uIGluIGFsbCBicm93c2VycyB3aXRob3V0IGEgc3RhYmxlIHNvcnQuXG5cdGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LnNvcnRTdGFibGU7XG5cdHNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgc2xpY2UuY2FsbCggcmVzdWx0cywgMCApO1xuXHRzb3J0LmNhbGwoIHJlc3VsdHMsIHNvcnRPcmRlciApO1xuXG5cdGlmICggaGFzRHVwbGljYXRlICkge1xuXHRcdHdoaWxlICggKCBlbGVtID0gcmVzdWx0c1sgaSsrIF0gKSApIHtcblx0XHRcdGlmICggZWxlbSA9PT0gcmVzdWx0c1sgaSBdICkge1xuXHRcdFx0XHRqID0gZHVwbGljYXRlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0c3BsaWNlLmNhbGwoIHJlc3VsdHMsIGR1cGxpY2F0ZXNbIGogXSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENsZWFyIGlucHV0IGFmdGVyIHNvcnRpbmcgdG8gcmVsZWFzZSBvYmplY3RzXG5cdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9wdWxsLzIyNVxuXHRzb3J0SW5wdXQgPSBudWxsO1xuXG5cdHJldHVybiByZXN1bHRzO1xufTtcblxualF1ZXJ5LmZuLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkudW5pcXVlU29ydCggc2xpY2UuYXBwbHkoIHRoaXMgKSApICk7XG59O1xuXG5FeHByID0galF1ZXJ5LmV4cHIgPSB7XG5cblx0Ly8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1c2VyXG5cdGNhY2hlTGVuZ3RoOiA1MCxcblxuXHRjcmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbixcblxuXHRtYXRjaDogbWF0Y2hFeHByLFxuXG5cdGF0dHJIYW5kbGU6IHt9LFxuXG5cdGZpbmQ6IHt9LFxuXG5cdHJlbGF0aXZlOiB7XG5cdFx0XCI+XCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIiBcIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiIH0sXG5cdFx0XCIrXCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiflwiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiB9XG5cdH0sXG5cblx0cHJlRmlsdGVyOiB7XG5cdFx0QVRUUjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0bWF0Y2hbIDEgXSA9IG1hdGNoWyAxIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0Ly8gTW92ZSB0aGUgZ2l2ZW4gdmFsdWUgdG8gbWF0Y2hbM10gd2hldGhlciBxdW90ZWQgb3IgdW5xdW90ZWRcblx0XHRcdG1hdGNoWyAzIF0gPSAoIG1hdGNoWyAzIF0gfHwgbWF0Y2hbIDQgXSB8fCBtYXRjaFsgNSBdIHx8IFwiXCIgKVxuXHRcdFx0XHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsgMiBdID09PSBcIn49XCIgKSB7XG5cdFx0XHRcdG1hdGNoWyAzIF0gPSBcIiBcIiArIG1hdGNoWyAzIF0gKyBcIiBcIjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7XG5cdFx0fSxcblxuXHRcdENISUxEOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cblx0XHRcdC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbXCJDSElMRFwiXVxuXHRcdFx0XHQxIHR5cGUgKG9ubHl8bnRofC4uLilcblx0XHRcdFx0MiB3aGF0IChjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHQzIGFyZ3VtZW50IChldmVufG9kZHxcXGQqfFxcZCpuKFsrLV1cXGQrKT98Li4uKVxuXHRcdFx0XHQ0IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xcZCpufClcblx0XHRcdFx0NSBzaWduIG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ2IHggb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDcgc2lnbiBvZiB5LWNvbXBvbmVudFxuXHRcdFx0XHQ4IHkgb2YgeS1jb21wb25lbnRcblx0XHRcdCovXG5cdFx0XHRtYXRjaFsgMSBdID0gbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRpZiAoIG1hdGNoWyAxIF0uc2xpY2UoIDAsIDMgKSA9PT0gXCJudGhcIiApIHtcblxuXHRcdFx0XHQvLyBudGgtKiByZXF1aXJlcyBhcmd1bWVudFxuXHRcdFx0XHRpZiAoICFtYXRjaFsgMyBdICkge1xuXHRcdFx0XHRcdGZpbmQuZXJyb3IoIG1hdGNoWyAwIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRFxuXHRcdFx0XHQvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xXG5cdFx0XHRcdG1hdGNoWyA0IF0gPSArKCBtYXRjaFsgNCBdID9cblx0XHRcdFx0XHRtYXRjaFsgNSBdICsgKCBtYXRjaFsgNiBdIHx8IDEgKSA6XG5cdFx0XHRcdFx0MiAqICggbWF0Y2hbIDMgXSA9PT0gXCJldmVuXCIgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApXG5cdFx0XHRcdCk7XG5cdFx0XHRcdG1hdGNoWyA1IF0gPSArKCAoIG1hdGNoWyA3IF0gKyBtYXRjaFsgOCBdICkgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHQvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdGZpbmQuZXJyb3IoIG1hdGNoWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdH0sXG5cblx0XHRQU0VVRE86IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdHZhciBleGNlc3MsXG5cdFx0XHRcdHVucXVvdGVkID0gIW1hdGNoWyA2IF0gJiYgbWF0Y2hbIDIgXTtcblxuXHRcdFx0aWYgKCBtYXRjaEV4cHIuQ0hJTEQudGVzdCggbWF0Y2hbIDAgXSApICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWNjZXB0IHF1b3RlZCBhcmd1bWVudHMgYXMtaXNcblx0XHRcdGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0bWF0Y2hbIDIgXSA9IG1hdGNoWyA0IF0gfHwgbWF0Y2hbIDUgXSB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmXG5cblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KCBleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSApICYmXG5cblx0XHRcdFx0Ly8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzXG5cdFx0XHRcdCggZXhjZXNzID0gdW5xdW90ZWQuaW5kZXhPZiggXCIpXCIsIHVucXVvdGVkLmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoICkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbIDAgXSA9IG1hdGNoWyAwIF0uc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0XHRtYXRjaFsgMiBdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFRBRzogZnVuY3Rpb24oIG5vZGVOYW1lU2VsZWN0b3IgKSB7XG5cdFx0XHR2YXIgZXhwZWN0ZWROb2RlTmFtZSA9IG5vZGVOYW1lU2VsZWN0b3IucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5vZGVOYW1lU2VsZWN0b3IgPT09IFwiKlwiID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0gOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gbm9kZU5hbWUoIGVsZW0sIGV4cGVjdGVkTm9kZU5hbWUgKTtcblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0Q0xBU1M6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7XG5cdFx0XHR2YXIgcGF0dGVybiA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSArIFwiIFwiIF07XG5cblx0XHRcdHJldHVybiBwYXR0ZXJuIHx8XG5cdFx0XHRcdCggcGF0dGVybiA9IG5ldyBSZWdFeHAoIFwiKF58XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyBjbGFzc05hbWUgK1xuXHRcdFx0XHRcdFwiKFwiICsgd2hpdGVzcGFjZSArIFwifCQpXCIgKSApICYmXG5cdFx0XHRcdGNsYXNzQ2FjaGUoIGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhdHRlcm4udGVzdChcblx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtLmNsYXNzTmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBlbGVtLmNsYXNzTmFtZSB8fFxuXHRcdFx0XHRcdFx0XHR0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHxcblx0XHRcdFx0XHRcdFx0XCJcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gKTtcblx0XHR9LFxuXG5cdFx0QVRUUjogZnVuY3Rpb24oIG5hbWUsIG9wZXJhdG9yLCBjaGVjayApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHJlc3VsdCA9IGZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcblxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcIj1cIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0ID09PSBjaGVjaztcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcIiE9XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdCAhPT0gY2hlY2s7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBvcGVyYXRvciA9PT0gXCJePVwiICkge1xuXHRcdFx0XHRcdHJldHVybiBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcIio9XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBvcGVyYXRvciA9PT0gXCIkPVwiICkge1xuXHRcdFx0XHRcdHJldHVybiBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2s7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBvcGVyYXRvciA9PT0gXCJ+PVwiICkge1xuXHRcdFx0XHRcdHJldHVybiAoIFwiIFwiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCBcIiBcIiApICsgXCIgXCIgKVxuXHRcdFx0XHRcdFx0LmluZGV4T2YoIGNoZWNrICkgPiAtMTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIG9wZXJhdG9yID09PSBcInw9XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdCA9PT0gY2hlY2sgfHwgcmVzdWx0LnNsaWNlKCAwLCBjaGVjay5sZW5ndGggKyAxICkgPT09IGNoZWNrICsgXCItXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRDSElMRDogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIF9hcmd1bWVudCwgZmlyc3QsIGxhc3QgKSB7XG5cdFx0XHR2YXIgc2ltcGxlID0gdHlwZS5zbGljZSggMCwgMyApICE9PSBcIm50aFwiLFxuXHRcdFx0XHRmb3J3YXJkID0gdHlwZS5zbGljZSggLTQgKSAhPT0gXCJsYXN0XCIsXG5cdFx0XHRcdG9mVHlwZSA9IHdoYXQgPT09IFwib2YtdHlwZVwiO1xuXG5cdFx0XHRyZXR1cm4gZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMCA/XG5cblx0XHRcdFx0Ly8gU2hvcnRjdXQgZm9yIDpudGgtKihuKVxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gISFlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRcdH0gOlxuXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdHZhciBjYWNoZSwgb3V0ZXJDYWNoZSwgbm9kZSwgbm9kZUluZGV4LCBzdGFydCxcblx0XHRcdFx0XHRcdGRpciA9IHNpbXBsZSAhPT0gZm9yd2FyZCA/IFwibmV4dFNpYmxpbmdcIiA6IFwicHJldmlvdXNTaWJsaW5nXCIsXG5cdFx0XHRcdFx0XHRwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsXG5cdFx0XHRcdFx0XHRuYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcblx0XHRcdFx0XHRcdHVzZUNhY2hlID0gIXhtbCAmJiAhb2ZUeXBlLFxuXHRcdFx0XHRcdFx0ZGlmZiA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIDooZmlyc3R8bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0XHRcdGlmICggc2ltcGxlICkge1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIGRpciApIHtcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9IG5vZGVbIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGVOYW1lKCBub2RlLCBuYW1lICkgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBSZXZlcnNlIGRpcmVjdGlvbiBmb3IgOm9ubHktKiAoaWYgd2UgaGF2ZW4ndCB5ZXQgZG9uZSBzbylcblx0XHRcdFx0XHRcdFx0XHRzdGFydCA9IGRpciA9IHR5cGUgPT09IFwib25seVwiICYmICFzdGFydCAmJiBcIm5leHRTaWJsaW5nXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07XG5cblx0XHRcdFx0XHRcdC8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgXG5cdFx0XHRcdFx0XHRpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU2VlayBgZWxlbWAgZnJvbSBhIHByZXZpb3VzbHktY2FjaGVkIGluZGV4XG5cdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBwYXJlbnRbIGV4cGFuZG8gXSB8fCAoIHBhcmVudFsgZXhwYW5kbyBdID0ge30gKTtcblx0XHRcdFx0XHRcdFx0Y2FjaGUgPSBvdXRlckNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleCAmJiBjYWNoZVsgMiBdO1xuXHRcdFx0XHRcdFx0XHRub2RlID0gbm9kZUluZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVzWyBub2RlSW5kZXggXTtcblxuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEZhbGxiYWNrIHRvIHNlZWtpbmcgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0KCBkaWZmID0gbm9kZUluZGV4ID0gMCApIHx8IHN0YXJ0LnBvcCgpICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBXaGVuIGZvdW5kLCBjYWNoZSBpbmRleGVzIG9uIGBwYXJlbnRgIGFuZCBicmVha1xuXHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSAmJiArK2RpZmYgJiYgbm9kZSA9PT0gZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgbm9kZUluZGV4LCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRleCBpZiBhdmFpbGFibGVcblx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8ICggZWxlbVsgZXhwYW5kbyBdID0ge30gKTtcblx0XHRcdFx0XHRcdFx0XHRjYWNoZSA9IG91dGVyQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIHhtbCA6bnRoLWNoaWxkKC4uLilcblx0XHRcdFx0XHRcdFx0Ly8gb3IgOm50aC1sYXN0LWNoaWxkKC4uLikgb3IgOm50aCgtbGFzdCk/LW9mLXR5cGUoLi4uKVxuXHRcdFx0XHRcdFx0XHRpZiAoIGRpZmYgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdCggZGlmZiA9IG5vZGVJbmRleCA9IDAgKSB8fCBzdGFydC5wb3AoKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZU5hbWUoIG5vZGUsIG5hbWUgKSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQrK2RpZmYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FjaGUgdGhlIGluZGV4IG9mIGVhY2ggZW5jb3VudGVyZWQgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCggbm9kZVsgZXhwYW5kbyBdID0ge30gKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZSA9PT0gZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBJbmNvcnBvcmF0ZSB0aGUgb2Zmc2V0LCB0aGVuIGNoZWNrIGFnYWluc3QgY3ljbGUgc2l6ZVxuXHRcdFx0XHRcdFx0ZGlmZiAtPSBsYXN0O1xuXHRcdFx0XHRcdFx0cmV0dXJuIGRpZmYgPT09IGZpcnN0IHx8ICggZGlmZiAlIGZpcnN0ID09PSAwICYmIGRpZmYgLyBmaXJzdCA+PSAwICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRQU0VVRE86IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkge1xuXG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzXG5cdFx0XHQvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVyc1xuXHRcdFx0Ly8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvc1xuXHRcdFx0dmFyIGFyZ3MsXG5cdFx0XHRcdGZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0XHRmaW5kLmVycm9yKCBcInVuc3VwcG9ydGVkIHBzZXVkbzogXCIgKyBwc2V1ZG8gKTtcblxuXHRcdFx0Ly8gVGhlIHVzZXIgbWF5IHVzZSBjcmVhdGVQc2V1ZG8gdG8gaW5kaWNhdGUgdGhhdFxuXHRcdFx0Ly8gYXJndW1lbnRzIGFyZSBuZWVkZWQgdG8gY3JlYXRlIHRoZSBmaWx0ZXIgZnVuY3Rpb25cblx0XHRcdC8vIGp1c3QgYXMgalF1ZXJ5IGRvZXNcblx0XHRcdGlmICggZm5bIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0cmV0dXJuIGZuKCBhcmd1bWVudCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBCdXQgbWFpbnRhaW4gc3VwcG9ydCBmb3Igb2xkIHNpZ25hdHVyZXNcblx0XHRcdGlmICggZm4ubGVuZ3RoID4gMSApIHtcblx0XHRcdFx0YXJncyA9IFsgcHNldWRvLCBwc2V1ZG8sIFwiXCIsIGFyZ3VtZW50IF07XG5cdFx0XHRcdHJldHVybiBFeHByLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoIHBzZXVkby50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0XHRcdG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHRcdFx0XHR2YXIgaWR4LFxuXHRcdFx0XHRcdFx0XHRtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksXG5cdFx0XHRcdFx0XHRcdGkgPSBtYXRjaGVkLmxlbmd0aDtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZHggPSBpbmRleE9mLmNhbGwoIHNlZWQsIG1hdGNoZWRbIGkgXSApO1xuXHRcdFx0XHRcdFx0XHRzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlkeCBdID0gbWF0Y2hlZFsgaSBdICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmbiggZWxlbSwgMCwgYXJncyApO1xuXHRcdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmbjtcblx0XHR9XG5cdH0sXG5cblx0cHNldWRvczoge1xuXG5cdFx0Ly8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zXG5cdFx0bm90OiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblxuXHRcdFx0Ly8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGVcblx0XHRcdC8vIHRvIGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG5cdFx0XHQvLyBzcGFjZXMgYXMgY29tYmluYXRvcnNcblx0XHRcdHZhciBpbnB1dCA9IFtdLFxuXHRcdFx0XHRyZXN1bHRzID0gW10sXG5cdFx0XHRcdG1hdGNoZXIgPSBjb21waWxlKCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbUNTUywgXCIkMVwiICkgKTtcblxuXHRcdFx0cmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/XG5cdFx0XHRcdG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksXG5cdFx0XHRcdFx0XHRpID0gc2VlZC5sZW5ndGg7XG5cblx0XHRcdFx0XHQvLyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IHVubWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGkgXSA9ICEoIG1hdGNoZXNbIGkgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdGlucHV0WyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTtcblxuXHRcdFx0XHRcdC8vIERvbid0IGtlZXAgdGhlIGVsZW1lbnRcblx0XHRcdFx0XHQvLyAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL2lzc3Vlcy8yOTkpXG5cdFx0XHRcdFx0aW5wdXRbIDAgXSA9IG51bGw7XG5cdFx0XHRcdFx0cmV0dXJuICFyZXN1bHRzLnBvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdGhhczogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBmaW5kKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdGNvbnRhaW5zOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0dGV4dCA9IHRleHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBqUXVlcnkudGV4dCggZWxlbSApICkuaW5kZXhPZiggdGV4dCApID4gLTE7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdC8vIFwiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvclxuXHRcdC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcblx0XHQvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwiLVwiLlxuXHRcdC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcblx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNsYW5nLXBzZXVkb1xuXHRcdGxhbmc6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7XG5cblx0XHRcdC8vIGxhbmcgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZXJcblx0XHRcdGlmICggIXJpZGVudGlmaWVyLnRlc3QoIGxhbmcgfHwgXCJcIiApICkge1xuXHRcdFx0XHRmaW5kLmVycm9yKCBcInVuc3VwcG9ydGVkIGxhbmc6IFwiICsgbGFuZyApO1xuXHRcdFx0fVxuXHRcdFx0bGFuZyA9IGxhbmcucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgZWxlbUxhbmc7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoICggZWxlbUxhbmcgPSBkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRcdFx0XHRlbGVtLmxhbmcgOlxuXHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIFwieG1sOmxhbmdcIiApIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCBcImxhbmdcIiApICkgKSB7XG5cblx0XHRcdFx0XHRcdGVsZW1MYW5nID0gZWxlbUxhbmcudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtTGFuZyA9PT0gbGFuZyB8fCBlbGVtTGFuZy5pbmRleE9mKCBsYW5nICsgXCItXCIgKSA9PT0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gd2hpbGUgKCAoIGVsZW0gPSBlbGVtLnBhcmVudE5vZGUgKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0Ly8gTWlzY2VsbGFuZW91c1xuXHRcdHRhcmdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0XHRcdHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDtcblx0XHR9LFxuXG5cdFx0cm9vdDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnRFbGVtZW50O1xuXHRcdH0sXG5cblx0XHRmb2N1czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSAmJlxuXHRcdFx0XHRkb2N1bWVudC5oYXNGb2N1cygpICYmXG5cdFx0XHRcdCEhKCBlbGVtLnR5cGUgfHwgZWxlbS5ocmVmIHx8IH5lbGVtLnRhYkluZGV4ICk7XG5cdFx0fSxcblxuXHRcdC8vIEJvb2xlYW4gcHJvcGVydGllc1xuXHRcdGVuYWJsZWQ6IGNyZWF0ZURpc2FibGVkUHNldWRvKCBmYWxzZSApLFxuXHRcdGRpc2FibGVkOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggdHJ1ZSApLFxuXG5cdFx0Y2hlY2tlZDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIEluIENTUzMsIDpjaGVja2VkIHNob3VsZCByZXR1cm4gYm90aCBjaGVja2VkIGFuZCBzZWxlY3RlZCBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHRyZXR1cm4gKCBub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgJiYgISFlbGVtLmNoZWNrZWQgKSB8fFxuXHRcdFx0XHQoIG5vZGVOYW1lKCBlbGVtLCBcIm9wdGlvblwiICkgJiYgISFlbGVtLnNlbGVjdGVkICk7XG5cdFx0fSxcblxuXHRcdHNlbGVjdGVkOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMStcblx0XHRcdC8vIEFjY2Vzc2luZyB0aGUgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eVxuXHRcdFx0Ly8gZm9yY2VzIHRoZSBicm93c2VyIHRvIHRyZWF0IHRoZSBkZWZhdWx0IG9wdGlvbiBhc1xuXHRcdFx0Ly8gc2VsZWN0ZWQgd2hlbiBpbiBhbiBvcHRncm91cC5cblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gQ29udGVudHNcblx0XHRlbXB0eTogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkb1xuXHRcdFx0Ly8gOmVtcHR5IGlzIG5lZ2F0ZWQgYnkgZWxlbWVudCAoMSkgb3IgY29udGVudCBub2RlcyAodGV4dDogMzsgY2RhdGE6IDQ7IGVudGl0eSByZWY6IDUpLFxuXHRcdFx0Ly8gICBidXQgbm90IGJ5IG90aGVycyAoY29tbWVudDogODsgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbjogNzsgZXRjLilcblx0XHRcdC8vIG5vZGVUeXBlIDwgNiB3b3JrcyBiZWNhdXNlIGF0dHJpYnV0ZXMgKDIpIGRvIG5vdCBhcHBlYXIgYXMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPCA2ICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gIUV4cHIucHNldWRvcy5lbXB0eSggZWxlbSApO1xuXHRcdH0sXG5cblx0XHQvLyBFbGVtZW50L2lucHV0IHR5cGVzXG5cdFx0aGVhZGVyOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0aW5wdXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRidXR0b246IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSAmJiBlbGVtLnR5cGUgPT09IFwiYnV0dG9uXCIgfHxcblx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiYnV0dG9uXCIgKTtcblx0XHR9LFxuXG5cdFx0dGV4dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgYXR0cjtcblx0XHRcdHJldHVybiBub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgJiYgZWxlbS50eXBlID09PSBcInRleHRcIiAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDwxMCBvbmx5XG5cdFx0XHRcdC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCBcInNlYXJjaFwiKSBhcHBlYXJcblx0XHRcdFx0Ly8gd2l0aCBlbGVtLnR5cGUgPT09IFwidGV4dFwiXG5cdFx0XHRcdCggKCBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgKSA9PSBudWxsIHx8XG5cdFx0XHRcdFx0YXR0ci50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIiApO1xuXHRcdH0sXG5cblx0XHQvLyBQb3NpdGlvbi1pbi1jb2xsZWN0aW9uXG5cdFx0Zmlyc3Q6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIFsgMCBdO1xuXHRcdH0gKSxcblxuXHRcdGxhc3Q6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBfbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gWyBsZW5ndGggLSAxIF07XG5cdFx0fSApLFxuXG5cdFx0ZXE6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBfbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0cmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdO1xuXHRcdH0gKSxcblxuXHRcdGV2ZW46IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRvZGQ6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMTtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRsdDogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpO1xuXG5cdFx0XHRpZiAoIGFyZ3VtZW50IDwgMCApIHtcblx0XHRcdFx0aSA9IGFyZ3VtZW50ICsgbGVuZ3RoO1xuXHRcdFx0fSBlbHNlIGlmICggYXJndW1lbnQgPiBsZW5ndGggKSB7XG5cdFx0XHRcdGkgPSBsZW5ndGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpID0gYXJndW1lbnQ7XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoIDsgLS1pID49IDA7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRndDogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgKytpIDwgbGVuZ3RoOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApXG5cdH1cbn07XG5cbkV4cHIucHNldWRvcy5udGggPSBFeHByLnBzZXVkb3MuZXE7XG5cbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXG5mb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApO1xufVxuZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTtcbn1cblxuLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cbnNldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zO1xuRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTtcblxuZnVuY3Rpb24gdG9rZW5pemUoIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7XG5cdHZhciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLFxuXHRcdHNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMsXG5cdFx0Y2FjaGVkID0gdG9rZW5DYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggY2FjaGVkICkge1xuXHRcdHJldHVybiBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7XG5cdH1cblxuXHRzb0ZhciA9IHNlbGVjdG9yO1xuXHRncm91cHMgPSBbXTtcblx0cHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyO1xuXG5cdHdoaWxlICggc29GYXIgKSB7XG5cblx0XHQvLyBDb21tYSBhbmQgZmlyc3QgcnVuXG5cdFx0aWYgKCAhbWF0Y2hlZCB8fCAoIG1hdGNoID0gcmNvbW1hLmV4ZWMoIHNvRmFyICkgKSApIHtcblx0XHRcdGlmICggbWF0Y2ggKSB7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgY29uc3VtZSB0cmFpbGluZyBjb21tYXMgYXMgdmFsaWRcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hbIDAgXS5sZW5ndGggKSB8fCBzb0Zhcjtcblx0XHRcdH1cblx0XHRcdGdyb3Vwcy5wdXNoKCAoIHRva2VucyA9IFtdICkgKTtcblx0XHR9XG5cblx0XHRtYXRjaGVkID0gZmFsc2U7XG5cblx0XHQvLyBDb21iaW5hdG9yc1xuXHRcdGlmICggKCBtYXRjaCA9IHJsZWFkaW5nQ29tYmluYXRvci5leGVjKCBzb0ZhciApICkgKSB7XG5cdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdHRva2Vucy5wdXNoKCB7XG5cdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXG5cdFx0XHRcdC8vIENhc3QgZGVzY2VuZGFudCBjb21iaW5hdG9ycyB0byBzcGFjZVxuXHRcdFx0XHR0eXBlOiBtYXRjaFsgMCBdLnJlcGxhY2UoIHJ0cmltQ1NTLCBcIiBcIiApXG5cdFx0XHR9ICk7XG5cdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZpbHRlcnNcblx0XHRmb3IgKCB0eXBlIGluIEV4cHIuZmlsdGVyICkge1xuXHRcdFx0aWYgKCAoIG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSApICYmICggIXByZUZpbHRlcnNbIHR5cGUgXSB8fFxuXHRcdFx0XHQoIG1hdGNoID0gcHJlRmlsdGVyc1sgdHlwZSBdKCBtYXRjaCApICkgKSApIHtcblx0XHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHRcdHRva2Vucy5wdXNoKCB7XG5cdFx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cdFx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0XHRtYXRjaGVzOiBtYXRjaFxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCAhbWF0Y2hlZCApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnZhbGlkIGV4Y2Vzc1xuXHQvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmdcblx0Ly8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zXG5cdGlmICggcGFyc2VPbmx5ICkge1xuXHRcdHJldHVybiBzb0Zhci5sZW5ndGg7XG5cdH1cblxuXHRyZXR1cm4gc29GYXIgP1xuXHRcdGZpbmQuZXJyb3IoIHNlbGVjdG9yICkgOlxuXG5cdFx0Ly8gQ2FjaGUgdGhlIHRva2Vuc1xuXHRcdHRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApO1xufVxuXG5mdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdHNlbGVjdG9yID0gXCJcIjtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0c2VsZWN0b3IgKz0gdG9rZW5zWyBpIF0udmFsdWU7XG5cdH1cblx0cmV0dXJuIHNlbGVjdG9yO1xufVxuXG5mdW5jdGlvbiBhZGRDb21iaW5hdG9yKCBtYXRjaGVyLCBjb21iaW5hdG9yLCBiYXNlICkge1xuXHR2YXIgZGlyID0gY29tYmluYXRvci5kaXIsXG5cdFx0c2tpcCA9IGNvbWJpbmF0b3IubmV4dCxcblx0XHRrZXkgPSBza2lwIHx8IGRpcixcblx0XHRjaGVja05vbkVsZW1lbnRzID0gYmFzZSAmJiBrZXkgPT09IFwicGFyZW50Tm9kZVwiLFxuXHRcdGRvbmVOYW1lID0gZG9uZSsrO1xuXG5cdHJldHVybiBjb21iaW5hdG9yLmZpcnN0ID9cblxuXHRcdC8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gOlxuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBvbGRDYWNoZSwgb3V0ZXJDYWNoZSxcblx0XHRcdFx0bmV3Q2FjaGUgPSBbIGRpcnJ1bnMsIGRvbmVOYW1lIF07XG5cblx0XHRcdC8vIFdlIGNhbid0IHNldCBhcmJpdHJhcnkgZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGNvbWJpbmF0b3IgY2FjaGluZ1xuXHRcdFx0aWYgKCB4bWwgKSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoIGVsZW1bIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdGlmICggc2tpcCAmJiBub2RlTmFtZSggZWxlbSwgc2tpcCApICkge1xuXHRcdFx0XHRcdFx0XHRlbGVtID0gZWxlbVsgZGlyIF0gfHwgZWxlbTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoICggb2xkQ2FjaGUgPSBvdXRlckNhY2hlWyBrZXkgXSApICYmXG5cdFx0XHRcdFx0XHRcdG9sZENhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgb2xkQ2FjaGVbIDEgXSA9PT0gZG9uZU5hbWUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQXNzaWduIHRvIG5ld0NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0cmV0dXJuICggbmV3Q2FjaGVbIDIgXSA9IG9sZENhY2hlWyAyIF0gKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlWyBrZXkgXSA9IG5ld0NhY2hlO1xuXG5cdFx0XHRcdFx0XHRcdC8vIEEgbWF0Y2ggbWVhbnMgd2UncmUgZG9uZTsgYSBmYWlsIG1lYW5zIHdlIGhhdmUgdG8ga2VlcCBjaGVja2luZ1xuXHRcdFx0XHRcdFx0XHRpZiAoICggbmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xufVxuXG5mdW5jdGlvbiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSB7XG5cdHJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID9cblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAhbWF0Y2hlcnNbIGkgXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IDpcblx0XHRtYXRjaGVyc1sgMCBdO1xufVxuXG5mdW5jdGlvbiBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciwgY29udGV4dHMsIHJlc3VsdHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBjb250ZXh0cy5sZW5ndGg7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGZpbmQoIHNlbGVjdG9yLCBjb250ZXh0c1sgaSBdLCByZXN1bHRzICk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGNvbmRlbnNlKCB1bm1hdGNoZWQsIG1hcCwgZmlsdGVyLCBjb250ZXh0LCB4bWwgKSB7XG5cdHZhciBlbGVtLFxuXHRcdG5ld1VubWF0Y2hlZCA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGxlbiA9IHVubWF0Y2hlZC5sZW5ndGgsXG5cdFx0bWFwcGVkID0gbWFwICE9IG51bGw7XG5cblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0aWYgKCAoIGVsZW0gPSB1bm1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0aWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdGlmICggbWFwcGVkICkge1xuXHRcdFx0XHRcdG1hcC5wdXNoKCBpICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3VW5tYXRjaGVkO1xufVxuXG5mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7XG5cdGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7XG5cdH1cblx0aWYgKCBwb3N0RmluZGVyICYmICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApO1xuXHR9XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0dmFyIHRlbXAsIGksIGVsZW0sIG1hdGNoZXJPdXQsXG5cdFx0XHRwcmVNYXAgPSBbXSxcblx0XHRcdHBvc3RNYXAgPSBbXSxcblx0XHRcdHByZWV4aXN0aW5nID0gcmVzdWx0cy5sZW5ndGgsXG5cblx0XHRcdC8vIEdldCBpbml0aWFsIGVsZW1lbnRzIGZyb20gc2VlZCBvciBjb250ZXh0XG5cdFx0XHRlbGVtcyA9IHNlZWQgfHxcblx0XHRcdFx0bXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IgfHwgXCIqXCIsXG5cdFx0XHRcdFx0Y29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCwgW10gKSxcblxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXG5cdFx0XHRtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID9cblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRlbGVtcztcblxuXHRcdGlmICggbWF0Y2hlciApIHtcblxuXHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIHBvc3RGaW5kZXIsIG9yIGZpbHRlcmVkIHNlZWQsIG9yIG5vbi1zZWVkIHBvc3RGaWx0ZXJcblx0XHRcdC8vIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsXG5cdFx0XHRtYXRjaGVyT3V0ID0gcG9zdEZpbmRlciB8fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgP1xuXG5cdFx0XHRcdC8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeVxuXHRcdFx0XHRbXSA6XG5cblx0XHRcdFx0Ly8gLi4ub3RoZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5XG5cdFx0XHRcdHJlc3VsdHM7XG5cblx0XHRcdC8vIEZpbmQgcHJpbWFyeSBtYXRjaGVzXG5cdFx0XHRtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyT3V0ID0gbWF0Y2hlckluO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHBvc3RGaWx0ZXJcblx0XHRpZiAoIHBvc3RGaWx0ZXIgKSB7XG5cdFx0XHR0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTtcblx0XHRcdHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTtcblxuXHRcdFx0Ly8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJblxuXHRcdFx0aSA9IHRlbXAubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggKCBlbGVtID0gdGVtcFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlck91dFsgcG9zdE1hcFsgaSBdIF0gPSAhKCBtYXRjaGVySW5bIHBvc3RNYXBbIGkgXSBdID0gZWxlbSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyIHx8IHByZUZpbHRlciApIHtcblx0XHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzXG5cdFx0XHRcdFx0dGVtcCA9IFtdO1xuXHRcdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gbWF0Y2hlck91dFsgaSBdICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2hcblx0XHRcdFx0XHRcdFx0dGVtcC5wdXNoKCAoIG1hdGNoZXJJblsgaSBdID0gZWxlbSApICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsICggbWF0Y2hlck91dCA9IFtdICksIHRlbXAsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWRcblx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRpZiAoICggZWxlbSA9IG1hdGNoZXJPdXRbIGkgXSApICYmXG5cdFx0XHRcdFx0XHQoIHRlbXAgPSBwb3N0RmluZGVyID8gaW5kZXhPZi5jYWxsKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbIGkgXSApID4gLTEgKSB7XG5cblx0XHRcdFx0XHRcdHNlZWRbIHRlbXAgXSA9ICEoIHJlc3VsdHNbIHRlbXAgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyT3V0ID0gY29uZGVuc2UoXG5cdFx0XHRcdG1hdGNoZXJPdXQgPT09IHJlc3VsdHMgP1xuXHRcdFx0XHRcdG1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6XG5cdFx0XHRcdFx0bWF0Y2hlck91dFxuXHRcdFx0KTtcblx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91dCwgeG1sICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMgKSB7XG5cdHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRsZWFkaW5nUmVsYXRpdmUgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIDAgXS50eXBlIF0sXG5cdFx0aW1wbGljaXRSZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlWyBcIiBcIiBdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mLmNhbGwoIGNoZWNrQ29udGV4dCwgZWxlbSApID4gLTE7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoZXJzID0gWyBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0dmFyIHJldCA9ICggIWxlYWRpbmdSZWxhdGl2ZSAmJiAoIHhtbCB8fCBjb250ZXh0ICE9IG91dGVybW9zdENvbnRleHQgKSApIHx8IChcblx0XHRcdFx0KCBjaGVja0NvbnRleHQgPSBjb250ZXh0ICkubm9kZVR5cGUgP1xuXHRcdFx0XHRcdG1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRcdG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTtcblxuXHRcdFx0Ly8gQXZvaWQgaGFuZ2luZyBvbnRvIGVsZW1lbnRcblx0XHRcdC8vIChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvaXNzdWVzLzI5OSlcblx0XHRcdGNoZWNrQ29udGV4dCA9IG51bGw7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH0gXTtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoICggbWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaSBdLnR5cGUgXSApICkge1xuXHRcdFx0bWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyICkgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbIGkgXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1sgaSBdLm1hdGNoZXMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIHNwZWNpYWwgdXBvbiBzZWVpbmcgYSBwb3NpdGlvbmFsIG1hdGNoZXJcblx0XHRcdGlmICggbWF0Y2hlclsgZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZ1xuXHRcdFx0XHRqID0gKytpO1xuXHRcdFx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaiBdLnR5cGUgXSApIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcblx0XHRcdFx0XHRpID4gMSAmJiB0b1NlbGVjdG9yKFxuXG5cdFx0XHRcdFx0XHQvLyBJZiB0aGUgcHJlY2VkaW5nIHRva2VuIHdhcyBhIGRlc2NlbmRhbnQgY29tYmluYXRvciwgaW5zZXJ0IGFuIGltcGxpY2l0IGFueS1lbGVtZW50IGAqYFxuXHRcdFx0XHRcdFx0dG9rZW5zLnNsaWNlKCAwLCBpIC0gMSApXG5cdFx0XHRcdFx0XHRcdC5jb25jYXQoIHsgdmFsdWU6IHRva2Vuc1sgaSAtIDIgXS50eXBlID09PSBcIiBcIiA/IFwiKlwiIDogXCJcIiB9IClcblx0XHRcdFx0XHQpLnJlcGxhY2UoIHJ0cmltQ1NTLCBcIiQxXCIgKSxcblx0XHRcdFx0XHRtYXRjaGVyLFxuXHRcdFx0XHRcdGkgPCBqICYmIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMuc2xpY2UoIGksIGogKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgbWF0Y2hlckZyb21Ub2tlbnMoICggdG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkgKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgdG9TZWxlY3RvciggdG9rZW5zIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdG1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApIHtcblx0dmFyIGJ5U2V0ID0gc2V0TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRzdXBlck1hdGNoZXIgPSBmdW5jdGlvbiggc2VlZCwgY29udGV4dCwgeG1sLCByZXN1bHRzLCBvdXRlcm1vc3QgKSB7XG5cdFx0XHR2YXIgZWxlbSwgaiwgbWF0Y2hlcixcblx0XHRcdFx0bWF0Y2hlZENvdW50ID0gMCxcblx0XHRcdFx0aSA9IFwiMFwiLFxuXHRcdFx0XHR1bm1hdGNoZWQgPSBzZWVkICYmIFtdLFxuXHRcdFx0XHRzZXRNYXRjaGVkID0gW10sXG5cdFx0XHRcdGNvbnRleHRCYWNrdXAgPSBvdXRlcm1vc3RDb250ZXh0LFxuXG5cdFx0XHRcdC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHRcblx0XHRcdFx0ZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmQuVEFHKCBcIipcIiwgb3V0ZXJtb3N0ICksXG5cblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcblx0XHRcdFx0ZGlycnVuc1VuaXF1ZSA9ICggZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEgKSxcblx0XHRcdFx0bGVuID0gZWxlbXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCA9PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcblx0XHRcdC8vIFN1cHBvcnQ6IGlPUyA8PTcgLSA5IG9ubHlcblx0XHRcdC8vIFRvbGVyYXRlIE5vZGVMaXN0IHByb3BlcnRpZXMgKElFOiBcImxlbmd0aFwiOyBTYWZhcmk6IDxudW1iZXI+KSBtYXRjaGluZ1xuXHRcdFx0Ly8gZWxlbWVudHMgYnkgaWQuIChzZWUgdHJhYy0xNDE0Milcblx0XHRcdGZvciAoIDsgaSAhPT0gbGVuICYmICggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRcdGlmICggIWNvbnRleHQgJiYgZWxlbS5vd25lckRvY3VtZW50ICE9IGRvY3VtZW50ICkge1xuXHRcdFx0XHRcdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0XHRcdFx0XHRcdHhtbCA9ICFkb2N1bWVudElzSFRNTDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQgfHwgZG9jdW1lbnQsIHhtbCApICkge1xuXHRcdFx0XHRcdFx0XHRwdXNoLmNhbGwoIHJlc3VsdHMsIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHJhY2sgdW5tYXRjaGVkIGVsZW1lbnRzIGZvciBzZXQgZmlsdGVyc1xuXHRcdFx0XHRpZiAoIGJ5U2V0ICkge1xuXG5cdFx0XHRcdFx0Ly8gVGhleSB3aWxsIGhhdmUgZ29uZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBtYXRjaGVyc1xuXHRcdFx0XHRcdGlmICggKCBlbGVtID0gIW1hdGNoZXIgJiYgZWxlbSApICkge1xuXHRcdFx0XHRcdFx0bWF0Y2hlZENvdW50LS07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdFxuXHRcdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHRcdHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIGBpYCBpcyBub3cgdGhlIGNvdW50IG9mIGVsZW1lbnRzIHZpc2l0ZWQgYWJvdmUsIGFuZCBhZGRpbmcgaXQgdG8gYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIG1ha2VzIHRoZSBsYXR0ZXIgbm9ubmVnYXRpdmUuXG5cdFx0XHRtYXRjaGVkQ291bnQgKz0gaTtcblxuXHRcdFx0Ly8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBOT1RFOiBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIHRoZXJlIGFyZSBubyB1bm1hdGNoZWQgZWxlbWVudHMgKGkuZS4sIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBlcXVhbHMgYGlgKSwgdW5sZXNzIHdlIGRpZG4ndCB2aXNpdCBfYW55XyBlbGVtZW50cyBpbiB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGhhdmVcblx0XHRcdC8vIG5vIGVsZW1lbnQgbWF0Y2hlcnMgYW5kIG5vIHNlZWQuXG5cdFx0XHQvLyBJbmNyZW1lbnRpbmcgYW4gaW5pdGlhbGx5LXN0cmluZyBcIjBcIiBgaWAgYWxsb3dzIGBpYCB0byByZW1haW4gYSBzdHJpbmcgb25seSBpbiB0aGF0XG5cdFx0XHQvLyBjYXNlLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIFwiMDBcIiBgbWF0Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMgZnJvbSBgaWAgYnV0IGlzIGFsc29cblx0XHRcdC8vIG51bWVyaWNhbGx5IHplcm8uXG5cdFx0XHRpZiAoIGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHtcblx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdHdoaWxlICggKCBtYXRjaGVyID0gc2V0TWF0Y2hlcnNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlciggdW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggc2VlZCApIHtcblxuXHRcdFx0XHRcdC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmdcblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCAhKCB1bm1hdGNoZWRbIGkgXSB8fCBzZXRNYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHRzZXRNYXRjaGVkWyBpIF0gPSBwb3AuY2FsbCggcmVzdWx0cyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRGlzY2FyZCBpbmRleCBwbGFjZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9ubHkgYWN0dWFsIG1hdGNoZXNcblx0XHRcdFx0XHRzZXRNYXRjaGVkID0gY29uZGVuc2UoIHNldE1hdGNoZWQgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFkZCBtYXRjaGVzIHRvIHJlc3VsdHNcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2V0TWF0Y2hlZCApO1xuXG5cdFx0XHRcdC8vIFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1Y2NlZWRpbmcgbXVsdGlwbGUgc3VjY2Vzc2Z1bCBtYXRjaGVycyBzdGlwdWxhdGUgc29ydGluZ1xuXHRcdFx0XHRpZiAoIG91dGVybW9zdCAmJiAhc2VlZCAmJiBzZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0XHQoIG1hdGNoZWRDb3VudCArIHNldE1hdGNoZXJzLmxlbmd0aCApID4gMSApIHtcblxuXHRcdFx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KCByZXN1bHRzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gT3ZlcnJpZGUgbWFuaXB1bGF0aW9uIG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1hdGNoZXJzXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0QmFja3VwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdW5tYXRjaGVkO1xuXHRcdH07XG5cblx0cmV0dXJuIGJ5U2V0ID9cblx0XHRtYXJrRnVuY3Rpb24oIHN1cGVyTWF0Y2hlciApIDpcblx0XHRzdXBlck1hdGNoZXI7XG59XG5cbmZ1bmN0aW9uIGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHtcblx0dmFyIGksXG5cdFx0c2V0TWF0Y2hlcnMgPSBbXSxcblx0XHRlbGVtZW50TWF0Y2hlcnMgPSBbXSxcblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCAhY2FjaGVkICkge1xuXG5cdFx0Ly8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50XG5cdFx0aWYgKCAhbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdH1cblx0XHRpID0gbWF0Y2gubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0Y2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoWyBpIF0gKTtcblx0XHRcdGlmICggY2FjaGVkWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhY2hlIHRoZSBjb21waWxlZCBmdW5jdGlvblxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoIHNlbGVjdG9yLFxuXHRcdFx0bWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkgKTtcblxuXHRcdC8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvblxuXHRcdGNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHR9XG5cdHJldHVybiBjYWNoZWQ7XG59XG5cbi8qKlxuICogQSBsb3ctbGV2ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2l0aCBqUXVlcnkncyBjb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbiBidWlsdCB3aXRoIGpRdWVyeSBzZWxlY3RvciBjb21waWxlXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRleHRcbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXVxuICogQHBhcmFtIHtBcnJheX0gW3NlZWRdIEEgc2V0IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFnYWluc3RcbiAqL1xuZnVuY3Rpb24gc2VsZWN0KCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIGksIHRva2VucywgdG9rZW4sIHR5cGUsIGZpbmQsXG5cdFx0Y29tcGlsZWQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBzZWxlY3Rvcixcblx0XHRtYXRjaCA9ICFzZWVkICYmIHRva2VuaXplKCAoIHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IgKSApO1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlbGVjdG9yIGluIHRoZSBsaXN0IGFuZCBubyBzZWVkXG5cdC8vICh0aGUgbGF0dGVyIG9mIHdoaWNoIGd1YXJhbnRlZXMgdXMgY29udGV4dClcblx0aWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7XG5cblx0XHQvLyBSZWR1Y2UgY29udGV4dCBpZiB0aGUgbGVhZGluZyBjb21wb3VuZCBzZWxlY3RvciBpcyBhbiBJRFxuXHRcdHRva2VucyA9IG1hdGNoWyAwIF0gPSBtYXRjaFsgMCBdLnNsaWNlKCAwICk7XG5cdFx0aWYgKCB0b2tlbnMubGVuZ3RoID4gMiAmJiAoIHRva2VuID0gdG9rZW5zWyAwIF0gKS50eXBlID09PSBcIklEXCIgJiZcblx0XHRcdFx0Y29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJiBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIDEgXS50eXBlIF0gKSB7XG5cblx0XHRcdGNvbnRleHQgPSAoIEV4cHIuZmluZC5JRChcblx0XHRcdFx0dG9rZW4ubWF0Y2hlc1sgMCBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksXG5cdFx0XHRcdGNvbnRleHRcblx0XHRcdCkgfHwgW10gKVsgMCBdO1xuXHRcdFx0aWYgKCAhY29udGV4dCApIHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdC8vIFByZWNvbXBpbGVkIG1hdGNoZXJzIHdpbGwgc3RpbGwgdmVyaWZ5IGFuY2VzdHJ5LCBzbyBzdGVwIHVwIGEgbGV2ZWxcblx0XHRcdH0gZWxzZSBpZiAoIGNvbXBpbGVkICkge1xuXHRcdFx0XHRjb250ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nXG5cdFx0aSA9IG1hdGNoRXhwci5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/IDAgOiB0b2tlbnMubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG9rZW4gPSB0b2tlbnNbIGkgXTtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvclxuXHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyAoIHR5cGUgPSB0b2tlbi50eXBlICkgXSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICggZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdICkgKSB7XG5cblx0XHRcdFx0Ly8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzXG5cdFx0XHRcdGlmICggKCBzZWVkID0gZmluZChcblx0XHRcdFx0XHR0b2tlbi5tYXRjaGVzWyAwIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcblx0XHRcdFx0XHRyc2libGluZy50ZXN0KCB0b2tlbnNbIDAgXS50eXBlICkgJiZcblx0XHRcdFx0XHRcdHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdFx0XHRcdCkgKSApIHtcblxuXHRcdFx0XHRcdC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBlYXJseVxuXHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoIGksIDEgKTtcblx0XHRcdFx0XHRzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyApO1xuXHRcdFx0XHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2VlZCApO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDb21waWxlIGFuZCBleGVjdXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9uIGlmIG9uZSBpcyBub3QgcHJvdmlkZWRcblx0Ly8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZVxuXHQoIGNvbXBpbGVkIHx8IGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCApICkoXG5cdFx0c2VlZCxcblx0XHRjb250ZXh0LFxuXHRcdCFkb2N1bWVudElzSFRNTCxcblx0XHRyZXN1bHRzLFxuXHRcdCFjb250ZXh0IHx8IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0KTtcblx0cmV0dXJuIHJlc3VsdHM7XG59XG5cbi8vIE9uZS10aW1lIGFzc2lnbm1lbnRzXG5cbi8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgLSA0LjErXG4vLyBTb3J0IHN0YWJpbGl0eVxuc3VwcG9ydC5zb3J0U3RhYmxlID0gZXhwYW5kby5zcGxpdCggXCJcIiApLnNvcnQoIHNvcnRPcmRlciApLmpvaW4oIFwiXCIgKSA9PT0gZXhwYW5kbztcblxuLy8gSW5pdGlhbGl6ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IGRvY3VtZW50XG5zZXREb2N1bWVudCgpO1xuXG4vLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIC0gNC4xK1xuLy8gRGV0YWNoZWQgbm9kZXMgY29uZm91bmRpbmdseSBmb2xsb3cgKmVhY2ggb3RoZXIqXG5zdXBwb3J0LnNvcnREZXRhY2hlZCA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdC8vIFNob3VsZCByZXR1cm4gMSwgYnV0IHJldHVybnMgNCAoZm9sbG93aW5nKVxuXHRyZXR1cm4gZWwuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZmllbGRzZXRcIiApICkgJiAxO1xufSApO1xuXG5qUXVlcnkuZmluZCA9IGZpbmQ7XG5cbi8vIERlcHJlY2F0ZWRcbmpRdWVyeS5leHByWyBcIjpcIiBdID0galF1ZXJ5LmV4cHIucHNldWRvcztcbmpRdWVyeS51bmlxdWUgPSBqUXVlcnkudW5pcXVlU29ydDtcblxuLy8gVGhlc2UgaGF2ZSBhbHdheXMgYmVlbiBwcml2YXRlLCBidXQgdGhleSB1c2VkIHRvIGJlIGRvY3VtZW50ZWQgYXMgcGFydCBvZlxuLy8gU2l6emxlIHNvIGxldCdzIG1haW50YWluIHRoZW0gZm9yIG5vdyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcHVycG9zZXMuXG5maW5kLmNvbXBpbGUgPSBjb21waWxlO1xuZmluZC5zZWxlY3QgPSBzZWxlY3Q7XG5maW5kLnNldERvY3VtZW50ID0gc2V0RG9jdW1lbnQ7XG5maW5kLnRva2VuaXplID0gdG9rZW5pemU7XG5cbmZpbmQuZXNjYXBlID0galF1ZXJ5LmVzY2FwZVNlbGVjdG9yO1xuZmluZC5nZXRUZXh0ID0galF1ZXJ5LnRleHQ7XG5maW5kLmlzWE1MID0galF1ZXJ5LmlzWE1MRG9jO1xuZmluZC5zZWxlY3RvcnMgPSBqUXVlcnkuZXhwcjtcbmZpbmQuc3VwcG9ydCA9IGpRdWVyeS5zdXBwb3J0O1xuZmluZC51bmlxdWVTb3J0ID0galF1ZXJ5LnVuaXF1ZVNvcnQ7XG5cblx0LyogZXNsaW50LWVuYWJsZSAqL1xuXG59ICkoKTtcblxuXG52YXIgZGlyID0gZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7XG5cdHZhciBtYXRjaGVkID0gW10sXG5cdFx0dHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkO1xuXG5cdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSAmJiBlbGVtLm5vZGVUeXBlICE9PSA5ICkge1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGlsICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgc2libGluZ3MgPSBmdW5jdGlvbiggbiwgZWxlbSApIHtcblx0dmFyIG1hdGNoZWQgPSBbXTtcblxuXHRmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkge1xuXHRcdGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkge1xuXHRcdFx0bWF0Y2hlZC5wdXNoKCBuICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0O1xuXG52YXIgcnNpbmdsZVRhZyA9ICggL148KFthLXpdW15cXC9cXDA+OlxceDIwXFx0XFxyXFxuXFxmXSopW1xceDIwXFx0XFxyXFxuXFxmXSpcXC8/Pig/OjxcXC9cXDE+fCkkL2kgKTtcblxuXG5cbi8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90XG5mdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHtcblx0aWYgKCBpc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBTaW5nbGUgZWxlbWVudFxuXHRpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gQXJyYXlsaWtlIG9mIGVsZW1lbnRzIChqUXVlcnksIGFyZ3VtZW50cywgQXJyYXkpXG5cdGlmICggdHlwZW9mIHF1YWxpZmllciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPiAtMSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRmlsdGVyZWQgZGlyZWN0bHkgZm9yIGJvdGggc2ltcGxlIGFuZCBjb21wbGV4IHNlbGVjdG9yc1xuXHRyZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7XG59XG5cbmpRdWVyeS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHtcblx0dmFyIGVsZW0gPSBlbGVtc1sgMCBdO1xuXG5cdGlmICggbm90ICkge1xuXHRcdGV4cHIgPSBcIjpub3QoXCIgKyBleHByICsgXCIpXCI7XG5cdH1cblxuXHRpZiAoIGVsZW1zLmxlbmd0aCA9PT0gMSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGVsZW0sIGV4cHIgKSA/IFsgZWxlbSBdIDogW107XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTtcblx0fSApICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgaSwgcmV0LFxuXHRcdFx0bGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRzZWxmID0gdGhpcztcblxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKSApO1xuXHRcdH1cblxuXHRcdHJldCA9IHRoaXMucHVzaFN0YWNrKCBbXSApO1xuXG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGpRdWVyeS5maW5kKCBzZWxlY3Rvciwgc2VsZlsgaSBdLCByZXQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbGVuID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCByZXQgKSA6IHJldDtcblx0fSxcblx0ZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCBmYWxzZSApICk7XG5cdH0sXG5cdG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgdHJ1ZSApICk7XG5cdH0sXG5cdGlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuICEhd2lubm93KFxuXHRcdFx0dGhpcyxcblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldFxuXHRcdFx0Ly8gc28gJChcInA6Zmlyc3RcIikuaXMoXCJwOmxhc3RcIikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvIFwicFwiLlxuXHRcdFx0dHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICYmIHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGpRdWVyeSggc2VsZWN0b3IgKSA6XG5cdFx0XHRcdHNlbGVjdG9yIHx8IFtdLFxuXHRcdFx0ZmFsc2Vcblx0XHQpLmxlbmd0aDtcblx0fVxufSApO1xuXG5cbi8vIEluaXRpYWxpemUgYSBqUXVlcnkgb2JqZWN0XG5cblxuLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpXG52YXIgcm9vdGpRdWVyeSxcblxuXHQvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5nc1xuXHQvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAodHJhYy05NTIxKVxuXHQvLyBTdHJpY3QgSFRNTCByZWNvZ25pdGlvbiAodHJhYy0xMTI5MDogbXVzdCBzdGFydCB3aXRoIDwpXG5cdC8vIFNob3J0Y3V0IHNpbXBsZSAjaWQgY2FzZSBmb3Igc3BlZWRcblx0cnF1aWNrRXhwciA9IC9eKD86XFxzKig8W1xcd1xcV10rPilbXj5dKnwjKFtcXHctXSspKSQvLFxuXG5cdGluaXQgPSBqUXVlcnkuZm4uaW5pdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcm9vdCApIHtcblx0XHR2YXIgbWF0Y2gsIGVsZW07XG5cblx0XHQvLyBIQU5ETEU6ICQoXCJcIiksICQobnVsbCksICQodW5kZWZpbmVkKSwgJChmYWxzZSlcblx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdC8vIE1ldGhvZCBpbml0KCkgYWNjZXB0cyBhbiBhbHRlcm5hdGUgcm9vdGpRdWVyeVxuXHRcdC8vIHNvIG1pZ3JhdGUgY2FuIHN1cHBvcnQgalF1ZXJ5LnN1YiAoZ2gtMjEwMSlcblx0XHRyb290ID0gcm9vdCB8fCByb290alF1ZXJ5O1xuXG5cdFx0Ly8gSGFuZGxlIEhUTUwgc3RyaW5nc1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0aWYgKCBzZWxlY3RvclsgMCBdID09PSBcIjxcIiAmJlxuXHRcdFx0XHRzZWxlY3Rvclsgc2VsZWN0b3IubGVuZ3RoIC0gMSBdID09PSBcIj5cIiAmJlxuXHRcdFx0XHRzZWxlY3Rvci5sZW5ndGggPj0gMyApIHtcblxuXHRcdFx0XHQvLyBBc3N1bWUgdGhhdCBzdHJpbmdzIHRoYXQgc3RhcnQgYW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRoZSByZWdleCBjaGVja1xuXHRcdFx0XHRtYXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1hdGNoIGh0bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRleHQgaXMgc3BlY2lmaWVkIGZvciAjaWRcblx0XHRcdGlmICggbWF0Y2ggJiYgKCBtYXRjaFsgMSBdIHx8ICFjb250ZXh0ICkgKSB7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpXG5cdFx0XHRcdGlmICggbWF0Y2hbIDEgXSApIHtcblx0XHRcdFx0XHRjb250ZXh0ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbIDAgXSA6IGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBPcHRpb24gdG8gcnVuIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbGx5IGxldCB0aGUgZXJyb3IgYmUgdGhyb3duIGlmIHBhcnNlSFRNTCBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcywgalF1ZXJ5LnBhcnNlSFRNTChcblx0XHRcdFx0XHRcdG1hdGNoWyAxIF0sXG5cdFx0XHRcdFx0XHRjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50LFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdCkgKTtcblxuXHRcdFx0XHRcdC8vIEhBTkRMRTogJChodG1sLCBwcm9wcylcblx0XHRcdFx0XHRpZiAoIHJzaW5nbGVUYWcudGVzdCggbWF0Y2hbIDEgXSApICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCBtYXRjaCBpbiBjb250ZXh0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFByb3BlcnRpZXMgb2YgY29udGV4dCBhcmUgY2FsbGVkIGFzIG1ldGhvZHMgaWYgcG9zc2libGVcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGlzWyBtYXRjaCBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpc1sgbWF0Y2ggXSggY29udGV4dFsgbWF0Y2ggXSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBvdGhlcndpc2Ugc2V0IGFzIGF0dHJpYnV0ZXNcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmF0dHIoIG1hdGNoLCBjb250ZXh0WyBtYXRjaCBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoI2lkKVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbIDIgXSApO1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdFxuXHRcdFx0XHRcdFx0dGhpc1sgMCBdID0gZWxlbTtcblx0XHRcdFx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsICQoLi4uKSlcblx0XHRcdH0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkge1xuXHRcdFx0XHRyZXR1cm4gKCBjb250ZXh0IHx8IHJvb3QgKS5maW5kKCBzZWxlY3RvciApO1xuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgY29udGV4dClcblx0XHRcdC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQoY29udGV4dCkuZmluZChleHByKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSEFORExFOiAkKERPTUVsZW1lbnQpXG5cdFx0fSBlbHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7XG5cdFx0XHR0aGlzWyAwIF0gPSBzZWxlY3Rvcjtcblx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0Ly8gSEFORExFOiAkKGZ1bmN0aW9uKVxuXHRcdC8vIFNob3J0Y3V0IGZvciBkb2N1bWVudCByZWFkeVxuXHRcdH0gZWxzZSBpZiAoIGlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7XG5cdFx0XHRyZXR1cm4gcm9vdC5yZWFkeSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0cm9vdC5yZWFkeSggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gRXhlY3V0ZSBpbW1lZGlhdGVseSBpZiByZWFkeSBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRzZWxlY3RvciggalF1ZXJ5ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7XG5cdH07XG5cbi8vIEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3RhbnRpYXRpb25cbmluaXQucHJvdG90eXBlID0galF1ZXJ5LmZuO1xuXG4vLyBJbml0aWFsaXplIGNlbnRyYWwgcmVmZXJlbmNlXG5yb290alF1ZXJ5ID0galF1ZXJ5KCBkb2N1bWVudCApO1xuXG5cbnZhciBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxcblxuXHQvLyBNZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldFxuXHRndWFyYW50ZWVkVW5pcXVlID0ge1xuXHRcdGNoaWxkcmVuOiB0cnVlLFxuXHRcdGNvbnRlbnRzOiB0cnVlLFxuXHRcdG5leHQ6IHRydWUsXG5cdFx0cHJldjogdHJ1ZVxuXHR9O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGhhczogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHR2YXIgdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICksXG5cdFx0XHRsID0gdGFyZ2V0cy5sZW5ndGg7XG5cblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFyZ2V0c1sgaSBdICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Y2xvc2VzdDogZnVuY3Rpb24oIHNlbGVjdG9ycywgY29udGV4dCApIHtcblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRtYXRjaGVkID0gW10sXG5cdFx0XHR0YXJnZXRzID0gdHlwZW9mIHNlbGVjdG9ycyAhPT0gXCJzdHJpbmdcIiAmJiBqUXVlcnkoIHNlbGVjdG9ycyApO1xuXG5cdFx0Ly8gUG9zaXRpb25hbCBzZWxlY3RvcnMgbmV2ZXIgbWF0Y2gsIHNpbmNlIHRoZXJlJ3Mgbm8gX3NlbGVjdGlvbl8gY29udGV4dFxuXHRcdGlmICggIXJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3JzICkgKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZvciAoIGN1ciA9IHRoaXNbIGkgXTsgY3VyICYmIGN1ciAhPT0gY29udGV4dDsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cblx0XHRcdFx0XHQvLyBBbHdheXMgc2tpcCBkb2N1bWVudCBmcmFnbWVudHNcblx0XHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA8IDExICYmICggdGFyZ2V0cyA/XG5cdFx0XHRcdFx0XHR0YXJnZXRzLmluZGV4KCBjdXIgKSA+IC0xIDpcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcGFzcyBub24tZWxlbWVudHMgdG8galF1ZXJ5I2ZpbmRcblx0XHRcdFx0XHRcdGN1ci5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGN1ciwgc2VsZWN0b3JzICkgKSApIHtcblxuXHRcdFx0XHRcdFx0bWF0Y2hlZC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKSA6IG1hdGNoZWQgKTtcblx0fSxcblxuXHQvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGluIHRoZSBzZXRcblx0aW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnRcblx0XHRpZiAoICFlbGVtICkge1xuXHRcdFx0cmV0dXJuICggdGhpc1sgMCBdICYmIHRoaXNbIDAgXS5wYXJlbnROb2RlICkgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0xO1xuXHRcdH1cblxuXHRcdC8vIEluZGV4IGluIHNlbGVjdG9yXG5cdFx0aWYgKCB0eXBlb2YgZWxlbSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBpbmRleE9mLmNhbGwoIGpRdWVyeSggZWxlbSApLCB0aGlzWyAwIF0gKTtcblx0XHR9XG5cblx0XHQvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnRcblx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCB0aGlzLFxuXG5cdFx0XHQvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWRcblx0XHRcdGVsZW0uanF1ZXJ5ID8gZWxlbVsgMCBdIDogZWxlbVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkOiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKFxuXHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoXG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgalF1ZXJ5KCBzZWxlY3RvciwgY29udGV4dCApIClcblx0XHRcdClcblx0XHQpO1xuXHR9LFxuXG5cdGFkZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5hZGQoIHNlbGVjdG9yID09IG51bGwgP1xuXHRcdFx0dGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlciggc2VsZWN0b3IgKVxuXHRcdCk7XG5cdH1cbn0gKTtcblxuZnVuY3Rpb24gc2libGluZyggY3VyLCBkaXIgKSB7XG5cdHdoaWxlICggKCBjdXIgPSBjdXJbIGRpciBdICkgJiYgY3VyLm5vZGVUeXBlICE9PSAxICkge31cblx0cmV0dXJuIGN1cjtcbn1cblxualF1ZXJ5LmVhY2goIHtcblx0cGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7XG5cdH0sXG5cdHBhcmVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiICk7XG5cdH0sXG5cdHBhcmVudHNVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiwgdW50aWwgKTtcblx0fSxcblx0bmV4dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0c2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxkLCBlbGVtICk7XG5cdH0sXG5cdGNoaWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoIGVsZW0uZmlyc3RDaGlsZCApO1xuXHR9LFxuXHRjb250ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0aWYgKCBlbGVtLmNvbnRlbnREb2N1bWVudCAhPSBudWxsICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExK1xuXHRcdFx0Ly8gPG9iamVjdD4gZWxlbWVudHMgd2l0aCBubyBgZGF0YWAgYXR0cmlidXRlIGhhcyBhbiBvYmplY3Rcblx0XHRcdC8vIGBjb250ZW50RG9jdW1lbnRgIHdpdGggYSBgbnVsbGAgcHJvdG90eXBlLlxuXHRcdFx0Z2V0UHJvdG8oIGVsZW0uY29udGVudERvY3VtZW50ICkgKSB7XG5cblx0XHRcdHJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudDtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seSwgaU9TIDcgb25seSwgQW5kcm9pZCBCcm93c2VyIDw9NC4zIG9ubHlcblx0XHQvLyBUcmVhdCB0aGUgdGVtcGxhdGUgZWxlbWVudCBhcyBhIHJlZ3VsYXIgb25lIGluIGJyb3dzZXJzIHRoYXRcblx0XHQvLyBkb24ndCBzdXBwb3J0IGl0LlxuXHRcdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGVtcGxhdGVcIiApICkge1xuXHRcdFx0ZWxlbSA9IGVsZW0uY29udGVudCB8fCBlbGVtO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTtcblx0fVxufSwgZnVuY3Rpb24oIG5hbWUsIGZuICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7XG5cdFx0dmFyIG1hdGNoZWQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTtcblxuXHRcdGlmICggbmFtZS5zbGljZSggLTUgKSAhPT0gXCJVbnRpbFwiICkge1xuXHRcdFx0c2VsZWN0b3IgPSB1bnRpbDtcblx0XHR9XG5cblx0XHRpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5sZW5ndGggPiAxICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgZHVwbGljYXRlc1xuXHRcdFx0aWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkge1xuXHRcdFx0XHRqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXZlcnNlIG9yZGVyIGZvciBwYXJlbnRzKiBhbmQgcHJldi1kZXJpdmF0aXZlc1xuXHRcdFx0aWYgKCBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkge1xuXHRcdFx0XHRtYXRjaGVkLnJldmVyc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQgKTtcblx0fTtcbn0gKTtcbnZhciBybm90aHRtbHdoaXRlID0gKCAvW15cXHgyMFxcdFxcclxcblxcZl0rL2cgKTtcblxuXG5cbi8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25zIGludG8gT2JqZWN0LWZvcm1hdHRlZCBvbmVzXG5mdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkge1xuXHR2YXIgb2JqZWN0ID0ge307XG5cdGpRdWVyeS5lYWNoKCBvcHRpb25zLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkge1xuXHRcdG9iamVjdFsgZmxhZyBdID0gdHJ1ZTtcblx0fSApO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG4vKlxuICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICpcdG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3dcbiAqXHRcdFx0dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdFxuICpcbiAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlXG4gKiBcImZpcmVkXCIgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogUG9zc2libGUgb3B0aW9uczpcbiAqXG4gKlx0b25jZTpcdFx0XHR3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdG1lbW9yeTpcdFx0XHR3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkXG4gKlx0XHRcdFx0XHRhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCBcIm1lbW9yaXplZFwiXG4gKlx0XHRcdFx0XHR2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0dW5pcXVlOlx0XHRcdHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KVxuICpcbiAqXHRzdG9wT25GYWxzZTpcdGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICpcbiAqL1xualF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWRcblx0Ly8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KVxuXHRvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgP1xuXHRcdGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6XG5cdFx0alF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHR2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZ1xuXHRcdGZpcmluZyxcblxuXHRcdC8vIExhc3QgZmlyZSB2YWx1ZSBmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzXG5cdFx0bWVtb3J5LFxuXG5cdFx0Ly8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWRcblx0XHRmaXJlZCxcblxuXHRcdC8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmdcblx0XHRsb2NrZWQsXG5cblx0XHQvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdFxuXHRcdGxpc3QgPSBbXSxcblxuXHRcdC8vIFF1ZXVlIG9mIGV4ZWN1dGlvbiBkYXRhIGZvciByZXBlYXRhYmxlIGxpc3RzXG5cdFx0cXVldWUgPSBbXSxcblxuXHRcdC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKVxuXHRcdGZpcmluZ0luZGV4ID0gLTEsXG5cblx0XHQvLyBGaXJlIGNhbGxiYWNrc1xuXHRcdGZpcmUgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5mb3JjZSBzaW5nbGUtZmlyaW5nXG5cdFx0XHRsb2NrZWQgPSBsb2NrZWQgfHwgb3B0aW9ucy5vbmNlO1xuXG5cdFx0XHQvLyBFeGVjdXRlIGNhbGxiYWNrcyBmb3IgYWxsIHBlbmRpbmcgZXhlY3V0aW9ucyxcblx0XHRcdC8vIHJlc3BlY3RpbmcgZmlyaW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBydW50aW1lIGNoYW5nZXNcblx0XHRcdGZpcmVkID0gZmlyaW5nID0gdHJ1ZTtcblx0XHRcdGZvciAoIDsgcXVldWUubGVuZ3RoOyBmaXJpbmdJbmRleCA9IC0xICkge1xuXHRcdFx0XHRtZW1vcnkgPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0XHR3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFJ1biBjYWxsYmFjayBhbmQgY2hlY2sgZm9yIGVhcmx5IHRlcm1pbmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBtZW1vcnlbIDAgXSwgbWVtb3J5WyAxIF0gKSA9PT0gZmFsc2UgJiZcblx0XHRcdFx0XHRcdG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEp1bXAgdG8gZW5kIGFuZCBmb3JnZXQgdGhlIGRhdGEgc28gLmFkZCBkb2Vzbid0IHJlLWZpcmVcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yZ2V0IHRoZSBkYXRhIGlmIHdlJ3JlIGRvbmUgd2l0aCBpdFxuXHRcdFx0aWYgKCAhb3B0aW9ucy5tZW1vcnkgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRmaXJpbmcgPSBmYWxzZTtcblxuXHRcdFx0Ly8gQ2xlYW4gdXAgaWYgd2UncmUgZG9uZSBmaXJpbmcgZm9yIGdvb2Rcblx0XHRcdGlmICggbG9ja2VkICkge1xuXG5cdFx0XHRcdC8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHNcblx0XHRcdFx0aWYgKCBtZW1vcnkgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgdGhpcyBvYmplY3QgaXMgc3BlbnRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsaXN0ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVjdFxuXHRcdHNlbGYgPSB7XG5cblx0XHRcdC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3Rcblx0XHRcdGFkZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblxuXHRcdFx0XHRcdC8vIElmIHdlIGhhdmUgbWVtb3J5IGZyb20gYSBwYXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUgYWZ0ZXIgYWRkaW5nXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0cXVldWUucHVzaCggbWVtb3J5ICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0KCBmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdC5wdXNoKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIHRvVHlwZSggYXJnICkgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5XG5cdFx0XHRcdFx0XHRcdFx0YWRkKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdH0gKSggYXJndW1lbnRzICk7XG5cblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3Rcblx0XHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0dmFyIGluZGV4O1xuXHRcdFx0XHRcdHdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0bGlzdC5zcGxpY2UoIGluZGV4LCAxICk7XG5cblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlc1xuXHRcdFx0XHRcdFx0aWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHtcblx0XHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXgtLTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDaGVjayBpZiBhIGdpdmVuIGNhbGxiYWNrIGlzIGluIHRoZSBsaXN0LlxuXHRcdFx0Ly8gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHJldHVybiB3aGV0aGVyIG9yIG5vdCBsaXN0IGhhcyBjYWxsYmFja3MgYXR0YWNoZWQuXG5cdFx0XHRoYXM6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0cmV0dXJuIGZuID9cblx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xIDpcblx0XHRcdFx0XHRsaXN0Lmxlbmd0aCA+IDA7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0XG5cdFx0XHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkXG5cdFx0XHQvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdC8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlc1xuXHRcdFx0ZGlzYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhbGlzdDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmVcblx0XHRcdC8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpXG5cdFx0XHQvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHRsb2NrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0aWYgKCAhbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0bG9ja2VkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhbG9ja2VkO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkge1xuXHRcdFx0XHRpZiAoICFsb2NrZWQgKSB7XG5cdFx0XHRcdFx0YXJncyA9IGFyZ3MgfHwgW107XG5cdFx0XHRcdFx0YXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBhcmdzICk7XG5cdFx0XHRcdFx0aWYgKCAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzXG5cdFx0XHRmaXJlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlXG5cdFx0XHRmaXJlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWZpcmVkO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0cmV0dXJuIHNlbGY7XG59O1xuXG5cbmZ1bmN0aW9uIElkZW50aXR5KCB2ICkge1xuXHRyZXR1cm4gdjtcbn1cbmZ1bmN0aW9uIFRocm93ZXIoIGV4ICkge1xuXHR0aHJvdyBleDtcbn1cblxuZnVuY3Rpb24gYWRvcHRWYWx1ZSggdmFsdWUsIHJlc29sdmUsIHJlamVjdCwgbm9WYWx1ZSApIHtcblx0dmFyIG1ldGhvZDtcblxuXHR0cnkge1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIHByb21pc2UgYXNwZWN0IGZpcnN0IHRvIHByaXZpbGVnZSBzeW5jaHJvbm91cyBiZWhhdmlvclxuXHRcdGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS5wcm9taXNlICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSApLmRvbmUoIHJlc29sdmUgKS5mYWlsKCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIHRoZW5hYmxlc1xuXHRcdH0gZWxzZSBpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUudGhlbiApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUsIHJlc29sdmUsIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgbm9uLXRoZW5hYmxlc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvbnRyb2wgYHJlc29sdmVgIGFyZ3VtZW50cyBieSBsZXR0aW5nIEFycmF5I3NsaWNlIGNhc3QgYm9vbGVhbiBgbm9WYWx1ZWAgdG8gaW50ZWdlcjpcblx0XHRcdC8vICogZmFsc2U6IFsgdmFsdWUgXS5zbGljZSggMCApID0+IHJlc29sdmUoIHZhbHVlIClcblx0XHRcdC8vICogdHJ1ZTogWyB2YWx1ZSBdLnNsaWNlKCAxICkgPT4gcmVzb2x2ZSgpXG5cdFx0XHRyZXNvbHZlLmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXS5zbGljZSggbm9WYWx1ZSApICk7XG5cdFx0fVxuXG5cdC8vIEZvciBQcm9taXNlcy9BKywgY29udmVydCBleGNlcHRpb25zIGludG8gcmVqZWN0aW9uc1xuXHQvLyBTaW5jZSBqUXVlcnkud2hlbiBkb2Vzbid0IHVud3JhcCB0aGVuYWJsZXMsIHdlIGNhbiBza2lwIHRoZSBleHRyYSBjaGVja3MgYXBwZWFyaW5nIGluXG5cdC8vIERlZmVycmVkI3RoZW4gdG8gY29uZGl0aW9uYWxseSBzdXBwcmVzcyByZWplY3Rpb24uXG5cdH0gY2F0Y2ggKCB2YWx1ZSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIG9ubHlcblx0XHQvLyBTdHJpY3QgbW9kZSBmdW5jdGlvbnMgaW52b2tlZCB3aXRob3V0IC5jYWxsLy5hcHBseSBnZXQgZ2xvYmFsLW9iamVjdCBjb250ZXh0XG5cdFx0cmVqZWN0LmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXSApO1xuXHR9XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHREZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XG5cdFx0dmFyIHR1cGxlcyA9IFtcblxuXHRcdFx0XHQvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgY2FsbGJhY2tzLFxuXHRcdFx0XHQvLyAuLi4gLnRoZW4gaGFuZGxlcnMsIGFyZ3VtZW50IGluZGV4LCBbZmluYWwgc3RhdGVdXG5cdFx0XHRcdFsgXCJub3RpZnlcIiwgXCJwcm9ncmVzc1wiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLCAyIF0sXG5cdFx0XHRcdFsgXCJyZXNvbHZlXCIsIFwiZG9uZVwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMCwgXCJyZXNvbHZlZFwiIF0sXG5cdFx0XHRcdFsgXCJyZWplY3RcIiwgXCJmYWlsXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAxLCBcInJlamVjdGVkXCIgXVxuXHRcdFx0XSxcblx0XHRcdHN0YXRlID0gXCJwZW5kaW5nXCIsXG5cdFx0XHRwcm9taXNlID0ge1xuXHRcdFx0XHRzdGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbHdheXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImNhdGNoXCI6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJvbWlzZS50aGVuKCBudWxsLCBmbiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0cGlwZTogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkge1xuXHRcdFx0XHRcdHZhciBmbnMgPSBhcmd1bWVudHM7XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggX2ksIHR1cGxlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE1hcCB0dXBsZXMgKHByb2dyZXNzLCBkb25lLCBmYWlsKSB0byBhcmd1bWVudHMgKGRvbmUsIGZhaWwsIHByb2dyZXNzKVxuXHRcdFx0XHRcdFx0XHR2YXIgZm4gPSBpc0Z1bmN0aW9uKCBmbnNbIHR1cGxlWyA0IF0gXSApICYmIGZuc1sgdHVwbGVbIDQgXSBdO1xuXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLnByb2dyZXNzKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLm5vdGlmeSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5kb25lKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlc29sdmUgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZmFpbChmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZWplY3QgfSlcblx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAxIF0gXSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgJiYgaXNGdW5jdGlvbiggcmV0dXJuZWQucHJvbWlzZSApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQucHJvbWlzZSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5wcm9ncmVzcyggbmV3RGVmZXIubm90aWZ5IClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmRvbmUoIG5ld0RlZmVyLnJlc29sdmUgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZmFpbCggbmV3RGVmZXIucmVqZWN0ICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXShcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm4gPyBbIHJldHVybmVkIF0gOiBhcmd1bWVudHNcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRmbnMgPSBudWxsO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoZW46IGZ1bmN0aW9uKCBvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgb25Qcm9ncmVzcyApIHtcblx0XHRcdFx0XHR2YXIgbWF4RGVwdGggPSAwO1xuXHRcdFx0XHRcdGZ1bmN0aW9uIHJlc29sdmUoIGRlcHRoLCBkZWZlcnJlZCwgaGFuZGxlciwgc3BlY2lhbCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBhcmd1bWVudHMsXG5cdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkLCB0aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuM1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBkb3VibGUtcmVzb2x1dGlvbiBhdHRlbXB0c1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCA8IG1heERlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkID0gaGFuZGxlci5hcHBseSggdGhhdCwgYXJncyApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4xXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC00OFxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCA9PT0gZGVmZXJyZWQucHJvbWlzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCBcIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvblwiICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb25zIDIuMy4zLjEsIDMuNVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTRcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTc1XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBSZXRyaWV2ZSBgdGhlbmAgb25seSBvbmNlXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGVuID0gcmV0dXJuZWQgJiZcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy40XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTY0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgY2hlY2sgb2JqZWN0cyBhbmQgZnVuY3Rpb25zIGZvciB0aGVuYWJpbGl0eVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoIHR5cGVvZiByZXR1cm5lZCA9PT0gXCJvYmplY3RcIiB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiByZXR1cm5lZCA9PT0gXCJmdW5jdGlvblwiICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQudGhlbjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGEgcmV0dXJuZWQgdGhlbmFibGVcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhlbiApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgcHJvY2Vzc29ycyAobm90aWZ5KSBqdXN0IHdhaXQgZm9yIHJlc29sdXRpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBhbHNvIGhvb2sgaW50byBwcm9ncmVzc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIGRpc3JlZ2FyZCBvbGRlciByZXNvbHV0aW9uIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1heERlcHRoKys7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYWxsIG90aGVyIHJldHVybmVkIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IElkZW50aXR5ICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgcmV0dXJuZWQgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFByb2Nlc3MgdGhlIHZhbHVlKHMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmF1bHQgcHJvY2VzcyBpcyByZXNvbHZlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggc3BlY2lhbCB8fCBkZWZlcnJlZC5yZXNvbHZlV2l0aCApKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgbm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGNhdGNoIGFuZCByZWplY3QgZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MgPSBzcGVjaWFsID9cblx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgOlxuXHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayggZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5lcnJvciApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy40LjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02MVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBwb3N0LXJlc29sdXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKyAxID49IG1heERlcHRoICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gVGhyb3dlciApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgZSBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4xXG5cdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU3XG5cdFx0XHRcdFx0XHRcdC8vIFJlLXJlc29sdmUgcHJvbWlzZXMgaW1tZWRpYXRlbHkgdG8gZG9kZ2UgZmFsc2UgcmVqZWN0aW9uIGZyb21cblx0XHRcdFx0XHRcdFx0Ly8gc3Vic2VxdWVudCBlcnJvcnNcblx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzKCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDYWxsIGFuIG9wdGlvbmFsIGhvb2sgdG8gcmVjb3JkIHRoZSBlcnJvciwgaW4gY2FzZSBvZiBleGNlcHRpb25cblx0XHRcdFx0XHRcdFx0XHQvLyBzaW5jZSBpdCdzIG90aGVyd2lzZSBsb3N0IHdoZW4gZXhlY3V0aW9uIGdvZXMgYXN5bmNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5EZWZlcnJlZC5nZXRFcnJvckhvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLmVycm9yID0galF1ZXJ5LkRlZmVycmVkLmdldEVycm9ySG9vaygpO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVGhlIGRlcHJlY2F0ZWQgYWxpYXMgb2YgdGhlIGFib3ZlLiBXaGlsZSB0aGUgbmFtZSBzdWdnZXN0c1xuXHRcdFx0XHRcdFx0XHRcdC8vIHJldHVybmluZyB0aGUgc3RhY2ssIG5vdCBhbiBlcnJvciBpbnN0YW5jZSwgalF1ZXJ5IGp1c3QgcGFzc2VzXG5cdFx0XHRcdFx0XHRcdFx0Ly8gaXQgZGlyZWN0bHkgdG8gYGNvbnNvbGUud2FybmAgc28gYm90aCB3aWxsIHdvcms7IGFuIGluc3RhbmNlXG5cdFx0XHRcdFx0XHRcdFx0Ly8ganVzdCBiZXR0ZXIgY29vcGVyYXRlcyB3aXRoIHNvdXJjZSBtYXBzLlxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLmVycm9yID0galF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggcHJvY2VzcyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblxuXHRcdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblByb2dyZXNzICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25Qcm9ncmVzcyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlci5ub3RpZnlXaXRoXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDEgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uRnVsZmlsbGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25GdWxmaWxsZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHlcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAyIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblJlamVjdGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25SZWplY3RlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRUaHJvd2VyXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkXG5cdFx0XHRcdC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3Rcblx0XHRcdFx0cHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRcdFx0XHRyZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWZlcnJlZCA9IHt9O1xuXG5cdFx0Ly8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kc1xuXHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHtcblx0XHRcdHZhciBsaXN0ID0gdHVwbGVbIDIgXSxcblx0XHRcdFx0c3RhdGVTdHJpbmcgPSB0dXBsZVsgNSBdO1xuXG5cdFx0XHQvLyBwcm9taXNlLnByb2dyZXNzID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZG9uZSA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmZhaWwgPSBsaXN0LmFkZFxuXHRcdFx0cHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5hZGQ7XG5cblx0XHRcdC8vIEhhbmRsZSBzdGF0ZVxuXHRcdFx0aWYgKCBzdGF0ZVN0cmluZyApIHtcblx0XHRcdFx0bGlzdC5hZGQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZXNvbHZlZFwiIChpLmUuLCBmdWxmaWxsZWQpXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVqZWN0ZWRcIlxuXHRcdFx0XHRcdFx0c3RhdGUgPSBzdGF0ZVN0cmluZztcblx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDIgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAzIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2NhbGxiYWNrcy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDIgXS5sb2NrLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0ubG9ja1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5maXJlXG5cdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0bGlzdC5hZGQoIHR1cGxlWyAzIF0uZmlyZSApO1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnkgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQubm90aWZ5V2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmUgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVzb2x2ZVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3QgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVqZWN0V2l0aCguLi4pIH1cblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHVuZGVmaW5lZCA6IHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH07XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlV2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdFdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0gPSBsaXN0LmZpcmVXaXRoO1xuXHRcdH0gKTtcblxuXHRcdC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZVxuXHRcdHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTtcblxuXHRcdC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnlcblx0XHRpZiAoIGZ1bmMgKSB7XG5cdFx0XHRmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBkb25lIVxuXHRcdHJldHVybiBkZWZlcnJlZDtcblx0fSxcblxuXHQvLyBEZWZlcnJlZCBoZWxwZXJcblx0d2hlbjogZnVuY3Rpb24oIHNpbmdsZVZhbHVlICkge1xuXHRcdHZhclxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXNcblx0XHRcdHJlbWFpbmluZyA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cblx0XHRcdC8vIGNvdW50IG9mIHVucHJvY2Vzc2VkIGFyZ3VtZW50c1xuXHRcdFx0aSA9IHJlbWFpbmluZyxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgZnVsZmlsbG1lbnQgZGF0YVxuXHRcdFx0cmVzb2x2ZUNvbnRleHRzID0gQXJyYXkoIGkgKSxcblx0XHRcdHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSxcblxuXHRcdFx0Ly8gdGhlIHByaW1hcnkgRGVmZXJyZWRcblx0XHRcdHByaW1hcnkgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgY2FsbGJhY2sgZmFjdG9yeVxuXHRcdFx0dXBkYXRlRnVuYyA9IGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJlc29sdmVDb250ZXh0c1sgaSBdID0gdGhpcztcblx0XHRcdFx0XHRyZXNvbHZlVmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApIDogdmFsdWU7XG5cdFx0XHRcdFx0aWYgKCAhKCAtLXJlbWFpbmluZyApICkge1xuXHRcdFx0XHRcdFx0cHJpbWFyeS5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdC8vIFNpbmdsZS0gYW5kIGVtcHR5IGFyZ3VtZW50cyBhcmUgYWRvcHRlZCBsaWtlIFByb21pc2UucmVzb2x2ZVxuXHRcdGlmICggcmVtYWluaW5nIDw9IDEgKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCBzaW5nbGVWYWx1ZSwgcHJpbWFyeS5kb25lKCB1cGRhdGVGdW5jKCBpICkgKS5yZXNvbHZlLCBwcmltYXJ5LnJlamVjdCxcblx0XHRcdFx0IXJlbWFpbmluZyApO1xuXG5cdFx0XHQvLyBVc2UgLnRoZW4oKSB0byB1bndyYXAgc2Vjb25kYXJ5IHRoZW5hYmxlcyAoY2YuIGdoLTMwMDApXG5cdFx0XHRpZiAoIHByaW1hcnkuc3RhdGUoKSA9PT0gXCJwZW5kaW5nXCIgfHxcblx0XHRcdFx0aXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIHJlc29sdmVWYWx1ZXNbIGkgXS50aGVuICkgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHByaW1hcnkudGhlbigpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGFyZ3VtZW50cyBhcmUgYWdncmVnYXRlZCBsaWtlIFByb21pc2UuYWxsIGFycmF5IGVsZW1lbnRzXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCByZXNvbHZlVmFsdWVzWyBpIF0sIHVwZGF0ZUZ1bmMoIGkgKSwgcHJpbWFyeS5yZWplY3QgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJpbWFyeS5wcm9taXNlKCk7XG5cdH1cbn0gKTtcblxuXG4vLyBUaGVzZSB1c3VhbGx5IGluZGljYXRlIGEgcHJvZ3JhbW1lciBtaXN0YWtlIGR1cmluZyBkZXZlbG9wbWVudCxcbi8vIHdhcm4gYWJvdXQgdGhlbSBBU0FQIHJhdGhlciB0aGFuIHN3YWxsb3dpbmcgdGhlbSBieSBkZWZhdWx0LlxudmFyIHJlcnJvck5hbWVzID0gL14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87XG5cbi8vIElmIGBqUXVlcnkuRGVmZXJyZWQuZ2V0RXJyb3JIb29rYCBpcyBkZWZpbmVkLCBgYXN5bmNFcnJvcmAgaXMgYW4gZXJyb3Jcbi8vIGNhcHR1cmVkIGJlZm9yZSB0aGUgYXN5bmMgYmFycmllciB0byBnZXQgdGhlIG9yaWdpbmFsIGVycm9yIGNhdXNlXG4vLyB3aGljaCBtYXkgb3RoZXJ3aXNlIGJlIGhpZGRlbi5cbmpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVuY3Rpb24oIGVycm9yLCBhc3luY0Vycm9yICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDggLSA5IG9ubHlcblx0Ly8gQ29uc29sZSBleGlzdHMgd2hlbiBkZXYgdG9vbHMgYXJlIG9wZW4sIHdoaWNoIGNhbiBoYXBwZW4gYXQgYW55IHRpbWVcblx0aWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS53YXJuICYmIGVycm9yICYmIHJlcnJvck5hbWVzLnRlc3QoIGVycm9yLm5hbWUgKSApIHtcblx0XHR3aW5kb3cuY29uc29sZS53YXJuKCBcImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246IFwiICsgZXJyb3IubWVzc2FnZSxcblx0XHRcdGVycm9yLnN0YWNrLCBhc3luY0Vycm9yICk7XG5cdH1cbn07XG5cblxuXG5cbmpRdWVyeS5yZWFkeUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKCBlcnJvciApIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdHRocm93IGVycm9yO1xuXHR9ICk7XG59O1xuXG5cblxuXG4vLyBUaGUgZGVmZXJyZWQgdXNlZCBvbiBET00gcmVhZHlcbnZhciByZWFkeUxpc3QgPSBqUXVlcnkuRGVmZXJyZWQoKTtcblxualF1ZXJ5LmZuLnJlYWR5ID0gZnVuY3Rpb24oIGZuICkge1xuXG5cdHJlYWR5TGlzdFxuXHRcdC50aGVuKCBmbiApXG5cblx0XHQvLyBXcmFwIGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiBpbiBhIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIGxvb2t1cFxuXHRcdC8vIGhhcHBlbnMgYXQgdGhlIHRpbWUgb2YgZXJyb3IgaGFuZGxpbmcgaW5zdGVhZCBvZiBjYWxsYmFja1xuXHRcdC8vIHJlZ2lzdHJhdGlvbi5cblx0XHQuY2F0Y2goIGZ1bmN0aW9uKCBlcnJvciApIHtcblx0XHRcdGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiggZXJyb3IgKTtcblx0XHR9ICk7XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy5cblx0aXNSZWFkeTogZmFsc2UsXG5cblx0Ly8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9yZVxuXHQvLyB0aGUgcmVhZHkgZXZlbnQgZmlyZXMuIFNlZSB0cmFjLTY3ODFcblx0cmVhZHlXYWl0OiAxLFxuXG5cdC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHlcblx0cmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkge1xuXG5cdFx0Ly8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeVxuXHRcdGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeVxuXHRcdGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTtcblxuXHRcdC8vIElmIGEgbm9ybWFsIERPTSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlXG5cdFx0aWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZVxuXHRcdHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkucmVhZHkudGhlbiA9IHJlYWR5TGlzdC50aGVuO1xuXG4vLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZFxuZnVuY3Rpb24gY29tcGxldGVkKCkge1xuXHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG5cdGpRdWVyeS5yZWFkeSgpO1xufVxuXG4vLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZFxuLy8gYWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMCBvbmx5XG4vLyBPbGRlciBJRSBzb21ldGltZXMgc2lnbmFscyBcImludGVyYWN0aXZlXCIgdG9vIHNvb25cbmlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiIHx8XG5cdCggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gXCJsb2FkaW5nXCIgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCApICkge1xuXG5cdC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeVxuXHR3aW5kb3cuc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7XG5cbn0gZWxzZSB7XG5cblx0Ly8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFja1xuXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cblx0Ly8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcbn1cblxuXG5cblxuLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMgb2YgYSBjb2xsZWN0aW9uXG4vLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb25cbnZhciBhY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBlbGVtcy5sZW5ndGgsXG5cdFx0YnVsayA9IGtleSA9PSBudWxsO1xuXG5cdC8vIFNldHMgbWFueSB2YWx1ZXNcblx0aWYgKCB0b1R5cGUoIGtleSApID09PSBcIm9iamVjdFwiICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cdFx0Zm9yICggaSBpbiBrZXkgKSB7XG5cdFx0XHRhY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5WyBpIF0sIHRydWUsIGVtcHR5R2V0LCByYXcgKTtcblx0XHR9XG5cblx0Ly8gU2V0cyBvbmUgdmFsdWVcblx0fSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXG5cdFx0aWYgKCAhaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJhdyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBidWxrICkge1xuXG5cdFx0XHQvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXRcblx0XHRcdGlmICggcmF3ICkge1xuXHRcdFx0XHRmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTtcblx0XHRcdFx0Zm4gPSBudWxsO1xuXG5cdFx0XHQvLyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWxrID0gZm47XG5cdFx0XHRcdGZuID0gZnVuY3Rpb24oIGVsZW0sIF9rZXksIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiBidWxrLmNhbGwoIGpRdWVyeSggZWxlbSApLCB2YWx1ZSApO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0Zm4oXG5cdFx0XHRcdFx0ZWxlbXNbIGkgXSwga2V5LCByYXcgP1xuXHRcdFx0XHRcdFx0dmFsdWUgOlxuXHRcdFx0XHRcdFx0dmFsdWUuY2FsbCggZWxlbXNbIGkgXSwgaSwgZm4oIGVsZW1zWyBpIF0sIGtleSApIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIGNoYWluYWJsZSApIHtcblx0XHRyZXR1cm4gZWxlbXM7XG5cdH1cblxuXHQvLyBHZXRzXG5cdGlmICggYnVsayApIHtcblx0XHRyZXR1cm4gZm4uY2FsbCggZWxlbXMgKTtcblx0fVxuXG5cdHJldHVybiBsZW4gPyBmbiggZWxlbXNbIDAgXSwga2V5ICkgOiBlbXB0eUdldDtcbn07XG5cblxuLy8gTWF0Y2hlcyBkYXNoZWQgc3RyaW5nIGZvciBjYW1lbGl6aW5nXG52YXIgcm1zUHJlZml4ID0gL14tbXMtLyxcblx0cmRhc2hBbHBoYSA9IC8tKFthLXpdKS9nO1xuXG4vLyBVc2VkIGJ5IGNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKClcbmZ1bmN0aW9uIGZjYW1lbENhc2UoIF9hbGwsIGxldHRlciApIHtcblx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xufVxuXG4vLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG4vLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAodHJhYy05NTcyKVxuZnVuY3Rpb24gY2FtZWxDYXNlKCBzdHJpbmcgKSB7XG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJlZml4LCBcIm1zLVwiICkucmVwbGFjZSggcmRhc2hBbHBoYSwgZmNhbWVsQ2FzZSApO1xufVxudmFyIGFjY2VwdERhdGEgPSBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0Ly8gQWNjZXB0cyBvbmx5OlxuXHQvLyAgLSBOb2RlXG5cdC8vICAgIC0gTm9kZS5FTEVNRU5UX05PREVcblx0Ly8gICAgLSBOb2RlLkRPQ1VNRU5UX05PREVcblx0Ly8gIC0gT2JqZWN0XG5cdC8vICAgIC0gQW55XG5cdHJldHVybiBvd25lci5ub2RlVHlwZSA9PT0gMSB8fCBvd25lci5ub2RlVHlwZSA9PT0gOSB8fCAhKCArb3duZXIubm9kZVR5cGUgKTtcbn07XG5cblxuXG5cbmZ1bmN0aW9uIERhdGEoKSB7XG5cdHRoaXMuZXhwYW5kbyA9IGpRdWVyeS5leHBhbmRvICsgRGF0YS51aWQrKztcbn1cblxuRGF0YS51aWQgPSAxO1xuXG5EYXRhLnByb3RvdHlwZSA9IHtcblxuXHRjYWNoZTogZnVuY3Rpb24oIG93bmVyICkge1xuXG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIG93bmVyIG9iamVjdCBhbHJlYWR5IGhhcyBhIGNhY2hlXG5cdFx0dmFyIHZhbHVlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0Ly8gSWYgbm90LCBjcmVhdGUgb25lXG5cdFx0aWYgKCAhdmFsdWUgKSB7XG5cdFx0XHR2YWx1ZSA9IHt9O1xuXG5cdFx0XHQvLyBXZSBjYW4gYWNjZXB0IGRhdGEgZm9yIG5vbi1lbGVtZW50IG5vZGVzIGluIG1vZGVybiBicm93c2Vycyxcblx0XHRcdC8vIGJ1dCB3ZSBzaG91bGQgbm90LCBzZWUgdHJhYy04MzM1LlxuXHRcdFx0Ly8gQWx3YXlzIHJldHVybiBhbiBlbXB0eSBvYmplY3QuXG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIG93bmVyICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgaXQgaXMgYSBub2RlIHVubGlrZWx5IHRvIGJlIHN0cmluZ2lmeS1lZCBvciBsb29wZWQgb3ZlclxuXHRcdFx0XHQvLyB1c2UgcGxhaW4gYXNzaWdubWVudFxuXHRcdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHZhbHVlO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBzZWN1cmUgaXQgaW4gYSBub24tZW51bWVyYWJsZSBwcm9wZXJ0eVxuXHRcdFx0XHQvLyBjb25maWd1cmFibGUgbXVzdCBiZSB0cnVlIHRvIGFsbG93IHRoZSBwcm9wZXJ0eSB0byBiZVxuXHRcdFx0XHQvLyBkZWxldGVkIHdoZW4gZGF0YSBpcyByZW1vdmVkXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBvd25lciwgdGhpcy5leHBhbmRvLCB7XG5cdFx0XHRcdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWVcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24oIG93bmVyLCBkYXRhLCB2YWx1ZSApIHtcblx0XHR2YXIgcHJvcCxcblx0XHRcdGNhY2hlID0gdGhpcy5jYWNoZSggb3duZXIgKTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwga2V5LCB2YWx1ZSBdIGFyZ3Ncblx0XHQvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcpXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGNhY2hlWyBjYW1lbENhc2UoIGRhdGEgKSBdID0gdmFsdWU7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIHsgcHJvcGVydGllcyB9IF0gYXJnc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvcHkgdGhlIHByb3BlcnRpZXMgb25lLWJ5LW9uZSB0byB0aGUgY2FjaGUgb2JqZWN0XG5cdFx0XHRmb3IgKCBwcm9wIGluIGRhdGEgKSB7XG5cdFx0XHRcdGNhY2hlWyBjYW1lbENhc2UoIHByb3AgKSBdID0gZGF0YVsgcHJvcCBdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY2FjaGU7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0cmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMuY2FjaGUoIG93bmVyICkgOlxuXG5cdFx0XHQvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcpXG5cdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gJiYgb3duZXJbIHRoaXMuZXhwYW5kbyBdWyBjYW1lbENhc2UoIGtleSApIF07XG5cdH0sXG5cdGFjY2VzczogZnVuY3Rpb24oIG93bmVyLCBrZXksIHZhbHVlICkge1xuXG5cdFx0Ly8gSW4gY2FzZXMgd2hlcmUgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBObyBrZXkgd2FzIHNwZWNpZmllZFxuXHRcdC8vICAgMi4gQSBzdHJpbmcga2V5IHdhcyBzcGVjaWZpZWQsIGJ1dCBubyB2YWx1ZSBwcm92aWRlZFxuXHRcdC8vXG5cdFx0Ly8gVGFrZSB0aGUgXCJyZWFkXCIgcGF0aCBhbmQgYWxsb3cgdGhlIGdldCBtZXRob2QgdG8gZGV0ZXJtaW5lXG5cdFx0Ly8gd2hpY2ggdmFsdWUgdG8gcmV0dXJuLCByZXNwZWN0aXZlbHkgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBUaGUgZW50aXJlIGNhY2hlIG9iamVjdFxuXHRcdC8vICAgMi4gVGhlIGRhdGEgc3RvcmVkIGF0IHRoZSBrZXlcblx0XHQvL1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0KCAoIGtleSAmJiB0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiICkgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApICkge1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXQoIG93bmVyLCBrZXkgKTtcblx0XHR9XG5cblx0XHQvLyBXaGVuIHRoZSBrZXkgaXMgbm90IGEgc3RyaW5nLCBvciBib3RoIGEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vIGFyZSBzcGVjaWZpZWQsIHNldCBvciBleHRlbmQgKGV4aXN0aW5nIG9iamVjdHMpIHdpdGggZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBBbiBvYmplY3Qgb2YgcHJvcGVydGllc1xuXHRcdC8vICAgMi4gQSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly9cblx0XHR0aGlzLnNldCggb3duZXIsIGtleSwgdmFsdWUgKTtcblxuXHRcdC8vIFNpbmNlIHRoZSBcInNldFwiIHBhdGggY2FuIGhhdmUgdHdvIHBvc3NpYmxlIGVudHJ5IHBvaW50c1xuXHRcdC8vIHJldHVybiB0aGUgZXhwZWN0ZWQgZGF0YSBiYXNlZCBvbiB3aGljaCBwYXRoIHdhcyB0YWtlblsqXVxuXHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBrZXk7XG5cdH0sXG5cdHJlbW92ZTogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0dmFyIGksXG5cdFx0XHRjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblxuXHRcdGlmICggY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIGtleSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0IGFycmF5IG9yIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgb2Yga2V5c1xuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBrZXkgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBrZXkgaXMgYW4gYXJyYXkgb2Yga2V5cy4uLlxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc2V0IGNhbWVsQ2FzZSBrZXlzLCBzbyByZW1vdmUgdGhhdC5cblx0XHRcdFx0a2V5ID0ga2V5Lm1hcCggY2FtZWxDYXNlICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRrZXkgPSBjYW1lbENhc2UoIGtleSApO1xuXG5cdFx0XHRcdC8vIElmIGEga2V5IHdpdGggdGhlIHNwYWNlcyBleGlzdHMsIHVzZSBpdC5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBjcmVhdGUgYW4gYXJyYXkgYnkgbWF0Y2hpbmcgbm9uLXdoaXRlc3BhY2Vcblx0XHRcdFx0a2V5ID0ga2V5IGluIGNhY2hlID9cblx0XHRcdFx0XHRbIGtleSBdIDpcblx0XHRcdFx0XHQoIGtleS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdICk7XG5cdFx0XHR9XG5cblx0XHRcdGkgPSBrZXkubGVuZ3RoO1xuXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlbIGkgXSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiB0aGVyZSdzIG5vIG1vcmUgZGF0YVxuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHwgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICkgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDVcblx0XHRcdC8vIFdlYmtpdCAmIEJsaW5rIHBlcmZvcm1hbmNlIHN1ZmZlcnMgd2hlbiBkZWxldGluZyBwcm9wZXJ0aWVzXG5cdFx0XHQvLyBmcm9tIERPTSBub2Rlcywgc28gc2V0IHRvIHVuZGVmaW5lZCBpbnN0ZWFkXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNzg2MDcgKGJ1ZyByZXN0cmljdGVkKVxuXHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVsZXRlIG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBvd25lciApIHtcblx0XHR2YXIgY2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0cmV0dXJuIGNhY2hlICE9PSB1bmRlZmluZWQgJiYgIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApO1xuXHR9XG59O1xudmFyIGRhdGFQcml2ID0gbmV3IERhdGEoKTtcblxudmFyIGRhdGFVc2VyID0gbmV3IERhdGEoKTtcblxuXG5cbi8vXHRJbXBsZW1lbnRhdGlvbiBTdW1tYXJ5XG4vL1xuLy9cdDEuIEVuZm9yY2UgQVBJIHN1cmZhY2UgYW5kIHNlbWFudGljIGNvbXBhdGliaWxpdHkgd2l0aCAxLjkueCBicmFuY2hcbi8vXHQyLiBJbXByb3ZlIHRoZSBtb2R1bGUncyBtYWludGFpbmFiaWxpdHkgYnkgcmVkdWNpbmcgdGhlIHN0b3JhZ2Vcbi8vXHRcdHBhdGhzIHRvIGEgc2luZ2xlIG1lY2hhbmlzbS5cbi8vXHQzLiBVc2UgdGhlIHNhbWUgc2luZ2xlIG1lY2hhbmlzbSB0byBzdXBwb3J0IFwicHJpdmF0ZVwiIGFuZCBcInVzZXJcIiBkYXRhLlxuLy9cdDQuIF9OZXZlcl8gZXhwb3NlIFwicHJpdmF0ZVwiIGRhdGEgdG8gdXNlciBjb2RlIChUT0RPOiBEcm9wIF9kYXRhLCBfcmVtb3ZlRGF0YSlcbi8vXHQ1LiBBdm9pZCBleHBvc2luZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9uIHVzZXIgb2JqZWN0cyAoZWcuIGV4cGFuZG8gcHJvcGVydGllcylcbi8vXHQ2LiBQcm92aWRlIGEgY2xlYXIgcGF0aCBmb3IgaW1wbGVtZW50YXRpb24gdXBncmFkZSB0byBXZWFrTWFwIGluIDIwMTRcblxudmFyIHJicmFjZSA9IC9eKD86XFx7W1xcd1xcV10qXFx9fFxcW1tcXHdcXFddKlxcXSkkLyxcblx0cm11bHRpRGFzaCA9IC9bQS1aXS9nO1xuXG5mdW5jdGlvbiBnZXREYXRhKCBkYXRhICkge1xuXHRpZiAoIGRhdGEgPT09IFwidHJ1ZVwiICkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aWYgKCBkYXRhID09PSBcImZhbHNlXCIgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKCBkYXRhID09PSBcIm51bGxcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIE9ubHkgY29udmVydCB0byBhIG51bWJlciBpZiBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgc3RyaW5nXG5cdGlmICggZGF0YSA9PT0gK2RhdGEgKyBcIlwiICkge1xuXHRcdHJldHVybiArZGF0YTtcblx0fVxuXG5cdGlmICggcmJyYWNlLnRlc3QoIGRhdGEgKSApIHtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZSggZGF0YSApO1xuXHR9XG5cblx0cmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKSB7XG5cdHZhciBuYW1lO1xuXG5cdC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBmZXRjaCBhbnlcblx0Ly8gZGF0YSBmcm9tIHRoZSBIVE1MNSBkYXRhLSogYXR0cmlidXRlXG5cdGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0bmFtZSA9IFwiZGF0YS1cIiArIGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCBcIi0kJlwiICkudG9Mb3dlckNhc2UoKTtcblx0XHRkYXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTtcblxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRkYXRhID0gZ2V0RGF0YSggZGF0YSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNoYW5nZWQgbGF0ZXJcblx0XHRcdGRhdGFVc2VyLnNldCggZWxlbSwga2V5LCBkYXRhICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkYXRhO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5oYXNEYXRhKCBlbGVtICkgfHwgZGF0YVByaXYuaGFzRGF0YSggZWxlbSApO1xuXHR9LFxuXG5cdGRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhVXNlci5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fSxcblxuXHQvLyBUT0RPOiBOb3cgdGhhdCBhbGwgY2FsbHMgdG8gX2RhdGEgYW5kIF9yZW1vdmVEYXRhIGhhdmUgYmVlbiByZXBsYWNlZFxuXHQvLyB3aXRoIGRpcmVjdCBjYWxscyB0byBkYXRhUHJpdiBtZXRob2RzLCB0aGVzZSBjYW4gYmUgZGVwcmVjYXRlZC5cblx0X2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRfcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHR2YXIgaSwgbmFtZSwgZGF0YSxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRhdHRycyA9IGVsZW0gJiYgZWxlbS5hdHRyaWJ1dGVzO1xuXG5cdFx0Ly8gR2V0cyBhbGwgdmFsdWVzXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdGhpcy5sZW5ndGggKSB7XG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0gKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWRhdGFQcml2LmdldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiApICkge1xuXHRcdFx0XHRcdGkgPSBhdHRycy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdFx0XHRcdC8vIFRoZSBhdHRycyBlbGVtZW50cyBjYW4gYmUgbnVsbCAodHJhYy0xNDg5NClcblx0XHRcdFx0XHRcdGlmICggYXR0cnNbIGkgXSApIHtcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKCBuYW1lLmluZGV4T2YoIFwiZGF0YS1cIiApID09PSAwICkge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBjYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApO1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBTZXRzIG11bHRpcGxlIHZhbHVlc1xuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBkYXRhO1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4gRGF0YVxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCB0aGUgZGF0YS4uLlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc3RvcmUgdGhlIGNhbWVsQ2FzZWQga2V5XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBxdWV1ZTtcblxuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHR5cGUgPSAoIHR5cGUgfHwgXCJmeFwiICkgKyBcInF1ZXVlXCI7XG5cdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHQvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwXG5cdFx0XHRpZiAoIGRhdGEgKSB7XG5cdFx0XHRcdGlmICggIXF1ZXVlIHx8IEFycmF5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVldWUucHVzaCggZGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcXVldWUgfHwgW107XG5cdFx0fVxuXHR9LFxuXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCksXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApO1xuXHRcdFx0fTtcblxuXHRcdC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWxcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdHN0YXJ0TGVuZ3RoLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBkZXF1ZXVlZFxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcblx0XHR9XG5cblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmVcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKS5hZGQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcblx0XHRcdH0gKVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgc2V0dGVyID0gMjtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRkYXRhID0gdHlwZTtcblx0XHRcdHR5cGUgPSBcImZ4XCI7XG5cdFx0XHRzZXR0ZXItLTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMgOlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbIDAgXSAhPT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSApO1xuXHR9LFxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdH0sXG5cblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xuXHRcdFx0aWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc29sdmUoKTtcblx0XHRyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7XG5cdH1cbn0gKTtcbnZhciBwbnVtID0gKCAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLyApLnNvdXJjZTtcblxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xuXG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG5cblx0dmFyIGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXHRcdH0sXG5cdFx0Y29tcG9zZWQgPSB7IGNvbXBvc2VkOiB0cnVlIH07XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4KywgaU9TIDEwLjAgLSAxMC4yIG9ubHlcblx0Ly8gQ2hlY2sgYXR0YWNobWVudCBhY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyaWVzIHdoZW4gcG9zc2libGUgKGdoLTM1MDQpXG5cdC8vIFN1cHBvcnQ6IGlPUyAxMC4wLTEwLjIgb25seVxuXHQvLyBFYXJseSBpT1MgMTAgdmVyc2lvbnMgc3VwcG9ydCBgYXR0YWNoU2hhZG93YCBidXQgbm90IGBnZXRSb290Tm9kZWAsXG5cdC8vIGxlYWRpbmcgdG8gZXJyb3JzLiBXZSBuZWVkIHRvIGNoZWNrIGZvciBgZ2V0Um9vdE5vZGVgLlxuXHRpZiAoIGRvY3VtZW50RWxlbWVudC5nZXRSb290Tm9kZSApIHtcblx0XHRpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSB8fFxuXHRcdFx0XHRlbGVtLmdldFJvb3ROb2RlKCBjb21wb3NlZCApID09PSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0fTtcblx0fVxudmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHtcblxuXHRcdC8vIGlzSGlkZGVuV2l0aGluVHJlZSBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xuXHRcdC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudFxuXHRcdGVsZW0gPSBlbCB8fCBlbGVtO1xuXG5cdFx0Ly8gSW5saW5lIHN0eWxlIHRydW1wcyBhbGxcblx0XHRyZXR1cm4gZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiB8fFxuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmXG5cblx0XHRcdC8vIE90aGVyd2lzZSwgY2hlY2sgY29tcHV0ZWQgc3R5bGVcblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MyAtIDQ1XG5cdFx0XHQvLyBEaXNjb25uZWN0ZWQgZWxlbWVudHMgY2FuIGhhdmUgY29tcHV0ZWQgZGlzcGxheTogbm9uZSwgc28gZmlyc3QgY29uZmlybSB0aGF0IGVsZW0gaXNcblx0XHRcdC8vIGluIHRoZSBkb2N1bWVudC5cblx0XHRcdGlzQXR0YWNoZWQoIGVsZW0gKSAmJlxuXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApID09PSBcIm5vbmVcIjtcblx0fTtcblxuXG5cbmZ1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7XG5cdHZhciBhZGp1c3RlZCwgc2NhbGUsXG5cdFx0bWF4SXRlcmF0aW9ucyA9IDIwLFxuXHRcdGN1cnJlbnRWYWx1ZSA9IHR3ZWVuID9cblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uY3VyKCk7XG5cdFx0XHR9IDpcblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgcHJvcCwgXCJcIiApO1xuXHRcdFx0fSxcblx0XHRpbml0aWFsID0gY3VycmVudFZhbHVlKCksXG5cdFx0dW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApLFxuXG5cdFx0Ly8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXNcblx0XHRpbml0aWFsSW5Vbml0ID0gZWxlbS5ub2RlVHlwZSAmJlxuXHRcdFx0KCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gXCJweFwiICYmICtpbml0aWFsICkgJiZcblx0XHRcdHJjc3NOdW0uZXhlYyggalF1ZXJ5LmNzcyggZWxlbSwgcHJvcCApICk7XG5cblx0aWYgKCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbIDMgXSAhPT0gdW5pdCApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHRcdC8vIEhhbHZlIHRoZSBpdGVyYXRpb24gdGFyZ2V0IHZhbHVlIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlIGZyb20gQ1NTIHVwcGVyIGJvdW5kcyAoZ2gtMjE0NClcblx0XHRpbml0aWFsID0gaW5pdGlhbCAvIDI7XG5cblx0XHQvLyBUcnVzdCB1bml0cyByZXBvcnRlZCBieSBqUXVlcnkuY3NzXG5cdFx0dW5pdCA9IHVuaXQgfHwgaW5pdGlhbEluVW5pdFsgMyBdO1xuXG5cdFx0Ly8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnRcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTtcblxuXHRcdHdoaWxlICggbWF4SXRlcmF0aW9ucy0tICkge1xuXG5cdFx0XHQvLyBFdmFsdWF0ZSBhbmQgdXBkYXRlIG91ciBiZXN0IGd1ZXNzIChkb3VibGluZyBndWVzc2VzIHRoYXQgemVybyBvdXQpLlxuXHRcdFx0Ly8gRmluaXNoIGlmIHRoZSBzY2FsZSBlcXVhbHMgb3IgY3Jvc3NlcyAxIChtYWtpbmcgdGhlIG9sZCpuZXcgcHJvZHVjdCBub24tcG9zaXRpdmUpLlxuXHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXHRcdFx0aWYgKCAoIDEgLSBzY2FsZSApICogKCAxIC0gKCBzY2FsZSA9IGN1cnJlbnRWYWx1ZSgpIC8gaW5pdGlhbCB8fCAwLjUgKSApIDw9IDAgKSB7XG5cdFx0XHRcdG1heEl0ZXJhdGlvbnMgPSAwO1xuXHRcdFx0fVxuXHRcdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTtcblxuXHRcdH1cblxuXHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0ICogMjtcblx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uXG5cdFx0dmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107XG5cdH1cblxuXHRpZiAoIHZhbHVlUGFydHMgKSB7XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsSW5Vbml0IHx8ICtpbml0aWFsIHx8IDA7XG5cblx0XHQvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWRcblx0XHRhZGp1c3RlZCA9IHZhbHVlUGFydHNbIDEgXSA/XG5cdFx0XHRpbml0aWFsSW5Vbml0ICsgKCB2YWx1ZVBhcnRzWyAxIF0gKyAxICkgKiB2YWx1ZVBhcnRzWyAyIF0gOlxuXHRcdFx0K3ZhbHVlUGFydHNbIDIgXTtcblx0XHRpZiAoIHR3ZWVuICkge1xuXHRcdFx0dHdlZW4udW5pdCA9IHVuaXQ7XG5cdFx0XHR0d2Vlbi5zdGFydCA9IGluaXRpYWxJblVuaXQ7XG5cdFx0XHR0d2Vlbi5lbmQgPSBhZGp1c3RlZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFkanVzdGVkO1xufVxuXG5cbnZhciBkZWZhdWx0RGlzcGxheU1hcCA9IHt9O1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApIHtcblx0dmFyIHRlbXAsXG5cdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50LFxuXHRcdG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSxcblx0XHRkaXNwbGF5ID0gZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF07XG5cblx0aWYgKCBkaXNwbGF5ICkge1xuXHRcdHJldHVybiBkaXNwbGF5O1xuXHR9XG5cblx0dGVtcCA9IGRvYy5ib2R5LmFwcGVuZENoaWxkKCBkb2MuY3JlYXRlRWxlbWVudCggbm9kZU5hbWUgKSApO1xuXHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggdGVtcCwgXCJkaXNwbGF5XCIgKTtcblxuXHR0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRlbXAgKTtcblxuXHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdGRpc3BsYXkgPSBcImJsb2NrXCI7XG5cdH1cblx0ZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF0gPSBkaXNwbGF5O1xuXG5cdHJldHVybiBkaXNwbGF5O1xufVxuXG5mdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7XG5cdHZhciBkaXNwbGF5LCBlbGVtLFxuXHRcdHZhbHVlcyA9IFtdLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cblx0Ly8gRGV0ZXJtaW5lIG5ldyBkaXNwbGF5IHZhbHVlIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgdG8gY2hhbmdlXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdO1xuXHRcdGlmICggIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5O1xuXHRcdGlmICggc2hvdyApIHtcblxuXHRcdFx0Ly8gU2luY2Ugd2UgZm9yY2UgdmlzaWJpbGl0eSB1cG9uIGNhc2NhZGUtaGlkZGVuIGVsZW1lbnRzLCBhbiBpbW1lZGlhdGUgKGFuZCBzbG93KVxuXHRcdFx0Ly8gY2hlY2sgaXMgcmVxdWlyZWQgaW4gdGhpcyBmaXJzdCBsb29wIHVubGVzcyB3ZSBoYXZlIGEgbm9uZW1wdHkgZGlzcGxheSB2YWx1ZSAoZWl0aGVyXG5cdFx0XHQvLyBpbmxpbmUgb3IgYWJvdXQtdG8tYmUtcmVzdG9yZWQpXG5cdFx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICkgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCAhdmFsdWVzWyBpbmRleCBdICkge1xuXHRcdFx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIGRpc3BsYXkgIT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBcIm5vbmVcIjtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB3aGF0IHdlJ3JlIG92ZXJ3cml0aW5nXG5cdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJkaXNwbGF5XCIsIGRpc3BsYXkgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTZXQgdGhlIGRpc3BsYXkgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AgdG8gYXZvaWQgY29uc3RhbnQgcmVmbG93XG5cdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCB2YWx1ZXNbIGluZGV4IF0gIT0gbnVsbCApIHtcblx0XHRcdGVsZW1lbnRzWyBpbmRleCBdLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZXNbIGluZGV4IF07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRzO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApO1xuXHR9LFxuXHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTtcblx0fSxcblx0dG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNIaWRkZW5XaXRoaW5UcmVlKCB0aGlzICkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnNob3coKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcbnZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTtcblxudmFyIHJ0YWdOYW1lID0gKCAvPChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSopL2kgKTtcblxudmFyIHJzY3JpcHRUeXBlID0gKCAvXiR8Xm1vZHVsZSR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0ZGl2ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApLFxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seVxuXHQvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAodHJhYy0xMTIxNylcblx0Ly8gU3VwcG9ydDogV2luZG93cyBXZWIgQXBwcyAoV1dBKVxuXHQvLyBgbmFtZWAgYW5kIGB0eXBlYCBtdXN0IHVzZSAuc2V0QXR0cmlidXRlIGZvciBXV0EgKHRyYWMtMTQ5MDEpXG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwicmFkaW9cIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwiY2hlY2tlZFwiLCBcImNoZWNrZWRcIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcInRcIiApO1xuXG5cdGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIG9ubHlcblx0Ly8gT2xkZXIgV2ViS2l0IGRvZXNuJ3QgY2xvbmUgY2hlY2tlZCBzdGF0ZSBjb3JyZWN0bHkgaW4gZnJhZ21lbnRzXG5cdHN1cHBvcnQuY2hlY2tDbG9uZSA9IGRpdi5jbG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gTWFrZSBzdXJlIHRleHRhcmVhIChhbmQgY2hlY2tib3gpIGRlZmF1bHRWYWx1ZSBpcyBwcm9wZXJseSBjbG9uZWRcblx0ZGl2LmlubmVySFRNTCA9IFwiPHRleHRhcmVhPng8L3RleHRhcmVhPlwiO1xuXHRzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gISFkaXYuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHQvLyBJRSA8PTkgcmVwbGFjZXMgPG9wdGlvbj4gdGFncyB3aXRoIHRoZWlyIGNvbnRlbnRzIHdoZW4gaW5zZXJ0ZWQgb3V0c2lkZSBvZlxuXHQvLyB0aGUgc2VsZWN0IGVsZW1lbnQuXG5cdGRpdi5pbm5lckhUTUwgPSBcIjxvcHRpb24+PC9vcHRpb24+XCI7XG5cdHN1cHBvcnQub3B0aW9uID0gISFkaXYubGFzdENoaWxkO1xufSApKCk7XG5cblxuLy8gV2UgaGF2ZSB0byBjbG9zZSB0aGVzZSB0YWdzIHRvIHN1cHBvcnQgWEhUTUwgKHRyYWMtMTMyMDApXG52YXIgd3JhcE1hcCA9IHtcblxuXHQvLyBYSFRNTCBwYXJzZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZVxuXHQvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBhcnNlcnMgZG8uIFNvIHdlIGNhbm5vdCBzaG9ydGVuXG5cdC8vIHRoaXMgYnkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1aXJlZCBlbGVtZW50cy5cblx0dGhlYWQ6IFsgMSwgXCI8dGFibGU+XCIsIFwiPC90YWJsZT5cIiBdLFxuXHRjb2w6IFsgMiwgXCI8dGFibGU+PGNvbGdyb3VwPlwiLCBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIiBdLFxuXHR0cjogWyAyLCBcIjx0YWJsZT48dGJvZHk+XCIsIFwiPC90Ym9keT48L3RhYmxlPlwiIF0sXG5cdHRkOiBbIDMsIFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsIFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCIgXSxcblxuXHRfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cbn07XG5cbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbmlmICggIXN1cHBvcnQub3B0aW9uICkge1xuXHR3cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb24gPSBbIDEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiIF07XG59XG5cblxuZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBVc2UgdHlwZW9mIHRvIGF2b2lkIHplcm8tYXJndW1lbnQgbWV0aG9kIGludm9jYXRpb24gb24gaG9zdCBvYmplY3RzICh0cmFjLTE1MTUxKVxuXHR2YXIgcmV0O1xuXG5cdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIGlmICggdHlwZW9mIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSB7XG5cdFx0cmV0ID0gW107XG5cdH1cblxuXHRpZiAoIHRhZyA9PT0gdW5kZWZpbmVkIHx8IHRhZyAmJiBub2RlTmFtZSggY29udGV4dCwgdGFnICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5tZXJnZSggWyBjb250ZXh0IF0sIHJldCApO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn1cblxuXG4vLyBNYXJrIHNjcmlwdHMgYXMgaGF2aW5nIGFscmVhZHkgYmVlbiBldmFsdWF0ZWRcbmZ1bmN0aW9uIHNldEdsb2JhbEV2YWwoIGVsZW1zLCByZWZFbGVtZW50cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGRhdGFQcml2LnNldChcblx0XHRcdGVsZW1zWyBpIF0sXG5cdFx0XHRcImdsb2JhbEV2YWxcIixcblx0XHRcdCFyZWZFbGVtZW50cyB8fCBkYXRhUHJpdi5nZXQoIHJlZkVsZW1lbnRzWyBpIF0sIFwiZ2xvYmFsRXZhbFwiIClcblx0XHQpO1xuXHR9XG59XG5cblxudmFyIHJodG1sID0gLzx8JiM/XFx3KzsvO1xuXG5mdW5jdGlvbiBidWlsZEZyYWdtZW50KCBlbGVtcywgY29udGV4dCwgc2NyaXB0cywgc2VsZWN0aW9uLCBpZ25vcmVkICkge1xuXHR2YXIgZWxlbSwgdG1wLCB0YWcsIHdyYXAsIGF0dGFjaGVkLCBqLFxuXHRcdGZyYWdtZW50ID0gY29udGV4dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0bm9kZXMgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRlbGVtID0gZWxlbXNbIGkgXTtcblxuXHRcdGlmICggZWxlbSB8fCBlbGVtID09PSAwICkge1xuXG5cdFx0XHQvLyBBZGQgbm9kZXMgZGlyZWN0bHlcblx0XHRcdGlmICggdG9UeXBlKCBlbGVtICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgZWxlbS5ub2RlVHlwZSA/IFsgZWxlbSBdIDogZWxlbSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGVcblx0XHRcdH0gZWxzZSBpZiAoICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7XG5cdFx0XHRcdG5vZGVzLnB1c2goIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIGVsZW0gKSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IGh0bWwgaW50byBET00gbm9kZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRtcCA9IHRtcCB8fCBmcmFnbWVudC5hcHBlbmRDaGlsZCggY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcblxuXHRcdFx0XHQvLyBEZXNlcmlhbGl6ZSBhIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uXG5cdFx0XHRcdHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR3cmFwID0gd3JhcE1hcFsgdGFnIF0gfHwgd3JhcE1hcC5fZGVmYXVsdDtcblx0XHRcdFx0dG1wLmlubmVySFRNTCA9IHdyYXBbIDEgXSArIGpRdWVyeS5odG1sUHJlZmlsdGVyKCBlbGVtICkgKyB3cmFwWyAyIF07XG5cblx0XHRcdFx0Ly8gRGVzY2VuZCB0aHJvdWdoIHdyYXBwZXJzIHRvIHRoZSByaWdodCBjb250ZW50XG5cdFx0XHRcdGogPSB3cmFwWyAwIF07XG5cdFx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRcdHRtcCA9IHRtcC5sYXN0Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCB0bXAuY2hpbGROb2RlcyApO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyXG5cdFx0XHRcdHRtcCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIHRoZSBjcmVhdGVkIG5vZGVzIGFyZSBvcnBoYW5lZCAodHJhYy0xMjM5Milcblx0XHRcdFx0dG1wLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGZyYWdtZW50XG5cdGZyYWdtZW50LnRleHRDb250ZW50ID0gXCJcIjtcblxuXHRpID0gMDtcblx0d2hpbGUgKCAoIGVsZW0gPSBub2Rlc1sgaSsrIF0gKSApIHtcblxuXHRcdC8vIFNraXAgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpXG5cdFx0aWYgKCBzZWxlY3Rpb24gJiYgalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApID4gLTEgKSB7XG5cdFx0XHRpZiAoIGlnbm9yZWQgKSB7XG5cdFx0XHRcdGlnbm9yZWQucHVzaCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0YXR0YWNoZWQgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBBcHBlbmQgdG8gZnJhZ21lbnRcblx0XHR0bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksIFwic2NyaXB0XCIgKTtcblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRpZiAoIGF0dGFjaGVkICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggdG1wICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FwdHVyZSBleGVjdXRhYmxlc1xuXHRcdGlmICggc2NyaXB0cyApIHtcblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0bXBbIGorKyBdICkgKSB7XG5cdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0XHRzY3JpcHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmcmFnbWVudDtcbn1cblxuXG52YXIgcnR5cGVuYW1lc3BhY2UgPSAvXihbXi5dKikoPzpcXC4oLispfCkvO1xuXG5mdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7XG5cdHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gb24oIGVsZW0sIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIG9uZSApIHtcblx0dmFyIG9yaWdGbiwgdHlwZTtcblxuXHQvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnNcblx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKVxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApXG5cdFx0XHRkYXRhID0gZGF0YSB8fCBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0b24oIGVsZW0sIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkge1xuXG5cdFx0Ly8gKCB0eXBlcywgZm4gKVxuXHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0ZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkge1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBkYXRhLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0fSBlbHNlIGlmICggIWZuICkge1xuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBvbmUgPT09IDEgKSB7XG5cdFx0b3JpZ0ZuID0gZm47XG5cdFx0Zm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mb1xuXHRcdFx0alF1ZXJ5KCkub2ZmKCBldmVudCApO1xuXHRcdFx0cmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fTtcblxuXHRcdC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3JpZ0ZuXG5cdFx0Zm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7XG5cdH1cblx0cmV0dXJuIGVsZW0uZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0alF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciApO1xuXHR9ICk7XG59XG5cbi8qXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG4gKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLlxuICovXG5qUXVlcnkuZXZlbnQgPSB7XG5cblx0Z2xvYmFsOiB7fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7XG5cblx0XHR2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHQvLyBPbmx5IGF0dGFjaCBldmVudHMgdG8gb2JqZWN0cyB0aGF0IGFjY2VwdCBkYXRhXG5cdFx0aWYgKCAhYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlclxuXHRcdGlmICggaGFuZGxlci5oYW5kbGVyICkge1xuXHRcdFx0aGFuZGxlT2JqSW4gPSBoYW5kbGVyO1xuXHRcdFx0aGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7XG5cdFx0XHRzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yO1xuXHRcdH1cblxuXHRcdC8vIEVuc3VyZSB0aGF0IGludmFsaWQgc2VsZWN0b3JzIHRocm93IGV4Y2VwdGlvbnMgYXQgYXR0YWNoIHRpbWVcblx0XHQvLyBFdmFsdWF0ZSBhZ2FpbnN0IGRvY3VtZW50RWxlbWVudCBpbiBjYXNlIGVsZW0gaXMgYSBub24tZWxlbWVudCBub2RlIChlLmcuLCBkb2N1bWVudClcblx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBkb2N1bWVudEVsZW1lbnQsIHNlbGVjdG9yICk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyXG5cdFx0aWYgKCAhaGFuZGxlci5ndWlkICkge1xuXHRcdFx0aGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKztcblx0XHR9XG5cblx0XHQvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XG5cdFx0aWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IE9iamVjdC5jcmVhdGUoIG51bGwgKTtcblx0XHR9XG5cdFx0aWYgKCAhKCBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSApICkge1xuXHRcdFx0ZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHtcblxuXHRcdFx0XHQvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZFxuXHRcdFx0XHQvLyB3aGVuIGFuIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSA/XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZVxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBUaGVyZSAqbXVzdCogYmUgYSB0eXBlLCBubyBhdHRhY2hpbmcgbmFtZXNwYWNlLW9ubHkgaGFuZGxlcnNcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjaGFuZ2VkIHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBJZiBzZWxlY3RvciBkZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5cGVcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblxuXHRcdFx0Ly8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVzZXQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIGhhbmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzXG5cdFx0XHRoYW5kbGVPYmogPSBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdG9yaWdUeXBlOiBvcmlnVHlwZSxcblx0XHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdFx0aGFuZGxlcjogaGFuZGxlcixcblx0XHRcdFx0Z3VpZDogaGFuZGxlci5ndWlkLFxuXHRcdFx0XHRzZWxlY3Rvcjogc2VsZWN0b3IsXG5cdFx0XHRcdG5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYgalF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksXG5cdFx0XHRcdG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApXG5cdFx0XHR9LCBoYW5kbGVPYmpJbiApO1xuXG5cdFx0XHQvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdFxuXHRcdFx0aWYgKCAhKCBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdICkgKSB7XG5cdFx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTtcblx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7XG5cblx0XHRcdFx0Ly8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lciBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlXG5cdFx0XHRcdGlmICggIXNwZWNpYWwuc2V0dXAgfHxcblx0XHRcdFx0XHRzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggc3BlY2lhbC5hZGQgKSB7XG5cdFx0XHRcdHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXG5cdFx0XHRcdGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9udFxuXHRcdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb25cblx0XHRcdGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7XG5cdFx0fVxuXG5cdH0sXG5cblx0Ly8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50XG5cdHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7XG5cblx0XHR2YXIgaiwgb3JpZ0NvdW50LCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuaGFzRGF0YSggZWxlbSApICYmIGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0aWYgKCAhZWxlbURhdGEgfHwgISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZFxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhpcyBuYW1lc3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnRcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBlc1sgdCBdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107XG5cdFx0XHR0bXAgPSB0bXBbIDIgXSAmJlxuXHRcdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKTtcblxuXHRcdFx0Ly8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50c1xuXHRcdFx0b3JpZ0NvdW50ID0gaiA9IGhhbmRsZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaiBdO1xuXG5cdFx0XHRcdGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiZcblx0XHRcdFx0XHQoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJlxuXHRcdFx0XHRcdCggIXRtcCB8fCB0bXAudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiZcblx0XHRcdFx0XHQoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8XG5cdFx0XHRcdFx0XHRzZWxlY3RvciA9PT0gXCIqKlwiICYmIGhhbmRsZU9iai5zZWxlY3RvciApICkge1xuXHRcdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaiwgMSApO1xuXG5cdFx0XHRcdFx0aWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc3BlY2lhbC5yZW1vdmUgKSB7XG5cdFx0XHRcdFx0XHRzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdFxuXHRcdFx0Ly8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpXG5cdFx0XHRpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGVsZXRlIGV2ZW50c1sgdHlwZSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSBkYXRhIGFuZCB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkXG5cdFx0aWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cdFx0fVxuXHR9LFxuXG5cdGRpc3BhdGNoOiBmdW5jdGlvbiggbmF0aXZlRXZlbnQgKSB7XG5cblx0XHR2YXIgaSwgaiwgcmV0LCBtYXRjaGVkLCBoYW5kbGVPYmosIGhhbmRsZXJRdWV1ZSxcblx0XHRcdGFyZ3MgPSBuZXcgQXJyYXkoIGFyZ3VtZW50cy5sZW5ndGggKSxcblxuXHRcdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0XHRldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICksXG5cblx0XHRcdGhhbmRsZXJzID0gKFxuXHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsIClcblx0XHRcdClbIGV2ZW50LnR5cGUgXSB8fCBbXSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9O1xuXG5cdFx0Ly8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnRcblx0XHRhcmdzWyAwIF0gPSBldmVudDtcblxuXHRcdGZvciAoIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0YXJnc1sgaSBdID0gYXJndW1lbnRzWyBpIF07XG5cdFx0fVxuXG5cdFx0ZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzO1xuXG5cdFx0Ly8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZFxuXHRcdGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBoYW5kbGVyc1xuXHRcdGhhbmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKCB0aGlzLCBldmVudCwgaGFuZGxlcnMgKTtcblxuXHRcdC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtO1xuXG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSApICYmXG5cdFx0XHRcdCFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZSBldmVudCBpcyBuYW1lc3BhY2VkLCB0aGVuIGVhY2ggaGFuZGxlciBpcyBvbmx5IGludm9rZWQgaWYgaXQgaXNcblx0XHRcdFx0Ly8gc3BlY2lhbGx5IHVuaXZlcnNhbCBvciBpdHMgbmFtZXNwYWNlcyBhcmUgYSBzdXBlcnNldCBvZiB0aGUgZXZlbnQncy5cblx0XHRcdFx0aWYgKCAhZXZlbnQucm5hbWVzcGFjZSB8fCBoYW5kbGVPYmoubmFtZXNwYWNlID09PSBmYWxzZSB8fFxuXHRcdFx0XHRcdGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkge1xuXG5cdFx0XHRcdFx0ZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqO1xuXHRcdFx0XHRcdGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTtcblxuXHRcdFx0XHRcdHJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHxcblx0XHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApO1xuXG5cdFx0XHRcdFx0aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdGlmICggKCBldmVudC5yZXN1bHQgPSByZXQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGVcblx0XHRpZiAoIHNwZWNpYWwucG9zdERpc3BhdGNoICkge1xuXHRcdFx0c3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdGhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIGhhbmRsZXJzICkge1xuXHRcdHZhciBpLCBoYW5kbGVPYmosIHNlbCwgbWF0Y2hlZEhhbmRsZXJzLCBtYXRjaGVkU2VsZWN0b3JzLFxuXHRcdFx0aGFuZGxlclF1ZXVlID0gW10sXG5cdFx0XHRkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCxcblx0XHRcdGN1ciA9IGV2ZW50LnRhcmdldDtcblxuXHRcdC8vIEZpbmQgZGVsZWdhdGUgaGFuZGxlcnNcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05XG5cdFx0XHQvLyBCbGFjay1ob2xlIFNWRyA8dXNlPiBpbnN0YW5jZSB0cmVlcyAodHJhYy0xMzE4MClcblx0XHRcdGN1ci5ub2RlVHlwZSAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDJcblx0XHRcdC8vIFN1cHByZXNzIHNwZWMtdmlvbGF0aW5nIGNsaWNrcyBpbmRpY2F0aW5nIGEgbm9uLXByaW1hcnkgcG9pbnRlciBidXR0b24gKHRyYWMtMzg2MSlcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50LXR5cGUtY2xpY2tcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdC8vIC4uLmJ1dCBub3QgYXJyb3cga2V5IFwiY2xpY2tzXCIgb2YgcmFkaW8gaW5wdXRzLCB3aGljaCBjYW4gaGF2ZSBgYnV0dG9uYCAtMSAoZ2gtMjM0Mylcblx0XHRcdCEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBldmVudC5idXR0b24gPj0gMSApICkge1xuXG5cdFx0XHRmb3IgKCA7IGN1ciAhPT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgdGhpcyApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKHRyYWMtMTMyMDgpXG5cdFx0XHRcdC8vIERvbid0IHByb2Nlc3MgY2xpY2tzIG9uIGRpc2FibGVkIGVsZW1lbnRzICh0cmFjLTY5MTEsIHRyYWMtODE2NSwgdHJhYy0xMTM4MiwgdHJhYy0xMTc2NClcblx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGN1ci5kaXNhYmxlZCA9PT0gdHJ1ZSApICkge1xuXHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycyA9IFtdO1xuXHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnMgPSB7fTtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkrKyApIHtcblx0XHRcdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IGNvbmZsaWN0IHdpdGggT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzICh0cmFjLTEzMjAzKVxuXHRcdFx0XHRcdFx0c2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgXCIgXCI7XG5cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID9cblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+IC0xIDpcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRIYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVkSGFuZGxlcnMgfSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnNcblx0XHRjdXIgPSB0aGlzO1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCA8IGhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBoYW5kbGVyUXVldWU7XG5cdH0sXG5cblx0YWRkUHJvcDogZnVuY3Rpb24oIG5hbWUsIGhvb2sgKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBqUXVlcnkuRXZlbnQucHJvdG90eXBlLCBuYW1lLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXG5cdFx0XHRnZXQ6IGlzRnVuY3Rpb24oIGhvb2sgKSA/XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGhvb2soIHRoaXMub3JpZ2luYWxFdmVudCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFsgbmFtZSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0c2V0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgbmFtZSwge1xuXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGZpeDogZnVuY3Rpb24oIG9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0cmV0dXJuIG9yaWdpbmFsRXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0b3JpZ2luYWxFdmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7XG5cdH0sXG5cblx0c3BlY2lhbDoge1xuXHRcdGxvYWQ6IHtcblxuXHRcdFx0Ly8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZFxuXHRcdFx0bm9CdWJibGU6IHRydWVcblx0XHR9LFxuXHRcdGNsaWNrOiB7XG5cblx0XHRcdC8vIFV0aWxpemUgbmF0aXZlIGV2ZW50IHRvIGVuc3VyZSBjb3JyZWN0IHN0YXRlIGZvciBjaGVja2FibGUgaW5wdXRzXG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oIGRhdGEgKSB7XG5cblx0XHRcdFx0Ly8gRm9yIG11dHVhbCBjb21wcmVzc2liaWxpdHkgd2l0aCBfZGVmYXVsdCwgcmVwbGFjZSBgdGhpc2AgYWNjZXNzIHdpdGggYSBsb2NhbCB2YXIuXG5cdFx0XHRcdC8vIGB8fCBkYXRhYCBpcyBkZWFkIGNvZGUgbWVhbnQgb25seSB0byBwcmVzZXJ2ZSB0aGUgdmFyaWFibGUgdGhyb3VnaCBtaW5pZmljYXRpb24uXG5cdFx0XHRcdHZhciBlbCA9IHRoaXMgfHwgZGF0YTtcblxuXHRcdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHQvLyBkYXRhUHJpdi5zZXQoIGVsLCBcImNsaWNrXCIsIC4uLiApXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyaW5nIGEgY2xpY2tcblx0XHRcdFx0aWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbC50eXBlICkgJiZcblx0XHRcdFx0XHRlbC5jbGljayAmJiBub2RlTmFtZSggZWwsIFwiaW5wdXRcIiApICkge1xuXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBub24tZmFsc2UgdG8gYWxsb3cgbm9ybWFsIGV2ZW50LXBhdGggcHJvcGFnYXRpb25cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBGb3IgY3Jvc3MtYnJvd3NlciBjb25zaXN0ZW5jeSwgc3VwcHJlc3MgbmF0aXZlIC5jbGljaygpIG9uIGxpbmtzXG5cdFx0XHQvLyBBbHNvIHByZXZlbnQgaXQgaWYgd2UncmUgY3VycmVudGx5IGluc2lkZSBhIGxldmVyYWdlZCBuYXRpdmUtZXZlbnQgc3RhY2tcblx0XHRcdF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRcdHJldHVybiByY2hlY2thYmxlVHlwZS50ZXN0KCB0YXJnZXQudHlwZSApICYmXG5cdFx0XHRcdFx0dGFyZ2V0LmNsaWNrICYmIG5vZGVOYW1lKCB0YXJnZXQsIFwiaW5wdXRcIiApICYmXG5cdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0YXJnZXQsIFwiY2xpY2tcIiApIHx8XG5cdFx0XHRcdFx0bm9kZU5hbWUoIHRhcmdldCwgXCJhXCIgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0YmVmb3JldW5sb2FkOiB7XG5cdFx0XHRwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDIwK1xuXHRcdFx0XHQvLyBGaXJlZm94IGRvZXNuJ3QgYWxlcnQgaWYgdGhlIHJldHVyblZhbHVlIGZpZWxkIGlzIG5vdCBzZXQuXG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZXZlbnQucmVzdWx0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBFbnN1cmUgdGhlIHByZXNlbmNlIG9mIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgaGFuZGxlcyBtYW51YWxseS10cmlnZ2VyZWRcbi8vIHN5bnRoZXRpYyBldmVudHMgYnkgaW50ZXJydXB0aW5nIHByb2dyZXNzIHVudGlsIHJlaW52b2tlZCBpbiByZXNwb25zZSB0b1xuLy8gKm5hdGl2ZSogZXZlbnRzIHRoYXQgaXQgZmlyZXMgZGlyZWN0bHksIGVuc3VyaW5nIHRoYXQgc3RhdGUgY2hhbmdlcyBoYXZlXG4vLyBhbHJlYWR5IG9jY3VycmVkIGJlZm9yZSBvdGhlciBsaXN0ZW5lcnMgYXJlIGludm9rZWQuXG5mdW5jdGlvbiBsZXZlcmFnZU5hdGl2ZSggZWwsIHR5cGUsIGlzU2V0dXAgKSB7XG5cblx0Ly8gTWlzc2luZyBgaXNTZXR1cGAgaW5kaWNhdGVzIGEgdHJpZ2dlciBjYWxsLCB3aGljaCBtdXN0IGZvcmNlIHNldHVwIHRocm91Z2ggalF1ZXJ5LmV2ZW50LmFkZFxuXHRpZiAoICFpc1NldHVwICkge1xuXHRcdGlmICggZGF0YVByaXYuZ2V0KCBlbCwgdHlwZSApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwgcmV0dXJuVHJ1ZSApO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZWdpc3RlciB0aGUgY29udHJvbGxlciBhcyBhIHNwZWNpYWwgdW5pdmVyc2FsIGhhbmRsZXIgZm9yIGFsbCBldmVudCBuYW1lc3BhY2VzXG5cdGRhdGFQcml2LnNldCggZWwsIHR5cGUsIGZhbHNlICk7XG5cdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCB7XG5cdFx0bmFtZXNwYWNlOiBmYWxzZSxcblx0XHRoYW5kbGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgcmVzdWx0LFxuXHRcdFx0XHRzYXZlZCA9IGRhdGFQcml2LmdldCggdGhpcywgdHlwZSApO1xuXG5cdFx0XHRpZiAoICggZXZlbnQuaXNUcmlnZ2VyICYgMSApICYmIHRoaXNbIHR5cGUgXSApIHtcblxuXHRcdFx0XHQvLyBJbnRlcnJ1cHQgcHJvY2Vzc2luZyBvZiB0aGUgb3V0ZXIgc3ludGhldGljIC50cmlnZ2VyKCllZCBldmVudFxuXHRcdFx0XHRpZiAoICFzYXZlZCApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGFyZ3VtZW50cyBmb3IgdXNlIHdoZW4gaGFuZGxpbmcgdGhlIGlubmVyIG5hdGl2ZSBldmVudFxuXHRcdFx0XHRcdC8vIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAoYW4gZXZlbnQgb2JqZWN0KSwgc28gdGhpcyBhcnJheVxuXHRcdFx0XHRcdC8vIHdpbGwgbm90IGJlIGNvbmZ1c2VkIHdpdGggYSBsZWZ0b3ZlciBjYXB0dXJlIG9iamVjdC5cblx0XHRcdFx0XHRzYXZlZCA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgc2F2ZWQgKTtcblxuXHRcdFx0XHRcdC8vIFRyaWdnZXIgdGhlIG5hdGl2ZSBldmVudCBhbmQgY2FwdHVyZSBpdHMgcmVzdWx0XG5cdFx0XHRcdFx0dGhpc1sgdHlwZSBdKCk7XG5cdFx0XHRcdFx0cmVzdWx0ID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBmYWxzZSApO1xuXG5cdFx0XHRcdFx0aWYgKCBzYXZlZCAhPT0gcmVzdWx0ICkge1xuXG5cdFx0XHRcdFx0XHQvLyBDYW5jZWwgdGhlIG91dGVyIHN5bnRoZXRpYyBldmVudFxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGlzIGlzIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCBmb3IgYW4gZXZlbnQgd2l0aCBhIGJ1YmJsaW5nIHN1cnJvZ2F0ZVxuXHRcdFx0XHQvLyAoZm9jdXMgb3IgYmx1ciksIGFzc3VtZSB0aGF0IHRoZSBzdXJyb2dhdGUgYWxyZWFkeSBwcm9wYWdhdGVkIGZyb20gdHJpZ2dlcmluZ1xuXHRcdFx0XHQvLyB0aGUgbmF0aXZlIGV2ZW50IGFuZCBwcmV2ZW50IHRoYXQgZnJvbSBoYXBwZW5pbmcgYWdhaW4gaGVyZS5cblx0XHRcdFx0Ly8gVGhpcyB0ZWNobmljYWxseSBnZXRzIHRoZSBvcmRlcmluZyB3cm9uZyB3LnIudC4gdG8gYC50cmlnZ2VyKClgIChpbiB3aGljaCB0aGVcblx0XHRcdFx0Ly8gYnViYmxpbmcgc3Vycm9nYXRlIHByb3BhZ2F0ZXMgKmFmdGVyKiB0aGUgbm9uLWJ1YmJsaW5nIGJhc2UpLCBidXQgdGhhdCBzZWVtc1xuXHRcdFx0XHQvLyBsZXNzIGJhZCB0aGFuIGR1cGxpY2F0aW9uLlxuXHRcdFx0XHR9IGVsc2UgaWYgKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge30gKS5kZWxlZ2F0ZVR5cGUgKSB7XG5cdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIG5hdGl2ZSBldmVudCB0cmlnZ2VyZWQgYWJvdmUsIGV2ZXJ5dGhpbmcgaXMgbm93IGluIG9yZGVyXG5cdFx0XHQvLyBGaXJlIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCB3aXRoIHRoZSBvcmlnaW5hbCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIHNhdmVkICkge1xuXG5cdFx0XHRcdC8vIC4uLmFuZCBjYXB0dXJlIHRoZSByZXN1bHRcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBqUXVlcnkuZXZlbnQudHJpZ2dlcihcblx0XHRcdFx0XHRzYXZlZFsgMCBdLFxuXHRcdFx0XHRcdHNhdmVkLnNsaWNlKCAxICksXG5cdFx0XHRcdFx0dGhpc1xuXHRcdFx0XHQpICk7XG5cblx0XHRcdFx0Ly8gQWJvcnQgaGFuZGxpbmcgb2YgdGhlIG5hdGl2ZSBldmVudCBieSBhbGwgalF1ZXJ5IGhhbmRsZXJzIHdoaWxlIGFsbG93aW5nXG5cdFx0XHRcdC8vIG5hdGl2ZSBoYW5kbGVycyBvbiB0aGUgc2FtZSBlbGVtZW50IHRvIHJ1bi4gT24gdGFyZ2V0LCB0aGlzIGlzIGFjaGlldmVkXG5cdFx0XHRcdC8vIGJ5IHN0b3BwaW5nIGltbWVkaWF0ZSBwcm9wYWdhdGlvbiBqdXN0IG9uIHRoZSBqUXVlcnkgZXZlbnQuIEhvd2V2ZXIsXG5cdFx0XHRcdC8vIHRoZSBuYXRpdmUgZXZlbnQgaXMgcmUtd3JhcHBlZCBieSBhIGpRdWVyeSBvbmUgb24gZWFjaCBsZXZlbCBvZiB0aGVcblx0XHRcdFx0Ly8gcHJvcGFnYXRpb24gc28gdGhlIG9ubHkgd2F5IHRvIHN0b3AgaXQgZm9yIGpRdWVyeSBpcyB0byBzdG9wIGl0IGZvclxuXHRcdFx0XHQvLyBldmVyeW9uZSB2aWEgbmF0aXZlIGBzdG9wUHJvcGFnYXRpb24oKWAuIFRoaXMgaXMgbm90IGEgcHJvYmxlbSBmb3Jcblx0XHRcdFx0Ly8gZm9jdXMvYmx1ciB3aGljaCBkb24ndCBidWJibGUsIGJ1dCBpdCBkb2VzIGFsc28gc3RvcCBjbGljayBvbiBjaGVja2JveGVzXG5cdFx0XHRcdC8vIGFuZCByYWRpb3MuIFdlIGFjY2VwdCB0aGlzIGxpbWl0YXRpb24uXG5cdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmpRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7XG5cblx0Ly8gVGhpcyBcImlmXCIgaXMgbmVlZGVkIGZvciBwbGFpbiBvYmplY3RzXG5cdGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkge1xuXHRcdGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7XG5cdH1cbn07XG5cbmpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkge1xuXG5cdC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZFxuXHRpZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQgKSApIHtcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gRXZlbnQgb2JqZWN0XG5cdGlmICggc3JjICYmIHNyYy50eXBlICkge1xuXHRcdHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYztcblx0XHR0aGlzLnR5cGUgPSBzcmMudHlwZTtcblxuXHRcdC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkXG5cdFx0Ly8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fFxuXHRcdFx0XHRzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5XG5cdFx0XHRcdHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0cmV0dXJuVHJ1ZSA6XG5cdFx0XHRyZXR1cm5GYWxzZTtcblxuXHRcdC8vIENyZWF0ZSB0YXJnZXQgcHJvcGVydGllc1xuXHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA8PTYgLSA3IG9ubHlcblx0XHQvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAodHJhYy01MDQsIHRyYWMtMTMxNDMpXG5cdFx0dGhpcy50YXJnZXQgPSAoIHNyYy50YXJnZXQgJiYgc3JjLnRhcmdldC5ub2RlVHlwZSA9PT0gMyApID9cblx0XHRcdHNyYy50YXJnZXQucGFyZW50Tm9kZSA6XG5cdFx0XHRzcmMudGFyZ2V0O1xuXG5cdFx0dGhpcy5jdXJyZW50VGFyZ2V0ID0gc3JjLmN1cnJlbnRUYXJnZXQ7XG5cdFx0dGhpcy5yZWxhdGVkVGFyZ2V0ID0gc3JjLnJlbGF0ZWRUYXJnZXQ7XG5cblx0Ly8gRXZlbnQgdHlwZVxuXHR9IGVsc2Uge1xuXHRcdHRoaXMudHlwZSA9IHNyYztcblx0fVxuXG5cdC8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0XG5cdGlmICggcHJvcHMgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdGhpcywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUgb25lXG5cdHRoaXMudGltZVN0YW1wID0gc3JjICYmIHNyYy50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcblxuXHQvLyBNYXJrIGl0IGFzIGZpeGVkXG5cdHRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlO1xufTtcblxuLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFzIHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sXG5qUXVlcnkuRXZlbnQucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LkV2ZW50LFxuXHRpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLFxuXHRpc1Byb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNTaW11bGF0ZWQ6IGZhbHNlLFxuXG5cdHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH1cbn07XG5cbi8vIEluY2x1ZGVzIGFsbCBjb21tb24gZXZlbnQgcHJvcHMgaW5jbHVkaW5nIEtleUV2ZW50IGFuZCBNb3VzZUV2ZW50IHNwZWNpZmljIHByb3BzXG5qUXVlcnkuZWFjaCgge1xuXHRhbHRLZXk6IHRydWUsXG5cdGJ1YmJsZXM6IHRydWUsXG5cdGNhbmNlbGFibGU6IHRydWUsXG5cdGNoYW5nZWRUb3VjaGVzOiB0cnVlLFxuXHRjdHJsS2V5OiB0cnVlLFxuXHRkZXRhaWw6IHRydWUsXG5cdGV2ZW50UGhhc2U6IHRydWUsXG5cdG1ldGFLZXk6IHRydWUsXG5cdHBhZ2VYOiB0cnVlLFxuXHRwYWdlWTogdHJ1ZSxcblx0c2hpZnRLZXk6IHRydWUsXG5cdHZpZXc6IHRydWUsXG5cdFwiY2hhclwiOiB0cnVlLFxuXHRjb2RlOiB0cnVlLFxuXHRjaGFyQ29kZTogdHJ1ZSxcblx0a2V5OiB0cnVlLFxuXHRrZXlDb2RlOiB0cnVlLFxuXHRidXR0b246IHRydWUsXG5cdGJ1dHRvbnM6IHRydWUsXG5cdGNsaWVudFg6IHRydWUsXG5cdGNsaWVudFk6IHRydWUsXG5cdG9mZnNldFg6IHRydWUsXG5cdG9mZnNldFk6IHRydWUsXG5cdHBvaW50ZXJJZDogdHJ1ZSxcblx0cG9pbnRlclR5cGU6IHRydWUsXG5cdHNjcmVlblg6IHRydWUsXG5cdHNjcmVlblk6IHRydWUsXG5cdHRhcmdldFRvdWNoZXM6IHRydWUsXG5cdHRvRWxlbWVudDogdHJ1ZSxcblx0dG91Y2hlczogdHJ1ZSxcblx0d2hpY2g6IHRydWVcbn0sIGpRdWVyeS5ldmVudC5hZGRQcm9wICk7XG5cbmpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCB0eXBlLCBkZWxlZ2F0ZVR5cGUgKSB7XG5cblx0ZnVuY3Rpb24gZm9jdXNNYXBwZWRIYW5kbGVyKCBuYXRpdmVFdmVudCApIHtcblx0XHRpZiAoIGRvY3VtZW50LmRvY3VtZW50TW9kZSApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErXG5cdFx0XHQvLyBBdHRhY2ggYSBzaW5nbGUgZm9jdXNpbi9mb2N1c291dCBoYW5kbGVyIG9uIHRoZSBkb2N1bWVudCB3aGlsZSBzb21lb25lIHdhbnRzXG5cdFx0XHQvLyBmb2N1cy9ibHVyLiBUaGlzIGlzIGJlY2F1c2UgdGhlIGZvcm1lciBhcmUgc3luY2hyb25vdXMgaW4gSUUgd2hpbGUgdGhlIGxhdHRlclxuXHRcdFx0Ly8gYXJlIGFzeW5jLiBJbiBvdGhlciBicm93c2VycywgYWxsIHRob3NlIGhhbmRsZXJzIGFyZSBpbnZva2VkIHN5bmNocm9ub3VzbHkuXG5cblx0XHRcdC8vIGBoYW5kbGVgIGZyb20gcHJpdmF0ZSBkYXRhIHdvdWxkIGFscmVhZHkgd3JhcCB0aGUgZXZlbnQsIGJ1dCB3ZSBuZWVkXG5cdFx0XHQvLyB0byBjaGFuZ2UgdGhlIGB0eXBlYCBoZXJlLlxuXHRcdFx0dmFyIGhhbmRsZSA9IGRhdGFQcml2LmdldCggdGhpcywgXCJoYW5kbGVcIiApLFxuXHRcdFx0XHRldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICk7XG5cdFx0XHRldmVudC50eXBlID0gbmF0aXZlRXZlbnQudHlwZSA9PT0gXCJmb2N1c2luXCIgPyBcImZvY3VzXCIgOiBcImJsdXJcIjtcblx0XHRcdGV2ZW50LmlzU2ltdWxhdGVkID0gdHJ1ZTtcblxuXHRcdFx0Ly8gRmlyc3QsIGhhbmRsZSBmb2N1c2luL2ZvY3Vzb3V0XG5cdFx0XHRoYW5kbGUoIG5hdGl2ZUV2ZW50ICk7XG5cblx0XHRcdC8vIC4uLnRoZW4sIGhhbmRsZSBmb2N1cy9ibHVyXG5cdFx0XHQvL1xuXHRcdFx0Ly8gZm9jdXMvYmx1ciBkb24ndCBidWJibGUgd2hpbGUgZm9jdXNpbi9mb2N1c291dCBkbzsgc2ltdWxhdGUgdGhlIGZvcm1lciBieSBvbmx5XG5cdFx0XHQvLyBpbnZva2luZyB0aGUgaGFuZGxlciBhdCB0aGUgbG93ZXIgbGV2ZWwuXG5cdFx0XHRpZiAoIGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCApIHtcblxuXHRcdFx0XHQvLyBUaGUgc2V0dXAgcGFydCBjYWxscyBgbGV2ZXJhZ2VOYXRpdmVgLCB3aGljaCwgaW4gdHVybiwgY2FsbHNcblx0XHRcdFx0Ly8gYGpRdWVyeS5ldmVudC5hZGRgLCBzbyBldmVudCBoYW5kbGUgd2lsbCBhbHJlYWR5IGhhdmUgYmVlbiBzZXRcblx0XHRcdFx0Ly8gYnkgdGhpcyBwb2ludC5cblx0XHRcdFx0aGFuZGxlKCBldmVudCApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEZvciBub24tSUUgYnJvd3NlcnMsIGF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnRcblx0XHRcdC8vIHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dC5cblx0XHRcdGpRdWVyeS5ldmVudC5zaW11bGF0ZSggZGVsZWdhdGVUeXBlLCBuYXRpdmVFdmVudC50YXJnZXQsXG5cdFx0XHRcdGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICkgKTtcblx0XHR9XG5cdH1cblxuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdID0ge1xuXG5cdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0XG5cdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHR2YXIgYXR0YWNoZXM7XG5cblx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiZm9jdXNcIiwgLi4uIClcblx0XHRcdC8vIGRhdGFQcml2LnNldCggdGhpcywgXCJibHVyXCIsIC4uLiApXG5cdFx0XHRsZXZlcmFnZU5hdGl2ZSggdGhpcywgdHlwZSwgdHJ1ZSApO1xuXG5cdFx0XHRpZiAoIGRvY3VtZW50LmRvY3VtZW50TW9kZSApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErXG5cdFx0XHRcdC8vIFdlIHVzZSB0aGUgc2FtZSBuYXRpdmUgaGFuZGxlciBmb3IgZm9jdXNpbiAmIGZvY3VzIChhbmQgZm9jdXNvdXQgJiBibHVyKVxuXHRcdFx0XHQvLyBzbyB3ZSBuZWVkIHRvIGNvb3JkaW5hdGUgc2V0dXAgJiB0ZWFyZG93biBwYXJ0cyBiZXR3ZWVuIHRob3NlIGV2ZW50cy5cblx0XHRcdFx0Ly8gVXNlIGBkZWxlZ2F0ZVR5cGVgIGFzIHRoZSBrZXkgYXMgYHR5cGVgIGlzIGFscmVhZHkgdXNlZCBieSBgbGV2ZXJhZ2VOYXRpdmVgLlxuXHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmdldCggdGhpcywgZGVsZWdhdGVUeXBlICk7XG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdHRoaXMuYWRkRXZlbnRMaXN0ZW5lciggZGVsZWdhdGVUeXBlLCBmb2N1c01hcHBlZEhhbmRsZXIgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIGRlbGVnYXRlVHlwZSwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlclxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBhdHRhY2hlcztcblxuXHRcdFx0aWYgKCBkb2N1bWVudC5kb2N1bWVudE1vZGUgKSB7XG5cdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuZ2V0KCB0aGlzLCBkZWxlZ2F0ZVR5cGUgKSAtIDE7XG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lciggZGVsZWdhdGVUeXBlLCBmb2N1c01hcHBlZEhhbmRsZXIgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIHRoaXMsIGRlbGVnYXRlVHlwZSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgZGVsZWdhdGVUeXBlLCBhdHRhY2hlcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBpbmRpY2F0ZSBzdGFuZGFyZCB0ZWFyZG93biBzaG91bGQgYmUgYXBwbGllZFxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIFN1cHByZXNzIG5hdGl2ZSBmb2N1cyBvciBibHVyIGlmIHdlJ3JlIGN1cnJlbnRseSBpbnNpZGVcblx0XHQvLyBhIGxldmVyYWdlZCBuYXRpdmUtZXZlbnQgc3RhY2tcblx0XHRfZGVmYXVsdDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZXZlbnQudGFyZ2V0LCB0eXBlICk7XG5cdFx0fSxcblxuXHRcdGRlbGVnYXRlVHlwZTogZGVsZWdhdGVUeXBlXG5cdH07XG5cblx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTQ0XG5cdC8vIEZpcmVmb3ggZG9lc24ndCBoYXZlIGZvY3VzKGluIHwgb3V0KSBldmVudHNcblx0Ly8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc3ODdcblx0Ly9cblx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NDggLSA0OSwgU2FmYXJpIDw9OS4wIC0gOS4xXG5cdC8vIGZvY3VzKGluIHwgb3V0KSBldmVudHMgZmlyZSBhZnRlciBmb2N1cyAmIGJsdXIgZXZlbnRzLFxuXHQvLyB3aGljaCBpcyBzcGVjIHZpb2xhdGlvbiAtIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWZvY3VzZXZlbnQtZXZlbnQtb3JkZXJcblx0Ly8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDk4NTdcblx0Ly9cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExK1xuXHQvLyBUbyBwcmVzZXJ2ZSByZWxhdGl2ZSBmb2N1c2luL2ZvY3VzICYgZm9jdXNvdXQvYmx1ciBldmVudCBvcmRlciBndWFyYW50ZWVkIG9uIHRoZSAzLnggYnJhbmNoLFxuXHQvLyBhdHRhY2ggYSBzaW5nbGUgaGFuZGxlciBmb3IgYm90aCBldmVudHMgaW4gSUUuXG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBkZWxlZ2F0ZVR5cGUgXSA9IHtcblx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEhhbmRsZTogcmVndWxhciBub2RlcyAodmlhIGB0aGlzLm93bmVyRG9jdW1lbnRgKSwgd2luZG93XG5cdFx0XHQvLyAodmlhIGB0aGlzLmRvY3VtZW50YCkgJiBkb2N1bWVudCAodmlhIGB0aGlzYCkuXG5cdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMuZG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0ZGF0YUhvbGRlciA9IGRvY3VtZW50LmRvY3VtZW50TW9kZSA/IHRoaXMgOiBkb2MsXG5cdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuZ2V0KCBkYXRhSG9sZGVyLCBkZWxlZ2F0ZVR5cGUgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExK1xuXHRcdFx0Ly8gV2UgdXNlIHRoZSBzYW1lIG5hdGl2ZSBoYW5kbGVyIGZvciBmb2N1c2luICYgZm9jdXMgKGFuZCBmb2N1c291dCAmIGJsdXIpXG5cdFx0XHQvLyBzbyB3ZSBuZWVkIHRvIGNvb3JkaW5hdGUgc2V0dXAgJiB0ZWFyZG93biBwYXJ0cyBiZXR3ZWVuIHRob3NlIGV2ZW50cy5cblx0XHRcdC8vIFVzZSBgZGVsZWdhdGVUeXBlYCBhcyB0aGUga2V5IGFzIGB0eXBlYCBpcyBhbHJlYWR5IHVzZWQgYnkgYGxldmVyYWdlTmF0aXZlYC5cblx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRpZiAoIGRvY3VtZW50LmRvY3VtZW50TW9kZSApIHtcblx0XHRcdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIGRlbGVnYXRlVHlwZSwgZm9jdXNNYXBwZWRIYW5kbGVyICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZG9jLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGZvY3VzTWFwcGVkSGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRkYXRhUHJpdi5zZXQoIGRhdGFIb2xkZXIsIGRlbGVnYXRlVHlwZSwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7XG5cdFx0fSxcblx0XHR0ZWFyZG93bjogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMuZG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0ZGF0YUhvbGRlciA9IGRvY3VtZW50LmRvY3VtZW50TW9kZSA/IHRoaXMgOiBkb2MsXG5cdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuZ2V0KCBkYXRhSG9sZGVyLCBkZWxlZ2F0ZVR5cGUgKSAtIDE7XG5cblx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRpZiAoIGRvY3VtZW50LmRvY3VtZW50TW9kZSApIHtcblx0XHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoIGRlbGVnYXRlVHlwZSwgZm9jdXNNYXBwZWRIYW5kbGVyICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGZvY3VzTWFwcGVkSGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZGF0YUhvbGRlciwgZGVsZWdhdGVUeXBlICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIGRhdGFIb2xkZXIsIGRlbGVnYXRlVHlwZSwgYXR0YWNoZXMgKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG59ICk7XG5cbi8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrc1xuLy8gc28gdGhhdCBldmVudCBkZWxlZ2F0aW9uIHdvcmtzIGluIGpRdWVyeS5cbi8vIERvIHRoZSBzYW1lIGZvciBwb2ludGVyZW50ZXIvcG9pbnRlcmxlYXZlIGFuZCBwb2ludGVyb3Zlci9wb2ludGVyb3V0XG4vL1xuLy8gU3VwcG9ydDogU2FmYXJpIDcgb25seVxuLy8gU2FmYXJpIHNlbmRzIG1vdXNlZW50ZXIgdG9vIG9mdGVuOyBzZWU6XG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NzAyNThcbi8vIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZyAoaXQgZXhpc3RlZCBpbiBvbGRlciBDaHJvbWUgdmVyc2lvbnMgYXMgd2VsbCkuXG5qUXVlcnkuZWFjaCgge1xuXHRtb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLFxuXHRtb3VzZWxlYXZlOiBcIm1vdXNlb3V0XCIsXG5cdHBvaW50ZXJlbnRlcjogXCJwb2ludGVyb3ZlclwiLFxuXHRwb2ludGVybGVhdmU6IFwicG9pbnRlcm91dFwiXG59LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0ge1xuXHRcdGRlbGVnYXRlVHlwZTogZml4LFxuXHRcdGJpbmRUeXBlOiBmaXgsXG5cblx0XHRoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciByZXQsXG5cdFx0XHRcdHRhcmdldCA9IHRoaXMsXG5cdFx0XHRcdHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LFxuXHRcdFx0XHRoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7XG5cblx0XHRcdC8vIEZvciBtb3VzZWVudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuXG5cdFx0XHQvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvd1xuXHRcdFx0aWYgKCAhcmVsYXRlZCB8fCAoIHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSApICkge1xuXHRcdFx0XHRldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlO1xuXHRcdFx0XHRyZXQgPSBoYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBmaXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdG9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0b25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTtcblx0fSxcblx0b2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHtcblx0XHR2YXIgaGFuZGxlT2JqLCB0eXBlO1xuXHRcdGlmICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkge1xuXG5cdFx0XHQvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50XG5cdFx0XHRoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7XG5cdFx0XHRqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKFxuXHRcdFx0XHRoYW5kbGVPYmoubmFtZXNwYWNlID9cblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUgKyBcIi5cIiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOlxuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSxcblx0XHRcdFx0aGFuZGxlT2JqLnNlbGVjdG9yLFxuXHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlclxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdIClcblx0XHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRcdHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzIFssIGZuXSApXG5cdFx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxudmFyXG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExLCBFZGdlIDEyIC0gMTMgb25seVxuXHQvLyBJbiBJRS9FZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBzZXZlcmUgc2xvd2Rvd25zLlxuXHQvLyBTZWUgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy8xNzM2NTEyL1xuXHRybm9Jbm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxcblxuXHQvLyBjaGVja2VkPVwiY2hlY2tlZFwiIG9yIGNoZWNrZWRcblx0cmNoZWNrZWQgPSAvY2hlY2tlZFxccyooPzpbXj1dfD1cXHMqLmNoZWNrZWQuKS9pLFxuXG5cdHJjbGVhblNjcmlwdCA9IC9eXFxzKjwhXFxbQ0RBVEFcXFt8XFxdXFxdPlxccyokL2c7XG5cbi8vIFByZWZlciBhIHRib2R5IG92ZXIgaXRzIHBhcmVudCB0YWJsZSBmb3IgY29udGFpbmluZyBuZXcgcm93c1xuZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50ICkge1xuXHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRhYmxlXCIgKSAmJlxuXHRcdG5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsIFwidHJcIiApICkge1xuXG5cdFx0cmV0dXJuIGpRdWVyeSggZWxlbSApLmNoaWxkcmVuKCBcInRib2R5XCIgKVsgMCBdIHx8IGVsZW07XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuLy8gUmVwbGFjZS9yZXN0b3JlIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBzY3JpcHQgZWxlbWVudHMgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvblxuZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSApIHtcblx0ZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSAhPT0gbnVsbCApICsgXCIvXCIgKyBlbGVtLnR5cGU7XG5cdHJldHVybiBlbGVtO1xufVxuZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHtcblx0aWYgKCAoIGVsZW0udHlwZSB8fCBcIlwiICkuc2xpY2UoIDAsIDUgKSA9PT0gXCJ0cnVlL1wiICkge1xuXHRcdGVsZW0udHlwZSA9IGVsZW0udHlwZS5zbGljZSggNSApO1xuXHR9IGVsc2Uge1xuXHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBcInR5cGVcIiApO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBpLCBsLCB0eXBlLCBwZGF0YU9sZCwgdWRhdGFPbGQsIHVkYXRhQ3VyLCBldmVudHM7XG5cblx0aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuXG5cdGlmICggZGF0YVByaXYuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0cGRhdGFPbGQgPSBkYXRhUHJpdi5nZXQoIHNyYyApO1xuXHRcdGV2ZW50cyA9IHBkYXRhT2xkLmV2ZW50cztcblxuXHRcdGlmICggZXZlbnRzICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkZXN0LCBcImhhbmRsZSBldmVudHNcIiApO1xuXG5cdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gMi4gQ29weSB1c2VyIGRhdGFcblx0aWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHR1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2Vzcyggc3JjICk7XG5cdFx0dWRhdGFDdXIgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgdWRhdGFPbGQgKTtcblxuXHRcdGRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTtcblx0fVxufVxuXG4vLyBGaXggSUUgYnVncywgc2VlIHN1cHBvcnQgdGVzdHNcbmZ1bmN0aW9uIGZpeElucHV0KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHQvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi5cblx0aWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7XG5cdFx0ZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7XG5cblx0Ly8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnNcblx0fSBlbHNlIGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiB8fCBub2RlTmFtZSA9PT0gXCJ0ZXh0YXJlYVwiICkge1xuXHRcdGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTtcblx0fVxufVxuXG5mdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKSB7XG5cblx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRhcmdzID0gZmxhdCggYXJncyApO1xuXG5cdHZhciBmcmFnbWVudCwgZmlyc3QsIHNjcmlwdHMsIGhhc1NjcmlwdHMsIG5vZGUsIGRvYyxcblx0XHRpID0gMCxcblx0XHRsID0gY29sbGVjdGlvbi5sZW5ndGgsXG5cdFx0aU5vQ2xvbmUgPSBsIC0gMSxcblx0XHR2YWx1ZSA9IGFyZ3NbIDAgXSxcblx0XHR2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdFxuXHRpZiAoIHZhbHVlSXNGdW5jdGlvbiB8fFxuXHRcdFx0KCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7XG5cdFx0cmV0dXJuIGNvbGxlY3Rpb24uZWFjaCggZnVuY3Rpb24oIGluZGV4ICkge1xuXHRcdFx0dmFyIHNlbGYgPSBjb2xsZWN0aW9uLmVxKCBpbmRleCApO1xuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdGFyZ3NbIDAgXSA9IHZhbHVlLmNhbGwoIHRoaXMsIGluZGV4LCBzZWxmLmh0bWwoKSApO1xuXHRcdFx0fVxuXHRcdFx0ZG9tTWFuaXAoIHNlbGYsIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCBsICkge1xuXHRcdGZyYWdtZW50ID0gYnVpbGRGcmFnbWVudCggYXJncywgY29sbGVjdGlvblsgMCBdLm93bmVyRG9jdW1lbnQsIGZhbHNlLCBjb2xsZWN0aW9uLCBpZ25vcmVkICk7XG5cdFx0Zmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0aWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHtcblx0XHRcdGZyYWdtZW50ID0gZmlyc3Q7XG5cdFx0fVxuXG5cdFx0Ly8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrXG5cdFx0aWYgKCBmaXJzdCB8fCBpZ25vcmVkICkge1xuXHRcdFx0c2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsIFwic2NyaXB0XCIgKSwgZGlzYWJsZVNjcmlwdCApO1xuXHRcdFx0aGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoO1xuXG5cdFx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtXG5cdFx0XHQvLyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXBcblx0XHRcdC8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICh0cmFjLTgwNzApLlxuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRub2RlID0gZnJhZ21lbnQ7XG5cblx0XHRcdFx0aWYgKCBpICE9PSBpTm9DbG9uZSApIHtcblx0XHRcdFx0XHRub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0cnVlLCB0cnVlICk7XG5cblx0XHRcdFx0XHQvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxsYmFjay5jYWxsKCBjb2xsZWN0aW9uWyBpIF0sIG5vZGUsIGkgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXHRcdFx0XHRkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50O1xuXG5cdFx0XHRcdC8vIFJlLWVuYWJsZSBzY3JpcHRzXG5cdFx0XHRcdGpRdWVyeS5tYXAoIHNjcmlwdHMsIHJlc3RvcmVTY3JpcHQgKTtcblxuXHRcdFx0XHQvLyBFdmFsdWF0ZSBleGVjdXRhYmxlIHNjcmlwdHMgb24gZmlyc3QgZG9jdW1lbnQgaW5zZXJ0aW9uXG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgaGFzU2NyaXB0czsgaSsrICkge1xuXHRcdFx0XHRcdG5vZGUgPSBzY3JpcHRzWyBpIF07XG5cdFx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBub2RlLnR5cGUgfHwgXCJcIiApICYmXG5cdFx0XHRcdFx0XHQhZGF0YVByaXYuYWNjZXNzKCBub2RlLCBcImdsb2JhbEV2YWxcIiApICYmXG5cdFx0XHRcdFx0XHRqUXVlcnkuY29udGFpbnMoIGRvYywgbm9kZSApICkge1xuXG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUuc3JjICYmICggbm9kZS50eXBlIHx8IFwiXCIgKS50b0xvd2VyQ2FzZSgpICAhPT0gXCJtb2R1bGVcIiApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBPcHRpb25hbCBBSkFYIGRlcGVuZGVuY3ksIGJ1dCB3b24ndCBydW4gc2NyaXB0cyBpZiBub3QgcHJlc2VudFxuXHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5fZXZhbFVybCAmJiAhbm9kZS5ub01vZHVsZSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuX2V2YWxVcmwoIG5vZGUuc3JjLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRub25jZTogbm9kZS5ub25jZSB8fCBub2RlLmdldEF0dHJpYnV0ZSggXCJub25jZVwiIClcblx0XHRcdFx0XHRcdFx0XHR9LCBkb2MgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBVbndyYXAgYSBDREFUQSBzZWN0aW9uIGNvbnRhaW5pbmcgc2NyaXB0IGNvbnRlbnRzLiBUaGlzIHNob3VsZG4ndCBiZVxuXHRcdFx0XHRcdFx0XHQvLyBuZWVkZWQgYXMgaW4gWE1MIGRvY3VtZW50cyB0aGV5J3JlIGFscmVhZHkgbm90IHZpc2libGUgd2hlblxuXHRcdFx0XHRcdFx0XHQvLyBpbnNwZWN0aW5nIGVsZW1lbnQgY29udGVudHMgYW5kIGluIEhUTUwgZG9jdW1lbnRzIHRoZXkgaGF2ZSBub1xuXHRcdFx0XHRcdFx0XHQvLyBtZWFuaW5nIGJ1dCB3ZSdyZSBwcmVzZXJ2aW5nIHRoYXQgbG9naWMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LlxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIHdpbGwgYmUgcmVtb3ZlZCBjb21wbGV0ZWx5IGluIDQuMC4gU2VlIGdoLTQ5MDQuXG5cdFx0XHRcdFx0XHRcdERPTUV2YWwoIG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSggcmNsZWFuU2NyaXB0LCBcIlwiICksIG5vZGUsIGRvYyApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjb2xsZWN0aW9uO1xufVxuXG5mdW5jdGlvbiByZW1vdmUoIGVsZW0sIHNlbGVjdG9yLCBrZWVwRGF0YSApIHtcblx0dmFyIG5vZGUsXG5cdFx0bm9kZXMgPSBzZWxlY3RvciA/IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBlbGVtICkgOiBlbGVtLFxuXHRcdGkgPSAwO1xuXG5cdGZvciAoIDsgKCBub2RlID0gbm9kZXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRpZiAoICFrZWVwRGF0YSAmJiBub2RlLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBub2RlICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG5vZGUucGFyZW50Tm9kZSApIHtcblx0XHRcdGlmICgga2VlcERhdGEgJiYgaXNBdHRhY2hlZCggbm9kZSApICkge1xuXHRcdFx0XHRzZXRHbG9iYWxFdmFsKCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0fVxuXHRcdFx0bm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBub2RlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aHRtbFByZWZpbHRlcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0cmV0dXJuIGh0bWw7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHR2YXIgaSwgbCwgc3JjRWxlbWVudHMsIGRlc3RFbGVtZW50cyxcblx0XHRcdGNsb25lID0gZWxlbS5jbG9uZU5vZGUoIHRydWUgKSxcblx0XHRcdGluUGFnZSA9IGlzQXR0YWNoZWQoIGVsZW0gKTtcblxuXHRcdC8vIEZpeCBJRSBjbG9uaW5nIGlzc3Vlc1xuXHRcdGlmICggIXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgJiYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExICkgJiZcblx0XHRcdFx0IWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBXZSBlc2NoZXcgalF1ZXJ5I2ZpbmQgaGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczpcblx0XHRcdC8vIGh0dHBzOi8vanNwZXJmLmNvbS9nZXRhbGwtdnMtc2l6emxlLzJcblx0XHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTtcblx0XHRcdHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7XG5cblx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmaXhJbnB1dCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb3B5IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lXG5cdFx0aWYgKCBkYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0aWYgKCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdFx0c3JjRWxlbWVudHMgPSBzcmNFbGVtZW50cyB8fCBnZXRBbGwoIGVsZW0gKTtcblx0XHRcdFx0ZGVzdEVsZW1lbnRzID0gZGVzdEVsZW1lbnRzIHx8IGdldEFsbCggY2xvbmUgKTtcblxuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRjbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUsIFwic2NyaXB0XCIgKTtcblx0XHRpZiAoIGRlc3RFbGVtZW50cy5sZW5ndGggPiAwICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggZGVzdEVsZW1lbnRzLCAhaW5QYWdlICYmIGdldEFsbCggZWxlbSwgXCJzY3JpcHRcIiApICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHRoZSBjbG9uZWQgc2V0XG5cdFx0cmV0dXJuIGNsb25lO1xuXHR9LFxuXG5cdGNsZWFuRGF0YTogZnVuY3Rpb24oIGVsZW1zICkge1xuXHRcdHZhciBkYXRhLCBlbGVtLCB0eXBlLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPT0gdW5kZWZpbmVkOyBpKysgKSB7XG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIGVsZW0gKSApIHtcblx0XHRcdFx0aWYgKCAoIGRhdGEgPSBlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0Zm9yICggdHlwZSBpbiBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsWyB0eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9pZCBqUXVlcnkuZXZlbnQucmVtb3ZlJ3Mgb3ZlcmhlYWRcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGRhdGEuaGFuZGxlICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSApIHtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciApO1xuXHR9LFxuXG5cdHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS50ZXh0KCB0aGlzICkgOlxuXHRcdFx0XHR0aGlzLmVtcHR5KCkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRwcmVwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0YXJnZXQuZmlyc3RDaGlsZCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRiZWZvcmU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGFmdGVyOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGluZyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gdGhpc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXG5cdFx0XHRcdC8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzXG5cdFx0XHRcdGVsZW0udGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0ZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50cztcblx0XHRkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7XG5cblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jbG9uZSggdGhpcywgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0aHRtbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBlbGVtID0gdGhpc1sgMCBdIHx8IHt9LFxuXHRcdFx0XHRpID0gMCxcblx0XHRcdFx0bCA9IHRoaXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uaW5uZXJIVE1MO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2UgaW5uZXJIVE1MXG5cdFx0XHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAhcm5vSW5uZXJodG1sLnRlc3QoIHZhbHVlICkgJiZcblx0XHRcdFx0IXdyYXBNYXBbICggcnRhZ05hbWUuZXhlYyggdmFsdWUgKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKSBdICkge1xuXG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIHZhbHVlICk7XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0XHRlbGVtID0gdGhpc1sgaSBdIHx8IHt9O1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cdFx0XHRcdFx0XHRcdGVsZW0uaW5uZXJIVE1MID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbSA9IDA7XG5cblx0XHRcdFx0Ly8gSWYgdXNpbmcgaW5uZXJIVE1MIHRocm93cyBhbiBleGNlcHRpb24sIHVzZSB0aGUgZmFsbGJhY2sgbWV0aG9kXG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge31cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHR0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApO1xuXHRcdFx0fVxuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0cmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpZ25vcmVkID0gW107XG5cblx0XHQvLyBNYWtlIHRoZSBjaGFuZ2VzLCByZXBsYWNpbmcgZWFjaCBub24taWdub3JlZCBjb250ZXh0IGVsZW1lbnQgd2l0aCB0aGUgbmV3IGNvbnRlbnRcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuXG5cdFx0XHRpZiAoIGpRdWVyeS5pbkFycmF5KCB0aGlzLCBpZ25vcmVkICkgPCAwICkge1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIHRoaXMgKSApO1xuXHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0XHRwYXJlbnQucmVwbGFjZUNoaWxkKCBlbGVtLCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEZvcmNlIGNhbGxiYWNrIGludm9jYXRpb25cblx0XHR9LCBpZ25vcmVkICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIHtcblx0YXBwZW5kVG86IFwiYXBwZW5kXCIsXG5cdHByZXBlbmRUbzogXCJwcmVwZW5kXCIsXG5cdGluc2VydEJlZm9yZTogXCJiZWZvcmVcIixcblx0aW5zZXJ0QWZ0ZXI6IFwiYWZ0ZXJcIixcblx0cmVwbGFjZUFsbDogXCJyZXBsYWNlV2l0aFwiXG59LCBmdW5jdGlvbiggbmFtZSwgb3JpZ2luYWwgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBlbGVtcyxcblx0XHRcdHJldCA9IFtdLFxuXHRcdFx0aW5zZXJ0ID0galF1ZXJ5KCBzZWxlY3RvciApLFxuXHRcdFx0bGFzdCA9IGluc2VydC5sZW5ndGggLSAxLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7IGkgPD0gbGFzdDsgaSsrICkge1xuXHRcdFx0ZWxlbXMgPSBpID09PSBsYXN0ID8gdGhpcyA6IHRoaXMuY2xvbmUoIHRydWUgKTtcblx0XHRcdGpRdWVyeSggaW5zZXJ0WyBpIF0gKVsgb3JpZ2luYWwgXSggZWxlbXMgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHQvLyAuZ2V0KCkgYmVjYXVzZSBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRwdXNoLmFwcGx5KCByZXQsIGVsZW1zLmdldCgpICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQgKTtcblx0fTtcbn0gKTtcbnZhciBybnVtbm9ucHggPSBuZXcgUmVnRXhwKCBcIl4oXCIgKyBwbnVtICsgXCIpKD8hcHgpW2EteiVdKyRcIiwgXCJpXCIgKTtcblxudmFyIHJjdXN0b21Qcm9wID0gL14tLS87XG5cblxudmFyIGdldFN0eWxlcyA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5LCBGaXJlZm94IDw9MzAgKHRyYWMtMTUwOTgsIHRyYWMtMTQxNTApXG5cdFx0Ly8gSUUgdGhyb3dzIG9uIGVsZW1lbnRzIGNyZWF0ZWQgaW4gcG9wdXBzXG5cdFx0Ly8gRkYgbWVhbndoaWxlIHRocm93cyBvbiBmcmFtZSBlbGVtZW50cyB0aHJvdWdoIFwiZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZVwiXG5cdFx0dmFyIHZpZXcgPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cblx0XHRpZiAoICF2aWV3IHx8ICF2aWV3Lm9wZW5lciApIHtcblx0XHRcdHZpZXcgPSB3aW5kb3c7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSApO1xuXHR9O1xuXG52YXIgc3dhcCA9IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBjYWxsYmFjayApIHtcblx0dmFyIHJldCwgbmFtZSxcblx0XHRvbGQgPSB7fTtcblxuXHQvLyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdG9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdO1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9wdGlvbnNbIG5hbWUgXTtcblx0fVxuXG5cdHJldCA9IGNhbGxiYWNrLmNhbGwoIGVsZW0gKTtcblxuXHQvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn07XG5cblxudmFyIHJib3hTdHlsZSA9IG5ldyBSZWdFeHAoIGNzc0V4cGFuZC5qb2luKCBcInxcIiApLCBcImlcIiApO1xuXG5cblxuKCBmdW5jdGlvbigpIHtcblxuXHQvLyBFeGVjdXRpbmcgYm90aCBwaXhlbFBvc2l0aW9uICYgYm94U2l6aW5nUmVsaWFibGUgdGVzdHMgcmVxdWlyZSBvbmx5IG9uZSBsYXlvdXRcblx0Ly8gc28gdGhleSdyZSBleGVjdXRlZCBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgdGhlIHNlY29uZCBjb21wdXRhdGlvbi5cblx0ZnVuY3Rpb24gY29tcHV0ZVN0eWxlVGVzdHMoKSB7XG5cblx0XHQvLyBUaGlzIGlzIGEgc2luZ2xldG9uLCB3ZSBuZWVkIHRvIGV4ZWN1dGUgaXQgb25seSBvbmNlXG5cdFx0aWYgKCAhZGl2ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O3dpZHRoOjYwcHg7XCIgK1xuXHRcdFx0XCJtYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjBcIjtcblx0XHRkaXYuc3R5bGUuY3NzVGV4dCA9XG5cdFx0XHRcInBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OnNjcm9sbDtcIiArXG5cdFx0XHRcIm1hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7XCIgK1xuXHRcdFx0XCJ3aWR0aDo2MCU7dG9wOjElXCI7XG5cdFx0ZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBjb250YWluZXIgKS5hcHBlbmRDaGlsZCggZGl2ICk7XG5cblx0XHR2YXIgZGl2U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZGl2ICk7XG5cdFx0cGl4ZWxQb3NpdGlvblZhbCA9IGRpdlN0eWxlLnRvcCAhPT0gXCIxJVwiO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgRmlyZWZveCA8PTMgLSA0NFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdFZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUubWFyZ2luTGVmdCApID09PSAxMjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIFNhZmFyaSA8PTkuMSAtIDEwLjEsIGlPUyA8PTcuMCAtIDkuM1xuXHRcdC8vIFNvbWUgc3R5bGVzIGNvbWUgYmFjayB3aXRoIHBlcmNlbnRhZ2UgdmFsdWVzLCBldmVuIHRob3VnaCB0aGV5IHNob3VsZG4ndFxuXHRcdGRpdi5zdHlsZS5yaWdodCA9IFwiNjAlXCI7XG5cdFx0cGl4ZWxCb3hTdHlsZXNWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLnJpZ2h0ICkgPT09IDM2O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0XHQvLyBEZXRlY3QgbWlzcmVwb3J0aW5nIG9mIGNvbnRlbnQgZGltZW5zaW9ucyBmb3IgYm94LXNpemluZzpib3JkZXItYm94IGVsZW1lbnRzXG5cdFx0Ym94U2l6aW5nUmVsaWFibGVWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLndpZHRoICkgPT09IDM2O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0Ly8gRGV0ZWN0IG92ZXJmbG93OnNjcm9sbCBzY3Jld2luZXNzIChnaC0zNjk5KVxuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTY0XG5cdFx0Ly8gRG9uJ3QgZ2V0IHRyaWNrZWQgd2hlbiB6b29tIGFmZmVjdHMgb2Zmc2V0V2lkdGggKGdoLTQwMjkpXG5cdFx0ZGl2LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXHRcdHNjcm9sbGJveFNpemVWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdi5vZmZzZXRXaWR0aCAvIDMgKSA9PT0gMTI7XG5cblx0XHRkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApO1xuXG5cdFx0Ly8gTnVsbGlmeSB0aGUgZGl2IHNvIGl0IHdvdWxkbid0IGJlIHN0b3JlZCBpbiB0aGUgbWVtb3J5IGFuZFxuXHRcdC8vIGl0IHdpbGwgYWxzbyBiZSBhIHNpZ24gdGhhdCBjaGVja3MgYWxyZWFkeSBwZXJmb3JtZWRcblx0XHRkaXYgPSBudWxsO1xuXHR9XG5cblx0ZnVuY3Rpb24gcm91bmRQaXhlbE1lYXN1cmVzKCBtZWFzdXJlICkge1xuXHRcdHJldHVybiBNYXRoLnJvdW5kKCBwYXJzZUZsb2F0KCBtZWFzdXJlICkgKTtcblx0fVxuXG5cdHZhciBwaXhlbFBvc2l0aW9uVmFsLCBib3hTaXppbmdSZWxpYWJsZVZhbCwgc2Nyb2xsYm94U2l6ZVZhbCwgcGl4ZWxCb3hTdHlsZXNWYWwsXG5cdFx0cmVsaWFibGVUckRpbWVuc2lvbnNWYWwsIHJlbGlhYmxlTWFyZ2luTGVmdFZhbCxcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICksXG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdC8vIEZpbmlzaCBlYXJseSBpbiBsaW1pdGVkIChub24tYnJvd3NlcikgZW52aXJvbm1lbnRzXG5cdGlmICggIWRpdi5zdHlsZSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFN0eWxlIG9mIGNsb25lZCBlbGVtZW50IGFmZmVjdHMgc291cmNlIGVsZW1lbnQgY2xvbmVkICh0cmFjLTg5MDgpXG5cdGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiY29udGVudC1ib3hcIjtcblx0ZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJcIjtcblx0c3VwcG9ydC5jbGVhckNsb25lU3R5bGUgPSBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPT09IFwiY29udGVudC1ib3hcIjtcblxuXHRqUXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCB7XG5cdFx0Ym94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBib3hTaXppbmdSZWxpYWJsZVZhbDtcblx0XHR9LFxuXHRcdHBpeGVsQm94U3R5bGVzOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxCb3hTdHlsZXNWYWw7XG5cdFx0fSxcblx0XHRwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxQb3NpdGlvblZhbDtcblx0XHR9LFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdDogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHJlbGlhYmxlTWFyZ2luTGVmdFZhbDtcblx0XHR9LFxuXHRcdHNjcm9sbGJveFNpemU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBzY3JvbGxib3hTaXplVmFsO1xuXHRcdH0sXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBtaXNyZXBvcnQgYGdldENvbXB1dGVkU3R5bGVgIG9mIHRhYmxlIHJvd3Mgd2l0aCB3aWR0aC9oZWlnaHRcblx0XHQvLyBzZXQgaW4gQ1NTIHdoaWxlIGBvZmZzZXQqYCBwcm9wZXJ0aWVzIHJlcG9ydCBjb3JyZWN0IHZhbHVlcy5cblx0XHQvLyBCZWhhdmlvciBpbiBJRSA5IGlzIG1vcmUgc3VidGxlIHRoYW4gaW4gbmV3ZXIgdmVyc2lvbnMgJiBpdCBwYXNzZXNcblx0XHQvLyBzb21lIHZlcnNpb25zIG9mIHRoaXMgdGVzdDsgbWFrZSBzdXJlIG5vdCB0byBtYWtlIGl0IHBhc3MgdGhlcmUhXG5cdFx0Ly9cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDcwK1xuXHRcdC8vIE9ubHkgRmlyZWZveCBpbmNsdWRlcyBib3JkZXIgd2lkdGhzXG5cdFx0Ly8gaW4gY29tcHV0ZWQgZGltZW5zaW9ucy4gKGdoLTQ1MjkpXG5cdFx0cmVsaWFibGVUckRpbWVuc2lvbnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRhYmxlLCB0ciwgdHJDaGlsZCwgdHJTdHlsZTtcblx0XHRcdGlmICggcmVsaWFibGVUckRpbWVuc2lvbnNWYWwgPT0gbnVsbCApIHtcblx0XHRcdFx0dGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInRhYmxlXCIgKTtcblx0XHRcdFx0dHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInRyXCIgKTtcblx0XHRcdFx0dHJDaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcblxuXHRcdFx0XHR0YWJsZS5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZVwiO1xuXHRcdFx0XHR0ci5zdHlsZS5jc3NUZXh0ID0gXCJib3gtc2l6aW5nOmNvbnRlbnQtYm94O2JvcmRlcjoxcHggc29saWRcIjtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgODYrXG5cdFx0XHRcdC8vIEhlaWdodCBzZXQgdGhyb3VnaCBjc3NUZXh0IGRvZXMgbm90IGdldCBhcHBsaWVkLlxuXHRcdFx0XHQvLyBDb21wdXRlZCBoZWlnaHQgdGhlbiBjb21lcyBiYWNrIGFzIDAuXG5cdFx0XHRcdHRyLnN0eWxlLmhlaWdodCA9IFwiMXB4XCI7XG5cdFx0XHRcdHRyQ2hpbGQuc3R5bGUuaGVpZ2h0ID0gXCI5cHhcIjtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDggQ2hyb21lIDg2K1xuXHRcdFx0XHQvLyBJbiBvdXIgYm9keUJhY2tncm91bmQuaHRtbCBpZnJhbWUsXG5cdFx0XHRcdC8vIGRpc3BsYXkgZm9yIGFsbCBkaXYgZWxlbWVudHMgaXMgc2V0IHRvIFwiaW5saW5lXCIsXG5cdFx0XHRcdC8vIHdoaWNoIGNhdXNlcyBhIHByb2JsZW0gb25seSBpbiBBbmRyb2lkIDggQ2hyb21lIDg2LlxuXHRcdFx0XHQvLyBFbnN1cmluZyB0aGUgZGl2IGlzIGBkaXNwbGF5OiBibG9ja2Bcblx0XHRcdFx0Ly8gZ2V0cyBhcm91bmQgdGhpcyBpc3N1ZS5cblx0XHRcdFx0dHJDaGlsZC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuXG5cdFx0XHRcdGRvY3VtZW50RWxlbWVudFxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdGFibGUgKVxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdHIgKVxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdHJDaGlsZCApO1xuXG5cdFx0XHRcdHRyU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggdHIgKTtcblx0XHRcdFx0cmVsaWFibGVUckRpbWVuc2lvbnNWYWwgPSAoIHBhcnNlSW50KCB0clN0eWxlLmhlaWdodCwgMTAgKSArXG5cdFx0XHRcdFx0cGFyc2VJbnQoIHRyU3R5bGUuYm9yZGVyVG9wV2lkdGgsIDEwICkgK1xuXHRcdFx0XHRcdHBhcnNlSW50KCB0clN0eWxlLmJvcmRlckJvdHRvbVdpZHRoLCAxMCApICkgPT09IHRyLm9mZnNldEhlaWdodDtcblxuXHRcdFx0XHRkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIHRhYmxlICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVUckRpbWVuc2lvbnNWYWw7XG5cdFx0fVxuXHR9ICk7XG59ICkoKTtcblxuXG5mdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkge1xuXHR2YXIgd2lkdGgsIG1pbldpZHRoLCBtYXhXaWR0aCwgcmV0LFxuXHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKSxcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNTErXG5cdFx0Ly8gUmV0cmlldmluZyBzdHlsZSBiZWZvcmUgY29tcHV0ZWQgc29tZWhvd1xuXHRcdC8vIGZpeGVzIGFuIGlzc3VlIHdpdGggZ2V0dGluZyB3cm9uZyB2YWx1ZXNcblx0XHQvLyBvbiBkZXRhY2hlZCBlbGVtZW50c1xuXHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRjb21wdXRlZCA9IGNvbXB1dGVkIHx8IGdldFN0eWxlcyggZWxlbSApO1xuXG5cdC8vIGdldFByb3BlcnR5VmFsdWUgaXMgbmVlZGVkIGZvcjpcblx0Ly8gICAuY3NzKCdmaWx0ZXInKSAoSUUgOSBvbmx5LCB0cmFjLTEyNTM3KVxuXHQvLyAgIC5jc3MoJy0tY3VzdG9tUHJvcGVydHkpIChnaC0zMTQ0KVxuXHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTErXG5cdFx0Ly8gSUUgb25seSBzdXBwb3J0cyBgXCJmbG9hdFwiYCBpbiBgZ2V0UHJvcGVydHlWYWx1ZWA7IGluIGNvbXB1dGVkIHN0eWxlc1xuXHRcdC8vIGl0J3Mgb25seSBhdmFpbGFibGUgYXMgYFwiY3NzRmxvYXRcImAuIFdlIG5vIGxvbmdlciBtb2RpZnkgcHJvcGVydGllc1xuXHRcdC8vIHNlbnQgdG8gYC5jc3MoKWAgYXBhcnQgZnJvbSBjYW1lbENhc2luZywgc28gd2UgbmVlZCB0byBjaGVjayBib3RoLlxuXHRcdC8vIE5vcm1hbGx5LCB0aGlzIHdvdWxkIGNyZWF0ZSBkaWZmZXJlbmNlIGluIGJlaGF2aW9yOiBpZlxuXHRcdC8vIGBnZXRQcm9wZXJ0eVZhbHVlYCByZXR1cm5zIGFuIGVtcHR5IHN0cmluZywgdGhlIHZhbHVlIHJldHVybmVkXG5cdFx0Ly8gYnkgYC5jc3MoKWAgd291bGQgYmUgYHVuZGVmaW5lZGAuIFRoaXMgaXMgdXN1YWxseSB0aGUgY2FzZSBmb3Jcblx0XHQvLyBkaXNjb25uZWN0ZWQgZWxlbWVudHMuIEhvd2V2ZXIsIGluIElFIGV2ZW4gZGlzY29ubmVjdGVkIGVsZW1lbnRzXG5cdFx0Ly8gd2l0aCBubyBzdHlsZXMgcmV0dXJuIGBcIm5vbmVcImAgZm9yIGBnZXRQcm9wZXJ0eVZhbHVlKCBcImZsb2F0XCIgKWBcblx0XHRyZXQgPSBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRbIG5hbWUgXTtcblxuXHRcdGlmICggaXNDdXN0b21Qcm9wICYmIHJldCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCAxMDUrLCBDaHJvbWUgPD0xMDUrXG5cdFx0XHQvLyBTcGVjIHJlcXVpcmVzIHRyaW1taW5nIHdoaXRlc3BhY2UgZm9yIGN1c3RvbSBwcm9wZXJ0aWVzIChnaC00OTI2KS5cblx0XHRcdC8vIEZpcmVmb3ggb25seSB0cmltcyBsZWFkaW5nIHdoaXRlc3BhY2UuIENocm9tZSBqdXN0IGNvbGxhcHNlc1xuXHRcdFx0Ly8gYm90aCBsZWFkaW5nICYgdHJhaWxpbmcgd2hpdGVzcGFjZSB0byBhIHNpbmdsZSBzcGFjZS5cblx0XHRcdC8vXG5cdFx0XHQvLyBGYWxsIGJhY2sgdG8gYHVuZGVmaW5lZGAgaWYgZW1wdHkgc3RyaW5nIHJldHVybmVkLlxuXHRcdFx0Ly8gVGhpcyBjb2xsYXBzZXMgYSBtaXNzaW5nIGRlZmluaXRpb24gd2l0aCBwcm9wZXJ0eSBkZWZpbmVkXG5cdFx0XHQvLyBhbmQgc2V0IHRvIGFuIGVtcHR5IHN0cmluZyBidXQgdGhlcmUncyBubyBzdGFuZGFyZCBBUElcblx0XHRcdC8vIGFsbG93aW5nIHVzIHRvIGRpZmZlcmVudGlhdGUgdGhlbSB3aXRob3V0IGEgcGVyZm9ybWFuY2UgcGVuYWx0eVxuXHRcdFx0Ly8gYW5kIHJldHVybmluZyBgdW5kZWZpbmVkYCBhbGlnbnMgd2l0aCBvbGRlciBqUXVlcnkuXG5cdFx0XHQvL1xuXHRcdFx0Ly8gcnRyaW1DU1MgdHJlYXRzIFUrMDAwRCBDQVJSSUFHRSBSRVRVUk4gYW5kIFUrMDAwQyBGT1JNIEZFRURcblx0XHRcdC8vIGFzIHdoaXRlc3BhY2Ugd2hpbGUgQ1NTIGRvZXMgbm90LCBidXQgdGhpcyBpcyBub3QgYSBwcm9ibGVtXG5cdFx0XHQvLyBiZWNhdXNlIENTUyBwcmVwcm9jZXNzaW5nIHJlcGxhY2VzIHRoZW0gd2l0aCBVKzAwMEEgTElORSBGRUVEXG5cdFx0XHQvLyAod2hpY2ggKmlzKiBDU1Mgd2hpdGVzcGFjZSlcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtc3ludGF4LTMvI2lucHV0LXByZXByb2Nlc3Npbmdcblx0XHRcdHJldCA9IHJldC5yZXBsYWNlKCBydHJpbUNTUywgXCIkMVwiICkgfHwgdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdGlmICggcmV0ID09PSBcIlwiICYmICFpc0F0dGFjaGVkKCBlbGVtICkgKSB7XG5cdFx0XHRyZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBBIHRyaWJ1dGUgdG8gdGhlIFwiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkc1wiXG5cdFx0Ly8gQW5kcm9pZCBCcm93c2VyIHJldHVybnMgcGVyY2VudGFnZSBmb3Igc29tZSB2YWx1ZXMsXG5cdFx0Ly8gYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJlbGlhYmx5IHBpeGVscy5cblx0XHQvLyBUaGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNwZWM6XG5cdFx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXNcblx0XHRpZiAoICFzdXBwb3J0LnBpeGVsQm94U3R5bGVzKCkgJiYgcm51bW5vbnB4LnRlc3QoIHJldCApICYmIHJib3hTdHlsZS50ZXN0KCBuYW1lICkgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXNcblx0XHRcdHdpZHRoID0gc3R5bGUud2lkdGg7XG5cdFx0XHRtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoO1xuXHRcdFx0bWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0aDtcblxuXHRcdFx0Ly8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dFxuXHRcdFx0c3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0O1xuXHRcdFx0cmV0ID0gY29tcHV0ZWQud2lkdGg7XG5cblx0XHRcdC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXNcblx0XHRcdHN0eWxlLndpZHRoID0gd2lkdGg7XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoO1xuXHRcdFx0c3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmV0ICE9PSB1bmRlZmluZWQgP1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdC8vIElFIHJldHVybnMgekluZGV4IHZhbHVlIGFzIGFuIGludGVnZXIuXG5cdFx0cmV0ICsgXCJcIiA6XG5cdFx0cmV0O1xufVxuXG5cbmZ1bmN0aW9uIGFkZEdldEhvb2tJZiggY29uZGl0aW9uRm4sIGhvb2tGbiApIHtcblxuXHQvLyBEZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQncyByZWFsbHkgbmVlZGVkLlxuXHRyZXR1cm4ge1xuXHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGNvbmRpdGlvbkZuKCkgKSB7XG5cblx0XHRcdFx0Ly8gSG9vayBub3QgbmVlZGVkIChvciBpdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgaXQgZHVlXG5cdFx0XHRcdC8vIHRvIG1pc3NpbmcgZGVwZW5kZW5jeSksIHJlbW92ZSBpdC5cblx0XHRcdFx0ZGVsZXRlIHRoaXMuZ2V0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhvb2sgbmVlZGVkOyByZWRlZmluZSBpdCBzbyB0aGF0IHRoZSBzdXBwb3J0IHRlc3QgaXMgbm90IGV4ZWN1dGVkIGFnYWluLlxuXHRcdFx0cmV0dXJuICggdGhpcy5nZXQgPSBob29rRm4gKS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fVxuXHR9O1xufVxuXG5cbnZhciBjc3NQcmVmaXhlcyA9IFsgXCJXZWJraXRcIiwgXCJNb3pcIiwgXCJtc1wiIF0sXG5cdGVtcHR5U3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkuc3R5bGUsXG5cdHZlbmRvclByb3BzID0ge307XG5cbi8vIFJldHVybiBhIHZlbmRvci1wcmVmaXhlZCBwcm9wZXJ0eSBvciB1bmRlZmluZWRcbmZ1bmN0aW9uIHZlbmRvclByb3BOYW1lKCBuYW1lICkge1xuXG5cdC8vIENoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXNcblx0dmFyIGNhcE5hbWUgPSBuYW1lWyAwIF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoIDEgKSxcblx0XHRpID0gY3NzUHJlZml4ZXMubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdG5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTtcblx0XHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRcdHJldHVybiBuYW1lO1xuXHRcdH1cblx0fVxufVxuXG4vLyBSZXR1cm4gYSBwb3RlbnRpYWxseS1tYXBwZWQgalF1ZXJ5LmNzc1Byb3BzIG9yIHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eVxuZnVuY3Rpb24gZmluYWxQcm9wTmFtZSggbmFtZSApIHtcblx0dmFyIGZpbmFsID0galF1ZXJ5LmNzc1Byb3BzWyBuYW1lIF0gfHwgdmVuZG9yUHJvcHNbIG5hbWUgXTtcblxuXHRpZiAoIGZpbmFsICkge1xuXHRcdHJldHVybiBmaW5hbDtcblx0fVxuXHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRyZXR1cm4gbmFtZTtcblx0fVxuXHRyZXR1cm4gdmVuZG9yUHJvcHNbIG5hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBuYW1lICkgfHwgbmFtZTtcbn1cblxuXG52YXJcblxuXHQvLyBTd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlXG5cdC8vIGV4Y2VwdCBcInRhYmxlXCIsIFwidGFibGUtY2VsbFwiLCBvciBcInRhYmxlLWNhcHRpb25cIlxuXHQvLyBTZWUgaGVyZSBmb3IgZGlzcGxheSB2YWx1ZXM6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXlcblx0cmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFxuXHRjc3NTaG93ID0geyBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLCB2aXNpYmlsaXR5OiBcImhpZGRlblwiLCBkaXNwbGF5OiBcImJsb2NrXCIgfSxcblx0Y3NzTm9ybWFsVHJhbnNmb3JtID0ge1xuXHRcdGxldHRlclNwYWNpbmc6IFwiMFwiLFxuXHRcdGZvbnRXZWlnaHQ6IFwiNDAwXCJcblx0fTtcblxuZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIF9lbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7XG5cblx0Ly8gQW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlblxuXHQvLyBub3JtYWxpemVkIGF0IHRoaXMgcG9pbnRcblx0dmFyIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICk7XG5cdHJldHVybiBtYXRjaGVzID9cblxuXHRcdC8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkIFwic3VidHJhY3RcIiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzXG5cdFx0TWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSA6XG5cdFx0dmFsdWU7XG59XG5cbmZ1bmN0aW9uIGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBib3gsIGlzQm9yZGVyQm94LCBzdHlsZXMsIGNvbXB1dGVkVmFsICkge1xuXHR2YXIgaSA9IGRpbWVuc2lvbiA9PT0gXCJ3aWR0aFwiID8gMSA6IDAsXG5cdFx0ZXh0cmEgPSAwLFxuXHRcdGRlbHRhID0gMCxcblx0XHRtYXJnaW5EZWx0YSA9IDA7XG5cblx0Ly8gQWRqdXN0bWVudCBtYXkgbm90IGJlIG5lY2Vzc2FyeVxuXHRpZiAoIGJveCA9PT0gKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApICkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgNDsgaSArPSAyICkge1xuXG5cdFx0Ly8gQm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luXG5cdFx0Ly8gQ291bnQgbWFyZ2luIGRlbHRhIHNlcGFyYXRlbHkgdG8gb25seSBhZGQgaXQgYWZ0ZXIgc2Nyb2xsIGd1dHRlciBhZGp1c3RtZW50LlxuXHRcdC8vIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2UgbmVnYXRpdmUgbWFyZ2lucyB3b3JrIHdpdGggYG91dGVySGVpZ2h0KCB0cnVlIClgIChnaC0zOTgyKS5cblx0XHRpZiAoIGJveCA9PT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdG1hcmdpbkRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIGJveCArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgY29udGVudC1ib3gsIHdlJ3JlIHNlZWtpbmcgXCJwYWRkaW5nXCIgb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiXG5cdFx0aWYgKCAhaXNCb3JkZXJCb3ggKSB7XG5cblx0XHRcdC8vIEFkZCBwYWRkaW5nXG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gRm9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIiwgYWRkIGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwicGFkZGluZ1wiICkge1xuXHRcdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBCdXQgc3RpbGwga2VlcCB0cmFjayBvZiBpdCBvdGhlcndpc2Vcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGV4dHJhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgYm9yZGVyLWJveCAoY29udGVudCArIHBhZGRpbmcgKyBib3JkZXIpLCB3ZSdyZSBzZWVraW5nIFwiY29udGVudFwiIG9yXG5cdFx0Ly8gXCJwYWRkaW5nXCIgb3IgXCJtYXJnaW5cIlxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiwgc3VidHJhY3QgcGFkZGluZ1xuXHRcdFx0aWYgKCBib3ggPT09IFwiY29udGVudFwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiIG9yIFwicGFkZGluZ1wiLCBzdWJ0cmFjdCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFjY291bnQgZm9yIHBvc2l0aXZlIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXIgd2hlbiByZXF1ZXN0ZWQgYnkgcHJvdmlkaW5nIGNvbXB1dGVkVmFsXG5cdGlmICggIWlzQm9yZGVyQm94ICYmIGNvbXB1dGVkVmFsID49IDAgKSB7XG5cblx0XHQvLyBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgYSByb3VuZGVkIHN1bSBvZiBjb250ZW50LCBwYWRkaW5nLCBzY3JvbGwgZ3V0dGVyLCBhbmQgYm9yZGVyXG5cdFx0Ly8gQXNzdW1pbmcgaW50ZWdlciBzY3JvbGwgZ3V0dGVyLCBzdWJ0cmFjdCB0aGUgcmVzdCBhbmQgcm91bmQgZG93blxuXHRcdGRlbHRhICs9IE1hdGgubWF4KCAwLCBNYXRoLmNlaWwoXG5cdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0Y29tcHV0ZWRWYWwgLVxuXHRcdFx0ZGVsdGEgLVxuXHRcdFx0ZXh0cmEgLVxuXHRcdFx0MC41XG5cblx0XHQvLyBJZiBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgdW5rbm93biwgdGhlbiB3ZSBjYW4ndCBkZXRlcm1pbmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlclxuXHRcdC8vIFVzZSBhbiBleHBsaWNpdCB6ZXJvIHRvIGF2b2lkIE5hTiAoZ2gtMzk2NClcblx0XHQpICkgfHwgMDtcblx0fVxuXG5cdHJldHVybiBkZWx0YSArIG1hcmdpbkRlbHRhO1xufVxuXG5mdW5jdGlvbiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICkge1xuXG5cdC8vIFN0YXJ0IHdpdGggY29tcHV0ZWQgc3R5bGVcblx0dmFyIHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLFxuXG5cdFx0Ly8gVG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdywgb25seSBmZXRjaCBib3hTaXppbmcgaWYgd2UgbmVlZCBpdCAoZ2gtNDMyMikuXG5cdFx0Ly8gRmFrZSBjb250ZW50LWJveCB1bnRpbCB3ZSBrbm93IGl0J3MgbmVlZGVkIHRvIGtub3cgdGhlIHRydWUgdmFsdWUuXG5cdFx0Ym94U2l6aW5nTmVlZGVkID0gIXN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSB8fCBleHRyYSxcblx0XHRpc0JvcmRlckJveCA9IGJveFNpemluZ05lZWRlZCAmJlxuXHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gaXNCb3JkZXJCb3gsXG5cblx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIGRpbWVuc2lvbiwgc3R5bGVzICksXG5cdFx0b2Zmc2V0UHJvcCA9IFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICk7XG5cblx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdC8vIFJldHVybiBhIGNvbmZvdW5kaW5nIG5vbi1waXhlbCB2YWx1ZSBvciBmZWlnbiBpZ25vcmFuY2UsIGFzIGFwcHJvcHJpYXRlLlxuXHRpZiAoIHJudW1ub25weC50ZXN0KCB2YWwgKSApIHtcblx0XHRpZiAoICFleHRyYSApIHtcblx0XHRcdHJldHVybiB2YWw7XG5cdFx0fVxuXHRcdHZhbCA9IFwiYXV0b1wiO1xuXHR9XG5cblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHQvLyBVc2Ugb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGZvciB3aGVuIGJveCBzaXppbmcgaXMgdW5yZWxpYWJsZS5cblx0Ly8gSW4gdGhvc2UgY2FzZXMsIHRoZSBjb21wdXRlZCB2YWx1ZSBjYW4gYmUgdHJ1c3RlZCB0byBiZSBib3JkZXItYm94LlxuXHRpZiAoICggIXN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSAmJiBpc0JvcmRlckJveCB8fFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgMTAgLSAxMSssIEVkZ2UgMTUgLSAxOCtcblx0XHQvLyBJRS9FZGdlIG1pc3JlcG9ydCBgZ2V0Q29tcHV0ZWRTdHlsZWAgb2YgdGFibGUgcm93cyB3aXRoIHdpZHRoL2hlaWdodFxuXHRcdC8vIHNldCBpbiBDU1Mgd2hpbGUgYG9mZnNldCpgIHByb3BlcnRpZXMgcmVwb3J0IGNvcnJlY3QgdmFsdWVzLlxuXHRcdC8vIEludGVyZXN0aW5nbHksIGluIHNvbWUgY2FzZXMgSUUgOSBkb2Vzbid0IHN1ZmZlciBmcm9tIHRoaXMgaXNzdWUuXG5cdFx0IXN1cHBvcnQucmVsaWFibGVUckRpbWVuc2lvbnMoKSAmJiBub2RlTmFtZSggZWxlbSwgXCJ0clwiICkgfHxcblxuXHRcdC8vIEZhbGwgYmFjayB0byBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgd2hlbiB2YWx1ZSBpcyBcImF1dG9cIlxuXHRcdC8vIFRoaXMgaGFwcGVucyBmb3IgaW5saW5lIGVsZW1lbnRzIHdpdGggbm8gZXhwbGljaXQgc2V0dGluZyAoZ2gtMzU3MSlcblx0XHR2YWwgPT09IFwiYXV0b1wiIHx8XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIC0gNC4zIG9ubHlcblx0XHQvLyBBbHNvIHVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIG1pc3JlcG9ydGVkIGlubGluZSBkaW1lbnNpb25zIChnaC0zNjAyKVxuXHRcdCFwYXJzZUZsb2F0KCB2YWwgKSAmJiBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImlubGluZVwiICkgJiZcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGUgZWxlbWVudCBpcyB2aXNpYmxlICYgY29ubmVjdGVkXG5cdFx0ZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblxuXHRcdGlzQm9yZGVyQm94ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIjtcblxuXHRcdC8vIFdoZXJlIGF2YWlsYWJsZSwgb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGFwcHJveGltYXRlIGJvcmRlciBib3ggZGltZW5zaW9ucy5cblx0XHQvLyBXaGVyZSBub3QgYXZhaWxhYmxlIChlLmcuLCBTVkcpLCBhc3N1bWUgdW5yZWxpYWJsZSBib3gtc2l6aW5nIGFuZCBpbnRlcnByZXQgdGhlXG5cdFx0Ly8gcmV0cmlldmVkIHZhbHVlIGFzIGEgY29udGVudCBib3ggZGltZW5zaW9uLlxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBvZmZzZXRQcm9wIGluIGVsZW07XG5cdFx0aWYgKCB2YWx1ZUlzQm9yZGVyQm94ICkge1xuXHRcdFx0dmFsID0gZWxlbVsgb2Zmc2V0UHJvcCBdO1xuXHRcdH1cblx0fVxuXG5cdC8vIE5vcm1hbGl6ZSBcIlwiIGFuZCBhdXRvXG5cdHZhbCA9IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7XG5cblx0Ly8gQWRqdXN0IGZvciB0aGUgZWxlbWVudCdzIGJveCBtb2RlbFxuXHRyZXR1cm4gKCB2YWwgK1xuXHRcdGJveE1vZGVsQWRqdXN0bWVudChcblx0XHRcdGVsZW0sXG5cdFx0XHRkaW1lbnNpb24sXG5cdFx0XHRleHRyYSB8fCAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICksXG5cdFx0XHR2YWx1ZUlzQm9yZGVyQm94LFxuXHRcdFx0c3R5bGVzLFxuXG5cdFx0XHQvLyBQcm92aWRlIHRoZSBjdXJyZW50IGNvbXB1dGVkIHNpemUgdG8gcmVxdWVzdCBzY3JvbGwgZ3V0dGVyIGNhbGN1bGF0aW9uIChnaC0zNTg5KVxuXHRcdFx0dmFsXG5cdFx0KVxuXHQpICsgXCJweFwiO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQWRkIGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5nIHRoZSBkZWZhdWx0XG5cdC8vIGJlaGF2aW9yIG9mIGdldHRpbmcgYW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0eVxuXHRjc3NIb29rczoge1xuXHRcdG9wYWNpdHk6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdFx0Ly8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHlcblx0XHRcdFx0XHR2YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCBcIm9wYWNpdHlcIiApO1xuXHRcdFx0XHRcdHJldHVybiByZXQgPT09IFwiXCIgPyBcIjFcIiA6IHJldDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvLyBEb24ndCBhdXRvbWF0aWNhbGx5IGFkZCBcInB4XCIgdG8gdGhlc2UgcG9zc2libHktdW5pdGxlc3MgcHJvcGVydGllc1xuXHRjc3NOdW1iZXI6IHtcblx0XHRhbmltYXRpb25JdGVyYXRpb25Db3VudDogdHJ1ZSxcblx0XHRhc3BlY3RSYXRpbzogdHJ1ZSxcblx0XHRib3JkZXJJbWFnZVNsaWNlOiB0cnVlLFxuXHRcdGNvbHVtbkNvdW50OiB0cnVlLFxuXHRcdGZsZXhHcm93OiB0cnVlLFxuXHRcdGZsZXhTaHJpbms6IHRydWUsXG5cdFx0Zm9udFdlaWdodDogdHJ1ZSxcblx0XHRncmlkQXJlYTogdHJ1ZSxcblx0XHRncmlkQ29sdW1uOiB0cnVlLFxuXHRcdGdyaWRDb2x1bW5FbmQ6IHRydWUsXG5cdFx0Z3JpZENvbHVtblN0YXJ0OiB0cnVlLFxuXHRcdGdyaWRSb3c6IHRydWUsXG5cdFx0Z3JpZFJvd0VuZDogdHJ1ZSxcblx0XHRncmlkUm93U3RhcnQ6IHRydWUsXG5cdFx0bGluZUhlaWdodDogdHJ1ZSxcblx0XHRvcGFjaXR5OiB0cnVlLFxuXHRcdG9yZGVyOiB0cnVlLFxuXHRcdG9ycGhhbnM6IHRydWUsXG5cdFx0c2NhbGU6IHRydWUsXG5cdFx0d2lkb3dzOiB0cnVlLFxuXHRcdHpJbmRleDogdHJ1ZSxcblx0XHR6b29tOiB0cnVlLFxuXG5cdFx0Ly8gU1ZHLXJlbGF0ZWRcblx0XHRmaWxsT3BhY2l0eTogdHJ1ZSxcblx0XHRmbG9vZE9wYWNpdHk6IHRydWUsXG5cdFx0c3RvcE9wYWNpdHk6IHRydWUsXG5cdFx0c3Ryb2tlTWl0ZXJsaW1pdDogdHJ1ZSxcblx0XHRzdHJva2VPcGFjaXR5OiB0cnVlXG5cdH0sXG5cblx0Ly8gQWRkIGluIHByb3BlcnRpZXMgd2hvc2UgbmFtZXMgeW91IHdpc2ggdG8gZml4IGJlZm9yZVxuXHQvLyBzZXR0aW5nIG9yIGdldHRpbmcgdGhlIHZhbHVlXG5cdGNzc1Byb3BzOiB7fSxcblxuXHQvLyBHZXQgYW5kIHNldCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00gTm9kZVxuXHRzdHlsZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlLCBleHRyYSApIHtcblxuXHRcdC8vIERvbid0IHNldCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuXHRcdGlmICggIWVsZW0gfHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4IHx8ICFlbGVtLnN0eWxlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZVxuXHRcdHZhciByZXQsIHR5cGUsIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBjYW1lbENhc2UoIG5hbWUgKSxcblx0XHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKSxcblx0XHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZS4gV2UgZG9uJ3Rcblx0XHQvLyB3YW50IHRvIHF1ZXJ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gR2V0cyBob29rIGZvciB0aGUgcHJlZml4ZWQgdmVyc2lvbiwgdGhlbiB1bnByZWZpeGVkIHZlcnNpb25cblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcblxuXHRcdC8vIENoZWNrIGlmIHdlJ3JlIHNldHRpbmcgYSB2YWx1ZVxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHR5cGUgPSB0eXBlb2YgdmFsdWU7XG5cblx0XHRcdC8vIENvbnZlcnQgXCIrPVwiIG9yIFwiLT1cIiB0byByZWxhdGl2ZSBudW1iZXJzICh0cmFjLTczNDUpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgJiYgKCByZXQgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJiByZXRbIDEgXSApIHtcblx0XHRcdFx0dmFsdWUgPSBhZGp1c3RDU1MoIGVsZW0sIG5hbWUsIHJldCApO1xuXG5cdFx0XHRcdC8vIEZpeGVzIGJ1ZyB0cmFjLTkyMzdcblx0XHRcdFx0dHlwZSA9IFwibnVtYmVyXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IG51bGwgYW5kIE5hTiB2YWx1ZXMgYXJlbid0IHNldCAodHJhYy03MTE2KVxuXHRcdFx0aWYgKCB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlICE9PSB2YWx1ZSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIG51bWJlciB3YXMgcGFzc2VkIGluLCBhZGQgdGhlIHVuaXQgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJvcGVydGllcylcblx0XHRcdC8vIFRoZSBpc0N1c3RvbVByb3AgY2hlY2sgY2FuIGJlIHJlbW92ZWQgaW4galF1ZXJ5IDQuMCB3aGVuIHdlIG9ubHkgYXV0by1hcHBlbmRcblx0XHRcdC8vIFwicHhcIiB0byBhIGZldyBoYXJkY29kZWQgdmFsdWVzLlxuXHRcdFx0aWYgKCB0eXBlID09PSBcIm51bWJlclwiICYmICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRcdHZhbHVlICs9IHJldCAmJiByZXRbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIG9yaWdOYW1lIF0gPyBcIlwiIDogXCJweFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGJhY2tncm91bmQtKiBwcm9wcyBhZmZlY3Qgb3JpZ2luYWwgY2xvbmUncyB2YWx1ZXNcblx0XHRcdGlmICggIXN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlICYmIHZhbHVlID09PSBcIlwiICYmIG5hbWUuaW5kZXhPZiggXCJiYWNrZ3JvdW5kXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IFwiaW5oZXJpdFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWVcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fFxuXHRcdFx0XHQoIHZhbHVlID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0aWYgKCBpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRcdFx0c3R5bGUuc2V0UHJvcGVydHkoIG5hbWUsIHZhbHVlICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgbm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE90aGVyd2lzZSBqdXN0IGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0XG5cdFx0XHRyZXR1cm4gc3R5bGVbIG5hbWUgXTtcblx0XHR9XG5cdH0sXG5cblx0Y3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZXh0cmEsIHN0eWxlcyApIHtcblx0XHR2YXIgdmFsLCBudW0sIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBjYW1lbENhc2UoIG5hbWUgKSxcblx0XHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZS4gV2UgZG9uJ3Rcblx0XHQvLyB3YW50IHRvIG1vZGlmeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIFRyeSBwcmVmaXhlZCBuYW1lIGZvbGxvd2VkIGJ5IHRoZSB1bnByZWZpeGVkIG5hbWVcblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcblxuXHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICkge1xuXHRcdFx0dmFsID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0XG5cdFx0aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBcIm5vcm1hbFwiIHRvIGNvbXB1dGVkIHZhbHVlXG5cdFx0aWYgKCB2YWwgPT09IFwibm9ybWFsXCIgJiYgbmFtZSBpbiBjc3NOb3JtYWxUcmFuc2Zvcm0gKSB7XG5cdFx0XHR2YWwgPSBjc3NOb3JtYWxUcmFuc2Zvcm1bIG5hbWUgXTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIG51bWVyaWMgaWYgZm9yY2VkIG9yIGEgcXVhbGlmaWVyIHdhcyBwcm92aWRlZCBhbmQgdmFsIGxvb2tzIG51bWVyaWNcblx0XHRpZiAoIGV4dHJhID09PSBcIlwiIHx8IGV4dHJhICkge1xuXHRcdFx0bnVtID0gcGFyc2VGbG9hdCggdmFsICk7XG5cdFx0XHRyZXR1cm4gZXh0cmEgPT09IHRydWUgfHwgaXNGaW5pdGUoIG51bSApID8gbnVtIHx8IDAgOiB2YWw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbDtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImhlaWdodFwiLCBcIndpZHRoXCIgXSwgZnVuY3Rpb24oIF9pLCBkaW1lbnNpb24gKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgZGltZW5zaW9uIF0gPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJhICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHQvLyBDZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZvIGlmIHdlIGludmlzaWJseSBzaG93IHRoZW1cblx0XHRcdFx0Ly8gYnV0IGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlzcGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXRcblx0XHRcdFx0cmV0dXJuIHJkaXNwbGF5c3dhcC50ZXN0KCBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApICkgJiZcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4K1xuXHRcdFx0XHRcdC8vIFRhYmxlIGNvbHVtbnMgaW4gU2FmYXJpIGhhdmUgbm9uLXplcm8gb2Zmc2V0V2lkdGggJiB6ZXJvXG5cdFx0XHRcdFx0Ly8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggdW5sZXNzIGRpc3BsYXkgaXMgY2hhbmdlZC5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHRcdFx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlXG5cdFx0XHRcdFx0Ly8gaW4gSUUgdGhyb3dzIGFuIGVycm9yLlxuXHRcdFx0XHRcdCggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggfHwgIWVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKSA/XG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0XHRcdH0gKSA6XG5cdFx0XHRcdFx0Z2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7XG5cdFx0XHR2YXIgbWF0Y2hlcyxcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHRcdFx0Ly8gT25seSByZWFkIHN0eWxlcy5wb3NpdGlvbiBpZiB0aGUgdGVzdCBoYXMgYSBjaGFuY2UgdG8gZmFpbFxuXHRcdFx0XHQvLyB0byBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LlxuXHRcdFx0XHRzY3JvbGxib3hTaXplQnVnZ3kgPSAhc3VwcG9ydC5zY3JvbGxib3hTaXplKCkgJiZcblx0XHRcdFx0XHRzdHlsZXMucG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIixcblxuXHRcdFx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC0zOTkxKVxuXHRcdFx0XHRib3hTaXppbmdOZWVkZWQgPSBzY3JvbGxib3hTaXplQnVnZ3kgfHwgZXh0cmEsXG5cdFx0XHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0c3VidHJhY3QgPSBleHRyYSA/XG5cdFx0XHRcdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0XHRcdFx0ZWxlbSxcblx0XHRcdFx0XHRcdGRpbWVuc2lvbixcblx0XHRcdFx0XHRcdGV4dHJhLFxuXHRcdFx0XHRcdFx0aXNCb3JkZXJCb3gsXG5cdFx0XHRcdFx0XHRzdHlsZXNcblx0XHRcdFx0XHQpIDpcblx0XHRcdFx0XHQwO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB1bnJlbGlhYmxlIGJvcmRlci1ib3ggZGltZW5zaW9ucyBieSBjb21wYXJpbmcgb2Zmc2V0KiB0byBjb21wdXRlZCBhbmRcblx0XHRcdC8vIGZha2luZyBhIGNvbnRlbnQtYm94IHRvIGdldCBib3JkZXIgYW5kIHBhZGRpbmcgKGdoLTM2OTkpXG5cdFx0XHRpZiAoIGlzQm9yZGVyQm94ICYmIHNjcm9sbGJveFNpemVCdWdneSApIHtcblx0XHRcdFx0c3VidHJhY3QgLT0gTWF0aC5jZWlsKFxuXHRcdFx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRcdFx0cGFyc2VGbG9hdCggc3R5bGVzWyBkaW1lbnNpb24gXSApIC1cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgXCJib3JkZXJcIiwgZmFsc2UsIHN0eWxlcyApIC1cblx0XHRcdFx0XHQwLjVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCB0byBwaXhlbHMgaWYgdmFsdWUgYWRqdXN0bWVudCBpcyBuZWVkZWRcblx0XHRcdGlmICggc3VidHJhY3QgJiYgKCBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiZcblx0XHRcdFx0KCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgIT09IFwicHhcIiApIHtcblxuXHRcdFx0XHRlbGVtLnN0eWxlWyBkaW1lbnNpb24gXSA9IHZhbHVlO1xuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIGRpbWVuc2lvbiApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApO1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmNzc0hvb2tzLm1hcmdpbkxlZnQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5MZWZ0LFxuXHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdHJldHVybiAoIHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIgKSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtXG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgeyBtYXJnaW5MZWZ0OiAwIH0sIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblx0XHRcdFx0XHR9IClcblx0XHRcdCkgKyBcInB4XCI7XG5cdFx0fVxuXHR9XG4pO1xuXG4vLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBwcm9wZXJ0aWVzXG5qUXVlcnkuZWFjaCgge1xuXHRtYXJnaW46IFwiXCIsXG5cdHBhZGRpbmc6IFwiXCIsXG5cdGJvcmRlcjogXCJXaWR0aFwiXG59LCBmdW5jdGlvbiggcHJlZml4LCBzdWZmaXggKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7XG5cdFx0ZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgaSA9IDAsXG5cdFx0XHRcdGV4cGFuZGVkID0ge30sXG5cblx0XHRcdFx0Ly8gQXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nXG5cdFx0XHRcdHBhcnRzID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUuc3BsaXQoIFwiIFwiICkgOiBbIHZhbHVlIF07XG5cblx0XHRcdGZvciAoIDsgaSA8IDQ7IGkrKyApIHtcblx0XHRcdFx0ZXhwYW5kZWRbIHByZWZpeCArIGNzc0V4cGFuZFsgaSBdICsgc3VmZml4IF0gPVxuXHRcdFx0XHRcdHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGV4cGFuZGVkO1xuXHRcdH1cblx0fTtcblxuXHRpZiAoIHByZWZpeCAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdLnNldCA9IHNldFBvc2l0aXZlTnVtYmVyO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0Y3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0dmFyIHN0eWxlcywgbGVuLFxuXHRcdFx0XHRtYXAgPSB7fSxcblx0XHRcdFx0aSA9IDA7XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggbmFtZSApICkge1xuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKTtcblx0XHRcdFx0bGVuID0gbmFtZS5sZW5ndGg7XG5cblx0XHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0bWFwWyBuYW1lWyBpIF0gXSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWVbIGkgXSwgZmFsc2UsIHN0eWxlcyApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG1hcDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOlxuXHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7XG5cdFx0fSwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH1cbn0gKTtcblxuXG5mdW5jdGlvbiBUd2VlbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKSB7XG5cdHJldHVybiBuZXcgVHdlZW4ucHJvdG90eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7XG59XG5qUXVlcnkuVHdlZW4gPSBUd2VlbjtcblxuVHdlZW4ucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogVHdlZW4sXG5cdGluaXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZywgdW5pdCApIHtcblx0XHR0aGlzLmVsZW0gPSBlbGVtO1xuXHRcdHRoaXMucHJvcCA9IHByb3A7XG5cdFx0dGhpcy5lYXNpbmcgPSBlYXNpbmcgfHwgalF1ZXJ5LmVhc2luZy5fZGVmYXVsdDtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHRoaXMuc3RhcnQgPSB0aGlzLm5vdyA9IHRoaXMuY3VyKCk7XG5cdFx0dGhpcy5lbmQgPSBlbmQ7XG5cdFx0dGhpcy51bml0ID0gdW5pdCB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0fSxcblx0Y3VyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0cmV0dXJuIGhvb2tzICYmIGhvb2tzLmdldCA/XG5cdFx0XHRob29rcy5nZXQoIHRoaXMgKSA6XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KCB0aGlzICk7XG5cdH0sXG5cdHJ1bjogZnVuY3Rpb24oIHBlcmNlbnQgKSB7XG5cdFx0dmFyIGVhc2VkLFxuXHRcdFx0aG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0galF1ZXJ5LmVhc2luZ1sgdGhpcy5lYXNpbmcgXShcblx0XHRcdFx0cGVyY2VudCwgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0gcGVyY2VudDtcblx0XHR9XG5cdFx0dGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0gdGhpcy5zdGFydCApICogZWFzZWQgKyB0aGlzLnN0YXJ0O1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuc3RlcCApIHtcblx0XHRcdHRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnNldCApIHtcblx0XHRcdGhvb2tzLnNldCggdGhpcyApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KCB0aGlzICk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59O1xuXG5Ud2Vlbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGUgPSBUd2Vlbi5wcm90b3R5cGU7XG5cblR3ZWVuLnByb3BIb29rcyA9IHtcblx0X2RlZmF1bHQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRcdHZhciByZXN1bHQ7XG5cblx0XHRcdC8vIFVzZSBhIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGRpcmVjdGx5IHdoZW4gaXQgaXMgbm90IGEgRE9NIGVsZW1lbnQsXG5cdFx0XHQvLyBvciB3aGVuIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHN0eWxlIHByb3BlcnR5IHRoYXQgZXhpc3RzLlxuXHRcdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICE9PSAxIHx8XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSAhPSBudWxsICYmIHR3ZWVuLmVsZW0uc3R5bGVbIHR3ZWVuLnByb3AgXSA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQYXNzaW5nIGFuIGVtcHR5IHN0cmluZyBhcyBhIDNyZCBwYXJhbWV0ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2FsbHlcblx0XHRcdC8vIGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBhIHN0cmluZyBpZiB0aGUgcGFyc2UgZmFpbHMuXG5cdFx0XHQvLyBTaW1wbGUgdmFsdWVzIHN1Y2ggYXMgXCIxMHB4XCIgYXJlIHBhcnNlZCB0byBGbG9hdDtcblx0XHRcdC8vIGNvbXBsZXggdmFsdWVzIHN1Y2ggYXMgXCJyb3RhdGUoMXJhZClcIiBhcmUgcmV0dXJuZWQgYXMtaXMuXG5cdFx0XHRyZXN1bHQgPSBqUXVlcnkuY3NzKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCBcIlwiICk7XG5cblx0XHRcdC8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgXCJhdXRvXCIgYXJlIGNvbnZlcnRlZCB0byAwLlxuXHRcdFx0cmV0dXJuICFyZXN1bHQgfHwgcmVzdWx0ID09PSBcImF1dG9cIiA/IDAgOiByZXN1bHQ7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblxuXHRcdFx0Ly8gVXNlIHN0ZXAgaG9vayBmb3IgYmFjayBjb21wYXQuXG5cdFx0XHQvLyBVc2UgY3NzSG9vayBpZiBpdHMgdGhlcmUuXG5cdFx0XHQvLyBVc2UgLnN0eWxlIGlmIGF2YWlsYWJsZSBhbmQgdXNlIHBsYWluIHByb3BlcnRpZXMgd2hlcmUgYXZhaWxhYmxlLlxuXHRcdFx0aWYgKCBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdICkge1xuXHRcdFx0XHRqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApO1xuXHRcdFx0fSBlbHNlIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cdFx0XHRcdGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdIHx8XG5cdFx0XHRcdFx0dHdlZW4uZWxlbS5zdHlsZVsgZmluYWxQcm9wTmFtZSggdHdlZW4ucHJvcCApIF0gIT0gbnVsbCApICkge1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG4vLyBQYW5pYyBiYXNlZCBhcHByb2FjaCB0byBzZXR0aW5nIHRoaW5ncyBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblR3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCA9IHtcblx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5lYXNpbmcgPSB7XG5cdGxpbmVhcjogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIHA7XG5cdH0sXG5cdHN3aW5nOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAgKiBNYXRoLlBJICkgLyAyO1xuXHR9LFxuXHRfZGVmYXVsdDogXCJzd2luZ1wiXG59O1xuXG5qUXVlcnkuZnggPSBUd2Vlbi5wcm90b3R5cGUuaW5pdDtcblxuLy8gQmFjayBjb21wYXQgPDEuOCBleHRlbnNpb24gcG9pbnRcbmpRdWVyeS5meC5zdGVwID0ge307XG5cblxuXG5cbnZhclxuXHRmeE5vdywgaW5Qcm9ncmVzcyxcblx0cmZ4dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sXG5cdHJydW4gPSAvcXVldWVIb29rcyQvO1xuXG5mdW5jdGlvbiBzY2hlZHVsZSgpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdGlmICggZG9jdW1lbnQuaGlkZGVuID09PSBmYWxzZSAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lICkge1xuXHRcdFx0d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSggc2NoZWR1bGUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHNjaGVkdWxlLCBqUXVlcnkuZnguaW50ZXJ2YWwgKTtcblx0XHR9XG5cblx0XHRqUXVlcnkuZngudGljaygpO1xuXHR9XG59XG5cbi8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHlcbmZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0ZnhOb3cgPSB1bmRlZmluZWQ7XG5cdH0gKTtcblx0cmV0dXJuICggZnhOb3cgPSBEYXRlLm5vdygpICk7XG59XG5cbi8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9uXG5mdW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkge1xuXHR2YXIgd2hpY2gsXG5cdFx0aSA9IDAsXG5cdFx0YXR0cnMgPSB7IGhlaWdodDogdHlwZSB9O1xuXG5cdC8vIElmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVlcyxcblx0Ly8gb3RoZXJ3aXNlIHN0ZXAgdmFsdWUgaXMgMiB0byBza2lwIG92ZXIgTGVmdCBhbmQgUmlnaHRcblx0aW5jbHVkZVdpZHRoID0gaW5jbHVkZVdpZHRoID8gMSA6IDA7XG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHtcblx0XHR3aGljaCA9IGNzc0V4cGFuZFsgaSBdO1xuXHRcdGF0dHJzWyBcIm1hcmdpblwiICsgd2hpY2ggXSA9IGF0dHJzWyBcInBhZGRpbmdcIiArIHdoaWNoIF0gPSB0eXBlO1xuXHR9XG5cblx0aWYgKCBpbmNsdWRlV2lkdGggKSB7XG5cdFx0YXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTtcblx0fVxuXG5cdHJldHVybiBhdHRycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlVHdlZW4oIHZhbHVlLCBwcm9wLCBhbmltYXRpb24gKSB7XG5cdHZhciB0d2Vlbixcblx0XHRjb2xsZWN0aW9uID0gKCBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXSApLmNvbmNhdCggQW5pbWF0aW9uLnR3ZWVuZXJzWyBcIipcIiBdICksXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggKCB0d2VlbiA9IGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBwcm9wLCB2YWx1ZSApICkgKSB7XG5cblx0XHRcdC8vIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQcmVmaWx0ZXIoIGVsZW0sIHByb3BzLCBvcHRzICkge1xuXHR2YXIgcHJvcCwgdmFsdWUsIHRvZ2dsZSwgaG9va3MsIG9sZGZpcmUsIHByb3BUd2VlbiwgcmVzdG9yZURpc3BsYXksIGRpc3BsYXksXG5cdFx0aXNCb3ggPSBcIndpZHRoXCIgaW4gcHJvcHMgfHwgXCJoZWlnaHRcIiBpbiBwcm9wcyxcblx0XHRhbmltID0gdGhpcyxcblx0XHRvcmlnID0ge30sXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlLFxuXHRcdGhpZGRlbiA9IGVsZW0ubm9kZVR5cGUgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICksXG5cdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZnhzaG93XCIgKTtcblxuXHQvLyBRdWV1ZS1za2lwcGluZyBhbmltYXRpb25zIGhpamFjayB0aGUgZnggaG9va3Ncblx0aWYgKCAhb3B0cy5xdWV1ZSApIHtcblx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgXCJmeFwiICk7XG5cdFx0aWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkge1xuXHRcdFx0aG9va3MudW5xdWV1ZWQgPSAwO1xuXHRcdFx0b2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggIWhvb2tzLnVucXVldWVkICkge1xuXHRcdFx0XHRcdG9sZGZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aG9va3MudW5xdWV1ZWQrKztcblxuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5zdXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVyIGlzIGNhbGxlZCBiZWZvcmUgdGhpcyBjb21wbGV0ZXNcblx0XHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aG9va3MudW5xdWV1ZWQtLTtcblx0XHRcdFx0aWYgKCAhalF1ZXJ5LnF1ZXVlKCBlbGVtLCBcImZ4XCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRGV0ZWN0IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdGZvciAoIHByb3AgaW4gcHJvcHMgKSB7XG5cdFx0dmFsdWUgPSBwcm9wc1sgcHJvcCBdO1xuXHRcdGlmICggcmZ4dHlwZXMudGVzdCggdmFsdWUgKSApIHtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgcHJvcCBdO1xuXHRcdFx0dG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSBcInRvZ2dsZVwiO1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gKCBoaWRkZW4gPyBcImhpZGVcIiA6IFwic2hvd1wiICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJldGVuZCB0byBiZSBoaWRkZW4gaWYgdGhpcyBpcyBhIFwic2hvd1wiIGFuZFxuXHRcdFx0XHQvLyB0aGVyZSBpcyBzdGlsbCBkYXRhIGZyb20gYSBzdG9wcGVkIHNob3cvaGlkZVxuXHRcdFx0XHRpZiAoIHZhbHVlID09PSBcInNob3dcIiAmJiBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gdHJ1ZTtcblxuXHRcdFx0XHQvLyBJZ25vcmUgYWxsIG90aGVyIG5vLW9wIHNob3cvaGlkZSBkYXRhXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG9yaWdbIHByb3AgXSA9IGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQmFpbCBvdXQgaWYgdGhpcyBpcyBhIG5vLW9wIGxpa2UgLmhpZGUoKS5oaWRlKClcblx0cHJvcFR3ZWVuID0gIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wcyApO1xuXHRpZiAoICFwcm9wVHdlZW4gJiYgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIG9yaWcgKSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZXN0cmljdCBcIm92ZXJmbG93XCIgYW5kIFwiZGlzcGxheVwiIHN0eWxlcyBkdXJpbmcgYm94IGFuaW1hdGlvbnNcblx0aWYgKCBpc0JveCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdC8vIFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9lcyBub3QgaW5mZXIgdGhlIHNob3J0aGFuZFxuXHRcdC8vIGZyb20gaWRlbnRpY2FsbHktdmFsdWVkIG92ZXJmbG93WCBhbmQgb3ZlcmZsb3dZIGFuZCBFZGdlIGp1c3QgbWlycm9yc1xuXHRcdC8vIHRoZSBvdmVyZmxvd1ggdmFsdWUgdGhlcmUuXG5cdFx0b3B0cy5vdmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93WCwgc3R5bGUub3ZlcmZsb3dZIF07XG5cblx0XHQvLyBJZGVudGlmeSBhIGRpc3BsYXkgdHlwZSwgcHJlZmVycmluZyBvbGQgc2hvdy9oaWRlIGRhdGEgb3ZlciB0aGUgQ1NTIGNhc2NhZGVcblx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFTaG93ICYmIGRhdGFTaG93LmRpc3BsYXk7XG5cdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0fVxuXHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ICkge1xuXHRcdFx0XHRkaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEdldCBub25lbXB0eSB2YWx1ZShzKSBieSB0ZW1wb3JhcmlseSBmb3JjaW5nIHZpc2liaWxpdHlcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5IHx8IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQW5pbWF0ZSBpbmxpbmUgZWxlbWVudHMgYXMgaW5saW5lLWJsb2NrXG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcImlubGluZVwiIHx8IGRpc3BsYXkgPT09IFwiaW5saW5lLWJsb2NrXCIgJiYgcmVzdG9yZURpc3BsYXkgIT0gbnVsbCApIHtcblx0XHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJmbG9hdFwiICkgPT09IFwibm9uZVwiICkge1xuXG5cdFx0XHRcdC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGRpc3BsYXkgdmFsdWUgYXQgdGhlIGVuZCBvZiBwdXJlIHNob3cvaGlkZSBhbmltYXRpb25zXG5cdFx0XHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5ID0gc3R5bGUuZGlzcGxheTtcblx0XHRcdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGlzcGxheSA9PT0gXCJub25lXCIgPyBcIlwiIDogZGlzcGxheTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBvcHRzLm92ZXJmbG93ICkge1xuXHRcdHN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRzdHlsZS5vdmVyZmxvdyA9IG9wdHMub3ZlcmZsb3dbIDAgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WCA9IG9wdHMub3ZlcmZsb3dbIDEgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WSA9IG9wdHMub3ZlcmZsb3dbIDIgXTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBJbXBsZW1lbnQgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0cHJvcFR3ZWVuID0gZmFsc2U7XG5cdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblxuXHRcdC8vIEdlbmVyYWwgc2hvdy9oaWRlIHNldHVwIGZvciB0aGlzIGVsZW1lbnQgYW5pbWF0aW9uXG5cdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0aWYgKCBkYXRhU2hvdyApIHtcblx0XHRcdFx0aWYgKCBcImhpZGRlblwiIGluIGRhdGFTaG93ICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IGRhdGFTaG93LmhpZGRlbjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIFwiZnhzaG93XCIsIHsgZGlzcGxheTogcmVzdG9yZURpc3BsYXkgfSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdG9yZSBoaWRkZW4vdmlzaWJsZSBmb3IgdG9nZ2xlIHNvIGAuc3RvcCgpLnRvZ2dsZSgpYCBcInJldmVyc2VzXCJcblx0XHRcdGlmICggdG9nZ2xlICkge1xuXHRcdFx0XHRkYXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTaG93IGVsZW1lbnRzIGJlZm9yZSBhbmltYXRpbmcgdGhlbVxuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuXHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRcdC8vIFRoZSBmaW5hbCBzdGVwIG9mIGEgXCJoaWRlXCIgYW5pbWF0aW9uIGlzIGFjdHVhbGx5IGhpZGluZyB0aGUgZWxlbWVudFxuXHRcdFx0XHRpZiAoICFoaWRkZW4gKSB7XG5cdFx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cdFx0XHRcdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Ly8gUGVyLXByb3BlcnR5IHNldHVwXG5cdFx0cHJvcFR3ZWVuID0gY3JlYXRlVHdlZW4oIGhpZGRlbiA/IGRhdGFTaG93WyBwcm9wIF0gOiAwLCBwcm9wLCBhbmltICk7XG5cdFx0aWYgKCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7XG5cdFx0XHRkYXRhU2hvd1sgcHJvcCBdID0gcHJvcFR3ZWVuLnN0YXJ0O1xuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHByb3BUd2Vlbi5lbmQgPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRcdHByb3BUd2Vlbi5zdGFydCA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkge1xuXHR2YXIgaW5kZXgsIG5hbWUsIGVhc2luZywgdmFsdWUsIGhvb2tzO1xuXG5cdC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhwYW5kIGNzc0hvb2sgcGFzc1xuXHRmb3IgKCBpbmRleCBpbiBwcm9wcyApIHtcblx0XHRuYW1lID0gY2FtZWxDYXNlKCBpbmRleCApO1xuXHRcdGVhc2luZyA9IHNwZWNpYWxFYXNpbmdbIG5hbWUgXTtcblx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdO1xuXHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdGVhc2luZyA9IHZhbHVlWyAxIF07XG5cdFx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdID0gdmFsdWVbIDAgXTtcblx0XHR9XG5cblx0XHRpZiAoIGluZGV4ICE9PSBuYW1lICkge1xuXHRcdFx0cHJvcHNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBpbmRleCBdO1xuXHRcdH1cblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF07XG5cdFx0aWYgKCBob29rcyAmJiBcImV4cGFuZFwiIGluIGhvb2tzICkge1xuXHRcdFx0dmFsdWUgPSBob29rcy5leHBhbmQoIHZhbHVlICk7XG5cdFx0XHRkZWxldGUgcHJvcHNbIG5hbWUgXTtcblxuXHRcdFx0Ly8gTm90IHF1aXRlICQuZXh0ZW5kLCB0aGlzIHdvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBrZXlzLlxuXHRcdFx0Ly8gUmV1c2luZyAnaW5kZXgnIGJlY2F1c2Ugd2UgaGF2ZSB0aGUgY29ycmVjdCBcIm5hbWVcIlxuXHRcdFx0Zm9yICggaW5kZXggaW4gdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggISggaW5kZXggaW4gcHJvcHMgKSApIHtcblx0XHRcdFx0XHRwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyBpbmRleCBdO1xuXHRcdFx0XHRcdHNwZWNpYWxFYXNpbmdbIGluZGV4IF0gPSBlYXNpbmc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3BlY2lhbEVhc2luZ1sgbmFtZSBdID0gZWFzaW5nO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBBbmltYXRpb24oIGVsZW0sIHByb3BlcnRpZXMsIG9wdGlvbnMgKSB7XG5cdHZhciByZXN1bHQsXG5cdFx0c3RvcHBlZCxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gQW5pbWF0aW9uLnByZWZpbHRlcnMubGVuZ3RoLFxuXHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRG9uJ3QgbWF0Y2ggZWxlbSBpbiB0aGUgOmFuaW1hdGVkIHNlbGVjdG9yXG5cdFx0XHRkZWxldGUgdGljay5lbGVtO1xuXHRcdH0gKSxcblx0XHR0aWNrID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHZhciBjdXJyZW50VGltZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRcdHJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSxcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDIuMyBvbmx5XG5cdFx0XHRcdC8vIEFyY2hhaWMgY3Jhc2ggYnVnIHdvbid0IGFsbG93IHVzIHRvIHVzZSBgMSAtICggMC41IHx8IDAgKWAgKHRyYWMtMTI0OTcpXG5cdFx0XHRcdHRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24gfHwgMCxcblx0XHRcdFx0cGVyY2VudCA9IDEgLSB0ZW1wLFxuXHRcdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRcdGxlbmd0aCA9IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoO1xuXG5cdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2VudCApO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0gKTtcblxuXHRcdFx0Ly8gSWYgdGhlcmUncyBtb3JlIHRvIGRvLCB5aWVsZFxuXHRcdFx0aWYgKCBwZXJjZW50IDwgMSAmJiBsZW5ndGggKSB7XG5cdFx0XHRcdHJldHVybiByZW1haW5pbmc7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHRoaXMgd2FzIGFuIGVtcHR5IGFuaW1hdGlvbiwgc3ludGhlc2l6ZSBhIGZpbmFsIHByb2dyZXNzIG5vdGlmaWNhdGlvblxuXHRcdFx0aWYgKCAhbGVuZ3RoICkge1xuXHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlc29sdmUgdGhlIGFuaW1hdGlvbiBhbmQgcmVwb3J0IGl0cyBjb25jbHVzaW9uXG5cdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0YW5pbWF0aW9uID0gZGVmZXJyZWQucHJvbWlzZSgge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdHByb3BzOiBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcGVydGllcyApLFxuXHRcdFx0b3B0czogalF1ZXJ5LmV4dGVuZCggdHJ1ZSwge1xuXHRcdFx0XHRzcGVjaWFsRWFzaW5nOiB7fSxcblx0XHRcdFx0ZWFzaW5nOiBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0XG5cdFx0XHR9LCBvcHRpb25zICksXG5cdFx0XHRvcmlnaW5hbFByb3BlcnRpZXM6IHByb3BlcnRpZXMsXG5cdFx0XHRvcmlnaW5hbE9wdGlvbnM6IG9wdGlvbnMsXG5cdFx0XHRzdGFydFRpbWU6IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRcdHR3ZWVuczogW10sXG5cdFx0XHRjcmVhdGVUd2VlbjogZnVuY3Rpb24oIHByb3AsIGVuZCApIHtcblx0XHRcdFx0dmFyIHR3ZWVuID0galF1ZXJ5LlR3ZWVuKCBlbGVtLCBhbmltYXRpb24ub3B0cywgcHJvcCwgZW5kLFxuXHRcdFx0XHRcdGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0cy5lYXNpbmcgKTtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVucy5wdXNoKCB0d2VlbiApO1xuXHRcdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0XHR9LFxuXHRcdFx0c3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7XG5cdFx0XHRcdHZhciBpbmRleCA9IDAsXG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVuZCwgd2Ugd2FudCB0byBydW4gYWxsIHRoZSB0d2VlbnNcblx0XHRcdFx0XHQvLyBvdGhlcndpc2Ugd2Ugc2tpcCB0aGlzIHBhcnRcblx0XHRcdFx0XHRsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwO1xuXHRcdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3RvcHBlZCA9IHRydWU7XG5cdFx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIDEgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lzZSwgcmVqZWN0XG5cdFx0XHRcdGlmICggZ290b0VuZCApIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fSApLFxuXHRcdHByb3BzID0gYW5pbWF0aW9uLnByb3BzO1xuXG5cdHByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7XG5cblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRyZXN1bHQgPSBBbmltYXRpb24ucHJlZmlsdGVyc1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyApO1xuXHRcdGlmICggcmVzdWx0ICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCByZXN1bHQuc3RvcCApICkge1xuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIGFuaW1hdGlvbi5lbGVtLCBhbmltYXRpb24ub3B0cy5xdWV1ZSApLnN0b3AgPVxuXHRcdFx0XHRcdHJlc3VsdC5zdG9wLmJpbmQoIHJlc3VsdCApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHRqUXVlcnkubWFwKCBwcm9wcywgY3JlYXRlVHdlZW4sIGFuaW1hdGlvbiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggYW5pbWF0aW9uLm9wdHMuc3RhcnQgKSApIHtcblx0XHRhbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTtcblx0fVxuXG5cdC8vIEF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zXG5cdGFuaW1hdGlvblxuXHRcdC5wcm9ncmVzcyggYW5pbWF0aW9uLm9wdHMucHJvZ3Jlc3MgKVxuXHRcdC5kb25lKCBhbmltYXRpb24ub3B0cy5kb25lLCBhbmltYXRpb24ub3B0cy5jb21wbGV0ZSApXG5cdFx0LmZhaWwoIGFuaW1hdGlvbi5vcHRzLmZhaWwgKVxuXHRcdC5hbHdheXMoIGFuaW1hdGlvbi5vcHRzLmFsd2F5cyApO1xuXG5cdGpRdWVyeS5meC50aW1lcihcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aWNrLCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0YW5pbTogYW5pbWF0aW9uLFxuXHRcdFx0cXVldWU6IGFuaW1hdGlvbi5vcHRzLnF1ZXVlXG5cdFx0fSApXG5cdCk7XG5cblx0cmV0dXJuIGFuaW1hdGlvbjtcbn1cblxualF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRlbmQoIEFuaW1hdGlvbiwge1xuXG5cdHR3ZWVuZXJzOiB7XG5cdFx0XCIqXCI6IFsgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkge1xuXHRcdFx0dmFyIHR3ZWVuID0gdGhpcy5jcmVhdGVUd2VlbiggcHJvcCwgdmFsdWUgKTtcblx0XHRcdGFkanVzdENTUyggdHdlZW4uZWxlbSwgcHJvcCwgcmNzc051bS5leGVjKCB2YWx1ZSApLCB0d2VlbiApO1xuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH0gXVxuXHR9LFxuXG5cdHR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBwcm9wcyApICkge1xuXHRcdFx0Y2FsbGJhY2sgPSBwcm9wcztcblx0XHRcdHByb3BzID0gWyBcIipcIiBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcm9wcyA9IHByb3BzLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cdFx0fVxuXG5cdFx0dmFyIHByb3AsXG5cdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0cHJvcCA9IHByb3BzWyBpbmRleCBdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gPSBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9LFxuXG5cdHByZWZpbHRlcnM6IFsgZGVmYXVsdFByZWZpbHRlciBdLFxuXG5cdHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkge1xuXHRcdGlmICggcHJlcGVuZCApIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5zcGVlZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHtcblx0dmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gXCJvYmplY3RcIiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDoge1xuXHRcdGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8XG5cdFx0XHRpc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLFxuXHRcdGR1cmF0aW9uOiBzcGVlZCxcblx0XHRlYXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgIWlzRnVuY3Rpb24oIGVhc2luZyApICYmIGVhc2luZ1xuXHR9O1xuXG5cdC8vIEdvIHRvIHRoZSBlbmQgc3RhdGUgaWYgZnggYXJlIG9mZlxuXHRpZiAoIGpRdWVyeS5meC5vZmYgKSB7XG5cdFx0b3B0LmR1cmF0aW9uID0gMDtcblxuXHR9IGVsc2Uge1xuXHRcdGlmICggdHlwZW9mIG9wdC5kdXJhdGlvbiAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdGlmICggb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgKSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHNbIG9wdC5kdXJhdGlvbiBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIE5vcm1hbGl6ZSBvcHQucXVldWUgLSB0cnVlL3VuZGVmaW5lZC9udWxsIC0+IFwiZnhcIlxuXHRpZiAoIG9wdC5xdWV1ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0gdHJ1ZSApIHtcblx0XHRvcHQucXVldWUgPSBcImZ4XCI7XG5cdH1cblxuXHQvLyBRdWV1ZWluZ1xuXHRvcHQub2xkID0gb3B0LmNvbXBsZXRlO1xuXG5cdG9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggb3B0Lm9sZCApICkge1xuXHRcdFx0b3B0Lm9sZC5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHQucXVldWUgKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBvcHQ7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHtcblxuXHRcdC8vIFNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMFxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggaXNIaWRkZW5XaXRoaW5UcmVlICkuY3NzKCBcIm9wYWNpdHlcIiwgMCApLnNob3coKVxuXG5cdFx0XHQvLyBBbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWRcblx0XHRcdC5lbmQoKS5hbmltYXRlKCB7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH0sXG5cdGFuaW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHR2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLFxuXHRcdFx0b3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLFxuXHRcdFx0ZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBPcGVyYXRlIG9uIGEgY29weSBvZiBwcm9wIHNvIHBlci1wcm9wZXJ0eSBlYXNpbmcgd29uJ3QgYmUgbG9zdFxuXHRcdFx0XHR2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5LmV4dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7XG5cblx0XHRcdFx0Ly8gRW1wdHkgYW5pbWF0aW9ucywgb3IgZmluaXNoaW5nIHJlc29sdmVzIGltbWVkaWF0ZWx5XG5cdFx0XHRcdGlmICggZW1wdHkgfHwgZGF0YVByaXYuZ2V0KCB0aGlzLCBcImZpbmlzaFwiICkgKSB7XG5cdFx0XHRcdFx0YW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRkb0FuaW1hdGlvbi5maW5pc2ggPSBkb0FuaW1hdGlvbjtcblxuXHRcdHJldHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNlID9cblx0XHRcdHRoaXMuZWFjaCggZG9BbmltYXRpb24gKSA6XG5cdFx0XHR0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9uICk7XG5cdH0sXG5cdHN0b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVhclF1ZXVlLCBnb3RvRW5kICkge1xuXHRcdHZhciBzdG9wUXVldWUgPSBmdW5jdGlvbiggaG9va3MgKSB7XG5cdFx0XHR2YXIgc3RvcCA9IGhvb2tzLnN0b3A7XG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdHN0b3AoIGdvdG9FbmQgKTtcblx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGdvdG9FbmQgPSBjbGVhclF1ZXVlO1xuXHRcdFx0Y2xlYXJRdWV1ZSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGNsZWFyUXVldWUgKSB7XG5cdFx0XHR0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkZXF1ZXVlID0gdHJ1ZSxcblx0XHRcdFx0aW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArIFwicXVldWVIb29rc1wiLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICk7XG5cblx0XHRcdGlmICggaW5kZXggKSB7XG5cdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgKSB7XG5cdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoIGluZGV4IGluIGRhdGEgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAmJiBycnVuLnRlc3QoIGluZGV4ICkgKSB7XG5cdFx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJlxuXHRcdFx0XHRcdCggdHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApICkge1xuXG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggZ290b0VuZCApO1xuXHRcdFx0XHRcdGRlcXVldWUgPSBmYWxzZTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQuXG5cdFx0XHQvLyBUaW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNoXG5cdFx0XHQvLyB3aWxsIGRlcXVldWUgYnV0IG9ubHkgaWYgdGhleSB3ZXJlIGdvdG9FbmQuXG5cdFx0XHRpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXHRmaW5pc2g6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdGlmICggdHlwZSAhPT0gZmFsc2UgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGluZGV4LFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICksXG5cdFx0XHRcdHF1ZXVlID0gZGF0YVsgdHlwZSArIFwicXVldWVcIiBdLFxuXHRcdFx0XHRob29rcyA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlSG9va3NcIiBdLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRsZW5ndGggPSBxdWV1ZSA/IHF1ZXVlLmxlbmd0aCA6IDA7XG5cblx0XHRcdC8vIEVuYWJsZSBmaW5pc2hpbmcgZmxhZyBvbiBwcml2YXRlIGRhdGFcblx0XHRcdGRhdGEuZmluaXNoID0gdHJ1ZTtcblxuXHRcdFx0Ly8gRW1wdHkgdGhlIHF1ZXVlIGZpcnN0XG5cdFx0XHRqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIFtdICk7XG5cblx0XHRcdGlmICggaG9va3MgJiYgaG9va3Muc3RvcCApIHtcblx0XHRcdFx0aG9va3Muc3RvcC5jYWxsKCB0aGlzLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhY3RpdmUgYW5pbWF0aW9ucywgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmIHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApIHtcblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYW5pbWF0aW9ucyBpbiB0aGUgb2xkIHF1ZXVlIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0aWYgKCBxdWV1ZVsgaW5kZXggXSAmJiBxdWV1ZVsgaW5kZXggXS5maW5pc2ggKSB7XG5cdFx0XHRcdFx0cXVldWVbIGluZGV4IF0uZmluaXNoLmNhbGwoIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUdXJuIG9mZiBmaW5pc2hpbmcgZmxhZ1xuXHRcdFx0ZGVsZXRlIGRhdGEuZmluaXNoO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcInRvZ2dsZVwiLCBcInNob3dcIiwgXCJoaWRlXCIgXSwgZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHR2YXIgY3NzRm4gPSBqUXVlcnkuZm5bIG5hbWUgXTtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHNwZWVkID09IG51bGwgfHwgdHlwZW9mIHNwZWVkID09PSBcImJvb2xlYW5cIiA/XG5cdFx0XHRjc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOlxuXHRcdFx0dGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG4vLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zXG5qUXVlcnkuZWFjaCgge1xuXHRzbGlkZURvd246IGdlbkZ4KCBcInNob3dcIiApLFxuXHRzbGlkZVVwOiBnZW5GeCggXCJoaWRlXCIgKSxcblx0c2xpZGVUb2dnbGU6IGdlbkZ4KCBcInRvZ2dsZVwiICksXG5cdGZhZGVJbjogeyBvcGFjaXR5OiBcInNob3dcIiB9LFxuXHRmYWRlT3V0OiB7IG9wYWNpdHk6IFwiaGlkZVwiIH0sXG5cdGZhZGVUb2dnbGU6IHsgb3BhY2l0eTogXCJ0b2dnbGVcIiB9XG59LCBmdW5jdGlvbiggbmFtZSwgcHJvcHMgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLmFuaW1hdGUoIHByb3BzLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkudGltZXJzID0gW107XG5qUXVlcnkuZngudGljayA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdGltZXIsXG5cdFx0aSA9IDAsXG5cdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycztcblxuXHRmeE5vdyA9IERhdGUubm93KCk7XG5cblx0Zm9yICggOyBpIDwgdGltZXJzLmxlbmd0aDsgaSsrICkge1xuXHRcdHRpbWVyID0gdGltZXJzWyBpIF07XG5cblx0XHQvLyBSdW4gdGhlIHRpbWVyIGFuZCBzYWZlbHkgcmVtb3ZlIGl0IHdoZW4gZG9uZSAoYWxsb3dpbmcgZm9yIGV4dGVybmFsIHJlbW92YWwpXG5cdFx0aWYgKCAhdGltZXIoKSAmJiB0aW1lcnNbIGkgXSA9PT0gdGltZXIgKSB7XG5cdFx0XHR0aW1lcnMuc3BsaWNlKCBpLS0sIDEgKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoICF0aW1lcnMubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5meC5zdG9wKCk7XG5cdH1cblx0ZnhOb3cgPSB1bmRlZmluZWQ7XG59O1xuXG5qUXVlcnkuZngudGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7XG5cdGpRdWVyeS50aW1lcnMucHVzaCggdGltZXIgKTtcblx0alF1ZXJ5LmZ4LnN0YXJ0KCk7XG59O1xuXG5qUXVlcnkuZnguaW50ZXJ2YWwgPSAxMztcbmpRdWVyeS5meC5zdGFydCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aW5Qcm9ncmVzcyA9IHRydWU7XG5cdHNjaGVkdWxlKCk7XG59O1xuXG5qUXVlcnkuZnguc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRpblByb2dyZXNzID0gbnVsbDtcbn07XG5cbmpRdWVyeS5meC5zcGVlZHMgPSB7XG5cdHNsb3c6IDYwMCxcblx0ZmFzdDogMjAwLFxuXG5cdC8vIERlZmF1bHQgc3BlZWRcblx0X2RlZmF1bHQ6IDQwMFxufTtcblxuXG4vLyBCYXNlZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24uXG5qUXVlcnkuZm4uZGVsYXkgPSBmdW5jdGlvbiggdGltZSwgdHlwZSApIHtcblx0dGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTtcblx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlLCBmdW5jdGlvbiggbmV4dCwgaG9va3MgKSB7XG5cdFx0dmFyIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCggbmV4dCwgdGltZSApO1xuXHRcdGhvb2tzLnN0b3AgPSBmdW5jdGlvbigpIHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcblx0XHR9O1xuXHR9ICk7XG59O1xuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApLFxuXHRcdHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwic2VsZWN0XCIgKSxcblx0XHRvcHQgPSBzZWxlY3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib3B0aW9uXCIgKSApO1xuXG5cdGlucHV0LnR5cGUgPSBcImNoZWNrYm94XCI7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMyBvbmx5XG5cdC8vIERlZmF1bHQgdmFsdWUgZm9yIGEgY2hlY2tib3ggc2hvdWxkIGJlIFwib25cIlxuXHRzdXBwb3J0LmNoZWNrT24gPSBpbnB1dC52YWx1ZSAhPT0gXCJcIjtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gTXVzdCBhY2Nlc3Mgc2VsZWN0ZWRJbmRleCB0byBtYWtlIGRlZmF1bHQgb3B0aW9ucyBzZWxlY3Rcblx0c3VwcG9ydC5vcHRTZWxlY3RlZCA9IG9wdC5zZWxlY3RlZDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gQW4gaW5wdXQgbG9zZXMgaXRzIHZhbHVlIGFmdGVyIGJlY29taW5nIGEgcmFkaW9cblx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0aW5wdXQudmFsdWUgPSBcInRcIjtcblx0aW5wdXQudHlwZSA9IFwicmFkaW9cIjtcblx0c3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09IFwidFwiO1xufSApKCk7XG5cblxudmFyIGJvb2xIb29rLFxuXHRhdHRySGFuZGxlID0galF1ZXJ5LmV4cHIuYXR0ckhhbmRsZTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBuYW1lICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIHRoaXMsIG5hbWUgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdGlmICggdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlID09PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lLCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdC8vIEF0dHJpYnV0ZSBob29rcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgbG93ZXJjYXNlIHZlcnNpb25cblx0XHQvLyBHcmFiIG5lY2Vzc2FyeSBob29rIGlmIG9uZSBpcyBkZWZpbmVkXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5hdHRySG9va3NbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8XG5cdFx0XHRcdCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC50ZXN0KCBuYW1lICkgPyBib29sSG9vayA6IHVuZGVmaW5lZCApO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdmFsdWUgPT09IG51bGwgKSB7XG5cdFx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgXCJcIiApO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdC8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkXG5cdFx0cmV0dXJuIHJldCA9PSBudWxsID8gdW5kZWZpbmVkIDogcmV0O1xuXHR9LFxuXG5cdGF0dHJIb29rczoge1xuXHRcdHR5cGU6IHtcblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICFzdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09IFwicmFkaW9cIiAmJlxuXHRcdFx0XHRcdG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSApIHtcblx0XHRcdFx0XHR2YXIgdmFsID0gZWxlbS52YWx1ZTtcblx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIHZhbHVlICk7XG5cdFx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnZhbHVlID0gdmFsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdHZhciBuYW1lLFxuXHRcdFx0aSA9IDAsXG5cblx0XHRcdC8vIEF0dHJpYnV0ZSBuYW1lcyBjYW4gY29udGFpbiBub24tSFRNTCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnNcblx0XHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2F0dHJpYnV0ZXMtMlxuXHRcdFx0YXR0ck5hbWVzID0gdmFsdWUgJiYgdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblxuXHRcdGlmICggYXR0ck5hbWVzICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHR3aGlsZSAoICggbmFtZSA9IGF0dHJOYW1lc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIG5hbWUgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSG9va3MgZm9yIGJvb2xlYW4gYXR0cmlidXRlc1xuYm9vbEhvb2sgPSB7XG5cdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkge1xuXHRcdGlmICggdmFsdWUgPT09IGZhbHNlICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgYm9vbGVhbiBhdHRyaWJ1dGVzIHdoZW4gc2V0IHRvIGZhbHNlXG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gbmFtZTtcblx0fVxufTtcblxualF1ZXJ5LmVhY2goIGpRdWVyeS5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKCAvXFx3Ky9nICksIGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0dmFyIGdldHRlciA9IGF0dHJIYW5kbGVbIG5hbWUgXSB8fCBqUXVlcnkuZmluZC5hdHRyO1xuXG5cdGF0dHJIYW5kbGVbIG5hbWUgXSA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgcmV0LCBoYW5kbGUsXG5cdFx0XHRsb3dlcmNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cblx0XHRcdC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3AgYnkgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIHRoZSBnZXR0ZXJcblx0XHRcdGhhbmRsZSA9IGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXTtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IHJldDtcblx0XHRcdHJldCA9IGdldHRlciggZWxlbSwgbmFtZSwgaXNYTUwgKSAhPSBudWxsID9cblx0XHRcdFx0bG93ZXJjYXNlTmFtZSA6XG5cdFx0XHRcdG51bGw7XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSBoYW5kbGU7XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG59ICk7XG5cblxuXG5cbnZhciByZm9jdXNhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmNsaWNrYWJsZSA9IC9eKD86YXxhcmVhKSQvaTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXG5cdHJlbW92ZVByb3A6IGZ1bmN0aW9uKCBuYW1lICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGVsZXRlIHRoaXNbIGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZSBdO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgcHJvcGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzXG5cdFx0XHRuYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lO1xuXHRcdFx0aG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICggZWxlbVsgbmFtZSBdID0gdmFsdWUgKTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZWxlbVsgbmFtZSBdO1xuXHR9LFxuXG5cdHByb3BIb29rczoge1xuXHRcdHRhYkluZGV4OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHRcdFx0Ly8gZWxlbS50YWJJbmRleCBkb2Vzbid0IGFsd2F5cyByZXR1cm4gdGhlXG5cdFx0XHRcdC8vIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBleHBsaWNpdGx5IHNldFxuXHRcdFx0XHQvLyBVc2UgcHJvcGVyIGF0dHJpYnV0ZSByZXRyaWV2YWwgKHRyYWMtMTIwNzIpXG5cdFx0XHRcdHZhciB0YWJpbmRleCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidGFiaW5kZXhcIiApO1xuXG5cdFx0XHRcdGlmICggdGFiaW5kZXggKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KCB0YWJpbmRleCwgMTAgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRyZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fFxuXHRcdFx0XHRcdHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmXG5cdFx0XHRcdFx0ZWxlbS5ocmVmXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRwcm9wRml4OiB7XG5cdFx0XCJmb3JcIjogXCJodG1sRm9yXCIsXG5cdFx0XCJjbGFzc1wiOiBcImNsYXNzTmFtZVwiXG5cdH1cbn0gKTtcblxuLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG4vLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5kZXggcHJvcGVydHlcbi8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWRcbi8vIG9uIHRoZSBvcHRpb25cbi8vIFRoZSBnZXR0ZXIgZW5zdXJlcyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkXG4vLyB3aGVuIGluIGFuIG9wdGdyb3VwXG4vLyBlc2xpbnQgcnVsZSBcIm5vLXVudXNlZC1leHByZXNzaW9uc1wiIGlzIGRpc2FibGVkIGZvciB0aGlzIGNvZGVcbi8vIHNpbmNlIGl0IGNvbnNpZGVycyBzdWNoIGFjY2Vzc2lvbnMgbm9vcFxuaWYgKCAhc3VwcG9ydC5vcHRTZWxlY3RlZCApIHtcblx0alF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCAmJiBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdHBhcmVudC5zZWxlY3RlZEluZGV4O1xuXG5cdFx0XHRcdGlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxualF1ZXJ5LmVhY2goIFtcblx0XCJ0YWJJbmRleFwiLFxuXHRcInJlYWRPbmx5XCIsXG5cdFwibWF4TGVuZ3RoXCIsXG5cdFwiY2VsbFNwYWNpbmdcIixcblx0XCJjZWxsUGFkZGluZ1wiLFxuXHRcInJvd1NwYW5cIixcblx0XCJjb2xTcGFuXCIsXG5cdFwidXNlTWFwXCIsXG5cdFwiZnJhbWVCb3JkZXJcIixcblx0XCJjb250ZW50RWRpdGFibGVcIlxuXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7XG59ICk7XG5cblxuXG5cblx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UgYWNjb3JkaW5nIHRvIEhUTUwgc3BlY1xuXHQvLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLWFzY2lpLXdoaXRlc3BhY2Vcblx0ZnVuY3Rpb24gc3RyaXBBbmRDb2xsYXBzZSggdmFsdWUgKSB7XG5cdFx0dmFyIHRva2VucyA9IHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdFx0cmV0dXJuIHRva2Vucy5qb2luKCBcIiBcIiApO1xuXHR9XG5cblxuZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7XG5cdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSAmJiBlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHwgXCJcIjtcbn1cblxuZnVuY3Rpb24gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICkge1xuXHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHR9XG5cdHJldHVybiBbXTtcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc05hbWVzLCBjdXIsIGN1clZhbHVlLCBjbGFzc05hbWUsIGksIGZpbmFsVmFsdWU7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3NOYW1lcy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXHRcdFx0XHRjdXIgPSB0aGlzLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpIF07XG5cdFx0XHRcdFx0XHRpZiAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXNzTmFtZSArIFwiIFwiICkgPCAwICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgKz0gY2xhc3NOYW1lICsgXCIgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy5cblx0XHRcdFx0XHRmaW5hbFZhbHVlID0gc3RyaXBBbmRDb2xsYXBzZSggY3VyICk7XG5cdFx0XHRcdFx0aWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHtcblx0XHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsIGZpbmFsVmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc05hbWVzLCBjdXIsIGN1clZhbHVlLCBjbGFzc05hbWUsIGksIGZpbmFsVmFsdWU7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hdHRyKCBcImNsYXNzXCIsIFwiXCIgKTtcblx0XHR9XG5cblx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzTmFtZXMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIHRoaXMgKTtcblxuXHRcdFx0XHQvLyBUaGlzIGV4cHJlc3Npb24gaXMgaGVyZSBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIGFkZENsYXNzKVxuXHRcdFx0XHRjdXIgPSB0aGlzLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGNsYXNzTmFtZXMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpIF07XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSAqYWxsKiBpbnN0YW5jZXNcblx0XHRcdFx0XHRcdHdoaWxlICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhc3NOYW1lICsgXCIgXCIgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgPSBjdXIucmVwbGFjZSggXCIgXCIgKyBjbGFzc05hbWUgKyBcIiBcIiwgXCIgXCIgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkge1xuXHRcdHZhciBjbGFzc05hbWVzLCBjbGFzc05hbWUsIGksIHNlbGYsXG5cdFx0XHR0eXBlID0gdHlwZW9mIHZhbHVlLFxuXHRcdFx0aXNWYWxpZFZhbHVlID0gdHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKFxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIHRoaXMsIGksIGdldENsYXNzKCB0aGlzICksIHN0YXRlVmFsICksXG5cdFx0XHRcdFx0c3RhdGVWYWxcblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRpZiAoIHR5cGVvZiBzdGF0ZVZhbCA9PT0gXCJib29sZWFuXCIgJiYgaXNWYWxpZFZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlVmFsID8gdGhpcy5hZGRDbGFzcyggdmFsdWUgKSA6IHRoaXMucmVtb3ZlQ2xhc3MoIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NOYW1lcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGlzVmFsaWRWYWx1ZSApIHtcblxuXHRcdFx0XHQvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lc1xuXHRcdFx0XHRzZWxmID0galF1ZXJ5KCB0aGlzICk7XG5cblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBjbGFzc05hbWVzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRcdGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkgXTtcblxuXHRcdFx0XHRcdC8vIENoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlzdFxuXHRcdFx0XHRcdGlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7XG5cdFx0XHRcdFx0XHRzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VsZi5hZGRDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdC8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0XHRjbGFzc05hbWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXHRcdFx0XHRpZiAoIGNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGNsYXNzTmFtZSBpZiBzZXRcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiLCBjbGFzc05hbWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUgb3IgaWYgd2UncmUgcGFzc2VkIGBmYWxzZWAsXG5cdFx0XHRcdC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBicmluZyBiYWNrIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IHNhdmVkIChpZiBhbnl0aGluZyksXG5cdFx0XHRcdC8vIGZhbGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC5cblx0XHRcdFx0aWYgKCB0aGlzLnNldEF0dHJpYnV0ZSApIHtcblx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRcdFx0XHRcdFwiXCIgOlxuXHRcdFx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiICkgfHwgXCJcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0aGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgY2xhc3NOYW1lLCBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRjbGFzc05hbWUgPSBcIiBcIiArIHNlbGVjdG9yICsgXCIgXCI7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdCggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBnZXRDbGFzcyggZWxlbSApICkgKyBcIiBcIiApLmluZGV4T2YoIGNsYXNzTmFtZSApID4gLTEgKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgcnJldHVybiA9IC9cXHIvZztcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHR2YWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgaG9va3MsIHJldCwgdmFsdWVJc0Z1bmN0aW9uLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXTtcblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyBlbGVtLnR5cGUgXSB8fFxuXHRcdFx0XHRcdGpRdWVyeS52YWxIb29rc1sgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07XG5cblx0XHRcdFx0aWYgKCBob29rcyAmJlxuXHRcdFx0XHRcdFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0XHQoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgXCJ2YWx1ZVwiICkgKSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXQgPSBlbGVtLnZhbHVlO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSBtb3N0IGNvbW1vbiBzdHJpbmcgY2FzZXNcblx0XHRcdFx0aWYgKCB0eXBlb2YgcmV0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0XHRcdHJldHVybiByZXQucmVwbGFjZSggcnJldHVybiwgXCJcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSGFuZGxlIGNhc2VzIHdoZXJlIHZhbHVlIGlzIG51bGwvdW5kZWYgb3IgbnVtYmVyXG5cdFx0XHRcdHJldHVybiByZXQgPT0gbnVsbCA/IFwiXCIgOiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHR2YXIgdmFsO1xuXG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlLmNhbGwoIHRoaXMsIGksIGpRdWVyeSggdGhpcyApLnZhbCgpICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVHJlYXQgbnVsbC91bmRlZmluZWQgYXMgXCJcIjsgY29udmVydCBudW1iZXJzIHRvIHN0cmluZ1xuXHRcdFx0aWYgKCB2YWwgPT0gbnVsbCApIHtcblx0XHRcdFx0dmFsID0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggdHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0dmFsICs9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIEFycmF5LmlzQXJyYXkoIHZhbCApICkge1xuXHRcdFx0XHR2YWwgPSBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSArIFwiXCI7XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblxuXHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIHRoaXMudHlwZSBdIHx8IGpRdWVyeS52YWxIb29rc1sgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07XG5cblx0XHRcdC8vIElmIHNldCByZXR1cm5zIHVuZGVmaW5lZCwgZmFsbCBiYWNrIHRvIG5vcm1hbCBzZXR0aW5nXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHwgaG9va3Muc2V0KCB0aGlzLCB2YWwsIFwidmFsdWVcIiApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHRoaXMudmFsdWUgPSB2YWw7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0dmFsSG9va3M6IHtcblx0XHRvcHRpb246IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0dmFyIHZhbCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidmFsdWVcIiApO1xuXHRcdFx0XHRyZXR1cm4gdmFsICE9IG51bGwgP1xuXHRcdFx0XHRcdHZhbCA6XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEgb25seVxuXHRcdFx0XHRcdC8vIG9wdGlvbi50ZXh0IHRocm93cyBleGNlcHRpb25zICh0cmFjLTE0Njg2LCB0cmFjLTE0ODU4KVxuXHRcdFx0XHRcdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2Vcblx0XHRcdFx0XHRzdHJpcEFuZENvbGxhcHNlKCBqUXVlcnkudGV4dCggZWxlbSApICk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzZWxlY3Q6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciB2YWx1ZSwgb3B0aW9uLCBpLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0aW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsXG5cdFx0XHRcdFx0b25lID0gZWxlbS50eXBlID09PSBcInNlbGVjdC1vbmVcIixcblx0XHRcdFx0XHR2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sXG5cdFx0XHRcdFx0bWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0aWYgKCBpbmRleCA8IDAgKSB7XG5cdFx0XHRcdFx0aSA9IG1heDtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGkgPSBvbmUgPyBpbmRleCA6IDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zXG5cdFx0XHRcdGZvciAoIDsgaSA8IG1heDsgaSsrICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0Ly8gSUU4LTkgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAodHJhYy0yNTUxKVxuXHRcdFx0XHRcdGlmICggKCBvcHRpb24uc2VsZWN0ZWQgfHwgaSA9PT0gaW5kZXggKSAmJlxuXG5cdFx0XHRcdFx0XHRcdC8vIERvbid0IHJldHVybiBvcHRpb25zIHRoYXQgYXJlIGRpc2FibGVkIG9yIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcblx0XHRcdFx0XHRcdFx0IW9wdGlvbi5kaXNhYmxlZCAmJlxuXHRcdFx0XHRcdFx0XHQoICFvcHRpb24ucGFyZW50Tm9kZS5kaXNhYmxlZCB8fFxuXHRcdFx0XHRcdFx0XHRcdCFub2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUsIFwib3B0Z3JvdXBcIiApICkgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEdldCB0aGUgc3BlY2lmaWMgdmFsdWUgZm9yIHRoZSBvcHRpb25cblx0XHRcdFx0XHRcdHZhbHVlID0galF1ZXJ5KCBvcHRpb24gKS52YWwoKTtcblxuXHRcdFx0XHRcdFx0Ly8gV2UgZG9uJ3QgbmVlZCBhbiBhcnJheSBmb3Igb25lIHNlbGVjdHNcblx0XHRcdFx0XHRcdGlmICggb25lICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIE11bHRpLVNlbGVjdHMgcmV0dXJuIGFuIGFycmF5XG5cdFx0XHRcdFx0XHR2YWx1ZXMucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdFx0fSxcblxuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBvcHRpb25TZXQsIG9wdGlvbixcblx0XHRcdFx0XHRvcHRpb25zID0gZWxlbS5vcHRpb25zLFxuXHRcdFx0XHRcdHZhbHVlcyA9IGpRdWVyeS5tYWtlQXJyYXkoIHZhbHVlICksXG5cdFx0XHRcdFx0aSA9IG9wdGlvbnMubGVuZ3RoO1xuXG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbmQtYXNzaWduICovXG5cblx0XHRcdFx0XHRpZiAoIG9wdGlvbi5zZWxlY3RlZCA9XG5cdFx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggalF1ZXJ5LnZhbEhvb2tzLm9wdGlvbi5nZXQoIG9wdGlvbiApLCB2YWx1ZXMgKSA+IC0xXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRvcHRpb25TZXQgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tY29uZC1hc3NpZ24gKi9cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZvcmNlIGJyb3dzZXJzIHRvIGJlaGF2ZSBjb25zaXN0ZW50bHkgd2hlbiBub24tbWF0Y2hpbmcgdmFsdWUgaXMgc2V0XG5cdFx0XHRcdGlmICggIW9wdGlvblNldCApIHtcblx0XHRcdFx0XHRlbGVtLnNlbGVjdGVkSW5kZXggPSAtMTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBSYWRpb3MgYW5kIGNoZWNrYm94ZXMgZ2V0dGVyL3NldHRlclxualF1ZXJ5LmVhY2goIFsgXCJyYWRpb1wiLCBcImNoZWNrYm94XCIgXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS52YWxIb29rc1sgdGhpcyBdID0ge1xuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLmNoZWNrZWQgPSBqUXVlcnkuaW5BcnJheSggalF1ZXJ5KCBlbGVtICkudmFsKCksIHZhbHVlICkgPiAtMSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0aWYgKCAhc3VwcG9ydC5jaGVja09uICkge1xuXHRcdGpRdWVyeS52YWxIb29rc1sgdGhpcyBdLmdldCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gbnVsbCA/IFwib25cIiA6IGVsZW0udmFsdWU7XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG4vLyBSZXR1cm4galF1ZXJ5IGZvciBhdHRyaWJ1dGVzLW9ubHkgaW5jbHVzaW9uXG52YXIgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG5cbnZhciBub25jZSA9IHsgZ3VpZDogRGF0ZS5ub3coKSB9O1xuXG52YXIgcnF1ZXJ5ID0gKCAvXFw/LyApO1xuXG5cblxuLy8gQ3Jvc3MtYnJvd3NlciB4bWwgcGFyc2luZ1xualF1ZXJ5LnBhcnNlWE1MID0gZnVuY3Rpb24oIGRhdGEgKSB7XG5cdHZhciB4bWwsIHBhcnNlckVycm9yRWxlbTtcblx0aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIElFIHRocm93cyBvbiBwYXJzZUZyb21TdHJpbmcgd2l0aCBpbnZhbGlkIGlucHV0LlxuXHR0cnkge1xuXHRcdHhtbCA9ICggbmV3IHdpbmRvdy5ET01QYXJzZXIoKSApLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgXCJ0ZXh0L3htbFwiICk7XG5cdH0gY2F0Y2ggKCBlICkge31cblxuXHRwYXJzZXJFcnJvckVsZW0gPSB4bWwgJiYgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcInBhcnNlcmVycm9yXCIgKVsgMCBdO1xuXHRpZiAoICF4bWwgfHwgcGFyc2VyRXJyb3JFbGVtICkge1xuXHRcdGpRdWVyeS5lcnJvciggXCJJbnZhbGlkIFhNTDogXCIgKyAoXG5cdFx0XHRwYXJzZXJFcnJvckVsZW0gP1xuXHRcdFx0XHRqUXVlcnkubWFwKCBwYXJzZXJFcnJvckVsZW0uY2hpbGROb2RlcywgZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0XHRcdHJldHVybiBlbC50ZXh0Q29udGVudDtcblx0XHRcdFx0fSApLmpvaW4oIFwiXFxuXCIgKSA6XG5cdFx0XHRcdGRhdGFcblx0XHQpICk7XG5cdH1cblx0cmV0dXJuIHhtbDtcbn07XG5cblxudmFyIHJmb2N1c01vcnBoID0gL14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLFxuXHRzdG9wUHJvcGFnYXRpb25DYWxsYmFjayA9IGZ1bmN0aW9uKCBlICkge1xuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH07XG5cbmpRdWVyeS5leHRlbmQoIGpRdWVyeS5ldmVudCwge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCBldmVudCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJzICkge1xuXG5cdFx0dmFyIGksIGN1ciwgdG1wLCBidWJibGVUeXBlLCBvbnR5cGUsIGhhbmRsZSwgc3BlY2lhbCwgbGFzdEVsZW1lbnQsXG5cdFx0XHRldmVudFBhdGggPSBbIGVsZW0gfHwgZG9jdW1lbnQgXSxcblx0XHRcdHR5cGUgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwidHlwZVwiICkgPyBldmVudC50eXBlIDogZXZlbnQsXG5cdFx0XHRuYW1lc3BhY2VzID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcIm5hbWVzcGFjZVwiICkgPyBldmVudC5uYW1lc3BhY2Uuc3BsaXQoIFwiLlwiICkgOiBbXTtcblxuXHRcdGN1ciA9IGxhc3RFbGVtZW50ID0gdG1wID0gZWxlbSA9IGVsZW0gfHwgZG9jdW1lbnQ7XG5cblx0XHQvLyBEb24ndCBkbyBldmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGZvY3VzL2JsdXIgbW9ycGhzIHRvIGZvY3VzaW4vb3V0OyBlbnN1cmUgd2UncmUgbm90IGZpcmluZyB0aGVtIHJpZ2h0IG5vd1xuXHRcdGlmICggcmZvY3VzTW9ycGgudGVzdCggdHlwZSArIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIHR5cGUuaW5kZXhPZiggXCIuXCIgKSA+IC0xICkge1xuXG5cdFx0XHQvLyBOYW1lc3BhY2VkIHRyaWdnZXI7IGNyZWF0ZSBhIHJlZ2V4cCB0byBtYXRjaCBldmVudCB0eXBlIGluIGhhbmRsZSgpXG5cdFx0XHRuYW1lc3BhY2VzID0gdHlwZS5zcGxpdCggXCIuXCIgKTtcblx0XHRcdHR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7XG5cdFx0XHRuYW1lc3BhY2VzLnNvcnQoKTtcblx0XHR9XG5cdFx0b250eXBlID0gdHlwZS5pbmRleE9mKCBcIjpcIiApIDwgMCAmJiBcIm9uXCIgKyB0eXBlO1xuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGEgalF1ZXJ5LkV2ZW50IG9iamVjdCwgT2JqZWN0LCBvciBqdXN0IGFuIGV2ZW50IHR5cGUgc3RyaW5nXG5cdFx0ZXZlbnQgPSBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRldmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCB0eXBlb2YgZXZlbnQgPT09IFwib2JqZWN0XCIgJiYgZXZlbnQgKTtcblxuXHRcdC8vIFRyaWdnZXIgYml0bWFzazogJiAxIGZvciBuYXRpdmUgaGFuZGxlcnM7ICYgMiBmb3IgalF1ZXJ5IChhbHdheXMgdHJ1ZSlcblx0XHRldmVudC5pc1RyaWdnZXIgPSBvbmx5SGFuZGxlcnMgPyAyIDogMztcblx0XHRldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiICk7XG5cdFx0ZXZlbnQucm5hbWVzcGFjZSA9IGV2ZW50Lm5hbWVzcGFjZSA/XG5cdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKSA6XG5cdFx0XHRudWxsO1xuXG5cdFx0Ly8gQ2xlYW4gdXAgdGhlIGV2ZW50IGluIGNhc2UgaXQgaXMgYmVpbmcgcmV1c2VkXG5cdFx0ZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkO1xuXHRcdGlmICggIWV2ZW50LnRhcmdldCApIHtcblx0XHRcdGV2ZW50LnRhcmdldCA9IGVsZW07XG5cdFx0fVxuXG5cdFx0Ly8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdFxuXHRcdGRhdGEgPSBkYXRhID09IG51bGwgP1xuXHRcdFx0WyBldmVudCBdIDpcblx0XHRcdGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEsIFsgZXZlbnQgXSApO1xuXG5cdFx0Ly8gQWxsb3cgc3BlY2lhbCBldmVudHMgdG8gZHJhdyBvdXRzaWRlIHRoZSBsaW5lc1xuXHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiBzcGVjaWFsLnRyaWdnZXIgJiYgc3BlY2lhbC50cmlnZ2VyLmFwcGx5KCBlbGVtLCBkYXRhICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBldmVudCBwcm9wYWdhdGlvbiBwYXRoIGluIGFkdmFuY2UsIHBlciBXM0MgZXZlbnRzIHNwZWMgKHRyYWMtOTk1MSlcblx0XHQvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKHRyYWMtOTcyNClcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdGJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlO1xuXHRcdFx0aWYgKCAhcmZvY3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5cGUgKSApIHtcblx0XHRcdFx0Y3VyID0gY3VyLnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKCA7IGN1cjsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0dG1wID0gY3VyO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPbmx5IGFkZCB3aW5kb3cgaWYgd2UgZ290IHRvIGRvY3VtZW50IChlLmcuLCBub3QgcGxhaW4gb2JqIG9yIGRldGFjaGVkIERPTSlcblx0XHRcdGlmICggdG1wID09PSAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCApICkge1xuXHRcdFx0XHRldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmlyZSBoYW5kbGVycyBvbiB0aGUgZXZlbnQgcGF0aFxuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBjdXIgPSBldmVudFBhdGhbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRsYXN0RWxlbWVudCA9IGN1cjtcblx0XHRcdGV2ZW50LnR5cGUgPSBpID4gMSA/XG5cdFx0XHRcdGJ1YmJsZVR5cGUgOlxuXHRcdFx0XHRzcGVjaWFsLmJpbmRUeXBlIHx8IHR5cGU7XG5cblx0XHRcdC8vIGpRdWVyeSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSAoIGRhdGFQcml2LmdldCggY3VyLCBcImV2ZW50c1wiICkgfHwgT2JqZWN0LmNyZWF0ZSggbnVsbCApIClbIGV2ZW50LnR5cGUgXSAmJlxuXHRcdFx0XHRkYXRhUHJpdi5nZXQoIGN1ciwgXCJoYW5kbGVcIiApO1xuXHRcdFx0aWYgKCBoYW5kbGUgKSB7XG5cdFx0XHRcdGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE5hdGl2ZSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSBvbnR5cGUgJiYgY3VyWyBvbnR5cGUgXTtcblx0XHRcdGlmICggaGFuZGxlICYmIGhhbmRsZS5hcHBseSAmJiBhY2NlcHREYXRhKCBjdXIgKSApIHtcblx0XHRcdFx0ZXZlbnQucmVzdWx0ID0gaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZXZlbnQudHlwZSA9IHR5cGU7XG5cblx0XHQvLyBJZiBub2JvZHkgcHJldmVudGVkIHRoZSBkZWZhdWx0IGFjdGlvbiwgZG8gaXQgbm93XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHtcblxuXHRcdFx0aWYgKCAoICFzcGVjaWFsLl9kZWZhdWx0IHx8XG5cdFx0XHRcdHNwZWNpYWwuX2RlZmF1bHQuYXBwbHkoIGV2ZW50UGF0aC5wb3AoKSwgZGF0YSApID09PSBmYWxzZSApICYmXG5cdFx0XHRcdGFjY2VwdERhdGEoIGVsZW0gKSApIHtcblxuXHRcdFx0XHQvLyBDYWxsIGEgbmF0aXZlIERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGV2ZW50LlxuXHRcdFx0XHQvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24gd2luZG93LCB0aGF0J3Mgd2hlcmUgZ2xvYmFsIHZhcmlhYmxlcyBiZSAodHJhYy02MTcwKVxuXHRcdFx0XHRpZiAoIG9udHlwZSAmJiBpc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gKSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hlbiB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2Rcblx0XHRcdFx0XHR0bXAgPSBlbGVtWyBvbnR5cGUgXTtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW1bIHR5cGUgXSgpO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IHRtcDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZVxuXHQvLyBVc2VkIG9ubHkgZm9yIGBmb2N1cyhpbiB8IG91dClgIGV2ZW50c1xuXHRzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50ICkge1xuXHRcdHZhciBlID0galF1ZXJ5LmV4dGVuZChcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoKSxcblx0XHRcdGV2ZW50LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRpc1NpbXVsYXRlZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApO1xuXHR9XG5cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTtcblx0XHR9ICk7XG5cdH0sXG5cdHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXTtcblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIGVsZW0sIHRydWUgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG52YXJcblx0cmJyYWNrZXQgPSAvXFxbXFxdJC8sXG5cdHJDUkxGID0gL1xccj9cXG4vZyxcblx0cnN1Ym1pdHRlclR5cGVzID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLFxuXHRyc3VibWl0dGFibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7XG5cbmZ1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHtcblx0dmFyIG5hbWU7XG5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBvYmogKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBhcnJheSBpdGVtLlxuXHRcdGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkge1xuXHRcdFx0aWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHtcblxuXHRcdFx0XHQvLyBUcmVhdCBlYWNoIGFycmF5IGl0ZW0gYXMgYSBzY2FsYXIuXG5cdFx0XHRcdGFkZCggcHJlZml4LCB2ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguXG5cdFx0XHRcdGJ1aWxkUGFyYW1zKFxuXHRcdFx0XHRcdHByZWZpeCArIFwiW1wiICsgKCB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9IG51bGwgPyBpIDogXCJcIiApICsgXCJdXCIsXG5cdFx0XHRcdFx0dixcblx0XHRcdFx0XHR0cmFkaXRpb25hbCxcblx0XHRcdFx0XHRhZGRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0fSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIHRvVHlwZSggb2JqICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgb2JqZWN0IGl0ZW0uXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4ICsgXCJbXCIgKyBuYW1lICsgXCJdXCIsIG9ialsgbmFtZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBTZXJpYWxpemUgc2NhbGFyIGl0ZW0uXG5cdFx0YWRkKCBwcmVmaXgsIG9iaiApO1xuXHR9XG59XG5cbi8vIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mXG4vLyBrZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmdcbmpRdWVyeS5wYXJhbSA9IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHtcblx0dmFyIHByZWZpeCxcblx0XHRzID0gW10sXG5cdFx0YWRkID0gZnVuY3Rpb24oIGtleSwgdmFsdWVPckZ1bmN0aW9uICkge1xuXG5cdFx0XHQvLyBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpbnZva2UgaXQgYW5kIHVzZSBpdHMgcmV0dXJuIHZhbHVlXG5cdFx0XHR2YXIgdmFsdWUgPSBpc0Z1bmN0aW9uKCB2YWx1ZU9yRnVuY3Rpb24gKSA/XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbigpIDpcblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uO1xuXG5cdFx0XHRzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9uZW50KCBrZXkgKSArIFwiPVwiICtcblx0XHRcdFx0ZW5jb2RlVVJJQ29tcG9uZW50KCB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICk7XG5cdFx0fTtcblxuXHRpZiAoIGEgPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMuXG5cdGlmICggQXJyYXkuaXNBcnJheSggYSApIHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSB0aGUgZm9ybSBlbGVtZW50c1xuXHRcdGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHtcblx0XHRcdGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7XG5cdFx0fSApO1xuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSBcIm9sZFwiIHdheSAodGhlIHdheSAxLjMuMiBvciBvbGRlclxuXHRcdC8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LlxuXHRcdGZvciAoIHByZWZpeCBpbiBhICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uXG5cdHJldHVybiBzLmpvaW4oIFwiJlwiICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJpYWxpemVBcnJheSgpICk7XG5cdH0sXG5cdHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDYW4gYWRkIHByb3BIb29rIGZvciBcImVsZW1lbnRzXCIgdG8gZmlsdGVyIG9yIGFkZCBmb3JtIGVsZW1lbnRzXG5cdFx0XHR2YXIgZWxlbWVudHMgPSBqUXVlcnkucHJvcCggdGhpcywgXCJlbGVtZW50c1wiICk7XG5cdFx0XHRyZXR1cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCBlbGVtZW50cyApIDogdGhpcztcblx0XHR9ICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0eXBlID0gdGhpcy50eXBlO1xuXG5cdFx0XHQvLyBVc2UgLmlzKCBcIjpkaXNhYmxlZFwiICkgc28gdGhhdCBmaWVsZHNldFtkaXNhYmxlZF0gd29ya3Ncblx0XHRcdHJldHVybiB0aGlzLm5hbWUgJiYgIWpRdWVyeSggdGhpcyApLmlzKCBcIjpkaXNhYmxlZFwiICkgJiZcblx0XHRcdFx0cnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJlxuXHRcdFx0XHQoIHRoaXMuY2hlY2tlZCB8fCAhcmNoZWNrYWJsZVR5cGUudGVzdCggdHlwZSApICk7XG5cdFx0fSApLm1hcCggZnVuY3Rpb24oIF9pLCBlbGVtICkge1xuXHRcdFx0dmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpO1xuXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0fSApLmdldCgpO1xuXHR9XG59ICk7XG5cblxudmFyXG5cdHIyMCA9IC8lMjAvZyxcblx0cmhhc2ggPSAvIy4qJC8sXG5cdHJhbnRpQ2FjaGUgPSAvKFs/Jl0pXz1bXiZdKi8sXG5cdHJoZWFkZXJzID0gL14oLio/KTpbIFxcdF0qKFteXFxyXFxuXSopJC9tZyxcblxuXHQvLyB0cmFjLTc2NTMsIHRyYWMtODEyNSwgdHJhYy04MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb25cblx0cmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxcblx0cm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sXG5cdHJwcm90b2NvbCA9IC9eXFwvXFwvLyxcblxuXHQvKiBQcmVmaWx0ZXJzXG5cdCAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpXG5cdCAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6XG5cdCAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnRcblx0ICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKVxuXHQgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHByZWZpbHRlcnMgPSB7fSxcblxuXHQvKiBUcmFuc3BvcnRzIGJpbmRpbmdzXG5cdCAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogMikgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHRyYW5zcG9ydHMgPSB7fSxcblxuXHQvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICh0cmFjLTEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uXG5cdGFsbFR5cGVzID0gXCIqL1wiLmNvbmNhdCggXCIqXCIgKSxcblxuXHQvLyBBbmNob3IgdGFnIGZvciBwYXJzaW5nIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b3JpZ2luQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxub3JpZ2luQW5jaG9yLmhyZWYgPSBsb2NhdGlvbi5ocmVmO1xuXG4vLyBCYXNlIFwiY29uc3RydWN0b3JcIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0XG5mdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHtcblxuXHQvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIFwiKlwiXG5cdHJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkge1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjtcblx0XHRcdGRhdGFUeXBlRXhwcmVzc2lvbiA9IFwiKlwiO1xuXHRcdH1cblxuXHRcdHZhciBkYXRhVHlwZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0ZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggZnVuYyApICkge1xuXG5cdFx0XHQvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9uXG5cdFx0XHR3aGlsZSAoICggZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJlcGVuZCBpZiByZXF1ZXN0ZWRcblx0XHRcdFx0aWYgKCBkYXRhVHlwZVsgMCBdID09PSBcIitcIiApIHtcblx0XHRcdFx0XHRkYXRhVHlwZSA9IGRhdGFUeXBlLnNsaWNlKCAxICkgfHwgXCIqXCI7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS51bnNoaWZ0KCBmdW5jICk7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkucHVzaCggZnVuYyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRlcnMgYW5kIHRyYW5zcG9ydHNcbmZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKSB7XG5cblx0dmFyIGluc3BlY3RlZCA9IHt9LFxuXHRcdHNlZWtpbmdUcmFuc3BvcnQgPSAoIHN0cnVjdHVyZSA9PT0gdHJhbnNwb3J0cyApO1xuXG5cdGZ1bmN0aW9uIGluc3BlY3QoIGRhdGFUeXBlICkge1xuXHRcdHZhciBzZWxlY3RlZDtcblx0XHRpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlO1xuXHRcdGpRdWVyeS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0aW9uKCBfLCBwcmVmaWx0ZXJPckZhY3RvcnkgKSB7XG5cdFx0XHR2YXIgZGF0YVR5cGVPclRyYW5zcG9ydCA9IHByZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApO1xuXHRcdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc2Vla2luZ1RyYW5zcG9ydCAmJiAhaW5zcGVjdGVkWyBkYXRhVHlwZU9yVHJhbnNwb3J0IF0gKSB7XG5cblx0XHRcdFx0b3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRpbnNwZWN0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7XG5cdFx0XHRcdHJldHVybiAhKCBzZWxlY3RlZCA9IGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIHNlbGVjdGVkO1xuXHR9XG5cblx0cmV0dXJuIGluc3BlY3QoIG9wdGlvbnMuZGF0YVR5cGVzWyAwIF0gKSB8fCAhaW5zcGVjdGVkWyBcIipcIiBdICYmIGluc3BlY3QoIFwiKlwiICk7XG59XG5cbi8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9uc1xuLy8gdGhhdCB0YWtlcyBcImZsYXRcIiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZClcbi8vIEZpeGVzIHRyYWMtOTg4N1xuZnVuY3Rpb24gYWpheEV4dGVuZCggdGFyZ2V0LCBzcmMgKSB7XG5cdHZhciBrZXksIGRlZXAsXG5cdFx0ZmxhdE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9O1xuXG5cdGZvciAoIGtleSBpbiBzcmMgKSB7XG5cdFx0aWYgKCBzcmNbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHQoIGZsYXRPcHRpb25zWyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoIGRlZXAgPSB7fSApICkgKVsga2V5IF0gPSBzcmNbIGtleSBdO1xuXHRcdH1cblx0fVxuXHRpZiAoIGRlZXAgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0O1xufVxuXG4vKiBIYW5kbGVzIHJlc3BvbnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6XG4gKiAtIGZpbmRzIHRoZSByaWdodCBkYXRhVHlwZSAobWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5cGUgYW5kIGV4cGVjdGVkIGRhdGFUeXBlKVxuICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSB7XG5cblx0dmFyIGN0LCB0eXBlLCBmaW5hbERhdGFUeXBlLCBmaXJzdERhdGFUeXBlLFxuXHRcdGNvbnRlbnRzID0gcy5jb250ZW50cyxcblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcztcblxuXHQvLyBSZW1vdmUgYXV0byBkYXRhVHlwZSBhbmQgZ2V0IGNvbnRlbnQtdHlwZSBpbiB0aGUgcHJvY2Vzc1xuXHR3aGlsZSAoIGRhdGFUeXBlc1sgMCBdID09PSBcIipcIiApIHtcblx0XHRkYXRhVHlwZXMuc2hpZnQoKTtcblx0XHRpZiAoIGN0ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGVcblx0aWYgKCBjdCApIHtcblx0XHRmb3IgKCB0eXBlIGluIGNvbnRlbnRzICkge1xuXHRcdFx0aWYgKCBjb250ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHtcblx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHR5cGUgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlXG5cdGlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkge1xuXHRcdGZpbmFsRGF0YVR5cGUgPSBkYXRhVHlwZXNbIDAgXTtcblx0fSBlbHNlIHtcblxuXHRcdC8vIFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXNcblx0XHRmb3IgKCB0eXBlIGluIHJlc3BvbnNlcyApIHtcblx0XHRcdGlmICggIWRhdGFUeXBlc1sgMCBdIHx8IHMuY29udmVydGVyc1sgdHlwZSArIFwiIFwiICsgZGF0YVR5cGVzWyAwIF0gXSApIHtcblx0XHRcdFx0ZmluYWxEYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAhZmlyc3REYXRhVHlwZSApIHtcblx0XHRcdFx0Zmlyc3REYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gT3IganVzdCB1c2UgZmlyc3Qgb25lXG5cdFx0ZmluYWxEYXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTtcblx0fVxuXG5cdC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGVcblx0Ly8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0aGUgbGlzdCBpZiBuZWVkZWRcblx0Ly8gYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuXHRpZiAoIGZpbmFsRGF0YVR5cGUgKSB7XG5cdFx0aWYgKCBmaW5hbERhdGFUeXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHtcblx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCBmaW5hbERhdGFUeXBlICk7XG5cdFx0fVxuXHRcdHJldHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTtcblx0fVxufVxuXG4vKiBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlXG4gKiBBbHNvIHNldHMgdGhlIHJlc3BvbnNlWFhYIGZpZWxkcyBvbiB0aGUganFYSFIgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICkge1xuXHR2YXIgY29udjIsIGN1cnJlbnQsIGNvbnYsIHRtcCwgcHJldixcblx0XHRjb252ZXJ0ZXJzID0ge30sXG5cblx0XHQvLyBXb3JrIHdpdGggYSBjb3B5IG9mIGRhdGFUeXBlcyBpbiBjYXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMuc2xpY2UoKTtcblxuXHQvLyBDcmVhdGUgY29udmVydGVycyBtYXAgd2l0aCBsb3dlcmNhc2VkIGtleXNcblx0aWYgKCBkYXRhVHlwZXNbIDEgXSApIHtcblx0XHRmb3IgKCBjb252IGluIHMuY29udmVydGVycyApIHtcblx0XHRcdGNvbnZlcnRlcnNbIGNvbnYudG9Mb3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBjb252IF07XG5cdFx0fVxuXHR9XG5cblx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdC8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlXG5cdHdoaWxlICggY3VycmVudCApIHtcblxuXHRcdGlmICggcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdICkge1xuXHRcdFx0anFYSFJbIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSBdID0gcmVzcG9uc2U7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgdGhlIGRhdGFGaWx0ZXIgaWYgcHJvdmlkZWRcblx0XHRpZiAoICFwcmV2ICYmIGlzU3VjY2VzcyAmJiBzLmRhdGFGaWx0ZXIgKSB7XG5cdFx0XHRyZXNwb25zZSA9IHMuZGF0YUZpbHRlciggcmVzcG9uc2UsIHMuZGF0YVR5cGUgKTtcblx0XHR9XG5cblx0XHRwcmV2ID0gY3VycmVudDtcblx0XHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0XHRpZiAoIGN1cnJlbnQgKSB7XG5cblx0XHRcdC8vIFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG9cblx0XHRcdGlmICggY3VycmVudCA9PT0gXCIqXCIgKSB7XG5cblx0XHRcdFx0Y3VycmVudCA9IHByZXY7XG5cblx0XHRcdC8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJldiBkYXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnRcblx0XHRcdH0gZWxzZSBpZiAoIHByZXYgIT09IFwiKlwiICYmIHByZXYgIT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU2VlayBhIGRpcmVjdCBjb252ZXJ0ZXJcblx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyBcIiogXCIgKyBjdXJyZW50IF07XG5cblx0XHRcdFx0Ly8gSWYgbm9uZSBmb3VuZCwgc2VlayBhIHBhaXJcblx0XHRcdFx0aWYgKCAhY29udiApIHtcblx0XHRcdFx0XHRmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnRcblx0XHRcdFx0XHRcdHRtcCA9IGNvbnYyLnNwbGl0KCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCB0bXBbIDEgXSA9PT0gY3VycmVudCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXRcblx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIHRtcFsgMCBdIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJzWyBcIiogXCIgKyB0bXBbIDAgXSBdO1xuXHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDb25kZW5zZSBlcXVpdmFsZW5jZSBjb252ZXJ0ZXJzXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjb252ID09PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGluc2VydCB0aGUgaW50ZXJtZWRpYXRlIGRhdGFUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggY29udmVydGVyc1sgY29udjIgXSAhPT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnQgPSB0bXBbIDAgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0bXBbIDEgXSApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFwcGx5IGNvbnZlcnRlciAoaWYgbm90IGFuIGVxdWl2YWxlbmNlKVxuXHRcdFx0XHRpZiAoIGNvbnYgIT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHQvLyBVbmxlc3MgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIGJ1YmJsZSwgY2F0Y2ggYW5kIHJldHVybiB0aGVtXG5cdFx0XHRcdFx0aWYgKCBjb252ICYmIHMudGhyb3dzICkge1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZTogXCJwYXJzZXJlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdGVycm9yOiBjb252ID8gZSA6IFwiTm8gY29udmVyc2lvbiBmcm9tIFwiICsgcHJldiArIFwiIHRvIFwiICsgY3VycmVudFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IHN0YXRlOiBcInN1Y2Nlc3NcIiwgZGF0YTogcmVzcG9uc2UgfTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIENvdW50ZXIgZm9yIGhvbGRpbmcgdGhlIG51bWJlciBvZiBhY3RpdmUgcXVlcmllc1xuXHRhY3RpdmU6IDAsXG5cblx0Ly8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdFxuXHRsYXN0TW9kaWZpZWQ6IHt9LFxuXHRldGFnOiB7fSxcblxuXHRhamF4U2V0dGluZ3M6IHtcblx0XHR1cmw6IGxvY2F0aW9uLmhyZWYsXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRpc0xvY2FsOiBybG9jYWxQcm90b2NvbC50ZXN0KCBsb2NhdGlvbi5wcm90b2NvbCApLFxuXHRcdGdsb2JhbDogdHJ1ZSxcblx0XHRwcm9jZXNzRGF0YTogdHJ1ZSxcblx0XHRhc3luYzogdHJ1ZSxcblx0XHRjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThcIixcblxuXHRcdC8qXG5cdFx0dGltZW91dDogMCxcblx0XHRkYXRhOiBudWxsLFxuXHRcdGRhdGFUeXBlOiBudWxsLFxuXHRcdHVzZXJuYW1lOiBudWxsLFxuXHRcdHBhc3N3b3JkOiBudWxsLFxuXHRcdGNhY2hlOiBudWxsLFxuXHRcdHRocm93czogZmFsc2UsXG5cdFx0dHJhZGl0aW9uYWw6IGZhbHNlLFxuXHRcdGhlYWRlcnM6IHt9LFxuXHRcdCovXG5cblx0XHRhY2NlcHRzOiB7XG5cdFx0XHRcIipcIjogYWxsVHlwZXMsXG5cdFx0XHR0ZXh0OiBcInRleHQvcGxhaW5cIixcblx0XHRcdGh0bWw6IFwidGV4dC9odG1sXCIsXG5cdFx0XHR4bWw6IFwiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbFwiLFxuXHRcdFx0anNvbjogXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHRcIlxuXHRcdH0sXG5cblx0XHRjb250ZW50czoge1xuXHRcdFx0eG1sOiAvXFxieG1sXFxiLyxcblx0XHRcdGh0bWw6IC9cXGJodG1sLyxcblx0XHRcdGpzb246IC9cXGJqc29uXFxiL1xuXHRcdH0sXG5cblx0XHRyZXNwb25zZUZpZWxkczoge1xuXHRcdFx0eG1sOiBcInJlc3BvbnNlWE1MXCIsXG5cdFx0XHR0ZXh0OiBcInJlc3BvbnNlVGV4dFwiLFxuXHRcdFx0anNvbjogXCJyZXNwb25zZUpTT05cIlxuXHRcdH0sXG5cblx0XHQvLyBEYXRhIGNvbnZlcnRlcnNcblx0XHQvLyBLZXlzIHNlcGFyYXRlIHNvdXJjZSAob3IgY2F0Y2hhbGwgXCIqXCIpIGFuZCBkZXN0aW5hdGlvbiB0eXBlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG5cdFx0Y29udmVydGVyczoge1xuXG5cdFx0XHQvLyBDb252ZXJ0IGFueXRoaW5nIHRvIHRleHRcblx0XHRcdFwiKiB0ZXh0XCI6IFN0cmluZyxcblxuXHRcdFx0Ly8gVGV4dCB0byBodG1sICh0cnVlID0gbm8gdHJhbnNmb3JtYXRpb24pXG5cdFx0XHRcInRleHQgaHRtbFwiOiB0cnVlLFxuXG5cdFx0XHQvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9uXG5cdFx0XHRcInRleHQganNvblwiOiBKU09OLnBhcnNlLFxuXG5cdFx0XHQvLyBQYXJzZSB0ZXh0IGFzIHhtbFxuXHRcdFx0XCJ0ZXh0IHhtbFwiOiBqUXVlcnkucGFyc2VYTUxcblx0XHR9LFxuXG5cdFx0Ly8gRm9yIG9wdGlvbnMgdGhhdCBzaG91bGRuJ3QgYmUgZGVlcCBleHRlbmRlZDpcblx0XHQvLyB5b3UgY2FuIGFkZCB5b3VyIG93biBjdXN0b20gb3B0aW9ucyBoZXJlIGlmXG5cdFx0Ly8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmVcblx0XHQvLyBkZWVwIGV4dGVuZGVkIChzZWUgYWpheEV4dGVuZClcblx0XHRmbGF0T3B0aW9uczoge1xuXHRcdFx0dXJsOiB0cnVlLFxuXHRcdFx0Y29udGV4dDogdHJ1ZVxuXHRcdH1cblx0fSxcblxuXHQvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2VkIHNldHRpbmdzIG9iamVjdCBpbnRvIHRhcmdldFxuXHQvLyB3aXRoIGJvdGggYWpheFNldHRpbmdzIGFuZCBzZXR0aW5ncyBmaWVsZHMuXG5cdC8vIElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGluZ3MuXG5cdGFqYXhTZXR1cDogZnVuY3Rpb24oIHRhcmdldCwgc2V0dGluZ3MgKSB7XG5cdFx0cmV0dXJuIHNldHRpbmdzID9cblxuXHRcdFx0Ly8gQnVpbGRpbmcgYSBzZXR0aW5ncyBvYmplY3Rcblx0XHRcdGFqYXhFeHRlbmQoIGFqYXhFeHRlbmQoIHRhcmdldCwgalF1ZXJ5LmFqYXhTZXR0aW5ncyApLCBzZXR0aW5ncyApIDpcblxuXHRcdFx0Ly8gRXh0ZW5kaW5nIGFqYXhTZXR0aW5nc1xuXHRcdFx0YWpheEV4dGVuZCggalF1ZXJ5LmFqYXhTZXR0aW5ncywgdGFyZ2V0ICk7XG5cdH0sXG5cblx0YWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksXG5cdGFqYXhUcmFuc3BvcnQ6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cyApLFxuXG5cdC8vIE1haW4gbWV0aG9kXG5cdGFqYXg6IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBzaW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZVxuXHRcdGlmICggdHlwZW9mIHVybCA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdG9wdGlvbnMgPSB1cmw7XG5cdFx0XHR1cmwgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yY2Ugb3B0aW9ucyB0byBiZSBhbiBvYmplY3Rcblx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRcdHZhciB0cmFuc3BvcnQsXG5cblx0XHRcdC8vIFVSTCB3aXRob3V0IGFudGktY2FjaGUgcGFyYW1cblx0XHRcdGNhY2hlVVJMLFxuXG5cdFx0XHQvLyBSZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcsXG5cdFx0XHRyZXNwb25zZUhlYWRlcnMsXG5cblx0XHRcdC8vIHRpbWVvdXQgaGFuZGxlXG5cdFx0XHR0aW1lb3V0VGltZXIsXG5cblx0XHRcdC8vIFVybCBjbGVhbnVwIHZhclxuXHRcdFx0dXJsQW5jaG9yLFxuXG5cdFx0XHQvLyBSZXF1ZXN0IHN0YXRlIChiZWNvbWVzIGZhbHNlIHVwb24gc2VuZCBhbmQgdHJ1ZSB1cG9uIGNvbXBsZXRpb24pXG5cdFx0XHRjb21wbGV0ZWQsXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0Y2hlZFxuXHRcdFx0ZmlyZUdsb2JhbHMsXG5cblx0XHRcdC8vIExvb3AgdmFyaWFibGVcblx0XHRcdGksXG5cblx0XHRcdC8vIHVuY2FjaGVkIHBhcnQgb2YgdGhlIHVybFxuXHRcdFx0dW5jYWNoZWQsXG5cblx0XHRcdC8vIENyZWF0ZSB0aGUgZmluYWwgb3B0aW9ucyBvYmplY3Rcblx0XHRcdHMgPSBqUXVlcnkuYWpheFNldHVwKCB7fSwgb3B0aW9ucyApLFxuXG5cdFx0XHQvLyBDYWxsYmFja3MgY29udGV4dFxuXHRcdFx0Y2FsbGJhY2tDb250ZXh0ID0gcy5jb250ZXh0IHx8IHMsXG5cblx0XHRcdC8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMgaXMgY2FsbGJhY2tDb250ZXh0IGlmIGl0IGlzIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IGNvbGxlY3Rpb25cblx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dCA9IHMuY29udGV4dCAmJlxuXHRcdFx0XHQoIGNhbGxiYWNrQ29udGV4dC5ub2RlVHlwZSB8fCBjYWxsYmFja0NvbnRleHQuanF1ZXJ5ICkgP1xuXHRcdFx0XHRqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCApIDpcblx0XHRcdFx0alF1ZXJ5LmV2ZW50LFxuXG5cdFx0XHQvLyBEZWZlcnJlZHNcblx0XHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LFxuXG5cdFx0XHQvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKVxuXHRcdFx0cmVxdWVzdEhlYWRlcnMgPSB7fSxcblx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSxcblxuXHRcdFx0Ly8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlXG5cdFx0XHRzdHJBYm9ydCA9IFwiY2FuY2VsZWRcIixcblxuXHRcdFx0Ly8gRmFrZSB4aHJcblx0XHRcdGpxWEhSID0ge1xuXHRcdFx0XHRyZWFkeVN0YXRlOiAwLFxuXG5cdFx0XHRcdC8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWRcblx0XHRcdFx0Z2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNoO1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAhcmVzcG9uc2VIZWFkZXJzICkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnMgPSB7fTtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gPVxuXHRcdFx0XHRcdFx0XHRcdFx0KCByZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gfHwgW10gKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuY29uY2F0KCBtYXRjaFsgMiBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSArIFwiIFwiIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBtYXRjaCA9PSBudWxsID8gbnVsbCA6IG1hdGNoLmpvaW4oIFwiLCBcIiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFJhdyBzdHJpbmdcblx0XHRcdFx0Z2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29tcGxldGVkID8gcmVzcG9uc2VIZWFkZXJzU3RyaW5nIDogbnVsbDtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYWNoZXMgdGhlIGhlYWRlclxuXHRcdFx0XHRzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdG5hbWUgPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSA9XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8IG5hbWU7XG5cdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUgaGVhZGVyXG5cdFx0XHRcdG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRzLm1pbWVUeXBlID0gdHlwZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdFx0c3RhdHVzQ29kZTogZnVuY3Rpb24oIG1hcCApIHtcblx0XHRcdFx0XHR2YXIgY29kZTtcblx0XHRcdFx0XHRpZiAoIG1hcCApIHtcblx0XHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrc1xuXHRcdFx0XHRcdFx0XHRqcVhIUi5hbHdheXMoIG1hcFsganFYSFIuc3RhdHVzIF0gKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTGF6eS1hZGQgdGhlIG5ldyBjYWxsYmFja3MgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgb2xkIG9uZXNcblx0XHRcdFx0XHRcdFx0Zm9yICggY29kZSBpbiBtYXAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdHVzQ29kZVsgY29kZSBdID0gWyBzdGF0dXNDb2RlWyBjb2RlIF0sIG1hcFsgY29kZSBdIF07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSByZXF1ZXN0XG5cdFx0XHRcdGFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHR2YXIgZmluYWxUZXh0ID0gc3RhdHVzVGV4dCB8fCBzdHJBYm9ydDtcblx0XHRcdFx0XHRpZiAoIHRyYW5zcG9ydCApIHtcblx0XHRcdFx0XHRcdHRyYW5zcG9ydC5hYm9ydCggZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRvbmUoIDAsIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0Ly8gQXR0YWNoIGRlZmVycmVkc1xuXHRcdGRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7XG5cblx0XHQvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVkIChwcmVmaWx0ZXJzIG1pZ2h0IGV4cGVjdCBpdClcblx0XHQvLyBIYW5kbGUgZmFsc3kgdXJsIGluIHRoZSBzZXR0aW5ncyBvYmplY3QgKHRyYWMtMTAwOTM6IGNvbnNpc3RlbmN5IHdpdGggb2xkIHNpZ25hdHVyZSlcblx0XHQvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGVcblx0XHRzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwgbG9jYXRpb24uaHJlZiApICsgXCJcIiApXG5cdFx0XHQucmVwbGFjZSggcnByb3RvY29sLCBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiApO1xuXG5cdFx0Ly8gQWxpYXMgbWV0aG9kIG9wdGlvbiB0byB0eXBlIGFzIHBlciB0aWNrZXQgdHJhYy0xMjAwNFxuXHRcdHMudHlwZSA9IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBzLnR5cGU7XG5cblx0XHQvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0XG5cdFx0cy5kYXRhVHlwZXMgPSAoIHMuZGF0YVR5cGUgfHwgXCIqXCIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cblx0XHQvLyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gdGhlIG9yaWdpbiBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50IG9yaWdpbi5cblx0XHRpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHtcblx0XHRcdHVybEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHRcdC8vIElFIHRocm93cyBleGNlcHRpb24gb24gYWNjZXNzaW5nIHRoZSBocmVmIHByb3BlcnR5IGlmIHVybCBpcyBtYWxmb3JtZWQsXG5cdFx0XHQvLyBlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbTo4MHgvXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHMudXJsO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExIG9ubHlcblx0XHRcdFx0Ly8gQW5jaG9yJ3MgaG9zdCBwcm9wZXJ0eSBpc24ndCBjb3JyZWN0bHkgc2V0IHdoZW4gcy51cmwgaXMgcmVsYXRpdmVcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSB1cmxBbmNob3IuaHJlZjtcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IG9yaWdpbkFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PVxuXHRcdFx0XHRcdHVybEFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIHVybEFuY2hvci5ob3N0O1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgVVJMLCBhc3N1bWUgaXQgaXMgY3Jvc3NEb21haW4sXG5cdFx0XHRcdC8vIGl0IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0IGlzIGludmFsaWRcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nXG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwcmVmaWx0ZXJzXG5cdFx0aW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZVxuXHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdH1cblxuXHRcdC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvXG5cdFx0Ly8gRG9uJ3QgZmlyZSBldmVudHMgaWYgalF1ZXJ5LmV2ZW50IGlzIHVuZGVmaW5lZCBpbiBhbiBBTUQtdXNhZ2Ugc2NlbmFyaW8gKHRyYWMtMTUxMTgpXG5cdFx0ZmlyZUdsb2JhbHMgPSBqUXVlcnkuZXZlbnQgJiYgcy5nbG9iYWw7XG5cblx0XHQvLyBXYXRjaCBmb3IgYSBuZXcgc2V0IG9mIHJlcXVlc3RzXG5cdFx0aWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RhcnRcIiApO1xuXHRcdH1cblxuXHRcdC8vIFVwcGVyY2FzZSB0aGUgdHlwZVxuXHRcdHMudHlwZSA9IHMudHlwZS50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRlbnRcblx0XHRzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTtcblxuXHRcdC8vIFNhdmUgdGhlIFVSTCBpbiBjYXNlIHdlJ3JlIHRveWluZyB3aXRoIHRoZSBJZi1Nb2RpZmllZC1TaW5jZVxuXHRcdC8vIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciBsYXRlciBvblxuXHRcdC8vIFJlbW92ZSBoYXNoIHRvIHNpbXBsaWZ5IHVybCBtYW5pcHVsYXRpb25cblx0XHRjYWNoZVVSTCA9IHMudXJsLnJlcGxhY2UoIHJoYXNoLCBcIlwiICk7XG5cblx0XHQvLyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudFxuXHRcdGlmICggIXMuaGFzQ29udGVudCApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIGhhc2ggc28gd2UgY2FuIHB1dCBpdCBiYWNrXG5cdFx0XHR1bmNhY2hlZCA9IHMudXJsLnNsaWNlKCBjYWNoZVVSTC5sZW5ndGggKTtcblxuXHRcdFx0Ly8gSWYgZGF0YSBpcyBhdmFpbGFibGUgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQsIGFwcGVuZCBkYXRhIHRvIHVybFxuXHRcdFx0aWYgKCBzLmRhdGEgJiYgKCBzLnByb2Nlc3NEYXRhIHx8IHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgKSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgKz0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuZGF0YTtcblxuXHRcdFx0XHQvLyB0cmFjLTk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBub3QgdXNlZCBpbiBhbiBldmVudHVhbCByZXRyeVxuXHRcdFx0XHRkZWxldGUgcy5kYXRhO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgb3IgdXBkYXRlIGFudGktY2FjaGUgcGFyYW0gaWYgbmVlZGVkXG5cdFx0XHRpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkge1xuXHRcdFx0XHRjYWNoZVVSTCA9IGNhY2hlVVJMLnJlcGxhY2UoIHJhbnRpQ2FjaGUsIFwiJDFcIiApO1xuXHRcdFx0XHR1bmNhY2hlZCA9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBcIl89XCIgKyAoIG5vbmNlLmd1aWQrKyApICtcblx0XHRcdFx0XHR1bmNhY2hlZDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUHV0IGhhc2ggYW5kIGFudGktY2FjaGUgb24gdGhlIFVSTCB0aGF0IHdpbGwgYmUgcmVxdWVzdGVkIChnaC0xNzMyKVxuXHRcdFx0cy51cmwgPSBjYWNoZVVSTCArIHVuY2FjaGVkO1xuXG5cdFx0Ly8gQ2hhbmdlICclMjAnIHRvICcrJyBpZiB0aGlzIGlzIGVuY29kZWQgZm9ybSBib2R5IGNvbnRlbnQgKGdoLTI2NTgpXG5cdFx0fSBlbHNlIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiZcblx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiICkuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICkge1xuXHRcdFx0cy5kYXRhID0gcy5kYXRhLnJlcGxhY2UoIHIyMCwgXCIrXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0aWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU1vZGlmaWVkLVNpbmNlXCIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHRcdGlmICggalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTm9uZS1NYXRjaFwiLCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudFxuXHRcdGlmICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJDb250ZW50LVR5cGVcIiwgcy5jb250ZW50VHlwZSApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGVcblx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKFxuXHRcdFx0XCJBY2NlcHRcIixcblx0XHRcdHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gP1xuXHRcdFx0XHRzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSArXG5cdFx0XHRcdFx0KCBzLmRhdGFUeXBlc1sgMCBdICE9PSBcIipcIiA/IFwiLCBcIiArIGFsbFR5cGVzICsgXCI7IHE9MC4wMVwiIDogXCJcIiApIDpcblx0XHRcdFx0cy5hY2NlcHRzWyBcIipcIiBdXG5cdFx0KTtcblxuXHRcdC8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvblxuXHRcdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTtcblx0XHR9XG5cblx0XHQvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0XG5cdFx0aWYgKCBzLmJlZm9yZVNlbmQgJiZcblx0XHRcdCggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgY29tcGxldGVkICkgKSB7XG5cblx0XHRcdC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVyblxuXHRcdFx0cmV0dXJuIGpxWEhSLmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uXG5cdFx0c3RyQWJvcnQgPSBcImFib3J0XCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHNcblx0XHRjb21wbGV0ZURlZmVycmVkLmFkZCggcy5jb21wbGV0ZSApO1xuXHRcdGpxWEhSLmRvbmUoIHMuc3VjY2VzcyApO1xuXHRcdGpxWEhSLmZhaWwoIHMuZXJyb3IgKTtcblxuXHRcdC8vIEdldCB0cmFuc3BvcnRcblx0XHR0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydFxuXHRcdGlmICggIXRyYW5zcG9ydCApIHtcblx0XHRcdGRvbmUoIC0xLCBcIk5vIFRyYW5zcG9ydFwiICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSAxO1xuXG5cdFx0XHQvLyBTZW5kIGdsb2JhbCBldmVudFxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheFNlbmRcIiwgWyBqcVhIUiwgcyBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9wIHRoZXJlXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaW1lb3V0XG5cdFx0XHRpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHtcblx0XHRcdFx0dGltZW91dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGpxWEhSLmFib3J0KCBcInRpbWVvdXRcIiApO1xuXHRcdFx0XHR9LCBzLnRpbWVvdXQgKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29tcGxldGVkID0gZmFsc2U7XG5cdFx0XHRcdHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gUmV0aHJvdyBwb3N0LWNvbXBsZXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUHJvcGFnYXRlIG90aGVycyBhcyByZXN1bHRzXG5cdFx0XHRcdGRvbmUoIC0xLCBlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lXG5cdFx0ZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7XG5cdFx0XHR2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVkLFxuXHRcdFx0XHRzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDtcblxuXHRcdFx0Ly8gSWdub3JlIHJlcGVhdCBpbnZvY2F0aW9uc1xuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29tcGxldGVkID0gdHJ1ZTtcblxuXHRcdFx0Ly8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHNcblx0XHRcdGlmICggdGltZW91dFRpbWVyICkge1xuXHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb25cblx0XHRcdC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpXG5cdFx0XHR0cmFuc3BvcnQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgXCJcIjtcblxuXHRcdFx0Ly8gU2V0IHJlYWR5U3RhdGVcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7XG5cblx0XHRcdC8vIERldGVybWluZSBpZiBzdWNjZXNzZnVsXG5cdFx0XHRpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNDtcblxuXHRcdFx0Ly8gR2V0IHJlc3BvbnNlIGRhdGFcblx0XHRcdGlmICggcmVzcG9uc2VzICkge1xuXHRcdFx0XHRyZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVXNlIGEgbm9vcCBjb252ZXJ0ZXIgZm9yIG1pc3Npbmcgc2NyaXB0IGJ1dCBub3QgaWYganNvbnBcblx0XHRcdGlmICggIWlzU3VjY2VzcyAmJlxuXHRcdFx0XHRqUXVlcnkuaW5BcnJheSggXCJzY3JpcHRcIiwgcy5kYXRhVHlwZXMgKSA+IC0xICYmXG5cdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBcImpzb25cIiwgcy5kYXRhVHlwZXMgKSA8IDAgKSB7XG5cdFx0XHRcdHMuY29udmVydGVyc1sgXCJ0ZXh0IHNjcmlwdFwiIF0gPSBmdW5jdGlvbigpIHt9O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IG5vIG1hdHRlciB3aGF0ICh0aGF0IHdheSByZXNwb25zZVhYWCBmaWVsZHMgYXJlIGFsd2F5cyBzZXQpXG5cdFx0XHRyZXNwb25zZSA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApO1xuXG5cdFx0XHQvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFpbmluZ1xuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cblx0XHRcdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRcdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJMYXN0LU1vZGlmaWVkXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcImV0YWdcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGlmIG5vIGNvbnRlbnRcblx0XHRcdFx0aWYgKCBzdGF0dXMgPT09IDIwNCB8fCBzLnR5cGUgPT09IFwiSEVBRFwiICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vY29udGVudFwiO1xuXG5cdFx0XHRcdC8vIGlmIG5vdCBtb2RpZmllZFxuXHRcdFx0XHR9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDMwNCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub3Rtb2RpZmllZFwiO1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgZGF0YSwgbGV0J3MgY29udmVydCBpdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0ZTtcblx0XHRcdFx0XHRzdWNjZXNzID0gcmVzcG9uc2UuZGF0YTtcblx0XHRcdFx0XHRlcnJvciA9IHJlc3BvbnNlLmVycm9yO1xuXHRcdFx0XHRcdGlzU3VjY2VzcyA9ICFlcnJvcjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBFeHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dCBhbmQgbm9ybWFsaXplIGZvciBub24tYWJvcnRzXG5cdFx0XHRcdGVycm9yID0gc3RhdHVzVGV4dDtcblx0XHRcdFx0aWYgKCBzdGF0dXMgfHwgIXN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwiZXJyb3JcIjtcblx0XHRcdFx0XHRpZiAoIHN0YXR1cyA8IDAgKSB7XG5cdFx0XHRcdFx0XHRzdGF0dXMgPSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdFxuXHRcdFx0anFYSFIuc3RhdHVzID0gc3RhdHVzO1xuXHRcdFx0anFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICkgKyBcIlwiO1xuXG5cdFx0XHQvLyBTdWNjZXNzL0Vycm9yXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdGpxWEhSLnN0YXR1c0NvZGUoIHN0YXR1c0NvZGUgKTtcblx0XHRcdHN0YXR1c0NvZGUgPSB1bmRlZmluZWQ7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBpc1N1Y2Nlc3MgPyBcImFqYXhTdWNjZXNzXCIgOiBcImFqYXhFcnJvclwiLFxuXHRcdFx0XHRcdFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbXBsZXRlXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQgXSApO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4Q29tcGxldGVcIiwgWyBqcVhIUiwgcyBdICk7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyXG5cdFx0XHRcdGlmICggISggLS1qUXVlcnkuYWN0aXZlICkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0b3BcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpxWEhSO1xuXHR9LFxuXG5cdGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIGRhdGEsIGNhbGxiYWNrLCBcImpzb25cIiApO1xuXHR9LFxuXG5cdGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgXCJzY3JpcHRcIiApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiZ2V0XCIsIFwicG9zdFwiIF0sIGZ1bmN0aW9uKCBfaSwgbWV0aG9kICkge1xuXHRqUXVlcnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7XG5cblx0XHQvLyBTaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRlZFxuXHRcdGlmICggaXNGdW5jdGlvbiggZGF0YSApICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7XG5cdFx0XHRjYWxsYmFjayA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFRoZSB1cmwgY2FuIGJlIGFuIG9wdGlvbnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKVxuXHRcdHJldHVybiBqUXVlcnkuYWpheCggalF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHR0eXBlOiBtZXRob2QsXG5cdFx0XHRkYXRhVHlwZTogdHlwZSxcblx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRzdWNjZXNzOiBjYWxsYmFja1xuXHRcdH0sIGpRdWVyeS5pc1BsYWluT2JqZWN0KCB1cmwgKSAmJiB1cmwgKSApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkuYWpheFByZWZpbHRlciggZnVuY3Rpb24oIHMgKSB7XG5cdHZhciBpO1xuXHRmb3IgKCBpIGluIHMuaGVhZGVycyApIHtcblx0XHRpZiAoIGkudG9Mb3dlckNhc2UoKSA9PT0gXCJjb250ZW50LXR5cGVcIiApIHtcblx0XHRcdHMuY29udGVudFR5cGUgPSBzLmhlYWRlcnNbIGkgXSB8fCBcIlwiO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbmpRdWVyeS5fZXZhbFVybCA9IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMsIGRvYyApIHtcblx0cmV0dXJuIGpRdWVyeS5hamF4KCB7XG5cdFx0dXJsOiB1cmwsXG5cblx0XHQvLyBNYWtlIHRoaXMgZXhwbGljaXQsIHNpbmNlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3VnaCBhamF4U2V0dXAgKHRyYWMtMTEyNjQpXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRkYXRhVHlwZTogXCJzY3JpcHRcIixcblx0XHRjYWNoZTogdHJ1ZSxcblx0XHRhc3luYzogZmFsc2UsXG5cdFx0Z2xvYmFsOiBmYWxzZSxcblxuXHRcdC8vIE9ubHkgZXZhbHVhdGUgdGhlIHJlc3BvbnNlIGlmIGl0IGlzIHN1Y2Nlc3NmdWwgKGdoLTQxMjYpXG5cdFx0Ly8gZGF0YUZpbHRlciBpcyBub3QgaW52b2tlZCBmb3IgZmFpbHVyZSByZXNwb25zZXMsIHNvIHVzaW5nIGl0IGluc3RlYWRcblx0XHQvLyBvZiB0aGUgZGVmYXVsdCBjb252ZXJ0ZXIgaXMga2x1ZGd5IGJ1dCBpdCB3b3Jrcy5cblx0XHRjb252ZXJ0ZXJzOiB7XG5cdFx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCkge31cblx0XHR9LFxuXHRcdGRhdGFGaWx0ZXI6IGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCByZXNwb25zZSwgb3B0aW9ucywgZG9jICk7XG5cdFx0fVxuXHR9ICk7XG59O1xuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0d3JhcEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIHdyYXA7XG5cblx0XHRpZiAoIHRoaXNbIDAgXSApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0XHRodG1sID0gaHRtbC5jYWxsKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmRcblx0XHRcdHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50ICkuZXEoIDAgKS5jbG9uZSggdHJ1ZSApO1xuXG5cdFx0XHRpZiAoIHRoaXNbIDAgXS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR3cmFwLmluc2VydEJlZm9yZSggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHdyYXAubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGVsZW0gPSB0aGlzO1xuXG5cdFx0XHRcdHdoaWxlICggZWxlbS5maXJzdEVsZW1lbnRDaGlsZCApIHtcblx0XHRcdFx0XHRlbGVtID0gZWxlbS5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbGVtO1xuXHRcdFx0fSApLmFwcGVuZCggdGhpcyApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcElubmVyKCBodG1sLmNhbGwoIHRoaXMsIGkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSxcblx0XHRcdFx0Y29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7XG5cblx0XHRcdGlmICggY29udGVudHMubGVuZ3RoICkge1xuXHRcdFx0XHRjb250ZW50cy53cmFwQWxsKCBodG1sICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYuYXBwZW5kKCBodG1sICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHdyYXA6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciBodG1sSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIGh0bWwgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaHRtbElzRnVuY3Rpb24gPyBodG1sLmNhbGwoIHRoaXMsIGkgKSA6IGh0bWwgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0dW53cmFwOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dGhpcy5wYXJlbnQoIHNlbGVjdG9yICkubm90KCBcImJvZHlcIiApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApO1xuXHRcdH0gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhalF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlKCBlbGVtICk7XG59O1xualF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhISggZWxlbS5vZmZzZXRXaWR0aCB8fCBlbGVtLm9mZnNldEhlaWdodCB8fCBlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICk7XG59O1xuXG5cblxuXG5qUXVlcnkuYWpheFNldHRpbmdzLnhociA9IGZ1bmN0aW9uKCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7XG5cdH0gY2F0Y2ggKCBlICkge31cbn07XG5cbnZhciB4aHJTdWNjZXNzU3RhdHVzID0ge1xuXG5cdFx0Ly8gRmlsZSBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyBjb2RlIDAsIGFzc3VtZSAyMDBcblx0XHQwOiAyMDAsXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdC8vIHRyYWMtMTQ1MDogc29tZXRpbWVzIElFIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDRcblx0XHQxMjIzOiAyMDRcblx0fSxcblx0eGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTtcblxuc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCBcIndpdGhDcmVkZW50aWFsc1wiIGluIHhoclN1cHBvcnRlZCApO1xuc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7XG5cbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0dmFyIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrO1xuXG5cdC8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3Rcblx0aWYgKCBzdXBwb3J0LmNvcnMgfHwgeGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3NzRG9tYWluICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHZhciBpLFxuXHRcdFx0XHRcdHhociA9IG9wdGlvbnMueGhyKCk7XG5cblx0XHRcdFx0eGhyLm9wZW4oXG5cdFx0XHRcdFx0b3B0aW9ucy50eXBlLFxuXHRcdFx0XHRcdG9wdGlvbnMudXJsLFxuXHRcdFx0XHRcdG9wdGlvbnMuYXN5bmMsXG5cdFx0XHRcdFx0b3B0aW9ucy51c2VybmFtZSxcblx0XHRcdFx0XHRvcHRpb25zLnBhc3N3b3JkXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdGZvciAoIGkgaW4gb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0XHR4aHJbIGkgXSA9IG9wdGlvbnMueGhyRmllbGRzWyBpIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7XG5cdFx0XHRcdFx0eGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyXG5cdFx0XHRcdC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmVcblx0XHRcdFx0Ly8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS5cblx0XHRcdFx0Ly8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApXG5cdFx0XHRcdC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLlxuXHRcdFx0XHRpZiAoICFvcHRpb25zLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdICkge1xuXHRcdFx0XHRcdGhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gPSBcIlhNTEh0dHBSZXF1ZXN0XCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTZXQgaGVhZGVyc1xuXHRcdFx0XHRmb3IgKCBpIGluIGhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRlcnNbIGkgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRjYWxsYmFjayA9IGVycm9yQ2FsbGJhY2sgPSB4aHIub25sb2FkID1cblx0XHRcdFx0XHRcdFx0XHR4aHIub25lcnJvciA9IHhoci5vbmFib3J0ID0geGhyLm9udGltZW91dCA9XG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiYWJvcnRcIiApIHtcblx0XHRcdFx0XHRcdFx0XHR4aHIuYWJvcnQoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gXCJlcnJvclwiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBPbiBhIG1hbnVhbCBuYXRpdmUgYWJvcnQsIElFOSB0aHJvd3Ncblx0XHRcdFx0XHRcdFx0XHQvLyBlcnJvcnMgb24gYW55IHByb3BlcnR5IGFjY2VzcyB0aGF0IGlzIG5vdCByZWFkeVN0YXRlXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlb2YgeGhyLnN0YXR1cyAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCAwLCBcImVycm9yXCIgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRmlsZTogcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgMDsgc2VlIHRyYWMtODYwNSwgdHJhYy0xNDIwN1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHJTdWNjZXNzU3RhdHVzWyB4aHIuc3RhdHVzIF0gfHwgeGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0LFxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSUU5IGhhcyBubyBYSFIyIGJ1dCB0aHJvd3Mgb24gYmluYXJ5ICh0cmFjLTExNDI2KVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIFhIUjIgbm9uLXRleHQsIGxldCB0aGUgY2FsbGVyIGhhbmRsZSBpdCAoZ2gtMjQ5OClcblx0XHRcdFx0XHRcdFx0XHRcdCggeGhyLnJlc3BvbnNlVHlwZSB8fCBcInRleHRcIiApICE9PSBcInRleHRcIiAgfHxcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0ICE9PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0eyBiaW5hcnk6IHhoci5yZXNwb25zZSB9IDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyB0ZXh0OiB4aHIucmVzcG9uc2VUZXh0IH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBMaXN0ZW4gdG8gZXZlbnRzXG5cdFx0XHRcdHhoci5vbmxvYWQgPSBjYWxsYmFjaygpO1xuXHRcdFx0XHRlcnJvckNhbGxiYWNrID0geGhyLm9uZXJyb3IgPSB4aHIub250aW1lb3V0ID0gY2FsbGJhY2soIFwiZXJyb3JcIiApO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdFx0XHQvLyBVc2Ugb25yZWFkeXN0YXRlY2hhbmdlIHRvIHJlcGxhY2Ugb25hYm9ydFxuXHRcdFx0XHQvLyB0byBoYW5kbGUgdW5jYXVnaHQgYWJvcnRzXG5cdFx0XHRcdGlmICggeGhyLm9uYWJvcnQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR4aHIub25hYm9ydCA9IGVycm9yQ2FsbGJhY2s7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBDaGVjayByZWFkeVN0YXRlIGJlZm9yZSB0aW1lb3V0IGFzIGl0IGNoYW5nZXNcblx0XHRcdFx0XHRcdGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQWxsb3cgb25lcnJvciB0byBiZSBjYWxsZWQgZmlyc3QsXG5cdFx0XHRcdFx0XHRcdC8vIGJ1dCB0aGF0IHdpbGwgbm90IGhhbmRsZSBhIG5hdGl2ZSBhYm9ydFxuXHRcdFx0XHRcdFx0XHQvLyBBbHNvLCBzYXZlIGVycm9yQ2FsbGJhY2sgdG8gYSB2YXJpYWJsZVxuXHRcdFx0XHRcdFx0XHQvLyBhcyB4aHIub25lcnJvciBjYW5ub3QgYmUgYWNjZXNzZWRcblx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBjYWxsYmFjayggXCJhYm9ydFwiICk7XG5cblx0XHRcdFx0dHJ5IHtcblxuXHRcdFx0XHRcdC8vIERvIHNlbmQgdGhlIHJlcXVlc3QgKHRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbilcblx0XHRcdFx0XHR4aHIuc2VuZCggb3B0aW9ucy5oYXNDb250ZW50ICYmIG9wdGlvbnMuZGF0YSB8fCBudWxsICk7XG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0Ly8gdHJhYy0xNDY4MzogT25seSByZXRocm93IGlmIHRoaXMgaGFzbid0IGJlZW4gbm90aWZpZWQgYXMgYW4gZXJyb3IgeWV0XG5cdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUHJldmVudCBhdXRvLWV4ZWN1dGlvbiBvZiBzY3JpcHRzIHdoZW4gbm8gZXhwbGljaXQgZGF0YVR5cGUgd2FzIHByb3ZpZGVkIChTZWUgZ2gtMjQzMilcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMuY29udGVudHMuc2NyaXB0ID0gZmFsc2U7XG5cdH1cbn0gKTtcblxuLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGVcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0YWNjZXB0czoge1xuXHRcdHNjcmlwdDogXCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIFwiICtcblx0XHRcdFwiYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0XCJcblx0fSxcblx0Y29udGVudHM6IHtcblx0XHRzY3JpcHQ6IC9cXGIoPzpqYXZhfGVjbWEpc2NyaXB0XFxiL1xuXHR9LFxuXHRjb252ZXJ0ZXJzOiB7XG5cdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBjcm9zc0RvbWFpblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRzLmNhY2hlID0gZmFsc2U7XG5cdH1cblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMudHlwZSA9IFwiR0VUXCI7XG5cdH1cbn0gKTtcblxuLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0XG5qUXVlcnkuYWpheFRyYW5zcG9ydCggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cblx0Ly8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiBvciBmb3JjZWQtYnktYXR0cnMgcmVxdWVzdHNcblx0aWYgKCBzLmNyb3NzRG9tYWluIHx8IHMuc2NyaXB0QXR0cnMgKSB7XG5cdFx0dmFyIHNjcmlwdCwgY2FsbGJhY2s7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBfLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0c2NyaXB0ID0galF1ZXJ5KCBcIjxzY3JpcHQ+XCIgKVxuXHRcdFx0XHRcdC5hdHRyKCBzLnNjcmlwdEF0dHJzIHx8IHt9IClcblx0XHRcdFx0XHQucHJvcCggeyBjaGFyc2V0OiBzLnNjcmlwdENoYXJzZXQsIHNyYzogcy51cmwgfSApXG5cdFx0XHRcdFx0Lm9uKCBcImxvYWQgZXJyb3JcIiwgY2FsbGJhY2sgPSBmdW5jdGlvbiggZXZ0ICkge1xuXHRcdFx0XHRcdFx0c2NyaXB0LnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCBldnQudHlwZSA9PT0gXCJlcnJvclwiID8gNDA0IDogMjAwLCBldnQudHlwZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHQvLyBVc2UgbmF0aXZlIERPTSBtYW5pcHVsYXRpb24gdG8gYXZvaWQgb3VyIGRvbU1hbmlwIEFKQVggdHJpY2tlcnlcblx0XHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0WyAwIF0gKTtcblx0XHRcdH0sXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIG9sZENhbGxiYWNrcyA9IFtdLFxuXHRyanNvbnAgPSAvKD0pXFw/KD89JnwkKXxcXD9cXD8vO1xuXG4vLyBEZWZhdWx0IGpzb25wIHNldHRpbmdzXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGpzb25wOiBcImNhbGxiYWNrXCIsXG5cdGpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjYWxsYmFjayA9IG9sZENhbGxiYWNrcy5wb3AoKSB8fCAoIGpRdWVyeS5leHBhbmRvICsgXCJfXCIgKyAoIG5vbmNlLmd1aWQrKyApICk7XG5cdFx0dGhpc1sgY2FsbGJhY2sgXSA9IHRydWU7XG5cdFx0cmV0dXJuIGNhbGxiYWNrO1xuXHR9XG59ICk7XG5cbi8vIERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBqc29ucCByZXF1ZXN0c1xualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwianNvbiBqc29ucFwiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7XG5cblx0dmFyIGNhbGxiYWNrTmFtZSwgb3ZlcndyaXR0ZW4sIHJlc3BvbnNlQ29udGFpbmVyLFxuXHRcdGpzb25Qcm9wID0gcy5qc29ucCAhPT0gZmFsc2UgJiYgKCByanNvbnAudGVzdCggcy51cmwgKSA/XG5cdFx0XHRcInVybFwiIDpcblx0XHRcdHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKVxuXHRcdFx0XHRcdC5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgJiZcblx0XHRcdFx0cmpzb25wLnRlc3QoIHMuZGF0YSApICYmIFwiZGF0YVwiXG5cdFx0KTtcblxuXHQvLyBIYW5kbGUgaWZmIHRoZSBleHBlY3RlZCBkYXRhIHR5cGUgaXMgXCJqc29ucFwiIG9yIHdlIGhhdmUgYSBwYXJhbWV0ZXIgdG8gc2V0XG5cdGlmICgganNvblByb3AgfHwgcy5kYXRhVHlwZXNbIDAgXSA9PT0gXCJqc29ucFwiICkge1xuXG5cdFx0Ly8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdFxuXHRcdGNhbGxiYWNrTmFtZSA9IHMuanNvbnBDYWxsYmFjayA9IGlzRnVuY3Rpb24oIHMuanNvbnBDYWxsYmFjayApID9cblx0XHRcdHMuanNvbnBDYWxsYmFjaygpIDpcblx0XHRcdHMuanNvbnBDYWxsYmFjaztcblxuXHRcdC8vIEluc2VydCBjYWxsYmFjayBpbnRvIHVybCBvciBmb3JtIGRhdGFcblx0XHRpZiAoIGpzb25Qcm9wICkge1xuXHRcdFx0c1sganNvblByb3AgXSA9IHNbIGpzb25Qcm9wIF0ucmVwbGFjZSggcmpzb25wLCBcIiQxXCIgKyBjYWxsYmFja05hbWUgKTtcblx0XHR9IGVsc2UgaWYgKCBzLmpzb25wICE9PSBmYWxzZSApIHtcblx0XHRcdHMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmpzb25wICsgXCI9XCIgKyBjYWxsYmFja05hbWU7XG5cdFx0fVxuXG5cdFx0Ly8gVXNlIGRhdGEgY29udmVydGVyIHRvIHJldHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4ZWN1dGlvblxuXHRcdHMuY29udmVydGVyc1sgXCJzY3JpcHQganNvblwiIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggIXJlc3BvbnNlQ29udGFpbmVyICkge1xuXHRcdFx0XHRqUXVlcnkuZXJyb3IoIGNhbGxiYWNrTmFtZSArIFwiIHdhcyBub3QgY2FsbGVkXCIgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXNwb25zZUNvbnRhaW5lclsgMCBdO1xuXHRcdH07XG5cblx0XHQvLyBGb3JjZSBqc29uIGRhdGFUeXBlXG5cdFx0cy5kYXRhVHlwZXNbIDAgXSA9IFwianNvblwiO1xuXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja1xuXHRcdG92ZXJ3cml0dGVuID0gd2luZG93WyBjYWxsYmFja05hbWUgXTtcblx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IGFyZ3VtZW50cztcblx0XHR9O1xuXG5cdFx0Ly8gQ2xlYW4tdXAgZnVuY3Rpb24gKGZpcmVzIGFmdGVyIGNvbnZlcnRlcnMpXG5cdFx0anFYSFIuYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gSWYgcHJldmlvdXMgdmFsdWUgZGlkbid0IGV4aXN0IC0gcmVtb3ZlIGl0XG5cdFx0XHRpZiAoIG92ZXJ3cml0dGVuID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdGpRdWVyeSggd2luZG93ICkucmVtb3ZlUHJvcCggY2FsbGJhY2tOYW1lICk7XG5cblx0XHRcdC8vIE90aGVyd2lzZSByZXN0b3JlIHByZWV4aXN0aW5nIHZhbHVlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNhdmUgYmFjayBhcyBmcmVlXG5cdFx0XHRpZiAoIHNbIGNhbGxiYWNrTmFtZSBdICkge1xuXG5cdFx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHJlLXVzaW5nIHRoZSBvcHRpb25zIGRvZXNuJ3Qgc2NyZXcgdGhpbmdzIGFyb3VuZFxuXHRcdFx0XHRzLmpzb25wQ2FsbGJhY2sgPSBvcmlnaW5hbFNldHRpbmdzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHRcdFx0Ly8gU2F2ZSB0aGUgY2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZVxuXHRcdFx0XHRvbGRDYWxsYmFja3MucHVzaCggY2FsbGJhY2tOYW1lICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENhbGwgaWYgaXQgd2FzIGEgZnVuY3Rpb24gYW5kIHdlIGhhdmUgYSByZXNwb25zZVxuXHRcdFx0aWYgKCByZXNwb25zZUNvbnRhaW5lciAmJiBpc0Z1bmN0aW9uKCBvdmVyd3JpdHRlbiApICkge1xuXHRcdFx0XHRvdmVyd3JpdHRlbiggcmVzcG9uc2VDb250YWluZXJbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IG92ZXJ3cml0dGVuID0gdW5kZWZpbmVkO1xuXHRcdH0gKTtcblxuXHRcdC8vIERlbGVnYXRlIHRvIHNjcmlwdFxuXHRcdHJldHVybiBcInNjcmlwdFwiO1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA4IG9ubHlcbi8vIEluIFNhZmFyaSA4IGRvY3VtZW50cyBjcmVhdGVkIHZpYSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnRcbi8vIGNvbGxhcHNlIHNpYmxpbmcgZm9ybXM6IHRoZSBzZWNvbmQgb25lIGJlY29tZXMgYSBjaGlsZCBvZiB0aGUgZmlyc3Qgb25lLlxuLy8gQmVjYXVzZSBvZiB0aGF0LCB0aGlzIHNlY3VyaXR5IG1lYXN1cmUgaGFzIHRvIGJlIGRpc2FibGVkIGluIFNhZmFyaSA4LlxuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzMzN1xuc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgPSAoIGZ1bmN0aW9uKCkge1xuXHR2YXIgYm9keSA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApLmJvZHk7XG5cdGJvZHkuaW5uZXJIVE1MID0gXCI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3JtPlwiO1xuXHRyZXR1cm4gYm9keS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMjtcbn0gKSgpO1xuXG5cbi8vIEFyZ3VtZW50IFwiZGF0YVwiIHNob3VsZCBiZSBzdHJpbmcgb2YgaHRtbFxuLy8gY29udGV4dCAob3B0aW9uYWwpOiBJZiBzcGVjaWZpZWQsIHRoZSBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0LFxuLy8gZGVmYXVsdHMgdG8gZG9jdW1lbnRcbi8vIGtlZXBTY3JpcHRzIChvcHRpb25hbCk6IElmIHRydWUsIHdpbGwgaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgaHRtbCBzdHJpbmdcbmpRdWVyeS5wYXJzZUhUTUwgPSBmdW5jdGlvbiggZGF0YSwgY29udGV4dCwga2VlcFNjcmlwdHMgKSB7XG5cdGlmICggdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGtlZXBTY3JpcHRzID0gY29udGV4dDtcblx0XHRjb250ZXh0ID0gZmFsc2U7XG5cdH1cblxuXHR2YXIgYmFzZSwgcGFyc2VkLCBzY3JpcHRzO1xuXG5cdGlmICggIWNvbnRleHQgKSB7XG5cblx0XHQvLyBTdG9wIHNjcmlwdHMgb3IgaW5saW5lIGV2ZW50IGhhbmRsZXJzIGZyb20gYmVpbmcgZXhlY3V0ZWQgaW1tZWRpYXRlbHlcblx0XHQvLyBieSB1c2luZyBkb2N1bWVudC5pbXBsZW1lbnRhdGlvblxuXHRcdGlmICggc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgKSB7XG5cdFx0XHRjb250ZXh0ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICk7XG5cblx0XHRcdC8vIFNldCB0aGUgYmFzZSBocmVmIGZvciB0aGUgY3JlYXRlZCBkb2N1bWVudFxuXHRcdFx0Ly8gc28gYW55IHBhcnNlZCBlbGVtZW50cyB3aXRoIFVSTHNcblx0XHRcdC8vIGFyZSBiYXNlZCBvbiB0aGUgZG9jdW1lbnQncyBVUkwgKGdoLTI5NjUpXG5cdFx0XHRiYXNlID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImJhc2VcIiApO1xuXHRcdFx0YmFzZS5ocmVmID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZjtcblx0XHRcdGNvbnRleHQuaGVhZC5hcHBlbmRDaGlsZCggYmFzZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250ZXh0ID0gZG9jdW1lbnQ7XG5cdFx0fVxuXHR9XG5cblx0cGFyc2VkID0gcnNpbmdsZVRhZy5leGVjKCBkYXRhICk7XG5cdHNjcmlwdHMgPSAha2VlcFNjcmlwdHMgJiYgW107XG5cblx0Ly8gU2luZ2xlIHRhZ1xuXHRpZiAoIHBhcnNlZCApIHtcblx0XHRyZXR1cm4gWyBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIHBhcnNlZFsgMSBdICkgXTtcblx0fVxuXG5cdHBhcnNlZCA9IGJ1aWxkRnJhZ21lbnQoIFsgZGF0YSBdLCBjb250ZXh0LCBzY3JpcHRzICk7XG5cblx0aWYgKCBzY3JpcHRzICYmIHNjcmlwdHMubGVuZ3RoICkge1xuXHRcdGpRdWVyeSggc2NyaXB0cyApLnJlbW92ZSgpO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIHBhcnNlZC5jaGlsZE5vZGVzICk7XG59O1xuXG5cbi8qKlxuICogTG9hZCBhIHVybCBpbnRvIGEgcGFnZVxuICovXG5qUXVlcnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7XG5cdHZhciBzZWxlY3RvciwgdHlwZSwgcmVzcG9uc2UsXG5cdFx0c2VsZiA9IHRoaXMsXG5cdFx0b2ZmID0gdXJsLmluZGV4T2YoIFwiIFwiICk7XG5cblx0aWYgKCBvZmYgPiAtMSApIHtcblx0XHRzZWxlY3RvciA9IHN0cmlwQW5kQ29sbGFwc2UoIHVybC5zbGljZSggb2ZmICkgKTtcblx0XHR1cmwgPSB1cmwuc2xpY2UoIDAsIG9mZiApO1xuXHR9XG5cblx0Ly8gSWYgaXQncyBhIGZ1bmN0aW9uXG5cdGlmICggaXNGdW5jdGlvbiggcGFyYW1zICkgKSB7XG5cblx0XHQvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFja1xuXHRcdGNhbGxiYWNrID0gcGFyYW1zO1xuXHRcdHBhcmFtcyA9IHVuZGVmaW5lZDtcblxuXHQvLyBPdGhlcndpc2UsIGJ1aWxkIGEgcGFyYW0gc3RyaW5nXG5cdH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSBcIm9iamVjdFwiICkge1xuXHRcdHR5cGUgPSBcIlBPU1RcIjtcblx0fVxuXG5cdC8vIElmIHdlIGhhdmUgZWxlbWVudHMgdG8gbW9kaWZ5LCBtYWtlIHRoZSByZXF1ZXN0XG5cdGlmICggc2VsZi5sZW5ndGggPiAwICkge1xuXHRcdGpRdWVyeS5hamF4KCB7XG5cdFx0XHR1cmw6IHVybCxcblxuXHRcdFx0Ly8gSWYgXCJ0eXBlXCIgdmFyaWFibGUgaXMgdW5kZWZpbmVkLCB0aGVuIFwiR0VUXCIgbWV0aG9kIHdpbGwgYmUgdXNlZC5cblx0XHRcdC8vIE1ha2UgdmFsdWUgb2YgdGhpcyBmaWVsZCBleHBsaWNpdCBzaW5jZVxuXHRcdFx0Ly8gdXNlciBjYW4gb3ZlcnJpZGUgaXQgdGhyb3VnaCBhamF4U2V0dXAgbWV0aG9kXG5cdFx0XHR0eXBlOiB0eXBlIHx8IFwiR0VUXCIsXG5cdFx0XHRkYXRhVHlwZTogXCJodG1sXCIsXG5cdFx0XHRkYXRhOiBwYXJhbXNcblx0XHR9ICkuZG9uZSggZnVuY3Rpb24oIHJlc3BvbnNlVGV4dCApIHtcblxuXHRcdFx0Ly8gU2F2ZSByZXNwb25zZSBmb3IgdXNlIGluIGNvbXBsZXRlIGNhbGxiYWNrXG5cdFx0XHRyZXNwb25zZSA9IGFyZ3VtZW50cztcblxuXHRcdFx0c2VsZi5odG1sKCBzZWxlY3RvciA/XG5cblx0XHRcdFx0Ly8gSWYgYSBzZWxlY3RvciB3YXMgc3BlY2lmaWVkLCBsb2NhdGUgdGhlIHJpZ2h0IGVsZW1lbnRzIGluIGEgZHVtbXkgZGl2XG5cdFx0XHRcdC8vIEV4Y2x1ZGUgc2NyaXB0cyB0byBhdm9pZCBJRSAnUGVybWlzc2lvbiBEZW5pZWQnIGVycm9yc1xuXHRcdFx0XHRqUXVlcnkoIFwiPGRpdj5cIiApLmFwcGVuZCggalF1ZXJ5LnBhcnNlSFRNTCggcmVzcG9uc2VUZXh0ICkgKS5maW5kKCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgdXNlIHRoZSBmdWxsIHJlc3VsdFxuXHRcdFx0XHRyZXNwb25zZVRleHQgKTtcblxuXHRcdC8vIElmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJkYXRhXCIsIFwic3RhdHVzXCIsIFwianFYSFJcIlxuXHRcdC8vIGJ1dCB0aGV5IGFyZSBpZ25vcmVkIGJlY2F1c2UgcmVzcG9uc2Ugd2FzIHNldCBhYm92ZS5cblx0XHQvLyBJZiBpdCBmYWlscywgdGhpcyBmdW5jdGlvbiBnZXRzIFwianFYSFJcIiwgXCJzdGF0dXNcIiwgXCJlcnJvclwiXG5cdFx0fSApLmFsd2F5cyggY2FsbGJhY2sgJiYgZnVuY3Rpb24oIGpxWEhSLCBzdGF0dXMgKSB7XG5cdFx0XHRzZWxmLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjYWxsYmFjay5hcHBseSggdGhpcywgcmVzcG9uc2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuXG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4galF1ZXJ5LmdyZXAoIGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTtcblx0fSApLmxlbmd0aDtcbn07XG5cblxuXG5cbmpRdWVyeS5vZmZzZXQgPSB7XG5cdHNldE9mZnNldDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGkgKSB7XG5cdFx0dmFyIGN1clBvc2l0aW9uLCBjdXJMZWZ0LCBjdXJDU1NUb3AsIGN1clRvcCwgY3VyT2Zmc2V0LCBjdXJDU1NMZWZ0LCBjYWxjdWxhdGVQb3NpdGlvbixcblx0XHRcdHBvc2l0aW9uID0galF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICksXG5cdFx0XHRjdXJFbGVtID0galF1ZXJ5KCBlbGVtICksXG5cdFx0XHRwcm9wcyA9IHt9O1xuXG5cdFx0Ly8gU2V0IHBvc2l0aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbVxuXHRcdGlmICggcG9zaXRpb24gPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRlbGVtLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuXHRcdH1cblxuXHRcdGN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCk7XG5cdFx0Y3VyQ1NTVG9wID0galF1ZXJ5LmNzcyggZWxlbSwgXCJ0b3BcIiApO1xuXHRcdGN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImxlZnRcIiApO1xuXHRcdGNhbGN1bGF0ZVBvc2l0aW9uID0gKCBwb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiIHx8IHBvc2l0aW9uID09PSBcImZpeGVkXCIgKSAmJlxuXHRcdFx0KCBjdXJDU1NUb3AgKyBjdXJDU1NMZWZ0ICkuaW5kZXhPZiggXCJhdXRvXCIgKSA+IC0xO1xuXG5cdFx0Ly8gTmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXJcblx0XHQvLyB0b3Agb3IgbGVmdCBpcyBhdXRvIGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUgb3IgZml4ZWRcblx0XHRpZiAoIGNhbGN1bGF0ZVBvc2l0aW9uICkge1xuXHRcdFx0Y3VyUG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7XG5cdFx0XHRjdXJUb3AgPSBjdXJQb3NpdGlvbi50b3A7XG5cdFx0XHRjdXJMZWZ0ID0gY3VyUG9zaXRpb24ubGVmdDtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwO1xuXHRcdFx0Y3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwO1xuXHRcdH1cblxuXHRcdGlmICggaXNGdW5jdGlvbiggb3B0aW9ucyApICkge1xuXG5cdFx0XHQvLyBVc2UgalF1ZXJ5LmV4dGVuZCBoZXJlIHRvIGFsbG93IG1vZGlmaWNhdGlvbiBvZiBjb29yZGluYXRlcyBhcmd1bWVudCAoZ2gtMTg0OClcblx0XHRcdG9wdGlvbnMgPSBvcHRpb25zLmNhbGwoIGVsZW0sIGksIGpRdWVyeS5leHRlbmQoIHt9LCBjdXJPZmZzZXQgKSApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0aW9ucy50b3AgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLnRvcCA9ICggb3B0aW9ucy50b3AgLSBjdXJPZmZzZXQudG9wICkgKyBjdXJUb3A7XG5cdFx0fVxuXHRcdGlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy5sZWZ0ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVmdDtcblx0XHR9XG5cblx0XHRpZiAoIFwidXNpbmdcIiBpbiBvcHRpb25zICkge1xuXHRcdFx0b3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1ckVsZW0uY3NzKCBwcm9wcyApO1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdC8vIG9mZnNldCgpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIGJvcmRlciBib3ggdG8gdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvZmZzZXQ6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdFx0Ly8gUHJlc2VydmUgY2hhaW5pbmcgZm9yIHNldHRlclxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiBvcHRpb25zID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHR0aGlzIDpcblx0XHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0XHRqUXVlcnkub2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApO1xuXHRcdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0dmFyIHJlY3QsIHdpbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFlbGVtICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB6ZXJvcyBmb3IgZGlzY29ubmVjdGVkIGFuZCBoaWRkZW4gKGRpc3BsYXk6IG5vbmUpIGVsZW1lbnRzIChnaC0yMzEwKVxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGFcblx0XHQvLyBkaXNjb25uZWN0ZWQgbm9kZSBpbiBJRSB0aHJvd3MgYW4gZXJyb3Jcblx0XHRpZiAoICFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cdFx0fVxuXG5cdFx0Ly8gR2V0IGRvY3VtZW50LXJlbGF0aXZlIHBvc2l0aW9uIGJ5IGFkZGluZyB2aWV3cG9ydCBzY3JvbGwgdG8gdmlld3BvcnQtcmVsYXRpdmUgZ0JDUlxuXHRcdHJlY3QgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdHdpbiA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldztcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiByZWN0LnRvcCArIHdpbi5wYWdlWU9mZnNldCxcblx0XHRcdGxlZnQ6IHJlY3QubGVmdCArIHdpbi5wYWdlWE9mZnNldFxuXHRcdH07XG5cdH0sXG5cblx0Ly8gcG9zaXRpb24oKSByZWxhdGVzIGFuIGVsZW1lbnQncyBtYXJnaW4gYm94IHRvIGl0cyBvZmZzZXQgcGFyZW50J3MgcGFkZGluZyBib3hcblx0Ly8gVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgYmVoYXZpb3Igb2YgQ1NTIGFic29sdXRlIHBvc2l0aW9uaW5nXG5cdHBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICF0aGlzWyAwIF0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIG9mZnNldFBhcmVudCwgb2Zmc2V0LCBkb2MsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0cGFyZW50T2Zmc2V0ID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblxuXHRcdC8vIHBvc2l0aW9uOmZpeGVkIGVsZW1lbnRzIGFyZSBvZmZzZXQgZnJvbSB0aGUgdmlld3BvcnQsIHdoaWNoIGl0c2VsZiBhbHdheXMgaGFzIHplcm8gb2Zmc2V0XG5cdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSA9PT0gXCJmaXhlZFwiICkge1xuXG5cdFx0XHQvLyBBc3N1bWUgcG9zaXRpb246Zml4ZWQgaW1wbGllcyBhdmFpbGFiaWxpdHkgb2YgZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG5cdFx0XHRvZmZzZXQgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdG9mZnNldCA9IHRoaXMub2Zmc2V0KCk7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHRoZSAqcmVhbCogb2Zmc2V0IHBhcmVudCwgd2hpY2ggY2FuIGJlIHRoZSBkb2N1bWVudCBvciBpdHMgcm9vdCBlbGVtZW50XG5cdFx0XHQvLyB3aGVuIGEgc3RhdGljYWxseSBwb3NpdGlvbmVkIGVsZW1lbnQgaXMgaWRlbnRpZmllZFxuXHRcdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50O1xuXHRcdFx0b2Zmc2V0UGFyZW50ID0gZWxlbS5vZmZzZXRQYXJlbnQgfHwgZG9jLmRvY3VtZW50RWxlbWVudDtcblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmXG5cdFx0XHRcdCggb2Zmc2V0UGFyZW50ID09PSBkb2MuYm9keSB8fCBvZmZzZXRQYXJlbnQgPT09IGRvYy5kb2N1bWVudEVsZW1lbnQgKSAmJlxuXHRcdFx0XHRqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0UGFyZW50ICE9PSBlbGVtICYmIG9mZnNldFBhcmVudC5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBJbmNvcnBvcmF0ZSBib3JkZXJzIGludG8gaXRzIG9mZnNldCwgc2luY2UgdGhleSBhcmUgb3V0c2lkZSBpdHMgY29udGVudCBvcmlnaW5cblx0XHRcdFx0cGFyZW50T2Zmc2V0ID0galF1ZXJ5KCBvZmZzZXRQYXJlbnQgKS5vZmZzZXQoKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LnRvcCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwiYm9yZGVyVG9wV2lkdGhcIiwgdHJ1ZSApO1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQubGVmdCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwiYm9yZGVyTGVmdFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTdWJ0cmFjdCBwYXJlbnQgb2Zmc2V0cyBhbmQgZWxlbWVudCBtYXJnaW5zXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogb2Zmc2V0LnRvcCAtIHBhcmVudE9mZnNldC50b3AgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpblRvcFwiLCB0cnVlICksXG5cdFx0XHRsZWZ0OiBvZmZzZXQubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0IC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIsIHRydWUgKVxuXHRcdH07XG5cdH0sXG5cblx0Ly8gVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gZG9jdW1lbnRFbGVtZW50IGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG5cdC8vIDEpIEZvciB0aGUgZWxlbWVudCBpbnNpZGUgdGhlIGlmcmFtZSB3aXRob3V0IG9mZnNldFBhcmVudCwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm5cblx0Ly8gICAgZG9jdW1lbnRFbGVtZW50IG9mIHRoZSBwYXJlbnQgd2luZG93XG5cdC8vIDIpIEZvciB0aGUgaGlkZGVuIG9yIGRldGFjaGVkIGVsZW1lbnRcblx0Ly8gMykgRm9yIGJvZHkgb3IgaHRtbCBlbGVtZW50LCBpLmUuIGluIGNhc2Ugb2YgdGhlIGh0bWwgbm9kZSAtIGl0IHdpbGwgcmV0dXJuIGl0c2VsZlxuXHQvL1xuXHQvLyBidXQgdGhvc2UgZXhjZXB0aW9ucyB3ZXJlIG5ldmVyIHByZXNlbnRlZCBhcyBhIHJlYWwgbGlmZSB1c2UtY2FzZXNcblx0Ly8gYW5kIG1pZ2h0IGJlIGNvbnNpZGVyZWQgYXMgbW9yZSBwcmVmZXJhYmxlIHJlc3VsdHMuXG5cdC8vXG5cdC8vIFRoaXMgbG9naWMsIGhvd2V2ZXIsIGlzIG5vdCBndWFyYW50ZWVkIGFuZCBjYW4gY2hhbmdlIGF0IGFueSBwb2ludCBpbiB0aGUgZnV0dXJlXG5cdG9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudDtcblxuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiYgalF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9mZnNldFBhcmVudCB8fCBkb2N1bWVudEVsZW1lbnQ7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbi8vIENyZWF0ZSBzY3JvbGxMZWZ0IGFuZCBzY3JvbGxUb3AgbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgc2Nyb2xsTGVmdDogXCJwYWdlWE9mZnNldFwiLCBzY3JvbGxUb3A6IFwicGFnZVlPZmZzZXRcIiB9LCBmdW5jdGlvbiggbWV0aG9kLCBwcm9wICkge1xuXHR2YXIgdG9wID0gXCJwYWdlWU9mZnNldFwiID09PSBwcm9wO1xuXG5cdGpRdWVyeS5mblsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdmFsICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBtZXRob2QsIHZhbCApIHtcblxuXHRcdFx0Ly8gQ29hbGVzY2UgZG9jdW1lbnRzIGFuZCB3aW5kb3dzXG5cdFx0XHR2YXIgd2luO1xuXHRcdFx0aWYgKCBpc1dpbmRvdyggZWxlbSApICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtO1xuXHRcdFx0fSBlbHNlIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0d2luID0gZWxlbS5kZWZhdWx0Vmlldztcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHdpbiA/IHdpblsgcHJvcCBdIDogZWxlbVsgbWV0aG9kIF07XG5cdFx0XHR9XG5cblx0XHRcdGlmICggd2luICkge1xuXHRcdFx0XHR3aW4uc2Nyb2xsVG8oXG5cdFx0XHRcdFx0IXRvcCA/IHZhbCA6IHdpbi5wYWdlWE9mZnNldCxcblx0XHRcdFx0XHR0b3AgPyB2YWwgOiB3aW4ucGFnZVlPZmZzZXRcblx0XHRcdFx0KTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbVsgbWV0aG9kIF0gPSB2YWw7XG5cdFx0XHR9XG5cdFx0fSwgbWV0aG9kLCB2YWwsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fTtcbn0gKTtcblxuLy8gU3VwcG9ydDogU2FmYXJpIDw9NyAtIDkuMSwgQ2hyb21lIDw9MzcgLSA0OVxuLy8gQWRkIHRoZSB0b3AvbGVmdCBjc3NIb29rcyB1c2luZyBqUXVlcnkuZm4ucG9zaXRpb25cbi8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA4NFxuLy8gQmxpbmsgYnVnOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD01ODkzNDdcbi8vIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyBwZXJjZW50IHdoZW4gc3BlY2lmaWVkIGZvciB0b3AvbGVmdC9ib3R0b20vcmlnaHQ7XG4vLyByYXRoZXIgdGhhbiBtYWtlIHRoZSBjc3MgbW9kdWxlIGRlcGVuZCBvbiB0aGUgb2Zmc2V0IG1vZHVsZSwganVzdCBjaGVjayBmb3IgaXQgaGVyZVxualF1ZXJ5LmVhY2goIFsgXCJ0b3BcIiwgXCJsZWZ0XCIgXSwgZnVuY3Rpb24oIF9pLCBwcm9wICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByb3AgXSA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5waXhlbFBvc2l0aW9uLFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGNvbXB1dGVkID0gY3VyQ1NTKCBlbGVtLCBwcm9wICk7XG5cblx0XHRcdFx0Ly8gSWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJhY2sgdG8gb2Zmc2V0XG5cdFx0XHRcdHJldHVybiBybnVtbm9ucHgudGVzdCggY29tcHV0ZWQgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5KCBlbGVtICkucG9zaXRpb24oKVsgcHJvcCBdICsgXCJweFwiIDpcblx0XHRcdFx0XHRjb21wdXRlZDtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59ICk7XG5cblxuLy8gQ3JlYXRlIGlubmVySGVpZ2h0LCBpbm5lcldpZHRoLCBoZWlnaHQsIHdpZHRoLCBvdXRlckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBIZWlnaHQ6IFwiaGVpZ2h0XCIsIFdpZHRoOiBcIndpZHRoXCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7XG5cdGpRdWVyeS5lYWNoKCB7XG5cdFx0cGFkZGluZzogXCJpbm5lclwiICsgbmFtZSxcblx0XHRjb250ZW50OiB0eXBlLFxuXHRcdFwiXCI6IFwib3V0ZXJcIiArIG5hbWVcblx0fSwgZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7XG5cblx0XHQvLyBNYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGhcblx0XHRqUXVlcnkuZm5bIGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHtcblx0XHRcdHZhciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVuZ3RoICYmICggZGVmYXVsdEV4dHJhIHx8IHR5cGVvZiBtYXJnaW4gIT09IFwiYm9vbGVhblwiICksXG5cdFx0XHRcdGV4dHJhID0gZGVmYXVsdEV4dHJhIHx8ICggbWFyZ2luID09PSB0cnVlIHx8IHZhbHVlID09PSB0cnVlID8gXCJtYXJnaW5cIiA6IFwiYm9yZGVyXCIgKTtcblxuXHRcdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgZG9jO1xuXG5cdFx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vICQoIHdpbmRvdyApLm91dGVyV2lkdGgvSGVpZ2h0IHJldHVybiB3L2ggaW5jbHVkaW5nIHNjcm9sbGJhcnMgKGdoLTE3MjkpXG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmNOYW1lLmluZGV4T2YoIFwib3V0ZXJcIiApID09PSAwID9cblx0XHRcdFx0XHRcdGVsZW1bIFwiaW5uZXJcIiArIG5hbWUgXSA6XG5cdFx0XHRcdFx0XHRlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgXCJjbGllbnRcIiArIG5hbWUgXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHRcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50O1xuXG5cdFx0XHRcdFx0Ly8gRWl0aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWlnaHRdLFxuXHRcdFx0XHRcdC8vIHdoaWNoZXZlciBpcyBncmVhdGVzdFxuXHRcdFx0XHRcdHJldHVybiBNYXRoLm1heChcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJzY3JvbGxcIiArIG5hbWUgXSwgZG9jWyBcInNjcm9sbFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcIm9mZnNldFwiICsgbmFtZSBdLCBkb2NbIFwib2Zmc2V0XCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRkb2NbIFwiY2xpZW50XCIgKyBuYW1lIF1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdFxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIGV4dHJhICkgOlxuXG5cdFx0XHRcdFx0Ly8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICk7XG5cdFx0XHR9LCB0eXBlLCBjaGFpbmFibGUgPyBtYXJnaW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSApO1xuXHRcdH07XG5cdH0gKTtcbn0gKTtcblxuXG5qUXVlcnkuZWFjaCggW1xuXHRcImFqYXhTdGFydFwiLFxuXHRcImFqYXhTdG9wXCIsXG5cdFwiYWpheENvbXBsZXRlXCIsXG5cdFwiYWpheEVycm9yXCIsXG5cdFwiYWpheFN1Y2Nlc3NcIixcblx0XCJhamF4U2VuZFwiXG5dLCBmdW5jdGlvbiggX2ksIHR5cGUgKSB7XG5cdGpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlLCBmbiApO1xuXHR9O1xufSApO1xuXG5cblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0YmluZDogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuYmluZDogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApO1xuXHR9LFxuXG5cdGRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHtcblxuXHRcdC8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dIClcblx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/XG5cdFx0XHR0aGlzLm9mZiggc2VsZWN0b3IsIFwiKipcIiApIDpcblx0XHRcdHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgXCIqKlwiLCBmbiApO1xuXHR9LFxuXG5cdGhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHtcblx0XHRyZXR1cm4gdGhpc1xuXHRcdFx0Lm9uKCBcIm1vdXNlZW50ZXJcIiwgZm5PdmVyIClcblx0XHRcdC5vbiggXCJtb3VzZWxlYXZlXCIsIGZuT3V0IHx8IGZuT3ZlciApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKFxuXHQoIFwiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgXCIgK1xuXHRcIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIFwiICtcblx0XCJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51XCIgKS5zcGxpdCggXCIgXCIgKSxcblx0ZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXG5cdFx0Ly8gSGFuZGxlIGV2ZW50IGJpbmRpbmdcblx0XHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBkYXRhLCBmbiApIHtcblx0XHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/XG5cdFx0XHRcdHRoaXMub24oIG5hbWUsIG51bGwsIGRhdGEsIGZuICkgOlxuXHRcdFx0XHR0aGlzLnRyaWdnZXIoIG5hbWUgKTtcblx0XHR9O1xuXHR9XG4pO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHlcbi8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUFxuLy8gUmVxdWlyZSB0aGF0IHRoZSBcIndoaXRlc3BhY2UgcnVuXCIgc3RhcnRzIGZyb20gYSBub24td2hpdGVzcGFjZVxuLy8gdG8gYXZvaWQgTyhOXjIpIGJlaGF2aW9yIHdoZW4gdGhlIGVuZ2luZSB3b3VsZCB0cnkgbWF0Y2hpbmcgXCJcXHMrJFwiIGF0IGVhY2ggc3BhY2UgcG9zaXRpb24uXG52YXIgcnRyaW0gPSAvXltcXHNcXHVGRUZGXFx4QTBdK3woW15cXHNcXHVGRUZGXFx4QTBdKVtcXHNcXHVGRUZGXFx4QTBdKyQvZztcblxuLy8gQmluZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4dCwgb3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55XG4vLyBhcmd1bWVudHMuXG4vLyBqUXVlcnkucHJveHkgaXMgZGVwcmVjYXRlZCB0byBwcm9tb3RlIHN0YW5kYXJkcyAoc3BlY2lmaWNhbGx5IEZ1bmN0aW9uI2JpbmQpXG4vLyBIb3dldmVyLCBpdCBpcyBub3Qgc2xhdGVkIGZvciByZW1vdmFsIGFueSB0aW1lIHNvb25cbmpRdWVyeS5wcm94eSA9IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHtcblx0dmFyIHRtcCwgYXJncywgcHJveHk7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHR0bXAgPSBmblsgY29udGV4dCBdO1xuXHRcdGNvbnRleHQgPSBmbjtcblx0XHRmbiA9IHRtcDtcblx0fVxuXG5cdC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVjXG5cdC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuXG5cdGlmICggIWlzRnVuY3Rpb24oIGZuICkgKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIFNpbXVsYXRlZCBiaW5kXG5cdGFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTtcblx0cHJveHkgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZm4uYXBwbHkoIGNvbnRleHQgfHwgdGhpcywgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTtcblx0fTtcblxuXHQvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJlbW92ZWRcblx0cHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKys7XG5cblx0cmV0dXJuIHByb3h5O1xufTtcblxualF1ZXJ5LmhvbGRSZWFkeSA9IGZ1bmN0aW9uKCBob2xkICkge1xuXHRpZiAoIGhvbGQgKSB7XG5cdFx0alF1ZXJ5LnJlYWR5V2FpdCsrO1xuXHR9IGVsc2Uge1xuXHRcdGpRdWVyeS5yZWFkeSggdHJ1ZSApO1xuXHR9XG59O1xualF1ZXJ5LmlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xualF1ZXJ5LnBhcnNlSlNPTiA9IEpTT04ucGFyc2U7XG5qUXVlcnkubm9kZU5hbWUgPSBub2RlTmFtZTtcbmpRdWVyeS5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcbmpRdWVyeS5pc1dpbmRvdyA9IGlzV2luZG93O1xualF1ZXJ5LmNhbWVsQ2FzZSA9IGNhbWVsQ2FzZTtcbmpRdWVyeS50eXBlID0gdG9UeXBlO1xuXG5qUXVlcnkubm93ID0gRGF0ZS5ub3c7XG5cbmpRdWVyeS5pc051bWVyaWMgPSBmdW5jdGlvbiggb2JqICkge1xuXG5cdC8vIEFzIG9mIGpRdWVyeSAzLjAsIGlzTnVtZXJpYyBpcyBsaW1pdGVkIHRvXG5cdC8vIHN0cmluZ3MgYW5kIG51bWJlcnMgKHByaW1pdGl2ZXMgb3Igb2JqZWN0cylcblx0Ly8gdGhhdCBjYW4gYmUgY29lcmNlZCB0byBmaW5pdGUgbnVtYmVycyAoZ2gtMjY2Milcblx0dmFyIHR5cGUgPSBqUXVlcnkudHlwZSggb2JqICk7XG5cdHJldHVybiAoIHR5cGUgPT09IFwibnVtYmVyXCIgfHwgdHlwZSA9PT0gXCJzdHJpbmdcIiApICYmXG5cblx0XHQvLyBwYXJzZUZsb2F0IE5hTnMgbnVtZXJpYy1jYXN0IGZhbHNlIHBvc2l0aXZlcyAoXCJcIilcblx0XHQvLyAuLi5idXQgbWlzaW50ZXJwcmV0cyBsZWFkaW5nLW51bWJlciBzdHJpbmdzLCBwYXJ0aWN1bGFybHkgaGV4IGxpdGVyYWxzIChcIjB4Li4uXCIpXG5cdFx0Ly8gc3VidHJhY3Rpb24gZm9yY2VzIGluZmluaXRpZXMgdG8gTmFOXG5cdFx0IWlzTmFOKCBvYmogLSBwYXJzZUZsb2F0KCBvYmogKSApO1xufTtcblxualF1ZXJ5LnRyaW0gPSBmdW5jdGlvbiggdGV4dCApIHtcblx0cmV0dXJuIHRleHQgPT0gbnVsbCA/XG5cdFx0XCJcIiA6XG5cdFx0KCB0ZXh0ICsgXCJcIiApLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKTtcbn07XG5cblxuXG4vLyBSZWdpc3RlciBhcyBhIG5hbWVkIEFNRCBtb2R1bGUsIHNpbmNlIGpRdWVyeSBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggb3RoZXJcbi8vIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsIGJ1dCBub3QgdmlhIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXRcbi8vIHVuZGVyc3RhbmRzIGFub255bW91cyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdFxuLy8gd2F5IHRvIHJlZ2lzdGVyLiBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVzZSBBTUQgbW9kdWxlIG5hbWVzIGFyZVxuLy8gZGVyaXZlZCBmcm9tIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlXG4vLyBmaWxlIG5hbWUuIERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2FudHNcbi8vIHRvIGNhbGwgbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnksIGl0IHdpbGwgd29yay5cblxuLy8gTm90ZSB0aGF0IGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBsaWJyYXJpZXMgdGhhdCBhcmUgbm90IGpRdWVyeSBzaG91bGRcbi8vIGRlY2xhcmUgdGhlbXNlbHZlcyBhcyBhbm9ueW1vdXMgbW9kdWxlcywgYW5kIGF2b2lkIHNldHRpbmcgYSBnbG9iYWwgaWYgYW5cbi8vIEFNRCBsb2FkZXIgaXMgcHJlc2VudC4galF1ZXJ5IGlzIGEgc3BlY2lhbCBjYXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvd2lraS9VcGRhdGluZy1leGlzdGluZy1saWJyYXJpZXMjd2lraS1hbm9uXG5cbmlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XG5cdGRlZmluZSggXCJqcXVlcnlcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnk7XG5cdH0gKTtcbn1cblxuXG5cblxudmFyXG5cblx0Ly8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LFxuXG5cdC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF8kID0gd2luZG93LiQ7XG5cbmpRdWVyeS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oIGRlZXAgKSB7XG5cdGlmICggd2luZG93LiQgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cuJCA9IF8kO1xuXHR9XG5cblx0aWYgKCBkZWVwICYmIHdpbmRvdy5qUXVlcnkgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnk7XG59O1xuXG4vLyBFeHBvc2UgalF1ZXJ5IGFuZCAkIGlkZW50aWZpZXJzLCBldmVuIGluIEFNRFxuLy8gKHRyYWMtNzEwMiNjb21tZW50OjEwLCBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzU1Nylcbi8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMgKHRyYWMtMTM1NjYpXG5pZiAoIHR5cGVvZiBub0dsb2JhbCA9PT0gXCJ1bmRlZmluZWRcIiApIHtcblx0d2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5O1xufVxuXG5cblxuXG5yZXR1cm4galF1ZXJ5O1xufSApO1xuIiwiaW1wb3J0IHsgSUFjdGlvbiB9IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG5leHBvcnQgY29uc3QgYWN0aW9uQWRkaW5zIDpSZWNvcmQ8c3RyaW5nLElBY3Rpb24+PXt9O1xyXG4iLCJcclxuaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgIElBY3Rpb24sSUFjdGlvblJlc3VsdCwgSUFjdGlvbk5vZGUsIElBY3Rpb25Qcm9wZXJ0eSwgSUZpZWxkLCBJQ29udGV4dCB9IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG5cclxuaW50ZXJmYWNlIElNdXN0SW5wdXRQcm9wc3tcclxuICAgIGZpZWxkOklGaWVsZDtcclxuICAgIG1lc3NhZ2U6c3RyaW5nOyBcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIE11c3RJbnB1dEFjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb257XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgICBwcm9wczpJTXVzdElucHV0UHJvcHM7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMubmFtZT1cIuW/hemgiOODgeOCp+ODg+OCr1wiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9W107XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgICAgIHRoaXMucHJvcHM9e1xyXG4gICAgICAgICAgICBmaWVsZDp7Y29kZTonJ30sXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6JydcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHByb2Nlc3MoYWN0aW9uTm9kZTpJQWN0aW9uTm9kZSxldmVudDphbnksY29udGV4dDpJQ29udGV4dCk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdD17XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9YWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ2ZpZWxkJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdtZXNzYWdlJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElNdXN0SW5wdXRQcm9wcztcclxuICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gZXZlbnQucmVjb3JkO1xyXG4gICAgICAgICAgICBpZighKHRoaXMucHJvcHMuZmllbGQuY29kZSBpbiByZWNvcmQpKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg44OV44Kj44O844Or44OJWyR7dGhpcy5wcm9wcy5maWVsZC5jb2RlfV3jgYzopovjgaTjgYvjgorjgb7jgZvjgpPjgafjgZfjgZ/jgIJgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdLnZhbHVlO1xyXG4gICAgICAgICAgICBpZih2YWx1ZT09PXVuZGVmaW5lZCB8fCB2YWx1ZT09PScnKXtcclxuICAgICAgICAgICAgICAgIHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdLmVycm9yPXRoaXMucHJvcHMubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzdWx0PSB7XHJcbiAgICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICAgIHJlc3VsdDp0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9Y2F0Y2goZXJyb3Ipe1xyXG4gICAgICAgICAgICBjb250ZXh0LmVycm9ycy5oYW5kbGVFcnJvcihlcnJvcixhY3Rpb25Ob2RlKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQ9ZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV09dGhpcztcclxuICAgIH1cclxuICAgIFxyXG59XHJcbm5ldyBNdXN0SW5wdXRBY3Rpb24oKTsiLCJleHBvcnQgY2xhc3MgRm9ybWF0dGVye1xyXG4gICAgc3RhdGljIG51bWJlckZvcm1hdChudW06bnVtYmVyLGZvcm1hdDpzdHJpbmcpOnN0cmluZ3tcclxuICAgICAgICBsZXQgaW50ZWdlclBhcnQgPSBNYXRoLmZsb29yKE1hdGguYWJzKG51bSkpLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgbGV0IGZyYWN0aW9uUGFydCA9IE1hdGguYWJzKG51bSkudG9TdHJpbmcoKS5zcGxpdCgnLicpWzFdIHx8ICcnO1xyXG4gICAgICAgIGxldCBpc05lZ2F0aXZlID0gbnVtIDwgMDtcclxuICAgICAgICBsZXQgaXNQZXJjZW50ID0gZm9ybWF0LmluY2x1ZGVzKCclJyk7ICAgICAgIFxyXG4gICAgICAgIC8vICVcclxuICAgICAgICBpZiAoaXNQZXJjZW50KSB7XHJcbiAgICAgICAgICAgIG51bSAqPSAxMDA7XHJcbiAgICAgICAgICAgIGludGVnZXJQYXJ0ID0gTWF0aC5mbG9vcihNYXRoLmFicyhudW0pKS50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBmcmFjdGlvblBhcnQgPSBNYXRoLmFicyhudW0pLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSB8fCAnJztcclxuICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgLy8g5bCP5pWw44Go5pW05pWw6YOo5YiG44Gu5Yem55CGXHJcbiAgICAgICAgbGV0IFtpbnRlZ2VyRm9ybWF0LCBmcmFjdGlvbkZvcm1hdF0gPSBmb3JtYXQuc3BsaXQoJy4nKTtcclxuICAgICAgICBpbnRlZ2VyUGFydCA9IGludGVnZXJGb3JtYXQgPyBpbnRlZ2VyUGFydC5wYWRTdGFydChpbnRlZ2VyRm9ybWF0LnJlcGxhY2UoL1teMF0vZywgJycpLmxlbmd0aCwgJzAnKSA6IGludGVnZXJQYXJ0O1xyXG4gICAgICAgIGZyYWN0aW9uUGFydCA9IGZyYWN0aW9uUGFydC5wYWRFbmQoZnJhY3Rpb25Gb3JtYXQgPyBmcmFjdGlvbkZvcm1hdC5sZW5ndGggOiAwLCAnMCcpO1xyXG5cclxuICAgICAgICAvLyDjgqvjg57ljLrliIdcclxuICAgICAgICBpZiAoLywvLnRlc3QoaW50ZWdlckZvcm1hdCkpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFydHMgPSBbXTtcclxuICAgICAgICAgICAgd2hpbGUgKGludGVnZXJQYXJ0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBwYXJ0cy51bnNoaWZ0KGludGVnZXJQYXJ0LnNsaWNlKC0zKSk7XHJcbiAgICAgICAgICAgIGludGVnZXJQYXJ0ID0gaW50ZWdlclBhcnQuc2xpY2UoMCwgLTMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGludGVnZXJQYXJ0ID0gcGFydHMuam9pbignLCcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8g44GZ44G544Gm57WE5ZCI44KP44GbXHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IGZyYWN0aW9uRm9ybWF0ID8gYCR7aW50ZWdlclBhcnR9LiR7ZnJhY3Rpb25QYXJ0fWAgOiBpbnRlZ2VyUGFydDtcclxuICAgICAgICByZXN1bHQgPSBpc05lZ2F0aXZlID8gYC0ke3Jlc3VsdH1gIDogcmVzdWx0O1xyXG4gICAgICAgIHJldHVybiBpc1BlcmNlbnQgPyBgJHtyZXN1bHR9JWAgOiByZXN1bHQ7XHJcbiAgICB9XHJcbiAgICAgIFxyXG4gICAgc3RhdGljIGRhdGVGb3JtYXQoZGF0ZTogRGF0ZSwgZm9ybWF0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7XHJcbiAgICAgICAgY29uc3QgbW9udGggPSBkYXRlLmdldE1vbnRoKCkgKyAxO1xyXG4gICAgICAgIGNvbnN0IGRheSA9IGRhdGUuZ2V0RGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IGhvdXIgPSBkYXRlLmdldEhvdXJzKCk7XHJcbiAgICAgICAgY29uc3QgbWludXRlID0gZGF0ZS5nZXRNaW51dGVzKCk7XHJcbiAgICAgICAgY29uc3Qgc2Vjb25kID0gZGF0ZS5nZXRTZWNvbmRzKCk7XHJcbiAgICAgICAgY29uc3QgbWlsbGlzZWNvbmQgPSBkYXRlLmdldE1pbGxpc2Vjb25kcygpO1xyXG4gICAgICAgIGNvbnN0IHRpbWVab25lT2Zmc2V0ID0gLWRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAvIDYwO1xyXG4gICAgICBcclxuICAgICAgICBjb25zdCByZXBsYWNlbWVudHMgPSB7XHJcbiAgICAgICAgICAneXl5eSc6IHllYXIudG9TdHJpbmcoKSxcclxuICAgICAgICAgICd5eSc6IHllYXIudG9TdHJpbmcoKS5zbGljZSgtMiksXHJcbiAgICAgICAgICAnTU0nOiBtb250aC50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXHJcbiAgICAgICAgICAnTSc6IG1vbnRoLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAnZGQnOiBkYXkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgJ2QnOiBkYXkudG9TdHJpbmcoKSxcclxuICAgICAgICAgICdISCc6IGhvdXIudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgJ0gnOiBob3VyLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAnaGgnOiAoaG91ciA+IDEyID8gaG91ciAtIDEyIDogaG91cikudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpLFxyXG4gICAgICAgICAgJ2gnOiAoaG91ciA+IDEyID8gaG91ciAtIDEyIDogaG91cikudG9TdHJpbmcoKSxcclxuICAgICAgICAgICdtbSc6IG1pbnV0ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyksXHJcbiAgICAgICAgICAnbSc6IG1pbnV0ZS50b1N0cmluZygpLFxyXG4gICAgICAgICAgJ3NzJzogc2Vjb25kLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSxcclxuICAgICAgICAgICdzJzogc2Vjb25kLnRvU3RyaW5nKCksXHJcbiAgICAgICAgICAnZmZmJzogbWlsbGlzZWNvbmQudG9TdHJpbmcoKS5wYWRTdGFydCgzLCAnMCcpLFxyXG4gICAgICAgICAgJ3p6eic6ICh0aW1lWm9uZU9mZnNldCA+PSAwID8gJysnIDogJy0nKSArIE1hdGguYWJzKHRpbWVab25lT2Zmc2V0KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJykgKyAnOjAwJ1xyXG4gICAgICAgIH07XHJcbiAgICAgIFxyXG4gICAgICAgIHJldHVybiBmb3JtYXQucmVwbGFjZSgveXl5eXx5eXxNTXxNfGRkfGR8SEh8SHxoaHxofG1tfG18c3N8c3xmZmZ8enp6L2csIChtYXRjaCkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50c1ttYXRjaCBhcyBrZXlvZiB0eXBlb2YgcmVwbGFjZW1lbnRzXSB8fCBtYXRjaDtcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgXHJcblxyXG59IiwiXHJcbmltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7IElGaWVsZCwgSUFjdGlvbixJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5LCBJQ29udGV4dCwgSVZhck5hbWUgfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuaW1wb3J0IHsgRm9ybWF0dGVyIH0gZnJvbSBcIi4uL3V0aWwvZm9ybWF0XCI7XHJcblxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgICBpbnRlcmZhY2UgV2luZG93IHsgJGZvcm1hdDogYW55OyB9ICBcclxufVxyXG5cclxuaW50ZXJmYWNlIElBdXRvTnVtYmVyaW5nUHJvcHN7XHJcbiAgICAvL+aWh+abuOeVquWPt+OCkuagvOe0jeOBmeOCi1xyXG4gICAgZmllbGQ6SUZpZWxkO1xyXG4gICAgZm9ybWF0OnN0cmluZztcclxuICAgIHByZWZpeDpzdHJpbmc7XHJcbiAgICBzdWZmaXg6c3RyaW5nO1xyXG4gICAgdmVyTmFtZTpJVmFyTmFtZTtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEF1dG9OdW1iZXJpbmcgaW1wbGVtZW50cyBJQWN0aW9ue1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgcHJvcHM6SUF1dG9OdW1iZXJpbmdQcm9wcztcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5uYW1lPVwi6Ieq5YuV5o6h55Wq44GZ44KLXCI7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1bXTtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICAgICAgdGhpcy5wcm9wcz17XHJcbiAgICAgICAgICAgIGZpZWxkOntjb2RlOicnfSxcclxuICAgICAgICAgICAgZm9ybWF0OicnLFxyXG4gICAgICAgICAgICBwcmVmaXg6JycsXHJcbiAgICAgICAgICAgIHN1ZmZpeDonJyxcclxuICAgICAgICAgICAgdmVyTmFtZTp7bmFtZTonJ31cclxuICAgICAgICB9XHJcbiAgICAgICAgZ2xvYmFsVGhpcy53aW5kb3cuJGZvcm1hdD10aGlzLmZvcm1hdDtcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lh6bnkIbjgpLlrp/oo4XjgZnjgotcclxuICogQHBhcmFtIGFjdGlvbk5vZGUg44Ki44Kv44K344On44Oz44OO44O844OJXHJcbiAqIEBwYXJhbSBldmVudCBLaW50b25l44Gu44Kk44OZ44Oz44OIXHJcbiAqIEBwYXJhbSBjb250ZXh0IOOCs+ODs+ODhuOCreOCueODiO+8iOODrOOCs+ODvOODieOAgeWkieaVsOaDheWgseOCkuaMgeOBo+OBpuOBhOOCi++8iVxyXG4gKiBAcmV0dXJucyBcclxuICovXHJcbiAgICBhc3luYyBwcm9jZXNzKGFjdGlvbk5vZGU6SUFjdGlvbk5vZGUsZXZlbnQ6YW55LGNvbnRleHQ6SUNvbnRleHQpOlByb21pc2U8SUFjdGlvblJlc3VsdD4ge1xyXG4gICAgICAgIGxldCByZXN1bHQ9e1xyXG4gICAgICAgICAgICBjYW5OZXh0OmZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1hY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICBpZiAoISgnZmllbGQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ2Zvcm1hdCcgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBJQXV0b051bWJlcmluZ1Byb3BzO1xyXG4gICAgICAgICAgICBjb25zdCByZWNvcmQgPSBldmVudC5yZWNvcmQ7XHJcbiAgICAgICAgICAgIGNvbnN0IGRvY051bSA9IGF3YWl0IHRoaXMuY3JlYXRlTnVtYmVyKHRoaXMucHJvcHMpO1xyXG4gICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS52YWx1ZT1kb2NOdW07XHJcbiAgICAgICAgICAgIC8v5aSJ5pWw6Kit5a6aXHJcbiAgICAgICAgICAgIGlmKHRoaXMucHJvcHMudmVyTmFtZSAmJiB0aGlzLnByb3BzLnZlck5hbWUubmFtZSE9PScnKXtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQudmFyaWFibGVzW3RoaXMucHJvcHMudmVyTmFtZS5uYW1lXT1kb2NOdW07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmVzdWx0PSB7XHJcbiAgICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICAgIHJlc3VsdDp0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9Y2F0Y2goZXJyb3Ipe1xyXG4gICAgICAgICAgICBjb250ZXh0LmVycm9ycy5oYW5kbGVFcnJvcihlcnJvcixhY3Rpb25Ob2RlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGNhbk5leHQ6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBleGVjVGVtcGxhdGUodGVtcGxhdGU6c3RyaW5nKTpzdHJpbmd7XHJcbiAgICAgICAgaWYodGVtcGxhdGU9PT11bmRlZmluZWQpIHJldHVybiAnJztcclxuICAgICAgICBjb25zdCByZWdleCA9IC9cXCRcXHsoW159XSspXFx9L2c7XHJcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlLnJlcGxhY2UocmVnZXgsKG1hdGNoLGV4cHIpPT57XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV4ZWNFdmFsKG1hdGNoLGV4cHIpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGV4ZWNFdmFsKG1hdGNoOnN0cmluZyxleHByOnN0cmluZyk6c3RyaW5ne1xyXG4gICAgICAgIGNvbnNvbGUubG9nKG1hdGNoKTtcclxuICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgcmV0dXJuIGV2YWwoZXhwcik7XHJcbiAgICB9XHJcblxyXG4gICAgZm9ybWF0KHBhdHRlcm46c3RyaW5nKTpzdHJpbmd7XHJcbiAgICAgICAgY29uc3Qgbm93PW5ldyBEYXRlKCk7XHJcbiAgICAgICAgcmV0dXJuIEZvcm1hdHRlci5kYXRlRm9ybWF0KG5vdywgcGF0dGVybik7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlTnVtYmVyKHByb3BzOklBdXRvTnVtYmVyaW5nUHJvcHMpe1xyXG4gICAgICAgIGxldCBudW1iZXIgOnN0cmluZz0nJztcclxuICAgICAgICBsZXQgcHJlZml4OnN0cmluZz0nJztcclxuICAgICAgICBsZXQgc3VmZml4OnN0cmluZz0nJztcclxuICAgICAgICBsZXQgbm89MTsgICAgIFxyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgbm8gPSBhd2FpdCB0aGlzLmZldGNoTm8oKTtcclxuICAgICAgICB9Y2F0Y2goZXJyb3Ipe1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhlcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHByb3BzLmZvcm1hdCE9PXVuZGVmaW5lZCAmJiBwcm9wcy5mb3JtYXQhPT0nJyl7XHJcbiAgICAgICAgICAgIG51bWJlcj1Gb3JtYXR0ZXIubnVtYmVyRm9ybWF0KG5vLCBwcm9wcy5mb3JtYXQpO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICBudW1iZXI9bm8udG9TdHJpbmcoMTApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYocHJvcHMucHJlZml4IT09dW5kZWZpbmVkICYmIHByb3BzLnByZWZpeCE9PScnKXtcclxuICAgICAgICAgICAgcHJlZml4PXRoaXMuZXhlY1RlbXBsYXRlKHByb3BzLnByZWZpeCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZihwcm9wcy5zdWZmaXghPT11bmRlZmluZWQgJiYgcHJvcHMuc3VmZml4IT09Jycpe1xyXG4gICAgICAgICAgICBzdWZmaXg9dGhpcy5leGVjVGVtcGxhdGUocHJvcHMuc3VmZml4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGAke3ByZWZpeH0ke251bWJlcn0ke3N1ZmZpeH1gO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZldGNoTm8oKTpQcm9taXNlPG51bWJlcj57XHJcbiAgICAgICAgbGV0IHJlY05vPTE7XHJcblxyXG4gICAgICAgIHJldHVybiBhd2FpdCBuZXcga2ludG9uZS5Qcm9taXNlPG51bWJlcj4oKHJlc29sdmUscmVqZWN0KT0+e1xyXG4gICAgICAgICAgICBjb25zdCBhcHB1cmwgPSBraW50b25lLmFwaS51cmwoJy9rL3YxL3JlY29yZHMnLHRydWUpO1xyXG4gICAgICAgICAgICBjb25zdCBwYXJhbXM9e1xyXG4gICAgICAgICAgICAgICAgYXBwOmtpbnRvbmUuYXBwLmdldElkKCksXHJcbiAgICAgICAgICAgICAgICBmaWVsZHM6WyckaWQnXSxcclxuICAgICAgICAgICAgICAgIHF1ZXJ5OidsaW1pdCAxJ1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4ga2ludG9uZS5hcGkoYXBwdXJsLCdHRVQnLHBhcmFtcykudGhlbigocmVzcCk9PntcclxuICAgICAgICAgICAgICAgIGlmKHJlc3AucmVjb3Jkc1swXSE9PW51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY05vID0gcGFyc2VJbnQocmVzcC5yZWNvcmRzWzBdLiRpZC52YWx1ZSwxMCkrMTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJlc29sdmUocmVjTm8pO1xyXG4gICAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpPT57XHJcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgICAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXT10aGlzO1xyXG4gICAgfVxyXG4gICAgXHJcbn1cclxubmV3IEF1dG9OdW1iZXJpbmcoKTsiLCJpbXBvcnQgeyBJQ29udGV4dCxJQ29kZVZhbHVlIH0gZnJvbSBcIi4vQWN0aW9uVHlwZXNcIjtcclxuXHJcbi8v44OO44O844OJ56iu5YilXHJcbmV4cG9ydCBlbnVtIE5vZGVUeXBle1xyXG4gIFJvb3QgPSAncm9vdCcsXHJcbiAgTG9naWNHcm91cCA9J2xvZ2ljZ3JvdXAnLFxyXG4gIENvbmRpdGlvbiA9J2NvbmRpdGlvbidcclxufVxyXG5cclxuLy/jg63jgrjjg4Pjgq/jgqrjg5rjg6zjg7zjgr/jg7xcclxuZXhwb3J0IGVudW0gTG9naWNhbE9wZXJhdG9ye1xyXG4gIEFORCA9ICdBTkQnLFxyXG4gIE9SID0gJ09SJ1xyXG59XHJcblxyXG4vL+adoeS7tuOCquODmuODrOODvOOCv+ODvFxyXG5leHBvcnQgZW51bSBPcGVyYXRvcntcclxuICBFcXVhbCA9ICc9JyxcclxuICBOb3RFcXVhbD0nIT0nLFxyXG4gIEdyZWF0ZXIgPSAnPicsXHJcbiAgR3JlYXRlck9yRXF1YWwgPSAnPj0nLFxyXG4gIExlc3MgPSAnPCcsXHJcbiAgTGVzc09yRXF1YWwgPSAnPD0nLFxyXG4gIENvbnRhaW5zID0gJ2NvbnRhaW5zJyxcclxuICBOb3RDb250YWlucyA9ICdub3QgY29udGFpbnMnLFxyXG4gIFN0YXJ0V2l0aCA9ICdzdGFydCBXaXRoJyxcclxuICBFbmRXaXRoID0gJ2VuZCB3aXRoJyxcclxuICBOb3RTdGFydFdpdGggPSAnbm90IHN0YXJ0IHdpdGgnLFxyXG4gIE5vdEVuZFdpdGggPSAnbm90IGVuZCB3aXRoJ1xyXG59XHJcblxyXG5cclxuLy8gSU5vZGVcclxuZXhwb3J0IGludGVyZmFjZSBJTm9kZSB7XHJcbiAgaW5kZXg6bnVtYmVyO1xyXG4gIHR5cGU6IE5vZGVUeXBlO1xyXG4gIGhlYWRlcjpzdHJpbmc7XHJcbiAgcGFyZW50OiBJTm9kZSB8IG51bGw7XHJcbiAgbG9naWNhbE9wZXJhdG9yOkxvZ2ljYWxPcGVyYXRvclxyXG59XHJcblxyXG4vLyDjg63jgrjjg4Pjgq/jg47jg7zjg4lcclxuZXhwb3J0IGNsYXNzIEdyb3VwTm9kZSBpbXBsZW1lbnRzIElOb2RlIHtcclxuICBpbmRleDpudW1iZXI7XHJcbiAgdHlwZTogTm9kZVR5cGU7XHJcbiAgY2hpbGRyZW46IElOb2RlW107XHJcbiAgcGFyZW50OiBJTm9kZSB8IG51bGw7XHJcbiAgbG9naWNhbE9wZXJhdG9yOiBMb2dpY2FsT3BlcmF0b3I7XHJcbiAgZ2V0IGxhYmVsKCk6c3RyaW5ne1xyXG4gICAgcmV0dXJuIHRoaXMubG9naWNhbE9wZXJhdG9yO1xyXG4gIH1cclxuICBnZXQgaGVhZGVyKCk6c3RyaW5ne1xyXG4gICAgcmV0dXJuIHRoaXMudHlwZT09PU5vZGVUeXBlLlJvb3Q/J3Jvb3QnOidnZW5lcmljJztcclxuICB9XHJcbiAgZ2V0IGV4cGFuZGVkKCk6Ym9vbGVhbntcclxuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD4wO1xyXG4gIH1cclxuICBjb25zdHJ1Y3Rvcihsb2dpY09wOkxvZ2ljYWxPcGVyYXRvciwgcGFyZW50OiBJTm9kZSB8IG51bGwpIHtcclxuICAgIHRoaXMuaW5kZXg9MDtcclxuICAgIHRoaXMudHlwZSA9IHBhcmVudD09bnVsbD9Ob2RlVHlwZS5Sb290OiBOb2RlVHlwZS5Mb2dpY0dyb3VwO1xyXG4gICAgdGhpcy5sb2dpY2FsT3BlcmF0b3IgPSBsb2dpY09wO1xyXG4gICAgdGhpcy5wYXJlbnQ9cGFyZW50O1xyXG4gICAgdGhpcy5jaGlsZHJlbj1bXTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uOiBhbnksIHBhcmVudDogSU5vZGUgfCBudWxsID0gbnVsbCk6IEdyb3VwTm9kZSB7XHJcbiAgICBjb25zdCBub2RlID0gbmV3IEdyb3VwTm9kZShqc29uLmxvZ2ljYWxPcGVyYXRvciwgcGFyZW50KTtcclxuICAgIG5vZGUuaW5kZXg9anNvbi5pbmRleDtcclxuICAgIG5vZGUuY2hpbGRyZW4gPSBqc29uLmNoaWxkcmVuLm1hcCgoY2hpbGRKc29uOiBhbnkpID0+IHtcclxuICAgICAgcmV0dXJuIGNoaWxkSnNvbi50eXBlID09PSBOb2RlVHlwZS5Mb2dpY0dyb3VwXHJcbiAgICAgICAgPyBHcm91cE5vZGUuZnJvbUpTT04oY2hpbGRKc29uLCBub2RlKVxyXG4gICAgICAgIDogQ29uZGl0aW9uTm9kZS5mcm9tSlNPTihjaGlsZEpzb24sIG5vZGUpO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gbm9kZTtcclxuICB9XHJcblxyXG59XHJcblxyXG4vLyDmnaHku7blvI/jg47jg7zjg4lcclxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbk5vZGUgaW1wbGVtZW50cyBJTm9kZSB7XHJcbiAgaW5kZXg6IG51bWJlcjtcclxuICB0eXBlOiBOb2RlVHlwZTtcclxuICBwYXJlbnQ6SU5vZGU7XHJcbiAgZ2V0IGxvZ2ljYWxPcGVyYXRvcigpOiBMb2dpY2FsT3BlcmF0b3J7XHJcbiAgICByZXR1cm4gdGhpcy5wYXJlbnQubG9naWNhbE9wZXJhdG9yO1xyXG4gIH07XHJcbiAgb2JqZWN0OiBhbnk7IC8vIOavlOi8g+WFg1xyXG4gIG9wZXJhdG9yOiBPcGVyYXRvcjsgLy8g5q+U6LyD5a2QXHJcbiAgdmFsdWU6IGFueTtcclxuICBnZXQgaGVhZGVyKCk6c3RyaW5ne1xyXG4gICAgcmV0dXJuICdnZW5lcmljJztcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKG9iamVjdDogYW55LCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBhbnksIHBhcmVudDogR3JvdXBOb2RlKSB7XHJcbiAgICB0aGlzLmluZGV4PTA7XHJcbiAgICB0aGlzLnR5cGUgPSBOb2RlVHlwZS5Db25kaXRpb247XHJcbiAgICB0aGlzLm9iamVjdCA9IG9iamVjdDtcclxuICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcclxuICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIHRoaXMucGFyZW50PXBhcmVudDtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBmcm9tSlNPTihqc29uOiBhbnksIHBhcmVudDogR3JvdXBOb2RlKTogQ29uZGl0aW9uTm9kZSB7XHJcbiAgICBjb25zdCBub2RlPSBuZXcgQ29uZGl0aW9uTm9kZShcclxuICAgICAganNvbi5vYmplY3QsXHJcbiAgICAgIGpzb24ub3BlcmF0b3IsXHJcbiAgICAgIGpzb24udmFsdWUsXHJcbiAgICAgIHBhcmVudFxyXG4gICAgKTtcclxuICAgIG5vZGUuaW5kZXg9anNvbi5pbmRleDtcclxuICAgIHJldHVybiBub2RlO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIOadoeS7tuW8j+OBrueuoeeQhuOCr+ODqeOCuVxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIENvbmRpdGlvblRyZWUge1xyXG4gIHJvb3Q6IEdyb3VwTm9kZTtcclxuICBtYXhJbmRleDpudW1iZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5tYXhJbmRleD0wO1xyXG4gICAgdGhpcy5yb290ID0gbmV3IEdyb3VwTm9kZShMb2dpY2FsT3BlcmF0b3IuQU5ELCBudWxsKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOODjuODvOODiei/veWKoFxyXG4gICAqIEBwYXJhbSBwYXJlbnQgXHJcbiAgICogQHBhcmFtIG5vZGUgXHJcbiAgICovXHJcbiAgYWRkTm9kZShwYXJlbnQ6IEdyb3VwTm9kZSwgbm9kZTogSU5vZGUpOiB2b2lkIHtcclxuICAgIHRoaXMubWF4SW5kZXgrKztcclxuICAgIG5vZGUuaW5kZXg9dGhpcy5tYXhJbmRleDtcclxuICAgIHBhcmVudC5jaGlsZHJlbi5wdXNoKG5vZGUpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogIOODjuODvOODieWJiumZpFxyXG4gICAqIEBwYXJhbSBub2RlIFxyXG4gICAqL1xyXG4gIHJlbW92ZU5vZGUobm9kZTogSU5vZGUpOiB2b2lkIHtcclxuICAgIGlmIChub2RlLnBhcmVudCA9PT0gbnVsbCkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ+ODq+ODvOODiOODjuODvOODieWJiumZpOOBp+OBjeOBvuOBm+OCkycpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgcGFyZW50ID0gbm9kZS5wYXJlbnQgYXMgR3JvdXBOb2RlO1xyXG4gICAgICBjb25zdCBpbmRleCA9IHBhcmVudC5jaGlsZHJlbi5pbmRleE9mKG5vZGUpO1xyXG4gICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgIHBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuLyoqXHJcbiAqIOadoeS7tuODhOODquODvOOBi+OCieOCpOODs+ODh+OCo+OCr+OCueWApOOBp+adoeS7tuODjuODvOODieOCkuaknOe0ouOBmeOCi1xyXG4gKiBAcGFyYW0gaW5kZXggXHJcbiAqIEByZXR1cm5zIFxyXG4gKi9cclxuICBmaW5kQnlJbmRleChpbmRleDpudW1iZXIpOklOb2RlfHVuZGVmaW5lZHtcclxuICAgIHJldHVybiB0aGlzLmZpbmRDaGlsZHJlbih0aGlzLnJvb3QsaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5oyH5a6a44Gu44OO44O844OJ44Kw44Or44O844OX44GL44KJ44Kk44Oz44OH44Kj44Kv44K55YCk44Gn5p2h5Lu244OO44O844OJ44KS5qSc57Si44GZ44KLXHJcbiAgICogQHBhcmFtIHBhcmVudCBcclxuICAgKiBAcGFyYW0gaW5kZXggXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgZmluZENoaWxkcmVuKHBhcmVudDogR3JvdXBOb2RlLCBpbmRleDogbnVtYmVyKTogSU5vZGUgfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKHBhcmVudC5pbmRleCA9PT0gaW5kZXgpIHtcclxuICAgICAgcmV0dXJuIHBhcmVudDtcclxuICAgIH1cclxuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBwYXJlbnQuY2hpbGRyZW4pIHtcclxuICAgICAgaWYgKG5vZGUuaW5kZXggPT09IGluZGV4KSB7XHJcbiAgICAgICAgcmV0dXJuIG5vZGU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vZGUudHlwZSAhPT0gTm9kZVR5cGUuQ29uZGl0aW9uKSB7XHJcbiAgICAgICAgY29uc3QgZm91bmROb2RlID0gdGhpcy5maW5kQ2hpbGRyZW4obm9kZSBhcyBHcm91cE5vZGUsIGluZGV4KTtcclxuICAgICAgICBpZiAoZm91bmROb2RlKSB7XHJcbiAgICAgICAgICByZXR1cm4gZm91bmROb2RlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFxyXG4gICAqIEBwYXJhbSBub2RlIOacgOWkp+OBruOCpOODs+ODh+OCo+OCr+OCueWApOOCkuWPluW+l+OBmeOCi1xyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGdldE1heEluZGV4KG5vZGU6SU5vZGUpOm51bWJlcntcclxuICAgIGxldCBtYXhJbmRleDpudW1iZXI9bm9kZS5pbmRleDtcclxuICAgIGlmKG5vZGUudHlwZSE9PU5vZGVUeXBlLkNvbmRpdGlvbil7XHJcbiAgICAgIGNvbnN0IGdyb3VwTm9kZSA9IG5vZGUgYXMgR3JvdXBOb2RlO1xyXG4gICAgICBncm91cE5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpPT57XHJcbiAgICAgICAgICBjb25zdCBjaGlsZE1heCA9IHRoaXMuZ2V0TWF4SW5kZXgoY2hpbGQpO1xyXG4gICAgICAgICAgaWYoY2hpbGRNYXg+bWF4SW5kZXgpe1xyXG4gICAgICAgICAgICBtYXhJbmRleD1jaGlsZE1heDtcclxuICAgICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWF4SW5kZXg7XHJcbn1cclxuXHJcbiAgLyoqXHJcbiAgICog5p2h5Lu25byP44KS6KGo56S644GZ44KLXHJcbiAgICogQHBhcmFtIG5vZGUg5p2h5Lu244OO44O844OJXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgYnVpbGRDb25kaXRpb25TdHJpbmcobm9kZTpJTm9kZSl7XHJcbiAgICBpZiAobm9kZS50eXBlICE9PSBOb2RlVHlwZS5Db25kaXRpb24pIHtcclxuICAgICAgbGV0IGNvbmRpdGlvblN0cmluZyA9ICcoJztcclxuICAgICAgY29uc3QgZ3JvdXBOb2RlID0gbm9kZSBhcyBHcm91cE5vZGU7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZ3JvdXBOb2RlLmNoaWxkcmVuLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgY29uc3QgY2hpbGRDb25kaXRpb25TdHJpbmcgPSB0aGlzLmJ1aWxkQ29uZGl0aW9uU3RyaW5nKGdyb3VwTm9kZS5jaGlsZHJlbltpXSk7XHJcbiAgICAgICAgaWYgKGNoaWxkQ29uZGl0aW9uU3RyaW5nICE9PSAnJykge1xyXG4gICAgICAgICAgY29uZGl0aW9uU3RyaW5nICs9IGNoaWxkQ29uZGl0aW9uU3RyaW5nO1xyXG4gICAgICAgICAgaWYgKGkgPCBncm91cE5vZGUuY2hpbGRyZW4ubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICBjb25kaXRpb25TdHJpbmcgKz0gYCAke2dyb3VwTm9kZS5sb2dpY2FsT3BlcmF0b3J9IGA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGNvbmRpdGlvblN0cmluZyArPSAnKSc7XHJcbiAgICAgIHJldHVybiBjb25kaXRpb25TdHJpbmc7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBjb25kTm9kZT1ub2RlIGFzIENvbmRpdGlvbk5vZGU7XHJcbiAgICAgIGlmIChjb25kTm9kZS5vYmplY3QgJiYgY29uZE5vZGUub3BlcmF0b3IgKSB7XHJcbiAgICAgICAgbGV0IHZhbHVlPWNvbmROb2RlLnZhbHVlO1xyXG4gICAgICAgIGlmKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0nb2JqZWN0JyAmJiAoJ2xhYmVsJyBpbiB2YWx1ZSkpe1xyXG4gICAgICAgICAgICB2YWx1ZSA9Y29uZE5vZGUudmFsdWUubGFiZWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBgJHtjb25kTm9kZS5vYmplY3QubmFtZX0gJHtjb25kTm9kZS5vcGVyYXRvcn0gJyR7dmFsdWV9J2A7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIOOBmeOBueOBpuadoeS7tuW8j+OCkuWPluW+l+OBmeOCi1xyXG4gICAqL1xyXG4gIGdldENvbmRpdGlvbnMocGFyZW50Okdyb3VwTm9kZSk6Q29uZGl0aW9uTm9kZVtde1xyXG4gICAgY29uc3QgY29uZGlOb2RlczpDb25kaXRpb25Ob2RlW109W107XHJcbiAgICBwYXJlbnQuY2hpbGRyZW4uZm9yRWFjaCgobm9kZSk9PntcclxuICAgICAgaWYobm9kZS50eXBlPT09Tm9kZVR5cGUuQ29uZGl0aW9uKXtcclxuICAgICAgICBjb25kaU5vZGVzLnB1c2gobm9kZSBhcyBDb25kaXRpb25Ob2RlKTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgY29uZGlOb2Rlcy5wdXNoKC4uLnRoaXMuZ2V0Q29uZGl0aW9ucyhub2RlIGFzIEdyb3VwTm9kZSkpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHJldHVybiBjb25kaU5vZGVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHBhcmVudCDjgZnjgbnjgabmnaHku7bjgrDjg6vjg7zjg5fjgpLlj5blvpfjgZnjgotcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBnZXRHcm91cHMocGFyZW50Okdyb3VwTm9kZSk6bnVtYmVyW117XHJcbiAgICBjb25zdCBncm91cHM6bnVtYmVyW109W107XHJcbiAgICBncm91cHMucHVzaChwYXJlbnQuaW5kZXgpO1xyXG4gICAgcGFyZW50LmNoaWxkcmVuLmZvckVhY2goKG5vZGUpPT57XHJcbiAgICAgIGlmKG5vZGUudHlwZSE9PU5vZGVUeXBlLkNvbmRpdGlvbil7XHJcbiAgICAgICAgZ3JvdXBzLnB1c2goLi4udGhpcy5nZXRHcm91cHMobm9kZSBhcyBHcm91cE5vZGUpKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZ3JvdXBzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSnNvbuOBi+OCieW+qeWFg1xyXG4gICAqIEBwYXJhbSBqc29uU3RyaW5nIFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGZyb21Kc29uKGpzb25TdHJpbmc6IHN0cmluZyk6IElOb2RlIHtcclxuICAgIGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKGpzb25TdHJpbmcpO1xyXG4gICAgdGhpcy5yb290ID0gR3JvdXBOb2RlLmZyb21KU09OKGpzb24pIGFzIEdyb3VwTm9kZTtcclxuICAgIHRoaXMubWF4SW5kZXg9dGhpcy5nZXRNYXhJbmRleCh0aGlzLnJvb3QpO1xyXG4gICAgcmV0dXJuIHRoaXMucm9vdDtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSlNPTuaWh+Wtl+WIl+OBq+WkieaPm+OBmeOCi1xyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIHRvSnNvbigpOnN0cmluZ3tcclxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLnJvb3QsIChrZXksIHZhbHVlKSA9PiB7XHJcbiAgICAgIGlmIChrZXkgPT09ICdwYXJlbnQnKSB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlID8gdmFsdWUudHlwZSA6IG51bGw7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmnaHku7blvI/jgpLoqIjnrpfjgZnjgotcclxuICAgKiBAcGFyYW0gbm9kZSBcclxuICAgKiBAcGFyYW0gY29udGV4dCBcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBldmFsdWF0ZShub2RlOiBJTm9kZSwgY29udGV4dDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBpZiAobm9kZS50eXBlID09PSBOb2RlVHlwZS5Db25kaXRpb24pIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZXZhbHVhdGVDb25kaXRpb24obm9kZSBhcyBDb25kaXRpb25Ob2RlLCBjb250ZXh0KTtcclxuICAgIH0gZWxzZSBpZiAobm9kZS50eXBlID09PSBOb2RlVHlwZS5Mb2dpY0dyb3VwIHx8IG5vZGUudHlwZSA9PT0gTm9kZVR5cGUuUm9vdCkge1xyXG4gICAgICBjb25zdCBncm91cE5vZGUgPSBub2RlIGFzIEdyb3VwTm9kZTtcclxuICAgICAgY29uc3QgcmVzdWx0cyA9IGdyb3VwTm9kZS5jaGlsZHJlbi5tYXAoY2hpbGQgPT4gdGhpcy5ldmFsdWF0ZShjaGlsZCwgY29udGV4dCkpO1xyXG4gIFxyXG4gICAgICBpZiAoZ3JvdXBOb2RlLmxvZ2ljYWxPcGVyYXRvciA9PT0gTG9naWNhbE9wZXJhdG9yLkFORCkge1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzLmV2ZXJ5KHJlc3VsdCA9PiByZXN1bHQpO1xyXG4gICAgICB9IGVsc2UgaWYgKGdyb3VwTm9kZS5sb2dpY2FsT3BlcmF0b3IgPT09IExvZ2ljYWxPcGVyYXRvci5PUikge1xyXG4gICAgICAgIHJldHVybiByZXN1bHRzLnNvbWUocmVzdWx0ID0+IHJlc3VsdCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBsb2dpY2FsIG9wZXJhdG9yJyk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgbm9kZSB0eXBlJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0Q29kZVZhbHVlKHZhbHVlOiBhbnkpOiBhbnkge1xyXG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcgJiYgJ2NvZGUnIGluIHZhbHVlKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZS5jb2RlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSUNvZGVWYWx1ZeWei+OBrmNvZGXjgavlpInmj5vjgZnjgotcclxuICAgKiBAcGFyYW0gdmFsdWUgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgY29udmVydENvZGVWYWx1ZSh2YWx1ZTphbnkpOmFueXtcclxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICByZXR1cm4gdmFsdWUubWFwKHYgPT4gdGhpcy5nZXRDb2RlVmFsdWUodikpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29kZVZhbHVlKHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHZhcnMg5aSJ5pWw5YCk44KS5Y+W5b6X44GZ44KLXHJcbiAgICogQHBhcmFtIHBhdGggXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgZ2V0Q29udGV4dFZhckJ5UGF0aCAodmFyczoge1trZXk6c3RyaW5nXTphbnl9LCBwYXRoOiBzdHJpbmcpe1xyXG4gICAgcmV0dXJuIHBhdGguc3BsaXQoXCIuXCIpLnJlZHVjZSgobywgaykgPT4gKG8gfHwge30pW2tdLCB2YXJzKTtcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBDb25kaXRpb24gb2JqZWN044Gu5YCk44KS5Y+W5b6X44GZ44KLXHJcbiAgICogQHBhcmFtIG9iamVjdCBcclxuICAgKiBAcGFyYW0gY29udGV4dCBcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBnZXRPYmplY3RWYWx1ZShvYmplY3Q6YW55LGNvbnRleHQ6SUNvbnRleHQpe1xyXG4gICAgaWYoIW9iamVjdCB8fCB0eXBlb2Ygb2JqZWN0IT09XCJvYmplY3RcIiB8fCAhKFwib2JqZWN0VHlwZVwiIGluIG9iamVjdCkpe1xyXG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICB9XHJcbiAgICBpZihvYmplY3Qub2JqZWN0VHlwZT09PSdmaWVsZCcpe1xyXG4gICAgICBjb25zdCBmaWVsZFZhbHVlID0gY29udGV4dC5yZWNvcmRbb2JqZWN0LmNvZGVdO1xyXG4gICAgICBpZihmaWVsZFZhbHVlLnR5cGU9PT0nTlVNQkVSJyAmJiBmaWVsZFZhbHVlLnZhbHVlIT09dW5kZWZpbmVkKXtcclxuICAgICAgICByZXR1cm4gTnVtYmVyKGZpZWxkVmFsdWUudmFsdWUpO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0Q29kZVZhbHVlKGZpZWxkVmFsdWUudmFsdWUpO1xyXG4gICAgICB9ICAgICAgXHJcbiAgICB9ZWxzZSBpZihvYmplY3Qub2JqZWN0VHlwZT09PSd2YXJpYWJsZScpe1xyXG4gICAgICBjb25zdCB2YXJWYWx1ZSA9IHRoaXMuZ2V0Q29udGV4dFZhckJ5UGF0aChjb250ZXh0LnZhcmlhYmxlcyxvYmplY3QubmFtZS5uYW1lKTtcclxuICAgICAgcmV0dXJuIHRoaXMuY29udmVydENvZGVWYWx1ZSh2YXJWYWx1ZSk7XHJcbiAgICB9ZWxzZSBpZihvYmplY3Qub2JqZWN0VHlwZT09PSd0ZXh0Jyl7XHJcbiAgICAgIHJldHVybiBvYmplY3Quc2hhcmVkVGV4dDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOavlOi8g+OCquODluOCuOOCp+OCr+ODiOOBruWApOOCkuWPluW+l1xyXG4gICAqIEBwYXJhbSBvYmplY3QgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgZ2V0Q29uZGl0aW9uVmFsdWUob2JqZWN0OmFueSxjb250ZXh0OklDb250ZXh0KXtcclxuICAgIGlmKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCE9PVwib2JqZWN0XCIpe1xyXG4gICAgICByZXR1cm4gb2JqZWN0O1xyXG4gICAgfVxyXG4gICAgaWYoXCJvYmplY3RUeXBlXCIgaW4gb2JqZWN0KXtcclxuICAgICAgcmV0dXJuIHRoaXMuZ2V0T2JqZWN0VmFsdWUob2JqZWN0LGNvbnRleHQpO1xyXG4gICAgfVxyXG4gICAgaWYoXCJzaGFyZWRUZXh0XCIgaW4gb2JqZWN0KXtcclxuICAgICAgcmV0dXJuIG9iamVjdC5zaGFyZWRUZXh0O1xyXG4gICAgfVxyXG4gICAgaWYoXCJsYWJlbFwiIGluIG9iamVjdCl7XHJcbiAgICAgIHJldHVybiBvYmplY3QubGFiZWw7XHJcbiAgICB9XHJcbiAgICBpZihcInZhbHVlXCIgaW4gb2JqZWN0KXtcclxuICAgICAgcmV0dXJuIG9iamVjdC52YWx1ZTtcclxuICAgIH1cclxuICAgIGlmKFwibmFtZVwiIGluIG9iamVjdCl7XHJcbiAgICAgIHJldHVybiBvYmplY3QubmFtZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOadoeS7tuW8j+OCkuioiOeul+OBmeOCi1xyXG4gICAqIEBwYXJhbSBjb25kaXRpb24gXHJcbiAgICogQHBhcmFtIGNvbnRleHQgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgZXZhbHVhdGVDb25kaXRpb24oY29uZGl0aW9uOiBDb25kaXRpb25Ob2RlLCBjb250ZXh0OiBJQ29udGV4dCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgeyBvYmplY3QsIG9wZXJhdG9yLCB2YWx1ZSB9ID0gY29uZGl0aW9uO1xyXG4gICAgY29uc3QgdGFyZ2V0T2JqZWN0ID0gdGhpcy5nZXRPYmplY3RWYWx1ZShvYmplY3QsY29udGV4dCk7XHJcbiAgICBjb25zdCBjb25kaXRpb25PYmplY3QgPSB0aGlzLmdldENvbmRpdGlvblZhbHVlKHZhbHVlLGNvbnRleHQpO1xyXG4gICAgY29uc3QgaXNBcnJheVRhcmdldCA9IEFycmF5LmlzQXJyYXkodGFyZ2V0T2JqZWN0KTtcclxuICAgIGNvbnN0IGlzQXJyYXlWYWx1ZSA9IEFycmF5LmlzQXJyYXkoY29uZGl0aW9uT2JqZWN0KTtcclxuICAgIC8v6YWN5YiX44Gu5q+U6LyDXHJcbiAgICBpZigoaXNBcnJheVRhcmdldCAmJiB0YXJnZXRPYmplY3QubGVuZ3RoID4gMSl8fChpc0FycmF5VmFsdWUgJiYgY29uZGl0aW9uT2JqZWN0Lmxlbmd0aD4xKSl7XHJcbiAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVBcnJheShvcGVyYXRvcix0YXJnZXRPYmplY3QsY29uZGl0aW9uT2JqZWN0KVxyXG4gICAgfVxyXG4gICAgY29uc3QgdGFyZ2V0VmFsdWUgPSBpc0FycmF5VGFyZ2V0P3RhcmdldE9iamVjdFswXTp0YXJnZXRPYmplY3Q7XHJcbiAgICBjb25zdCBjb25kaXRpb25WYWx1ZSA9IGlzQXJyYXlWYWx1ZT9jb25kaXRpb25PYmplY3RbMF06Y29uZGl0aW9uT2JqZWN0O1xyXG4gICAgc3dpdGNoIChvcGVyYXRvcikge1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLkVxdWFsOlxyXG4gICAgICBjYXNlIE9wZXJhdG9yLk5vdEVxdWFsOlxyXG4gICAgICBjYXNlIE9wZXJhdG9yLkdyZWF0ZXI6XHJcbiAgICAgIGNhc2UgT3BlcmF0b3IuR3JlYXRlck9yRXF1YWw6XHJcbiAgICAgIGNhc2UgT3BlcmF0b3IuTGVzczpcclxuICAgICAgY2FzZSBPcGVyYXRvci5MZXNzT3JFcXVhbDpcclxuICAgICAgICByZXR1cm4gdGhpcy5jb21wYXJlKG9wZXJhdG9yLHRhcmdldFZhbHVlLCBjb25kaXRpb25WYWx1ZSk7XHJcbiAgICAgIGNhc2UgT3BlcmF0b3IuQ29udGFpbnM6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbnModGFyZ2V0VmFsdWUsY29uZGl0aW9uVmFsdWUpO1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLk5vdENvbnRhaW5zOlxyXG4gICAgICAgIHJldHVybiAhdGhpcy5jb250YWlucyh0YXJnZXRWYWx1ZSxjb25kaXRpb25WYWx1ZSk7XHJcbiAgICAgIGNhc2UgT3BlcmF0b3IuU3RhcnRXaXRoOlxyXG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0V2l0aCh0YXJnZXRWYWx1ZSxjb25kaXRpb25WYWx1ZSk7XHJcbiAgICAgIGNhc2UgT3BlcmF0b3IuTm90U3RhcnRXaXRoOlxyXG4gICAgICAgIHJldHVybiAhdGhpcy5zdGFydFdpdGgodGFyZ2V0VmFsdWUsY29uZGl0aW9uVmFsdWUpO1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLkVuZFdpdGg6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5kc1dpdGgodGFyZ2V0VmFsdWUsY29uZGl0aW9uVmFsdWUpO1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLk5vdEVuZFdpdGg6XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5kc1dpdGgodGFyZ2V0VmFsdWUsY29uZGl0aW9uVmFsdWUpO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgb3BlcmF0b3InKTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgICog5q+U6LyD44KS5a6f6KGM44GZ44KLXHJcbiAgICogQHBhcmFtIG9wZXJhdG9yIFxyXG4gICAqIEBwYXJhbSB0YXJnZXRWYWx1ZSBcclxuICAgKiBAcGFyYW0gdmFsdWUgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgY29tcGFyZShvcGVyYXRvcjogT3BlcmF0b3IsIHRhcmdldFZhbHVlOiBhbnksIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIC8vIHRhcmdldFZhbHVlIOOBr+aXpeacn+aXtu+8jHZhbHVlIOOCguaXpeacn+OBq+WkieaPm+OBl+OBpuavlOi8g+OBmeOCi1xyXG4gICAgaWYodGFyZ2V0VmFsdWU9PT11bmRlZmluZWQgfHwgdGFyZ2V0VmFsdWU9PT1udWxsfHx0YXJnZXRWYWx1ZT09PScnKXtcclxuICAgICAgaWYodmFsdWU9PT11bmRlZmluZWQgfHwgdmFsdWU9PT1udWxsfHx2YWx1ZT09PScnKXtcclxuICAgICAgICB0YXJnZXRWYWx1ZT0nJztcclxuICAgICAgICB2YWx1ZT0nJztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldFZhbHVlIGluc3RhbmNlb2YgRGF0ZSkge1xyXG4gICAgICBjb25zdCBkYXRlVmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgIGlmICghaXNOYU4oZGF0ZVZhbHVlLmdldFRpbWUoKSkpIHtcclxuICAgICAgICB2YWx1ZSA9IGRhdGVWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy90YXJnZXRWYWx1ZeOBr+aVsOWApOaZgu+8jHZhbHVlIOOCkuaVsOWApOOBq+WkieaPm+OBmeOCi1xyXG4gICAgZWxzZSBpZiAodHlwZW9mIHRhcmdldFZhbHVlID09PSAnbnVtYmVyJykge1xyXG4gICAgICBjb25zdCBudW1iZXJWYWx1ZSA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICAgIGlmICghaXNOYU4obnVtYmVyVmFsdWUpKSB7XHJcbiAgICAgICAgdmFsdWUgPSBudW1iZXJWYWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAodHlwZW9mIHRhcmdldFZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICB2YWx1ZSA9IFN0cmluZyh2YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBzd2l0Y2ggKG9wZXJhdG9yKSB7XHJcbiAgICAgIGNhc2UgT3BlcmF0b3IuRXF1YWw6XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldFZhbHVlID09PSB2YWx1ZTtcclxuICAgICAgY2FzZSBPcGVyYXRvci5Ob3RFcXVhbDpcclxuICAgICAgICByZXR1cm4gdGFyZ2V0VmFsdWUgIT09IHZhbHVlO1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLkdyZWF0ZXI6XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldFZhbHVlID4gdmFsdWU7XHJcbiAgICAgIGNhc2UgT3BlcmF0b3IuR3JlYXRlck9yRXF1YWw6XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldFZhbHVlID49IHZhbHVlO1xyXG4gICAgICBjYXNlIE9wZXJhdG9yLkxlc3M6XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldFZhbHVlIDwgdmFsdWU7XHJcbiAgICAgIGNhc2UgT3BlcmF0b3IuTGVzc09yRXF1YWw6XHJcbiAgICAgICAgcmV0dXJuIHRhcmdldFZhbHVlIDw9IHZhbHVlO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgb3BlcmF0b3IgZm9yIGNvbXBhcmlzb24nKTtcclxuICAgIH1cclxuICB9XHJcbiAgXHJcbiAgLyoqXHJcbiAgICog6YWN5YiX5YCk44Gu5q+U6LyDXHJcbiAgICogQHBhcmFtIG9wZXJhdG9yIFxyXG4gICAqIEBwYXJhbSB0YXJnZXRWYWx1ZSBcclxuICAgKiBAcGFyYW0gdmFsdWUgXHJcbiAgICovXHJcbiAvKipcclxuICog6YWN5YiX5YCk44Gu5q+U6LyDXHJcbiAqIEBwYXJhbSBvcGVyYXRvciBcclxuICogQHBhcmFtIHRhcmdldFZhbHVlIFxyXG4gKiBAcGFyYW0gdmFsdWUgXHJcbiAqL1xyXG4gY29tcGFyZUFycmF5KG9wZXJhdG9yOiBPcGVyYXRvciwgdGFyZ2V0VmFsdWU6IGFueSwgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gIGNvbnN0IGlzQXJyYXlUYXJnZXQgPSBBcnJheS5pc0FycmF5KHRhcmdldFZhbHVlKTtcclxuICBjb25zdCBpc0FycmF5VmFsdWUgPSBBcnJheS5pc0FycmF5KHZhbHVlKTtcclxuICBjb25zdCBzb3J0QXJyYXkgPSAoYXJyOiBhbnlbXSkgPT4gYXJyLnNsaWNlKCkuc29ydCgpO1xyXG4gIHRhcmdldFZhbHVlID0gaXNBcnJheVRhcmdldD90YXJnZXRWYWx1ZTpbdGFyZ2V0VmFsdWVdO1xyXG4gIHZhbHVlPSBpc0FycmF5VmFsdWU/dmFsdWU6W3ZhbHVlXTtcclxuICBjb25zdCB0YXJnZXRBcnJheT1zb3J0QXJyYXkodGFyZ2V0VmFsdWUpO1xyXG4gIGNvbnN0IHZhbHVlQXJyYXk9c29ydEFycmF5KHZhbHVlKTtcclxuICBzd2l0Y2ggKG9wZXJhdG9yKSB7XHJcbiAgICBjYXNlIE9wZXJhdG9yLkVxdWFsOlxyXG4gICAgICByZXR1cm4gdGFyZ2V0QXJyYXkuZXZlcnkoKHYsIGkpID0+IHYgPT09IHZhbHVlQXJyYXlbaV0pO1xyXG4gICAgY2FzZSBPcGVyYXRvci5Ob3RFcXVhbDpcclxuICAgICAgcmV0dXJuICF0YXJnZXRBcnJheS5ldmVyeSgodiwgaSkgPT4gdiA9PT0gdmFsdWVBcnJheVtpXSk7XHJcbiAgICBjYXNlIE9wZXJhdG9yLkNvbnRhaW5zOlxyXG4gICAgICByZXR1cm4gdmFsdWVBcnJheS5ldmVyeSh2ID0+IHRhcmdldEFycmF5LmluY2x1ZGVzKHYpKTtcclxuICAgIGNhc2UgT3BlcmF0b3IuTm90Q29udGFpbnM6XHJcbiAgICAgIHJldHVybiAhdmFsdWVBcnJheS5ldmVyeSh2ID0+IHRhcmdldEFycmF5LmluY2x1ZGVzKHYpKTtcclxuICAgIGRlZmF1bHQ6XHJcbiAgICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG5cclxuICAvKipcclxuICAgKiDlkKvjgoDoqIjnrpdcclxuICAgKiBAcGFyYW0gdGFyZ2V0VmFsdWUgXHJcbiAgICogQHBhcmFtIHZhbHVlIFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIGNvbnRhaW5zKHRhcmdldFZhbHVlOiBhbnksIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICh0eXBlb2YgdGFyZ2V0VmFsdWUgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIHRhcmdldFZhbHVlLmluY2x1ZGVzKHZhbHVlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcbiAgIC8qKlxyXG4gICAqIFN0YXJ0V2l0aOioiOeul1xyXG4gICAqIEBwYXJhbSB0YXJnZXRWYWx1ZSBcclxuICAgKiBAcGFyYW0gdmFsdWUgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgc3RhcnRXaXRoKHRhcmdldFZhbHVlOiBhbnksIHZhbHVlOiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmICh0eXBlb2YgdGFyZ2V0VmFsdWUgPT09ICdzdHJpbmcnICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgcmV0dXJuIHRhcmdldFZhbHVlLnN0YXJ0c1dpdGgodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBFbmRzV2l0aOioiOeul1xyXG4gICAqIEBwYXJhbSB0YXJnZXRWYWx1ZSBcclxuICAgKiBAcGFyYW0gdmFsdWUgXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgZW5kc1dpdGgodGFyZ2V0VmFsdWU6IGFueSwgdmFsdWU6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKHR5cGVvZiB0YXJnZXRWYWx1ZSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xyXG4gICAgICByZXR1cm4gdGFyZ2V0VmFsdWUuZW5kc1dpdGgodmFsdWUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxufVxyXG4iLCJcclxuaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgIElBY3Rpb24sSUFjdGlvblJlc3VsdCwgSUFjdGlvbk5vZGUsIElBY3Rpb25Qcm9wZXJ0eSwgSUZpZWxkLCBJQ29udGV4dCB9IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG5pbXBvcnQgeyBDb25kaXRpb25UcmVlIH0gZnJvbSAnLi4vdHlwZXMvQ29uZGl0aW9ucyc7XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJU2hvd25Qcm9wc3tcclxuICAgIGZpZWxkOklGaWVsZDtcclxuICAgIHNob3c6c3RyaW5nOyBcclxuICAgIGNvbmRpdGlvbjpzdHJpbmc7XHJcbn1cclxuLyoqXHJcbiAqIOihqOekuu+8j+mdnuihqOekuuOCouOCr+OCt+ODp+ODs1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEZpZWxkU2hvd25BY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9ue1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgcHJvcHM6SVNob3duUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMubmFtZT1cIuihqOekuu+8j+mdnuihqOekulwiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9W107XHJcbiAgICAgICB0aGlzLnByb3BzPXtcclxuICAgICAgICAgICAgZmllbGQ6e2NvZGU6Jyd9LFxyXG4gICAgICAgICAgICBzaG93OicnLFxyXG4gICAgICAgICAgICBjb25kaXRpb246JydcclxuICAgICAgICB9XHJcbiAgICAgICAgLy/jgqLjgq/jgrfjg6fjg7PjgpLnmbvpjLLjgZnjgotcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGUgXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSxjb250ZXh0OklDb250ZXh0KTpQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0PXtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgLy/lsZ7mgKfoqK3lrprjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1hY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICBpZiAoISgnZmllbGQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ3Nob3cnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUgYXMgSVNob3duUHJvcHM7XHJcbiAgICAgICAgICAgIC8v5p2h5Lu25byP44Gu6KiI566X57WQ5p6c44KS5Y+W5b6XXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbmRpdGlvblJlc3VsdCA9IHRoaXMuZ2V0Q29uZGl0aW9uUmVzdWx0KGNvbnRleHQpO1xyXG4gICAgICAgICAgICBpZihjb25kaXRpb25SZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgaWYodGhpcy5wcm9wcy5zaG93PT09J+ihqOekuicpe1xyXG4gICAgICAgICAgICAgICAgICAgIGtpbnRvbmUuYXBwLnJlY29yZC5zZXRGaWVsZFNob3duKHRoaXMucHJvcHMuZmllbGQuY29kZSx0cnVlKTtcclxuICAgICAgICAgICAgICAgIH1lbHNlIGlmICh0aGlzLnByb3BzLnNob3c9PT0n6Z2e6KGo56S6Jyl7XHJcbiAgICAgICAgICAgICAgICAgICAga2ludG9uZS5hcHAucmVjb3JkLnNldEZpZWxkU2hvd24odGhpcy5wcm9wcy5maWVsZC5jb2RlLGZhbHNlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXN1bHQ9IHtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6dHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgY29udGV4dC5lcnJvcnMuaGFuZGxlRXJyb3IoZXJyb3IsYWN0aW9uTm9kZSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jYW5OZXh0PWZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29udGV4dCDmnaHku7blvI/jgpLlrp/ooYzjgZnjgotcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGdldENvbmRpdGlvblJlc3VsdChjb250ZXh0OmFueSk6Ym9vbGVhbntcclxuICAgICAgICBjb25zdCB0cmVlID10aGlzLmdldENvbmRpdGlvbih0aGlzLnByb3BzLmNvbmRpdGlvbik7XHJcbiAgICAgICAgaWYoIXRyZWUpe1xyXG4gICAgICAgICAgICAvL+adoeS7tuOCkuioreWumuOBleOCjOOBpuOBhOOBvuOBm+OCk1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRyZWUuZXZhbHVhdGUodHJlZS5yb290LGNvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIGNvbmRpdGlvbiDmnaHku7blvI/jg4Tjg6rjg7zjgpLlj5blvpfjgZnjgotcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGdldENvbmRpdGlvbihjb25kaXRpb246c3RyaW5nKTpDb25kaXRpb25UcmVlfG51bGx7XHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICBjb25zdCB0cmVlID0gbmV3IENvbmRpdGlvblRyZWUoKTtcclxuICAgICAgICAgICAgdHJlZS5mcm9tSnNvbihjb25kaXRpb24pO1xyXG4gICAgICAgICAgICBpZih0cmVlLmdldENvbmRpdGlvbnModHJlZS5yb290KS5sZW5ndGg+MCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJlZTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1jYXRjaChlcnJvcil7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgICAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXT10aGlzO1xyXG4gICAgfVxyXG59XHJcbm5ldyBGaWVsZFNob3duQWN0aW9uKCk7IiwiXHJcbmltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7IElBY3Rpb24sIElBY3Rpb25Qcm9wZXJ0eSwgSUFjdGlvbk5vZGUsIElDb250ZXh0LCBJQWN0aW9uUmVzdWx0IH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbmltcG9ydCB7IENvbmRpdGlvblRyZWUgfSBmcm9tICcuLi90eXBlcy9Db25kaXRpb25zJztcclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+OBruWxnuaAp+Wumue+qVxyXG4gKi9cclxuaW50ZXJmYWNlIElFcnJvclNob3dQcm9wcyB7XHJcbiAgICBtZXNzYWdlOiBzdHJpbmc7XHJcbiAgICBjb25kaXRpb246IHN0cmluZztcclxufSAgIFxyXG5cclxuZXhwb3J0IGNsYXNzIEVycm9yU2hvd0FjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb24ge1xyXG4gICAgbmFtZTogc3RyaW5nOyBcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTsgLy/osIPnlKjku45pbXBvcnTlr7zlhaXlhbPkuo7mmL7npLrnsbvnmoTlrprkuYlcclxuICAgIHByb3BzOiBJRXJyb3JTaG93UHJvcHM7Ly/ku47kuIrmlrnnmoRpbnRlcmZhY2Ug5a6a5LmJ6L+Z5LiqcHJvcHPmiYDpnIDopoHmjqXlj5fnmoTlsZ7mgKdcclxuICAgIGNvbnN0cnVjdG9yKCkgeyAvL+ino+aehOWHveaVsOWumuS5iemcgOimgeeahOexu+WQjVxyXG4gICAgICAgIHRoaXMubmFtZSA9IFwi44Ko44Op44O86KGo56S6XCI7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucHJvcHMgPSB7XHJcbiAgICAgICAgICAgIG1lc3NhZ2U6ICcnLFxyXG4gICAgICAgICAgICBjb25kaXRpb246ICcnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTsgLy/ph43nva7ku6XkuIrms6jlhozooahcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGUgXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOiBJQWN0aW9uTm9kZSwgZXZlbnQ6IGFueSwgY29udGV4dDogSUNvbnRleHQpOiBQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHsgXHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHsgXHJcbiAgICAgICAgICAgIGNhbk5leHQ6IHRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDogZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeSB7IFxyXG4gICAgICAgICAgICB0aGlzLmFjdGlvblByb3BzID0gYWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ21lc3NhZ2UnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ2NvbmRpdGlvbicgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkpIHsgLy/lpoLmnpxtZXNzYWdl5Lul5Y+KY29uZGl0aW9u5Lik6ICF6YO95LiN5a2Y5Zyo55qE5oOF5Ya15LiLcmV0dXJuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUgYXMgSUVycm9yU2hvd1Byb3BzOyBcclxuICAgICAgICAgICAgY29uc3QgY29uZGl0aW9uUmVzdWx0ID0gdGhpcy5nZXRDb25kaXRpb25SZXN1bHQoY29udGV4dCk7IFxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIuadoeS7tue1kOaenO+8mlwiLGNvbmRpdGlvblJlc3VsdCk7XHJcbiAgICAgICAgICAgIGlmIChjb25kaXRpb25SZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50LmVycm9yID0gdGhpcy5wcm9wcy5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQ9ZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb250ZXh0LmVycm9ycy5oYW5kbGVFcnJvcihlcnJvcixhY3Rpb25Ob2RlKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAqIFxyXG4gICAgKiBAcGFyYW0gY29udGV4dCDmnaHku7blvI/jgpLlrp/ooYzjgZnjgotcclxuICAgICogQHJldHVybnMgXHJcbiAgICAqL1xyXG4gICAgZ2V0Q29uZGl0aW9uUmVzdWx0KGNvbnRleHQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IHRyZWUgPSB0aGlzLmdldENvbmRpdGlvbih0aGlzLnByb3BzLmNvbmRpdGlvbik7XHJcbiAgICAgICAgaWYgKCF0cmVlKSB7XHJcbiAgICAgICAgICAgIC8v5p2h5Lu244KS6Kit5a6a44GV44KM44Gm44GE44G+44Gb44KTXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJlZS5ldmFsdWF0ZSh0cmVlLnJvb3QsIGNvbnRleHQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIGNvbmRpdGlvbiDmnaHku7blvI/jg4Tjg6rjg7zjgpLlj5blvpfjgZnjgotcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBnZXRDb25kaXRpb24oY29uZGl0aW9uOiBzdHJpbmcpOiBDb25kaXRpb25UcmVlIHwgbnVsbCB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgY29uc3QgdHJlZSA9IG5ldyBDb25kaXRpb25UcmVlKCk7XHJcbiAgICAgICAgICAgIHRyZWUuZnJvbUpzb24oY29uZGl0aW9uKTtcclxuICAgICAgICAgICAgaWYgKHRyZWUuZ2V0Q29uZGl0aW9ucyh0cmVlLnJvb3QpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cmVlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV0gPSB0aGlzO1xyXG4gICAgfVxyXG5cclxufVxyXG5uZXcgRXJyb3JTaG93QWN0aW9uKCk7IiwiXHJcbmltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCAkIGZyb20gJ2pxdWVyeSc7XHJcbmltcG9ydCB7IElBY3Rpb24sIElBY3Rpb25Qcm9wZXJ0eSwgSUFjdGlvbk5vZGUsIElBY3Rpb25SZXN1bHQsIElDb250ZXh0IH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbmltcG9ydCBcIi4vYnV0dG9uLWFkZC5jc3NcIjtcclxuXHJcbi8qKlxyXG4gKiDjg5zjgr/jg7PphY3nva7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJQnV0dG9uQWRkUHJvcHMge1xyXG4gICAgLy/jg5zjgr/jg7PooajnpLrlkI1cclxuICAgIGJ1dHRvbk5hbWU6IHN0cmluZztcclxuICAgIHNwYWNlPzpJU3BhY2U7XHJcbiAgICAvL+mFjee9ruS9jee9rlxyXG4gICAgcG9zaXRpb246IHN0cmluZztcclxuICAgIC8v44Kk44OZ44Oz44OI5ZCNXHJcbiAgICBldmVudE5hbWU6c3RyaW5nXHJcbn0gICBcclxuXHJcbmludGVyZmFjZSBJU3BhY2V7XHJcbiAgICB0eXBlOnN0cmluZyxcclxuICAgIGVsZW1lbnRJZDpzdHJpbmdcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEJ1dHRvbkFkZEFjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb24ge1xyXG4gICAgbmFtZTogc3RyaW5nOyBcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTsgXHJcbiAgICBwcm9wczogSUJ1dHRvbkFkZFByb3BzO1xyXG4gICAgY29uc3RydWN0b3IoKSB7IFxyXG4gICAgICAgIHRoaXMubmFtZSA9IFwi44Oc44K/44Oz44Gu6YWN572uXCI7XHJcbiAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcyA9IFtdO1xyXG4gICAgICAgIHRoaXMucHJvcHMgPSB7XHJcbiAgICAgICAgICAgIGJ1dHRvbk5hbWU6ICcnLFxyXG4gICAgICAgICAgICBwb3NpdGlvbjogJycsXHJcbiAgICAgICAgICAgIGV2ZW50TmFtZTonJ1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDjgqLjgq/jgrfjg6fjg7Pjga7lrp/ooYzjgpLlkbzjgbPlh7rjgZlcclxuICAgICAqIEBwYXJhbSBhY3Rpb25Ob2RlIFxyXG4gICAgICogQHBhcmFtIGV2ZW50IFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHByb2Nlc3MoYWN0aW9uTm9kZTogSUFjdGlvbk5vZGUsIGV2ZW50OiBhbnksY29udGV4dDpJQ29udGV4dCk6IFByb21pc2U8SUFjdGlvblJlc3VsdD4geyBcclxuICAgICAgICBsZXQgcmVzdWx0ID0geyBcclxuICAgICAgICAgICAgY2FuTmV4dDogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgdHJ5IHsgXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBhY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICBpZiAoISgnYnV0dG9uTmFtZScgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkgJiYgISgncG9zaXRpb24nIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpKSB7IFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElCdXR0b25BZGRQcm9wczsgXHJcbiAgICAgICAgICAgIC8v44Oc44K/44Oz44KS6YWN572u44GZ44KLXHJcbiAgICAgICAgICAgIGxldCBidXR0b25TcGFjZTtcclxuICAgICAgICAgICAgaWYodGhpcy5wcm9wcy5zcGFjZSAmJiB0aGlzLnByb3BzLnNwYWNlLmVsZW1lbnRJZCl7XHJcbiAgICAgICAgICAgICAgICBidXR0b25TcGFjZSA9IGtpbnRvbmUuYXBwLnJlY29yZC5nZXRTcGFjZUVsZW1lbnQodGhpcy5wcm9wcy5zcGFjZS5lbGVtZW50SWQpO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGJ1dHRvblNwYWNlID0ga2ludG9uZS5hcHAucmVjb3JkLmdldEhlYWRlck1lbnVTcGFjZUVsZW1lbnQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZighYnV0dG9uU3BhY2UpIHJldHVybiByZXN1bHQ7XHJcbiAgXHJcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9JChgPGJ1dHRvbiBpZD0nJHt0aGlzLnByb3BzLmV2ZW50TmFtZX0nIGNsYXNzPSdhbGMtYnV0dG9uLW5vcm1hbCcgPiR7dGhpcy5wcm9wcy5idXR0b25OYW1lfTwvYnV0dG9uPmApO1xyXG4gICAgICAgICAgICBpZih0aGlzLnByb3BzLnBvc2l0aW9uPT09XCLkuIDnlarlt6bjgavov73liqDjgZnjgotcIil7XHJcbiAgICAgICAgICAgICAgICAkKGJ1dHRvblNwYWNlKS5wcmVwZW5kKGJ1dHRvbik7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgJChidXR0b25TcGFjZSkuYXBwZW5kKGJ1dHRvbik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgY2xpY2tFdmVudE5hbWUgPSBgJHtldmVudC50eXBlfS5jdXN0b21CdXR0b25DbGljay4ke3RoaXMucHJvcHMuZXZlbnROYW1lfWA7XHJcbiAgICAgICAgICAgIGJ1dHRvbi5vbihcImNsaWNrXCIsKCk9PntcclxuICAgICAgICAgICAgICAgICQoZG9jdW1lbnQpLnRyaWdnZXIoY2xpY2tFdmVudE5hbWUsZXZlbnQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb250ZXh0LmVycm9ycy5oYW5kbGVFcnJvcihlcnJvcixhY3Rpb25Ob2RlKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgXHJcblxyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV0gPSB0aGlzO1xyXG4gICAgfVxyXG5cclxufVxyXG5uZXcgQnV0dG9uQWRkQWN0aW9uKCk7IiwiXHJcbmltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7ICBJQWN0aW9uLElBY3Rpb25SZXN1bHQsIElBY3Rpb25Ob2RlLCBJQWN0aW9uUHJvcGVydHksIElDb250ZXh0LCBJVmFyTmFtZSB9IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG5pbXBvcnQgeyBDb25kaXRpb25UcmVlIH0gZnJvbSAnLi4vdHlwZXMvQ29uZGl0aW9ucyc7XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJQ29uZGl0aW9ue1xyXG4gICAgY29uZGl0aW9uOnN0cmluZztcclxuICAgIHZlck5hbWU6SVZhck5hbWU7XHJcbn1cclxuLyoqXHJcbiAqIOadoeS7tuWIhuWykOOCouOCr+OCt+ODp+ODs1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIENvbmRpdGlvbkFjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb257XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgICBwcm9wczpJQ29uZGl0aW9uO1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLm5hbWU9XCLmnaHku7blvI9cIjtcclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPVtdO1xyXG4gICAgICAgIHRoaXMucHJvcHM9e1xyXG4gICAgICAgICAgICBjb25kaXRpb246JycsXHJcbiAgICAgICAgICAgIHZlck5hbWU6e25hbWU6Jyd9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v44Ki44Kv44K344On44Oz44KS55m76Yyy44GZ44KLXHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiDjgqLjgq/jgrfjg6fjg7Pjga7lrp/ooYzjgpLlkbzjgbPlh7rjgZlcclxuICAgICAqIEBwYXJhbSBhY3Rpb25Ob2RlIFxyXG4gICAgICogQHBhcmFtIGV2ZW50IFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHByb2Nlc3MoYWN0aW9uTm9kZTpJQWN0aW9uTm9kZSxldmVudDphbnksY29udGV4dDpJQ29udGV4dCk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdD17XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OicnXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9YWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ2NvbmRpdGlvbicgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkgJiYgISgndmVyTmFtZScgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBJQ29uZGl0aW9uO1xyXG4gICAgICAgICAgICAvL+adoeS7tuW8j+OBruioiOeul+e1kOaenOOCkuWPluW+l1xyXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb25SZXN1bHQgPSB0aGlzLmdldENvbmRpdGlvblJlc3VsdChjb250ZXh0KTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCLmnaHku7boqIjnrpfntZDmnpw6XCIsY29uZGl0aW9uUmVzdWx0KTtcclxuICAgICAgICAgICAgaWYoY29uZGl0aW9uUmVzdWx0KXtcclxuICAgICAgICAgICAgICAgIHJlc3VsdD0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6J+OBr+OBhCdcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJlc3VsdD0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQ6J+OBhOOBhOOBiCdcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmKHRoaXMucHJvcHMudmVyTmFtZSAmJiB0aGlzLnByb3BzLnZlck5hbWUubmFtZSE9PScnKXtcclxuICAgICAgICAgICAgICAgIGNvbnRleHQudmFyaWFibGVzW3RoaXMucHJvcHMudmVyTmFtZS5uYW1lXT1yZXN1bHQucmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgY29udGV4dC5lcnJvcnMuaGFuZGxlRXJyb3IoZXJyb3IsYWN0aW9uTm9kZSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jYW5OZXh0PWZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gY29udGV4dCDmnaHku7blvI/jgpLlrp/ooYzjgZnjgotcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBnZXRDb25kaXRpb25SZXN1bHQoY29udGV4dDphbnkpOmJvb2xlYW57XHJcbiAgICAgICAgY29uc3QgdHJlZSA9dGhpcy5nZXRDb25kaXRpb24odGhpcy5wcm9wcy5jb25kaXRpb24pO1xyXG4gICAgICAgIGlmKCF0cmVlKXtcclxuICAgICAgICAgICAgLy/mnaHku7bjgpLoqK3lrprjgZXjgozjgabjgYTjgb7jgZvjgpNcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cmVlLmV2YWx1YXRlKHRyZWUucm9vdCxjb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSBjb25kaXRpb24g5p2h5Lu25byP44OE44Oq44O844KS5Y+W5b6X44GZ44KLXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgZ2V0Q29uZGl0aW9uKGNvbmRpdGlvbjpzdHJpbmcpOkNvbmRpdGlvblRyZWV8bnVsbHtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyZWUgPSBuZXcgQ29uZGl0aW9uVHJlZSgpO1xyXG4gICAgICAgICAgICB0cmVlLmZyb21Kc29uKGNvbmRpdGlvbik7XHJcbiAgICAgICAgICAgIGlmKHRyZWUuZ2V0Q29uZGl0aW9ucyh0cmVlLnJvb3QpLmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cmVlO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsOyBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1jYXRjaChlcnJvcil7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgICAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXT10aGlzO1xyXG4gICAgfVxyXG4gICAgXHJcbn1cclxubmV3IENvbmRpdGlvbkFjdGlvbigpOyIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5pbmplY3RQbGF0Zm9ybURlcHMgPSBleHBvcnRzLnBsYXRmb3JtRGVwcyA9IHZvaWQgMDtcbmV4cG9ydHMucGxhdGZvcm1EZXBzID0ge1xuICAgIHJlYWRGaWxlRnJvbVBhdGg6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH0sXG4gICAgZ2V0UmVxdWVzdFRva2VuOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9LFxuICAgIGdldERlZmF1bHRBdXRoOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9LFxuICAgIGJ1aWxkUGxhdGZvcm1EZXBlbmRlbnRDb25maWc6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH0sXG4gICAgYnVpbGRIZWFkZXJzOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKTtcbiAgICB9LFxuICAgIGJ1aWxkRm9ybURhdGFWYWx1ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfSxcbiAgICBidWlsZEJhc2VVcmw6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpO1xuICAgIH0sXG4gICAgZ2V0VmVyc2lvbjogZnVuY3Rpb24gKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJub3QgaW1wbGVtZW50ZWRcIik7XG4gICAgfSxcbn07XG52YXIgaW5qZWN0UGxhdGZvcm1EZXBzID0gZnVuY3Rpb24gKGRlcHMpIHtcbiAgICBpZiAoZGVwcy5yZWFkRmlsZUZyb21QYXRoKSB7XG4gICAgICAgIGV4cG9ydHMucGxhdGZvcm1EZXBzLnJlYWRGaWxlRnJvbVBhdGggPSBkZXBzLnJlYWRGaWxlRnJvbVBhdGg7XG4gICAgfVxuICAgIGlmIChkZXBzLmdldFJlcXVlc3RUb2tlbikge1xuICAgICAgICBleHBvcnRzLnBsYXRmb3JtRGVwcy5nZXRSZXF1ZXN0VG9rZW4gPSBkZXBzLmdldFJlcXVlc3RUb2tlbjtcbiAgICB9XG4gICAgaWYgKGRlcHMuZ2V0RGVmYXVsdEF1dGgpIHtcbiAgICAgICAgZXhwb3J0cy5wbGF0Zm9ybURlcHMuZ2V0RGVmYXVsdEF1dGggPSBkZXBzLmdldERlZmF1bHRBdXRoO1xuICAgIH1cbiAgICBpZiAoZGVwcy5idWlsZFBsYXRmb3JtRGVwZW5kZW50Q29uZmlnKSB7XG4gICAgICAgIGV4cG9ydHMucGxhdGZvcm1EZXBzLmJ1aWxkUGxhdGZvcm1EZXBlbmRlbnRDb25maWcgPVxuICAgICAgICAgICAgZGVwcy5idWlsZFBsYXRmb3JtRGVwZW5kZW50Q29uZmlnO1xuICAgIH1cbiAgICBpZiAoZGVwcy5idWlsZEhlYWRlcnMpIHtcbiAgICAgICAgZXhwb3J0cy5wbGF0Zm9ybURlcHMuYnVpbGRIZWFkZXJzID0gZGVwcy5idWlsZEhlYWRlcnM7XG4gICAgfVxuICAgIGlmIChkZXBzLmJ1aWxkRm9ybURhdGFWYWx1ZSkge1xuICAgICAgICBleHBvcnRzLnBsYXRmb3JtRGVwcy5idWlsZEZvcm1EYXRhVmFsdWUgPSBkZXBzLmJ1aWxkRm9ybURhdGFWYWx1ZTtcbiAgICB9XG4gICAgaWYgKGRlcHMuYnVpbGRCYXNlVXJsKSB7XG4gICAgICAgIGV4cG9ydHMucGxhdGZvcm1EZXBzLmJ1aWxkQmFzZVVybCA9IGRlcHMuYnVpbGRCYXNlVXJsO1xuICAgIH1cbiAgICBpZiAoZGVwcy5nZXRWZXJzaW9uKSB7XG4gICAgICAgIGV4cG9ydHMucGxhdGZvcm1EZXBzLmdldFZlcnNpb24gPSBkZXBzLmdldFZlcnNpb247XG4gICAgfVxufTtcbmV4cG9ydHMuaW5qZWN0UGxhdGZvcm1EZXBzID0gaW5qZWN0UGxhdGZvcm1EZXBzO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5VbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IgPSB2b2lkIDA7XG52YXIgVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yKHBsYXRmb3JtKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBtZXNzYWdlID0gXCJUaGlzIGZ1bmN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQgaW4gXCIuY29uY2F0KHBsYXRmb3JtLCBcIiBlbnZpcm9ubWVudFwiKTtcbiAgICAgICAgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlKSB8fCB0aGlzO1xuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9FcnJvciNDdXN0b21fRXJyb3JfVHlwZXNcbiAgICAgICAgLy8gTWFpbnRhaW5zIHByb3BlciBzdGFjayB0cmFjZSBmb3Igd2hlcmUgb3VyIGVycm9yIHdhcyB0aHJvd24gKG9ubHkgYXZhaWxhYmxlIG9uIFY4KVxuICAgICAgICBpZiAoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpIHtcbiAgICAgICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKF90aGlzLCBVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIF90aGlzLm5hbWUgPSBcIlVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvclwiO1xuICAgICAgICBfdGhpcy5wbGF0Zm9ybSA9IHBsYXRmb3JtO1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvd2lraS9CcmVha2luZy1DaGFuZ2VzI2V4dGVuZGluZy1idWlsdC1pbnMtbGlrZS1lcnJvci1hcnJheS1hbmQtbWFwLW1heS1uby1sb25nZXItd29ya1xuICAgICAgICAvLyBTZXQgdGhlIHByb3RvdHlwZSBleHBsaWNpdGx5LlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3RoaXMsIFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvci5wcm90b3R5cGUpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIHJldHVybiBVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3I7XG59KEVycm9yKSk7XG5leHBvcnRzLlVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvciA9IFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvci5qcy5tYXAiLCIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQHBhcmFtIHR5cGVNYXAgW09iamVjdF0gTWFwIG9mIE1JTUUgdHlwZSAtPiBBcnJheVtleHRlbnNpb25zXVxuICogQHBhcmFtIC4uLlxuICovXG5mdW5jdGlvbiBNaW1lKCkge1xuICB0aGlzLl90eXBlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHRoaXMuX2V4dGVuc2lvbnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdGhpcy5kZWZpbmUoYXJndW1lbnRzW2ldKTtcbiAgfVxuXG4gIHRoaXMuZGVmaW5lID0gdGhpcy5kZWZpbmUuYmluZCh0aGlzKTtcbiAgdGhpcy5nZXRUeXBlID0gdGhpcy5nZXRUeXBlLmJpbmQodGhpcyk7XG4gIHRoaXMuZ2V0RXh0ZW5zaW9uID0gdGhpcy5nZXRFeHRlbnNpb24uYmluZCh0aGlzKTtcbn1cblxuLyoqXG4gKiBEZWZpbmUgbWltZXR5cGUgLT4gZXh0ZW5zaW9uIG1hcHBpbmdzLiAgRWFjaCBrZXkgaXMgYSBtaW1lLXR5cGUgdGhhdCBtYXBzXG4gKiB0byBhbiBhcnJheSBvZiBleHRlbnNpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgdHlwZS4gIFRoZSBmaXJzdCBleHRlbnNpb24gaXNcbiAqIHVzZWQgYXMgdGhlIGRlZmF1bHQgZXh0ZW5zaW9uIGZvciB0aGUgdHlwZS5cbiAqXG4gKiBlLmcuIG1pbWUuZGVmaW5lKHsnYXVkaW8vb2dnJywgWydvZ2EnLCAnb2dnJywgJ3NweCddfSk7XG4gKlxuICogSWYgYSB0eXBlIGRlY2xhcmVzIGFuIGV4dGVuc2lvbiB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gZGVmaW5lZCwgYW4gZXJyb3Igd2lsbFxuICogYmUgdGhyb3duLiAgVG8gc3VwcHJlc3MgdGhpcyBlcnJvciBhbmQgZm9yY2UgdGhlIGV4dGVuc2lvbiB0byBiZSBhc3NvY2lhdGVkXG4gKiB3aXRoIHRoZSBuZXcgdHlwZSwgcGFzcyBgZm9yY2VgPXRydWUuICBBbHRlcm5hdGl2ZWx5LCB5b3UgbWF5IHByZWZpeCB0aGVcbiAqIGV4dGVuc2lvbiB3aXRoIFwiKlwiIHRvIG1hcCB0aGUgdHlwZSB0byBleHRlbnNpb24sIHdpdGhvdXQgbWFwcGluZyB0aGVcbiAqIGV4dGVuc2lvbiB0byB0aGUgdHlwZS5cbiAqXG4gKiBlLmcuIG1pbWUuZGVmaW5lKHsnYXVkaW8vd2F2JywgWyd3YXYnXX0sIHsnYXVkaW8veC13YXYnLCBbJyp3YXYnXX0pO1xuICpcbiAqXG4gKiBAcGFyYW0gbWFwIChPYmplY3QpIHR5cGUgZGVmaW5pdGlvbnNcbiAqIEBwYXJhbSBmb3JjZSAoQm9vbGVhbikgaWYgdHJ1ZSwgZm9yY2Ugb3ZlcnJpZGluZyBvZiBleGlzdGluZyBkZWZpbml0aW9uc1xuICovXG5NaW1lLnByb3RvdHlwZS5kZWZpbmUgPSBmdW5jdGlvbih0eXBlTWFwLCBmb3JjZSkge1xuICBmb3IgKGxldCB0eXBlIGluIHR5cGVNYXApIHtcbiAgICBsZXQgZXh0ZW5zaW9ucyA9IHR5cGVNYXBbdHlwZV0ubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0LnRvTG93ZXJDYXNlKCk7XG4gICAgfSk7XG4gICAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZXh0ZW5zaW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZXh0ID0gZXh0ZW5zaW9uc1tpXTtcblxuICAgICAgLy8gJyonIHByZWZpeCA9IG5vdCB0aGUgcHJlZmVycmVkIHR5cGUgZm9yIHRoaXMgZXh0ZW5zaW9uLiAgU28gZml4dXAgdGhlXG4gICAgICAvLyBleHRlbnNpb24sIGFuZCBza2lwIGl0LlxuICAgICAgaWYgKGV4dFswXSA9PT0gJyonKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWZvcmNlICYmIChleHQgaW4gdGhpcy5fdHlwZXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnQXR0ZW1wdCB0byBjaGFuZ2UgbWFwcGluZyBmb3IgXCInICsgZXh0ICtcbiAgICAgICAgICAnXCIgZXh0ZW5zaW9uIGZyb20gXCInICsgdGhpcy5fdHlwZXNbZXh0XSArICdcIiB0byBcIicgKyB0eXBlICtcbiAgICAgICAgICAnXCIuIFBhc3MgYGZvcmNlPXRydWVgIHRvIGFsbG93IHRoaXMsIG90aGVyd2lzZSByZW1vdmUgXCInICsgZXh0ICtcbiAgICAgICAgICAnXCIgZnJvbSB0aGUgbGlzdCBvZiBleHRlbnNpb25zIGZvciBcIicgKyB0eXBlICsgJ1wiLidcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fdHlwZXNbZXh0XSA9IHR5cGU7XG4gICAgfVxuXG4gICAgLy8gVXNlIGZpcnN0IGV4dGVuc2lvbiBhcyBkZWZhdWx0XG4gICAgaWYgKGZvcmNlIHx8ICF0aGlzLl9leHRlbnNpb25zW3R5cGVdKSB7XG4gICAgICBjb25zdCBleHQgPSBleHRlbnNpb25zWzBdO1xuICAgICAgdGhpcy5fZXh0ZW5zaW9uc1t0eXBlXSA9IChleHRbMF0gIT09ICcqJykgPyBleHQgOiBleHQuc3Vic3RyKDEpO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBMb29rdXAgYSBtaW1lIHR5cGUgYmFzZWQgb24gZXh0ZW5zaW9uXG4gKi9cbk1pbWUucHJvdG90eXBlLmdldFR5cGUgPSBmdW5jdGlvbihwYXRoKSB7XG4gIHBhdGggPSBTdHJpbmcocGF0aCk7XG4gIGxldCBsYXN0ID0gcGF0aC5yZXBsYWNlKC9eLipbL1xcXFxdLywgJycpLnRvTG93ZXJDYXNlKCk7XG4gIGxldCBleHQgPSBsYXN0LnJlcGxhY2UoL14uKlxcLi8sICcnKS50b0xvd2VyQ2FzZSgpO1xuXG4gIGxldCBoYXNQYXRoID0gbGFzdC5sZW5ndGggPCBwYXRoLmxlbmd0aDtcbiAgbGV0IGhhc0RvdCA9IGV4dC5sZW5ndGggPCBsYXN0Lmxlbmd0aCAtIDE7XG5cbiAgcmV0dXJuIChoYXNEb3QgfHwgIWhhc1BhdGgpICYmIHRoaXMuX3R5cGVzW2V4dF0gfHwgbnVsbDtcbn07XG5cbi8qKlxuICogUmV0dXJuIGZpbGUgZXh0ZW5zaW9uIGFzc29jaWF0ZWQgd2l0aCBhIG1pbWUgdHlwZVxuICovXG5NaW1lLnByb3RvdHlwZS5nZXRFeHRlbnNpb24gPSBmdW5jdGlvbih0eXBlKSB7XG4gIHR5cGUgPSAvXlxccyooW147XFxzXSopLy50ZXN0KHR5cGUpICYmIFJlZ0V4cC4kMTtcbiAgcmV0dXJuIHR5cGUgJiYgdGhpcy5fZXh0ZW5zaW9uc1t0eXBlLnRvTG93ZXJDYXNlKCldIHx8IG51bGw7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1pbWU7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHtcImFwcGxpY2F0aW9uL2FuZHJldy1pbnNldFwiOltcImV6XCJdLFwiYXBwbGljYXRpb24vYXBwbGl4d2FyZVwiOltcImF3XCJdLFwiYXBwbGljYXRpb24vYXRvbSt4bWxcIjpbXCJhdG9tXCJdLFwiYXBwbGljYXRpb24vYXRvbWNhdCt4bWxcIjpbXCJhdG9tY2F0XCJdLFwiYXBwbGljYXRpb24vYXRvbWRlbGV0ZWQreG1sXCI6W1wiYXRvbWRlbGV0ZWRcIl0sXCJhcHBsaWNhdGlvbi9hdG9tc3ZjK3htbFwiOltcImF0b21zdmNcIl0sXCJhcHBsaWNhdGlvbi9hdHNjLWR3ZCt4bWxcIjpbXCJkd2RcIl0sXCJhcHBsaWNhdGlvbi9hdHNjLWhlbGQreG1sXCI6W1wiaGVsZFwiXSxcImFwcGxpY2F0aW9uL2F0c2MtcnNhdCt4bWxcIjpbXCJyc2F0XCJdLFwiYXBwbGljYXRpb24vYmRvY1wiOltcImJkb2NcIl0sXCJhcHBsaWNhdGlvbi9jYWxlbmRhcit4bWxcIjpbXCJ4Y3NcIl0sXCJhcHBsaWNhdGlvbi9jY3htbCt4bWxcIjpbXCJjY3htbFwiXSxcImFwcGxpY2F0aW9uL2NkZngreG1sXCI6W1wiY2RmeFwiXSxcImFwcGxpY2F0aW9uL2NkbWktY2FwYWJpbGl0eVwiOltcImNkbWlhXCJdLFwiYXBwbGljYXRpb24vY2RtaS1jb250YWluZXJcIjpbXCJjZG1pY1wiXSxcImFwcGxpY2F0aW9uL2NkbWktZG9tYWluXCI6W1wiY2RtaWRcIl0sXCJhcHBsaWNhdGlvbi9jZG1pLW9iamVjdFwiOltcImNkbWlvXCJdLFwiYXBwbGljYXRpb24vY2RtaS1xdWV1ZVwiOltcImNkbWlxXCJdLFwiYXBwbGljYXRpb24vY3Utc2VlbWVcIjpbXCJjdVwiXSxcImFwcGxpY2F0aW9uL2Rhc2greG1sXCI6W1wibXBkXCJdLFwiYXBwbGljYXRpb24vZGF2bW91bnQreG1sXCI6W1wiZGF2bW91bnRcIl0sXCJhcHBsaWNhdGlvbi9kb2Nib29rK3htbFwiOltcImRia1wiXSxcImFwcGxpY2F0aW9uL2Rzc2MrZGVyXCI6W1wiZHNzY1wiXSxcImFwcGxpY2F0aW9uL2Rzc2MreG1sXCI6W1wieGRzc2NcIl0sXCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0XCI6W1wiZXNcIixcImVjbWFcIl0sXCJhcHBsaWNhdGlvbi9lbW1hK3htbFwiOltcImVtbWFcIl0sXCJhcHBsaWNhdGlvbi9lbW90aW9ubWwreG1sXCI6W1wiZW1vdGlvbm1sXCJdLFwiYXBwbGljYXRpb24vZXB1Yit6aXBcIjpbXCJlcHViXCJdLFwiYXBwbGljYXRpb24vZXhpXCI6W1wiZXhpXCJdLFwiYXBwbGljYXRpb24vZXhwcmVzc1wiOltcImV4cFwiXSxcImFwcGxpY2F0aW9uL2ZkdCt4bWxcIjpbXCJmZHRcIl0sXCJhcHBsaWNhdGlvbi9mb250LXRkcGZyXCI6W1wicGZyXCJdLFwiYXBwbGljYXRpb24vZ2VvK2pzb25cIjpbXCJnZW9qc29uXCJdLFwiYXBwbGljYXRpb24vZ21sK3htbFwiOltcImdtbFwiXSxcImFwcGxpY2F0aW9uL2dweCt4bWxcIjpbXCJncHhcIl0sXCJhcHBsaWNhdGlvbi9neGZcIjpbXCJneGZcIl0sXCJhcHBsaWNhdGlvbi9nemlwXCI6W1wiZ3pcIl0sXCJhcHBsaWNhdGlvbi9oanNvblwiOltcImhqc29uXCJdLFwiYXBwbGljYXRpb24vaHlwZXJzdHVkaW9cIjpbXCJzdGtcIl0sXCJhcHBsaWNhdGlvbi9pbmttbCt4bWxcIjpbXCJpbmtcIixcImlua21sXCJdLFwiYXBwbGljYXRpb24vaXBmaXhcIjpbXCJpcGZpeFwiXSxcImFwcGxpY2F0aW9uL2l0cyt4bWxcIjpbXCJpdHNcIl0sXCJhcHBsaWNhdGlvbi9qYXZhLWFyY2hpdmVcIjpbXCJqYXJcIixcIndhclwiLFwiZWFyXCJdLFwiYXBwbGljYXRpb24vamF2YS1zZXJpYWxpemVkLW9iamVjdFwiOltcInNlclwiXSxcImFwcGxpY2F0aW9uL2phdmEtdm1cIjpbXCJjbGFzc1wiXSxcImFwcGxpY2F0aW9uL2phdmFzY3JpcHRcIjpbXCJqc1wiLFwibWpzXCJdLFwiYXBwbGljYXRpb24vanNvblwiOltcImpzb25cIixcIm1hcFwiXSxcImFwcGxpY2F0aW9uL2pzb241XCI6W1wianNvbjVcIl0sXCJhcHBsaWNhdGlvbi9qc29ubWwranNvblwiOltcImpzb25tbFwiXSxcImFwcGxpY2F0aW9uL2xkK2pzb25cIjpbXCJqc29ubGRcIl0sXCJhcHBsaWNhdGlvbi9sZ3IreG1sXCI6W1wibGdyXCJdLFwiYXBwbGljYXRpb24vbG9zdCt4bWxcIjpbXCJsb3N0eG1sXCJdLFwiYXBwbGljYXRpb24vbWFjLWJpbmhleDQwXCI6W1wiaHF4XCJdLFwiYXBwbGljYXRpb24vbWFjLWNvbXBhY3Rwcm9cIjpbXCJjcHRcIl0sXCJhcHBsaWNhdGlvbi9tYWRzK3htbFwiOltcIm1hZHNcIl0sXCJhcHBsaWNhdGlvbi9tYW5pZmVzdCtqc29uXCI6W1wid2VibWFuaWZlc3RcIl0sXCJhcHBsaWNhdGlvbi9tYXJjXCI6W1wibXJjXCJdLFwiYXBwbGljYXRpb24vbWFyY3htbCt4bWxcIjpbXCJtcmN4XCJdLFwiYXBwbGljYXRpb24vbWF0aGVtYXRpY2FcIjpbXCJtYVwiLFwibmJcIixcIm1iXCJdLFwiYXBwbGljYXRpb24vbWF0aG1sK3htbFwiOltcIm1hdGhtbFwiXSxcImFwcGxpY2F0aW9uL21ib3hcIjpbXCJtYm94XCJdLFwiYXBwbGljYXRpb24vbWVkaWFzZXJ2ZXJjb250cm9sK3htbFwiOltcIm1zY21sXCJdLFwiYXBwbGljYXRpb24vbWV0YWxpbmsreG1sXCI6W1wibWV0YWxpbmtcIl0sXCJhcHBsaWNhdGlvbi9tZXRhbGluazQreG1sXCI6W1wibWV0YTRcIl0sXCJhcHBsaWNhdGlvbi9tZXRzK3htbFwiOltcIm1ldHNcIl0sXCJhcHBsaWNhdGlvbi9tbXQtYWVpK3htbFwiOltcIm1hZWlcIl0sXCJhcHBsaWNhdGlvbi9tbXQtdXNkK3htbFwiOltcIm11c2RcIl0sXCJhcHBsaWNhdGlvbi9tb2RzK3htbFwiOltcIm1vZHNcIl0sXCJhcHBsaWNhdGlvbi9tcDIxXCI6W1wibTIxXCIsXCJtcDIxXCJdLFwiYXBwbGljYXRpb24vbXA0XCI6W1wibXA0c1wiLFwibTRwXCJdLFwiYXBwbGljYXRpb24vbXN3b3JkXCI6W1wiZG9jXCIsXCJkb3RcIl0sXCJhcHBsaWNhdGlvbi9teGZcIjpbXCJteGZcIl0sXCJhcHBsaWNhdGlvbi9uLXF1YWRzXCI6W1wibnFcIl0sXCJhcHBsaWNhdGlvbi9uLXRyaXBsZXNcIjpbXCJudFwiXSxcImFwcGxpY2F0aW9uL25vZGVcIjpbXCJjanNcIl0sXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIjpbXCJiaW5cIixcImRtc1wiLFwibHJmXCIsXCJtYXJcIixcInNvXCIsXCJkaXN0XCIsXCJkaXN0elwiLFwicGtnXCIsXCJicGtcIixcImR1bXBcIixcImVsY1wiLFwiZGVwbG95XCIsXCJleGVcIixcImRsbFwiLFwiZGViXCIsXCJkbWdcIixcImlzb1wiLFwiaW1nXCIsXCJtc2lcIixcIm1zcFwiLFwibXNtXCIsXCJidWZmZXJcIl0sXCJhcHBsaWNhdGlvbi9vZGFcIjpbXCJvZGFcIl0sXCJhcHBsaWNhdGlvbi9vZWJwcy1wYWNrYWdlK3htbFwiOltcIm9wZlwiXSxcImFwcGxpY2F0aW9uL29nZ1wiOltcIm9neFwiXSxcImFwcGxpY2F0aW9uL29tZG9jK3htbFwiOltcIm9tZG9jXCJdLFwiYXBwbGljYXRpb24vb25lbm90ZVwiOltcIm9uZXRvY1wiLFwib25ldG9jMlwiLFwib25ldG1wXCIsXCJvbmVwa2dcIl0sXCJhcHBsaWNhdGlvbi9veHBzXCI6W1wib3hwc1wiXSxcImFwcGxpY2F0aW9uL3AycC1vdmVybGF5K3htbFwiOltcInJlbG9cIl0sXCJhcHBsaWNhdGlvbi9wYXRjaC1vcHMtZXJyb3IreG1sXCI6W1wieGVyXCJdLFwiYXBwbGljYXRpb24vcGRmXCI6W1wicGRmXCJdLFwiYXBwbGljYXRpb24vcGdwLWVuY3J5cHRlZFwiOltcInBncFwiXSxcImFwcGxpY2F0aW9uL3BncC1zaWduYXR1cmVcIjpbXCJhc2NcIixcInNpZ1wiXSxcImFwcGxpY2F0aW9uL3BpY3MtcnVsZXNcIjpbXCJwcmZcIl0sXCJhcHBsaWNhdGlvbi9wa2NzMTBcIjpbXCJwMTBcIl0sXCJhcHBsaWNhdGlvbi9wa2NzNy1taW1lXCI6W1wicDdtXCIsXCJwN2NcIl0sXCJhcHBsaWNhdGlvbi9wa2NzNy1zaWduYXR1cmVcIjpbXCJwN3NcIl0sXCJhcHBsaWNhdGlvbi9wa2NzOFwiOltcInA4XCJdLFwiYXBwbGljYXRpb24vcGtpeC1hdHRyLWNlcnRcIjpbXCJhY1wiXSxcImFwcGxpY2F0aW9uL3BraXgtY2VydFwiOltcImNlclwiXSxcImFwcGxpY2F0aW9uL3BraXgtY3JsXCI6W1wiY3JsXCJdLFwiYXBwbGljYXRpb24vcGtpeC1wa2lwYXRoXCI6W1wicGtpcGF0aFwiXSxcImFwcGxpY2F0aW9uL3BraXhjbXBcIjpbXCJwa2lcIl0sXCJhcHBsaWNhdGlvbi9wbHMreG1sXCI6W1wicGxzXCJdLFwiYXBwbGljYXRpb24vcG9zdHNjcmlwdFwiOltcImFpXCIsXCJlcHNcIixcInBzXCJdLFwiYXBwbGljYXRpb24vcHJvdmVuYW5jZSt4bWxcIjpbXCJwcm92eFwiXSxcImFwcGxpY2F0aW9uL3Bza2MreG1sXCI6W1wicHNrY3htbFwiXSxcImFwcGxpY2F0aW9uL3JhbWwreWFtbFwiOltcInJhbWxcIl0sXCJhcHBsaWNhdGlvbi9yZGYreG1sXCI6W1wicmRmXCIsXCJvd2xcIl0sXCJhcHBsaWNhdGlvbi9yZWdpbmZvK3htbFwiOltcInJpZlwiXSxcImFwcGxpY2F0aW9uL3JlbGF4LW5nLWNvbXBhY3Qtc3ludGF4XCI6W1wicm5jXCJdLFwiYXBwbGljYXRpb24vcmVzb3VyY2UtbGlzdHMreG1sXCI6W1wicmxcIl0sXCJhcHBsaWNhdGlvbi9yZXNvdXJjZS1saXN0cy1kaWZmK3htbFwiOltcInJsZFwiXSxcImFwcGxpY2F0aW9uL3Jscy1zZXJ2aWNlcyt4bWxcIjpbXCJyc1wiXSxcImFwcGxpY2F0aW9uL3JvdXRlLWFwZCt4bWxcIjpbXCJyYXBkXCJdLFwiYXBwbGljYXRpb24vcm91dGUtcy10c2lkK3htbFwiOltcInNsc1wiXSxcImFwcGxpY2F0aW9uL3JvdXRlLXVzZCt4bWxcIjpbXCJydXNkXCJdLFwiYXBwbGljYXRpb24vcnBraS1naG9zdGJ1c3RlcnNcIjpbXCJnYnJcIl0sXCJhcHBsaWNhdGlvbi9ycGtpLW1hbmlmZXN0XCI6W1wibWZ0XCJdLFwiYXBwbGljYXRpb24vcnBraS1yb2FcIjpbXCJyb2FcIl0sXCJhcHBsaWNhdGlvbi9yc2QreG1sXCI6W1wicnNkXCJdLFwiYXBwbGljYXRpb24vcnNzK3htbFwiOltcInJzc1wiXSxcImFwcGxpY2F0aW9uL3J0ZlwiOltcInJ0ZlwiXSxcImFwcGxpY2F0aW9uL3NibWwreG1sXCI6W1wic2JtbFwiXSxcImFwcGxpY2F0aW9uL3NjdnAtY3YtcmVxdWVzdFwiOltcInNjcVwiXSxcImFwcGxpY2F0aW9uL3NjdnAtY3YtcmVzcG9uc2VcIjpbXCJzY3NcIl0sXCJhcHBsaWNhdGlvbi9zY3ZwLXZwLXJlcXVlc3RcIjpbXCJzcHFcIl0sXCJhcHBsaWNhdGlvbi9zY3ZwLXZwLXJlc3BvbnNlXCI6W1wic3BwXCJdLFwiYXBwbGljYXRpb24vc2RwXCI6W1wic2RwXCJdLFwiYXBwbGljYXRpb24vc2VubWwreG1sXCI6W1wic2VubWx4XCJdLFwiYXBwbGljYXRpb24vc2Vuc21sK3htbFwiOltcInNlbnNtbHhcIl0sXCJhcHBsaWNhdGlvbi9zZXQtcGF5bWVudC1pbml0aWF0aW9uXCI6W1wic2V0cGF5XCJdLFwiYXBwbGljYXRpb24vc2V0LXJlZ2lzdHJhdGlvbi1pbml0aWF0aW9uXCI6W1wic2V0cmVnXCJdLFwiYXBwbGljYXRpb24vc2hmK3htbFwiOltcInNoZlwiXSxcImFwcGxpY2F0aW9uL3NpZXZlXCI6W1wic2l2XCIsXCJzaWV2ZVwiXSxcImFwcGxpY2F0aW9uL3NtaWwreG1sXCI6W1wic21pXCIsXCJzbWlsXCJdLFwiYXBwbGljYXRpb24vc3BhcnFsLXF1ZXJ5XCI6W1wicnFcIl0sXCJhcHBsaWNhdGlvbi9zcGFycWwtcmVzdWx0cyt4bWxcIjpbXCJzcnhcIl0sXCJhcHBsaWNhdGlvbi9zcmdzXCI6W1wiZ3JhbVwiXSxcImFwcGxpY2F0aW9uL3NyZ3MreG1sXCI6W1wiZ3J4bWxcIl0sXCJhcHBsaWNhdGlvbi9zcnUreG1sXCI6W1wic3J1XCJdLFwiYXBwbGljYXRpb24vc3NkbCt4bWxcIjpbXCJzc2RsXCJdLFwiYXBwbGljYXRpb24vc3NtbCt4bWxcIjpbXCJzc21sXCJdLFwiYXBwbGljYXRpb24vc3dpZCt4bWxcIjpbXCJzd2lkdGFnXCJdLFwiYXBwbGljYXRpb24vdGVpK3htbFwiOltcInRlaVwiLFwidGVpY29ycHVzXCJdLFwiYXBwbGljYXRpb24vdGhyYXVkK3htbFwiOltcInRmaVwiXSxcImFwcGxpY2F0aW9uL3RpbWVzdGFtcGVkLWRhdGFcIjpbXCJ0c2RcIl0sXCJhcHBsaWNhdGlvbi90b21sXCI6W1widG9tbFwiXSxcImFwcGxpY2F0aW9uL3RyaWdcIjpbXCJ0cmlnXCJdLFwiYXBwbGljYXRpb24vdHRtbCt4bWxcIjpbXCJ0dG1sXCJdLFwiYXBwbGljYXRpb24vdWJqc29uXCI6W1widWJqXCJdLFwiYXBwbGljYXRpb24vdXJjLXJlc3NoZWV0K3htbFwiOltcInJzaGVldFwiXSxcImFwcGxpY2F0aW9uL3VyYy10YXJnZXRkZXNjK3htbFwiOltcInRkXCJdLFwiYXBwbGljYXRpb24vdm9pY2V4bWwreG1sXCI6W1widnhtbFwiXSxcImFwcGxpY2F0aW9uL3dhc21cIjpbXCJ3YXNtXCJdLFwiYXBwbGljYXRpb24vd2lkZ2V0XCI6W1wid2d0XCJdLFwiYXBwbGljYXRpb24vd2luaGxwXCI6W1wiaGxwXCJdLFwiYXBwbGljYXRpb24vd3NkbCt4bWxcIjpbXCJ3c2RsXCJdLFwiYXBwbGljYXRpb24vd3Nwb2xpY3kreG1sXCI6W1wid3Nwb2xpY3lcIl0sXCJhcHBsaWNhdGlvbi94YW1sK3htbFwiOltcInhhbWxcIl0sXCJhcHBsaWNhdGlvbi94Y2FwLWF0dCt4bWxcIjpbXCJ4YXZcIl0sXCJhcHBsaWNhdGlvbi94Y2FwLWNhcHMreG1sXCI6W1wieGNhXCJdLFwiYXBwbGljYXRpb24veGNhcC1kaWZmK3htbFwiOltcInhkZlwiXSxcImFwcGxpY2F0aW9uL3hjYXAtZWwreG1sXCI6W1wieGVsXCJdLFwiYXBwbGljYXRpb24veGNhcC1ucyt4bWxcIjpbXCJ4bnNcIl0sXCJhcHBsaWNhdGlvbi94ZW5jK3htbFwiOltcInhlbmNcIl0sXCJhcHBsaWNhdGlvbi94aHRtbCt4bWxcIjpbXCJ4aHRtbFwiLFwieGh0XCJdLFwiYXBwbGljYXRpb24veGxpZmYreG1sXCI6W1wieGxmXCJdLFwiYXBwbGljYXRpb24veG1sXCI6W1wieG1sXCIsXCJ4c2xcIixcInhzZFwiLFwicm5nXCJdLFwiYXBwbGljYXRpb24veG1sLWR0ZFwiOltcImR0ZFwiXSxcImFwcGxpY2F0aW9uL3hvcCt4bWxcIjpbXCJ4b3BcIl0sXCJhcHBsaWNhdGlvbi94cHJvYyt4bWxcIjpbXCJ4cGxcIl0sXCJhcHBsaWNhdGlvbi94c2x0K3htbFwiOltcIip4c2xcIixcInhzbHRcIl0sXCJhcHBsaWNhdGlvbi94c3BmK3htbFwiOltcInhzcGZcIl0sXCJhcHBsaWNhdGlvbi94dit4bWxcIjpbXCJteG1sXCIsXCJ4aHZtbFwiLFwieHZtbFwiLFwieHZtXCJdLFwiYXBwbGljYXRpb24veWFuZ1wiOltcInlhbmdcIl0sXCJhcHBsaWNhdGlvbi95aW4reG1sXCI6W1wieWluXCJdLFwiYXBwbGljYXRpb24vemlwXCI6W1wiemlwXCJdLFwiYXVkaW8vM2dwcFwiOltcIiozZ3BwXCJdLFwiYXVkaW8vYWRwY21cIjpbXCJhZHBcIl0sXCJhdWRpby9hbXJcIjpbXCJhbXJcIl0sXCJhdWRpby9iYXNpY1wiOltcImF1XCIsXCJzbmRcIl0sXCJhdWRpby9taWRpXCI6W1wibWlkXCIsXCJtaWRpXCIsXCJrYXJcIixcInJtaVwiXSxcImF1ZGlvL21vYmlsZS14bWZcIjpbXCJteG1mXCJdLFwiYXVkaW8vbXAzXCI6W1wiKm1wM1wiXSxcImF1ZGlvL21wNFwiOltcIm00YVwiLFwibXA0YVwiXSxcImF1ZGlvL21wZWdcIjpbXCJtcGdhXCIsXCJtcDJcIixcIm1wMmFcIixcIm1wM1wiLFwibTJhXCIsXCJtM2FcIl0sXCJhdWRpby9vZ2dcIjpbXCJvZ2FcIixcIm9nZ1wiLFwic3B4XCIsXCJvcHVzXCJdLFwiYXVkaW8vczNtXCI6W1wiczNtXCJdLFwiYXVkaW8vc2lsa1wiOltcInNpbFwiXSxcImF1ZGlvL3dhdlwiOltcIndhdlwiXSxcImF1ZGlvL3dhdmVcIjpbXCIqd2F2XCJdLFwiYXVkaW8vd2VibVwiOltcIndlYmFcIl0sXCJhdWRpby94bVwiOltcInhtXCJdLFwiZm9udC9jb2xsZWN0aW9uXCI6W1widHRjXCJdLFwiZm9udC9vdGZcIjpbXCJvdGZcIl0sXCJmb250L3R0ZlwiOltcInR0ZlwiXSxcImZvbnQvd29mZlwiOltcIndvZmZcIl0sXCJmb250L3dvZmYyXCI6W1wid29mZjJcIl0sXCJpbWFnZS9hY2VzXCI6W1wiZXhyXCJdLFwiaW1hZ2UvYXBuZ1wiOltcImFwbmdcIl0sXCJpbWFnZS9hdmlmXCI6W1wiYXZpZlwiXSxcImltYWdlL2JtcFwiOltcImJtcFwiXSxcImltYWdlL2NnbVwiOltcImNnbVwiXSxcImltYWdlL2RpY29tLXJsZVwiOltcImRybGVcIl0sXCJpbWFnZS9lbWZcIjpbXCJlbWZcIl0sXCJpbWFnZS9maXRzXCI6W1wiZml0c1wiXSxcImltYWdlL2czZmF4XCI6W1wiZzNcIl0sXCJpbWFnZS9naWZcIjpbXCJnaWZcIl0sXCJpbWFnZS9oZWljXCI6W1wiaGVpY1wiXSxcImltYWdlL2hlaWMtc2VxdWVuY2VcIjpbXCJoZWljc1wiXSxcImltYWdlL2hlaWZcIjpbXCJoZWlmXCJdLFwiaW1hZ2UvaGVpZi1zZXF1ZW5jZVwiOltcImhlaWZzXCJdLFwiaW1hZ2UvaGVqMmtcIjpbXCJoZWoyXCJdLFwiaW1hZ2UvaHNqMlwiOltcImhzajJcIl0sXCJpbWFnZS9pZWZcIjpbXCJpZWZcIl0sXCJpbWFnZS9qbHNcIjpbXCJqbHNcIl0sXCJpbWFnZS9qcDJcIjpbXCJqcDJcIixcImpwZzJcIl0sXCJpbWFnZS9qcGVnXCI6W1wianBlZ1wiLFwianBnXCIsXCJqcGVcIl0sXCJpbWFnZS9qcGhcIjpbXCJqcGhcIl0sXCJpbWFnZS9qcGhjXCI6W1wiamhjXCJdLFwiaW1hZ2UvanBtXCI6W1wianBtXCJdLFwiaW1hZ2UvanB4XCI6W1wianB4XCIsXCJqcGZcIl0sXCJpbWFnZS9qeHJcIjpbXCJqeHJcIl0sXCJpbWFnZS9qeHJhXCI6W1wianhyYVwiXSxcImltYWdlL2p4cnNcIjpbXCJqeHJzXCJdLFwiaW1hZ2UvanhzXCI6W1wianhzXCJdLFwiaW1hZ2UvanhzY1wiOltcImp4c2NcIl0sXCJpbWFnZS9qeHNpXCI6W1wianhzaVwiXSxcImltYWdlL2p4c3NcIjpbXCJqeHNzXCJdLFwiaW1hZ2Uva3R4XCI6W1wia3R4XCJdLFwiaW1hZ2Uva3R4MlwiOltcImt0eDJcIl0sXCJpbWFnZS9wbmdcIjpbXCJwbmdcIl0sXCJpbWFnZS9zZ2lcIjpbXCJzZ2lcIl0sXCJpbWFnZS9zdmcreG1sXCI6W1wic3ZnXCIsXCJzdmd6XCJdLFwiaW1hZ2UvdDM4XCI6W1widDM4XCJdLFwiaW1hZ2UvdGlmZlwiOltcInRpZlwiLFwidGlmZlwiXSxcImltYWdlL3RpZmYtZnhcIjpbXCJ0ZnhcIl0sXCJpbWFnZS93ZWJwXCI6W1wid2VicFwiXSxcImltYWdlL3dtZlwiOltcIndtZlwiXSxcIm1lc3NhZ2UvZGlzcG9zaXRpb24tbm90aWZpY2F0aW9uXCI6W1wiZGlzcG9zaXRpb24tbm90aWZpY2F0aW9uXCJdLFwibWVzc2FnZS9nbG9iYWxcIjpbXCJ1OG1zZ1wiXSxcIm1lc3NhZ2UvZ2xvYmFsLWRlbGl2ZXJ5LXN0YXR1c1wiOltcInU4ZHNuXCJdLFwibWVzc2FnZS9nbG9iYWwtZGlzcG9zaXRpb24tbm90aWZpY2F0aW9uXCI6W1widThtZG5cIl0sXCJtZXNzYWdlL2dsb2JhbC1oZWFkZXJzXCI6W1widThoZHJcIl0sXCJtZXNzYWdlL3JmYzgyMlwiOltcImVtbFwiLFwibWltZVwiXSxcIm1vZGVsLzNtZlwiOltcIjNtZlwiXSxcIm1vZGVsL2dsdGYranNvblwiOltcImdsdGZcIl0sXCJtb2RlbC9nbHRmLWJpbmFyeVwiOltcImdsYlwiXSxcIm1vZGVsL2lnZXNcIjpbXCJpZ3NcIixcImlnZXNcIl0sXCJtb2RlbC9tZXNoXCI6W1wibXNoXCIsXCJtZXNoXCIsXCJzaWxvXCJdLFwibW9kZWwvbXRsXCI6W1wibXRsXCJdLFwibW9kZWwvb2JqXCI6W1wib2JqXCJdLFwibW9kZWwvc3RlcCt4bWxcIjpbXCJzdHB4XCJdLFwibW9kZWwvc3RlcCt6aXBcIjpbXCJzdHB6XCJdLFwibW9kZWwvc3RlcC14bWwremlwXCI6W1wic3RweHpcIl0sXCJtb2RlbC9zdGxcIjpbXCJzdGxcIl0sXCJtb2RlbC92cm1sXCI6W1wid3JsXCIsXCJ2cm1sXCJdLFwibW9kZWwveDNkK2JpbmFyeVwiOltcIip4M2RiXCIsXCJ4M2RielwiXSxcIm1vZGVsL3gzZCtmYXN0aW5mb3NldFwiOltcIngzZGJcIl0sXCJtb2RlbC94M2QrdnJtbFwiOltcIip4M2R2XCIsXCJ4M2R2elwiXSxcIm1vZGVsL3gzZCt4bWxcIjpbXCJ4M2RcIixcIngzZHpcIl0sXCJtb2RlbC94M2QtdnJtbFwiOltcIngzZHZcIl0sXCJ0ZXh0L2NhY2hlLW1hbmlmZXN0XCI6W1wiYXBwY2FjaGVcIixcIm1hbmlmZXN0XCJdLFwidGV4dC9jYWxlbmRhclwiOltcImljc1wiLFwiaWZiXCJdLFwidGV4dC9jb2ZmZWVzY3JpcHRcIjpbXCJjb2ZmZWVcIixcImxpdGNvZmZlZVwiXSxcInRleHQvY3NzXCI6W1wiY3NzXCJdLFwidGV4dC9jc3ZcIjpbXCJjc3ZcIl0sXCJ0ZXh0L2h0bWxcIjpbXCJodG1sXCIsXCJodG1cIixcInNodG1sXCJdLFwidGV4dC9qYWRlXCI6W1wiamFkZVwiXSxcInRleHQvanN4XCI6W1wianN4XCJdLFwidGV4dC9sZXNzXCI6W1wibGVzc1wiXSxcInRleHQvbWFya2Rvd25cIjpbXCJtYXJrZG93blwiLFwibWRcIl0sXCJ0ZXh0L21hdGhtbFwiOltcIm1tbFwiXSxcInRleHQvbWR4XCI6W1wibWR4XCJdLFwidGV4dC9uM1wiOltcIm4zXCJdLFwidGV4dC9wbGFpblwiOltcInR4dFwiLFwidGV4dFwiLFwiY29uZlwiLFwiZGVmXCIsXCJsaXN0XCIsXCJsb2dcIixcImluXCIsXCJpbmlcIl0sXCJ0ZXh0L3JpY2h0ZXh0XCI6W1wicnR4XCJdLFwidGV4dC9ydGZcIjpbXCIqcnRmXCJdLFwidGV4dC9zZ21sXCI6W1wic2dtbFwiLFwic2dtXCJdLFwidGV4dC9zaGV4XCI6W1wic2hleFwiXSxcInRleHQvc2xpbVwiOltcInNsaW1cIixcInNsbVwiXSxcInRleHQvc3BkeFwiOltcInNwZHhcIl0sXCJ0ZXh0L3N0eWx1c1wiOltcInN0eWx1c1wiLFwic3R5bFwiXSxcInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXNcIjpbXCJ0c3ZcIl0sXCJ0ZXh0L3Ryb2ZmXCI6W1widFwiLFwidHJcIixcInJvZmZcIixcIm1hblwiLFwibWVcIixcIm1zXCJdLFwidGV4dC90dXJ0bGVcIjpbXCJ0dGxcIl0sXCJ0ZXh0L3VyaS1saXN0XCI6W1widXJpXCIsXCJ1cmlzXCIsXCJ1cmxzXCJdLFwidGV4dC92Y2FyZFwiOltcInZjYXJkXCJdLFwidGV4dC92dHRcIjpbXCJ2dHRcIl0sXCJ0ZXh0L3htbFwiOltcIip4bWxcIl0sXCJ0ZXh0L3lhbWxcIjpbXCJ5YW1sXCIsXCJ5bWxcIl0sXCJ2aWRlby8zZ3BwXCI6W1wiM2dwXCIsXCIzZ3BwXCJdLFwidmlkZW8vM2dwcDJcIjpbXCIzZzJcIl0sXCJ2aWRlby9oMjYxXCI6W1wiaDI2MVwiXSxcInZpZGVvL2gyNjNcIjpbXCJoMjYzXCJdLFwidmlkZW8vaDI2NFwiOltcImgyNjRcIl0sXCJ2aWRlby9pc28uc2VnbWVudFwiOltcIm00c1wiXSxcInZpZGVvL2pwZWdcIjpbXCJqcGd2XCJdLFwidmlkZW8vanBtXCI6W1wiKmpwbVwiLFwianBnbVwiXSxcInZpZGVvL21qMlwiOltcIm1qMlwiLFwibWpwMlwiXSxcInZpZGVvL21wMnRcIjpbXCJ0c1wiXSxcInZpZGVvL21wNFwiOltcIm1wNFwiLFwibXA0dlwiLFwibXBnNFwiXSxcInZpZGVvL21wZWdcIjpbXCJtcGVnXCIsXCJtcGdcIixcIm1wZVwiLFwibTF2XCIsXCJtMnZcIl0sXCJ2aWRlby9vZ2dcIjpbXCJvZ3ZcIl0sXCJ2aWRlby9xdWlja3RpbWVcIjpbXCJxdFwiLFwibW92XCJdLFwidmlkZW8vd2VibVwiOltcIndlYm1cIl19OyIsIid1c2Ugc3RyaWN0JztcblxubGV0IE1pbWUgPSByZXF1aXJlKCcuL01pbWUnKTtcbm1vZHVsZS5leHBvcnRzID0gbmV3IE1pbWUocmVxdWlyZSgnLi90eXBlcy9zdGFuZGFyZCcpKTtcbiIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRWZXJzaW9uID0gZXhwb3J0cy5idWlsZEJhc2VVcmwgPSBleHBvcnRzLmJ1aWxkRm9ybURhdGFWYWx1ZSA9IGV4cG9ydHMuYnVpbGRIZWFkZXJzID0gZXhwb3J0cy5idWlsZFBsYXRmb3JtRGVwZW5kZW50Q29uZmlnID0gZXhwb3J0cy5nZXREZWZhdWx0QXV0aCA9IGV4cG9ydHMuZ2V0UmVxdWVzdFRva2VuID0gZXhwb3J0cy5yZWFkRmlsZUZyb21QYXRoID0gdm9pZCAwO1xudmFyIFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcl8xID0gcmVxdWlyZShcIi4vVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yXCIpO1xudmFyIGxpdGVfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwibWltZS9saXRlXCIpKTtcbnZhciBwYWNrYWdlX2pzb25fMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiLi4vLi4vcGFja2FnZS5qc29uXCIpKTtcbnZhciByZWFkRmlsZUZyb21QYXRoID0gZnVuY3Rpb24gKGZpbGVQYXRoKSB7XG4gICAgdGhyb3cgbmV3IFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcl8xLlVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcihcIkJyb3dzZXJcIik7XG59O1xuZXhwb3J0cy5yZWFkRmlsZUZyb21QYXRoID0gcmVhZEZpbGVGcm9tUGF0aDtcbnZhciBnZXRSZXF1ZXN0VG9rZW4gPSBmdW5jdGlvbiAoKSB7IHJldHVybiBfX2F3YWl0ZXIodm9pZCAwLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xuICAgICAgICBpZiAodHlwZW9mIGtpbnRvbmUgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGtpbnRvbmUgIT09IG51bGwgJiZcbiAgICAgICAgICAgIHR5cGVvZiBraW50b25lLmdldFJlcXVlc3RUb2tlbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywga2ludG9uZS5nZXRSZXF1ZXN0VG9rZW4oKV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBnYXJvb24gPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIGdhcm9vbiAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgdHlwZW9mICgoX2IgPSAoX2EgPSBnYXJvb24uY29ubmVjdCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmtpbnRvbmUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5nZXRSZXF1ZXN0VG9rZW4pID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBnYXJvb24uY29ubmVjdC5raW50b25lLmdldFJlcXVlc3RUb2tlbigpXTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJzZXNzaW9uIGF1dGhlbnRpY2F0aW9uIG11c3Qgc3BlY2lmeSBhIHJlcXVlc3QgdG9rZW5cIik7XG4gICAgfSk7XG59KTsgfTtcbmV4cG9ydHMuZ2V0UmVxdWVzdFRva2VuID0gZ2V0UmVxdWVzdFRva2VuO1xudmFyIGdldERlZmF1bHRBdXRoID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwic2Vzc2lvblwiLFxuICAgIH07XG59O1xuZXhwb3J0cy5nZXREZWZhdWx0QXV0aCA9IGdldERlZmF1bHRBdXRoO1xudmFyIGJ1aWxkUGxhdGZvcm1EZXBlbmRlbnRDb25maWcgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHt9O1xufTtcbmV4cG9ydHMuYnVpbGRQbGF0Zm9ybURlcGVuZGVudENvbmZpZyA9IGJ1aWxkUGxhdGZvcm1EZXBlbmRlbnRDb25maWc7XG52YXIgYnVpbGRIZWFkZXJzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7fTtcbn07XG5leHBvcnRzLmJ1aWxkSGVhZGVycyA9IGJ1aWxkSGVhZGVycztcbnZhciBidWlsZEZvcm1EYXRhVmFsdWUgPSBmdW5jdGlvbiAoZGF0YSwgZmlsZU5hbWUpIHtcbiAgICB2YXIgb3B0aW9ucyA9IHt9O1xuICAgIGlmIChmaWxlTmFtZSkge1xuICAgICAgICBvcHRpb25zLnR5cGUgPSBsaXRlXzEuZGVmYXVsdC5nZXRUeXBlKGZpbGVOYW1lKSB8fCB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQmxvYihbZGF0YV0sIG9wdGlvbnMpO1xufTtcbmV4cG9ydHMuYnVpbGRGb3JtRGF0YVZhbHVlID0gYnVpbGRGb3JtRGF0YVZhbHVlO1xudmFyIGJ1aWxkQmFzZVVybCA9IGZ1bmN0aW9uIChiYXNlVXJsKSB7XG4gICAgaWYgKGJhc2VVcmwpIHtcbiAgICAgICAgcmV0dXJuIGJhc2VVcmw7XG4gICAgfVxuICAgIGlmIChsb2NhdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSBiYXNlVXJsIHBhcmFtZXRlciBpcyByZXF1aXJlZCBmb3IgdGhpcyBlbnZpcm9ubWVudFwiKTtcbiAgICB9XG4gICAgdmFyIGhvc3QgPSBsb2NhdGlvbi5ob3N0LCBwcm90b2NvbCA9IGxvY2F0aW9uLnByb3RvY29sO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChwcm90b2NvbCwgXCIvL1wiKS5jb25jYXQoaG9zdCk7XG59O1xuZXhwb3J0cy5idWlsZEJhc2VVcmwgPSBidWlsZEJhc2VVcmw7XG52YXIgZ2V0VmVyc2lvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcGFja2FnZV9qc29uXzEuZGVmYXVsdC52ZXJzaW9uO1xufTtcbmV4cG9ydHMuZ2V0VmVyc2lvbiA9IGdldFZlcnNpb247XG4vLyMgc291cmNlTWFwcGluZ1VSTD1icm93c2VyLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5idWlsZFBhdGggPSB2b2lkIDA7XG52YXIgYnVpbGRQYXRoID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgIHZhciBlbmRwb2ludE5hbWUgPSBwYXJhbXMuZW5kcG9pbnROYW1lLCBndWVzdFNwYWNlSWQgPSBwYXJhbXMuZ3Vlc3RTcGFjZUlkLCBwcmV2aWV3ID0gcGFyYW1zLnByZXZpZXc7XG4gICAgdmFyIGd1ZXN0UGF0aCA9IGd1ZXN0U3BhY2VJZCAhPT0gdW5kZWZpbmVkID8gXCIvZ3Vlc3QvXCIuY29uY2F0KGd1ZXN0U3BhY2VJZCkgOiBcIlwiO1xuICAgIHZhciBwcmV2aWV3UGF0aCA9IHByZXZpZXcgPyBcIi9wcmV2aWV3XCIgOiBcIlwiO1xuICAgIHJldHVybiBcIi9rXCIuY29uY2F0KGd1ZXN0UGF0aCwgXCIvdjFcIikuY29uY2F0KHByZXZpZXdQYXRoLCBcIi9cIikuY29uY2F0KGVuZHBvaW50TmFtZSwgXCIuanNvblwiKTtcbn07XG5leHBvcnRzLmJ1aWxkUGF0aCA9IGJ1aWxkUGF0aDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVybC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkJhc2VDbGllbnQgPSB2b2lkIDA7XG52YXIgdXJsXzEgPSByZXF1aXJlKFwiLi4vdXJsXCIpO1xudmFyIEJhc2VDbGllbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQmFzZUNsaWVudChjbGllbnQsIGd1ZXN0U3BhY2VJZCkge1xuICAgICAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICAgICAgdGhpcy5ndWVzdFNwYWNlSWQgPSBndWVzdFNwYWNlSWQ7XG4gICAgfVxuICAgIEJhc2VDbGllbnQucHJvdG90eXBlLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiAoMCwgdXJsXzEuYnVpbGRQYXRoKShfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcGFyYW1zKSwgeyBndWVzdFNwYWNlSWQ6IHRoaXMuZ3Vlc3RTcGFjZUlkIH0pKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gYnVpbGQgdGhlIGVuZHBvaW50IGZvciB0aGUgQVBJIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgZ3Vlc3Qgc3BhY2UgVVJMLlxuICAgICAqIE90aGVyd2lzZSwgcGxlYXNlIHVzZSBgYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZGAgaW5zdGVhZC5cbiAgICAgKiBAcGFyYW0gcGFyYW1zXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIEJhc2VDbGllbnQucHJvdG90eXBlLmJ1aWxkUGF0aCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuICgwLCB1cmxfMS5idWlsZFBhdGgpKHBhcmFtcyk7XG4gICAgfTtcbiAgICByZXR1cm4gQmFzZUNsaWVudDtcbn0oKSk7XG5leHBvcnRzLkJhc2VDbGllbnQgPSBCYXNlQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QmFzZUNsaWVudC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5CdWxrUmVxdWVzdENsaWVudCA9IHZvaWQgMDtcbnZhciBCYXNlQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9CYXNlQ2xpZW50XCIpO1xudmFyIEJ1bGtSZXF1ZXN0Q2xpZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhCdWxrUmVxdWVzdENsaWVudCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBCdWxrUmVxdWVzdENsaWVudChjbGllbnQsIGd1ZXN0U3BhY2VJZCkge1xuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBjbGllbnQsIGd1ZXN0U3BhY2VJZCkgfHwgdGhpcztcbiAgICAgICAgX3RoaXMuUkVRVUVTVFNfTEVOR1RIX0xJTUlUID0gMjA7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgQnVsa1JlcXVlc3RDbGllbnQucHJvdG90eXBlLnNlbmQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciByZXF1ZXN0c1BhcmFtID0gcGFyYW1zLnJlcXVlc3RzO1xuICAgICAgICB2YXIgcmVxdWVzdHMgPSByZXF1ZXN0c1BhcmFtLm1hcChmdW5jdGlvbiAocmVxdWVzdCkge1xuICAgICAgICAgICAgaWYgKFwiZW5kcG9pbnROYW1lXCIgaW4gcmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIHZhciBlbmRwb2ludE5hbWUgPSByZXF1ZXN0LmVuZHBvaW50TmFtZSwgcmVzdCA9IF9fcmVzdChyZXF1ZXN0LCBbXCJlbmRwb2ludE5hbWVcIl0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBfX2Fzc2lnbih7IGFwaTogX3RoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7IGVuZHBvaW50TmFtZTogZW5kcG9pbnROYW1lIH0pIH0sIHJlc3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcXVlc3Q7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYnVsa1JlcXVlc3RcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wb3N0KHBhdGgsIHsgcmVxdWVzdHM6IHJlcXVlc3RzIH0pO1xuICAgIH07XG4gICAgcmV0dXJuIEJ1bGtSZXF1ZXN0Q2xpZW50O1xufShCYXNlQ2xpZW50XzEuQmFzZUNsaWVudCkpO1xuZXhwb3J0cy5CdWxrUmVxdWVzdENsaWVudCA9IEJ1bGtSZXF1ZXN0Q2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9QnVsa1JlcXVlc3RDbGllbnQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuQXBwQ2xpZW50ID0gdm9pZCAwO1xudmFyIEJhc2VDbGllbnRfMSA9IHJlcXVpcmUoXCIuL0Jhc2VDbGllbnRcIik7XG52YXIgQXBwQ2xpZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhBcHBDbGllbnQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gQXBwQ2xpZW50KCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZ2V0Rm9ybUZpZWxkcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHByZXZpZXcgPSBwYXJhbXMucHJldmlldywgcmVzdCA9IF9fcmVzdChwYXJhbXMsIFtcInByZXZpZXdcIl0pO1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2Zvcm0vZmllbGRzXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiBwcmV2aWV3LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBfX2Fzc2lnbih7fSwgcmVzdCkpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5hZGRGb3JtRmllbGRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2Zvcm0vZmllbGRzXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnBvc3QocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUudXBkYXRlRm9ybUZpZWxkcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9mb3JtL2ZpZWxkc1wiLFxuICAgICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZGVsZXRlRm9ybUZpZWxkcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9mb3JtL2ZpZWxkc1wiLFxuICAgICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5kZWxldGUocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZ2V0Rm9ybUxheW91dCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHByZXZpZXcgPSBwYXJhbXMucHJldmlldywgcmVzdCA9IF9fcmVzdChwYXJhbXMsIFtcInByZXZpZXdcIl0pO1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2Zvcm0vbGF5b3V0XCIsXG4gICAgICAgICAgICBwcmV2aWV3OiBwcmV2aWV3LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBfX2Fzc2lnbih7fSwgcmVzdCkpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS51cGRhdGVGb3JtTGF5b3V0ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2Zvcm0vbGF5b3V0XCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRWaWV3cyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHByZXZpZXcgPSBwYXJhbXMucHJldmlldywgcmVzdCA9IF9fcmVzdChwYXJhbXMsIFtcInByZXZpZXdcIl0pO1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL3ZpZXdzXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiBwcmV2aWV3LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCByZXN0KTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUudXBkYXRlVmlld3MgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvdmlld3NcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldEFwcCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRBcHBzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwc1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5hZGRBcHAgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBuYW1lLCBzcGFjZSwgcGF0aCwgc3BhY2VQYXRoLCBkZWZhdWx0VGhyZWFkO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSA9IHBhcmFtcy5uYW1lLCBzcGFjZSA9IHBhcmFtcy5zcGFjZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHBcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNwYWNlKSByZXR1cm4gWzMgLypicmVhayovLCAyXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlUGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInNwYWNlXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuY2xpZW50LmdldChzcGFjZVBhdGgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHNwYWNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFRocmVhZCA9IChfYS5zZW50KCkpLmRlZmF1bHRUaHJlYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgdGhpcy5jbGllbnQucG9zdChwYXRoLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcGFyYW1zKSwgeyB0aHJlYWQ6IGRlZmF1bHRUaHJlYWQgfSkpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gWzIgLypyZXR1cm4qLywgdGhpcy5jbGllbnQucG9zdChwYXRoLCB7IG5hbWU6IG5hbWUgfSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZ2V0QXBwU2V0dGluZ3MgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gcGFyYW1zLnByZXZpZXcsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJwcmV2aWV3XCJdKTtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9zZXR0aW5nc1wiLFxuICAgICAgICAgICAgcHJldmlldzogcHJldmlldyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcmVzdCk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLnVwZGF0ZUFwcFNldHRpbmdzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL3NldHRpbmdzXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRQcm9jZXNzTWFuYWdlbWVudCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHByZXZpZXcgPSBwYXJhbXMucHJldmlldywgcmVzdCA9IF9fcmVzdChwYXJhbXMsIFtcInByZXZpZXdcIl0pO1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL3N0YXR1c1wiLFxuICAgICAgICAgICAgcHJldmlldzogcHJldmlldyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcmVzdCk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLnVwZGF0ZVByb2Nlc3NNYW5hZ2VtZW50ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL3N0YXR1c1wiLFxuICAgICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZ2V0RGVwbG95U3RhdHVzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2RlcGxveVwiLFxuICAgICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZGVwbG95QXBwID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2RlcGxveVwiLFxuICAgICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wb3N0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldEZpZWxkQWNsID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcHJldmlldyA9IHBhcmFtcy5wcmV2aWV3LCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wicHJldmlld1wiXSk7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJmaWVsZC9hY2xcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIF9fYXNzaWduKHt9LCByZXN0KSk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLnVwZGF0ZUZpZWxkQWNsID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICAvLyBOT1RFOiBXaGVuIGV4ZWN1dGluZyB0aGlzIEFQSSB3aXRob3V0IGBwcmV2aWV3YCxcbiAgICAgICAgLy8gYWxsIHByZS1saXZlIGFwcCdzIHNldHRpbmdzIHdpbGwgYmUgZGVwbG95ZWQgdG8gbGl2ZSBhcHAuXG4gICAgICAgIC8vIFRoaXMgYmVoYXZpb3IgbWF5IG5vdCBiZSB3aGF0IHRoZSB1c2VycyBleHBlY3RlZCxcbiAgICAgICAgLy8gc28gd2UgZGlzYWJsZSBpdCB0ZW1wb3JhcmlseS5cbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImZpZWxkL2FjbFwiLFxuICAgICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZ2V0QXBwQWNsID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcHJldmlldyA9IHBhcmFtcy5wcmV2aWV3LCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wicHJldmlld1wiXSk7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvYWNsXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiBwcmV2aWV3LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBfX2Fzc2lnbih7fSwgcmVzdCkpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS51cGRhdGVBcHBBY2wgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIC8vIE5PVEU6IFdoZW4gZXhlY3V0aW5nIHRoaXMgQVBJIHdpdGhvdXQgYHByZXZpZXdgLFxuICAgICAgICAvLyBhbGwgcHJlLWxpdmUgYXBwJ3Mgc2V0dGluZ3Mgd2lsbCBiZSBkZXBsb3llZCB0byBsaXZlIGFwcC5cbiAgICAgICAgLy8gVGhpcyBiZWhhdmlvciBtYXkgbm90IGJlIHdoYXQgdGhlIHVzZXJzIGV4cGVjdGVkLFxuICAgICAgICAvLyBzbyB3ZSBkaXNhYmxlIGl0IHRlbXBvcmFyaWx5LlxuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL2FjbFwiLFxuICAgICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZXZhbHVhdGVSZWNvcmRzQWNsID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkcy9hY2wvZXZhbHVhdGVcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZ2V0UmVjb3JkQWNsID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcHJldmlldyA9IHBhcmFtcy5wcmV2aWV3LCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wicHJldmlld1wiXSk7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmQvYWNsXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiBwcmV2aWV3LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBfX2Fzc2lnbih7fSwgcmVzdCkpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS51cGRhdGVSZWNvcmRBY2wgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIC8vIE5PVEU6IFdoZW4gZXhlY3V0aW5nIHRoaXMgQVBJIHdpdGhvdXQgYHByZXZpZXdgLFxuICAgICAgICAvLyBhbGwgcHJlLWxpdmUgYXBwJ3Mgc2V0dGluZ3Mgd2lsbCBiZSBkZXBsb3llZCB0byBsaXZlIGFwcC5cbiAgICAgICAgLy8gVGhpcyBiZWhhdmlvciBtYXkgbm90IGJlIHdoYXQgdGhlIHVzZXJzIGV4cGVjdGVkLFxuICAgICAgICAvLyBzbyB3ZSBkaXNhYmxlIGl0IHRlbXBvcmFyaWx5LlxuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkL2FjbFwiLFxuICAgICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUuZ2V0QXBwQ3VzdG9taXplID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcHJldmlldyA9IHBhcmFtcy5wcmV2aWV3LCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wicHJldmlld1wiXSk7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvY3VzdG9taXplXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiBwcmV2aWV3LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBfX2Fzc2lnbih7fSwgcmVzdCkpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS51cGRhdGVBcHBDdXN0b21pemUgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvY3VzdG9taXplXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRHZW5lcmFsTm90aWZpY2F0aW9ucyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHByZXZpZXcgPSBwYXJhbXMucHJldmlldywgcmVzdCA9IF9fcmVzdChwYXJhbXMsIFtcInByZXZpZXdcIl0pO1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL25vdGlmaWNhdGlvbnMvZ2VuZXJhbFwiLFxuICAgICAgICAgICAgcHJldmlldzogcHJldmlldyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgX19hc3NpZ24oe30sIHJlc3QpKTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUudXBkYXRlR2VuZXJhbE5vdGlmaWNhdGlvbnMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvbm90aWZpY2F0aW9ucy9nZW5lcmFsXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRQZXJSZWNvcmROb3RpZmljYXRpb25zID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcHJldmlldyA9IHBhcmFtcy5wcmV2aWV3LCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wicHJldmlld1wiXSk7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvbm90aWZpY2F0aW9ucy9wZXJSZWNvcmRcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHByZXZpZXcsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0KHBhdGgsIHJlc3QpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS51cGRhdGVQZXJSZWNvcmROb3RpZmljYXRpb25zID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL25vdGlmaWNhdGlvbnMvcGVyUmVjb3JkXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRSZW1pbmRlck5vdGlmaWNhdGlvbnMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gcGFyYW1zLnByZXZpZXcsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJwcmV2aWV3XCJdKTtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9ub3RpZmljYXRpb25zL3JlbWluZGVyXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiBwcmV2aWV3LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCByZXN0KTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUudXBkYXRlUmVtaW5kZXJOb3RpZmljYXRpb25zID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwiYXBwL25vdGlmaWNhdGlvbnMvcmVtaW5kZXJcIixcbiAgICAgICAgICAgIHByZXZpZXc6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLmdldFJlcG9ydHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwcmV2aWV3ID0gcGFyYW1zLnByZXZpZXcsIHJlc3QgPSBfX3Jlc3QocGFyYW1zLCBbXCJwcmV2aWV3XCJdKTtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9yZXBvcnRzXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiBwcmV2aWV3LFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCByZXN0KTtcbiAgICB9O1xuICAgIEFwcENsaWVudC5wcm90b3R5cGUudXBkYXRlUmVwb3J0cyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImFwcC9yZXBvcnRzXCIsXG4gICAgICAgICAgICBwcmV2aWV3OiB0cnVlLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgQXBwQ2xpZW50LnByb3RvdHlwZS5nZXRBcHBBY3Rpb25zID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcHJldmlldyA9IHBhcmFtcy5wcmV2aWV3LCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wicHJldmlld1wiXSk7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvYWN0aW9uc1wiLFxuICAgICAgICAgICAgcHJldmlldzogcHJldmlldyxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcmVzdCk7XG4gICAgfTtcbiAgICBBcHBDbGllbnQucHJvdG90eXBlLnVwZGF0ZUFwcEFjdGlvbnMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJhcHAvYWN0aW9uc1wiLFxuICAgICAgICAgICAgcHJldmlldzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIHJldHVybiBBcHBDbGllbnQ7XG59KEJhc2VDbGllbnRfMS5CYXNlQ2xpZW50KSk7XG5leHBvcnRzLkFwcENsaWVudCA9IEFwcENsaWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUFwcENsaWVudC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLktpbnRvbmVBYm9ydFNlYXJjaEVycm9yID0gdm9pZCAwO1xudmFyIEtpbnRvbmVBYm9ydFNlYXJjaEVycm9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhLaW50b25lQWJvcnRTZWFyY2hFcnJvciwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBLaW50b25lQWJvcnRTZWFyY2hFcnJvcihtZXNzYWdlKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm5hbWUgPSBcIktpbnRvbmVBYm9ydFNlYXJjaEVycm9yXCI7XG4gICAgICAgIF90aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L1R5cGVTY3JpcHQvd2lraS9CcmVha2luZy1DaGFuZ2VzI2V4dGVuZGluZy1idWlsdC1pbnMtbGlrZS1lcnJvci1hcnJheS1hbmQtbWFwLW1heS1uby1sb25nZXItd29ya1xuICAgICAgICAvLyBTZXQgdGhlIHByb3RvdHlwZSBleHBsaWNpdGx5LlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoX3RoaXMsIEtpbnRvbmVBYm9ydFNlYXJjaEVycm9yLnByb3RvdHlwZSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgcmV0dXJuIEtpbnRvbmVBYm9ydFNlYXJjaEVycm9yO1xufShFcnJvcikpO1xuZXhwb3J0cy5LaW50b25lQWJvcnRTZWFyY2hFcnJvciA9IEtpbnRvbmVBYm9ydFNlYXJjaEVycm9yO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9S2ludG9uZUFib3J0U2VhcmNoRXJyb3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5LaW50b25lQWxsUmVjb3Jkc0Vycm9yID0gdm9pZCAwO1xudmFyIEtpbnRvbmVBbGxSZWNvcmRzRXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEtpbnRvbmVBbGxSZWNvcmRzRXJyb3IsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gS2ludG9uZUFsbFJlY29yZHNFcnJvcihwcm9jZXNzZWRSZWNvcmRzUmVzdWx0LCB1bnByb2Nlc3NlZFJlY29yZHMsIG51bU9mQWxsUmVjb3JkcywgZXJyb3IsIGNodW5rTGVuZ3RoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBudW1PZlByb2Nlc3NlZFJlY29yZHMgPSBudW1PZkFsbFJlY29yZHMgLSB1bnByb2Nlc3NlZFJlY29yZHMubGVuZ3RoO1xuICAgICAgICB2YXIgZXJyb3JJbmRleCA9IEtpbnRvbmVBbGxSZWNvcmRzRXJyb3IuZXh0cmFjdEVycm9ySW5kZXgobnVtT2ZQcm9jZXNzZWRSZWNvcmRzLCBlcnJvciwgY2h1bmtMZW5ndGgpO1xuICAgICAgICB2YXIgbWVzc2FnZSA9IEtpbnRvbmVBbGxSZWNvcmRzRXJyb3IuYnVpbGRFcnJvck1lc3NhZ2UobnVtT2ZQcm9jZXNzZWRSZWNvcmRzLCBudW1PZkFsbFJlY29yZHMsIGVycm9ySW5kZXgpO1xuICAgICAgICBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UpIHx8IHRoaXM7XG4gICAgICAgIF90aGlzLm5hbWUgPSBcIktpbnRvbmVBbGxSZWNvcmRzRXJyb3JcIjtcbiAgICAgICAgX3RoaXMucHJvY2Vzc2VkUmVjb3Jkc1Jlc3VsdCA9IHByb2Nlc3NlZFJlY29yZHNSZXN1bHQ7XG4gICAgICAgIF90aGlzLnVucHJvY2Vzc2VkUmVjb3JkcyA9IHVucHJvY2Vzc2VkUmVjb3JkcztcbiAgICAgICAgX3RoaXMuZXJyb3IgPSBlcnJvcjtcbiAgICAgICAgX3RoaXMuZXJyb3JJbmRleCA9IGVycm9ySW5kZXg7XG4gICAgICAgIF90aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICBfdGhpcy5udW1PZlByb2Nlc3NlZFJlY29yZHMgPSBudW1PZlByb2Nlc3NlZFJlY29yZHM7XG4gICAgICAgIF90aGlzLm51bU9mQWxsUmVjb3JkcyA9IG51bU9mQWxsUmVjb3JkcztcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC9UeXBlU2NyaXB0L3dpa2kvQnJlYWtpbmctQ2hhbmdlcyNleHRlbmRpbmctYnVpbHQtaW5zLWxpa2UtZXJyb3ItYXJyYXktYW5kLW1hcC1tYXktbm8tbG9uZ2VyLXdvcmtcbiAgICAgICAgLy8gU2V0IHRoZSBwcm90b3R5cGUgZXhwbGljaXRseS5cbiAgICAgICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKF90aGlzLCBLaW50b25lQWxsUmVjb3Jkc0Vycm9yLnByb3RvdHlwZSk7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgS2ludG9uZUFsbFJlY29yZHNFcnJvci5wYXJzZUVycm9ySW5kZXggPSBmdW5jdGlvbiAoZXJyb3JzKSB7XG4gICAgICAgIC8vIFRPRE86IHVzZSBtYXRjaEFsbCBhZnRlciBFUzIwMjAgc3VwcG9ydFxuICAgICAgICB2YXIgZXJyb3JJbmRleGVzID0gW107XG4gICAgICAgIE9iamVjdC5rZXlzKGVycm9ycykuZm9yRWFjaChmdW5jdGlvbiAoZXJyb3JLZXkpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBlcnJvcktleS5tYXRjaCgvcmVjb3Jkc1xcWyhcXGQrKVxcXS8pO1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIGVycm9ySW5kZXhlcy5wdXNoKE51bWJlcihyZXN1bHRbMV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlcnJvckluZGV4ZXMubGVuZ3RoID4gMCA/IE1hdGgubWluLmFwcGx5KE1hdGgsIGVycm9ySW5kZXhlcykgOiBudWxsO1xuICAgIH07XG4gICAgS2ludG9uZUFsbFJlY29yZHNFcnJvci5leHRyYWN0RXJyb3JJbmRleCA9IGZ1bmN0aW9uIChudW1PZlByb2Nlc3NlZFJlY29yZHMsIGVycm9yLCBjaHVua0xlbmd0aCkge1xuICAgICAgICBpZiAoZXJyb3IuYnVsa1JlcXVlc3RJbmRleCAhPT0gdW5kZWZpbmVkICYmIGVycm9yLmVycm9ycykge1xuICAgICAgICAgICAgdmFyIGVycm9yUGFyc2VSZXN1bHQgPSBLaW50b25lQWxsUmVjb3Jkc0Vycm9yLnBhcnNlRXJyb3JJbmRleChlcnJvci5lcnJvcnMpO1xuICAgICAgICAgICAgaWYgKGVycm9yUGFyc2VSZXN1bHQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gKG51bU9mUHJvY2Vzc2VkUmVjb3JkcyArXG4gICAgICAgICAgICAgICAgICAgIGVycm9yLmJ1bGtSZXF1ZXN0SW5kZXggKiBjaHVua0xlbmd0aCArXG4gICAgICAgICAgICAgICAgICAgIGVycm9yUGFyc2VSZXN1bHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBLaW50b25lQWxsUmVjb3Jkc0Vycm9yLmJ1aWxkRXJyb3JNZXNzYWdlID0gZnVuY3Rpb24gKG51bU9mUHJvY2Vzc2VkUmVjb3JkcywgbnVtT2ZBbGxSZWNvcmRzLCBlcnJvckluZGV4KSB7XG4gICAgICAgIHZhciBtZXNzYWdlID0gXCJcIjtcbiAgICAgICAgaWYgKGVycm9ySW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbWVzc2FnZSA9IFwiQW4gZXJyb3Igb2NjdXJyZWQgYXQgcmVjb3Jkc1tcIi5jb25jYXQoZXJyb3JJbmRleCwgXCJdLiBcIik7XG4gICAgICAgIH1cbiAgICAgICAgbWVzc2FnZSArPSBcIlwiLmNvbmNhdChudW1PZlByb2Nlc3NlZFJlY29yZHMsIFwiL1wiKS5jb25jYXQobnVtT2ZBbGxSZWNvcmRzLCBcIiByZWNvcmRzIGFyZSBwcm9jZXNzZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICAgICAgICByZXR1cm4gbWVzc2FnZTtcbiAgICB9O1xuICAgIHJldHVybiBLaW50b25lQWxsUmVjb3Jkc0Vycm9yO1xufShFcnJvcikpO1xuZXhwb3J0cy5LaW50b25lQWxsUmVjb3Jkc0Vycm9yID0gS2ludG9uZUFsbFJlY29yZHNFcnJvcjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUtpbnRvbmVBbGxSZWNvcmRzRXJyb3IuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5LaW50b25lUmVzdEFQSUVycm9yID0gdm9pZCAwO1xudmFyIEtpbnRvbmVSZXN0QVBJRXJyb3IgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKEtpbnRvbmVSZXN0QVBJRXJyb3IsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gS2ludG9uZVJlc3RBUElFcnJvcihlcnJvcikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2EgPSBLaW50b25lUmVzdEFQSUVycm9yLmJ1aWxkRXJyb3JSZXNwb25zZURhdGVXaXRoSW5kZXgoZXJyb3IpLCBkYXRhID0gX2EuZGF0YSwgYnVsa1JlcXVlc3RJbmRleCA9IF9hLmJ1bGtSZXF1ZXN0SW5kZXg7XG4gICAgICAgIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGF0YS5tZXNzYWdlKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5uYW1lID0gXCJLaW50b25lUmVzdEFQSUVycm9yXCI7XG4gICAgICAgIF90aGlzLmlkID0gZGF0YS5pZDtcbiAgICAgICAgX3RoaXMuY29kZSA9IGRhdGEuY29kZTtcbiAgICAgICAgX3RoaXMuZXJyb3JzID0gZGF0YS5lcnJvcnM7XG4gICAgICAgIF90aGlzLnN0YXR1cyA9IGVycm9yLnN0YXR1cztcbiAgICAgICAgX3RoaXMuYnVsa1JlcXVlc3RJbmRleCA9IGJ1bGtSZXF1ZXN0SW5kZXg7XG4gICAgICAgIF90aGlzLmhlYWRlcnMgPSBlcnJvci5oZWFkZXJzO1xuICAgICAgICBfdGhpcy5tZXNzYWdlID0gXCJbXCIuY29uY2F0KGVycm9yLnN0YXR1cywgXCJdIFtcIikuY29uY2F0KF90aGlzLmNvZGUsIFwiXSBcIikuY29uY2F0KF90aGlzLm1lc3NhZ2UsIFwiIChcIikuY29uY2F0KF90aGlzLmlkLCBcIilcIik7XG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0Vycm9yI0N1c3RvbV9FcnJvcl9UeXBlc1xuICAgICAgICAvLyBNYWludGFpbnMgcHJvcGVyIHN0YWNrIHRyYWNlIGZvciB3aGVyZSBvdXIgZXJyb3Igd2FzIHRocm93biAob25seSBhdmFpbGFibGUgb24gVjgpXG4gICAgICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoX3RoaXMsIEtpbnRvbmVSZXN0QVBJRXJyb3IpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWNyb3NvZnQvVHlwZVNjcmlwdC93aWtpL0JyZWFraW5nLUNoYW5nZXMjZXh0ZW5kaW5nLWJ1aWx0LWlucy1saWtlLWVycm9yLWFycmF5LWFuZC1tYXAtbWF5LW5vLWxvbmdlci13b3JrXG4gICAgICAgIC8vIFNldCB0aGUgcHJvdG90eXBlIGV4cGxpY2l0bHkuXG4gICAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihfdGhpcywgS2ludG9uZVJlc3RBUElFcnJvci5wcm90b3R5cGUpO1xuICAgICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuICAgIEtpbnRvbmVSZXN0QVBJRXJyb3IuZmluZEVycm9yUmVzcG9uc2VEYXRhV2l0aEluZGV4ID0gZnVuY3Rpb24gKHJlc3VsdHMpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoT2JqZWN0LmtleXMocmVzdWx0c1tpXSkubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgdmFyIGRhdGEgPSByZXN1bHRzW2ldO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IGRhdGE6IGRhdGEsIGJ1bGtSZXF1ZXN0SW5kZXg6IGkgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBFcnJvcihcIk1pc3NpbmcgcmVzcG9uc2UgZGF0YSBpbiBgcmVzdWx0c2AuIFRoaXMgZXJyb3IgaXMgbGlrZWx5IGNhdXNlZCBieSBhIGJ1ZyBpbiBLaW50b25lIFJFU1QgQVBJIENsaWVudC4gUGxlYXNlIGZpbGUgYW4gaXNzdWUuXCIpO1xuICAgIH07XG4gICAgS2ludG9uZVJlc3RBUElFcnJvci5idWlsZEVycm9yUmVzcG9uc2VEYXRlV2l0aEluZGV4ID0gZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgIGlmIChcInJlc3VsdHNcIiBpbiBlcnJvci5kYXRhKSB7XG4gICAgICAgICAgICByZXR1cm4gS2ludG9uZVJlc3RBUElFcnJvci5maW5kRXJyb3JSZXNwb25zZURhdGFXaXRoSW5kZXgoZXJyb3IuZGF0YS5yZXN1bHRzKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBkYXRhOiBlcnJvci5kYXRhIH07XG4gICAgfTtcbiAgICByZXR1cm4gS2ludG9uZVJlc3RBUElFcnJvcjtcbn0oRXJyb3IpKTtcbmV4cG9ydHMuS2ludG9uZVJlc3RBUElFcnJvciA9IEtpbnRvbmVSZXN0QVBJRXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1LaW50b25lUmVzdEFQSUVycm9yLmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX2V4cG9ydFN0YXIgPSAodGhpcyAmJiB0aGlzLl9fZXhwb3J0U3RhcikgfHwgZnVuY3Rpb24obSwgZXhwb3J0cykge1xuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXhwb3J0cywgcCkpIF9fY3JlYXRlQmluZGluZyhleHBvcnRzLCBtLCBwKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vS2ludG9uZUFib3J0U2VhcmNoRXJyb3JcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0tpbnRvbmVBbGxSZWNvcmRzRXJyb3JcIiksIGV4cG9ydHMpO1xuX19leHBvcnRTdGFyKHJlcXVpcmUoXCIuL0tpbnRvbmVSZXN0QVBJRXJyb3JcIiksIGV4cG9ydHMpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xudmFyIF9fYXNzaWduID0gKHRoaXMgJiYgdGhpcy5fX2Fzc2lnbikgfHwgZnVuY3Rpb24gKCkge1xuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbih0KSB7XG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSlcbiAgICAgICAgICAgICAgICB0W3BdID0gc1twXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdDtcbiAgICB9O1xuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufTtcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHRoaXMgJiYgdGhpcy5fX2dlbmVyYXRvcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIGJvZHkpIHtcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XG4gICAgfVxufTtcbnZhciBfX3Jlc3QgPSAodGhpcyAmJiB0aGlzLl9fcmVzdCkgfHwgZnVuY3Rpb24gKHMsIGUpIHtcbiAgICB2YXIgdCA9IHt9O1xuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxuICAgICAgICB0W3BdID0gc1twXTtcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcbiAgICAgICAgfVxuICAgIHJldHVybiB0O1xufTtcbnZhciBfX3NwcmVhZEFycmF5ID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5KSB8fCBmdW5jdGlvbiAodG8sIGZyb20sIHBhY2spIHtcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuUmVjb3JkQ2xpZW50ID0gdm9pZCAwO1xudmFyIGVycm9yXzEgPSByZXF1aXJlKFwiLi4vZXJyb3JcIik7XG52YXIgQmFzZUNsaWVudF8xID0gcmVxdWlyZShcIi4vQmFzZUNsaWVudFwiKTtcbnZhciBBRERfUkVDT1JEU19MSU1JVCA9IDEwMDtcbnZhciBVUERBVEVfUkVDT1JEU19MSU1JVCA9IDEwMDtcbnZhciBERUxFVEVfUkVDT1JEU19MSU1JVCA9IDEwMDtcbnZhciBHRVRfUkVDT1JEU19MSU1JVCA9IDUwMDtcbnZhciBSZWNvcmRDbGllbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoX3N1cGVyKSB7XG4gICAgX19leHRlbmRzKFJlY29yZENsaWVudCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBSZWNvcmRDbGllbnQoY2xpZW50LCBidWxrUmVxdWVzdENsaWVudCwgZ3Vlc3RTcGFjZUlkKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIGNsaWVudCwgZ3Vlc3RTcGFjZUlkKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5idWxrUmVxdWVzdENsaWVudCA9IGJ1bGtSZXF1ZXN0Q2xpZW50O1xuICAgICAgICBfdGhpcy5kaWRXYXJuTWF4aW11bU9mZnNldFZhbHVlID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5nZXRSZWNvcmQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuYWRkUmVjb3JkID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucG9zdChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS51cGRhdGVSZWNvcmQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUudXBzZXJ0UmVjb3JkID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgYXBwLCB1cGRhdGVLZXksIHJlY29yZCwgcmVjb3JkcywgcmV2aXNpb247XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9iKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYi5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHAgPSBwYXJhbXMuYXBwLCB1cGRhdGVLZXkgPSBwYXJhbXMudXBkYXRlS2V5LCByZWNvcmQgPSBwYXJhbXMucmVjb3JkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5nZXRSZWNvcmRzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwOiBhcHAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5OiBcIlwiLmNvbmNhdCh1cGRhdGVLZXkuZmllbGQsIFwiID0gXFxcIlwiKS5jb25jYXQodXBkYXRlS2V5LnZhbHVlLCBcIlxcXCJcIiksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzID0gKF9iLnNlbnQoKSkucmVjb3JkcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHJlY29yZHMubGVuZ3RoID4gMCkpIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVjb3Jkc1swXS4kaWQudHlwZSA9PT0gXCJfX0lEX19cIikpIHJldHVybiBbMyAvKmJyZWFrKi8sIDNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy51cGRhdGVSZWNvcmQocGFyYW1zKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldmlzaW9uID0gKF9iLnNlbnQoKSkucmV2aXNpb247XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgeyBpZDogcmVjb3Jkc1swXS4kaWQudmFsdWUsIHJldmlzaW9uOiByZXZpc2lvbiB9XTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGAkaWRgIGluIGBnZXRSZWNvcmRzYCByZXNwb25zZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIEtpbnRvbmUgUkVTVCBBUEkgQ2xpZW50LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIik7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNDogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHRoaXMuYWRkUmVjb3JkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHA6IGFwcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQ6IE9iamVjdC5hc3NpZ24oe30sIHJlY29yZCwgKF9hID0ge30sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hW3VwZGF0ZUtleS5maWVsZF0gPSB7IHZhbHVlOiB1cGRhdGVLZXkudmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2EpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvLyBUT0RPOiBgcmVjb3Jkc2AgdHlwZSBpbiByZXR1cm4gdHlwZSBzaG91bGQgYmUgZmlsdGVyZWQgYnkgYGZpZWxkc2AuXG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5nZXRSZWNvcmRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcGF0aCwgcmVzcG9uc2U7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkc1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmNsaWVudC5nZXQocGF0aCwgcGFyYW1zKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy53YXJuTWF4aW11bU9mZnNldFZhbHVlSWZOZWVkZWQocGFyYW1zLnF1ZXJ5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCByZXNwb25zZV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS53YXJuTWF4aW11bU9mZnNldFZhbHVlSWZOZWVkZWQgPSBmdW5jdGlvbiAocXVlcnkpIHtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgICB2YXIgcmVnZXhwID0gL29mZnNldFxccysoXFxkKykvaTtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSBxdWVyeS5tYXRjaChyZWdleHApO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRpZFdhcm5NYXhpbXVtT2Zmc2V0VmFsdWUgJiZcbiAgICAgICAgICAgICAgICByZXN1bHQgJiZcbiAgICAgICAgICAgICAgICBOdW1iZXIocmVzdWx0WzFdKSA+IDEwMDAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaWRXYXJuTWF4aW11bU9mZnNldFZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oXCJXYXJuaW5nOiBUaGUgbWF4aW11bSBvZmZzZXQgdmFsdWUgd2lsbCBiZSBsaW1pdGVkIHRvIDEwLDAwMCBpbiB0aGUgZnV0dXJlLiBQbGVhc2UgdXNlIGBjcmVhdGVDdXJzb3IoKWAgYW5kIGBnZXRSZWNvcmRzQnlDdXJzb3IoKWAgaW5zdGVhZC5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuYWRkUmVjb3JkcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHBhdGgsIF9hLCBpZHMsIHJldmlzaW9ucztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuY2xpZW50LnBvc3QocGF0aCwgcGFyYW1zKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hID0gX2Iuc2VudCgpLCBpZHMgPSBfYS5pZHMsIHJldmlzaW9ucyA9IF9hLnJldmlzaW9ucztcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkczogaWRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXZpc2lvbnM6IHJldmlzaW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkczogaWRzLm1hcChmdW5jdGlvbiAoaWQsIGkpIHsgcmV0dXJuICh7IGlkOiBpZCwgcmV2aXNpb246IHJldmlzaW9uc1tpXSB9KTsgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS51cGRhdGVSZWNvcmRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkc1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5kZWxldGVSZWNvcmRzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkc1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmRlbGV0ZShwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5jcmVhdGVDdXJzb3IgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzL2N1cnNvclwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnBvc3QocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuZ2V0UmVjb3Jkc0J5Q3Vyc29yID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkcy9jdXJzb3JcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5nZXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuZGVsZXRlQ3Vyc29yID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3Jkcy9jdXJzb3JcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5kZWxldGUocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuZ2V0QWxsUmVjb3JkcyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGNvbmRpdGlvbiwgb3JkZXJCeSwgX2EsIHdpdGhDdXJzb3IsIHJlc3QsIGNvbmRpdGlvblF1ZXJ5LCBxdWVyeTtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgICAgICBjb25kaXRpb24gPSBwYXJhbXMuY29uZGl0aW9uLCBvcmRlckJ5ID0gcGFyYW1zLm9yZGVyQnksIF9hID0gcGFyYW1zLndpdGhDdXJzb3IsIHdpdGhDdXJzb3IgPSBfYSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9hLCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wiY29uZGl0aW9uXCIsIFwib3JkZXJCeVwiLCBcIndpdGhDdXJzb3JcIl0pO1xuICAgICAgICAgICAgICAgIGlmICghb3JkZXJCeSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgdGhpcy5nZXRBbGxSZWNvcmRzV2l0aElkKF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXN0KSwgeyBjb25kaXRpb246IGNvbmRpdGlvbiB9KSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAod2l0aEN1cnNvcikge1xuICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25RdWVyeSA9IGNvbmRpdGlvbiA/IFwiXCIuY29uY2F0KGNvbmRpdGlvbiwgXCIgXCIpIDogXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnkgPSBcIlwiLmNvbmNhdChjb25kaXRpb25RdWVyeSkuY29uY2F0KG9yZGVyQnkgPyBcIm9yZGVyIGJ5IFwiLmNvbmNhdChvcmRlckJ5KSA6IFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgdGhpcy5nZXRBbGxSZWNvcmRzV2l0aEN1cnNvcihfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcmVzdCksIHsgcXVlcnk6IHF1ZXJ5IH0pKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLmdldEFsbFJlY29yZHNXaXRoT2Zmc2V0KF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXN0KSwgeyBvcmRlckJ5OiBvcmRlckJ5LCBjb25kaXRpb246IGNvbmRpdGlvbiB9KSldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5nZXRBbGxSZWNvcmRzV2l0aElkID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgb3JpZ2luYWxGaWVsZHMsIGNvbmRpdGlvbiwgcmVzdCwgZmllbGRzLCBjb25kaXRpb25RdWVyeSwgYWxsUmVjb3JkcywgbGFzdElkLCBxdWVyeSwgcmVzdWx0LCBsYXN0UmVjb3JkO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxGaWVsZHMgPSBwYXJhbXMuZmllbGRzLCBjb25kaXRpb24gPSBwYXJhbXMuY29uZGl0aW9uLCByZXN0ID0gX19yZXN0KHBhcmFtcywgW1wiZmllbGRzXCIsIFwiY29uZGl0aW9uXCJdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkcyA9IG9yaWdpbmFsRmllbGRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQXBwZW5kICRpZCBpZiAkaWQgZG9lc24ndCBleGlzdCBpbiBmaWVsZHNcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCA+IDAgJiYgZmllbGRzLmluZGV4T2YoXCIkaWRcIikgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRzID0gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBmaWVsZHMsIHRydWUpLCBbXCIkaWRcIl0sIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvblF1ZXJ5ID0gY29uZGl0aW9uID8gXCIoXCIuY29uY2F0KGNvbmRpdGlvbiwgXCIpIGFuZCBcIikgOiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsUmVjb3JkcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFzdElkID0gXCIwXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdHJ1ZSkgcmV0dXJuIFszIC8qYnJlYWsqLywgM107XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSA9IFwiXCIuY29uY2F0KGNvbmRpdGlvblF1ZXJ5LCBcIiRpZCA+IFwiKS5jb25jYXQobGFzdElkLCBcIiBvcmRlciBieSAkaWQgYXNjIGxpbWl0IFwiKS5jb25jYXQoR0VUX1JFQ09SRFNfTElNSVQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5nZXRSZWNvcmRzKF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXN0KSwgeyBmaWVsZHM6IGZpZWxkcywgcXVlcnk6IHF1ZXJ5IH0pKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsbFJlY29yZHMgPSBhbGxSZWNvcmRzLmNvbmNhdChyZXN1bHQucmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnJlY29yZHMubGVuZ3RoIDwgR0VUX1JFQ09SRFNfTElNSVQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCAzXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RSZWNvcmQgPSByZXN1bHQucmVjb3Jkc1tyZXN1bHQucmVjb3Jkcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsYXN0UmVjb3JkLiRpZC50eXBlID09PSBcIl9fSURfX1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdElkID0gbGFzdFJlY29yZC4kaWQudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGAkaWRgIGluIGBnZXRSZWNvcmRzYCByZXNwb25zZS4gVGhpcyBlcnJvciBpcyBsaWtlbHkgY2F1c2VkIGJ5IGEgYnVnIGluIEtpbnRvbmUgUkVTVCBBUEkgQ2xpZW50LiBQbGVhc2UgZmlsZSBhbiBpc3N1ZS5cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCAxXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzIgLypyZXR1cm4qLywgYWxsUmVjb3Jkc107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5nZXRBbGxSZWNvcmRzV2l0aE9mZnNldCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGNvbmRpdGlvbiwgb3JkZXJCeSwgcmVzdCwgY29uZGl0aW9uUXVlcnksIGFsbFJlY29yZHMsIG9mZnNldCwgcXVlcnksIHJlc3VsdDtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiA9IHBhcmFtcy5jb25kaXRpb24sIG9yZGVyQnkgPSBwYXJhbXMub3JkZXJCeSwgcmVzdCA9IF9fcmVzdChwYXJhbXMsIFtcImNvbmRpdGlvblwiLCBcIm9yZGVyQnlcIl0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uZGl0aW9uUXVlcnkgPSBjb25kaXRpb24gPyBcIlwiLmNvbmNhdChjb25kaXRpb24sIFwiIFwiKSA6IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxSZWNvcmRzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRydWUpIHJldHVybiBbMyAvKmJyZWFrKi8sIDNdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkgPSBcIlwiLmNvbmNhdChjb25kaXRpb25RdWVyeSkuY29uY2F0KG9yZGVyQnkgPyBcIm9yZGVyIGJ5IFwiLmNvbmNhdChvcmRlckJ5LCBcIiBcIikgOiBcIlwiLCBcImxpbWl0IFwiKS5jb25jYXQoR0VUX1JFQ09SRFNfTElNSVQsIFwiIG9mZnNldCBcIikuY29uY2F0KG9mZnNldCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmdldFJlY29yZHMoX19hc3NpZ24oX19hc3NpZ24oe30sIHJlc3QpLCB7IHF1ZXJ5OiBxdWVyeSB9KSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxSZWNvcmRzID0gYWxsUmVjb3Jkcy5jb25jYXQocmVzdWx0LnJlY29yZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5yZWNvcmRzLmxlbmd0aCA8IEdFVF9SRUNPUkRTX0xJTUlUKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgM107XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgKz0gR0VUX1JFQ09SRFNfTElNSVQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCAxXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzIgLypyZXR1cm4qLywgYWxsUmVjb3Jkc107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5nZXRBbGxSZWNvcmRzV2l0aEN1cnNvciA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGlkLCBhbGxSZWNvcmRzLCByZXN1bHQsIGVycm9yXzI7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuY3JlYXRlQ3Vyc29yKHBhcmFtcyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZCA9IChfYS5zZW50KCkpLmlkO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSAyO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzIsIDYsICwgOF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxsUmVjb3JkcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSAzO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRydWUpIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5nZXRSZWNvcmRzQnlDdXJzb3IoeyBpZDogaWQgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxSZWNvcmRzID0gYWxsUmVjb3Jkcy5jb25jYXQocmVzdWx0LnJlY29yZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQubmV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgM107XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGFsbFJlY29yZHNdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl8yID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5kZWxldGVDdXJzb3IoeyBpZDogaWQgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcl8yO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDg6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmFkZEFsbFJlY29yZHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBpZiAoIXBhcmFtcy5yZWNvcmRzLmV2ZXJ5KGZ1bmN0aW9uIChyZWNvcmQpIHsgcmV0dXJuICFBcnJheS5pc0FycmF5KHJlY29yZCkgJiYgcmVjb3JkIGluc3RhbmNlb2YgT2JqZWN0OyB9KSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0aGUgYHJlY29yZHNgIHBhcmFtZXRlciBtdXN0IGJlIGFuIGFycmF5IG9mIG9iamVjdC5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLmFkZEFsbFJlY29yZHNSZWN1cnNpdmUocGFyYW1zLCBwYXJhbXMucmVjb3Jkcy5sZW5ndGgsIFtdKV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmFkZEFsbFJlY29yZHNSZWN1cnNpdmUgPSBmdW5jdGlvbiAocGFyYW1zLCBudW1PZkFsbFJlY29yZHMsIHJlc3VsdHMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIENIVU5LX0xFTkdUSCwgYXBwLCByZWNvcmRzLCByZWNvcmRzQ2h1bmssIG5ld1Jlc3VsdHMsIGVfMTtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIENIVU5LX0xFTkdUSCA9IHRoaXMuYnVsa1JlcXVlc3RDbGllbnQuUkVRVUVTVFNfTEVOR1RIX0xJTUlUICogQUREX1JFQ09SRFNfTElNSVQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcHAgPSBwYXJhbXMuYXBwLCByZWNvcmRzID0gcGFyYW1zLnJlY29yZHM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzQ2h1bmsgPSByZWNvcmRzLnNsaWNlKDAsIENIVU5LX0xFTkdUSCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVjb3Jkc0NodW5rLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCB7IHJlY29yZHM6IHJlc3VsdHMgfV07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5sYWJlbCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLnRyeXMucHVzaChbMSwgMywgLCA0XSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmFkZEFsbFJlY29yZHNXaXRoQnVsa1JlcXVlc3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHA6IGFwcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkczogcmVjb3Jkc0NodW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3UmVzdWx0cyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBlXzEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JfMS5LaW50b25lQWxsUmVjb3Jkc0Vycm9yKHsgcmVjb3JkczogcmVzdWx0cyB9LCByZWNvcmRzLCBudW1PZkFsbFJlY29yZHMsIGVfMSwgQUREX1JFQ09SRFNfTElNSVQpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLmFkZEFsbFJlY29yZHNSZWN1cnNpdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcDogYXBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHM6IHJlY29yZHMuc2xpY2UoQ0hVTktfTEVOR1RIKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bU9mQWxsUmVjb3JkcywgcmVzdWx0cy5jb25jYXQobmV3UmVzdWx0cykpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmFkZEFsbFJlY29yZHNXaXRoQnVsa1JlcXVlc3QgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBzZXBhcmF0ZWRSZWNvcmRzLCByZXF1ZXN0cywgcmVzdWx0cztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcGFyYXRlZFJlY29yZHMgPSB0aGlzLnNlcGFyYXRlQXJyYXlSZWN1cnNpdmUoQUREX1JFQ09SRFNfTElNSVQsIFtdLCBwYXJhbXMucmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyA9IHNlcGFyYXRlZFJlY29yZHMubWFwKGZ1bmN0aW9uIChyZWNvcmRzKSB7IHJldHVybiAoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogXCJQT1NUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcDogcGFyYW1zLmFwcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkczogcmVjb3JkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5idWxrUmVxdWVzdENsaWVudC5zZW5kKHsgcmVxdWVzdHM6IHJlcXVlc3RzIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IChfYS5zZW50KCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlc3VsdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgcmVzdWx0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChyZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGlkcyA9IHJlc3VsdC5pZHMsIHJldmlzaW9ucyA9IHJlc3VsdC5yZXZpc2lvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpZHMubWFwKGZ1bmN0aW9uIChpZCwgaSkgeyByZXR1cm4gKHsgaWQ6IGlkLCByZXZpc2lvbjogcmV2aXNpb25zW2ldIH0pOyB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHJlY29yZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQocmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgW10pXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLnVwZGF0ZUFsbFJlY29yZHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgdGhpcy51cGRhdGVBbGxSZWNvcmRzUmVjdXJzaXZlKHBhcmFtcywgcGFyYW1zLnJlY29yZHMubGVuZ3RoLCBbXSldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS51cGRhdGVBbGxSZWNvcmRzUmVjdXJzaXZlID0gZnVuY3Rpb24gKHBhcmFtcywgbnVtT2ZBbGxSZWNvcmRzLCByZXN1bHRzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBDSFVOS19MRU5HVEgsIGFwcCwgcmVjb3JkcywgcmVjb3Jkc0NodW5rLCBuZXdSZXN1bHRzLCBlXzI7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBDSFVOS19MRU5HVEggPSB0aGlzLmJ1bGtSZXF1ZXN0Q2xpZW50LlJFUVVFU1RTX0xFTkdUSF9MSU1JVCAqIFVQREFURV9SRUNPUkRTX0xJTUlUO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwID0gcGFyYW1zLmFwcCwgcmVjb3JkcyA9IHBhcmFtcy5yZWNvcmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3Jkc0NodW5rID0gcmVjb3Jkcy5zbGljZSgwLCBDSFVOS19MRU5HVEgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZHNDaHVuay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgeyByZWNvcmRzOiByZXN1bHRzIH1dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzEsIDMsICwgNF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy51cGRhdGVBbGxSZWNvcmRzV2l0aEJ1bGtSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwOiBhcHAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHM6IHJlY29yZHNDaHVuayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ld1Jlc3VsdHMgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgZV8yID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yXzEuS2ludG9uZUFsbFJlY29yZHNFcnJvcih7IHJlY29yZHM6IHJlc3VsdHMgfSwgcmVjb3JkcywgbnVtT2ZBbGxSZWNvcmRzLCBlXzIsIFVQREFURV9SRUNPUkRTX0xJTUlUKTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzIgLypyZXR1cm4qLywgdGhpcy51cGRhdGVBbGxSZWNvcmRzUmVjdXJzaXZlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHA6IGFwcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmRzOiByZWNvcmRzLnNsaWNlKENIVU5LX0xFTkdUSCksXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBudW1PZkFsbFJlY29yZHMsIHJlc3VsdHMuY29uY2F0KG5ld1Jlc3VsdHMpKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS51cGRhdGVBbGxSZWNvcmRzV2l0aEJ1bGtSZXF1ZXN0ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgc2VwYXJhdGVkUmVjb3JkcywgcmVxdWVzdHMsIHJlc3VsdHM7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXBhcmF0ZWRSZWNvcmRzID0gdGhpcy5zZXBhcmF0ZUFycmF5UmVjdXJzaXZlKFVQREFURV9SRUNPUkRTX0xJTUlULCBbXSwgcGFyYW1zLnJlY29yZHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMgPSBzZXBhcmF0ZWRSZWNvcmRzLm1hcChmdW5jdGlvbiAocmVjb3JkcykgeyByZXR1cm4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFwiUFVUXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZHNcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcDogcGFyYW1zLmFwcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3JkczogcmVjb3JkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7IH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5idWxrUmVxdWVzdENsaWVudC5zZW5kKHsgcmVxdWVzdHM6IHJlcXVlc3RzIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IChfYS5zZW50KCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlc3VsdHM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgcmVzdWx0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChyZXN1bHQpIHsgcmV0dXJuIHJlc3VsdC5yZWNvcmRzOyB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHJlY29yZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFjYy5jb25jYXQocmVjb3Jkcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgW10pXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmRlbGV0ZUFsbFJlY29yZHMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGV0ZUFsbFJlY29yZHNSZWN1cnNpdmUocGFyYW1zLCBwYXJhbXMucmVjb3Jkcy5sZW5ndGgpO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5kZWxldGVBbGxSZWNvcmRzUmVjdXJzaXZlID0gZnVuY3Rpb24gKHBhcmFtcywgbnVtT2ZBbGxSZWNvcmRzKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBDSFVOS19MRU5HVEgsIGFwcCwgcmVjb3JkcywgcmVjb3Jkc0NodW5rLCBlXzM7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgICAgICBDSFVOS19MRU5HVEggPSB0aGlzLmJ1bGtSZXF1ZXN0Q2xpZW50LlJFUVVFU1RTX0xFTkdUSF9MSU1JVCAqIERFTEVURV9SRUNPUkRTX0xJTUlUO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXBwID0gcGFyYW1zLmFwcCwgcmVjb3JkcyA9IHBhcmFtcy5yZWNvcmRzO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVjb3Jkc0NodW5rID0gcmVjb3Jkcy5zbGljZSgwLCBDSFVOS19MRU5HVEgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlY29yZHNDaHVuay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywge31dO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgX2EubGFiZWwgPSAxO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzEsIDMsICwgNF0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5kZWxldGVBbGxSZWNvcmRzV2l0aEJ1bGtSZXF1ZXN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwOiBhcHAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHM6IHJlY29yZHNDaHVuayxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgICAgICAgICAgICBlXzMgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgZXJyb3JfMS5LaW50b25lQWxsUmVjb3Jkc0Vycm9yKHt9LCByZWNvcmRzLCBudW1PZkFsbFJlY29yZHMsIGVfMywgREVMRVRFX1JFQ09SRFNfTElNSVQpO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDQ6IHJldHVybiBbMiAvKnJldHVybiovLCB0aGlzLmRlbGV0ZUFsbFJlY29yZHNSZWN1cnNpdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcDogYXBwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZHM6IHJlY29yZHMuc2xpY2UoQ0hVTktfTEVOR1RIKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIG51bU9mQWxsUmVjb3JkcyldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUuZGVsZXRlQWxsUmVjb3Jkc1dpdGhCdWxrUmVxdWVzdCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHNlcGFyYXRlZFJlY29yZHMsIHJlcXVlc3RzO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VwYXJhdGVkUmVjb3JkcyA9IHRoaXMuc2VwYXJhdGVBcnJheVJlY3Vyc2l2ZShERUxFVEVfUkVDT1JEU19MSU1JVCwgW10sIHBhcmFtcy5yZWNvcmRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzID0gc2VwYXJhdGVkUmVjb3Jkcy5tYXAoZnVuY3Rpb24gKHJlY29yZHMpIHsgcmV0dXJuICh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcIkRFTEVURVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmRzXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF5bG9hZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHA6IHBhcmFtcy5hcHAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkczogcmVjb3Jkcy5tYXAoZnVuY3Rpb24gKHJlY29yZCkgeyByZXR1cm4gcmVjb3JkLmlkOyB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2aXNpb25zOiByZWNvcmRzLm1hcChmdW5jdGlvbiAocmVjb3JkKSB7IHJldHVybiByZWNvcmQucmV2aXNpb247IH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmJ1bGtSZXF1ZXN0Q2xpZW50LnNlbmQoeyByZXF1ZXN0czogcmVxdWVzdHMgfSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5zZXBhcmF0ZUFycmF5UmVjdXJzaXZlID0gZnVuY3Rpb24gKHNpemUsIHNlcGFyYXRlZCwgYXJyYXkpIHtcbiAgICAgICAgdmFyIGNodW5rID0gYXJyYXkuc2xpY2UoMCwgc2l6ZSk7XG4gICAgICAgIGlmIChjaHVuay5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBzZXBhcmF0ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuc2VwYXJhdGVBcnJheVJlY3Vyc2l2ZShzaXplLCBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIHNlcGFyYXRlZCwgdHJ1ZSksIFtjaHVua10sIGZhbHNlKSwgYXJyYXkuc2xpY2Uoc2l6ZSkpO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5hZGRSZWNvcmRDb21tZW50ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwicmVjb3JkL2NvbW1lbnRcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wb3N0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLmRlbGV0ZVJlY29yZENvbW1lbnQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmQvY29tbWVudFwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmRlbGV0ZShwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS5nZXRSZWNvcmRDb21tZW50cyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZC9jb21tZW50c1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgUmVjb3JkQ2xpZW50LnByb3RvdHlwZS51cGRhdGVSZWNvcmRBc3NpZ25lZXMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJyZWNvcmQvYXNzaWduZWVzXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBSZWNvcmRDbGllbnQucHJvdG90eXBlLnVwZGF0ZVJlY29yZFN0YXR1cyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZC9zdGF0dXNcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFJlY29yZENsaWVudC5wcm90b3R5cGUudXBkYXRlUmVjb3Jkc1N0YXR1cyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInJlY29yZHMvc3RhdHVzXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICByZXR1cm4gUmVjb3JkQ2xpZW50O1xufShCYXNlQ2xpZW50XzEuQmFzZUNsaWVudCkpO1xuZXhwb3J0cy5SZWNvcmRDbGllbnQgPSBSZWNvcmRDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1SZWNvcmRDbGllbnQuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19leHRlbmRzID0gKHRoaXMgJiYgdGhpcy5fX2V4dGVuZHMpIHx8IChmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XG4gICAgICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xuICAgICAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICB9O1xuICAgIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxuICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICAgICAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cbiAgICAgICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICAgIH07XG59KSgpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TcGFjZUNsaWVudCA9IHZvaWQgMDtcbnZhciBCYXNlQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9CYXNlQ2xpZW50XCIpO1xudmFyIFNwYWNlQ2xpZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhTcGFjZUNsaWVudCwgX3N1cGVyKTtcbiAgICBmdW5jdGlvbiBTcGFjZUNsaWVudCgpIHtcbiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzO1xuICAgIH1cbiAgICBTcGFjZUNsaWVudC5wcm90b3R5cGUuZ2V0U3BhY2UgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJzcGFjZVwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgU3BhY2VDbGllbnQucHJvdG90eXBlLmRlbGV0ZVNwYWNlID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwic3BhY2VcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5kZWxldGUocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFNwYWNlQ2xpZW50LnByb3RvdHlwZS51cGRhdGVTcGFjZUJvZHkgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJzcGFjZS9ib2R5XCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQucHV0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBTcGFjZUNsaWVudC5wcm90b3R5cGUuZ2V0U3BhY2VNZW1iZXJzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwic3BhY2UvbWVtYmVyc1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LmdldChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgU3BhY2VDbGllbnQucHJvdG90eXBlLnVwZGF0ZVNwYWNlTWVtYmVycyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInNwYWNlL21lbWJlcnNcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFNwYWNlQ2xpZW50LnByb3RvdHlwZS51cGRhdGVUaHJlYWQgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJzcGFjZS90aHJlYWRcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wdXQocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFNwYWNlQ2xpZW50LnByb3RvdHlwZS5hZGRUaHJlYWRDb21tZW50ID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICBlbmRwb2ludE5hbWU6IFwic3BhY2UvdGhyZWFkL2NvbW1lbnRcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wb3N0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBTcGFjZUNsaWVudC5wcm90b3R5cGUuYWRkR3Vlc3RzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJndWVzdHNcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5wb3N0KHBhdGgsIHBhcmFtcyk7XG4gICAgfTtcbiAgICBTcGFjZUNsaWVudC5wcm90b3R5cGUuZGVsZXRlR3Vlc3RzID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJndWVzdHNcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNsaWVudC5kZWxldGUocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIFNwYWNlQ2xpZW50LnByb3RvdHlwZS51cGRhdGVTcGFjZUd1ZXN0cyA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgdmFyIHBhdGggPSB0aGlzLmJ1aWxkUGF0aFdpdGhHdWVzdFNwYWNlSWQoe1xuICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcInNwYWNlL2d1ZXN0c1wiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnB1dChwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgU3BhY2VDbGllbnQucHJvdG90eXBlLmFkZFNwYWNlRnJvbVRlbXBsYXRlID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICB2YXIgcGF0aCA9IHRoaXMuYnVpbGRQYXRoKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJ0ZW1wbGF0ZS9zcGFjZVwiLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xpZW50LnBvc3QocGF0aCwgcGFyYW1zKTtcbiAgICB9O1xuICAgIHJldHVybiBTcGFjZUNsaWVudDtcbn0oQmFzZUNsaWVudF8xLkJhc2VDbGllbnQpKTtcbmV4cG9ydHMuU3BhY2VDbGllbnQgPSBTcGFjZUNsaWVudDtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPVNwYWNlQ2xpZW50LmpzLm1hcCIsIi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyA/IHNlbGYuRm9ybURhdGEgOiB3aW5kb3cuRm9ybURhdGE7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2V4dGVuZHMgPSAodGhpcyAmJiB0aGlzLl9fZXh0ZW5kcykgfHwgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcbiAgICAgICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcbiAgICAgICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XG4gICAgICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xuICAgIH07XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gICAgfTtcbn0pKCk7XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkZpbGVDbGllbnQgPSB2b2lkIDA7XG52YXIgZm9ybV9kYXRhXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcImZvcm0tZGF0YVwiKSk7XG52YXIgcGxhdGZvcm1fMSA9IHJlcXVpcmUoXCIuLi9wbGF0Zm9ybVwiKTtcbnZhciBVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3JfMSA9IHJlcXVpcmUoXCIuLi9wbGF0Zm9ybS9VbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3JcIik7XG52YXIgQmFzZUNsaWVudF8xID0gcmVxdWlyZShcIi4vQmFzZUNsaWVudFwiKTtcbnZhciBGaWxlQ2xpZW50ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhGaWxlQ2xpZW50LCBfc3VwZXIpO1xuICAgIGZ1bmN0aW9uIEZpbGVDbGllbnQoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgRmlsZUNsaWVudC5wcm90b3R5cGUudXBsb2FkRmlsZSA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHBhdGgsIGZvcm1EYXRhLCBfYSwgbmFtZV8xLCBkYXRhLCBlXzEsIF9iLCBuYW1lXzIsIGRhdGEsIGZpbGVEYXRhO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYykge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2MubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aCA9IHRoaXMuYnVpbGRQYXRoV2l0aEd1ZXN0U3BhY2VJZCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcG9pbnROYW1lOiBcImZpbGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEgPSBuZXcgZm9ybV9kYXRhXzEuZGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEoXCJwYXRoXCIgaW4gcGFyYW1zLmZpbGUpKSByZXR1cm4gWzMgLypicmVhayovLCA1XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jLmxhYmVsID0gMTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgX2MudHJ5cy5wdXNoKFsxLCAzLCAsIDRdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHBsYXRmb3JtXzEucGxhdGZvcm1EZXBzLnJlYWRGaWxlRnJvbVBhdGgocGFyYW1zLmZpbGUucGF0aCldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgICAgICBfYSA9IF9jLnNlbnQoKSwgbmFtZV8xID0gX2EubmFtZSwgZGF0YSA9IF9hLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXCJmaWxlXCIsIGRhdGEsIG5hbWVfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCA0XTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgICAgICAgICAgZV8xID0gX2Muc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVfMSBpbnN0YW5jZW9mIFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcl8xLlVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInVwbG9hZEZpbGUgZG9lc24ndCBhbGxvdyB0byBhY2NlcHQgYSBmaWxlIHBhdGggaW4gXCIuY29uY2F0KGVfMS5wbGF0Zm9ybSwgXCIgZW52aXJvbm1lbnQuXCIpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IGVfMTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiByZXR1cm4gWzMgLypicmVhayovLCA2XTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA1OlxuICAgICAgICAgICAgICAgICAgICAgICAgX2IgPSBwYXJhbXMuZmlsZSwgbmFtZV8yID0gX2IubmFtZSwgZGF0YSA9IF9iLmRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlRGF0YSA9IHBsYXRmb3JtXzEucGxhdGZvcm1EZXBzLmJ1aWxkRm9ybURhdGFWYWx1ZShkYXRhLCBuYW1lXzIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKFwiZmlsZVwiLCBmaWxlRGF0YSwgbmFtZV8yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9jLmxhYmVsID0gNjtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OiByZXR1cm4gWzIgLypyZXR1cm4qLywgdGhpcy5jbGllbnQucG9zdERhdGEocGF0aCwgZm9ybURhdGEpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBGaWxlQ2xpZW50LnByb3RvdHlwZS5kb3dubG9hZEZpbGUgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBwYXRoID0gdGhpcy5idWlsZFBhdGhXaXRoR3Vlc3RTcGFjZUlkKHtcbiAgICAgICAgICAgIGVuZHBvaW50TmFtZTogXCJmaWxlXCIsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcy5jbGllbnQuZ2V0RGF0YShwYXRoLCBwYXJhbXMpO1xuICAgIH07XG4gICAgcmV0dXJuIEZpbGVDbGllbnQ7XG59KEJhc2VDbGllbnRfMS5CYXNlQ2xpZW50KSk7XG5leHBvcnRzLkZpbGVDbGllbnQgPSBGaWxlQ2xpZW50O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9RmlsZUNsaWVudC5qcy5tYXAiLCIvLyBBeGlvcyB2MS43LjIgQ29weXJpZ2h0IChjKSAyMDI0IE1hdHQgWmFicmlza2llIGFuZCBjb250cmlidXRvcnNcbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuLy8gdXRpbHMgaXMgYSBsaWJyYXJ5IG9mIGdlbmVyaWMgaGVscGVyIGZ1bmN0aW9ucyBub24tc3BlY2lmaWMgdG8gYXhpb3NcblxuY29uc3Qge3RvU3RyaW5nfSA9IE9iamVjdC5wcm90b3R5cGU7XG5jb25zdCB7Z2V0UHJvdG90eXBlT2Z9ID0gT2JqZWN0O1xuXG5jb25zdCBraW5kT2YgPSAoY2FjaGUgPT4gdGhpbmcgPT4ge1xuICAgIGNvbnN0IHN0ciA9IHRvU3RyaW5nLmNhbGwodGhpbmcpO1xuICAgIHJldHVybiBjYWNoZVtzdHJdIHx8IChjYWNoZVtzdHJdID0gc3RyLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpKTtcbn0pKE9iamVjdC5jcmVhdGUobnVsbCkpO1xuXG5jb25zdCBraW5kT2ZUZXN0ID0gKHR5cGUpID0+IHtcbiAgdHlwZSA9IHR5cGUudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuICh0aGluZykgPT4ga2luZE9mKHRoaW5nKSA9PT0gdHlwZVxufTtcblxuY29uc3QgdHlwZU9mVGVzdCA9IHR5cGUgPT4gdGhpbmcgPT4gdHlwZW9mIHRoaW5nID09PSB0eXBlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3Qge2lzQXJyYXl9ID0gQXJyYXk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVbmRlZmluZWQgPSB0eXBlT2ZUZXN0KCd1bmRlZmluZWQnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiBpc0Z1bmN0aW9uKHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNBcnJheUJ1ZmZlciA9IGtpbmRPZlRlc3QoJ0FycmF5QnVmZmVyJyk7XG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICBsZXQgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmIChpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyaW5nID0gdHlwZU9mVGVzdCgnc3RyaW5nJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGdW5jdGlvbiA9IHR5cGVPZlRlc3QoJ2Z1bmN0aW9uJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNOdW1iZXIgPSB0eXBlT2ZUZXN0KCdudW1iZXInKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNPYmplY3QgPSAodGhpbmcpID0+IHRoaW5nICE9PSBudWxsICYmIHR5cGVvZiB0aGluZyA9PT0gJ29iamVjdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCb29sZWFuXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCb29sZWFuLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCb29sZWFuID0gdGhpbmcgPT4gdGhpbmcgPT09IHRydWUgfHwgdGhpbmcgPT09IGZhbHNlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUGxhaW5PYmplY3QgPSAodmFsKSA9PiB7XG4gIGlmIChraW5kT2YodmFsKSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZih2YWwpO1xuICByZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbCkgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsKTtcbn07XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0RhdGUgPSBraW5kT2ZUZXN0KCdEYXRlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGUgPSBraW5kT2ZUZXN0KCdGaWxlJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCbG9iXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEJsb2IsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGaWxlTGlzdCA9IGtpbmRPZlRlc3QoJ0ZpbGVMaXN0Jyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBTdHJlYW1cbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNTdHJlYW0gPSAodmFsKSA9PiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gRm9ybURhdGEsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0Zvcm1EYXRhID0gKHRoaW5nKSA9PiB7XG4gIGxldCBraW5kO1xuICByZXR1cm4gdGhpbmcgJiYgKFxuICAgICh0eXBlb2YgRm9ybURhdGEgPT09ICdmdW5jdGlvbicgJiYgdGhpbmcgaW5zdGFuY2VvZiBGb3JtRGF0YSkgfHwgKFxuICAgICAgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIChcbiAgICAgICAgKGtpbmQgPSBraW5kT2YodGhpbmcpKSA9PT0gJ2Zvcm1kYXRhJyB8fFxuICAgICAgICAvLyBkZXRlY3QgZm9ybS1kYXRhIGluc3RhbmNlXG4gICAgICAgIChraW5kID09PSAnb2JqZWN0JyAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRvU3RyaW5nKSAmJiB0aGluZy50b1N0cmluZygpID09PSAnW29iamVjdCBGb3JtRGF0YV0nKVxuICAgICAgKVxuICAgIClcbiAgKVxufTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzVVJMU2VhcmNoUGFyYW1zID0ga2luZE9mVGVzdCgnVVJMU2VhcmNoUGFyYW1zJyk7XG5cbmNvbnN0IFtpc1JlYWRhYmxlU3RyZWFtLCBpc1JlcXVlc3QsIGlzUmVzcG9uc2UsIGlzSGVhZGVyc10gPSBbJ1JlYWRhYmxlU3RyZWFtJywgJ1JlcXVlc3QnLCAnUmVzcG9uc2UnLCAnSGVhZGVycyddLm1hcChraW5kT2ZUZXN0KTtcblxuLyoqXG4gKiBUcmltIGV4Y2VzcyB3aGl0ZXNwYWNlIG9mZiB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyIFRoZSBTdHJpbmcgdG8gdHJpbVxuICpcbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBTdHJpbmcgZnJlZWQgb2YgZXhjZXNzIHdoaXRlc3BhY2VcbiAqL1xuY29uc3QgdHJpbSA9IChzdHIpID0+IHN0ci50cmltID9cbiAgc3RyLnRyaW0oKSA6IHN0ci5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywgJycpO1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbiBBcnJheSBvciBhbiBPYmplY3QgaW52b2tpbmcgYSBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmIGBvYmpgIGlzIGFuIEFycmF5IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwgaW5kZXgsIGFuZCBjb21wbGV0ZSBhcnJheSBmb3IgZWFjaCBpdGVtLlxuICpcbiAqIElmICdvYmonIGlzIGFuIE9iamVjdCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGtleSwgYW5kIGNvbXBsZXRlIG9iamVjdCBmb3IgZWFjaCBwcm9wZXJ0eS5cbiAqXG4gKiBAcGFyYW0ge09iamVjdHxBcnJheX0gb2JqIFRoZSBvYmplY3QgdG8gaXRlcmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGNhbGxiYWNrIHRvIGludm9rZSBmb3IgZWFjaCBpdGVtXG4gKlxuICogQHBhcmFtIHtCb29sZWFufSBbYWxsT3duS2V5cyA9IGZhbHNlXVxuICogQHJldHVybnMge2FueX1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuLCB7YWxsT3duS2V5cyA9IGZhbHNlfSA9IHt9KSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IGk7XG4gIGxldCBsO1xuXG4gIC8vIEZvcmNlIGFuIGFycmF5IGlmIG5vdCBhbHJlYWR5IHNvbWV0aGluZyBpdGVyYWJsZVxuICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICBvYmogPSBbb2JqXTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgYXJyYXkgdmFsdWVzXG4gICAgZm9yIChpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBjb25zdCBrZXlzID0gYWxsT3duS2V5cyA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikgOiBPYmplY3Qua2V5cyhvYmopO1xuICAgIGNvbnN0IGxlbiA9IGtleXMubGVuZ3RoO1xuICAgIGxldCBrZXk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGtleSA9IGtleXNbaV07XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRLZXkob2JqLCBrZXkpIHtcbiAga2V5ID0ga2V5LnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICBsZXQgX2tleTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBfa2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoa2V5ID09PSBfa2V5LnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHJldHVybiBfa2V5O1xuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cblxuY29uc3QgX2dsb2JhbCA9ICgoKSA9PiB7XG4gIC8qZXNsaW50IG5vLXVuZGVmOjAqL1xuICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09IFwidW5kZWZpbmVkXCIpIHJldHVybiBnbG9iYWxUaGlzO1xuICByZXR1cm4gdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsKVxufSkoKTtcblxuY29uc3QgaXNDb250ZXh0RGVmaW5lZCA9IChjb250ZXh0KSA9PiAhaXNVbmRlZmluZWQoY29udGV4dCkgJiYgY29udGV4dCAhPT0gX2dsb2JhbDtcblxuLyoqXG4gKiBBY2NlcHRzIHZhcmFyZ3MgZXhwZWN0aW5nIGVhY2ggYXJndW1lbnQgdG8gYmUgYW4gb2JqZWN0LCB0aGVuXG4gKiBpbW11dGFibHkgbWVyZ2VzIHRoZSBwcm9wZXJ0aWVzIG9mIGVhY2ggb2JqZWN0IGFuZCByZXR1cm5zIHJlc3VsdC5cbiAqXG4gKiBXaGVuIG11bHRpcGxlIG9iamVjdHMgY29udGFpbiB0aGUgc2FtZSBrZXkgdGhlIGxhdGVyIG9iamVjdCBpblxuICogdGhlIGFyZ3VtZW50cyBsaXN0IHdpbGwgdGFrZSBwcmVjZWRlbmNlLlxuICpcbiAqIEV4YW1wbGU6XG4gKlxuICogYGBganNcbiAqIHZhciByZXN1bHQgPSBtZXJnZSh7Zm9vOiAxMjN9LCB7Zm9vOiA0NTZ9KTtcbiAqIGNvbnNvbGUubG9nKHJlc3VsdC5mb28pOyAvLyBvdXRwdXRzIDQ1NlxuICogYGBgXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9iajEgT2JqZWN0IHRvIG1lcmdlXG4gKlxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICBjb25zdCB7Y2FzZWxlc3N9ID0gaXNDb250ZXh0RGVmaW5lZCh0aGlzKSAmJiB0aGlzIHx8IHt9O1xuICBjb25zdCByZXN1bHQgPSB7fTtcbiAgY29uc3QgYXNzaWduVmFsdWUgPSAodmFsLCBrZXkpID0+IHtcbiAgICBjb25zdCB0YXJnZXRLZXkgPSBjYXNlbGVzcyAmJiBmaW5kS2V5KHJlc3VsdCwga2V5KSB8fCBrZXk7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W3RhcmdldEtleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZShyZXN1bHRbdGFyZ2V0S2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W3RhcmdldEtleV0gPSB2YWw7XG4gICAgfVxuICB9O1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGFyZ3VtZW50c1tpXSAmJiBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzXVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5jb25zdCBleHRlbmQgPSAoYSwgYiwgdGhpc0FyZywge2FsbE93bktleXN9PSB7fSkgPT4ge1xuICBmb3JFYWNoKGIsICh2YWwsIGtleSkgPT4ge1xuICAgIGlmICh0aGlzQXJnICYmIGlzRnVuY3Rpb24odmFsKSkge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9LCB7YWxsT3duS2V5c30pO1xuICByZXR1cm4gYTtcbn07XG5cbi8qKlxuICogUmVtb3ZlIGJ5dGUgb3JkZXIgbWFya2VyLiBUaGlzIGNhdGNoZXMgRUYgQkIgQkYgKHRoZSBVVEYtOCBCT00pXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbnRlbnQgd2l0aCBCT01cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBjb250ZW50IHZhbHVlIHdpdGhvdXQgQk9NXG4gKi9cbmNvbnN0IHN0cmlwQk9NID0gKGNvbnRlbnQpID0+IHtcbiAgaWYgKGNvbnRlbnQuY2hhckNvZGVBdCgwKSA9PT0gMHhGRUZGKSB7XG4gICAgY29udGVudCA9IGNvbnRlbnQuc2xpY2UoMSk7XG4gIH1cbiAgcmV0dXJuIGNvbnRlbnQ7XG59O1xuXG4vKipcbiAqIEluaGVyaXQgdGhlIHByb3RvdHlwZSBtZXRob2RzIGZyb20gb25lIGNvbnN0cnVjdG9yIGludG8gYW5vdGhlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IHN1cGVyQ29uc3RydWN0b3JcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcHJvcHNdXG4gKiBAcGFyYW0ge29iamVjdH0gW2Rlc2NyaXB0b3JzXVxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5jb25zdCBpbmhlcml0cyA9IChjb25zdHJ1Y3Rvciwgc3VwZXJDb25zdHJ1Y3RvciwgcHJvcHMsIGRlc2NyaXB0b3JzKSA9PiB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGRlc2NyaXB0b3JzKTtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25zdHJ1Y3RvciwgJ3N1cGVyJywge1xuICAgIHZhbHVlOiBzdXBlckNvbnN0cnVjdG9yLnByb3RvdHlwZVxuICB9KTtcbiAgcHJvcHMgJiYgT2JqZWN0LmFzc2lnbihjb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3BzKTtcbn07XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb258Qm9vbGVhbn0gW2ZpbHRlcl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wRmlsdGVyXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmNvbnN0IHRvRmxhdE9iamVjdCA9IChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlciwgcHJvcEZpbHRlcikgPT4ge1xuICBsZXQgcHJvcHM7XG4gIGxldCBpO1xuICBsZXQgcHJvcDtcbiAgY29uc3QgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBpZiAoc291cmNlT2JqID09IG51bGwpIHJldHVybiBkZXN0T2JqO1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCghcHJvcEZpbHRlciB8fCBwcm9wRmlsdGVyKHByb3AsIHNvdXJjZU9iaiwgZGVzdE9iaikpICYmICFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gZmlsdGVyICE9PSBmYWxzZSAmJiBnZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIHN0cmluZyBlbmRzIHdpdGggdGhlIGNoYXJhY3RlcnMgb2YgYSBzcGVjaWZpZWQgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtOdW1iZXJ9IFtwb3NpdGlvbj0gMF1cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgZW5kc1dpdGggPSAoc3RyLCBzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSA9PiB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCB8fCBwb3NpdGlvbiA+IHN0ci5sZW5ndGgpIHtcbiAgICBwb3NpdGlvbiA9IHN0ci5sZW5ndGg7XG4gIH1cbiAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgY29uc3QgbGFzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7XG4gIHJldHVybiBsYXN0SW5kZXggIT09IC0xICYmIGxhc3RJbmRleCA9PT0gcG9zaXRpb247XG59O1xuXG5cbi8qKlxuICogUmV0dXJucyBuZXcgYXJyYXkgZnJvbSBhcnJheSBsaWtlIG9iamVjdCBvciBudWxsIGlmIGZhaWxlZFxuICpcbiAqIEBwYXJhbSB7Kn0gW3RoaW5nXVxuICpcbiAqIEByZXR1cm5zIHs/QXJyYXl9XG4gKi9cbmNvbnN0IHRvQXJyYXkgPSAodGhpbmcpID0+IHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIG51bGw7XG4gIGlmIChpc0FycmF5KHRoaW5nKSkgcmV0dXJuIHRoaW5nO1xuICBsZXQgaSA9IHRoaW5nLmxlbmd0aDtcbiAgaWYgKCFpc051bWJlcihpKSkgcmV0dXJuIG51bGw7XG4gIGNvbnN0IGFyciA9IG5ldyBBcnJheShpKTtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBhcnJbaV0gPSB0aGluZ1tpXTtcbiAgfVxuICByZXR1cm4gYXJyO1xufTtcblxuLyoqXG4gKiBDaGVja2luZyBpZiB0aGUgVWludDhBcnJheSBleGlzdHMgYW5kIGlmIGl0IGRvZXMsIGl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGVcbiAqIHRoaW5nIHBhc3NlZCBpbiBpcyBhbiBpbnN0YW5jZSBvZiBVaW50OEFycmF5XG4gKlxuICogQHBhcmFtIHtUeXBlZEFycmF5fVxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmNvbnN0IGlzVHlwZWRBcnJheSA9IChUeXBlZEFycmF5ID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIHRoaW5nID0+IHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG4vKipcbiAqIEZvciBlYWNoIGVudHJ5IGluIHRoZSBvYmplY3QsIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGtleSBhbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZW50cnkuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGZvckVhY2hFbnRyeSA9IChvYmosIGZuKSA9PiB7XG4gIGNvbnN0IGdlbmVyYXRvciA9IG9iaiAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXTtcblxuICBjb25zdCBpdGVyYXRvciA9IGdlbmVyYXRvci5jYWxsKG9iaik7XG5cbiAgbGV0IHJlc3VsdDtcblxuICB3aGlsZSAoKHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKSkgJiYgIXJlc3VsdC5kb25lKSB7XG4gICAgY29uc3QgcGFpciA9IHJlc3VsdC52YWx1ZTtcbiAgICBmbi5jYWxsKG9iaiwgcGFpclswXSwgcGFpclsxXSk7XG4gIH1cbn07XG5cbi8qKlxuICogSXQgdGFrZXMgYSByZWd1bGFyIGV4cHJlc3Npb24gYW5kIGEgc3RyaW5nLCBhbmQgcmV0dXJucyBhbiBhcnJheSBvZiBhbGwgdGhlIG1hdGNoZXNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVnRXhwIC0gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB0byBtYXRjaCBhZ2FpbnN0LlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gc2VhcmNoLlxuICpcbiAqIEByZXR1cm5zIHtBcnJheTxib29sZWFuPn1cbiAqL1xuY29uc3QgbWF0Y2hBbGwgPSAocmVnRXhwLCBzdHIpID0+IHtcbiAgbGV0IG1hdGNoZXM7XG4gIGNvbnN0IGFyciA9IFtdO1xuXG4gIHdoaWxlICgobWF0Y2hlcyA9IHJlZ0V4cC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgYXJyLnB1c2gobWF0Y2hlcyk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufTtcblxuLyogQ2hlY2tpbmcgaWYgdGhlIGtpbmRPZlRlc3QgZnVuY3Rpb24gcmV0dXJucyB0cnVlIHdoZW4gcGFzc2VkIGFuIEhUTUxGb3JtRWxlbWVudC4gKi9cbmNvbnN0IGlzSFRNTEZvcm0gPSBraW5kT2ZUZXN0KCdIVE1MRm9ybUVsZW1lbnQnKTtcblxuY29uc3QgdG9DYW1lbENhc2UgPSBzdHIgPT4ge1xuICByZXR1cm4gc3RyLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxcbiAgICBmdW5jdGlvbiByZXBsYWNlcihtLCBwMSwgcDIpIHtcbiAgICAgIHJldHVybiBwMS50b1VwcGVyQ2FzZSgpICsgcDI7XG4gICAgfVxuICApO1xufTtcblxuLyogQ3JlYXRpbmcgYSBmdW5jdGlvbiB0aGF0IHdpbGwgY2hlY2sgaWYgYW4gb2JqZWN0IGhhcyBhIHByb3BlcnR5LiAqL1xuY29uc3QgaGFzT3duUHJvcGVydHkgPSAoKHtoYXNPd25Qcm9wZXJ0eX0pID0+IChvYmosIHByb3ApID0+IGhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkoT2JqZWN0LnByb3RvdHlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFJlZ0V4cCBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1JlZ0V4cCA9IGtpbmRPZlRlc3QoJ1JlZ0V4cCcpO1xuXG5jb25zdCByZWR1Y2VEZXNjcmlwdG9ycyA9IChvYmosIHJlZHVjZXIpID0+IHtcbiAgY29uc3QgZGVzY3JpcHRvcnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmopO1xuICBjb25zdCByZWR1Y2VkRGVzY3JpcHRvcnMgPSB7fTtcblxuICBmb3JFYWNoKGRlc2NyaXB0b3JzLCAoZGVzY3JpcHRvciwgbmFtZSkgPT4ge1xuICAgIGxldCByZXQ7XG4gICAgaWYgKChyZXQgPSByZWR1Y2VyKGRlc2NyaXB0b3IsIG5hbWUsIG9iaikpICE9PSBmYWxzZSkge1xuICAgICAgcmVkdWNlZERlc2NyaXB0b3JzW25hbWVdID0gcmV0IHx8IGRlc2NyaXB0b3I7XG4gICAgfVxuICB9KTtcblxuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhvYmosIHJlZHVjZWREZXNjcmlwdG9ycyk7XG59O1xuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoJ3dyaXRhYmxlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQgPSAoKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcXCcnICsgbmFtZSArICdcXCcnKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn07XG5cbmNvbnN0IHRvT2JqZWN0U2V0ID0gKGFycmF5T3JTdHJpbmcsIGRlbGltaXRlcikgPT4ge1xuICBjb25zdCBvYmogPSB7fTtcblxuICBjb25zdCBkZWZpbmUgPSAoYXJyKSA9PiB7XG4gICAgYXJyLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgb2JqW3ZhbHVlXSA9IHRydWU7XG4gICAgfSk7XG4gIH07XG5cbiAgaXNBcnJheShhcnJheU9yU3RyaW5nKSA/IGRlZmluZShhcnJheU9yU3RyaW5nKSA6IGRlZmluZShTdHJpbmcoYXJyYXlPclN0cmluZykuc3BsaXQoZGVsaW1pdGVyKSk7XG5cbiAgcmV0dXJuIG9iajtcbn07XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuY29uc3QgdG9GaW5pdGVOdW1iZXIgPSAodmFsdWUsIGRlZmF1bHRWYWx1ZSkgPT4ge1xuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUodmFsdWUgPSArdmFsdWUpID8gdmFsdWUgOiBkZWZhdWx0VmFsdWU7XG59O1xuXG5jb25zdCBBTFBIQSA9ICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eic7XG5cbmNvbnN0IERJR0lUID0gJzAxMjM0NTY3ODknO1xuXG5jb25zdCBBTFBIQUJFVCA9IHtcbiAgRElHSVQsXG4gIEFMUEhBLFxuICBBTFBIQV9ESUdJVDogQUxQSEEgKyBBTFBIQS50b1VwcGVyQ2FzZSgpICsgRElHSVRcbn07XG5cbmNvbnN0IGdlbmVyYXRlU3RyaW5nID0gKHNpemUgPSAxNiwgYWxwaGFiZXQgPSBBTFBIQUJFVC5BTFBIQV9ESUdJVCkgPT4ge1xuICBsZXQgc3RyID0gJyc7XG4gIGNvbnN0IHtsZW5ndGh9ID0gYWxwaGFiZXQ7XG4gIHdoaWxlIChzaXplLS0pIHtcbiAgICBzdHIgKz0gYWxwaGFiZXRbTWF0aC5yYW5kb20oKSAqIGxlbmd0aHwwXTtcbiAgfVxuXG4gIHJldHVybiBzdHI7XG59O1xuXG4vKipcbiAqIElmIHRoZSB0aGluZyBpcyBhIEZvcm1EYXRhIG9iamVjdCwgcmV0dXJuIHRydWUsIG90aGVyd2lzZSByZXR1cm4gZmFsc2UuXG4gKlxuICogQHBhcmFtIHt1bmtub3dufSB0aGluZyAtIFRoZSB0aGluZyB0byBjaGVjay5cbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNTcGVjQ29tcGxpYW50Rm9ybSh0aGluZykge1xuICByZXR1cm4gISEodGhpbmcgJiYgaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIHRoaW5nW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YScgJiYgdGhpbmdbU3ltYm9sLml0ZXJhdG9yXSk7XG59XG5cbmNvbnN0IHRvSlNPTk9iamVjdCA9IChvYmopID0+IHtcbiAgY29uc3Qgc3RhY2sgPSBuZXcgQXJyYXkoMTApO1xuXG4gIGNvbnN0IHZpc2l0ID0gKHNvdXJjZSwgaSkgPT4ge1xuXG4gICAgaWYgKGlzT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIGlmIChzdGFjay5pbmRleE9mKHNvdXJjZSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmKCEoJ3RvSlNPTicgaW4gc291cmNlKSkge1xuICAgICAgICBzdGFja1tpXSA9IHNvdXJjZTtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gaXNBcnJheShzb3VyY2UpID8gW10gOiB7fTtcblxuICAgICAgICBmb3JFYWNoKHNvdXJjZSwgKHZhbHVlLCBrZXkpID0+IHtcbiAgICAgICAgICBjb25zdCByZWR1Y2VkVmFsdWUgPSB2aXNpdCh2YWx1ZSwgaSArIDEpO1xuICAgICAgICAgICFpc1VuZGVmaW5lZChyZWR1Y2VkVmFsdWUpICYmICh0YXJnZXRba2V5XSA9IHJlZHVjZWRWYWx1ZSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHN0YWNrW2ldID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfTtcblxuICByZXR1cm4gdmlzaXQob2JqLCAwKTtcbn07XG5cbmNvbnN0IGlzQXN5bmNGbiA9IGtpbmRPZlRlc3QoJ0FzeW5jRnVuY3Rpb24nKTtcblxuY29uc3QgaXNUaGVuYWJsZSA9ICh0aGluZykgPT5cbiAgdGhpbmcgJiYgKGlzT2JqZWN0KHRoaW5nKSB8fCBpc0Z1bmN0aW9uKHRoaW5nKSkgJiYgaXNGdW5jdGlvbih0aGluZy50aGVuKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLmNhdGNoKTtcblxudmFyIHV0aWxzJDEgPSB7XG4gIGlzQXJyYXksXG4gIGlzQXJyYXlCdWZmZXIsXG4gIGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldyxcbiAgaXNTdHJpbmcsXG4gIGlzTnVtYmVyLFxuICBpc0Jvb2xlYW4sXG4gIGlzT2JqZWN0LFxuICBpc1BsYWluT2JqZWN0LFxuICBpc1JlYWRhYmxlU3RyZWFtLFxuICBpc1JlcXVlc3QsXG4gIGlzUmVzcG9uc2UsXG4gIGlzSGVhZGVycyxcbiAgaXNVbmRlZmluZWQsXG4gIGlzRGF0ZSxcbiAgaXNGaWxlLFxuICBpc0Jsb2IsXG4gIGlzUmVnRXhwLFxuICBpc0Z1bmN0aW9uLFxuICBpc1N0cmVhbSxcbiAgaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdCxcbiAgZm9yRWFjaCxcbiAgbWVyZ2UsXG4gIGV4dGVuZCxcbiAgdHJpbSxcbiAgc3RyaXBCT00sXG4gIGluaGVyaXRzLFxuICB0b0ZsYXRPYmplY3QsXG4gIGtpbmRPZixcbiAga2luZE9mVGVzdCxcbiAgZW5kc1dpdGgsXG4gIHRvQXJyYXksXG4gIGZvckVhY2hFbnRyeSxcbiAgbWF0Y2hBbGwsXG4gIGlzSFRNTEZvcm0sXG4gIGhhc093blByb3BlcnR5LFxuICBoYXNPd25Qcm9wOiBoYXNPd25Qcm9wZXJ0eSwgLy8gYW4gYWxpYXMgdG8gYXZvaWQgRVNMaW50IG5vLXByb3RvdHlwZS1idWlsdGlucyBkZXRlY3Rpb25cbiAgcmVkdWNlRGVzY3JpcHRvcnMsXG4gIGZyZWV6ZU1ldGhvZHMsXG4gIHRvT2JqZWN0U2V0LFxuICB0b0NhbWVsQ2FzZSxcbiAgbm9vcCxcbiAgdG9GaW5pdGVOdW1iZXIsXG4gIGZpbmRLZXksXG4gIGdsb2JhbDogX2dsb2JhbCxcbiAgaXNDb250ZXh0RGVmaW5lZCxcbiAgQUxQSEFCRVQsXG4gIGdlbmVyYXRlU3RyaW5nLFxuICBpc1NwZWNDb21wbGlhbnRGb3JtLFxuICB0b0pTT05PYmplY3QsXG4gIGlzQXN5bmNGbixcbiAgaXNUaGVuYWJsZVxufTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIEF4aW9zRXJyb3IobWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSkge1xuICBFcnJvci5jYWxsKHRoaXMpO1xuXG4gIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKCkpLnN0YWNrO1xuICB9XG5cbiAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTtcbiAgdGhpcy5uYW1lID0gJ0F4aW9zRXJyb3InO1xuICBjb2RlICYmICh0aGlzLmNvZGUgPSBjb2RlKTtcbiAgY29uZmlnICYmICh0aGlzLmNvbmZpZyA9IGNvbmZpZyk7XG4gIHJlcXVlc3QgJiYgKHRoaXMucmVxdWVzdCA9IHJlcXVlc3QpO1xuICByZXNwb25zZSAmJiAodGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlKTtcbn1cblxudXRpbHMkMS5pbmhlcml0cyhBeGlvc0Vycm9yLCBFcnJvciwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB1dGlscyQxLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksXG4gICAgICBjb2RlOiB0aGlzLmNvZGUsXG4gICAgICBzdGF0dXM6IHRoaXMucmVzcG9uc2UgJiYgdGhpcy5yZXNwb25zZS5zdGF0dXMgPyB0aGlzLnJlc3BvbnNlLnN0YXR1cyA6IG51bGxcbiAgICB9O1xuICB9XG59KTtcblxuY29uc3QgcHJvdG90eXBlJDEgPSBBeGlvc0Vycm9yLnByb3RvdHlwZTtcbmNvbnN0IGRlc2NyaXB0b3JzID0ge307XG5cbltcbiAgJ0VSUl9CQURfT1BUSU9OX1ZBTFVFJyxcbiAgJ0VSUl9CQURfT1BUSU9OJyxcbiAgJ0VDT05OQUJPUlRFRCcsXG4gICdFVElNRURPVVQnLFxuICAnRVJSX05FVFdPUksnLFxuICAnRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUycsXG4gICdFUlJfREVQUkVDQVRFRCcsXG4gICdFUlJfQkFEX1JFU1BPTlNFJyxcbiAgJ0VSUl9CQURfUkVRVUVTVCcsXG4gICdFUlJfQ0FOQ0VMRUQnLFxuICAnRVJSX05PVF9TVVBQT1JUJyxcbiAgJ0VSUl9JTlZBTElEX1VSTCdcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5dLmZvckVhY2goY29kZSA9PiB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlJDEsICdpc0F4aW9zRXJyb3InLCB7dmFsdWU6IHRydWV9KTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbkF4aW9zRXJyb3IuZnJvbSA9IChlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpID0+IHtcbiAgY29uc3QgYXhpb3NFcnJvciA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlJDEpO1xuXG4gIHV0aWxzJDEudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9LCBwcm9wID0+IHtcbiAgICByZXR1cm4gcHJvcCAhPT0gJ2lzQXhpb3NFcnJvcic7XG4gIH0pO1xuXG4gIEF4aW9zRXJyb3IuY2FsbChheGlvc0Vycm9yLCBlcnJvci5tZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKTtcblxuICBheGlvc0Vycm9yLmNhdXNlID0gZXJyb3I7XG5cbiAgYXhpb3NFcnJvci5uYW1lID0gZXJyb3IubmFtZTtcblxuICBjdXN0b21Qcm9wcyAmJiBPYmplY3QuYXNzaWduKGF4aW9zRXJyb3IsIGN1c3RvbVByb3BzKTtcblxuICByZXR1cm4gYXhpb3NFcnJvcjtcbn07XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzdHJpY3RcbnZhciBodHRwQWRhcHRlciA9IG51bGw7XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBpZiB0aGUgZ2l2ZW4gdGhpbmcgaXMgYSBhcnJheSBvciBqcyBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHRoaW5nIC0gVGhlIG9iamVjdCBvciBhcnJheSB0byBiZSB2aXNpdGVkLlxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1Zpc2l0YWJsZSh0aGluZykge1xuICByZXR1cm4gdXRpbHMkMS5pc1BsYWluT2JqZWN0KHRoaW5nKSB8fCB1dGlscyQxLmlzQXJyYXkodGhpbmcpO1xufVxuXG4vKipcbiAqIEl0IHJlbW92ZXMgdGhlIGJyYWNrZXRzIGZyb20gdGhlIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBwYXJhbWV0ZXIuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gdGhlIGtleSB3aXRob3V0IHRoZSBicmFja2V0cy5cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQnJhY2tldHMoa2V5KSB7XG4gIHJldHVybiB1dGlscyQxLmVuZHNXaXRoKGtleSwgJ1tdJykgPyBrZXkuc2xpY2UoMCwgLTIpIDoga2V5O1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGF0aCwgYSBrZXksIGFuZCBhIGJvb2xlYW4sIGFuZCByZXR1cm5zIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGggLSBUaGUgcGF0aCB0byB0aGUgY3VycmVudCBrZXkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgY3VycmVudCBvYmplY3QgYmVpbmcgaXRlcmF0ZWQgb3Zlci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkb3RzIC0gSWYgdHJ1ZSwgdGhlIGtleSB3aWxsIGJlIHJlbmRlcmVkIHdpdGggZG90cyBpbnN0ZWFkIG9mIGJyYWNrZXRzLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqL1xuZnVuY3Rpb24gcmVuZGVyS2V5KHBhdGgsIGtleSwgZG90cykge1xuICBpZiAoIXBhdGgpIHJldHVybiBrZXk7XG4gIHJldHVybiBwYXRoLmNvbmNhdChrZXkpLm1hcChmdW5jdGlvbiBlYWNoKHRva2VuLCBpKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgdG9rZW4gPSByZW1vdmVCcmFja2V0cyh0b2tlbik7XG4gICAgcmV0dXJuICFkb3RzICYmIGkgPyAnWycgKyB0b2tlbiArICddJyA6IHRva2VuO1xuICB9KS5qb2luKGRvdHMgPyAnLicgOiAnJyk7XG59XG5cbi8qKlxuICogSWYgdGhlIGFycmF5IGlzIGFuIGFycmF5IGFuZCBub25lIG9mIGl0cyBlbGVtZW50cyBhcmUgdmlzaXRhYmxlLCB0aGVuIGl0J3MgYSBmbGF0IGFycmF5LlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8YW55Pn0gYXJyIC0gVGhlIGFycmF5IHRvIGNoZWNrXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzRmxhdEFycmF5KGFycikge1xuICByZXR1cm4gdXRpbHMkMS5pc0FycmF5KGFycikgJiYgIWFyci5zb21lKGlzVmlzaXRhYmxlKTtcbn1cblxuY29uc3QgcHJlZGljYXRlcyA9IHV0aWxzJDEudG9GbGF0T2JqZWN0KHV0aWxzJDEsIHt9LCBudWxsLCBmdW5jdGlvbiBmaWx0ZXIocHJvcCkge1xuICByZXR1cm4gL15pc1tBLVpdLy50ZXN0KHByb3ApO1xufSk7XG5cbi8qKlxuICogQ29udmVydCBhIGRhdGEgb2JqZWN0IHRvIEZvcm1EYXRhXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICogQHBhcmFtIHs/T2JqZWN0fSBbZm9ybURhdGFdXG4gKiBAcGFyYW0gez9PYmplY3R9IFtvcHRpb25zXVxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMudmlzaXRvcl1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMubWV0YVRva2VucyA9IHRydWVdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLmRvdHMgPSBmYWxzZV1cbiAqIEBwYXJhbSB7P0Jvb2xlYW59IFtvcHRpb25zLmluZGV4ZXMgPSBmYWxzZV1cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG4vKipcbiAqIEl0IGNvbnZlcnRzIGFuIG9iamVjdCBpbnRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGNvbnZlcnQgdG8gZm9ybSBkYXRhLlxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1EYXRhIC0gVGhlIEZvcm1EYXRhIG9iamVjdCB0byBhcHBlbmQgdG8uXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCF1dGlscyQxLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBmb3JtRGF0YSA9IGZvcm1EYXRhIHx8IG5ldyAoRm9ybURhdGEpKCk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIG9wdGlvbnMgPSB1dGlscyQxLnRvRmxhdE9iamVjdChvcHRpb25zLCB7XG4gICAgbWV0YVRva2VuczogdHJ1ZSxcbiAgICBkb3RzOiBmYWxzZSxcbiAgICBpbmRleGVzOiBmYWxzZVxuICB9LCBmYWxzZSwgZnVuY3Rpb24gZGVmaW5lZChvcHRpb24sIHNvdXJjZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICAgIHJldHVybiAhdXRpbHMkMS5pc1VuZGVmaW5lZChzb3VyY2Vbb3B0aW9uXSk7XG4gIH0pO1xuXG4gIGNvbnN0IG1ldGFUb2tlbnMgPSBvcHRpb25zLm1ldGFUb2tlbnM7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICBjb25zdCB2aXNpdG9yID0gb3B0aW9ucy52aXNpdG9yIHx8IGRlZmF1bHRWaXNpdG9yO1xuICBjb25zdCBkb3RzID0gb3B0aW9ucy5kb3RzO1xuICBjb25zdCBpbmRleGVzID0gb3B0aW9ucy5pbmRleGVzO1xuICBjb25zdCBfQmxvYiA9IG9wdGlvbnMuQmxvYiB8fCB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgJiYgQmxvYjtcbiAgY29uc3QgdXNlQmxvYiA9IF9CbG9iICYmIHV0aWxzJDEuaXNTcGVjQ29tcGxpYW50Rm9ybShmb3JtRGF0YSk7XG5cbiAgaWYgKCF1dGlscyQxLmlzRnVuY3Rpb24odmlzaXRvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJyc7XG5cbiAgICBpZiAodXRpbHMkMS5pc0RhdGUodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdmFsdWUudG9JU09TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAoIXVzZUJsb2IgJiYgdXRpbHMkMS5pc0Jsb2IodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyKHZhbHVlKSB8fCB1dGlscyQxLmlzVHlwZWRBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB1c2VCbG9iICYmIHR5cGVvZiBCbG9iID09PSAnZnVuY3Rpb24nID8gbmV3IEJsb2IoW3ZhbHVlXSkgOiBCdWZmZXIuZnJvbSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgdmlzaXRvci5cbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZ3xOdW1iZXI+fSBwYXRoXG4gICAqIEB0aGlzIHtGb3JtRGF0YX1cbiAgICpcbiAgICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybiB0cnVlIHRvIHZpc2l0IHRoZSBlYWNoIHByb3Agb2YgdGhlIHZhbHVlIHJlY3Vyc2l2ZWx5XG4gICAqL1xuICBmdW5jdGlvbiBkZWZhdWx0VmlzaXRvcih2YWx1ZSwga2V5LCBwYXRoKSB7XG4gICAgbGV0IGFyciA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICYmICFwYXRoICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh1dGlscyQxLmVuZHNXaXRoKGtleSwgJ3t9JykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIGtleSA9IG1ldGFUb2tlbnMgPyBrZXkgOiBrZXkuc2xpY2UoMCwgLTIpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgdmFsdWUgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAodXRpbHMkMS5pc0FycmF5KHZhbHVlKSAmJiBpc0ZsYXRBcnJheSh2YWx1ZSkpIHx8XG4gICAgICAgICgodXRpbHMkMS5pc0ZpbGVMaXN0KHZhbHVlKSB8fCB1dGlscyQxLmVuZHNXaXRoKGtleSwgJ1tdJykpICYmIChhcnIgPSB1dGlscyQxLnRvQXJyYXkodmFsdWUpKVxuICAgICAgICApKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSByZW1vdmVCcmFja2V0cyhrZXkpO1xuXG4gICAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uIGVhY2goZWwsIGluZGV4KSB7XG4gICAgICAgICAgISh1dGlscyQxLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgZm9ybURhdGEuYXBwZW5kKFxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5lc3RlZC10ZXJuYXJ5XG4gICAgICAgICAgICBpbmRleGVzID09PSB0cnVlID8gcmVuZGVyS2V5KFtrZXldLCBpbmRleCwgZG90cykgOiAoaW5kZXhlcyA9PT0gbnVsbCA/IGtleSA6IGtleSArICdbXScpLFxuICAgICAgICAgICAgY29udmVydFZhbHVlKGVsKVxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzVmlzaXRhYmxlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZm9ybURhdGEuYXBwZW5kKHJlbmRlcktleShwYXRoLCBrZXksIGRvdHMpLCBjb252ZXJ0VmFsdWUodmFsdWUpKTtcblxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHN0YWNrID0gW107XG5cbiAgY29uc3QgZXhwb3NlZEhlbHBlcnMgPSBPYmplY3QuYXNzaWduKHByZWRpY2F0ZXMsIHtcbiAgICBkZWZhdWx0VmlzaXRvcixcbiAgICBjb252ZXJ0VmFsdWUsXG4gICAgaXNWaXNpdGFibGVcbiAgfSk7XG5cbiAgZnVuY3Rpb24gYnVpbGQodmFsdWUsIHBhdGgpIHtcbiAgICBpZiAodXRpbHMkMS5pc1VuZGVmaW5lZCh2YWx1ZSkpIHJldHVybjtcblxuICAgIGlmIChzdGFjay5pbmRleE9mKHZhbHVlKSAhPT0gLTEpIHtcbiAgICAgIHRocm93IEVycm9yKCdDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gJyArIHBhdGguam9pbignLicpKTtcbiAgICB9XG5cbiAgICBzdGFjay5wdXNoKHZhbHVlKTtcblxuICAgIHV0aWxzJDEuZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24gZWFjaChlbCwga2V5KSB7XG4gICAgICBjb25zdCByZXN1bHQgPSAhKHV0aWxzJDEuaXNVbmRlZmluZWQoZWwpIHx8IGVsID09PSBudWxsKSAmJiB2aXNpdG9yLmNhbGwoXG4gICAgICAgIGZvcm1EYXRhLCBlbCwgdXRpbHMkMS5pc1N0cmluZyhrZXkpID8ga2V5LnRyaW0oKSA6IGtleSwgcGF0aCwgZXhwb3NlZEhlbHBlcnNcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgYnVpbGQoZWwsIHBhdGggPyBwYXRoLmNvbmNhdChrZXkpIDogW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICBpZiAoIXV0aWxzJDEuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RhdGEgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIGJ1aWxkKG9iaik7XG5cbiAgcmV0dXJuIGZvcm1EYXRhO1xufVxuXG4vKipcbiAqIEl0IGVuY29kZXMgYSBzdHJpbmcgYnkgcmVwbGFjaW5nIGFsbCBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBpbiB0aGUgdW5yZXNlcnZlZCBzZXQgd2l0aFxuICogdGhlaXIgcGVyY2VudC1lbmNvZGVkIGVxdWl2YWxlbnRzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0ciAtIFRoZSBzdHJpbmcgdG8gZW5jb2RlLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZW5jb2RlJDEoc3RyKSB7XG4gIGNvbnN0IGNoYXJNYXAgPSB7XG4gICAgJyEnOiAnJTIxJyxcbiAgICBcIidcIjogJyUyNycsXG4gICAgJygnOiAnJTI4JyxcbiAgICAnKSc6ICclMjknLFxuICAgICd+JzogJyU3RScsXG4gICAgJyUyMCc6ICcrJyxcbiAgICAnJTAwJzogJ1xceDAwJ1xuICB9O1xuICByZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KHN0cikucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csIGZ1bmN0aW9uIHJlcGxhY2VyKG1hdGNoKSB7XG4gICAgcmV0dXJuIGNoYXJNYXBbbWF0Y2hdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHBhcmFtcyBvYmplY3QgYW5kIGNvbnZlcnRzIGl0IHRvIGEgRm9ybURhdGEgb2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBwYXJhbXMgLSBUaGUgcGFyYW1ldGVycyB0byBiZSBjb252ZXJ0ZWQgdG8gYSBGb3JtRGF0YSBvYmplY3QuXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgcGFzc2VkIHRvIHRoZSBBeGlvcyBjb25zdHJ1Y3Rvci5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKSB7XG4gIHRoaXMuX3BhaXJzID0gW107XG5cbiAgcGFyYW1zICYmIHRvRm9ybURhdGEocGFyYW1zLCB0aGlzLCBvcHRpb25zKTtcbn1cblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlO1xuXG5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24gYXBwZW5kKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX3BhaXJzLnB1c2goW25hbWUsIHZhbHVlXSk7XG59O1xuXG5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyhlbmNvZGVyKSB7XG4gIGNvbnN0IF9lbmNvZGUgPSBlbmNvZGVyID8gZnVuY3Rpb24odmFsdWUpIHtcbiAgICByZXR1cm4gZW5jb2Rlci5jYWxsKHRoaXMsIHZhbHVlLCBlbmNvZGUkMSk7XG4gIH0gOiBlbmNvZGUkMTtcblxuICByZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uIGVhY2gocGFpcikge1xuICAgIHJldHVybiBfZW5jb2RlKHBhaXJbMF0pICsgJz0nICsgX2VuY29kZShwYWlyWzFdKTtcbiAgfSwgJycpLmpvaW4oJyYnKTtcbn07XG5cbi8qKlxuICogSXQgcmVwbGFjZXMgYWxsIGluc3RhbmNlcyBvZiB0aGUgY2hhcmFjdGVycyBgOmAsIGAkYCwgYCxgLCBgK2AsIGBbYCwgYW5kIGBdYCB3aXRoIHRoZWlyXG4gKiBVUkkgZW5jb2RlZCBjb3VudGVycGFydHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIFRoZSB2YWx1ZSB0byBiZSBlbmNvZGVkLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHBhcmFtIHs/b2JqZWN0fSBvcHRpb25zXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGZvcm1hdHRlZCB1cmxcbiAqL1xuZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIG9wdGlvbnMpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICBcbiAgY29uc3QgX2VuY29kZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5lbmNvZGUgfHwgZW5jb2RlO1xuXG4gIGNvbnN0IHNlcmlhbGl6ZUZuID0gb3B0aW9ucyAmJiBvcHRpb25zLnNlcmlhbGl6ZTtcblxuICBsZXQgc2VyaWFsaXplZFBhcmFtcztcblxuICBpZiAoc2VyaWFsaXplRm4pIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gc2VyaWFsaXplRm4ocGFyYW1zLCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBzZXJpYWxpemVkUGFyYW1zID0gdXRpbHMkMS5pc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMpID9cbiAgICAgIHBhcmFtcy50b1N0cmluZygpIDpcbiAgICAgIG5ldyBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpLnRvU3RyaW5nKF9lbmNvZGUpO1xuICB9XG5cbiAgaWYgKHNlcmlhbGl6ZWRQYXJhbXMpIHtcbiAgICBjb25zdCBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoXCIjXCIpO1xuXG4gICAgaWYgKGhhc2htYXJrSW5kZXggIT09IC0xKSB7XG4gICAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gICAgfVxuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59XG5cbmNsYXNzIEludGVyY2VwdG9yTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGFuZGxlcnMgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBuZXcgaW50ZXJjZXB0b3IgdG8gdGhlIHN0YWNrXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0ZWQgVGhlIGZ1bmN0aW9uIHRvIGhhbmRsZSBgcmVqZWN0YCBmb3IgYSBgUHJvbWlzZWBcbiAgICpcbiAgICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICAgKi9cbiAgdXNlKGZ1bGZpbGxlZCwgcmVqZWN0ZWQsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmhhbmRsZXJzLnB1c2goe1xuICAgICAgZnVsZmlsbGVkLFxuICAgICAgcmVqZWN0ZWQsXG4gICAgICBzeW5jaHJvbm91czogb3B0aW9ucyA/IG9wdGlvbnMuc3luY2hyb25vdXMgOiBmYWxzZSxcbiAgICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlcnMubGVuZ3RoIC0gMTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtOdW1iZXJ9IGlkIFRoZSBJRCB0aGF0IHdhcyByZXR1cm5lZCBieSBgdXNlYFxuICAgKlxuICAgKiBAcmV0dXJucyB7Qm9vbGVhbn0gYHRydWVgIGlmIHRoZSBpbnRlcmNlcHRvciB3YXMgcmVtb3ZlZCwgYGZhbHNlYCBvdGhlcndpc2VcbiAgICovXG4gIGVqZWN0KGlkKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlcnNbaWRdKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsZWFyIGFsbCBpbnRlcmNlcHRvcnMgZnJvbSB0aGUgc3RhY2tcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBjbGVhcigpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVycykge1xuICAgICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSByZWdpc3RlcmVkIGludGVyY2VwdG9yc1xuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBpcyBwYXJ0aWN1bGFybHkgdXNlZnVsIGZvciBza2lwcGluZyBvdmVyIGFueVxuICAgKiBpbnRlcmNlcHRvcnMgdGhhdCBtYXkgaGF2ZSBiZWNvbWUgYG51bGxgIGNhbGxpbmcgYGVqZWN0YC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggaW50ZXJjZXB0b3JcbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBmb3JFYWNoKGZuKSB7XG4gICAgdXRpbHMkMS5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICAgIGZuKGgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbnZhciBJbnRlcmNlcHRvck1hbmFnZXIkMSA9IEludGVyY2VwdG9yTWFuYWdlcjtcblxudmFyIHRyYW5zaXRpb25hbERlZmF1bHRzID0ge1xuICBzaWxlbnRKU09OUGFyc2luZzogdHJ1ZSxcbiAgZm9yY2VkSlNPTlBhcnNpbmc6IHRydWUsXG4gIGNsYXJpZnlUaW1lb3V0RXJyb3I6IGZhbHNlXG59O1xuXG52YXIgVVJMU2VhcmNoUGFyYW1zJDEgPSB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zICE9PSAndW5kZWZpbmVkJyA/IFVSTFNlYXJjaFBhcmFtcyA6IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuXG52YXIgRm9ybURhdGEkMSA9IHR5cGVvZiBGb3JtRGF0YSAhPT0gJ3VuZGVmaW5lZCcgPyBGb3JtRGF0YSA6IG51bGw7XG5cbnZhciBCbG9iJDEgPSB0eXBlb2YgQmxvYiAhPT0gJ3VuZGVmaW5lZCcgPyBCbG9iIDogbnVsbDtcblxudmFyIHBsYXRmb3JtJDEgPSB7XG4gIGlzQnJvd3NlcjogdHJ1ZSxcbiAgY2xhc3Nlczoge1xuICAgIFVSTFNlYXJjaFBhcmFtczogVVJMU2VhcmNoUGFyYW1zJDEsXG4gICAgRm9ybURhdGE6IEZvcm1EYXRhJDEsXG4gICAgQmxvYjogQmxvYiQxXG4gIH0sXG4gIHByb3RvY29sczogWydodHRwJywgJ2h0dHBzJywgJ2ZpbGUnLCAnYmxvYicsICd1cmwnLCAnZGF0YSddXG59O1xuXG5jb25zdCBoYXNCcm93c2VyRW52ID0gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNvbnN0IGhhc1N0YW5kYXJkQnJvd3NlckVudiA9IChcbiAgKHByb2R1Y3QpID0+IHtcbiAgICByZXR1cm4gaGFzQnJvd3NlckVudiAmJiBbJ1JlYWN0TmF0aXZlJywgJ05hdGl2ZVNjcmlwdCcsICdOUyddLmluZGV4T2YocHJvZHVjdCkgPCAwXG4gIH0pKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5wcm9kdWN0KTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgd2ViV29ya2VyIGVudmlyb25tZW50XG4gKlxuICogQWx0aG91Z2ggdGhlIGBpc1N0YW5kYXJkQnJvd3NlckVudmAgbWV0aG9kIGluZGljYXRlcyB0aGF0XG4gKiBgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXJgLCB0aGUgV2ViV29ya2VyIHdpbGwgc3RpbGwgYmVcbiAqIGZpbHRlcmVkIG91dCBkdWUgdG8gaXRzIGp1ZGdtZW50IHN0YW5kYXJkXG4gKiBgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ2AuXG4gKiBUaGlzIGxlYWRzIHRvIGEgcHJvYmxlbSB3aGVuIGF4aW9zIHBvc3QgYEZvcm1EYXRhYCBpbiB3ZWJXb3JrZXJcbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52ID0gKCgpID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlICYmXG4gICAgdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufSkoKTtcblxuY29uc3Qgb3JpZ2luID0gaGFzQnJvd3NlckVudiAmJiB3aW5kb3cubG9jYXRpb24uaHJlZiB8fCAnaHR0cDovL2xvY2FsaG9zdCc7XG5cbnZhciB1dGlscyA9IC8qI19fUFVSRV9fKi9PYmplY3QuZnJlZXplKHtcbiAgX19wcm90b19fOiBudWxsLFxuICBoYXNCcm93c2VyRW52OiBoYXNCcm93c2VyRW52LFxuICBoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6IGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyRW52OiBoYXNTdGFuZGFyZEJyb3dzZXJFbnYsXG4gIG9yaWdpbjogb3JpZ2luXG59KTtcblxudmFyIHBsYXRmb3JtID0ge1xuICAuLi51dGlscyxcbiAgLi4ucGxhdGZvcm0kMVxufTtcblxuZnVuY3Rpb24gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b0Zvcm1EYXRhKGRhdGEsIG5ldyBwbGF0Zm9ybS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcygpLCBPYmplY3QuYXNzaWduKHtcbiAgICB2aXNpdG9yOiBmdW5jdGlvbih2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaXNOb2RlICYmIHV0aWxzJDEuaXNCdWZmZXIodmFsdWUpKSB7XG4gICAgICAgIHRoaXMuYXBwZW5kKGtleSwgdmFsdWUudG9TdHJpbmcoJ2Jhc2U2NCcpKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaGVscGVycy5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfSwgb3B0aW9ucykpO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nIGxpa2UgYGZvb1t4XVt5XVt6XWAgYW5kIHJldHVybnMgYW4gYXJyYXkgbGlrZSBgWydmb28nLCAneCcsICd5JywgJ3onXVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwYXJzZVByb3BQYXRoKG5hbWUpIHtcbiAgLy8gZm9vW3hdW3ldW3pdXG4gIC8vIGZvby54LnkuelxuICAvLyBmb28teC15LXpcbiAgLy8gZm9vIHggeSB6XG4gIHJldHVybiB1dGlscyQxLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZywgbmFtZSkubWFwKG1hdGNoID0+IHtcbiAgICByZXR1cm4gbWF0Y2hbMF0gPT09ICdbXScgPyAnJyA6IG1hdGNoWzFdIHx8IG1hdGNoWzBdO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGFuIGFycmF5IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5PGFueT59IGFyciAtIFRoZSBhcnJheSB0byBjb252ZXJ0IHRvIGFuIG9iamVjdC5cbiAqXG4gKiBAcmV0dXJucyBBbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSBrZXlzIGFuZCB2YWx1ZXMgYXMgdGhlIGFycmF5LlxuICovXG5mdW5jdGlvbiBhcnJheVRvT2JqZWN0KGFycikge1xuICBjb25zdCBvYmogPSB7fTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGFycik7XG4gIGxldCBpO1xuICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgbGV0IGtleTtcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICBvYmpba2V5XSA9IGFycltrZXldO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBGb3JtRGF0YSBvYmplY3QgYW5kIHJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdFxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBmb3JtRGF0YSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGNvbnZlcnQgdG8gSlNPTi5cbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0PHN0cmluZywgYW55PiB8IG51bGx9IFRoZSBjb252ZXJ0ZWQgb2JqZWN0LlxuICovXG5mdW5jdGlvbiBmb3JtRGF0YVRvSlNPTihmb3JtRGF0YSkge1xuICBmdW5jdGlvbiBidWlsZFBhdGgocGF0aCwgdmFsdWUsIHRhcmdldCwgaW5kZXgpIHtcbiAgICBsZXQgbmFtZSA9IHBhdGhbaW5kZXgrK107XG5cbiAgICBpZiAobmFtZSA9PT0gJ19fcHJvdG9fXycpIHJldHVybiB0cnVlO1xuXG4gICAgY29uc3QgaXNOdW1lcmljS2V5ID0gTnVtYmVyLmlzRmluaXRlKCtuYW1lKTtcbiAgICBjb25zdCBpc0xhc3QgPSBpbmRleCA+PSBwYXRoLmxlbmd0aDtcbiAgICBuYW1lID0gIW5hbWUgJiYgdXRpbHMkMS5pc0FycmF5KHRhcmdldCkgPyB0YXJnZXQubGVuZ3RoIDogbmFtZTtcblxuICAgIGlmIChpc0xhc3QpIHtcbiAgICAgIGlmICh1dGlscyQxLmhhc093blByb3AodGFyZ2V0LCBuYW1lKSkge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdLCB2YWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRbbmFtZV0gfHwgIXV0aWxzJDEuaXNPYmplY3QodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gW107XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0ID0gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXRbbmFtZV0sIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQgJiYgdXRpbHMkMS5pc0FycmF5KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IGFycmF5VG9PYmplY3QodGFyZ2V0W25hbWVdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gIWlzTnVtZXJpY0tleTtcbiAgfVxuXG4gIGlmICh1dGlscyQxLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzJDEuaXNGdW5jdGlvbihmb3JtRGF0YS5lbnRyaWVzKSkge1xuICAgIGNvbnN0IG9iaiA9IHt9O1xuXG4gICAgdXRpbHMkMS5mb3JFYWNoRW50cnkoZm9ybURhdGEsIChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgYnVpbGRQYXRoKHBhcnNlUHJvcFBhdGgobmFtZSksIHZhbHVlLCBvYmosIDApO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nLCB0cmllcyB0byBwYXJzZSBpdCwgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uXG4gKiBvZiB0aGUgaW5wdXRcbiAqXG4gKiBAcGFyYW0ge2FueX0gcmF3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc3RyaW5naWZpZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJzZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZXIgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHJhd1ZhbHVlLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMkMS5pc1N0cmluZyhyYXdWYWx1ZSkpIHtcbiAgICB0cnkge1xuICAgICAgKHBhcnNlciB8fCBKU09OLnBhcnNlKShyYXdWYWx1ZSk7XG4gICAgICByZXR1cm4gdXRpbHMkMS50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlbmNvZGVyIHx8IEpTT04uc3RyaW5naWZ5KShyYXdWYWx1ZSk7XG59XG5cbmNvbnN0IGRlZmF1bHRzID0ge1xuXG4gIHRyYW5zaXRpb25hbDogdHJhbnNpdGlvbmFsRGVmYXVsdHMsXG5cbiAgYWRhcHRlcjogWyd4aHInLCAnaHR0cCcsICdmZXRjaCddLFxuXG4gIHRyYW5zZm9ybVJlcXVlc3Q6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXF1ZXN0KGRhdGEsIGhlYWRlcnMpIHtcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSB8fCAnJztcbiAgICBjb25zdCBoYXNKU09OQ29udGVudFR5cGUgPSBjb250ZW50VHlwZS5pbmRleE9mKCdhcHBsaWNhdGlvbi9qc29uJykgPiAtMTtcbiAgICBjb25zdCBpc09iamVjdFBheWxvYWQgPSB1dGlscyQxLmlzT2JqZWN0KGRhdGEpO1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCAmJiB1dGlscyQxLmlzSFRNTEZvcm0oZGF0YSkpIHtcbiAgICAgIGRhdGEgPSBuZXcgRm9ybURhdGEoZGF0YSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNGb3JtRGF0YSA9IHV0aWxzJDEuaXNGb3JtRGF0YShkYXRhKTtcblxuICAgIGlmIChpc0Zvcm1EYXRhKSB7XG4gICAgICByZXR1cm4gaGFzSlNPTkNvbnRlbnRUeXBlID8gSlNPTi5zdHJpbmdpZnkoZm9ybURhdGFUb0pTT04oZGF0YSkpIDogZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMkMS5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzQnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscyQxLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMkMS5pc0Jsb2IoZGF0YSkgfHxcbiAgICAgIHV0aWxzJDEuaXNSZWFkYWJsZVN0cmVhbShkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscyQxLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscyQxLmlzVVJMU2VhcmNoUGFyYW1zKGRhdGEpKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCcsIGZhbHNlKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IGlzRmlsZUxpc3Q7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkKSB7XG4gICAgICBpZiAoY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykgPiAtMSkge1xuICAgICAgICByZXR1cm4gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCB0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO1xuICAgICAgfVxuXG4gICAgICBpZiAoKGlzRmlsZUxpc3QgPSB1dGlscyQxLmlzRmlsZUxpc3QoZGF0YSkpIHx8IGNvbnRlbnRUeXBlLmluZGV4T2YoJ211bHRpcGFydC9mb3JtLWRhdGEnKSA+IC0xKSB7XG4gICAgICAgIGNvbnN0IF9Gb3JtRGF0YSA9IHRoaXMuZW52ICYmIHRoaXMuZW52LkZvcm1EYXRhO1xuXG4gICAgICAgIHJldHVybiB0b0Zvcm1EYXRhKFxuICAgICAgICAgIGlzRmlsZUxpc3QgPyB7J2ZpbGVzW10nOiBkYXRhfSA6IGRhdGEsXG4gICAgICAgICAgX0Zvcm1EYXRhICYmIG5ldyBfRm9ybURhdGEoKSxcbiAgICAgICAgICB0aGlzLmZvcm1TZXJpYWxpemVyXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCB8fCBoYXNKU09OQ29udGVudFR5cGUgKSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi9qc29uJywgZmFsc2UpO1xuICAgICAgcmV0dXJuIHN0cmluZ2lmeVNhZmVseShkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgdHJhbnNmb3JtUmVzcG9uc2U6IFtmdW5jdGlvbiB0cmFuc2Zvcm1SZXNwb25zZShkYXRhKSB7XG4gICAgY29uc3QgdHJhbnNpdGlvbmFsID0gdGhpcy50cmFuc2l0aW9uYWwgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgIGNvbnN0IGZvcmNlZEpTT05QYXJzaW5nID0gdHJhbnNpdGlvbmFsICYmIHRyYW5zaXRpb25hbC5mb3JjZWRKU09OUGFyc2luZztcbiAgICBjb25zdCBKU09OUmVxdWVzdGVkID0gdGhpcy5yZXNwb25zZVR5cGUgPT09ICdqc29uJztcblxuICAgIGlmICh1dGlscyQxLmlzUmVzcG9uc2UoZGF0YSkgfHwgdXRpbHMkMS5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiB1dGlscyQxLmlzU3RyaW5nKGRhdGEpICYmICgoZm9yY2VkSlNPTlBhcnNpbmcgJiYgIXRoaXMucmVzcG9uc2VUeXBlKSB8fCBKU09OUmVxdWVzdGVkKSkge1xuICAgICAgY29uc3Qgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgICAgY29uc3Qgc3RyaWN0SlNPTlBhcnNpbmcgPSAhc2lsZW50SlNPTlBhcnNpbmcgJiYgSlNPTlJlcXVlc3RlZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmIChzdHJpY3RKU09OUGFyc2luZykge1xuICAgICAgICAgIGlmIChlLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIHRocm93IEF4aW9zRXJyb3IuZnJvbShlLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsIHRoaXMsIG51bGwsIHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGE7XG4gIH1dLFxuXG4gIC8qKlxuICAgKiBBIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIGFib3J0IGEgcmVxdWVzdC4gSWYgc2V0IHRvIDAgKGRlZmF1bHQpIGFcbiAgICogdGltZW91dCBpcyBub3QgY3JlYXRlZC5cbiAgICovXG4gIHRpbWVvdXQ6IDAsXG5cbiAgeHNyZkNvb2tpZU5hbWU6ICdYU1JGLVRPS0VOJyxcbiAgeHNyZkhlYWRlck5hbWU6ICdYLVhTUkYtVE9LRU4nLFxuXG4gIG1heENvbnRlbnRMZW5ndGg6IC0xLFxuICBtYXhCb2R5TGVuZ3RoOiAtMSxcblxuICBlbnY6IHtcbiAgICBGb3JtRGF0YTogcGxhdGZvcm0uY2xhc3Nlcy5Gb3JtRGF0YSxcbiAgICBCbG9iOiBwbGF0Zm9ybS5jbGFzc2VzLkJsb2JcbiAgfSxcblxuICB2YWxpZGF0ZVN0YXR1czogZnVuY3Rpb24gdmFsaWRhdGVTdGF0dXMoc3RhdHVzKSB7XG4gICAgcmV0dXJuIHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwO1xuICB9LFxuXG4gIGhlYWRlcnM6IHtcbiAgICBjb21tb246IHtcbiAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qJyxcbiAgICAgICdDb250ZW50LVR5cGUnOiB1bmRlZmluZWRcbiAgICB9XG4gIH1cbn07XG5cbnV0aWxzJDEuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCddLCAobWV0aG9kKSA9PiB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbnZhciBkZWZhdWx0cyQxID0gZGVmYXVsdHM7XG5cbi8vIFJhd0F4aW9zSGVhZGVycyB3aG9zZSBkdXBsaWNhdGVzIGFyZSBpZ25vcmVkIGJ5IG5vZGVcbi8vIGMuZi4gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbmNvbnN0IGlnbm9yZUR1cGxpY2F0ZU9mID0gdXRpbHMkMS50b09iamVjdFNldChbXG4gICdhZ2UnLCAnYXV0aG9yaXphdGlvbicsICdjb250ZW50LWxlbmd0aCcsICdjb250ZW50LXR5cGUnLCAnZXRhZycsXG4gICdleHBpcmVzJywgJ2Zyb20nLCAnaG9zdCcsICdpZi1tb2RpZmllZC1zaW5jZScsICdpZi11bm1vZGlmaWVkLXNpbmNlJyxcbiAgJ2xhc3QtbW9kaWZpZWQnLCAnbG9jYXRpb24nLCAnbWF4LWZvcndhcmRzJywgJ3Byb3h5LWF1dGhvcml6YXRpb24nLFxuICAncmVmZXJlcicsICdyZXRyeS1hZnRlcicsICd1c2VyLWFnZW50J1xuXSk7XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSByYXdIZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBIZWFkZXJzIHBhcnNlZCBpbnRvIGFuIG9iamVjdFxuICovXG52YXIgcGFyc2VIZWFkZXJzID0gcmF3SGVhZGVycyA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IHt9O1xuICBsZXQga2V5O1xuICBsZXQgdmFsO1xuICBsZXQgaTtcblxuICByYXdIZWFkZXJzICYmIHJhd0hlYWRlcnMuc3BsaXQoJ1xcbicpLmZvckVhY2goZnVuY3Rpb24gcGFyc2VyKGxpbmUpIHtcbiAgICBpID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAga2V5ID0gbGluZS5zdWJzdHJpbmcoMCwgaSkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgdmFsID0gbGluZS5zdWJzdHJpbmcoaSArIDEpLnRyaW0oKTtcblxuICAgIGlmICgha2V5IHx8IChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZltrZXldKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICdzZXQtY29va2llJykge1xuICAgICAgaWYgKHBhcnNlZFtrZXldKSB7XG4gICAgICAgIHBhcnNlZFtrZXldLnB1c2godmFsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnNlZFtrZXldID0gW3ZhbF07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcnNlZFtrZXldID0gcGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSArICcsICcgKyB2YWwgOiB2YWw7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcGFyc2VkO1xufTtcblxuY29uc3QgJGludGVybmFscyA9IFN5bWJvbCgnaW50ZXJuYWxzJyk7XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpIHtcbiAgcmV0dXJuIGhlYWRlciAmJiBTdHJpbmcoaGVhZGVyKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWUodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHV0aWxzJDEuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAobm9ybWFsaXplVmFsdWUpIDogU3RyaW5nKHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VUb2tlbnMoc3RyKSB7XG4gIGNvbnN0IHRva2VucyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIGNvbnN0IHRva2Vuc1JFID0gLyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZztcbiAgbGV0IG1hdGNoO1xuXG4gIHdoaWxlICgobWF0Y2ggPSB0b2tlbnNSRS5leGVjKHN0cikpKSB7XG4gICAgdG9rZW5zW21hdGNoWzFdXSA9IG1hdGNoWzJdO1xuICB9XG5cbiAgcmV0dXJuIHRva2Vucztcbn1cblxuY29uc3QgaXNWYWxpZEhlYWRlck5hbWUgPSAoc3RyKSA9PiAvXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KHN0ci50cmltKCkpO1xuXG5mdW5jdGlvbiBtYXRjaEhlYWRlclZhbHVlKGNvbnRleHQsIHZhbHVlLCBoZWFkZXIsIGZpbHRlciwgaXNIZWFkZXJOYW1lRmlsdGVyKSB7XG4gIGlmICh1dGlscyQxLmlzRnVuY3Rpb24oZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLCB2YWx1ZSwgaGVhZGVyKTtcbiAgfVxuXG4gIGlmIChpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgICB2YWx1ZSA9IGhlYWRlcjtcbiAgfVxuXG4gIGlmICghdXRpbHMkMS5pc1N0cmluZyh2YWx1ZSkpIHJldHVybjtcblxuICBpZiAodXRpbHMkMS5pc1N0cmluZyhmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIHZhbHVlLmluZGV4T2YoZmlsdGVyKSAhPT0gLTE7XG4gIH1cblxuICBpZiAodXRpbHMkMS5pc1JlZ0V4cChmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci50ZXN0KHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIudHJpbSgpXG4gICAgLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCAodywgY2hhciwgc3RyKSA9PiB7XG4gICAgICByZXR1cm4gY2hhci50b1VwcGVyQ2FzZSgpICsgc3RyO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEFjY2Vzc29ycyhvYmosIGhlYWRlcikge1xuICBjb25zdCBhY2Nlc3Nvck5hbWUgPSB1dGlscyQxLnRvQ2FtZWxDYXNlKCcgJyArIGhlYWRlcik7XG5cbiAgWydnZXQnLCAnc2V0JywgJ2hhcyddLmZvckVhY2gobWV0aG9kTmFtZSA9PiB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgbWV0aG9kTmFtZSArIGFjY2Vzc29yTmFtZSwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXNbbWV0aG9kTmFtZV0uY2FsbCh0aGlzLCBoZWFkZXIsIGFyZzEsIGFyZzIsIGFyZzMpO1xuICAgICAgfSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICB9KTtcbn1cblxuY2xhc3MgQXhpb3NIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IoaGVhZGVycykge1xuICAgIGhlYWRlcnMgJiYgdGhpcy5zZXQoaGVhZGVycyk7XG4gIH1cblxuICBzZXQoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSwgcmV3cml0ZSkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuXG4gICAgZnVuY3Rpb24gc2V0SGVhZGVyKF92YWx1ZSwgX2hlYWRlciwgX3Jld3JpdGUpIHtcbiAgICAgIGNvbnN0IGxIZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoX2hlYWRlcik7XG5cbiAgICAgIGlmICghbEhlYWRlcikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2hlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleShzZWxmLCBsSGVhZGVyKTtcblxuICAgICAgaWYoIWtleSB8fCBzZWxmW2tleV0gPT09IHVuZGVmaW5lZCB8fCBfcmV3cml0ZSA9PT0gdHJ1ZSB8fCAoX3Jld3JpdGUgPT09IHVuZGVmaW5lZCAmJiBzZWxmW2tleV0gIT09IGZhbHNlKSkge1xuICAgICAgICBzZWxmW2tleSB8fCBfaGVhZGVyXSA9IG5vcm1hbGl6ZVZhbHVlKF92YWx1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0SGVhZGVycyA9IChoZWFkZXJzLCBfcmV3cml0ZSkgPT5cbiAgICAgIHV0aWxzJDEuZm9yRWFjaChoZWFkZXJzLCAoX3ZhbHVlLCBfaGVhZGVyKSA9PiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkpO1xuXG4gICAgaWYgKHV0aWxzJDEuaXNQbGFpbk9iamVjdChoZWFkZXIpIHx8IGhlYWRlciBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpIHtcbiAgICAgIHNldEhlYWRlcnMoaGVhZGVyLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIGlmKHV0aWxzJDEuaXNTdHJpbmcoaGVhZGVyKSAmJiAoaGVhZGVyID0gaGVhZGVyLnRyaW0oKSkgJiYgIWlzVmFsaWRIZWFkZXJOYW1lKGhlYWRlcikpIHtcbiAgICAgIHNldEhlYWRlcnMocGFyc2VIZWFkZXJzKGhlYWRlciksIHZhbHVlT3JSZXdyaXRlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzJDEuaXNIZWFkZXJzKGhlYWRlcikpIHtcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGhlYWRlci5lbnRyaWVzKCkpIHtcbiAgICAgICAgc2V0SGVhZGVyKHZhbHVlLCBrZXksIHJld3JpdGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXIgIT0gbnVsbCAmJiBzZXRIZWFkZXIodmFsdWVPclJld3JpdGUsIGhlYWRlciwgcmV3cml0ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBnZXQoaGVhZGVyLCBwYXJzZXIpIHtcbiAgICBoZWFkZXIgPSBub3JtYWxpemVIZWFkZXIoaGVhZGVyKTtcblxuICAgIGlmIChoZWFkZXIpIHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldO1xuXG4gICAgICAgIGlmICghcGFyc2VyKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZVRva2Vucyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMkMS5pc0Z1bmN0aW9uKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmNhbGwodGhpcywgdmFsdWUsIGtleSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMkMS5pc1JlZ0V4cChwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5leGVjKHZhbHVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3BhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFzKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIHJldHVybiAhIShrZXkgJiYgdGhpc1trZXldICE9PSB1bmRlZmluZWQgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZGVsZXRlKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBkZWxldGVIZWFkZXIoX2hlYWRlcikge1xuICAgICAgX2hlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKF9oZWFkZXIpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdXRpbHMkMS5maW5kS2V5KHNlbGYsIF9oZWFkZXIpO1xuXG4gICAgICAgIGlmIChrZXkgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUoc2VsZiwgc2VsZltrZXldLCBrZXksIG1hdGNoZXIpKSkge1xuICAgICAgICAgIGRlbGV0ZSBzZWxmW2tleV07XG5cbiAgICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh1dGlscyQxLmlzQXJyYXkoaGVhZGVyKSkge1xuICAgICAgaGVhZGVyLmZvckVhY2goZGVsZXRlSGVhZGVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlSGVhZGVyKGhlYWRlcik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlbGV0ZWQ7XG4gIH1cblxuICBjbGVhcihtYXRjaGVyKSB7XG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHRoaXMpO1xuICAgIGxldCBpID0ga2V5cy5sZW5ndGg7XG4gICAgbGV0IGRlbGV0ZWQgPSBmYWxzZTtcblxuICAgIHdoaWxlIChpLS0pIHtcbiAgICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG4gICAgICBpZighbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHRoaXMsIHRoaXNba2V5XSwga2V5LCBtYXRjaGVyLCB0cnVlKSkge1xuICAgICAgICBkZWxldGUgdGhpc1trZXldO1xuICAgICAgICBkZWxldGVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIG5vcm1hbGl6ZShmb3JtYXQpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcbiAgICBjb25zdCBoZWFkZXJzID0ge307XG5cbiAgICB1dGlscyQxLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzJDEuZmluZEtleShoZWFkZXJzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIHNlbGZba2V5XSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub3JtYWxpemVkID0gZm9ybWF0ID8gZm9ybWF0SGVhZGVyKGhlYWRlcikgOiBTdHJpbmcoaGVhZGVyKS50cmltKCk7XG5cbiAgICAgIGlmIChub3JtYWxpemVkICE9PSBoZWFkZXIpIHtcbiAgICAgICAgZGVsZXRlIHNlbGZbaGVhZGVyXTtcbiAgICAgIH1cblxuICAgICAgc2VsZltub3JtYWxpemVkXSA9IG5vcm1hbGl6ZVZhbHVlKHZhbHVlKTtcblxuICAgICAgaGVhZGVyc1tub3JtYWxpemVkXSA9IHRydWU7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGNvbmNhdCguLi50YXJnZXRzKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsIC4uLnRhcmdldHMpO1xuICB9XG5cbiAgdG9KU09OKGFzU3RyaW5ncykge1xuICAgIGNvbnN0IG9iaiA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cbiAgICB1dGlscyQxLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09IGZhbHNlICYmIChvYmpbaGVhZGVyXSA9IGFzU3RyaW5ncyAmJiB1dGlscyQxLmlzQXJyYXkodmFsdWUpID8gdmFsdWUuam9pbignLCAnKSA6IHZhbHVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2hlYWRlciwgdmFsdWVdKSA9PiBoZWFkZXIgKyAnOiAnICsgdmFsdWUpLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnQXhpb3NIZWFkZXJzJztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tKHRoaW5nKSB7XG4gICAgcmV0dXJuIHRoaW5nIGluc3RhbmNlb2YgdGhpcyA/IHRoaW5nIDogbmV3IHRoaXModGhpbmcpO1xuICB9XG5cbiAgc3RhdGljIGNvbmNhdChmaXJzdCwgLi4udGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbXB1dGVkID0gbmV3IHRoaXMoZmlyc3QpO1xuXG4gICAgdGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXQpID0+IGNvbXB1dGVkLnNldCh0YXJnZXQpKTtcblxuICAgIHJldHVybiBjb21wdXRlZDtcbiAgfVxuXG4gIHN0YXRpYyBhY2Nlc3NvcihoZWFkZXIpIHtcbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzWyRpbnRlcm5hbHNdID0gKHRoaXNbJGludGVybmFsc10gPSB7XG4gICAgICBhY2Nlc3NvcnM6IHt9XG4gICAgfSk7XG5cbiAgICBjb25zdCBhY2Nlc3NvcnMgPSBpbnRlcm5hbHMuYWNjZXNzb3JzO1xuICAgIGNvbnN0IHByb3RvdHlwZSA9IHRoaXMucHJvdG90eXBlO1xuXG4gICAgZnVuY3Rpb24gZGVmaW5lQWNjZXNzb3IoX2hlYWRlcikge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFhY2Nlc3NvcnNbbEhlYWRlcl0pIHtcbiAgICAgICAgYnVpbGRBY2Nlc3NvcnMocHJvdG90eXBlLCBfaGVhZGVyKTtcbiAgICAgICAgYWNjZXNzb3JzW2xIZWFkZXJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1dGlscyQxLmlzQXJyYXkoaGVhZGVyKSA/IGhlYWRlci5mb3JFYWNoKGRlZmluZUFjY2Vzc29yKSA6IGRlZmluZUFjY2Vzc29yKGhlYWRlcik7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuXG5BeGlvc0hlYWRlcnMuYWNjZXNzb3IoWydDb250ZW50LVR5cGUnLCAnQ29udGVudC1MZW5ndGgnLCAnQWNjZXB0JywgJ0FjY2VwdC1FbmNvZGluZycsICdVc2VyLUFnZW50JywgJ0F1dGhvcml6YXRpb24nXSk7XG5cbi8vIHJlc2VydmVkIG5hbWVzIGhvdGZpeFxudXRpbHMkMS5yZWR1Y2VEZXNjcmlwdG9ycyhBeGlvc0hlYWRlcnMucHJvdG90eXBlLCAoe3ZhbHVlfSwga2V5KSA9PiB7XG4gIGxldCBtYXBwZWQgPSBrZXlbMF0udG9VcHBlckNhc2UoKSArIGtleS5zbGljZSgxKTsgLy8gbWFwIGBzZXRgID0+IGBTZXRgXG4gIHJldHVybiB7XG4gICAgZ2V0OiAoKSA9PiB2YWx1ZSxcbiAgICBzZXQoaGVhZGVyVmFsdWUpIHtcbiAgICAgIHRoaXNbbWFwcGVkXSA9IGhlYWRlclZhbHVlO1xuICAgIH1cbiAgfVxufSk7XG5cbnV0aWxzJDEuZnJlZXplTWV0aG9kcyhBeGlvc0hlYWRlcnMpO1xuXG52YXIgQXhpb3NIZWFkZXJzJDEgPSBBeGlvc0hlYWRlcnM7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7P09iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShmbnMsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbmZpZyA9IHRoaXMgfHwgZGVmYXVsdHMkMTtcbiAgY29uc3QgY29udGV4dCA9IHJlc3BvbnNlIHx8IGNvbmZpZztcbiAgY29uc3QgaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oY29udGV4dC5oZWFkZXJzKTtcbiAgbGV0IGRhdGEgPSBjb250ZXh0LmRhdGE7XG5cbiAgdXRpbHMkMS5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29uZmlnLCBkYXRhLCBoZWFkZXJzLm5vcm1hbGl6ZSgpLCByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGhlYWRlcnMubm9ybWFsaXplKCk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGlzQ2FuY2VsKHZhbHVlKSB7XG4gIHJldHVybiAhISh2YWx1ZSAmJiB2YWx1ZS5fX0NBTkNFTF9fKTtcbn1cblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gcmVxdWVzdCBUaGUgcmVxdWVzdC5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsZWRFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBBeGlvc0Vycm9yLmNhbGwodGhpcywgbWVzc2FnZSA9PSBudWxsID8gJ2NhbmNlbGVkJyA6IG1lc3NhZ2UsIEF4aW9zRXJyb3IuRVJSX0NBTkNFTEVELCBjb25maWcsIHJlcXVlc3QpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzJDEuaW5oZXJpdHMoQ2FuY2VsZWRFcnJvciwgQXhpb3NFcnJvciwge1xuICBfX0NBTkNFTF9fOiB0cnVlXG59KTtcblxuLyoqXG4gKiBSZXNvbHZlIG9yIHJlamVjdCBhIFByb21pc2UgYmFzZWQgb24gcmVzcG9uc2Ugc3RhdHVzLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlc29sdmUgQSBmdW5jdGlvbiB0aGF0IHJlc29sdmVzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVqZWN0IEEgZnVuY3Rpb24gdGhhdCByZWplY3RzIHRoZSBwcm9taXNlLlxuICogQHBhcmFtIHtvYmplY3R9IHJlc3BvbnNlIFRoZSByZXNwb25zZS5cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgcmVzcG9uc2UuXG4gKi9cbmZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IHZhbGlkYXRlU3RhdHVzID0gcmVzcG9uc2UuY29uZmlnLnZhbGlkYXRlU3RhdHVzO1xuICBpZiAoIXJlc3BvbnNlLnN0YXR1cyB8fCAhdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICBbQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihyZXNwb25zZS5zdGF0dXMgLyAxMDApIC0gNF0sXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVByb3RvY29sKHVybCkge1xuICBjb25zdCBtYXRjaCA9IC9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKHVybCk7XG4gIHJldHVybiBtYXRjaCAmJiBtYXRjaFsxXSB8fCAnJztcbn1cblxuLyoqXG4gKiBDYWxjdWxhdGUgZGF0YSBtYXhSYXRlXG4gKiBAcGFyYW0ge051bWJlcn0gW3NhbXBsZXNDb3VudD0gMTBdXG4gKiBAcGFyYW0ge051bWJlcn0gW21pbj0gMTAwMF1cbiAqIEByZXR1cm5zIHtGdW5jdGlvbn1cbiAqL1xuZnVuY3Rpb24gc3BlZWRvbWV0ZXIoc2FtcGxlc0NvdW50LCBtaW4pIHtcbiAgc2FtcGxlc0NvdW50ID0gc2FtcGxlc0NvdW50IHx8IDEwO1xuICBjb25zdCBieXRlcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBjb25zdCB0aW1lc3RhbXBzID0gbmV3IEFycmF5KHNhbXBsZXNDb3VudCk7XG4gIGxldCBoZWFkID0gMDtcbiAgbGV0IHRhaWwgPSAwO1xuICBsZXQgZmlyc3RTYW1wbGVUUztcblxuICBtaW4gPSBtaW4gIT09IHVuZGVmaW5lZCA/IG1pbiA6IDEwMDA7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIHB1c2goY2h1bmtMZW5ndGgpIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgY29uc3Qgc3RhcnRlZEF0ID0gdGltZXN0YW1wc1t0YWlsXTtcblxuICAgIGlmICghZmlyc3RTYW1wbGVUUykge1xuICAgICAgZmlyc3RTYW1wbGVUUyA9IG5vdztcbiAgICB9XG5cbiAgICBieXRlc1toZWFkXSA9IGNodW5rTGVuZ3RoO1xuICAgIHRpbWVzdGFtcHNbaGVhZF0gPSBub3c7XG5cbiAgICBsZXQgaSA9IHRhaWw7XG4gICAgbGV0IGJ5dGVzQ291bnQgPSAwO1xuXG4gICAgd2hpbGUgKGkgIT09IGhlYWQpIHtcbiAgICAgIGJ5dGVzQ291bnQgKz0gYnl0ZXNbaSsrXTtcbiAgICAgIGkgPSBpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGhlYWQgPSAoaGVhZCArIDEpICUgc2FtcGxlc0NvdW50O1xuXG4gICAgaWYgKGhlYWQgPT09IHRhaWwpIHtcbiAgICAgIHRhaWwgPSAodGFpbCArIDEpICUgc2FtcGxlc0NvdW50O1xuICAgIH1cblxuICAgIGlmIChub3cgLSBmaXJzdFNhbXBsZVRTIDwgbWluKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFzc2VkID0gc3RhcnRlZEF0ICYmIG5vdyAtIHN0YXJ0ZWRBdDtcblxuICAgIHJldHVybiBwYXNzZWQgPyBNYXRoLnJvdW5kKGJ5dGVzQ291bnQgKiAxMDAwIC8gcGFzc2VkKSA6IHVuZGVmaW5lZDtcbiAgfTtcbn1cblxuLyoqXG4gKiBUaHJvdHRsZSBkZWNvcmF0b3JcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKiBAcGFyYW0ge051bWJlcn0gZnJlcVxuICogQHJldHVybiB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHRocm90dGxlKGZuLCBmcmVxKSB7XG4gIGxldCB0aW1lc3RhbXAgPSAwO1xuICBjb25zdCB0aHJlc2hvbGQgPSAxMDAwIC8gZnJlcTtcbiAgbGV0IHRpbWVyID0gbnVsbDtcbiAgcmV0dXJuIGZ1bmN0aW9uIHRocm90dGxlZCgpIHtcbiAgICBjb25zdCBmb3JjZSA9IHRoaXMgPT09IHRydWU7XG5cbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmIChmb3JjZSB8fCBub3cgLSB0aW1lc3RhbXAgPiB0aHJlc2hvbGQpIHtcbiAgICAgIGlmICh0aW1lcikge1xuICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICB0aW1lciA9IG51bGw7XG4gICAgICB9XG4gICAgICB0aW1lc3RhbXAgPSBub3c7XG4gICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICB9XG4gICAgaWYgKCF0aW1lcikge1xuICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgICB0aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgICAgICByZXR1cm4gZm4uYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgICAgIH0sIHRocmVzaG9sZCAtIChub3cgLSB0aW1lc3RhbXApKTtcbiAgICB9XG4gIH07XG59XG5cbnZhciBwcm9ncmVzc0V2ZW50UmVkdWNlciA9IChsaXN0ZW5lciwgaXNEb3dubG9hZFN0cmVhbSwgZnJlcSA9IDMpID0+IHtcbiAgbGV0IGJ5dGVzTm90aWZpZWQgPSAwO1xuICBjb25zdCBfc3BlZWRvbWV0ZXIgPSBzcGVlZG9tZXRlcig1MCwgMjUwKTtcblxuICByZXR1cm4gdGhyb3R0bGUoZSA9PiB7XG4gICAgY29uc3QgbG9hZGVkID0gZS5sb2FkZWQ7XG4gICAgY29uc3QgdG90YWwgPSBlLmxlbmd0aENvbXB1dGFibGUgPyBlLnRvdGFsIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb2dyZXNzQnl0ZXMgPSBsb2FkZWQgLSBieXRlc05vdGlmaWVkO1xuICAgIGNvbnN0IHJhdGUgPSBfc3BlZWRvbWV0ZXIocHJvZ3Jlc3NCeXRlcyk7XG4gICAgY29uc3QgaW5SYW5nZSA9IGxvYWRlZCA8PSB0b3RhbDtcblxuICAgIGJ5dGVzTm90aWZpZWQgPSBsb2FkZWQ7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbG9hZGVkLFxuICAgICAgdG90YWwsXG4gICAgICBwcm9ncmVzczogdG90YWwgPyAobG9hZGVkIC8gdG90YWwpIDogdW5kZWZpbmVkLFxuICAgICAgYnl0ZXM6IHByb2dyZXNzQnl0ZXMsXG4gICAgICByYXRlOiByYXRlID8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGVzdGltYXRlZDogcmF0ZSAmJiB0b3RhbCAmJiBpblJhbmdlID8gKHRvdGFsIC0gbG9hZGVkKSAvIHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBldmVudDogZSxcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRvdGFsICE9IG51bGxcbiAgICB9O1xuXG4gICAgZGF0YVtpc0Rvd25sb2FkU3RyZWFtID8gJ2Rvd25sb2FkJyA6ICd1cGxvYWQnXSA9IHRydWU7XG5cbiAgICBsaXN0ZW5lcihkYXRhKTtcbiAgfSwgZnJlcSk7XG59O1xuXG52YXIgaXNVUkxTYW1lT3JpZ2luID0gcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52ID9cblxuLy8gU3RhbmRhcmQgYnJvd3NlciBlbnZzIGhhdmUgZnVsbCBzdXBwb3J0IG9mIHRoZSBBUElzIG5lZWRlZCB0byB0ZXN0XG4vLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgKGZ1bmN0aW9uIHN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICBjb25zdCBtc2llID0gLyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICBjb25zdCB1cmxQYXJzaW5nTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICBsZXQgb3JpZ2luVVJMO1xuXG4gICAgLyoqXG4gICAgKiBQYXJzZSBhIFVSTCB0byBkaXNjb3ZlciBpdHMgY29tcG9uZW50c1xuICAgICpcbiAgICAqIEBwYXJhbSB7U3RyaW5nfSB1cmwgVGhlIFVSTCB0byBiZSBwYXJzZWRcbiAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgKi9cbiAgICBmdW5jdGlvbiByZXNvbHZlVVJMKHVybCkge1xuICAgICAgbGV0IGhyZWYgPSB1cmw7XG5cbiAgICAgIGlmIChtc2llKSB7XG4gICAgICAgIC8vIElFIG5lZWRzIGF0dHJpYnV0ZSBzZXQgdHdpY2UgdG8gbm9ybWFsaXplIHByb3BlcnRpZXNcbiAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgIGhyZWYgPSB1cmxQYXJzaW5nTm9kZS5ocmVmO1xuICAgICAgfVxuXG4gICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgLy8gdXJsUGFyc2luZ05vZGUgcHJvdmlkZXMgdGhlIFVybFV0aWxzIGludGVyZmFjZSAtIGh0dHA6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmx1dGlsc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgcHJvdG9jb2w6IHVybFBhcnNpbmdOb2RlLnByb3RvY29sID8gdXJsUGFyc2luZ05vZGUucHJvdG9jb2wucmVwbGFjZSgvOiQvLCAnJykgOiAnJyxcbiAgICAgICAgaG9zdDogdXJsUGFyc2luZ05vZGUuaG9zdCxcbiAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICBoYXNoOiB1cmxQYXJzaW5nTm9kZS5oYXNoID8gdXJsUGFyc2luZ05vZGUuaGFzaC5yZXBsYWNlKC9eIy8sICcnKSA6ICcnLFxuICAgICAgICBob3N0bmFtZTogdXJsUGFyc2luZ05vZGUuaG9zdG5hbWUsXG4gICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgIHBhdGhuYW1lOiAodXJsUGFyc2luZ05vZGUucGF0aG5hbWUuY2hhckF0KDApID09PSAnLycpID9cbiAgICAgICAgICB1cmxQYXJzaW5nTm9kZS5wYXRobmFtZSA6XG4gICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgIH07XG4gICAgfVxuXG4gICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAvKipcbiAgICAqIERldGVybWluZSBpZiBhIFVSTCBzaGFyZXMgdGhlIHNhbWUgb3JpZ2luIGFzIHRoZSBjdXJyZW50IGxvY2F0aW9uXG4gICAgKlxuICAgICogQHBhcmFtIHtTdHJpbmd9IHJlcXVlc3RVUkwgVGhlIFVSTCB0byB0ZXN0XG4gICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiwgb3RoZXJ3aXNlIGZhbHNlXG4gICAgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKHJlcXVlc3RVUkwpIHtcbiAgICAgIGNvbnN0IHBhcnNlZCA9ICh1dGlscyQxLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgcmV0dXJuIChwYXJzZWQucHJvdG9jb2wgPT09IG9yaWdpblVSTC5wcm90b2NvbCAmJlxuICAgICAgICAgIHBhcnNlZC5ob3N0ID09PSBvcmlnaW5VUkwuaG9zdCk7XG4gICAgfTtcbiAgfSkoKSA6XG5cbiAgLy8gTm9uIHN0YW5kYXJkIGJyb3dzZXIgZW52cyAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaXNVUkxTYW1lT3JpZ2luKCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfTtcbiAgfSkoKTtcblxudmFyIGNvb2tpZXMgPSBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICB7XG4gICAgd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICBjb25zdCBjb29raWUgPSBbbmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSldO1xuXG4gICAgICB1dGlscyQxLmlzTnVtYmVyKGV4cGlyZXMpICYmIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcblxuICAgICAgdXRpbHMkMS5pc1N0cmluZyhwYXRoKSAmJiBjb29raWUucHVzaCgncGF0aD0nICsgcGF0aCk7XG5cbiAgICAgIHV0aWxzJDEuaXNTdHJpbmcoZG9tYWluKSAmJiBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuXG4gICAgICBzZWN1cmUgPT09IHRydWUgJiYgY29va2llLnB1c2goJ3NlY3VyZScpO1xuXG4gICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICB9LFxuXG4gICAgcmVhZChuYW1lKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgIH0sXG5cbiAgICByZW1vdmUobmFtZSkge1xuICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICB9XG4gIH1cblxuICA6XG5cbiAgLy8gTm9uLXN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICB7XG4gICAgd3JpdGUoKSB7fSxcbiAgICByZWFkKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICByZW1vdmUoKSB7fVxuICB9O1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBzcGVjaWZpZWQgVVJMc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlbGF0aXZlVVJMIFRoZSByZWxhdGl2ZSBVUkxcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY29tYmluZWQgVVJMXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8/XFwvJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBjb21iaW5lZCBmdWxsIHBhdGhcbiAqL1xuZnVuY3Rpb24gYnVpbGRGdWxsUGF0aChiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpIHtcbiAgaWYgKGJhc2VVUkwgJiYgIWlzQWJzb2x1dGVVUkwocmVxdWVzdGVkVVJMKSkge1xuICAgIHJldHVybiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZXF1ZXN0ZWRVUkwpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0ZWRVUkw7XG59XG5cbmNvbnN0IGhlYWRlcnNUb09iamVjdCA9ICh0aGluZykgPT4gdGhpbmcgaW5zdGFuY2VvZiBBeGlvc0hlYWRlcnMkMSA/IHsgLi4udGhpbmcgfSA6IHRoaW5nO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbmZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICBjb25zdCBjb25maWcgPSB7fTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSwgY2FzZWxlc3MpIHtcbiAgICBpZiAodXRpbHMkMS5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMkMS5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscyQxLm1lcmdlLmNhbGwoe2Nhc2VsZXNzfSwgdGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMkMS5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscyQxLm1lcmdlKHt9LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMkMS5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKGEsIGIsIGNhc2VsZXNzKSB7XG4gICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYiwgY2FzZWxlc3MpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzJDEuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEsIGNhc2VsZXNzKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gdmFsdWVGcm9tQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gbWVyZ2VEaXJlY3RLZXlzKGEsIGIsIHByb3ApIHtcbiAgICBpZiAocHJvcCBpbiBjb25maWcyKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUoYSwgYik7XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIGNvbmZpZzEpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1lcmdlTWFwID0ge1xuICAgIHVybDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBtZXRob2Q6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgZGF0YTogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBiYXNlVVJMOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zZm9ybVJlcXVlc3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVzcG9uc2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcGFyYW1zU2VyaWFsaXplcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0aW1lb3V0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXRNZXNzYWdlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhDcmVkZW50aWFsczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB3aXRoWFNSRlRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGFkYXB0ZXI6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VUeXBlOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZDb29raWVOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHhzcmZIZWFkZXJOYW1lOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGRlY29tcHJlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgbWF4Q29udGVudExlbmd0aDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhCb2R5TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGJlZm9yZVJlZGlyZWN0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRyYW5zcG9ydDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwQWdlbnQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgaHR0cHNBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBjYW5jZWxUb2tlbjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBzb2NrZXRQYXRoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHJlc3BvbnNlRW5jb2Rpbmc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdmFsaWRhdGVTdGF0dXM6IG1lcmdlRGlyZWN0S2V5cyxcbiAgICBoZWFkZXJzOiAoYSwgYikgPT4gbWVyZ2VEZWVwUHJvcGVydGllcyhoZWFkZXJzVG9PYmplY3QoYSksIGhlYWRlcnNUb09iamVjdChiKSwgdHJ1ZSlcbiAgfTtcblxuICB1dGlscyQxLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnMSwgY29uZmlnMikpLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIGNvbnN0IG1lcmdlID0gbWVyZ2VNYXBbcHJvcF0gfHwgbWVyZ2VEZWVwUHJvcGVydGllcztcbiAgICBjb25zdCBjb25maWdWYWx1ZSA9IG1lcmdlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0sIHByb3ApO1xuICAgICh1dGlscyQxLmlzVW5kZWZpbmVkKGNvbmZpZ1ZhbHVlKSAmJiBtZXJnZSAhPT0gbWVyZ2VEaXJlY3RLZXlzKSB8fCAoY29uZmlnW3Byb3BdID0gY29uZmlnVmFsdWUpO1xuICB9KTtcblxuICByZXR1cm4gY29uZmlnO1xufVxuXG52YXIgcmVzb2x2ZUNvbmZpZyA9IChjb25maWcpID0+IHtcbiAgY29uc3QgbmV3Q29uZmlnID0gbWVyZ2VDb25maWcoe30sIGNvbmZpZyk7XG5cbiAgbGV0IHtkYXRhLCB3aXRoWFNSRlRva2VuLCB4c3JmSGVhZGVyTmFtZSwgeHNyZkNvb2tpZU5hbWUsIGhlYWRlcnMsIGF1dGh9ID0gbmV3Q29uZmlnO1xuXG4gIG5ld0NvbmZpZy5oZWFkZXJzID0gaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oaGVhZGVycyk7XG5cbiAgbmV3Q29uZmlnLnVybCA9IGJ1aWxkVVJMKGJ1aWxkRnVsbFBhdGgobmV3Q29uZmlnLmJhc2VVUkwsIG5ld0NvbmZpZy51cmwpLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG5cbiAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICBpZiAoYXV0aCkge1xuICAgIGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0Jhc2ljICcgK1xuICAgICAgYnRvYSgoYXV0aC51c2VybmFtZSB8fCAnJykgKyAnOicgKyAoYXV0aC5wYXNzd29yZCA/IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChhdXRoLnBhc3N3b3JkKSkgOiAnJykpXG4gICAgKTtcbiAgfVxuXG4gIGxldCBjb250ZW50VHlwZTtcblxuICBpZiAodXRpbHMkMS5pc0Zvcm1EYXRhKGRhdGEpKSB7XG4gICAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudiB8fCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUodW5kZWZpbmVkKTsgLy8gTGV0IHRoZSBicm93c2VyIHNldCBpdFxuICAgIH0gZWxzZSBpZiAoKGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpKSAhPT0gZmFsc2UpIHtcbiAgICAgIC8vIGZpeCBzZW1pY29sb24gZHVwbGljYXRpb24gaXNzdWUgZm9yIFJlYWN0TmF0aXZlIEZvcm1EYXRhIGltcGxlbWVudGF0aW9uXG4gICAgICBjb25zdCBbdHlwZSwgLi4udG9rZW5zXSA9IGNvbnRlbnRUeXBlID8gY29udGVudFR5cGUuc3BsaXQoJzsnKS5tYXAodG9rZW4gPT4gdG9rZW4udHJpbSgpKS5maWx0ZXIoQm9vbGVhbikgOiBbXTtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoW3R5cGUgfHwgJ211bHRpcGFydC9mb3JtLWRhdGEnLCAuLi50b2tlbnNdLmpvaW4oJzsgJykpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCB4c3JmIGhlYWRlclxuICAvLyBUaGlzIGlzIG9ubHkgZG9uZSBpZiBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudC5cbiAgLy8gU3BlY2lmaWNhbGx5IG5vdCBpZiB3ZSdyZSBpbiBhIHdlYiB3b3JrZXIsIG9yIHJlYWN0LW5hdGl2ZS5cblxuICBpZiAocGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyRW52KSB7XG4gICAgd2l0aFhTUkZUb2tlbiAmJiB1dGlscyQxLmlzRnVuY3Rpb24od2l0aFhTUkZUb2tlbikgJiYgKHdpdGhYU1JGVG9rZW4gPSB3aXRoWFNSRlRva2VuKG5ld0NvbmZpZykpO1xuXG4gICAgaWYgKHdpdGhYU1JGVG9rZW4gfHwgKHdpdGhYU1JGVG9rZW4gIT09IGZhbHNlICYmIGlzVVJMU2FtZU9yaWdpbihuZXdDb25maWcudXJsKSkpIHtcbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgY29uc3QgeHNyZlZhbHVlID0geHNyZkhlYWRlck5hbWUgJiYgeHNyZkNvb2tpZU5hbWUgJiYgY29va2llcy5yZWFkKHhzcmZDb29raWVOYW1lKTtcblxuICAgICAgaWYgKHhzcmZWYWx1ZSkge1xuICAgICAgICBoZWFkZXJzLnNldCh4c3JmSGVhZGVyTmFtZSwgeHNyZlZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3Q29uZmlnO1xufTtcblxuY29uc3QgaXNYSFJBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9PSAndW5kZWZpbmVkJztcblxudmFyIHhockFkYXB0ZXIgPSBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiYgZnVuY3Rpb24gKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIGNvbnN0IF9jb25maWcgPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG4gICAgbGV0IHJlcXVlc3REYXRhID0gX2NvbmZpZy5kYXRhO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuZnJvbShfY29uZmlnLmhlYWRlcnMpLm5vcm1hbGl6ZSgpO1xuICAgIGxldCB7cmVzcG9uc2VUeXBlfSA9IF9jb25maWc7XG4gICAgbGV0IG9uQ2FuY2VsZWQ7XG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGlmIChfY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChfY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBfY29uZmlnLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cbiAgICByZXF1ZXN0Lm9wZW4oX2NvbmZpZy5tZXRob2QudG9VcHBlckNhc2UoKSwgX2NvbmZpZy51cmwsIHRydWUpO1xuXG4gICAgLy8gU2V0IHRoZSByZXF1ZXN0IHRpbWVvdXQgaW4gTVNcbiAgICByZXF1ZXN0LnRpbWVvdXQgPSBfY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20oXG4gICAgICAgICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBfY29uZmlnLCByZXF1ZXN0KSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH07XG5cbiAgICAvLyBIYW5kbGUgbG93IGxldmVsIG5ldHdvcmsgZXJyb3JzXG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24gaGFuZGxlRXJyb3IoKSB7XG4gICAgICAvLyBSZWFsIGVycm9ycyBhcmUgaGlkZGVuIGZyb20gdXMgYnkgdGhlIGJyb3dzZXJcbiAgICAgIC8vIG9uZXJyb3Igc2hvdWxkIG9ubHkgZmlyZSBpZiBpdCdzIGEgbmV0d29yayBlcnJvclxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgX2NvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICBsZXQgdGltZW91dEVycm9yTWVzc2FnZSA9IF9jb25maWcudGltZW91dCA/ICd0aW1lb3V0IG9mICcgKyBfY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgY29uc3QgdHJhbnNpdGlvbmFsID0gX2NvbmZpZy50cmFuc2l0aW9uYWwgfHwgdHJhbnNpdGlvbmFsRGVmYXVsdHM7XG4gICAgICBpZiAoX2NvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2U7XG4gICAgICB9XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UsXG4gICAgICAgIHRyYW5zaXRpb25hbC5jbGFyaWZ5VGltZW91dEVycm9yID8gQXhpb3NFcnJvci5FVElNRURPVVQgOiBBeGlvc0Vycm9yLkVDT05OQUJPUlRFRCxcbiAgICAgICAgX2NvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgIHJlcXVlc3REYXRhID09PSB1bmRlZmluZWQgJiYgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUobnVsbCk7XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMkMS5mb3JFYWNoKHJlcXVlc3RIZWFkZXJzLnRvSlNPTigpLCBmdW5jdGlvbiBzZXRSZXF1ZXN0SGVhZGVyKHZhbCwga2V5KSB7XG4gICAgICAgIHJlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcihrZXksIHZhbCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBBZGQgd2l0aENyZWRlbnRpYWxzIHRvIHJlcXVlc3QgaWYgbmVlZGVkXG4gICAgaWYgKCF1dGlscyQxLmlzVW5kZWZpbmVkKF9jb25maWcud2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgcmVxdWVzdC53aXRoQ3JlZGVudGlhbHMgPSAhIV9jb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IF9jb25maWcucmVzcG9uc2VUeXBlO1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBwcm9ncmVzcyBpZiBuZWVkZWRcbiAgICBpZiAodHlwZW9mIF9jb25maWcub25Eb3dubG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoX2NvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MsIHRydWUpKTtcbiAgICB9XG5cbiAgICAvLyBOb3QgYWxsIGJyb3dzZXJzIHN1cHBvcnQgdXBsb2FkIGV2ZW50c1xuICAgIGlmICh0eXBlb2YgX2NvbmZpZy5vblVwbG9hZFByb2dyZXNzID09PSAnZnVuY3Rpb24nICYmIHJlcXVlc3QudXBsb2FkKSB7XG4gICAgICByZXF1ZXN0LnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIHByb2dyZXNzRXZlbnRSZWR1Y2VyKF9jb25maWcub25VcGxvYWRQcm9ncmVzcykpO1xuICAgIH1cblxuICAgIGlmIChfY29uZmlnLmNhbmNlbFRva2VuIHx8IF9jb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGNhbmNlbCA9PiB7XG4gICAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoIWNhbmNlbCB8fCBjYW5jZWwudHlwZSA/IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZywgcmVxdWVzdCkgOiBjYW5jZWwpO1xuICAgICAgICByZXF1ZXN0LmFib3J0KCk7XG4gICAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgICAgfTtcblxuICAgICAgX2NvbmZpZy5jYW5jZWxUb2tlbiAmJiBfY29uZmlnLmNhbmNlbFRva2VuLnN1YnNjcmliZShvbkNhbmNlbGVkKTtcbiAgICAgIGlmIChfY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBfY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogX2NvbmZpZy5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkNhbmNlbGVkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2woX2NvbmZpZy51cmwpO1xuXG4gICAgaWYgKHByb3RvY29sICYmIHBsYXRmb3JtLnByb3RvY29scy5pbmRleE9mKHByb3RvY29sKSA9PT0gLTEpIHtcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sICsgJzonLCBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgY29uZmlnKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG5cbiAgICAvLyBTZW5kIHRoZSByZXF1ZXN0XG4gICAgcmVxdWVzdC5zZW5kKHJlcXVlc3REYXRhIHx8IG51bGwpO1xuICB9KTtcbn07XG5cbmNvbnN0IGNvbXBvc2VTaWduYWxzID0gKHNpZ25hbHMsIHRpbWVvdXQpID0+IHtcbiAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgbGV0IGFib3J0ZWQ7XG5cbiAgY29uc3Qgb25hYm9ydCA9IGZ1bmN0aW9uIChjYW5jZWwpIHtcbiAgICBpZiAoIWFib3J0ZWQpIHtcbiAgICAgIGFib3J0ZWQgPSB0cnVlO1xuICAgICAgdW5zdWJzY3JpYmUoKTtcbiAgICAgIGNvbnN0IGVyciA9IGNhbmNlbCBpbnN0YW5jZW9mIEVycm9yID8gY2FuY2VsIDogdGhpcy5yZWFzb247XG4gICAgICBjb250cm9sbGVyLmFib3J0KGVyciBpbnN0YW5jZW9mIEF4aW9zRXJyb3IgPyBlcnIgOiBuZXcgQ2FuY2VsZWRFcnJvcihlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyKSk7XG4gICAgfVxuICB9O1xuXG4gIGxldCB0aW1lciA9IHRpbWVvdXQgJiYgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgb25hYm9ydChuZXcgQXhpb3NFcnJvcihgdGltZW91dCAke3RpbWVvdXR9IG9mIG1zIGV4Y2VlZGVkYCwgQXhpb3NFcnJvci5FVElNRURPVVQpKTtcbiAgfSwgdGltZW91dCk7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmUgPSAoKSA9PiB7XG4gICAgaWYgKHNpZ25hbHMpIHtcbiAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICB0aW1lciA9IG51bGw7XG4gICAgICBzaWduYWxzLmZvckVhY2goc2lnbmFsID0+IHtcbiAgICAgICAgc2lnbmFsICYmXG4gICAgICAgIChzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lciA/IHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uYWJvcnQpIDogc2lnbmFsLnVuc3Vic2NyaWJlKG9uYWJvcnQpKTtcbiAgICAgIH0pO1xuICAgICAgc2lnbmFscyA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiBzaWduYWwgJiYgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgJiYgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkpO1xuXG4gIGNvbnN0IHtzaWduYWx9ID0gY29udHJvbGxlcjtcblxuICBzaWduYWwudW5zdWJzY3JpYmUgPSB1bnN1YnNjcmliZTtcblxuICByZXR1cm4gW3NpZ25hbCwgKCkgPT4ge1xuICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgdGltZXIgPSBudWxsO1xuICB9XTtcbn07XG5cbnZhciBjb21wb3NlU2lnbmFscyQxID0gY29tcG9zZVNpZ25hbHM7XG5cbmNvbnN0IHN0cmVhbUNodW5rID0gZnVuY3Rpb24qIChjaHVuaywgY2h1bmtTaXplKSB7XG4gIGxldCBsZW4gPSBjaHVuay5ieXRlTGVuZ3RoO1xuXG4gIGlmICghY2h1bmtTaXplIHx8IGxlbiA8IGNodW5rU2l6ZSkge1xuICAgIHlpZWxkIGNodW5rO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBwb3MgPSAwO1xuICBsZXQgZW5kO1xuXG4gIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICBlbmQgPSBwb3MgKyBjaHVua1NpemU7XG4gICAgeWllbGQgY2h1bmsuc2xpY2UocG9zLCBlbmQpO1xuICAgIHBvcyA9IGVuZDtcbiAgfVxufTtcblxuY29uc3QgcmVhZEJ5dGVzID0gYXN5bmMgZnVuY3Rpb24qIChpdGVyYWJsZSwgY2h1bmtTaXplLCBlbmNvZGUpIHtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBpdGVyYWJsZSkge1xuICAgIHlpZWxkKiBzdHJlYW1DaHVuayhBcnJheUJ1ZmZlci5pc1ZpZXcoY2h1bmspID8gY2h1bmsgOiAoYXdhaXQgZW5jb2RlKFN0cmluZyhjaHVuaykpKSwgY2h1bmtTaXplKTtcbiAgfVxufTtcblxuY29uc3QgdHJhY2tTdHJlYW0gPSAoc3RyZWFtLCBjaHVua1NpemUsIG9uUHJvZ3Jlc3MsIG9uRmluaXNoLCBlbmNvZGUpID0+IHtcbiAgY29uc3QgaXRlcmF0b3IgPSByZWFkQnl0ZXMoc3RyZWFtLCBjaHVua1NpemUsIGVuY29kZSk7XG5cbiAgbGV0IGJ5dGVzID0gMDtcblxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICB0eXBlOiAnYnl0ZXMnLFxuXG4gICAgYXN5bmMgcHVsbChjb250cm9sbGVyKSB7XG4gICAgICBjb25zdCB7ZG9uZSwgdmFsdWV9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpO1xuXG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBjb250cm9sbGVyLmNsb3NlKCk7XG4gICAgICAgIG9uRmluaXNoKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGxlbiA9IHZhbHVlLmJ5dGVMZW5ndGg7XG4gICAgICBvblByb2dyZXNzICYmIG9uUHJvZ3Jlc3MoYnl0ZXMgKz0gbGVuKTtcbiAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheSh2YWx1ZSkpO1xuICAgIH0sXG4gICAgY2FuY2VsKHJlYXNvbikge1xuICAgICAgb25GaW5pc2gocmVhc29uKTtcbiAgICAgIHJldHVybiBpdGVyYXRvci5yZXR1cm4oKTtcbiAgICB9XG4gIH0sIHtcbiAgICBoaWdoV2F0ZXJNYXJrOiAyXG4gIH0pXG59O1xuXG5jb25zdCBmZXRjaFByb2dyZXNzRGVjb3JhdG9yID0gKHRvdGFsLCBmbikgPT4ge1xuICBjb25zdCBsZW5ndGhDb21wdXRhYmxlID0gdG90YWwgIT0gbnVsbDtcbiAgcmV0dXJuIChsb2FkZWQpID0+IHNldFRpbWVvdXQoKCkgPT4gZm4oe1xuICAgIGxlbmd0aENvbXB1dGFibGUsXG4gICAgdG90YWwsXG4gICAgbG9hZGVkXG4gIH0pKTtcbn07XG5cbmNvbnN0IGlzRmV0Y2hTdXBwb3J0ZWQgPSB0eXBlb2YgZmV0Y2ggPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFJlcXVlc3QgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFJlc3BvbnNlID09PSAnZnVuY3Rpb24nO1xuY29uc3QgaXNSZWFkYWJsZVN0cmVhbVN1cHBvcnRlZCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgdHlwZW9mIFJlYWRhYmxlU3RyZWFtID09PSAnZnVuY3Rpb24nO1xuXG4vLyB1c2VkIG9ubHkgaW5zaWRlIHRoZSBmZXRjaCBhZGFwdGVyXG5jb25zdCBlbmNvZGVUZXh0ID0gaXNGZXRjaFN1cHBvcnRlZCAmJiAodHlwZW9mIFRleHRFbmNvZGVyID09PSAnZnVuY3Rpb24nID9cbiAgICAoKGVuY29kZXIpID0+IChzdHIpID0+IGVuY29kZXIuZW5jb2RlKHN0cikpKG5ldyBUZXh0RW5jb2RlcigpKSA6XG4gICAgYXN5bmMgKHN0cikgPT4gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgbmV3IFJlc3BvbnNlKHN0cikuYXJyYXlCdWZmZXIoKSlcbik7XG5cbmNvbnN0IHN1cHBvcnRzUmVxdWVzdFN0cmVhbSA9IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiYgKCgpID0+IHtcbiAgbGV0IGR1cGxleEFjY2Vzc2VkID0gZmFsc2U7XG5cbiAgY29uc3QgaGFzQ29udGVudFR5cGUgPSBuZXcgUmVxdWVzdChwbGF0Zm9ybS5vcmlnaW4sIHtcbiAgICBib2R5OiBuZXcgUmVhZGFibGVTdHJlYW0oKSxcbiAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICBnZXQgZHVwbGV4KCkge1xuICAgICAgZHVwbGV4QWNjZXNzZWQgPSB0cnVlO1xuICAgICAgcmV0dXJuICdoYWxmJztcbiAgICB9LFxuICB9KS5oZWFkZXJzLmhhcygnQ29udGVudC1UeXBlJyk7XG5cbiAgcmV0dXJuIGR1cGxleEFjY2Vzc2VkICYmICFoYXNDb250ZW50VHlwZTtcbn0pKCk7XG5cbmNvbnN0IERFRkFVTFRfQ0hVTktfU0laRSA9IDY0ICogMTAyNDtcblxuY29uc3Qgc3VwcG9ydHNSZXNwb25zZVN0cmVhbSA9IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiYgISEoKCk9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHV0aWxzJDEuaXNSZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoJycpLmJvZHkpO1xuICB9IGNhdGNoKGVycikge1xuICAgIC8vIHJldHVybiB1bmRlZmluZWRcbiAgfVxufSkoKTtcblxuY29uc3QgcmVzb2x2ZXJzID0ge1xuICBzdHJlYW06IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKChyZXMpID0+IHJlcy5ib2R5KVxufTtcblxuaXNGZXRjaFN1cHBvcnRlZCAmJiAoKChyZXMpID0+IHtcbiAgWyd0ZXh0JywgJ2FycmF5QnVmZmVyJywgJ2Jsb2InLCAnZm9ybURhdGEnLCAnc3RyZWFtJ10uZm9yRWFjaCh0eXBlID0+IHtcbiAgICAhcmVzb2x2ZXJzW3R5cGVdICYmIChyZXNvbHZlcnNbdHlwZV0gPSB1dGlscyQxLmlzRnVuY3Rpb24ocmVzW3R5cGVdKSA/IChyZXMpID0+IHJlc1t0eXBlXSgpIDpcbiAgICAgIChfLCBjb25maWcpID0+IHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFJlc3BvbnNlIHR5cGUgJyR7dHlwZX0nIGlzIG5vdCBzdXBwb3J0ZWRgLCBBeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCwgY29uZmlnKTtcbiAgICAgIH0pO1xuICB9KTtcbn0pKG5ldyBSZXNwb25zZSkpO1xuXG5jb25zdCBnZXRCb2R5TGVuZ3RoID0gYXN5bmMgKGJvZHkpID0+IHtcbiAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgIHJldHVybiAwO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc0Jsb2IoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5zaXplO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc1NwZWNDb21wbGlhbnRGb3JtKGJvZHkpKSB7XG4gICAgcmV0dXJuIChhd2FpdCBuZXcgUmVxdWVzdChib2R5KS5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO1xuICB9XG5cbiAgaWYodXRpbHMkMS5pc0FycmF5QnVmZmVyVmlldyhib2R5KSkge1xuICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGg7XG4gIH1cblxuICBpZih1dGlscyQxLmlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XG4gICAgYm9keSA9IGJvZHkgKyAnJztcbiAgfVxuXG4gIGlmKHV0aWxzJDEuaXNTdHJpbmcoYm9keSkpIHtcbiAgICByZXR1cm4gKGF3YWl0IGVuY29kZVRleHQoYm9keSkpLmJ5dGVMZW5ndGg7XG4gIH1cbn07XG5cbmNvbnN0IHJlc29sdmVCb2R5TGVuZ3RoID0gYXN5bmMgKGhlYWRlcnMsIGJvZHkpID0+IHtcbiAgY29uc3QgbGVuZ3RoID0gdXRpbHMkMS50b0Zpbml0ZU51bWJlcihoZWFkZXJzLmdldENvbnRlbnRMZW5ndGgoKSk7XG5cbiAgcmV0dXJuIGxlbmd0aCA9PSBudWxsID8gZ2V0Qm9keUxlbmd0aChib2R5KSA6IGxlbmd0aDtcbn07XG5cbnZhciBmZXRjaEFkYXB0ZXIgPSBpc0ZldGNoU3VwcG9ydGVkICYmIChhc3luYyAoY29uZmlnKSA9PiB7XG4gIGxldCB7XG4gICAgdXJsLFxuICAgIG1ldGhvZCxcbiAgICBkYXRhLFxuICAgIHNpZ25hbCxcbiAgICBjYW5jZWxUb2tlbixcbiAgICB0aW1lb3V0LFxuICAgIG9uRG93bmxvYWRQcm9ncmVzcyxcbiAgICBvblVwbG9hZFByb2dyZXNzLFxuICAgIHJlc3BvbnNlVHlwZSxcbiAgICBoZWFkZXJzLFxuICAgIHdpdGhDcmVkZW50aWFscyA9ICdzYW1lLW9yaWdpbicsXG4gICAgZmV0Y2hPcHRpb25zXG4gIH0gPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG5cbiAgcmVzcG9uc2VUeXBlID0gcmVzcG9uc2VUeXBlID8gKHJlc3BvbnNlVHlwZSArICcnKS50b0xvd2VyQ2FzZSgpIDogJ3RleHQnO1xuXG4gIGxldCBbY29tcG9zZWRTaWduYWwsIHN0b3BUaW1lb3V0XSA9IChzaWduYWwgfHwgY2FuY2VsVG9rZW4gfHwgdGltZW91dCkgP1xuICAgIGNvbXBvc2VTaWduYWxzJDEoW3NpZ25hbCwgY2FuY2VsVG9rZW5dLCB0aW1lb3V0KSA6IFtdO1xuXG4gIGxldCBmaW5pc2hlZCwgcmVxdWVzdDtcblxuICBjb25zdCBvbkZpbmlzaCA9ICgpID0+IHtcbiAgICAhZmluaXNoZWQgJiYgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb21wb3NlZFNpZ25hbCAmJiBjb21wb3NlZFNpZ25hbC51bnN1YnNjcmliZSgpO1xuICAgIH0pO1xuXG4gICAgZmluaXNoZWQgPSB0cnVlO1xuICB9O1xuXG4gIGxldCByZXF1ZXN0Q29udGVudExlbmd0aDtcblxuICB0cnkge1xuICAgIGlmIChcbiAgICAgIG9uVXBsb2FkUHJvZ3Jlc3MgJiYgc3VwcG9ydHNSZXF1ZXN0U3RyZWFtICYmIG1ldGhvZCAhPT0gJ2dldCcgJiYgbWV0aG9kICE9PSAnaGVhZCcgJiZcbiAgICAgIChyZXF1ZXN0Q29udGVudExlbmd0aCA9IGF3YWl0IHJlc29sdmVCb2R5TGVuZ3RoKGhlYWRlcnMsIGRhdGEpKSAhPT0gMFxuICAgICkge1xuICAgICAgbGV0IF9yZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBkYXRhLFxuICAgICAgICBkdXBsZXg6IFwiaGFsZlwiXG4gICAgICB9KTtcblxuICAgICAgbGV0IGNvbnRlbnRUeXBlSGVhZGVyO1xuXG4gICAgICBpZiAodXRpbHMkMS5pc0Zvcm1EYXRhKGRhdGEpICYmIChjb250ZW50VHlwZUhlYWRlciA9IF9yZXF1ZXN0LmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkpIHtcbiAgICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShjb250ZW50VHlwZUhlYWRlcik7XG4gICAgICB9XG5cbiAgICAgIGlmIChfcmVxdWVzdC5ib2R5KSB7XG4gICAgICAgIGRhdGEgPSB0cmFja1N0cmVhbShfcmVxdWVzdC5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIGZldGNoUHJvZ3Jlc3NEZWNvcmF0b3IoXG4gICAgICAgICAgcmVxdWVzdENvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25VcGxvYWRQcm9ncmVzcylcbiAgICAgICAgKSwgbnVsbCwgZW5jb2RlVGV4dCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF1dGlscyQxLmlzU3RyaW5nKHdpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHdpdGhDcmVkZW50aWFscyA9IHdpdGhDcmVkZW50aWFscyA/ICdjb3JzJyA6ICdvbWl0JztcbiAgICB9XG5cbiAgICByZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAuLi5mZXRjaE9wdGlvbnMsXG4gICAgICBzaWduYWw6IGNvbXBvc2VkU2lnbmFsLFxuICAgICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAgIGhlYWRlcnM6IGhlYWRlcnMubm9ybWFsaXplKCkudG9KU09OKCksXG4gICAgICBib2R5OiBkYXRhLFxuICAgICAgZHVwbGV4OiBcImhhbGZcIixcbiAgICAgIHdpdGhDcmVkZW50aWFsc1xuICAgIH0pO1xuXG4gICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2gocmVxdWVzdCk7XG5cbiAgICBjb25zdCBpc1N0cmVhbVJlc3BvbnNlID0gc3VwcG9ydHNSZXNwb25zZVN0cmVhbSAmJiAocmVzcG9uc2VUeXBlID09PSAnc3RyZWFtJyB8fCByZXNwb25zZVR5cGUgPT09ICdyZXNwb25zZScpO1xuXG4gICAgaWYgKHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKG9uRG93bmxvYWRQcm9ncmVzcyB8fCBpc1N0cmVhbVJlc3BvbnNlKSkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuXG4gICAgICBbJ3N0YXR1cycsICdzdGF0dXNUZXh0JywgJ2hlYWRlcnMnXS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICBvcHRpb25zW3Byb3BdID0gcmVzcG9uc2VbcHJvcF07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2VDb250ZW50TGVuZ3RoID0gdXRpbHMkMS50b0Zpbml0ZU51bWJlcihyZXNwb25zZS5oZWFkZXJzLmdldCgnY29udGVudC1sZW5ndGgnKSk7XG5cbiAgICAgIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKFxuICAgICAgICB0cmFja1N0cmVhbShyZXNwb25zZS5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIG9uRG93bmxvYWRQcm9ncmVzcyAmJiBmZXRjaFByb2dyZXNzRGVjb3JhdG9yKFxuICAgICAgICAgIHJlc3BvbnNlQ29udGVudExlbmd0aCxcbiAgICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihvbkRvd25sb2FkUHJvZ3Jlc3MsIHRydWUpXG4gICAgICAgICksIGlzU3RyZWFtUmVzcG9uc2UgJiYgb25GaW5pc2gsIGVuY29kZVRleHQpLFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZSB8fCAndGV4dCc7XG5cbiAgICBsZXQgcmVzcG9uc2VEYXRhID0gYXdhaXQgcmVzb2x2ZXJzW3V0aWxzJDEuZmluZEtleShyZXNvbHZlcnMsIHJlc3BvbnNlVHlwZSkgfHwgJ3RleHQnXShyZXNwb25zZSwgY29uZmlnKTtcblxuICAgICFpc1N0cmVhbVJlc3BvbnNlICYmIG9uRmluaXNoKCk7XG5cbiAgICBzdG9wVGltZW91dCAmJiBzdG9wVGltZW91dCgpO1xuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBoZWFkZXJzOiBBeGlvc0hlYWRlcnMkMS5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpLFxuICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVzcG9uc2Uuc3RhdHVzVGV4dCxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9KTtcbiAgICB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBvbkZpbmlzaCgpO1xuXG4gICAgaWYgKGVyciAmJiBlcnIubmFtZSA9PT0gJ1R5cGVFcnJvcicgJiYgL2ZldGNoL2kudGVzdChlcnIubWVzc2FnZSkpIHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSxcbiAgICAgICAge1xuICAgICAgICAgIGNhdXNlOiBlcnIuY2F1c2UgfHwgZXJyXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG5cbiAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZXJyLCBlcnIgJiYgZXJyLmNvZGUsIGNvbmZpZywgcmVxdWVzdCk7XG4gIH1cbn0pO1xuXG5jb25zdCBrbm93bkFkYXB0ZXJzID0ge1xuICBodHRwOiBodHRwQWRhcHRlcixcbiAgeGhyOiB4aHJBZGFwdGVyLFxuICBmZXRjaDogZmV0Y2hBZGFwdGVyXG59O1xuXG51dGlscyQxLmZvckVhY2goa25vd25BZGFwdGVycywgKGZuLCB2YWx1ZSkgPT4ge1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHt2YWx1ZX0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdhZGFwdGVyTmFtZScsIHt2YWx1ZX0pO1xuICB9XG59KTtcblxuY29uc3QgcmVuZGVyUmVhc29uID0gKHJlYXNvbikgPT4gYC0gJHtyZWFzb259YDtcblxuY29uc3QgaXNSZXNvbHZlZEhhbmRsZSA9IChhZGFwdGVyKSA9PiB1dGlscyQxLmlzRnVuY3Rpb24oYWRhcHRlcikgfHwgYWRhcHRlciA9PT0gbnVsbCB8fCBhZGFwdGVyID09PSBmYWxzZTtcblxudmFyIGFkYXB0ZXJzID0ge1xuICBnZXRBZGFwdGVyOiAoYWRhcHRlcnMpID0+IHtcbiAgICBhZGFwdGVycyA9IHV0aWxzJDEuaXNBcnJheShhZGFwdGVycykgPyBhZGFwdGVycyA6IFthZGFwdGVyc107XG5cbiAgICBjb25zdCB7bGVuZ3RofSA9IGFkYXB0ZXJzO1xuICAgIGxldCBuYW1lT3JBZGFwdGVyO1xuICAgIGxldCBhZGFwdGVyO1xuXG4gICAgY29uc3QgcmVqZWN0ZWRSZWFzb25zID0ge307XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBuYW1lT3JBZGFwdGVyID0gYWRhcHRlcnNbaV07XG4gICAgICBsZXQgaWQ7XG5cbiAgICAgIGFkYXB0ZXIgPSBuYW1lT3JBZGFwdGVyO1xuXG4gICAgICBpZiAoIWlzUmVzb2x2ZWRIYW5kbGUobmFtZU9yQWRhcHRlcikpIHtcbiAgICAgICAgYWRhcHRlciA9IGtub3duQWRhcHRlcnNbKGlkID0gU3RyaW5nKG5hbWVPckFkYXB0ZXIpKS50b0xvd2VyQ2FzZSgpXTtcblxuICAgICAgICBpZiAoYWRhcHRlciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoYFVua25vd24gYWRhcHRlciAnJHtpZH0nYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFkYXB0ZXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJlamVjdGVkUmVhc29uc1tpZCB8fCAnIycgKyBpXSA9IGFkYXB0ZXI7XG4gICAgfVxuXG4gICAgaWYgKCFhZGFwdGVyKSB7XG5cbiAgICAgIGNvbnN0IHJlYXNvbnMgPSBPYmplY3QuZW50cmllcyhyZWplY3RlZFJlYXNvbnMpXG4gICAgICAgIC5tYXAoKFtpZCwgc3RhdGVdKSA9PiBgYWRhcHRlciAke2lkfSBgICtcbiAgICAgICAgICAoc3RhdGUgPT09IGZhbHNlID8gJ2lzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50JyA6ICdpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCcpXG4gICAgICAgICk7XG5cbiAgICAgIGxldCBzID0gbGVuZ3RoID9cbiAgICAgICAgKHJlYXNvbnMubGVuZ3RoID4gMSA/ICdzaW5jZSA6XFxuJyArIHJlYXNvbnMubWFwKHJlbmRlclJlYXNvbikuam9pbignXFxuJykgOiAnICcgKyByZW5kZXJSZWFzb24ocmVhc29uc1swXSkpIDpcbiAgICAgICAgJ2FzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkJztcblxuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGBUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0IGAgKyBzLFxuICAgICAgICAnRVJSX05PVF9TVVBQT1JUJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWRhcHRlcjtcbiAgfSxcbiAgYWRhcHRlcnM6IGtub3duQWRhcHRlcnNcbn07XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpIHtcbiAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbikge1xuICAgIGNvbmZpZy5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCk7XG4gIH1cblxuICBpZiAoY29uZmlnLnNpZ25hbCAmJiBjb25maWcuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcpO1xuICB9XG59XG5cbi8qKlxuICogRGlzcGF0Y2ggYSByZXF1ZXN0IHRvIHRoZSBzZXJ2ZXIgdXNpbmcgdGhlIGNvbmZpZ3VyZWQgYWRhcHRlci5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gY29uZmlnIFRoZSBjb25maWcgdGhhdCBpcyB0byBiZSB1c2VkIGZvciB0aGUgcmVxdWVzdFxuICpcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xuZnVuY3Rpb24gZGlzcGF0Y2hSZXF1ZXN0KGNvbmZpZykge1xuICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgY29uZmlnLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKGNvbmZpZy5oZWFkZXJzKTtcblxuICAvLyBUcmFuc2Zvcm0gcmVxdWVzdCBkYXRhXG4gIGNvbmZpZy5kYXRhID0gdHJhbnNmb3JtRGF0YS5jYWxsKFxuICAgIGNvbmZpZyxcbiAgICBjb25maWcudHJhbnNmb3JtUmVxdWVzdFxuICApO1xuXG4gIGlmIChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5kZXhPZihjb25maWcubWV0aG9kKSAhPT0gLTEpIHtcbiAgICBjb25maWcuaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJywgZmFsc2UpO1xuICB9XG5cbiAgY29uc3QgYWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXIoY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMkMS5hZGFwdGVyKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMkMS5mcm9tKHJlc3BvbnNlLmhlYWRlcnMpO1xuXG4gICAgcmV0dXJuIHJlc3BvbnNlO1xuICB9LCBmdW5jdGlvbiBvbkFkYXB0ZXJSZWplY3Rpb24ocmVhc29uKSB7XG4gICAgaWYgKCFpc0NhbmNlbChyZWFzb24pKSB7XG4gICAgICB0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkKGNvbmZpZyk7XG5cbiAgICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgICBpZiAocmVhc29uICYmIHJlYXNvbi5yZXNwb25zZSkge1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZVxuICAgICAgICApO1xuICAgICAgICByZWFzb24ucmVzcG9uc2UuaGVhZGVycyA9IEF4aW9zSGVhZGVycyQxLmZyb20ocmVhc29uLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlamVjdChyZWFzb24pO1xuICB9KTtcbn1cblxuY29uc3QgVkVSU0lPTiA9IFwiMS43LjJcIjtcblxuY29uc3QgdmFsaWRhdG9ycyQxID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzJDFbdHlwZV0gPSBmdW5jdGlvbiB2YWxpZGF0b3IodGhpbmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaW5nID09PSB0eXBlIHx8ICdhJyArIChpIDwgMSA/ICduICcgOiAnICcpICsgdHlwZTtcbiAgfTtcbn0pO1xuXG5jb25zdCBkZXByZWNhdGVkV2FybmluZ3MgPSB7fTtcblxuLyoqXG4gKiBUcmFuc2l0aW9uYWwgb3B0aW9uIHZhbGlkYXRvclxuICpcbiAqIEBwYXJhbSB7ZnVuY3Rpb258Ym9vbGVhbj99IHZhbGlkYXRvciAtIHNldCB0byBmYWxzZSBpZiB0aGUgdHJhbnNpdGlvbmFsIG9wdGlvbiBoYXMgYmVlbiByZW1vdmVkXG4gKiBAcGFyYW0ge3N0cmluZz99IHZlcnNpb24gLSBkZXByZWNhdGVkIHZlcnNpb24gLyByZW1vdmVkIHNpbmNlIHZlcnNpb25cbiAqIEBwYXJhbSB7c3RyaW5nP30gbWVzc2FnZSAtIHNvbWUgbWVzc2FnZSB3aXRoIGFkZGl0aW9uYWwgaW5mb1xuICpcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycyQxLnRyYW5zaXRpb25hbCA9IGZ1bmN0aW9uIHRyYW5zaXRpb25hbCh2YWxpZGF0b3IsIHZlcnNpb24sIG1lc3NhZ2UpIHtcbiAgZnVuY3Rpb24gZm9ybWF0TWVzc2FnZShvcHQsIGRlc2MpIHtcbiAgICByZXR1cm4gJ1tBeGlvcyB2JyArIFZFUlNJT04gKyAnXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFxcJycgKyBvcHQgKyAnXFwnJyArIGRlc2MgKyAobWVzc2FnZSA/ICcuICcgKyBtZXNzYWdlIDogJycpO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuICh2YWx1ZSwgb3B0LCBvcHRzKSA9PiB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRpb25zXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBhbGxvd1Vua25vd25cbiAqXG4gKiBAcmV0dXJucyB7b2JqZWN0fVxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9wdGlvbnMpO1xuICBsZXQgaSA9IGtleXMubGVuZ3RoO1xuICB3aGlsZSAoaS0tID4gMCkge1xuICAgIGNvbnN0IG9wdCA9IGtleXNbaV07XG4gICAgY29uc3QgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRpb25zW29wdF07XG4gICAgICBjb25zdCByZXN1bHQgPSB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbGlkYXRvcih2YWx1ZSwgb3B0LCBvcHRpb25zKTtcbiAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ29wdGlvbiAnICsgb3B0ICsgJyBtdXN0IGJlICcgKyByZXN1bHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChhbGxvd1Vua25vd24gIT09IHRydWUpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdVbmtub3duIG9wdGlvbiAnICsgb3B0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OKTtcbiAgICB9XG4gIH1cbn1cblxudmFyIHZhbGlkYXRvciA9IHtcbiAgYXNzZXJ0T3B0aW9ucyxcbiAgdmFsaWRhdG9yczogdmFsaWRhdG9ycyQxXG59O1xuXG5jb25zdCB2YWxpZGF0b3JzID0gdmFsaWRhdG9yLnZhbGlkYXRvcnM7XG5cbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmNsYXNzIEF4aW9zIHtcbiAgY29uc3RydWN0b3IoaW5zdGFuY2VDb25maWcpIHtcbiAgICB0aGlzLmRlZmF1bHRzID0gaW5zdGFuY2VDb25maWc7XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgICByZXF1ZXN0OiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyJDEoKSxcbiAgICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyJDEoKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gY29uZmlnT3JVcmwgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICAgKiBAcGFyYW0gez9PYmplY3R9IGNvbmZpZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gICAqL1xuICBhc3luYyByZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgbGV0IGR1bW15O1xuXG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlID8gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZHVtbXkgPSB7fSkgOiAoZHVtbXkgPSBuZXcgRXJyb3IoKSk7XG5cbiAgICAgICAgLy8gc2xpY2Ugb2ZmIHRoZSBFcnJvcjogLi4uIGxpbmVcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBkdW1teS5zdGFjayA/IGR1bW15LnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sICcnKSA6ICcnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghZXJyLnN0YWNrKSB7XG4gICAgICAgICAgICBlcnIuc3RhY2sgPSBzdGFjaztcbiAgICAgICAgICAgIC8vIG1hdGNoIHdpdGhvdXQgdGhlIDIgdG9wIHN0YWNrIGxpbmVzXG4gICAgICAgICAgfSBlbHNlIGlmIChzdGFjayAmJiAhU3RyaW5nKGVyci5zdGFjaykuZW5kc1dpdGgoc3RhY2sucmVwbGFjZSgvXi4rXFxuLitcXG4vLCAnJykpKSB7XG4gICAgICAgICAgICBlcnIuc3RhY2sgKz0gJ1xcbicgKyBzdGFjaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBpZ25vcmUgdGhlIGNhc2Ugd2hlcmUgXCJzdGFja1wiIGlzIGFuIHVuLXdyaXRhYmxlIHByb3BlcnR5XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIF9yZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gICAgaWYgKHR5cGVvZiBjb25maWdPclVybCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZyA9IGNvbmZpZyB8fCB7fTtcbiAgICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uZmlnID0gY29uZmlnT3JVcmwgfHwge307XG4gICAgfVxuXG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcblxuICAgIGNvbnN0IHt0cmFuc2l0aW9uYWwsIHBhcmFtc1NlcmlhbGl6ZXIsIGhlYWRlcnN9ID0gY29uZmlnO1xuXG4gICAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyh0cmFuc2l0aW9uYWwsIHtcbiAgICAgICAgc2lsZW50SlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgICBjbGFyaWZ5VGltZW91dEVycm9yOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pXG4gICAgICB9LCBmYWxzZSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgICAgaWYgKHV0aWxzJDEuaXNGdW5jdGlvbihwYXJhbXNTZXJpYWxpemVyKSkge1xuICAgICAgICBjb25maWcucGFyYW1zU2VyaWFsaXplciA9IHtcbiAgICAgICAgICBzZXJpYWxpemU6IHBhcmFtc1NlcmlhbGl6ZXJcbiAgICAgICAgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHBhcmFtc1NlcmlhbGl6ZXIsIHtcbiAgICAgICAgICBlbmNvZGU6IHZhbGlkYXRvcnMuZnVuY3Rpb24sXG4gICAgICAgICAgc2VyaWFsaXplOiB2YWxpZGF0b3JzLmZ1bmN0aW9uXG4gICAgICAgIH0sIHRydWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCBjb25maWcubWV0aG9kXG4gICAgY29uZmlnLm1ldGhvZCA9IChjb25maWcubWV0aG9kIHx8IHRoaXMuZGVmYXVsdHMubWV0aG9kIHx8ICdnZXQnKS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgLy8gRmxhdHRlbiBoZWFkZXJzXG4gICAgbGV0IGNvbnRleHRIZWFkZXJzID0gaGVhZGVycyAmJiB1dGlscyQxLm1lcmdlKFxuICAgICAgaGVhZGVycy5jb21tb24sXG4gICAgICBoZWFkZXJzW2NvbmZpZy5tZXRob2RdXG4gICAgKTtcblxuICAgIGhlYWRlcnMgJiYgdXRpbHMkMS5mb3JFYWNoKFxuICAgICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgICAobWV0aG9kKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBoZWFkZXJzW21ldGhvZF07XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzJDEuY29uY2F0KGNvbnRleHRIZWFkZXJzLCBoZWFkZXJzKTtcblxuICAgIC8vIGZpbHRlciBvdXQgc2tpcHBlZCBpbnRlcmNlcHRvcnNcbiAgICBjb25zdCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICAgIGxldCBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSB0cnVlO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbiB1bnNoaWZ0UmVxdWVzdEludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICAgIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnVuc2hpZnQoaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uIHB1c2hSZXNwb25zZUludGVyY2VwdG9ycyhpbnRlcmNlcHRvcikge1xuICAgICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gICAgfSk7XG5cbiAgICBsZXQgcHJvbWlzZTtcbiAgICBsZXQgaSA9IDA7XG4gICAgbGV0IGxlbjtcblxuICAgIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgICBjb25zdCBjaGFpbiA9IFtkaXNwYXRjaFJlcXVlc3QuYmluZCh0aGlzKSwgdW5kZWZpbmVkXTtcbiAgICAgIGNoYWluLnVuc2hpZnQuYXBwbHkoY2hhaW4sIHJlcXVlc3RJbnRlcmNlcHRvckNoYWluKTtcbiAgICAgIGNoYWluLnB1c2guYXBwbHkoY2hhaW4sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBsZW4gPSBjaGFpbi5sZW5ndGg7XG5cbiAgICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcblxuICAgICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihjaGFpbltpKytdLCBjaGFpbltpKytdKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfVxuXG4gICAgbGVuID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgbGV0IG5ld0NvbmZpZyA9IGNvbmZpZztcblxuICAgIGkgPSAwO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIGNvbnN0IG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIGNvbnN0IG9uUmVqZWN0ZWQgPSByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbltpKytdO1xuICAgICAgdHJ5IHtcbiAgICAgICAgbmV3Q29uZmlnID0gb25GdWxmaWxsZWQobmV3Q29uZmlnKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIG9uUmVqZWN0ZWQuY2FsbCh0aGlzLCBlcnJvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0LmNhbGwodGhpcywgbmV3Q29uZmlnKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG5cbiAgICBpID0gMDtcbiAgICBsZW4gPSByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4ocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluW2krK10sIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfVxuXG4gIGdldFVyaShjb25maWcpIHtcbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscyQxLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kTm9EYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uKHVybCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMkMS5mb3JFYWNoKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZFdpdGhEYXRhKG1ldGhvZCkge1xuICAvKmVzbGludCBmdW5jLW5hbWVzOjAqL1xuXG4gIGZ1bmN0aW9uIGdlbmVyYXRlSFRUUE1ldGhvZChpc0Zvcm0pIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gaHR0cE1ldGhvZCh1cmwsIGRhdGEsIGNvbmZpZykge1xuICAgICAgcmV0dXJuIHRoaXMucmVxdWVzdChtZXJnZUNvbmZpZyhjb25maWcgfHwge30sIHtcbiAgICAgICAgbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiBpc0Zvcm0gPyB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICB9IDoge30sXG4gICAgICAgIHVybCxcbiAgICAgICAgZGF0YVxuICAgICAgfSkpO1xuICAgIH07XG4gIH1cblxuICBBeGlvcy5wcm90b3R5cGVbbWV0aG9kXSA9IGdlbmVyYXRlSFRUUE1ldGhvZCgpO1xuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2QgKyAnRm9ybSddID0gZ2VuZXJhdGVIVFRQTWV0aG9kKHRydWUpO1xufSk7XG5cbnZhciBBeGlvcyQxID0gQXhpb3M7XG5cbi8qKlxuICogQSBgQ2FuY2VsVG9rZW5gIGlzIGFuIG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlcXVlc3QgY2FuY2VsbGF0aW9uIG9mIGFuIG9wZXJhdGlvbi5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKlxuICogQHJldHVybnMge0NhbmNlbFRva2VufVxuICovXG5jbGFzcyBDYW5jZWxUb2tlbiB7XG4gIGNvbnN0cnVjdG9yKGV4ZWN1dG9yKSB7XG4gICAgaWYgKHR5cGVvZiBleGVjdXRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLicpO1xuICAgIH1cblxuICAgIGxldCByZXNvbHZlUHJvbWlzZTtcblxuICAgIHRoaXMucHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIHByb21pc2VFeGVjdXRvcihyZXNvbHZlKSB7XG4gICAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gICAgfSk7XG5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXM7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuKGNhbmNlbCA9PiB7XG4gICAgICBpZiAoIXRva2VuLl9saXN0ZW5lcnMpIHJldHVybjtcblxuICAgICAgbGV0IGkgPSB0b2tlbi5fbGlzdGVuZXJzLmxlbmd0aDtcblxuICAgICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgICAgdG9rZW4uX2xpc3RlbmVyc1tpXShjYW5jZWwpO1xuICAgICAgfVxuICAgICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gICAgfSk7XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgIHRoaXMucHJvbWlzZS50aGVuID0gb25mdWxmaWxsZWQgPT4ge1xuICAgICAgbGV0IF9yZXNvbHZlO1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdG9rZW4uc3Vic2NyaWJlKHJlc29sdmUpO1xuICAgICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgICAgcHJvbWlzZS5jYW5jZWwgPSBmdW5jdGlvbiByZWplY3QoKSB7XG4gICAgICAgIHRva2VuLnVuc3Vic2NyaWJlKF9yZXNvbHZlKTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gICAgICBpZiAodG9rZW4ucmVhc29uKSB7XG4gICAgICAgIC8vIENhbmNlbGxhdGlvbiBoYXMgYWxyZWFkeSBiZWVuIHJlcXVlc3RlZFxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRva2VuLnJlYXNvbiA9IG5ldyBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCk7XG4gICAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICAgKi9cbiAgdGhyb3dJZlJlcXVlc3RlZCgpIHtcbiAgICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICAgIHRocm93IHRoaXMucmVhc29uO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJzY3JpYmUgdG8gdGhlIGNhbmNlbCBzaWduYWxcbiAgICovXG5cbiAgc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICBsaXN0ZW5lcih0aGlzLnJlYXNvbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2xpc3RlbmVycykge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saXN0ZW5lcnMgPSBbbGlzdGVuZXJdO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBVbnN1YnNjcmliZSBmcm9tIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHVuc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gICAgaWYgKCF0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG4gICAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzLnNwbGljZShpbmRleCwgMSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAgICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAgICovXG4gIHN0YXRpYyBzb3VyY2UoKSB7XG4gICAgbGV0IGNhbmNlbDtcbiAgICBjb25zdCB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgICBjYW5jZWwgPSBjO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbixcbiAgICAgIGNhbmNlbFxuICAgIH07XG4gIH1cbn1cblxudmFyIENhbmNlbFRva2VuJDEgPSBDYW5jZWxUb2tlbjtcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKlxuICogQHJldHVybnMge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiBzcHJlYWQoY2FsbGJhY2spIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoYXJyKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFycik7XG4gIH07XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvc1xuICpcbiAqIEBwYXJhbSB7Kn0gcGF5bG9hZCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSBwYXlsb2FkIGlzIGFuIGVycm9yIHRocm93biBieSBBeGlvcywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscyQxLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59XG5cbmNvbnN0IEh0dHBTdGF0dXNDb2RlID0ge1xuICBDb250aW51ZTogMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHM6IDEwMSxcbiAgUHJvY2Vzc2luZzogMTAyLFxuICBFYXJseUhpbnRzOiAxMDMsXG4gIE9rOiAyMDAsXG4gIENyZWF0ZWQ6IDIwMSxcbiAgQWNjZXB0ZWQ6IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOiAyMDMsXG4gIE5vQ29udGVudDogMjA0LFxuICBSZXNldENvbnRlbnQ6IDIwNSxcbiAgUGFydGlhbENvbnRlbnQ6IDIwNixcbiAgTXVsdGlTdGF0dXM6IDIwNyxcbiAgQWxyZWFkeVJlcG9ydGVkOiAyMDgsXG4gIEltVXNlZDogMjI2LFxuICBNdWx0aXBsZUNob2ljZXM6IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseTogMzAxLFxuICBGb3VuZDogMzAyLFxuICBTZWVPdGhlcjogMzAzLFxuICBOb3RNb2RpZmllZDogMzA0LFxuICBVc2VQcm94eTogMzA1LFxuICBVbnVzZWQ6IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3Q6IDMwNyxcbiAgUGVybWFuZW50UmVkaXJlY3Q6IDMwOCxcbiAgQmFkUmVxdWVzdDogNDAwLFxuICBVbmF1dGhvcml6ZWQ6IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkOiA0MDIsXG4gIEZvcmJpZGRlbjogNDAzLFxuICBOb3RGb3VuZDogNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkOiA0MDUsXG4gIE5vdEFjY2VwdGFibGU6IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0OiA0MDgsXG4gIENvbmZsaWN0OiA0MDksXG4gIEdvbmU6IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQ6IDQxMSxcbiAgUHJlY29uZGl0aW9uRmFpbGVkOiA0MTIsXG4gIFBheWxvYWRUb29MYXJnZTogNDEzLFxuICBVcmlUb29Mb25nOiA0MTQsXG4gIFVuc3VwcG9ydGVkTWVkaWFUeXBlOiA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGU6IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQ6IDQxNyxcbiAgSW1BVGVhcG90OiA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdDogNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5OiA0MjIsXG4gIExvY2tlZDogNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5OiA0MjQsXG4gIFRvb0Vhcmx5OiA0MjUsXG4gIFVwZ3JhZGVSZXF1aXJlZDogNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZDogNDI4LFxuICBUb29NYW55UmVxdWVzdHM6IDQyOSxcbiAgUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOiA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOiA0NTEsXG4gIEludGVybmFsU2VydmVyRXJyb3I6IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQ6IDUwMSxcbiAgQmFkR2F0ZXdheTogNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGU6IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQ6IDUwNCxcbiAgSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzOiA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2U6IDUwNyxcbiAgTG9vcERldGVjdGVkOiA1MDgsXG4gIE5vdEV4dGVuZGVkOiA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOiA1MTEsXG59O1xuXG5PYmplY3QuZW50cmllcyhIdHRwU3RhdHVzQ29kZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gIEh0dHBTdGF0dXNDb2RlW3ZhbHVlXSA9IGtleTtcbn0pO1xuXG52YXIgSHR0cFN0YXR1c0NvZGUkMSA9IEh0dHBTdGF0dXNDb2RlO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybnMge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQXhpb3MkMShkZWZhdWx0Q29uZmlnKTtcbiAgY29uc3QgaW5zdGFuY2UgPSBiaW5kKEF4aW9zJDEucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzJDEuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcyQxLnByb3RvdHlwZSwgY29udGV4dCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMkMS5leHRlbmQoaW5zdGFuY2UsIGNvbnRleHQsIG51bGwsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gRmFjdG9yeSBmb3IgY3JlYXRpbmcgbmV3IGluc3RhbmNlc1xuICBpbnN0YW5jZS5jcmVhdGUgPSBmdW5jdGlvbiBjcmVhdGUoaW5zdGFuY2VDb25maWcpIHtcbiAgICByZXR1cm4gY3JlYXRlSW5zdGFuY2UobWVyZ2VDb25maWcoZGVmYXVsdENvbmZpZywgaW5zdGFuY2VDb25maWcpKTtcbiAgfTtcblxuICByZXR1cm4gaW5zdGFuY2U7XG59XG5cbi8vIENyZWF0ZSB0aGUgZGVmYXVsdCBpbnN0YW5jZSB0byBiZSBleHBvcnRlZFxuY29uc3QgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyQxKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zJDE7XG5cbi8vIEV4cG9zZSBDYW5jZWwgJiBDYW5jZWxUb2tlblxuYXhpb3MuQ2FuY2VsZWRFcnJvciA9IENhbmNlbGVkRXJyb3I7XG5heGlvcy5DYW5jZWxUb2tlbiA9IENhbmNlbFRva2VuJDE7XG5heGlvcy5pc0NhbmNlbCA9IGlzQ2FuY2VsO1xuYXhpb3MuVkVSU0lPTiA9IFZFUlNJT047XG5heGlvcy50b0Zvcm1EYXRhID0gdG9Gb3JtRGF0YTtcblxuLy8gRXhwb3NlIEF4aW9zRXJyb3IgY2xhc3NcbmF4aW9zLkF4aW9zRXJyb3IgPSBBeGlvc0Vycm9yO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcblxuYXhpb3Muc3ByZWFkID0gc3ByZWFkO1xuXG4vLyBFeHBvc2UgaXNBeGlvc0Vycm9yXG5heGlvcy5pc0F4aW9zRXJyb3IgPSBpc0F4aW9zRXJyb3I7XG5cbi8vIEV4cG9zZSBtZXJnZUNvbmZpZ1xuYXhpb3MubWVyZ2VDb25maWcgPSBtZXJnZUNvbmZpZztcblxuYXhpb3MuQXhpb3NIZWFkZXJzID0gQXhpb3NIZWFkZXJzJDE7XG5cbmF4aW9zLmZvcm1Ub0pTT04gPSB0aGluZyA9PiBmb3JtRGF0YVRvSlNPTih1dGlscyQxLmlzSFRNTEZvcm0odGhpbmcpID8gbmV3IEZvcm1EYXRhKHRoaW5nKSA6IHRoaW5nKTtcblxuYXhpb3MuZ2V0QWRhcHRlciA9IGFkYXB0ZXJzLmdldEFkYXB0ZXI7XG5cbmF4aW9zLkh0dHBTdGF0dXNDb2RlID0gSHR0cFN0YXR1c0NvZGUkMTtcblxuYXhpb3MuZGVmYXVsdCA9IGF4aW9zO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGF4aW9zO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YXhpb3MuY2pzLm1hcFxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG52YXIgX19nZW5lcmF0b3IgPSAodGhpcyAmJiB0aGlzLl9fZ2VuZXJhdG9yKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgYm9keSkge1xuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5BeGlvc0NsaWVudCA9IHZvaWQgMDtcbnZhciBheGlvc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJheGlvc1wiKSk7XG52YXIgQXhpb3NDbGllbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gQXhpb3NDbGllbnQoX2EpIHtcbiAgICAgICAgdmFyIHJlc3BvbnNlSGFuZGxlciA9IF9hLnJlc3BvbnNlSGFuZGxlciwgcmVxdWVzdENvbmZpZ0J1aWxkZXIgPSBfYS5yZXF1ZXN0Q29uZmlnQnVpbGRlcjtcbiAgICAgICAgdGhpcy5yZXNwb25zZUhhbmRsZXIgPSByZXNwb25zZUhhbmRsZXI7XG4gICAgICAgIHRoaXMucmVxdWVzdENvbmZpZ0J1aWxkZXIgPSByZXF1ZXN0Q29uZmlnQnVpbGRlcjtcbiAgICB9XG4gICAgQXhpb3NDbGllbnQucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIChwYXRoLCBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlcXVlc3RDb25maWc7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMucmVxdWVzdENvbmZpZ0J1aWxkZXIuYnVpbGQoXCJnZXRcIiwgcGF0aCwgcGFyYW1zKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RDb25maWcgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnNlbmRSZXF1ZXN0KHJlcXVlc3RDb25maWcpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gWzIgLypyZXR1cm4qLywgKF9hLnNlbnQoKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEF4aW9zQ2xpZW50LnByb3RvdHlwZS5nZXREYXRhID0gZnVuY3Rpb24gKHBhdGgsIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVxdWVzdENvbmZpZztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5yZXF1ZXN0Q29uZmlnQnVpbGRlci5idWlsZChcImdldFwiLCBwYXRoLCBwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZVR5cGU6IFwiYXJyYXlidWZmZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENvbmZpZyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdENvbmZpZyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbMiAvKnJldHVybiovLCAoX2Euc2VudCgpKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQXhpb3NDbGllbnQucHJvdG90eXBlLnBvc3QgPSBmdW5jdGlvbiAocGF0aCwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXF1ZXN0Q29uZmlnO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnJlcXVlc3RDb25maWdCdWlsZGVyLmJ1aWxkKFwicG9zdFwiLCBwYXRoLCBwYXJhbXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENvbmZpZyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdENvbmZpZyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbMiAvKnJldHVybiovLCAoX2Euc2VudCgpKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQXhpb3NDbGllbnQucHJvdG90eXBlLnBvc3REYXRhID0gZnVuY3Rpb24gKHBhdGgsIGZvcm1EYXRhKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXF1ZXN0Q29uZmlnO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnJlcXVlc3RDb25maWdCdWlsZGVyLmJ1aWxkKFwicG9zdFwiLCBwYXRoLCBmb3JtRGF0YSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0Q29uZmlnID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5zZW5kUmVxdWVzdChyZXF1ZXN0Q29uZmlnKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIChfYS5zZW50KCkpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBBeGlvc0NsaWVudC5wcm90b3R5cGUucHV0ID0gZnVuY3Rpb24gKHBhdGgsIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVxdWVzdENvbmZpZztcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5yZXF1ZXN0Q29uZmlnQnVpbGRlci5idWlsZChcInB1dFwiLCBwYXRoLCBwYXJhbXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENvbmZpZyA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuc2VuZFJlcXVlc3QocmVxdWVzdENvbmZpZyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDI6IHJldHVybiBbMiAvKnJldHVybiovLCAoX2Euc2VudCgpKV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgQXhpb3NDbGllbnQucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uIChwYXRoLCBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHJlcXVlc3RDb25maWc7XG4gICAgICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDA6IHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMucmVxdWVzdENvbmZpZ0J1aWxkZXIuYnVpbGQoXCJkZWxldGVcIiwgcGF0aCwgcGFyYW1zKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RDb25maWcgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLnNlbmRSZXF1ZXN0KHJlcXVlc3RDb25maWcpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gWzIgLypyZXR1cm4qLywgKF9hLnNlbnQoKSldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEF4aW9zQ2xpZW50LnByb3RvdHlwZS5zZW5kUmVxdWVzdCA9IGZ1bmN0aW9uIChyZXF1ZXN0Q29uZmlnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3BvbnNlSGFuZGxlci5oYW5kbGUoXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuZXctY2FwXG4gICAgICAgICgwLCBheGlvc18xLmRlZmF1bHQpKF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXF1ZXN0Q29uZmlnKSwgeyBtYXhCb2R5TGVuZ3RoOiBJbmZpbml0eSwgbWF4Q29udGVudExlbmd0aDogSW5maW5pdHkgfSkpKTtcbiAgICB9O1xuICAgIHJldHVybiBBeGlvc0NsaWVudDtcbn0oKSk7XG5leHBvcnRzLkF4aW9zQ2xpZW50ID0gQXhpb3NDbGllbnQ7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1BeGlvc0NsaWVudC5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuRGVmYXVsdEh0dHBDbGllbnQgPSB2b2lkIDA7XG52YXIgQXhpb3NDbGllbnRfMSA9IHJlcXVpcmUoXCIuL0F4aW9zQ2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiRGVmYXVsdEh0dHBDbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEF4aW9zQ2xpZW50XzEuQXhpb3NDbGllbnQ7IH0gfSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IEVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9ldmFsJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IEV2YWxFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vcmFuZ2UnKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gUmFuZ2VFcnJvcjtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vcmVmJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IFJlZmVyZW5jZUVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9zeW50YXgnKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gU3ludGF4RXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3R5cGUnKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gVHlwZUVycm9yO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi91cmknKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gVVJJRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludCBjb21wbGV4aXR5OiBbMiwgMThdLCBtYXgtc3RhdGVtZW50czogWzIsIDMzXSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIFN5bWJvbCAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09ICdzeW1ib2wnKSB7IHJldHVybiB0cnVlOyB9XG5cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yIChzeW0gaW4gb2JqKSB7IHJldHVybiBmYWxzZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby11bnJlYWNoYWJsZS1sb29wXG5cdGlmICh0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbicgJiYgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggIT09IDApIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHR2YXIgc3ltcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqKTtcblx0aWYgKHN5bXMubGVuZ3RoICE9PSAxIHx8IHN5bXNbMF0gIT09IHN5bSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmosIHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0aWYgKHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0dmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgc3ltKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIG9yaWdTeW1ib2wgPSB0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2w7XG52YXIgaGFzU3ltYm9sU2hhbSA9IHJlcXVpcmUoJy4vc2hhbXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBoYXNOYXRpdmVTeW1ib2xzKCkge1xuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIG9yaWdTeW1ib2woJ2ZvbycpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2woJ2JhcicpICE9PSAnc3ltYm9sJykgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRyZXR1cm4gaGFzU3ltYm9sU2hhbSgpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHRlc3QgPSB7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0Zm9vOiB7fVxufTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc1Byb3RvKCkge1xuXHQvLyBAdHMtZXhwZWN0LWVycm9yOiBUUyBlcnJvcnMgb24gYW4gaW5oZXJpdGVkIHByb3BlcnR5IGZvciBzb21lIHJlYXNvblxuXHRyZXR1cm4geyBfX3Byb3RvX186IHRlc3QgfS5mb28gPT09IHRlc3QuZm9vXG5cdFx0JiYgISh0ZXN0IGluc3RhbmNlb2YgJE9iamVjdCk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKiBlc2xpbnQgbm8taW52YWxpZC10aGlzOiAxICovXG5cbnZhciBFUlJPUl9NRVNTQUdFID0gJ0Z1bmN0aW9uLnByb3RvdHlwZS5iaW5kIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgJztcbnZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgZnVuY1R5cGUgPSAnW29iamVjdCBGdW5jdGlvbl0nO1xuXG52YXIgY29uY2F0dHkgPSBmdW5jdGlvbiBjb25jYXR0eShhLCBiKSB7XG4gICAgdmFyIGFyciA9IFtdO1xuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGFycltpXSA9IGFbaV07XG4gICAgfVxuICAgIGZvciAodmFyIGogPSAwOyBqIDwgYi5sZW5ndGg7IGogKz0gMSkge1xuICAgICAgICBhcnJbaiArIGEubGVuZ3RoXSA9IGJbal07XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycjtcbn07XG5cbnZhciBzbGljeSA9IGZ1bmN0aW9uIHNsaWN5KGFyckxpa2UsIG9mZnNldCkge1xuICAgIHZhciBhcnIgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gb2Zmc2V0IHx8IDAsIGogPSAwOyBpIDwgYXJyTGlrZS5sZW5ndGg7IGkgKz0gMSwgaiArPSAxKSB7XG4gICAgICAgIGFycltqXSA9IGFyckxpa2VbaV07XG4gICAgfVxuICAgIHJldHVybiBhcnI7XG59O1xuXG52YXIgam9pbnkgPSBmdW5jdGlvbiAoYXJyLCBqb2luZXIpIHtcbiAgICB2YXIgc3RyID0gJyc7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgc3RyICs9IGFycltpXTtcbiAgICAgICAgaWYgKGkgKyAxIDwgYXJyLmxlbmd0aCkge1xuICAgICAgICAgICAgc3RyICs9IGpvaW5lcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiaW5kKHRoYXQpIHtcbiAgICB2YXIgdGFyZ2V0ID0gdGhpcztcbiAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gJ2Z1bmN0aW9uJyB8fCB0b1N0ci5hcHBseSh0YXJnZXQpICE9PSBmdW5jVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKEVSUk9SX01FU1NBR0UgKyB0YXJnZXQpO1xuICAgIH1cbiAgICB2YXIgYXJncyA9IHNsaWN5KGFyZ3VtZW50cywgMSk7XG5cbiAgICB2YXIgYm91bmQ7XG4gICAgdmFyIGJpbmRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMgaW5zdGFuY2VvZiBib3VuZCkge1xuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRhcmdldC5hcHBseShcbiAgICAgICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgICAgIGNvbmNhdHR5KGFyZ3MsIGFyZ3VtZW50cylcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAoT2JqZWN0KHJlc3VsdCkgPT09IHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0LmFwcGx5KFxuICAgICAgICAgICAgdGhhdCxcbiAgICAgICAgICAgIGNvbmNhdHR5KGFyZ3MsIGFyZ3VtZW50cylcbiAgICAgICAgKTtcblxuICAgIH07XG5cbiAgICB2YXIgYm91bmRMZW5ndGggPSBtYXgoMCwgdGFyZ2V0Lmxlbmd0aCAtIGFyZ3MubGVuZ3RoKTtcbiAgICB2YXIgYm91bmRBcmdzID0gW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGJvdW5kQXJnc1tpXSA9ICckJyArIGk7XG4gICAgfVxuXG4gICAgYm91bmQgPSBGdW5jdGlvbignYmluZGVyJywgJ3JldHVybiBmdW5jdGlvbiAoJyArIGpvaW55KGJvdW5kQXJncywgJywnKSArICcpeyByZXR1cm4gYmluZGVyLmFwcGx5KHRoaXMsYXJndW1lbnRzKTsgfScpKGJpbmRlcik7XG5cbiAgICBpZiAodGFyZ2V0LnByb3RvdHlwZSkge1xuICAgICAgICB2YXIgRW1wdHkgPSBmdW5jdGlvbiBFbXB0eSgpIHt9O1xuICAgICAgICBFbXB0eS5wcm90b3R5cGUgPSB0YXJnZXQucHJvdG90eXBlO1xuICAgICAgICBib3VuZC5wcm90b3R5cGUgPSBuZXcgRW1wdHkoKTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gYm91bmQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaW1wbGVtZW50YXRpb24gPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQgfHwgaW1wbGVtZW50YXRpb247XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBjYWxsID0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGw7XG52YXIgJGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gYmluZC5jYWxsKGNhbGwsICRoYXNPd24pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdW5kZWZpbmVkO1xuXG52YXIgJEVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzJyk7XG52YXIgJEV2YWxFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy9ldmFsJyk7XG52YXIgJFJhbmdlRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvcmFuZ2UnKTtcbnZhciAkUmVmZXJlbmNlRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvcmVmJyk7XG52YXIgJFN5bnRheEVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3N5bnRheCcpO1xudmFyICRUeXBlRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvdHlwZScpO1xudmFyICRVUklFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy91cmknKTtcblxudmFyICRGdW5jdGlvbiA9IEZ1bmN0aW9uO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbnZhciBnZXRFdmFsbGVkQ29uc3RydWN0b3IgPSBmdW5jdGlvbiAoZXhwcmVzc2lvblN5bnRheCkge1xuXHR0cnkge1xuXHRcdHJldHVybiAkRnVuY3Rpb24oJ1widXNlIHN0cmljdFwiOyByZXR1cm4gKCcgKyBleHByZXNzaW9uU3ludGF4ICsgJykuY29uc3RydWN0b3I7JykoKTtcblx0fSBjYXRjaCAoZSkge31cbn07XG5cbnZhciAkZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5pZiAoJGdPUEQpIHtcblx0dHJ5IHtcblx0XHQkZ09QRCh7fSwgJycpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0JGdPUEQgPSBudWxsOyAvLyB0aGlzIGlzIElFIDgsIHdoaWNoIGhhcyBhIGJyb2tlbiBnT1BEXG5cdH1cbn1cblxudmFyIHRocm93VHlwZUVycm9yID0gZnVuY3Rpb24gKCkge1xuXHR0aHJvdyBuZXcgJFR5cGVFcnJvcigpO1xufTtcbnZhciBUaHJvd1R5cGVFcnJvciA9ICRnT1BEXG5cdD8gKGZ1bmN0aW9uICgpIHtcblx0XHR0cnkge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9ucywgbm8tY2FsbGVyLCBuby1yZXN0cmljdGVkLXByb3BlcnRpZXNcblx0XHRcdGFyZ3VtZW50cy5jYWxsZWU7IC8vIElFIDggZG9lcyBub3QgdGhyb3cgaGVyZVxuXHRcdFx0cmV0dXJuIHRocm93VHlwZUVycm9yO1xuXHRcdH0gY2F0Y2ggKGNhbGxlZVRocm93cykge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Ly8gSUUgOCB0aHJvd3Mgb24gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihhcmd1bWVudHMsICcnKVxuXHRcdFx0XHRyZXR1cm4gJGdPUEQoYXJndW1lbnRzLCAnY2FsbGVlJykuZ2V0O1xuXHRcdFx0fSBjYXRjaCAoZ09QRHRocm93cykge1xuXHRcdFx0XHRyZXR1cm4gdGhyb3dUeXBlRXJyb3I7XG5cdFx0XHR9XG5cdFx0fVxuXHR9KCkpXG5cdDogdGhyb3dUeXBlRXJyb3I7XG5cbnZhciBoYXNTeW1ib2xzID0gcmVxdWlyZSgnaGFzLXN5bWJvbHMnKSgpO1xudmFyIGhhc1Byb3RvID0gcmVxdWlyZSgnaGFzLXByb3RvJykoKTtcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mIHx8IChcblx0aGFzUHJvdG9cblx0XHQ/IGZ1bmN0aW9uICh4KSB7IHJldHVybiB4Ll9fcHJvdG9fXzsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvXG5cdFx0OiBudWxsXG4pO1xuXG52YXIgbmVlZHNFdmFsID0ge307XG5cbnZhciBUeXBlZEFycmF5ID0gdHlwZW9mIFVpbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnIHx8ICFnZXRQcm90byA/IHVuZGVmaW5lZCA6IGdldFByb3RvKFVpbnQ4QXJyYXkpO1xuXG52YXIgSU5UUklOU0lDUyA9IHtcblx0X19wcm90b19fOiBudWxsLFxuXHQnJUFnZ3JlZ2F0ZUVycm9yJSc6IHR5cGVvZiBBZ2dyZWdhdGVFcnJvciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBZ2dyZWdhdGVFcnJvcixcblx0JyVBcnJheSUnOiBBcnJheSxcblx0JyVBcnJheUJ1ZmZlciUnOiB0eXBlb2YgQXJyYXlCdWZmZXIgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQXJyYXlCdWZmZXIsXG5cdCclQXJyYXlJdGVyYXRvclByb3RvdHlwZSUnOiBoYXNTeW1ib2xzICYmIGdldFByb3RvID8gZ2V0UHJvdG8oW11bU3ltYm9sLml0ZXJhdG9yXSgpKSA6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Zyb21TeW5jSXRlcmF0b3JQcm90b3R5cGUlJzogdW5kZWZpbmVkLFxuXHQnJUFzeW5jRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUFzeW5jR2VuZXJhdG9yJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvckZ1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IG5lZWRzRXZhbCxcblx0JyVBdG9taWNzJSc6IHR5cGVvZiBBdG9taWNzID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEF0b21pY3MsXG5cdCclQmlnSW50JSc6IHR5cGVvZiBCaWdJbnQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQmlnSW50LFxuXHQnJUJpZ0ludDY0QXJyYXklJzogdHlwZW9mIEJpZ0ludDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQmlnSW50NjRBcnJheSxcblx0JyVCaWdVaW50NjRBcnJheSUnOiB0eXBlb2YgQmlnVWludDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQmlnVWludDY0QXJyYXksXG5cdCclQm9vbGVhbiUnOiBCb29sZWFuLFxuXHQnJURhdGFWaWV3JSc6IHR5cGVvZiBEYXRhVmlldyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBEYXRhVmlldyxcblx0JyVEYXRlJSc6IERhdGUsXG5cdCclZGVjb2RlVVJJJSc6IGRlY29kZVVSSSxcblx0JyVkZWNvZGVVUklDb21wb25lbnQlJzogZGVjb2RlVVJJQ29tcG9uZW50LFxuXHQnJWVuY29kZVVSSSUnOiBlbmNvZGVVUkksXG5cdCclZW5jb2RlVVJJQ29tcG9uZW50JSc6IGVuY29kZVVSSUNvbXBvbmVudCxcblx0JyVFcnJvciUnOiAkRXJyb3IsXG5cdCclZXZhbCUnOiBldmFsLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWV2YWxcblx0JyVFdmFsRXJyb3IlJzogJEV2YWxFcnJvcixcblx0JyVGbG9hdDMyQXJyYXklJzogdHlwZW9mIEZsb2F0MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDMyQXJyYXksXG5cdCclRmxvYXQ2NEFycmF5JSc6IHR5cGVvZiBGbG9hdDY0QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQ2NEFycmF5LFxuXHQnJUZpbmFsaXphdGlvblJlZ2lzdHJ5JSc6IHR5cGVvZiBGaW5hbGl6YXRpb25SZWdpc3RyeSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGaW5hbGl6YXRpb25SZWdpc3RyeSxcblx0JyVGdW5jdGlvbiUnOiAkRnVuY3Rpb24sXG5cdCclR2VuZXJhdG9yRnVuY3Rpb24lJzogbmVlZHNFdmFsLFxuXHQnJUludDhBcnJheSUnOiB0eXBlb2YgSW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDhBcnJheSxcblx0JyVJbnQxNkFycmF5JSc6IHR5cGVvZiBJbnQxNkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDE2QXJyYXksXG5cdCclSW50MzJBcnJheSUnOiB0eXBlb2YgSW50MzJBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBJbnQzMkFycmF5LFxuXHQnJWlzRmluaXRlJSc6IGlzRmluaXRlLFxuXHQnJWlzTmFOJSc6IGlzTmFOLFxuXHQnJUl0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgJiYgZ2V0UHJvdG8gPyBnZXRQcm90byhnZXRQcm90byhbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKSA6IHVuZGVmaW5lZCxcblx0JyVKU09OJSc6IHR5cGVvZiBKU09OID09PSAnb2JqZWN0JyA/IEpTT04gOiB1bmRlZmluZWQsXG5cdCclTWFwJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogTWFwLFxuXHQnJU1hcEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBNYXAgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzIHx8ICFnZXRQcm90byA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBNYXAoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJU1hdGglJzogTWF0aCxcblx0JyVOdW1iZXIlJzogTnVtYmVyLFxuXHQnJU9iamVjdCUnOiBPYmplY3QsXG5cdCclcGFyc2VGbG9hdCUnOiBwYXJzZUZsb2F0LFxuXHQnJXBhcnNlSW50JSc6IHBhcnNlSW50LFxuXHQnJVByb21pc2UlJzogdHlwZW9mIFByb21pc2UgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJvbWlzZSxcblx0JyVQcm94eSUnOiB0eXBlb2YgUHJveHkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogUHJveHksXG5cdCclUmFuZ2VFcnJvciUnOiAkUmFuZ2VFcnJvcixcblx0JyVSZWZlcmVuY2VFcnJvciUnOiAkUmVmZXJlbmNlRXJyb3IsXG5cdCclUmVmbGVjdCUnOiB0eXBlb2YgUmVmbGVjdCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBSZWZsZWN0LFxuXHQnJVJlZ0V4cCUnOiBSZWdFeHAsXG5cdCclU2V0JSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogU2V0LFxuXHQnJVNldEl0ZXJhdG9yUHJvdG90eXBlJSc6IHR5cGVvZiBTZXQgPT09ICd1bmRlZmluZWQnIHx8ICFoYXNTeW1ib2xzIHx8ICFnZXRQcm90byA/IHVuZGVmaW5lZCA6IGdldFByb3RvKG5ldyBTZXQoKVtTeW1ib2wuaXRlcmF0b3JdKCkpLFxuXHQnJVNoYXJlZEFycmF5QnVmZmVyJSc6IHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTaGFyZWRBcnJheUJ1ZmZlcixcblx0JyVTdHJpbmclJzogU3RyaW5nLFxuXHQnJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJSc6IGhhc1N5bWJvbHMgJiYgZ2V0UHJvdG8gPyBnZXRQcm90bygnJ1tTeW1ib2wuaXRlcmF0b3JdKCkpIDogdW5kZWZpbmVkLFxuXHQnJVN5bWJvbCUnOiBoYXNTeW1ib2xzID8gU3ltYm9sIDogdW5kZWZpbmVkLFxuXHQnJVN5bnRheEVycm9yJSc6ICRTeW50YXhFcnJvcixcblx0JyVUaHJvd1R5cGVFcnJvciUnOiBUaHJvd1R5cGVFcnJvcixcblx0JyVUeXBlZEFycmF5JSc6IFR5cGVkQXJyYXksXG5cdCclVHlwZUVycm9yJSc6ICRUeXBlRXJyb3IsXG5cdCclVWludDhBcnJheSUnOiB0eXBlb2YgVWludDhBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OEFycmF5LFxuXHQnJVVpbnQ4Q2xhbXBlZEFycmF5JSc6IHR5cGVvZiBVaW50OENsYW1wZWRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50OENsYW1wZWRBcnJheSxcblx0JyVVaW50MTZBcnJheSUnOiB0eXBlb2YgVWludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDE2QXJyYXksXG5cdCclVWludDMyQXJyYXklJzogdHlwZW9mIFVpbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQzMkFycmF5LFxuXHQnJVVSSUVycm9yJSc6ICRVUklFcnJvcixcblx0JyVXZWFrTWFwJSc6IHR5cGVvZiBXZWFrTWFwID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtNYXAsXG5cdCclV2Vha1JlZiUnOiB0eXBlb2YgV2Vha1JlZiA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrUmVmLFxuXHQnJVdlYWtTZXQlJzogdHlwZW9mIFdlYWtTZXQgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha1NldFxufTtcblxuaWYgKGdldFByb3RvKSB7XG5cdHRyeSB7XG5cdFx0bnVsbC5lcnJvcjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNoYWRvd3JlYWxtL3B1bGwvMzg0I2lzc3VlY29tbWVudC0xMzY0MjY0MjI5XG5cdFx0dmFyIGVycm9yUHJvdG8gPSBnZXRQcm90byhnZXRQcm90byhlKSk7XG5cdFx0SU5UUklOU0lDU1snJUVycm9yLnByb3RvdHlwZSUnXSA9IGVycm9yUHJvdG87XG5cdH1cbn1cblxudmFyIGRvRXZhbCA9IGZ1bmN0aW9uIGRvRXZhbChuYW1lKSB7XG5cdHZhciB2YWx1ZTtcblx0aWYgKG5hbWUgPT09ICclQXN5bmNGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2FzeW5jIGZ1bmN0aW9uICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVHZW5lcmF0b3JGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2Z1bmN0aW9uKiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2FzeW5jIGZ1bmN0aW9uKiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNHZW5lcmF0b3IlJykge1xuXHRcdHZhciBmbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJyk7XG5cdFx0aWYgKGZuKSB7XG5cdFx0XHR2YWx1ZSA9IGZuLnByb3RvdHlwZTtcblx0XHR9XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJScpIHtcblx0XHR2YXIgZ2VuID0gZG9FdmFsKCclQXN5bmNHZW5lcmF0b3IlJyk7XG5cdFx0aWYgKGdlbiAmJiBnZXRQcm90bykge1xuXHRcdFx0dmFsdWUgPSBnZXRQcm90byhnZW4ucHJvdG90eXBlKTtcblx0XHR9XG5cdH1cblxuXHRJTlRSSU5TSUNTW25hbWVdID0gdmFsdWU7XG5cblx0cmV0dXJuIHZhbHVlO1xufTtcblxudmFyIExFR0FDWV9BTElBU0VTID0ge1xuXHRfX3Byb3RvX186IG51bGwsXG5cdCclQXJyYXlCdWZmZXJQcm90b3R5cGUlJzogWydBcnJheUJ1ZmZlcicsICdwcm90b3R5cGUnXSxcblx0JyVBcnJheVByb3RvdHlwZSUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG9fZW50cmllcyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdlbnRyaWVzJ10sXG5cdCclQXJyYXlQcm90b19mb3JFYWNoJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2ZvckVhY2gnXSxcblx0JyVBcnJheVByb3RvX2tleXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAna2V5cyddLFxuXHQnJUFycmF5UHJvdG9fdmFsdWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ3ZhbHVlcyddLFxuXHQnJUFzeW5jRnVuY3Rpb25Qcm90b3R5cGUlJzogWydBc3luY0Z1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVBc3luY0dlbmVyYXRvclByb3RvdHlwZSUnOiBbJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUJvb2xlYW5Qcm90b3R5cGUlJzogWydCb29sZWFuJywgJ3Byb3RvdHlwZSddLFxuXHQnJURhdGFWaWV3UHJvdG90eXBlJSc6IFsnRGF0YVZpZXcnLCAncHJvdG90eXBlJ10sXG5cdCclRGF0ZVByb3RvdHlwZSUnOiBbJ0RhdGUnLCAncHJvdG90eXBlJ10sXG5cdCclRXJyb3JQcm90b3R5cGUlJzogWydFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVFdmFsRXJyb3JQcm90b3R5cGUlJzogWydFdmFsRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQzMkFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZsb2F0NjRBcnJheVByb3RvdHlwZSUnOiBbJ0Zsb2F0NjRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0Z1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUdlbmVyYXRvciUnOiBbJ0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUdlbmVyYXRvclByb3RvdHlwZSUnOiBbJ0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQ4QXJyYXlQcm90b3R5cGUlJzogWydJbnQ4QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSW50MTZBcnJheVByb3RvdHlwZSUnOiBbJ0ludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSW50MzJBcnJheVByb3RvdHlwZSUnOiBbJ0ludDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSlNPTlBhcnNlJSc6IFsnSlNPTicsICdwYXJzZSddLFxuXHQnJUpTT05TdHJpbmdpZnklJzogWydKU09OJywgJ3N0cmluZ2lmeSddLFxuXHQnJU1hcFByb3RvdHlwZSUnOiBbJ01hcCcsICdwcm90b3R5cGUnXSxcblx0JyVOdW1iZXJQcm90b3R5cGUlJzogWydOdW1iZXInLCAncHJvdG90eXBlJ10sXG5cdCclT2JqZWN0UHJvdG90eXBlJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZSddLFxuXHQnJU9ialByb3RvX3RvU3RyaW5nJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZScsICd0b1N0cmluZyddLFxuXHQnJU9ialByb3RvX3ZhbHVlT2YlJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3ZhbHVlT2YnXSxcblx0JyVQcm9taXNlUHJvdG90eXBlJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnXSxcblx0JyVQcm9taXNlUHJvdG9fdGhlbiUnOiBbJ1Byb21pc2UnLCAncHJvdG90eXBlJywgJ3RoZW4nXSxcblx0JyVQcm9taXNlX2FsbCUnOiBbJ1Byb21pc2UnLCAnYWxsJ10sXG5cdCclUHJvbWlzZV9yZWplY3QlJzogWydQcm9taXNlJywgJ3JlamVjdCddLFxuXHQnJVByb21pc2VfcmVzb2x2ZSUnOiBbJ1Byb21pc2UnLCAncmVzb2x2ZSddLFxuXHQnJVJhbmdlRXJyb3JQcm90b3R5cGUlJzogWydSYW5nZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVJlZmVyZW5jZUVycm9yUHJvdG90eXBlJSc6IFsnUmVmZXJlbmNlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVnRXhwUHJvdG90eXBlJSc6IFsnUmVnRXhwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVNldFByb3RvdHlwZSUnOiBbJ1NldCcsICdwcm90b3R5cGUnXSxcblx0JyVTaGFyZWRBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ1NoYXJlZEFycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN0cmluZ1Byb3RvdHlwZSUnOiBbJ1N0cmluZycsICdwcm90b3R5cGUnXSxcblx0JyVTeW1ib2xQcm90b3R5cGUlJzogWydTeW1ib2wnLCAncHJvdG90eXBlJ10sXG5cdCclU3ludGF4RXJyb3JQcm90b3R5cGUlJzogWydTeW50YXhFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVUeXBlZEFycmF5UHJvdG90eXBlJSc6IFsnVHlwZWRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVUeXBlRXJyb3JQcm90b3R5cGUlJzogWydUeXBlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclVWludDhBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUlJzogWydVaW50OENsYW1wZWRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50MTZBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQxNkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnVWludDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVVJJRXJyb3JQcm90b3R5cGUlJzogWydVUklFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVXZWFrTWFwUHJvdG90eXBlJSc6IFsnV2Vha01hcCcsICdwcm90b3R5cGUnXSxcblx0JyVXZWFrU2V0UHJvdG90eXBlJSc6IFsnV2Vha1NldCcsICdwcm90b3R5cGUnXVxufTtcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnaGFzb3duJyk7XG52YXIgJGNvbmNhdCA9IGJpbmQuY2FsbChGdW5jdGlvbi5jYWxsLCBBcnJheS5wcm90b3R5cGUuY29uY2F0KTtcbnZhciAkc3BsaWNlQXBwbHkgPSBiaW5kLmNhbGwoRnVuY3Rpb24uYXBwbHksIEFycmF5LnByb3RvdHlwZS5zcGxpY2UpO1xudmFyICRyZXBsYWNlID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSk7XG52YXIgJHN0clNsaWNlID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIFN0cmluZy5wcm90b3R5cGUuc2xpY2UpO1xudmFyICRleGVjID0gYmluZC5jYWxsKEZ1bmN0aW9uLmNhbGwsIFJlZ0V4cC5wcm90b3R5cGUuZXhlYyk7XG5cbi8qIGFkYXB0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzQuMTcuMTUvZGlzdC9sb2Rhc2guanMjTDY3MzUtTDY3NDQgKi9cbnZhciByZVByb3BOYW1lID0gL1teJS5bXFxdXSt8XFxbKD86KC0/XFxkKyg/OlxcLlxcZCspPyl8KFtcIiddKSgoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqPylcXDIpXFxdfCg/PSg/OlxcLnxcXFtcXF0pKD86XFwufFxcW1xcXXwlJCkpL2c7XG52YXIgcmVFc2NhcGVDaGFyID0gL1xcXFwoXFxcXCk/L2c7IC8qKiBVc2VkIHRvIG1hdGNoIGJhY2tzbGFzaGVzIGluIHByb3BlcnR5IHBhdGhzLiAqL1xudmFyIHN0cmluZ1RvUGF0aCA9IGZ1bmN0aW9uIHN0cmluZ1RvUGF0aChzdHJpbmcpIHtcblx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHN0cmluZywgMCwgMSk7XG5cdHZhciBsYXN0ID0gJHN0clNsaWNlKHN0cmluZywgLTEpO1xuXHRpZiAoZmlyc3QgPT09ICclJyAmJiBsYXN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIGNsb3NpbmcgYCVgJyk7XG5cdH0gZWxzZSBpZiAobGFzdCA9PT0gJyUnICYmIGZpcnN0ICE9PSAnJScpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdpbnZhbGlkIGludHJpbnNpYyBzeW50YXgsIGV4cGVjdGVkIG9wZW5pbmcgYCVgJyk7XG5cdH1cblx0dmFyIHJlc3VsdCA9IFtdO1xuXHQkcmVwbGFjZShzdHJpbmcsIHJlUHJvcE5hbWUsIGZ1bmN0aW9uIChtYXRjaCwgbnVtYmVyLCBxdW90ZSwgc3ViU3RyaW5nKSB7XG5cdFx0cmVzdWx0W3Jlc3VsdC5sZW5ndGhdID0gcXVvdGUgPyAkcmVwbGFjZShzdWJTdHJpbmcsIHJlRXNjYXBlQ2hhciwgJyQxJykgOiBudW1iZXIgfHwgbWF0Y2g7XG5cdH0pO1xuXHRyZXR1cm4gcmVzdWx0O1xufTtcbi8qIGVuZCBhZGFwdGF0aW9uICovXG5cbnZhciBnZXRCYXNlSW50cmluc2ljID0gZnVuY3Rpb24gZ2V0QmFzZUludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpY05hbWUgPSBuYW1lO1xuXHR2YXIgYWxpYXM7XG5cdGlmIChoYXNPd24oTEVHQUNZX0FMSUFTRVMsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0YWxpYXMgPSBMRUdBQ1lfQUxJQVNFU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpbnRyaW5zaWNOYW1lID0gJyUnICsgYWxpYXNbMF0gKyAnJSc7XG5cdH1cblxuXHRpZiAoaGFzT3duKElOVFJJTlNJQ1MsIGludHJpbnNpY05hbWUpKSB7XG5cdFx0dmFyIHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNOYW1lXTtcblx0XHRpZiAodmFsdWUgPT09IG5lZWRzRXZhbCkge1xuXHRcdFx0dmFsdWUgPSBkb0V2YWwoaW50cmluc2ljTmFtZSk7XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICYmICFhbGxvd01pc3NpbmcpIHtcblx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBmaWxlIGFuIGlzc3VlIScpO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRuYW1lOiBpbnRyaW5zaWNOYW1lLFxuXHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0fTtcblx0fVxuXG5cdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZG9lcyBub3QgZXhpc3QhJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIEdldEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0aWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJyB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdpbnRyaW5zaWMgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuXHR9XG5cdGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSAmJiB0eXBlb2YgYWxsb3dNaXNzaW5nICE9PSAnYm9vbGVhbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignXCJhbGxvd01pc3NpbmdcIiBhcmd1bWVudCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0aWYgKCRleGVjKC9eJT9bXiVdKiU/JC8sIG5hbWUpID09PSBudWxsKSB7XG5cdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignYCVgIG1heSBub3QgYmUgcHJlc2VudCBhbnl3aGVyZSBidXQgYXQgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIHRoZSBpbnRyaW5zaWMgbmFtZScpO1xuXHR9XG5cdHZhciBwYXJ0cyA9IHN0cmluZ1RvUGF0aChuYW1lKTtcblx0dmFyIGludHJpbnNpY0Jhc2VOYW1lID0gcGFydHMubGVuZ3RoID4gMCA/IHBhcnRzWzBdIDogJyc7XG5cblx0dmFyIGludHJpbnNpYyA9IGdldEJhc2VJbnRyaW5zaWMoJyUnICsgaW50cmluc2ljQmFzZU5hbWUgKyAnJScsIGFsbG93TWlzc2luZyk7XG5cdHZhciBpbnRyaW5zaWNSZWFsTmFtZSA9IGludHJpbnNpYy5uYW1lO1xuXHR2YXIgdmFsdWUgPSBpbnRyaW5zaWMudmFsdWU7XG5cdHZhciBza2lwRnVydGhlckNhY2hpbmcgPSBmYWxzZTtcblxuXHR2YXIgYWxpYXMgPSBpbnRyaW5zaWMuYWxpYXM7XG5cdGlmIChhbGlhcykge1xuXHRcdGludHJpbnNpY0Jhc2VOYW1lID0gYWxpYXNbMF07XG5cdFx0JHNwbGljZUFwcGx5KHBhcnRzLCAkY29uY2F0KFswLCAxXSwgYWxpYXMpKTtcblx0fVxuXG5cdGZvciAodmFyIGkgPSAxLCBpc093biA9IHRydWU7IGkgPCBwYXJ0cy5sZW5ndGg7IGkgKz0gMSkge1xuXHRcdHZhciBwYXJ0ID0gcGFydHNbaV07XG5cdFx0dmFyIGZpcnN0ID0gJHN0clNsaWNlKHBhcnQsIDAsIDEpO1xuXHRcdHZhciBsYXN0ID0gJHN0clNsaWNlKHBhcnQsIC0xKTtcblx0XHRpZiAoXG5cdFx0XHQoXG5cdFx0XHRcdChmaXJzdCA9PT0gJ1wiJyB8fCBmaXJzdCA9PT0gXCInXCIgfHwgZmlyc3QgPT09ICdgJylcblx0XHRcdFx0fHwgKGxhc3QgPT09ICdcIicgfHwgbGFzdCA9PT0gXCInXCIgfHwgbGFzdCA9PT0gJ2AnKVxuXHRcdFx0KVxuXHRcdFx0JiYgZmlyc3QgIT09IGxhc3Rcblx0XHQpIHtcblx0XHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ3Byb3BlcnR5IG5hbWVzIHdpdGggcXVvdGVzIG11c3QgaGF2ZSBtYXRjaGluZyBxdW90ZXMnKTtcblx0XHR9XG5cdFx0aWYgKHBhcnQgPT09ICdjb25zdHJ1Y3RvcicgfHwgIWlzT3duKSB7XG5cdFx0XHRza2lwRnVydGhlckNhY2hpbmcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGludHJpbnNpY0Jhc2VOYW1lICs9ICcuJyArIHBhcnQ7XG5cdFx0aW50cmluc2ljUmVhbE5hbWUgPSAnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJztcblxuXHRcdGlmIChoYXNPd24oSU5UUklOU0lDUywgaW50cmluc2ljUmVhbE5hbWUpKSB7XG5cdFx0XHR2YWx1ZSA9IElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgIT0gbnVsbCkge1xuXHRcdFx0aWYgKCEocGFydCBpbiB2YWx1ZSkpIHtcblx0XHRcdFx0aWYgKCFhbGxvd01pc3NpbmcpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYmFzZSBpbnRyaW5zaWMgZm9yICcgKyBuYW1lICsgJyBleGlzdHMsIGJ1dCB0aGUgcHJvcGVydHkgaXMgbm90IGF2YWlsYWJsZS4nKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdm9pZCB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAoJGdPUEQgJiYgKGkgKyAxKSA+PSBwYXJ0cy5sZW5ndGgpIHtcblx0XHRcdFx0dmFyIGRlc2MgPSAkZ09QRCh2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdGlzT3duID0gISFkZXNjO1xuXG5cdFx0XHRcdC8vIEJ5IGNvbnZlbnRpb24sIHdoZW4gYSBkYXRhIHByb3BlcnR5IGlzIGNvbnZlcnRlZCB0byBhbiBhY2Nlc3NvclxuXHRcdFx0XHQvLyBwcm9wZXJ0eSB0byBlbXVsYXRlIGEgZGF0YSBwcm9wZXJ0eSB0aGF0IGRvZXMgbm90IHN1ZmZlciBmcm9tXG5cdFx0XHRcdC8vIHRoZSBvdmVycmlkZSBtaXN0YWtlLCB0aGF0IGFjY2Vzc29yJ3MgZ2V0dGVyIGlzIG1hcmtlZCB3aXRoXG5cdFx0XHRcdC8vIGFuIGBvcmlnaW5hbFZhbHVlYCBwcm9wZXJ0eS4gSGVyZSwgd2hlbiB3ZSBkZXRlY3QgdGhpcywgd2Vcblx0XHRcdFx0Ly8gdXBob2xkIHRoZSBpbGx1c2lvbiBieSBwcmV0ZW5kaW5nIHRvIHNlZSB0aGF0IG9yaWdpbmFsIGRhdGFcblx0XHRcdFx0Ly8gcHJvcGVydHksIGkuZS4sIHJldHVybmluZyB0aGUgdmFsdWUgcmF0aGVyIHRoYW4gdGhlIGdldHRlclxuXHRcdFx0XHQvLyBpdHNlbGYuXG5cdFx0XHRcdGlmIChpc093biAmJiAnZ2V0JyBpbiBkZXNjICYmICEoJ29yaWdpbmFsVmFsdWUnIGluIGRlc2MuZ2V0KSkge1xuXHRcdFx0XHRcdHZhbHVlID0gZGVzYy5nZXQ7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFsdWUgPSB2YWx1ZVtwYXJ0XTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aXNPd24gPSBoYXNPd24odmFsdWUsIHBhcnQpO1xuXHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNPd24gJiYgIXNraXBGdXJ0aGVyQ2FjaGluZykge1xuXHRcdFx0XHRJTlRSSU5TSUNTW2ludHJpbnNpY1JlYWxOYW1lXSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IEdldEludHJpbnNpYygnJU9iamVjdC5kZWZpbmVQcm9wZXJ0eSUnLCB0cnVlKSB8fCBmYWxzZTtcbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0dHJ5IHtcblx0XHQkZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyB2YWx1ZTogMSB9KTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIElFIDggaGFzIGEgYnJva2VuIGRlZmluZVByb3BlcnR5XG5cdFx0JGRlZmluZVByb3BlcnR5ID0gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSAkZGVmaW5lUHJvcGVydHk7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciAkZ09QRCA9IEdldEludHJpbnNpYygnJU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IlJywgdHJ1ZSk7XG5cbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKFtdLCAnbGVuZ3RoJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBnT1BEXG5cdFx0JGdPUEQgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gJGdPUEQ7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCdlcy1kZWZpbmUtcHJvcGVydHknKTtcblxudmFyICRTeW50YXhFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy9zeW50YXgnKTtcbnZhciAkVHlwZUVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3R5cGUnKTtcblxudmFyIGdvcGQgPSByZXF1aXJlKCdnb3BkJyk7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZURhdGFQcm9wZXJ0eShcblx0b2JqLFxuXHRwcm9wZXJ0eSxcblx0dmFsdWVcbikge1xuXHRpZiAoIW9iaiB8fCAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iaiAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYG9iamAgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYSBmdW5jdGlvbmAnKTtcblx0fVxuXHRpZiAodHlwZW9mIHByb3BlcnR5ICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgcHJvcGVydHkgIT09ICdzeW1ib2wnKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2Bwcm9wZXJ0eWAgbXVzdCBiZSBhIHN0cmluZyBvciBhIHN5bWJvbGAnKTtcblx0fVxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDMgJiYgdHlwZW9mIGFyZ3VtZW50c1szXSAhPT0gJ2Jvb2xlYW4nICYmIGFyZ3VtZW50c1szXSAhPT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgbm9uRW51bWVyYWJsZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbiBvciBudWxsJyk7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiA0ICYmIHR5cGVvZiBhcmd1bWVudHNbNF0gIT09ICdib29sZWFuJyAmJiBhcmd1bWVudHNbNF0gIT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYG5vbldyaXRhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwnKTtcblx0fVxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDUgJiYgdHlwZW9mIGFyZ3VtZW50c1s1XSAhPT0gJ2Jvb2xlYW4nICYmIGFyZ3VtZW50c1s1XSAhPT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgbm9uQ29uZmlndXJhYmxlYCwgaWYgcHJvdmlkZWQsIG11c3QgYmUgYSBib29sZWFuIG9yIG51bGwnKTtcblx0fVxuXHRpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDYgJiYgdHlwZW9mIGFyZ3VtZW50c1s2XSAhPT0gJ2Jvb2xlYW4nKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2Bsb29zZWAsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGEgYm9vbGVhbicpO1xuXHR9XG5cblx0dmFyIG5vbkVudW1lcmFibGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IG51bGw7XG5cdHZhciBub25Xcml0YWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiA0ID8gYXJndW1lbnRzWzRdIDogbnVsbDtcblx0dmFyIG5vbkNvbmZpZ3VyYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggPiA1ID8gYXJndW1lbnRzWzVdIDogbnVsbDtcblx0dmFyIGxvb3NlID0gYXJndW1lbnRzLmxlbmd0aCA+IDYgPyBhcmd1bWVudHNbNl0gOiBmYWxzZTtcblxuXHQvKiBAdHlwZSB7ZmFsc2UgfCBUeXBlZFByb3BlcnR5RGVzY3JpcHRvcjx1bmtub3duPn0gKi9cblx0dmFyIGRlc2MgPSAhIWdvcGQgJiYgZ29wZChvYmosIHByb3BlcnR5KTtcblxuXHRpZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdFx0JGRlZmluZVByb3BlcnR5KG9iaiwgcHJvcGVydHksIHtcblx0XHRcdGNvbmZpZ3VyYWJsZTogbm9uQ29uZmlndXJhYmxlID09PSBudWxsICYmIGRlc2MgPyBkZXNjLmNvbmZpZ3VyYWJsZSA6ICFub25Db25maWd1cmFibGUsXG5cdFx0XHRlbnVtZXJhYmxlOiBub25FbnVtZXJhYmxlID09PSBudWxsICYmIGRlc2MgPyBkZXNjLmVudW1lcmFibGUgOiAhbm9uRW51bWVyYWJsZSxcblx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdHdyaXRhYmxlOiBub25Xcml0YWJsZSA9PT0gbnVsbCAmJiBkZXNjID8gZGVzYy53cml0YWJsZSA6ICFub25Xcml0YWJsZVxuXHRcdH0pO1xuXHR9IGVsc2UgaWYgKGxvb3NlIHx8ICghbm9uRW51bWVyYWJsZSAmJiAhbm9uV3JpdGFibGUgJiYgIW5vbkNvbmZpZ3VyYWJsZSkpIHtcblx0XHQvLyBtdXN0IGZhbGwgYmFjayB0byBbW1NldF1dLCBhbmQgd2FzIG5vdCBleHBsaWNpdGx5IGFza2VkIHRvIG1ha2Ugbm9uLWVudW1lcmFibGUsIG5vbi13cml0YWJsZSwgb3Igbm9uLWNvbmZpZ3VyYWJsZVxuXHRcdG9ialtwcm9wZXJ0eV0gPSB2YWx1ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuXHR9IGVsc2Uge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ1RoaXMgZW52aXJvbm1lbnQgZG9lcyBub3Qgc3VwcG9ydCBkZWZpbmluZyBhIHByb3BlcnR5IGFzIG5vbi1jb25maWd1cmFibGUsIG5vbi13cml0YWJsZSwgb3Igbm9uLWVudW1lcmFibGUuJyk7XG5cdH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCdlcy1kZWZpbmUtcHJvcGVydHknKTtcblxudmFyIGhhc1Byb3BlcnR5RGVzY3JpcHRvcnMgPSBmdW5jdGlvbiBoYXNQcm9wZXJ0eURlc2NyaXB0b3JzKCkge1xuXHRyZXR1cm4gISEkZGVmaW5lUHJvcGVydHk7XG59O1xuXG5oYXNQcm9wZXJ0eURlc2NyaXB0b3JzLmhhc0FycmF5TGVuZ3RoRGVmaW5lQnVnID0gZnVuY3Rpb24gaGFzQXJyYXlMZW5ndGhEZWZpbmVCdWcoKSB7XG5cdC8vIG5vZGUgdjAuNiBoYXMgYSBidWcgd2hlcmUgYXJyYXkgbGVuZ3RocyBjYW4gYmUgU2V0IGJ1dCBub3QgRGVmaW5lZFxuXHRpZiAoISRkZWZpbmVQcm9wZXJ0eSkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdHRyeSB7XG5cdFx0cmV0dXJuICRkZWZpbmVQcm9wZXJ0eShbXSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDEgfSkubGVuZ3RoICE9PSAxO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0Ly8gSW4gRmlyZWZveCA0LTIyLCBkZWZpbmluZyBsZW5ndGggb24gYW4gYXJyYXkgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufTtcblxubW9kdWxlLmV4cG9ydHMgPSBoYXNQcm9wZXJ0eURlc2NyaXB0b3JzO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGRlZmluZSA9IHJlcXVpcmUoJ2RlZmluZS1kYXRhLXByb3BlcnR5Jyk7XG52YXIgaGFzRGVzY3JpcHRvcnMgPSByZXF1aXJlKCdoYXMtcHJvcGVydHktZGVzY3JpcHRvcnMnKSgpO1xudmFyIGdPUEQgPSByZXF1aXJlKCdnb3BkJyk7XG5cbnZhciAkVHlwZUVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3R5cGUnKTtcbnZhciAkZmxvb3IgPSBHZXRJbnRyaW5zaWMoJyVNYXRoLmZsb29yJScpO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXRGdW5jdGlvbkxlbmd0aChmbiwgbGVuZ3RoKSB7XG5cdGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYGZuYCBpcyBub3QgYSBmdW5jdGlvbicpO1xuXHR9XG5cdGlmICh0eXBlb2YgbGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBsZW5ndGggPCAwIHx8IGxlbmd0aCA+IDB4RkZGRkZGRkYgfHwgJGZsb29yKGxlbmd0aCkgIT09IGxlbmd0aCkge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdgbGVuZ3RoYCBtdXN0IGJlIGEgcG9zaXRpdmUgMzItYml0IGludGVnZXInKTtcblx0fVxuXG5cdHZhciBsb29zZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmICEhYXJndW1lbnRzWzJdO1xuXG5cdHZhciBmdW5jdGlvbkxlbmd0aElzQ29uZmlndXJhYmxlID0gdHJ1ZTtcblx0dmFyIGZ1bmN0aW9uTGVuZ3RoSXNXcml0YWJsZSA9IHRydWU7XG5cdGlmICgnbGVuZ3RoJyBpbiBmbiAmJiBnT1BEKSB7XG5cdFx0dmFyIGRlc2MgPSBnT1BEKGZuLCAnbGVuZ3RoJyk7XG5cdFx0aWYgKGRlc2MgJiYgIWRlc2MuY29uZmlndXJhYmxlKSB7XG5cdFx0XHRmdW5jdGlvbkxlbmd0aElzQ29uZmlndXJhYmxlID0gZmFsc2U7XG5cdFx0fVxuXHRcdGlmIChkZXNjICYmICFkZXNjLndyaXRhYmxlKSB7XG5cdFx0XHRmdW5jdGlvbkxlbmd0aElzV3JpdGFibGUgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRpZiAoZnVuY3Rpb25MZW5ndGhJc0NvbmZpZ3VyYWJsZSB8fCBmdW5jdGlvbkxlbmd0aElzV3JpdGFibGUgfHwgIWxvb3NlKSB7XG5cdFx0aWYgKGhhc0Rlc2NyaXB0b3JzKSB7XG5cdFx0XHRkZWZpbmUoLyoqIEB0eXBlIHtQYXJhbWV0ZXJzPGRlZmluZT5bMF19ICovIChmbiksICdsZW5ndGgnLCBsZW5ndGgsIHRydWUsIHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkZWZpbmUoLyoqIEB0eXBlIHtQYXJhbWV0ZXJzPGRlZmluZT5bMF19ICovIChmbiksICdsZW5ndGgnLCBsZW5ndGgpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZm47XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG52YXIgc2V0RnVuY3Rpb25MZW5ndGggPSByZXF1aXJlKCdzZXQtZnVuY3Rpb24tbGVuZ3RoJyk7XG5cbnZhciAkVHlwZUVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3R5cGUnKTtcbnZhciAkYXBwbHkgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHklJyk7XG52YXIgJGNhbGwgPSBHZXRJbnRyaW5zaWMoJyVGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCUnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gR2V0SW50cmluc2ljKCclUmVmbGVjdC5hcHBseSUnLCB0cnVlKSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG5cbnZhciAkZGVmaW5lUHJvcGVydHkgPSByZXF1aXJlKCdlcy1kZWZpbmUtcHJvcGVydHknKTtcbnZhciAkbWF4ID0gR2V0SW50cmluc2ljKCclTWF0aC5tYXglJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY2FsbEJpbmQob3JpZ2luYWxGdW5jdGlvbikge1xuXHRpZiAodHlwZW9mIG9yaWdpbmFsRnVuY3Rpb24gIT09ICdmdW5jdGlvbicpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignYSBmdW5jdGlvbiBpcyByZXF1aXJlZCcpO1xuXHR9XG5cdHZhciBmdW5jID0gJHJlZmxlY3RBcHBseShiaW5kLCAkY2FsbCwgYXJndW1lbnRzKTtcblx0cmV0dXJuIHNldEZ1bmN0aW9uTGVuZ3RoKFxuXHRcdGZ1bmMsXG5cdFx0MSArICRtYXgoMCwgb3JpZ2luYWxGdW5jdGlvbi5sZW5ndGggLSAoYXJndW1lbnRzLmxlbmd0aCAtIDEpKSxcblx0XHR0cnVlXG5cdCk7XG59O1xuXG52YXIgYXBwbHlCaW5kID0gZnVuY3Rpb24gYXBwbHlCaW5kKCkge1xuXHRyZXR1cm4gJHJlZmxlY3RBcHBseShiaW5kLCAkYXBwbHksIGFyZ3VtZW50cyk7XG59O1xuXG5pZiAoJGRlZmluZVByb3BlcnR5KSB7XG5cdCRkZWZpbmVQcm9wZXJ0eShtb2R1bGUuZXhwb3J0cywgJ2FwcGx5JywgeyB2YWx1ZTogYXBwbHlCaW5kIH0pO1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMuYXBwbHkgPSBhcHBseUJpbmQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBHZXRJbnRyaW5zaWMgPSByZXF1aXJlKCdnZXQtaW50cmluc2ljJyk7XG5cbnZhciBjYWxsQmluZCA9IHJlcXVpcmUoJy4vJyk7XG5cbnZhciAkaW5kZXhPZiA9IGNhbGxCaW5kKEdldEludHJpbnNpYygnU3RyaW5nLnByb3RvdHlwZS5pbmRleE9mJykpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNhbGxCb3VuZEludHJpbnNpYyhuYW1lLCBhbGxvd01pc3NpbmcpIHtcblx0dmFyIGludHJpbnNpYyA9IEdldEludHJpbnNpYyhuYW1lLCAhIWFsbG93TWlzc2luZyk7XG5cdGlmICh0eXBlb2YgaW50cmluc2ljID09PSAnZnVuY3Rpb24nICYmICRpbmRleE9mKG5hbWUsICcucHJvdG90eXBlLicpID4gLTEpIHtcblx0XHRyZXR1cm4gY2FsbEJpbmQoaW50cmluc2ljKTtcblx0fVxuXHRyZXR1cm4gaW50cmluc2ljO1xufTtcbiIsImV4cG9ydCBkZWZhdWx0IHt9IiwidmFyIGhhc01hcCA9IHR5cGVvZiBNYXAgPT09ICdmdW5jdGlvbicgJiYgTWFwLnByb3RvdHlwZTtcbnZhciBtYXBTaXplRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgaGFzTWFwID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihNYXAucHJvdG90eXBlLCAnc2l6ZScpIDogbnVsbDtcbnZhciBtYXBTaXplID0gaGFzTWFwICYmIG1hcFNpemVEZXNjcmlwdG9yICYmIHR5cGVvZiBtYXBTaXplRGVzY3JpcHRvci5nZXQgPT09ICdmdW5jdGlvbicgPyBtYXBTaXplRGVzY3JpcHRvci5nZXQgOiBudWxsO1xudmFyIG1hcEZvckVhY2ggPSBoYXNNYXAgJiYgTWFwLnByb3RvdHlwZS5mb3JFYWNoO1xudmFyIGhhc1NldCA9IHR5cGVvZiBTZXQgPT09ICdmdW5jdGlvbicgJiYgU2V0LnByb3RvdHlwZTtcbnZhciBzZXRTaXplRGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgJiYgaGFzU2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihTZXQucHJvdG90eXBlLCAnc2l6ZScpIDogbnVsbDtcbnZhciBzZXRTaXplID0gaGFzU2V0ICYmIHNldFNpemVEZXNjcmlwdG9yICYmIHR5cGVvZiBzZXRTaXplRGVzY3JpcHRvci5nZXQgPT09ICdmdW5jdGlvbicgPyBzZXRTaXplRGVzY3JpcHRvci5nZXQgOiBudWxsO1xudmFyIHNldEZvckVhY2ggPSBoYXNTZXQgJiYgU2V0LnByb3RvdHlwZS5mb3JFYWNoO1xudmFyIGhhc1dlYWtNYXAgPSB0eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyAmJiBXZWFrTWFwLnByb3RvdHlwZTtcbnZhciB3ZWFrTWFwSGFzID0gaGFzV2Vha01hcCA/IFdlYWtNYXAucHJvdG90eXBlLmhhcyA6IG51bGw7XG52YXIgaGFzV2Vha1NldCA9IHR5cGVvZiBXZWFrU2V0ID09PSAnZnVuY3Rpb24nICYmIFdlYWtTZXQucHJvdG90eXBlO1xudmFyIHdlYWtTZXRIYXMgPSBoYXNXZWFrU2V0ID8gV2Vha1NldC5wcm90b3R5cGUuaGFzIDogbnVsbDtcbnZhciBoYXNXZWFrUmVmID0gdHlwZW9mIFdlYWtSZWYgPT09ICdmdW5jdGlvbicgJiYgV2Vha1JlZi5wcm90b3R5cGU7XG52YXIgd2Vha1JlZkRlcmVmID0gaGFzV2Vha1JlZiA/IFdlYWtSZWYucHJvdG90eXBlLmRlcmVmIDogbnVsbDtcbnZhciBib29sZWFuVmFsdWVPZiA9IEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2Y7XG52YXIgb2JqZWN0VG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmc7XG52YXIgJG1hdGNoID0gU3RyaW5nLnByb3RvdHlwZS5tYXRjaDtcbnZhciAkc2xpY2UgPSBTdHJpbmcucHJvdG90eXBlLnNsaWNlO1xudmFyICRyZXBsYWNlID0gU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlO1xudmFyICR0b1VwcGVyQ2FzZSA9IFN0cmluZy5wcm90b3R5cGUudG9VcHBlckNhc2U7XG52YXIgJHRvTG93ZXJDYXNlID0gU3RyaW5nLnByb3RvdHlwZS50b0xvd2VyQ2FzZTtcbnZhciAkdGVzdCA9IFJlZ0V4cC5wcm90b3R5cGUudGVzdDtcbnZhciAkY29uY2F0ID0gQXJyYXkucHJvdG90eXBlLmNvbmNhdDtcbnZhciAkam9pbiA9IEFycmF5LnByb3RvdHlwZS5qb2luO1xudmFyICRhcnJTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciAkZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGJpZ0ludFZhbHVlT2YgPSB0eXBlb2YgQmlnSW50ID09PSAnZnVuY3Rpb24nID8gQmlnSW50LnByb3RvdHlwZS52YWx1ZU9mIDogbnVsbDtcbnZhciBnT1BTID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBzeW1Ub1N0cmluZyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gJ3N5bWJvbCcgPyBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nIDogbnVsbDtcbnZhciBoYXNTaGFtbWVkU3ltYm9scyA9IHR5cGVvZiBTeW1ib2wgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gJ29iamVjdCc7XG4vLyBpZSwgYGhhcy10b3N0cmluZ3RhZy9zaGFtc1xudmFyIHRvU3RyaW5nVGFnID0gdHlwZW9mIFN5bWJvbCA9PT0gJ2Z1bmN0aW9uJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcgJiYgKHR5cGVvZiBTeW1ib2wudG9TdHJpbmdUYWcgPT09IGhhc1NoYW1tZWRTeW1ib2xzID8gJ29iamVjdCcgOiAnc3ltYm9sJylcbiAgICA/IFN5bWJvbC50b1N0cmluZ1RhZ1xuICAgIDogbnVsbDtcbnZhciBpc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG52YXIgZ1BPID0gKHR5cGVvZiBSZWZsZWN0ID09PSAnZnVuY3Rpb24nID8gUmVmbGVjdC5nZXRQcm90b3R5cGVPZiA6IE9iamVjdC5nZXRQcm90b3R5cGVPZikgfHwgKFxuICAgIFtdLl9fcHJvdG9fXyA9PT0gQXJyYXkucHJvdG90eXBlIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG9cbiAgICAgICAgPyBmdW5jdGlvbiAoTykge1xuICAgICAgICAgICAgcmV0dXJuIE8uX19wcm90b19fOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvXG4gICAgICAgIH1cbiAgICAgICAgOiBudWxsXG4pO1xuXG5mdW5jdGlvbiBhZGROdW1lcmljU2VwYXJhdG9yKG51bSwgc3RyKSB7XG4gICAgaWYgKFxuICAgICAgICBudW0gPT09IEluZmluaXR5XG4gICAgICAgIHx8IG51bSA9PT0gLUluZmluaXR5XG4gICAgICAgIHx8IG51bSAhPT0gbnVtXG4gICAgICAgIHx8IChudW0gJiYgbnVtID4gLTEwMDAgJiYgbnVtIDwgMTAwMClcbiAgICAgICAgfHwgJHRlc3QuY2FsbCgvZS8sIHN0cilcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgdmFyIHNlcFJlZ2V4ID0gL1swLTldKD89KD86WzAtOV17M30pKyg/IVswLTldKSkvZztcbiAgICBpZiAodHlwZW9mIG51bSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgdmFyIGludCA9IG51bSA8IDAgPyAtJGZsb29yKC1udW0pIDogJGZsb29yKG51bSk7IC8vIHRydW5jKG51bSlcbiAgICAgICAgaWYgKGludCAhPT0gbnVtKSB7XG4gICAgICAgICAgICB2YXIgaW50U3RyID0gU3RyaW5nKGludCk7XG4gICAgICAgICAgICB2YXIgZGVjID0gJHNsaWNlLmNhbGwoc3RyLCBpbnRTdHIubGVuZ3RoICsgMSk7XG4gICAgICAgICAgICByZXR1cm4gJHJlcGxhY2UuY2FsbChpbnRTdHIsIHNlcFJlZ2V4LCAnJCZfJykgKyAnLicgKyAkcmVwbGFjZS5jYWxsKCRyZXBsYWNlLmNhbGwoZGVjLCAvKFswLTldezN9KS9nLCAnJCZfJyksIC9fJC8sICcnKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gJHJlcGxhY2UuY2FsbChzdHIsIHNlcFJlZ2V4LCAnJCZfJyk7XG59XG5cbnZhciB1dGlsSW5zcGVjdCA9IHJlcXVpcmUoJy4vdXRpbC5pbnNwZWN0Jyk7XG52YXIgaW5zcGVjdEN1c3RvbSA9IHV0aWxJbnNwZWN0LmN1c3RvbTtcbnZhciBpbnNwZWN0U3ltYm9sID0gaXNTeW1ib2woaW5zcGVjdEN1c3RvbSkgPyBpbnNwZWN0Q3VzdG9tIDogbnVsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpbnNwZWN0XyhvYmosIG9wdGlvbnMsIGRlcHRoLCBzZWVuKSB7XG4gICAgdmFyIG9wdHMgPSBvcHRpb25zIHx8IHt9O1xuXG4gICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpICYmIChvcHRzLnF1b3RlU3R5bGUgIT09ICdzaW5nbGUnICYmIG9wdHMucXVvdGVTdHlsZSAhPT0gJ2RvdWJsZScpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBcInF1b3RlU3R5bGVcIiBtdXN0IGJlIFwic2luZ2xlXCIgb3IgXCJkb3VibGVcIicpO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAgIGhhcyhvcHRzLCAnbWF4U3RyaW5nTGVuZ3RoJykgJiYgKHR5cGVvZiBvcHRzLm1heFN0cmluZ0xlbmd0aCA9PT0gJ251bWJlcidcbiAgICAgICAgICAgID8gb3B0cy5tYXhTdHJpbmdMZW5ndGggPCAwICYmIG9wdHMubWF4U3RyaW5nTGVuZ3RoICE9PSBJbmZpbml0eVxuICAgICAgICAgICAgOiBvcHRzLm1heFN0cmluZ0xlbmd0aCAhPT0gbnVsbFxuICAgICAgICApXG4gICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBcIm1heFN0cmluZ0xlbmd0aFwiLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIsIEluZmluaXR5LCBvciBgbnVsbGAnKTtcbiAgICB9XG4gICAgdmFyIGN1c3RvbUluc3BlY3QgPSBoYXMob3B0cywgJ2N1c3RvbUluc3BlY3QnKSA/IG9wdHMuY3VzdG9tSW5zcGVjdCA6IHRydWU7XG4gICAgaWYgKHR5cGVvZiBjdXN0b21JbnNwZWN0ICE9PSAnYm9vbGVhbicgJiYgY3VzdG9tSW5zcGVjdCAhPT0gJ3N5bWJvbCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwiY3VzdG9tSW5zcGVjdFwiLCBpZiBwcm92aWRlZCwgbXVzdCBiZSBgdHJ1ZWAsIGBmYWxzZWAsIG9yIGBcXCdzeW1ib2xcXCdgJyk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgICBoYXMob3B0cywgJ2luZGVudCcpXG4gICAgICAgICYmIG9wdHMuaW5kZW50ICE9PSBudWxsXG4gICAgICAgICYmIG9wdHMuaW5kZW50ICE9PSAnXFx0J1xuICAgICAgICAmJiAhKHBhcnNlSW50KG9wdHMuaW5kZW50LCAxMCkgPT09IG9wdHMuaW5kZW50ICYmIG9wdHMuaW5kZW50ID4gMClcbiAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIFwiaW5kZW50XCIgbXVzdCBiZSBcIlxcXFx0XCIsIGFuIGludGVnZXIgPiAwLCBvciBgbnVsbGAnKTtcbiAgICB9XG4gICAgaWYgKGhhcyhvcHRzLCAnbnVtZXJpY1NlcGFyYXRvcicpICYmIHR5cGVvZiBvcHRzLm51bWVyaWNTZXBhcmF0b3IgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gXCJudW1lcmljU2VwYXJhdG9yXCIsIGlmIHByb3ZpZGVkLCBtdXN0IGJlIGB0cnVlYCBvciBgZmFsc2VgJyk7XG4gICAgfVxuICAgIHZhciBudW1lcmljU2VwYXJhdG9yID0gb3B0cy5udW1lcmljU2VwYXJhdG9yO1xuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgICB9XG4gICAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ251bGwnO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJldHVybiBvYmogPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gaW5zcGVjdFN0cmluZyhvYmosIG9wdHMpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaWYgKG9iaiA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIEluZmluaXR5IC8gb2JqID4gMCA/ICcwJyA6ICctMCc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHN0ciA9IFN0cmluZyhvYmopO1xuICAgICAgICByZXR1cm4gbnVtZXJpY1NlcGFyYXRvciA/IGFkZE51bWVyaWNTZXBhcmF0b3Iob2JqLCBzdHIpIDogc3RyO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgICAgdmFyIGJpZ0ludFN0ciA9IFN0cmluZyhvYmopICsgJ24nO1xuICAgICAgICByZXR1cm4gbnVtZXJpY1NlcGFyYXRvciA/IGFkZE51bWVyaWNTZXBhcmF0b3Iob2JqLCBiaWdJbnRTdHIpIDogYmlnSW50U3RyO1xuICAgIH1cblxuICAgIHZhciBtYXhEZXB0aCA9IHR5cGVvZiBvcHRzLmRlcHRoID09PSAndW5kZWZpbmVkJyA/IDUgOiBvcHRzLmRlcHRoO1xuICAgIGlmICh0eXBlb2YgZGVwdGggPT09ICd1bmRlZmluZWQnKSB7IGRlcHRoID0gMDsgfVxuICAgIGlmIChkZXB0aCA+PSBtYXhEZXB0aCAmJiBtYXhEZXB0aCA+IDAgJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkob2JqKSA/ICdbQXJyYXldJyA6ICdbT2JqZWN0XSc7XG4gICAgfVxuXG4gICAgdmFyIGluZGVudCA9IGdldEluZGVudChvcHRzLCBkZXB0aCk7XG5cbiAgICBpZiAodHlwZW9mIHNlZW4gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHNlZW4gPSBbXTtcbiAgICB9IGVsc2UgaWYgKGluZGV4T2Yoc2Vlbiwgb2JqKSA+PSAwKSB7XG4gICAgICAgIHJldHVybiAnW0NpcmN1bGFyXSc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaW5zcGVjdCh2YWx1ZSwgZnJvbSwgbm9JbmRlbnQpIHtcbiAgICAgICAgaWYgKGZyb20pIHtcbiAgICAgICAgICAgIHNlZW4gPSAkYXJyU2xpY2UuY2FsbChzZWVuKTtcbiAgICAgICAgICAgIHNlZW4ucHVzaChmcm9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9JbmRlbnQpIHtcbiAgICAgICAgICAgIHZhciBuZXdPcHRzID0ge1xuICAgICAgICAgICAgICAgIGRlcHRoOiBvcHRzLmRlcHRoXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGhhcyhvcHRzLCAncXVvdGVTdHlsZScpKSB7XG4gICAgICAgICAgICAgICAgbmV3T3B0cy5xdW90ZVN0eWxlID0gb3B0cy5xdW90ZVN0eWxlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluc3BlY3RfKHZhbHVlLCBuZXdPcHRzLCBkZXB0aCArIDEsIHNlZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbnNwZWN0Xyh2YWx1ZSwgb3B0cywgZGVwdGggKyAxLCBzZWVuKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJyAmJiAhaXNSZWdFeHAob2JqKSkgeyAvLyBpbiBvbGRlciBlbmdpbmVzLCByZWdleGVzIGFyZSBjYWxsYWJsZVxuICAgICAgICB2YXIgbmFtZSA9IG5hbWVPZihvYmopO1xuICAgICAgICB2YXIga2V5cyA9IGFyck9iaktleXMob2JqLCBpbnNwZWN0KTtcbiAgICAgICAgcmV0dXJuICdbRnVuY3Rpb24nICsgKG5hbWUgPyAnOiAnICsgbmFtZSA6ICcgKGFub255bW91cyknKSArICddJyArIChrZXlzLmxlbmd0aCA+IDAgPyAnIHsgJyArICRqb2luLmNhbGwoa2V5cywgJywgJykgKyAnIH0nIDogJycpO1xuICAgIH1cbiAgICBpZiAoaXNTeW1ib2wob2JqKSkge1xuICAgICAgICB2YXIgc3ltU3RyaW5nID0gaGFzU2hhbW1lZFN5bWJvbHMgPyAkcmVwbGFjZS5jYWxsKFN0cmluZyhvYmopLCAvXihTeW1ib2xcXCguKlxcKSlfW14pXSokLywgJyQxJykgOiBzeW1Ub1N0cmluZy5jYWxsKG9iaik7XG4gICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiAhaGFzU2hhbW1lZFN5bWJvbHMgPyBtYXJrQm94ZWQoc3ltU3RyaW5nKSA6IHN5bVN0cmluZztcbiAgICB9XG4gICAgaWYgKGlzRWxlbWVudChvYmopKSB7XG4gICAgICAgIHZhciBzID0gJzwnICsgJHRvTG93ZXJDYXNlLmNhbGwoU3RyaW5nKG9iai5ub2RlTmFtZSkpO1xuICAgICAgICB2YXIgYXR0cnMgPSBvYmouYXR0cmlidXRlcyB8fCBbXTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgcyArPSAnICcgKyBhdHRyc1tpXS5uYW1lICsgJz0nICsgd3JhcFF1b3RlcyhxdW90ZShhdHRyc1tpXS52YWx1ZSksICdkb3VibGUnLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBzICs9ICc+JztcbiAgICAgICAgaWYgKG9iai5jaGlsZE5vZGVzICYmIG9iai5jaGlsZE5vZGVzLmxlbmd0aCkgeyBzICs9ICcuLi4nOyB9XG4gICAgICAgIHMgKz0gJzwvJyArICR0b0xvd2VyQ2FzZS5jYWxsKFN0cmluZyhvYmoubm9kZU5hbWUpKSArICc+JztcbiAgICAgICAgcmV0dXJuIHM7XG4gICAgfVxuICAgIGlmIChpc0FycmF5KG9iaikpIHtcbiAgICAgICAgaWYgKG9iai5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbXSc7IH1cbiAgICAgICAgdmFyIHhzID0gYXJyT2JqS2V5cyhvYmosIGluc3BlY3QpO1xuICAgICAgICBpZiAoaW5kZW50ICYmICFzaW5nbGVMaW5lVmFsdWVzKHhzKSkge1xuICAgICAgICAgICAgcmV0dXJuICdbJyArIGluZGVudGVkSm9pbih4cywgaW5kZW50KSArICddJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ1sgJyArICRqb2luLmNhbGwoeHMsICcsICcpICsgJyBdJztcbiAgICB9XG4gICAgaWYgKGlzRXJyb3Iob2JqKSkge1xuICAgICAgICB2YXIgcGFydHMgPSBhcnJPYmpLZXlzKG9iaiwgaW5zcGVjdCk7XG4gICAgICAgIGlmICghKCdjYXVzZScgaW4gRXJyb3IucHJvdG90eXBlKSAmJiAnY2F1c2UnIGluIG9iaiAmJiAhaXNFbnVtZXJhYmxlLmNhbGwob2JqLCAnY2F1c2UnKSkge1xuICAgICAgICAgICAgcmV0dXJuICd7IFsnICsgU3RyaW5nKG9iaikgKyAnXSAnICsgJGpvaW4uY2FsbCgkY29uY2F0LmNhbGwoJ1tjYXVzZV06ICcgKyBpbnNwZWN0KG9iai5jYXVzZSksIHBhcnRzKSwgJywgJykgKyAnIH0nO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICdbJyArIFN0cmluZyhvYmopICsgJ10nOyB9XG4gICAgICAgIHJldHVybiAneyBbJyArIFN0cmluZyhvYmopICsgJ10gJyArICRqb2luLmNhbGwocGFydHMsICcsICcpICsgJyB9JztcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIGN1c3RvbUluc3BlY3QpIHtcbiAgICAgICAgaWYgKGluc3BlY3RTeW1ib2wgJiYgdHlwZW9mIG9ialtpbnNwZWN0U3ltYm9sXSA9PT0gJ2Z1bmN0aW9uJyAmJiB1dGlsSW5zcGVjdCkge1xuICAgICAgICAgICAgcmV0dXJuIHV0aWxJbnNwZWN0KG9iaiwgeyBkZXB0aDogbWF4RGVwdGggLSBkZXB0aCB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXN0b21JbnNwZWN0ICE9PSAnc3ltYm9sJyAmJiB0eXBlb2Ygb2JqLmluc3BlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmouaW5zcGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc01hcChvYmopKSB7XG4gICAgICAgIHZhciBtYXBQYXJ0cyA9IFtdO1xuICAgICAgICBpZiAobWFwRm9yRWFjaCkge1xuICAgICAgICAgICAgbWFwRm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgICAgICAgICBtYXBQYXJ0cy5wdXNoKGluc3BlY3Qoa2V5LCBvYmosIHRydWUpICsgJyA9PiAnICsgaW5zcGVjdCh2YWx1ZSwgb2JqKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29sbGVjdGlvbk9mKCdNYXAnLCBtYXBTaXplLmNhbGwob2JqKSwgbWFwUGFydHMsIGluZGVudCk7XG4gICAgfVxuICAgIGlmIChpc1NldChvYmopKSB7XG4gICAgICAgIHZhciBzZXRQYXJ0cyA9IFtdO1xuICAgICAgICBpZiAoc2V0Rm9yRWFjaCkge1xuICAgICAgICAgICAgc2V0Rm9yRWFjaC5jYWxsKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgc2V0UGFydHMucHVzaChpbnNwZWN0KHZhbHVlLCBvYmopKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb2xsZWN0aW9uT2YoJ1NldCcsIHNldFNpemUuY2FsbChvYmopLCBzZXRQYXJ0cywgaW5kZW50KTtcbiAgICB9XG4gICAgaWYgKGlzV2Vha01hcChvYmopKSB7XG4gICAgICAgIHJldHVybiB3ZWFrQ29sbGVjdGlvbk9mKCdXZWFrTWFwJyk7XG4gICAgfVxuICAgIGlmIChpc1dlYWtTZXQob2JqKSkge1xuICAgICAgICByZXR1cm4gd2Vha0NvbGxlY3Rpb25PZignV2Vha1NldCcpO1xuICAgIH1cbiAgICBpZiAoaXNXZWFrUmVmKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHdlYWtDb2xsZWN0aW9uT2YoJ1dlYWtSZWYnKTtcbiAgICB9XG4gICAgaWYgKGlzTnVtYmVyKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChpbnNwZWN0KE51bWJlcihvYmopKSk7XG4gICAgfVxuICAgIGlmIChpc0JpZ0ludChvYmopKSB7XG4gICAgICAgIHJldHVybiBtYXJrQm94ZWQoaW5zcGVjdChiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKSkpO1xuICAgIH1cbiAgICBpZiAoaXNCb29sZWFuKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG1hcmtCb3hlZChib29sZWFuVmFsdWVPZi5jYWxsKG9iaikpO1xuICAgIH1cbiAgICBpZiAoaXNTdHJpbmcob2JqKSkge1xuICAgICAgICByZXR1cm4gbWFya0JveGVkKGluc3BlY3QoU3RyaW5nKG9iaikpKTtcbiAgICB9XG4gICAgLy8gbm90ZTogaW4gSUUgOCwgc29tZXRpbWVzIGBnbG9iYWwgIT09IHdpbmRvd2AgYnV0IGJvdGggYXJlIHRoZSBwcm90b3R5cGVzIG9mIGVhY2ggb3RoZXJcbiAgICAvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgb2JqID09PSB3aW5kb3cpIHtcbiAgICAgICAgcmV0dXJuICd7IFtvYmplY3QgV2luZG93XSB9JztcbiAgICB9XG4gICAgaWYgKFxuICAgICAgICAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnICYmIG9iaiA9PT0gZ2xvYmFsVGhpcylcbiAgICAgICAgfHwgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnICYmIG9iaiA9PT0gZ2xvYmFsKVxuICAgICkge1xuICAgICAgICByZXR1cm4gJ3sgW29iamVjdCBnbG9iYWxUaGlzXSB9JztcbiAgICB9XG4gICAgaWYgKCFpc0RhdGUob2JqKSAmJiAhaXNSZWdFeHAob2JqKSkge1xuICAgICAgICB2YXIgeXMgPSBhcnJPYmpLZXlzKG9iaiwgaW5zcGVjdCk7XG4gICAgICAgIHZhciBpc1BsYWluT2JqZWN0ID0gZ1BPID8gZ1BPKG9iaikgPT09IE9iamVjdC5wcm90b3R5cGUgOiBvYmogaW5zdGFuY2VvZiBPYmplY3QgfHwgb2JqLmNvbnN0cnVjdG9yID09PSBPYmplY3Q7XG4gICAgICAgIHZhciBwcm90b1RhZyA9IG9iaiBpbnN0YW5jZW9mIE9iamVjdCA/ICcnIDogJ251bGwgcHJvdG90eXBlJztcbiAgICAgICAgdmFyIHN0cmluZ1RhZyA9ICFpc1BsYWluT2JqZWN0ICYmIHRvU3RyaW5nVGFnICYmIE9iamVjdChvYmopID09PSBvYmogJiYgdG9TdHJpbmdUYWcgaW4gb2JqID8gJHNsaWNlLmNhbGwodG9TdHIob2JqKSwgOCwgLTEpIDogcHJvdG9UYWcgPyAnT2JqZWN0JyA6ICcnO1xuICAgICAgICB2YXIgY29uc3RydWN0b3JUYWcgPSBpc1BsYWluT2JqZWN0IHx8IHR5cGVvZiBvYmouY29uc3RydWN0b3IgIT09ICdmdW5jdGlvbicgPyAnJyA6IG9iai5jb25zdHJ1Y3Rvci5uYW1lID8gb2JqLmNvbnN0cnVjdG9yLm5hbWUgKyAnICcgOiAnJztcbiAgICAgICAgdmFyIHRhZyA9IGNvbnN0cnVjdG9yVGFnICsgKHN0cmluZ1RhZyB8fCBwcm90b1RhZyA/ICdbJyArICRqb2luLmNhbGwoJGNvbmNhdC5jYWxsKFtdLCBzdHJpbmdUYWcgfHwgW10sIHByb3RvVGFnIHx8IFtdKSwgJzogJykgKyAnXSAnIDogJycpO1xuICAgICAgICBpZiAoeXMubGVuZ3RoID09PSAwKSB7IHJldHVybiB0YWcgKyAne30nOyB9XG4gICAgICAgIGlmIChpbmRlbnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0YWcgKyAneycgKyBpbmRlbnRlZEpvaW4oeXMsIGluZGVudCkgKyAnfSc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhZyArICd7ICcgKyAkam9pbi5jYWxsKHlzLCAnLCAnKSArICcgfSc7XG4gICAgfVxuICAgIHJldHVybiBTdHJpbmcob2JqKTtcbn07XG5cbmZ1bmN0aW9uIHdyYXBRdW90ZXMocywgZGVmYXVsdFN0eWxlLCBvcHRzKSB7XG4gICAgdmFyIHF1b3RlQ2hhciA9IChvcHRzLnF1b3RlU3R5bGUgfHwgZGVmYXVsdFN0eWxlKSA9PT0gJ2RvdWJsZScgPyAnXCInIDogXCInXCI7XG4gICAgcmV0dXJuIHF1b3RlQ2hhciArIHMgKyBxdW90ZUNoYXI7XG59XG5cbmZ1bmN0aW9uIHF1b3RlKHMpIHtcbiAgICByZXR1cm4gJHJlcGxhY2UuY2FsbChTdHJpbmcocyksIC9cIi9nLCAnJnF1b3Q7Jyk7XG59XG5cbmZ1bmN0aW9uIGlzQXJyYXkob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBBcnJheV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNEYXRlKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgRGF0ZV0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBSZWdFeHBdJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzRXJyb3Iob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBFcnJvcl0nICYmICghdG9TdHJpbmdUYWcgfHwgISh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0b1N0cmluZ1RhZyBpbiBvYmopKTsgfVxuZnVuY3Rpb24gaXNTdHJpbmcob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBTdHJpbmddJyAmJiAoIXRvU3RyaW5nVGFnIHx8ICEodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdG9TdHJpbmdUYWcgaW4gb2JqKSk7IH1cbmZ1bmN0aW9uIGlzTnVtYmVyKG9iaikgeyByZXR1cm4gdG9TdHIob2JqKSA9PT0gJ1tvYmplY3QgTnVtYmVyXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5mdW5jdGlvbiBpc0Jvb2xlYW4ob2JqKSB7IHJldHVybiB0b1N0cihvYmopID09PSAnW29iamVjdCBCb29sZWFuXScgJiYgKCF0b1N0cmluZ1RhZyB8fCAhKHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHRvU3RyaW5nVGFnIGluIG9iaikpOyB9XG5cbi8vIFN5bWJvbCBhbmQgQmlnSW50IGRvIGhhdmUgU3ltYm9sLnRvU3RyaW5nVGFnIGJ5IHNwZWMsIHNvIHRoYXQgY2FuJ3QgYmUgdXNlZCB0byBlbGltaW5hdGUgZmFsc2UgcG9zaXRpdmVzXG5mdW5jdGlvbiBpc1N5bWJvbChvYmopIHtcbiAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMpIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiBvYmogaW5zdGFuY2VvZiBTeW1ib2w7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqID09PSAnc3ltYm9sJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIXN5bVRvU3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgc3ltVG9TdHJpbmcuY2FsbChvYmopO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gaXNCaWdJbnQob2JqKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIWJpZ0ludFZhbHVlT2YpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBiaWdJbnRWYWx1ZU9mLmNhbGwob2JqKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBoYXNPd24gPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGtleSBpbiB0aGlzOyB9O1xuZnVuY3Rpb24gaGFzKG9iaiwga2V5KSB7XG4gICAgcmV0dXJuIGhhc093bi5jYWxsKG9iaiwga2V5KTtcbn1cblxuZnVuY3Rpb24gdG9TdHIob2JqKSB7XG4gICAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwob2JqKTtcbn1cblxuZnVuY3Rpb24gbmFtZU9mKGYpIHtcbiAgICBpZiAoZi5uYW1lKSB7IHJldHVybiBmLm5hbWU7IH1cbiAgICB2YXIgbSA9ICRtYXRjaC5jYWxsKGZ1bmN0aW9uVG9TdHJpbmcuY2FsbChmKSwgL15mdW5jdGlvblxccyooW1xcdyRdKykvKTtcbiAgICBpZiAobSkgeyByZXR1cm4gbVsxXTsgfVxuICAgIHJldHVybiBudWxsO1xufVxuXG5mdW5jdGlvbiBpbmRleE9mKHhzLCB4KSB7XG4gICAgaWYgKHhzLmluZGV4T2YpIHsgcmV0dXJuIHhzLmluZGV4T2YoeCk7IH1cbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IHhzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgICBpZiAoeHNbaV0gPT09IHgpIHsgcmV0dXJuIGk7IH1cbiAgICB9XG4gICAgcmV0dXJuIC0xO1xufVxuXG5mdW5jdGlvbiBpc01hcCh4KSB7XG4gICAgaWYgKCFtYXBTaXplIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIG1hcFNpemUuY2FsbCh4KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHNldFNpemUuY2FsbCh4KTtcbiAgICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBNYXA7IC8vIGNvcmUtanMgd29ya2Fyb3VuZCwgcHJlLXYyLjUuMFxuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1dlYWtNYXAoeCkge1xuICAgIGlmICghd2Vha01hcEhhcyB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrTWFwSGFzLmNhbGwoeCwgd2Vha01hcEhhcyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3ZWFrU2V0SGFzLmNhbGwoeCwgd2Vha1NldEhhcyk7XG4gICAgICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4IGluc3RhbmNlb2YgV2Vha01hcDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzV2Vha1JlZih4KSB7XG4gICAgaWYgKCF3ZWFrUmVmRGVyZWYgfHwgIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgd2Vha1JlZkRlcmVmLmNhbGwoeCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1NldCh4KSB7XG4gICAgaWYgKCFzZXRTaXplIHx8ICF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0Jykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIHNldFNpemUuY2FsbCh4KTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIG1hcFNpemUuY2FsbCh4KTtcbiAgICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHggaW5zdGFuY2VvZiBTZXQ7IC8vIGNvcmUtanMgd29ya2Fyb3VuZCwgcHJlLXYyLjUuMFxuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1dlYWtTZXQoeCkge1xuICAgIGlmICghd2Vha1NldEhhcyB8fCAheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICB3ZWFrU2V0SGFzLmNhbGwoeCwgd2Vha1NldEhhcyk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB3ZWFrTWFwSGFzLmNhbGwoeCwgd2Vha01hcEhhcyk7XG4gICAgICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB4IGluc3RhbmNlb2YgV2Vha1NldDsgLy8gY29yZS1qcyB3b3JrYXJvdW5kLCBwcmUtdjIuNS4wXG4gICAgfSBjYXRjaCAoZSkge31cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGlzRWxlbWVudCh4KSB7XG4gICAgaWYgKCF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0JykgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBpZiAodHlwZW9mIEhUTUxFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiB4IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgeC5ub2RlTmFtZSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHguZ2V0QXR0cmlidXRlID09PSAnZnVuY3Rpb24nO1xufVxuXG5mdW5jdGlvbiBpbnNwZWN0U3RyaW5nKHN0ciwgb3B0cykge1xuICAgIGlmIChzdHIubGVuZ3RoID4gb3B0cy5tYXhTdHJpbmdMZW5ndGgpIHtcbiAgICAgICAgdmFyIHJlbWFpbmluZyA9IHN0ci5sZW5ndGggLSBvcHRzLm1heFN0cmluZ0xlbmd0aDtcbiAgICAgICAgdmFyIHRyYWlsZXIgPSAnLi4uICcgKyByZW1haW5pbmcgKyAnIG1vcmUgY2hhcmFjdGVyJyArIChyZW1haW5pbmcgPiAxID8gJ3MnIDogJycpO1xuICAgICAgICByZXR1cm4gaW5zcGVjdFN0cmluZygkc2xpY2UuY2FsbChzdHIsIDAsIG9wdHMubWF4U3RyaW5nTGVuZ3RoKSwgb3B0cykgKyB0cmFpbGVyO1xuICAgIH1cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuICAgIHZhciBzID0gJHJlcGxhY2UuY2FsbCgkcmVwbGFjZS5jYWxsKHN0ciwgLyhbJ1xcXFxdKS9nLCAnXFxcXCQxJyksIC9bXFx4MDAtXFx4MWZdL2csIGxvd2J5dGUpO1xuICAgIHJldHVybiB3cmFwUXVvdGVzKHMsICdzaW5nbGUnLCBvcHRzKTtcbn1cblxuZnVuY3Rpb24gbG93Ynl0ZShjKSB7XG4gICAgdmFyIG4gPSBjLmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIHggPSB7XG4gICAgICAgIDg6ICdiJyxcbiAgICAgICAgOTogJ3QnLFxuICAgICAgICAxMDogJ24nLFxuICAgICAgICAxMjogJ2YnLFxuICAgICAgICAxMzogJ3InXG4gICAgfVtuXTtcbiAgICBpZiAoeCkgeyByZXR1cm4gJ1xcXFwnICsgeDsgfVxuICAgIHJldHVybiAnXFxcXHgnICsgKG4gPCAweDEwID8gJzAnIDogJycpICsgJHRvVXBwZXJDYXNlLmNhbGwobi50b1N0cmluZygxNikpO1xufVxuXG5mdW5jdGlvbiBtYXJrQm94ZWQoc3RyKSB7XG4gICAgcmV0dXJuICdPYmplY3QoJyArIHN0ciArICcpJztcbn1cblxuZnVuY3Rpb24gd2Vha0NvbGxlY3Rpb25PZih0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUgKyAnIHsgPyB9Jztcbn1cblxuZnVuY3Rpb24gY29sbGVjdGlvbk9mKHR5cGUsIHNpemUsIGVudHJpZXMsIGluZGVudCkge1xuICAgIHZhciBqb2luZWRFbnRyaWVzID0gaW5kZW50ID8gaW5kZW50ZWRKb2luKGVudHJpZXMsIGluZGVudCkgOiAkam9pbi5jYWxsKGVudHJpZXMsICcsICcpO1xuICAgIHJldHVybiB0eXBlICsgJyAoJyArIHNpemUgKyAnKSB7JyArIGpvaW5lZEVudHJpZXMgKyAnfSc7XG59XG5cbmZ1bmN0aW9uIHNpbmdsZUxpbmVWYWx1ZXMoeHMpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpbmRleE9mKHhzW2ldLCAnXFxuJykgPj0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBnZXRJbmRlbnQob3B0cywgZGVwdGgpIHtcbiAgICB2YXIgYmFzZUluZGVudDtcbiAgICBpZiAob3B0cy5pbmRlbnQgPT09ICdcXHQnKSB7XG4gICAgICAgIGJhc2VJbmRlbnQgPSAnXFx0JztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvcHRzLmluZGVudCA9PT0gJ251bWJlcicgJiYgb3B0cy5pbmRlbnQgPiAwKSB7XG4gICAgICAgIGJhc2VJbmRlbnQgPSAkam9pbi5jYWxsKEFycmF5KG9wdHMuaW5kZW50ICsgMSksICcgJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIGJhc2U6IGJhc2VJbmRlbnQsXG4gICAgICAgIHByZXY6ICRqb2luLmNhbGwoQXJyYXkoZGVwdGggKyAxKSwgYmFzZUluZGVudClcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBpbmRlbnRlZEpvaW4oeHMsIGluZGVudCkge1xuICAgIGlmICh4cy5sZW5ndGggPT09IDApIHsgcmV0dXJuICcnOyB9XG4gICAgdmFyIGxpbmVKb2luZXIgPSAnXFxuJyArIGluZGVudC5wcmV2ICsgaW5kZW50LmJhc2U7XG4gICAgcmV0dXJuIGxpbmVKb2luZXIgKyAkam9pbi5jYWxsKHhzLCAnLCcgKyBsaW5lSm9pbmVyKSArICdcXG4nICsgaW5kZW50LnByZXY7XG59XG5cbmZ1bmN0aW9uIGFyck9iaktleXMob2JqLCBpbnNwZWN0KSB7XG4gICAgdmFyIGlzQXJyID0gaXNBcnJheShvYmopO1xuICAgIHZhciB4cyA9IFtdO1xuICAgIGlmIChpc0Fycikge1xuICAgICAgICB4cy5sZW5ndGggPSBvYmoubGVuZ3RoO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iai5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgeHNbaV0gPSBoYXMob2JqLCBpKSA/IGluc3BlY3Qob2JqW2ldLCBvYmopIDogJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdmFyIHN5bXMgPSB0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJyA/IGdPUFMob2JqKSA6IFtdO1xuICAgIHZhciBzeW1NYXA7XG4gICAgaWYgKGhhc1NoYW1tZWRTeW1ib2xzKSB7XG4gICAgICAgIHN5bU1hcCA9IHt9O1xuICAgICAgICBmb3IgKHZhciBrID0gMDsgayA8IHN5bXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgIHN5bU1hcFsnJCcgKyBzeW1zW2tdXSA9IHN5bXNba107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgICAgaWYgKCFoYXMob2JqLCBrZXkpKSB7IGNvbnRpbnVlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLWNvbnRpbnVlXG4gICAgICAgIGlmIChpc0FyciAmJiBTdHJpbmcoTnVtYmVyKGtleSkpID09PSBrZXkgJiYga2V5IDwgb2JqLmxlbmd0aCkgeyBjb250aW51ZTsgfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtc3ludGF4LCBuby1jb250aW51ZVxuICAgICAgICBpZiAoaGFzU2hhbW1lZFN5bWJvbHMgJiYgc3ltTWFwWyckJyArIGtleV0gaW5zdGFuY2VvZiBTeW1ib2wpIHtcbiAgICAgICAgICAgIC8vIHRoaXMgaXMgdG8gcHJldmVudCBzaGFtbWVkIFN5bWJvbHMsIHdoaWNoIGFyZSBzdG9yZWQgYXMgc3RyaW5ncywgZnJvbSBiZWluZyBpbmNsdWRlZCBpbiB0aGUgc3RyaW5nIGtleSBzZWN0aW9uXG4gICAgICAgICAgICBjb250aW51ZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheCwgbm8tY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmICgkdGVzdC5jYWxsKC9bXlxcdyRdLywga2V5KSkge1xuICAgICAgICAgICAgeHMucHVzaChpbnNwZWN0KGtleSwgb2JqKSArICc6ICcgKyBpbnNwZWN0KG9ialtrZXldLCBvYmopKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHhzLnB1c2goa2V5ICsgJzogJyArIGluc3BlY3Qob2JqW2tleV0sIG9iaikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgZ09QUyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHN5bXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmIChpc0VudW1lcmFibGUuY2FsbChvYmosIHN5bXNbal0pKSB7XG4gICAgICAgICAgICAgICAgeHMucHVzaCgnWycgKyBpbnNwZWN0KHN5bXNbal0pICsgJ106ICcgKyBpbnNwZWN0KG9ialtzeW1zW2pdXSwgb2JqKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHhzO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgR2V0SW50cmluc2ljID0gcmVxdWlyZSgnZ2V0LWludHJpbnNpYycpO1xudmFyIGNhbGxCb3VuZCA9IHJlcXVpcmUoJ2NhbGwtYmluZC9jYWxsQm91bmQnKTtcbnZhciBpbnNwZWN0ID0gcmVxdWlyZSgnb2JqZWN0LWluc3BlY3QnKTtcblxudmFyICRUeXBlRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvdHlwZScpO1xudmFyICRXZWFrTWFwID0gR2V0SW50cmluc2ljKCclV2Vha01hcCUnLCB0cnVlKTtcbnZhciAkTWFwID0gR2V0SW50cmluc2ljKCclTWFwJScsIHRydWUpO1xuXG52YXIgJHdlYWtNYXBHZXQgPSBjYWxsQm91bmQoJ1dlYWtNYXAucHJvdG90eXBlLmdldCcsIHRydWUpO1xudmFyICR3ZWFrTWFwU2V0ID0gY2FsbEJvdW5kKCdXZWFrTWFwLnByb3RvdHlwZS5zZXQnLCB0cnVlKTtcbnZhciAkd2Vha01hcEhhcyA9IGNhbGxCb3VuZCgnV2Vha01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG52YXIgJG1hcEdldCA9IGNhbGxCb3VuZCgnTWFwLnByb3RvdHlwZS5nZXQnLCB0cnVlKTtcbnZhciAkbWFwU2V0ID0gY2FsbEJvdW5kKCdNYXAucHJvdG90eXBlLnNldCcsIHRydWUpO1xudmFyICRtYXBIYXMgPSBjYWxsQm91bmQoJ01hcC5wcm90b3R5cGUuaGFzJywgdHJ1ZSk7XG5cbi8qXG4qIFRoaXMgZnVuY3Rpb24gdHJhdmVyc2VzIHRoZSBsaXN0IHJldHVybmluZyB0aGUgbm9kZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBrZXkuXG4qXG4qIFRoYXQgbm9kZSBpcyBhbHNvIG1vdmVkIHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0LCBzbyB0aGF0IGlmIGl0J3MgYWNjZXNzZWQgYWdhaW4gd2UgZG9uJ3QgbmVlZCB0byB0cmF2ZXJzZSB0aGUgd2hvbGUgbGlzdC4gQnkgZG9pbmcgc28sIGFsbCB0aGUgcmVjZW50bHkgdXNlZCBub2RlcyBjYW4gYmUgYWNjZXNzZWQgcmVsYXRpdmVseSBxdWlja2x5LlxuKi9cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJykubGlzdEdldE5vZGV9ICovXG52YXIgbGlzdEdldE5vZGUgPSBmdW5jdGlvbiAobGlzdCwga2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0LyoqIEB0eXBlIHt0eXBlb2YgbGlzdCB8IE5vbk51bGxhYmxlPCh0eXBlb2YgbGlzdClbJ25leHQnXT59ICovXG5cdHZhciBwcmV2ID0gbGlzdDtcblx0LyoqIEB0eXBlIHsodHlwZW9mIGxpc3QpWyduZXh0J119ICovXG5cdHZhciBjdXJyO1xuXHRmb3IgKDsgKGN1cnIgPSBwcmV2Lm5leHQpICE9PSBudWxsOyBwcmV2ID0gY3Vycikge1xuXHRcdGlmIChjdXJyLmtleSA9PT0ga2V5KSB7XG5cdFx0XHRwcmV2Lm5leHQgPSBjdXJyLm5leHQ7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0cmEtcGFyZW5zXG5cdFx0XHRjdXJyLm5leHQgPSAvKiogQHR5cGUge05vbk51bGxhYmxlPHR5cGVvZiBsaXN0Lm5leHQ+fSAqLyAobGlzdC5uZXh0KTtcblx0XHRcdGxpc3QubmV4dCA9IGN1cnI7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cblx0XHRcdHJldHVybiBjdXJyO1xuXHRcdH1cblx0fVxufTtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKS5saXN0R2V0fSAqL1xudmFyIGxpc3RHZXQgPSBmdW5jdGlvbiAob2JqZWN0cywga2V5KSB7XG5cdHZhciBub2RlID0gbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcblx0cmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZTtcbn07XG4vKiogQHR5cGUge2ltcG9ydCgnLicpLmxpc3RTZXR9ICovXG52YXIgbGlzdFNldCA9IGZ1bmN0aW9uIChvYmplY3RzLCBrZXksIHZhbHVlKSB7XG5cdHZhciBub2RlID0gbGlzdEdldE5vZGUob2JqZWN0cywga2V5KTtcblx0aWYgKG5vZGUpIHtcblx0XHRub2RlLnZhbHVlID0gdmFsdWU7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gUHJlcGVuZCB0aGUgbmV3IG5vZGUgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdFxuXHRcdG9iamVjdHMubmV4dCA9IC8qKiBAdHlwZSB7aW1wb3J0KCcuJykuTGlzdE5vZGU8dHlwZW9mIHZhbHVlPn0gKi8gKHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wYXJhbS1yZWFzc2lnbiwgbm8tZXh0cmEtcGFyZW5zXG5cdFx0XHRrZXk6IGtleSxcblx0XHRcdG5leHQ6IG9iamVjdHMubmV4dCxcblx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdH0pO1xuXHR9XG59O1xuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKS5saXN0SGFzfSAqL1xudmFyIGxpc3RIYXMgPSBmdW5jdGlvbiAob2JqZWN0cywga2V5KSB7XG5cdHJldHVybiAhIWxpc3RHZXROb2RlKG9iamVjdHMsIGtleSk7XG59O1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRTaWRlQ2hhbm5lbCgpIHtcblx0LyoqIEB0eXBlIHtXZWFrTWFwPG9iamVjdCwgdW5rbm93bj59ICovIHZhciAkd207XG5cdC8qKiBAdHlwZSB7TWFwPG9iamVjdCwgdW5rbm93bj59ICovIHZhciAkbTtcblx0LyoqIEB0eXBlIHtpbXBvcnQoJy4nKS5Sb290Tm9kZTx1bmtub3duPn0gKi8gdmFyICRvO1xuXG5cdC8qKiBAdHlwZSB7aW1wb3J0KCcuJykuQ2hhbm5lbH0gKi9cblx0dmFyIGNoYW5uZWwgPSB7XG5cdFx0YXNzZXJ0OiBmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRpZiAoIWNoYW5uZWwuaGFzKGtleSkpIHtcblx0XHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ1NpZGUgY2hhbm5lbCBkb2VzIG5vdCBjb250YWluICcgKyBpbnNwZWN0KGtleSkpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0Z2V0OiBmdW5jdGlvbiAoa2V5KSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgY29uc2lzdGVudC1yZXR1cm5cblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICgkd20pIHtcblx0XHRcdFx0XHRyZXR1cm4gJHdlYWtNYXBHZXQoJHdtLCBrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKCRNYXApIHtcblx0XHRcdFx0aWYgKCRtKSB7XG5cdFx0XHRcdFx0cmV0dXJuICRtYXBHZXQoJG0sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICgkbykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWxvbmVseS1pZlxuXHRcdFx0XHRcdHJldHVybiBsaXN0R2V0KCRvLCBrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRoYXM6IGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdGlmICgkV2Vha01hcCAmJiBrZXkgJiYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBrZXkgPT09ICdmdW5jdGlvbicpKSB7XG5cdFx0XHRcdGlmICgkd20pIHtcblx0XHRcdFx0XHRyZXR1cm4gJHdlYWtNYXBIYXMoJHdtLCBrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKCRNYXApIHtcblx0XHRcdFx0aWYgKCRtKSB7XG5cdFx0XHRcdFx0cmV0dXJuICRtYXBIYXMoJG0sIGtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICgkbykgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWxvbmVseS1pZlxuXHRcdFx0XHRcdHJldHVybiBsaXN0SGFzKCRvLCBrZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG5cdFx0XHRpZiAoJFdlYWtNYXAgJiYga2V5ICYmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0JyB8fCB0eXBlb2Yga2V5ID09PSAnZnVuY3Rpb24nKSkge1xuXHRcdFx0XHRpZiAoISR3bSkge1xuXHRcdFx0XHRcdCR3bSA9IG5ldyAkV2Vha01hcCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdCR3ZWFrTWFwU2V0KCR3bSwga2V5LCB2YWx1ZSk7XG5cdFx0XHR9IGVsc2UgaWYgKCRNYXApIHtcblx0XHRcdFx0aWYgKCEkbSkge1xuXHRcdFx0XHRcdCRtID0gbmV3ICRNYXAoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHQkbWFwU2V0KCRtLCBrZXksIHZhbHVlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICghJG8pIHtcblx0XHRcdFx0XHQvLyBJbml0aWFsaXplIHRoZSBsaW5rZWQgbGlzdCBhcyBhbiBlbXB0eSBub2RlLCBzbyB0aGF0IHdlIGRvbid0IGhhdmUgdG8gc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHRoZSBmaXJzdCBub2RlOiB3ZSBjYW4gYWx3YXlzIHJlZmVyIHRvIGl0IGFzIChwcmV2aW91cyBub2RlKS5uZXh0LCBpbnN0ZWFkIG9mIHNvbWV0aGluZyBsaWtlIChsaXN0KS5oZWFkXG5cdFx0XHRcdFx0JG8gPSB7IGtleToge30sIG5leHQ6IG51bGwgfTtcblx0XHRcdFx0fVxuXHRcdFx0XHRsaXN0U2V0KCRvLCBrZXksIHZhbHVlKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdHJldHVybiBjaGFubmVsO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlcGxhY2UgPSBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2U7XG52YXIgcGVyY2VudFR3ZW50aWVzID0gLyUyMC9nO1xuXG52YXIgRm9ybWF0ID0ge1xuICAgIFJGQzE3Mzg6ICdSRkMxNzM4JyxcbiAgICBSRkMzOTg2OiAnUkZDMzk4Nidcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgICdkZWZhdWx0JzogRm9ybWF0LlJGQzM5ODYsXG4gICAgZm9ybWF0dGVyczoge1xuICAgICAgICBSRkMxNzM4OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICAgIHJldHVybiByZXBsYWNlLmNhbGwodmFsdWUsIHBlcmNlbnRUd2VudGllcywgJysnKTtcbiAgICAgICAgfSxcbiAgICAgICAgUkZDMzk4NjogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgUkZDMTczODogRm9ybWF0LlJGQzE3MzgsXG4gICAgUkZDMzk4NjogRm9ybWF0LlJGQzM5ODZcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBmb3JtYXRzID0gcmVxdWlyZSgnLi9mb3JtYXRzJyk7XG5cbnZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xuXG52YXIgaGV4VGFibGUgPSAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBhcnJheSA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgICAgICAgYXJyYXkucHVzaCgnJScgKyAoKGkgPCAxNiA/ICcwJyA6ICcnKSArIGkudG9TdHJpbmcoMTYpKS50b1VwcGVyQ2FzZSgpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59KCkpO1xuXG52YXIgY29tcGFjdFF1ZXVlID0gZnVuY3Rpb24gY29tcGFjdFF1ZXVlKHF1ZXVlKSB7XG4gICAgd2hpbGUgKHF1ZXVlLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgdmFyIGl0ZW0gPSBxdWV1ZS5wb3AoKTtcbiAgICAgICAgdmFyIG9iaiA9IGl0ZW0ub2JqW2l0ZW0ucHJvcF07XG5cbiAgICAgICAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgICAgICAgICAgdmFyIGNvbXBhY3RlZCA9IFtdO1xuXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IG9iai5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqW2pdICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgICAgICBjb21wYWN0ZWQucHVzaChvYmpbal0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaXRlbS5vYmpbaXRlbS5wcm9wXSA9IGNvbXBhY3RlZDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbnZhciBhcnJheVRvT2JqZWN0ID0gZnVuY3Rpb24gYXJyYXlUb09iamVjdChzb3VyY2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgb2JqID0gb3B0aW9ucyAmJiBvcHRpb25zLnBsYWluT2JqZWN0cyA/IE9iamVjdC5jcmVhdGUobnVsbCkgOiB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAodHlwZW9mIHNvdXJjZVtpXSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIG9ialtpXSA9IHNvdXJjZVtpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG59O1xuXG52YXIgbWVyZ2UgPSBmdW5jdGlvbiBtZXJnZSh0YXJnZXQsIHNvdXJjZSwgb3B0aW9ucykge1xuICAgIC8qIGVzbGludCBuby1wYXJhbS1yZWFzc2lnbjogMCAqL1xuICAgIGlmICghc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzb3VyY2UgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHRhcmdldCkpIHtcbiAgICAgICAgICAgIHRhcmdldC5wdXNoKHNvdXJjZSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ICYmIHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAoKG9wdGlvbnMgJiYgKG9wdGlvbnMucGxhaW5PYmplY3RzIHx8IG9wdGlvbnMuYWxsb3dQcm90b3R5cGVzKSkgfHwgIWhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsIHNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbc291cmNlXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gW3RhcmdldCwgc291cmNlXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXQgfHwgdHlwZW9mIHRhcmdldCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgcmV0dXJuIFt0YXJnZXRdLmNvbmNhdChzb3VyY2UpO1xuICAgIH1cblxuICAgIHZhciBtZXJnZVRhcmdldCA9IHRhcmdldDtcbiAgICBpZiAoaXNBcnJheSh0YXJnZXQpICYmICFpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgbWVyZ2VUYXJnZXQgPSBhcnJheVRvT2JqZWN0KHRhcmdldCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWYgKGlzQXJyYXkodGFyZ2V0KSAmJiBpc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgICAgc291cmNlLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGkpIHtcbiAgICAgICAgICAgIGlmIChoYXMuY2FsbCh0YXJnZXQsIGkpKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldEl0ZW0gPSB0YXJnZXRbaV07XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldEl0ZW0gJiYgdHlwZW9mIHRhcmdldEl0ZW0gPT09ICdvYmplY3QnICYmIGl0ZW0gJiYgdHlwZW9mIGl0ZW0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtpXSA9IG1lcmdlKHRhcmdldEl0ZW0sIGl0ZW0sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldC5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0W2ldID0gaXRlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHNvdXJjZSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSBzb3VyY2Vba2V5XTtcblxuICAgICAgICBpZiAoaGFzLmNhbGwoYWNjLCBrZXkpKSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IG1lcmdlKGFjY1trZXldLCB2YWx1ZSwgb3B0aW9ucyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhY2Nba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbWVyZ2VUYXJnZXQpO1xufTtcblxudmFyIGFzc2lnbiA9IGZ1bmN0aW9uIGFzc2lnblNpbmdsZVNvdXJjZSh0YXJnZXQsIHNvdXJjZSkge1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhzb3VyY2UpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBrZXkpIHtcbiAgICAgICAgYWNjW2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB0YXJnZXQpO1xufTtcblxudmFyIGRlY29kZSA9IGZ1bmN0aW9uIChzdHIsIGRlY29kZXIsIGNoYXJzZXQpIHtcbiAgICB2YXIgc3RyV2l0aG91dFBsdXMgPSBzdHIucmVwbGFjZSgvXFwrL2csICcgJyk7XG4gICAgaWYgKGNoYXJzZXQgPT09ICdpc28tODg1OS0xJykge1xuICAgICAgICAvLyB1bmVzY2FwZSBuZXZlciB0aHJvd3MsIG5vIHRyeS4uLmNhdGNoIG5lZWRlZDpcbiAgICAgICAgcmV0dXJuIHN0cldpdGhvdXRQbHVzLnJlcGxhY2UoLyVbMC05YS1mXXsyfS9naSwgdW5lc2NhcGUpO1xuICAgIH1cbiAgICAvLyB1dGYtOFxuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoc3RyV2l0aG91dFBsdXMpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHN0cldpdGhvdXRQbHVzO1xuICAgIH1cbn07XG5cbnZhciBsaW1pdCA9IDEwMjQ7XG5cbi8qIGVzbGludCBvcGVyYXRvci1saW5lYnJlYWs6IFsyLCBcImJlZm9yZVwiXSAqL1xuXG52YXIgZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKHN0ciwgZGVmYXVsdEVuY29kZXIsIGNoYXJzZXQsIGtpbmQsIGZvcm1hdCkge1xuICAgIC8vIFRoaXMgY29kZSB3YXMgb3JpZ2luYWxseSB3cml0dGVuIGJ5IEJyaWFuIFdoaXRlIChtc2NkZXgpIGZvciB0aGUgaW8uanMgY29yZSBxdWVyeXN0cmluZyBsaWJyYXJ5LlxuICAgIC8vIEl0IGhhcyBiZWVuIGFkYXB0ZWQgaGVyZSBmb3Igc3RyaWN0ZXIgYWRoZXJlbmNlIHRvIFJGQyAzOTg2XG4gICAgaWYgKHN0ci5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG5cbiAgICB2YXIgc3RyaW5nID0gc3RyO1xuICAgIGlmICh0eXBlb2Ygc3RyID09PSAnc3ltYm9sJykge1xuICAgICAgICBzdHJpbmcgPSBTeW1ib2wucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3RyKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHN0cmluZyA9IFN0cmluZyhzdHIpO1xuICAgIH1cblxuICAgIGlmIChjaGFyc2V0ID09PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgcmV0dXJuIGVzY2FwZShzdHJpbmcpLnJlcGxhY2UoLyV1WzAtOWEtZl17NH0vZ2ksIGZ1bmN0aW9uICgkMCkge1xuICAgICAgICAgICAgcmV0dXJuICclMjYlMjMnICsgcGFyc2VJbnQoJDAuc2xpY2UoMiksIDE2KSArICclM0InO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICB2YXIgb3V0ID0gJyc7XG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBzdHJpbmcubGVuZ3RoOyBqICs9IGxpbWl0KSB7XG4gICAgICAgIHZhciBzZWdtZW50ID0gc3RyaW5nLmxlbmd0aCA+PSBsaW1pdCA/IHN0cmluZy5zbGljZShqLCBqICsgbGltaXQpIDogc3RyaW5nO1xuICAgICAgICB2YXIgYXJyID0gW107XG5cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWdtZW50Lmxlbmd0aDsgKytpKSB7XG4gICAgICAgICAgICB2YXIgYyA9IHNlZ21lbnQuY2hhckNvZGVBdChpKTtcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICBjID09PSAweDJEIC8vIC1cbiAgICAgICAgICAgICAgICB8fCBjID09PSAweDJFIC8vIC5cbiAgICAgICAgICAgICAgICB8fCBjID09PSAweDVGIC8vIF9cbiAgICAgICAgICAgICAgICB8fCBjID09PSAweDdFIC8vIH5cbiAgICAgICAgICAgICAgICB8fCAoYyA+PSAweDMwICYmIGMgPD0gMHgzOSkgLy8gMC05XG4gICAgICAgICAgICAgICAgfHwgKGMgPj0gMHg0MSAmJiBjIDw9IDB4NUEpIC8vIGEtelxuICAgICAgICAgICAgICAgIHx8IChjID49IDB4NjEgJiYgYyA8PSAweDdBKSAvLyBBLVpcbiAgICAgICAgICAgICAgICB8fCAoZm9ybWF0ID09PSBmb3JtYXRzLlJGQzE3MzggJiYgKGMgPT09IDB4MjggfHwgYyA9PT0gMHgyOSkpIC8vICggKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgYXJyW2Fyci5sZW5ndGhdID0gc2VnbWVudC5jaGFyQXQoaSk7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjIDwgMHg4MCkge1xuICAgICAgICAgICAgICAgIGFyclthcnIubGVuZ3RoXSA9IGhleFRhYmxlW2NdO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoYyA8IDB4ODAwKSB7XG4gICAgICAgICAgICAgICAgYXJyW2Fyci5sZW5ndGhdID0gaGV4VGFibGVbMHhDMCB8IChjID4+IDYpXVxuICAgICAgICAgICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoYyAmIDB4M0YpXTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGMgPCAweEQ4MDAgfHwgYyA+PSAweEUwMDApIHtcbiAgICAgICAgICAgICAgICBhcnJbYXJyLmxlbmd0aF0gPSBoZXhUYWJsZVsweEUwIHwgKGMgPj4gMTIpXVxuICAgICAgICAgICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoKGMgPj4gNikgJiAweDNGKV1cbiAgICAgICAgICAgICAgICAgICAgKyBoZXhUYWJsZVsweDgwIHwgKGMgJiAweDNGKV07XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGkgKz0gMTtcbiAgICAgICAgICAgIGMgPSAweDEwMDAwICsgKCgoYyAmIDB4M0ZGKSA8PCAxMCkgfCAoc2VnbWVudC5jaGFyQ29kZUF0KGkpICYgMHgzRkYpKTtcblxuICAgICAgICAgICAgYXJyW2Fyci5sZW5ndGhdID0gaGV4VGFibGVbMHhGMCB8IChjID4+IDE4KV1cbiAgICAgICAgICAgICAgICArIGhleFRhYmxlWzB4ODAgfCAoKGMgPj4gMTIpICYgMHgzRildXG4gICAgICAgICAgICAgICAgKyBoZXhUYWJsZVsweDgwIHwgKChjID4+IDYpICYgMHgzRildXG4gICAgICAgICAgICAgICAgKyBoZXhUYWJsZVsweDgwIHwgKGMgJiAweDNGKV07XG4gICAgICAgIH1cblxuICAgICAgICBvdXQgKz0gYXJyLmpvaW4oJycpO1xuICAgIH1cblxuICAgIHJldHVybiBvdXQ7XG59O1xuXG52YXIgY29tcGFjdCA9IGZ1bmN0aW9uIGNvbXBhY3QodmFsdWUpIHtcbiAgICB2YXIgcXVldWUgPSBbeyBvYmo6IHsgbzogdmFsdWUgfSwgcHJvcDogJ28nIH1dO1xuICAgIHZhciByZWZzID0gW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHF1ZXVlLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIHZhciBpdGVtID0gcXVldWVbaV07XG4gICAgICAgIHZhciBvYmogPSBpdGVtLm9ialtpdGVtLnByb3BdO1xuXG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBrZXlzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgICB2YXIga2V5ID0ga2V5c1tqXTtcbiAgICAgICAgICAgIHZhciB2YWwgPSBvYmpba2V5XTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiB2YWwgIT09IG51bGwgJiYgcmVmcy5pbmRleE9mKHZhbCkgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgcXVldWUucHVzaCh7IG9iajogb2JqLCBwcm9wOiBrZXkgfSk7XG4gICAgICAgICAgICAgICAgcmVmcy5wdXNoKHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb21wYWN0UXVldWUocXVldWUpO1xuXG4gICAgcmV0dXJuIHZhbHVlO1xufTtcblxudmFyIGlzUmVnRXhwID0gZnVuY3Rpb24gaXNSZWdFeHAob2JqKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmopID09PSAnW29iamVjdCBSZWdFeHBdJztcbn07XG5cbnZhciBpc0J1ZmZlciA9IGZ1bmN0aW9uIGlzQnVmZmVyKG9iaikge1xuICAgIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gISEob2JqLmNvbnN0cnVjdG9yICYmIG9iai5jb25zdHJ1Y3Rvci5pc0J1ZmZlciAmJiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIob2JqKSk7XG59O1xuXG52YXIgY29tYmluZSA9IGZ1bmN0aW9uIGNvbWJpbmUoYSwgYikge1xuICAgIHJldHVybiBbXS5jb25jYXQoYSwgYik7XG59O1xuXG52YXIgbWF5YmVNYXAgPSBmdW5jdGlvbiBtYXliZU1hcCh2YWwsIGZuKSB7XG4gICAgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YXIgbWFwcGVkID0gW107XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBtYXBwZWQucHVzaChmbih2YWxbaV0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWFwcGVkO1xuICAgIH1cbiAgICByZXR1cm4gZm4odmFsKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAgIGFycmF5VG9PYmplY3Q6IGFycmF5VG9PYmplY3QsXG4gICAgYXNzaWduOiBhc3NpZ24sXG4gICAgY29tYmluZTogY29tYmluZSxcbiAgICBjb21wYWN0OiBjb21wYWN0LFxuICAgIGRlY29kZTogZGVjb2RlLFxuICAgIGVuY29kZTogZW5jb2RlLFxuICAgIGlzQnVmZmVyOiBpc0J1ZmZlcixcbiAgICBpc1JlZ0V4cDogaXNSZWdFeHAsXG4gICAgbWF5YmVNYXA6IG1heWJlTWFwLFxuICAgIG1lcmdlOiBtZXJnZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGdldFNpZGVDaGFubmVsID0gcmVxdWlyZSgnc2lkZS1jaGFubmVsJyk7XG52YXIgdXRpbHMgPSByZXF1aXJlKCcuL3V0aWxzJyk7XG52YXIgZm9ybWF0cyA9IHJlcXVpcmUoJy4vZm9ybWF0cycpO1xudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBhcnJheVByZWZpeEdlbmVyYXRvcnMgPSB7XG4gICAgYnJhY2tldHM6IGZ1bmN0aW9uIGJyYWNrZXRzKHByZWZpeCkge1xuICAgICAgICByZXR1cm4gcHJlZml4ICsgJ1tdJztcbiAgICB9LFxuICAgIGNvbW1hOiAnY29tbWEnLFxuICAgIGluZGljZXM6IGZ1bmN0aW9uIGluZGljZXMocHJlZml4LCBrZXkpIHtcbiAgICAgICAgcmV0dXJuIHByZWZpeCArICdbJyArIGtleSArICddJztcbiAgICB9LFxuICAgIHJlcGVhdDogZnVuY3Rpb24gcmVwZWF0KHByZWZpeCkge1xuICAgICAgICByZXR1cm4gcHJlZml4O1xuICAgIH1cbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbnZhciBwdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7XG52YXIgcHVzaFRvQXJyYXkgPSBmdW5jdGlvbiAoYXJyLCB2YWx1ZU9yQXJyYXkpIHtcbiAgICBwdXNoLmFwcGx5KGFyciwgaXNBcnJheSh2YWx1ZU9yQXJyYXkpID8gdmFsdWVPckFycmF5IDogW3ZhbHVlT3JBcnJheV0pO1xufTtcblxudmFyIHRvSVNPID0gRGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmc7XG5cbnZhciBkZWZhdWx0Rm9ybWF0ID0gZm9ybWF0c1snZGVmYXVsdCddO1xudmFyIGRlZmF1bHRzID0ge1xuICAgIGFkZFF1ZXJ5UHJlZml4OiBmYWxzZSxcbiAgICBhbGxvd0RvdHM6IGZhbHNlLFxuICAgIGFsbG93RW1wdHlBcnJheXM6IGZhbHNlLFxuICAgIGFycmF5Rm9ybWF0OiAnaW5kaWNlcycsXG4gICAgY2hhcnNldDogJ3V0Zi04JyxcbiAgICBjaGFyc2V0U2VudGluZWw6IGZhbHNlLFxuICAgIGRlbGltaXRlcjogJyYnLFxuICAgIGVuY29kZTogdHJ1ZSxcbiAgICBlbmNvZGVEb3RJbktleXM6IGZhbHNlLFxuICAgIGVuY29kZXI6IHV0aWxzLmVuY29kZSxcbiAgICBlbmNvZGVWYWx1ZXNPbmx5OiBmYWxzZSxcbiAgICBmb3JtYXQ6IGRlZmF1bHRGb3JtYXQsXG4gICAgZm9ybWF0dGVyOiBmb3JtYXRzLmZvcm1hdHRlcnNbZGVmYXVsdEZvcm1hdF0sXG4gICAgLy8gZGVwcmVjYXRlZFxuICAgIGluZGljZXM6IGZhbHNlLFxuICAgIHNlcmlhbGl6ZURhdGU6IGZ1bmN0aW9uIHNlcmlhbGl6ZURhdGUoZGF0ZSkge1xuICAgICAgICByZXR1cm4gdG9JU08uY2FsbChkYXRlKTtcbiAgICB9LFxuICAgIHNraXBOdWxsczogZmFsc2UsXG4gICAgc3RyaWN0TnVsbEhhbmRsaW5nOiBmYWxzZVxufTtcblxudmFyIGlzTm9uTnVsbGlzaFByaW1pdGl2ZSA9IGZ1bmN0aW9uIGlzTm9uTnVsbGlzaFByaW1pdGl2ZSh2KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJ1xuICAgICAgICB8fCB0eXBlb2YgdiA9PT0gJ251bWJlcidcbiAgICAgICAgfHwgdHlwZW9mIHYgPT09ICdib29sZWFuJ1xuICAgICAgICB8fCB0eXBlb2YgdiA9PT0gJ3N5bWJvbCdcbiAgICAgICAgfHwgdHlwZW9mIHYgPT09ICdiaWdpbnQnO1xufTtcblxudmFyIHNlbnRpbmVsID0ge307XG5cbnZhciBzdHJpbmdpZnkgPSBmdW5jdGlvbiBzdHJpbmdpZnkoXG4gICAgb2JqZWN0LFxuICAgIHByZWZpeCxcbiAgICBnZW5lcmF0ZUFycmF5UHJlZml4LFxuICAgIGNvbW1hUm91bmRUcmlwLFxuICAgIGFsbG93RW1wdHlBcnJheXMsXG4gICAgc3RyaWN0TnVsbEhhbmRsaW5nLFxuICAgIHNraXBOdWxscyxcbiAgICBlbmNvZGVEb3RJbktleXMsXG4gICAgZW5jb2RlcixcbiAgICBmaWx0ZXIsXG4gICAgc29ydCxcbiAgICBhbGxvd0RvdHMsXG4gICAgc2VyaWFsaXplRGF0ZSxcbiAgICBmb3JtYXQsXG4gICAgZm9ybWF0dGVyLFxuICAgIGVuY29kZVZhbHVlc09ubHksXG4gICAgY2hhcnNldCxcbiAgICBzaWRlQ2hhbm5lbFxuKSB7XG4gICAgdmFyIG9iaiA9IG9iamVjdDtcblxuICAgIHZhciB0bXBTYyA9IHNpZGVDaGFubmVsO1xuICAgIHZhciBzdGVwID0gMDtcbiAgICB2YXIgZmluZEZsYWcgPSBmYWxzZTtcbiAgICB3aGlsZSAoKHRtcFNjID0gdG1wU2MuZ2V0KHNlbnRpbmVsKSkgIT09IHZvaWQgdW5kZWZpbmVkICYmICFmaW5kRmxhZykge1xuICAgICAgICAvLyBXaGVyZSBvYmplY3QgbGFzdCBhcHBlYXJlZCBpbiB0aGUgcmVmIHRyZWVcbiAgICAgICAgdmFyIHBvcyA9IHRtcFNjLmdldChvYmplY3QpO1xuICAgICAgICBzdGVwICs9IDE7XG4gICAgICAgIGlmICh0eXBlb2YgcG9zICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaWYgKHBvcyA9PT0gc3RlcCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdDeWNsaWMgb2JqZWN0IHZhbHVlJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZpbmRGbGFnID0gdHJ1ZTsgLy8gQnJlYWsgd2hpbGVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHRtcFNjLmdldChzZW50aW5lbCkgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBzdGVwID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG9iaiA9IGZpbHRlcihwcmVmaXgsIG9iaik7XG4gICAgfSBlbHNlIGlmIChvYmogaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgIG9iaiA9IHNlcmlhbGl6ZURhdGUob2JqKTtcbiAgICB9IGVsc2UgaWYgKGdlbmVyYXRlQXJyYXlQcmVmaXggPT09ICdjb21tYScgJiYgaXNBcnJheShvYmopKSB7XG4gICAgICAgIG9iaiA9IHV0aWxzLm1heWJlTWFwKG9iaiwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZURhdGUodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgIGlmIChzdHJpY3ROdWxsSGFuZGxpbmcpIHtcbiAgICAgICAgICAgIHJldHVybiBlbmNvZGVyICYmICFlbmNvZGVWYWx1ZXNPbmx5ID8gZW5jb2RlcihwcmVmaXgsIGRlZmF1bHRzLmVuY29kZXIsIGNoYXJzZXQsICdrZXknLCBmb3JtYXQpIDogcHJlZml4O1xuICAgICAgICB9XG5cbiAgICAgICAgb2JqID0gJyc7XG4gICAgfVxuXG4gICAgaWYgKGlzTm9uTnVsbGlzaFByaW1pdGl2ZShvYmopIHx8IHV0aWxzLmlzQnVmZmVyKG9iaikpIHtcbiAgICAgICAgaWYgKGVuY29kZXIpIHtcbiAgICAgICAgICAgIHZhciBrZXlWYWx1ZSA9IGVuY29kZVZhbHVlc09ubHkgPyBwcmVmaXggOiBlbmNvZGVyKHByZWZpeCwgZGVmYXVsdHMuZW5jb2RlciwgY2hhcnNldCwgJ2tleScsIGZvcm1hdCk7XG4gICAgICAgICAgICByZXR1cm4gW2Zvcm1hdHRlcihrZXlWYWx1ZSkgKyAnPScgKyBmb3JtYXR0ZXIoZW5jb2RlcihvYmosIGRlZmF1bHRzLmVuY29kZXIsIGNoYXJzZXQsICd2YWx1ZScsIGZvcm1hdCkpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gW2Zvcm1hdHRlcihwcmVmaXgpICsgJz0nICsgZm9ybWF0dGVyKFN0cmluZyhvYmopKV07XG4gICAgfVxuXG4gICAgdmFyIHZhbHVlcyA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfVxuXG4gICAgdmFyIG9iaktleXM7XG4gICAgaWYgKGdlbmVyYXRlQXJyYXlQcmVmaXggPT09ICdjb21tYScgJiYgaXNBcnJheShvYmopKSB7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gam9pbiBlbGVtZW50cyBpblxuICAgICAgICBpZiAoZW5jb2RlVmFsdWVzT25seSAmJiBlbmNvZGVyKSB7XG4gICAgICAgICAgICBvYmogPSB1dGlscy5tYXliZU1hcChvYmosIGVuY29kZXIpO1xuICAgICAgICB9XG4gICAgICAgIG9iaktleXMgPSBbeyB2YWx1ZTogb2JqLmxlbmd0aCA+IDAgPyBvYmouam9pbignLCcpIHx8IG51bGwgOiB2b2lkIHVuZGVmaW5lZCB9XTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZmlsdGVyKSkge1xuICAgICAgICBvYmpLZXlzID0gZmlsdGVyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgICAgICAgb2JqS2V5cyA9IHNvcnQgPyBrZXlzLnNvcnQoc29ydCkgOiBrZXlzO1xuICAgIH1cblxuICAgIHZhciBlbmNvZGVkUHJlZml4ID0gZW5jb2RlRG90SW5LZXlzID8gcHJlZml4LnJlcGxhY2UoL1xcLi9nLCAnJTJFJykgOiBwcmVmaXg7XG5cbiAgICB2YXIgYWRqdXN0ZWRQcmVmaXggPSBjb21tYVJvdW5kVHJpcCAmJiBpc0FycmF5KG9iaikgJiYgb2JqLmxlbmd0aCA9PT0gMSA/IGVuY29kZWRQcmVmaXggKyAnW10nIDogZW5jb2RlZFByZWZpeDtcblxuICAgIGlmIChhbGxvd0VtcHR5QXJyYXlzICYmIGlzQXJyYXkob2JqKSAmJiBvYmoubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBhZGp1c3RlZFByZWZpeCArICdbXSc7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBvYmpLZXlzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgIHZhciBrZXkgPSBvYmpLZXlzW2pdO1xuICAgICAgICB2YXIgdmFsdWUgPSB0eXBlb2Yga2V5ID09PSAnb2JqZWN0JyAmJiB0eXBlb2Yga2V5LnZhbHVlICE9PSAndW5kZWZpbmVkJyA/IGtleS52YWx1ZSA6IG9ialtrZXldO1xuXG4gICAgICAgIGlmIChza2lwTnVsbHMgJiYgdmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGVuY29kZWRLZXkgPSBhbGxvd0RvdHMgJiYgZW5jb2RlRG90SW5LZXlzID8ga2V5LnJlcGxhY2UoL1xcLi9nLCAnJTJFJykgOiBrZXk7XG4gICAgICAgIHZhciBrZXlQcmVmaXggPSBpc0FycmF5KG9iailcbiAgICAgICAgICAgID8gdHlwZW9mIGdlbmVyYXRlQXJyYXlQcmVmaXggPT09ICdmdW5jdGlvbicgPyBnZW5lcmF0ZUFycmF5UHJlZml4KGFkanVzdGVkUHJlZml4LCBlbmNvZGVkS2V5KSA6IGFkanVzdGVkUHJlZml4XG4gICAgICAgICAgICA6IGFkanVzdGVkUHJlZml4ICsgKGFsbG93RG90cyA/ICcuJyArIGVuY29kZWRLZXkgOiAnWycgKyBlbmNvZGVkS2V5ICsgJ10nKTtcblxuICAgICAgICBzaWRlQ2hhbm5lbC5zZXQob2JqZWN0LCBzdGVwKTtcbiAgICAgICAgdmFyIHZhbHVlU2lkZUNoYW5uZWwgPSBnZXRTaWRlQ2hhbm5lbCgpO1xuICAgICAgICB2YWx1ZVNpZGVDaGFubmVsLnNldChzZW50aW5lbCwgc2lkZUNoYW5uZWwpO1xuICAgICAgICBwdXNoVG9BcnJheSh2YWx1ZXMsIHN0cmluZ2lmeShcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAga2V5UHJlZml4LFxuICAgICAgICAgICAgZ2VuZXJhdGVBcnJheVByZWZpeCxcbiAgICAgICAgICAgIGNvbW1hUm91bmRUcmlwLFxuICAgICAgICAgICAgYWxsb3dFbXB0eUFycmF5cyxcbiAgICAgICAgICAgIHN0cmljdE51bGxIYW5kbGluZyxcbiAgICAgICAgICAgIHNraXBOdWxscyxcbiAgICAgICAgICAgIGVuY29kZURvdEluS2V5cyxcbiAgICAgICAgICAgIGdlbmVyYXRlQXJyYXlQcmVmaXggPT09ICdjb21tYScgJiYgZW5jb2RlVmFsdWVzT25seSAmJiBpc0FycmF5KG9iaikgPyBudWxsIDogZW5jb2RlcixcbiAgICAgICAgICAgIGZpbHRlcixcbiAgICAgICAgICAgIHNvcnQsXG4gICAgICAgICAgICBhbGxvd0RvdHMsXG4gICAgICAgICAgICBzZXJpYWxpemVEYXRlLFxuICAgICAgICAgICAgZm9ybWF0LFxuICAgICAgICAgICAgZm9ybWF0dGVyLFxuICAgICAgICAgICAgZW5jb2RlVmFsdWVzT25seSxcbiAgICAgICAgICAgIGNoYXJzZXQsXG4gICAgICAgICAgICB2YWx1ZVNpZGVDaGFubmVsXG4gICAgICAgICkpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZXM7XG59O1xuXG52YXIgbm9ybWFsaXplU3RyaW5naWZ5T3B0aW9ucyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZVN0cmluZ2lmeU9wdGlvbnMob3B0cykge1xuICAgIGlmICghb3B0cykge1xuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzLmFsbG93RW1wdHlBcnJheXMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvcHRzLmFsbG93RW1wdHlBcnJheXMgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgYWxsb3dFbXB0eUFycmF5c2Agb3B0aW9uIGNhbiBvbmx5IGJlIGB0cnVlYCBvciBgZmFsc2VgLCB3aGVuIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzLmVuY29kZURvdEluS2V5cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9wdHMuZW5jb2RlRG90SW5LZXlzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYGVuY29kZURvdEluS2V5c2Agb3B0aW9uIGNhbiBvbmx5IGJlIGB0cnVlYCBvciBgZmFsc2VgLCB3aGVuIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZW5jb2RlciAhPT0gbnVsbCAmJiB0eXBlb2Ygb3B0cy5lbmNvZGVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb3B0cy5lbmNvZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0VuY29kZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgdmFyIGNoYXJzZXQgPSBvcHRzLmNoYXJzZXQgfHwgZGVmYXVsdHMuY2hhcnNldDtcbiAgICBpZiAodHlwZW9mIG9wdHMuY2hhcnNldCAhPT0gJ3VuZGVmaW5lZCcgJiYgb3B0cy5jaGFyc2V0ICE9PSAndXRmLTgnICYmIG9wdHMuY2hhcnNldCAhPT0gJ2lzby04ODU5LTEnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBjaGFyc2V0IG9wdGlvbiBtdXN0IGJlIGVpdGhlciB1dGYtOCwgaXNvLTg4NTktMSwgb3IgdW5kZWZpbmVkJyk7XG4gICAgfVxuXG4gICAgdmFyIGZvcm1hdCA9IGZvcm1hdHNbJ2RlZmF1bHQnXTtcbiAgICBpZiAodHlwZW9mIG9wdHMuZm9ybWF0ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBpZiAoIWhhcy5jYWxsKGZvcm1hdHMuZm9ybWF0dGVycywgb3B0cy5mb3JtYXQpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGZvcm1hdCBvcHRpb24gcHJvdmlkZWQuJyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9ybWF0ID0gb3B0cy5mb3JtYXQ7XG4gICAgfVxuICAgIHZhciBmb3JtYXR0ZXIgPSBmb3JtYXRzLmZvcm1hdHRlcnNbZm9ybWF0XTtcblxuICAgIHZhciBmaWx0ZXIgPSBkZWZhdWx0cy5maWx0ZXI7XG4gICAgaWYgKHR5cGVvZiBvcHRzLmZpbHRlciA9PT0gJ2Z1bmN0aW9uJyB8fCBpc0FycmF5KG9wdHMuZmlsdGVyKSkge1xuICAgICAgICBmaWx0ZXIgPSBvcHRzLmZpbHRlcjtcbiAgICB9XG5cbiAgICB2YXIgYXJyYXlGb3JtYXQ7XG4gICAgaWYgKG9wdHMuYXJyYXlGb3JtYXQgaW4gYXJyYXlQcmVmaXhHZW5lcmF0b3JzKSB7XG4gICAgICAgIGFycmF5Rm9ybWF0ID0gb3B0cy5hcnJheUZvcm1hdDtcbiAgICB9IGVsc2UgaWYgKCdpbmRpY2VzJyBpbiBvcHRzKSB7XG4gICAgICAgIGFycmF5Rm9ybWF0ID0gb3B0cy5pbmRpY2VzID8gJ2luZGljZXMnIDogJ3JlcGVhdCc7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgYXJyYXlGb3JtYXQgPSBkZWZhdWx0cy5hcnJheUZvcm1hdDtcbiAgICB9XG5cbiAgICBpZiAoJ2NvbW1hUm91bmRUcmlwJyBpbiBvcHRzICYmIHR5cGVvZiBvcHRzLmNvbW1hUm91bmRUcmlwICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYGNvbW1hUm91bmRUcmlwYCBtdXN0IGJlIGEgYm9vbGVhbiwgb3IgYWJzZW50Jyk7XG4gICAgfVxuXG4gICAgdmFyIGFsbG93RG90cyA9IHR5cGVvZiBvcHRzLmFsbG93RG90cyA9PT0gJ3VuZGVmaW5lZCcgPyBvcHRzLmVuY29kZURvdEluS2V5cyA9PT0gdHJ1ZSA/IHRydWUgOiBkZWZhdWx0cy5hbGxvd0RvdHMgOiAhIW9wdHMuYWxsb3dEb3RzO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgYWRkUXVlcnlQcmVmaXg6IHR5cGVvZiBvcHRzLmFkZFF1ZXJ5UHJlZml4ID09PSAnYm9vbGVhbicgPyBvcHRzLmFkZFF1ZXJ5UHJlZml4IDogZGVmYXVsdHMuYWRkUXVlcnlQcmVmaXgsXG4gICAgICAgIGFsbG93RG90czogYWxsb3dEb3RzLFxuICAgICAgICBhbGxvd0VtcHR5QXJyYXlzOiB0eXBlb2Ygb3B0cy5hbGxvd0VtcHR5QXJyYXlzID09PSAnYm9vbGVhbicgPyAhIW9wdHMuYWxsb3dFbXB0eUFycmF5cyA6IGRlZmF1bHRzLmFsbG93RW1wdHlBcnJheXMsXG4gICAgICAgIGFycmF5Rm9ybWF0OiBhcnJheUZvcm1hdCxcbiAgICAgICAgY2hhcnNldDogY2hhcnNldCxcbiAgICAgICAgY2hhcnNldFNlbnRpbmVsOiB0eXBlb2Ygb3B0cy5jaGFyc2V0U2VudGluZWwgPT09ICdib29sZWFuJyA/IG9wdHMuY2hhcnNldFNlbnRpbmVsIDogZGVmYXVsdHMuY2hhcnNldFNlbnRpbmVsLFxuICAgICAgICBjb21tYVJvdW5kVHJpcDogb3B0cy5jb21tYVJvdW5kVHJpcCxcbiAgICAgICAgZGVsaW1pdGVyOiB0eXBlb2Ygb3B0cy5kZWxpbWl0ZXIgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdHMuZGVsaW1pdGVyIDogb3B0cy5kZWxpbWl0ZXIsXG4gICAgICAgIGVuY29kZTogdHlwZW9mIG9wdHMuZW5jb2RlID09PSAnYm9vbGVhbicgPyBvcHRzLmVuY29kZSA6IGRlZmF1bHRzLmVuY29kZSxcbiAgICAgICAgZW5jb2RlRG90SW5LZXlzOiB0eXBlb2Ygb3B0cy5lbmNvZGVEb3RJbktleXMgPT09ICdib29sZWFuJyA/IG9wdHMuZW5jb2RlRG90SW5LZXlzIDogZGVmYXVsdHMuZW5jb2RlRG90SW5LZXlzLFxuICAgICAgICBlbmNvZGVyOiB0eXBlb2Ygb3B0cy5lbmNvZGVyID09PSAnZnVuY3Rpb24nID8gb3B0cy5lbmNvZGVyIDogZGVmYXVsdHMuZW5jb2RlcixcbiAgICAgICAgZW5jb2RlVmFsdWVzT25seTogdHlwZW9mIG9wdHMuZW5jb2RlVmFsdWVzT25seSA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5lbmNvZGVWYWx1ZXNPbmx5IDogZGVmYXVsdHMuZW5jb2RlVmFsdWVzT25seSxcbiAgICAgICAgZmlsdGVyOiBmaWx0ZXIsXG4gICAgICAgIGZvcm1hdDogZm9ybWF0LFxuICAgICAgICBmb3JtYXR0ZXI6IGZvcm1hdHRlcixcbiAgICAgICAgc2VyaWFsaXplRGF0ZTogdHlwZW9mIG9wdHMuc2VyaWFsaXplRGF0ZSA9PT0gJ2Z1bmN0aW9uJyA/IG9wdHMuc2VyaWFsaXplRGF0ZSA6IGRlZmF1bHRzLnNlcmlhbGl6ZURhdGUsXG4gICAgICAgIHNraXBOdWxsczogdHlwZW9mIG9wdHMuc2tpcE51bGxzID09PSAnYm9vbGVhbicgPyBvcHRzLnNraXBOdWxscyA6IGRlZmF1bHRzLnNraXBOdWxscyxcbiAgICAgICAgc29ydDogdHlwZW9mIG9wdHMuc29ydCA9PT0gJ2Z1bmN0aW9uJyA/IG9wdHMuc29ydCA6IG51bGwsXG4gICAgICAgIHN0cmljdE51bGxIYW5kbGluZzogdHlwZW9mIG9wdHMuc3RyaWN0TnVsbEhhbmRsaW5nID09PSAnYm9vbGVhbicgPyBvcHRzLnN0cmljdE51bGxIYW5kbGluZyA6IGRlZmF1bHRzLnN0cmljdE51bGxIYW5kbGluZ1xuICAgIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIG9wdHMpIHtcbiAgICB2YXIgb2JqID0gb2JqZWN0O1xuICAgIHZhciBvcHRpb25zID0gbm9ybWFsaXplU3RyaW5naWZ5T3B0aW9ucyhvcHRzKTtcblxuICAgIHZhciBvYmpLZXlzO1xuICAgIHZhciBmaWx0ZXI7XG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbnMuZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGZpbHRlciA9IG9wdGlvbnMuZmlsdGVyO1xuICAgICAgICBvYmogPSBmaWx0ZXIoJycsIG9iaik7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KG9wdGlvbnMuZmlsdGVyKSkge1xuICAgICAgICBmaWx0ZXIgPSBvcHRpb25zLmZpbHRlcjtcbiAgICAgICAgb2JqS2V5cyA9IGZpbHRlcjtcbiAgICB9XG5cbiAgICB2YXIga2V5cyA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IG9iaiA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgdmFyIGdlbmVyYXRlQXJyYXlQcmVmaXggPSBhcnJheVByZWZpeEdlbmVyYXRvcnNbb3B0aW9ucy5hcnJheUZvcm1hdF07XG4gICAgdmFyIGNvbW1hUm91bmRUcmlwID0gZ2VuZXJhdGVBcnJheVByZWZpeCA9PT0gJ2NvbW1hJyAmJiBvcHRpb25zLmNvbW1hUm91bmRUcmlwO1xuXG4gICAgaWYgKCFvYmpLZXlzKSB7XG4gICAgICAgIG9iaktleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnNvcnQpIHtcbiAgICAgICAgb2JqS2V5cy5zb3J0KG9wdGlvbnMuc29ydCk7XG4gICAgfVxuXG4gICAgdmFyIHNpZGVDaGFubmVsID0gZ2V0U2lkZUNoYW5uZWwoKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG9iaktleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGtleSA9IG9iaktleXNbaV07XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuc2tpcE51bGxzICYmIG9ialtrZXldID09PSBudWxsKSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBwdXNoVG9BcnJheShrZXlzLCBzdHJpbmdpZnkoXG4gICAgICAgICAgICBvYmpba2V5XSxcbiAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgIGdlbmVyYXRlQXJyYXlQcmVmaXgsXG4gICAgICAgICAgICBjb21tYVJvdW5kVHJpcCxcbiAgICAgICAgICAgIG9wdGlvbnMuYWxsb3dFbXB0eUFycmF5cyxcbiAgICAgICAgICAgIG9wdGlvbnMuc3RyaWN0TnVsbEhhbmRsaW5nLFxuICAgICAgICAgICAgb3B0aW9ucy5za2lwTnVsbHMsXG4gICAgICAgICAgICBvcHRpb25zLmVuY29kZURvdEluS2V5cyxcbiAgICAgICAgICAgIG9wdGlvbnMuZW5jb2RlID8gb3B0aW9ucy5lbmNvZGVyIDogbnVsbCxcbiAgICAgICAgICAgIG9wdGlvbnMuZmlsdGVyLFxuICAgICAgICAgICAgb3B0aW9ucy5zb3J0LFxuICAgICAgICAgICAgb3B0aW9ucy5hbGxvd0RvdHMsXG4gICAgICAgICAgICBvcHRpb25zLnNlcmlhbGl6ZURhdGUsXG4gICAgICAgICAgICBvcHRpb25zLmZvcm1hdCxcbiAgICAgICAgICAgIG9wdGlvbnMuZm9ybWF0dGVyLFxuICAgICAgICAgICAgb3B0aW9ucy5lbmNvZGVWYWx1ZXNPbmx5LFxuICAgICAgICAgICAgb3B0aW9ucy5jaGFyc2V0LFxuICAgICAgICAgICAgc2lkZUNoYW5uZWxcbiAgICAgICAgKSk7XG4gICAgfVxuXG4gICAgdmFyIGpvaW5lZCA9IGtleXMuam9pbihvcHRpb25zLmRlbGltaXRlcik7XG4gICAgdmFyIHByZWZpeCA9IG9wdGlvbnMuYWRkUXVlcnlQcmVmaXggPT09IHRydWUgPyAnPycgOiAnJztcblxuICAgIGlmIChvcHRpb25zLmNoYXJzZXRTZW50aW5lbCkge1xuICAgICAgICBpZiAob3B0aW9ucy5jaGFyc2V0ID09PSAnaXNvLTg4NTktMScpIHtcbiAgICAgICAgICAgIC8vIGVuY29kZVVSSUNvbXBvbmVudCgnJiMxMDAwMzsnKSwgdGhlIFwibnVtZXJpYyBlbnRpdHlcIiByZXByZXNlbnRhdGlvbiBvZiBhIGNoZWNrbWFya1xuICAgICAgICAgICAgcHJlZml4ICs9ICd1dGY4PSUyNiUyMzEwMDAzJTNCJic7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBlbmNvZGVVUklDb21wb25lbnQoJ+KckycpXG4gICAgICAgICAgICBwcmVmaXggKz0gJ3V0Zjg9JUUyJTlDJTkzJic7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gam9pbmVkLmxlbmd0aCA+IDAgPyBwcmVmaXggKyBqb2luZWQgOiAnJztcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxudmFyIGhhcyA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5cbnZhciBkZWZhdWx0cyA9IHtcbiAgICBhbGxvd0RvdHM6IGZhbHNlLFxuICAgIGFsbG93RW1wdHlBcnJheXM6IGZhbHNlLFxuICAgIGFsbG93UHJvdG90eXBlczogZmFsc2UsXG4gICAgYWxsb3dTcGFyc2U6IGZhbHNlLFxuICAgIGFycmF5TGltaXQ6IDIwLFxuICAgIGNoYXJzZXQ6ICd1dGYtOCcsXG4gICAgY2hhcnNldFNlbnRpbmVsOiBmYWxzZSxcbiAgICBjb21tYTogZmFsc2UsXG4gICAgZGVjb2RlRG90SW5LZXlzOiBmYWxzZSxcbiAgICBkZWNvZGVyOiB1dGlscy5kZWNvZGUsXG4gICAgZGVsaW1pdGVyOiAnJicsXG4gICAgZGVwdGg6IDUsXG4gICAgZHVwbGljYXRlczogJ2NvbWJpbmUnLFxuICAgIGlnbm9yZVF1ZXJ5UHJlZml4OiBmYWxzZSxcbiAgICBpbnRlcnByZXROdW1lcmljRW50aXRpZXM6IGZhbHNlLFxuICAgIHBhcmFtZXRlckxpbWl0OiAxMDAwLFxuICAgIHBhcnNlQXJyYXlzOiB0cnVlLFxuICAgIHBsYWluT2JqZWN0czogZmFsc2UsXG4gICAgc3RyaWN0TnVsbEhhbmRsaW5nOiBmYWxzZVxufTtcblxudmFyIGludGVycHJldE51bWVyaWNFbnRpdGllcyA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoLyYjKFxcZCspOy9nLCBmdW5jdGlvbiAoJDAsIG51bWJlclN0cikge1xuICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChudW1iZXJTdHIsIDEwKSk7XG4gICAgfSk7XG59O1xuXG52YXIgcGFyc2VBcnJheVZhbHVlID0gZnVuY3Rpb24gKHZhbCwgb3B0aW9ucykge1xuICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgJiYgb3B0aW9ucy5jb21tYSAmJiB2YWwuaW5kZXhPZignLCcpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHZhbC5zcGxpdCgnLCcpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWw7XG59O1xuXG4vLyBUaGlzIGlzIHdoYXQgYnJvd3NlcnMgd2lsbCBzdWJtaXQgd2hlbiB0aGUg4pyTIGNoYXJhY3RlciBvY2N1cnMgaW4gYW5cbi8vIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBib2R5IGFuZCB0aGUgZW5jb2Rpbmcgb2YgdGhlIHBhZ2UgY29udGFpbmluZ1xuLy8gdGhlIGZvcm0gaXMgaXNvLTg4NTktMSwgb3Igd2hlbiB0aGUgc3VibWl0dGVkIGZvcm0gaGFzIGFuIGFjY2VwdC1jaGFyc2V0XG4vLyBhdHRyaWJ1dGUgb2YgaXNvLTg4NTktMS4gUHJlc3VtYWJseSBhbHNvIHdpdGggb3RoZXIgY2hhcnNldHMgdGhhdCBkbyBub3QgY29udGFpblxuLy8gdGhlIOKckyBjaGFyYWN0ZXIsIHN1Y2ggYXMgdXMtYXNjaWkuXG52YXIgaXNvU2VudGluZWwgPSAndXRmOD0lMjYlMjMxMDAwMyUzQic7IC8vIGVuY29kZVVSSUNvbXBvbmVudCgnJiMxMDAwMzsnKVxuXG4vLyBUaGVzZSBhcmUgdGhlIHBlcmNlbnQtZW5jb2RlZCB1dGYtOCBvY3RldHMgcmVwcmVzZW50aW5nIGEgY2hlY2ttYXJrLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHJlcXVlc3QgYWN0dWFsbHkgaXMgdXRmLTggZW5jb2RlZC5cbnZhciBjaGFyc2V0U2VudGluZWwgPSAndXRmOD0lRTIlOUMlOTMnOyAvLyBlbmNvZGVVUklDb21wb25lbnQoJ+KckycpXG5cbnZhciBwYXJzZVZhbHVlcyA9IGZ1bmN0aW9uIHBhcnNlUXVlcnlTdHJpbmdWYWx1ZXMoc3RyLCBvcHRpb25zKSB7XG4gICAgdmFyIG9iaiA9IHsgX19wcm90b19fOiBudWxsIH07XG5cbiAgICB2YXIgY2xlYW5TdHIgPSBvcHRpb25zLmlnbm9yZVF1ZXJ5UHJlZml4ID8gc3RyLnJlcGxhY2UoL15cXD8vLCAnJykgOiBzdHI7XG4gICAgY2xlYW5TdHIgPSBjbGVhblN0ci5yZXBsYWNlKC8lNUIvZ2ksICdbJykucmVwbGFjZSgvJTVEL2dpLCAnXScpO1xuICAgIHZhciBsaW1pdCA9IG9wdGlvbnMucGFyYW1ldGVyTGltaXQgPT09IEluZmluaXR5ID8gdW5kZWZpbmVkIDogb3B0aW9ucy5wYXJhbWV0ZXJMaW1pdDtcbiAgICB2YXIgcGFydHMgPSBjbGVhblN0ci5zcGxpdChvcHRpb25zLmRlbGltaXRlciwgbGltaXQpO1xuICAgIHZhciBza2lwSW5kZXggPSAtMTsgLy8gS2VlcCB0cmFjayBvZiB3aGVyZSB0aGUgdXRmOCBzZW50aW5lbCB3YXMgZm91bmRcbiAgICB2YXIgaTtcblxuICAgIHZhciBjaGFyc2V0ID0gb3B0aW9ucy5jaGFyc2V0O1xuICAgIGlmIChvcHRpb25zLmNoYXJzZXRTZW50aW5lbCkge1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChwYXJ0c1tpXS5pbmRleE9mKCd1dGY4PScpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKHBhcnRzW2ldID09PSBjaGFyc2V0U2VudGluZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9ICd1dGYtOCc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJ0c1tpXSA9PT0gaXNvU2VudGluZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2hhcnNldCA9ICdpc28tODg1OS0xJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2tpcEluZGV4ID0gaTtcbiAgICAgICAgICAgICAgICBpID0gcGFydHMubGVuZ3RoOyAvLyBUaGUgZXNsaW50IHNldHRpbmdzIGRvIG5vdCBhbGxvdyBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoaSA9PT0gc2tpcEluZGV4KSB7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcGFydCA9IHBhcnRzW2ldO1xuXG4gICAgICAgIHZhciBicmFja2V0RXF1YWxzUG9zID0gcGFydC5pbmRleE9mKCddPScpO1xuICAgICAgICB2YXIgcG9zID0gYnJhY2tldEVxdWFsc1BvcyA9PT0gLTEgPyBwYXJ0LmluZGV4T2YoJz0nKSA6IGJyYWNrZXRFcXVhbHNQb3MgKyAxO1xuXG4gICAgICAgIHZhciBrZXksIHZhbDtcbiAgICAgICAgaWYgKHBvcyA9PT0gLTEpIHtcbiAgICAgICAgICAgIGtleSA9IG9wdGlvbnMuZGVjb2RlcihwYXJ0LCBkZWZhdWx0cy5kZWNvZGVyLCBjaGFyc2V0LCAna2V5Jyk7XG4gICAgICAgICAgICB2YWwgPSBvcHRpb25zLnN0cmljdE51bGxIYW5kbGluZyA/IG51bGwgOiAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGtleSA9IG9wdGlvbnMuZGVjb2RlcihwYXJ0LnNsaWNlKDAsIHBvcyksIGRlZmF1bHRzLmRlY29kZXIsIGNoYXJzZXQsICdrZXknKTtcbiAgICAgICAgICAgIHZhbCA9IHV0aWxzLm1heWJlTWFwKFxuICAgICAgICAgICAgICAgIHBhcnNlQXJyYXlWYWx1ZShwYXJ0LnNsaWNlKHBvcyArIDEpLCBvcHRpb25zKSxcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAoZW5jb2RlZFZhbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0aW9ucy5kZWNvZGVyKGVuY29kZWRWYWwsIGRlZmF1bHRzLmRlY29kZXIsIGNoYXJzZXQsICd2YWx1ZScpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsICYmIG9wdGlvbnMuaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzICYmIGNoYXJzZXQgPT09ICdpc28tODg1OS0xJykge1xuICAgICAgICAgICAgdmFsID0gaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzKHZhbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydC5pbmRleE9mKCdbXT0nKSA+IC0xKSB7XG4gICAgICAgICAgICB2YWwgPSBpc0FycmF5KHZhbCkgPyBbdmFsXSA6IHZhbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBleGlzdGluZyA9IGhhcy5jYWxsKG9iaiwga2V5KTtcbiAgICAgICAgaWYgKGV4aXN0aW5nICYmIG9wdGlvbnMuZHVwbGljYXRlcyA9PT0gJ2NvbWJpbmUnKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IHV0aWxzLmNvbWJpbmUob2JqW2tleV0sIHZhbCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIWV4aXN0aW5nIHx8IG9wdGlvbnMuZHVwbGljYXRlcyA9PT0gJ2xhc3QnKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBvYmo7XG59O1xuXG52YXIgcGFyc2VPYmplY3QgPSBmdW5jdGlvbiAoY2hhaW4sIHZhbCwgb3B0aW9ucywgdmFsdWVzUGFyc2VkKSB7XG4gICAgdmFyIGxlYWYgPSB2YWx1ZXNQYXJzZWQgPyB2YWwgOiBwYXJzZUFycmF5VmFsdWUodmFsLCBvcHRpb25zKTtcblxuICAgIGZvciAodmFyIGkgPSBjaGFpbi5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgb2JqO1xuICAgICAgICB2YXIgcm9vdCA9IGNoYWluW2ldO1xuXG4gICAgICAgIGlmIChyb290ID09PSAnW10nICYmIG9wdGlvbnMucGFyc2VBcnJheXMpIHtcbiAgICAgICAgICAgIG9iaiA9IG9wdGlvbnMuYWxsb3dFbXB0eUFycmF5cyAmJiBsZWFmID09PSAnJyA/IFtdIDogW10uY29uY2F0KGxlYWYpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb2JqID0gb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge307XG4gICAgICAgICAgICB2YXIgY2xlYW5Sb290ID0gcm9vdC5jaGFyQXQoMCkgPT09ICdbJyAmJiByb290LmNoYXJBdChyb290Lmxlbmd0aCAtIDEpID09PSAnXScgPyByb290LnNsaWNlKDEsIC0xKSA6IHJvb3Q7XG4gICAgICAgICAgICB2YXIgZGVjb2RlZFJvb3QgPSBvcHRpb25zLmRlY29kZURvdEluS2V5cyA/IGNsZWFuUm9vdC5yZXBsYWNlKC8lMkUvZywgJy4nKSA6IGNsZWFuUm9vdDtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IHBhcnNlSW50KGRlY29kZWRSb290LCAxMCk7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMucGFyc2VBcnJheXMgJiYgZGVjb2RlZFJvb3QgPT09ICcnKSB7XG4gICAgICAgICAgICAgICAgb2JqID0geyAwOiBsZWFmIH07XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgICFpc05hTihpbmRleClcbiAgICAgICAgICAgICAgICAmJiByb290ICE9PSBkZWNvZGVkUm9vdFxuICAgICAgICAgICAgICAgICYmIFN0cmluZyhpbmRleCkgPT09IGRlY29kZWRSb290XG4gICAgICAgICAgICAgICAgJiYgaW5kZXggPj0gMFxuICAgICAgICAgICAgICAgICYmIChvcHRpb25zLnBhcnNlQXJyYXlzICYmIGluZGV4IDw9IG9wdGlvbnMuYXJyYXlMaW1pdClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIG9iaiA9IFtdO1xuICAgICAgICAgICAgICAgIG9ialtpbmRleF0gPSBsZWFmO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkZWNvZGVkUm9vdCAhPT0gJ19fcHJvdG9fXycpIHtcbiAgICAgICAgICAgICAgICBvYmpbZGVjb2RlZFJvb3RdID0gbGVhZjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGxlYWYgPSBvYmo7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxlYWY7XG59O1xuXG52YXIgcGFyc2VLZXlzID0gZnVuY3Rpb24gcGFyc2VRdWVyeVN0cmluZ0tleXMoZ2l2ZW5LZXksIHZhbCwgb3B0aW9ucywgdmFsdWVzUGFyc2VkKSB7XG4gICAgaWYgKCFnaXZlbktleSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVHJhbnNmb3JtIGRvdCBub3RhdGlvbiB0byBicmFja2V0IG5vdGF0aW9uXG4gICAgdmFyIGtleSA9IG9wdGlvbnMuYWxsb3dEb3RzID8gZ2l2ZW5LZXkucmVwbGFjZSgvXFwuKFteLltdKykvZywgJ1skMV0nKSA6IGdpdmVuS2V5O1xuXG4gICAgLy8gVGhlIHJlZ2V4IGNodW5rc1xuXG4gICAgdmFyIGJyYWNrZXRzID0gLyhcXFtbXltcXF1dKl0pLztcbiAgICB2YXIgY2hpbGQgPSAvKFxcW1teW1xcXV0qXSkvZztcblxuICAgIC8vIEdldCB0aGUgcGFyZW50XG5cbiAgICB2YXIgc2VnbWVudCA9IG9wdGlvbnMuZGVwdGggPiAwICYmIGJyYWNrZXRzLmV4ZWMoa2V5KTtcbiAgICB2YXIgcGFyZW50ID0gc2VnbWVudCA/IGtleS5zbGljZSgwLCBzZWdtZW50LmluZGV4KSA6IGtleTtcblxuICAgIC8vIFN0YXNoIHRoZSBwYXJlbnQgaWYgaXQgZXhpc3RzXG5cbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGlmIChwYXJlbnQpIHtcbiAgICAgICAgLy8gSWYgd2UgYXJlbid0IHVzaW5nIHBsYWluIG9iamVjdHMsIG9wdGlvbmFsbHkgcHJlZml4IGtleXMgdGhhdCB3b3VsZCBvdmVyd3JpdGUgb2JqZWN0IHByb3RvdHlwZSBwcm9wZXJ0aWVzXG4gICAgICAgIGlmICghb3B0aW9ucy5wbGFpbk9iamVjdHMgJiYgaGFzLmNhbGwoT2JqZWN0LnByb3RvdHlwZSwgcGFyZW50KSkge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zLmFsbG93UHJvdG90eXBlcykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGtleXMucHVzaChwYXJlbnQpO1xuICAgIH1cblxuICAgIC8vIExvb3AgdGhyb3VnaCBjaGlsZHJlbiBhcHBlbmRpbmcgdG8gdGhlIGFycmF5IHVudGlsIHdlIGhpdCBkZXB0aFxuXG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChvcHRpb25zLmRlcHRoID4gMCAmJiAoc2VnbWVudCA9IGNoaWxkLmV4ZWMoa2V5KSkgIT09IG51bGwgJiYgaSA8IG9wdGlvbnMuZGVwdGgpIHtcbiAgICAgICAgaSArPSAxO1xuICAgICAgICBpZiAoIW9wdGlvbnMucGxhaW5PYmplY3RzICYmIGhhcy5jYWxsKE9iamVjdC5wcm90b3R5cGUsIHNlZ21lbnRbMV0uc2xpY2UoMSwgLTEpKSkge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25zLmFsbG93UHJvdG90eXBlcykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBrZXlzLnB1c2goc2VnbWVudFsxXSk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUncyBhIHJlbWFpbmRlciwganVzdCBhZGQgd2hhdGV2ZXIgaXMgbGVmdFxuXG4gICAgaWYgKHNlZ21lbnQpIHtcbiAgICAgICAga2V5cy5wdXNoKCdbJyArIGtleS5zbGljZShzZWdtZW50LmluZGV4KSArICddJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhcnNlT2JqZWN0KGtleXMsIHZhbCwgb3B0aW9ucywgdmFsdWVzUGFyc2VkKTtcbn07XG5cbnZhciBub3JtYWxpemVQYXJzZU9wdGlvbnMgPSBmdW5jdGlvbiBub3JtYWxpemVQYXJzZU9wdGlvbnMob3B0cykge1xuICAgIGlmICghb3B0cykge1xuICAgICAgICByZXR1cm4gZGVmYXVsdHM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzLmFsbG93RW1wdHlBcnJheXMgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBvcHRzLmFsbG93RW1wdHlBcnJheXMgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdgYWxsb3dFbXB0eUFycmF5c2Agb3B0aW9uIGNhbiBvbmx5IGJlIGB0cnVlYCBvciBgZmFsc2VgLCB3aGVuIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzLmRlY29kZURvdEluS2V5cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG9wdHMuZGVjb2RlRG90SW5LZXlzICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYGRlY29kZURvdEluS2V5c2Agb3B0aW9uIGNhbiBvbmx5IGJlIGB0cnVlYCBvciBgZmFsc2VgLCB3aGVuIHByb3ZpZGVkJyk7XG4gICAgfVxuXG4gICAgaWYgKG9wdHMuZGVjb2RlciAhPT0gbnVsbCAmJiB0eXBlb2Ygb3B0cy5kZWNvZGVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygb3B0cy5kZWNvZGVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0RlY29kZXIgaGFzIHRvIGJlIGEgZnVuY3Rpb24uJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvcHRzLmNoYXJzZXQgIT09ICd1bmRlZmluZWQnICYmIG9wdHMuY2hhcnNldCAhPT0gJ3V0Zi04JyAmJiBvcHRzLmNoYXJzZXQgIT09ICdpc28tODg1OS0xJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgY2hhcnNldCBvcHRpb24gbXVzdCBiZSBlaXRoZXIgdXRmLTgsIGlzby04ODU5LTEsIG9yIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICB2YXIgY2hhcnNldCA9IHR5cGVvZiBvcHRzLmNoYXJzZXQgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdHMuY2hhcnNldCA6IG9wdHMuY2hhcnNldDtcblxuICAgIHZhciBkdXBsaWNhdGVzID0gdHlwZW9mIG9wdHMuZHVwbGljYXRlcyA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0cy5kdXBsaWNhdGVzIDogb3B0cy5kdXBsaWNhdGVzO1xuXG4gICAgaWYgKGR1cGxpY2F0ZXMgIT09ICdjb21iaW5lJyAmJiBkdXBsaWNhdGVzICE9PSAnZmlyc3QnICYmIGR1cGxpY2F0ZXMgIT09ICdsYXN0Jykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgZHVwbGljYXRlcyBvcHRpb24gbXVzdCBiZSBlaXRoZXIgY29tYmluZSwgZmlyc3QsIG9yIGxhc3QnKTtcbiAgICB9XG5cbiAgICB2YXIgYWxsb3dEb3RzID0gdHlwZW9mIG9wdHMuYWxsb3dEb3RzID09PSAndW5kZWZpbmVkJyA/IG9wdHMuZGVjb2RlRG90SW5LZXlzID09PSB0cnVlID8gdHJ1ZSA6IGRlZmF1bHRzLmFsbG93RG90cyA6ICEhb3B0cy5hbGxvd0RvdHM7XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBhbGxvd0RvdHM6IGFsbG93RG90cyxcbiAgICAgICAgYWxsb3dFbXB0eUFycmF5czogdHlwZW9mIG9wdHMuYWxsb3dFbXB0eUFycmF5cyA9PT0gJ2Jvb2xlYW4nID8gISFvcHRzLmFsbG93RW1wdHlBcnJheXMgOiBkZWZhdWx0cy5hbGxvd0VtcHR5QXJyYXlzLFxuICAgICAgICBhbGxvd1Byb3RvdHlwZXM6IHR5cGVvZiBvcHRzLmFsbG93UHJvdG90eXBlcyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5hbGxvd1Byb3RvdHlwZXMgOiBkZWZhdWx0cy5hbGxvd1Byb3RvdHlwZXMsXG4gICAgICAgIGFsbG93U3BhcnNlOiB0eXBlb2Ygb3B0cy5hbGxvd1NwYXJzZSA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5hbGxvd1NwYXJzZSA6IGRlZmF1bHRzLmFsbG93U3BhcnNlLFxuICAgICAgICBhcnJheUxpbWl0OiB0eXBlb2Ygb3B0cy5hcnJheUxpbWl0ID09PSAnbnVtYmVyJyA/IG9wdHMuYXJyYXlMaW1pdCA6IGRlZmF1bHRzLmFycmF5TGltaXQsXG4gICAgICAgIGNoYXJzZXQ6IGNoYXJzZXQsXG4gICAgICAgIGNoYXJzZXRTZW50aW5lbDogdHlwZW9mIG9wdHMuY2hhcnNldFNlbnRpbmVsID09PSAnYm9vbGVhbicgPyBvcHRzLmNoYXJzZXRTZW50aW5lbCA6IGRlZmF1bHRzLmNoYXJzZXRTZW50aW5lbCxcbiAgICAgICAgY29tbWE6IHR5cGVvZiBvcHRzLmNvbW1hID09PSAnYm9vbGVhbicgPyBvcHRzLmNvbW1hIDogZGVmYXVsdHMuY29tbWEsXG4gICAgICAgIGRlY29kZURvdEluS2V5czogdHlwZW9mIG9wdHMuZGVjb2RlRG90SW5LZXlzID09PSAnYm9vbGVhbicgPyBvcHRzLmRlY29kZURvdEluS2V5cyA6IGRlZmF1bHRzLmRlY29kZURvdEluS2V5cyxcbiAgICAgICAgZGVjb2RlcjogdHlwZW9mIG9wdHMuZGVjb2RlciA9PT0gJ2Z1bmN0aW9uJyA/IG9wdHMuZGVjb2RlciA6IGRlZmF1bHRzLmRlY29kZXIsXG4gICAgICAgIGRlbGltaXRlcjogdHlwZW9mIG9wdHMuZGVsaW1pdGVyID09PSAnc3RyaW5nJyB8fCB1dGlscy5pc1JlZ0V4cChvcHRzLmRlbGltaXRlcikgPyBvcHRzLmRlbGltaXRlciA6IGRlZmF1bHRzLmRlbGltaXRlcixcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWltcGxpY2l0LWNvZXJjaW9uLCBuby1leHRyYS1wYXJlbnNcbiAgICAgICAgZGVwdGg6ICh0eXBlb2Ygb3B0cy5kZXB0aCA9PT0gJ251bWJlcicgfHwgb3B0cy5kZXB0aCA9PT0gZmFsc2UpID8gK29wdHMuZGVwdGggOiBkZWZhdWx0cy5kZXB0aCxcbiAgICAgICAgZHVwbGljYXRlczogZHVwbGljYXRlcyxcbiAgICAgICAgaWdub3JlUXVlcnlQcmVmaXg6IG9wdHMuaWdub3JlUXVlcnlQcmVmaXggPT09IHRydWUsXG4gICAgICAgIGludGVycHJldE51bWVyaWNFbnRpdGllczogdHlwZW9mIG9wdHMuaW50ZXJwcmV0TnVtZXJpY0VudGl0aWVzID09PSAnYm9vbGVhbicgPyBvcHRzLmludGVycHJldE51bWVyaWNFbnRpdGllcyA6IGRlZmF1bHRzLmludGVycHJldE51bWVyaWNFbnRpdGllcyxcbiAgICAgICAgcGFyYW1ldGVyTGltaXQ6IHR5cGVvZiBvcHRzLnBhcmFtZXRlckxpbWl0ID09PSAnbnVtYmVyJyA/IG9wdHMucGFyYW1ldGVyTGltaXQgOiBkZWZhdWx0cy5wYXJhbWV0ZXJMaW1pdCxcbiAgICAgICAgcGFyc2VBcnJheXM6IG9wdHMucGFyc2VBcnJheXMgIT09IGZhbHNlLFxuICAgICAgICBwbGFpbk9iamVjdHM6IHR5cGVvZiBvcHRzLnBsYWluT2JqZWN0cyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy5wbGFpbk9iamVjdHMgOiBkZWZhdWx0cy5wbGFpbk9iamVjdHMsXG4gICAgICAgIHN0cmljdE51bGxIYW5kbGluZzogdHlwZW9mIG9wdHMuc3RyaWN0TnVsbEhhbmRsaW5nID09PSAnYm9vbGVhbicgPyBvcHRzLnN0cmljdE51bGxIYW5kbGluZyA6IGRlZmF1bHRzLnN0cmljdE51bGxIYW5kbGluZ1xuICAgIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIsIG9wdHMpIHtcbiAgICB2YXIgb3B0aW9ucyA9IG5vcm1hbGl6ZVBhcnNlT3B0aW9ucyhvcHRzKTtcblxuICAgIGlmIChzdHIgPT09ICcnIHx8IHN0ciA9PT0gbnVsbCB8fCB0eXBlb2Ygc3RyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5wbGFpbk9iamVjdHMgPyBPYmplY3QuY3JlYXRlKG51bGwpIDoge307XG4gICAgfVxuXG4gICAgdmFyIHRlbXBPYmogPSB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyA/IHBhcnNlVmFsdWVzKHN0ciwgb3B0aW9ucykgOiBzdHI7XG4gICAgdmFyIG9iaiA9IG9wdGlvbnMucGxhaW5PYmplY3RzID8gT2JqZWN0LmNyZWF0ZShudWxsKSA6IHt9O1xuXG4gICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBrZXlzIGFuZCBzZXR1cCB0aGUgbmV3IG9iamVjdFxuXG4gICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyh0ZW1wT2JqKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgIHZhciBuZXdPYmogPSBwYXJzZUtleXMoa2V5LCB0ZW1wT2JqW2tleV0sIG9wdGlvbnMsIHR5cGVvZiBzdHIgPT09ICdzdHJpbmcnKTtcbiAgICAgICAgb2JqID0gdXRpbHMubWVyZ2Uob2JqLCBuZXdPYmosIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmFsbG93U3BhcnNlID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuXG4gICAgcmV0dXJuIHV0aWxzLmNvbXBhY3Qob2JqKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBzdHJpbmdpZnkgPSByZXF1aXJlKCcuL3N0cmluZ2lmeScpO1xudmFyIHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZScpO1xudmFyIGZvcm1hdHMgPSByZXF1aXJlKCcuL2Zvcm1hdHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgZm9ybWF0czogZm9ybWF0cyxcbiAgICBwYXJzZTogcGFyc2UsXG4gICAgc3RyaW5naWZ5OiBzdHJpbmdpZnlcbn07XG4iLCIvL1xuLy8gVEhJUyBGSUxFIElTIEFVVE9NQVRJQ0FMTFkgR0VORVJBVEVEISBETyBOT1QgRURJVCBCWSBIQU5EIVxuLy9cbjtcbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gICAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnXG4gICAgICAgID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KClcbiAgICAgICAgOiB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWRcbiAgICAgICAgICAgID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICAgICAgICAgIC8vIGNmLiBodHRwczovL2dpdGh1Yi5jb20vZGFua29nYWkvanMtYmFzZTY0L2lzc3Vlcy8xMTlcbiAgICAgICAgICAgIChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgLy8gZXhpc3RpbmcgdmVyc2lvbiBmb3Igbm9Db25mbGljdCgpXG4gICAgICAgICAgICAgICAgdmFyIF9CYXNlNjQgPSBnbG9iYWwuQmFzZTY0O1xuICAgICAgICAgICAgICAgIHZhciBnQmFzZTY0ID0gZmFjdG9yeSgpO1xuICAgICAgICAgICAgICAgIGdCYXNlNjQubm9Db25mbGljdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLkJhc2U2NCA9IF9CYXNlNjQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBnQmFzZTY0O1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgaWYgKGdsb2JhbC5NZXRlb3IpIHsgLy8gTWV0ZW9yLmpzXG4gICAgICAgICAgICAgICAgICAgIEJhc2U2NCA9IGdCYXNlNjQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGdsb2JhbC5CYXNlNjQgPSBnQmFzZTY0O1xuICAgICAgICAgICAgfSkoKTtcbn0oKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJyA/IHNlbGZcbiAgICA6IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93XG4gICAgICAgIDogdHlwZW9mIGdsb2JhbCAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxcbiAgICAgICAgICAgIDogdGhpcyksIGZ1bmN0aW9uICgpIHtcbiAgICAndXNlIHN0cmljdCc7XG4gICAgLyoqXG4gICAgICogIGJhc2U2NC50c1xuICAgICAqXG4gICAgICogIExpY2Vuc2VkIHVuZGVyIHRoZSBCU0QgMy1DbGF1c2UgTGljZW5zZS5cbiAgICAgKiAgICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvQlNELTMtQ2xhdXNlXG4gICAgICpcbiAgICAgKiAgUmVmZXJlbmNlczpcbiAgICAgKiAgICBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0Jhc2U2NFxuICAgICAqXG4gICAgICogQGF1dGhvciBEYW4gS29nYWkgKGh0dHBzOi8vZ2l0aHViLmNvbS9kYW5rb2dhaSlcbiAgICAgKi9cbiAgICB2YXIgdmVyc2lvbiA9ICczLjcuNyc7XG4gICAgLyoqXG4gICAgICogQGRlcHJlY2F0ZWQgdXNlIGxvd2VyY2FzZSBgdmVyc2lvbmAuXG4gICAgICovXG4gICAgdmFyIFZFUlNJT04gPSB2ZXJzaW9uO1xuICAgIHZhciBfaGFzQnVmZmVyID0gdHlwZW9mIEJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJztcbiAgICB2YXIgX1REID0gdHlwZW9mIFRleHREZWNvZGVyID09PSAnZnVuY3Rpb24nID8gbmV3IFRleHREZWNvZGVyKCkgOiB1bmRlZmluZWQ7XG4gICAgdmFyIF9URSA9IHR5cGVvZiBUZXh0RW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBUZXh0RW5jb2RlcigpIDogdW5kZWZpbmVkO1xuICAgIHZhciBiNjRjaCA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSc7XG4gICAgdmFyIGI2NGNocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGI2NGNoKTtcbiAgICB2YXIgYjY0dGFiID0gKGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHZhciB0YWIgPSB7fTtcbiAgICAgICAgYS5mb3JFYWNoKGZ1bmN0aW9uIChjLCBpKSB7IHJldHVybiB0YWJbY10gPSBpOyB9KTtcbiAgICAgICAgcmV0dXJuIHRhYjtcbiAgICB9KShiNjRjaHMpO1xuICAgIHZhciBiNjRyZSA9IC9eKD86W0EtWmEtelxcZCtcXC9dezR9KSo/KD86W0EtWmEtelxcZCtcXC9dezJ9KD86PT0pP3xbQS1aYS16XFxkK1xcL117M309Pyk/JC87XG4gICAgdmFyIF9mcm9tQ0MgPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmJpbmQoU3RyaW5nKTtcbiAgICB2YXIgX1U4QWZyb20gPSB0eXBlb2YgVWludDhBcnJheS5mcm9tID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gVWludDhBcnJheS5mcm9tLmJpbmQoVWludDhBcnJheSlcbiAgICAgICAgOiBmdW5jdGlvbiAoaXQpIHsgcmV0dXJuIG5ldyBVaW50OEFycmF5KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGl0LCAwKSk7IH07XG4gICAgdmFyIF9ta1VyaVNhZmUgPSBmdW5jdGlvbiAoc3JjKSB7IHJldHVybiBzcmNcbiAgICAgICAgLnJlcGxhY2UoLz0vZywgJycpLnJlcGxhY2UoL1srXFwvXS9nLCBmdW5jdGlvbiAobTApIHsgcmV0dXJuIG0wID09ICcrJyA/ICctJyA6ICdfJzsgfSk7IH07XG4gICAgdmFyIF90aWR5QjY0ID0gZnVuY3Rpb24gKHMpIHsgcmV0dXJuIHMucmVwbGFjZSgvW15BLVphLXowLTlcXCtcXC9dL2csICcnKTsgfTtcbiAgICAvKipcbiAgICAgKiBwb2x5ZmlsbCB2ZXJzaW9uIG9mIGBidG9hYFxuICAgICAqL1xuICAgIHZhciBidG9hUG9seWZpbGwgPSBmdW5jdGlvbiAoYmluKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdwb2x5ZmlsbGVkJyk7XG4gICAgICAgIHZhciB1MzIsIGMwLCBjMSwgYzIsIGFzYyA9ICcnO1xuICAgICAgICB2YXIgcGFkID0gYmluLmxlbmd0aCAlIDM7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYmluLmxlbmd0aDspIHtcbiAgICAgICAgICAgIGlmICgoYzAgPSBiaW4uY2hhckNvZGVBdChpKyspKSA+IDI1NSB8fFxuICAgICAgICAgICAgICAgIChjMSA9IGJpbi5jaGFyQ29kZUF0KGkrKykpID4gMjU1IHx8XG4gICAgICAgICAgICAgICAgKGMyID0gYmluLmNoYXJDb2RlQXQoaSsrKSkgPiAyNTUpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBjaGFyYWN0ZXIgZm91bmQnKTtcbiAgICAgICAgICAgIHUzMiA9IChjMCA8PCAxNikgfCAoYzEgPDwgOCkgfCBjMjtcbiAgICAgICAgICAgIGFzYyArPSBiNjRjaHNbdTMyID4+IDE4ICYgNjNdXG4gICAgICAgICAgICAgICAgKyBiNjRjaHNbdTMyID4+IDEyICYgNjNdXG4gICAgICAgICAgICAgICAgKyBiNjRjaHNbdTMyID4+IDYgJiA2M11cbiAgICAgICAgICAgICAgICArIGI2NGNoc1t1MzIgJiA2M107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhZCA/IGFzYy5zbGljZSgwLCBwYWQgLSAzKSArIFwiPT09XCIuc3Vic3RyaW5nKHBhZCkgOiBhc2M7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBkb2VzIHdoYXQgYHdpbmRvdy5idG9hYCBvZiB3ZWIgYnJvd3NlcnMgZG8uXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGJpbiBiaW5hcnkgc3RyaW5nXG4gICAgICogQHJldHVybnMge3N0cmluZ30gQmFzZTY0LWVuY29kZWQgc3RyaW5nXG4gICAgICovXG4gICAgdmFyIF9idG9hID0gdHlwZW9mIGJ0b2EgPT09ICdmdW5jdGlvbicgPyBmdW5jdGlvbiAoYmluKSB7IHJldHVybiBidG9hKGJpbik7IH1cbiAgICAgICAgOiBfaGFzQnVmZmVyID8gZnVuY3Rpb24gKGJpbikgeyByZXR1cm4gQnVmZmVyLmZyb20oYmluLCAnYmluYXJ5JykudG9TdHJpbmcoJ2Jhc2U2NCcpOyB9XG4gICAgICAgICAgICA6IGJ0b2FQb2x5ZmlsbDtcbiAgICB2YXIgX2Zyb21VaW50OEFycmF5ID0gX2hhc0J1ZmZlclxuICAgICAgICA/IGZ1bmN0aW9uICh1OGEpIHsgcmV0dXJuIEJ1ZmZlci5mcm9tKHU4YSkudG9TdHJpbmcoJ2Jhc2U2NCcpOyB9XG4gICAgICAgIDogZnVuY3Rpb24gKHU4YSkge1xuICAgICAgICAgICAgLy8gY2YuIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEyNzEwMDAxL2hvdy10by1jb252ZXJ0LXVpbnQ4LWFycmF5LXRvLWJhc2U2NC1lbmNvZGVkLXN0cmluZy8xMjcxMzMyNiMxMjcxMzMyNlxuICAgICAgICAgICAgdmFyIG1heGFyZ3MgPSAweDEwMDA7XG4gICAgICAgICAgICB2YXIgc3RycyA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGwgPSB1OGEubGVuZ3RoOyBpIDwgbDsgaSArPSBtYXhhcmdzKSB7XG4gICAgICAgICAgICAgICAgc3Rycy5wdXNoKF9mcm9tQ0MuYXBwbHkobnVsbCwgdThhLnN1YmFycmF5KGksIGkgKyBtYXhhcmdzKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIF9idG9hKHN0cnMuam9pbignJykpO1xuICAgICAgICB9O1xuICAgIC8qKlxuICAgICAqIGNvbnZlcnRzIGEgVWludDhBcnJheSB0byBhIEJhc2U2NCBzdHJpbmcuXG4gICAgICogQHBhcmFtIHtib29sZWFufSBbdXJsc2FmZV0gVVJMLWFuZC1maWxlbmFtZS1zYWZlIGEgbGEgUkZDNDY0OCDCpzVcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQgc3RyaW5nXG4gICAgICovXG4gICAgdmFyIGZyb21VaW50OEFycmF5ID0gZnVuY3Rpb24gKHU4YSwgdXJsc2FmZSkge1xuICAgICAgICBpZiAodXJsc2FmZSA9PT0gdm9pZCAwKSB7IHVybHNhZmUgPSBmYWxzZTsgfVxuICAgICAgICByZXR1cm4gdXJsc2FmZSA/IF9ta1VyaVNhZmUoX2Zyb21VaW50OEFycmF5KHU4YSkpIDogX2Zyb21VaW50OEFycmF5KHU4YSk7XG4gICAgfTtcbiAgICAvLyBUaGlzIHRyaWNrIGlzIGZvdW5kIGJyb2tlbiBodHRwczovL2dpdGh1Yi5jb20vZGFua29nYWkvanMtYmFzZTY0L2lzc3Vlcy8xMzBcbiAgICAvLyBjb25zdCB1dG9iID0gKHNyYzogc3RyaW5nKSA9PiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3JjKSk7XG4gICAgLy8gcmV2ZXJ0aW5nIGdvb2Qgb2xkIGZhdGlvbmVkIHJlZ2V4cFxuICAgIHZhciBjYl91dG9iID0gZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgaWYgKGMubGVuZ3RoIDwgMikge1xuICAgICAgICAgICAgdmFyIGNjID0gYy5jaGFyQ29kZUF0KDApO1xuICAgICAgICAgICAgcmV0dXJuIGNjIDwgMHg4MCA/IGNcbiAgICAgICAgICAgICAgICA6IGNjIDwgMHg4MDAgPyAoX2Zyb21DQygweGMwIHwgKGNjID4+PiA2KSlcbiAgICAgICAgICAgICAgICAgICAgKyBfZnJvbUNDKDB4ODAgfCAoY2MgJiAweDNmKSkpXG4gICAgICAgICAgICAgICAgICAgIDogKF9mcm9tQ0MoMHhlMCB8ICgoY2MgPj4+IDEyKSAmIDB4MGYpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKyBfZnJvbUNDKDB4ODAgfCAoKGNjID4+PiA2KSAmIDB4M2YpKVxuICAgICAgICAgICAgICAgICAgICAgICAgKyBfZnJvbUNDKDB4ODAgfCAoY2MgJiAweDNmKSkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFyIGNjID0gMHgxMDAwMFxuICAgICAgICAgICAgICAgICsgKGMuY2hhckNvZGVBdCgwKSAtIDB4RDgwMCkgKiAweDQwMFxuICAgICAgICAgICAgICAgICsgKGMuY2hhckNvZGVBdCgxKSAtIDB4REMwMCk7XG4gICAgICAgICAgICByZXR1cm4gKF9mcm9tQ0MoMHhmMCB8ICgoY2MgPj4+IDE4KSAmIDB4MDcpKVxuICAgICAgICAgICAgICAgICsgX2Zyb21DQygweDgwIHwgKChjYyA+Pj4gMTIpICYgMHgzZikpXG4gICAgICAgICAgICAgICAgKyBfZnJvbUNDKDB4ODAgfCAoKGNjID4+PiA2KSAmIDB4M2YpKVxuICAgICAgICAgICAgICAgICsgX2Zyb21DQygweDgwIHwgKGNjICYgMHgzZikpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdmFyIHJlX3V0b2IgPSAvW1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGRl18W15cXHgwMC1cXHg3Rl0vZztcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBzaG91bGQgaGF2ZSBiZWVuIGludGVybmFsIHVzZSBvbmx5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzcmMgVVRGLTggc3RyaW5nXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVVRGLTE2IHN0cmluZ1xuICAgICAqL1xuICAgIHZhciB1dG9iID0gZnVuY3Rpb24gKHUpIHsgcmV0dXJuIHUucmVwbGFjZShyZV91dG9iLCBjYl91dG9iKTsgfTtcbiAgICAvL1xuICAgIHZhciBfZW5jb2RlID0gX2hhc0J1ZmZlclxuICAgICAgICA/IGZ1bmN0aW9uIChzKSB7IHJldHVybiBCdWZmZXIuZnJvbShzLCAndXRmOCcpLnRvU3RyaW5nKCdiYXNlNjQnKTsgfVxuICAgICAgICA6IF9URVxuICAgICAgICAgICAgPyBmdW5jdGlvbiAocykgeyByZXR1cm4gX2Zyb21VaW50OEFycmF5KF9URS5lbmNvZGUocykpOyB9XG4gICAgICAgICAgICA6IGZ1bmN0aW9uIChzKSB7IHJldHVybiBfYnRvYSh1dG9iKHMpKTsgfTtcbiAgICAvKipcbiAgICAgKiBjb252ZXJ0cyBhIFVURi04LWVuY29kZWQgc3RyaW5nIHRvIGEgQmFzZTY0IHN0cmluZy5cbiAgICAgKiBAcGFyYW0ge2Jvb2xlYW59IFt1cmxzYWZlXSBpZiBgdHJ1ZWAgbWFrZSB0aGUgcmVzdWx0IFVSTC1zYWZlXG4gICAgICogQHJldHVybnMge3N0cmluZ30gQmFzZTY0IHN0cmluZ1xuICAgICAqL1xuICAgIHZhciBlbmNvZGUgPSBmdW5jdGlvbiAoc3JjLCB1cmxzYWZlKSB7XG4gICAgICAgIGlmICh1cmxzYWZlID09PSB2b2lkIDApIHsgdXJsc2FmZSA9IGZhbHNlOyB9XG4gICAgICAgIHJldHVybiB1cmxzYWZlXG4gICAgICAgICAgICA/IF9ta1VyaVNhZmUoX2VuY29kZShzcmMpKVxuICAgICAgICAgICAgOiBfZW5jb2RlKHNyYyk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBjb252ZXJ0cyBhIFVURi04LWVuY29kZWQgc3RyaW5nIHRvIFVSTC1zYWZlIEJhc2U2NCBSRkM0NjQ4IMKnNS5cbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBCYXNlNjQgc3RyaW5nXG4gICAgICovXG4gICAgdmFyIGVuY29kZVVSSSA9IGZ1bmN0aW9uIChzcmMpIHsgcmV0dXJuIGVuY29kZShzcmMsIHRydWUpOyB9O1xuICAgIC8vIFRoaXMgdHJpY2sgaXMgZm91bmQgYnJva2VuIGh0dHBzOi8vZ2l0aHViLmNvbS9kYW5rb2dhaS9qcy1iYXNlNjQvaXNzdWVzLzEzMFxuICAgIC8vIGNvbnN0IGJ0b3UgPSAoc3JjOiBzdHJpbmcpID0+IGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUoc3JjKSk7XG4gICAgLy8gcmV2ZXJ0aW5nIGdvb2Qgb2xkIGZhdGlvbmVkIHJlZ2V4cFxuICAgIHZhciByZV9idG91ID0gL1tcXHhDMC1cXHhERl1bXFx4ODAtXFx4QkZdfFtcXHhFMC1cXHhFRl1bXFx4ODAtXFx4QkZdezJ9fFtcXHhGMC1cXHhGN11bXFx4ODAtXFx4QkZdezN9L2c7XG4gICAgdmFyIGNiX2J0b3UgPSBmdW5jdGlvbiAoY2NjYykge1xuICAgICAgICBzd2l0Y2ggKGNjY2MubGVuZ3RoKSB7XG4gICAgICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgICAgICAgdmFyIGNwID0gKCgweDA3ICYgY2NjYy5jaGFyQ29kZUF0KDApKSA8PCAxOClcbiAgICAgICAgICAgICAgICAgICAgfCAoKDB4M2YgJiBjY2NjLmNoYXJDb2RlQXQoMSkpIDw8IDEyKVxuICAgICAgICAgICAgICAgICAgICB8ICgoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgyKSkgPDwgNilcbiAgICAgICAgICAgICAgICAgICAgfCAoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgzKSksIG9mZnNldCA9IGNwIC0gMHgxMDAwMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gKF9mcm9tQ0MoKG9mZnNldCA+Pj4gMTApICsgMHhEODAwKVxuICAgICAgICAgICAgICAgICAgICArIF9mcm9tQ0MoKG9mZnNldCAmIDB4M0ZGKSArIDB4REMwMCkpO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJvbUNDKCgoMHgwZiAmIGNjY2MuY2hhckNvZGVBdCgwKSkgPDwgMTIpXG4gICAgICAgICAgICAgICAgICAgIHwgKCgweDNmICYgY2NjYy5jaGFyQ29kZUF0KDEpKSA8PCA2KVxuICAgICAgICAgICAgICAgICAgICB8ICgweDNmICYgY2NjYy5jaGFyQ29kZUF0KDIpKSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBfZnJvbUNDKCgoMHgxZiAmIGNjY2MuY2hhckNvZGVBdCgwKSkgPDwgNilcbiAgICAgICAgICAgICAgICAgICAgfCAoMHgzZiAmIGNjY2MuY2hhckNvZGVBdCgxKSkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZCBzaG91bGQgaGF2ZSBiZWVuIGludGVybmFsIHVzZSBvbmx5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzcmMgVVRGLTE2IHN0cmluZ1xuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IFVURi04IHN0cmluZ1xuICAgICAqL1xuICAgIHZhciBidG91ID0gZnVuY3Rpb24gKGIpIHsgcmV0dXJuIGIucmVwbGFjZShyZV9idG91LCBjYl9idG91KTsgfTtcbiAgICAvKipcbiAgICAgKiBwb2x5ZmlsbCB2ZXJzaW9uIG9mIGBhdG9iYFxuICAgICAqL1xuICAgIHZhciBhdG9iUG9seWZpbGwgPSBmdW5jdGlvbiAoYXNjKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKCdwb2x5ZmlsbGVkJyk7XG4gICAgICAgIGFzYyA9IGFzYy5yZXBsYWNlKC9cXHMrL2csICcnKTtcbiAgICAgICAgaWYgKCFiNjRyZS50ZXN0KGFzYykpXG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtYWxmb3JtZWQgYmFzZTY0LicpO1xuICAgICAgICBhc2MgKz0gJz09Jy5zbGljZSgyIC0gKGFzYy5sZW5ndGggJiAzKSk7XG4gICAgICAgIHZhciB1MjQsIGJpbiA9ICcnLCByMSwgcjI7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXNjLmxlbmd0aDspIHtcbiAgICAgICAgICAgIHUyNCA9IGI2NHRhYlthc2MuY2hhckF0KGkrKyldIDw8IDE4XG4gICAgICAgICAgICAgICAgfCBiNjR0YWJbYXNjLmNoYXJBdChpKyspXSA8PCAxMlxuICAgICAgICAgICAgICAgIHwgKHIxID0gYjY0dGFiW2FzYy5jaGFyQXQoaSsrKV0pIDw8IDZcbiAgICAgICAgICAgICAgICB8IChyMiA9IGI2NHRhYlthc2MuY2hhckF0KGkrKyldKTtcbiAgICAgICAgICAgIGJpbiArPSByMSA9PT0gNjQgPyBfZnJvbUNDKHUyNCA+PiAxNiAmIDI1NSlcbiAgICAgICAgICAgICAgICA6IHIyID09PSA2NCA/IF9mcm9tQ0ModTI0ID4+IDE2ICYgMjU1LCB1MjQgPj4gOCAmIDI1NSlcbiAgICAgICAgICAgICAgICAgICAgOiBfZnJvbUNDKHUyNCA+PiAxNiAmIDI1NSwgdTI0ID4+IDggJiAyNTUsIHUyNCAmIDI1NSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJpbjtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIGRvZXMgd2hhdCBgd2luZG93LmF0b2JgIG9mIHdlYiBicm93c2VycyBkby5cbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gYXNjIEJhc2U2NC1lbmNvZGVkIHN0cmluZ1xuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9IGJpbmFyeSBzdHJpbmdcbiAgICAgKi9cbiAgICB2YXIgX2F0b2IgPSB0eXBlb2YgYXRvYiA9PT0gJ2Z1bmN0aW9uJyA/IGZ1bmN0aW9uIChhc2MpIHsgcmV0dXJuIGF0b2IoX3RpZHlCNjQoYXNjKSk7IH1cbiAgICAgICAgOiBfaGFzQnVmZmVyID8gZnVuY3Rpb24gKGFzYykgeyByZXR1cm4gQnVmZmVyLmZyb20oYXNjLCAnYmFzZTY0JykudG9TdHJpbmcoJ2JpbmFyeScpOyB9XG4gICAgICAgICAgICA6IGF0b2JQb2x5ZmlsbDtcbiAgICAvL1xuICAgIHZhciBfdG9VaW50OEFycmF5ID0gX2hhc0J1ZmZlclxuICAgICAgICA/IGZ1bmN0aW9uIChhKSB7IHJldHVybiBfVThBZnJvbShCdWZmZXIuZnJvbShhLCAnYmFzZTY0JykpOyB9XG4gICAgICAgIDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIF9VOEFmcm9tKF9hdG9iKGEpLnNwbGl0KCcnKS5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMuY2hhckNvZGVBdCgwKTsgfSkpOyB9O1xuICAgIC8qKlxuICAgICAqIGNvbnZlcnRzIGEgQmFzZTY0IHN0cmluZyB0byBhIFVpbnQ4QXJyYXkuXG4gICAgICovXG4gICAgdmFyIHRvVWludDhBcnJheSA9IGZ1bmN0aW9uIChhKSB7IHJldHVybiBfdG9VaW50OEFycmF5KF91blVSSShhKSk7IH07XG4gICAgLy9cbiAgICB2YXIgX2RlY29kZSA9IF9oYXNCdWZmZXJcbiAgICAgICAgPyBmdW5jdGlvbiAoYSkgeyByZXR1cm4gQnVmZmVyLmZyb20oYSwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCd1dGY4Jyk7IH1cbiAgICAgICAgOiBfVERcbiAgICAgICAgICAgID8gZnVuY3Rpb24gKGEpIHsgcmV0dXJuIF9URC5kZWNvZGUoX3RvVWludDhBcnJheShhKSk7IH1cbiAgICAgICAgICAgIDogZnVuY3Rpb24gKGEpIHsgcmV0dXJuIGJ0b3UoX2F0b2IoYSkpOyB9O1xuICAgIHZhciBfdW5VUkkgPSBmdW5jdGlvbiAoYSkgeyByZXR1cm4gX3RpZHlCNjQoYS5yZXBsYWNlKC9bLV9dL2csIGZ1bmN0aW9uIChtMCkgeyByZXR1cm4gbTAgPT0gJy0nID8gJysnIDogJy8nOyB9KSk7IH07XG4gICAgLyoqXG4gICAgICogY29udmVydHMgYSBCYXNlNjQgc3RyaW5nIHRvIGEgVVRGLTggc3RyaW5nLlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzcmMgQmFzZTY0IHN0cmluZy4gIEJvdGggbm9ybWFsIGFuZCBVUkwtc2FmZSBhcmUgc3VwcG9ydGVkXG4gICAgICogQHJldHVybnMge3N0cmluZ30gVVRGLTggc3RyaW5nXG4gICAgICovXG4gICAgdmFyIGRlY29kZSA9IGZ1bmN0aW9uIChzcmMpIHsgcmV0dXJuIF9kZWNvZGUoX3VuVVJJKHNyYykpOyB9O1xuICAgIC8qKlxuICAgICAqIGNoZWNrIGlmIGEgdmFsdWUgaXMgYSB2YWxpZCBCYXNlNjQgc3RyaW5nXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IHNyYyBhIHZhbHVlIHRvIGNoZWNrXG4gICAgICAqL1xuICAgIHZhciBpc1ZhbGlkID0gZnVuY3Rpb24gKHNyYykge1xuICAgICAgICBpZiAodHlwZW9mIHNyYyAhPT0gJ3N0cmluZycpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBzID0gc3JjLnJlcGxhY2UoL1xccysvZywgJycpLnJlcGxhY2UoLz17MCwyfSQvLCAnJyk7XG4gICAgICAgIHJldHVybiAhL1teXFxzMC05YS16QS1aXFwrL10vLnRlc3QocykgfHwgIS9bXlxcczAtOWEtekEtWlxcLV9dLy50ZXN0KHMpO1xuICAgIH07XG4gICAgLy9cbiAgICB2YXIgX25vRW51bSA9IGZ1bmN0aW9uICh2KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZTogdiwgZW51bWVyYWJsZTogZmFsc2UsIHdyaXRhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgfTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIGV4dGVuZCBTdHJpbmcucHJvdG90eXBlIHdpdGggcmVsZXZhbnQgbWV0aG9kc1xuICAgICAqL1xuICAgIHZhciBleHRlbmRTdHJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYWRkID0gZnVuY3Rpb24gKG5hbWUsIGJvZHkpIHsgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShTdHJpbmcucHJvdG90eXBlLCBuYW1lLCBfbm9FbnVtKGJvZHkpKTsgfTtcbiAgICAgICAgX2FkZCgnZnJvbUJhc2U2NCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGRlY29kZSh0aGlzKTsgfSk7XG4gICAgICAgIF9hZGQoJ3RvQmFzZTY0JywgZnVuY3Rpb24gKHVybHNhZmUpIHsgcmV0dXJuIGVuY29kZSh0aGlzLCB1cmxzYWZlKTsgfSk7XG4gICAgICAgIF9hZGQoJ3RvQmFzZTY0VVJJJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gZW5jb2RlKHRoaXMsIHRydWUpOyB9KTtcbiAgICAgICAgX2FkZCgndG9CYXNlNjRVUkwnLCBmdW5jdGlvbiAoKSB7IHJldHVybiBlbmNvZGUodGhpcywgdHJ1ZSk7IH0pO1xuICAgICAgICBfYWRkKCd0b1VpbnQ4QXJyYXknLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0b1VpbnQ4QXJyYXkodGhpcyk7IH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogZXh0ZW5kIFVpbnQ4QXJyYXkucHJvdG90eXBlIHdpdGggcmVsZXZhbnQgbWV0aG9kc1xuICAgICAqL1xuICAgIHZhciBleHRlbmRVaW50OEFycmF5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2FkZCA9IGZ1bmN0aW9uIChuYW1lLCBib2R5KSB7IHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoVWludDhBcnJheS5wcm90b3R5cGUsIG5hbWUsIF9ub0VudW0oYm9keSkpOyB9O1xuICAgICAgICBfYWRkKCd0b0Jhc2U2NCcsIGZ1bmN0aW9uICh1cmxzYWZlKSB7IHJldHVybiBmcm9tVWludDhBcnJheSh0aGlzLCB1cmxzYWZlKTsgfSk7XG4gICAgICAgIF9hZGQoJ3RvQmFzZTY0VVJJJywgZnVuY3Rpb24gKCkgeyByZXR1cm4gZnJvbVVpbnQ4QXJyYXkodGhpcywgdHJ1ZSk7IH0pO1xuICAgICAgICBfYWRkKCd0b0Jhc2U2NFVSTCcsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZyb21VaW50OEFycmF5KHRoaXMsIHRydWUpOyB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIGV4dGVuZCBCdWlsdGluIHByb3RvdHlwZXMgd2l0aCByZWxldmFudCBtZXRob2RzXG4gICAgICovXG4gICAgdmFyIGV4dGVuZEJ1aWx0aW5zID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBleHRlbmRTdHJpbmcoKTtcbiAgICAgICAgZXh0ZW5kVWludDhBcnJheSgpO1xuICAgIH07XG4gICAgdmFyIGdCYXNlNjQgPSB7XG4gICAgICAgIHZlcnNpb246IHZlcnNpb24sXG4gICAgICAgIFZFUlNJT046IFZFUlNJT04sXG4gICAgICAgIGF0b2I6IF9hdG9iLFxuICAgICAgICBhdG9iUG9seWZpbGw6IGF0b2JQb2x5ZmlsbCxcbiAgICAgICAgYnRvYTogX2J0b2EsXG4gICAgICAgIGJ0b2FQb2x5ZmlsbDogYnRvYVBvbHlmaWxsLFxuICAgICAgICBmcm9tQmFzZTY0OiBkZWNvZGUsXG4gICAgICAgIHRvQmFzZTY0OiBlbmNvZGUsXG4gICAgICAgIGVuY29kZTogZW5jb2RlLFxuICAgICAgICBlbmNvZGVVUkk6IGVuY29kZVVSSSxcbiAgICAgICAgZW5jb2RlVVJMOiBlbmNvZGVVUkksXG4gICAgICAgIHV0b2I6IHV0b2IsXG4gICAgICAgIGJ0b3U6IGJ0b3UsXG4gICAgICAgIGRlY29kZTogZGVjb2RlLFxuICAgICAgICBpc1ZhbGlkOiBpc1ZhbGlkLFxuICAgICAgICBmcm9tVWludDhBcnJheTogZnJvbVVpbnQ4QXJyYXksXG4gICAgICAgIHRvVWludDhBcnJheTogdG9VaW50OEFycmF5LFxuICAgICAgICBleHRlbmRTdHJpbmc6IGV4dGVuZFN0cmluZyxcbiAgICAgICAgZXh0ZW5kVWludDhBcnJheTogZXh0ZW5kVWludDhBcnJheSxcbiAgICAgICAgZXh0ZW5kQnVpbHRpbnM6IGV4dGVuZEJ1aWx0aW5zXG4gICAgfTtcbiAgICAvL1xuICAgIC8vIGV4cG9ydCBCYXNlNjQgdG8gdGhlIG5hbWVzcGFjZVxuICAgIC8vXG4gICAgLy8gRVM1IGlzIHlldCB0byBoYXZlIE9iamVjdC5hc3NpZ24oKSB0aGF0IG1heSBtYWtlIHRyYW5zcGlsZXJzIHVuaGFwcHkuXG4gICAgLy8gZ0Jhc2U2NC5CYXNlNjQgPSBPYmplY3QuYXNzaWduKHt9LCBnQmFzZTY0KTtcbiAgICBnQmFzZTY0LkJhc2U2NCA9IHt9O1xuICAgIE9iamVjdC5rZXlzKGdCYXNlNjQpLmZvckVhY2goZnVuY3Rpb24gKGspIHsgcmV0dXJuIGdCYXNlNjQuQmFzZTY0W2tdID0gZ0Jhc2U2NFtrXTsgfSk7XG4gICAgcmV0dXJuIGdCYXNlNjQ7XG59KSk7XG4iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG52YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbnZhciBfX2dlbmVyYXRvciA9ICh0aGlzICYmIHRoaXMuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xuICAgIH1cbn07XG52YXIgX19pbXBvcnREZWZhdWx0ID0gKHRoaXMgJiYgdGhpcy5fX2ltcG9ydERlZmF1bHQpIHx8IGZ1bmN0aW9uIChtb2QpIHtcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLktpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlciA9IHZvaWQgMDtcbnZhciBmb3JtX2RhdGFfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiZm9ybS1kYXRhXCIpKTtcbnZhciBxc18xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJxc1wiKSk7XG52YXIganNfYmFzZTY0XzEgPSByZXF1aXJlKFwianMtYmFzZTY0XCIpO1xudmFyIHBsYXRmb3JtXzEgPSByZXF1aXJlKFwiLi9wbGF0Zm9ybS9cIik7XG52YXIgREVGQVVMVF9QUk9YWV9QUk9UT0NPTCA9IFwiaHR0cFwiO1xudmFyIFRIUkVTSE9MRF9BVk9JRF9SRVFVRVNUX1VSTF9UT09fTEFSR0UgPSA0MDk2O1xudmFyIEtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBLaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXIob3B0aW9ucykge1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBvcHRpb25zLmJhc2VVcmw7XG4gICAgICAgIHRoaXMuYXV0aCA9IG9wdGlvbnMuYXV0aDtcbiAgICAgICAgdGhpcy5oZWFkZXJzID0gdGhpcy5idWlsZEhlYWRlcnMoe1xuICAgICAgICAgICAgYmFzaWNBdXRoOiBvcHRpb25zLmJhc2ljQXV0aCxcbiAgICAgICAgICAgIHVzZXJBZ2VudDogb3B0aW9ucy51c2VyQWdlbnQsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoXCJodHRwc0FnZW50XCIgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgaWYgKFwiY2xpZW50Q2VydEF1dGhcIiBpbiBvcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHNwZWNpZnkgY2xpZW50Q2VydEF1dGggYWxvbmcgd2l0aCBodHRwc0FnZW50LlwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaHR0cHNBZ2VudCA9IG9wdGlvbnMuaHR0cHNBZ2VudDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChcImNsaWVudENlcnRBdXRoXCIgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgdGhpcy5jbGllbnRDZXJ0QXV0aCA9IG9wdGlvbnMuY2xpZW50Q2VydEF1dGg7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm94eSA9IG9wdGlvbnMucHJveHk7XG4gICAgICAgIHRoaXMucmVxdWVzdFRva2VuID0gbnVsbDtcbiAgICAgICAgdGhpcy5zb2NrZXRUaW1lb3V0ID0gb3B0aW9ucy5zb2NrZXRUaW1lb3V0O1xuICAgIH1cbiAgICBLaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXIucHJvdG90eXBlLmJ1aWxkID0gZnVuY3Rpb24gKG1ldGhvZCwgcGF0aCwgcGFyYW1zLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZXF1ZXN0Q29uZmlnLCBfYSwgcmVxdWVzdFVybCwgX2IsIGZvcm1EYXRhLCBfYywgX2QsIHJlcXVlc3RVcmwsIF9lLCBfZjtcbiAgICAgICAgICAgIHZhciBfZywgX2gsIF9qO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfaykge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2subGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdENvbmZpZyA9IF9fYXNzaWduKF9fYXNzaWduKF9fYXNzaWduKHsgbWV0aG9kOiBtZXRob2QsIGhlYWRlcnM6IHRoaXMuaGVhZGVycywgdXJsOiBcIlwiLmNvbmNhdCh0aGlzLmJhc2VVcmwpLmNvbmNhdChwYXRoKSB9LCAob3B0aW9ucyA/IG9wdGlvbnMgOiB7fSkpLCBwbGF0Zm9ybV8xLnBsYXRmb3JtRGVwcy5idWlsZFBsYXRmb3JtRGVwZW5kZW50Q29uZmlnKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwc0FnZW50OiB0aGlzLmh0dHBzQWdlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50Q2VydEF1dGg6IHRoaXMuY2xpZW50Q2VydEF1dGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0VGltZW91dDogdGhpcy5zb2NrZXRUaW1lb3V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgfSkpLCB7IHByb3h5OiB0aGlzLmJ1aWxkUHJveHlDb25maWcodGhpcy5wcm94eSkgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBfYSA9IG1ldGhvZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZ2V0XCI6IHJldHVybiBbMyAvKmJyZWFrKi8sIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJwb3N0XCI6IHJldHVybiBbMyAvKmJyZWFrKi8sIDRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXCJwdXRcIjogcmV0dXJuIFszIC8qYnJlYWsqLywgOF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcImRlbGV0ZVwiOiByZXR1cm4gWzMgLypicmVhayovLCAxMF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCAxMl07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmwgPSB0aGlzLmJ1aWxkUmVxdWVzdFVybChwYXRoLCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocmVxdWVzdFVybC5sZW5ndGggPiBUSFJFU0hPTERfQVZPSURfUkVRVUVTVF9VUkxfVE9PX0xBUkdFKSkgcmV0dXJuIFszIC8qYnJlYWsqLywgM107XG4gICAgICAgICAgICAgICAgICAgICAgICBfYiA9IFtfX2Fzc2lnbih7fSwgcmVxdWVzdENvbmZpZyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2cgPSB7IG1ldGhvZDogXCJwb3N0XCIsIGhlYWRlcnM6IF9fYXNzaWduKF9fYXNzaWduKHt9LCB0aGlzLmhlYWRlcnMpLCB7IFwiWC1IVFRQLU1ldGhvZC1PdmVycmlkZVwiOiBcIkdFVFwiIH0pIH07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmJ1aWxkRGF0YShwYXJhbXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gWzIgLypyZXR1cm4qLywgX19hc3NpZ24uYXBwbHkodm9pZCAwLCBfYi5jb25jYXQoWyhfZy5kYXRhID0gX2suc2VudCgpLCBfZyldKSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMiAvKnJldHVybiovLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcmVxdWVzdENvbmZpZyksIHsgdXJsOiByZXF1ZXN0VXJsIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEocGFyYW1zIGluc3RhbmNlb2YgZm9ybV9kYXRhXzEuZGVmYXVsdCkpIHJldHVybiBbMyAvKmJyZWFrKi8sIDZdO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgdGhpcy5idWlsZERhdGEocGFyYW1zKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgNTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1EYXRhID0gX2suc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIF9fYXNzaWduKF9fYXNzaWduKHt9LCByZXF1ZXN0Q29uZmlnKSwgeyBoZWFkZXJzOiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogZm9ybURhdGEuZ2V0SGVhZGVycyBkb2VzIG5vdCBleGlzdCBpbiBhIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBmb3JtRGF0YS5nZXRIZWFkZXJzID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gX19hc3NpZ24oX19hc3NpZ24oe30sIHRoaXMuaGVhZGVycyksIGZvcm1EYXRhLmdldEhlYWRlcnMoKSkgOiB0aGlzLmhlYWRlcnMsIGRhdGE6IGZvcm1EYXRhIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA2OlxuICAgICAgICAgICAgICAgICAgICAgICAgX2MgPSBbX19hc3NpZ24oe30sIHJlcXVlc3RDb25maWcpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9oID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmJ1aWxkRGF0YShwYXJhbXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA3OiByZXR1cm4gWzIgLypyZXR1cm4qLywgX19hc3NpZ24uYXBwbHkodm9pZCAwLCBfYy5jb25jYXQoWyhfaC5kYXRhID0gX2suc2VudCgpLCBfaCldKSldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgICAgICAgICAgICAgICBfZCA9IFtfX2Fzc2lnbih7fSwgcmVxdWVzdENvbmZpZyldO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2ogPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHRoaXMuYnVpbGREYXRhKHBhcmFtcyldO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDk6IHJldHVybiBbMiAvKnJldHVybiovLCBfX2Fzc2lnbi5hcHBseSh2b2lkIDAsIF9kLmNvbmNhdChbKF9qLmRhdGEgPSBfay5zZW50KCksIF9qKV0pKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgICAgICAgICAgICAgICBfZSA9IHRoaXMuYnVpbGRSZXF1ZXN0VXJsO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2YgPSBbcGF0aF07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmJ1aWxkRGF0YShwYXJhbXMpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmwgPSBfZS5hcHBseSh0aGlzLCBfZi5jb25jYXQoW19rLnNlbnQoKV0pKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcmVxdWVzdENvbmZpZyksIHsgdXJsOiByZXF1ZXN0VXJsIH0pXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJcIi5jb25jYXQobWV0aG9kLCBcIiBtZXRob2QgaXMgbm90IHN1cHBvcnRlZFwiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBfay5sYWJlbCA9IDEzO1xuICAgICAgICAgICAgICAgICAgICBjYXNlIDEzOiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyLnByb3RvdHlwZS5idWlsZFByb3h5Q29uZmlnID0gZnVuY3Rpb24gKHByb3h5Q29uZmlnKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKHByb3h5Q29uZmlnID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHByb3h5Q29uZmlnID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHZhciBwcm94eSA9IHByb3h5Q29uZmlnO1xuICAgICAgICBpZiAocHJveHkuYXV0aCAmJlxuICAgICAgICAgICAgKHByb3h5LmF1dGgudXNlcm5hbWUubGVuZ3RoID09PSAwIHx8IHByb3h5LmF1dGgucGFzc3dvcmQubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAgcHJveHkuYXV0aCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBwcm94eS5wcm90b2NvbCA9IChfYSA9IHByb3h5LnByb3RvY29sKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBERUZBVUxUX1BST1hZX1BST1RPQ09MO1xuICAgICAgICByZXR1cm4gcHJveHk7XG4gICAgfTtcbiAgICBLaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXIucHJvdG90eXBlLmJ1aWxkUmVxdWVzdFVybCA9IGZ1bmN0aW9uIChwYXRoLCBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIFwiXCIuY29uY2F0KHRoaXMuYmFzZVVybCkuY29uY2F0KHBhdGgsIFwiP1wiKS5jb25jYXQocXNfMS5kZWZhdWx0LnN0cmluZ2lmeShwYXJhbXMpKTtcbiAgICB9O1xuICAgIEtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlci5wcm90b3R5cGUuYnVpbGREYXRhID0gZnVuY3Rpb24gKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgcmVxdWVzdFRva2VuO1xuICAgICAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEodGhpcy5hdXRoLnR5cGUgPT09IFwic2Vzc2lvblwiKSkgcmV0dXJuIFszIC8qYnJlYWsqLywgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCB0aGlzLmdldFJlcXVlc3RUb2tlbigpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFRva2VuID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhcmFtcyBpbnN0YW5jZW9mIGZvcm1fZGF0YV8xLmRlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuYXBwZW5kKFwiX19SRVFVRVNUX1RPS0VOX19cIiwgcmVxdWVzdFRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgcGFyYW1zXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBfX2Fzc2lnbih7IF9fUkVRVUVTVF9UT0tFTl9fOiByZXF1ZXN0VG9rZW4gfSwgcGFyYW1zKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIFsyIC8qcmV0dXJuKi8sIHBhcmFtc107XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyLnByb3RvdHlwZS5idWlsZEhlYWRlcnMgPSBmdW5jdGlvbiAocGFyYW1zKSB7XG4gICAgICAgIHZhciBiYXNpY0F1dGggPSBwYXJhbXMuYmFzaWNBdXRoLCB1c2VyQWdlbnQgPSBwYXJhbXMudXNlckFnZW50O1xuICAgICAgICB2YXIgYmFzaWNBdXRoSGVhZGVycyA9IGJhc2ljQXV0aFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgQXV0aG9yaXphdGlvbjogXCJCYXNpYyBcIi5jb25jYXQoanNfYmFzZTY0XzEuQmFzZTY0LmVuY29kZShcIlwiLmNvbmNhdChiYXNpY0F1dGgudXNlcm5hbWUsIFwiOlwiKS5jb25jYXQoYmFzaWNBdXRoLnBhc3N3b3JkKSkpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgdmFyIHBsYXRmb3JtRGVwc0hlYWRlcnMgPSBwbGF0Zm9ybV8xLnBsYXRmb3JtRGVwcy5idWlsZEhlYWRlcnMoeyB1c2VyQWdlbnQ6IHVzZXJBZ2VudCB9KTtcbiAgICAgICAgdmFyIGNvbW1vbkhlYWRlcnMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcGxhdGZvcm1EZXBzSGVhZGVycyksIGJhc2ljQXV0aEhlYWRlcnMpO1xuICAgICAgICBzd2l0Y2ggKHRoaXMuYXV0aC50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwicGFzc3dvcmRcIjoge1xuICAgICAgICAgICAgICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY29tbW9uSGVhZGVycyksIHsgXCJYLUN5Ym96dS1BdXRob3JpemF0aW9uXCI6IGpzX2Jhc2U2NF8xLkJhc2U2NC5lbmNvZGUoXCJcIi5jb25jYXQodGhpcy5hdXRoLnVzZXJuYW1lLCBcIjpcIikuY29uY2F0KHRoaXMuYXV0aC5wYXNzd29yZCkpIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBcImFwaVRva2VuXCI6IHtcbiAgICAgICAgICAgICAgICB2YXIgYXBpVG9rZW4gPSB0aGlzLmF1dGguYXBpVG9rZW47XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoYXBpVG9rZW4pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY29tbW9uSGVhZGVycyksIHsgXCJYLUN5Ym96dS1BUEktVG9rZW5cIjogYXBpVG9rZW4uam9pbihcIixcIikgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY29tbW9uSGVhZGVycyksIHsgXCJYLUN5Ym96dS1BUEktVG9rZW5cIjogYXBpVG9rZW4gfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFwib0F1dGhUb2tlblwiOiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb21tb25IZWFkZXJzKSwgeyBBdXRob3JpemF0aW9uOiBcIkJlYXJlciBcIi5jb25jYXQodGhpcy5hdXRoLm9BdXRoVG9rZW4pIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY29tbW9uSGVhZGVycyksIHsgXCJYLVJlcXVlc3RlZC1XaXRoXCI6IFwiWE1MSHR0cFJlcXVlc3RcIiB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyLnByb3RvdHlwZS5nZXRSZXF1ZXN0VG9rZW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2IpIHtcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKF9iLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHRoaXMucmVxdWVzdFRva2VuID09PSBudWxsKSkgcmV0dXJuIFszIC8qYnJlYWsqLywgMl07XG4gICAgICAgICAgICAgICAgICAgICAgICBfYSA9IHRoaXM7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBwbGF0Zm9ybV8xLnBsYXRmb3JtRGVwcy5nZXRSZXF1ZXN0VG9rZW4oKV07XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgICAgIF9hLnJlcXVlc3RUb2tlbiA9IF9iLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9iLmxhYmVsID0gMjtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAyOiByZXR1cm4gWzIgLypyZXR1cm4qLywgdGhpcy5yZXF1ZXN0VG9rZW5dO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHJldHVybiBLaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXI7XG59KCkpO1xuZXhwb3J0cy5LaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXIgPSBLaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXI7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1LaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXIuanMubWFwIiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fcmVzdCA9ICh0aGlzICYmIHRoaXMuX19yZXN0KSB8fCBmdW5jdGlvbiAocywgZSkge1xuICAgIHZhciB0ID0ge307XG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXG4gICAgICAgIHRbcF0gPSBzW3BdO1xuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xuICAgICAgICB9XG4gICAgcmV0dXJuIHQ7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5LaW50b25lUmVzcG9uc2VIYW5kbGVyID0gdm9pZCAwO1xudmFyIGVycm9yXzEgPSByZXF1aXJlKFwiLi9lcnJvclwiKTtcbnZhciBLaW50b25lUmVzcG9uc2VIYW5kbGVyID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEtpbnRvbmVSZXNwb25zZUhhbmRsZXIoX2EpIHtcbiAgICAgICAgdmFyIGVuYWJsZUFib3J0U2VhcmNoRXJyb3IgPSBfYS5lbmFibGVBYm9ydFNlYXJjaEVycm9yO1xuICAgICAgICB0aGlzLmVuYWJsZUFib3J0U2VhcmNoRXJyb3IgPSBlbmFibGVBYm9ydFNlYXJjaEVycm9yO1xuICAgIH1cbiAgICBLaW50b25lUmVzcG9uc2VIYW5kbGVyLnByb3RvdHlwZS5oYW5kbGUgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLnRoZW4oZnVuY3Rpb24gKHJlcykgeyByZXR1cm4gX3RoaXMuaGFuZGxlU3VjY2Vzc1Jlc3BvbnNlKHJlcyk7IH0sIGZ1bmN0aW9uIChlcnJvcikgeyByZXR1cm4gX3RoaXMuaGFuZGxlRXJyb3JSZXNwb25zZShlcnJvcik7IH0pO1xuICAgIH07XG4gICAgS2ludG9uZVJlc3BvbnNlSGFuZGxlci5wcm90b3R5cGUuaGFuZGxlU3VjY2Vzc1Jlc3BvbnNlID0gZnVuY3Rpb24gKHJlc3BvbnNlKSB7XG4gICAgICAgIGlmICh0aGlzLmVuYWJsZUFib3J0U2VhcmNoRXJyb3IgJiZcbiAgICAgICAgICAgIC9GaWx0ZXIgYWJvcnRlZCBiZWNhdXNlIG9mIHRvbyBtYW55IHNlYXJjaCByZXN1bHRzLy50ZXN0KHJlc3BvbnNlLmhlYWRlcnNbXCJ4LWN5Ym96dS13YXJuaW5nXCJdKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IGVycm9yXzEuS2ludG9uZUFib3J0U2VhcmNoRXJyb3IocmVzcG9uc2UuaGVhZGVyc1tcIngtY3lib3p1LXdhcm5pbmdcIl0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXNwb25zZS5kYXRhO1xuICAgIH07XG4gICAgS2ludG9uZVJlc3BvbnNlSGFuZGxlci5wcm90b3R5cGUuaGFuZGxlRXJyb3JSZXNwb25zZSA9IGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICBpZiAoIWVycm9yLnJlc3BvbnNlKSB7XG4gICAgICAgICAgICAvLyBGSVhNRTogZmluZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMgZXJyb3JcbiAgICAgICAgICAgIGlmICgvbWFjIHZlcmlmeSBmYWlsdXJlLy50ZXN0KGVycm9yLnRvU3RyaW5nKCkpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjbGllbnRDZXJ0QXV0aCBzZXR0aW5nXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGVycm9yUmVzcG9uc2UgPSBlcnJvci5yZXNwb25zZTtcbiAgICAgICAgdmFyIGRhdGEgPSBlcnJvclJlc3BvbnNlLmRhdGEsIHJlc3QgPSBfX3Jlc3QoZXJyb3JSZXNwb25zZSwgW1wiZGF0YVwiXSk7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiXCIuY29uY2F0KHJlc3Quc3RhdHVzLCBcIjogXCIpLmNvbmNhdChyZXN0LnN0YXR1c1RleHQpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgZXJyb3JfMS5LaW50b25lUmVzdEFQSUVycm9yKF9fYXNzaWduKHsgZGF0YTogZGF0YSB9LCByZXN0KSk7XG4gICAgfTtcbiAgICByZXR1cm4gS2ludG9uZVJlc3BvbnNlSGFuZGxlcjtcbn0oKSk7XG5leHBvcnRzLktpbnRvbmVSZXNwb25zZUhhbmRsZXIgPSBLaW50b25lUmVzcG9uc2VIYW5kbGVyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9S2ludG9uZVJlc3BvbnNlSGFuZGxlci5qcy5tYXAiLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2Fzc2lnbiA9ICh0aGlzICYmIHRoaXMuX19hc3NpZ24pIHx8IGZ1bmN0aW9uICgpIHtcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24odCkge1xuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpXG4gICAgICAgICAgICAgICAgdFtwXSA9IHNbcF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHQ7XG4gICAgfTtcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLktpbnRvbmVSZXN0QVBJQ2xpZW50ID0gdm9pZCAwO1xudmFyIEJ1bGtSZXF1ZXN0Q2xpZW50XzEgPSByZXF1aXJlKFwiLi9jbGllbnQvQnVsa1JlcXVlc3RDbGllbnRcIik7XG52YXIgQXBwQ2xpZW50XzEgPSByZXF1aXJlKFwiLi9jbGllbnQvQXBwQ2xpZW50XCIpO1xudmFyIFJlY29yZENsaWVudF8xID0gcmVxdWlyZShcIi4vY2xpZW50L1JlY29yZENsaWVudFwiKTtcbnZhciBTcGFjZUNsaWVudF8xID0gcmVxdWlyZShcIi4vY2xpZW50L1NwYWNlQ2xpZW50XCIpO1xudmFyIEZpbGVDbGllbnRfMSA9IHJlcXVpcmUoXCIuL2NsaWVudC9GaWxlQ2xpZW50XCIpO1xudmFyIGh0dHBfMSA9IHJlcXVpcmUoXCIuL2h0dHAvXCIpO1xudmFyIEtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlcl8xID0gcmVxdWlyZShcIi4vS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyXCIpO1xudmFyIEtpbnRvbmVSZXNwb25zZUhhbmRsZXJfMSA9IHJlcXVpcmUoXCIuL0tpbnRvbmVSZXNwb25zZUhhbmRsZXJcIik7XG52YXIgcGxhdGZvcm1fMSA9IHJlcXVpcmUoXCIuL3BsYXRmb3JtXCIpO1xudmFyIFVuc3VwcG9ydGVkUGxhdGZvcm1FcnJvcl8xID0gcmVxdWlyZShcIi4vcGxhdGZvcm0vVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yXCIpO1xudmFyIGJ1aWxkRGlzY3JpbWluYXRlZEF1dGggPSBmdW5jdGlvbiAoYXV0aCkge1xuICAgIGlmIChcInVzZXJuYW1lXCIgaW4gYXV0aCkge1xuICAgICAgICByZXR1cm4gX19hc3NpZ24oeyB0eXBlOiBcInBhc3N3b3JkXCIgfSwgYXV0aCk7XG4gICAgfVxuICAgIGlmIChcImFwaVRva2VuXCIgaW4gYXV0aCkge1xuICAgICAgICByZXR1cm4gX19hc3NpZ24oeyB0eXBlOiBcImFwaVRva2VuXCIgfSwgYXV0aCk7XG4gICAgfVxuICAgIGlmIChcIm9BdXRoVG9rZW5cIiBpbiBhdXRoKSB7XG4gICAgICAgIHJldHVybiBfX2Fzc2lnbih7IHR5cGU6IFwib0F1dGhUb2tlblwiIH0sIGF1dGgpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICByZXR1cm4gcGxhdGZvcm1fMS5wbGF0Zm9ybURlcHMuZ2V0RGVmYXVsdEF1dGgoKTtcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKGUgaW5zdGFuY2VvZiBVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3JfMS5VbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInNlc3Npb24gYXV0aGVudGljYXRpb24gaXMgbm90IHN1cHBvcnRlZCBpbiBcIi5jb25jYXQoZS5wbGF0Zm9ybSwgXCIgZW52aXJvbm1lbnQuXCIpKTtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlO1xuICAgIH1cbn07XG52YXIgS2ludG9uZVJlc3RBUElDbGllbnQgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gS2ludG9uZVJlc3RBUElDbGllbnQob3B0aW9ucykge1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgdmFsaWRhdGVPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgICB0aGlzLmJhc2VVcmwgPSBwbGF0Zm9ybV8xLnBsYXRmb3JtRGVwc1xuICAgICAgICAgICAgLmJ1aWxkQmFzZVVybChvcHRpb25zLmJhc2VVcmwpXG4gICAgICAgICAgICAucmVwbGFjZSgvXFwvKyQvLCBcIlwiKTsgLy8gUmVtb3ZlIHRyYWlsaW5nIHNsYXNoXG4gICAgICAgIHZhciBhdXRoID0gYnVpbGREaXNjcmltaW5hdGVkQXV0aCgoX2EgPSBvcHRpb25zLmF1dGgpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHt9KTtcbiAgICAgICAgdmFyIHJlcXVlc3RDb25maWdCdWlsZGVyID0gbmV3IEtpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlcl8xLktpbnRvbmVSZXF1ZXN0Q29uZmlnQnVpbGRlcihfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb3B0aW9ucyksIHsgYmFzZVVybDogdGhpcy5iYXNlVXJsLCBhdXRoOiBhdXRoIH0pKTtcbiAgICAgICAgdmFyIHJlc3BvbnNlSGFuZGxlciA9IG5ldyBLaW50b25lUmVzcG9uc2VIYW5kbGVyXzEuS2ludG9uZVJlc3BvbnNlSGFuZGxlcih7XG4gICAgICAgICAgICBlbmFibGVBYm9ydFNlYXJjaEVycm9yOiAoX2MgPSAoX2IgPSBvcHRpb25zLmZlYXR1cmVGbGFncykgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmVuYWJsZUFib3J0U2VhcmNoRXJyb3IpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGh0dHBDbGllbnQgPSBuZXcgaHR0cF8xLkRlZmF1bHRIdHRwQ2xpZW50KHtcbiAgICAgICAgICAgIHJlc3BvbnNlSGFuZGxlcjogcmVzcG9uc2VIYW5kbGVyLFxuICAgICAgICAgICAgcmVxdWVzdENvbmZpZ0J1aWxkZXI6IHJlcXVlc3RDb25maWdCdWlsZGVyLFxuICAgICAgICB9KTtcbiAgICAgICAgdmFyIGd1ZXN0U3BhY2VJZCA9IG9wdGlvbnMuZ3Vlc3RTcGFjZUlkO1xuICAgICAgICB0aGlzLmJ1bGtSZXF1ZXN0XyA9IG5ldyBCdWxrUmVxdWVzdENsaWVudF8xLkJ1bGtSZXF1ZXN0Q2xpZW50KGh0dHBDbGllbnQsIGd1ZXN0U3BhY2VJZCk7XG4gICAgICAgIHRoaXMucmVjb3JkID0gbmV3IFJlY29yZENsaWVudF8xLlJlY29yZENsaWVudChodHRwQ2xpZW50LCB0aGlzLmJ1bGtSZXF1ZXN0XywgZ3Vlc3RTcGFjZUlkKTtcbiAgICAgICAgdGhpcy5hcHAgPSBuZXcgQXBwQ2xpZW50XzEuQXBwQ2xpZW50KGh0dHBDbGllbnQsIGd1ZXN0U3BhY2VJZCk7XG4gICAgICAgIHRoaXMuc3BhY2UgPSBuZXcgU3BhY2VDbGllbnRfMS5TcGFjZUNsaWVudChodHRwQ2xpZW50LCBndWVzdFNwYWNlSWQpO1xuICAgICAgICB0aGlzLmZpbGUgPSBuZXcgRmlsZUNsaWVudF8xLkZpbGVDbGllbnQoaHR0cENsaWVudCwgZ3Vlc3RTcGFjZUlkKTtcbiAgICB9XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEtpbnRvbmVSZXN0QVBJQ2xpZW50LCBcInZlcnNpb25cIiwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBwbGF0Zm9ybV8xLnBsYXRmb3JtRGVwcy5nZXRWZXJzaW9uKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBLaW50b25lUmVzdEFQSUNsaWVudC5wcm90b3R5cGUuZ2V0QmFzZVVybCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYmFzZVVybDtcbiAgICB9O1xuICAgIEtpbnRvbmVSZXN0QVBJQ2xpZW50LnByb3RvdHlwZS5idWxrUmVxdWVzdCA9IGZ1bmN0aW9uIChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVsa1JlcXVlc3RfLnNlbmQocGFyYW1zKTtcbiAgICB9O1xuICAgIHJldHVybiBLaW50b25lUmVzdEFQSUNsaWVudDtcbn0oKSk7XG5leHBvcnRzLktpbnRvbmVSZXN0QVBJQ2xpZW50ID0gS2ludG9uZVJlc3RBUElDbGllbnQ7XG52YXIgdmFsaWRhdGVPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICB2YWxpZGF0ZUJhc2VVcmwob3B0aW9ucy5iYXNlVXJsKTtcbiAgICB2YWxpZGF0ZUd1ZXN0U3BhY2VJZChvcHRpb25zLmd1ZXN0U3BhY2VJZCk7XG4gICAgdmFsaWRhdGVTb2NrZXRUaW1lb3V0KG9wdGlvbnMuc29ja2V0VGltZW91dCk7XG59O1xudmFyIHZhbGlkYXRlQmFzZVVybCA9IGZ1bmN0aW9uIChiYXNlVXJsKSB7XG4gICAgaWYgKGJhc2VVcmwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB1cmwgPSBuZXcgVVJMKGJhc2VVcmwpO1xuICAgIGlmICh1cmwuaG9zdG5hbWUgIT09IFwibG9jYWxob3N0XCIgJiYgdXJsLnByb3RvY29sICE9PSBcImh0dHBzOlwiKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHByb3RvY29sIG9mIGJhc2VVcmwgbXVzdCBiZSBcImh0dHBzXCIuJyk7XG4gICAgfVxufTtcbnZhciB2YWxpZGF0ZUd1ZXN0U3BhY2VJZCA9IGZ1bmN0aW9uIChndWVzdFNwYWNlSWQpIHtcbiAgICBpZiAoZ3Vlc3RTcGFjZUlkID09PSBcIlwiIHx8IGd1ZXN0U3BhY2VJZCA9PT0gbnVsbCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGd1ZXN0U3BhY2VJZDogZ290IFtcIi5jb25jYXQoZ3Vlc3RTcGFjZUlkLCBcIl1cIikpO1xuICAgIH1cbn07XG52YXIgdmFsaWRhdGVTb2NrZXRUaW1lb3V0ID0gZnVuY3Rpb24gKHNvY2tldFRpbWVvdXQpIHtcbiAgICBpZiAoc29ja2V0VGltZW91dCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIG51bWJlciA9IHBhcnNlRmxvYXQoc29ja2V0VGltZW91dC50b1N0cmluZygpKTtcbiAgICBpZiAoaXNOYU4obnVtYmVyKSB8fCBudW1iZXIgPCAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc29ja2V0VGltZW91dC4gTXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlci5cIik7XG4gICAgfVxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPUtpbnRvbmVSZXN0QVBJQ2xpZW50LmpzLm1hcCIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XG4gICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG52YXIgX19leHBvcnRTdGFyID0gKHRoaXMgJiYgdGhpcy5fX2V4cG9ydFN0YXIpIHx8IGZ1bmN0aW9uKG0sIGV4cG9ydHMpIHtcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV4cG9ydHMsIHApKSBfX2NyZWF0ZUJpbmRpbmcoZXhwb3J0cywgbSwgcCk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5LaW50b25lUmVzdEFQSUNsaWVudCA9IHZvaWQgMDtcbnZhciBwbGF0Zm9ybV8xID0gcmVxdWlyZShcIi4vcGxhdGZvcm0vXCIpO1xudmFyIGJyb3dzZXJEZXBzID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCIuL3BsYXRmb3JtL2Jyb3dzZXJcIikpO1xuKDAsIHBsYXRmb3JtXzEuaW5qZWN0UGxhdGZvcm1EZXBzKShicm93c2VyRGVwcyk7XG52YXIgS2ludG9uZVJlc3RBUElDbGllbnRfMSA9IHJlcXVpcmUoXCIuL0tpbnRvbmVSZXN0QVBJQ2xpZW50XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiS2ludG9uZVJlc3RBUElDbGllbnRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEtpbnRvbmVSZXN0QVBJQ2xpZW50XzEuS2ludG9uZVJlc3RBUElDbGllbnQ7IH0gfSk7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vZXJyb3JcIiksIGV4cG9ydHMpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguYnJvd3Nlci5qcy5tYXAiLCIvLyBzcmMvdHlwZXMvZmllbGQuZC50c1xyXG5cclxuZXhwb3J0IGVudW0gRmllbGRUeXBlIHtcclxuICAgIENBTEMgPSBcIkNBTENcIixcclxuICAgIENBVEVHT1JZID0gXCJDQVRFR09SWVwiLFxyXG4gICAgQ0hFQ0tfQk9YID0gXCJDSEVDS19CT1hcIixcclxuICAgIENSRUFURURfVElNRSA9IFwiQ1JFQVRFRF9USU1FXCIsXHJcbiAgICBDUkVBVE9SID0gXCJDUkVBVE9SXCIsXHJcbiAgICBEQVRFID0gXCJEQVRFXCIsXHJcbiAgICBEQVRFVElNRSA9IFwiREFURVRJTUVcIixcclxuICAgIERST1BfRE9XTiA9IFwiRFJPUF9ET1dOXCIsXHJcbiAgICBGSUxFID0gXCJGSUxFXCIsXHJcbiAgICBHUk9VUCA9IFwiR1JPVVBcIixcclxuICAgIEdST1VQX1NFTEVDVCA9IFwiR1JPVVBfU0VMRUNUXCIsXHJcbiAgICBMSU5LID0gXCJMSU5LXCIsXHJcbiAgICBNT0RJRklFUiA9IFwiTU9ESUZJRVJcIixcclxuICAgIE1VTFRJX0xJTkVfVEVYVCA9IFwiTVVMVElfTElORV9URVhUXCIsXHJcbiAgICBNVUxUSV9TRUxFQ1QgPSBcIk1VTFRJX1NFTEVDVFwiLFxyXG4gICAgTlVNQkVSID0gXCJOVU1CRVJcIixcclxuICAgIE9SR0FOSVpBVElPTl9TRUxFQ1QgPSBcIk9SR0FOSVpBVElPTl9TRUxFQ1RcIixcclxuICAgIFJBRElPX0JVVFRPTiA9IFwiUkFESU9fQlVUVE9OXCIsXHJcbiAgICBSRUNPUkRfTlVNQkVSID0gXCJSRUNPUkRfTlVNQkVSXCIsXHJcbiAgICBSRUZFUkVOQ0VfVEFCTEUgPSBcIlJFRkVSRU5DRV9UQUJMRVwiLFxyXG4gICAgUklDSF9URVhUID0gXCJSSUNIX1RFWFRcIixcclxuICAgIFNJTkdMRV9MSU5FX1RFWFQgPSBcIlNJTkdMRV9MSU5FX1RFWFRcIixcclxuICAgIFNUQVRVUyA9IFwiU1RBVFVTXCIsXHJcbiAgICBTVEFUVVNfQVNTSUdORUUgPSBcIlNUQVRVU19BU1NJR05FRVwiLFxyXG4gICAgU1VCVEFCTEUgPSBcIlNVQlRBQkxFXCIsXHJcbiAgICBUSU1FID0gXCJUSU1FXCIsXHJcbiAgICBVUERBVEVEX1RJTUUgPSBcIlVQREFURURfVElNRVwiLFxyXG4gICAgVVNFUl9TRUxFQ1QgPSBcIlVTRVJfU0VMRUNUXCJcclxufVxyXG5cclxuZXhwb3J0IGVudW0gQ2FsY0Zvcm1hdHtcclxuICAgIE5VTUJFUiA9IFwiTlVNQkVSXCIsXHJcbiAgICBOVU1CRVJfRElHSVQgPSBcIk5VTUJFUl9ESUdJVFwiLFxyXG4gICAgREFURVRJTUUgPSBcIkRBVEVUSU1FXCIsXHJcbiAgICBEQVRFID0gXCJEQVRFXCIsXHJcbiAgICBUSU1FID0gXCJUSU1FXCIsXHJcbiAgICBIT1VSX01JTlVURT0gXCJIT1VSX01JTlVURVwiLFxyXG4gICAgREFZX0hPVVJfTUlOVVRFPSBcIkRBWV9IT1VSX01JTlVURVwiXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRmllbGRGb3JtIHtcclxuICAgIGNvZGU6IHN0cmluZztcclxuICAgIHR5cGU6IEZpZWxkVHlwZTtcclxuICAgIHJlcXVpcmVkPzogYm9vbGVhbjtcclxuICAgIG5vTGFiZWw/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbkZvcm17XHJcbiAgICBpbmRleDogc3RyaW5nO1xyXG4gICAgbGFiZWw6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBFbnRpdHlGb3JtIHtcclxuICAgIGNvZGU6IHN0cmluZztcclxuICAgIHR5cGU6ICdVU0VSJyB8ICdPUkdBTklaQVRJT04nIHwgJ0dST1VQJyB8ICdGVU5DVElPTic7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2FsY0ZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICB1bml0Pzogc3RyaW5nO1xyXG4gICAgZXhwcmVzc2lvbj86IHN0cmluZztcclxuICAgIGZvcm1hdD86Q2FsY0Zvcm1hdDtcclxuICAgIHVuaXRQb3NpdGlvbj86ICdCRUZPUkUnIHwgJ0FGVEVSJztcclxuICAgIGRpc3BsYXlTY2FsZT86IHN0cmluZztcclxuICAgIGhpZGVFeHByZXNzaW9uPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDYXRlZ29yeUZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBlbmFibGVkPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBEYXRlRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcclxuICAgIHVuaXF1ZT86IGJvb2xlYW47XHJcbiAgICBkZWZhdWx0Tm93VmFsdWU/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERhdGV0aW1lRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcclxuICAgIHVuaXF1ZT86IGJvb2xlYW47XHJcbiAgICBkZWZhdWx0Tm93VmFsdWU/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIERlY2ltYWxGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgbWF4VmFsdWU/OiBzdHJpbmc7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XHJcbiAgICB1bml0UG9zaXRpb24/OiAnQkVGT1JFJyB8ICdBRlRFUic7XHJcbiAgICBtaW5WYWx1ZT86IHN0cmluZztcclxuICAgIHVuaXQ/OiBzdHJpbmc7XHJcbiAgICB1bmlxdWU/OiBib29sZWFuO1xyXG4gICAgZGlzcGxheVNjYWxlPzogc3RyaW5nO1xyXG4gICAgZGlnaXQ/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEVkaXRvckZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgRW50aXR5Rm9ybSB7XHJcbiAgICBjb2RlOiBzdHJpbmc7XHJcbiAgICB0eXBlOiAnVVNFUicgfCAnT1JHQU5JWkFUSU9OJyB8ICdHUk9VUCcgfCAnRlVOQ1RJT04nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpZWxkTWFwcGluZ0Zvcm0ge1xyXG4gICAgcmVsYXRlZEZpZWxkOiBzdHJpbmc7XHJcbiAgICBmaWVsZDogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEZpbGVGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgdGh1bWJuYWlsU2l6ZT86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBHcm91cEZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBvcGVuR3JvdXA/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEdyb3VwU2VsZWN0RmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGVudGl0aWVzOiBFbnRpdHlGb3JtW107XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBFbnRpdHlGb3JtW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTGlua0ZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBwcm90b2NvbD86ICdXRUInIHwgJ0NBTEwnIHwgJ01BSUwnO1xyXG4gICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xyXG4gICAgbWluTGVuZ3RoPzogc3RyaW5nO1xyXG4gICAgdW5pcXVlPzogYm9vbGVhbjtcclxuICAgIG1heExlbmd0aD86IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMb29rdXBGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgbG9va3VwOiB7XHJcbiAgICAgICAgbG9va3VwUGlja2VyRmllbGRzOiBzdHJpbmdbXTtcclxuICAgICAgICByZWxhdGVkS2V5RmllbGQ6IHN0cmluZztcclxuICAgICAgICByZWxhdGVkQXBwOiB7XHJcbiAgICAgICAgICAgIGFwcDogc3RyaW5nO1xyXG4gICAgICAgICAgICBjb2RlOiBzdHJpbmc7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBmaWVsZE1hcHBpbmdzOiBGaWVsZE1hcHBpbmdGb3JtW107XHJcbiAgICAgICAgc29ydD86IHN0cmluZztcclxuICAgICAgICBmaWx0ZXJDb25kPzogc3RyaW5nO1xyXG4gICAgfTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBNb2RpZmllZEF0RmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHt9XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE1vZGlmaWVyRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHt9XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE11bHRpcGxlQ2hlY2tGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nW107XHJcbiAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgW2tleTogc3RyaW5nXTogT3B0aW9uRm9ybTtcclxuICAgIH07XHJcbiAgICBhbGlnbj86ICdIT1JJWk9OVEFMJyB8ICdWRVJUSUNBTCc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlwbGVMaW5lVGV4dEZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlwbGVTZWxlY3RGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nW107XHJcbiAgICBvcHRpb25zOiB7XHJcbiAgICAgICAgW2tleTogc3RyaW5nXTogT3B0aW9uRm9ybTtcclxuICAgIH07XHJcbn1cclxuXHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIE9yZ2FuaXphdGlvblNlbGVjdEZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBlbnRpdGllczogRW50aXR5Rm9ybVtdO1xyXG4gICAgZGVmYXVsdFZhbHVlPzogRW50aXR5Rm9ybVtdO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlY29yZElkRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHt9XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJlZmVyZW5jZVRhYmxlRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIHJlZmVyZW5jZVRhYmxlOiB7XHJcbiAgICAgICAgY29uZGl0aW9uOiB7XHJcbiAgICAgICAgICAgIHJlbGF0ZWRGaWVsZDogc3RyaW5nO1xyXG4gICAgICAgICAgICBmaWVsZDogc3RyaW5nO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgc2l6ZT86IHN0cmluZztcclxuICAgICAgICByZWxhdGVkQXBwOiB7XHJcbiAgICAgICAgICAgIGFwcDogc3RyaW5nO1xyXG4gICAgICAgICAgICBjb2RlOiBzdHJpbmc7XHJcbiAgICAgICAgfTtcclxuICAgICAgICBzb3J0Pzogc3RyaW5nO1xyXG4gICAgICAgIGZpbHRlckNvbmQ/OiBzdHJpbmc7XHJcbiAgICAgICAgZGlzcGxheUZpZWxkczogc3RyaW5nW107XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFNpbmdsZUNoZWNrRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGRlZmF1bHRWYWx1ZT86IHN0cmluZztcclxuICAgIG9wdGlvbnM6IHtcclxuICAgICAgICBba2V5OiBzdHJpbmddOiBPcHRpb25Gb3JtO1xyXG4gICAgfTtcclxuICAgIGFsaWduPzogJ0hPUklaT05UQUwnIHwgJ1ZFUlRJQ0FMJztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTaW5nbGVMaW5lVGV4dEZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBleHByZXNzaW9uPzogc3RyaW5nO1xyXG4gICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xyXG4gICAgbWluTGVuZ3RoPzogc3RyaW5nO1xyXG4gICAgdW5pcXVlPzogYm9vbGVhbjtcclxuICAgIG1heExlbmd0aD86IHN0cmluZztcclxuICAgIGhpZGVFeHByZXNzaW9uPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTaW5nbGVTZWxlY3RGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xyXG4gICAgb3B0aW9uczoge1xyXG4gICAgICAgIFtrZXk6IHN0cmluZ106IE9wdGlvbkZvcm07XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFN0YXR1c0Fzc2lnbmVlRmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGVuYWJsZWQ/OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFN0YXR1c0ZpZWxkRm9ybSBleHRlbmRzIEZpZWxkRm9ybSB7XHJcbiAgICBlbmFibGVkPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZmllbGRzOiB7XHJcbiAgICAgICAgW2tleTogc3RyaW5nXTogQ2FsY0ZpZWxkRm9ybSB8IENhdGVnb3J5RmllbGRGb3JtIHwgRGF0ZUZpZWxkRm9ybSB8IERhdGV0aW1lRmllbGRGb3JtIHwgRGVjaW1hbEZpZWxkRm9ybSB8IEVkaXRvckZpZWxkRm9ybSB8IEZpbGVGaWVsZEZvcm0gfCBHcm91cEZpZWxkRm9ybSB8IEdyb3VwU2VsZWN0RmllbGRGb3JtIHwgTGlua0ZpZWxkRm9ybSB8IExvb2t1cEZpZWxkRm9ybSB8IE1vZGlmaWVkQXRGaWVsZEZvcm0gfCBNb2RpZmllckZpZWxkRm9ybSB8IE11bHRpcGxlQ2hlY2tGaWVsZEZvcm0gfCBNdWx0aXBsZUxpbmVUZXh0RmllbGRGb3JtIHwgTXVsdGlwbGVTZWxlY3RGaWVsZEZvcm0gfCBPcmdhbml6YXRpb25TZWxlY3RGaWVsZEZvcm0gfCBSZWNvcmRJZEZpZWxkRm9ybSB8IFJlZmVyZW5jZVRhYmxlRmllbGRGb3JtIHwgU2luZ2xlQ2hlY2tGaWVsZEZvcm0gfCBTaW5nbGVMaW5lVGV4dEZpZWxkRm9ybSB8IFNpbmdsZVNlbGVjdEZpZWxkRm9ybSB8IFN0YXR1c0Fzc2lnbmVlRmllbGRGb3JtIHwgU3RhdHVzRmllbGRGb3JtIHwgVGFibGVGb3JtIHwgVGltZUZpZWxkRm9ybSB8IFVzZXJTZWxlY3RGaWVsZEZvcm07XHJcbiAgICB9O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRpbWVGaWVsZEZvcm0gZXh0ZW5kcyBGaWVsZEZvcm0ge1xyXG4gICAgZGVmYXVsdFZhbHVlPzogc3RyaW5nO1xyXG4gICAgZGVmYXVsdE5vd1ZhbHVlPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBVc2VyU2VsZWN0RmllbGRGb3JtIGV4dGVuZHMgRmllbGRGb3JtIHtcclxuICAgIGVudGl0aWVzOiBFbnRpdHlGb3JtW107XHJcbiAgICBkZWZhdWx0VmFsdWU/OiBFbnRpdHlGb3JtW107XHJcbn0iLCJpbXBvcnQgeyBGaWVsZEZvcm0sQ2FsY0ZpZWxkRm9ybSxGaWVsZFR5cGUsIENhbGNGb3JtYXR9IGZyb20gXCIuLi90eXBlcy9GaWVsZExheW91dFwiO1xyXG5cclxuLyoqXHJcbiAqIOmbhuioiOaTjeS9nOWtkFxyXG4gKi9cclxuZXhwb3J0IGVudW0gT3BlcmF0b3Ige1xyXG4gICAgU1VNID0gXCJTVU1cIixcclxuICAgIEFWRyA9IFwiQVZHXCIsXHJcbiAgICBNQVggPSBcIk1BWFwiLFxyXG4gICAgTUlOID0gXCJNSU5cIixcclxuICAgIENPVU5UID0gXCJDT1VOVFwiLFxyXG4gICAgRklSU1QgPSBcIkZJUlNUXCIsXHJcbiAgICBMQVNUID0gXCJMQVNUXCJcclxufVxyXG5cclxuLyoqXHJcbiAqIOmbhuioiOmWouaVsFxyXG4gKi9cclxuXHJcbmV4cG9ydCBjbGFzcyBBZ2dyZWdhdG9yIHtcclxuICAgIHByaXZhdGUgZGF0YTogc3RyaW5nW107XHJcbiAgICBwcml2YXRlIGZpZWxkOiBGaWVsZEZvcm07XHJcblxyXG4gICAgY29uc3RydWN0b3IoZGF0YTogc3RyaW5nW10sIGZpZWxkOiBGaWVsZEZvcm0pIHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xyXG4gICAgICAgIHRoaXMuZmllbGQgPSBmaWVsZDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHRvTnVtYmVyQXJyYXkoKTogbnVtYmVyW10ge1xyXG4gICAgICAgIGNvbnN0IG51bWJlckFycmF5ID0gdGhpcy5kYXRhLm1hcChpdGVtID0+IHtcclxuICAgICAgICAgICAgY29uc3QgbnVtID0gTnVtYmVyKGl0ZW0pO1xyXG4gICAgICAgICAgICBpZiAoaXNOYU4obnVtKSkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDjg5XjgqPjg7zjg6vjg4njgIwke3RoaXMuZmllbGQuY29kZX0g44CN44Gv5pWw5YCk44Gr5aSJ5o+b44Gn44GN44Gq44GE44Gf44KB44CB6KiI566X44KS5a6f6KGM44Gn44GN44G+44Gb44KT44CCYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIG51bWJlckFycmF5O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3VtKCk6IG51bWJlciB8IG51bGwge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBjb25zdCBudW1iZXJBcnJheSA9IHRoaXMudG9OdW1iZXJBcnJheSgpO1xyXG4gICAgICAgIHJldHVybiBudW1iZXJBcnJheS5yZWR1Y2UoKGFjYywgdmFsKSA9PiBhY2MgKyB2YWwsIDApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXZnKCk6IG51bWJlciB8IG51bGwge1xyXG4gICAgICAgIGlmICh0aGlzLmRhdGEubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBjb25zdCBudW1iZXJBcnJheSA9IHRoaXMudG9OdW1iZXJBcnJheSgpO1xyXG4gICAgICAgIGNvbnN0IHRvdGFsID0gbnVtYmVyQXJyYXkucmVkdWNlKChhY2MsIHZhbCkgPT4gYWNjICsgdmFsLCAwKTtcclxuICAgICAgICByZXR1cm4gdG90YWwgLyBudW1iZXJBcnJheS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtYXgoKTogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLmZpZWxkLnR5cGUgPT09IEZpZWxkVHlwZS5OVU1CRVIgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlckFycmF5ID0gdGhpcy50b051bWJlckFycmF5KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCguLi5udW1iZXJBcnJheSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMuZmllbGQudHlwZT09PUZpZWxkVHlwZS5DQUxDKXtcclxuICAgICAgICAgICAgY29uc3QgY2FsY0ZpZWxkID0gdGhpcy5maWVsZCBhcyBDYWxjRmllbGRGb3JtO1xyXG4gICAgICAgICAgICBpZihjYWxjRmllbGQuZm9ybWF0PT09Q2FsY0Zvcm1hdC5OVU1CRVIgfHwgY2FsY0ZpZWxkLmZvcm1hdD09PUNhbGNGb3JtYXQuTlVNQkVSX0RJR0lUKXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlckFycmF5ID0gdGhpcy50b051bWJlckFycmF5KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoLi4ubnVtYmVyQXJyYXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEucmVkdWNlKChtYXgsIGl0ZW0pID0+IChpdGVtID4gbWF4ID8gaXRlbSA6IG1heCksIHRoaXMuZGF0YVswXSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBtaW4oKTogbnVtYmVyIHwgc3RyaW5nIHwgbnVsbCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLmZpZWxkLnR5cGUgPT09IEZpZWxkVHlwZS5OVU1CRVIgKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG51bWJlckFycmF5ID0gdGhpcy50b051bWJlckFycmF5KCk7XHJcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbiguLi5udW1iZXJBcnJheSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMuZmllbGQudHlwZT09PUZpZWxkVHlwZS5DQUxDKXtcclxuICAgICAgICAgICAgY29uc3QgY2FsY0ZpZWxkID0gdGhpcy5maWVsZCBhcyBDYWxjRmllbGRGb3JtO1xyXG4gICAgICAgICAgICBpZihjYWxjRmllbGQuZm9ybWF0PT09Q2FsY0Zvcm1hdC5OVU1CRVIgfHwgY2FsY0ZpZWxkLmZvcm1hdD09PUNhbGNGb3JtYXQuTlVNQkVSX0RJR0lUKXtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlckFycmF5ID0gdGhpcy50b051bWJlckFycmF5KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5taW4oLi4ubnVtYmVyQXJyYXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmKHRoaXMuZGF0YT09PW51bGwgfHwgdGhpcy5kYXRhLmxlbmd0aD09PTApe1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5yZWR1Y2UoKG1pbiwgaXRlbSkgPT4gKGl0ZW0gPCBtaW4gPyBpdGVtIDogbWluKSwgdGhpcy5kYXRhWzBdKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvdW50KCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBmaXJzdCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aCA/IHRoaXMuZGF0YVswXSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBsYXN0KCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEubGVuZ3RoID8gdGhpcy5kYXRhW3RoaXMuZGF0YS5sZW5ndGggLSAxXSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNhbGN1bGF0ZShvcGVyYXRvcjogT3BlcmF0b3IpOiBudW1iZXIgfCBzdHJpbmcgfCBudWxsIHtcclxuICAgICAgICAgICAgc3dpdGNoIChvcGVyYXRvcikge1xyXG4gICAgICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5TVU06XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnN1bSgpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5BVkc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmF2ZygpO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBPcGVyYXRvci5NQVg6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMubWF4KCk7XHJcbiAgICAgICAgICAgICAgICBjYXNlIE9wZXJhdG9yLk1JTjpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5taW4oKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuQ09VTlQ6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY291bnQoKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuRklSU1Q6XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZmlyc3QoKTtcclxuICAgICAgICAgICAgICAgIGNhc2UgT3BlcmF0b3IuTEFTVDpcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5sYXN0KCk7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICB9XHJcbn0iLCJpbXBvcnQge1xyXG4gIElBY3Rpb24sXHJcbiAgSUFjdGlvblJlc3VsdCxcclxuICBJQWN0aW9uTm9kZSxcclxuICBJQWN0aW9uUHJvcGVydHksXHJcbiAgSUNvbnRleHQsXHJcbn0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbmltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7S2ludG9uZVJlc3RBUElDbGllbnR9IGZyb20gJ0BraW50b25lL3Jlc3QtYXBpLWNsaWVudCc7XHJcbmltcG9ydCB7IEFnZ3JlZ2F0b3IsT3BlcmF0b3J9IGZyb20gJy4uL3V0aWwvYWdncmVnYXRlcyc7XHJcbmltcG9ydCB7IEZpZWxkRm9ybSB9IGZyb20gXCIuLi90eXBlcy9GaWVsZExheW91dFwiO1xyXG5cclxuaW50ZXJmYWNlIElEYXRhUHJvY2Vzc2luZ1Byb3BzIHtcclxuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xyXG4gIHNvdXJjZXM6IFNvdXJjZXM7XHJcbiAgY29uZGl0aW9uOiBzdHJpbmc7XHJcbiAgdmVyTmFtZT86IFZlck5hbWU7XHJcbn1cclxuXHJcbmludGVyZmFjZSBDb25kaXRpb24ge1xyXG4gIHF1ZXJ5U3RyaW5nOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBWZXJOYW1lIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgYWN0aW9uTmFtZTogc3RyaW5nO1xyXG4gIGRpc3BsYXlOYW1lOiBzdHJpbmc7XHJcbiAgdmFyczogVmFyW107XHJcbn1cclxuXHJcbmludGVyZmFjZSBWYXIge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgZmllbGQ6IEZpZWxkRm9ybTtcclxuICBsb2dpY2FsT3BlcmF0b3I6IENhbGNPcGVyYXRvcjtcclxuICB2TmFtZTogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQ2FsY09wZXJhdG9yIHtcclxuICBvcGVyYXRvcjogT3BlcmF0b3I7XHJcbiAgbGFiZWw6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIFNvdXJjZXMge1xyXG4gIGFwcDogQXBwO1xyXG4gIGZpZWxkczogRmllbGRGb3JtW107XHJcbn1cclxuXHJcbmludGVyZmFjZSBBcHAge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgbmFtZT86IHN0cmluZztcclxufVxyXG5cclxudHlwZSBSZXN1bHQgPSB7XHJcbiAgW2tleTogc3RyaW5nXToge1xyXG4gICAgdHlwZTogc3RyaW5nO1xyXG4gICAgdmFsdWU6IGFueVtdO1xyXG4gIH07XHJcbn07XHJcblxyXG50eXBlIEFueU9iamVjdCA9IHtcclxuICBba2V5OiBzdHJpbmddOiBhbnk7XHJcbn07XHJcblxyXG5leHBvcnQgY2xhc3MgRGF0YVByb2Nlc3NpbmdBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9uIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gIHByb3BzOiBJRGF0YVByb2Nlc3NpbmdQcm9wcyA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5uYW1lID0gXCLjg4fjg7zjgr/lh6bnkIZcIjtcclxuICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBbXTtcclxuICAgIHRoaXMucHJvcHMgPSB7XHJcbiAgICAgIGRpc3BsYXlOYW1lOicnLFxyXG4gICAgICBjb25kaXRpb246JycsXHJcbiAgICAgIHNvdXJjZXM6e1xyXG4gICAgICAgIGFwcDp7XHJcbiAgICAgICAgICBpZDpcIlwiXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmaWVsZHM6W11cclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBwcm9jZXNzKFxyXG4gICAgYWN0aW9uTm9kZTogSUFjdGlvbk5vZGUsXHJcbiAgICBldmVudDogYW55LFxyXG4gICAgY29udGV4dDogSUNvbnRleHRcclxuICApOiBQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBhY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG5cclxuICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElEYXRhUHJvY2Vzc2luZ1Byb3BzO1xyXG4gICAgY29uc3QgY29uZGl0aW9uID0gSlNPTi5wYXJzZSh0aGlzLnByb3BzLmNvbmRpdGlvbikgYXMgQ29uZGl0aW9uO1xyXG4gICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgY2FuTmV4dDogdHJ1ZSxcclxuICAgICAgcmVzdWx0OiBcIlwiLFxyXG4gICAgfSBhcyBJQWN0aW9uUmVzdWx0O1xyXG4gICAgdHJ5IHtcclxuICAgICAgaWYgKCF0aGlzLnByb3BzKSB7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLmdldFF1ZXJ5KGNvbmRpdGlvbi5xdWVyeVN0cmluZyxjb250ZXh0LnZhcmlhYmxlcyk7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLnNlbGVjdERhdGEocXVlcnkpO1xyXG4gICAgICBcclxuICAgICAgY29uc29sZS5sb2coXCJkYXRhIFwiLCBkYXRhKTtcclxuXHJcbiAgICAgIGlmKHRoaXMucHJvcHMudmVyTmFtZSl7XHJcbiAgICAgICAgIGNvbnN0IHZhclZhbHVlcz0gdGhpcy5wcm9wcy52ZXJOYW1lLnZhcnMucmVkdWNlKChhY2MsIGYpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgZGF0YXM9ZGF0YVtmLmZpZWxkLmNvZGVdLnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBhZ2cgPSBuZXcgQWdncmVnYXRvcihkYXRhcyxmLmZpZWxkKTtcclxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYWdnLmNhbGN1bGF0ZShmLmxvZ2ljYWxPcGVyYXRvci5vcGVyYXRvcilcclxuICAgICAgICAgICAgYWNjW2Yudk5hbWVdPXJlc3VsdDtcclxuICAgICAgICAgICAgcmV0dXJuIGFjYztcclxuICAgICAgICAgIH0sIHt9IGFzIEFueU9iamVjdCk7XHJcbiAgICAgICAgICBjb250ZXh0LnZhcmlhYmxlc1t0aGlzLnByb3BzLnZlck5hbWUubmFtZV09dmFyVmFsdWVzO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiY29udGV4dCBcIiwgY29udGV4dCk7XHJcbiAgICAgIH1cclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnRleHQuZXJyb3JzLmhhbmRsZUVycm9yKGVycm9yLGFjdGlvbk5vZGUpO1xyXG4gICAgICByZXN1bHQuY2FuTmV4dCA9IGZhbHNlO1xyXG4gICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHN0ciBcclxuICAgKiBAcGFyYW0gdmFycyBcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBnZXRRdWVyeSA9IChzdHI6IHN0cmluZywgdmFyczogYW55KSA9PiB7XHJcbiAgICBjb25zb2xlLmxvZyhzdHIpO1xyXG4gICAgY29uc3QgcmVnZXggPSAvdmFyXFwoKC4qPylcXCkvZztcclxuICAgIGxldCBtYXRjaDtcclxuICAgIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHN0cikpICE9PSBudWxsKSB7XHJcbiAgICAgIGNvbnN0IHZhck5hbWUgPSBtYXRjaFsxXTtcclxuICAgICAgaWYgKHZhck5hbWUgaW4gdmFycykge1xyXG4gICAgICAgIHN0ciA9IHN0ci5yZXBsYWNlKG1hdGNoWzBdLCB2YXJzW3Zhck5hbWVdKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOWkieaVsCR7dmFyTmFtZX3jgYzopovjgaTjgYvjgorjgb7jgZvjgpNgKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coc3RyKTtcclxuICAgIHJldHVybiBzdHI7XHJcbiAgfTtcclxuXHJcbiAgLyoqXHJcbiAgICog44OH44O844K/44KS5Y+W5b6X44GZ44KLXHJcbiAgICogQHBhcmFtIHF1ZXJ5IFxyXG4gICAqIEByZXR1cm5zIFxyXG4gICAqL1xyXG4gIHNlbGVjdERhdGEgPSBhc3luYyAoIHF1ZXJ5Pzogc3RyaW5nKSA9PiB7XHJcbiAgICBjb25zdCBhcGkgPSBuZXcgS2ludG9uZVJlc3RBUElDbGllbnQoKTtcclxuICAgIGNvbnN0IGZpZWxkcyA9IHRoaXMucHJvcHMuc291cmNlcy5maWVsZHMubWFwKChmaWVsZCk9PmZpZWxkLmNvZGUpO1xyXG4gICAgY29uc3QgcmVzcCA9ICBhd2FpdCBhcGkucmVjb3JkLmdldEFsbFJlY29yZHMoe1xyXG4gICAgICAgIGFwcDogdGhpcy5wcm9wcy5zb3VyY2VzLmFwcC5pZCxcclxuICAgICAgICBmaWVsZHM6ZmllbGRzLFxyXG4gICAgICAgIGNvbmRpdGlvbjpxdWVyeVxyXG4gICAgICB9KTtcclxuICAgICAgY29uc3QgcmVzdWx0OiBSZXN1bHQgPSB7fTtcclxuICAgICAgcmVzcC5mb3JFYWNoKChlbGVtZW50KSA9PiB7XHJcbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZWxlbWVudCkpIHtcclxuICAgICAgICAgIGlmICghcmVzdWx0W2tleV0pIHtcclxuICAgICAgICAgICAgcmVzdWx0W2tleV0gPSB7IHR5cGU6IHZhbHVlLnR5cGUsIHZhbHVlOiBbXSB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgcmVzdWx0W2tleV0udmFsdWUucHVzaCh2YWx1ZS52YWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICBcclxuICB9O1xyXG5cclxuICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdID0gdGhpcztcclxuICB9XHJcbn1cclxuXHJcbm5ldyBEYXRhUHJvY2Vzc2luZ0FjdGlvbigpOyIsImltcG9ydCB7XHJcbiAgSUFjdGlvbixcclxuICBJQWN0aW9uUmVzdWx0LFxyXG4gIElBY3Rpb25Ob2RlLFxyXG4gIElBY3Rpb25Qcm9wZXJ0eSxcclxuICBJQ29udGV4dCxcclxufSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgS2ludG9uZVJlc3RBUElDbGllbnQgfSBmcm9tIFwiQGtpbnRvbmUvcmVzdC1hcGktY2xpZW50XCI7XHJcbmltcG9ydCB7IExvb2t1cCB9IGZyb20gXCJAa2ludG9uZS9yZXN0LWFwaS1jbGllbnQvbGliL3NyYy9LaW50b25lRmllbGRzL3R5cGVzL3Byb3BlcnR5XCI7XHJcbmltcG9ydCB7IEZpZWxkRm9ybSwgRmllbGRUeXBlIH0gZnJvbSBcIi4uL3R5cGVzL0ZpZWxkTGF5b3V0XCI7XHJcbmludGVyZmFjZSBQcm9wcyB7XHJcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcclxuICBzb3VyY2VzOiBTb3VyY2VzO1xyXG4gIGRhdGFNYXBwaW5nOiBEYXRhTWFwcGluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIERhdGFNYXBwaW5nIHtcclxuICBkYXRhOiBNYXBwaW5nW107XHJcbiAgY3JlYXRlV2l0aE51bGw6IGJvb2xlYW47XHJcbn1cclxuXHJcbmludGVyZmFjZSBNYXBwaW5nIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIGZyb206IEZyb207XHJcbiAgdG86IFRvO1xyXG4gIGlzS2V5OiBib29sZWFuO1xyXG59XHJcblxyXG5cclxuXHJcbmludGVyZmFjZSBUbyB7XHJcbiAgYXBwOiBBcHA7XHJcbiAgZmllbGRzOkZpZWxkRm9ybVtdO1xyXG4gIGlzRGlhbG9nVmlzaWJsZTogYm9vbGVhbjtcclxufVxyXG5cclxuXHJcbmludGVyZmFjZSBGcm9tIHtcclxuICBzaGFyZWRUZXh0OiBzdHJpbmc7XHJcbiAgaWQ6IHN0cmluZztcclxuICBvYmplY3RUeXBlOiAndmFyaWFibGUnfCdmaWVsZCd8J3RleHQnO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgSVZhciBleHRlbmRzIEZyb217XHJcbiAgbmFtZTp7XHJcbiAgICBuYW1lOnN0cmluZztcclxuICB9XHJcbn1cclxuXHJcbmludGVyZmFjZSBJRnJvbUZpZWxkIGV4dGVuZHMgRnJvbSxGaWVsZEZvcm17XHJcblxyXG59XHJcbmludGVyZmFjZSBTb3VyY2VzIHtcclxuICBhcHA6IEFwcDtcclxufVxyXG5cclxuaW50ZXJmYWNlIEFwcCB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICBjcmVhdGVkYXRlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBEYXRhVXBkYXRlQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbiB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICBkYXRhTWFwcGluZ1Byb3BzOiBQcm9wcztcclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMubmFtZSA9IFwi44OH44O844K/5pu05pawXCI7XHJcbiAgICB0aGlzLmFjdGlvblByb3BzID0gW107XHJcbiAgICB0aGlzLmRhdGFNYXBwaW5nUHJvcHMgPSB7fSBhcyBQcm9wcztcclxuICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHByb2Nlc3MoXHJcbiAgICBhY3Rpb25Ob2RlOiBJQWN0aW9uTm9kZSxcclxuICAgIGV2ZW50OiBhbnksXHJcbiAgICBjb250ZXh0OiBJQ29udGV4dFxyXG4gICk6IFByb21pc2U8SUFjdGlvblJlc3VsdD4ge1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcyA9IGFjdGlvbk5vZGUuYWN0aW9uUHJvcHM7XHJcbiAgICB0aGlzLmRhdGFNYXBwaW5nUHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIFByb3BzO1xyXG4gICAgY29uc29sZS5sb2coY29udGV4dCk7XHJcbiAgICBsZXQgcmVzdWx0ID0ge1xyXG4gICAgICBjYW5OZXh0OiB0cnVlLFxyXG4gICAgICByZXN1bHQ6IFwiXCIsXHJcbiAgICB9IGFzIElBY3Rpb25SZXN1bHQ7XHJcbiAgICB0cnkge1xyXG4gICAgICBjb25zdCBsb29rdXBGaXhlZEZpZWxkQ29kZXMgPSBhd2FpdCBnZXRMb29rdXBGaXhlZEZpZWxkQ29kZXMoXHJcbiAgICAgICAgdGhpcy5kYXRhTWFwcGluZ1Byb3BzLnNvdXJjZXMuYXBwLmlkXHJcbiAgICAgICk7XHJcblxyXG4gICAgICAvLyBjcmVhdGVXaXRoTnVsbCDjgYzmnInlirnjgarloLTlkIjjga/jgIE0IOeVquebruOBruODkeODqeODoeODvOOCv+ODvOOCkiB0cnVlIOOBq+OBl+OBpiBkb1VwZGF0ZSDplqLmlbDjg5bjg6njg7Pjg4HjgpLlrp/ooYzjgZfjgb7jgZnjgIJcclxuICAgICAgaWYgKHRoaXMuZGF0YU1hcHBpbmdQcm9wcy5kYXRhTWFwcGluZy5jcmVhdGVXaXRoTnVsbCkge1xyXG4gICAgICAgIGF3YWl0IGRvVXBkYXRlKFxyXG4gICAgICAgICAgdGhpcy5kYXRhTWFwcGluZ1Byb3BzLmRhdGFNYXBwaW5nLmRhdGEsXHJcbiAgICAgICAgICB0aGlzLmRhdGFNYXBwaW5nUHJvcHMuc291cmNlcy5hcHAuaWQsXHJcbiAgICAgICAgICBjb250ZXh0LFxyXG4gICAgICAgICAgdHJ1ZSwgLy8g44Kt44O844GM44Gq44GE5aC05ZCI44CB44G+44Gf44Gv44Kt44O844Gn44K/44O844Ky44OD44OI44GM6KaL44Gk44GL44KJ44Gq44GE5aC05ZCI44Gr44CB44Oe44OD44OU44Oz44Kw5p2h5Lu244Gr44KI44Gj44Gm5paw44GX44GE44Os44Kz44O844OJ44KS5L2c5oiQ44GZ44KL44GL44Gp44GG44GL44KS5rG65a6a44GZ44KL44Gf44KB44Gr5L2/55So44GV44KM44G+44GZ44CCXHJcbiAgICAgICAgICBsb29rdXBGaXhlZEZpZWxkQ29kZXNcclxuICAgICAgICApO1xyXG4gICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgIC8vIOOCreODvOOBjOOBquOBhOOBqOabtOaWsOWvvuixoeOCkuWPluW+l+OBp+OBjeOBquOBhOOBn+OCgeOAgeOBk+OBruaZgueCueOBp+OBruOBv+abtOaWsOOBjOihjOOCj+OCjOOBvuOBmeOAgiBkb1VwZGF0ZSDplqLmlbDjga4gNCDnlarnm67jga7jg5Hjg6njg6Hjg7zjgr/jg7zjga8gZmFsc2Ug44Gn44GZ44CCXHJcbiAgICAgICAgdGhpcy5kYXRhTWFwcGluZ1Byb3BzLmRhdGFNYXBwaW5nLmRhdGFcclxuICAgICAgICAgIC5tYXAoKG0pID0+IG0uaXNLZXkpXHJcbiAgICAgICAgICAuZmluZCgoaXNLZXkpID0+IGlzS2V5ID09PSB0cnVlKVxyXG4gICAgICApIHtcclxuICAgICAgICBhd2FpdCBkb1VwZGF0ZShcclxuICAgICAgICAgIHRoaXMuZGF0YU1hcHBpbmdQcm9wcy5kYXRhTWFwcGluZy5kYXRhLFxyXG4gICAgICAgICAgdGhpcy5kYXRhTWFwcGluZ1Byb3BzLnNvdXJjZXMuYXBwLmlkLFxyXG4gICAgICAgICAgY29udGV4dCxcclxuICAgICAgICAgIGZhbHNlLFxyXG4gICAgICAgICAgbG9va3VwRml4ZWRGaWVsZENvZGVzXHJcbiAgICAgICAgKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBhd2FpdCBkb0NyZWF0ZShcclxuICAgICAgICAgIHRoaXMuZGF0YU1hcHBpbmdQcm9wcy5kYXRhTWFwcGluZy5kYXRhLFxyXG4gICAgICAgICAgdGhpcy5kYXRhTWFwcGluZ1Byb3BzLnNvdXJjZXMuYXBwLmlkLFxyXG4gICAgICAgICAgY29udGV4dCxcclxuICAgICAgICAgIGxvb2t1cEZpeGVkRmllbGRDb2Rlc1xyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnRleHQuZXJyb3JzLmhhbmRsZUVycm9yKGVycm9yLGFjdGlvbk5vZGUpO1xyXG4gICAgICByZXN1bHQuY2FuTmV4dCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgY29uc29sZS5sb2coXCJkYXRhTWFwcGluZ1Byb3BzXCIsIHRoaXMuZGF0YU1hcHBpbmdQcm9wcyk7XHJcblxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV0gPSB0aGlzO1xyXG4gIH1cclxufVxyXG5cclxubmV3IERhdGFVcGRhdGVBY3Rpb24oKTtcclxuXHJcbmNvbnN0IGdldENvbnRleHRWYXJCeVBhdGggPSAob2JqOiBhbnksIHBhdGg6IHN0cmluZykgPT4ge1xyXG4gIHJldHVybiBwYXRoLnNwbGl0KFwiLlwiKS5yZWR1Y2UoKG8sIGspID0+IChvIHx8IHt9KVtrXSwgb2JqKTtcclxufTtcclxuXHJcbmludGVyZmFjZSBVcGRhdGVSZWNvcmQge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgcmVjb3JkOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiB7XHJcbiAgICAgIHZhbHVlOiBhbnk7XHJcbiAgICB9O1xyXG4gIH07XHJcbn1cclxuXHJcbmNvbnN0IGNsaWVudCA9IG5ldyBLaW50b25lUmVzdEFQSUNsaWVudCgpO1xyXG5cclxuY29uc3QgZ2V0RnJvbVZhbHVlPShpdGVtOk1hcHBpbmcsY29udGV4dDpJQ29udGV4dCk9PntcclxuICBpZiAoaXRlbS5mcm9tLm9iamVjdFR5cGUgPT09IFwidmFyaWFibGVcIikge1xyXG4gICAgY29uc3QgcmZyb20gPWl0ZW0uZnJvbSBhcyBJVmFyO1xyXG4gICAgcmV0dXJuICBnZXRDb250ZXh0VmFyQnlQYXRoKGNvbnRleHQudmFyaWFibGVzLHJmcm9tLm5hbWUubmFtZSk7XHJcbiAgfWVsc2UgaWYoaXRlbS5mcm9tLm9iamVjdFR5cGUgPT09IFwiZmllbGRcIil7XHJcbiAgICBjb25zdCBmaWVsZCA9IGl0ZW0uZnJvbSBhcyBJRnJvbUZpZWxkO1xyXG4gICAgcmV0dXJuIGNvbnRleHQucmVjb3JkW2ZpZWxkLmNvZGVdLnZhbHVlO1xyXG4gIH1cclxuICBlbHNlIHtcclxuICAgIHJldHVybiBpdGVtLmZyb20uc2hhcmVkVGV4dDtcclxuICB9XHJcbn1cclxuXHJcbmNvbnN0IGRvVXBkYXRlID0gYXN5bmMgKFxyXG4gIG1hcHBpbmdEYXRhOiBNYXBwaW5nW10sXHJcbiAgYXBwSWQ6IHN0cmluZyxcclxuICBjb250ZXh0OiBJQ29udGV4dCxcclxuICBuZWVkQ3JlYXRlOiBib29sZWFuLFxyXG4gIGxvb2t1cEZpeGVkRmllbGRDb2Rlczogc3RyaW5nW11cclxuKSA9PiB7XHJcbiAgY29uc3QgdGFyZ2V0RmllbGQgPSBhd2FpdCBmaW5kVXBkYXRlRmllbGQobWFwcGluZ0RhdGEsIGFwcElkLCBjb250ZXh0KTtcclxuICBjb25zb2xlLmxvZyh0YXJnZXRGaWVsZCk7XHJcbiAgaWYgKHRhcmdldEZpZWxkLnJlY29yZHMubGVuZ3RoID09PSAwICYmIG5lZWRDcmVhdGUpIHtcclxuICAgIGF3YWl0IGRvQ3JlYXRlKG1hcHBpbmdEYXRhLCBhcHBJZCwgY29udGV4dCwgbG9va3VwRml4ZWRGaWVsZENvZGVzKTtcclxuICB9IGVsc2Uge1xyXG4gICAgLy8g44Oe44OD44OU44Oz44Kw44OH44O844K/44KS5Y2Y57SU44Gq44Kq44OW44K444Kn44Kv44OI44Gr5Yem55CG44GX44CB44K944O844K55YCk44GM5aSJ5pWw44Gu5aC05ZCI44Gv5aSJ5pWw44KS572u44GN5o+b44GI44G+44GZ44CCXHJcbiAgICBjb25zdCBtYXBwaW5nUnVsZXMgPSBtYXBwaW5nRGF0YVxyXG4gICAgICAuZmlsdGVyKFxyXG4gICAgICAgIChtKSA9PlxyXG4gICAgICAgICAgT2JqZWN0LmtleXMobS5mcm9tKS5sZW5ndGggPiAwICYmXHJcbiAgICAgICAgICAhbG9va3VwRml4ZWRGaWVsZENvZGVzLmluY2x1ZGVzKG0udG8uZmllbGRzWzBdLmNvZGUpXHJcbiAgICAgIClcclxuICAgICAgLm1hcCgobSkgPT4ge1xyXG4gICAgICAgIGlmIChtLmZyb20ub2JqZWN0VHlwZSA9PT0gXCJ2YXJpYWJsZVwiKSB7XHJcbiAgICAgICAgICBjb25zdCByZnJvbSA9bS5mcm9tIGFzIElWYXI7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWx1ZTogZ2V0Q29udGV4dFZhckJ5UGF0aChjb250ZXh0LnZhcmlhYmxlcyxyZnJvbS5uYW1lLm5hbWUpLFxyXG4gICAgICAgICAgICBjb2RlOiBtLnRvLmZpZWxkc1swXS5jb2RlLFxyXG4gICAgICAgICAgfTtcclxuICAgICAgICB9ZWxzZSBpZihtLmZyb20ub2JqZWN0VHlwZSA9PT0gXCJmaWVsZFwiKXtcclxuICAgICAgICAgIGNvbnN0IGZpZWxkID0gbS5mcm9tIGFzIElGcm9tRmllbGQ7XHJcbiAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICB2YWx1ZTogY29udGV4dC5yZWNvcmRbZmllbGQuY29kZV0udmFsdWUsXHJcbiAgICAgICAgICAgIGNvZGU6IG0udG8uZmllbGRzWzBdLmNvZGUsXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHZhbHVlOiBtLmZyb20uc2hhcmVkVGV4dCxcclxuICAgICAgICAgICAgY29kZTogbS50by5maWVsZHNbMF0uY29kZSxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuXHJcbiAgICBjb25zdCB1cGRhdGVSZWNvcmRzOiBVcGRhdGVSZWNvcmRbXSA9IHRhcmdldEZpZWxkLnJlY29yZHMubWFwKFxyXG4gICAgICAodGFyZ2V0UmVjb3JkKSA9PiB7XHJcbiAgICAgICAgY29uc3QgdXBkYXRlUmVjb3JkOiBVcGRhdGVSZWNvcmRbXCJyZWNvcmRcIl0gPSB7fTtcclxuXHJcbiAgICAgICAgLy8g44Oe44OD44OU44Oz44Kw5YaF44Gu44Or44O844Or44Gr44OS44OD44OI44GX44Gf44OV44Kj44O844Or44OJ44Gu44G/44GM5pu05paw44GV44KM44G+44GZ44CCXHJcbiAgICAgICAgZm9yIChjb25zdCBtYXBwaW5nIG9mIG1hcHBpbmdSdWxlcykge1xyXG4gICAgICAgICAgaWYgKHRhcmdldFJlY29yZFttYXBwaW5nLmNvZGVdKSB7XHJcbiAgICAgICAgICAgIHVwZGF0ZVJlY29yZFttYXBwaW5nLmNvZGVdID0ge1xyXG4gICAgICAgICAgICAgIHZhbHVlOiBtYXBwaW5nLnZhbHVlLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIGlkOiB0YXJnZXRSZWNvcmQuJGlkLnZhbHVlIGFzIHN0cmluZyxcclxuICAgICAgICAgIHJlY29yZDogdXBkYXRlUmVjb3JkLFxyXG4gICAgICAgIH07XHJcbiAgICAgIH1cclxuICAgICk7XHJcblxyXG4gICAgY29uc29sZS5sb2codXBkYXRlUmVjb3Jkcyk7XHJcbiAgICBhd2FpdCBjbGllbnQucmVjb3JkLnVwZGF0ZVJlY29yZHMoe1xyXG4gICAgICBhcHA6IGFwcElkLFxyXG4gICAgICByZWNvcmRzOiB1cGRhdGVSZWNvcmRzLFxyXG4gICAgfSk7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgbWFrZVF1ZXJ5PShmaWVsZDpGaWVsZEZvcm0sa2V5OmFueSk9PntcclxuICBpZihmaWVsZC50eXBlPT09RmllbGRUeXBlLk5VTUJFUiB8fCBmaWVsZC50eXBlPT09RmllbGRUeXBlLlJFQ09SRF9OVU1CRVIpe1xyXG4gICAgcmV0dXJuIGAke2ZpZWxkLmNvZGV9ID0gJHtOdW1iZXIoa2V5KX1gXHJcbiAgfVxyXG4gIGlmKHR5cGVvZiBrZXk9PT0nc3RyaW5nJyl7XHJcbiAgICByZXR1cm4gYCR7ZmllbGQuY29kZX0gPSBcIiR7a2V5fVwiYFxyXG4gIH1cclxufVxyXG5cclxuXHJcbmNvbnN0IGZpbmRVcGRhdGVGaWVsZCA9IGFzeW5jIChcclxuICBtYXBwaW5nRGF0YTogTWFwcGluZ1tdLFxyXG4gIGFwcElkOiBzdHJpbmcsXHJcbiAgY29udGV4dDogSUNvbnRleHRcclxuKSA9PiB7XHJcbiAgY29uc3QgcXVlcnlTdHIgPSBtYXBwaW5nRGF0YVxyXG4gICAgLmZpbHRlcigobSkgPT4gbS50by5hcHAgJiYgbS50by5maWVsZHMgJiYgbS50by5maWVsZHMubGVuZ3RoID4gMCAmJiBtLmlzS2V5KVxyXG4gICAgLm1hcCgobSkgPT4ge1xyXG4gICAgICBpZiAobS5mcm9tLm9iamVjdFR5cGUgPT09IFwidmFyaWFibGVcIikge1xyXG4gICAgICAgIGNvbnN0IHZmcm9tID0gbS5mcm9tIGFzIElWYXI7XHJcbiAgICAgICAgcmV0dXJuIG1ha2VRdWVyeShtLnRvLmZpZWxkc1swXSxnZXRDb250ZXh0VmFyQnlQYXRoKGNvbnRleHQudmFyaWFibGVzICwgdmZyb20ubmFtZS5uYW1lKSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSBpZihtLmZyb20ub2JqZWN0VHlwZSA9PT0gXCJmaWVsZFwiKXtcclxuICAgICAgICBjb25zdCBmaWVsZCA9IG0uZnJvbSBhcyBJRnJvbUZpZWxkO1xyXG4gICAgICAgIHJldHVybiBtYWtlUXVlcnkobS50by5maWVsZHNbMF0sY29udGV4dC5yZWNvcmRbZmllbGQuY29kZV0udmFsdWUpO1xyXG4gICAgICB9IFxyXG4gICAgICBlbHNle1xyXG4gICAgICAgIHJldHVybiBtYWtlUXVlcnkobS50by5maWVsZHNbMF0sbS5mcm9tLnNoYXJlZFRleHQpO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gICAgLmpvaW4oXCImXCIpO1xyXG4gIC8vIOaknOe0ouadoeS7tuOBjOepuuOBruWgtOWQiOOBr+WFqOODrOOCs+ODvOODieOCkui/lOOBmeOBn+OCgeOAgeaknOe0ouWvvuixoeOBjOimi+OBpOOBi+OCieOBquOBhOWgtOWQiOOBr+aknOe0ouOBr+ihjOOCj+OCjOOBvuOBm+OCk+OAglxyXG4gIGlmIChxdWVyeVN0ci5sZW5ndGggPT09IDApIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIHJlY29yZHM6IFtdLFxyXG4gICAgfTtcclxuICB9IGVsc2Uge1xyXG4gICAgcmV0dXJuIGF3YWl0IGNsaWVudC5yZWNvcmQuZ2V0UmVjb3Jkcyh7XHJcbiAgICAgIGFwcDogYXBwSWQsXHJcbiAgICAgIC8vIHF1ZXJ5OiB1bmRlZmluZWRcclxuICAgICAgcXVlcnk6IHF1ZXJ5U3RyLFxyXG4gICAgfSk7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgZG9DcmVhdGUgPSBhc3luYyAoXHJcbiAgbWFwcGluZ0RhdGE6IE1hcHBpbmdbXSxcclxuICBhcHBJZDogc3RyaW5nLFxyXG4gIGNvbnRleHQ6IElDb250ZXh0LFxyXG4gIGxvb2t1cEZpeGVkRmllbGRDb2Rlczogc3RyaW5nW11cclxuKSA9PiB7XHJcbiAgY29uc3QgZmlsdGVySGFuZGxlciA9ICAoaXRlbTpNYXBwaW5nKT0+e1xyXG4gICAgaWYoIWl0ZW0udG8uZmllbGRzIHx8IGl0ZW0udG8uZmllbGRzLmxlbmd0aD09PTApe1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBpZihpdGVtLmZyb20ub2JqZWN0VHlwZSA9PT0gXCJ2YXJpYWJsZVwiICYmIChpdGVtLmZyb20gYXMgSVZhcikubmFtZS5uYW1lICApe1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICAgIGlmKGl0ZW0uZnJvbS5vYmplY3RUeXBlID09PSBcImZpZWxkXCIgJiYgKGl0ZW0uZnJvbSBhcyBJRnJvbUZpZWxkKS5jb2RlKXtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICBpZihpdGVtLmZyb20ub2JqZWN0VHlwZSA9PT0gXCJ0ZXh0XCIgJiYgaXRlbS5mcm9tLnNoYXJlZFRleHQhPT1udWxsKXtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG4gIGNvbnN0IHJlY29yZCA9IG1hcHBpbmdEYXRhXHJcbiAgICAuZmlsdGVyKGZpbHRlckhhbmRsZXIpXHJcbiAgICAuZmlsdGVyKChpdGVtKSA9PiAhbG9va3VwRml4ZWRGaWVsZENvZGVzLmluY2x1ZGVzKGl0ZW0udG8uZmllbGRzWzBdLmNvZGUpKVxyXG4gICAgLnJlZHVjZSgoYWNjdW11bGF0b3IsIGl0ZW0pID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICAuLi5hY2N1bXVsYXRvcixcclxuICAgICAgICBbaXRlbS50by5maWVsZHNbMF0uY29kZV06IHtcclxuICAgICAgICAgIHZhbHVlOiBnZXRGcm9tVmFsdWUoaXRlbSxjb250ZXh0KSxcclxuICAgICAgICB9LFxyXG4gICAgICB9O1xyXG4gICAgfSwge30pO1xyXG4gIGlmIChyZWNvcmQgJiYgT2JqZWN0LmtleXMocmVjb3JkKS5sZW5ndGggPiAwKSB7XHJcbiAgICBjb25zb2xlLmxvZyhyZWNvcmQpO1xyXG4gICAgYXdhaXQgY2xpZW50LnJlY29yZC5hZGRSZWNvcmQoe1xyXG4gICAgICBhcHA6YXBwSWQsXHJcbiAgICAgIHJlY29yZDpyZWNvcmRcclxuICAgIH0pO1xyXG4gICAgLy8gYXdhaXQga2ludG9uZS5hcGkoa2ludG9uZS5hcGkudXJsKFwiL2svdjEvcmVjb3JkLmpzb25cIiwgdHJ1ZSksIFwiUE9TVFwiLCB7XHJcbiAgICAvLyAgIGFwcDogYXBwSWQsXHJcbiAgICAvLyAgIHJlY29yZDogcmVjb3JkLFxyXG4gICAgLy8gfSk7XHJcbiAgfVxyXG59O1xyXG5cclxuY29uc3QgZ2V0TG9va3VwRml4ZWRGaWVsZENvZGVzID0gYXN5bmMgKGFwcElkOiBzdHJpbmcpID0+IHtcclxuICByZXR1cm4gYXdhaXQgY2xpZW50LmFwcFxyXG4gICAgLmdldEZvcm1GaWVsZHMoeyBhcHA6IGFwcElkIH0pXHJcbiAgICAudGhlbigocmVzcCkgPT5cclxuICAgICAgT2JqZWN0LnZhbHVlcyhyZXNwLnByb3BlcnRpZXMpXHJcbiAgICAgICAgLmZpbHRlcigoZikgPT4gKGYgYXMgTG9va3VwKS5sb29rdXAgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAuZmxhdE1hcCgoZikgPT4gKGYgYXMgTG9va3VwKS5sb29rdXAuZmllbGRNYXBwaW5ncy5tYXAoKG0pID0+IG0uZmllbGQpKVxyXG4gICAgKTtcclxufTtcclxuIiwiaW1wb3J0IHtcclxuICBJQWN0aW9uLFxyXG4gIElBY3Rpb25SZXN1bHQsXHJcbiAgSUFjdGlvbk5vZGUsXHJcbiAgSUFjdGlvblByb3BlcnR5LFxyXG4gIElDb250ZXh0LFxyXG4gIElGaWVsZCxcclxufSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuXHJcblxyXG5pbnRlcmZhY2UgSUN1cnJlbnRGaWVsZEdldFByb3BzIHtcclxuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xyXG4gIGZpZWxkOiBJRmllbGQ7XHJcbiAgdmVyTmFtZTogVmVyTmFtZTtcclxufVxyXG5cclxuaW50ZXJmYWNlIFZlck5hbWUge1xyXG4gIG5hbWU6IHN0cmluZztcclxufVxyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBDdXJyZW50RmllbGRHZXRBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9uIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gIHByb3BzOiBJQ3VycmVudEZpZWxkR2V0UHJvcHM7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLm5hbWUgPSBcIuODleOCo+ODvOODq+ODieOBruWApOOCkuWPluW+l+OBmeOCi1wiO1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcyA9IFtdO1xyXG4gICAgdGhpcy5wcm9wcyA9IHt9IGFzIElDdXJyZW50RmllbGRHZXRQcm9wcztcclxuICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHByb2Nlc3MoXHJcbiAgICBhY3Rpb25Ob2RlOiBJQWN0aW9uTm9kZSxcclxuICAgIGV2ZW50OiBhbnksXHJcbiAgICBjb250ZXh0OiBJQ29udGV4dFxyXG4gICk6IFByb21pc2U8SUFjdGlvblJlc3VsdD4ge1xyXG4gICAgdGhpcy5wcm9wcyA9IGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUgYXMgSUN1cnJlbnRGaWVsZEdldFByb3BzO1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcyA9IGFjdGlvbk5vZGUuYWN0aW9uUHJvcHM7XHJcblxyXG4gICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgY2FuTmV4dDogdHJ1ZSxcclxuICAgICAgcmVzdWx0OiAnJyxcclxuICAgIH0gYXMgSUFjdGlvblJlc3VsdDtcclxuICAgIFxyXG4gICAgdHJ5IHtcclxuICAgICAgY29uc3QgcmVjb3JkID0gZXZlbnQucmVjb3JkO1xyXG4gICAgICBpZighKHRoaXMucHJvcHMuZmllbGQuY29kZSBpbiByZWNvcmQpKXtcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYOODleOCo+ODvOODq+ODiVske3RoaXMucHJvcHMuZmllbGQuY29kZX1d44GM6KaL44Gk44GL44KK44G+44Gb44KT44Gn44GX44Gf44CCYCk7XHJcbiAgICAgIH1cclxuICAgICAgLy/lpInmlbDoqK3lrppcclxuICAgICAgaWYodGhpcy5wcm9wcy52ZXJOYW1lICYmIHRoaXMucHJvcHMudmVyTmFtZS5uYW1lIT09Jycpe1xyXG4gICAgICAgIGNvbnRleHQudmFyaWFibGVzW3RoaXMucHJvcHMudmVyTmFtZS5uYW1lXT1yZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS52YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfSBcclxuICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb250ZXh0LmVycm9ycy5oYW5kbGVFcnJvcihlcnJvcixhY3Rpb25Ob2RlKTtcclxuICAgICAgcmVzdWx0LmNhbk5leHQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHQ7XHJcbiAgfVxyXG5cclxuICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdID0gdGhpcztcclxuICB9XHJcbn1cclxuXHJcbm5ldyBDdXJyZW50RmllbGRHZXRBY3Rpb24oKTtcclxuIiwiaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgIElBY3Rpb24sSUFjdGlvblJlc3VsdCwgSUFjdGlvbk5vZGUsIElBY3Rpb25Qcm9wZXJ0eSwgSUZpZWxkLCBJQ29udGV4dH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJUmVndWxhckNoZWNrUHJvcHN7XHJcbiAgICBmaWVsZDpJRmllbGQ7Ly/jg4Hjgqfjg4Pjgq/jgZnjgovjg5XjgqPjg7zjg6vjg4njga7lr77osaFcclxuICAgIG1lc3NhZ2U6c3RyaW5nOy8v44Ko44Op44O844Oh44OD44K744O844K4XHJcbiAgICByZWdFeHByZXNzaW9uOnN0cmluZzsvL+ato+imj+ihqOePvuW8j1xyXG59XHJcbi8qKlxyXG4gKiDmraPopo/ooajnj77jg4Hjgqfjg4Pjgq/jgqLjgq/jgrfjg6fjg7NcclxuICovXHJcbmV4cG9ydCBjbGFzcyBSZWd1bGFyQ2hlY2tBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9ue1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgYWN0aW9uUHJvcHM6IElBY3Rpb25Qcm9wZXJ0eVtdO1xyXG4gICAgcHJvcHM6SVJlZ3VsYXJDaGVja1Byb3BzO1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLm5hbWU9XCLmraPopo/ooajnj77jg4Hjgqfjg4Pjgq9cIjtcclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPVtdO1xyXG4gICAgICAgIHRoaXMucHJvcHM9e1xyXG4gICAgICAgICAgICBmaWVsZDp7Y29kZTonJ30sXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6JycsXHJcbiAgICAgICAgICAgIHJlZ0V4cHJlc3Npb246JydcclxuICAgICAgICB9XHJcbiAgICAgICAgLy/jgqLjgq/jgrfjg6fjg7PjgpLnmbvpjLLjgZnjgotcclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGUgXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSxjb250ZXh0OklDb250ZXh0KTpQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0PXtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgLy/lsZ7mgKfoqK3lrprjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1hY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICBpZiAoISgnZmllbGQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ21lc3NhZ2UnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ3JlZ0V4cHJlc3Npb24naW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBJUmVndWxhckNoZWNrUHJvcHM7XHJcbiAgICAgICAgICAgIC8v5p2h5Lu25byP44Gu6KiI566X57WQ5p6c44KS5Y+W5b6XXHJcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IGV2ZW50LnJlY29yZDtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHRoaXMucHJvcHMucmVnRXhwcmVzc2lvbik7XHJcbiAgICAgICAgICAgIGlmKCFyZWdleC50ZXN0KHZhbHVlKSl7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS5lcnJvcj10aGlzLnByb3BzLm1lc3NhZ2U7IFxyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdLmVycm9yID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXN1bHQ9IHtcclxuICAgICAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDp0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9Y2F0Y2goZXJyb3Ipe1xyXG4gICAgICAgICAgICBjb250ZXh0LmVycm9ycy5oYW5kbGVFcnJvcihlcnJvcixhY3Rpb25Ob2RlKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQ9ZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbiAgICBcclxufVxyXG5uZXcgUmVndWxhckNoZWNrQWN0aW9uKCk7XHJcbiIsImltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7IElBY3Rpb24sIElBY3Rpb25SZXN1bHQsIElBY3Rpb25Ob2RlLCBJQWN0aW9uUHJvcGVydHksIElGaWVsZCwgSUNvbnRleHQgfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+OBruWxnuaAp+Wumue+qVxyXG4gKi9cclxuaW50ZXJmYWNlIElNYWlsQ2hlY2tQcm9wcyB7XHJcbiAgICBmaWVsZDogSUZpZWxkOy8v44OB44Kn44OD44Kv44GZ44KL44OV44Kj44O844Or44OJ44Gu5a++6LGhXHJcbiAgICBtZXNzYWdlOiBzdHJpbmc7Ly/jgqjjg6njg7zjg6Hjg4Pjgrvjg7zjgrhcclxuICAgIGVtYWlsQ2hlY2s6c3RyaW5nO1xyXG59XHJcbi8qKlxyXG4gKiDjg6Hjg7zjg6vjgqLjg4njg6zjgrnjg4Hjgqfjg4Pjgq/jgqLjgq/jgrfjg6fjg7NcclxuICovXHJcbmV4cG9ydCBjbGFzcyBNYWlsQ2hlY2tBY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9uIHtcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICAgIHByb3BzOiBJTWFpbENoZWNrUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIuODoeODvOODq+OCouODieODrOOCueODgeOCp+ODg+OCr1wiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBbXTtcclxuICAgICAgICB0aGlzLnByb3BzID0ge1xyXG4gICAgICAgICAgICBmaWVsZDogeyBjb2RlOiAnJyB9LFxyXG4gICAgICAgICAgICBtZXNzYWdlOiAnJyxcclxuICAgICAgICAgICAgZW1haWxDaGVjazonJ1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL+OCouOCr+OCt+ODp+ODs+OCkueZu+mMsuOBmeOCi1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICog44Ki44Kv44K344On44Oz44Gu5a6f6KGM44KS5ZG844Gz5Ye644GZXHJcbiAgICAgKiBAcGFyYW0gYWN0aW9uTm9kZSBcclxuICAgICAqIEBwYXJhbSBldmVudCBcclxuICAgICAqIEByZXR1cm5zIFxyXG4gICAgICovXHJcbiAgICBhc3luYyBwcm9jZXNzKGFjdGlvbk5vZGU6IElBY3Rpb25Ob2RlLCBldmVudDogYW55LGNvbnRleHQ6SUNvbnRleHQpOiBQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICBjYW5OZXh0OiB0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6IGZhbHNlXHJcbiAgICAgICAgfTtcclxuXHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgLy/lsZ7mgKfoqK3lrprjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcyA9IGFjdGlvbk5vZGUuYWN0aW9uUHJvcHM7XHJcblxyXG4gICAgICAgICAgICBpZiAoISgnZmllbGQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ21lc3NhZ2UnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ2VtYWlsQ2hlY2snIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUgYXMgSU1haWxDaGVja1Byb3BzO1xyXG4gICAgICAgICAgICBjb25zdCByZWNvcmQgPSBldmVudC5yZWNvcmQ7XHJcbiAgICAgICAgICAgIC8v5a++6LGh44OV44Kj44O844Or44OJ44Gu5a2Y5Zyo44OB44Kn44OD44KvXHJcbiAgICAgICAgICAgIGlmKCEodGhpcy5wcm9wcy5maWVsZC5jb2RlIGluIHJlY29yZCkpe1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDjg5XjgqPjg7zjg6vjg4lbJHt0aGlzLnByb3BzLmZpZWxkLmNvZGV9XeOBjOimi+OBpOOBi+OCiuOBvuOBm+OCk+OBp+OBl+OBn+OAgmApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0udmFsdWU7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5wcm9wcy5lbWFpbENoZWNrID09PSAn5Y6z5qC8Jykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEvXlthLXpBLVowLTlfLcKlLl0rQFthLXpBLVowLTlfLV0rKFxcLlthLXpBLVowLTlfLV0rKSskLy50ZXN0KHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdLmVycm9yID0gdGhpcy5wcm9wcy5tZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0uZXJyb3IgPSBudWxsOyBcclxuICAgICAgICAgICAgICAgICAgICByZXN1bHQucmVzdWx0PXRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy5lbWFpbENoZWNrID09PSAn44KG44KL44KBJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCEvXlteQF0rQFteQF0rJC8udGVzdCh2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS5lcnJvciA9IHRoaXMucHJvcHMubWVzc2FnZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdLmVycm9yID0gbnVsbDsgXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnJlc3VsdD10cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhbk5leHQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiB0cnVlXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICBjb250ZXh0LmVycm9ycy5oYW5kbGVFcnJvcihlcnJvcixhY3Rpb25Ob2RlKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV0gPSB0aGlzO1xyXG4gICAgfVxyXG5cclxufVxyXG5uZXcgTWFpbENoZWNrQWN0aW9uKCk7XHJcbiIsImltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuXCI7XHJcbmltcG9ydCB7ICBJQWN0aW9uLElBY3Rpb25SZXN1bHQsIElBY3Rpb25Ob2RlLCBJQWN0aW9uUHJvcGVydHksIElGaWVsZCwgSUNvbnRleHR9IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44Gu5bGe5oCn5a6a576pXHJcbiAqL1xyXG5pbnRlcmZhY2UgSVN0ckNvdW50Q2hlY2tQcm9wc3tcclxuICAgIGZpZWxkOklGaWVsZDsvL+ODgeOCp+ODg+OCr+OBmeOCi+ODleOCo+ODvOODq+ODieOBruWvvuixoVxyXG4gICAgbWVzc2FnZTpzdHJpbmc7Ly/jgqjjg6njg7zjg6Hjg4Pjgrvjg7zjgrhcclxuICAgIG1heExlbmd0aDpudW1iZXI7Ly9cclxufVxyXG4vKipcclxuICog5q2j6KaP6KGo54++44OB44Kn44OD44Kv44Ki44Kv44K344On44OzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU3RyQ291bnRDaGVja0FjaXRvbiBpbXBsZW1lbnRzIElBY3Rpb257XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgICBwcm9wczpJU3RyQ291bnRDaGVja1Byb3BzO1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLm5hbWU9XCLmloflrZfmlbDjg4Hjgqfjg4Pjgq9cIjtcclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPVtdO1xyXG4gICAgICAgIHRoaXMucHJvcHM9e1xyXG4gICAgICAgICAgICBmaWVsZDp7Y29kZTonJ30sXHJcbiAgICAgICAgICAgIG1lc3NhZ2U6JycsXHJcbiAgICAgICAgICAgIG1heExlbmd0aDowXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v44Ki44Kv44K344On44Oz44KS55m76Yyy44GZ44KLXHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiDjgqLjgq/jgrfjg6fjg7Pjga7lrp/ooYzjgpLlkbzjgbPlh7rjgZlcclxuICAgICAqIEBwYXJhbSBhY3Rpb25Ob2RlIFxyXG4gICAgICogQHBhcmFtIGV2ZW50IFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHByb2Nlc3MoYWN0aW9uTm9kZTpJQWN0aW9uTm9kZSxldmVudDphbnksY29udGV4dDpJQ29udGV4dCk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdD17XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9YWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ2ZpZWxkJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdtZXNzYWdlJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdzdHJFeHByZXNzaW9uJ2luIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElTdHJDb3VudENoZWNrUHJvcHM7XHJcbiAgICAgICAgICAgIC8v5p2h5Lu25byP44Gu6KiI566X57WQ5p6c44KS5Y+W5b6XXHJcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IGV2ZW50LnJlY29yZDtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3QgbWF4TGVuZ3RoID0gdGhpcy5wcm9wcy5tYXhMZW5ndGg7XHJcbiAgICAgICAgICAgIGlmKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnICl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9ZWxzZSBpZihtYXhMZW5ndGggPCB2YWx1ZS5sZW5ndGgpe1xyXG4gICAgICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0uZXJyb3IgPSB0aGlzLnByb3BzLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0uZXJyb3IgPSBudWxsOyBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXN1bHQ9IHtcclxuICAgICAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgICAgIHJlc3VsdDp0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICBcclxuICAgICAgICB9Y2F0Y2goZXJyb3Ipe1xyXG4gICAgICAgICAgICBjb250ZXh0LmVycm9ycy5oYW5kbGVFcnJvcihlcnJvcixhY3Rpb25Ob2RlKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQ9ZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbiAgICBcclxufVxyXG5uZXcgU3RyQ291bnRDaGVja0FjaXRvbigpO1xyXG4iLCJpbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyBJQWN0aW9uLCBJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5LCBJRmllbGQgLElDb250ZXh0LCBJVmFyTmFtZX0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJRGF0ZXRpbWVHZXR0ZXJQcm9wcyB7XHJcbiAgICAvKirlpInmlbDjga7lkI3liY0gKi9cclxuICAgIHZlck5hbWU6SVZhck5hbWU7XHJcbn1cclxuLyoqXHJcbiAqIOePvuWcqOaXpeaZguOCkuWPluW+l+OBmeOCi+OCouOCr+OCt+ODp+ODs1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIERhdGV0aW1lR2V0dGVyQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbiB7XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgICBwcm9wczogSURhdGV0aW1lR2V0dGVyUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIuePvuWcqOaXpeaZglwiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBbXTtcclxuICAgICAgICB0aGlzLnByb3BzID0ge1xyXG4gICAgICAgICAgICB2ZXJOYW1lOntuYW1lOicnfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnJlZ2lzdGVyKCk7XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGUgXHJcbiAgICAgKiBAcGFyYW0gZXZlbnQgXHJcbiAgICAgKiBAcmV0dXJucyBcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOiBJQWN0aW9uTm9kZSwgZXZlbnQ6IGFueSxjb250ZXh0OklDb250ZXh0KTogUHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IHtcclxuICAgICAgICAgICAgY2FuTmV4dDogdHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OiBmYWxzZVxyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBhY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG5cclxuICAgICAgICAgICAgaWYgKCEoJ3Zlck5hbWUnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElEYXRldGltZUdldHRlclByb3BzO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZih0aGlzLnByb3BzLnZlck5hbWUgJiYgdGhpcy5wcm9wcy52ZXJOYW1lLm5hbWUhPT0nJyl7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnZhcmlhYmxlc1t0aGlzLnByb3BzLnZlck5hbWUubmFtZV09dG9kYXkudG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuXHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29udGV4dC5lcnJvcnMuaGFuZGxlRXJyb3IoZXJyb3IsYWN0aW9uTm9kZSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jYW5OZXh0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdID0gdGhpcztcclxuICAgIH1cclxuXHJcbn1cclxubmV3IERhdGV0aW1lR2V0dGVyQWN0aW9uKCk7XHJcbiIsIlxyXG5cclxuaW1wb3J0IHsgZWFjaCB9IGZyb20gXCJqcXVlcnlcIjtcclxuaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgIElBY3Rpb24sSUFjdGlvblJlc3VsdCwgSUFjdGlvbk5vZGUsIElBY3Rpb25Qcm9wZXJ0eSwgSUZpZWxkLCBJQ29udGV4dCB9IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG5pbXBvcnQgeyBDb25kaXRpb25UcmVlIH0gZnJvbSAnLi4vdHlwZXMvQ29uZGl0aW9ucyc7XHJcblxyXG5cclxuXHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJSW5zZXJ0VmFsdWVQcm9wc3tcclxuICAgIGZpZWxkOklGaWVsZDtcclxuICAgIGNvbmRpdGlvbjpzdHJpbmc7XHJcbiAgICB2YWx1ZTpzdHJpbmc7XHJcbiAgICBzaG93OnN0cmluZztcclxufVxyXG4vKipcclxuICpcclxuICovXHJcbmV4cG9ydCBjbGFzcyBJbnNlcnRWYWx1ZUFjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb257XHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgICBwcm9wczpJSW5zZXJ0VmFsdWVQcm9wcztcclxuICAgIGNvbnN0cnVjdG9yKCl7XHJcbiAgICAgICAgdGhpcy5uYW1lPVwi5YCk44KS5oy/5YWl44GZ44KLXCI7Ly8gRELjgavnmbvpjLLjgZfjgZ/jgqLjgq/jgrfjg6fjg7PlkI1cclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPVtdO1xyXG4gICAgICAgIC8v44OX44Ot44OR44OG44Kj5bGe5oCn44Gu5Yid5pyf5YyWXHJcbiAgICAgICAgdGhpcy5wcm9wcz17XHJcbiAgICAgICAgICAgIGZpZWxkOntjb2RlOicnfSxcclxuICAgICAgICAgICAgY29uZGl0aW9uOicnLFxyXG4gICAgICAgICAgICB2YWx1ZTonJyxcclxuICAgICAgICAgICAgc2hvdzonJ1xyXG4gICAgICAgIH1cclxuICAgICAgICAvL+OCouOCr+OCt+ODp+ODs+OCkueZu+mMsuOBmeOCi1xyXG4gICAgICAgIHRoaXMucmVnaXN0ZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOepuueZveaWh+Wtl+OCkuepuueZveaWh+Wtl+OBjOmdnuWvvuW/nOOBruODleOCo+ODvOODq+ODieOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBpuOBhOOBquOBhOOBi+OAgeW/hemgiOmgheebruODleOCo+ODvOODq+ODieOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBpuOBhOOBquOBhOOBi+ODgeOCp+ODg+OCr+OBmeOCi1xyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0VmFsdWUgLSDmjL/lhaXjgZnjgovlgKRcclxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59IC3lhaXlipvlgKTjgYzmnInlirnjgarml6Xku5jlvaLlvI/jga7loLTlkIjjga90cnVl44KS6L+U44GX44CB44Gd44GG44Gn44Gq44GE5aC05ZCI44Gv5L6L5aSW44KS55m655Sf44GV44Gb44KLXHJcbiAgICAgKi9cclxuICAgIGNoZWNrSW5wdXRWYWx1ZUJsYW5rKGZpZWxkVHlwZSA6c3RyaW5nIHwgdW5kZWZpbmVkLGlucHV0VmFsdWUgOnN0cmluZyxmaWVsZENvZGUgOnN0cmluZyxmaWVsZFJlcXVpcmVkIDpib29sZWFuIHwgdW5kZWZpbmVkLGV2ZW50IDphbnkpOiBib29sZWFue1xyXG5cclxuICAgICAgICBsZXQgdmFsdWVIYXNCbGFuaztcclxuICAgICAgICAvL+ato+imj+ihqOePvuODgeOCp+ODg+OCr1xyXG4gICAgICAgIHZhbHVlSGFzQmxhbmsgPSBpbnB1dFZhbHVlLm1hdGNoKC8oXFxzfFxcdTMwMDApLyk7Ly/ljYrop5Ljgrnjg5rjg7zjgrnjg7vjgr/jg5bmloflrZfjg7vmlLnooYzjg7vmlLnjg5rjg7zjgrjjg7vlhajop5Ljgrnjg5rjg7zjgrnjgYzvvJHjgaTku6XkuIrjgYLjgovjgajjg57jg4Pjg4HjgZnjgotcclxuXHJcbiAgICAgICAgLy/lgKTjgavnqbrnmb3mloflrZfjgYzlhaXjgaPjgabjgYTjgovjgIFudWxs44Gu44Go44GN44Gv44CB44Ko44Op44O844OB44Kn44OD44Kv44GZ44KLXHJcbiAgICAgICAgaWYodmFsdWVIYXNCbGFuayAhPT0gbnVsbCB8fCBpbnB1dFZhbHVlID09PSBudWxsIHx8IGlucHV0VmFsdWUgPT09ICcnKXtcclxuICAgICAgICAgICAgLy/nqbrnmb3mloflrZfjgpLnqbrnmb3mloflrZfjgYzpnZ7lr77lv5zjga7jg5XjgqPjg7zjg6vjg4njgavmjL/lhaXjgZfjgojjgYbjgajjgZfjgabjgYTjgovloLTlkIjjgIHkvovlpJbjgpLnmbrnlJ/jgZXjgZvjgotcclxuICAgICAgICAgICAgaWYoZmllbGRUeXBlID09PSBcIk5VTUJFUlwiIHx8IGZpZWxkVHlwZSA9PT0gXCJEQVRFXCIgfHwgZmllbGRUeXBlID09PSBcIkRBVEVUSU1FXCIgfHwgZmllbGRUeXBlID09PSBcIlRJTUVcIiB8fCBmaWVsZFR5cGUgPT09IFwiVVNFUl9TRUxFQ1RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB8fCBmaWVsZFR5cGUgPT09IFwiT1JHQU5JWkFUSU9OX1NFTEVDVFwiIHx8IGZpZWxkVHlwZSA9PT0gXCJHUk9VUF9TRUxFQ1RcIiB8fCBmaWVsZFR5cGUgPT09IFwiUkFESU9fQlVUVE9OXCIgfHwgZmllbGRUeXBlID09PSBcIkRST1BfRE9XTlwiIHx8IGZpZWxkVHlwZSA9PT0gXCJDSEVDS19CT1hcIiB8fCBmaWVsZFR5cGUgPT09IFwiTVVMVElfU0VMRUNUXCIpe1xyXG4gICAgICAgICAgICAgICAgZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV1bJ2Vycm9yJ10gPSBcIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gf44CB5YCk44Gr56m655m95paH5a2X44GM5ZCr44G+44KM44Gm44GE44G+44GZ44CCXCI7IC8v44Os44Kz44O844OJ44Gr44Ko44Op44O844KS6KGo56S6XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBn+OAgeWApOOBq+epuueZveaWh+Wtl+OBjOWQq+OBvuOCjOOBpuOBhOOBvuOBmeOAguOAjOWApOOCkuaMv+WFpeOBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiKTtcclxuXHJcbiAgICAgICAgICAgIC8v56m655m95paH5a2X44KS5b+F6aCI6aCF55uu44OV44Kj44O844Or44OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gm44GE44KL5aC05ZCI44CB5L6L5aSW44KS55m655Sf44GV44Gb44KLXHJcbiAgICAgICAgICAgIH1lbHNlIGlmKGZpZWxkUmVxdWlyZWQpe1xyXG4gICAgICAgICAgICAgICAgZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV1bJ2Vycm9yJ10gPSBcIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44OV44Kj44O844Or44OJ44Gv5b+F6aCI6aCF55uu44Gu44Gf44KB44CB56m655m95paH5a2X44Gv5oy/5YWl44Gn44GN44G+44Gb44KT44CCXCI7IC8v44Os44Kz44O844OJ44Gr44Ko44Op44O844KS6KGo56S6XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuODleOCo+ODvOODq+ODieOBr+W/hemgiOmgheebruOBruOBn+OCgeOAgeepuueZveaWh+Wtl+OBr+aMv+WFpeOBp+OBjeOBvuOBm+OCk+OAguOAjOWApOOCkuaMv+WFpeOBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDnqbrnmb3mloflrZfjga7lpInmlbDjgpLpnZ7lr77lv5zjga7jg5XjgqPjg7zjg6vjg4njgavmjL/lhaXjgZfjgojjgYbjgajjgZfjgabjgYTjgarjgYTjgYvjgIHlv4XpoIjpoIXnm67jg5XjgqPjg7zjg6vjg4njgavmjL/lhaXjgZfjgojjgYbjgajjgZfjgabjgYTjgarjgYTjgYvjg4Hjgqfjg4Pjgq/jgZnjgotcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFZhbHVlIC0g5oy/5YWl44GZ44KL5YCkXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSAt5YWl5Yqb5YCk44GM5pyJ5Yq544Gq5pel5LuY5b2i5byP44Gu5aC05ZCI44GvdHJ1ZeOCkui/lOOBl+OAgeOBneOBhuOBp+OBquOBhOWgtOWQiOOBr+S+i+WkluOCkueZuueUn+OBleOBm+OCi1xyXG4gICAgICovXHJcbiAgICBjaGVja1ZhcmlhYmxlVmFsdWVCbGFuayhmaWVsZFR5cGUgOnN0cmluZyB8IHVuZGVmaW5lZCxpbnB1dFZhbHVlQXJyYXkgOmFueSxmaWVsZENvZGUgOnN0cmluZyxmaWVsZFJlcXVpcmVkIDpib29sZWFuIHwgdW5kZWZpbmVkLGV2ZW50IDphbnkpOiBib29sZWFue1xyXG5cclxuICAgICAgICBsZXQgdmFyaWFibGVIYXNCbGFuaztcclxuICAgICAgICBsZXQgdmFyaWFibGVIYXNOdWxsO1xyXG4gICAgICAgIC8v5q2j6KaP6KGo54++44OB44Kn44OD44KvXHJcbiAgICAgICAgZm9yKGxldCBpID0wO2k8aW5wdXRWYWx1ZUFycmF5Lmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAvL+mFjeWIl+OBruimgee0oOOBq251bGzjgYzjgarjgYTjgYvjgIHnqbrnmb3mloflrZfjgYzlgKTjgavlkKvjgb7jgozjgabjgYTjgarjgYTjgYvjg4Hjgqfjg4Pjgq/jgZnjgotcclxuICAgICAgICAgICAgaWYgKGlucHV0VmFsdWVBcnJheVtpXSAhPT0gbnVsbCAmJiBpbnB1dFZhbHVlQXJyYXlbaV0gIT09IHVuZGVmaW5lZCAmJiBpbnB1dFZhbHVlQXJyYXlbaV0gIT09IFwiXCIpe1xyXG4gICAgICAgICAgICAgICAgdmFyaWFibGVIYXNCbGFuayA9IGlucHV0VmFsdWVBcnJheVtpXS5tYXRjaCgvKFxcc3xcXHUzMDAwKS8pOy8v5Y2K6KeS44K544Oa44O844K544O744K/44OW5paH5a2X44O75pS56KGM44O75pS544Oa44O844K444O75YWo6KeS44K544Oa44O844K544GM77yR44Gk5Lul5LiK44GC44KL44Go44Oe44OD44OB44GZ44KLXHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgdmFyaWFibGVIYXNOdWxsID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy/lpInmlbDjga7lgKTjgavnqbrnmb3mloflrZfjgYzlhaXjgaPjgabjgYTjgovjgIHphY3liJfjgavopoHntKDjgYzjgarjgYTjgajjgY3jga/jgIHjgqjjg6njg7zjg4Hjgqfjg4Pjgq/jgZnjgotcclxuICAgICAgICBpZih2YXJpYWJsZUhhc0JsYW5rICE9PSBudWxsIHx8IHZhcmlhYmxlSGFzTnVsbCB8fCBpbnB1dFZhbHVlQXJyYXkubGVuZ3RoID09PSAwKXtcclxuICAgICAgICAgICAgLy/nqbrnmb3mloflrZfjgpLnqbrnmb3mloflrZfjgYzpnZ7lr77lv5zjga7jg5XjgqPjg7zjg6vjg4njgavmjL/lhaXjgZfjgojjgYbjgajjgZfjgabjgYTjgovloLTlkIjjgIHkvovlpJbjgpLnmbrnlJ/jgZXjgZvjgotcclxuICAgICAgICAgICAgaWYoZmllbGRUeXBlID09PSBcIk5VTUJFUlwiIHx8IGZpZWxkVHlwZSA9PT0gXCJEQVRFXCIgfHwgZmllbGRUeXBlID09PSBcIkRBVEVUSU1FXCIgfHwgZmllbGRUeXBlID09PSBcIlRJTUVcIiB8fCBmaWVsZFR5cGUgPT09IFwiVVNFUl9TRUxFQ1RcIlxyXG4gICAgICAgICAgICAgICAgfHwgZmllbGRUeXBlID09PSBcIk9SR0FOSVpBVElPTl9TRUxFQ1RcIiB8fCBmaWVsZFR5cGUgPT09IFwiR1JPVVBfU0VMRUNUXCIgfHwgZmllbGRUeXBlID09PSBcIlJBRElPX0JVVFRPTlwiIHx8IGZpZWxkVHlwZSA9PT0gXCJEUk9QX0RPV05cIiB8fCBmaWVsZFR5cGUgPT09IFwiQ0hFQ0tfQk9YXCIgfHwgZmllbGRUeXBlID09PSBcIk1VTFRJX1NFTEVDVFwiKXtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdWydlcnJvciddID0gXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBn+OAgeWkieaVsOOBruWApOOBq+epuueZveaWh+Wtl+OBjOWQq+OBvuOCjOOBpuOBhOOBvuOBmeOAglwiOyAvL+ODrOOCs+ODvOODieOBq+OCqOODqeODvOOCkuihqOekulxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjgavmjL/lhaXjgZfjgojjgYbjgajjgZfjgZ/jgIHlpInmlbDjga7lgKTjgavnqbrnmb3mloflrZfjgYzlkKvjgb7jgozjgabjgYTjgb7jgZnjgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcblxyXG4gICAgICAgICAgICAvL+epuueZveaWh+Wtl+OCkuW/hemgiOmgheebruODleOCo+ODvOODq+ODieOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBpuOBhOOCi+WgtOWQiOOAgeS+i+WkluOCkueZuueUn+OBleOBm+OCi1xyXG4gICAgICAgICAgICB9ZWxzZSBpZihmaWVsZFJlcXVpcmVkKXtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdWydlcnJvciddID0gXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuODleOCo+ODvOODq+ODieOBr+W/hemgiOmgheebruOBp+OBguOCiuOAgeepuueZveODu+epuueZveaWh+Wtl+OBruWApOOBruWkieaVsOOBr+OAgeaMv+WFpeOBp+OBjeOBvuOBm+OCk+OAglwiOyAvL+ODrOOCs+ODvOODieOBq+OCqOODqeODvOOCkuihqOekulxyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njga/lv4XpoIjpoIXnm67jgafjgYLjgorjgIHnqbrnmb3jg7vnqbrnmb3mloflrZfjga7lgKTjga7lpInmlbDjga/jgIHmjL/lhaXjgafjgY3jgb7jgZvjgpPjgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5YWl5Yqb5YCk44GM5Y2K6KeS5pWw5a2X44GL44OB44Kn44OD44Kv44GZ44KL6Zai5pWwXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRWYWx1ZSAtIOaMv+WFpeOBmeOCi+WApFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gLeWFpeWKm+WApOOBjOacieWKueOBquaVsOWApOOBruWgtOWQiOOBr3RydWXjgpLov5TjgZfjgIHjgZ3jgYbjgafjgarjgYTloLTlkIjjga/kvovlpJbjgpLnmbrnlJ/jgZXjgZvjgotcclxuICAgICAqL1xyXG4gICAgY2hlY2tJbnB1dE51bWJlcihpbnB1dFZhbHVlIDpzdHJpbmcsZmllbGRDb2RlIDpzdHJpbmcsZXZlbnQgOmFueSk6IGJvb2xlYW57XHJcbiAgICAgICAgbGV0IGlucHV0TnVtYmVyVmFsdWUgPSBOdW1iZXIoaW5wdXRWYWx1ZSk7Ly/mlbDlgKTlnovjgavlpInmj5tcclxuXHJcbiAgICAgICAgLy/mnInpmZDmlbDjgYvjganjgYbjgYvliKTlrppcclxuICAgICAgICBpZighaXNGaW5pdGUoaW5wdXROdW1iZXJWYWx1ZSkpe1xyXG4gICAgICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXVsnZXJyb3InXSA9IFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njgavlhaXjgozjgojjgYbjgajjgZfjgZ/lgKTjga/jgIHnhKHlirnjgarml6Xku5jlvaLlvI/jgafjgZnjgIJcIjsgLy/jg6zjgrPjg7zjg4njgavjgqjjg6njg7zjgpLooajnpLpcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njgavlhaXjgozjgojjgYbjgajjgZfjgZ/lgKTjga/jgIHmnInlirnjgarmlbDlgKTjgafjga/jgYLjgorjgb7jgZvjgpPjgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiDlhaXlipvlgKTjgYzmnInlirnjgarml6Xku5jlvaLlvI/jgYvjg4Hjgqfjg4Pjgq/jgZnjgovplqLmlbBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFZhbHVlIC0g5oy/5YWl44GZ44KL5YCkXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSAt5YWl5Yqb5YCk44GM5pyJ5Yq544Gq5pel5LuY5b2i5byP44Gu5aC05ZCI44GvdHJ1ZeOCkui/lOOBl+OAgeOBneOBhuOBp+OBquOBhOWgtOWQiOOBr+S+i+WkluOCkueZuueUn+OBleOBm+OCi1xyXG4gICAgICovXHJcbiAgICBjaGVja0lucHV0RGF0ZShpbnB1dFZhbHVlIDpzdHJpbmcsZmllbGRDb2RlIDpzdHJpbmcsZXZlbnQgOmFueSk6IGJvb2xlYW57XHJcbiAgICAgICAgLy/mraPopo/ooajnj77jg4Hjgqfjg4Pjgq9cclxuICAgICAgICBsZXQgdHdvRGlnaXRNb250aERheSA9IGlucHV0VmFsdWUubWF0Y2goLyhcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pJC8pOy8vNOahgeOBruaVsOWtly0y5qGB44Gu5pWw5a2XLTLmoYHjga7mlbDlrZdcclxuICAgICAgICBsZXQgc2luZ2xlRGlnaXRNb250aERheSA9IGlucHV0VmFsdWUubWF0Y2goLyhcXGR7NH0pLShcXGR7MX0pLShcXGR7MX0pJC8pOy8vNOahgeOBruaVsOWtly0x5qGB44Gu5pWw5a2XLTLmoYHjga7mlbDlrZdcclxuICAgICAgICBsZXQgc2luZ2xlRGlnaXRNb250aCA9IGlucHV0VmFsdWUubWF0Y2goLyhcXGR7NH0pLShcXGR7MX0pLShcXGR7Mn0pJC8pOy8vNOahgeOBruaVsOWtly0x5qGB44Gu5pWw5a2XLTLmoYHjga7mlbDlrZdcclxuICAgICAgICBsZXQgc2luZ2xlRGlnaXREYXkgPSBpbnB1dFZhbHVlLm1hdGNoKC8oXFxkezR9KS0oXFxkezJ9KS0oXFxkezF9KSQvKTsvLzTmoYHjga7mlbDlrZctMuahgeOBruaVsOWtly0x5qGB44Gu5pWw5a2XXHJcbiAgICAgICAgbGV0IGRhdGVUaW1lTWlsbGlTZWNvbmQgPSBpbnB1dFZhbHVlLm1hdGNoKC8oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVQoXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KS4oXFxkezIsM30pWiQvKTsvL+aZguWIu+WFpeOCiuOBrlVUQ+OBruaXpeS7mOW9ouW8jyjjg5/jg6rnp5IpXHJcbiAgICAgICAgbGV0IGRhdGVUaW1lID0gaW5wdXRWYWx1ZS5tYXRjaCgvKFxcZHs0fSktKFxcZHsyfSktKFxcZHsyfSlUKFxcZHsyfSk6KFxcZHsyfSk6KFxcZHsyfSlaJC8pOy8v5pmC5Yi75YWl44KK44GuVVRD44Gu5pel5LuY5b2i5byPXHJcbiAgICAgICAgbGV0IGRhdGU7XHJcbiAgICAgICAgLy9kYXRl5Z6L44Gr5aSJ5o+bXHJcbiAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKGlucHV0VmFsdWUpO1xyXG5cclxuICAgICAgICAvL2RhdGXlnovlpInmj5vjgafjgY3jgZ/jgYvnorroqo1cclxuICAgICAgICBpZihkYXRlICE9PSB1bmRlZmluZWQgJiYgIWlzTmFOKGRhdGUuZ2V0RGF0ZSgpKSl7XHJcbiAgICAgICAgICAgIC8v5q2j6KaP6KGo54++44OB44Kn44OD44Kv56K66KqNXHJcbiAgICAgICAgICAgIGlmKHR3b0RpZ2l0TW9udGhEYXkgPT09IG51bGwgJiYgc2luZ2xlRGlnaXRNb250aCA9PT0gbnVsbCAmJiBzaW5nbGVEaWdpdERheSA9PT0gbnVsbCAmJiBzaW5nbGVEaWdpdE1vbnRoRGF5ID09PSBudWxsICYmIGRhdGVUaW1lID09PSBudWxsICYmIGRhdGVUaW1lTWlsbGlTZWNvbmQgPT09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdWydlcnJvciddID0gXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuODleOCo+ODvOODq+ODieOBq+WFpeOCjOOCiOOBhuOBqOOBl+OBn+WApOOBr+OAgeeEoeWKueOBquaXpeS7mOW9ouW8j+OBp+OBmeOAglwiOyAvL+ODrOOCs+ODvOODieOBq+OCqOODqeODvOOCkuihqOekulxyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44OV44Kj44O844Or44OJ44Gr5YWl44KM44KI44GG44Go44GX44Gf5YCk44Gv44CB54Sh5Yq544Gq5pel5LuY5b2i5byP44Gn44GZ44CC44CM5YCk44KS5oy/5YWl44GZ44KL44CN44Kz44Oz44Od44O844ON44Oz44OI44Gu5Yem55CG44KS5Lit5pat44GX44G+44GX44Gf44CCXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiDlhaXlipvlgKTjgYzmnInlirnjgarmmYLliLvlvaLlvI/jgYvjg4Hjgqfjg4Pjgq/jgZnjgovplqLmlbBcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFZhbHVlIC0g5oy/5YWl44GZ44KL5YCkXHJcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSAt5YWl5Yqb5YCk44GM5pyJ5Yq544Gq5pel5LuY5b2i5byP44Gu5aC05ZCI44GvdHJ1ZeOCkui/lOOBl+OAgeOBneOBhuOBp+OBquOBhOWgtOWQiOOBr+S+i+WkluOCkueZuueUn+OBleOBm+OCi1xyXG4gICAgICovXHJcbiAgICBjaGVja0lucHV0VGltZShpbnB1dFZhbHVlIDpzdHJpbmcsZmllbGRDb2RlIDpzdHJpbmcsZXZlbnQgOmFueSk6IGJvb2xlYW57XHJcbiAgICAgICAgLy/mraPopo/ooajnj77jg4Hjgqfjg4Pjgq9cclxuICAgICAgICBsZXQgdGltZUZvcm1hdCA9aW5wdXRWYWx1ZS5tYXRjaCgvXihbMC05XXwxWzAtOV18MlswLTNdKTpbMC01XVswLTldJC8pO1xyXG5cclxuICAgICAgICAvL+ato+imj+ihqOePvuODgeOCp+ODg+OCr+eiuuiqjVxyXG4gICAgICAgIGlmKHRpbWVGb3JtYXQgPT09IG51bGwpe1xyXG4gICAgICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXVsnZXJyb3InXSA9IFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njgavlhaXjgozjgojjgYbjgajjgZfjgZ/lgKTjga/jgIHnhKHlirnjgarmmYLliLvlvaLlvI/jgafjgZnjgIJcIjsgLy/jg6zjgrPjg7zjg4njgavjgqjjg6njg7zjgpLooajnpLpcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njgavlhaXjgozjgojjgYbjgajjgZfjgZ/lgKTjga/jgIHnhKHlirnjgarmmYLliLvlvaLlvI/jgafjgZnjgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgILjgIwx772eMuahgSA6IDLmoYHjgI3jga7lgKTjgpLmjIflrprjgZfjgabjgY/jgaDjgZXjgYTjgIJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5YWl5Yqb5YCk44Gu44OV44Kj44O844Or44OJ44K/44Kk44OX44GMREFURVRJTUXjgafjgYLjgozjgbDjgIHmmYLliLvjgYLjgorjga7ml6Xku5jlvaLlvI/lpInmj5vjgZfjgIFEQVRF44Gn44GC44KM44Gw5pmC5Yi744Gq44GX44Gu5pel5LuY5b2i5byP5aSJ5o+b44GZ44KL6Zai5pWwXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRWYWx1ZSAt5oy/5YWl44GZ44KL5YCkXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRUeXBlICAt44OV44Kj44O844Or44OJ44K/44Kk44OXXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IC3lhaXlipvlgKTjgYzml6Xku5jlvaLlvI/jgavlpInmj5vjgafjgY3jgZ/loLTlkIjjga/mloflrZfliJfjgpLov5TjgZfjgIHjgZ3jgYbjgafjgarjgYTloLTlkIjjga/kvovlpJbjgpLnmbrnlJ/jgZXjgZvjgotcclxuICAgICAqL1xyXG4gICAgY2hhbmdlRGF0ZUZvcm1hdChpbnB1dFZhbHVlIDpzdHJpbmcsIGZpZWxkVHlwZSA6c3RyaW5nLGZpZWxkQ29kZSA6c3RyaW5nLGV2ZW50IDphbnkpOiBzdHJpbmd7XHJcbiAgICAgICAgbGV0IGRhdGVUaW1lO1xyXG4gICAgICAgIGxldCBkYXRlO1xyXG5cclxuICAgICAgICAvL+aMv+WFpeOBmeOCi+WApOOCkmRhdGXlnovjgavlpInmj5tcclxuICAgICAgICBkYXRlID0gbmV3IERhdGUoaW5wdXRWYWx1ZSk7XHJcbiAgICAgICAgLy9kYXRl5Z6L5aSJ5o+b44Gn44GN44Gf44GL56K66KqNXHJcbiAgICAgICAgaWYoZGF0ZSAhPT0gdW5kZWZpbmVkICYmICFpc05hTihkYXRlLmdldERhdGUoKSkpe1xyXG5cclxuICAgICAgICAgICAgLy/ml6XmmYLjg5XjgqPjg7zjg6vjg4njga7loLTlkIjjgIHmmYLliLvjgYLjgorjga7ml6Xku5jlvaLlvI/lpInmj5tcclxuICAgICAgICAgICAgaWYoZmllbGRUeXBlID09PSBcIkRBVEVUSU1FXCIpe1xyXG4gICAgICAgICAgICAgICAgZGF0ZVRpbWUgPWRhdGUudG9JU09TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRlVGltZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy/ml6Xku5jjg5XjgqPjg7zjg6vjg4njga7loLTlkIjjgIHmmYLliLvjgarjgZfjga7ml6Xku5jjgavlvaLlvI/lpInmj5tcclxuICAgICAgICAgICAgLy9VVEPjga7mmYLliLvjgpLmjL/lhaXjgZfjgZ/jgYTloLTlkIjjgIFKU1TjgavlpInmj5vjgZnjgotcclxuICAgICAgICAgICAgbGV0IGRhdGVUaW1lTWlsbGlTZWNvbmQgPSBpbnB1dFZhbHVlLm1hdGNoKC8oXFxkezR9KS0oXFxkezJ9KS0oXFxkezJ9KVQoXFxkezJ9KTooXFxkezJ9KTooXFxkezJ9KS4oXFxkezIsM30pWiQvKTsvL+aZguWIu+WFpeOCiuOBrlVUQ+OBruaXpeS7mOW9ouW8jyjjg5/jg6rnp5IpXHJcbiAgICAgICAgICAgIGxldCBkYXRlVGltZU5vdEluY2x1ZGluZ01pbGxpU2Vjb25kcyA9IGlucHV0VmFsdWUubWF0Y2goLyhcXGR7NH0pLShcXGR7Mn0pLShcXGR7Mn0pVChcXGR7Mn0pOihcXGR7Mn0pOihcXGR7Mn0pWiQvKTsvL+aZguWIu+WFpeOCiuOBrlVUQ+OBruaXpeS7mOW9ouW8j1xyXG5cclxuICAgICAgICAgICAgaWYoZGF0ZVRpbWVNaWxsaVNlY29uZCAhPT0gbnVsbCB8fCBkYXRlVGltZU5vdEluY2x1ZGluZ01pbGxpU2Vjb25kcyAhPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAvL0pTVOOBq+WkieaPm1xyXG4gICAgICAgICAgICAgICAgbGV0IGpzdERhdGU9ZGF0ZS50b0xvY2FsZVN0cmluZyhcImphLUpQXCIsIHsgdGltZVpvbmU6IFwiQXNpYS9Ub2t5b1wiIH0pO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coanN0RGF0ZSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF0ZUFycmF5PWpzdERhdGUubWF0Y2goLyhcXGR7NH0pXFwvKFxcZHsxLDJ9KVxcLyhcXGR7MSwyfSkvKTsvLzTmoYHjga7mlbDlrZctMe+9njLmoYHjga7mlbDlrZctMe+9njLmoYHjga7mlbDlrZdcclxuICAgICAgICAgICAgICAgIGlmKGRhdGVBcnJheSAhPT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHllYXJJbmRleCA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1vbnRoSW5kZXggPSAyO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXlJbmRleCA9IDM7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGVGb3JtYXR0ZWQ9YCR7ZGF0ZUFycmF5W3llYXJJbmRleF19LSR7ZGF0ZUFycmF5W21vbnRoSW5kZXhdfS0ke2RhdGVBcnJheVtkYXlJbmRleF19YFxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRlRm9ybWF0dGVkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL1VUQ+aZguWIu+OBp+OBquOBhOWApOOCkuaMv+WFpeOBl+OBn+OBhOWgtOWQiOOAgeW5tOOAgeaciOOAgeaXpeOCkuaKveWHuuOBl+OAgeaciC3lubQt5pel44Gu5b2i5byP5aSJ5o+bXHJcbiAgICAgICAgICAgIGxldCBkYXRlQXJyYXk9aW5wdXRWYWx1ZS5tYXRjaCgvKFxcZHs0fSktKFxcZHsxLDJ9KS0oXFxkezEsMn0pJC8pOy8vNOahgeOBruaVsOWtly0x772eMuahgeOBruaVsOWtly0x772eMuahgeOBruaVsOWtl1xyXG4gICAgICAgICAgICBpZihkYXRlQXJyYXkgIT09IG51bGwpe1xyXG4gICAgICAgICAgICAgICAgbGV0IHllYXJJbmRleCA9IDE7XHJcbiAgICAgICAgICAgICAgICBsZXQgbW9udGhJbmRleCA9IDI7XHJcbiAgICAgICAgICAgICAgICBsZXQgZGF5SW5kZXggPSAzO1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGVGb3JtYXR0ZWQ9YCR7ZGF0ZUFycmF5W3llYXJJbmRleF19LSR7ZGF0ZUFycmF5W21vbnRoSW5kZXhdfS0ke2RhdGVBcnJheVtkYXlJbmRleF19YFxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGVGb3JtYXR0ZWQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXVsnZXJyb3InXSA9IFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njgavlhaXjgozjgojjgYbjgajjgZfjgZ/lgKTjga/jgIHnhKHlirnjgarml6Xku5jlvaLlvI/jgafjgZnjgIJcIjsgLy/jg6zjgrPjg7zjg4njgavjgqjjg6njg7zjgpLooajnpLpcclxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjgIxcIitmaWVsZENvZGUrXCLjgI1cIitcIuODleOCo+ODvOODq+ODieOBq+WFpeOCjOOCiOOBhuOBqOOBl+OBn+WApOOBr+OAgeeEoeWKueOBquaXpeS7mOW9ouW8j+OBp+OBmeOAguOAjOWApOOCkuaMv+WFpeOBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOWFpeWKm+WApOOBjOODleOCo+ODvOODq+ODieOCv+OCpOODlyjjg6njgrjjgqrjg5zjgr/jg7Pjg7vjg4njg63jg4Pjg5fjg4Djgqbjg7Pjg7vopIfmlbDpgbjmip7jg7vjg4njg63jg4Pjg5fjg4Djgqbjg7Mp44Gu6YG45oqe6IKi44Gr5a2Y5Zyo44GZ44KL5YCk44GL44OB44Kn44OD44Kv44GZ44KL6Zai5pWwXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRWYWx1ZSAtIOaMv+WFpeOBmeOCi+WApFxyXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gLeWFpeWKm+WApOOBjOacieWKueOBquWApOOBruWgtOWQiOOBr3RydWXjgpLov5TjgZfjgIHjgZ3jgYbjgafjgarjgYTloLTlkIjjga/kvovlpJbjgpLnmbrnlJ/jgZXjgZvjgotcclxuICAgICAqL1xyXG4gICAgY2hlY2tJbnB1dE9wdGlvbihpbnB1dFZhbHVlIDpzdHJpbmcsZmllbGRPcHRpb25zIDpzdHJpbmcgfCB1bmRlZmluZWQsZmllbGRDb2RlIDpzdHJpbmcsZXZlbnQgOmFueSk6IGJvb2xlYW4ge1xyXG5cclxuICAgICAgICAvL+WFpeWKm+WApOOBjOmBuOaKnuiCouOBq+WtmOWcqOOBmeOCi+WApOOBi+ODgeOCp+ODg+OCr+OBl+OAgeWtmOWcqOOBl+OBn+OCiXRydWXjgpLov5TjgZlcclxuICAgICAgICBpZihmaWVsZE9wdGlvbnMgIT09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgIGxldCBvcHRpb25zID0gT2JqZWN0LmtleXMoZmllbGRPcHRpb25zKTtcclxuICAgICAgICAgICAgZm9yKHZhciBvcHRpb25zSW5kZXggaW4gb3B0aW9ucyl7XHJcbiAgICAgICAgICAgICAgICBpZihvcHRpb25zW29wdGlvbnNJbmRleF0gPT09IGlucHV0VmFsdWUpe1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXVsnZXJyb3InXT1cIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44Gr44Gv44CB5a2Y5Zyo44GX44Gq44GE5YCk44KS5oy/5YWl44GX44KI44GG44Go44GX44Gf44Gf44KB44CB5Yem55CG44KS5Lit5pat44GX44G+44GX44Gf44CCXCI7XHJcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjgavjga/jgIHlrZjlnKjjgZfjgarjgYTlgKTjgpLmjL/lhaXjgZfjgojjgYbjgajjgZfjgZ/jgZ/jgoHjgIHlh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlhaXlipvlgKTjgYzjg5XjgqPjg7zjg6vjg4njgr/jgqTjg5co44Om44O844K244O86YG45oqeKeOBp+OAgeODpuODvOOCtuODvOaDheWgseOBq+WtmOWcqOOBmeOCi+WApOOBi+ODgeOCp+ODg+OCr+OBmeOCi+mWouaVsFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0VmFsdWUgLSDmjL/lhaXjgZnjgovlgKRcclxuICAgICAqIEByZXR1cm4ge3N0cmluZyB8IGJvb2xlYW59IOWFpeWKm+WApOOBjOeZu+mMsuOBleOCjOOBpuOBhOOCi+ODpuODvOOCtuODvOaDheWgseOBi+OCieimi+OBpOOBi+OBo+OBn+WgtOWQiOOAgXRydWXjgpLov5TjgZfjgIHopovjgaTjgYvjgonjgarjgYvjgaPjgZ/loLTlkIjjgIFmYWxzZeOCkui/lOOBmVxyXG4gICAgICovXHJcbiAgICBhc3luYyBzZXRJbnB1dFVzZXIoaW5wdXRWYWx1ZSA6YW55KTogUHJvbWlzZTxhbnkgfCBib29sZWFuPntcclxuXHJcbiAgICAgICAgLy/jg6bjg7zjgrbjg7zlkI3jgpLmoLzntI3jgZnjgovlpInmlbBcclxuICAgICAgICBsZXQgdXNlcnNOYW1lID0gW107XHJcblxyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgLy9BUEnjgafjg6bjg7zjgrbjg7zmg4XloLHjgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgY29uc3QgcmVzcCA9YXdhaXQga2ludG9uZS5hcGkoa2ludG9uZS5hcGkudXJsKCcvdjEvdXNlcnMnLCB0cnVlKSwgJ0dFVCcsIHtjb2RlczogaW5wdXRWYWx1ZS5qb2luKCcsJyl9KVxyXG4gICAgICAgICAgICBsZXQgdXNlcnNJbmZvID0gcmVzcC51c2VycztcclxuXHJcbiAgICAgICAgICAgIGlmICh1c2Vyc0luZm8ubGVuZ3RoICE9PSBpbnB1dFZhbHVlLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8v5YWl5Yqb44GV44KM44Gf44Ot44Kw44Kk44Oz5ZCN44GM44Om44O844K244O85oOF5aCx44Gr55m76Yyy44GV44KM44Gm44GE44KL5aC05ZCI44CB44Gd44Gu44Om44O844K244O85ZCN44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZGV4VXNlcnNJbmZvIGluIHVzZXJzSW5mbykge1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBpbmRleElucHV0VXNlciBpbiBpbnB1dFZhbHVlKXtcclxuICAgICAgICAgICAgICAgICAgICBpZih1c2Vyc0luZm9baW5kZXhVc2Vyc0luZm9dLmNvZGUgPT09IGlucHV0VmFsdWVbaW5kZXhJbnB1dFVzZXJdKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNlcnNOYW1lLnB1c2godXNlcnNJbmZvW2luZGV4VXNlcnNJbmZvXS5uYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8v44Om44O844K244O85ZCN44GM5Y+W5b6X44Gn44GN44Gf5aC05ZCI44CB44Ot44Kw44Kk44Oz5ZCN44Go44Om44O844K244O85ZCN44KS44OV44Kj44O844Or44OJ44Gr44K744OD44OI44GZ44KLXHJcbiAgICAgICAgICAgIGlmKHVzZXJzTmFtZSA9PT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWNhdGNoe1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB1c2Vyc05hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlhaXlipvlgKTjgYzjg5XjgqPjg7zjg6vjg4njgr/jgqTjg5co57WE57mU6YG45oqeKeOBp+OAgee1hOe5lOaDheWgseOBq+WtmOWcqOOBmeOCi+WApOOBi+ODgeOCp+ODg+OCr+OBmeOCi+mWouaVsFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGlucHV0VmFsdWUgLSDmjL/lhaXjgZnjgovlgKRcclxuICAgICAqIEByZXR1cm4ge3N0cmluZyB8IGJvb2xlYW59IOWFpeWKm+WApOOBjOeZu+mMsuOBleOCjOOBpuOBhOOCi+e1hOe5lOaDheWgseOBi+OCieimi+OBpOOBi+OBo+OBn+WgtOWQiOOAgXRydWXjgpLov5TjgZfjgIHopovjgaTjgYvjgonjgarjgYvjgaPjgZ/loLTlkIjjgIFmYWxzZeOCkui/lOOBmVxyXG4gICAgICovXHJcbiAgICBhc3luYyBzZXRJbnB1dE9yZ2FuaXphdGlvbihpbnB1dFZhbHVlIDpzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IGJvb2xlYW4+e1xyXG5cclxuICAgICAgICAvL+e1hOe5lOWQjeOCkuagvOe0jeOBmeOCi+WkieaVsFxyXG4gICAgICAgIGxldCBvcmdhbml6YXRpb25OYW1lO1xyXG4gICAgICAgIGNvbnN0IG9yZ2FuaXphdGlvbnNJbmZvQ29sdW1uSW5kZXg9MDtcclxuXHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAvL0FQSeOBp+e1hOe5lOaDheWgseOCkuWPluW+l+OBmeOCi1xyXG4gICAgICAgICAgICBjb25zdCByZXNwID1hd2FpdCBraW50b25lLmFwaShraW50b25lLmFwaS51cmwoJy92MS9vcmdhbml6YXRpb25zLmpzb24nLCB0cnVlKSwgJ0dFVCcsIHtjb2RlczpbaW5wdXRWYWx1ZSBdfSlcclxuXHJcbiAgICAgICAgICAgIC8v5YWl5Yqb44GV44KM44Gf57WE57mU44Kz44O844OJ44GM57WE57mU5oOF5aCx44Gr55m76Yyy44GV44KM44Gm44GE44KL5aC05ZCI44CB44Gd44Gu57WE57mU5ZCN44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcC5vcmdhbml6YXRpb25zW29yZ2FuaXphdGlvbnNJbmZvQ29sdW1uSW5kZXhdLmNvZGUgPT09IGlucHV0VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBvcmdhbml6YXRpb25OYW1lPXJlc3Aub3JnYW5pemF0aW9uc1tvcmdhbml6YXRpb25zSW5mb0NvbHVtbkluZGV4XS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy/ntYTnuZTlkI3jgYzlj5blvpfjgafjgY3jgZ/loLTlkIjjgIHntYTnuZTjgrPjg7zjg4njgajntYTnuZTlkI3jgpLjg5XjgqPjg7zjg6vjg4njgavjgrvjg4Pjg4jjgZnjgotcclxuICAgICAgICAgICAgaWYob3JnYW5pemF0aW9uTmFtZSA9PT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWNhdGNoe1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gb3JnYW5pemF0aW9uTmFtZTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOWFpeWKm+WApOOBjOODleOCo+ODvOODq+ODieOCv+OCpOODlyjjgrDjg6vjg7zjg5fpgbjmip4p44Gn44CB44Kw44Or44O844OX5oOF5aCx44Gr5a2Y5Zyo44GZ44KL5YCk44GL44OB44Kn44OD44Kv44GZ44KL6Zai5pWwXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRWYWx1ZSAtIOaMv+WFpeOBmeOCi+WApFxyXG4gICAgICogQHJldHVybiB7c3RyaW5nIHwgYm9vbGVhbn0g5YWl5Yqb5YCk44GM55m76Yyy44GV44KM44Gm44GE44KL44Kw44Or44O844OX5oOF5aCx44GL44KJ6KaL44Gk44GL44Gj44Gf5aC05ZCI44CBdHJ1ZeOCkui/lOOBl+OAgeimi+OBpOOBi+OCieOBquOBi+OBo+OBn+WgtOWQiOOAgWZhbHNl44KS6L+U44GZXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHNldElucHV0R3JvdXAoaW5wdXRWYWx1ZSA6c3RyaW5nKTogUHJvbWlzZTxzdHJpbmcgfCBib29sZWFuPntcclxuXHJcbiAgICAgICAgLy/jgrDjg6vjg7zjg5flkI3jgpLmoLzntI3jgZnjgovlpInmlbBcclxuICAgICAgICBsZXQgZ3JvdXBzTmFtZTtcclxuICAgICAgICBjb25zdCBncm91cHNJbmZvQ29sdW1uSW5kZXg9MDtcclxuXHJcbiAgICAgICAgdHJ5e1xyXG4gICAgICAgICAgICAvL0FQSeOBp+OCsOODq+ODvOODl+aDheWgseOCkuWPluW+l+OBmeOCi1xyXG4gICAgICAgICAgICBjb25zdCByZXNwID1hd2FpdCBraW50b25lLmFwaShraW50b25lLmFwaS51cmwoJy92MS9ncm91cHMuanNvbicsIHRydWUpLCAnR0VUJywge2NvZGVzOltpbnB1dFZhbHVlIF19KVxyXG5cclxuICAgICAgICAgICAgLy/lhaXlipvjgZXjgozjgZ/jgrDjg6vjg7zjg5fjgrPjg7zjg4njgYzjgrDjg6vjg7zjg5fmg4XloLHjgavnmbvpjLLjgZXjgozjgabjgYTjgovloLTlkIjjgIHjgZ3jga7jgrDjg6vjg7zjg5flkI3jgpLlj5blvpfjgZnjgotcclxuICAgICAgICAgICAgaWYgKHJlc3AuZ3JvdXBzW2dyb3Vwc0luZm9Db2x1bW5JbmRleF0uY29kZSA9PT0gaW5wdXRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgZ3JvdXBzTmFtZT1yZXNwLmdyb3Vwc1tncm91cHNJbmZvQ29sdW1uSW5kZXhdLm5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8v44Kw44Or44O844OX5ZCN44GM5Y+W5b6X44Gn44GN44Gf5aC05ZCI44CB44Kw44Or44O844OX44Kz44O844OJ44Go44Kw44Or44O844OX5ZCN44KS44OV44Kj44O844Or44OJ44Gr44K744OD44OI44GZ44KLXHJcbiAgICAgICAgICAgIGlmKGdyb3Vwc05hbWUgPT09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1jYXRjaHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGdyb3Vwc05hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDjg6bjg7zjgrbjg7zjgqrjg5bjgrjjgqfjgq/jg4jjgpLmjL/lhaXjgZnjgovloLTlkIjjgIHmjL/lhaXlhYjjg5XjgqPjg7zjg6vjg4njgavjgojjgaPjgabjgIHpganliIfjgarjgqrjg5bjgrjjgqfjgq/jg4jjga7lgKTjgpLlj5blvpfjgZfjgIHjgrvjg4Pjg4jjgZnjgotcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFZhbHVlIC3lhaXlipvjgZXjgozjgZ/lgKRcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvYmplY3RWYWx1ZSAt44Kq44OW44K444Kn44Kv44OI5aSJ5pWwXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gZmllbGRUeXBlIC3mjL/lhaXlhYjjg5XjgqPjg7zjg6vjg4njgr/jgqTjg5dcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBmaWVsZENvZGUgLeaMv+WFpeWFiOODleOCo+ODvOODq+ODieOCv+OCpOODl1xyXG4gICAgICogQHJldHVybiB7c3RyaW5nfSAt5oy/5YWl5YWI44OV44Kj44O844Or44OJ44Gr44KI44Gj44Gm44CB44Ot44Kw44Kk44Oz44Om44O844K244O844Kq44OW44K444Kn44Kv44OI44Gu5L2V44Gu5YCk44KS6L+U44GZ44GL44CB5aSJ44KP44KLXHJcbiAgICAgKi9cclxuICAgIHNldFZhbHVlT2ZVc2VyT2JqZWN0KGlucHV0VmFsdWUgOmFueSxvYmplY3RWYWx1ZSA6YW55LGZpZWxkVHlwZSA6IGFueSxmaWVsZENvZGUgOiBhbnkpOiBhbnl7XHJcblxyXG4gICAgICAgIC8v5aSJ5pWw44Gu5YCkXHJcbiAgICAgICAgbGV0IHZhcmlhYmxlVmFsdWUgPSBbXTtcclxuXHJcbiAgICAgICAgLy/jg6bjg7zjgrbjg7zpgbjmip7jg5XjgqPjg7zjg6vjg4njgavmjL/lhaXmmYLjgIHjg6bjg7zjgrbjg7zjgqrjg5bjgrjjgqfjgq/jg4jjga5jb2Rl44KS5Luj5YWl44GZ44KLXHJcbiAgICAgICAgaWYoZmllbGRUeXBlLmluY2x1ZGVzKCdVU0VSX1NFTEVDVCcpKXtcclxuICAgICAgICAgICAgLy/lpInmlbDjga7lgKTlj5blvpdcclxuICAgICAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkob2JqZWN0VmFsdWUpKXtcclxuICAgICAgICAgICAgICAgIHZhcmlhYmxlVmFsdWUucHVzaChvYmplY3RWYWx1ZS5jb2RlKTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBmb3IobGV0IGk9MDtpPG9iamVjdFZhbHVlLmxlbmd0aDtpKyspe1xyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlVmFsdWUucHVzaChvYmplY3RWYWx1ZVtpXS5jb2RlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgLy/jg6bjg7zjgrbjg7zpgbjmip7jg5XjgqPjg7zjg6vjg4nku6XlpJbjgavmjL/lhaXmmYLjgIHjg6bjg7zjgrbjg7zjgqrjg5bjgrjjgqfjgq/jg4jjga7lgKTjga7mjIflrprjgYzjgYLjgozjgbDjgIHjgZ3jga7lgKTjgpLku6PlhaXjgZnjgotcclxuICAgICAgICAgICAgaWYoaW5wdXRWYWx1ZS5pbmNsdWRlcygnLm5hbWUnKSB8fCBpbnB1dFZhbHVlLmluY2x1ZGVzKCcuZW1haWwnKSB8fCBpbnB1dFZhbHVlLmluY2x1ZGVzKCcuZW1wbG95ZWVOdW1iZXInKVxyXG4gICAgICAgICAgICAgICAgfHwgaW5wdXRWYWx1ZS5pbmNsdWRlcygnLmV4dGVuc2lvbk51bWJlcicpIHx8IGlucHV0VmFsdWUuaW5jbHVkZXMoJy5pZCcpIHx8IGlucHV0VmFsdWUuaW5jbHVkZXMoJy5pc0d1ZXN0Jyl8fCBpbnB1dFZhbHVlLmluY2x1ZGVzKCcudGltZXpvbmUnKVxyXG4gICAgICAgICAgICAgICAgfHwgaW5wdXRWYWx1ZS5pbmNsdWRlcygnLmxhbmd1YWdlJykgfHwgaW5wdXRWYWx1ZS5pbmNsdWRlcygnLm1vYmlsZVBob25lJykgfHwgaW5wdXRWYWx1ZS5pbmNsdWRlcygnLnBob25lJykgfHwgaW5wdXRWYWx1ZS5pbmNsdWRlcygnLnVybCcpKXtcclxuXHJcbiAgICAgICAgICAgICAgICAvL+WApOOCkuaMv+WFpeOBmeOCi+WkieaVsOWQjeWPluW+l1xyXG4gICAgICAgICAgICAgICAgbGV0IG9iamVjdFByb3BlcnR5TmFtZSA9IGlucHV0VmFsdWUuc3Vic3RyKGlucHV0VmFsdWUuaW5kZXhPZignLicpICsgMSk7XHJcbiAgICAgICAgICAgICAgICBpZighQXJyYXkuaXNBcnJheShvYmplY3RWYWx1ZSkpe1xyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlVmFsdWUucHVzaChvYmplY3RWYWx1ZVtvYmplY3RQcm9wZXJ0eU5hbWVdKTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wO2k8b2JqZWN0VmFsdWUubGVuZ3RoO2krKyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlVmFsdWUucHVzaChvYmplY3RWYWx1ZVtpXVtvYmplY3RQcm9wZXJ0eU5hbWVdKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL+ODpuODvOOCtuODvOmBuOaKnuODleOCo+ODvOODq+ODieS7peWkluOBq+aMv+WFpeaZguOAgeODpuODvOOCtuODvOOCquODluOCuOOCp+OCr+ODiOOBruWApOOBruaMh+WumuOBjOOBquOBkeOCjOOBsOOAgWNvZGXjgpLku6PlhaXjgZnjgotcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBpZighQXJyYXkuaXNBcnJheShvYmplY3RWYWx1ZSkpe1xyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlVmFsdWUucHVzaChvYmplY3RWYWx1ZS5jb2RlKTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wO2k8b2JqZWN0VmFsdWUubGVuZ3RoO2krKyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlVmFsdWUucHVzaChvYmplY3RWYWx1ZVtpXS5jb2RlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmKHZhcmlhYmxlVmFsdWUgPT09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44OV44Kj44O844Or44OJ44Gr5YWl44KM44KI44GG44Go44GX44Gf5aSJ5pWw44Gv44CB54Sh5Yq544Gq5YWl5Yqb5b2i5byP44Gn44GZ44CCXCIpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHZhcmlhYmxlVmFsdWU7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvKipcclxuICAgICAqIOOCouOCr+OCt+ODp+ODs+OBruWun+ihjOOCkuWRvOOBs+WHuuOBmVxyXG4gICAgICogQHBhcmFtIGFjdGlvbk5vZGVcclxuICAgICAqIEBwYXJhbSBldmVudFxyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSxjb250ZXh0OklDb250ZXh0KTpQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuXHJcbiAgICAgICAgbGV0IHJlc3VsdD17XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHMgPSBhY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICBpZiAoISgnZmllbGQnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpICYmICEoJ3ZhbHVlJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBmaWVsZENvbHVtbkluZGV4PTE7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlQ29sdW1uSW5kZXg9MztcclxuXHJcbiAgICAgICAgICAgIC8v44OX44Ot44OR44OG44Kj44Gn6YG45oqe44GV44KM44Gf44OV44Kj44O844Or44OJXHJcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkPXRoaXMuYWN0aW9uUHJvcHNbZmllbGRDb2x1bW5JbmRleF0ucHJvcHMubW9kZWxWYWx1ZS50eXBlO1xyXG4gICAgICAgICAgICAvL+ODl+ODreODkeODhuOCo+OBruaMv+WFpeOBmeOCi+WApFxyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZT10aGlzLmFjdGlvblByb3BzW3ZhbHVlQ29sdW1uSW5kZXhdLnByb3BzLm1vZGVsVmFsdWU7XHJcblxyXG4gICAgICAgICAgICAvL+adoeS7tuW8j+OBrue1kOaenOOCkuWPluW+l1xyXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb25SZXN1bHQgPSB0aGlzLmdldENvbmRpdGlvblJlc3VsdChjb250ZXh0KTtcclxuICAgICAgICAgICAgaWYoIWNvbmRpdGlvblJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvL+ODl+ODreODkeODhuOCo+OBruWApOOCkuaMv+WFpeOBmeOCi+ODleOCo+ODvOODq+ODieOBjOacqumBuOaKnuOBruWgtOWQiOOAgeS+i+WkluOCkueZuueUn+OBleOBm+OCi1xyXG4gICAgICAgICAgICBpZihmaWVsZCA9PT0gbnVsbCl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjgafjgIHlgKTjgpLmjL/lhaXjgZnjgovjg5XjgqPjg7zjg6vjg4njgYzmjIflrprjgZXjgozjgabjgYTjgarjgYvjgaPjgZ/jgZ/jgoHjgIHlh6bnkIbjgYzkuK3mlq3jgZXjgozjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8v44OX44Ot44OR44OG44Kj44Gu5YCk44KS5oy/5YWl44GZ44KL44OV44Kj44O844Or44OJ44GM6Z2e5a++5b+c44OV44Kj44O844Or44OJ44Gu5aC05ZCI44CB5L6L5aSW44KS55m655Sf44GV44Gb44KLXHJcbiAgICAgICAgICAgIC8v5re75LuY44OV44Kh44Kk44Or44O744OG44O844OW44Or44O744Kr44OG44K044Oq44O844O744K544OG44O844K/44K544O75L2c5oiQ6ICF44O75pu05paw6ICF44O75L2c5qWt6ICF44O744Oq44OT44K444On44Oz55Wq5Y+344O744Os44Kz44O844OJ55Wq5Y+344O744Os44Kz44O844OJSUTjg7voqIjnrpfjg7vkvZzmiJDml6XmmYLjg7vmm7TmlrDml6XmmYLjg5XjgqPjg7zjg6vjg4njgYzpgbjmip7jgZXjgozjgabjgYTjgovloLTlkIjjgIHkvovlpJbjgpLnmbrnlJ/jgZXjgZvjgotcclxuICAgICAgICAgICAgaWYoZmllbGQgPT09IFwiRklMRVwiIHx8IGZpZWxkID09PSBcIlNVQlRBQkxFXCIgfHwgZmllbGQgPT09IFwiQ0FURUdPUllcIiB8fCBmaWVsZCA9PT0gXCJTVEFUVVNcIlxyXG4gICAgICAgICAgICAgICAgICAgIHx8IGZpZWxkID09PSBcIlNUQVRVU19BU1NJR05FRVwiIHx8IGZpZWxkID09PSBcIkNSRUFUT1JcIiB8fCBmaWVsZCA9PT0gXCJNT0RJRklFUlwiIHx8IGZpZWxkID09PSBcIl9fUkVWSVNJT05fX1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IGZpZWxkID09PSBcIlJFQ09SRF9OVU1CRVJcInx8IGZpZWxkID09PSBcIl9fSURfX1wiIHx8IGZpZWxkID09PVwiQ0FMQ1wiIHx8IGZpZWxkID09PSBcIkNSRUFURURfVElNRVwiIHx8IGZpZWxkID09PSBcIlVQREFURURfVElNRVwiICl7XHJcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjgafjgIHpgbjmip7jgZXjgozjgZ/jg5XjgqPjg7zjg6vjg4njga/jgIHlgKTjgpLmjL/lhaXjgZnjgovjgrPjg7Pjg53jg7zjg43jg7Pjg4jjgafjga/pnZ7lr77lv5zjga7jg5XjgqPjg7zjg6vjg4njga7jgZ/jgoHjgIHlh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8v5pei5a6a44Gu44OX44Ot44OR44OG44Kj44Gu44Kk44Oz44K/44O844OV44Kn44O844K544G45aSJ5o+b44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlIGFzIElJbnNlcnRWYWx1ZVByb3BzO1xyXG5cclxuICAgICAgICAgICAgLy/jg5fjg63jg5Hjg4bjgqPjga7mjL/lhaXjgZnjgovlgKTjgpLlj5blvpdcclxuICAgICAgICAgICAgbGV0IGZpZWxkVmFsdWUgPSB0aGlzLnByb3BzLnZhbHVlO1xyXG4gICAgICAgICAgICAvL+ODleOCo+ODvOODq+ODieOBrueorumhnuOCkuWPluW+l1xyXG4gICAgICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSB0aGlzLnByb3BzLmZpZWxkLnR5cGU7XHJcbiAgICAgICAgICAgIC8v44OV44Kj44O844Or44OJ44GM5b+F6aCI6aCF55uu44Gq44Gu44GL5Y+W5b6XXHJcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkUmVxdWlyZWQ9dGhpcy5wcm9wcy5maWVsZC5yZXF1aXJlZDtcclxuICAgICAgICAgICAgLy/mjL/lhaXjgZnjgovjg5XjgqPjg7zjg6vjg4njga7jgrPjg7zjg4njgpLlj5blvpdcclxuICAgICAgICAgICAgY29uc3QgZmllbGRDb2RlPXRoaXMucHJvcHMuZmllbGQuY29kZTtcclxuICAgICAgICAgICAgLy/mjL/lhaXjgZnjgovlgKTjga7lvaLlvI/vvIjmiYvlhaXlipvjgYvlpInmlbDvvInjgpLlj5blvpdcclxuICAgICAgICAgICAgY29uc3QgaW5zZXJ0VmFsdWVUeXBlPXRoaXMucHJvcHMuc2hvdztcclxuICAgICAgICAgICAgLy/jg6njgrjjgqrjg5zjgr/jg7Pjg7vjg4Hjgqfjg4Pjgq/jg5zjg4Pjgq/jgrnjg7vopIfmlbDpgbjmip7jg7vjg4njg63jg4Pjg5fjg4Djgqbjg7Pjga7pgbjmip7ogqLjgpLlj5blvpdcclxuICAgICAgICAgICAgbGV0IGZpZWxkT3B0aW9ucyA9dGhpcy5wcm9wcy5maWVsZC5vcHRpb25zO1xyXG4gICAgICAgICAgICAvL+WkieaVsOOBruWApOOCkuagvOe0jeOBmeOCi1xyXG4gICAgICAgICAgICBsZXQgdmFyaWFibGVWYWx1ZSA6YW55O1xyXG4gICAgICAgICAgICAvL+aMv+WFpeOBmeOCi+WApOOCkuagvOe0jeOBmeOCi1xyXG4gICAgICAgICAgICBsZXQgZmllbGRWYWx1ZUFycmF5ID0gW107XHJcbiAgICAgICAgICAgIGxldCBvYmplY3RWYWx1ZSA6YW55O1xyXG4gICAgICAgICAgICBsZXQgbm90SW5wdXRFcnJvcjtcclxuXHJcbiAgICAgICAgICAgIC8v5aSJ5pWw44Gu5aC05ZCI44CB5YCk44GM5Y+W5b6X44Gn44GN44KL44GL44OB44Kn44OD44KvXHJcbiAgICAgICAgICAgIGlmKGluc2VydFZhbHVlVHlwZSA9PT0gXCLlpInmlbBcIiAmJiBjb25kaXRpb25SZXN1bHQpe1xyXG5cclxuICAgICAgICAgICAgICAgIC8v5aSJ5pWw44Gu5YCk44KS5ZG844Gz5Ye644GX44Gm5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgICAgICBjb25zdCBnZXRDb250ZXh0VmFyQnlQYXRoID0gKG9iajogYW55LCBwYXRoOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGF0aC5zcGxpdChcIi5cIikucmVkdWNlKChvLCBrKSA9PiAobyB8fCB7fSlba10sIG9iaik7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgLy/jgqrjg5bjgrjjgqfjgq/jg4jlpInmlbDjgafjgIHlgKTjga7mjIflrprjgYzjgYLjgovloLTlkIjjga/jgIHlpInmlbDlkI3jga7jgb/lj5blvpdcclxuICAgICAgICAgICAgICAgIHZhciB2YXJpYWJsZXNOYW1lID0gZmllbGRWYWx1ZS5zdWJzdHIoMCwgZmllbGRWYWx1ZS5pbmRleE9mKCcuJykpO1xyXG4gICAgICAgICAgICAgICAgaWYodmFyaWFibGVzTmFtZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgLy/lpInmlbDjga7lgKTlj5blvpdcclxuICAgICAgICAgICAgICAgICAgICBvYmplY3RWYWx1ZSA9IGdldENvbnRleHRWYXJCeVBhdGgoY29udGV4dC52YXJpYWJsZXMsdmFyaWFibGVzTmFtZSlcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIC8v5aSJ5pWw44Gu5YCk5Y+W5b6XXHJcbiAgICAgICAgICAgICAgICAgICAgb2JqZWN0VmFsdWUgPSBnZXRDb250ZXh0VmFyQnlQYXRoKGNvbnRleHQudmFyaWFibGVzLGZpZWxkVmFsdWUpXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy/mloflrZfliJflnovjga7jg5XjgqPjg7zjg6vjg4nku6XlpJbjgavjgIHnqbrnmb3mloflrZfjga7lpInmlbDjga7lgKTjgpLmjL/lhaXjgZnjgovloLTlkIjjgIHjgqjjg6njg7zjgpLlh7rjgZlcclxuICAgICAgICAgICAgICAgIGlmKG9iamVjdFZhbHVlID09PSBcIlwiIHx8IG9iamVjdFZhbHVlID09PSBudWxsKXtcclxuICAgICAgICAgICAgICAgICAgICBpZihmaWVsZFR5cGUgPT09IFwiTlVNQkVSXCIgfHwgZmllbGRUeXBlID09PSBcIkRBVEVcIiB8fCBmaWVsZFR5cGUgPT09IFwiREFURVRJTUVcIiB8fCBmaWVsZFR5cGUgPT09IFwiVElNRVwiIHx8IGZpZWxkVHlwZSA9PT0gXCJVU0VSX1NFTEVDVFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHx8IGZpZWxkVHlwZSA9PT0gXCJPUkdBTklaQVRJT05fU0VMRUNUXCIgfHwgZmllbGRUeXBlID09PSBcIkdST1VQX1NFTEVDVFwiIHx8IGZpZWxkVHlwZSA9PT0gXCJSQURJT19CVVRUT05cIiB8fCBmaWVsZFR5cGUgPT09IFwiRFJPUF9ET1dOXCIgfHwgZmllbGRUeXBlID09PSBcIkNIRUNLX0JPWFwiIHx8IGZpZWxkVHlwZSA9PT0gXCJNVUxUSV9TRUxFQ1RcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIuOAjFwiK2ZpZWxkQ29kZStcIuOAjVwiK1wi44OV44Kj44O844Or44OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gf5aSJ5pWw44Gv44CB5YCk44GMbnVsbOOBruOBn+OCgeOAgeWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy/jgqrjg5bjgrjjgqfjgq/jg4jlpInmlbDjga7loLTlkIjjgIHjg5fjg63jg5Hjg4bjgqPjgpLlj5blvpfjgZfjgIHkvZXjga7jgqrjg5bjgrjjgqfjgq/jg4jlpInmlbDjgYvliKTmlq3jgZnjgotcclxuICAgICAgICAgICAgICAgIGlmKG9iamVjdFZhbHVlICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3RWYWx1ZSA9PT0gJ29iamVjdCcpe1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvYmplY3RQcm9wZXJ0aWVzPVtdXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmKG9iamVjdFZhbHVlLmxlbmd0aCA+IDApe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RQcm9wZXJ0aWVzPU9iamVjdC5rZXlzKG9iamVjdFZhbHVlWzBdKTtcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0UHJvcGVydGllcyA9IE9iamVjdC5rZXlzKG9iamVjdFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8o44Ot44Kw44Kk44Oz44Om44O844K244O844O75YCk5Y+W5b6X44Gu44Kz44Oz44Od44O844ON44Oz44OI44GL44KJ44GuKeODpuODvOOCtuODvOOCquODluOCuOOCp+OCr+ODiOOCkuaMv+WFpeaZguOAgeaMv+WFpeWFiOODleOCo+ODvOODq+ODieOBq+OCiOOBo+OBpuOAgeWApOOCkuaMh+WumuOBmeOCi1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKG9iamVjdFByb3BlcnRpZXMuaW5jbHVkZXMoJ2NvZGUnKSAmJiBvYmplY3RQcm9wZXJ0aWVzLmluY2x1ZGVzKCduYW1lJykpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RWYWx1ZT10aGlzLnNldFZhbHVlT2ZVc2VyT2JqZWN0KGZpZWxkVmFsdWUsb2JqZWN0VmFsdWUsZmllbGRUeXBlLGZpZWxkQ29kZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+ODpuODvOOCtuODvOOCquODluOCuOOCp+OCr+ODiOOBi+OCieWPluW+l+OBl+OBn+WApOOCkuOAgWZpZWxkVmFsdWVBcnJheeOBq+S7o+WFpVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIG9iamVjdFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbHVlQXJyYXkucHVzaCh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAvL+OCquODluOCuOOCp+OCr+ODiOWkieaVsOOBp+OBquOBhOWgtOWQiOOAgeWkieaVsOOCkmZpZWxkVmFsdWVBcnJheeOBq+S7o+WFpVxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlVmFsdWUgPSBjb250ZXh0LnZhcmlhYmxlc1tmaWVsZFZhbHVlXTtcclxuICAgICAgICAgICAgICAgICAgICBmaWVsZFZhbHVlQXJyYXlbMF0gPSB2YXJpYWJsZVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8v5aSJ5pWw44GMZmllbGRWYWx1ZUFycmF544Gr5Luj5YWl44Gn44GN44Gq44GL44Gj44Gf5aC05ZCI44CB44Ko44Op44O844KS5Ye644GZXHJcbiAgICAgICAgICAgICAgICBpZihmaWVsZFZhbHVlQXJyYXkgPT09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwi44CMXCIrZmllbGRDb2RlK1wi44CNXCIrXCLjg5XjgqPjg7zjg6vjg4njgavlhaXjgozjgojjgYbjgajjgZfjgZ/lpInmlbDjga/jgIHnhKHlirnjgarlhaXlipvlvaLlvI/jgafjgZnjgIJcIik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy/lpInmlbDjga7lgKTjgavjgqjjg6njg7zvvIjnqbrmloflrZfjg7vnqbrnmb3mloflrZfjga7mt7flhaXvvInjgYzjgarjgYTjgZPjgajjgpLjg4Hjgqfjg4Pjgq/jgZnjgotcclxuICAgICAgICAgICAgICAgIG5vdElucHV0RXJyb3I9dGhpcy5jaGVja1ZhcmlhYmxlVmFsdWVCbGFuayhmaWVsZFR5cGUsZmllbGRWYWx1ZUFycmF5LGZpZWxkQ29kZSxmaWVsZFJlcXVpcmVkLGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgIC8v5omL5YWl5Yqb44Gu5aC05ZCI44CB44OX44Ot44OR44OG44Kj5oy/5YWl44GZ44KL5YCk44KSZmllbGRBcnJheeOBq+S7o+WFpVxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIGZpZWxkVmFsdWVBcnJheS5wdXNoKGZpZWxkVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgLy/lhaXlipvjgqjjg6njg7zvvIjnqbrnmb3mloflrZfjga7mt7flhaXvvInjgYzjgarjgYTjgZPjgajjgpLjg4Hjgqfjg4Pjgq9cclxuICAgICAgICAgICAgICAgIG5vdElucHV0RXJyb3I9dGhpcy5jaGVja0lucHV0VmFsdWVCbGFuayhmaWVsZFR5cGUsZmllbGRWYWx1ZSxmaWVsZENvZGUsZmllbGRSZXF1aXJlZCxldmVudCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8v5b2i5byP5aSJ5o+b44CB5Z6L5aSJ5o+b44GX44Gf5YCk44KS5qC857SN44GZ44KL5aSJ5pWwXHJcbiAgICAgICAgICAgIGxldCBjb3JyZWN0Rm9ybWF0dGVkVmFsdWUgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgIC8v5b2i5byP5aSJ5o+b44CB5Z6L5aSJ5o+b44GX44Gf5YCk44KS5qC857SN44GZ44KL6YWN5YiXXHJcbiAgICAgICAgICAgIGxldCBjb3JyZWN0VmFsdWVzIDphbnlbXSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgLy/mnaHku7blvI/jga7ntZDmnpzjgYx0cnVl44CB5YWl5Yqb44Ko44Op44O877yI56m655m95paH5a2X44Gu5re35YWl77yJ44GM44Gq44GE5aC05ZCI44CB5oy/5YWl44GZ44KL5YCk44KS44OV44Kj44O844Or44OJ44K/44Kk44OX5Yil44Gr44OB44Kn44OD44Kv44GZ44KLXHJcbiAgICAgICAgICAgIGlmKGNvbmRpdGlvblJlc3VsdCAmJiBub3RJbnB1dEVycm9yKXtcclxuXHJcbiAgICAgICAgICAgICAgICAvL+aWh+Wtl+WIl+Wei+OBruODleOCo+ODvOODq+ODieOBq+aMv+WFpeOBl+OCiOOBhuOBqOOBl+OBpuOBhOOCi+WApOOBjOmBqeWIh+OBruWgtOWQiOOAgWNvcnJlY3RGb3JtYXR0ZWRWYWx1ZeOBq+S7o+WFpeOBmeOCi1xyXG4gICAgICAgICAgICAgICAgaWYoZmllbGRUeXBlID09PSBcIlNJTkdMRV9MSU5FX1RFWFRcIiB8fCBmaWVsZFR5cGUgPT09IFwiTVVMVElfTElORV9URVhUXCIgfHwgZmllbGRUeXBlID09PSBcIlJJQ0hfVEVYVFwiIHx8IGZpZWxkVHlwZSA9PT0gXCJMSU5LXCIgKXtcclxuICAgICAgICAgICAgICAgICAgICBjb3JyZWN0Rm9ybWF0dGVkVmFsdWUgPSBmaWVsZFZhbHVlQXJyYXkuam9pbignLCcpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8v5pWw5YCk5Z6L44Gu44OV44Kj44O844Or44OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gm44GE44KL5YCk44GM6YGp5YiH44Gu5aC05ZCI44CB5pWw5YCk5Z6L44Gr5Z6L5aSJ5o+b44GX44GmY29ycmVjdEZvcm1hdHRlZFZhbHVl44Gr5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihmaWVsZFR5cGUgPT09IFwiTlVNQkVSXCIgKXtcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmNoZWNrSW5wdXROdW1iZXIoZmllbGRWYWx1ZUFycmF5WzBdLGZpZWxkQ29kZSxldmVudCkpey8v5YWl5Yqb5YCk44OB44Kn44OD44KvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RGb3JtYXR0ZWRWYWx1ZSA9IE51bWJlcihmaWVsZFZhbHVlQXJyYXlbMF0pOy8v5Z6L5aSJ5o+bXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8v5pel5LuY44O75pel5pmC5Z6L44Gu44OV44Kj44O844Or44OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gm44GE44KL5YCk44GM6YGp5YiH44Gu5aC05ZCI44CB5oyH5a6a44Gu5pel5LuY44O75pel5pmC44Gr5b2i5byP5aSJ5o+b44GX44GmY29ycmVjdEZvcm1hdHRlZFZhbHVl44Gr5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihmaWVsZFR5cGUgPT09IFwiREFURVwiIHx8IGZpZWxkVHlwZSA9PT0gXCJEQVRFVElNRVwiICl7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYodGhpcy5jaGVja0lucHV0RGF0ZShmaWVsZFZhbHVlQXJyYXlbMF0sZmllbGRDb2RlLGV2ZW50KSl7Ly/lhaXlipvlgKTjg4Hjgqfjg4Pjgq9cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGZvcm1hdHRlZERhdGUgPSB0aGlzLmNoYW5nZURhdGVGb3JtYXQoZmllbGRWYWx1ZUFycmF5WzBdLGZpZWxkVHlwZSxmaWVsZENvZGUsZXZlbnQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGZvcm1hdHRlZERhdGUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVjdEZvcm1hdHRlZFZhbHVlID0gZm9ybWF0dGVkRGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8v5pmC5Yi744OV44Kj44O844Or44OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gm44GE44KL5YCk44GM6YGp5YiH44Gu5aC05ZCI44CBY29ycmVjdEZvcm1hdHRlZFZhbHVl44Gr5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihmaWVsZFR5cGUgPT09IFwiVElNRVwiKXtcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmNoZWNrSW5wdXRUaW1lKGZpZWxkVmFsdWVBcnJheVswXSxmaWVsZENvZGUsZXZlbnQpKXsvL+WFpeWKm+WApOODgeOCp+ODg+OCr1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0Rm9ybWF0dGVkVmFsdWUgPSBmaWVsZFZhbHVlQXJyYXlbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8v44Op44K444Kq44Oc44K/44Oz44O744OJ44Ot44OD44OX44OA44Km44Oz44Gu44OV44Kj44O844Or44OJ44Gu6YG45oqe6IKi44Go5YWl5Yqb5YCk44GM5LiA6Ie044GX44Gf5aC05ZCI44CBY29ycmVjdEZvcm1hdHRlZFZhbHVl44Gr5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihmaWVsZFR5cGUgPT09IFwiUkFESU9fQlVUVE9OXCIgfHwgZmllbGRUeXBlID09PSBcIkRST1BfRE9XTlwiKXtcclxuICAgICAgICAgICAgICAgICAgICBpZih0aGlzLmNoZWNrSW5wdXRPcHRpb24oZmllbGRWYWx1ZUFycmF5WzBdLGZpZWxkT3B0aW9ucyxmaWVsZENvZGUsZXZlbnQpKXsvL+WFpeWKm+WApOODgeOCp+ODg+OCr1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JyZWN0Rm9ybWF0dGVkVmFsdWUgPSBmaWVsZFZhbHVlQXJyYXlbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8v44OB44Kn44OD44Kv44Oc44OD44Kv44K544O76KSH5pWw6YG45oqe44Gu44OV44Kj44O844Or44OJ44Gu6YG45oqe6IKi44Go5YWl5Yqb5YCk44GM5LiA6Ie044GX44Gf5aC05ZCI44CBY29ycmVjdFZhbHVlc+OBrumFjeWIl+OBq+S7o+WFpeOBmeOCi1xyXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoZmllbGRUeXBlID09PSBcIkNIRUNLX0JPWFwiIHx8IGZpZWxkVHlwZSA9PT0gXCJNVUxUSV9TRUxFQ1RcIiApe1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKHRoaXMuY2hlY2tJbnB1dE9wdGlvbihmaWVsZFZhbHVlQXJyYXlbMF0sZmllbGRPcHRpb25zLGZpZWxkQ29kZSxldmVudCkpey8v5YWl5Yqb5YCk44OB44Kn44OD44KvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RWYWx1ZXNbMF0gPSBmaWVsZFZhbHVlQXJyYXlbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8v44Om44O844K244O85oOF5aCx44OV44Kj44O844OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gf5YCk44GM6YGp5YiH44Gq5aC05ZCI44CBY29ycmVjdFZhbHVlcyjphY3liJcp44Gr5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihmaWVsZFR5cGUgPT09IFwiVVNFUl9TRUxFQ1RcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgLy/mjL/lhaXjgZnjgovlgKTjgYzjg6bjg7zjgrbjg7zmg4XloLHjgYvjgonopovjgaTjgYvjgozjgbDjgIHjg6bjg7zjgrbjg7zlkI3jgpLmoLzntI1cclxuICAgICAgICAgICAgICAgICAgICBsZXQgdXNlcnNOYW1lPWF3YWl0IHRoaXMuc2V0SW5wdXRVc2VyKGZpZWxkVmFsdWVBcnJheSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8v44Om44O844K244O85ZCN44GM5qC857SN44Gn44GN44Gm44GE44KL5aC05ZCI44CB44Ot44Kw44Kk44Oz5ZCN44Go44Om44O844K244O85ZCN44KSY29ycmVjdFZhbHVlc++8iOmFjeWIl++8ieOBq+S7o+WFpeOBmeOCi1xyXG4gICAgICAgICAgICAgICAgICAgIGlmKCF1c2Vyc05hbWUpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXVsnZXJyb3InXT1cIuODpuODvOOCtuODvOmBuOaKnuOBq+OAgeaMv+WFpeOBl+OCiOOBhuOBqOOBl+OBn+ODpuODvOOCtuODvOaDheWgseOBr+imi+OBpOOBi+OCiuOBvuOBm+OCk+OBp+OBl+OBn+OAguOAjOWApOOCkuaMv+WFpeOBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLjg6bjg7zjgrbjg7zpgbjmip7jgavjgIHmjL/lhaXjgZfjgojjgYbjgajjgZfjgZ/jg6bjg7zjgrbjg7zmg4XloLHjga/opovjgaTjgYvjgorjgb7jgZvjgpPjgafjgZfjgZ/jgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGluZGV4SW5wdXRVc2VyIGluIGZpZWxkVmFsdWVBcnJheSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RWYWx1ZXMucHVzaCh7IGNvZGU6IGZpZWxkVmFsdWVBcnJheVtpbmRleElucHV0VXNlcl0sIG5hbWU6IHVzZXJzTmFtZVtpbmRleElucHV0VXNlcl0gfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8v57WE57mU5oOF5aCx44OV44Kj44O844OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gf5YCk44GM6YGp5YiH44Gq5aC05ZCI44CBY29ycmVjdEZvcm1hdHRlZFZhbHVl44Gr5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihmaWVsZFR5cGUgPT09IFwiT1JHQU5JWkFUSU9OX1NFTEVDVFwiKXtcclxuICAgICAgICAgICAgICAgICAgICAvL+aMv+WFpeOBmeOCi+WApOOBjOe1hOe5lOaDheWgseOBi+OCieimi+OBpOOBi+OCjOOBsOOAgee1hOe5lOWQjeOCkuagvOe0jVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcmdhbml6YXRpb25zPWF3YWl0IHRoaXMuc2V0SW5wdXRPcmdhbml6YXRpb24oZmllbGRWYWx1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8v57WE57mU5ZCN44GM5qC857SN44Gn44GN44Gm44GE44KL5aC05ZCI44CB57WE57mU44Kz44O844OJ44Go57WE57mU5ZCN44KSY29ycmVjdEZvcm1hdHRlZFZhbHVl44Gr5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIW9yZ2FuaXphdGlvbnMpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXVsnZXJyb3InXT1cIue1hOe5lOmBuOaKnuODleOCo+ODvOODq+ODieOBq+OAgeaMv+WFpeOBl+OCiOOBhuOBqOOBl+OBn+e1hOe5lOaDheWgseOBr+imi+OBpOOBi+OCiuOBvuOBm+OCk+OBp+OBl+OBn+OAguOAjOWApOOCkuaMv+WFpeOBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCLntYTnuZTpgbjmip7jg5XjgqPjg7zjg6vjg4njgavjgIHmjL/lhaXjgZfjgojjgYbjgajjgZfjgZ/ntYTnuZTmg4XloLHjga/opovjgaTjgYvjgorjgb7jgZvjgpPjgafjgZfjgZ/jgILjgIzlgKTjgpLmjL/lhaXjgZnjgovjgI3jgrPjg7Pjg53jg7zjg43jg7Pjg4jjga7lh6bnkIbjgpLkuK3mlq3jgZfjgb7jgZfjgZ/jgIJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcnJlY3RGb3JtYXR0ZWRWYWx1ZT1beyBjb2RlOiBmaWVsZFZhbHVlLCBuYW1lOiBvcmdhbml6YXRpb25zfV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8v44Kw44Or44O844OX5oOF5aCx44OV44Kj44O844OJ44Gr5oy/5YWl44GX44KI44GG44Go44GX44Gf5YCk44GM6YGp5YiH44Gq5aC05ZCI44CBY29ycmVjdEZvcm1hdHRlZFZhbHVl44Gr5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihmaWVsZFR5cGUgPT09IFwiR1JPVVBfU0VMRUNUXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIC8v5oy/5YWl44GZ44KL5YCk44GM44Kw44Or44O844OX5oOF5aCx44GL44KJ6KaL44Gk44GL44KM44Gw44CB44Kw44Or44O844OX5ZCN44KS5qC857SNXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdyb3Vwcz1hd2FpdCB0aGlzLnNldElucHV0R3JvdXAoZmllbGRWYWx1ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8v44Kw44Or44O844OX5ZCN44GM5qC857SN44Gn44GN44Gm44GE44KL5aC05ZCI44CB44Kw44Or44O844OX44Kz44O844OJ44Go44Kw44Or44O844OX5ZCN44KSY29ycmVjdEZvcm1hdHRlZFZhbHVl44Gr5Luj5YWl44GZ44KLXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoIWdyb3Vwcyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdWydlcnJvciddPVwi44Kw44Or44O844OX6YG45oqe44OV44Kj44O844Or44OJ44Gr44CB5oy/5YWl44GX44KI44GG44Go44GX44Gf44Kw44Or44O844OX5oOF5aCx44Gv6KaL44Gk44GL44KK44G+44Gb44KT44Gn44GX44Gf44CC44CM5YCk44KS5oy/5YWl44GZ44KL44CN44Kz44Oz44Od44O844ON44Oz44OI44Gu5Yem55CG44KS5Lit5pat44GX44G+44GX44Gf44CCXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIuOCsOODq+ODvOODl+mBuOaKnuODleOCo+ODvOODq+ODieOBq+OAgeaMv+WFpeOBl+OCiOOBhuOBqOOBl+OBn+OCsOODq+ODvOODl+aDheWgseOBr+imi+OBpOOBi+OCiuOBvuOBm+OCk+OBp+OBl+OBn+OAguOAjOWApOOCkuaMv+WFpeOBmeOCi+OAjeOCs+ODs+ODneODvOODjeODs+ODiOOBruWHpueQhuOCkuS4reaWreOBl+OBvuOBl+OBn+OAglwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29ycmVjdEZvcm1hdHRlZFZhbHVlPVt7IGNvZGU6IGZpZWxkVmFsdWUsIG5hbWU6IGdyb3Vwc31dO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy/kv53lrZjmiJDlip/jgqTjg5njg7Pjg4jjga7loLTlkIjjgIFraW50b25lIGFzeW5jL2F3YWl0IOOBq+OCiOOCi+mdnuWQjOacn+WHpueQhuOBp+ODleOCo+ODvOODq+ODieOBq+WApOOCkuaMv+WFpeOBmeOCi1xyXG4gICAgICAgICAgICBpZighZXZlbnQudHlwZS5pbmNsdWRlcygnc3VjY2VzcycpKXtcclxuXHJcbiAgICAgICAgICAgICAgICAvL+adoeS7tuW8j+OBrue1kOaenOOBjHRydWXjgYvjgaTmjL/lhaXjgZnjgovlgKTjgYzlpInmj5vjgafjgY3jgZ/loLTlkIjjgIHjg5XjgqPjg7zjg6vjg4nvvIjjg6njgrjjgqrjg5zjgr/jg7Pjg7vjg4njg63jg4Pjg5fjg4Djgqbjg7Pjg7vjg4Hjgqfjg4Pjgq/jg5zjg4Pjgq/jgrnjg7vopIfmlbDpgbjmip7jg7vmloflrZfliJfkuIDooYzjg7vmloflrZfliJfopIfmlbDooYzjg7vjg6rjg4Pjg4Hjgqjjg4fjgqPjgr/jg7vmlbDlgKTjg7vml6Xku5jjg7vml6XmmYLjg7vmmYLliLvvvInjgavjgrvjg4Pjg4hcclxuICAgICAgICAgICAgICAgIGlmKGNvbmRpdGlvblJlc3VsdCl7XHJcbiAgICAgICAgICAgICAgICAgICAgLy/lgKTjgpLmraPjgZfjgYTlvaLlvI/jgavlpInmj5vjgafjgY3jgZ/loLTlkIjjgIHjg5XjgqPjg7zjg6vjg4njgavlgKTjgpLjgrvjg4Pjg4jjgZnjgotcclxuICAgICAgICAgICAgICAgICAgICBpZihjb3JyZWN0Rm9ybWF0dGVkVmFsdWUgIT09IHVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdLnZhbHVlID0gY29ycmVjdEZvcm1hdHRlZFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIC8v5YCk44KS5q2j44GX44GE5b2i5byP77yI6YWN5YiX77yJ44Gr5aSJ5o+b44Gn44GN44Gf5aC05ZCI44CB44OV44Kj44O844Or44OJ44Gr5YCk77yI6YWN5YiX77yJ44KS44K744OD44OI44GZ44KLXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50LnJlY29yZFtmaWVsZENvZGVdLnZhbHVlID0gY29ycmVjdFZhbHVlcztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIC8va2ludG9uZSBhc3luYy9hd2FpdCDjgavjgojjgovpnZ7lkIzmnJ/lh6bnkIYo5L+d5a2Y5oiQ5Yqf5pmC44Kk44OZ44Oz44OIUkVTVCBBUEnlh6bnkIbmmYIpXHJcbiAgICAgICAgICAgICAgICBhc3luYyBmdW5jdGlvbiB1cGRhdGVSZWNvcmQoZmllbGRDb2RlOnN0cmluZyxldmVudDphbnksaW5zZXJ0VmFsdWU6YW55KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVwZGF0ZWRSZWNvcmQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHA6IGV2ZW50LmFwcElkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICBldmVudC5yZWNvcmRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY29yZDoge1tmaWVsZENvZGVdOntcInZhbHVlXCI6aW5zZXJ0VmFsdWV9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBraW50b25lLmFwaShraW50b25lLmFwaS51cmwoJy9rL3YxL3JlY29yZCcsIHRydWUpLCAnUFVUJywgdXBkYXRlZFJlY29yZCwgKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzcCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgLy/mnaHku7blvI/jga7ntZDmnpzjgYx0cnVl44GL44Gk5oy/5YWl44GZ44KL5YCk44GM5aSJ5o+b44Gn44GN44Gf5aC05ZCI44CB44OV44Kj44O844Or44OJ77yI44Op44K444Kq44Oc44K/44Oz44O744OJ44Ot44OD44OX44OA44Km44Oz44O744OB44Kn44OD44Kv44Oc44OD44Kv44K544O76KSH5pWw6YG45oqe44O75paH5a2X5YiX5LiA6KGM44O75paH5a2X5YiX6KSH5pWw6KGM44O744Oq44OD44OB44Ko44OH44Kj44K/44O75pWw5YCk44O75pel5LuY44O75pel5pmC44O75pmC5Yi777yJ44Gr44K744OD44OIXHJcbiAgICAgICAgICAgICAgICBpZihjb25kaXRpb25SZXN1bHQpe1xyXG4gICAgICAgICAgICAgICAgICAgIC8v5YCk44KS5q2j44GX44GE5b2i5byP44Gr5aSJ5o+b44Gn44GN44Gf5aC05ZCI44CB44OV44Kj44O844Or44OJ44Gr5YCk44KS44K744OD44OI44GZ44KLXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoY29ycmVjdEZvcm1hdHRlZFZhbHVlICE9PSB1bmRlZmluZWQpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXS52YWx1ZSA9IGNvcnJlY3RGb3JtYXR0ZWRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAvL+WApOOCkuato+OBl+OBhOW9ouW8j++8iOmFjeWIl++8ieOBq+WkieaPm+OBp+OBjeOBn+WgtOWQiOOAgeODleOCo+ODvOODq+ODieOBq+WApO+8iOmFjeWIl++8ieOCkuOCu+ODg+ODiOOBmeOCi1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXS52YWx1ZSA9IGNvcnJlY3RWYWx1ZXM7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8va2ludG9uZSBhc3luYy9hd2FpdCDjgavjgojjgovpnZ7lkIzmnJ/lh6bnkIbvvIjjg6zjgrPjg7zjg4nmm7TmlrDvvIlcclxuICAgICAgICAgICAgICAgIGlmKGNvcnJlY3RGb3JtYXR0ZWRWYWx1ZSAhPT0gdW5kZWZpbmVkKXtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCB1cGRhdGVSZWNvcmQoZmllbGRDb2RlLGV2ZW50LGNvcnJlY3RGb3JtYXR0ZWRWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAvL+WApOOCkuato+OBl+OBhOW9ouW8j++8iOmFjeWIl++8ieOBq+WkieaPm+OBp+OBjeOBn+WgtOWQiOOAgeODleOCo+ODvOODq+ODieOBq+WApO+8iOmFjeWIl++8ieOCkuOCu+ODg+ODiOOBmeOCi1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdXBkYXRlUmVjb3JkKGZpZWxkQ29kZSxldmVudCxjb3JyZWN0VmFsdWVzKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHJlc3VsdD0ge1xyXG4gICAgICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICAgICAgcmVzdWx0OnRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1jYXRjaChlcnJvcjphbnkpe1xyXG4gICAgICAgICAgICBjb250ZXh0LmVycm9ycy5oYW5kbGVFcnJvcihlcnJvcixhY3Rpb25Ob2RlKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQ9dHJ1ZTsvL+asoeOBruODjuODvOODieOBr+WHpueQhuOCkue2muOBkeOCi1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0gY29udGV4dCDmnaHku7blvI/jgpLlrp/ooYzjgZnjgotcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGdldENvbmRpdGlvblJlc3VsdChjb250ZXh0OmFueSk6Ym9vbGVhbntcclxuICAgICAgICAvL+ODl+ODreODkeODhuOCo2Bjb25kaXRpb25g44GL44KJ5p2h5Lu244OE44Oq44O844KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgY29uc3QgdHJlZSA9dGhpcy5nZXRDb25kaXRpb24odGhpcy5wcm9wcy5jb25kaXRpb24pO1xyXG4gICAgICAgIGlmKCF0cmVlKXtcclxuICAgICAgICAgICAgLy/mnaHku7bjgpLoqK3lrprjgZXjgozjgabjgYTjgb7jgZvjgpNcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cmVlLmV2YWx1YXRlKHRyZWUucm9vdCxjb250ZXh0KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSBjb25kaXRpb24g5p2h5Lu25byP44OE44Oq44O844KS5Y+W5b6X44GZ44KLXHJcbiAgICAgKiBAcmV0dXJuc1xyXG4gICAgICovXHJcbiAgICBnZXRDb25kaXRpb24oY29uZGl0aW9uOnN0cmluZyk6Q29uZGl0aW9uVHJlZXxudWxse1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgY29uc3QgdHJlZSA9IG5ldyBDb25kaXRpb25UcmVlKCk7XHJcbiAgICAgICAgICAgIHRyZWUuZnJvbUpzb24oY29uZGl0aW9uKTtcclxuICAgICAgICAgICAgaWYodHJlZS5nZXRDb25kaXRpb25zKHRyZWUucm9vdCkubGVuZ3RoPjApe1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyZWU7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9Y2F0Y2goZXJyb3Ipe1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV09dGhpcztcclxuICAgIH1cclxuXHJcbn1cclxubmV3IEluc2VydFZhbHVlQWN0aW9uKCk7IiwiaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgIElBY3Rpb24sSUFjdGlvblJlc3VsdCwgSUFjdGlvbk5vZGUsIElBY3Rpb25Qcm9wZXJ0eSwgSUZpZWxkLCBJQ29udGV4dCwgSVZhck5hbWV9IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44Gu5bGe5oCn5a6a576pXHJcbiAqL1xyXG5pbnRlcmZhY2UgSUdldFZhbHVlUHJvcHN7XHJcbiAgICBmaWVsZDpJRmllbGQ7Ly/jg4Hjgqfjg4Pjgq/jgZnjgovjg5XjgqPjg7zjg6vjg4njga7lr77osaFcclxuICAgIHZlck5hbWU6SVZhck5hbWU7XHJcbn1cclxuLyoqXHJcbiAqIOato+imj+ihqOePvuODgeOCp+ODg+OCr+OCouOCr+OCt+ODp+ODs1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEdldFZhbHVlQWNpdG9uIGltcGxlbWVudHMgSUFjdGlvbntcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICAgIHByb3BzOklHZXRWYWx1ZVByb3BzO1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLm5hbWU9XCLlgKTjgpLlj5blvpfjgZnjgotcIjtcclxuICAgICAgICB0aGlzLmFjdGlvblByb3BzPVtdO1xyXG4gICAgICAgIHRoaXMucHJvcHM9e1xyXG4gICAgICAgICAgICBmaWVsZDp7Y29kZTonJ30sXHJcbiAgICAgICAgICAgIHZlck5hbWU6e25hbWU6Jyd9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v44Ki44Kv44K344On44Oz44KS55m76Yyy44GZ44KLXHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiDjgqLjgq/jgrfjg6fjg7Pjga7lrp/ooYzjgpLlkbzjgbPlh7rjgZlcclxuICAgICAqIEBwYXJhbSBhY3Rpb25Ob2RlIFxyXG4gICAgICogQHBhcmFtIGV2ZW50IFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHByb2Nlc3MoYWN0aW9uTm9kZTpJQWN0aW9uTm9kZSxldmVudDphbnksY29udGV4dDpJQ29udGV4dCk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdD17XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9YWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ2ZpZWxkJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCd2ZXJOYW1lJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBJR2V0VmFsdWVQcm9wcztcclxuICAgICAgICAgICAgLy/mnaHku7blvI/jga7oqIjnrpfntZDmnpzjgpLlj5blvpdcclxuICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gZXZlbnQucmVjb3JkO1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdLnZhbHVlO1xyXG4gICAgICAgICAgICBpZih0aGlzLnByb3BzLnZlck5hbWUgJiYgdGhpcy5wcm9wcy52ZXJOYW1lLm5hbWUhPT0nJyl7XHJcbiAgICAgICAgICAgICAgICBjb250ZXh0LnZhcmlhYmxlc1t0aGlzLnByb3BzLnZlck5hbWUubmFtZV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6dHJ1ZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9Y2F0Y2goZXJyb3Ipe1xyXG4gICAgICAgICAgICAvLyBldmVudC5lcnJvcj1lcnJvcjtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5lcnJvcihlcnJvcik7XHJcbiAgICAgICAgICAgIGNvbnRleHQuZXJyb3JzLmhhbmRsZUVycm9yKGVycm9yLGFjdGlvbk5vZGUpO1xyXG4gICAgICAgICAgICByZXN1bHQuY2FuTmV4dD1mYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgcmVnaXN0ZXIoKTogdm9pZCB7XHJcbiAgICAgICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV09dGhpcztcclxuICAgIH1cclxuICAgIFxyXG59XHJcbm5ldyBHZXRWYWx1ZUFjaXRvbigpO1xyXG4iLCJpbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyBJRmllbGQsIElBY3Rpb24sSUFjdGlvblJlc3VsdCwgSUFjdGlvbk5vZGUsIElBY3Rpb25Qcm9wZXJ0eSB9IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG5pbXBvcnQgeyBGb3JtYXR0ZXIgfSBmcm9tIFwiLi4vdXRpbC9mb3JtYXRcIjtcclxuXHJcbi8v5Y+zVUnnlLvpnaJwcm9wZXJ0eeOBrm5hbWU65Z6L77yaXHJcbmludGVyZmFjZSBJU3RyaW5nSm9pblByb3Bze1xyXG4gICAgLy/kv53lrZjlhYjjg5XjgqPjg7zjg6vjg4lcclxuICAgIHNhdmVGaWVsZDpJRmllbGQ7XHJcbiAgICAvL+e1kOWQiOWFg+ODleOCo+ODvOODq+ODiTFcclxuICAgIGpvaW5GaWVsZDE6SUZpZWxkO1xyXG4gICAgLy/ntZDlkIjlhYPjg5XjgqPjg7zjg6vjg4kyXHJcbiAgICBqb2luRmllbGQyOklGaWVsZDtcclxuICAgIC8v5Yy65YiH44KK5paH5a2XXHJcbiAgICBkZWxpbWl0ZXI6c3RyaW5nO1xyXG59XHJcblxyXG4vL0lBY3Rpb27jgqTjg7Pjgr/jg5Xjgqfjg7zjgrnjgpLlrp/oo4XjgZnjgovmlrDjgZfjgYTjgq/jg6njgrlBY3Rpb27jgpLkvZzmiJDvvJpcclxuZXhwb3J0IGNsYXNzIFN0cmluZ0pvaW5BY3Rpb24gaW1wbGVtZW50cyBJQWN0aW9ue1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgLy9pbXBvcnTjgYvjgonlsI7lhaXpoZXnpLrlrprnvqlcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICAgIC8v5LiK5pa544GuaW50ZXJmYWNlIFByb3Bz44GL44KJ44CBcHJvcHPlj5fjgZHjgovlsZ7mgKfjgpLlrprnvqnvvJpcclxuICAgIHByb3BzOklTdHJpbmdKb2luUHJvcHM7XHJcbiAgICAvL+mWouaVsOWumue+qeOBq+W/heimgeOBqumhnuWQjeOCkuani+evie+8mlxyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICAvL3BnQWRtaW5EQuOBq+eZu+mMsuOBl+OBn+OCouOCr+OCt+ODp+ODs+WQjShuYW1lL3N1YnRpdGxlKeS4gOiHtOOBmeOCi+W/heimgeOBjOOBguOCi++8mlxyXG4gICAgICAgIHRoaXMubmFtZT1cIuaWh+Wtl+e1kOWQiFwiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9W107XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgICAgIC8v44OX44Ot44OR44OG44Kj5bGe5oCn5Yid5pyf5YyW77yaXHJcbiAgICAgICAgdGhpcy5wcm9wcz17XHJcbiAgICAgICAgICAgIHNhdmVGaWVsZDp7Y29kZTonJ30sXHJcbiAgICAgICAgICAgIGpvaW5GaWVsZDE6e2NvZGU6Jyd9LFxyXG4gICAgICAgICAgICBqb2luRmllbGQyOntjb2RlOicnfSxcclxuICAgICAgICAgICAgZGVsaW1pdGVyOicnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v44Oq44K744OD44OI5LiK6KiY55m76Yyy6KGo77yaXHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgfVxyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44Gu5Yem55CG44KS5a6f6KOF44GZ44KLXHJcbiAqIEBwYXJhbSBhY3Rpb25Ob2RlIOOCouOCr+OCt+ODp+ODs+ODjuODvOODiVxyXG4gKiBAcGFyYW0gZXZlbnQgS2ludG9uZeOBruOCpOODmeODs+ODiFxyXG4gKiBAcGFyYW0gY29udGV4dCDjgrPjg7Pjg4bjgq3jgrnjg4jvvIjjg6zjgrPjg7zjg4njgIHlpInmlbDmg4XloLHjgpLmjIHjgaPjgabjgYTjgovvvIlcclxuICogQHJldHVybnMgXHJcbiAqL1xyXG4gICAgLy/pnZ7lkIzmnJ/lh6bnkIbjgYLjgovplqLmlbDkuIvjga7jgYLjgovlsZ7mgKfvvJpcclxuICAgIGFzeW5jIHByb2Nlc3MoYWN0aW9uTm9kZTpJQWN0aW9uTm9kZSxldmVudDphbnkpOlByb21pc2U8SUFjdGlvblJlc3VsdD4ge1xyXG4gICAgICAgIGxldCByZXN1bHQ9e1xyXG4gICAgICAgICAgICAvL+W+jOe2meWHpueQhuS4jeWPr++8mlxyXG4gICAgICAgICAgICBjYW5OZXh0OmZhbHNlLFxyXG4gICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgLy/lsZ7mgKfoqK3lrprjgpLlj5blvpfjgZnjgovvvJpcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1hY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICAvL+ODl+ODreODkeODhuOCo+ioreWumuOBruODh+ODvOOCv+Wei+OBr+W/heimgeOBquaDheWgseWQq+OCgeOBvuOBmeOBi++8n+WFqOmDqOS4jeWtmOWcqOaZgnJldHVybjpcclxuICAgICAgICAgICAgaWYgKCEoJ3NhdmVGaWVsZCcgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkgJiYgISgnam9pbkZpZWxkMScgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkgJiYgISgnam9pbkZpZWxkMicgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy/ml6Llrprjga7jg5fjg63jg5Hjg4bjgqPjga7jgqTjg7Pjgr/jg5Xjgqfjg7zjgrnjgbjlpInmj5vvvJpcclxuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUgYXMgSVN0cmluZ0pvaW5Qcm9wcztcclxuICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gZXZlbnQucmVjb3JkO1xyXG5cclxuICAgICAgICAgICAgLy9raW50b25l44OV44Kj44O844Or44OJ44K/44Kk44OX5Y+W5b6X77yaXHJcbiAgICAgICAgICAgIGNvbnN0IGpvaW5GaWVsZDF0eXBlPXRoaXMucHJvcHMuam9pbkZpZWxkMS50eXBlO1xyXG4gICAgICAgICAgICBjb25zdCBqb2luRmllbGQydHlwZT10aGlzLnByb3BzLmpvaW5GaWVsZDIudHlwZTtcclxuICAgICAgICAgICAgY29uc3Qgc2F2ZUZpZWxkdHlwZT10aGlzLnByb3BzLnNhdmVGaWVsZC50eXBlO1xyXG5cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgICAgIC8vIC8v5L+d5a2Y5YWI44OV44Kj44O844Or44OJ44Gv5paH5a2X5YiX44OV44Kj44O844Or44OJ44Gn44Gv44Gq44GE5aC05ZCI44CB44Ko44Op44O855m655Sf77yaXHJcbiAgICAgICAgICAgIGlmKCEoc2F2ZUZpZWxkdHlwZT09PSdTSU5HTEVfTElORV9URVhUJ3x8c2F2ZUZpZWxkdHlwZT09PSdNVUxUSV9MSU5FX1RFWFQnfHxzYXZlRmllbGR0eXBlPT09J1JJQ0hfVEVYVCcpKXtcclxuICAgICAgICAgICAgICAgIGV2ZW50LmVycm9yPSdb44Ko44Op44O844Oh44OD44K744O844K4Xe+8mue1kOWQiOS/neWtmOWFiOWvvuW/nOS4jeWPr+OAgue1kOWQiOOBl+OBvuOBm+OCkyc7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQudHlwZS5pbmNsdWRlcygnc3VjY2VzcycpKXtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuYWxlcnQoXCJbd2luZG93cyBhbGVydF3vvJpcIitldmVudC5lcnJvcik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FuTmV4dDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0OiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgfVxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIC8v5YCk5Y+W5b6X5pa55rOV5a6a576p77yaXHJcbiAgICBmdW5jdGlvbiBnZXRWYWx1ZSh2YWx1ZTpzdHJpbmcsdHlwZTpzdHJpbmd8dW5kZWZpbmVkLGZpZWxkQ29kZTpzdHJpbmcsZXZlbnQ6YW55KXtcclxuICAgICAgICBpZihldmVudC5yZWNvcmRbZmllbGRDb2RlXT8udmFsdWU9PT11bmRlZmluZWR8fGV2ZW50LnJlY29yZFtmaWVsZENvZGVdPy52YWx1ZT09PW51bGwpe1xyXG4gICAgICAgICAgICBldmVudC5yZWNvcmRbZmllbGRDb2RlXS52YWx1ZT0nJztcclxuICAgICAgICB9XHJcbiAgICAgICAgLy/kvZzmiJDogIXjgIHmm7TmlrDogIXvvJpcclxuICAgICAgICBpZih0eXBlPT09J0NSRUFUT1InfHx0eXBlPT09J01PRElGSUVSJyl7XHJcbiAgICAgICAgICAgIHZhbHVlID0gZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlLm5hbWU7XHJcbiAgICAgICAgLy/ml6XmmYLjgIHkvZzmiJDml6XmmYLjgIHmm7TmlrDml6XmmYLvvJpcclxuICAgICAgICB9ZWxzZSBpZih0eXBlPT09J0RBVEVUSU1FJ3x8dHlwZT09PSdDUkVBVEVEX1RJTUUnfHx0eXBlPT09J1VQREFURURfVElNRScpe1xyXG4gICAgICAgICAgICBpZihldmVudC5yZWNvcmRbZmllbGRDb2RlXT8udmFsdWUhPT11bmRlZmluZWQgJiYgZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlIT09Jycpe1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBGb3JtYXR0ZXIuZGF0ZUZvcm1hdChuZXcgRGF0ZShldmVudC5yZWNvcmRbZmllbGRDb2RlXT8udmFsdWUpLCd5eXl5LU1NLWRkIEhIOm1tJyk7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZT1ldmVudC5yZWNvcmRbZmllbGRDb2RlXT8udmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgLy/jg6bjg7zjgrbpgbjmip7jgIHntYTnuZTpgbjmip7jgIHjgrDjg6vjg7zjg5fpgbjmip7jgIHmt7vku5jjg5XjgqHjgqTjg6vlkI3jgIHkvZzmpa3ogIXjgIHjgqvjg4bjgrTjg6rjg7zvvJpcclxuICAgICAgICB9ZWxzZSBpZih0eXBlPT09J1VTRVJfU0VMRUNUJ3x8dHlwZT09PSdPUkdBTklaQVRJT05fU0VMRUNUJ3x8dHlwZT09PSdHUk9VUF9TRUxFQ1QnfHx0eXBlPT09J0ZJTEUnfHx0eXBlPT09J1NUQVRVU19BU1NJR05FRScpe1xyXG4gICAgICAgICAgICBpZihldmVudC5yZWNvcmRbZmllbGRDb2RlXT8udmFsdWU9PT11bmRlZmluZWQgfHwgZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlPT09Jycpe1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBldmVudC5yZWNvcmRbZmllbGRDb2RlXT8udmFsdWU7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW90b3RleHQ9ZXZlbnQucmVjb3JkW2ZpZWxkQ29kZV0/LnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgbGV0IGFycj1bXTtcclxuICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wO2k8bW90b3RleHQubGVuZ3RoO2krKyl7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyLnB1c2gobW90b3RleHRbaV0ubmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvL+mFjeWIl+imgee0oOOCkizjgafpgKPntZDjgZfjgabmloflrZfliJfjgpLkvZzmiJDvvJpcclxuICAgICAgICAgICAgICAgIHZhbHVlPWFyci5qb2luKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAvL+OCq+ODhuOCtOODquODvOOAgeODgeOCp+ODg+OCr+ODnOODg+OCr+OCueOAgeikh+aVsOmBuOaKnu+8mlxyXG4gICAgICAgIH1lbHNlIGlmKHR5cGU9PT0nQ0FURUdPUlknfHx0eXBlPT09J0NIRUNLX0JPWCd8fHR5cGU9PT0nTVVMVElfU0VMRUNUJyl7XHJcbiAgICAgICAgICAgIGlmKGV2ZW50LnJlY29yZFtmaWVsZENvZGVdPy52YWx1ZT09PXVuZGVmaW5lZCB8fCBldmVudC5yZWNvcmRbZmllbGRDb2RlXT8udmFsdWU9PT0nJyl7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGV2ZW50LnJlY29yZFtmaWVsZENvZGVdPy52YWx1ZTtcclxuICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb3RvdGV4dD1ldmVudC5yZWNvcmRbZmllbGRDb2RlXT8udmFsdWU7XHJcbiAgICAgICAgICAgICAgICBsZXQgYXJyPVtdO1xyXG4gICAgICAgICAgICAgICAgZm9yKGxldCBpPTA7aTxtb3RvdGV4dC5sZW5ndGg7aSsrKXtcclxuICAgICAgICAgICAgICAgICAgICBhcnIucHVzaChtb3RvdGV4dFtpXSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAvL+mFjeWIl+imgee0oOOCkizjgafpgKPntZDjgZfjgabmloflrZfliJfjgpLkvZzmiJDvvJpcclxuICAgICAgICAgICAgICAgIHZhbHVlPWFyci5qb2luKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAvL+ips+e0sOeUu+mdouODl+ODreOCu+OCueWun+ihjOW+jOOBruOCueODhuODvOOCv+OCue+8mlxyXG4gICAgICAgIH1lbHNlIGlmKHR5cGU9PT0nU1RBVFVTJyYmZXZlbnQudHlwZS5pbmNsdWRlcygncHJvY2VzcycpKXtcclxuICAgICAgICAgICAgdmFsdWUgPSBldmVudC5uZXh0U3RhdHVzLnZhbHVlO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICB2YWx1ZSA9IGV2ZW50LnJlY29yZFtmaWVsZENvZGVdPy52YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHZhbHVlPT09dW5kZWZpbmVkIHx8IHZhbHVlPT09bnVsbCl7XHJcbiAgICAgICAgICAgIHZhbHVlPScnO1xyXG4gICAgICAgIH0gICAgICAgIFxyXG4gICAgICAgIHJldHVybiB2YWx1ZTsgICAgIFxyXG4gICAgfVxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgICAgIC8v5YCk5Y+W5b6X5pa55rOV5ZG85Ye677yaXHJcbiAgICAgICAgICAgIGxldCBqb2luVmFsdWUxOnN0cmluZz0nJztcclxuICAgICAgICAgICAgam9pblZhbHVlMT1nZXRWYWx1ZShqb2luVmFsdWUxLGpvaW5GaWVsZDF0eXBlLHRoaXMucHJvcHMuam9pbkZpZWxkMS5jb2RlLGV2ZW50KTtcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgICAgICBsZXQgam9pblZhbHVlMjpzdHJpbmc9Jyc7XHJcbiAgICAgICAgICAgIGpvaW5WYWx1ZTI9Z2V0VmFsdWUoam9pblZhbHVlMixqb2luRmllbGQydHlwZSx0aGlzLnByb3BzLmpvaW5GaWVsZDIuY29kZSxldmVudCk7XHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAgICAgY29uc3QgY29uU3RyaW5nID0gdGhpcy5wcm9wcy5kZWxpbWl0ZXI7XHJcbiAgICAgICAgICAgIGxldCBzYXZlVmFsdWU6c3RyaW5nPScnO1xyXG4gICAgICAgICAgICAvL+WJjeW+jOe1kOWQiOWFg+OBjOepuueZveOBquOCieWMuuWIh+OCiuaWh+Wtl+OCguepuueZveOBq+OBmeOCiyjkvos6MS0444GuOOeEoeOBhOOBquOCiTHjgIIxLTjjga4x54Sh44GE44Gq44KJOOOAgjHnqbrnmb0444GuOOeEoeOBhOOBquOCiTHjgILntZDlkIjlhYPlhajpg6jnqbrnmb3jgarjgonlhajpg6jnqbrnmb0pOlxyXG4gICAgICAgICAgICBpZihqb2luVmFsdWUxPT09JycmJmpvaW5WYWx1ZTI9PT0nJyl7XHJcbiAgICAgICAgICAgICAgICBzYXZlVmFsdWU9Jyc7XHJcbiAgICAgICAgICAgIH1lbHNlIGlmKGpvaW5WYWx1ZTE9PT0nJyYmam9pblZhbHVlMiE9PScnKXtcclxuICAgICAgICAgICAgICAgIHNhdmVWYWx1ZT1qb2luVmFsdWUyO1xyXG4gICAgICAgICAgICB9ZWxzZSBpZihqb2luVmFsdWUyPT09JycmJmpvaW5WYWx1ZTEhPT0nJyl7XHJcbiAgICAgICAgICAgICAgICBzYXZlVmFsdWU9am9pblZhbHVlMTtcclxuICAgICAgICAgICAgfWVsc2UgaWYoam9pblZhbHVlMSE9PScnJiZqb2luVmFsdWUyIT09Jycpe1xyXG4gICAgICAgICAgICAgICAgc2F2ZVZhbHVlPWAke2pvaW5WYWx1ZTF9JHtjb25TdHJpbmd9JHtqb2luVmFsdWUyfWBcclxuICAgICAgICAgICAgfVxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAgICAgLy/mlrDopo8v5pu05pawL+S4gOimp+S/neWtmOaIkOWKn+W+jOOBruS7peWkluOBrmV2ZW5044GnUFVU5L2/55So44GX44Gq44GE77yaXHJcbiAgICAgICAgICAgIGlmICghZXZlbnQudHlwZS5pbmNsdWRlcygnc3VjY2VzcycpKXtcclxuICAgICAgICAgICAgICAgICAvL+S/neWtmOWFiOODleOCo+ODvOODq+ODieOBq+WApOOCu+ODg+ODiO+8mlxyXG4gICAgICAgICAgICAgICAgIHJlY29yZFt0aGlzLnByb3BzLnNhdmVGaWVsZC5jb2RlXS52YWx1ZT1zYXZlVmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgLy93aW5kb3cuYWxlcnQoXCLmloflrZfntZDlkIjooYzjgYTjgb7jgZfjgZ/jgIJcIit0aGlzLnByb3BzLmpvaW5GaWVsZDEubmFtZStcIjpcIitqb2luVmFsdWUxK1wiLFwiK3RoaXMucHJvcHMuam9pbkZpZWxkMi5uYW1lK1wiOlwiK2pvaW5WYWx1ZTIrXCLjgIJcIik7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgLy9raW50b25lIGFzeW5jL2F3YWl0IOOBq+OCiOOCi+mdnuWQjOacn+WHpueQhijmiJDlip/jgqTjg5njg7Pjg4hSRVNUIEFQSeWHpueQhuaZginvvJpcclxuICAgICAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVJlY29yZChmaWVsZENvZGU6c3RyaW5nLGV2ZW50OmFueSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciB1cGRhdGVkUmVjb3JkID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwOiBldmVudC5hcHBJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiAgZXZlbnQucmVjb3JkSWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNvcmQ6IHtbZmllbGRDb2RlXTp7XCJ2YWx1ZVwiOnNhdmVWYWx1ZX19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtpbnRvbmUuYXBpKGtpbnRvbmUuYXBpLnVybCgnL2svdjEvcmVjb3JkJywgdHJ1ZSksICdQVVQnLCB1cGRhdGVkUmVjb3JkLCAocmVzcCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIC8va2ludG9uZeS/neWtmOWFiOODleOCo+ODvOODq+ODieWtmOWcqOeiuuiqje+8mlxyXG4gICAgICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuc2F2ZUZpZWxkLmNvZGVdLnZhbHVlPXNhdmVWYWx1ZTtcclxuICAgICAgICAgICAgICAgIC8va2ludG9uZSBhc3luYy9hd2FpdCDjgavjgojjgovpnZ7lkIzmnJ/lh6bnkIbvvJpcclxuICAgICAgICAgICAgICAgIGF3YWl0IHVwZGF0ZVJlY29yZCh0aGlzLnByb3BzLnNhdmVGaWVsZC5jb2RlLGV2ZW50KTsgICBcclxuICAgICAgICAgICAgICAgIC8v5LiA6Kan55S76Z2i5pu05paw5oiQ5Yqf5b6M5omL5YuV44Oq44Ot44O844OJ44GP44Gg44GV44GE77yaICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUuaW5jbHVkZXMoJ2luZGV4Jykpe1xyXG4gICAgICAgICAgICAgICAgICAgIC8vd2luZG93LmFsZXJ0KFwi5paH5a2X57WQ5ZCI6KGM44GE44G+44GX44Gf44CCXCIrdGhpcy5wcm9wcy5qb2luRmllbGQxLm5hbWUrXCI6XCIram9pblZhbHVlMStcIixcIit0aGlzLnByb3BzLmpvaW5GaWVsZDIubmFtZStcIjpcIitqb2luVmFsdWUyK1wi44CC5LiA6Kan55S76Z2i5pu05paw5oiQ5Yqf5b6M6Ieq5YuV44Oq44Ot44O844OJ44GX44G+44Gb44KT44CC5b+F6KaB44Gr5b+c44GY44Gm5omL5YuV44Oq44Ot44O844OJ44GP44Gg44GV44GE44CCXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5hbGVydChcIuaWh+Wtl+e1kOWQiOOBq+OBr+OAgeS4gOimp+eUu+mdouabtOaWsOaIkOWKn+W+jOiHquWLleODquODreODvOODieOBl+OBvuOBm+OCk+OAguW/heimgeOBq+W/nOOBmOOBpuaJi+WLleODquODreODvOODieOBj+OBoOOBleOBhOOAglwiKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAgICAgcmVzdWx0PSB7XHJcbiAgICAgICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6dHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXs7XHJcbiAgICAgICAgICAgIGlmIChldmVudC50eXBlLmluY2x1ZGVzKCdzdWNjZXNzJykpe1xyXG4gICAgICAgICAgICAgICAgd2luZG93LmFsZXJ0KFwiW3dpbmRvd3MgYWxlcnRd77ya5Yem55CG5Lit55Ww5bi444GM55m655Sf44GX44G+44GX44Gf44CC57WQ5ZCI44GX44G+44Gb44KT44CC44K344K544OG44Og5ouF5b2T6ICF44G444GK5ZWP5ZCI44Gb44GP44Gg44GV44GE44CCZXJyb3Ljg6Hjg4Pjgrvjg7zjgrjvvJpcIitlcnJvcilcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBldmVudC5lcnJvcj1cIlvjgqjjg6njg7zjg6Hjg4Pjgrvjg7zjgrhd77ya5Yem55CG5Lit55Ww5bi444GM55m655Sf44GX44G+44GX44Gf44CC57WQ5ZCI44GX44G+44Gb44KT44CC44K344K544OG44Og5ouF5b2T6ICF44G444GK5ZWP5ZCI44Gb44GP44Gg44GV44GE44CCZXJyb3Ljg6Hjg4Pjgrvjg7zjgrjvvJpcIitlcnJvcjtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGNhbk5leHQ6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbn1cclxubmV3IFN0cmluZ0pvaW5BY3Rpb24oKTsiLCJpbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyAgSUFjdGlvbixJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5LCBJRmllbGQsIElDb250ZXh0IH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcblxyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44Gu5bGe5oCn5a6a576pXHJcbiAqL1xyXG4gICAgaW50ZXJmYWNlIEZ1bGxXaWR0aFByb3Bze1xyXG4gICAgICAgIGZpZWxkOklGaWVsZFxyXG4gICAgfVxyXG4vKipcclxuICog5YWo6KeS44OB44Kn44OD44Kv44Ki44Kv44K344On44OzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRnVsbFdpZHRoQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbntcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICAgIHByb3BzOkZ1bGxXaWR0aFByb3BzO1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLm5hbWU9XCLlhajop5Ljg4Hjgqfjg4Pjgq9cIjsgLyogcGdhZG1pbuOBrm5hbWXjgajlkIzmp5ggICovXHJcbiAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1bXTtcclxuICAgICAgICB0aGlzLnByb3BzPXtcclxuICAgICAgICAgICAgZmllbGQ6e2NvZGU6Jyd9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v44Ki44Kv44K344On44Oz44KS55m76Yyy44GZ44KLXHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiDjgqLjgq/jgrfjg6fjg7Pjga7lrp/ooYzjgpLlkbzjgbPlh7rjgZlcclxuICAgICAqIEBwYXJhbSBhY3Rpb25Ob2RlXHJcbiAgICAgKiBAcGFyYW0gZXZlbnRcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHByb2Nlc3MoYWN0aW9uTm9kZTpJQWN0aW9uTm9kZSxldmVudDphbnksY29udGV4dDpJQ29udGV4dCk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdD17XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9YWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ2ZpZWxkJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBGdWxsV2lkdGhQcm9wcztcclxuICAgICAgICAgICAgLy/mnaHku7blvI/jga7oqIjnrpfntZDmnpzjgpLlj5blvpdcclxuICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gZXZlbnQucmVjb3JkO1xyXG4gICAgICAgICAgICBpZighKHRoaXMucHJvcHMuZmllbGQuY29kZSBpbiByZWNvcmQpKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg44OV44Kj44O844Or44OJ44CMJHt0aGlzLnByb3BzLmZpZWxkLmNvZGV944CN44GM6KaL44Gk44GL44KK44G+44Gb44KT44CCYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXT8udmFsdWU7XHJcbiAgICAgICAgICAgIC8v5p2h5Lu25YiG5bKQXHJcbiAgICAgICAgICAgIC8v5pyq5YWl5Yqb5pmC44Gv5L2V44KC5Yem55CG44KS44Gb44Ga57WC5LqGXHJcbiAgICAgICAgICAgIGlmKHZhbHVlPT09dW5kZWZpbmVkIHx8IHZhbHVlPT09Jycpe1xyXG4gICAgICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0uZXJyb3I9bnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL+WNiuinkuOBjOWQq+OBvuOCjOOBpuOBhOOBn+WgtOWQiHJlc3VsdOOBjGZhbHNlXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNvbnRhaW5zRnVsbFdpZHRoQ2hhcnModmFsdWUpICYmICEodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0nJykpe1xyXG4gICAgICAgICAgICAgICAgLy/jgqjjg6njg7zmmYLjgavlh7rlipvjgZXjgozjgovmloflrZfoqK3lrppcclxuICAgICAgICAgICAgICAgIHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdLmVycm9yPVwi5Y2K6KeS44GM5ZCr44G+44KM44Gm44GE44G+44GZXCI7XHJcbiAgICAgICAgICAgICAgICAvL+asoeOBruWHpueQhuOCkuS4reatouOBmeOCi+WApOioreWumlxyXG4gICAgICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQ9ZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZXtcclxuICAgICAgICAgICAgICAgIHJlY29yZFt0aGlzLnByb3BzLmZpZWxkLmNvZGVdLmVycm9yPW51bGw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9yZXN1bHTjg5fjg63jg5Hjg4bjgqPmjIflrppcclxuICAgICAgICAgICAgcmVzdWx0PSB7XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OnRydWVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG5cclxuICAgICAgICAvL+S+i+WkluWHpueQhlxyXG4gICAgICAgIH1jYXRjaChlcnJvcil7XHJcbiAgICAgICAgICAgIC8vIGV2ZW50LmVycm9yPWVycm9yO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgY29udGV4dC5lcnJvcnMuaGFuZGxlRXJyb3IoZXJyb3IsYWN0aW9uTm9kZSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jYW5OZXh0PWZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIOWFqOOBpuWFqOinkuOBruaWh+Wtl+WIl+OBruWgtOWQiOOBr3RydWXjgIHjgZ3jgYbjgafjgarjgYTloLTlkIjjga9mYWxzZVxyXG4gICAgY29udGFpbnNGdWxsV2lkdGhDaGFycyh0ZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHJcbiAgICAgICAgLy8g5Y2K6KeS6Iux5pWw5a2X44Kr44OK6KiY5Y+344KS6Zmk5aSWXHJcbiAgICAgICAgLy/lhajop5LjgYvjganjgYbjgYtcclxuICAgICAgICBjb25zdCBjaGVja1JlZ2V4PVwiXlteXFx4MDEtXFx4N0VcXHVGRjYxLVxcdUZGOUZdKyRcIjtcclxuXHJcbiAgICAgICAgLy/mraPopo/ooajnj77jgqrjg5bjgrjjgqfjgq/jg4jnlJ/miJBcclxuICAgICAgICBjb25zdCBmdWxsV2lkdGhSZWdleCA9IG5ldyBSZWdFeHAoY2hlY2tSZWdleCk7XHJcblxyXG4gICAgICAgIC8v5q2j6KaP6KGo54++44OB44Kn44OD44KvXHJcbiAgICAgICAgcmV0dXJuIGZ1bGxXaWR0aFJlZ2V4LnRlc3QodGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy/miLvjgorlgKTjgpLmjIHjgZ/jgarjgYTjgZ/jgoF2b2lk5Z6LXHJcbiAgICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgICAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXT10aGlzO1xyXG4gICAgfVxyXG59XHJcbm5ldyBGdWxsV2lkdGhBY3Rpb24oKTsiLCJpbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyAgSUFjdGlvbixJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5LCBJRmllbGQsIElDb250ZXh0IH0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcblxyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44Gu5bGe5oCn5a6a576pXHJcbiAqL1xyXG4gICAgaW50ZXJmYWNlIEhhbGZXaWR0aFByb3Bze1xyXG4gICAgICAgIGZpZWxkOklGaWVsZFxyXG4gICAgfVxyXG4vKipcclxuICog5Y2K6KeS44OB44Kn44OD44Kv44Ki44Kv44K344On44OzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgSGFsZldpZHRoQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbntcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICAgIHByb3BzOkhhbGZXaWR0aFByb3BzO1xyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICB0aGlzLm5hbWU9XCLljYrop5Ljg4Hjgqfjg4Pjgq9cIjsgLyogcGdhZG1pbuOBrm5hbWXjgajlkIzmp5ggICovXHJcbiAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1bXTtcclxuICAgICAgICB0aGlzLnByb3BzPXtcclxuICAgICAgICAgICAgZmllbGQ6e2NvZGU6Jyd9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v44Ki44Kv44K344On44Oz44KS55m76Yyy44GZ44KLXHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiDjgqLjgq/jgrfjg6fjg7Pjga7lrp/ooYzjgpLlkbzjgbPlh7rjgZlcclxuICAgICAqIEBwYXJhbSBhY3Rpb25Ob2RlXHJcbiAgICAgKiBAcGFyYW0gZXZlbnRcclxuICAgICAqIEByZXR1cm5zXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHByb2Nlc3MoYWN0aW9uTm9kZTpJQWN0aW9uTm9kZSxldmVudDphbnksY29udGV4dDpJQ29udGV4dCk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdD17XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9YWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ2ZpZWxkJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBIYWxmV2lkdGhQcm9wcztcclxuICAgICAgICAgICAgLy/mnaHku7blvI/jga7oqIjnrpfntZDmnpzjgpLlj5blvpdcclxuICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gZXZlbnQucmVjb3JkO1xyXG4gICAgICAgICAgICBpZighKHRoaXMucHJvcHMuZmllbGQuY29kZSBpbiByZWNvcmQpKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg44OV44Kj44O844Or44OJ44CMJHt0aGlzLnByb3BzLmZpZWxkLmNvZGV944CN44GM6KaL44Gk44GL44KK44G+44Gb44KT44CCYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXT8udmFsdWU7XHJcbiAgICAgICAgICAgIC8v5p2h5Lu25YiG5bKQXHJcbiAgICAgICAgICAgIC8v5pyq5YWl5Yqb5pmC44Gv5L2V44KC5Yem55CG44KS44Gb44Ga57WC5LqGXHJcbiAgICAgICAgICAgIGlmKHZhbHVlPT09dW5kZWZpbmVkIHx8IHZhbHVlPT09Jycpe1xyXG4gICAgICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0uZXJyb3I9bnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL+WFqOinkuOBjOWQq+OBvuOCjOOBpuOBhOOBn+WgtOWQiOS/neWtmOWHpueQhuS4reatoijjgqjjg6njg7zlh6bnkIYpXHJcbiAgICAgICAgICAgIGlmKCF0aGlzLmNvbnRhaW5zSGFsZldpZHRoQ2hhcnModmFsdWUpKXtcclxuICAgICAgICAgICAgICAgIC8v44Ko44Op44O85pmC44Gr5Ye65Yqb44GV44KM44KL5paH5a2X6Kit5a6aXHJcbiAgICAgICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS5lcnJvcj1cIuWFqOinkuOBjOWQq+OBvuOCjOOBpuOBhOOBvuOBmVwiO1xyXG4gICAgICAgICAgICAgICAgLy/mrKHjga7lh6bnkIbjgpLkuK3mraLjgZnjgovlgKToqK3lrppcclxuICAgICAgICAgICAgICAgIHJlc3VsdC5jYW5OZXh0PWZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS5lcnJvcj1udWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8v5Y2K6KeS44Gu5aC05ZCI5ZWP6aGM44Gq44GP5a6f6KGMXHJcbiAgICAgICAgICAgIC8vcmVzdWx044OX44Ot44OR44OG44Kj5oyH5a6aXHJcbiAgICAgICAgICAgIHJlc3VsdD0ge1xyXG4gICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDp0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAvL+S+i+WkluWHpueQhlxyXG4gICAgICAgIH1jYXRjaChlcnJvcil7XHJcbiAgICAgICAgICAgIC8vIGV2ZW50LmVycm9yPWVycm9yO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgICAgICAgICAgY29udGV4dC5lcnJvcnMuaGFuZGxlRXJyb3IoZXJyb3IsYWN0aW9uTm9kZSk7XHJcbiAgICAgICAgICAgIHJlc3VsdC5jYW5OZXh0PWZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIOWFqOOBpuWFqOinkuOBruaWh+Wtl+WIl+OBruWgtOWQiOOBr3RydWXjgIHjgZ3jgYbjgafjgarjgYTloLTlkIjjga9mYWxzZVxyXG4gICAgY29udGFpbnNIYWxmV2lkdGhDaGFycyh0ZXh0OiBzdHJpbmcpOiBib29sZWFuIHtcclxuXHJcbiAgICAgICAgY29uc3QgY2hlY2tSZWdleCA9IFwiXltcXHgwMS1cXHg3RVxcdUZGNjEtXFx1RkY5Rl0rJFwiO1xyXG4gICAgICAgIC8v5q2j6KaP6KGo54++44Kq44OW44K444Kn44Kv44OI55Sf5oiQXHJcbiAgICAgICAgY29uc3QgaGFsZldpZHRoUmVnZXggPSBuZXcgUmVnRXhwKGNoZWNrUmVnZXgpO1xyXG5cclxuICAgICAgICAvL+ato+imj+ihqOePvuODgeOCp+ODg+OCr1xyXG4gICAgICAgIHJldHVybiBoYWxmV2lkdGhSZWdleC50ZXN0KHRleHQpO1xyXG4gICAgfVxyXG4gICAgLy/miLvjgorlgKTjgpLmjIHjgZ/jgarjgYTjgZ/jgoF2b2lk5Z6LXHJcbiAgICByZWdpc3RlcigpOiB2b2lkIHtcclxuICAgICAgICBhY3Rpb25BZGRpbnNbdGhpcy5uYW1lXT10aGlzO1xyXG4gICAgfVxyXG59XHJcbm5ldyBIYWxmV2lkdGhBY3Rpb24oKTsiLCJpbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgeyBJRmllbGQsSUFjdGlvbixJQWN0aW9uUmVzdWx0LCBJQWN0aW9uTm9kZSwgSUFjdGlvblByb3BlcnR5LElDb250ZXh0LElWYXJOYW1lfSBmcm9tIFwiLi4vdHlwZXMvQWN0aW9uVHlwZXNcIjtcclxuLy/lj7NVSeeUu+mdonByb3BlcnR544GubmFtZTrlnovvvJpcclxuaW50ZXJmYWNlIElMb2dpblVzZXJHZXR0ZXJQcm9wc3tcclxuICAgIC8v5aSJ5pWw5ZCN44Gr44K744OD44OI77ya5YCk44GM44Kq44OW44K444Kn44Kv44OI44Gu5b2i5byPXHJcbiAgICB2ZXJOYW1lOklWYXJOYW1lO1xyXG59XHJcbi8vSUFjdGlvbuOCpOODs+OCv+ODleOCp+ODvOOCueOCkuWun+ijheOBmeOCi+aWsOOBl+OBhOOCr+ODqeOCuUFjdGlvbuOCkuS9nOaIkO+8mlxyXG5leHBvcnQgY2xhc3MgTG9naW5Vc2VyR2V0dGVyQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbntcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIC8vaW1wb3J044GL44KJ5bCO5YWl6aGV56S65a6a576pXHJcbiAgICBhY3Rpb25Qcm9wczogSUFjdGlvblByb3BlcnR5W107XHJcbiAgICAvL+S4iuaWueOBrmludGVyZmFjZSBQcm9wc+OBi+OCieOAgXByb3Bz5Y+X44GR44KL5bGe5oCn44KS5a6a576p77yaXHJcbiAgICBwcm9wczpJTG9naW5Vc2VyR2V0dGVyUHJvcHM7XHJcbiAgICAvL+mWouaVsOWumue+qeOBq+W/heimgeOBqumhnuWQjeOCkuani+evie+8mlxyXG4gICAgY29uc3RydWN0b3IoKXtcclxuICAgICAgICAvL3BnQWRtaW5EQuOBq+eZu+mMsuOBl+OBn+OCouOCr+OCt+ODp+ODs+WQjShuYW1lL3N1YnRpdGxlKeS4gOiHtOOBmeOCi+W/heimgeOBjOOBguOCi++8mlxyXG4gICAgICAgIHRoaXMubmFtZT1cIuODreOCsOOCpOODs+ODpuODvOOCtuODvOWPluW+l1wiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9W107XHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgICAgIC8v44OX44Ot44OR44OG44Kj5bGe5oCn5Yid5pyf5YyW77yaXHJcbiAgICAgICAgdGhpcy5wcm9wcz17XHJcbiAgICAgICAgICAgIHZlck5hbWU6e25hbWU6Jyd9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v44Oq44K744OD44OI5LiK6KiY55m76Yyy6KGo77yaXHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgfVxyXG4vKipcclxuICog44Ki44Kv44K344On44Oz44Gu5Yem55CG44KS5a6f6KOF44GZ44KLXHJcbiAqIEBwYXJhbSBhY3Rpb25Ob2RlIOOCouOCr+OCt+ODp+ODs+ODjuODvOODiVxyXG4gKiBAcGFyYW0gZXZlbnQgS2ludG9uZeOBruOCpOODmeODs+ODiFxyXG4gKiBAcGFyYW0gY29udGV4dCDjgrPjg7Pjg4bjgq3jgrnjg4jvvIjjg6zjgrPjg7zjg4njgIHlpInmlbDmg4XloLHjgpLmjIHjgaPjgabjgYTjgovvvIlcclxuICogQHJldHVybnMgXHJcbiAqL1xyXG7jgIDjgIAvL+mdnuWQjOacn+WHpueQhuOBguOCi+mWouaVsOS4i+OBruOBguOCi+WxnuaAp++8mlxyXG4gICAgYXN5bmMgcHJvY2VzcyhhY3Rpb25Ob2RlOklBY3Rpb25Ob2RlLGV2ZW50OmFueSxjb250ZXh0OklDb250ZXh0KTpQcm9taXNlPElBY3Rpb25SZXN1bHQ+IHtcclxuICAgICAgICBsZXQgcmVzdWx0PXtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlLFxyXG4gICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICB9O1xyXG4gICAgICAgIHRyeXtcclxuICAgICAgICAgICAgLy/lsZ7mgKfoqK3lrprjgpLlj5blvpfjgZnjgovvvJpcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25Qcm9wcz1hY3Rpb25Ob2RlLmFjdGlvblByb3BzO1xyXG4gICAgICAgICAgICAvL+ODl+ODreODkeODhuOCo+ioreWumuOBruODh+ODvOOCv+Wei+OBr+W/heimgeOBquaDheWgseWQq+OCgeOBvuOBmeOBi++8n+WFqOmDqOS4jeWtmOWcqOaZgnJldHVybjpcclxuICAgICAgICAgICAgaWYgKCEoJ3Zlck5hbWUnIGluIGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy/ml6Llrprjga7jg5fjg63jg5Hjg4bjgqPjga7jgqTjg7Pjgr/jg5Xjgqfjg7zjgrnjgbjlpInmj5vvvJpcclxuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUgYXMgSUxvZ2luVXNlckdldHRlclByb3BzO1xyXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG4gICAgICAgICAgICBpZih0aGlzLnByb3BzLnZlck5hbWUmJnRoaXMucHJvcHMudmVyTmFtZS5uYW1lIT09Jycpe1xyXG4gICAgICAgICAgICAgICAgY29udGV4dC52YXJpYWJsZXNbdGhpcy5wcm9wcy52ZXJOYW1lLm5hbWVdPWtpbnRvbmUuZ2V0TG9naW5Vc2VyKCk7XHJcbiAgICAgICAgICAgICAgICAvLyB3aW5kb3cuYWxlcnQoXCLlpInmlbDlkI1cIit0aGlzLnByb3BzLnZlck5hbWUubmFtZStcIuOBruWApOOBr1wiK2NvbnRleHQudmFyaWFibGVzW3RoaXMucHJvcHMudmVyTmFtZS5uYW1lXStcIuOBp+OBmVwiKTtcclxuICAgICAgICAgICAgICAgIC8vIGV2ZW50LnJlY29yZFtcIuWkieaVsOmBi+eUqOWFiOOBruODpuODvOOCtumBuOaKnuODleOCo+ODvOODq+ODiVwiXS52YWx1ZT0gW3tjb2RlOmNvbnRleHQudmFyaWFibGVzW3RoaXMucHJvcHMudmVyTmFtZS5uYW1lXS5jb2RlfV07XHJcbiAgICAgICAgICAgIH1cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgICAgICAgICAgcmVzdWx0PSB7XHJcbiAgICAgICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6dHJ1ZVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbiAgICAgICAgfWNhdGNoKGVycm9yOmFueSl7O1xyXG4gICAgICAgICAgICBjb250ZXh0LmVycm9ycy5oYW5kbGVFcnJvcihlcnJvcixhY3Rpb25Ob2RlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIGNhbk5leHQ6ZmFsc2UsXHJcbiAgICAgICAgICAgICAgICByZXN1bHQ6ZmFsc2VcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbn1cclxubmV3IExvZ2luVXNlckdldHRlckFjdGlvbigpOyIsIi8qIVxuICAqIEJvb3RzdHJhcCBkYXRhLmpzIHY1LjMuMyAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDI0IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5EYXRhID0gZmFjdG9yeSgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwIGRvbS9kYXRhLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICAvKipcbiAgICogQ29uc3RhbnRzXG4gICAqL1xuXG4gIGNvbnN0IGVsZW1lbnRNYXAgPSBuZXcgTWFwKCk7XG4gIGNvbnN0IGRhdGEgPSB7XG4gICAgc2V0KGVsZW1lbnQsIGtleSwgaW5zdGFuY2UpIHtcbiAgICAgIGlmICghZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgZWxlbWVudE1hcC5zZXQoZWxlbWVudCwgbmV3IE1hcCgpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluc3RhbmNlTWFwID0gZWxlbWVudE1hcC5nZXQoZWxlbWVudCk7XG5cbiAgICAgIC8vIG1ha2UgaXQgY2xlYXIgd2Ugb25seSB3YW50IG9uZSBpbnN0YW5jZSBwZXIgZWxlbWVudFxuICAgICAgLy8gY2FuIGJlIHJlbW92ZWQgbGF0ZXIgd2hlbiBtdWx0aXBsZSBrZXkvaW5zdGFuY2VzIGFyZSBmaW5lIHRvIGJlIHVzZWRcbiAgICAgIGlmICghaW5zdGFuY2VNYXAuaGFzKGtleSkgJiYgaW5zdGFuY2VNYXAuc2l6ZSAhPT0gMCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgICBjb25zb2xlLmVycm9yKGBCb290c3RyYXAgZG9lc24ndCBhbGxvdyBtb3JlIHRoYW4gb25lIGluc3RhbmNlIHBlciBlbGVtZW50LiBCb3VuZCBpbnN0YW5jZTogJHtBcnJheS5mcm9tKGluc3RhbmNlTWFwLmtleXMoKSlbMF19LmApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpbnN0YW5jZU1hcC5zZXQoa2V5LCBpbnN0YW5jZSk7XG4gICAgfSxcbiAgICBnZXQoZWxlbWVudCwga2V5KSB7XG4gICAgICBpZiAoZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpLmdldChrZXkpIHx8IG51bGw7XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9LFxuICAgIHJlbW92ZShlbGVtZW50LCBrZXkpIHtcbiAgICAgIGlmICghZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaW5zdGFuY2VNYXAgPSBlbGVtZW50TWFwLmdldChlbGVtZW50KTtcbiAgICAgIGluc3RhbmNlTWFwLmRlbGV0ZShrZXkpO1xuXG4gICAgICAvLyBmcmVlIHVwIGVsZW1lbnQgcmVmZXJlbmNlcyBpZiB0aGVyZSBhcmUgbm8gaW5zdGFuY2VzIGxlZnQgZm9yIGFuIGVsZW1lbnRcbiAgICAgIGlmIChpbnN0YW5jZU1hcC5zaXplID09PSAwKSB7XG4gICAgICAgIGVsZW1lbnRNYXAuZGVsZXRlKGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICByZXR1cm4gZGF0YTtcblxufSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YS5qcy5tYXBcbiIsIi8qIVxuICAqIEJvb3RzdHJhcCBpbmRleC5qcyB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBmYWN0b3J5KGdsb2JhbC5JbmRleCA9IHt9KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgdXRpbC9pbmRleC5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgY29uc3QgTUFYX1VJRCA9IDEwMDAwMDA7XG4gIGNvbnN0IE1JTExJU0VDT05EU19NVUxUSVBMSUVSID0gMTAwMDtcbiAgY29uc3QgVFJBTlNJVElPTl9FTkQgPSAndHJhbnNpdGlvbmVuZCc7XG5cbiAgLyoqXG4gICAqIFByb3Blcmx5IGVzY2FwZSBJRHMgc2VsZWN0b3JzIHRvIGhhbmRsZSB3ZWlyZCBJRHNcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBjb25zdCBwYXJzZVNlbGVjdG9yID0gc2VsZWN0b3IgPT4ge1xuICAgIGlmIChzZWxlY3RvciAmJiB3aW5kb3cuQ1NTICYmIHdpbmRvdy5DU1MuZXNjYXBlKSB7XG4gICAgICAvLyBkb2N1bWVudC5xdWVyeVNlbGVjdG9yIG5lZWRzIGVzY2FwaW5nIHRvIGhhbmRsZSBJRHMgKGh0bWw1KykgY29udGFpbmluZyBmb3IgaW5zdGFuY2UgL1xuICAgICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5yZXBsYWNlKC8jKFteXFxzXCIjJ10rKS9nLCAobWF0Y2gsIGlkKSA9PiBgIyR7Q1NTLmVzY2FwZShpZCl9YCk7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RvcjtcbiAgfTtcblxuICAvLyBTaG91dC1vdXQgQW5ndXMgQ3JvbGwgKGh0dHBzOi8vZ29vLmdsL3B4d1FHcClcbiAgY29uc3QgdG9UeXBlID0gb2JqZWN0ID0+IHtcbiAgICBpZiAob2JqZWN0ID09PSBudWxsIHx8IG9iamVjdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gYCR7b2JqZWN0fWA7XG4gICAgfVxuICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KS5tYXRjaCgvXFxzKFthLXpdKykvaSlbMV0udG9Mb3dlckNhc2UoKTtcbiAgfTtcblxuICAvKipcbiAgICogUHVibGljIFV0aWwgQVBJXG4gICAqL1xuXG4gIGNvbnN0IGdldFVJRCA9IHByZWZpeCA9PiB7XG4gICAgZG8ge1xuICAgICAgcHJlZml4ICs9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE1BWF9VSUQpO1xuICAgIH0gd2hpbGUgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByZWZpeCkpO1xuICAgIHJldHVybiBwcmVmaXg7XG4gIH07XG4gIGNvbnN0IGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50ID0gZWxlbWVudCA9PiB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICAvLyBHZXQgdHJhbnNpdGlvbi1kdXJhdGlvbiBvZiB0aGUgZWxlbWVudFxuICAgIGxldCB7XG4gICAgICB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgICB0cmFuc2l0aW9uRGVsYXlcbiAgICB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gICAgY29uc3QgZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24gPSBOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pO1xuICAgIGNvbnN0IGZsb2F0VHJhbnNpdGlvbkRlbGF5ID0gTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkRlbGF5KTtcblxuICAgIC8vIFJldHVybiAwIGlmIGVsZW1lbnQgb3IgdHJhbnNpdGlvbiBkdXJhdGlvbiBpcyBub3QgZm91bmRcbiAgICBpZiAoIWZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uICYmICFmbG9hdFRyYW5zaXRpb25EZWxheSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgLy8gSWYgbXVsdGlwbGUgZHVyYXRpb25zIGFyZSBkZWZpbmVkLCB0YWtlIHRoZSBmaXJzdFxuICAgIHRyYW5zaXRpb25EdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbi5zcGxpdCgnLCcpWzBdO1xuICAgIHRyYW5zaXRpb25EZWxheSA9IHRyYW5zaXRpb25EZWxheS5zcGxpdCgnLCcpWzBdO1xuICAgIHJldHVybiAoTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkR1cmF0aW9uKSArIE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EZWxheSkpICogTUlMTElTRUNPTkRTX01VTFRJUExJRVI7XG4gIH07XG4gIGNvbnN0IHRyaWdnZXJUcmFuc2l0aW9uRW5kID0gZWxlbWVudCA9PiB7XG4gICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChUUkFOU0lUSU9OX0VORCkpO1xuICB9O1xuICBjb25zdCBpc0VsZW1lbnQgPSBvYmplY3QgPT4ge1xuICAgIGlmICghb2JqZWN0IHx8IHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqZWN0LmpxdWVyeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG9iamVjdCA9IG9iamVjdFswXTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBvYmplY3Qubm9kZVR5cGUgIT09ICd1bmRlZmluZWQnO1xuICB9O1xuICBjb25zdCBnZXRFbGVtZW50ID0gb2JqZWN0ID0+IHtcbiAgICAvLyBpdCdzIGEgalF1ZXJ5IG9iamVjdCBvciBhIG5vZGUgZWxlbWVudFxuICAgIGlmIChpc0VsZW1lbnQob2JqZWN0KSkge1xuICAgICAgcmV0dXJuIG9iamVjdC5qcXVlcnkgPyBvYmplY3RbMF0gOiBvYmplY3Q7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJyAmJiBvYmplY3QubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocGFyc2VTZWxlY3RvcihvYmplY3QpKTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG4gIGNvbnN0IGlzVmlzaWJsZSA9IGVsZW1lbnQgPT4ge1xuICAgIGlmICghaXNFbGVtZW50KGVsZW1lbnQpIHx8IGVsZW1lbnQuZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudElzVmlzaWJsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSgndmlzaWJpbGl0eScpID09PSAndmlzaWJsZSc7XG4gICAgLy8gSGFuZGxlIGBkZXRhaWxzYCBlbGVtZW50IGFzIGl0cyBjb250ZW50IG1heSBmYWxzaWUgYXBwZWFyIHZpc2libGUgd2hlbiBpdCBpcyBjbG9zZWRcbiAgICBjb25zdCBjbG9zZWREZXRhaWxzID0gZWxlbWVudC5jbG9zZXN0KCdkZXRhaWxzOm5vdChbb3Blbl0pJyk7XG4gICAgaWYgKCFjbG9zZWREZXRhaWxzKSB7XG4gICAgICByZXR1cm4gZWxlbWVudElzVmlzaWJsZTtcbiAgICB9XG4gICAgaWYgKGNsb3NlZERldGFpbHMgIT09IGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHN1bW1hcnkgPSBlbGVtZW50LmNsb3Nlc3QoJ3N1bW1hcnknKTtcbiAgICAgIGlmIChzdW1tYXJ5ICYmIHN1bW1hcnkucGFyZW50Tm9kZSAhPT0gY2xvc2VkRGV0YWlscykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoc3VtbWFyeSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50SXNWaXNpYmxlO1xuICB9O1xuICBjb25zdCBpc0Rpc2FibGVkID0gZWxlbWVudCA9PiB7XG4gICAgaWYgKCFlbGVtZW50IHx8IGVsZW1lbnQubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50LmRpc2FibGVkICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGVsZW1lbnQuZGlzYWJsZWQ7XG4gICAgfVxuICAgIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZSgnZGlzYWJsZWQnKSAmJiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGlzYWJsZWQnKSAhPT0gJ2ZhbHNlJztcbiAgfTtcbiAgY29uc3QgZmluZFNoYWRvd1Jvb3QgPSBlbGVtZW50ID0+IHtcbiAgICBpZiAoIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5hdHRhY2hTaGFkb3cpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIC8vIENhbiBmaW5kIHRoZSBzaGFkb3cgcm9vdCBvdGhlcndpc2UgaXQnbGwgcmV0dXJuIHRoZSBkb2N1bWVudFxuICAgIGlmICh0eXBlb2YgZWxlbWVudC5nZXRSb290Tm9kZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3Qgcm9vdCA9IGVsZW1lbnQuZ2V0Um9vdE5vZGUoKTtcbiAgICAgIHJldHVybiByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBudWxsO1xuICAgIH1cbiAgICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cblxuICAgIC8vIHdoZW4gd2UgZG9uJ3QgZmluZCBhIHNoYWRvdyByb290XG4gICAgaWYgKCFlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gZmluZFNoYWRvd1Jvb3QoZWxlbWVudC5wYXJlbnROb2RlKTtcbiAgfTtcbiAgY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xuXG4gIC8qKlxuICAgKiBUcmljayB0byByZXN0YXJ0IGFuIGVsZW1lbnQncyBhbmltYXRpb25cbiAgICpcbiAgICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICAgKiBAcmV0dXJuIHZvaWRcbiAgICpcbiAgICogQHNlZSBodHRwczovL3d3dy5jaGFyaXN0aGVvLmlvL2Jsb2cvMjAyMS8wMi9yZXN0YXJ0LWEtY3NzLWFuaW1hdGlvbi13aXRoLWphdmFzY3JpcHQvI3Jlc3RhcnRpbmctYS1jc3MtYW5pbWF0aW9uXG4gICAqL1xuICBjb25zdCByZWZsb3cgPSBlbGVtZW50ID0+IHtcbiAgICBlbGVtZW50Lm9mZnNldEhlaWdodDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgfTtcbiAgY29uc3QgZ2V0alF1ZXJ5ID0gKCkgPT4ge1xuICAgIGlmICh3aW5kb3cualF1ZXJ5ICYmICFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgnZGF0YS1icy1uby1qcXVlcnknKSkge1xuICAgICAgcmV0dXJuIHdpbmRvdy5qUXVlcnk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuICBjb25zdCBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzID0gW107XG4gIGNvbnN0IG9uRE9NQ29udGVudExvYWRlZCA9IGNhbGxiYWNrID0+IHtcbiAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgICAvLyBhZGQgbGlzdGVuZXIgb24gdGhlIGZpcnN0IGNhbGwgd2hlbiB0aGUgZG9jdW1lbnQgaXMgaW4gbG9hZGluZyBzdGF0ZVxuICAgICAgaWYgKCFET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzLmxlbmd0aCkge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4ge1xuICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcykge1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGlzUlRMID0gKCkgPT4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpciA9PT0gJ3J0bCc7XG4gIGNvbnN0IGRlZmluZUpRdWVyeVBsdWdpbiA9IHBsdWdpbiA9PiB7XG4gICAgb25ET01Db250ZW50TG9hZGVkKCgpID0+IHtcbiAgICAgIGNvbnN0ICQgPSBnZXRqUXVlcnkoKTtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKCQpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IHBsdWdpbi5OQU1FO1xuICAgICAgICBjb25zdCBKUVVFUllfTk9fQ09ORkxJQ1QgPSAkLmZuW25hbWVdO1xuICAgICAgICAkLmZuW25hbWVdID0gcGx1Z2luLmpRdWVyeUludGVyZmFjZTtcbiAgICAgICAgJC5mbltuYW1lXS5Db25zdHJ1Y3RvciA9IHBsdWdpbjtcbiAgICAgICAgJC5mbltuYW1lXS5ub0NvbmZsaWN0ID0gKCkgPT4ge1xuICAgICAgICAgICQuZm5bbmFtZV0gPSBKUVVFUllfTk9fQ09ORkxJQ1Q7XG4gICAgICAgICAgcmV0dXJuIHBsdWdpbi5qUXVlcnlJbnRlcmZhY2U7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSk7XG4gIH07XG4gIGNvbnN0IGV4ZWN1dGUgPSAocG9zc2libGVDYWxsYmFjaywgYXJncyA9IFtdLCBkZWZhdWx0VmFsdWUgPSBwb3NzaWJsZUNhbGxiYWNrKSA9PiB7XG4gICAgcmV0dXJuIHR5cGVvZiBwb3NzaWJsZUNhbGxiYWNrID09PSAnZnVuY3Rpb24nID8gcG9zc2libGVDYWxsYmFjayguLi5hcmdzKSA6IGRlZmF1bHRWYWx1ZTtcbiAgfTtcbiAgY29uc3QgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbiA9IChjYWxsYmFjaywgdHJhbnNpdGlvbkVsZW1lbnQsIHdhaXRGb3JUcmFuc2l0aW9uID0gdHJ1ZSkgPT4ge1xuICAgIGlmICghd2FpdEZvclRyYW5zaXRpb24pIHtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkdXJhdGlvblBhZGRpbmcgPSA1O1xuICAgIGNvbnN0IGVtdWxhdGVkRHVyYXRpb24gPSBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0cmFuc2l0aW9uRWxlbWVudCkgKyBkdXJhdGlvblBhZGRpbmc7XG4gICAgbGV0IGNhbGxlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGhhbmRsZXIgPSAoe1xuICAgICAgdGFyZ2V0XG4gICAgfSkgPT4ge1xuICAgICAgaWYgKHRhcmdldCAhPT0gdHJhbnNpdGlvbkVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgIHRyYW5zaXRpb25FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoVFJBTlNJVElPTl9FTkQsIGhhbmRsZXIpO1xuICAgICAgZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgfTtcbiAgICB0cmFuc2l0aW9uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFRSQU5TSVRJT05fRU5ELCBoYW5kbGVyKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgIHRyaWdnZXJUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25FbGVtZW50KTtcbiAgICAgIH1cbiAgICB9LCBlbXVsYXRlZER1cmF0aW9uKTtcbiAgfTtcblxuICAvKipcbiAgICogUmV0dXJuIHRoZSBwcmV2aW91cy9uZXh0IGVsZW1lbnQgb2YgYSBsaXN0LlxuICAgKlxuICAgKiBAcGFyYW0ge2FycmF5fSBsaXN0ICAgIFRoZSBsaXN0IG9mIGVsZW1lbnRzXG4gICAqIEBwYXJhbSBhY3RpdmVFbGVtZW50ICAgVGhlIGFjdGl2ZSBlbGVtZW50XG4gICAqIEBwYXJhbSBzaG91bGRHZXROZXh0ICAgQ2hvb3NlIHRvIGdldCBuZXh0IG9yIHByZXZpb3VzIGVsZW1lbnRcbiAgICogQHBhcmFtIGlzQ3ljbGVBbGxvd2VkXG4gICAqIEByZXR1cm4ge0VsZW1lbnR8ZWxlbX0gVGhlIHByb3BlciBlbGVtZW50XG4gICAqL1xuICBjb25zdCBnZXROZXh0QWN0aXZlRWxlbWVudCA9IChsaXN0LCBhY3RpdmVFbGVtZW50LCBzaG91bGRHZXROZXh0LCBpc0N5Y2xlQWxsb3dlZCkgPT4ge1xuICAgIGNvbnN0IGxpc3RMZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgICBsZXQgaW5kZXggPSBsaXN0LmluZGV4T2YoYWN0aXZlRWxlbWVudCk7XG5cbiAgICAvLyBpZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbGlzdCByZXR1cm4gYW4gZWxlbWVudFxuICAgIC8vIGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIGFuZCBpZiBjeWNsZSBpcyBhbGxvd2VkXG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgcmV0dXJuICFzaG91bGRHZXROZXh0ICYmIGlzQ3ljbGVBbGxvd2VkID8gbGlzdFtsaXN0TGVuZ3RoIC0gMV0gOiBsaXN0WzBdO1xuICAgIH1cbiAgICBpbmRleCArPSBzaG91bGRHZXROZXh0ID8gMSA6IC0xO1xuICAgIGlmIChpc0N5Y2xlQWxsb3dlZCkge1xuICAgICAgaW5kZXggPSAoaW5kZXggKyBsaXN0TGVuZ3RoKSAlIGxpc3RMZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBsaXN0W01hdGgubWF4KDAsIE1hdGgubWluKGluZGV4LCBsaXN0TGVuZ3RoIC0gMSkpXTtcbiAgfTtcblxuICBleHBvcnRzLmRlZmluZUpRdWVyeVBsdWdpbiA9IGRlZmluZUpRdWVyeVBsdWdpbjtcbiAgZXhwb3J0cy5leGVjdXRlID0gZXhlY3V0ZTtcbiAgZXhwb3J0cy5leGVjdXRlQWZ0ZXJUcmFuc2l0aW9uID0gZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbjtcbiAgZXhwb3J0cy5maW5kU2hhZG93Um9vdCA9IGZpbmRTaGFkb3dSb290O1xuICBleHBvcnRzLmdldEVsZW1lbnQgPSBnZXRFbGVtZW50O1xuICBleHBvcnRzLmdldE5leHRBY3RpdmVFbGVtZW50ID0gZ2V0TmV4dEFjdGl2ZUVsZW1lbnQ7XG4gIGV4cG9ydHMuZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQgPSBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudDtcbiAgZXhwb3J0cy5nZXRVSUQgPSBnZXRVSUQ7XG4gIGV4cG9ydHMuZ2V0alF1ZXJ5ID0gZ2V0alF1ZXJ5O1xuICBleHBvcnRzLmlzRGlzYWJsZWQgPSBpc0Rpc2FibGVkO1xuICBleHBvcnRzLmlzRWxlbWVudCA9IGlzRWxlbWVudDtcbiAgZXhwb3J0cy5pc1JUTCA9IGlzUlRMO1xuICBleHBvcnRzLmlzVmlzaWJsZSA9IGlzVmlzaWJsZTtcbiAgZXhwb3J0cy5ub29wID0gbm9vcDtcbiAgZXhwb3J0cy5vbkRPTUNvbnRlbnRMb2FkZWQgPSBvbkRPTUNvbnRlbnRMb2FkZWQ7XG4gIGV4cG9ydHMucGFyc2VTZWxlY3RvciA9IHBhcnNlU2VsZWN0b3I7XG4gIGV4cG9ydHMucmVmbG93ID0gcmVmbG93O1xuICBleHBvcnRzLnRvVHlwZSA9IHRvVHlwZTtcbiAgZXhwb3J0cy50cmlnZ2VyVHJhbnNpdGlvbkVuZCA9IHRyaWdnZXJUcmFuc2l0aW9uRW5kO1xuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXG59KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXBcbiIsIi8qIVxuICAqIEJvb3RzdHJhcCBldmVudC1oYW5kbGVyLmpzIHY1LjMuMyAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDI0IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnLi4vdXRpbC9pbmRleC5qcycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL3V0aWwvaW5kZXgnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuRXZlbnRIYW5kbGVyID0gZmFjdG9yeShnbG9iYWwuSW5kZXgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoaW5kZXhfanMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgZG9tL2V2ZW50LWhhbmRsZXIuanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgLyoqXG4gICAqIENvbnN0YW50c1xuICAgKi9cblxuICBjb25zdCBuYW1lc3BhY2VSZWdleCA9IC9bXi5dKig/PVxcLi4qKVxcLnwuKi87XG4gIGNvbnN0IHN0cmlwTmFtZVJlZ2V4ID0gL1xcLi4qLztcbiAgY29uc3Qgc3RyaXBVaWRSZWdleCA9IC86OlxcZCskLztcbiAgY29uc3QgZXZlbnRSZWdpc3RyeSA9IHt9OyAvLyBFdmVudHMgc3RvcmFnZVxuICBsZXQgdWlkRXZlbnQgPSAxO1xuICBjb25zdCBjdXN0b21FdmVudHMgPSB7XG4gICAgbW91c2VlbnRlcjogJ21vdXNlb3ZlcicsXG4gICAgbW91c2VsZWF2ZTogJ21vdXNlb3V0J1xuICB9O1xuICBjb25zdCBuYXRpdmVFdmVudHMgPSBuZXcgU2V0KFsnY2xpY2snLCAnZGJsY2xpY2snLCAnbW91c2V1cCcsICdtb3VzZWRvd24nLCAnY29udGV4dG1lbnUnLCAnbW91c2V3aGVlbCcsICdET01Nb3VzZVNjcm9sbCcsICdtb3VzZW92ZXInLCAnbW91c2VvdXQnLCAnbW91c2Vtb3ZlJywgJ3NlbGVjdHN0YXJ0JywgJ3NlbGVjdGVuZCcsICdrZXlkb3duJywgJ2tleXByZXNzJywgJ2tleXVwJywgJ29yaWVudGF0aW9uY2hhbmdlJywgJ3RvdWNoc3RhcnQnLCAndG91Y2htb3ZlJywgJ3RvdWNoZW5kJywgJ3RvdWNoY2FuY2VsJywgJ3BvaW50ZXJkb3duJywgJ3BvaW50ZXJtb3ZlJywgJ3BvaW50ZXJ1cCcsICdwb2ludGVybGVhdmUnLCAncG9pbnRlcmNhbmNlbCcsICdnZXN0dXJlc3RhcnQnLCAnZ2VzdHVyZWNoYW5nZScsICdnZXN0dXJlZW5kJywgJ2ZvY3VzJywgJ2JsdXInLCAnY2hhbmdlJywgJ3Jlc2V0JywgJ3NlbGVjdCcsICdzdWJtaXQnLCAnZm9jdXNpbicsICdmb2N1c291dCcsICdsb2FkJywgJ3VubG9hZCcsICdiZWZvcmV1bmxvYWQnLCAncmVzaXplJywgJ21vdmUnLCAnRE9NQ29udGVudExvYWRlZCcsICdyZWFkeXN0YXRlY2hhbmdlJywgJ2Vycm9yJywgJ2Fib3J0JywgJ3Njcm9sbCddKTtcblxuICAvKipcbiAgICogUHJpdmF0ZSBtZXRob2RzXG4gICAqL1xuXG4gIGZ1bmN0aW9uIG1ha2VFdmVudFVpZChlbGVtZW50LCB1aWQpIHtcbiAgICByZXR1cm4gdWlkICYmIGAke3VpZH06OiR7dWlkRXZlbnQrK31gIHx8IGVsZW1lbnQudWlkRXZlbnQgfHwgdWlkRXZlbnQrKztcbiAgfVxuICBmdW5jdGlvbiBnZXRFbGVtZW50RXZlbnRzKGVsZW1lbnQpIHtcbiAgICBjb25zdCB1aWQgPSBtYWtlRXZlbnRVaWQoZWxlbWVudCk7XG4gICAgZWxlbWVudC51aWRFdmVudCA9IHVpZDtcbiAgICBldmVudFJlZ2lzdHJ5W3VpZF0gPSBldmVudFJlZ2lzdHJ5W3VpZF0gfHwge307XG4gICAgcmV0dXJuIGV2ZW50UmVnaXN0cnlbdWlkXTtcbiAgfVxuICBmdW5jdGlvbiBib290c3RyYXBIYW5kbGVyKGVsZW1lbnQsIGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICAgIGh5ZHJhdGVPYmooZXZlbnQsIHtcbiAgICAgICAgZGVsZWdhdGVUYXJnZXQ6IGVsZW1lbnRcbiAgICAgIH0pO1xuICAgICAgaWYgKGhhbmRsZXIub25lT2ZmKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgZXZlbnQudHlwZSwgZm4pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGZuLmFwcGx5KGVsZW1lbnQsIFtldmVudF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIoZWxlbWVudCwgc2VsZWN0b3IsIGZuKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICAgIGNvbnN0IGRvbUVsZW1lbnRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgICAgIGZvciAobGV0IHtcbiAgICAgICAgdGFyZ2V0XG4gICAgICB9ID0gZXZlbnQ7IHRhcmdldCAmJiB0YXJnZXQgIT09IHRoaXM7IHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlKSB7XG4gICAgICAgIGZvciAoY29uc3QgZG9tRWxlbWVudCBvZiBkb21FbGVtZW50cykge1xuICAgICAgICAgIGlmIChkb21FbGVtZW50ICE9PSB0YXJnZXQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBoeWRyYXRlT2JqKGV2ZW50LCB7XG4gICAgICAgICAgICBkZWxlZ2F0ZVRhcmdldDogdGFyZ2V0XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGhhbmRsZXIub25lT2ZmKSB7XG4gICAgICAgICAgICBFdmVudEhhbmRsZXIub2ZmKGVsZW1lbnQsIGV2ZW50LnR5cGUsIHNlbGVjdG9yLCBmbik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0YXJnZXQsIFtldmVudF0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBmaW5kSGFuZGxlcihldmVudHMsIGNhbGxhYmxlLCBkZWxlZ2F0aW9uU2VsZWN0b3IgPSBudWxsKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZXZlbnRzKS5maW5kKGV2ZW50ID0+IGV2ZW50LmNhbGxhYmxlID09PSBjYWxsYWJsZSAmJiBldmVudC5kZWxlZ2F0aW9uU2VsZWN0b3IgPT09IGRlbGVnYXRpb25TZWxlY3Rvcik7XG4gIH1cbiAgZnVuY3Rpb24gbm9ybWFsaXplUGFyYW1ldGVycyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgY29uc3QgaXNEZWxlZ2F0ZWQgPSB0eXBlb2YgaGFuZGxlciA9PT0gJ3N0cmluZyc7XG4gICAgLy8gVE9ETzogdG9vbHRpcCBwYXNzZXMgYGZhbHNlYCBpbnN0ZWFkIG9mIHNlbGVjdG9yLCBzbyB3ZSBuZWVkIHRvIGNoZWNrXG4gICAgY29uc3QgY2FsbGFibGUgPSBpc0RlbGVnYXRlZCA/IGRlbGVnYXRpb25GdW5jdGlvbiA6IGhhbmRsZXIgfHwgZGVsZWdhdGlvbkZ1bmN0aW9uO1xuICAgIGxldCB0eXBlRXZlbnQgPSBnZXRUeXBlRXZlbnQob3JpZ2luYWxUeXBlRXZlbnQpO1xuICAgIGlmICghbmF0aXZlRXZlbnRzLmhhcyh0eXBlRXZlbnQpKSB7XG4gICAgICB0eXBlRXZlbnQgPSBvcmlnaW5hbFR5cGVFdmVudDtcbiAgICB9XG4gICAgcmV0dXJuIFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF07XG4gIH1cbiAgZnVuY3Rpb24gYWRkSGFuZGxlcihlbGVtZW50LCBvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCBvbmVPZmYpIHtcbiAgICBpZiAodHlwZW9mIG9yaWdpbmFsVHlwZUV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgW2lzRGVsZWdhdGVkLCBjYWxsYWJsZSwgdHlwZUV2ZW50XSA9IG5vcm1hbGl6ZVBhcmFtZXRlcnMob3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbik7XG5cbiAgICAvLyBpbiBjYXNlIG9mIG1vdXNlZW50ZXIgb3IgbW91c2VsZWF2ZSB3cmFwIHRoZSBoYW5kbGVyIHdpdGhpbiBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGZvciBpdHMgRE9NIHBvc2l0aW9uXG4gICAgLy8gdGhpcyBwcmV2ZW50cyB0aGUgaGFuZGxlciBmcm9tIGJlaW5nIGRpc3BhdGNoZWQgdGhlIHNhbWUgd2F5IGFzIG1vdXNlb3ZlciBvciBtb3VzZW91dCBkb2VzXG4gICAgaWYgKG9yaWdpbmFsVHlwZUV2ZW50IGluIGN1c3RvbUV2ZW50cykge1xuICAgICAgY29uc3Qgd3JhcEZ1bmN0aW9uID0gZm4gPT4ge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgaWYgKCFldmVudC5yZWxhdGVkVGFyZ2V0IHx8IGV2ZW50LnJlbGF0ZWRUYXJnZXQgIT09IGV2ZW50LmRlbGVnYXRlVGFyZ2V0ICYmICFldmVudC5kZWxlZ2F0ZVRhcmdldC5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgZXZlbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgICBjYWxsYWJsZSA9IHdyYXBGdW5jdGlvbihjYWxsYWJsZSk7XG4gICAgfVxuICAgIGNvbnN0IGV2ZW50cyA9IGdldEVsZW1lbnRFdmVudHMoZWxlbWVudCk7XG4gICAgY29uc3QgaGFuZGxlcnMgPSBldmVudHNbdHlwZUV2ZW50XSB8fCAoZXZlbnRzW3R5cGVFdmVudF0gPSB7fSk7XG4gICAgY29uc3QgcHJldmlvdXNGdW5jdGlvbiA9IGZpbmRIYW5kbGVyKGhhbmRsZXJzLCBjYWxsYWJsZSwgaXNEZWxlZ2F0ZWQgPyBoYW5kbGVyIDogbnVsbCk7XG4gICAgaWYgKHByZXZpb3VzRnVuY3Rpb24pIHtcbiAgICAgIHByZXZpb3VzRnVuY3Rpb24ub25lT2ZmID0gcHJldmlvdXNGdW5jdGlvbi5vbmVPZmYgJiYgb25lT2ZmO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB1aWQgPSBtYWtlRXZlbnRVaWQoY2FsbGFibGUsIG9yaWdpbmFsVHlwZUV2ZW50LnJlcGxhY2UobmFtZXNwYWNlUmVnZXgsICcnKSk7XG4gICAgY29uc3QgZm4gPSBpc0RlbGVnYXRlZCA/IGJvb3RzdHJhcERlbGVnYXRpb25IYW5kbGVyKGVsZW1lbnQsIGhhbmRsZXIsIGNhbGxhYmxlKSA6IGJvb3RzdHJhcEhhbmRsZXIoZWxlbWVudCwgY2FsbGFibGUpO1xuICAgIGZuLmRlbGVnYXRpb25TZWxlY3RvciA9IGlzRGVsZWdhdGVkID8gaGFuZGxlciA6IG51bGw7XG4gICAgZm4uY2FsbGFibGUgPSBjYWxsYWJsZTtcbiAgICBmbi5vbmVPZmYgPSBvbmVPZmY7XG4gICAgZm4udWlkRXZlbnQgPSB1aWQ7XG4gICAgaGFuZGxlcnNbdWlkXSA9IGZuO1xuICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih0eXBlRXZlbnQsIGZuLCBpc0RlbGVnYXRlZCk7XG4gIH1cbiAgZnVuY3Rpb24gcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvblNlbGVjdG9yKSB7XG4gICAgY29uc3QgZm4gPSBmaW5kSGFuZGxlcihldmVudHNbdHlwZUV2ZW50XSwgaGFuZGxlciwgZGVsZWdhdGlvblNlbGVjdG9yKTtcbiAgICBpZiAoIWZuKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlRXZlbnQsIGZuLCBCb29sZWFuKGRlbGVnYXRpb25TZWxlY3RvcikpO1xuICAgIGRlbGV0ZSBldmVudHNbdHlwZUV2ZW50XVtmbi51aWRFdmVudF07XG4gIH1cbiAgZnVuY3Rpb24gcmVtb3ZlTmFtZXNwYWNlZEhhbmRsZXJzKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBuYW1lc3BhY2UpIHtcbiAgICBjb25zdCBzdG9yZUVsZW1lbnRFdmVudCA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IHt9O1xuICAgIGZvciAoY29uc3QgW2hhbmRsZXJLZXksIGV2ZW50XSBvZiBPYmplY3QuZW50cmllcyhzdG9yZUVsZW1lbnRFdmVudCkpIHtcbiAgICAgIGlmIChoYW5kbGVyS2V5LmluY2x1ZGVzKG5hbWVzcGFjZSkpIHtcbiAgICAgICAgcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgZXZlbnQuY2FsbGFibGUsIGV2ZW50LmRlbGVnYXRpb25TZWxlY3Rvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGdldFR5cGVFdmVudChldmVudCkge1xuICAgIC8vIGFsbG93IHRvIGdldCB0aGUgbmF0aXZlIGV2ZW50cyBmcm9tIG5hbWVzcGFjZWQgZXZlbnRzICgnY2xpY2suYnMuYnV0dG9uJyAtLT4gJ2NsaWNrJylcbiAgICBldmVudCA9IGV2ZW50LnJlcGxhY2Uoc3RyaXBOYW1lUmVnZXgsICcnKTtcbiAgICByZXR1cm4gY3VzdG9tRXZlbnRzW2V2ZW50XSB8fCBldmVudDtcbiAgfVxuICBjb25zdCBFdmVudEhhbmRsZXIgPSB7XG4gICAgb24oZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbikge1xuICAgICAgYWRkSGFuZGxlcihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCBmYWxzZSk7XG4gICAgfSxcbiAgICBvbmUoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbikge1xuICAgICAgYWRkSGFuZGxlcihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCB0cnVlKTtcbiAgICB9LFxuICAgIG9mZihlbGVtZW50LCBvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgICBpZiAodHlwZW9mIG9yaWdpbmFsVHlwZUV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBbaXNEZWxlZ2F0ZWQsIGNhbGxhYmxlLCB0eXBlRXZlbnRdID0gbm9ybWFsaXplUGFyYW1ldGVycyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKTtcbiAgICAgIGNvbnN0IGluTmFtZXNwYWNlID0gdHlwZUV2ZW50ICE9PSBvcmlnaW5hbFR5cGVFdmVudDtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IGdldEVsZW1lbnRFdmVudHMoZWxlbWVudCk7XG4gICAgICBjb25zdCBzdG9yZUVsZW1lbnRFdmVudCA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IHt9O1xuICAgICAgY29uc3QgaXNOYW1lc3BhY2UgPSBvcmlnaW5hbFR5cGVFdmVudC5zdGFydHNXaXRoKCcuJyk7XG4gICAgICBpZiAodHlwZW9mIGNhbGxhYmxlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAvLyBTaW1wbGVzdCBjYXNlOiBoYW5kbGVyIGlzIHBhc3NlZCwgcmVtb3ZlIHRoYXQgbGlzdGVuZXIgT05MWS5cbiAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhzdG9yZUVsZW1lbnRFdmVudCkubGVuZ3RoKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGNhbGxhYmxlLCBpc0RlbGVnYXRlZCA/IGhhbmRsZXIgOiBudWxsKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGlzTmFtZXNwYWNlKSB7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudEV2ZW50IG9mIE9iamVjdC5rZXlzKGV2ZW50cykpIHtcbiAgICAgICAgICByZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMoZWxlbWVudCwgZXZlbnRzLCBlbGVtZW50RXZlbnQsIG9yaWdpbmFsVHlwZUV2ZW50LnNsaWNlKDEpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBba2V5SGFuZGxlcnMsIGV2ZW50XSBvZiBPYmplY3QuZW50cmllcyhzdG9yZUVsZW1lbnRFdmVudCkpIHtcbiAgICAgICAgY29uc3QgaGFuZGxlcktleSA9IGtleUhhbmRsZXJzLnJlcGxhY2Uoc3RyaXBVaWRSZWdleCwgJycpO1xuICAgICAgICBpZiAoIWluTmFtZXNwYWNlIHx8IG9yaWdpbmFsVHlwZUV2ZW50LmluY2x1ZGVzKGhhbmRsZXJLZXkpKSB7XG4gICAgICAgICAgcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgZXZlbnQuY2FsbGFibGUsIGV2ZW50LmRlbGVnYXRpb25TZWxlY3Rvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHRyaWdnZXIoZWxlbWVudCwgZXZlbnQsIGFyZ3MpIHtcbiAgICAgIGlmICh0eXBlb2YgZXZlbnQgIT09ICdzdHJpbmcnIHx8ICFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgJCA9IGluZGV4X2pzLmdldGpRdWVyeSgpO1xuICAgICAgY29uc3QgdHlwZUV2ZW50ID0gZ2V0VHlwZUV2ZW50KGV2ZW50KTtcbiAgICAgIGNvbnN0IGluTmFtZXNwYWNlID0gZXZlbnQgIT09IHR5cGVFdmVudDtcbiAgICAgIGxldCBqUXVlcnlFdmVudCA9IG51bGw7XG4gICAgICBsZXQgYnViYmxlcyA9IHRydWU7XG4gICAgICBsZXQgbmF0aXZlRGlzcGF0Y2ggPSB0cnVlO1xuICAgICAgbGV0IGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZTtcbiAgICAgIGlmIChpbk5hbWVzcGFjZSAmJiAkKSB7XG4gICAgICAgIGpRdWVyeUV2ZW50ID0gJC5FdmVudChldmVudCwgYXJncyk7XG4gICAgICAgICQoZWxlbWVudCkudHJpZ2dlcihqUXVlcnlFdmVudCk7XG4gICAgICAgIGJ1YmJsZXMgPSAhalF1ZXJ5RXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtcbiAgICAgICAgbmF0aXZlRGlzcGF0Y2ggPSAhalF1ZXJ5RXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKTtcbiAgICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IGpRdWVyeUV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpO1xuICAgICAgfVxuICAgICAgY29uc3QgZXZ0ID0gaHlkcmF0ZU9iaihuZXcgRXZlbnQoZXZlbnQsIHtcbiAgICAgICAgYnViYmxlcyxcbiAgICAgICAgY2FuY2VsYWJsZTogdHJ1ZVxuICAgICAgfSksIGFyZ3MpO1xuICAgICAgaWYgKGRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgICBpZiAobmF0aXZlRGlzcGF0Y2gpIHtcbiAgICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2dCk7XG4gICAgICB9XG4gICAgICBpZiAoZXZ0LmRlZmF1bHRQcmV2ZW50ZWQgJiYgalF1ZXJ5RXZlbnQpIHtcbiAgICAgICAgalF1ZXJ5RXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBldnQ7XG4gICAgfVxuICB9O1xuICBmdW5jdGlvbiBoeWRyYXRlT2JqKG9iaiwgbWV0YSA9IHt9KSB7XG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG9ialtrZXldID0gdmFsdWU7XG4gICAgICB9IGNhdGNoIChfdW51c2VkKSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG9iajtcbiAgfVxuXG4gIHJldHVybiBFdmVudEhhbmRsZXI7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWV2ZW50LWhhbmRsZXIuanMubWFwXG4iLCIvKiFcbiAgKiBCb290c3RyYXAgbWFuaXB1bGF0b3IuanMgdjUuMy4zIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKVxuICAqIENvcHlyaWdodCAyMDExLTIwMjQgVGhlIEJvb3RzdHJhcCBBdXRob3JzIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvZ3JhcGhzL2NvbnRyaWJ1dG9ycylcbiAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLk1hbmlwdWxhdG9yID0gZmFjdG9yeSgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwIGRvbS9tYW5pcHVsYXRvci5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgZnVuY3Rpb24gbm9ybWFsaXplRGF0YSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gJ3RydWUnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gTnVtYmVyKHZhbHVlKS50b1N0cmluZygpKSB7XG4gICAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbiAgICB9XG4gICAgaWYgKHZhbHVlID09PSAnJyB8fCB2YWx1ZSA9PT0gJ251bGwnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKGRlY29kZVVSSUNvbXBvbmVudCh2YWx1ZSkpO1xuICAgIH0gY2F0Y2ggKF91bnVzZWQpIHtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gbm9ybWFsaXplRGF0YUtleShrZXkpIHtcbiAgICByZXR1cm4ga2V5LnJlcGxhY2UoL1tBLVpdL2csIGNociA9PiBgLSR7Y2hyLnRvTG93ZXJDYXNlKCl9YCk7XG4gIH1cbiAgY29uc3QgTWFuaXB1bGF0b3IgPSB7XG4gICAgc2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBrZXksIHZhbHVlKSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gLCB2YWx1ZSk7XG4gICAgfSxcbiAgICByZW1vdmVEYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSkge1xuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YCk7XG4gICAgfSxcbiAgICBnZXREYXRhQXR0cmlidXRlcyhlbGVtZW50KSB7XG4gICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuICAgICAgY29uc3QgYnNLZXlzID0gT2JqZWN0LmtleXMoZWxlbWVudC5kYXRhc2V0KS5maWx0ZXIoa2V5ID0+IGtleS5zdGFydHNXaXRoKCdicycpICYmICFrZXkuc3RhcnRzV2l0aCgnYnNDb25maWcnKSk7XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBic0tleXMpIHtcbiAgICAgICAgbGV0IHB1cmVLZXkgPSBrZXkucmVwbGFjZSgvXmJzLywgJycpO1xuICAgICAgICBwdXJlS2V5ID0gcHVyZUtleS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHB1cmVLZXkuc2xpY2UoMSwgcHVyZUtleS5sZW5ndGgpO1xuICAgICAgICBhdHRyaWJ1dGVzW3B1cmVLZXldID0gbm9ybWFsaXplRGF0YShlbGVtZW50LmRhdGFzZXRba2V5XSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXR0cmlidXRlcztcbiAgICB9LFxuICAgIGdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5KSB7XG4gICAgICByZXR1cm4gbm9ybWFsaXplRGF0YShlbGVtZW50LmdldEF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gKSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBNYW5pcHVsYXRvcjtcblxufSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9bWFuaXB1bGF0b3IuanMubWFwXG4iLCIvKiFcbiAgKiBCb290c3RyYXAgY29uZmlnLmpzIHY1LjMuMyAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDI0IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnLi4vZG9tL21hbmlwdWxhdG9yLmpzJyksIHJlcXVpcmUoJy4vaW5kZXguanMnKSkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9kb20vbWFuaXB1bGF0b3InLCAnLi9pbmRleCddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5Db25maWcgPSBmYWN0b3J5KGdsb2JhbC5NYW5pcHVsYXRvciwgZ2xvYmFsLkluZGV4KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKE1hbmlwdWxhdG9yLCBpbmRleF9qcykgeyAndXNlIHN0cmljdCc7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCB1dGlsL2NvbmZpZy5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cblxuICAvKipcbiAgICogQ2xhc3MgZGVmaW5pdGlvblxuICAgKi9cblxuICBjbGFzcyBDb25maWcge1xuICAgIC8vIEdldHRlcnNcbiAgICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IGhhdmUgdG8gaW1wbGVtZW50IHRoZSBzdGF0aWMgbWV0aG9kIFwiTkFNRVwiLCBmb3IgZWFjaCBjb21wb25lbnQhJyk7XG4gICAgfVxuICAgIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcpO1xuICAgICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpO1xuICAgICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZyk7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cbiAgICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICAgIHJldHVybiBjb25maWc7XG4gICAgfVxuICAgIF9tZXJnZUNvbmZpZ09iaihjb25maWcsIGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGpzb25Db25maWcgPSBpbmRleF9qcy5pc0VsZW1lbnQoZWxlbWVudCkgPyBNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsICdjb25maWcnKSA6IHt9OyAvLyB0cnkgdG8gcGFyc2VcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0LFxuICAgICAgICAuLi4odHlwZW9mIGpzb25Db25maWcgPT09ICdvYmplY3QnID8ganNvbkNvbmZpZyA6IHt9KSxcbiAgICAgICAgLi4uKGluZGV4X2pzLmlzRWxlbWVudChlbGVtZW50KSA/IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKGVsZW1lbnQpIDoge30pLFxuICAgICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICAgIH07XG4gICAgfVxuICAgIF90eXBlQ2hlY2tDb25maWcoY29uZmlnLCBjb25maWdUeXBlcyA9IHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFR5cGUpIHtcbiAgICAgIGZvciAoY29uc3QgW3Byb3BlcnR5LCBleHBlY3RlZFR5cGVzXSBvZiBPYmplY3QuZW50cmllcyhjb25maWdUeXBlcykpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjb25maWdbcHJvcGVydHldO1xuICAgICAgICBjb25zdCB2YWx1ZVR5cGUgPSBpbmRleF9qcy5pc0VsZW1lbnQodmFsdWUpID8gJ2VsZW1lbnQnIDogaW5kZXhfanMudG9UeXBlKHZhbHVlKTtcbiAgICAgICAgaWYgKCFuZXcgUmVnRXhwKGV4cGVjdGVkVHlwZXMpLnRlc3QodmFsdWVUeXBlKSkge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FLnRvVXBwZXJDYXNlKCl9OiBPcHRpb24gXCIke3Byb3BlcnR5fVwiIHByb3ZpZGVkIHR5cGUgXCIke3ZhbHVlVHlwZX1cIiBidXQgZXhwZWN0ZWQgdHlwZSBcIiR7ZXhwZWN0ZWRUeXBlc31cIi5gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBDb25maWc7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbmZpZy5qcy5tYXBcbiIsIi8qIVxuICAqIEJvb3RzdHJhcCBiYXNlLWNvbXBvbmVudC5qcyB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJy4vZG9tL2RhdGEuanMnKSwgcmVxdWlyZSgnLi9kb20vZXZlbnQtaGFuZGxlci5qcycpLCByZXF1aXJlKCcuL3V0aWwvY29uZmlnLmpzJyksIHJlcXVpcmUoJy4vdXRpbC9pbmRleC5qcycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4vZG9tL2RhdGEnLCAnLi9kb20vZXZlbnQtaGFuZGxlcicsICcuL3V0aWwvY29uZmlnJywgJy4vdXRpbC9pbmRleCddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5CYXNlQ29tcG9uZW50ID0gZmFjdG9yeShnbG9iYWwuRGF0YSwgZ2xvYmFsLkV2ZW50SGFuZGxlciwgZ2xvYmFsLkNvbmZpZywgZ2xvYmFsLkluZGV4KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKERhdGEsIEV2ZW50SGFuZGxlciwgQ29uZmlnLCBpbmRleF9qcykgeyAndXNlIHN0cmljdCc7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCBiYXNlLWNvbXBvbmVudC5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cblxuICAvKipcbiAgICogQ29uc3RhbnRzXG4gICAqL1xuXG4gIGNvbnN0IFZFUlNJT04gPSAnNS4zLjMnO1xuXG4gIC8qKlxuICAgKiBDbGFzcyBkZWZpbml0aW9uXG4gICAqL1xuXG4gIGNsYXNzIEJhc2VDb21wb25lbnQgZXh0ZW5kcyBDb25maWcge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIGVsZW1lbnQgPSBpbmRleF9qcy5nZXRFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICBEYXRhLnNldCh0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvLyBQdWJsaWNcbiAgICBkaXNwb3NlKCkge1xuICAgICAgRGF0YS5yZW1vdmUodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSk7XG4gICAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuRVZFTlRfS0VZKTtcbiAgICAgIGZvciAoY29uc3QgcHJvcGVydHlOYW1lIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpKSB7XG4gICAgICAgIHRoaXNbcHJvcGVydHlOYW1lXSA9IG51bGw7XG4gICAgICB9XG4gICAgfVxuICAgIF9xdWV1ZUNhbGxiYWNrKGNhbGxiYWNrLCBlbGVtZW50LCBpc0FuaW1hdGVkID0gdHJ1ZSkge1xuICAgICAgaW5kZXhfanMuZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbihjYWxsYmFjaywgZWxlbWVudCwgaXNBbmltYXRlZCk7XG4gICAgfVxuICAgIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcsIHRoaXMuX2VsZW1lbnQpO1xuICAgICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpO1xuICAgICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZyk7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cblxuICAgIC8vIFN0YXRpY1xuICAgIHN0YXRpYyBnZXRJbnN0YW5jZShlbGVtZW50KSB7XG4gICAgICByZXR1cm4gRGF0YS5nZXQoaW5kZXhfanMuZ2V0RWxlbWVudChlbGVtZW50KSwgdGhpcy5EQVRBX0tFWSk7XG4gICAgfVxuICAgIHN0YXRpYyBnZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIGNvbmZpZyA9IHt9KSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRJbnN0YW5jZShlbGVtZW50KSB8fCBuZXcgdGhpcyhlbGVtZW50LCB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyA/IGNvbmZpZyA6IG51bGwpO1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0IFZFUlNJT04oKSB7XG4gICAgICByZXR1cm4gVkVSU0lPTjtcbiAgICB9XG4gICAgc3RhdGljIGdldCBEQVRBX0tFWSgpIHtcbiAgICAgIHJldHVybiBgYnMuJHt0aGlzLk5BTUV9YDtcbiAgICB9XG4gICAgc3RhdGljIGdldCBFVkVOVF9LRVkoKSB7XG4gICAgICByZXR1cm4gYC4ke3RoaXMuREFUQV9LRVl9YDtcbiAgICB9XG4gICAgc3RhdGljIGV2ZW50TmFtZShuYW1lKSB7XG4gICAgICByZXR1cm4gYCR7bmFtZX0ke3RoaXMuRVZFTlRfS0VZfWA7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEJhc2VDb21wb25lbnQ7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJhc2UtY29tcG9uZW50LmpzLm1hcFxuIiwiLyohXG4gICogQm9vdHN0cmFwIHNlbGVjdG9yLWVuZ2luZS5qcyB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJy4uL3V0aWwvaW5kZXguanMnKSkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi91dGlsL2luZGV4J10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLlNlbGVjdG9yRW5naW5lID0gZmFjdG9yeShnbG9iYWwuSW5kZXgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoaW5kZXhfanMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKiBCb290c3RyYXAgZG9tL3NlbGVjdG9yLWVuZ2luZS5qc1xuICAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICovXG5cbiAgY29uc3QgZ2V0U2VsZWN0b3IgPSBlbGVtZW50ID0+IHtcbiAgICBsZXQgc2VsZWN0b3IgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy10YXJnZXQnKTtcbiAgICBpZiAoIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSAnIycpIHtcbiAgICAgIGxldCBocmVmQXR0cmlidXRlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcblxuICAgICAgLy8gVGhlIG9ubHkgdmFsaWQgY29udGVudCB0aGF0IGNvdWxkIGRvdWJsZSBhcyBhIHNlbGVjdG9yIGFyZSBJRHMgb3IgY2xhc3NlcyxcbiAgICAgIC8vIHNvIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgd2l0aCBgI2Agb3IgYC5gLiBJZiBhIFwicmVhbFwiIFVSTCBpcyB1c2VkIGFzIHRoZSBzZWxlY3RvcixcbiAgICAgIC8vIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCB3aWxsIHJpZ2h0ZnVsbHkgY29tcGxhaW4gaXQgaXMgaW52YWxpZC5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzMyMjczXG4gICAgICBpZiAoIWhyZWZBdHRyaWJ1dGUgfHwgIWhyZWZBdHRyaWJ1dGUuaW5jbHVkZXMoJyMnKSAmJiAhaHJlZkF0dHJpYnV0ZS5zdGFydHNXaXRoKCcuJykpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIC8vIEp1c3QgaW4gY2FzZSBzb21lIENNUyBwdXRzIG91dCBhIGZ1bGwgVVJMIHdpdGggdGhlIGFuY2hvciBhcHBlbmRlZFxuICAgICAgaWYgKGhyZWZBdHRyaWJ1dGUuaW5jbHVkZXMoJyMnKSAmJiAhaHJlZkF0dHJpYnV0ZS5zdGFydHNXaXRoKCcjJykpIHtcbiAgICAgICAgaHJlZkF0dHJpYnV0ZSA9IGAjJHtocmVmQXR0cmlidXRlLnNwbGl0KCcjJylbMV19YDtcbiAgICAgIH1cbiAgICAgIHNlbGVjdG9yID0gaHJlZkF0dHJpYnV0ZSAmJiBocmVmQXR0cmlidXRlICE9PSAnIycgPyBocmVmQXR0cmlidXRlLnRyaW0oKSA6IG51bGw7XG4gICAgfVxuICAgIHJldHVybiBzZWxlY3RvciA/IHNlbGVjdG9yLnNwbGl0KCcsJykubWFwKHNlbCA9PiBpbmRleF9qcy5wYXJzZVNlbGVjdG9yKHNlbCkpLmpvaW4oJywnKSA6IG51bGw7XG4gIH07XG4gIGNvbnN0IFNlbGVjdG9yRW5naW5lID0ge1xuICAgIGZpbmQoc2VsZWN0b3IsIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBbXS5jb25jYXQoLi4uRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbC5jYWxsKGVsZW1lbnQsIHNlbGVjdG9yKSk7XG4gICAgfSxcbiAgICBmaW5kT25lKHNlbGVjdG9yLCBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICByZXR1cm4gRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3Rvci5jYWxsKGVsZW1lbnQsIHNlbGVjdG9yKTtcbiAgICB9LFxuICAgIGNoaWxkcmVuKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gW10uY29uY2F0KC4uLmVsZW1lbnQuY2hpbGRyZW4pLmZpbHRlcihjaGlsZCA9PiBjaGlsZC5tYXRjaGVzKHNlbGVjdG9yKSk7XG4gICAgfSxcbiAgICBwYXJlbnRzKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICBjb25zdCBwYXJlbnRzID0gW107XG4gICAgICBsZXQgYW5jZXN0b3IgPSBlbGVtZW50LnBhcmVudE5vZGUuY2xvc2VzdChzZWxlY3Rvcik7XG4gICAgICB3aGlsZSAoYW5jZXN0b3IpIHtcbiAgICAgICAgcGFyZW50cy5wdXNoKGFuY2VzdG9yKTtcbiAgICAgICAgYW5jZXN0b3IgPSBhbmNlc3Rvci5wYXJlbnROb2RlLmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhcmVudHM7XG4gICAgfSxcbiAgICBwcmV2KGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICBsZXQgcHJldmlvdXMgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgICB3aGlsZSAocHJldmlvdXMpIHtcbiAgICAgICAgaWYgKHByZXZpb3VzLm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICAgICAgcmV0dXJuIFtwcmV2aW91c107XG4gICAgICAgIH1cbiAgICAgICAgcHJldmlvdXMgPSBwcmV2aW91cy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0sXG4gICAgLy8gVE9ETzogdGhpcyBpcyBub3cgdW51c2VkOyByZW1vdmUgbGF0ZXIgYWxvbmcgd2l0aCBwcmV2KClcbiAgICBuZXh0KGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICBsZXQgbmV4dCA9IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nO1xuICAgICAgd2hpbGUgKG5leHQpIHtcbiAgICAgICAgaWYgKG5leHQubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgICByZXR1cm4gW25leHRdO1xuICAgICAgICB9XG4gICAgICAgIG5leHQgPSBuZXh0Lm5leHRFbGVtZW50U2libGluZztcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9LFxuICAgIGZvY3VzYWJsZUNoaWxkcmVuKGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGZvY3VzYWJsZXMgPSBbJ2EnLCAnYnV0dG9uJywgJ2lucHV0JywgJ3RleHRhcmVhJywgJ3NlbGVjdCcsICdkZXRhaWxzJywgJ1t0YWJpbmRleF0nLCAnW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl0nXS5tYXAoc2VsZWN0b3IgPT4gYCR7c2VsZWN0b3J9Om5vdChbdGFiaW5kZXhePVwiLVwiXSlgKS5qb2luKCcsJyk7XG4gICAgICByZXR1cm4gdGhpcy5maW5kKGZvY3VzYWJsZXMsIGVsZW1lbnQpLmZpbHRlcihlbCA9PiAhaW5kZXhfanMuaXNEaXNhYmxlZChlbCkgJiYgaW5kZXhfanMuaXNWaXNpYmxlKGVsKSk7XG4gICAgfSxcbiAgICBnZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IpID8gc2VsZWN0b3IgOiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICBnZXRFbGVtZW50RnJvbVNlbGVjdG9yKGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgICByZXR1cm4gc2VsZWN0b3IgPyBTZWxlY3RvckVuZ2luZS5maW5kT25lKHNlbGVjdG9yKSA6IG51bGw7XG4gICAgfSxcbiAgICBnZXRNdWx0aXBsZUVsZW1lbnRzRnJvbVNlbGVjdG9yKGVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgICByZXR1cm4gc2VsZWN0b3IgPyBTZWxlY3RvckVuZ2luZS5maW5kKHNlbGVjdG9yKSA6IFtdO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4gU2VsZWN0b3JFbmdpbmU7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXNlbGVjdG9yLWVuZ2luZS5qcy5tYXBcbiIsIi8qIVxuICAqIEJvb3RzdHJhcCBiYWNrZHJvcC5qcyB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJy4uL2RvbS9ldmVudC1oYW5kbGVyLmpzJyksIHJlcXVpcmUoJy4vY29uZmlnLmpzJyksIHJlcXVpcmUoJy4vaW5kZXguanMnKSkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9kb20vZXZlbnQtaGFuZGxlcicsICcuL2NvbmZpZycsICcuL2luZGV4J10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLkJhY2tkcm9wID0gZmFjdG9yeShnbG9iYWwuRXZlbnRIYW5kbGVyLCBnbG9iYWwuQ29uZmlnLCBnbG9iYWwuSW5kZXgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoRXZlbnRIYW5kbGVyLCBDb25maWcsIGluZGV4X2pzKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwIHV0aWwvYmFja2Ryb3AuanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG5cbiAgLyoqXG4gICAqIENvbnN0YW50c1xuICAgKi9cblxuICBjb25zdCBOQU1FID0gJ2JhY2tkcm9wJztcbiAgY29uc3QgQ0xBU1NfTkFNRV9GQURFID0gJ2ZhZGUnO1xuICBjb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdyc7XG4gIGNvbnN0IEVWRU5UX01PVVNFRE9XTiA9IGBtb3VzZWRvd24uYnMuJHtOQU1FfWA7XG4gIGNvbnN0IERlZmF1bHQgPSB7XG4gICAgY2xhc3NOYW1lOiAnbW9kYWwtYmFja2Ryb3AnLFxuICAgIGNsaWNrQ2FsbGJhY2s6IG51bGwsXG4gICAgaXNBbmltYXRlZDogZmFsc2UsXG4gICAgaXNWaXNpYmxlOiB0cnVlLFxuICAgIC8vIGlmIGZhbHNlLCB3ZSB1c2UgdGhlIGJhY2tkcm9wIGhlbHBlciB3aXRob3V0IGFkZGluZyBhbnkgZWxlbWVudCB0byB0aGUgZG9tXG4gICAgcm9vdEVsZW1lbnQ6ICdib2R5JyAvLyBnaXZlIHRoZSBjaG9pY2UgdG8gcGxhY2UgYmFja2Ryb3AgdW5kZXIgZGlmZmVyZW50IGVsZW1lbnRzXG4gIH07XG4gIGNvbnN0IERlZmF1bHRUeXBlID0ge1xuICAgIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gICAgY2xpY2tDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gICAgaXNBbmltYXRlZDogJ2Jvb2xlYW4nLFxuICAgIGlzVmlzaWJsZTogJ2Jvb2xlYW4nLFxuICAgIHJvb3RFbGVtZW50OiAnKGVsZW1lbnR8c3RyaW5nKSdcbiAgfTtcblxuICAvKipcbiAgICogQ2xhc3MgZGVmaW5pdGlvblxuICAgKi9cblxuICBjbGFzcyBCYWNrZHJvcCBleHRlbmRzIENvbmZpZyB7XG4gICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICBzdXBlcigpO1xuICAgICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgICB0aGlzLl9pc0FwcGVuZGVkID0gZmFsc2U7XG4gICAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICAvLyBHZXR0ZXJzXG4gICAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgICAgcmV0dXJuIERlZmF1bHQ7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgICByZXR1cm4gRGVmYXVsdFR5cGU7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICAgIHJldHVybiBOQU1FO1xuICAgIH1cblxuICAgIC8vIFB1YmxpY1xuICAgIHNob3coY2FsbGJhY2spIHtcbiAgICAgIGlmICghdGhpcy5fY29uZmlnLmlzVmlzaWJsZSkge1xuICAgICAgICBpbmRleF9qcy5leGVjdXRlKGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fYXBwZW5kKCk7XG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZ2V0RWxlbWVudCgpO1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKSB7XG4gICAgICAgIGluZGV4X2pzLnJlZmxvdyhlbGVtZW50KTtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1cpO1xuICAgICAgdGhpcy5fZW11bGF0ZUFuaW1hdGlvbigoKSA9PiB7XG4gICAgICAgIGluZGV4X2pzLmV4ZWN1dGUoY2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgfVxuICAgIGhpZGUoY2FsbGJhY2spIHtcbiAgICAgIGlmICghdGhpcy5fY29uZmlnLmlzVmlzaWJsZSkge1xuICAgICAgICBpbmRleF9qcy5leGVjdXRlKGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fZ2V0RWxlbWVudCgpLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKTtcbiAgICAgIHRoaXMuX2VtdWxhdGVBbmltYXRpb24oKCkgPT4ge1xuICAgICAgICB0aGlzLmRpc3Bvc2UoKTtcbiAgICAgICAgaW5kZXhfanMuZXhlY3V0ZShjYWxsYmFjayk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZGlzcG9zZSgpIHtcbiAgICAgIGlmICghdGhpcy5faXNBcHBlbmRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRE9XTik7XG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZSgpO1xuICAgICAgdGhpcy5faXNBcHBlbmRlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIC8vIFByaXZhdGVcbiAgICBfZ2V0RWxlbWVudCgpIHtcbiAgICAgIGlmICghdGhpcy5fZWxlbWVudCkge1xuICAgICAgICBjb25zdCBiYWNrZHJvcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBiYWNrZHJvcC5jbGFzc05hbWUgPSB0aGlzLl9jb25maWcuY2xhc3NOYW1lO1xuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQpIHtcbiAgICAgICAgICBiYWNrZHJvcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZWxlbWVudCA9IGJhY2tkcm9wO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQ7XG4gICAgfVxuICAgIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgICAgLy8gdXNlIGdldEVsZW1lbnQoKSB3aXRoIHRoZSBkZWZhdWx0IFwiYm9keVwiIHRvIGdldCBhIGZyZXNoIEVsZW1lbnQgb24gZWFjaCBpbnN0YW50aWF0aW9uXG4gICAgICBjb25maWcucm9vdEVsZW1lbnQgPSBpbmRleF9qcy5nZXRFbGVtZW50KGNvbmZpZy5yb290RWxlbWVudCk7XG4gICAgICByZXR1cm4gY29uZmlnO1xuICAgIH1cbiAgICBfYXBwZW5kKCkge1xuICAgICAgaWYgKHRoaXMuX2lzQXBwZW5kZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2dldEVsZW1lbnQoKTtcbiAgICAgIHRoaXMuX2NvbmZpZy5yb290RWxlbWVudC5hcHBlbmQoZWxlbWVudCk7XG4gICAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOLCAoKSA9PiB7XG4gICAgICAgIGluZGV4X2pzLmV4ZWN1dGUodGhpcy5fY29uZmlnLmNsaWNrQ2FsbGJhY2spO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9pc0FwcGVuZGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgX2VtdWxhdGVBbmltYXRpb24oY2FsbGJhY2spIHtcbiAgICAgIGluZGV4X2pzLmV4ZWN1dGVBZnRlclRyYW5zaXRpb24oY2FsbGJhY2ssIHRoaXMuX2dldEVsZW1lbnQoKSwgdGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBCYWNrZHJvcDtcblxufSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9YmFja2Ryb3AuanMubWFwXG4iLCIvKiFcbiAgKiBCb290c3RyYXAgY29tcG9uZW50LWZ1bmN0aW9ucy5qcyB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gZmFjdG9yeShleHBvcnRzLCByZXF1aXJlKCcuLi9kb20vZXZlbnQtaGFuZGxlci5qcycpLCByZXF1aXJlKCcuLi9kb20vc2VsZWN0b3ItZW5naW5lLmpzJyksIHJlcXVpcmUoJy4vaW5kZXguanMnKSkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJywgJy4uL2RvbS9ldmVudC1oYW5kbGVyJywgJy4uL2RvbS9zZWxlY3Rvci1lbmdpbmUnLCAnLi9pbmRleCddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGZhY3RvcnkoZ2xvYmFsLkNvbXBvbmVudEZ1bmN0aW9ucyA9IHt9LCBnbG9iYWwuRXZlbnRIYW5kbGVyLCBnbG9iYWwuU2VsZWN0b3JFbmdpbmUsIGdsb2JhbC5JbmRleCkpO1xufSkodGhpcywgKGZ1bmN0aW9uIChleHBvcnRzLCBFdmVudEhhbmRsZXIsIFNlbGVjdG9yRW5naW5lLCBpbmRleF9qcykgeyAndXNlIHN0cmljdCc7XG5cbiAgLyoqXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqIEJvb3RzdHJhcCB1dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMuanNcbiAgICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIGNvbnN0IGVuYWJsZURpc21pc3NUcmlnZ2VyID0gKGNvbXBvbmVudCwgbWV0aG9kID0gJ2hpZGUnKSA9PiB7XG4gICAgY29uc3QgY2xpY2tFdmVudCA9IGBjbGljay5kaXNtaXNzJHtjb21wb25lbnQuRVZFTlRfS0VZfWA7XG4gICAgY29uc3QgbmFtZSA9IGNvbXBvbmVudC5OQU1FO1xuICAgIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgY2xpY2tFdmVudCwgYFtkYXRhLWJzLWRpc21pc3M9XCIke25hbWV9XCJdYCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICB9XG4gICAgICBpZiAoaW5kZXhfanMuaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCB0YXJnZXQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRoaXMpIHx8IHRoaXMuY2xvc2VzdChgLiR7bmFtZX1gKTtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gY29tcG9uZW50LmdldE9yQ3JlYXRlSW5zdGFuY2UodGFyZ2V0KTtcblxuICAgICAgLy8gTWV0aG9kIGFyZ3VtZW50IGlzIGxlZnQsIGZvciBBbGVydCBhbmQgb25seSwgYXMgaXQgZG9lc24ndCBpbXBsZW1lbnQgdGhlICdoaWRlJyBtZXRob2RcbiAgICAgIGluc3RhbmNlW21ldGhvZF0oKTtcbiAgICB9KTtcbiAgfTtcblxuICBleHBvcnRzLmVuYWJsZURpc21pc3NUcmlnZ2VyID0gZW5hYmxlRGlzbWlzc1RyaWdnZXI7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWNvbXBvbmVudC1mdW5jdGlvbnMuanMubWFwXG4iLCIvKiFcbiAgKiBCb290c3RyYXAgZm9jdXN0cmFwLmpzIHY1LjMuMyAoaHR0cHM6Ly9nZXRib290c3RyYXAuY29tLylcbiAgKiBDb3B5cmlnaHQgMjAxMS0yMDI0IFRoZSBCb290c3RyYXAgQXV0aG9ycyAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2dyYXBocy9jb250cmlidXRvcnMpXG4gICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkocmVxdWlyZSgnLi4vZG9tL2V2ZW50LWhhbmRsZXIuanMnKSwgcmVxdWlyZSgnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZS5qcycpLCByZXF1aXJlKCcuL2NvbmZpZy5qcycpKSA6XG4gIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJy4uL2RvbS9ldmVudC1oYW5kbGVyJywgJy4uL2RvbS9zZWxlY3Rvci1lbmdpbmUnLCAnLi9jb25maWcnXSwgZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuRm9jdXN0cmFwID0gZmFjdG9yeShnbG9iYWwuRXZlbnRIYW5kbGVyLCBnbG9iYWwuU2VsZWN0b3JFbmdpbmUsIGdsb2JhbC5Db25maWcpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoRXZlbnRIYW5kbGVyLCBTZWxlY3RvckVuZ2luZSwgQ29uZmlnKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwIHV0aWwvZm9jdXN0cmFwLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gIC8qKlxuICAgKiBDb25zdGFudHNcbiAgICovXG5cbiAgY29uc3QgTkFNRSA9ICdmb2N1c3RyYXAnO1xuICBjb25zdCBEQVRBX0tFWSA9ICdicy5mb2N1c3RyYXAnO1xuICBjb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YDtcbiAgY29uc3QgRVZFTlRfRk9DVVNJTiA9IGBmb2N1c2luJHtFVkVOVF9LRVl9YDtcbiAgY29uc3QgRVZFTlRfS0VZRE9XTl9UQUIgPSBga2V5ZG93bi50YWIke0VWRU5UX0tFWX1gO1xuICBjb25zdCBUQUJfS0VZID0gJ1RhYic7XG4gIGNvbnN0IFRBQl9OQVZfRk9SV0FSRCA9ICdmb3J3YXJkJztcbiAgY29uc3QgVEFCX05BVl9CQUNLV0FSRCA9ICdiYWNrd2FyZCc7XG4gIGNvbnN0IERlZmF1bHQgPSB7XG4gICAgYXV0b2ZvY3VzOiB0cnVlLFxuICAgIHRyYXBFbGVtZW50OiBudWxsIC8vIFRoZSBlbGVtZW50IHRvIHRyYXAgZm9jdXMgaW5zaWRlIG9mXG4gIH07XG4gIGNvbnN0IERlZmF1bHRUeXBlID0ge1xuICAgIGF1dG9mb2N1czogJ2Jvb2xlYW4nLFxuICAgIHRyYXBFbGVtZW50OiAnZWxlbWVudCdcbiAgfTtcblxuICAvKipcbiAgICogQ2xhc3MgZGVmaW5pdGlvblxuICAgKi9cblxuICBjbGFzcyBGb2N1c1RyYXAgZXh0ZW5kcyBDb25maWcge1xuICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgc3VwZXIoKTtcbiAgICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPSBudWxsO1xuICAgIH1cblxuICAgIC8vIEdldHRlcnNcbiAgICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgICByZXR1cm4gRGVmYXVsdDtcbiAgICB9XG4gICAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICAgIHJldHVybiBEZWZhdWx0VHlwZTtcbiAgICB9XG4gICAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgICAgcmV0dXJuIE5BTUU7XG4gICAgfVxuXG4gICAgLy8gUHVibGljXG4gICAgYWN0aXZhdGUoKSB7XG4gICAgICBpZiAodGhpcy5faXNBY3RpdmUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5hdXRvZm9jdXMpIHtcbiAgICAgICAgdGhpcy5fY29uZmlnLnRyYXBFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9XG4gICAgICBFdmVudEhhbmRsZXIub2ZmKGRvY3VtZW50LCBFVkVOVF9LRVkpOyAvLyBndWFyZCBhZ2FpbnN0IGluZmluaXRlIGZvY3VzIGxvb3BcbiAgICAgIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfRk9DVVNJTiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlRm9jdXNpbihldmVudCkpO1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX1RBQiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlS2V5ZG93bihldmVudCkpO1xuICAgICAgdGhpcy5faXNBY3RpdmUgPSB0cnVlO1xuICAgIH1cbiAgICBkZWFjdGl2YXRlKCkge1xuICAgICAgaWYgKCF0aGlzLl9pc0FjdGl2ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlO1xuICAgICAgRXZlbnRIYW5kbGVyLm9mZihkb2N1bWVudCwgRVZFTlRfS0VZKTtcbiAgICB9XG5cbiAgICAvLyBQcml2YXRlXG4gICAgX2hhbmRsZUZvY3VzaW4oZXZlbnQpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgdHJhcEVsZW1lbnRcbiAgICAgIH0gPSB0aGlzLl9jb25maWc7XG4gICAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBkb2N1bWVudCB8fCBldmVudC50YXJnZXQgPT09IHRyYXBFbGVtZW50IHx8IHRyYXBFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgZWxlbWVudHMgPSBTZWxlY3RvckVuZ2luZS5mb2N1c2FibGVDaGlsZHJlbih0cmFwRWxlbWVudCk7XG4gICAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRyYXBFbGVtZW50LmZvY3VzKCk7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPT09IFRBQl9OQVZfQkFDS1dBUkQpIHtcbiAgICAgICAgZWxlbWVudHNbZWxlbWVudHMubGVuZ3RoIC0gMV0uZm9jdXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnRzWzBdLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICAgIF9oYW5kbGVLZXlkb3duKGV2ZW50KSB7XG4gICAgICBpZiAoZXZlbnQua2V5ICE9PSBUQUJfS0VZKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPSBldmVudC5zaGlmdEtleSA/IFRBQl9OQVZfQkFDS1dBUkQgOiBUQUJfTkFWX0ZPUldBUkQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIEZvY3VzVHJhcDtcblxufSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Zm9jdXN0cmFwLmpzLm1hcFxuIiwiLyohXG4gICogQm9vdHN0cmFwIHNjcm9sbGJhci5qcyB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoJy4uL2RvbS9tYW5pcHVsYXRvci5qcycpLCByZXF1aXJlKCcuLi9kb20vc2VsZWN0b3ItZW5naW5lLmpzJyksIHJlcXVpcmUoJy4vaW5kZXguanMnKSkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWycuLi9kb20vbWFuaXB1bGF0b3InLCAnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZScsICcuL2luZGV4J10sIGZhY3RvcnkpIDpcbiAgKGdsb2JhbCA9IHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyA/IGdsb2JhbFRoaXMgOiBnbG9iYWwgfHwgc2VsZiwgZ2xvYmFsLlNjcm9sbGJhciA9IGZhY3RvcnkoZ2xvYmFsLk1hbmlwdWxhdG9yLCBnbG9iYWwuU2VsZWN0b3JFbmdpbmUsIGdsb2JhbC5JbmRleCkpO1xufSkodGhpcywgKGZ1bmN0aW9uIChNYW5pcHVsYXRvciwgU2VsZWN0b3JFbmdpbmUsIGluZGV4X2pzKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwIHV0aWwvc2Nyb2xsQmFyLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gIC8qKlxuICAgKiBDb25zdGFudHNcbiAgICovXG5cbiAgY29uc3QgU0VMRUNUT1JfRklYRURfQ09OVEVOVCA9ICcuZml4ZWQtdG9wLCAuZml4ZWQtYm90dG9tLCAuaXMtZml4ZWQsIC5zdGlja3ktdG9wJztcbiAgY29uc3QgU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQgPSAnLnN0aWNreS10b3AnO1xuICBjb25zdCBQUk9QRVJUWV9QQURESU5HID0gJ3BhZGRpbmctcmlnaHQnO1xuICBjb25zdCBQUk9QRVJUWV9NQVJHSU4gPSAnbWFyZ2luLXJpZ2h0JztcblxuICAvKipcbiAgICogQ2xhc3MgZGVmaW5pdGlvblxuICAgKi9cblxuICBjbGFzcyBTY3JvbGxCYXJIZWxwZXIge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgdGhpcy5fZWxlbWVudCA9IGRvY3VtZW50LmJvZHk7XG4gICAgfVxuXG4gICAgLy8gUHVibGljXG4gICAgZ2V0V2lkdGgoKSB7XG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L2lubmVyV2lkdGgjdXNhZ2Vfbm90ZXNcbiAgICAgIGNvbnN0IGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGg7XG4gICAgICByZXR1cm4gTWF0aC5hYnMod2luZG93LmlubmVyV2lkdGggLSBkb2N1bWVudFdpZHRoKTtcbiAgICB9XG4gICAgaGlkZSgpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpO1xuICAgICAgdGhpcy5fZGlzYWJsZU92ZXJGbG93KCk7XG4gICAgICAvLyBnaXZlIHBhZGRpbmcgdG8gZWxlbWVudCB0byBiYWxhbmNlIHRoZSBoaWRkZW4gc2Nyb2xsYmFyIHdpZHRoXG4gICAgICB0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCBQUk9QRVJUWV9QQURESU5HLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlICsgd2lkdGgpO1xuICAgICAgLy8gdHJpY2s6IFdlIGFkanVzdCBwb3NpdGl2ZSBwYWRkaW5nUmlnaHQgYW5kIG5lZ2F0aXZlIG1hcmdpblJpZ2h0IHRvIHN0aWNreS10b3AgZWxlbWVudHMgdG8ga2VlcCBzaG93aW5nIGZ1bGx3aWR0aFxuICAgICAgdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfRklYRURfQ09OVEVOVCwgUFJPUEVSVFlfUEFERElORywgY2FsY3VsYXRlZFZhbHVlID0+IGNhbGN1bGF0ZWRWYWx1ZSArIHdpZHRoKTtcbiAgICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX1NUSUNLWV9DT05URU5ULCBQUk9QRVJUWV9NQVJHSU4sIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgLSB3aWR0aCk7XG4gICAgfVxuICAgIHJlc2V0KCkge1xuICAgICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCAnb3ZlcmZsb3cnKTtcbiAgICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCwgUFJPUEVSVFlfUEFERElORyk7XG4gICAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQsIFBST1BFUlRZX1BBRERJTkcpO1xuICAgICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCwgUFJPUEVSVFlfTUFSR0lOKTtcbiAgICB9XG4gICAgaXNPdmVyZmxvd2luZygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFdpZHRoKCkgPiAwO1xuICAgIH1cblxuICAgIC8vIFByaXZhdGVcbiAgICBfZGlzYWJsZU92ZXJGbG93KCkge1xuICAgICAgdGhpcy5fc2F2ZUluaXRpYWxBdHRyaWJ1dGUodGhpcy5fZWxlbWVudCwgJ292ZXJmbG93Jyk7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbic7XG4gICAgfVxuICAgIF9zZXRFbGVtZW50QXR0cmlidXRlcyhzZWxlY3Rvciwgc3R5bGVQcm9wZXJ0eSwgY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gdGhpcy5nZXRXaWR0aCgpO1xuICAgICAgY29uc3QgbWFuaXB1bGF0aW9uQ2FsbEJhY2sgPSBlbGVtZW50ID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQgIT09IHRoaXMuX2VsZW1lbnQgJiYgd2luZG93LmlubmVyV2lkdGggPiBlbGVtZW50LmNsaWVudFdpZHRoICsgc2Nyb2xsYmFyV2lkdGgpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fc2F2ZUluaXRpYWxBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSk7XG4gICAgICAgIGNvbnN0IGNhbGN1bGF0ZWRWYWx1ZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoc3R5bGVQcm9wZXJ0eSk7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVQcm9wZXJ0eSwgYCR7Y2FsbGJhY2soTnVtYmVyLnBhcnNlRmxvYXQoY2FsY3VsYXRlZFZhbHVlKSl9cHhgKTtcbiAgICAgIH07XG4gICAgICB0aGlzLl9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBtYW5pcHVsYXRpb25DYWxsQmFjayk7XG4gICAgfVxuICAgIF9zYXZlSW5pdGlhbEF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KSB7XG4gICAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGVsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KTtcbiAgICAgIGlmIChhY3R1YWxWYWx1ZSkge1xuICAgICAgICBNYW5pcHVsYXRvci5zZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHksIGFjdHVhbFZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoc2VsZWN0b3IsIHN0eWxlUHJvcGVydHkpIHtcbiAgICAgIGNvbnN0IG1hbmlwdWxhdGlvbkNhbGxCYWNrID0gZWxlbWVudCA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KTtcbiAgICAgICAgLy8gV2Ugb25seSB3YW50IHRvIHJlbW92ZSB0aGUgcHJvcGVydHkgaWYgdGhlIHZhbHVlIGlzIGBudWxsYDsgdGhlIHZhbHVlIGNhbiBhbHNvIGJlIHplcm9cbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShzdHlsZVByb3BlcnR5KTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgTWFuaXB1bGF0b3IucmVtb3ZlRGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShzdHlsZVByb3BlcnR5LCB2YWx1ZSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5fYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgbWFuaXB1bGF0aW9uQ2FsbEJhY2spO1xuICAgIH1cbiAgICBfYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgY2FsbEJhY2spIHtcbiAgICAgIGlmIChpbmRleF9qcy5pc0VsZW1lbnQoc2VsZWN0b3IpKSB7XG4gICAgICAgIGNhbGxCYWNrKHNlbGVjdG9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBzZWwgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvciwgdGhpcy5fZWxlbWVudCkpIHtcbiAgICAgICAgY2FsbEJhY2soc2VsKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gU2Nyb2xsQmFySGVscGVyO1xuXG59KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1zY3JvbGxiYXIuanMubWFwXG4iLCIvKiFcbiAgKiBCb290c3RyYXAgbW9kYWwuanMgdjUuMy4zIChodHRwczovL2dldGJvb3RzdHJhcC5jb20vKVxuICAqIENvcHlyaWdodCAyMDExLTIwMjQgVGhlIEJvb3RzdHJhcCBBdXRob3JzIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvZ3JhcGhzL2NvbnRyaWJ1dG9ycylcbiAgKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAgKi9cbihmdW5jdGlvbiAoZ2xvYmFsLCBmYWN0b3J5KSB7XG4gIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeShyZXF1aXJlKCcuL2Jhc2UtY29tcG9uZW50LmpzJyksIHJlcXVpcmUoJy4vZG9tL2V2ZW50LWhhbmRsZXIuanMnKSwgcmVxdWlyZSgnLi9kb20vc2VsZWN0b3ItZW5naW5lLmpzJyksIHJlcXVpcmUoJy4vdXRpbC9iYWNrZHJvcC5qcycpLCByZXF1aXJlKCcuL3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucy5qcycpLCByZXF1aXJlKCcuL3V0aWwvZm9jdXN0cmFwLmpzJyksIHJlcXVpcmUoJy4vdXRpbC9pbmRleC5qcycpLCByZXF1aXJlKCcuL3V0aWwvc2Nyb2xsYmFyLmpzJykpIDpcbiAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKFsnLi9iYXNlLWNvbXBvbmVudCcsICcuL2RvbS9ldmVudC1oYW5kbGVyJywgJy4vZG9tL3NlbGVjdG9yLWVuZ2luZScsICcuL3V0aWwvYmFja2Ryb3AnLCAnLi91dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMnLCAnLi91dGlsL2ZvY3VzdHJhcCcsICcuL3V0aWwvaW5kZXgnLCAnLi91dGlsL3Njcm9sbGJhciddLCBmYWN0b3J5KSA6XG4gIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGdsb2JhbC5Nb2RhbCA9IGZhY3RvcnkoZ2xvYmFsLkJhc2VDb21wb25lbnQsIGdsb2JhbC5FdmVudEhhbmRsZXIsIGdsb2JhbC5TZWxlY3RvckVuZ2luZSwgZ2xvYmFsLkJhY2tkcm9wLCBnbG9iYWwuQ29tcG9uZW50RnVuY3Rpb25zLCBnbG9iYWwuRm9jdXN0cmFwLCBnbG9iYWwuSW5kZXgsIGdsb2JhbC5TY3JvbGxiYXIpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoQmFzZUNvbXBvbmVudCwgRXZlbnRIYW5kbGVyLCBTZWxlY3RvckVuZ2luZSwgQmFja2Ryb3AsIGNvbXBvbmVudEZ1bmN0aW9uc19qcywgRm9jdXNUcmFwLCBpbmRleF9qcywgU2Nyb2xsQmFySGVscGVyKSB7ICd1c2Ugc3RyaWN0JztcblxuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICogQm9vdHN0cmFwIG1vZGFsLmpzXG4gICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuXG4gIC8qKlxuICAgKiBDb25zdGFudHNcbiAgICovXG5cbiAgY29uc3QgTkFNRSA9ICdtb2RhbCc7XG4gIGNvbnN0IERBVEFfS0VZID0gJ2JzLm1vZGFsJztcbiAgY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWA7XG4gIGNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknO1xuICBjb25zdCBFU0NBUEVfS0VZID0gJ0VzY2FwZSc7XG4gIGNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWA7XG4gIGNvbnN0IEVWRU5UX0hJREVfUFJFVkVOVEVEID0gYGhpZGVQcmV2ZW50ZWQke0VWRU5UX0tFWX1gO1xuICBjb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YDtcbiAgY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YDtcbiAgY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gO1xuICBjb25zdCBFVkVOVF9SRVNJWkUgPSBgcmVzaXplJHtFVkVOVF9LRVl9YDtcbiAgY29uc3QgRVZFTlRfQ0xJQ0tfRElTTUlTUyA9IGBjbGljay5kaXNtaXNzJHtFVkVOVF9LRVl9YDtcbiAgY29uc3QgRVZFTlRfTU9VU0VET1dOX0RJU01JU1MgPSBgbW91c2Vkb3duLmRpc21pc3Mke0VWRU5UX0tFWX1gO1xuICBjb25zdCBFVkVOVF9LRVlET1dOX0RJU01JU1MgPSBga2V5ZG93bi5kaXNtaXNzJHtFVkVOVF9LRVl9YDtcbiAgY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gO1xuICBjb25zdCBDTEFTU19OQU1FX09QRU4gPSAnbW9kYWwtb3Blbic7XG4gIGNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJztcbiAgY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnO1xuICBjb25zdCBDTEFTU19OQU1FX1NUQVRJQyA9ICdtb2RhbC1zdGF0aWMnO1xuICBjb25zdCBPUEVOX1NFTEVDVE9SID0gJy5tb2RhbC5zaG93JztcbiAgY29uc3QgU0VMRUNUT1JfRElBTE9HID0gJy5tb2RhbC1kaWFsb2cnO1xuICBjb25zdCBTRUxFQ1RPUl9NT0RBTF9CT0RZID0gJy5tb2RhbC1ib2R5JztcbiAgY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIl0nO1xuICBjb25zdCBEZWZhdWx0ID0ge1xuICAgIGJhY2tkcm9wOiB0cnVlLFxuICAgIGZvY3VzOiB0cnVlLFxuICAgIGtleWJvYXJkOiB0cnVlXG4gIH07XG4gIGNvbnN0IERlZmF1bHRUeXBlID0ge1xuICAgIGJhY2tkcm9wOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gICAgZm9jdXM6ICdib29sZWFuJyxcbiAgICBrZXlib2FyZDogJ2Jvb2xlYW4nXG4gIH07XG5cbiAgLyoqXG4gICAqIENsYXNzIGRlZmluaXRpb25cbiAgICovXG5cbiAgY2xhc3MgTW9kYWwgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG4gICAgICB0aGlzLl9kaWFsb2cgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RJQUxPRywgdGhpcy5fZWxlbWVudCk7XG4gICAgICB0aGlzLl9iYWNrZHJvcCA9IHRoaXMuX2luaXRpYWxpemVCYWNrRHJvcCgpO1xuICAgICAgdGhpcy5fZm9jdXN0cmFwID0gdGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpO1xuICAgICAgdGhpcy5faXNTaG93biA9IGZhbHNlO1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9zY3JvbGxCYXIgPSBuZXcgU2Nyb2xsQmFySGVscGVyKCk7XG4gICAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpO1xuICAgIH1cblxuICAgIC8vIEdldHRlcnNcbiAgICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgICByZXR1cm4gRGVmYXVsdDtcbiAgICB9XG4gICAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICAgIHJldHVybiBEZWZhdWx0VHlwZTtcbiAgICB9XG4gICAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgICAgcmV0dXJuIE5BTUU7XG4gICAgfVxuXG4gICAgLy8gUHVibGljXG4gICAgdG9nZ2xlKHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9pc1Nob3duID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3cocmVsYXRlZFRhcmdldCk7XG4gICAgfVxuICAgIHNob3cocmVsYXRlZFRhcmdldCkge1xuICAgICAgaWYgKHRoaXMuX2lzU2hvd24gfHwgdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1csIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldFxuICAgICAgfSk7XG4gICAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5faXNTaG93biA9IHRydWU7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgICAgdGhpcy5fc2Nyb2xsQmFyLmhpZGUoKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX09QRU4pO1xuICAgICAgdGhpcy5fYWRqdXN0RGlhbG9nKCk7XG4gICAgICB0aGlzLl9iYWNrZHJvcC5zaG93KCgpID0+IHRoaXMuX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpKTtcbiAgICB9XG4gICAgaGlkZSgpIHtcbiAgICAgIGlmICghdGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSk7XG4gICAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5faXNTaG93biA9IGZhbHNlO1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKTtcbiAgICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4gdGhpcy5faGlkZU1vZGFsKCksIHRoaXMuX2VsZW1lbnQsIHRoaXMuX2lzQW5pbWF0ZWQoKSk7XG4gICAgfVxuICAgIGRpc3Bvc2UoKSB7XG4gICAgICBFdmVudEhhbmRsZXIub2ZmKHdpbmRvdywgRVZFTlRfS0VZKTtcbiAgICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZGlhbG9nLCBFVkVOVF9LRVkpO1xuICAgICAgdGhpcy5fYmFja2Ryb3AuZGlzcG9zZSgpO1xuICAgICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKTtcbiAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgICB9XG4gICAgaGFuZGxlVXBkYXRlKCkge1xuICAgICAgdGhpcy5fYWRqdXN0RGlhbG9nKCk7XG4gICAgfVxuXG4gICAgLy8gUHJpdmF0ZVxuICAgIF9pbml0aWFsaXplQmFja0Ryb3AoKSB7XG4gICAgICByZXR1cm4gbmV3IEJhY2tkcm9wKHtcbiAgICAgICAgaXNWaXNpYmxlOiBCb29sZWFuKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCksXG4gICAgICAgIC8vICdzdGF0aWMnIG9wdGlvbiB3aWxsIGJlIHRyYW5zbGF0ZWQgdG8gdHJ1ZSwgYW5kIGJvb2xlYW5zIHdpbGwga2VlcCB0aGVpciB2YWx1ZSxcbiAgICAgICAgaXNBbmltYXRlZDogdGhpcy5faXNBbmltYXRlZCgpXG4gICAgICB9KTtcbiAgICB9XG4gICAgX2luaXRpYWxpemVGb2N1c1RyYXAoKSB7XG4gICAgICByZXR1cm4gbmV3IEZvY3VzVHJhcCh7XG4gICAgICAgIHRyYXBFbGVtZW50OiB0aGlzLl9lbGVtZW50XG4gICAgICB9KTtcbiAgICB9XG4gICAgX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIC8vIHRyeSB0byBhcHBlbmQgZHluYW1pYyBtb2RhbFxuICAgICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKHRoaXMuX2VsZW1lbnQpO1xuICAgICAgfVxuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpO1xuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnLCB0cnVlKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2RpYWxvZycpO1xuICAgICAgdGhpcy5fZWxlbWVudC5zY3JvbGxUb3AgPSAwO1xuICAgICAgY29uc3QgbW9kYWxCb2R5ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9NT0RBTF9CT0RZLCB0aGlzLl9kaWFsb2cpO1xuICAgICAgaWYgKG1vZGFsQm9keSkge1xuICAgICAgICBtb2RhbEJvZHkuc2Nyb2xsVG9wID0gMDtcbiAgICAgIH1cbiAgICAgIGluZGV4X2pzLnJlZmxvdyh0aGlzLl9lbGVtZW50KTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1cpO1xuICAgICAgY29uc3QgdHJhbnNpdGlvbkNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmZvY3VzKSB7XG4gICAgICAgICAgdGhpcy5fZm9jdXN0cmFwLmFjdGl2YXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOLCB7XG4gICAgICAgICAgcmVsYXRlZFRhcmdldFxuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKHRyYW5zaXRpb25Db21wbGV0ZSwgdGhpcy5fZGlhbG9nLCB0aGlzLl9pc0FuaW1hdGVkKCkpO1xuICAgIH1cbiAgICBfYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTl9ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC5rZXkgIT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5rZXlib2FyZCkge1xuICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKCk7XG4gICAgICB9KTtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX1JFU0laRSwgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNTaG93biAmJiAhdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgICAgdGhpcy5fYWRqdXN0RGlhbG9nKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRE9XTl9ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICAgIC8vIGEgYmFkIHRyaWNrIHRvIHNlZ3JlZ2F0ZSBjbGlja3MgdGhhdCBtYXkgc3RhcnQgaW5zaWRlIGRpYWxvZyBidXQgZW5kIG91dHNpZGUsIGFuZCBhdm9pZCBsaXN0ZW4gdG8gc2Nyb2xsYmFyIGNsaWNrc1xuICAgICAgICBFdmVudEhhbmRsZXIub25lKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMSUNLX0RJU01JU1MsIGV2ZW50MiA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQgIT09IGV2ZW50LnRhcmdldCB8fCB0aGlzLl9lbGVtZW50ICE9PSBldmVudDIudGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3AgPT09ICdzdGF0aWMnKSB7XG4gICAgICAgICAgICB0aGlzLl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3ApIHtcbiAgICAgICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgX2hpZGVNb2RhbCgpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdyb2xlJyk7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2JhY2tkcm9wLmhpZGUoKCkgPT4ge1xuICAgICAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9PUEVOKTtcbiAgICAgICAgdGhpcy5fcmVzZXRBZGp1c3RtZW50cygpO1xuICAgICAgICB0aGlzLl9zY3JvbGxCYXIucmVzZXQoKTtcbiAgICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBfaXNBbmltYXRlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpO1xuICAgIH1cbiAgICBfdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpIHtcbiAgICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREVfUFJFVkVOVEVEKTtcbiAgICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBjb25zdCBpc01vZGFsT3ZlcmZsb3dpbmcgPSB0aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICBjb25zdCBpbml0aWFsT3ZlcmZsb3dZID0gdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1k7XG4gICAgICAvLyByZXR1cm4gaWYgdGhlIGZvbGxvd2luZyBiYWNrZ3JvdW5kIHRyYW5zaXRpb24gaGFzbid0IHlldCBjb21wbGV0ZWRcbiAgICAgIGlmIChpbml0aWFsT3ZlcmZsb3dZID09PSAnaGlkZGVuJyB8fCB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NUQVRJQykpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSAnaGlkZGVuJztcbiAgICAgIH1cbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NUQVRJQyk7XG4gICAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU1RBVElDKTtcbiAgICAgICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSBpbml0aWFsT3ZlcmZsb3dZO1xuICAgICAgICB9LCB0aGlzLl9kaWFsb2cpO1xuICAgICAgfSwgdGhpcy5fZGlhbG9nKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gaGFuZGxlIG92ZXJmbG93aW5nIG1vZGFsc1xuICAgICAqL1xuXG4gICAgX2FkanVzdERpYWxvZygpIHtcbiAgICAgIGNvbnN0IGlzTW9kYWxPdmVyZmxvd2luZyA9IHRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodDtcbiAgICAgIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gdGhpcy5fc2Nyb2xsQmFyLmdldFdpZHRoKCk7XG4gICAgICBjb25zdCBpc0JvZHlPdmVyZmxvd2luZyA9IHNjcm9sbGJhcldpZHRoID4gMDtcbiAgICAgIGlmIChpc0JvZHlPdmVyZmxvd2luZyAmJiAhaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5ID0gaW5kZXhfanMuaXNSVEwoKSA/ICdwYWRkaW5nTGVmdCcgOiAncGFkZGluZ1JpZ2h0JztcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSBgJHtzY3JvbGxiYXJXaWR0aH1weGA7XG4gICAgICB9XG4gICAgICBpZiAoIWlzQm9keU92ZXJmbG93aW5nICYmIGlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGluZGV4X2pzLmlzUlRMKCkgPyAncGFkZGluZ1JpZ2h0JyA6ICdwYWRkaW5nTGVmdCc7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbcHJvcGVydHldID0gYCR7c2Nyb2xsYmFyV2lkdGh9cHhgO1xuICAgICAgfVxuICAgIH1cbiAgICBfcmVzZXRBZGp1c3RtZW50cygpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQgPSAnJztcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gJyc7XG4gICAgfVxuXG4gICAgLy8gU3RhdGljXG4gICAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcsIHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgICBjb25zdCBkYXRhID0gTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW2NvbmZpZ10ocmVsYXRlZFRhcmdldCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAgICovXG5cbiAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcyk7XG4gICAgaWYgKFsnQScsICdBUkVBJ10uaW5jbHVkZXModGhpcy50YWdOYW1lKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX1NIT1csIHNob3dFdmVudCA9PiB7XG4gICAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgLy8gb25seSByZWdpc3RlciBmb2N1cyByZXN0b3JlciBpZiBtb2RhbCB3aWxsIGFjdHVhbGx5IGdldCBzaG93blxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfSElEREVOLCAoKSA9PiB7XG4gICAgICAgIGlmIChpbmRleF9qcy5pc1Zpc2libGUodGhpcykpIHtcbiAgICAgICAgICB0aGlzLmZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgLy8gYXZvaWQgY29uZmxpY3Qgd2hlbiBjbGlja2luZyBtb2RhbCB0b2dnbGVyIHdoaWxlIGFub3RoZXIgb25lIGlzIG9wZW5cbiAgICBjb25zdCBhbHJlYWR5T3BlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoT1BFTl9TRUxFQ1RPUik7XG4gICAgaWYgKGFscmVhZHlPcGVuKSB7XG4gICAgICBNb2RhbC5nZXRJbnN0YW5jZShhbHJlYWR5T3BlbikuaGlkZSgpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhID0gTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpO1xuICAgIGRhdGEudG9nZ2xlKHRoaXMpO1xuICB9KTtcbiAgY29tcG9uZW50RnVuY3Rpb25zX2pzLmVuYWJsZURpc21pc3NUcmlnZ2VyKE1vZGFsKTtcblxuICAvKipcbiAgICogalF1ZXJ5XG4gICAqL1xuXG4gIGluZGV4X2pzLmRlZmluZUpRdWVyeVBsdWdpbihNb2RhbCk7XG5cbiAgcmV0dXJuIE1vZGFsO1xuXG59KSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1tb2RhbC5qcy5tYXBcbiIsImV4cG9ydCB2YXIgdG9wID0gJ3RvcCc7XG5leHBvcnQgdmFyIGJvdHRvbSA9ICdib3R0b20nO1xuZXhwb3J0IHZhciByaWdodCA9ICdyaWdodCc7XG5leHBvcnQgdmFyIGxlZnQgPSAnbGVmdCc7XG5leHBvcnQgdmFyIGF1dG8gPSAnYXV0byc7XG5leHBvcnQgdmFyIGJhc2VQbGFjZW1lbnRzID0gW3RvcCwgYm90dG9tLCByaWdodCwgbGVmdF07XG5leHBvcnQgdmFyIHN0YXJ0ID0gJ3N0YXJ0JztcbmV4cG9ydCB2YXIgZW5kID0gJ2VuZCc7XG5leHBvcnQgdmFyIGNsaXBwaW5nUGFyZW50cyA9ICdjbGlwcGluZ1BhcmVudHMnO1xuZXhwb3J0IHZhciB2aWV3cG9ydCA9ICd2aWV3cG9ydCc7XG5leHBvcnQgdmFyIHBvcHBlciA9ICdwb3BwZXInO1xuZXhwb3J0IHZhciByZWZlcmVuY2UgPSAncmVmZXJlbmNlJztcbmV4cG9ydCB2YXIgdmFyaWF0aW9uUGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9iYXNlUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pO1xuZXhwb3J0IHZhciBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL1tdLmNvbmNhdChiYXNlUGxhY2VtZW50cywgW2F1dG9dKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gIHJldHVybiBhY2MuY29uY2F0KFtwbGFjZW1lbnQsIHBsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7IC8vIG1vZGlmaWVycyB0aGF0IG5lZWQgdG8gcmVhZCB0aGUgRE9NXG5cbmV4cG9ydCB2YXIgYmVmb3JlUmVhZCA9ICdiZWZvcmVSZWFkJztcbmV4cG9ydCB2YXIgcmVhZCA9ICdyZWFkJztcbmV4cG9ydCB2YXIgYWZ0ZXJSZWFkID0gJ2FmdGVyUmVhZCc7IC8vIHB1cmUtbG9naWMgbW9kaWZpZXJzXG5cbmV4cG9ydCB2YXIgYmVmb3JlTWFpbiA9ICdiZWZvcmVNYWluJztcbmV4cG9ydCB2YXIgbWFpbiA9ICdtYWluJztcbmV4cG9ydCB2YXIgYWZ0ZXJNYWluID0gJ2FmdGVyTWFpbic7IC8vIG1vZGlmaWVyIHdpdGggdGhlIHB1cnBvc2UgdG8gd3JpdGUgdG8gdGhlIERPTSAob3Igd3JpdGUgaW50byBhIGZyYW1ld29yayBzdGF0ZSlcblxuZXhwb3J0IHZhciBiZWZvcmVXcml0ZSA9ICdiZWZvcmVXcml0ZSc7XG5leHBvcnQgdmFyIHdyaXRlID0gJ3dyaXRlJztcbmV4cG9ydCB2YXIgYWZ0ZXJXcml0ZSA9ICdhZnRlcldyaXRlJztcbmV4cG9ydCB2YXIgbW9kaWZpZXJQaGFzZXMgPSBbYmVmb3JlUmVhZCwgcmVhZCwgYWZ0ZXJSZWFkLCBiZWZvcmVNYWluLCBtYWluLCBhZnRlck1haW4sIGJlZm9yZVdyaXRlLCB3cml0ZSwgYWZ0ZXJXcml0ZV07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZU5hbWUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCA/IChlbGVtZW50Lm5vZGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIGlmIChub2RlLnRvU3RyaW5nKCkgIT09ICdbb2JqZWN0IFdpbmRvd10nKSB7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQ7XG4gICAgcmV0dXJuIG93bmVyRG9jdW1lbnQgPyBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdyA6IHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNIVE1MRWxlbWVudChub2RlKSB7XG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLkhUTUxFbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEhUTUxFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc1NoYWRvd1Jvb3Qobm9kZSkge1xuICAvLyBJRSAxMSBoYXMgbm8gU2hhZG93Um9vdFxuICBpZiAodHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuU2hhZG93Um9vdDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290O1xufVxuXG5leHBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9OyIsImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7IC8vIFRoaXMgbW9kaWZpZXIgdGFrZXMgdGhlIHN0eWxlcyBwcmVwYXJlZCBieSB0aGUgYGNvbXB1dGVTdHlsZXNgIG1vZGlmaWVyXG4vLyBhbmQgYXBwbGllcyB0aGVtIHRvIHRoZSBIVE1MRWxlbWVudHMgc3VjaCBhcyBwb3BwZXIgYW5kIGFycm93XG5cbmZ1bmN0aW9uIGFwcGx5U3R5bGVzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZTtcbiAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgc3R5bGUgPSBzdGF0ZS5zdHlsZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRmxvdyBkb2Vzbid0IHN1cHBvcnQgdG8gZXh0ZW5kIHRoaXMgcHJvcGVydHksIGJ1dCBpdCdzIHRoZSBtb3N0XG4gICAgLy8gZWZmZWN0aXZlIHdheSB0byBhcHBseSBzdHlsZXMgdG8gYW4gSFRNTEVsZW1lbnRcbiAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV1cblxuXG4gICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIHZhbHVlID0gYXR0cmlidXRlc1tuYW1lXTtcblxuICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlID09PSB0cnVlID8gJycgOiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGU7XG4gIHZhciBpbml0aWFsU3R5bGVzID0ge1xuICAgIHBvcHBlcjoge1xuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICB0b3A6ICcwJyxcbiAgICAgIG1hcmdpbjogJzAnXG4gICAgfSxcbiAgICBhcnJvdzoge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgICB9LFxuICAgIHJlZmVyZW5jZToge31cbiAgfTtcbiAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5wb3BwZXIuc3R5bGUsIGluaXRpYWxTdHlsZXMucG9wcGVyKTtcbiAgc3RhdGUuc3R5bGVzID0gaW5pdGlhbFN0eWxlcztcblxuICBpZiAoc3RhdGUuZWxlbWVudHMuYXJyb3cpIHtcbiAgICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLmFycm93LnN0eWxlLCBpbml0aWFsU3R5bGVzLmFycm93KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07XG4gICAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgICB2YXIgc3R5bGVQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoc3RhdGUuc3R5bGVzLmhhc093blByb3BlcnR5KG5hbWUpID8gc3RhdGUuc3R5bGVzW25hbWVdIDogaW5pdGlhbFN0eWxlc1tuYW1lXSk7IC8vIFNldCBhbGwgdmFsdWVzIHRvIGFuIGVtcHR5IHN0cmluZyB0byB1bnNldCB0aGVtXG5cbiAgICAgIHZhciBzdHlsZSA9IHN0eWxlUHJvcGVydGllcy5yZWR1Y2UoZnVuY3Rpb24gKHN0eWxlLCBwcm9wZXJ0eSkge1xuICAgICAgICBzdHlsZVtwcm9wZXJ0eV0gPSAnJztcbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSwge30pOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2FwcGx5U3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBhcHBseVN0eWxlcyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ2NvbXB1dGVTdHlsZXMnXVxufTsiLCJpbXBvcnQgeyBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59IiwiZXhwb3J0IHZhciBtYXggPSBNYXRoLm1heDtcbmV4cG9ydCB2YXIgbWluID0gTWF0aC5taW47XG5leHBvcnQgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVQVN0cmluZygpIHtcbiAgdmFyIHVhRGF0YSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhO1xuXG4gIGlmICh1YURhdGEgIT0gbnVsbCAmJiB1YURhdGEuYnJhbmRzICYmIEFycmF5LmlzQXJyYXkodWFEYXRhLmJyYW5kcykpIHtcbiAgICByZXR1cm4gdWFEYXRhLmJyYW5kcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLmJyYW5kICsgXCIvXCIgKyBpdGVtLnZlcnNpb247XG4gICAgfSkuam9pbignICcpO1xuICB9XG5cbiAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG59IiwiaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzTGF5b3V0Vmlld3BvcnQoKSB7XG4gIHJldHVybiAhL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChnZXRVQVN0cmluZygpKTtcbn0iLCJpbXBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGluY2x1ZGVTY2FsZSwgaXNGaXhlZFN0cmF0ZWd5KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGlzRml4ZWRTdHJhdGVneSA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZFN0cmF0ZWd5ID0gZmFsc2U7XG4gIH1cblxuICB2YXIgY2xpZW50UmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSAxO1xuICB2YXIgc2NhbGVZID0gMTtcblxuICBpZiAoaW5jbHVkZVNjYWxlICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkpIHtcbiAgICBzY2FsZVggPSBlbGVtZW50Lm9mZnNldFdpZHRoID4gMCA/IHJvdW5kKGNsaWVudFJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxIDogMTtcbiAgICBzY2FsZVkgPSBlbGVtZW50Lm9mZnNldEhlaWdodCA+IDAgPyByb3VuZChjbGllbnRSZWN0LmhlaWdodCkgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxIDogMTtcbiAgfVxuXG4gIHZhciBfcmVmID0gaXNFbGVtZW50KGVsZW1lbnQpID8gZ2V0V2luZG93KGVsZW1lbnQpIDogd2luZG93LFxuICAgICAgdmlzdWFsVmlld3BvcnQgPSBfcmVmLnZpc3VhbFZpZXdwb3J0O1xuXG4gIHZhciBhZGRWaXN1YWxPZmZzZXRzID0gIWlzTGF5b3V0Vmlld3BvcnQoKSAmJiBpc0ZpeGVkU3RyYXRlZ3k7XG4gIHZhciB4ID0gKGNsaWVudFJlY3QubGVmdCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCA6IDApKSAvIHNjYWxlWDtcbiAgdmFyIHkgPSAoY2xpZW50UmVjdC50b3AgKyAoYWRkVmlzdWFsT2Zmc2V0cyAmJiB2aXN1YWxWaWV3cG9ydCA/IHZpc3VhbFZpZXdwb3J0Lm9mZnNldFRvcCA6IDApKSAvIHNjYWxlWTtcbiAgdmFyIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aCAvIHNjYWxlWDtcbiAgdmFyIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0IC8gc2NhbGVZO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB0b3A6IHksXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgbGVmdDogeCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiOyAvLyBSZXR1cm5zIHRoZSBsYXlvdXQgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuIExheW91dFxuLy8gbWVhbnMgaXQgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYXlvdXRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCk7IC8vIFVzZSB0aGUgY2xpZW50UmVjdCBzaXplcyBpZiBpdCdzIG5vdCBiZWVuIHRyYW5zZm9ybWVkLlxuICAvLyBGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEyMjNcblxuICB2YXIgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3Qud2lkdGggLSB3aWR0aCkgPD0gMSkge1xuICAgIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aDtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LmhlaWdodCAtIGhlaWdodCkgPD0gMSkge1xuICAgIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBlbGVtZW50Lm9mZnNldExlZnQsXG4gICAgeTogZWxlbWVudC5vZmZzZXRUb3AsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59IiwiaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGFpbnMocGFyZW50LCBjaGlsZCkge1xuICB2YXIgcm9vdE5vZGUgPSBjaGlsZC5nZXRSb290Tm9kZSAmJiBjaGlsZC5nZXRSb290Tm9kZSgpOyAvLyBGaXJzdCwgYXR0ZW1wdCB3aXRoIGZhc3RlciBuYXRpdmUgbWV0aG9kXG5cbiAgaWYgKHBhcmVudC5jb250YWlucyhjaGlsZCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSAvLyB0aGVuIGZhbGxiYWNrIHRvIGN1c3RvbSBpbXBsZW1lbnRhdGlvbiB3aXRoIFNoYWRvdyBET00gc3VwcG9ydFxuICBlbHNlIGlmIChyb290Tm9kZSAmJiBpc1NoYWRvd1Jvb3Qocm9vdE5vZGUpKSB7XG4gICAgICB2YXIgbmV4dCA9IGNoaWxkO1xuXG4gICAgICBkbyB7XG4gICAgICAgIGlmIChuZXh0ICYmIHBhcmVudC5pc1NhbWVOb2RlKG5leHQpKSB7XG4gICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddOiBuZWVkIGEgYmV0dGVyIHdheSB0byBoYW5kbGUgdGhpcy4uLlxuXG5cbiAgICAgICAgbmV4dCA9IG5leHQucGFyZW50Tm9kZSB8fCBuZXh0Lmhvc3Q7XG4gICAgICB9IHdoaWxlIChuZXh0KTtcbiAgICB9IC8vIEdpdmUgdXAsIHRoZSByZXN1bHQgaXMgZmFsc2VcblxuXG4gIHJldHVybiBmYWxzZTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gIHJldHVybiBnZXRXaW5kb3coZWxlbWVudCkuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcbn0iLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmRleE9mKGdldE5vZGVOYW1lKGVsZW1lbnQpKSA+PSAwO1xufSIsImltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSB7XG4gIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGFzc3VtZSBib2R5IGlzIGFsd2F5cyBhdmFpbGFibGVcbiAgcmV0dXJuICgoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudC5vd25lckRvY3VtZW50IDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gIGVsZW1lbnQuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkuZG9jdW1lbnRFbGVtZW50O1xufSIsImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFBhcmVudE5vZGUoZWxlbWVudCkge1xuICBpZiAoZ2V0Tm9kZU5hbWUoZWxlbWVudCkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBlbGVtZW50O1xuICB9XG5cbiAgcmV0dXJuICgvLyB0aGlzIGlzIGEgcXVpY2tlciAoYnV0IGxlc3MgdHlwZSBzYWZlKSB3YXkgdG8gc2F2ZSBxdWl0ZSBzb21lIGJ5dGVzIGZyb20gdGhlIGJ1bmRsZVxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl1cbiAgICAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICBlbGVtZW50LmFzc2lnbmVkU2xvdCB8fCAvLyBzdGVwIGludG8gdGhlIHNoYWRvdyBET00gb2YgdGhlIHBhcmVudCBvZiBhIHNsb3R0ZWQgbm9kZVxuICAgIGVsZW1lbnQucGFyZW50Tm9kZSB8fCAoIC8vIERPTSBFbGVtZW50IGRldGVjdGVkXG4gICAgaXNTaGFkb3dSb290KGVsZW1lbnQpID8gZWxlbWVudC5ob3N0IDogbnVsbCkgfHwgLy8gU2hhZG93Um9vdCBkZXRlY3RlZFxuICAgIC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBIVE1MRWxlbWVudCBpcyBhIE5vZGVcbiAgICBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkgLy8gZmFsbGJhY2tcblxuICApO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBpc1RhYmxlRWxlbWVudCBmcm9tIFwiLi9pc1RhYmxlRWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzgzN1xuICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59IC8vIGAub2Zmc2V0UGFyZW50YCByZXBvcnRzIGBudWxsYCBmb3IgZml4ZWQgZWxlbWVudHMsIHdoaWxlIGFic29sdXRlIGVsZW1lbnRzXG4vLyByZXR1cm4gdGhlIGNvbnRhaW5pbmcgYmxvY2tcblxuXG5mdW5jdGlvbiBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICB2YXIgaXNGaXJlZm94ID0gL2ZpcmVmb3gvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuICB2YXIgaXNJRSA9IC9UcmlkZW50L2kudGVzdChnZXRVQVN0cmluZygpKTtcblxuICBpZiAoaXNJRSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgLy8gSW4gSUUgOSwgMTAgYW5kIDExIGZpeGVkIGVsZW1lbnRzIGNvbnRhaW5pbmcgYmxvY2sgaXMgYWx3YXlzIGVzdGFibGlzaGVkIGJ5IHRoZSB2aWV3cG9ydFxuICAgIHZhciBlbGVtZW50Q3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50Q3NzLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gIGlmIChpc1NoYWRvd1Jvb3QoY3VycmVudE5vZGUpKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5ob3N0O1xuICB9XG5cbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmIFsnaHRtbCcsICdib2R5J10uaW5kZXhPZihnZXROb2RlTmFtZShjdXJyZW50Tm9kZSkpIDwgMCkge1xuICAgIHZhciBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTsgLy8gVGhpcyBpcyBub24tZXhoYXVzdGl2ZSBidXQgY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBDU1MgcHJvcGVydGllcyB0aGF0XG4gICAgLy8gY3JlYXRlIGEgY29udGFpbmluZyBibG9jay5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuXG4gICAgaWYgKGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fCBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fCBjc3MuY29udGFpbiA9PT0gJ3BhaW50JyB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZSddLmluZGV4T2YoY3NzLndpbGxDaGFuZ2UpICE9PSAtMSB8fCBpc0ZpcmVmb3ggJiYgY3NzLndpbGxDaGFuZ2UgPT09ICdmaWx0ZXInIHx8IGlzRmlyZWZveCAmJiBjc3MuZmlsdGVyICYmIGNzcy5maWx0ZXIgIT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCk7XG5cbiAgd2hpbGUgKG9mZnNldFBhcmVudCAmJiBpc1RhYmxlRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCk7XG4gIH1cblxuICBpZiAob2Zmc2V0UGFyZW50ICYmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnaHRtbCcgfHwgZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2JvZHknICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbmRvdztcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBbJ3RvcCcsICdib3R0b20nXS5pbmRleE9mKHBsYWNlbWVudCkgPj0gMCA/ICd4JyA6ICd5Jztcbn0iLCJpbXBvcnQgeyBtYXggYXMgbWF0aE1heCwgbWluIGFzIG1hdGhNaW4gfSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5leHBvcnQgZnVuY3Rpb24gd2l0aGluKG1pbiwgdmFsdWUsIG1heCkge1xuICByZXR1cm4gbWF0aE1heChtaW4sIG1hdGhNaW4odmFsdWUsIG1heCkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhpbk1heENsYW1wKG1pbiwgdmFsdWUsIG1heCkge1xuICB2YXIgdiA9IHdpdGhpbihtaW4sIHZhbHVlLCBtYXgpO1xuICByZXR1cm4gdiA+IG1heCA/IG1heCA6IHY7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RnJlc2hTaWRlT2JqZWN0KCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMFxuICB9O1xufSIsImltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4vZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZVBhZGRpbmdPYmplY3QocGFkZGluZ09iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ2V0RnJlc2hTaWRlT2JqZWN0KCksIHBhZGRpbmdPYmplY3QpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4cGFuZFRvSGFzaE1hcCh2YWx1ZSwga2V5cykge1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoZnVuY3Rpb24gKGhhc2hNYXAsIGtleSkge1xuICAgIGhhc2hNYXBba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiBoYXNoTWFwO1xuICB9LCB7fSk7XG59IiwiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuLi9kb20tdXRpbHMvY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgd2l0aGluIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi4vdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuLi91dGlscy9leHBhbmRUb0hhc2hNYXAuanNcIjtcbmltcG9ydCB7IGxlZnQsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdG9wLCBib3R0b20gfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdG9QYWRkaW5nT2JqZWN0ID0gZnVuY3Rpb24gdG9QYWRkaW5nT2JqZWN0KHBhZGRpbmcsIHN0YXRlKSB7XG4gIHBhZGRpbmcgPSB0eXBlb2YgcGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IHBhZGRpbmcoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiBwYWRkaW5nO1xuICByZXR1cm4gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbn07XG5cbmZ1bmN0aW9uIGFycm93KF9yZWYpIHtcbiAgdmFyIF9zdGF0ZSRtb2RpZmllcnNEYXRhJDtcblxuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGlzVmVydGljYWwgPSBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgaWYgKCFhcnJvd0VsZW1lbnQgfHwgIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFkZGluZ09iamVjdCA9IHRvUGFkZGluZ09iamVjdChvcHRpb25zLnBhZGRpbmcsIHN0YXRlKTtcbiAgdmFyIGFycm93UmVjdCA9IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KTtcbiAgdmFyIG1pblByb3AgPSBheGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICB2YXIgbWF4UHJvcCA9IGF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICB2YXIgZW5kRGlmZiA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtsZW5dICsgc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnBvcHBlcltsZW5dO1xuICB2YXIgc3RhcnREaWZmID0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGFycm93RWxlbWVudCk7XG4gIHZhciBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBheGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRIZWlnaHQgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIHx8IDAgOiAwO1xuICB2YXIgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7IC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgcG9wcGVyIGlmIHRoZSBjZW50ZXIgcG9pbnQgaXNcbiAgLy8gb3V0c2lkZSBvZiB0aGUgcG9wcGVyIGJvdW5kc1xuXG4gIHZhciBtaW4gPSBwYWRkaW5nT2JqZWN0W21pblByb3BdO1xuICB2YXIgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93UmVjdFtsZW5dIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgdmFyIGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dSZWN0W2xlbl0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gIHZhciBvZmZzZXQgPSB3aXRoaW4obWluLCBjZW50ZXIsIG1heCk7IC8vIFByZXZlbnRzIGJyZWFraW5nIHN5bnRheCBoaWdobGlnaHRpbmcuLi5cblxuICB2YXIgYXhpc1Byb3AgPSBheGlzO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gKF9zdGF0ZSRtb2RpZmllcnNEYXRhJCA9IHt9LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSRbYXhpc1Byb3BdID0gb2Zmc2V0LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQuY2VudGVyT2Zmc2V0ID0gb2Zmc2V0IC0gY2VudGVyLCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQpO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQsXG4gICAgICBhcnJvd0VsZW1lbnQgPSBfb3B0aW9ucyRlbGVtZW50ID09PSB2b2lkIDAgPyAnW2RhdGEtcG9wcGVyLWFycm93XScgOiBfb3B0aW9ucyRlbGVtZW50O1xuXG4gIGlmIChhcnJvd0VsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBDU1Mgc2VsZWN0b3JcblxuXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGFpbnMoc3RhdGUuZWxlbWVudHMucG9wcGVyLCBhcnJvd0VsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUuZWxlbWVudHMuYXJyb3cgPSBhcnJvd0VsZW1lbnQ7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcnJvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBhcnJvdyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXVxufTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn0iLCJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHVuc2V0U2lkZXMgPSB7XG4gIHRvcDogJ2F1dG8nLFxuICByaWdodDogJ2F1dG8nLFxuICBib3R0b206ICdhdXRvJyxcbiAgbGVmdDogJ2F1dG8nXG59OyAvLyBSb3VuZCB0aGUgb2Zmc2V0cyB0byB0aGUgbmVhcmVzdCBzdWl0YWJsZSBzdWJwaXhlbCBiYXNlZCBvbiB0aGUgRFBSLlxuLy8gWm9vbWluZyBjYW4gY2hhbmdlIHRoZSBEUFIsIGJ1dCBpdCBzZWVtcyB0byByZXBvcnQgYSB2YWx1ZSB0aGF0IHdpbGxcbi8vIGNsZWFubHkgZGl2aWRlIHRoZSB2YWx1ZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgc3VicGl4ZWxzLlxuXG5mdW5jdGlvbiByb3VuZE9mZnNldHNCeURQUihfcmVmLCB3aW4pIHtcbiAgdmFyIHggPSBfcmVmLngsXG4gICAgICB5ID0gX3JlZi55O1xuICB2YXIgZHByID0gd2luLmRldmljZVBpeGVsUmF0aW8gfHwgMTtcbiAgcmV0dXJuIHtcbiAgICB4OiByb3VuZCh4ICogZHByKSAvIGRwciB8fCAwLFxuICAgIHk6IHJvdW5kKHkgKiBkcHIpIC8gZHByIHx8IDBcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBfT2JqZWN0JGFzc2lnbjI7XG5cbiAgdmFyIHBvcHBlciA9IF9yZWYyLnBvcHBlcixcbiAgICAgIHBvcHBlclJlY3QgPSBfcmVmMi5wb3BwZXJSZWN0LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZjIucGxhY2VtZW50LFxuICAgICAgdmFyaWF0aW9uID0gX3JlZjIudmFyaWF0aW9uLFxuICAgICAgb2Zmc2V0cyA9IF9yZWYyLm9mZnNldHMsXG4gICAgICBwb3NpdGlvbiA9IF9yZWYyLnBvc2l0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX3JlZjIuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgYWRhcHRpdmUgPSBfcmVmMi5hZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9yZWYyLnJvdW5kT2Zmc2V0cyxcbiAgICAgIGlzRml4ZWQgPSBfcmVmMi5pc0ZpeGVkO1xuICB2YXIgX29mZnNldHMkeCA9IG9mZnNldHMueCxcbiAgICAgIHggPSBfb2Zmc2V0cyR4ID09PSB2b2lkIDAgPyAwIDogX29mZnNldHMkeCxcbiAgICAgIF9vZmZzZXRzJHkgPSBvZmZzZXRzLnksXG4gICAgICB5ID0gX29mZnNldHMkeSA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHk7XG5cbiAgdmFyIF9yZWYzID0gdHlwZW9mIHJvdW5kT2Zmc2V0cyA9PT0gJ2Z1bmN0aW9uJyA/IHJvdW5kT2Zmc2V0cyh7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0pIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmMy54O1xuICB5ID0gX3JlZjMueTtcbiAgdmFyIGhhc1ggPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd4Jyk7XG4gIHZhciBoYXNZID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneScpO1xuICB2YXIgc2lkZVggPSBsZWZ0O1xuICB2YXIgc2lkZVkgPSB0b3A7XG4gIHZhciB3aW4gPSB3aW5kb3c7XG5cbiAgaWYgKGFkYXB0aXZlKSB7XG4gICAgdmFyIG9mZnNldFBhcmVudCA9IGdldE9mZnNldFBhcmVudChwb3BwZXIpO1xuICAgIHZhciBoZWlnaHRQcm9wID0gJ2NsaWVudEhlaWdodCc7XG4gICAgdmFyIHdpZHRoUHJvcCA9ICdjbGllbnRXaWR0aCc7XG5cbiAgICBpZiAob2Zmc2V0UGFyZW50ID09PSBnZXRXaW5kb3cocG9wcGVyKSkge1xuICAgICAgb2Zmc2V0UGFyZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KHBvcHBlcik7XG5cbiAgICAgIGlmIChnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gIT09ICdzdGF0aWMnICYmIHBvc2l0aW9uID09PSAnYWJzb2x1dGUnKSB7XG4gICAgICAgIGhlaWdodFByb3AgPSAnc2Nyb2xsSGVpZ2h0JztcbiAgICAgICAgd2lkdGhQcm9wID0gJ3Njcm9sbFdpZHRoJztcbiAgICAgIH1cbiAgICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhc3RdOiBmb3JjZSB0eXBlIHJlZmluZW1lbnQsIHdlIGNvbXBhcmUgb2Zmc2V0UGFyZW50IHdpdGggd2luZG93IGFib3ZlLCBidXQgRmxvdyBkb2Vzbid0IGRldGVjdCBpdFxuXG5cbiAgICBvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQ7XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSB0b3AgfHwgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCBwbGFjZW1lbnQgPT09IHJpZ2h0KSAmJiB2YXJpYXRpb24gPT09IGVuZCkge1xuICAgICAgc2lkZVkgPSBib3R0b207XG4gICAgICB2YXIgb2Zmc2V0WSA9IGlzRml4ZWQgJiYgb2Zmc2V0UGFyZW50ID09PSB3aW4gJiYgd2luLnZpc3VhbFZpZXdwb3J0ID8gd2luLnZpc3VhbFZpZXdwb3J0LmhlaWdodCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W2hlaWdodFByb3BdO1xuICAgICAgeSAtPSBvZmZzZXRZIC0gcG9wcGVyUmVjdC5oZWlnaHQ7XG4gICAgICB5ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSBsZWZ0IHx8IChwbGFjZW1lbnQgPT09IHRvcCB8fCBwbGFjZW1lbnQgPT09IGJvdHRvbSkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVYID0gcmlnaHQ7XG4gICAgICB2YXIgb2Zmc2V0WCA9IGlzRml4ZWQgJiYgb2Zmc2V0UGFyZW50ID09PSB3aW4gJiYgd2luLnZpc3VhbFZpZXdwb3J0ID8gd2luLnZpc3VhbFZpZXdwb3J0LndpZHRoIDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICBvZmZzZXRQYXJlbnRbd2lkdGhQcm9wXTtcbiAgICAgIHggLT0gb2Zmc2V0WCAtIHBvcHBlclJlY3Qud2lkdGg7XG4gICAgICB4ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29tbW9uU3R5bGVzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgcG9zaXRpb246IHBvc2l0aW9uXG4gIH0sIGFkYXB0aXZlICYmIHVuc2V0U2lkZXMpO1xuXG4gIHZhciBfcmVmNCA9IHJvdW5kT2Zmc2V0cyA9PT0gdHJ1ZSA/IHJvdW5kT2Zmc2V0c0J5RFBSKHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfSwgZ2V0V2luZG93KHBvcHBlcikpIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmNC54O1xuICB5ID0gX3JlZjQueTtcblxuICBpZiAoZ3B1QWNjZWxlcmF0aW9uKSB7XG4gICAgdmFyIF9PYmplY3QkYXNzaWduO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduID0ge30sIF9PYmplY3QkYXNzaWduW3NpZGVZXSA9IGhhc1kgPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ25bc2lkZVhdID0gaGFzWCA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbi50cmFuc2Zvcm0gPSAod2luLmRldmljZVBpeGVsUmF0aW8gfHwgMSkgPD0gMSA/IFwidHJhbnNsYXRlKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgpXCIgOiBcInRyYW5zbGF0ZTNkKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgsIDApXCIsIF9PYmplY3QkYXNzaWduKSk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24yID0ge30sIF9PYmplY3QkYXNzaWduMltzaWRlWV0gPSBoYXNZID8geSArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjJbc2lkZVhdID0gaGFzWCA/IHggKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yLnRyYW5zZm9ybSA9ICcnLCBfT2JqZWN0JGFzc2lnbjIpKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0eWxlcyhfcmVmNSkge1xuICB2YXIgc3RhdGUgPSBfcmVmNS5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmNS5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID0gb3B0aW9ucy5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRncHVBY2NlbGVyYXQsXG4gICAgICBfb3B0aW9ucyRhZGFwdGl2ZSA9IG9wdGlvbnMuYWRhcHRpdmUsXG4gICAgICBhZGFwdGl2ZSA9IF9vcHRpb25zJGFkYXB0aXZlID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWRhcHRpdmUsXG4gICAgICBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPSBvcHRpb25zLnJvdW5kT2Zmc2V0cyxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJvdW5kT2Zmc2V0cztcbiAgdmFyIGNvbW1vblN0eWxlcyA9IHtcbiAgICBwbGFjZW1lbnQ6IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KSxcbiAgICB2YXJpYXRpb246IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHBvcHBlcjogc3RhdGUuZWxlbWVudHMucG9wcGVyLFxuICAgIHBvcHBlclJlY3Q6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBncHVBY2NlbGVyYXRpb246IGdwdUFjY2VsZXJhdGlvbixcbiAgICBpc0ZpeGVkOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnXG4gIH07XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5wb3BwZXIsIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLFxuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBhZGFwdGl2ZTogYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLmFycm93ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLmFycm93LCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3csXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGFkYXB0aXZlOiBmYWxzZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcGxhY2VtZW50Jzogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnY29tcHV0ZVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnYmVmb3JlV3JpdGUnLFxuICBmbjogY29tcHV0ZVN0eWxlcyxcbiAgZGF0YToge31cbn07IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciBwYXNzaXZlID0ge1xuICBwYXNzaXZlOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgaW5zdGFuY2UgPSBfcmVmLmluc3RhbmNlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJHNjcm9sbCA9IG9wdGlvbnMuc2Nyb2xsLFxuICAgICAgc2Nyb2xsID0gX29wdGlvbnMkc2Nyb2xsID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkc2Nyb2xsLFxuICAgICAgX29wdGlvbnMkcmVzaXplID0gb3B0aW9ucy5yZXNpemUsXG4gICAgICByZXNpemUgPSBfb3B0aW9ucyRyZXNpemUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyZXNpemU7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coc3RhdGUuZWxlbWVudHMucG9wcGVyKTtcbiAgdmFyIHNjcm9sbFBhcmVudHMgPSBbXS5jb25jYXQoc3RhdGUuc2Nyb2xsUGFyZW50cy5yZWZlcmVuY2UsIHN0YXRlLnNjcm9sbFBhcmVudHMucG9wcGVyKTtcblxuICBpZiAoc2Nyb2xsKSB7XG4gICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgIHNjcm9sbFBhcmVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHJlc2l6ZSkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2Nyb2xsKSB7XG4gICAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHNjcm9sbFBhcmVudCkge1xuICAgICAgICBzY3JvbGxQYXJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXNpemUpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH1cbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2V2ZW50TGlzdGVuZXJzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBmdW5jdGlvbiBmbigpIHt9LFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgZGF0YToge31cbn07IiwidmFyIGhhc2ggPSB7XG4gIGxlZnQ6ICdyaWdodCcsXG4gIHJpZ2h0OiAnbGVmdCcsXG4gIGJvdHRvbTogJ3RvcCcsXG4gIHRvcDogJ2JvdHRvbSdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59IiwidmFyIGhhc2ggPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGwobm9kZSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KG5vZGUpO1xuICB2YXIgc2Nyb2xsTGVmdCA9IHdpbi5wYWdlWE9mZnNldDtcbiAgdmFyIHNjcm9sbFRvcCA9IHdpbi5wYWdlWU9mZnNldDtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wXG4gIH07XG59IiwiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KSB7XG4gIC8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbiAgLy8gaW5jb3JyZWN0IGZvciBSVEwuXG4gIC8vIFBvcHBlciAxIGlzIGJyb2tlbiBpbiB0aGlzIGNhc2UgYW5kIG5ldmVyIGhhZCBhIGJ1ZyByZXBvcnQgc28gbGV0J3MgYXNzdW1lXG4gIC8vIGl0J3Mgbm90IGFuIGlzc3VlLiBJIGRvbid0IHRoaW5rIGFueW9uZSBldmVyIHNwZWNpZmllcyB3aWR0aCBvbiA8aHRtbD5cbiAgLy8gYW55d2F5LlxuICAvLyBCcm93c2VycyB3aGVyZSB0aGUgbGVmdCBzY3JvbGxiYXIgZG9lc24ndCBjYXVzZSBhbiBpc3N1ZSByZXBvcnQgYDBgIGZvclxuICAvLyB0aGlzIChlLmcuIEVkZ2UgMjAxOSwgSUUxMSwgU2FmYXJpKVxuICByZXR1cm4gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkubGVmdCArIGdldFdpbmRvd1Njcm9sbChlbGVtZW50KS5zY3JvbGxMZWZ0O1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIHZhciB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7XG5cbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgdmFyIGxheW91dFZpZXdwb3J0ID0gaXNMYXlvdXRWaWV3cG9ydCgpO1xuXG4gICAgaWYgKGxheW91dFZpZXdwb3J0IHx8ICFsYXlvdXRWaWV3cG9ydCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHggKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpLFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCB7IG1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGVcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHdpblNjcm9sbCA9IGdldFdpbmRvd1Njcm9sbChlbGVtZW50KTtcbiAgdmFyIGJvZHkgPSAoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHk7XG4gIHZhciB3aWR0aCA9IG1heChodG1sLnNjcm9sbFdpZHRoLCBodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5zY3JvbGxXaWR0aCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCk7XG4gIHZhciBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5ID8gYm9keS5zY3JvbGxIZWlnaHQgOiAwLCBib2R5ID8gYm9keS5jbGllbnRIZWlnaHQgOiAwKTtcbiAgdmFyIHggPSAtd2luU2Nyb2xsLnNjcm9sbExlZnQgKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpO1xuICB2YXIgeSA9IC13aW5TY3JvbGwuc2Nyb2xsVG9wO1xuXG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKGJvZHkgfHwgaHRtbCkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCkgLSB3aWR0aDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsImltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzU2Nyb2xsUGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gRmlyZWZveCB3YW50cyB1cyB0byBjaGVjayBgLXhgIGFuZCBgLXlgIHZhcmlhdGlvbnMgYXMgd2VsbFxuICB2YXIgX2dldENvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLFxuICAgICAgb3ZlcmZsb3cgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvdyxcbiAgICAgIG92ZXJmbG93WCA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93WCxcbiAgICAgIG92ZXJmbG93WSA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93WTtcblxuICByZXR1cm4gL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVuLy50ZXN0KG92ZXJmbG93ICsgb3ZlcmZsb3dZICsgb3ZlcmZsb3dYKTtcbn0iLCJpbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChub2RlKSB7XG4gIGlmIChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXS5pbmRleE9mKGdldE5vZGVOYW1lKG5vZGUpKSA+PSAwKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIGlmIChpc0hUTUxFbGVtZW50KG5vZGUpICYmIGlzU2Nyb2xsUGFyZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpO1xufSIsImltcG9ydCBnZXRTY3JvbGxQYXJlbnQgZnJvbSBcIi4vZ2V0U2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG4vKlxuZ2l2ZW4gYSBET00gZWxlbWVudCwgcmV0dXJuIHRoZSBsaXN0IG9mIGFsbCBzY3JvbGwgcGFyZW50cywgdXAgdGhlIGxpc3Qgb2YgYW5jZXNvcnNcbnVudGlsIHdlIGdldCB0byB0aGUgdG9wIHdpbmRvdyBvYmplY3QuIFRoaXMgbGlzdCBpcyB3aGF0IHdlIGF0dGFjaCBzY3JvbGwgbGlzdGVuZXJzXG50bywgYmVjYXVzZSBpZiBhbnkgb2YgdGhlc2UgcGFyZW50IGVsZW1lbnRzIHNjcm9sbCwgd2UnbGwgbmVlZCB0byByZS1jYWxjdWxhdGUgdGhlXG5yZWZlcmVuY2UgZWxlbWVudCdzIHBvc2l0aW9uLlxuKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGlzdFNjcm9sbFBhcmVudHMoZWxlbWVudCwgbGlzdCkge1xuICB2YXIgX2VsZW1lbnQkb3duZXJEb2N1bWVuO1xuXG4gIGlmIChsaXN0ID09PSB2b2lkIDApIHtcbiAgICBsaXN0ID0gW107XG4gIH1cblxuICB2YXIgc2Nyb2xsUGFyZW50ID0gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpO1xuICB2YXIgaXNCb2R5ID0gc2Nyb2xsUGFyZW50ID09PSAoKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5KTtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhzY3JvbGxQYXJlbnQpO1xuICB2YXIgdGFyZ2V0ID0gaXNCb2R5ID8gW3dpbl0uY29uY2F0KHdpbi52aXN1YWxWaWV3cG9ydCB8fCBbXSwgaXNTY3JvbGxQYXJlbnQoc2Nyb2xsUGFyZW50KSA/IHNjcm9sbFBhcmVudCA6IFtdKSA6IHNjcm9sbFBhcmVudDtcbiAgdmFyIHVwZGF0ZWRMaXN0ID0gbGlzdC5jb25jYXQodGFyZ2V0KTtcbiAgcmV0dXJuIGlzQm9keSA/IHVwZGF0ZWRMaXN0IDogLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IGlzQm9keSB0ZWxscyB1cyB0YXJnZXQgd2lsbCBiZSBhbiBIVE1MRWxlbWVudCBoZXJlXG4gIHVwZGF0ZWRMaXN0LmNvbmNhdChsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKHRhcmdldCkpKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWN0VG9DbGllbnRSZWN0KHJlY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHJlY3QsIHtcbiAgICBsZWZ0OiByZWN0LngsXG4gICAgdG9wOiByZWN0LnksXG4gICAgcmlnaHQ6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgYm90dG9tOiByZWN0LnkgKyByZWN0LmhlaWdodFxuICB9KTtcbn0iLCJpbXBvcnQgeyB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZpZXdwb3J0UmVjdCBmcm9tIFwiLi9nZXRWaWV3cG9ydFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudFJlY3QgZnJvbSBcIi4vZ2V0RG9jdW1lbnRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi9jb250YWlucy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi4vdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgbWF4LCBtaW4gfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBmYWxzZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICByZWN0LnRvcCA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRUb3A7XG4gIHJlY3QubGVmdCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgcmVjdC5ib3R0b20gPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC53aWR0aCA9IGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3QuaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QueCA9IHJlY3QubGVmdDtcbiAgcmVjdC55ID0gcmVjdC50b3A7XG4gIHJldHVybiByZWN0O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpIHtcbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50ID09PSB2aWV3cG9ydCA/IHJlY3RUb0NsaWVudFJlY3QoZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSkgOiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpID8gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSA6IHJlY3RUb0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkpO1xufSAvLyBBIFwiY2xpcHBpbmcgcGFyZW50XCIgaXMgYW4gb3ZlcmZsb3dhYmxlIGNvbnRhaW5lciB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgb3ZlcmZsb3dpbmcgZWxlbWVudHMgd2l0aCBhIHBvc2l0aW9uIGRpZmZlcmVudCBmcm9tXG4vLyBgaW5pdGlhbGBcblxuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkge1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gbGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG4gIHZhciBjYW5Fc2NhcGVDbGlwcGluZyA9IFsnYWJzb2x1dGUnLCAnZml4ZWQnXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24pID49IDA7XG4gIHZhciBjbGlwcGVyRWxlbWVudCA9IGNhbkVzY2FwZUNsaXBwaW5nICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkgOiBlbGVtZW50O1xuXG4gIGlmICghaXNFbGVtZW50KGNsaXBwZXJFbGVtZW50KSkge1xuICAgIHJldHVybiBbXTtcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMTQxNFxuXG5cbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50cy5maWx0ZXIoZnVuY3Rpb24gKGNsaXBwaW5nUGFyZW50KSB7XG4gICAgcmV0dXJuIGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgJiYgY29udGFpbnMoY2xpcHBpbmdQYXJlbnQsIGNsaXBwZXJFbGVtZW50KSAmJiBnZXROb2RlTmFtZShjbGlwcGluZ1BhcmVudCkgIT09ICdib2R5JztcbiAgfSk7XG59IC8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIHBhcmVudHNcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDbGlwcGluZ1JlY3QoZWxlbWVudCwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSwgc3RyYXRlZ3kpIHtcbiAgdmFyIG1haW5DbGlwcGluZ1BhcmVudHMgPSBib3VuZGFyeSA9PT0gJ2NsaXBwaW5nUGFyZW50cycgPyBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gW10uY29uY2F0KG1haW5DbGlwcGluZ1BhcmVudHMsIFtyb290Qm91bmRhcnldKTtcbiAgdmFyIGZpcnN0Q2xpcHBpbmdQYXJlbnQgPSBjbGlwcGluZ1BhcmVudHNbMF07XG4gIHZhciBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ1BhcmVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2NSZWN0LCBjbGlwcGluZ1BhcmVudCkge1xuICAgIHZhciByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBmaXJzdENsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkpO1xuICBjbGlwcGluZ1JlY3Qud2lkdGggPSBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LmhlaWdodCA9IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wO1xuICBjbGlwcGluZ1JlY3QueCA9IGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QueSA9IGNsaXBwaW5nUmVjdC50b3A7XG4gIHJldHVybiBjbGlwcGluZ1JlY3Q7XG59IiwiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4vZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHN0YXJ0LCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHJlZmVyZW5jZSA9IF9yZWYucmVmZXJlbmNlLFxuICAgICAgZWxlbWVudCA9IF9yZWYuZWxlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudCA/IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciB2YXJpYXRpb24gPSBwbGFjZW1lbnQgPyBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZWxlbWVudC53aWR0aCAvIDI7XG4gIHZhciBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGVsZW1lbnQuaGVpZ2h0IC8gMjtcbiAgdmFyIG9mZnNldHM7XG5cbiAgc3dpdGNoIChiYXNlUGxhY2VtZW50KSB7XG4gICAgY2FzZSB0b3A6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGJvdHRvbTpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSByaWdodDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGxlZnQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCAtIGVsZW1lbnQud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cblxuICB2YXIgbWFpbkF4aXMgPSBiYXNlUGxhY2VtZW50ID8gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpIDogbnVsbDtcblxuICBpZiAobWFpbkF4aXMgIT0gbnVsbCkge1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgc3dpdGNoICh2YXJpYXRpb24pIHtcbiAgICAgIGNhc2Ugc3RhcnQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gLSAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGVuZDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSArIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59IiwiaW1wb3J0IGdldENsaXBwaW5nUmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENsaXBwaW5nUmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuL2NvbXB1dGVPZmZzZXRzLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi9yZWN0VG9DbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgeyBjbGlwcGluZ1BhcmVudHMsIHJlZmVyZW5jZSwgcG9wcGVyLCBib3R0b20sIHRvcCwgcmlnaHQsIGJhc2VQbGFjZW1lbnRzLCB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgbWVyZ2VQYWRkaW5nT2JqZWN0IGZyb20gXCIuL21lcmdlUGFkZGluZ09iamVjdC5qc1wiO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tIFwiLi9leHBhbmRUb0hhc2hNYXAuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIF9vcHRpb25zJHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zJHBsYWNlbWVudCA9PT0gdm9pZCAwID8gc3RhdGUucGxhY2VtZW50IDogX29wdGlvbnMkcGxhY2VtZW50LFxuICAgICAgX29wdGlvbnMkc3RyYXRlZ3kgPSBfb3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIHN0cmF0ZWd5ID0gX29wdGlvbnMkc3RyYXRlZ3kgPT09IHZvaWQgMCA/IHN0YXRlLnN0cmF0ZWd5IDogX29wdGlvbnMkc3RyYXRlZ3ksXG4gICAgICBfb3B0aW9ucyRib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucyRib3VuZGFyeSA9PT0gdm9pZCAwID8gY2xpcHBpbmdQYXJlbnRzIDogX29wdGlvbnMkYm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRyb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucyRyb290Qm91bmRhcnkgPT09IHZvaWQgMCA/IHZpZXdwb3J0IDogX29wdGlvbnMkcm9vdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkZWxlbWVudENvbnRlID0gX29wdGlvbnMuZWxlbWVudENvbnRleHQsXG4gICAgICBlbGVtZW50Q29udGV4dCA9IF9vcHRpb25zJGVsZW1lbnRDb250ZSA9PT0gdm9pZCAwID8gcG9wcGVyIDogX29wdGlvbnMkZWxlbWVudENvbnRlLFxuICAgICAgX29wdGlvbnMkYWx0Qm91bmRhcnkgPSBfb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMkYWx0Qm91bmRhcnkgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucyRwYWRkaW5nID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkcGFkZGluZztcbiAgdmFyIHBhZGRpbmdPYmplY3QgPSBtZXJnZVBhZGRpbmdPYmplY3QodHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gcGFkZGluZyA6IGV4cGFuZFRvSGFzaE1hcChwYWRkaW5nLCBiYXNlUGxhY2VtZW50cykpO1xuICB2YXIgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyByZWZlcmVuY2UgOiBwb3BwZXI7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW2FsdEJvdW5kYXJ5ID8gYWx0Q29udGV4dCA6IGVsZW1lbnRDb250ZXh0XTtcbiAgdmFyIGNsaXBwaW5nQ2xpZW50UmVjdCA9IGdldENsaXBwaW5nUmVjdChpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50IDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCBnZXREb2N1bWVudEVsZW1lbnQoc3RhdGUuZWxlbWVudHMucG9wcGVyKSwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSwgc3RyYXRlZ3kpO1xuICB2YXIgcmVmZXJlbmNlQ2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChzdGF0ZS5lbGVtZW50cy5yZWZlcmVuY2UpO1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHJlZmVyZW5jZUNsaWVudFJlY3QsXG4gICAgZWxlbWVudDogcG9wcGVyUmVjdCxcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KTtcbiAgdmFyIHBvcHBlckNsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KE9iamVjdC5hc3NpZ24oe30sIHBvcHBlclJlY3QsIHBvcHBlck9mZnNldHMpKTtcbiAgdmFyIGVsZW1lbnRDbGllbnRSZWN0ID0gZWxlbWVudENvbnRleHQgPT09IHBvcHBlciA/IHBvcHBlckNsaWVudFJlY3QgOiByZWZlcmVuY2VDbGllbnRSZWN0OyAvLyBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyByZWN0XG4gIC8vIDAgb3IgbmVnYXRpdmUgPSB3aXRoaW4gdGhlIGNsaXBwaW5nIHJlY3RcblxuICB2YXIgb3ZlcmZsb3dPZmZzZXRzID0ge1xuICAgIHRvcDogY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wLFxuICAgIGJvdHRvbTogZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tLFxuICAgIGxlZnQ6IGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCxcbiAgICByaWdodDogZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0XG4gIH07XG4gIHZhciBvZmZzZXREYXRhID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQ7IC8vIE9mZnNldHMgY2FuIGJlIGFwcGxpZWQgb25seSB0byB0aGUgcG9wcGVyIGVsZW1lbnRcblxuICBpZiAoZWxlbWVudENvbnRleHQgPT09IHBvcHBlciAmJiBvZmZzZXREYXRhKSB7XG4gICAgdmFyIG9mZnNldCA9IG9mZnNldERhdGFbcGxhY2VtZW50XTtcbiAgICBPYmplY3Qua2V5cyhvdmVyZmxvd09mZnNldHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgdmFyIG11bHRpcGx5ID0gW3JpZ2h0LCBib3R0b21dLmluZGV4T2Yoa2V5KSA+PSAwID8gMSA6IC0xO1xuICAgICAgdmFyIGF4aXMgPSBbdG9wLCBib3R0b21dLmluZGV4T2Yoa2V5KSA+PSAwID8gJ3knIDogJ3gnO1xuICAgICAgb3ZlcmZsb3dPZmZzZXRzW2tleV0gKz0gb2Zmc2V0W2F4aXNdICogbXVsdGlwbHk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gb3ZlcmZsb3dPZmZzZXRzO1xufSIsImltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyB2YXJpYXRpb25QbGFjZW1lbnRzLCBiYXNlUGxhY2VtZW50cywgcGxhY2VtZW50cyBhcyBhbGxQbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4vZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgcGxhY2VtZW50ID0gX29wdGlvbnMucGxhY2VtZW50LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyxcbiAgICAgIF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9IF9vcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9PT0gdm9pZCAwID8gYWxsUGxhY2VtZW50cyA6IF9vcHRpb25zJGFsbG93ZWRBdXRvUDtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpO1xuICB2YXIgcGxhY2VtZW50cyA9IHZhcmlhdGlvbiA/IGZsaXBWYXJpYXRpb25zID8gdmFyaWF0aW9uUGxhY2VtZW50cyA6IHZhcmlhdGlvblBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHZhcmlhdGlvbjtcbiAgfSkgOiBiYXNlUGxhY2VtZW50cztcbiAgdmFyIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhbGxvd2VkQXV0b1BsYWNlbWVudHMuaW5kZXhPZihwbGFjZW1lbnQpID49IDA7XG4gIH0pO1xuXG4gIGlmIChhbGxvd2VkUGxhY2VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHM7XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV06IEZsb3cgc2VlbXMgdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIHR3byBhcnJheSB1bmlvbnMuLi5cblxuXG4gIHZhciBvdmVyZmxvd3MgPSBhbGxvd2VkUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgYWNjW3BsYWNlbWVudF0gPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgICB9KVtnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCldO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG92ZXJmbG93cykuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBvdmVyZmxvd3NbYV0gLSBvdmVyZmxvd3NbYl07XG4gIH0pO1xufSIsImltcG9ydCBnZXRPcHBvc2l0ZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgY29tcHV0ZUF1dG9QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyBib3R0b20sIHRvcCwgc3RhcnQsIHJpZ2h0LCBsZWZ0LCBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5mdW5jdGlvbiBnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgaWYgKGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0bykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHZhciBvcHBvc2l0ZVBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHJldHVybiBbZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSwgb3Bwb3NpdGVQbGFjZW1lbnQsIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KG9wcG9zaXRlUGxhY2VtZW50KV07XG59XG5cbmZ1bmN0aW9uIGZsaXAoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0uX3NraXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgPSBvcHRpb25zLmZhbGxiYWNrUGxhY2VtZW50cyxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9IG9wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGZsaXBWYXJpYXRpbyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IG9wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzO1xuICB2YXIgcHJlZmVycmVkUGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gYmFzZVBsYWNlbWVudCA9PT0gcHJlZmVycmVkUGxhY2VtZW50O1xuICB2YXIgZmFsbGJhY2tQbGFjZW1lbnRzID0gc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIHx8IChpc0Jhc2VQbGFjZW1lbnQgfHwgIWZsaXBWYXJpYXRpb25zID8gW2dldE9wcG9zaXRlUGxhY2VtZW50KHByZWZlcnJlZFBsYWNlbWVudCldIDogZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocHJlZmVycmVkUGxhY2VtZW50KSk7XG4gIHZhciBwbGFjZW1lbnRzID0gW3ByZWZlcnJlZFBsYWNlbWVudF0uY29uY2F0KGZhbGxiYWNrUGxhY2VtZW50cykucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0byA/IGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zOiBmbGlwVmFyaWF0aW9ucyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50czogYWxsb3dlZEF1dG9QbGFjZW1lbnRzXG4gICAgfSkgOiBwbGFjZW1lbnQpO1xuICB9LCBbXSk7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGNoZWNrc01hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIG1ha2VGYWxsYmFja0NoZWNrcyA9IHRydWU7XG4gIHZhciBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRzWzBdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGxhY2VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwbGFjZW1lbnQgPSBwbGFjZW1lbnRzW2ldO1xuXG4gICAgdmFyIF9iYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuXG4gICAgdmFyIGlzU3RhcnRWYXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gc3RhcnQ7XG4gICAgdmFyIGlzVmVydGljYWwgPSBbdG9wLCBib3R0b21dLmluZGV4T2YoX2Jhc2VQbGFjZW1lbnQpID49IDA7XG4gICAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG4gICAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSk7XG4gICAgdmFyIG1haW5WYXJpYXRpb25TaWRlID0gaXNWZXJ0aWNhbCA/IGlzU3RhcnRWYXJpYXRpb24gPyByaWdodCA6IGxlZnQgOiBpc1N0YXJ0VmFyaWF0aW9uID8gYm90dG9tIDogdG9wO1xuXG4gICAgaWYgKHJlZmVyZW5jZVJlY3RbbGVuXSA+IHBvcHBlclJlY3RbbGVuXSkge1xuICAgICAgbWFpblZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgfVxuXG4gICAgdmFyIGFsdFZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgdmFyIGNoZWNrcyA9IFtdO1xuXG4gICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKG92ZXJmbG93W19iYXNlUGxhY2VtZW50XSA8PSAwKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1ttYWluVmFyaWF0aW9uU2lkZV0gPD0gMCwgb3ZlcmZsb3dbYWx0VmFyaWF0aW9uU2lkZV0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrcy5ldmVyeShmdW5jdGlvbiAoY2hlY2spIHtcbiAgICAgIHJldHVybiBjaGVjaztcbiAgICB9KSkge1xuICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICAgICAgbWFrZUZhbGxiYWNrQ2hlY2tzID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjaGVja3NNYXAuc2V0KHBsYWNlbWVudCwgY2hlY2tzKTtcbiAgfVxuXG4gIGlmIChtYWtlRmFsbGJhY2tDaGVja3MpIHtcbiAgICAvLyBgMmAgbWF5IGJlIGRlc2lyZWQgaW4gc29tZSBjYXNlcyDigJMgcmVzZWFyY2ggbGF0ZXJcbiAgICB2YXIgbnVtYmVyT2ZDaGVja3MgPSBmbGlwVmFyaWF0aW9ucyA/IDMgOiAxO1xuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoX2kpIHtcbiAgICAgIHZhciBmaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50cy5maW5kKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICAgICAgdmFyIGNoZWNrcyA9IGNoZWNrc01hcC5nZXQocGxhY2VtZW50KTtcblxuICAgICAgICBpZiAoY2hlY2tzKSB7XG4gICAgICAgICAgcmV0dXJuIGNoZWNrcy5zbGljZSgwLCBfaSkuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2s7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZml0dGluZ1BsYWNlbWVudCkge1xuICAgICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBmaXR0aW5nUGxhY2VtZW50O1xuICAgICAgICByZXR1cm4gXCJicmVha1wiO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBfaSA9IG51bWJlck9mQ2hlY2tzOyBfaSA+IDA7IF9pLS0pIHtcbiAgICAgIHZhciBfcmV0ID0gX2xvb3AoX2kpO1xuXG4gICAgICBpZiAoX3JldCA9PT0gXCJicmVha1wiKSBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdGUucGxhY2VtZW50ICE9PSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwID0gdHJ1ZTtcbiAgICBzdGF0ZS5wbGFjZW1lbnQgPSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgc3RhdGUucmVzZXQgPSB0cnVlO1xuICB9XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdmbGlwJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IGZsaXAsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J10sXG4gIGRhdGE6IHtcbiAgICBfc2tpcDogZmFsc2VcbiAgfVxufTsiLCJpbXBvcnQgeyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcblxuZnVuY3Rpb24gZ2V0U2lkZU9mZnNldHMob3ZlcmZsb3csIHJlY3QsIHByZXZlbnRlZE9mZnNldHMpIHtcbiAgaWYgKHByZXZlbnRlZE9mZnNldHMgPT09IHZvaWQgMCkge1xuICAgIHByZXZlbnRlZE9mZnNldHMgPSB7XG4gICAgICB4OiAwLFxuICAgICAgeTogMFxuICAgIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQgLSBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCArIHByZXZlbnRlZE9mZnNldHMueCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0ICsgcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoIC0gcHJldmVudGVkT2Zmc2V0cy54XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChvdmVyZmxvdykge1xuICByZXR1cm4gW3RvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdF0uc29tZShmdW5jdGlvbiAoc2lkZSkge1xuICAgIHJldHVybiBvdmVyZmxvd1tzaWRlXSA+PSAwO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gaGlkZShfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBwcmV2ZW50ZWRPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wcmV2ZW50T3ZlcmZsb3c7XG4gIHZhciByZWZlcmVuY2VPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gIH0pO1xuICB2YXIgcG9wcGVyQWx0T3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGFsdEJvdW5kYXJ5OiB0cnVlXG4gIH0pO1xuICB2YXIgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocmVmZXJlbmNlT3ZlcmZsb3csIHJlZmVyZW5jZVJlY3QpO1xuICB2YXIgcG9wcGVyRXNjYXBlT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHBvcHBlckFsdE92ZXJmbG93LCBwb3BwZXJSZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKTtcbiAgdmFyIGlzUmVmZXJlbmNlSGlkZGVuID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyk7XG4gIHZhciBoYXNQb3BwZXJFc2NhcGVkID0gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKHBvcHBlckVzY2FwZU9mZnNldHMpO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0ge1xuICAgIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0czogcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzLFxuICAgIHBvcHBlckVzY2FwZU9mZnNldHM6IHBvcHBlckVzY2FwZU9mZnNldHMsXG4gICAgaXNSZWZlcmVuY2VIaWRkZW46IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgIGhhc1BvcHBlckVzY2FwZWQ6IGhhc1BvcHBlckVzY2FwZWRcbiAgfTtcbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1yZWZlcmVuY2UtaGlkZGVuJzogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgJ2RhdGEtcG9wcGVyLWVzY2FwZWQnOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnaGlkZScsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J10sXG4gIGZuOiBoaWRlXG59OyIsImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBwbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgcmVjdHMsIG9mZnNldCkge1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgdmFyIGludmVydERpc3RhbmNlID0gW2xlZnQsIHRvcF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8gLTEgOiAxO1xuXG4gIHZhciBfcmVmID0gdHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IG9mZnNldChPYmplY3QuYXNzaWduKHt9LCByZWN0cywge1xuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pKSA6IG9mZnNldCxcbiAgICAgIHNraWRkaW5nID0gX3JlZlswXSxcbiAgICAgIGRpc3RhbmNlID0gX3JlZlsxXTtcblxuICBza2lkZGluZyA9IHNraWRkaW5nIHx8IDA7XG4gIGRpc3RhbmNlID0gKGRpc3RhbmNlIHx8IDApICogaW52ZXJ0RGlzdGFuY2U7XG4gIHJldHVybiBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IHtcbiAgICB4OiBkaXN0YW5jZSxcbiAgICB5OiBza2lkZGluZ1xuICB9IDoge1xuICAgIHg6IHNraWRkaW5nLFxuICAgIHk6IGRpc3RhbmNlXG4gIH07XG59XG5cbmZ1bmN0aW9uIG9mZnNldChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYyLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRvZmZzZXQgPSBvcHRpb25zLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9vcHRpb25zJG9mZnNldCA9PT0gdm9pZCAwID8gWzAsIDBdIDogX29wdGlvbnMkb2Zmc2V0O1xuICB2YXIgZGF0YSA9IHBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCBzdGF0ZS5yZWN0cywgb2Zmc2V0KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHZhciBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQgPSBkYXRhW3N0YXRlLnBsYWNlbWVudF0sXG4gICAgICB4ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50LngsXG4gICAgICB5ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50Lnk7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnggKz0geDtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueSArPSB5O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdvZmZzZXQnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIGZuOiBvZmZzZXRcbn07IiwiaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuLi91dGlscy9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuXG5mdW5jdGlvbiBwb3BwZXJPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIC8vIE9mZnNldHMgYXJlIHRoZSBhY3R1YWwgcG9zaXRpb24gdGhlIHBvcHBlciBuZWVkcyB0byBoYXZlIHRvIGJlXG4gIC8vIHByb3Blcmx5IHBvc2l0aW9uZWQgbmVhciBpdHMgcmVmZXJlbmNlIGVsZW1lbnRcbiAgLy8gVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBwbGFjZW1lbnQsIGFuZCB3aWxsIGJlIGFkanVzdGVkIGJ5XG4gIC8vIHRoZSBtb2RpZmllcnMgaW4gdGhlIG5leHQgc3RlcFxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogc3RhdGUucmVjdHMucmVmZXJlbmNlLFxuICAgIGVsZW1lbnQ6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3BvcHBlck9mZnNldHMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3JlYWQnLFxuICBmbjogcG9wcGVyT2Zmc2V0cyxcbiAgZGF0YToge31cbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QWx0QXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59IiwiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBzdGFydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEFsdEF4aXMgZnJvbSBcIi4uL3V0aWxzL2dldEFsdEF4aXMuanNcIjtcbmltcG9ydCB7IHdpdGhpbiwgd2l0aGluTWF4Q2xhbXAgfSBmcm9tIFwiLi4vdXRpbHMvd2l0aGluLmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tIFwiLi4vdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5pbXBvcnQgeyBtaW4gYXMgbWF0aE1pbiwgbWF4IGFzIG1hdGhNYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBwcmV2ZW50T3ZlcmZsb3coX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRtYWluQXhpcyA9IG9wdGlvbnMubWFpbkF4aXMsXG4gICAgICBjaGVja01haW5BeGlzID0gX29wdGlvbnMkbWFpbkF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRtYWluQXhpcyxcbiAgICAgIF9vcHRpb25zJGFsdEF4aXMgPSBvcHRpb25zLmFsdEF4aXMsXG4gICAgICBjaGVja0FsdEF4aXMgPSBfb3B0aW9ucyRhbHRBeGlzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXIgPSBvcHRpb25zLnRldGhlcixcbiAgICAgIHRldGhlciA9IF9vcHRpb25zJHRldGhlciA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHRldGhlcixcbiAgICAgIF9vcHRpb25zJHRldGhlck9mZnNldCA9IG9wdGlvbnMudGV0aGVyT2Zmc2V0LFxuICAgICAgdGV0aGVyT2Zmc2V0ID0gX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkdGV0aGVyT2Zmc2V0O1xuICB2YXIgb3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICBwYWRkaW5nOiBwYWRkaW5nLFxuICAgIGFsdEJvdW5kYXJ5OiBhbHRCb3VuZGFyeVxuICB9KTtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9ICF2YXJpYXRpb247XG4gIHZhciBtYWluQXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGFsdEF4aXMgPSBnZXRBbHRBeGlzKG1haW5BeGlzKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIHRldGhlck9mZnNldFZhbHVlID0gdHlwZW9mIHRldGhlck9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IHRldGhlck9mZnNldChPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZWN0cywge1xuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pKSA6IHRldGhlck9mZnNldDtcbiAgdmFyIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXRWYWx1ZSA9PT0gJ251bWJlcicgPyB7XG4gICAgbWFpbkF4aXM6IHRldGhlck9mZnNldFZhbHVlLFxuICAgIGFsdEF4aXM6IHRldGhlck9mZnNldFZhbHVlXG4gIH0gOiBPYmplY3QuYXNzaWduKHtcbiAgICBtYWluQXhpczogMCxcbiAgICBhbHRBeGlzOiAwXG4gIH0sIHRldGhlck9mZnNldFZhbHVlKTtcbiAgdmFyIG9mZnNldE1vZGlmaWVyU3RhdGUgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldCA/IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0W3N0YXRlLnBsYWNlbWVudF0gOiBudWxsO1xuICB2YXIgZGF0YSA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQ7XG5cbiAgICB2YXIgbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgICB2YXIgYWx0U2lkZSA9IG1haW5BeGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICB2YXIgb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc107XG4gICAgdmFyIG1pbiA9IG9mZnNldCArIG92ZXJmbG93W21haW5TaWRlXTtcbiAgICB2YXIgbWF4ID0gb2Zmc2V0IC0gb3ZlcmZsb3dbYWx0U2lkZV07XG4gICAgdmFyIGFkZGl0aXZlID0gdGV0aGVyID8gLXBvcHBlclJlY3RbbGVuXSAvIDIgOiAwO1xuICAgIHZhciBtaW5MZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gcmVmZXJlbmNlUmVjdFtsZW5dIDogcG9wcGVyUmVjdFtsZW5dO1xuICAgIHZhciBtYXhMZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gLXBvcHBlclJlY3RbbGVuXSA6IC1yZWZlcmVuY2VSZWN0W2xlbl07IC8vIFdlIG5lZWQgdG8gaW5jbHVkZSB0aGUgYXJyb3cgaW4gdGhlIGNhbGN1bGF0aW9uIHNvIHRoZSBhcnJvdyBkb2Vzbid0IGdvXG4gICAgLy8gb3V0c2lkZSB0aGUgcmVmZXJlbmNlIGJvdW5kc1xuXG4gICAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICAgIHZhciBhcnJvd1JlY3QgPSB0ZXRoZXIgJiYgYXJyb3dFbGVtZW50ID8gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpIDoge1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9O1xuICAgIHZhciBhcnJvd1BhZGRpbmdPYmplY3QgPSBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10gPyBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10ucGFkZGluZyA6IGdldEZyZXNoU2lkZU9iamVjdCgpO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNaW4gPSBhcnJvd1BhZGRpbmdPYmplY3RbbWFpblNpZGVdO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNYXggPSBhcnJvd1BhZGRpbmdPYmplY3RbYWx0U2lkZV07IC8vIElmIHRoZSByZWZlcmVuY2UgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiB0aGUgYXJyb3cgbGVuZ3RoLCB3ZSBkb24ndCB3YW50XG4gICAgLy8gdG8gaW5jbHVkZSBpdHMgZnVsbCBzaXplIGluIHRoZSBjYWxjdWxhdGlvbi4gSWYgdGhlIHJlZmVyZW5jZSBpcyBzbWFsbFxuICAgIC8vIGFuZCBuZWFyIHRoZSBlZGdlIG9mIGEgYm91bmRhcnksIHRoZSBwb3BwZXIgY2FuIG92ZXJmbG93IGV2ZW4gaWYgdGhlXG4gICAgLy8gcmVmZXJlbmNlIGlzIG5vdCBvdmVyZmxvd2luZyBhcyB3ZWxsIChlLmcuIHZpcnR1YWwgZWxlbWVudHMgd2l0aCBub1xuICAgIC8vIHdpZHRoIG9yIGhlaWdodClcblxuICAgIHZhciBhcnJvd0xlbiA9IHdpdGhpbigwLCByZWZlcmVuY2VSZWN0W2xlbl0sIGFycm93UmVjdFtsZW5dKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiAtIGFkZGl0aXZlIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXMgOiBtaW5MZW4gLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcztcbiAgICB2YXIgbWF4T2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gLXJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgKyBhZGRpdGl2ZSArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWF4TGVuICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3cgJiYgZ2V0T2Zmc2V0UGFyZW50KHN0YXRlLmVsZW1lbnRzLmFycm93KTtcbiAgICB2YXIgY2xpZW50T2Zmc2V0ID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBtYWluQXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50VG9wIHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRMZWZ0IHx8IDAgOiAwO1xuICAgIHZhciBvZmZzZXRNb2RpZmllclZhbHVlID0gKF9vZmZzZXRNb2RpZmllclN0YXRlJCA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbbWFpbkF4aXNdKSAhPSBudWxsID8gX29mZnNldE1vZGlmaWVyU3RhdGUkIDogMDtcbiAgICB2YXIgdGV0aGVyTWluID0gb2Zmc2V0ICsgbWluT2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIGNsaWVudE9mZnNldDtcbiAgICB2YXIgdGV0aGVyTWF4ID0gb2Zmc2V0ICsgbWF4T2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZTtcbiAgICB2YXIgcHJldmVudGVkT2Zmc2V0ID0gd2l0aGluKHRldGhlciA/IG1hdGhNaW4obWluLCB0ZXRoZXJNaW4pIDogbWluLCBvZmZzZXQsIHRldGhlciA/IG1hdGhNYXgobWF4LCB0ZXRoZXJNYXgpIDogbWF4KTtcbiAgICBwb3BwZXJPZmZzZXRzW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldDtcbiAgICBkYXRhW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldCAtIG9mZnNldDtcbiAgfVxuXG4gIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkMjtcblxuICAgIHZhciBfbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gdG9wIDogbGVmdDtcblxuICAgIHZhciBfYWx0U2lkZSA9IG1haW5BeGlzID09PSAneCcgPyBib3R0b20gOiByaWdodDtcblxuICAgIHZhciBfb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1thbHRBeGlzXTtcblxuICAgIHZhciBfbGVuID0gYWx0QXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgdmFyIF9taW4gPSBfb2Zmc2V0ICsgb3ZlcmZsb3dbX21haW5TaWRlXTtcblxuICAgIHZhciBfbWF4ID0gX29mZnNldCAtIG92ZXJmbG93W19hbHRTaWRlXTtcblxuICAgIHZhciBpc09yaWdpblNpZGUgPSBbdG9wLCBsZWZ0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyID0gb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb2Zmc2V0TW9kaWZpZXJTdGF0ZVthbHRBeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJDIgOiAwO1xuXG4gICAgdmFyIF90ZXRoZXJNaW4gPSBpc09yaWdpblNpZGUgPyBfbWluIDogX29mZnNldCAtIHJlZmVyZW5jZVJlY3RbX2xlbl0gLSBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcztcblxuICAgIHZhciBfdGV0aGVyTWF4ID0gaXNPcmlnaW5TaWRlID8gX29mZnNldCArIHJlZmVyZW5jZVJlY3RbX2xlbl0gKyBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcyA6IF9tYXg7XG5cbiAgICB2YXIgX3ByZXZlbnRlZE9mZnNldCA9IHRldGhlciAmJiBpc09yaWdpblNpZGUgPyB3aXRoaW5NYXhDbGFtcChfdGV0aGVyTWluLCBfb2Zmc2V0LCBfdGV0aGVyTWF4KSA6IHdpdGhpbih0ZXRoZXIgPyBfdGV0aGVyTWluIDogX21pbiwgX29mZnNldCwgdGV0aGVyID8gX3RldGhlck1heCA6IF9tYXgpO1xuXG4gICAgcG9wcGVyT2Zmc2V0c1thbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVthbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQgLSBfb2Zmc2V0O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogcHJldmVudE92ZXJmbG93LFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddXG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEhUTUxFbGVtZW50U2Nyb2xsKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICB9O1xufSIsImltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRIVE1MRWxlbWVudFNjcm9sbCBmcm9tIFwiLi9nZXRIVE1MRWxlbWVudFNjcm9sbC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChub2RlKSB7XG4gIGlmIChub2RlID09PSBnZXRXaW5kb3cobm9kZSkgfHwgIWlzSFRNTEVsZW1lbnQobm9kZSkpIHtcbiAgICByZXR1cm4gZ2V0V2luZG93U2Nyb2xsKG5vZGUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBnZXRIVE1MRWxlbWVudFNjcm9sbChub2RlKTtcbiAgfVxufSIsImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZVNjcm9sbCBmcm9tIFwiLi9nZXROb2RlU2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFNjYWxlZChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IHJvdW5kKHJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxO1xuICB2YXIgc2NhbGVZID0gcm91bmQocmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMTtcbiAgcmV0dXJuIHNjYWxlWCAhPT0gMSB8fCBzY2FsZVkgIT09IDE7XG59IC8vIFJldHVybnMgdGhlIGNvbXBvc2l0ZSByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC5cbi8vIENvbXBvc2l0ZSBtZWFucyBpdCB0YWtlcyBpbnRvIGFjY291bnQgdHJhbnNmb3JtcyBhcyB3ZWxsIGFzIGxheW91dC5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wb3NpdGVSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnQsIGlzRml4ZWQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudElzU2NhbGVkID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGlzRWxlbWVudFNjYWxlZChvZmZzZXRQYXJlbnQpO1xuICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnRJc1NjYWxlZCwgaXNGaXhlZCk7XG4gIHZhciBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgdmFyIG9mZnNldHMgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMDc4XG4gICAgaXNTY3JvbGxQYXJlbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cblxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIG9mZnNldHMgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlKTtcbiAgICAgIG9mZnNldHMueCArPSBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSArPSBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCxcbiAgICB5OiByZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3AgLSBvZmZzZXRzLnksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufSIsImltcG9ydCB7IG1vZGlmaWVyUGhhc2VzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIHNvdXJjZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDk4NzUyNTVcblxuZnVuY3Rpb24gb3JkZXIobW9kaWZpZXJzKSB7XG4gIHZhciBtYXAgPSBuZXcgTWFwKCk7XG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIG1hcC5zZXQobW9kaWZpZXIubmFtZSwgbW9kaWZpZXIpO1xuICB9KTsgLy8gT24gdmlzaXRpbmcgb2JqZWN0LCBjaGVjayBmb3IgaXRzIGRlcGVuZGVuY2llcyBhbmQgdmlzaXQgdGhlbSByZWN1cnNpdmVseVxuXG4gIGZ1bmN0aW9uIHNvcnQobW9kaWZpZXIpIHtcbiAgICB2aXNpdGVkLmFkZChtb2RpZmllci5uYW1lKTtcbiAgICB2YXIgcmVxdWlyZXMgPSBbXS5jb25jYXQobW9kaWZpZXIucmVxdWlyZXMgfHwgW10sIG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMgfHwgW10pO1xuICAgIHJlcXVpcmVzLmZvckVhY2goZnVuY3Rpb24gKGRlcCkge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhkZXApKSB7XG4gICAgICAgIHZhciBkZXBNb2RpZmllciA9IG1hcC5nZXQoZGVwKTtcblxuICAgICAgICBpZiAoZGVwTW9kaWZpZXIpIHtcbiAgICAgICAgICBzb3J0KGRlcE1vZGlmaWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc3VsdC5wdXNoKG1vZGlmaWVyKTtcbiAgfVxuXG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIGlmICghdmlzaXRlZC5oYXMobW9kaWZpZXIubmFtZSkpIHtcbiAgICAgIC8vIGNoZWNrIGZvciB2aXNpdGVkIG9iamVjdFxuICAgICAgc29ydChtb2RpZmllcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkZXJNb2RpZmllcnMobW9kaWZpZXJzKSB7XG4gIC8vIG9yZGVyIGJhc2VkIG9uIGRlcGVuZGVuY2llc1xuICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyKG1vZGlmaWVycyk7IC8vIG9yZGVyIGJhc2VkIG9uIHBoYXNlXG5cbiAgcmV0dXJuIG1vZGlmaWVyUGhhc2VzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwaGFzZSkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgcmV0dXJuIG1vZGlmaWVyLnBoYXNlID09PSBwaGFzZTtcbiAgICB9KSk7XG4gIH0sIFtdKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmbikge1xuICB2YXIgcGVuZGluZztcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHBlbmRpbmcgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBwZW5kaW5nID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlc29sdmUoZm4oKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBlbmRpbmc7XG4gIH07XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VCeU5hbWUobW9kaWZpZXJzKSB7XG4gIHZhciBtZXJnZWQgPSBtb2RpZmllcnMucmVkdWNlKGZ1bmN0aW9uIChtZXJnZWQsIGN1cnJlbnQpIHtcbiAgICB2YXIgZXhpc3RpbmcgPSBtZXJnZWRbY3VycmVudC5uYW1lXTtcbiAgICBtZXJnZWRbY3VycmVudC5uYW1lXSA9IGV4aXN0aW5nID8gT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcsIGN1cnJlbnQsIHtcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLm9wdGlvbnMsIGN1cnJlbnQub3B0aW9ucyksXG4gICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5kYXRhLCBjdXJyZW50LmRhdGEpXG4gICAgfSkgOiBjdXJyZW50O1xuICAgIHJldHVybiBtZXJnZWQ7XG4gIH0sIHt9KTsgLy8gSUUxMSBkb2VzIG5vdCBzdXBwb3J0IE9iamVjdC52YWx1ZXNcblxuICByZXR1cm4gT2JqZWN0LmtleXMobWVyZ2VkKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBtZXJnZWRba2V5XTtcbiAgfSk7XG59IiwiaW1wb3J0IGdldENvbXBvc2l0ZVJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBvcmRlck1vZGlmaWVycyBmcm9tIFwiLi91dGlscy9vcmRlck1vZGlmaWVycy5qc1wiO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gXCIuL3V0aWxzL2RlYm91bmNlLmpzXCI7XG5pbXBvcnQgbWVyZ2VCeU5hbWUgZnJvbSBcIi4vdXRpbHMvbWVyZ2VCeU5hbWUuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gIG1vZGlmaWVyczogW10sXG4gIHN0cmF0ZWd5OiAnYWJzb2x1dGUnXG59O1xuXG5mdW5jdGlvbiBhcmVWYWxpZEVsZW1lbnRzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuICFhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gIShlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wcGVyR2VuZXJhdG9yKGdlbmVyYXRvck9wdGlvbnMpIHtcbiAgaWYgKGdlbmVyYXRvck9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIGdlbmVyYXRvck9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfZ2VuZXJhdG9yT3B0aW9ucyA9IGdlbmVyYXRvck9wdGlvbnMsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0TW9kaWZpZXJzLFxuICAgICAgZGVmYXVsdE1vZGlmaWVycyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9PT0gdm9pZCAwID8gW10gOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG4gICAgICBkZWZhdWx0T3B0aW9ucyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPT09IHZvaWQgMCA/IERFRkFVTFRfT1BUSU9OUyA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZjI7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXRlID0ge1xuICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgIG9yZGVyZWRNb2RpZmllcnM6IFtdLFxuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBkZWZhdWx0T3B0aW9ucyksXG4gICAgICBtb2RpZmllcnNEYXRhOiB7fSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlLFxuICAgICAgICBwb3BwZXI6IHBvcHBlclxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgc3R5bGVzOiB7fVxuICAgIH07XG4gICAgdmFyIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB2YXIgaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB2YXIgaW5zdGFuY2UgPSB7XG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBzZXRPcHRpb25zOiBmdW5jdGlvbiBzZXRPcHRpb25zKHNldE9wdGlvbnNBY3Rpb24pIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2V0T3B0aW9uc0FjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHNldE9wdGlvbnNBY3Rpb24oc3RhdGUub3B0aW9ucykgOiBzZXRPcHRpb25zQWN0aW9uO1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHN0YXRlLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgc3RhdGUub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHN0YXRlLnNjcm9sbFBhcmVudHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBpc0VsZW1lbnQocmVmZXJlbmNlKSA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZSkgOiByZWZlcmVuY2UuY29udGV4dEVsZW1lbnQgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UuY29udGV4dEVsZW1lbnQpIDogW10sXG4gICAgICAgICAgcG9wcGVyOiBsaXN0U2Nyb2xsUGFyZW50cyhwb3BwZXIpXG4gICAgICAgIH07IC8vIE9yZGVycyB0aGUgbW9kaWZpZXJzIGJhc2VkIG9uIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgYHBoYXNlYFxuICAgICAgICAvLyBwcm9wZXJ0aWVzXG5cbiAgICAgICAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlck1vZGlmaWVycyhtZXJnZUJ5TmFtZShbXS5jb25jYXQoZGVmYXVsdE1vZGlmaWVycywgc3RhdGUub3B0aW9ucy5tb2RpZmllcnMpKSk7IC8vIFN0cmlwIG91dCBkaXNhYmxlZCBtb2RpZmllcnNcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICByZXR1cm4gbS5lbmFibGVkO1xuICAgICAgICB9KTtcbiAgICAgICAgcnVuTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICAvLyBTeW5jIHVwZGF0ZSDigJMgaXQgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQsIGV2ZW4gaWYgbm90IG5lY2Vzc2FyeS4gVGhpc1xuICAgICAgLy8gaXMgdXNlZnVsIGZvciBsb3cgZnJlcXVlbmN5IHVwZGF0ZXMgd2hlcmUgc3luYyBiZWhhdmlvciBzaW1wbGlmaWVzIHRoZVxuICAgICAgLy8gbG9naWMuXG4gICAgICAvLyBGb3IgaGlnaCBmcmVxdWVuY3kgdXBkYXRlcyAoZS5nLiBgcmVzaXplYCBhbmQgYHNjcm9sbGAgZXZlbnRzKSwgYWx3YXlzXG4gICAgICAvLyBwcmVmZXIgdGhlIGFzeW5jIFBvcHBlciN1cGRhdGUgbWV0aG9kXG4gICAgICBmb3JjZVVwZGF0ZTogZnVuY3Rpb24gZm9yY2VVcGRhdGUoKSB7XG4gICAgICAgIGlmIChpc0Rlc3Ryb3llZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfc3RhdGUkZWxlbWVudHMgPSBzdGF0ZS5lbGVtZW50cyxcbiAgICAgICAgICAgIHJlZmVyZW5jZSA9IF9zdGF0ZSRlbGVtZW50cy5yZWZlcmVuY2UsXG4gICAgICAgICAgICBwb3BwZXIgPSBfc3RhdGUkZWxlbWVudHMucG9wcGVyOyAvLyBEb24ndCBwcm9jZWVkIGlmIGByZWZlcmVuY2VgIG9yIGBwb3BwZXJgIGFyZSBub3QgdmFsaWQgZWxlbWVudHNcbiAgICAgICAgLy8gYW55bW9yZVxuXG4gICAgICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU3RvcmUgdGhlIHJlZmVyZW5jZSBhbmQgcG9wcGVyIHJlY3RzIHRvIGJlIHJlYWQgYnkgbW9kaWZpZXJzXG5cblxuICAgICAgICBzdGF0ZS5yZWN0cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGdldENvbXBvc2l0ZVJlY3QocmVmZXJlbmNlLCBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKSwgc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJyksXG4gICAgICAgICAgcG9wcGVyOiBnZXRMYXlvdXRSZWN0KHBvcHBlcilcbiAgICAgICAgfTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gcmVzZXQgdGhlIGN1cnJlbnQgdXBkYXRlIGN5Y2xlLiBUaGVcbiAgICAgICAgLy8gbW9zdCBjb21tb24gdXNlIGNhc2UgZm9yIHRoaXMgaXMgdGhlIGBmbGlwYCBtb2RpZmllciBjaGFuZ2luZyB0aGVcbiAgICAgICAgLy8gcGxhY2VtZW50LCB3aGljaCB0aGVuIG5lZWRzIHRvIHJlLXJ1biBhbGwgdGhlIG1vZGlmaWVycywgYmVjYXVzZSB0aGVcbiAgICAgICAgLy8gbG9naWMgd2FzIHByZXZpb3VzbHkgcmFuIGZvciB0aGUgcHJldmlvdXMgcGxhY2VtZW50IGFuZCBpcyB0aGVyZWZvcmVcbiAgICAgICAgLy8gc3RhbGUvaW5jb3JyZWN0XG5cbiAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUucGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7IC8vIE9uIGVhY2ggdXBkYXRlIGN5Y2xlLCB0aGUgYG1vZGlmaWVyc0RhdGFgIHByb3BlcnR5IGZvciBlYWNoIG1vZGlmaWVyXG4gICAgICAgIC8vIGlzIGZpbGxlZCB3aXRoIHRoZSBpbml0aWFsIGRhdGEgc3BlY2lmaWVkIGJ5IHRoZSBtb2RpZmllci4gVGhpcyBtZWFuc1xuICAgICAgICAvLyBpdCBkb2Vzbid0IHBlcnNpc3QgYW5kIGlzIGZyZXNoIG9uIGVhY2ggdXBkYXRlLlxuICAgICAgICAvLyBUbyBlbnN1cmUgcGVyc2lzdGVudCBkYXRhLCB1c2UgYCR7bmFtZX0jcGVyc2lzdGVudGBcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLm1vZGlmaWVyc0RhdGFbbW9kaWZpZXIubmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBtb2RpZmllci5kYXRhKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaWYgKHN0YXRlLnJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfc3RhdGUkb3JkZXJlZE1vZGlmaWUgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzW2luZGV4XSxcbiAgICAgICAgICAgICAgZm4gPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUuZm4sXG4gICAgICAgICAgICAgIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUub3B0aW9ucyxcbiAgICAgICAgICAgICAgX29wdGlvbnMgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID09PSB2b2lkIDAgPyB7fSA6IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIsXG4gICAgICAgICAgICAgIG5hbWUgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUubmFtZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZm4oe1xuICAgICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2VcbiAgICAgICAgICAgIH0pIHx8IHN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIEFzeW5jIGFuZCBvcHRpbWlzdGljYWxseSBvcHRpbWl6ZWQgdXBkYXRlIOKAkyBpdCB3aWxsIG5vdCBiZSBleGVjdXRlZCBpZlxuICAgICAgLy8gbm90IG5lY2Vzc2FyeSAoZGVib3VuY2VkIHRvIHJ1biBhdCBtb3N0IG9uY2UtcGVyLXRpY2spXG4gICAgICB1cGRhdGU6IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICByZXNvbHZlKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgaW5zdGFuY2Uuc2V0T3B0aW9ucyhvcHRpb25zKS50aGVuKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgaWYgKCFpc0Rlc3Ryb3llZCAmJiBvcHRpb25zLm9uRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKHN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSBiZWZvcmUgdGhlIGZpcnN0XG4gICAgLy8gdXBkYXRlIGN5Y2xlIHJ1bnMuIFRoZXkgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdXBkYXRlXG4gICAgLy8gY3ljbGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4gYSBtb2RpZmllciBhZGRzIHNvbWUgcGVyc2lzdGVudCBkYXRhIHRoYXRcbiAgICAvLyBvdGhlciBtb2RpZmllcnMgbmVlZCB0byB1c2UsIGJ1dCB0aGUgbW9kaWZpZXIgaXMgcnVuIGFmdGVyIHRoZSBkZXBlbmRlbnRcbiAgICAvLyBvbmUuXG5cbiAgICBmdW5jdGlvbiBydW5Nb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICAgICAgICBfcmVmJG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zID0gX3JlZiRvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkb3B0aW9ucyxcbiAgICAgICAgICAgIGVmZmVjdCA9IF9yZWYuZWZmZWN0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgZWZmZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGNsZWFudXBGbiA9IGVmZmVjdCh7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdmFyIG5vb3BGbiA9IGZ1bmN0aW9uIG5vb3BGbigpIHt9O1xuXG4gICAgICAgICAgZWZmZWN0Q2xlYW51cEZucy5wdXNoKGNsZWFudXBGbiB8fCBub29wRm4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgZWZmZWN0Q2xlYW51cEZucy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgIH0pO1xuICAgICAgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcbn1cbmV4cG9ydCB2YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGRldGVjdE92ZXJmbG93IH07IiwiaW1wb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdyB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiO1xuaW1wb3J0IGV2ZW50TGlzdGVuZXJzIGZyb20gXCIuL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qc1wiO1xuaW1wb3J0IHBvcHBlck9mZnNldHMgZnJvbSBcIi4vbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanNcIjtcbmltcG9ydCBjb21wdXRlU3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzXCI7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzXCI7XG52YXIgZGVmYXVsdE1vZGlmaWVycyA9IFtldmVudExpc3RlbmVycywgcG9wcGVyT2Zmc2V0cywgY29tcHV0ZVN0eWxlcywgYXBwbHlTdHlsZXNdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsiLCJpbXBvcnQgeyBwb3BwZXJHZW5lcmF0b3IsIGRldGVjdE92ZXJmbG93IH0gZnJvbSBcIi4vY3JlYXRlUG9wcGVyLmpzXCI7XG5pbXBvcnQgZXZlbnRMaXN0ZW5lcnMgZnJvbSBcIi4vbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzXCI7XG5pbXBvcnQgcG9wcGVyT2Zmc2V0cyBmcm9tIFwiLi9tb2RpZmllcnMvcG9wcGVyT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanNcIjtcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanNcIjtcbmltcG9ydCBvZmZzZXQgZnJvbSBcIi4vbW9kaWZpZXJzL29mZnNldC5qc1wiO1xuaW1wb3J0IGZsaXAgZnJvbSBcIi4vbW9kaWZpZXJzL2ZsaXAuanNcIjtcbmltcG9ydCBwcmV2ZW50T3ZlcmZsb3cgZnJvbSBcIi4vbW9kaWZpZXJzL3ByZXZlbnRPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGFycm93IGZyb20gXCIuL21vZGlmaWVycy9hcnJvdy5qc1wiO1xuaW1wb3J0IGhpZGUgZnJvbSBcIi4vbW9kaWZpZXJzL2hpZGUuanNcIjtcbnZhciBkZWZhdWx0TW9kaWZpZXJzID0gW2V2ZW50TGlzdGVuZXJzLCBwb3BwZXJPZmZzZXRzLCBjb21wdXRlU3R5bGVzLCBhcHBseVN0eWxlcywgb2Zmc2V0LCBmbGlwLCBwcmV2ZW50T3ZlcmZsb3csIGFycm93LCBoaWRlXTtcbnZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKHtcbiAgZGVmYXVsdE1vZGlmaWVyczogZGVmYXVsdE1vZGlmaWVyc1xufSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyLCBwb3BwZXJHZW5lcmF0b3IsIGRlZmF1bHRNb2RpZmllcnMsIGRldGVjdE92ZXJmbG93IH07IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckxpdGUgfSBmcm9tIFwiLi9wb3BwZXItbGl0ZS5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCAqIGZyb20gXCIuL21vZGlmaWVycy9pbmRleC5qc1wiOyIsIi8qIVxuICAqIEJvb3RzdHJhcCB2NS4zLjMgKGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS8pXG4gICogQ29weXJpZ2h0IDIwMTEtMjAyNCBUaGUgQm9vdHN0cmFwIEF1dGhvcnMgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ncmFwaHMvY29udHJpYnV0b3JzKVxuICAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICAqL1xuaW1wb3J0ICogYXMgUG9wcGVyIGZyb20gJ0Bwb3BwZXJqcy9jb3JlJztcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRvbS9kYXRhLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBlbGVtZW50TWFwID0gbmV3IE1hcCgpO1xuY29uc3QgRGF0YSA9IHtcbiAgc2V0KGVsZW1lbnQsIGtleSwgaW5zdGFuY2UpIHtcbiAgICBpZiAoIWVsZW1lbnRNYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICBlbGVtZW50TWFwLnNldChlbGVtZW50LCBuZXcgTWFwKCkpO1xuICAgIH1cbiAgICBjb25zdCBpbnN0YW5jZU1hcCA9IGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpO1xuXG4gICAgLy8gbWFrZSBpdCBjbGVhciB3ZSBvbmx5IHdhbnQgb25lIGluc3RhbmNlIHBlciBlbGVtZW50XG4gICAgLy8gY2FuIGJlIHJlbW92ZWQgbGF0ZXIgd2hlbiBtdWx0aXBsZSBrZXkvaW5zdGFuY2VzIGFyZSBmaW5lIHRvIGJlIHVzZWRcbiAgICBpZiAoIWluc3RhbmNlTWFwLmhhcyhrZXkpICYmIGluc3RhbmNlTWFwLnNpemUgIT09IDApIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmVycm9yKGBCb290c3RyYXAgZG9lc24ndCBhbGxvdyBtb3JlIHRoYW4gb25lIGluc3RhbmNlIHBlciBlbGVtZW50LiBCb3VuZCBpbnN0YW5jZTogJHtBcnJheS5mcm9tKGluc3RhbmNlTWFwLmtleXMoKSlbMF19LmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpbnN0YW5jZU1hcC5zZXQoa2V5LCBpbnN0YW5jZSk7XG4gIH0sXG4gIGdldChlbGVtZW50LCBrZXkpIHtcbiAgICBpZiAoZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBlbGVtZW50TWFwLmdldChlbGVtZW50KS5nZXQoa2V5KSB8fCBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgcmVtb3ZlKGVsZW1lbnQsIGtleSkge1xuICAgIGlmICghZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5zdGFuY2VNYXAgPSBlbGVtZW50TWFwLmdldChlbGVtZW50KTtcbiAgICBpbnN0YW5jZU1hcC5kZWxldGUoa2V5KTtcblxuICAgIC8vIGZyZWUgdXAgZWxlbWVudCByZWZlcmVuY2VzIGlmIHRoZXJlIGFyZSBubyBpbnN0YW5jZXMgbGVmdCBmb3IgYW4gZWxlbWVudFxuICAgIGlmIChpbnN0YW5jZU1hcC5zaXplID09PSAwKSB7XG4gICAgICBlbGVtZW50TWFwLmRlbGV0ZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbn07XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL2luZGV4LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTUFYX1VJRCA9IDEwMDAwMDA7XG5jb25zdCBNSUxMSVNFQ09ORFNfTVVMVElQTElFUiA9IDEwMDA7XG5jb25zdCBUUkFOU0lUSU9OX0VORCA9ICd0cmFuc2l0aW9uZW5kJztcblxuLyoqXG4gKiBQcm9wZXJseSBlc2NhcGUgSURzIHNlbGVjdG9ycyB0byBoYW5kbGUgd2VpcmQgSURzXG4gKiBAcGFyYW0ge3N0cmluZ30gc2VsZWN0b3JcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmNvbnN0IHBhcnNlU2VsZWN0b3IgPSBzZWxlY3RvciA9PiB7XG4gIGlmIChzZWxlY3RvciAmJiB3aW5kb3cuQ1NTICYmIHdpbmRvdy5DU1MuZXNjYXBlKSB7XG4gICAgLy8gZG9jdW1lbnQucXVlcnlTZWxlY3RvciBuZWVkcyBlc2NhcGluZyB0byBoYW5kbGUgSURzIChodG1sNSspIGNvbnRhaW5pbmcgZm9yIGluc3RhbmNlIC9cbiAgICBzZWxlY3RvciA9IHNlbGVjdG9yLnJlcGxhY2UoLyMoW15cXHNcIiMnXSspL2csIChtYXRjaCwgaWQpID0+IGAjJHtDU1MuZXNjYXBlKGlkKX1gKTtcbiAgfVxuICByZXR1cm4gc2VsZWN0b3I7XG59O1xuXG4vLyBTaG91dC1vdXQgQW5ndXMgQ3JvbGwgKGh0dHBzOi8vZ29vLmdsL3B4d1FHcClcbmNvbnN0IHRvVHlwZSA9IG9iamVjdCA9PiB7XG4gIGlmIChvYmplY3QgPT09IG51bGwgfHwgb2JqZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYCR7b2JqZWN0fWA7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpLm1hdGNoKC9cXHMoW2Etel0rKS9pKVsxXS50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKiBQdWJsaWMgVXRpbCBBUElcbiAqL1xuXG5jb25zdCBnZXRVSUQgPSBwcmVmaXggPT4ge1xuICBkbyB7XG4gICAgcHJlZml4ICs9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE1BWF9VSUQpO1xuICB9IHdoaWxlIChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChwcmVmaXgpKTtcbiAgcmV0dXJuIHByZWZpeDtcbn07XG5jb25zdCBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8vIEdldCB0cmFuc2l0aW9uLWR1cmF0aW9uIG9mIHRoZSBlbGVtZW50XG4gIGxldCB7XG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgIHRyYW5zaXRpb25EZWxheVxuICB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIGNvbnN0IGZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uID0gTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkR1cmF0aW9uKTtcbiAgY29uc3QgZmxvYXRUcmFuc2l0aW9uRGVsYXkgPSBOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpO1xuXG4gIC8vIFJldHVybiAwIGlmIGVsZW1lbnQgb3IgdHJhbnNpdGlvbiBkdXJhdGlvbiBpcyBub3QgZm91bmRcbiAgaWYgKCFmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiAmJiAhZmxvYXRUcmFuc2l0aW9uRGVsYXkpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIC8vIElmIG11bHRpcGxlIGR1cmF0aW9ucyBhcmUgZGVmaW5lZCwgdGFrZSB0aGUgZmlyc3RcbiAgdHJhbnNpdGlvbkR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uLnNwbGl0KCcsJylbMF07XG4gIHRyYW5zaXRpb25EZWxheSA9IHRyYW5zaXRpb25EZWxheS5zcGxpdCgnLCcpWzBdO1xuICByZXR1cm4gKE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EdXJhdGlvbikgKyBOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpKSAqIE1JTExJU0VDT05EU19NVUxUSVBMSUVSO1xufTtcbmNvbnN0IHRyaWdnZXJUcmFuc2l0aW9uRW5kID0gZWxlbWVudCA9PiB7XG4gIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoVFJBTlNJVElPTl9FTkQpKTtcbn07XG5jb25zdCBpc0VsZW1lbnQgPSBvYmplY3QgPT4ge1xuICBpZiAoIW9iamVjdCB8fCB0eXBlb2Ygb2JqZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodHlwZW9mIG9iamVjdC5qcXVlcnkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0WzBdO1xuICB9XG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0Lm5vZGVUeXBlICE9PSAndW5kZWZpbmVkJztcbn07XG5jb25zdCBnZXRFbGVtZW50ID0gb2JqZWN0ID0+IHtcbiAgLy8gaXQncyBhIGpRdWVyeSBvYmplY3Qgb3IgYSBub2RlIGVsZW1lbnRcbiAgaWYgKGlzRWxlbWVudChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG9iamVjdC5qcXVlcnkgPyBvYmplY3RbMF0gOiBvYmplY3Q7XG4gIH1cbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnICYmIG9iamVjdC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocGFyc2VTZWxlY3RvcihvYmplY3QpKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5jb25zdCBpc1Zpc2libGUgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFpc0VsZW1lbnQoZWxlbWVudCkgfHwgZWxlbWVudC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBjb25zdCBlbGVtZW50SXNWaXNpYmxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCd2aXNpYmlsaXR5JykgPT09ICd2aXNpYmxlJztcbiAgLy8gSGFuZGxlIGBkZXRhaWxzYCBlbGVtZW50IGFzIGl0cyBjb250ZW50IG1heSBmYWxzaWUgYXBwZWFyIHZpc2libGUgd2hlbiBpdCBpcyBjbG9zZWRcbiAgY29uc3QgY2xvc2VkRGV0YWlscyA9IGVsZW1lbnQuY2xvc2VzdCgnZGV0YWlsczpub3QoW29wZW5dKScpO1xuICBpZiAoIWNsb3NlZERldGFpbHMpIHtcbiAgICByZXR1cm4gZWxlbWVudElzVmlzaWJsZTtcbiAgfVxuICBpZiAoY2xvc2VkRGV0YWlscyAhPT0gZWxlbWVudCkge1xuICAgIGNvbnN0IHN1bW1hcnkgPSBlbGVtZW50LmNsb3Nlc3QoJ3N1bW1hcnknKTtcbiAgICBpZiAoc3VtbWFyeSAmJiBzdW1tYXJ5LnBhcmVudE5vZGUgIT09IGNsb3NlZERldGFpbHMpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHN1bW1hcnkgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnRJc1Zpc2libGU7XG59O1xuY29uc3QgaXNEaXNhYmxlZCA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWVsZW1lbnQgfHwgZWxlbWVudC5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodHlwZW9mIGVsZW1lbnQuZGlzYWJsZWQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuZGlzYWJsZWQ7XG4gIH1cbiAgcmV0dXJuIGVsZW1lbnQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXNhYmxlZCcpICE9PSAnZmFsc2UnO1xufTtcbmNvbnN0IGZpbmRTaGFkb3dSb290ID0gZWxlbWVudCA9PiB7XG4gIGlmICghZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmF0dGFjaFNoYWRvdykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gQ2FuIGZpbmQgdGhlIHNoYWRvdyByb290IG90aGVyd2lzZSBpdCdsbCByZXR1cm4gdGhlIGRvY3VtZW50XG4gIGlmICh0eXBlb2YgZWxlbWVudC5nZXRSb290Tm9kZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbnN0IHJvb3QgPSBlbGVtZW50LmdldFJvb3ROb2RlKCk7XG4gICAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IG51bGw7XG4gIH1cbiAgaWYgKGVsZW1lbnQgaW5zdGFuY2VvZiBTaGFkb3dSb290KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICAvLyB3aGVuIHdlIGRvbid0IGZpbmQgYSBzaGFkb3cgcm9vdFxuICBpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiBmaW5kU2hhZG93Um9vdChlbGVtZW50LnBhcmVudE5vZGUpO1xufTtcbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcblxuLyoqXG4gKiBUcmljayB0byByZXN0YXJ0IGFuIGVsZW1lbnQncyBhbmltYXRpb25cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHZvaWRcbiAqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LmNoYXJpc3RoZW8uaW8vYmxvZy8yMDIxLzAyL3Jlc3RhcnQtYS1jc3MtYW5pbWF0aW9uLXdpdGgtamF2YXNjcmlwdC8jcmVzdGFydGluZy1hLWNzcy1hbmltYXRpb25cbiAqL1xuY29uc3QgcmVmbG93ID0gZWxlbWVudCA9PiB7XG4gIGVsZW1lbnQub2Zmc2V0SGVpZ2h0OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xufTtcbmNvbnN0IGdldGpRdWVyeSA9ICgpID0+IHtcbiAgaWYgKHdpbmRvdy5qUXVlcnkgJiYgIWRvY3VtZW50LmJvZHkuaGFzQXR0cmlidXRlKCdkYXRhLWJzLW5vLWpxdWVyeScpKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5qUXVlcnk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuY29uc3QgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcyA9IFtdO1xuY29uc3Qgb25ET01Db250ZW50TG9hZGVkID0gY2FsbGJhY2sgPT4ge1xuICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgLy8gYWRkIGxpc3RlbmVyIG9uIHRoZSBmaXJzdCBjYWxsIHdoZW4gdGhlIGRvY3VtZW50IGlzIGluIGxvYWRpbmcgc3RhdGVcbiAgICBpZiAoIURPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIERPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MpIHtcbiAgICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjaygpO1xuICB9XG59O1xuY29uc3QgaXNSVEwgPSAoKSA9PiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGlyID09PSAncnRsJztcbmNvbnN0IGRlZmluZUpRdWVyeVBsdWdpbiA9IHBsdWdpbiA9PiB7XG4gIG9uRE9NQ29udGVudExvYWRlZCgoKSA9PiB7XG4gICAgY29uc3QgJCA9IGdldGpRdWVyeSgpO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICgkKSB7XG4gICAgICBjb25zdCBuYW1lID0gcGx1Z2luLk5BTUU7XG4gICAgICBjb25zdCBKUVVFUllfTk9fQ09ORkxJQ1QgPSAkLmZuW25hbWVdO1xuICAgICAgJC5mbltuYW1lXSA9IHBsdWdpbi5qUXVlcnlJbnRlcmZhY2U7XG4gICAgICAkLmZuW25hbWVdLkNvbnN0cnVjdG9yID0gcGx1Z2luO1xuICAgICAgJC5mbltuYW1lXS5ub0NvbmZsaWN0ID0gKCkgPT4ge1xuICAgICAgICAkLmZuW25hbWVdID0gSlFVRVJZX05PX0NPTkZMSUNUO1xuICAgICAgICByZXR1cm4gcGx1Z2luLmpRdWVyeUludGVyZmFjZTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn07XG5jb25zdCBleGVjdXRlID0gKHBvc3NpYmxlQ2FsbGJhY2ssIGFyZ3MgPSBbXSwgZGVmYXVsdFZhbHVlID0gcG9zc2libGVDYWxsYmFjaykgPT4ge1xuICByZXR1cm4gdHlwZW9mIHBvc3NpYmxlQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBwb3NzaWJsZUNhbGxiYWNrKC4uLmFyZ3MpIDogZGVmYXVsdFZhbHVlO1xufTtcbmNvbnN0IGV4ZWN1dGVBZnRlclRyYW5zaXRpb24gPSAoY2FsbGJhY2ssIHRyYW5zaXRpb25FbGVtZW50LCB3YWl0Rm9yVHJhbnNpdGlvbiA9IHRydWUpID0+IHtcbiAgaWYgKCF3YWl0Rm9yVHJhbnNpdGlvbikge1xuICAgIGV4ZWN1dGUoY2FsbGJhY2spO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBkdXJhdGlvblBhZGRpbmcgPSA1O1xuICBjb25zdCBlbXVsYXRlZER1cmF0aW9uID0gZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodHJhbnNpdGlvbkVsZW1lbnQpICsgZHVyYXRpb25QYWRkaW5nO1xuICBsZXQgY2FsbGVkID0gZmFsc2U7XG4gIGNvbnN0IGhhbmRsZXIgPSAoe1xuICAgIHRhcmdldFxuICB9KSA9PiB7XG4gICAgaWYgKHRhcmdldCAhPT0gdHJhbnNpdGlvbkVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2FsbGVkID0gdHJ1ZTtcbiAgICB0cmFuc2l0aW9uRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFRSQU5TSVRJT05fRU5ELCBoYW5kbGVyKTtcbiAgICBleGVjdXRlKGNhbGxiYWNrKTtcbiAgfTtcbiAgdHJhbnNpdGlvbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihUUkFOU0lUSU9OX0VORCwgaGFuZGxlcik7XG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGlmICghY2FsbGVkKSB7XG4gICAgICB0cmlnZ2VyVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRWxlbWVudCk7XG4gICAgfVxuICB9LCBlbXVsYXRlZER1cmF0aW9uKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBwcmV2aW91cy9uZXh0IGVsZW1lbnQgb2YgYSBsaXN0LlxuICpcbiAqIEBwYXJhbSB7YXJyYXl9IGxpc3QgICAgVGhlIGxpc3Qgb2YgZWxlbWVudHNcbiAqIEBwYXJhbSBhY3RpdmVFbGVtZW50ICAgVGhlIGFjdGl2ZSBlbGVtZW50XG4gKiBAcGFyYW0gc2hvdWxkR2V0TmV4dCAgIENob29zZSB0byBnZXQgbmV4dCBvciBwcmV2aW91cyBlbGVtZW50XG4gKiBAcGFyYW0gaXNDeWNsZUFsbG93ZWRcbiAqIEByZXR1cm4ge0VsZW1lbnR8ZWxlbX0gVGhlIHByb3BlciBlbGVtZW50XG4gKi9cbmNvbnN0IGdldE5leHRBY3RpdmVFbGVtZW50ID0gKGxpc3QsIGFjdGl2ZUVsZW1lbnQsIHNob3VsZEdldE5leHQsIGlzQ3ljbGVBbGxvd2VkKSA9PiB7XG4gIGNvbnN0IGxpc3RMZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgbGV0IGluZGV4ID0gbGlzdC5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpO1xuXG4gIC8vIGlmIHRoZSBlbGVtZW50IGRvZXMgbm90IGV4aXN0IGluIHRoZSBsaXN0IHJldHVybiBhbiBlbGVtZW50XG4gIC8vIGRlcGVuZGluZyBvbiB0aGUgZGlyZWN0aW9uIGFuZCBpZiBjeWNsZSBpcyBhbGxvd2VkXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gIXNob3VsZEdldE5leHQgJiYgaXNDeWNsZUFsbG93ZWQgPyBsaXN0W2xpc3RMZW5ndGggLSAxXSA6IGxpc3RbMF07XG4gIH1cbiAgaW5kZXggKz0gc2hvdWxkR2V0TmV4dCA/IDEgOiAtMTtcbiAgaWYgKGlzQ3ljbGVBbGxvd2VkKSB7XG4gICAgaW5kZXggPSAoaW5kZXggKyBsaXN0TGVuZ3RoKSAlIGxpc3RMZW5ndGg7XG4gIH1cbiAgcmV0dXJuIGxpc3RbTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIGxpc3RMZW5ndGggLSAxKSldO1xufTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRvbS9ldmVudC1oYW5kbGVyLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IG5hbWVzcGFjZVJlZ2V4ID0gL1teLl0qKD89XFwuLiopXFwufC4qLztcbmNvbnN0IHN0cmlwTmFtZVJlZ2V4ID0gL1xcLi4qLztcbmNvbnN0IHN0cmlwVWlkUmVnZXggPSAvOjpcXGQrJC87XG5jb25zdCBldmVudFJlZ2lzdHJ5ID0ge307IC8vIEV2ZW50cyBzdG9yYWdlXG5sZXQgdWlkRXZlbnQgPSAxO1xuY29uc3QgY3VzdG9tRXZlbnRzID0ge1xuICBtb3VzZWVudGVyOiAnbW91c2VvdmVyJyxcbiAgbW91c2VsZWF2ZTogJ21vdXNlb3V0J1xufTtcbmNvbnN0IG5hdGl2ZUV2ZW50cyA9IG5ldyBTZXQoWydjbGljaycsICdkYmxjbGljaycsICdtb3VzZXVwJywgJ21vdXNlZG93bicsICdjb250ZXh0bWVudScsICdtb3VzZXdoZWVsJywgJ0RPTU1vdXNlU2Nyb2xsJywgJ21vdXNlb3ZlcicsICdtb3VzZW91dCcsICdtb3VzZW1vdmUnLCAnc2VsZWN0c3RhcnQnLCAnc2VsZWN0ZW5kJywgJ2tleWRvd24nLCAna2V5cHJlc3MnLCAna2V5dXAnLCAnb3JpZW50YXRpb25jaGFuZ2UnLCAndG91Y2hzdGFydCcsICd0b3VjaG1vdmUnLCAndG91Y2hlbmQnLCAndG91Y2hjYW5jZWwnLCAncG9pbnRlcmRvd24nLCAncG9pbnRlcm1vdmUnLCAncG9pbnRlcnVwJywgJ3BvaW50ZXJsZWF2ZScsICdwb2ludGVyY2FuY2VsJywgJ2dlc3R1cmVzdGFydCcsICdnZXN0dXJlY2hhbmdlJywgJ2dlc3R1cmVlbmQnLCAnZm9jdXMnLCAnYmx1cicsICdjaGFuZ2UnLCAncmVzZXQnLCAnc2VsZWN0JywgJ3N1Ym1pdCcsICdmb2N1c2luJywgJ2ZvY3Vzb3V0JywgJ2xvYWQnLCAndW5sb2FkJywgJ2JlZm9yZXVubG9hZCcsICdyZXNpemUnLCAnbW92ZScsICdET01Db250ZW50TG9hZGVkJywgJ3JlYWR5c3RhdGVjaGFuZ2UnLCAnZXJyb3InLCAnYWJvcnQnLCAnc2Nyb2xsJ10pO1xuXG4vKipcbiAqIFByaXZhdGUgbWV0aG9kc1xuICovXG5cbmZ1bmN0aW9uIG1ha2VFdmVudFVpZChlbGVtZW50LCB1aWQpIHtcbiAgcmV0dXJuIHVpZCAmJiBgJHt1aWR9Ojoke3VpZEV2ZW50Kyt9YCB8fCBlbGVtZW50LnVpZEV2ZW50IHx8IHVpZEV2ZW50Kys7XG59XG5mdW5jdGlvbiBnZXRFbGVtZW50RXZlbnRzKGVsZW1lbnQpIHtcbiAgY29uc3QgdWlkID0gbWFrZUV2ZW50VWlkKGVsZW1lbnQpO1xuICBlbGVtZW50LnVpZEV2ZW50ID0gdWlkO1xuICBldmVudFJlZ2lzdHJ5W3VpZF0gPSBldmVudFJlZ2lzdHJ5W3VpZF0gfHwge307XG4gIHJldHVybiBldmVudFJlZ2lzdHJ5W3VpZF07XG59XG5mdW5jdGlvbiBib290c3RyYXBIYW5kbGVyKGVsZW1lbnQsIGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7XG4gICAgaHlkcmF0ZU9iaihldmVudCwge1xuICAgICAgZGVsZWdhdGVUYXJnZXQ6IGVsZW1lbnRcbiAgICB9KTtcbiAgICBpZiAoaGFuZGxlci5vbmVPZmYpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgZXZlbnQudHlwZSwgZm4pO1xuICAgIH1cbiAgICByZXR1cm4gZm4uYXBwbHkoZWxlbWVudCwgW2V2ZW50XSk7XG4gIH07XG59XG5mdW5jdGlvbiBib290c3RyYXBEZWxlZ2F0aW9uSGFuZGxlcihlbGVtZW50LCBzZWxlY3RvciwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICBjb25zdCBkb21FbGVtZW50cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gICAgZm9yIChsZXQge1xuICAgICAgdGFyZ2V0XG4gICAgfSA9IGV2ZW50OyB0YXJnZXQgJiYgdGFyZ2V0ICE9PSB0aGlzOyB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZSkge1xuICAgICAgZm9yIChjb25zdCBkb21FbGVtZW50IG9mIGRvbUVsZW1lbnRzKSB7XG4gICAgICAgIGlmIChkb21FbGVtZW50ICE9PSB0YXJnZXQpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBoeWRyYXRlT2JqKGV2ZW50LCB7XG4gICAgICAgICAgZGVsZWdhdGVUYXJnZXQ6IHRhcmdldFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGhhbmRsZXIub25lT2ZmKSB7XG4gICAgICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCBldmVudC50eXBlLCBzZWxlY3RvciwgZm4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmbi5hcHBseSh0YXJnZXQsIFtldmVudF0pO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn1cbmZ1bmN0aW9uIGZpbmRIYW5kbGVyKGV2ZW50cywgY2FsbGFibGUsIGRlbGVnYXRpb25TZWxlY3RvciA9IG51bGwpIHtcbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZXZlbnRzKS5maW5kKGV2ZW50ID0+IGV2ZW50LmNhbGxhYmxlID09PSBjYWxsYWJsZSAmJiBldmVudC5kZWxlZ2F0aW9uU2VsZWN0b3IgPT09IGRlbGVnYXRpb25TZWxlY3Rvcik7XG59XG5mdW5jdGlvbiBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgY29uc3QgaXNEZWxlZ2F0ZWQgPSB0eXBlb2YgaGFuZGxlciA9PT0gJ3N0cmluZyc7XG4gIC8vIFRPRE86IHRvb2x0aXAgcGFzc2VzIGBmYWxzZWAgaW5zdGVhZCBvZiBzZWxlY3Rvciwgc28gd2UgbmVlZCB0byBjaGVja1xuICBjb25zdCBjYWxsYWJsZSA9IGlzRGVsZWdhdGVkID8gZGVsZWdhdGlvbkZ1bmN0aW9uIDogaGFuZGxlciB8fCBkZWxlZ2F0aW9uRnVuY3Rpb247XG4gIGxldCB0eXBlRXZlbnQgPSBnZXRUeXBlRXZlbnQob3JpZ2luYWxUeXBlRXZlbnQpO1xuICBpZiAoIW5hdGl2ZUV2ZW50cy5oYXModHlwZUV2ZW50KSkge1xuICAgIHR5cGVFdmVudCA9IG9yaWdpbmFsVHlwZUV2ZW50O1xuICB9XG4gIHJldHVybiBbaXNEZWxlZ2F0ZWQsIGNhbGxhYmxlLCB0eXBlRXZlbnRdO1xufVxuZnVuY3Rpb24gYWRkSGFuZGxlcihlbGVtZW50LCBvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCBvbmVPZmYpIHtcbiAgaWYgKHR5cGVvZiBvcmlnaW5hbFR5cGVFdmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbGV0IFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF0gPSBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pO1xuXG4gIC8vIGluIGNhc2Ugb2YgbW91c2VlbnRlciBvciBtb3VzZWxlYXZlIHdyYXAgdGhlIGhhbmRsZXIgd2l0aGluIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgZm9yIGl0cyBET00gcG9zaXRpb25cbiAgLy8gdGhpcyBwcmV2ZW50cyB0aGUgaGFuZGxlciBmcm9tIGJlaW5nIGRpc3BhdGNoZWQgdGhlIHNhbWUgd2F5IGFzIG1vdXNlb3ZlciBvciBtb3VzZW91dCBkb2VzXG4gIGlmIChvcmlnaW5hbFR5cGVFdmVudCBpbiBjdXN0b21FdmVudHMpIHtcbiAgICBjb25zdCB3cmFwRnVuY3Rpb24gPSBmbiA9PiB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmICghZXZlbnQucmVsYXRlZFRhcmdldCB8fCBldmVudC5yZWxhdGVkVGFyZ2V0ICE9PSBldmVudC5kZWxlZ2F0ZVRhcmdldCAmJiAhZXZlbnQuZGVsZWdhdGVUYXJnZXQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpIHtcbiAgICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCBldmVudCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBjYWxsYWJsZSA9IHdyYXBGdW5jdGlvbihjYWxsYWJsZSk7XG4gIH1cbiAgY29uc3QgZXZlbnRzID0gZ2V0RWxlbWVudEV2ZW50cyhlbGVtZW50KTtcbiAgY29uc3QgaGFuZGxlcnMgPSBldmVudHNbdHlwZUV2ZW50XSB8fCAoZXZlbnRzW3R5cGVFdmVudF0gPSB7fSk7XG4gIGNvbnN0IHByZXZpb3VzRnVuY3Rpb24gPSBmaW5kSGFuZGxlcihoYW5kbGVycywgY2FsbGFibGUsIGlzRGVsZWdhdGVkID8gaGFuZGxlciA6IG51bGwpO1xuICBpZiAocHJldmlvdXNGdW5jdGlvbikge1xuICAgIHByZXZpb3VzRnVuY3Rpb24ub25lT2ZmID0gcHJldmlvdXNGdW5jdGlvbi5vbmVPZmYgJiYgb25lT2ZmO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB1aWQgPSBtYWtlRXZlbnRVaWQoY2FsbGFibGUsIG9yaWdpbmFsVHlwZUV2ZW50LnJlcGxhY2UobmFtZXNwYWNlUmVnZXgsICcnKSk7XG4gIGNvbnN0IGZuID0gaXNEZWxlZ2F0ZWQgPyBib290c3RyYXBEZWxlZ2F0aW9uSGFuZGxlcihlbGVtZW50LCBoYW5kbGVyLCBjYWxsYWJsZSkgOiBib290c3RyYXBIYW5kbGVyKGVsZW1lbnQsIGNhbGxhYmxlKTtcbiAgZm4uZGVsZWdhdGlvblNlbGVjdG9yID0gaXNEZWxlZ2F0ZWQgPyBoYW5kbGVyIDogbnVsbDtcbiAgZm4uY2FsbGFibGUgPSBjYWxsYWJsZTtcbiAgZm4ub25lT2ZmID0gb25lT2ZmO1xuICBmbi51aWRFdmVudCA9IHVpZDtcbiAgaGFuZGxlcnNbdWlkXSA9IGZuO1xuICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZUV2ZW50LCBmbiwgaXNEZWxlZ2F0ZWQpO1xufVxuZnVuY3Rpb24gcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvblNlbGVjdG9yKSB7XG4gIGNvbnN0IGZuID0gZmluZEhhbmRsZXIoZXZlbnRzW3R5cGVFdmVudF0sIGhhbmRsZXIsIGRlbGVnYXRpb25TZWxlY3Rvcik7XG4gIGlmICghZm4pIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGVFdmVudCwgZm4sIEJvb2xlYW4oZGVsZWdhdGlvblNlbGVjdG9yKSk7XG4gIGRlbGV0ZSBldmVudHNbdHlwZUV2ZW50XVtmbi51aWRFdmVudF07XG59XG5mdW5jdGlvbiByZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIG5hbWVzcGFjZSkge1xuICBjb25zdCBzdG9yZUVsZW1lbnRFdmVudCA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IHt9O1xuICBmb3IgKGNvbnN0IFtoYW5kbGVyS2V5LCBldmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc3RvcmVFbGVtZW50RXZlbnQpKSB7XG4gICAgaWYgKGhhbmRsZXJLZXkuaW5jbHVkZXMobmFtZXNwYWNlKSkge1xuICAgICAgcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgZXZlbnQuY2FsbGFibGUsIGV2ZW50LmRlbGVnYXRpb25TZWxlY3Rvcik7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRUeXBlRXZlbnQoZXZlbnQpIHtcbiAgLy8gYWxsb3cgdG8gZ2V0IHRoZSBuYXRpdmUgZXZlbnRzIGZyb20gbmFtZXNwYWNlZCBldmVudHMgKCdjbGljay5icy5idXR0b24nIC0tPiAnY2xpY2snKVxuICBldmVudCA9IGV2ZW50LnJlcGxhY2Uoc3RyaXBOYW1lUmVnZXgsICcnKTtcbiAgcmV0dXJuIGN1c3RvbUV2ZW50c1tldmVudF0gfHwgZXZlbnQ7XG59XG5jb25zdCBFdmVudEhhbmRsZXIgPSB7XG4gIG9uKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgICBhZGRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24sIGZhbHNlKTtcbiAgfSxcbiAgb25lKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgICBhZGRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24sIHRydWUpO1xuICB9LFxuICBvZmYoZWxlbWVudCwgb3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbikge1xuICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxUeXBlRXZlbnQgIT09ICdzdHJpbmcnIHx8ICFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF0gPSBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pO1xuICAgIGNvbnN0IGluTmFtZXNwYWNlID0gdHlwZUV2ZW50ICE9PSBvcmlnaW5hbFR5cGVFdmVudDtcbiAgICBjb25zdCBldmVudHMgPSBnZXRFbGVtZW50RXZlbnRzKGVsZW1lbnQpO1xuICAgIGNvbnN0IHN0b3JlRWxlbWVudEV2ZW50ID0gZXZlbnRzW3R5cGVFdmVudF0gfHwge307XG4gICAgY29uc3QgaXNOYW1lc3BhY2UgPSBvcmlnaW5hbFR5cGVFdmVudC5zdGFydHNXaXRoKCcuJyk7XG4gICAgaWYgKHR5cGVvZiBjYWxsYWJsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIFNpbXBsZXN0IGNhc2U6IGhhbmRsZXIgaXMgcGFzc2VkLCByZW1vdmUgdGhhdCBsaXN0ZW5lciBPTkxZLlxuICAgICAgaWYgKCFPYmplY3Qua2V5cyhzdG9yZUVsZW1lbnRFdmVudCkubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGNhbGxhYmxlLCBpc0RlbGVnYXRlZCA/IGhhbmRsZXIgOiBudWxsKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGlzTmFtZXNwYWNlKSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnRFdmVudCBvZiBPYmplY3Qua2V5cyhldmVudHMpKSB7XG4gICAgICAgIHJlbW92ZU5hbWVzcGFjZWRIYW5kbGVycyhlbGVtZW50LCBldmVudHMsIGVsZW1lbnRFdmVudCwgb3JpZ2luYWxUeXBlRXZlbnQuc2xpY2UoMSkpO1xuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtrZXlIYW5kbGVycywgZXZlbnRdIG9mIE9iamVjdC5lbnRyaWVzKHN0b3JlRWxlbWVudEV2ZW50KSkge1xuICAgICAgY29uc3QgaGFuZGxlcktleSA9IGtleUhhbmRsZXJzLnJlcGxhY2Uoc3RyaXBVaWRSZWdleCwgJycpO1xuICAgICAgaWYgKCFpbk5hbWVzcGFjZSB8fCBvcmlnaW5hbFR5cGVFdmVudC5pbmNsdWRlcyhoYW5kbGVyS2V5KSkge1xuICAgICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBldmVudC5jYWxsYWJsZSwgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHRyaWdnZXIoZWxlbWVudCwgZXZlbnQsIGFyZ3MpIHtcbiAgICBpZiAodHlwZW9mIGV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0ICQgPSBnZXRqUXVlcnkoKTtcbiAgICBjb25zdCB0eXBlRXZlbnQgPSBnZXRUeXBlRXZlbnQoZXZlbnQpO1xuICAgIGNvbnN0IGluTmFtZXNwYWNlID0gZXZlbnQgIT09IHR5cGVFdmVudDtcbiAgICBsZXQgalF1ZXJ5RXZlbnQgPSBudWxsO1xuICAgIGxldCBidWJibGVzID0gdHJ1ZTtcbiAgICBsZXQgbmF0aXZlRGlzcGF0Y2ggPSB0cnVlO1xuICAgIGxldCBkZWZhdWx0UHJldmVudGVkID0gZmFsc2U7XG4gICAgaWYgKGluTmFtZXNwYWNlICYmICQpIHtcbiAgICAgIGpRdWVyeUV2ZW50ID0gJC5FdmVudChldmVudCwgYXJncyk7XG4gICAgICAkKGVsZW1lbnQpLnRyaWdnZXIoalF1ZXJ5RXZlbnQpO1xuICAgICAgYnViYmxlcyA9ICFqUXVlcnlFdmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpO1xuICAgICAgbmF0aXZlRGlzcGF0Y2ggPSAhalF1ZXJ5RXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKTtcbiAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSBqUXVlcnlFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKTtcbiAgICB9XG4gICAgY29uc3QgZXZ0ID0gaHlkcmF0ZU9iaihuZXcgRXZlbnQoZXZlbnQsIHtcbiAgICAgIGJ1YmJsZXMsXG4gICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgfSksIGFyZ3MpO1xuICAgIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKG5hdGl2ZURpc3BhdGNoKSB7XG4gICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZ0KTtcbiAgICB9XG4gICAgaWYgKGV2dC5kZWZhdWx0UHJldmVudGVkICYmIGpRdWVyeUV2ZW50KSB7XG4gICAgICBqUXVlcnlFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICByZXR1cm4gZXZ0O1xuICB9XG59O1xuZnVuY3Rpb24gaHlkcmF0ZU9iaihvYmosIG1ldGEgPSB7fSkge1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtZXRhKSkge1xuICAgIHRyeSB7XG4gICAgICBvYmpba2V5XSA9IHZhbHVlO1xuICAgIH0gY2F0Y2ggKF91bnVzZWQpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgZG9tL21hbmlwdWxhdG9yLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuZnVuY3Rpb24gbm9ybWFsaXplRGF0YSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAodmFsdWUgPT09IE51bWJlcih2YWx1ZSkudG9TdHJpbmcoKSkge1xuICAgIHJldHVybiBOdW1iZXIodmFsdWUpO1xuICB9XG4gIGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09ICdudWxsJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG4gIH0gY2F0Y2ggKF91bnVzZWQpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGFLZXkoa2V5KSB7XG4gIHJldHVybiBrZXkucmVwbGFjZSgvW0EtWl0vZywgY2hyID0+IGAtJHtjaHIudG9Mb3dlckNhc2UoKX1gKTtcbn1cbmNvbnN0IE1hbmlwdWxhdG9yID0ge1xuICBzZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSwgdmFsdWUpIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gLCB2YWx1ZSk7XG4gIH0sXG4gIHJlbW92ZURhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5KSB7XG4gICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YCk7XG4gIH0sXG4gIGdldERhdGFBdHRyaWJ1dGVzKGVsZW1lbnQpIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHt9O1xuICAgIGNvbnN0IGJzS2V5cyA9IE9iamVjdC5rZXlzKGVsZW1lbnQuZGF0YXNldCkuZmlsdGVyKGtleSA9PiBrZXkuc3RhcnRzV2l0aCgnYnMnKSAmJiAha2V5LnN0YXJ0c1dpdGgoJ2JzQ29uZmlnJykpO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGJzS2V5cykge1xuICAgICAgbGV0IHB1cmVLZXkgPSBrZXkucmVwbGFjZSgvXmJzLywgJycpO1xuICAgICAgcHVyZUtleSA9IHB1cmVLZXkuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBwdXJlS2V5LnNsaWNlKDEsIHB1cmVLZXkubGVuZ3RoKTtcbiAgICAgIGF0dHJpYnV0ZXNbcHVyZUtleV0gPSBub3JtYWxpemVEYXRhKGVsZW1lbnQuZGF0YXNldFtrZXldKTtcbiAgICB9XG4gICAgcmV0dXJuIGF0dHJpYnV0ZXM7XG4gIH0sXG4gIGdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5KSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZURhdGEoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YCkpO1xuICB9XG59O1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9jb25maWcuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIENvbmZpZyB7XG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgaGF2ZSB0byBpbXBsZW1lbnQgdGhlIHN0YXRpYyBtZXRob2QgXCJOQU1FXCIsIGZvciBlYWNoIGNvbXBvbmVudCEnKTtcbiAgfVxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHRoaXMuX21lcmdlQ29uZmlnT2JqKGNvbmZpZyk7XG4gICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpO1xuICAgIHRoaXMuX3R5cGVDaGVja0NvbmZpZyhjb25maWcpO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfbWVyZ2VDb25maWdPYmooY29uZmlnLCBlbGVtZW50KSB7XG4gICAgY29uc3QganNvbkNvbmZpZyA9IGlzRWxlbWVudChlbGVtZW50KSA/IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwgJ2NvbmZpZycpIDoge307IC8vIHRyeSB0byBwYXJzZVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnRoaXMuY29uc3RydWN0b3IuRGVmYXVsdCxcbiAgICAgIC4uLih0eXBlb2YganNvbkNvbmZpZyA9PT0gJ29iamVjdCcgPyBqc29uQ29uZmlnIDoge30pLFxuICAgICAgLi4uKGlzRWxlbWVudChlbGVtZW50KSA/IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKGVsZW1lbnQpIDoge30pLFxuICAgICAgLi4uKHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnID8gY29uZmlnIDoge30pXG4gICAgfTtcbiAgfVxuICBfdHlwZUNoZWNrQ29uZmlnKGNvbmZpZywgY29uZmlnVHlwZXMgPSB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKSB7XG4gICAgZm9yIChjb25zdCBbcHJvcGVydHksIGV4cGVjdGVkVHlwZXNdIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZ1R5cGVzKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBjb25maWdbcHJvcGVydHldO1xuICAgICAgY29uc3QgdmFsdWVUeXBlID0gaXNFbGVtZW50KHZhbHVlKSA/ICdlbGVtZW50JyA6IHRvVHlwZSh2YWx1ZSk7XG4gICAgICBpZiAoIW5ldyBSZWdFeHAoZXhwZWN0ZWRUeXBlcykudGVzdCh2YWx1ZVR5cGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FLnRvVXBwZXJDYXNlKCl9OiBPcHRpb24gXCIke3Byb3BlcnR5fVwiIHByb3ZpZGVkIHR5cGUgXCIke3ZhbHVlVHlwZX1cIiBidXQgZXhwZWN0ZWQgdHlwZSBcIiR7ZXhwZWN0ZWRUeXBlc31cIi5gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGJhc2UtY29tcG9uZW50LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IFZFUlNJT04gPSAnNS4zLjMnO1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBCYXNlQ29tcG9uZW50IGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoKTtcbiAgICBlbGVtZW50ID0gZ2V0RWxlbWVudChlbGVtZW50KTtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZyk7XG4gICAgRGF0YS5zZXQodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSwgdGhpcyk7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZGlzcG9zZSgpIHtcbiAgICBEYXRhLnJlbW92ZSh0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZKTtcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuRVZFTlRfS0VZKTtcbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkge1xuICAgICAgdGhpc1twcm9wZXJ0eU5hbWVdID0gbnVsbDtcbiAgICB9XG4gIH1cbiAgX3F1ZXVlQ2FsbGJhY2soY2FsbGJhY2ssIGVsZW1lbnQsIGlzQW5pbWF0ZWQgPSB0cnVlKSB7XG4gICAgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbihjYWxsYmFjaywgZWxlbWVudCwgaXNBbmltYXRlZCk7XG4gIH1cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcsIHRoaXMuX2VsZW1lbnQpO1xuICAgIGNvbmZpZyA9IHRoaXMuX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKTtcbiAgICB0aGlzLl90eXBlQ2hlY2tDb25maWcoY29uZmlnKTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBnZXRJbnN0YW5jZShlbGVtZW50KSB7XG4gICAgcmV0dXJuIERhdGEuZ2V0KGdldEVsZW1lbnQoZWxlbWVudCksIHRoaXMuREFUQV9LRVkpO1xuICB9XG4gIHN0YXRpYyBnZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIGNvbmZpZyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW5zdGFuY2UoZWxlbWVudCkgfHwgbmV3IHRoaXMoZWxlbWVudCwgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiBudWxsKTtcbiAgfVxuICBzdGF0aWMgZ2V0IFZFUlNJT04oKSB7XG4gICAgcmV0dXJuIFZFUlNJT047XG4gIH1cbiAgc3RhdGljIGdldCBEQVRBX0tFWSgpIHtcbiAgICByZXR1cm4gYGJzLiR7dGhpcy5OQU1FfWA7XG4gIH1cbiAgc3RhdGljIGdldCBFVkVOVF9LRVkoKSB7XG4gICAgcmV0dXJuIGAuJHt0aGlzLkRBVEFfS0VZfWA7XG4gIH1cbiAgc3RhdGljIGV2ZW50TmFtZShuYW1lKSB7XG4gICAgcmV0dXJuIGAke25hbWV9JHt0aGlzLkVWRU5UX0tFWX1gO1xuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBkb20vc2VsZWN0b3ItZW5naW5lLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgZ2V0U2VsZWN0b3IgPSBlbGVtZW50ID0+IHtcbiAgbGV0IHNlbGVjdG9yID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtdGFyZ2V0Jyk7XG4gIGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09ICcjJykge1xuICAgIGxldCBocmVmQXR0cmlidXRlID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKTtcblxuICAgIC8vIFRoZSBvbmx5IHZhbGlkIGNvbnRlbnQgdGhhdCBjb3VsZCBkb3VibGUgYXMgYSBzZWxlY3RvciBhcmUgSURzIG9yIGNsYXNzZXMsXG4gICAgLy8gc28gZXZlcnl0aGluZyBzdGFydGluZyB3aXRoIGAjYCBvciBgLmAuIElmIGEgXCJyZWFsXCIgVVJMIGlzIHVzZWQgYXMgdGhlIHNlbGVjdG9yLFxuICAgIC8vIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCB3aWxsIHJpZ2h0ZnVsbHkgY29tcGxhaW4gaXQgaXMgaW52YWxpZC5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8zMjI3M1xuICAgIGlmICghaHJlZkF0dHJpYnV0ZSB8fCAhaHJlZkF0dHJpYnV0ZS5pbmNsdWRlcygnIycpICYmICFocmVmQXR0cmlidXRlLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gSnVzdCBpbiBjYXNlIHNvbWUgQ01TIHB1dHMgb3V0IGEgZnVsbCBVUkwgd2l0aCB0aGUgYW5jaG9yIGFwcGVuZGVkXG4gICAgaWYgKGhyZWZBdHRyaWJ1dGUuaW5jbHVkZXMoJyMnKSAmJiAhaHJlZkF0dHJpYnV0ZS5zdGFydHNXaXRoKCcjJykpIHtcbiAgICAgIGhyZWZBdHRyaWJ1dGUgPSBgIyR7aHJlZkF0dHJpYnV0ZS5zcGxpdCgnIycpWzFdfWA7XG4gICAgfVxuICAgIHNlbGVjdG9yID0gaHJlZkF0dHJpYnV0ZSAmJiBocmVmQXR0cmlidXRlICE9PSAnIycgPyBocmVmQXR0cmlidXRlLnRyaW0oKSA6IG51bGw7XG4gIH1cbiAgcmV0dXJuIHNlbGVjdG9yID8gc2VsZWN0b3Iuc3BsaXQoJywnKS5tYXAoc2VsID0+IHBhcnNlU2VsZWN0b3Ioc2VsKSkuam9pbignLCcpIDogbnVsbDtcbn07XG5jb25zdCBTZWxlY3RvckVuZ2luZSA9IHtcbiAgZmluZChzZWxlY3RvciwgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIHJldHVybiBbXS5jb25jYXQoLi4uRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbC5jYWxsKGVsZW1lbnQsIHNlbGVjdG9yKSk7XG4gIH0sXG4gIGZpbmRPbmUoc2VsZWN0b3IsIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3Rvci5jYWxsKGVsZW1lbnQsIHNlbGVjdG9yKTtcbiAgfSxcbiAgY2hpbGRyZW4oZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KC4uLmVsZW1lbnQuY2hpbGRyZW4pLmZpbHRlcihjaGlsZCA9PiBjaGlsZC5tYXRjaGVzKHNlbGVjdG9yKSk7XG4gIH0sXG4gIHBhcmVudHMoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCBwYXJlbnRzID0gW107XG4gICAgbGV0IGFuY2VzdG9yID0gZWxlbWVudC5wYXJlbnROb2RlLmNsb3Nlc3Qoc2VsZWN0b3IpO1xuICAgIHdoaWxlIChhbmNlc3Rvcikge1xuICAgICAgcGFyZW50cy5wdXNoKGFuY2VzdG9yKTtcbiAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50Tm9kZS5jbG9zZXN0KHNlbGVjdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcmVudHM7XG4gIH0sXG4gIHByZXYoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICBsZXQgcHJldmlvdXMgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgd2hpbGUgKHByZXZpb3VzKSB7XG4gICAgICBpZiAocHJldmlvdXMubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgcmV0dXJuIFtwcmV2aW91c107XG4gICAgICB9XG4gICAgICBwcmV2aW91cyA9IHByZXZpb3VzLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfSxcbiAgLy8gVE9ETzogdGhpcyBpcyBub3cgdW51c2VkOyByZW1vdmUgbGF0ZXIgYWxvbmcgd2l0aCBwcmV2KClcbiAgbmV4dChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGxldCBuZXh0ID0gZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgd2hpbGUgKG5leHQpIHtcbiAgICAgIGlmIChuZXh0Lm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBbbmV4dF07XG4gICAgICB9XG4gICAgICBuZXh0ID0gbmV4dC5uZXh0RWxlbWVudFNpYmxpbmc7XG4gICAgfVxuICAgIHJldHVybiBbXTtcbiAgfSxcbiAgZm9jdXNhYmxlQ2hpbGRyZW4oZWxlbWVudCkge1xuICAgIGNvbnN0IGZvY3VzYWJsZXMgPSBbJ2EnLCAnYnV0dG9uJywgJ2lucHV0JywgJ3RleHRhcmVhJywgJ3NlbGVjdCcsICdkZXRhaWxzJywgJ1t0YWJpbmRleF0nLCAnW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl0nXS5tYXAoc2VsZWN0b3IgPT4gYCR7c2VsZWN0b3J9Om5vdChbdGFiaW5kZXhePVwiLVwiXSlgKS5qb2luKCcsJyk7XG4gICAgcmV0dXJuIHRoaXMuZmluZChmb2N1c2FibGVzLCBlbGVtZW50KS5maWx0ZXIoZWwgPT4gIWlzRGlzYWJsZWQoZWwpICYmIGlzVmlzaWJsZShlbCkpO1xuICB9LFxuICBnZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICBjb25zdCBzZWxlY3RvciA9IGdldFNlbGVjdG9yKGVsZW1lbnQpO1xuICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IpID8gc2VsZWN0b3IgOiBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgZ2V0RWxlbWVudEZyb21TZWxlY3RvcihlbGVtZW50KSB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihlbGVtZW50KTtcbiAgICByZXR1cm4gc2VsZWN0b3IgPyBTZWxlY3RvckVuZ2luZS5maW5kT25lKHNlbGVjdG9yKSA6IG51bGw7XG4gIH0sXG4gIGdldE11bHRpcGxlRWxlbWVudHNGcm9tU2VsZWN0b3IoZWxlbWVudCkge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudCk7XG4gICAgcmV0dXJuIHNlbGVjdG9yID8gU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvcikgOiBbXTtcbiAgfVxufTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvY29tcG9uZW50LWZ1bmN0aW9ucy5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IGVuYWJsZURpc21pc3NUcmlnZ2VyID0gKGNvbXBvbmVudCwgbWV0aG9kID0gJ2hpZGUnKSA9PiB7XG4gIGNvbnN0IGNsaWNrRXZlbnQgPSBgY2xpY2suZGlzbWlzcyR7Y29tcG9uZW50LkVWRU5UX0tFWX1gO1xuICBjb25zdCBuYW1lID0gY29tcG9uZW50Lk5BTUU7XG4gIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgY2xpY2tFdmVudCwgYFtkYXRhLWJzLWRpc21pc3M9XCIke25hbWV9XCJdYCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKFsnQScsICdBUkVBJ10uaW5jbHVkZXModGhpcy50YWdOYW1lKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKSB8fCB0aGlzLmNsb3Nlc3QoYC4ke25hbWV9YCk7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBjb21wb25lbnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpO1xuXG4gICAgLy8gTWV0aG9kIGFyZ3VtZW50IGlzIGxlZnQsIGZvciBBbGVydCBhbmQgb25seSwgYXMgaXQgZG9lc24ndCBpbXBsZW1lbnQgdGhlICdoaWRlJyBtZXRob2RcbiAgICBpbnN0YW5jZVttZXRob2RdKCk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGFsZXJ0LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkZiA9ICdhbGVydCc7XG5jb25zdCBEQVRBX0tFWSRhID0gJ2JzLmFsZXJ0JztcbmNvbnN0IEVWRU5UX0tFWSRiID0gYC4ke0RBVEFfS0VZJGF9YDtcbmNvbnN0IEVWRU5UX0NMT1NFID0gYGNsb3NlJHtFVkVOVF9LRVkkYn1gO1xuY29uc3QgRVZFTlRfQ0xPU0VEID0gYGNsb3NlZCR7RVZFTlRfS0VZJGJ9YDtcbmNvbnN0IENMQVNTX05BTUVfRkFERSQ1ID0gJ2ZhZGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDggPSAnc2hvdyc7XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEFsZXJ0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJGY7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgY2xvc2UoKSB7XG4gICAgY29uc3QgY2xvc2VFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMT1NFKTtcbiAgICBpZiAoY2xvc2VFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckOCk7XG4gICAgY29uc3QgaXNBbmltYXRlZCA9IHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSQ1KTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHRoaXMuX2Rlc3Ryb3lFbGVtZW50KCksIHRoaXMuX2VsZW1lbnQsIGlzQW5pbWF0ZWQpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZGVzdHJveUVsZW1lbnQoKSB7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmUoKTtcbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9DTE9TRUQpO1xuICAgIHRoaXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQWxlcnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YVtjb25maWddID09PSB1bmRlZmluZWQgfHwgY29uZmlnLnN0YXJ0c1dpdGgoJ18nKSB8fCBjb25maWcgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXSh0aGlzKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuZW5hYmxlRGlzbWlzc1RyaWdnZXIoQWxlcnQsICdjbG9zZScpO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihBbGVydCk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBidXR0b24uanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSRlID0gJ2J1dHRvbic7XG5jb25zdCBEQVRBX0tFWSQ5ID0gJ2JzLmJ1dHRvbic7XG5jb25zdCBFVkVOVF9LRVkkYSA9IGAuJHtEQVRBX0tFWSQ5fWA7XG5jb25zdCBEQVRBX0FQSV9LRVkkNiA9ICcuZGF0YS1hcGknO1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUkMyA9ICdhY3RpdmUnO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUkNSA9ICdbZGF0YS1icy10b2dnbGU9XCJidXR0b25cIl0nO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNiA9IGBjbGljayR7RVZFTlRfS0VZJGF9JHtEQVRBX0FQSV9LRVkkNn1gO1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBCdXR0b24gZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkZTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUoKSB7XG4gICAgLy8gVG9nZ2xlIGNsYXNzIGFuZCBzeW5jIHRoZSBgYXJpYS1wcmVzc2VkYCBhdHRyaWJ1dGUgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBgLnRvZ2dsZSgpYCBtZXRob2RcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKENMQVNTX05BTUVfQUNUSVZFJDMpKTtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IEJ1dHRvbi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpO1xuICAgICAgaWYgKGNvbmZpZyA9PT0gJ3RvZ2dsZScpIHtcbiAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNiwgU0VMRUNUT1JfREFUQV9UT0dHTEUkNSwgZXZlbnQgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBjb25zdCBidXR0b24gPSBldmVudC50YXJnZXQuY2xvc2VzdChTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ1KTtcbiAgY29uc3QgZGF0YSA9IEJ1dHRvbi5nZXRPckNyZWF0ZUluc3RhbmNlKGJ1dHRvbik7XG4gIGRhdGEudG9nZ2xlKCk7XG59KTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQnV0dG9uKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvc3dpcGUuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSRkID0gJ3N3aXBlJztcbmNvbnN0IEVWRU5UX0tFWSQ5ID0gJy5icy5zd2lwZSc7XG5jb25zdCBFVkVOVF9UT1VDSFNUQVJUID0gYHRvdWNoc3RhcnQke0VWRU5UX0tFWSQ5fWA7XG5jb25zdCBFVkVOVF9UT1VDSE1PVkUgPSBgdG91Y2htb3ZlJHtFVkVOVF9LRVkkOX1gO1xuY29uc3QgRVZFTlRfVE9VQ0hFTkQgPSBgdG91Y2hlbmQke0VWRU5UX0tFWSQ5fWA7XG5jb25zdCBFVkVOVF9QT0lOVEVSRE9XTiA9IGBwb2ludGVyZG93biR7RVZFTlRfS0VZJDl9YDtcbmNvbnN0IEVWRU5UX1BPSU5URVJVUCA9IGBwb2ludGVydXAke0VWRU5UX0tFWSQ5fWA7XG5jb25zdCBQT0lOVEVSX1RZUEVfVE9VQ0ggPSAndG91Y2gnO1xuY29uc3QgUE9JTlRFUl9UWVBFX1BFTiA9ICdwZW4nO1xuY29uc3QgQ0xBU1NfTkFNRV9QT0lOVEVSX0VWRU5UID0gJ3BvaW50ZXItZXZlbnQnO1xuY29uc3QgU1dJUEVfVEhSRVNIT0xEID0gNDA7XG5jb25zdCBEZWZhdWx0JGMgPSB7XG4gIGVuZENhbGxiYWNrOiBudWxsLFxuICBsZWZ0Q2FsbGJhY2s6IG51bGwsXG4gIHJpZ2h0Q2FsbGJhY2s6IG51bGxcbn07XG5jb25zdCBEZWZhdWx0VHlwZSRjID0ge1xuICBlbmRDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gIGxlZnRDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gIHJpZ2h0Q2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBTd2lwZSBleHRlbmRzIENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgaWYgKCFlbGVtZW50IHx8ICFTd2lwZS5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgIHRoaXMuX2RlbHRhWCA9IDA7XG4gICAgdGhpcy5fc3VwcG9ydFBvaW50ZXJFdmVudHMgPSBCb29sZWFuKHdpbmRvdy5Qb2ludGVyRXZlbnQpO1xuICAgIHRoaXMuX2luaXRFdmVudHMoKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JGM7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkYztcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkZDtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBkaXNwb3NlKCkge1xuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZJDkpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfc3RhcnQoZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzKSB7XG4gICAgICB0aGlzLl9kZWx0YVggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFg7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9ldmVudElzUG9pbnRlclBlblRvdWNoKGV2ZW50KSkge1xuICAgICAgdGhpcy5fZGVsdGFYID0gZXZlbnQuY2xpZW50WDtcbiAgICB9XG4gIH1cbiAgX2VuZChldmVudCkge1xuICAgIGlmICh0aGlzLl9ldmVudElzUG9pbnRlclBlblRvdWNoKGV2ZW50KSkge1xuICAgICAgdGhpcy5fZGVsdGFYID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuX2RlbHRhWDtcbiAgICB9XG4gICAgdGhpcy5faGFuZGxlU3dpcGUoKTtcbiAgICBleGVjdXRlKHRoaXMuX2NvbmZpZy5lbmRDYWxsYmFjayk7XG4gIH1cbiAgX21vdmUoZXZlbnQpIHtcbiAgICB0aGlzLl9kZWx0YVggPSBldmVudC50b3VjaGVzICYmIGV2ZW50LnRvdWNoZXMubGVuZ3RoID4gMSA/IDAgOiBldmVudC50b3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLl9kZWx0YVg7XG4gIH1cbiAgX2hhbmRsZVN3aXBlKCkge1xuICAgIGNvbnN0IGFic0RlbHRhWCA9IE1hdGguYWJzKHRoaXMuX2RlbHRhWCk7XG4gICAgaWYgKGFic0RlbHRhWCA8PSBTV0lQRV9USFJFU0hPTEQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZGlyZWN0aW9uID0gYWJzRGVsdGFYIC8gdGhpcy5fZGVsdGFYO1xuICAgIHRoaXMuX2RlbHRhWCA9IDA7XG4gICAgaWYgKCFkaXJlY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXhlY3V0ZShkaXJlY3Rpb24gPiAwID8gdGhpcy5fY29uZmlnLnJpZ2h0Q2FsbGJhY2sgOiB0aGlzLl9jb25maWcubGVmdENhbGxiYWNrKTtcbiAgfVxuICBfaW5pdEV2ZW50cygpIHtcbiAgICBpZiAodGhpcy5fc3VwcG9ydFBvaW50ZXJFdmVudHMpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9QT0lOVEVSRE9XTiwgZXZlbnQgPT4gdGhpcy5fc3RhcnQoZXZlbnQpKTtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9QT0lOVEVSVVAsIGV2ZW50ID0+IHRoaXMuX2VuZChldmVudCkpO1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfUE9JTlRFUl9FVkVOVCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSFNUQVJULCBldmVudCA9PiB0aGlzLl9zdGFydChldmVudCkpO1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1RPVUNITU9WRSwgZXZlbnQgPT4gdGhpcy5fbW92ZShldmVudCkpO1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1RPVUNIRU5ELCBldmVudCA9PiB0aGlzLl9lbmQoZXZlbnQpKTtcbiAgICB9XG4gIH1cbiAgX2V2ZW50SXNQb2ludGVyUGVuVG91Y2goZXZlbnQpIHtcbiAgICByZXR1cm4gdGhpcy5fc3VwcG9ydFBvaW50ZXJFdmVudHMgJiYgKGV2ZW50LnBvaW50ZXJUeXBlID09PSBQT0lOVEVSX1RZUEVfUEVOIHx8IGV2ZW50LnBvaW50ZXJUeXBlID09PSBQT0lOVEVSX1RZUEVfVE9VQ0gpO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBpc1N1cHBvcnRlZCgpIHtcbiAgICByZXR1cm4gJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50IHx8IG5hdmlnYXRvci5tYXhUb3VjaFBvaW50cyA+IDA7XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGNhcm91c2VsLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkYyA9ICdjYXJvdXNlbCc7XG5jb25zdCBEQVRBX0tFWSQ4ID0gJ2JzLmNhcm91c2VsJztcbmNvbnN0IEVWRU5UX0tFWSQ4ID0gYC4ke0RBVEFfS0VZJDh9YDtcbmNvbnN0IERBVEFfQVBJX0tFWSQ1ID0gJy5kYXRhLWFwaSc7XG5jb25zdCBBUlJPV19MRUZUX0tFWSQxID0gJ0Fycm93TGVmdCc7XG5jb25zdCBBUlJPV19SSUdIVF9LRVkkMSA9ICdBcnJvd1JpZ2h0JztcbmNvbnN0IFRPVUNIRVZFTlRfQ09NUEFUX1dBSVQgPSA1MDA7IC8vIFRpbWUgZm9yIG1vdXNlIGNvbXBhdCBldmVudHMgdG8gZmlyZSBhZnRlciB0b3VjaFxuXG5jb25zdCBPUkRFUl9ORVhUID0gJ25leHQnO1xuY29uc3QgT1JERVJfUFJFViA9ICdwcmV2JztcbmNvbnN0IERJUkVDVElPTl9MRUZUID0gJ2xlZnQnO1xuY29uc3QgRElSRUNUSU9OX1JJR0hUID0gJ3JpZ2h0JztcbmNvbnN0IEVWRU5UX1NMSURFID0gYHNsaWRlJHtFVkVOVF9LRVkkOH1gO1xuY29uc3QgRVZFTlRfU0xJRCA9IGBzbGlkJHtFVkVOVF9LRVkkOH1gO1xuY29uc3QgRVZFTlRfS0VZRE9XTiQxID0gYGtleWRvd24ke0VWRU5UX0tFWSQ4fWA7XG5jb25zdCBFVkVOVF9NT1VTRUVOVEVSJDEgPSBgbW91c2VlbnRlciR7RVZFTlRfS0VZJDh9YDtcbmNvbnN0IEVWRU5UX01PVVNFTEVBVkUkMSA9IGBtb3VzZWxlYXZlJHtFVkVOVF9LRVkkOH1gO1xuY29uc3QgRVZFTlRfRFJBR19TVEFSVCA9IGBkcmFnc3RhcnQke0VWRU5UX0tFWSQ4fWA7XG5jb25zdCBFVkVOVF9MT0FEX0RBVEFfQVBJJDMgPSBgbG9hZCR7RVZFTlRfS0VZJDh9JHtEQVRBX0FQSV9LRVkkNX1gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNSA9IGBjbGljayR7RVZFTlRfS0VZJDh9JHtEQVRBX0FQSV9LRVkkNX1gO1xuY29uc3QgQ0xBU1NfTkFNRV9DQVJPVVNFTCA9ICdjYXJvdXNlbCc7XG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSQyID0gJ2FjdGl2ZSc7XG5jb25zdCBDTEFTU19OQU1FX1NMSURFID0gJ3NsaWRlJztcbmNvbnN0IENMQVNTX05BTUVfRU5EID0gJ2Nhcm91c2VsLWl0ZW0tZW5kJztcbmNvbnN0IENMQVNTX05BTUVfU1RBUlQgPSAnY2Fyb3VzZWwtaXRlbS1zdGFydCc7XG5jb25zdCBDTEFTU19OQU1FX05FWFQgPSAnY2Fyb3VzZWwtaXRlbS1uZXh0JztcbmNvbnN0IENMQVNTX05BTUVfUFJFViA9ICdjYXJvdXNlbC1pdGVtLXByZXYnO1xuY29uc3QgU0VMRUNUT1JfQUNUSVZFID0gJy5hY3RpdmUnO1xuY29uc3QgU0VMRUNUT1JfSVRFTSA9ICcuY2Fyb3VzZWwtaXRlbSc7XG5jb25zdCBTRUxFQ1RPUl9BQ1RJVkVfSVRFTSA9IFNFTEVDVE9SX0FDVElWRSArIFNFTEVDVE9SX0lURU07XG5jb25zdCBTRUxFQ1RPUl9JVEVNX0lNRyA9ICcuY2Fyb3VzZWwtaXRlbSBpbWcnO1xuY29uc3QgU0VMRUNUT1JfSU5ESUNBVE9SUyA9ICcuY2Fyb3VzZWwtaW5kaWNhdG9ycyc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1NMSURFID0gJ1tkYXRhLWJzLXNsaWRlXSwgW2RhdGEtYnMtc2xpZGUtdG9dJztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfUklERSA9ICdbZGF0YS1icy1yaWRlPVwiY2Fyb3VzZWxcIl0nO1xuY29uc3QgS0VZX1RPX0RJUkVDVElPTiA9IHtcbiAgW0FSUk9XX0xFRlRfS0VZJDFdOiBESVJFQ1RJT05fUklHSFQsXG4gIFtBUlJPV19SSUdIVF9LRVkkMV06IERJUkVDVElPTl9MRUZUXG59O1xuY29uc3QgRGVmYXVsdCRiID0ge1xuICBpbnRlcnZhbDogNTAwMCxcbiAga2V5Ym9hcmQ6IHRydWUsXG4gIHBhdXNlOiAnaG92ZXInLFxuICByaWRlOiBmYWxzZSxcbiAgdG91Y2g6IHRydWUsXG4gIHdyYXA6IHRydWVcbn07XG5jb25zdCBEZWZhdWx0VHlwZSRiID0ge1xuICBpbnRlcnZhbDogJyhudW1iZXJ8Ym9vbGVhbiknLFxuICAvLyBUT0RPOnY2IHJlbW92ZSBib29sZWFuIHN1cHBvcnRcbiAga2V5Ym9hcmQ6ICdib29sZWFuJyxcbiAgcGF1c2U6ICcoc3RyaW5nfGJvb2xlYW4pJyxcbiAgcmlkZTogJyhib29sZWFufHN0cmluZyknLFxuICB0b3VjaDogJ2Jvb2xlYW4nLFxuICB3cmFwOiAnYm9vbGVhbidcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIENhcm91c2VsIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG4gICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBudWxsO1xuICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlO1xuICAgIHRoaXMudG91Y2hUaW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLl9zd2lwZUhlbHBlciA9IG51bGw7XG4gICAgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0lORElDQVRPUlMsIHRoaXMuX2VsZW1lbnQpO1xuICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKCk7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5yaWRlID09PSBDTEFTU19OQU1FX0NBUk9VU0VMKSB7XG4gICAgICB0aGlzLmN5Y2xlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkYjtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSRiO1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSRjO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIG5leHQoKSB7XG4gICAgdGhpcy5fc2xpZGUoT1JERVJfTkVYVCk7XG4gIH1cbiAgbmV4dFdoZW5WaXNpYmxlKCkge1xuICAgIC8vIEZJWE1FIFRPRE8gdXNlIGBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGVgXG4gICAgLy8gRG9uJ3QgY2FsbCBuZXh0IHdoZW4gdGhlIHBhZ2UgaXNuJ3QgdmlzaWJsZVxuICAgIC8vIG9yIHRoZSBjYXJvdXNlbCBvciBpdHMgcGFyZW50IGlzbid0IHZpc2libGVcbiAgICBpZiAoIWRvY3VtZW50LmhpZGRlbiAmJiBpc1Zpc2libGUodGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIHRoaXMubmV4dCgpO1xuICAgIH1cbiAgfVxuICBwcmV2KCkge1xuICAgIHRoaXMuX3NsaWRlKE9SREVSX1BSRVYpO1xuICB9XG4gIHBhdXNlKCkge1xuICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgIHRyaWdnZXJUcmFuc2l0aW9uRW5kKHRoaXMuX2VsZW1lbnQpO1xuICAgIH1cbiAgICB0aGlzLl9jbGVhckludGVydmFsKCk7XG4gIH1cbiAgY3ljbGUoKSB7XG4gICAgdGhpcy5fY2xlYXJJbnRlcnZhbCgpO1xuICAgIHRoaXMuX3VwZGF0ZUludGVydmFsKCk7XG4gICAgdGhpcy5faW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLm5leHRXaGVuVmlzaWJsZSgpLCB0aGlzLl9jb25maWcuaW50ZXJ2YWwpO1xuICB9XG4gIF9tYXliZUVuYWJsZUN5Y2xlKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLnJpZGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uZSh0aGlzLl9lbGVtZW50LCBFVkVOVF9TTElELCAoKSA9PiB0aGlzLmN5Y2xlKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmN5Y2xlKCk7XG4gIH1cbiAgdG8oaW5kZXgpIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2dldEl0ZW1zKCk7XG4gICAgaWYgKGluZGV4ID4gaXRlbXMubGVuZ3RoIC0gMSB8fCBpbmRleCA8IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uZSh0aGlzLl9lbGVtZW50LCBFVkVOVF9TTElELCAoKSA9PiB0aGlzLnRvKGluZGV4KSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2dldEFjdGl2ZSgpKTtcbiAgICBpZiAoYWN0aXZlSW5kZXggPT09IGluZGV4KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IG9yZGVyID0gaW5kZXggPiBhY3RpdmVJbmRleCA/IE9SREVSX05FWFQgOiBPUkRFUl9QUkVWO1xuICAgIHRoaXMuX3NsaWRlKG9yZGVyLCBpdGVtc1tpbmRleF0pO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgaWYgKHRoaXMuX3N3aXBlSGVscGVyKSB7XG4gICAgICB0aGlzLl9zd2lwZUhlbHBlci5kaXNwb3NlKCk7XG4gICAgfVxuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgY29uZmlnLmRlZmF1bHRJbnRlcnZhbCA9IGNvbmZpZy5pbnRlcnZhbDtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTiQxLCBldmVudCA9PiB0aGlzLl9rZXlkb3duKGV2ZW50KSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb25maWcucGF1c2UgPT09ICdob3ZlcicpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRUVOVEVSJDEsICgpID0+IHRoaXMucGF1c2UoKSk7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VMRUFWRSQxLCAoKSA9PiB0aGlzLl9tYXliZUVuYWJsZUN5Y2xlKCkpO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLnRvdWNoICYmIFN3aXBlLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgIHRoaXMuX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMoKTtcbiAgICB9XG4gIH1cbiAgX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgZm9yIChjb25zdCBpbWcgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9JVEVNX0lNRywgdGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbihpbWcsIEVWRU5UX0RSQUdfU1RBUlQsIGV2ZW50ID0+IGV2ZW50LnByZXZlbnREZWZhdWx0KCkpO1xuICAgIH1cbiAgICBjb25zdCBlbmRDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcucGF1c2UgIT09ICdob3ZlcicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBpdCdzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2UsIG1vdXNlZW50ZXIvbGVhdmUgYXJlIGZpcmVkIGFzXG4gICAgICAvLyBwYXJ0IG9mIHRoZSBtb3VzZSBjb21wYXRpYmlsaXR5IGV2ZW50cyBvbiBmaXJzdCB0YXAgLSB0aGUgY2Fyb3VzZWxcbiAgICAgIC8vIHdvdWxkIHN0b3AgY3ljbGluZyB1bnRpbCB1c2VyIHRhcHBlZCBvdXQgb2YgaXQ7XG4gICAgICAvLyBoZXJlLCB3ZSBsaXN0ZW4gZm9yIHRvdWNoZW5kLCBleHBsaWNpdGx5IHBhdXNlIHRoZSBjYXJvdXNlbFxuICAgICAgLy8gKGFzIGlmIGl0J3MgdGhlIHNlY29uZCB0aW1lIHdlIHRhcCBvbiBpdCwgbW91c2VlbnRlciBjb21wYXQgZXZlbnRcbiAgICAgIC8vIGlzIE5PVCBmaXJlZCkgYW5kIGFmdGVyIGEgdGltZW91dCAodG8gYWxsb3cgZm9yIG1vdXNlIGNvbXBhdGliaWxpdHlcbiAgICAgIC8vIGV2ZW50cyB0byBmaXJlKSB3ZSBleHBsaWNpdGx5IHJlc3RhcnQgY3ljbGluZ1xuXG4gICAgICB0aGlzLnBhdXNlKCk7XG4gICAgICBpZiAodGhpcy50b3VjaFRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudG91Y2hUaW1lb3V0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMudG91Y2hUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLl9tYXliZUVuYWJsZUN5Y2xlKCksIFRPVUNIRVZFTlRfQ09NUEFUX1dBSVQgKyB0aGlzLl9jb25maWcuaW50ZXJ2YWwpO1xuICAgIH07XG4gICAgY29uc3Qgc3dpcGVDb25maWcgPSB7XG4gICAgICBsZWZ0Q2FsbGJhY2s6ICgpID0+IHRoaXMuX3NsaWRlKHRoaXMuX2RpcmVjdGlvblRvT3JkZXIoRElSRUNUSU9OX0xFRlQpKSxcbiAgICAgIHJpZ2h0Q2FsbGJhY2s6ICgpID0+IHRoaXMuX3NsaWRlKHRoaXMuX2RpcmVjdGlvblRvT3JkZXIoRElSRUNUSU9OX1JJR0hUKSksXG4gICAgICBlbmRDYWxsYmFjazogZW5kQ2FsbEJhY2tcbiAgICB9O1xuICAgIHRoaXMuX3N3aXBlSGVscGVyID0gbmV3IFN3aXBlKHRoaXMuX2VsZW1lbnQsIHN3aXBlQ29uZmlnKTtcbiAgfVxuICBfa2V5ZG93bihldmVudCkge1xuICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBkaXJlY3Rpb24gPSBLRVlfVE9fRElSRUNUSU9OW2V2ZW50LmtleV07XG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuX3NsaWRlKHRoaXMuX2RpcmVjdGlvblRvT3JkZXIoZGlyZWN0aW9uKSk7XG4gICAgfVxuICB9XG4gIF9nZXRJdGVtSW5kZXgoZWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRJdGVtcygpLmluZGV4T2YoZWxlbWVudCk7XG4gIH1cbiAgX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQoaW5kZXgpIHtcbiAgICBpZiAoIXRoaXMuX2luZGljYXRvcnNFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZUluZGljYXRvciA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfQUNUSVZFLCB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCk7XG4gICAgYWN0aXZlSW5kaWNhdG9yLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUkMik7XG4gICAgYWN0aXZlSW5kaWNhdG9yLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50Jyk7XG4gICAgY29uc3QgbmV3QWN0aXZlSW5kaWNhdG9yID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShgW2RhdGEtYnMtc2xpZGUtdG89XCIke2luZGV4fVwiXWAsIHRoaXMuX2luZGljYXRvcnNFbGVtZW50KTtcbiAgICBpZiAobmV3QWN0aXZlSW5kaWNhdG9yKSB7XG4gICAgICBuZXdBY3RpdmVJbmRpY2F0b3IuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSQyKTtcbiAgICAgIG5ld0FjdGl2ZUluZGljYXRvci5zZXRBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcsICd0cnVlJyk7XG4gICAgfVxuICB9XG4gIF91cGRhdGVJbnRlcnZhbCgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fYWN0aXZlRWxlbWVudCB8fCB0aGlzLl9nZXRBY3RpdmUoKTtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgZWxlbWVudEludGVydmFsID0gTnVtYmVyLnBhcnNlSW50KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLWludGVydmFsJyksIDEwKTtcbiAgICB0aGlzLl9jb25maWcuaW50ZXJ2YWwgPSBlbGVtZW50SW50ZXJ2YWwgfHwgdGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbDtcbiAgfVxuICBfc2xpZGUob3JkZXIsIGVsZW1lbnQgPSBudWxsKSB7XG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gdGhpcy5fZ2V0QWN0aXZlKCk7XG4gICAgY29uc3QgaXNOZXh0ID0gb3JkZXIgPT09IE9SREVSX05FWFQ7XG4gICAgY29uc3QgbmV4dEVsZW1lbnQgPSBlbGVtZW50IHx8IGdldE5leHRBY3RpdmVFbGVtZW50KHRoaXMuX2dldEl0ZW1zKCksIGFjdGl2ZUVsZW1lbnQsIGlzTmV4dCwgdGhpcy5fY29uZmlnLndyYXApO1xuICAgIGlmIChuZXh0RWxlbWVudCA9PT0gYWN0aXZlRWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBuZXh0RWxlbWVudEluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KG5leHRFbGVtZW50KTtcbiAgICBjb25zdCB0cmlnZ2VyRXZlbnQgPSBldmVudE5hbWUgPT4ge1xuICAgICAgcmV0dXJuIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIGV2ZW50TmFtZSwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiBuZXh0RWxlbWVudCxcbiAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl9vcmRlclRvRGlyZWN0aW9uKG9yZGVyKSxcbiAgICAgICAgZnJvbTogdGhpcy5fZ2V0SXRlbUluZGV4KGFjdGl2ZUVsZW1lbnQpLFxuICAgICAgICB0bzogbmV4dEVsZW1lbnRJbmRleFxuICAgICAgfSk7XG4gICAgfTtcbiAgICBjb25zdCBzbGlkZUV2ZW50ID0gdHJpZ2dlckV2ZW50KEVWRU5UX1NMSURFKTtcbiAgICBpZiAoc2xpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghYWN0aXZlRWxlbWVudCB8fCAhbmV4dEVsZW1lbnQpIHtcbiAgICAgIC8vIFNvbWUgd2VpcmRuZXNzIGlzIGhhcHBlbmluZywgc28gd2UgYmFpbFxuICAgICAgLy8gVE9ETzogY2hhbmdlIHRlc3RzIHRoYXQgdXNlIGVtcHR5IGRpdnMgdG8gYXZvaWQgdGhpcyBjaGVja1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpc0N5Y2xpbmcgPSBCb29sZWFuKHRoaXMuX2ludGVydmFsKTtcbiAgICB0aGlzLnBhdXNlKCk7XG4gICAgdGhpcy5faXNTbGlkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KG5leHRFbGVtZW50SW5kZXgpO1xuICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBuZXh0RWxlbWVudDtcbiAgICBjb25zdCBkaXJlY3Rpb25hbENsYXNzTmFtZSA9IGlzTmV4dCA/IENMQVNTX05BTUVfU1RBUlQgOiBDTEFTU19OQU1FX0VORDtcbiAgICBjb25zdCBvcmRlckNsYXNzTmFtZSA9IGlzTmV4dCA/IENMQVNTX05BTUVfTkVYVCA6IENMQVNTX05BTUVfUFJFVjtcbiAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QuYWRkKG9yZGVyQ2xhc3NOYW1lKTtcbiAgICByZWZsb3cobmV4dEVsZW1lbnQpO1xuICAgIGFjdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChkaXJlY3Rpb25hbENsYXNzTmFtZSk7XG4gICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChkaXJlY3Rpb25hbENsYXNzTmFtZSk7XG4gICAgY29uc3QgY29tcGxldGVDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoZGlyZWN0aW9uYWxDbGFzc05hbWUsIG9yZGVyQ2xhc3NOYW1lKTtcbiAgICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUkMik7XG4gICAgICBhY3RpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUkMiwgb3JkZXJDbGFzc05hbWUsIGRpcmVjdGlvbmFsQ2xhc3NOYW1lKTtcbiAgICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlO1xuICAgICAgdHJpZ2dlckV2ZW50KEVWRU5UX1NMSUQpO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZUNhbGxCYWNrLCBhY3RpdmVFbGVtZW50LCB0aGlzLl9pc0FuaW1hdGVkKCkpO1xuICAgIGlmIChpc0N5Y2xpbmcpIHtcbiAgICAgIHRoaXMuY3ljbGUoKTtcbiAgICB9XG4gIH1cbiAgX2lzQW5pbWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0xJREUpO1xuICB9XG4gIF9nZXRBY3RpdmUoKSB7XG4gICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfQUNUSVZFX0lURU0sIHRoaXMuX2VsZW1lbnQpO1xuICB9XG4gIF9nZXRJdGVtcygpIHtcbiAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9JVEVNLCB0aGlzLl9lbGVtZW50KTtcbiAgfVxuICBfY2xlYXJJbnRlcnZhbCgpIHtcbiAgICBpZiAodGhpcy5faW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpO1xuICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsO1xuICAgIH1cbiAgfVxuICBfZGlyZWN0aW9uVG9PcmRlcihkaXJlY3Rpb24pIHtcbiAgICBpZiAoaXNSVEwoKSkge1xuICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0xFRlQgPyBPUkRFUl9QUkVWIDogT1JERVJfTkVYVDtcbiAgICB9XG4gICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0xFRlQgPyBPUkRFUl9ORVhUIDogT1JERVJfUFJFVjtcbiAgfVxuICBfb3JkZXJUb0RpcmVjdGlvbihvcmRlcikge1xuICAgIGlmIChpc1JUTCgpKSB7XG4gICAgICByZXR1cm4gb3JkZXIgPT09IE9SREVSX1BSRVYgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVDtcbiAgICB9XG4gICAgcmV0dXJuIG9yZGVyID09PSBPUkRFUl9QUkVWID8gRElSRUNUSU9OX1JJR0hUIDogRElSRUNUSU9OX0xFRlQ7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBDYXJvdXNlbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZGF0YS50byhjb25maWcpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSQ1LCBTRUxFQ1RPUl9EQVRBX1NMSURFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKTtcbiAgaWYgKCF0YXJnZXQgfHwgIXRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9DQVJPVVNFTCkpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgY29uc3QgY2Fyb3VzZWwgPSBDYXJvdXNlbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldCk7XG4gIGNvbnN0IHNsaWRlSW5kZXggPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1icy1zbGlkZS10bycpO1xuICBpZiAoc2xpZGVJbmRleCkge1xuICAgIGNhcm91c2VsLnRvKHNsaWRlSW5kZXgpO1xuICAgIGNhcm91c2VsLl9tYXliZUVuYWJsZUN5Y2xlKCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlKHRoaXMsICdzbGlkZScpID09PSAnbmV4dCcpIHtcbiAgICBjYXJvdXNlbC5uZXh0KCk7XG4gICAgY2Fyb3VzZWwuX21heWJlRW5hYmxlQ3ljbGUoKTtcbiAgICByZXR1cm47XG4gIH1cbiAgY2Fyb3VzZWwucHJldigpO1xuICBjYXJvdXNlbC5fbWF5YmVFbmFibGVDeWNsZSgpO1xufSk7XG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJJDMsICgpID0+IHtcbiAgY29uc3QgY2Fyb3VzZWxzID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1JJREUpO1xuICBmb3IgKGNvbnN0IGNhcm91c2VsIG9mIGNhcm91c2Vscykge1xuICAgIENhcm91c2VsLmdldE9yQ3JlYXRlSW5zdGFuY2UoY2Fyb3VzZWwpO1xuICB9XG59KTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQ2Fyb3VzZWwpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgY29sbGFwc2UuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSRiID0gJ2NvbGxhcHNlJztcbmNvbnN0IERBVEFfS0VZJDcgPSAnYnMuY29sbGFwc2UnO1xuY29uc3QgRVZFTlRfS0VZJDcgPSBgLiR7REFUQV9LRVkkN31gO1xuY29uc3QgREFUQV9BUElfS0VZJDQgPSAnLmRhdGEtYXBpJztcbmNvbnN0IEVWRU5UX1NIT1ckNiA9IGBzaG93JHtFVkVOVF9LRVkkN31gO1xuY29uc3QgRVZFTlRfU0hPV04kNiA9IGBzaG93biR7RVZFTlRfS0VZJDd9YDtcbmNvbnN0IEVWRU5UX0hJREUkNiA9IGBoaWRlJHtFVkVOVF9LRVkkN31gO1xuY29uc3QgRVZFTlRfSElEREVOJDYgPSBgaGlkZGVuJHtFVkVOVF9LRVkkN31gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNCA9IGBjbGljayR7RVZFTlRfS0VZJDd9JHtEQVRBX0FQSV9LRVkkNH1gO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDcgPSAnc2hvdyc7XG5jb25zdCBDTEFTU19OQU1FX0NPTExBUFNFID0gJ2NvbGxhcHNlJztcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0lORyA9ICdjb2xsYXBzaW5nJztcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0VEID0gJ2NvbGxhcHNlZCc7XG5jb25zdCBDTEFTU19OQU1FX0RFRVBFUl9DSElMRFJFTiA9IGA6c2NvcGUgLiR7Q0xBU1NfTkFNRV9DT0xMQVBTRX0gLiR7Q0xBU1NfTkFNRV9DT0xMQVBTRX1gO1xuY29uc3QgQ0xBU1NfTkFNRV9IT1JJWk9OVEFMID0gJ2NvbGxhcHNlLWhvcml6b250YWwnO1xuY29uc3QgV0lEVEggPSAnd2lkdGgnO1xuY29uc3QgSEVJR0hUID0gJ2hlaWdodCc7XG5jb25zdCBTRUxFQ1RPUl9BQ1RJVkVTID0gJy5jb2xsYXBzZS5zaG93LCAuY29sbGFwc2UuY29sbGFwc2luZyc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ0ID0gJ1tkYXRhLWJzLXRvZ2dsZT1cImNvbGxhcHNlXCJdJztcbmNvbnN0IERlZmF1bHQkYSA9IHtcbiAgcGFyZW50OiBudWxsLFxuICB0b2dnbGU6IHRydWVcbn07XG5jb25zdCBEZWZhdWx0VHlwZSRhID0ge1xuICBwYXJlbnQ6ICcobnVsbHxlbGVtZW50KScsXG4gIHRvZ2dsZTogJ2Jvb2xlYW4nXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBDb2xsYXBzZSBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3RyaWdnZXJBcnJheSA9IFtdO1xuICAgIGNvbnN0IHRvZ2dsZUxpc3QgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfVE9HR0xFJDQpO1xuICAgIGZvciAoY29uc3QgZWxlbSBvZiB0b2dnbGVMaXN0KSB7XG4gICAgICBjb25zdCBzZWxlY3RvciA9IFNlbGVjdG9yRW5naW5lLmdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZWxlbSk7XG4gICAgICBjb25zdCBmaWx0ZXJFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvcikuZmlsdGVyKGZvdW5kRWxlbWVudCA9PiBmb3VuZEVsZW1lbnQgPT09IHRoaXMuX2VsZW1lbnQpO1xuICAgICAgaWYgKHNlbGVjdG9yICE9PSBudWxsICYmIGZpbHRlckVsZW1lbnQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJBcnJheS5wdXNoKGVsZW0pO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9pbml0aWFsaXplQ2hpbGRyZW4oKTtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5wYXJlbnQpIHtcbiAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLl90cmlnZ2VyQXJyYXksIHRoaXMuX2lzU2hvd24oKSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9jb25maWcudG9nZ2xlKSB7XG4gICAgICB0aGlzLnRvZ2dsZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JGE7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkYTtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkYjtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvdygpO1xuICAgIH1cbiAgfVxuICBzaG93KCkge1xuICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25pbmcgfHwgdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCBhY3RpdmVDaGlsZHJlbiA9IFtdO1xuXG4gICAgLy8gZmluZCBhY3RpdmUgY2hpbGRyZW5cbiAgICBpZiAodGhpcy5fY29uZmlnLnBhcmVudCkge1xuICAgICAgYWN0aXZlQ2hpbGRyZW4gPSB0aGlzLl9nZXRGaXJzdExldmVsQ2hpbGRyZW4oU0VMRUNUT1JfQUNUSVZFUykuZmlsdGVyKGVsZW1lbnQgPT4gZWxlbWVudCAhPT0gdGhpcy5fZWxlbWVudCkubWFwKGVsZW1lbnQgPT4gQ29sbGFwc2UuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50LCB7XG4gICAgICAgIHRvZ2dsZTogZmFsc2VcbiAgICAgIH0pKTtcbiAgICB9XG4gICAgaWYgKGFjdGl2ZUNoaWxkcmVuLmxlbmd0aCAmJiBhY3RpdmVDaGlsZHJlblswXS5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHN0YXJ0RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XJDYpO1xuICAgIGlmIChzdGFydEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBhY3RpdmVJbnN0YW5jZSBvZiBhY3RpdmVDaGlsZHJlbikge1xuICAgICAgYWN0aXZlSW5zdGFuY2UuaGlkZSgpO1xuICAgIH1cbiAgICBjb25zdCBkaW1lbnNpb24gPSB0aGlzLl9nZXREaW1lbnNpb24oKTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTRSk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQ09MTEFQU0lORyk7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gMDtcbiAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fdHJpZ2dlckFycmF5LCB0cnVlKTtcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlO1xuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNFLCBDTEFTU19OQU1FX1NIT1ckNyk7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAnJztcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOJDYpO1xuICAgIH07XG4gICAgY29uc3QgY2FwaXRhbGl6ZWREaW1lbnNpb24gPSBkaW1lbnNpb25bMF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSgxKTtcbiAgICBjb25zdCBzY3JvbGxTaXplID0gYHNjcm9sbCR7Y2FwaXRhbGl6ZWREaW1lbnNpb259YDtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLl9lbGVtZW50LCB0cnVlKTtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSBgJHt0aGlzLl9lbGVtZW50W3Njcm9sbFNpemVdfXB4YDtcbiAgfVxuICBoaWRlKCkge1xuICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25pbmcgfHwgIXRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzdGFydEV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSQ2KTtcbiAgICBpZiAoc3RhcnRFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGRpbWVuc2lvbiA9IHRoaXMuX2dldERpbWVuc2lvbigpO1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9IGAke3RoaXMuX2VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClbZGltZW5zaW9uXX1weGA7XG4gICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNJTkcpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNFLCBDTEFTU19OQU1FX1NIT1ckNyk7XG4gICAgZm9yIChjb25zdCB0cmlnZ2VyIG9mIHRoaXMuX3RyaWdnZXJBcnJheSkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodHJpZ2dlcik7XG4gICAgICBpZiAoZWxlbWVudCAmJiAhdGhpcy5faXNTaG93bihlbGVtZW50KSkge1xuICAgICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoW3RyaWdnZXJdLCBmYWxzZSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWU7XG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNJTkcpO1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQ09MTEFQU0UpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOJDYpO1xuICAgIH07XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gJyc7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdHJ1ZSk7XG4gIH1cbiAgX2lzU2hvd24oZWxlbWVudCA9IHRoaXMuX2VsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TSE9XJDcpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICBjb25maWcudG9nZ2xlID0gQm9vbGVhbihjb25maWcudG9nZ2xlKTsgLy8gQ29lcmNlIHN0cmluZyB2YWx1ZXNcbiAgICBjb25maWcucGFyZW50ID0gZ2V0RWxlbWVudChjb25maWcucGFyZW50KTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9nZXREaW1lbnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfSE9SSVpPTlRBTCkgPyBXSURUSCA6IEhFSUdIVDtcbiAgfVxuICBfaW5pdGlhbGl6ZUNoaWxkcmVuKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLnBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuX2dldEZpcnN0TGV2ZWxDaGlsZHJlbihTRUxFQ1RPUl9EQVRBX1RPR0dMRSQ0KTtcbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3RvcihlbGVtZW50KTtcbiAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoW2VsZW1lbnRdLCB0aGlzLl9pc1Nob3duKHNlbGVjdGVkKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIF9nZXRGaXJzdExldmVsQ2hpbGRyZW4oc2VsZWN0b3IpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmQoQ0xBU1NfTkFNRV9ERUVQRVJfQ0hJTERSRU4sIHRoaXMuX2NvbmZpZy5wYXJlbnQpO1xuICAgIC8vIHJlbW92ZSBjaGlsZHJlbiBpZiBncmVhdGVyIGRlcHRoXG4gICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IsIHRoaXMuX2NvbmZpZy5wYXJlbnQpLmZpbHRlcihlbGVtZW50ID0+ICFjaGlsZHJlbi5pbmNsdWRlcyhlbGVtZW50KSk7XG4gIH1cbiAgX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0cmlnZ2VyQXJyYXksIGlzT3Blbikge1xuICAgIGlmICghdHJpZ2dlckFycmF5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdHJpZ2dlckFycmF5KSB7XG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoQ0xBU1NfTkFNRV9DT0xMQVBTRUQsICFpc09wZW4pO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCBpc09wZW4pO1xuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIGNvbnN0IF9jb25maWcgPSB7fTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycgJiYgL3Nob3d8aGlkZS8udGVzdChjb25maWcpKSB7XG4gICAgICBfY29uZmlnLnRvZ2dsZSA9IGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBDb2xsYXBzZS5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIF9jb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YVtjb25maWddKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkNCwgU0VMRUNUT1JfREFUQV9UT0dHTEUkNCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIC8vIHByZXZlbnREZWZhdWx0IG9ubHkgZm9yIDxhPiBlbGVtZW50cyAod2hpY2ggY2hhbmdlIHRoZSBVUkwpIG5vdCBpbnNpZGUgdGhlIGNvbGxhcHNpYmxlIGVsZW1lbnRcbiAgaWYgKGV2ZW50LnRhcmdldC50YWdOYW1lID09PSAnQScgfHwgZXZlbnQuZGVsZWdhdGVUYXJnZXQgJiYgZXZlbnQuZGVsZWdhdGVUYXJnZXQudGFnTmFtZSA9PT0gJ0EnKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgU2VsZWN0b3JFbmdpbmUuZ2V0TXVsdGlwbGVFbGVtZW50c0Zyb21TZWxlY3Rvcih0aGlzKSkge1xuICAgIENvbGxhcHNlLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCwge1xuICAgICAgdG9nZ2xlOiBmYWxzZVxuICAgIH0pLnRvZ2dsZSgpO1xuICB9XG59KTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQ29sbGFwc2UpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgZHJvcGRvd24uanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSRhID0gJ2Ryb3Bkb3duJztcbmNvbnN0IERBVEFfS0VZJDYgPSAnYnMuZHJvcGRvd24nO1xuY29uc3QgRVZFTlRfS0VZJDYgPSBgLiR7REFUQV9LRVkkNn1gO1xuY29uc3QgREFUQV9BUElfS0VZJDMgPSAnLmRhdGEtYXBpJztcbmNvbnN0IEVTQ0FQRV9LRVkkMiA9ICdFc2NhcGUnO1xuY29uc3QgVEFCX0tFWSQxID0gJ1RhYic7XG5jb25zdCBBUlJPV19VUF9LRVkkMSA9ICdBcnJvd1VwJztcbmNvbnN0IEFSUk9XX0RPV05fS0VZJDEgPSAnQXJyb3dEb3duJztcbmNvbnN0IFJJR0hUX01PVVNFX0JVVFRPTiA9IDI7IC8vIE1vdXNlRXZlbnQuYnV0dG9uIHZhbHVlIGZvciB0aGUgc2Vjb25kYXJ5IGJ1dHRvbiwgdXN1YWxseSB0aGUgcmlnaHQgYnV0dG9uXG5cbmNvbnN0IEVWRU5UX0hJREUkNSA9IGBoaWRlJHtFVkVOVF9LRVkkNn1gO1xuY29uc3QgRVZFTlRfSElEREVOJDUgPSBgaGlkZGVuJHtFVkVOVF9LRVkkNn1gO1xuY29uc3QgRVZFTlRfU0hPVyQ1ID0gYHNob3cke0VWRU5UX0tFWSQ2fWA7XG5jb25zdCBFVkVOVF9TSE9XTiQ1ID0gYHNob3duJHtFVkVOVF9LRVkkNn1gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMyA9IGBjbGljayR7RVZFTlRfS0VZJDZ9JHtEQVRBX0FQSV9LRVkkM31gO1xuY29uc3QgRVZFTlRfS0VZRE9XTl9EQVRBX0FQSSA9IGBrZXlkb3duJHtFVkVOVF9LRVkkNn0ke0RBVEFfQVBJX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9LRVlVUF9EQVRBX0FQSSA9IGBrZXl1cCR7RVZFTlRfS0VZJDZ9JHtEQVRBX0FQSV9LRVkkM31gO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDYgPSAnc2hvdyc7XG5jb25zdCBDTEFTU19OQU1FX0RST1BVUCA9ICdkcm9wdXAnO1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QRU5EID0gJ2Ryb3BlbmQnO1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QU1RBUlQgPSAnZHJvcHN0YXJ0JztcbmNvbnN0IENMQVNTX05BTUVfRFJPUFVQX0NFTlRFUiA9ICdkcm9wdXAtY2VudGVyJztcbmNvbnN0IENMQVNTX05BTUVfRFJPUERPV05fQ0VOVEVSID0gJ2Ryb3Bkb3duLWNlbnRlcic7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzID0gJ1tkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCJdOm5vdCguZGlzYWJsZWQpOm5vdCg6ZGlzYWJsZWQpJztcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFX1NIT1dOID0gYCR7U0VMRUNUT1JfREFUQV9UT0dHTEUkM30uJHtDTEFTU19OQU1FX1NIT1ckNn1gO1xuY29uc3QgU0VMRUNUT1JfTUVOVSA9ICcuZHJvcGRvd24tbWVudSc7XG5jb25zdCBTRUxFQ1RPUl9OQVZCQVIgPSAnLm5hdmJhcic7XG5jb25zdCBTRUxFQ1RPUl9OQVZCQVJfTkFWID0gJy5uYXZiYXItbmF2JztcbmNvbnN0IFNFTEVDVE9SX1ZJU0lCTEVfSVRFTVMgPSAnLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06bm90KC5kaXNhYmxlZCk6bm90KDpkaXNhYmxlZCknO1xuY29uc3QgUExBQ0VNRU5UX1RPUCA9IGlzUlRMKCkgPyAndG9wLWVuZCcgOiAndG9wLXN0YXJ0JztcbmNvbnN0IFBMQUNFTUVOVF9UT1BFTkQgPSBpc1JUTCgpID8gJ3RvcC1zdGFydCcgOiAndG9wLWVuZCc7XG5jb25zdCBQTEFDRU1FTlRfQk9UVE9NID0gaXNSVEwoKSA/ICdib3R0b20tZW5kJyA6ICdib3R0b20tc3RhcnQnO1xuY29uc3QgUExBQ0VNRU5UX0JPVFRPTUVORCA9IGlzUlRMKCkgPyAnYm90dG9tLXN0YXJ0JyA6ICdib3R0b20tZW5kJztcbmNvbnN0IFBMQUNFTUVOVF9SSUdIVCA9IGlzUlRMKCkgPyAnbGVmdC1zdGFydCcgOiAncmlnaHQtc3RhcnQnO1xuY29uc3QgUExBQ0VNRU5UX0xFRlQgPSBpc1JUTCgpID8gJ3JpZ2h0LXN0YXJ0JyA6ICdsZWZ0LXN0YXJ0JztcbmNvbnN0IFBMQUNFTUVOVF9UT1BDRU5URVIgPSAndG9wJztcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT01DRU5URVIgPSAnYm90dG9tJztcbmNvbnN0IERlZmF1bHQkOSA9IHtcbiAgYXV0b0Nsb3NlOiB0cnVlLFxuICBib3VuZGFyeTogJ2NsaXBwaW5nUGFyZW50cycsXG4gIGRpc3BsYXk6ICdkeW5hbWljJyxcbiAgb2Zmc2V0OiBbMCwgMl0sXG4gIHBvcHBlckNvbmZpZzogbnVsbCxcbiAgcmVmZXJlbmNlOiAndG9nZ2xlJ1xufTtcbmNvbnN0IERlZmF1bHRUeXBlJDkgPSB7XG4gIGF1dG9DbG9zZTogJyhib29sZWFufHN0cmluZyknLFxuICBib3VuZGFyeTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICBkaXNwbGF5OiAnc3RyaW5nJyxcbiAgb2Zmc2V0OiAnKGFycmF5fHN0cmluZ3xmdW5jdGlvbiknLFxuICBwb3BwZXJDb25maWc6ICcobnVsbHxvYmplY3R8ZnVuY3Rpb24pJyxcbiAgcmVmZXJlbmNlOiAnKHN0cmluZ3xlbGVtZW50fG9iamVjdCknXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBEcm9wZG93biBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuICAgIHRoaXMuX3BvcHBlciA9IG51bGw7XG4gICAgdGhpcy5fcGFyZW50ID0gdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlOyAvLyBkcm9wZG93biB3cmFwcGVyXG4gICAgLy8gVE9ETzogdjYgcmV2ZXJ0ICMzNzAxMSAmIGNoYW5nZSBtYXJrdXAgaHR0cHM6Ly9nZXRib290c3RyYXAuY29tL2RvY3MvNS4zL2Zvcm1zL2lucHV0LWdyb3VwL1xuICAgIHRoaXMuX21lbnUgPSBTZWxlY3RvckVuZ2luZS5uZXh0KHRoaXMuX2VsZW1lbnQsIFNFTEVDVE9SX01FTlUpWzBdIHx8IFNlbGVjdG9yRW5naW5lLnByZXYodGhpcy5fZWxlbWVudCwgU0VMRUNUT1JfTUVOVSlbMF0gfHwgU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9NRU5VLCB0aGlzLl9wYXJlbnQpO1xuICAgIHRoaXMuX2luTmF2YmFyID0gdGhpcy5fZGV0ZWN0TmF2YmFyKCk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQ5O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDk7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJGE7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duKCkgPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdygpO1xuICB9XG4gIHNob3coKSB7XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcy5fZWxlbWVudCkgfHwgdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiB0aGlzLl9lbGVtZW50XG4gICAgfTtcbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XJDUsIHJlbGF0ZWRUYXJnZXQpO1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9jcmVhdGVQb3BwZXIoKTtcblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSBhZGQgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHRvIHRoZSBib2R5J3MgaW1tZWRpYXRlIGNoaWxkcmVuO1xuICAgIC8vIG9ubHkgbmVlZGVkIGJlY2F1c2Ugb2YgYnJva2VuIGV2ZW50IGRlbGVnYXRpb24gb24gaU9TXG4gICAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDE0LzAyL21vdXNlX2V2ZW50X2J1Yi5odG1sXG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiAhdGhpcy5fcGFyZW50LmNsb3Nlc3QoU0VMRUNUT1JfTkFWQkFSX05BVikpIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKGVsZW1lbnQsICdtb3VzZW92ZXInLCBub29wKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudC5mb2N1cygpO1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSk7XG4gICAgdGhpcy5fbWVudS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQ2KTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDYpO1xuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOJDUsIHJlbGF0ZWRUYXJnZXQpO1xuICB9XG4gIGhpZGUoKSB7XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcy5fZWxlbWVudCkgfHwgIXRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgIH07XG4gICAgdGhpcy5fY29tcGxldGVIaWRlKHJlbGF0ZWRUYXJnZXQpO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKTtcbiAgICB9XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICB9XG4gIHVwZGF0ZSgpIHtcbiAgICB0aGlzLl9pbk5hdmJhciA9IHRoaXMuX2RldGVjdE5hdmJhcigpO1xuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci51cGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9jb21wbGV0ZUhpZGUocmVsYXRlZFRhcmdldCkge1xuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUkNSwgcmVsYXRlZFRhcmdldCk7XG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIHJlbW92ZSB0aGUgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHdlIGFkZGVkIGZvciBpT1Mgc3VwcG9ydFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCAnbW91c2VvdmVyJywgbm9vcCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KCk7XG4gICAgfVxuICAgIHRoaXMuX21lbnUuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckNik7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVyQ2KTtcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpO1xuICAgIE1hbmlwdWxhdG9yLnJlbW92ZURhdGFBdHRyaWJ1dGUodGhpcy5fbWVudSwgJ3BvcHBlcicpO1xuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTiQ1LCByZWxhdGVkVGFyZ2V0KTtcbiAgfVxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHN1cGVyLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWZlcmVuY2UgPT09ICdvYmplY3QnICYmICFpc0VsZW1lbnQoY29uZmlnLnJlZmVyZW5jZSkgJiYgdHlwZW9mIGNvbmZpZy5yZWZlcmVuY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBQb3BwZXIgdmlydHVhbCBlbGVtZW50cyByZXF1aXJlIGEgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG1ldGhvZFxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtOQU1FJGEudG9VcHBlckNhc2UoKX06IE9wdGlvbiBcInJlZmVyZW5jZVwiIHByb3ZpZGVkIHR5cGUgXCJvYmplY3RcIiB3aXRob3V0IGEgcmVxdWlyZWQgXCJnZXRCb3VuZGluZ0NsaWVudFJlY3RcIiBtZXRob2QuYCk7XG4gICAgfVxuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2NyZWF0ZVBvcHBlcigpIHtcbiAgICBpZiAodHlwZW9mIFBvcHBlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Jvb3RzdHJhcFxcJ3MgZHJvcGRvd25zIHJlcXVpcmUgUG9wcGVyIChodHRwczovL3BvcHBlci5qcy5vcmcpJyk7XG4gICAgfVxuICAgIGxldCByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fZWxlbWVudDtcbiAgICBpZiAodGhpcy5fY29uZmlnLnJlZmVyZW5jZSA9PT0gJ3BhcmVudCcpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9wYXJlbnQ7XG4gICAgfSBlbHNlIGlmIChpc0VsZW1lbnQodGhpcy5fY29uZmlnLnJlZmVyZW5jZSkpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSBnZXRFbGVtZW50KHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UgPT09ICdvYmplY3QnKSB7XG4gICAgICByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fY29uZmlnLnJlZmVyZW5jZTtcbiAgICB9XG4gICAgY29uc3QgcG9wcGVyQ29uZmlnID0gdGhpcy5fZ2V0UG9wcGVyQ29uZmlnKCk7XG4gICAgdGhpcy5fcG9wcGVyID0gUG9wcGVyLmNyZWF0ZVBvcHBlcihyZWZlcmVuY2VFbGVtZW50LCB0aGlzLl9tZW51LCBwb3BwZXJDb25maWcpO1xuICB9XG4gIF9pc1Nob3duKCkge1xuICAgIHJldHVybiB0aGlzLl9tZW51LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1ckNik7XG4gIH1cbiAgX2dldFBsYWNlbWVudCgpIHtcbiAgICBjb25zdCBwYXJlbnREcm9wZG93biA9IHRoaXMuX3BhcmVudDtcbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUEVORCkpIHtcbiAgICAgIHJldHVybiBQTEFDRU1FTlRfUklHSFQ7XG4gICAgfVxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QU1RBUlQpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX0xFRlQ7XG4gICAgfVxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QVVBfQ0VOVEVSKSkge1xuICAgICAgcmV0dXJuIFBMQUNFTUVOVF9UT1BDRU5URVI7XG4gICAgfVxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QRE9XTl9DRU5URVIpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX0JPVFRPTUNFTlRFUjtcbiAgICB9XG5cbiAgICAvLyBXZSBuZWVkIHRvIHRyaW0gdGhlIHZhbHVlIGJlY2F1c2UgY3VzdG9tIHByb3BlcnRpZXMgY2FuIGFsc28gaW5jbHVkZSBzcGFjZXNcbiAgICBjb25zdCBpc0VuZCA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5fbWVudSkuZ2V0UHJvcGVydHlWYWx1ZSgnLS1icy1wb3NpdGlvbicpLnRyaW0oKSA9PT0gJ2VuZCc7XG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BVUCkpIHtcbiAgICAgIHJldHVybiBpc0VuZCA/IFBMQUNFTUVOVF9UT1BFTkQgOiBQTEFDRU1FTlRfVE9QO1xuICAgIH1cbiAgICByZXR1cm4gaXNFbmQgPyBQTEFDRU1FTlRfQk9UVE9NRU5EIDogUExBQ0VNRU5UX0JPVFRPTTtcbiAgfVxuICBfZGV0ZWN0TmF2YmFyKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTkFWQkFSKSAhPT0gbnVsbDtcbiAgfVxuICBfZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHtcbiAgICAgIG9mZnNldFxuICAgIH0gPSB0aGlzLl9jb25maWc7XG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gb2Zmc2V0LnNwbGl0KCcsJykubWFwKHZhbHVlID0+IE51bWJlci5wYXJzZUludCh2YWx1ZSwgMTApKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBwb3BwZXJEYXRhID0+IG9mZnNldChwb3BwZXJEYXRhLCB0aGlzLl9lbGVtZW50KTtcbiAgICB9XG4gICAgcmV0dXJuIG9mZnNldDtcbiAgfVxuICBfZ2V0UG9wcGVyQ29uZmlnKCkge1xuICAgIGNvbnN0IGRlZmF1bHRCc1BvcHBlckNvbmZpZyA9IHtcbiAgICAgIHBsYWNlbWVudDogdGhpcy5fZ2V0UGxhY2VtZW50KCksXG4gICAgICBtb2RpZmllcnM6IFt7XG4gICAgICAgIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgYm91bmRhcnk6IHRoaXMuX2NvbmZpZy5ib3VuZGFyeVxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgb2Zmc2V0OiB0aGlzLl9nZXRPZmZzZXQoKVxuICAgICAgICB9XG4gICAgICB9XVxuICAgIH07XG5cbiAgICAvLyBEaXNhYmxlIFBvcHBlciBpZiB3ZSBoYXZlIGEgc3RhdGljIGRpc3BsYXkgb3IgRHJvcGRvd24gaXMgaW4gTmF2YmFyXG4gICAgaWYgKHRoaXMuX2luTmF2YmFyIHx8IHRoaXMuX2NvbmZpZy5kaXNwbGF5ID09PSAnc3RhdGljJykge1xuICAgICAgTWFuaXB1bGF0b3Iuc2V0RGF0YUF0dHJpYnV0ZSh0aGlzLl9tZW51LCAncG9wcGVyJywgJ3N0YXRpYycpOyAvLyBUT0RPOiB2NiByZW1vdmVcbiAgICAgIGRlZmF1bHRCc1BvcHBlckNvbmZpZy5tb2RpZmllcnMgPSBbe1xuICAgICAgICBuYW1lOiAnYXBwbHlTdHlsZXMnLFxuICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgfV07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWZhdWx0QnNQb3BwZXJDb25maWcsXG4gICAgICAuLi5leGVjdXRlKHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcsIFtkZWZhdWx0QnNQb3BwZXJDb25maWddKVxuICAgIH07XG4gIH1cbiAgX3NlbGVjdE1lbnVJdGVtKHtcbiAgICBrZXksXG4gICAgdGFyZ2V0XG4gIH0pIHtcbiAgICBjb25zdCBpdGVtcyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfVklTSUJMRV9JVEVNUywgdGhpcy5fbWVudSkuZmlsdGVyKGVsZW1lbnQgPT4gaXNWaXNpYmxlKGVsZW1lbnQpKTtcbiAgICBpZiAoIWl0ZW1zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGlmIHRhcmdldCBpc24ndCBpbmNsdWRlZCBpbiBpdGVtcyAoZS5nLiB3aGVuIGV4cGFuZGluZyB0aGUgZHJvcGRvd24pXG4gICAgLy8gYWxsb3cgY3ljbGluZyB0byBnZXQgdGhlIGxhc3QgaXRlbSBpbiBjYXNlIGtleSBlcXVhbHMgQVJST1dfVVBfS0VZXG4gICAgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQoaXRlbXMsIHRhcmdldCwga2V5ID09PSBBUlJPV19ET1dOX0tFWSQxLCAhaXRlbXMuaW5jbHVkZXModGFyZ2V0KSkuZm9jdXMoKTtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IERyb3Bkb3duLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgIH0pO1xuICB9XG4gIHN0YXRpYyBjbGVhck1lbnVzKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmJ1dHRvbiA9PT0gUklHSFRfTU9VU0VfQlVUVE9OIHx8IGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgZXZlbnQua2V5ICE9PSBUQUJfS0VZJDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgb3BlblRvZ2dsZXMgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfVE9HR0xFX1NIT1dOKTtcbiAgICBmb3IgKGNvbnN0IHRvZ2dsZSBvZiBvcGVuVG9nZ2xlcykge1xuICAgICAgY29uc3QgY29udGV4dCA9IERyb3Bkb3duLmdldEluc3RhbmNlKHRvZ2dsZSk7XG4gICAgICBpZiAoIWNvbnRleHQgfHwgY29udGV4dC5fY29uZmlnLmF1dG9DbG9zZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBjb21wb3NlZFBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcbiAgICAgIGNvbnN0IGlzTWVudVRhcmdldCA9IGNvbXBvc2VkUGF0aC5pbmNsdWRlcyhjb250ZXh0Ll9tZW51KTtcbiAgICAgIGlmIChjb21wb3NlZFBhdGguaW5jbHVkZXMoY29udGV4dC5fZWxlbWVudCkgfHwgY29udGV4dC5fY29uZmlnLmF1dG9DbG9zZSA9PT0gJ2luc2lkZScgJiYgIWlzTWVudVRhcmdldCB8fCBjb250ZXh0Ll9jb25maWcuYXV0b0Nsb3NlID09PSAnb3V0c2lkZScgJiYgaXNNZW51VGFyZ2V0KSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBUYWIgbmF2aWdhdGlvbiB0aHJvdWdoIHRoZSBkcm9wZG93biBtZW51IG9yIGV2ZW50cyBmcm9tIGNvbnRhaW5lZCBpbnB1dHMgc2hvdWxkbid0IGNsb3NlIHRoZSBtZW51XG4gICAgICBpZiAoY29udGV4dC5fbWVudS5jb250YWlucyhldmVudC50YXJnZXQpICYmIChldmVudC50eXBlID09PSAna2V5dXAnICYmIGV2ZW50LmtleSA9PT0gVEFCX0tFWSQxIHx8IC9pbnB1dHxzZWxlY3R8b3B0aW9ufHRleHRhcmVhfGZvcm0vaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSkpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiBjb250ZXh0Ll9lbGVtZW50XG4gICAgICB9O1xuICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdjbGljaycpIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldC5jbGlja0V2ZW50ID0gZXZlbnQ7XG4gICAgICB9XG4gICAgICBjb250ZXh0Ll9jb21wbGV0ZUhpZGUocmVsYXRlZFRhcmdldCk7XG4gICAgfVxuICB9XG4gIHN0YXRpYyBkYXRhQXBpS2V5ZG93bkhhbmRsZXIoZXZlbnQpIHtcbiAgICAvLyBJZiBub3QgYW4gVVAgfCBET1dOIHwgRVNDQVBFIGtleSA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG4gICAgLy8gSWYgaW5wdXQvdGV4dGFyZWEgJiYgaWYga2V5IGlzIG90aGVyIHRoYW4gRVNDQVBFID0+IG5vdCBhIGRyb3Bkb3duIGNvbW1hbmRcblxuICAgIGNvbnN0IGlzSW5wdXQgPSAvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKTtcbiAgICBjb25zdCBpc0VzY2FwZUV2ZW50ID0gZXZlbnQua2V5ID09PSBFU0NBUEVfS0VZJDI7XG4gICAgY29uc3QgaXNVcE9yRG93bkV2ZW50ID0gW0FSUk9XX1VQX0tFWSQxLCBBUlJPV19ET1dOX0tFWSQxXS5pbmNsdWRlcyhldmVudC5rZXkpO1xuICAgIGlmICghaXNVcE9yRG93bkV2ZW50ICYmICFpc0VzY2FwZUV2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChpc0lucHV0ICYmICFpc0VzY2FwZUV2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAvLyBUT0RPOiB2NiByZXZlcnQgIzM3MDExICYgY2hhbmdlIG1hcmt1cCBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy81LjMvZm9ybXMvaW5wdXQtZ3JvdXAvXG4gICAgY29uc3QgZ2V0VG9nZ2xlQnV0dG9uID0gdGhpcy5tYXRjaGVzKFNFTEVDVE9SX0RBVEFfVE9HR0xFJDMpID8gdGhpcyA6IFNlbGVjdG9yRW5naW5lLnByZXYodGhpcywgU0VMRUNUT1JfREFUQV9UT0dHTEUkMylbMF0gfHwgU2VsZWN0b3JFbmdpbmUubmV4dCh0aGlzLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQzKVswXSB8fCBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RBVEFfVE9HR0xFJDMsIGV2ZW50LmRlbGVnYXRlVGFyZ2V0LnBhcmVudE5vZGUpO1xuICAgIGNvbnN0IGluc3RhbmNlID0gRHJvcGRvd24uZ2V0T3JDcmVhdGVJbnN0YW5jZShnZXRUb2dnbGVCdXR0b24pO1xuICAgIGlmIChpc1VwT3JEb3duRXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaW5zdGFuY2Uuc2hvdygpO1xuICAgICAgaW5zdGFuY2UuX3NlbGVjdE1lbnVJdGVtKGV2ZW50KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGluc3RhbmNlLl9pc1Nob3duKCkpIHtcbiAgICAgIC8vIGVsc2UgaXMgZXNjYXBlIGFuZCB3ZSBjaGVjayBpZiBpdCBpcyBzaG93blxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICBpbnN0YW5jZS5oaWRlKCk7XG4gICAgICBnZXRUb2dnbGVCdXR0b24uZm9jdXMoKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfS0VZRE9XTl9EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUkMywgRHJvcGRvd24uZGF0YUFwaUtleWRvd25IYW5kbGVyKTtcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfS0VZRE9XTl9EQVRBX0FQSSwgU0VMRUNUT1JfTUVOVSwgRHJvcGRvd24uZGF0YUFwaUtleWRvd25IYW5kbGVyKTtcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMywgRHJvcGRvd24uY2xlYXJNZW51cyk7XG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWVVQX0RBVEFfQVBJLCBEcm9wZG93bi5jbGVhck1lbnVzKTtcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEkkMywgU0VMRUNUT1JfREFUQV9UT0dHTEUkMywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIERyb3Bkb3duLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcykudG9nZ2xlKCk7XG59KTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oRHJvcGRvd24pO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9iYWNrZHJvcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDkgPSAnYmFja2Ryb3AnO1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFJDQgPSAnZmFkZSc7XG5jb25zdCBDTEFTU19OQU1FX1NIT1ckNSA9ICdzaG93JztcbmNvbnN0IEVWRU5UX01PVVNFRE9XTiA9IGBtb3VzZWRvd24uYnMuJHtOQU1FJDl9YDtcbmNvbnN0IERlZmF1bHQkOCA9IHtcbiAgY2xhc3NOYW1lOiAnbW9kYWwtYmFja2Ryb3AnLFxuICBjbGlja0NhbGxiYWNrOiBudWxsLFxuICBpc0FuaW1hdGVkOiBmYWxzZSxcbiAgaXNWaXNpYmxlOiB0cnVlLFxuICAvLyBpZiBmYWxzZSwgd2UgdXNlIHRoZSBiYWNrZHJvcCBoZWxwZXIgd2l0aG91dCBhZGRpbmcgYW55IGVsZW1lbnQgdG8gdGhlIGRvbVxuICByb290RWxlbWVudDogJ2JvZHknIC8vIGdpdmUgdGhlIGNob2ljZSB0byBwbGFjZSBiYWNrZHJvcCB1bmRlciBkaWZmZXJlbnQgZWxlbWVudHNcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQ4ID0ge1xuICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICBjbGlja0NhbGxiYWNrOiAnKGZ1bmN0aW9ufG51bGwpJyxcbiAgaXNBbmltYXRlZDogJ2Jvb2xlYW4nLFxuICBpc1Zpc2libGU6ICdib29sZWFuJyxcbiAgcm9vdEVsZW1lbnQ6ICcoZWxlbWVudHxzdHJpbmcpJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQmFja2Ryb3AgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICAgIHRoaXMuX2lzQXBwZW5kZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9lbGVtZW50ID0gbnVsbDtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDg7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkODtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkOTtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBzaG93KGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuaXNWaXNpYmxlKSB7XG4gICAgICBleGVjdXRlKGNhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fYXBwZW5kKCk7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2dldEVsZW1lbnQoKTtcbiAgICBpZiAodGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQpIHtcbiAgICAgIHJlZmxvdyhlbGVtZW50KTtcbiAgICB9XG4gICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVyQ1KTtcbiAgICB0aGlzLl9lbXVsYXRlQW5pbWF0aW9uKCgpID0+IHtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spO1xuICAgIH0pO1xuICB9XG4gIGhpZGUoY2FsbGJhY2spIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5pc1Zpc2libGUpIHtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9nZXRFbGVtZW50KCkuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckNSk7XG4gICAgdGhpcy5fZW11bGF0ZUFuaW1hdGlvbigoKSA9PiB7XG4gICAgICB0aGlzLmRpc3Bvc2UoKTtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spO1xuICAgIH0pO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0FwcGVuZGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOKTtcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZSgpO1xuICAgIHRoaXMuX2lzQXBwZW5kZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2dldEVsZW1lbnQoKSB7XG4gICAgaWYgKCF0aGlzLl9lbGVtZW50KSB7XG4gICAgICBjb25zdCBiYWNrZHJvcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgYmFja2Ryb3AuY2xhc3NOYW1lID0gdGhpcy5fY29uZmlnLmNsYXNzTmFtZTtcbiAgICAgIGlmICh0aGlzLl9jb25maWcuaXNBbmltYXRlZCkge1xuICAgICAgICBiYWNrZHJvcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSQ0KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBiYWNrZHJvcDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQ7XG4gIH1cbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgLy8gdXNlIGdldEVsZW1lbnQoKSB3aXRoIHRoZSBkZWZhdWx0IFwiYm9keVwiIHRvIGdldCBhIGZyZXNoIEVsZW1lbnQgb24gZWFjaCBpbnN0YW50aWF0aW9uXG4gICAgY29uZmlnLnJvb3RFbGVtZW50ID0gZ2V0RWxlbWVudChjb25maWcucm9vdEVsZW1lbnQpO1xuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2FwcGVuZCgpIHtcbiAgICBpZiAodGhpcy5faXNBcHBlbmRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZ2V0RWxlbWVudCgpO1xuICAgIHRoaXMuX2NvbmZpZy5yb290RWxlbWVudC5hcHBlbmQoZWxlbWVudCk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKGVsZW1lbnQsIEVWRU5UX01PVVNFRE9XTiwgKCkgPT4ge1xuICAgICAgZXhlY3V0ZSh0aGlzLl9jb25maWcuY2xpY2tDYWxsYmFjayk7XG4gICAgfSk7XG4gICAgdGhpcy5faXNBcHBlbmRlZCA9IHRydWU7XG4gIH1cbiAgX2VtdWxhdGVBbmltYXRpb24oY2FsbGJhY2spIHtcbiAgICBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uKGNhbGxiYWNrLCB0aGlzLl9nZXRFbGVtZW50KCksIHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKTtcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9mb2N1c3RyYXAuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQ4ID0gJ2ZvY3VzdHJhcCc7XG5jb25zdCBEQVRBX0tFWSQ1ID0gJ2JzLmZvY3VzdHJhcCc7XG5jb25zdCBFVkVOVF9LRVkkNSA9IGAuJHtEQVRBX0tFWSQ1fWA7XG5jb25zdCBFVkVOVF9GT0NVU0lOJDIgPSBgZm9jdXNpbiR7RVZFTlRfS0VZJDV9YDtcbmNvbnN0IEVWRU5UX0tFWURPV05fVEFCID0gYGtleWRvd24udGFiJHtFVkVOVF9LRVkkNX1gO1xuY29uc3QgVEFCX0tFWSA9ICdUYWInO1xuY29uc3QgVEFCX05BVl9GT1JXQVJEID0gJ2ZvcndhcmQnO1xuY29uc3QgVEFCX05BVl9CQUNLV0FSRCA9ICdiYWNrd2FyZCc7XG5jb25zdCBEZWZhdWx0JDcgPSB7XG4gIGF1dG9mb2N1czogdHJ1ZSxcbiAgdHJhcEVsZW1lbnQ6IG51bGwgLy8gVGhlIGVsZW1lbnQgdG8gdHJhcCBmb2N1cyBpbnNpZGUgb2Zcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQ3ID0ge1xuICBhdXRvZm9jdXM6ICdib29sZWFuJyxcbiAgdHJhcEVsZW1lbnQ6ICdlbGVtZW50J1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgRm9jdXNUcmFwIGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKTtcbiAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPSBudWxsO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkNztcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQ3O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQ4O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIGFjdGl2YXRlKCkge1xuICAgIGlmICh0aGlzLl9pc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLmF1dG9mb2N1cykge1xuICAgICAgdGhpcy5fY29uZmlnLnRyYXBFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICAgIEV2ZW50SGFuZGxlci5vZmYoZG9jdW1lbnQsIEVWRU5UX0tFWSQ1KTsgLy8gZ3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBmb2N1cyBsb29wXG4gICAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9GT0NVU0lOJDIsIGV2ZW50ID0+IHRoaXMuX2hhbmRsZUZvY3VzaW4oZXZlbnQpKTtcbiAgICBFdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fVEFCLCBldmVudCA9PiB0aGlzLl9oYW5kbGVLZXlkb3duKGV2ZW50KSk7XG4gICAgdGhpcy5faXNBY3RpdmUgPSB0cnVlO1xuICB9XG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlO1xuICAgIEV2ZW50SGFuZGxlci5vZmYoZG9jdW1lbnQsIEVWRU5UX0tFWSQ1KTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2hhbmRsZUZvY3VzaW4oZXZlbnQpIHtcbiAgICBjb25zdCB7XG4gICAgICB0cmFwRWxlbWVudFxuICAgIH0gPSB0aGlzLl9jb25maWc7XG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZG9jdW1lbnQgfHwgZXZlbnQudGFyZ2V0ID09PSB0cmFwRWxlbWVudCB8fCB0cmFwRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGVsZW1lbnRzID0gU2VsZWN0b3JFbmdpbmUuZm9jdXNhYmxlQ2hpbGRyZW4odHJhcEVsZW1lbnQpO1xuICAgIGlmIChlbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRyYXBFbGVtZW50LmZvY3VzKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9sYXN0VGFiTmF2RGlyZWN0aW9uID09PSBUQUJfTkFWX0JBQ0tXQVJEKSB7XG4gICAgICBlbGVtZW50c1tlbGVtZW50cy5sZW5ndGggLSAxXS5mb2N1cygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50c1swXS5mb2N1cygpO1xuICAgIH1cbiAgfVxuICBfaGFuZGxlS2V5ZG93bihldmVudCkge1xuICAgIGlmIChldmVudC5rZXkgIT09IFRBQl9LRVkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9IGV2ZW50LnNoaWZ0S2V5ID8gVEFCX05BVl9CQUNLV0FSRCA6IFRBQl9OQVZfRk9SV0FSRDtcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9zY3JvbGxCYXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgU0VMRUNUT1JfRklYRURfQ09OVEVOVCA9ICcuZml4ZWQtdG9wLCAuZml4ZWQtYm90dG9tLCAuaXMtZml4ZWQsIC5zdGlja3ktdG9wJztcbmNvbnN0IFNFTEVDVE9SX1NUSUNLWV9DT05URU5UID0gJy5zdGlja3ktdG9wJztcbmNvbnN0IFBST1BFUlRZX1BBRERJTkcgPSAncGFkZGluZy1yaWdodCc7XG5jb25zdCBQUk9QRVJUWV9NQVJHSU4gPSAnbWFyZ2luLXJpZ2h0JztcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgU2Nyb2xsQmFySGVscGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fZWxlbWVudCA9IGRvY3VtZW50LmJvZHk7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZ2V0V2lkdGgoKSB7XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvdy9pbm5lcldpZHRoI3VzYWdlX25vdGVzXG4gICAgY29uc3QgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aDtcbiAgICByZXR1cm4gTWF0aC5hYnMod2luZG93LmlubmVyV2lkdGggLSBkb2N1bWVudFdpZHRoKTtcbiAgfVxuICBoaWRlKCkge1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpO1xuICAgIHRoaXMuX2Rpc2FibGVPdmVyRmxvdygpO1xuICAgIC8vIGdpdmUgcGFkZGluZyB0byBlbGVtZW50IHRvIGJhbGFuY2UgdGhlIGhpZGRlbiBzY3JvbGxiYXIgd2lkdGhcbiAgICB0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCBQUk9QRVJUWV9QQURESU5HLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlICsgd2lkdGgpO1xuICAgIC8vIHRyaWNrOiBXZSBhZGp1c3QgcG9zaXRpdmUgcGFkZGluZ1JpZ2h0IGFuZCBuZWdhdGl2ZSBtYXJnaW5SaWdodCB0byBzdGlja3ktdG9wIGVsZW1lbnRzIHRvIGtlZXAgc2hvd2luZyBmdWxsd2lkdGhcbiAgICB0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9GSVhFRF9DT05URU5ULCBQUk9QRVJUWV9QQURESU5HLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlICsgd2lkdGgpO1xuICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX1NUSUNLWV9DT05URU5ULCBQUk9QRVJUWV9NQVJHSU4sIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgLSB3aWR0aCk7XG4gIH1cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCAnb3ZlcmZsb3cnKTtcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsIFBST1BFUlRZX1BBRERJTkcpO1xuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfRklYRURfQ09OVEVOVCwgUFJPUEVSVFlfUEFERElORyk7XG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCwgUFJPUEVSVFlfTUFSR0lOKTtcbiAgfVxuICBpc092ZXJmbG93aW5nKCkge1xuICAgIHJldHVybiB0aGlzLmdldFdpZHRoKCkgPiAwO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZGlzYWJsZU92ZXJGbG93KCkge1xuICAgIHRoaXMuX3NhdmVJbml0aWFsQXR0cmlidXRlKHRoaXMuX2VsZW1lbnQsICdvdmVyZmxvdycpO1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJztcbiAgfVxuICBfc2V0RWxlbWVudEF0dHJpYnV0ZXMoc2VsZWN0b3IsIHN0eWxlUHJvcGVydHksIGNhbGxiYWNrKSB7XG4gICAgY29uc3Qgc2Nyb2xsYmFyV2lkdGggPSB0aGlzLmdldFdpZHRoKCk7XG4gICAgY29uc3QgbWFuaXB1bGF0aW9uQ2FsbEJhY2sgPSBlbGVtZW50ID0+IHtcbiAgICAgIGlmIChlbGVtZW50ICE9PSB0aGlzLl9lbGVtZW50ICYmIHdpbmRvdy5pbm5lcldpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aCArIHNjcm9sbGJhcldpZHRoKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3NhdmVJbml0aWFsQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHkpO1xuICAgICAgY29uc3QgY2FsY3VsYXRlZFZhbHVlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KTtcbiAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVQcm9wZXJ0eSwgYCR7Y2FsbGJhY2soTnVtYmVyLnBhcnNlRmxvYXQoY2FsY3VsYXRlZFZhbHVlKSl9cHhgKTtcbiAgICB9O1xuICAgIHRoaXMuX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2soc2VsZWN0b3IsIG1hbmlwdWxhdGlvbkNhbGxCYWNrKTtcbiAgfVxuICBfc2F2ZUluaXRpYWxBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSkge1xuICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gZWxlbWVudC5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKHN0eWxlUHJvcGVydHkpO1xuICAgIGlmIChhY3R1YWxWYWx1ZSkge1xuICAgICAgTWFuaXB1bGF0b3Iuc2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5LCBhY3R1YWxWYWx1ZSk7XG4gICAgfVxuICB9XG4gIF9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHNlbGVjdG9yLCBzdHlsZVByb3BlcnR5KSB7XG4gICAgY29uc3QgbWFuaXB1bGF0aW9uQ2FsbEJhY2sgPSBlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IHZhbHVlID0gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KTtcbiAgICAgIC8vIFdlIG9ubHkgd2FudCB0byByZW1vdmUgdGhlIHByb3BlcnR5IGlmIHRoZSB2YWx1ZSBpcyBgbnVsbGA7IHRoZSB2YWx1ZSBjYW4gYWxzbyBiZSB6ZXJvXG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShzdHlsZVByb3BlcnR5KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgTWFuaXB1bGF0b3IucmVtb3ZlRGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KTtcbiAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVQcm9wZXJ0eSwgdmFsdWUpO1xuICAgIH07XG4gICAgdGhpcy5fYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgbWFuaXB1bGF0aW9uQ2FsbEJhY2spO1xuICB9XG4gIF9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBjYWxsQmFjaykge1xuICAgIGlmIChpc0VsZW1lbnQoc2VsZWN0b3IpKSB7XG4gICAgICBjYWxsQmFjayhzZWxlY3Rvcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc2VsIG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IsIHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICBjYWxsQmFjayhzZWwpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgbW9kYWwuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQ3ID0gJ21vZGFsJztcbmNvbnN0IERBVEFfS0VZJDQgPSAnYnMubW9kYWwnO1xuY29uc3QgRVZFTlRfS0VZJDQgPSBgLiR7REFUQV9LRVkkNH1gO1xuY29uc3QgREFUQV9BUElfS0VZJDIgPSAnLmRhdGEtYXBpJztcbmNvbnN0IEVTQ0FQRV9LRVkkMSA9ICdFc2NhcGUnO1xuY29uc3QgRVZFTlRfSElERSQ0ID0gYGhpZGUke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9ISURFX1BSRVZFTlRFRCQxID0gYGhpZGVQcmV2ZW50ZWQke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9ISURERU4kNCA9IGBoaWRkZW4ke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9TSE9XJDQgPSBgc2hvdyR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX1NIT1dOJDQgPSBgc2hvd24ke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9SRVNJWkUkMSA9IGByZXNpemUke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9DTElDS19ESVNNSVNTID0gYGNsaWNrLmRpc21pc3Mke0VWRU5UX0tFWSQ0fWA7XG5jb25zdCBFVkVOVF9NT1VTRURPV05fRElTTUlTUyA9IGBtb3VzZWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX0tFWURPV05fRElTTUlTUyQxID0gYGtleWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZJDR9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJJDIgPSBgY2xpY2ske0VWRU5UX0tFWSQ0fSR7REFUQV9BUElfS0VZJDJ9YDtcbmNvbnN0IENMQVNTX05BTUVfT1BFTiA9ICdtb2RhbC1vcGVuJztcbmNvbnN0IENMQVNTX05BTUVfRkFERSQzID0gJ2ZhZGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDQgPSAnc2hvdyc7XG5jb25zdCBDTEFTU19OQU1FX1NUQVRJQyA9ICdtb2RhbC1zdGF0aWMnO1xuY29uc3QgT1BFTl9TRUxFQ1RPUiQxID0gJy5tb2RhbC5zaG93JztcbmNvbnN0IFNFTEVDVE9SX0RJQUxPRyA9ICcubW9kYWwtZGlhbG9nJztcbmNvbnN0IFNFTEVDVE9SX01PREFMX0JPRFkgPSAnLm1vZGFsLWJvZHknO1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUkMiA9ICdbZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiXSc7XG5jb25zdCBEZWZhdWx0JDYgPSB7XG4gIGJhY2tkcm9wOiB0cnVlLFxuICBmb2N1czogdHJ1ZSxcbiAga2V5Ym9hcmQ6IHRydWVcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQ2ID0ge1xuICBiYWNrZHJvcDogJyhib29sZWFufHN0cmluZyknLFxuICBmb2N1czogJ2Jvb2xlYW4nLFxuICBrZXlib2FyZDogJ2Jvb2xlYW4nXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBNb2RhbCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpO1xuICAgIHRoaXMuX2RpYWxvZyA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfRElBTE9HLCB0aGlzLl9lbGVtZW50KTtcbiAgICB0aGlzLl9iYWNrZHJvcCA9IHRoaXMuX2luaXRpYWxpemVCYWNrRHJvcCgpO1xuICAgIHRoaXMuX2ZvY3VzdHJhcCA9IHRoaXMuX2luaXRpYWxpemVGb2N1c1RyYXAoKTtcbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2U7XG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2U7XG4gICAgdGhpcy5fc2Nyb2xsQmFyID0gbmV3IFNjcm9sbEJhckhlbHBlcigpO1xuICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKCk7XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQ2O1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDY7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDc7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKHJlbGF0ZWRUYXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTaG93biA/IHRoaXMuaGlkZSgpIDogdGhpcy5zaG93KHJlbGF0ZWRUYXJnZXQpO1xuICB9XG4gIHNob3cocmVsYXRlZFRhcmdldCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duIHx8IHRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XJDQsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICB9KTtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5faXNTaG93biA9IHRydWU7XG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9zY3JvbGxCYXIuaGlkZSgpO1xuICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX09QRU4pO1xuICAgIHRoaXMuX2FkanVzdERpYWxvZygpO1xuICAgIHRoaXMuX2JhY2tkcm9wLnNob3coKCkgPT4gdGhpcy5fc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCkpO1xuICB9XG4gIGhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc1Nob3duIHx8IHRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFJDQpO1xuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2U7XG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpO1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckNCk7XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB0aGlzLl9oaWRlTW9kYWwoKSwgdGhpcy5fZWxlbWVudCwgdGhpcy5faXNBbmltYXRlZCgpKTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIEV2ZW50SGFuZGxlci5vZmYod2luZG93LCBFVkVOVF9LRVkkNCk7XG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9kaWFsb2csIEVWRU5UX0tFWSQ0KTtcbiAgICB0aGlzLl9iYWNrZHJvcC5kaXNwb3NlKCk7XG4gICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKTtcbiAgICBzdXBlci5kaXNwb3NlKCk7XG4gIH1cbiAgaGFuZGxlVXBkYXRlKCkge1xuICAgIHRoaXMuX2FkanVzdERpYWxvZygpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfaW5pdGlhbGl6ZUJhY2tEcm9wKCkge1xuICAgIHJldHVybiBuZXcgQmFja2Ryb3Aoe1xuICAgICAgaXNWaXNpYmxlOiBCb29sZWFuKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCksXG4gICAgICAvLyAnc3RhdGljJyBvcHRpb24gd2lsbCBiZSB0cmFuc2xhdGVkIHRvIHRydWUsIGFuZCBib29sZWFucyB3aWxsIGtlZXAgdGhlaXIgdmFsdWUsXG4gICAgICBpc0FuaW1hdGVkOiB0aGlzLl9pc0FuaW1hdGVkKClcbiAgICB9KTtcbiAgfVxuICBfaW5pdGlhbGl6ZUZvY3VzVHJhcCgpIHtcbiAgICByZXR1cm4gbmV3IEZvY3VzVHJhcCh7XG4gICAgICB0cmFwRWxlbWVudDogdGhpcy5fZWxlbWVudFxuICAgIH0pO1xuICB9XG4gIF9zaG93RWxlbWVudChyZWxhdGVkVGFyZ2V0KSB7XG4gICAgLy8gdHJ5IHRvIGFwcGVuZCBkeW5hbWljIG1vZGFsXG4gICAgaWYgKCFkb2N1bWVudC5ib2R5LmNvbnRhaW5zKHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZCh0aGlzLl9lbGVtZW50KTtcbiAgICB9XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKTtcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcsIHRydWUpO1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2RpYWxvZycpO1xuICAgIHRoaXMuX2VsZW1lbnQuc2Nyb2xsVG9wID0gMDtcbiAgICBjb25zdCBtb2RhbEJvZHkgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX01PREFMX0JPRFksIHRoaXMuX2RpYWxvZyk7XG4gICAgaWYgKG1vZGFsQm9keSkge1xuICAgICAgbW9kYWxCb2R5LnNjcm9sbFRvcCA9IDA7XG4gICAgfVxuICAgIHJlZmxvdyh0aGlzLl9lbGVtZW50KTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDQpO1xuICAgIGNvbnN0IHRyYW5zaXRpb25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcuZm9jdXMpIHtcbiAgICAgICAgdGhpcy5fZm9jdXN0cmFwLmFjdGl2YXRlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOJDQsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldFxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKHRyYW5zaXRpb25Db21wbGV0ZSwgdGhpcy5fZGlhbG9nLCB0aGlzLl9pc0FuaW1hdGVkKCkpO1xuICB9XG4gIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTl9ESVNNSVNTJDEsIGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgIT09IEVTQ0FQRV9LRVkkMSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKCk7XG4gICAgfSk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfUkVTSVpFJDEsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc1Nob3duICYmICF0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgdGhpcy5fYWRqdXN0RGlhbG9nKCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRE9XTl9ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICAvLyBhIGJhZCB0cmljayB0byBzZWdyZWdhdGUgY2xpY2tzIHRoYXQgbWF5IHN0YXJ0IGluc2lkZSBkaWFsb2cgYnV0IGVuZCBvdXRzaWRlLCBhbmQgYXZvaWQgbGlzdGVuIHRvIHNjcm9sbGJhciBjbGlja3NcbiAgICAgIEV2ZW50SGFuZGxlci5vbmUodGhpcy5fZWxlbWVudCwgRVZFTlRfQ0xJQ0tfRElTTUlTUywgZXZlbnQyID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQgIT09IGV2ZW50LnRhcmdldCB8fCB0aGlzLl9lbGVtZW50ICE9PSBldmVudDIudGFyZ2V0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3AgPT09ICdzdGF0aWMnKSB7XG4gICAgICAgICAgdGhpcy5fdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmJhY2tkcm9wKSB7XG4gICAgICAgICAgdGhpcy5oaWRlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG4gIF9oaWRlTW9kYWwoKSB7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpO1xuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLW1vZGFsJyk7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3JvbGUnKTtcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZTtcbiAgICB0aGlzLl9iYWNrZHJvcC5oaWRlKCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX09QRU4pO1xuICAgICAgdGhpcy5fcmVzZXRBZGp1c3RtZW50cygpO1xuICAgICAgdGhpcy5fc2Nyb2xsQmFyLnJlc2V0KCk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4kNCk7XG4gICAgfSk7XG4gIH1cbiAgX2lzQW5pbWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSQzKTtcbiAgfVxuICBfdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpIHtcbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFX1BSRVZFTlRFRCQxKTtcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaXNNb2RhbE92ZXJmbG93aW5nID0gdGhpcy5fZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgIGNvbnN0IGluaXRpYWxPdmVyZmxvd1kgPSB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93WTtcbiAgICAvLyByZXR1cm4gaWYgdGhlIGZvbGxvd2luZyBiYWNrZ3JvdW5kIHRyYW5zaXRpb24gaGFzbid0IHlldCBjb21wbGV0ZWRcbiAgICBpZiAoaW5pdGlhbE92ZXJmbG93WSA9PT0gJ2hpZGRlbicgfHwgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TVEFUSUMpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9ICdoaWRkZW4nO1xuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TVEFUSUMpO1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU1RBVElDKTtcbiAgICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9IGluaXRpYWxPdmVyZmxvd1k7XG4gICAgICB9LCB0aGlzLl9kaWFsb2cpO1xuICAgIH0sIHRoaXMuX2RpYWxvZyk7XG4gICAgdGhpcy5fZWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgdXNlZCB0byBoYW5kbGUgb3ZlcmZsb3dpbmcgbW9kYWxzXG4gICAqL1xuXG4gIF9hZGp1c3REaWFsb2coKSB7XG4gICAgY29uc3QgaXNNb2RhbE92ZXJmbG93aW5nID0gdGhpcy5fZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gdGhpcy5fc2Nyb2xsQmFyLmdldFdpZHRoKCk7XG4gICAgY29uc3QgaXNCb2R5T3ZlcmZsb3dpbmcgPSBzY3JvbGxiYXJXaWR0aCA+IDA7XG4gICAgaWYgKGlzQm9keU92ZXJmbG93aW5nICYmICFpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gaXNSVEwoKSA/ICdwYWRkaW5nTGVmdCcgOiAncGFkZGluZ1JpZ2h0JztcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbcHJvcGVydHldID0gYCR7c2Nyb2xsYmFyV2lkdGh9cHhgO1xuICAgIH1cbiAgICBpZiAoIWlzQm9keU92ZXJmbG93aW5nICYmIGlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBpc1JUTCgpID8gJ3BhZGRpbmdSaWdodCcgOiAncGFkZGluZ0xlZnQnO1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSBgJHtzY3JvbGxiYXJXaWR0aH1weGA7XG4gICAgfVxuICB9XG4gIF9yZXNldEFkanVzdG1lbnRzKCkge1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQgPSAnJztcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9ICcnO1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnLCByZWxhdGVkVGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgfVxuICAgICAgZGF0YVtjb25maWddKHJlbGF0ZWRUYXJnZXQpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJJDIsIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDIsIGZ1bmN0aW9uIChldmVudCkge1xuICBjb25zdCB0YXJnZXQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRoaXMpO1xuICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfU0hPVyQ0LCBzaG93RXZlbnQgPT4ge1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgLy8gb25seSByZWdpc3RlciBmb2N1cyByZXN0b3JlciBpZiBtb2RhbCB3aWxsIGFjdHVhbGx5IGdldCBzaG93blxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfSElEREVOJDQsICgpID0+IHtcbiAgICAgIGlmIChpc1Zpc2libGUodGhpcykpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICAvLyBhdm9pZCBjb25mbGljdCB3aGVuIGNsaWNraW5nIG1vZGFsIHRvZ2dsZXIgd2hpbGUgYW5vdGhlciBvbmUgaXMgb3BlblxuICBjb25zdCBhbHJlYWR5T3BlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoT1BFTl9TRUxFQ1RPUiQxKTtcbiAgaWYgKGFscmVhZHlPcGVuKSB7XG4gICAgTW9kYWwuZ2V0SW5zdGFuY2UoYWxyZWFkeU9wZW4pLmhpZGUoKTtcbiAgfVxuICBjb25zdCBkYXRhID0gTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpO1xuICBkYXRhLnRvZ2dsZSh0aGlzKTtcbn0pO1xuZW5hYmxlRGlzbWlzc1RyaWdnZXIoTW9kYWwpO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihNb2RhbCk7XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBvZmZjYW52YXMuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQ2ID0gJ29mZmNhbnZhcyc7XG5jb25zdCBEQVRBX0tFWSQzID0gJ2JzLm9mZmNhbnZhcyc7XG5jb25zdCBFVkVOVF9LRVkkMyA9IGAuJHtEQVRBX0tFWSQzfWA7XG5jb25zdCBEQVRBX0FQSV9LRVkkMSA9ICcuZGF0YS1hcGknO1xuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSQyID0gYGxvYWQke0VWRU5UX0tFWSQzfSR7REFUQV9BUElfS0VZJDF9YDtcbmNvbnN0IEVTQ0FQRV9LRVkgPSAnRXNjYXBlJztcbmNvbnN0IENMQVNTX05BTUVfU0hPVyQzID0gJ3Nob3cnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XSU5HJDEgPSAnc2hvd2luZyc7XG5jb25zdCBDTEFTU19OQU1FX0hJRElORyA9ICdoaWRpbmcnO1xuY29uc3QgQ0xBU1NfTkFNRV9CQUNLRFJPUCA9ICdvZmZjYW52YXMtYmFja2Ryb3AnO1xuY29uc3QgT1BFTl9TRUxFQ1RPUiA9ICcub2ZmY2FudmFzLnNob3cnO1xuY29uc3QgRVZFTlRfU0hPVyQzID0gYHNob3cke0VWRU5UX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9TSE9XTiQzID0gYHNob3duJHtFVkVOVF9LRVkkM31gO1xuY29uc3QgRVZFTlRfSElERSQzID0gYGhpZGUke0VWRU5UX0tFWSQzfWA7XG5jb25zdCBFVkVOVF9ISURFX1BSRVZFTlRFRCA9IGBoaWRlUHJldmVudGVkJHtFVkVOVF9LRVkkM31gO1xuY29uc3QgRVZFTlRfSElEREVOJDMgPSBgaGlkZGVuJHtFVkVOVF9LRVkkM31gO1xuY29uc3QgRVZFTlRfUkVTSVpFID0gYHJlc2l6ZSR7RVZFTlRfS0VZJDN9YDtcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJJDEgPSBgY2xpY2ske0VWRU5UX0tFWSQzfSR7REFUQV9BUElfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX0tFWURPV05fRElTTUlTUyA9IGBrZXlkb3duLmRpc21pc3Mke0VWRU5UX0tFWSQzfWA7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSQxID0gJ1tkYXRhLWJzLXRvZ2dsZT1cIm9mZmNhbnZhc1wiXSc7XG5jb25zdCBEZWZhdWx0JDUgPSB7XG4gIGJhY2tkcm9wOiB0cnVlLFxuICBrZXlib2FyZDogdHJ1ZSxcbiAgc2Nyb2xsOiBmYWxzZVxufTtcbmNvbnN0IERlZmF1bHRUeXBlJDUgPSB7XG4gIGJhY2tkcm9wOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gIGtleWJvYXJkOiAnYm9vbGVhbicsXG4gIHNjcm9sbDogJ2Jvb2xlYW4nXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBPZmZjYW52YXMgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2U7XG4gICAgdGhpcy5fYmFja2Ryb3AgPSB0aGlzLl9pbml0aWFsaXplQmFja0Ryb3AoKTtcbiAgICB0aGlzLl9mb2N1c3RyYXAgPSB0aGlzLl9pbml0aWFsaXplRm9jdXNUcmFwKCk7XG4gICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDU7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkNTtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkNjtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3cocmVsYXRlZFRhcmdldCk7XG4gIH1cbiAgc2hvdyhyZWxhdGVkVGFyZ2V0KSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVyQzLCB7XG4gICAgICByZWxhdGVkVGFyZ2V0XG4gICAgfSk7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lzU2hvd24gPSB0cnVlO1xuICAgIHRoaXMuX2JhY2tkcm9wLnNob3coKTtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5zY3JvbGwpIHtcbiAgICAgIG5ldyBTY3JvbGxCYXJIZWxwZXIoKS5oaWRlKCk7XG4gICAgfVxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLW1vZGFsJywgdHJ1ZSk7XG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnZGlhbG9nJyk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPV0lORyQxKTtcbiAgICBjb25zdCBjb21wbGV0ZUNhbGxCYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9jb25maWcuc2Nyb2xsIHx8IHRoaXMuX2NvbmZpZy5iYWNrZHJvcCkge1xuICAgICAgICB0aGlzLl9mb2N1c3RyYXAuYWN0aXZhdGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1ckMyk7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XSU5HJDEpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04kMywge1xuICAgICAgICByZWxhdGVkVGFyZ2V0XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGVDYWxsQmFjaywgdGhpcy5fZWxlbWVudCwgdHJ1ZSk7XG4gIH1cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2hvd24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSQzKTtcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKTtcbiAgICB0aGlzLl9lbGVtZW50LmJsdXIoKTtcbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2U7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfSElESU5HKTtcbiAgICB0aGlzLl9iYWNrZHJvcC5oaWRlKCk7XG4gICAgY29uc3QgY29tcGxldGVDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckMywgQ0xBU1NfTkFNRV9ISURJTkcpO1xuICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnKTtcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdyb2xlJyk7XG4gICAgICBpZiAoIXRoaXMuX2NvbmZpZy5zY3JvbGwpIHtcbiAgICAgICAgbmV3IFNjcm9sbEJhckhlbHBlcigpLnJlc2V0KCk7XG4gICAgICB9XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4kMyk7XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlQ2FsbGJhY2ssIHRoaXMuX2VsZW1lbnQsIHRydWUpO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5fYmFja2Ryb3AuZGlzcG9zZSgpO1xuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfaW5pdGlhbGl6ZUJhY2tEcm9wKCkge1xuICAgIGNvbnN0IGNsaWNrQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmJhY2tkcm9wID09PSAnc3RhdGljJykge1xuICAgICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFX1BSRVZFTlRFRCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuaGlkZSgpO1xuICAgIH07XG5cbiAgICAvLyAnc3RhdGljJyBvcHRpb24gd2lsbCBiZSB0cmFuc2xhdGVkIHRvIHRydWUsIGFuZCBib29sZWFucyB3aWxsIGtlZXAgdGhlaXIgdmFsdWVcbiAgICBjb25zdCBpc1Zpc2libGUgPSBCb29sZWFuKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCk7XG4gICAgcmV0dXJuIG5ldyBCYWNrZHJvcCh7XG4gICAgICBjbGFzc05hbWU6IENMQVNTX05BTUVfQkFDS0RST1AsXG4gICAgICBpc1Zpc2libGUsXG4gICAgICBpc0FuaW1hdGVkOiB0cnVlLFxuICAgICAgcm9vdEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSxcbiAgICAgIGNsaWNrQ2FsbGJhY2s6IGlzVmlzaWJsZSA/IGNsaWNrQ2FsbGJhY2sgOiBudWxsXG4gICAgfSk7XG4gIH1cbiAgX2luaXRpYWxpemVGb2N1c1RyYXAoKSB7XG4gICAgcmV0dXJuIG5ldyBGb2N1c1RyYXAoe1xuICAgICAgdHJhcEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9KTtcbiAgfVxuICBfYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV05fRElTTUlTUywgZXZlbnQgPT4ge1xuICAgICAgaWYgKGV2ZW50LmtleSAhPT0gRVNDQVBFX0tFWSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFX1BSRVZFTlRFRCk7XG4gICAgfSk7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBPZmZjYW52YXMuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpO1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgfVxuICAgICAgZGF0YVtjb25maWddKHRoaXMpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJJDEsIFNFTEVDVE9SX0RBVEFfVE9HR0xFJDEsIGZ1bmN0aW9uIChldmVudCkge1xuICBjb25zdCB0YXJnZXQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRoaXMpO1xuICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgfVxuICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgIHJldHVybjtcbiAgfVxuICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfSElEREVOJDMsICgpID0+IHtcbiAgICAvLyBmb2N1cyBvbiB0cmlnZ2VyIHdoZW4gaXQgaXMgY2xvc2VkXG4gICAgaWYgKGlzVmlzaWJsZSh0aGlzKSkge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gYXZvaWQgY29uZmxpY3Qgd2hlbiBjbGlja2luZyBhIHRvZ2dsZXIgb2YgYW4gb2ZmY2FudmFzLCB3aGlsZSBhbm90aGVyIGlzIG9wZW5cbiAgY29uc3QgYWxyZWFkeU9wZW4gPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKE9QRU5fU0VMRUNUT1IpO1xuICBpZiAoYWxyZWFkeU9wZW4gJiYgYWxyZWFkeU9wZW4gIT09IHRhcmdldCkge1xuICAgIE9mZmNhbnZhcy5nZXRJbnN0YW5jZShhbHJlYWR5T3BlbikuaGlkZSgpO1xuICB9XG4gIGNvbnN0IGRhdGEgPSBPZmZjYW52YXMuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpO1xuICBkYXRhLnRvZ2dsZSh0aGlzKTtcbn0pO1xuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSQyLCAoKSA9PiB7XG4gIGZvciAoY29uc3Qgc2VsZWN0b3Igb2YgU2VsZWN0b3JFbmdpbmUuZmluZChPUEVOX1NFTEVDVE9SKSkge1xuICAgIE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKHNlbGVjdG9yKS5zaG93KCk7XG4gIH1cbn0pO1xuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfUkVTSVpFLCAoKSA9PiB7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBTZWxlY3RvckVuZ2luZS5maW5kKCdbYXJpYS1tb2RhbF1bY2xhc3MqPXNob3ddW2NsYXNzKj1vZmZjYW52YXMtXScpKSB7XG4gICAgaWYgKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gIT09ICdmaXhlZCcpIHtcbiAgICAgIE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQpLmhpZGUoKTtcbiAgICB9XG4gIH1cbn0pO1xuZW5hYmxlRGlzbWlzc1RyaWdnZXIoT2ZmY2FudmFzKTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oT2ZmY2FudmFzKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvc2FuaXRpemVyLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuLy8ganMtZG9jcy1zdGFydCBhbGxvdy1saXN0XG5jb25zdCBBUklBX0FUVFJJQlVURV9QQVRURVJOID0gL15hcmlhLVtcXHctXSokL2k7XG5jb25zdCBEZWZhdWx0QWxsb3dsaXN0ID0ge1xuICAvLyBHbG9iYWwgYXR0cmlidXRlcyBhbGxvd2VkIG9uIGFueSBzdXBwbGllZCBlbGVtZW50IGJlbG93LlxuICAnKic6IFsnY2xhc3MnLCAnZGlyJywgJ2lkJywgJ2xhbmcnLCAncm9sZScsIEFSSUFfQVRUUklCVVRFX1BBVFRFUk5dLFxuICBhOiBbJ3RhcmdldCcsICdocmVmJywgJ3RpdGxlJywgJ3JlbCddLFxuICBhcmVhOiBbXSxcbiAgYjogW10sXG4gIGJyOiBbXSxcbiAgY29sOiBbXSxcbiAgY29kZTogW10sXG4gIGRkOiBbXSxcbiAgZGl2OiBbXSxcbiAgZGw6IFtdLFxuICBkdDogW10sXG4gIGVtOiBbXSxcbiAgaHI6IFtdLFxuICBoMTogW10sXG4gIGgyOiBbXSxcbiAgaDM6IFtdLFxuICBoNDogW10sXG4gIGg1OiBbXSxcbiAgaDY6IFtdLFxuICBpOiBbXSxcbiAgaW1nOiBbJ3NyYycsICdzcmNzZXQnLCAnYWx0JywgJ3RpdGxlJywgJ3dpZHRoJywgJ2hlaWdodCddLFxuICBsaTogW10sXG4gIG9sOiBbXSxcbiAgcDogW10sXG4gIHByZTogW10sXG4gIHM6IFtdLFxuICBzbWFsbDogW10sXG4gIHNwYW46IFtdLFxuICBzdWI6IFtdLFxuICBzdXA6IFtdLFxuICBzdHJvbmc6IFtdLFxuICB1OiBbXSxcbiAgdWw6IFtdXG59O1xuLy8ganMtZG9jcy1lbmQgYWxsb3ctbGlzdFxuXG5jb25zdCB1cmlBdHRyaWJ1dGVzID0gbmV3IFNldChbJ2JhY2tncm91bmQnLCAnY2l0ZScsICdocmVmJywgJ2l0ZW10eXBlJywgJ2xvbmdkZXNjJywgJ3Bvc3RlcicsICdzcmMnLCAneGxpbms6aHJlZiddKTtcblxuLyoqXG4gKiBBIHBhdHRlcm4gdGhhdCByZWNvZ25pemVzIFVSTHMgdGhhdCBhcmUgc2FmZSB3cnQuIFhTUyBpbiBVUkwgbmF2aWdhdGlvblxuICogY29udGV4dHMuXG4gKlxuICogU2hvdXQtb3V0IHRvIEFuZ3VsYXIgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iLzE1LjIuOC9wYWNrYWdlcy9jb3JlL3NyYy9zYW5pdGl6YXRpb24vdXJsX3Nhbml0aXplci50cyNMMzhcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vYmV0dGVyLXJlZ2V4XG5jb25zdCBTQUZFX1VSTF9QQVRURVJOID0gL14oPyFqYXZhc2NyaXB0OikoPzpbYS16MC05Ky4tXSs6fFteJjovPyNdKig/OlsvPyNdfCQpKS9pO1xuY29uc3QgYWxsb3dlZEF0dHJpYnV0ZSA9IChhdHRyaWJ1dGUsIGFsbG93ZWRBdHRyaWJ1dGVMaXN0KSA9PiB7XG4gIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgaWYgKGFsbG93ZWRBdHRyaWJ1dGVMaXN0LmluY2x1ZGVzKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgaWYgKHVyaUF0dHJpYnV0ZXMuaGFzKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICByZXR1cm4gQm9vbGVhbihTQUZFX1VSTF9QQVRURVJOLnRlc3QoYXR0cmlidXRlLm5vZGVWYWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIENoZWNrIGlmIGEgcmVndWxhciBleHByZXNzaW9uIHZhbGlkYXRlcyB0aGUgYXR0cmlidXRlLlxuICByZXR1cm4gYWxsb3dlZEF0dHJpYnV0ZUxpc3QuZmlsdGVyKGF0dHJpYnV0ZVJlZ2V4ID0+IGF0dHJpYnV0ZVJlZ2V4IGluc3RhbmNlb2YgUmVnRXhwKS5zb21lKHJlZ2V4ID0+IHJlZ2V4LnRlc3QoYXR0cmlidXRlTmFtZSkpO1xufTtcbmZ1bmN0aW9uIHNhbml0aXplSHRtbCh1bnNhZmVIdG1sLCBhbGxvd0xpc3QsIHNhbml0aXplRnVuY3Rpb24pIHtcbiAgaWYgKCF1bnNhZmVIdG1sLmxlbmd0aCkge1xuICAgIHJldHVybiB1bnNhZmVIdG1sO1xuICB9XG4gIGlmIChzYW5pdGl6ZUZ1bmN0aW9uICYmIHR5cGVvZiBzYW5pdGl6ZUZ1bmN0aW9uID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHNhbml0aXplRnVuY3Rpb24odW5zYWZlSHRtbCk7XG4gIH1cbiAgY29uc3QgZG9tUGFyc2VyID0gbmV3IHdpbmRvdy5ET01QYXJzZXIoKTtcbiAgY29uc3QgY3JlYXRlZERvY3VtZW50ID0gZG9tUGFyc2VyLnBhcnNlRnJvbVN0cmluZyh1bnNhZmVIdG1sLCAndGV4dC9odG1sJyk7XG4gIGNvbnN0IGVsZW1lbnRzID0gW10uY29uY2F0KC4uLmNyZWF0ZWREb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoJyonKSk7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgIGNvbnN0IGVsZW1lbnROYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghT2JqZWN0LmtleXMoYWxsb3dMaXN0KS5pbmNsdWRlcyhlbGVtZW50TmFtZSkpIHtcbiAgICAgIGVsZW1lbnQucmVtb3ZlKCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgYXR0cmlidXRlTGlzdCA9IFtdLmNvbmNhdCguLi5lbGVtZW50LmF0dHJpYnV0ZXMpO1xuICAgIGNvbnN0IGFsbG93ZWRBdHRyaWJ1dGVzID0gW10uY29uY2F0KGFsbG93TGlzdFsnKiddIHx8IFtdLCBhbGxvd0xpc3RbZWxlbWVudE5hbWVdIHx8IFtdKTtcbiAgICBmb3IgKGNvbnN0IGF0dHJpYnV0ZSBvZiBhdHRyaWJ1dGVMaXN0KSB7XG4gICAgICBpZiAoIWFsbG93ZWRBdHRyaWJ1dGUoYXR0cmlidXRlLCBhbGxvd2VkQXR0cmlidXRlcykpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlLm5vZGVOYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNyZWF0ZWREb2N1bWVudC5ib2R5LmlubmVySFRNTDtcbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvdGVtcGxhdGUtZmFjdG9yeS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDUgPSAnVGVtcGxhdGVGYWN0b3J5JztcbmNvbnN0IERlZmF1bHQkNCA9IHtcbiAgYWxsb3dMaXN0OiBEZWZhdWx0QWxsb3dsaXN0LFxuICBjb250ZW50OiB7fSxcbiAgLy8geyBzZWxlY3RvciA6IHRleHQgLCAgc2VsZWN0b3IyIDogdGV4dDIgLCB9XG4gIGV4dHJhQ2xhc3M6ICcnLFxuICBodG1sOiBmYWxzZSxcbiAgc2FuaXRpemU6IHRydWUsXG4gIHNhbml0aXplRm46IG51bGwsXG4gIHRlbXBsYXRlOiAnPGRpdj48L2Rpdj4nXG59O1xuY29uc3QgRGVmYXVsdFR5cGUkNCA9IHtcbiAgYWxsb3dMaXN0OiAnb2JqZWN0JyxcbiAgY29udGVudDogJ29iamVjdCcsXG4gIGV4dHJhQ2xhc3M6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gIGh0bWw6ICdib29sZWFuJyxcbiAgc2FuaXRpemU6ICdib29sZWFuJyxcbiAgc2FuaXRpemVGbjogJyhudWxsfGZ1bmN0aW9uKScsXG4gIHRlbXBsYXRlOiAnc3RyaW5nJ1xufTtcbmNvbnN0IERlZmF1bHRDb250ZW50VHlwZSA9IHtcbiAgZW50cnk6ICcoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb258bnVsbCknLFxuICBzZWxlY3RvcjogJyhzdHJpbmd8ZWxlbWVudCknXG59O1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBUZW1wbGF0ZUZhY3RvcnkgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkNDtcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQ0O1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQ1O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIGdldENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5fY29uZmlnLmNvbnRlbnQpLm1hcChjb25maWcgPT4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24oY29uZmlnKSkuZmlsdGVyKEJvb2xlYW4pO1xuICB9XG4gIGhhc0NvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q29udGVudCgpLmxlbmd0aCA+IDA7XG4gIH1cbiAgY2hhbmdlQ29udGVudChjb250ZW50KSB7XG4gICAgdGhpcy5fY2hlY2tDb250ZW50KGNvbnRlbnQpO1xuICAgIHRoaXMuX2NvbmZpZy5jb250ZW50ID0ge1xuICAgICAgLi4udGhpcy5fY29uZmlnLmNvbnRlbnQsXG4gICAgICAuLi5jb250ZW50XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB0b0h0bWwoKSB7XG4gICAgY29uc3QgdGVtcGxhdGVXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdGVtcGxhdGVXcmFwcGVyLmlubmVySFRNTCA9IHRoaXMuX21heWJlU2FuaXRpemUodGhpcy5fY29uZmlnLnRlbXBsYXRlKTtcbiAgICBmb3IgKGNvbnN0IFtzZWxlY3RvciwgdGV4dF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fY29uZmlnLmNvbnRlbnQpKSB7XG4gICAgICB0aGlzLl9zZXRDb250ZW50KHRlbXBsYXRlV3JhcHBlciwgdGV4dCwgc2VsZWN0b3IpO1xuICAgIH1cbiAgICBjb25zdCB0ZW1wbGF0ZSA9IHRlbXBsYXRlV3JhcHBlci5jaGlsZHJlblswXTtcbiAgICBjb25zdCBleHRyYUNsYXNzID0gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmV4dHJhQ2xhc3MpO1xuICAgIGlmIChleHRyYUNsYXNzKSB7XG4gICAgICB0ZW1wbGF0ZS5jbGFzc0xpc3QuYWRkKC4uLmV4dHJhQ2xhc3Muc3BsaXQoJyAnKSk7XG4gICAgfVxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX3R5cGVDaGVja0NvbmZpZyhjb25maWcpIHtcbiAgICBzdXBlci5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZyk7XG4gICAgdGhpcy5fY2hlY2tDb250ZW50KGNvbmZpZy5jb250ZW50KTtcbiAgfVxuICBfY2hlY2tDb250ZW50KGFyZykge1xuICAgIGZvciAoY29uc3QgW3NlbGVjdG9yLCBjb250ZW50XSBvZiBPYmplY3QuZW50cmllcyhhcmcpKSB7XG4gICAgICBzdXBlci5fdHlwZUNoZWNrQ29uZmlnKHtcbiAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgIGVudHJ5OiBjb250ZW50XG4gICAgICB9LCBEZWZhdWx0Q29udGVudFR5cGUpO1xuICAgIH1cbiAgfVxuICBfc2V0Q29udGVudCh0ZW1wbGF0ZSwgY29udGVudCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCB0ZW1wbGF0ZUVsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKHNlbGVjdG9yLCB0ZW1wbGF0ZSk7XG4gICAgaWYgKCF0ZW1wbGF0ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29udGVudCA9IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGNvbnRlbnQpO1xuICAgIGlmICghY29udGVudCkge1xuICAgICAgdGVtcGxhdGVFbGVtZW50LnJlbW92ZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoaXNFbGVtZW50KGNvbnRlbnQpKSB7XG4gICAgICB0aGlzLl9wdXRFbGVtZW50SW5UZW1wbGF0ZShnZXRFbGVtZW50KGNvbnRlbnQpLCB0ZW1wbGF0ZUVsZW1lbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29uZmlnLmh0bWwpIHtcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLl9tYXliZVNhbml0aXplKGNvbnRlbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0ZW1wbGF0ZUVsZW1lbnQudGV4dENvbnRlbnQgPSBjb250ZW50O1xuICB9XG4gIF9tYXliZVNhbml0aXplKGFyZykge1xuICAgIHJldHVybiB0aGlzLl9jb25maWcuc2FuaXRpemUgPyBzYW5pdGl6ZUh0bWwoYXJnLCB0aGlzLl9jb25maWcuYWxsb3dMaXN0LCB0aGlzLl9jb25maWcuc2FuaXRpemVGbikgOiBhcmc7XG4gIH1cbiAgX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBleGVjdXRlKGFyZywgW3RoaXNdKTtcbiAgfVxuICBfcHV0RWxlbWVudEluVGVtcGxhdGUoZWxlbWVudCwgdGVtcGxhdGVFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5odG1sKSB7XG4gICAgICB0ZW1wbGF0ZUVsZW1lbnQuaW5uZXJIVE1MID0gJyc7XG4gICAgICB0ZW1wbGF0ZUVsZW1lbnQuYXBwZW5kKGVsZW1lbnQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0ZW1wbGF0ZUVsZW1lbnQudGV4dENvbnRlbnQgPSBlbGVtZW50LnRleHRDb250ZW50O1xuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB0b29sdGlwLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkNCA9ICd0b29sdGlwJztcbmNvbnN0IERJU0FMTE9XRURfQVRUUklCVVRFUyA9IG5ldyBTZXQoWydzYW5pdGl6ZScsICdhbGxvd0xpc3QnLCAnc2FuaXRpemVGbiddKTtcbmNvbnN0IENMQVNTX05BTUVfRkFERSQyID0gJ2ZhZGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9NT0RBTCA9ICdtb2RhbCc7XG5jb25zdCBDTEFTU19OQU1FX1NIT1ckMiA9ICdzaG93JztcbmNvbnN0IFNFTEVDVE9SX1RPT0xUSVBfSU5ORVIgPSAnLnRvb2x0aXAtaW5uZXInO1xuY29uc3QgU0VMRUNUT1JfTU9EQUwgPSBgLiR7Q0xBU1NfTkFNRV9NT0RBTH1gO1xuY29uc3QgRVZFTlRfTU9EQUxfSElERSA9ICdoaWRlLmJzLm1vZGFsJztcbmNvbnN0IFRSSUdHRVJfSE9WRVIgPSAnaG92ZXInO1xuY29uc3QgVFJJR0dFUl9GT0NVUyA9ICdmb2N1cyc7XG5jb25zdCBUUklHR0VSX0NMSUNLID0gJ2NsaWNrJztcbmNvbnN0IFRSSUdHRVJfTUFOVUFMID0gJ21hbnVhbCc7XG5jb25zdCBFVkVOVF9ISURFJDIgPSAnaGlkZSc7XG5jb25zdCBFVkVOVF9ISURERU4kMiA9ICdoaWRkZW4nO1xuY29uc3QgRVZFTlRfU0hPVyQyID0gJ3Nob3cnO1xuY29uc3QgRVZFTlRfU0hPV04kMiA9ICdzaG93bic7XG5jb25zdCBFVkVOVF9JTlNFUlRFRCA9ICdpbnNlcnRlZCc7XG5jb25zdCBFVkVOVF9DTElDSyQxID0gJ2NsaWNrJztcbmNvbnN0IEVWRU5UX0ZPQ1VTSU4kMSA9ICdmb2N1c2luJztcbmNvbnN0IEVWRU5UX0ZPQ1VTT1VUJDEgPSAnZm9jdXNvdXQnO1xuY29uc3QgRVZFTlRfTU9VU0VFTlRFUiA9ICdtb3VzZWVudGVyJztcbmNvbnN0IEVWRU5UX01PVVNFTEVBVkUgPSAnbW91c2VsZWF2ZSc7XG5jb25zdCBBdHRhY2htZW50TWFwID0ge1xuICBBVVRPOiAnYXV0bycsXG4gIFRPUDogJ3RvcCcsXG4gIFJJR0hUOiBpc1JUTCgpID8gJ2xlZnQnIDogJ3JpZ2h0JyxcbiAgQk9UVE9NOiAnYm90dG9tJyxcbiAgTEVGVDogaXNSVEwoKSA/ICdyaWdodCcgOiAnbGVmdCdcbn07XG5jb25zdCBEZWZhdWx0JDMgPSB7XG4gIGFsbG93TGlzdDogRGVmYXVsdEFsbG93bGlzdCxcbiAgYW5pbWF0aW9uOiB0cnVlLFxuICBib3VuZGFyeTogJ2NsaXBwaW5nUGFyZW50cycsXG4gIGNvbnRhaW5lcjogZmFsc2UsXG4gIGN1c3RvbUNsYXNzOiAnJyxcbiAgZGVsYXk6IDAsXG4gIGZhbGxiYWNrUGxhY2VtZW50czogWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXSxcbiAgaHRtbDogZmFsc2UsXG4gIG9mZnNldDogWzAsIDZdLFxuICBwbGFjZW1lbnQ6ICd0b3AnLFxuICBwb3BwZXJDb25maWc6IG51bGwsXG4gIHNhbml0aXplOiB0cnVlLFxuICBzYW5pdGl6ZUZuOiBudWxsLFxuICBzZWxlY3RvcjogZmFsc2UsXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiPicgKyAnPGRpdiBjbGFzcz1cInRvb2x0aXAtYXJyb3dcIj48L2Rpdj4nICsgJzxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+JyArICc8L2Rpdj4nLFxuICB0aXRsZTogJycsXG4gIHRyaWdnZXI6ICdob3ZlciBmb2N1cydcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQzID0ge1xuICBhbGxvd0xpc3Q6ICdvYmplY3QnLFxuICBhbmltYXRpb246ICdib29sZWFuJyxcbiAgYm91bmRhcnk6ICcoc3RyaW5nfGVsZW1lbnQpJyxcbiAgY29udGFpbmVyOiAnKHN0cmluZ3xlbGVtZW50fGJvb2xlYW4pJyxcbiAgY3VzdG9tQ2xhc3M6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gIGRlbGF5OiAnKG51bWJlcnxvYmplY3QpJyxcbiAgZmFsbGJhY2tQbGFjZW1lbnRzOiAnYXJyYXknLFxuICBodG1sOiAnYm9vbGVhbicsXG4gIG9mZnNldDogJyhhcnJheXxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgcGxhY2VtZW50OiAnKHN0cmluZ3xmdW5jdGlvbiknLFxuICBwb3BwZXJDb25maWc6ICcobnVsbHxvYmplY3R8ZnVuY3Rpb24pJyxcbiAgc2FuaXRpemU6ICdib29sZWFuJyxcbiAgc2FuaXRpemVGbjogJyhudWxsfGZ1bmN0aW9uKScsXG4gIHNlbGVjdG9yOiAnKHN0cmluZ3xib29sZWFuKScsXG4gIHRlbXBsYXRlOiAnc3RyaW5nJyxcbiAgdGl0bGU6ICcoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb24pJyxcbiAgdHJpZ2dlcjogJ3N0cmluZydcbn07XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFRvb2x0aXAgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgaWYgKHR5cGVvZiBQb3BwZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIHRvb2x0aXBzIHJlcXVpcmUgUG9wcGVyIChodHRwczovL3BvcHBlci5qcy5vcmcpJyk7XG4gICAgfVxuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG5cbiAgICAvLyBQcml2YXRlXG4gICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZTtcbiAgICB0aGlzLl90aW1lb3V0ID0gMDtcbiAgICB0aGlzLl9pc0hvdmVyZWQgPSBudWxsO1xuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXIgPSB7fTtcbiAgICB0aGlzLl9wb3BwZXIgPSBudWxsO1xuICAgIHRoaXMuX3RlbXBsYXRlRmFjdG9yeSA9IG51bGw7XG4gICAgdGhpcy5fbmV3Q29udGVudCA9IG51bGw7XG5cbiAgICAvLyBQcm90ZWN0ZWRcbiAgICB0aGlzLnRpcCA9IG51bGw7XG4gICAgdGhpcy5fc2V0TGlzdGVuZXJzKCk7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuc2VsZWN0b3IpIHtcbiAgICAgIHRoaXMuX2ZpeFRpdGxlKCk7XG4gICAgfVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQkMztcbiAgfVxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZSQzO1xuICB9XG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRSQ0O1xuICB9XG5cbiAgLy8gUHVibGljXG4gIGVuYWJsZSgpIHtcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSB0cnVlO1xuICB9XG4gIGRpc2FibGUoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gZmFsc2U7XG4gIH1cbiAgdG9nZ2xlRW5hYmxlZCgpIHtcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSAhdGhpcy5faXNFbmFibGVkO1xuICB9XG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyLmNsaWNrID0gIXRoaXMuX2FjdGl2ZVRyaWdnZXIuY2xpY2s7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgdGhpcy5fbGVhdmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fZW50ZXIoKTtcbiAgfVxuICBkaXNwb3NlKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9NT0RBTCksIEVWRU5UX01PREFMX0hJREUsIHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIpO1xuICAgIGlmICh0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgndGl0bGUnLCB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScpKTtcbiAgICB9XG4gICAgdGhpcy5fZGlzcG9zZVBvcHBlcigpO1xuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuICBzaG93KCkge1xuICAgIGlmICh0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgdXNlIHNob3cgb24gdmlzaWJsZSBlbGVtZW50cycpO1xuICAgIH1cbiAgICBpZiAoISh0aGlzLl9pc1dpdGhDb250ZW50KCkgJiYgdGhpcy5faXNFbmFibGVkKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9TSE9XJDIpKTtcbiAgICBjb25zdCBzaGFkb3dSb290ID0gZmluZFNoYWRvd1Jvb3QodGhpcy5fZWxlbWVudCk7XG4gICAgY29uc3QgaXNJblRoZURvbSA9IChzaGFkb3dSb290IHx8IHRoaXMuX2VsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmNvbnRhaW5zKHRoaXMuX2VsZW1lbnQpO1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCAhaXNJblRoZURvbSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIFRPRE86IHY2IHJlbW92ZSB0aGlzIG9yIG1ha2UgaXQgb3B0aW9uYWxcbiAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKCk7XG4gICAgY29uc3QgdGlwID0gdGhpcy5fZ2V0VGlwRWxlbWVudCgpO1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JywgdGlwLmdldEF0dHJpYnV0ZSgnaWQnKSk7XG4gICAgY29uc3Qge1xuICAgICAgY29udGFpbmVyXG4gICAgfSA9IHRoaXMuX2NvbmZpZztcbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29udGFpbnModGhpcy50aXApKSB7XG4gICAgICBjb250YWluZXIuYXBwZW5kKHRpcCk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9JTlNFUlRFRCkpO1xuICAgIH1cbiAgICB0aGlzLl9wb3BwZXIgPSB0aGlzLl9jcmVhdGVQb3BwZXIodGlwKTtcbiAgICB0aXAuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1ckMik7XG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgYWRkIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB0byB0aGUgYm9keSdzIGltbWVkaWF0ZSBjaGlsZHJlbjtcbiAgICAvLyBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGJyb2tlbiBldmVudCBkZWxlZ2F0aW9uIG9uIGlPU1xuICAgIC8vIGh0dHBzOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxNC8wMi9tb3VzZV9ldmVudF9idWIuaHRtbFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKGVsZW1lbnQsICdtb3VzZW92ZXInLCBub29wKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9TSE9XTiQyKSk7XG4gICAgICBpZiAodGhpcy5faXNIb3ZlcmVkID09PSBmYWxzZSkge1xuICAgICAgICB0aGlzLl9sZWF2ZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5faXNIb3ZlcmVkID0gZmFsc2U7XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLnRpcCwgdGhpcy5faXNBbmltYXRlZCgpKTtcbiAgfVxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX0hJREUkMikpO1xuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0aXAgPSB0aGlzLl9nZXRUaXBFbGVtZW50KCk7XG4gICAgdGlwLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XJDIpO1xuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIHJlbW92ZSB0aGUgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHdlIGFkZGVkIGZvciBpT1Mgc3VwcG9ydFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCAnbW91c2VvdmVyJywgbm9vcCk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9DTElDS10gPSBmYWxzZTtcbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyW1RSSUdHRVJfRk9DVVNdID0gZmFsc2U7XG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlcltUUklHR0VSX0hPVkVSXSA9IGZhbHNlO1xuICAgIHRoaXMuX2lzSG92ZXJlZCA9IG51bGw7IC8vIGl0IGlzIGEgdHJpY2sgdG8gc3VwcG9ydCBtYW51YWwgdHJpZ2dlcmluZ1xuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNXaXRoQWN0aXZlVHJpZ2dlcigpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5Jyk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9ISURERU4kMikpO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy50aXAsIHRoaXMuX2lzQW5pbWF0ZWQoKSk7XG4gIH1cbiAgdXBkYXRlKCkge1xuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci51cGRhdGUoKTtcbiAgICB9XG4gIH1cblxuICAvLyBQcm90ZWN0ZWRcbiAgX2lzV2l0aENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fZ2V0VGl0bGUoKSk7XG4gIH1cbiAgX2dldFRpcEVsZW1lbnQoKSB7XG4gICAgaWYgKCF0aGlzLnRpcCkge1xuICAgICAgdGhpcy50aXAgPSB0aGlzLl9jcmVhdGVUaXBFbGVtZW50KHRoaXMuX25ld0NvbnRlbnQgfHwgdGhpcy5fZ2V0Q29udGVudEZvclRlbXBsYXRlKCkpO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy50aXA7XG4gIH1cbiAgX2NyZWF0ZVRpcEVsZW1lbnQoY29udGVudCkge1xuICAgIGNvbnN0IHRpcCA9IHRoaXMuX2dldFRlbXBsYXRlRmFjdG9yeShjb250ZW50KS50b0h0bWwoKTtcblxuICAgIC8vIFRPRE86IHJlbW92ZSB0aGlzIGNoZWNrIGluIHY2XG4gICAgaWYgKCF0aXApIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICB0aXAuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0ZBREUkMiwgQ0xBU1NfTkFNRV9TSE9XJDIpO1xuICAgIC8vIFRPRE86IHY2IHRoZSBmb2xsb3dpbmcgY2FuIGJlIGFjaGlldmVkIHdpdGggQ1NTIG9ubHlcbiAgICB0aXAuY2xhc3NMaXN0LmFkZChgYnMtJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9LWF1dG9gKTtcbiAgICBjb25zdCB0aXBJZCA9IGdldFVJRCh0aGlzLmNvbnN0cnVjdG9yLk5BTUUpLnRvU3RyaW5nKCk7XG4gICAgdGlwLnNldEF0dHJpYnV0ZSgnaWQnLCB0aXBJZCk7XG4gICAgaWYgKHRoaXMuX2lzQW5pbWF0ZWQoKSkge1xuICAgICAgdGlwLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9GQURFJDIpO1xuICAgIH1cbiAgICByZXR1cm4gdGlwO1xuICB9XG4gIHNldENvbnRlbnQoY29udGVudCkge1xuICAgIHRoaXMuX25ld0NvbnRlbnQgPSBjb250ZW50O1xuICAgIGlmICh0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKTtcbiAgICAgIHRoaXMuc2hvdygpO1xuICAgIH1cbiAgfVxuICBfZ2V0VGVtcGxhdGVGYWN0b3J5KGNvbnRlbnQpIHtcbiAgICBpZiAodGhpcy5fdGVtcGxhdGVGYWN0b3J5KSB7XG4gICAgICB0aGlzLl90ZW1wbGF0ZUZhY3RvcnkuY2hhbmdlQ29udGVudChjb250ZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdGVtcGxhdGVGYWN0b3J5ID0gbmV3IFRlbXBsYXRlRmFjdG9yeSh7XG4gICAgICAgIC4uLnRoaXMuX2NvbmZpZyxcbiAgICAgICAgLy8gdGhlIGBjb250ZW50YCB2YXIgaGFzIHRvIGJlIGFmdGVyIGB0aGlzLl9jb25maWdgXG4gICAgICAgIC8vIHRvIG92ZXJyaWRlIGNvbmZpZy5jb250ZW50IGluIGNhc2Ugb2YgcG9wb3ZlclxuICAgICAgICBjb250ZW50LFxuICAgICAgICBleHRyYUNsYXNzOiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0aGlzLl9jb25maWcuY3VzdG9tQ2xhc3MpXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlRmFjdG9yeTtcbiAgfVxuICBfZ2V0Q29udGVudEZvclRlbXBsYXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBbU0VMRUNUT1JfVE9PTFRJUF9JTk5FUl06IHRoaXMuX2dldFRpdGxlKClcbiAgICB9O1xuICB9XG4gIF9nZXRUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLnRpdGxlKSB8fCB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfaW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50KSB7XG4gICAgcmV0dXJuIHRoaXMuY29uc3RydWN0b3IuZ2V0T3JDcmVhdGVJbnN0YW5jZShldmVudC5kZWxlZ2F0ZVRhcmdldCwgdGhpcy5fZ2V0RGVsZWdhdGVDb25maWcoKSk7XG4gIH1cbiAgX2lzQW5pbWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5hbmltYXRpb24gfHwgdGhpcy50aXAgJiYgdGhpcy50aXAuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSQyKTtcbiAgfVxuICBfaXNTaG93bigpIHtcbiAgICByZXR1cm4gdGhpcy50aXAgJiYgdGhpcy50aXAuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVyQyKTtcbiAgfVxuICBfY3JlYXRlUG9wcGVyKHRpcCkge1xuICAgIGNvbnN0IHBsYWNlbWVudCA9IGV4ZWN1dGUodGhpcy5fY29uZmlnLnBsYWNlbWVudCwgW3RoaXMsIHRpcCwgdGhpcy5fZWxlbWVudF0pO1xuICAgIGNvbnN0IGF0dGFjaG1lbnQgPSBBdHRhY2htZW50TWFwW3BsYWNlbWVudC50b1VwcGVyQ2FzZSgpXTtcbiAgICByZXR1cm4gUG9wcGVyLmNyZWF0ZVBvcHBlcih0aGlzLl9lbGVtZW50LCB0aXAsIHRoaXMuX2dldFBvcHBlckNvbmZpZyhhdHRhY2htZW50KSk7XG4gIH1cbiAgX2dldE9mZnNldCgpIHtcbiAgICBjb25zdCB7XG4gICAgICBvZmZzZXRcbiAgICB9ID0gdGhpcy5fY29uZmlnO1xuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG9mZnNldC5zcGxpdCgnLCcpLm1hcCh2YWx1ZSA9PiBOdW1iZXIucGFyc2VJbnQodmFsdWUsIDEwKSk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcG9wcGVyRGF0YSA9PiBvZmZzZXQocG9wcGVyRGF0YSwgdGhpcy5fZWxlbWVudCk7XG4gICAgfVxuICAgIHJldHVybiBvZmZzZXQ7XG4gIH1cbiAgX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBleGVjdXRlKGFyZywgW3RoaXMuX2VsZW1lbnRdKTtcbiAgfVxuICBfZ2V0UG9wcGVyQ29uZmlnKGF0dGFjaG1lbnQpIHtcbiAgICBjb25zdCBkZWZhdWx0QnNQb3BwZXJDb25maWcgPSB7XG4gICAgICBwbGFjZW1lbnQ6IGF0dGFjaG1lbnQsXG4gICAgICBtb2RpZmllcnM6IFt7XG4gICAgICAgIG5hbWU6ICdmbGlwJyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGZhbGxiYWNrUGxhY2VtZW50czogdGhpcy5fY29uZmlnLmZhbGxiYWNrUGxhY2VtZW50c1xuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgb2Zmc2V0OiB0aGlzLl9nZXRPZmZzZXQoKVxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgYm91bmRhcnk6IHRoaXMuX2NvbmZpZy5ib3VuZGFyeVxuICAgICAgICB9XG4gICAgICB9LCB7XG4gICAgICAgIG5hbWU6ICdhcnJvdycsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBlbGVtZW50OiBgLiR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfS1hcnJvd2BcbiAgICAgICAgfVxuICAgICAgfSwge1xuICAgICAgICBuYW1lOiAncHJlU2V0UGxhY2VtZW50JyxcbiAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgcGhhc2U6ICdiZWZvcmVNYWluJyxcbiAgICAgICAgZm46IGRhdGEgPT4ge1xuICAgICAgICAgIC8vIFByZS1zZXQgUG9wcGVyJ3MgcGxhY2VtZW50IGF0dHJpYnV0ZSBpbiBvcmRlciB0byByZWFkIHRoZSBhcnJvdyBzaXplcyBwcm9wZXJseS5cbiAgICAgICAgICAvLyBPdGhlcndpc2UsIFBvcHBlciBtaXhlcyB1cCB0aGUgd2lkdGggYW5kIGhlaWdodCBkaW1lbnNpb25zIHNpbmNlIHRoZSBpbml0aWFsIGFycm93IHN0eWxlIGlzIGZvciB0b3AgcGxhY2VtZW50XG4gICAgICAgICAgdGhpcy5fZ2V0VGlwRWxlbWVudCgpLnNldEF0dHJpYnV0ZSgnZGF0YS1wb3BwZXItcGxhY2VtZW50JywgZGF0YS5zdGF0ZS5wbGFjZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZmF1bHRCc1BvcHBlckNvbmZpZyxcbiAgICAgIC4uLmV4ZWN1dGUodGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZywgW2RlZmF1bHRCc1BvcHBlckNvbmZpZ10pXG4gICAgfTtcbiAgfVxuICBfc2V0TGlzdGVuZXJzKCkge1xuICAgIGNvbnN0IHRyaWdnZXJzID0gdGhpcy5fY29uZmlnLnRyaWdnZXIuc3BsaXQoJyAnKTtcbiAgICBmb3IgKGNvbnN0IHRyaWdnZXIgb2YgdHJpZ2dlcnMpIHtcbiAgICAgIGlmICh0cmlnZ2VyID09PSAnY2xpY2snKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9DTElDSyQxKSwgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudCk7XG4gICAgICAgICAgY29udGV4dC50b2dnbGUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2UgaWYgKHRyaWdnZXIgIT09IFRSSUdHRVJfTUFOVUFMKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50SW4gPSB0cmlnZ2VyID09PSBUUklHR0VSX0hPVkVSID8gdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfTU9VU0VFTlRFUikgOiB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9GT0NVU0lOJDEpO1xuICAgICAgICBjb25zdCBldmVudE91dCA9IHRyaWdnZXIgPT09IFRSSUdHRVJfSE9WRVIgPyB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9NT1VTRUxFQVZFKSA6IHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX0ZPQ1VTT1VUJDEpO1xuICAgICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgZXZlbnRJbiwgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudCk7XG4gICAgICAgICAgY29udGV4dC5fYWN0aXZlVHJpZ2dlcltldmVudC50eXBlID09PSAnZm9jdXNpbicgPyBUUklHR0VSX0ZPQ1VTIDogVFJJR0dFUl9IT1ZFUl0gPSB0cnVlO1xuICAgICAgICAgIGNvbnRleHQuX2VudGVyKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgZXZlbnRPdXQsIHRoaXMuX2NvbmZpZy5zZWxlY3RvciwgZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQoZXZlbnQpO1xuICAgICAgICAgIGNvbnRleHQuX2FjdGl2ZVRyaWdnZXJbZXZlbnQudHlwZSA9PT0gJ2ZvY3Vzb3V0JyA/IFRSSUdHRVJfRk9DVVMgOiBUUklHR0VSX0hPVkVSXSA9IGNvbnRleHQuX2VsZW1lbnQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCk7XG4gICAgICAgICAgY29udGV4dC5fbGVhdmUoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZWxlbWVudCkge1xuICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTU9EQUwpLCBFVkVOVF9NT0RBTF9ISURFLCB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyKTtcbiAgfVxuICBfZml4VGl0bGUoKSB7XG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgndGl0bGUnKTtcbiAgICBpZiAoIXRpdGxlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICghdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKSAmJiAhdGhpcy5fZWxlbWVudC50ZXh0Q29udGVudC50cmltKCkpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdGl0bGUpO1xuICAgIH1cbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScsIHRpdGxlKTsgLy8gRE8gTk9UIFVTRSBJVC4gSXMgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgndGl0bGUnKTtcbiAgfVxuICBfZW50ZXIoKSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24oKSB8fCB0aGlzLl9pc0hvdmVyZWQpIHtcbiAgICAgIHRoaXMuX2lzSG92ZXJlZCA9IHRydWU7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2lzSG92ZXJlZCA9IHRydWU7XG4gICAgdGhpcy5fc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICAgIHRoaXMuc2hvdygpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuX2NvbmZpZy5kZWxheS5zaG93KTtcbiAgfVxuICBfbGVhdmUoKSB7XG4gICAgaWYgKHRoaXMuX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9pc0hvdmVyZWQgPSBmYWxzZTtcbiAgICB0aGlzLl9zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuX2NvbmZpZy5kZWxheS5oaWRlKTtcbiAgfVxuICBfc2V0VGltZW91dChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpO1xuICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGhhbmRsZXIsIHRpbWVvdXQpO1xuICB9XG4gIF9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2FjdGl2ZVRyaWdnZXIpLmluY2x1ZGVzKHRydWUpO1xuICB9XG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uc3QgZGF0YUF0dHJpYnV0ZXMgPSBNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlcyh0aGlzLl9lbGVtZW50KTtcbiAgICBmb3IgKGNvbnN0IGRhdGFBdHRyaWJ1dGUgb2YgT2JqZWN0LmtleXMoZGF0YUF0dHJpYnV0ZXMpKSB7XG4gICAgICBpZiAoRElTQUxMT1dFRF9BVFRSSUJVVEVTLmhhcyhkYXRhQXR0cmlidXRlKSkge1xuICAgICAgICBkZWxldGUgZGF0YUF0dHJpYnV0ZXNbZGF0YUF0dHJpYnV0ZV07XG4gICAgICB9XG4gICAgfVxuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4uLmRhdGFBdHRyaWJ1dGVzLFxuICAgICAgLi4uKHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KVxuICAgIH07XG4gICAgY29uZmlnID0gdGhpcy5fbWVyZ2VDb25maWdPYmooY29uZmlnKTtcbiAgICBjb25maWcgPSB0aGlzLl9jb25maWdBZnRlck1lcmdlKGNvbmZpZyk7XG4gICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZyk7XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICBjb25maWcuY29udGFpbmVyID0gY29uZmlnLmNvbnRhaW5lciA9PT0gZmFsc2UgPyBkb2N1bWVudC5ib2R5IDogZ2V0RWxlbWVudChjb25maWcuY29udGFpbmVyKTtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy5kZWxheSA9PT0gJ251bWJlcicpIHtcbiAgICAgIGNvbmZpZy5kZWxheSA9IHtcbiAgICAgICAgc2hvdzogY29uZmlnLmRlbGF5LFxuICAgICAgICBoaWRlOiBjb25maWcuZGVsYXlcbiAgICAgIH07XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29uZmlnLnRpdGxlID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLnRpdGxlID0gY29uZmlnLnRpdGxlLnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29uZmlnLmNvbnRlbnQgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25maWcuY29udGVudCA9IGNvbmZpZy5jb250ZW50LnRvU3RyaW5nKCk7XG4gICAgfVxuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2dldERlbGVnYXRlQ29uZmlnKCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHt9O1xuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2NvbmZpZykpIHtcbiAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRba2V5XSAhPT0gdmFsdWUpIHtcbiAgICAgICAgY29uZmlnW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uZmlnLnNlbGVjdG9yID0gZmFsc2U7XG4gICAgY29uZmlnLnRyaWdnZXIgPSAnbWFudWFsJztcblxuICAgIC8vIEluIHRoZSBmdXR1cmUgY2FuIGJlIHJlcGxhY2VkIHdpdGg6XG4gICAgLy8gY29uc3Qga2V5c1dpdGhEaWZmZXJlbnRWYWx1ZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLl9jb25maWcpLmZpbHRlcihlbnRyeSA9PiB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRbZW50cnlbMF1dICE9PSB0aGlzLl9jb25maWdbZW50cnlbMF1dKVxuICAgIC8vIGBPYmplY3QuZnJvbUVudHJpZXMoa2V5c1dpdGhEaWZmZXJlbnRWYWx1ZXMpYFxuICAgIHJldHVybiBjb25maWc7XG4gIH1cbiAgX2Rpc3Bvc2VQb3BwZXIoKSB7XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuX3BvcHBlciA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLnRpcCkge1xuICAgICAgdGhpcy50aXAucmVtb3ZlKCk7XG4gICAgICB0aGlzLnRpcCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gVG9vbHRpcC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZyk7XG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYCk7XG4gICAgICB9XG4gICAgICBkYXRhW2NvbmZpZ10oKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihUb29sdGlwKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHBvcG92ZXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSQzID0gJ3BvcG92ZXInO1xuY29uc3QgU0VMRUNUT1JfVElUTEUgPSAnLnBvcG92ZXItaGVhZGVyJztcbmNvbnN0IFNFTEVDVE9SX0NPTlRFTlQgPSAnLnBvcG92ZXItYm9keSc7XG5jb25zdCBEZWZhdWx0JDIgPSB7XG4gIC4uLlRvb2x0aXAuRGVmYXVsdCxcbiAgY29udGVudDogJycsXG4gIG9mZnNldDogWzAsIDhdLFxuICBwbGFjZW1lbnQ6ICdyaWdodCcsXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInBvcG92ZXJcIiByb2xlPVwidG9vbHRpcFwiPicgKyAnPGRpdiBjbGFzcz1cInBvcG92ZXItYXJyb3dcIj48L2Rpdj4nICsgJzxoMyBjbGFzcz1cInBvcG92ZXItaGVhZGVyXCI+PC9oMz4nICsgJzxkaXYgY2xhc3M9XCJwb3BvdmVyLWJvZHlcIj48L2Rpdj4nICsgJzwvZGl2PicsXG4gIHRyaWdnZXI6ICdjbGljaydcbn07XG5jb25zdCBEZWZhdWx0VHlwZSQyID0ge1xuICAuLi5Ub29sdGlwLkRlZmF1bHRUeXBlLFxuICBjb250ZW50OiAnKG51bGx8c3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb24pJ1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgUG9wb3ZlciBleHRlbmRzIFRvb2x0aXAge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdCQyO1xuICB9XG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlJDI7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDM7XG4gIH1cblxuICAvLyBPdmVycmlkZXNcbiAgX2lzV2l0aENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldFRpdGxlKCkgfHwgdGhpcy5fZ2V0Q29udGVudCgpO1xuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZ2V0Q29udGVudEZvclRlbXBsYXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBbU0VMRUNUT1JfVElUTEVdOiB0aGlzLl9nZXRUaXRsZSgpLFxuICAgICAgW1NFTEVDVE9SX0NPTlRFTlRdOiB0aGlzLl9nZXRDb250ZW50KClcbiAgICB9O1xuICB9XG4gIF9nZXRDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0aGlzLl9jb25maWcuY29udGVudCk7XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBQb3BvdmVyLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFBvcG92ZXIpO1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgc2Nyb2xsc3B5LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUkMiA9ICdzY3JvbGxzcHknO1xuY29uc3QgREFUQV9LRVkkMiA9ICdicy5zY3JvbGxzcHknO1xuY29uc3QgRVZFTlRfS0VZJDIgPSBgLiR7REFUQV9LRVkkMn1gO1xuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSc7XG5jb25zdCBFVkVOVF9BQ1RJVkFURSA9IGBhY3RpdmF0ZSR7RVZFTlRfS0VZJDJ9YDtcbmNvbnN0IEVWRU5UX0NMSUNLID0gYGNsaWNrJHtFVkVOVF9LRVkkMn1gO1xuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSQxID0gYGxvYWQke0VWRU5UX0tFWSQyfSR7REFUQV9BUElfS0VZfWA7XG5jb25zdCBDTEFTU19OQU1FX0RST1BET1dOX0lURU0gPSAnZHJvcGRvd24taXRlbSc7XG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSQxID0gJ2FjdGl2ZSc7XG5jb25zdCBTRUxFQ1RPUl9EQVRBX1NQWSA9ICdbZGF0YS1icy1zcHk9XCJzY3JvbGxcIl0nO1xuY29uc3QgU0VMRUNUT1JfVEFSR0VUX0xJTktTID0gJ1tocmVmXSc7XG5jb25zdCBTRUxFQ1RPUl9OQVZfTElTVF9HUk9VUCA9ICcubmF2LCAubGlzdC1ncm91cCc7XG5jb25zdCBTRUxFQ1RPUl9OQVZfTElOS1MgPSAnLm5hdi1saW5rJztcbmNvbnN0IFNFTEVDVE9SX05BVl9JVEVNUyA9ICcubmF2LWl0ZW0nO1xuY29uc3QgU0VMRUNUT1JfTElTVF9JVEVNUyA9ICcubGlzdC1ncm91cC1pdGVtJztcbmNvbnN0IFNFTEVDVE9SX0xJTktfSVRFTVMgPSBgJHtTRUxFQ1RPUl9OQVZfTElOS1N9LCAke1NFTEVDVE9SX05BVl9JVEVNU30gPiAke1NFTEVDVE9SX05BVl9MSU5LU30sICR7U0VMRUNUT1JfTElTVF9JVEVNU31gO1xuY29uc3QgU0VMRUNUT1JfRFJPUERPV04gPSAnLmRyb3Bkb3duJztcbmNvbnN0IFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSQxID0gJy5kcm9wZG93bi10b2dnbGUnO1xuY29uc3QgRGVmYXVsdCQxID0ge1xuICBvZmZzZXQ6IG51bGwsXG4gIC8vIFRPRE86IHY2IEBkZXByZWNhdGVkLCBrZWVwIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zXG4gIHJvb3RNYXJnaW46ICcwcHggMHB4IC0yNSUnLFxuICBzbW9vdGhTY3JvbGw6IGZhbHNlLFxuICB0YXJnZXQ6IG51bGwsXG4gIHRocmVzaG9sZDogWzAuMSwgMC41LCAxXVxufTtcbmNvbnN0IERlZmF1bHRUeXBlJDEgPSB7XG4gIG9mZnNldDogJyhudW1iZXJ8bnVsbCknLFxuICAvLyBUT0RPIHY2IEBkZXByZWNhdGVkLCBrZWVwIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zXG4gIHJvb3RNYXJnaW46ICdzdHJpbmcnLFxuICBzbW9vdGhTY3JvbGw6ICdib29sZWFuJyxcbiAgdGFyZ2V0OiAnZWxlbWVudCcsXG4gIHRocmVzaG9sZDogJ2FycmF5J1xufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgU2Nyb2xsU3B5IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZyk7XG5cbiAgICAvLyB0aGlzLl9lbGVtZW50IGlzIHRoZSBvYnNlcnZhYmxlc0NvbnRhaW5lciBhbmQgY29uZmlnLnRhcmdldCB0aGUgbWVudSBsaW5rcyB3cmFwcGVyXG4gICAgdGhpcy5fdGFyZ2V0TGlua3MgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX3Jvb3RFbGVtZW50ID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9lbGVtZW50KS5vdmVyZmxvd1kgPT09ICd2aXNpYmxlJyA/IG51bGwgOiB0aGlzLl9lbGVtZW50O1xuICAgIHRoaXMuX2FjdGl2ZVRhcmdldCA9IG51bGw7XG4gICAgdGhpcy5fb2JzZXJ2ZXIgPSBudWxsO1xuICAgIHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YSA9IHtcbiAgICAgIHZpc2libGVFbnRyeVRvcDogMCxcbiAgICAgIHBhcmVudFNjcm9sbFRvcDogMFxuICAgIH07XG4gICAgdGhpcy5yZWZyZXNoKCk7IC8vIGluaXRpYWxpemVcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0JDE7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGUkMTtcbiAgfVxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUUkMjtcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICByZWZyZXNoKCkge1xuICAgIHRoaXMuX2luaXRpYWxpemVUYXJnZXRzQW5kT2JzZXJ2YWJsZXMoKTtcbiAgICB0aGlzLl9tYXliZUVuYWJsZVNtb290aFNjcm9sbCgpO1xuICAgIGlmICh0aGlzLl9vYnNlcnZlcikge1xuICAgICAgdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vYnNlcnZlciA9IHRoaXMuX2dldE5ld09ic2VydmVyKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiB0aGlzLl9vYnNlcnZhYmxlU2VjdGlvbnMudmFsdWVzKCkpIHtcbiAgICAgIHRoaXMuX29ic2VydmVyLm9ic2VydmUoc2VjdGlvbik7XG4gICAgfVxuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgLy8gVE9ETzogb24gdjYgdGFyZ2V0IHNob3VsZCBiZSBnaXZlbiBleHBsaWNpdGx5ICYgcmVtb3ZlIHRoZSB7dGFyZ2V0OiAnc3MtdGFyZ2V0J30gY2FzZVxuICAgIGNvbmZpZy50YXJnZXQgPSBnZXRFbGVtZW50KGNvbmZpZy50YXJnZXQpIHx8IGRvY3VtZW50LmJvZHk7XG5cbiAgICAvLyBUT0RPOiB2NiBPbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zLiBVc2Ugcm9vdE1hcmdpbiBvbmx5XG4gICAgY29uZmlnLnJvb3RNYXJnaW4gPSBjb25maWcub2Zmc2V0ID8gYCR7Y29uZmlnLm9mZnNldH1weCAwcHggLTMwJWAgOiBjb25maWcucm9vdE1hcmdpbjtcbiAgICBpZiAodHlwZW9mIGNvbmZpZy50aHJlc2hvbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25maWcudGhyZXNob2xkID0gY29uZmlnLnRocmVzaG9sZC5zcGxpdCgnLCcpLm1hcCh2YWx1ZSA9PiBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG4gIF9tYXliZUVuYWJsZVNtb290aFNjcm9sbCgpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5zbW9vdGhTY3JvbGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB1bnJlZ2lzdGVyIGFueSBwcmV2aW91cyBsaXN0ZW5lcnNcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2NvbmZpZy50YXJnZXQsIEVWRU5UX0NMSUNLKTtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fY29uZmlnLnRhcmdldCwgRVZFTlRfQ0xJQ0ssIFNFTEVDVE9SX1RBUkdFVF9MSU5LUywgZXZlbnQgPT4ge1xuICAgICAgY29uc3Qgb2JzZXJ2YWJsZVNlY3Rpb24gPSB0aGlzLl9vYnNlcnZhYmxlU2VjdGlvbnMuZ2V0KGV2ZW50LnRhcmdldC5oYXNoKTtcbiAgICAgIGlmIChvYnNlcnZhYmxlU2VjdGlvbikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBjb25zdCByb290ID0gdGhpcy5fcm9vdEVsZW1lbnQgfHwgd2luZG93O1xuICAgICAgICBjb25zdCBoZWlnaHQgPSBvYnNlcnZhYmxlU2VjdGlvbi5vZmZzZXRUb3AgLSB0aGlzLl9lbGVtZW50Lm9mZnNldFRvcDtcbiAgICAgICAgaWYgKHJvb3Quc2Nyb2xsVG8pIHtcbiAgICAgICAgICByb290LnNjcm9sbFRvKHtcbiAgICAgICAgICAgIHRvcDogaGVpZ2h0LFxuICAgICAgICAgICAgYmVoYXZpb3I6ICdzbW9vdGgnXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hyb21lIDYwIGRvZXNuJ3Qgc3VwcG9ydCBgc2Nyb2xsVG9gXG4gICAgICAgIHJvb3Quc2Nyb2xsVG9wID0gaGVpZ2h0O1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIF9nZXROZXdPYnNlcnZlcigpIHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcm9vdDogdGhpcy5fcm9vdEVsZW1lbnQsXG4gICAgICB0aHJlc2hvbGQ6IHRoaXMuX2NvbmZpZy50aHJlc2hvbGQsXG4gICAgICByb290TWFyZ2luOiB0aGlzLl9jb25maWcucm9vdE1hcmdpblxuICAgIH07XG4gICAgcmV0dXJuIG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihlbnRyaWVzID0+IHRoaXMuX29ic2VydmVyQ2FsbGJhY2soZW50cmllcyksIG9wdGlvbnMpO1xuICB9XG5cbiAgLy8gVGhlIGxvZ2ljIG9mIHNlbGVjdGlvblxuICBfb2JzZXJ2ZXJDYWxsYmFjayhlbnRyaWVzKSB7XG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGVudHJ5ID0+IHRoaXMuX3RhcmdldExpbmtzLmdldChgIyR7ZW50cnkudGFyZ2V0LmlkfWApO1xuICAgIGNvbnN0IGFjdGl2YXRlID0gZW50cnkgPT4ge1xuICAgICAgdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnZpc2libGVFbnRyeVRvcCA9IGVudHJ5LnRhcmdldC5vZmZzZXRUb3A7XG4gICAgICB0aGlzLl9wcm9jZXNzKHRhcmdldEVsZW1lbnQoZW50cnkpKTtcbiAgICB9O1xuICAgIGNvbnN0IHBhcmVudFNjcm9sbFRvcCA9ICh0aGlzLl9yb290RWxlbWVudCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLnNjcm9sbFRvcDtcbiAgICBjb25zdCB1c2VyU2Nyb2xsc0Rvd24gPSBwYXJlbnRTY3JvbGxUb3AgPj0gdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnBhcmVudFNjcm9sbFRvcDtcbiAgICB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEucGFyZW50U2Nyb2xsVG9wID0gcGFyZW50U2Nyb2xsVG9wO1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgaWYgKCFlbnRyeS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSBudWxsO1xuICAgICAgICB0aGlzLl9jbGVhckFjdGl2ZUNsYXNzKHRhcmdldEVsZW1lbnQoZW50cnkpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBlbnRyeUlzTG93ZXJUaGFuUHJldmlvdXMgPSBlbnRyeS50YXJnZXQub2Zmc2V0VG9wID49IHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YS52aXNpYmxlRW50cnlUb3A7XG4gICAgICAvLyBpZiB3ZSBhcmUgc2Nyb2xsaW5nIGRvd24sIHBpY2sgdGhlIGJpZ2dlciBvZmZzZXRUb3BcbiAgICAgIGlmICh1c2VyU2Nyb2xsc0Rvd24gJiYgZW50cnlJc0xvd2VyVGhhblByZXZpb3VzKSB7XG4gICAgICAgIGFjdGl2YXRlKGVudHJ5KTtcbiAgICAgICAgLy8gaWYgcGFyZW50IGlzbid0IHNjcm9sbGVkLCBsZXQncyBrZWVwIHRoZSBmaXJzdCB2aXNpYmxlIGl0ZW0sIGJyZWFraW5nIHRoZSBpdGVyYXRpb25cbiAgICAgICAgaWYgKCFwYXJlbnRTY3JvbGxUb3ApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHdlIGFyZSBzY3JvbGxpbmcgdXAsIHBpY2sgdGhlIHNtYWxsZXN0IG9mZnNldFRvcFxuICAgICAgaWYgKCF1c2VyU2Nyb2xsc0Rvd24gJiYgIWVudHJ5SXNMb3dlclRoYW5QcmV2aW91cykge1xuICAgICAgICBhY3RpdmF0ZShlbnRyeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIF9pbml0aWFsaXplVGFyZ2V0c0FuZE9ic2VydmFibGVzKCkge1xuICAgIHRoaXMuX3RhcmdldExpbmtzID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuX29ic2VydmFibGVTZWN0aW9ucyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCB0YXJnZXRMaW5rcyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfVEFSR0VUX0xJTktTLCB0aGlzLl9jb25maWcudGFyZ2V0KTtcbiAgICBmb3IgKGNvbnN0IGFuY2hvciBvZiB0YXJnZXRMaW5rcykge1xuICAgICAgLy8gZW5zdXJlIHRoYXQgdGhlIGFuY2hvciBoYXMgYW4gaWQgYW5kIGlzIG5vdCBkaXNhYmxlZFxuICAgICAgaWYgKCFhbmNob3IuaGFzaCB8fCBpc0Rpc2FibGVkKGFuY2hvcikpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjb25zdCBvYnNlcnZhYmxlU2VjdGlvbiA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoZGVjb2RlVVJJKGFuY2hvci5oYXNoKSwgdGhpcy5fZWxlbWVudCk7XG5cbiAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBvYnNlcnZhYmxlU2VjdGlvbiBleGlzdHMgJiBpcyB2aXNpYmxlXG4gICAgICBpZiAoaXNWaXNpYmxlKG9ic2VydmFibGVTZWN0aW9uKSkge1xuICAgICAgICB0aGlzLl90YXJnZXRMaW5rcy5zZXQoZGVjb2RlVVJJKGFuY2hvci5oYXNoKSwgYW5jaG9yKTtcbiAgICAgICAgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zLnNldChhbmNob3IuaGFzaCwgb2JzZXJ2YWJsZVNlY3Rpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBfcHJvY2Vzcyh0YXJnZXQpIHtcbiAgICBpZiAodGhpcy5fYWN0aXZlVGFyZ2V0ID09PSB0YXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fY2xlYXJBY3RpdmVDbGFzcyh0aGlzLl9jb25maWcudGFyZ2V0KTtcbiAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSB0YXJnZXQ7XG4gICAgdGFyZ2V0LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUkMSk7XG4gICAgdGhpcy5fYWN0aXZhdGVQYXJlbnRzKHRhcmdldCk7XG4gICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfQUNUSVZBVEUsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRhcmdldFxuICAgIH0pO1xuICB9XG4gIF9hY3RpdmF0ZVBhcmVudHModGFyZ2V0KSB7XG4gICAgLy8gQWN0aXZhdGUgZHJvcGRvd24gcGFyZW50c1xuICAgIGlmICh0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUERPV05fSVRFTSkpIHtcbiAgICAgIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFJDEsIHRhcmdldC5jbG9zZXN0KFNFTEVDVE9SX0RST1BET1dOKSkuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSQxKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBsaXN0R3JvdXAgb2YgU2VsZWN0b3JFbmdpbmUucGFyZW50cyh0YXJnZXQsIFNFTEVDVE9SX05BVl9MSVNUX0dST1VQKSkge1xuICAgICAgLy8gU2V0IHRyaWdnZXJlZCBsaW5rcyBwYXJlbnRzIGFzIGFjdGl2ZVxuICAgICAgLy8gV2l0aCBib3RoIDx1bD4gYW5kIDxuYXY+IG1hcmt1cCBhIHBhcmVudCBpcyB0aGUgcHJldmlvdXMgc2libGluZyBvZiBhbnkgbmF2IGFuY2VzdG9yXG4gICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgU2VsZWN0b3JFbmdpbmUucHJldihsaXN0R3JvdXAsIFNFTEVDVE9SX0xJTktfSVRFTVMpKSB7XG4gICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSQxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgX2NsZWFyQWN0aXZlQ2xhc3MocGFyZW50KSB7XG4gICAgcGFyZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUkMSk7XG4gICAgY29uc3QgYWN0aXZlTm9kZXMgPSBTZWxlY3RvckVuZ2luZS5maW5kKGAke1NFTEVDVE9SX1RBUkdFVF9MSU5LU30uJHtDTEFTU19OQU1FX0FDVElWRSQxfWAsIHBhcmVudCk7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIGFjdGl2ZU5vZGVzKSB7XG4gICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUkMSk7XG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gU2Nyb2xsU3B5LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YVtjb25maWddID09PSB1bmRlZmluZWQgfHwgY29uZmlnLnN0YXJ0c1dpdGgoJ18nKSB8fCBjb25maWcgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJJDEsICgpID0+IHtcbiAgZm9yIChjb25zdCBzcHkgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1NQWSkpIHtcbiAgICBTY3JvbGxTcHkuZ2V0T3JDcmVhdGVJbnN0YW5jZShzcHkpO1xuICB9XG59KTtcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oU2Nyb2xsU3B5KTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHRhYi5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FJDEgPSAndGFiJztcbmNvbnN0IERBVEFfS0VZJDEgPSAnYnMudGFiJztcbmNvbnN0IEVWRU5UX0tFWSQxID0gYC4ke0RBVEFfS0VZJDF9YDtcbmNvbnN0IEVWRU5UX0hJREUkMSA9IGBoaWRlJHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgRVZFTlRfSElEREVOJDEgPSBgaGlkZGVuJHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgRVZFTlRfU0hPVyQxID0gYHNob3cke0VWRU5UX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9TSE9XTiQxID0gYHNob3duJHtFVkVOVF9LRVkkMX1gO1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9LRVlET1dOID0gYGtleWRvd24ke0VWRU5UX0tFWSQxfWA7XG5jb25zdCBFVkVOVF9MT0FEX0RBVEFfQVBJID0gYGxvYWQke0VWRU5UX0tFWSQxfWA7XG5jb25zdCBBUlJPV19MRUZUX0tFWSA9ICdBcnJvd0xlZnQnO1xuY29uc3QgQVJST1dfUklHSFRfS0VZID0gJ0Fycm93UmlnaHQnO1xuY29uc3QgQVJST1dfVVBfS0VZID0gJ0Fycm93VXAnO1xuY29uc3QgQVJST1dfRE9XTl9LRVkgPSAnQXJyb3dEb3duJztcbmNvbnN0IEhPTUVfS0VZID0gJ0hvbWUnO1xuY29uc3QgRU5EX0tFWSA9ICdFbmQnO1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUgPSAnYWN0aXZlJztcbmNvbnN0IENMQVNTX05BTUVfRkFERSQxID0gJ2ZhZGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XJDEgPSAnc2hvdyc7XG5jb25zdCBDTEFTU19EUk9QRE9XTiA9ICdkcm9wZG93bic7XG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUgPSAnLmRyb3Bkb3duLXRvZ2dsZSc7XG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTl9NRU5VID0gJy5kcm9wZG93bi1tZW51JztcbmNvbnN0IE5PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUgPSBgOm5vdCgke1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRX0pYDtcbmNvbnN0IFNFTEVDVE9SX1RBQl9QQU5FTCA9ICcubGlzdC1ncm91cCwgLm5hdiwgW3JvbGU9XCJ0YWJsaXN0XCJdJztcbmNvbnN0IFNFTEVDVE9SX09VVEVSID0gJy5uYXYtaXRlbSwgLmxpc3QtZ3JvdXAtaXRlbSc7XG5jb25zdCBTRUxFQ1RPUl9JTk5FUiA9IGAubmF2LWxpbmske05PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEV9LCAubGlzdC1ncm91cC1pdGVtJHtOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFfSwgW3JvbGU9XCJ0YWJcIl0ke05PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEV9YDtcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFID0gJ1tkYXRhLWJzLXRvZ2dsZT1cInRhYlwiXSwgW2RhdGEtYnMtdG9nZ2xlPVwicGlsbFwiXSwgW2RhdGEtYnMtdG9nZ2xlPVwibGlzdFwiXSc7IC8vIFRPRE86IGNvdWxkIG9ubHkgYmUgYHRhYmAgaW4gdjZcbmNvbnN0IFNFTEVDVE9SX0lOTkVSX0VMRU0gPSBgJHtTRUxFQ1RPUl9JTk5FUn0sICR7U0VMRUNUT1JfREFUQV9UT0dHTEV9YDtcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFX0FDVElWRSA9IGAuJHtDTEFTU19OQU1FX0FDVElWRX1bZGF0YS1icy10b2dnbGU9XCJ0YWJcIl0sIC4ke0NMQVNTX05BTUVfQUNUSVZFfVtkYXRhLWJzLXRvZ2dsZT1cInBpbGxcIl0sIC4ke0NMQVNTX05BTUVfQUNUSVZFfVtkYXRhLWJzLXRvZ2dsZT1cImxpc3RcIl1gO1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBUYWIgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCkge1xuICAgIHN1cGVyKGVsZW1lbnQpO1xuICAgIHRoaXMuX3BhcmVudCA9IHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9UQUJfUEFORUwpO1xuICAgIGlmICghdGhpcy5fcGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgICAvLyBUT0RPOiBzaG91bGQgdGhyb3cgZXhjZXB0aW9uIGluIHY2XG4gICAgICAvLyB0aHJvdyBuZXcgVHlwZUVycm9yKGAke2VsZW1lbnQub3V0ZXJIVE1MfSBoYXMgbm90IGEgdmFsaWQgcGFyZW50ICR7U0VMRUNUT1JfSU5ORVJfRUxFTX1gKVxuICAgIH1cblxuICAgIC8vIFNldCB1cCBpbml0aWFsIGFyaWEgYXR0cmlidXRlc1xuICAgIHRoaXMuX3NldEluaXRpYWxBdHRyaWJ1dGVzKHRoaXMuX3BhcmVudCwgdGhpcy5fZ2V0Q2hpbGRyZW4oKSk7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV04sIGV2ZW50ID0+IHRoaXMuX2tleWRvd24oZXZlbnQpKTtcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FJDE7XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgc2hvdygpIHtcbiAgICAvLyBTaG93cyB0aGlzIGVsZW0gYW5kIGRlYWN0aXZhdGUgdGhlIGFjdGl2ZSBzaWJsaW5nIGlmIGV4aXN0c1xuICAgIGNvbnN0IGlubmVyRWxlbSA9IHRoaXMuX2VsZW1lbnQ7XG4gICAgaWYgKHRoaXMuX2VsZW1Jc0FjdGl2ZShpbm5lckVsZW0pKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gU2VhcmNoIGZvciBhY3RpdmUgdGFiIG9uIHNhbWUgcGFyZW50IHRvIGRlYWN0aXZhdGUgaXRcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLl9nZXRBY3RpdmVFbGVtKCk7XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gYWN0aXZlID8gRXZlbnRIYW5kbGVyLnRyaWdnZXIoYWN0aXZlLCBFVkVOVF9ISURFJDEsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IGlubmVyRWxlbVxuICAgIH0pIDogbnVsbDtcbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcihpbm5lckVsZW0sIEVWRU5UX1NIT1ckMSwge1xuICAgICAgcmVsYXRlZFRhcmdldDogYWN0aXZlXG4gICAgfSk7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkIHx8IGhpZGVFdmVudCAmJiBoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9kZWFjdGl2YXRlKGFjdGl2ZSwgaW5uZXJFbGVtKTtcbiAgICB0aGlzLl9hY3RpdmF0ZShpbm5lckVsZW0sIGFjdGl2ZSk7XG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9hY3RpdmF0ZShlbGVtZW50LCByZWxhdGVkRWxlbSkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpO1xuICAgIHRoaXMuX2FjdGl2YXRlKFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCkpOyAvLyBTZWFyY2ggYW5kIGFjdGl2YXRlL3Nob3cgdGhlIHByb3BlciBzZWN0aW9uXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSgncm9sZScpICE9PSAndGFiJykge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XJDEpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgdHJ1ZSk7XG4gICAgICB0aGlzLl90b2dnbGVEcm9wRG93bihlbGVtZW50LCB0cnVlKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKGVsZW1lbnQsIEVWRU5UX1NIT1dOJDEsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogcmVsYXRlZEVsZW1cbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgZWxlbWVudCwgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFJDEpKTtcbiAgfVxuICBfZGVhY3RpdmF0ZShlbGVtZW50LCByZWxhdGVkRWxlbSkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUpO1xuICAgIGVsZW1lbnQuYmx1cigpO1xuICAgIHRoaXMuX2RlYWN0aXZhdGUoU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3RvcihlbGVtZW50KSk7IC8vIFNlYXJjaCBhbmQgZGVhY3RpdmF0ZSB0aGUgc2hvd24gc2VjdGlvbiB0b29cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdyb2xlJykgIT09ICd0YWInKSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1ckMSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgZmFsc2UpO1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJyk7XG4gICAgICB0aGlzLl90b2dnbGVEcm9wRG93bihlbGVtZW50LCBmYWxzZSk7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcihlbGVtZW50LCBFVkVOVF9ISURERU4kMSwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiByZWxhdGVkRWxlbVxuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCBlbGVtZW50LCBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUkMSkpO1xuICB9XG4gIF9rZXlkb3duKGV2ZW50KSB7XG4gICAgaWYgKCFbQVJST1dfTEVGVF9LRVksIEFSUk9XX1JJR0hUX0tFWSwgQVJST1dfVVBfS0VZLCBBUlJPV19ET1dOX0tFWSwgSE9NRV9LRVksIEVORF9LRVldLmluY2x1ZGVzKGV2ZW50LmtleSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7IC8vIHN0b3BQcm9wYWdhdGlvbi9wcmV2ZW50RGVmYXVsdCBib3RoIGFkZGVkIHRvIHN1cHBvcnQgdXAvZG93biBrZXlzIHdpdGhvdXQgc2Nyb2xsaW5nIHRoZSBwYWdlXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuX2dldENoaWxkcmVuKCkuZmlsdGVyKGVsZW1lbnQgPT4gIWlzRGlzYWJsZWQoZWxlbWVudCkpO1xuICAgIGxldCBuZXh0QWN0aXZlRWxlbWVudDtcbiAgICBpZiAoW0hPTUVfS0VZLCBFTkRfS0VZXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICBuZXh0QWN0aXZlRWxlbWVudCA9IGNoaWxkcmVuW2V2ZW50LmtleSA9PT0gSE9NRV9LRVkgPyAwIDogY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGlzTmV4dCA9IFtBUlJPV19SSUdIVF9LRVksIEFSUk9XX0RPV05fS0VZXS5pbmNsdWRlcyhldmVudC5rZXkpO1xuICAgICAgbmV4dEFjdGl2ZUVsZW1lbnQgPSBnZXROZXh0QWN0aXZlRWxlbWVudChjaGlsZHJlbiwgZXZlbnQudGFyZ2V0LCBpc05leHQsIHRydWUpO1xuICAgIH1cbiAgICBpZiAobmV4dEFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIG5leHRBY3RpdmVFbGVtZW50LmZvY3VzKHtcbiAgICAgICAgcHJldmVudFNjcm9sbDogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBUYWIuZ2V0T3JDcmVhdGVJbnN0YW5jZShuZXh0QWN0aXZlRWxlbWVudCkuc2hvdygpO1xuICAgIH1cbiAgfVxuICBfZ2V0Q2hpbGRyZW4oKSB7XG4gICAgLy8gY29sbGVjdGlvbiBvZiBpbm5lciBlbGVtZW50c1xuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0lOTkVSX0VMRU0sIHRoaXMuX3BhcmVudCk7XG4gIH1cbiAgX2dldEFjdGl2ZUVsZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldENoaWxkcmVuKCkuZmluZChjaGlsZCA9PiB0aGlzLl9lbGVtSXNBY3RpdmUoY2hpbGQpKSB8fCBudWxsO1xuICB9XG4gIF9zZXRJbml0aWFsQXR0cmlidXRlcyhwYXJlbnQsIGNoaWxkcmVuKSB7XG4gICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHMocGFyZW50LCAncm9sZScsICd0YWJsaXN0Jyk7XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgdGhpcy5fc2V0SW5pdGlhbEF0dHJpYnV0ZXNPbkNoaWxkKGNoaWxkKTtcbiAgICB9XG4gIH1cbiAgX3NldEluaXRpYWxBdHRyaWJ1dGVzT25DaGlsZChjaGlsZCkge1xuICAgIGNoaWxkID0gdGhpcy5fZ2V0SW5uZXJFbGVtZW50KGNoaWxkKTtcbiAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuX2VsZW1Jc0FjdGl2ZShjaGlsZCk7XG4gICAgY29uc3Qgb3V0ZXJFbGVtID0gdGhpcy5fZ2V0T3V0ZXJFbGVtZW50KGNoaWxkKTtcbiAgICBjaGlsZC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCBpc0FjdGl2ZSk7XG4gICAgaWYgKG91dGVyRWxlbSAhPT0gY2hpbGQpIHtcbiAgICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKG91dGVyRWxlbSwgJ3JvbGUnLCAncHJlc2VudGF0aW9uJyk7XG4gICAgfVxuICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKTtcbiAgICB9XG4gICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHMoY2hpbGQsICdyb2xlJywgJ3RhYicpO1xuXG4gICAgLy8gc2V0IGF0dHJpYnV0ZXMgdG8gdGhlIHJlbGF0ZWQgcGFuZWwgdG9vXG4gICAgdGhpcy5fc2V0SW5pdGlhbEF0dHJpYnV0ZXNPblRhcmdldFBhbmVsKGNoaWxkKTtcbiAgfVxuICBfc2V0SW5pdGlhbEF0dHJpYnV0ZXNPblRhcmdldFBhbmVsKGNoaWxkKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3RvcihjaGlsZCk7XG4gICAgaWYgKCF0YXJnZXQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHModGFyZ2V0LCAncm9sZScsICd0YWJwYW5lbCcpO1xuICAgIGlmIChjaGlsZC5pZCkge1xuICAgICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHModGFyZ2V0LCAnYXJpYS1sYWJlbGxlZGJ5JywgYCR7Y2hpbGQuaWR9YCk7XG4gICAgfVxuICB9XG4gIF90b2dnbGVEcm9wRG93bihlbGVtZW50LCBvcGVuKSB7XG4gICAgY29uc3Qgb3V0ZXJFbGVtID0gdGhpcy5fZ2V0T3V0ZXJFbGVtZW50KGVsZW1lbnQpO1xuICAgIGlmICghb3V0ZXJFbGVtLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19EUk9QRE9XTikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgdG9nZ2xlID0gKHNlbGVjdG9yLCBjbGFzc05hbWUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKHNlbGVjdG9yLCBvdXRlckVsZW0pO1xuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGNsYXNzTmFtZSwgb3Blbik7XG4gICAgICB9XG4gICAgfTtcbiAgICB0b2dnbGUoU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFLCBDTEFTU19OQU1FX0FDVElWRSk7XG4gICAgdG9nZ2xlKFNFTEVDVE9SX0RST1BET1dOX01FTlUsIENMQVNTX05BTUVfU0hPVyQxKTtcbiAgICBvdXRlckVsZW0uc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgb3Blbik7XG4gIH1cbiAgX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKGVsZW1lbnQsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgICBpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSkpIHtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuICBfZWxlbUlzQWN0aXZlKGVsZW0pIHtcbiAgICByZXR1cm4gZWxlbS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9BQ1RJVkUpO1xuICB9XG5cbiAgLy8gVHJ5IHRvIGdldCB0aGUgaW5uZXIgZWxlbWVudCAodXN1YWxseSB0aGUgLm5hdi1saW5rKVxuICBfZ2V0SW5uZXJFbGVtZW50KGVsZW0pIHtcbiAgICByZXR1cm4gZWxlbS5tYXRjaGVzKFNFTEVDVE9SX0lOTkVSX0VMRU0pID8gZWxlbSA6IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfSU5ORVJfRUxFTSwgZWxlbSk7XG4gIH1cblxuICAvLyBUcnkgdG8gZ2V0IHRoZSBvdXRlciBlbGVtZW50ICh1c3VhbGx5IHRoZSAubmF2LWl0ZW0pXG4gIF9nZXRPdXRlckVsZW1lbnQoZWxlbSkge1xuICAgIHJldHVybiBlbGVtLmNsb3Nlc3QoU0VMRUNUT1JfT1VURVIpIHx8IGVsZW07XG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBUYWIuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoZGF0YVtjb25maWddID09PSB1bmRlZmluZWQgfHwgY29uZmlnLnN0YXJ0c1dpdGgoJ18nKSB8fCBjb25maWcgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKTtcbiAgICAgIH1cbiAgICAgIGRhdGFbY29uZmlnXSgpO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICB9XG4gIGlmIChpc0Rpc2FibGVkKHRoaXMpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpLnNob3coKTtcbn0pO1xuXG4vKipcbiAqIEluaXRpYWxpemUgb24gZm9jdXNcbiAqL1xuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSwgKCkgPT4ge1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1RPR0dMRV9BQ1RJVkUpKSB7XG4gICAgVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCk7XG4gIH1cbn0pO1xuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oVGFiKTtcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHRvYXN0LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAndG9hc3QnO1xuY29uc3QgREFUQV9LRVkgPSAnYnMudG9hc3QnO1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWA7XG5jb25zdCBFVkVOVF9NT1VTRU9WRVIgPSBgbW91c2VvdmVyJHtFVkVOVF9LRVl9YDtcbmNvbnN0IEVWRU5UX01PVVNFT1VUID0gYG1vdXNlb3V0JHtFVkVOVF9LRVl9YDtcbmNvbnN0IEVWRU5UX0ZPQ1VTSU4gPSBgZm9jdXNpbiR7RVZFTlRfS0VZfWA7XG5jb25zdCBFVkVOVF9GT0NVU09VVCA9IGBmb2N1c291dCR7RVZFTlRfS0VZfWA7XG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWA7XG5jb25zdCBFVkVOVF9TSE9XID0gYHNob3cke0VWRU5UX0tFWX1gO1xuY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gO1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFID0gJ2ZhZGUnO1xuY29uc3QgQ0xBU1NfTkFNRV9ISURFID0gJ2hpZGUnOyAvLyBAZGVwcmVjYXRlZCAtIGtlcHQgaGVyZSBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnO1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XSU5HID0gJ3Nob3dpbmcnO1xuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGFuaW1hdGlvbjogJ2Jvb2xlYW4nLFxuICBhdXRvaGlkZTogJ2Jvb2xlYW4nLFxuICBkZWxheTogJ251bWJlcidcbn07XG5jb25zdCBEZWZhdWx0ID0ge1xuICBhbmltYXRpb246IHRydWUsXG4gIGF1dG9oaWRlOiB0cnVlLFxuICBkZWxheTogNTAwMFxufTtcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgVG9hc3QgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKTtcbiAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcbiAgICB0aGlzLl9oYXNNb3VzZUludGVyYWN0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5faGFzS2V5Ym9hcmRJbnRlcmFjdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuX3NldExpc3RlbmVycygpO1xuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHQ7XG4gIH1cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGU7XG4gIH1cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FO1xuICB9XG5cbiAgLy8gUHVibGljXG4gIHNob3coKSB7XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVyk7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2NsZWFyVGltZW91dCgpO1xuICAgIGlmICh0aGlzLl9jb25maWcuYW5pbWF0aW9uKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9GQURFKTtcbiAgICB9XG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XSU5HKTtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOKTtcbiAgICAgIHRoaXMuX21heWJlU2NoZWR1bGVIaWRlKCk7XG4gICAgfTtcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9ISURFKTsgLy8gQGRlcHJlY2F0ZWRcbiAgICByZWZsb3codGhpcy5fZWxlbWVudCk7XG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVywgQ0xBU1NfTkFNRV9TSE9XSU5HKTtcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLl9lbGVtZW50LCB0aGlzLl9jb25maWcuYW5pbWF0aW9uKTtcbiAgfVxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5pc1Nob3duKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSk7XG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfSElERSk7IC8vIEBkZXByZWNhdGVkXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XSU5HLCBDTEFTU19OQU1FX1NIT1cpO1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOKTtcbiAgICB9O1xuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1dJTkcpO1xuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRoaXMuX2NvbmZpZy5hbmltYXRpb24pO1xuICB9XG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5fY2xlYXJUaW1lb3V0KCk7XG4gICAgaWYgKHRoaXMuaXNTaG93bigpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKTtcbiAgICB9XG4gICAgc3VwZXIuZGlzcG9zZSgpO1xuICB9XG4gIGlzU2hvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVyk7XG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX21heWJlU2NoZWR1bGVIaWRlKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLmF1dG9oaWRlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLl9oYXNNb3VzZUludGVyYWN0aW9uIHx8IHRoaXMuX2hhc0tleWJvYXJkSW50ZXJhY3Rpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfSwgdGhpcy5fY29uZmlnLmRlbGF5KTtcbiAgfVxuICBfb25JbnRlcmFjdGlvbihldmVudCwgaXNJbnRlcmFjdGluZykge1xuICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICAgIGNhc2UgJ21vdXNlb3V0JzpcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMuX2hhc01vdXNlSW50ZXJhY3Rpb24gPSBpc0ludGVyYWN0aW5nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICBjYXNlICdmb2N1c2luJzpcbiAgICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgICAge1xuICAgICAgICAgIHRoaXMuX2hhc0tleWJvYXJkSW50ZXJhY3Rpb24gPSBpc0ludGVyYWN0aW5nO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChpc0ludGVyYWN0aW5nKSB7XG4gICAgICB0aGlzLl9jbGVhclRpbWVvdXQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbmV4dEVsZW1lbnQgPSBldmVudC5yZWxhdGVkVGFyZ2V0O1xuICAgIGlmICh0aGlzLl9lbGVtZW50ID09PSBuZXh0RWxlbWVudCB8fCB0aGlzLl9lbGVtZW50LmNvbnRhaW5zKG5leHRFbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9tYXliZVNjaGVkdWxlSGlkZSgpO1xuICB9XG4gIF9zZXRMaXN0ZW5lcnMoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFT1ZFUiwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgdHJ1ZSkpO1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRU9VVCwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgZmFsc2UpKTtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfRk9DVVNJTiwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgdHJ1ZSkpO1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9GT0NVU09VVCwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgZmFsc2UpKTtcbiAgfVxuICBfY2xlYXJUaW1lb3V0KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTtcbiAgICB0aGlzLl90aW1lb3V0ID0gbnVsbDtcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFRvYXN0LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKTtcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApO1xuICAgICAgICB9XG4gICAgICAgIGRhdGFbY29uZmlnXSh0aGlzKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuZW5hYmxlRGlzbWlzc1RyaWdnZXIoVG9hc3QpO1xuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihUb2FzdCk7XG5cbmV4cG9ydCB7IEFsZXJ0LCBCdXR0b24sIENhcm91c2VsLCBDb2xsYXBzZSwgRHJvcGRvd24sIE1vZGFsLCBPZmZjYW52YXMsIFBvcG92ZXIsIFNjcm9sbFNweSwgVGFiLCBUb2FzdCwgVG9vbHRpcCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Ym9vdHN0cmFwLmVzbS5qcy5tYXBcbiIsImltcG9ydCB7XHJcbiAgSUFjdGlvbixcclxuICBJQWN0aW9uUmVzdWx0LFxyXG4gIElBY3Rpb25Ob2RlLFxyXG4gIElBY3Rpb25Qcm9wZXJ0eSxcclxuICBJQ29udGV4dCxcclxuICBJRmllbGQsXHJcbn0gZnJvbSBcIi4uL3R5cGVzL0FjdGlvblR5cGVzXCI7XHJcblxyXG5pbXBvcnQgeyBhY3Rpb25BZGRpbnMgfSBmcm9tIFwiLlwiO1xyXG5pbXBvcnQgdHlwZSB7IFJlY29yZH0gZnJvbSBcIkBraW50b25lL3Jlc3QtYXBpLWNsaWVudC9saWIvc3JjL2NsaWVudC90eXBlc1wiO1xyXG5pbXBvcnQgeyBLaW50b25lQWxsUmVjb3Jkc0Vycm9yLCBLaW50b25lUmVzdEFQSUNsaWVudH0gZnJvbSBcIkBraW50b25lL3Jlc3QtYXBpLWNsaWVudFwiO1xyXG5pbXBvcnQgXCIuL2F1dG8tbG9va3VwLnNjc3NcIjtcclxuaW1wb3J0IFwiYm9vdHN0cmFwL2pzL2Rpc3QvbW9kYWxcIjtcclxuLy8gaW1wb3J0IFwiYm9vdHN0cmFwL2pzL2Rpc3Qvc3Bpbm5lclwiO1xyXG5pbXBvcnQge01vZGFsfSBmcm9tIFwiYm9vdHN0cmFwXCJcclxuaW1wb3J0ICQgZnJvbSBcImpxdWVyeVwiO1xyXG5cclxuaW50ZXJmYWNlIFByb3BzIHtcclxuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xyXG4gIGxvb2t1cEZpZWxkOiBMb29rdXBGaWVsZDtcclxuICBjb25kaXRpb246IENvbmRpdGlvbjtcclxufVxyXG5cclxuaW50ZXJmYWNlIENvbmRpdGlvbiB7XHJcbiAgcXVlcnlTdHJpbmc6IHN0cmluZztcclxuICBpbmRleDogbnVtYmVyO1xyXG4gIHR5cGU6IHN0cmluZztcclxuICBjaGlsZHJlbjogQ2hpbGRbXTtcclxuICBwYXJlbnQ6IG51bGw7XHJcbiAgbG9naWNhbE9wZXJhdG9yOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBDaGlsZCB7XHJcbiAgaW5kZXg6IG51bWJlcjtcclxuICB0eXBlOiBzdHJpbmc7XHJcbiAgcGFyZW50OiBzdHJpbmc7XHJcbiAgb2JqZWN0OiBhbnk7XHJcbiAgb3BlcmF0b3I6IHN0cmluZztcclxuICB2YWx1ZTogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgTG9va3VwRmllbGQge1xyXG4gIGFwcDogQXBwO1xyXG4gIGZpZWxkczogRmllbGRbXTtcclxufVxyXG5cclxuaW50ZXJmYWNlIEZpZWxkIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgdHlwZTogc3RyaW5nO1xyXG4gIGNvZGU6IHN0cmluZztcclxuICBsYWJlbDogc3RyaW5nO1xyXG4gIG5vTGFiZWw6IGJvb2xlYW47XHJcbiAgcmVxdWlyZWQ6IGJvb2xlYW47XHJcbiAgbG9va3VwOiBMb29rdXA7XHJcbn0gXHJcblxyXG5pbnRlcmZhY2UgTG9va3VwIHtcclxuICByZWxhdGVkQXBwOiBSZWxhdGVkQXBwO1xyXG4gIHJlbGF0ZWRLZXlGaWVsZDogc3RyaW5nO1xyXG4gIGZpZWxkTWFwcGluZ3M6IEZpZWxkTWFwcGluZ1tdO1xyXG4gIGxvb2t1cFBpY2tlckZpZWxkczogYW55W107XHJcbiAgZmlsdGVyQ29uZDogc3RyaW5nO1xyXG4gIHNvcnQ6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIEZpZWxkTWFwcGluZyB7XHJcbiAgZmllbGQ6IHN0cmluZztcclxuICByZWxhdGVkRmllbGQ6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIFJlbGF0ZWRBcHAge1xyXG4gIGFwcDogc3RyaW5nO1xyXG4gIGNvZGU6IHN0cmluZztcclxufVxyXG5cclxuaW50ZXJmYWNlIEFwcCB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICBjcmVhdGVkYXRlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBdXRvTG9va1VwQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbiB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICBwcm9wczogUHJvcHM7XHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLm5hbWUgPSBcIuODq+ODg+OCr+OCouODg+ODl+abtOaWsFwiO1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcyA9IFtdO1xyXG4gICAgdGhpcy5wcm9wcyA9IHt9IGFzIFByb3BzO1xyXG4gICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqKlxyXG4gICAqIOOCouOCr+OCu+OCueOBruODoeOCpOODs+OBruWHpueQhumWouaVsFxyXG4gICAqL1xyXG4gIGFzeW5jIHByb2Nlc3MoXHJcbiAgICBhY3Rpb25Ob2RlOiBJQWN0aW9uTm9kZSxcclxuICAgIGV2ZW50OiBhbnksXHJcbiAgICBjb250ZXh0OiBJQ29udGV4dFxyXG4gICk6IFByb21pc2U8SUFjdGlvblJlc3VsdD4ge1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcyA9IGFjdGlvbk5vZGUuYWN0aW9uUHJvcHM7XHJcbiAgICB0aGlzLnByb3BzID0ge1xyXG4gICAgICAuLi5hY3Rpb25Ob2RlLkFjdGlvblZhbHVlLFxyXG4gICAgICBjb25kaXRpb246IEpTT04ucGFyc2UoKGFjdGlvbk5vZGUuQWN0aW9uVmFsdWUgYXMgYW55KS5jb25kaXRpb24pLFxyXG4gICAgfSBhcyBQcm9wcztcclxuICAgIC8vIGNvbnNvbGUubG9nKGNvbnRleHQpO1xyXG5cclxuICAgIGxldCByZXN1bHQgPSB7XHJcbiAgICAgIGNhbk5leHQ6IHRydWUsXHJcbiAgICAgIHJlc3VsdDogXCJcIixcclxuICAgIH0gYXMgSUFjdGlvblJlc3VsdDtcclxuICAgIHRyeSB7XHJcbiAgICAgIGNvbnN0IGxvb2tVcEZpZWxkcyA9IHRoaXMucHJvcHMubG9va3VwRmllbGQuZmllbGRzLmZpbHRlcihcclxuICAgICAgICAoZikgPT4gZi5sb29rdXAgJiYgZi5sb29rdXAucmVsYXRlZEFwcC5hcHAgPT09IFN0cmluZyhraW50b25lLmFwcC5nZXRJZCgpKVxyXG4gICAgICApO1xyXG4gICAgICBpZiAoIWxvb2tVcEZpZWxkcyB8fCBsb29rVXBGaWVsZHMubGVuZ3RoPT09MCkge1xyXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICAgIGDjg6vjg4Pjgq/jgqLjg4Pjg5fjga7oqK3lrprjga/kuI3mraPjgafjgZnjgIIke3RoaXMucHJvcHMubG9va3VwRmllbGQuZmllbGRzWzBdLmxhYmVsfSBgXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICBjb25zdCBsb29rVXBGaWVsZCA9IHRoaXMucHJvcHMubG9va3VwRmllbGQuZmllbGRzWzBdOyBcclxuICAgICAgY29uc3Qga2V5ID0gZXZlbnQucmVjb3JkW2xvb2tVcEZpZWxkLmxvb2t1cC5yZWxhdGVkS2V5RmllbGRdLnZhbHVlO1xyXG4gICAgICBjb25zdCB0YXJnZXRSZWNvcmRzID0gYXdhaXQgdGhpcy5nZXRVcGRhdGVSZWNvcmRzKGxvb2tVcEZpZWxkLCBrZXkpO1xyXG4gICAgICAvL+abtOaWsOWvvuixoeOBjOOBquOBhOaZguOBq+OCueOCreODg+ODl1xyXG4gICAgICBpZih0YXJnZXRSZWNvcmRzLmxlbmd0aD09PTApe1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgdXBkYXRlUmVjb3JkcyA9IHRoaXMuY29udmVydEZvckxvb2t1cCh0YXJnZXRSZWNvcmRzLGxvb2tVcEZpZWxkLGtleSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwidXBkYXRlUmVjb3Jkc1wiLCB1cGRhdGVSZWNvcmRzKTtcclxuICAgICAgdGhpcy5zaG93U3Bpbm5lck1vZGVsKHRoaXMucHJvcHMubG9va3VwRmllbGQuYXBwKTtcclxuICAgICAgY29uc3QgdXBkYXRlUmVzdWx0ID0gYXdhaXQgdGhpcy51cGRhdGVMb29rdXBUYXJnZXQodXBkYXRlUmVjb3Jkcyk7XHJcbiAgICAgIGlmKHVwZGF0ZVJlc3VsdCl7XHJcbiAgICAgICAgdGhpcy5zaG93UmVzdWx0KHRoaXMucHJvcHMubG9va3VwRmllbGQuYXBwLHVwZGF0ZVJlY29yZHMubGVuZ3RoKTtcclxuICAgICAgfVxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICB0aGlzLmNsb3NlRGlhbG9nKCk7XHJcbiAgICAgICAgY29udGV4dC5lcnJvcnMuaGFuZGxlRXJyb3IoZXJyb3IsYWN0aW9uTm9kZSxcIuODq+ODg+OCr+OCouODg+ODl+abtOaWsOS4reS+i+WkluOBjOeZuueUn+OBl+OBvuOBl+OBn1wiKTtcclxuICAgICAgICByZXN1bHQuY2FuTmV4dCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJFU1QgQVBJ55So44Kv44Ko44Oq5L2c5oiQXHJcbiAgICogVE9ETzrlhbHpgJrplqLmlbDjgajjgZfjgabkvZzmiJBcclxuICAgKiBAcGFyYW0gbG9va1VwRmllbGQgXHJcbiAgICogQHBhcmFtIGtleSBcclxuICAgKiBAcmV0dXJucyBcclxuICAgKi9cclxuICBtYWtlUXVlcnk9KGxvb2tVcEZpZWxkOkZpZWxkLGtleTphbnkpPT57XHJcbiAgICBpZih0eXBlb2Yga2V5PT09J251bWJlcicpe1xyXG4gICAgICByZXR1cm4gYCR7bG9va1VwRmllbGQuY29kZX0gPSAke2tleX1gXHJcbiAgICB9XHJcbiAgICBpZih0eXBlb2Yga2V5PT09J3N0cmluZycpe1xyXG4gICAgICByZXR1cm4gYCR7bG9va1VwRmllbGQuY29kZX0gPSBcIiR7a2V5fVwiYFxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog5pu05paw5a++6LGh44Gu44Os44Kz44O844OJ44KS5Y+W5b6X44GZ44KLXHJcbiAgICovXHJcbiAgZ2V0VXBkYXRlUmVjb3JkcyA9IGFzeW5jIChsb29rVXBGaWVsZDpGaWVsZCxrZXk6YW55KTpQcm9taXNlPCBSZWNvcmRbXT49PntcclxuICAgIGNvbnN0IGNsaWVudD1uZXcgS2ludG9uZVJlc3RBUElDbGllbnQoKTtcclxuICAgIGNvbnN0IHJlc3AgPSBhd2FpdCBjbGllbnQucmVjb3JkLmdldEFsbFJlY29yZHMoe1xyXG4gICAgICBhcHA6dGhpcy5wcm9wcy5sb29rdXBGaWVsZC5hcHAuaWQsXHJcbiAgICAgIGZpZWxkczpbXCIkaWRcIl0sXHJcbiAgICAgIGNvbmRpdGlvbjp0aGlzLm1ha2VRdWVyeShsb29rVXBGaWVsZCxrZXkpXHJcbiAgICB9KTtcclxuICAgIHJldHVybiByZXNwO1xyXG4gIH1cclxuXHJcbiAvKipcclxuICAqIOODq+ODg+OCr+OCouODg+ODl+abtOaWsOeUqOODrOOCs+ODvOODieOBq+WkieaPm+OBmeOCi1xyXG4gICogQHBhcmFtIHRhcmdldFJlY29yZHMg5pu05paw5a++6LGh44Os44Kz44O844OJXHJcbiAgKiBAcGFyYW0gbG9va1VwRmllbGQg44Or44OD44Kv44Ki44OD44OX44OV44Kj44O844Or44OJXHJcbiAgKiBAcGFyYW0ga2V5IOODq+ODg+OCr+OCouODg+ODl+ODleOCo+ODvOODq+ODieOBruWApFxyXG4gICogQHJldHVybnMgXHJcbiAgKi9cclxuICBjb252ZXJ0Rm9yTG9va3VwID0gKHRhcmdldFJlY29yZHM6UmVjb3JkW10sbG9va1VwRmllbGQ6RmllbGQsa2V5OmFueSk6QXJyYXk8YW55Pj0+e1xyXG4gICAgcmV0dXJuIHRhcmdldFJlY29yZHMubWFwKChyKSA9PiAoe1xyXG4gICAgICBpZDogTnVtYmVyKHJbXCIkaWRcIl0udmFsdWUpLFxyXG4gICAgICByZWNvcmQ6IHsgW2xvb2tVcEZpZWxkLmNvZGVdOiB7IHZhbHVlOiBrZXkgfSB9LFxyXG4gICAgfSkpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICog44Or44OD44Kv44Ki44OD44OX5YWI44KS5pu05paw44GZ44KLXHJcbiAgICogQHBhcmFtIHVwZGF0ZVJlY29yZHMgXHJcbiAgICovXHJcbiAgdXBkYXRlTG9va3VwVGFyZ2V0ID0gYXN5bmMgKHVwZGF0ZVJlY29yZHM6QXJyYXk8YW55Pik6UHJvbWlzZTxib29sZWFuPj0+e1xyXG4gICAgaWYgKHVwZGF0ZVJlY29yZHMgJiYgdXBkYXRlUmVjb3Jkcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRyeXtcclxuICAgICAgICBjb25zdCBjbGllbnQ9bmV3IEtpbnRvbmVSZXN0QVBJQ2xpZW50KCk7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2xpZW50LnJlY29yZC51cGRhdGVBbGxSZWNvcmRzKHtcclxuICAgICAgICAgIGFwcDp0aGlzLnByb3BzLmxvb2t1cEZpZWxkLmFwcC5pZCxcclxuICAgICAgICAgIHJlY29yZHM6dXBkYXRlUmVjb3Jkc1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9Y2F0Y2goZXJyb3IgKXtcclxuICAgICAgICBpZihlcnJvciBpbnN0YW5jZW9mIEtpbnRvbmVBbGxSZWNvcmRzRXJyb3Ipe1xyXG4gICAgICAgICAgdGhpcy5zaG93RXJyb3IodGhpcy5wcm9wcy5sb29rdXBGaWVsZC5hcHAsZXJyb3IgYXMgS2ludG9uZUFsbFJlY29yZHNFcnJvcix1cGRhdGVSZWNvcmRzLmxlbmd0aCk7XHJcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9IFxyXG4gICAgICB9XHJcbiAgICAgIC8vIGF3YWl0IGtpbnRvbmUuYXBpKGtpbnRvbmUuYXBpLnVybChcIi9rL3YxL3JlY29yZHMuanNvblwiLCB0cnVlKSwgXCJQVVRcIiwge1xyXG4gICAgICAvLyAgIGFwcDogdGhpcy5wcm9wcy5sb29rdXBGaWVsZC5hcHAuaWQsXHJcbiAgICAgIC8vICAgcmVjb3JkczogdXBkYXRlUmVjb3Jkc1xyXG4gICAgICAvLyB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIOabtOaWsOS4reOBruODgOOCpOOCouODreOCsOihqOekulxyXG4gICAqIEBwYXJhbSBhcHAgXHJcbiAgICovXHJcbiAgc2hvd1NwaW5uZXJNb2RlbCA9IChhcHA6QXBwKSA9PiB7XHJcbiAgICBsZXQgZGlhbG9nID0gJChcIiNhbGNMb29rdXBNb2RhbFwiKTtcclxuICAgIGlmKGRpYWxvZy5sZW5ndGg9PT0wKXtcclxuICAgICAgY29uc3QgbW9kYWxIVE1MID0gYDxkaXYgY2xhc3M9XCJicy1zY29wZVwiPlxyXG4gICAgICA8ZGl2IGNsYXNzPVwibW9kYWxcIiBpZD1cImFsY0xvb2t1cE1vZGFsXCIgdGFiaW5kZXg9XCItMVwiIGFyaWEtbGFiZWxsZWRieT1cInN0YXRpY0JhY2tkcm9wTGFiZWxcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nLWNlbnRlcmVkXCI+XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZGlhbG9nIG1vZGFsLWNvbnRlbnRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vZGFsLWhlYWRlclwiPlxyXG4gICAgICAgICAgICAgIDxoMSBjbGFzcz1cIm1vZGFsLXRpdGxlIGZzLTVcIiBpZD1cImFsY0xvb2t1cE1vZGFsTGFiZWxcIj7jg6vjg4Pjgq/jgqLjg4Pjg5flkIzmnJ/lh6bnkIY8L2gxPlxyXG4gICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuLWNsb3NlXCIgZGF0YS1icy1kaXNtaXNzPVwibW9kYWxcIiBhcmlhLWxhYmVsPVwiQ2xvc2VcIj48L2J1dHRvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5XCI+XHJcbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiIGlkPVwiYXBwJHthcHAuaWR9XCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzcGlubmVyLWJvcmRlciB0ZXh0LXNlY29uZGFyeSBjb2wtMSBcIiByb2xlPVwiYWxlcnRcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPiR7YXBwLm5hbWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibW9kYWwtZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXByaW1hcnlcIiBkYXRhLWJzLWRpc21pc3M9XCJtb2RhbFwiPk9LPC9idXR0b24+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgPC9kaXY+PC9kaXY+PC9kaXY+PC9kaXY+YDtcclxuICAgICAgJChtb2RhbEhUTUwpLmFwcGVuZFRvKFwiYm9keVwiKTtcclxuICAgICAgZGlhbG9nID0gJChcIiNhbGNMb29rdXBNb2RhbFwiKTtcclxuICAgICAgZGlhbG9nLmdldCgpWzBdLmFkZEV2ZW50TGlzdGVuZXIoJ2hpZGRlbi5icy5tb2RhbCcsKGV2KT0+e1xyXG4gICAgICAgIE1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UoZGlhbG9nLmdldCgpWzBdKS5kaXNwb3NlKCk7XHJcbiAgICAgICAgJChcIiNhbGNMb29rdXBNb2RhbFwiKS5wYXJlbnQoKS5yZW1vdmUoKTtcclxuICAgICAgfSk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgY29uc3QgZGlhbG9nQm9keT0kKFwiI2FsY0xvb2t1cE1vZGFsIC5tb2RhbC1ib2R5XCIpO1xyXG4gICAgICBjb25zdCBodG1scm93PWAgXHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCIgaWQ9XCJhcHAke2FwcC5pZH1cIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNwaW5uZXItYm9yZGVyIHRleHQtc2Vjb25kYXJ5IGNvbC0xIFwiIHJvbGU9XCJhbGVydFwiPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPiR7YXBwLm5hbWV9PC9kaXY+XHJcbiAgICAgICAgICA8ZGl2PmA7XHJcbiAgICAgIGRpYWxvZ0JvZHkuYXBwZW5kKGh0bWxyb3cpO1xyXG4gICAgfVxyXG4gICAgTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZShkaWFsb2cuZ2V0KClbMF0pLnNob3coKTsgXHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiDmm7TmlrDntZDmnpzjgpLooajnpLrjgZnjgotcclxuICAgKiBAcGFyYW0gYXBwIOOAgOabtOaWsOWFiOOCouODl+ODquaDheWgsVxyXG4gICAqIEBwYXJhbSBjb3VudCDmm7TmlrDku7bmlbBcclxuICAgKi9cclxuICBzaG93UmVzdWx0PShhcHA6QXBwLGNvdW50Om51bWJlcik9PntcclxuICAgIGNvbnN0IGRpYWxvZ0JvZHk9JChgI2FsY0xvb2t1cE1vZGFsIC5tb2RhbC1ib2R5ICNhcHAke2FwcC5pZH1gKTtcclxuICAgIGNvbnN0IGh0bWw9YCAgICA8ZGl2IGNsYXNzPVwiY29sLTEgdGV4dC1zdWNjZXNzXCI+4pyUPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPiR7YXBwLm5hbWV9PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPuabtOaWsOS7tuaVsDoke2NvdW50feS7tjwvZGl2PmA7XHJcbiAgICBkaWFsb2dCb2R5Lmh0bWwoaHRtbCk7XHJcbiAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAqIOabtOaWsOe1kOaenOOCkuihqOekuuOBmeOCi1xyXG4gICAqIEBwYXJhbSBhcHAg44CA5pu05paw5YWI44Ki44OX44Oq5oOF5aCxXHJcbiAgICogQHBhcmFtIGNvdW50IOabtOaWsOS7tuaVsFxyXG4gICAqL1xyXG4gICAgc2hvd0Vycm9yPShhcHA6QXBwLGVycm9yOktpbnRvbmVBbGxSZWNvcmRzRXJyb3IsYWxsQ291bnQ6TnVtYmVyKT0+e1xyXG4gICAgICBjb25zdCBtZXNzYWdlPWVycm9yLmVycm9yLm1lc3NhZ2U7XHJcbiAgICAgIGNvbnN0IHByb1JlY29yZHMgPSBlcnJvci5udW1PZlByb2Nlc3NlZFJlY29yZHM7XHJcbiAgICAgIGNvbnN0IGFsbFJlY29yZHM9ZXJyb3IubnVtT2ZBbGxSZWNvcmRzO1xyXG4gICAgICBjb25zdCBkaWFsb2dCb2R5PSQoYCNhbGNMb29rdXBNb2RhbCAubW9kYWwtYm9keSAjYXBwJHthcHAuaWR9YCk7XHJcbiAgICAgIGNvbnN0IGh0bWw9YDxkaXYgY2xhc3M9XCJjb2wtMSB0ZXh0LWRhbmdlclwiPuKcljwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sXCI+JHthcHAubmFtZX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbFwiPuabtOaWsOS7tuaVsDoke3Byb1JlY29yZHN9LyR7YWxsUmVjb3Jkc308L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyB0ZXh0LWRhbmdlclwiPiR7bWVzc2FnZX08ZGl2PmA7XHJcbiAgICAgIGRpYWxvZ0JvZHkuaHRtbChodG1sKTtcclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICog44OA44Kk44Ki44Ot44Kw55S76Z2i44KS6ZaJ44GY44KLXHJcbiAgICAgKi9cclxuICAgIGNsb3NlRGlhbG9nPSgpPT57XHJcbiAgICAgIGNvbnN0IGRpYWxvZyA9ICQoXCIjYWxjTG9va3VwTW9kYWxcIik7XHJcbiAgICAgIE1vZGFsLmdldE9yQ3JlYXRlSW5zdGFuY2UoZGlhbG9nLmdldCgpWzBdKS5kaXNwb3NlKCk7XHJcbiAgICAgICQoXCIjYWxjTG9va3VwTW9kYWxcIikucGFyZW50KCkucmVtb3ZlKCk7XHJcbiAgICB9XHJcblxyXG4gIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgYWN0aW9uQWRkaW5zW3RoaXMubmFtZV0gPSB0aGlzO1xyXG4gIH1cclxufVxyXG5cclxubmV3IEF1dG9Mb29rVXBBY3Rpb24oKTsiLCJcclxuaW1wb3J0IHsgYWN0aW9uQWRkaW5zIH0gZnJvbSBcIi5cIjtcclxuaW1wb3J0IHsgIElBY3Rpb24sSUFjdGlvblJlc3VsdCwgSUFjdGlvbk5vZGUsIElBY3Rpb25Qcm9wZXJ0eSwgSUZpZWxkLCBJQ29udGV4dCB9IGZyb20gXCIuLi90eXBlcy9BY3Rpb25UeXBlc1wiO1xyXG5pbXBvcnQgeyBDb25kaXRpb25UcmVlIH0gZnJvbSAnLi4vdHlwZXMvQ29uZGl0aW9ucyc7XHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7lsZ7mgKflrprnvqlcclxuICovXHJcbmludGVyZmFjZSBJRGlzYWJsZVByb3Bze1xyXG4gICAgLy/lr77osaHjg5XjgqPjg7zjg6vjg4lcclxuICAgIGZpZWxkOklGaWVsZDtcclxuICAgIC8v57eo6ZuG5Y+vL+S4jeWPr+ioreWumlxyXG4gICAgZWRpdGFibGU6J+e3qOmbhuWPryd8J+e3qOmbhuS4jeWPryd8Jyc7IFxyXG4gICAgY29uZGl0aW9uOnN0cmluZztcclxufVxyXG4vKipcclxuICog57eo6ZuG5Y+v77yP5LiN5Y+v44Ki44Kv44K344On44OzXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgRmllbGREaXNhYmxlQWN0aW9uIGltcGxlbWVudHMgSUFjdGlvbntcclxuICAgIG5hbWU6IHN0cmluZztcclxuICAgIGFjdGlvblByb3BzOiBJQWN0aW9uUHJvcGVydHlbXTtcclxuICAgIHByb3BzOklEaXNhYmxlUHJvcHM7XHJcbiAgICBjb25zdHJ1Y3Rvcigpe1xyXG4gICAgICAgIHRoaXMubmFtZT1cIue3qOmbhuWPr++8j+S4jeWPr1wiO1xyXG4gICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9W107XHJcbiAgICAgICB0aGlzLnByb3BzPXtcclxuICAgICAgICAgICAgZmllbGQ6e2NvZGU6Jyd9LFxyXG4gICAgICAgICAgICBlZGl0YWJsZTonJyxcclxuICAgICAgICAgICAgY29uZGl0aW9uOicnXHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v44Ki44Kv44K344On44Oz44KS55m76Yyy44GZ44KLXHJcbiAgICAgICAgdGhpcy5yZWdpc3RlcigpO1xyXG4gICAgfVxyXG4gICAgLyoqXHJcbiAgICAgKiDjgqLjgq/jgrfjg6fjg7Pjga7lrp/ooYzjgpLlkbzjgbPlh7rjgZlcclxuICAgICAqIEBwYXJhbSBhY3Rpb25Ob2RlIFxyXG4gICAgICogQHBhcmFtIGV2ZW50IFxyXG4gICAgICogQHJldHVybnMgXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIHByb2Nlc3MoYWN0aW9uTm9kZTpJQWN0aW9uTm9kZSxldmVudDphbnksY29udGV4dDpJQ29udGV4dCk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PiB7XHJcbiAgICAgICAgbGV0IHJlc3VsdD17XHJcbiAgICAgICAgICAgIGNhbk5leHQ6dHJ1ZSxcclxuICAgICAgICAgICAgcmVzdWx0OmZhbHNlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIC8v5bGe5oCn6Kit5a6a44KS5Y+W5b6X44GZ44KLXHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uUHJvcHM9YWN0aW9uTm9kZS5hY3Rpb25Qcm9wcztcclxuICAgICAgICAgICAgaWYgKCEoJ2ZpZWxkJyBpbiBhY3Rpb25Ob2RlLkFjdGlvblZhbHVlKSAmJiAhKCdlZGl0YWJsZScgaW4gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnByb3BzID0gYWN0aW9uTm9kZS5BY3Rpb25WYWx1ZSBhcyBJRGlzYWJsZVByb3BzO1xyXG4gICAgICAgICAgICAvL+adoeS7tuW8j+OBruioiOeul+e1kOaenOOCkuWPluW+l1xyXG4gICAgICAgICAgICBjb25zdCBjb25kaXRpb25SZXN1bHQgPSB0aGlzLmdldENvbmRpdGlvblJlc3VsdChjb250ZXh0KTtcclxuICAgICAgICAgICAgY29uc3QgcmVjb3JkID0gZXZlbnQucmVjb3JkO1xyXG4gICAgICAgICAgICBpZighKHRoaXMucHJvcHMuZmllbGQuY29kZSBpbiByZWNvcmQpKXtcclxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihg44OV44Kj44O844Or44OJ44CMJHt0aGlzLnByb3BzLmZpZWxkLmNvZGV944CN44GM6KaL44Gk44GL44KK44G+44Gb44KT44CCYCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYoY29uZGl0aW9uUmVzdWx0KXtcclxuICAgICAgICAgICAgICAgIGlmKHRoaXMucHJvcHMuZWRpdGFibGU9PT0n57eo6ZuG5Y+vJyl7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkW3RoaXMucHJvcHMuZmllbGQuY29kZV0uZGlzYWJsZWQ9ZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZiAodGhpcy5wcm9wcy5lZGl0YWJsZT09PSfnt6jpm4bkuI3lj68nKXtcclxuICAgICAgICAgICAgICAgICAgICByZWNvcmRbdGhpcy5wcm9wcy5maWVsZC5jb2RlXS5kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJlc3VsdD0ge1xyXG4gICAgICAgICAgICBjYW5OZXh0OnRydWUsXHJcbiAgICAgICAgICAgIHJlc3VsdDp0cnVlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9Y2F0Y2goZXJyb3Ipe1xyXG4gICAgICAgICAgICBjb250ZXh0LmVycm9ycy5oYW5kbGVFcnJvcihlcnJvcixhY3Rpb25Ob2RlKTtcclxuICAgICAgICAgICAgcmVzdWx0LmNhbk5leHQ9ZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBjb250ZXh0IOadoeS7tuW8j+OCkuWun+ihjOOBmeOCi1xyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgZ2V0Q29uZGl0aW9uUmVzdWx0KGNvbnRleHQ6YW55KTpib29sZWFue1xyXG4gICAgICAgIGNvbnN0IHRyZWUgPXRoaXMuZ2V0Q29uZGl0aW9uKHRoaXMucHJvcHMuY29uZGl0aW9uKTtcclxuICAgICAgICBpZighdHJlZSl7XHJcbiAgICAgICAgICAgIC8v5p2h5Lu244KS6Kit5a6a44GV44KM44Gm44GE44G+44Gb44KTXHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJlZS5ldmFsdWF0ZSh0cmVlLnJvb3QsY29udGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0gY29uZGl0aW9uIOadoeS7tuW8j+ODhOODquODvOOCkuWPluW+l+OBmeOCi1xyXG4gICAgICogQHJldHVybnNcclxuICAgICAqL1xyXG4gICAgZ2V0Q29uZGl0aW9uKGNvbmRpdGlvbjpzdHJpbmcpOkNvbmRpdGlvblRyZWV8bnVsbHtcclxuICAgICAgICB0cnl7XHJcbiAgICAgICAgICAgIGNvbnN0IHRyZWUgPSBuZXcgQ29uZGl0aW9uVHJlZSgpO1xyXG4gICAgICAgICAgICB0cmVlLmZyb21Kc29uKGNvbmRpdGlvbik7XHJcbiAgICAgICAgICAgIGlmKHRyZWUuZ2V0Q29uZGl0aW9ucyh0cmVlLnJvb3QpLmxlbmd0aD4wKXtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cmVlO1xyXG4gICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfWNhdGNoKGVycm9yKXtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJlZ2lzdGVyKCk6IHZvaWQge1xyXG4gICAgICAgIGFjdGlvbkFkZGluc1t0aGlzLm5hbWVdPXRoaXM7XHJcbiAgICB9XHJcbn1cclxubmV3IEZpZWxkRGlzYWJsZUFjdGlvbigpOyIsIi8qKlxyXG4gKiDjgqLjg5fjg6rmg4XloLFcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXBwSW5mbyB7XHJcbiAgYXBwSWQ6IHN0cmluZztcclxuICBjb2RlPzogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBkZXNjcmlwdGlvbj86IHN0cmluZztcclxufVxyXG5cclxuLyoqXHJcbiog44Ki44Kv44K344On44Oz44Gu44OX44Ot44OR44OG44Kj5a6a576pXHJcbiAqL1xyXG5leHBvcnQgaW50ZXJmYWNlIElBY3Rpb25Qcm9wZXJ0eSB7XHJcbiAgY29tcG9uZW50OiBzdHJpbmc7XHJcbiAgcHJvcHM6IHtcclxuICAgIC8v44OX44Ot44OR44OG44Kj5ZCNXHJcbiAgICBuYW1lOiBzdHJpbmc7XHJcbiAgICAvL+ODl+ODreODkeODhuOCo+ihqOekuuWQjVxyXG4gICAgZGlzcGxheU5hbWU6IHN0cmluZztcclxuICAgIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcbiAgICAvL+ODl+ODreODkeODhuOCo+ioreWumuWApFxyXG4gICAgbW9kZWxWYWx1ZTogYW55O1xyXG4gIH07XHJcbn1cclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+OCv+OCpOODl+Wumue+qVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJQWN0aW9uTm9kZSB7XHJcbiAgaWQ6IHN0cmluZztcclxuICAvL+OCouOCr+OCt+ODp+ODs+WQjVxyXG4gIG5hbWU6IHN0cmluZztcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIHN1YlRpdGxlOiBzdHJpbmc7XHJcbiAgaW5wdXRQb2ludDogc3RyaW5nO1xyXG4gIC8v5Ye65Yqb44Od44Kk44Oz44OI77yI5p2h5Lu25YiG5bKQ5Lul5aSW5pyq5L2/55So77yJXHJcbiAgb3V0cHV0UG9pbnRzOiBBcnJheTxzdHJpbmc+O1xyXG4gIC8v44Or44O844OI44Ki44Kv44K344On44Oz77yIS2ludG9uZSBldmVudO+8iVxyXG4gIGlzUm9vdDogYm9vbGVhbjtcclxuICAvL+OCouOCr+OCt+ODp+ODs+OBruODl+ODreODkeODhuOCo+Wumue+qVxyXG4gIGFjdGlvblByb3BzOiBBcnJheTxJQWN0aW9uUHJvcGVydHk+O1xyXG4gIC8v44Ki44Kv44K344On44Oz44Gu44OX44Ot44OR44OG44Kj6Kit5a6a5YCk5oq95Ye6XHJcbiAgQWN0aW9uVmFsdWU6IG9iamVjdFxyXG4gIHByZXZOb2RlSWQ/OiBzdHJpbmc7XHJcbiAgbmV4dE5vZGVJZHM6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcbn1cclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+ODleODreODvOOBruWumue+qVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJQWN0aW9uRmxvdyB7XHJcbiAgaWQ6IHN0cmluZztcclxuICBhY3Rpb25Ob2RlczogSUFjdGlvbk5vZGVbXTtcclxuICBmaW5kTm9kZUJ5SWQoaWQ6IHN0cmluZyk6IElBY3Rpb25Ob2RlIHwgdW5kZWZpbmVkO1xyXG4gIHRvSlNPTigpOiBhbnk7XHJcbiAgZ2V0Um9vdCgpOiBJQWN0aW9uTm9kZSB8IHVuZGVmaW5lZDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQWN0aW9uUmVzdWx0e1xyXG4gIGNhbk5leHQ6Ym9vbGVhbjtcclxuICByZXN1bHQ/OmFueTtcclxufVxyXG5cclxuLyoqXHJcbiAqIOOCs+ODs+ODhuOCreOCueODiFxyXG4gKiDjg6zjgrPjg7zjg4njgajjg5Xjg63jg7zjga7lpInmlbDjgpLmjIHjgaRcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvbnRleHR7XHJcbiAgcmVjb3JkOmFueSxcclxuICB2YXJpYWJsZXM6YW55LFxyXG4gIGVycm9yczpFcnJvck1hbmFnZXJcclxufVxyXG5cclxuLyoqXHJcbiAqIOOCouOCr+OCt+ODp+ODs+OBruOCpOODs+OCv+ODvOODleOCp+ODvOOCuVxyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJQWN0aW9ue1xyXG4gIC8v44Ki44Kv44K344On44Oz44Gu5ZCN5YmN77yI44Om44O844OL44OD44Kv5ZCN44GM5b+F6KaB77yJXHJcbiAgbmFtZTpzdHJpbmc7XHJcbiAgLy/lsZ7mgKfoqK3lrprmg4XloLFcclxuICBhY3Rpb25Qcm9wczogQXJyYXk8SUFjdGlvblByb3BlcnR5PjtcclxuICAvL+OCouOCr+OCt+ODp+ODs+OBruODl+ODreOCu+OCueWun+ihjOmWouaVsFxyXG4gIHByb2Nlc3MocHJvcDpJQWN0aW9uTm9kZSxldmVudDphbnksY29udGV4dDpJQ29udGV4dCk6UHJvbWlzZTxJQWN0aW9uUmVzdWx0PjtcclxuICAvL+OCouOCr+OCt+ODp+ODs+OBrueZu+mMsumWouaVsFxyXG4gIHJlZ2lzdGVyKCk6dm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJRmllbGR7XHJcbiAgbmFtZT86c3RyaW5nO1xyXG4gIGNvZGU6c3RyaW5nO1xyXG4gIHR5cGU/OnN0cmluZztcclxuICByZXF1aXJlZD86Ym9vbGVhbjtcclxuICBvcHRpb25zPzpzdHJpbmc7XHJcbn1cclxuLy/lpInmlbDjga7jgqTjg7Pjgr/jg7zjg5Xjgqfjg7zjgrlcclxuZXhwb3J0IGludGVyZmFjZSBJVmFyTmFtZXtcclxuICBuYW1lOnN0cmluZztcclxuICBmaWVsZHM/OklWYXJOYW1lW107XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDjg6bjg7zjgrbjg7zjgIHjgrDjg6vjg7zjg5fjgIHntYTnuZTjgarjganjgqrjg5bjgrjjgqfjgq/jg4jpoZ7lnotcclxuICovXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvZGVWYWx1ZSB7XHJcbiAgY29kZTogc3RyaW5nO1xyXG4gIG5hbWU/OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjga7jg5fjg63jg5Hjg4bjgqPlrprnvqnjgavln7rjgaXjgYTjgZ/jgq/jg6njgrlcclxuICovXHJcbmV4cG9ydCBjbGFzcyBBY3Rpb25Qcm9wZXJ0eSBpbXBsZW1lbnRzIElBY3Rpb25Qcm9wZXJ0eSB7XHJcbiAgY29tcG9uZW50OiBzdHJpbmc7XHJcbiAgcHJvcHM6IHtcclxuICAgIC8vIOODl+ODreODkeODhuOCo+WQjVxyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgLy8g44OX44Ot44OR44OG44Kj6KGo56S65ZCNXHJcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nO1xyXG4gICAgcGxhY2Vob2xkZXI6IHN0cmluZztcclxuICAgIC8vIOODl+ODreODkeODhuOCo+ioreWumuWApFxyXG4gICAgbW9kZWxWYWx1ZTogYW55O1xyXG4gIH07XHJcblxyXG4gIHN0YXRpYyBkZWZhdWx0UHJvcGVydHkoKTogSUFjdGlvblByb3BlcnR5IHtcclxuICAgIHJldHVybiBuZXcgQWN0aW9uUHJvcGVydHkoJ0lucHV0VGV4dCcsICdkaXNwbGF5TmFtZScsICfooajnpLrlkI0nLCAn6KGo56S644KS5YWl5Yqb44GX44Gm44GP44Gg44GV44GEJywgJycpO1xyXG4gIH07XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgY29tcG9uZW50OiBzdHJpbmcsXHJcbiAgICBuYW1lOiBzdHJpbmcsXHJcbiAgICBkaXNwbGF5TmFtZTogc3RyaW5nLFxyXG4gICAgcGxhY2Vob2xkZXI6IHN0cmluZyxcclxuICAgIG1vZGVsVmFsdWU6IGFueVxyXG4gICkge1xyXG4gICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7XHJcbiAgICB0aGlzLnByb3BzID0ge1xyXG4gICAgICBuYW1lOiBuYW1lLFxyXG4gICAgICBkaXNwbGF5TmFtZTogZGlzcGxheU5hbWUsXHJcbiAgICAgIHBsYWNlaG9sZGVyOiBwbGFjZWhvbGRlcixcclxuICAgICAgbW9kZWxWYWx1ZTogbW9kZWxWYWx1ZVxyXG4gICAgfTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBJQWN0aW9uTm9kZeOBruWun+ijheOAgVJvb3RBY3Rpb25Ob2Rl5Lul5aSW44Gu44Ki44Kv44K344On44Oz5a6a576pXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgQWN0aW9uTm9kZSBpbXBsZW1lbnRzIElBY3Rpb25Ob2RlIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICBnZXQgdGl0bGUoKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHByb3AgPSB0aGlzLmFjdGlvblByb3BzLmZpbmQoKHByb3ApID0+IHByb3AucHJvcHMubmFtZSA9PT0gXCJkaXNwbGF5TmFtZVwiKTtcclxuICAgIHJldHVybiBwcm9wPy5wcm9wcy5tb2RlbFZhbHVlO1xyXG4gIH07XHJcbiAgZ2V0IHN1YlRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy5uYW1lO1xyXG4gIH07XHJcbiAgaW5wdXRQb2ludDogc3RyaW5nO1xyXG4gIC8v5Ye65Yqb44Od44Kk44Oz44OI77yI5p2h5Lu25YiG5bKQ5Lul5aSW5pyq5L2/55So77yJXHJcbiAgb3V0cHV0UG9pbnRzOiBBcnJheTxzdHJpbmc+O1xyXG4gIGFjdGlvblByb3BzOiBBcnJheTxJQWN0aW9uUHJvcGVydHk+O1xyXG4gIGdldCBpc1Jvb3QoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfTtcclxuICBnZXQgQWN0aW9uVmFsdWUoKTogb2JqZWN0IHtcclxuICAgIGNvbnN0IHByb3BWYWx1ZTogYW55ID0ge307XHJcbiAgICB0aGlzLmFjdGlvblByb3BzLmZvckVhY2goKHZhbHVlKSA9PiB7XHJcbiAgICAgIHByb3BWYWx1ZVt2YWx1ZS5wcm9wcy5uYW1lXSA9IHZhbHVlLnByb3BzLm1vZGVsVmFsdWVcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHByb3BWYWx1ZTtcclxuICB9O1xyXG4gIHByZXZOb2RlSWQ/OiBzdHJpbmc7XHJcbiAgbmV4dE5vZGVJZHM6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICB7aWQsbmFtZSx0aXRsZSxpbnB1dFBvaW50LG91dHB1dFBvaW50cyxhY3Rpb25Qcm9wc306XHJcbiAgICB7XHJcbiAgICAgIGlkOnN0cmluZyxcclxuICAgICAgbmFtZTogc3RyaW5nLFxyXG4gICAgICB0aXRsZTogc3RyaW5nLFxyXG4gICAgICBpbnB1dFBvaW50OiBzdHJpbmcsXHJcbiAgICAgIG91dHB1dFBvaW50czogQXJyYXk8c3RyaW5nPixcclxuICAgICAgYWN0aW9uUHJvcHM6IEFycmF5PElBY3Rpb25Qcm9wZXJ0eT59XHJcbiAgKSB7XHJcbiAgICB0aGlzLmlkPWlkO1xyXG4gICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIHRoaXMuaW5wdXRQb2ludCA9IGlucHV0UG9pbnQ7XHJcbiAgICB0aGlzLm91dHB1dFBvaW50cyA9IG91dHB1dFBvaW50cztcclxuICAgIGNvbnN0IGRlZlByb3AgPSBBY3Rpb25Qcm9wZXJ0eS5kZWZhdWx0UHJvcGVydHkoKTtcclxuICAgIGRlZlByb3AucHJvcHMubW9kZWxWYWx1ZSA9IHRpdGxlO1xyXG4gICAgdGhpcy5hY3Rpb25Qcm9wcyA9IGFjdGlvblByb3BzO1xyXG4gICAgdGhpcy5uZXh0Tm9kZUlkcyA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XHJcbiAgfVxyXG5cclxufVxyXG4vKipcclxuICog44Or44O844OI44Ki44Kv44K344On44Oz5a6a576pXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUm9vdEFjdGlvbiBpbXBsZW1lbnRzIElBY3Rpb25Ob2RlIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIHN1YlRpdGxlOiBzdHJpbmc7XHJcbiAgaW5wdXRQb2ludDogc3RyaW5nO1xyXG4gIC8v5Ye65Yqb44Od44Kk44Oz44OI77yI5p2h5Lu25YiG5bKQ5Lul5aSW5pyq5L2/55So77yJXHJcbiAgb3V0cHV0UG9pbnRzOiBBcnJheTxzdHJpbmc+O1xyXG4gIGlzUm9vdDogYm9vbGVhbjtcclxuICBhY3Rpb25Qcm9wczogQXJyYXk8SUFjdGlvblByb3BlcnR5PjtcclxuICBBY3Rpb25WYWx1ZTogb2JqZWN0O1xyXG4gIHByZXZOb2RlSWQ/OiBzdHJpbmcgPSB1bmRlZmluZWQ7XHJcbiAgbmV4dE5vZGVJZHM6IE1hcDxzdHJpbmcsIHN0cmluZz47XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICB7aWQsbmFtZSx0aXRsZSxzdWJUaXRsZX06e1xyXG4gICAgICBpZDpzdHJpbmcsXHJcbiAgICAgIG5hbWU6IHN0cmluZyxcclxuICAgICAgdGl0bGU6IHN0cmluZyxcclxuICAgICAgc3ViVGl0bGU6IHN0cmluZ31cclxuICApIHtcclxuICAgIHRoaXMuaWQgPSBpZDtcclxuICAgIHRoaXMubmFtZSA9IG5hbWU7XHJcbiAgICB0aGlzLnRpdGxlID0gdGl0bGU7XHJcbiAgICB0aGlzLnN1YlRpdGxlID0gc3ViVGl0bGU7XHJcbiAgICB0aGlzLmlucHV0UG9pbnQgPSAnJztcclxuICAgIHRoaXMub3V0cHV0UG9pbnRzID0gW107XHJcbiAgICB0aGlzLmlzUm9vdCA9IHRydWU7XHJcbiAgICB0aGlzLmFjdGlvblByb3BzID0gW107XHJcbiAgICB0aGlzLkFjdGlvblZhbHVlID0ge307XHJcbiAgICB0aGlzLm5leHROb2RlSWRzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcclxuICB9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDjgqLjgq/jgrfjg6fjg7Pjg5Xjg63jg7zjga7lrprnvqlcclxuICovXHJcbmV4cG9ydCBjbGFzcyBBY3Rpb25GbG93IGltcGxlbWVudHMgSUFjdGlvbkZsb3cge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgYWN0aW9uTm9kZXM6IEFycmF5PElBY3Rpb25Ob2RlPjtcclxuICBjb25zdHJ1Y3RvcihhY3Rpb25Ob2RlczogQXJyYXk8SUFjdGlvbk5vZGU+IHwgUm9vdEFjdGlvbikge1xyXG4gICAgaWYgKGFjdGlvbk5vZGVzIGluc3RhbmNlb2YgQXJyYXkpIHtcclxuICAgICAgdGhpcy5hY3Rpb25Ob2RlcyA9IGFjdGlvbk5vZGVzO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hY3Rpb25Ob2RlcyA9IFthY3Rpb25Ob2Rlc107XHJcbiAgICB9XHJcbiAgICB0aGlzLmlkID0gJyc7XHJcbiAgfVxyXG4gIC8qKipcclxuICAgKiBJROOBp0FjdGlvbk5vZGXjgpLlj5blvpfjgZnjgotcclxuICAgKi9cclxuICBmaW5kTm9kZUJ5SWQoaWQ6IHN0cmluZyk6IElBY3Rpb25Ob2RlIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLmFjdGlvbk5vZGVzLmZpbmQoKG5vZGUpID0+IG5vZGUuaWQgPT09IGlkKTtcclxuICB9XHJcblxyXG4gIHRvSlNPTigpIHtcclxuICAgIHJldHVybiB7XHJcbiAgICAgIGlkOiB0aGlzLmlkLFxyXG4gICAgICBhY3Rpb25Ob2RlczogdGhpcy5hY3Rpb25Ob2Rlcy5tYXAobm9kZSA9PiB7XHJcbiAgICAgICAgY29uc3QgeyBuZXh0Tm9kZUlkcywgLi4ucmVzdCB9ID0gbm9kZTtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgLi4ucmVzdCxcclxuICAgICAgICAgIG5leHROb2RlSWRzOiBBcnJheS5mcm9tKG5leHROb2RlSWRzLmVudHJpZXMoKSlcclxuICAgICAgICB9O1xyXG4gICAgICB9KVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIGdldFJvb3QoKTogSUFjdGlvbk5vZGUgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuYWN0aW9uTm9kZXMuZmluZChub2RlID0+IG5vZGUuaXNSb290KVxyXG4gIH1cclxuXHJcbiAgc3RhdGljIGZyb21KU09OKGpzb246IHN0cmluZyk6IEFjdGlvbkZsb3cge1xyXG4gICAgY29uc3QgcGFyc2VkT2JqZWN0ID0gSlNPTi5wYXJzZShqc29uKTtcclxuXHJcbiAgICBjb25zdCBhY3Rpb25Ob2RlcyA9IHBhcnNlZE9iamVjdC5hY3Rpb25Ob2Rlcy5tYXAoKG5vZGU6IGFueSkgPT4ge1xyXG4gICAgICBjb25zdCBub2RlQ2xhc3MgPSAhbm9kZS5pc1Jvb3QgPyBuZXcgQWN0aW9uTm9kZShub2RlKVxyXG4gICAgICAgIDogbmV3IFJvb3RBY3Rpb24obm9kZSk7XHJcbiAgICAgIG5vZGVDbGFzcy5uZXh0Tm9kZUlkcyA9IG5ldyBNYXA8c3RyaW5nLHN0cmluZz4oT2JqZWN0LmVudHJpZXMobm9kZS5uZXh0Tm9kZUlkcykpO1xyXG4gICAgICBub2RlQ2xhc3MucHJldk5vZGVJZCA9IG5vZGUucHJldk5vZGVJZDtcclxuICAgICAgbm9kZUNsYXNzLmlkID0gbm9kZS5pZDtcclxuICAgICAgcmV0dXJuIG5vZGVDbGFzcztcclxuICAgIH0pO1xyXG4gICAgY29uc3QgYWN0aW9uRmxvdyA9IG5ldyBBY3Rpb25GbG93KGFjdGlvbk5vZGVzKTtcclxuICAgIGFjdGlvbkZsb3cuaWQgPSBwYXJzZWRPYmplY3QuaWQ7XHJcbiAgICByZXR1cm4gYWN0aW9uRmxvdztcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUFjdGlvbkVycm9ye1xyXG4gIGFjdGlvbjogSUFjdGlvbk5vZGUsXHJcbiAgZXJyb3I6c3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBFcnJvck1hbmFnZXJ7XHJcbiAgcHJpdmF0ZSBlcnJvcnM6SUFjdGlvbkVycm9yW109W107XHJcbiAgXHJcbiAgcHVibGljIGdldCBoYXNFcnJvcigpOmJvb2xlYW57XHJcbiAgICByZXR1cm4gdGhpcy5lcnJvcnMubGVuZ3RoPjA7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgaGFuZGxlRXJyb3IoZXJyOmFueSxhY3Rpb246SUFjdGlvbk5vZGUsZGVmYXVsdE1lc3NhZ2U/OnN0cmluZyl7XHJcbiAgICBjb25zdCBkZWZNc2cgPSBkZWZhdWx0TWVzc2FnZSA/IGRlZmF1bHRNZXNzYWdlIDogJyc7XHJcbiAgICBsZXQgZXJyb3IgPSBlcnIgaW5zdGFuY2VvZiBFcnJvcj8gYCR7ZGVmTXNnfSAke2Vyci5tZXNzYWdlfWAgOiBkZWZNc2cgO1xyXG4gICAgY29uc29sZS5lcnJvcihg44CMJHthY3Rpb24ubmFtZX3jgI3lh6bnkIbkuK3kvovlpJbnmbrnlJ/jgZfjgb7jgZfjgZ/jgIJgLGVycik7XHJcbiAgICB0aGlzLmVycm9ycy5wdXNoKHtlcnJvcixhY3Rpb259KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRFdmVudChldmVudDphbnkpe1xyXG4gICAgIGNvbnN0IG1lc3NhZ2VzID0gdGhpcy5lcnJvcnMubWFwKChlcnIpPT57XHJcbiAgICAgICAgcmV0dXJuIGDjgIwke2Vyci5hY3Rpb24ubmFtZX3jgI3lh6bnkIbkuK3kvovlpJbnmbrnlJ/jgZfjgb7jgZfjgZ/jgIJcXG7oqbPntLA6JHtlcnIuZXJyb3J9YDtcclxuICAgICB9KTsgXHJcbiAgICAgZXZlbnQuZXJyb3I9bWVzc2FnZXMuam9pbignXFxuJyk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2hvd0Vycm9yKCl7XHJcbiAgICBjb25zdCBtc2cgPXRoaXMuZXJyb3JzLm1hcCgoZXJyKT0+e1xyXG4gICAgICByZXR1cm4gYOOAjCR7ZXJyLmFjdGlvbi5uYW1lfeOAjeWHpueQhuS4reS+i+WklueZuueUn+OBl+OBvuOBl+OBn+OAglxcbuips+e0sDoke2Vyci5lcnJvcn1gO1xyXG4gICAgfSk7XHJcbiAgICB3aW5kb3cuYWxlcnQobXNnKTtcclxuICAgIC8vIGNvbnN0IGh0bWw9XHJcbiAgICAvLyBgPGRpdiBpZD1cIm15YWxlcnRcIiBjbGFzcz1cIm5vdGlmaWVyLWN5Ym96dSBub3RpZmllci1lcnJvci1jeWJvenVcIiBzdHlsZT1cImxlZnQ6IDUwJTsgdG9wOiAwcHg7XCI+XHJcbiAgICAvLyA8ZGl2IGNsYXNzPVwibm90aWZpZXItaGVhZGVyLWN5Ym96dVwiPjxkaXYgY2xhc3M9XCJub3RpZmllci10aXRsZS1jeWJvenVcIj7jgqjjg6njg7w8L2Rpdj5cclxuICAgIC8vIDx1bCBjbGFzcz1cIm5vdGlmaWVyLWJvZHktY3lib3p1XCI+PGxpPiR7bXNnfTwvbGk+PC91bD48L2Rpdj5cclxuICAgIC8vIDxhIGNsYXNzPVwibm90aWZpZXItcmVtb3ZlLWN5Ym96dVwiIGhyZWY9XCJqYXZhc2NyaXB0OnZvaWQoMClcIj48L2E+PC9kaXY+YFxyXG4gICAgLy8gY29uc3QgYWxlcnQgPSAkKGh0bWwpLmFwcGVuZFRvKFwiYm9keVwiKTtcclxuICAgIC8vIGFsZXJ0LmNoaWxkcmVuKFwiI215YWxlcnQgLm5vdGlmaWVyLXJlbW92ZS1jeWJvenVcIikub24oXCJjbGlja1wiLChldik9PntcclxuICAgIC8vICAgICQoXCJteWFsZXJ0XCIpLnNsaWRlVXAoKS5yZW1vdmUoKTtcclxuICAgIC8vIH0pO1xyXG4gIH1cclxufVxyXG5cclxuIiwiXHJcbmltcG9ydCB7IGFjdGlvbkFkZGlucyB9IGZyb20gXCIuLi9hY3Rpb25zXCI7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9tdXN0LWlucHV0JztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL2F1dG8tbnVtYmVyaW5nJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL2ZpZWxkLXNob3duJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL2Vycm9yLXNob3cnO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvYnV0dG9uLWFkZCc7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9jb25kaXRpb24tYWN0aW9uJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL2RhdGEtcHJvY2Vzc2luZyc7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9kYXRhLXVwZGF0ZSc7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9jdXJyZW50LWZpZWxkLWdldCc7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9yZWd1bGFyLWNoZWNrJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL21haWwtY2hlY2snO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvY291bnRlci1jaGVjayc7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9kYXRldGltZS1nZXR0ZXInO1xyXG5pbXBvcnQgJy4uL2FjdGlvbnMvaW5zZXJ0LXZhbHVlJztcclxuaW1wb3J0ICcuLi9hY3Rpb25zL3ZhbHVlLWdldHRlcic7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9zdHJpbmctam9pbic7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy92YWxpZGF0aW9uLWZ1bGx3aWR0aCc7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy92YWxpZGF0aW9uLWhhbGZ3aWR0aCc7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9sb2dpbi11c2VyLWdldHRlcic7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9hdXRvLWxvb2t1cCc7XHJcbmltcG9ydCAnLi4vYWN0aW9ucy9maWVsZC1kaXNhYmxlJztcclxuaW1wb3J0IHsgQWN0aW9uRmxvdyxFcnJvck1hbmFnZXIsSUFjdGlvbkZsb3csIElBY3Rpb25SZXN1bHQsSUNvbnRleHQgfSBmcm9tIFwiLi9BY3Rpb25UeXBlc1wiO1xyXG5jb25zdCBTaG93RXJyb3JFdmVudHM6c3RyaW5nW10gPSBbXHJcbiAgICBcImFwcC5yZWNvcmQuY3JlYXRlLnN1Ym1pdC5zdWNjZXNzXCIsXHJcbiAgICBcImFwcC5yZWNvcmQuZWRpdC5zdWJtaXQuc3VjY2Vzc1wiLFxyXG4gICAgXCJhcHAucmVjb3JkLmluZGV4LmVkaXQuc3VibWl0LnN1Y2Nlc3NcIixcclxuICBdO1xyXG5leHBvcnQgY2xhc3MgQWN0aW9uUHJvY2Vzc3tcclxuICAgIGV2ZW50SWQ6c3RyaW5nO1xyXG4gICAgZmxvdzpJQWN0aW9uRmxvdztcclxuICAgIGV2ZW50OmFueTtcclxuICAgIGNvbnRleHQ6SUNvbnRleHQ7XHJcbiAgICAgY29uc3RydWN0b3IoZXZlbnRJZDpzdHJpbmcsZmxvdzpBY3Rpb25GbG93LGV2ZW50OmFueSl7XHJcbiAgICAgICAgdGhpcy5ldmVudElkPWV2ZW50SWQ7XHJcbiAgICAgICAgdGhpcy5mbG93PWZsb3c7XHJcbiAgICAgICAgdGhpcy5ldmVudD1ldmVudDtcclxuICAgICAgICBjb25zdCBlcnJvcm1hbmFnZXIgPSBuZXcgRXJyb3JNYW5hZ2VyKCk7XHJcbiBcclxuICAgICAgICB0aGlzLmNvbnRleHQ9e1xyXG4gICAgICAgICAgICByZWNvcmQ6dGhpcy5ldmVudC5yZWNvcmQsXHJcbiAgICAgICAgICAgIHZhcmlhYmxlczp7fSxcclxuICAgICAgICAgICAgZXJyb3JzOmVycm9ybWFuYWdlclxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcbiAgICBhc3luYyBleGVjKCl7XHJcbiAgICAgICAgY29uc3Qgcm9vdCA9IHRoaXMuZmxvdy5nZXRSb290KCk7XHJcbiAgICAgICAgaWYocm9vdD09PXVuZGVmaW5lZCB8fCByb290Lm5leHROb2RlSWRzLnNpemU9PT0wKXtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaWQ9cm9vdC5uZXh0Tm9kZUlkcy5nZXQoJycpO1xyXG4gICAgICAgIGlmKGlkPT09dW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICAgICAgbGV0IG5leHRBY3Rpb24gPSB0aGlzLmZsb3cuZmluZE5vZGVCeUlkKGlkKTsgXHJcbiAgICAgICAgbGV0IHJlc3VsdDpJQWN0aW9uUmVzdWx0PXtcclxuICAgICAgICAgICAgY2FuTmV4dDp0cnVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICB3aGlsZShuZXh0QWN0aW9uIT09dW5kZWZpbmVkICYmIHJlc3VsdC5jYW5OZXh0KXtcclxuICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBhY3Rpb25BZGRpbnNbbmV4dEFjdGlvbi5uYW1lXTtcclxuICAgICAgICAgICBpZihhY3Rpb24hPT11bmRlZmluZWQpe1xyXG4gICAgICAgICAgICByZXN1bHQgPSBhd2FpdCBhY3Rpb24ucHJvY2VzcyhuZXh0QWN0aW9uLHRoaXMuZXZlbnQsdGhpcy5jb250ZXh0KTtcclxuICAgICAgICAgICB9XHJcbiAgICAgICAgICAgbGV0IG5leHRJbnB1dCA9ICcnO1xyXG4gICAgICAgICAgIC8vb3V0cHV0UG9pbnRz5LiA44Gk5Lul5LiK44Gu5aC05ZCI44CB5qyh44GuSW5wdXRQb2ludOOBr+aIu+OCiuWApOOCkuioreWumuOBmeOCi1xyXG4gICAgICAgICAgIGlmKG5leHRBY3Rpb24ub3V0cHV0UG9pbnRzICYmIG5leHRBY3Rpb24ub3V0cHV0UG9pbnRzLmxlbmd0aD4xKXtcclxuICAgICAgICAgICAgIG5leHRJbnB1dCA9IHJlc3VsdC5yZXN1bHR8fCcnO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgICBpZD1uZXh0QWN0aW9uLm5leHROb2RlSWRzLmdldChuZXh0SW5wdXQpO1xyXG4gICAgICAgICAgIGlmKGlkPT09dW5kZWZpbmVkKSBicmVhaztcclxuICAgICAgICAgICBuZXh0QWN0aW9uID0gdGhpcy5mbG93LmZpbmROb2RlQnlJZChpZCk7IFxyXG4gICAgICAgIH1cclxuICAgICAgICBpZih0aGlzLmNvbnRleHQuZXJyb3JzLmhhc0Vycm9yKXtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmVycm9ycy5zZXRFdmVudCh0aGlzLmV2ZW50KTsgXHJcbiAgICAgICAgICAgIGlmKFNob3dFcnJvckV2ZW50cy5pbmNsdWRlcyh0aGlzLmV2ZW50LnR5cGUpKXtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC5lcnJvcnMuc2hvd0Vycm9yKCk7XHJcbiAgICAgICAgICAgIH0gICAgXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59IiwiaW1wb3J0ICQgZnJvbSAnanF1ZXJ5JztcclxuaW1wb3J0IHsgQWN0aW9uUHJvY2VzcyB9IGZyb20gJy4vdHlwZXMvYWN0aW9uLXByb2Nlc3MnO1xyXG5pbXBvcnQgeyBBY3Rpb25GbG93IH0gZnJvbSAnLi90eXBlcy9BY3Rpb25UeXBlcyc7XHJcbmltcG9ydCB7IEZsb3dJbmZvIH0gZnJvbSAnLi90eXBlcy9mbG93U2V0dGluZyc7XHJcblxyXG5kZWNsYXJlIGNvbnN0IGFsY2Zsb3cgOiB7XHJcbiAgW2tleTpzdHJpbmddOkZsb3dJbmZvXHJcbn07XHJcblxyXG4kKGZ1bmN0aW9uICgpe1xyXG4gICAgY29uc3QgZ2V0Q2hhbmdlRXZlbnRzPShldmVudHM6c3RyaW5nW10pPT57XHJcbiAgICAgIHJldHVybiBldmVudHMuZmlsdGVyKChldmVudCk9PmV2ZW50LmluY2x1ZGVzKFwiLmNoYW5nZS5cIikpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZ2V0Q2xpY2tFdmVudHM9KGV2ZW50czpzdHJpbmdbXSk9PntcclxuICAgICAgcmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KT0+ZXZlbnQuaW5jbHVkZXMoXCIuY3VzdG9tQnV0dG9uQ2xpY2suXCIpKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGdldEtpbnRvbmVFdmVudHM9KGV2ZW50czpzdHJpbmdbXSk9PntcclxuICAgICAgcmV0dXJuIGV2ZW50cy5maWx0ZXIoKGV2ZW50KT0+e1xyXG4gICAgICAgIHJldHVybiAhZXZlbnQuaW5jbHVkZXMoXCIuY3VzdG9tQnV0dG9uQ2xpY2suXCIpICYmICFldmVudC5pbmNsdWRlcyhcIi5jaGFuZ2UuXCIpXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZXZlbnRzPU9iamVjdC5rZXlzKGFsY2Zsb3cpO1xyXG4gICAgY29uc3QgY2hhbmdlRXZlbnRzID0gZ2V0Q2hhbmdlRXZlbnRzKGV2ZW50cyk7XHJcbiAgICBjb25zdCBjbGlja0V2ZW50cyA9IGdldENsaWNrRXZlbnRzKGV2ZW50cyk7XHJcbiAgICBjb25zdCBraW50b25lRXZlbnRzID0gZ2V0S2ludG9uZUV2ZW50cyhldmVudHMpO1xyXG4gICAgaWYoa2ludG9uZUV2ZW50cy5sZW5ndGg+MCApe1xyXG4gICAgICAvL+mAmuW4uEtpbnRvbmXjgqTjg5njg7Pjg4jjgpLjg5Djg7Pjg4lcclxuICAgICAga2ludG9uZS5ldmVudHMub24oa2ludG9uZUV2ZW50cyxhc3luYyAoZXZlbnQ6YW55KT0+e1xyXG4gICAgICAgIGNvbnN0IGZsb3dpbmZvID0gYWxjZmxvd1tldmVudC50eXBlXTtcclxuICAgICAgICBjb25zdCBmbG93PUFjdGlvbkZsb3cuZnJvbUpTT04oZmxvd2luZm8uY29udGVudCk7XHJcbiAgICAgICAgaWYoZmxvdyE9PXVuZGVmaW5lZCl7XHJcbiAgICAgICAgICBjb25zdCBwcm9jZXNzID0gbmV3IEFjdGlvblByb2Nlc3MoZXZlbnQudHlwZSxmbG93LGV2ZW50KTtcclxuICAgICAgICAgIGF3YWl0IHByb2Nlc3MuZXhlYygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXZlbnQ7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgaWYoY2hhbmdlRXZlbnRzLmxlbmd0aD4wKXtcclxuICAgICAgLy/lgKTlpInmm7TjgqTjg5njg7Pjg4jjgpLjg5Djg7Pjg4njgZnjgotcclxuICAgICAga2ludG9uZS5ldmVudHMub24oY2hhbmdlRXZlbnRzLChldmVudDphbnkpPT57XHJcbiAgICAgICAgY29uc3QgZmxvd2luZm8gPSBhbGNmbG93W2V2ZW50LnR5cGVdO1xyXG4gICAgICAgIGNvbnN0IGZsb3c9QWN0aW9uRmxvdy5mcm9tSlNPTihmbG93aW5mby5jb250ZW50KTtcclxuICAgICAgICBpZihmbG93IT09dW5kZWZpbmVkKXtcclxuICAgICAgICAgIGNvbnN0IHByb2Nlc3MgPSBuZXcgQWN0aW9uUHJvY2VzcyhldmVudC50eXBlLGZsb3csZXZlbnQpO1xyXG4gICAgICAgICAgcHJvY2Vzcy5leGVjKCkudGhlbigocmVzKT0+e1xyXG4gICAgICAgICAgICBjb25zdCByZWNvcmQgPSBldmVudC5yZWNvcmQ7ICBcclxuICAgICAgICAgICAga2ludG9uZS5hcHAucmVjb3JkLnNldCh7cmVjb3JkfSk7XHJcbiAgICAgICAgICB9KS5jYXRjaCgoZXJyKT0+e1xyXG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50O1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIGlmKGNsaWNrRXZlbnRzLmxlbmd0aD4wKXtcclxuICAgICAgY2xpY2tFdmVudHMuZm9yRWFjaCgoZXZlbnROYW1lOnN0cmluZyk9PntcclxuICAgICAgICAkKGRvY3VtZW50KS5vbihldmVudE5hbWUsYXN5bmMgKCk9PntcclxuICAgICAgICAgIGNvbnN0IGV2ZW50PWtpbnRvbmUuYXBwLnJlY29yZC5nZXQoKTtcclxuICAgICAgICAgIGNvbnN0IGZsb3dpbmZvID0gYWxjZmxvd1tldmVudE5hbWVdO1xyXG4gICAgICAgICAgY29uc3QgZmxvdz1BY3Rpb25GbG93LmZyb21KU09OKGZsb3dpbmZvLmNvbnRlbnQpO1xyXG4gICAgICAgICAgaWYoZmxvdyE9PXVuZGVmaW5lZCl7XHJcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3MgPSBuZXcgQWN0aW9uUHJvY2VzcyhldmVudE5hbWUsZmxvdyxldmVudCk7XHJcbiAgICAgICAgICAgIGF3YWl0IHByb2Nlc3MuZXhlYygpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgcmVjb3JkID0gZXZlbnQucmVjb3JkO1xyXG4gICAgICAgICAga2ludG9uZS5hcHAucmVjb3JkLnNldCh7cmVjb3JkfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG59KTsiXSwibmFtZXMiOlsiZ2xvYmFsIiwiZmFjdG9yeSIsIm1vZHVsZSIsInciLCJ0aGlzIiwid2luZG93Iiwibm9HbG9iYWwiLCJhcnIiLCJnZXRQcm90byIsInNsaWNlIiwiZmxhdCIsImFycmF5IiwicHVzaCIsImluZGV4T2YiLCJjbGFzczJ0eXBlIiwidG9TdHJpbmciLCJoYXNPd24iLCJmblRvU3RyaW5nIiwiT2JqZWN0RnVuY3Rpb25TdHJpbmciLCJzdXBwb3J0IiwiaXNGdW5jdGlvbiIsIm9iaiIsImlzV2luZG93IiwiZG9jdW1lbnQiLCJwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzIiwiRE9NRXZhbCIsImNvZGUiLCJub2RlIiwiZG9jIiwiaSIsInZhbCIsInNjcmlwdCIsInRvVHlwZSIsInZlcnNpb24iLCJyaHRtbFN1ZmZpeCIsImpRdWVyeSIsInNlbGVjdG9yIiwiY29udGV4dCIsIm51bSIsImVsZW1zIiwicmV0IiwiY2FsbGJhY2siLCJlbGVtIiwiX2VsZW0iLCJsZW4iLCJqIiwib3B0aW9ucyIsIm5hbWUiLCJzcmMiLCJjb3B5IiwiY29weUlzQXJyYXkiLCJjbG9uZSIsInRhcmdldCIsImxlbmd0aCIsImRlZXAiLCJtc2ciLCJwcm90byIsIkN0b3IiLCJpc0FycmF5TGlrZSIsIm5vZGVUeXBlIiwicmVzdWx0cyIsIm5hbWVzcGFjZSIsImRvY0VsZW0iLCJmaXJzdCIsInNlY29uZCIsImludmVydCIsImNhbGxiYWNrSW52ZXJzZSIsIm1hdGNoZXMiLCJjYWxsYmFja0V4cGVjdCIsImFyZyIsInZhbHVlIiwiX2kiLCJ0eXBlIiwibm9kZU5hbWUiLCJwb3AiLCJzb3J0Iiwic3BsaWNlIiwid2hpdGVzcGFjZSIsInJ0cmltQ1NTIiwiYSIsImIiLCJidXAiLCJyY3NzZXNjYXBlIiwiZmNzc2VzY2FwZSIsImNoIiwiYXNDb2RlUG9pbnQiLCJzZWwiLCJwcmVmZXJyZWREb2MiLCJwdXNoTmF0aXZlIiwiRXhwciIsIm91dGVybW9zdENvbnRleHQiLCJzb3J0SW5wdXQiLCJoYXNEdXBsaWNhdGUiLCJkb2N1bWVudEVsZW1lbnQiLCJkb2N1bWVudElzSFRNTCIsInJidWdneVFTQSIsImV4cGFuZG8iLCJkaXJydW5zIiwiZG9uZSIsImNsYXNzQ2FjaGUiLCJjcmVhdGVDYWNoZSIsInRva2VuQ2FjaGUiLCJjb21waWxlckNhY2hlIiwibm9ubmF0aXZlU2VsZWN0b3JDYWNoZSIsInNvcnRPcmRlciIsImJvb2xlYW5zIiwiaWRlbnRpZmllciIsImF0dHJpYnV0ZXMiLCJwc2V1ZG9zIiwicndoaXRlc3BhY2UiLCJyY29tbWEiLCJybGVhZGluZ0NvbWJpbmF0b3IiLCJyZGVzY2VuZCIsInJwc2V1ZG8iLCJyaWRlbnRpZmllciIsIm1hdGNoRXhwciIsInJpbnB1dHMiLCJyaGVhZGVyIiwicnF1aWNrRXhwciIsInJzaWJsaW5nIiwicnVuZXNjYXBlIiwiZnVuZXNjYXBlIiwiZXNjYXBlIiwibm9uSGV4IiwiaGlnaCIsInVubG9hZEhhbmRsZXIiLCJzZXREb2N1bWVudCIsImluRGlzYWJsZWRGaWVsZHNldCIsImFkZENvbWJpbmF0b3IiLCJzYWZlQWN0aXZlRWxlbWVudCIsImVscyIsImZpbmQiLCJzZWVkIiwibSIsIm5pZCIsIm1hdGNoIiwiZ3JvdXBzIiwibmV3U2VsZWN0b3IiLCJuZXdDb250ZXh0IiwidGVzdENvbnRleHQiLCJ0b2tlbml6ZSIsInRvU2VsZWN0b3IiLCJzZWxlY3QiLCJrZXlzIiwiY2FjaGUiLCJrZXkiLCJtYXJrRnVuY3Rpb24iLCJmbiIsImFzc2VydCIsImVsIiwiY3JlYXRlSW5wdXRQc2V1ZG8iLCJjcmVhdGVCdXR0b25Qc2V1ZG8iLCJjcmVhdGVEaXNhYmxlZFBzZXVkbyIsImRpc2FibGVkIiwiY3JlYXRlUG9zaXRpb25hbFBzZXVkbyIsImFyZ3VtZW50IiwibWF0Y2hJbmRleGVzIiwic3ViV2luZG93IiwiaWQiLCJhdHRySWQiLCJ0YWciLCJjbGFzc05hbWUiLCJpbnB1dCIsImNvbXBhcmUiLCJleHByIiwiZWxlbWVudHMiLCJkdXBsaWNhdGVzIiwiZXhjZXNzIiwidW5xdW90ZWQiLCJub2RlTmFtZVNlbGVjdG9yIiwiZXhwZWN0ZWROb2RlTmFtZSIsInBhdHRlcm4iLCJvcGVyYXRvciIsImNoZWNrIiwicmVzdWx0Iiwid2hhdCIsIl9hcmd1bWVudCIsImxhc3QiLCJzaW1wbGUiLCJmb3J3YXJkIiwib2ZUeXBlIiwiX2NvbnRleHQiLCJ4bWwiLCJvdXRlckNhY2hlIiwibm9kZUluZGV4Iiwic3RhcnQiLCJkaXIiLCJwYXJlbnQiLCJ1c2VDYWNoZSIsImRpZmYiLCJwc2V1ZG8iLCJhcmdzIiwiaWR4IiwibWF0Y2hlZCIsIm1hdGNoZXIiLCJjb21waWxlIiwidW5tYXRjaGVkIiwidGV4dCIsImxhbmciLCJlbGVtTGFuZyIsImhhc2giLCJhdHRyIiwiX21hdGNoSW5kZXhlcyIsInNldEZpbHRlcnMiLCJwYXJzZU9ubHkiLCJ0b2tlbnMiLCJzb0ZhciIsInByZUZpbHRlcnMiLCJjYWNoZWQiLCJjb21iaW5hdG9yIiwiYmFzZSIsInNraXAiLCJjaGVja05vbkVsZW1lbnRzIiwiZG9uZU5hbWUiLCJvbGRDYWNoZSIsIm5ld0NhY2hlIiwiZWxlbWVudE1hdGNoZXIiLCJtYXRjaGVycyIsIm11bHRpcGxlQ29udGV4dHMiLCJjb250ZXh0cyIsImNvbmRlbnNlIiwibWFwIiwiZmlsdGVyIiwibmV3VW5tYXRjaGVkIiwibWFwcGVkIiwic2V0TWF0Y2hlciIsInByZUZpbHRlciIsInBvc3RGaWx0ZXIiLCJwb3N0RmluZGVyIiwicG9zdFNlbGVjdG9yIiwidGVtcCIsIm1hdGNoZXJPdXQiLCJwcmVNYXAiLCJwb3N0TWFwIiwicHJlZXhpc3RpbmciLCJtYXRjaGVySW4iLCJtYXRjaGVyRnJvbVRva2VucyIsImNoZWNrQ29udGV4dCIsImxlYWRpbmdSZWxhdGl2ZSIsImltcGxpY2l0UmVsYXRpdmUiLCJtYXRjaENvbnRleHQiLCJtYXRjaEFueUNvbnRleHQiLCJtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMiLCJlbGVtZW50TWF0Y2hlcnMiLCJzZXRNYXRjaGVycyIsImJ5U2V0IiwiYnlFbGVtZW50Iiwic3VwZXJNYXRjaGVyIiwib3V0ZXJtb3N0IiwibWF0Y2hlZENvdW50Iiwic2V0TWF0Y2hlZCIsImNvbnRleHRCYWNrdXAiLCJkaXJydW5zVW5pcXVlIiwidG9rZW4iLCJjb21waWxlZCIsInVudGlsIiwidHJ1bmNhdGUiLCJzaWJsaW5ncyIsIm4iLCJybmVlZHNDb250ZXh0IiwicnNpbmdsZVRhZyIsIndpbm5vdyIsInF1YWxpZmllciIsIm5vdCIsInNlbGYiLCJyb290alF1ZXJ5IiwiaW5pdCIsInJvb3QiLCJycGFyZW50c3ByZXYiLCJndWFyYW50ZWVkVW5pcXVlIiwidGFyZ2V0cyIsImwiLCJzZWxlY3RvcnMiLCJjdXIiLCJzaWJsaW5nIiwicm5vdGh0bWx3aGl0ZSIsImNyZWF0ZU9wdGlvbnMiLCJvYmplY3QiLCJfIiwiZmxhZyIsImZpcmluZyIsIm1lbW9yeSIsImZpcmVkIiwibG9ja2VkIiwibGlzdCIsInF1ZXVlIiwiZmlyaW5nSW5kZXgiLCJmaXJlIiwiYWRkIiwiaW5kZXgiLCJJZGVudGl0eSIsInYiLCJUaHJvd2VyIiwiZXgiLCJhZG9wdFZhbHVlIiwicmVzb2x2ZSIsInJlamVjdCIsIm5vVmFsdWUiLCJtZXRob2QiLCJmdW5jIiwidHVwbGVzIiwic3RhdGUiLCJwcm9taXNlIiwiZGVmZXJyZWQiLCJmbnMiLCJuZXdEZWZlciIsInR1cGxlIiwicmV0dXJuZWQiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJvblByb2dyZXNzIiwibWF4RGVwdGgiLCJkZXB0aCIsImhhbmRsZXIiLCJzcGVjaWFsIiwidGhhdCIsIm1pZ2h0VGhyb3ciLCJ0aGVuIiwicHJvY2VzcyIsImUiLCJzdGF0ZVN0cmluZyIsInNpbmdsZVZhbHVlIiwicmVtYWluaW5nIiwicmVzb2x2ZUNvbnRleHRzIiwicmVzb2x2ZVZhbHVlcyIsInByaW1hcnkiLCJ1cGRhdGVGdW5jIiwicmVycm9yTmFtZXMiLCJlcnJvciIsImFzeW5jRXJyb3IiLCJyZWFkeUxpc3QiLCJ3YWl0IiwiY29tcGxldGVkIiwiYWNjZXNzIiwiY2hhaW5hYmxlIiwiZW1wdHlHZXQiLCJyYXciLCJidWxrIiwiX2tleSIsInJtc1ByZWZpeCIsInJkYXNoQWxwaGEiLCJmY2FtZWxDYXNlIiwiX2FsbCIsImxldHRlciIsImNhbWVsQ2FzZSIsInN0cmluZyIsImFjY2VwdERhdGEiLCJvd25lciIsIkRhdGEiLCJkYXRhIiwicHJvcCIsImRhdGFQcml2IiwiZGF0YVVzZXIiLCJyYnJhY2UiLCJybXVsdGlEYXNoIiwiZ2V0RGF0YSIsImRhdGFBdHRyIiwiYXR0cnMiLCJzdGFydExlbmd0aCIsImhvb2tzIiwibmV4dCIsInNldHRlciIsInRtcCIsImNvdW50IiwiZGVmZXIiLCJwbnVtIiwicmNzc051bSIsImNzc0V4cGFuZCIsImlzQXR0YWNoZWQiLCJjb21wb3NlZCIsImlzSGlkZGVuV2l0aGluVHJlZSIsImFkanVzdENTUyIsInZhbHVlUGFydHMiLCJ0d2VlbiIsImFkanVzdGVkIiwic2NhbGUiLCJtYXhJdGVyYXRpb25zIiwiY3VycmVudFZhbHVlIiwiaW5pdGlhbCIsInVuaXQiLCJpbml0aWFsSW5Vbml0IiwiZGVmYXVsdERpc3BsYXlNYXAiLCJnZXREZWZhdWx0RGlzcGxheSIsImRpc3BsYXkiLCJzaG93SGlkZSIsInNob3ciLCJ2YWx1ZXMiLCJyY2hlY2thYmxlVHlwZSIsInJ0YWdOYW1lIiwicnNjcmlwdFR5cGUiLCJmcmFnbWVudCIsImRpdiIsIndyYXBNYXAiLCJnZXRBbGwiLCJzZXRHbG9iYWxFdmFsIiwicmVmRWxlbWVudHMiLCJyaHRtbCIsImJ1aWxkRnJhZ21lbnQiLCJzY3JpcHRzIiwic2VsZWN0aW9uIiwiaWdub3JlZCIsIndyYXAiLCJhdHRhY2hlZCIsIm5vZGVzIiwicnR5cGVuYW1lc3BhY2UiLCJyZXR1cm5UcnVlIiwicmV0dXJuRmFsc2UiLCJvbiIsInR5cGVzIiwib25lIiwib3JpZ0ZuIiwiZXZlbnQiLCJoYW5kbGVPYmpJbiIsImV2ZW50SGFuZGxlIiwiZXZlbnRzIiwidCIsImhhbmRsZU9iaiIsImhhbmRsZXJzIiwibmFtZXNwYWNlcyIsIm9yaWdUeXBlIiwiZWxlbURhdGEiLCJtYXBwZWRUeXBlcyIsIm9yaWdDb3VudCIsIm5hdGl2ZUV2ZW50IiwiaGFuZGxlclF1ZXVlIiwibWF0Y2hlZEhhbmRsZXJzIiwibWF0Y2hlZFNlbGVjdG9ycyIsImRlbGVnYXRlQ291bnQiLCJob29rIiwib3JpZ2luYWxFdmVudCIsImxldmVyYWdlTmF0aXZlIiwiaXNTZXR1cCIsInNhdmVkIiwiaGFuZGxlIiwicHJvcHMiLCJkZWxlZ2F0ZVR5cGUiLCJmb2N1c01hcHBlZEhhbmRsZXIiLCJhdHRhY2hlcyIsImRhdGFIb2xkZXIiLCJvcmlnIiwiZml4IiwicmVsYXRlZCIsInJub0lubmVyaHRtbCIsInJjaGVja2VkIiwicmNsZWFuU2NyaXB0IiwibWFuaXB1bGF0aW9uVGFyZ2V0IiwiY29udGVudCIsImRpc2FibGVTY3JpcHQiLCJyZXN0b3JlU2NyaXB0IiwiY2xvbmVDb3B5RXZlbnQiLCJkZXN0IiwicGRhdGFPbGQiLCJ1ZGF0YU9sZCIsInVkYXRhQ3VyIiwiZml4SW5wdXQiLCJkb21NYW5pcCIsImNvbGxlY3Rpb24iLCJoYXNTY3JpcHRzIiwiaU5vQ2xvbmUiLCJ2YWx1ZUlzRnVuY3Rpb24iLCJyZW1vdmUiLCJrZWVwRGF0YSIsImh0bWwiLCJkYXRhQW5kRXZlbnRzIiwiZGVlcERhdGFBbmRFdmVudHMiLCJzcmNFbGVtZW50cyIsImRlc3RFbGVtZW50cyIsImluUGFnZSIsIm9yaWdpbmFsIiwiaW5zZXJ0Iiwicm51bW5vbnB4IiwicmN1c3RvbVByb3AiLCJnZXRTdHlsZXMiLCJ2aWV3Iiwic3dhcCIsIm9sZCIsInJib3hTdHlsZSIsImNvbXB1dGVTdHlsZVRlc3RzIiwiY29udGFpbmVyIiwiZGl2U3R5bGUiLCJwaXhlbFBvc2l0aW9uVmFsIiwicmVsaWFibGVNYXJnaW5MZWZ0VmFsIiwicm91bmRQaXhlbE1lYXN1cmVzIiwicGl4ZWxCb3hTdHlsZXNWYWwiLCJib3hTaXppbmdSZWxpYWJsZVZhbCIsInNjcm9sbGJveFNpemVWYWwiLCJtZWFzdXJlIiwicmVsaWFibGVUckRpbWVuc2lvbnNWYWwiLCJ0YWJsZSIsInRyIiwidHJDaGlsZCIsInRyU3R5bGUiLCJjdXJDU1MiLCJjb21wdXRlZCIsIndpZHRoIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsImlzQ3VzdG9tUHJvcCIsInN0eWxlIiwiYWRkR2V0SG9va0lmIiwiY29uZGl0aW9uRm4iLCJob29rRm4iLCJjc3NQcmVmaXhlcyIsImVtcHR5U3R5bGUiLCJ2ZW5kb3JQcm9wcyIsInZlbmRvclByb3BOYW1lIiwiY2FwTmFtZSIsImZpbmFsUHJvcE5hbWUiLCJmaW5hbCIsInJkaXNwbGF5c3dhcCIsImNzc1Nob3ciLCJjc3NOb3JtYWxUcmFuc2Zvcm0iLCJzZXRQb3NpdGl2ZU51bWJlciIsInN1YnRyYWN0IiwiYm94TW9kZWxBZGp1c3RtZW50IiwiZGltZW5zaW9uIiwiYm94IiwiaXNCb3JkZXJCb3giLCJzdHlsZXMiLCJjb21wdXRlZFZhbCIsImV4dHJhIiwiZGVsdGEiLCJtYXJnaW5EZWx0YSIsImdldFdpZHRoT3JIZWlnaHQiLCJib3hTaXppbmdOZWVkZWQiLCJ2YWx1ZUlzQm9yZGVyQm94Iiwib2Zmc2V0UHJvcCIsIm9yaWdOYW1lIiwic2Nyb2xsYm94U2l6ZUJ1Z2d5IiwicHJlZml4Iiwic3VmZml4IiwiZXhwYW5kZWQiLCJwYXJ0cyIsIlR3ZWVuIiwiZW5kIiwiZWFzaW5nIiwicGVyY2VudCIsImVhc2VkIiwicCIsImZ4Tm93IiwiaW5Qcm9ncmVzcyIsInJmeHR5cGVzIiwicnJ1biIsInNjaGVkdWxlIiwiY3JlYXRlRnhOb3ciLCJnZW5GeCIsImluY2x1ZGVXaWR0aCIsIndoaWNoIiwiY3JlYXRlVHdlZW4iLCJhbmltYXRpb24iLCJBbmltYXRpb24iLCJkZWZhdWx0UHJlZmlsdGVyIiwib3B0cyIsInRvZ2dsZSIsIm9sZGZpcmUiLCJwcm9wVHdlZW4iLCJyZXN0b3JlRGlzcGxheSIsImlzQm94IiwiYW5pbSIsImhpZGRlbiIsImRhdGFTaG93IiwicHJvcEZpbHRlciIsInNwZWNpYWxFYXNpbmciLCJwcm9wZXJ0aWVzIiwic3RvcHBlZCIsInRpY2siLCJjdXJyZW50VGltZSIsImdvdG9FbmQiLCJwcmVwZW5kIiwic3BlZWQiLCJvcHQiLCJ0byIsImVtcHR5Iiwib3B0YWxsIiwiZG9BbmltYXRpb24iLCJjbGVhclF1ZXVlIiwic3RvcFF1ZXVlIiwic3RvcCIsImRlcXVldWUiLCJ0aW1lcnMiLCJjc3NGbiIsInRpbWVyIiwidGltZSIsInRpbWVvdXQiLCJib29sSG9vayIsImF0dHJIYW5kbGUiLCJuVHlwZSIsImF0dHJOYW1lcyIsImdldHRlciIsImlzWE1MIiwibG93ZXJjYXNlTmFtZSIsInJmb2N1c2FibGUiLCJyY2xpY2thYmxlIiwidGFiaW5kZXgiLCJzdHJpcEFuZENvbGxhcHNlIiwiZ2V0Q2xhc3MiLCJjbGFzc2VzVG9BcnJheSIsImNsYXNzTmFtZXMiLCJjdXJWYWx1ZSIsImZpbmFsVmFsdWUiLCJzdGF0ZVZhbCIsImlzVmFsaWRWYWx1ZSIsInJyZXR1cm4iLCJvcHRpb24iLCJtYXgiLCJvcHRpb25TZXQiLCJsb2NhdGlvbiIsIm5vbmNlIiwicnF1ZXJ5IiwicGFyc2VyRXJyb3JFbGVtIiwicmZvY3VzTW9ycGgiLCJzdG9wUHJvcGFnYXRpb25DYWxsYmFjayIsIm9ubHlIYW5kbGVycyIsImJ1YmJsZVR5cGUiLCJvbnR5cGUiLCJsYXN0RWxlbWVudCIsImV2ZW50UGF0aCIsInJicmFja2V0IiwickNSTEYiLCJyc3VibWl0dGVyVHlwZXMiLCJyc3VibWl0dGFibGUiLCJidWlsZFBhcmFtcyIsInRyYWRpdGlvbmFsIiwicyIsInZhbHVlT3JGdW5jdGlvbiIsInIyMCIsInJoYXNoIiwicmFudGlDYWNoZSIsInJoZWFkZXJzIiwicmxvY2FsUHJvdG9jb2wiLCJybm9Db250ZW50IiwicnByb3RvY29sIiwicHJlZmlsdGVycyIsInRyYW5zcG9ydHMiLCJhbGxUeXBlcyIsIm9yaWdpbkFuY2hvciIsImFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyIsInN0cnVjdHVyZSIsImRhdGFUeXBlRXhwcmVzc2lvbiIsImRhdGFUeXBlIiwiZGF0YVR5cGVzIiwiaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMiLCJvcmlnaW5hbE9wdGlvbnMiLCJqcVhIUiIsImluc3BlY3RlZCIsInNlZWtpbmdUcmFuc3BvcnQiLCJpbnNwZWN0Iiwic2VsZWN0ZWQiLCJwcmVmaWx0ZXJPckZhY3RvcnkiLCJkYXRhVHlwZU9yVHJhbnNwb3J0IiwiYWpheEV4dGVuZCIsImZsYXRPcHRpb25zIiwiYWpheEhhbmRsZVJlc3BvbnNlcyIsInJlc3BvbnNlcyIsImN0IiwiZmluYWxEYXRhVHlwZSIsImZpcnN0RGF0YVR5cGUiLCJjb250ZW50cyIsImFqYXhDb252ZXJ0IiwicmVzcG9uc2UiLCJpc1N1Y2Nlc3MiLCJjb252MiIsImN1cnJlbnQiLCJjb252IiwicHJldiIsImNvbnZlcnRlcnMiLCJzZXR0aW5ncyIsInVybCIsInRyYW5zcG9ydCIsImNhY2hlVVJMIiwicmVzcG9uc2VIZWFkZXJzU3RyaW5nIiwicmVzcG9uc2VIZWFkZXJzIiwidGltZW91dFRpbWVyIiwidXJsQW5jaG9yIiwiZmlyZUdsb2JhbHMiLCJ1bmNhY2hlZCIsImNhbGxiYWNrQ29udGV4dCIsImdsb2JhbEV2ZW50Q29udGV4dCIsImNvbXBsZXRlRGVmZXJyZWQiLCJzdGF0dXNDb2RlIiwicmVxdWVzdEhlYWRlcnMiLCJyZXF1ZXN0SGVhZGVyc05hbWVzIiwic3RyQWJvcnQiLCJzdGF0dXNUZXh0IiwiZmluYWxUZXh0Iiwic3RhdHVzIiwibmF0aXZlU3RhdHVzVGV4dCIsImhlYWRlcnMiLCJzdWNjZXNzIiwibW9kaWZpZWQiLCJodG1sSXNGdW5jdGlvbiIsInhoclN1Y2Nlc3NTdGF0dXMiLCJ4aHJTdXBwb3J0ZWQiLCJlcnJvckNhbGxiYWNrIiwiY29tcGxldGUiLCJ4aHIiLCJldnQiLCJvbGRDYWxsYmFja3MiLCJyanNvbnAiLCJvcmlnaW5hbFNldHRpbmdzIiwiY2FsbGJhY2tOYW1lIiwib3ZlcndyaXR0ZW4iLCJyZXNwb25zZUNvbnRhaW5lciIsImpzb25Qcm9wIiwiYm9keSIsImtlZXBTY3JpcHRzIiwicGFyc2VkIiwicGFyYW1zIiwib2ZmIiwicmVzcG9uc2VUZXh0IiwiY3VyUG9zaXRpb24iLCJjdXJMZWZ0IiwiY3VyQ1NTVG9wIiwiY3VyVG9wIiwiY3VyT2Zmc2V0IiwiY3VyQ1NTTGVmdCIsImNhbGN1bGF0ZVBvc2l0aW9uIiwicG9zaXRpb24iLCJjdXJFbGVtIiwicmVjdCIsIndpbiIsIm9mZnNldFBhcmVudCIsIm9mZnNldCIsInBhcmVudE9mZnNldCIsInRvcCIsImRlZmF1bHRFeHRyYSIsImZ1bmNOYW1lIiwibWFyZ2luIiwiZm5PdmVyIiwiZm5PdXQiLCJydHJpbSIsInByb3h5IiwiaG9sZCIsIl9qUXVlcnkiLCJfJCIsIl9fcHVibGljRmllbGQiLCJhY3Rpb25Ob2RlIiwicmVjb3JkIiwiZm9ybWF0IiwiaW50ZWdlclBhcnQiLCJmcmFjdGlvblBhcnQiLCJpc05lZ2F0aXZlIiwiaXNQZXJjZW50IiwiaW50ZWdlckZvcm1hdCIsImZyYWN0aW9uRm9ybWF0IiwiZGF0ZSIsInllYXIiLCJtb250aCIsImRheSIsImhvdXIiLCJtaW51dGUiLCJtaWxsaXNlY29uZCIsInRpbWVab25lT2Zmc2V0IiwicmVwbGFjZW1lbnRzIiwiZG9jTnVtIiwidGVtcGxhdGUiLCJyZWdleCIsIm5vdyIsIm51bWJlciIsIm5vIiwicmVjTm8iLCJhcHB1cmwiLCJyZXNwIiwibG9naWNPcCIsImpzb24iLCJjaGlsZEpzb24iLCJmb3VuZE5vZGUiLCJtYXhJbmRleCIsImNoaWxkIiwiY2hpbGRNYXgiLCJjb25kaXRpb25TdHJpbmciLCJncm91cE5vZGUiLCJjaGlsZENvbmRpdGlvblN0cmluZyIsImNvbmROb2RlIiwiY29uZGlOb2RlcyIsImpzb25TdHJpbmciLCJ2YXJzIiwicGF0aCIsIm8iLCJrIiwiZmllbGRWYWx1ZSIsInZhclZhbHVlIiwiY29uZGl0aW9uIiwidGFyZ2V0T2JqZWN0IiwiY29uZGl0aW9uT2JqZWN0IiwiaXNBcnJheVRhcmdldCIsImlzQXJyYXlWYWx1ZSIsInRhcmdldFZhbHVlIiwiY29uZGl0aW9uVmFsdWUiLCJkYXRlVmFsdWUiLCJudW1iZXJWYWx1ZSIsInNvcnRBcnJheSIsInRhcmdldEFycmF5IiwidmFsdWVBcnJheSIsInRyZWUiLCJjb25kaXRpb25SZXN1bHQiLCJidXR0b25TcGFjZSIsImJ1dHRvbiIsImNsaWNrRXZlbnROYW1lIiwiZXhwb3J0cyIsImluamVjdFBsYXRmb3JtRGVwcyIsImRlcHMiLCJfX2V4dGVuZHMiLCJleHRlbmRTdGF0aWNzIiwiZCIsIl9fIiwiVW5zdXBwb3J0ZWRQbGF0Zm9ybUVycm9yXzEiLCJfc3VwZXIiLCJVbnN1cHBvcnRlZFBsYXRmb3JtRXJyb3IiLCJwbGF0Zm9ybSIsIl90aGlzIiwibWVzc2FnZSIsIk1pbWUiLCJ0eXBlTWFwIiwiZm9yY2UiLCJleHRlbnNpb25zIiwiZXh0IiwiaGFzUGF0aCIsInJlcXVpcmUkJDAiLCJyZXF1aXJlJCQxIiwiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiYWRvcHQiLCJmdWxmaWxsZWQiLCJzdGVwIiwicmVqZWN0ZWQiLCJfX2dlbmVyYXRvciIsImYiLCJ5IiwiZyIsInZlcmIiLCJvcCIsIl9faW1wb3J0RGVmYXVsdCIsIm1vZCIsImJyb3dzZXIiLCJmaWxlUGF0aCIsIl9hIiwiX2IiLCJfYyIsImZpbGVOYW1lIiwiYmFzZVVybCIsImhvc3QiLCJwcm90b2NvbCIsImVuZHBvaW50TmFtZSIsImd1ZXN0U3BhY2VJZCIsInByZXZpZXciLCJndWVzdFBhdGgiLCJwcmV2aWV3UGF0aCIsIl9fYXNzaWduIiwiQmFzZUNsaWVudF8xIiwiQmFzZUNsaWVudCIsImNsaWVudCIsIl9fcmVzdCIsIkJ1bGtSZXF1ZXN0Q2xpZW50XzEiLCJCdWxrUmVxdWVzdENsaWVudCIsInJlcXVlc3RzUGFyYW0iLCJyZXF1ZXN0cyIsInJlcXVlc3QiLCJyZXN0IiwiQXBwQ2xpZW50XzEiLCJBcHBDbGllbnQiLCJzcGFjZSIsInNwYWNlUGF0aCIsImRlZmF1bHRUaHJlYWQiLCJLaW50b25lQWJvcnRTZWFyY2hFcnJvcl8xIiwiS2ludG9uZUFib3J0U2VhcmNoRXJyb3IiLCJLaW50b25lQWxsUmVjb3Jkc0Vycm9yXzEiLCJLaW50b25lQWxsUmVjb3Jkc0Vycm9yIiwicHJvY2Vzc2VkUmVjb3Jkc1Jlc3VsdCIsInVucHJvY2Vzc2VkUmVjb3JkcyIsIm51bU9mQWxsUmVjb3JkcyIsImNodW5rTGVuZ3RoIiwibnVtT2ZQcm9jZXNzZWRSZWNvcmRzIiwiZXJyb3JJbmRleCIsImVycm9ycyIsImVycm9ySW5kZXhlcyIsImVycm9yS2V5IiwiZXJyb3JQYXJzZVJlc3VsdCIsIktpbnRvbmVSZXN0QVBJRXJyb3JfMSIsIktpbnRvbmVSZXN0QVBJRXJyb3IiLCJidWxrUmVxdWVzdEluZGV4IiwiX19jcmVhdGVCaW5kaW5nIiwiazIiLCJkZXNjIiwiX19leHBvcnRTdGFyIiwicmVxdWlyZSQkMiIsImZyb20iLCJwYWNrIiwiYXIiLCJSZWNvcmRDbGllbnRfMSIsImVycm9yXzEiLCJSZWNvcmRDbGllbnQiLCJidWxrUmVxdWVzdENsaWVudCIsImFwcCIsInVwZGF0ZUtleSIsInJlY29yZHMiLCJyZXZpc2lvbiIsInF1ZXJ5IiwicmVnZXhwIiwiaWRzIiwicmV2aXNpb25zIiwib3JkZXJCeSIsIndpdGhDdXJzb3IiLCJjb25kaXRpb25RdWVyeSIsIm9yaWdpbmFsRmllbGRzIiwiZmllbGRzIiwiYWxsUmVjb3JkcyIsImxhc3RJZCIsImxhc3RSZWNvcmQiLCJlcnJvcl8yIiwiQ0hVTktfTEVOR1RIIiwicmVjb3Jkc0NodW5rIiwibmV3UmVzdWx0cyIsImVfMSIsInNlcGFyYXRlZFJlY29yZHMiLCJhY2MiLCJlXzIiLCJlXzMiLCJzaXplIiwic2VwYXJhdGVkIiwiY2h1bmsiLCJTcGFjZUNsaWVudF8xIiwiU3BhY2VDbGllbnQiLCJGaWxlQ2xpZW50XzEiLCJmb3JtX2RhdGFfMSIsInBsYXRmb3JtXzEiLCJyZXF1aXJlJCQzIiwiRmlsZUNsaWVudCIsImZvcm1EYXRhIiwibmFtZV8xIiwibmFtZV8yIiwiZmlsZURhdGEiLCJiaW5kIiwidGhpbmciLCJzdHIiLCJpc0FycmF5IiwiaXNCdWZmZXIiLCJpc1N0cmluZyIsImlzTnVtYmVyIiwiaXNCb29sZWFuIiwicHJvdG90eXBlIiwiaXNEYXRlIiwia2luZCIsImFsbE93bktleXMiLCJtZXJnZSIsImNhc2VsZXNzIiwiYXNzaWduVmFsdWUiLCJ0YXJnZXRLZXkiLCJjb25zdHJ1Y3RvciIsInN1cGVyQ29uc3RydWN0b3IiLCJkZXNjcmlwdG9ycyIsInNvdXJjZU9iaiIsImRlc3RPYmoiLCJtZXJnZWQiLCJzZWFyY2hTdHJpbmciLCJsYXN0SW5kZXgiLCJUeXBlZEFycmF5IiwiaXRlcmF0b3IiLCJwYWlyIiwicmVnRXhwIiwicDEiLCJwMiIsImhhc093blByb3BlcnR5IiwiaXNSZWdFeHAiLCJyZWR1Y2VyIiwicmVkdWNlZERlc2NyaXB0b3JzIiwiZGVzY3JpcHRvciIsImFycmF5T3JTdHJpbmciLCJkZWxpbWl0ZXIiLCJkZWZpbmUiLCJub29wIiwiZGVmYXVsdFZhbHVlIiwiYWxwaGFiZXQiLCJzdGFjayIsInZpc2l0Iiwic291cmNlIiwicmVkdWNlZFZhbHVlIiwidXRpbHMkMSIsImNvbmZpZyIsInRvSlNPTiIsImN1c3RvbVByb3BzIiwiYXhpb3NFcnJvciIsImRvdHMiLCJtZXRhVG9rZW5zIiwidmlzaXRvciIsImRlZmF1bHRWaXNpdG9yIiwiaW5kZXhlcyIsInVzZUJsb2IiLCJjb252ZXJ0VmFsdWUiLCJleHBvc2VkSGVscGVycyIsImJ1aWxkIiwiY2hhck1hcCIsImFwcGVuZCIsImVuY29kZXIiLCJfZW5jb2RlIiwiZW5jb2RlIiwic2VyaWFsaXplRm4iLCJzZXJpYWxpemVkUGFyYW1zIiwiaGFzaG1hcmtJbmRleCIsImgiLCJwcm9kdWN0IiwidXRpbHMiLCJoZWxwZXJzIiwiYXJyYXlUb09iamVjdCIsImJ1aWxkUGF0aCIsImlzTnVtZXJpY0tleSIsImlzTGFzdCIsInJhd1ZhbHVlIiwicGFyc2VyIiwiZGVmYXVsdHMiLCJ0cmFuc2Zvcm1SZXF1ZXN0IiwiY29udGVudFR5cGUiLCJoYXNKU09OQ29udGVudFR5cGUiLCJpc09iamVjdFBheWxvYWQiLCJpc0ZpbGVMaXN0IiwiX0Zvcm1EYXRhIiwidHJhbnNmb3JtUmVzcG9uc2UiLCJ0cmFuc2l0aW9uYWwiLCJmb3JjZWRKU09OUGFyc2luZyIsIkpTT05SZXF1ZXN0ZWQiLCJzdHJpY3RKU09OUGFyc2luZyIsInZhbGlkYXRlU3RhdHVzIiwiZGVmYXVsdHMkMSIsInJhd0hlYWRlcnMiLCJsaW5lIiwiaGVhZGVyIiwidG9rZW5zUkUiLCJpc0hlYWRlck5hbWVGaWx0ZXIiLCJjaGFyIiwiYWNjZXNzb3JOYW1lIiwibWV0aG9kTmFtZSIsImFyZzEiLCJhcmcyIiwiYXJnMyIsInZhbHVlT3JSZXdyaXRlIiwicmV3cml0ZSIsInNldEhlYWRlciIsIl92YWx1ZSIsIl9oZWFkZXIiLCJfcmV3cml0ZSIsImxIZWFkZXIiLCJzZXRIZWFkZXJzIiwiZGVsZXRlZCIsImRlbGV0ZUhlYWRlciIsIm5vcm1hbGl6ZWQiLCJhc1N0cmluZ3MiLCJhY2Nlc3NvcnMiLCJkZWZpbmVBY2Nlc3NvciIsImhlYWRlclZhbHVlIiwic2FtcGxlc0NvdW50IiwibWluIiwiYnl0ZXMiLCJ0aW1lc3RhbXBzIiwiaGVhZCIsInRhaWwiLCJmaXJzdFNhbXBsZVRTIiwic3RhcnRlZEF0IiwiYnl0ZXNDb3VudCIsInBhc3NlZCIsImZyZXEiLCJ0aW1lc3RhbXAiLCJ0aHJlc2hvbGQiLCJsaXN0ZW5lciIsImlzRG93bmxvYWRTdHJlYW0iLCJieXRlc05vdGlmaWVkIiwiX3NwZWVkb21ldGVyIiwibG9hZGVkIiwidG90YWwiLCJwcm9ncmVzc0J5dGVzIiwicmF0ZSIsImluUmFuZ2UiLCJzdGFuZGFyZEJyb3dzZXJFbnYiLCJtc2llIiwidXJsUGFyc2luZ05vZGUiLCJvcmlnaW5VUkwiLCJyZXNvbHZlVVJMIiwiaHJlZiIsInJlcXVlc3RVUkwiLCJub25TdGFuZGFyZEJyb3dzZXJFbnYiLCJleHBpcmVzIiwiZG9tYWluIiwic2VjdXJlIiwiY29va2llIiwiYmFzZVVSTCIsInJlbGF0aXZlVVJMIiwicmVxdWVzdGVkVVJMIiwiY29uZmlnMSIsImNvbmZpZzIiLCJnZXRNZXJnZWRWYWx1ZSIsIm1lcmdlRGVlcFByb3BlcnRpZXMiLCJ2YWx1ZUZyb21Db25maWcyIiwiZGVmYXVsdFRvQ29uZmlnMiIsIm1lcmdlRGlyZWN0S2V5cyIsIm1lcmdlTWFwIiwiY29uZmlnVmFsdWUiLCJuZXdDb25maWciLCJ3aXRoWFNSRlRva2VuIiwieHNyZkhlYWRlck5hbWUiLCJ4c3JmQ29va2llTmFtZSIsImF1dGgiLCJ4c3JmVmFsdWUiLCJfY29uZmlnIiwicmVxdWVzdERhdGEiLCJyZXNwb25zZVR5cGUiLCJvbkNhbmNlbGVkIiwib25sb2FkZW5kIiwiZXJyIiwidGltZW91dEVycm9yTWVzc2FnZSIsImNhbmNlbCIsInNpZ25hbHMiLCJjb250cm9sbGVyIiwiYWJvcnRlZCIsIm9uYWJvcnQiLCJ1bnN1YnNjcmliZSIsInNpZ25hbCIsImNodW5rU2l6ZSIsInBvcyIsIml0ZXJhYmxlIiwic3RyZWFtIiwib25GaW5pc2giLCJyZWFzb24iLCJsZW5ndGhDb21wdXRhYmxlIiwiZHVwbGV4QWNjZXNzZWQiLCJoYXNDb250ZW50VHlwZSIsInJlcyIsImNhbmNlbFRva2VuIiwib25Eb3dubG9hZFByb2dyZXNzIiwib25VcGxvYWRQcm9ncmVzcyIsIndpdGhDcmVkZW50aWFscyIsImZldGNoT3B0aW9ucyIsImNvbXBvc2VkU2lnbmFsIiwic3RvcFRpbWVvdXQiLCJmaW5pc2hlZCIsInJlcXVlc3RDb250ZW50TGVuZ3RoIiwiX3JlcXVlc3QiLCJjb250ZW50VHlwZUhlYWRlciIsImlzU3RyZWFtUmVzcG9uc2UiLCJyZXNwb25zZUNvbnRlbnRMZW5ndGgiLCJyZXNwb25zZURhdGEiLCJhZGFwdGVyIiwiYWRhcHRlcnMiLCJuYW1lT3JBZGFwdGVyIiwicmVqZWN0ZWRSZWFzb25zIiwicmVhc29ucyIsIlZFUlNJT04iLCJ2YWxpZGF0b3IiLCJmb3JtYXRNZXNzYWdlIiwic2NoZW1hIiwiYWxsb3dVbmtub3duIiwiaW5zdGFuY2VDb25maWciLCJjb25maWdPclVybCIsImR1bW15IiwicGFyYW1zU2VyaWFsaXplciIsImNvbnRleHRIZWFkZXJzIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbiIsImNoYWluIiwiZnVsbFBhdGgiLCJmb3JFYWNoTWV0aG9kTm9EYXRhIiwiZm9yRWFjaE1ldGhvZFdpdGhEYXRhIiwiZ2VuZXJhdGVIVFRQTWV0aG9kIiwiaXNGb3JtIiwiZXhlY3V0b3IiLCJyZXNvbHZlUHJvbWlzZSIsIm9uZnVsZmlsbGVkIiwiX3Jlc29sdmUiLCJjIiwicGF5bG9hZCIsImRlZmF1bHRDb25maWciLCJpbnN0YW5jZSIsImFsbCIsInByb21pc2VzIiwiYXhpb3NfMSIsIkF4aW9zQ2xpZW50XzEiLCJBeGlvc0NsaWVudCIsInJlc3BvbnNlSGFuZGxlciIsInJlcXVlc3RDb25maWdCdWlsZGVyIiwicmVxdWVzdENvbmZpZyIsImhhc1N5bWJvbHMiLCJzeW0iLCJzeW1PYmoiLCJzeW1WYWwiLCJzeW1zIiwiaGFzTmF0aXZlU3ltYm9scyIsImhhc1Byb3RvIiwidG9TdHIiLCJjb25jYXR0eSIsInNsaWN5IiwiYXJyTGlrZSIsImpvaW5lciIsImltcGxlbWVudGF0aW9uIiwiYm91bmQiLCJiaW5kZXIiLCJib3VuZExlbmd0aCIsImJvdW5kQXJncyIsIkVtcHR5IiwidW5kZWZpbmVkIiwiJFN5bnRheEVycm9yIiwicmVxdWlyZSQkNCIsIiRUeXBlRXJyb3IiLCJyZXF1aXJlJCQ1IiwicmVxdWlyZSQkNiIsImV4cHJlc3Npb25TeW50YXgiLCIkZ09QRCIsInJlcXVpcmUkJDciLCJyZXF1aXJlJCQ4IiwieCIsImRvRXZhbCIsImdlbiIsInJlcXVpcmUkJDkiLCJyZXF1aXJlJCQxMCIsIiRjb25jYXQiLCIkcmVwbGFjZSIsInN0cmluZ1RvUGF0aCIsInF1b3RlIiwic3ViU3RyaW5nIiwiZ2V0QmFzZUludHJpbnNpYyIsImFsbG93TWlzc2luZyIsImludHJpbnNpY05hbWUiLCJhbGlhcyIsIkdldEludHJpbnNpYyIsImludHJpbnNpY0Jhc2VOYW1lIiwiaW50cmluc2ljIiwiaW50cmluc2ljUmVhbE5hbWUiLCJza2lwRnVydGhlckNhY2hpbmciLCJpc093biIsInBhcnQiLCIkZGVmaW5lUHJvcGVydHkiLCJnb3BkIiwiZGVmaW5lRGF0YVByb3BlcnR5IiwicHJvcGVydHkiLCJub25FbnVtZXJhYmxlIiwibm9uV3JpdGFibGUiLCJub25Db25maWd1cmFibGUiLCJsb29zZSIsImhhc1Byb3BlcnR5RGVzY3JpcHRvcnMiLCJoYXNBcnJheUxlbmd0aERlZmluZUJ1ZyIsIiRmbG9vciIsInNldEZ1bmN0aW9uTGVuZ3RoIiwiZnVuY3Rpb25MZW5ndGhJc0NvbmZpZ3VyYWJsZSIsImZ1bmN0aW9uTGVuZ3RoSXNXcml0YWJsZSIsIiRhcHBseSIsIiRjYWxsIiwiJHJlZmxlY3RBcHBseSIsIiRtYXgiLCJvcmlnaW5hbEZ1bmN0aW9uIiwiYXBwbHlCaW5kIiwiY2FsbEJvdW5kIiwiY2FsbEJvdW5kSW50cmluc2ljIiwiTyIsInNlcFJlZ2V4IiwiaW50IiwiaW50U3RyIiwiZGVjIiwiaW5zcGVjdF8iLCJzZWVuIiwiaGFzIiwiY3VzdG9tSW5zcGVjdCIsIm51bWVyaWNTZXBhcmF0b3IiLCJiaWdJbnRTdHIiLCJpbmRlbnQiLCJub0luZGVudCIsIm5ld09wdHMiLCJzeW1TdHJpbmciLCJpc0VsZW1lbnQiLCJ4cyIsIm1hcFBhcnRzIiwic2V0UGFydHMiLCJ5cyIsImlzUGxhaW5PYmplY3QiLCJwcm90b1RhZyIsInN0cmluZ1RhZyIsImNvbnN0cnVjdG9yVGFnIiwiZGVmYXVsdFN0eWxlIiwicXVvdGVDaGFyIiwidHJhaWxlciIsImVudHJpZXMiLCJqb2luZWRFbnRyaWVzIiwiYmFzZUluZGVudCIsImxpbmVKb2luZXIiLCJpc0FyciIsInN5bU1hcCIsImN1cnIiLCJvYmplY3RzIiwiZ2V0U2lkZUNoYW5uZWwiLCIkd20iLCIkbSIsIiRvIiwiY2hhbm5lbCIsImZvcm1hdHMiLCJjb21wYWN0UXVldWUiLCJpdGVtIiwiY29tcGFjdGVkIiwibWVyZ2VUYXJnZXQiLCJ0YXJnZXRJdGVtIiwiYXNzaWduU2luZ2xlU291cmNlIiwiZGVjb2RlciIsImNoYXJzZXQiLCJzdHJXaXRob3V0UGx1cyIsImRlZmF1bHRFbmNvZGVyIiwiJDAiLCJvdXQiLCJzZWdtZW50IiwiY29tcGFjdCIsInJlZnMiLCJjb21iaW5lIiwibWF5YmVNYXAiLCJicmFja2V0cyIsImluZGljZXMiLCJyZXBlYXQiLCJ2YWx1ZU9yQXJyYXkiLCJzZXJpYWxpemVEYXRlIiwiaXNOb25OdWxsaXNoUHJpbWl0aXZlIiwic3RyaW5naWZ5IiwiZ2VuZXJhdGVBcnJheVByZWZpeCIsImNvbW1hUm91bmRUcmlwIiwiYWxsb3dFbXB0eUFycmF5cyIsInN0cmljdE51bGxIYW5kbGluZyIsInNraXBOdWxscyIsImVuY29kZURvdEluS2V5cyIsImFsbG93RG90cyIsImZvcm1hdHRlciIsImVuY29kZVZhbHVlc09ubHkiLCJzaWRlQ2hhbm5lbCIsInRtcFNjIiwiZmluZEZsYWciLCJrZXlWYWx1ZSIsIm9iaktleXMiLCJlbmNvZGVkUHJlZml4IiwiYWRqdXN0ZWRQcmVmaXgiLCJlbmNvZGVkS2V5Iiwia2V5UHJlZml4IiwidmFsdWVTaWRlQ2hhbm5lbCIsIm5vcm1hbGl6ZVN0cmluZ2lmeU9wdGlvbnMiLCJhcnJheUZvcm1hdCIsImpvaW5lZCIsIm51bWJlclN0ciIsInBhcnNlUXVlcnlTdHJpbmdWYWx1ZXMiLCJjbGVhblN0ciIsImxpbWl0Iiwic2tpcEluZGV4IiwiYnJhY2tldEVxdWFsc1BvcyIsImVuY29kZWRWYWwiLCJleGlzdGluZyIsInZhbHVlc1BhcnNlZCIsImxlYWYiLCJjbGVhblJvb3QiLCJkZWNvZGVkUm9vdCIsInBhcnNlUXVlcnlTdHJpbmdLZXlzIiwiZ2l2ZW5LZXkiLCJub3JtYWxpemVQYXJzZU9wdGlvbnMiLCJwYXJzZSIsInRlbXBPYmoiLCJuZXdPYmoiLCJfaGFzQnVmZmVyIiwiX1REIiwiX1RFIiwiYjY0Y2giLCJiNjRjaHMiLCJiNjR0YWIiLCJ0YWIiLCJiNjRyZSIsIl9mcm9tQ0MiLCJfVThBZnJvbSIsIml0IiwiX21rVXJpU2FmZSIsIm0wIiwiX3RpZHlCNjQiLCJidG9hUG9seWZpbGwiLCJiaW4iLCJ1MzIiLCJjMCIsImMxIiwiYzIiLCJhc2MiLCJwYWQiLCJfYnRvYSIsIl9mcm9tVWludDhBcnJheSIsInU4YSIsIm1heGFyZ3MiLCJzdHJzIiwiZnJvbVVpbnQ4QXJyYXkiLCJ1cmxzYWZlIiwiY2JfdXRvYiIsImNjIiwicmVfdXRvYiIsInV0b2IiLCJ1IiwiZW5jb2RlVVJJIiwicmVfYnRvdSIsImNiX2J0b3UiLCJjY2NjIiwiY3AiLCJidG91IiwiYXRvYlBvbHlmaWxsIiwidTI0IiwicjEiLCJyMiIsIl9hdG9iIiwiX3RvVWludDhBcnJheSIsInRvVWludDhBcnJheSIsIl91blVSSSIsIl9kZWNvZGUiLCJkZWNvZGUiLCJpc1ZhbGlkIiwiX25vRW51bSIsImV4dGVuZFN0cmluZyIsIl9hZGQiLCJleHRlbmRVaW50OEFycmF5IiwiZXh0ZW5kQnVpbHRpbnMiLCJnQmFzZTY0IiwiS2ludG9uZVJlcXVlc3RDb25maWdCdWlsZGVyXzEiLCJLaW50b25lUmVxdWVzdENvbmZpZ0J1aWxkZXIiLCJyZXF1ZXN0VXJsIiwiX2QiLCJfZSIsIl9mIiwiX2ciLCJfaCIsIl9qIiwiX2siLCJwcm94eUNvbmZpZyIsInJlcXVlc3RUb2tlbiIsImJhc2ljQXV0aCIsInVzZXJBZ2VudCIsImJhc2ljQXV0aEhlYWRlcnMiLCJwbGF0Zm9ybURlcHNIZWFkZXJzIiwiY29tbW9uSGVhZGVycyIsImFwaVRva2VuIiwiS2ludG9uZVJlc3BvbnNlSGFuZGxlcl8xIiwiS2ludG9uZVJlc3BvbnNlSGFuZGxlciIsImVuYWJsZUFib3J0U2VhcmNoRXJyb3IiLCJlcnJvclJlc3BvbnNlIiwiS2ludG9uZVJlc3RBUElDbGllbnRfMSIsIktpbnRvbmVSZXN0QVBJQ2xpZW50IiwiaHR0cENsaWVudCIsInNvY2tldFRpbWVvdXQiLCJfX3NldE1vZHVsZURlZmF1bHQiLCJfX2ltcG9ydFN0YXIiLCJicm93c2VyRGVwcyIsIkZpZWxkVHlwZSIsIkNhbGNGb3JtYXQiLCJmaWVsZCIsIm51bWJlckFycmF5IiwiY2FsY0ZpZWxkIiwidmFyTmFtZSIsImFwaSIsImVsZW1lbnQiLCJ2YXJWYWx1ZXMiLCJkYXRhcyIsImxvb2t1cEZpeGVkRmllbGRDb2RlcyIsImlzS2V5IiwicmZyb20iLCJtYXBwaW5nRGF0YSIsImFwcElkIiwibmVlZENyZWF0ZSIsInRhcmdldEZpZWxkIiwibWFwcGluZ1J1bGVzIiwidXBkYXRlUmVjb3JkcyIsInRhcmdldFJlY29yZCIsInVwZGF0ZVJlY29yZCIsIm1hcHBpbmciLCJxdWVyeVN0ciIsInZmcm9tIiwiZmlsdGVySGFuZGxlciIsImFjY3VtdWxhdG9yIiwibWF4TGVuZ3RoIiwidG9kYXkiLCJmaWVsZFR5cGUiLCJpbnB1dFZhbHVlIiwiZmllbGRDb2RlIiwiZmllbGRSZXF1aXJlZCIsInZhbHVlSGFzQmxhbmsiLCJpbnB1dFZhbHVlQXJyYXkiLCJ2YXJpYWJsZUhhc0JsYW5rIiwidmFyaWFibGVIYXNOdWxsIiwiaW5wdXROdW1iZXJWYWx1ZSIsInR3b0RpZ2l0TW9udGhEYXkiLCJzaW5nbGVEaWdpdE1vbnRoRGF5Iiwic2luZ2xlRGlnaXRNb250aCIsInNpbmdsZURpZ2l0RGF5IiwiZGF0ZVRpbWVNaWxsaVNlY29uZCIsImRhdGVUaW1lIiwiZGF0ZVRpbWVOb3RJbmNsdWRpbmdNaWxsaVNlY29uZHMiLCJqc3REYXRlIiwiZGF0ZUFycmF5IiwieWVhckluZGV4IiwibW9udGhJbmRleCIsImRheUluZGV4IiwiZmllbGRPcHRpb25zIiwib3B0aW9uc0luZGV4IiwidXNlcnNOYW1lIiwidXNlcnNJbmZvIiwiaW5kZXhVc2Vyc0luZm8iLCJpbmRleElucHV0VXNlciIsIm9yZ2FuaXphdGlvbk5hbWUiLCJncm91cHNOYW1lIiwib2JqZWN0VmFsdWUiLCJ2YXJpYWJsZVZhbHVlIiwib2JqZWN0UHJvcGVydHlOYW1lIiwiZmllbGRDb2x1bW5JbmRleCIsInZhbHVlQ29sdW1uSW5kZXgiLCJpbnNlcnRWYWx1ZVR5cGUiLCJmaWVsZFZhbHVlQXJyYXkiLCJub3RJbnB1dEVycm9yIiwiZ2V0Q29udGV4dFZhckJ5UGF0aCIsInZhcmlhYmxlc05hbWUiLCJvYmplY3RQcm9wZXJ0aWVzIiwiY29ycmVjdEZvcm1hdHRlZFZhbHVlIiwiY29ycmVjdFZhbHVlcyIsImZvcm1hdHRlZERhdGUiLCJvcmdhbml6YXRpb25zIiwiaW5zZXJ0VmFsdWUiLCJ1cGRhdGVkUmVjb3JkIiwiZ2V0VmFsdWUiLCJtb3RvdGV4dCIsImpvaW5GaWVsZDF0eXBlIiwiam9pbkZpZWxkMnR5cGUiLCJzYXZlRmllbGR0eXBlIiwiam9pblZhbHVlMSIsImpvaW5WYWx1ZTIiLCJjb25TdHJpbmciLCJzYXZlVmFsdWUiLCJjaGVja1JlZ2V4IiwiZWxlbWVudE1hcCIsImluc3RhbmNlTWFwIiwiVFJBTlNJVElPTl9FTkQiLCJwYXJzZVNlbGVjdG9yIiwiZ2V0VUlEIiwiZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQiLCJ0cmFuc2l0aW9uRHVyYXRpb24iLCJ0cmFuc2l0aW9uRGVsYXkiLCJmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiIsImZsb2F0VHJhbnNpdGlvbkRlbGF5IiwidHJpZ2dlclRyYW5zaXRpb25FbmQiLCJnZXRFbGVtZW50IiwiaXNWaXNpYmxlIiwiZWxlbWVudElzVmlzaWJsZSIsImNsb3NlZERldGFpbHMiLCJzdW1tYXJ5IiwiaXNEaXNhYmxlZCIsImZpbmRTaGFkb3dSb290IiwicmVmbG93IiwiZ2V0alF1ZXJ5IiwiRE9NQ29udGVudExvYWRlZENhbGxiYWNrcyIsIm9uRE9NQ29udGVudExvYWRlZCIsImlzUlRMIiwiZGVmaW5lSlF1ZXJ5UGx1Z2luIiwicGx1Z2luIiwiJCIsIkpRVUVSWV9OT19DT05GTElDVCIsImV4ZWN1dGUiLCJwb3NzaWJsZUNhbGxiYWNrIiwiZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbiIsInRyYW5zaXRpb25FbGVtZW50Iiwid2FpdEZvclRyYW5zaXRpb24iLCJkdXJhdGlvblBhZGRpbmciLCJlbXVsYXRlZER1cmF0aW9uIiwiY2FsbGVkIiwiZ2V0TmV4dEFjdGl2ZUVsZW1lbnQiLCJhY3RpdmVFbGVtZW50Iiwic2hvdWxkR2V0TmV4dCIsImlzQ3ljbGVBbGxvd2VkIiwibGlzdExlbmd0aCIsImluZGV4X2pzIiwibmFtZXNwYWNlUmVnZXgiLCJzdHJpcE5hbWVSZWdleCIsInN0cmlwVWlkUmVnZXgiLCJldmVudFJlZ2lzdHJ5IiwidWlkRXZlbnQiLCJjdXN0b21FdmVudHMiLCJuYXRpdmVFdmVudHMiLCJtYWtlRXZlbnRVaWQiLCJ1aWQiLCJnZXRFbGVtZW50RXZlbnRzIiwiYm9vdHN0cmFwSGFuZGxlciIsImh5ZHJhdGVPYmoiLCJFdmVudEhhbmRsZXIiLCJib290c3RyYXBEZWxlZ2F0aW9uSGFuZGxlciIsImRvbUVsZW1lbnRzIiwiZG9tRWxlbWVudCIsImZpbmRIYW5kbGVyIiwiY2FsbGFibGUiLCJkZWxlZ2F0aW9uU2VsZWN0b3IiLCJub3JtYWxpemVQYXJhbWV0ZXJzIiwib3JpZ2luYWxUeXBlRXZlbnQiLCJkZWxlZ2F0aW9uRnVuY3Rpb24iLCJpc0RlbGVnYXRlZCIsInR5cGVFdmVudCIsImdldFR5cGVFdmVudCIsImFkZEhhbmRsZXIiLCJvbmVPZmYiLCJwcmV2aW91c0Z1bmN0aW9uIiwicmVtb3ZlSGFuZGxlciIsInJlbW92ZU5hbWVzcGFjZWRIYW5kbGVycyIsInN0b3JlRWxlbWVudEV2ZW50IiwiaGFuZGxlcktleSIsImluTmFtZXNwYWNlIiwiaXNOYW1lc3BhY2UiLCJlbGVtZW50RXZlbnQiLCJrZXlIYW5kbGVycyIsImpRdWVyeUV2ZW50IiwiYnViYmxlcyIsIm5hdGl2ZURpc3BhdGNoIiwiZGVmYXVsdFByZXZlbnRlZCIsIm1ldGEiLCJub3JtYWxpemVEYXRhIiwibm9ybWFsaXplRGF0YUtleSIsImNociIsImJzS2V5cyIsInB1cmVLZXkiLCJNYW5pcHVsYXRvciIsIkNvbmZpZyIsImpzb25Db25maWciLCJjb25maWdUeXBlcyIsImV4cGVjdGVkVHlwZXMiLCJ2YWx1ZVR5cGUiLCJCYXNlQ29tcG9uZW50IiwicHJvcGVydHlOYW1lIiwiaXNBbmltYXRlZCIsImdldFNlbGVjdG9yIiwiaHJlZkF0dHJpYnV0ZSIsIlNlbGVjdG9yRW5naW5lIiwicGFyZW50cyIsImFuY2VzdG9yIiwicHJldmlvdXMiLCJmb2N1c2FibGVzIiwiTkFNRSIsIkNMQVNTX05BTUVfRkFERSIsIkNMQVNTX05BTUVfU0hPVyIsIkVWRU5UX01PVVNFRE9XTiIsIkRlZmF1bHQiLCJEZWZhdWx0VHlwZSIsIkJhY2tkcm9wIiwiYmFja2Ryb3AiLCJlbmFibGVEaXNtaXNzVHJpZ2dlciIsImNvbXBvbmVudCIsImNsaWNrRXZlbnQiLCJFVkVOVF9LRVkiLCJFVkVOVF9GT0NVU0lOIiwiRVZFTlRfS0VZRE9XTl9UQUIiLCJUQUJfS0VZIiwiVEFCX05BVl9GT1JXQVJEIiwiVEFCX05BVl9CQUNLV0FSRCIsIkZvY3VzVHJhcCIsInRyYXBFbGVtZW50IiwiU0VMRUNUT1JfRklYRURfQ09OVEVOVCIsIlNFTEVDVE9SX1NUSUNLWV9DT05URU5UIiwiUFJPUEVSVFlfUEFERElORyIsIlBST1BFUlRZX01BUkdJTiIsIlNjcm9sbEJhckhlbHBlciIsImRvY3VtZW50V2lkdGgiLCJjYWxjdWxhdGVkVmFsdWUiLCJzdHlsZVByb3BlcnR5Iiwic2Nyb2xsYmFyV2lkdGgiLCJtYW5pcHVsYXRpb25DYWxsQmFjayIsImFjdHVhbFZhbHVlIiwiY2FsbEJhY2siLCJjb21wb25lbnRGdW5jdGlvbnNfanMiLCJEQVRBX0FQSV9LRVkiLCJFU0NBUEVfS0VZIiwiRVZFTlRfSElERSIsIkVWRU5UX0hJREVfUFJFVkVOVEVEIiwiRVZFTlRfSElEREVOIiwiRVZFTlRfU0hPVyIsIkVWRU5UX1NIT1dOIiwiRVZFTlRfUkVTSVpFIiwiRVZFTlRfQ0xJQ0tfRElTTUlTUyIsIkVWRU5UX01PVVNFRE9XTl9ESVNNSVNTIiwiRVZFTlRfS0VZRE9XTl9ESVNNSVNTIiwiRVZFTlRfQ0xJQ0tfREFUQV9BUEkiLCJDTEFTU19OQU1FX09QRU4iLCJDTEFTU19OQU1FX1NUQVRJQyIsIk9QRU5fU0VMRUNUT1IiLCJTRUxFQ1RPUl9ESUFMT0ciLCJTRUxFQ1RPUl9NT0RBTF9CT0RZIiwiU0VMRUNUT1JfREFUQV9UT0dHTEUiLCJNb2RhbCIsInJlbGF0ZWRUYXJnZXQiLCJtb2RhbEJvZHkiLCJ0cmFuc2l0aW9uQ29tcGxldGUiLCJldmVudDIiLCJpc01vZGFsT3ZlcmZsb3dpbmciLCJpbml0aWFsT3ZlcmZsb3dZIiwiaXNCb2R5T3ZlcmZsb3dpbmciLCJzaG93RXZlbnQiLCJhbHJlYWR5T3BlbiIsInBsYWNlbWVudCIsIm93bmVyRG9jdW1lbnQiLCJPd25FbGVtZW50IiwiX3JlZiIsImVmZmVjdCIsIl9yZWYyIiwiaW5pdGlhbFN0eWxlcyIsInN0eWxlUHJvcGVydGllcyIsImF0dHJpYnV0ZSIsInVhRGF0YSIsImluY2x1ZGVTY2FsZSIsImlzRml4ZWRTdHJhdGVneSIsImNsaWVudFJlY3QiLCJzY2FsZVgiLCJzY2FsZVkiLCJ2aXN1YWxWaWV3cG9ydCIsImFkZFZpc3VhbE9mZnNldHMiLCJoZWlnaHQiLCJyb290Tm9kZSIsImdldENvbXB1dGVkU3R5bGUiLCJpc0ZpcmVmb3giLCJpc0lFIiwiZWxlbWVudENzcyIsImN1cnJlbnROb2RlIiwiY3NzIiwibWF0aE1heCIsIm1hdGhNaW4iLCJwYWRkaW5nT2JqZWN0IiwiaGFzaE1hcCIsInRvUGFkZGluZ09iamVjdCIsInBhZGRpbmciLCJfc3RhdGUkbW9kaWZpZXJzRGF0YSQiLCJhcnJvd0VsZW1lbnQiLCJwb3BwZXJPZmZzZXRzIiwiYmFzZVBsYWNlbWVudCIsImF4aXMiLCJpc1ZlcnRpY2FsIiwiYXJyb3dSZWN0IiwibWluUHJvcCIsIm1heFByb3AiLCJlbmREaWZmIiwic3RhcnREaWZmIiwiYXJyb3dPZmZzZXRQYXJlbnQiLCJjbGllbnRTaXplIiwiY2VudGVyVG9SZWZlcmVuY2UiLCJjZW50ZXIiLCJheGlzUHJvcCIsIl9vcHRpb25zJGVsZW1lbnQiLCJkcHIiLCJfT2JqZWN0JGFzc2lnbjIiLCJwb3BwZXIiLCJwb3BwZXJSZWN0IiwidmFyaWF0aW9uIiwib2Zmc2V0cyIsImdwdUFjY2VsZXJhdGlvbiIsImFkYXB0aXZlIiwicm91bmRPZmZzZXRzIiwiaXNGaXhlZCIsIl9vZmZzZXRzJHgiLCJfb2Zmc2V0cyR5IiwiX3JlZjMiLCJoYXNYIiwiaGFzWSIsInNpZGVYIiwic2lkZVkiLCJoZWlnaHRQcm9wIiwid2lkdGhQcm9wIiwib2Zmc2V0WSIsIm9mZnNldFgiLCJjb21tb25TdHlsZXMiLCJfcmVmNCIsIl9PYmplY3QkYXNzaWduIiwiX3JlZjUiLCJfb3B0aW9ucyRncHVBY2NlbGVyYXQiLCJfb3B0aW9ucyRhZGFwdGl2ZSIsIl9vcHRpb25zJHJvdW5kT2Zmc2V0cyIsIl9vcHRpb25zJHNjcm9sbCIsInNjcm9sbCIsIl9vcHRpb25zJHJlc2l6ZSIsInJlc2l6ZSIsInNjcm9sbFBhcmVudHMiLCJzY3JvbGxQYXJlbnQiLCJzY3JvbGxMZWZ0Iiwic2Nyb2xsVG9wIiwic3RyYXRlZ3kiLCJsYXlvdXRWaWV3cG9ydCIsIl9lbGVtZW50JG93bmVyRG9jdW1lbiIsIndpblNjcm9sbCIsIl9nZXRDb21wdXRlZFN0eWxlIiwib3ZlcmZsb3ciLCJvdmVyZmxvd1giLCJvdmVyZmxvd1kiLCJpc0JvZHkiLCJ1cGRhdGVkTGlzdCIsImNsaXBwaW5nUGFyZW50IiwiY2xpcHBpbmdQYXJlbnRzIiwiY2FuRXNjYXBlQ2xpcHBpbmciLCJjbGlwcGVyRWxlbWVudCIsImJvdW5kYXJ5Iiwicm9vdEJvdW5kYXJ5IiwibWFpbkNsaXBwaW5nUGFyZW50cyIsImZpcnN0Q2xpcHBpbmdQYXJlbnQiLCJjbGlwcGluZ1JlY3QiLCJhY2NSZWN0IiwicmVmZXJlbmNlIiwiY29tbW9uWCIsImNvbW1vblkiLCJtYWluQXhpcyIsIl9vcHRpb25zIiwiX29wdGlvbnMkcGxhY2VtZW50IiwiX29wdGlvbnMkc3RyYXRlZ3kiLCJfb3B0aW9ucyRib3VuZGFyeSIsIl9vcHRpb25zJHJvb3RCb3VuZGFyeSIsIl9vcHRpb25zJGVsZW1lbnRDb250ZSIsImVsZW1lbnRDb250ZXh0IiwiX29wdGlvbnMkYWx0Qm91bmRhcnkiLCJhbHRCb3VuZGFyeSIsIl9vcHRpb25zJHBhZGRpbmciLCJhbHRDb250ZXh0IiwiY2xpcHBpbmdDbGllbnRSZWN0IiwicmVmZXJlbmNlQ2xpZW50UmVjdCIsInBvcHBlckNsaWVudFJlY3QiLCJlbGVtZW50Q2xpZW50UmVjdCIsIm92ZXJmbG93T2Zmc2V0cyIsIm9mZnNldERhdGEiLCJtdWx0aXBseSIsImZsaXBWYXJpYXRpb25zIiwiX29wdGlvbnMkYWxsb3dlZEF1dG9QIiwiYWxsb3dlZEF1dG9QbGFjZW1lbnRzIiwiYWxsUGxhY2VtZW50cyIsInBsYWNlbWVudHMiLCJhbGxvd2VkUGxhY2VtZW50cyIsIm92ZXJmbG93cyIsIm9wcG9zaXRlUGxhY2VtZW50IiwiX29wdGlvbnMkbWFpbkF4aXMiLCJjaGVja01haW5BeGlzIiwiX29wdGlvbnMkYWx0QXhpcyIsImNoZWNrQWx0QXhpcyIsInNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyIsIl9vcHRpb25zJGZsaXBWYXJpYXRpbyIsInByZWZlcnJlZFBsYWNlbWVudCIsImlzQmFzZVBsYWNlbWVudCIsImZhbGxiYWNrUGxhY2VtZW50cyIsInJlZmVyZW5jZVJlY3QiLCJjaGVja3NNYXAiLCJtYWtlRmFsbGJhY2tDaGVja3MiLCJmaXJzdEZpdHRpbmdQbGFjZW1lbnQiLCJfYmFzZVBsYWNlbWVudCIsImlzU3RhcnRWYXJpYXRpb24iLCJtYWluVmFyaWF0aW9uU2lkZSIsImFsdFZhcmlhdGlvblNpZGUiLCJjaGVja3MiLCJudW1iZXJPZkNoZWNrcyIsIl9sb29wIiwiZml0dGluZ1BsYWNlbWVudCIsIl9yZXQiLCJwcmV2ZW50ZWRPZmZzZXRzIiwic2lkZSIsInJlZmVyZW5jZU92ZXJmbG93IiwicG9wcGVyQWx0T3ZlcmZsb3ciLCJyZWZlcmVuY2VDbGlwcGluZ09mZnNldHMiLCJwb3BwZXJFc2NhcGVPZmZzZXRzIiwiaXNSZWZlcmVuY2VIaWRkZW4iLCJoYXNQb3BwZXJFc2NhcGVkIiwicmVjdHMiLCJpbnZlcnREaXN0YW5jZSIsInNraWRkaW5nIiwiZGlzdGFuY2UiLCJfb3B0aW9ucyRvZmZzZXQiLCJfZGF0YSRzdGF0ZSRwbGFjZW1lbnQiLCJfb3B0aW9ucyR0ZXRoZXIiLCJ0ZXRoZXIiLCJfb3B0aW9ucyR0ZXRoZXJPZmZzZXQiLCJ0ZXRoZXJPZmZzZXQiLCJhbHRBeGlzIiwidGV0aGVyT2Zmc2V0VmFsdWUiLCJub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUiLCJvZmZzZXRNb2RpZmllclN0YXRlIiwiX29mZnNldE1vZGlmaWVyU3RhdGUkIiwibWFpblNpZGUiLCJhbHRTaWRlIiwiYWRkaXRpdmUiLCJtaW5MZW4iLCJtYXhMZW4iLCJhcnJvd1BhZGRpbmdPYmplY3QiLCJhcnJvd1BhZGRpbmdNaW4iLCJhcnJvd1BhZGRpbmdNYXgiLCJhcnJvd0xlbiIsIm1pbk9mZnNldCIsIm1heE9mZnNldCIsImNsaWVudE9mZnNldCIsIm9mZnNldE1vZGlmaWVyVmFsdWUiLCJ0ZXRoZXJNaW4iLCJ0ZXRoZXJNYXgiLCJwcmV2ZW50ZWRPZmZzZXQiLCJfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyIiwiX21haW5TaWRlIiwiX2FsdFNpZGUiLCJfb2Zmc2V0IiwiX2xlbiIsIl9taW4iLCJfbWF4IiwiaXNPcmlnaW5TaWRlIiwiX29mZnNldE1vZGlmaWVyVmFsdWUiLCJfdGV0aGVyTWluIiwiX3RldGhlck1heCIsIl9wcmV2ZW50ZWRPZmZzZXQiLCJlbGVtZW50T3JWaXJ0dWFsRWxlbWVudCIsImlzT2Zmc2V0UGFyZW50QW5FbGVtZW50Iiwib2Zmc2V0UGFyZW50SXNTY2FsZWQiLCJtb2RpZmllcnMiLCJ2aXNpdGVkIiwibW9kaWZpZXIiLCJyZXF1aXJlcyIsImRlcCIsImRlcE1vZGlmaWVyIiwib3JkZXJlZE1vZGlmaWVycyIsInBoYXNlIiwicGVuZGluZyIsImdlbmVyYXRvck9wdGlvbnMiLCJfZ2VuZXJhdG9yT3B0aW9ucyIsIl9nZW5lcmF0b3JPcHRpb25zJGRlZiIsImRlZmF1bHRNb2RpZmllcnMiLCJfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyIiwiZGVmYXVsdE9wdGlvbnMiLCJlZmZlY3RDbGVhbnVwRm5zIiwiaXNEZXN0cm95ZWQiLCJzZXRPcHRpb25zQWN0aW9uIiwiY2xlYW51cE1vZGlmaWVyRWZmZWN0cyIsInJ1bk1vZGlmaWVyRWZmZWN0cyIsIl9zdGF0ZSRlbGVtZW50cyIsIl9zdGF0ZSRvcmRlcmVkTW9kaWZpZSIsIl9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIiLCJfcmVmJG9wdGlvbnMiLCJjbGVhbnVwRm4iLCJub29wRm4iLCJjcmVhdGVQb3BwZXIiLCJjb21wdXRlU3R5bGVzIiwiYXBwbHlTdHlsZXMiLCJmbGlwIiwicHJldmVudE92ZXJmbG93IiwiYXJyb3ciLCJoaWRlIiwiYWJzRGVsdGFYIiwiZGlyZWN0aW9uIiwiaXRlbXMiLCJhY3RpdmVJbmRleCIsIm9yZGVyIiwiaW1nIiwic3dpcGVDb25maWciLCJhY3RpdmVJbmRpY2F0b3IiLCJuZXdBY3RpdmVJbmRpY2F0b3IiLCJlbGVtZW50SW50ZXJ2YWwiLCJpc05leHQiLCJuZXh0RWxlbWVudCIsIm5leHRFbGVtZW50SW5kZXgiLCJ0cmlnZ2VyRXZlbnQiLCJldmVudE5hbWUiLCJpc0N5Y2xpbmciLCJkaXJlY3Rpb25hbENsYXNzTmFtZSIsIm9yZGVyQ2xhc3NOYW1lIiwiY29tcGxldGVDYWxsQmFjayIsImNhcm91c2VsIiwic2xpZGVJbmRleCIsImNhcm91c2VscyIsInRvZ2dsZUxpc3QiLCJmaWx0ZXJFbGVtZW50IiwiZm91bmRFbGVtZW50IiwiYWN0aXZlQ2hpbGRyZW4iLCJhY3RpdmVJbnN0YW5jZSIsInNjcm9sbFNpemUiLCJ0cmlnZ2VyIiwiY2hpbGRyZW4iLCJ0cmlnZ2VyQXJyYXkiLCJpc09wZW4iLCJyZWZlcmVuY2VFbGVtZW50IiwicG9wcGVyQ29uZmlnIiwiUG9wcGVyLmNyZWF0ZVBvcHBlciIsInBhcmVudERyb3Bkb3duIiwiaXNFbmQiLCJwb3BwZXJEYXRhIiwiZGVmYXVsdEJzUG9wcGVyQ29uZmlnIiwib3BlblRvZ2dsZXMiLCJjb21wb3NlZFBhdGgiLCJpc01lbnVUYXJnZXQiLCJpc0lucHV0IiwiaXNFc2NhcGVFdmVudCIsImlzVXBPckRvd25FdmVudCIsImdldFRvZ2dsZUJ1dHRvbiIsImNvbXBsZXRlQ2FsbGJhY2siLCJjbGlja0NhbGxiYWNrIiwiYWxsb3dlZEF0dHJpYnV0ZUxpc3QiLCJhdHRyaWJ1dGVOYW1lIiwiYXR0cmlidXRlUmVnZXgiLCJ1bnNhZmVIdG1sIiwiYWxsb3dMaXN0Iiwic2FuaXRpemVGdW5jdGlvbiIsImNyZWF0ZWREb2N1bWVudCIsImVsZW1lbnROYW1lIiwiYXR0cmlidXRlTGlzdCIsImFsbG93ZWRBdHRyaWJ1dGVzIiwidGVtcGxhdGVXcmFwcGVyIiwiZXh0cmFDbGFzcyIsInRlbXBsYXRlRWxlbWVudCIsImlzSW5UaGVEb20iLCJ0aXAiLCJ0aXBJZCIsImF0dGFjaG1lbnQiLCJ0cmlnZ2VycyIsImV2ZW50SW4iLCJldmVudE91dCIsInRpdGxlIiwiZGF0YUF0dHJpYnV0ZXMiLCJkYXRhQXR0cmlidXRlIiwic2VjdGlvbiIsIm9ic2VydmFibGVTZWN0aW9uIiwidGFyZ2V0RWxlbWVudCIsImVudHJ5IiwiYWN0aXZhdGUiLCJwYXJlbnRTY3JvbGxUb3AiLCJ1c2VyU2Nyb2xsc0Rvd24iLCJlbnRyeUlzTG93ZXJUaGFuUHJldmlvdXMiLCJ0YXJnZXRMaW5rcyIsImFuY2hvciIsImxpc3RHcm91cCIsImFjdGl2ZU5vZGVzIiwic3B5IiwiaW5uZXJFbGVtIiwiYWN0aXZlIiwiaGlkZUV2ZW50IiwicmVsYXRlZEVsZW0iLCJuZXh0QWN0aXZlRWxlbWVudCIsImlzQWN0aXZlIiwib3V0ZXJFbGVtIiwib3BlbiIsImlzSW50ZXJhY3RpbmciLCJsb29rVXBGaWVsZCIsInRhcmdldFJlY29yZHMiLCJyIiwiZGlhbG9nIiwibW9kYWxIVE1MIiwiZXYiLCJkaWFsb2dCb2R5IiwiaHRtbHJvdyIsImFsbENvdW50IiwicHJvUmVjb3JkcyIsImxvb2tVcEZpZWxkcyIsImRpc3BsYXlOYW1lIiwicGxhY2Vob2xkZXIiLCJtb2RlbFZhbHVlIiwiaW5wdXRQb2ludCIsIm91dHB1dFBvaW50cyIsImFjdGlvblByb3BzIiwiZGVmUHJvcCIsInByb3BWYWx1ZSIsInN1YlRpdGxlIiwiYWN0aW9uTm9kZXMiLCJuZXh0Tm9kZUlkcyIsInBhcnNlZE9iamVjdCIsIm5vZGVDbGFzcyIsImFjdGlvbkZsb3ciLCJhY3Rpb24iLCJkZWZhdWx0TWVzc2FnZSIsImRlZk1zZyIsIm1lc3NhZ2VzIiwiZXZlbnRJZCIsImZsb3ciLCJlcnJvcm1hbmFnZXIiLCJuZXh0QWN0aW9uIiwibmV4dElucHV0IiwiZ2V0Q2hhbmdlRXZlbnRzIiwiZ2V0Q2xpY2tFdmVudHMiLCJnZXRLaW50b25lRXZlbnRzIiwiY2hhbmdlRXZlbnRzIiwiY2xpY2tFdmVudHMiLCJraW50b25lRXZlbnRzIiwiZmxvd2luZm8iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztpQkFVRSxTQUFVQSxFQUFRQyxFQUFVLENBYTVCQyxFQUFBLFFBQWlCRixFQUFPLFNBQ3ZC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a0JBQWtCLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsY0FBYyxDQUFDLElBQUksRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsc0JBQXNCLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsWUFBWSxDQUFDLE1BQU0sTUFBTSxFQUFFLGFBQWEsQ0FBQyxPQUFPLE1BQU0sS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxNQUFNLEtBQUssRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTSxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxZQUFZLENBQUMsS0FBSyxFQUFFLFlBQVksQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxNQUFNLEVBQUUsWUFBWSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsTUFBTSxNQUFNLEVBQUUs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S0FBSyttRCxFQUFLL21ELENBQUssRUFDekMsT0FFVEEsQ0FBQSxDQUNSLEVBRUFzbkQsRUFBYSxPQUFPLEdBRXJCLFFBQVEsT0FBTyxHQUFHQSxFQUFjdG5ELEdBQVksQ0FDcEMsTUFBQXluRCxFQUFXLFFBQVF6bkQsRUFBTSxJQUFJLEVBQzdCK21ELEVBQUssV0FBVyxTQUFTVSxFQUFTLE9BQU8sRUFDL0MsT0FBR1YsSUFBTyxRQUNRLElBQUksY0FBYy9tRCxFQUFNLEtBQUsrbUQsRUFBSy9tRCxDQUFLLEVBQy9DLEtBQUssRUFBRSxLQUFNNHNCLEdBQU0sQ0FDekIsTUFBTXRZLEVBQVN0VSxFQUFNLE9BQ3JCLFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFBc1UsQ0FBTyxDQUFBLENBQUEsQ0FDaEMsRUFBRSxNQUFPb1gsR0FBTSxDQUNkLFFBQVEsTUFBTUEsQ0FBRyxDQUFBLENBQ2xCLEVBRUkxckIsQ0FBQSxDQUNSLEVBRUF1bkQsRUFBWSxPQUFPLEdBQ1JBLEVBQUEsUUFBU3JILEdBQW1CLENBQ3RDLEVBQUUsUUFBUSxFQUFFLEdBQUdBLEVBQVUsU0FBVSxDQUNqQyxNQUFNbGdELEVBQU0sUUFBUSxJQUFJLE9BQU8sSUFBSSxFQUM3QnluRCxFQUFXLFFBQVF2SCxDQUFTLEVBQzVCNkcsRUFBSyxXQUFXLFNBQVNVLEVBQVMsT0FBTyxFQUM1Q1YsSUFBTyxRQUVSLE1BRGdCLElBQUksY0FBYzdHLEVBQVU2RyxFQUFLL21ELENBQUssRUFDeEMsT0FFaEIsTUFBTXNVLEVBQVN0VSxFQUFNLE9BQ3JCLFFBQVEsSUFBSSxPQUFPLElBQUksQ0FBQyxPQUFBc1UsQ0FBTyxDQUFBLENBQUEsQ0FDaEMsQ0FBQSxDQUNGLENBRVAsQ0FBQyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0LDI1LDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDEyNywxMjgsMTI5LDEzMCwxMzEsMTMyLDEzMywxMzQsMTM1LDEzNiwxMzcsMTM4LDEzOSwxNDAsMTQxLDE0MiwxNDMsMTQ0LDE0NSwxNDYsMTQ3XX0=