You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

3 lines
1.4 MiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

"use strict";var t=require("obsidian");function e(t,e,n,r){return new(n||(n=Promise))((function(i,a){function l(t){try{s(r.next(t))}catch(t){a(t)}}function o(t){try{s(r.throw(t))}catch(t){a(t)}}function s(t){var e;t.done?i(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(l,o)}s((r=r.apply(t,e||[])).next())}))}function n(t,e){return null==t||null==e?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function r(t,e){return null==t||null==e?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function i(t){let e,i,l;function o(t,n,r=0,a=t.length){if(r<a){if(0!==e(n,n))return a;do{const e=r+a>>>1;i(t[e],n)<0?r=e+1:a=e}while(r<a)}return r}return 2!==t.length?(e=n,i=(e,r)=>n(t(e),r),l=(e,n)=>t(e)-n):(e=t===n||t===r?t:a,i=t,l=t),{left:o,center:function(t,e,n=0,r=t.length){const i=o(t,e,n,r-1);return i>n&&l(t[i-1],e)>-l(t[i],e)?i-1:i},right:function(t,n,r=0,a=t.length){if(r<a){if(0!==e(n,n))return a;do{const e=r+a>>>1;i(t[e],n)<=0?r=e+1:a=e}while(r<a)}return r}}}function a(){return 0}"function"==typeof SuppressedError&&SuppressedError;const l=i(n).right;i((function(t){return null===t?NaN:+t})).center;class o extends Map{constructor(t,e=u){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:e}}),null!=t)for(const[e,n]of t)this.set(e,n)}get(t){return super.get(s(this,t))}has(t){return super.has(s(this,t))}set(t,e){return super.set(function({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):(t.set(r,n),n)}(this,t),e)}delete(t){return super.delete(function({_intern:t,_key:e},n){const r=e(n);t.has(r)&&(n=t.get(r),t.delete(r));return n}(this,t))}}function s({_intern:t,_key:e},n){const r=e(n);return t.has(r)?t.get(r):n}function u(t){return null!==t&&"object"==typeof t?t.valueOf():t}function f(t,e){return(null==t||!(t>=t))-(null==e||!(e>=e))||(t<e?-1:t>e?1:0)}const c=Math.sqrt(50),h=Math.sqrt(10),d=Math.sqrt(2);function g(t,e,n){const r=(e-t)/Math.max(0,n),i=Math.floor(Math.log10(r)),a=r/Math.pow(10,i),l=a>=c?10:a>=h?5:a>=d?2:1;let o,s,u;return i<0?(u=Math.pow(10,-i)/l,o=Math.round(t*u),s=Math.round(e*u),o/u<t&&++o,s/u>e&&--s,u=-u):(u=Math.pow(10,i)*l,o=Math.round(t/u),s=Math.round(e/u),o*u<t&&++o,s*u>e&&--s),s<o&&.5<=n&&n<2?g(t,e,2*n):[o,s,u]}function p(t,e,n){return g(t=+t,e=+e,n=+n)[2]}function y(t,e,n){n=+n;const r=(e=+e)<(t=+t),i=r?p(e,t,n):p(t,e,n);return(r?-1:1)*(i<0?1/-i:i)}function m(t,e){let n;for(const e of t)null!=e&&(n<e||void 0===n&&e>=e)&&(n=e);return n}function v(t,e){let n;for(const e of t)null!=e&&(n>e||void 0===n&&e>=e)&&(n=e);return n}function x(t,e,r=0,i=1/0,a){if(e=Math.floor(e),r=Math.floor(Math.max(0,r)),i=Math.floor(Math.min(t.length-1,i)),!(r<=e&&e<=i))return t;for(a=void 0===a?f:function(t=n){if(t===n)return f;if("function"!=typeof t)throw new TypeError("compare is not a function");return(e,n)=>{const r=t(e,n);return r||0===r?r:(0===t(n,n))-(0===t(e,e))}}(a);i>r;){if(i-r>600){const n=i-r+1,l=e-r+1,o=Math.log(n),s=.5*Math.exp(2*o/3),u=.5*Math.sqrt(o*s*(n-s)/n)*(l-n/2<0?-1:1);x(t,e,Math.max(r,Math.floor(e-l*s/n+u)),Math.min(i,Math.floor(e+(n-l)*s/n+u)),a)}const n=t[e];let l=r,o=i;for(A(t,r,e),a(t[i],n)>0&&A(t,r,i);l<o;){for(A(t,l,o),++l,--o;a(t[l],n)<0;)++l;for(;a(t[o],n)>0;)--o}0===a(t[r],n)?A(t,r,o):(++o,A(t,o,i)),o<=e&&(r=o+1),e<=o&&(i=o-1)}return t}function A(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function w(t,e){return function(t,e,n){if((r=(t=Float64Array.from(function*(t,e){for(let e of t)null!=e&&(e=+e)>=e&&(yield e)}(t))).length)&&!isNaN(e=+e)){if(e<=0||r<2)return v(t);if(e>=1)return m(t);var r,i=(r-1)*e,a=Math.floor(i),l=m(x(t,a).subarray(0,a+1));return l+(v(t.subarray(a+1))-l)*(i-a)}}(t,.5)}function b(t,e,n){t=+t,e=+e,n=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+n;for(var r=-1,i=0|Math.max(0,Math.ceil((e-t)/n)),a=new Array(i);++r<i;)a[r]=t+r*n;return a}function D(t,e){let n=0;if(void 0===e)for(let e of t)(e=+e)&&(n+=e);else{let r=-1;for(let i of t)(i=+e(i,++r,t))&&(n+=i)}return n}function k(t){return t}var C=1,M=2,T=3,_=4,E=1e-6;function F(t){return"translate("+t+",0)"}function S(t){return"translate(0,"+t+")"}function B(t){return e=>+t(e)}function N(t,e){return e=Math.max(0,t.bandwidth()-2*e)/2,t.round()&&(e=Math.round(e)),n=>+t(n)+e}function L(){return!this.__axis}function I(t,e){var n=[],r=null,i=null,a=6,l=6,o=3,s="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,u=t===C||t===_?-1:1,f=t===_||t===M?"x":"y",c=t===C||t===T?F:S;function h(h){var d=null==r?e.ticks?e.ticks.apply(e,n):e.domain():r,g=null==i?e.tickFormat?e.tickFormat.apply(e,n):k:i,p=Math.max(a,0)+o,y=e.range(),m=+y[0]+s,v=+y[y.length-1]+s,x=(e.bandwidth?N:B)(e.copy(),s),A=h.selection?h.selection():h,w=A.selectAll(".domain").data([null]),b=A.selectAll(".tick").data(d,e).order(),D=b.exit(),F=b.enter().append("g").attr("class","tick"),S=b.select("line"),I=b.select("text");w=w.merge(w.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),b=b.merge(F),S=S.merge(F.append("line").attr("stroke","currentColor").attr(f+"2",u*a)),I=I.merge(F.append("text").attr("fill","currentColor").attr(f,u*p).attr("dy",t===C?"0em":t===T?"0.71em":"0.32em")),h!==A&&(w=w.transition(h),b=b.transition(h),S=S.transition(h),I=I.transition(h),D=D.transition(h).attr("opacity",E).attr("transform",(function(t){return isFinite(t=x(t))?c(t+s):this.getAttribute("transform")})),F.attr("opacity",E).attr("transform",(function(t){var e=this.parentNode.__axis;return c((e&&isFinite(e=e(t))?e:x(t))+s)}))),D.remove(),w.attr("d",t===_||t===M?l?"M"+u*l+","+m+"H"+s+"V"+v+"H"+u*l:"M"+s+","+m+"V"+v:l?"M"+m+","+u*l+"V"+s+"H"+v+"V"+u*l:"M"+m+","+s+"H"+v),b.attr("opacity",1).attr("transform",(function(t){return c(x(t)+s)})),S.attr(f+"2",u*a),I.attr(f,u*p).text(g),A.filter(L).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",t===M?"start":t===_?"end":"middle"),A.each((function(){this.__axis=x}))}return h.scale=function(t){return arguments.length?(e=t,h):e},h.ticks=function(){return n=Array.from(arguments),h},h.tickArguments=function(t){return arguments.length?(n=null==t?[]:Array.from(t),h):n.slice()},h.tickValues=function(t){return arguments.length?(r=null==t?null:Array.from(t),h):r&&r.slice()},h.tickFormat=function(t){return arguments.length?(i=t,h):i},h.tickSize=function(t){return arguments.length?(a=l=+t,h):a},h.tickSizeInner=function(t){return arguments.length?(a=+t,h):a},h.tickSizeOuter=function(t){return arguments.length?(l=+t,h):l},h.tickPadding=function(t){return arguments.length?(o=+t,h):o},h.offset=function(t){return arguments.length?(s=+t,h):s},h}function V(t){return I(T,t)}function O(t){return I(_,t)}var P={value:()=>{}};function $(){for(var t,e=0,n=arguments.length,r={};e<n;++e){if(!(t=arguments[e]+"")||t in r||/[\s.]/.test(t))throw new Error("illegal type: "+t);r[t]=[]}return new Y(r)}function Y(t){this._=t}function R(t,e){for(var n,r=0,i=t.length;r<i;++r)if((n=t[r]).name===e)return n.value}function z(t,e,n){for(var r=0,i=t.length;r<i;++r)if(t[r].name===e){t[r]=P,t=t.slice(0,r).concat(t.slice(r+1));break}return null!=n&&t.push({name:e,value:n}),t}Y.prototype=$.prototype={constructor:Y,on:function(t,e){var n,r,i=this._,a=(r=i,(t+"").trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");if(n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),t&&!r.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:e}}))),l=-1,o=a.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++l<o;)if(n=(t=a[l]).type)i[n]=z(i[n],t.name,e);else if(null==e)for(n in i)i[n]=z(i[n],t.name,null);return this}for(;++l<o;)if((n=(t=a[l]).type)&&(n=R(i[n],t.name)))return n},copy:function(){var t={},e=this._;for(var n in e)t[n]=e[n].slice();return new Y(t)},call:function(t,e){if((n=arguments.length-2)>0)for(var n,r,i=new Array(n),a=0;a<n;++a)i[a]=arguments[a+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(a=0,n=(r=this._[t]).length;a<n;++a)r[a].value.apply(e,i)},apply:function(t,e,n){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],i=0,a=r.length;i<a;++i)r[i].value.apply(e,n)}};var U="http://www.w3.org/1999/xhtml",H={svg:"http://www.w3.org/2000/svg",xhtml:U,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function X(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),H.hasOwnProperty(e)?{space:H[e],local:t}:t}function W(t){return function(){var e=this.ownerDocument,n=this.namespaceURI;return n===U&&e.documentElement.namespaceURI===U?e.createElement(t):e.createElementNS(n,t)}}function j(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function q(t){var e=X(t);return(e.local?j:W)(e)}function G(){}function Q(t){return null==t?G:function(){return this.querySelector(t)}}function Z(){return[]}function K(t){return null==t?Z:function(){return this.querySelectorAll(t)}}function J(t){return function(){return function(t){return null==t?[]:Array.isArray(t)?t:Array.from(t)}(t.apply(this,arguments))}}function tt(t){return function(){return this.matches(t)}}function et(t){return function(e){return e.matches(t)}}var nt=Array.prototype.find;function rt(){return this.firstElementChild}var it=Array.prototype.filter;function at(){return Array.from(this.children)}function lt(t){return new Array(t.length)}function ot(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function st(t,e,n,r,i,a){for(var l,o=0,s=e.length,u=a.length;o<u;++o)(l=e[o])?(l.__data__=a[o],r[o]=l):n[o]=new ot(t,a[o]);for(;o<s;++o)(l=e[o])&&(i[o]=l)}function ut(t,e,n,r,i,a,l){var o,s,u,f=new Map,c=e.length,h=a.length,d=new Array(c);for(o=0;o<c;++o)(s=e[o])&&(d[o]=u=l.call(s,s.__data__,o,e)+"",f.has(u)?i[o]=s:f.set(u,s));for(o=0;o<h;++o)u=l.call(t,a[o],o,a)+"",(s=f.get(u))?(r[o]=s,s.__data__=a[o],f.delete(u)):n[o]=new ot(t,a[o]);for(o=0;o<c;++o)(s=e[o])&&f.get(d[o])===s&&(i[o]=s)}function ft(t){return t.__data__}function ct(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function ht(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function dt(t){return function(){this.removeAttribute(t)}}function gt(t){return function(){this.removeAttributeNS(t.space,t.local)}}function pt(t,e){return function(){this.setAttribute(t,e)}}function yt(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function mt(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function vt(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,n)}}function xt(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function At(t){return function(){this.style.removeProperty(t)}}function wt(t,e,n){return function(){this.style.setProperty(t,e,n)}}function bt(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function Dt(t,e){return t.style.getPropertyValue(e)||xt(t).getComputedStyle(t,null).getPropertyValue(e)}function kt(t){return function(){delete this[t]}}function Ct(t,e){return function(){this[t]=e}}function Mt(t,e){return function(){var n=e.apply(this,arguments);null==n?delete this[t]:this[t]=n}}function Tt(t){return t.trim().split(/^|\s+/)}function _t(t){return t.classList||new Et(t)}function Et(t){this._node=t,this._names=Tt(t.getAttribute("class")||"")}function Ft(t,e){for(var n=_t(t),r=-1,i=e.length;++r<i;)n.add(e[r])}function St(t,e){for(var n=_t(t),r=-1,i=e.length;++r<i;)n.remove(e[r])}function Bt(t){return function(){Ft(this,t)}}function Nt(t){return function(){St(this,t)}}function Lt(t,e){return function(){(e.apply(this,arguments)?Ft:St)(this,t)}}function It(){this.textContent=""}function Vt(t){return function(){this.textContent=t}}function Ot(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function Pt(){this.innerHTML=""}function $t(t){return function(){this.innerHTML=t}}function Yt(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function Rt(){this.nextSibling&&this.parentNode.appendChild(this)}function zt(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function Ut(){return null}function Ht(){var t=this.parentNode;t&&t.removeChild(this)}function Xt(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function Wt(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function jt(t){return function(){var e=this.__on;if(e){for(var n,r=0,i=-1,a=e.length;r<a;++r)n=e[r],t.type&&n.type!==t.type||n.name!==t.name?e[++i]=n:this.removeEventListener(n.type,n.listener,n.options);++i?e.length=i:delete this.__on}}}function qt(t,e,n){return function(){var r,i=this.__on,a=function(t){return function(e){t.call(this,e,this.__data__)}}(e);if(i)for(var l=0,o=i.length;l<o;++l)if((r=i[l]).type===t.type&&r.name===t.name)return this.removeEventListener(r.type,r.listener,r.options),this.addEventListener(r.type,r.listener=a,r.options=n),void(r.value=e);this.addEventListener(t.type,a,n),r={type:t.type,name:t.name,value:e,listener:a,options:n},i?i.push(r):this.__on=[r]}}function Gt(t,e,n){var r=xt(t),i=r.CustomEvent;"function"==typeof i?i=new i(e,n):(i=r.document.createEvent("Event"),n?(i.initEvent(e,n.bubbles,n.cancelable),i.detail=n.detail):i.initEvent(e,!1,!1)),t.dispatchEvent(i)}function Qt(t,e){return function(){return Gt(this,t,e)}}function Zt(t,e){return function(){return Gt(this,t,e.apply(this,arguments))}}ot.prototype={constructor:ot,appendChild:function(t){return this._parent.insertBefore(t,this._next)},insertBefore:function(t,e){return this._parent.insertBefore(t,e)},querySelector:function(t){return this._parent.querySelector(t)},querySelectorAll:function(t){return this._parent.querySelectorAll(t)}},Et.prototype={add:function(t){this._names.indexOf(t)<0&&(this._names.push(t),this._node.setAttribute("class",this._names.join(" ")))},remove:function(t){var e=this._names.indexOf(t);e>=0&&(this._names.splice(e,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(t){return this._names.indexOf(t)>=0}};var Kt=[null];function Jt(t,e){this._groups=t,this._parents=e}function te(){return new Jt([[document.documentElement]],Kt)}function ee(t){return"string"==typeof t?new Jt([[document.querySelector(t)]],[document.documentElement]):new Jt([[t]],Kt)}function ne(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function re(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function ie(){}Jt.prototype=te.prototype={constructor:Jt,select:function(t){"function"!=typeof t&&(t=Q(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,l,o=e[i],s=o.length,u=r[i]=new Array(s),f=0;f<s;++f)(a=o[f])&&(l=t.call(a,a.__data__,f,o))&&("__data__"in a&&(l.__data__=a.__data__),u[f]=l);return new Jt(r,this._parents)},selectAll:function(t){t="function"==typeof t?J(t):K(t);for(var e=this._groups,n=e.length,r=[],i=[],a=0;a<n;++a)for(var l,o=e[a],s=o.length,u=0;u<s;++u)(l=o[u])&&(r.push(t.call(l,l.__data__,u,o)),i.push(l));return new Jt(r,i)},selectChild:function(t){return this.select(null==t?rt:function(t){return function(){return nt.call(this.children,t)}}("function"==typeof t?t:et(t)))},selectChildren:function(t){return this.selectAll(null==t?at:function(t){return function(){return it.call(this.children,t)}}("function"==typeof t?t:et(t)))},filter:function(t){"function"!=typeof t&&(t=tt(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,l=e[i],o=l.length,s=r[i]=[],u=0;u<o;++u)(a=l[u])&&t.call(a,a.__data__,u,l)&&s.push(a);return new Jt(r,this._parents)},data:function(t,e){if(!arguments.length)return Array.from(this,ft);var n=e?ut:st,r=this._parents,i=this._groups;"function"!=typeof t&&(t=function(t){return function(){return t}}(t));for(var a=i.length,l=new Array(a),o=new Array(a),s=new Array(a),u=0;u<a;++u){var f=r[u],c=i[u],h=c.length,d=ct(t.call(f,f&&f.__data__,u,r)),g=d.length,p=o[u]=new Array(g),y=l[u]=new Array(g);n(f,c,p,y,s[u]=new Array(h),d,e);for(var m,v,x=0,A=0;x<g;++x)if(m=p[x]){for(x>=A&&(A=x+1);!(v=y[A])&&++A<g;);m._next=v||null}}return(l=new Jt(l,r))._enter=o,l._exit=s,l},enter:function(){return new Jt(this._enter||this._groups.map(lt),this._parents)},exit:function(){return new Jt(this._exit||this._groups.map(lt),this._parents)},join:function(t,e,n){var r=this.enter(),i=this,a=this.exit();return"function"==typeof t?(r=t(r))&&(r=r.selection()):r=r.append(t+""),null!=e&&(i=e(i))&&(i=i.selection()),null==n?a.remove():n(a),r&&i?r.merge(i).order():i},merge:function(t){for(var e=t.selection?t.selection():t,n=this._groups,r=e._groups,i=n.length,a=r.length,l=Math.min(i,a),o=new Array(i),s=0;s<l;++s)for(var u,f=n[s],c=r[s],h=f.length,d=o[s]=new Array(h),g=0;g<h;++g)(u=f[g]||c[g])&&(d[g]=u);for(;s<i;++s)o[s]=n[s];return new Jt(o,this._parents)},selection:function(){return this},order:function(){for(var t=this._groups,e=-1,n=t.length;++e<n;)for(var r,i=t[e],a=i.length-1,l=i[a];--a>=0;)(r=i[a])&&(l&&4^r.compareDocumentPosition(l)&&l.parentNode.insertBefore(r,l),l=r);return this},sort:function(t){function e(e,n){return e&&n?t(e.__data__,n.__data__):!e-!n}t||(t=ht);for(var n=this._groups,r=n.length,i=new Array(r),a=0;a<r;++a){for(var l,o=n[a],s=o.length,u=i[a]=new Array(s),f=0;f<s;++f)(l=o[f])&&(u[f]=l);u.sort(e)}return new Jt(i,this._parents).order()},call:function(){var t=arguments[0];return arguments[0]=this,t.apply(null,arguments),this},nodes:function(){return Array.from(this)},node:function(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var r=t[e],i=0,a=r.length;i<a;++i){var l=r[i];if(l)return l}return null},size:function(){let t=0;for(const e of this)++t;return t},empty:function(){return!this.node()},each:function(t){for(var e=this._groups,n=0,r=e.length;n<r;++n)for(var i,a=e[n],l=0,o=a.length;l<o;++l)(i=a[l])&&t.call(i,i.__data__,l,a);return this},attr:function(t,e){var n=X(t);if(arguments.length<2){var r=this.node();return n.local?r.getAttributeNS(n.space,n.local):r.getAttribute(n)}return this.each((null==e?n.local?gt:dt:"function"==typeof e?n.local?vt:mt:n.local?yt:pt)(n,e))},style:function(t,e,n){return arguments.length>1?this.each((null==e?At:"function"==typeof e?bt:wt)(t,e,null==n?"":n)):Dt(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?kt:"function"==typeof e?Mt:Ct)(t,e)):this.node()[t]},classed:function(t,e){var n=Tt(t+"");if(arguments.length<2){for(var r=_t(this.node()),i=-1,a=n.length;++i<a;)if(!r.contains(n[i]))return!1;return!0}return this.each(("function"==typeof e?Lt:e?Bt:Nt)(n,e))},text:function(t){return arguments.length?this.each(null==t?It:("function"==typeof t?Ot:Vt)(t)):this.node().textContent},html:function(t){return arguments.length?this.each(null==t?Pt:("function"==typeof t?Yt:$t)(t)):this.node().innerHTML},raise:function(){return this.each(Rt)},lower:function(){return this.each(zt)},append:function(t){var e="function"==typeof t?t:q(t);return this.select((function(){return this.appendChild(e.apply(this,arguments))}))},insert:function(t,e){var n="function"==typeof t?t:q(t),r=null==e?Ut:"function"==typeof e?e:Q(e);return this.select((function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)}))},remove:function(){return this.each(Ht)},clone:function(t){return this.select(t?Wt:Xt)},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},on:function(t,e,n){var r,i,a=function(t){return t.trim().split(/^|\s+/).map((function(t){var e="",n=t.indexOf(".");return n>=0&&(e=t.slice(n+1),t=t.slice(0,n)),{type:t,name:e}}))}(t+""),l=a.length;if(!(arguments.length<2)){for(o=e?qt:jt,r=0;r<l;++r)this.each(o(a[r],e,n));return this}var o=this.node().__on;if(o)for(var s,u=0,f=o.length;u<f;++u)for(r=0,s=o[u];r<l;++r)if((i=a[r]).type===s.type&&i.name===s.name)return s.value},dispatch:function(t,e){return this.each(("function"==typeof e?Zt:Qt)(t,e))},[Symbol.iterator]:function*(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var r,i=t[e],a=0,l=i.length;a<l;++a)(r=i[a])&&(yield r)}};var ae=.7,le=1/ae,oe="\\s*([+-]?\\d+)\\s*",se="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",ue="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",fe=/^#([0-9a-f]{3,8})$/,ce=new RegExp(`^rgb\\(${oe},${oe},${oe}\\)$`),he=new RegExp(`^rgb\\(${ue},${ue},${ue}\\)$`),de=new RegExp(`^rgba\\(${oe},${oe},${oe},${se}\\)$`),ge=new RegExp(`^rgba\\(${ue},${ue},${ue},${se}\\)$`),pe=new RegExp(`^hsl\\(${se},${ue},${ue}\\)$`),ye=new RegExp(`^hsla\\(${se},${ue},${ue},${se}\\)$`),me={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};function ve(){return this.rgb().formatHex()}function xe(){return this.rgb().formatRgb()}function Ae(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=fe.exec(t))?(n=e[1].length,e=parseInt(e[1],16),6===n?we(e):3===n?new Ce(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?be(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?be(e>>12&15|e>>8&240,e>>8&15|e>>4&240,e>>4&15|240&e,((15&e)<<4|15&e)/255):null):(e=ce.exec(t))?new Ce(e[1],e[2],e[3],1):(e=he.exec(t))?new Ce(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=de.exec(t))?be(e[1],e[2],e[3],e[4]):(e=ge.exec(t))?be(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=pe.exec(t))?Se(e[1],e[2]/100,e[3]/100,1):(e=ye.exec(t))?Se(e[1],e[2]/100,e[3]/100,e[4]):me.hasOwnProperty(t)?we(me[t]):"transparent"===t?new Ce(NaN,NaN,NaN,0):null}function we(t){return new Ce(t>>16&255,t>>8&255,255&t,1)}function be(t,e,n,r){return r<=0&&(t=e=n=NaN),new Ce(t,e,n,r)}function De(t){return t instanceof ie||(t=Ae(t)),t?new Ce((t=t.rgb()).r,t.g,t.b,t.opacity):new Ce}function ke(t,e,n,r){return 1===arguments.length?De(t):new Ce(t,e,n,null==r?1:r)}function Ce(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function Me(){return`#${Fe(this.r)}${Fe(this.g)}${Fe(this.b)}`}function Te(){const t=_e(this.opacity);return`${1===t?"rgb(":"rgba("}${Ee(this.r)}, ${Ee(this.g)}, ${Ee(this.b)}${1===t?")":`, ${t})`}`}function _e(t){return isNaN(t)?1:Math.max(0,Math.min(1,t))}function Ee(t){return Math.max(0,Math.min(255,Math.round(t)||0))}function Fe(t){return((t=Ee(t))<16?"0":"")+t.toString(16)}function Se(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new Ne(t,e,n,r)}function Be(t){if(t instanceof Ne)return new Ne(t.h,t.s,t.l,t.opacity);if(t instanceof ie||(t=Ae(t)),!t)return new Ne;if(t instanceof Ne)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,i=Math.min(e,n,r),a=Math.max(e,n,r),l=NaN,o=a-i,s=(a+i)/2;return o?(l=e===a?(n-r)/o+6*(n<r):n===a?(r-e)/o+2:(e-n)/o+4,o/=s<.5?a+i:2-a-i,l*=60):o=s>0&&s<1?0:l,new Ne(l,o,s,t.opacity)}function Ne(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function Le(t){return(t=(t||0)%360)<0?t+360:t}function Ie(t){return Math.max(0,Math.min(1,t||0))}function Ve(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}ne(ie,Ae,{copy(t){return Object.assign(new this.constructor,this,t)},displayable(){return this.rgb().displayable()},hex:ve,formatHex:ve,formatHex8:function(){return this.rgb().formatHex8()},formatHsl:function(){return Be(this).formatHsl()},formatRgb:xe,toString:xe}),ne(Ce,ke,re(ie,{brighter(t){return t=null==t?le:Math.pow(le,t),new Ce(this.r*t,this.g*t,this.b*t,this.opacity)},darker(t){return t=null==t?ae:Math.pow(ae,t),new Ce(this.r*t,this.g*t,this.b*t,this.opacity)},rgb(){return this},clamp(){return new Ce(Ee(this.r),Ee(this.g),Ee(this.b),_e(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Me,formatHex:Me,formatHex8:function(){return`#${Fe(this.r)}${Fe(this.g)}${Fe(this.b)}${Fe(255*(isNaN(this.opacity)?1:this.opacity))}`},formatRgb:Te,toString:Te})),ne(Ne,(function(t,e,n,r){return 1===arguments.length?Be(t):new Ne(t,e,n,null==r?1:r)}),re(ie,{brighter(t){return t=null==t?le:Math.pow(le,t),new Ne(this.h,this.s,this.l*t,this.opacity)},darker(t){return t=null==t?ae:Math.pow(ae,t),new Ne(this.h,this.s,this.l*t,this.opacity)},rgb(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*e,i=2*n-r;return new Ce(Ve(t>=240?t-240:t+120,i,r),Ve(t,i,r),Ve(t<120?t+240:t-120,i,r),this.opacity)},clamp(){return new Ne(Le(this.h),Ie(this.s),Ie(this.l),_e(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const t=_e(this.opacity);return`${1===t?"hsl(":"hsla("}${Le(this.h)}, ${100*Ie(this.s)}%, ${100*Ie(this.l)}%${1===t?")":`, ${t})`}`}}));const Oe=Math.PI/180,Pe=180/Math.PI,$e=.96422,Ye=1,Re=.82521,ze=4/29,Ue=6/29,He=3*Ue*Ue,Xe=Ue*Ue*Ue;function We(t){if(t instanceof qe)return new qe(t.l,t.a,t.b,t.opacity);if(t instanceof Je)return tn(t);t instanceof Ce||(t=De(t));var e,n,r=Ke(t.r),i=Ke(t.g),a=Ke(t.b),l=Ge((.2225045*r+.7168786*i+.0606169*a)/Ye);return r===i&&i===a?e=n=l:(e=Ge((.4360747*r+.3850649*i+.1430804*a)/$e),n=Ge((.0139322*r+.0971045*i+.7141733*a)/Re)),new qe(116*l-16,500*(e-l),200*(l-n),t.opacity)}function je(t,e,n,r){return 1===arguments.length?We(t):new qe(t,e,n,null==r?1:r)}function qe(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function Ge(t){return t>Xe?Math.pow(t,1/3):t/He+ze}function Qe(t){return t>Ue?t*t*t:He*(t-ze)}function Ze(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Ke(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Je(t,e,n,r){this.h=+t,this.c=+e,this.l=+n,this.opacity=+r}function tn(t){if(isNaN(t.h))return new qe(t.l,0,0,t.opacity);var e=t.h*Oe;return new qe(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}ne(qe,je,re(ie,{brighter(t){return new qe(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker(t){return new qe(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,n=isNaN(this.b)?t:t-this.b/200;return new Ce(Ze(3.1338561*(e=$e*Qe(e))-1.6168667*(t=Ye*Qe(t))-.4906146*(n=Re*Qe(n))),Ze(-.9787684*e+1.9161415*t+.033454*n),Ze(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}})),ne(Je,(function(t,e,n,r){return 1===arguments.length?function(t){if(t instanceof Je)return new Je(t.h,t.c,t.l,t.opacity);if(t instanceof qe||(t=We(t)),0===t.a&&0===t.b)return new Je(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*Pe;return new Je(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}(t):new Je(t,e,n,null==r?1:r)}),re(ie,{brighter(t){return new Je(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker(t){return new Je(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb(){return tn(this).rgb()}}));var en=t=>()=>t;function nn(t){return 1==(t=+t)?rn:function(e,n){return n-e?function(t,e,n){return t=Math.pow(t,n),e=Math.pow(e,n)-t,n=1/n,function(r){return Math.pow(t+r*e,n)}}(e,n,t):en(isNaN(e)?n:e)}}function rn(t,e){var n=e-t;return n?function(t,e){return function(n){return t+n*e}}(t,n):en(isNaN(t)?e:t)}var an=function t(e){var n=nn(e);function r(t,e){var r=n((t=ke(t)).r,(e=ke(e)).r),i=n(t.g,e.g),a=n(t.b,e.b),l=rn(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=i(e),t.b=a(e),t.opacity=l(e),t+""}}return r.gamma=t,r}(1);var ln,on=(ln=function(t){var e=t.length-1;return function(n){var r=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),i=t[r],a=t[r+1],l=r>0?t[r-1]:2*i-a,o=r<e-1?t[r+2]:2*a-i;return function(t,e,n,r,i){var a=t*t,l=a*t;return((1-3*t+3*a-l)*e+(4-6*a+3*l)*n+(1+3*t+3*a-3*l)*r+l*i)/6}((n-r/e)*e,l,i,a,o)}},function(t){var e,n,r=t.length,i=new Array(r),a=new Array(r),l=new Array(r);for(e=0;e<r;++e)n=ke(t[e]),i[e]=n.r||0,a[e]=n.g||0,l[e]=n.b||0;return i=ln(i),a=ln(a),l=ln(l),n.opacity=1,function(t){return n.r=i(t),n.g=a(t),n.b=l(t),n+""}});function sn(t,e){e||(e=[]);var n,r=t?Math.min(e.length,t.length):0,i=e.slice();return function(a){for(n=0;n<r;++n)i[n]=t[n]*(1-a)+e[n]*a;return i}}function un(t,e){var n,r=e?e.length:0,i=t?Math.min(r,t.length):0,a=new Array(i),l=new Array(r);for(n=0;n<i;++n)a[n]=yn(t[n],e[n]);for(;n<r;++n)l[n]=e[n];return function(t){for(n=0;n<i;++n)l[n]=a[n](t);return l}}function fn(t,e){var n=new Date;return t=+t,e=+e,function(r){return n.setTime(t*(1-r)+e*r),n}}function cn(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}function hn(t,e){var n,r={},i={};for(n in null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={}),e)n in t?r[n]=yn(t[n],e[n]):i[n]=e[n];return function(t){for(n in r)i[n]=r[n](t);return i}}var dn=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,gn=new RegExp(dn.source,"g");function pn(t,e){var n,r,i,a=dn.lastIndex=gn.lastIndex=0,l=-1,o=[],s=[];for(t+="",e+="";(n=dn.exec(t))&&(r=gn.exec(e));)(i=r.index)>a&&(i=e.slice(a,i),o[l]?o[l]+=i:o[++l]=i),(n=n[0])===(r=r[0])?o[l]?o[l]+=r:o[++l]=r:(o[++l]=null,s.push({i:l,x:cn(n,r)})),a=gn.lastIndex;return a<e.length&&(i=e.slice(a),o[l]?o[l]+=i:o[++l]=i),o.length<2?s[0]?function(t){return function(e){return t(e)+""}}(s[0].x):function(t){return function(){return t}}(e):(e=s.length,function(t){for(var n,r=0;r<e;++r)o[(n=s[r]).i]=n.x(t);return o.join("")})}function yn(t,e){var n,r=typeof e;return null==e||"boolean"===r?en(e):("number"===r?cn:"string"===r?(n=Ae(e))?(e=n,an):pn:e instanceof Ae?an:e instanceof Date?fn:function(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}(e)?sn:Array.isArray(e)?un:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?hn:cn)(t,e)}function mn(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}}var vn,xn=180/Math.PI,An={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function wn(t,e,n,r,i,a){var l,o,s;return(l=Math.sqrt(t*t+e*e))&&(t/=l,e/=l),(s=t*n+e*r)&&(n-=t*s,r-=e*s),(o=Math.sqrt(n*n+r*r))&&(n/=o,r/=o,s/=o),t*r<e*n&&(t=-t,e=-e,s=-s,l=-l),{translateX:i,translateY:a,rotate:Math.atan2(e,t)*xn,skewX:Math.atan(s)*xn,scaleX:l,scaleY:o}}function bn(t,e,n,r){function i(t){return t.length?t.pop()+" ":""}return function(a,l){var o=[],s=[];return a=t(a),l=t(l),function(t,r,i,a,l,o){if(t!==i||r!==a){var s=l.push("translate(",null,e,null,n);o.push({i:s-4,x:cn(t,i)},{i:s-2,x:cn(r,a)})}else(i||a)&&l.push("translate("+i+e+a+n)}(a.translateX,a.translateY,l.translateX,l.translateY,o,s),function(t,e,n,a){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),a.push({i:n.push(i(n)+"rotate(",null,r)-2,x:cn(t,e)})):e&&n.push(i(n)+"rotate("+e+r)}(a.rotate,l.rotate,o,s),function(t,e,n,a){t!==e?a.push({i:n.push(i(n)+"skewX(",null,r)-2,x:cn(t,e)}):e&&n.push(i(n)+"skewX("+e+r)}(a.skewX,l.skewX,o,s),function(t,e,n,r,a,l){if(t!==n||e!==r){var o=a.push(i(a)+"scale(",null,",",null,")");l.push({i:o-4,x:cn(t,n)},{i:o-2,x:cn(e,r)})}else 1===n&&1===r||a.push(i(a)+"scale("+n+","+r+")")}(a.scaleX,a.scaleY,l.scaleX,l.scaleY,o,s),a=l=null,function(t){for(var e,n=-1,r=s.length;++n<r;)o[(e=s[n]).i]=e.x(t);return o.join("")}}}var Dn=bn((function(t){const e=new("function"==typeof DOMMatrix?DOMMatrix:WebKitCSSMatrix)(t+"");return e.isIdentity?An:wn(e.a,e.b,e.c,e.d,e.e,e.f)}),"px, ","px)","deg)"),kn=bn((function(t){return null==t?An:(vn||(vn=document.createElementNS("http://www.w3.org/2000/svg","g")),vn.setAttribute("transform",t),(t=vn.transform.baseVal.consolidate())?wn((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):An)}),", ",")",")");function Cn(t,e){var n=rn((t=je(t)).l,(e=je(e)).l),r=rn(t.a,e.a),i=rn(t.b,e.b),a=rn(t.opacity,e.opacity);return function(e){return t.l=n(e),t.a=r(e),t.b=i(e),t.opacity=a(e),t+""}}var Mn,Tn,_n=0,En=0,Fn=0,Sn=1e3,Bn=0,Nn=0,Ln=0,In="object"==typeof performance&&performance.now?performance:Date,Vn="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function On(){return Nn||(Vn(Pn),Nn=In.now()+Ln)}function Pn(){Nn=0}function $n(){this._call=this._time=this._next=null}function Yn(t,e,n){var r=new $n;return r.restart(t,e,n),r}function Rn(){Nn=(Bn=In.now())+Ln,_n=En=0;try{!function(){On(),++_n;for(var t,e=Mn;e;)(t=Nn-e._time)>=0&&e._call.call(void 0,t),e=e._next;--_n}()}finally{_n=0,function(){var t,e,n=Mn,r=1/0;for(;n;)n._call?(r>n._time&&(r=n._time),t=n,n=n._next):(e=n._next,n._next=null,n=t?t._next=e:Mn=e);Tn=t,Un(r)}(),Nn=0}}function zn(){var t=In.now(),e=t-Bn;e>Sn&&(Ln-=e,Bn=t)}function Un(t){_n||(En&&(En=clearTimeout(En)),t-Nn>24?(t<1/0&&(En=setTimeout(Rn,t-In.now()-Ln)),Fn&&(Fn=clearInterval(Fn))):(Fn||(Bn=In.now(),Fn=setInterval(zn,Sn)),_n=1,Vn(Rn)))}function Hn(t,e,n){var r=new $n;return e=null==e?0:+e,r.restart((n=>{r.stop(),t(n+e)}),e,n),r}$n.prototype=Yn.prototype={constructor:$n,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?On():+n)+(null==e?0:+e),this._next||Tn===this||(Tn?Tn._next=this:Mn=this,Tn=this),this._call=t,this._time=n,Un()},stop:function(){this._call&&(this._call=null,this._time=1/0,Un())}};var Xn=$("start","end","cancel","interrupt"),Wn=[],jn=0,qn=1,Gn=2,Qn=3,Zn=4,Kn=5,Jn=6;function tr(t,e,n,r,i,a){var l=t.__transition;if(l){if(n in l)return}else t.__transition={};!function(t,e,n){var r,i=t.__transition;function a(t){n.state=qn,n.timer.restart(l,n.delay,n.time),n.delay<=t&&l(t-n.delay)}function l(a){var u,f,c,h;if(n.state!==qn)return s();for(u in i)if((h=i[u]).name===n.name){if(h.state===Qn)return Hn(l);h.state===Zn?(h.state=Jn,h.timer.stop(),h.on.call("interrupt",t,t.__data__,h.index,h.group),delete i[u]):+u<e&&(h.state=Jn,h.timer.stop(),h.on.call("cancel",t,t.__data__,h.index,h.group),delete i[u])}if(Hn((function(){n.state===Qn&&(n.state=Zn,n.timer.restart(o,n.delay,n.time),o(a))})),n.state=Gn,n.on.call("start",t,t.__data__,n.index,n.group),n.state===Gn){for(n.state=Qn,r=new Array(c=n.tween.length),u=0,f=-1;u<c;++u)(h=n.tween[u].value.call(t,t.__data__,n.index,n.group))&&(r[++f]=h);r.length=f+1}}function o(e){for(var i=e<n.duration?n.ease.call(null,e/n.duration):(n.timer.restart(s),n.state=Kn,1),a=-1,l=r.length;++a<l;)r[a].call(t,i);n.state===Kn&&(n.on.call("end",t,t.__data__,n.index,n.group),s())}function s(){for(var r in n.state=Jn,n.timer.stop(),delete i[e],i)return;delete t.__transition}i[e]=n,n.timer=Yn(a,0,n.time)}(t,n,{name:e,index:r,group:i,on:Xn,tween:Wn,time:a.time,delay:a.delay,duration:a.duration,ease:a.ease,timer:null,state:jn})}function er(t,e){var n=rr(t,e);if(n.state>jn)throw new Error("too late; already scheduled");return n}function nr(t,e){var n=rr(t,e);if(n.state>Qn)throw new Error("too late; already running");return n}function rr(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}function ir(t,e){var n,r;return function(){var i=nr(this,t),a=i.tween;if(a!==n)for(var l=0,o=(r=n=a).length;l<o;++l)if(r[l].name===e){(r=r.slice()).splice(l,1);break}i.tween=r}}function ar(t,e,n){var r,i;if("function"!=typeof n)throw new Error;return function(){var a=nr(this,t),l=a.tween;if(l!==r){i=(r=l).slice();for(var o={name:e,value:n},s=0,u=i.length;s<u;++s)if(i[s].name===e){i[s]=o;break}s===u&&i.push(o)}a.tween=i}}function lr(t,e,n){var r=t._id;return t.each((function(){var t=nr(this,r);(t.value||(t.value={}))[e]=n.apply(this,arguments)})),function(t){return rr(t,r).value[e]}}function or(t,e){var n;return("number"==typeof e?cn:e instanceof Ae?an:(n=Ae(e))?(e=n,an):pn)(t,e)}function sr(t){return function(){this.removeAttribute(t)}}function ur(t){return function(){this.removeAttributeNS(t.space,t.local)}}function fr(t,e,n){var r,i,a=n+"";return function(){var l=this.getAttribute(t);return l===a?null:l===r?i:i=e(r=l,n)}}function cr(t,e,n){var r,i,a=n+"";return function(){var l=this.getAttributeNS(t.space,t.local);return l===a?null:l===r?i:i=e(r=l,n)}}function hr(t,e,n){var r,i,a;return function(){var l,o,s=n(this);if(null!=s)return(l=this.getAttribute(t))===(o=s+"")?null:l===r&&o===i?a:(i=o,a=e(r=l,s));this.removeAttribute(t)}}function dr(t,e,n){var r,i,a;return function(){var l,o,s=n(this);if(null!=s)return(l=this.getAttributeNS(t.space,t.local))===(o=s+"")?null:l===r&&o===i?a:(i=o,a=e(r=l,s));this.removeAttributeNS(t.space,t.local)}}function gr(t,e){var n,r;function i(){var i=e.apply(this,arguments);return i!==r&&(n=(r=i)&&function(t,e){return function(n){this.setAttributeNS(t.space,t.local,e.call(this,n))}}(t,i)),n}return i._value=e,i}function pr(t,e){var n,r;function i(){var i=e.apply(this,arguments);return i!==r&&(n=(r=i)&&function(t,e){return function(n){this.setAttribute(t,e.call(this,n))}}(t,i)),n}return i._value=e,i}function yr(t,e){return function(){er(this,t).delay=+e.apply(this,arguments)}}function mr(t,e){return e=+e,function(){er(this,t).delay=e}}function vr(t,e){return function(){nr(this,t).duration=+e.apply(this,arguments)}}function xr(t,e){return e=+e,function(){nr(this,t).duration=e}}var Ar=te.prototype.constructor;function wr(t){return function(){this.style.removeProperty(t)}}var br=0;function Dr(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function kr(){return++br}var Cr=te.prototype;Dr.prototype={constructor:Dr,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=Q(t));for(var r=this._groups,i=r.length,a=new Array(i),l=0;l<i;++l)for(var o,s,u=r[l],f=u.length,c=a[l]=new Array(f),h=0;h<f;++h)(o=u[h])&&(s=t.call(o,o.__data__,h,u))&&("__data__"in o&&(s.__data__=o.__data__),c[h]=s,tr(c[h],e,n,h,c,rr(o,n)));return new Dr(a,this._parents,e,n)},selectAll:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=K(t));for(var r=this._groups,i=r.length,a=[],l=[],o=0;o<i;++o)for(var s,u=r[o],f=u.length,c=0;c<f;++c)if(s=u[c]){for(var h,d=t.call(s,s.__data__,c,u),g=rr(s,n),p=0,y=d.length;p<y;++p)(h=d[p])&&tr(h,e,n,p,d,g);a.push(d),l.push(s)}return new Dr(a,l,e,n)},selectChild:Cr.selectChild,selectChildren:Cr.selectChildren,filter:function(t){"function"!=typeof t&&(t=tt(t));for(var e=this._groups,n=e.length,r=new Array(n),i=0;i<n;++i)for(var a,l=e[i],o=l.length,s=r[i]=[],u=0;u<o;++u)(a=l[u])&&t.call(a,a.__data__,u,l)&&s.push(a);return new Dr(r,this._parents,this._name,this._id)},merge:function(t){if(t._id!==this._id)throw new Error;for(var e=this._groups,n=t._groups,r=e.length,i=n.length,a=Math.min(r,i),l=new Array(r),o=0;o<a;++o)for(var s,u=e[o],f=n[o],c=u.length,h=l[o]=new Array(c),d=0;d<c;++d)(s=u[d]||f[d])&&(h[d]=s);for(;o<r;++o)l[o]=e[o];return new Dr(l,this._parents,this._name,this._id)},selection:function(){return new Ar(this._groups,this._parents)},transition:function(){for(var t=this._name,e=this._id,n=kr(),r=this._groups,i=r.length,a=0;a<i;++a)for(var l,o=r[a],s=o.length,u=0;u<s;++u)if(l=o[u]){var f=rr(l,e);tr(l,t,n,u,o,{time:f.time+f.delay+f.duration,delay:0,duration:f.duration,ease:f.ease})}return new Dr(r,this._parents,t,n)},call:Cr.call,nodes:Cr.nodes,node:Cr.node,size:Cr.size,empty:Cr.empty,each:Cr.each,on:function(t,e){var n=this._id;return arguments.length<2?rr(this.node(),n).on.on(t):this.each(function(t,e,n){var r,i,a=function(t){return(t+"").trim().split(/^|\s+/).every((function(t){var e=t.indexOf(".");return e>=0&&(t=t.slice(0,e)),!t||"start"===t}))}(e)?er:nr;return function(){var l=a(this,t),o=l.on;o!==r&&(i=(r=o).copy()).on(e,n),l.on=i}}(n,t,e))},attr:function(t,e){var n=X(t),r="transform"===n?kn:or;return this.attrTween(t,"function"==typeof e?(n.local?dr:hr)(n,r,lr(this,"attr."+t,e)):null==e?(n.local?ur:sr)(n):(n.local?cr:fr)(n,r,e))},attrTween:function(t,e){var n="attr."+t;if(arguments.length<2)return(n=this.tween(n))&&n._value;if(null==e)return this.tween(n,null);if("function"!=typeof e)throw new Error;var r=X(t);return this.tween(n,(r.local?gr:pr)(r,e))},style:function(t,e,n){var r="transform"==(t+="")?Dn:or;return null==e?this.styleTween(t,function(t,e){var n,r,i;return function(){var a=Dt(this,t),l=(this.style.removeProperty(t),Dt(this,t));return a===l?null:a===n&&l===r?i:i=e(n=a,r=l)}}(t,r)).on("end.style."+t,wr(t)):"function"==typeof e?this.styleTween(t,function(t,e,n){var r,i,a;return function(){var l=Dt(this,t),o=n(this),s=o+"";return null==o&&(this.style.removeProperty(t),s=o=Dt(this,t)),l===s?null:l===r&&s===i?a:(i=s,a=e(r=l,o))}}(t,r,lr(this,"style."+t,e))).each(function(t,e){var n,r,i,a,l="style."+e,o="end."+l;return function(){var s=nr(this,t),u=s.on,f=null==s.value[l]?a||(a=wr(e)):void 0;u===n&&i===f||(r=(n=u).copy()).on(o,i=f),s.on=r}}(this._id,t)):this.styleTween(t,function(t,e,n){var r,i,a=n+"";return function(){var l=Dt(this,t);return l===a?null:l===r?i:i=e(r=l,n)}}(t,r,e),n).on("end.style."+t,null)},styleTween:function(t,e,n){var r="style."+(t+="");if(arguments.length<2)return(r=this.tween(r))&&r._value;if(null==e)return this.tween(r,null);if("function"!=typeof e)throw new Error;return this.tween(r,function(t,e,n){var r,i;function a(){var a=e.apply(this,arguments);return a!==i&&(r=(i=a)&&function(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}(t,a,n)),r}return a._value=e,a}(t,e,null==n?"":n))},text:function(t){return this.tween("text","function"==typeof t?function(t){return function(){var e=t(this);this.textContent=null==e?"":e}}(lr(this,"text",t)):function(t){return function(){this.textContent=t}}(null==t?"":t+""))},textTween:function(t){var e="text";if(arguments.length<1)return(e=this.tween(e))&&e._value;if(null==t)return this.tween(e,null);if("function"!=typeof t)throw new Error;return this.tween(e,function(t){var e,n;function r(){var r=t.apply(this,arguments);return r!==n&&(e=(n=r)&&function(t){return function(e){this.textContent=t.call(this,e)}}(r)),e}return r._value=t,r}(t))},remove:function(){return this.on("end.remove",function(t){return function(){var e=this.parentNode;for(var n in this.__transition)if(+n!==t)return;e&&e.removeChild(this)}}(this._id))},tween:function(t,e){var n=this._id;if(t+="",arguments.length<2){for(var r,i=rr(this.node(),n).tween,a=0,l=i.length;a<l;++a)if((r=i[a]).name===t)return r.value;return null}return this.each((null==e?ir:ar)(n,t,e))},delay:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?yr:mr)(e,t)):rr(this.node(),e).delay},duration:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?vr:xr)(e,t)):rr(this.node(),e).duration},ease:function(t){var e=this._id;return arguments.length?this.each(function(t,e){if("function"!=typeof e)throw new Error;return function(){nr(this,t).ease=e}}(e,t)):rr(this.node(),e).ease},easeVarying:function(t){if("function"!=typeof t)throw new Error;return this.each(function(t,e){return function(){var n=e.apply(this,arguments);if("function"!=typeof n)throw new Error;nr(this,t).ease=n}}(this._id,t))},end:function(){var t,e,n=this,r=n._id,i=n.size();return new Promise((function(a,l){var o={value:l},s={value:function(){0==--i&&a()}};n.each((function(){var n=nr(this,r),i=n.on;i!==t&&((e=(t=i).copy())._.cancel.push(o),e._.interrupt.push(o),e._.end.push(s)),n.on=e})),0===i&&a()}))},[Symbol.iterator]:Cr[Symbol.iterator]};var Mr={time:null,delay:0,duration:250,ease:function(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}};function Tr(t,e){for(var n;!(n=t.__transition)||!(n=n[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return n}te.prototype.interrupt=function(t){return this.each((function(){!function(t,e){var n,r,i,a=t.__transition,l=!0;if(a){for(i in e=null==e?null:e+"",a)(n=a[i]).name===e?(r=n.state>Gn&&n.state<Kn,n.state=Jn,n.timer.stop(),n.on.call(r?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete a[i]):l=!1;l&&delete t.__transition}}(this,t)}))},te.prototype.transition=function(t){var e,n;t instanceof Dr?(e=t._id,t=t._name):(e=kr(),(n=Mr).time=On(),t=null==t?null:t+"");for(var r=this._groups,i=r.length,a=0;a<i;++a)for(var l,o=r[a],s=o.length,u=0;u<s;++u)(l=o[u])&&tr(l,t,e,u,o,n||Tr(l,e));return new Dr(r,this._parents,t,e)};const _r=Math.PI,Er=2*_r,Fr=1e-6,Sr=Er-Fr;function Br(t){this._+=t[0];for(let e=1,n=t.length;e<n;++e)this._+=arguments[e]+t[e]}class Nr{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=null==t?Br:function(t){let e=Math.floor(t);if(!(e>=0))throw new Error(`invalid digits: ${t}`);if(e>15)return Br;const n=10**e;return function(t){this._+=t[0];for(let e=1,r=t.length;e<r;++e)this._+=Math.round(arguments[e]*n)/n+t[e]}}(t)}moveTo(t,e){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}`}closePath(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(t,e){this._append`L${this._x1=+t},${this._y1=+e}`}quadraticCurveTo(t,e,n,r){this._append`Q${+t},${+e},${this._x1=+n},${this._y1=+r}`}bezierCurveTo(t,e,n,r,i,a){this._append`C${+t},${+e},${+n},${+r},${this._x1=+i},${this._y1=+a}`}arcTo(t,e,n,r,i){if(t=+t,e=+e,n=+n,r=+r,(i=+i)<0)throw new Error(`negative radius: ${i}`);let a=this._x1,l=this._y1,o=n-t,s=r-e,u=a-t,f=l-e,c=u*u+f*f;if(null===this._x1)this._append`M${this._x1=t},${this._y1=e}`;else if(c>Fr)if(Math.abs(f*o-s*u)>Fr&&i){let h=n-a,d=r-l,g=o*o+s*s,p=h*h+d*d,y=Math.sqrt(g),m=Math.sqrt(c),v=i*Math.tan((_r-Math.acos((g+c-p)/(2*y*m)))/2),x=v/m,A=v/y;Math.abs(x-1)>Fr&&this._append`L${t+x*u},${e+x*f}`,this._append`A${i},${i},0,0,${+(f*h>u*d)},${this._x1=t+A*o},${this._y1=e+A*s}`}else this._append`L${this._x1=t},${this._y1=e}`;else;}arc(t,e,n,r,i,a){if(t=+t,e=+e,a=!!a,(n=+n)<0)throw new Error(`negative radius: ${n}`);let l=n*Math.cos(r),o=n*Math.sin(r),s=t+l,u=e+o,f=1^a,c=a?r-i:i-r;null===this._x1?this._append`M${s},${u}`:(Math.abs(this._x1-s)>Fr||Math.abs(this._y1-u)>Fr)&&this._append`L${s},${u}`,n&&(c<0&&(c=c%Er+Er),c>Sr?this._append`A${n},${n},0,1,${f},${t-l},${e-o}A${n},${n},0,1,${f},${this._x1=s},${this._y1=u}`:c>Fr&&this._append`A${n},${n},0,${+(c>=_r)},${f},${this._x1=t+n*Math.cos(i)},${this._y1=e+n*Math.sin(i)}`)}rect(t,e,n,r){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+e}h${n=+n}v${+r}h${-n}Z`}toString(){return this._}}function Lr(t,e){if((n=(t=e?t.toExponential(e-1):t.toExponential()).indexOf("e"))<0)return null;var n,r=t.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+t.slice(n+1)]}function Ir(t){return(t=Lr(Math.abs(t)))?t[1]:NaN}var Vr,Or=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Pr(t){if(!(e=Or.exec(t)))throw new Error("invalid format: "+t);var e;return new $r({fill:e[1],align:e[2],sign:e[3],symbol:e[4],zero:e[5],width:e[6],comma:e[7],precision:e[8]&&e[8].slice(1),trim:e[9],type:e[10]})}function $r(t){this.fill=void 0===t.fill?" ":t.fill+"",this.align=void 0===t.align?">":t.align+"",this.sign=void 0===t.sign?"-":t.sign+"",this.symbol=void 0===t.symbol?"":t.symbol+"",this.zero=!!t.zero,this.width=void 0===t.width?void 0:+t.width,this.comma=!!t.comma,this.precision=void 0===t.precision?void 0:+t.precision,this.trim=!!t.trim,this.type=void 0===t.type?"":t.type+""}function Yr(t,e){var n=Lr(t,e);if(!n)return t+"";var r=n[0],i=n[1];return i<0?"0."+new Array(-i).join("0")+r:r.length>i+1?r.slice(0,i+1)+"."+r.slice(i+1):r+new Array(i-r.length+2).join("0")}Pr.prototype=$r.prototype,$r.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(void 0===this.width?"":Math.max(1,0|this.width))+(this.comma?",":"")+(void 0===this.precision?"":"."+Math.max(0,0|this.precision))+(this.trim?"~":"")+this.type};var Rr={"%":(t,e)=>(100*t).toFixed(e),b:t=>Math.round(t).toString(2),c:t=>t+"",d:function(t){return Math.abs(t=Math.round(t))>=1e21?t.toLocaleString("en").replace(/,/g,""):t.toString(10)},e:(t,e)=>t.toExponential(e),f:(t,e)=>t.toFixed(e),g:(t,e)=>t.toPrecision(e),o:t=>Math.round(t).toString(8),p:(t,e)=>Yr(100*t,e),r:Yr,s:function(t,e){var n=Lr(t,e);if(!n)return t+"";var r=n[0],i=n[1],a=i-(Vr=3*Math.max(-8,Math.min(8,Math.floor(i/3))))+1,l=r.length;return a===l?r:a>l?r+new Array(a-l+1).join("0"):a>0?r.slice(0,a)+"."+r.slice(a):"0."+new Array(1-a).join("0")+Lr(t,Math.max(0,e+a-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function zr(t){return t}var Ur,Hr,Xr,Wr=Array.prototype.map,jr=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function qr(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?zr:(e=Wr.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var i=t.length,a=[],l=0,o=e[0],s=0;i>0&&o>0&&(s+o+1>r&&(o=Math.max(1,r-s)),a.push(t.substring(i-=o,i+o)),!((s+=o+1)>r));)o=e[l=(l+1)%e.length];return a.reverse().join(n)}),i=void 0===t.currency?"":t.currency[0]+"",a=void 0===t.currency?"":t.currency[1]+"",l=void 0===t.decimal?".":t.decimal+"",o=void 0===t.numerals?zr:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(Wr.call(t.numerals,String)),s=void 0===t.percent?"%":t.percent+"",u=void 0===t.minus?"":t.minus+"",f=void 0===t.nan?"NaN":t.nan+"";function c(t){var e=(t=Pr(t)).fill,n=t.align,c=t.sign,h=t.symbol,d=t.zero,g=t.width,p=t.comma,y=t.precision,m=t.trim,v=t.type;"n"===v?(p=!0,v="g"):Rr[v]||(void 0===y&&(y=12),m=!0,v="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=");var x="$"===h?i:"#"===h&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",A="$"===h?a:/[%p]/.test(v)?s:"",w=Rr[v],b=/[defgprs%]/.test(v);function D(t){var i,a,s,h=x,D=A;if("c"===v)D=w(t)+D,t="";else{var k=(t=+t)<0||1/t<0;if(t=isNaN(t)?f:w(Math.abs(t),y),m&&(t=function(t){t:for(var e,n=t.length,r=1,i=-1;r<n;++r)switch(t[r]){case".":i=e=r;break;case"0":0===i&&(i=r),e=r;break;default:if(!+t[r])break t;i>0&&(i=0)}return i>0?t.slice(0,i)+t.slice(e+1):t}(t)),k&&0==+t&&"+"!==c&&(k=!1),h=(k?"("===c?c:u:"-"===c||"("===c?"":c)+h,D=("s"===v?jr[8+Vr/3]:"")+D+(k&&"("===c?")":""),b)for(i=-1,a=t.length;++i<a;)if(48>(s=t.charCodeAt(i))||s>57){D=(46===s?l+t.slice(i+1):t.slice(i))+D,t=t.slice(0,i);break}}p&&!d&&(t=r(t,1/0));var C=h.length+t.length+D.length,M=C<g?new Array(g-C+1).join(e):"";switch(p&&d&&(t=r(M+t,M.length?g-D.length:1/0),M=""),n){case"<":t=h+t+D+M;break;case"=":t=h+M+t+D;break;case"^":t=M.slice(0,C=M.length>>1)+h+t+D+M.slice(C);break;default:t=M+h+t+D}return o(t)}return y=void 0===y?6:/[gprs]/.test(v)?Math.max(1,Math.min(21,y)):Math.max(0,Math.min(20,y)),D.toString=function(){return t+""},D}return{format:c,formatPrefix:function(t,e){var n=c(((t=Pr(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(Ir(e)/3))),i=Math.pow(10,-r),a=jr[8+r/3];return function(t){return n(i*t)+a}}}}function Gr(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}Ur=qr({thousands:",",grouping:[3],currency:["$",""]}),Hr=Ur.format,Xr=Ur.formatPrefix;const Qr=Symbol("implicit");function Zr(){var t=new o,e=[],n=[],r=Qr;function i(i){let a=t.get(i);if(void 0===a){if(r!==Qr)return r;t.set(i,a=e.push(i)-1)}return n[a%n.length]}return i.domain=function(n){if(!arguments.length)return e.slice();e=[],t=new o;for(const r of n)t.has(r)||t.set(r,e.push(r)-1);return i},i.range=function(t){return arguments.length?(n=Array.from(t),i):n.slice()},i.unknown=function(t){return arguments.length?(r=t,i):r},i.copy=function(){return Zr(e,n).unknown(r)},Gr.apply(i,arguments),i}function Kr(t){return+t}var Jr=[0,1];function ti(t){return t}function ei(t,e){return(e-=t=+t)?function(n){return(n-t)/e}:function(t){return function(){return t}}(isNaN(e)?NaN:.5)}function ni(t,e,n){var r=t[0],i=t[1],a=e[0],l=e[1];return i<r?(r=ei(i,r),a=n(l,a)):(r=ei(r,i),a=n(a,l)),function(t){return a(r(t))}}function ri(t,e,n){var r=Math.min(t.length,e.length)-1,i=new Array(r),a=new Array(r),o=-1;for(t[r]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++o<r;)i[o]=ei(t[o],t[o+1]),a[o]=n(e[o],e[o+1]);return function(e){var n=l(t,e,1,r)-1;return a[n](i[n](e))}}function ii(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function ai(){var t,e,n,r,i,a,l=Jr,o=Jr,s=yn,u=ti;function f(){var t,e,n,s=Math.min(l.length,o.length);return u!==ti&&(t=l[0],e=l[s-1],t>e&&(n=t,t=e,e=n),u=function(n){return Math.max(t,Math.min(e,n))}),r=s>2?ri:ni,i=a=null,c}function c(e){return null==e||isNaN(e=+e)?n:(i||(i=r(l.map(t),o,s)))(t(u(e)))}return c.invert=function(n){return u(e((a||(a=r(o,l.map(t),cn)))(n)))},c.domain=function(t){return arguments.length?(l=Array.from(t,Kr),f()):l.slice()},c.range=function(t){return arguments.length?(o=Array.from(t),f()):o.slice()},c.rangeRound=function(t){return o=Array.from(t),s=mn,f()},c.clamp=function(t){return arguments.length?(u=!!t||ti,f()):u!==ti},c.interpolate=function(t){return arguments.length?(s=t,f()):s},c.unknown=function(t){return arguments.length?(n=t,c):n},function(n,r){return t=n,e=r,f()}}function li(){return ai()(ti,ti)}function oi(t,e,n,r){var i,a=y(t,e,n);switch((r=Pr(null==r?",f":r)).type){case"s":var l=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(i=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(Ir(e)/3)))-Ir(Math.abs(t)))}(a,l))||(r.precision=i),Xr(r,l);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(i=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,Ir(e)-Ir(t))+1}(a,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=i-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(i=function(t){return Math.max(0,-Ir(Math.abs(t)))}(a))||(r.precision=i-2*("%"===r.type))}return Hr(r)}function si(t){var e=t.domain;return t.ticks=function(t){var n=e();return function(t,e,n){if(!((n=+n)>0))return[];if((t=+t)==(e=+e))return[t];const r=e<t,[i,a,l]=r?g(e,t,n):g(t,e,n);if(!(a>=i))return[];const o=a-i+1,s=new Array(o);if(r)if(l<0)for(let t=0;t<o;++t)s[t]=(a-t)/-l;else for(let t=0;t<o;++t)s[t]=(a-t)*l;else if(l<0)for(let t=0;t<o;++t)s[t]=(i+t)/-l;else for(let t=0;t<o;++t)s[t]=(i+t)*l;return s}(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return oi(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,i,a=e(),l=0,o=a.length-1,s=a[l],u=a[o],f=10;for(u<s&&(i=s,s=u,u=i,i=l,l=o,o=i);f-- >0;){if((i=p(s,u,n))===r)return a[l]=s,a[o]=u,e(a);if(i>0)s=Math.floor(s/i)*i,u=Math.ceil(u/i)*i;else{if(!(i<0))break;s=Math.ceil(s*i)/i,u=Math.floor(u*i)/i}r=i}return t},t}function ui(){var t=li();return t.copy=function(){return ii(t,ui())},Gr.apply(t,arguments),si(t)}const fi=new Date,ci=new Date;function hi(t,e,n,r){function i(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return i.floor=e=>(t(e=new Date(+e)),e),i.ceil=n=>(t(n=new Date(n-1)),e(n,1),t(n),n),i.round=t=>{const e=i(t),n=i.ceil(t);return t-e<n-t?e:n},i.offset=(t,n)=>(e(t=new Date(+t),null==n?1:Math.floor(n)),t),i.range=(n,r,a)=>{const l=[];if(n=i.ceil(n),a=null==a?1:Math.floor(a),!(n<r&&a>0))return l;let o;do{l.push(o=new Date(+n)),e(n,a),t(n)}while(o<n&&n<r);return l},i.filter=n=>hi((e=>{if(e>=e)for(;t(e),!n(e);)e.setTime(e-1)}),((t,r)=>{if(t>=t)if(r<0)for(;++r<=0;)for(;e(t,-1),!n(t););else for(;--r>=0;)for(;e(t,1),!n(t););})),n&&(i.count=(e,r)=>(fi.setTime(+e),ci.setTime(+r),t(fi),t(ci),Math.floor(n(fi,ci))),i.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?i.filter(r?e=>r(e)%t==0:e=>i.count(0,e)%t==0):i:null)),i}const di=hi((()=>{}),((t,e)=>{t.setTime(+t+e)}),((t,e)=>e-t));di.every=t=>(t=Math.floor(t),isFinite(t)&&t>0?t>1?hi((e=>{e.setTime(Math.floor(e/t)*t)}),((e,n)=>{e.setTime(+e+n*t)}),((e,n)=>(n-e)/t)):di:null),di.range;const gi=1e3,pi=6e4,yi=36e5,mi=864e5,vi=6048e5,xi=2592e6,Ai=31536e6,wi=hi((t=>{t.setTime(t-t.getMilliseconds())}),((t,e)=>{t.setTime(+t+e*gi)}),((t,e)=>(e-t)/gi),(t=>t.getUTCSeconds()));wi.range;const bi=hi((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*gi)}),((t,e)=>{t.setTime(+t+e*pi)}),((t,e)=>(e-t)/pi),(t=>t.getMinutes()));bi.range;const Di=hi((t=>{t.setUTCSeconds(0,0)}),((t,e)=>{t.setTime(+t+e*pi)}),((t,e)=>(e-t)/pi),(t=>t.getUTCMinutes()));Di.range;const ki=hi((t=>{t.setTime(t-t.getMilliseconds()-t.getSeconds()*gi-t.getMinutes()*pi)}),((t,e)=>{t.setTime(+t+e*yi)}),((t,e)=>(e-t)/yi),(t=>t.getHours()));ki.range;const Ci=hi((t=>{t.setUTCMinutes(0,0,0)}),((t,e)=>{t.setTime(+t+e*yi)}),((t,e)=>(e-t)/yi),(t=>t.getUTCHours()));Ci.range;const Mi=hi((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*pi)/mi),(t=>t.getDate()-1));Mi.range;const Ti=hi((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/mi),(t=>t.getUTCDate()-1));Ti.range;const _i=hi((t=>{t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+e)}),((t,e)=>(e-t)/mi),(t=>Math.floor(t/mi)));function Ei(t){return hi((e=>{e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),((t,e)=>{t.setDate(t.getDate()+7*e)}),((t,e)=>(e-t-(e.getTimezoneOffset()-t.getTimezoneOffset())*pi)/vi))}_i.range;const Fi=Ei(0),Si=Ei(1),Bi=Ei(2),Ni=Ei(3),Li=Ei(4),Ii=Ei(5),Vi=Ei(6);function Oi(t){return hi((e=>{e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCDate(t.getUTCDate()+7*e)}),((t,e)=>(e-t)/vi))}Fi.range,Si.range,Bi.range,Ni.range,Li.range,Ii.range,Vi.range;const Pi=Oi(0),$i=Oi(1),Yi=Oi(2),Ri=Oi(3),zi=Oi(4),Ui=Oi(5),Hi=Oi(6);Pi.range,$i.range,Yi.range,Ri.range,zi.range,Ui.range,Hi.range;const Xi=hi((t=>{t.setDate(1),t.setHours(0,0,0,0)}),((t,e)=>{t.setMonth(t.getMonth()+e)}),((t,e)=>e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())),(t=>t.getMonth()));Xi.range;const Wi=hi((t=>{t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCMonth(t.getUTCMonth()+e)}),((t,e)=>e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())),(t=>t.getUTCMonth()));Wi.range;const ji=hi((t=>{t.setMonth(0,1),t.setHours(0,0,0,0)}),((t,e)=>{t.setFullYear(t.getFullYear()+e)}),((t,e)=>e.getFullYear()-t.getFullYear()),(t=>t.getFullYear()));ji.every=t=>isFinite(t=Math.floor(t))&&t>0?hi((e=>{e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),((e,n)=>{e.setFullYear(e.getFullYear()+n*t)})):null,ji.range;const qi=hi((t=>{t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),((t,e)=>{t.setUTCFullYear(t.getUTCFullYear()+e)}),((t,e)=>e.getUTCFullYear()-t.getUTCFullYear()),(t=>t.getUTCFullYear()));qi.every=t=>isFinite(t=Math.floor(t))&&t>0?hi((e=>{e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),((e,n)=>{e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null,qi.range;const[Gi,Qi]=function(t,e,n,r,a,l){const o=[[wi,1,gi],[wi,5,5e3],[wi,15,15e3],[wi,30,3e4],[l,1,pi],[l,5,3e5],[l,15,9e5],[l,30,18e5],[a,1,yi],[a,3,108e5],[a,6,216e5],[a,12,432e5],[r,1,mi],[r,2,1728e5],[n,1,vi],[e,1,xi],[e,3,7776e6],[t,1,Ai]];function s(e,n,r){const a=Math.abs(n-e)/r,l=i((([,,t])=>t)).right(o,a);if(l===o.length)return t.every(y(e/Ai,n/Ai,r));if(0===l)return di.every(Math.max(y(e,n,r),1));const[s,u]=o[a/o[l-1][2]<o[l][2]/a?l-1:l];return s.every(u)}return[function(t,e,n){const r=e<t;r&&([t,e]=[e,t]);const i=n&&"function"==typeof n.range?n:s(t,e,n),a=i?i.range(t,+e+1):[];return r?a.reverse():a},s]}(ji,Xi,Fi,Mi,ki,bi);function Zi(t){if(0<=t.y&&t.y<100){var e=new Date(-1,t.m,t.d,t.H,t.M,t.S,t.L);return e.setFullYear(t.y),e}return new Date(t.y,t.m,t.d,t.H,t.M,t.S,t.L)}function Ki(t){if(0<=t.y&&t.y<100){var e=new Date(Date.UTC(-1,t.m,t.d,t.H,t.M,t.S,t.L));return e.setUTCFullYear(t.y),e}return new Date(Date.UTC(t.y,t.m,t.d,t.H,t.M,t.S,t.L))}function Ji(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}var ta,ea,na={"-":"",_:" ",0:"0"},ra=/^\s*\d+/,ia=/^%/,aa=/[\\^$*+?|[\]().{}]/g;function la(t,e,n){var r=t<0?"-":"",i=(r?-t:t)+"",a=i.length;return r+(a<n?new Array(n-a+1).join(e)+i:i)}function oa(t){return t.replace(aa,"\\$&")}function sa(t){return new RegExp("^(?:"+t.map(oa).join("|")+")","i")}function ua(t){return new Map(t.map(((t,e)=>[t.toLowerCase(),e])))}function fa(t,e,n){var r=ra.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function ca(t,e,n){var r=ra.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function ha(t,e,n){var r=ra.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function da(t,e,n){var r=ra.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function ga(t,e,n){var r=ra.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function pa(t,e,n){var r=ra.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function ya(t,e,n){var r=ra.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function ma(t,e,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(e.slice(n,n+6));return r?(t.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function va(t,e,n){var r=ra.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function xa(t,e,n){var r=ra.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function Aa(t,e,n){var r=ra.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function wa(t,e,n){var r=ra.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function ba(t,e,n){var r=ra.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function Da(t,e,n){var r=ra.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function ka(t,e,n){var r=ra.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Ca(t,e,n){var r=ra.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Ma(t,e,n){var r=ra.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Ta(t,e,n){var r=ia.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function _a(t,e,n){var r=ra.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function Ea(t,e,n){var r=ra.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function Fa(t,e){return la(t.getDate(),e,2)}function Sa(t,e){return la(t.getHours(),e,2)}function Ba(t,e){return la(t.getHours()%12||12,e,2)}function Na(t,e){return la(1+Mi.count(ji(t),t),e,3)}function La(t,e){return la(t.getMilliseconds(),e,3)}function Ia(t,e){return La(t,e)+"000"}function Va(t,e){return la(t.getMonth()+1,e,2)}function Oa(t,e){return la(t.getMinutes(),e,2)}function Pa(t,e){return la(t.getSeconds(),e,2)}function $a(t){var e=t.getDay();return 0===e?7:e}function Ya(t,e){return la(Fi.count(ji(t)-1,t),e,2)}function Ra(t){var e=t.getDay();return e>=4||0===e?Li(t):Li.ceil(t)}function za(t,e){return t=Ra(t),la(Li.count(ji(t),t)+(4===ji(t).getDay()),e,2)}function Ua(t){return t.getDay()}function Ha(t,e){return la(Si.count(ji(t)-1,t),e,2)}function Xa(t,e){return la(t.getFullYear()%100,e,2)}function Wa(t,e){return la((t=Ra(t)).getFullYear()%100,e,2)}function ja(t,e){return la(t.getFullYear()%1e4,e,4)}function qa(t,e){var n=t.getDay();return la((t=n>=4||0===n?Li(t):Li.ceil(t)).getFullYear()%1e4,e,4)}function Ga(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+la(e/60|0,"0",2)+la(e%60,"0",2)}function Qa(t,e){return la(t.getUTCDate(),e,2)}function Za(t,e){return la(t.getUTCHours(),e,2)}function Ka(t,e){return la(t.getUTCHours()%12||12,e,2)}function Ja(t,e){return la(1+Ti.count(qi(t),t),e,3)}function tl(t,e){return la(t.getUTCMilliseconds(),e,3)}function el(t,e){return tl(t,e)+"000"}function nl(t,e){return la(t.getUTCMonth()+1,e,2)}function rl(t,e){return la(t.getUTCMinutes(),e,2)}function il(t,e){return la(t.getUTCSeconds(),e,2)}function al(t){var e=t.getUTCDay();return 0===e?7:e}function ll(t,e){return la(Pi.count(qi(t)-1,t),e,2)}function ol(t){var e=t.getUTCDay();return e>=4||0===e?zi(t):zi.ceil(t)}function sl(t,e){return t=ol(t),la(zi.count(qi(t),t)+(4===qi(t).getUTCDay()),e,2)}function ul(t){return t.getUTCDay()}function fl(t,e){return la($i.count(qi(t)-1,t),e,2)}function cl(t,e){return la(t.getUTCFullYear()%100,e,2)}function hl(t,e){return la((t=ol(t)).getUTCFullYear()%100,e,2)}function dl(t,e){return la(t.getUTCFullYear()%1e4,e,4)}function gl(t,e){var n=t.getUTCDay();return la((t=n>=4||0===n?zi(t):zi.ceil(t)).getUTCFullYear()%1e4,e,4)}function pl(){return"+0000"}function yl(){return"%"}function ml(t){return+t}function vl(t){return Math.floor(+t/1e3)}function xl(t){return new Date(t)}function Al(t){return t instanceof Date?+t:+new Date(+t)}function wl(t,e,n,r,i,a,l,o,s,u){var f=li(),c=f.invert,h=f.domain,d=u(".%L"),g=u(":%S"),p=u("%I:%M"),y=u("%I %p"),m=u("%a %d"),v=u("%b %d"),x=u("%B"),A=u("%Y");function w(t){return(s(t)<t?d:o(t)<t?g:l(t)<t?p:a(t)<t?y:r(t)<t?i(t)<t?m:v:n(t)<t?x:A)(t)}return f.invert=function(t){return new Date(c(t))},f.domain=function(t){return arguments.length?h(Array.from(t,Al)):h().map(xl)},f.ticks=function(e){var n=h();return t(n[0],n[n.length-1],null==e?10:e)},f.tickFormat=function(t,e){return null==e?w:u(e)},f.nice=function(t){var n=h();return t&&"function"==typeof t.range||(t=e(n[0],n[n.length-1],null==t?10:t)),t?h(function(t,e){var n,r=0,i=(t=t.slice()).length-1,a=t[r],l=t[i];return l<a&&(n=r,r=i,i=n,n=a,a=l,l=n),t[r]=e.floor(a),t[i]=e.ceil(l),t}(n,t)):f},f.copy=function(){return ii(f,wl(t,e,n,r,i,a,l,o,s,u))},f}function bl(){return Gr.apply(wl(Gi,Qi,ji,Xi,Fi,Mi,ki,bi,wi,ea).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}!function(t){ta=function(t){var e=t.dateTime,n=t.date,r=t.time,i=t.periods,a=t.days,l=t.shortDays,o=t.months,s=t.shortMonths,u=sa(i),f=ua(i),c=sa(a),h=ua(a),d=sa(l),g=ua(l),p=sa(o),y=ua(o),m=sa(s),v=ua(s),x={a:function(t){return l[t.getDay()]},A:function(t){return a[t.getDay()]},b:function(t){return s[t.getMonth()]},B:function(t){return o[t.getMonth()]},c:null,d:Fa,e:Fa,f:Ia,g:Wa,G:qa,H:Sa,I:Ba,j:Na,L:La,m:Va,M:Oa,p:function(t){return i[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:ml,s:vl,S:Pa,u:$a,U:Ya,V:za,w:Ua,W:Ha,x:null,X:null,y:Xa,Y:ja,Z:Ga,"%":yl},A={a:function(t){return l[t.getUTCDay()]},A:function(t){return a[t.getUTCDay()]},b:function(t){return s[t.getUTCMonth()]},B:function(t){return o[t.getUTCMonth()]},c:null,d:Qa,e:Qa,f:el,g:hl,G:gl,H:Za,I:Ka,j:Ja,L:tl,m:nl,M:rl,p:function(t){return i[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:ml,s:vl,S:il,u:al,U:ll,V:sl,w:ul,W:fl,x:null,X:null,y:cl,Y:dl,Z:pl,"%":yl},w={a:function(t,e,n){var r=d.exec(e.slice(n));return r?(t.w=g.get(r[0].toLowerCase()),n+r[0].length):-1},A:function(t,e,n){var r=c.exec(e.slice(n));return r?(t.w=h.get(r[0].toLowerCase()),n+r[0].length):-1},b:function(t,e,n){var r=m.exec(e.slice(n));return r?(t.m=v.get(r[0].toLowerCase()),n+r[0].length):-1},B:function(t,e,n){var r=p.exec(e.slice(n));return r?(t.m=y.get(r[0].toLowerCase()),n+r[0].length):-1},c:function(t,n,r){return k(t,e,n,r)},d:Aa,e:Aa,f:Ma,g:ya,G:pa,H:ba,I:ba,j:wa,L:Ca,m:xa,M:Da,p:function(t,e,n){var r=u.exec(e.slice(n));return r?(t.p=f.get(r[0].toLowerCase()),n+r[0].length):-1},q:va,Q:_a,s:Ea,S:ka,u:ca,U:ha,V:da,w:fa,W:ga,x:function(t,e,r){return k(t,n,e,r)},X:function(t,e,n){return k(t,r,e,n)},y:ya,Y:pa,Z:ma,"%":Ta};function b(t,e){return function(n){var r,i,a,l=[],o=-1,s=0,u=t.length;for(n instanceof Date||(n=new Date(+n));++o<u;)37===t.charCodeAt(o)&&(l.push(t.slice(s,o)),null!=(i=na[r=t.charAt(++o)])?r=t.charAt(++o):i="e"===r?" ":"0",(a=e[r])&&(r=a(n,i)),l.push(r),s=o+1);return l.push(t.slice(s,o)),l.join("")}}function D(t,e){return function(n){var r,i,a=Ji(1900,void 0,1);if(k(a,t,n+="",0)!=n.length)return null;if("Q"in a)return new Date(a.Q);if("s"in a)return new Date(1e3*a.s+("L"in a?a.L:0));if(e&&!("Z"in a)&&(a.Z=0),"p"in a&&(a.H=a.H%12+12*a.p),void 0===a.m&&(a.m="q"in a?a.q:0),"V"in a){if(a.V<1||a.V>53)return null;"w"in a||(a.w=1),"Z"in a?(i=(r=Ki(Ji(a.y,0,1))).getUTCDay(),r=i>4||0===i?$i.ceil(r):$i(r),r=Ti.offset(r,7*(a.V-1)),a.y=r.getUTCFullYear(),a.m=r.getUTCMonth(),a.d=r.getUTCDate()+(a.w+6)%7):(i=(r=Zi(Ji(a.y,0,1))).getDay(),r=i>4||0===i?Si.ceil(r):Si(r),r=Mi.offset(r,7*(a.V-1)),a.y=r.getFullYear(),a.m=r.getMonth(),a.d=r.getDate()+(a.w+6)%7)}else("W"in a||"U"in a)&&("w"in a||(a.w="u"in a?a.u%7:"W"in a?1:0),i="Z"in a?Ki(Ji(a.y,0,1)).getUTCDay():Zi(Ji(a.y,0,1)).getDay(),a.m=0,a.d="W"in a?(a.w+6)%7+7*a.W-(i+5)%7:a.w+7*a.U-(i+6)%7);return"Z"in a?(a.H+=a.Z/100|0,a.M+=a.Z%100,Ki(a)):Zi(a)}}function k(t,e,n,r){for(var i,a,l=0,o=e.length,s=n.length;l<o;){if(r>=s)return-1;if(37===(i=e.charCodeAt(l++))){if(i=e.charAt(l++),!(a=w[i in na?e.charAt(l++):i])||(r=a(t,n,r))<0)return-1}else if(i!=n.charCodeAt(r++))return-1}return r}return x.x=b(n,x),x.X=b(r,x),x.c=b(e,x),A.x=b(n,A),A.X=b(r,A),A.c=b(e,A),{format:function(t){var e=b(t+="",x);return e.toString=function(){return t},e},parse:function(t){var e=D(t+="",!1);return e.toString=function(){return t},e},utcFormat:function(t){var e=b(t+="",A);return e.toString=function(){return t},e},utcParse:function(t){var e=D(t+="",!0);return e.toString=function(){return t},e}}}(t),ea=ta.format,ta.parse,ta.utcFormat,ta.utcParse}({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});var Dl=new Array(3).concat("fc8d59ffffbf99d594","d7191cfdae61abdda42b83ba","d7191cfdae61ffffbfabdda42b83ba","d53e4ffc8d59fee08be6f59899d5943288bd","d53e4ffc8d59fee08bffffbfe6f59899d5943288bd","d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd","d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd","9e0142d53e4ff46d43fdae61fee08be6f598abdda466c2a53288bd5e4fa2","9e0142d53e4ff46d43fdae61fee08bffffbfe6f598abdda466c2a53288bd5e4fa2").map((function(t){for(var e=t.length/6|0,n=new Array(e),r=0;r<e;)n[r]="#"+t.slice(6*r,6*++r);return n}));function kl(t){return function(){return t}}(t=>{on(t[t.length-1])})(Dl);const Cl=Math.abs,Ml=Math.atan2,Tl=Math.cos,_l=Math.max,El=Math.min,Fl=Math.sin,Sl=Math.sqrt,Bl=1e-12,Nl=Math.PI,Ll=Nl/2,Il=2*Nl;function Vl(t){return t>=1?Ll:t<=-1?-Ll:Math.asin(t)}function Ol(t){let e=3;return t.digits=function(n){if(!arguments.length)return e;if(null==n)e=null;else{const t=Math.floor(n);if(!(t>=0))throw new RangeError(`invalid digits: ${n}`);e=t}return t},()=>new Nr(e)}function Pl(t){return t.innerRadius}function $l(t){return t.outerRadius}function Yl(t){return t.startAngle}function Rl(t){return t.endAngle}function zl(t){return t&&t.padAngle}function Ul(t,e,n,r,i,a,l){var o=t-n,s=e-r,u=(l?a:-a)/Sl(o*o+s*s),f=u*s,c=-u*o,h=t+f,d=e+c,g=n+f,p=r+c,y=(h+g)/2,m=(d+p)/2,v=g-h,x=p-d,A=v*v+x*x,w=i-a,b=h*p-g*d,D=(x<0?-1:1)*Sl(_l(0,w*w*A-b*b)),k=(b*x-v*D)/A,C=(-b*v-x*D)/A,M=(b*x+v*D)/A,T=(-b*v+x*D)/A,_=k-y,E=C-m,F=M-y,S=T-m;return _*_+E*E>F*F+S*S&&(k=M,C=T),{cx:k,cy:C,x01:-f,y01:-c,x11:k*(i/w-1),y11:C*(i/w-1)}}function Hl(){var t=Pl,e=$l,n=kl(0),r=null,i=Yl,a=Rl,l=zl,o=null,s=Ol(u);function u(){var u,f,c=+t.apply(this,arguments),h=+e.apply(this,arguments),d=i.apply(this,arguments)-Ll,g=a.apply(this,arguments)-Ll,p=Cl(g-d),y=g>d;if(o||(o=u=s()),h<c&&(f=h,h=c,c=f),h>Bl)if(p>Il-Bl)o.moveTo(h*Tl(d),h*Fl(d)),o.arc(0,0,h,d,g,!y),c>Bl&&(o.moveTo(c*Tl(g),c*Fl(g)),o.arc(0,0,c,g,d,y));else{var m,v,x=d,A=g,w=d,b=g,D=p,k=p,C=l.apply(this,arguments)/2,M=C>Bl&&(r?+r.apply(this,arguments):Sl(c*c+h*h)),T=El(Cl(h-c)/2,+n.apply(this,arguments)),_=T,E=T;if(M>Bl){var F=Vl(M/c*Fl(C)),S=Vl(M/h*Fl(C));(D-=2*F)>Bl?(w+=F*=y?1:-1,b-=F):(D=0,w=b=(d+g)/2),(k-=2*S)>Bl?(x+=S*=y?1:-1,A-=S):(k=0,x=A=(d+g)/2)}var B=h*Tl(x),N=h*Fl(x),L=c*Tl(b),I=c*Fl(b);if(T>Bl){var V,O=h*Tl(A),P=h*Fl(A),$=c*Tl(w),Y=c*Fl(w);if(p<Nl)if(V=function(t,e,n,r,i,a,l,o){var s=n-t,u=r-e,f=l-i,c=o-a,h=c*s-f*u;if(!(h*h<Bl))return[t+(h=(f*(e-a)-c*(t-i))/h)*s,e+h*u]}(B,N,$,Y,O,P,L,I)){var R=B-V[0],z=N-V[1],U=O-V[0],H=P-V[1],X=1/Fl(function(t){return t>1?0:t<-1?Nl:Math.acos(t)}((R*U+z*H)/(Sl(R*R+z*z)*Sl(U*U+H*H)))/2),W=Sl(V[0]*V[0]+V[1]*V[1]);_=El(T,(c-W)/(X-1)),E=El(T,(h-W)/(X+1))}else _=E=0}k>Bl?E>Bl?(m=Ul($,Y,B,N,h,E,y),v=Ul(O,P,L,I,h,E,y),o.moveTo(m.cx+m.x01,m.cy+m.y01),E<T?o.arc(m.cx,m.cy,E,Ml(m.y01,m.x01),Ml(v.y01,v.x01),!y):(o.arc(m.cx,m.cy,E,Ml(m.y01,m.x01),Ml(m.y11,m.x11),!y),o.arc(0,0,h,Ml(m.cy+m.y11,m.cx+m.x11),Ml(v.cy+v.y11,v.cx+v.x11),!y),o.arc(v.cx,v.cy,E,Ml(v.y11,v.x11),Ml(v.y01,v.x01),!y))):(o.moveTo(B,N),o.arc(0,0,h,x,A,!y)):o.moveTo(B,N),c>Bl&&D>Bl?_>Bl?(m=Ul(L,I,O,P,c,-_,y),v=Ul(B,N,$,Y,c,-_,y),o.lineTo(m.cx+m.x01,m.cy+m.y01),_<T?o.arc(m.cx,m.cy,_,Ml(m.y01,m.x01),Ml(v.y01,v.x01),!y):(o.arc(m.cx,m.cy,_,Ml(m.y01,m.x01),Ml(m.y11,m.x11),!y),o.arc(0,0,c,Ml(m.cy+m.y11,m.cx+m.x11),Ml(v.cy+v.y11,v.cx+v.x11),y),o.arc(v.cx,v.cy,_,Ml(v.y11,v.x11),Ml(v.y01,v.x01),!y))):o.arc(0,0,c,b,w,y):o.lineTo(L,I)}else o.moveTo(0,0);if(o.closePath(),u)return o=null,u+""||null}return u.centroid=function(){var n=(+t.apply(this,arguments)+ +e.apply(this,arguments))/2,r=(+i.apply(this,arguments)+ +a.apply(this,arguments))/2-Nl/2;return[Tl(r)*n,Fl(r)*n]},u.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:kl(+e),u):t},u.outerRadius=function(t){return arguments.length?(e="function"==typeof t?t:kl(+t),u):e},u.cornerRadius=function(t){return arguments.length?(n="function"==typeof t?t:kl(+t),u):n},u.padRadius=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:kl(+t),u):r},u.startAngle=function(t){return arguments.length?(i="function"==typeof t?t:kl(+t),u):i},u.endAngle=function(t){return arguments.length?(a="function"==typeof t?t:kl(+t),u):a},u.padAngle=function(t){return arguments.length?(l="function"==typeof t?t:kl(+t),u):l},u.context=function(t){return arguments.length?(o=null==t?null:t,u):o},u}function Xl(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function Wl(t){this._context=t}function jl(t){return new Wl(t)}function ql(t){return t[0]}function Gl(t){return t[1]}function Ql(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function Zl(t){return t}function Kl(t,e,n){this.k=t,this.x=e,this.y=n}var Jl,to,eo;Wl.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||0!==this._line&&1===this._point)&&this._context.closePath(),this._line=1-this._line},point:function(t,e){switch(t=+t,e=+e,this._point){case 0:this._point=1,this._line?this._context.lineTo(t,e):this._context.moveTo(t,e);break;case 1:this._point=2;default:this._context.lineTo(t,e)}}},Kl.prototype={constructor:Kl,scale:function(t){return 1===t?this:new Kl(this.k*t,this.x,this.y)},translate:function(t,e){return 0===t&0===e?this:new Kl(this.k,this.x+this.k*t,this.y+this.k*e)},apply:function(t){return[t[0]*this.k+this.x,t[1]*this.k+this.y]},applyX:function(t){return t*this.k+this.x},applyY:function(t){return t*this.k+this.y},invert:function(t){return[(t[0]-this.x)/this.k,(t[1]-this.y)/this.k]},invertX:function(t){return(t-this.x)/this.k},invertY:function(t){return(t-this.y)/this.k},rescaleX:function(t){return t.copy().domain(t.range().map(this.invertX,this).map(t.invert,t))},rescaleY:function(t){return t.copy().domain(t.range().map(this.invertY,this).map(t.invert,t))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}},Kl.prototype,function(t){t[t.Tag=0]="Tag",t[t.Frontmatter=1]="Frontmatter",t[t.Wiki=2]="Wiki",t[t.WikiLink=3]="WikiLink",t[t.WikiDisplay=4]="WikiDisplay",t[t.Text=5]="Text",t[t.dvField=6]="dvField",t[t.Table=7]="Table",t[t.FileMeta=8]="FileMeta",t[t.Task=9]="Task",t[t.TaskDone=10]="TaskDone",t[t.TaskNotDone=11]="TaskNotDone"}(Jl||(Jl={})),function(t){t[t.Line=0]="Line",t[t.Bar=1]="Bar",t[t.Pie=2]="Pie",t[t.Radar=3]="Radar",t[t.Summary=4]="Summary",t[t.Table=5]="Table",t[t.Month=6]="Month",t[t.Heatmap=7]="Heatmap",t[t.Bullet=8]="Bullet",t[t.Unknown=9]="Unknown"}(to||(to={})),function(t){t[t.Number=0]="Number",t[t.Int=1]="Int",t[t.Date=2]="Date",t[t.Time=3]="Time",t[t.DateTime=4]="DateTime",t[t.String=5]="String"}(eo||(eo={}));class no{constructor(t,e){this.date=t,this.value=e}}class ro{constructor(t,e,n){if(this.type=e,this.target=n,this.separator="",this.id=t,this.accessor=-1,this.accessor1=-1,this.accessor2=-1,this.valueType=eo.Number,this.usedAsXDataset=!1,this.numTargets=0,e===Jl.Table){let t,e=new RegExp("\\[(?<accessor>[0-9]+)\\]\\[(?<accessor1>[0-9]+)\\](\\[(?<accessor2>[0-9]+)\\])?","gm");for(;t=e.exec(n);)if(void 0!==t.groups.accessor){let r=parseFloat(t.groups.accessor);if(Number.isNumber(r)&&void 0!==t.groups.accessor1){let i=parseFloat(t.groups.accessor1);if(Number.isNumber(i)){let a;void 0!==t.groups.accessor2&&(a=parseFloat(t.groups.accessor2)),this.accessor=r,this.accessor1=i,Number.isNumber(a)&&(this.accessor2=a),this.parentTarget=n.replace(e,"")}break}}}else{let t,e=new RegExp("\\[(?<accessor>[0-9]+)\\]","gm");for(;t=e.exec(n);)if(void 0!==t.groups.accessor){let r=parseFloat(t.groups.accessor);Number.isNumber(r)&&(this.accessor=r,this.parentTarget=n.replace(e,""));break}}}equalTo(t){return this.type===t.type&&this.target===t.target}getType(){return this.type}getTarget(){return this.target}getParentTarget(){return this.parentTarget}getId(){return this.id}getAccessor(t=0){switch(t){case 0:return this.accessor;case 1:return this.accessor1;case 2:return this.accessor2}return null}setSeparator(t){this.separator=t}getSeparator(t=!1){return""===this.separator?t?",":"/":this.separator}addNumTargets(t=1){this.numTargets=this.numTargets+t}getNumTargets(){return this.numTargets}}class io{constructor(t,e){this.currentIndex=0,this.name="untitled",this.query=e,this.values=[],this.parent=t,this.id=-1,this.yMin=null,this.yMax=null,this.startDate=null,this.endDate=null,this.numTargets=0,this.lineInfo=null,this.barInfo=null,this.isTmpDataset=!1,this.valueType=null==e?void 0:e.valueType;for(let e=0;e<t.getDates().length;e++)this.values.push(null)}cloneToTmpDataset(){if(!this.isTmpDataset){let t=new io(this.parent,null);return t.name="tmp",t.values=[...this.values],t.yMin=this.yMin,t.yMax=this.yMax,t.startDate=this.startDate.clone(),t.endDate=this.endDate.clone(),t.numTargets=this.numTargets,t.isTmpDataset=!0,t.valueType=this.valueType,t}return this}getName(){return this.name}setName(t){this.name=t}getId(){return this.id}setId(t){this.id=t}addNumTargets(t){this.numTargets=this.numTargets+t}getNumTargets(){return this.numTargets}getValue(t,e=0){let n=this.parent.getIndexOfDate(t)+Math.floor(e);return n>=0&&n<this.values.length?this.values[n]:null}setValue(t,e){let n=this.parent.getIndexOfDate(t);n>=0&&n<this.values.length&&(this.values[n]=e,(null===this.yMin||e<this.yMin)&&(this.yMin=e),(null===this.yMax||e>this.yMax)&&(this.yMax=e),(null===this.startDate||t<this.startDate)&&(this.startDate=t.clone()),(null===this.endDate||t>this.endDate)&&(this.endDate=t.clone()))}recalculateMinMax(){this.yMin=Math.min(...this.values),this.yMax=Math.max(...this.values)}getYMin(){return this.yMin}getYMax(){return this.yMax}getStartDate(){return this.startDate}getEndDate(){return this.endDate}shift(t,e){let n=!1;for(let r=0;r<this.values.length;r++)null!==this.values[r]&&(null===e||this.values[r]>=e)&&(this.values[r]=this.values[r]+t,n=!0);n&&(this.yMin=this.yMin+t,this.yMax=this.yMax+t)}setPenalty(t){for(let e=0;e<this.values.length;e++)null===this.values[e]&&(this.values[e]=t,t<this.yMin&&(this.yMin=t),t>this.yMax&&(this.yMax=t))}getQuery(){return this.query}accumulateValues(){let t=0;for(let e=0;e<this.values.length;e++)null!==this.values[e]&&(t+=this.values[e]),this.values[e]=t,t<this.yMin&&(this.yMin=t),t>this.yMax&&(this.yMax=t)}shiftByDataset(t){for(let e=0;e<this.values.length;e++){let n=this.values[e];null!==t.values[e]&&null!==n?n+=t.values[e]:null!==t.values[e]&&(n=t.values[e]),this.values[e]=n,n<this.yMin&&(this.yMin=n),n>this.yMax&&(this.yMax=n)}}getValues(){return this.values}getLength(){return this.values.length}getLengthNotNull(){let t=0;for(let e=0;e<this.values.length;e++)null!==this.values[e]&&t++;return t}next(){if(this.currentIndex<this.values.length){let t=this.currentIndex++;return{done:!1,value:new no(this.parent.getDates()[t],this.values[t])}}return this.currentIndex=0,{done:!0,value:null}}[Symbol.iterator](){return this}}class ao{constructor(t,e){this.currentIndex=0,this.dates=[],this.datasets=[];const n=t.creationData().format.toString();for(let r=t.clone();r<=e;r.add(1,"days")){let t=window.moment(r.format(n),n,!0);this.dates.push(t)}}createDataset(t,e){let n=new io(this,t);return n.setId(t.getId()),e&&n.setName(e.datasetName[t.getId()]),this.datasets.push(n),n}getIndexOfDate(t){const e=t.creationData().format.toString();for(let n=0;n<this.dates.length;n++)if(this.dates[n].format(e)===t.format(e))return n;return-1}getDatasetByQuery(t){for(let e of this.datasets)if(e.getQuery().equalTo(t))return e;return null}getDatasetById(t){for(let e of this.datasets)if(e.getId()===t)return e;return null}getXDatasetIds(){let t=[];for(let e of this.datasets)if(e.getQuery().usedAsXDataset){let n=e.getQuery().getId();t.includes(n)||-1===n||t.push(n)}return t}getDates(){return this.dates}getNames(){let t=[];for(let e of this.datasets)t.push(e.getName());return t}next(){return this.currentIndex<this.datasets.length?{done:!1,value:this.datasets[this.currentIndex++]}:(this.currentIndex=0,{done:!0,value:null})}[Symbol.iterator](){return this}}class lo{constructor(t){this.queries=t,this.xDataset=[],this.folder="/",this.file=[],this.specifiedFilesOnly=!1,this.fileContainsLinkedFiles=[],this.fileMultiplierAfterLink="",this.dateFormat="YYYY-MM-DD",this.dateFormatPrefix="",this.dateFormatSuffix="",this.startDate=null,this.endDate=null,this.datasetName=[],this.constValue=[1],this.ignoreAttachedValue=[],this.ignoreZeroValue=[],this.accum=[],this.stack=!1,this.penalty=[],this.valueShift=[],this.shiftOnlyValueLargerThan=[],this.valueType=[],this.textValueMap={},this.dataAreaSize=new mo(300,300),this.aspectRatio=new vo(1,1),this.margin=new xo(10,10,10,10),this.fixedScale=1,this.fitPanelWidth=!1,this.output=[],this.line=[],this.bar=[],this.pie=[],this.summary=[],this.month=[],this.heatmap=[],this.bullet=[],this.customDataset=[],this.datasets=null}getQueryById(t){for(let e of this.queries)if(e.getId()===t)return e}}class oo{constructor(){this.id=-1,this.name="",this.xData=[],this.yData=[]}}class so{constructor(){this.title="",this.xAxisLabel="Date",this.xAxisColor="",this.xAxisLabelColor="",this.yAxisLabel=[],this.yAxisColor=[],this.yAxisLabelColor=[],this.yAxisUnit=[],this.xAxisTickInterval=null,this.yAxisTickInterval=[],this.xAxisTickLabelFormat=null,this.yAxisTickLabelFormat=[],this.yMin=[],this.yMax=[],this.reverseYAxis=[],this.allowInspectData=!0,this.showLegend=!1,this.legendPosition="",this.legendOrientation="",this.legendBgColor="",this.legendBorderColor=""}GetGraphType(){return to.Unknown}}class uo extends so{constructor(){super(),this.lineColor=[],this.lineWidth=[],this.showLine=[],this.showPoint=[],this.pointColor=[],this.pointBorderColor=[],this.pointBorderWidth=[],this.pointSize=[],this.fillGap=[],this.yAxisLocation=[]}GetGraphType(){return to.Line}}class fo extends so{constructor(){super(),this.barColor=[],this.yAxisLocation=[]}GetGraphType(){return to.Bar}}class co{constructor(){this.title="",this.data=[],this.dataColor=[],this.dataName=[],this.label=[],this.hideLabelLessThan=.03,this.extLabel=[],this.showExtLabelOnlyIfNoLabel=!1,this.ratioInnerRadius=0,this.showLegend=!1,this.legendPosition="",this.legendOrientation="",this.legendBgColor="",this.legendBorderColor=""}GetGraphType(){return to.Pie}}class ho{constructor(){this.template="",this.style=""}GetGraphType(){return to.Summary}}class go{constructor(){this.mode="circle",this.dataset=[],this.startWeekOn="Sun",this.threshold=[],this.yMin=[],this.yMax=[],this.color=null,this.dimNotInMonth=!0,this.initMonth="",this.showSelectedValue=!0,this.headerYearColor=null,this.headerMonthColor=null,this.dividingLineColor=null,this.showCircle=!0,this.showStreak=!0,this.showTodayRing=!0,this.showSelectedRing=!0,this.circleColor=null,this.circleColorByValue=!1,this.todayRingColor="",this.selectedRingColor="firebrick",this.showAnnotation=!0,this.annotation=[],this.showAnnotationOfAllTargets=!0,this.selectedDate="",this.selectedDataset=null}GetGraphType(){return to.Month}}class po{constructor(){this.dataset="0",this.startWeekOn="Sun",this.orientation="vertical",this.yMin=null,this.yMax=null,this.color=null}GetGraphType(){return to.Heatmap}}class yo{constructor(){this.title="",this.dataset="0",this.orientation="horizontal",this.value="",this.valueUnit="",this.valueColor="#69b3a2",this.range=[],this.rangeColor=[],this.showMarker=!1,this.markerValue=0,this.markerColor=""}GetGraphType(){return to.Bullet}}class mo{constructor(t,e){this.width=t,this.height=e}}class vo{constructor(t,e){this.x=t,this.y=e}recalculateSize(t){let e=this.x/this.y,n=parseFloat((t.width*e).toFixed(2));return new mo(n,t.height)}}class xo{constructor(t,e,n,r){this.top=t,this.right=e,this.bottom=n,this.left=r}}class Ao{constructor(t){if(this.translateX=0,this.translateY=0,"string"==typeof t){let e=t.match(/translate\(\s*(?<x>[\d\.\/-]+)\s*,\s*(?<y>[\d\.\/-]+)\s*\)/).groups;e&&(this.translateX=parseFloat(e.x),this.translateY=parseFloat(e.y))}}}class wo{constructor(t,e){this.filePath=t,this.tableIndex=e,this.xDataset=null,this.yDatasets=[]}}class bo{constructor(){this.fileTotal=0,this.fileAvailable=0,this.fileOutOfDateRange=0,this.fileNotInFormat=0,this.errorMessage="",this.minDate=window.moment(""),this.maxDate=window.moment(""),this.gotAnyValidXValue=!1,this.gotAnyValidYValue=!1}}const Do=function(){const t=["HH","H","hh","h"],e=["mm","m"],n=["ss","s",""];let r=[];for(let i of t)for(let t of e)for(let e of n){let n=`${i}:${t}`;""!==e&&(n+=`:${e}`),i.contains("h")&&(n+=" a"),r.push(n)}return r}();function ko(t,e,n){if(!e&&!n)return t;let r=t;if(r.startsWith("^")&&(r=r.slice(1)),e){let t=new RegExp("^("+e+")","gm");t.test(r)&&(r=r.replace(t,""))}if(n){let t=new RegExp("("+n+")$","gm");t.test(r)&&(r=r.replace(t,""))}return r}function Co(t,e){let n=e;t.length>4&&t.startsWith("[[")&&t.endsWith("]]")&&(t=t.substring(2,t.length-2)),"iso-8601"===e.toLowerCase()&&(n=window.moment.ISO_8601);let r=window.moment(t,n,!0);return r=r.startOf("day"),r}function Mo(t,e,n=!0){if(!t||!e||0===e.length)return[null,t];let r=null;const i="^(?<value>[0-9]+)("+e.join("|")+")$",a=new RegExp(i,"gm");let l=a.exec(t);return l&&void 0!==l.groups&&void 0!==l.groups.value&&(r=parseFloat(l.groups.value),Number.isNumber(r)&&!Number.isNaN(r))?(n&&(t=t.replace(a,"")),[r,t]):[null,t]}function To(t){if(!t)return null;let e=window.moment.duration(0),n=!1,r=!1;t.startsWith("+")&&(r=!1,t=t.substring(1)),t.startsWith("-")&&(r=!0,t=t.substring(1));let i=null;[i,t]=Mo(t,["year","years","Y","y"]),null!==i&&(r&&(i*=-1),e.add(i,"years"),n=!0);let a=null;[a,t]=Mo(t,["month","months","M"]),null!==a&&(r&&(a*=-1),e.add(a,"months"),n=!0);let l=null;[l,t]=Mo(t,["week","weeks","W","w"]),null!==l&&(r&&(l*=-1),e.add(l,"weeks"),n=!0);let o=null;[o,t]=Mo(t,["day","days","D","d"]),null!==o&&(r&&(o*=-1),e.add(o,"days"),n=!0);let s=null;[s,t]=Mo(t,["hour","hours","H","h"]),null!==s&&(r&&(s*=-1),e.add(s,"hours"),n=!0);let u=null;[u,t]=Mo(t,["minute","minutes","m"]),null!==u&&(r&&(u*=-1),e.add(u,"minutes"),n=!0);let f=null;return[f,t]=Mo(t,["second","seconds","S","s"]),null!==f&&(r&&(f*=-1),e.add(f,"seconds"),n=!0),n?e:null}function _o(t,e){let n=null,r=To(t);return r&&window.moment.isDuration(r)&&(n=So(e),n=n.add(r),n&&n.isValid()),n}function Eo(t,e){return null==t?null:"iso-8601"===e.toLowerCase()?t.format():t.format(e)}function Fo(t,e){return Co(Eo(window.moment(t),e),e)}function So(t){return Co(Eo(window.moment(),t),t)}function Bo(t,e){for(var n=(e=e.replace(/^\./,"")).split("."),r=0,i=n.length;r<i;++r){var a=n[r];if(!(a in t))return null;t=t[a]}return"string"==typeof t||Array.isArray(t)?t:"number"==typeof t||"boolean"==typeof t?t.toString():null}function No(t,e){const n=Array.from(t),r=n.findIndex((t=>t!==e)),i=n.reverse().findIndex((t=>t!==e));return-1===r&&-1===i?t:t.substring(r,t.length-i)}function Lo(t){if(null===t)return null;let e=new RegExp('<img[^>]*?alt\\s*=\\s*[""\']?(?<emoji>[^\'"" >]+?)[ \'""][^>]*?>',"g");return t.replace(e,((...t)=>{let e=t[t.length-1];return e&&e.emoji?e.emoji.trim():""}))}function Io(t,e=null){let n=null,r=eo.Number;if("string"==typeof t)if(t.includes(":")){let e=!1;t.startsWith("-")&&(e=!0,t=t.substring(1));let i=window.moment(t,Do,!0);i.isValid()&&(n=i.diff(window.moment("00:00","HH:mm",!0),"seconds"),e&&(n*=-1),r=eo.Time)}else if(e){const r=Object.keys(e);for(let n of r)if("string"==typeof n){let r=new RegExp(n,"gm");if(r.test(t)&&Number.isNumber(e[n])){let i=e[n].toString();t=t.replace(r,i);break}}n=parseFloat(t),Number.isNaN(n)&&(n=null)}else n=parseFloat(t),Number.isNaN(n)&&(n=null);else"number"==typeof t&&(n=t);return{type:r,value:n}}function Vo(t,e="",n=""){var r=ee("body").append("svg");let i=r.append("text").text(t).attr("x",-99999).attr("y",-99999);e&&i.attr("class",e),n&&i.attr("transform","rotate("+n+")");var a=r.node().getBBox();return r.remove(),{width:a.width,height:a.height}}function Oo(t,e,n){let r=(0|parseFloat(t.attr("width")))+e,i=(0|parseFloat(t.attr("height")))+n;t.attr("width",r),t.attr("height",i)}function Po(t,e,n){let r=new Ao(t.attr("transform"));t.attr("transform","translate("+(r.translateX+e)+","+(r.translateY+n)+")")}function $o(t){return t=(t=(t=t.replace(/(^\\s\*)|(\\s\*$)/gi,"")).replace(/\[ \]{2,}/gi," ")).replace(/\\n /,"\\n")}class Yo{static get version(){return"1.3.8"}static toString(){return"JavaScript Expression Parser (JSEP) v"+Yo.version}static addUnaryOp(t){return Yo.max_unop_len=Math.max(t.length,Yo.max_unop_len),Yo.unary_ops[t]=1,Yo}static addBinaryOp(t,e,n){return Yo.max_binop_len=Math.max(t.length,Yo.max_binop_len),Yo.binary_ops[t]=e,n?Yo.right_associative.add(t):Yo.right_associative.delete(t),Yo}static addIdentifierChar(t){return Yo.additional_identifier_chars.add(t),Yo}static addLiteral(t,e){return Yo.literals[t]=e,Yo}static removeUnaryOp(t){return delete Yo.unary_ops[t],t.length===Yo.max_unop_len&&(Yo.max_unop_len=Yo.getMaxKeyLen(Yo.unary_ops)),Yo}static removeAllUnaryOps(){return Yo.unary_ops={},Yo.max_unop_len=0,Yo}static removeIdentifierChar(t){return Yo.additional_identifier_chars.delete(t),Yo}static removeBinaryOp(t){return delete Yo.binary_ops[t],t.length===Yo.max_binop_len&&(Yo.max_binop_len=Yo.getMaxKeyLen(Yo.binary_ops)),Yo.right_associative.delete(t),Yo}static removeAllBinaryOps(){return Yo.binary_ops={},Yo.max_binop_len=0,Yo}static removeLiteral(t){return delete Yo.literals[t],Yo}static removeAllLiterals(){return Yo.literals={},Yo}get char(){return this.expr.charAt(this.index)}get code(){return this.expr.charCodeAt(this.index)}constructor(t){this.expr=t,this.index=0}static parse(t){return new Yo(t).parse()}static getMaxKeyLen(t){return Math.max(0,...Object.keys(t).map((t=>t.length)))}static isDecimalDigit(t){return t>=48&&t<=57}static binaryPrecedence(t){return Yo.binary_ops[t]||0}static isIdentifierStart(t){return t>=65&&t<=90||t>=97&&t<=122||t>=128&&!Yo.binary_ops[String.fromCharCode(t)]||Yo.additional_identifier_chars.has(String.fromCharCode(t))}static isIdentifierPart(t){return Yo.isIdentifierStart(t)||Yo.isDecimalDigit(t)}throwError(t){const e=new Error(t+" at character "+this.index);throw e.index=this.index,e.description=t,e}runHook(t,e){if(Yo.hooks[t]){const n={context:this,node:e};return Yo.hooks.run(t,n),n.node}return e}searchHook(t){if(Yo.hooks[t]){const e={context:this};return Yo.hooks[t].find((function(t){return t.call(e.context,e),e.node})),e.node}}gobbleSpaces(){let t=this.code;for(;t===Yo.SPACE_CODE||t===Yo.TAB_CODE||t===Yo.LF_CODE||t===Yo.CR_CODE;)t=this.expr.charCodeAt(++this.index);this.runHook("gobble-spaces")}parse(){this.runHook("before-all");const t=this.gobbleExpressions(),e=1===t.length?t[0]:{type:Yo.COMPOUND,body:t};return this.runHook("after-all",e)}gobbleExpressions(t){let e,n,r=[];for(;this.index<this.expr.length;)if(e=this.code,e===Yo.SEMCOL_CODE||e===Yo.COMMA_CODE)this.index++;else if(n=this.gobbleExpression())r.push(n);else if(this.index<this.expr.length){if(e===t)break;this.throwError('Unexpected "'+this.char+'"')}return r}gobbleExpression(){const t=this.searchHook("gobble-expression")||this.gobbleBinaryExpression();return this.gobbleSpaces(),this.runHook("after-expression",t)}gobbleBinaryOp(){this.gobbleSpaces();let t=this.expr.substr(this.index,Yo.max_binop_len),e=t.length;for(;e>0;){if(Yo.binary_ops.hasOwnProperty(t)&&(!Yo.isIdentifierStart(this.code)||this.index+t.length<this.expr.length&&!Yo.isIdentifierPart(this.expr.charCodeAt(this.index+t.length))))return this.index+=e,t;t=t.substr(0,--e)}return!1}gobbleBinaryExpression(){let t,e,n,r,i,a,l,o,s;if(a=this.gobbleToken(),!a)return a;if(e=this.gobbleBinaryOp(),!e)return a;for(i={value:e,prec:Yo.binaryPrecedence(e),right_a:Yo.right_associative.has(e)},l=this.gobbleToken(),l||this.throwError("Expected expression after "+e),r=[a,i,l];e=this.gobbleBinaryOp();){if(n=Yo.binaryPrecedence(e),0===n){this.index-=e.length;break}i={value:e,prec:n,right_a:Yo.right_associative.has(e)},s=e;const o=t=>i.right_a&&t.right_a?n>t.prec:n<=t.prec;for(;r.length>2&&o(r[r.length-2]);)l=r.pop(),e=r.pop().value,a=r.pop(),t={type:Yo.BINARY_EXP,operator:e,left:a,right:l},r.push(t);t=this.gobbleToken(),t||this.throwError("Expected expression after "+s),r.push(i,t)}for(o=r.length-1,t=r[o];o>1;)t={type:Yo.BINARY_EXP,operator:r[o-1].value,left:r[o-2],right:t},o-=2;return t}gobbleToken(){let t,e,n,r;if(this.gobbleSpaces(),r=this.searchHook("gobble-token"),r)return this.runHook("after-token",r);if(t=this.code,Yo.isDecimalDigit(t)||t===Yo.PERIOD_CODE)return this.gobbleNumericLiteral();if(t===Yo.SQUOTE_CODE||t===Yo.DQUOTE_CODE)r=this.gobbleStringLiteral();else if(t===Yo.OBRACK_CODE)r=this.gobbleArray();else{for(e=this.expr.substr(this.index,Yo.max_unop_len),n=e.length;n>0;){if(Yo.unary_ops.hasOwnProperty(e)&&(!Yo.isIdentifierStart(this.code)||this.index+e.length<this.expr.length&&!Yo.isIdentifierPart(this.expr.charCodeAt(this.index+e.length)))){this.index+=n;const t=this.gobbleToken();return t||this.throwError("missing unaryOp argument"),this.runHook("after-token",{type:Yo.UNARY_EXP,operator:e,argument:t,prefix:!0})}e=e.substr(0,--n)}Yo.isIdentifierStart(t)?(r=this.gobbleIdentifier(),Yo.literals.hasOwnProperty(r.name)?r={type:Yo.LITERAL,value:Yo.literals[r.name],raw:r.name}:r.name===Yo.this_str&&(r={type:Yo.THIS_EXP})):t===Yo.OPAREN_CODE&&(r=this.gobbleGroup())}return r?(r=this.gobbleTokenProperty(r),this.runHook("after-token",r)):this.runHook("after-token",!1)}gobbleTokenProperty(t){this.gobbleSpaces();let e=this.code;for(;e===Yo.PERIOD_CODE||e===Yo.OBRACK_CODE||e===Yo.OPAREN_CODE||e===Yo.QUMARK_CODE;){let n;if(e===Yo.QUMARK_CODE){if(this.expr.charCodeAt(this.index+1)!==Yo.PERIOD_CODE)break;n=!0,this.index+=2,this.gobbleSpaces(),e=this.code}this.index++,e===Yo.OBRACK_CODE?(t={type:Yo.MEMBER_EXP,computed:!0,object:t,property:this.gobbleExpression()},this.gobbleSpaces(),e=this.code,e!==Yo.CBRACK_CODE&&this.throwError("Unclosed ["),this.index++):e===Yo.OPAREN_CODE?t={type:Yo.CALL_EXP,arguments:this.gobbleArguments(Yo.CPAREN_CODE),callee:t}:(e===Yo.PERIOD_CODE||n)&&(n&&this.index--,this.gobbleSpaces(),t={type:Yo.MEMBER_EXP,computed:!1,object:t,property:this.gobbleIdentifier()}),n&&(t.optional=!0),this.gobbleSpaces(),e=this.code}return t}gobbleNumericLiteral(){let t,e,n="";for(;Yo.isDecimalDigit(this.code);)n+=this.expr.charAt(this.index++);if(this.code===Yo.PERIOD_CODE)for(n+=this.expr.charAt(this.index++);Yo.isDecimalDigit(this.code);)n+=this.expr.charAt(this.index++);if(t=this.char,"e"===t||"E"===t){for(n+=this.expr.charAt(this.index++),t=this.char,"+"!==t&&"-"!==t||(n+=this.expr.charAt(this.index++));Yo.isDecimalDigit(this.code);)n+=this.expr.charAt(this.index++);Yo.isDecimalDigit(this.expr.charCodeAt(this.index-1))||this.throwError("Expected exponent ("+n+this.char+")")}return e=this.code,Yo.isIdentifierStart(e)?this.throwError("Variable names cannot start with a number ("+n+this.char+")"):(e===Yo.PERIOD_CODE||1===n.length&&n.charCodeAt(0)===Yo.PERIOD_CODE)&&this.throwError("Unexpected period"),{type:Yo.LITERAL,value:parseFloat(n),raw:n}}gobbleStringLiteral(){let t="";const e=this.index,n=this.expr.charAt(this.index++);let r=!1;for(;this.index<this.expr.length;){let e=this.expr.charAt(this.index++);if(e===n){r=!0;break}if("\\"===e)switch(e=this.expr.charAt(this.index++),e){case"n":t+="\n";break;case"r":t+="\r";break;case"t":t+="\t";break;case"b":t+="\b";break;case"f":t+="\f";break;case"v":t+="\v";break;default:t+=e}else t+=e}return r||this.throwError('Unclosed quote after "'+t+'"'),{type:Yo.LITERAL,value:t,raw:this.expr.substring(e,this.index)}}gobbleIdentifier(){let t=this.code,e=this.index;for(Yo.isIdentifierStart(t)?this.index++:this.throwError("Unexpected "+this.char);this.index<this.expr.length&&(t=this.code,Yo.isIdentifierPart(t));)this.index++;return{type:Yo.IDENTIFIER,name:this.expr.slice(e,this.index)}}gobbleArguments(t){const e=[];let n=!1,r=0;for(;this.index<this.expr.length;){this.gobbleSpaces();let i=this.code;if(i===t){n=!0,this.index++,t===Yo.CPAREN_CODE&&r&&r>=e.length&&this.throwError("Unexpected token "+String.fromCharCode(t));break}if(i===Yo.COMMA_CODE){if(this.index++,r++,r!==e.length)if(t===Yo.CPAREN_CODE)this.throwError("Unexpected token ,");else if(t===Yo.CBRACK_CODE)for(let t=e.length;t<r;t++)e.push(null)}else if(e.length!==r&&0!==r)this.throwError("Expected comma");else{const t=this.gobbleExpression();t&&t.type!==Yo.COMPOUND||this.throwError("Expected comma"),e.push(t)}}return n||this.throwError("Expected "+String.fromCharCode(t)),e}gobbleGroup(){this.index++;let t=this.gobbleExpressions(Yo.CPAREN_CODE);if(this.code===Yo.CPAREN_CODE)return this.index++,1===t.length?t[0]:!!t.length&&{type:Yo.SEQUENCE_EXP,expressions:t};this.throwError("Unclosed (")}gobbleArray(){return this.index++,{type:Yo.ARRAY_EXP,elements:this.gobbleArguments(Yo.CBRACK_CODE)}}}const Ro=new class{add(t,e,n){if("string"!=typeof arguments[0])for(let t in arguments[0])this.add(t,arguments[0][t],arguments[1]);else(Array.isArray(t)?t:[t]).forEach((function(t){this[t]=this[t]||[],e&&this[t][n?"unshift":"push"](e)}),this)}run(t,e){this[t]=this[t]||[],this[t].forEach((function(t){t.call(e&&e.context?e.context:e,e)}))}};Object.assign(Yo,{hooks:Ro,plugins:new class{constructor(t){this.jsep=t,this.registered={}}register(...t){t.forEach((t=>{if("object"!=typeof t||!t.name||!t.init)throw new Error("Invalid JSEP plugin format");this.registered[t.name]||(t.init(this.jsep),this.registered[t.name]=t)}))}}(Yo),COMPOUND:"Compound",SEQUENCE_EXP:"SequenceExpression",IDENTIFIER:"Identifier",MEMBER_EXP:"MemberExpression",LITERAL:"Literal",THIS_EXP:"ThisExpression",CALL_EXP:"CallExpression",UNARY_EXP:"UnaryExpression",BINARY_EXP:"BinaryExpression",ARRAY_EXP:"ArrayExpression",TAB_CODE:9,LF_CODE:10,CR_CODE:13,SPACE_CODE:32,PERIOD_CODE:46,COMMA_CODE:44,SQUOTE_CODE:39,DQUOTE_CODE:34,OPAREN_CODE:40,CPAREN_CODE:41,OBRACK_CODE:91,CBRACK_CODE:93,QUMARK_CODE:63,SEMCOL_CODE:59,COLON_CODE:58,unary_ops:{"-":1,"!":1,"~":1,"+":1},binary_ops:{"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10},right_associative:new Set,additional_identifier_chars:new Set(["$","_"]),literals:{true:!0,false:!1,null:null},this_str:"this"}),Yo.max_unop_len=Yo.getMaxKeyLen(Yo.unary_ops),Yo.max_binop_len=Yo.getMaxKeyLen(Yo.binary_ops);const zo=t=>new Yo(t).parse();Object.getOwnPropertyNames(Yo).forEach((t=>{void 0===zo[t]&&"prototype"!==t&&(zo[t]=Yo[t])})),zo.Jsep=Yo;var Uo={name:"ternary",init(t){t.hooks.add("after-expression",(function(e){if(e.node&&this.code===t.QUMARK_CODE){this.index++;const n=e.node,r=this.gobbleExpression();if(r||this.throwError("Expected expression"),this.gobbleSpaces(),this.code===t.COLON_CODE){this.index++;const i=this.gobbleExpression();if(i||this.throwError("Expected expression"),e.node={type:"ConditionalExpression",test:n,consequent:r,alternate:i},n.operator&&t.binary_ops[n.operator]<=.9){let r=n;for(;r.right.operator&&t.binary_ops[r.right.operator]<=.9;)r=r.right;e.node.test=r.right,r.right=e.node,e.node=n}}else this.throwError("Expected :")}}))}};zo.plugins.register(Uo);var Ho,Xo={};function Wo(t){if("number"==typeof t){if(0===t)return!1}else if(t instanceof io&&t.getValues().some((function(t){return 0===t})))return!1;return!0}Ho=Xo,function(){var t={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[+-]/};function e(n){return function(n,r){var i,a,l,o,s,u,f,c,h,d=1,g=n.length,p="";for(a=0;a<g;a++)if("string"==typeof n[a])p+=n[a];else if("object"==typeof n[a]){if((o=n[a]).keys)for(i=r[d],l=0;l<o.keys.length;l++){if(null==i)throw new Error(e('[sprintf] Cannot access property "%s" of undefined value "%s"',o.keys[l],o.keys[l-1]));i=i[o.keys[l]]}else i=o.param_no?r[o.param_no]:r[d++];if(t.not_type.test(o.type)&&t.not_primitive.test(o.type)&&i instanceof Function&&(i=i()),t.numeric_arg.test(o.type)&&"number"!=typeof i&&isNaN(i))throw new TypeError(e("[sprintf] expecting number but found %T",i));switch(t.number.test(o.type)&&(c=i>=0),o.type){case"b":i=parseInt(i,10).toString(2);break;case"c":i=String.fromCharCode(parseInt(i,10));break;case"d":case"i":i=parseInt(i,10);break;case"j":i=JSON.stringify(i,null,o.width?parseInt(o.width):0);break;case"e":i=o.precision?parseFloat(i).toExponential(o.precision):parseFloat(i).toExponential();break;case"f":i=o.precision?parseFloat(i).toFixed(o.precision):parseFloat(i);break;case"g":i=o.precision?String(Number(i.toPrecision(o.precision))):parseFloat(i);break;case"o":i=(parseInt(i,10)>>>0).toString(8);break;case"s":i=String(i),i=o.precision?i.substring(0,o.precision):i;break;case"t":i=String(!!i),i=o.precision?i.substring(0,o.precision):i;break;case"T":i=Object.prototype.toString.call(i).slice(8,-1).toLowerCase(),i=o.precision?i.substring(0,o.precision):i;break;case"u":i=parseInt(i,10)>>>0;break;case"v":i=i.valueOf(),i=o.precision?i.substring(0,o.precision):i;break;case"x":i=(parseInt(i,10)>>>0).toString(16);break;case"X":i=(parseInt(i,10)>>>0).toString(16).toUpperCase()}t.json.test(o.type)?p+=i:(!t.number.test(o.type)||c&&!o.sign?h="":(h=c?"+":"-",i=i.toString().replace(t.sign,"")),u=o.pad_char?"0"===o.pad_char?"0":o.pad_char.charAt(1):" ",f=o.width-(h+i).length,s=o.width&&f>0?u.repeat(f):"",p+=o.align?h+i+s:"0"===u?h+s+i:s+h+i)}return p}(function(e){if(r[e])return r[e];for(var n,i=e,a=[],l=0;i;){if(null!==(n=t.text.exec(i)))a.push(n[0]);else if(null!==(n=t.modulo.exec(i)))a.push("%");else{if(null===(n=t.placeholder.exec(i)))throw new SyntaxError("[sprintf] unexpected placeholder");if(n[2]){l|=1;var o=[],s=n[2],u=[];if(null===(u=t.key.exec(s)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(o.push(u[1]);""!==(s=s.substring(u[0].length));)if(null!==(u=t.key_access.exec(s)))o.push(u[1]);else{if(null===(u=t.index_access.exec(s)))throw new SyntaxError("[sprintf] failed to parse named argument key");o.push(u[1])}n[2]=o}else l|=2;if(3===l)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");a.push({placeholder:n[0],param_no:n[1],keys:n[2],sign:n[3],pad_char:n[4],align:n[5],width:n[6],precision:n[7],type:n[8]})}i=i.substring(n[0].length)}return r[e]=a}(n),arguments)}function n(t,n){return e.apply(null,[t].concat(n||[]))}var r=Object.create(null);Ho.sprintf=e,Ho.vsprintf=n,"undefined"!=typeof window&&(window.sprintf=e,window.vsprintf=n)}();const jo={min:function(t,e){return v(t.getValues())},minDate:function(t,e){let n=v(t.getValues());if(Number.isNumber(n)){let e=Array.from(t);for(let t of e.reverse())if(null!==t.value&&t.value===n)return t.date}return"Error: min not found"},max:function(t,e){return m(t.getValues())},maxDate:function(t,e){let n=m(t.getValues());if(Number.isNumber(n)){let e=Array.from(t);for(let t of e.reverse())if(null!==t.value&&t.value===n)return t.date}return"Error: max not found"},startDate:function(t,e){if(t){let e=t.getStartDate();if(e&&e.isValid())return e}return e.startDate},endDate:function(t,e){if(t){let e=t.getEndDate();if(e&&e.isValid())return e}return e.endDate},sum:function(t,e){return D(t.getValues())},count:function(t,e){return"Error: deprecated function 'count'"},numTargets:function(t,e){return t.getNumTargets()},days:function(t,e){return"Error: deprecated function 'days'"},numDays:function(t,e){return t.getLength()},numDaysHavingData:function(t,e){return t.getLengthNotNull()},maxStreak:function(t,e){let n=0,r=0;for(let e of t)e.value?n++:n=0,n>=r&&(r=n);return r},maxStreakStart:function(t,e){let n=0,r=0,i=null,a=null;if(t)for(let e of t)e.value?(0===n&&(i=e.date),n++):n=0,n>=r&&(r=n,a=i);return a},maxStreakEnd:function(t,e){let n=0,r=0,i=null,a=null;if(t){let e=Array.from(t);for(let t=0;t<e.length;t++){let l=e[t],o=null;t<e.length-1&&(o=e[t+1]),l.value?(n++,(null==o?void 0:o.value)||(i=l.date)):n=0,n>=r&&(r=n,a=i)}}return a},maxBreaks:function(t,e){let n=0,r=0;for(let e of t)e.value?n=0:n++,n>r&&(r=n);return r},maxBreaksStart:function(t,e){let n=0,r=0,i=null,a=null;if(t)for(let e of t)e.value?n=0:(0===n&&(i=e.date),n++),n>=r&&(r=n,a=i);return a},maxBreaksEnd:function(t,e){let n=0,r=0,i=null,a=null;if(t){let e=Array.from(t);for(let t=0;t<e.length;t++){let l=e[t],o=null;t<e.length-1&&(o=e[t+1]),l.value?n=0:(n++,(null==o?void 0:o.value)&&(i=l.date)),n>=r&&(r=n,a=i)}}return a},lastStreak:function(t,e){return"Error: deprecated function 'lastStreak'"},currentStreak:function(t,e){let n=0;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){if(!e[t].value)break;n++}}return n},currentStreakStart:function(t,e){let n=null;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){let r=e[t];if(t<e.length-1&&(n=e[t+1].date),!r.value)break}}return null===n?"Error: absense":n},currentStreakEnd:function(t,e){let n=0,r=null;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){let i=e[t];if(!i.value)break;0===n&&(r=i.date),n++}}return null===r?"Error: absense":r},currentBreaks:function(t,e){let n=0;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){if(e[t].value)break;n++}}return n},currentBreaksStart:function(t,e){let n=null;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){let r=e[t];if(t<e.length-1&&(n=e[t+1].date),r.value)break}}return null===n?"Error: absense":n},currentBreaksEnd:function(t,e){let n=0,r=null;if(t){let e=Array.from(t);for(let t=e.length-1;t>=0;t--){let i=e[t];if(i.value)break;0===n&&(r=i.date),n++}}return null===r?"Error: absense":r},average:function(t,e){let n=t.getLengthNotNull();return Wo(n)?D(t.getValues())/n:"Error: divide by zero in expression"},median:function(t,e){return w(t.getValues())},variance:function(t,e){return function(t,e){let n,r=0,i=0,a=0;for(let e of t)null!=e&&(e=+e)>=e&&(n=e-i,i+=n/++r,a+=n*(e-i));if(r>1)return a/(r-1)}(t.getValues())}},qo={"-":function(t){if("number"==typeof t)return-1*t;if(t instanceof io){let e=t.cloneToTmpDataset();return e.getValues().forEach((function(t,e,n){null!==n[e]&&(n[e]=-1*t)})),e.recalculateMinMax(),e}return"Error: unknown operation for '-'"},"+":function(t){if("number"==typeof t)return t;if(t instanceof io){return t.cloneToTmpDataset()}return"Error: unknown operation for '+'"}},Go={"+":function(t,e){if("number"==typeof t&&"number"==typeof e)return t+e;if("number"==typeof t&&e instanceof io){let n=e.cloneToTmpDataset();return n.getValues().forEach((function(e,n,r){null!==r[n]?r[n]=t+e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof io&&"number"==typeof e){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t+e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof io&&e instanceof io){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t+e.getValues()[n]:r[n]=null})),n.recalculateMinMax(),n}return"Error: unknown operation for '+'"},"-":function(t,e){if("number"==typeof t&&"number"==typeof e)return t-e;if("number"==typeof t&&e instanceof io){let n=e.cloneToTmpDataset();return n.getValues().forEach((function(e,n,r){null!==r[n]?r[n]=t-e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof io&&"number"==typeof e){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t-e:r[n]=null})),n}if(t instanceof io&&e instanceof io){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t-e.getValues()[n]:r[n]=null})),n.recalculateMinMax(),n}return"Error: unknown operation for '-'"},"*":function(t,e){if("number"==typeof t&&"number"==typeof e)return t*e;if("number"==typeof t&&e instanceof io){let n=e.cloneToTmpDataset();return n.getValues().forEach((function(e,n,r){null!==r[n]?r[n]=t*e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof io&&"number"==typeof e){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t*e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof io&&e instanceof io){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t*e.getValues()[n]:r[n]=null})),n.recalculateMinMax(),n}return"Error: unknown operation for '*'"},"/":function(t,e){if(!Wo(e))return"Error: divide by zero in expression";if("number"==typeof t&&"number"==typeof e)return t/e;if("number"==typeof t&&e instanceof io){let n=e.cloneToTmpDataset();return n.getValues().forEach((function(e,n,r){null!==r[n]?r[n]=t/e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof io&&"number"==typeof e){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t/e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof io&&e instanceof io){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t/e.getValues()[n]:r[n]=null})),n.recalculateMinMax(),n}return"Error: unknown operation for '/'"},"%":function(t,e){if(!Wo(e))return"Error: divide by zero in expression";if("number"==typeof t&&"number"==typeof e)return t%e;if("number"==typeof t&&e instanceof io){let n=e.cloneToTmpDataset();return n.getValues().forEach((function(e,n,r){null!==r[n]?r[n]=t%e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof io&&"number"==typeof e){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t%e:r[n]=null})),n.recalculateMinMax(),n}if(t instanceof io&&e instanceof io){let n=t.cloneToTmpDataset();return n.getValues().forEach((function(t,n,r){null!==r[n]?r[n]=t%e.getValues()[n]:r[n]=null})),n.recalculateMinMax(),n}return"Error: unknown operation for '%'"}},Qo={normalize:function(t,e,n){let r=t.getYMin(),i=t.getYMax();if(null!==r&&null!==i&&i>r){let e=t.cloneToTmpDataset();return e.getValues().forEach((function(t,e,n){n[e]=(t-r)/(i-r)})),e.recalculateMinMax(),e}return"Error: invalid data range for function 'normalize'"},setMissingValues:function(t,e,n){if(e&&e.length>0){let n=e[0],r=t.cloneToTmpDataset();return Number.isNumber(n)&&!Number.isNaN(n)?(r.getValues().forEach((function(t,e,r){null===t&&(r[e]=n)})),r.recalculateMinMax(),r):"Error: invalid arguments for function 'setMissingValues'"}return"Error: invalid arguments for function 'setMissingValues"}};function Zo(t,e){switch(t.type){case"Literal":return t.value;case"Identifier":let n=t.name;return n in jo||n in Qo?`Error: deprecated template variable '${n}', use '${n}()' instead`:`Error: unknown function name '${n}'`;case"UnaryExpression":let r=t,i=Zo(r.argument,e);return"string"==typeof i?i:qo[r.operator](i);case"BinaryExpression":let a=t,l=Zo(a.left,e),o=Zo(a.right,e),s=function(t,e){return"string"==typeof t?t:"string"==typeof e?e:"number"==typeof t||window.moment.isMoment(t)||t instanceof io?"number"==typeof e||window.moment.isMoment(e)||e instanceof io?"":"Error: invalide operant type":"Error: invalid operant type"}(l,o);return"string"==typeof s&&s.startsWith("Error:")?s:Go[a.operator](l,o);case"CallExpression":let u=t,f=u.callee.name,c=function(t,e){return t.map((function(t){return Zo(t,e)}))}(u.arguments,e);if("string"==typeof c)return c;if("dataset"===f){if(1===c.length){let t=c[0];if("string"==typeof t)return t;if("number"!=typeof t)return"Error: function 'dataset' only accepts id in number";let n=function(t,e){return e.datasets.getDatasetById(t)}(t,e);return n||`Error: no dataset found for id '${t}'`}}else{if(f in jo){if(0===c.length){let t=null;for(let n of e.datasets)t||n.getQuery().usedAsXDataset||(t=n);return t?jo[f](t,e):`No available dataset found for function ${f}`}if(1===c.length){let t=c[0];return"string"==typeof t?t:t instanceof io?jo[f](t,e):`Error: function '${f}' only accepts Dataset`}return`Error: Too many arguments for function ${f}`}if(f in Qo){if(1===c.length){if("string"==typeof c[0])return c[0];if(c[0]instanceof io){let t=c[0];return Qo[f](t,null,e)}return`Error: function ${f} only accept Dataset`}if(c.length>1){if("string"==typeof c[0])return c[0];if(c[0]instanceof io){let t=c[0];return Qo[f](t,c.filter((function(t,e,n){return e>0})),e)}return`Error: function ${f} only accept Dataset`}return`Error: Too many arguments for function ${f}`}}return`Error: unknown function name '${f}'`}return"Error: unknown expression"}function Ko(t,e){let n,r=[],i=new RegExp("{{(?<expr>[\\w+\\-*\\/0-9\\s()\\[\\]%.,]+)(::(?<format>[\\w+\\-*\\/0-9\\s()\\[\\]%.:]+))?}}","gm");for(;n=i.exec(t);){let t=n[0];if(!r.some((e=>e.source===t))&&(void 0!==n.groups&&void 0!==n.groups.expr)){let i=n.groups.expr,a=null;try{a=zo(i)}catch(t){return"Error:"+t.message}if(!a)return"Error: failed to parse expression";const l=Zo(a,e);if("string"==typeof l)return l;if("number"==typeof l||window.moment.isMoment(l)){let e=null;void 0!==n.groups.format&&(e=n.groups.format),r.push({source:t,value:l,format:e})}}}return r}function Jo(t,e){let n=Ko(t,e);if("string"==typeof n)return n;let r=n;for(let n of r){let r=n.source,i=n.value,a=n.format,l="";"number"==typeof i?l=a?Xo.sprintf("%"+a,i):i.toFixed(1):window.moment.isMoment(i)&&(l=Eo(i,a||e.dateFormat)),l&&(t=t.split(r).join(l))}return t}function ts(t,e){if(t=t.trim(),/^([\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)$/.test(t))return parseFloat(t);let n=Ko(t,e);if("string"==typeof n)return n;let r=n;return r.length>0?r[0].value:"Error: failed to resolve values"}function es(t,e,n,r){let i="",a=.5*n.dataAreaSize.width,l=.7*a,o=l*r.ratioInnerRadius,s=[];for(let t of r.data){let e=ts(t,n);if("string"==typeof e){i=e;break}"number"==typeof e&&s.push(e)}if(""!==i)return i;let u=[];for(let t of r.label){let e=Jo(t,n);if(e.startsWith("Error")){i=e;break}u.push(e)}if(""!==i)return i;let f=r.hideLabelLessThan,c=u.map((function(t){return Vo(t,"tracker-tick-label")})),h=[];for(let t of r.extLabel){let e=Jo(t,n);if(e.startsWith("Error")){i=e;break}h.push(e)}if(""!==i)return i;let d=h.map((function(t){return Vo(t,"tracker-pie-label")})),g=r.showExtLabelOnlyIfNoLabel,p=Zr().range(r.dataColor),y=e.dataArea.append("g");y.attr("transform",(function(){return"translate("+.5*n.dataAreaSize.width+","+.5*n.dataAreaSize.height+")"}));let m=function(){var t=Zl,e=Ql,n=null,r=kl(0),i=kl(Il),a=kl(0);function l(l){var o,s,u,f,c,h=(l=Xl(l)).length,d=0,g=new Array(h),p=new Array(h),y=+r.apply(this,arguments),m=Math.min(Il,Math.max(-Il,i.apply(this,arguments)-y)),v=Math.min(Math.abs(m)/h,a.apply(this,arguments)),x=v*(m<0?-1:1);for(o=0;o<h;++o)(c=p[g[o]=o]=+t(l[o],o,l))>0&&(d+=c);for(null!=e?g.sort((function(t,n){return e(p[t],p[n])})):null!=n&&g.sort((function(t,e){return n(l[t],l[e])})),o=0,u=d?(m-h*x)/d:0;o<h;++o,y=f)s=g[o],f=y+((c=p[s])>0?c*u:0)+x,p[s]={data:l[s],index:o,value:c,startAngle:y,endAngle:f,padAngle:v};return p}return l.value=function(e){return arguments.length?(t="function"==typeof e?e:kl(+e),l):t},l.sortValues=function(t){return arguments.length?(e=t,n=null,l):e},l.sort=function(t){return arguments.length?(n=t,e=null,l):n},l.startAngle=function(t){return arguments.length?(r="function"==typeof t?t:kl(+t),l):r},l.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:kl(+t),l):i},l.padAngle=function(t){return arguments.length?(a="function"==typeof t?t:kl(+t),l):a},l}(),v=m(s);v.forEach((function(t,e){t.input_index=e}));let x=y.selectAll("sector").data(v).enter().append("g").attr("class","sector"),A=Hl().innerRadius(o).outerRadius(l);var w=Hl().innerRadius(.9*a).outerRadius(.9*a);function b(t){return(t.endAngle-t.startAngle)/(2*Math.PI)<f}function D(t){return t.startAngle+(t.endAngle-t.startAngle)/2}function k(t,e){return g?""===u[e]||b(t)?h[e]:"":h[e]}x.append("path").attr("fill",(function(t,e){return p(e.toString())})).attr("d",A),y.selectAll("label").data(m(s)).enter().append("text").text((function(t,e){return b(t)?"":u[e]})).attr("transform",(function(t){return"translate("+A.centroid(t)[0]+","+A.centroid(t)[1]+")"})).style("text-anchor","middle").attr("class","tracker-pie-label");let C=null,M={};function T(t,e){let n=c[e].width;d[e].width;let r=b(t),i=D(t),a=A.centroid(t),l=w.centroid(t),o=M[e]||w.centroid(t);l[1]=o[1];let s=Math.sqrt(Math.pow(l[0]-a[0],2)+Math.pow(l[1]-a[1],2));return""===u[e]||r||(a[0]=a[0]+(l[0]-a[0])*n/s,a[1]=a[1]+(l[1]-a[1])*n/s,o[0]=o[0]+-3*(i<Math.PI?1:-1)),s=Math.sqrt(Math.pow(l[0]-a[0],2)+Math.pow(l[1]-a[1],2)),s>Math.sqrt(Math.pow(o[0]-a[0],2)+Math.pow(o[1]-a[1],2))?[a,o]:[a,l,o]}y.selectAll("extLabel").data(v).enter().append("text").sort((function(t,e){return Math.cos(D(e))-Math.cos(D(t))})).text((function(t,e){return k(t,t.input_index)})).attr("transform",(function(t,e){if(0==k(t,e=t.input_index).length)return;let n=w.centroid(t),r=D(t);n[0]=(.99*a-d[e].width)*(r<Math.PI?1:-1);var i=0;let l=new DOMRect(n[0],n[1],d[e].width,d[e].height);return null!==C&&(l.right<C.left||C.right<l.left||C.bottom<l.top||(i=C.bottom-l.top)),0!=i&&(l=new DOMRect(n[0],n[1]+i,d[e].width,d[e].height)),C=l,M[e]=[n[0],n[1]+i],"translate("+n[0]+","+(n[1]+i)+")"})).style("text-anchor",(function(t){return D(t)<Math.PI?"start":"end"})).attr("class","tracker-pie-label"),y.selectAll("line").data(v).enter().append("polyline").attr("stroke","black").style("fill","none").attr("stroke-width",1).attr("points",(function(t,e){if(g){if((""===u[e]||b(t))&&""!==h[e])return T(t,e)}else if(""!==h[e])return T(t,e)})).attr("class","tracker-axis")}function ns(t,e,n){if(!e||!n)return;let r={};r=function(t,e,n,r){ee(e).select("#svg").remove();for(var i=Object.getOwnPropertyNames(t),a=0;a<i.length;a++)delete t[i[a]];let l=ee(e).append("svg").attr("id","svg").attr("width",n.dataAreaSize.width+n.margin.left+n.margin.right).attr("height",n.dataAreaSize.height+n.margin.top+n.margin.bottom);t.svg=l;let o=l.append("g").attr("id","graphArea").attr("transform","translate("+n.margin.left+","+n.margin.top+")").attr("width",n.dataAreaSize.width+n.margin.right).attr("height",n.dataAreaSize.height+n.margin.bottom);t.graphArea=o;let s=o.append("g").attr("id","dataArea").attr("width",n.dataAreaSize.width).attr("height",n.dataAreaSize.height);return t.dataArea=s,t}(r,t,e);let i=Dl[n.dataColor.length];for(let t=0;t<n.dataColor.length;t++)null===n.dataColor[t]&&(n.dataColor[t]=i[t]);!function(t,e,n,r){if(!n||!r)return;if(!r.title)return;let i=Vo(r.title,"tracker-title"),a=e.graphArea.append("text").text(r.title).attr("id","title").attr("transform","translate("+n.dataAreaSize.width/2+","+i.height/2+")").attr("height",i.height).attr("class","tracker-title");e.title=a,Oo(e.svg,0,i.height),Oo(e.graphArea,0,i.height),Po(e.dataArea,0,i.height)}(0,r,e,n),es(0,r,e,n),n.showLegend&&function(t,e,n,r){let i=e.svg;e.graphArea;let a=e.dataArea,l=e.title,o=0;l&&(o=parseFloat(l.attr("height")));let s=r.dataName,u=s.map((function(t){return Vo(t,"tracker-legend-label")})),f=0,c=0;for(let t=0;t<s.length;t++)u[t].width>c&&(c=u[t].width,f=t);let h=c/s[f].length,d=u[f].height,g=s.length,p=2*h,y=d,m=2*h,v=0,x=0;"vertical"===r.legendOrientation?(v=3*p+m+c,x=(g+1)*y):"horizontal"===r.legendOrientation&&(v=(2*p+m)*g+p+D(u,(function(t,e){return t.width})),x=y+d);let A=0,w=0;if("top"===r.legendPosition)A=n.dataAreaSize.width/2-v/2,w=o,Oo(i,0,x+y),Po(a,0,x+y);else if("bottom"===r.legendPosition)A=n.dataAreaSize.width/2-v/2,w=o+n.dataAreaSize.height+y,Oo(i,0,x+y);else if("left"===r.legendPosition)A=0,w=o+n.dataAreaSize.height/2-x/2,Oo(i,v+p,0),Po(a,v+p,0);else{if("right"!==r.legendPosition)return;A=n.dataAreaSize.width+p,w=o+n.dataAreaSize.height/2-x/2,Oo(i,v+p,0)}let b=e.graphArea.append("g").attr("id","legend").attr("transform","translate("+A+","+w+")"),k=b.append("rect").attr("class","tracker-legend").attr("width",v).attr("height",x);r.legendBgColor&&k.style("fill",r.legendBgColor),r.legendBorderColor&&k.style("stroke",r.legendBorderColor);let C=p,M=d,T=C+p+m,_=M;if("vertical"===r.legendOrientation)b.selectAll("markers").data(s).enter().append("circle").attr("cx",C+m/2).attr("cy",(function(t,e){return M+e*y})).attr("r",(function(t,e){return 5})).style("fill",(function(t,e){return r.dataColor[e]})),b.selectAll("labels").data(s).enter().append("text").attr("x",T).attr("y",(function(t,e){return _+e*y})).text((function(t,e){return t})).style("alignment-baseline","middle").attr("class","tracker-legend-label").style("fill",(function(t,e){return r.dataColor[e]}));else if("horizontal"===r.legendOrientation){let t=0;t=0,b.selectAll("markers").data(s).enter().append("circle").attr("cx",(function(e,n){return 0===n?t=C+m/2:t+=u[n].width+p+m+p,t})).attr("cy",M).attr("r",(function(t,e){return 5})).style("fill",(function(t,e){return r.dataColor[e]})),t=0,b.selectAll("labels").data(s).enter().append("text").attr("x",(function(e,n){return 0===n?t=T:t+=u[n].width+p+m+p,t})).attr("y",_).text((function(t,e){return t})).style("alignment-baseline","middle").attr("class","tracker-legend-label").style("fill",(function(t,e){return r.dataColor[e]}))}}(0,r,e,n),function(t,e,n){let r=ee(t),i=e.svg,a=parseFloat(i.attr("width")),l=parseFloat(i.attr("height"));i.attr("width",null).attr("height",null).attr("viewBox",`0 0 ${a} ${l}`).attr("preserveAspectRatio","xMidYMid meet"),n.fitPanelWidth?r.style("width","100%"):(r.style("width",(a*n.fixedScale).toString()+"px"),r.style("height",(l*n.fixedScale).toString()+"px"))}(t,r,e)}function rs(t,e,n){if(!e||!n)return;let r="";n.template,r=n.template;let i=Jo(r,e);if(i.startsWith("Error:"))return i;if(r=i,""!==r){let e=ee(t).append("div");if(r.includes("\n")||r.includes("\\n")){let t=r.split(/(\n|\\n)/);for(let n of t)"\n"!==n&&"\\n"!==n&&e.append("div").text(n)}else e.text(r);""!==n.style&&e.attr("style",n.style)}}let is=!1,as=2.8,ls=1.8;function os(t,e){let n=e.dataset;if(0===n.length)return!1;let r=null;if(null===e.selectedDataset){for(let e of n)if(r=t.datasets.getDatasetById(e),r&&!r.getQuery().usedAsXDataset)break;if(r)return e.selectedDataset=r.getId(),!0}else{let i=e.selectedDataset,a=n.findIndex((t=>t===i));if(a>=0){if(a===e.dataset.length-1){for(let e of n)if(r=t.datasets.getDatasetById(e),r&&!r.getQuery().usedAsXDataset)break;return!!r&&(e.selectedDataset=r.getId(),!0)}{a++;let i=n[a];if(r=t.datasets.getDatasetById(i),e.selectedDataset=i,r&&!r.getQuery().usedAsXDataset)return!0;os(t,e)}}}return!1}function ss(t,e,n,r){ee(e).select("#svg").remove();for(var i=Object.getOwnPropertyNames(t),a=0;a<i.length;a++)delete t[i[a]];let l=ee(e).append("svg").attr("id","svg").attr("width",n.dataAreaSize.width+n.margin.left+n.margin.right).attr("height",n.dataAreaSize.height+n.margin.top+n.margin.bottom);t.svg=l;let o=l.append("g").attr("id","graphArea").attr("transform","translate("+n.margin.left+","+n.margin.top+")").attr("width",n.dataAreaSize.width+n.margin.right).attr("height",n.dataAreaSize.height+n.margin.bottom);t.graphArea=o;let s=o.append("g").attr("id","dataArea").attr("width",n.dataAreaSize.width).attr("height",n.dataAreaSize.height);return t.dataArea=s,t}function us(t,e){let n=t.svg.selectAll("circle");for(let t of n){let e=ee(t).attr("id");e&&e.startsWith("tracker-selected-circle-")&&ee(t).style("stroke","none")}e.selectedDate="",t.monitor.text("")}function fs(t,e,n,r,i){if(!n||!r)return;let a=r.selectedDataset;if(null===a)return;let l=n.datasets.getDatasetById(a);if(!l)return;let o=l.getName();i.month(),i.daysInMonth(),i.year();let s=Vo("30","tracker-month-label"),u=Math.max(s.width,s.height)*as,f=i.format("YYYY"),c=i.format("MMM"),h=Vo(f,"tracker-month-header-year"),d=Vo(c,"tracker-month-header-month"),g=0,p=e.graphArea.append("g"),y=null;r.headerMonthColor?y=r.headerMonthColor:r.color&&(y=r.color);let m=p.append("text").text(c).attr("id","titleMonth").attr("transform","translate("+u/4+","+d.height+")").attr("class","tracker-month-header-month").style("cursor","default").on("click",(function(t){us(e,r)}));y&&m.style("fill",y),g+=d.height;let v=null;r.headerYearColor?v=r.headerYearColor:r.color&&(v=r.color);let x=p.append("text").text(f).attr("id","titleYear").attr("transform","translate("+u/4+","+(g+h.height)+")").attr("class","tracker-month-header-year").style("cursor","default").attr("font-weight","bold").on("click",(function(t){us(e,r)}));v&&x.style("fill",v),g+=h.height;let A=Vo(o,"tracker-month-title-rotator");if("circle"===r.mode||"annotation"===r.mode&&!r.showAnnotationOfAllTargets){let a=p.append("text").text(o).attr("transform","translate("+3.5*u+","+A.height+")").attr("class","tracker-month-title-rotator").style("cursor","pointer").on("click",(function(a){os(n,r)&&(us(e,r),hs(t,e,n,r,i))}));e.rotator=a}let w=Vo("0.0000","tracker-month-title-monitor"),b=p.append("text").text("").attr("id","monitor").attr("class","tracker-month-title-monitor").attr("transform","translate("+3.5*u+","+(A.height+w.height)+")").style("cursor","pointer").style("fill",r.selectedRingColor);e.monitor=b;let D=Vo("<","tracker-month-title-arrow");p.append("text").text("<").attr("id","arrowLeft").attr("transform","translate("+5.5*u+","+(g/2+D.height/2)+")").attr("class","tracker-month-title-arrow").on("click",(function(a){us(e,r),r.selectedDate="";let l=i.clone().add(-1,"month");hs(t,e,n,r,l)})).style("cursor","pointer"),p.append("text").text(">").attr("id","arrowLeft").attr("transform","translate("+6.5*u+","+(g/2+D.height/2)+")").attr("class","tracker-month-title-arrow").on("click",(function(a){us(e,r);let l=i.clone().add(1,"month");hs(t,e,n,r,l)})).style("cursor","pointer"),p.append("text").text("◦").attr("id","arrowToday").attr("transform","translate("+6*u+","+(g/2+D.height/2)+")").attr("class","tracker-month-title-arrow").on("click",(function(i){us(e,r);let a=So(n.dateFormat);hs(t,e,n,r,a)})).style("cursor","pointer"),g+=8;let k=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];"mon"===r.startWeekOn.toLowerCase()&&k.push(k.shift());let C=Vo(k[0],"tracker-month-weekday");e.graphArea.selectAll("weekDays").data(k).enter().append("text").text((function(t){return t})).attr("transform",(function(t,e){return"translate("+(e+.5)*u+","+(g+C.height)+")"})).attr("class","tracker-month-weekday").attr("text-anchor","middle").style("cursor","default").on("click",(function(t){us(e,r)})),g+=C.height+8;let M=null;r.dividingLineColor?M=r.dividingLineColor:r.color&&(M=r.color);let T=e.graphArea.append("rect").attr("x",0).attr("y",g).attr("width",6.5*u+C.width).attr("height",1).attr("class","tracker-month-dividing-line");M&&T.style("fill",M),g+=1,p.attr("height",g),e.header=p,Po(e.dataArea,0,g)}function cs(t,e,n,r,i){if(!n||!r)return;let a=r.mode;if("circle"!==a&&"annotation"!==a)return"Unknown month view mode";let l=r.selectedDataset;if(null===l)return;let o=n.datasets.getDatasetById(l);if(!o)return;let s=r.dataset.findIndex((t=>t===l));l<0&&(s=0);let u=r.threshold[s];i.month(),i.daysInMonth();let f=Vo("30","tracker-month-label"),c=Math.max(f.width,f.height)*as,h=c/as*ls/2,d=(c-2*h)/2,g=v(o.getValues());null!==r.yMin[s]&&(g=r.yMin[s]);let p=m(o.getValues());null!==r.yMax[s]&&(p=r.yMax[s]);let y=!0;(null===p||null===g||p<=g)&&(y=!1);const x=i.clone().startOf("month");let A=x.clone().subtract(x.day(),"days");"mon"===r.startWeekOn.toLowerCase()&&(A=A.add(1,"days"));const w=i.clone().endOf("month");let b=w.clone().add(7-w.day()-1,"days");"mon"===r.startWeekOn.toLowerCase()&&(b=b.add(1,"days"));const D=o.getStartDate(),k=o.getEndDate();let C=r.showAnnotation,M=r.annotation,T=M[s],_=r.showAnnotationOfAllTargets,E=[],F=0,S=0,B=0;for(let t=A.clone();t<=b;t.add(1,"days")){t=Co(Eo(t,n.dateFormat),n.dateFormat),"2021-09-13"===t.format("YYYY-MM-DD")&&(is=!1),"mon"===r.startWeekOn.toLowerCase()?(F=t.day()-1,F<0&&(F=6),S=Math.floor(B/7)):(F=t.day(),S=Math.floor(B/7));let e=!0;(t.diff(x)<0||t.diff(w)>0)&&(e=!1);let i=!0;D&&k&&t.diff(D)>=0&&t.diff(k)<=0&&(i=!1);const a=o.getValue(t);is&&(console.log(o),console.log(Eo(t,n.dateFormat)),console.log(a));let l=!1;r.circleColorByValue?(y||null!==a&&a>u)&&(l=!0):null!==a&&a>u&&(l=!0);let s=null;r.circleColorByValue&&y&&null!==a&&(s=(a-g)/(p-g)),is&&(console.log(g),console.log(p),console.log(s));let f=o.getValue(t,1),c=o.getValue(t,-1),h=!1;null!==a&&a>u&&null!==c&&c>u&&(h=!0);let d=!1;null!==a&&a>u&&null!==f&&f>u&&(d=!0),is&&(console.log(`preValue: ${c}, curValue: ${a}, nextValue: ${f}`),console.log(r.threshold),console.log(`streakIn: ${h}, streakOut: ${d}`));let m="";if(C)if(_)for(let e of r.dataset){let i=r.dataset.findIndex((t=>t===e));if(i>=0){let a=n.datasets.getDatasetById(e).getValue(t),l=r.threshold[i];null!==a&&a>l&&(m+=M[i])}}else a>u&&(m=T);E.push({date:Eo(t,n.dateFormat),value:a,scaledValue:s,dayInMonth:t.date(),isInThisMonth:e,isOutOfDataRange:i,row:S,col:F,showCircle:l,streakIn:h,streakOut:d,annotation:m}),B++,is&&(is=!1)}let N=(F+1)*c,L=ui().domain([-.5,6.5]).range([0,N]);if("circle"===a&&r.showCircle&&r.showStreak){let t="#69b3a2";r.circleColor?t=r.circleColor:r.color&&(t=r.color),e.dataArea.selectAll("streakIn").data(E.filter((function(t){return t.streakIn}))).enter().append("rect").attr("x",(function(t){return L(t.col)-h-d})).attr("y",(function(t){return L(t.row)-1.5})).attr("width",d).attr("height",3).style("fill",(function(e){return e.showCircle?r.circleColorByValue?null!==e.scaledValue?Cn("white",t)(.8*e.scaledValue+.2):"none":t:"none"})).style("opacity",(function(t){return t.isOutOfDataRange||r.dimNotInMonth&&!t.isInThisMonth?.2:1})),e.dataArea.selectAll("streakOut").data(E.filter((function(t){return t.streakOut}))).enter().append("rect").attr("x",(function(t){return L(t.col)+h})).attr("y",(function(t){return L(t.row)-1.5})).attr("width",d).attr("height",3).style("fill",(function(e){return e.showCircle?r.circleColorByValue?null!==e.scaledValue?Cn("white",t)(.8*e.scaledValue+.2):"none":t:"none"})).style("opacity",(function(t){return t.isOutOfDataRange||r.dimNotInMonth&&!t.isInThisMonth?.2:1}))}let I="#69b3a2";r.circleColor?I=r.circleColor:r.color&&(I=r.color),"circle"===a&&r.showCircle&&e.dataArea.selectAll("dot").data(E).enter().append("circle").attr("r",h).attr("cx",(function(t){return L(t.col)})).attr("cy",(function(t){return L(t.row)})).style("fill",(function(t){if(t.showCircle){if(!r.circleColorByValue)return I;if(null!==t.scaledValue){return Cn("white",I)(.8*t.scaledValue+.2)}return"none"}return"none"})).style("opacity",(function(t){return t.isOutOfDataRange||r.dimNotInMonth&&!t.isInThisMonth?.2:1})).style("cursor","default");let V=Eo(window.moment(),n.dateFormat);if("circle"===a&&r.showTodayRing){let t=e.dataArea.selectAll("todayRing").data(E.filter((function(t){return t.date===V}))).enter().append("circle").attr("r",.9*h).attr("cx",(function(t){return L(t.col)})).attr("cy",(function(t){return L(t.row)})).attr("class","tracker-month-today-circle").style("cursor","default");""!==r.todayRingColor?t.style("stroke",r.todayRingColor):t.style("stroke","white")}"circle"===a&&r.showSelectedRing&&e.dataArea.selectAll("selectedRing").data(E).enter().append("circle").attr("r",h).attr("cx",(function(t){return L(t.col)})).attr("cy",(function(t){return L(t.row)})).attr("id",(function(t){return"tracker-selected-circle-"+t.date})).attr("class","tracker-month-selected-circle").style("cursor","default").style("stroke","none"),e.dataArea.selectAll("dayLabel").data(E).enter().append("text").text((function(t){return t.dayInMonth.toString()})).attr("transform",(function(t){return"translate("+L(t.col)+","+(L(t.row)+f.height/4)+")"})).style("fill-opacity",(function(t){return t.isOutOfDataRange||r.dimNotInMonth&&!t.isInThisMonth?.2:1})).attr("date",(function(t){return t.date})).attr("value",(function(t){return t.value})).attr("valueType",(function(t){return eo[o.valueType]})).attr("class","tracker-month-label").on("click",(function(t){us(e,r);let n=ee(this).attr("date");if(r.selectedDate=n,r.showSelectedRing&&e.dataArea.select("#tracker-selected-circle-"+n).style("stroke",r.selectedRingColor),r.showSelectedValue){let t=ee(this).attr("value"),n="";if("Time"===ee(this).attr("valueType")){n=window.moment("00:00","HH:mm",!0).add(parseFloat(t),"seconds").format("HH:mm")}else n=t;e.monitor.text(n)}})).style("cursor","pointer"),"annotation"===a&&C&&e.dataArea.selectAll("dayAnnotation").data(E).enter().append("text").text((function(t){return t.annotation})).attr("transform",(function(t){let e=L(t.col),n=L(t.row)+f.height/4;return t.annotation&&(n+=h),"translate("+e+","+n+")"})).attr("class","tracker-month-annotation");let O=parseFloat(e.svg.attr("width")),P=parseFloat(e.svg.attr("height")),$=parseFloat(e.graphArea.attr("width")),Y=parseFloat(e.graphArea.attr("height")),R=7*c+parseFloat(e.header.attr("height")),z=7*c;R>P&&Oo(e.svg,0,R-P),z>O&&Oo(e.svg,z-O,0),R>Y&&Oo(e.graphArea,0,R-Y),z>$&&Oo(e.svg,z-$,0)}function hs(t,e,n,r,i){n&&ds&&(fs(t,e=ss(e,t,n),n,r,i),cs(0,e,n,r,i))}function ds(t,e,n){if(!e||!ds)return;n.dataset;let r=0;for(let t of e.datasets)t.getQuery().usedAsXDataset||r++;if(0===r)return"No available dataset found";if(os(e,n),null===n.selectedDataset)return"No available dataset found";let i={};i=ss(i,t,e);let a=null;if(n.initMonth){if(a=_o(n.initMonth,e.dateFormat),!a){let t=window.moment(n.initMonth,"YYYY-MM",!0);if(!t.isValid())return"Invalid initMonth";a=t}}else a=e.datasets.getDates().last();a&&(fs(t,i,e,n,a),cs(0,i,e,n,a),function(t,e,n){let r=ee(t),i=e.svg,a=parseFloat(i.attr("width")),l=parseFloat(i.attr("height"));i.attr("width",null).attr("height",null).attr("viewBox",`0 0 ${a} ${l}`).attr("preserveAspectRatio","xMidYMid meet"),n.fitPanelWidth?r.style("width","100%"):(r.style("width",(a*n.fixedScale).toString()+"px"),r.style("height",(l*n.fixedScale).toString()+"px"))}(t,i,e))}function gs(t,e,n){if(e&&gs)return"Under construction"}function ps(t,e,n){if(!e||!n)return;let r=parseFloat(n.dataset);e.datasets.getDatasetById(r),"horizontal"===n.orientation?e.dataAreaSize={width:250,height:24}:"vertical"===n.orientation&&(e.dataAreaSize={width:24,height:250});let i=function(t,e,n){let r={};if(!e||!n)return;let i=ee(t).append("svg").attr("id","svg").attr("width",e.dataAreaSize.width+e.margin.left+e.margin.right).attr("height",e.dataAreaSize.height+e.margin.top+e.margin.bottom);r.svg=i;let a=i.append("g").attr("id","graphArea").attr("transform","translate("+e.margin.left+","+e.margin.top+")").attr("width",e.dataAreaSize.width+e.margin.right).attr("height",e.dataAreaSize.height+e.margin.bottom);r.graphArea=a;let l=a.append("g").attr("id","dataArea").attr("width",e.dataAreaSize.width).attr("height",e.dataAreaSize.height);return r.dataArea=l,r}(t,e,n),a=function(t,e,n,r){if(!e||!n)return;let i=n.range,a=i[i.length-1],l=[0,a],o=n.valueUnit,s=function(t){return o&&o.endsWith("%")?oi(0,a,7)(t)+" %":oi(0,a,7)(t)},u=Vo(s(a),"tracker-tick-label");if("horizontal"===n.orientation){let n=ui();n.domain(l).range([0,e.dataAreaSize.width]),t.scale=n;let r=V(n);r.tickFormat(s);let i=t.dataArea.append("g").attr("id","axis").attr("transform","translate(0,"+e.dataAreaSize.height+")").call(r).attr("class","tracker-axis");t.axis=i,i.selectAll("path").style("stroke","none"),i.selectAll("line"),i.selectAll("text").attr("class","tracker-tick-label"),i.attr("width",e.dataAreaSize.width+u.width),i.attr("height",6+u.height),Oo(t.svg,+u.width,6+u.height),Oo(t.graphArea,+u.width,6+u.height)}else if("vertical"===n.orientation){let n=ui();n.domain(l).range([e.dataAreaSize.height,0]),t.scale=n;let r=O(n);r.tickFormat(s);let i=t.dataArea.append("g").attr("id","axis").attr("x",0).attr("y",0).call(r).attr("class","tracker-axis");t.axis=i,i.selectAll("path").style("stroke","none"),i.selectAll("line"),i.selectAll("text").attr("class","tracker-tick-label"),i.attr("width",6+u.width),i.attr("height",e.dataAreaSize.width),Oo(t.svg,6+u.width,0),Oo(t.graphArea,6+u.width,0),Po(t.dataArea,6+u.width,0)}}(i,e,n);if("string"==typeof a)return a;!function(t,e,n){if(!e||!n)return;if(n.title){let r=Vo(n.title,"tracker-title-small");if("horizontal"===n.orientation){let i=t.graphArea.append("text").text(n.title).attr("id","title").attr("x",r.width/2).attr("y",e.dataAreaSize.height/2).attr("height",r.height).attr("class","tracker-title-small");t.title=i,Oo(t.svg,r.width+6,0),Oo(t.graphArea,r.width+6,0),Po(t.dataArea,r.width+6,0)}else if("vertical"===n.orientation){let i=e.dataAreaSize.width/2;r.width>e.dataAreaSize.width&&(Oo(t.svg,r.width-e.dataAreaSize.width,0),Oo(t.graphArea,r.width-e.dataAreaSize.width,0),Po(t.dataArea,r.width/2-e.dataAreaSize.width/2,0),i=r.width/2);let a=parseFloat(t.axis.attr("width")),l=t.graphArea.append("text").text(n.title).attr("id","title").attr("x",i+a).attr("y",r.height/2).attr("height",r.height).attr("class","tracker-title-small");t.title=l,Oo(t.svg,0,r.height+6),Oo(t.graphArea,0,r.height+6),Po(t.dataArea,0,r.height+6)}}if(n.valueUnit){let r=Vo(n.valueUnit,"tracker-tick-label");if("horizontal"===n.orientation){let i=t.dataArea.append("text").text(n.valueUnit).attr("id","unit").attr("x",-1*(r.width+6)).attr("y",e.dataAreaSize.height+6).attr("height",r.height).attr("class","tracker-tick-label");t.unit=i}else if("vertical"===n.orientation){let i=t.dataArea.append("text").text(n.valueUnit).attr("id","unit").attr("x",e.dataAreaSize.width/2-r.width/2).attr("y",-(r.height/2+6)).attr("height",r.height).attr("class","tracker-tick-label");t.unit=i,Oo(t.svg,0,r.height+6),Oo(t.graphArea,0,r.height+6),Po(t.dataArea,0,r.height+6)}}}(i,e,n),function(t,e,n,r){if(!e||!n)return;let i=t.scale,a=n.range,l=n.rangeColor,o=[],s=0;for(let t=0;t<a.length;t++)o.push({start:s,end:a[t],color:l[t]}),s=a[t];"horizontal"===n.orientation?t.dataArea.selectAll("backPanel").data(o).enter().append("rect").attr("x",(function(t,e){return Math.floor(i(t.start))})).attr("y",(function(t){return 0})).attr("width",(function(t,e){return Math.ceil(i(t.end-t.start))})).attr("height",e.dataAreaSize.height).style("fill",(function(t){return t.color})):"vertical"===n.orientation&&t.dataArea.selectAll("backPanel").data(o).enter().append("rect").attr("x",(function(t,e){return 0})).attr("y",(function(t){return Math.floor(i(t.end))})).attr("width",e.dataAreaSize.width).attr("height",(function(t){return e.dataAreaSize.height-Math.floor(i(t.end-t.start))})).style("fill",(function(t){return t.color}))}(i,e,n);let l=function(t,e,n,r){let i="";if(!e||!n)return;let a=ts(n.value,e);if("string"==typeof a)return a;let l=a;if(Number.isNaN(l))return i="Invalid input value: "+a,i;let o=n.valueColor,s=t.scale;if("horizontal"===n.orientation){let n=e.dataAreaSize.height/3;t.dataArea.append("rect").attr("x",s(0)).attr("y",n).attr("width",Math.floor(s(l))).attr("height",n).style("fill",o)}else if("vertical"===n.orientation){let n=e.dataAreaSize.width/3;t.dataArea.append("rect").attr("x",n).attr("y",Math.floor(s(l))).attr("width",n).attr("height",e.dataAreaSize.height-Math.floor(s(l))).style("fill",o)}}(i,e,n);if("string"==typeof l)return l;!function(t,e,n,r){if(!e||!n)return;if(!n.showMarker)return;let i=n.markerValue,a=n.markerColor,l=t.scale;if("horizontal"===n.orientation){let n=2*e.dataAreaSize.height/3;t.dataArea.append("rect").attr("x",l(i)-1.5).attr("y",n/4).attr("width",3).attr("height",n).style("fill",a)}else if("vertical"===n.orientation){let n=2*e.dataAreaSize.width/3;t.dataArea.append("rect").attr("x",n/4).attr("y",l(i)-1.5).attr("width",n).attr("height",3).style("fill",a)}}(i,e,n),function(t,e,n){let r=ee(t),i=e.svg,a=parseFloat(i.attr("width")),l=parseFloat(i.attr("height"));i.attr("width",null).attr("height",null).attr("viewBox",`0 0 ${a} ${l}`).attr("preserveAspectRatio","xMidYMid meet"),n.fitPanelWidth?r.style("width","100%"):(r.style("width",(a*n.fixedScale).toString()+"px"),r.style("height",(l*n.fixedScale).toString()+"px"))}(t,i,e)}function ys(t,e,n){if(!e||!n)return;let r=e.datasets,i=function(t,e){let n,r;for(const e of t)null!=e&&(void 0===n?e>=e&&(n=r=e):(n>e&&(n=e),r<e&&(r=e)));return[n,r]}(r.getDates()),a=bl().domain(i).range([0,e.dataAreaSize.width]);t.xScale=a;let l=To(n.xAxisTickInterval),[o,s]=function(t,e){let n=[],r=null;if(e){let r=t[0],i=t[t.length-1];n=Mi.range(r.toDate(),i.toDate(),e.asDays())}else{let e=t.length;r=e<=15?Mi:e<=60?Mi.every(4):e<=105?Fi:e<=450?Xi:e<=900?Xi.every(2):ji}return[n,r]}(r.getDates(),l),u=function(t,e){if(e){function n(t){return Eo(window.moment(t),e)}return n}{let r=null,i=t.length;return r=ea(i<=15||i<=60||i<=105?"%y-%m-%d":i<=450||i<=900?"%y %b":"%Y"),r}}(r.getDates(),n.xAxisTickLabelFormat),f=V(a);o&&0!==o.length?f.tickValues(o):s&&f.ticks(s),u&&f.tickFormat(u);let c=t.dataArea.append("g").attr("id","xAxis").attr("transform","translate(0,"+e.dataAreaSize.height+")").call(f).attr("class","tracker-axis");n.xAxisColor&&c.style("stroke",n.xAxisColor),t.xAxis=c;let h=Vo("99-99-99"),d=c.selectAll("text").attr("x",-1*h.height*Math.cos(65/180*Math.PI)).attr("y",0).attr("transform","rotate(-65)").style("text-anchor","end").attr("class","tracker-tick-label");n.xAxisColor&&d.style("fill",n.xAxisColor);let g=h.width*Math.sin(65/180*Math.PI),p=c.append("text").text(n.xAxisLabel).attr("transform","translate("+e.dataAreaSize.width/2+","+(6+g)+")").attr("class","tracker-axis-label");n.xAxisLabelColor&&p.style("fill",n.xAxisLabelColor),c.attr("height",6+g),Oo(t.svg,0,6+g),Oo(t.graphArea,0,6+g)}function ms(t,e,n,r,i){if(!e||!n)return;let a=e.datasets;if(0===i.length)return;if("left"!==r&&"right"!==r)return;let l=null,o=null,s=null,u=!1;for(let t of i){let e=a.getDatasetById(t);if(!e.getQuery().usedAsXDataset)if((null===l||e.getYMin()<l)&&(l=e.getYMin()),(null===o||e.getYMax()>o)&&(o=e.getYMax()),u=e.valueType===eo.Time,null===s)s=u;else if(u!==s)return"Not all values in time format"}let f=null;"left"===r?f=n.yMin[0]:"right"===r&&(f=n.yMin[1]);let c=!1;"number"!=typeof f?f=l:c=!0;let h=null;"left"===r?h=n.yMax[0]:"right"===r&&(h=n.yMax[1]);let d=!1;if("number"!=typeof h?h=o:d=!0,h<f){let t=f;f=h,h=t;let e=c;c=d,d=e}let g,p,y=h-f,m=ui();g=c?f:f-.2*y,p=d?h:h+.2*y,n.GetGraphType()===to.Bar&&(p<0&&(p=0),g>0&&(g=0));let v=[g,p];("left"===r&&n.reverseYAxis[0]||"right"===r&&n.reverseYAxis[1])&&(v=[p,g]),m.domain(v).range([e.dataAreaSize.height,0]),"left"===r?t.leftYScale=m:"right"===r&&(t.rightYScale=m);let x="";"left"===r?x=n.yAxisColor[0]:"right"===r&&(x=n.yAxisColor[1]);let A="";"left"===r?A=n.yAxisLabelColor[0]:"right"===r&&(A=n.yAxisLabelColor[1]);let w="";"left"===r?w=n.yAxisLabel[0]:"right"===r&&(w=n.yAxisLabel[1]);let D="",k=null,C=null;"left"===r?(D=n.yAxisUnit[0],k=n.yAxisTickInterval[0],C=n.yAxisTickLabelFormat[0]):"right"===r&&(D=n.yAxisUnit[1],k=n.yAxisTickInterval[1],C=n.yAxisTickLabelFormat[1]);let T,_=null;if(u?_=To(k):(_=parseFloat(k),Number.isNumber(_)&&!Number.isNaN(_)||(_=null)),"left"===r?T=O(m):"right"===r&&(T=I(M,m)),T){let t=function(t,e,n,r=!1){if(r){if(n){function i(t){return window.moment("00:00","HH:mm",!0).add(t,"seconds").format(n)}return i}{function a(n){const r=Math.abs(e-t);let i=window.moment("00:00","HH:mm",!0).add(n,"seconds").format("HH:mm");return r>43200&&(n<t||n>e||(n-t)/3600%2<1)&&(i=""),i}return a}}if(n){function l(t){return Xo.sprintf("%"+n,t)}return l}return oi(t,e,10)}(g,p,C,u);t&&T.tickFormat(t);let e=function(t,e,n,r=!1){const i=Math.abs(e-t);let a=[];r?a=n&&window.moment.isDuration(n)?b(t,e,Math.abs(n.asSeconds())):i>18e3?b(t=3600*Math.floor(t/3600),e=3600*Math.ceil(e/3600),3600):b(t=1800*Math.floor(t/1800),e=1800*Math.ceil(e/1800),1800):n&&"number"==typeof n&&(a=b(t,e,n));return 0===a.length?null:a}(g,p,_,u);e&&T.tickValues(e)}let E=t.dataArea.append("g").attr("id","yAxis").call(T).attr("class","tracker-axis");"right"==r&&E.attr("transform","translate("+e.dataAreaSize.width+" ,0)"),"left"===r?t.leftYAxis=E:"right"===r&&(t.rightYAxis=E);let F=E.selectAll("path");x&&F.style("stroke",x);let S=E.selectAll("line");x&&S.style("stroke",x);let B=E.selectAll("text").attr("class","tracker-tick-label");x&&B.style("fill",x);let N=0;for(let t of B)if(t.textContent){let e=Vo(t.textContent,"tracker-axis-label");e.width>N&&(N=e.width)}""!==D&&(w+=" ("+D+")");let L=Vo(w),V=E.append("text").text(w).attr("transform","rotate(-90)").attr("x",-1*e.dataAreaSize.height/2).attr("class","tracker-axis-label");"left"===r?V.attr("y",-6-N-L.height/2):V.attr("y",6+N+L.height),A&&V.style("fill",A);let P=L.height+N+6;E.attr("width",P),Oo(t.svg,P,0),Oo(t.graphArea,P,0),"left"===r&&(Po(t.dataArea,P,0),t.title&&Po(t.title,P,0))}function vs(t,e,n,r,i){if(!e||!n)return;let a=null;if("left"===i?a=t.leftYScale:"right"===i&&(a=t.rightYScale),n.showLine[r.getId()]){let e=function(t,e){var n=kl(!0),r=null,i=jl,a=null,l=Ol(o);function o(o){var s,u,f,c=(o=Xl(o)).length,h=!1;for(null==r&&(a=i(f=l())),s=0;s<=c;++s)!(s<c&&n(u=o[s],s,o))===h&&((h=!h)?a.lineStart():a.lineEnd()),h&&a.point(+t(u,s,o),+e(u,s,o));if(f)return a=null,f+""||null}return t="function"==typeof t?t:void 0===t?ql:kl(t),e="function"==typeof e?e:void 0===e?Gl:kl(e),o.x=function(e){return arguments.length?(t="function"==typeof e?e:kl(+e),o):t},o.y=function(t){return arguments.length?(e="function"==typeof t?t:kl(+t),o):e},o.defined=function(t){return arguments.length?(n="function"==typeof t?t:kl(!!t),o):n},o.curve=function(t){return arguments.length?(i=t,null!=r&&(a=i(r)),o):i},o.context=function(t){return arguments.length?(null==t?r=a=null:a=i(r=t),o):r},o}().defined((function(t){return null!==t.value})).x((function(e){return t.xScale(e.date)})).y((function(t){return a(t.value)})),i=t.dataArea.append("path").attr("class","tracker-line").style("stroke-width",n.lineWidth[r.getId()]);n.fillGap[r.getId()]?i.datum(Array.from(r).filter((function(t){return null!==t.value}))).attr("d",e):i.datum(r).attr("d",e),n.lineColor[r.getId()]&&i.style("stroke",n.lineColor[r.getId()])}}function xs(t,e,n,r,i){if(!e||!n)return;let a=null;if("left"===i?a=t.leftYScale:"right"===i&&(a=t.rightYScale),n.showPoint[r.getId()]){let i=t.dataArea.selectAll("dot").data(Array.from(r).filter((function(t){return null!==t.value}))).enter().append("circle").attr("r",n.pointSize[r.getId()]).attr("cx",(function(e){return t.xScale(e.date)})).attr("cy",(function(t){return a(t.value)})).attr("date",(function(t){return ea("%y-%m-%d")(t.date)})).attr("value",(function(t){if(null!==t.value)return Number.isInteger(t.value)?t.value.toFixed(0):t.value.toFixed(2)})).attr("valueType",eo[r.valueType]).attr("class","tracker-dot");n.pointColor[r.getId()]&&(i.style("fill",n.pointColor[r.getId()]),n.pointBorderColor[r.getId()]&&n.pointBorderWidth[r.getId()]>0&&(i.style("stroke",n.pointBorderColor[r.getId()]),i.style("stroke-width",n.pointBorderWidth[r.getId()]))),n.allowInspectData&&function(t,e,n){let r=e.dataArea.append("svg").style("opacity",0),i=r.append("rect").attr("x",0).attr("y",0),a=r.append("text"),l=a.append("tspan").attr("class","tracker-tooltip-label"),o=a.append("tspan").attr("class","tracker-tooltip-label"),s=3,u=3;t.on("mouseenter",(function(t){const[e,f]=function(t,e){if(t=function(t){let e;for(;e=t.sourceEvent;)t=e;return t}(t),void 0===e&&(e=t.currentTarget),e){var n=e.ownerSVGElement||e;if(n.createSVGPoint){var r=n.createSVGPoint();return r.x=t.clientX,r.y=t.clientY,[(r=r.matrixTransform(e.getScreenCTM().inverse())).x,r.y]}if(e.getBoundingClientRect){var i=e.getBoundingClientRect();return[t.clientX-i.left-e.clientLeft,t.clientY-i.top-e.clientTop]}}return[t.pageX,t.pageY]}(t);let c=0,h=0,d="date: "+ee(this).attr("date"),g=Vo(d,"tracker-tooltip-label");l.text(d),g.width>c&&(c=g.width),h+=g.height,l.attr("x",s).attr("y",h);let p="value: ",y=ee(this).attr("valueType"),m=ee(this).attr("value");if("Time"===y){p+=window.moment("00:00","HH:mm",!0).add(parseFloat(m),"seconds").format("HH:mm"),o.text(p)}else p+=m,o.text(p);let v=Vo(p,"tracker-tooltip-label");v.width>c&&(c=v.width),h+=u+v.height,o.attr("x",s).attr("y",h),c+=2*s,h+=2*u,a.attr("width",c).attr("height",h),i.attr("width",c).attr("height",h).attr("class","tracker-tooltip");let x=e,A=f,w=12,b=12;x=e+w+c>n.dataAreaSize.width?e-c-w:e+w,A=f-b-h<0?f+b:f-b-h,r.attr("x",x).attr("y",A),r.transition().duration(200).style("opacity",1)})).on("mouseleave",(function(){r.transition().duration(500).style("opacity",0)}))}(i,t,e)}}function As(t,e,n,r,i,a,l){if(!e||!n)return;let o=e.dataAreaSize.width/r.getLength(),s=o,u=a,f=l;o-1>0&&(s=o-1),e.stack?(u=0,f=1):s/=l;let c=null;"left"===i?c=t.leftYScale:"right"===i&&(c=t.rightYScale);let h=t.dataArea.selectAll("bar").data(Array.from(r).filter((function(t){return null!==t.value}))).enter().append("rect").attr("x",(function(e,n){if(0===n){let n=u+1-f/2;if(n<1)return t.xScale(e.date)-o/2+u*s+n*s}return t.xScale(e.date)-o/2+u*s})).attr("y",(function(t){return c(Math.max(t.value,0))})).attr("width",(function(t,e){if(0===e){let t=u+1-f/2;return t<0?0:t<1?s*t:s}if(e===r.getLength()-1){let t=1-(u+1-f/2);return t<0?0:t<1?s*t:s}return s})).attr("height",(function(t){if(null!==t.value)return Math.abs(c(t.value)-c(0))})).attr("class","tracker-bar");n.barColor[r.getId()]&&h.style("fill",n.barColor[r.getId()])}function ws(t,e,n){let r=t.svg;t.graphArea;let i=t.dataArea,a=t.title,l=t.xAxis,o=t.leftYAxis,s=t.rightYAxis,u=0;a&&(u=parseFloat(a.attr("height")));let f=parseFloat(l.attr("height")),c=0;o&&(c=parseFloat(o.attr("width")));let h=0;s&&(h=parseFloat(s.attr("width")));let d=e.datasets,g=d.getXDatasetIds(),p=d.getNames(),y=p.map((function(t){return Vo(t,"tracker-legend-label")})),m=0,v=0;for(let t=0;t<p.length;t++)g.includes(t)||y[t].width>v&&(v=y[t].width,m=t);let x=v/p[m].length,A=y[m].height,w=p.length-g.length,b=2*x,k=A,C=2*x,M=0,T=0;"vertical"===n.legendOrientation?(M=3*b+C+v,T=(w+1)*k):"horizontal"===n.legendOrientation&&(M=(2*b+C)*w+b+D(y,(function(t,e){return g.includes(e)?0:t.width})),T=k+A);let _=0,E=0;if("top"===n.legendPosition)_=c+e.dataAreaSize.width/2-M/2,E=u,Oo(r,0,T+k),Po(i,0,T+k);else if("bottom"===n.legendPosition)_=c+e.dataAreaSize.width/2-M/2,E=u+e.dataAreaSize.height+f+k,Oo(r,0,T+k);else if("left"===n.legendPosition)_=0,E=u+e.dataAreaSize.height/2-T/2,Oo(r,M+b,0),Po(i,M+b,0);else{if("right"!==n.legendPosition)return;_=e.dataAreaSize.width+c+h+b,E=u+e.dataAreaSize.height/2-T/2,Oo(r,M+b,0)}let F=t.graphArea.append("g").attr("id","legend").attr("transform","translate("+_+","+E+")"),S=F.append("rect").attr("class","tracker-legend").attr("width",M).attr("height",T);n.legendBgColor&&S.style("fill",n.legendBgColor),n.legendBorderColor&&S.style("stroke",n.legendBorderColor);let B=b,N=A,L=B+b+C,I=N;if("vertical"===n.legendOrientation){n.GetGraphType()===to.Line?(F.selectAll("markers").data(p).enter().append("line").attr("x1",B).attr("x2",B+C).attr("y1",(function(t,e){let n=g.filter((t=>t<e)).length;return N+(e-=n)*k})).attr("y2",(function(t,e){let n=g.filter((t=>t<e)).length;return N+(e-=n)*k})).style("stroke",(function(t,e){if(!g.includes(e))return n.lineColor[e]})),F.selectAll("markers").data(p).enter().append("circle").attr("cx",B+C/2).attr("cy",(function(t,e){let n=g.filter((t=>t<e)).length;return N+(e-=n)*k})).attr("r",(function(t,e){if(!g.includes(e))return n.showPoint[e]?n.pointSize[e]:0})).style("fill",(function(t,e){if(!g.includes(e))return n.pointColor[e]}))):n.GetGraphType()===to.Bar&&F.selectAll("markers").data(p).enter().append("rect").attr("x",B).attr("y",(function(t,e){let n=g.filter((t=>t<e)).length;return N+(e-=n)*k-A/2})).attr("width",C).attr("height",A).style("fill",(function(t,e){if(!g.includes(e))return n.barColor[e]}));let t=F.selectAll("labels").data(p).enter().append("text").attr("x",L).attr("y",(function(t,e){let n=g.filter((t=>t<e)).length;return I+(e-=n)*k})).text((function(t,e){return g.includes(e)?"":t})).style("alignment-baseline","middle").attr("class","tracker-legend-label");n.GetGraphType()===to.Line?t.style("fill",(function(t,e){if(!g.includes(e))return n.lineColor[e]})):n.GetGraphType()===to.Bar&&t.style("fill",(function(t,e){if(!g.includes(e))return n.barColor[e]}))}else if("horizontal"===n.legendOrientation){n.GetGraphType()===to.Line?(F.selectAll("markers").data(p).enter().append("line").attr("x1",(function(t,e){let n=b;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=C+b+r.width+b}return n})).attr("x2",(function(t,e){let n=b+C;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=b+r.width+b+C}return n})).attr("y1",N).attr("y2",N).style("stroke",(function(t,e){if(!g.includes(e))return n.lineColor[e]})),F.selectAll("markers").data(p).enter().append("circle").attr("cx",(function(t,e){let n=b+C/2;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=C/2+b+r.width+b+C/2}return n})).attr("cy",N).attr("r",(function(t,e){if(!g.includes(e))return n.showPoint[e]?n.pointSize[e]:0})).style("fill",(function(t,e){if(!g.includes(e))return n.pointColor[e]}))):n.GetGraphType()===to.Bar&&F.selectAll("markers").data(p.filter(((t,e)=>!g.includes(e)))).enter().append("rect").attr("x",(function(t,e){let n=b;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=C+b+r.width+b}return n})).attr("y",N-A/2).attr("width",C).attr("height",A).style("fill",(function(t,e){if(!g.includes(e))return n.barColor[e]}));let t=F.selectAll("labels").data(p).enter().append("text").attr("x",(function(t,e){let n=b+C+b;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=r.width+b+C+b}return n})).attr("y",I).text((function(t,e){return g.includes(e)?"":t})).style("alignment-baseline","middle").attr("class","tracker-legend-label");n.GetGraphType()===to.Line?t.style("fill",(function(t,e){if(!g.includes(e))return n.lineColor[e]})):n.GetGraphType()===to.Bar&&t.style("fill",(function(t,e){if(!g.includes(e))return n.barColor[e]}))}}function bs(t,e,n){if(!e||!n)return;if(!n.title)return;let r=Vo(n.title,"tracker-title"),i=t.graphArea.append("text").text(n.title).attr("id","title").attr("transform","translate("+e.dataAreaSize.width/2+","+r.height/2+")").attr("height",r.height).attr("class","tracker-title");t.title=i,Oo(t.svg,0,r.height),Oo(t.graphArea,0,r.height),Po(t.dataArea,0,r.height)}function Ds(t,e,n){let r=ee(t),i=e.svg,a=parseFloat(i.attr("width")),l=parseFloat(i.attr("height"));i.attr("width",null).attr("height",null).attr("viewBox",`0 0 ${a} ${l}`).attr("preserveAspectRatio","xMidYMid meet"),n.fitPanelWidth?r.style("width","100%"):(r.style("width",(a*n.fixedScale).toString()+"px"),r.style("height",(l*n.fixedScale).toString()+"px"))}function ks(t,e){let n={},r=ee(t).append("svg").attr("id","svg").attr("width",e.dataAreaSize.width+e.margin.left+e.margin.right).attr("height",e.dataAreaSize.height+e.margin.top+e.margin.bottom);n.svg=r;let i=r.append("g").attr("id","graphArea").attr("transform","translate("+e.margin.left+","+e.margin.top+")").attr("width",e.dataAreaSize.width+e.margin.right).attr("height",e.dataAreaSize.height+e.margin.bottom);n.graphArea=i;let a=i.append("g").attr("id","dataArea").attr("width",e.dataAreaSize.width).attr("height",e.dataAreaSize.height);return n.dataArea=a,n}function Cs(t,e,n){if(!e||!n)return;let r=ks(t,e);bs(r,e,n),ys(r,e,n);let i=[],a=[],l=e.datasets.getXDatasetIds();for(let t=0;t<n.yAxisLocation.length;t++){if(l.includes(t))continue;let e=n.yAxisLocation[t];"left"===e.toLowerCase()?i.push(t):"right"===e.toLocaleLowerCase()&&a.push(t)}let o=ms(r,e,n,"left",i);if("string"==typeof o)return o;if(r.leftYAxis&&r.leftYScale)for(let t of i){let i=e.datasets.getDatasetById(t);i.getQuery().usedAsXDataset||(vs(r,e,n,i,"left"),xs(r,e,n,i,"left"))}let s=ms(r,e,n,"right",a);if("string"==typeof s)return s;if(r.rightYAxis&&r.rightYScale)for(let t of a){let i=e.datasets.getDatasetById(t);i.getQuery().usedAsXDataset||(vs(r,e,n,i,"right"),xs(r,e,n,i,"right"))}n.showLegend&&ws(r,e,n),Ds(t,r,e)}function Ms(t,e,n){if(!e||!n)return;let r=ks(t,e);bs(r,e,n),ys(r,e,n);let i=[],a=[],l=e.datasets.getXDatasetIds();if(e.stack)for(let t=n.yAxisLocation.length-1;t>=0;t--){if(l.includes(t))continue;let e=n.yAxisLocation[t];"left"===e.toLowerCase()?i.push(t):"right"===e.toLocaleLowerCase()&&a.push(t)}else for(let t=0;t<n.yAxisLocation.length;t++){if(l.includes(t))continue;let e=n.yAxisLocation[t];"left"===e.toLowerCase()?i.push(t):"right"===e.toLocaleLowerCase()&&a.push(t)}let o=ms(r,e,n,"left",i);if("string"==typeof o)return o;let s=i.length+a.length,u=0;if(r.leftYAxis&&r.leftYScale)for(let t of i){let i=e.datasets.getDatasetById(t);i.getQuery().usedAsXDataset||(As(r,e,n,i,"left",u,s),u++)}let f=ms(r,e,n,"right",a);if("string"==typeof f)return f;if(r.rightYAxis&&r.rightYScale)for(let t of a){let i=e.datasets.getDatasetById(t);i.getQuery().usedAsXDataset||(As(r,e,n,i,"right",u,s),u++)}n.showLegend&&ws(r,e,n),Ds(t,r,e)}function Ts(t){switch(t=t.trim().toLowerCase()){case"true":case"1":case"on":case"yes":return!0;case"false":case"0":case"off":case"no":return!1}return null}function _s(t){return"tag"===t.toLowerCase()||"text"===t.toLowerCase()||"frontmatter"===t.toLowerCase()||"wiki"===t.toLowerCase()||"wiki.link"===t.toLowerCase()||"wiki.display"===t.toLowerCase()||"dvfield"===t.toLowerCase()||"table"===t.toLowerCase()||"filemeta"===t.toLowerCase()||"task"===t.toLowerCase()||"task.all"===t.toLowerCase()||"task.done"===t.toLowerCase()||"task.notdone"===t.toLowerCase()}function Es(t){return"left"===t||"right"===t||"none"===t}function Fs(t){return!0}function Ss(t){const e="::::::tracker::::::";let n=t.split("\\,").join(e).split(",");for(let t=0;t<n.length;t++)n[t]=n[t].split(e).join(",");return n}function Bs(t,e,n,r,i){let a=[],l="",o=0;for(;n>a.length;)a.push(r);if(null==e);else if("object"==typeof e&&null!==e){if(Array.isArray(e)){if(e.length>n)return l="Too many inputs for parameter '"+t+"'",l;if(0===e.length)return l="Empty array not allowd for "+t,l;for(let n=0;n<a.length;n++)if(n<e.length){let i=e[n],s=null;if(n>0&&(s=e[n-1].trim()),"string"==typeof i){if(i=i.trim(),""!==i){l="Invalid inputs for "+t;break}a[n]=null!==s?s:r}else{if("boolean"!=typeof i){l="Invalid inputs for "+t;break}a[n]=i,o++}}else{let t=e[e.length-1];a[n]=o>0?t:r}}}else if("string"==typeof e){let i=Ss(e);if(i.length>1){if(i.length>n)return l="Too many inputs for parameter '"+t+"'",l;for(let e=0;e<a.length;e++)if(e<i.length){let n=i[e].trim(),s=null;if(e>0&&(s=Ts(i[e-1].trim())),""===n)a[e]=null!==s?s:r;else{let r=Ts(n);if(null===r){l="Invalid inputs for "+t;break}a[e]=r,o++}}else{let t=Ts(i[i.length-1].trim());a[e]=o>0&&null!==t?t:r}}else if(""===e);else{let n=Ts(e);if(null!==n){a[0]=n,o++;for(let t=1;t<a.length;t++)a[t]=n}else l="Invalid inputs for "+t}}else if("boolean"==typeof e){a[0]=e,o++;for(let t=1;t<a.length;t++)a[t]=e}else l="Invalid inputs for "+t;return""!==l?l:a}function Ns(t,e,n,r,i){let a=[],l="",o=0;for(;n>a.length;)a.push(r);if(null==e);else if("object"==typeof e&&null!==e){if(Array.isArray(e)){if(e.length>n)return l="Too many inputs for parameter '"+t+"'",l;if(0===e.length)return l="Empty array not allowd for "+t,l;for(let n=0;n<a.length;n++)if(n<e.length){let i=e[n],s=null;if(n>0&&(s=e[n-1].trim()),"string"==typeof i){if(i=i.trim(),""!==i){l="Invalid inputs for "+t;break}a[n]=null!==s?s:r}else{if("number"!=typeof i){l="Invalid inputs for "+t;break}a[n]=i,o++}}else{let t=e[e.length-1];a[n]=o>0?t:r}}}else if("string"==typeof e){let i=Ss(e);if(i.length>1){if(i.length>n)return l="Too many inputs for parameter '"+t+"'",l;for(let n=0;n<a.length;n++)if(n<i.length){let e=i[n].trim(),s=null;if(n>0&&(s=Io(i[n-1].trim()).value),""===e)null!==s&&Number.isNumber(s)?a[n]=s:a[n]=r;else{let r=Io(e).value;if(null===r){l="Invalid inputs for "+t;break}a[n]=r,o++}}else{let t=Io(i[e.length-1].trim()).value;a[n]=o>0&&null!==t?t:r}}else if(""===e);else{let n=Io(e).value;if(null!==n){a[0]=n,o++;for(let t=1;t<a.length;t++)a[t]=n}else l="Invalid inputs for "+t}}else if("number"==typeof e)if(Number.isNumber(e)){a[0]=e,o++;for(let t=1;t<a.length;t++)a[t]=e}else l="Invalid inputs for "+t;else l="Invalid inputs for "+t;return""!==l?l:a}function Ls(t,e){return"string"==typeof t?Lo(t):"number"==typeof t?t.toString():e}function Is(t,e,n,r,i,a){let l=[],o="",s=0;for(;n>l.length;)l.push(r);if(null==e);else if("object"==typeof e&&null!==e){if(Array.isArray(e)){if(e.length>n)return o="Too many inputs for parameter '"+t+"'",o;if(0===e.length)return o="Empty array not allowd for "+t,o;for(let n=0;n<l.length;n++)if(n<e.length){let a=e[n],u=null;if(n>0&&(u=e[n-1].trim()),"string"!=typeof a){o="Invalid inputs for "+t;break}if(a=a.trim(),""===a)l[n]=null!==u?u:r;else if(i){if(!i(a)){o="Invalid inputs for "+t;break}l[n]=a,s++}else l[n]=a,s++}else{let t=e[e.length-1].trim();l[n]=s>0?t:r}}}else if("string"==typeof e){let a=Ss(e);if(a.length>1){if(a.length>n)return o="Too many inputs for parameter '"+t+"'",o;for(let e=0;e<l.length;e++)if(e<a.length){let n=a[e].trim(),u=null;if(e>0&&(u=a[e-1].trim()),""===n)l[e]=null!==u?u:r;else if(i){if(!i(n)){o="Invalid inputs for "+t;break}l[e]=n,s++}else l[e]=n,s++}else{let t=a[a.length-1].trim();l[e]=s>0?t:r}}else if(""===e);else if(i)if(i(e)){l[0]=e,s++;for(let t=1;t<l.length;t++)l[t]=e}else o="Invalid inputs for "+t;else{l[0]=e,s++;for(let t=1;t<l.length;t++)l[t]=e}}else if("number"==typeof e){let n=e.toString();if(i)if(i(n)){l[0]=n,s++;for(let t=1;t<l.length;t++)l[t]=n}else o="Invalid inputs for "+t;else{l[0]=n,s++;for(let t=1;t<l.length;t++)l[t]=n}}else o="Invalid inputs for "+t;if(a||0!==s||(o="No valid input for "+t),""!==o)return o;for(let t=0;t<l.length;t++)l[t]=Lo(l[t]);return l}function Vs(t,e){let n=[];if(null==e)return n;if("object"==typeof e){if(Array.isArray(e))for(let r of e)if("string"==typeof r){let e=parseFloat(r);if(!Number.isNumber(e)){return`Parameter '${t}' accepts only numbers`}n.push(e)}}else if("string"==typeof e){let r=Ss(e);if(r.length>1)for(let e of r){let r=parseFloat(e.trim());if(Number.isNaN(r)){return`Parameter '${t}' accepts only numbers`}n.push(r)}else{if(""===e){return`Empty ${t} is not allowed.`}{let r=parseFloat(e);if(!Number.isNumber(r)){return`Parameter '${t}' accepts only numbers`}n.push(r)}}}else{if("number"!=typeof e){return`Invalid ${t}`}n.push(e)}return n}function Os(t,e){let n=[];if(null==e)return n;if("object"==typeof e){if(Array.isArray(e))for(let t of e)"string"==typeof t&&n.push(t.trim())}else{if("string"!=typeof e){return`Invalid ${t}`}{let r=Ss(e);if(r.length>1)for(let t of r)n.push(t.trim());else{if(""===e){return`Empty ${t} is not allowed.`}n.push(e)}}}for(let t=0;t<n.length;t++)n[t]=Lo(n[t]);return n}function Ps(t,e){t&&(e.title=Ls(null==t?void 0:t.title,e.title),e.xAxisLabel=Ls(null==t?void 0:t.xAxisLabel,e.xAxisLabel),e.xAxisColor=Ls(null==t?void 0:t.xAxisColor,e.xAxisColor),e.xAxisLabelColor=Ls(null==t?void 0:t.xAxisLabelColor,e.xAxisLabelColor),"boolean"==typeof t.allowInspectData&&(e.allowInspectData=t.allowInspectData),"boolean"==typeof t.showLegend&&(e.showLegend=t.showLegend),"string"==typeof t.legendPosition?e.legendPosition=t.legendPosition:e.legendPosition="bottom","string"==typeof t.legendOrientation?e.legendOrientation=t.legendOrientation:"top"===e.legendPosition||"bottom"===e.legendPosition?e.legendOrientation="horizontal":"left"===e.legendPosition||"right"===e.legendPosition?e.legendOrientation="vertical":e.legendOrientation="horizontal",e.legendBgColor=Ls(null==t?void 0:t.legendBgColor,e.legendBgColor),e.legendBorderColor=Ls(null==t?void 0:t.legendBorderColor,e.legendBorderColor));let n=Is("yAxisLabel",null==t?void 0:t.yAxisLabel,2,"Value",null,!0);if("string"==typeof n)return n;if(n.length>2)return"yAxisLabel accepts not more than two values for left and right y-axes";e.yAxisLabel=n;let r=Is("yAxisColor",null==t?void 0:t.yAxisColor,2,"",Fs,!0);if("string"==typeof r)return r;if(r.length>2)return"yAxisColor accepts not more than two values for left and right y-axes";e.yAxisColor=r;let i=Is("yAxisLabelColor",null==t?void 0:t.yAxisLabelColor,2,"",Fs,!0);if("string"==typeof i)return i;if(i.length>2)return"yAxisLabelColor accepts not more than two values for left and right y-axes";e.yAxisLabelColor=i;let a=Is("yAxisUnit",null==t?void 0:t.yAxisUnit,2,"",null,!0);if("string"==typeof a)return a;if(a.length>2)return"yAxisUnit accepts not more than two values for left and right y-axes";e.yAxisUnit=a,e.xAxisTickInterval=Ls(null==t?void 0:t.xAxisTickInterval,e.xAxisTickInterval);let l=Is("yAxisTickInterval",null==t?void 0:t.yAxisTickInterval,2,null,null,!0);if("string"==typeof l)return l;if(l.length>2)return"yAxisTickInterval accepts not more than two values for left and right y-axes";e.yAxisTickInterval=l,e.xAxisTickLabelFormat=Ls(null==t?void 0:t.xAxisTickLabelFormat,e.xAxisTickLabelFormat);let o=Is("yAxisTickLabelFormat",null==t?void 0:t.yAxisTickLabelFormat,2,null,null,!0);if("string"==typeof o)return o;if(o.length>2)return"yAxisTickLabelFormat accepts not more than two values for left and right y-axes";e.yAxisTickLabelFormat=o;let s=Ns("yMin",null==t?void 0:t.yMin,2,null);if("string"==typeof s)return s;if(s.length>2)return"yMin accepts not more than two values for left and right y-axes";e.yMin=s;let u=Ns("yMax",null==t?void 0:t.yMax,2,null);if("string"==typeof u)return u;if(u.length>2)return"yMax accepts not more than two values for left and right y-axes";e.yMax=u;let f=Bs("reverseYAxis",null==t?void 0:t.reverseYAxis,2,!1);return"string"==typeof f?f:f.length>2?"reverseYAxis accepts not more than two values for left and right y-axes":void(e.reverseYAxis=f)}function $s(t){let e=[];if(null!==t){const n=Object.keys(t);for(let t of n)e.push(t.toString())}return e}function Ys(t,e){return Co(ko(t.basename,e.dateFormatPrefix,e.dateFormatSuffix),e.dateFormat)}function Rs(t,e,n){let r=window.moment(""),i=t.frontmatter;if(i&&Bo(i,e.getTarget())){let t=Bo(i,e.getTarget());"string"==typeof t&&(t=ko(t,n.dateFormatPrefix,n.dateFormatSuffix),r=Co(t,n.dateFormat))}return r}function zs(t,e,n){let r,i=window.moment(""),a=new RegExp(e,"gm");for(;r=a.exec(t);)if(void 0!==r.groups&&void 0!==r.groups.value){let t=r.groups.value.trim();if(t=ko(t,n.dateFormatPrefix,n.dateFormatSuffix),i=Co(t,n.dateFormat),i.isValid())return i}return i}function Us(t,e,n){window.moment("");let r=e.getTarget();return e.getParentTarget()&&(r=e.getParentTarget()),zs(t,"(^|\\s)#"+r+"(\\/[\\w-]+)*(:(?<value>[\\d\\.\\/-]*)[a-zA-Z]*)?([\\.!,\\?;~-]*)?(\\s|$)",n)}function Hs(t,e,n){return window.moment(""),zs(t,e.getTarget(),n)}function Xs(t,e,n){window.moment("");let r=e.getTarget();return e.getParentTarget()&&(r=e.getParentTarget()),r=r.replace("-","[\\s\\-]"),zs(t,"(^| |\\t)\\*{0,2}"+r+"\\*{0,2}(::[ |\\t]*(?<value>[\\d\\.\\/\\-\\w,@; \\t:]*))(\\r\\?\\n|\\r|$)",n)}function Ws(e,n,r){let i=window.moment("");if(e&&e instanceof t.TFile){let t=n.getTarget();if("cDate"===t){i=Fo(e.stat.ctime,r.dateFormat)}else if("mDate"===t){i=Fo(e.stat.mtime,r.dateFormat)}else"name"===t&&(i=Ys(e,r))}return i}function js(t,e,n){window.moment("");let r=e.getType(),i=e.getTarget();return i=r===Jl.Task?"\\[[\\sx]\\]\\s"+i:r===Jl.TaskDone?"\\[x\\]\\s"+i:r===Jl.TaskNotDone?"\\[\\s\\]\\s"+i:"\\[[\\sx]\\]\\s"+i,zs(t,i,n)}function qs(t,e,n,r){if(t.has(e)){t.get(e).push({query:n,value:r})}else{let i=new Array;i.push({query:n,value:r}),t.set(e,i)}}function Gs(t,e,n,r,i,a){let l,o=new RegExp(e,"gmu"),s=0,u=!1;for(;l=o.exec(t);)if(a.ignoreAttachedValue[n.getId()])s+=a.constValue[n.getId()],u=!0,n.addNumTargets();else if(void 0!==l.groups&&void 0!==l.groups.value){let t=l.groups.value.trim().split(n.getSeparator());if(!t)continue;if(1===t.length){let e=Io(t[0].trim(),a.textValueMap);null!==e.value&&(e.type===eo.Time?(s=e.value,u=!0,n.valueType=eo.Time,n.addNumTargets()):a.ignoreZeroValue[n.getId()]&&0===e.value||(s+=e.value,u=!0,n.addNumTargets()))}else if(t.length>n.getAccessor()&&n.getAccessor()>=0){let e=Io(t[n.getAccessor()].trim(),a.textValueMap);null!==e.value&&(e.type===eo.Time?(s=e.value,u=!0,n.valueType=eo.Time,n.addNumTargets()):(s+=e.value,u=!0,n.addNumTargets()))}}else s+=a.constValue[n.getId()],u=!0,n.addNumTargets();if(u){return qs(r,i.get(a.xDataset[n.getId()]),n,s),!0}return!1}function Qs(e,n,r,i,a,l){if(e&&e instanceof t.TFile){let t=r.getTarget(),o=l.get(i.xDataset[r.getId()]);if("cDate"===t){let t=e.stat.ctime;return r.valueType=eo.Date,r.addNumTargets(),qs(a,o,r,t),!0}if("mDate"===t){let t=e.stat.mtime;return r.valueType=eo.Date,r.addNumTargets(),qs(a,o,r,t),!0}if("size"===t){let t=e.stat.size;return r.addNumTargets(),qs(a,o,r,t),!0}if("numWords"===t){return qs(a,o,r,function(t){t=$o(t);var e=new RegExp(["(?:[0-9]+(?:(?:,|\\.)[0-9]+)*|[\\-"+/A-Za-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC/.source+"])+",/[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u4E00-\u9FD5]{1}/.source].join("|"),"g");return(t.match(e)||[]).length}(n)),!0}if("numChars"===t){let t=n.length;return r.addNumTargets(),qs(a,o,r,t),!0}if("numSentences"===t){let t=function(t){return(((t=$o(t))||"").match(/[^.。!?\s][^.。!?]*(?:[.!?](?!['"“”「」『』]?\s|$)[^.。!?]*)*[.。!?]?['"”」』]?(?=\s||$)/gm)||[]).length}(n);return r.addNumTargets(),qs(a,o,r,t),!0}if("name"===t){let t=0,n=!1,l=Io(e.basename,i.textValueMap);null!==l.value&&(l.type===eo.Time?(t=l.value,n=!0,r.valueType=eo.Time,r.addNumTargets()):i.ignoreZeroValue[r.getId()]&&0===l.value||(t+=l.value,n=!0,r.addNumTargets()));let s=null;if(n&&(s=t),null!==s)return qs(a,o,r,s),!0}}return!1}const Zs={folder:"/",dateFormat:"YYYY-MM-DD"};class Ks extends t.PluginSettingTab{constructor(t,e){super(t,e),this.plugin=e}display(){let{containerEl:n}=this;n.empty(),new t.Setting(n).setName("Default folder location").setDesc("Files in this folder will be parsed and used as input data of the tracker plugin.\nYou can also override it using 'folder' argument in the tracker codeblock.").addText((t=>t.setPlaceholder("Folder Path").setValue(this.plugin.settings.folder).onChange((t=>e(this,void 0,void 0,(function*(){this.plugin.settings.folder=t,yield this.plugin.saveSettings()})))))),new t.Setting(n).setName("Default date format").setDesc("This format is used to parse the date in your diary title.\nYou can also override it using 'dateFormat' argument in the tracker codeblock.").addText((t=>t.setPlaceholder("YYYY-MM-DD").setValue(this.plugin.settings.dateFormat).onChange((t=>e(this,void 0,void 0,(function*(){this.plugin.settings.dateFormat=t,yield this.plugin.saveSettings()}))))))}}class Js extends t.Plugin{onload(){return e(this,void 0,void 0,(function*(){console.log("loading obsidian-tracker plugin"),yield this.loadSettings(),this.addSettingTab(new Ks(this.app,this)),this.registerMarkdownCodeBlockProcessor("tracker",this.postprocessor.bind(this)),this.addCommand({id:"add-line-chart-tracker",name:"Add Line Chart Tracker",callback:()=>this.addCodeBlock(to.Line)}),this.addCommand({id:"add-bar-chart-tracker",name:"Add Bar Chart Tracker",callback:()=>this.addCodeBlock(to.Bar)}),this.addCommand({id:"add-summary-tracker",name:"Add Summary Tracker",callback:()=>this.addCodeBlock(to.Summary)})}))}loadSettings(){return e(this,void 0,void 0,(function*(){this.settings=Object.assign({},Zs,yield this.loadData())}))}saveSettings(){return e(this,void 0,void 0,(function*(){yield this.saveData(this.settings)}))}renderErrorMessage(t,e,n){!function(t,e){ee(t).select("#svg").remove(),ee(t).append("div").text(e).style("background-color","white").style("margin-bottom","20px").style("padding","10px").style("color","red")}(e,t),n.appendChild(e)}onunload(){console.log("unloading obsidian-tracker plugin")}getFilesInFolder(e,n=!0){let r=[];for(let i of e.children)i instanceof t.TFile?"md"===i.extension&&r.push(i):i instanceof t.TFolder&&n&&(r=r.concat(this.getFilesInFolder(i)));return r}getFiles(n,r){return e(this,arguments,void 0,(function*(e,n,r=!0){if(!e)return;let i=n.folder,a=n.specifiedFilesOnly,l=n.file,o=n.fileContainsLinkedFiles,s=n.fileMultiplierAfterLink;if(!a){let n=this.app.vault.getAbstractFileByPath(t.normalizePath(i));if(n&&n instanceof t.TFolder){let t=this.getFilesInFolder(n);for(let n of t)e.push(n)}}for(let n of l){let r=n;r.endsWith(".md")||(r+=".md"),r=t.normalizePath(r);let i=this.app.vault.getAbstractFileByPath(r);i&&i instanceof t.TFile&&e.push(i)}let u=1,f=!0;""===s?f=!1:/^[0-9]+$/.test(s)?(u=parseFloat(s),f=!1):/\?<value>/.test(s)||(f=!1);for(let r of o){r.endsWith(".md")||(r+=".md");let i=this.app.vault.getAbstractFileByPath(t.normalizePath(r));if(i&&i instanceof t.TFile){let a=this.app.metadataCache.getFileCache(i),l=(yield this.app.vault.adapter.read(i.path)).split(/\r\n|[\n\v\f\r\x85\u2028\u2029]/);if(!(null==a?void 0:a.links))continue;for(let i of a.links){if(!i)continue;let a=this.app.metadataCache.getFirstLinkpathDest(i.link,r);if(a&&a instanceof t.TFile){if(f){let t=i.position.end.line;if(t>=0&&t<l.length){let e=l[t].split(i.original);if(2===e.length){let t,r=e[1].trim(),i=new RegExp(s,"gm");for(;t=i.exec(r);)if(void 0!==t.groups&&void 0!==t.groups.value){let e=Io(t.groups.value.trim(),n.textValueMap);if(null!==e.value){u=e.value;break}}}}}for(let t=0;t<u;t++)e.push(a)}}}}}))}postprocessor(n,r,i){return e(this,void 0,void 0,(function*(){const i=document.createElement("div");let a=n.trim(),l=this.app.vault.getConfig("tabSize"),o=Array(l).fill(" ").join("");a=a.replace(/\t/gm,o);let s=function(e,n){let r;try{r=t.parseYaml(e)}catch(t){let e="Error parsing YAML";return console.log(t),e}if(!r)return"Error parsing YAML";let i=$s(r),a="";if(!i.includes("searchTarget"))return"Parameter 'searchTarget' not found in YAML";let l=[];if("object"==typeof r.searchTarget&&null!==r.searchTarget){if(Array.isArray(r.searchTarget))for(let t of r.searchTarget)if("string"==typeof t){if(""===t){a="Empty search target is not allowed.";break}l.push(t)}}else if("string"==typeof r.searchTarget){let t=Ss(r.searchTarget);if(t.length>1)for(let e of t){if(e=e.trim(),""===e){a="Empty search target is not allowed.";break}l.push(e)}else""===r.searchTarget?a="Empty search target is not allowed.":l.push(r.searchTarget)}else a="Invalid search target (searchTarget)";for(let t=0;t<l.length;t++)l[t]=Lo(l[t]);if(""!==a)return a;let o=l.length;if(!i.includes("searchType"))return"Parameter 'searchType' not found in YAML";let s=[],u=Is("searchType",r.searchType,o,"",_s,!1);if("string"==typeof u)return u;for(let t of u)switch(t.toLowerCase()){case"tag":s.push(Jl.Tag);break;case"frontmatter":s.push(Jl.Frontmatter);break;case"wiki":s.push(Jl.Wiki);break;case"wiki.link":s.push(Jl.WikiLink);break;case"wiki.display":s.push(Jl.WikiDisplay);break;case"text":s.push(Jl.Text);break;case"dvfield":s.push(Jl.dvField);break;case"table":s.push(Jl.Table);break;case"filemeta":s.push(Jl.FileMeta);break;case"task":case"task.all":s.push(Jl.Task);break;case"task.done":s.push(Jl.TaskDone);break;case"task.notdone":s.push(Jl.TaskNotDone)}if(s.includes(Jl.Table)&&s.filter((t=>t!==Jl.Table)).length>0)return"searchType 'table' doestn't work with other types for now";let f=[],c=Is("separator",r.separator,o,"",null,!0);if("string"==typeof c)return c;f=c.map((t=>"comma"===t||"\\,"===t?",":t));let h=Ns("xDataset",r.xDataset,o,-1);if("string"==typeof h)return h;let d=h.map((t=>t<0||t>=o?-1:t)),g=[];for(let t=0;t<l.length;t++){let e=new ro(g.length,s[t],l[t]);e.setSeparator(f[t]),d.includes(t)&&(e.usedAsXDataset=!0),g.push(e)}let p=new lo(g),y=$s(p),m=["searchType","searchTarget","separator"],v=[],x=[],A=[],w=[],b=[],D=[],k=[];for(let t of i)/^line[0-9]*$/.test(t)&&(v.push(t),m.push(t)),/^bar[0-9]*$/.test(t)&&(x.push(t),m.push(t)),/^pie[0-9]*$/.test(t)&&(A.push(t),m.push(t)),/^summary[0-9]*$/.test(t)&&(w.push(t),m.push(t)),/^bullet[0-9]*$/.test(t)&&(k.push(t),m.push(t)),/^month[0-9]*$/.test(t)&&(b.push(t),m.push(t)),/^heatmap[0-9]*$/.test(t)&&(D.push(t),m.push(t));let C=[];for(let t of i)if(/^dataset[0-9]*$/.test(t)){let e=-1,n=t.replace("dataset","");if(e=""===n?0:parseFloat(n),g.some((t=>t.getId()===e)))return a="Duplicated dataset id for key '"+t+"'",a;C.push(t),m.push(t)}for(let t of i)if(!y.includes(t)&&!m.includes(t))return a="'"+t+"' is not an available key",a;if(0===v.length+x.length+A.length+w.length+k.length+b.length+D.length)return"No output parameter provided, please place line, bar, pie, month, bullet, or summary.";p.folder=Ls(null==r?void 0:r.folder,n.settings.folder),""===p.folder.trim()&&(p.folder=n.settings.folder);let M=n.app.vault.getAbstractFileByPath(t.normalizePath(p.folder));if(!(M&&M instanceof t.TFolder))return"Folder '"+p.folder+"' doesn't exist";if("string"==typeof r.file){let t=Os("file",r.file);if("string"==typeof t)return t;p.file=t}if("boolean"==typeof r.specifiedFilesOnly&&(p.specifiedFilesOnly=r.specifiedFilesOnly),"string"==typeof r.fileContainsLinkedFiles){let t=Os("fileContainsLinkedFiles",r.fileContainsLinkedFiles);if("string"==typeof t)return t;p.fileContainsLinkedFiles=t}p.fileMultiplierAfterLink=Ls(null==r?void 0:r.fileMultiplierAfterLink,p.fileMultiplierAfterLink);const T=r.dateFormat;if("string"==typeof r.dateFormat?""===r.dateFormat?p.dateFormat=n.settings.dateFormat:p.dateFormat=T:p.dateFormat=n.settings.dateFormat,p.dateFormatPrefix=Ls(null==r?void 0:r.dateFormatPrefix,p.dateFormatPrefix),p.dateFormatSuffix=Ls(null==r?void 0:r.dateFormatSuffix,p.dateFormatSuffix),"string"==typeof r.startDate){if(/^([\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)m$/.test(r.startDate))return"'m' for 'minute' is too small for parameter startDate, please use 'd' for 'day' or 'M' for month";let t=ko(r.startDate,p.dateFormatPrefix,p.dateFormatSuffix),e=null,n=!1;if(e=_o(t,p.dateFormat),e?n=!0:(e=Co(t,p.dateFormat),e.isValid()&&(n=!0)),!n||null===e)return"Invalid startDate, the format of startDate may not match your dateFormat "+p.dateFormat;p.startDate=e}if("string"==typeof r.endDate){if(/^([\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)m$/.test(r.endDate))return"'m' for 'minute' is too small for parameter endDate, please use 'd' for 'day' or 'M' for month";let t=ko(r.endDate,p.dateFormatPrefix,p.dateFormatSuffix),e=null,n=!1;if(e=_o(t,p.dateFormat),e?n=!0:(e=Co(t,p.dateFormat),e.isValid()&&(n=!0)),!n||null===e)return"Invalid endDate, the format of endDate may not match your dateFormat "+p.dateFormat;p.endDate=e}if(null!==p.startDate&&p.startDate.isValid()&&null!==p.endDate&&p.endDate.isValid()&&p.endDate<p.startDate)return"Invalid date range (startDate larger than endDate)";p.xDataset=d;let _=Is("datasetName",r.datasetName,o,"untitled",null,!0);if("string"==typeof _)return _;let E=0;for(let t=0;t<_.length;t++)p.xDataset.includes(t)||"untitled"===_[t]&&(_[t]="untitled"+E.toString(),E++);if(new Set(_).size!==_.length)return"Not enough dataset names or duplicated names";p.datasetName=_;let F=Ns("constValue",r.constValue,o,1);if("string"==typeof F)return F;p.constValue=F;let S=Bs("ignoreAttachedValue",r.ignoreAttachedValue,o,!1);if("string"==typeof S)return S;p.ignoreAttachedValue=S;let B=Bs("ignoreZeroValue",r.ignoreZeroValue,o,!1);if("string"==typeof B)return B;p.ignoreZeroValue=B;let N=Bs("accum",r.accum,o,!1);if("string"==typeof N)return N;p.accum=N,"boolean"==typeof r.stack&&(p.stack=r.stack);let L=Ns("penalty",r.penalty,o,null);if("string"==typeof L)return L;p.penalty=L;let I=Ns("valueShift",r.valueShift,o,0);if("string"==typeof I)return I;p.valueShift=I;let V=Ns("shiftOnlyValueLargerThan",r.shiftOnlyValueLargerThan,o,null);if("string"==typeof V)return V;if(p.shiftOnlyValueLargerThan=V,void 0!==r.textValueMap){let t=$s(r.textValueMap);for(let e of t){let t=e.trim();p.textValueMap[t]=r.textValueMap[t]}}if("number"==typeof r.fixedScale&&(p.fixedScale=r.fixedScale),"boolean"==typeof r.fitPanelWidth&&(p.fitPanelWidth=r.fitPanelWidth),"string"==typeof r.aspectRatio){let t=/([0-9]*):([0-9]*)/,e=r.aspectRatio.match(t);e.shift(),e=e.map((t=>parseInt(t,10))),2==e.length&&(p.aspectRatio=new vo(e[0],e[1]),p.dataAreaSize=p.aspectRatio.recalculateSize(p.dataAreaSize))}let O=Ns("margin",r.margin,4,10);if("string"==typeof O)return O;if(O.length>4)return"margin accepts not more than four values for top, right, bottom, and left margins.";p.margin=new xo(O[0],O[1],O[2],O[3]);for(let t of C){let e=new oo,n=r[t],i=$s(e),l=$s(n);for(let t of l)if(!i.includes(t))return a="'"+t+"' is not an available key",a;let o=-1,s=t.replace("dataset","");o=""===s?0:parseFloat(s),e.id=o,e.name=Ls(null==n?void 0:n.name,e.name);let u=Os("xData",null==n?void 0:n.xData);if("string"==typeof u)return u;e.xData=u;let f=e.xData.length,c=Os("yData",null==n?void 0:n.yData);if("string"==typeof c)return c;if(e.yData=c,e.yData.length!==f)return"Number of elements in xData and yData not matched";p.customDataset.push(e)}for(let t of v){let e=new uo,n=r[t],i=$s(e),l=$s(n);for(let t of l)if(!i.includes(t))return a="'"+t+"' is not an available key",a;let s=Ps(n,e);if("string"==typeof s)return s;let u=Is("lineColor",null==n?void 0:n.lineColor,o,"",Fs,!0);if("string"==typeof u)return u;e.lineColor=u;let f=Ns("lineWidth",null==n?void 0:n.lineWidth,o,1.5);if("string"==typeof f)return f;e.lineWidth=f;let c=Bs("showLine",null==n?void 0:n.showLine,o,!0);if("string"==typeof c)return c;e.showLine=c;let h=Bs("showPoint",null==n?void 0:n.showPoint,o,!0);if("string"==typeof h)return h;e.showPoint=h;let d=Is("pointColor",null==n?void 0:n.pointColor,o,"#69b3a2",Fs,!0);if("string"==typeof d)return d;e.pointColor=d;let g=Is("pointBorderColor",null==n?void 0:n.pointBorderColor,o,"#69b3a2",Fs,!0);if("string"==typeof g)return g;e.pointBorderColor=g;let y=Ns("pointBorderWidth",null==n?void 0:n.pointBorderWidth,o,0);if("string"==typeof y)return y;e.pointBorderWidth=y;let m=Ns("pointSize",null==n?void 0:n.pointSize,o,3);if("string"==typeof m)return m;e.pointSize=m;let v=Bs("fillGap",null==n?void 0:n.fillGap,o,!1);if("string"==typeof v)return v;e.fillGap=v;let x=Is("yAxisLocation",null==n?void 0:n.yAxisLocation,o,"left",Es,!0);if("string"==typeof x)return x;e.yAxisLocation=x,p.line.push(e)}for(let t of x){let e=new fo,n=r[t],i=$s(e),l=$s(n);for(let t of l)if(!i.includes(t))return a="'"+t+"' is not an available key",a;let s=Ps(n,e);if("string"==typeof s)return s;let u=Is("barColor",null==n?void 0:n.barColor,o,"",Fs,!0);if("string"==typeof u)return u;e.barColor=u;let f=Is("yAxisLocation",null==n?void 0:n.yAxisLocation,o,"left",Es,!0);if("string"==typeof f)return f;e.yAxisLocation=f,p.bar.push(e)}for(let t of A){let e=new co,n=r[t],i=$s(e),l=$s(n);for(let t of l)if(!i.includes(t))return a="'"+t+"' is not an available key",a;e.title=Ls(null==n?void 0:n.title,e.title);let o=Os("data",null==n?void 0:n.data);if("string"==typeof o)return o;e.data=o;let s=e.data.length,u=Is("dataColor",null==n?void 0:n.dataColor,s,null,Fs,!0);if("string"==typeof u)return u;e.dataColor=u;let f=Is("dataName",null==n?void 0:n.dataName,s,"",null,!0);if("string"==typeof f)return f;e.dataName=f;let c=Is("label",null==n?void 0:n.label,s,"",null,!0);if("string"==typeof c)return c;e.label=c,"number"==typeof(null==n?void 0:n.hideLabelLessThan)&&(e.hideLabelLessThan=n.hideLabelLessThan);let h=Is("extLabel",null==n?void 0:n.extLabel,s,"",null,!0);if("string"==typeof h)return h;e.extLabel=h,"boolean"==typeof(null==n?void 0:n.showExtLabelOnlyIfNoLabel)&&(e.showExtLabelOnlyIfNoLabel=n.showExtLabelOnlyIfNoLabel),"number"==typeof(null==n?void 0:n.ratioInnerRadius)&&(e.ratioInnerRadius=n.ratioInnerRadius),"boolean"==typeof(null==n?void 0:n.showLegend)&&(e.showLegend=n.showLegend),e.legendPosition=Ls(null==n?void 0:n.legendPosition,"right");let d="horizontal";d="top"===e.legendPosition||"bottom"===e.legendPosition?"horizontal":"left"===e.legendPosition||"right"===e.legendPosition?"vertical":"horizontal",e.legendOrientation=Ls(null==n?void 0:n.legendOrientation,d),e.legendBgColor=Ls(null==n?void 0:n.legendBgColor,e.legendBgColor),e.legendBorderColor=Ls(null==n?void 0:n.legendBorderColor,e.legendBorderColor),p.pie.push(e)}for(let t of w){let e=new ho,n=r[t],i=$s(e),l=$s(n);for(let t of l)if(!i.includes(t))return a="'"+t+"' is not an available key",a;e.template=Ls(null==n?void 0:n.template,e.template),e.style=Ls(null==n?void 0:n.style,e.style),p.summary.push(e)}for(let t of b){let e=new go,n=r[t],i=$s(e),l=$s(n);for(let t of l)if(!i.includes(t))return a="'"+t+"' is not an available key",a;e.mode=Ls(null==n?void 0:n.mode,e.mode);let o=Vs("dataset",null==n?void 0:n.dataset);if("string"==typeof o)return o;if(0===o.length)for(let t of g)o.push(t.getId());e.dataset=o;let s=e.dataset.length;e.startWeekOn=Ls(null==n?void 0:n.startWeekOn,e.startWeekOn),"boolean"==typeof(null==n?void 0:n.showCircle)&&(e.showCircle=n.showCircle);let u=Vs("threshold",null==n?void 0:n.threshold);if("string"==typeof u)return u;if(e.threshold=u,0===e.threshold.length)for(let t=0;t<s;t++)e.threshold.push(0);if(e.threshold.length!==e.dataset.length)return"The number of inputs of threshold and dataset not matched";let f=Vs("yMin",null==n?void 0:n.yMin);if("string"==typeof f)return f;if(e.yMin=f,0===e.yMin.length)for(let t=0;t<s;t++)e.yMin.push(null);if(e.yMin.length!==e.dataset.length)return"The number of inputs of yMin and dataset not matched";let c=Vs("yMax",null==n?void 0:n.yMax);if("string"==typeof c)return c;if(e.yMax=c,0===e.yMax.length)for(let t=0;t<s;t++)e.yMax.push(null);if(e.yMax.length!==e.dataset.length)return"The number of inputs of yMin and dataset not matched";e.color=Ls(null==n?void 0:n.color,e.color),"boolean"==typeof(null==n?void 0:n.dimNotInMonth)&&(e.dimNotInMonth=n.dimNotInMonth),"boolean"==typeof(null==n?void 0:n.showStreak)&&(e.showStreak=n.showStreak),"boolean"==typeof(null==n?void 0:n.showTodayRing)&&(e.showTodayRing=n.showTodayRing),"boolean"==typeof(null==n?void 0:n.showSelectedValue)&&(e.showSelectedValue=n.showSelectedValue),"boolean"==typeof(null==n?void 0:n.showSelectedRing)&&(e.showSelectedRing=n.showSelectedRing),e.circleColor=Ls(null==n?void 0:n.circleColor,e.circleColor),"boolean"==typeof(null==n?void 0:n.circleColorByValue)&&(e.circleColorByValue=n.circleColorByValue),e.headerYearColor=Ls(null==n?void 0:n.headerYearColor,e.headerYearColor),e.headerMonthColor=Ls(null==n?void 0:n.headerMonthColor,e.headerMonthColor),e.dividingLineColor=Ls(null==n?void 0:n.dividingLineColor,e.dividingLineColor),e.todayRingColor=Ls(null==n?void 0:n.todayRingColor,e.todayRingColor),e.selectedRingColor=Ls(null==n?void 0:n.selectedRingColor,e.selectedRingColor),e.initMonth=Ls(null==n?void 0:n.initMonth,e.initMonth),"boolean"==typeof(null==n?void 0:n.showAnnotation)&&(e.showAnnotation=n.showAnnotation);let h=Os("annotation",null==n?void 0:n.annotation);if("string"==typeof h)return h;if(e.annotation=h,0===e.annotation.length)for(let t=0;t<s;t++)e.annotation.push(null);if(e.annotation.length!==e.dataset.length)return"The number of inputs of annotation and dataset not matched";"boolean"==typeof(null==n?void 0:n.showAnnotationOfAllTargets)&&(e.showAnnotationOfAllTargets=n.showAnnotationOfAllTargets),p.month.push(e)}for(let t of D){let e=new po,n=r[t],i=$s(e),l=$s(n);for(let t of l)if(!i.includes(t))return a="'"+t+"' is not an available key",a;p.heatmap.push(e)}for(let t of k){let e=new yo,n=r[t],i=$s(e),l=$s(n);for(let t of l)if(!i.includes(t))return a="'"+t+"' is not an available key",a;e.title=Ls(null==n?void 0:n.title,e.title),e.dataset=Ls(null==n?void 0:n.dataset,e.dataset),e.orientation=Ls(null==n?void 0:n.orientation,e.orientation);let o=Vs("range",null==n?void 0:n.range);if("string"==typeof o)return o;let s=o;if(1===s.length){if(s[0]<0)return a="Negative range value is not allowed",a}else{if(!(s.length>1))return a="Empty range is not allowed",a;{let t=s[0];if(t<0)return a="Negative range value is not allowed",a;for(let e=1;e<s.length;e++)if(s[e]<=t)return a="Values in parameter 'range' should be monotonically increasing",a}}e.range=s;let u=s.length,f=Is("rangeColor",null==n?void 0:n.rangeColor,u,"",Fs,!0);if("string"==typeof f)return f;e.rangeColor=f,e.value=Ls(null==n?void 0:n.value,e.value),e.valueUnit=Ls(null==n?void 0:n.valueUnit,e.valueUnit),e.valueColor=Ls(null==n?void 0:n.valueColor,e.valueColor),"boolean"==typeof(null==n?void 0:n.showMarker)&&(e.showMarker=n.showMarker),"number"==typeof(null==n?void 0:n.markerValue)&&(e.markerValue=n.markerValue),e.markerColor=Ls(null==n?void 0:n.markerColor,e.markerColor),p.bullet.push(e)}return p}(a,this);if("string"==typeof s)return this.renderErrorMessage(s,i,r);let u=s,f=[];try{yield this.getFiles(f,u)}catch(t){return this.renderErrorMessage(t.message,i,r)}if(0===f.length)return this.renderErrorMessage("No markdown files found in folder",i,r);let c=new Map,h=new bo;h.fileTotal=f.length;const d=f.map((t=>e(this,void 0,void 0,(function*(){let n=null;u.queries.some((t=>{let e=t.getType();return t.getTarget(),e===Jl.Frontmatter||e===Jl.Tag||e===Jl.Wiki||e===Jl.WikiLink||e===Jl.WikiDisplay}))&&(n=this.app.metadataCache.getFileCache(t));let r=null;u.queries.some((t=>{let e=t.getType(),n=t.getTarget();return e===Jl.Tag||e===Jl.Text||e===Jl.dvField||e===Jl.Task||e===Jl.TaskDone||e===Jl.TaskNotDone||e===Jl.FileMeta&&("numWords"===n||"numChars"===n||"numSentences"===n)}))&&(r=yield this.app.vault.adapter.read(t.path));let i=new Map,a=!1;for(let e of u.xDataset)if(!i.has(e)){let l=window.moment("");if(-1===e)l=Ys(t,u);else{let i=u.queries[e];switch(i.getType()){case Jl.Frontmatter:l=Rs(n,i,u);break;case Jl.Tag:l=Us(r,i,u);break;case Jl.Text:l=Hs(r,i,u);break;case Jl.dvField:l=Xs(r,i,u);break;case Jl.FileMeta:l=Ws(t,i,u);break;case Jl.Task:case Jl.TaskDone:case Jl.TaskNotDone:l=js(r,i,u)}}l.isValid()?(null!==u.startDate&&l<u.startDate&&(a=!0,h.fileOutOfDateRange++),null!==u.endDate&&l>u.endDate&&(a=!0,h.fileOutOfDateRange++)):(a=!0,h.fileNotInFormat++),a||(h.gotAnyValidXValue||(h.gotAnyValidXValue=!0),i.set(e,Eo(l,u.dateFormat)),h.fileAvailable++,1==h.fileAvailable?(h.minDate=l.clone(),h.maxDate=l.clone()):(l<h.minDate&&(h.minDate=l.clone()),l>h.maxDate&&(h.maxDate=l.clone())))}if(a)return;const l=u.queries.filter((t=>t.getType()!==Jl.Table&&!t.usedAsXDataset)).map((a=>e(this,void 0,void 0,(function*(){if(n&&a.getType()===Jl.Tag){let t=function(t,e,n,r,i){let a=t.frontmatter,l=[];if(a&&a.tags){let t=0,o=!1;if(Array.isArray(a.tags))l=l.concat(a.tags);else if("string"==typeof a.tags){let t=a.tags.split(e.getSeparator(!0));for(let e of t){let t=e.trim();""!==t&&l.push(t)}}for(let a of l){if(a===e.getTarget())t+=n.constValue[e.getId()],o=!0,e.addNumTargets();else{if(!a.startsWith(e.getTarget()+"/"))continue;t+=n.constValue[e.getId()],o=!0,e.addNumTargets()}let l=null;return o&&(l=t),qs(r,i.get(n.xDataset[e.getId()]),e,l),!0}}return!1}(n,a,u,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(n&&a.getType()===Jl.Frontmatter&&"tags"!==a.getTarget()){let t=function(t,e,n,r,i){let a=t.frontmatter;if(a){let t=Bo(a,e.getTarget());if(t){let a=Io(t,n.textValueMap);if(null===a.value&&("true"!==t&&"false"!==t||(a.type=eo.Number,a.value="true"===t?1:0)),null!==a.value)return a.type===eo.Time&&(e.valueType=eo.Time),e.addNumTargets(),qs(r,i.get(n.xDataset[e.getId()]),e,a.value),!0}else if(e.getParentTarget()&&Bo(a,e.getParentTarget())){let t=Bo(a,e.getParentTarget()),l=null;if(Array.isArray(t)?l=t.map((t=>t.toString())):"string"==typeof t&&(l=t.split(e.getSeparator())),l&&l.length>e.getAccessor()&&e.getAccessor()>=0){let t=Io(l[e.getAccessor()].trim(),n.textValueMap);if(null!==t.value)return t.type===eo.Time&&(e.valueType=eo.Time),e.addNumTargets(),qs(r,i.get(n.xDataset[e.getId()]),e,t.value),!0}}}return!1}(n,a,u,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(n&&(a.getType()===Jl.Wiki||a.getType()===Jl.WikiLink||a.getType()===Jl.WikiDisplay)){let t=function(t,e,n,r,i){let a=t.links;if(!a)return!1;let l=e.getTarget(),o=e.getType(),s="",u=l;for(let t of a){if(!t)continue;let e="";o===Jl.Wiki?e=t.displayText?t.displayText:t.link:o===Jl.WikiLink?e=t.link:o===Jl.WikiDisplay?t.displayText&&(e=t.displayText):e=t.displayText?t.displayText:t.link,e=e.trim(),s+=e+"\n"}return Gs(s,u,e,r,i,n)}(n,a,u,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(r&&a.getType()===Jl.Tag){let t=function(t,e,n,r,i){let a=e.getTarget();return e.getParentTarget()&&(a=e.getParentTarget()),a.length>1&&a.startsWith("#")&&(a=a.substring(1)),Gs(t,"(^|\\s)#"+a+"(\\/[\\w-]+)*(:(?<value>[\\d\\.\\/-]*)[a-zA-Z]*)?([\\.!,\\?;~-]*)?(\\s|$)",e,r,i,n)}(r,a,u,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(r&&a.getType()===Jl.Text){let t=function(t,e,n,r,i){return Gs(t,e.getTarget(),e,r,i,n)}(r,a,u,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(a.getType()===Jl.FileMeta){let e=Qs(t,r,a,u,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=e)}if(r&&a.getType()===Jl.dvField){let t=function(t,e,n,r,i){let a=e.getTarget();return e.getParentTarget()&&(a=e.getParentTarget()),a=a.replace("-","[\\s\\-]"),Gs(t,String.raw`(^| |\t|\|)(\[|\()?\*{0,2}`+a+String.raw`\*{0,2}(::[ |\t]*(?<value>[\p{ExtPict}\d\.\/\-\w,@; \t:`+"\\w$€£¥¢₹₨₱₩฿₫₪α-ωΑ-Ω©®℗™℠一-鿿㐀-䶿 、-〿"+String.raw`]*)(\]|\))?)`,e,r,i,n)}(r,a,u,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}if(r&&(a.getType()===Jl.Task||a.getType()===Jl.TaskDone||a.getType()===Jl.TaskNotDone)){let t=function(t,e,n,r,i){let a=e.getType(),l=e.getTarget();return l=a===Jl.Task?"\\[[\\sx]\\]\\s"+l:a===Jl.TaskDone?"\\[x\\]\\s"+l:a===Jl.TaskNotDone?"\\[\\s\\]\\s"+l:"\\[[\\sx]\\]\\s"+l,Gs(t,l,e,r,i,n)}(r,a,u,c,i);h.gotAnyValidYValue||(h.gotAnyValidYValue=t)}}))));yield Promise.all(l)}))));if(yield Promise.all(d),yield this.collectDataFromTable(c,u,h),h.errorMessage)return this.renderErrorMessage(h.errorMessage,i,r);let g="";if(h.minDate.isValid()&&h.maxDate.isValid()&&0!==h.fileAvailable&&h.gotAnyValidXValue||(g="No valid date as X value found in notes",h.fileOutOfDateRange>0&&(g+=`\n${h.fileOutOfDateRange} files are out of the date range.`),h.fileNotInFormat&&(g+=`\n${h.fileNotInFormat} files are not in the right format.`)),null===u.startDate&&null===u.endDate?(u.startDate=h.minDate.clone(),u.endDate=h.maxDate.clone()):null!==u.startDate&&null===u.endDate?u.startDate<h.maxDate?u.endDate=h.maxDate.clone():g="Invalid date range":null!==u.endDate&&null===u.startDate?u.endDate>h.minDate?u.startDate=h.minDate.clone():g="Invalid date range":(u.startDate<h.minDate&&u.endDate<h.minDate||u.startDate>h.maxDate&&u.endDate>h.maxDate)&&(g="Invalid date range"),g)return this.renderErrorMessage(g,i,r);if(!h.gotAnyValidYValue)return this.renderErrorMessage("No valid Y value found in notes",i,r);let p=new ao(u.startDate,u.endDate);for(let t of u.queries){let e=p.createDataset(t,u);e.addNumTargets(t.getNumTargets());for(let n=u.startDate.clone();n<=u.endDate;n.add(1,"days"))if(c.has(Eo(n,u.dateFormat))){let r=c.get(Eo(n,u.dateFormat)).filter((function(e){return e.query.equalTo(t)}));if(r.length>0){let t=null;for(let e=0;e<r.length;e++){let n=r[e].value;Number.isNumber(n)&&!Number.isNaN(n)&&(null===t?t=n:t+=n)}null!==t&&e.setValue(n,t)}}}u.datasets=p;let y=function(t,e){for(let t of e.datasets){if(t.getQuery().usedAsXDataset)continue;let n=e.valueShift[t.getId()];null!==n&&0!==n&&t.shift(n,e.shiftOnlyValueLargerThan[t.getId()]),null!==e.penalty[t.getId()]&&t.setPenalty(e.penalty[t.getId()]),e.accum[t.getId()]&&t.accumulateValues()}if(e.stack){let t=null;for(let n of e.datasets)n.getQuery().usedAsXDataset||(t&&n.shiftByDataset(t),t=n)}for(let n of e.line){let r=Cs(t,e,n);if("string"==typeof r)return r}for(let n of e.bar){let r=Ms(t,e,n);if("string"==typeof r)return r}for(let n of e.pie){let r=ns(t,e,n);if("string"==typeof r)return r}for(let n of e.summary){let r=rs(t,e,n);if("string"==typeof r)return r}for(let n of e.bullet){let r=ps(t,e,n);if("string"==typeof r)return r}for(let n of e.month){let r=ds(t,e,n);if("string"==typeof r)return r}for(let t of e.heatmap){let t=gs(0,e);if("string"==typeof t)return t}}(i,u);if("string"==typeof y)return this.renderErrorMessage(y,i,r);r.appendChild(i)}))}collectDataFromTable(n,r,i){return e(this,void 0,void 0,(function*(){let e=r.queries.filter((t=>t.getType()===Jl.Table)),a=[],l=!1;for(let n of e){let e=n.getParentTarget(),r=this.app.vault.getAbstractFileByPath(t.normalizePath(e+".md"));if(!(r&&r instanceof t.TFile)){l=!0;break}let i=n.getAccessor(),o=n.usedAsXDataset,s=a.find((t=>t.filePath===e&&t.tableIndex===i));if(s)o?s.xDataset=n:s.yDatasets.push(n);else{let t=new wo(e,i);o?t.xDataset=n:t.yDatasets.push(n),a.push(t)}}if(l)i.errorMessage="File containing tables not found";else for(let e of a){let a=e.xDataset;if(!a)continue;let l=e.yDatasets,o=a.getParentTarget(),s=a.getAccessor(),u="";o+=".md";let f=this.app.vault.getAbstractFileByPath(t.normalizePath(o));if(!(f&&f instanceof t.TFile))continue;{i.fileAvailable++;let t,e=yield this.app.vault.adapter.read(f.path),n=new RegExp("((\\r?\\n){2}|^)([^\\r\\n]*\\|[^\\r\\n]*(\\r?\\n)?)+(?=(\\r?\\n){2}|$)","gm"),r=0;for(;t=n.exec(e);){if(r===s){u=t[0];break}r++}}let c=u.split(/\r?\n/);c=c.filter((t=>""!==t));let h=0,d=0;if(c.length>=2){let t=c.shift().trim();t=No(t,"|"),h=t.split("|").length;let e=c.shift().trim();e=No(e,"|");let n=e.split("|");for(let t of n)if(!t.includes("-"))break;d=c.length}if(0==d)continue;let g=a.getAccessor(1);if(g>=h)continue;let p=[];for(let t of c){let e=No(t.trim(),"|").split("|");if(g<e.length){let t=Co(e[g].trim(),r.dateFormat);t.isValid()?(p.push(t),i.minDate.isValid()||i.maxDate.isValid()?(t<i.minDate&&(i.minDate=t.clone()),t>i.maxDate&&(i.maxDate=t.clone())):(i.minDate=t.clone(),i.maxDate=t.clone())):p.push(null)}else p.push(null)}if(p.every((t=>null===t)))return void(i.errorMessage="No valid date as X value found in table");i.gotAnyValidXValue||(i.gotAnyValidXValue=!0);for(let t of l){let e=t.getAccessor(1);if(e>=h)continue;let a=0;for(let l of c){let o=No(l.trim(),"|").split("|");if(e<o.length){let l=o[e].trim().split(t.getSeparator());if(!l)continue;if(1===l.length){let e=Io(l[0],r.textValueMap);if(null!==e.value){e.type===eo.Time&&(t.valueType=eo.Time);let l=e.value;a<p.length&&p[a]&&(i.gotAnyValidYValue||(i.gotAnyValidYValue=!0),qs(n,Eo(p[a],r.dateFormat),t,l))}}else if(l.length>t.getAccessor(2)&&t.getAccessor(2)>=0){let e=null,o=Io(l[t.getAccessor(2)].trim(),r.textValueMap);null!==o.value&&(o.type===eo.Time&&(t.valueType=eo.Time),e=o.value,a<p.length&&p[a]&&(i.gotAnyValidYValue||(i.gotAnyValidYValue=!0),qs(n,Eo(p[a],r.dateFormat),t,e)))}}a++}}}}))}getEditor(){return this.app.workspace.getActiveViewOfType(t.MarkdownView).editor}addCodeBlock(e){if(!(this.app.workspace.activeLeaf.view instanceof t.MarkdownView))return;let n="";switch(e){case to.Line:n='``` tracker\nsearchType: tag\nsearchTarget: tagName\nfolder: /\nstartDate:\nendDate:\nline:\n title: "Line Chart"\n xAxisLabel: Date\n yAxisLabel: Value\n```';break;case to.Bar:n='``` tracker\nsearchType: tag\nsearchTarget: tagName\nfolder: /\nstartDate:\nendDate:\nbar:\n title: "Bar Chart"\n xAxisLabel: Date\n yAxisLabel: Value\n```';break;case to.Summary:n='``` tracker\nsearchType: tag\nsearchTarget: tagName\nfolder: /\nstartDate:\nendDate:\nsummary:\n template: "Average value of tagName is {{average()}}"\n style: "color:white;"\n```'}""!==n&&this.insertToNextLine(n)}insertToNextLine(t){let e=this.getEditor();if(e){let n=e.getCursor(),r=n.line,i=e.getLine(r);return n.ch=i.length,e.setSelection(n),e.replaceSelection("\n"+t),!0}return!1}}module.exports=Js;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYXNjZW5kaW5nLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9kZXNjZW5kaW5nLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9iaXNlY3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0LmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9udW1iZXIuanMiLCJub2RlX21vZHVsZXMvaW50ZXJubWFwL3NyYy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvc29ydC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvdGlja3MuanMiLCJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21heC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWluLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9xdWlja3NlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVkaWFuLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9xdWFudGlsZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcmFuZ2UuanMiLCJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3N1bS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9pZGVudGl0eS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1heGlzL3NyYy9heGlzLmpzIiwibm9kZV9tb2R1bGVzL2QzLWRpc3BhdGNoL3NyYy9kaXNwYXRjaC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZXMuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9uYW1lc3BhY2UuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9jcmVhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0b3IuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3RvckFsbC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zZWxlY3RBbGwuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9hcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL21hdGNoZXIuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0Q2hpbGQuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0Q2hpbGRyZW4uanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VudGVyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdGEuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc29ydC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9hdHRyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvd2luZG93LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3N0eWxlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3Byb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2NsYXNzZWQuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vdGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9odG1sLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JhaXNlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2xvd2VyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luc2VydC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9yZW1vdmUuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xvbmUuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb24uanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanMiLCJub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2RlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY29sb3IuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2ZpbHRlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NvbnN0YW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2V4aXQuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vam9pbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9tZXJnZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9vcmRlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9jYWxsLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGVzLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL25vZGUuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2l6ZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lbXB0eS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lYWNoLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2FwcGVuZC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9kYXR1bS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9pdGVyYXRvci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvbWF0aC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvbGFiLmpzIiwibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb25zdGFudC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY29sb3IuanMiLCJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JnYi5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXMuanMiLCJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL251bWJlckFycmF5LmpzIiwibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9hcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvZGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbnVtYmVyLmpzIiwibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9vYmplY3QuanMiLCJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdmFsdWUuanMiLCJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JvdW5kLmpzIiwibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vZGVjb21wb3NlLmpzIiwibm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vcGFyc2UuanMiLCJub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3RyYW5zZm9ybS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbGFiLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lci5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lci9zcmMvdGltZW91dC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NjaGVkdWxlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHdlZW4uanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbnRlcnBvbGF0ZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHIuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9hdHRyVHdlZW4uanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9kZWxheS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2R1cmF0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2VsZWN0aW9uLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGUuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdEFsbC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2ZpbHRlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL21lcmdlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHJhbnNpdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL29uLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc3R5bGVUd2Vlbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHQuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90ZXh0VHdlZW4uanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9yZW1vdmUuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZWFzZVZhcnlpbmcuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lbmQuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL3RyYW5zaXRpb24uanMiLCJub2RlX21vZHVsZXMvZDMtZWFzZS9zcmMvY3ViaWMuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3NlbGVjdGlvbi9pbnRlcnJ1cHQuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvaW50ZXJydXB0LmpzIiwibm9kZV9tb2R1bGVzL2QzLXBhdGgvc3JjL3BhdGguanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXREZWNpbWFsLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZXhwb25lbnQuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRTcGVjaWZpZXIuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRQcmVmaXhBdXRvLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0Um91bmRlZC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFR5cGVzLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvaWRlbnRpdHkuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9sb2NhbGUuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9kZWZhdWx0TG9jYWxlLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0R3JvdXAuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXROdW1lcmFscy5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFRyaW0uanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luaXQuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL29yZGluYWwuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL251bWJlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvY29udGludW91cy5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvY29uc3RhbnQuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL3RpY2tGb3JtYXQuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25QcmVmaXguanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25Sb3VuZC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL3ByZWNpc2lvbkZpeGVkLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9saW5lYXIuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaW50ZXJ2YWwuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvbWlsbGlzZWNvbmQuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvZHVyYXRpb24uanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvc2Vjb25kLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21pbnV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9ob3VyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2RheS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy93ZWVrLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21vbnRoLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3llYXIuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdGlja3MuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2xvY2FsZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGltZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbmljZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvc3JjL3JhbXAuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvU3BlY3RyYWwuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jb2xvcnMuanMiLCJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2NvbnN0YW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9tYXRoLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9wYXRoLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcmMuanMiLCJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2FycmF5LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9saW5lYXIuanMiLCJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BvaW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9kZXNjZW5kaW5nLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9pZGVudGl0eS5qcyIsIm5vZGVfbW9kdWxlcy9kMy16b29tL3NyYy90cmFuc2Zvcm0uanMiLCJzcmMvZGF0YS50cyIsInNyYy9oZWxwZXIudHMiLCJub2RlX21vZHVsZXMvanNlcC9kaXN0L2pzZXAuanMiLCJzcmMvZXhwci50cyIsIm5vZGVfbW9kdWxlcy9zcHJpbnRmLWpzL3NyYy9zcHJpbnRmLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy92YXJpYW5jZS5qcyIsInNyYy9waWUudHMiLCJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BpZS5qcyIsInNyYy9zdW1tYXJ5LnRzIiwic3JjL21vbnRoLnRzIiwic3JjL2hlYXRtYXAudHMiLCJzcmMvYnVsbGV0LnRzIiwic3JjL3JlbmRlcmluZy50cyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvZXh0ZW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9saW5lLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvcG9pbnRlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NvdXJjZUV2ZW50LmpzIiwic3JjL3BhcnNpbmcudHMiLCJzcmMvY29sbGVjdGluZy50cyIsInNyYy9zZXR0aW5ncy50cyIsInNyYy9tYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSwgU3VwcHJlc3NlZEVycm9yLCBTeW1ib2wgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xyXG4gICAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XHJcbiAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xyXG4gICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XHJcbiAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcclxuICAgIHZhciBfLCBkb25lID0gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBjb250ZXh0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XHJcbiAgICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF8pO1xyXG4gICAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xyXG4gICAgZG9uZSA9IHRydWU7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xyXG4gICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XHJcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XHJcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xyXG4gICAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XHJcbiAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hZGREaXNwb3NhYmxlUmVzb3VyY2UoZW52LCB2YWx1ZSwgYXN5bmMpIHtcclxuICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdm9pZCAwKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZC5cIik7XHJcbiAgICAgICAgdmFyIGRpc3Bvc2U7XHJcbiAgICAgICAgaWYgKGFzeW5jKSB7XHJcbiAgICAgICAgICAgIGlmICghU3ltYm9sLmFzeW5jRGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0Rpc3Bvc2UgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgICAgICBkaXNwb3NlID0gdmFsdWVbU3ltYm9sLmFzeW5jRGlzcG9zZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChkaXNwb3NlID09PSB2b2lkIDApIHtcclxuICAgICAgICAgICAgaWYgKCFTeW1ib2wuZGlzcG9zZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5kaXNwb3NlIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgICAgICAgICAgZGlzcG9zZSA9IHZhbHVlW1N5bWJvbC5kaXNwb3NlXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBkaXNwb3NlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3Qgbm90IGRpc3Bvc2FibGUuXCIpO1xyXG4gICAgICAgIGVudi5zdGFjay5wdXNoKHsgdmFsdWU6IHZhbHVlLCBkaXNwb3NlOiBkaXNwb3NlLCBhc3luYzogYXN5bmMgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChhc3luYykge1xyXG4gICAgICAgIGVudi5zdGFjay5wdXNoKHsgYXN5bmM6IHRydWUgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdmFsdWU7XHJcbn1cclxuXHJcbnZhciBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XHJcbiAgICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kaXNwb3NlUmVzb3VyY2VzKGVudikge1xyXG4gICAgZnVuY3Rpb24gZmFpbChlKSB7XHJcbiAgICAgICAgZW52LmVycm9yID0gZW52Lmhhc0Vycm9yID8gbmV3IF9TdXBwcmVzc2VkRXJyb3IoZSwgZW52LmVycm9yLCBcIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC5cIikgOiBlO1xyXG4gICAgICAgIGVudi5oYXNFcnJvciA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBmdW5jdGlvbiBuZXh0KCkge1xyXG4gICAgICAgIHdoaWxlIChlbnYuc3RhY2subGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHZhciByZWMgPSBlbnYuc3RhY2sucG9wKCk7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcmVjLmRpc3Bvc2UgJiYgcmVjLmRpc3Bvc2UuY2FsbChyZWMudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHJlYy5hc3luYykgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dCwgZnVuY3Rpb24oZSkgeyBmYWlsKGUpOyByZXR1cm4gbmV4dCgpOyB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgZmFpbChlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZW52Lmhhc0Vycm9yKSB0aHJvdyBlbnYuZXJyb3I7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbmV4dCgpO1xyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCB7XHJcbiAgICBfX2V4dGVuZHM6IF9fZXh0ZW5kcyxcclxuICAgIF9fYXNzaWduOiBfX2Fzc2lnbixcclxuICAgIF9fcmVzdDogX19yZXN0LFxyXG4gICAgX19kZWNvcmF0ZTogX19kZWNvcmF0ZSxcclxuICAgIF9fcGFyYW06IF9fcGFyYW0sXHJcbiAgICBfX21ldGFkYXRhOiBfX21ldGFkYXRhLFxyXG4gICAgX19hd2FpdGVyOiBfX2F3YWl0ZXIsXHJcbiAgICBfX2dlbmVyYXRvcjogX19nZW5lcmF0b3IsXHJcbiAgICBfX2NyZWF0ZUJpbmRpbmc6IF9fY3JlYXRlQmluZGluZyxcclxuICAgIF9fZXhwb3J0U3RhcjogX19leHBvcnRTdGFyLFxyXG4gICAgX192YWx1ZXM6IF9fdmFsdWVzLFxyXG4gICAgX19yZWFkOiBfX3JlYWQsXHJcbiAgICBfX3NwcmVhZDogX19zcHJlYWQsXHJcbiAgICBfX3NwcmVhZEFycmF5czogX19zcHJlYWRBcnJheXMsXHJcbiAgICBfX3NwcmVhZEFycmF5OiBfX3NwcmVhZEFycmF5LFxyXG4gICAgX19hd2FpdDogX19hd2FpdCxcclxuICAgIF9fYXN5bmNHZW5lcmF0b3I6IF9fYXN5bmNHZW5lcmF0b3IsXHJcbiAgICBfX2FzeW5jRGVsZWdhdG9yOiBfX2FzeW5jRGVsZWdhdG9yLFxyXG4gICAgX19hc3luY1ZhbHVlczogX19hc3luY1ZhbHVlcyxcclxuICAgIF9fbWFrZVRlbXBsYXRlT2JqZWN0OiBfX21ha2VUZW1wbGF0ZU9iamVjdCxcclxuICAgIF9faW1wb3J0U3RhcjogX19pbXBvcnRTdGFyLFxyXG4gICAgX19pbXBvcnREZWZhdWx0OiBfX2ltcG9ydERlZmF1bHQsXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0OiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0LFxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldDogX19jbGFzc1ByaXZhdGVGaWVsZFNldCxcclxuICAgIF9fY2xhc3NQcml2YXRlRmllbGRJbjogX19jbGFzc1ByaXZhdGVGaWVsZEluLFxyXG4gICAgX19hZGREaXNwb3NhYmxlUmVzb3VyY2U6IF9fYWRkRGlzcG9zYWJsZVJlc291cmNlLFxyXG4gICAgX19kaXNwb3NlUmVzb3VyY2VzOiBfX2Rpc3Bvc2VSZXNvdXJjZXMsXHJcbn07XHJcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFzY2VuZGluZyhhLCBiKSB7XG4gIHJldHVybiBhID09IG51bGwgfHwgYiA9PSBudWxsID8gTmFOIDogYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZXNjZW5kaW5nKGEsIGIpIHtcbiAgcmV0dXJuIGEgPT0gbnVsbCB8fCBiID09IG51bGwgPyBOYU5cbiAgICA6IGIgPCBhID8gLTFcbiAgICA6IGIgPiBhID8gMVxuICAgIDogYiA+PSBhID8gMFxuICAgIDogTmFOO1xufVxuIiwiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmcuanNcIjtcbmltcG9ydCBkZXNjZW5kaW5nIGZyb20gXCIuL2Rlc2NlbmRpbmcuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmlzZWN0b3IoZikge1xuICBsZXQgY29tcGFyZTEsIGNvbXBhcmUyLCBkZWx0YTtcblxuICAvLyBJZiBhbiBhY2Nlc3NvciBpcyBzcGVjaWZpZWQsIHByb21vdGUgaXQgdG8gYSBjb21wYXJhdG9yLiBJbiB0aGlzIGNhc2Ugd2VcbiAgLy8gY2FuIHRlc3Qgd2hldGhlciB0aGUgc2VhcmNoIHZhbHVlIGlzIChzZWxmLSkgY29tcGFyYWJsZS4gV2UgY2Fu4oCZdCBkbyB0aGlzXG4gIC8vIGZvciBhIGNvbXBhcmF0b3IgKGV4Y2VwdCBmb3Igc3BlY2lmaWMsIGtub3duIGNvbXBhcmF0b3JzKSBiZWNhdXNlIHdlIGNhbuKAmXRcbiAgLy8gdGVsbCBpZiB0aGUgY29tcGFyYXRvciBpcyBzeW1tZXRyaWMsIGFuZCBhbiBhc3ltbWV0cmljIGNvbXBhcmF0b3IgY2Fu4oCZdCBiZVxuICAvLyB1c2VkIHRvIHRlc3Qgd2hldGhlciBhIHNpbmdsZSB2YWx1ZSBpcyBjb21wYXJhYmxlLlxuICBpZiAoZi5sZW5ndGggIT09IDIpIHtcbiAgICBjb21wYXJlMSA9IGFzY2VuZGluZztcbiAgICBjb21wYXJlMiA9IChkLCB4KSA9PiBhc2NlbmRpbmcoZihkKSwgeCk7XG4gICAgZGVsdGEgPSAoZCwgeCkgPT4gZihkKSAtIHg7XG4gIH0gZWxzZSB7XG4gICAgY29tcGFyZTEgPSBmID09PSBhc2NlbmRpbmcgfHwgZiA9PT0gZGVzY2VuZGluZyA/IGYgOiB6ZXJvO1xuICAgIGNvbXBhcmUyID0gZjtcbiAgICBkZWx0YSA9IGY7XG4gIH1cblxuICBmdW5jdGlvbiBsZWZ0KGEsIHgsIGxvID0gMCwgaGkgPSBhLmxlbmd0aCkge1xuICAgIGlmIChsbyA8IGhpKSB7XG4gICAgICBpZiAoY29tcGFyZTEoeCwgeCkgIT09IDApIHJldHVybiBoaTtcbiAgICAgIGRvIHtcbiAgICAgICAgY29uc3QgbWlkID0gKGxvICsgaGkpID4+PiAxO1xuICAgICAgICBpZiAoY29tcGFyZTIoYVttaWRdLCB4KSA8IDApIGxvID0gbWlkICsgMTtcbiAgICAgICAgZWxzZSBoaSA9IG1pZDtcbiAgICAgIH0gd2hpbGUgKGxvIDwgaGkpO1xuICAgIH1cbiAgICByZXR1cm4gbG87XG4gIH1cblxuICBmdW5jdGlvbiByaWdodChhLCB4LCBsbyA9IDAsIGhpID0gYS5sZW5ndGgpIHtcbiAgICBpZiAobG8gPCBoaSkge1xuICAgICAgaWYgKGNvbXBhcmUxKHgsIHgpICE9PSAwKSByZXR1cm4gaGk7XG4gICAgICBkbyB7XG4gICAgICAgIGNvbnN0IG1pZCA9IChsbyArIGhpKSA+Pj4gMTtcbiAgICAgICAgaWYgKGNvbXBhcmUyKGFbbWlkXSwgeCkgPD0gMCkgbG8gPSBtaWQgKyAxO1xuICAgICAgICBlbHNlIGhpID0gbWlkO1xuICAgICAgfSB3aGlsZSAobG8gPCBoaSk7XG4gICAgfVxuICAgIHJldHVybiBsbztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNlbnRlcihhLCB4LCBsbyA9IDAsIGhpID0gYS5sZW5ndGgpIHtcbiAgICBjb25zdCBpID0gbGVmdChhLCB4LCBsbywgaGkgLSAxKTtcbiAgICByZXR1cm4gaSA+IGxvICYmIGRlbHRhKGFbaSAtIDFdLCB4KSA+IC1kZWx0YShhW2ldLCB4KSA/IGkgLSAxIDogaTtcbiAgfVxuXG4gIHJldHVybiB7bGVmdCwgY2VudGVyLCByaWdodH07XG59XG5cbmZ1bmN0aW9uIHplcm8oKSB7XG4gIHJldHVybiAwO1xufVxuIiwiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmcuanNcIjtcbmltcG9ydCBiaXNlY3RvciBmcm9tIFwiLi9iaXNlY3Rvci5qc1wiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXIuanNcIjtcblxuY29uc3QgYXNjZW5kaW5nQmlzZWN0ID0gYmlzZWN0b3IoYXNjZW5kaW5nKTtcbmV4cG9ydCBjb25zdCBiaXNlY3RSaWdodCA9IGFzY2VuZGluZ0Jpc2VjdC5yaWdodDtcbmV4cG9ydCBjb25zdCBiaXNlY3RMZWZ0ID0gYXNjZW5kaW5nQmlzZWN0LmxlZnQ7XG5leHBvcnQgY29uc3QgYmlzZWN0Q2VudGVyID0gYmlzZWN0b3IobnVtYmVyKS5jZW50ZXI7XG5leHBvcnQgZGVmYXVsdCBiaXNlY3RSaWdodDtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG51bWJlcih4KSB7XG4gIHJldHVybiB4ID09PSBudWxsID8gTmFOIDogK3g7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiogbnVtYmVycyh2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgKHZhbHVlID0gK3ZhbHVlKSA+PSB2YWx1ZSkge1xuICAgICAgICB5aWVsZCB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkgIT0gbnVsbCAmJiAodmFsdWUgPSArdmFsdWUpID49IHZhbHVlKSB7XG4gICAgICAgIHlpZWxkIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGNsYXNzIEludGVybk1hcCBleHRlbmRzIE1hcCB7XG4gIGNvbnN0cnVjdG9yKGVudHJpZXMsIGtleSA9IGtleW9mKSB7XG4gICAgc3VwZXIoKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0aGlzLCB7X2ludGVybjoge3ZhbHVlOiBuZXcgTWFwKCl9LCBfa2V5OiB7dmFsdWU6IGtleX19KTtcbiAgICBpZiAoZW50cmllcyAhPSBudWxsKSBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBlbnRyaWVzKSB0aGlzLnNldChrZXksIHZhbHVlKTtcbiAgfVxuICBnZXQoa2V5KSB7XG4gICAgcmV0dXJuIHN1cGVyLmdldChpbnRlcm5fZ2V0KHRoaXMsIGtleSkpO1xuICB9XG4gIGhhcyhrZXkpIHtcbiAgICByZXR1cm4gc3VwZXIuaGFzKGludGVybl9nZXQodGhpcywga2V5KSk7XG4gIH1cbiAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gc3VwZXIuc2V0KGludGVybl9zZXQodGhpcywga2V5KSwgdmFsdWUpO1xuICB9XG4gIGRlbGV0ZShrZXkpIHtcbiAgICByZXR1cm4gc3VwZXIuZGVsZXRlKGludGVybl9kZWxldGUodGhpcywga2V5KSk7XG4gIH1cbn1cblxuZXhwb3J0IGNsYXNzIEludGVyblNldCBleHRlbmRzIFNldCB7XG4gIGNvbnN0cnVjdG9yKHZhbHVlcywga2V5ID0ga2V5b2YpIHtcbiAgICBzdXBlcigpO1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRoaXMsIHtfaW50ZXJuOiB7dmFsdWU6IG5ldyBNYXAoKX0sIF9rZXk6IHt2YWx1ZToga2V5fX0pO1xuICAgIGlmICh2YWx1ZXMgIT0gbnVsbCkgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHRoaXMuYWRkKHZhbHVlKTtcbiAgfVxuICBoYXModmFsdWUpIHtcbiAgICByZXR1cm4gc3VwZXIuaGFzKGludGVybl9nZXQodGhpcywgdmFsdWUpKTtcbiAgfVxuICBhZGQodmFsdWUpIHtcbiAgICByZXR1cm4gc3VwZXIuYWRkKGludGVybl9zZXQodGhpcywgdmFsdWUpKTtcbiAgfVxuICBkZWxldGUodmFsdWUpIHtcbiAgICByZXR1cm4gc3VwZXIuZGVsZXRlKGludGVybl9kZWxldGUodGhpcywgdmFsdWUpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpbnRlcm5fZ2V0KHtfaW50ZXJuLCBfa2V5fSwgdmFsdWUpIHtcbiAgY29uc3Qga2V5ID0gX2tleSh2YWx1ZSk7XG4gIHJldHVybiBfaW50ZXJuLmhhcyhrZXkpID8gX2ludGVybi5nZXQoa2V5KSA6IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBpbnRlcm5fc2V0KHtfaW50ZXJuLCBfa2V5fSwgdmFsdWUpIHtcbiAgY29uc3Qga2V5ID0gX2tleSh2YWx1ZSk7XG4gIGlmIChfaW50ZXJuLmhhcyhrZXkpKSByZXR1cm4gX2ludGVybi5nZXQoa2V5KTtcbiAgX2ludGVybi5zZXQoa2V5LCB2YWx1ZSk7XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gaW50ZXJuX2RlbGV0ZSh7X2ludGVybiwgX2tleX0sIHZhbHVlKSB7XG4gIGNvbnN0IGtleSA9IF9rZXkodmFsdWUpO1xuICBpZiAoX2ludGVybi5oYXMoa2V5KSkge1xuICAgIHZhbHVlID0gX2ludGVybi5nZXQoa2V5KTtcbiAgICBfaW50ZXJuLmRlbGV0ZShrZXkpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24ga2V5b2YodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiA/IHZhbHVlLnZhbHVlT2YoKSA6IHZhbHVlO1xufVxuIiwiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmcuanNcIjtcbmltcG9ydCBwZXJtdXRlIGZyb20gXCIuL3Blcm11dGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc29ydCh2YWx1ZXMsIC4uLkYpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZXNbU3ltYm9sLml0ZXJhdG9yXSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsdWVzIGlzIG5vdCBpdGVyYWJsZVwiKTtcbiAgdmFsdWVzID0gQXJyYXkuZnJvbSh2YWx1ZXMpO1xuICBsZXQgW2ZdID0gRjtcbiAgaWYgKChmICYmIGYubGVuZ3RoICE9PSAyKSB8fCBGLmxlbmd0aCA+IDEpIHtcbiAgICBjb25zdCBpbmRleCA9IFVpbnQzMkFycmF5LmZyb20odmFsdWVzLCAoZCwgaSkgPT4gaSk7XG4gICAgaWYgKEYubGVuZ3RoID4gMSkge1xuICAgICAgRiA9IEYubWFwKGYgPT4gdmFsdWVzLm1hcChmKSk7XG4gICAgICBpbmRleC5zb3J0KChpLCBqKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgZiBvZiBGKSB7XG4gICAgICAgICAgY29uc3QgYyA9IGFzY2VuZGluZ0RlZmluZWQoZltpXSwgZltqXSk7XG4gICAgICAgICAgaWYgKGMpIHJldHVybiBjO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZiA9IHZhbHVlcy5tYXAoZik7XG4gICAgICBpbmRleC5zb3J0KChpLCBqKSA9PiBhc2NlbmRpbmdEZWZpbmVkKGZbaV0sIGZbal0pKTtcbiAgICB9XG4gICAgcmV0dXJuIHBlcm11dGUodmFsdWVzLCBpbmRleCk7XG4gIH1cbiAgcmV0dXJuIHZhbHVlcy5zb3J0KGNvbXBhcmVEZWZpbmVkKGYpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVEZWZpbmVkKGNvbXBhcmUgPSBhc2NlbmRpbmcpIHtcbiAgaWYgKGNvbXBhcmUgPT09IGFzY2VuZGluZykgcmV0dXJuIGFzY2VuZGluZ0RlZmluZWQ7XG4gIGlmICh0eXBlb2YgY29tcGFyZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY29tcGFyZSBpcyBub3QgYSBmdW5jdGlvblwiKTtcbiAgcmV0dXJuIChhLCBiKSA9PiB7XG4gICAgY29uc3QgeCA9IGNvbXBhcmUoYSwgYik7XG4gICAgaWYgKHggfHwgeCA9PT0gMCkgcmV0dXJuIHg7XG4gICAgcmV0dXJuIChjb21wYXJlKGIsIGIpID09PSAwKSAtIChjb21wYXJlKGEsIGEpID09PSAwKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGFzY2VuZGluZ0RlZmluZWQoYSwgYikge1xuICByZXR1cm4gKGEgPT0gbnVsbCB8fCAhKGEgPj0gYSkpIC0gKGIgPT0gbnVsbCB8fCAhKGIgPj0gYikpIHx8IChhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMCk7XG59XG4iLCJjb25zdCBlMTAgPSBNYXRoLnNxcnQoNTApLFxuICAgIGU1ID0gTWF0aC5zcXJ0KDEwKSxcbiAgICBlMiA9IE1hdGguc3FydCgyKTtcblxuZnVuY3Rpb24gdGlja1NwZWMoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIGNvbnN0IHN0ZXAgPSAoc3RvcCAtIHN0YXJ0KSAvIE1hdGgubWF4KDAsIGNvdW50KSxcbiAgICAgIHBvd2VyID0gTWF0aC5mbG9vcihNYXRoLmxvZzEwKHN0ZXApKSxcbiAgICAgIGVycm9yID0gc3RlcCAvIE1hdGgucG93KDEwLCBwb3dlciksXG4gICAgICBmYWN0b3IgPSBlcnJvciA+PSBlMTAgPyAxMCA6IGVycm9yID49IGU1ID8gNSA6IGVycm9yID49IGUyID8gMiA6IDE7XG4gIGxldCBpMSwgaTIsIGluYztcbiAgaWYgKHBvd2VyIDwgMCkge1xuICAgIGluYyA9IE1hdGgucG93KDEwLCAtcG93ZXIpIC8gZmFjdG9yO1xuICAgIGkxID0gTWF0aC5yb3VuZChzdGFydCAqIGluYyk7XG4gICAgaTIgPSBNYXRoLnJvdW5kKHN0b3AgKiBpbmMpO1xuICAgIGlmIChpMSAvIGluYyA8IHN0YXJ0KSArK2kxO1xuICAgIGlmIChpMiAvIGluYyA+IHN0b3ApIC0taTI7XG4gICAgaW5jID0gLWluYztcbiAgfSBlbHNlIHtcbiAgICBpbmMgPSBNYXRoLnBvdygxMCwgcG93ZXIpICogZmFjdG9yO1xuICAgIGkxID0gTWF0aC5yb3VuZChzdGFydCAvIGluYyk7XG4gICAgaTIgPSBNYXRoLnJvdW5kKHN0b3AgLyBpbmMpO1xuICAgIGlmIChpMSAqIGluYyA8IHN0YXJ0KSArK2kxO1xuICAgIGlmIChpMiAqIGluYyA+IHN0b3ApIC0taTI7XG4gIH1cbiAgaWYgKGkyIDwgaTEgJiYgMC41IDw9IGNvdW50ICYmIGNvdW50IDwgMikgcmV0dXJuIHRpY2tTcGVjKHN0YXJ0LCBzdG9wLCBjb3VudCAqIDIpO1xuICByZXR1cm4gW2kxLCBpMiwgaW5jXTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGlja3Moc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHN0b3AgPSArc3RvcCwgc3RhcnQgPSArc3RhcnQsIGNvdW50ID0gK2NvdW50O1xuICBpZiAoIShjb3VudCA+IDApKSByZXR1cm4gW107XG4gIGlmIChzdGFydCA9PT0gc3RvcCkgcmV0dXJuIFtzdGFydF07XG4gIGNvbnN0IHJldmVyc2UgPSBzdG9wIDwgc3RhcnQsIFtpMSwgaTIsIGluY10gPSByZXZlcnNlID8gdGlja1NwZWMoc3RvcCwgc3RhcnQsIGNvdW50KSA6IHRpY2tTcGVjKHN0YXJ0LCBzdG9wLCBjb3VudCk7XG4gIGlmICghKGkyID49IGkxKSkgcmV0dXJuIFtdO1xuICBjb25zdCBuID0gaTIgLSBpMSArIDEsIHRpY2tzID0gbmV3IEFycmF5KG4pO1xuICBpZiAocmV2ZXJzZSkge1xuICAgIGlmIChpbmMgPCAwKSBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkgdGlja3NbaV0gPSAoaTIgLSBpKSAvIC1pbmM7XG4gICAgZWxzZSBmb3IgKGxldCBpID0gMDsgaSA8IG47ICsraSkgdGlja3NbaV0gPSAoaTIgLSBpKSAqIGluYztcbiAgfSBlbHNlIHtcbiAgICBpZiAoaW5jIDwgMCkgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHRpY2tzW2ldID0gKGkxICsgaSkgLyAtaW5jO1xuICAgIGVsc2UgZm9yIChsZXQgaSA9IDA7IGkgPCBuOyArK2kpIHRpY2tzW2ldID0gKGkxICsgaSkgKiBpbmM7XG4gIH1cbiAgcmV0dXJuIHRpY2tzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgc3RvcCA9ICtzdG9wLCBzdGFydCA9ICtzdGFydCwgY291bnQgPSArY291bnQ7XG4gIHJldHVybiB0aWNrU3BlYyhzdGFydCwgc3RvcCwgY291bnQpWzJdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGlja1N0ZXAoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHN0b3AgPSArc3RvcCwgc3RhcnQgPSArc3RhcnQsIGNvdW50ID0gK2NvdW50O1xuICBjb25zdCByZXZlcnNlID0gc3RvcCA8IHN0YXJ0LCBpbmMgPSByZXZlcnNlID8gdGlja0luY3JlbWVudChzdG9wLCBzdGFydCwgY291bnQpIDogdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpO1xuICByZXR1cm4gKHJldmVyc2UgPyAtMSA6IDEpICogKGluYyA8IDAgPyAxIC8gLWluYyA6IGluYyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXgodmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBtYXg7XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGxcbiAgICAgICAgICAmJiAobWF4IDwgdmFsdWUgfHwgKG1heCA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpICE9IG51bGxcbiAgICAgICAgICAmJiAobWF4IDwgdmFsdWUgfHwgKG1heCA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXg7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtaW4odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBtaW47XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGxcbiAgICAgICAgICAmJiAobWluID4gdmFsdWUgfHwgKG1pbiA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpICE9IG51bGxcbiAgICAgICAgICAmJiAobWluID4gdmFsdWUgfHwgKG1pbiA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtaW47XG59XG4iLCJpbXBvcnQge2FzY2VuZGluZ0RlZmluZWQsIGNvbXBhcmVEZWZpbmVkfSBmcm9tIFwiLi9zb3J0LmpzXCI7XG5cbi8vIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3VybmVyL3F1aWNrc2VsZWN0XG4vLyBJU0MgbGljZW5zZSwgQ29weXJpZ2h0IDIwMTggVmxhZGltaXIgQWdhZm9ua2luLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVpY2tzZWxlY3QoYXJyYXksIGssIGxlZnQgPSAwLCByaWdodCA9IEluZmluaXR5LCBjb21wYXJlKSB7XG4gIGsgPSBNYXRoLmZsb29yKGspO1xuICBsZWZ0ID0gTWF0aC5mbG9vcihNYXRoLm1heCgwLCBsZWZ0KSk7XG4gIHJpZ2h0ID0gTWF0aC5mbG9vcihNYXRoLm1pbihhcnJheS5sZW5ndGggLSAxLCByaWdodCkpO1xuXG4gIGlmICghKGxlZnQgPD0gayAmJiBrIDw9IHJpZ2h0KSkgcmV0dXJuIGFycmF5O1xuXG4gIGNvbXBhcmUgPSBjb21wYXJlID09PSB1bmRlZmluZWQgPyBhc2NlbmRpbmdEZWZpbmVkIDogY29tcGFyZURlZmluZWQoY29tcGFyZSk7XG5cbiAgd2hpbGUgKHJpZ2h0ID4gbGVmdCkge1xuICAgIGlmIChyaWdodCAtIGxlZnQgPiA2MDApIHtcbiAgICAgIGNvbnN0IG4gPSByaWdodCAtIGxlZnQgKyAxO1xuICAgICAgY29uc3QgbSA9IGsgLSBsZWZ0ICsgMTtcbiAgICAgIGNvbnN0IHogPSBNYXRoLmxvZyhuKTtcbiAgICAgIGNvbnN0IHMgPSAwLjUgKiBNYXRoLmV4cCgyICogeiAvIDMpO1xuICAgICAgY29uc3Qgc2QgPSAwLjUgKiBNYXRoLnNxcnQoeiAqIHMgKiAobiAtIHMpIC8gbikgKiAobSAtIG4gLyAyIDwgMCA/IC0xIDogMSk7XG4gICAgICBjb25zdCBuZXdMZWZ0ID0gTWF0aC5tYXgobGVmdCwgTWF0aC5mbG9vcihrIC0gbSAqIHMgLyBuICsgc2QpKTtcbiAgICAgIGNvbnN0IG5ld1JpZ2h0ID0gTWF0aC5taW4ocmlnaHQsIE1hdGguZmxvb3IoayArIChuIC0gbSkgKiBzIC8gbiArIHNkKSk7XG4gICAgICBxdWlja3NlbGVjdChhcnJheSwgaywgbmV3TGVmdCwgbmV3UmlnaHQsIGNvbXBhcmUpO1xuICAgIH1cblxuICAgIGNvbnN0IHQgPSBhcnJheVtrXTtcbiAgICBsZXQgaSA9IGxlZnQ7XG4gICAgbGV0IGogPSByaWdodDtcblxuICAgIHN3YXAoYXJyYXksIGxlZnQsIGspO1xuICAgIGlmIChjb21wYXJlKGFycmF5W3JpZ2h0XSwgdCkgPiAwKSBzd2FwKGFycmF5LCBsZWZ0LCByaWdodCk7XG5cbiAgICB3aGlsZSAoaSA8IGopIHtcbiAgICAgIHN3YXAoYXJyYXksIGksIGopLCArK2ksIC0tajtcbiAgICAgIHdoaWxlIChjb21wYXJlKGFycmF5W2ldLCB0KSA8IDApICsraTtcbiAgICAgIHdoaWxlIChjb21wYXJlKGFycmF5W2pdLCB0KSA+IDApIC0tajtcbiAgICB9XG5cbiAgICBpZiAoY29tcGFyZShhcnJheVtsZWZ0XSwgdCkgPT09IDApIHN3YXAoYXJyYXksIGxlZnQsIGopO1xuICAgIGVsc2UgKytqLCBzd2FwKGFycmF5LCBqLCByaWdodCk7XG5cbiAgICBpZiAoaiA8PSBrKSBsZWZ0ID0gaiArIDE7XG4gICAgaWYgKGsgPD0gaikgcmlnaHQgPSBqIC0gMTtcbiAgfVxuXG4gIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gc3dhcChhcnJheSwgaSwgaikge1xuICBjb25zdCB0ID0gYXJyYXlbaV07XG4gIGFycmF5W2ldID0gYXJyYXlbal07XG4gIGFycmF5W2pdID0gdDtcbn1cbiIsImltcG9ydCBxdWFudGlsZSwge3F1YW50aWxlSW5kZXh9IGZyb20gXCIuL3F1YW50aWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lZGlhbih2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgcmV0dXJuIHF1YW50aWxlKHZhbHVlcywgMC41LCB2YWx1ZW9mKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1lZGlhbkluZGV4KHZhbHVlcywgdmFsdWVvZikge1xuICByZXR1cm4gcXVhbnRpbGVJbmRleCh2YWx1ZXMsIDAuNSwgdmFsdWVvZik7XG59XG4iLCJpbXBvcnQgbWF4IGZyb20gXCIuL21heC5qc1wiO1xuaW1wb3J0IG1heEluZGV4IGZyb20gXCIuL21heEluZGV4LmpzXCI7XG5pbXBvcnQgbWluIGZyb20gXCIuL21pbi5qc1wiO1xuaW1wb3J0IG1pbkluZGV4IGZyb20gXCIuL21pbkluZGV4LmpzXCI7XG5pbXBvcnQgcXVpY2tzZWxlY3QgZnJvbSBcIi4vcXVpY2tzZWxlY3QuanNcIjtcbmltcG9ydCBudW1iZXIsIHtudW1iZXJzfSBmcm9tIFwiLi9udW1iZXIuanNcIjtcbmltcG9ydCB7YXNjZW5kaW5nRGVmaW5lZH0gZnJvbSBcIi4vc29ydC5qc1wiO1xuaW1wb3J0IGdyZWF0ZXN0IGZyb20gXCIuL2dyZWF0ZXN0LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHF1YW50aWxlKHZhbHVlcywgcCwgdmFsdWVvZikge1xuICB2YWx1ZXMgPSBGbG9hdDY0QXJyYXkuZnJvbShudW1iZXJzKHZhbHVlcywgdmFsdWVvZikpO1xuICBpZiAoIShuID0gdmFsdWVzLmxlbmd0aCkgfHwgaXNOYU4ocCA9ICtwKSkgcmV0dXJuO1xuICBpZiAocCA8PSAwIHx8IG4gPCAyKSByZXR1cm4gbWluKHZhbHVlcyk7XG4gIGlmIChwID49IDEpIHJldHVybiBtYXgodmFsdWVzKTtcbiAgdmFyIG4sXG4gICAgICBpID0gKG4gLSAxKSAqIHAsXG4gICAgICBpMCA9IE1hdGguZmxvb3IoaSksXG4gICAgICB2YWx1ZTAgPSBtYXgocXVpY2tzZWxlY3QodmFsdWVzLCBpMCkuc3ViYXJyYXkoMCwgaTAgKyAxKSksXG4gICAgICB2YWx1ZTEgPSBtaW4odmFsdWVzLnN1YmFycmF5KGkwICsgMSkpO1xuICByZXR1cm4gdmFsdWUwICsgKHZhbHVlMSAtIHZhbHVlMCkgKiAoaSAtIGkwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1YW50aWxlU29ydGVkKHZhbHVlcywgcCwgdmFsdWVvZiA9IG51bWJlcikge1xuICBpZiAoIShuID0gdmFsdWVzLmxlbmd0aCkgfHwgaXNOYU4ocCA9ICtwKSkgcmV0dXJuO1xuICBpZiAocCA8PSAwIHx8IG4gPCAyKSByZXR1cm4gK3ZhbHVlb2YodmFsdWVzWzBdLCAwLCB2YWx1ZXMpO1xuICBpZiAocCA+PSAxKSByZXR1cm4gK3ZhbHVlb2YodmFsdWVzW24gLSAxXSwgbiAtIDEsIHZhbHVlcyk7XG4gIHZhciBuLFxuICAgICAgaSA9IChuIC0gMSkgKiBwLFxuICAgICAgaTAgPSBNYXRoLmZsb29yKGkpLFxuICAgICAgdmFsdWUwID0gK3ZhbHVlb2YodmFsdWVzW2kwXSwgaTAsIHZhbHVlcyksXG4gICAgICB2YWx1ZTEgPSArdmFsdWVvZih2YWx1ZXNbaTAgKyAxXSwgaTAgKyAxLCB2YWx1ZXMpO1xuICByZXR1cm4gdmFsdWUwICsgKHZhbHVlMSAtIHZhbHVlMCkgKiAoaSAtIGkwKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHF1YW50aWxlSW5kZXgodmFsdWVzLCBwLCB2YWx1ZW9mID0gbnVtYmVyKSB7XG4gIGlmIChpc05hTihwID0gK3ApKSByZXR1cm47XG4gIG51bWJlcnMgPSBGbG9hdDY0QXJyYXkuZnJvbSh2YWx1ZXMsIChfLCBpKSA9PiBudW1iZXIodmFsdWVvZih2YWx1ZXNbaV0sIGksIHZhbHVlcykpKTtcbiAgaWYgKHAgPD0gMCkgcmV0dXJuIG1pbkluZGV4KG51bWJlcnMpO1xuICBpZiAocCA+PSAxKSByZXR1cm4gbWF4SW5kZXgobnVtYmVycyk7XG4gIHZhciBudW1iZXJzLFxuICAgICAgaW5kZXggPSBVaW50MzJBcnJheS5mcm9tKHZhbHVlcywgKF8sIGkpID0+IGkpLFxuICAgICAgaiA9IG51bWJlcnMubGVuZ3RoIC0gMSxcbiAgICAgIGkgPSBNYXRoLmZsb29yKGogKiBwKTtcbiAgcXVpY2tzZWxlY3QoaW5kZXgsIGksIDAsIGosIChpLCBqKSA9PiBhc2NlbmRpbmdEZWZpbmVkKG51bWJlcnNbaV0sIG51bWJlcnNbal0pKTtcbiAgaSA9IGdyZWF0ZXN0KGluZGV4LnN1YmFycmF5KDAsIGkgKyAxKSwgKGkpID0+IG51bWJlcnNbaV0pO1xuICByZXR1cm4gaSA+PSAwID8gaSA6IC0xO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmFuZ2Uoc3RhcnQsIHN0b3AsIHN0ZXApIHtcbiAgc3RhcnQgPSArc3RhcnQsIHN0b3AgPSArc3RvcCwgc3RlcCA9IChuID0gYXJndW1lbnRzLmxlbmd0aCkgPCAyID8gKHN0b3AgPSBzdGFydCwgc3RhcnQgPSAwLCAxKSA6IG4gPCAzID8gMSA6ICtzdGVwO1xuXG4gIHZhciBpID0gLTEsXG4gICAgICBuID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKChzdG9wIC0gc3RhcnQpIC8gc3RlcCkpIHwgMCxcbiAgICAgIHJhbmdlID0gbmV3IEFycmF5KG4pO1xuXG4gIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgcmFuZ2VbaV0gPSBzdGFydCArIGkgKiBzdGVwO1xuICB9XG5cbiAgcmV0dXJuIHJhbmdlO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3VtKHZhbHVlcywgdmFsdWVvZikge1xuICBsZXQgc3VtID0gMDtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlID0gK3ZhbHVlKSB7XG4gICAgICAgIHN1bSArPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgPSArdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkge1xuICAgICAgICBzdW0gKz0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBzdW07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB4O1xufVxuIiwiaW1wb3J0IGlkZW50aXR5IGZyb20gXCIuL2lkZW50aXR5LmpzXCI7XG5cbnZhciB0b3AgPSAxLFxuICAgIHJpZ2h0ID0gMixcbiAgICBib3R0b20gPSAzLFxuICAgIGxlZnQgPSA0LFxuICAgIGVwc2lsb24gPSAxZS02O1xuXG5mdW5jdGlvbiB0cmFuc2xhdGVYKHgpIHtcbiAgcmV0dXJuIFwidHJhbnNsYXRlKFwiICsgeCArIFwiLDApXCI7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZVkoeSkge1xuICByZXR1cm4gXCJ0cmFuc2xhdGUoMCxcIiArIHkgKyBcIilcIjtcbn1cblxuZnVuY3Rpb24gbnVtYmVyKHNjYWxlKSB7XG4gIHJldHVybiBkID0+ICtzY2FsZShkKTtcbn1cblxuZnVuY3Rpb24gY2VudGVyKHNjYWxlLCBvZmZzZXQpIHtcbiAgb2Zmc2V0ID0gTWF0aC5tYXgoMCwgc2NhbGUuYmFuZHdpZHRoKCkgLSBvZmZzZXQgKiAyKSAvIDI7XG4gIGlmIChzY2FsZS5yb3VuZCgpKSBvZmZzZXQgPSBNYXRoLnJvdW5kKG9mZnNldCk7XG4gIHJldHVybiBkID0+ICtzY2FsZShkKSArIG9mZnNldDtcbn1cblxuZnVuY3Rpb24gZW50ZXJpbmcoKSB7XG4gIHJldHVybiAhdGhpcy5fX2F4aXM7XG59XG5cbmZ1bmN0aW9uIGF4aXMob3JpZW50LCBzY2FsZSkge1xuICB2YXIgdGlja0FyZ3VtZW50cyA9IFtdLFxuICAgICAgdGlja1ZhbHVlcyA9IG51bGwsXG4gICAgICB0aWNrRm9ybWF0ID0gbnVsbCxcbiAgICAgIHRpY2tTaXplSW5uZXIgPSA2LFxuICAgICAgdGlja1NpemVPdXRlciA9IDYsXG4gICAgICB0aWNrUGFkZGluZyA9IDMsXG4gICAgICBvZmZzZXQgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvID4gMSA/IDAgOiAwLjUsXG4gICAgICBrID0gb3JpZW50ID09PSB0b3AgfHwgb3JpZW50ID09PSBsZWZ0ID8gLTEgOiAxLFxuICAgICAgeCA9IG9yaWVudCA9PT0gbGVmdCB8fCBvcmllbnQgPT09IHJpZ2h0ID8gXCJ4XCIgOiBcInlcIixcbiAgICAgIHRyYW5zZm9ybSA9IG9yaWVudCA9PT0gdG9wIHx8IG9yaWVudCA9PT0gYm90dG9tID8gdHJhbnNsYXRlWCA6IHRyYW5zbGF0ZVk7XG5cbiAgZnVuY3Rpb24gYXhpcyhjb250ZXh0KSB7XG4gICAgdmFyIHZhbHVlcyA9IHRpY2tWYWx1ZXMgPT0gbnVsbCA/IChzY2FsZS50aWNrcyA/IHNjYWxlLnRpY2tzLmFwcGx5KHNjYWxlLCB0aWNrQXJndW1lbnRzKSA6IHNjYWxlLmRvbWFpbigpKSA6IHRpY2tWYWx1ZXMsXG4gICAgICAgIGZvcm1hdCA9IHRpY2tGb3JtYXQgPT0gbnVsbCA/IChzY2FsZS50aWNrRm9ybWF0ID8gc2NhbGUudGlja0Zvcm1hdC5hcHBseShzY2FsZSwgdGlja0FyZ3VtZW50cykgOiBpZGVudGl0eSkgOiB0aWNrRm9ybWF0LFxuICAgICAgICBzcGFjaW5nID0gTWF0aC5tYXgodGlja1NpemVJbm5lciwgMCkgKyB0aWNrUGFkZGluZyxcbiAgICAgICAgcmFuZ2UgPSBzY2FsZS5yYW5nZSgpLFxuICAgICAgICByYW5nZTAgPSArcmFuZ2VbMF0gKyBvZmZzZXQsXG4gICAgICAgIHJhbmdlMSA9ICtyYW5nZVtyYW5nZS5sZW5ndGggLSAxXSArIG9mZnNldCxcbiAgICAgICAgcG9zaXRpb24gPSAoc2NhbGUuYmFuZHdpZHRoID8gY2VudGVyIDogbnVtYmVyKShzY2FsZS5jb3B5KCksIG9mZnNldCksXG4gICAgICAgIHNlbGVjdGlvbiA9IGNvbnRleHQuc2VsZWN0aW9uID8gY29udGV4dC5zZWxlY3Rpb24oKSA6IGNvbnRleHQsXG4gICAgICAgIHBhdGggPSBzZWxlY3Rpb24uc2VsZWN0QWxsKFwiLmRvbWFpblwiKS5kYXRhKFtudWxsXSksXG4gICAgICAgIHRpY2sgPSBzZWxlY3Rpb24uc2VsZWN0QWxsKFwiLnRpY2tcIikuZGF0YSh2YWx1ZXMsIHNjYWxlKS5vcmRlcigpLFxuICAgICAgICB0aWNrRXhpdCA9IHRpY2suZXhpdCgpLFxuICAgICAgICB0aWNrRW50ZXIgPSB0aWNrLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJ0aWNrXCIpLFxuICAgICAgICBsaW5lID0gdGljay5zZWxlY3QoXCJsaW5lXCIpLFxuICAgICAgICB0ZXh0ID0gdGljay5zZWxlY3QoXCJ0ZXh0XCIpO1xuXG4gICAgcGF0aCA9IHBhdGgubWVyZ2UocGF0aC5lbnRlcigpLmluc2VydChcInBhdGhcIiwgXCIudGlja1wiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiZG9tYWluXCIpXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiY3VycmVudENvbG9yXCIpKTtcblxuICAgIHRpY2sgPSB0aWNrLm1lcmdlKHRpY2tFbnRlcik7XG5cbiAgICBsaW5lID0gbGluZS5tZXJnZSh0aWNrRW50ZXIuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcImN1cnJlbnRDb2xvclwiKVxuICAgICAgICAuYXR0cih4ICsgXCIyXCIsIGsgKiB0aWNrU2l6ZUlubmVyKSk7XG5cbiAgICB0ZXh0ID0gdGV4dC5tZXJnZSh0aWNrRW50ZXIuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCJjdXJyZW50Q29sb3JcIilcbiAgICAgICAgLmF0dHIoeCwgayAqIHNwYWNpbmcpXG4gICAgICAgIC5hdHRyKFwiZHlcIiwgb3JpZW50ID09PSB0b3AgPyBcIjBlbVwiIDogb3JpZW50ID09PSBib3R0b20gPyBcIjAuNzFlbVwiIDogXCIwLjMyZW1cIikpO1xuXG4gICAgaWYgKGNvbnRleHQgIT09IHNlbGVjdGlvbikge1xuICAgICAgcGF0aCA9IHBhdGgudHJhbnNpdGlvbihjb250ZXh0KTtcbiAgICAgIHRpY2sgPSB0aWNrLnRyYW5zaXRpb24oY29udGV4dCk7XG4gICAgICBsaW5lID0gbGluZS50cmFuc2l0aW9uKGNvbnRleHQpO1xuICAgICAgdGV4dCA9IHRleHQudHJhbnNpdGlvbihjb250ZXh0KTtcblxuICAgICAgdGlja0V4aXQgPSB0aWNrRXhpdC50cmFuc2l0aW9uKGNvbnRleHQpXG4gICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIGVwc2lsb24pXG4gICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gaXNGaW5pdGUoZCA9IHBvc2l0aW9uKGQpKSA/IHRyYW5zZm9ybShkICsgb2Zmc2V0KSA6IHRoaXMuZ2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIpOyB9KTtcblxuICAgICAgdGlja0VudGVyXG4gICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIGVwc2lsb24pXG4gICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyB2YXIgcCA9IHRoaXMucGFyZW50Tm9kZS5fX2F4aXM7IHJldHVybiB0cmFuc2Zvcm0oKHAgJiYgaXNGaW5pdGUocCA9IHAoZCkpID8gcCA6IHBvc2l0aW9uKGQpKSArIG9mZnNldCk7IH0pO1xuICAgIH1cblxuICAgIHRpY2tFeGl0LnJlbW92ZSgpO1xuXG4gICAgcGF0aFxuICAgICAgICAuYXR0cihcImRcIiwgb3JpZW50ID09PSBsZWZ0IHx8IG9yaWVudCA9PT0gcmlnaHRcbiAgICAgICAgICAgID8gKHRpY2tTaXplT3V0ZXIgPyBcIk1cIiArIGsgKiB0aWNrU2l6ZU91dGVyICsgXCIsXCIgKyByYW5nZTAgKyBcIkhcIiArIG9mZnNldCArIFwiVlwiICsgcmFuZ2UxICsgXCJIXCIgKyBrICogdGlja1NpemVPdXRlciA6IFwiTVwiICsgb2Zmc2V0ICsgXCIsXCIgKyByYW5nZTAgKyBcIlZcIiArIHJhbmdlMSlcbiAgICAgICAgICAgIDogKHRpY2tTaXplT3V0ZXIgPyBcIk1cIiArIHJhbmdlMCArIFwiLFwiICsgayAqIHRpY2tTaXplT3V0ZXIgKyBcIlZcIiArIG9mZnNldCArIFwiSFwiICsgcmFuZ2UxICsgXCJWXCIgKyBrICogdGlja1NpemVPdXRlciA6IFwiTVwiICsgcmFuZ2UwICsgXCIsXCIgKyBvZmZzZXQgKyBcIkhcIiArIHJhbmdlMSkpO1xuXG4gICAgdGlja1xuICAgICAgICAuYXR0cihcIm9wYWNpdHlcIiwgMSlcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gdHJhbnNmb3JtKHBvc2l0aW9uKGQpICsgb2Zmc2V0KTsgfSk7XG5cbiAgICBsaW5lXG4gICAgICAgIC5hdHRyKHggKyBcIjJcIiwgayAqIHRpY2tTaXplSW5uZXIpO1xuXG4gICAgdGV4dFxuICAgICAgICAuYXR0cih4LCBrICogc3BhY2luZylcbiAgICAgICAgLnRleHQoZm9ybWF0KTtcblxuICAgIHNlbGVjdGlvbi5maWx0ZXIoZW50ZXJpbmcpXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIilcbiAgICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgMTApXG4gICAgICAgIC5hdHRyKFwiZm9udC1mYW1pbHlcIiwgXCJzYW5zLXNlcmlmXCIpXG4gICAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgb3JpZW50ID09PSByaWdodCA/IFwic3RhcnRcIiA6IG9yaWVudCA9PT0gbGVmdCA/IFwiZW5kXCIgOiBcIm1pZGRsZVwiKTtcblxuICAgIHNlbGVjdGlvblxuICAgICAgICAuZWFjaChmdW5jdGlvbigpIHsgdGhpcy5fX2F4aXMgPSBwb3NpdGlvbjsgfSk7XG4gIH1cblxuICBheGlzLnNjYWxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNjYWxlID0gXywgYXhpcykgOiBzY2FsZTtcbiAgfTtcblxuICBheGlzLnRpY2tzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRpY2tBcmd1bWVudHMgPSBBcnJheS5mcm9tKGFyZ3VtZW50cyksIGF4aXM7XG4gIH07XG5cbiAgYXhpcy50aWNrQXJndW1lbnRzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tBcmd1bWVudHMgPSBfID09IG51bGwgPyBbXSA6IEFycmF5LmZyb20oXyksIGF4aXMpIDogdGlja0FyZ3VtZW50cy5zbGljZSgpO1xuICB9O1xuXG4gIGF4aXMudGlja1ZhbHVlcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrVmFsdWVzID0gXyA9PSBudWxsID8gbnVsbCA6IEFycmF5LmZyb20oXyksIGF4aXMpIDogdGlja1ZhbHVlcyAmJiB0aWNrVmFsdWVzLnNsaWNlKCk7XG4gIH07XG5cbiAgYXhpcy50aWNrRm9ybWF0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tGb3JtYXQgPSBfLCBheGlzKSA6IHRpY2tGb3JtYXQ7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZUlubmVyID0gdGlja1NpemVPdXRlciA9ICtfLCBheGlzKSA6IHRpY2tTaXplSW5uZXI7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZUlubmVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tTaXplSW5uZXIgPSArXywgYXhpcykgOiB0aWNrU2l6ZUlubmVyO1xuICB9O1xuXG4gIGF4aXMudGlja1NpemVPdXRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZU91dGVyID0gK18sIGF4aXMpIDogdGlja1NpemVPdXRlcjtcbiAgfTtcblxuICBheGlzLnRpY2tQYWRkaW5nID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tQYWRkaW5nID0gK18sIGF4aXMpIDogdGlja1BhZGRpbmc7XG4gIH07XG5cbiAgYXhpcy5vZmZzZXQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAob2Zmc2V0ID0gK18sIGF4aXMpIDogb2Zmc2V0O1xuICB9O1xuXG4gIHJldHVybiBheGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc1RvcChzY2FsZSkge1xuICByZXR1cm4gYXhpcyh0b3AsIHNjYWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNSaWdodChzY2FsZSkge1xuICByZXR1cm4gYXhpcyhyaWdodCwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc0JvdHRvbShzY2FsZSkge1xuICByZXR1cm4gYXhpcyhib3R0b20sIHNjYWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNMZWZ0KHNjYWxlKSB7XG4gIHJldHVybiBheGlzKGxlZnQsIHNjYWxlKTtcbn1cbiIsInZhciBub29wID0ge3ZhbHVlOiAoKSA9PiB7fX07XG5cbmZ1bmN0aW9uIGRpc3BhdGNoKCkge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IGFyZ3VtZW50cy5sZW5ndGgsIF8gPSB7fSwgdDsgaSA8IG47ICsraSkge1xuICAgIGlmICghKHQgPSBhcmd1bWVudHNbaV0gKyBcIlwiKSB8fCAodCBpbiBfKSB8fCAvW1xccy5dLy50ZXN0KHQpKSB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIHR5cGU6IFwiICsgdCk7XG4gICAgX1t0XSA9IFtdO1xuICB9XG4gIHJldHVybiBuZXcgRGlzcGF0Y2goXyk7XG59XG5cbmZ1bmN0aW9uIERpc3BhdGNoKF8pIHtcbiAgdGhpcy5fID0gXztcbn1cblxuZnVuY3Rpb24gcGFyc2VUeXBlbmFtZXModHlwZW5hbWVzLCB0eXBlcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgaWYgKHQgJiYgIXR5cGVzLmhhc093blByb3BlcnR5KHQpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdCk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbkRpc3BhdGNoLnByb3RvdHlwZSA9IGRpc3BhdGNoLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IERpc3BhdGNoLFxuICBvbjogZnVuY3Rpb24odHlwZW5hbWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIF8gPSB0aGlzLl8sXG4gICAgICAgIFQgPSBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZSArIFwiXCIsIF8pLFxuICAgICAgICB0LFxuICAgICAgICBpID0gLTEsXG4gICAgICAgIG4gPSBULmxlbmd0aDtcblxuICAgIC8vIElmIG5vIGNhbGxiYWNrIHdhcyBzcGVjaWZpZWQsIHJldHVybiB0aGUgY2FsbGJhY2sgb2YgdGhlIGdpdmVuIHR5cGUgYW5kIG5hbWUuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCh0ID0gKHR5cGVuYW1lID0gVFtpXSkudHlwZSkgJiYgKHQgPSBnZXQoX1t0XSwgdHlwZW5hbWUubmFtZSkpKSByZXR1cm4gdDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBhIHR5cGUgd2FzIHNwZWNpZmllZCwgc2V0IHRoZSBjYWxsYmFjayBmb3IgdGhlIGdpdmVuIHR5cGUgYW5kIG5hbWUuXG4gICAgLy8gT3RoZXJ3aXNlLCBpZiBhIG51bGwgY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmVtb3ZlIGNhbGxiYWNrcyBvZiB0aGUgZ2l2ZW4gbmFtZS5cbiAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjYWxsYmFjazogXCIgKyBjYWxsYmFjayk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh0ID0gKHR5cGVuYW1lID0gVFtpXSkudHlwZSkgX1t0XSA9IHNldChfW3RdLCB0eXBlbmFtZS5uYW1lLCBjYWxsYmFjayk7XG4gICAgICBlbHNlIGlmIChjYWxsYmFjayA9PSBudWxsKSBmb3IgKHQgaW4gXykgX1t0XSA9IHNldChfW3RdLCB0eXBlbmFtZS5uYW1lLCBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgY29weTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNvcHkgPSB7fSwgXyA9IHRoaXMuXztcbiAgICBmb3IgKHZhciB0IGluIF8pIGNvcHlbdF0gPSBfW3RdLnNsaWNlKCk7XG4gICAgcmV0dXJuIG5ldyBEaXNwYXRjaChjb3B5KTtcbiAgfSxcbiAgY2FsbDogZnVuY3Rpb24odHlwZSwgdGhhdCkge1xuICAgIGlmICgobiA9IGFyZ3VtZW50cy5sZW5ndGggLSAyKSA+IDApIGZvciAodmFyIGFyZ3MgPSBuZXcgQXJyYXkobiksIGkgPSAwLCBuLCB0OyBpIDwgbjsgKytpKSBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICBpZiAoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHR5cGUpO1xuICAgIGZvciAodCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfSxcbiAgYXBwbHk6IGZ1bmN0aW9uKHR5cGUsIHRoYXQsIGFyZ3MpIHtcbiAgICBpZiAoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHR5cGUpO1xuICAgIGZvciAodmFyIHQgPSB0aGlzLl9bdHlwZV0sIGkgPSAwLCBuID0gdC5sZW5ndGg7IGkgPCBuOyArK2kpIHRbaV0udmFsdWUuYXBwbHkodGhhdCwgYXJncyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldCh0eXBlLCBuYW1lKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gdHlwZS5sZW5ndGgsIGM7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoKGMgPSB0eXBlW2ldKS5uYW1lID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gYy52YWx1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0KHR5cGUsIG5hbWUsIGNhbGxiYWNrKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gdHlwZS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAodHlwZVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICB0eXBlW2ldID0gbm9vcCwgdHlwZSA9IHR5cGUuc2xpY2UoMCwgaSkuY29uY2F0KHR5cGUuc2xpY2UoaSArIDEpKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkgdHlwZS5wdXNoKHtuYW1lOiBuYW1lLCB2YWx1ZTogY2FsbGJhY2t9KTtcbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRpc3BhdGNoO1xuIiwiZXhwb3J0IHZhciB4aHRtbCA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHN2ZzogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB4aHRtbDogeGh0bWwsXG4gIHhsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgeG1sOiBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wiXG59O1xuIiwiaW1wb3J0IG5hbWVzcGFjZXMgZnJvbSBcIi4vbmFtZXNwYWNlcy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBwcmVmaXggPSBuYW1lICs9IFwiXCIsIGkgPSBwcmVmaXguaW5kZXhPZihcIjpcIik7XG4gIGlmIChpID49IDAgJiYgKHByZWZpeCA9IG5hbWUuc2xpY2UoMCwgaSkpICE9PSBcInhtbG5zXCIpIG5hbWUgPSBuYW1lLnNsaWNlKGkgKyAxKTtcbiAgcmV0dXJuIG5hbWVzcGFjZXMuaGFzT3duUHJvcGVydHkocHJlZml4KSA/IHtzcGFjZTogbmFtZXNwYWNlc1twcmVmaXhdLCBsb2NhbDogbmFtZX0gOiBuYW1lOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xufVxuIiwiaW1wb3J0IG5hbWVzcGFjZSBmcm9tIFwiLi9uYW1lc3BhY2UuanNcIjtcbmltcG9ydCB7eGh0bWx9IGZyb20gXCIuL25hbWVzcGFjZXMuanNcIjtcblxuZnVuY3Rpb24gY3JlYXRvckluaGVyaXQobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRvY3VtZW50ID0gdGhpcy5vd25lckRvY3VtZW50LFxuICAgICAgICB1cmkgPSB0aGlzLm5hbWVzcGFjZVVSSTtcbiAgICByZXR1cm4gdXJpID09PSB4aHRtbCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJID09PSB4aHRtbFxuICAgICAgICA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSlcbiAgICAgICAgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlModXJpLCBuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRvckZpeGVkKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcbiAgcmV0dXJuIChmdWxsbmFtZS5sb2NhbFxuICAgICAgPyBjcmVhdG9yRml4ZWRcbiAgICAgIDogY3JlYXRvckluaGVyaXQpKGZ1bGxuYW1lKTtcbn1cbiIsImZ1bmN0aW9uIG5vbmUoKSB7fVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IG5vbmUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsImZ1bmN0aW9uIGVtcHR5KCkge1xuICByZXR1cm4gW107XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiBzZWxlY3RvciA9PSBudWxsID8gZW1wdHkgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IGFycmF5IGZyb20gXCIuLi9hcnJheS5qc1wiO1xuaW1wb3J0IHNlbGVjdG9yQWxsIGZyb20gXCIuLi9zZWxlY3RvckFsbC5qc1wiO1xuXG5mdW5jdGlvbiBhcnJheUFsbChzZWxlY3QpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBhcnJheShzZWxlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCA9PT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBhcnJheUFsbChzZWxlY3QpO1xuICBlbHNlIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc3ViZ3JvdXBzLnB1c2goc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgcGFyZW50cyk7XG59XG4iLCIvLyBHaXZlbiBzb21ldGhpbmcgYXJyYXkgbGlrZSAob3IgbnVsbCksIHJldHVybnMgc29tZXRoaW5nIHRoYXQgaXMgc3RyaWN0bHkgYW5cbi8vIGFycmF5LiBUaGlzIGlzIHVzZWQgdG8gZW5zdXJlIHRoYXQgYXJyYXktbGlrZSBvYmplY3RzIHBhc3NlZCB0byBkMy5zZWxlY3RBbGxcbi8vIG9yIHNlbGVjdGlvbi5zZWxlY3RBbGwgYXJlIGNvbnZlcnRlZCBpbnRvIHByb3BlciBhcnJheXMgd2hlbiBjcmVhdGluZyBhXG4vLyBzZWxlY3Rpb247IHdlIGRvbuKAmXQgZXZlciB3YW50IHRvIGNyZWF0ZSBhIHNlbGVjdGlvbiBiYWNrZWQgYnkgYSBsaXZlXG4vLyBIVE1MQ29sbGVjdGlvbiBvciBOb2RlTGlzdC4gSG93ZXZlciwgbm90ZSB0aGF0IHNlbGVjdGlvbi5zZWxlY3RBbGwgd2lsbCB1c2UgYVxuLy8gc3RhdGljIE5vZGVMaXN0IGFzIGEgZ3JvdXAsIHNpbmNlIGl0IHNhZmVseSBkZXJpdmVkIGZyb20gcXVlcnlTZWxlY3RvckFsbC5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGFycmF5KHgpIHtcbiAgcmV0dXJuIHggPT0gbnVsbCA/IFtdIDogQXJyYXkuaXNBcnJheSh4KSA/IHggOiBBcnJheS5mcm9tKHgpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLm1hdGNoZXMoc2VsZWN0b3IpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2hpbGRNYXRjaGVyKHNlbGVjdG9yKSB7XG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUubWF0Y2hlcyhzZWxlY3Rvcik7XG4gIH07XG59XG5cbiIsImltcG9ydCB7Y2hpbGRNYXRjaGVyfSBmcm9tIFwiLi4vbWF0Y2hlci5qc1wiO1xuXG52YXIgZmluZCA9IEFycmF5LnByb3RvdHlwZS5maW5kO1xuXG5mdW5jdGlvbiBjaGlsZEZpbmQobWF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmaW5kLmNhbGwodGhpcy5jaGlsZHJlbiwgbWF0Y2gpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjaGlsZEZpcnN0KCkge1xuICByZXR1cm4gdGhpcy5maXJzdEVsZW1lbnRDaGlsZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KG1hdGNoID09IG51bGwgPyBjaGlsZEZpcnN0XG4gICAgICA6IGNoaWxkRmluZCh0eXBlb2YgbWF0Y2ggPT09IFwiZnVuY3Rpb25cIiA/IG1hdGNoIDogY2hpbGRNYXRjaGVyKG1hdGNoKSkpO1xufVxuIiwiaW1wb3J0IHtjaGlsZE1hdGNoZXJ9IGZyb20gXCIuLi9tYXRjaGVyLmpzXCI7XG5cbnZhciBmaWx0ZXIgPSBBcnJheS5wcm90b3R5cGUuZmlsdGVyO1xuXG5mdW5jdGlvbiBjaGlsZHJlbigpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5jaGlsZHJlbik7XG59XG5cbmZ1bmN0aW9uIGNoaWxkcmVuRmlsdGVyKG1hdGNoKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZmlsdGVyLmNhbGwodGhpcy5jaGlsZHJlbiwgbWF0Y2gpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3RBbGwobWF0Y2ggPT0gbnVsbCA/IGNoaWxkcmVuXG4gICAgICA6IGNoaWxkcmVuRmlsdGVyKHR5cGVvZiBtYXRjaCA9PT0gXCJmdW5jdGlvblwiID8gbWF0Y2ggOiBjaGlsZE1hdGNoZXIobWF0Y2gpKSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih1cGRhdGUpIHtcbiAgcmV0dXJuIG5ldyBBcnJheSh1cGRhdGUubGVuZ3RoKTtcbn1cbiIsImltcG9ydCBzcGFyc2UgZnJvbSBcIi4vc3BhcnNlLmpzXCI7XG5pbXBvcnQge1NlbGVjdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHRoaXMuX2VudGVyIHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBFbnRlck5vZGUocGFyZW50LCBkYXR1bSkge1xuICB0aGlzLm93bmVyRG9jdW1lbnQgPSBwYXJlbnQub3duZXJEb2N1bWVudDtcbiAgdGhpcy5uYW1lc3BhY2VVUkkgPSBwYXJlbnQubmFtZXNwYWNlVVJJO1xuICB0aGlzLl9uZXh0ID0gbnVsbDtcbiAgdGhpcy5fcGFyZW50ID0gcGFyZW50O1xuICB0aGlzLl9fZGF0YV9fID0gZGF0dW07XG59XG5cbkVudGVyTm9kZS5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBFbnRlck5vZGUsXG4gIGFwcGVuZENoaWxkOiBmdW5jdGlvbihjaGlsZCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgdGhpcy5fbmV4dCk7IH0sXG4gIGluc2VydEJlZm9yZTogZnVuY3Rpb24oY2hpbGQsIG5leHQpIHsgcmV0dXJuIHRoaXMuX3BhcmVudC5pbnNlcnRCZWZvcmUoY2hpbGQsIG5leHQpOyB9LFxuICBxdWVyeVNlbGVjdG9yOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOyB9LFxuICBxdWVyeVNlbGVjdG9yQWxsOiBmdW5jdGlvbihzZWxlY3RvcikgeyByZXR1cm4gdGhpcy5fcGFyZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpOyB9XG59O1xuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQge0VudGVyTm9kZX0gZnJvbSBcIi4vZW50ZXIuanNcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi4vY29uc3RhbnQuanNcIjtcblxuZnVuY3Rpb24gYmluZEluZGV4KHBhcmVudCwgZ3JvdXAsIGVudGVyLCB1cGRhdGUsIGV4aXQsIGRhdGEpIHtcbiAgdmFyIGkgPSAwLFxuICAgICAgbm9kZSxcbiAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoO1xuXG4gIC8vIFB1dCBhbnkgbm9uLW51bGwgbm9kZXMgdGhhdCBmaXQgaW50byB1cGRhdGUuXG4gIC8vIFB1dCBhbnkgbnVsbCBub2RlcyBpbnRvIGVudGVyLlxuICAvLyBQdXQgYW55IHJlbWFpbmluZyBkYXRhIGludG8gZW50ZXIuXG4gIGZvciAoOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgbm9kZS5fX2RhdGFfXyA9IGRhdGFbaV07XG4gICAgICB1cGRhdGVbaV0gPSBub2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBlbnRlcltpXSA9IG5ldyBFbnRlck5vZGUocGFyZW50LCBkYXRhW2ldKTtcbiAgICB9XG4gIH1cblxuICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZG9u4oCZdCBmaXQgaW50byBleGl0LlxuICBmb3IgKDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBleGl0W2ldID0gbm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYmluZEtleShwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhLCBrZXkpIHtcbiAgdmFyIGksXG4gICAgICBub2RlLFxuICAgICAgbm9kZUJ5S2V5VmFsdWUgPSBuZXcgTWFwLFxuICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICBrZXlWYWx1ZXMgPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpLFxuICAgICAga2V5VmFsdWU7XG5cbiAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIG5vZGUuXG4gIC8vIElmIG11bHRpcGxlIG5vZGVzIGhhdmUgdGhlIHNhbWUga2V5LCB0aGUgZHVwbGljYXRlcyBhcmUgYWRkZWQgdG8gZXhpdC5cbiAgZm9yIChpID0gMDsgaSA8IGdyb3VwTGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICBrZXlWYWx1ZXNbaV0gPSBrZXlWYWx1ZSA9IGtleS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSArIFwiXCI7XG4gICAgICBpZiAobm9kZUJ5S2V5VmFsdWUuaGFzKGtleVZhbHVlKSkge1xuICAgICAgICBleGl0W2ldID0gbm9kZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vZGVCeUtleVZhbHVlLnNldChrZXlWYWx1ZSwgbm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gQ29tcHV0ZSB0aGUga2V5IGZvciBlYWNoIGRhdHVtLlxuICAvLyBJZiB0aGVyZSBhIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoaXMga2V5LCBqb2luIGFuZCBhZGQgaXQgdG8gdXBkYXRlLlxuICAvLyBJZiB0aGVyZSBpcyBub3QgKG9yIHRoZSBrZXkgaXMgYSBkdXBsaWNhdGUpLCBhZGQgaXQgdG8gZW50ZXIuXG4gIGZvciAoaSA9IDA7IGkgPCBkYXRhTGVuZ3RoOyArK2kpIHtcbiAgICBrZXlWYWx1ZSA9IGtleS5jYWxsKHBhcmVudCwgZGF0YVtpXSwgaSwgZGF0YSkgKyBcIlwiO1xuICAgIGlmIChub2RlID0gbm9kZUJ5S2V5VmFsdWUuZ2V0KGtleVZhbHVlKSkge1xuICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgbm9kZUJ5S2V5VmFsdWUuZGVsZXRlKGtleVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQWRkIGFueSByZW1haW5pbmcgbm9kZXMgdGhhdCB3ZXJlIG5vdCBib3VuZCB0byBkYXRhIHRvIGV4aXQuXG4gIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIChub2RlQnlLZXlWYWx1ZS5nZXQoa2V5VmFsdWVzW2ldKSA9PT0gbm9kZSkpIHtcbiAgICAgIGV4aXRbaV0gPSBub2RlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBkYXR1bShub2RlKSB7XG4gIHJldHVybiBub2RlLl9fZGF0YV9fO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSwga2V5KSB7XG4gIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIEFycmF5LmZyb20odGhpcywgZGF0dW0pO1xuXG4gIHZhciBiaW5kID0ga2V5ID8gYmluZEtleSA6IGJpbmRJbmRleCxcbiAgICAgIHBhcmVudHMgPSB0aGlzLl9wYXJlbnRzLFxuICAgICAgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzO1xuXG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdmFsdWUgPSBjb25zdGFudCh2YWx1ZSk7XG5cbiAgZm9yICh2YXIgbSA9IGdyb3Vwcy5sZW5ndGgsIHVwZGF0ZSA9IG5ldyBBcnJheShtKSwgZW50ZXIgPSBuZXcgQXJyYXkobSksIGV4aXQgPSBuZXcgQXJyYXkobSksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgdmFyIHBhcmVudCA9IHBhcmVudHNbal0sXG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2pdLFxuICAgICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgICAgZGF0YSA9IGFycmF5bGlrZSh2YWx1ZS5jYWxsKHBhcmVudCwgcGFyZW50ICYmIHBhcmVudC5fX2RhdGFfXywgaiwgcGFyZW50cykpLFxuICAgICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGVudGVyR3JvdXAgPSBlbnRlcltqXSA9IG5ldyBBcnJheShkYXRhTGVuZ3RoKSxcbiAgICAgICAgdXBkYXRlR3JvdXAgPSB1cGRhdGVbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgIGV4aXRHcm91cCA9IGV4aXRbal0gPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpO1xuXG4gICAgYmluZChwYXJlbnQsIGdyb3VwLCBlbnRlckdyb3VwLCB1cGRhdGVHcm91cCwgZXhpdEdyb3VwLCBkYXRhLCBrZXkpO1xuXG4gICAgLy8gTm93IGNvbm5lY3QgdGhlIGVudGVyIG5vZGVzIHRvIHRoZWlyIGZvbGxvd2luZyB1cGRhdGUgbm9kZSwgc3VjaCB0aGF0XG4gICAgLy8gYXBwZW5kQ2hpbGQgY2FuIGluc2VydCB0aGUgbWF0ZXJpYWxpemVkIGVudGVyIG5vZGUgYmVmb3JlIHRoaXMgbm9kZSxcbiAgICAvLyByYXRoZXIgdGhhbiBhdCB0aGUgZW5kIG9mIHRoZSBwYXJlbnQgbm9kZS5cbiAgICBmb3IgKHZhciBpMCA9IDAsIGkxID0gMCwgcHJldmlvdXMsIG5leHQ7IGkwIDwgZGF0YUxlbmd0aDsgKytpMCkge1xuICAgICAgaWYgKHByZXZpb3VzID0gZW50ZXJHcm91cFtpMF0pIHtcbiAgICAgICAgaWYgKGkwID49IGkxKSBpMSA9IGkwICsgMTtcbiAgICAgICAgd2hpbGUgKCEobmV4dCA9IHVwZGF0ZUdyb3VwW2kxXSkgJiYgKytpMSA8IGRhdGFMZW5ndGgpO1xuICAgICAgICBwcmV2aW91cy5fbmV4dCA9IG5leHQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGUgPSBuZXcgU2VsZWN0aW9uKHVwZGF0ZSwgcGFyZW50cyk7XG4gIHVwZGF0ZS5fZW50ZXIgPSBlbnRlcjtcbiAgdXBkYXRlLl9leGl0ID0gZXhpdDtcbiAgcmV0dXJuIHVwZGF0ZTtcbn1cblxuLy8gR2l2ZW4gc29tZSBkYXRhLCB0aGlzIHJldHVybnMgYW4gYXJyYXktbGlrZSB2aWV3IG9mIGl0OiBhbiBvYmplY3QgdGhhdFxuLy8gZXhwb3NlcyBhIGxlbmd0aCBwcm9wZXJ0eSBhbmQgYWxsb3dzIG51bWVyaWMgaW5kZXhpbmcuIE5vdGUgdGhhdCB1bmxpa2Vcbi8vIHNlbGVjdEFsbCwgdGhpcyBpc27igJl0IHdvcnJpZWQgYWJvdXQg4oCcbGl2ZeKAnSBjb2xsZWN0aW9ucyBiZWNhdXNlIHRoZSByZXN1bHRpbmdcbi8vIGFycmF5IHdpbGwgb25seSBiZSB1c2VkIGJyaWVmbHkgd2hpbGUgZGF0YSBpcyBiZWluZyBib3VuZC4gKEl0IGlzIHBvc3NpYmxlIHRvXG4vLyBjYXVzZSB0aGUgZGF0YSB0byBjaGFuZ2Ugd2hpbGUgaXRlcmF0aW5nIGJ5IHVzaW5nIGEga2V5IGZ1bmN0aW9uLCBidXQgcGxlYXNlXG4vLyBkb27igJl0OyB3ZeKAmWQgcmF0aGVyIGF2b2lkIGEgZ3JhdHVpdG91cyBjb3B5LilcbmZ1bmN0aW9uIGFycmF5bGlrZShkYXRhKSB7XG4gIHJldHVybiB0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBcImxlbmd0aFwiIGluIGRhdGFcbiAgICA/IGRhdGEgLy8gQXJyYXksIFR5cGVkQXJyYXksIE5vZGVMaXN0LCBhcnJheS1saWtlXG4gICAgOiBBcnJheS5mcm9tKGRhdGEpOyAvLyBNYXAsIFNldCwgaXRlcmFibGUsIHN0cmluZywgb3IgYW55dGhpbmcgZWxzZVxufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbXBhcmUpIHtcbiAgaWYgKCFjb21wYXJlKSBjb21wYXJlID0gYXNjZW5kaW5nO1xuXG4gIGZ1bmN0aW9uIGNvbXBhcmVOb2RlKGEsIGIpIHtcbiAgICByZXR1cm4gYSAmJiBiID8gY29tcGFyZShhLl9fZGF0YV9fLCBiLl9fZGF0YV9fKSA6ICFhIC0gIWI7XG4gIH1cblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzb3J0Z3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzb3J0Z3JvdXAgPSBzb3J0Z3JvdXBzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzb3J0Z3JvdXBbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3J0Z3JvdXAuc29ydChjb21wYXJlTm9kZSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzb3J0Z3JvdXBzLCB0aGlzLl9wYXJlbnRzKS5vcmRlcigpO1xufVxuXG5mdW5jdGlvbiBhc2NlbmRpbmcoYSwgYikge1xuICByZXR1cm4gYSA8IGIgPyAtMSA6IGEgPiBiID8gMSA6IGEgPj0gYiA/IDAgOiBOYU47XG59XG4iLCJpbXBvcnQgbmFtZXNwYWNlIGZyb20gXCIuLi9uYW1lc3BhY2UuanNcIjtcblxuZnVuY3Rpb24gYXR0clJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clJlbW92ZU5TKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2YWx1ZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIGVsc2UgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgdik7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmICh2ID09IG51bGwpIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsLCB2KTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBub2RlID0gdGhpcy5ub2RlKCk7XG4gICAgcmV0dXJuIGZ1bGxuYW1lLmxvY2FsXG4gICAgICAgID8gbm9kZS5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpXG4gICAgICAgIDogbm9kZS5nZXRBdHRyaWJ1dGUoZnVsbG5hbWUpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyUmVtb3ZlTlMgOiBhdHRyUmVtb3ZlKSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyRnVuY3Rpb25OUyA6IGF0dHJGdW5jdGlvbilcbiAgICAgIDogKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckNvbnN0YW50TlMgOiBhdHRyQ29uc3RhbnQpKSkoZnVsbG5hbWUsIHZhbHVlKSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlKSB7XG4gIHJldHVybiAobm9kZS5vd25lckRvY3VtZW50ICYmIG5vZGUub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldykgLy8gbm9kZSBpcyBhIE5vZGVcbiAgICAgIHx8IChub2RlLmRvY3VtZW50ICYmIG5vZGUpIC8vIG5vZGUgaXMgYSBXaW5kb3dcbiAgICAgIHx8IG5vZGUuZGVmYXVsdFZpZXc7IC8vIG5vZGUgaXMgYSBEb2N1bWVudFxufVxuIiwiaW1wb3J0IGRlZmF1bHRWaWV3IGZyb20gXCIuLi93aW5kb3cuanNcIjtcblxuZnVuY3Rpb24gc3R5bGVSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVDb25zdGFudChuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdmFsdWUsIHByaW9yaXR5KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVGdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpO1xuICAgIGVsc2UgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCB2LCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDFcbiAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgICA/IHN0eWxlUmVtb3ZlIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICAgID8gc3R5bGVGdW5jdGlvblxuICAgICAgICAgICAgOiBzdHlsZUNvbnN0YW50KShuYW1lLCB2YWx1ZSwgcHJpb3JpdHkgPT0gbnVsbCA/IFwiXCIgOiBwcmlvcml0eSkpXG4gICAgICA6IHN0eWxlVmFsdWUodGhpcy5ub2RlKCksIG5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3R5bGVWYWx1ZShub2RlLCBuYW1lKSB7XG4gIHJldHVybiBub2RlLnN0eWxlLmdldFByb3BlcnR5VmFsdWUobmFtZSlcbiAgICAgIHx8IGRlZmF1bHRWaWV3KG5vZGUpLmdldENvbXB1dGVkU3R5bGUobm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuYW1lKTtcbn1cbiIsImZ1bmN0aW9uIHByb3BlcnR5UmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGRlbGV0ZSB0aGlzW25hbWVdO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUNvbnN0YW50KG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzW25hbWVdID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHByb3BlcnR5RnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSBkZWxldGUgdGhpc1tuYW1lXTtcbiAgICBlbHNlIHRoaXNbbmFtZV0gPSB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDFcbiAgICAgID8gdGhpcy5lYWNoKCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBwcm9wZXJ0eVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBwcm9wZXJ0eUZ1bmN0aW9uXG4gICAgICAgICAgOiBwcm9wZXJ0eUNvbnN0YW50KShuYW1lLCB2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpW25hbWVdO1xufVxuIiwiZnVuY3Rpb24gY2xhc3NBcnJheShzdHJpbmcpIHtcbiAgcmV0dXJuIHN0cmluZy50cmltKCkuc3BsaXQoL158XFxzKy8pO1xufVxuXG5mdW5jdGlvbiBjbGFzc0xpc3Qobm9kZSkge1xuICByZXR1cm4gbm9kZS5jbGFzc0xpc3QgfHwgbmV3IENsYXNzTGlzdChub2RlKTtcbn1cblxuZnVuY3Rpb24gQ2xhc3NMaXN0KG5vZGUpIHtcbiAgdGhpcy5fbm9kZSA9IG5vZGU7XG4gIHRoaXMuX25hbWVzID0gY2xhc3NBcnJheShub2RlLmdldEF0dHJpYnV0ZShcImNsYXNzXCIpIHx8IFwiXCIpO1xufVxuXG5DbGFzc0xpc3QucHJvdG90eXBlID0ge1xuICBhZGQ6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPCAwKSB7XG4gICAgICB0aGlzLl9uYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICByZW1vdmU6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICB2YXIgaSA9IHRoaXMuX25hbWVzLmluZGV4T2YobmFtZSk7XG4gICAgaWYgKGkgPj0gMCkge1xuICAgICAgdGhpcy5fbmFtZXMuc3BsaWNlKGksIDEpO1xuICAgICAgdGhpcy5fbm9kZS5zZXRBdHRyaWJ1dGUoXCJjbGFzc1wiLCB0aGlzLl9uYW1lcy5qb2luKFwiIFwiKSk7XG4gICAgfVxuICB9LFxuICBjb250YWluczogZnVuY3Rpb24obmFtZSkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpID49IDA7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNsYXNzZWRBZGQobm9kZSwgbmFtZXMpIHtcbiAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIGxpc3QuYWRkKG5hbWVzW2ldKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZFJlbW92ZShub2RlLCBuYW1lcykge1xuICB2YXIgbGlzdCA9IGNsYXNzTGlzdChub2RlKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICB3aGlsZSAoKytpIDwgbikgbGlzdC5yZW1vdmUobmFtZXNbaV0pO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkVHJ1ZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZEFkZCh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGYWxzZShuYW1lcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgY2xhc3NlZFJlbW92ZSh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRGdW5jdGlvbihuYW1lcywgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgICh2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpID8gY2xhc3NlZEFkZCA6IGNsYXNzZWRSZW1vdmUpKHRoaXMsIG5hbWVzKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIG5hbWVzID0gY2xhc3NBcnJheShuYW1lICsgXCJcIik7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIGxpc3QgPSBjbGFzc0xpc3QodGhpcy5ub2RlKCkpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gICAgd2hpbGUgKCsraSA8IG4pIGlmICghbGlzdC5jb250YWlucyhuYW1lc1tpXSkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICA/IGNsYXNzZWRGdW5jdGlvbiA6IHZhbHVlXG4gICAgICA/IGNsYXNzZWRUcnVlXG4gICAgICA6IGNsYXNzZWRGYWxzZSkobmFtZXMsIHZhbHVlKSk7XG59XG4iLCJmdW5jdGlvbiB0ZXh0UmVtb3ZlKCkge1xuICB0aGlzLnRleHRDb250ZW50ID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gdGV4dENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2ID09IG51bGwgPyBcIlwiIDogdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKHZhbHVlID09IG51bGxcbiAgICAgICAgICA/IHRleHRSZW1vdmUgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IHRleHRGdW5jdGlvblxuICAgICAgICAgIDogdGV4dENvbnN0YW50KSh2YWx1ZSkpXG4gICAgICA6IHRoaXMubm9kZSgpLnRleHRDb250ZW50O1xufVxuIiwiZnVuY3Rpb24gaHRtbFJlbW92ZSgpIHtcbiAgdGhpcy5pbm5lckhUTUwgPSBcIlwiO1xufVxuXG5mdW5jdGlvbiBodG1sQ29uc3RhbnQodmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGh0bWxGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHYgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIHRoaXMuaW5uZXJIVE1MID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyBodG1sUmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyBodG1sRnVuY3Rpb25cbiAgICAgICAgICA6IGh0bWxDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS5pbm5lckhUTUw7XG59XG4iLCJmdW5jdGlvbiByYWlzZSgpIHtcbiAgaWYgKHRoaXMubmV4dFNpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5hcHBlbmRDaGlsZCh0aGlzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gocmFpc2UpO1xufVxuIiwiZnVuY3Rpb24gbG93ZXIoKSB7XG4gIGlmICh0aGlzLnByZXZpb3VzU2libGluZykgdGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0aGlzLCB0aGlzLnBhcmVudE5vZGUuZmlyc3RDaGlsZCk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKGxvd2VyKTtcbn1cbiIsImltcG9ydCBjcmVhdG9yIGZyb20gXCIuLi9jcmVhdG9yLmpzXCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yLmpzXCI7XG5cbmZ1bmN0aW9uIGNvbnN0YW50TnVsbCgpIHtcbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIGJlZm9yZSkge1xuICB2YXIgY3JlYXRlID0gdHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIiA/IG5hbWUgOiBjcmVhdG9yKG5hbWUpLFxuICAgICAgc2VsZWN0ID0gYmVmb3JlID09IG51bGwgPyBjb25zdGFudE51bGwgOiB0eXBlb2YgYmVmb3JlID09PSBcImZ1bmN0aW9uXCIgPyBiZWZvcmUgOiBzZWxlY3RvcihiZWZvcmUpO1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5zZXJ0QmVmb3JlKGNyZWF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpLCBzZWxlY3QuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCBudWxsKTtcbiAgfSk7XG59XG4iLCJmdW5jdGlvbiByZW1vdmUoKSB7XG4gIHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gIGlmIChwYXJlbnQpIHBhcmVudC5yZW1vdmVDaGlsZCh0aGlzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLmVhY2gocmVtb3ZlKTtcbn1cbiIsImZ1bmN0aW9uIHNlbGVjdGlvbl9jbG9uZVNoYWxsb3coKSB7XG4gIHZhciBjbG9uZSA9IHRoaXMuY2xvbmVOb2RlKGZhbHNlKSwgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICByZXR1cm4gcGFyZW50ID8gcGFyZW50Lmluc2VydEJlZm9yZShjbG9uZSwgdGhpcy5uZXh0U2libGluZykgOiBjbG9uZTtcbn1cblxuZnVuY3Rpb24gc2VsZWN0aW9uX2Nsb25lRGVlcCgpIHtcbiAgdmFyIGNsb25lID0gdGhpcy5jbG9uZU5vZGUodHJ1ZSksIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgcmV0dXJuIHBhcmVudCA/IHBhcmVudC5pbnNlcnRCZWZvcmUoY2xvbmUsIHRoaXMubmV4dFNpYmxpbmcpIDogY2xvbmU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGRlZXApIHtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KGRlZXAgPyBzZWxlY3Rpb25fY2xvbmVEZWVwIDogc2VsZWN0aW9uX2Nsb25lU2hhbGxvdyk7XG59XG4iLCJmdW5jdGlvbiBjb250ZXh0TGlzdGVuZXIobGlzdGVuZXIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGV2ZW50KSB7XG4gICAgbGlzdGVuZXIuY2FsbCh0aGlzLCBldmVudCwgdGhpcy5fX2RhdGFfXyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIG9uUmVtb3ZlKHR5cGVuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgb24gPSB0aGlzLl9fb247XG4gICAgaWYgKCFvbikgcmV0dXJuO1xuICAgIGZvciAodmFyIGogPSAwLCBpID0gLTEsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcbiAgICAgIGlmIChvID0gb25bal0sICghdHlwZW5hbWUudHlwZSB8fCBvLnR5cGUgPT09IHR5cGVuYW1lLnR5cGUpICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLm9wdGlvbnMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb25bKytpXSA9IG87XG4gICAgICB9XG4gICAgfVxuICAgIGlmICgrK2kpIG9uLmxlbmd0aCA9IGk7XG4gICAgZWxzZSBkZWxldGUgdGhpcy5fX29uO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbkFkZCh0eXBlbmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBvbiA9IHRoaXMuX19vbiwgbywgbGlzdGVuZXIgPSBjb250ZXh0TGlzdGVuZXIodmFsdWUpO1xuICAgIGlmIChvbikgZm9yICh2YXIgaiA9IDAsIG0gPSBvbi5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICAgIGlmICgobyA9IG9uW2pdKS50eXBlID09PSB0eXBlbmFtZS50eXBlICYmIG8ubmFtZSA9PT0gdHlwZW5hbWUubmFtZSkge1xuICAgICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyLCBvLm9wdGlvbnMpO1xuICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoby50eXBlLCBvLmxpc3RlbmVyID0gbGlzdGVuZXIsIG8ub3B0aW9ucyA9IG9wdGlvbnMpO1xuICAgICAgICBvLnZhbHVlID0gdmFsdWU7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKHR5cGVuYW1lLnR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgICBvID0ge3R5cGU6IHR5cGVuYW1lLnR5cGUsIG5hbWU6IHR5cGVuYW1lLm5hbWUsIHZhbHVlOiB2YWx1ZSwgbGlzdGVuZXI6IGxpc3RlbmVyLCBvcHRpb25zOiBvcHRpb25zfTtcbiAgICBpZiAoIW9uKSB0aGlzLl9fb24gPSBbb107XG4gICAgZWxzZSBvbi5wdXNoKG8pO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0eXBlbmFtZSwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgdmFyIHR5cGVuYW1lcyA9IHBhcnNlVHlwZW5hbWVzKHR5cGVuYW1lICsgXCJcIiksIGksIG4gPSB0eXBlbmFtZXMubGVuZ3RoLCB0O1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBvbiA9IHRoaXMubm9kZSgpLl9fb247XG4gICAgaWYgKG9uKSBmb3IgKHZhciBqID0gMCwgbSA9IG9uLmxlbmd0aCwgbzsgaiA8IG07ICsraikge1xuICAgICAgZm9yIChpID0gMCwgbyA9IG9uW2pdOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICgodCA9IHR5cGVuYW1lc1tpXSkudHlwZSA9PT0gby50eXBlICYmIHQubmFtZSA9PT0gby5uYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIG8udmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgb24gPSB2YWx1ZSA/IG9uQWRkIDogb25SZW1vdmU7XG4gIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHRoaXMuZWFjaChvbih0eXBlbmFtZXNbaV0sIHZhbHVlLCBvcHRpb25zKSk7XG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IGRlZmF1bHRWaWV3IGZyb20gXCIuLi93aW5kb3cuanNcIjtcblxuZnVuY3Rpb24gZGlzcGF0Y2hFdmVudChub2RlLCB0eXBlLCBwYXJhbXMpIHtcbiAgdmFyIHdpbmRvdyA9IGRlZmF1bHRWaWV3KG5vZGUpLFxuICAgICAgZXZlbnQgPSB3aW5kb3cuQ3VzdG9tRXZlbnQ7XG5cbiAgaWYgKHR5cGVvZiBldmVudCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZXZlbnQgPSBuZXcgZXZlbnQodHlwZSwgcGFyYW1zKTtcbiAgfSBlbHNlIHtcbiAgICBldmVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFdmVudChcIkV2ZW50XCIpO1xuICAgIGlmIChwYXJhbXMpIGV2ZW50LmluaXRFdmVudCh0eXBlLCBwYXJhbXMuYnViYmxlcywgcGFyYW1zLmNhbmNlbGFibGUpLCBldmVudC5kZXRhaWwgPSBwYXJhbXMuZGV0YWlsO1xuICAgIGVsc2UgZXZlbnQuaW5pdEV2ZW50KHR5cGUsIGZhbHNlLCBmYWxzZSk7XG4gIH1cblxuICBub2RlLmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xufVxuXG5mdW5jdGlvbiBkaXNwYXRjaENvbnN0YW50KHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGRpc3BhdGNoRXZlbnQodGhpcywgdHlwZSwgcGFyYW1zKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hGdW5jdGlvbih0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KHRoaXMsIHR5cGUsIHBhcmFtcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiB0aGlzLmVhY2goKHR5cGVvZiBwYXJhbXMgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBkaXNwYXRjaEZ1bmN0aW9uXG4gICAgICA6IGRpc3BhdGNoQ29uc3RhbnQpKHR5cGUsIHBhcmFtcykpO1xufVxuIiwiaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3QgZnJvbSBcIi4vc2VsZWN0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdEFsbCBmcm9tIFwiLi9zZWxlY3RBbGwuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2VsZWN0Q2hpbGQgZnJvbSBcIi4vc2VsZWN0Q2hpbGQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2VsZWN0Q2hpbGRyZW4gZnJvbSBcIi4vc2VsZWN0Q2hpbGRyZW4uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZmlsdGVyIGZyb20gXCIuL2ZpbHRlci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9kYXRhIGZyb20gXCIuL2RhdGEuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZW50ZXIgZnJvbSBcIi4vZW50ZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZXhpdCBmcm9tIFwiLi9leGl0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2pvaW4gZnJvbSBcIi4vam9pbi5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9tZXJnZSBmcm9tIFwiLi9tZXJnZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9vcmRlciBmcm9tIFwiLi9vcmRlci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zb3J0IGZyb20gXCIuL3NvcnQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2FsbCBmcm9tIFwiLi9jYWxsLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX25vZGVzIGZyb20gXCIuL25vZGVzLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX25vZGUgZnJvbSBcIi4vbm9kZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zaXplIGZyb20gXCIuL3NpemUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZW1wdHkgZnJvbSBcIi4vZW1wdHkuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZWFjaCBmcm9tIFwiLi9lYWNoLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2F0dHIgZnJvbSBcIi4vYXR0ci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zdHlsZSBmcm9tIFwiLi9zdHlsZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9wcm9wZXJ0eSBmcm9tIFwiLi9wcm9wZXJ0eS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9jbGFzc2VkIGZyb20gXCIuL2NsYXNzZWQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fdGV4dCBmcm9tIFwiLi90ZXh0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2h0bWwgZnJvbSBcIi4vaHRtbC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9yYWlzZSBmcm9tIFwiLi9yYWlzZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9sb3dlciBmcm9tIFwiLi9sb3dlci5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9hcHBlbmQgZnJvbSBcIi4vYXBwZW5kLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2luc2VydCBmcm9tIFwiLi9pbnNlcnQuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fcmVtb3ZlIGZyb20gXCIuL3JlbW92ZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9jbG9uZSBmcm9tIFwiLi9jbG9uZS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9kYXR1bSBmcm9tIFwiLi9kYXR1bS5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9vbiBmcm9tIFwiLi9vbi5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9kaXNwYXRjaCBmcm9tIFwiLi9kaXNwYXRjaC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9pdGVyYXRvciBmcm9tIFwiLi9pdGVyYXRvci5qc1wiO1xuXG5leHBvcnQgdmFyIHJvb3QgPSBbbnVsbF07XG5cbmV4cG9ydCBmdW5jdGlvbiBTZWxlY3Rpb24oZ3JvdXBzLCBwYXJlbnRzKSB7XG4gIHRoaXMuX2dyb3VwcyA9IGdyb3VwcztcbiAgdGhpcy5fcGFyZW50cyA9IHBhcmVudHM7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oW1tkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdXSwgcm9vdCk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbl9zZWxlY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzO1xufVxuXG5TZWxlY3Rpb24ucHJvdG90eXBlID0gc2VsZWN0aW9uLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFNlbGVjdGlvbixcbiAgc2VsZWN0OiBzZWxlY3Rpb25fc2VsZWN0LFxuICBzZWxlY3RBbGw6IHNlbGVjdGlvbl9zZWxlY3RBbGwsXG4gIHNlbGVjdENoaWxkOiBzZWxlY3Rpb25fc2VsZWN0Q2hpbGQsXG4gIHNlbGVjdENoaWxkcmVuOiBzZWxlY3Rpb25fc2VsZWN0Q2hpbGRyZW4sXG4gIGZpbHRlcjogc2VsZWN0aW9uX2ZpbHRlcixcbiAgZGF0YTogc2VsZWN0aW9uX2RhdGEsXG4gIGVudGVyOiBzZWxlY3Rpb25fZW50ZXIsXG4gIGV4aXQ6IHNlbGVjdGlvbl9leGl0LFxuICBqb2luOiBzZWxlY3Rpb25fam9pbixcbiAgbWVyZ2U6IHNlbGVjdGlvbl9tZXJnZSxcbiAgc2VsZWN0aW9uOiBzZWxlY3Rpb25fc2VsZWN0aW9uLFxuICBvcmRlcjogc2VsZWN0aW9uX29yZGVyLFxuICBzb3J0OiBzZWxlY3Rpb25fc29ydCxcbiAgY2FsbDogc2VsZWN0aW9uX2NhbGwsXG4gIG5vZGVzOiBzZWxlY3Rpb25fbm9kZXMsXG4gIG5vZGU6IHNlbGVjdGlvbl9ub2RlLFxuICBzaXplOiBzZWxlY3Rpb25fc2l6ZSxcbiAgZW1wdHk6IHNlbGVjdGlvbl9lbXB0eSxcbiAgZWFjaDogc2VsZWN0aW9uX2VhY2gsXG4gIGF0dHI6IHNlbGVjdGlvbl9hdHRyLFxuICBzdHlsZTogc2VsZWN0aW9uX3N0eWxlLFxuICBwcm9wZXJ0eTogc2VsZWN0aW9uX3Byb3BlcnR5LFxuICBjbGFzc2VkOiBzZWxlY3Rpb25fY2xhc3NlZCxcbiAgdGV4dDogc2VsZWN0aW9uX3RleHQsXG4gIGh0bWw6IHNlbGVjdGlvbl9odG1sLFxuICByYWlzZTogc2VsZWN0aW9uX3JhaXNlLFxuICBsb3dlcjogc2VsZWN0aW9uX2xvd2VyLFxuICBhcHBlbmQ6IHNlbGVjdGlvbl9hcHBlbmQsXG4gIGluc2VydDogc2VsZWN0aW9uX2luc2VydCxcbiAgcmVtb3ZlOiBzZWxlY3Rpb25fcmVtb3ZlLFxuICBjbG9uZTogc2VsZWN0aW9uX2Nsb25lLFxuICBkYXR1bTogc2VsZWN0aW9uX2RhdHVtLFxuICBvbjogc2VsZWN0aW9uX29uLFxuICBkaXNwYXRjaDogc2VsZWN0aW9uX2Rpc3BhdGNoLFxuICBbU3ltYm9sLml0ZXJhdG9yXTogc2VsZWN0aW9uX2l0ZXJhdG9yXG59O1xuXG5leHBvcnQgZGVmYXVsdCBzZWxlY3Rpb247XG4iLCJpbXBvcnQge1NlbGVjdGlvbiwgcm9vdH0gZnJvbSBcIi4vc2VsZWN0aW9uL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdG9yKSB7XG4gIHJldHVybiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCJcbiAgICAgID8gbmV3IFNlbGVjdGlvbihbW2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpXV0sIFtkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRdKVxuICAgICAgOiBuZXcgU2VsZWN0aW9uKFtbc2VsZWN0b3JdXSwgcm9vdCk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb25zdHJ1Y3RvciwgZmFjdG9yeSwgcHJvdG90eXBlKSB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGZhY3RvcnkucHJvdG90eXBlID0gcHJvdG90eXBlO1xuICBwcm90b3R5cGUuY29uc3RydWN0b3IgPSBjb25zdHJ1Y3Rvcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4dGVuZChwYXJlbnQsIGRlZmluaXRpb24pIHtcbiAgdmFyIHByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocGFyZW50LnByb3RvdHlwZSk7XG4gIGZvciAodmFyIGtleSBpbiBkZWZpbml0aW9uKSBwcm90b3R5cGVba2V5XSA9IGRlZmluaXRpb25ba2V5XTtcbiAgcmV0dXJuIHByb3RvdHlwZTtcbn1cbiIsImltcG9ydCBkZWZpbmUsIHtleHRlbmR9IGZyb20gXCIuL2RlZmluZS5qc1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gQ29sb3IoKSB7fVxuXG5leHBvcnQgdmFyIGRhcmtlciA9IDAuNztcbmV4cG9ydCB2YXIgYnJpZ2h0ZXIgPSAxIC8gZGFya2VyO1xuXG52YXIgcmVJID0gXCJcXFxccyooWystXT9cXFxcZCspXFxcXHMqXCIsXG4gICAgcmVOID0gXCJcXFxccyooWystXT8oPzpcXFxcZCpcXFxcLik/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pXFxcXHMqXCIsXG4gICAgcmVQID0gXCJcXFxccyooWystXT8oPzpcXFxcZCpcXFxcLik/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pJVxcXFxzKlwiLFxuICAgIHJlSGV4ID0gL14jKFswLTlhLWZdezMsOH0pJC8sXG4gICAgcmVSZ2JJbnRlZ2VyID0gbmV3IFJlZ0V4cChgXnJnYlxcXFwoJHtyZUl9LCR7cmVJfSwke3JlSX1cXFxcKSRgKSxcbiAgICByZVJnYlBlcmNlbnQgPSBuZXcgUmVnRXhwKGBecmdiXFxcXCgke3JlUH0sJHtyZVB9LCR7cmVQfVxcXFwpJGApLFxuICAgIHJlUmdiYUludGVnZXIgPSBuZXcgUmVnRXhwKGBecmdiYVxcXFwoJHtyZUl9LCR7cmVJfSwke3JlSX0sJHtyZU59XFxcXCkkYCksXG4gICAgcmVSZ2JhUGVyY2VudCA9IG5ldyBSZWdFeHAoYF5yZ2JhXFxcXCgke3JlUH0sJHtyZVB9LCR7cmVQfSwke3JlTn1cXFxcKSRgKSxcbiAgICByZUhzbFBlcmNlbnQgPSBuZXcgUmVnRXhwKGBeaHNsXFxcXCgke3JlTn0sJHtyZVB9LCR7cmVQfVxcXFwpJGApLFxuICAgIHJlSHNsYVBlcmNlbnQgPSBuZXcgUmVnRXhwKGBeaHNsYVxcXFwoJHtyZU59LCR7cmVQfSwke3JlUH0sJHtyZU59XFxcXCkkYCk7XG5cbnZhciBuYW1lZCA9IHtcbiAgYWxpY2VibHVlOiAweGYwZjhmZixcbiAgYW50aXF1ZXdoaXRlOiAweGZhZWJkNyxcbiAgYXF1YTogMHgwMGZmZmYsXG4gIGFxdWFtYXJpbmU6IDB4N2ZmZmQ0LFxuICBhenVyZTogMHhmMGZmZmYsXG4gIGJlaWdlOiAweGY1ZjVkYyxcbiAgYmlzcXVlOiAweGZmZTRjNCxcbiAgYmxhY2s6IDB4MDAwMDAwLFxuICBibGFuY2hlZGFsbW9uZDogMHhmZmViY2QsXG4gIGJsdWU6IDB4MDAwMGZmLFxuICBibHVldmlvbGV0OiAweDhhMmJlMixcbiAgYnJvd246IDB4YTUyYTJhLFxuICBidXJseXdvb2Q6IDB4ZGViODg3LFxuICBjYWRldGJsdWU6IDB4NWY5ZWEwLFxuICBjaGFydHJldXNlOiAweDdmZmYwMCxcbiAgY2hvY29sYXRlOiAweGQyNjkxZSxcbiAgY29yYWw6IDB4ZmY3ZjUwLFxuICBjb3JuZmxvd2VyYmx1ZTogMHg2NDk1ZWQsXG4gIGNvcm5zaWxrOiAweGZmZjhkYyxcbiAgY3JpbXNvbjogMHhkYzE0M2MsXG4gIGN5YW46IDB4MDBmZmZmLFxuICBkYXJrYmx1ZTogMHgwMDAwOGIsXG4gIGRhcmtjeWFuOiAweDAwOGI4YixcbiAgZGFya2dvbGRlbnJvZDogMHhiODg2MGIsXG4gIGRhcmtncmF5OiAweGE5YTlhOSxcbiAgZGFya2dyZWVuOiAweDAwNjQwMCxcbiAgZGFya2dyZXk6IDB4YTlhOWE5LFxuICBkYXJra2hha2k6IDB4YmRiNzZiLFxuICBkYXJrbWFnZW50YTogMHg4YjAwOGIsXG4gIGRhcmtvbGl2ZWdyZWVuOiAweDU1NmIyZixcbiAgZGFya29yYW5nZTogMHhmZjhjMDAsXG4gIGRhcmtvcmNoaWQ6IDB4OTkzMmNjLFxuICBkYXJrcmVkOiAweDhiMDAwMCxcbiAgZGFya3NhbG1vbjogMHhlOTk2N2EsXG4gIGRhcmtzZWFncmVlbjogMHg4ZmJjOGYsXG4gIGRhcmtzbGF0ZWJsdWU6IDB4NDgzZDhiLFxuICBkYXJrc2xhdGVncmF5OiAweDJmNGY0ZixcbiAgZGFya3NsYXRlZ3JleTogMHgyZjRmNGYsXG4gIGRhcmt0dXJxdW9pc2U6IDB4MDBjZWQxLFxuICBkYXJrdmlvbGV0OiAweDk0MDBkMyxcbiAgZGVlcHBpbms6IDB4ZmYxNDkzLFxuICBkZWVwc2t5Ymx1ZTogMHgwMGJmZmYsXG4gIGRpbWdyYXk6IDB4Njk2OTY5LFxuICBkaW1ncmV5OiAweDY5Njk2OSxcbiAgZG9kZ2VyYmx1ZTogMHgxZTkwZmYsXG4gIGZpcmVicmljazogMHhiMjIyMjIsXG4gIGZsb3JhbHdoaXRlOiAweGZmZmFmMCxcbiAgZm9yZXN0Z3JlZW46IDB4MjI4YjIyLFxuICBmdWNoc2lhOiAweGZmMDBmZixcbiAgZ2FpbnNib3JvOiAweGRjZGNkYyxcbiAgZ2hvc3R3aGl0ZTogMHhmOGY4ZmYsXG4gIGdvbGQ6IDB4ZmZkNzAwLFxuICBnb2xkZW5yb2Q6IDB4ZGFhNTIwLFxuICBncmF5OiAweDgwODA4MCxcbiAgZ3JlZW46IDB4MDA4MDAwLFxuICBncmVlbnllbGxvdzogMHhhZGZmMmYsXG4gIGdyZXk6IDB4ODA4MDgwLFxuICBob25leWRldzogMHhmMGZmZjAsXG4gIGhvdHBpbms6IDB4ZmY2OWI0LFxuICBpbmRpYW5yZWQ6IDB4Y2Q1YzVjLFxuICBpbmRpZ286IDB4NGIwMDgyLFxuICBpdm9yeTogMHhmZmZmZjAsXG4gIGtoYWtpOiAweGYwZTY4YyxcbiAgbGF2ZW5kZXI6IDB4ZTZlNmZhLFxuICBsYXZlbmRlcmJsdXNoOiAweGZmZjBmNSxcbiAgbGF3bmdyZWVuOiAweDdjZmMwMCxcbiAgbGVtb25jaGlmZm9uOiAweGZmZmFjZCxcbiAgbGlnaHRibHVlOiAweGFkZDhlNixcbiAgbGlnaHRjb3JhbDogMHhmMDgwODAsXG4gIGxpZ2h0Y3lhbjogMHhlMGZmZmYsXG4gIGxpZ2h0Z29sZGVucm9keWVsbG93OiAweGZhZmFkMixcbiAgbGlnaHRncmF5OiAweGQzZDNkMyxcbiAgbGlnaHRncmVlbjogMHg5MGVlOTAsXG4gIGxpZ2h0Z3JleTogMHhkM2QzZDMsXG4gIGxpZ2h0cGluazogMHhmZmI2YzEsXG4gIGxpZ2h0c2FsbW9uOiAweGZmYTA3YSxcbiAgbGlnaHRzZWFncmVlbjogMHgyMGIyYWEsXG4gIGxpZ2h0c2t5Ymx1ZTogMHg4N2NlZmEsXG4gIGxpZ2h0c2xhdGVncmF5OiAweDc3ODg5OSxcbiAgbGlnaHRzbGF0ZWdyZXk6IDB4Nzc4ODk5LFxuICBsaWdodHN0ZWVsYmx1ZTogMHhiMGM0ZGUsXG4gIGxpZ2h0eWVsbG93OiAweGZmZmZlMCxcbiAgbGltZTogMHgwMGZmMDAsXG4gIGxpbWVncmVlbjogMHgzMmNkMzIsXG4gIGxpbmVuOiAweGZhZjBlNixcbiAgbWFnZW50YTogMHhmZjAwZmYsXG4gIG1hcm9vbjogMHg4MDAwMDAsXG4gIG1lZGl1bWFxdWFtYXJpbmU6IDB4NjZjZGFhLFxuICBtZWRpdW1ibHVlOiAweDAwMDBjZCxcbiAgbWVkaXVtb3JjaGlkOiAweGJhNTVkMyxcbiAgbWVkaXVtcHVycGxlOiAweDkzNzBkYixcbiAgbWVkaXVtc2VhZ3JlZW46IDB4M2NiMzcxLFxuICBtZWRpdW1zbGF0ZWJsdWU6IDB4N2I2OGVlLFxuICBtZWRpdW1zcHJpbmdncmVlbjogMHgwMGZhOWEsXG4gIG1lZGl1bXR1cnF1b2lzZTogMHg0OGQxY2MsXG4gIG1lZGl1bXZpb2xldHJlZDogMHhjNzE1ODUsXG4gIG1pZG5pZ2h0Ymx1ZTogMHgxOTE5NzAsXG4gIG1pbnRjcmVhbTogMHhmNWZmZmEsXG4gIG1pc3R5cm9zZTogMHhmZmU0ZTEsXG4gIG1vY2Nhc2luOiAweGZmZTRiNSxcbiAgbmF2YWpvd2hpdGU6IDB4ZmZkZWFkLFxuICBuYXZ5OiAweDAwMDA4MCxcbiAgb2xkbGFjZTogMHhmZGY1ZTYsXG4gIG9saXZlOiAweDgwODAwMCxcbiAgb2xpdmVkcmFiOiAweDZiOGUyMyxcbiAgb3JhbmdlOiAweGZmYTUwMCxcbiAgb3JhbmdlcmVkOiAweGZmNDUwMCxcbiAgb3JjaGlkOiAweGRhNzBkNixcbiAgcGFsZWdvbGRlbnJvZDogMHhlZWU4YWEsXG4gIHBhbGVncmVlbjogMHg5OGZiOTgsXG4gIHBhbGV0dXJxdW9pc2U6IDB4YWZlZWVlLFxuICBwYWxldmlvbGV0cmVkOiAweGRiNzA5MyxcbiAgcGFwYXlhd2hpcDogMHhmZmVmZDUsXG4gIHBlYWNocHVmZjogMHhmZmRhYjksXG4gIHBlcnU6IDB4Y2Q4NTNmLFxuICBwaW5rOiAweGZmYzBjYixcbiAgcGx1bTogMHhkZGEwZGQsXG4gIHBvd2RlcmJsdWU6IDB4YjBlMGU2LFxuICBwdXJwbGU6IDB4ODAwMDgwLFxuICByZWJlY2NhcHVycGxlOiAweDY2MzM5OSxcbiAgcmVkOiAweGZmMDAwMCxcbiAgcm9zeWJyb3duOiAweGJjOGY4ZixcbiAgcm95YWxibHVlOiAweDQxNjllMSxcbiAgc2FkZGxlYnJvd246IDB4OGI0NTEzLFxuICBzYWxtb246IDB4ZmE4MDcyLFxuICBzYW5keWJyb3duOiAweGY0YTQ2MCxcbiAgc2VhZ3JlZW46IDB4MmU4YjU3LFxuICBzZWFzaGVsbDogMHhmZmY1ZWUsXG4gIHNpZW5uYTogMHhhMDUyMmQsXG4gIHNpbHZlcjogMHhjMGMwYzAsXG4gIHNreWJsdWU6IDB4ODdjZWViLFxuICBzbGF0ZWJsdWU6IDB4NmE1YWNkLFxuICBzbGF0ZWdyYXk6IDB4NzA4MDkwLFxuICBzbGF0ZWdyZXk6IDB4NzA4MDkwLFxuICBzbm93OiAweGZmZmFmYSxcbiAgc3ByaW5nZ3JlZW46IDB4MDBmZjdmLFxuICBzdGVlbGJsdWU6IDB4NDY4MmI0LFxuICB0YW46IDB4ZDJiNDhjLFxuICB0ZWFsOiAweDAwODA4MCxcbiAgdGhpc3RsZTogMHhkOGJmZDgsXG4gIHRvbWF0bzogMHhmZjYzNDcsXG4gIHR1cnF1b2lzZTogMHg0MGUwZDAsXG4gIHZpb2xldDogMHhlZTgyZWUsXG4gIHdoZWF0OiAweGY1ZGViMyxcbiAgd2hpdGU6IDB4ZmZmZmZmLFxuICB3aGl0ZXNtb2tlOiAweGY1ZjVmNSxcbiAgeWVsbG93OiAweGZmZmYwMCxcbiAgeWVsbG93Z3JlZW46IDB4OWFjZDMyXG59O1xuXG5kZWZpbmUoQ29sb3IsIGNvbG9yLCB7XG4gIGNvcHkoY2hhbm5lbHMpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3RvciwgdGhpcywgY2hhbm5lbHMpO1xuICB9LFxuICBkaXNwbGF5YWJsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5yZ2IoKS5kaXNwbGF5YWJsZSgpO1xuICB9LFxuICBoZXg6IGNvbG9yX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiBjb2xvcl9mb3JtYXRIZXgsXG4gIGZvcm1hdEhleDg6IGNvbG9yX2Zvcm1hdEhleDgsXG4gIGZvcm1hdEhzbDogY29sb3JfZm9ybWF0SHNsLFxuICBmb3JtYXRSZ2I6IGNvbG9yX2Zvcm1hdFJnYixcbiAgdG9TdHJpbmc6IGNvbG9yX2Zvcm1hdFJnYlxufSk7XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhleCgpIHtcbiAgcmV0dXJuIHRoaXMucmdiKCkuZm9ybWF0SGV4KCk7XG59XG5cbmZ1bmN0aW9uIGNvbG9yX2Zvcm1hdEhleDgoKSB7XG4gIHJldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleDgoKTtcbn1cblxuZnVuY3Rpb24gY29sb3JfZm9ybWF0SHNsKCkge1xuICByZXR1cm4gaHNsQ29udmVydCh0aGlzKS5mb3JtYXRIc2woKTtcbn1cblxuZnVuY3Rpb24gY29sb3JfZm9ybWF0UmdiKCkge1xuICByZXR1cm4gdGhpcy5yZ2IoKS5mb3JtYXRSZ2IoKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sb3IoZm9ybWF0KSB7XG4gIHZhciBtLCBsO1xuICBmb3JtYXQgPSAoZm9ybWF0ICsgXCJcIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAobSA9IHJlSGV4LmV4ZWMoZm9ybWF0KSkgPyAobCA9IG1bMV0ubGVuZ3RoLCBtID0gcGFyc2VJbnQobVsxXSwgMTYpLCBsID09PSA2ID8gcmdibihtKSAvLyAjZmYwMDAwXG4gICAgICA6IGwgPT09IDMgPyBuZXcgUmdiKChtID4+IDggJiAweGYpIHwgKG0gPj4gNCAmIDB4ZjApLCAobSA+PiA0ICYgMHhmKSB8IChtICYgMHhmMCksICgobSAmIDB4ZikgPDwgNCkgfCAobSAmIDB4ZiksIDEpIC8vICNmMDBcbiAgICAgIDogbCA9PT0gOCA/IHJnYmEobSA+PiAyNCAmIDB4ZmYsIG0gPj4gMTYgJiAweGZmLCBtID4+IDggJiAweGZmLCAobSAmIDB4ZmYpIC8gMHhmZikgLy8gI2ZmMDAwMDAwXG4gICAgICA6IGwgPT09IDQgPyByZ2JhKChtID4+IDEyICYgMHhmKSB8IChtID4+IDggJiAweGYwKSwgKG0gPj4gOCAmIDB4ZikgfCAobSA+PiA0ICYgMHhmMCksIChtID4+IDQgJiAweGYpIHwgKG0gJiAweGYwKSwgKCgobSAmIDB4ZikgPDwgNCkgfCAobSAmIDB4ZikpIC8gMHhmZikgLy8gI2YwMDBcbiAgICAgIDogbnVsbCkgLy8gaW52YWxpZCBoZXhcbiAgICAgIDogKG0gPSByZVJnYkludGVnZXIuZXhlYyhmb3JtYXQpKSA/IG5ldyBSZ2IobVsxXSwgbVsyXSwgbVszXSwgMSkgLy8gcmdiKDI1NSwgMCwgMClcbiAgICAgIDogKG0gPSByZVJnYlBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IG5ldyBSZ2IobVsxXSAqIDI1NSAvIDEwMCwgbVsyXSAqIDI1NSAvIDEwMCwgbVszXSAqIDI1NSAvIDEwMCwgMSkgLy8gcmdiKDEwMCUsIDAlLCAwJSlcbiAgICAgIDogKG0gPSByZVJnYmFJbnRlZ2VyLmV4ZWMoZm9ybWF0KSkgPyByZ2JhKG1bMV0sIG1bMl0sIG1bM10sIG1bNF0pIC8vIHJnYmEoMjU1LCAwLCAwLCAxKVxuICAgICAgOiAobSA9IHJlUmdiYVBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IHJnYmEobVsxXSAqIDI1NSAvIDEwMCwgbVsyXSAqIDI1NSAvIDEwMCwgbVszXSAqIDI1NSAvIDEwMCwgbVs0XSkgLy8gcmdiKDEwMCUsIDAlLCAwJSwgMSlcbiAgICAgIDogKG0gPSByZUhzbFBlcmNlbnQuZXhlYyhmb3JtYXQpKSA/IGhzbGEobVsxXSwgbVsyXSAvIDEwMCwgbVszXSAvIDEwMCwgMSkgLy8gaHNsKDEyMCwgNTAlLCA1MCUpXG4gICAgICA6IChtID0gcmVIc2xhUGVyY2VudC5leGVjKGZvcm1hdCkpID8gaHNsYShtWzFdLCBtWzJdIC8gMTAwLCBtWzNdIC8gMTAwLCBtWzRdKSAvLyBoc2xhKDEyMCwgNTAlLCA1MCUsIDEpXG4gICAgICA6IG5hbWVkLmhhc093blByb3BlcnR5KGZvcm1hdCkgPyByZ2JuKG5hbWVkW2Zvcm1hdF0pIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICA6IGZvcm1hdCA9PT0gXCJ0cmFuc3BhcmVudFwiID8gbmV3IFJnYihOYU4sIE5hTiwgTmFOLCAwKVxuICAgICAgOiBudWxsO1xufVxuXG5mdW5jdGlvbiByZ2JuKG4pIHtcbiAgcmV0dXJuIG5ldyBSZ2IobiA+PiAxNiAmIDB4ZmYsIG4gPj4gOCAmIDB4ZmYsIG4gJiAweGZmLCAxKTtcbn1cblxuZnVuY3Rpb24gcmdiYShyLCBnLCBiLCBhKSB7XG4gIGlmIChhIDw9IDApIHIgPSBnID0gYiA9IE5hTjtcbiAgcmV0dXJuIG5ldyBSZ2IociwgZywgYiwgYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZ2JDb252ZXJ0KG8pIHtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgUmdiO1xuICBvID0gby5yZ2IoKTtcbiAgcmV0dXJuIG5ldyBSZ2Ioby5yLCBvLmcsIG8uYiwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJnYihyLCBnLCBiLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gcmdiQ29udmVydChyKSA6IG5ldyBSZ2IociwgZywgYiwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gUmdiKHIsIGcsIGIsIG9wYWNpdHkpIHtcbiAgdGhpcy5yID0gK3I7XG4gIHRoaXMuZyA9ICtnO1xuICB0aGlzLmIgPSArYjtcbiAgdGhpcy5vcGFjaXR5ID0gK29wYWNpdHk7XG59XG5cbmRlZmluZShSZ2IsIHJnYiwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gZGFya2VyIDogTWF0aC5wb3coZGFya2VyLCBrKTtcbiAgICByZXR1cm4gbmV3IFJnYih0aGlzLnIgKiBrLCB0aGlzLmcgKiBrLCB0aGlzLmIgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2IoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sXG4gIGNsYW1wKCkge1xuICAgIHJldHVybiBuZXcgUmdiKGNsYW1waSh0aGlzLnIpLCBjbGFtcGkodGhpcy5nKSwgY2xhbXBpKHRoaXMuYiksIGNsYW1wYSh0aGlzLm9wYWNpdHkpKTtcbiAgfSxcbiAgZGlzcGxheWFibGUoKSB7XG4gICAgcmV0dXJuICgtMC41IDw9IHRoaXMuciAmJiB0aGlzLnIgPCAyNTUuNSlcbiAgICAgICAgJiYgKC0wLjUgPD0gdGhpcy5nICYmIHRoaXMuZyA8IDI1NS41KVxuICAgICAgICAmJiAoLTAuNSA8PSB0aGlzLmIgJiYgdGhpcy5iIDwgMjU1LjUpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH0sXG4gIGhleDogcmdiX2Zvcm1hdEhleCwgLy8gRGVwcmVjYXRlZCEgVXNlIGNvbG9yLmZvcm1hdEhleC5cbiAgZm9ybWF0SGV4OiByZ2JfZm9ybWF0SGV4LFxuICBmb3JtYXRIZXg4OiByZ2JfZm9ybWF0SGV4OCxcbiAgZm9ybWF0UmdiOiByZ2JfZm9ybWF0UmdiLFxuICB0b1N0cmluZzogcmdiX2Zvcm1hdFJnYlxufSkpO1xuXG5mdW5jdGlvbiByZ2JfZm9ybWF0SGV4KCkge1xuICByZXR1cm4gYCMke2hleCh0aGlzLnIpfSR7aGV4KHRoaXMuZyl9JHtoZXgodGhpcy5iKX1gO1xufVxuXG5mdW5jdGlvbiByZ2JfZm9ybWF0SGV4OCgpIHtcbiAgcmV0dXJuIGAjJHtoZXgodGhpcy5yKX0ke2hleCh0aGlzLmcpfSR7aGV4KHRoaXMuYil9JHtoZXgoKGlzTmFOKHRoaXMub3BhY2l0eSkgPyAxIDogdGhpcy5vcGFjaXR5KSAqIDI1NSl9YDtcbn1cblxuZnVuY3Rpb24gcmdiX2Zvcm1hdFJnYigpIHtcbiAgY29uc3QgYSA9IGNsYW1wYSh0aGlzLm9wYWNpdHkpO1xuICByZXR1cm4gYCR7YSA9PT0gMSA/IFwicmdiKFwiIDogXCJyZ2JhKFwifSR7Y2xhbXBpKHRoaXMucil9LCAke2NsYW1waSh0aGlzLmcpfSwgJHtjbGFtcGkodGhpcy5iKX0ke2EgPT09IDEgPyBcIilcIiA6IGAsICR7YX0pYH1gO1xufVxuXG5mdW5jdGlvbiBjbGFtcGEob3BhY2l0eSkge1xuICByZXR1cm4gaXNOYU4ob3BhY2l0eSkgPyAxIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgb3BhY2l0eSkpO1xufVxuXG5mdW5jdGlvbiBjbGFtcGkodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh2YWx1ZSkgfHwgMCkpO1xufVxuXG5mdW5jdGlvbiBoZXgodmFsdWUpIHtcbiAgdmFsdWUgPSBjbGFtcGkodmFsdWUpO1xuICByZXR1cm4gKHZhbHVlIDwgMTYgPyBcIjBcIiA6IFwiXCIpICsgdmFsdWUudG9TdHJpbmcoMTYpO1xufVxuXG5mdW5jdGlvbiBoc2xhKGgsIHMsIGwsIGEpIHtcbiAgaWYgKGEgPD0gMCkgaCA9IHMgPSBsID0gTmFOO1xuICBlbHNlIGlmIChsIDw9IDAgfHwgbCA+PSAxKSBoID0gcyA9IE5hTjtcbiAgZWxzZSBpZiAocyA8PSAwKSBoID0gTmFOO1xuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhzbENvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG5ldyBIc2woby5oLCBvLnMsIG8ubCwgby5vcGFjaXR5KTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgSHNsO1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG87XG4gIG8gPSBvLnJnYigpO1xuICB2YXIgciA9IG8uciAvIDI1NSxcbiAgICAgIGcgPSBvLmcgLyAyNTUsXG4gICAgICBiID0gby5iIC8gMjU1LFxuICAgICAgbWluID0gTWF0aC5taW4ociwgZywgYiksXG4gICAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcbiAgICAgIGggPSBOYU4sXG4gICAgICBzID0gbWF4IC0gbWluLFxuICAgICAgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgaWYgKHMpIHtcbiAgICBpZiAociA9PT0gbWF4KSBoID0gKGcgLSBiKSAvIHMgKyAoZyA8IGIpICogNjtcbiAgICBlbHNlIGlmIChnID09PSBtYXgpIGggPSAoYiAtIHIpIC8gcyArIDI7XG4gICAgZWxzZSBoID0gKHIgLSBnKSAvIHMgKyA0O1xuICAgIHMgLz0gbCA8IDAuNSA/IG1heCArIG1pbiA6IDIgLSBtYXggLSBtaW47XG4gICAgaCAqPSA2MDtcbiAgfSBlbHNlIHtcbiAgICBzID0gbCA+IDAgJiYgbCA8IDEgPyAwIDogaDtcbiAgfVxuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoc2xDb252ZXJ0KGgpIDogbmV3IEhzbChoLCBzLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmZ1bmN0aW9uIEhzbChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLnMgPSArcztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoSHNsLCBoc2wsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGJyaWdodGVyIDogTWF0aC5wb3coYnJpZ2h0ZXIsIGspO1xuICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXIoaykge1xuICAgIGsgPSBrID09IG51bGwgPyBkYXJrZXIgOiBNYXRoLnBvdyhkYXJrZXIsIGspO1xuICAgIHJldHVybiBuZXcgSHNsKHRoaXMuaCwgdGhpcy5zLCB0aGlzLmwgKiBrLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICByZ2IoKSB7XG4gICAgdmFyIGggPSB0aGlzLmggJSAzNjAgKyAodGhpcy5oIDwgMCkgKiAzNjAsXG4gICAgICAgIHMgPSBpc05hTihoKSB8fCBpc05hTih0aGlzLnMpID8gMCA6IHRoaXMucyxcbiAgICAgICAgbCA9IHRoaXMubCxcbiAgICAgICAgbTIgPSBsICsgKGwgPCAwLjUgPyBsIDogMSAtIGwpICogcyxcbiAgICAgICAgbTEgPSAyICogbCAtIG0yO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgaHNsMnJnYihoID49IDI0MCA/IGggLSAyNDAgOiBoICsgMTIwLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoIDwgMTIwID8gaCArIDI0MCA6IGggLSAxMjAsIG0xLCBtMiksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9LFxuICBjbGFtcCgpIHtcbiAgICByZXR1cm4gbmV3IEhzbChjbGFtcGgodGhpcy5oKSwgY2xhbXB0KHRoaXMucyksIGNsYW1wdCh0aGlzLmwpLCBjbGFtcGEodGhpcy5vcGFjaXR5KSk7XG4gIH0sXG4gIGRpc3BsYXlhYmxlKCkge1xuICAgIHJldHVybiAoMCA8PSB0aGlzLnMgJiYgdGhpcy5zIDw9IDEgfHwgaXNOYU4odGhpcy5zKSlcbiAgICAgICAgJiYgKDAgPD0gdGhpcy5sICYmIHRoaXMubCA8PSAxKVxuICAgICAgICAmJiAoMCA8PSB0aGlzLm9wYWNpdHkgJiYgdGhpcy5vcGFjaXR5IDw9IDEpO1xuICB9LFxuICBmb3JtYXRIc2woKSB7XG4gICAgY29uc3QgYSA9IGNsYW1wYSh0aGlzLm9wYWNpdHkpO1xuICAgIHJldHVybiBgJHthID09PSAxID8gXCJoc2woXCIgOiBcImhzbGEoXCJ9JHtjbGFtcGgodGhpcy5oKX0sICR7Y2xhbXB0KHRoaXMucykgKiAxMDB9JSwgJHtjbGFtcHQodGhpcy5sKSAqIDEwMH0lJHthID09PSAxID8gXCIpXCIgOiBgLCAke2F9KWB9YDtcbiAgfVxufSkpO1xuXG5mdW5jdGlvbiBjbGFtcGgodmFsdWUpIHtcbiAgdmFsdWUgPSAodmFsdWUgfHwgMCkgJSAzNjA7XG4gIHJldHVybiB2YWx1ZSA8IDAgPyB2YWx1ZSArIDM2MCA6IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBjbGFtcHQodmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKDEsIHZhbHVlIHx8IDApKTtcbn1cblxuLyogRnJvbSBGdkQgMTMuMzcsIENTUyBDb2xvciBNb2R1bGUgTGV2ZWwgMyAqL1xuZnVuY3Rpb24gaHNsMnJnYihoLCBtMSwgbTIpIHtcbiAgcmV0dXJuIChoIDwgNjAgPyBtMSArIChtMiAtIG0xKSAqIGggLyA2MFxuICAgICAgOiBoIDwgMTgwID8gbTJcbiAgICAgIDogaCA8IDI0MCA/IG0xICsgKG0yIC0gbTEpICogKDI0MCAtIGgpIC8gNjBcbiAgICAgIDogbTEpICogMjU1O1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvcihzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIHN1Ym5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKHN1Ym5vZGUgPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpKSB7XG4gICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgIHN1Ymdyb3VwW2ldID0gc3Vibm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgbWF0Y2hlciBmcm9tIFwiLi4vbWF0Y2hlci5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB4O1xuICB9O1xufVxuIiwiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2UuanNcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZXhpdCB8fCB0aGlzLl9ncm91cHMubWFwKHNwYXJzZSksIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24ob25lbnRlciwgb251cGRhdGUsIG9uZXhpdCkge1xuICB2YXIgZW50ZXIgPSB0aGlzLmVudGVyKCksIHVwZGF0ZSA9IHRoaXMsIGV4aXQgPSB0aGlzLmV4aXQoKTtcbiAgaWYgKHR5cGVvZiBvbmVudGVyID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBlbnRlciA9IG9uZW50ZXIoZW50ZXIpO1xuICAgIGlmIChlbnRlcikgZW50ZXIgPSBlbnRlci5zZWxlY3Rpb24oKTtcbiAgfSBlbHNlIHtcbiAgICBlbnRlciA9IGVudGVyLmFwcGVuZChvbmVudGVyICsgXCJcIik7XG4gIH1cbiAgaWYgKG9udXBkYXRlICE9IG51bGwpIHtcbiAgICB1cGRhdGUgPSBvbnVwZGF0ZSh1cGRhdGUpO1xuICAgIGlmICh1cGRhdGUpIHVwZGF0ZSA9IHVwZGF0ZS5zZWxlY3Rpb24oKTtcbiAgfVxuICBpZiAob25leGl0ID09IG51bGwpIGV4aXQucmVtb3ZlKCk7IGVsc2Ugb25leGl0KGV4aXQpO1xuICByZXR1cm4gZW50ZXIgJiYgdXBkYXRlID8gZW50ZXIubWVyZ2UodXBkYXRlKS5vcmRlcigpIDogdXBkYXRlO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNvbnRleHQpIHtcbiAgdmFyIHNlbGVjdGlvbiA9IGNvbnRleHQuc2VsZWN0aW9uID8gY29udGV4dC5zZWxlY3Rpb24oKSA6IGNvbnRleHQ7XG5cbiAgZm9yICh2YXIgZ3JvdXBzMCA9IHRoaXMuX2dyb3VwcywgZ3JvdXBzMSA9IHNlbGVjdGlvbi5fZ3JvdXBzLCBtMCA9IGdyb3VwczAubGVuZ3RoLCBtMSA9IGdyb3VwczEubGVuZ3RoLCBtID0gTWF0aC5taW4obTAsIG0xKSwgbWVyZ2VzID0gbmV3IEFycmF5KG0wKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgbWVyZ2VbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBqIDwgbTA7ICsraikge1xuICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihtZXJnZXMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gLTEsIG0gPSBncm91cHMubGVuZ3RoOyArK2ogPCBtOykge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gZ3JvdXAubGVuZ3RoIC0gMSwgbmV4dCA9IGdyb3VwW2ldLCBub2RlOyAtLWkgPj0gMDspIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgaWYgKG5leHQgJiYgbm9kZS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuZXh0KSBeIDQpIG5leHQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobm9kZSwgbmV4dCk7XG4gICAgICAgIG5leHQgPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50c1swXTtcbiAgYXJndW1lbnRzWzBdID0gdGhpcztcbiAgY2FsbGJhY2suYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgcmV0dXJuIHRoaXM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20odGhpcyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgdmFyIG5vZGUgPSBncm91cFtpXTtcbiAgICAgIGlmIChub2RlKSByZXR1cm4gbm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICBsZXQgc2l6ZSA9IDA7XG4gIGZvciAoY29uc3Qgbm9kZSBvZiB0aGlzKSArK3NpemU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgcmV0dXJuIHNpemU7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuICF0aGlzLm5vZGUoKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGgsIG5vZGU7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIGNhbGxiYWNrLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IGNyZWF0b3IgZnJvbSBcIi4uL2NyZWF0b3IuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgY3JlYXRlID0gdHlwZW9mIG5hbWUgPT09IFwiZnVuY3Rpb25cIiA/IG5hbWUgOiBjcmVhdG9yKG5hbWUpO1xuICByZXR1cm4gdGhpcy5zZWxlY3QoZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwZW5kQ2hpbGQoY3JlYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICB9KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMucHJvcGVydHkoXCJfX2RhdGFfX1wiLCB2YWx1ZSlcbiAgICAgIDogdGhpcy5ub2RlKCkuX19kYXRhX187XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiooKSB7XG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IDAsIG0gPSBncm91cHMubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB5aWVsZCBub2RlO1xuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHJhZGlhbnMgPSBNYXRoLlBJIC8gMTgwO1xuZXhwb3J0IGNvbnN0IGRlZ3JlZXMgPSAxODAgLyBNYXRoLlBJO1xuIiwiaW1wb3J0IGRlZmluZSwge2V4dGVuZH0gZnJvbSBcIi4vZGVmaW5lLmpzXCI7XG5pbXBvcnQge0NvbG9yLCByZ2JDb252ZXJ0LCBSZ2J9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5pbXBvcnQge2RlZ3JlZXMsIHJhZGlhbnN9IGZyb20gXCIuL21hdGguanNcIjtcblxuLy8gaHR0cHM6Ly9vYnNlcnZhYmxlaHEuY29tL0BtYm9zdG9jay9sYWItYW5kLXJnYlxuY29uc3QgSyA9IDE4LFxuICAgIFhuID0gMC45NjQyMixcbiAgICBZbiA9IDEsXG4gICAgWm4gPSAwLjgyNTIxLFxuICAgIHQwID0gNCAvIDI5LFxuICAgIHQxID0gNiAvIDI5LFxuICAgIHQyID0gMyAqIHQxICogdDEsXG4gICAgdDMgPSB0MSAqIHQxICogdDE7XG5cbmZ1bmN0aW9uIGxhYkNvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIExhYikgcmV0dXJuIG5ldyBMYWIoby5sLCBvLmEsIG8uYiwgby5vcGFjaXR5KTtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIY2wpIHJldHVybiBoY2wybGFiKG8pO1xuICBpZiAoIShvIGluc3RhbmNlb2YgUmdiKSkgbyA9IHJnYkNvbnZlcnQobyk7XG4gIHZhciByID0gcmdiMmxyZ2Ioby5yKSxcbiAgICAgIGcgPSByZ2IybHJnYihvLmcpLFxuICAgICAgYiA9IHJnYjJscmdiKG8uYiksXG4gICAgICB5ID0geHl6MmxhYigoMC4yMjI1MDQ1ICogciArIDAuNzE2ODc4NiAqIGcgKyAwLjA2MDYxNjkgKiBiKSAvIFluKSwgeCwgejtcbiAgaWYgKHIgPT09IGcgJiYgZyA9PT0gYikgeCA9IHogPSB5OyBlbHNlIHtcbiAgICB4ID0geHl6MmxhYigoMC40MzYwNzQ3ICogciArIDAuMzg1MDY0OSAqIGcgKyAwLjE0MzA4MDQgKiBiKSAvIFhuKTtcbiAgICB6ID0geHl6MmxhYigoMC4wMTM5MzIyICogciArIDAuMDk3MTA0NSAqIGcgKyAwLjcxNDE3MzMgKiBiKSAvIFpuKTtcbiAgfVxuICByZXR1cm4gbmV3IExhYigxMTYgKiB5IC0gMTYsIDUwMCAqICh4IC0geSksIDIwMCAqICh5IC0geiksIG8ub3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBncmF5KGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIG5ldyBMYWIobCwgMCwgMCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsYWIobCwgYSwgYiwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGxhYkNvbnZlcnQobCkgOiBuZXcgTGFiKGwsIGEsIGIsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIExhYihsLCBhLCBiLCBvcGFjaXR5KSB7XG4gIHRoaXMubCA9ICtsO1xuICB0aGlzLmEgPSArYTtcbiAgdGhpcy5iID0gK2I7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoTGFiLCBsYWIsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcihrKSB7XG4gICAgcmV0dXJuIG5ldyBMYWIodGhpcy5sICsgSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMuYSwgdGhpcy5iLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXIoaykge1xuICAgIHJldHVybiBuZXcgTGFiKHRoaXMubCAtIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiKCkge1xuICAgIHZhciB5ID0gKHRoaXMubCArIDE2KSAvIDExNixcbiAgICAgICAgeCA9IGlzTmFOKHRoaXMuYSkgPyB5IDogeSArIHRoaXMuYSAvIDUwMCxcbiAgICAgICAgeiA9IGlzTmFOKHRoaXMuYikgPyB5IDogeSAtIHRoaXMuYiAvIDIwMDtcbiAgICB4ID0gWG4gKiBsYWIyeHl6KHgpO1xuICAgIHkgPSBZbiAqIGxhYjJ4eXooeSk7XG4gICAgeiA9IFpuICogbGFiMnh5eih6KTtcbiAgICByZXR1cm4gbmV3IFJnYihcbiAgICAgIGxyZ2IycmdiKCAzLjEzMzg1NjEgKiB4IC0gMS42MTY4NjY3ICogeSAtIDAuNDkwNjE0NiAqIHopLFxuICAgICAgbHJnYjJyZ2IoLTAuOTc4NzY4NCAqIHggKyAxLjkxNjE0MTUgKiB5ICsgMC4wMzM0NTQwICogeiksXG4gICAgICBscmdiMnJnYiggMC4wNzE5NDUzICogeCAtIDAuMjI4OTkxNCAqIHkgKyAxLjQwNTI0MjcgKiB6KSxcbiAgICAgIHRoaXMub3BhY2l0eVxuICAgICk7XG4gIH1cbn0pKTtcblxuZnVuY3Rpb24geHl6MmxhYih0KSB7XG4gIHJldHVybiB0ID4gdDMgPyBNYXRoLnBvdyh0LCAxIC8gMykgOiB0IC8gdDIgKyB0MDtcbn1cblxuZnVuY3Rpb24gbGFiMnh5eih0KSB7XG4gIHJldHVybiB0ID4gdDEgPyB0ICogdCAqIHQgOiB0MiAqICh0IC0gdDApO1xufVxuXG5mdW5jdGlvbiBscmdiMnJnYih4KSB7XG4gIHJldHVybiAyNTUgKiAoeCA8PSAwLjAwMzEzMDggPyAxMi45MiAqIHggOiAxLjA1NSAqIE1hdGgucG93KHgsIDEgLyAyLjQpIC0gMC4wNTUpO1xufVxuXG5mdW5jdGlvbiByZ2IybHJnYih4KSB7XG4gIHJldHVybiAoeCAvPSAyNTUpIDw9IDAuMDQwNDUgPyB4IC8gMTIuOTIgOiBNYXRoLnBvdygoeCArIDAuMDU1KSAvIDEuMDU1LCAyLjQpO1xufVxuXG5mdW5jdGlvbiBoY2xDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBIY2wpIHJldHVybiBuZXcgSGNsKG8uaCwgby5jLCBvLmwsIG8ub3BhY2l0eSk7XG4gIGlmICghKG8gaW5zdGFuY2VvZiBMYWIpKSBvID0gbGFiQ29udmVydChvKTtcbiAgaWYgKG8uYSA9PT0gMCAmJiBvLmIgPT09IDApIHJldHVybiBuZXcgSGNsKE5hTiwgMCA8IG8ubCAmJiBvLmwgPCAxMDAgPyAwIDogTmFOLCBvLmwsIG8ub3BhY2l0eSk7XG4gIHZhciBoID0gTWF0aC5hdGFuMihvLmIsIG8uYSkgKiBkZWdyZWVzO1xuICByZXR1cm4gbmV3IEhjbChoIDwgMCA/IGggKyAzNjAgOiBoLCBNYXRoLnNxcnQoby5hICogby5hICsgby5iICogby5iKSwgby5sLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGNoKGwsIGMsIGgsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoY2xDb252ZXJ0KGwpIDogbmV3IEhjbChoLCBjLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoY2woaCwgYywgbCwgb3BhY2l0eSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/IGhjbENvbnZlcnQoaCkgOiBuZXcgSGNsKGgsIGMsIGwsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEhjbChoLCBjLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLmMgPSArYztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5mdW5jdGlvbiBoY2wybGFiKG8pIHtcbiAgaWYgKGlzTmFOKG8uaCkpIHJldHVybiBuZXcgTGFiKG8ubCwgMCwgMCwgby5vcGFjaXR5KTtcbiAgdmFyIGggPSBvLmggKiByYWRpYW5zO1xuICByZXR1cm4gbmV3IExhYihvLmwsIE1hdGguY29zKGgpICogby5jLCBNYXRoLnNpbihoKSAqIG8uYywgby5vcGFjaXR5KTtcbn1cblxuZGVmaW5lKEhjbCwgaGNsLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXIoaykge1xuICAgIHJldHVybiBuZXcgSGNsKHRoaXMuaCwgdGhpcy5jLCB0aGlzLmwgKyBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyKGspIHtcbiAgICByZXR1cm4gbmV3IEhjbCh0aGlzLmgsIHRoaXMuYywgdGhpcy5sIC0gSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYigpIHtcbiAgICByZXR1cm4gaGNsMmxhYih0aGlzKS5yZ2IoKTtcbiAgfVxufSkpO1xuIiwiZXhwb3J0IGRlZmF1bHQgeCA9PiAoKSA9PiB4O1xuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5cbmZ1bmN0aW9uIGxpbmVhcihhLCBkKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGEgKyB0ICogZDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZXhwb25lbnRpYWwoYSwgYiwgeSkge1xuICByZXR1cm4gYSA9IE1hdGgucG93KGEsIHkpLCBiID0gTWF0aC5wb3coYiwgeSkgLSBhLCB5ID0gMSAvIHksIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gTWF0aC5wb3coYSArIHQgKiBiLCB5KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh1ZShhLCBiKSB7XG4gIHZhciBkID0gYiAtIGE7XG4gIHJldHVybiBkID8gbGluZWFyKGEsIGQgPiAxODAgfHwgZCA8IC0xODAgPyBkIC0gMzYwICogTWF0aC5yb3VuZChkIC8gMzYwKSA6IGQpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnYW1tYSh5KSB7XG4gIHJldHVybiAoeSA9ICt5KSA9PT0gMSA/IG5vZ2FtbWEgOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGIgLSBhID8gZXhwb25lbnRpYWwoYSwgYiwgeSkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9nYW1tYShhLCBiKSB7XG4gIHZhciBkID0gYiAtIGE7XG4gIHJldHVybiBkID8gbGluZWFyKGEsIGQpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG59XG4iLCJpbXBvcnQge3JnYiBhcyBjb2xvclJnYn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgYmFzaXMgZnJvbSBcIi4vYmFzaXMuanNcIjtcbmltcG9ydCBiYXNpc0Nsb3NlZCBmcm9tIFwiLi9iYXNpc0Nsb3NlZC5qc1wiO1xuaW1wb3J0IG5vZ2FtbWEsIHtnYW1tYX0gZnJvbSBcIi4vY29sb3IuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHJnYkdhbW1hKHkpIHtcbiAgdmFyIGNvbG9yID0gZ2FtbWEoeSk7XG5cbiAgZnVuY3Rpb24gcmdiKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgciA9IGNvbG9yKChzdGFydCA9IGNvbG9yUmdiKHN0YXJ0KSkuciwgKGVuZCA9IGNvbG9yUmdiKGVuZCkpLnIpLFxuICAgICAgICBnID0gY29sb3Ioc3RhcnQuZywgZW5kLmcpLFxuICAgICAgICBiID0gY29sb3Ioc3RhcnQuYiwgZW5kLmIpLFxuICAgICAgICBvcGFjaXR5ID0gbm9nYW1tYShzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHN0YXJ0LnIgPSByKHQpO1xuICAgICAgc3RhcnQuZyA9IGcodCk7XG4gICAgICBzdGFydC5iID0gYih0KTtcbiAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICB9O1xuICB9XG5cbiAgcmdiLmdhbW1hID0gcmdiR2FtbWE7XG5cbiAgcmV0dXJuIHJnYjtcbn0pKDEpO1xuXG5mdW5jdGlvbiByZ2JTcGxpbmUoc3BsaW5lKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xvcnMpIHtcbiAgICB2YXIgbiA9IGNvbG9ycy5sZW5ndGgsXG4gICAgICAgIHIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGcgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGksIGNvbG9yO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGNvbG9yID0gY29sb3JSZ2IoY29sb3JzW2ldKTtcbiAgICAgIHJbaV0gPSBjb2xvci5yIHx8IDA7XG4gICAgICBnW2ldID0gY29sb3IuZyB8fCAwO1xuICAgICAgYltpXSA9IGNvbG9yLmIgfHwgMDtcbiAgICB9XG4gICAgciA9IHNwbGluZShyKTtcbiAgICBnID0gc3BsaW5lKGcpO1xuICAgIGIgPSBzcGxpbmUoYik7XG4gICAgY29sb3Iub3BhY2l0eSA9IDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIGNvbG9yLnIgPSByKHQpO1xuICAgICAgY29sb3IuZyA9IGcodCk7XG4gICAgICBjb2xvci5iID0gYih0KTtcbiAgICAgIHJldHVybiBjb2xvciArIFwiXCI7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHZhciByZ2JCYXNpcyA9IHJnYlNwbGluZShiYXNpcyk7XG5leHBvcnQgdmFyIHJnYkJhc2lzQ2xvc2VkID0gcmdiU3BsaW5lKGJhc2lzQ2xvc2VkKTtcbiIsImV4cG9ydCBmdW5jdGlvbiBiYXNpcyh0MSwgdjAsIHYxLCB2MiwgdjMpIHtcbiAgdmFyIHQyID0gdDEgKiB0MSwgdDMgPSB0MiAqIHQxO1xuICByZXR1cm4gKCgxIC0gMyAqIHQxICsgMyAqIHQyIC0gdDMpICogdjBcbiAgICAgICsgKDQgLSA2ICogdDIgKyAzICogdDMpICogdjFcbiAgICAgICsgKDEgKyAzICogdDEgKyAzICogdDIgLSAzICogdDMpICogdjJcbiAgICAgICsgdDMgKiB2MykgLyA2O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZXMpIHtcbiAgdmFyIG4gPSB2YWx1ZXMubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgaSA9IHQgPD0gMCA/ICh0ID0gMCkgOiB0ID49IDEgPyAodCA9IDEsIG4gLSAxKSA6IE1hdGguZmxvb3IodCAqIG4pLFxuICAgICAgICB2MSA9IHZhbHVlc1tpXSxcbiAgICAgICAgdjIgPSB2YWx1ZXNbaSArIDFdLFxuICAgICAgICB2MCA9IGkgPiAwID8gdmFsdWVzW2kgLSAxXSA6IDIgKiB2MSAtIHYyLFxuICAgICAgICB2MyA9IGkgPCBuIC0gMSA/IHZhbHVlc1tpICsgMl0gOiAyICogdjIgLSB2MTtcbiAgICByZXR1cm4gYmFzaXMoKHQgLSBpIC8gbikgKiBuLCB2MCwgdjEsIHYyLCB2Myk7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIGlmICghYikgYiA9IFtdO1xuICB2YXIgbiA9IGEgPyBNYXRoLm1pbihiLmxlbmd0aCwgYS5sZW5ndGgpIDogMCxcbiAgICAgIGMgPSBiLnNsaWNlKCksXG4gICAgICBpO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIGNbaV0gPSBhW2ldICogKDEgLSB0KSArIGJbaV0gKiB0O1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXJBcnJheSh4KSB7XG4gIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoeCkgJiYgISh4IGluc3RhbmNlb2YgRGF0YVZpZXcpO1xufVxuIiwiaW1wb3J0IHZhbHVlIGZyb20gXCIuL3ZhbHVlLmpzXCI7XG5pbXBvcnQgbnVtYmVyQXJyYXksIHtpc051bWJlckFycmF5fSBmcm9tIFwiLi9udW1iZXJBcnJheS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiAoaXNOdW1iZXJBcnJheShiKSA/IG51bWJlckFycmF5IDogZ2VuZXJpY0FycmF5KShhLCBiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyaWNBcnJheShhLCBiKSB7XG4gIHZhciBuYiA9IGIgPyBiLmxlbmd0aCA6IDAsXG4gICAgICBuYSA9IGEgPyBNYXRoLm1pbihuYiwgYS5sZW5ndGgpIDogMCxcbiAgICAgIHggPSBuZXcgQXJyYXkobmEpLFxuICAgICAgYyA9IG5ldyBBcnJheShuYiksXG4gICAgICBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBuYTsgKytpKSB4W2ldID0gdmFsdWUoYVtpXSwgYltpXSk7XG4gIGZvciAoOyBpIDwgbmI7ICsraSkgY1tpXSA9IGJbaV07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgY1tpXSA9IHhbaV0odCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBkID0gbmV3IERhdGU7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBkLnNldFRpbWUoYSAqICgxIC0gdCkgKyBiICogdCksIGQ7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICogKDEgLSB0KSArIGIgKiB0O1xuICB9O1xufVxuIiwiaW1wb3J0IHZhbHVlIGZyb20gXCIuL3ZhbHVlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGkgPSB7fSxcbiAgICAgIGMgPSB7fSxcbiAgICAgIGs7XG5cbiAgaWYgKGEgPT09IG51bGwgfHwgdHlwZW9mIGEgIT09IFwib2JqZWN0XCIpIGEgPSB7fTtcbiAgaWYgKGIgPT09IG51bGwgfHwgdHlwZW9mIGIgIT09IFwib2JqZWN0XCIpIGIgPSB7fTtcblxuICBmb3IgKGsgaW4gYikge1xuICAgIGlmIChrIGluIGEpIHtcbiAgICAgIGlba10gPSB2YWx1ZShhW2tdLCBiW2tdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY1trXSA9IGJba107XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGsgaW4gaSkgY1trXSA9IGlba10odCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG4iLCJpbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuXG52YXIgcmVBID0gL1stK10/KD86XFxkK1xcLj9cXGQqfFxcLj9cXGQrKSg/OltlRV1bLStdP1xcZCspPy9nLFxuICAgIHJlQiA9IG5ldyBSZWdFeHAocmVBLnNvdXJjZSwgXCJnXCIpO1xuXG5mdW5jdGlvbiB6ZXJvKGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbmUoYikge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBiKHQpICsgXCJcIjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgYmkgPSByZUEubGFzdEluZGV4ID0gcmVCLmxhc3RJbmRleCA9IDAsIC8vIHNjYW4gaW5kZXggZm9yIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGFtLCAvLyBjdXJyZW50IG1hdGNoIGluIGFcbiAgICAgIGJtLCAvLyBjdXJyZW50IG1hdGNoIGluIGJcbiAgICAgIGJzLCAvLyBzdHJpbmcgcHJlY2VkaW5nIGN1cnJlbnQgbnVtYmVyIGluIGIsIGlmIGFueVxuICAgICAgaSA9IC0xLCAvLyBpbmRleCBpbiBzXG4gICAgICBzID0gW10sIC8vIHN0cmluZyBjb25zdGFudHMgYW5kIHBsYWNlaG9sZGVyc1xuICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xuXG4gIC8vIENvZXJjZSBpbnB1dHMgdG8gc3RyaW5ncy5cbiAgYSA9IGEgKyBcIlwiLCBiID0gYiArIFwiXCI7XG5cbiAgLy8gSW50ZXJwb2xhdGUgcGFpcnMgb2YgbnVtYmVycyBpbiBhICYgYi5cbiAgd2hpbGUgKChhbSA9IHJlQS5leGVjKGEpKVxuICAgICAgJiYgKGJtID0gcmVCLmV4ZWMoYikpKSB7XG4gICAgaWYgKChicyA9IGJtLmluZGV4KSA+IGJpKSB7IC8vIGEgc3RyaW5nIHByZWNlZGVzIHRoZSBuZXh0IG51bWJlciBpbiBiXG4gICAgICBicyA9IGIuc2xpY2UoYmksIGJzKTtcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBicztcbiAgICB9XG4gICAgaWYgKChhbSA9IGFtWzBdKSA9PT0gKGJtID0gYm1bMF0pKSB7IC8vIG51bWJlcnMgaW4gYSAmIGIgbWF0Y2hcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJtOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBibTtcbiAgICB9IGVsc2UgeyAvLyBpbnRlcnBvbGF0ZSBub24tbWF0Y2hpbmcgbnVtYmVyc1xuICAgICAgc1srK2ldID0gbnVsbDtcbiAgICAgIHEucHVzaCh7aTogaSwgeDogbnVtYmVyKGFtLCBibSl9KTtcbiAgICB9XG4gICAgYmkgPSByZUIubGFzdEluZGV4O1xuICB9XG5cbiAgLy8gQWRkIHJlbWFpbnMgb2YgYi5cbiAgaWYgKGJpIDwgYi5sZW5ndGgpIHtcbiAgICBicyA9IGIuc2xpY2UoYmkpO1xuICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgIGVsc2Ugc1srK2ldID0gYnM7XG4gIH1cblxuICAvLyBTcGVjaWFsIG9wdGltaXphdGlvbiBmb3Igb25seSBhIHNpbmdsZSBtYXRjaC5cbiAgLy8gT3RoZXJ3aXNlLCBpbnRlcnBvbGF0ZSBlYWNoIG9mIHRoZSBudW1iZXJzIGFuZCByZWpvaW4gdGhlIHN0cmluZy5cbiAgcmV0dXJuIHMubGVuZ3RoIDwgMiA/IChxWzBdXG4gICAgICA/IG9uZShxWzBdLngpXG4gICAgICA6IHplcm8oYikpXG4gICAgICA6IChiID0gcS5sZW5ndGgsIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbzsgaSA8IGI7ICsraSkgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgICAgIHJldHVybiBzLmpvaW4oXCJcIik7XG4gICAgICAgIH0pO1xufVxuIiwiaW1wb3J0IHtjb2xvcn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgcmdiIGZyb20gXCIuL3JnYi5qc1wiO1xuaW1wb3J0IHtnZW5lcmljQXJyYXl9IGZyb20gXCIuL2FycmF5LmpzXCI7XG5pbXBvcnQgZGF0ZSBmcm9tIFwiLi9kYXRlLmpzXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuaW1wb3J0IG9iamVjdCBmcm9tIFwiLi9vYmplY3QuanNcIjtcbmltcG9ydCBzdHJpbmcgZnJvbSBcIi4vc3RyaW5nLmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBudW1iZXJBcnJheSwge2lzTnVtYmVyQXJyYXl9IGZyb20gXCIuL251bWJlckFycmF5LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIHQgPSB0eXBlb2YgYiwgYztcbiAgcmV0dXJuIGIgPT0gbnVsbCB8fCB0ID09PSBcImJvb2xlYW5cIiA/IGNvbnN0YW50KGIpXG4gICAgICA6ICh0ID09PSBcIm51bWJlclwiID8gbnVtYmVyXG4gICAgICA6IHQgPT09IFwic3RyaW5nXCIgPyAoKGMgPSBjb2xvcihiKSkgPyAoYiA9IGMsIHJnYikgOiBzdHJpbmcpXG4gICAgICA6IGIgaW5zdGFuY2VvZiBjb2xvciA/IHJnYlxuICAgICAgOiBiIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGVcbiAgICAgIDogaXNOdW1iZXJBcnJheShiKSA/IG51bWJlckFycmF5XG4gICAgICA6IEFycmF5LmlzQXJyYXkoYikgPyBnZW5lcmljQXJyYXlcbiAgICAgIDogdHlwZW9mIGIudmFsdWVPZiAhPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBiLnRvU3RyaW5nICE9PSBcImZ1bmN0aW9uXCIgfHwgaXNOYU4oYikgPyBvYmplY3RcbiAgICAgIDogbnVtYmVyKShhLCBiKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiA9ICtiLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoYSAqICgxIC0gdCkgKyBiICogdCk7XG4gIH07XG59XG4iLCJ2YXIgZGVncmVlcyA9IDE4MCAvIE1hdGguUEk7XG5cbmV4cG9ydCB2YXIgaWRlbnRpdHkgPSB7XG4gIHRyYW5zbGF0ZVg6IDAsXG4gIHRyYW5zbGF0ZVk6IDAsXG4gIHJvdGF0ZTogMCxcbiAgc2tld1g6IDAsXG4gIHNjYWxlWDogMSxcbiAgc2NhbGVZOiAxXG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiLCBjLCBkLCBlLCBmKSB7XG4gIHZhciBzY2FsZVgsIHNjYWxlWSwgc2tld1g7XG4gIGlmIChzY2FsZVggPSBNYXRoLnNxcnQoYSAqIGEgKyBiICogYikpIGEgLz0gc2NhbGVYLCBiIC89IHNjYWxlWDtcbiAgaWYgKHNrZXdYID0gYSAqIGMgKyBiICogZCkgYyAtPSBhICogc2tld1gsIGQgLT0gYiAqIHNrZXdYO1xuICBpZiAoc2NhbGVZID0gTWF0aC5zcXJ0KGMgKiBjICsgZCAqIGQpKSBjIC89IHNjYWxlWSwgZCAvPSBzY2FsZVksIHNrZXdYIC89IHNjYWxlWTtcbiAgaWYgKGEgKiBkIDwgYiAqIGMpIGEgPSAtYSwgYiA9IC1iLCBza2V3WCA9IC1za2V3WCwgc2NhbGVYID0gLXNjYWxlWDtcbiAgcmV0dXJuIHtcbiAgICB0cmFuc2xhdGVYOiBlLFxuICAgIHRyYW5zbGF0ZVk6IGYsXG4gICAgcm90YXRlOiBNYXRoLmF0YW4yKGIsIGEpICogZGVncmVlcyxcbiAgICBza2V3WDogTWF0aC5hdGFuKHNrZXdYKSAqIGRlZ3JlZXMsXG4gICAgc2NhbGVYOiBzY2FsZVgsXG4gICAgc2NhbGVZOiBzY2FsZVlcbiAgfTtcbn1cbiIsImltcG9ydCBkZWNvbXBvc2UsIHtpZGVudGl0eX0gZnJvbSBcIi4vZGVjb21wb3NlLmpzXCI7XG5cbnZhciBzdmdOb2RlO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlZiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ3NzKHZhbHVlKSB7XG4gIGNvbnN0IG0gPSBuZXcgKHR5cGVvZiBET01NYXRyaXggPT09IFwiZnVuY3Rpb25cIiA/IERPTU1hdHJpeCA6IFdlYktpdENTU01hdHJpeCkodmFsdWUgKyBcIlwiKTtcbiAgcmV0dXJuIG0uaXNJZGVudGl0eSA/IGlkZW50aXR5IDogZGVjb21wb3NlKG0uYSwgbS5iLCBtLmMsIG0uZCwgbS5lLCBtLmYpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdmcodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiBpZGVudGl0eTtcbiAgaWYgKCFzdmdOb2RlKSBzdmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJnXCIpO1xuICBzdmdOb2RlLnNldEF0dHJpYnV0ZShcInRyYW5zZm9ybVwiLCB2YWx1ZSk7XG4gIGlmICghKHZhbHVlID0gc3ZnTm9kZS50cmFuc2Zvcm0uYmFzZVZhbC5jb25zb2xpZGF0ZSgpKSkgcmV0dXJuIGlkZW50aXR5O1xuICB2YWx1ZSA9IHZhbHVlLm1hdHJpeDtcbiAgcmV0dXJuIGRlY29tcG9zZSh2YWx1ZS5hLCB2YWx1ZS5iLCB2YWx1ZS5jLCB2YWx1ZS5kLCB2YWx1ZS5lLCB2YWx1ZS5mKTtcbn1cbiIsImltcG9ydCBudW1iZXIgZnJvbSBcIi4uL251bWJlci5qc1wiO1xuaW1wb3J0IHtwYXJzZUNzcywgcGFyc2VTdmd9IGZyb20gXCIuL3BhcnNlLmpzXCI7XG5cbmZ1bmN0aW9uIGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlLCBweENvbW1hLCBweFBhcmVuLCBkZWdQYXJlbikge1xuXG4gIGZ1bmN0aW9uIHBvcChzKSB7XG4gICAgcmV0dXJuIHMubGVuZ3RoID8gcy5wb3AoKSArIFwiIFwiIDogXCJcIjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyYW5zbGF0ZSh4YSwgeWEsIHhiLCB5YiwgcywgcSkge1xuICAgIGlmICh4YSAhPT0geGIgfHwgeWEgIT09IHliKSB7XG4gICAgICB2YXIgaSA9IHMucHVzaChcInRyYW5zbGF0ZShcIiwgbnVsbCwgcHhDb21tYSwgbnVsbCwgcHhQYXJlbik7XG4gICAgICBxLnB1c2goe2k6IGkgLSA0LCB4OiBudW1iZXIoeGEsIHhiKX0sIHtpOiBpIC0gMiwgeDogbnVtYmVyKHlhLCB5Yil9KTtcbiAgICB9IGVsc2UgaWYgKHhiIHx8IHliKSB7XG4gICAgICBzLnB1c2goXCJ0cmFuc2xhdGUoXCIgKyB4YiArIHB4Q29tbWEgKyB5YiArIHB4UGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJvdGF0ZShhLCBiLCBzLCBxKSB7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgIGlmIChhIC0gYiA+IDE4MCkgYiArPSAzNjA7IGVsc2UgaWYgKGIgLSBhID4gMTgwKSBhICs9IDM2MDsgLy8gc2hvcnRlc3QgcGF0aFxuICAgICAgcS5wdXNoKHtpOiBzLnB1c2gocG9wKHMpICsgXCJyb3RhdGUoXCIsIG51bGwsIGRlZ1BhcmVuKSAtIDIsIHg6IG51bWJlcihhLCBiKX0pO1xuICAgIH0gZWxzZSBpZiAoYikge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwicm90YXRlKFwiICsgYiArIGRlZ1BhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBza2V3WChhLCBiLCBzLCBxKSB7XG4gICAgaWYgKGEgIT09IGIpIHtcbiAgICAgIHEucHVzaCh7aTogcy5wdXNoKHBvcChzKSArIFwic2tld1goXCIsIG51bGwsIGRlZ1BhcmVuKSAtIDIsIHg6IG51bWJlcihhLCBiKX0pO1xuICAgIH0gZWxzZSBpZiAoYikge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwic2tld1goXCIgKyBiICsgZGVnUGFyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHNjYWxlKHhhLCB5YSwgeGIsIHliLCBzLCBxKSB7XG4gICAgaWYgKHhhICE9PSB4YiB8fCB5YSAhPT0geWIpIHtcbiAgICAgIHZhciBpID0gcy5wdXNoKHBvcChzKSArIFwic2NhbGUoXCIsIG51bGwsIFwiLFwiLCBudWxsLCBcIilcIik7XG4gICAgICBxLnB1c2goe2k6IGkgLSA0LCB4OiBudW1iZXIoeGEsIHhiKX0sIHtpOiBpIC0gMiwgeDogbnVtYmVyKHlhLCB5Yil9KTtcbiAgICB9IGVsc2UgaWYgKHhiICE9PSAxIHx8IHliICE9PSAxKSB7XG4gICAgICBzLnB1c2gocG9wKHMpICsgXCJzY2FsZShcIiArIHhiICsgXCIsXCIgKyB5YiArIFwiKVwiKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24oYSwgYikge1xuICAgIHZhciBzID0gW10sIC8vIHN0cmluZyBjb25zdGFudHMgYW5kIHBsYWNlaG9sZGVyc1xuICAgICAgICBxID0gW107IC8vIG51bWJlciBpbnRlcnBvbGF0b3JzXG4gICAgYSA9IHBhcnNlKGEpLCBiID0gcGFyc2UoYik7XG4gICAgdHJhbnNsYXRlKGEudHJhbnNsYXRlWCwgYS50cmFuc2xhdGVZLCBiLnRyYW5zbGF0ZVgsIGIudHJhbnNsYXRlWSwgcywgcSk7XG4gICAgcm90YXRlKGEucm90YXRlLCBiLnJvdGF0ZSwgcywgcSk7XG4gICAgc2tld1goYS5za2V3WCwgYi5za2V3WCwgcywgcSk7XG4gICAgc2NhbGUoYS5zY2FsZVgsIGEuc2NhbGVZLCBiLnNjYWxlWCwgYi5zY2FsZVksIHMsIHEpO1xuICAgIGEgPSBiID0gbnVsbDsgLy8gZ2NcbiAgICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIGkgPSAtMSwgbiA9IHEubGVuZ3RoLCBvO1xuICAgICAgd2hpbGUgKCsraSA8IG4pIHNbKG8gPSBxW2ldKS5pXSA9IG8ueCh0KTtcbiAgICAgIHJldHVybiBzLmpvaW4oXCJcIik7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHZhciBpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyA9IGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlQ3NzLCBcInB4LCBcIiwgXCJweClcIiwgXCJkZWcpXCIpO1xuZXhwb3J0IHZhciBpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZyA9IGludGVycG9sYXRlVHJhbnNmb3JtKHBhcnNlU3ZnLCBcIiwgXCIsIFwiKVwiLCBcIilcIik7XG4iLCJpbXBvcnQge2xhYiBhcyBjb2xvckxhYn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgY29sb3IgZnJvbSBcIi4vY29sb3IuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGFiKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGwgPSBjb2xvcigoc3RhcnQgPSBjb2xvckxhYihzdGFydCkpLmwsIChlbmQgPSBjb2xvckxhYihlbmQpKS5sKSxcbiAgICAgIGEgPSBjb2xvcihzdGFydC5hLCBlbmQuYSksXG4gICAgICBiID0gY29sb3Ioc3RhcnQuYiwgZW5kLmIpLFxuICAgICAgb3BhY2l0eSA9IGNvbG9yKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBzdGFydC5sID0gbCh0KTtcbiAgICBzdGFydC5hID0gYSh0KTtcbiAgICBzdGFydC5iID0gYih0KTtcbiAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICB9O1xufVxuIiwidmFyIGZyYW1lID0gMCwgLy8gaXMgYW4gYW5pbWF0aW9uIGZyYW1lIHBlbmRpbmc/XG4gICAgdGltZW91dCA9IDAsIC8vIGlzIGEgdGltZW91dCBwZW5kaW5nP1xuICAgIGludGVydmFsID0gMCwgLy8gYXJlIGFueSB0aW1lcnMgYWN0aXZlP1xuICAgIHBva2VEZWxheSA9IDEwMDAsIC8vIGhvdyBmcmVxdWVudGx5IHdlIGNoZWNrIGZvciBjbG9jayBza2V3XG4gICAgdGFza0hlYWQsXG4gICAgdGFza1RhaWwsXG4gICAgY2xvY2tMYXN0ID0gMCxcbiAgICBjbG9ja05vdyA9IDAsXG4gICAgY2xvY2tTa2V3ID0gMCxcbiAgICBjbG9jayA9IHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gXCJvYmplY3RcIiAmJiBwZXJmb3JtYW5jZS5ub3cgPyBwZXJmb3JtYW5jZSA6IERhdGUsXG4gICAgc2V0RnJhbWUgPSB0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPyB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KSA6IGZ1bmN0aW9uKGYpIHsgc2V0VGltZW91dChmLCAxNyk7IH07XG5cbmV4cG9ydCBmdW5jdGlvbiBub3coKSB7XG4gIHJldHVybiBjbG9ja05vdyB8fCAoc2V0RnJhbWUoY2xlYXJOb3cpLCBjbG9ja05vdyA9IGNsb2NrLm5vdygpICsgY2xvY2tTa2V3KTtcbn1cblxuZnVuY3Rpb24gY2xlYXJOb3coKSB7XG4gIGNsb2NrTm93ID0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFRpbWVyKCkge1xuICB0aGlzLl9jYWxsID1cbiAgdGhpcy5fdGltZSA9XG4gIHRoaXMuX25leHQgPSBudWxsO1xufVxuXG5UaW1lci5wcm90b3R5cGUgPSB0aW1lci5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBUaW1lcixcbiAgcmVzdGFydDogZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY2FsbGJhY2sgaXMgbm90IGEgZnVuY3Rpb25cIik7XG4gICAgdGltZSA9ICh0aW1lID09IG51bGwgPyBub3coKSA6ICt0aW1lKSArIChkZWxheSA9PSBudWxsID8gMCA6ICtkZWxheSk7XG4gICAgaWYgKCF0aGlzLl9uZXh0ICYmIHRhc2tUYWlsICE9PSB0aGlzKSB7XG4gICAgICBpZiAodGFza1RhaWwpIHRhc2tUYWlsLl9uZXh0ID0gdGhpcztcbiAgICAgIGVsc2UgdGFza0hlYWQgPSB0aGlzO1xuICAgICAgdGFza1RhaWwgPSB0aGlzO1xuICAgIH1cbiAgICB0aGlzLl9jYWxsID0gY2FsbGJhY2s7XG4gICAgdGhpcy5fdGltZSA9IHRpbWU7XG4gICAgc2xlZXAoKTtcbiAgfSxcbiAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuX2NhbGwpIHtcbiAgICAgIHRoaXMuX2NhbGwgPSBudWxsO1xuICAgICAgdGhpcy5fdGltZSA9IEluZmluaXR5O1xuICAgICAgc2xlZXAoKTtcbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lcihjYWxsYmFjaywgZGVsYXksIHRpbWUpIHtcbiAgdmFyIHQgPSBuZXcgVGltZXI7XG4gIHQucmVzdGFydChjYWxsYmFjaywgZGVsYXksIHRpbWUpO1xuICByZXR1cm4gdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVyRmx1c2goKSB7XG4gIG5vdygpOyAvLyBHZXQgdGhlIGN1cnJlbnQgdGltZSwgaWYgbm90IGFscmVhZHkgc2V0LlxuICArK2ZyYW1lOyAvLyBQcmV0ZW5kIHdl4oCZdmUgc2V0IGFuIGFsYXJtLCBpZiB3ZSBoYXZlbuKAmXQgYWxyZWFkeS5cbiAgdmFyIHQgPSB0YXNrSGVhZCwgZTtcbiAgd2hpbGUgKHQpIHtcbiAgICBpZiAoKGUgPSBjbG9ja05vdyAtIHQuX3RpbWUpID49IDApIHQuX2NhbGwuY2FsbCh1bmRlZmluZWQsIGUpO1xuICAgIHQgPSB0Ll9uZXh0O1xuICB9XG4gIC0tZnJhbWU7XG59XG5cbmZ1bmN0aW9uIHdha2UoKSB7XG4gIGNsb2NrTm93ID0gKGNsb2NrTGFzdCA9IGNsb2NrLm5vdygpKSArIGNsb2NrU2tldztcbiAgZnJhbWUgPSB0aW1lb3V0ID0gMDtcbiAgdHJ5IHtcbiAgICB0aW1lckZsdXNoKCk7XG4gIH0gZmluYWxseSB7XG4gICAgZnJhbWUgPSAwO1xuICAgIG5hcCgpO1xuICAgIGNsb2NrTm93ID0gMDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwb2tlKCkge1xuICB2YXIgbm93ID0gY2xvY2subm93KCksIGRlbGF5ID0gbm93IC0gY2xvY2tMYXN0O1xuICBpZiAoZGVsYXkgPiBwb2tlRGVsYXkpIGNsb2NrU2tldyAtPSBkZWxheSwgY2xvY2tMYXN0ID0gbm93O1xufVxuXG5mdW5jdGlvbiBuYXAoKSB7XG4gIHZhciB0MCwgdDEgPSB0YXNrSGVhZCwgdDIsIHRpbWUgPSBJbmZpbml0eTtcbiAgd2hpbGUgKHQxKSB7XG4gICAgaWYgKHQxLl9jYWxsKSB7XG4gICAgICBpZiAodGltZSA+IHQxLl90aW1lKSB0aW1lID0gdDEuX3RpbWU7XG4gICAgICB0MCA9IHQxLCB0MSA9IHQxLl9uZXh0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0MiA9IHQxLl9uZXh0LCB0MS5fbmV4dCA9IG51bGw7XG4gICAgICB0MSA9IHQwID8gdDAuX25leHQgPSB0MiA6IHRhc2tIZWFkID0gdDI7XG4gICAgfVxuICB9XG4gIHRhc2tUYWlsID0gdDA7XG4gIHNsZWVwKHRpbWUpO1xufVxuXG5mdW5jdGlvbiBzbGVlcCh0aW1lKSB7XG4gIGlmIChmcmFtZSkgcmV0dXJuOyAvLyBTb29uZXN0IGFsYXJtIGFscmVhZHkgc2V0LCBvciB3aWxsIGJlLlxuICBpZiAodGltZW91dCkgdGltZW91dCA9IGNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgdmFyIGRlbGF5ID0gdGltZSAtIGNsb2NrTm93OyAvLyBTdHJpY3RseSBsZXNzIHRoYW4gaWYgd2UgcmVjb21wdXRlZCBjbG9ja05vdy5cbiAgaWYgKGRlbGF5ID4gMjQpIHtcbiAgICBpZiAodGltZSA8IEluZmluaXR5KSB0aW1lb3V0ID0gc2V0VGltZW91dCh3YWtlLCB0aW1lIC0gY2xvY2subm93KCkgLSBjbG9ja1NrZXcpO1xuICAgIGlmIChpbnRlcnZhbCkgaW50ZXJ2YWwgPSBjbGVhckludGVydmFsKGludGVydmFsKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIWludGVydmFsKSBjbG9ja0xhc3QgPSBjbG9jay5ub3coKSwgaW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChwb2tlLCBwb2tlRGVsYXkpO1xuICAgIGZyYW1lID0gMSwgc2V0RnJhbWUod2FrZSk7XG4gIH1cbn1cbiIsImltcG9ydCB7VGltZXJ9IGZyb20gXCIuL3RpbWVyLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICB2YXIgdCA9IG5ldyBUaW1lcjtcbiAgZGVsYXkgPSBkZWxheSA9PSBudWxsID8gMCA6ICtkZWxheTtcbiAgdC5yZXN0YXJ0KGVsYXBzZWQgPT4ge1xuICAgIHQuc3RvcCgpO1xuICAgIGNhbGxiYWNrKGVsYXBzZWQgKyBkZWxheSk7XG4gIH0sIGRlbGF5LCB0aW1lKTtcbiAgcmV0dXJuIHQ7XG59XG4iLCJpbXBvcnQge2Rpc3BhdGNofSBmcm9tIFwiZDMtZGlzcGF0Y2hcIjtcbmltcG9ydCB7dGltZXIsIHRpbWVvdXR9IGZyb20gXCJkMy10aW1lclwiO1xuXG52YXIgZW1wdHlPbiA9IGRpc3BhdGNoKFwic3RhcnRcIiwgXCJlbmRcIiwgXCJjYW5jZWxcIiwgXCJpbnRlcnJ1cHRcIik7XG52YXIgZW1wdHlUd2VlbiA9IFtdO1xuXG5leHBvcnQgdmFyIENSRUFURUQgPSAwO1xuZXhwb3J0IHZhciBTQ0hFRFVMRUQgPSAxO1xuZXhwb3J0IHZhciBTVEFSVElORyA9IDI7XG5leHBvcnQgdmFyIFNUQVJURUQgPSAzO1xuZXhwb3J0IHZhciBSVU5OSU5HID0gNDtcbmV4cG9ydCB2YXIgRU5ESU5HID0gNTtcbmV4cG9ydCB2YXIgRU5ERUQgPSA2O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihub2RlLCBuYW1lLCBpZCwgaW5kZXgsIGdyb3VwLCB0aW1pbmcpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uO1xuICBpZiAoIXNjaGVkdWxlcykgbm9kZS5fX3RyYW5zaXRpb24gPSB7fTtcbiAgZWxzZSBpZiAoaWQgaW4gc2NoZWR1bGVzKSByZXR1cm47XG4gIGNyZWF0ZShub2RlLCBpZCwge1xuICAgIG5hbWU6IG5hbWUsXG4gICAgaW5kZXg6IGluZGV4LCAvLyBGb3IgY29udGV4dCBkdXJpbmcgY2FsbGJhY2suXG4gICAgZ3JvdXA6IGdyb3VwLCAvLyBGb3IgY29udGV4dCBkdXJpbmcgY2FsbGJhY2suXG4gICAgb246IGVtcHR5T24sXG4gICAgdHdlZW46IGVtcHR5VHdlZW4sXG4gICAgdGltZTogdGltaW5nLnRpbWUsXG4gICAgZGVsYXk6IHRpbWluZy5kZWxheSxcbiAgICBkdXJhdGlvbjogdGltaW5nLmR1cmF0aW9uLFxuICAgIGVhc2U6IHRpbWluZy5lYXNlLFxuICAgIHRpbWVyOiBudWxsLFxuICAgIHN0YXRlOiBDUkVBVEVEXG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBnZXQobm9kZSwgaWQpO1xuICBpZiAoc2NoZWR1bGUuc3RhdGUgPiBDUkVBVEVEKSB0aHJvdyBuZXcgRXJyb3IoXCJ0b28gbGF0ZTsgYWxyZWFkeSBzY2hlZHVsZWRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBnZXQobm9kZSwgaWQpO1xuICBpZiAoc2NoZWR1bGUuc3RhdGUgPiBTVEFSVEVEKSB0aHJvdyBuZXcgRXJyb3IoXCJ0b28gbGF0ZTsgYWxyZWFkeSBydW5uaW5nXCIpO1xuICByZXR1cm4gc2NoZWR1bGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXQobm9kZSwgaWQpIHtcbiAgdmFyIHNjaGVkdWxlID0gbm9kZS5fX3RyYW5zaXRpb247XG4gIGlmICghc2NoZWR1bGUgfHwgIShzY2hlZHVsZSA9IHNjaGVkdWxlW2lkXSkpIHRocm93IG5ldyBFcnJvcihcInRyYW5zaXRpb24gbm90IGZvdW5kXCIpO1xuICByZXR1cm4gc2NoZWR1bGU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZShub2RlLCBpZCwgc2VsZikge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb24sXG4gICAgICB0d2VlbjtcblxuICAvLyBJbml0aWFsaXplIHRoZSBzZWxmIHRpbWVyIHdoZW4gdGhlIHRyYW5zaXRpb24gaXMgY3JlYXRlZC5cbiAgLy8gTm90ZSB0aGUgYWN0dWFsIGRlbGF5IGlzIG5vdCBrbm93biB1bnRpbCB0aGUgZmlyc3QgY2FsbGJhY2shXG4gIHNjaGVkdWxlc1tpZF0gPSBzZWxmO1xuICBzZWxmLnRpbWVyID0gdGltZXIoc2NoZWR1bGUsIDAsIHNlbGYudGltZSk7XG5cbiAgZnVuY3Rpb24gc2NoZWR1bGUoZWxhcHNlZCkge1xuICAgIHNlbGYuc3RhdGUgPSBTQ0hFRFVMRUQ7XG4gICAgc2VsZi50aW1lci5yZXN0YXJ0KHN0YXJ0LCBzZWxmLmRlbGF5LCBzZWxmLnRpbWUpO1xuXG4gICAgLy8gSWYgdGhlIGVsYXBzZWQgZGVsYXkgaXMgbGVzcyB0aGFuIG91ciBmaXJzdCBzbGVlcCwgc3RhcnQgaW1tZWRpYXRlbHkuXG4gICAgaWYgKHNlbGYuZGVsYXkgPD0gZWxhcHNlZCkgc3RhcnQoZWxhcHNlZCAtIHNlbGYuZGVsYXkpO1xuICB9XG5cbiAgZnVuY3Rpb24gc3RhcnQoZWxhcHNlZCkge1xuICAgIHZhciBpLCBqLCBuLCBvO1xuXG4gICAgLy8gSWYgdGhlIHN0YXRlIGlzIG5vdCBTQ0hFRFVMRUQsIHRoZW4gd2UgcHJldmlvdXNseSBlcnJvcmVkIG9uIHN0YXJ0LlxuICAgIGlmIChzZWxmLnN0YXRlICE9PSBTQ0hFRFVMRUQpIHJldHVybiBzdG9wKCk7XG5cbiAgICBmb3IgKGkgaW4gc2NoZWR1bGVzKSB7XG4gICAgICBvID0gc2NoZWR1bGVzW2ldO1xuICAgICAgaWYgKG8ubmFtZSAhPT0gc2VsZi5uYW1lKSBjb250aW51ZTtcblxuICAgICAgLy8gV2hpbGUgdGhpcyBlbGVtZW50IGFscmVhZHkgaGFzIGEgc3RhcnRpbmcgdHJhbnNpdGlvbiBkdXJpbmcgdGhpcyBmcmFtZSxcbiAgICAgIC8vIGRlZmVyIHN0YXJ0aW5nIGFuIGludGVycnVwdGluZyB0cmFuc2l0aW9uIHVudGlsIHRoYXQgdHJhbnNpdGlvbiBoYXMgYVxuICAgICAgLy8gY2hhbmNlIHRvIHRpY2sgKGFuZCBwb3NzaWJseSBlbmQpOyBzZWUgZDMvZDMtdHJhbnNpdGlvbiM1NCFcbiAgICAgIGlmIChvLnN0YXRlID09PSBTVEFSVEVEKSByZXR1cm4gdGltZW91dChzdGFydCk7XG5cbiAgICAgIC8vIEludGVycnVwdCB0aGUgYWN0aXZlIHRyYW5zaXRpb24sIGlmIGFueS5cbiAgICAgIGlmIChvLnN0YXRlID09PSBSVU5OSU5HKSB7XG4gICAgICAgIG8uc3RhdGUgPSBFTkRFRDtcbiAgICAgICAgby50aW1lci5zdG9wKCk7XG4gICAgICAgIG8ub24uY2FsbChcImludGVycnVwdFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBvLmluZGV4LCBvLmdyb3VwKTtcbiAgICAgICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2FuY2VsIGFueSBwcmUtZW1wdGVkIHRyYW5zaXRpb25zLlxuICAgICAgZWxzZSBpZiAoK2kgPCBpZCkge1xuICAgICAgICBvLnN0YXRlID0gRU5ERUQ7XG4gICAgICAgIG8udGltZXIuc3RvcCgpO1xuICAgICAgICBvLm9uLmNhbGwoXCJjYW5jZWxcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgby5pbmRleCwgby5ncm91cCk7XG4gICAgICAgIGRlbGV0ZSBzY2hlZHVsZXNbaV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gRGVmZXIgdGhlIGZpcnN0IHRpY2sgdG8gZW5kIG9mIHRoZSBjdXJyZW50IGZyYW1lOyBzZWUgZDMvZDMjMTU3Ni5cbiAgICAvLyBOb3RlIHRoZSB0cmFuc2l0aW9uIG1heSBiZSBjYW5jZWxlZCBhZnRlciBzdGFydCBhbmQgYmVmb3JlIHRoZSBmaXJzdCB0aWNrIVxuICAgIC8vIE5vdGUgdGhpcyBtdXN0IGJlIHNjaGVkdWxlZCBiZWZvcmUgdGhlIHN0YXJ0IGV2ZW50OyBzZWUgZDMvZDMtdHJhbnNpdGlvbiMxNiFcbiAgICAvLyBBc3N1bWluZyB0aGlzIGlzIHN1Y2Nlc3NmdWwsIHN1YnNlcXVlbnQgY2FsbGJhY2tzIGdvIHN0cmFpZ2h0IHRvIHRpY2suXG4gICAgdGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgIGlmIChzZWxmLnN0YXRlID09PSBTVEFSVEVEKSB7XG4gICAgICAgIHNlbGYuc3RhdGUgPSBSVU5OSU5HO1xuICAgICAgICBzZWxmLnRpbWVyLnJlc3RhcnQodGljaywgc2VsZi5kZWxheSwgc2VsZi50aW1lKTtcbiAgICAgICAgdGljayhlbGFwc2VkKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIERpc3BhdGNoIHRoZSBzdGFydCBldmVudC5cbiAgICAvLyBOb3RlIHRoaXMgbXVzdCBiZSBkb25lIGJlZm9yZSB0aGUgdHdlZW4gYXJlIGluaXRpYWxpemVkLlxuICAgIHNlbGYuc3RhdGUgPSBTVEFSVElORztcbiAgICBzZWxmLm9uLmNhbGwoXCJzdGFydFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBzZWxmLmluZGV4LCBzZWxmLmdyb3VwKTtcbiAgICBpZiAoc2VsZi5zdGF0ZSAhPT0gU1RBUlRJTkcpIHJldHVybjsgLy8gaW50ZXJydXB0ZWRcbiAgICBzZWxmLnN0YXRlID0gU1RBUlRFRDtcblxuICAgIC8vIEluaXRpYWxpemUgdGhlIHR3ZWVuLCBkZWxldGluZyBudWxsIHR3ZWVuLlxuICAgIHR3ZWVuID0gbmV3IEFycmF5KG4gPSBzZWxmLnR3ZWVuLmxlbmd0aCk7XG4gICAgZm9yIChpID0gMCwgaiA9IC0xOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobyA9IHNlbGYudHdlZW5baV0udmFsdWUuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBzZWxmLmluZGV4LCBzZWxmLmdyb3VwKSkge1xuICAgICAgICB0d2VlblsrK2pdID0gbztcbiAgICAgIH1cbiAgICB9XG4gICAgdHdlZW4ubGVuZ3RoID0gaiArIDE7XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrKGVsYXBzZWQpIHtcbiAgICB2YXIgdCA9IGVsYXBzZWQgPCBzZWxmLmR1cmF0aW9uID8gc2VsZi5lYXNlLmNhbGwobnVsbCwgZWxhcHNlZCAvIHNlbGYuZHVyYXRpb24pIDogKHNlbGYudGltZXIucmVzdGFydChzdG9wKSwgc2VsZi5zdGF0ZSA9IEVORElORywgMSksXG4gICAgICAgIGkgPSAtMSxcbiAgICAgICAgbiA9IHR3ZWVuLmxlbmd0aDtcblxuICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICB0d2VlbltpXS5jYWxsKG5vZGUsIHQpO1xuICAgIH1cblxuICAgIC8vIERpc3BhdGNoIHRoZSBlbmQgZXZlbnQuXG4gICAgaWYgKHNlbGYuc3RhdGUgPT09IEVORElORykge1xuICAgICAgc2VsZi5vbi5jYWxsKFwiZW5kXCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApO1xuICAgICAgc3RvcCgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHN0b3AoKSB7XG4gICAgc2VsZi5zdGF0ZSA9IEVOREVEO1xuICAgIHNlbGYudGltZXIuc3RvcCgpO1xuICAgIGRlbGV0ZSBzY2hlZHVsZXNbaWRdO1xuICAgIGZvciAodmFyIGkgaW4gc2NoZWR1bGVzKSByZXR1cm47IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBkZWxldGUgbm9kZS5fX3RyYW5zaXRpb247XG4gIH1cbn1cbiIsImltcG9ydCB7Z2V0LCBzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIHR3ZWVuUmVtb3ZlKGlkLCBuYW1lKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIHR3ZWVuID0gc2NoZWR1bGUudHdlZW47XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIHR3ZWVuIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIHR3ZWVuIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmICh0d2VlbiAhPT0gdHdlZW4wKSB7XG4gICAgICB0d2VlbjEgPSB0d2VlbjAgPSB0d2VlbjtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBuID0gdHdlZW4xLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAodHdlZW4xW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICB0d2VlbjEgPSB0d2VlbjEuc2xpY2UoKTtcbiAgICAgICAgICB0d2VlbjEuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgc2NoZWR1bGUudHdlZW4gPSB0d2VlbjE7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHR3ZWVuRnVuY3Rpb24oaWQsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0d2VlbjAsIHR3ZWVuMTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICB0d2VlbiA9IHNjaGVkdWxlLnR3ZWVuO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCB0d2VlbiB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCB0d2VlbiBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAodHdlZW4gIT09IHR3ZWVuMCkge1xuICAgICAgdHdlZW4xID0gKHR3ZWVuMCA9IHR3ZWVuKS5zbGljZSgpO1xuICAgICAgZm9yICh2YXIgdCA9IHtuYW1lOiBuYW1lLCB2YWx1ZTogdmFsdWV9LCBpID0gMCwgbiA9IHR3ZWVuMS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgICAgaWYgKHR3ZWVuMVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgICAgdHdlZW4xW2ldID0gdDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGkgPT09IG4pIHR3ZWVuMS5wdXNoKHQpO1xuICAgIH1cblxuICAgIHNjaGVkdWxlLnR3ZWVuID0gdHdlZW4xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICBuYW1lICs9IFwiXCI7XG5cbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgdmFyIHR3ZWVuID0gZ2V0KHRoaXMubm9kZSgpLCBpZCkudHdlZW47XG4gICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0d2Vlbi5sZW5ndGgsIHQ7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgodCA9IHR3ZWVuW2ldKS5uYW1lID09PSBuYW1lKSB7XG4gICAgICAgIHJldHVybiB0LnZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGwgPyB0d2VlblJlbW92ZSA6IHR3ZWVuRnVuY3Rpb24pKGlkLCBuYW1lLCB2YWx1ZSkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHdlZW5WYWx1ZSh0cmFuc2l0aW9uLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgaWQgPSB0cmFuc2l0aW9uLl9pZDtcblxuICB0cmFuc2l0aW9uLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKTtcbiAgICAoc2NoZWR1bGUudmFsdWUgfHwgKHNjaGVkdWxlLnZhbHVlID0ge30pKVtuYW1lXSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH0pO1xuXG4gIHJldHVybiBmdW5jdGlvbihub2RlKSB7XG4gICAgcmV0dXJuIGdldChub2RlLCBpZCkudmFsdWVbbmFtZV07XG4gIH07XG59XG4iLCJpbXBvcnQge2NvbG9yfSBmcm9tIFwiZDMtY29sb3JcIjtcbmltcG9ydCB7aW50ZXJwb2xhdGVOdW1iZXIsIGludGVycG9sYXRlUmdiLCBpbnRlcnBvbGF0ZVN0cmluZ30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGM7XG4gIHJldHVybiAodHlwZW9mIGIgPT09IFwibnVtYmVyXCIgPyBpbnRlcnBvbGF0ZU51bWJlclxuICAgICAgOiBiIGluc3RhbmNlb2YgY29sb3IgPyBpbnRlcnBvbGF0ZVJnYlxuICAgICAgOiAoYyA9IGNvbG9yKGIpKSA/IChiID0gYywgaW50ZXJwb2xhdGVSZ2IpXG4gICAgICA6IGludGVycG9sYXRlU3RyaW5nKShhLCBiKTtcbn1cbiIsImltcG9ydCB7aW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmcgYXMgaW50ZXJwb2xhdGVUcmFuc2Zvcm19IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtuYW1lc3BhY2V9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW4uanNcIjtcbmltcG9ydCBpbnRlcnBvbGF0ZSBmcm9tIFwiLi9pbnRlcnBvbGF0ZS5qc1wiO1xuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyUmVtb3ZlTlMoZnVsbG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50KG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZTEpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCIsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnROUyhmdWxsbmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIixcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAsIHZhbHVlMSA9IHZhbHVlKHRoaXMpLCBzdHJpbmcxO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgcmV0dXJuIHZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgc3RyaW5nMCA9IHRoaXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckZ1bmN0aW9uTlMoZnVsbG5hbWUsIGludGVycG9sYXRlLCB2YWx1ZSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxMCxcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwLCB2YWx1ZTEgPSB2YWx1ZSh0aGlzKSwgc3RyaW5nMTtcbiAgICBpZiAodmFsdWUxID09IG51bGwpIHJldHVybiB2b2lkIHRoaXMucmVtb3ZlQXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKTtcbiAgICBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIHJldHVybiBzdHJpbmcwID09PSBzdHJpbmcxID8gbnVsbFxuICAgICAgICA6IHN0cmluZzAgPT09IHN0cmluZzAwICYmIHN0cmluZzEgPT09IHN0cmluZzEwID8gaW50ZXJwb2xhdGUwXG4gICAgICAgIDogKHN0cmluZzEwID0gc3RyaW5nMSwgaW50ZXJwb2xhdGUwID0gaW50ZXJwb2xhdGUoc3RyaW5nMDAgPSBzdHJpbmcwLCB2YWx1ZTEpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgdmFyIGZ1bGxuYW1lID0gbmFtZXNwYWNlKG5hbWUpLCBpID0gZnVsbG5hbWUgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdGhpcy5hdHRyVHdlZW4obmFtZSwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pKGZ1bGxuYW1lLCBpLCB0d2VlblZhbHVlKHRoaXMsIFwiYXR0ci5cIiArIG5hbWUsIHZhbHVlKSlcbiAgICAgIDogdmFsdWUgPT0gbnVsbCA/IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJSZW1vdmVOUyA6IGF0dHJSZW1vdmUpKGZ1bGxuYW1lKVxuICAgICAgOiAoZnVsbG5hbWUubG9jYWwgPyBhdHRyQ29uc3RhbnROUyA6IGF0dHJDb25zdGFudCkoZnVsbG5hbWUsIGksIHZhbHVlKSk7XG59XG4iLCJpbXBvcnQge25hbWVzcGFjZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuXG5mdW5jdGlvbiBhdHRySW50ZXJwb2xhdGUobmFtZSwgaSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIGkuY2FsbCh0aGlzLCB0KSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJJbnRlcnBvbGF0ZU5TKGZ1bGxuYW1lLCBpKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwsIGkuY2FsbCh0aGlzLCB0KSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJUd2Vlbk5TKGZ1bGxuYW1lLCB2YWx1ZSkge1xuICB2YXIgdDAsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0MCA9IChpMCA9IGkpICYmIGF0dHJJbnRlcnBvbGF0ZU5TKGZ1bGxuYW1lLCBpKTtcbiAgICByZXR1cm4gdDA7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZnVuY3Rpb24gYXR0clR3ZWVuKG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0MCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQwID0gKGkwID0gaSkgJiYgYXR0ckludGVycG9sYXRlKG5hbWUsIGkpO1xuICAgIHJldHVybiB0MDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIga2V5ID0gXCJhdHRyLlwiICsgbmFtZTtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSk7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgKGZ1bGxuYW1lLmxvY2FsID8gYXR0clR3ZWVuTlMgOiBhdHRyVHdlZW4pKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtnZXQsIGluaXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIGRlbGF5RnVuY3Rpb24oaWQsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpbml0KHRoaXMsIGlkKS5kZWxheSA9ICt2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkZWxheUNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPSArdmFsdWUsIGZ1bmN0aW9uKCkge1xuICAgIGluaXQodGhpcywgaWQpLmRlbGF5ID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGRlbGF5RnVuY3Rpb25cbiAgICAgICAgICA6IGRlbGF5Q29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmRlbGF5O1xufVxuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZHVyYXRpb25GdW5jdGlvbihpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZHVyYXRpb24gPSArdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZHVyYXRpb25Db25zdGFudChpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID0gK3ZhbHVlLCBmdW5jdGlvbigpIHtcbiAgICBzZXQodGhpcywgaWQpLmR1cmF0aW9uID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCgodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgICA/IGR1cmF0aW9uRnVuY3Rpb25cbiAgICAgICAgICA6IGR1cmF0aW9uQ29uc3RhbnQpKGlkLCB2YWx1ZSkpXG4gICAgICA6IGdldCh0aGlzLm5vZGUoKSwgaWQpLmR1cmF0aW9uO1xufVxuIiwiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcblxudmFyIFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3I7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9ncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHtpbnRlcnBvbGF0ZVRyYW5zZm9ybUNzcyBhcyBpbnRlcnBvbGF0ZVRyYW5zZm9ybX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge3N0eWxlfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge3NldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcbmltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW4uanNcIjtcbmltcG9ydCBpbnRlcnBvbGF0ZSBmcm9tIFwiLi9pbnRlcnBvbGF0ZS5qc1wiO1xuXG5mdW5jdGlvbiBzdHlsZU51bGwobmFtZSwgaW50ZXJwb2xhdGUpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHN0eWxlKHRoaXMsIG5hbWUpLFxuICAgICAgICBzdHJpbmcxID0gKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSksIHN0eWxlKHRoaXMsIG5hbWUpKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCAmJiBzdHJpbmcxID09PSBzdHJpbmcxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgc3RyaW5nMTAgPSBzdHJpbmcxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVDb25zdGFudChuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUxKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSBzdHlsZSh0aGlzLCBuYW1lKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVGdW5jdGlvbihuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCA9IHN0eWxlKHRoaXMsIG5hbWUpLFxuICAgICAgICB2YWx1ZTEgPSB2YWx1ZSh0aGlzKSxcbiAgICAgICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCI7XG4gICAgaWYgKHZhbHVlMSA9PSBudWxsKSBzdHJpbmcxID0gdmFsdWUxID0gKHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSksIHN0eWxlKHRoaXMsIG5hbWUpKTtcbiAgICByZXR1cm4gc3RyaW5nMCA9PT0gc3RyaW5nMSA/IG51bGxcbiAgICAgICAgOiBzdHJpbmcwID09PSBzdHJpbmcwMCAmJiBzdHJpbmcxID09PSBzdHJpbmcxMCA/IGludGVycG9sYXRlMFxuICAgICAgICA6IChzdHJpbmcxMCA9IHN0cmluZzEsIGludGVycG9sYXRlMCA9IGludGVycG9sYXRlKHN0cmluZzAwID0gc3RyaW5nMCwgdmFsdWUxKSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlTWF5YmVSZW1vdmUoaWQsIG5hbWUpIHtcbiAgdmFyIG9uMCwgb24xLCBsaXN0ZW5lcjAsIGtleSA9IFwic3R5bGUuXCIgKyBuYW1lLCBldmVudCA9IFwiZW5kLlwiICsga2V5LCByZW1vdmU7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpLFxuICAgICAgICBvbiA9IHNjaGVkdWxlLm9uLFxuICAgICAgICBsaXN0ZW5lciA9IHNjaGVkdWxlLnZhbHVlW2tleV0gPT0gbnVsbCA/IHJlbW92ZSB8fCAocmVtb3ZlID0gc3R5bGVSZW1vdmUobmFtZSkpIDogdW5kZWZpbmVkO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmIChvbiAhPT0gb24wIHx8IGxpc3RlbmVyMCAhPT0gbGlzdGVuZXIpIChvbjEgPSAob24wID0gb24pLmNvcHkoKSkub24oZXZlbnQsIGxpc3RlbmVyMCA9IGxpc3RlbmVyKTtcblxuICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgdmFyIGkgPSAobmFtZSArPSBcIlwiKSA9PT0gXCJ0cmFuc2Zvcm1cIiA/IGludGVycG9sYXRlVHJhbnNmb3JtIDogaW50ZXJwb2xhdGU7XG4gIHJldHVybiB2YWx1ZSA9PSBudWxsID8gdGhpc1xuICAgICAgLnN0eWxlVHdlZW4obmFtZSwgc3R5bGVOdWxsKG5hbWUsIGkpKVxuICAgICAgLm9uKFwiZW5kLnN0eWxlLlwiICsgbmFtZSwgc3R5bGVSZW1vdmUobmFtZSkpXG4gICAgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIiA/IHRoaXNcbiAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlRnVuY3Rpb24obmFtZSwgaSwgdHdlZW5WYWx1ZSh0aGlzLCBcInN0eWxlLlwiICsgbmFtZSwgdmFsdWUpKSlcbiAgICAgIC5lYWNoKHN0eWxlTWF5YmVSZW1vdmUodGhpcy5faWQsIG5hbWUpKVxuICAgIDogdGhpc1xuICAgICAgLnN0eWxlVHdlZW4obmFtZSwgc3R5bGVDb25zdGFudChuYW1lLCBpLCB2YWx1ZSksIHByaW9yaXR5KVxuICAgICAgLm9uKFwiZW5kLnN0eWxlLlwiICsgbmFtZSwgbnVsbCk7XG59XG4iLCJpbXBvcnQge3NlbGVjdGlvbn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHRyYW5zaXRpb25fYXR0ciBmcm9tIFwiLi9hdHRyLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9hdHRyVHdlZW4gZnJvbSBcIi4vYXR0clR3ZWVuLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9kZWxheSBmcm9tIFwiLi9kZWxheS5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZHVyYXRpb24gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2Vhc2UgZnJvbSBcIi4vZWFzZS5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZWFzZVZhcnlpbmcgZnJvbSBcIi4vZWFzZVZhcnlpbmcuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2ZpbHRlciBmcm9tIFwiLi9maWx0ZXIuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX21lcmdlIGZyb20gXCIuL21lcmdlLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9vbiBmcm9tIFwiLi9vbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fcmVtb3ZlIGZyb20gXCIuL3JlbW92ZS5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0IGZyb20gXCIuL3NlbGVjdC5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0QWxsIGZyb20gXCIuL3NlbGVjdEFsbC5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc2VsZWN0aW9uIGZyb20gXCIuL3NlbGVjdGlvbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fc3R5bGUgZnJvbSBcIi4vc3R5bGUuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3N0eWxlVHdlZW4gZnJvbSBcIi4vc3R5bGVUd2Vlbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fdGV4dCBmcm9tIFwiLi90ZXh0LmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90ZXh0VHdlZW4gZnJvbSBcIi4vdGV4dFR3ZWVuLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90cmFuc2l0aW9uIGZyb20gXCIuL3RyYW5zaXRpb24uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3R3ZWVuIGZyb20gXCIuL3R3ZWVuLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9lbmQgZnJvbSBcIi4vZW5kLmpzXCI7XG5cbnZhciBpZCA9IDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBUcmFuc2l0aW9uKGdyb3VwcywgcGFyZW50cywgbmFtZSwgaWQpIHtcbiAgdGhpcy5fZ3JvdXBzID0gZ3JvdXBzO1xuICB0aGlzLl9wYXJlbnRzID0gcGFyZW50cztcbiAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gIHRoaXMuX2lkID0gaWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zaXRpb24obmFtZSkge1xuICByZXR1cm4gc2VsZWN0aW9uKCkudHJhbnNpdGlvbihuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5ld0lkKCkge1xuICByZXR1cm4gKytpZDtcbn1cblxudmFyIHNlbGVjdGlvbl9wcm90b3R5cGUgPSBzZWxlY3Rpb24ucHJvdG90eXBlO1xuXG5UcmFuc2l0aW9uLnByb3RvdHlwZSA9IHRyYW5zaXRpb24ucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVHJhbnNpdGlvbixcbiAgc2VsZWN0OiB0cmFuc2l0aW9uX3NlbGVjdCxcbiAgc2VsZWN0QWxsOiB0cmFuc2l0aW9uX3NlbGVjdEFsbCxcbiAgc2VsZWN0Q2hpbGQ6IHNlbGVjdGlvbl9wcm90b3R5cGUuc2VsZWN0Q2hpbGQsXG4gIHNlbGVjdENoaWxkcmVuOiBzZWxlY3Rpb25fcHJvdG90eXBlLnNlbGVjdENoaWxkcmVuLFxuICBmaWx0ZXI6IHRyYW5zaXRpb25fZmlsdGVyLFxuICBtZXJnZTogdHJhbnNpdGlvbl9tZXJnZSxcbiAgc2VsZWN0aW9uOiB0cmFuc2l0aW9uX3NlbGVjdGlvbixcbiAgdHJhbnNpdGlvbjogdHJhbnNpdGlvbl90cmFuc2l0aW9uLFxuICBjYWxsOiBzZWxlY3Rpb25fcHJvdG90eXBlLmNhbGwsXG4gIG5vZGVzOiBzZWxlY3Rpb25fcHJvdG90eXBlLm5vZGVzLFxuICBub2RlOiBzZWxlY3Rpb25fcHJvdG90eXBlLm5vZGUsXG4gIHNpemU6IHNlbGVjdGlvbl9wcm90b3R5cGUuc2l6ZSxcbiAgZW1wdHk6IHNlbGVjdGlvbl9wcm90b3R5cGUuZW1wdHksXG4gIGVhY2g6IHNlbGVjdGlvbl9wcm90b3R5cGUuZWFjaCxcbiAgb246IHRyYW5zaXRpb25fb24sXG4gIGF0dHI6IHRyYW5zaXRpb25fYXR0cixcbiAgYXR0clR3ZWVuOiB0cmFuc2l0aW9uX2F0dHJUd2VlbixcbiAgc3R5bGU6IHRyYW5zaXRpb25fc3R5bGUsXG4gIHN0eWxlVHdlZW46IHRyYW5zaXRpb25fc3R5bGVUd2VlbixcbiAgdGV4dDogdHJhbnNpdGlvbl90ZXh0LFxuICB0ZXh0VHdlZW46IHRyYW5zaXRpb25fdGV4dFR3ZWVuLFxuICByZW1vdmU6IHRyYW5zaXRpb25fcmVtb3ZlLFxuICB0d2VlbjogdHJhbnNpdGlvbl90d2VlbixcbiAgZGVsYXk6IHRyYW5zaXRpb25fZGVsYXksXG4gIGR1cmF0aW9uOiB0cmFuc2l0aW9uX2R1cmF0aW9uLFxuICBlYXNlOiB0cmFuc2l0aW9uX2Vhc2UsXG4gIGVhc2VWYXJ5aW5nOiB0cmFuc2l0aW9uX2Vhc2VWYXJ5aW5nLFxuICBlbmQ6IHRyYW5zaXRpb25fZW5kLFxuICBbU3ltYm9sLml0ZXJhdG9yXTogc2VsZWN0aW9uX3Byb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdXG59O1xuIiwiaW1wb3J0IHtzZWxlY3Rvcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlLCB7Z2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLl9uYW1lLFxuICAgICAgaWQgPSB0aGlzLl9pZDtcblxuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvcihzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIHN1Ym5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKHN1Ym5vZGUgPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpKSB7XG4gICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgIHN1Ymdyb3VwW2ldID0gc3Vibm9kZTtcbiAgICAgICAgc2NoZWR1bGUoc3ViZ3JvdXBbaV0sIG5hbWUsIGlkLCBpLCBzdWJncm91cCwgZ2V0KG5vZGUsIGlkKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cywgbmFtZSwgaWQpO1xufVxuIiwiaW1wb3J0IHtzZWxlY3RvckFsbH0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlLCB7Z2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3QpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLl9uYW1lLFxuICAgICAgaWQgPSB0aGlzLl9pZDtcblxuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvckFsbChzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IFtdLCBwYXJlbnRzID0gW10sIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGZvciAodmFyIGNoaWxkcmVuID0gc2VsZWN0LmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApLCBjaGlsZCwgaW5oZXJpdCA9IGdldChub2RlLCBpZCksIGsgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBrIDwgbDsgKytrKSB7XG4gICAgICAgICAgaWYgKGNoaWxkID0gY2hpbGRyZW5ba10pIHtcbiAgICAgICAgICAgIHNjaGVkdWxlKGNoaWxkLCBuYW1lLCBpZCwgaywgY2hpbGRyZW4sIGluaGVyaXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdWJncm91cHMucHVzaChjaGlsZHJlbik7XG4gICAgICAgIHBhcmVudHMucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCBwYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLCJpbXBvcnQge21hdGNoZXJ9IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgaWYgKHR5cGVvZiBtYXRjaCAhPT0gXCJmdW5jdGlvblwiKSBtYXRjaCA9IG1hdGNoZXIobWF0Y2gpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBbXSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiBtYXRjaC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkge1xuICAgICAgICBzdWJncm91cC5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMsIHRoaXMuX25hbWUsIHRoaXMuX2lkKTtcbn1cbiIsImltcG9ydCB7VHJhbnNpdGlvbn0gZnJvbSBcIi4vaW5kZXguanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odHJhbnNpdGlvbikge1xuICBpZiAodHJhbnNpdGlvbi5faWQgIT09IHRoaXMuX2lkKSB0aHJvdyBuZXcgRXJyb3I7XG5cbiAgZm9yICh2YXIgZ3JvdXBzMCA9IHRoaXMuX2dyb3VwcywgZ3JvdXBzMSA9IHRyYW5zaXRpb24uX2dyb3VwcywgbTAgPSBncm91cHMwLmxlbmd0aCwgbTEgPSBncm91cHMxLmxlbmd0aCwgbSA9IE1hdGgubWluKG0wLCBtMSksIG1lcmdlcyA9IG5ldyBBcnJheShtMCksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAwID0gZ3JvdXBzMFtqXSwgZ3JvdXAxID0gZ3JvdXBzMVtqXSwgbiA9IGdyb3VwMC5sZW5ndGgsIG1lcmdlID0gbWVyZ2VzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cDBbaV0gfHwgZ3JvdXAxW2ldKSB7XG4gICAgICAgIG1lcmdlW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKDsgaiA8IG0wOyArK2opIHtcbiAgICBtZXJnZXNbal0gPSBncm91cHMwW2pdO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKG1lcmdlcywgdGhpcy5fcGFyZW50cywgdGhpcy5fbmFtZSwgdGhpcy5faWQpO1xufVxuIiwiaW1wb3J0IHtUcmFuc2l0aW9uLCBuZXdJZH0gZnJvbSBcIi4vaW5kZXguanNcIjtcbmltcG9ydCBzY2hlZHVsZSwge2dldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHZhciBuYW1lID0gdGhpcy5fbmFtZSxcbiAgICAgIGlkMCA9IHRoaXMuX2lkLFxuICAgICAgaWQxID0gbmV3SWQoKTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICB2YXIgaW5oZXJpdCA9IGdldChub2RlLCBpZDApO1xuICAgICAgICBzY2hlZHVsZShub2RlLCBuYW1lLCBpZDEsIGksIGdyb3VwLCB7XG4gICAgICAgICAgdGltZTogaW5oZXJpdC50aW1lICsgaW5oZXJpdC5kZWxheSArIGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZGVsYXk6IDAsXG4gICAgICAgICAgZHVyYXRpb246IGluaGVyaXQuZHVyYXRpb24sXG4gICAgICAgICAgZWFzZTogaW5oZXJpdC5lYXNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkMSk7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0LCBpbml0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBzdGFydChuYW1lKSB7XG4gIHJldHVybiAobmFtZSArIFwiXCIpLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykuZXZlcnkoZnVuY3Rpb24odCkge1xuICAgIHZhciBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSB0ID0gdC5zbGljZSgwLCBpKTtcbiAgICByZXR1cm4gIXQgfHwgdCA9PT0gXCJzdGFydFwiO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gb25GdW5jdGlvbihpZCwgbmFtZSwgbGlzdGVuZXIpIHtcbiAgdmFyIG9uMCwgb24xLCBzaXQgPSBzdGFydChuYW1lKSA/IGluaXQgOiBzZXQ7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzaXQodGhpcywgaWQpLFxuICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgLy8gSWYgdGhpcyBub2RlIHNoYXJlZCBhIGRpc3BhdGNoIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIGRpc3BhdGNoIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmIChvbiAhPT0gb24wKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKG5hbWUsIGxpc3RlbmVyKTtcblxuICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCBsaXN0ZW5lcikge1xuICB2YXIgaWQgPSB0aGlzLl9pZDtcblxuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDJcbiAgICAgID8gZ2V0KHRoaXMubm9kZSgpLCBpZCkub24ub24obmFtZSlcbiAgICAgIDogdGhpcy5lYWNoKG9uRnVuY3Rpb24oaWQsIG5hbWUsIGxpc3RlbmVyKSk7XG59XG4iLCJmdW5jdGlvbiBzdHlsZUludGVycG9sYXRlKG5hbWUsIGksIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuYW1lLCBpLmNhbGwodGhpcywgdCksIHByaW9yaXR5KTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gc3R5bGVUd2VlbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgdmFyIHQsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0ID0gKGkwID0gaSkgJiYgc3R5bGVJbnRlcnBvbGF0ZShuYW1lLCBpLCBwcmlvcml0eSk7XG4gICAgcmV0dXJuIHQ7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciBrZXkgPSBcInN0eWxlLlwiICsgKG5hbWUgKz0gXCJcIik7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikgcmV0dXJuIChrZXkgPSB0aGlzLnR3ZWVuKGtleSkpICYmIGtleS5fdmFsdWU7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gdGhpcy50d2VlbihrZXksIG51bGwpO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBzdHlsZVR3ZWVuKG5hbWUsIHZhbHVlLCBwcmlvcml0eSA9PSBudWxsID8gXCJcIiA6IHByaW9yaXR5KSk7XG59XG4iLCJpbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuLmpzXCI7XG5cbmZ1bmN0aW9uIHRleHRDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2YWx1ZTEgPSB2YWx1ZSh0aGlzKTtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWUxID09IG51bGwgPyBcIlwiIDogdmFsdWUxO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gdGhpcy50d2VlbihcInRleHRcIiwgdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gdGV4dEZ1bmN0aW9uKHR3ZWVuVmFsdWUodGhpcywgXCJ0ZXh0XCIsIHZhbHVlKSlcbiAgICAgIDogdGV4dENvbnN0YW50KHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiKSk7XG59XG4iLCJmdW5jdGlvbiB0ZXh0SW50ZXJwb2xhdGUoaSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSBpLmNhbGwodGhpcywgdCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRUd2Vlbih2YWx1ZSkge1xuICB2YXIgdDAsIGkwO1xuICBmdW5jdGlvbiB0d2VlbigpIHtcbiAgICB2YXIgaSA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKGkgIT09IGkwKSB0MCA9IChpMCA9IGkpICYmIHRleHRJbnRlcnBvbGF0ZShpKTtcbiAgICByZXR1cm4gdDA7XG4gIH1cbiAgdHdlZW4uX3ZhbHVlID0gdmFsdWU7XG4gIHJldHVybiB0d2Vlbjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIGtleSA9IFwidGV4dFwiO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDEpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgdGV4dFR3ZWVuKHZhbHVlKSk7XG59XG4iLCJmdW5jdGlvbiByZW1vdmVGdW5jdGlvbihpZCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgICBmb3IgKHZhciBpIGluIHRoaXMuX190cmFuc2l0aW9uKSBpZiAoK2kgIT09IGlkKSByZXR1cm47XG4gICAgaWYgKHBhcmVudCkgcGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMub24oXCJlbmQucmVtb3ZlXCIsIHJlbW92ZUZ1bmN0aW9uKHRoaXMuX2lkKSk7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBlYXNlQ29uc3RhbnQoaWQsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgc2V0KHRoaXMsIGlkKS5lYXNlID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaChlYXNlQ29uc3RhbnQoaWQsIHZhbHVlKSlcbiAgICAgIDogZ2V0KHRoaXMubm9kZSgpLCBpZCkuZWFzZTtcbn1cbiIsImltcG9ydCB7c2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBlYXNlVmFyeWluZyhpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodHlwZW9mIHYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICAgIHNldCh0aGlzLCBpZCkuZWFzZSA9IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gdGhpcy5lYWNoKGVhc2VWYXJ5aW5nKHRoaXMuX2lkLCB2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgb24wLCBvbjEsIHRoYXQgPSB0aGlzLCBpZCA9IHRoYXQuX2lkLCBzaXplID0gdGhhdC5zaXplKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgY2FuY2VsID0ge3ZhbHVlOiByZWplY3R9LFxuICAgICAgICBlbmQgPSB7dmFsdWU6IGZ1bmN0aW9uKCkgeyBpZiAoLS1zaXplID09PSAwKSByZXNvbHZlKCk7IH19O1xuXG4gICAgdGhhdC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIGEgZGlzcGF0Y2ggd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCBkaXNwYXRjaCBhbmQgd2XigJlyZSBkb25lIVxuICAgICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgICAgaWYgKG9uICE9PSBvbjApIHtcbiAgICAgICAgb24xID0gKG9uMCA9IG9uKS5jb3B5KCk7XG4gICAgICAgIG9uMS5fLmNhbmNlbC5wdXNoKGNhbmNlbCk7XG4gICAgICAgIG9uMS5fLmludGVycnVwdC5wdXNoKGNhbmNlbCk7XG4gICAgICAgIG9uMS5fLmVuZC5wdXNoKGVuZCk7XG4gICAgICB9XG5cbiAgICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHNlbGVjdGlvbiB3YXMgZW1wdHksIHJlc29sdmUgZW5kIGltbWVkaWF0ZWx5XG4gICAgaWYgKHNpemUgPT09IDApIHJlc29sdmUoKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQge1RyYW5zaXRpb24sIG5ld0lkfSBmcm9tIFwiLi4vdHJhbnNpdGlvbi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlIGZyb20gXCIuLi90cmFuc2l0aW9uL3NjaGVkdWxlLmpzXCI7XG5pbXBvcnQge2Vhc2VDdWJpY0luT3V0fSBmcm9tIFwiZDMtZWFzZVwiO1xuaW1wb3J0IHtub3d9IGZyb20gXCJkMy10aW1lclwiO1xuXG52YXIgZGVmYXVsdFRpbWluZyA9IHtcbiAgdGltZTogbnVsbCwgLy8gU2V0IG9uIHVzZS5cbiAgZGVsYXk6IDAsXG4gIGR1cmF0aW9uOiAyNTAsXG4gIGVhc2U6IGVhc2VDdWJpY0luT3V0XG59O1xuXG5mdW5jdGlvbiBpbmhlcml0KG5vZGUsIGlkKSB7XG4gIHZhciB0aW1pbmc7XG4gIHdoaWxlICghKHRpbWluZyA9IG5vZGUuX190cmFuc2l0aW9uKSB8fCAhKHRpbWluZyA9IHRpbWluZ1tpZF0pKSB7XG4gICAgaWYgKCEobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2lkfSBub3QgZm91bmRgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRpbWluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgaWQsXG4gICAgICB0aW1pbmc7XG5cbiAgaWYgKG5hbWUgaW5zdGFuY2VvZiBUcmFuc2l0aW9uKSB7XG4gICAgaWQgPSBuYW1lLl9pZCwgbmFtZSA9IG5hbWUuX25hbWU7XG4gIH0gZWxzZSB7XG4gICAgaWQgPSBuZXdJZCgpLCAodGltaW5nID0gZGVmYXVsdFRpbWluZykudGltZSA9IG5vdygpLCBuYW1lID0gbmFtZSA9PSBudWxsID8gbnVsbCA6IG5hbWUgKyBcIlwiO1xuICB9XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc2NoZWR1bGUobm9kZSwgbmFtZSwgaWQsIGksIGdyb3VwLCB0aW1pbmcgfHwgaW5oZXJpdChub2RlLCBpZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBjdWJpY0luKHQpIHtcbiAgcmV0dXJuIHQgKiB0ICogdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljT3V0KHQpIHtcbiAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljSW5PdXQodCkge1xuICByZXR1cm4gKCh0ICo9IDIpIDw9IDEgPyB0ICogdCAqIHQgOiAodCAtPSAyKSAqIHQgKiB0ICsgMikgLyAyO1xufVxuIiwiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCBzZWxlY3Rpb25faW50ZXJydXB0IGZyb20gXCIuL2ludGVycnVwdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl90cmFuc2l0aW9uIGZyb20gXCIuL3RyYW5zaXRpb24uanNcIjtcblxuc2VsZWN0aW9uLnByb3RvdHlwZS5pbnRlcnJ1cHQgPSBzZWxlY3Rpb25faW50ZXJydXB0O1xuc2VsZWN0aW9uLnByb3RvdHlwZS50cmFuc2l0aW9uID0gc2VsZWN0aW9uX3RyYW5zaXRpb247XG4iLCJpbXBvcnQgaW50ZXJydXB0IGZyb20gXCIuLi9pbnRlcnJ1cHQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIGludGVycnVwdCh0aGlzLCBuYW1lKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQge1NUQVJUSU5HLCBFTkRJTkcsIEVOREVEfSBmcm9tIFwiLi90cmFuc2l0aW9uL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uLFxuICAgICAgc2NoZWR1bGUsXG4gICAgICBhY3RpdmUsXG4gICAgICBlbXB0eSA9IHRydWUsXG4gICAgICBpO1xuXG4gIGlmICghc2NoZWR1bGVzKSByZXR1cm47XG5cbiAgbmFtZSA9IG5hbWUgPT0gbnVsbCA/IG51bGwgOiBuYW1lICsgXCJcIjtcblxuICBmb3IgKGkgaW4gc2NoZWR1bGVzKSB7XG4gICAgaWYgKChzY2hlZHVsZSA9IHNjaGVkdWxlc1tpXSkubmFtZSAhPT0gbmFtZSkgeyBlbXB0eSA9IGZhbHNlOyBjb250aW51ZTsgfVxuICAgIGFjdGl2ZSA9IHNjaGVkdWxlLnN0YXRlID4gU1RBUlRJTkcgJiYgc2NoZWR1bGUuc3RhdGUgPCBFTkRJTkc7XG4gICAgc2NoZWR1bGUuc3RhdGUgPSBFTkRFRDtcbiAgICBzY2hlZHVsZS50aW1lci5zdG9wKCk7XG4gICAgc2NoZWR1bGUub24uY2FsbChhY3RpdmUgPyBcImludGVycnVwdFwiIDogXCJjYW5jZWxcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2NoZWR1bGUuaW5kZXgsIHNjaGVkdWxlLmdyb3VwKTtcbiAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICB9XG5cbiAgaWYgKGVtcHR5KSBkZWxldGUgbm9kZS5fX3RyYW5zaXRpb247XG59XG4iLCJjb25zdCBwaSA9IE1hdGguUEksXG4gICAgdGF1ID0gMiAqIHBpLFxuICAgIGVwc2lsb24gPSAxZS02LFxuICAgIHRhdUVwc2lsb24gPSB0YXUgLSBlcHNpbG9uO1xuXG5mdW5jdGlvbiBhcHBlbmQoc3RyaW5ncykge1xuICB0aGlzLl8gKz0gc3RyaW5nc1swXTtcbiAgZm9yIChsZXQgaSA9IDEsIG4gPSBzdHJpbmdzLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgIHRoaXMuXyArPSBhcmd1bWVudHNbaV0gKyBzdHJpbmdzW2ldO1xuICB9XG59XG5cbmZ1bmN0aW9uIGFwcGVuZFJvdW5kKGRpZ2l0cykge1xuICBsZXQgZCA9IE1hdGguZmxvb3IoZGlnaXRzKTtcbiAgaWYgKCEoZCA+PSAwKSkgdGhyb3cgbmV3IEVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHtkaWdpdHN9YCk7XG4gIGlmIChkID4gMTUpIHJldHVybiBhcHBlbmQ7XG4gIGNvbnN0IGsgPSAxMCAqKiBkO1xuICByZXR1cm4gZnVuY3Rpb24oc3RyaW5ncykge1xuICAgIHRoaXMuXyArPSBzdHJpbmdzWzBdO1xuICAgIGZvciAobGV0IGkgPSAxLCBuID0gc3RyaW5ncy5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIHRoaXMuXyArPSBNYXRoLnJvdW5kKGFyZ3VtZW50c1tpXSAqIGspIC8gayArIHN0cmluZ3NbaV07XG4gICAgfVxuICB9O1xufVxuXG5leHBvcnQgY2xhc3MgUGF0aCB7XG4gIGNvbnN0cnVjdG9yKGRpZ2l0cykge1xuICAgIHRoaXMuX3gwID0gdGhpcy5feTAgPSAvLyBzdGFydCBvZiBjdXJyZW50IHN1YnBhdGhcbiAgICB0aGlzLl94MSA9IHRoaXMuX3kxID0gbnVsbDsgLy8gZW5kIG9mIGN1cnJlbnQgc3VicGF0aFxuICAgIHRoaXMuXyA9IFwiXCI7XG4gICAgdGhpcy5fYXBwZW5kID0gZGlnaXRzID09IG51bGwgPyBhcHBlbmQgOiBhcHBlbmRSb3VuZChkaWdpdHMpO1xuICB9XG4gIG1vdmVUbyh4LCB5KSB7XG4gICAgdGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gwID0gdGhpcy5feDEgPSAreH0sJHt0aGlzLl95MCA9IHRoaXMuX3kxID0gK3l9YDtcbiAgfVxuICBjbG9zZVBhdGgoKSB7XG4gICAgaWYgKHRoaXMuX3gxICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl94MSA9IHRoaXMuX3gwLCB0aGlzLl95MSA9IHRoaXMuX3kwO1xuICAgICAgdGhpcy5fYXBwZW5kYFpgO1xuICAgIH1cbiAgfVxuICBsaW5lVG8oeCwgeSkge1xuICAgIHRoaXMuX2FwcGVuZGBMJHt0aGlzLl94MSA9ICt4fSwke3RoaXMuX3kxID0gK3l9YDtcbiAgfVxuICBxdWFkcmF0aWNDdXJ2ZVRvKHgxLCB5MSwgeCwgeSkge1xuICAgIHRoaXMuX2FwcGVuZGBRJHsreDF9LCR7K3kxfSwke3RoaXMuX3gxID0gK3h9LCR7dGhpcy5feTEgPSAreX1gO1xuICB9XG4gIGJlemllckN1cnZlVG8oeDEsIHkxLCB4MiwgeTIsIHgsIHkpIHtcbiAgICB0aGlzLl9hcHBlbmRgQyR7K3gxfSwkeyt5MX0sJHsreDJ9LCR7K3kyfSwke3RoaXMuX3gxID0gK3h9LCR7dGhpcy5feTEgPSAreX1gO1xuICB9XG4gIGFyY1RvKHgxLCB5MSwgeDIsIHkyLCByKSB7XG4gICAgeDEgPSAreDEsIHkxID0gK3kxLCB4MiA9ICt4MiwgeTIgPSAreTIsIHIgPSArcjtcblxuICAgIC8vIElzIHRoZSByYWRpdXMgbmVnYXRpdmU/IEVycm9yLlxuICAgIGlmIChyIDwgMCkgdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7cn1gKTtcblxuICAgIGxldCB4MCA9IHRoaXMuX3gxLFxuICAgICAgICB5MCA9IHRoaXMuX3kxLFxuICAgICAgICB4MjEgPSB4MiAtIHgxLFxuICAgICAgICB5MjEgPSB5MiAtIHkxLFxuICAgICAgICB4MDEgPSB4MCAtIHgxLFxuICAgICAgICB5MDEgPSB5MCAtIHkxLFxuICAgICAgICBsMDFfMiA9IHgwMSAqIHgwMSArIHkwMSAqIHkwMTtcblxuICAgIC8vIElzIHRoaXMgcGF0aCBlbXB0eT8gTW92ZSB0byAoeDEseTEpLlxuICAgIGlmICh0aGlzLl94MSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5fYXBwZW5kYE0ke3RoaXMuX3gxID0geDF9LCR7dGhpcy5feTEgPSB5MX1gO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDEseTEpIGNvaW5jaWRlbnQgd2l0aCAoeDAseTApPyBEbyBub3RoaW5nLlxuICAgIGVsc2UgaWYgKCEobDAxXzIgPiBlcHNpbG9uKSk7XG5cbiAgICAvLyBPciwgYXJlICh4MCx5MCksICh4MSx5MSkgYW5kICh4Mix5MikgY29sbGluZWFyP1xuICAgIC8vIEVxdWl2YWxlbnRseSwgaXMgKHgxLHkxKSBjb2luY2lkZW50IHdpdGggKHgyLHkyKT9cbiAgICAvLyBPciwgaXMgdGhlIHJhZGl1cyB6ZXJvPyBMaW5lIHRvICh4MSx5MSkuXG4gICAgZWxzZSBpZiAoIShNYXRoLmFicyh5MDEgKiB4MjEgLSB5MjEgKiB4MDEpID4gZXBzaWxvbikgfHwgIXIpIHtcbiAgICAgIHRoaXMuX2FwcGVuZGBMJHt0aGlzLl94MSA9IHgxfSwke3RoaXMuX3kxID0geTF9YDtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIGRyYXcgYW4gYXJjIVxuICAgIGVsc2Uge1xuICAgICAgbGV0IHgyMCA9IHgyIC0geDAsXG4gICAgICAgICAgeTIwID0geTIgLSB5MCxcbiAgICAgICAgICBsMjFfMiA9IHgyMSAqIHgyMSArIHkyMSAqIHkyMSxcbiAgICAgICAgICBsMjBfMiA9IHgyMCAqIHgyMCArIHkyMCAqIHkyMCxcbiAgICAgICAgICBsMjEgPSBNYXRoLnNxcnQobDIxXzIpLFxuICAgICAgICAgIGwwMSA9IE1hdGguc3FydChsMDFfMiksXG4gICAgICAgICAgbCA9IHIgKiBNYXRoLnRhbigocGkgLSBNYXRoLmFjb3MoKGwyMV8yICsgbDAxXzIgLSBsMjBfMikgLyAoMiAqIGwyMSAqIGwwMSkpKSAvIDIpLFxuICAgICAgICAgIHQwMSA9IGwgLyBsMDEsXG4gICAgICAgICAgdDIxID0gbCAvIGwyMTtcblxuICAgICAgLy8gSWYgdGhlIHN0YXJ0IHRhbmdlbnQgaXMgbm90IGNvaW5jaWRlbnQgd2l0aCAoeDAseTApLCBsaW5lIHRvLlxuICAgICAgaWYgKE1hdGguYWJzKHQwMSAtIDEpID4gZXBzaWxvbikge1xuICAgICAgICB0aGlzLl9hcHBlbmRgTCR7eDEgKyB0MDEgKiB4MDF9LCR7eTEgKyB0MDEgKiB5MDF9YDtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fYXBwZW5kYEEke3J9LCR7cn0sMCwwLCR7Kyh5MDEgKiB4MjAgPiB4MDEgKiB5MjApfSwke3RoaXMuX3gxID0geDEgKyB0MjEgKiB4MjF9LCR7dGhpcy5feTEgPSB5MSArIHQyMSAqIHkyMX1gO1xuICAgIH1cbiAgfVxuICBhcmMoeCwgeSwgciwgYTAsIGExLCBjY3cpIHtcbiAgICB4ID0gK3gsIHkgPSAreSwgciA9ICtyLCBjY3cgPSAhIWNjdztcblxuICAgIC8vIElzIHRoZSByYWRpdXMgbmVnYXRpdmU/IEVycm9yLlxuICAgIGlmIChyIDwgMCkgdGhyb3cgbmV3IEVycm9yKGBuZWdhdGl2ZSByYWRpdXM6ICR7cn1gKTtcblxuICAgIGxldCBkeCA9IHIgKiBNYXRoLmNvcyhhMCksXG4gICAgICAgIGR5ID0gciAqIE1hdGguc2luKGEwKSxcbiAgICAgICAgeDAgPSB4ICsgZHgsXG4gICAgICAgIHkwID0geSArIGR5LFxuICAgICAgICBjdyA9IDEgXiBjY3csXG4gICAgICAgIGRhID0gY2N3ID8gYTAgLSBhMSA6IGExIC0gYTA7XG5cbiAgICAvLyBJcyB0aGlzIHBhdGggZW1wdHk/IE1vdmUgdG8gKHgwLHkwKS5cbiAgICBpZiAodGhpcy5feDEgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuX2FwcGVuZGBNJHt4MH0sJHt5MH1gO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDAseTApIG5vdCBjb2luY2lkZW50IHdpdGggdGhlIHByZXZpb3VzIHBvaW50PyBMaW5lIHRvICh4MCx5MCkuXG4gICAgZWxzZSBpZiAoTWF0aC5hYnModGhpcy5feDEgLSB4MCkgPiBlcHNpbG9uIHx8IE1hdGguYWJzKHRoaXMuX3kxIC0geTApID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fYXBwZW5kYEwke3gwfSwke3kwfWA7XG4gICAgfVxuXG4gICAgLy8gSXMgdGhpcyBhcmMgZW1wdHk/IFdl4oCZcmUgZG9uZS5cbiAgICBpZiAoIXIpIHJldHVybjtcblxuICAgIC8vIERvZXMgdGhlIGFuZ2xlIGdvIHRoZSB3cm9uZyB3YXk/IEZsaXAgdGhlIGRpcmVjdGlvbi5cbiAgICBpZiAoZGEgPCAwKSBkYSA9IGRhICUgdGF1ICsgdGF1O1xuXG4gICAgLy8gSXMgdGhpcyBhIGNvbXBsZXRlIGNpcmNsZT8gRHJhdyB0d28gYXJjcyB0byBjb21wbGV0ZSB0aGUgY2lyY2xlLlxuICAgIGlmIChkYSA+IHRhdUVwc2lsb24pIHtcbiAgICAgIHRoaXMuX2FwcGVuZGBBJHtyfSwke3J9LDAsMSwke2N3fSwke3ggLSBkeH0sJHt5IC0gZHl9QSR7cn0sJHtyfSwwLDEsJHtjd30sJHt0aGlzLl94MSA9IHgwfSwke3RoaXMuX3kxID0geTB9YDtcbiAgICB9XG5cbiAgICAvLyBJcyB0aGlzIGFyYyBub24tZW1wdHk/IERyYXcgYW4gYXJjIVxuICAgIGVsc2UgaWYgKGRhID4gZXBzaWxvbikge1xuICAgICAgdGhpcy5fYXBwZW5kYEEke3J9LCR7cn0sMCwkeysoZGEgPj0gcGkpfSwke2N3fSwke3RoaXMuX3gxID0geCArIHIgKiBNYXRoLmNvcyhhMSl9LCR7dGhpcy5feTEgPSB5ICsgciAqIE1hdGguc2luKGExKX1gO1xuICAgIH1cbiAgfVxuICByZWN0KHgsIHksIHcsIGgpIHtcbiAgICB0aGlzLl9hcHBlbmRgTSR7dGhpcy5feDAgPSB0aGlzLl94MSA9ICt4fSwke3RoaXMuX3kwID0gdGhpcy5feTEgPSAreX1oJHt3ID0gK3d9diR7K2h9aCR7LXd9WmA7XG4gIH1cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuXztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0aCgpIHtcbiAgcmV0dXJuIG5ldyBQYXRoO1xufVxuXG4vLyBBbGxvdyBpbnN0YW5jZW9mIGQzLnBhdGhcbnBhdGgucHJvdG90eXBlID0gUGF0aC5wcm90b3R5cGU7XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRoUm91bmQoZGlnaXRzID0gMykge1xuICByZXR1cm4gbmV3IFBhdGgoK2RpZ2l0cyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBNYXRoLmFicyh4ID0gTWF0aC5yb3VuZCh4KSkgPj0gMWUyMVxuICAgICAgPyB4LnRvTG9jYWxlU3RyaW5nKFwiZW5cIikucmVwbGFjZSgvLC9nLCBcIlwiKVxuICAgICAgOiB4LnRvU3RyaW5nKDEwKTtcbn1cblxuLy8gQ29tcHV0ZXMgdGhlIGRlY2ltYWwgY29lZmZpY2llbnQgYW5kIGV4cG9uZW50IG9mIHRoZSBzcGVjaWZpZWQgbnVtYmVyIHggd2l0aFxuLy8gc2lnbmlmaWNhbnQgZGlnaXRzIHAsIHdoZXJlIHggaXMgcG9zaXRpdmUgYW5kIHAgaXMgaW4gWzEsIDIxXSBvciB1bmRlZmluZWQuXG4vLyBGb3IgZXhhbXBsZSwgZm9ybWF0RGVjaW1hbFBhcnRzKDEuMjMpIHJldHVybnMgW1wiMTIzXCIsIDBdLlxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBwKSB7XG4gIGlmICgoaSA9ICh4ID0gcCA/IHgudG9FeHBvbmVudGlhbChwIC0gMSkgOiB4LnRvRXhwb25lbnRpYWwoKSkuaW5kZXhPZihcImVcIikpIDwgMCkgcmV0dXJuIG51bGw7IC8vIE5hTiwgwrFJbmZpbml0eVxuICB2YXIgaSwgY29lZmZpY2llbnQgPSB4LnNsaWNlKDAsIGkpO1xuXG4gIC8vIFRoZSBzdHJpbmcgcmV0dXJuZWQgYnkgdG9FeHBvbmVudGlhbCBlaXRoZXIgaGFzIHRoZSBmb3JtIFxcZFxcLlxcZCtlWy0rXVxcZCtcbiAgLy8gKGUuZy4sIDEuMmUrMykgb3IgdGhlIGZvcm0gXFxkZVstK11cXGQrIChlLmcuLCAxZSszKS5cbiAgcmV0dXJuIFtcbiAgICBjb2VmZmljaWVudC5sZW5ndGggPiAxID8gY29lZmZpY2llbnRbMF0gKyBjb2VmZmljaWVudC5zbGljZSgyKSA6IGNvZWZmaWNpZW50LFxuICAgICt4LnNsaWNlKGkgKyAxKVxuICBdO1xufVxuIiwiaW1wb3J0IHtmb3JtYXREZWNpbWFsUGFydHN9IGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geCA9IGZvcm1hdERlY2ltYWxQYXJ0cyhNYXRoLmFicyh4KSksIHggPyB4WzFdIDogTmFOO1xufVxuIiwiLy8gW1tmaWxsXWFsaWduXVtzaWduXVtzeW1ib2xdWzBdW3dpZHRoXVssXVsucHJlY2lzaW9uXVt+XVt0eXBlXVxudmFyIHJlID0gL14oPzooLik/KFs8Pj1eXSkpPyhbK1xcLSggXSk/KFskI10pPygwKT8oXFxkKyk/KCwpPyhcXC5cXGQrKT8ofik/KFthLXolXSk/JC9pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKSB7XG4gIGlmICghKG1hdGNoID0gcmUuZXhlYyhzcGVjaWZpZXIpKSkgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBmb3JtYXQ6IFwiICsgc3BlY2lmaWVyKTtcbiAgdmFyIG1hdGNoO1xuICByZXR1cm4gbmV3IEZvcm1hdFNwZWNpZmllcih7XG4gICAgZmlsbDogbWF0Y2hbMV0sXG4gICAgYWxpZ246IG1hdGNoWzJdLFxuICAgIHNpZ246IG1hdGNoWzNdLFxuICAgIHN5bWJvbDogbWF0Y2hbNF0sXG4gICAgemVybzogbWF0Y2hbNV0sXG4gICAgd2lkdGg6IG1hdGNoWzZdLFxuICAgIGNvbW1hOiBtYXRjaFs3XSxcbiAgICBwcmVjaXNpb246IG1hdGNoWzhdICYmIG1hdGNoWzhdLnNsaWNlKDEpLFxuICAgIHRyaW06IG1hdGNoWzldLFxuICAgIHR5cGU6IG1hdGNoWzEwXVxuICB9KTtcbn1cblxuZm9ybWF0U3BlY2lmaWVyLnByb3RvdHlwZSA9IEZvcm1hdFNwZWNpZmllci5wcm90b3R5cGU7IC8vIGluc3RhbmNlb2ZcblxuZXhwb3J0IGZ1bmN0aW9uIEZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpIHtcbiAgdGhpcy5maWxsID0gc3BlY2lmaWVyLmZpbGwgPT09IHVuZGVmaW5lZCA/IFwiIFwiIDogc3BlY2lmaWVyLmZpbGwgKyBcIlwiO1xuICB0aGlzLmFsaWduID0gc3BlY2lmaWVyLmFsaWduID09PSB1bmRlZmluZWQgPyBcIj5cIiA6IHNwZWNpZmllci5hbGlnbiArIFwiXCI7XG4gIHRoaXMuc2lnbiA9IHNwZWNpZmllci5zaWduID09PSB1bmRlZmluZWQgPyBcIi1cIiA6IHNwZWNpZmllci5zaWduICsgXCJcIjtcbiAgdGhpcy5zeW1ib2wgPSBzcGVjaWZpZXIuc3ltYm9sID09PSB1bmRlZmluZWQgPyBcIlwiIDogc3BlY2lmaWVyLnN5bWJvbCArIFwiXCI7XG4gIHRoaXMuemVybyA9ICEhc3BlY2lmaWVyLnplcm87XG4gIHRoaXMud2lkdGggPSBzcGVjaWZpZXIud2lkdGggPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICtzcGVjaWZpZXIud2lkdGg7XG4gIHRoaXMuY29tbWEgPSAhIXNwZWNpZmllci5jb21tYTtcbiAgdGhpcy5wcmVjaXNpb24gPSBzcGVjaWZpZXIucHJlY2lzaW9uID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiArc3BlY2lmaWVyLnByZWNpc2lvbjtcbiAgdGhpcy50cmltID0gISFzcGVjaWZpZXIudHJpbTtcbiAgdGhpcy50eXBlID0gc3BlY2lmaWVyLnR5cGUgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBzcGVjaWZpZXIudHlwZSArIFwiXCI7XG59XG5cbkZvcm1hdFNwZWNpZmllci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZmlsbFxuICAgICAgKyB0aGlzLmFsaWduXG4gICAgICArIHRoaXMuc2lnblxuICAgICAgKyB0aGlzLnN5bWJvbFxuICAgICAgKyAodGhpcy56ZXJvID8gXCIwXCIgOiBcIlwiKVxuICAgICAgKyAodGhpcy53aWR0aCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IE1hdGgubWF4KDEsIHRoaXMud2lkdGggfCAwKSlcbiAgICAgICsgKHRoaXMuY29tbWEgPyBcIixcIiA6IFwiXCIpXG4gICAgICArICh0aGlzLnByZWNpc2lvbiA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IFwiLlwiICsgTWF0aC5tYXgoMCwgdGhpcy5wcmVjaXNpb24gfCAwKSlcbiAgICAgICsgKHRoaXMudHJpbSA/IFwiflwiIDogXCJcIilcbiAgICAgICsgdGhpcy50eXBlO1xufTtcbiIsImltcG9ydCB7Zm9ybWF0RGVjaW1hbFBhcnRzfSBmcm9tIFwiLi9mb3JtYXREZWNpbWFsLmpzXCI7XG5cbmV4cG9ydCB2YXIgcHJlZml4RXhwb25lbnQ7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHApIHtcbiAgdmFyIGQgPSBmb3JtYXREZWNpbWFsUGFydHMoeCwgcCk7XG4gIGlmICghZCkgcmV0dXJuIHggKyBcIlwiO1xuICB2YXIgY29lZmZpY2llbnQgPSBkWzBdLFxuICAgICAgZXhwb25lbnQgPSBkWzFdLFxuICAgICAgaSA9IGV4cG9uZW50IC0gKHByZWZpeEV4cG9uZW50ID0gTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQgLyAzKSkpICogMykgKyAxLFxuICAgICAgbiA9IGNvZWZmaWNpZW50Lmxlbmd0aDtcbiAgcmV0dXJuIGkgPT09IG4gPyBjb2VmZmljaWVudFxuICAgICAgOiBpID4gbiA/IGNvZWZmaWNpZW50ICsgbmV3IEFycmF5KGkgLSBuICsgMSkuam9pbihcIjBcIilcbiAgICAgIDogaSA+IDAgPyBjb2VmZmljaWVudC5zbGljZSgwLCBpKSArIFwiLlwiICsgY29lZmZpY2llbnQuc2xpY2UoaSlcbiAgICAgIDogXCIwLlwiICsgbmV3IEFycmF5KDEgLSBpKS5qb2luKFwiMFwiKSArIGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBNYXRoLm1heCgwLCBwICsgaSAtIDEpKVswXTsgLy8gbGVzcyB0aGFuIDF5IVxufVxuIiwiaW1wb3J0IHtmb3JtYXREZWNpbWFsUGFydHN9IGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCwgcCkge1xuICB2YXIgZCA9IGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBwKTtcbiAgaWYgKCFkKSByZXR1cm4geCArIFwiXCI7XG4gIHZhciBjb2VmZmljaWVudCA9IGRbMF0sXG4gICAgICBleHBvbmVudCA9IGRbMV07XG4gIHJldHVybiBleHBvbmVudCA8IDAgPyBcIjAuXCIgKyBuZXcgQXJyYXkoLWV4cG9uZW50KS5qb2luKFwiMFwiKSArIGNvZWZmaWNpZW50XG4gICAgICA6IGNvZWZmaWNpZW50Lmxlbmd0aCA+IGV4cG9uZW50ICsgMSA/IGNvZWZmaWNpZW50LnNsaWNlKDAsIGV4cG9uZW50ICsgMSkgKyBcIi5cIiArIGNvZWZmaWNpZW50LnNsaWNlKGV4cG9uZW50ICsgMSlcbiAgICAgIDogY29lZmZpY2llbnQgKyBuZXcgQXJyYXkoZXhwb25lbnQgLSBjb2VmZmljaWVudC5sZW5ndGggKyAyKS5qb2luKFwiMFwiKTtcbn1cbiIsImltcG9ydCBmb3JtYXREZWNpbWFsIGZyb20gXCIuL2Zvcm1hdERlY2ltYWwuanNcIjtcbmltcG9ydCBmb3JtYXRQcmVmaXhBdXRvIGZyb20gXCIuL2Zvcm1hdFByZWZpeEF1dG8uanNcIjtcbmltcG9ydCBmb3JtYXRSb3VuZGVkIGZyb20gXCIuL2Zvcm1hdFJvdW5kZWQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBcIiVcIjogKHgsIHApID0+ICh4ICogMTAwKS50b0ZpeGVkKHApLFxuICBcImJcIjogKHgpID0+IE1hdGgucm91bmQoeCkudG9TdHJpbmcoMiksXG4gIFwiY1wiOiAoeCkgPT4geCArIFwiXCIsXG4gIFwiZFwiOiBmb3JtYXREZWNpbWFsLFxuICBcImVcIjogKHgsIHApID0+IHgudG9FeHBvbmVudGlhbChwKSxcbiAgXCJmXCI6ICh4LCBwKSA9PiB4LnRvRml4ZWQocCksXG4gIFwiZ1wiOiAoeCwgcCkgPT4geC50b1ByZWNpc2lvbihwKSxcbiAgXCJvXCI6ICh4KSA9PiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDgpLFxuICBcInBcIjogKHgsIHApID0+IGZvcm1hdFJvdW5kZWQoeCAqIDEwMCwgcCksXG4gIFwiclwiOiBmb3JtYXRSb3VuZGVkLFxuICBcInNcIjogZm9ybWF0UHJlZml4QXV0byxcbiAgXCJYXCI6ICh4KSA9PiBNYXRoLnJvdW5kKHgpLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpLFxuICBcInhcIjogKHgpID0+IE1hdGgucm91bmQoeCkudG9TdHJpbmcoMTYpXG59O1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oeCkge1xuICByZXR1cm4geDtcbn1cbiIsImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuaW1wb3J0IGZvcm1hdEdyb3VwIGZyb20gXCIuL2Zvcm1hdEdyb3VwLmpzXCI7XG5pbXBvcnQgZm9ybWF0TnVtZXJhbHMgZnJvbSBcIi4vZm9ybWF0TnVtZXJhbHMuanNcIjtcbmltcG9ydCBmb3JtYXRTcGVjaWZpZXIgZnJvbSBcIi4vZm9ybWF0U3BlY2lmaWVyLmpzXCI7XG5pbXBvcnQgZm9ybWF0VHJpbSBmcm9tIFwiLi9mb3JtYXRUcmltLmpzXCI7XG5pbXBvcnQgZm9ybWF0VHlwZXMgZnJvbSBcIi4vZm9ybWF0VHlwZXMuanNcIjtcbmltcG9ydCB7cHJlZml4RXhwb25lbnR9IGZyb20gXCIuL2Zvcm1hdFByZWZpeEF1dG8uanNcIjtcbmltcG9ydCBpZGVudGl0eSBmcm9tIFwiLi9pZGVudGl0eS5qc1wiO1xuXG52YXIgbWFwID0gQXJyYXkucHJvdG90eXBlLm1hcCxcbiAgICBwcmVmaXhlcyA9IFtcInlcIixcInpcIixcImFcIixcImZcIixcInBcIixcIm5cIixcIsK1XCIsXCJtXCIsXCJcIixcImtcIixcIk1cIixcIkdcIixcIlRcIixcIlBcIixcIkVcIixcIlpcIixcIllcIl07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGxvY2FsZSkge1xuICB2YXIgZ3JvdXAgPSBsb2NhbGUuZ3JvdXBpbmcgPT09IHVuZGVmaW5lZCB8fCBsb2NhbGUudGhvdXNhbmRzID09PSB1bmRlZmluZWQgPyBpZGVudGl0eSA6IGZvcm1hdEdyb3VwKG1hcC5jYWxsKGxvY2FsZS5ncm91cGluZywgTnVtYmVyKSwgbG9jYWxlLnRob3VzYW5kcyArIFwiXCIpLFxuICAgICAgY3VycmVuY3lQcmVmaXggPSBsb2NhbGUuY3VycmVuY3kgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBsb2NhbGUuY3VycmVuY3lbMF0gKyBcIlwiLFxuICAgICAgY3VycmVuY3lTdWZmaXggPSBsb2NhbGUuY3VycmVuY3kgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBsb2NhbGUuY3VycmVuY3lbMV0gKyBcIlwiLFxuICAgICAgZGVjaW1hbCA9IGxvY2FsZS5kZWNpbWFsID09PSB1bmRlZmluZWQgPyBcIi5cIiA6IGxvY2FsZS5kZWNpbWFsICsgXCJcIixcbiAgICAgIG51bWVyYWxzID0gbG9jYWxlLm51bWVyYWxzID09PSB1bmRlZmluZWQgPyBpZGVudGl0eSA6IGZvcm1hdE51bWVyYWxzKG1hcC5jYWxsKGxvY2FsZS5udW1lcmFscywgU3RyaW5nKSksXG4gICAgICBwZXJjZW50ID0gbG9jYWxlLnBlcmNlbnQgPT09IHVuZGVmaW5lZCA/IFwiJVwiIDogbG9jYWxlLnBlcmNlbnQgKyBcIlwiLFxuICAgICAgbWludXMgPSBsb2NhbGUubWludXMgPT09IHVuZGVmaW5lZCA/IFwi4oiSXCIgOiBsb2NhbGUubWludXMgKyBcIlwiLFxuICAgICAgbmFuID0gbG9jYWxlLm5hbiA9PT0gdW5kZWZpbmVkID8gXCJOYU5cIiA6IGxvY2FsZS5uYW4gKyBcIlwiO1xuXG4gIGZ1bmN0aW9uIG5ld0Zvcm1hdChzcGVjaWZpZXIpIHtcbiAgICBzcGVjaWZpZXIgPSBmb3JtYXRTcGVjaWZpZXIoc3BlY2lmaWVyKTtcblxuICAgIHZhciBmaWxsID0gc3BlY2lmaWVyLmZpbGwsXG4gICAgICAgIGFsaWduID0gc3BlY2lmaWVyLmFsaWduLFxuICAgICAgICBzaWduID0gc3BlY2lmaWVyLnNpZ24sXG4gICAgICAgIHN5bWJvbCA9IHNwZWNpZmllci5zeW1ib2wsXG4gICAgICAgIHplcm8gPSBzcGVjaWZpZXIuemVybyxcbiAgICAgICAgd2lkdGggPSBzcGVjaWZpZXIud2lkdGgsXG4gICAgICAgIGNvbW1hID0gc3BlY2lmaWVyLmNvbW1hLFxuICAgICAgICBwcmVjaXNpb24gPSBzcGVjaWZpZXIucHJlY2lzaW9uLFxuICAgICAgICB0cmltID0gc3BlY2lmaWVyLnRyaW0sXG4gICAgICAgIHR5cGUgPSBzcGVjaWZpZXIudHlwZTtcblxuICAgIC8vIFRoZSBcIm5cIiB0eXBlIGlzIGFuIGFsaWFzIGZvciBcIixnXCIuXG4gICAgaWYgKHR5cGUgPT09IFwiblwiKSBjb21tYSA9IHRydWUsIHR5cGUgPSBcImdcIjtcblxuICAgIC8vIFRoZSBcIlwiIHR5cGUsIGFuZCBhbnkgaW52YWxpZCB0eXBlLCBpcyBhbiBhbGlhcyBmb3IgXCIuMTJ+Z1wiLlxuICAgIGVsc2UgaWYgKCFmb3JtYXRUeXBlc1t0eXBlXSkgcHJlY2lzaW9uID09PSB1bmRlZmluZWQgJiYgKHByZWNpc2lvbiA9IDEyKSwgdHJpbSA9IHRydWUsIHR5cGUgPSBcImdcIjtcblxuICAgIC8vIElmIHplcm8gZmlsbCBpcyBzcGVjaWZpZWQsIHBhZGRpbmcgZ29lcyBhZnRlciBzaWduIGFuZCBiZWZvcmUgZGlnaXRzLlxuICAgIGlmICh6ZXJvIHx8IChmaWxsID09PSBcIjBcIiAmJiBhbGlnbiA9PT0gXCI9XCIpKSB6ZXJvID0gdHJ1ZSwgZmlsbCA9IFwiMFwiLCBhbGlnbiA9IFwiPVwiO1xuXG4gICAgLy8gQ29tcHV0ZSB0aGUgcHJlZml4IGFuZCBzdWZmaXguXG4gICAgLy8gRm9yIFNJLXByZWZpeCwgdGhlIHN1ZmZpeCBpcyBsYXppbHkgY29tcHV0ZWQuXG4gICAgdmFyIHByZWZpeCA9IHN5bWJvbCA9PT0gXCIkXCIgPyBjdXJyZW5jeVByZWZpeCA6IHN5bWJvbCA9PT0gXCIjXCIgJiYgL1tib3hYXS8udGVzdCh0eXBlKSA/IFwiMFwiICsgdHlwZS50b0xvd2VyQ2FzZSgpIDogXCJcIixcbiAgICAgICAgc3VmZml4ID0gc3ltYm9sID09PSBcIiRcIiA/IGN1cnJlbmN5U3VmZml4IDogL1slcF0vLnRlc3QodHlwZSkgPyBwZXJjZW50IDogXCJcIjtcblxuICAgIC8vIFdoYXQgZm9ybWF0IGZ1bmN0aW9uIHNob3VsZCB3ZSB1c2U/XG4gICAgLy8gSXMgdGhpcyBhbiBpbnRlZ2VyIHR5cGU/XG4gICAgLy8gQ2FuIHRoaXMgdHlwZSBnZW5lcmF0ZSBleHBvbmVudGlhbCBub3RhdGlvbj9cbiAgICB2YXIgZm9ybWF0VHlwZSA9IGZvcm1hdFR5cGVzW3R5cGVdLFxuICAgICAgICBtYXliZVN1ZmZpeCA9IC9bZGVmZ3BycyVdLy50ZXN0KHR5cGUpO1xuXG4gICAgLy8gU2V0IHRoZSBkZWZhdWx0IHByZWNpc2lvbiBpZiBub3Qgc3BlY2lmaWVkLFxuICAgIC8vIG9yIGNsYW1wIHRoZSBzcGVjaWZpZWQgcHJlY2lzaW9uIHRvIHRoZSBzdXBwb3J0ZWQgcmFuZ2UuXG4gICAgLy8gRm9yIHNpZ25pZmljYW50IHByZWNpc2lvbiwgaXQgbXVzdCBiZSBpbiBbMSwgMjFdLlxuICAgIC8vIEZvciBmaXhlZCBwcmVjaXNpb24sIGl0IG11c3QgYmUgaW4gWzAsIDIwXS5cbiAgICBwcmVjaXNpb24gPSBwcmVjaXNpb24gPT09IHVuZGVmaW5lZCA/IDZcbiAgICAgICAgOiAvW2dwcnNdLy50ZXN0KHR5cGUpID8gTWF0aC5tYXgoMSwgTWF0aC5taW4oMjEsIHByZWNpc2lvbikpXG4gICAgICAgIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMjAsIHByZWNpc2lvbikpO1xuXG4gICAgZnVuY3Rpb24gZm9ybWF0KHZhbHVlKSB7XG4gICAgICB2YXIgdmFsdWVQcmVmaXggPSBwcmVmaXgsXG4gICAgICAgICAgdmFsdWVTdWZmaXggPSBzdWZmaXgsXG4gICAgICAgICAgaSwgbiwgYztcblxuICAgICAgaWYgKHR5cGUgPT09IFwiY1wiKSB7XG4gICAgICAgIHZhbHVlU3VmZml4ID0gZm9ybWF0VHlwZSh2YWx1ZSkgKyB2YWx1ZVN1ZmZpeDtcbiAgICAgICAgdmFsdWUgPSBcIlwiO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSArdmFsdWU7XG5cbiAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBzaWduLiAtMCBpcyBub3QgbGVzcyB0aGFuIDAsIGJ1dCAxIC8gLTAgaXMhXG4gICAgICAgIHZhciB2YWx1ZU5lZ2F0aXZlID0gdmFsdWUgPCAwIHx8IDEgLyB2YWx1ZSA8IDA7XG5cbiAgICAgICAgLy8gUGVyZm9ybSB0aGUgaW5pdGlhbCBmb3JtYXR0aW5nLlxuICAgICAgICB2YWx1ZSA9IGlzTmFOKHZhbHVlKSA/IG5hbiA6IGZvcm1hdFR5cGUoTWF0aC5hYnModmFsdWUpLCBwcmVjaXNpb24pO1xuXG4gICAgICAgIC8vIFRyaW0gaW5zaWduaWZpY2FudCB6ZXJvcy5cbiAgICAgICAgaWYgKHRyaW0pIHZhbHVlID0gZm9ybWF0VHJpbSh2YWx1ZSk7XG5cbiAgICAgICAgLy8gSWYgYSBuZWdhdGl2ZSB2YWx1ZSByb3VuZHMgdG8gemVybyBhZnRlciBmb3JtYXR0aW5nLCBhbmQgbm8gZXhwbGljaXQgcG9zaXRpdmUgc2lnbiBpcyByZXF1ZXN0ZWQsIGhpZGUgdGhlIHNpZ24uXG4gICAgICAgIGlmICh2YWx1ZU5lZ2F0aXZlICYmICt2YWx1ZSA9PT0gMCAmJiBzaWduICE9PSBcIitcIikgdmFsdWVOZWdhdGl2ZSA9IGZhbHNlO1xuXG4gICAgICAgIC8vIENvbXB1dGUgdGhlIHByZWZpeCBhbmQgc3VmZml4LlxuICAgICAgICB2YWx1ZVByZWZpeCA9ICh2YWx1ZU5lZ2F0aXZlID8gKHNpZ24gPT09IFwiKFwiID8gc2lnbiA6IG1pbnVzKSA6IHNpZ24gPT09IFwiLVwiIHx8IHNpZ24gPT09IFwiKFwiID8gXCJcIiA6IHNpZ24pICsgdmFsdWVQcmVmaXg7XG4gICAgICAgIHZhbHVlU3VmZml4ID0gKHR5cGUgPT09IFwic1wiID8gcHJlZml4ZXNbOCArIHByZWZpeEV4cG9uZW50IC8gM10gOiBcIlwiKSArIHZhbHVlU3VmZml4ICsgKHZhbHVlTmVnYXRpdmUgJiYgc2lnbiA9PT0gXCIoXCIgPyBcIilcIiA6IFwiXCIpO1xuXG4gICAgICAgIC8vIEJyZWFrIHRoZSBmb3JtYXR0ZWQgdmFsdWUgaW50byB0aGUgaW50ZWdlciDigJx2YWx1ZeKAnSBwYXJ0IHRoYXQgY2FuIGJlXG4gICAgICAgIC8vIGdyb3VwZWQsIGFuZCBmcmFjdGlvbmFsIG9yIGV4cG9uZW50aWFsIOKAnHN1ZmZpeOKAnSBwYXJ0IHRoYXQgaXMgbm90LlxuICAgICAgICBpZiAobWF5YmVTdWZmaXgpIHtcbiAgICAgICAgICBpID0gLTEsIG4gPSB2YWx1ZS5sZW5ndGg7XG4gICAgICAgICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgICAgICAgIGlmIChjID0gdmFsdWUuY2hhckNvZGVBdChpKSwgNDggPiBjIHx8IGMgPiA1Nykge1xuICAgICAgICAgICAgICB2YWx1ZVN1ZmZpeCA9IChjID09PSA0NiA/IGRlY2ltYWwgKyB2YWx1ZS5zbGljZShpICsgMSkgOiB2YWx1ZS5zbGljZShpKSkgKyB2YWx1ZVN1ZmZpeDtcbiAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBpKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBmaWxsIGNoYXJhY3RlciBpcyBub3QgXCIwXCIsIGdyb3VwaW5nIGlzIGFwcGxpZWQgYmVmb3JlIHBhZGRpbmcuXG4gICAgICBpZiAoY29tbWEgJiYgIXplcm8pIHZhbHVlID0gZ3JvdXAodmFsdWUsIEluZmluaXR5KTtcblxuICAgICAgLy8gQ29tcHV0ZSB0aGUgcGFkZGluZy5cbiAgICAgIHZhciBsZW5ndGggPSB2YWx1ZVByZWZpeC5sZW5ndGggKyB2YWx1ZS5sZW5ndGggKyB2YWx1ZVN1ZmZpeC5sZW5ndGgsXG4gICAgICAgICAgcGFkZGluZyA9IGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbihmaWxsKSA6IFwiXCI7XG5cbiAgICAgIC8vIElmIHRoZSBmaWxsIGNoYXJhY3RlciBpcyBcIjBcIiwgZ3JvdXBpbmcgaXMgYXBwbGllZCBhZnRlciBwYWRkaW5nLlxuICAgICAgaWYgKGNvbW1hICYmIHplcm8pIHZhbHVlID0gZ3JvdXAocGFkZGluZyArIHZhbHVlLCBwYWRkaW5nLmxlbmd0aCA/IHdpZHRoIC0gdmFsdWVTdWZmaXgubGVuZ3RoIDogSW5maW5pdHkpLCBwYWRkaW5nID0gXCJcIjtcblxuICAgICAgLy8gUmVjb25zdHJ1Y3QgdGhlIGZpbmFsIG91dHB1dCBiYXNlZCBvbiB0aGUgZGVzaXJlZCBhbGlnbm1lbnQuXG4gICAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICAgIGNhc2UgXCI8XCI6IHZhbHVlID0gdmFsdWVQcmVmaXggKyB2YWx1ZSArIHZhbHVlU3VmZml4ICsgcGFkZGluZzsgYnJlYWs7XG4gICAgICAgIGNhc2UgXCI9XCI6IHZhbHVlID0gdmFsdWVQcmVmaXggKyBwYWRkaW5nICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeDsgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJeXCI6IHZhbHVlID0gcGFkZGluZy5zbGljZSgwLCBsZW5ndGggPSBwYWRkaW5nLmxlbmd0aCA+PiAxKSArIHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeCArIHBhZGRpbmcuc2xpY2UobGVuZ3RoKTsgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6IHZhbHVlID0gcGFkZGluZyArIHZhbHVlUHJlZml4ICsgdmFsdWUgKyB2YWx1ZVN1ZmZpeDsgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBudW1lcmFscyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZm9ybWF0LnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gc3BlY2lmaWVyICsgXCJcIjtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGZvcm1hdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFByZWZpeChzcGVjaWZpZXIsIHZhbHVlKSB7XG4gICAgdmFyIGYgPSBuZXdGb3JtYXQoKHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIpLCBzcGVjaWZpZXIudHlwZSA9IFwiZlwiLCBzcGVjaWZpZXIpKSxcbiAgICAgICAgZSA9IE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50KHZhbHVlKSAvIDMpKSkgKiAzLFxuICAgICAgICBrID0gTWF0aC5wb3coMTAsIC1lKSxcbiAgICAgICAgcHJlZml4ID0gcHJlZml4ZXNbOCArIGUgLyAzXTtcbiAgICByZXR1cm4gZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIHJldHVybiBmKGsgKiB2YWx1ZSkgKyBwcmVmaXg7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZm9ybWF0OiBuZXdGb3JtYXQsXG4gICAgZm9ybWF0UHJlZml4OiBmb3JtYXRQcmVmaXhcbiAgfTtcbn1cbiIsImltcG9ydCBmb3JtYXRMb2NhbGUgZnJvbSBcIi4vbG9jYWxlLmpzXCI7XG5cbnZhciBsb2NhbGU7XG5leHBvcnQgdmFyIGZvcm1hdDtcbmV4cG9ydCB2YXIgZm9ybWF0UHJlZml4O1xuXG5kZWZhdWx0TG9jYWxlKHtcbiAgdGhvdXNhbmRzOiBcIixcIixcbiAgZ3JvdXBpbmc6IFszXSxcbiAgY3VycmVuY3k6IFtcIiRcIiwgXCJcIl1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWZhdWx0TG9jYWxlKGRlZmluaXRpb24pIHtcbiAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pO1xuICBmb3JtYXQgPSBsb2NhbGUuZm9ybWF0O1xuICBmb3JtYXRQcmVmaXggPSBsb2NhbGUuZm9ybWF0UHJlZml4O1xuICByZXR1cm4gbG9jYWxlO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oZ3JvdXBpbmcsIHRob3VzYW5kcykge1xuICByZXR1cm4gZnVuY3Rpb24odmFsdWUsIHdpZHRoKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5sZW5ndGgsXG4gICAgICAgIHQgPSBbXSxcbiAgICAgICAgaiA9IDAsXG4gICAgICAgIGcgPSBncm91cGluZ1swXSxcbiAgICAgICAgbGVuZ3RoID0gMDtcblxuICAgIHdoaWxlIChpID4gMCAmJiBnID4gMCkge1xuICAgICAgaWYgKGxlbmd0aCArIGcgKyAxID4gd2lkdGgpIGcgPSBNYXRoLm1heCgxLCB3aWR0aCAtIGxlbmd0aCk7XG4gICAgICB0LnB1c2godmFsdWUuc3Vic3RyaW5nKGkgLT0gZywgaSArIGcpKTtcbiAgICAgIGlmICgobGVuZ3RoICs9IGcgKyAxKSA+IHdpZHRoKSBicmVhaztcbiAgICAgIGcgPSBncm91cGluZ1tqID0gKGogKyAxKSAlIGdyb3VwaW5nLmxlbmd0aF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHQucmV2ZXJzZSgpLmpvaW4odGhvdXNhbmRzKTtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG51bWVyYWxzKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bMC05XS9nLCBmdW5jdGlvbihpKSB7XG4gICAgICByZXR1cm4gbnVtZXJhbHNbK2ldO1xuICAgIH0pO1xuICB9O1xufVxuIiwiLy8gVHJpbXMgaW5zaWduaWZpY2FudCB6ZXJvcywgZS5nLiwgcmVwbGFjZXMgMS4yMDAwayB3aXRoIDEuMmsuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzKSB7XG4gIG91dDogZm9yICh2YXIgbiA9IHMubGVuZ3RoLCBpID0gMSwgaTAgPSAtMSwgaTE7IGkgPCBuOyArK2kpIHtcbiAgICBzd2l0Y2ggKHNbaV0pIHtcbiAgICAgIGNhc2UgXCIuXCI6IGkwID0gaTEgPSBpOyBicmVhaztcbiAgICAgIGNhc2UgXCIwXCI6IGlmIChpMCA9PT0gMCkgaTAgPSBpOyBpMSA9IGk7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogaWYgKCErc1tpXSkgYnJlYWsgb3V0OyBpZiAoaTAgPiAwKSBpMCA9IDA7IGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTAgPiAwID8gcy5zbGljZSgwLCBpMCkgKyBzLnNsaWNlKGkxICsgMSkgOiBzO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGluaXRSYW5nZShkb21haW4sIHJhbmdlKSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogYnJlYWs7XG4gICAgY2FzZSAxOiB0aGlzLnJhbmdlKGRvbWFpbik7IGJyZWFrO1xuICAgIGRlZmF1bHQ6IHRoaXMucmFuZ2UocmFuZ2UpLmRvbWFpbihkb21haW4pOyBicmVhaztcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRJbnRlcnBvbGF0b3IoZG9tYWluLCBpbnRlcnBvbGF0b3IpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiBicmVhaztcbiAgICBjYXNlIDE6IHtcbiAgICAgIGlmICh0eXBlb2YgZG9tYWluID09PSBcImZ1bmN0aW9uXCIpIHRoaXMuaW50ZXJwb2xhdG9yKGRvbWFpbik7XG4gICAgICBlbHNlIHRoaXMucmFuZ2UoZG9tYWluKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB0aGlzLmRvbWFpbihkb21haW4pO1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcnBvbGF0b3IgPT09IFwiZnVuY3Rpb25cIikgdGhpcy5pbnRlcnBvbGF0b3IoaW50ZXJwb2xhdG9yKTtcbiAgICAgIGVsc2UgdGhpcy5yYW5nZShpbnRlcnBvbGF0b3IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IHtJbnRlcm5NYXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXQuanNcIjtcblxuZXhwb3J0IGNvbnN0IGltcGxpY2l0ID0gU3ltYm9sKFwiaW1wbGljaXRcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9yZGluYWwoKSB7XG4gIHZhciBpbmRleCA9IG5ldyBJbnRlcm5NYXAoKSxcbiAgICAgIGRvbWFpbiA9IFtdLFxuICAgICAgcmFuZ2UgPSBbXSxcbiAgICAgIHVua25vd24gPSBpbXBsaWNpdDtcblxuICBmdW5jdGlvbiBzY2FsZShkKSB7XG4gICAgbGV0IGkgPSBpbmRleC5nZXQoZCk7XG4gICAgaWYgKGkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHVua25vd24gIT09IGltcGxpY2l0KSByZXR1cm4gdW5rbm93bjtcbiAgICAgIGluZGV4LnNldChkLCBpID0gZG9tYWluLnB1c2goZCkgLSAxKTtcbiAgICB9XG4gICAgcmV0dXJuIHJhbmdlW2kgJSByYW5nZS5sZW5ndGhdO1xuICB9XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRvbWFpbi5zbGljZSgpO1xuICAgIGRvbWFpbiA9IFtdLCBpbmRleCA9IG5ldyBJbnRlcm5NYXAoKTtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIF8pIHtcbiAgICAgIGlmIChpbmRleC5oYXModmFsdWUpKSBjb250aW51ZTtcbiAgICAgIGluZGV4LnNldCh2YWx1ZSwgZG9tYWluLnB1c2godmFsdWUpIC0gMSk7XG4gICAgfVxuICAgIHJldHVybiBzY2FsZTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IEFycmF5LmZyb20oXyksIHNjYWxlKSA6IHJhbmdlLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUudW5rbm93biA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh1bmtub3duID0gXywgc2NhbGUpIDogdW5rbm93bjtcbiAgfTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIG9yZGluYWwoZG9tYWluLCByYW5nZSkudW5rbm93bih1bmtub3duKTtcbiAgfTtcblxuICBpbml0UmFuZ2UuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbnVtYmVyKHgpIHtcbiAgcmV0dXJuICt4O1xufVxuIiwiaW1wb3J0IHtiaXNlY3R9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZSBhcyBpbnRlcnBvbGF0ZVZhbHVlLCBpbnRlcnBvbGF0ZU51bWJlciwgaW50ZXJwb2xhdGVSb3VuZH0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBudW1iZXIgZnJvbSBcIi4vbnVtYmVyLmpzXCI7XG5cbnZhciB1bml0ID0gWzAsIDFdO1xuXG5leHBvcnQgZnVuY3Rpb24gaWRlbnRpdHkoeCkge1xuICByZXR1cm4geDtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplKGEsIGIpIHtcbiAgcmV0dXJuIChiIC09IChhID0gK2EpKVxuICAgICAgPyBmdW5jdGlvbih4KSB7IHJldHVybiAoeCAtIGEpIC8gYjsgfVxuICAgICAgOiBjb25zdGFudChpc05hTihiKSA/IE5hTiA6IDAuNSk7XG59XG5cbmZ1bmN0aW9uIGNsYW1wZXIoYSwgYikge1xuICB2YXIgdDtcbiAgaWYgKGEgPiBiKSB0ID0gYSwgYSA9IGIsIGIgPSB0O1xuICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4gTWF0aC5tYXgoYSwgTWF0aC5taW4oYiwgeCkpOyB9O1xufVxuXG4vLyBub3JtYWxpemUoYSwgYikoeCkgdGFrZXMgYSBkb21haW4gdmFsdWUgeCBpbiBbYSxiXSBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdCBpbiBbMCwxXS5cbi8vIGludGVycG9sYXRlKGEsIGIpKHQpIHRha2VzIGEgcGFyYW1ldGVyIHQgaW4gWzAsMV0gYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmFuZ2UgdmFsdWUgeCBpbiBbYSxiXS5cbmZ1bmN0aW9uIGJpbWFwKGRvbWFpbiwgcmFuZ2UsIGludGVycG9sYXRlKSB7XG4gIHZhciBkMCA9IGRvbWFpblswXSwgZDEgPSBkb21haW5bMV0sIHIwID0gcmFuZ2VbMF0sIHIxID0gcmFuZ2VbMV07XG4gIGlmIChkMSA8IGQwKSBkMCA9IG5vcm1hbGl6ZShkMSwgZDApLCByMCA9IGludGVycG9sYXRlKHIxLCByMCk7XG4gIGVsc2UgZDAgPSBub3JtYWxpemUoZDAsIGQxKSwgcjAgPSBpbnRlcnBvbGF0ZShyMCwgcjEpO1xuICByZXR1cm4gZnVuY3Rpb24oeCkgeyByZXR1cm4gcjAoZDAoeCkpOyB9O1xufVxuXG5mdW5jdGlvbiBwb2x5bWFwKGRvbWFpbiwgcmFuZ2UsIGludGVycG9sYXRlKSB7XG4gIHZhciBqID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKSAtIDEsXG4gICAgICBkID0gbmV3IEFycmF5KGopLFxuICAgICAgciA9IG5ldyBBcnJheShqKSxcbiAgICAgIGkgPSAtMTtcblxuICAvLyBSZXZlcnNlIGRlc2NlbmRpbmcgZG9tYWlucy5cbiAgaWYgKGRvbWFpbltqXSA8IGRvbWFpblswXSkge1xuICAgIGRvbWFpbiA9IGRvbWFpbi5zbGljZSgpLnJldmVyc2UoKTtcbiAgICByYW5nZSA9IHJhbmdlLnNsaWNlKCkucmV2ZXJzZSgpO1xuICB9XG5cbiAgd2hpbGUgKCsraSA8IGopIHtcbiAgICBkW2ldID0gbm9ybWFsaXplKGRvbWFpbltpXSwgZG9tYWluW2kgKyAxXSk7XG4gICAgcltpXSA9IGludGVycG9sYXRlKHJhbmdlW2ldLCByYW5nZVtpICsgMV0pO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHgpIHtcbiAgICB2YXIgaSA9IGJpc2VjdChkb21haW4sIHgsIDEsIGopIC0gMTtcbiAgICByZXR1cm4gcltpXShkW2ldKHgpKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvcHkoc291cmNlLCB0YXJnZXQpIHtcbiAgcmV0dXJuIHRhcmdldFxuICAgICAgLmRvbWFpbihzb3VyY2UuZG9tYWluKCkpXG4gICAgICAucmFuZ2Uoc291cmNlLnJhbmdlKCkpXG4gICAgICAuaW50ZXJwb2xhdGUoc291cmNlLmludGVycG9sYXRlKCkpXG4gICAgICAuY2xhbXAoc291cmNlLmNsYW1wKCkpXG4gICAgICAudW5rbm93bihzb3VyY2UudW5rbm93bigpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zZm9ybWVyKCkge1xuICB2YXIgZG9tYWluID0gdW5pdCxcbiAgICAgIHJhbmdlID0gdW5pdCxcbiAgICAgIGludGVycG9sYXRlID0gaW50ZXJwb2xhdGVWYWx1ZSxcbiAgICAgIHRyYW5zZm9ybSxcbiAgICAgIHVudHJhbnNmb3JtLFxuICAgICAgdW5rbm93bixcbiAgICAgIGNsYW1wID0gaWRlbnRpdHksXG4gICAgICBwaWVjZXdpc2UsXG4gICAgICBvdXRwdXQsXG4gICAgICBpbnB1dDtcblxuICBmdW5jdGlvbiByZXNjYWxlKCkge1xuICAgIHZhciBuID0gTWF0aC5taW4oZG9tYWluLmxlbmd0aCwgcmFuZ2UubGVuZ3RoKTtcbiAgICBpZiAoY2xhbXAgIT09IGlkZW50aXR5KSBjbGFtcCA9IGNsYW1wZXIoZG9tYWluWzBdLCBkb21haW5bbiAtIDFdKTtcbiAgICBwaWVjZXdpc2UgPSBuID4gMiA/IHBvbHltYXAgOiBiaW1hcDtcbiAgICBvdXRwdXQgPSBpbnB1dCA9IG51bGw7XG4gICAgcmV0dXJuIHNjYWxlO1xuICB9XG5cbiAgZnVuY3Rpb24gc2NhbGUoeCkge1xuICAgIHJldHVybiB4ID09IG51bGwgfHwgaXNOYU4oeCA9ICt4KSA/IHVua25vd24gOiAob3V0cHV0IHx8IChvdXRwdXQgPSBwaWVjZXdpc2UoZG9tYWluLm1hcCh0cmFuc2Zvcm0pLCByYW5nZSwgaW50ZXJwb2xhdGUpKSkodHJhbnNmb3JtKGNsYW1wKHgpKSk7XG4gIH1cblxuICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIGNsYW1wKHVudHJhbnNmb3JtKChpbnB1dCB8fCAoaW5wdXQgPSBwaWVjZXdpc2UocmFuZ2UsIGRvbWFpbi5tYXAodHJhbnNmb3JtKSwgaW50ZXJwb2xhdGVOdW1iZXIpKSkoeSkpKTtcbiAgfTtcblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZG9tYWluID0gQXJyYXkuZnJvbShfLCBudW1iZXIpLCByZXNjYWxlKCkpIDogZG9tYWluLnNsaWNlKCk7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBBcnJheS5mcm9tKF8pLCByZXNjYWxlKCkpIDogcmFuZ2Uuc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZVJvdW5kID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiByYW5nZSA9IEFycmF5LmZyb20oXyksIGludGVycG9sYXRlID0gaW50ZXJwb2xhdGVSb3VuZCwgcmVzY2FsZSgpO1xuICB9O1xuXG4gIHNjYWxlLmNsYW1wID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGNsYW1wID0gXyA/IHRydWUgOiBpZGVudGl0eSwgcmVzY2FsZSgpKSA6IGNsYW1wICE9PSBpZGVudGl0eTtcbiAgfTtcblxuICBzY2FsZS5pbnRlcnBvbGF0ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChpbnRlcnBvbGF0ZSA9IF8sIHJlc2NhbGUoKSkgOiBpbnRlcnBvbGF0ZTtcbiAgfTtcblxuICBzY2FsZS51bmtub3duID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHVua25vd24gPSBfLCBzY2FsZSkgOiB1bmtub3duO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbih0LCB1KSB7XG4gICAgdHJhbnNmb3JtID0gdCwgdW50cmFuc2Zvcm0gPSB1O1xuICAgIHJldHVybiByZXNjYWxlKCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRpbnVvdXMoKSB7XG4gIHJldHVybiB0cmFuc2Zvcm1lcigpKGlkZW50aXR5LCBpZGVudGl0eSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb25zdGFudHMoeCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHg7XG4gIH07XG59XG4iLCJpbXBvcnQge3RpY2tTdGVwfSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCB7Zm9ybWF0LCBmb3JtYXRQcmVmaXgsIGZvcm1hdFNwZWNpZmllciwgcHJlY2lzaW9uRml4ZWQsIHByZWNpc2lvblByZWZpeCwgcHJlY2lzaW9uUm91bmR9IGZyb20gXCJkMy1mb3JtYXRcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGlja0Zvcm1hdChzdGFydCwgc3RvcCwgY291bnQsIHNwZWNpZmllcikge1xuICB2YXIgc3RlcCA9IHRpY2tTdGVwKHN0YXJ0LCBzdG9wLCBjb3VudCksXG4gICAgICBwcmVjaXNpb247XG4gIHNwZWNpZmllciA9IGZvcm1hdFNwZWNpZmllcihzcGVjaWZpZXIgPT0gbnVsbCA/IFwiLGZcIiA6IHNwZWNpZmllcik7XG4gIHN3aXRjaCAoc3BlY2lmaWVyLnR5cGUpIHtcbiAgICBjYXNlIFwic1wiOiB7XG4gICAgICB2YXIgdmFsdWUgPSBNYXRoLm1heChNYXRoLmFicyhzdGFydCksIE1hdGguYWJzKHN0b3ApKTtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvblByZWZpeChzdGVwLCB2YWx1ZSkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uO1xuICAgICAgcmV0dXJuIGZvcm1hdFByZWZpeChzcGVjaWZpZXIsIHZhbHVlKTtcbiAgICB9XG4gICAgY2FzZSBcIlwiOlxuICAgIGNhc2UgXCJlXCI6XG4gICAgY2FzZSBcImdcIjpcbiAgICBjYXNlIFwicFwiOlxuICAgIGNhc2UgXCJyXCI6IHtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvblJvdW5kKHN0ZXAsIE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb24gLSAoc3BlY2lmaWVyLnR5cGUgPT09IFwiZVwiKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlIFwiZlwiOlxuICAgIGNhc2UgXCIlXCI6IHtcbiAgICAgIGlmIChzcGVjaWZpZXIucHJlY2lzaW9uID09IG51bGwgJiYgIWlzTmFOKHByZWNpc2lvbiA9IHByZWNpc2lvbkZpeGVkKHN0ZXApKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCIlXCIpICogMjtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gZm9ybWF0KHNwZWNpZmllcik7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RlcCwgdmFsdWUpIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWF4KC04LCBNYXRoLm1pbig4LCBNYXRoLmZsb29yKGV4cG9uZW50KHZhbHVlKSAvIDMpKSkgKiAzIC0gZXhwb25lbnQoTWF0aC5hYnMoc3RlcCkpKTtcbn1cbiIsImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwLCBtYXgpIHtcbiAgc3RlcCA9IE1hdGguYWJzKHN0ZXApLCBtYXggPSBNYXRoLmFicyhtYXgpIC0gc3RlcDtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIGV4cG9uZW50KG1heCkgLSBleHBvbmVudChzdGVwKSkgKyAxO1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXApIHtcbiAgcmV0dXJuIE1hdGgubWF4KDAsIC1leHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xufVxuIiwiaW1wb3J0IHt0aWNrcywgdGlja0luY3JlbWVudH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQgY29udGludW91cywge2NvcHl9IGZyb20gXCIuL2NvbnRpbnVvdXMuanNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5pbXBvcnQgdGlja0Zvcm1hdCBmcm9tIFwiLi90aWNrRm9ybWF0LmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBsaW5lYXJpc2goc2NhbGUpIHtcbiAgdmFyIGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcblxuICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gdGlja3MoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCk7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiB0aWNrRm9ybWF0KGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgY291bnQgPT0gbnVsbCA/IDEwIDogY291bnQsIHNwZWNpZmllcik7XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGNvdW50KSB7XG4gICAgaWYgKGNvdW50ID09IG51bGwpIGNvdW50ID0gMTA7XG5cbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHZhciBpMCA9IDA7XG4gICAgdmFyIGkxID0gZC5sZW5ndGggLSAxO1xuICAgIHZhciBzdGFydCA9IGRbaTBdO1xuICAgIHZhciBzdG9wID0gZFtpMV07XG4gICAgdmFyIHByZXN0ZXA7XG4gICAgdmFyIHN0ZXA7XG4gICAgdmFyIG1heEl0ZXIgPSAxMDtcblxuICAgIGlmIChzdG9wIDwgc3RhcnQpIHtcbiAgICAgIHN0ZXAgPSBzdGFydCwgc3RhcnQgPSBzdG9wLCBzdG9wID0gc3RlcDtcbiAgICAgIHN0ZXAgPSBpMCwgaTAgPSBpMSwgaTEgPSBzdGVwO1xuICAgIH1cbiAgICBcbiAgICB3aGlsZSAobWF4SXRlci0tID4gMCkge1xuICAgICAgc3RlcCA9IHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgICAgIGlmIChzdGVwID09PSBwcmVzdGVwKSB7XG4gICAgICAgIGRbaTBdID0gc3RhcnRcbiAgICAgICAgZFtpMV0gPSBzdG9wXG4gICAgICAgIHJldHVybiBkb21haW4oZCk7XG4gICAgICB9IGVsc2UgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICAgIHN0YXJ0ID0gTWF0aC5mbG9vcihzdGFydCAvIHN0ZXApICogc3RlcDtcbiAgICAgICAgc3RvcCA9IE1hdGguY2VpbChzdG9wIC8gc3RlcCkgKiBzdGVwO1xuICAgICAgfSBlbHNlIGlmIChzdGVwIDwgMCkge1xuICAgICAgICBzdGFydCA9IE1hdGguY2VpbChzdGFydCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgICAgc3RvcCA9IE1hdGguZmxvb3Ioc3RvcCAqIHN0ZXApIC8gc3RlcDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcHJlc3RlcCA9IHN0ZXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNjYWxlO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGluZWFyKCkge1xuICB2YXIgc2NhbGUgPSBjb250aW51b3VzKCk7XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBsaW5lYXIoKSk7XG4gIH07XG5cbiAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xuXG4gIHJldHVybiBsaW5lYXJpc2goc2NhbGUpO1xufVxuIiwiY29uc3QgdDAgPSBuZXcgRGF0ZSwgdDEgPSBuZXcgRGF0ZTtcblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVJbnRlcnZhbChmbG9vcmksIG9mZnNldGksIGNvdW50LCBmaWVsZCkge1xuXG4gIGZ1bmN0aW9uIGludGVydmFsKGRhdGUpIHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID09PSAwID8gbmV3IERhdGUgOiBuZXcgRGF0ZSgrZGF0ZSkpLCBkYXRlO1xuICB9XG5cbiAgaW50ZXJ2YWwuZmxvb3IgPSAoZGF0ZSkgPT4ge1xuICAgIHJldHVybiBmbG9vcmkoZGF0ZSA9IG5ldyBEYXRlKCtkYXRlKSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwuY2VpbCA9IChkYXRlKSA9PiB7XG4gICAgcmV0dXJuIGZsb29yaShkYXRlID0gbmV3IERhdGUoZGF0ZSAtIDEpKSwgb2Zmc2V0aShkYXRlLCAxKSwgZmxvb3JpKGRhdGUpLCBkYXRlO1xuICB9O1xuXG4gIGludGVydmFsLnJvdW5kID0gKGRhdGUpID0+IHtcbiAgICBjb25zdCBkMCA9IGludGVydmFsKGRhdGUpLCBkMSA9IGludGVydmFsLmNlaWwoZGF0ZSk7XG4gICAgcmV0dXJuIGRhdGUgLSBkMCA8IGQxIC0gZGF0ZSA/IGQwIDogZDE7XG4gIH07XG5cbiAgaW50ZXJ2YWwub2Zmc2V0ID0gKGRhdGUsIHN0ZXApID0+IHtcbiAgICByZXR1cm4gb2Zmc2V0aShkYXRlID0gbmV3IERhdGUoK2RhdGUpLCBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwucmFuZ2UgPSAoc3RhcnQsIHN0b3AsIHN0ZXApID0+IHtcbiAgICBjb25zdCByYW5nZSA9IFtdO1xuICAgIHN0YXJ0ID0gaW50ZXJ2YWwuY2VpbChzdGFydCk7XG4gICAgc3RlcCA9IHN0ZXAgPT0gbnVsbCA/IDEgOiBNYXRoLmZsb29yKHN0ZXApO1xuICAgIGlmICghKHN0YXJ0IDwgc3RvcCkgfHwgIShzdGVwID4gMCkpIHJldHVybiByYW5nZTsgLy8gYWxzbyBoYW5kbGVzIEludmFsaWQgRGF0ZVxuICAgIGxldCBwcmV2aW91cztcbiAgICBkbyByYW5nZS5wdXNoKHByZXZpb3VzID0gbmV3IERhdGUoK3N0YXJ0KSksIG9mZnNldGkoc3RhcnQsIHN0ZXApLCBmbG9vcmkoc3RhcnQpO1xuICAgIHdoaWxlIChwcmV2aW91cyA8IHN0YXJ0ICYmIHN0YXJ0IDwgc3RvcCk7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIGludGVydmFsLmZpbHRlciA9ICh0ZXN0KSA9PiB7XG4gICAgcmV0dXJuIHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkgd2hpbGUgKGZsb29yaShkYXRlKSwgIXRlc3QoZGF0ZSkpIGRhdGUuc2V0VGltZShkYXRlIC0gMSk7XG4gICAgfSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgICAgIGlmIChkYXRlID49IGRhdGUpIHtcbiAgICAgICAgaWYgKHN0ZXAgPCAwKSB3aGlsZSAoKytzdGVwIDw9IDApIHtcbiAgICAgICAgICB3aGlsZSAob2Zmc2V0aShkYXRlLCAtMSksICF0ZXN0KGRhdGUpKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG4gICAgICAgIH0gZWxzZSB3aGlsZSAoLS1zdGVwID49IDApIHtcbiAgICAgICAgICB3aGlsZSAob2Zmc2V0aShkYXRlLCArMSksICF0ZXN0KGRhdGUpKSB7fSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBpZiAoY291bnQpIHtcbiAgICBpbnRlcnZhbC5jb3VudCA9IChzdGFydCwgZW5kKSA9PiB7XG4gICAgICB0MC5zZXRUaW1lKCtzdGFydCksIHQxLnNldFRpbWUoK2VuZCk7XG4gICAgICBmbG9vcmkodDApLCBmbG9vcmkodDEpO1xuICAgICAgcmV0dXJuIE1hdGguZmxvb3IoY291bnQodDAsIHQxKSk7XG4gICAgfTtcblxuICAgIGludGVydmFsLmV2ZXJ5ID0gKHN0ZXApID0+IHtcbiAgICAgIHN0ZXAgPSBNYXRoLmZsb29yKHN0ZXApO1xuICAgICAgcmV0dXJuICFpc0Zpbml0ZShzdGVwKSB8fCAhKHN0ZXAgPiAwKSA/IG51bGxcbiAgICAgICAgICA6ICEoc3RlcCA+IDEpID8gaW50ZXJ2YWxcbiAgICAgICAgICA6IGludGVydmFsLmZpbHRlcihmaWVsZFxuICAgICAgICAgICAgICA/IChkKSA9PiBmaWVsZChkKSAlIHN0ZXAgPT09IDBcbiAgICAgICAgICAgICAgOiAoZCkgPT4gaW50ZXJ2YWwuY291bnQoMCwgZCkgJSBzdGVwID09PSAwKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIGludGVydmFsO1xufVxuIiwiaW1wb3J0IHt0aW1lSW50ZXJ2YWx9IGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBtaWxsaXNlY29uZCA9IHRpbWVJbnRlcnZhbCgoKSA9PiB7XG4gIC8vIG5vb3Bcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIGVuZCAtIHN0YXJ0O1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbm1pbGxpc2Vjb25kLmV2ZXJ5ID0gKGspID0+IHtcbiAgayA9IE1hdGguZmxvb3Ioayk7XG4gIGlmICghaXNGaW5pdGUoaykgfHwgIShrID4gMCkpIHJldHVybiBudWxsO1xuICBpZiAoIShrID4gMSkpIHJldHVybiBtaWxsaXNlY29uZDtcbiAgcmV0dXJuIHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICAgIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKGRhdGUgLyBrKSAqIGspO1xuICB9LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICAgIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBrKTtcbiAgfSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGs7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IG1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kLnJhbmdlO1xuIiwiZXhwb3J0IGNvbnN0IGR1cmF0aW9uU2Vjb25kID0gMTAwMDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbk1pbnV0ZSA9IGR1cmF0aW9uU2Vjb25kICogNjA7XG5leHBvcnQgY29uc3QgZHVyYXRpb25Ib3VyID0gZHVyYXRpb25NaW51dGUgKiA2MDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbkRheSA9IGR1cmF0aW9uSG91ciAqIDI0O1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uV2VlayA9IGR1cmF0aW9uRGF5ICogNztcbmV4cG9ydCBjb25zdCBkdXJhdGlvbk1vbnRoID0gZHVyYXRpb25EYXkgKiAzMDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvblllYXIgPSBkdXJhdGlvbkRheSAqIDM2NTtcbiIsImltcG9ydCB7dGltZUludGVydmFsfSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvblNlY29uZH0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxuZXhwb3J0IGNvbnN0IHNlY29uZCA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkpO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uU2Vjb25kKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25TZWNvbmQ7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRVVENTZWNvbmRzKCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHNlY29uZHMgPSBzZWNvbmQucmFuZ2U7XG4iLCJpbXBvcnQge3RpbWVJbnRlcnZhbH0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25NaW51dGUsIGR1cmF0aW9uU2Vjb25kfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG5leHBvcnQgY29uc3QgdGltZU1pbnV0ZSA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSBkYXRlLmdldFNlY29uZHMoKSAqIGR1cmF0aW9uU2Vjb25kKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uTWludXRlO1xufSwgKGRhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO1xufSk7XG5cbmV4cG9ydCBjb25zdCB0aW1lTWludXRlcyA9IHRpbWVNaW51dGUucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1dGNNaW51dGUgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRVVENTZWNvbmRzKDAsIDApO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uTWludXRlKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25NaW51dGU7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNaW51dGVzKCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHV0Y01pbnV0ZXMgPSB1dGNNaW51dGUucmFuZ2U7XG4iLCJpbXBvcnQge3RpbWVJbnRlcnZhbH0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25Ib3VyLCBkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25TZWNvbmR9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbmV4cG9ydCBjb25zdCB0aW1lSG91ciA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSBkYXRlLmdldFNlY29uZHMoKSAqIGR1cmF0aW9uU2Vjb25kIC0gZGF0ZS5nZXRNaW51dGVzKCkgKiBkdXJhdGlvbk1pbnV0ZSk7XG59LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25Ib3VyKTtcbn0sIChzdGFydCwgZW5kKSA9PiB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25Ib3VyO1xufSwgKGRhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0SG91cnMoKTtcbn0pO1xuXG5leHBvcnQgY29uc3QgdGltZUhvdXJzID0gdGltZUhvdXIucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1dGNIb3VyID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0VVRDTWludXRlcygwLCAwLCAwKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VGltZSgrZGF0ZSArIHN0ZXAgKiBkdXJhdGlvbkhvdXIpO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkhvdXI7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRVVENIb3VycygpO1xufSk7XG5cbmV4cG9ydCBjb25zdCB1dGNIb3VycyA9IHV0Y0hvdXIucmFuZ2U7XG4iLCJpbXBvcnQge3RpbWVJbnRlcnZhbH0gZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25EYXksIGR1cmF0aW9uTWludXRlfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG5leHBvcnQgY29uc3QgdGltZURheSA9IHRpbWVJbnRlcnZhbChcbiAgZGF0ZSA9PiBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApLFxuICAoZGF0ZSwgc3RlcCkgPT4gZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCksXG4gIChzdGFydCwgZW5kKSA9PiAoZW5kIC0gc3RhcnQgLSAoZW5kLmdldFRpbWV6b25lT2Zmc2V0KCkgLSBzdGFydC5nZXRUaW1lem9uZU9mZnNldCgpKSAqIGR1cmF0aW9uTWludXRlKSAvIGR1cmF0aW9uRGF5LFxuICBkYXRlID0+IGRhdGUuZ2V0RGF0ZSgpIC0gMVxuKTtcblxuZXhwb3J0IGNvbnN0IHRpbWVEYXlzID0gdGltZURheS5yYW5nZTtcblxuZXhwb3J0IGNvbnN0IHV0Y0RheSA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgc3RlcCk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uRGF5O1xufSwgKGRhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDRGF0ZSgpIC0gMTtcbn0pO1xuXG5leHBvcnQgY29uc3QgdXRjRGF5cyA9IHV0Y0RheS5yYW5nZTtcblxuZXhwb3J0IGNvbnN0IHVuaXhEYXkgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbkRheTtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBNYXRoLmZsb29yKGRhdGUgLyBkdXJhdGlvbkRheSk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHVuaXhEYXlzID0gdW5peERheS5yYW5nZTtcbiIsImltcG9ydCB7dGltZUludGVydmFsfSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25XZWVrfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG5mdW5jdGlvbiB0aW1lV2Vla2RheShpKSB7XG4gIHJldHVybiB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgLSAoZGF0ZS5nZXREYXkoKSArIDcgLSBpKSAlIDcpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIChkYXRlLCBzdGVwKSA9PiB7XG4gICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCAqIDcpO1xuICB9LCAoc3RhcnQsIGVuZCkgPT4ge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQgLSAoZW5kLmdldFRpbWV6b25lT2Zmc2V0KCkgLSBzdGFydC5nZXRUaW1lem9uZU9mZnNldCgpKSAqIGR1cmF0aW9uTWludXRlKSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCB0aW1lU3VuZGF5ID0gdGltZVdlZWtkYXkoMCk7XG5leHBvcnQgY29uc3QgdGltZU1vbmRheSA9IHRpbWVXZWVrZGF5KDEpO1xuZXhwb3J0IGNvbnN0IHRpbWVUdWVzZGF5ID0gdGltZVdlZWtkYXkoMik7XG5leHBvcnQgY29uc3QgdGltZVdlZG5lc2RheSA9IHRpbWVXZWVrZGF5KDMpO1xuZXhwb3J0IGNvbnN0IHRpbWVUaHVyc2RheSA9IHRpbWVXZWVrZGF5KDQpO1xuZXhwb3J0IGNvbnN0IHRpbWVGcmlkYXkgPSB0aW1lV2Vla2RheSg1KTtcbmV4cG9ydCBjb25zdCB0aW1lU2F0dXJkYXkgPSB0aW1lV2Vla2RheSg2KTtcblxuZXhwb3J0IGNvbnN0IHRpbWVTdW5kYXlzID0gdGltZVN1bmRheS5yYW5nZTtcbmV4cG9ydCBjb25zdCB0aW1lTW9uZGF5cyA9IHRpbWVNb25kYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdGltZVR1ZXNkYXlzID0gdGltZVR1ZXNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdGltZVdlZG5lc2RheXMgPSB0aW1lV2VkbmVzZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHRpbWVUaHVyc2RheXMgPSB0aW1lVGh1cnNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdGltZUZyaWRheXMgPSB0aW1lRnJpZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHRpbWVTYXR1cmRheXMgPSB0aW1lU2F0dXJkYXkucmFuZ2U7XG5cbmZ1bmN0aW9uIHV0Y1dlZWtkYXkoaSkge1xuICByZXR1cm4gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gICAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gKGRhdGUuZ2V0VVRDRGF5KCkgKyA3IC0gaSkgJSA3KTtcbiAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB9LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICAgIGRhdGUuc2V0VVRDRGF0ZShkYXRlLmdldFVUQ0RhdGUoKSArIHN0ZXAgKiA3KTtcbiAgfSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbmV4cG9ydCBjb25zdCB1dGNTdW5kYXkgPSB1dGNXZWVrZGF5KDApO1xuZXhwb3J0IGNvbnN0IHV0Y01vbmRheSA9IHV0Y1dlZWtkYXkoMSk7XG5leHBvcnQgY29uc3QgdXRjVHVlc2RheSA9IHV0Y1dlZWtkYXkoMik7XG5leHBvcnQgY29uc3QgdXRjV2VkbmVzZGF5ID0gdXRjV2Vla2RheSgzKTtcbmV4cG9ydCBjb25zdCB1dGNUaHVyc2RheSA9IHV0Y1dlZWtkYXkoNCk7XG5leHBvcnQgY29uc3QgdXRjRnJpZGF5ID0gdXRjV2Vla2RheSg1KTtcbmV4cG9ydCBjb25zdCB1dGNTYXR1cmRheSA9IHV0Y1dlZWtkYXkoNik7XG5cbmV4cG9ydCBjb25zdCB1dGNTdW5kYXlzID0gdXRjU3VuZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHV0Y01vbmRheXMgPSB1dGNNb25kYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdXRjVHVlc2RheXMgPSB1dGNUdWVzZGF5LnJhbmdlO1xuZXhwb3J0IGNvbnN0IHV0Y1dlZG5lc2RheXMgPSB1dGNXZWRuZXNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdXRjVGh1cnNkYXlzID0gdXRjVGh1cnNkYXkucmFuZ2U7XG5leHBvcnQgY29uc3QgdXRjRnJpZGF5cyA9IHV0Y0ZyaWRheS5yYW5nZTtcbmV4cG9ydCBjb25zdCB1dGNTYXR1cmRheXMgPSB1dGNTYXR1cmRheS5yYW5nZTtcbiIsImltcG9ydCB7dGltZUludGVydmFsfSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuXG5leHBvcnQgY29uc3QgdGltZU1vbnRoID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0RGF0ZSgxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0TW9udGgoZGF0ZS5nZXRNb250aCgpICsgc3RlcCk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gZW5kLmdldE1vbnRoKCkgLSBzdGFydC5nZXRNb250aCgpICsgKGVuZC5nZXRGdWxsWWVhcigpIC0gc3RhcnQuZ2V0RnVsbFllYXIoKSkgKiAxMjtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldE1vbnRoKCk7XG59KTtcblxuZXhwb3J0IGNvbnN0IHRpbWVNb250aHMgPSB0aW1lTW9udGgucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1dGNNb250aCA9IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICBkYXRlLnNldFVUQ0RhdGUoMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICBkYXRlLnNldFVUQ01vbnRoKGRhdGUuZ2V0VVRDTW9udGgoKSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIGVuZC5nZXRVVENNb250aCgpIC0gc3RhcnQuZ2V0VVRDTW9udGgoKSArIChlbmQuZ2V0VVRDRnVsbFllYXIoKSAtIHN0YXJ0LmdldFVUQ0Z1bGxZZWFyKCkpICogMTI7XG59LCAoZGF0ZSkgPT4ge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNb250aCgpO1xufSk7XG5cbmV4cG9ydCBjb25zdCB1dGNNb250aHMgPSB1dGNNb250aC5yYW5nZTtcbiIsImltcG9ydCB7dGltZUludGVydmFsfSBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuXG5leHBvcnQgY29uc3QgdGltZVllYXIgPSB0aW1lSW50ZXJ2YWwoKGRhdGUpID0+IHtcbiAgZGF0ZS5zZXRNb250aCgwLCAxKTtcbiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbn0sIChkYXRlLCBzdGVwKSA9PiB7XG4gIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgc3RlcCk7XG59LCAoc3RhcnQsIGVuZCkgPT4ge1xuICByZXR1cm4gZW5kLmdldEZ1bGxZZWFyKCkgLSBzdGFydC5nZXRGdWxsWWVhcigpO1xufSwgKGRhdGUpID0+IHtcbiAgcmV0dXJuIGRhdGUuZ2V0RnVsbFllYXIoKTtcbn0pO1xuXG4vLyBBbiBvcHRpbWl6ZWQgaW1wbGVtZW50YXRpb24gZm9yIHRoaXMgc2ltcGxlIGNhc2UuXG50aW1lWWVhci5ldmVyeSA9IChrKSA9PiB7XG4gIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICAgIGRhdGUuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldEZ1bGxZZWFyKCkgLyBrKSAqIGspO1xuICAgIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXAgKiBrKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdGltZVllYXJzID0gdGltZVllYXIucmFuZ2U7XG5cbmV4cG9ydCBjb25zdCB1dGNZZWFyID0gdGltZUludGVydmFsKChkYXRlKSA9PiB7XG4gIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG59LCAoZGF0ZSwgc3RlcCkgPT4ge1xuICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXApO1xufSwgKHN0YXJ0LCBlbmQpID0+IHtcbiAgcmV0dXJuIGVuZC5nZXRVVENGdWxsWWVhcigpIC0gc3RhcnQuZ2V0VVRDRnVsbFllYXIoKTtcbn0sIChkYXRlKSA9PiB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0Z1bGxZZWFyKCk7XG59KTtcblxuLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxudXRjWWVhci5ldmVyeSA9IChrKSA9PiB7XG4gIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IHRpbWVJbnRlcnZhbCgoZGF0ZSkgPT4ge1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldFVUQ0Z1bGxZZWFyKCkgLyBrKSAqIGspO1xuICAgIGRhdGUuc2V0VVRDTW9udGgoMCwgMSk7XG4gICAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgKGRhdGUsIHN0ZXApID0+IHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXAgKiBrKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgdXRjWWVhcnMgPSB1dGNZZWFyLnJhbmdlO1xuIiwiaW1wb3J0IHtiaXNlY3RvciwgdGlja1N0ZXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtkdXJhdGlvbkRheSwgZHVyYXRpb25Ib3VyLCBkdXJhdGlvbk1pbnV0ZSwgZHVyYXRpb25Nb250aCwgZHVyYXRpb25TZWNvbmQsIGR1cmF0aW9uV2VlaywgZHVyYXRpb25ZZWFyfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuaW1wb3J0IHttaWxsaXNlY29uZH0gZnJvbSBcIi4vbWlsbGlzZWNvbmQuanNcIjtcbmltcG9ydCB7c2Vjb25kfSBmcm9tIFwiLi9zZWNvbmQuanNcIjtcbmltcG9ydCB7dGltZU1pbnV0ZSwgdXRjTWludXRlfSBmcm9tIFwiLi9taW51dGUuanNcIjtcbmltcG9ydCB7dGltZUhvdXIsIHV0Y0hvdXJ9IGZyb20gXCIuL2hvdXIuanNcIjtcbmltcG9ydCB7dGltZURheSwgdW5peERheX0gZnJvbSBcIi4vZGF5LmpzXCI7XG5pbXBvcnQge3RpbWVTdW5kYXksIHV0Y1N1bmRheX0gZnJvbSBcIi4vd2Vlay5qc1wiO1xuaW1wb3J0IHt0aW1lTW9udGgsIHV0Y01vbnRofSBmcm9tIFwiLi9tb250aC5qc1wiO1xuaW1wb3J0IHt0aW1lWWVhciwgdXRjWWVhcn0gZnJvbSBcIi4veWVhci5qc1wiO1xuXG5mdW5jdGlvbiB0aWNrZXIoeWVhciwgbW9udGgsIHdlZWssIGRheSwgaG91ciwgbWludXRlKSB7XG5cbiAgY29uc3QgdGlja0ludGVydmFscyA9IFtcbiAgICBbc2Vjb25kLCAgMSwgICAgICBkdXJhdGlvblNlY29uZF0sXG4gICAgW3NlY29uZCwgIDUsICA1ICogZHVyYXRpb25TZWNvbmRdLFxuICAgIFtzZWNvbmQsIDE1LCAxNSAqIGR1cmF0aW9uU2Vjb25kXSxcbiAgICBbc2Vjb25kLCAzMCwgMzAgKiBkdXJhdGlvblNlY29uZF0sXG4gICAgW21pbnV0ZSwgIDEsICAgICAgZHVyYXRpb25NaW51dGVdLFxuICAgIFttaW51dGUsICA1LCAgNSAqIGR1cmF0aW9uTWludXRlXSxcbiAgICBbbWludXRlLCAxNSwgMTUgKiBkdXJhdGlvbk1pbnV0ZV0sXG4gICAgW21pbnV0ZSwgMzAsIDMwICogZHVyYXRpb25NaW51dGVdLFxuICAgIFsgIGhvdXIsICAxLCAgICAgIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICBob3VyLCAgMywgIDMgKiBkdXJhdGlvbkhvdXIgIF0sXG4gICAgWyAgaG91ciwgIDYsICA2ICogZHVyYXRpb25Ib3VyICBdLFxuICAgIFsgIGhvdXIsIDEyLCAxMiAqIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICAgZGF5LCAgMSwgICAgICBkdXJhdGlvbkRheSAgIF0sXG4gICAgWyAgIGRheSwgIDIsICAyICogZHVyYXRpb25EYXkgICBdLFxuICAgIFsgIHdlZWssICAxLCAgICAgIGR1cmF0aW9uV2VlayAgXSxcbiAgICBbIG1vbnRoLCAgMSwgICAgICBkdXJhdGlvbk1vbnRoIF0sXG4gICAgWyBtb250aCwgIDMsICAzICogZHVyYXRpb25Nb250aCBdLFxuICAgIFsgIHllYXIsICAxLCAgICAgIGR1cmF0aW9uWWVhciAgXVxuICBdO1xuXG4gIGZ1bmN0aW9uIHRpY2tzKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICAgIGNvbnN0IHJldmVyc2UgPSBzdG9wIDwgc3RhcnQ7XG4gICAgaWYgKHJldmVyc2UpIFtzdGFydCwgc3RvcF0gPSBbc3RvcCwgc3RhcnRdO1xuICAgIGNvbnN0IGludGVydmFsID0gY291bnQgJiYgdHlwZW9mIGNvdW50LnJhbmdlID09PSBcImZ1bmN0aW9uXCIgPyBjb3VudCA6IHRpY2tJbnRlcnZhbChzdGFydCwgc3RvcCwgY291bnQpO1xuICAgIGNvbnN0IHRpY2tzID0gaW50ZXJ2YWwgPyBpbnRlcnZhbC5yYW5nZShzdGFydCwgK3N0b3AgKyAxKSA6IFtdOyAvLyBpbmNsdXNpdmUgc3RvcFxuICAgIHJldHVybiByZXZlcnNlID8gdGlja3MucmV2ZXJzZSgpIDogdGlja3M7XG4gIH1cblxuICBmdW5jdGlvbiB0aWNrSW50ZXJ2YWwoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gTWF0aC5hYnMoc3RvcCAtIHN0YXJ0KSAvIGNvdW50O1xuICAgIGNvbnN0IGkgPSBiaXNlY3RvcigoWywsIHN0ZXBdKSA9PiBzdGVwKS5yaWdodCh0aWNrSW50ZXJ2YWxzLCB0YXJnZXQpO1xuICAgIGlmIChpID09PSB0aWNrSW50ZXJ2YWxzLmxlbmd0aCkgcmV0dXJuIHllYXIuZXZlcnkodGlja1N0ZXAoc3RhcnQgLyBkdXJhdGlvblllYXIsIHN0b3AgLyBkdXJhdGlvblllYXIsIGNvdW50KSk7XG4gICAgaWYgKGkgPT09IDApIHJldHVybiBtaWxsaXNlY29uZC5ldmVyeShNYXRoLm1heCh0aWNrU3RlcChzdGFydCwgc3RvcCwgY291bnQpLCAxKSk7XG4gICAgY29uc3QgW3QsIHN0ZXBdID0gdGlja0ludGVydmFsc1t0YXJnZXQgLyB0aWNrSW50ZXJ2YWxzW2kgLSAxXVsyXSA8IHRpY2tJbnRlcnZhbHNbaV1bMl0gLyB0YXJnZXQgPyBpIC0gMSA6IGldO1xuICAgIHJldHVybiB0LmV2ZXJ5KHN0ZXApO1xuICB9XG5cbiAgcmV0dXJuIFt0aWNrcywgdGlja0ludGVydmFsXTtcbn1cblxuY29uc3QgW3V0Y1RpY2tzLCB1dGNUaWNrSW50ZXJ2YWxdID0gdGlja2VyKHV0Y1llYXIsIHV0Y01vbnRoLCB1dGNTdW5kYXksIHVuaXhEYXksIHV0Y0hvdXIsIHV0Y01pbnV0ZSk7XG5jb25zdCBbdGltZVRpY2tzLCB0aW1lVGlja0ludGVydmFsXSA9IHRpY2tlcih0aW1lWWVhciwgdGltZU1vbnRoLCB0aW1lU3VuZGF5LCB0aW1lRGF5LCB0aW1lSG91ciwgdGltZU1pbnV0ZSk7XG5cbmV4cG9ydCB7dXRjVGlja3MsIHV0Y1RpY2tJbnRlcnZhbCwgdGltZVRpY2tzLCB0aW1lVGlja0ludGVydmFsfTtcbiIsImltcG9ydCB7XG4gIHRpbWVEYXksXG4gIHRpbWVTdW5kYXksXG4gIHRpbWVNb25kYXksXG4gIHRpbWVUaHVyc2RheSxcbiAgdGltZVllYXIsXG4gIHV0Y0RheSxcbiAgdXRjU3VuZGF5LFxuICB1dGNNb25kYXksXG4gIHV0Y1RodXJzZGF5LFxuICB1dGNZZWFyXG59IGZyb20gXCJkMy10aW1lXCI7XG5cbmZ1bmN0aW9uIGxvY2FsRGF0ZShkKSB7XG4gIGlmICgwIDw9IGQueSAmJiBkLnkgPCAxMDApIHtcbiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKC0xLCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKTtcbiAgICBkYXRlLnNldEZ1bGxZZWFyKGQueSk7XG4gICAgcmV0dXJuIGRhdGU7XG4gIH1cbiAgcmV0dXJuIG5ldyBEYXRlKGQueSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCk7XG59XG5cbmZ1bmN0aW9uIHV0Y0RhdGUoZCkge1xuICBpZiAoMCA8PSBkLnkgJiYgZC55IDwgMTAwKSB7XG4gICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQygtMSwgZC5tLCBkLmQsIGQuSCwgZC5NLCBkLlMsIGQuTCkpO1xuICAgIGRhdGUuc2V0VVRDRnVsbFllYXIoZC55KTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoZC55LCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKSk7XG59XG5cbmZ1bmN0aW9uIG5ld0RhdGUoeSwgbSwgZCkge1xuICByZXR1cm4ge3k6IHksIG06IG0sIGQ6IGQsIEg6IDAsIE06IDAsIFM6IDAsIEw6IDB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBmb3JtYXRMb2NhbGUobG9jYWxlKSB7XG4gIHZhciBsb2NhbGVfZGF0ZVRpbWUgPSBsb2NhbGUuZGF0ZVRpbWUsXG4gICAgICBsb2NhbGVfZGF0ZSA9IGxvY2FsZS5kYXRlLFxuICAgICAgbG9jYWxlX3RpbWUgPSBsb2NhbGUudGltZSxcbiAgICAgIGxvY2FsZV9wZXJpb2RzID0gbG9jYWxlLnBlcmlvZHMsXG4gICAgICBsb2NhbGVfd2Vla2RheXMgPSBsb2NhbGUuZGF5cyxcbiAgICAgIGxvY2FsZV9zaG9ydFdlZWtkYXlzID0gbG9jYWxlLnNob3J0RGF5cyxcbiAgICAgIGxvY2FsZV9tb250aHMgPSBsb2NhbGUubW9udGhzLFxuICAgICAgbG9jYWxlX3Nob3J0TW9udGhzID0gbG9jYWxlLnNob3J0TW9udGhzO1xuXG4gIHZhciBwZXJpb2RSZSA9IGZvcm1hdFJlKGxvY2FsZV9wZXJpb2RzKSxcbiAgICAgIHBlcmlvZExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfcGVyaW9kcyksXG4gICAgICB3ZWVrZGF5UmUgPSBmb3JtYXRSZShsb2NhbGVfd2Vla2RheXMpLFxuICAgICAgd2Vla2RheUxvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfd2Vla2RheXMpLFxuICAgICAgc2hvcnRXZWVrZGF5UmUgPSBmb3JtYXRSZShsb2NhbGVfc2hvcnRXZWVrZGF5cyksXG4gICAgICBzaG9ydFdlZWtkYXlMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX3Nob3J0V2Vla2RheXMpLFxuICAgICAgbW9udGhSZSA9IGZvcm1hdFJlKGxvY2FsZV9tb250aHMpLFxuICAgICAgbW9udGhMb29rdXAgPSBmb3JtYXRMb29rdXAobG9jYWxlX21vbnRocyksXG4gICAgICBzaG9ydE1vbnRoUmUgPSBmb3JtYXRSZShsb2NhbGVfc2hvcnRNb250aHMpLFxuICAgICAgc2hvcnRNb250aExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfc2hvcnRNb250aHMpO1xuXG4gIHZhciBmb3JtYXRzID0ge1xuICAgIFwiYVwiOiBmb3JtYXRTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IGZvcm1hdFdlZWtkYXksXG4gICAgXCJiXCI6IGZvcm1hdFNob3J0TW9udGgsXG4gICAgXCJCXCI6IGZvcm1hdE1vbnRoLFxuICAgIFwiY1wiOiBudWxsLFxuICAgIFwiZFwiOiBmb3JtYXREYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBmb3JtYXREYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBmb3JtYXRNaWNyb3NlY29uZHMsXG4gICAgXCJnXCI6IGZvcm1hdFllYXJJU08sXG4gICAgXCJHXCI6IGZvcm1hdEZ1bGxZZWFySVNPLFxuICAgIFwiSFwiOiBmb3JtYXRIb3VyMjQsXG4gICAgXCJJXCI6IGZvcm1hdEhvdXIxMixcbiAgICBcImpcIjogZm9ybWF0RGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBmb3JtYXRNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IGZvcm1hdE1vbnRoTnVtYmVyLFxuICAgIFwiTVwiOiBmb3JtYXRNaW51dGVzLFxuICAgIFwicFwiOiBmb3JtYXRQZXJpb2QsXG4gICAgXCJxXCI6IGZvcm1hdFF1YXJ0ZXIsXG4gICAgXCJRXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXAsXG4gICAgXCJzXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBmb3JtYXRTZWNvbmRzLFxuICAgIFwidVwiOiBmb3JtYXRXZWVrZGF5TnVtYmVyTW9uZGF5LFxuICAgIFwiVVwiOiBmb3JtYXRXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBmb3JtYXRXZWVrTnVtYmVySVNPLFxuICAgIFwid1wiOiBmb3JtYXRXZWVrZGF5TnVtYmVyU3VuZGF5LFxuICAgIFwiV1wiOiBmb3JtYXRXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBudWxsLFxuICAgIFwiWFwiOiBudWxsLFxuICAgIFwieVwiOiBmb3JtYXRZZWFyLFxuICAgIFwiWVwiOiBmb3JtYXRGdWxsWWVhcixcbiAgICBcIlpcIjogZm9ybWF0Wm9uZSxcbiAgICBcIiVcIjogZm9ybWF0TGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICB2YXIgdXRjRm9ybWF0cyA9IHtcbiAgICBcImFcIjogZm9ybWF0VVRDU2hvcnRXZWVrZGF5LFxuICAgIFwiQVwiOiBmb3JtYXRVVENXZWVrZGF5LFxuICAgIFwiYlwiOiBmb3JtYXRVVENTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBmb3JtYXRVVENNb250aCxcbiAgICBcImNcIjogbnVsbCxcbiAgICBcImRcIjogZm9ybWF0VVRDRGF5T2ZNb250aCxcbiAgICBcImVcIjogZm9ybWF0VVRDRGF5T2ZNb250aCxcbiAgICBcImZcIjogZm9ybWF0VVRDTWljcm9zZWNvbmRzLFxuICAgIFwiZ1wiOiBmb3JtYXRVVENZZWFySVNPLFxuICAgIFwiR1wiOiBmb3JtYXRVVENGdWxsWWVhcklTTyxcbiAgICBcIkhcIjogZm9ybWF0VVRDSG91cjI0LFxuICAgIFwiSVwiOiBmb3JtYXRVVENIb3VyMTIsXG4gICAgXCJqXCI6IGZvcm1hdFVUQ0RheU9mWWVhcixcbiAgICBcIkxcIjogZm9ybWF0VVRDTWlsbGlzZWNvbmRzLFxuICAgIFwibVwiOiBmb3JtYXRVVENNb250aE51bWJlcixcbiAgICBcIk1cIjogZm9ybWF0VVRDTWludXRlcyxcbiAgICBcInBcIjogZm9ybWF0VVRDUGVyaW9kLFxuICAgIFwicVwiOiBmb3JtYXRVVENRdWFydGVyLFxuICAgIFwiUVwiOiBmb3JtYXRVbml4VGltZXN0YW1wLFxuICAgIFwic1wiOiBmb3JtYXRVbml4VGltZXN0YW1wU2Vjb25kcyxcbiAgICBcIlNcIjogZm9ybWF0VVRDU2Vjb25kcyxcbiAgICBcInVcIjogZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheSxcbiAgICBcIlVcIjogZm9ybWF0VVRDV2Vla051bWJlclN1bmRheSxcbiAgICBcIlZcIjogZm9ybWF0VVRDV2Vla051bWJlcklTTyxcbiAgICBcIndcIjogZm9ybWF0VVRDV2Vla2RheU51bWJlclN1bmRheSxcbiAgICBcIldcIjogZm9ybWF0VVRDV2Vla051bWJlck1vbmRheSxcbiAgICBcInhcIjogbnVsbCxcbiAgICBcIlhcIjogbnVsbCxcbiAgICBcInlcIjogZm9ybWF0VVRDWWVhcixcbiAgICBcIllcIjogZm9ybWF0VVRDRnVsbFllYXIsXG4gICAgXCJaXCI6IGZvcm1hdFVUQ1pvbmUsXG4gICAgXCIlXCI6IGZvcm1hdExpdGVyYWxQZXJjZW50XG4gIH07XG5cbiAgdmFyIHBhcnNlcyA9IHtcbiAgICBcImFcIjogcGFyc2VTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IHBhcnNlV2Vla2RheSxcbiAgICBcImJcIjogcGFyc2VTaG9ydE1vbnRoLFxuICAgIFwiQlwiOiBwYXJzZU1vbnRoLFxuICAgIFwiY1wiOiBwYXJzZUxvY2FsZURhdGVUaW1lLFxuICAgIFwiZFwiOiBwYXJzZURheU9mTW9udGgsXG4gICAgXCJlXCI6IHBhcnNlRGF5T2ZNb250aCxcbiAgICBcImZcIjogcGFyc2VNaWNyb3NlY29uZHMsXG4gICAgXCJnXCI6IHBhcnNlWWVhcixcbiAgICBcIkdcIjogcGFyc2VGdWxsWWVhcixcbiAgICBcIkhcIjogcGFyc2VIb3VyMjQsXG4gICAgXCJJXCI6IHBhcnNlSG91cjI0LFxuICAgIFwialwiOiBwYXJzZURheU9mWWVhcixcbiAgICBcIkxcIjogcGFyc2VNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IHBhcnNlTW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IHBhcnNlTWludXRlcyxcbiAgICBcInBcIjogcGFyc2VQZXJpb2QsXG4gICAgXCJxXCI6IHBhcnNlUXVhcnRlcixcbiAgICBcIlFcIjogcGFyc2VVbml4VGltZXN0YW1wLFxuICAgIFwic1wiOiBwYXJzZVVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBwYXJzZVNlY29uZHMsXG4gICAgXCJ1XCI6IHBhcnNlV2Vla2RheU51bWJlck1vbmRheSxcbiAgICBcIlVcIjogcGFyc2VXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBwYXJzZVdlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IHBhcnNlV2Vla2RheU51bWJlclN1bmRheSxcbiAgICBcIldcIjogcGFyc2VXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBwYXJzZUxvY2FsZURhdGUsXG4gICAgXCJYXCI6IHBhcnNlTG9jYWxlVGltZSxcbiAgICBcInlcIjogcGFyc2VZZWFyLFxuICAgIFwiWVwiOiBwYXJzZUZ1bGxZZWFyLFxuICAgIFwiWlwiOiBwYXJzZVpvbmUsXG4gICAgXCIlXCI6IHBhcnNlTGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICAvLyBUaGVzZSByZWN1cnNpdmUgZGlyZWN0aXZlIGRlZmluaXRpb25zIG11c3QgYmUgZGVmZXJyZWQuXG4gIGZvcm1hdHMueCA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuWCA9IG5ld0Zvcm1hdChsb2NhbGVfdGltZSwgZm9ybWF0cyk7XG4gIGZvcm1hdHMuYyA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZVRpbWUsIGZvcm1hdHMpO1xuICB1dGNGb3JtYXRzLnggPSBuZXdGb3JtYXQobG9jYWxlX2RhdGUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLlggPSBuZXdGb3JtYXQobG9jYWxlX3RpbWUsIHV0Y0Zvcm1hdHMpO1xuICB1dGNGb3JtYXRzLmMgPSBuZXdGb3JtYXQobG9jYWxlX2RhdGVUaW1lLCB1dGNGb3JtYXRzKTtcblxuICBmdW5jdGlvbiBuZXdGb3JtYXQoc3BlY2lmaWVyLCBmb3JtYXRzKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGRhdGUpIHtcbiAgICAgIHZhciBzdHJpbmcgPSBbXSxcbiAgICAgICAgICBpID0gLTEsXG4gICAgICAgICAgaiA9IDAsXG4gICAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgICAgYyxcbiAgICAgICAgICBwYWQsXG4gICAgICAgICAgZm9ybWF0O1xuXG4gICAgICBpZiAoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIGRhdGUgPSBuZXcgRGF0ZSgrZGF0ZSk7XG5cbiAgICAgIHdoaWxlICgrK2kgPCBuKSB7XG4gICAgICAgIGlmIChzcGVjaWZpZXIuY2hhckNvZGVBdChpKSA9PT0gMzcpIHtcbiAgICAgICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgICAgIGlmICgocGFkID0gcGFkc1tjID0gc3BlY2lmaWVyLmNoYXJBdCgrK2kpXSkgIT0gbnVsbCkgYyA9IHNwZWNpZmllci5jaGFyQXQoKytpKTtcbiAgICAgICAgICBlbHNlIHBhZCA9IGMgPT09IFwiZVwiID8gXCIgXCIgOiBcIjBcIjtcbiAgICAgICAgICBpZiAoZm9ybWF0ID0gZm9ybWF0c1tjXSkgYyA9IGZvcm1hdChkYXRlLCBwYWQpO1xuICAgICAgICAgIHN0cmluZy5wdXNoKGMpO1xuICAgICAgICAgIGogPSBpICsgMTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBzdHJpbmcucHVzaChzcGVjaWZpZXIuc2xpY2UoaiwgaSkpO1xuICAgICAgcmV0dXJuIHN0cmluZy5qb2luKFwiXCIpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBuZXdQYXJzZShzcGVjaWZpZXIsIFopIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oc3RyaW5nKSB7XG4gICAgICB2YXIgZCA9IG5ld0RhdGUoMTkwMCwgdW5kZWZpbmVkLCAxKSxcbiAgICAgICAgICBpID0gcGFyc2VTcGVjaWZpZXIoZCwgc3BlY2lmaWVyLCBzdHJpbmcgKz0gXCJcIiwgMCksXG4gICAgICAgICAgd2VlaywgZGF5O1xuICAgICAgaWYgKGkgIT0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIG51bGw7XG5cbiAgICAgIC8vIElmIGEgVU5JWCB0aW1lc3RhbXAgaXMgc3BlY2lmaWVkLCByZXR1cm4gaXQuXG4gICAgICBpZiAoXCJRXCIgaW4gZCkgcmV0dXJuIG5ldyBEYXRlKGQuUSk7XG4gICAgICBpZiAoXCJzXCIgaW4gZCkgcmV0dXJuIG5ldyBEYXRlKGQucyAqIDEwMDAgKyAoXCJMXCIgaW4gZCA/IGQuTCA6IDApKTtcblxuICAgICAgLy8gSWYgdGhpcyBpcyB1dGNQYXJzZSwgbmV2ZXIgdXNlIHRoZSBsb2NhbCB0aW1lem9uZS5cbiAgICAgIGlmIChaICYmICEoXCJaXCIgaW4gZCkpIGQuWiA9IDA7XG5cbiAgICAgIC8vIFRoZSBhbS1wbSBmbGFnIGlzIDAgZm9yIEFNLCBhbmQgMSBmb3IgUE0uXG4gICAgICBpZiAoXCJwXCIgaW4gZCkgZC5IID0gZC5IICUgMTIgKyBkLnAgKiAxMjtcblxuICAgICAgLy8gSWYgdGhlIG1vbnRoIHdhcyBub3Qgc3BlY2lmaWVkLCBpbmhlcml0IGZyb20gdGhlIHF1YXJ0ZXIuXG4gICAgICBpZiAoZC5tID09PSB1bmRlZmluZWQpIGQubSA9IFwicVwiIGluIGQgPyBkLnEgOiAwO1xuXG4gICAgICAvLyBDb252ZXJ0IGRheS1vZi13ZWVrIGFuZCB3ZWVrLW9mLXllYXIgdG8gZGF5LW9mLXllYXIuXG4gICAgICBpZiAoXCJWXCIgaW4gZCkge1xuICAgICAgICBpZiAoZC5WIDwgMSB8fCBkLlYgPiA1MykgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmICghKFwid1wiIGluIGQpKSBkLncgPSAxO1xuICAgICAgICBpZiAoXCJaXCIgaW4gZCkge1xuICAgICAgICAgIHdlZWsgPSB1dGNEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSksIGRheSA9IHdlZWsuZ2V0VVRDRGF5KCk7XG4gICAgICAgICAgd2VlayA9IGRheSA+IDQgfHwgZGF5ID09PSAwID8gdXRjTW9uZGF5LmNlaWwod2VlaykgOiB1dGNNb25kYXkod2Vlayk7XG4gICAgICAgICAgd2VlayA9IHV0Y0RheS5vZmZzZXQod2VlaywgKGQuViAtIDEpICogNyk7XG4gICAgICAgICAgZC55ID0gd2Vlay5nZXRVVENGdWxsWWVhcigpO1xuICAgICAgICAgIGQubSA9IHdlZWsuZ2V0VVRDTW9udGgoKTtcbiAgICAgICAgICBkLmQgPSB3ZWVrLmdldFVUQ0RhdGUoKSArIChkLncgKyA2KSAlIDc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd2VlayA9IGxvY2FsRGF0ZShuZXdEYXRlKGQueSwgMCwgMSkpLCBkYXkgPSB3ZWVrLmdldERheSgpO1xuICAgICAgICAgIHdlZWsgPSBkYXkgPiA0IHx8IGRheSA9PT0gMCA/IHRpbWVNb25kYXkuY2VpbCh3ZWVrKSA6IHRpbWVNb25kYXkod2Vlayk7XG4gICAgICAgICAgd2VlayA9IHRpbWVEYXkub2Zmc2V0KHdlZWssIChkLlYgLSAxKSAqIDcpO1xuICAgICAgICAgIGQueSA9IHdlZWsuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICBkLm0gPSB3ZWVrLmdldE1vbnRoKCk7XG4gICAgICAgICAgZC5kID0gd2Vlay5nZXREYXRlKCkgKyAoZC53ICsgNikgJSA3O1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFwiV1wiIGluIGQgfHwgXCJVXCIgaW4gZCkge1xuICAgICAgICBpZiAoIShcIndcIiBpbiBkKSkgZC53ID0gXCJ1XCIgaW4gZCA/IGQudSAlIDcgOiBcIldcIiBpbiBkID8gMSA6IDA7XG4gICAgICAgIGRheSA9IFwiWlwiIGluIGQgPyB1dGNEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSkuZ2V0VVRDRGF5KCkgOiBsb2NhbERhdGUobmV3RGF0ZShkLnksIDAsIDEpKS5nZXREYXkoKTtcbiAgICAgICAgZC5tID0gMDtcbiAgICAgICAgZC5kID0gXCJXXCIgaW4gZCA/IChkLncgKyA2KSAlIDcgKyBkLlcgKiA3IC0gKGRheSArIDUpICUgNyA6IGQudyArIGQuVSAqIDcgLSAoZGF5ICsgNikgJSA3O1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBhIHRpbWUgem9uZSBpcyBzcGVjaWZpZWQsIGFsbCBmaWVsZHMgYXJlIGludGVycHJldGVkIGFzIFVUQyBhbmQgdGhlblxuICAgICAgLy8gb2Zmc2V0IGFjY29yZGluZyB0byB0aGUgc3BlY2lmaWVkIHRpbWUgem9uZS5cbiAgICAgIGlmIChcIlpcIiBpbiBkKSB7XG4gICAgICAgIGQuSCArPSBkLlogLyAxMDAgfCAwO1xuICAgICAgICBkLk0gKz0gZC5aICUgMTAwO1xuICAgICAgICByZXR1cm4gdXRjRGF0ZShkKTtcbiAgICAgIH1cblxuICAgICAgLy8gT3RoZXJ3aXNlLCBhbGwgZmllbGRzIGFyZSBpbiBsb2NhbCB0aW1lLlxuICAgICAgcmV0dXJuIGxvY2FsRGF0ZShkKTtcbiAgICB9O1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTcGVjaWZpZXIoZCwgc3BlY2lmaWVyLCBzdHJpbmcsIGopIHtcbiAgICB2YXIgaSA9IDAsXG4gICAgICAgIG4gPSBzcGVjaWZpZXIubGVuZ3RoLFxuICAgICAgICBtID0gc3RyaW5nLmxlbmd0aCxcbiAgICAgICAgYyxcbiAgICAgICAgcGFyc2U7XG5cbiAgICB3aGlsZSAoaSA8IG4pIHtcbiAgICAgIGlmIChqID49IG0pIHJldHVybiAtMTtcbiAgICAgIGMgPSBzcGVjaWZpZXIuY2hhckNvZGVBdChpKyspO1xuICAgICAgaWYgKGMgPT09IDM3KSB7XG4gICAgICAgIGMgPSBzcGVjaWZpZXIuY2hhckF0KGkrKyk7XG4gICAgICAgIHBhcnNlID0gcGFyc2VzW2MgaW4gcGFkcyA/IHNwZWNpZmllci5jaGFyQXQoaSsrKSA6IGNdO1xuICAgICAgICBpZiAoIXBhcnNlIHx8ICgoaiA9IHBhcnNlKGQsIHN0cmluZywgaikpIDwgMCkpIHJldHVybiAtMTtcbiAgICAgIH0gZWxzZSBpZiAoYyAhPSBzdHJpbmcuY2hhckNvZGVBdChqKyspKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gajtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlUGVyaW9kKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gcGVyaW9kUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQucCA9IHBlcmlvZExvb2t1cC5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTaG9ydFdlZWtkYXkoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBzaG9ydFdlZWtkYXlSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC53ID0gc2hvcnRXZWVrZGF5TG9va3VwLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVdlZWtkYXkoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSB3ZWVrZGF5UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQudyA9IHdlZWtkYXlMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlU2hvcnRNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHNob3J0TW9udGhSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5tID0gc2hvcnRNb250aExvb2t1cC5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IG1vbnRoUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICAgIHJldHVybiBuID8gKGQubSA9IG1vbnRoTG9va3VwLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfZGF0ZVRpbWUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZURhdGUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV9kYXRlLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VMb2NhbGVUaW1lKGQsIHN0cmluZywgaSkge1xuICAgIHJldHVybiBwYXJzZVNwZWNpZmllcihkLCBsb2NhbGVfdGltZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0RGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldERheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFNob3J0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldE1vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UGVyaW9kKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldEhvdXJzKCkgPj0gMTIpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFF1YXJ0ZXIoZCkge1xuICAgIHJldHVybiAxICsgfn4oZC5nZXRNb250aCgpIC8gMyk7XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENTaG9ydFdlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRXZWVrZGF5c1tkLmdldFVUQ0RheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtkYXkoZCkge1xuICAgIHJldHVybiBsb2NhbGVfd2Vla2RheXNbZC5nZXRVVENEYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENTaG9ydE1vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0TW9udGhzW2QuZ2V0VVRDTW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9tb250aHNbZC5nZXRVVENNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1BlcmlvZChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9wZXJpb2RzWysoZC5nZXRVVENIb3VycygpID49IDEyKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRVVENRdWFydGVyKGQpIHtcbiAgICByZXR1cm4gMSArIH5+KGQuZ2V0VVRDTW9udGgoKSAvIDMpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBmb3JtYXQ6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIGYgPSBuZXdGb3JtYXQoc3BlY2lmaWVyICs9IFwiXCIsIGZvcm1hdHMpO1xuICAgICAgZi50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIGY7XG4gICAgfSxcbiAgICBwYXJzZTogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgcCA9IG5ld1BhcnNlKHNwZWNpZmllciArPSBcIlwiLCBmYWxzZSk7XG4gICAgICBwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gcDtcbiAgICB9LFxuICAgIHV0Y0Zvcm1hdDogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgZiA9IG5ld0Zvcm1hdChzcGVjaWZpZXIgKz0gXCJcIiwgdXRjRm9ybWF0cyk7XG4gICAgICBmLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gZjtcbiAgICB9LFxuICAgIHV0Y1BhcnNlOiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBwID0gbmV3UGFyc2Uoc3BlY2lmaWVyICs9IFwiXCIsIHRydWUpO1xuICAgICAgcC50b1N0cmluZyA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gc3BlY2lmaWVyOyB9O1xuICAgICAgcmV0dXJuIHA7XG4gICAgfVxuICB9O1xufVxuXG52YXIgcGFkcyA9IHtcIi1cIjogXCJcIiwgXCJfXCI6IFwiIFwiLCBcIjBcIjogXCIwXCJ9LFxuICAgIG51bWJlclJlID0gL15cXHMqXFxkKy8sIC8vIG5vdGU6IGlnbm9yZXMgbmV4dCBkaXJlY3RpdmVcbiAgICBwZXJjZW50UmUgPSAvXiUvLFxuICAgIHJlcXVvdGVSZSA9IC9bXFxcXF4kKis/fFtcXF0oKS57fV0vZztcblxuZnVuY3Rpb24gcGFkKHZhbHVlLCBmaWxsLCB3aWR0aCkge1xuICB2YXIgc2lnbiA9IHZhbHVlIDwgMCA/IFwiLVwiIDogXCJcIixcbiAgICAgIHN0cmluZyA9IChzaWduID8gLXZhbHVlIDogdmFsdWUpICsgXCJcIixcbiAgICAgIGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG4gIHJldHVybiBzaWduICsgKGxlbmd0aCA8IHdpZHRoID8gbmV3IEFycmF5KHdpZHRoIC0gbGVuZ3RoICsgMSkuam9pbihmaWxsKSArIHN0cmluZyA6IHN0cmluZyk7XG59XG5cbmZ1bmN0aW9uIHJlcXVvdGUocykge1xuICByZXR1cm4gcy5yZXBsYWNlKHJlcXVvdGVSZSwgXCJcXFxcJCZcIik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFJlKG5hbWVzKSB7XG4gIHJldHVybiBuZXcgUmVnRXhwKFwiXig/OlwiICsgbmFtZXMubWFwKHJlcXVvdGUpLmpvaW4oXCJ8XCIpICsgXCIpXCIsIFwiaVwiKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TG9va3VwKG5hbWVzKSB7XG4gIHJldHVybiBuZXcgTWFwKG5hbWVzLm1hcCgobmFtZSwgaSkgPT4gW25hbWUudG9Mb3dlckNhc2UoKSwgaV0pKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrZGF5TnVtYmVyU3VuZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gKGQudyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla2RheU51bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMSkpO1xuICByZXR1cm4gbiA/IChkLnUgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJTdW5kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5VID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVySVNPKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuViA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla051bWJlck1vbmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlcgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUZ1bGxZZWFyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA0KSk7XG4gIHJldHVybiBuID8gKGQueSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLnkgPSArblswXSArICgrblswXSA+IDY4ID8gMTkwMCA6IDIwMDApLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlWm9uZShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSAvXihaKXwoWystXVxcZFxcZCkoPzo6PyhcXGRcXGQpKT8vLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA2KSk7XG4gIHJldHVybiBuID8gKGQuWiA9IG5bMV0gPyAwIDogLShuWzJdICsgKG5bM10gfHwgXCIwMFwiKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VRdWFydGVyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gKGQucSA9IG5bMF0gKiAzIC0gMywgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1vbnRoTnVtYmVyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQubSA9IG5bMF0gLSAxLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF5T2ZNb250aChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLmQgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZURheU9mWWVhcihkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMykpO1xuICByZXR1cm4gbiA/IChkLm0gPSAwLCBkLmQgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZUhvdXIyNChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLkggPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZU1pbnV0ZXMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5NID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VTZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuUyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWlsbGlzZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAzKSk7XG4gIHJldHVybiBuID8gKGQuTCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWljcm9zZWNvbmRzKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyA2KSk7XG4gIHJldHVybiBuID8gKGQuTCA9IE1hdGguZmxvb3IoblswXSAvIDEwMDApLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTGl0ZXJhbFBlcmNlbnQoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gcGVyY2VudFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gaSArIG5bMF0ubGVuZ3RoIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVW5peFRpbWVzdGFtcChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gIHJldHVybiBuID8gKGQuUSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlVW5peFRpbWVzdGFtcFNlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSkpO1xuICByZXR1cm4gbiA/IChkLnMgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBmb3JtYXREYXlPZk1vbnRoKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldERhdGUoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEhvdXIyNChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRIb3VycygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SG91cjEyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEhvdXJzKCkgJSAxMiB8fCAxMiwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERheU9mWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoMSArIHRpbWVEYXkuY291bnQodGltZVllYXIoZCksIGQpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TWlsbGlzZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldE1pbGxpc2Vjb25kcygpLCBwLCAzKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TWljcm9zZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIGZvcm1hdE1pbGxpc2Vjb25kcyhkLCBwKSArIFwiMDAwXCI7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdE1vbnRoTnVtYmVyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldE1vbnRoKCkgKyAxLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TWludXRlcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRNaW51dGVzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRTZWNvbmRzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFNlY29uZHMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXkoZCkge1xuICB2YXIgZGF5ID0gZC5nZXREYXkoKTtcbiAgcmV0dXJuIGRheSA9PT0gMCA/IDcgOiBkYXk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJTdW5kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHRpbWVTdW5kYXkuY291bnQodGltZVllYXIoZCkgLSAxLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGRJU08oZCkge1xuICB2YXIgZGF5ID0gZC5nZXREYXkoKTtcbiAgcmV0dXJuIChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdGltZVRodXJzZGF5KGQpIDogdGltZVRodXJzZGF5LmNlaWwoZCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtOdW1iZXJJU08oZCwgcCkge1xuICBkID0gZElTTyhkKTtcbiAgcmV0dXJuIHBhZCh0aW1lVGh1cnNkYXkuY291bnQodGltZVllYXIoZCksIGQpICsgKHRpbWVZZWFyKGQpLmdldERheSgpID09PSA0KSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXkoZCkge1xuICByZXR1cm4gZC5nZXREYXkoKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlck1vbmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodGltZU1vbmRheS5jb3VudCh0aW1lWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0WWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0WWVhcklTTyhkLCBwKSB7XG4gIGQgPSBkSVNPKGQpO1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZ1bGxZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEZ1bGxZZWFyKCkgJSAxMDAwMCwgcCwgNCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZ1bGxZZWFySVNPKGQsIHApIHtcbiAgdmFyIGRheSA9IGQuZ2V0RGF5KCk7XG4gIGQgPSAoZGF5ID49IDQgfHwgZGF5ID09PSAwKSA/IHRpbWVUaHVyc2RheShkKSA6IHRpbWVUaHVyc2RheS5jZWlsKGQpO1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0Wm9uZShkKSB7XG4gIHZhciB6ID0gZC5nZXRUaW1lem9uZU9mZnNldCgpO1xuICByZXR1cm4gKHogPiAwID8gXCItXCIgOiAoeiAqPSAtMSwgXCIrXCIpKVxuICAgICAgKyBwYWQoeiAvIDYwIHwgMCwgXCIwXCIsIDIpXG4gICAgICArIHBhZCh6ICUgNjAsIFwiMFwiLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRGF5T2ZNb250aChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENEYXRlKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENIb3VyMjQoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDSG91cnMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0hvdXIxMihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENIb3VycygpICUgMTIgfHwgMTIsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENEYXlPZlllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKDEgKyB1dGNEYXkuY291bnQodXRjWWVhcihkKSwgZCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWxsaXNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaWNyb3NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gZm9ybWF0VVRDTWlsbGlzZWNvbmRzKGQsIHApICsgXCIwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDTW9udGhOdW1iZXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTW9udGgoKSArIDEsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNaW51dGVzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ01pbnV0ZXMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDU2Vjb25kcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheShkKSB7XG4gIHZhciBkb3cgPSBkLmdldFVUQ0RheSgpO1xuICByZXR1cm4gZG93ID09PSAwID8gNyA6IGRvdztcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlclN1bmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodXRjU3VuZGF5LmNvdW50KHV0Y1llYXIoZCkgLSAxLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIFVUQ2RJU08oZCkge1xuICB2YXIgZGF5ID0gZC5nZXRVVENEYXkoKTtcbiAgcmV0dXJuIChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdXRjVGh1cnNkYXkoZCkgOiB1dGNUaHVyc2RheS5jZWlsKGQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrTnVtYmVySVNPKGQsIHApIHtcbiAgZCA9IFVUQ2RJU08oZCk7XG4gIHJldHVybiBwYWQodXRjVGh1cnNkYXkuY291bnQodXRjWWVhcihkKSwgZCkgKyAodXRjWWVhcihkKS5nZXRVVENEYXkoKSA9PT0gNCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5KGQpIHtcbiAgcmV0dXJuIGQuZ2V0VVRDRGF5KCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJNb25kYXkoZCwgcCkge1xuICByZXR1cm4gcGFkKHV0Y01vbmRheS5jb3VudCh1dGNZZWFyKGQpIC0gMSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENZZWFySVNPKGQsIHApIHtcbiAgZCA9IFVUQ2RJU08oZCk7XG4gIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRnVsbFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDRnVsbFllYXJJU08oZCwgcCkge1xuICB2YXIgZGF5ID0gZC5nZXRVVENEYXkoKTtcbiAgZCA9IChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdXRjVGh1cnNkYXkoZCkgOiB1dGNUaHVyc2RheS5jZWlsKGQpO1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDWm9uZSgpIHtcbiAgcmV0dXJuIFwiKzAwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TGl0ZXJhbFBlcmNlbnQoKSB7XG4gIHJldHVybiBcIiVcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VW5peFRpbWVzdGFtcChkKSB7XG4gIHJldHVybiArZDtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMoZCkge1xuICByZXR1cm4gTWF0aC5mbG9vcigrZCAvIDEwMDApO1xufVxuIiwiaW1wb3J0IGZvcm1hdExvY2FsZSBmcm9tIFwiLi9sb2NhbGUuanNcIjtcblxudmFyIGxvY2FsZTtcbmV4cG9ydCB2YXIgdGltZUZvcm1hdDtcbmV4cG9ydCB2YXIgdGltZVBhcnNlO1xuZXhwb3J0IHZhciB1dGNGb3JtYXQ7XG5leHBvcnQgdmFyIHV0Y1BhcnNlO1xuXG5kZWZhdWx0TG9jYWxlKHtcbiAgZGF0ZVRpbWU6IFwiJXgsICVYXCIsXG4gIGRhdGU6IFwiJS1tLyUtZC8lWVwiLFxuICB0aW1lOiBcIiUtSTolTTolUyAlcFwiLFxuICBwZXJpb2RzOiBbXCJBTVwiLCBcIlBNXCJdLFxuICBkYXlzOiBbXCJTdW5kYXlcIiwgXCJNb25kYXlcIiwgXCJUdWVzZGF5XCIsIFwiV2VkbmVzZGF5XCIsIFwiVGh1cnNkYXlcIiwgXCJGcmlkYXlcIiwgXCJTYXR1cmRheVwiXSxcbiAgc2hvcnREYXlzOiBbXCJTdW5cIiwgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIl0sXG4gIG1vbnRoczogW1wiSmFudWFyeVwiLCBcIkZlYnJ1YXJ5XCIsIFwiTWFyY2hcIiwgXCJBcHJpbFwiLCBcIk1heVwiLCBcIkp1bmVcIiwgXCJKdWx5XCIsIFwiQXVndXN0XCIsIFwiU2VwdGVtYmVyXCIsIFwiT2N0b2JlclwiLCBcIk5vdmVtYmVyXCIsIFwiRGVjZW1iZXJcIl0sXG4gIHNob3J0TW9udGhzOiBbXCJKYW5cIiwgXCJGZWJcIiwgXCJNYXJcIiwgXCJBcHJcIiwgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIiwgXCJBdWdcIiwgXCJTZXBcIiwgXCJPY3RcIiwgXCJOb3ZcIiwgXCJEZWNcIl1cbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWZhdWx0TG9jYWxlKGRlZmluaXRpb24pIHtcbiAgbG9jYWxlID0gZm9ybWF0TG9jYWxlKGRlZmluaXRpb24pO1xuICB0aW1lRm9ybWF0ID0gbG9jYWxlLmZvcm1hdDtcbiAgdGltZVBhcnNlID0gbG9jYWxlLnBhcnNlO1xuICB1dGNGb3JtYXQgPSBsb2NhbGUudXRjRm9ybWF0O1xuICB1dGNQYXJzZSA9IGxvY2FsZS51dGNQYXJzZTtcbiAgcmV0dXJuIGxvY2FsZTtcbn1cbiIsImltcG9ydCB7dGltZVllYXIsIHRpbWVNb250aCwgdGltZVdlZWssIHRpbWVEYXksIHRpbWVIb3VyLCB0aW1lTWludXRlLCB0aW1lU2Vjb25kLCB0aW1lVGlja3MsIHRpbWVUaWNrSW50ZXJ2YWx9IGZyb20gXCJkMy10aW1lXCI7XG5pbXBvcnQge3RpbWVGb3JtYXR9IGZyb20gXCJkMy10aW1lLWZvcm1hdFwiO1xuaW1wb3J0IGNvbnRpbnVvdXMsIHtjb3B5fSBmcm9tIFwiLi9jb250aW51b3VzLmpzXCI7XG5pbXBvcnQge2luaXRSYW5nZX0gZnJvbSBcIi4vaW5pdC5qc1wiO1xuaW1wb3J0IG5pY2UgZnJvbSBcIi4vbmljZS5qc1wiO1xuXG5mdW5jdGlvbiBkYXRlKHQpIHtcbiAgcmV0dXJuIG5ldyBEYXRlKHQpO1xufVxuXG5mdW5jdGlvbiBudW1iZXIodCkge1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIERhdGUgPyArdCA6ICtuZXcgRGF0ZSgrdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjYWxlbmRhcih0aWNrcywgdGlja0ludGVydmFsLCB5ZWFyLCBtb250aCwgd2VlaywgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZm9ybWF0KSB7XG4gIHZhciBzY2FsZSA9IGNvbnRpbnVvdXMoKSxcbiAgICAgIGludmVydCA9IHNjYWxlLmludmVydCxcbiAgICAgIGRvbWFpbiA9IHNjYWxlLmRvbWFpbjtcblxuICB2YXIgZm9ybWF0TWlsbGlzZWNvbmQgPSBmb3JtYXQoXCIuJUxcIiksXG4gICAgICBmb3JtYXRTZWNvbmQgPSBmb3JtYXQoXCI6JVNcIiksXG4gICAgICBmb3JtYXRNaW51dGUgPSBmb3JtYXQoXCIlSTolTVwiKSxcbiAgICAgIGZvcm1hdEhvdXIgPSBmb3JtYXQoXCIlSSAlcFwiKSxcbiAgICAgIGZvcm1hdERheSA9IGZvcm1hdChcIiVhICVkXCIpLFxuICAgICAgZm9ybWF0V2VlayA9IGZvcm1hdChcIiViICVkXCIpLFxuICAgICAgZm9ybWF0TW9udGggPSBmb3JtYXQoXCIlQlwiKSxcbiAgICAgIGZvcm1hdFllYXIgPSBmb3JtYXQoXCIlWVwiKTtcblxuICBmdW5jdGlvbiB0aWNrRm9ybWF0KGRhdGUpIHtcbiAgICByZXR1cm4gKHNlY29uZChkYXRlKSA8IGRhdGUgPyBmb3JtYXRNaWxsaXNlY29uZFxuICAgICAgICA6IG1pbnV0ZShkYXRlKSA8IGRhdGUgPyBmb3JtYXRTZWNvbmRcbiAgICAgICAgOiBob3VyKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdE1pbnV0ZVxuICAgICAgICA6IGRheShkYXRlKSA8IGRhdGUgPyBmb3JtYXRIb3VyXG4gICAgICAgIDogbW9udGgoZGF0ZSkgPCBkYXRlID8gKHdlZWsoZGF0ZSkgPCBkYXRlID8gZm9ybWF0RGF5IDogZm9ybWF0V2VlaylcbiAgICAgICAgOiB5ZWFyKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdE1vbnRoXG4gICAgICAgIDogZm9ybWF0WWVhcikoZGF0ZSk7XG4gIH1cblxuICBzY2FsZS5pbnZlcnQgPSBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIG5ldyBEYXRlKGludmVydCh5KSk7XG4gIH07XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gZG9tYWluKEFycmF5LmZyb20oXywgbnVtYmVyKSkgOiBkb21haW4oKS5tYXAoZGF0ZSk7XG4gIH07XG5cbiAgc2NhbGUudGlja3MgPSBmdW5jdGlvbihpbnRlcnZhbCkge1xuICAgIHZhciBkID0gZG9tYWluKCk7XG4gICAgcmV0dXJuIHRpY2tzKGRbMF0sIGRbZC5sZW5ndGggLSAxXSwgaW50ZXJ2YWwgPT0gbnVsbCA/IDEwIDogaW50ZXJ2YWwpO1xuICB9O1xuXG4gIHNjYWxlLnRpY2tGb3JtYXQgPSBmdW5jdGlvbihjb3VudCwgc3BlY2lmaWVyKSB7XG4gICAgcmV0dXJuIHNwZWNpZmllciA9PSBudWxsID8gdGlja0Zvcm1hdCA6IGZvcm1hdChzcGVjaWZpZXIpO1xuICB9O1xuXG4gIHNjYWxlLm5pY2UgPSBmdW5jdGlvbihpbnRlcnZhbCkge1xuICAgIHZhciBkID0gZG9tYWluKCk7XG4gICAgaWYgKCFpbnRlcnZhbCB8fCB0eXBlb2YgaW50ZXJ2YWwucmFuZ2UgIT09IFwiZnVuY3Rpb25cIikgaW50ZXJ2YWwgPSB0aWNrSW50ZXJ2YWwoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBpbnRlcnZhbCA9PSBudWxsID8gMTAgOiBpbnRlcnZhbCk7XG4gICAgcmV0dXJuIGludGVydmFsID8gZG9tYWluKG5pY2UoZCwgaW50ZXJ2YWwpKSA6IHNjYWxlO1xuICB9O1xuXG4gIHNjYWxlLmNvcHkgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY29weShzY2FsZSwgY2FsZW5kYXIodGlja3MsIHRpY2tJbnRlcnZhbCwgeWVhciwgbW9udGgsIHdlZWssIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIGZvcm1hdCkpO1xuICB9O1xuXG4gIHJldHVybiBzY2FsZTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdGltZSgpIHtcbiAgcmV0dXJuIGluaXRSYW5nZS5hcHBseShjYWxlbmRhcih0aW1lVGlja3MsIHRpbWVUaWNrSW50ZXJ2YWwsIHRpbWVZZWFyLCB0aW1lTW9udGgsIHRpbWVXZWVrLCB0aW1lRGF5LCB0aW1lSG91ciwgdGltZU1pbnV0ZSwgdGltZVNlY29uZCwgdGltZUZvcm1hdCkuZG9tYWluKFtuZXcgRGF0ZSgyMDAwLCAwLCAxKSwgbmV3IERhdGUoMjAwMCwgMCwgMildKSwgYXJndW1lbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5pY2UoZG9tYWluLCBpbnRlcnZhbCkge1xuICBkb21haW4gPSBkb21haW4uc2xpY2UoKTtcblxuICB2YXIgaTAgPSAwLFxuICAgICAgaTEgPSBkb21haW4ubGVuZ3RoIC0gMSxcbiAgICAgIHgwID0gZG9tYWluW2kwXSxcbiAgICAgIHgxID0gZG9tYWluW2kxXSxcbiAgICAgIHQ7XG5cbiAgaWYgKHgxIDwgeDApIHtcbiAgICB0ID0gaTAsIGkwID0gaTEsIGkxID0gdDtcbiAgICB0ID0geDAsIHgwID0geDEsIHgxID0gdDtcbiAgfVxuXG4gIGRvbWFpbltpMF0gPSBpbnRlcnZhbC5mbG9vcih4MCk7XG4gIGRvbWFpbltpMV0gPSBpbnRlcnZhbC5jZWlsKHgxKTtcbiAgcmV0dXJuIGRvbWFpbjtcbn1cbiIsImltcG9ydCB7aW50ZXJwb2xhdGVSZ2JCYXNpc30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHNjaGVtZSA9PiBpbnRlcnBvbGF0ZVJnYkJhc2lzKHNjaGVtZVtzY2hlbWUubGVuZ3RoIC0gMV0pO1xuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmM4ZDU5ZmZmZmJmOTlkNTk0XCIsXG4gIFwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhXCIsXG4gIFwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhXCIsXG4gIFwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkXCIsXG4gIFwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkXCIsXG4gIFwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkXCIsXG4gIFwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkXCIsXG4gIFwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyXCIsXG4gIFwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICB2YXIgbiA9IHNwZWNpZmllci5sZW5ndGggLyA2IHwgMCwgY29sb3JzID0gbmV3IEFycmF5KG4pLCBpID0gMDtcbiAgd2hpbGUgKGkgPCBuKSBjb2xvcnNbaV0gPSBcIiNcIiArIHNwZWNpZmllci5zbGljZShpICogNiwgKytpICogNik7XG4gIHJldHVybiBjb2xvcnM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbiBjb25zdGFudCgpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImV4cG9ydCBjb25zdCBhYnMgPSBNYXRoLmFicztcbmV4cG9ydCBjb25zdCBhdGFuMiA9IE1hdGguYXRhbjI7XG5leHBvcnQgY29uc3QgY29zID0gTWF0aC5jb3M7XG5leHBvcnQgY29uc3QgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgY29uc3QgbWluID0gTWF0aC5taW47XG5leHBvcnQgY29uc3Qgc2luID0gTWF0aC5zaW47XG5leHBvcnQgY29uc3Qgc3FydCA9IE1hdGguc3FydDtcblxuZXhwb3J0IGNvbnN0IGVwc2lsb24gPSAxZS0xMjtcbmV4cG9ydCBjb25zdCBwaSA9IE1hdGguUEk7XG5leHBvcnQgY29uc3QgaGFsZlBpID0gcGkgLyAyO1xuZXhwb3J0IGNvbnN0IHRhdSA9IDIgKiBwaTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFjb3MoeCkge1xuICByZXR1cm4geCA+IDEgPyAwIDogeCA8IC0xID8gcGkgOiBNYXRoLmFjb3MoeCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhc2luKHgpIHtcbiAgcmV0dXJuIHggPj0gMSA/IGhhbGZQaSA6IHggPD0gLTEgPyAtaGFsZlBpIDogTWF0aC5hc2luKHgpO1xufVxuIiwiaW1wb3J0IHtQYXRofSBmcm9tIFwiZDMtcGF0aFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gd2l0aFBhdGgoc2hhcGUpIHtcbiAgbGV0IGRpZ2l0cyA9IDM7XG5cbiAgc2hhcGUuZGlnaXRzID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRpZ2l0cztcbiAgICBpZiAoXyA9PSBudWxsKSB7XG4gICAgICBkaWdpdHMgPSBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBkID0gTWF0aC5mbG9vcihfKTtcbiAgICAgIGlmICghKGQgPj0gMCkpIHRocm93IG5ldyBSYW5nZUVycm9yKGBpbnZhbGlkIGRpZ2l0czogJHtffWApO1xuICAgICAgZGlnaXRzID0gZDtcbiAgICB9XG4gICAgcmV0dXJuIHNoYXBlO1xuICB9O1xuXG4gIHJldHVybiAoKSA9PiBuZXcgUGF0aChkaWdpdHMpO1xufVxuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQge2FicywgYWNvcywgYXNpbiwgYXRhbjIsIGNvcywgZXBzaWxvbiwgaGFsZlBpLCBtYXgsIG1pbiwgcGksIHNpbiwgc3FydCwgdGF1fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5pbXBvcnQge3dpdGhQYXRofSBmcm9tIFwiLi9wYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGFyY0lubmVyUmFkaXVzKGQpIHtcbiAgcmV0dXJuIGQuaW5uZXJSYWRpdXM7XG59XG5cbmZ1bmN0aW9uIGFyY091dGVyUmFkaXVzKGQpIHtcbiAgcmV0dXJuIGQub3V0ZXJSYWRpdXM7XG59XG5cbmZ1bmN0aW9uIGFyY1N0YXJ0QW5nbGUoZCkge1xuICByZXR1cm4gZC5zdGFydEFuZ2xlO1xufVxuXG5mdW5jdGlvbiBhcmNFbmRBbmdsZShkKSB7XG4gIHJldHVybiBkLmVuZEFuZ2xlO1xufVxuXG5mdW5jdGlvbiBhcmNQYWRBbmdsZShkKSB7XG4gIHJldHVybiBkICYmIGQucGFkQW5nbGU7IC8vIE5vdGU6IG9wdGlvbmFsIVxufVxuXG5mdW5jdGlvbiBpbnRlcnNlY3QoeDAsIHkwLCB4MSwgeTEsIHgyLCB5MiwgeDMsIHkzKSB7XG4gIHZhciB4MTAgPSB4MSAtIHgwLCB5MTAgPSB5MSAtIHkwLFxuICAgICAgeDMyID0geDMgLSB4MiwgeTMyID0geTMgLSB5MixcbiAgICAgIHQgPSB5MzIgKiB4MTAgLSB4MzIgKiB5MTA7XG4gIGlmICh0ICogdCA8IGVwc2lsb24pIHJldHVybjtcbiAgdCA9ICh4MzIgKiAoeTAgLSB5MikgLSB5MzIgKiAoeDAgLSB4MikpIC8gdDtcbiAgcmV0dXJuIFt4MCArIHQgKiB4MTAsIHkwICsgdCAqIHkxMF07XG59XG5cbi8vIENvbXB1dGUgcGVycGVuZGljdWxhciBvZmZzZXQgbGluZSBvZiBsZW5ndGggcmMuXG4vLyBodHRwOi8vbWF0aHdvcmxkLndvbGZyYW0uY29tL0NpcmNsZS1MaW5lSW50ZXJzZWN0aW9uLmh0bWxcbmZ1bmN0aW9uIGNvcm5lclRhbmdlbnRzKHgwLCB5MCwgeDEsIHkxLCByMSwgcmMsIGN3KSB7XG4gIHZhciB4MDEgPSB4MCAtIHgxLFxuICAgICAgeTAxID0geTAgLSB5MSxcbiAgICAgIGxvID0gKGN3ID8gcmMgOiAtcmMpIC8gc3FydCh4MDEgKiB4MDEgKyB5MDEgKiB5MDEpLFxuICAgICAgb3ggPSBsbyAqIHkwMSxcbiAgICAgIG95ID0gLWxvICogeDAxLFxuICAgICAgeDExID0geDAgKyBveCxcbiAgICAgIHkxMSA9IHkwICsgb3ksXG4gICAgICB4MTAgPSB4MSArIG94LFxuICAgICAgeTEwID0geTEgKyBveSxcbiAgICAgIHgwMCA9ICh4MTEgKyB4MTApIC8gMixcbiAgICAgIHkwMCA9ICh5MTEgKyB5MTApIC8gMixcbiAgICAgIGR4ID0geDEwIC0geDExLFxuICAgICAgZHkgPSB5MTAgLSB5MTEsXG4gICAgICBkMiA9IGR4ICogZHggKyBkeSAqIGR5LFxuICAgICAgciA9IHIxIC0gcmMsXG4gICAgICBEID0geDExICogeTEwIC0geDEwICogeTExLFxuICAgICAgZCA9IChkeSA8IDAgPyAtMSA6IDEpICogc3FydChtYXgoMCwgciAqIHIgKiBkMiAtIEQgKiBEKSksXG4gICAgICBjeDAgPSAoRCAqIGR5IC0gZHggKiBkKSAvIGQyLFxuICAgICAgY3kwID0gKC1EICogZHggLSBkeSAqIGQpIC8gZDIsXG4gICAgICBjeDEgPSAoRCAqIGR5ICsgZHggKiBkKSAvIGQyLFxuICAgICAgY3kxID0gKC1EICogZHggKyBkeSAqIGQpIC8gZDIsXG4gICAgICBkeDAgPSBjeDAgLSB4MDAsXG4gICAgICBkeTAgPSBjeTAgLSB5MDAsXG4gICAgICBkeDEgPSBjeDEgLSB4MDAsXG4gICAgICBkeTEgPSBjeTEgLSB5MDA7XG5cbiAgLy8gUGljayB0aGUgY2xvc2VyIG9mIHRoZSB0d28gaW50ZXJzZWN0aW9uIHBvaW50cy5cbiAgLy8gVE9ETyBJcyB0aGVyZSBhIGZhc3RlciB3YXkgdG8gZGV0ZXJtaW5lIHdoaWNoIGludGVyc2VjdGlvbiB0byB1c2U/XG4gIGlmIChkeDAgKiBkeDAgKyBkeTAgKiBkeTAgPiBkeDEgKiBkeDEgKyBkeTEgKiBkeTEpIGN4MCA9IGN4MSwgY3kwID0gY3kxO1xuXG4gIHJldHVybiB7XG4gICAgY3g6IGN4MCxcbiAgICBjeTogY3kwLFxuICAgIHgwMTogLW94LFxuICAgIHkwMTogLW95LFxuICAgIHgxMTogY3gwICogKHIxIC8gciAtIDEpLFxuICAgIHkxMTogY3kwICogKHIxIC8gciAtIDEpXG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgaW5uZXJSYWRpdXMgPSBhcmNJbm5lclJhZGl1cyxcbiAgICAgIG91dGVyUmFkaXVzID0gYXJjT3V0ZXJSYWRpdXMsXG4gICAgICBjb3JuZXJSYWRpdXMgPSBjb25zdGFudCgwKSxcbiAgICAgIHBhZFJhZGl1cyA9IG51bGwsXG4gICAgICBzdGFydEFuZ2xlID0gYXJjU3RhcnRBbmdsZSxcbiAgICAgIGVuZEFuZ2xlID0gYXJjRW5kQW5nbGUsXG4gICAgICBwYWRBbmdsZSA9IGFyY1BhZEFuZ2xlLFxuICAgICAgY29udGV4dCA9IG51bGwsXG4gICAgICBwYXRoID0gd2l0aFBhdGgoYXJjKTtcblxuICBmdW5jdGlvbiBhcmMoKSB7XG4gICAgdmFyIGJ1ZmZlcixcbiAgICAgICAgcixcbiAgICAgICAgcjAgPSAraW5uZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgcjEgPSArb3V0ZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgYTAgPSBzdGFydEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgLSBoYWxmUGksXG4gICAgICAgIGExID0gZW5kQW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSAtIGhhbGZQaSxcbiAgICAgICAgZGEgPSBhYnMoYTEgLSBhMCksXG4gICAgICAgIGN3ID0gYTEgPiBhMDtcblxuICAgIGlmICghY29udGV4dCkgY29udGV4dCA9IGJ1ZmZlciA9IHBhdGgoKTtcblxuICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBvdXRlciByYWRpdXMgaXMgYWx3YXlzIGxhcmdlciB0aGFuIHRoZSBpbm5lciByYWRpdXMuXG4gICAgaWYgKHIxIDwgcjApIHIgPSByMSwgcjEgPSByMCwgcjAgPSByO1xuXG4gICAgLy8gSXMgaXQgYSBwb2ludD9cbiAgICBpZiAoIShyMSA+IGVwc2lsb24pKSBjb250ZXh0Lm1vdmVUbygwLCAwKTtcblxuICAgIC8vIE9yIGlzIGl0IGEgY2lyY2xlIG9yIGFubnVsdXM/XG4gICAgZWxzZSBpZiAoZGEgPiB0YXUgLSBlcHNpbG9uKSB7XG4gICAgICBjb250ZXh0Lm1vdmVUbyhyMSAqIGNvcyhhMCksIHIxICogc2luKGEwKSk7XG4gICAgICBjb250ZXh0LmFyYygwLCAwLCByMSwgYTAsIGExLCAhY3cpO1xuICAgICAgaWYgKHIwID4gZXBzaWxvbikge1xuICAgICAgICBjb250ZXh0Lm1vdmVUbyhyMCAqIGNvcyhhMSksIHIwICogc2luKGExKSk7XG4gICAgICAgIGNvbnRleHQuYXJjKDAsIDAsIHIwLCBhMSwgYTAsIGN3KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPciBpcyBpdCBhIGNpcmN1bGFyIG9yIGFubnVsYXIgc2VjdG9yP1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGEwMSA9IGEwLFxuICAgICAgICAgIGExMSA9IGExLFxuICAgICAgICAgIGEwMCA9IGEwLFxuICAgICAgICAgIGExMCA9IGExLFxuICAgICAgICAgIGRhMCA9IGRhLFxuICAgICAgICAgIGRhMSA9IGRhLFxuICAgICAgICAgIGFwID0gcGFkQW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSAvIDIsXG4gICAgICAgICAgcnAgPSAoYXAgPiBlcHNpbG9uKSAmJiAocGFkUmFkaXVzID8gK3BhZFJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpIDogc3FydChyMCAqIHIwICsgcjEgKiByMSkpLFxuICAgICAgICAgIHJjID0gbWluKGFicyhyMSAtIHIwKSAvIDIsICtjb3JuZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSksXG4gICAgICAgICAgcmMwID0gcmMsXG4gICAgICAgICAgcmMxID0gcmMsXG4gICAgICAgICAgdDAsXG4gICAgICAgICAgdDE7XG5cbiAgICAgIC8vIEFwcGx5IHBhZGRpbmc/IE5vdGUgdGhhdCBzaW5jZSByMSDiiaUgcjAsIGRhMSDiiaUgZGEwLlxuICAgICAgaWYgKHJwID4gZXBzaWxvbikge1xuICAgICAgICB2YXIgcDAgPSBhc2luKHJwIC8gcjAgKiBzaW4oYXApKSxcbiAgICAgICAgICAgIHAxID0gYXNpbihycCAvIHIxICogc2luKGFwKSk7XG4gICAgICAgIGlmICgoZGEwIC09IHAwICogMikgPiBlcHNpbG9uKSBwMCAqPSAoY3cgPyAxIDogLTEpLCBhMDAgKz0gcDAsIGExMCAtPSBwMDtcbiAgICAgICAgZWxzZSBkYTAgPSAwLCBhMDAgPSBhMTAgPSAoYTAgKyBhMSkgLyAyO1xuICAgICAgICBpZiAoKGRhMSAtPSBwMSAqIDIpID4gZXBzaWxvbikgcDEgKj0gKGN3ID8gMSA6IC0xKSwgYTAxICs9IHAxLCBhMTEgLT0gcDE7XG4gICAgICAgIGVsc2UgZGExID0gMCwgYTAxID0gYTExID0gKGEwICsgYTEpIC8gMjtcbiAgICAgIH1cblxuICAgICAgdmFyIHgwMSA9IHIxICogY29zKGEwMSksXG4gICAgICAgICAgeTAxID0gcjEgKiBzaW4oYTAxKSxcbiAgICAgICAgICB4MTAgPSByMCAqIGNvcyhhMTApLFxuICAgICAgICAgIHkxMCA9IHIwICogc2luKGExMCk7XG5cbiAgICAgIC8vIEFwcGx5IHJvdW5kZWQgY29ybmVycz9cbiAgICAgIGlmIChyYyA+IGVwc2lsb24pIHtcbiAgICAgICAgdmFyIHgxMSA9IHIxICogY29zKGExMSksXG4gICAgICAgICAgICB5MTEgPSByMSAqIHNpbihhMTEpLFxuICAgICAgICAgICAgeDAwID0gcjAgKiBjb3MoYTAwKSxcbiAgICAgICAgICAgIHkwMCA9IHIwICogc2luKGEwMCksXG4gICAgICAgICAgICBvYztcblxuICAgICAgICAvLyBSZXN0cmljdCB0aGUgY29ybmVyIHJhZGl1cyBhY2NvcmRpbmcgdG8gdGhlIHNlY3RvciBhbmdsZS4gSWYgdGhpc1xuICAgICAgICAvLyBpbnRlcnNlY3Rpb24gZmFpbHMsIGl04oCZcyBwcm9iYWJseSBiZWNhdXNlIHRoZSBhcmMgaXMgdG9vIHNtYWxsLCBzb1xuICAgICAgICAvLyBkaXNhYmxlIHRoZSBjb3JuZXIgcmFkaXVzIGVudGlyZWx5LlxuICAgICAgICBpZiAoZGEgPCBwaSkge1xuICAgICAgICAgIGlmIChvYyA9IGludGVyc2VjdCh4MDEsIHkwMSwgeDAwLCB5MDAsIHgxMSwgeTExLCB4MTAsIHkxMCkpIHtcbiAgICAgICAgICAgIHZhciBheCA9IHgwMSAtIG9jWzBdLFxuICAgICAgICAgICAgICAgIGF5ID0geTAxIC0gb2NbMV0sXG4gICAgICAgICAgICAgICAgYnggPSB4MTEgLSBvY1swXSxcbiAgICAgICAgICAgICAgICBieSA9IHkxMSAtIG9jWzFdLFxuICAgICAgICAgICAgICAgIGtjID0gMSAvIHNpbihhY29zKChheCAqIGJ4ICsgYXkgKiBieSkgLyAoc3FydChheCAqIGF4ICsgYXkgKiBheSkgKiBzcXJ0KGJ4ICogYnggKyBieSAqIGJ5KSkpIC8gMiksXG4gICAgICAgICAgICAgICAgbGMgPSBzcXJ0KG9jWzBdICogb2NbMF0gKyBvY1sxXSAqIG9jWzFdKTtcbiAgICAgICAgICAgIHJjMCA9IG1pbihyYywgKHIwIC0gbGMpIC8gKGtjIC0gMSkpO1xuICAgICAgICAgICAgcmMxID0gbWluKHJjLCAocjEgLSBsYykgLyAoa2MgKyAxKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJjMCA9IHJjMSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElzIHRoZSBzZWN0b3IgY29sbGFwc2VkIHRvIGEgbGluZT9cbiAgICAgIGlmICghKGRhMSA+IGVwc2lsb24pKSBjb250ZXh0Lm1vdmVUbyh4MDEsIHkwMSk7XG5cbiAgICAgIC8vIERvZXMgdGhlIHNlY3RvcuKAmXMgb3V0ZXIgcmluZyBoYXZlIHJvdW5kZWQgY29ybmVycz9cbiAgICAgIGVsc2UgaWYgKHJjMSA+IGVwc2lsb24pIHtcbiAgICAgICAgdDAgPSBjb3JuZXJUYW5nZW50cyh4MDAsIHkwMCwgeDAxLCB5MDEsIHIxLCByYzEsIGN3KTtcbiAgICAgICAgdDEgPSBjb3JuZXJUYW5nZW50cyh4MTEsIHkxMSwgeDEwLCB5MTAsIHIxLCByYzEsIGN3KTtcblxuICAgICAgICBjb250ZXh0Lm1vdmVUbyh0MC5jeCArIHQwLngwMSwgdDAuY3kgKyB0MC55MDEpO1xuXG4gICAgICAgIC8vIEhhdmUgdGhlIGNvcm5lcnMgbWVyZ2VkP1xuICAgICAgICBpZiAocmMxIDwgcmMpIGNvbnRleHQuYXJjKHQwLmN4LCB0MC5jeSwgcmMxLCBhdGFuMih0MC55MDEsIHQwLngwMSksIGF0YW4yKHQxLnkwMSwgdDEueDAxKSwgIWN3KTtcblxuICAgICAgICAvLyBPdGhlcndpc2UsIGRyYXcgdGhlIHR3byBjb3JuZXJzIGFuZCB0aGUgcmluZy5cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29udGV4dC5hcmModDAuY3gsIHQwLmN5LCByYzEsIGF0YW4yKHQwLnkwMSwgdDAueDAxKSwgYXRhbjIodDAueTExLCB0MC54MTEpLCAhY3cpO1xuICAgICAgICAgIGNvbnRleHQuYXJjKDAsIDAsIHIxLCBhdGFuMih0MC5jeSArIHQwLnkxMSwgdDAuY3ggKyB0MC54MTEpLCBhdGFuMih0MS5jeSArIHQxLnkxMSwgdDEuY3ggKyB0MS54MTEpLCAhY3cpO1xuICAgICAgICAgIGNvbnRleHQuYXJjKHQxLmN4LCB0MS5jeSwgcmMxLCBhdGFuMih0MS55MTEsIHQxLngxMSksIGF0YW4yKHQxLnkwMSwgdDEueDAxKSwgIWN3KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBPciBpcyB0aGUgb3V0ZXIgcmluZyBqdXN0IGEgY2lyY3VsYXIgYXJjP1xuICAgICAgZWxzZSBjb250ZXh0Lm1vdmVUbyh4MDEsIHkwMSksIGNvbnRleHQuYXJjKDAsIDAsIHIxLCBhMDEsIGExMSwgIWN3KTtcblxuICAgICAgLy8gSXMgdGhlcmUgbm8gaW5uZXIgcmluZywgYW5kIGl04oCZcyBhIGNpcmN1bGFyIHNlY3Rvcj9cbiAgICAgIC8vIE9yIHBlcmhhcHMgaXTigJlzIGFuIGFubnVsYXIgc2VjdG9yIGNvbGxhcHNlZCBkdWUgdG8gcGFkZGluZz9cbiAgICAgIGlmICghKHIwID4gZXBzaWxvbikgfHwgIShkYTAgPiBlcHNpbG9uKSkgY29udGV4dC5saW5lVG8oeDEwLCB5MTApO1xuXG4gICAgICAvLyBEb2VzIHRoZSBzZWN0b3LigJlzIGlubmVyIHJpbmcgKG9yIHBvaW50KSBoYXZlIHJvdW5kZWQgY29ybmVycz9cbiAgICAgIGVsc2UgaWYgKHJjMCA+IGVwc2lsb24pIHtcbiAgICAgICAgdDAgPSBjb3JuZXJUYW5nZW50cyh4MTAsIHkxMCwgeDExLCB5MTEsIHIwLCAtcmMwLCBjdyk7XG4gICAgICAgIHQxID0gY29ybmVyVGFuZ2VudHMoeDAxLCB5MDEsIHgwMCwgeTAwLCByMCwgLXJjMCwgY3cpO1xuXG4gICAgICAgIGNvbnRleHQubGluZVRvKHQwLmN4ICsgdDAueDAxLCB0MC5jeSArIHQwLnkwMSk7XG5cbiAgICAgICAgLy8gSGF2ZSB0aGUgY29ybmVycyBtZXJnZWQ/XG4gICAgICAgIGlmIChyYzAgPCByYykgY29udGV4dC5hcmModDAuY3gsIHQwLmN5LCByYzAsIGF0YW4yKHQwLnkwMSwgdDAueDAxKSwgYXRhbjIodDEueTAxLCB0MS54MDEpLCAhY3cpO1xuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgZHJhdyB0aGUgdHdvIGNvcm5lcnMgYW5kIHRoZSByaW5nLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb250ZXh0LmFyYyh0MC5jeCwgdDAuY3ksIHJjMCwgYXRhbjIodDAueTAxLCB0MC54MDEpLCBhdGFuMih0MC55MTEsIHQwLngxMSksICFjdyk7XG4gICAgICAgICAgY29udGV4dC5hcmMoMCwgMCwgcjAsIGF0YW4yKHQwLmN5ICsgdDAueTExLCB0MC5jeCArIHQwLngxMSksIGF0YW4yKHQxLmN5ICsgdDEueTExLCB0MS5jeCArIHQxLngxMSksIGN3KTtcbiAgICAgICAgICBjb250ZXh0LmFyYyh0MS5jeCwgdDEuY3ksIHJjMCwgYXRhbjIodDEueTExLCB0MS54MTEpLCBhdGFuMih0MS55MDEsIHQxLngwMSksICFjdyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gT3IgaXMgdGhlIGlubmVyIHJpbmcganVzdCBhIGNpcmN1bGFyIGFyYz9cbiAgICAgIGVsc2UgY29udGV4dC5hcmMoMCwgMCwgcjAsIGExMCwgYTAwLCBjdyk7XG4gICAgfVxuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGlmIChidWZmZXIpIHJldHVybiBjb250ZXh0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgYXJjLmNlbnRyb2lkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSAoK2lubmVyUmFkaXVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgKyArb3V0ZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgLyAyLFxuICAgICAgICBhID0gKCtzdGFydEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgKyArZW5kQW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgLyAyIC0gcGkgLyAyO1xuICAgIHJldHVybiBbY29zKGEpICogciwgc2luKGEpICogcl07XG4gIH07XG5cbiAgYXJjLmlubmVyUmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGlubmVyUmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBpbm5lclJhZGl1cztcbiAgfTtcblxuICBhcmMub3V0ZXJSYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAob3V0ZXJSYWRpdXMgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IG91dGVyUmFkaXVzO1xuICB9O1xuXG4gIGFyYy5jb3JuZXJSYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY29ybmVyUmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBjb3JuZXJSYWRpdXM7XG4gIH07XG5cbiAgYXJjLnBhZFJhZGl1cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRSYWRpdXMgPSBfID09IG51bGwgPyBudWxsIDogdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBwYWRSYWRpdXM7XG4gIH07XG5cbiAgYXJjLnN0YXJ0QW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3RhcnRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogc3RhcnRBbmdsZTtcbiAgfTtcblxuICBhcmMuZW5kQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZW5kQW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IGVuZEFuZ2xlO1xuICB9O1xuXG4gIGFyYy5wYWRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogcGFkQW5nbGU7XG4gIH07XG5cbiAgYXJjLmNvbnRleHQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoKGNvbnRleHQgPSBfID09IG51bGwgPyBudWxsIDogXyksIGFyYykgOiBjb250ZXh0O1xuICB9O1xuXG4gIHJldHVybiBhcmM7XG59XG4iLCJleHBvcnQgdmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJvYmplY3RcIiAmJiBcImxlbmd0aFwiIGluIHhcbiAgICA/IHggLy8gQXJyYXksIFR5cGVkQXJyYXksIE5vZGVMaXN0LCBhcnJheS1saWtlXG4gICAgOiBBcnJheS5mcm9tKHgpOyAvLyBNYXAsIFNldCwgaXRlcmFibGUsIHN0cmluZywgb3IgYW55dGhpbmcgZWxzZVxufVxuIiwiZnVuY3Rpb24gTGluZWFyKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkxpbmVhci5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgLy8gZmFsbHMgdGhyb3VnaFxuICAgICAgZGVmYXVsdDogdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IExpbmVhcihjb250ZXh0KTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiB4KHApIHtcbiAgcmV0dXJuIHBbMF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5KHApIHtcbiAgcmV0dXJuIHBbMV07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBiIDwgYSA/IC0xIDogYiA+IGEgPyAxIDogYiA+PSBhID8gMCA6IE5hTjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGQpIHtcbiAgcmV0dXJuIGQ7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gVHJhbnNmb3JtKGssIHgsIHkpIHtcbiAgdGhpcy5rID0gaztcbiAgdGhpcy54ID0geDtcbiAgdGhpcy55ID0geTtcbn1cblxuVHJhbnNmb3JtLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRyYW5zZm9ybSxcbiAgc2NhbGU6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gayA9PT0gMSA/IHRoaXMgOiBuZXcgVHJhbnNmb3JtKHRoaXMuayAqIGssIHRoaXMueCwgdGhpcy55KTtcbiAgfSxcbiAgdHJhbnNsYXRlOiBmdW5jdGlvbih4LCB5KSB7XG4gICAgcmV0dXJuIHggPT09IDAgJiB5ID09PSAwID8gdGhpcyA6IG5ldyBUcmFuc2Zvcm0odGhpcy5rLCB0aGlzLnggKyB0aGlzLmsgKiB4LCB0aGlzLnkgKyB0aGlzLmsgKiB5KTtcbiAgfSxcbiAgYXBwbHk6IGZ1bmN0aW9uKHBvaW50KSB7XG4gICAgcmV0dXJuIFtwb2ludFswXSAqIHRoaXMuayArIHRoaXMueCwgcG9pbnRbMV0gKiB0aGlzLmsgKyB0aGlzLnldO1xuICB9LFxuICBhcHBseVg6IGZ1bmN0aW9uKHgpIHtcbiAgICByZXR1cm4geCAqIHRoaXMuayArIHRoaXMueDtcbiAgfSxcbiAgYXBwbHlZOiBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIHkgKiB0aGlzLmsgKyB0aGlzLnk7XG4gIH0sXG4gIGludmVydDogZnVuY3Rpb24obG9jYXRpb24pIHtcbiAgICByZXR1cm4gWyhsb2NhdGlvblswXSAtIHRoaXMueCkgLyB0aGlzLmssIChsb2NhdGlvblsxXSAtIHRoaXMueSkgLyB0aGlzLmtdO1xuICB9LFxuICBpbnZlcnRYOiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuICh4IC0gdGhpcy54KSAvIHRoaXMuaztcbiAgfSxcbiAgaW52ZXJ0WTogZnVuY3Rpb24oeSkge1xuICAgIHJldHVybiAoeSAtIHRoaXMueSkgLyB0aGlzLms7XG4gIH0sXG4gIHJlc2NhbGVYOiBmdW5jdGlvbih4KSB7XG4gICAgcmV0dXJuIHguY29weSgpLmRvbWFpbih4LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WCwgdGhpcykubWFwKHguaW52ZXJ0LCB4KSk7XG4gIH0sXG4gIHJlc2NhbGVZOiBmdW5jdGlvbih5KSB7XG4gICAgcmV0dXJuIHkuY29weSgpLmRvbWFpbih5LnJhbmdlKCkubWFwKHRoaXMuaW52ZXJ0WSwgdGhpcykubWFwKHkuaW52ZXJ0LCB5KSk7XG4gIH0sXG4gIHRvU3RyaW5nOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJ0cmFuc2xhdGUoXCIgKyB0aGlzLnggKyBcIixcIiArIHRoaXMueSArIFwiKSBzY2FsZShcIiArIHRoaXMuayArIFwiKVwiO1xuICB9XG59O1xuXG5leHBvcnQgdmFyIGlkZW50aXR5ID0gbmV3IFRyYW5zZm9ybSgxLCAwLCAwKTtcblxudHJhbnNmb3JtLnByb3RvdHlwZSA9IFRyYW5zZm9ybS5wcm90b3R5cGU7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRyYW5zZm9ybShub2RlKSB7XG4gIHdoaWxlICghbm9kZS5fX3pvb20pIGlmICghKG5vZGUgPSBub2RlLnBhcmVudE5vZGUpKSByZXR1cm4gaWRlbnRpdHk7XG4gIHJldHVybiBub2RlLl9fem9vbTtcbn1cbiIsImltcG9ydCB7IE1vbWVudCB9IGZyb20gXCJtb21lbnRcIjtcblxuZXhwb3J0IGVudW0gU2VhcmNoVHlwZSB7XG4gICAgVGFnLFxuICAgIEZyb250bWF0dGVyLFxuICAgIFdpa2ksXG4gICAgV2lraUxpbmssXG4gICAgV2lraURpc3BsYXksXG4gICAgVGV4dCxcbiAgICBkdkZpZWxkLFxuICAgIFRhYmxlLFxuICAgIEZpbGVNZXRhLFxuICAgIFRhc2ssXG4gICAgVGFza0RvbmUsXG4gICAgVGFza05vdERvbmUsXG59XG5cbmV4cG9ydCBlbnVtIEdyYXBoVHlwZSB7XG4gICAgTGluZSxcbiAgICBCYXIsXG4gICAgUGllLFxuICAgIFJhZGFyLFxuICAgIFN1bW1hcnksXG4gICAgVGFibGUsXG4gICAgTW9udGgsXG4gICAgSGVhdG1hcCxcbiAgICBCdWxsZXQsXG4gICAgVW5rbm93bixcbn1cblxuZXhwb3J0IGVudW0gVmFsdWVUeXBlIHtcbiAgICBOdW1iZXIsXG4gICAgSW50LFxuICAgIERhdGUsXG4gICAgVGltZSxcbiAgICBEYXRlVGltZSxcbiAgICBTdHJpbmcsXG59XG5cbmV4cG9ydCB0eXBlIFRleHRWYWx1ZU1hcCA9IHtcbiAgICBba2V5OiBzdHJpbmddOiBudW1iZXI7XG59O1xuXG5leHBvcnQgY2xhc3MgRGF0YVBvaW50IHtcbiAgICBkYXRlOiBNb21lbnQ7XG4gICAgdmFsdWU6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKGRhdGU6IE1vbWVudCwgdmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLmRhdGUgPSBkYXRlO1xuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWU7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUXVlcnkge1xuICAgIHByaXZhdGUgdHlwZTogU2VhcmNoVHlwZSB8IG51bGw7XG4gICAgcHJpdmF0ZSB0YXJnZXQ6IHN0cmluZztcbiAgICBwcml2YXRlIHBhcmVudFRhcmdldDogc3RyaW5nIHwgbnVsbDtcbiAgICBwcml2YXRlIHNlcGFyYXRvcjogc3RyaW5nOyAvLyBtdWx0aXBsZSB2YWx1ZSBzZXBhcmF0b3JcbiAgICBwcml2YXRlIGlkOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBhY2Nlc3NvcjogbnVtYmVyO1xuICAgIHByaXZhdGUgYWNjZXNzb3IxOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBhY2Nlc3NvcjI6IG51bWJlcjtcbiAgICBwcml2YXRlIG51bVRhcmdldHM6IG51bWJlcjtcblxuICAgIHZhbHVlVHlwZTogVmFsdWVUeXBlO1xuICAgIHVzZWRBc1hEYXRhc2V0OiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoaWQ6IG51bWJlciwgc2VhcmNoVHlwZTogU2VhcmNoVHlwZSwgc2VhcmNoVGFyZ2V0OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy50eXBlID0gc2VhcmNoVHlwZTtcbiAgICAgICAgdGhpcy50YXJnZXQgPSBzZWFyY2hUYXJnZXQ7XG4gICAgICAgIHRoaXMuc2VwYXJhdG9yID0gXCJcIjsgLy8gc2VwYXJhdG9yIHRvIHNlcGFyYXRlIG11bHRpcGxlIHZhbHVlc1xuICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgIHRoaXMuYWNjZXNzb3IgPSAtMTtcbiAgICAgICAgdGhpcy5hY2Nlc3NvcjEgPSAtMTtcbiAgICAgICAgdGhpcy5hY2Nlc3NvcjIgPSAtMTtcbiAgICAgICAgdGhpcy52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuTnVtYmVyO1xuICAgICAgICB0aGlzLnVzZWRBc1hEYXRhc2V0ID0gZmFsc2U7XG4gICAgICAgIHRoaXMubnVtVGFyZ2V0cyA9IDA7XG5cbiAgICAgICAgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuVGFibGUpIHtcbiAgICAgICAgICAgIC8vIHNlYXJjaFRhcmdldCAtLT4ge3tmaWxlUGF0aH19W3t7dGFibGV9fV1be3tjb2x1bW59fV1cbiAgICAgICAgICAgIGxldCBzdHJSZWdleCA9XG4gICAgICAgICAgICAgICAgXCJcXFxcWyg/PGFjY2Vzc29yPlswLTldKylcXFxcXVxcXFxbKD88YWNjZXNzb3IxPlswLTldKylcXFxcXShcXFxcWyg/PGFjY2Vzc29yMj5bMC05XSspXFxcXF0pP1wiO1xuICAgICAgICAgICAgbGV0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnbVwiKTtcbiAgICAgICAgICAgIGxldCBtYXRjaDtcbiAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHNlYXJjaFRhcmdldCkpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXRjaC5ncm91cHMuYWNjZXNzb3IgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFjY2Vzc29yID0gcGFyc2VGbG9hdChtYXRjaC5ncm91cHMuYWNjZXNzb3IpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKGFjY2Vzc29yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXRjaC5ncm91cHMuYWNjZXNzb3IxICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFjY2Vzc29yMSA9IHBhcnNlRmxvYXQobWF0Y2guZ3JvdXBzLmFjY2Vzc29yMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc051bWJlcihhY2Nlc3NvcjEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhY2Nlc3NvcjI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBtYXRjaC5ncm91cHMuYWNjZXNzb3IyICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc29yMiA9IHBhcnNlRmxvYXQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2guZ3JvdXBzLmFjY2Vzc29yMlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWNjZXNzb3IgPSBhY2Nlc3NvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3NvcjEgPSBhY2Nlc3NvcjE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOdW1iZXIoYWNjZXNzb3IyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3NvcjIgPSBhY2Nlc3NvcjI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wYXJlbnRUYXJnZXQgPSBzZWFyY2hUYXJnZXQucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBzdHJSZWdleCA9IFwiXFxcXFsoPzxhY2Nlc3Nvcj5bMC05XSspXFxcXF1cIjtcbiAgICAgICAgICAgIGxldCByZWdleCA9IG5ldyBSZWdFeHAoc3RyUmVnZXgsIFwiZ21cIik7XG4gICAgICAgICAgICBsZXQgbWF0Y2g7XG4gICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyhzZWFyY2hUYXJnZXQpKSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWF0Y2guZ3JvdXBzLmFjY2Vzc29yICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBhY2Nlc3NvciA9IHBhcnNlRmxvYXQobWF0Y2guZ3JvdXBzLmFjY2Vzc29yKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc051bWJlcihhY2Nlc3NvcikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWNjZXNzb3IgPSBhY2Nlc3NvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50VGFyZ2V0ID0gc2VhcmNoVGFyZ2V0LnJlcGxhY2UocmVnZXgsIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBlcXVhbFRvKG90aGVyOiBRdWVyeSk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy50eXBlID09PSBvdGhlci50eXBlICYmIHRoaXMudGFyZ2V0ID09PSBvdGhlci50YXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0VGFyZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YXJnZXQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFBhcmVudFRhcmdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50VGFyZ2V0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRJZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQ7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFjY2Vzc29yKGluZGV4ID0gMCkge1xuICAgICAgICBzd2l0Y2ggKGluZGV4KSB7XG4gICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWNjZXNzb3I7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWNjZXNzb3IxO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFjY2Vzc29yMjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRTZXBhcmF0b3Ioc2VwOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5zZXBhcmF0b3IgPSBzZXA7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFNlcGFyYXRvcihpc0ZvckZyb250bWF0dGVyVGFnczogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgICAgIGlmICh0aGlzLnNlcGFyYXRvciA9PT0gXCJcIikge1xuICAgICAgICAgICAgaWYgKGlzRm9yRnJvbnRtYXR0ZXJUYWdzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiLFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFwiL1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnNlcGFyYXRvcjtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkTnVtVGFyZ2V0cyhudW06IG51bWJlciA9IDEpIHtcbiAgICAgICAgdGhpcy5udW1UYXJnZXRzID0gdGhpcy5udW1UYXJnZXRzICsgbnVtO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXROdW1UYXJnZXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5udW1UYXJnZXRzO1xuICAgIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBRdWVyeVZhbHVlUGFpciB7XG4gICAgcXVlcnk6IFF1ZXJ5O1xuICAgIHZhbHVlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhc2V0IGltcGxlbWVudHMgSXRlcmFibGVJdGVyYXRvcjxEYXRhUG9pbnQ+IHtcbiAgICAvLyBBcnJheSBvZiBEYXRhUG9pbnRzXG4gICAgcHJpdmF0ZSBuYW1lOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBxdWVyeTogUXVlcnk7XG4gICAgcHJpdmF0ZSB2YWx1ZXM6IG51bWJlcltdO1xuICAgIHByaXZhdGUgcGFyZW50OiBEYXRhc2V0cztcbiAgICBwcml2YXRlIGlkOiBudW1iZXI7XG4gICAgcHJpdmF0ZSB5TWluOiBudW1iZXI7XG4gICAgcHJpdmF0ZSB5TWF4OiBudW1iZXI7XG4gICAgcHJpdmF0ZSBzdGFydERhdGU6IE1vbWVudDtcbiAgICBwcml2YXRlIGVuZERhdGU6IE1vbWVudDtcbiAgICBwcml2YXRlIG51bVRhcmdldHM6IG51bWJlcjtcbiAgICBwcml2YXRlIGxpbmVJbmZvOiBMaW5lSW5mbztcbiAgICBwcml2YXRlIGJhckluZm86IEJhckluZm87XG5cbiAgICBwcml2YXRlIGlzVG1wRGF0YXNldDogYm9vbGVhbjtcblxuICAgIHZhbHVlVHlwZTogVmFsdWVUeXBlO1xuXG4gICAgcHJpdmF0ZSBjdXJyZW50SW5kZXggPSAwOyAvLyBJdGVyYWJsZUl0ZXJhdG9yXG5cbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IERhdGFzZXRzLCBxdWVyeTogUXVlcnkpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJ1bnRpdGxlZFwiO1xuICAgICAgICB0aGlzLnF1ZXJ5ID0gcXVlcnk7XG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLmlkID0gLTE7XG4gICAgICAgIHRoaXMueU1pbiA9IG51bGw7XG4gICAgICAgIHRoaXMueU1heCA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RhcnREYXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5lbmREYXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5udW1UYXJnZXRzID0gMDtcbiAgICAgICAgdGhpcy5saW5lSW5mbyA9IG51bGw7XG4gICAgICAgIHRoaXMuYmFySW5mbyA9IG51bGw7XG5cbiAgICAgICAgdGhpcy5pc1RtcERhdGFzZXQgPSBmYWxzZTtcblxuICAgICAgICB0aGlzLnZhbHVlVHlwZSA9IHF1ZXJ5Py52YWx1ZVR5cGU7XG5cbiAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgcGFyZW50LmdldERhdGVzKCkubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZXMucHVzaChudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBjbG9uZVRvVG1wRGF0YXNldCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzVG1wRGF0YXNldCkge1xuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSBuZXcgRGF0YXNldCh0aGlzLnBhcmVudCwgbnVsbCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0Lm5hbWUgPSBcInRtcFwiO1xuICAgICAgICAgICAgdG1wRGF0YXNldC52YWx1ZXMgPSBbLi4udGhpcy52YWx1ZXNdO1xuICAgICAgICAgICAgdG1wRGF0YXNldC55TWluID0gdGhpcy55TWluO1xuICAgICAgICAgICAgdG1wRGF0YXNldC55TWF4ID0gdGhpcy55TWF4O1xuICAgICAgICAgICAgdG1wRGF0YXNldC5zdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5lbmREYXRlID0gdGhpcy5lbmREYXRlLmNsb25lKCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0Lm51bVRhcmdldHMgPSB0aGlzLm51bVRhcmdldHM7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LmlzVG1wRGF0YXNldCA9IHRydWU7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnZhbHVlVHlwZSA9IHRoaXMudmFsdWVUeXBlO1xuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7IC8vIGFscmVhZHkgdG1wIGRhdGFzZXRcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0TmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0TmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlkO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRJZChpZDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuaWQgPSBpZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkTnVtVGFyZ2V0cyhudW06IG51bWJlcikge1xuICAgICAgICB0aGlzLm51bVRhcmdldHMgPSB0aGlzLm51bVRhcmdldHMgKyBudW07XG4gICAgfVxuXG4gICAgcHVibGljIGdldE51bVRhcmdldHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm51bVRhcmdldHM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFZhbHVlKGRhdGU6IE1vbWVudCwgZGF5U2hpZnQ6IG51bWJlciA9IDApIHtcbiAgICAgICAgbGV0IGluZCA9IHRoaXMucGFyZW50LmdldEluZGV4T2ZEYXRlKGRhdGUpICsgTWF0aC5mbG9vcihkYXlTaGlmdCk7XG4gICAgICAgIGlmIChpbmQgPj0gMCAmJiBpbmQgPCB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlc1tpbmRdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRWYWx1ZShkYXRlOiBNb21lbnQsIHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGluZCA9IHRoaXMucGFyZW50LmdldEluZGV4T2ZEYXRlKGRhdGUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhpbmQpO1xuXG4gICAgICAgIGlmIChpbmQgPj0gMCAmJiBpbmQgPCB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIC8vIFNldCB2YWx1ZVxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kXSA9IHZhbHVlO1xuXG4gICAgICAgICAgICAvLyBVcGRhdGUgeU1pbiBhbmQgeU1heFxuICAgICAgICAgICAgaWYgKHRoaXMueU1pbiA9PT0gbnVsbCB8fCB2YWx1ZSA8IHRoaXMueU1pbikge1xuICAgICAgICAgICAgICAgIHRoaXMueU1pbiA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMueU1heCA9PT0gbnVsbCB8fCB2YWx1ZSA+IHRoaXMueU1heCkge1xuICAgICAgICAgICAgICAgIHRoaXMueU1heCA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBVcGRhdGUgc3RhcnREYXRlIGFuZCBlbmREYXRlXG4gICAgICAgICAgICBpZiAodGhpcy5zdGFydERhdGUgPT09IG51bGwgfHwgZGF0ZSA8IHRoaXMuc3RhcnREYXRlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydERhdGUgPSBkYXRlLmNsb25lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5lbmREYXRlID09PSBudWxsIHx8IGRhdGUgPiB0aGlzLmVuZERhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUgPSBkYXRlLmNsb25lKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcmVjYWxjdWxhdGVNaW5NYXgoKSB7XG4gICAgICAgIHRoaXMueU1pbiA9IE1hdGgubWluKC4uLnRoaXMudmFsdWVzKTtcbiAgICAgICAgdGhpcy55TWF4ID0gTWF0aC5tYXgoLi4udGhpcy52YWx1ZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRZTWluKCkge1xuICAgICAgICByZXR1cm4gdGhpcy55TWluO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRZTWF4KCkge1xuICAgICAgICByZXR1cm4gdGhpcy55TWF4O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRTdGFydERhdGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YXJ0RGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RW5kRGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW5kRGF0ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hpZnQoc2hpZnRBbW91bnQ6IG51bWJlciwgZG9MYXJnZXJ0aGFuOiBudW1iZXIpIHtcbiAgICAgICAgbGV0IGFueVNoaWZ0ZWQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgdGhpcy52YWx1ZXMubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzW2luZF0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAoZG9MYXJnZXJ0aGFuID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZF0gPSB0aGlzLnZhbHVlc1tpbmRdICsgc2hpZnRBbW91bnQ7XG4gICAgICAgICAgICAgICAgICAgIGFueVNoaWZ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlc1tpbmRdID49IGRvTGFyZ2VydGhhbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kXSA9IHRoaXMudmFsdWVzW2luZF0gKyBzaGlmdEFtb3VudDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFueVNoaWZ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChhbnlTaGlmdGVkKSB7XG4gICAgICAgICAgICB0aGlzLnlNaW4gPSB0aGlzLnlNaW4gKyBzaGlmdEFtb3VudDtcbiAgICAgICAgICAgIHRoaXMueU1heCA9IHRoaXMueU1heCArIHNoaWZ0QW1vdW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNldFBlbmFsdHkocGVuYWx0eTogbnVtYmVyKSB7XG4gICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHRoaXMudmFsdWVzLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlc1tpbmRdID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kXSA9IHBlbmFsdHk7XG4gICAgICAgICAgICAgICAgaWYgKHBlbmFsdHkgPCB0aGlzLnlNaW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55TWluID0gcGVuYWx0eTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHBlbmFsdHkgPiB0aGlzLnlNYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy55TWF4ID0gcGVuYWx0eTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0UXVlcnkoKTogUXVlcnkge1xuICAgICAgICByZXR1cm4gdGhpcy5xdWVyeTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWNjdW11bGF0ZVZhbHVlcygpIHtcbiAgICAgICAgbGV0IGFjY3VtVmFsdWUgPSAwLjA7XG4gICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHRoaXMudmFsdWVzLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlc1tpbmRdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgYWNjdW1WYWx1ZSArPSB0aGlzLnZhbHVlc1tpbmRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kXSA9IGFjY3VtVmFsdWU7XG4gICAgICAgICAgICBpZiAoYWNjdW1WYWx1ZSA8IHRoaXMueU1pbikge1xuICAgICAgICAgICAgICAgIHRoaXMueU1pbiA9IGFjY3VtVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYWNjdW1WYWx1ZSA+IHRoaXMueU1heCkge1xuICAgICAgICAgICAgICAgIHRoaXMueU1heCA9IGFjY3VtVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgc2hpZnRCeURhdGFzZXQoc2hpZnREYXRhc2V0OiBEYXRhc2V0KSB7XG4gICAgICAgIC8vIEFzc3VtZSBhbGwgZGF0YXNldHMgYXJlIG9mIHRoZSBzYW1lIGxlbmd0aFxuICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCB0aGlzLnZhbHVlcy5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVudFZhbHVlID0gdGhpcy52YWx1ZXNbaW5kXTtcbiAgICAgICAgICAgIGlmIChzaGlmdERhdGFzZXQudmFsdWVzW2luZF0gIT09IG51bGwgJiYgY3VycmVudFZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlICs9IHNoaWZ0RGF0YXNldC52YWx1ZXNbaW5kXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2hpZnREYXRhc2V0LnZhbHVlc1tpbmRdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlID0gc2hpZnREYXRhc2V0LnZhbHVlc1tpbmRdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kXSA9IGN1cnJlbnRWYWx1ZTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50VmFsdWUgPCB0aGlzLnlNaW4pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnlNaW4gPSBjdXJyZW50VmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY3VycmVudFZhbHVlID4gdGhpcy55TWF4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy55TWF4ID0gY3VycmVudFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGdldFZhbHVlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRMZW5ndGgoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHVibGljIGdldExlbmd0aE5vdE51bGwoKSB7XG4gICAgICAgIGxldCBjb3VudE5vdE51bGwgPSAwO1xuICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCB0aGlzLnZhbHVlcy5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZXNbaW5kXSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGNvdW50Tm90TnVsbCsrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb3VudE5vdE51bGw7XG4gICAgfVxuXG4gICAgbmV4dCgpOiBJdGVyYXRvclJlc3VsdDxEYXRhUG9pbnQ+IHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEluZGV4IDwgdGhpcy52YWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBsZXQgaW5kID0gdGhpcy5jdXJyZW50SW5kZXgrKztcbiAgICAgICAgICAgIGxldCBkYXRhUG9pbnQgPSBuZXcgRGF0YVBvaW50KFxuICAgICAgICAgICAgICAgIHRoaXMucGFyZW50LmdldERhdGVzKClbaW5kXSxcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRdXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkb25lOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZGF0YVBvaW50LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZG9uZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPERhdGFQb2ludD4ge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBEYXRhc2V0cyBpbXBsZW1lbnRzIEl0ZXJhYmxlSXRlcmF0b3I8RGF0YXNldD4ge1xuICAgIC8vIEl0ZXJhYmxlIG9mIERhdGFzZXRcbiAgICBwcml2YXRlIGRhdGVzOiBNb21lbnRbXTtcbiAgICBwcml2YXRlIGRhdGFzZXRzOiBEYXRhc2V0W107XG5cbiAgICBwcml2YXRlIGN1cnJlbnRJbmRleCA9IDA7IC8vIEl0ZXJhYmxlSXRlcmF0b3JcblxuICAgIGNvbnN0cnVjdG9yKHN0YXJ0RGF0ZTogTW9tZW50LCBlbmREYXRlOiBNb21lbnQpIHtcbiAgICAgICAgdGhpcy5kYXRlcyA9IFtdO1xuICAgICAgICB0aGlzLmRhdGFzZXRzID0gW107XG5cbiAgICAgICAgbGV0IGNEYXRhID0gc3RhcnREYXRlLmNyZWF0aW9uRGF0YSgpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhjRGF0YSk7XG4gICAgICAgIGNvbnN0IGRhdGVGb3JtYXQgPSBjRGF0YS5mb3JtYXQudG9TdHJpbmcoKTtcbiAgICAgICAgZm9yIChcbiAgICAgICAgICAgIGxldCBjdXJEYXRlID0gc3RhcnREYXRlLmNsb25lKCk7XG4gICAgICAgICAgICBjdXJEYXRlIDw9IGVuZERhdGU7XG4gICAgICAgICAgICBjdXJEYXRlLmFkZCgxLCBcImRheXNcIilcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBsZXQgbmV3RGF0ZSA9IHdpbmRvdy5tb21lbnQoXG4gICAgICAgICAgICAgICAgY3VyRGF0ZS5mb3JtYXQoZGF0ZUZvcm1hdCksXG4gICAgICAgICAgICAgICAgZGF0ZUZvcm1hdCxcbiAgICAgICAgICAgICAgICB0cnVlXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgdGhpcy5kYXRlcy5wdXNoKG5ld0RhdGUpO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRoaXMuZGF0ZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjcmVhdGVEYXRhc2V0KHF1ZXJ5OiBRdWVyeSwgcmVuZGVySW5mbzogUmVuZGVySW5mbykge1xuICAgICAgICBsZXQgZGF0YXNldCA9IG5ldyBEYXRhc2V0KHRoaXMsIHF1ZXJ5KTtcbiAgICAgICAgZGF0YXNldC5zZXRJZChxdWVyeS5nZXRJZCgpKTtcbiAgICAgICAgaWYgKHJlbmRlckluZm8pIHtcbiAgICAgICAgICAgIGRhdGFzZXQuc2V0TmFtZShyZW5kZXJJbmZvLmRhdGFzZXROYW1lW3F1ZXJ5LmdldElkKCldKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZGF0YXNldHMucHVzaChkYXRhc2V0KTtcblxuICAgICAgICByZXR1cm4gZGF0YXNldDtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0SW5kZXhPZkRhdGUoZGF0ZTogTW9tZW50KSB7XG4gICAgICAgIGxldCBjRGF0YSA9IGRhdGUuY3JlYXRpb25EYXRhKCk7XG4gICAgICAgIGNvbnN0IGRhdGVGb3JtYXQgPSBjRGF0YS5mb3JtYXQudG9TdHJpbmcoKTtcbiAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgdGhpcy5kYXRlcy5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlc1tpbmRdLmZvcm1hdChkYXRlRm9ybWF0KSA9PT0gZGF0ZS5mb3JtYXQoZGF0ZUZvcm1hdClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREYXRhc2V0QnlRdWVyeShxdWVyeTogUXVlcnkpIHtcbiAgICAgICAgZm9yIChsZXQgZGF0YXNldCBvZiB0aGlzLmRhdGFzZXRzKSB7XG4gICAgICAgICAgICBpZiAoZGF0YXNldC5nZXRRdWVyeSgpLmVxdWFsVG8ocXVlcnkpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldERhdGFzZXRCeUlkKGlkOiBudW1iZXIpIHtcbiAgICAgICAgZm9yIChsZXQgZGF0YXNldCBvZiB0aGlzLmRhdGFzZXRzKSB7XG4gICAgICAgICAgICBpZiAoZGF0YXNldC5nZXRJZCgpID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFhEYXRhc2V0SWRzKCkge1xuICAgICAgICBsZXQgaWRzOiBBcnJheTxudW1iZXI+ID0gW107XG4gICAgICAgIGZvciAobGV0IGRhdGFzZXQgb2YgdGhpcy5kYXRhc2V0cykge1xuICAgICAgICAgICAgaWYgKGRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkge1xuICAgICAgICAgICAgICAgIGxldCBpZCA9IGRhdGFzZXQuZ2V0UXVlcnkoKS5nZXRJZCgpO1xuICAgICAgICAgICAgICAgIGlmICghaWRzLmluY2x1ZGVzKGlkKSAmJiBpZCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWRzLnB1c2goaWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaWRzO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXREYXRlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGF0ZXM7XG4gICAgfVxuXG4gICAgcHVibGljIGdldE5hbWVzKCkge1xuICAgICAgICBsZXQgbmFtZXMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgZGF0YXNldCBvZiB0aGlzLmRhdGFzZXRzKSB7XG4gICAgICAgICAgICBuYW1lcy5wdXNoKGRhdGFzZXQuZ2V0TmFtZSgpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmFtZXM7XG4gICAgfVxuXG4gICAgbmV4dCgpOiBJdGVyYXRvclJlc3VsdDxEYXRhc2V0PiB7XG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA8IHRoaXMuZGF0YXNldHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLmRhdGFzZXRzW3RoaXMuY3VycmVudEluZGV4KytdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEluZGV4ID0gMDtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZG9uZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPERhdGFzZXQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgUmVuZGVySW5mbyB7XG4gICAgLy8gSW5wdXRcbiAgICBxdWVyaWVzOiBRdWVyeVtdO1xuICAgIHhEYXRhc2V0OiBudW1iZXJbXTtcbiAgICBmb2xkZXI6IHN0cmluZztcbiAgICBmaWxlOiBzdHJpbmdbXTtcbiAgICBzcGVjaWZpZWRGaWxlc09ubHk6IGJvb2xlYW47XG4gICAgZmlsZUNvbnRhaW5zTGlua2VkRmlsZXM6IHN0cmluZ1tdO1xuICAgIGZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rOiBzdHJpbmc7XG4gICAgZGF0ZUZvcm1hdDogc3RyaW5nO1xuICAgIGRhdGVGb3JtYXRQcmVmaXg6IHN0cmluZztcbiAgICBkYXRlRm9ybWF0U3VmZml4OiBzdHJpbmc7XG4gICAgc3RhcnREYXRlOiBNb21lbnQgfCBudWxsO1xuICAgIGVuZERhdGU6IE1vbWVudCB8IG51bGw7XG4gICAgZGF0YXNldE5hbWU6IHN0cmluZ1tdO1xuICAgIGNvbnN0VmFsdWU6IG51bWJlcltdO1xuICAgIGlnbm9yZUF0dGFjaGVkVmFsdWU6IGJvb2xlYW5bXTtcbiAgICBpZ25vcmVaZXJvVmFsdWU6IGJvb2xlYW5bXTtcbiAgICBhY2N1bTogYm9vbGVhbltdO1xuICAgIHN0YWNrOiBib29sZWFuO1xuICAgIHBlbmFsdHk6IG51bWJlcltdO1xuICAgIHZhbHVlU2hpZnQ6IG51bWJlcltdO1xuICAgIHNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbjogbnVtYmVyW107XG4gICAgdmFsdWVUeXBlOiBzdHJpbmdbXTsgLy8gbnVtYmVyL2Zsb2F0LCBpbnQsIHN0cmluZywgYm9vbGVhbiwgZGF0ZSwgdGltZSwgZGF0ZXRpbWVcbiAgICB0ZXh0VmFsdWVNYXA6IFRleHRWYWx1ZU1hcDtcblxuICAgIGRhdGFBcmVhU2l6ZTogU2l6ZTtcbiAgICBtYXJnaW46IE1hcmdpbjtcblxuICAgIGZpeGVkU2NhbGU6IG51bWJlcjtcbiAgICBmaXRQYW5lbFdpZHRoOiBib29sZWFuO1xuICAgIGFzcGVjdFJhdGlvOiBBc3BlY3RSYXRpbztcblxuICAgIG91dHB1dDogYW55W107XG4gICAgbGluZTogTGluZUluZm9bXTtcbiAgICBiYXI6IEJhckluZm9bXTtcbiAgICBwaWU6IFBpZUluZm9bXTtcbiAgICBzdW1tYXJ5OiBTdW1tYXJ5SW5mb1tdO1xuICAgIG1vbnRoOiBNb250aEluZm9bXTtcbiAgICBoZWF0bWFwOiBIZWF0bWFwSW5mb1tdO1xuICAgIGJ1bGxldDogQnVsbGV0SW5mb1tdO1xuICAgIGN1c3RvbURhdGFzZXQ6IEN1c3RvbURhdGFzZXRJbmZvW107XG5cbiAgICBwdWJsaWMgZGF0YXNldHM6IERhdGFzZXRzIHwgbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKHF1ZXJpZXM6IFF1ZXJ5W10pIHtcbiAgICAgICAgdGhpcy5xdWVyaWVzID0gcXVlcmllcztcbiAgICAgICAgdGhpcy54RGF0YXNldCA9IFtdOyAvLyB1c2UgZmlsZSBuYW1lXG4gICAgICAgIHRoaXMuZm9sZGVyID0gXCIvXCI7XG4gICAgICAgIHRoaXMuZmlsZSA9IFtdOyAvLyBleHRyYSBmaWxlcyB0byB1c2VcbiAgICAgICAgdGhpcy5zcGVjaWZpZWRGaWxlc09ubHkgPSBmYWxzZTsgLy8gaWYgdHJ1ZSwgdXNlIGZpbGVzIHNwZWNpZmllZCBvbmx5XG4gICAgICAgIHRoaXMuZmlsZUNvbnRhaW5zTGlua2VkRmlsZXMgPSBbXTtcbiAgICAgICAgdGhpcy5maWxlTXVsdGlwbGllckFmdGVyTGluayA9IFwiXCI7IC8vIHJlZ2V4IHBhdHRlcm4gdG8gZXh0cmFjdCBtdWx0aXBsaWVyIGFmdGVyIGxpbmtcbiAgICAgICAgdGhpcy5kYXRlRm9ybWF0ID0gXCJZWVlZLU1NLUREXCI7XG4gICAgICAgIHRoaXMuZGF0ZUZvcm1hdFByZWZpeCA9IFwiXCI7XG4gICAgICAgIHRoaXMuZGF0ZUZvcm1hdFN1ZmZpeCA9IFwiXCI7XG4gICAgICAgIHRoaXMuc3RhcnREYXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5lbmREYXRlID0gbnVsbDtcbiAgICAgICAgdGhpcy5kYXRhc2V0TmFtZSA9IFtdOyAvLyB1bnRpdGxlZFxuICAgICAgICB0aGlzLmNvbnN0VmFsdWUgPSBbMS4wXTtcbiAgICAgICAgdGhpcy5pZ25vcmVBdHRhY2hlZFZhbHVlID0gW107IC8vIGZhbHNlXG4gICAgICAgIHRoaXMuaWdub3JlWmVyb1ZhbHVlID0gW107IC8vIGZhbHNlXG4gICAgICAgIHRoaXMuYWNjdW0gPSBbXTsgLy8gZmFsc2UsIGFjY3VtIHZhbHVlcyBzdGFydCBmcm9tIHplcm8gb3ZlciBkYXlzXG4gICAgICAgIHRoaXMuc3RhY2sgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wZW5hbHR5ID0gW107IC8vIG51bGwsIHVzZSB0aGlzIHZhbHVlIGluc3RlYWQgb2YgbnVsbCB2YWx1ZVxuICAgICAgICB0aGlzLnZhbHVlU2hpZnQgPSBbXTtcbiAgICAgICAgdGhpcy5zaGlmdE9ubHlWYWx1ZUxhcmdlclRoYW4gPSBbXTtcbiAgICAgICAgdGhpcy52YWx1ZVR5cGUgPSBbXTtcbiAgICAgICAgdGhpcy50ZXh0VmFsdWVNYXAgPSB7fTtcblxuICAgICAgICB0aGlzLmRhdGFBcmVhU2l6ZSA9IG5ldyBTaXplKDMwMCwgMzAwKTtcbiAgICAgICAgdGhpcy5hc3BlY3RSYXRpbyA9IG5ldyBBc3BlY3RSYXRpbygxLCAxKTtcbiAgICAgICAgdGhpcy5tYXJnaW4gPSBuZXcgTWFyZ2luKDEwLCAxMCwgMTAsIDEwKTsgLy8gdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XG5cbiAgICAgICAgdGhpcy5maXhlZFNjYWxlID0gMS4wO1xuICAgICAgICB0aGlzLmZpdFBhbmVsV2lkdGggPSBmYWxzZTtcblxuICAgICAgICB0aGlzLm91dHB1dCA9IFtdO1xuICAgICAgICB0aGlzLmxpbmUgPSBbXTtcbiAgICAgICAgdGhpcy5iYXIgPSBbXTtcbiAgICAgICAgdGhpcy5waWUgPSBbXTtcbiAgICAgICAgdGhpcy5zdW1tYXJ5ID0gW107XG4gICAgICAgIHRoaXMubW9udGggPSBbXTtcbiAgICAgICAgdGhpcy5oZWF0bWFwID0gW107XG4gICAgICAgIHRoaXMuYnVsbGV0ID0gW107XG4gICAgICAgIHRoaXMuY3VzdG9tRGF0YXNldCA9IFtdO1xuXG4gICAgICAgIHRoaXMuZGF0YXNldHMgPSBudWxsO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRRdWVyeUJ5SWQoaWQ6IG51bWJlcikge1xuICAgICAgICBmb3IgKGxldCBxdWVyeSBvZiB0aGlzLnF1ZXJpZXMpIHtcbiAgICAgICAgICAgIGlmIChxdWVyeS5nZXRJZCgpID09PSBpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBxdWVyeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEN1c3RvbURhdGFzZXRJbmZvIHtcbiAgICBpZDogbnVtYmVyO1xuICAgIG5hbWU6IHN0cmluZztcbiAgICB4RGF0YTogc3RyaW5nW107XG4gICAgeURhdGE6IHN0cmluZ1tdO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaWQgPSAtMTtcbiAgICAgICAgdGhpcy5uYW1lID0gXCJcIjtcbiAgICAgICAgdGhpcy54RGF0YSA9IFtdO1xuICAgICAgICB0aGlzLnlEYXRhID0gW107XG4gICAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElHcmFwaCB7XG4gICAgR2V0R3JhcGhUeXBlKCk6IEdyYXBoVHlwZTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTGVnZW5kIHtcbiAgICBzaG93TGVnZW5kOiBib29sZWFuO1xuICAgIGxlZ2VuZFBvc2l0aW9uOiBzdHJpbmc7XG4gICAgbGVnZW5kT3JpZW50YXRpb246IHN0cmluZztcbiAgICBsZWdlbmRCZ0NvbG9yOiBzdHJpbmc7XG4gICAgbGVnZW5kQm9yZGVyQ29sb3I6IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIENvbW1vbkNoYXJ0SW5mbyBpbXBsZW1lbnRzIElHcmFwaCwgSUxlZ2VuZCB7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICB4QXhpc0xhYmVsOiBzdHJpbmc7XG4gICAgeEF4aXNDb2xvcjogc3RyaW5nO1xuICAgIHhBeGlzTGFiZWxDb2xvcjogc3RyaW5nO1xuICAgIHlBeGlzTGFiZWw6IHN0cmluZ1tdO1xuICAgIHlBeGlzQ29sb3I6IHN0cmluZ1tdO1xuICAgIHlBeGlzTGFiZWxDb2xvcjogc3RyaW5nW107XG4gICAgeUF4aXNVbml0OiBzdHJpbmdbXTtcbiAgICB4QXhpc1RpY2tJbnRlcnZhbDogc3RyaW5nO1xuICAgIHlBeGlzVGlja0ludGVydmFsOiBzdHJpbmdbXTtcbiAgICB4QXhpc1RpY2tMYWJlbEZvcm1hdDogc3RyaW5nO1xuICAgIHlBeGlzVGlja0xhYmVsRm9ybWF0OiBzdHJpbmdbXTtcbiAgICB5TWluOiBudW1iZXJbXTtcbiAgICB5TWF4OiBudW1iZXJbXTtcbiAgICByZXZlcnNlWUF4aXM6IGJvb2xlYW5bXTtcbiAgICBhbGxvd0luc3BlY3REYXRhOiBib29sZWFuO1xuXG4gICAgLy8gSUxlZ2VuZFxuICAgIHNob3dMZWdlbmQ6IGJvb2xlYW47XG4gICAgbGVnZW5kUG9zaXRpb246IHN0cmluZztcbiAgICBsZWdlbmRPcmllbnRhdGlvbjogc3RyaW5nO1xuICAgIGxlZ2VuZEJnQ29sb3I6IHN0cmluZztcbiAgICBsZWdlbmRCb3JkZXJDb2xvcjogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudGl0bGUgPSBcIlwiO1xuICAgICAgICB0aGlzLnhBeGlzTGFiZWwgPSBcIkRhdGVcIjtcbiAgICAgICAgdGhpcy54QXhpc0NvbG9yID0gXCJcIjtcbiAgICAgICAgdGhpcy54QXhpc0xhYmVsQ29sb3IgPSBcIlwiO1xuICAgICAgICB0aGlzLnlBeGlzTGFiZWwgPSBbXTsgLy8gXCJWYWx1ZVwiLCAyIGVsZW1lbnRzXG4gICAgICAgIHRoaXMueUF4aXNDb2xvciA9IFtdOyAvLyBcIlwiLCAyIGVsZW1lbnRzXG4gICAgICAgIHRoaXMueUF4aXNMYWJlbENvbG9yID0gW107IC8vIFwiXCIsIDIgZWxlbWVudHNcbiAgICAgICAgdGhpcy55QXhpc1VuaXQgPSBbXTsgLy8gXCJcIiwgMiBlbGVtZW50c1xuICAgICAgICB0aGlzLnhBeGlzVGlja0ludGVydmFsID0gbnVsbDsgLy8gdGhlIHN0cmluZyB3aWxsIGJlIGNvbnZlcnRlZCB0byBEdXJhdGlvbiAoYSBtb250aCBpcyBub3QgbmVzc2Nlc2FyeSB0byAzMCBkYXlzKVxuICAgICAgICB0aGlzLnlBeGlzVGlja0ludGVydmFsID0gW107IC8vIG51bGwsIDIgZWxlbWVudHNcbiAgICAgICAgdGhpcy54QXhpc1RpY2tMYWJlbEZvcm1hdCA9IG51bGw7XG4gICAgICAgIHRoaXMueUF4aXNUaWNrTGFiZWxGb3JtYXQgPSBbXTsgLy8gbnVsbCwgMiBlbGVtZW50c1xuICAgICAgICB0aGlzLnlNaW4gPSBbXTsgLy8gbnVsbCwgMiBlbGVtZW50c1xuICAgICAgICB0aGlzLnlNYXggPSBbXTsgLy8gbnVsbCwgMiBlbGVtZW50c1xuICAgICAgICB0aGlzLnJldmVyc2VZQXhpcyA9IFtdOyAvLyBmYWxzZSwgMiBlbGVtZW50c1xuICAgICAgICB0aGlzLmFsbG93SW5zcGVjdERhdGEgPSB0cnVlO1xuXG4gICAgICAgIC8vIElMZWdlbmRcbiAgICAgICAgdGhpcy5zaG93TGVnZW5kID0gZmFsc2U7XG4gICAgICAgIHRoaXMubGVnZW5kUG9zaXRpb24gPSBcIlwiOyAvLyB0b3AsIGJvdHRvbSwgbGVmdCwgcmlnaHRcbiAgICAgICAgdGhpcy5sZWdlbmRPcmllbnRhdGlvbiA9IFwiXCI7IC8vIGhvcml6b250YWwsIHZlcnRpY2FsXG4gICAgICAgIHRoaXMubGVnZW5kQmdDb2xvciA9IFwiXCI7XG4gICAgICAgIHRoaXMubGVnZW5kQm9yZGVyQ29sb3IgPSBcIlwiO1xuICAgIH1cblxuICAgIHB1YmxpYyBHZXRHcmFwaFR5cGUoKSB7XG4gICAgICAgIHJldHVybiBHcmFwaFR5cGUuVW5rbm93bjtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBMaW5lSW5mbyBleHRlbmRzIENvbW1vbkNoYXJ0SW5mbyB7XG4gICAgbGluZUNvbG9yOiBzdHJpbmdbXTtcbiAgICBsaW5lV2lkdGg6IG51bWJlcltdO1xuICAgIHNob3dMaW5lOiBib29sZWFuW107XG4gICAgc2hvd1BvaW50OiBib29sZWFuW107XG4gICAgcG9pbnRDb2xvcjogc3RyaW5nW107XG4gICAgcG9pbnRCb3JkZXJDb2xvcjogc3RyaW5nW107XG4gICAgcG9pbnRCb3JkZXJXaWR0aDogbnVtYmVyW107XG4gICAgcG9pbnRTaXplOiBudW1iZXJbXTtcbiAgICBmaWxsR2FwOiBib29sZWFuW107XG4gICAgeUF4aXNMb2NhdGlvbjogc3RyaW5nW107XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5saW5lQ29sb3IgPSBbXTsgLy8gXCJcIlxuICAgICAgICB0aGlzLmxpbmVXaWR0aCA9IFtdOyAvLyAxLjVcbiAgICAgICAgdGhpcy5zaG93TGluZSA9IFtdOyAvLyB0cnVlXG4gICAgICAgIHRoaXMuc2hvd1BvaW50ID0gW107IC8vIHRydWVcbiAgICAgICAgdGhpcy5wb2ludENvbG9yID0gW107IC8vICM2OWIzYTJcbiAgICAgICAgdGhpcy5wb2ludEJvcmRlckNvbG9yID0gW107XG4gICAgICAgIHRoaXMucG9pbnRCb3JkZXJXaWR0aCA9IFtdOyAvLyAwLjBcbiAgICAgICAgdGhpcy5wb2ludFNpemUgPSBbXTsgLy8gMy4wXG4gICAgICAgIHRoaXMuZmlsbEdhcCA9IFtdOyAvLyBmYWxzZVxuICAgICAgICB0aGlzLnlBeGlzTG9jYXRpb24gPSBbXTsgLy8gbGVmdCwgZm9yIGVhY2ggdGFyZ2V0XG4gICAgfVxuXG4gICAgcHVibGljIEdldEdyYXBoVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIEdyYXBoVHlwZS5MaW5lO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIEJhckluZm8gZXh0ZW5kcyBDb21tb25DaGFydEluZm8ge1xuICAgIGJhckNvbG9yOiBzdHJpbmdbXTtcbiAgICB5QXhpc0xvY2F0aW9uOiBzdHJpbmdbXTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmJhckNvbG9yID0gW107IC8vICM2OWIzYTJcbiAgICAgICAgdGhpcy55QXhpc0xvY2F0aW9uID0gW107IC8vIGxlZnQsIGZvciBlYWNoIHRhcmdldFxuICAgIH1cblxuICAgIHB1YmxpYyBHZXRHcmFwaFR5cGUoKSB7XG4gICAgICAgIHJldHVybiBHcmFwaFR5cGUuQmFyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFBpZUluZm8gaW1wbGVtZW50cyBJR3JhcGgsIElMZWdlbmQge1xuICAgIHRpdGxlOiBzdHJpbmc7XG4gICAgZGF0YTogc3RyaW5nW107XG4gICAgZGF0YUNvbG9yOiBzdHJpbmdbXTtcbiAgICBkYXRhTmFtZTogc3RyaW5nW107XG4gICAgbGFiZWw6IHN0cmluZ1tdO1xuICAgIGhpZGVMYWJlbExlc3NUaGFuOiBudW1iZXI7XG4gICAgc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbDogYm9vbGVhbjtcbiAgICBleHRMYWJlbDogc3RyaW5nW107XG5cbiAgICByYXRpb0lubmVyUmFkaXVzOiBudW1iZXI7XG5cbiAgICAvLyBJTGVnZW5kXG4gICAgc2hvd0xlZ2VuZDogYm9vbGVhbjtcbiAgICBsZWdlbmRQb3NpdGlvbjogc3RyaW5nO1xuICAgIGxlZ2VuZE9yaWVudGF0aW9uOiBzdHJpbmc7XG4gICAgbGVnZW5kQmdDb2xvcjogc3RyaW5nO1xuICAgIGxlZ2VuZEJvcmRlckNvbG9yOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy50aXRsZSA9IFwiXCI7XG4gICAgICAgIHRoaXMuZGF0YSA9IFtdO1xuICAgICAgICB0aGlzLmRhdGFDb2xvciA9IFtdO1xuICAgICAgICB0aGlzLmRhdGFOYW1lID0gW107XG4gICAgICAgIHRoaXMubGFiZWwgPSBbXTtcbiAgICAgICAgdGhpcy5oaWRlTGFiZWxMZXNzVGhhbiA9IDAuMDM7XG4gICAgICAgIHRoaXMuZXh0TGFiZWwgPSBbXTtcbiAgICAgICAgdGhpcy5zaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsID0gZmFsc2U7XG4gICAgICAgIHRoaXMucmF0aW9Jbm5lclJhZGl1cyA9IDAuMDtcblxuICAgICAgICAvLyBJTGVnZW5kXG4gICAgICAgIHRoaXMuc2hvd0xlZ2VuZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxlZ2VuZFBvc2l0aW9uID0gXCJcIjsgLy8gdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0XG4gICAgICAgIHRoaXMubGVnZW5kT3JpZW50YXRpb24gPSBcIlwiOyAvLyBob3Jpem9udGFsLCB2ZXJ0aWNhbFxuICAgICAgICB0aGlzLmxlZ2VuZEJnQ29sb3IgPSBcIlwiO1xuICAgICAgICB0aGlzLmxlZ2VuZEJvcmRlckNvbG9yID0gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgR2V0R3JhcGhUeXBlKCkge1xuICAgICAgICByZXR1cm4gR3JhcGhUeXBlLlBpZTtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTdW1tYXJ5SW5mbyBpbXBsZW1lbnRzIElHcmFwaCB7XG4gICAgdGVtcGxhdGU6IHN0cmluZztcbiAgICBzdHlsZTogc3RyaW5nO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGUgPSBcIlwiO1xuICAgICAgICB0aGlzLnN0eWxlID0gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgR2V0R3JhcGhUeXBlKCkge1xuICAgICAgICByZXR1cm4gR3JhcGhUeXBlLlN1bW1hcnk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTW9udGhJbmZvIGltcGxlbWVudHMgSUdyYXBoIHtcbiAgICBtb2RlOiBzdHJpbmc7XG4gICAgZGF0YXNldDogbnVtYmVyW107XG4gICAgc3RhcnRXZWVrT246IHN0cmluZztcbiAgICB0aHJlc2hvbGQ6IG51bWJlcltdO1xuICAgIHlNaW46IG51bWJlcltdO1xuICAgIHlNYXg6IG51bWJlcltdO1xuICAgIGNvbG9yOiBzdHJpbmc7XG4gICAgZGltTm90SW5Nb250aDogYm9vbGVhbjtcbiAgICBpbml0TW9udGg6IHN0cmluZzsgLy8gWVlZWS1NTVxuICAgIHNob3dTZWxlY3RlZFZhbHVlOiBib29sZWFuO1xuXG4gICAgLy8gaGVhZGVyXG4gICAgaGVhZGVyWWVhckNvbG9yOiBzdHJpbmc7XG4gICAgaGVhZGVyTW9udGhDb2xvcjogc3RyaW5nO1xuICAgIGRpdmlkaW5nTGluZUNvbG9yOiBzdHJpbmc7XG5cbiAgICAvLyBjaXJjbGVzIGFuZCByaW5nc1xuICAgIHNob3dDaXJjbGU6IGJvb2xlYW47XG4gICAgc2hvd1N0cmVhazogYm9vbGVhbjtcbiAgICBzaG93VG9kYXlSaW5nOiBib29sZWFuO1xuICAgIHNob3dTZWxlY3RlZFJpbmc6IGJvb2xlYW47XG4gICAgY2lyY2xlQ29sb3I6IHN0cmluZztcbiAgICBjaXJjbGVDb2xvckJ5VmFsdWU6IGJvb2xlYW47XG4gICAgdG9kYXlSaW5nQ29sb3I6IHN0cmluZztcbiAgICBzZWxlY3RlZFJpbmdDb2xvcjogc3RyaW5nO1xuXG4gICAgLy8gYW5ub3RhdGlvbnNcbiAgICBzaG93QW5ub3RhdGlvbjogYm9vbGVhbjtcbiAgICBhbm5vdGF0aW9uOiBzdHJpbmdbXTtcbiAgICBzaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0czogYm9vbGVhbjtcblxuICAgIC8vIGludGVybmFsXG4gICAgc2VsZWN0ZWREYXRlOiBzdHJpbmc7XG4gICAgc2VsZWN0ZWREYXRhc2V0OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5tb2RlID0gXCJjaXJjbGVcIjsgLy8gY2lyY2xlLCBhbm5vdGF0aW9uXG4gICAgICAgIHRoaXMuZGF0YXNldCA9IFtdO1xuICAgICAgICB0aGlzLnN0YXJ0V2Vla09uID0gXCJTdW5cIjtcbiAgICAgICAgdGhpcy50aHJlc2hvbGQgPSBbXTsgLy8gaWYgdmFsdWUgPiB0aHJlc2hvbGQsIHdpbGwgc2hvdyBkb3RcbiAgICAgICAgdGhpcy55TWluID0gW107XG4gICAgICAgIHRoaXMueU1heCA9IFtdO1xuICAgICAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICAgICAgdGhpcy5kaW1Ob3RJbk1vbnRoID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pbml0TW9udGggPSBcIlwiO1xuICAgICAgICB0aGlzLnNob3dTZWxlY3RlZFZhbHVlID0gdHJ1ZTtcblxuICAgICAgICAvLyBoZWFkZXJcbiAgICAgICAgdGhpcy5oZWFkZXJZZWFyQ29sb3IgPSBudWxsO1xuICAgICAgICB0aGlzLmhlYWRlck1vbnRoQ29sb3IgPSBudWxsO1xuICAgICAgICB0aGlzLmRpdmlkaW5nTGluZUNvbG9yID0gbnVsbDtcblxuICAgICAgICAvLyBjaXJjbGVzIGFuZCByaW5nc1xuICAgICAgICB0aGlzLnNob3dDaXJjbGUgPSB0cnVlO1xuICAgICAgICB0aGlzLnNob3dTdHJlYWsgPSB0cnVlOyAvLyBhIHN0cmVhayBjb25uZWN0cyBuZWlnYm9yIGRvdHNcbiAgICAgICAgdGhpcy5zaG93VG9kYXlSaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaG93U2VsZWN0ZWRSaW5nID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5jaXJjbGVDb2xvciA9IG51bGw7XG4gICAgICAgIHRoaXMuY2lyY2xlQ29sb3JCeVZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG9kYXlSaW5nQ29sb3IgPSBcIlwiOyAvLyB3aGl0ZVxuICAgICAgICB0aGlzLnNlbGVjdGVkUmluZ0NvbG9yID0gXCJmaXJlYnJpY2tcIjtcblxuICAgICAgICAvLyBhbm5vdGF0aW9uc1xuICAgICAgICB0aGlzLnNob3dBbm5vdGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hbm5vdGF0aW9uID0gW107IC8vIGFubm90YXRpb24gZm9yIGVhY2ggZGF0YXNldCwgYWNjZXB0IGV4cHJlc3Npb24gdGh1cyB2YWx1ZVxuICAgICAgICB0aGlzLnNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzID0gdHJ1ZTtcblxuICAgICAgICAvLyBpbnRlcm5hbFxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IFwiXCI7IC8vIHNlbGVjdGVkIGRhdGVcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGFzZXQgPSBudWxsOyAvLyBzZWxlY3RlZCBpbmRleCBvZiBkYXRhc2V0XG4gICAgfVxuXG4gICAgcHVibGljIEdldEdyYXBoVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIEdyYXBoVHlwZS5Nb250aDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBIZWF0bWFwSW5mbyBpbXBsZW1lbnRzIElHcmFwaCB7XG4gICAgZGF0YXNldDogc3RyaW5nO1xuICAgIHN0YXJ0V2Vla09uOiBzdHJpbmc7XG4gICAgb3JpZW50YXRpb246IHN0cmluZztcbiAgICB5TWluOiBudW1iZXI7XG4gICAgeU1heDogbnVtYmVyO1xuICAgIGNvbG9yOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5kYXRhc2V0ID0gXCIwXCI7XG4gICAgICAgIHRoaXMuc3RhcnRXZWVrT24gPSBcIlN1blwiO1xuICAgICAgICB0aGlzLm9yaWVudGF0aW9uID0gXCJ2ZXJ0aWNhbFwiO1xuICAgICAgICB0aGlzLnlNaW4gPSBudWxsO1xuICAgICAgICB0aGlzLnlNYXggPSBudWxsO1xuICAgICAgICB0aGlzLmNvbG9yID0gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgR2V0R3JhcGhUeXBlKCkge1xuICAgICAgICByZXR1cm4gR3JhcGhUeXBlLkhlYXRtYXA7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQnVsbGV0SW5mbyBpbXBsZW1lbnRzIElHcmFwaCB7XG4gICAgdGl0bGU6IHN0cmluZztcbiAgICBkYXRhc2V0OiBzdHJpbmc7XG4gICAgb3JpZW50YXRpb246IHN0cmluZztcbiAgICB2YWx1ZTogc3RyaW5nO1xuICAgIHZhbHVlVW5pdDogc3RyaW5nO1xuICAgIHZhbHVlQ29sb3I6IHN0cmluZztcbiAgICByYW5nZTogbnVtYmVyW107XG4gICAgcmFuZ2VDb2xvcjogc3RyaW5nW107XG4gICAgc2hvd01hcmtlcjogYm9vbGVhbjtcbiAgICBtYXJrZXJWYWx1ZTogbnVtYmVyO1xuICAgIG1hcmtlckNvbG9yOiBzdHJpbmc7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy50aXRsZSA9IFwiXCI7XG4gICAgICAgIHRoaXMuZGF0YXNldCA9IFwiMFwiOyAvLyBkYXRhc2V0IGlkIG9yIG5hbWVcbiAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9IFwiaG9yaXpvbnRhbFwiOyAvLyBvciB2ZXJ0aWNhbFxuICAgICAgICB0aGlzLnZhbHVlID0gXCJcIjsgLy8gQ2FuIHBvc3Nlc3MgdGVtcGxhdGUgdmFyaWFsYmVcbiAgICAgICAgdGhpcy52YWx1ZVVuaXQgPSBcIlwiO1xuICAgICAgICB0aGlzLnZhbHVlQ29sb3IgPSBcIiM2OWIzYTJcIjtcbiAgICAgICAgdGhpcy5yYW5nZSA9IFtdO1xuICAgICAgICB0aGlzLnJhbmdlQ29sb3IgPSBbXTtcbiAgICAgICAgdGhpcy5zaG93TWFya2VyID0gZmFsc2U7XG4gICAgICAgIHRoaXMubWFya2VyVmFsdWUgPSAwO1xuICAgICAgICB0aGlzLm1hcmtlckNvbG9yID0gXCJcIjtcbiAgICB9XG5cbiAgICBwdWJsaWMgR2V0R3JhcGhUeXBlKCkge1xuICAgICAgICByZXR1cm4gR3JhcGhUeXBlLkJ1bGxldDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBTaXplIHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuXG4gICAgY29uc3RydWN0b3IodzogbnVtYmVyLCBoOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy53aWR0aCA9IHc7XG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gaDtcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBBc3BlY3RSYXRpbyAge1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG5cbiAgICBjb25zdHJ1Y3Rvcih4OiBudW1iZXIsIHk6IG51bWJlcikge1xuICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICB0aGlzLnkgPSB5O1xuICAgIH1cblxuICAgIHB1YmxpYyByZWNhbGN1bGF0ZVNpemUoc2l6ZTogU2l6ZSk6IFNpemUge1xuICAgICAgICBsZXQgYXNwZWN0UmF0aW8gPSB0aGlzLnggLyB0aGlzLnk7XG4gICAgICAgIGxldCB3aWR0aCA9IHBhcnNlRmxvYXQoKHNpemUud2lkdGggKiBhc3BlY3RSYXRpbykudG9GaXhlZCgyKSlcbiAgICAgICAgcmV0dXJuIG5ldyBTaXplKHdpZHRoLCBzaXplLmhlaWdodCk7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgTWFyZ2luIHtcbiAgICB0b3A6IG51bWJlcjtcbiAgICByaWdodDogbnVtYmVyO1xuICAgIGJvdHRvbTogbnVtYmVyO1xuICAgIGxlZnQ6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHRvcDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBib3R0b206IG51bWJlciwgbGVmdDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMudG9wID0gdG9wO1xuICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gICAgICAgIHRoaXMuYm90dG9tID0gYm90dG9tO1xuICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFRyYW5zZm9ybSB7XG4gICAgdHJhbnNsYXRlWDogbnVtYmVyO1xuICAgIHRyYW5zbGF0ZVk6IG51bWJlcjtcblxuICAgIGNvbnN0cnVjdG9yKHRyYW5zZm9ybTogYW55KSB7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlWCA9IDA7XG4gICAgICAgIHRoaXMudHJhbnNsYXRlWSA9IDA7XG5cbiAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGxldCBncm91cHMgPSB0cmFuc2Zvcm0ubWF0Y2goXG4gICAgICAgICAgICAgICAgL3RyYW5zbGF0ZVxcKFxccyooPzx4PltcXGRcXC5cXC8tXSspXFxzKixcXHMqKD88eT5bXFxkXFwuXFwvLV0rKVxccypcXCkvXG4gICAgICAgICAgICApLmdyb3VwcztcbiAgICAgICAgICAgIGlmIChncm91cHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVggPSBwYXJzZUZsb2F0KGdyb3Vwcy54KTtcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVkgPSBwYXJzZUZsb2F0KGdyb3Vwcy55KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgQ2hhcnRFbGVtZW50cyA9IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG59O1xuXG5leHBvcnQgY2xhc3MgVGFibGVEYXRhIHtcbiAgICBmaWxlUGF0aDogc3RyaW5nO1xuICAgIHRhYmxlSW5kZXg6IG51bWJlcjtcbiAgICB4RGF0YXNldDogUXVlcnkgfCBudWxsO1xuICAgIHlEYXRhc2V0czogQXJyYXk8UXVlcnk+O1xuXG4gICAgY29uc3RydWN0b3IoZmlsZVBhdGg6IHN0cmluZywgdGFibGVJbmRleDogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuZmlsZVBhdGggPSBmaWxlUGF0aDtcbiAgICAgICAgdGhpcy50YWJsZUluZGV4ID0gdGFibGVJbmRleDtcbiAgICAgICAgdGhpcy54RGF0YXNldCA9IG51bGw7XG4gICAgICAgIHRoaXMueURhdGFzZXRzID0gW107IC8vIGFycmF5IG9mIHF1ZXJ5XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29sbGVjdGluZ1Byb2Nlc3NJbmZvIHtcbiAgICBmaWxlVG90YWw6IG51bWJlcjsgLy8gdG90YWwgbnVtYmVyIG9mIGZpbGVzXG4gICAgZmlsZUF2YWlsYWJsZTogbnVtYmVyOyAvLyB0b3RhbCBhdmFpbGFibGUgY291bnRcbiAgICBmaWxlT3V0T2ZEYXRlUmFuZ2U6IG51bWJlcjtcbiAgICBmaWxlTm90SW5Gb3JtYXQ6IG51bWJlcjtcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZztcbiAgICBtaW5EYXRlOiBNb21lbnQ7XG4gICAgbWF4RGF0ZTogTW9tZW50O1xuICAgIGdvdEFueVZhbGlkWFZhbHVlOiBib29sZWFuO1xuICAgIGdvdEFueVZhbGlkWVZhbHVlOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZmlsZVRvdGFsID0gMDtcbiAgICAgICAgdGhpcy5maWxlQXZhaWxhYmxlID0gMDtcbiAgICAgICAgdGhpcy5maWxlT3V0T2ZEYXRlUmFuZ2UgPSAwO1xuICAgICAgICB0aGlzLmZpbGVOb3RJbkZvcm1hdCA9IDA7XG4gICAgICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gXCJcIjtcbiAgICAgICAgdGhpcy5taW5EYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTsgLy8gaW52YWxpZCBkYXRlXG4gICAgICAgIHRoaXMubWF4RGF0ZSA9IHdpbmRvdy5tb21lbnQoXCJcIik7IC8vIGludmFsaWQgZGF0ZVxuICAgICAgICB0aGlzLmdvdEFueVZhbGlkWFZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZ290QW55VmFsaWRZVmFsdWUgPSBmYWxzZTtcbiAgICB9XG59XG5cbmV4cG9ydCB0eXBlIFhWYWx1ZU1hcCA9IE1hcDxudW1iZXIsIHN0cmluZz47XG5leHBvcnQgdHlwZSBEYXRhTWFwID0gTWFwPHN0cmluZywgQXJyYXk8UXVlcnlWYWx1ZVBhaXI+PjtcbiIsImltcG9ydCB7IFJlbmRlckluZm8sIFNpemUsIFRleHRWYWx1ZU1hcCwgVHJhbnNmb3JtIH0gZnJvbSBcIi4vZGF0YVwiO1xuaW1wb3J0IHsgVEZpbGUsIFRGb2xkZXIsIG5vcm1hbGl6ZVBhdGggfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IFZhbHVlVHlwZSB9IGZyb20gXCIuL2RhdGFcIjtcbmltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgTW9tZW50LCBEdXJhdGlvbiB9IGZyb20gXCJtb21lbnRcIjtcblxuLy8gZGF0ZSBhbmQgdGltZVxuZnVuY3Rpb24gbWFrZVRpbWVGb3JtYXQoKSB7XG4gICAgLy9ISDogMi1kaWdpdHMgaG91cnMgKDI0IGhvdXIgdGltZSkgZnJvbSAwIHRvIDIzLCBIOiwgMi1kaWdpdHMgaG91cnMgKDI0IGhvdXIgdGltZSkgZnJvbSAwIHRvIDIzIHdpdGhvdXQgbGVhZGluZyAwXG4gICAgLy8gaGg6IDItZGlnaXRzIGhvdXJzICgxMiBob3VyIHRpbWUpLCBoOiAyLWRpZ2l0cyBob3VycyAoMTIgaG91ciB0aW1lKSB3aXRob3V0IGxlYWRpbmcgMFxuICAgIC8vIGEvQTogYW0gb3IgcG1cbiAgICBjb25zdCBmbXRIb3VycyA9IFtcIkhIXCIsIFwiSFwiLCBcImhoXCIsIFwiaFwiXTtcbiAgICAvL21tOiAyLWRpZ2l0cyBtaW51dGVzLCBtOiAyLWRpZ2l0cyBtaW51dGVzIHdpdGhvdXQgbGVhZGluZyB6ZXJvXG4gICAgY29uc3QgZm10TWlucyA9IFtcIm1tXCIsIFwibVwiXTtcbiAgICAvLyBzczogMi1kaWdpdHMgc2Vjb25kcywgczogMi1kaWdpdHMgc2Vjb25kcyB3aXRob3V0IGxlYWRpbmcgemVyb1xuICAgIC8vIGNhbiBiZSBlbXB0eVxuICAgIGNvbnN0IGZtdFNlY3MgPSBbXCJzc1wiLCBcInNcIiwgXCJcIl07XG5cbiAgICBsZXQgdGltZUZvcm1hdCA9IFtdO1xuICAgIGZvciAobGV0IGZtdEhvdXIgb2YgZm10SG91cnMpIHtcbiAgICAgICAgZm9yIChsZXQgZm10TWluIG9mIGZtdE1pbnMpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGZtdFNlYyBvZiBmbXRTZWNzKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZtdCA9IGAke2ZtdEhvdXJ9OiR7Zm10TWlufWA7XG4gICAgICAgICAgICAgICAgaWYgKGZtdFNlYyAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICBmbXQgKz0gYDoke2ZtdFNlY31gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZm10SG91ci5jb250YWlucyhcImhcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgZm10ICs9IFwiIGFcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGltZUZvcm1hdC5wdXNoKGZtdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy9jb25zb2xlLmxvZyh0aW1lRm9ybWF0KTtcbiAgICByZXR1cm4gdGltZUZvcm1hdDtcbn1cbmNvbnN0IHRpbWVGb3JtYXQgPSBtYWtlVGltZUZvcm1hdCgpO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZVN0cmluZ0Zyb21JbnB1dFN0cmluZyhcbiAgICBpbnB1dFN0cmluZzogc3RyaW5nLFxuICAgIGRhdGVGb3JtYXRQcmVmaXg6IHN0cmluZyxcbiAgICBkYXRlRm9ybWF0U3VmZml4OiBzdHJpbmdcbikge1xuICAgIGlmICghZGF0ZUZvcm1hdFByZWZpeCAmJiAhZGF0ZUZvcm1hdFN1ZmZpeCkgcmV0dXJuIGlucHV0U3RyaW5nO1xuXG4gICAgbGV0IGRhdGVTdHJpbmcgPSBpbnB1dFN0cmluZztcbiAgICBpZiAoZGF0ZVN0cmluZy5zdGFydHNXaXRoKFwiXlwiKSkge1xuICAgICAgICBkYXRlU3RyaW5nID0gZGF0ZVN0cmluZy5zbGljZSgxKTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coZGF0ZVN0cmluZyk7XG5cbiAgICBpZiAoZGF0ZUZvcm1hdFByZWZpeCkge1xuICAgICAgICBsZXQgc3RyUmVnZXggPSBcIl4oXCIgKyBkYXRlRm9ybWF0UHJlZml4ICsgXCIpXCI7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHN0clJlZ2V4KTtcbiAgICAgICAgbGV0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnbVwiKTtcbiAgICAgICAgaWYgKHJlZ2V4LnRlc3QoZGF0ZVN0cmluZykpIHtcbiAgICAgICAgICAgIGRhdGVTdHJpbmcgPSBkYXRlU3RyaW5nLnJlcGxhY2UocmVnZXgsIFwiXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGRhdGVTdHJpbmcpO1xuXG4gICAgaWYgKGRhdGVGb3JtYXRTdWZmaXgpIHtcbiAgICAgICAgbGV0IHN0clJlZ2V4ID0gXCIoXCIgKyBkYXRlRm9ybWF0U3VmZml4ICsgXCIpJFwiO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhzdHJSZWdleCk7XG4gICAgICAgIGxldCByZWdleCA9IG5ldyBSZWdFeHAoc3RyUmVnZXgsIFwiZ21cIik7XG4gICAgICAgIGlmIChyZWdleC50ZXN0KGRhdGVTdHJpbmcpKSB7XG4gICAgICAgICAgICBkYXRlU3RyaW5nID0gZGF0ZVN0cmluZy5yZXBsYWNlKHJlZ2V4LCBcIlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhkYXRlU3RyaW5nKTtcblxuICAgIHJldHVybiBkYXRlU3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyVG9EYXRlKHN0ckRhdGU6IHN0cmluZywgZGF0ZUZvcm1hdDogc3RyaW5nKTogTW9tZW50IHtcbiAgICBsZXQgZm9ybWF0OiBhbnkgPSBkYXRlRm9ybWF0O1xuXG4gICAgaWYgKFxuICAgICAgICBzdHJEYXRlLmxlbmd0aCA+IDQgJiZcbiAgICAgICAgc3RyRGF0ZS5zdGFydHNXaXRoKFwiW1tcIikgJiZcbiAgICAgICAgc3RyRGF0ZS5lbmRzV2l0aChcIl1dXCIpXG4gICAgKSB7XG4gICAgICAgIHN0ckRhdGUgPSBzdHJEYXRlLnN1YnN0cmluZygyLCBzdHJEYXRlLmxlbmd0aCAtIDIpO1xuICAgIH1cblxuICAgIGlmIChkYXRlRm9ybWF0LnRvTG93ZXJDYXNlKCkgPT09IFwiaXNvLTg2MDFcIikge1xuICAgICAgICBmb3JtYXQgPSB3aW5kb3cubW9tZW50LklTT184NjAxO1xuICAgIH1cblxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChzdHJEYXRlLCBmb3JtYXQsIHRydWUpO1xuXG4gICAgLy8gc3RpcCB0aW1lXG4gICAgZGF0ZSA9IGRhdGUuc3RhcnRPZihcImRheVwiKTtcblxuICAgIHJldHVybiBkYXRlO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoXG4gICAgc3RyRHVyYXRpb246IHN0cmluZyxcbiAgICB1bml0czogQXJyYXk8c3RyaW5nPixcbiAgICByZW1vdmVQYXR0ZXJuOiBib29sZWFuID0gdHJ1ZVxuKTogW251bWJlciwgc3RyaW5nXSB7XG4gICAgaWYgKCFzdHJEdXJhdGlvbiB8fCAhdW5pdHMgfHwgdW5pdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbbnVsbCwgc3RyRHVyYXRpb25dO1xuICAgIH1cblxuICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgY29uc3Qgc3RyUmVnZXggPSBcIl4oPzx2YWx1ZT5bMC05XSspKFwiICsgdW5pdHMuam9pbihcInxcIikgKyBcIikkXCI7XG4gICAgLy8gY29uc29sZS5sb2coc3RyUmVnZXgpO1xuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnbVwiKTtcbiAgICBsZXQgbWF0Y2ggPSByZWdleC5leGVjKHN0ckR1cmF0aW9uKTtcbiAgICBpZiAoXG4gICAgICAgIG1hdGNoICYmXG4gICAgICAgIHR5cGVvZiBtYXRjaC5ncm91cHMgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgdHlwZW9mIG1hdGNoLmdyb3Vwcy52YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhtYXRjaCk7XG4gICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdChtYXRjaC5ncm91cHMudmFsdWUpO1xuICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKHZhbHVlKSAmJiAhTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKHJlbW92ZVBhdHRlcm4pIHtcbiAgICAgICAgICAgICAgICBzdHJEdXJhdGlvbiA9IHN0ckR1cmF0aW9uLnJlcGxhY2UocmVnZXgsIFwiXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codmFsdWUpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc3RyRHVyYXRpb24pO1xuICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZSwgc3RyRHVyYXRpb25dO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFtudWxsLCBzdHJEdXJhdGlvbl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUR1cmF0aW9uU3RyaW5nKHN0ckR1cmF0aW9uOiBzdHJpbmcpIHtcbiAgICAvL2R1cmF0aW9uIHN0cmluZyBmb3JtYXQ6XG4gICAgLy95ZWFyICh5ZWFycywgeSwgWSksXG4gICAgLy9tb250aCAobW9udGhzLCBNKSwgLy8gbSB3aWxsIGNvbmZsaWN0IHdpdGggbWludXRlISEhXG4gICAgLy93ZWVrICh3ZWVrcywgdywgVyksXG4gICAgLy9kYXkgKGRheXMsIGQsIEQpLFxuICAgIC8vaG91ciAoaG91cnMsIGgsIEgpLFxuICAgIC8vbWludXRlIChtaW51dGVzLCBtKSwgLy8gTSB3aWxsIGNvbmZsaWN0IHdpdGggbW9udGghISFcbiAgICAvL3NlY29uZCAoc2Vjb25kcywgcywgUylcbiAgICBpZiAoIXN0ckR1cmF0aW9uKSByZXR1cm4gbnVsbDtcblxuICAgIGxldCBkdXJhdGlvbjogRHVyYXRpb24gPSB3aW5kb3cubW9tZW50LmR1cmF0aW9uKDApO1xuICAgIGxldCBoYXNWYWx1ZSA9IGZhbHNlO1xuXG4gICAgbGV0IG5lZ2F0aXZlVmFsdWUgPSBmYWxzZTtcbiAgICBpZiAoc3RyRHVyYXRpb24uc3RhcnRzV2l0aChcIitcIikpIHtcbiAgICAgICAgbmVnYXRpdmVWYWx1ZSA9IGZhbHNlO1xuICAgICAgICBzdHJEdXJhdGlvbiA9IHN0ckR1cmF0aW9uLnN1YnN0cmluZygxKTtcbiAgICB9XG4gICAgaWYgKHN0ckR1cmF0aW9uLnN0YXJ0c1dpdGgoXCItXCIpKSB7XG4gICAgICAgIG5lZ2F0aXZlVmFsdWUgPSB0cnVlO1xuICAgICAgICBzdHJEdXJhdGlvbiA9IHN0ckR1cmF0aW9uLnN1YnN0cmluZygxKTtcbiAgICB9XG5cbiAgICBsZXQgeWVhclZhbHVlID0gbnVsbDtcbiAgICBbeWVhclZhbHVlLCBzdHJEdXJhdGlvbl0gPSBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoc3RyRHVyYXRpb24sIFtcbiAgICAgICAgXCJ5ZWFyXCIsXG4gICAgICAgIFwieWVhcnNcIixcbiAgICAgICAgXCJZXCIsXG4gICAgICAgIFwieVwiLFxuICAgIF0pO1xuICAgIGlmICh5ZWFyVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5lZ2F0aXZlVmFsdWUpIHtcbiAgICAgICAgICAgIHllYXJWYWx1ZSAqPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBkdXJhdGlvbi5hZGQoeWVhclZhbHVlLCBcInllYXJzXCIpO1xuICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IG1vbnRoVmFsdWUgPSBudWxsO1xuICAgIFttb250aFZhbHVlLCBzdHJEdXJhdGlvbl0gPSBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoc3RyRHVyYXRpb24sIFtcbiAgICAgICAgXCJtb250aFwiLFxuICAgICAgICBcIm1vbnRoc1wiLFxuICAgICAgICBcIk1cIixcbiAgICBdKTtcbiAgICBpZiAobW9udGhWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAobmVnYXRpdmVWYWx1ZSkge1xuICAgICAgICAgICAgbW9udGhWYWx1ZSAqPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBkdXJhdGlvbi5hZGQobW9udGhWYWx1ZSwgXCJtb250aHNcIik7XG4gICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgd2Vla1ZhbHVlID0gbnVsbDtcbiAgICBbd2Vla1ZhbHVlLCBzdHJEdXJhdGlvbl0gPSBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoc3RyRHVyYXRpb24sIFtcbiAgICAgICAgXCJ3ZWVrXCIsXG4gICAgICAgIFwid2Vla3NcIixcbiAgICAgICAgXCJXXCIsXG4gICAgICAgIFwid1wiLFxuICAgIF0pO1xuICAgIGlmICh3ZWVrVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5lZ2F0aXZlVmFsdWUpIHtcbiAgICAgICAgICAgIHdlZWtWYWx1ZSAqPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBkdXJhdGlvbi5hZGQod2Vla1ZhbHVlLCBcIndlZWtzXCIpO1xuICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IGRheVZhbHVlID0gbnVsbDtcbiAgICBbZGF5VmFsdWUsIHN0ckR1cmF0aW9uXSA9IGV4dHJhY3RWYWx1ZUZyb21EdXJhdGlvblN0cmluZyhzdHJEdXJhdGlvbiwgW1xuICAgICAgICBcImRheVwiLFxuICAgICAgICBcImRheXNcIixcbiAgICAgICAgXCJEXCIsXG4gICAgICAgIFwiZFwiLFxuICAgIF0pO1xuICAgIGlmIChkYXlWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAobmVnYXRpdmVWYWx1ZSkge1xuICAgICAgICAgICAgZGF5VmFsdWUgKj0gLTE7XG4gICAgICAgIH1cbiAgICAgICAgZHVyYXRpb24uYWRkKGRheVZhbHVlLCBcImRheXNcIik7XG4gICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgaG91clZhbHVlID0gbnVsbDtcbiAgICBbaG91clZhbHVlLCBzdHJEdXJhdGlvbl0gPSBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoc3RyRHVyYXRpb24sIFtcbiAgICAgICAgXCJob3VyXCIsXG4gICAgICAgIFwiaG91cnNcIixcbiAgICAgICAgXCJIXCIsXG4gICAgICAgIFwiaFwiLFxuICAgIF0pO1xuICAgIGlmIChob3VyVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5lZ2F0aXZlVmFsdWUpIHtcbiAgICAgICAgICAgIGhvdXJWYWx1ZSAqPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBkdXJhdGlvbi5hZGQoaG91clZhbHVlLCBcImhvdXJzXCIpO1xuICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IG1pbnV0ZVZhbHVlID0gbnVsbDtcbiAgICBbbWludXRlVmFsdWUsIHN0ckR1cmF0aW9uXSA9IGV4dHJhY3RWYWx1ZUZyb21EdXJhdGlvblN0cmluZyhzdHJEdXJhdGlvbiwgW1xuICAgICAgICBcIm1pbnV0ZVwiLFxuICAgICAgICBcIm1pbnV0ZXNcIixcbiAgICAgICAgXCJtXCIsXG4gICAgXSk7XG4gICAgaWYgKG1pbnV0ZVZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChuZWdhdGl2ZVZhbHVlKSB7XG4gICAgICAgICAgICBtaW51dGVWYWx1ZSAqPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBkdXJhdGlvbi5hZGQobWludXRlVmFsdWUsIFwibWludXRlc1wiKTtcbiAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xuICAgIH1cblxuICAgIGxldCBzZWNvbmRWYWx1ZSA9IG51bGw7XG4gICAgW3NlY29uZFZhbHVlLCBzdHJEdXJhdGlvbl0gPSBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoc3RyRHVyYXRpb24sIFtcbiAgICAgICAgXCJzZWNvbmRcIixcbiAgICAgICAgXCJzZWNvbmRzXCIsXG4gICAgICAgIFwiU1wiLFxuICAgICAgICBcInNcIixcbiAgICBdKTtcbiAgICBpZiAoc2Vjb25kVmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKG5lZ2F0aXZlVmFsdWUpIHtcbiAgICAgICAgICAgIHNlY29uZFZhbHVlICo9IC0xO1xuICAgICAgICB9XG4gICAgICAgIGR1cmF0aW9uLmFkZChzZWNvbmRWYWx1ZSwgXCJzZWNvbmRzXCIpO1xuICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFoYXNWYWx1ZSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGR1cmF0aW9uO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZUJ5RHVyYXRpb25Ub1RvZGF5KFxuICAgIHJlbERhdGVTdHJpbmc6IHN0cmluZyxcbiAgICBkYXRlRm9ybWF0OiBzdHJpbmdcbik6IE1vbWVudCB7XG4gICAgbGV0IGRhdGUgPSBudWxsO1xuICAgIGxldCBkdXJhdGlvbiA9IHBhcnNlRHVyYXRpb25TdHJpbmcocmVsRGF0ZVN0cmluZyk7XG4gICAgaWYgKGR1cmF0aW9uICYmIHdpbmRvdy5tb21lbnQuaXNEdXJhdGlvbihkdXJhdGlvbikpIHtcbiAgICAgICAgZGF0ZSA9IGdldERhdGVUb2RheShkYXRlRm9ybWF0KTtcbiAgICAgICAgZGF0ZSA9IGRhdGUuYWRkKGR1cmF0aW9uKTtcblxuICAgICAgICBpZiAoZGF0ZSAmJiBkYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRhdGVUb1N0cihkYXRlOiBNb21lbnQsIGRhdGVGb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKHR5cGVvZiBkYXRlID09PSBcInVuZGVmaW5lZFwiIHx8IGRhdGUgPT09IG51bGwpIHJldHVybiBudWxsO1xuXG4gICAgaWYgKGRhdGVGb3JtYXQudG9Mb3dlckNhc2UoKSA9PT0gXCJpc28tODYwMVwiKSB7XG4gICAgICAgIHJldHVybiBkYXRlLmZvcm1hdCgpO1xuICAgIH1cbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoZGF0ZUZvcm1hdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlRnJvbVVuaXhUaW1lKFxuICAgIHVuaXhUaW1lOiBudW1iZXIsXG4gICAgZGF0ZUZvcm1hdDogc3RyaW5nXG4pOiBNb21lbnQge1xuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudCh1bml4VGltZSk7XG4gICAgbGV0IHN0ckRhdGUgPSBkYXRlVG9TdHIoZGF0ZSwgZGF0ZUZvcm1hdCk7XG4gICAgcmV0dXJuIHN0clRvRGF0ZShzdHJEYXRlLCBkYXRlRm9ybWF0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVUb2RheShkYXRlRm9ybWF0OiBzdHJpbmcpIHtcbiAgICBsZXQgdG9kYXkgPSB3aW5kb3cubW9tZW50KCk7XG4gICAgbGV0IHN0clRvZGF5ID0gZGF0ZVRvU3RyKHRvZGF5LCBkYXRlRm9ybWF0KTtcbiAgICByZXR1cm4gc3RyVG9EYXRlKHN0clRvZGF5LCBkYXRlRm9ybWF0KTtcbn1cblxuLy8gaHR0cDovL2pzZmlkZGxlLm5ldC9hbG5pdGFrL2hFc3lzL1xuZXhwb3J0IGZ1bmN0aW9uIGRlZXBWYWx1ZShvYmo6IGFueSwgc3RyOiBzdHJpbmcpIHtcbiAgICBzdHIgPSBzdHIucmVwbGFjZSgvXlxcLi8sIFwiXCIpO1xuICAgIHZhciBhID0gc3RyLnNwbGl0KFwiLlwiKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IGEubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIHZhciBrID0gYVtpXTtcbiAgICAgICAgaWYgKGsgaW4gb2JqKSB7XG4gICAgICAgICAgICBvYmogPSBvYmpba107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KG9iaikpIHtcbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBvYmogPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgcmV0dXJuIG9iai50b1N0cmluZygpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cblxuLy8gU3RyaW5nIGhlbHBlcnNcbmV4cG9ydCBmdW5jdGlvbiB0cmltQnlDaGFyKHN0cjogc3RyaW5nLCBjaGFyOiBzdHJpbmcpIHtcbiAgICBjb25zdCBhcnIgPSBBcnJheS5mcm9tKHN0cik7XG4gICAgY29uc3QgZmlyc3QgPSBhcnIuZmluZEluZGV4KChjKSA9PiBjICE9PSBjaGFyKTtcbiAgICBjb25zdCBsYXN0ID0gYXJyLnJldmVyc2UoKS5maW5kSW5kZXgoKGMpID0+IGMgIT09IGNoYXIpO1xuICAgIHJldHVybiBmaXJzdCA9PT0gLTEgJiYgbGFzdCA9PT0gLTFcbiAgICAgICAgPyBzdHJcbiAgICAgICAgOiBzdHIuc3Vic3RyaW5nKGZpcnN0LCBzdHIubGVuZ3RoIC0gbGFzdCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlSW1nVGFnQnlBbHQoaW5wdXQ6IHN0cmluZykge1xuICAgIGlmIChpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XG5cbiAgICAvLyA8aW1nW14+XSo/YWx0XFxzKj1cXHMqW1wiXCInXT8oPzxlbW9qaT5bXidcIlwiID5dKz8pWyAnXCJcIl1bXj5dKj8+XG4gICAgbGV0IHN0clJlZ2V4ID1cbiAgICAgICAgJzxpbWdbXj5dKj9hbHRcXFxccyo9XFxcXHMqW1wiXCJcXCddPyg/PGVtb2ppPlteXFwnXCJcIiA+XSs/KVsgXFwnXCJcIl1bXj5dKj8+JztcbiAgICAvLyBjb25zb2xlLmxvZyhzdHJSZWdleCk7XG4gICAgbGV0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnXCIpO1xuXG4gICAgbGV0IG91dHB1dCA9IGlucHV0LnJlcGxhY2UocmVnZXgsICguLi5hcmdzKSA9PiB7XG4gICAgICAgIGxldCBncm91cHMgPSBhcmdzW2FyZ3MubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChncm91cHMgJiYgZ3JvdXBzLmVtb2ppKSB7XG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBzLmVtb2ppLnRyaW0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9KTtcblxuICAgIHJldHVybiBvdXRwdXQ7XG59XG4vLyBQYXJzaW5nXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGbG9hdEZyb21BbnkoXG4gICAgdG9QYXJzZTogYW55LFxuICAgIHRleHRWYWx1ZU1hcDogVGV4dFZhbHVlTWFwID0gbnVsbFxuKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJwYXJzZUZsb2F0RnJvbUFueVwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyh0b1BhcnNlKTtcblxuICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgbGV0IHZhbHVlVHlwZSA9IFZhbHVlVHlwZS5OdW1iZXI7XG4gICAgaWYgKHR5cGVvZiB0b1BhcnNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIC8vIHRpbWUgdmFsdWVcbiAgICAgICAgaWYgKHRvUGFyc2UuaW5jbHVkZXMoXCI6XCIpKSB7XG4gICAgICAgICAgICBsZXQgbmVnYXRpdmVWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgaWYgKHRvUGFyc2Uuc3RhcnRzV2l0aChcIi1cIikpIHtcbiAgICAgICAgICAgICAgICBuZWdhdGl2ZVZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0b1BhcnNlID0gdG9QYXJzZS5zdWJzdHJpbmcoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgdGltZVZhbHVlID0gd2luZG93Lm1vbWVudCh0b1BhcnNlLCB0aW1lRm9ybWF0LCB0cnVlKTtcbiAgICAgICAgICAgIGlmICh0aW1lVmFsdWUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0aW1lVmFsdWUuZGlmZihcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lm1vbWVudChcIjAwOjAwXCIsIFwiSEg6bW1cIiwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgIFwic2Vjb25kc1wiXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICBpZiAobmVnYXRpdmVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IC0xICogdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHZhbHVlVHlwZSA9IFZhbHVlVHlwZS5UaW1lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHRleHRWYWx1ZU1hcCkge1xuICAgICAgICAgICAgICAgIGxldCBhbnlNYXRjaCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0ZXh0VmFsdWVNYXApIGFzIEFycmF5PGtleW9mIHN0cmluZz47XG4gICAgICAgICAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZWdleCA9IG5ldyBSZWdFeHAoa2V5LCBcImdtXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2codG9QYXJzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXgudGVzdCh0b1BhcnNlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlci5pc051bWJlcih0ZXh0VmFsdWVNYXBba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHJSZXBsYWNlZFZhbHVlID0gdGV4dFZhbHVlTWFwW2tleV0udG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b1BhcnNlID0gdG9QYXJzZS5yZXBsYWNlKHJlZ2V4LCBzdHJSZXBsYWNlZFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0b1BhcnNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlNYXRjaCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodG9QYXJzZSk7XG4gICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc05hTih2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHRvUGFyc2UpO1xuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0b1BhcnNlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHZhbHVlID0gdG9QYXJzZTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB0eXBlOiB2YWx1ZVR5cGUsIHZhbHVlOiB2YWx1ZSB9O1xufVxuXG4vLyBDaGFydCBoZWxwZXJzXG5leHBvcnQgZnVuY3Rpb24gbWVhc3VyZVRleHRTaXplKFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBzdHlsZUNsYXNzOiBzdHJpbmcgPSBcIlwiLFxuICAgIHJvdGF0ZTogc3RyaW5nID0gXCJcIlxuKTogU2l6ZSB7XG4gICAgdmFyIGNvbnRhaW5lciA9IGQzLnNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwic3ZnXCIpO1xuICAgIGxldCB0ZXh0QmxvY2sgPSBjb250YWluZXJcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLnRleHQodGV4dClcbiAgICAgICAgLmF0dHIoXCJ4XCIsIC05OTk5OSlcbiAgICAgICAgLmF0dHIoXCJ5XCIsIC05OTk5OSk7XG4gICAgaWYgKHN0eWxlQ2xhc3MpIHtcbiAgICAgICAgdGV4dEJsb2NrLmF0dHIoXCJjbGFzc1wiLCBzdHlsZUNsYXNzKTtcbiAgICB9XG4gICAgaWYgKHJvdGF0ZSkge1xuICAgICAgICB0ZXh0QmxvY2suYXR0cihcInRyYW5zZm9ybVwiLCBcInJvdGF0ZShcIiArIHJvdGF0ZSArIFwiKVwiKTtcbiAgICB9XG4gICAgdmFyIHNpemUgPSBjb250YWluZXIubm9kZSgpLmdldEJCb3goKTtcbiAgICBjb250YWluZXIucmVtb3ZlKCk7XG4gICAgcmV0dXJuIHsgd2lkdGg6IHNpemUud2lkdGgsIGhlaWdodDogc2l6ZS5oZWlnaHQgfTtcbn1cblxuLy8gZG9tXG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kQXJlYShhcmVhOiBhbnksIGFkZFc6IG51bWJlciwgYWRkSDogbnVtYmVyKSB7XG4gICAgbGV0IG9yaVdpZHRoID0gcGFyc2VGbG9hdChhcmVhLmF0dHIoXCJ3aWR0aFwiKSkgfCAwO1xuICAgIGxldCBvcmlIZWlnaHQgPSBwYXJzZUZsb2F0KGFyZWEuYXR0cihcImhlaWdodFwiKSkgfCAwO1xuICAgIGxldCBuZXdXaWR0aCA9IG9yaVdpZHRoICsgYWRkVztcbiAgICBsZXQgbmV3SGVpZ2h0ID0gb3JpSGVpZ2h0ICsgYWRkSDtcbiAgICBhcmVhLmF0dHIoXCJ3aWR0aFwiLCBuZXdXaWR0aCk7XG4gICAgYXJlYS5hdHRyKFwiaGVpZ2h0XCIsIG5ld0hlaWdodCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3ZlQXJlYShhcmVhOiBhbnksIHNoaWZ0WDogbnVtYmVyLCBzaGlmdFk6IG51bWJlcikge1xuICAgIGxldCB0cmFucyA9IG5ldyBUcmFuc2Zvcm0oYXJlYS5hdHRyKFwidHJhbnNmb3JtXCIpKTtcbiAgICBhcmVhLmF0dHIoXG4gICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgIFwidHJhbnNsYXRlKFwiICtcbiAgICAgICAgICAgICh0cmFucy50cmFuc2xhdGVYICsgc2hpZnRYKSArXG4gICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICAodHJhbnMudHJhbnNsYXRlWSArIHNoaWZ0WSkgK1xuICAgICAgICAgICAgXCIpXCJcbiAgICApO1xufVxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gY2xlYW5UZXh0KHRleHQ6IHN0cmluZykge1xuICAgIC8vIFRoYW5rcyB0byB0b3JhbnRpbmVcbiAgICAvLyBjb2RlIHNuaXBwZXQgZnJvbSBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90b3JhbnRpbmUvYWY2MzljYmEzYzMyNzYyNTc2ZDY0YzM0ZWZmYWY2MTRcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC8oXlxcXFxzXFwqKXwoXFxcXHNcXCokKS9naSwgXCJcIik7IC8vIHJlbW92ZSB0aGUgc3RhcnQgYW5kIGVuZCBzcGFjZXMgb2YgdGhlIGdpdmVuIHN0cmluZ1xuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoL1xcWyBcXF17Mix9L2dpLCBcIiBcIik7IC8vIHJlZHVjZSBtdWx0aXBsZSBzcGFjZXMgdG8gYSBzaW5nbGUgc3BhY2VcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXFxcbiAvLCBcIlxcXFxuXCIpOyAvLyBleGNsdWRlIGEgbmV3IGxpbmUgd2l0aCBhIHN0YXJ0IHNwYWNpbmdcbiAgICByZXR1cm4gdGV4dDtcbn1cblxuLy8gVGhhbmtzIHRvIGx1a2VsZXBwYW4gZm9yIHBsdWdpbiAnYmV0dGVyLXdvcmQtY291bnQnXG4vLyBDb2RlIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2x1a2VsZXBwYW4vYmV0dGVyLXdvcmQtY291bnQvYmxvYi9tYXN0ZXIvc3JjL3N0YXRzLnRzXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29yZENvdW50KHRleHQ6IHN0cmluZykge1xuICAgIHRleHQgPSBjbGVhblRleHQodGV4dCk7XG5cbiAgICAvLyBUaGFua3MgdG8gbGlhbWNhbmVcbiAgICB2YXIgc3BhY2VEZWxpbWl0ZWRDaGFycyA9XG4gICAgICAgIC9BLVphLXpcXHUwMEFBXFx1MDBCNVxcdTAwQkFcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAyQzFcXHUwMkM2LVxcdTAyRDFcXHUwMkUwLVxcdTAyRTRcXHUwMkVDXFx1MDJFRVxcdTAzNzAtXFx1MDM3NFxcdTAzNzZcXHUwMzc3XFx1MDM3QS1cXHUwMzdEXFx1MDM3RlxcdTAzODZcXHUwMzg4LVxcdTAzOEFcXHUwMzhDXFx1MDM4RS1cXHUwM0ExXFx1MDNBMy1cXHUwM0Y1XFx1MDNGNy1cXHUwNDgxXFx1MDQ4QS1cXHUwNTJGXFx1MDUzMS1cXHUwNTU2XFx1MDU1OVxcdTA1NjEtXFx1MDU4N1xcdTA1RDAtXFx1MDVFQVxcdTA1RjAtXFx1MDVGMlxcdTA2MjAtXFx1MDY0QVxcdTA2NkVcXHUwNjZGXFx1MDY3MS1cXHUwNkQzXFx1MDZENVxcdTA2RTVcXHUwNkU2XFx1MDZFRVxcdTA2RUZcXHUwNkZBLVxcdTA2RkNcXHUwNkZGXFx1MDcxMFxcdTA3MTItXFx1MDcyRlxcdTA3NEQtXFx1MDdBNVxcdTA3QjFcXHUwN0NBLVxcdTA3RUFcXHUwN0Y0XFx1MDdGNVxcdTA3RkFcXHUwODAwLVxcdTA4MTVcXHUwODFBXFx1MDgyNFxcdTA4MjhcXHUwODQwLVxcdTA4NThcXHUwOEEwLVxcdTA4QjRcXHUwOTA0LVxcdTA5MzlcXHUwOTNEXFx1MDk1MFxcdTA5NTgtXFx1MDk2MVxcdTA5NzEtXFx1MDk4MFxcdTA5ODUtXFx1MDk4Q1xcdTA5OEZcXHUwOTkwXFx1MDk5My1cXHUwOUE4XFx1MDlBQS1cXHUwOUIwXFx1MDlCMlxcdTA5QjYtXFx1MDlCOVxcdTA5QkRcXHUwOUNFXFx1MDlEQ1xcdTA5RERcXHUwOURGLVxcdTA5RTFcXHUwOUYwXFx1MDlGMVxcdTBBMDUtXFx1MEEwQVxcdTBBMEZcXHUwQTEwXFx1MEExMy1cXHUwQTI4XFx1MEEyQS1cXHUwQTMwXFx1MEEzMlxcdTBBMzNcXHUwQTM1XFx1MEEzNlxcdTBBMzhcXHUwQTM5XFx1MEE1OS1cXHUwQTVDXFx1MEE1RVxcdTBBNzItXFx1MEE3NFxcdTBBODUtXFx1MEE4RFxcdTBBOEYtXFx1MEE5MVxcdTBBOTMtXFx1MEFBOFxcdTBBQUEtXFx1MEFCMFxcdTBBQjJcXHUwQUIzXFx1MEFCNS1cXHUwQUI5XFx1MEFCRFxcdTBBRDBcXHUwQUUwXFx1MEFFMVxcdTBBRjlcXHUwQjA1LVxcdTBCMENcXHUwQjBGXFx1MEIxMFxcdTBCMTMtXFx1MEIyOFxcdTBCMkEtXFx1MEIzMFxcdTBCMzJcXHUwQjMzXFx1MEIzNS1cXHUwQjM5XFx1MEIzRFxcdTBCNUNcXHUwQjVEXFx1MEI1Ri1cXHUwQjYxXFx1MEI3MVxcdTBCODNcXHUwQjg1LVxcdTBCOEFcXHUwQjhFLVxcdTBCOTBcXHUwQjkyLVxcdTBCOTVcXHUwQjk5XFx1MEI5QVxcdTBCOUNcXHUwQjlFXFx1MEI5RlxcdTBCQTNcXHUwQkE0XFx1MEJBOC1cXHUwQkFBXFx1MEJBRS1cXHUwQkI5XFx1MEJEMFxcdTBDMDUtXFx1MEMwQ1xcdTBDMEUtXFx1MEMxMFxcdTBDMTItXFx1MEMyOFxcdTBDMkEtXFx1MEMzOVxcdTBDM0RcXHUwQzU4LVxcdTBDNUFcXHUwQzYwXFx1MEM2MVxcdTBDODUtXFx1MEM4Q1xcdTBDOEUtXFx1MEM5MFxcdTBDOTItXFx1MENBOFxcdTBDQUEtXFx1MENCM1xcdTBDQjUtXFx1MENCOVxcdTBDQkRcXHUwQ0RFXFx1MENFMFxcdTBDRTFcXHUwQ0YxXFx1MENGMlxcdTBEMDUtXFx1MEQwQ1xcdTBEMEUtXFx1MEQxMFxcdTBEMTItXFx1MEQzQVxcdTBEM0RcXHUwRDRFXFx1MEQ1Ri1cXHUwRDYxXFx1MEQ3QS1cXHUwRDdGXFx1MEQ4NS1cXHUwRDk2XFx1MEQ5QS1cXHUwREIxXFx1MERCMy1cXHUwREJCXFx1MERCRFxcdTBEQzAtXFx1MERDNlxcdTBFMDEtXFx1MEUzMFxcdTBFMzJcXHUwRTMzXFx1MEU0MC1cXHUwRTQ2XFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRThBXFx1MEU4RFxcdTBFOTQtXFx1MEU5N1xcdTBFOTktXFx1MEU5RlxcdTBFQTEtXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQVxcdTBFQUJcXHUwRUFELVxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQkRcXHUwRUMwLVxcdTBFQzRcXHUwRUM2XFx1MEVEQy1cXHUwRURGXFx1MEYwMFxcdTBGNDAtXFx1MEY0N1xcdTBGNDktXFx1MEY2Q1xcdTBGODgtXFx1MEY4Q1xcdTEwMDAtXFx1MTAyQVxcdTEwM0ZcXHUxMDUwLVxcdTEwNTVcXHUxMDVBLVxcdTEwNURcXHUxMDYxXFx1MTA2NVxcdTEwNjZcXHUxMDZFLVxcdTEwNzBcXHUxMDc1LVxcdTEwODFcXHUxMDhFXFx1MTBBMC1cXHUxMEM1XFx1MTBDN1xcdTEwQ0RcXHUxMEQwLVxcdTEwRkFcXHUxMEZDLVxcdTEyNDhcXHUxMjRBLVxcdTEyNERcXHUxMjUwLVxcdTEyNTZcXHUxMjU4XFx1MTI1QS1cXHUxMjVEXFx1MTI2MC1cXHUxMjg4XFx1MTI4QS1cXHUxMjhEXFx1MTI5MC1cXHUxMkIwXFx1MTJCMi1cXHUxMkI1XFx1MTJCOC1cXHUxMkJFXFx1MTJDMFxcdTEyQzItXFx1MTJDNVxcdTEyQzgtXFx1MTJENlxcdTEyRDgtXFx1MTMxMFxcdTEzMTItXFx1MTMxNVxcdTEzMTgtXFx1MTM1QVxcdTEzODAtXFx1MTM4RlxcdTEzQTAtXFx1MTNGNVxcdTEzRjgtXFx1MTNGRFxcdTE0MDEtXFx1MTY2Q1xcdTE2NkYtXFx1MTY3RlxcdTE2ODEtXFx1MTY5QVxcdTE2QTAtXFx1MTZFQVxcdTE2RjEtXFx1MTZGOFxcdTE3MDAtXFx1MTcwQ1xcdTE3MEUtXFx1MTcxMVxcdTE3MjAtXFx1MTczMVxcdTE3NDAtXFx1MTc1MVxcdTE3NjAtXFx1MTc2Q1xcdTE3NkUtXFx1MTc3MFxcdTE3ODAtXFx1MTdCM1xcdTE3RDdcXHUxN0RDXFx1MTgyMC1cXHUxODc3XFx1MTg4MC1cXHUxOEE4XFx1MThBQVxcdTE4QjAtXFx1MThGNVxcdTE5MDAtXFx1MTkxRVxcdTE5NTAtXFx1MTk2RFxcdTE5NzAtXFx1MTk3NFxcdTE5ODAtXFx1MTlBQlxcdTE5QjAtXFx1MTlDOVxcdTFBMDAtXFx1MUExNlxcdTFBMjAtXFx1MUE1NFxcdTFBQTdcXHUxQjA1LVxcdTFCMzNcXHUxQjQ1LVxcdTFCNEJcXHUxQjgzLVxcdTFCQTBcXHUxQkFFXFx1MUJBRlxcdTFCQkEtXFx1MUJFNVxcdTFDMDAtXFx1MUMyM1xcdTFDNEQtXFx1MUM0RlxcdTFDNUEtXFx1MUM3RFxcdTFDRTktXFx1MUNFQ1xcdTFDRUUtXFx1MUNGMVxcdTFDRjVcXHUxQ0Y2XFx1MUQwMC1cXHUxREJGXFx1MUUwMC1cXHUxRjE1XFx1MUYxOC1cXHUxRjFEXFx1MUYyMC1cXHUxRjQ1XFx1MUY0OC1cXHUxRjREXFx1MUY1MC1cXHUxRjU3XFx1MUY1OVxcdTFGNUJcXHUxRjVEXFx1MUY1Ri1cXHUxRjdEXFx1MUY4MC1cXHUxRkI0XFx1MUZCNi1cXHUxRkJDXFx1MUZCRVxcdTFGQzItXFx1MUZDNFxcdTFGQzYtXFx1MUZDQ1xcdTFGRDAtXFx1MUZEM1xcdTFGRDYtXFx1MUZEQlxcdTFGRTAtXFx1MUZFQ1xcdTFGRjItXFx1MUZGNFxcdTFGRjYtXFx1MUZGQ1xcdTIwNzFcXHUyMDdGXFx1MjA5MC1cXHUyMDlDXFx1MjEwMlxcdTIxMDdcXHUyMTBBLVxcdTIxMTNcXHUyMTE1XFx1MjExOS1cXHUyMTFEXFx1MjEyNFxcdTIxMjZcXHUyMTI4XFx1MjEyQS1cXHUyMTJEXFx1MjEyRi1cXHUyMTM5XFx1MjEzQy1cXHUyMTNGXFx1MjE0NS1cXHUyMTQ5XFx1MjE0RVxcdTIxODNcXHUyMTg0XFx1MkMwMC1cXHUyQzJFXFx1MkMzMC1cXHUyQzVFXFx1MkM2MC1cXHUyQ0U0XFx1MkNFQi1cXHUyQ0VFXFx1MkNGMlxcdTJDRjNcXHUyRDAwLVxcdTJEMjVcXHUyRDI3XFx1MkQyRFxcdTJEMzAtXFx1MkQ2N1xcdTJENkZcXHUyRDgwLVxcdTJEOTZcXHUyREEwLVxcdTJEQTZcXHUyREE4LVxcdTJEQUVcXHUyREIwLVxcdTJEQjZcXHUyREI4LVxcdTJEQkVcXHUyREMwLVxcdTJEQzZcXHUyREM4LVxcdTJEQ0VcXHUyREQwLVxcdTJERDZcXHUyREQ4LVxcdTJEREVcXHUyRTJGXFx1MzAwNVxcdTMwMDZcXHUzMDMxLVxcdTMwMzVcXHUzMDNCXFx1MzAzQ1xcdTMxMDUtXFx1MzEyRFxcdTMxMzEtXFx1MzE4RVxcdTMxQTAtXFx1MzFCQVxcdTMxRjAtXFx1MzFGRlxcdTM0MDAtXFx1NERCNVxcdUEwMDAtXFx1QTQ4Q1xcdUE0RDAtXFx1QTRGRFxcdUE1MDAtXFx1QTYwQ1xcdUE2MTAtXFx1QTYxRlxcdUE2MkFcXHVBNjJCXFx1QTY0MC1cXHVBNjZFXFx1QTY3Ri1cXHVBNjlEXFx1QTZBMC1cXHVBNkU1XFx1QTcxNy1cXHVBNzFGXFx1QTcyMi1cXHVBNzg4XFx1QTc4Qi1cXHVBN0FEXFx1QTdCMC1cXHVBN0I3XFx1QTdGNy1cXHVBODAxXFx1QTgwMy1cXHVBODA1XFx1QTgwNy1cXHVBODBBXFx1QTgwQy1cXHVBODIyXFx1QTg0MC1cXHVBODczXFx1QTg4Mi1cXHVBOEIzXFx1QThGMi1cXHVBOEY3XFx1QThGQlxcdUE4RkRcXHVBOTBBLVxcdUE5MjVcXHVBOTMwLVxcdUE5NDZcXHVBOTYwLVxcdUE5N0NcXHVBOTg0LVxcdUE5QjJcXHVBOUNGXFx1QTlFMC1cXHVBOUU0XFx1QTlFNi1cXHVBOUVGXFx1QTlGQS1cXHVBOUZFXFx1QUEwMC1cXHVBQTI4XFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTc2XFx1QUE3QVxcdUFBN0UtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVBXFx1QUFGMi1cXHVBQUY0XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUIzMC1cXHVBQjVBXFx1QUI1Qy1cXHVBQjY1XFx1QUI3MC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDL1xuICAgICAgICAgICAgLnNvdXJjZTtcbiAgICB2YXIgbm9uU3BhY2VEZWxpbWl0ZWRXb3JkcyA9XG4gICAgICAgIC9bXFx1MzA0MS1cXHUzMDk2XFx1MzA5RC1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1NEUwMC1cXHU5RkQ1XXsxfS9cbiAgICAgICAgICAgIC5zb3VyY2U7XG4gICAgdmFyIHBhdHRlcm4gPSBuZXcgUmVnRXhwKFxuICAgICAgICBbXG4gICAgICAgICAgICBcIig/OlswLTldKyg/Oig/Oix8XFxcXC4pWzAtOV0rKSp8W1xcXFwtXCIgKyBzcGFjZURlbGltaXRlZENoYXJzICsgXCJdKStcIixcbiAgICAgICAgICAgIG5vblNwYWNlRGVsaW1pdGVkV29yZHMsXG4gICAgICAgIF0uam9pbihcInxcIiksXG4gICAgICAgIFwiZ1wiXG4gICAgKTtcbiAgICByZXR1cm4gKHRleHQubWF0Y2gocGF0dGVybikgfHwgW10pLmxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENoYXJhY3RlckNvdW50KHRleHQ6IHN0cmluZykge1xuICAgIHJldHVybiB0ZXh0Lmxlbmd0aDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbnRlbmNlQ291bnQodGV4dDogc3RyaW5nKSB7XG4gICAgdGV4dCA9IGNsZWFuVGV4dCh0ZXh0KTtcblxuICAgIC8vIFRoYW5rcyB0byBFeHRyYWN0IEhpZ2hsaWdodHMgcGx1Z2luIGFuZCBBbmdlbHVzRG9taW5pXG4gICAgLy8gQWxzbyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81NTUzNDEwXG4gICAgdmFyIHNlbnRlbmNlcyA9XG4gICAgICAgICh0ZXh0IHx8IFwiXCIpLm1hdGNoKFxuICAgICAgICAgICAgL1teLuOAgiHvvIE/77yfXFxzXVteLuOAgiHvvIE/77yfXSooPzpbLiE/XSg/IVsn4oCY4oCZXCLigJzigJ3jgIzjgI3jgI7jgI9dP1xcc3wkKVteLuOAgiHvvIE/77yfXSopKlsu44CCIe+8gT/vvJ9dP1sn4oCZXCLigJ3jgI3jgI9dPyg/PVxcc3x8JCkvZ21cbiAgICAgICAgKSB8fCBbXTtcbiAgICB2YXIgc2VudGVuY2VzTGVuZ3RoID0gc2VudGVuY2VzLmxlbmd0aDtcbiAgICByZXR1cm4gc2VudGVuY2VzTGVuZ3RoO1xufVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIsIi8qKlxuICogQGltcGxlbWVudHMge0lIb29rc31cbiAqL1xuY2xhc3MgSG9va3Mge1xuXHQvKipcblx0ICogQGNhbGxiYWNrIEhvb2tDYWxsYmFja1xuXHQgKiBAdGhpcyB7KnxKc2VwfSB0aGlzXG5cdCAqIEBwYXJhbSB7SnNlcH0gZW52XG5cdCAqIEByZXR1cm5zOiB2b2lkXG5cdCAqL1xuXHQvKipcblx0ICogQWRkcyB0aGUgZ2l2ZW4gY2FsbGJhY2sgdG8gdGhlIGxpc3Qgb2YgY2FsbGJhY2tzIGZvciB0aGUgZ2l2ZW4gaG9vay5cblx0ICpcblx0ICogVGhlIGNhbGxiYWNrIHdpbGwgYmUgaW52b2tlZCB3aGVuIHRoZSBob29rIGl0IGlzIHJlZ2lzdGVyZWQgZm9yIGlzIHJ1bi5cblx0ICpcblx0ICogT25lIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiBiZSByZWdpc3RlcmVkIHRvIG11bHRpcGxlIGhvb2tzIGFuZCB0aGUgc2FtZSBob29rIG11bHRpcGxlIHRpbWVzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGhvb2ssIG9yIGFuIG9iamVjdCBvZiBjYWxsYmFja3Mga2V5ZWQgYnkgbmFtZVxuXHQgKiBAcGFyYW0ge0hvb2tDYWxsYmFja3xib29sZWFufSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggaXMgZ2l2ZW4gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuXHQgKiBAcGFyYW0gez9ib29sZWFufSBbZmlyc3Q9ZmFsc2VdIFdpbGwgYWRkIHRoZSBob29rIHRvIHRoZSB0b3Agb2YgdGhlIGxpc3QgKGRlZmF1bHRzIHRvIHRoZSBib3R0b20pXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFkZChuYW1lLCBjYWxsYmFjaywgZmlyc3QpIHtcblx0XHRpZiAodHlwZW9mIGFyZ3VtZW50c1swXSAhPSAnc3RyaW5nJykge1xuXHRcdFx0Ly8gTXVsdGlwbGUgaG9vayBjYWxsYmFja3MsIGtleWVkIGJ5IG5hbWVcblx0XHRcdGZvciAobGV0IG5hbWUgaW4gYXJndW1lbnRzWzBdKSB7XG5cdFx0XHRcdHRoaXMuYWRkKG5hbWUsIGFyZ3VtZW50c1swXVtuYW1lXSwgYXJndW1lbnRzWzFdKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHQoQXJyYXkuaXNBcnJheShuYW1lKSA/IG5hbWUgOiBbbmFtZV0pLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcblx0XHRcdFx0dGhpc1tuYW1lXSA9IHRoaXNbbmFtZV0gfHwgW107XG5cblx0XHRcdFx0aWYgKGNhbGxiYWNrKSB7XG5cdFx0XHRcdFx0dGhpc1tuYW1lXVtmaXJzdCA/ICd1bnNoaWZ0JyA6ICdwdXNoJ10oY2FsbGJhY2spO1xuXHRcdFx0XHR9XG5cdFx0XHR9LCB0aGlzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUnVucyBhIGhvb2sgaW52b2tpbmcgYWxsIHJlZ2lzdGVyZWQgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGVudmlyb25tZW50IHZhcmlhYmxlcy5cblx0ICpcblx0ICogQ2FsbGJhY2tzIHdpbGwgYmUgaW52b2tlZCBzeW5jaHJvbm91c2x5IGFuZCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIHJlZ2lzdGVyZWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBob29rLlxuXHQgKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IGVudiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9mIHRoZSBob29rIHBhc3NlZCB0byBhbGwgY2FsbGJhY2tzIHJlZ2lzdGVyZWQuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHJ1bihuYW1lLCBlbnYpIHtcblx0XHR0aGlzW25hbWVdID0gdGhpc1tuYW1lXSB8fCBbXTtcblx0XHR0aGlzW25hbWVdLmZvckVhY2goZnVuY3Rpb24gKGNhbGxiYWNrKSB7XG5cdFx0XHRjYWxsYmFjay5jYWxsKGVudiAmJiBlbnYuY29udGV4dCA/IGVudi5jb250ZXh0IDogZW52LCBlbnYpO1xuXHRcdH0pO1xuXHR9XG59XG5cbi8qKlxuICogQGltcGxlbWVudHMge0lQbHVnaW5zfVxuICovXG5jbGFzcyBQbHVnaW5zIHtcblx0Y29uc3RydWN0b3IoanNlcCkge1xuXHRcdHRoaXMuanNlcCA9IGpzZXA7XG5cdFx0dGhpcy5yZWdpc3RlcmVkID0ge307XG5cdH1cblxuXHQvKipcblx0ICogQGNhbGxiYWNrIFBsdWdpblNldHVwXG5cdCAqIEB0aGlzIHtKc2VwfSBqc2VwXG5cdCAqIEByZXR1cm5zOiB2b2lkXG5cdCAqL1xuXHQvKipcblx0ICogQWRkcyB0aGUgZ2l2ZW4gcGx1Z2luKHMpIHRvIHRoZSByZWdpc3RyeVxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gcGx1Z2luc1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGx1Z2lucy5uYW1lIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW5cblx0ICogQHBhcmFtIHtQbHVnaW5TZXR1cH0gcGx1Z2lucy5pbml0IFRoZSBpbml0IGZ1bmN0aW9uXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHJlZ2lzdGVyKC4uLnBsdWdpbnMpIHtcblx0XHRwbHVnaW5zLmZvckVhY2goKHBsdWdpbikgPT4ge1xuXHRcdFx0aWYgKHR5cGVvZiBwbHVnaW4gIT09ICdvYmplY3QnIHx8ICFwbHVnaW4ubmFtZSB8fCAhcGx1Z2luLmluaXQpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEpTRVAgcGx1Z2luIGZvcm1hdCcpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKHRoaXMucmVnaXN0ZXJlZFtwbHVnaW4ubmFtZV0pIHtcblx0XHRcdFx0Ly8gYWxyZWFkeSByZWdpc3RlcmVkLiBJZ25vcmUuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHBsdWdpbi5pbml0KHRoaXMuanNlcCk7XG5cdFx0XHR0aGlzLnJlZ2lzdGVyZWRbcGx1Z2luLm5hbWVdID0gcGx1Z2luO1xuXHRcdH0pO1xuXHR9XG59XG5cbi8vICAgICBKYXZhU2NyaXB0IEV4cHJlc3Npb24gUGFyc2VyIChKU0VQKSAxLjMuOFxuXG5jbGFzcyBKc2VwIHtcblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgZ2V0IHZlcnNpb24oKSB7XG5cdFx0Ly8gVG8gYmUgZmlsbGVkIGluIGJ5IHRoZSB0ZW1wbGF0ZVxuXHRcdHJldHVybiAnMS4zLjgnO1xuXHR9XG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRzdGF0aWMgdG9TdHJpbmcoKSB7XG5cdFx0cmV0dXJuICdKYXZhU2NyaXB0IEV4cHJlc3Npb24gUGFyc2VyIChKU0VQKSB2JyArIEpzZXAudmVyc2lvbjtcblx0fTtcblxuXHQvLyA9PT09PT09PT09PT09PT09PT09PSBDT05GSUcgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblx0LyoqXG5cdCAqIEBtZXRob2QgYWRkVW5hcnlPcFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gb3BfbmFtZSBUaGUgbmFtZSBvZiB0aGUgdW5hcnkgb3AgdG8gYWRkXG5cdCAqIEByZXR1cm5zIHtKc2VwfVxuXHQgKi9cblx0c3RhdGljIGFkZFVuYXJ5T3Aob3BfbmFtZSkge1xuXHRcdEpzZXAubWF4X3Vub3BfbGVuID0gTWF0aC5tYXgob3BfbmFtZS5sZW5ndGgsIEpzZXAubWF4X3Vub3BfbGVuKTtcblx0XHRKc2VwLnVuYXJ5X29wc1tvcF9uYW1lXSA9IDE7XG5cdFx0cmV0dXJuIEpzZXA7XG5cdH1cblxuXHQvKipcblx0ICogQG1ldGhvZCBqc2VwLmFkZEJpbmFyeU9wXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBvcF9uYW1lIFRoZSBuYW1lIG9mIHRoZSBiaW5hcnkgb3AgdG8gYWRkXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBwcmVjZWRlbmNlIFRoZSBwcmVjZWRlbmNlIG9mIHRoZSBiaW5hcnkgb3AgKGNhbiBiZSBhIGZsb2F0KS4gSGlnaGVyIG51bWJlciA9IGhpZ2hlciBwcmVjZWRlbmNlXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW2lzUmlnaHRBc3NvY2lhdGl2ZT1mYWxzZV0gd2hldGhlciBvcGVyYXRvciBpcyByaWdodC1hc3NvY2lhdGl2ZVxuXHQgKiBAcmV0dXJucyB7SnNlcH1cblx0ICovXG5cdHN0YXRpYyBhZGRCaW5hcnlPcChvcF9uYW1lLCBwcmVjZWRlbmNlLCBpc1JpZ2h0QXNzb2NpYXRpdmUpIHtcblx0XHRKc2VwLm1heF9iaW5vcF9sZW4gPSBNYXRoLm1heChvcF9uYW1lLmxlbmd0aCwgSnNlcC5tYXhfYmlub3BfbGVuKTtcblx0XHRKc2VwLmJpbmFyeV9vcHNbb3BfbmFtZV0gPSBwcmVjZWRlbmNlO1xuXHRcdGlmIChpc1JpZ2h0QXNzb2NpYXRpdmUpIHtcblx0XHRcdEpzZXAucmlnaHRfYXNzb2NpYXRpdmUuYWRkKG9wX25hbWUpO1xuXHRcdH1cblx0XHRlbHNlIHtcblx0XHRcdEpzZXAucmlnaHRfYXNzb2NpYXRpdmUuZGVsZXRlKG9wX25hbWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gSnNlcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAbWV0aG9kIGFkZElkZW50aWZpZXJDaGFyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyIFRoZSBhZGRpdGlvbmFsIGNoYXJhY3RlciB0byB0cmVhdCBhcyBhIHZhbGlkIHBhcnQgb2YgYW4gaWRlbnRpZmllclxuXHQgKiBAcmV0dXJucyB7SnNlcH1cblx0ICovXG5cdHN0YXRpYyBhZGRJZGVudGlmaWVyQ2hhcihjaGFyKSB7XG5cdFx0SnNlcC5hZGRpdGlvbmFsX2lkZW50aWZpZXJfY2hhcnMuYWRkKGNoYXIpO1xuXHRcdHJldHVybiBKc2VwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBtZXRob2QgYWRkTGl0ZXJhbFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGl0ZXJhbF9uYW1lIFRoZSBuYW1lIG9mIHRoZSBsaXRlcmFsIHRvIGFkZFxuXHQgKiBAcGFyYW0geyp9IGxpdGVyYWxfdmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBsaXRlcmFsXG5cdCAqIEByZXR1cm5zIHtKc2VwfVxuXHQgKi9cblx0c3RhdGljIGFkZExpdGVyYWwobGl0ZXJhbF9uYW1lLCBsaXRlcmFsX3ZhbHVlKSB7XG5cdFx0SnNlcC5saXRlcmFsc1tsaXRlcmFsX25hbWVdID0gbGl0ZXJhbF92YWx1ZTtcblx0XHRyZXR1cm4gSnNlcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAbWV0aG9kIHJlbW92ZVVuYXJ5T3Bcblx0ICogQHBhcmFtIHtzdHJpbmd9IG9wX25hbWUgVGhlIG5hbWUgb2YgdGhlIHVuYXJ5IG9wIHRvIHJlbW92ZVxuXHQgKiBAcmV0dXJucyB7SnNlcH1cblx0ICovXG5cdHN0YXRpYyByZW1vdmVVbmFyeU9wKG9wX25hbWUpIHtcblx0XHRkZWxldGUgSnNlcC51bmFyeV9vcHNbb3BfbmFtZV07XG5cdFx0aWYgKG9wX25hbWUubGVuZ3RoID09PSBKc2VwLm1heF91bm9wX2xlbikge1xuXHRcdFx0SnNlcC5tYXhfdW5vcF9sZW4gPSBKc2VwLmdldE1heEtleUxlbihKc2VwLnVuYXJ5X29wcyk7XG5cdFx0fVxuXHRcdHJldHVybiBKc2VwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBtZXRob2QgcmVtb3ZlQWxsVW5hcnlPcHNcblx0ICogQHJldHVybnMge0pzZXB9XG5cdCAqL1xuXHRzdGF0aWMgcmVtb3ZlQWxsVW5hcnlPcHMoKSB7XG5cdFx0SnNlcC51bmFyeV9vcHMgPSB7fTtcblx0XHRKc2VwLm1heF91bm9wX2xlbiA9IDA7XG5cblx0XHRyZXR1cm4gSnNlcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAbWV0aG9kIHJlbW92ZUlkZW50aWZpZXJDaGFyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyIFRoZSBhZGRpdGlvbmFsIGNoYXJhY3RlciB0byBzdG9wIHRyZWF0aW5nIGFzIGEgdmFsaWQgcGFydCBvZiBhbiBpZGVudGlmaWVyXG5cdCAqIEByZXR1cm5zIHtKc2VwfVxuXHQgKi9cblx0c3RhdGljIHJlbW92ZUlkZW50aWZpZXJDaGFyKGNoYXIpIHtcblx0XHRKc2VwLmFkZGl0aW9uYWxfaWRlbnRpZmllcl9jaGFycy5kZWxldGUoY2hhcik7XG5cdFx0cmV0dXJuIEpzZXA7XG5cdH1cblxuXHQvKipcblx0ICogQG1ldGhvZCByZW1vdmVCaW5hcnlPcFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gb3BfbmFtZSBUaGUgbmFtZSBvZiB0aGUgYmluYXJ5IG9wIHRvIHJlbW92ZVxuXHQgKiBAcmV0dXJucyB7SnNlcH1cblx0ICovXG5cdHN0YXRpYyByZW1vdmVCaW5hcnlPcChvcF9uYW1lKSB7XG5cdFx0ZGVsZXRlIEpzZXAuYmluYXJ5X29wc1tvcF9uYW1lXTtcblxuXHRcdGlmIChvcF9uYW1lLmxlbmd0aCA9PT0gSnNlcC5tYXhfYmlub3BfbGVuKSB7XG5cdFx0XHRKc2VwLm1heF9iaW5vcF9sZW4gPSBKc2VwLmdldE1heEtleUxlbihKc2VwLmJpbmFyeV9vcHMpO1xuXHRcdH1cblx0XHRKc2VwLnJpZ2h0X2Fzc29jaWF0aXZlLmRlbGV0ZShvcF9uYW1lKTtcblxuXHRcdHJldHVybiBKc2VwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBtZXRob2QgcmVtb3ZlQWxsQmluYXJ5T3BzXG5cdCAqIEByZXR1cm5zIHtKc2VwfVxuXHQgKi9cblx0c3RhdGljIHJlbW92ZUFsbEJpbmFyeU9wcygpIHtcblx0XHRKc2VwLmJpbmFyeV9vcHMgPSB7fTtcblx0XHRKc2VwLm1heF9iaW5vcF9sZW4gPSAwO1xuXG5cdFx0cmV0dXJuIEpzZXA7XG5cdH1cblxuXHQvKipcblx0ICogQG1ldGhvZCByZW1vdmVMaXRlcmFsXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsaXRlcmFsX25hbWUgVGhlIG5hbWUgb2YgdGhlIGxpdGVyYWwgdG8gcmVtb3ZlXG5cdCAqIEByZXR1cm5zIHtKc2VwfVxuXHQgKi9cblx0c3RhdGljIHJlbW92ZUxpdGVyYWwobGl0ZXJhbF9uYW1lKSB7XG5cdFx0ZGVsZXRlIEpzZXAubGl0ZXJhbHNbbGl0ZXJhbF9uYW1lXTtcblx0XHRyZXR1cm4gSnNlcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAbWV0aG9kIHJlbW92ZUFsbExpdGVyYWxzXG5cdCAqIEByZXR1cm5zIHtKc2VwfVxuXHQgKi9cblx0c3RhdGljIHJlbW92ZUFsbExpdGVyYWxzKCkge1xuXHRcdEpzZXAubGl0ZXJhbHMgPSB7fTtcblxuXHRcdHJldHVybiBKc2VwO1xuXHR9XG5cdC8vID09PT09PT09PT09PT09PT09PT09IEVORCBDT05GSUcgPT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5cblx0LyoqXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRnZXQgY2hhcigpIHtcblx0XHRyZXR1cm4gdGhpcy5leHByLmNoYXJBdCh0aGlzLmluZGV4KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcmV0dXJucyB7bnVtYmVyfVxuXHQgKi9cblx0Z2V0IGNvZGUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXhwci5jaGFyQ29kZUF0KHRoaXMuaW5kZXgpO1xuXHR9O1xuXG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBleHByIGEgc3RyaW5nIHdpdGggdGhlIHBhc3NlZCBpbiBleHByZXNzXG5cdCAqIEByZXR1cm5zIEpzZXBcblx0ICovXG5cdGNvbnN0cnVjdG9yKGV4cHIpIHtcblx0XHQvLyBgaW5kZXhgIHN0b3JlcyB0aGUgY2hhcmFjdGVyIG51bWJlciB3ZSBhcmUgY3VycmVudGx5IGF0XG5cdFx0Ly8gQWxsIG9mIHRoZSBnb2JibGVzIGJlbG93IHdpbGwgbW9kaWZ5IGBpbmRleGAgYXMgd2UgbW92ZSBhbG9uZ1xuXHRcdHRoaXMuZXhwciA9IGV4cHI7XG5cdFx0dGhpcy5pbmRleCA9IDA7XG5cdH1cblxuXHQvKipcblx0ICogc3RhdGljIHRvcC1sZXZlbCBwYXJzZXJcblx0ICogQHJldHVybnMge2pzZXAuRXhwcmVzc2lvbn1cblx0ICovXG5cdHN0YXRpYyBwYXJzZShleHByKSB7XG5cdFx0cmV0dXJuIChuZXcgSnNlcChleHByKSkucGFyc2UoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGxvbmdlc3Qga2V5IGxlbmd0aCBvZiBhbnkgb2JqZWN0XG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvYmpcblx0ICogQHJldHVybnMge251bWJlcn1cblx0ICovXG5cdHN0YXRpYyBnZXRNYXhLZXlMZW4ob2JqKSB7XG5cdFx0cmV0dXJuIE1hdGgubWF4KDAsIC4uLk9iamVjdC5rZXlzKG9iaikubWFwKGsgPT4gay5sZW5ndGgpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBgY2hgIGlzIGEgY2hhcmFjdGVyIGNvZGUgaW4gdGhlIG5leHQgdGhyZWUgZnVuY3Rpb25zXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBjaFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHN0YXRpYyBpc0RlY2ltYWxEaWdpdChjaCkge1xuXHRcdHJldHVybiAoY2ggPj0gNDggJiYgY2ggPD0gNTcpOyAvLyAwLi4uOVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHByZWNlZGVuY2Ugb2YgYSBiaW5hcnkgb3BlcmF0b3Igb3IgYDBgIGlmIGl0IGlzbid0IGEgYmluYXJ5IG9wZXJhdG9yLiBDYW4gYmUgZmxvYXQuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBvcF92YWxcblx0ICogQHJldHVybnMge251bWJlcn1cblx0ICovXG5cdHN0YXRpYyBiaW5hcnlQcmVjZWRlbmNlKG9wX3ZhbCkge1xuXHRcdHJldHVybiBKc2VwLmJpbmFyeV9vcHNbb3BfdmFsXSB8fCAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIExvb2tzIGZvciBzdGFydCBvZiBpZGVudGlmaWVyXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBjaFxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdHN0YXRpYyBpc0lkZW50aWZpZXJTdGFydChjaCkge1xuXHRcdHJldHVybiAgKGNoID49IDY1ICYmIGNoIDw9IDkwKSB8fCAvLyBBLi4uWlxuXHRcdFx0KGNoID49IDk3ICYmIGNoIDw9IDEyMikgfHwgLy8gYS4uLnpcblx0XHRcdChjaCA+PSAxMjggJiYgIUpzZXAuYmluYXJ5X29wc1tTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKV0pIHx8IC8vIGFueSBub24tQVNDSUkgdGhhdCBpcyBub3QgYW4gb3BlcmF0b3Jcblx0XHRcdChKc2VwLmFkZGl0aW9uYWxfaWRlbnRpZmllcl9jaGFycy5oYXMoU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpKTsgLy8gYWRkaXRpb25hbCBjaGFyYWN0ZXJzXG5cdH1cblxuXHQvKipcblx0ICogQHBhcmFtIHtudW1iZXJ9IGNoXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0c3RhdGljIGlzSWRlbnRpZmllclBhcnQoY2gpIHtcblx0XHRyZXR1cm4gSnNlcC5pc0lkZW50aWZpZXJTdGFydChjaCkgfHwgSnNlcC5pc0RlY2ltYWxEaWdpdChjaCk7XG5cdH1cblxuXHQvKipcblx0ICogdGhyb3cgZXJyb3IgYXQgaW5kZXggb2YgdGhlIGV4cHJlc3Npb25cblx0ICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2Vcblx0ICogQHRocm93c1xuXHQgKi9cblx0dGhyb3dFcnJvcihtZXNzYWdlKSB7XG5cdFx0Y29uc3QgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSArICcgYXQgY2hhcmFjdGVyICcgKyB0aGlzLmluZGV4KTtcblx0XHRlcnJvci5pbmRleCA9IHRoaXMuaW5kZXg7XG5cdFx0ZXJyb3IuZGVzY3JpcHRpb24gPSBtZXNzYWdlO1xuXHRcdHRocm93IGVycm9yO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJ1biBhIGdpdmVuIGhvb2tcblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcblx0ICogQHBhcmFtIHtqc2VwLkV4cHJlc3Npb258ZmFsc2V9IFtub2RlXVxuXHQgKiBAcmV0dXJucyB7P2pzZXAuRXhwcmVzc2lvbn1cblx0ICovXG5cdHJ1bkhvb2sobmFtZSwgbm9kZSkge1xuXHRcdGlmIChKc2VwLmhvb2tzW25hbWVdKSB7XG5cdFx0XHRjb25zdCBlbnYgPSB7IGNvbnRleHQ6IHRoaXMsIG5vZGUgfTtcblx0XHRcdEpzZXAuaG9va3MucnVuKG5hbWUsIGVudik7XG5cdFx0XHRyZXR1cm4gZW52Lm5vZGU7XG5cdFx0fVxuXHRcdHJldHVybiBub2RlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJ1bnMgYSBnaXZlbiBob29rIHVudGlsIG9uZSByZXR1cm5zIGEgbm9kZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcmV0dXJucyB7P2pzZXAuRXhwcmVzc2lvbn1cblx0ICovXG5cdHNlYXJjaEhvb2sobmFtZSkge1xuXHRcdGlmIChKc2VwLmhvb2tzW25hbWVdKSB7XG5cdFx0XHRjb25zdCBlbnYgPSB7IGNvbnRleHQ6IHRoaXMgfTtcblx0XHRcdEpzZXAuaG9va3NbbmFtZV0uZmluZChmdW5jdGlvbiAoY2FsbGJhY2spIHtcblx0XHRcdFx0Y2FsbGJhY2suY2FsbChlbnYuY29udGV4dCwgZW52KTtcblx0XHRcdFx0cmV0dXJuIGVudi5ub2RlO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gZW52Lm5vZGU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFB1c2ggYGluZGV4YCB1cCB0byB0aGUgbmV4dCBub24tc3BhY2UgY2hhcmFjdGVyXG5cdCAqL1xuXHRnb2JibGVTcGFjZXMoKSB7XG5cdFx0bGV0IGNoID0gdGhpcy5jb2RlO1xuXHRcdC8vIFdoaXRlc3BhY2Vcblx0XHR3aGlsZSAoY2ggPT09IEpzZXAuU1BBQ0VfQ09ERVxuXHRcdHx8IGNoID09PSBKc2VwLlRBQl9DT0RFXG5cdFx0fHwgY2ggPT09IEpzZXAuTEZfQ09ERVxuXHRcdHx8IGNoID09PSBKc2VwLkNSX0NPREUpIHtcblx0XHRcdGNoID0gdGhpcy5leHByLmNoYXJDb2RlQXQoKyt0aGlzLmluZGV4KTtcblx0XHR9XG5cdFx0dGhpcy5ydW5Ib29rKCdnb2JibGUtc3BhY2VzJyk7XG5cdH1cblxuXHQvKipcblx0ICogVG9wLWxldmVsIG1ldGhvZCB0byBwYXJzZSBhbGwgZXhwcmVzc2lvbnMgYW5kIHJldHVybnMgY29tcG91bmQgb3Igc2luZ2xlIG5vZGVcblx0ICogQHJldHVybnMge2pzZXAuRXhwcmVzc2lvbn1cblx0ICovXG5cdHBhcnNlKCkge1xuXHRcdHRoaXMucnVuSG9vaygnYmVmb3JlLWFsbCcpO1xuXHRcdGNvbnN0IG5vZGVzID0gdGhpcy5nb2JibGVFeHByZXNzaW9ucygpO1xuXG5cdFx0Ly8gSWYgdGhlcmUncyBvbmx5IG9uZSBleHByZXNzaW9uIGp1c3QgdHJ5IHJldHVybmluZyB0aGUgZXhwcmVzc2lvblxuXHRcdGNvbnN0IG5vZGUgPSBub2Rlcy5sZW5ndGggPT09IDFcblx0XHQgID8gbm9kZXNbMF1cblx0XHRcdDoge1xuXHRcdFx0XHR0eXBlOiBKc2VwLkNPTVBPVU5ELFxuXHRcdFx0XHRib2R5OiBub2Rlc1xuXHRcdFx0fTtcblx0XHRyZXR1cm4gdGhpcy5ydW5Ib29rKCdhZnRlci1hbGwnLCBub2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiB0b3AtbGV2ZWwgcGFyc2VyIChidXQgY2FuIGJlIHJldXNlZCB3aXRoaW4gYXMgd2VsbClcblx0ICogQHBhcmFtIHtudW1iZXJ9IFt1bnRpbElDb2RlXVxuXHQgKiBAcmV0dXJucyB7anNlcC5FeHByZXNzaW9uW119XG5cdCAqL1xuXHRnb2JibGVFeHByZXNzaW9ucyh1bnRpbElDb2RlKSB7XG5cdFx0bGV0IG5vZGVzID0gW10sIGNoX2ksIG5vZGU7XG5cblx0XHR3aGlsZSAodGhpcy5pbmRleCA8IHRoaXMuZXhwci5sZW5ndGgpIHtcblx0XHRcdGNoX2kgPSB0aGlzLmNvZGU7XG5cblx0XHRcdC8vIEV4cHJlc3Npb25zIGNhbiBiZSBzZXBhcmF0ZWQgYnkgc2VtaWNvbG9ucywgY29tbWFzLCBvciBqdXN0IGluZmVycmVkIHdpdGhvdXQgYW55XG5cdFx0XHQvLyBzZXBhcmF0b3JzXG5cdFx0XHRpZiAoY2hfaSA9PT0gSnNlcC5TRU1DT0xfQ09ERSB8fCBjaF9pID09PSBKc2VwLkNPTU1BX0NPREUpIHtcblx0XHRcdFx0dGhpcy5pbmRleCsrOyAvLyBpZ25vcmUgc2VwYXJhdG9yc1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSB7XG5cdFx0XHRcdC8vIFRyeSB0byBnb2JibGUgZWFjaCBleHByZXNzaW9uIGluZGl2aWR1YWxseVxuXHRcdFx0XHRpZiAobm9kZSA9IHRoaXMuZ29iYmxlRXhwcmVzc2lvbigpKSB7XG5cdFx0XHRcdFx0bm9kZXMucHVzaChub2RlKTtcblx0XHRcdFx0XHQvLyBJZiB3ZSB3ZXJlbid0IGFibGUgdG8gZmluZCBhIGJpbmFyeSBleHByZXNzaW9uIGFuZCBhcmUgb3V0IG9mIHJvb20sIHRoZW5cblx0XHRcdFx0XHQvLyB0aGUgZXhwcmVzc2lvbiBwYXNzZWQgaW4gcHJvYmFibHkgaGFzIHRvbyBtdWNoXG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAodGhpcy5pbmRleCA8IHRoaXMuZXhwci5sZW5ndGgpIHtcblx0XHRcdFx0XHRpZiAoY2hfaSA9PT0gdW50aWxJQ29kZSkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMudGhyb3dFcnJvcignVW5leHBlY3RlZCBcIicgKyB0aGlzLmNoYXIgKyAnXCInKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBub2Rlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGUgbWFpbiBwYXJzaW5nIGZ1bmN0aW9uLlxuXHQgKiBAcmV0dXJucyB7P2pzZXAuRXhwcmVzc2lvbn1cblx0ICovXG5cdGdvYmJsZUV4cHJlc3Npb24oKSB7XG5cdFx0Y29uc3Qgbm9kZSA9IHRoaXMuc2VhcmNoSG9vaygnZ29iYmxlLWV4cHJlc3Npb24nKSB8fCB0aGlzLmdvYmJsZUJpbmFyeUV4cHJlc3Npb24oKTtcblx0XHR0aGlzLmdvYmJsZVNwYWNlcygpO1xuXG5cdFx0cmV0dXJuIHRoaXMucnVuSG9vaygnYWZ0ZXItZXhwcmVzc2lvbicsIG5vZGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNlYXJjaCBmb3IgdGhlIG9wZXJhdGlvbiBwb3J0aW9uIG9mIHRoZSBzdHJpbmcgKGUuZy4gYCtgLCBgPT09YClcblx0ICogU3RhcnQgYnkgdGFraW5nIHRoZSBsb25nZXN0IHBvc3NpYmxlIGJpbmFyeSBvcGVyYXRpb25zICgzIGNoYXJhY3RlcnM6IGA9PT1gLCBgIT09YCwgYD4+PmApXG5cdCAqIGFuZCBtb3ZlIGRvd24gZnJvbSAzIHRvIDIgdG8gMSBjaGFyYWN0ZXIgdW50aWwgYSBtYXRjaGluZyBiaW5hcnkgb3BlcmF0aW9uIGlzIGZvdW5kXG5cdCAqIHRoZW4sIHJldHVybiB0aGF0IGJpbmFyeSBvcGVyYXRpb25cblx0ICogQHJldHVybnMge3N0cmluZ3xib29sZWFufVxuXHQgKi9cblx0Z29iYmxlQmluYXJ5T3AoKSB7XG5cdFx0dGhpcy5nb2JibGVTcGFjZXMoKTtcblx0XHRsZXQgdG9fY2hlY2sgPSB0aGlzLmV4cHIuc3Vic3RyKHRoaXMuaW5kZXgsIEpzZXAubWF4X2Jpbm9wX2xlbik7XG5cdFx0bGV0IHRjX2xlbiA9IHRvX2NoZWNrLmxlbmd0aDtcblxuXHRcdHdoaWxlICh0Y19sZW4gPiAwKSB7XG5cdFx0XHQvLyBEb24ndCBhY2NlcHQgYSBiaW5hcnkgb3Agd2hlbiBpdCBpcyBhbiBpZGVudGlmaWVyLlxuXHRcdFx0Ly8gQmluYXJ5IG9wcyB0aGF0IHN0YXJ0IHdpdGggYSBpZGVudGlmaWVyLXZhbGlkIGNoYXJhY3RlciBtdXN0IGJlIGZvbGxvd2VkXG5cdFx0XHQvLyBieSBhIG5vbiBpZGVudGlmaWVyLXBhcnQgdmFsaWQgY2hhcmFjdGVyXG5cdFx0XHRpZiAoSnNlcC5iaW5hcnlfb3BzLmhhc093blByb3BlcnR5KHRvX2NoZWNrKSAmJiAoXG5cdFx0XHRcdCFKc2VwLmlzSWRlbnRpZmllclN0YXJ0KHRoaXMuY29kZSkgfHxcblx0XHRcdFx0KHRoaXMuaW5kZXggKyB0b19jaGVjay5sZW5ndGggPCB0aGlzLmV4cHIubGVuZ3RoICYmICFKc2VwLmlzSWRlbnRpZmllclBhcnQodGhpcy5leHByLmNoYXJDb2RlQXQodGhpcy5pbmRleCArIHRvX2NoZWNrLmxlbmd0aCkpKVxuXHRcdFx0KSkge1xuXHRcdFx0XHR0aGlzLmluZGV4ICs9IHRjX2xlbjtcblx0XHRcdFx0cmV0dXJuIHRvX2NoZWNrO1xuXHRcdFx0fVxuXHRcdFx0dG9fY2hlY2sgPSB0b19jaGVjay5zdWJzdHIoMCwgLS10Y19sZW4pO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgZ29iYmxpbmcgYW4gaW5kaXZpZHVhbCBleHByZXNzaW9uLFxuXHQgKiBlLmcuIGAxYCwgYDErMmAsIGBhKyhiKjIpLU1hdGguc3FydCgyKWBcblx0ICogQHJldHVybnMgez9qc2VwLkJpbmFyeUV4cHJlc3Npb259XG5cdCAqL1xuXHRnb2JibGVCaW5hcnlFeHByZXNzaW9uKCkge1xuXHRcdGxldCBub2RlLCBiaW9wLCBwcmVjLCBzdGFjaywgYmlvcF9pbmZvLCBsZWZ0LCByaWdodCwgaSwgY3VyX2Jpb3A7XG5cblx0XHQvLyBGaXJzdCwgdHJ5IHRvIGdldCB0aGUgbGVmdG1vc3QgdGhpbmdcblx0XHQvLyBUaGVuLCBjaGVjayB0byBzZWUgaWYgdGhlcmUncyBhIGJpbmFyeSBvcGVyYXRvciBvcGVyYXRpbmcgb24gdGhhdCBsZWZ0bW9zdCB0aGluZ1xuXHRcdC8vIERvbid0IGdvYmJsZUJpbmFyeU9wIHdpdGhvdXQgYSBsZWZ0LWhhbmQtc2lkZVxuXHRcdGxlZnQgPSB0aGlzLmdvYmJsZVRva2VuKCk7XG5cdFx0aWYgKCFsZWZ0KSB7XG5cdFx0XHRyZXR1cm4gbGVmdDtcblx0XHR9XG5cdFx0YmlvcCA9IHRoaXMuZ29iYmxlQmluYXJ5T3AoKTtcblxuXHRcdC8vIElmIHRoZXJlIHdhc24ndCBhIGJpbmFyeSBvcGVyYXRvciwganVzdCByZXR1cm4gdGhlIGxlZnRtb3N0IG5vZGVcblx0XHRpZiAoIWJpb3ApIHtcblx0XHRcdHJldHVybiBsZWZ0O1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSwgd2UgbmVlZCB0byBzdGFydCBhIHN0YWNrIHRvIHByb3Blcmx5IHBsYWNlIHRoZSBiaW5hcnkgb3BlcmF0aW9ucyBpbiB0aGVpclxuXHRcdC8vIHByZWNlZGVuY2Ugc3RydWN0dXJlXG5cdFx0YmlvcF9pbmZvID0geyB2YWx1ZTogYmlvcCwgcHJlYzogSnNlcC5iaW5hcnlQcmVjZWRlbmNlKGJpb3ApLCByaWdodF9hOiBKc2VwLnJpZ2h0X2Fzc29jaWF0aXZlLmhhcyhiaW9wKSB9O1xuXG5cdFx0cmlnaHQgPSB0aGlzLmdvYmJsZVRva2VuKCk7XG5cblx0XHRpZiAoIXJpZ2h0KSB7XG5cdFx0XHR0aGlzLnRocm93RXJyb3IoXCJFeHBlY3RlZCBleHByZXNzaW9uIGFmdGVyIFwiICsgYmlvcCk7XG5cdFx0fVxuXG5cdFx0c3RhY2sgPSBbbGVmdCwgYmlvcF9pbmZvLCByaWdodF07XG5cblx0XHQvLyBQcm9wZXJseSBkZWFsIHdpdGggcHJlY2VkZW5jZSB1c2luZyBbcmVjdXJzaXZlIGRlc2NlbnRdKGh0dHA6Ly93d3cuZW5nci5tdW4uY2EvfnRoZW8vTWlzYy9leHBfcGFyc2luZy5odG0pXG5cdFx0d2hpbGUgKChiaW9wID0gdGhpcy5nb2JibGVCaW5hcnlPcCgpKSkge1xuXHRcdFx0cHJlYyA9IEpzZXAuYmluYXJ5UHJlY2VkZW5jZShiaW9wKTtcblxuXHRcdFx0aWYgKHByZWMgPT09IDApIHtcblx0XHRcdFx0dGhpcy5pbmRleCAtPSBiaW9wLmxlbmd0aDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGJpb3BfaW5mbyA9IHsgdmFsdWU6IGJpb3AsIHByZWMsIHJpZ2h0X2E6IEpzZXAucmlnaHRfYXNzb2NpYXRpdmUuaGFzKGJpb3ApIH07XG5cblx0XHRcdGN1cl9iaW9wID0gYmlvcDtcblxuXHRcdFx0Ly8gUmVkdWNlOiBtYWtlIGEgYmluYXJ5IGV4cHJlc3Npb24gZnJvbSB0aGUgdGhyZWUgdG9wbW9zdCBlbnRyaWVzLlxuXHRcdFx0Y29uc3QgY29tcGFyZVByZXYgPSBwcmV2ID0+IGJpb3BfaW5mby5yaWdodF9hICYmIHByZXYucmlnaHRfYVxuXHRcdFx0XHQ/IHByZWMgPiBwcmV2LnByZWNcblx0XHRcdFx0OiBwcmVjIDw9IHByZXYucHJlYztcblx0XHRcdHdoaWxlICgoc3RhY2subGVuZ3RoID4gMikgJiYgY29tcGFyZVByZXYoc3RhY2tbc3RhY2subGVuZ3RoIC0gMl0pKSB7XG5cdFx0XHRcdHJpZ2h0ID0gc3RhY2sucG9wKCk7XG5cdFx0XHRcdGJpb3AgPSBzdGFjay5wb3AoKS52YWx1ZTtcblx0XHRcdFx0bGVmdCA9IHN0YWNrLnBvcCgpO1xuXHRcdFx0XHRub2RlID0ge1xuXHRcdFx0XHRcdHR5cGU6IEpzZXAuQklOQVJZX0VYUCxcblx0XHRcdFx0XHRvcGVyYXRvcjogYmlvcCxcblx0XHRcdFx0XHRsZWZ0LFxuXHRcdFx0XHRcdHJpZ2h0XG5cdFx0XHRcdH07XG5cdFx0XHRcdHN0YWNrLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cblx0XHRcdG5vZGUgPSB0aGlzLmdvYmJsZVRva2VuKCk7XG5cblx0XHRcdGlmICghbm9kZSkge1xuXHRcdFx0XHR0aGlzLnRocm93RXJyb3IoXCJFeHBlY3RlZCBleHByZXNzaW9uIGFmdGVyIFwiICsgY3VyX2Jpb3ApO1xuXHRcdFx0fVxuXG5cdFx0XHRzdGFjay5wdXNoKGJpb3BfaW5mbywgbm9kZSk7XG5cdFx0fVxuXG5cdFx0aSA9IHN0YWNrLmxlbmd0aCAtIDE7XG5cdFx0bm9kZSA9IHN0YWNrW2ldO1xuXG5cdFx0d2hpbGUgKGkgPiAxKSB7XG5cdFx0XHRub2RlID0ge1xuXHRcdFx0XHR0eXBlOiBKc2VwLkJJTkFSWV9FWFAsXG5cdFx0XHRcdG9wZXJhdG9yOiBzdGFja1tpIC0gMV0udmFsdWUsXG5cdFx0XHRcdGxlZnQ6IHN0YWNrW2kgLSAyXSxcblx0XHRcdFx0cmlnaHQ6IG5vZGVcblx0XHRcdH07XG5cdFx0XHRpIC09IDI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5vZGU7XG5cdH1cblxuXHQvKipcblx0ICogQW4gaW5kaXZpZHVhbCBwYXJ0IG9mIGEgYmluYXJ5IGV4cHJlc3Npb246XG5cdCAqIGUuZy4gYGZvby5iYXIoYmF6KWAsIGAxYCwgYFwiYWJjXCJgLCBgKGEgJSAyKWAgKGJlY2F1c2UgaXQncyBpbiBwYXJlbnRoZXNpcylcblx0ICogQHJldHVybnMge2Jvb2xlYW58anNlcC5FeHByZXNzaW9ufVxuXHQgKi9cblx0Z29iYmxlVG9rZW4oKSB7XG5cdFx0bGV0IGNoLCB0b19jaGVjaywgdGNfbGVuLCBub2RlO1xuXG5cdFx0dGhpcy5nb2JibGVTcGFjZXMoKTtcblx0XHRub2RlID0gdGhpcy5zZWFyY2hIb29rKCdnb2JibGUtdG9rZW4nKTtcblx0XHRpZiAobm9kZSkge1xuXHRcdFx0cmV0dXJuIHRoaXMucnVuSG9vaygnYWZ0ZXItdG9rZW4nLCBub2RlKTtcblx0XHR9XG5cblx0XHRjaCA9IHRoaXMuY29kZTtcblxuXHRcdGlmIChKc2VwLmlzRGVjaW1hbERpZ2l0KGNoKSB8fCBjaCA9PT0gSnNlcC5QRVJJT0RfQ09ERSkge1xuXHRcdFx0Ly8gQ2hhciBjb2RlIDQ2IGlzIGEgZG90IGAuYCB3aGljaCBjYW4gc3RhcnQgb2ZmIGEgbnVtZXJpYyBsaXRlcmFsXG5cdFx0XHRyZXR1cm4gdGhpcy5nb2JibGVOdW1lcmljTGl0ZXJhbCgpO1xuXHRcdH1cblxuXHRcdGlmIChjaCA9PT0gSnNlcC5TUVVPVEVfQ09ERSB8fCBjaCA9PT0gSnNlcC5EUVVPVEVfQ09ERSkge1xuXHRcdFx0Ly8gU2luZ2xlIG9yIGRvdWJsZSBxdW90ZXNcblx0XHRcdG5vZGUgPSB0aGlzLmdvYmJsZVN0cmluZ0xpdGVyYWwoKTtcblx0XHR9XG5cdFx0ZWxzZSBpZiAoY2ggPT09IEpzZXAuT0JSQUNLX0NPREUpIHtcblx0XHRcdG5vZGUgPSB0aGlzLmdvYmJsZUFycmF5KCk7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0dG9fY2hlY2sgPSB0aGlzLmV4cHIuc3Vic3RyKHRoaXMuaW5kZXgsIEpzZXAubWF4X3Vub3BfbGVuKTtcblx0XHRcdHRjX2xlbiA9IHRvX2NoZWNrLmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKHRjX2xlbiA+IDApIHtcblx0XHRcdFx0Ly8gRG9uJ3QgYWNjZXB0IGFuIHVuYXJ5IG9wIHdoZW4gaXQgaXMgYW4gaWRlbnRpZmllci5cblx0XHRcdFx0Ly8gVW5hcnkgb3BzIHRoYXQgc3RhcnQgd2l0aCBhIGlkZW50aWZpZXItdmFsaWQgY2hhcmFjdGVyIG11c3QgYmUgZm9sbG93ZWRcblx0XHRcdFx0Ly8gYnkgYSBub24gaWRlbnRpZmllci1wYXJ0IHZhbGlkIGNoYXJhY3RlclxuXHRcdFx0XHRpZiAoSnNlcC51bmFyeV9vcHMuaGFzT3duUHJvcGVydHkodG9fY2hlY2spICYmIChcblx0XHRcdFx0XHQhSnNlcC5pc0lkZW50aWZpZXJTdGFydCh0aGlzLmNvZGUpIHx8XG5cdFx0XHRcdFx0KHRoaXMuaW5kZXggKyB0b19jaGVjay5sZW5ndGggPCB0aGlzLmV4cHIubGVuZ3RoICYmICFKc2VwLmlzSWRlbnRpZmllclBhcnQodGhpcy5leHByLmNoYXJDb2RlQXQodGhpcy5pbmRleCArIHRvX2NoZWNrLmxlbmd0aCkpKVxuXHRcdFx0XHQpKSB7XG5cdFx0XHRcdFx0dGhpcy5pbmRleCArPSB0Y19sZW47XG5cdFx0XHRcdFx0Y29uc3QgYXJndW1lbnQgPSB0aGlzLmdvYmJsZVRva2VuKCk7XG5cdFx0XHRcdFx0aWYgKCFhcmd1bWVudCkge1xuXHRcdFx0XHRcdFx0dGhpcy50aHJvd0Vycm9yKCdtaXNzaW5nIHVuYXJ5T3AgYXJndW1lbnQnKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMucnVuSG9vaygnYWZ0ZXItdG9rZW4nLCB7XG5cdFx0XHRcdFx0XHR0eXBlOiBKc2VwLlVOQVJZX0VYUCxcblx0XHRcdFx0XHRcdG9wZXJhdG9yOiB0b19jaGVjayxcblx0XHRcdFx0XHRcdGFyZ3VtZW50LFxuXHRcdFx0XHRcdFx0cHJlZml4OiB0cnVlXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0b19jaGVjayA9IHRvX2NoZWNrLnN1YnN0cigwLCAtLXRjX2xlbik7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChKc2VwLmlzSWRlbnRpZmllclN0YXJ0KGNoKSkge1xuXHRcdFx0XHRub2RlID0gdGhpcy5nb2JibGVJZGVudGlmaWVyKCk7XG5cdFx0XHRcdGlmIChKc2VwLmxpdGVyYWxzLmhhc093blByb3BlcnR5KG5vZGUubmFtZSkpIHtcblx0XHRcdFx0XHRub2RlID0ge1xuXHRcdFx0XHRcdFx0dHlwZTogSnNlcC5MSVRFUkFMLFxuXHRcdFx0XHRcdFx0dmFsdWU6IEpzZXAubGl0ZXJhbHNbbm9kZS5uYW1lXSxcblx0XHRcdFx0XHRcdHJhdzogbm9kZS5uYW1lLFxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAobm9kZS5uYW1lID09PSBKc2VwLnRoaXNfc3RyKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHsgdHlwZTogSnNlcC5USElTX0VYUCB9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChjaCA9PT0gSnNlcC5PUEFSRU5fQ09ERSkgeyAvLyBvcGVuIHBhcmVudGhlc2lzXG5cdFx0XHRcdG5vZGUgPSB0aGlzLmdvYmJsZUdyb3VwKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFub2RlKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5ydW5Ib29rKCdhZnRlci10b2tlbicsIGZhbHNlKTtcblx0XHR9XG5cblx0XHRub2RlID0gdGhpcy5nb2JibGVUb2tlblByb3BlcnR5KG5vZGUpO1xuXHRcdHJldHVybiB0aGlzLnJ1bkhvb2soJ2FmdGVyLXRva2VuJywgbm9kZSk7XG5cdH1cblxuXHQvKipcblx0ICogR29iYmxlIHByb3BlcnRpZXMgb2Ygb2YgaWRlbnRpZmllcnMvc3RyaW5ncy9hcnJheXMvZ3JvdXBzLlxuXHQgKiBlLmcuIGBmb29gLCBgYmFyLmJhemAsIGBmb29bJ2JhciddLmJhemBcblx0ICogSXQgYWxzbyBnb2JibGVzIGZ1bmN0aW9uIGNhbGxzOlxuXHQgKiBlLmcuIGBNYXRoLmFjb3Mob2JqLmFuZ2xlKWBcblx0ICogQHBhcmFtIHtqc2VwLkV4cHJlc3Npb259IG5vZGVcblx0ICogQHJldHVybnMge2pzZXAuRXhwcmVzc2lvbn1cblx0ICovXG5cdGdvYmJsZVRva2VuUHJvcGVydHkobm9kZSkge1xuXHRcdHRoaXMuZ29iYmxlU3BhY2VzKCk7XG5cblx0XHRsZXQgY2ggPSB0aGlzLmNvZGU7XG5cdFx0d2hpbGUgKGNoID09PSBKc2VwLlBFUklPRF9DT0RFIHx8IGNoID09PSBKc2VwLk9CUkFDS19DT0RFIHx8IGNoID09PSBKc2VwLk9QQVJFTl9DT0RFIHx8IGNoID09PSBKc2VwLlFVTUFSS19DT0RFKSB7XG5cdFx0XHRsZXQgb3B0aW9uYWw7XG5cdFx0XHRpZiAoY2ggPT09IEpzZXAuUVVNQVJLX0NPREUpIHtcblx0XHRcdFx0aWYgKHRoaXMuZXhwci5jaGFyQ29kZUF0KHRoaXMuaW5kZXggKyAxKSAhPT0gSnNlcC5QRVJJT0RfQ09ERSkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9wdGlvbmFsID0gdHJ1ZTtcblx0XHRcdFx0dGhpcy5pbmRleCArPSAyO1xuXHRcdFx0XHR0aGlzLmdvYmJsZVNwYWNlcygpO1xuXHRcdFx0XHRjaCA9IHRoaXMuY29kZTtcblx0XHRcdH1cblx0XHRcdHRoaXMuaW5kZXgrKztcblxuXHRcdFx0aWYgKGNoID09PSBKc2VwLk9CUkFDS19DT0RFKSB7XG5cdFx0XHRcdG5vZGUgPSB7XG5cdFx0XHRcdFx0dHlwZTogSnNlcC5NRU1CRVJfRVhQLFxuXHRcdFx0XHRcdGNvbXB1dGVkOiB0cnVlLFxuXHRcdFx0XHRcdG9iamVjdDogbm9kZSxcblx0XHRcdFx0XHRwcm9wZXJ0eTogdGhpcy5nb2JibGVFeHByZXNzaW9uKClcblx0XHRcdFx0fTtcblx0XHRcdFx0dGhpcy5nb2JibGVTcGFjZXMoKTtcblx0XHRcdFx0Y2ggPSB0aGlzLmNvZGU7XG5cdFx0XHRcdGlmIChjaCAhPT0gSnNlcC5DQlJBQ0tfQ09ERSkge1xuXHRcdFx0XHRcdHRoaXMudGhyb3dFcnJvcignVW5jbG9zZWQgWycpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuaW5kZXgrKztcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKGNoID09PSBKc2VwLk9QQVJFTl9DT0RFKSB7XG5cdFx0XHRcdC8vIEEgZnVuY3Rpb24gY2FsbCBpcyBiZWluZyBtYWRlOyBnb2JibGUgYWxsIHRoZSBhcmd1bWVudHNcblx0XHRcdFx0bm9kZSA9IHtcblx0XHRcdFx0XHR0eXBlOiBKc2VwLkNBTExfRVhQLFxuXHRcdFx0XHRcdCdhcmd1bWVudHMnOiB0aGlzLmdvYmJsZUFyZ3VtZW50cyhKc2VwLkNQQVJFTl9DT0RFKSxcblx0XHRcdFx0XHRjYWxsZWU6IG5vZGVcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKGNoID09PSBKc2VwLlBFUklPRF9DT0RFIHx8IG9wdGlvbmFsKSB7XG5cdFx0XHRcdGlmIChvcHRpb25hbCkge1xuXHRcdFx0XHRcdHRoaXMuaW5kZXgtLTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLmdvYmJsZVNwYWNlcygpO1xuXHRcdFx0XHRub2RlID0ge1xuXHRcdFx0XHRcdHR5cGU6IEpzZXAuTUVNQkVSX0VYUCxcblx0XHRcdFx0XHRjb21wdXRlZDogZmFsc2UsXG5cdFx0XHRcdFx0b2JqZWN0OiBub2RlLFxuXHRcdFx0XHRcdHByb3BlcnR5OiB0aGlzLmdvYmJsZUlkZW50aWZpZXIoKSxcblx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKG9wdGlvbmFsKSB7XG5cdFx0XHRcdG5vZGUub3B0aW9uYWwgPSB0cnVlO1xuXHRcdFx0fSAvLyBlbHNlIGxlYXZlIHVuZGVmaW5lZCBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGVzcHJpbWFcblxuXHRcdFx0dGhpcy5nb2JibGVTcGFjZXMoKTtcblx0XHRcdGNoID0gdGhpcy5jb2RlO1xuXHRcdH1cblxuXHRcdHJldHVybiBub2RlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBhcnNlIHNpbXBsZSBudW1lcmljIGxpdGVyYWxzOiBgMTJgLCBgMy40YCwgYC41YC4gRG8gdGhpcyBieSB1c2luZyBhIHN0cmluZyB0b1xuXHQgKiBrZWVwIHRyYWNrIG9mIGV2ZXJ5dGhpbmcgaW4gdGhlIG51bWVyaWMgbGl0ZXJhbCBhbmQgdGhlbiBjYWxsaW5nIGBwYXJzZUZsb2F0YCBvbiB0aGF0IHN0cmluZ1xuXHQgKiBAcmV0dXJucyB7anNlcC5MaXRlcmFsfVxuXHQgKi9cblx0Z29iYmxlTnVtZXJpY0xpdGVyYWwoKSB7XG5cdFx0bGV0IG51bWJlciA9ICcnLCBjaCwgY2hDb2RlO1xuXG5cdFx0d2hpbGUgKEpzZXAuaXNEZWNpbWFsRGlnaXQodGhpcy5jb2RlKSkge1xuXHRcdFx0bnVtYmVyICs9IHRoaXMuZXhwci5jaGFyQXQodGhpcy5pbmRleCsrKTtcblx0XHR9XG5cblx0XHRpZiAodGhpcy5jb2RlID09PSBKc2VwLlBFUklPRF9DT0RFKSB7IC8vIGNhbiBzdGFydCB3aXRoIGEgZGVjaW1hbCBtYXJrZXJcblx0XHRcdG51bWJlciArPSB0aGlzLmV4cHIuY2hhckF0KHRoaXMuaW5kZXgrKyk7XG5cblx0XHRcdHdoaWxlIChKc2VwLmlzRGVjaW1hbERpZ2l0KHRoaXMuY29kZSkpIHtcblx0XHRcdFx0bnVtYmVyICs9IHRoaXMuZXhwci5jaGFyQXQodGhpcy5pbmRleCsrKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjaCA9IHRoaXMuY2hhcjtcblxuXHRcdGlmIChjaCA9PT0gJ2UnIHx8IGNoID09PSAnRScpIHsgLy8gZXhwb25lbnQgbWFya2VyXG5cdFx0XHRudW1iZXIgKz0gdGhpcy5leHByLmNoYXJBdCh0aGlzLmluZGV4KyspO1xuXHRcdFx0Y2ggPSB0aGlzLmNoYXI7XG5cblx0XHRcdGlmIChjaCA9PT0gJysnIHx8IGNoID09PSAnLScpIHsgLy8gZXhwb25lbnQgc2lnblxuXHRcdFx0XHRudW1iZXIgKz0gdGhpcy5leHByLmNoYXJBdCh0aGlzLmluZGV4KyspO1xuXHRcdFx0fVxuXG5cdFx0XHR3aGlsZSAoSnNlcC5pc0RlY2ltYWxEaWdpdCh0aGlzLmNvZGUpKSB7IC8vIGV4cG9uZW50IGl0c2VsZlxuXHRcdFx0XHRudW1iZXIgKz0gdGhpcy5leHByLmNoYXJBdCh0aGlzLmluZGV4KyspO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIUpzZXAuaXNEZWNpbWFsRGlnaXQodGhpcy5leHByLmNoYXJDb2RlQXQodGhpcy5pbmRleCAtIDEpKSApIHtcblx0XHRcdFx0dGhpcy50aHJvd0Vycm9yKCdFeHBlY3RlZCBleHBvbmVudCAoJyArIG51bWJlciArIHRoaXMuY2hhciArICcpJyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y2hDb2RlID0gdGhpcy5jb2RlO1xuXG5cdFx0Ly8gQ2hlY2sgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJ3QgYSB2YXJpYWJsZSBuYW1lIHRoYXQgc3RhcnQgd2l0aCBhIG51bWJlciAoMTIzYWJjKVxuXHRcdGlmIChKc2VwLmlzSWRlbnRpZmllclN0YXJ0KGNoQ29kZSkpIHtcblx0XHRcdHRoaXMudGhyb3dFcnJvcignVmFyaWFibGUgbmFtZXMgY2Fubm90IHN0YXJ0IHdpdGggYSBudW1iZXIgKCcgK1xuXHRcdFx0XHRudW1iZXIgKyB0aGlzLmNoYXIgKyAnKScpO1xuXHRcdH1cblx0XHRlbHNlIGlmIChjaENvZGUgPT09IEpzZXAuUEVSSU9EX0NPREUgfHwgKG51bWJlci5sZW5ndGggPT09IDEgJiYgbnVtYmVyLmNoYXJDb2RlQXQoMCkgPT09IEpzZXAuUEVSSU9EX0NPREUpKSB7XG5cdFx0XHR0aGlzLnRocm93RXJyb3IoJ1VuZXhwZWN0ZWQgcGVyaW9kJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IEpzZXAuTElURVJBTCxcblx0XHRcdHZhbHVlOiBwYXJzZUZsb2F0KG51bWJlciksXG5cdFx0XHRyYXc6IG51bWJlclxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2VzIGEgc3RyaW5nIGxpdGVyYWwsIHN0YXJpbmcgd2l0aCBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcyB3aXRoIGJhc2ljIHN1cHBvcnQgZm9yIGVzY2FwZSBjb2Rlc1xuXHQgKiBlLmcuIGBcImhlbGxvIHdvcmxkXCJgLCBgJ3RoaXMgaXNcXG5KU0VQJ2Bcblx0ICogQHJldHVybnMge2pzZXAuTGl0ZXJhbH1cblx0ICovXG5cdGdvYmJsZVN0cmluZ0xpdGVyYWwoKSB7XG5cdFx0bGV0IHN0ciA9ICcnO1xuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLmluZGV4O1xuXHRcdGNvbnN0IHF1b3RlID0gdGhpcy5leHByLmNoYXJBdCh0aGlzLmluZGV4KyspO1xuXHRcdGxldCBjbG9zZWQgPSBmYWxzZTtcblxuXHRcdHdoaWxlICh0aGlzLmluZGV4IDwgdGhpcy5leHByLmxlbmd0aCkge1xuXHRcdFx0bGV0IGNoID0gdGhpcy5leHByLmNoYXJBdCh0aGlzLmluZGV4KyspO1xuXG5cdFx0XHRpZiAoY2ggPT09IHF1b3RlKSB7XG5cdFx0XHRcdGNsb3NlZCA9IHRydWU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoY2ggPT09ICdcXFxcJykge1xuXHRcdFx0XHQvLyBDaGVjayBmb3IgYWxsIG9mIHRoZSBjb21tb24gZXNjYXBlIGNvZGVzXG5cdFx0XHRcdGNoID0gdGhpcy5leHByLmNoYXJBdCh0aGlzLmluZGV4KyspO1xuXG5cdFx0XHRcdHN3aXRjaCAoY2gpIHtcblx0XHRcdFx0XHRjYXNlICduJzogc3RyICs9ICdcXG4nOyBicmVhaztcblx0XHRcdFx0XHRjYXNlICdyJzogc3RyICs9ICdcXHInOyBicmVhaztcblx0XHRcdFx0XHRjYXNlICd0Jzogc3RyICs9ICdcXHQnOyBicmVhaztcblx0XHRcdFx0XHRjYXNlICdiJzogc3RyICs9ICdcXGInOyBicmVhaztcblx0XHRcdFx0XHRjYXNlICdmJzogc3RyICs9ICdcXGYnOyBicmVhaztcblx0XHRcdFx0XHRjYXNlICd2Jzogc3RyICs9ICdcXHgwQic7IGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQgOiBzdHIgKz0gY2g7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRzdHIgKz0gY2g7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFjbG9zZWQpIHtcblx0XHRcdHRoaXMudGhyb3dFcnJvcignVW5jbG9zZWQgcXVvdGUgYWZ0ZXIgXCInICsgc3RyICsgJ1wiJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IEpzZXAuTElURVJBTCxcblx0XHRcdHZhbHVlOiBzdHIsXG5cdFx0XHRyYXc6IHRoaXMuZXhwci5zdWJzdHJpbmcoc3RhcnRJbmRleCwgdGhpcy5pbmRleCksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHb2JibGVzIG9ubHkgaWRlbnRpZmllcnNcblx0ICogZS5nLjogYGZvb2AsIGBfdmFsdWVgLCBgJHgxYFxuXHQgKiBBbHNvLCB0aGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGF0IGlkZW50aWZpZXIgaXMgYSBsaXRlcmFsOlxuXHQgKiAoZS5nLiBgdHJ1ZWAsIGBmYWxzZWAsIGBudWxsYCkgb3IgYHRoaXNgXG5cdCAqIEByZXR1cm5zIHtqc2VwLklkZW50aWZpZXJ9XG5cdCAqL1xuXHRnb2JibGVJZGVudGlmaWVyKCkge1xuXHRcdGxldCBjaCA9IHRoaXMuY29kZSwgc3RhcnQgPSB0aGlzLmluZGV4O1xuXG5cdFx0aWYgKEpzZXAuaXNJZGVudGlmaWVyU3RhcnQoY2gpKSB7XG5cdFx0XHR0aGlzLmluZGV4Kys7XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0dGhpcy50aHJvd0Vycm9yKCdVbmV4cGVjdGVkICcgKyB0aGlzLmNoYXIpO1xuXHRcdH1cblxuXHRcdHdoaWxlICh0aGlzLmluZGV4IDwgdGhpcy5leHByLmxlbmd0aCkge1xuXHRcdFx0Y2ggPSB0aGlzLmNvZGU7XG5cblx0XHRcdGlmIChKc2VwLmlzSWRlbnRpZmllclBhcnQoY2gpKSB7XG5cdFx0XHRcdHRoaXMuaW5kZXgrKztcblx0XHRcdH1cblx0XHRcdGVsc2Uge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdHR5cGU6IEpzZXAuSURFTlRJRklFUixcblx0XHRcdG5hbWU6IHRoaXMuZXhwci5zbGljZShzdGFydCwgdGhpcy5pbmRleCksXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHb2JibGVzIGEgbGlzdCBvZiBhcmd1bWVudHMgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgZnVuY3Rpb24gY2FsbFxuXHQgKiBvciBhcnJheSBsaXRlcmFsLiBUaGlzIGZ1bmN0aW9uIGFsc28gYXNzdW1lcyB0aGF0IHRoZSBvcGVuaW5nIGNoYXJhY3RlclxuXHQgKiBgKGAgb3IgYFtgIGhhcyBhbHJlYWR5IGJlZW4gZ29iYmxlZCwgYW5kIGdvYmJsZXMgZXhwcmVzc2lvbnMgYW5kIGNvbW1hc1xuXHQgKiB1bnRpbCB0aGUgdGVybWluYXRvciBjaGFyYWN0ZXIgYClgIG9yIGBdYCBpcyBlbmNvdW50ZXJlZC5cblx0ICogZS5nLiBgZm9vKGJhciwgYmF6KWAsIGBteV9mdW5jKClgLCBvciBgW2JhciwgYmF6XWBcblx0ICogQHBhcmFtIHtudW1iZXJ9IHRlcm1pbmF0aW9uXG5cdCAqIEByZXR1cm5zIHtqc2VwLkV4cHJlc3Npb25bXX1cblx0ICovXG5cdGdvYmJsZUFyZ3VtZW50cyh0ZXJtaW5hdGlvbikge1xuXHRcdGNvbnN0IGFyZ3MgPSBbXTtcblx0XHRsZXQgY2xvc2VkID0gZmFsc2U7XG5cdFx0bGV0IHNlcGFyYXRvcl9jb3VudCA9IDA7XG5cblx0XHR3aGlsZSAodGhpcy5pbmRleCA8IHRoaXMuZXhwci5sZW5ndGgpIHtcblx0XHRcdHRoaXMuZ29iYmxlU3BhY2VzKCk7XG5cdFx0XHRsZXQgY2hfaSA9IHRoaXMuY29kZTtcblxuXHRcdFx0aWYgKGNoX2kgPT09IHRlcm1pbmF0aW9uKSB7IC8vIGRvbmUgcGFyc2luZ1xuXHRcdFx0XHRjbG9zZWQgPSB0cnVlO1xuXHRcdFx0XHR0aGlzLmluZGV4Kys7XG5cblx0XHRcdFx0aWYgKHRlcm1pbmF0aW9uID09PSBKc2VwLkNQQVJFTl9DT0RFICYmIHNlcGFyYXRvcl9jb3VudCAmJiBzZXBhcmF0b3JfY291bnQgPj0gYXJncy5sZW5ndGgpe1xuXHRcdFx0XHRcdHRoaXMudGhyb3dFcnJvcignVW5leHBlY3RlZCB0b2tlbiAnICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0ZXJtaW5hdGlvbikpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChjaF9pID09PSBKc2VwLkNPTU1BX0NPREUpIHsgLy8gYmV0d2VlbiBleHByZXNzaW9uc1xuXHRcdFx0XHR0aGlzLmluZGV4Kys7XG5cdFx0XHRcdHNlcGFyYXRvcl9jb3VudCsrO1xuXG5cdFx0XHRcdGlmIChzZXBhcmF0b3JfY291bnQgIT09IGFyZ3MubGVuZ3RoKSB7IC8vIG1pc3NpbmcgYXJndW1lbnRcblx0XHRcdFx0XHRpZiAodGVybWluYXRpb24gPT09IEpzZXAuQ1BBUkVOX0NPREUpIHtcblx0XHRcdFx0XHRcdHRoaXMudGhyb3dFcnJvcignVW5leHBlY3RlZCB0b2tlbiAsJyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsc2UgaWYgKHRlcm1pbmF0aW9uID09PSBKc2VwLkNCUkFDS19DT0RFKSB7XG5cdFx0XHRcdFx0XHRmb3IgKGxldCBhcmcgPSBhcmdzLmxlbmd0aDsgYXJnIDwgc2VwYXJhdG9yX2NvdW50OyBhcmcrKykge1xuXHRcdFx0XHRcdFx0XHRhcmdzLnB1c2gobnVsbCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmIChhcmdzLmxlbmd0aCAhPT0gc2VwYXJhdG9yX2NvdW50ICYmIHNlcGFyYXRvcl9jb3VudCAhPT0gMCkge1xuXHRcdFx0XHQvLyBOT1RFOiBgJiYgc2VwYXJhdG9yX2NvdW50ICE9PSAwYCBhbGxvd3MgZm9yIGVpdGhlciBhbGwgY29tbWFzLCBvciBhbGwgc3BhY2VzIGFzIGFyZ3VtZW50c1xuXHRcdFx0XHR0aGlzLnRocm93RXJyb3IoJ0V4cGVjdGVkIGNvbW1hJyk7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0Y29uc3Qgbm9kZSA9IHRoaXMuZ29iYmxlRXhwcmVzc2lvbigpO1xuXG5cdFx0XHRcdGlmICghbm9kZSB8fCBub2RlLnR5cGUgPT09IEpzZXAuQ09NUE9VTkQpIHtcblx0XHRcdFx0XHR0aGlzLnRocm93RXJyb3IoJ0V4cGVjdGVkIGNvbW1hJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhcmdzLnB1c2gobm9kZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCFjbG9zZWQpIHtcblx0XHRcdHRoaXMudGhyb3dFcnJvcignRXhwZWN0ZWQgJyArIFN0cmluZy5mcm9tQ2hhckNvZGUodGVybWluYXRpb24pKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYXJncztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNwb25zaWJsZSBmb3IgcGFyc2luZyBhIGdyb3VwIG9mIHRoaW5ncyB3aXRoaW4gcGFyZW50aGVzZXMgYCgpYFxuXHQgKiB0aGF0IGhhdmUgbm8gaWRlbnRpZmllciBpbiBmcm9udCAoc28gbm90IGEgZnVuY3Rpb24gY2FsbClcblx0ICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgaXQgbmVlZHMgdG8gZ29iYmxlIHRoZSBvcGVuaW5nIHBhcmVudGhlc2lzXG5cdCAqIGFuZCB0aGVuIHRyaWVzIHRvIGdvYmJsZSBldmVyeXRoaW5nIHdpdGhpbiB0aGF0IHBhcmVudGhlc2lzLCBhc3N1bWluZ1xuXHQgKiB0aGF0IHRoZSBuZXh0IHRoaW5nIGl0IHNob3VsZCBzZWUgaXMgdGhlIGNsb3NlIHBhcmVudGhlc2lzLiBJZiBub3QsXG5cdCAqIHRoZW4gdGhlIGV4cHJlc3Npb24gcHJvYmFibHkgZG9lc24ndCBoYXZlIGEgYClgXG5cdCAqIEByZXR1cm5zIHtib29sZWFufGpzZXAuRXhwcmVzc2lvbn1cblx0ICovXG5cdGdvYmJsZUdyb3VwKCkge1xuXHRcdHRoaXMuaW5kZXgrKztcblx0XHRsZXQgbm9kZXMgPSB0aGlzLmdvYmJsZUV4cHJlc3Npb25zKEpzZXAuQ1BBUkVOX0NPREUpO1xuXHRcdGlmICh0aGlzLmNvZGUgPT09IEpzZXAuQ1BBUkVOX0NPREUpIHtcblx0XHRcdHRoaXMuaW5kZXgrKztcblx0XHRcdGlmIChub2Rlcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdFx0cmV0dXJuIG5vZGVzWzBdO1xuXHRcdFx0fVxuXHRcdFx0ZWxzZSBpZiAoIW5vZGVzLmxlbmd0aCkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHRlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHR0eXBlOiBKc2VwLlNFUVVFTkNFX0VYUCxcblx0XHRcdFx0XHRleHByZXNzaW9uczogbm9kZXMsXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGVsc2Uge1xuXHRcdFx0dGhpcy50aHJvd0Vycm9yKCdVbmNsb3NlZCAoJyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJlc3BvbnNpYmxlIGZvciBwYXJzaW5nIEFycmF5IGxpdGVyYWxzIGBbMSwgMiwgM11gXG5cdCAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IGl0IG5lZWRzIHRvIGdvYmJsZSB0aGUgb3BlbmluZyBicmFja2V0XG5cdCAqIGFuZCB0aGVuIHRyaWVzIHRvIGdvYmJsZSB0aGUgZXhwcmVzc2lvbnMgYXMgYXJndW1lbnRzLlxuXHQgKiBAcmV0dXJucyB7anNlcC5BcnJheUV4cHJlc3Npb259XG5cdCAqL1xuXHRnb2JibGVBcnJheSgpIHtcblx0XHR0aGlzLmluZGV4Kys7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0dHlwZTogSnNlcC5BUlJBWV9FWFAsXG5cdFx0XHRlbGVtZW50czogdGhpcy5nb2JibGVBcmd1bWVudHMoSnNlcC5DQlJBQ0tfQ09ERSlcblx0XHR9O1xuXHR9XG59XG5cbi8vIFN0YXRpYyBmaWVsZHM6XG5jb25zdCBob29rcyA9IG5ldyBIb29rcygpO1xuT2JqZWN0LmFzc2lnbihKc2VwLCB7XG5cdGhvb2tzLFxuXHRwbHVnaW5zOiBuZXcgUGx1Z2lucyhKc2VwKSxcblxuXHQvLyBOb2RlIFR5cGVzXG5cdC8vIC0tLS0tLS0tLS1cblx0Ly8gVGhpcyBpcyB0aGUgZnVsbCBzZXQgb2YgdHlwZXMgdGhhdCBhbnkgSlNFUCBub2RlIGNhbiBiZS5cblx0Ly8gU3RvcmUgdGhlbSBoZXJlIHRvIHNhdmUgc3BhY2Ugd2hlbiBtaW5pZmllZFxuXHRDT01QT1VORDogICAgICAgICdDb21wb3VuZCcsXG5cdFNFUVVFTkNFX0VYUDogICAgJ1NlcXVlbmNlRXhwcmVzc2lvbicsXG5cdElERU5USUZJRVI6ICAgICAgJ0lkZW50aWZpZXInLFxuXHRNRU1CRVJfRVhQOiAgICAgICdNZW1iZXJFeHByZXNzaW9uJyxcblx0TElURVJBTDogICAgICAgICAnTGl0ZXJhbCcsXG5cdFRISVNfRVhQOiAgICAgICAgJ1RoaXNFeHByZXNzaW9uJyxcblx0Q0FMTF9FWFA6ICAgICAgICAnQ2FsbEV4cHJlc3Npb24nLFxuXHRVTkFSWV9FWFA6ICAgICAgICdVbmFyeUV4cHJlc3Npb24nLFxuXHRCSU5BUllfRVhQOiAgICAgICdCaW5hcnlFeHByZXNzaW9uJyxcblx0QVJSQVlfRVhQOiAgICAgICAnQXJyYXlFeHByZXNzaW9uJyxcblxuXHRUQUJfQ09ERTogICAgOSxcblx0TEZfQ09ERTogICAgIDEwLFxuXHRDUl9DT0RFOiAgICAgMTMsXG5cdFNQQUNFX0NPREU6ICAzMixcblx0UEVSSU9EX0NPREU6IDQ2LCAvLyAnLidcblx0Q09NTUFfQ09ERTogIDQ0LCAvLyAnLCdcblx0U1FVT1RFX0NPREU6IDM5LCAvLyBzaW5nbGUgcXVvdGVcblx0RFFVT1RFX0NPREU6IDM0LCAvLyBkb3VibGUgcXVvdGVzXG5cdE9QQVJFTl9DT0RFOiA0MCwgLy8gKFxuXHRDUEFSRU5fQ09ERTogNDEsIC8vIClcblx0T0JSQUNLX0NPREU6IDkxLCAvLyBbXG5cdENCUkFDS19DT0RFOiA5MywgLy8gXVxuXHRRVU1BUktfQ09ERTogNjMsIC8vID9cblx0U0VNQ09MX0NPREU6IDU5LCAvLyA7XG5cdENPTE9OX0NPREU6ICA1OCwgLy8gOlxuXG5cblx0Ly8gT3BlcmF0aW9uc1xuXHQvLyAtLS0tLS0tLS0tXG5cdC8vIFVzZSBhIHF1aWNrbHktYWNjZXNzaWJsZSBtYXAgdG8gc3RvcmUgYWxsIG9mIHRoZSB1bmFyeSBvcGVyYXRvcnNcblx0Ly8gVmFsdWVzIGFyZSBzZXQgdG8gYDFgIChpdCByZWFsbHkgZG9lc24ndCBtYXR0ZXIpXG5cdHVuYXJ5X29wczoge1xuXHRcdCctJzogMSxcblx0XHQnISc6IDEsXG5cdFx0J34nOiAxLFxuXHRcdCcrJzogMVxuXHR9LFxuXG5cdC8vIEFsc28gdXNlIGEgbWFwIGZvciB0aGUgYmluYXJ5IG9wZXJhdGlvbnMgYnV0IHNldCB0aGVpciB2YWx1ZXMgdG8gdGhlaXJcblx0Ly8gYmluYXJ5IHByZWNlZGVuY2UgZm9yIHF1aWNrIHJlZmVyZW5jZSAoaGlnaGVyIG51bWJlciA9IGhpZ2hlciBwcmVjZWRlbmNlKVxuXHQvLyBzZWUgW09yZGVyIG9mIG9wZXJhdGlvbnNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL09wZXJhdG9ycy9PcGVyYXRvcl9QcmVjZWRlbmNlKVxuXHRiaW5hcnlfb3BzOiB7XG5cdFx0J3x8JzogMSwgJyYmJzogMiwgJ3wnOiAzLCAnXic6IDQsICcmJzogNSxcblx0XHQnPT0nOiA2LCAnIT0nOiA2LCAnPT09JzogNiwgJyE9PSc6IDYsXG5cdFx0JzwnOiA3LCAnPic6IDcsICc8PSc6IDcsICc+PSc6IDcsXG5cdFx0Jzw8JzogOCwgJz4+JzogOCwgJz4+Pic6IDgsXG5cdFx0JysnOiA5LCAnLSc6IDksXG5cdFx0JyonOiAxMCwgJy8nOiAxMCwgJyUnOiAxMFxuXHR9LFxuXG5cdC8vIHNldHMgc3BlY2lmaWMgYmluYXJ5X29wcyBhcyByaWdodC1hc3NvY2lhdGl2ZVxuXHRyaWdodF9hc3NvY2lhdGl2ZTogbmV3IFNldCgpLFxuXG5cdC8vIEFkZGl0aW9uYWwgdmFsaWQgaWRlbnRpZmllciBjaGFycywgYXBhcnQgZnJvbSBhLXosIEEtWiBhbmQgMC05IChleGNlcHQgb24gdGhlIHN0YXJ0aW5nIGNoYXIpXG5cdGFkZGl0aW9uYWxfaWRlbnRpZmllcl9jaGFyczogbmV3IFNldChbJyQnLCAnXyddKSxcblxuXHQvLyBMaXRlcmFsc1xuXHQvLyAtLS0tLS0tLS0tXG5cdC8vIFN0b3JlIHRoZSB2YWx1ZXMgdG8gcmV0dXJuIGZvciB0aGUgdmFyaW91cyBsaXRlcmFscyB3ZSBtYXkgZW5jb3VudGVyXG5cdGxpdGVyYWxzOiB7XG5cdFx0J3RydWUnOiB0cnVlLFxuXHRcdCdmYWxzZSc6IGZhbHNlLFxuXHRcdCdudWxsJzogbnVsbFxuXHR9LFxuXG5cdC8vIEV4Y2VwdCBmb3IgYHRoaXNgLCB3aGljaCBpcyBzcGVjaWFsLiBUaGlzIGNvdWxkIGJlIGNoYW5nZWQgdG8gc29tZXRoaW5nIGxpa2UgYCdzZWxmJ2AgYXMgd2VsbFxuXHR0aGlzX3N0cjogJ3RoaXMnLFxufSk7XG5Kc2VwLm1heF91bm9wX2xlbiA9IEpzZXAuZ2V0TWF4S2V5TGVuKEpzZXAudW5hcnlfb3BzKTtcbkpzZXAubWF4X2Jpbm9wX2xlbiA9IEpzZXAuZ2V0TWF4S2V5TGVuKEpzZXAuYmluYXJ5X29wcyk7XG5cbi8vIEJhY2t3YXJkIENvbXBhdGliaWxpdHk6XG5jb25zdCBqc2VwID0gZXhwciA9PiAobmV3IEpzZXAoZXhwcikpLnBhcnNlKCk7XG5jb25zdCBzdGF0aWNNZXRob2RzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoSnNlcCk7XG5zdGF0aWNNZXRob2RzXG5cdC5mb3JFYWNoKChtKSA9PiB7XG5cdFx0aWYgKGpzZXBbbV0gPT09IHVuZGVmaW5lZCAmJiBtICE9PSAncHJvdG90eXBlJykge1xuXHRcdFx0anNlcFttXSA9IEpzZXBbbV07XG5cdFx0fVxuXHR9KTtcbmpzZXAuSnNlcCA9IEpzZXA7IC8vIGFsbG93cyBmb3IgY29uc3QgeyBKc2VwIH0gPSByZXF1aXJlKCdqc2VwJyk7XG5cbmNvbnN0IENPTkRJVElPTkFMX0VYUCA9ICdDb25kaXRpb25hbEV4cHJlc3Npb24nO1xuXG52YXIgdGVybmFyeSA9IHtcblx0bmFtZTogJ3Rlcm5hcnknLFxuXG5cdGluaXQoanNlcCkge1xuXHRcdC8vIFRlcm5hcnkgZXhwcmVzc2lvbjogdGVzdCA/IGNvbnNlcXVlbnQgOiBhbHRlcm5hdGVcblx0XHRqc2VwLmhvb2tzLmFkZCgnYWZ0ZXItZXhwcmVzc2lvbicsIGZ1bmN0aW9uIGdvYmJsZVRlcm5hcnkoZW52KSB7XG5cdFx0XHRpZiAoZW52Lm5vZGUgJiYgdGhpcy5jb2RlID09PSBqc2VwLlFVTUFSS19DT0RFKSB7XG5cdFx0XHRcdHRoaXMuaW5kZXgrKztcblx0XHRcdFx0Y29uc3QgdGVzdCA9IGVudi5ub2RlO1xuXHRcdFx0XHRjb25zdCBjb25zZXF1ZW50ID0gdGhpcy5nb2JibGVFeHByZXNzaW9uKCk7XG5cblx0XHRcdFx0aWYgKCFjb25zZXF1ZW50KSB7XG5cdFx0XHRcdFx0dGhpcy50aHJvd0Vycm9yKCdFeHBlY3RlZCBleHByZXNzaW9uJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLmdvYmJsZVNwYWNlcygpO1xuXG5cdFx0XHRcdGlmICh0aGlzLmNvZGUgPT09IGpzZXAuQ09MT05fQ09ERSkge1xuXHRcdFx0XHRcdHRoaXMuaW5kZXgrKztcblx0XHRcdFx0XHRjb25zdCBhbHRlcm5hdGUgPSB0aGlzLmdvYmJsZUV4cHJlc3Npb24oKTtcblxuXHRcdFx0XHRcdGlmICghYWx0ZXJuYXRlKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRocm93RXJyb3IoJ0V4cGVjdGVkIGV4cHJlc3Npb24nKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZW52Lm5vZGUgPSB7XG5cdFx0XHRcdFx0XHR0eXBlOiBDT05ESVRJT05BTF9FWFAsXG5cdFx0XHRcdFx0XHR0ZXN0LFxuXHRcdFx0XHRcdFx0Y29uc2VxdWVudCxcblx0XHRcdFx0XHRcdGFsdGVybmF0ZSxcblx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0Ly8gY2hlY2sgZm9yIG9wZXJhdG9ycyBvZiBoaWdoZXIgcHJpb3JpdHkgdGhhbiB0ZXJuYXJ5IChpLmUuIGFzc2lnbm1lbnQpXG5cdFx0XHRcdFx0Ly8ganNlcCBzZXRzIHx8IGF0IDEsIGFuZCBhc3NpZ25tZW50IGF0IDAuOSwgYW5kIGNvbmRpdGlvbmFsIHNob3VsZCBiZSBiZXR3ZWVuIHRoZW1cblx0XHRcdFx0XHRpZiAodGVzdC5vcGVyYXRvciAmJiBqc2VwLmJpbmFyeV9vcHNbdGVzdC5vcGVyYXRvcl0gPD0gMC45KSB7XG5cdFx0XHRcdFx0XHRsZXQgbmV3VGVzdCA9IHRlc3Q7XG5cdFx0XHRcdFx0XHR3aGlsZSAobmV3VGVzdC5yaWdodC5vcGVyYXRvciAmJiBqc2VwLmJpbmFyeV9vcHNbbmV3VGVzdC5yaWdodC5vcGVyYXRvcl0gPD0gMC45KSB7XG5cdFx0XHRcdFx0XHRcdG5ld1Rlc3QgPSBuZXdUZXN0LnJpZ2h0O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0ZW52Lm5vZGUudGVzdCA9IG5ld1Rlc3QucmlnaHQ7XG5cdFx0XHRcdFx0XHRuZXdUZXN0LnJpZ2h0ID0gZW52Lm5vZGU7XG5cdFx0XHRcdFx0XHRlbnYubm9kZSA9IHRlc3Q7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMudGhyb3dFcnJvcignRXhwZWN0ZWQgOicpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0sXG59O1xuXG4vLyBBZGQgZGVmYXVsdCBwbHVnaW5zOlxuXG5qc2VwLnBsdWdpbnMucmVnaXN0ZXIodGVybmFyeSk7XG5cbmV4cG9ydCB7IEpzZXAsIGpzZXAgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IHsgUmVuZGVySW5mbywgRGF0YXNldCB9IGZyb20gXCIuL2RhdGFcIjtcbmltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgaXNNb21lbnQsIE1vbWVudCB9IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCAqIGFzIGhlbHBlciBmcm9tIFwiLi9oZWxwZXJcIjtcbmltcG9ydCBqc2VwIGZyb20gXCJqc2VwXCI7XG5pbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSBcInNwcmludGYtanNcIjtcblxuLy8gRnVuY3Rpb24gYWNjZXB0IGRhdGFzZXRJZCBhcyBmaXJzdCBhcmd1bWVudFxudHlwZSBGbkRhdGFzZXRUb1ZhbHVlID0gKFxuICAgIGRhdGFzZXQ6IERhdGFzZXQsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xuKSA9PiBudW1iZXIgfCBNb21lbnQgfCBzdHJpbmc7XG50eXBlIEZuRGF0YXNldFRvRGF0YXNldCA9IChcbiAgICBkYXRhc2V0OiBEYXRhc2V0LFxuICAgIGFyZ3M6IEFycmF5PG51bWJlciB8IERhdGFzZXQ+LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbikgPT4gRGF0YXNldCB8IHN0cmluZztcbnR5cGUgRm5VbmlyeU9wID0gKFxuICAgIHU6IG51bWJlciB8IE1vbWVudCB8IERhdGFzZXRcbikgPT4gbnVtYmVyIHwgTW9tZW50IHwgRGF0YXNldCB8IHN0cmluZztcbnR5cGUgRm5CaW5hcnlPcCA9IChcbiAgICBsOiBudW1iZXIgfCBNb21lbnQgfCBEYXRhc2V0LFxuICAgIHI6IG51bWJlciB8IE1vbWVudCB8IERhdGFzZXRcbikgPT4gbnVtYmVyIHwgTW9tZW50IHwgRGF0YXNldCB8IHN0cmluZztcblxuaW50ZXJmYWNlIEZuTWFwRGF0YXNldFRvVmFsdWUge1xuICAgIFtrZXk6IHN0cmluZ106IEZuRGF0YXNldFRvVmFsdWU7XG59XG5cbmludGVyZmFjZSBGbk1hcERhdGFzZXRUb0RhdGFzZXQge1xuICAgIFtrZXk6IHN0cmluZ106IEZuRGF0YXNldFRvRGF0YXNldDtcbn1cblxuaW50ZXJmYWNlIEZuTWFwQmluYXJ5T3Age1xuICAgIFtrZXk6IHN0cmluZ106IEZuQmluYXJ5T3A7XG59XG5cbmludGVyZmFjZSBGbk1hcFVuaXJ5T3Age1xuICAgIFtrZXk6IHN0cmluZ106IEZuVW5pcnlPcDtcbn1cblxuZnVuY3Rpb24gY2hlY2tEaXZpc29yKGRpdmlzb3I6IGFueSkge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiY2hlY2tpbmcgZGl2aW9yXCIpO1xuICAgIGlmICh0eXBlb2YgZGl2aXNvciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBpZiAoZGl2aXNvciA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoZGl2aXNvciBpbnN0YW5jZW9mIERhdGFzZXQpIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgZGl2aXNvci5nZXRWYWx1ZXMoKS5zb21lKGZ1bmN0aW9uICh2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHYgPT09IDA7XG4gICAgICAgICAgICB9KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gY2hlY2tCaW5hcnlPcGVyYW50VHlwZShsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpIHtcbiAgICBpZiAodHlwZW9mIGxlZnQgPT09IFwic3RyaW5nXCIpIHJldHVybiBsZWZ0O1xuICAgIGlmICh0eXBlb2YgcmlnaHQgPT09IFwic3RyaW5nXCIpIHJldHVybiByaWdodDtcbiAgICBpZiAoXG4gICAgICAgIHR5cGVvZiBsZWZ0ICE9PSBcIm51bWJlclwiICYmXG4gICAgICAgICF3aW5kb3cubW9tZW50LmlzTW9tZW50KGxlZnQpICYmXG4gICAgICAgICEobGVmdCBpbnN0YW5jZW9mIERhdGFzZXQpXG4gICAgKSB7XG4gICAgICAgIHJldHVybiBcIkVycm9yOiBpbnZhbGlkIG9wZXJhbnQgdHlwZVwiO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICAgIHR5cGVvZiByaWdodCAhPT0gXCJudW1iZXJcIiAmJlxuICAgICAgICAhd2luZG93Lm1vbWVudC5pc01vbWVudChyaWdodCkgJiZcbiAgICAgICAgIShyaWdodCBpbnN0YW5jZW9mIERhdGFzZXQpXG4gICAgKSB7XG4gICAgICAgIHJldHVybiBcIkVycm9yOiBpbnZhbGlkZSBvcGVyYW50IHR5cGVcIjtcbiAgICB9XG4gICAgcmV0dXJuIFwiXCI7XG59XG5cbmNvbnN0IGZuTWFwRGF0YXNldFRvVmFsdWU6IEZuTWFwRGF0YXNldFRvVmFsdWUgPSB7XG4gICAgLy8gbWluIHZhbHVlIG9mIGEgZGF0YXNldFxuICAgIG1pbjogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIG51bWJlclxuICAgICAgICByZXR1cm4gZDMubWluKGRhdGFzZXQuZ2V0VmFsdWVzKCkpO1xuICAgIH0sXG4gICAgLy8gdGhlIGxhdGVzdCBkYXRlIHdpdGggbWluIHZhbHVlXG4gICAgbWluRGF0ZTogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxuICAgICAgICBsZXQgbWluID0gZDMubWluKGRhdGFzZXQuZ2V0VmFsdWVzKCkpO1xuICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKG1pbikpIHtcbiAgICAgICAgICAgIGxldCBhcnJheURhdGFzZXQgPSBBcnJheS5mcm9tKGRhdGFzZXQpO1xuICAgICAgICAgICAgZm9yIChsZXQgZGF0YVBvaW50IG9mIGFycmF5RGF0YXNldC5yZXZlcnNlKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVBvaW50LnZhbHVlICE9PSBudWxsICYmIGRhdGFQb2ludC52YWx1ZSA9PT0gbWluKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhUG9pbnQuZGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IG1pbiBub3QgZm91bmRcIjtcbiAgICB9LFxuICAgIC8vIG1heCB2YWx1ZSBvZiBhIGRhdGFzZXRcbiAgICBtYXg6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcbiAgICAgICAgcmV0dXJuIGQzLm1heChkYXRhc2V0LmdldFZhbHVlcygpKTtcbiAgICB9LFxuICAgIC8vIHRoZSBsYXRlc3QgZGF0ZSB3aXRoIG1heCB2YWx1ZVxuICAgIG1heERhdGU6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBNb21lbnRcbiAgICAgICAgbGV0IG1heCA9IGQzLm1heChkYXRhc2V0LmdldFZhbHVlcygpKTtcbiAgICAgICAgaWYgKE51bWJlci5pc051bWJlcihtYXgpKSB7XG4gICAgICAgICAgICBsZXQgYXJyYXlEYXRhc2V0ID0gQXJyYXkuZnJvbShkYXRhc2V0KTtcbiAgICAgICAgICAgIGZvciAobGV0IGRhdGFQb2ludCBvZiBhcnJheURhdGFzZXQucmV2ZXJzZSgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGRhdGFQb2ludC52YWx1ZSAhPT0gbnVsbCAmJiBkYXRhUG9pbnQudmFsdWUgPT09IG1heCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVBvaW50LmRhdGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIkVycm9yOiBtYXggbm90IGZvdW5kXCI7XG4gICAgfSxcbiAgICAvLyBzdGFydCBkYXRlIG9mIGEgZGF0YXNldFxuICAgIC8vIGlmIGRhdGFzZXRJZCBub3QgZm91bmQsIHJldHVybiBvdmVyYWxsIHN0YXJ0RGF0ZVxuICAgIHN0YXJ0RGF0ZTogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgICAgbGV0IHN0YXJ0RGF0ZSA9IGRhdGFzZXQuZ2V0U3RhcnREYXRlKCk7XG4gICAgICAgICAgICBpZiAoc3RhcnREYXRlICYmIHN0YXJ0RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnREYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZW5kZXJJbmZvLnN0YXJ0RGF0ZTtcbiAgICB9LFxuICAgIC8vIGVuZCBkYXRlIG9mIGEgZGF0YXNldFxuICAgIC8vIGlmIGRhdGFzZXRJZCBub3QgZm91bmQsIHJldHVybiBvdmVyYWxsIGVuZERhdGVcbiAgICBlbmREYXRlOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gTW9tZW50XG4gICAgICAgIGlmIChkYXRhc2V0KSB7XG4gICAgICAgICAgICBsZXQgZW5kRGF0ZSA9IGRhdGFzZXQuZ2V0RW5kRGF0ZSgpO1xuICAgICAgICAgICAgaWYgKGVuZERhdGUgJiYgZW5kRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5kRGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVuZGVySW5mby5lbmREYXRlO1xuICAgIH0sXG4gICAgLy8gc3VtIG9mIGFsbCB2YWx1ZXMgaW4gYSBkYXRhc2V0XG4gICAgc3VtOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXG4gICAgICAgIHJldHVybiBkMy5zdW0oZGF0YXNldC5nZXRWYWx1ZXMoKSk7XG4gICAgfSxcbiAgICBjb3VudDogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGRlcHJlY2F0ZWQgZnVuY3Rpb24gJ2NvdW50J1wiO1xuICAgIH0sXG4gICAgLy8gbnVtYmVyIG9mIG9jY3VycmVuY2VzIG9mIGEgdGFyZ2V0IGluIGEgZGF0YXNldFxuICAgIG51bVRhcmdldHM6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcbiAgICAgICAgcmV0dXJuIGRhdGFzZXQuZ2V0TnVtVGFyZ2V0cygpO1xuICAgIH0sXG4gICAgZGF5czogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGRlcHJlY2F0ZWQgZnVuY3Rpb24gJ2RheXMnXCI7XG4gICAgfSxcbiAgICBudW1EYXlzOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXG4gICAgICAgIHJldHVybiBkYXRhc2V0LmdldExlbmd0aCgpO1xuICAgIH0sXG4gICAgbnVtRGF5c0hhdmluZ0RhdGE6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcbiAgICAgICAgcmV0dXJuIGRhdGFzZXQuZ2V0TGVuZ3RoTm90TnVsbCgpO1xuICAgIH0sXG4gICAgbWF4U3RyZWFrOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXG4gICAgICAgIGxldCBzdHJlYWsgPSAwO1xuICAgICAgICBsZXQgbWF4U3RyZWFrID0gMDtcbiAgICAgICAgZm9yIChsZXQgZGF0YVBvaW50IG9mIGRhdGFzZXQpIHtcbiAgICAgICAgICAgIGlmIChkYXRhUG9pbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBzdHJlYWsrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RyZWFrID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzdHJlYWsgPj0gbWF4U3RyZWFrKSB7XG4gICAgICAgICAgICAgICAgbWF4U3RyZWFrID0gc3RyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXhTdHJlYWs7XG4gICAgfSxcbiAgICBtYXhTdHJlYWtTdGFydDogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxuICAgICAgICBsZXQgc3RyZWFrID0gMDtcbiAgICAgICAgbGV0IG1heFN0cmVhayA9IDA7XG4gICAgICAgIGxldCBzdHJlYWtTdGFydDogTW9tZW50ID0gbnVsbDtcbiAgICAgICAgbGV0IG1heFN0cmVha1N0YXJ0OiBNb21lbnQgPSBudWxsO1xuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgICAgZm9yIChsZXQgZGF0YVBvaW50IG9mIGRhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVBvaW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYWsgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVha1N0YXJ0ID0gZGF0YVBvaW50LmRhdGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3RyZWFrKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFrID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0cmVhayA+PSBtYXhTdHJlYWspIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4U3RyZWFrID0gc3RyZWFrO1xuICAgICAgICAgICAgICAgICAgICBtYXhTdHJlYWtTdGFydCA9IHN0cmVha1N0YXJ0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4U3RyZWFrU3RhcnQ7XG4gICAgfSxcbiAgICBtYXhTdHJlYWtFbmQ6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBNb21lbnRcbiAgICAgICAgbGV0IHN0cmVhayA9IDA7XG4gICAgICAgIGxldCBtYXhTdHJlYWsgPSAwO1xuICAgICAgICBsZXQgc3RyZWFrRW5kOiBNb21lbnQgPSBudWxsO1xuICAgICAgICBsZXQgbWF4U3RyZWFrRW5kOiBNb21lbnQgPSBudWxsO1xuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgICAgbGV0IGFycmF5RGF0YXNldCA9IEFycmF5LmZyb20oZGF0YXNldCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBhcnJheURhdGFzZXQubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgICAgIGxldCBwb2ludCA9IGFycmF5RGF0YXNldFtpbmRdO1xuICAgICAgICAgICAgICAgIGxldCBuZXh0UG9pbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChpbmQgPCBhcnJheURhdGFzZXQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0UG9pbnQgPSBhcnJheURhdGFzZXRbaW5kICsgMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChwb2ludC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBzdHJlYWsrKztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFuZXh0UG9pbnQ/LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYWtFbmQgPSBwb2ludC5kYXRlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFrID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHN0cmVhayA+PSBtYXhTdHJlYWspIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc3RyZWFrKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobWF4U3RyZWFrKTtcbiAgICAgICAgICAgICAgICAgICAgbWF4U3RyZWFrID0gc3RyZWFrO1xuICAgICAgICAgICAgICAgICAgICBtYXhTdHJlYWtFbmQgPSBzdHJlYWtFbmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXhTdHJlYWtFbmQ7XG4gICAgfSxcbiAgICBtYXhCcmVha3M6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcbiAgICAgICAgbGV0IGJyZWFrcyA9IDA7XG4gICAgICAgIGxldCBtYXhCcmVha3MgPSAwO1xuICAgICAgICBmb3IgKGxldCBkYXRhUG9pbnQgb2YgZGF0YXNldCkge1xuICAgICAgICAgICAgaWYgKCFkYXRhUG9pbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBicmVha3MrKztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYnJlYWtzID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChicmVha3MgPiBtYXhCcmVha3MpIHtcbiAgICAgICAgICAgICAgICBtYXhCcmVha3MgPSBicmVha3M7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heEJyZWFrcztcbiAgICB9LFxuICAgIG1heEJyZWFrc1N0YXJ0OiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gTW9tZW50XG4gICAgICAgIGxldCBicmVha3MgPSAwO1xuICAgICAgICBsZXQgbWF4QnJlYWtzID0gMDtcbiAgICAgICAgbGV0IGJyZWFrc1N0YXJ0OiBNb21lbnQgPSBudWxsO1xuICAgICAgICBsZXQgbWF4QnJlYWtzU3RhcnQ6IE1vbWVudCA9IG51bGw7XG4gICAgICAgIGlmIChkYXRhc2V0KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBkYXRhUG9pbnQgb2YgZGF0YXNldCkge1xuICAgICAgICAgICAgICAgIGlmICghZGF0YVBvaW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChicmVha3MgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrc1N0YXJ0ID0gZGF0YVBvaW50LmRhdGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWtzKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGJyZWFrcyA+PSBtYXhCcmVha3MpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4QnJlYWtzID0gYnJlYWtzO1xuICAgICAgICAgICAgICAgICAgICBtYXhCcmVha3NTdGFydCA9IGJyZWFrc1N0YXJ0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4QnJlYWtzU3RhcnQ7XG4gICAgfSxcbiAgICBtYXhCcmVha3NFbmQ6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBNb21lbnRcbiAgICAgICAgbGV0IGJyZWFrcyA9IDA7XG4gICAgICAgIGxldCBtYXhCcmVha3MgPSAwO1xuICAgICAgICBsZXQgYnJlYWtzRW5kOiBNb21lbnQgPSBudWxsO1xuICAgICAgICBsZXQgbWF4QnJlYWtzRW5kOiBNb21lbnQgPSBudWxsO1xuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgICAgbGV0IGFycmF5RGF0YXNldCA9IEFycmF5LmZyb20oZGF0YXNldCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBhcnJheURhdGFzZXQubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgICAgIGxldCBwb2ludCA9IGFycmF5RGF0YXNldFtpbmRdO1xuICAgICAgICAgICAgICAgIGxldCBuZXh0UG9pbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChpbmQgPCBhcnJheURhdGFzZXQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0UG9pbnQgPSBhcnJheURhdGFzZXRbaW5kICsgMV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghcG9pbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtzKys7XG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0UG9pbnQ/LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha3NFbmQgPSBwb2ludC5kYXRlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGJyZWFrcyA+PSBtYXhCcmVha3MpIHtcbiAgICAgICAgICAgICAgICAgICAgbWF4QnJlYWtzID0gYnJlYWtzO1xuICAgICAgICAgICAgICAgICAgICBtYXhCcmVha3NFbmQgPSBicmVha3NFbmQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXhCcmVha3NFbmQ7XG4gICAgfSxcbiAgICBsYXN0U3RyZWFrOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICByZXR1cm4gXCJFcnJvcjogZGVwcmVjYXRlZCBmdW5jdGlvbiAnbGFzdFN0cmVhaydcIjtcbiAgICB9LFxuICAgIGN1cnJlbnRTdHJlYWs6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcbiAgICAgICAgbGV0IGN1cnJlbnRTdHJlYWsgPSAwO1xuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgICAgbGV0IGFycmF5RGF0YXNldCA9IEFycmF5LmZyb20oZGF0YXNldCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSBhcnJheURhdGFzZXQubGVuZ3RoIC0gMTsgaW5kID49IDA7IGluZC0tKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBvaW50ID0gYXJyYXlEYXRhc2V0W2luZF07XG4gICAgICAgICAgICAgICAgaWYgKCFwb2ludC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyZWFrKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyZW50U3RyZWFrO1xuICAgIH0sXG4gICAgY3VycmVudFN0cmVha1N0YXJ0OiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gTW9tZW50XG4gICAgICAgIGxldCBjdXJyZW50U3RyZWFrID0gMDtcbiAgICAgICAgbGV0IGN1cnJlbnRTdHJlYWtTdGFydDogTW9tZW50ID0gbnVsbDtcbiAgICAgICAgaWYgKGRhdGFzZXQpIHtcbiAgICAgICAgICAgIGxldCBhcnJheURhdGFzZXQgPSBBcnJheS5mcm9tKGRhdGFzZXQpO1xuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gYXJyYXlEYXRhc2V0Lmxlbmd0aCAtIDE7IGluZCA+PSAwOyBpbmQtLSkge1xuICAgICAgICAgICAgICAgIGxldCBwb2ludCA9IGFycmF5RGF0YXNldFtpbmRdO1xuICAgICAgICAgICAgICAgIGlmIChpbmQgPCBhcnJheURhdGFzZXQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyZWFrU3RhcnQgPSBhcnJheURhdGFzZXRbaW5kICsgMV0uZGF0ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFwb2ludC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyZWFrKys7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnRTdHJlYWtTdGFydCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGFic2Vuc2VcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3VycmVudFN0cmVha1N0YXJ0O1xuICAgIH0sXG4gICAgY3VycmVudFN0cmVha0VuZDogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxuICAgICAgICBsZXQgY3VycmVudFN0cmVhayA9IDA7XG4gICAgICAgIGxldCBjdXJyZW50U3RyZWFrRW5kOiBNb21lbnQgPSBudWxsO1xuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgICAgbGV0IGFycmF5RGF0YXNldCA9IEFycmF5LmZyb20oZGF0YXNldCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSBhcnJheURhdGFzZXQubGVuZ3RoIC0gMTsgaW5kID49IDA7IGluZC0tKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBvaW50ID0gYXJyYXlEYXRhc2V0W2luZF07XG4gICAgICAgICAgICAgICAgaWYgKCFwb2ludC52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudFN0cmVhayA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0cmVha0VuZCA9IHBvaW50LmRhdGU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFN0cmVhaysrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjdXJyZW50U3RyZWFrRW5kID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogYWJzZW5zZVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyZW50U3RyZWFrRW5kO1xuICAgIH0sXG4gICAgY3VycmVudEJyZWFrczogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIG51bWJlclxuICAgICAgICBsZXQgY3VycmVudEJyZWFrcyA9IDA7XG4gICAgICAgIGlmIChkYXRhc2V0KSB7XG4gICAgICAgICAgICBsZXQgYXJyYXlEYXRhc2V0ID0gQXJyYXkuZnJvbShkYXRhc2V0KTtcbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IGFycmF5RGF0YXNldC5sZW5ndGggLSAxOyBpbmQgPj0gMDsgaW5kLS0pIHtcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnQgPSBhcnJheURhdGFzZXRbaW5kXTtcbiAgICAgICAgICAgICAgICBpZiAoIXBvaW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCcmVha3MrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRCcmVha3M7XG4gICAgfSxcbiAgICBjdXJyZW50QnJlYWtzU3RhcnQ6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIHJldHVybiBNb21lbnRcbiAgICAgICAgbGV0IGN1cnJlbnRCcmVha3MgPSAwO1xuICAgICAgICBsZXQgY3VycmVudEJyZWFrc1N0YXJ0OiBNb21lbnQgPSBudWxsO1xuICAgICAgICBpZiAoZGF0YXNldCkge1xuICAgICAgICAgICAgbGV0IGFycmF5RGF0YXNldCA9IEFycmF5LmZyb20oZGF0YXNldCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSBhcnJheURhdGFzZXQubGVuZ3RoIC0gMTsgaW5kID49IDA7IGluZC0tKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBvaW50ID0gYXJyYXlEYXRhc2V0W2luZF07XG4gICAgICAgICAgICAgICAgaWYgKGluZCA8IGFycmF5RGF0YXNldC5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCcmVha3NTdGFydCA9IGFycmF5RGF0YXNldFtpbmQgKyAxXS5kYXRlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIXBvaW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCcmVha3MrKztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY3VycmVudEJyZWFrc1N0YXJ0ID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogYWJzZW5zZVwiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjdXJyZW50QnJlYWtzU3RhcnQ7XG4gICAgfSxcbiAgICBjdXJyZW50QnJlYWtzRW5kOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gTW9tZW50XG4gICAgICAgIGxldCBjdXJyZW50QnJlYWtzID0gMDtcbiAgICAgICAgbGV0IGN1cnJlbnRCcmVha3NFbmQ6IE1vbWVudCA9IG51bGw7XG4gICAgICAgIGlmIChkYXRhc2V0KSB7XG4gICAgICAgICAgICBsZXQgYXJyYXlEYXRhc2V0ID0gQXJyYXkuZnJvbShkYXRhc2V0KTtcbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IGFycmF5RGF0YXNldC5sZW5ndGggLSAxOyBpbmQgPj0gMDsgaW5kLS0pIHtcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnQgPSBhcnJheURhdGFzZXRbaW5kXTtcbiAgICAgICAgICAgICAgICBpZiAoIXBvaW50LnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QnJlYWtzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50QnJlYWtzRW5kID0gcG9pbnQuZGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50QnJlYWtzKys7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGN1cnJlbnRCcmVha3NFbmQgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBcIkVycm9yOiBhYnNlbnNlXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGN1cnJlbnRCcmVha3NFbmQ7XG4gICAgfSxcbiAgICBhdmVyYWdlOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXG4gICAgICAgIGxldCBjb3VudE5vdE51bGwgPSBkYXRhc2V0LmdldExlbmd0aE5vdE51bGwoKTtcbiAgICAgICAgaWYgKCFjaGVja0Rpdmlzb3IoY291bnROb3ROdWxsKSkge1xuICAgICAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGRpdmlkZSBieSB6ZXJvIGluIGV4cHJlc3Npb25cIjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3VtID0gZDMuc3VtKGRhdGFzZXQuZ2V0VmFsdWVzKCkpO1xuICAgICAgICByZXR1cm4gc3VtIC8gY291bnROb3ROdWxsO1xuICAgIH0sXG4gICAgbWVkaWFuOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXG4gICAgICAgIHJldHVybiBkMy5tZWRpYW4oZGF0YXNldC5nZXRWYWx1ZXMoKSk7XG4gICAgfSxcbiAgICB2YXJpYW5jZTogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcbiAgICAgICAgLy8gcmV0dXJuIG51bWJlclxuICAgICAgICByZXR1cm4gZDMudmFyaWFuY2UoZGF0YXNldC5nZXRWYWx1ZXMoKSk7XG4gICAgfSxcbn07XG5cbmNvbnN0IGZuTWFwVW5pcnlPcDogRm5NYXBVbmlyeU9wID0ge1xuICAgIFwiLVwiOiBmdW5jdGlvbiAodSkge1xuICAgICAgICBpZiAodHlwZW9mIHUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiAtMSAqIHU7XG4gICAgICAgIH0gZWxzZSBpZiAodSBpbnN0YW5jZW9mIERhdGFzZXQpIHtcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gdS5jbG9uZVRvVG1wRGF0YXNldCgpO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSAtMSAqIHZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IHVua25vd24gb3BlcmF0aW9uIGZvciAnLSdcIjtcbiAgICB9LFxuICAgIFwiK1wiOiBmdW5jdGlvbiAodSkge1xuICAgICAgICBpZiAodHlwZW9mIHUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB1O1xuICAgICAgICB9IGVsc2UgaWYgKHUgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IHUuY2xvbmVUb1RtcERhdGFzZXQoKTtcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIkVycm9yOiB1bmtub3duIG9wZXJhdGlvbiBmb3IgJysnXCI7XG4gICAgfSxcbn07XG5cbmNvbnN0IGZuTWFwQmluYXJ5T3A6IEZuTWFwQmluYXJ5T3AgPSB7XG4gICAgXCIrXCI6IGZ1bmN0aW9uIChsLCByKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbCA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgLy8gcmV0dXJuIG51bWJlclxuICAgICAgICAgICAgcmV0dXJuIGwgKyByO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHIgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSByLmNsb25lVG9UbXBEYXRhc2V0KCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IGwgKyB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAobCBpbnN0YW5jZW9mIERhdGFzZXQgJiYgdHlwZW9mIHIgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IGwuY2xvbmVUb1RtcERhdGFzZXQoKTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWUgKyByO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiByIGluc3RhbmNlb2YgRGF0YXNldCkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gbC5jbG9uZVRvVG1wRGF0YXNldCgpO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZSArIHIuZ2V0VmFsdWVzKClbaW5kZXhdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJFcnJvcjogdW5rbm93biBvcGVyYXRpb24gZm9yICcrJ1wiO1xuICAgIH0sXG4gICAgXCItXCI6IGZ1bmN0aW9uIChsLCByKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbCA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgLy8gcmV0dXJuIG51bWJlclxuICAgICAgICAgICAgcmV0dXJuIGwgLSByO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHIgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSByLmNsb25lVG9UbXBEYXRhc2V0KCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IGwgLSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAobCBpbnN0YW5jZW9mIERhdGFzZXQgJiYgdHlwZW9mIHIgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IGwuY2xvbmVUb1RtcERhdGFzZXQoKTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWUgLSByO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiByIGluc3RhbmNlb2YgRGF0YXNldCkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gbC5jbG9uZVRvVG1wRGF0YXNldCgpO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZSAtIHIuZ2V0VmFsdWVzKClbaW5kZXhdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJFcnJvcjogdW5rbm93biBvcGVyYXRpb24gZm9yICctJ1wiO1xuICAgIH0sXG4gICAgXCIqXCI6IGZ1bmN0aW9uIChsLCByKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbCA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgLy8gcmV0dXJuIG51bWJlclxuICAgICAgICAgICAgcmV0dXJuIGwgKiByO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHIgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSByLmNsb25lVG9UbXBEYXRhc2V0KCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IGwgKiB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAobCBpbnN0YW5jZW9mIERhdGFzZXQgJiYgdHlwZW9mIHIgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IGwuY2xvbmVUb1RtcERhdGFzZXQoKTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWUgKiByO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiByIGluc3RhbmNlb2YgRGF0YXNldCkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gbC5jbG9uZVRvVG1wRGF0YXNldCgpO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZSAqIHIuZ2V0VmFsdWVzKClbaW5kZXhdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJFcnJvcjogdW5rbm93biBvcGVyYXRpb24gZm9yICcqJ1wiO1xuICAgIH0sXG4gICAgXCIvXCI6IGZ1bmN0aW9uIChsLCByKSB7XG4gICAgICAgIGlmICghY2hlY2tEaXZpc29yKHIpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogZGl2aWRlIGJ5IHplcm8gaW4gZXhwcmVzc2lvblwiO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbCA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgLy8gcmV0dXJuIG51bWJlclxuICAgICAgICAgICAgcmV0dXJuIGwgLyByO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHIgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSByLmNsb25lVG9UbXBEYXRhc2V0KCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IGwgLyB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAobCBpbnN0YW5jZW9mIERhdGFzZXQgJiYgdHlwZW9mIHIgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IGwuY2xvbmVUb1RtcERhdGFzZXQoKTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWUgLyByO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiByIGluc3RhbmNlb2YgRGF0YXNldCkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gbC5jbG9uZVRvVG1wRGF0YXNldCgpO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZSAvIHIuZ2V0VmFsdWVzKClbaW5kZXhdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJFcnJvcjogdW5rbm93biBvcGVyYXRpb24gZm9yICcvJ1wiO1xuICAgIH0sXG4gICAgXCIlXCI6IGZ1bmN0aW9uIChsLCByKSB7XG4gICAgICAgIGlmICghY2hlY2tEaXZpc29yKHIpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogZGl2aWRlIGJ5IHplcm8gaW4gZXhwcmVzc2lvblwiO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgbCA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgLy8gcmV0dXJuIG51bWJlclxuICAgICAgICAgICAgcmV0dXJuIGwgJSByO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHIgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSByLmNsb25lVG9UbXBEYXRhc2V0KCk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IGwgJSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAobCBpbnN0YW5jZW9mIERhdGFzZXQgJiYgdHlwZW9mIHIgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IGwuY2xvbmVUb1RtcERhdGFzZXQoKTtcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWUgJSByO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiByIGluc3RhbmNlb2YgRGF0YXNldCkge1xuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gbC5jbG9uZVRvVG1wRGF0YXNldCgpO1xuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZSAlIHIuZ2V0VmFsdWVzKClbaW5kZXhdO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gXCJFcnJvcjogdW5rbm93biBvcGVyYXRpb24gZm9yICclJ1wiO1xuICAgIH0sXG59O1xuXG5jb25zdCBmbk1hcERhdGFzZXRUb0RhdGFzZXQ6IEZuTWFwRGF0YXNldFRvRGF0YXNldCA9IHtcbiAgICAvLyBtaW4gdmFsdWUgb2YgYSBkYXRhc2V0XG4gICAgbm9ybWFsaXplOiBmdW5jdGlvbiAoZGF0YXNldCwgYXJncywgcmVuZGVySW5mbykge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIm5vcm1hbGl6ZVwiKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZGF0YXNldCk7XG4gICAgICAgIGxldCB5TWluID0gZGF0YXNldC5nZXRZTWluKCk7XG4gICAgICAgIGxldCB5TWF4ID0gZGF0YXNldC5nZXRZTWF4KCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGB5TWluL3lNYXg6ICR7eU1pbn0vJHt5TWF4fWApO1xuICAgICAgICBpZiAoeU1pbiAhPT0gbnVsbCAmJiB5TWF4ICE9PSBudWxsICYmIHlNYXggPiB5TWluKSB7XG4gICAgICAgICAgICBsZXQgbm9ybWFsaXplZCA9IGRhdGFzZXQuY2xvbmVUb1RtcERhdGFzZXQoKTtcbiAgICAgICAgICAgIG5vcm1hbGl6ZWQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9ICh2YWx1ZSAtIHlNaW4pIC8gKHlNYXggLSB5TWluKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbm9ybWFsaXplZC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xuICAgICAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGludmFsaWQgZGF0YSByYW5nZSBmb3IgZnVuY3Rpb24gJ25vcm1hbGl6ZSdcIjtcbiAgICB9LFxuICAgIHNldE1pc3NpbmdWYWx1ZXM6IGZ1bmN0aW9uIChkYXRhc2V0LCBhcmdzLCByZW5kZXJJbmZvKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwic2V0TWlzc2luZ1ZhbHVlc1wiKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZGF0YXNldCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGFyZ3MpO1xuICAgICAgICBpZiAoYXJncyAmJiBhcmdzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGxldCBtaXNzaW5nVmFsdWUgPSBhcmdzWzBdO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobWlzc2luZ1ZhbHVlKTtcbiAgICAgICAgICAgIGxldCBuZXdEYXRhc2V0ID0gZGF0YXNldC5jbG9uZVRvVG1wRGF0YXNldCgpO1xuICAgICAgICAgICAgaWYgKE51bWJlci5pc051bWJlcihtaXNzaW5nVmFsdWUpICYmICFOdW1iZXIuaXNOYU4obWlzc2luZ1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgIG5ld0RhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG1pc3NpbmdWYWx1ZSBhcyBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBuZXdEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld0RhdGFzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogaW52YWxpZCBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uICdzZXRNaXNzaW5nVmFsdWVzJ1wiO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBcIkVycm9yOiBpbnZhbGlkIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gJ3NldE1pc3NpbmdWYWx1ZXNcIjtcbiAgICB9LFxufTtcblxuZnVuY3Rpb24gZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkOiBudW1iZXIsIHJlbmRlckluZm86IFJlbmRlckluZm8pIHtcbiAgICByZXR1cm4gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpO1xufVxuXG5mdW5jdGlvbiBldmFsdWF0ZUFycmF5KGFycjogYW55LCByZW5kZXJJbmZvOiBSZW5kZXJJbmZvKSB7XG4gICAgcmV0dXJuIGFyci5tYXAoZnVuY3Rpb24gKGV4cHI6IGpzZXAuRXhwcmVzc2lvbikge1xuICAgICAgICByZXR1cm4gZXZhbHVhdGUoZXhwciwgcmVuZGVySW5mbyk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGV2YWx1YXRlKGV4cHI6IGpzZXAuRXhwcmVzc2lvbiwgcmVuZGVySW5mbzogUmVuZGVySW5mbyk6IGFueSB7XG4gICAgLy8gY29uc29sZS5sb2coZXhwcik7XG5cbiAgICBzd2l0Y2ggKGV4cHIudHlwZSkge1xuICAgICAgICBjYXNlIFwiTGl0ZXJhbFwiOlxuICAgICAgICAgICAgbGV0IGxpdGVyYWxFeHByID0gZXhwciBhcyBqc2VwLkxpdGVyYWw7XG4gICAgICAgICAgICByZXR1cm4gbGl0ZXJhbEV4cHIudmFsdWU7IC8vIHN0cmluZywgbnVtYmVyLCBib29sZWFuXG5cbiAgICAgICAgY2FzZSBcIklkZW50aWZpZXJcIjpcbiAgICAgICAgICAgIGxldCBpZGVudGlmaWVyRXhwciA9IGV4cHIgYXMganNlcC5JZGVudGlmaWVyO1xuICAgICAgICAgICAgbGV0IGlkZW50aWZpZXJOYW1lID0gaWRlbnRpZmllckV4cHIubmFtZTtcbiAgICAgICAgICAgIGlmIChpZGVudGlmaWVyTmFtZSBpbiBmbk1hcERhdGFzZXRUb1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGBFcnJvcjogZGVwcmVjYXRlZCB0ZW1wbGF0ZSB2YXJpYWJsZSAnJHtpZGVudGlmaWVyTmFtZX0nLCB1c2UgJyR7aWRlbnRpZmllck5hbWV9KCknIGluc3RlYWRgO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpZGVudGlmaWVyTmFtZSBpbiBmbk1hcERhdGFzZXRUb0RhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYEVycm9yOiBkZXByZWNhdGVkIHRlbXBsYXRlIHZhcmlhYmxlICcke2lkZW50aWZpZXJOYW1lfScsIHVzZSAnJHtpZGVudGlmaWVyTmFtZX0oKScgaW5zdGVhZGA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYEVycm9yOiB1bmtub3duIGZ1bmN0aW9uIG5hbWUgJyR7aWRlbnRpZmllck5hbWV9J2A7XG5cbiAgICAgICAgY2FzZSBcIlVuYXJ5RXhwcmVzc2lvblwiOlxuICAgICAgICAgICAgbGV0IHVuaXJ5RXhwciA9IGV4cHIgYXMganNlcC5VbmFyeUV4cHJlc3Npb247XG4gICAgICAgICAgICBsZXQgcmV0VW5pcnlBcmcgPSBldmFsdWF0ZSh1bmlyeUV4cHIuYXJndW1lbnQsIHJlbmRlckluZm8pO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZXRVbmlyeUFyZyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXRVbmlyeUFyZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmbk1hcFVuaXJ5T3BbdW5pcnlFeHByLm9wZXJhdG9yXShyZXRVbmlyeUFyZyk7XG5cbiAgICAgICAgY2FzZSBcIkJpbmFyeUV4cHJlc3Npb25cIjpcbiAgICAgICAgICAgIGxldCBiaW5hcnlFeHByID0gZXhwciBhcyBqc2VwLkJpbmFyeUV4cHJlc3Npb247XG4gICAgICAgICAgICBsZXQgbGVmdFZhbHVlID0gZXZhbHVhdGUoYmluYXJ5RXhwci5sZWZ0LCByZW5kZXJJbmZvKTtcbiAgICAgICAgICAgIGxldCByaWdodFZhbHVlID0gZXZhbHVhdGUoYmluYXJ5RXhwci5yaWdodCwgcmVuZGVySW5mbyk7XG4gICAgICAgICAgICBsZXQgcmV0Q2hlY2sgPSBjaGVja0JpbmFyeU9wZXJhbnRUeXBlKGxlZnRWYWx1ZSwgcmlnaHRWYWx1ZSk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHJldENoZWNrID09PSBcInN0cmluZ1wiICYmIHJldENoZWNrLnN0YXJ0c1dpdGgoXCJFcnJvcjpcIikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV0Q2hlY2s7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm5NYXBCaW5hcnlPcFtiaW5hcnlFeHByLm9wZXJhdG9yXShsZWZ0VmFsdWUsIHJpZ2h0VmFsdWUpO1xuXG4gICAgICAgIGNhc2UgXCJDYWxsRXhwcmVzc2lvblwiOlxuICAgICAgICAgICAgbGV0IGNhbGxFeHByID0gZXhwciBhcyBqc2VwLkNhbGxFeHByZXNzaW9uO1xuXG4gICAgICAgICAgICBsZXQgY2FsbGVlSWRlbnRpZmllciA9IGNhbGxFeHByLmNhbGxlZSBhcyBqc2VwLklkZW50aWZpZXI7XG4gICAgICAgICAgICBsZXQgZm5OYW1lID0gY2FsbGVlSWRlbnRpZmllci5uYW1lO1xuICAgICAgICAgICAgbGV0IGFyZ3MgPSBjYWxsRXhwci5hcmd1bWVudHM7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhmbk5hbWUpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYXJncyk7XG4gICAgICAgICAgICBsZXQgZXZhbHVhdGVkQXJncyA9IGV2YWx1YXRlQXJyYXkoYXJncywgcmVuZGVySW5mbyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGV2YWx1YXRlZEFyZ3MgPT09IFwic3RyaW5nXCIpIHJldHVybiBldmFsdWF0ZWRBcmdzO1xuXG4gICAgICAgICAgICAvLyBmdW5jdGlvbiBkYXRhc2V0IGFjY2VwdCBvbmx5IG9uZSBhcmcgaW4gbnVtYmVyXG4gICAgICAgICAgICBpZiAoZm5OYW1lID09PSBcImRhdGFzZXRcIikge1xuICAgICAgICAgICAgICAgIGlmIChldmFsdWF0ZWRBcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgYXJnID0gZXZhbHVhdGVkQXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCIpIHJldHVybiBhcmc7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnICE9PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogZnVuY3Rpb24gJ2RhdGFzZXQnIG9ubHkgYWNjZXB0cyBpZCBpbiBudW1iZXJcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YXNldCA9IGdldERhdGFzZXRCeUlkKGFyZywgcmVuZGVySW5mbyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YXNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBFcnJvcjogbm8gZGF0YXNldCBmb3VuZCBmb3IgaWQgJyR7YXJnfSdgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhc2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGZuRGF0YXNldCBhY2NlcHQgb25seSBvbmUgYXJnIGluIG51bWJlciBvciBEYXRhc2V0XG4gICAgICAgICAgICBlbHNlIGlmIChmbk5hbWUgaW4gZm5NYXBEYXRhc2V0VG9WYWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChldmFsdWF0ZWRBcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBVc2UgZmlyc3Qgbm9uLVggZGF0YXNldFxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YXNldCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGRzIG9mIHJlbmRlckluZm8uZGF0YXNldHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGF0YXNldCAmJiAhZHMuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQgPSBkcztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBicmVha3MgaGVyZSwgdGhlIGluZGV4IG9mIERhdGFzZXRzIG5vdCByZXNldD8/P1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YXNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBObyBhdmFpbGFibGUgZGF0YXNldCBmb3VuZCBmb3IgZnVuY3Rpb24gJHtmbk5hbWV9YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5NYXBEYXRhc2V0VG9WYWx1ZVtmbk5hbWVdKGRhdGFzZXQsIHJlbmRlckluZm8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoZXZhbHVhdGVkQXJncy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFyZyA9IGV2YWx1YXRlZEFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJnO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXJnIGluc3RhbmNlb2YgRGF0YXNldCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuTWFwRGF0YXNldFRvVmFsdWVbZm5OYW1lXShhcmcsIHJlbmRlckluZm8pO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGBFcnJvcjogZnVuY3Rpb24gJyR7Zm5OYW1lfScgb25seSBhY2NlcHRzIERhdGFzZXRgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBgRXJyb3I6IFRvbyBtYW55IGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gJHtmbk5hbWV9YDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm5OYW1lIGluIGZuTWFwRGF0YXNldFRvRGF0YXNldCkge1xuICAgICAgICAgICAgICAgIGlmIChldmFsdWF0ZWRBcmdzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGV2YWx1YXRlZEFyZ3NbMF0gPT09IFwic3RyaW5nXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZhbHVhdGVkQXJnc1swXTsgLy8gZXJyb3IgbWVzc2FnZVxuICAgICAgICAgICAgICAgICAgICBpZiAoZXZhbHVhdGVkQXJnc1swXSBpbnN0YW5jZW9mIERhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhc2V0ID0gZXZhbHVhdGVkQXJnc1swXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbk1hcERhdGFzZXRUb0RhdGFzZXRbZm5OYW1lXShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgRXJyb3I6IGZ1bmN0aW9uICR7Zm5OYW1lfSBvbmx5IGFjY2VwdCBEYXRhc2V0YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZXZhbHVhdGVkQXJncy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZXZhbHVhdGVkQXJnc1swXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV2YWx1YXRlZEFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2YWx1YXRlZEFyZ3NbMF0gaW5zdGFuY2VvZiBEYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YXNldCA9IGV2YWx1YXRlZEFyZ3NbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5NYXBEYXRhc2V0VG9EYXRhc2V0W2ZuTmFtZV0oXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsdWF0ZWRBcmdzLmZpbHRlcihmdW5jdGlvbiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhbnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycjogYW55XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleCA+IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgRXJyb3I6IGZ1bmN0aW9uICR7Zm5OYW1lfSBvbmx5IGFjY2VwdCBEYXRhc2V0YDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYEVycm9yOiBUb28gbWFueSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uICR7Zm5OYW1lfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYEVycm9yOiB1bmtub3duIGZ1bmN0aW9uIG5hbWUgJyR7Zm5OYW1lfSdgO1xuICAgIH1cbiAgICByZXR1cm4gXCJFcnJvcjogdW5rbm93biBleHByZXNzaW9uXCI7XG59XG5cbmludGVyZmFjZSBFeHByUmVzb2x2ZWQge1xuICAgIHNvdXJjZTogc3RyaW5nO1xuICAgIHZhbHVlOiBudW1iZXIgfCBNb21lbnQ7XG4gICAgZm9ybWF0OiBzdHJpbmc7XG59XG5cbi8vIEdldCBhIGxpc3Qgb2YgcmVzb2x2ZWQgcmVzdWx0IGNvbnRhaW5pbmcgc291cmNlLCB2YWx1ZSwgYW5kIGZvcm1hdFxuZnVuY3Rpb24gcmVzb2x2ZShcbiAgICB0ZXh0OiBzdHJpbmcsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xuKTogQXJyYXk8RXhwclJlc29sdmVkPiB8IHN0cmluZyB7XG4gICAgLy8gY29uc29sZS5sb2codGV4dCk7XG5cbiAgICBsZXQgZXhwck1hcDogQXJyYXk8RXhwclJlc29sdmVkPiA9IFtdO1xuXG4gICAgLy8ge3soPzxleHByPltcXHcrXFwtKlxcLzAtOVxccygpXFxbXFxdJS5dKykoOjooPzxmb3JtYXQ+W1xcdytcXC0qXFwvMC05XFxzKClcXFtcXF0lLjpdKykpP319XG4gICAgbGV0IHN0ckV4cHJSZWdleCA9XG4gICAgICAgIFwie3soPzxleHByPltcXFxcdytcXFxcLSpcXFxcLzAtOVxcXFxzKClcXFxcW1xcXFxdJS4sXSspKDo6KD88Zm9ybWF0PltcXFxcdytcXFxcLSpcXFxcLzAtOVxcXFxzKClcXFxcW1xcXFxdJS46XSspKT99fVwiO1xuICAgIGxldCBleHByUmVnZXggPSBuZXcgUmVnRXhwKHN0ckV4cHJSZWdleCwgXCJnbVwiKTtcbiAgICBsZXQgbWF0Y2g7XG4gICAgd2hpbGUgKChtYXRjaCA9IGV4cHJSZWdleC5leGVjKHRleHQpKSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhtYXRjaCk7XG4gICAgICAgIGxldCBmdWxsbWF0Y2ggPSBtYXRjaFswXTtcbiAgICAgICAgaWYgKGV4cHJNYXAuc29tZSgoZSkgPT4gZS5zb3VyY2UgPT09IGZ1bGxtYXRjaCkpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmICh0eXBlb2YgbWF0Y2guZ3JvdXBzICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1hdGNoLmdyb3Vwcy5leHByICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICAgICAgbGV0IGV4cHIgPSBtYXRjaC5ncm91cHMuZXhwcjtcblxuICAgICAgICAgICAgICAgIGxldCBhc3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGFzdCA9IGpzZXAoZXhwcik7XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIkVycm9yOlwiICsgZXJyLm1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghYXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIkVycm9yOiBmYWlsZWQgdG8gcGFyc2UgZXhwcmVzc2lvblwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhhc3QpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBldmFsdWF0ZShhc3QsIHJlbmRlckluZm8pO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOyAvLyBlcnJvciBtZXNzYWdlXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgd2luZG93Lm1vbWVudC5pc01vbWVudCh2YWx1ZSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZvcm1hdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWF0Y2guZ3JvdXBzLmZvcm1hdCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gbWF0Y2guZ3JvdXBzLmZvcm1hdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGV4cHJNYXAucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6IGZ1bGxtYXRjaCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogZm9ybWF0LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZXhwck1hcDtcbn1cblxuLy8gUmVzb2x2ZSB0aGUgdGVtcGxhdGUgZXhwcmVzc2lvbiBpbiBzdHJpbmcgYW5kIHJldHVybiBhIHJlc29sdmVkIHN0cmluZ1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVUZW1wbGF0ZShcbiAgICB0ZW1wbGF0ZTogc3RyaW5nLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbik6IHN0cmluZyB7XG4gICAgbGV0IHJldFJlc29sdmUgPSByZXNvbHZlKHRlbXBsYXRlLCByZW5kZXJJbmZvKTtcbiAgICBpZiAodHlwZW9mIHJldFJlc29sdmUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFJlc29sdmU7IC8vIGVycm9yIG1lc3NhZ2VcbiAgICB9XG4gICAgbGV0IGV4cHJNYXAgPSByZXRSZXNvbHZlIGFzIEFycmF5PEV4cHJSZXNvbHZlZD47XG5cbiAgICBmb3IgKGxldCBleHByUmVzb2x2ZWQgb2YgZXhwck1hcCkge1xuICAgICAgICBsZXQgc291cmNlID0gZXhwclJlc29sdmVkLnNvdXJjZTtcbiAgICAgICAgbGV0IHZhbHVlID0gZXhwclJlc29sdmVkLnZhbHVlO1xuICAgICAgICBsZXQgZm9ybWF0ID0gZXhwclJlc29sdmVkLmZvcm1hdDtcbiAgICAgICAgbGV0IHN0clZhbHVlID0gXCJcIjtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgaWYgKGZvcm1hdCkge1xuICAgICAgICAgICAgICAgIHN0clZhbHVlID0gc3ByaW50ZihcIiVcIiArIGZvcm1hdCwgdmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzdHJWYWx1ZSA9IHZhbHVlLnRvRml4ZWQoMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAod2luZG93Lm1vbWVudC5pc01vbWVudCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChmb3JtYXQpIHtcbiAgICAgICAgICAgICAgICBzdHJWYWx1ZSA9IGhlbHBlci5kYXRlVG9TdHIodmFsdWUsIGZvcm1hdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0clZhbHVlID0gaGVscGVyLmRhdGVUb1N0cih2YWx1ZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdHJWYWx1ZSkge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZXhwclJlc29sdmVkKTtcbiAgICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUuc3BsaXQoc291cmNlKS5qb2luKHN0clZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0ZW1wbGF0ZTtcbn1cblxuLy8gUmVzb2x2ZSB0aGUgdGVtcGxhdGUgZXhwcmVzc2lvbiBpbiBzdHJpbmcgYW5kIHJldHVybiBhIG51bWJlciBvciBkYXRlXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVZhbHVlKFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXG4pOiBudW1iZXIgfCBNb21lbnQgfCBzdHJpbmcge1xuICAgIC8vIGNvbnNvbGUubG9nKHRlbXBsYXRlKTtcbiAgICB0ZXh0ID0gdGV4dC50cmltKCk7XG5cbiAgICAvLyBpbnB1dCBpcyBwdXJlIG51bWJlclxuICAgIGlmICgvXihbXFwtXT9bMC05XStbXFwuXVswLTldK3xbXFwtXT9bMC05XSspJC8udGVzdCh0ZXh0KSkge1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh0ZXh0KTtcbiAgICB9XG5cbiAgICAvLyB0ZW1wbGF0ZVxuICAgIGxldCByZXRSZXNvbHZlID0gcmVzb2x2ZSh0ZXh0LCByZW5kZXJJbmZvKTtcbiAgICBpZiAodHlwZW9mIHJldFJlc29sdmUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFJlc29sdmU7IC8vIGVycm9yIG1lc3NhZ2VcbiAgICB9XG4gICAgbGV0IGV4cHJNYXAgPSByZXRSZXNvbHZlIGFzIEFycmF5PEV4cHJSZXNvbHZlZD47XG5cbiAgICBpZiAoZXhwck1hcC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBleHByTWFwWzBdLnZhbHVlOyAvLyBvbmx5IGZpcnN0IHZhbHVlIHdpbGwgYmUgcmV0dXJuXG4gICAgfVxuXG4gICAgcmV0dXJuIFwiRXJyb3I6IGZhaWxlZCB0byByZXNvbHZlIHZhbHVlc1wiO1xufVxuIiwiLyogZ2xvYmFsIHdpbmRvdywgZXhwb3J0cywgZGVmaW5lICovXG5cbiFmdW5jdGlvbigpIHtcbiAgICAndXNlIHN0cmljdCdcblxuICAgIHZhciByZSA9IHtcbiAgICAgICAgbm90X3N0cmluZzogL1tec10vLFxuICAgICAgICBub3RfYm9vbDogL1tedF0vLFxuICAgICAgICBub3RfdHlwZTogL1teVF0vLFxuICAgICAgICBub3RfcHJpbWl0aXZlOiAvW152XS8sXG4gICAgICAgIG51bWJlcjogL1tkaWVmZ10vLFxuICAgICAgICBudW1lcmljX2FyZzogL1tiY2RpZWZndXhYXS8sXG4gICAgICAgIGpzb246IC9bal0vLFxuICAgICAgICBub3RfanNvbjogL1teal0vLFxuICAgICAgICB0ZXh0OiAvXlteXFx4MjVdKy8sXG4gICAgICAgIG1vZHVsbzogL15cXHgyNXsyfS8sXG4gICAgICAgIHBsYWNlaG9sZGVyOiAvXlxceDI1KD86KFsxLTldXFxkKilcXCR8XFwoKFteKV0rKVxcKSk/KFxcKyk/KDB8J1teJF0pPygtKT8oXFxkKyk/KD86XFwuKFxcZCspKT8oW2ItZ2lqb3N0VHV2eFhdKS8sXG4gICAgICAgIGtleTogL14oW2Etel9dW2Etel9cXGRdKikvaSxcbiAgICAgICAga2V5X2FjY2VzczogL15cXC4oW2Etel9dW2Etel9cXGRdKikvaSxcbiAgICAgICAgaW5kZXhfYWNjZXNzOiAvXlxcWyhcXGQrKVxcXS8sXG4gICAgICAgIHNpZ246IC9eWystXS9cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzcHJpbnRmKGtleSkge1xuICAgICAgICAvLyBgYXJndW1lbnRzYCBpcyBub3QgYW4gYXJyYXksIGJ1dCBzaG91bGQgYmUgZmluZSBmb3IgdGhpcyBjYWxsXG4gICAgICAgIHJldHVybiBzcHJpbnRmX2Zvcm1hdChzcHJpbnRmX3BhcnNlKGtleSksIGFyZ3VtZW50cylcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB2c3ByaW50ZihmbXQsIGFyZ3YpIHtcbiAgICAgICAgcmV0dXJuIHNwcmludGYuYXBwbHkobnVsbCwgW2ZtdF0uY29uY2F0KGFyZ3YgfHwgW10pKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNwcmludGZfZm9ybWF0KHBhcnNlX3RyZWUsIGFyZ3YpIHtcbiAgICAgICAgdmFyIGN1cnNvciA9IDEsIHRyZWVfbGVuZ3RoID0gcGFyc2VfdHJlZS5sZW5ndGgsIGFyZywgb3V0cHV0ID0gJycsIGksIGssIHBoLCBwYWQsIHBhZF9jaGFyYWN0ZXIsIHBhZF9sZW5ndGgsIGlzX3Bvc2l0aXZlLCBzaWduXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCB0cmVlX2xlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHBhcnNlX3RyZWVbaV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0ICs9IHBhcnNlX3RyZWVbaV1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBwYXJzZV90cmVlW2ldID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHBoID0gcGFyc2VfdHJlZVtpXSAvLyBjb252ZW5pZW5jZSBwdXJwb3NlcyBvbmx5XG4gICAgICAgICAgICAgICAgaWYgKHBoLmtleXMpIHsgLy8ga2V5d29yZCBhcmd1bWVudFxuICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd2W2N1cnNvcl1cbiAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IHBoLmtleXMubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhcmcgPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHNwcmludGYoJ1tzcHJpbnRmXSBDYW5ub3QgYWNjZXNzIHByb3BlcnR5IFwiJXNcIiBvZiB1bmRlZmluZWQgdmFsdWUgXCIlc1wiJywgcGgua2V5c1trXSwgcGgua2V5c1trLTFdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ1twaC5rZXlzW2tdXVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHBoLnBhcmFtX25vKSB7IC8vIHBvc2l0aW9uYWwgYXJndW1lbnQgKGV4cGxpY2l0KVxuICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd2W3BoLnBhcmFtX25vXVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHsgLy8gcG9zaXRpb25hbCBhcmd1bWVudCAoaW1wbGljaXQpXG4gICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3ZbY3Vyc29yKytdXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlLm5vdF90eXBlLnRlc3QocGgudHlwZSkgJiYgcmUubm90X3ByaW1pdGl2ZS50ZXN0KHBoLnR5cGUpICYmIGFyZyBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZygpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlLm51bWVyaWNfYXJnLnRlc3QocGgudHlwZSkgJiYgKHR5cGVvZiBhcmcgIT09ICdudW1iZXInICYmIGlzTmFOKGFyZykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Ioc3ByaW50ZignW3NwcmludGZdIGV4cGVjdGluZyBudW1iZXIgYnV0IGZvdW5kICVUJywgYXJnKSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmUubnVtYmVyLnRlc3QocGgudHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNfcG9zaXRpdmUgPSBhcmcgPj0gMFxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHN3aXRjaCAocGgudHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBhcnNlSW50KGFyZywgMTApLnRvU3RyaW5nKDIpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdjJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYXJnLCAxMCkpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdkJzpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBwYXJzZUludChhcmcsIDEwKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaic6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBKU09OLnN0cmluZ2lmeShhcmcsIG51bGwsIHBoLndpZHRoID8gcGFyc2VJbnQocGgud2lkdGgpIDogMClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gcGgucHJlY2lzaW9uID8gcGFyc2VGbG9hdChhcmcpLnRvRXhwb25lbnRpYWwocGgucHJlY2lzaW9uKSA6IHBhcnNlRmxvYXQoYXJnKS50b0V4cG9uZW50aWFsKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gcGgucHJlY2lzaW9uID8gcGFyc2VGbG9hdChhcmcpLnRvRml4ZWQocGgucHJlY2lzaW9uKSA6IHBhcnNlRmxvYXQoYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBwaC5wcmVjaXNpb24gPyBTdHJpbmcoTnVtYmVyKGFyZy50b1ByZWNpc2lvbihwaC5wcmVjaXNpb24pKSkgOiBwYXJzZUZsb2F0KGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ28nOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gKHBhcnNlSW50KGFyZywgMTApID4+PiAwKS50b1N0cmluZyg4KVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAncyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBTdHJpbmcoYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gKHBoLnByZWNpc2lvbiA/IGFyZy5zdWJzdHJpbmcoMCwgcGgucHJlY2lzaW9uKSA6IGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gU3RyaW5nKCEhYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gKHBoLnByZWNpc2lvbiA/IGFyZy5zdWJzdHJpbmcoMCwgcGgucHJlY2lzaW9uKSA6IGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1QnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZykuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChwaC5wcmVjaXNpb24gPyBhcmcuc3Vic3RyaW5nKDAsIHBoLnByZWNpc2lvbikgOiBhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd1JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBhcnNlSW50KGFyZywgMTApID4+PiAwXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd2JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChwaC5wcmVjaXNpb24gPyBhcmcuc3Vic3RyaW5nKDAsIHBoLnByZWNpc2lvbikgOiBhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChwYXJzZUludChhcmcsIDEwKSA+Pj4gMCkudG9TdHJpbmcoMTYpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdYJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChwYXJzZUludChhcmcsIDEwKSA+Pj4gMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZS5qc29uLnRlc3QocGgudHlwZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IGFyZ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlLm51bWJlci50ZXN0KHBoLnR5cGUpICYmICghaXNfcG9zaXRpdmUgfHwgcGguc2lnbikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24gPSBpc19wb3NpdGl2ZSA/ICcrJyA6ICctJ1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnRvU3RyaW5nKCkucmVwbGFjZShyZS5zaWduLCAnJylcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24gPSAnJ1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHBhZF9jaGFyYWN0ZXIgPSBwaC5wYWRfY2hhciA/IHBoLnBhZF9jaGFyID09PSAnMCcgPyAnMCcgOiBwaC5wYWRfY2hhci5jaGFyQXQoMSkgOiAnICdcbiAgICAgICAgICAgICAgICAgICAgcGFkX2xlbmd0aCA9IHBoLndpZHRoIC0gKHNpZ24gKyBhcmcpLmxlbmd0aFxuICAgICAgICAgICAgICAgICAgICBwYWQgPSBwaC53aWR0aCA/IChwYWRfbGVuZ3RoID4gMCA/IHBhZF9jaGFyYWN0ZXIucmVwZWF0KHBhZF9sZW5ndGgpIDogJycpIDogJydcbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0ICs9IHBoLmFsaWduID8gc2lnbiArIGFyZyArIHBhZCA6IChwYWRfY2hhcmFjdGVyID09PSAnMCcgPyBzaWduICsgcGFkICsgYXJnIDogcGFkICsgc2lnbiArIGFyZylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dFxuICAgIH1cblxuICAgIHZhciBzcHJpbnRmX2NhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4gICAgZnVuY3Rpb24gc3ByaW50Zl9wYXJzZShmbXQpIHtcbiAgICAgICAgaWYgKHNwcmludGZfY2FjaGVbZm10XSkge1xuICAgICAgICAgICAgcmV0dXJuIHNwcmludGZfY2FjaGVbZm10XVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9mbXQgPSBmbXQsIG1hdGNoLCBwYXJzZV90cmVlID0gW10sIGFyZ19uYW1lcyA9IDBcbiAgICAgICAgd2hpbGUgKF9mbXQpIHtcbiAgICAgICAgICAgIGlmICgobWF0Y2ggPSByZS50ZXh0LmV4ZWMoX2ZtdCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VfdHJlZS5wdXNoKG1hdGNoWzBdKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoKG1hdGNoID0gcmUubW9kdWxvLmV4ZWMoX2ZtdCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VfdHJlZS5wdXNoKCclJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKChtYXRjaCA9IHJlLnBsYWNlaG9sZGVyLmV4ZWMoX2ZtdCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoWzJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ19uYW1lcyB8PSAxXG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZF9saXN0ID0gW10sIHJlcGxhY2VtZW50X2ZpZWxkID0gbWF0Y2hbMl0sIGZpZWxkX21hdGNoID0gW11cbiAgICAgICAgICAgICAgICAgICAgaWYgKChmaWVsZF9tYXRjaCA9IHJlLmtleS5leGVjKHJlcGxhY2VtZW50X2ZpZWxkKSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2xpc3QucHVzaChmaWVsZF9tYXRjaFsxXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgocmVwbGFjZW1lbnRfZmllbGQgPSByZXBsYWNlbWVudF9maWVsZC5zdWJzdHJpbmcoZmllbGRfbWF0Y2hbMF0ubGVuZ3RoKSkgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmaWVsZF9tYXRjaCA9IHJlLmtleV9hY2Nlc3MuZXhlYyhyZXBsYWNlbWVudF9maWVsZCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2xpc3QucHVzaChmaWVsZF9tYXRjaFsxXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKGZpZWxkX21hdGNoID0gcmUuaW5kZXhfYWNjZXNzLmV4ZWMocmVwbGFjZW1lbnRfZmllbGQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9saXN0LnB1c2goZmllbGRfbWF0Y2hbMV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1tzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5JylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1tzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5JylcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBtYXRjaFsyXSA9IGZpZWxkX2xpc3RcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ19uYW1lcyB8PSAyXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhcmdfbmFtZXMgPT09IDMpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdbc3ByaW50Zl0gbWl4aW5nIHBvc2l0aW9uYWwgYW5kIG5hbWVkIHBsYWNlaG9sZGVycyBpcyBub3QgKHlldCkgc3VwcG9ydGVkJylcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwYXJzZV90cmVlLnB1c2goXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBtYXRjaFswXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtX25vOiAgICBtYXRjaFsxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXM6ICAgICAgICBtYXRjaFsyXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ246ICAgICAgICBtYXRjaFszXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZF9jaGFyOiAgICBtYXRjaFs0XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWduOiAgICAgICBtYXRjaFs1XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoOiAgICAgICBtYXRjaFs2XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZWNpc2lvbjogICBtYXRjaFs3XSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6ICAgICAgICBtYXRjaFs4XVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKCdbc3ByaW50Zl0gdW5leHBlY3RlZCBwbGFjZWhvbGRlcicpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfZm10ID0gX2ZtdC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzcHJpbnRmX2NhY2hlW2ZtdF0gPSBwYXJzZV90cmVlXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogZXhwb3J0IHRvIGVpdGhlciBicm93c2VyIG9yIG5vZGUuanNcbiAgICAgKi9cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBxdW90ZS1wcm9wcyAqL1xuICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZXhwb3J0c1snc3ByaW50ZiddID0gc3ByaW50ZlxuICAgICAgICBleHBvcnRzWyd2c3ByaW50ZiddID0gdnNwcmludGZcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHdpbmRvd1snc3ByaW50ZiddID0gc3ByaW50ZlxuICAgICAgICB3aW5kb3dbJ3ZzcHJpbnRmJ10gPSB2c3ByaW50ZlxuXG4gICAgICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZVsnYW1kJ10pIHtcbiAgICAgICAgICAgIGRlZmluZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAnc3ByaW50Zic6IHNwcmludGYsXG4gICAgICAgICAgICAgICAgICAgICd2c3ByaW50Zic6IHZzcHJpbnRmXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIHF1b3RlLXByb3BzICovXG59KCk7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhcmlhbmNlKHZhbHVlcywgdmFsdWVvZikge1xuICBsZXQgY291bnQgPSAwO1xuICBsZXQgZGVsdGE7XG4gIGxldCBtZWFuID0gMDtcbiAgbGV0IHN1bSA9IDA7XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsICYmICh2YWx1ZSA9ICt2YWx1ZSkgPj0gdmFsdWUpIHtcbiAgICAgICAgZGVsdGEgPSB2YWx1ZSAtIG1lYW47XG4gICAgICAgIG1lYW4gKz0gZGVsdGEgLyArK2NvdW50O1xuICAgICAgICBzdW0gKz0gZGVsdGEgKiAodmFsdWUgLSBtZWFuKTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgbGV0IGluZGV4ID0gLTE7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAoKHZhbHVlID0gdmFsdWVvZih2YWx1ZSwgKytpbmRleCwgdmFsdWVzKSkgIT0gbnVsbCAmJiAodmFsdWUgPSArdmFsdWUpID49IHZhbHVlKSB7XG4gICAgICAgIGRlbHRhID0gdmFsdWUgLSBtZWFuO1xuICAgICAgICBtZWFuICs9IGRlbHRhIC8gKytjb3VudDtcbiAgICAgICAgc3VtICs9IGRlbHRhICogKHZhbHVlIC0gbWVhbik7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChjb3VudCA+IDEpIHJldHVybiBzdW0gLyAoY291bnQgLSAxKTtcbn1cbiIsImltcG9ydCB7IE1vbWVudCB9IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7XG4gICAgRGF0YXNldHMsXG4gICAgRGF0YVBvaW50LFxuICAgIFJlbmRlckluZm8sXG4gICAgUGllSW5mbyxcbiAgICBNb250aEluZm8sXG4gICAgRGF0YXNldCxcbiAgICBTaXplLFxuICAgIFRyYW5zZm9ybSxcbiAgICBDaGFydEVsZW1lbnRzLFxuICAgIEdyYXBoVHlwZSxcbiAgICBWYWx1ZVR5cGUsXG59IGZyb20gXCIuL2RhdGFcIjtcbmltcG9ydCAqIGFzIGhlbHBlciBmcm9tIFwiLi9oZWxwZXJcIjtcbmltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xuaW1wb3J0ICogYXMgZXhwciBmcm9tIFwiLi9leHByXCI7XG5pbXBvcnQgeyBwaWUgfSBmcm9tIFwiZDNcIjtcblxuZnVuY3Rpb24gc2V0Q2hhcnRTY2FsZShcbiAgICBfY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbikge1xuICAgIGxldCBjYW52YXMgPSBkMy5zZWxlY3QoX2NhbnZhcyk7XG4gICAgbGV0IHN2ZyA9IGNoYXJ0RWxlbWVudHMuc3ZnO1xuICAgIGxldCBzdmdXaWR0aCA9IHBhcnNlRmxvYXQoc3ZnLmF0dHIoXCJ3aWR0aFwiKSk7XG4gICAgbGV0IHN2Z0hlaWdodCA9IHBhcnNlRmxvYXQoc3ZnLmF0dHIoXCJoZWlnaHRcIikpO1xuICAgIHN2Zy5hdHRyKFwid2lkdGhcIiwgbnVsbClcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbnVsbClcbiAgICAgICAgLmF0dHIoXCJ2aWV3Qm94XCIsIGAwIDAgJHtzdmdXaWR0aH0gJHtzdmdIZWlnaHR9YClcbiAgICAgICAgLmF0dHIoXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsIFwieE1pZFlNaWQgbWVldFwiKTtcblxuICAgIGlmIChyZW5kZXJJbmZvLmZpdFBhbmVsV2lkdGgpIHtcbiAgICAgICAgY2FudmFzLnN0eWxlKFwid2lkdGhcIiwgXCIxMDAlXCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbnZhcy5zdHlsZShcbiAgICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICAgIChzdmdXaWR0aCAqIHJlbmRlckluZm8uZml4ZWRTY2FsZSkudG9TdHJpbmcoKSArIFwicHhcIlxuICAgICAgICApO1xuICAgICAgICBjYW52YXMuc3R5bGUoXG4gICAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgICAgKHN2Z0hlaWdodCAqIHJlbmRlckluZm8uZml4ZWRTY2FsZSkudG9TdHJpbmcoKSArIFwicHhcIlxuICAgICAgICApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlQXJlYXMoXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgcGllSW5mbzogUGllSW5mb1xuKTogQ2hhcnRFbGVtZW50cyB7XG4gICAgLy8gY2xlYW4gYXJlYXNcbiAgICBkMy5zZWxlY3QoY2FudmFzKS5zZWxlY3QoXCIjc3ZnXCIpLnJlbW92ZSgpO1xuICAgIHZhciBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGNoYXJ0RWxlbWVudHMpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gZDMuc2VsZWN0KGNoYXJ0RWxlbWVudHNbcHJvcHNbaV1dKS5yZW1vdmUoKTtcbiAgICAgICAgZGVsZXRlIGNoYXJ0RWxlbWVudHNbcHJvcHNbaV1dO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhjaGFydEVsZW1lbnRzKTtcblxuICAgIC8vIHdob2xlIGFyZWEgZm9yIHBsb3R0aW5nLCBpbmNsdWRlcyBtYXJnaW5zXG4gICAgbGV0IHN2ZyA9IGQzXG4gICAgICAgIC5zZWxlY3QoY2FudmFzKVxuICAgICAgICAuYXBwZW5kKFwic3ZnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJzdmdcIilcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ubGVmdCArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ucmlnaHRcbiAgICAgICAgKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnRvcCArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4uYm90dG9tXG4gICAgICAgICk7XG4gICAgY2hhcnRFbGVtZW50c1tcInN2Z1wiXSA9IHN2ZztcblxuICAgIC8vIGdyYXBoQXJlYSwgaW5jbHVkZXMgY2hhcnRBcmVhLCB0aXRsZSwgbGVnZW5kXG4gICAgbGV0IGdyYXBoQXJlYSA9IHN2Z1xuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcImlkXCIsIFwiZ3JhcGhBcmVhXCIpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5sZWZ0ICtcbiAgICAgICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4udG9wICtcbiAgICAgICAgICAgICAgICBcIilcIlxuICAgICAgICApXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggKyByZW5kZXJJbmZvLm1hcmdpbi5yaWdodClcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICsgcmVuZGVySW5mby5tYXJnaW4uYm90dG9tXG4gICAgICAgICk7XG4gICAgY2hhcnRFbGVtZW50c1tcImdyYXBoQXJlYVwiXSA9IGdyYXBoQXJlYTtcblxuICAgIC8vIGRhdGFBcmVhLCB1bmRlciBncmFwaEFyZWEsIGluY2x1ZGVzIHBvaW50cywgbGluZXMsIHhBeGlzLCB5QXhpc1xuICAgIGxldCBkYXRhQXJlYSA9IGdyYXBoQXJlYVxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcImlkXCIsIFwiZGF0YUFyZWFcIilcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aClcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0KTtcbiAgICBjaGFydEVsZW1lbnRzW1wiZGF0YUFyZWFcIl0gPSBkYXRhQXJlYTtcblxuICAgIHJldHVybiBjaGFydEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiByZW5kZXJUaXRsZShcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBwaWVJbmZvOiBQaWVJbmZvXG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlclRpdGxlXCIpO1xuICAgIC8vIHVuZGVyIGdyYXBoQXJlYVxuXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFwaWVJbmZvKSByZXR1cm47XG5cbiAgICBpZiAoIXBpZUluZm8udGl0bGUpIHJldHVybjtcbiAgICBsZXQgdGl0bGVTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShwaWVJbmZvLnRpdGxlLCBcInRyYWNrZXItdGl0bGVcIik7XG5cbiAgICAvLyBBcHBlbmQgdGl0bGVcbiAgICBsZXQgdGl0bGUgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYVxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAudGV4dChwaWVJbmZvLnRpdGxlKSAvLyBwaXZvdCBhdCBjZW50ZXJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcInRpdGxlXCIpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAvIDIuMCArXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xuICAgICAgICAgICAgICAgIHRpdGxlU2l6ZS5oZWlnaHQgLyAyLjAgK1xuICAgICAgICAgICAgICAgIFwiKVwiXG4gICAgICAgIClcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGl0bGVTaXplLmhlaWdodCkgLy8gZm9yIGxhdGVyIHVzZVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10aXRsZVwiKTtcbiAgICBjaGFydEVsZW1lbnRzW1widGl0bGVcIl0gPSB0aXRsZTtcblxuICAgIC8vIEV4cGFuZCBwYXJlbnQgYXJlYXNcbiAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgMCwgdGl0bGVTaXplLmhlaWdodCk7XG4gICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsIDAsIHRpdGxlU2l6ZS5oZWlnaHQpO1xuXG4gICAgLy8gTW92ZSBzaWJsaW5nIGFyZWFzXG4gICAgaGVscGVyLm1vdmVBcmVhKGNoYXJ0RWxlbWVudHMuZGF0YUFyZWEsIDAsIHRpdGxlU2l6ZS5oZWlnaHQpO1xuXG4gICAgcmV0dXJuO1xufVxuXG5mdW5jdGlvbiByZW5kZXJMZWdlbmQoXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgcGllSW5mbzogUGllSW5mb1xuKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJMZWdlbmRcIik7XG4gICAgLy8gY29uc29sZS5sb2cocGlJbmZvLmxlZ2VuZFBvc2l0aW9uKTtcbiAgICAvLyBjb25zb2xlLmxvZyhwaUluZm8ubGVnZW5kT3JpZW50YXRpb24pO1xuXG4gICAgLy8gR2V0IGNoYXJ0IGVsZW1lbnRzXG4gICAgbGV0IHN2ZyA9IGNoYXJ0RWxlbWVudHMuc3ZnO1xuICAgIGxldCBncmFwaEFyZWEgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYTtcbiAgICBsZXQgZGF0YUFyZWEgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhO1xuICAgIGxldCB0aXRsZSA9IGNoYXJ0RWxlbWVudHMudGl0bGU7XG5cbiAgICAvLyBHZXQgZWxlbWVudCB3aWR0aCBhbmQgaGVpZ2h0XG4gICAgbGV0IHRpdGxlSGVpZ2h0ID0gMC4wO1xuICAgIGlmICh0aXRsZSkge1xuICAgICAgICB0aXRsZUhlaWdodCA9IHBhcnNlRmxvYXQodGl0bGUuYXR0cihcImhlaWdodFwiKSk7XG4gICAgfVxuXG4gICAgLy8gR2V0IG5hbWVzIGFuZCB0aGVpciBkaW1lbnNpb25cbiAgICBsZXQgbmFtZXMgPSBwaWVJbmZvLmRhdGFOYW1lO1xuICAgIGxldCBuYW1lU2l6ZXMgPSBuYW1lcy5tYXAoZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgcmV0dXJuIGhlbHBlci5tZWFzdXJlVGV4dFNpemUobiwgXCJ0cmFja2VyLWxlZ2VuZC1sYWJlbFwiKTtcbiAgICB9KTtcbiAgICBsZXQgaW5kTWF4TmFtZSA9IDA7XG4gICAgbGV0IG1heE5hbWVXaWR0aCA9IDAuMDtcbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBuYW1lcy5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgIGlmIChuYW1lU2l6ZXNbaW5kXS53aWR0aCA+IG1heE5hbWVXaWR0aCkge1xuICAgICAgICAgICAgbWF4TmFtZVdpZHRoID0gbmFtZVNpemVzW2luZF0ud2lkdGg7XG4gICAgICAgICAgICBpbmRNYXhOYW1lID0gaW5kO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBtYXhOYW1lID0gbmFtZXNbaW5kTWF4TmFtZV07XG4gICAgbGV0IGNoYXJhY3RlcldpZHRoID0gbWF4TmFtZVdpZHRoIC8gbWF4TmFtZS5sZW5ndGg7XG4gICAgbGV0IG5hbWVIZWlnaHQgPSBuYW1lU2l6ZXNbaW5kTWF4TmFtZV0uaGVpZ2h0O1xuICAgIGxldCBudW1OYW1lcyA9IG5hbWVzLmxlbmd0aDtcblxuICAgIGxldCB4U3BhY2luZyA9IDIgKiBjaGFyYWN0ZXJXaWR0aDtcbiAgICBsZXQgeVNwYWNpbmcgPSBuYW1lSGVpZ2h0O1xuICAgIGxldCBtYXJrZXJXaWR0aCA9IDIgKiBjaGFyYWN0ZXJXaWR0aDtcblxuICAgIC8vIEdldCBsZWdlbmQgd2lkdGggYW5kIGhlaWdodFxuICAgIGxldCBsZWdlbmRXaWR0aCA9IDA7XG4gICAgbGV0IGxlZ2VuZEhlaWdodCA9IDA7XG4gICAgaWYgKHBpZUluZm8ubGVnZW5kT3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xuICAgICAgICBsZWdlbmRXaWR0aCA9IHhTcGFjaW5nICogMyArIG1hcmtlcldpZHRoICsgbWF4TmFtZVdpZHRoO1xuICAgICAgICBsZWdlbmRIZWlnaHQgPSAobnVtTmFtZXMgKyAxKSAqIHlTcGFjaW5nO1xuICAgIH0gZWxzZSBpZiAocGllSW5mby5sZWdlbmRPcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgbGVnZW5kV2lkdGggPVxuICAgICAgICAgICAgKDIgKiB4U3BhY2luZyArIG1hcmtlcldpZHRoKSAqIG51bU5hbWVzICtcbiAgICAgICAgICAgIHhTcGFjaW5nICtcbiAgICAgICAgICAgIGQzLnN1bShuYW1lU2l6ZXMsIGZ1bmN0aW9uIChzLCBpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHMud2lkdGg7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgbGVnZW5kSGVpZ2h0ID0geVNwYWNpbmcgKyBuYW1lSGVpZ2h0O1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhcbiAgICAvLyAgICAgYG1heE5hbWU6ICR7bWF4TmFtZX0sIGNoYXJhY3RlcldpZHRoOiAke2NoYXJhY3RlcldpZHRofSwgbWF4TmFtZVdpZHRoOiAke21heE5hbWVXaWR0aH1gXG4gICAgLy8gKTtcbiAgICAvLyBjb25zb2xlLmxvZyhgeFNwYWNpbmc6JHt4U3BhY2luZ30sIG51bU5hbWVzOiAke251bU5hbWVzfSwgbWFya2VyV2lkdGg6ICR7bWFya2VyV2lkdGh9YCk7XG4gICAgLy8gY29uc29sZS5sb2coYGxlZ2VuZFdpZHRoOiAke2xlZ2VuZFdpZHRofSwgbGVnZW5kSGVpZ2h0OiAke2xlZ2VuZEhlaWdodH1gKTtcblxuICAgIC8vIENhbGN1YWx0ZSBsZW5nZW5kWCBhbmQgbGVnZW5kWVxuICAgIGxldCBsZWdlbmRYID0gMC4wOyAvLyByZWxhdGl2ZSB0byBncmFwaEFyZWFcbiAgICBsZXQgbGVnZW5kWSA9IDAuMDtcbiAgICBpZiAocGllSW5mby5sZWdlbmRQb3NpdGlvbiA9PT0gXCJ0b3BcIikge1xuICAgICAgICAvLyBiZWxvdyB0aXRsZVxuICAgICAgICBsZWdlbmRYID0gcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggLyAyLjAgLSBsZWdlbmRXaWR0aCAvIDIuMDtcbiAgICAgICAgbGVnZW5kWSA9IHRpdGxlSGVpZ2h0O1xuICAgICAgICAvLyBFeHBhbmQgc3ZnXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKHN2ZywgMCwgbGVnZW5kSGVpZ2h0ICsgeVNwYWNpbmcpO1xuICAgICAgICAvLyBNb3ZlIGRhdGFBcmVhIGRvd25cbiAgICAgICAgaGVscGVyLm1vdmVBcmVhKGRhdGFBcmVhLCAwLCBsZWdlbmRIZWlnaHQgKyB5U3BhY2luZyk7XG4gICAgfSBlbHNlIGlmIChwaWVJbmZvLmxlZ2VuZFBvc2l0aW9uID09PSBcImJvdHRvbVwiKSB7XG4gICAgICAgIC8vIGJlbGxvdyB4LWF4aXMgbGFiZWxcbiAgICAgICAgbGVnZW5kWCA9IHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMi4wIC0gbGVnZW5kV2lkdGggLyAyLjA7XG4gICAgICAgIGxlZ2VuZFkgPSB0aXRsZUhlaWdodCArIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArIHlTcGFjaW5nO1xuICAgICAgICAvLyBFeHBhbmQgc3ZnXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKHN2ZywgMCwgbGVnZW5kSGVpZ2h0ICsgeVNwYWNpbmcpO1xuICAgIH0gZWxzZSBpZiAocGllSW5mby5sZWdlbmRQb3NpdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgbGVnZW5kWCA9IDA7XG4gICAgICAgIGxlZ2VuZFkgPVxuICAgICAgICAgICAgdGl0bGVIZWlnaHQgK1xuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0IC8gMi4wIC1cbiAgICAgICAgICAgIGxlZ2VuZEhlaWdodCAvIDIuMDtcbiAgICAgICAgLy8gRXhwYW5kIHN2Z1xuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShzdmcsIGxlZ2VuZFdpZHRoICsgeFNwYWNpbmcsIDApO1xuICAgICAgICAvLyBNb3ZlIGRhdGFBcmVhIHJpZ2h0XG4gICAgICAgIGhlbHBlci5tb3ZlQXJlYShkYXRhQXJlYSwgbGVnZW5kV2lkdGggKyB4U3BhY2luZywgMCk7XG4gICAgfSBlbHNlIGlmIChwaWVJbmZvLmxlZ2VuZFBvc2l0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgbGVnZW5kWCA9IHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICsgeFNwYWNpbmc7XG4gICAgICAgIGxlZ2VuZFkgPVxuICAgICAgICAgICAgdGl0bGVIZWlnaHQgK1xuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0IC8gMi4wIC1cbiAgICAgICAgICAgIGxlZ2VuZEhlaWdodCAvIDIuMDtcbiAgICAgICAgLy8gRXhwYW5kIHN2Z1xuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShzdmcsIGxlZ2VuZFdpZHRoICsgeFNwYWNpbmcsIDApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coYGxlZ2VuZFg6ICR7bGVnZW5kWH0sIGxlZ2VuZFk6ICR7bGVnZW5kWX1gKTtcblxuICAgIGxldCBsZWdlbmQgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYVxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcImlkXCIsIFwibGVnZW5kXCIpXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgbGVnZW5kWCArIFwiLFwiICsgbGVnZW5kWSArIFwiKVwiKTtcbiAgICAvLyBjb25zb2xlLmxvZygnbGVnZW5kWDogJWQsIGxlZ2VuZFk6ICVkJywgbGVnZW5kWCwgbGVnZW5kWSk7XG5cbiAgICBsZXQgbGVnZW5kQmcgPSBsZWdlbmRcbiAgICAgICAgLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbGVnZW5kXCIpXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgbGVnZW5kV2lkdGgpXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGxlZ2VuZEhlaWdodCk7XG4gICAgaWYgKHBpZUluZm8ubGVnZW5kQmdDb2xvcikge1xuICAgICAgICBsZWdlbmRCZy5zdHlsZShcImZpbGxcIiwgcGllSW5mby5sZWdlbmRCZ0NvbG9yKTtcbiAgICB9XG4gICAgaWYgKHBpZUluZm8ubGVnZW5kQm9yZGVyQ29sb3IpIHtcbiAgICAgICAgbGVnZW5kQmcuc3R5bGUoXCJzdHJva2VcIiwgcGllSW5mby5sZWdlbmRCb3JkZXJDb2xvcik7XG4gICAgfVxuXG4gICAgbGV0IG1hcmtlclJhZGl1cyA9IDUuMDtcbiAgICBsZXQgZmlyc3RNYXJrZXJYID0geFNwYWNpbmc7XG4gICAgbGV0IGZpcnN0TWFya2VyWSA9IG5hbWVIZWlnaHQ7XG4gICAgbGV0IGZpcnN0TGFiZWxYID0gZmlyc3RNYXJrZXJYICsgeFNwYWNpbmcgKyBtYXJrZXJXaWR0aDsgLy8geFNwYWNpbmcgKyAyICogeFNwYWluZ1xuICAgIGxldCBmaXJzdExhYmVsWSA9IGZpcnN0TWFya2VyWTtcblxuICAgIGlmIChwaWVJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgLy8gcG9pbnRzXG4gICAgICAgIGxlZ2VuZFxuICAgICAgICAgICAgLnNlbGVjdEFsbChcIm1hcmtlcnNcIilcbiAgICAgICAgICAgIC5kYXRhKG5hbWVzKVxuICAgICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAgIC5hcHBlbmQoXCJjaXJjbGVcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgZmlyc3RNYXJrZXJYICsgbWFya2VyV2lkdGggLyAyLjApXG4gICAgICAgICAgICAuYXR0cihcImN5XCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdE1hcmtlclkgKyBpICogeVNwYWNpbmc7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJyXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJSYWRpdXM7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGllSW5mby5kYXRhQ29sb3JbaV07XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAvLyBuYW1lc1xuICAgICAgICBsZXQgbmFtZUxhYmVscyA9IGxlZ2VuZFxuICAgICAgICAgICAgLnNlbGVjdEFsbChcImxhYmVsc1wiKVxuICAgICAgICAgICAgLmRhdGEobmFtZXMpXG4gICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCBmaXJzdExhYmVsWClcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RMYWJlbFkgKyBpICogeVNwYWNpbmc7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRleHQoZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN0eWxlKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1sZWdlbmQtbGFiZWxcIik7XG5cbiAgICAgICAgbmFtZUxhYmVscy5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gcGllSW5mby5kYXRhQ29sb3JbaV07XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAocGllSW5mby5sZWdlbmRPcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgbGV0IGN1cnJSZW5kZXJQb3NYID0gMC4wO1xuICAgICAgICBsZXQgY3VyclJlbmRlclBvc1gyID0gMC4wO1xuXG4gICAgICAgIC8vIHBvaW50c1xuICAgICAgICBjdXJyUmVuZGVyUG9zWCA9IDAuMDtcbiAgICAgICAgbGVnZW5kXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwibWFya2Vyc1wiKVxuICAgICAgICAgICAgLmRhdGEobmFtZXMpXG4gICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJjeFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyUmVuZGVyUG9zWCA9IGZpcnN0TWFya2VyWCArIG1hcmtlcldpZHRoIC8gMi4wO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJSZW5kZXJQb3NYICs9XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lU2l6ZXNbaV0ud2lkdGggKyB4U3BhY2luZyArIG1hcmtlcldpZHRoICsgeFNwYWNpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjdXJyUmVuZGVyUG9zWDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcImN5XCIsIGZpcnN0TWFya2VyWSlcbiAgICAgICAgICAgIC5hdHRyKFwiclwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFya2VyUmFkaXVzO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBpZUluZm8uZGF0YUNvbG9yW2ldO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gbmFtZXNcbiAgICAgICAgY3VyclJlbmRlclBvc1ggPSAwLjA7XG4gICAgICAgIGxldCBuYW1lTGFiZWxzID0gbGVnZW5kXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwibGFiZWxzXCIpXG4gICAgICAgICAgICAuZGF0YShuYW1lcylcbiAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJSZW5kZXJQb3NYID0gZmlyc3RMYWJlbFg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VyclJlbmRlclBvc1ggKz1cbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVTaXplc1tpXS53aWR0aCArIHhTcGFjaW5nICsgbWFya2VyV2lkdGggKyB4U3BhY2luZztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJSZW5kZXJQb3NYO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmaXJzdExhYmVsWSlcbiAgICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdHlsZShcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbGVnZW5kLWxhYmVsXCIpO1xuXG4gICAgICAgIG5hbWVMYWJlbHMuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgcmV0dXJuIHBpZUluZm8uZGF0YUNvbG9yW2ldO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlclBpZShcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBwaWVJbmZvOiBQaWVJbmZvXG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlclBpZVwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJcIjtcblxuICAgIGxldCByYWRpdXMgPSByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAqIDAuNTtcbiAgICBsZXQgb3V0dGVyUmFkaXVzID0gcmFkaXVzICogMC43O1xuICAgIGxldCBpbm5lclJhZGl1cyA9IG91dHRlclJhZGl1cyAqIHBpZUluZm8ucmF0aW9Jbm5lclJhZGl1cztcblxuICAgIC8vIHZhbHVlc1xuICAgIGxldCB2YWx1ZXM6IEFycmF5PG51bWJlcj4gPSBbXTtcbiAgICBmb3IgKGxldCBzdHJFeHByIG9mIHBpZUluZm8uZGF0YSkge1xuICAgICAgICBsZXQgcmV0VmFsdWUgPSBleHByLnJlc29sdmVWYWx1ZShzdHJFeHByLCByZW5kZXJJbmZvKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRWYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmV0VmFsdWU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmV0VmFsdWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHZhbHVlcy5wdXNoKHJldFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXJyb3JNZXNzYWdlICE9PSBcIlwiKSB7XG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlcyk7XG5cbiAgICAvLyBsYWJlbHNcbiAgICBsZXQgbGFiZWxzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgZm9yIChsZXQgc3RyRXhwciBvZiBwaWVJbmZvLmxhYmVsKSB7XG4gICAgICAgIGxldCByZXRMYWJlbCA9IGV4cHIucmVzb2x2ZVRlbXBsYXRlKHN0ckV4cHIsIHJlbmRlckluZm8pO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXRMYWJlbCk7XG4gICAgICAgIGlmIChyZXRMYWJlbC5zdGFydHNXaXRoKFwiRXJyb3JcIikpIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHJldExhYmVsO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgbGFiZWxzLnB1c2gocmV0TGFiZWwpO1xuICAgIH1cbiAgICBpZiAoZXJyb3JNZXNzYWdlICE9PSBcIlwiKSB7XG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGxhYmVscyk7XG5cbiAgICAvLyBoaWRlTGFiZWxMZXNzVGhhblxuICAgIGxldCBoaWRlTGFiZWxMZXNzVGhhbiA9IHBpZUluZm8uaGlkZUxhYmVsTGVzc1RoYW47XG5cbiAgICAvLyBsYWJlbCBzaXplc1xuICAgIGxldCBsYWJlbFNpemVzID0gbGFiZWxzLm1hcChmdW5jdGlvbiAobikge1xuICAgICAgICByZXR1cm4gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShuLCBcInRyYWNrZXItdGljay1sYWJlbFwiKTtcbiAgICB9KTtcblxuICAgIC8vIGV4dExhYmVsXG4gICAgbGV0IGV4dExhYmVsczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIGZvciAobGV0IHN0ckV4cHIgb2YgcGllSW5mby5leHRMYWJlbCkge1xuICAgICAgICBsZXQgcmV0RXh0TGFiZWwgPSBleHByLnJlc29sdmVUZW1wbGF0ZShzdHJFeHByLCByZW5kZXJJbmZvKTtcbiAgICAgICAgaWYgKHJldEV4dExhYmVsLnN0YXJ0c1dpdGgoXCJFcnJvclwiKSkge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmV0RXh0TGFiZWw7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBleHRMYWJlbHMucHVzaChyZXRFeHRMYWJlbCk7XG4gICAgfVxuICAgIGlmIChlcnJvck1lc3NhZ2UgIT09IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coZXh0TGFiZWxzKTtcblxuICAgIC8vIGV4dExhYmVsIHNpemVzXG4gICAgbGV0IGV4dExhYmVsU2l6ZXMgPSBleHRMYWJlbHMubWFwKGZ1bmN0aW9uIChuKSB7XG4gICAgICAgIHJldHVybiBoZWxwZXIubWVhc3VyZVRleHRTaXplKG4sIFwidHJhY2tlci1waWUtbGFiZWxcIik7XG4gICAgfSk7XG4gICAgLy8gY29uc29sZS5sb2coZXh0TGFiZWxTaXplcyk7XG5cbiAgICBsZXQgc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbCA9IHBpZUluZm8uc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbDtcblxuICAgIC8vIHNjYWxlXG4gICAgbGV0IGNvbG9yU2NhbGUgPSBkMy5zY2FsZU9yZGluYWwoKS5yYW5nZShwaWVJbmZvLmRhdGFDb2xvcik7XG5cbiAgICBsZXQgc2VjdG9yc0dyb3VwID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYS5hcHBlbmQoXCJnXCIpO1xuICAgIHNlY3RvcnNHcm91cC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IHN0clRyYW5zbGF0ZSA9XG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAqIDAuNSArXG4gICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgKiAwLjUgK1xuICAgICAgICAgICAgXCIpXCI7XG5cbiAgICAgICAgcmV0dXJuIHN0clRyYW5zbGF0ZTtcbiAgICB9KTtcblxuICAgIGxldCBwaWUgPSBkMy5waWUoKTtcbiAgICBsZXQgcGllVmFsdWVzID0gcGllKHZhbHVlcyk7XG4gICAgcGllVmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlOiBhbnksIGk6IG51bWJlcikge3ZhbHVlLmlucHV0X2luZGV4ID0gaX0pXG5cbiAgICBsZXQgc2VjdG9ycyA9IHNlY3RvcnNHcm91cFxuICAgICAgICAuc2VsZWN0QWxsKFwic2VjdG9yXCIpXG4gICAgICAgIC5kYXRhKHBpZVZhbHVlcylcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZChcImdcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInNlY3RvclwiKTtcblxuICAgIGxldCBhcmMgPSBkMy5hcmMoKS5pbm5lclJhZGl1cyhpbm5lclJhZGl1cykub3V0ZXJSYWRpdXMob3V0dGVyUmFkaXVzKTtcblxuICAgIHZhciBoaWRkZW5BcmMgPSBkM1xuICAgICAgICAuYXJjKClcbiAgICAgICAgLmlubmVyUmFkaXVzKHJhZGl1cyAqIDAuOSlcbiAgICAgICAgLm91dGVyUmFkaXVzKHJhZGl1cyAqIDAuOSk7XG5cbiAgICBsZXQgc2VjdG9yUGF0aHMgPSBzZWN0b3JzXG4gICAgICAgIC5hcHBlbmQoXCJwYXRoXCIpXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBmdW5jdGlvbiAoZDogYW55LCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBjb2xvclNjYWxlKGkudG9TdHJpbmcoKSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKFwiZFwiLCBhcmMpO1xuXG4gICAgZnVuY3Rpb24gaXNMYWJlbEhpZGRlbihhcmNPYmo6IGFueSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgc3RhcnQvZW5kOiAke2FyY09iai5zdGFydEFuZ2xlfS8ke2FyY09iai5lbmRBbmdsZX1gKTtcbiAgICAgICAgbGV0IGZyYWN0aW9uID0gKGFyY09iai5lbmRBbmdsZSAtIGFyY09iai5zdGFydEFuZ2xlKSAvICgyLjAgKiBNYXRoLlBJKTtcbiAgICAgICAgaWYgKGZyYWN0aW9uIDwgaGlkZUxhYmVsTGVzc1RoYW4pIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBsYWJlbCBlbGVtZW50c1xuICAgIGxldCBsYWJlbEVsZW1lbnRzID0gc2VjdG9yc0dyb3VwXG4gICAgICAgIC5zZWxlY3RBbGwoXCJsYWJlbFwiKVxuICAgICAgICAuZGF0YShwaWUodmFsdWVzKSlcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLnRleHQoZnVuY3Rpb24gKGFyY09iajogYW55LCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgIGlmIChpc0xhYmVsSGlkZGVuKGFyY09iaikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBsYWJlbHNbaV07XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uIChkOiBhbnkpIHtcbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xuICAgICAgICAgICAgICAgIGFyYy5jZW50cm9pZChkKVswXSArXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xuICAgICAgICAgICAgICAgIGFyYy5jZW50cm9pZChkKVsxXSArXG4gICAgICAgICAgICAgICAgXCIpXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXBpZS1sYWJlbFwiKTtcblxuICAgIGZ1bmN0aW9uIGdldE1pZEFuZ2xlKGFyY09iajogYW55KSB7XG4gICAgICAgIHJldHVybiBhcmNPYmouc3RhcnRBbmdsZSArIChhcmNPYmouZW5kQW5nbGUgLSBhcmNPYmouc3RhcnRBbmdsZSkgLyAyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGV4dGVybmFsTGFiZWxUZXh0KGFyY09iajogYW55LCBpOiBudW1iZXIpIHtcbiAgICAgICAgaWYgKHNob3dFeHRMYWJlbE9ubHlJZk5vTGFiZWwpIHtcbiAgICAgICAgICAgIGlmIChsYWJlbHNbaV0gPT09IFwiXCIgfHwgaXNMYWJlbEhpZGRlbihhcmNPYmopKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV4dExhYmVsc1tpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGV4dExhYmVsc1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGV4dGVybmFsIGxhYmVsIGVsZW1lbnRzXG4gICAgbGV0IHByZXZCQiA6IERPTVJlY3QgPSBudWxsO1xuICAgIGxldCBleHRsYWJlbFBvcyA6IGFueSA9IHt9O1xuICAgIGxldCBleHRMYWJlbEVsZW1lbnRzID0gc2VjdG9yc0dyb3VwXG4gICAgICAgIC5zZWxlY3RBbGwoXCJleHRMYWJlbFwiKVxuICAgICAgICAuZGF0YShwaWVWYWx1ZXMpXG4gICAgICAgIC5lbnRlcigpXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgIC8vIFNvcnQgZXh0ZXJuYWwgbGFiZWxzIGJhc2VkIG9uIHkgdmFsdWUgc3VjaCB0aGF0IHdlIGNhbiBtb3ZlIGRvd24gb3ZlcmxhcHBpbmcgbGFiZWxzXG4gICAgICAgIC5zb3J0KGZ1bmN0aW9uIChhcmNPYmoxOiBhbnksIGFyY09iajI6IGFueSkge1xuICAgICAgICAgICAgcmV0dXJuIE1hdGguY29zKGdldE1pZEFuZ2xlKGFyY09iajIpKSAtIE1hdGguY29zKGdldE1pZEFuZ2xlKGFyY09iajEpKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRleHQoZnVuY3Rpb24gKGFyY09iajogYW55LCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgIGkgPSBhcmNPYmouaW5wdXRfaW5kZXg7XG4gICAgICAgICAgICByZXR1cm4gZXh0ZXJuYWxMYWJlbFRleHQoYXJjT2JqLCBpKVxuICAgICAgICB9KVxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBmdW5jdGlvbiAoYXJjT2JqOiBhbnksIGk6IG51bWJlcikge1xuICAgICAgICAgICAgaSA9IGFyY09iai5pbnB1dF9pbmRleDtcbiAgICAgICAgICAgIC8vIElmIGV4dGVybmFsIGxhYmVsIGlzIGVtcHR5LCBkaXJlY3RseSByZXR1cm4uXG4gICAgICAgICAgICBpZiAoZXh0ZXJuYWxMYWJlbFRleHQoYXJjT2JqLCBpKS5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBwb3NMYWJlbCA9IGhpZGRlbkFyYy5jZW50cm9pZChhcmNPYmopO1xuICAgICAgICAgICAgbGV0IG1pZEFuZ2xlID0gZ2V0TWlkQW5nbGUoYXJjT2JqKTtcblxuICAgICAgICAgICAgcG9zTGFiZWxbMF0gPVxuICAgICAgICAgICAgICAgIChyYWRpdXMgKiAwLjk5IC0gZXh0TGFiZWxTaXplc1tpXS53aWR0aCkgKlxuICAgICAgICAgICAgICAgIChtaWRBbmdsZSA8IE1hdGguUEkgPyAxIDogLTEpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICB2YXIgeXNoaWZ0ID0gMDtcbiAgICAgICAgICAgIGxldCB0aGlzQkIgPSBuZXcgRE9NUmVjdChwb3NMYWJlbFswXSwgcG9zTGFiZWxbMV0sIGV4dExhYmVsU2l6ZXNbaV0ud2lkdGgsIGV4dExhYmVsU2l6ZXNbaV0uaGVpZ2h0KTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKHByZXZCQiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIC8vIENoZWNrIHdoZXRoZXIgdGhlcmUgYXJlIG92ZXJsYXBzXG4gICAgICAgICAgICAgICAgaWYgKCEodGhpc0JCLnJpZ2h0IDwgcHJldkJCLmxlZnQgfHwgcHJldkJCLnJpZ2h0IDwgdGhpc0JCLmxlZnRcbiAgICAgICAgICAgICAgICAgICAgfHwgcHJldkJCLmJvdHRvbSA8IHRoaXNCQi50b3ApKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFNpbmNlIHkgaXMgc29ydGVkIGZyb20gbG93IHRvIGhpZ2gsIHdlIGV4cGVjdCB0byBzaGlmdCB0aGlzIGl0ZW0gZnVydGhlciBkb3duXG4gICAgICAgICAgICAgICAgICAgIHlzaGlmdCA9IHByZXZCQi5ib3R0b20gLSB0aGlzQkIudG9wO1xuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImhhcyBvdmVybGFwXCIsIHlzaGlmdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHlzaGlmdCAhPSAwKSB7XG4gICAgICAgICAgICAgICAgdGhpc0JCID0gbmV3IERPTVJlY3QocG9zTGFiZWxbMF0sIHBvc0xhYmVsWzFdICsgeXNoaWZ0LCBleHRMYWJlbFNpemVzW2ldLndpZHRoLCBleHRMYWJlbFNpemVzW2ldLmhlaWdodCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwcmV2QkIgPSB0aGlzQkI7XG4gICAgICAgICAgICAvLyBTYXZlIGV4dGVybmFsIGxhYmVsIHBvc2l0aW9uIGZvciBjb25uZWN0aW9uIGxpbmUgcGxvdHRpbmdcbiAgICAgICAgICAgIGV4dGxhYmVsUG9zW2ldID0gW3Bvc0xhYmVsWzBdLCBwb3NMYWJlbFsxXSArIHlzaGlmdF1cbiAgICAgICAgICAgIHJldHVybiBcInRyYW5zbGF0ZShcIiArIHBvc0xhYmVsWzBdICsgXCIsXCIgKyAocG9zTGFiZWxbMV0gKyB5c2hpZnQpICsgXCIpXCI7XG4gICAgICAgIH0pXG4gICAgICAgIC5zdHlsZShcInRleHQtYW5jaG9yXCIsIGZ1bmN0aW9uIChhcmNPYmo6IGFueSkge1xuICAgICAgICAgICAgbGV0IG1pZEFuZ2xlID0gZ2V0TWlkQW5nbGUoYXJjT2JqKTtcbiAgICAgICAgICAgIHJldHVybiBtaWRBbmdsZSA8IE1hdGguUEkgPyBcInN0YXJ0XCIgOiBcImVuZFwiO1xuICAgICAgICB9KVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1waWUtbGFiZWxcIik7XG4gICAgXG5cbiAgICBmdW5jdGlvbiBnZXRQb2ludHNGb3JDb25uZWN0aW9uTGluZXMoYXJjT2JqOiBhbnksIGk6IG51bWJlcikge1xuICAgICAgICBsZXQgbGFiZWxXaWR0aCA9IGxhYmVsU2l6ZXNbaV0ud2lkdGg7XG4gICAgICAgIGxldCBleHRMYWJlbFdpZHRoID0gZXh0TGFiZWxTaXplc1tpXS53aWR0aDtcbiAgICAgICAgbGV0IGxhYmVsSGlkZGVuID0gaXNMYWJlbEhpZGRlbihhcmNPYmopO1xuICAgICAgICBsZXQgbWlkQW5nbGUgPSBnZXRNaWRBbmdsZShhcmNPYmopO1xuXG4gICAgICAgIGxldCBwb3NMYWJlbCA9IGFyYy5jZW50cm9pZChhcmNPYmopOyAvLyBsaW5lIGluc2VydGlvbiBpbiB0aGUgc2xpY2VcbiAgICAgICAgbGV0IHBvc01pZGRsZSA9IGhpZGRlbkFyYy5jZW50cm9pZChhcmNPYmopOyAvLyBsaW5lIGJyZWFrOiB3ZSB1c2UgdGhlIG90aGVyIGFyYyBnZW5lcmF0b3IgdGhhdCBoYXMgYmVlbiBidWlsdCBvbmx5IGZvciB0aGF0XG4gICAgICAgIGxldCBwb3NFeHRMYWJlbCA9IGV4dGxhYmVsUG9zW2ldIHx8IGhpZGRlbkFyYy5jZW50cm9pZChhcmNPYmopOyAvLyBMYWJlbCBwb3NpdGlvbiA9IGFsbW9zdCB0aGUgc2FtZSBhcyBwb3NCXG4gICAgICAgIHBvc01pZGRsZVsxXSA9IHBvc0V4dExhYmVsWzFdO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhsYWJlbHNbaV0pO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhgbGFiZWwvbWlkZGxlL2V4dExhYmVsOiAke3Bvc0xhYmVsfS8ke3Bvc01pZGRsZX0vJHtwb3NFeHRMYWJlbH1gKTtcblxuICAgICAgICBsZXQgZGlzdE1pZGRsZVRvTGFiZWwgPSBNYXRoLnNxcnQoXG4gICAgICAgICAgICAocG9zTWlkZGxlWzBdIC0gcG9zTGFiZWxbMF0pICoqIDIgK1xuICAgICAgICAgICAgICAgIChwb3NNaWRkbGVbMV0gLSBwb3NMYWJlbFsxXSkgKiogMlxuICAgICAgICApO1xuXG4gICAgICAgIGlmIChsYWJlbHNbaV0gIT09IFwiXCIgJiYgIWxhYmVsSGlkZGVuKSB7XG4gICAgICAgICAgICAvLyBzaGlmdCBwb3NMYWJlbCwgdG93YXJkIHRoZSBtaWRkbGUgcG9pbnRcbiAgICAgICAgICAgIHBvc0xhYmVsWzBdID1cbiAgICAgICAgICAgICAgICBwb3NMYWJlbFswXSArXG4gICAgICAgICAgICAgICAgKChwb3NNaWRkbGVbMF0gLSBwb3NMYWJlbFswXSkgKiBsYWJlbFdpZHRoKSAvIGRpc3RNaWRkbGVUb0xhYmVsO1xuICAgICAgICAgICAgcG9zTGFiZWxbMV0gPVxuICAgICAgICAgICAgICAgIHBvc0xhYmVsWzFdICtcbiAgICAgICAgICAgICAgICAoKHBvc01pZGRsZVsxXSAtIHBvc0xhYmVsWzFdKSAqIGxhYmVsV2lkdGgpIC8gZGlzdE1pZGRsZVRvTGFiZWw7XG5cbiAgICAgICAgICAgIC8vIHNoaWZ0IHBvc0V4dExhYmVsXG4gICAgICAgICAgICBwb3NFeHRMYWJlbFswXSA9cG9zRXh0TGFiZWxbMF0gKyAoLSAzKSAqXG4gICAgICAgICAgICAgICAgKG1pZEFuZ2xlIDwgTWF0aC5QSSA/IDEgOiAtMSk7IC8vIG11bHRpcGx5IGJ5IDEgb3IgLTEgdG8gcHV0IGl0IG9uIHRoZSByaWdodCBvciBvbiB0aGUgbGVmdFxuICAgICAgICB9XG5cbiAgICAgICAgZGlzdE1pZGRsZVRvTGFiZWwgPSBNYXRoLnNxcnQoXG4gICAgICAgICAgICAocG9zTWlkZGxlWzBdIC0gcG9zTGFiZWxbMF0pICoqIDIgK1xuICAgICAgICAgICAgICAgIChwb3NNaWRkbGVbMV0gLSBwb3NMYWJlbFsxXSkgKiogMlxuICAgICAgICApO1xuXG4gICAgICAgIGxldCBkaXN0RXh0TGFiZWxUb0xhYmVsID0gTWF0aC5zcXJ0KFxuICAgICAgICAgICAgKHBvc0V4dExhYmVsWzBdIC0gcG9zTGFiZWxbMF0pICoqIDIgK1xuICAgICAgICAgICAgICAgIChwb3NFeHRMYWJlbFsxXSAtIHBvc0xhYmVsWzFdKSAqKiAyXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKGRpc3RNaWRkbGVUb0xhYmVsID4gZGlzdEV4dExhYmVsVG9MYWJlbCkge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJ0d28gcG9pbnRzXCIpO1xuICAgICAgICAgICAgcmV0dXJuIFtwb3NMYWJlbCwgcG9zRXh0TGFiZWxdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBbcG9zTGFiZWwsIHBvc01pZGRsZSwgcG9zRXh0TGFiZWxdO1xuICAgIH1cblxuICAgIC8vIEFkZCBsaW5lcyBiZXR3ZWVuIHNlY3RvcnMgYW5kIGV4dGVybmFsIGxhYmVsc1xuICAgIGxldCBsaW5lcyA9IHNlY3RvcnNHcm91cFxuICAgICAgICAuc2VsZWN0QWxsKFwibGluZVwiKVxuICAgICAgICAuZGF0YShwaWVWYWx1ZXMpXG4gICAgICAgIC5lbnRlcigpXG4gICAgICAgIC5hcHBlbmQoXCJwb2x5bGluZVwiKVxuICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcImJsYWNrXCIpXG4gICAgICAgIC5zdHlsZShcImZpbGxcIiwgXCJub25lXCIpXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlLXdpZHRoXCIsIDEpXG4gICAgICAgIC5hdHRyKFwicG9pbnRzXCIsIGZ1bmN0aW9uIChhcmNPYmo6IGFueSwgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICBpZiAoc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbCkge1xuICAgICAgICAgICAgICAgIGlmIChsYWJlbHNbaV0gPT09IFwiXCIgfHwgaXNMYWJlbEhpZGRlbihhcmNPYmopKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleHRMYWJlbHNbaV0gIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnZXRQb2ludHNGb3JDb25uZWN0aW9uTGluZXMoYXJjT2JqLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGV4dExhYmVsc1tpXSAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UG9pbnRzRm9yQ29ubmVjdGlvbkxpbmVzKGFyY09iaiwgaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1heGlzXCIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyUGllQ2hhcnQoXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIHBpZUluZm86IFBpZUluZm9cbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyUGllQ2hhcnRcIik7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFwaWVJbmZvKSByZXR1cm47XG5cbiAgICAvLyByZXR1cm4gXCJVbmRlciBjb25zdHJ1Y3Rpb25cIjtcblxuICAgIGxldCBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzID0ge307XG4gICAgY2hhcnRFbGVtZW50cyA9IGNyZWF0ZUFyZWFzKGNoYXJ0RWxlbWVudHMsIGNhbnZhcywgcmVuZGVySW5mbywgcGllSW5mbyk7XG5cbiAgICAvLyBTZXQgZGVmYXVsdCBkYXRhQ29sb3IgaWYgbm8gZGF0YUNvbG9yIHByb3ZpZGVkXG4gICAgbGV0IGRlZmF1bHREYXRhQ29sb3IgPSBkMy5zY2hlbWVTcGVjdHJhbFtwaWVJbmZvLmRhdGFDb2xvci5sZW5ndGhdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGllSW5mby5kYXRhQ29sb3IubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHBpZUluZm8uZGF0YUNvbG9yW2ldID09PSBudWxsKSB7XG4gICAgICAgICAgICBwaWVJbmZvLmRhdGFDb2xvcltpXSA9IGRlZmF1bHREYXRhQ29sb3JbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW5kZXJUaXRsZShjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIHBpZUluZm8pO1xuXG4gICAgcmVuZGVyUGllKGNhbnZhcywgY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgcGllSW5mbyk7XG5cbiAgICBpZiAocGllSW5mby5zaG93TGVnZW5kKSB7XG4gICAgICAgIHJlbmRlckxlZ2VuZChjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIHBpZUluZm8pO1xuICAgIH1cblxuICAgIHNldENoYXJ0U2NhbGUoY2FudmFzLCBjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvKTtcbn1cbiIsImltcG9ydCBhcnJheSBmcm9tIFwiLi9hcnJheS5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgZGVzY2VuZGluZyBmcm9tIFwiLi9kZXNjZW5kaW5nLmpzXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHkuanNcIjtcbmltcG9ydCB7dGF1fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgdmFsdWUgPSBpZGVudGl0eSxcbiAgICAgIHNvcnRWYWx1ZXMgPSBkZXNjZW5kaW5nLFxuICAgICAgc29ydCA9IG51bGwsXG4gICAgICBzdGFydEFuZ2xlID0gY29uc3RhbnQoMCksXG4gICAgICBlbmRBbmdsZSA9IGNvbnN0YW50KHRhdSksXG4gICAgICBwYWRBbmdsZSA9IGNvbnN0YW50KDApO1xuXG4gIGZ1bmN0aW9uIHBpZShkYXRhKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG4gPSAoZGF0YSA9IGFycmF5KGRhdGEpKS5sZW5ndGgsXG4gICAgICAgIGosXG4gICAgICAgIGssXG4gICAgICAgIHN1bSA9IDAsXG4gICAgICAgIGluZGV4ID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBhcmNzID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBhMCA9ICtzdGFydEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIGRhID0gTWF0aC5taW4odGF1LCBNYXRoLm1heCgtdGF1LCBlbmRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIC0gYTApKSxcbiAgICAgICAgYTEsXG4gICAgICAgIHAgPSBNYXRoLm1pbihNYXRoLmFicyhkYSkgLyBuLCBwYWRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSxcbiAgICAgICAgcGEgPSBwICogKGRhIDwgMCA/IC0xIDogMSksXG4gICAgICAgIHY7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKHYgPSBhcmNzW2luZGV4W2ldID0gaV0gPSArdmFsdWUoZGF0YVtpXSwgaSwgZGF0YSkpID4gMCkge1xuICAgICAgICBzdW0gKz0gdjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPcHRpb25hbGx5IHNvcnQgdGhlIGFyY3MgYnkgcHJldmlvdXNseS1jb21wdXRlZCB2YWx1ZXMgb3IgYnkgZGF0YS5cbiAgICBpZiAoc29ydFZhbHVlcyAhPSBudWxsKSBpbmRleC5zb3J0KGZ1bmN0aW9uKGksIGopIHsgcmV0dXJuIHNvcnRWYWx1ZXMoYXJjc1tpXSwgYXJjc1tqXSk7IH0pO1xuICAgIGVsc2UgaWYgKHNvcnQgIT0gbnVsbCkgaW5kZXguc29ydChmdW5jdGlvbihpLCBqKSB7IHJldHVybiBzb3J0KGRhdGFbaV0sIGRhdGFbal0pOyB9KTtcblxuICAgIC8vIENvbXB1dGUgdGhlIGFyY3MhIFRoZXkgYXJlIHN0b3JlZCBpbiB0aGUgb3JpZ2luYWwgZGF0YSdzIG9yZGVyLlxuICAgIGZvciAoaSA9IDAsIGsgPSBzdW0gPyAoZGEgLSBuICogcGEpIC8gc3VtIDogMDsgaSA8IG47ICsraSwgYTAgPSBhMSkge1xuICAgICAgaiA9IGluZGV4W2ldLCB2ID0gYXJjc1tqXSwgYTEgPSBhMCArICh2ID4gMCA/IHYgKiBrIDogMCkgKyBwYSwgYXJjc1tqXSA9IHtcbiAgICAgICAgZGF0YTogZGF0YVtqXSxcbiAgICAgICAgaW5kZXg6IGksXG4gICAgICAgIHZhbHVlOiB2LFxuICAgICAgICBzdGFydEFuZ2xlOiBhMCxcbiAgICAgICAgZW5kQW5nbGU6IGExLFxuICAgICAgICBwYWRBbmdsZTogcFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJjcztcbiAgfVxuXG4gIHBpZS52YWx1ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh2YWx1ZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBwaWUpIDogdmFsdWU7XG4gIH07XG5cbiAgcGllLnNvcnRWYWx1ZXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc29ydFZhbHVlcyA9IF8sIHNvcnQgPSBudWxsLCBwaWUpIDogc29ydFZhbHVlcztcbiAgfTtcblxuICBwaWUuc29ydCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3J0ID0gXywgc29ydFZhbHVlcyA9IG51bGwsIHBpZSkgOiBzb3J0O1xuICB9O1xuXG4gIHBpZS5zdGFydEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0YXJ0QW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcGllKSA6IHN0YXJ0QW5nbGU7XG4gIH07XG5cbiAgcGllLmVuZEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGVuZEFuZ2xlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHBpZSkgOiBlbmRBbmdsZTtcbiAgfTtcblxuICBwaWUucGFkQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkQW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcGllKSA6IHBhZEFuZ2xlO1xuICB9O1xuXG4gIHJldHVybiBwaWU7XG59XG4iLCJpbXBvcnQgKiBhcyBkMyBmcm9tIFwiZDNcIjtcbmltcG9ydCB7IFJlbmRlckluZm8sIFN1bW1hcnlJbmZvIH0gZnJvbSBcIi4vZGF0YVwiO1xuaW1wb3J0ICogYXMgZXhwciBmcm9tIFwiLi9leHByXCI7XG5cbmZ1bmN0aW9uIGNoZWNrU3VtbWFyeVRlbXBsYXRlVmFsaWQoc3VtbWFyeVRlbXBsYXRlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlclN1bW1hcnkoXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIHN1bW1hcnlJbmZvOiBTdW1tYXJ5SW5mb1xuKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJTdW1tYXJ5XCIpO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8pO1xuICAgIGlmICghcmVuZGVySW5mbyB8fCAhc3VtbWFyeUluZm8pIHJldHVybjtcblxuICAgIC8vIGNvbnNvbGUubG9nKHN1bW1hcnlJbmZvLnRlbXBsYXRlKTtcbiAgICBsZXQgb3V0cHV0U3VtbWFyeSA9IFwiXCI7XG4gICAgaWYgKGNoZWNrU3VtbWFyeVRlbXBsYXRlVmFsaWQoc3VtbWFyeUluZm8udGVtcGxhdGUpKSB7XG4gICAgICAgIG91dHB1dFN1bW1hcnkgPSBzdW1tYXJ5SW5mby50ZW1wbGF0ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gXCJJbnZhbGlkIHN1bW1hcnkgdGVtcGxhdGVcIjtcbiAgICB9XG5cbiAgICBsZXQgcmV0UmVzb2x2ZWRUZW1wbGF0ZSA9IGV4cHIucmVzb2x2ZVRlbXBsYXRlKG91dHB1dFN1bW1hcnksIHJlbmRlckluZm8pO1xuICAgIC8vIGNvbnNvbGUubG9nKHJldFJlc29sdmVkVGVtcGxhdGUpO1xuICAgIGlmIChyZXRSZXNvbHZlZFRlbXBsYXRlLnN0YXJ0c1dpdGgoXCJFcnJvcjpcIikpIHtcbiAgICAgICAgcmV0dXJuIHJldFJlc29sdmVkVGVtcGxhdGU7XG4gICAgfVxuICAgIG91dHB1dFN1bW1hcnkgPSByZXRSZXNvbHZlZFRlbXBsYXRlO1xuXG4gICAgaWYgKG91dHB1dFN1bW1hcnkgIT09IFwiXCIpIHtcbiAgICAgICAgbGV0IHRleHRCbG9jayA9IGQzLnNlbGVjdChjYW52YXMpLmFwcGVuZChcImRpdlwiKTtcbiAgICAgICAgaWYgKG91dHB1dFN1bW1hcnkuaW5jbHVkZXMoXCJcXG5cIikgfHwgb3V0cHV0U3VtbWFyeS5pbmNsdWRlcyhcIlxcXFxuXCIpKSB7XG4gICAgICAgICAgICBsZXQgb3V0cHV0TGluZXMgPSBvdXRwdXRTdW1tYXJ5LnNwbGl0KC8oXFxufFxcXFxuKS8pO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cob3V0cHV0TGluZXMpO1xuICAgICAgICAgICAgZm9yIChsZXQgb3V0cHV0TGluZSBvZiBvdXRwdXRMaW5lcykge1xuICAgICAgICAgICAgICAgIGlmIChvdXRwdXRMaW5lICE9PSBcIlxcblwiICYmIG91dHB1dExpbmUgIT09IFwiXFxcXG5cIilcbiAgICAgICAgICAgICAgICB0ZXh0QmxvY2suYXBwZW5kKFwiZGl2XCIpLnRleHQob3V0cHV0TGluZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0ZXh0QmxvY2sudGV4dChvdXRwdXRTdW1tYXJ5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdW1tYXJ5SW5mby5zdHlsZSAhPT0gXCJcIikge1xuICAgICAgICAgICAgdGV4dEJsb2NrLmF0dHIoXCJzdHlsZVwiLCBzdW1tYXJ5SW5mby5zdHlsZSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCJpbXBvcnQgeyBNb21lbnQgfSBmcm9tIFwibW9tZW50XCI7XG5pbXBvcnQge1xuICAgIERhdGFzZXRzLFxuICAgIERhdGFQb2ludCxcbiAgICBSZW5kZXJJbmZvLFxuICAgIE1vbnRoSW5mbyxcbiAgICBEYXRhc2V0LFxuICAgIFNpemUsXG4gICAgVHJhbnNmb3JtLFxuICAgIENoYXJ0RWxlbWVudHMsXG4gICAgR3JhcGhUeXBlLFxuICAgIFZhbHVlVHlwZSxcbn0gZnJvbSBcIi4vZGF0YVwiO1xuaW1wb3J0ICogYXMgaGVscGVyIGZyb20gXCIuL2hlbHBlclwiO1xuaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XG5cbmxldCBsb2dUb0NvbnNvbGUgPSBmYWxzZTtcbmxldCByYXRpb0NlbGxUb1RleHQgPSAyLjg7XG5sZXQgcmF0aW9Eb3RUb1RleHQgPSAxLjg7XG5cbmludGVyZmFjZSBEYXlJbmZvIHtcbiAgICBkYXRlOiBzdHJpbmc7XG4gICAgdmFsdWU6IG51bWJlcjtcbiAgICBzY2FsZWRWYWx1ZTogbnVtYmVyO1xuICAgIGRheUluTW9udGg6IG51bWJlcjtcbiAgICBpc0luVGhpc01vbnRoOiBib29sZWFuO1xuICAgIGlzT3V0T2ZEYXRhUmFuZ2U6IGJvb2xlYW47XG4gICAgcm93OiBudW1iZXI7XG4gICAgY29sOiBudW1iZXI7XG4gICAgc2hvd0NpcmNsZTogYm9vbGVhbjtcbiAgICBzdHJlYWtJbjogYm9vbGVhbjtcbiAgICBzdHJlYWtPdXQ6IGJvb2xlYW47XG4gICAgYW5ub3RhdGlvbjogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBzZXRDaGFydFNjYWxlKFxuICAgIF9jYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xuKSB7XG4gICAgbGV0IGNhbnZhcyA9IGQzLnNlbGVjdChfY2FudmFzKTtcbiAgICBsZXQgc3ZnID0gY2hhcnRFbGVtZW50cy5zdmc7XG4gICAgbGV0IHN2Z1dpZHRoID0gcGFyc2VGbG9hdChzdmcuYXR0cihcIndpZHRoXCIpKTtcbiAgICBsZXQgc3ZnSGVpZ2h0ID0gcGFyc2VGbG9hdChzdmcuYXR0cihcImhlaWdodFwiKSk7XG4gICAgc3ZnLmF0dHIoXCJ3aWR0aFwiLCBudWxsKVxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCBudWxsKVxuICAgICAgICAuYXR0cihcInZpZXdCb3hcIiwgYDAgMCAke3N2Z1dpZHRofSAke3N2Z0hlaWdodH1gKVxuICAgICAgICAuYXR0cihcInByZXNlcnZlQXNwZWN0UmF0aW9cIiwgXCJ4TWlkWU1pZCBtZWV0XCIpO1xuXG4gICAgaWYgKHJlbmRlckluZm8uZml0UGFuZWxXaWR0aCkge1xuICAgICAgICBjYW52YXMuc3R5bGUoXCJ3aWR0aFwiLCBcIjEwMCVcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY2FudmFzLnN0eWxlKFxuICAgICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgICAgKHN2Z1dpZHRoICogcmVuZGVySW5mby5maXhlZFNjYWxlKS50b1N0cmluZygpICsgXCJweFwiXG4gICAgICAgICk7XG4gICAgICAgIGNhbnZhcy5zdHlsZShcbiAgICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgICAoc3ZnSGVpZ2h0ICogcmVuZGVySW5mby5maXhlZFNjYWxlKS50b1N0cmluZygpICsgXCJweFwiXG4gICAgICAgICk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiB0b05leHREYXRhc2V0KHJlbmRlckluZm86IFJlbmRlckluZm8sIG1vbnRoSW5mbzogTW9udGhJbmZvKTogYm9vbGVhbiB7XG4gICAgbGV0IGRhdGFzZXRJZHMgPSBtb250aEluZm8uZGF0YXNldDtcbiAgICBpZiAoZGF0YXNldElkcy5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTsgLy8gZmFsc2UgaWYgc2VsZWN0ZWQgZGF0YXNldCBub3QgY2hhbmdlZFxuXG4gICAgbGV0IGRhdGFzZXQgPSBudWxsO1xuICAgIGlmIChtb250aEluZm8uc2VsZWN0ZWREYXRhc2V0ID09PSBudWxsKSB7XG4gICAgICAgIGZvciAobGV0IGRhdGFzZXRJZCBvZiBkYXRhc2V0SWRzKSB7XG4gICAgICAgICAgICBkYXRhc2V0ID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpO1xuICAgICAgICAgICAgaWYgKGRhdGFzZXQgJiYgIWRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGFzZXQpIHtcbiAgICAgICAgICAgIG1vbnRoSW5mby5zZWxlY3RlZERhdGFzZXQgPSBkYXRhc2V0LmdldElkKCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gdHJ1ZSBpZiBzZWxlY3RlYyBkYXRhc2V0IGNoYW5nZWRcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBjdXJEYXRhc2V0SWQgPSBtb250aEluZm8uc2VsZWN0ZWREYXRhc2V0O1xuICAgICAgICBsZXQgY3VySW5kZXggPSBkYXRhc2V0SWRzLmZpbmRJbmRleCgoaWQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpZCA9PT0gY3VyRGF0YXNldElkO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGN1ckluZGV4ID49IDApIHtcbiAgICAgICAgICAgIGlmIChjdXJJbmRleCA9PT0gbW9udGhJbmZvLmRhdGFzZXQubGVuZ3RoIC0gMSkge1xuICAgICAgICAgICAgICAgIC8vIHNlYXJjaCBmcm9tIHN0YXJ0XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZGF0YXNldElkIG9mIGRhdGFzZXRJZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldCA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGFzZXQgJiYgIWRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChkYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIG1vbnRoSW5mby5zZWxlY3RlZERhdGFzZXQgPSBkYXRhc2V0LmdldElkKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyB0cnVlIGlmIHNlbGVjdGVjIGRhdGFzZXQgY2hhbmdlZFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN1ckluZGV4Kys7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGFzZXRJZCA9IGRhdGFzZXRJZHNbY3VySW5kZXhdO1xuICAgICAgICAgICAgICAgIGRhdGFzZXQgPSByZW5kZXJJbmZvLmRhdGFzZXRzLmdldERhdGFzZXRCeUlkKGRhdGFzZXRJZCk7XG4gICAgICAgICAgICAgICAgbW9udGhJbmZvLnNlbGVjdGVkRGF0YXNldCA9IGRhdGFzZXRJZDtcbiAgICAgICAgICAgICAgICBpZiAoZGF0YXNldCAmJiAhZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRvTmV4dERhdGFzZXQocmVuZGVySW5mbywgbW9udGhJbmZvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFyZWFzKFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIG1vbnRoSW5mbzogTW9udGhJbmZvXG4pOiBDaGFydEVsZW1lbnRzIHtcbiAgICAvLyBjbGVhbiBhcmVhc1xuICAgIGQzLnNlbGVjdChjYW52YXMpLnNlbGVjdChcIiNzdmdcIikucmVtb3ZlKCk7XG4gICAgdmFyIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY2hhcnRFbGVtZW50cyk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBkMy5zZWxlY3QoY2hhcnRFbGVtZW50c1twcm9wc1tpXV0pLnJlbW92ZSgpO1xuICAgICAgICBkZWxldGUgY2hhcnRFbGVtZW50c1twcm9wc1tpXV07XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGNoYXJ0RWxlbWVudHMpO1xuXG4gICAgLy8gd2hvbGUgYXJlYSBmb3IgcGxvdHRpbmcsIGluY2x1ZGVzIG1hcmdpbnNcbiAgICBsZXQgc3ZnID0gZDNcbiAgICAgICAgLnNlbGVjdChjYW52YXMpXG4gICAgICAgIC5hcHBlbmQoXCJzdmdcIilcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcInN2Z1wiKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5sZWZ0ICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5yaWdodFxuICAgICAgICApXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4udG9wICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5ib3R0b21cbiAgICAgICAgKTtcbiAgICBjaGFydEVsZW1lbnRzW1wic3ZnXCJdID0gc3ZnO1xuXG4gICAgLy8gZ3JhcGhBcmVhLCBpbmNsdWRlcyBjaGFydEFyZWEsIHRpdGxlLCBsZWdlbmRcbiAgICBsZXQgZ3JhcGhBcmVhID0gc3ZnXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJncmFwaEFyZWFcIilcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmxlZnQgK1xuICAgICAgICAgICAgICAgIFwiLFwiICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi50b3AgK1xuICAgICAgICAgICAgICAgIFwiKVwiXG4gICAgICAgIClcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArIHJlbmRlckluZm8ubWFyZ2luLnJpZ2h0KVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgKyByZW5kZXJJbmZvLm1hcmdpbi5ib3R0b21cbiAgICAgICAgKTtcbiAgICBjaGFydEVsZW1lbnRzW1wiZ3JhcGhBcmVhXCJdID0gZ3JhcGhBcmVhO1xuXG4gICAgLy8gZGF0YUFyZWEsIHVuZGVyIGdyYXBoQXJlYSwgaW5jbHVkZXMgcG9pbnRzLCBsaW5lcywgeEF4aXMsIHlBeGlzXG4gICAgbGV0IGRhdGFBcmVhID0gZ3JhcGhBcmVhXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJkYXRhQXJlYVwiKVxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoKVxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQpO1xuICAgIGNoYXJ0RWxlbWVudHNbXCJkYXRhQXJlYVwiXSA9IGRhdGFBcmVhO1xuXG4gICAgcmV0dXJuIGNoYXJ0RWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIGNsZWFyU2VsZWN0aW9uKGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsIG1vbnRoSW5mbzogTW9udGhJbmZvKSB7XG4gICAgbGV0IGNpcmNsZXMgPSBjaGFydEVsZW1lbnRzLnN2Zy5zZWxlY3RBbGwoXCJjaXJjbGVcIik7XG4gICAgLy8gY29uc29sZS5sb2coY2lyY2xlcyk7XG4gICAgZm9yIChsZXQgY2lyY2xlIG9mIGNpcmNsZXMpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coY2lyY2xlKTtcbiAgICAgICAgbGV0IGlkID0gZDMuc2VsZWN0KGNpcmNsZSkuYXR0cihcImlkXCIpO1xuICAgICAgICBpZiAoaWQgJiYgaWQuc3RhcnRzV2l0aChcInRyYWNrZXItc2VsZWN0ZWQtY2lyY2xlLVwiKSkge1xuICAgICAgICAgICAgZDMuc2VsZWN0KGNpcmNsZSkuc3R5bGUoXCJzdHJva2VcIiwgXCJub25lXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbW9udGhJbmZvLnNlbGVjdGVkRGF0ZSA9IFwiXCI7XG5cbiAgICBjaGFydEVsZW1lbnRzLm1vbml0b3IudGV4dChcIlwiKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyTW9udGhIZWFkZXIoXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgbW9udGhJbmZvOiBNb250aEluZm8sXG4gICAgY3VyTW9udGhEYXRlOiBNb21lbnRcbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyTW9udGhIZWFkZXJcIilcblxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhbW9udGhJbmZvKSByZXR1cm47XG5cbiAgICBsZXQgY3VyRGF0YXNldElkID0gbW9udGhJbmZvLnNlbGVjdGVkRGF0YXNldDtcbiAgICBpZiAoY3VyRGF0YXNldElkID09PSBudWxsKSByZXR1cm47XG4gICAgbGV0IGRhdGFzZXQgPSByZW5kZXJJbmZvLmRhdGFzZXRzLmdldERhdGFzZXRCeUlkKGN1ckRhdGFzZXRJZCk7XG4gICAgaWYgKCFkYXRhc2V0KSByZXR1cm47XG4gICAgbGV0IGRhdGFzZXROYW1lID0gZGF0YXNldC5nZXROYW1lKCk7XG5cbiAgICBsZXQgY3VyTW9udGggPSBjdXJNb250aERhdGUubW9udGgoKTsgLy8gMH4xMVxuICAgIGxldCBjdXJEYXlzSW5Nb250aCA9IGN1ck1vbnRoRGF0ZS5kYXlzSW5Nb250aCgpOyAvLyAyOH4zMVxuICAgIGxldCBjdXJZZWFyID0gY3VyTW9udGhEYXRlLnllYXIoKTtcblxuICAgIGxldCBtYXhEYXlUZXh0U2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXCIzMFwiLCBcInRyYWNrZXItbW9udGgtbGFiZWxcIik7XG4gICAgbGV0IGNlbGxTaXplID1cbiAgICAgICAgTWF0aC5tYXgobWF4RGF5VGV4dFNpemUud2lkdGgsIG1heERheVRleHRTaXplLmhlaWdodCkgKiByYXRpb0NlbGxUb1RleHQ7XG4gICAgbGV0IGRvdFJhZGl1cyA9ICgoY2VsbFNpemUgLyByYXRpb0NlbGxUb1RleHQpICogcmF0aW9Eb3RUb1RleHQpIC8gMi4wO1xuXG4gICAgbGV0IGhlYWRlclllYXJUZXh0ID0gY3VyTW9udGhEYXRlLmZvcm1hdChcIllZWVlcIik7XG4gICAgbGV0IGhlYWRlck1vbnRoVGV4dCA9IGN1ck1vbnRoRGF0ZS5mb3JtYXQoXCJNTU1cIik7XG4gICAgbGV0IGhlYWRlclllYXJTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcbiAgICAgICAgaGVhZGVyWWVhclRleHQsXG4gICAgICAgIFwidHJhY2tlci1tb250aC1oZWFkZXIteWVhclwiXG4gICAgKTtcbiAgICBsZXQgaGVhZGVyTW9udGhTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcbiAgICAgICAgaGVhZGVyTW9udGhUZXh0LFxuICAgICAgICBcInRyYWNrZXItbW9udGgtaGVhZGVyLW1vbnRoXCJcbiAgICApO1xuXG4gICAgbGV0IGhlYWRlckhlaWdodCA9IDA7XG4gICAgbGV0IHlTcGFjaW5nID0gODtcblxuICAgIC8vIEFwcGVuZCBoZWFkZXIgZ3JvdXBcbiAgICBsZXQgaGVhZGVyR3JvdXAgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYS5hcHBlbmQoXCJnXCIpO1xuXG4gICAgLy8gaGFlZGVyIG1vbnRoXG4gICAgbGV0IGhlYWRlck1vbnRoQ29sb3IgPSBudWxsO1xuICAgIGlmIChtb250aEluZm8uaGVhZGVyTW9udGhDb2xvcikge1xuICAgICAgICBoZWFkZXJNb250aENvbG9yID0gbW9udGhJbmZvLmhlYWRlck1vbnRoQ29sb3I7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1vbnRoSW5mby5jb2xvcikge1xuICAgICAgICAgICAgaGVhZGVyTW9udGhDb2xvciA9IG1vbnRoSW5mby5jb2xvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgaGVhZGVyTW9udGggPSBoZWFkZXJHcm91cFxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAudGV4dChoZWFkZXJNb250aFRleHQpIC8vIHBpdm90IGF0IGNlbnRlclxuICAgICAgICAuYXR0cihcImlkXCIsIFwidGl0bGVNb250aFwiKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArIGNlbGxTaXplIC8gNC4wICsgXCIsXCIgKyBoZWFkZXJNb250aFNpemUuaGVpZ2h0ICsgXCIpXCJcbiAgICAgICAgKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC1oZWFkZXItbW9udGhcIilcbiAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwiZGVmYXVsdFwiKVxuICAgICAgICAub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQ6IGFueSkge1xuICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb24oY2hhcnRFbGVtZW50cywgbW9udGhJbmZvKTtcbiAgICAgICAgfSk7XG5cbiAgICBpZiAoaGVhZGVyTW9udGhDb2xvcikge1xuICAgICAgICBoZWFkZXJNb250aC5zdHlsZShcImZpbGxcIiwgaGVhZGVyTW9udGhDb2xvcik7XG4gICAgfVxuICAgIGhlYWRlckhlaWdodCArPSBoZWFkZXJNb250aFNpemUuaGVpZ2h0O1xuXG4gICAgLy8gaGVhZGVyIHllYXJcbiAgICBsZXQgaGVhZGVyWWVhckNvbG9yID0gbnVsbDtcbiAgICBpZiAobW9udGhJbmZvLmhlYWRlclllYXJDb2xvcikge1xuICAgICAgICBoZWFkZXJZZWFyQ29sb3IgPSBtb250aEluZm8uaGVhZGVyWWVhckNvbG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChtb250aEluZm8uY29sb3IpIHtcbiAgICAgICAgICAgIGhlYWRlclllYXJDb2xvciA9IG1vbnRoSW5mby5jb2xvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBsZXQgaGVhZGVyWWVhciA9IGhlYWRlckdyb3VwXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgIC50ZXh0KGhlYWRlclllYXJUZXh0KSAvLyBwaXZvdCBhdCBjZW50ZXJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcInRpdGxlWWVhclwiKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXG4gICAgICAgICAgICAgICAgY2VsbFNpemUgLyA0LjAgK1xuICAgICAgICAgICAgICAgIFwiLFwiICtcbiAgICAgICAgICAgICAgICAoaGVhZGVySGVpZ2h0ICsgaGVhZGVyWWVhclNpemUuaGVpZ2h0KSArXG4gICAgICAgICAgICAgICAgXCIpXCJcbiAgICAgICAgKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC1oZWFkZXIteWVhclwiKVxuICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJkZWZhdWx0XCIpXG4gICAgICAgIC5hdHRyKFwiZm9udC13ZWlnaHRcIiwgXCJib2xkXCIpXG4gICAgICAgIC5vbihcImNsaWNrXCIsIGZ1bmN0aW9uIChldmVudDogYW55KSB7XG4gICAgICAgICAgICBjbGVhclNlbGVjdGlvbihjaGFydEVsZW1lbnRzLCBtb250aEluZm8pO1xuICAgICAgICB9KTtcblxuICAgIGlmIChoZWFkZXJZZWFyQ29sb3IpIHtcbiAgICAgICAgaGVhZGVyWWVhci5zdHlsZShcImZpbGxcIiwgaGVhZGVyWWVhckNvbG9yKTtcbiAgICB9XG5cbiAgICBoZWFkZXJIZWlnaHQgKz0gaGVhZGVyWWVhclNpemUuaGVpZ2h0O1xuXG4gICAgLy8gZGF0YXNldCByb3RhdG9yXG4gICAgbGV0IGRhdGFzZXROYW1lU2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXG4gICAgICAgIGRhdGFzZXROYW1lLFxuICAgICAgICBcInRyYWNrZXItbW9udGgtdGl0bGUtcm90YXRvclwiXG4gICAgKTtcbiAgICBpZiAoXG4gICAgICAgIG1vbnRoSW5mby5tb2RlID09PSBcImNpcmNsZVwiIHx8XG4gICAgICAgIChtb250aEluZm8ubW9kZSA9PT0gXCJhbm5vdGF0aW9uXCIgJiZcbiAgICAgICAgICAgICFtb250aEluZm8uc2hvd0Fubm90YXRpb25PZkFsbFRhcmdldHMpXG4gICAgKSB7XG4gICAgICAgIGxldCBkYXRhc2V0Um90YXRvciA9IGhlYWRlckdyb3VwXG4gICAgICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAgICAgLnRleHQoZGF0YXNldE5hbWUpXG4gICAgICAgICAgICAuYXR0cihcbiAgICAgICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcbiAgICAgICAgICAgICAgICAgICAgMy41ICogY2VsbFNpemUgK1xuICAgICAgICAgICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICAgICAgICAgIGRhdGFzZXROYW1lU2l6ZS5oZWlnaHQgK1xuICAgICAgICAgICAgICAgICAgICBcIilcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbW9udGgtdGl0bGUtcm90YXRvclwiKVxuICAgICAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwicG9pbnRlclwiKVxuICAgICAgICAgICAgLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgICAgICAgICAvLyBzaG93IG5leHQgdGFyZ2V0XG4gICAgICAgICAgICAgICAgaWYgKHRvTmV4dERhdGFzZXQocmVuZGVySW5mbywgbW9udGhJbmZvKSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBjbGVhciBjaXJjbGVzXG4gICAgICAgICAgICAgICAgICAgIGNsZWFyU2VsZWN0aW9uKGNoYXJ0RWxlbWVudHMsIG1vbnRoSW5mbyk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbnZhcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMsXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgY3VyTW9udGhEYXRlXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIGNoYXJ0RWxlbWVudHNbXCJyb3RhdG9yXCJdID0gZGF0YXNldFJvdGF0b3I7XG4gICAgfVxuXG4gICAgLy8gdmFsdWUgbW9uaXRvclxuICAgIGxldCBtb25pdG9yVGV4dFNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKFxuICAgICAgICBcIjAuMDAwMFwiLFxuICAgICAgICBcInRyYWNrZXItbW9udGgtdGl0bGUtbW9uaXRvclwiXG4gICAgKTtcbiAgICBsZXQgbW9uaXRvciA9IGhlYWRlckdyb3VwXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgIC50ZXh0KFwiXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJtb25pdG9yXCIpXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLXRpdGxlLW1vbml0b3JcIilcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xuICAgICAgICAgICAgICAgIDMuNSAqIGNlbGxTaXplICtcbiAgICAgICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICAgICAgKGRhdGFzZXROYW1lU2l6ZS5oZWlnaHQgKyBtb25pdG9yVGV4dFNpemUuaGVpZ2h0KSArXG4gICAgICAgICAgICAgICAgXCIpXCJcbiAgICAgICAgKVxuICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJwb2ludGVyXCIpXG4gICAgICAgIC5zdHlsZShcImZpbGxcIiwgbW9udGhJbmZvLnNlbGVjdGVkUmluZ0NvbG9yKTtcbiAgICBjaGFydEVsZW1lbnRzW1wibW9uaXRvclwiXSA9IG1vbml0b3I7XG5cbiAgICAvLyBhcnJvdyBsZWZ0XG4gICAgbGV0IGFycm93U2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXCI8XCIsIFwidHJhY2tlci1tb250aC10aXRsZS1hcnJvd1wiKTtcbiAgICBsZXQgYXJyb3dMZWZ0ID0gaGVhZGVyR3JvdXBcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLnRleHQoXCI8XCIpIC8vIHBpdm90IGF0IGNlbnRlclxuICAgICAgICAuYXR0cihcImlkXCIsIFwiYXJyb3dMZWZ0XCIpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcbiAgICAgICAgICAgICAgICA1LjUgKiBjZWxsU2l6ZSArXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xuICAgICAgICAgICAgICAgIChoZWFkZXJIZWlnaHQgLyAyICsgYXJyb3dTaXplLmhlaWdodCAvIDIpICtcbiAgICAgICAgICAgICAgICBcIilcIlxuICAgICAgICApXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLXRpdGxlLWFycm93XCIpXG4gICAgICAgIC5vbihcImNsaWNrXCIsIGZ1bmN0aW9uIChldmVudDogYW55KSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImxlZnQgYXJyb3cgY2xpY2tlZFwiKTtcbiAgICAgICAgICAgIGNsZWFyU2VsZWN0aW9uKGNoYXJ0RWxlbWVudHMsIG1vbnRoSW5mbyk7XG4gICAgICAgICAgICBtb250aEluZm8uc2VsZWN0ZWREYXRlID0gXCJcIjtcbiAgICAgICAgICAgIGxldCBwcmV2TW9udGhEYXRlID0gY3VyTW9udGhEYXRlLmNsb25lKCkuYWRkKC0xLCBcIm1vbnRoXCIpO1xuICAgICAgICAgICAgcmVmcmVzaChcbiAgICAgICAgICAgICAgICBjYW52YXMsXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cyxcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICAgICAgICAgIG1vbnRoSW5mbyxcbiAgICAgICAgICAgICAgICBwcmV2TW9udGhEYXRlXG4gICAgICAgICAgICApO1xuICAgICAgICB9KVxuICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJwb2ludGVyXCIpO1xuXG4gICAgLy8gYXJyb3cgcmlnaHRcbiAgICBsZXQgYXJyb3dSaWdodCA9IGhlYWRlckdyb3VwXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgIC50ZXh0KFwiPlwiKSAvLyBwaXZvdCBhdCBjZW50ZXJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImFycm93TGVmdFwiKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXG4gICAgICAgICAgICAgICAgNi41ICogY2VsbFNpemUgK1xuICAgICAgICAgICAgICAgIFwiLFwiICtcbiAgICAgICAgICAgICAgICAoaGVhZGVySGVpZ2h0IC8gMiArIGFycm93U2l6ZS5oZWlnaHQgLyAyKSArXG4gICAgICAgICAgICAgICAgXCIpXCJcbiAgICAgICAgKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC10aXRsZS1hcnJvd1wiKVxuICAgICAgICAub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQ6IGFueSkge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJyaWdodCBhcnJvdyBjbGlja2VkXCIpO1xuICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb24oY2hhcnRFbGVtZW50cywgbW9udGhJbmZvKTtcblxuICAgICAgICAgICAgbGV0IG5leHRNb250aERhdGUgPSBjdXJNb250aERhdGUuY2xvbmUoKS5hZGQoMSwgXCJtb250aFwiKTtcbiAgICAgICAgICAgIHJlZnJlc2goXG4gICAgICAgICAgICAgICAgY2FudmFzLFxuICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMsXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgICAgICAgICBtb250aEluZm8sXG4gICAgICAgICAgICAgICAgbmV4dE1vbnRoRGF0ZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwicG9pbnRlclwiKTtcblxuICAgIC8vIGFycm93IHRvZGF5XG4gICAgbGV0IGFycm93VG9kYXkgPSBoZWFkZXJHcm91cFxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAudGV4dChcIuKXplwiKSAvLyBwaXZvdCBhdCBjZW50ZXJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImFycm93VG9kYXlcIilcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xuICAgICAgICAgICAgICAgIDYgKiBjZWxsU2l6ZSArXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xuICAgICAgICAgICAgICAgIChoZWFkZXJIZWlnaHQgLyAyICsgYXJyb3dTaXplLmhlaWdodCAvIDIpICtcbiAgICAgICAgICAgICAgICBcIilcIlxuICAgICAgICApXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLXRpdGxlLWFycm93XCIpXG4gICAgICAgIC5vbihcImNsaWNrXCIsIGZ1bmN0aW9uIChldmVudDogYW55KSB7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcInRvZGF5IGFycm93IGNsaWNrZWRcIik7XG4gICAgICAgICAgICBjbGVhclNlbGVjdGlvbihjaGFydEVsZW1lbnRzLCBtb250aEluZm8pO1xuXG4gICAgICAgICAgICBsZXQgdG9kYXlEYXRlID0gaGVscGVyLmdldERhdGVUb2RheShyZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgcmVmcmVzaChjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIG1vbnRoSW5mbywgdG9kYXlEYXRlKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwicG9pbnRlclwiKTtcblxuICAgIGhlYWRlckhlaWdodCArPSB5U3BhY2luZztcblxuICAgIC8vIHdlZWsgZGF5IG5hbWVzXG4gICAgbGV0IHdlZWtkYXlOYW1lcyA9IFtcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXTtcbiAgICBpZiAobW9udGhJbmZvLnN0YXJ0V2Vla09uLnRvTG93ZXJDYXNlKCkgPT09IFwibW9uXCIpIHtcbiAgICAgICAgd2Vla2RheU5hbWVzLnB1c2god2Vla2RheU5hbWVzLnNoaWZ0KCkpO1xuICAgIH1cbiAgICBsZXQgd2Vla2RheU5hbWVTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcbiAgICAgICAgd2Vla2RheU5hbWVzWzBdLFxuICAgICAgICBcInRyYWNrZXItbW9udGgtd2Vla2RheVwiXG4gICAgKTtcbiAgICBsZXQgd2Vla0RheXMgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYVxuICAgICAgICAuc2VsZWN0QWxsKFwid2Vla0RheXNcIilcbiAgICAgICAgLmRhdGEod2Vla2RheU5hbWVzKVxuICAgICAgICAuZW50ZXIoKVxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAudGV4dChmdW5jdGlvbiAobjogc3RyaW5nKSB7XG4gICAgICAgICAgICByZXR1cm4gbjtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24gKG46IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICBsZXQgc3RyVHJhbnNsYXRlID1cbiAgICAgICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXG4gICAgICAgICAgICAgICAgKGkgKyAwLjUpICogY2VsbFNpemUgK1xuICAgICAgICAgICAgICAgIFwiLFwiICtcbiAgICAgICAgICAgICAgICAoaGVhZGVySGVpZ2h0ICsgd2Vla2RheU5hbWVTaXplLmhlaWdodCkgK1xuICAgICAgICAgICAgICAgIFwiKVwiO1xuICAgICAgICAgICAgcmV0dXJuIHN0clRyYW5zbGF0ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbW9udGgtd2Vla2RheVwiKVxuICAgICAgICAuYXR0cihcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpXG4gICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIilcbiAgICAgICAgLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgICAgIGNsZWFyU2VsZWN0aW9uKGNoYXJ0RWxlbWVudHMsIG1vbnRoSW5mbyk7XG4gICAgICAgIH0pO1xuICAgIGhlYWRlckhlaWdodCArPSB3ZWVrZGF5TmFtZVNpemUuaGVpZ2h0ICsgeVNwYWNpbmc7XG5cbiAgICAvLyBkaXZpZGluZyBsaW5lXG4gICAgbGV0IGRpdmlkaW5nTGluZUhlaWdodCA9IDE7XG4gICAgbGV0IGRpdmlkaW5nTGluZUNvbG9yID0gbnVsbDtcbiAgICBpZiAobW9udGhJbmZvLmRpdmlkaW5nTGluZUNvbG9yKSB7XG4gICAgICAgIGRpdmlkaW5nTGluZUNvbG9yID0gbW9udGhJbmZvLmRpdmlkaW5nTGluZUNvbG9yO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChtb250aEluZm8uY29sb3IpIHtcbiAgICAgICAgICAgIGRpdmlkaW5nTGluZUNvbG9yID0gbW9udGhJbmZvLmNvbG9yO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCBkaXZpZGluZ0xpbmUgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYVxuICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcInhcIiwgMClcbiAgICAgICAgLmF0dHIoXCJ5XCIsIGhlYWRlckhlaWdodClcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCA2LjUgKiBjZWxsU2l6ZSArIHdlZWtkYXlOYW1lU2l6ZS53aWR0aClcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgZGl2aWRpbmdMaW5lSGVpZ2h0KVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC1kaXZpZGluZy1saW5lXCIpO1xuXG4gICAgaWYgKGRpdmlkaW5nTGluZUNvbG9yKSB7XG4gICAgICAgIGRpdmlkaW5nTGluZS5zdHlsZShcImZpbGxcIiwgZGl2aWRpbmdMaW5lQ29sb3IpO1xuICAgIH1cbiAgICBoZWFkZXJIZWlnaHQgKz0gZGl2aWRpbmdMaW5lSGVpZ2h0O1xuXG4gICAgaGVhZGVyR3JvdXAuYXR0cihcImhlaWdodFwiLCBoZWFkZXJIZWlnaHQpO1xuICAgIGNoYXJ0RWxlbWVudHNbXCJoZWFkZXJcIl0gPSBoZWFkZXJHcm91cDtcblxuICAgIC8vIE1vdmUgc2libGluZyBhcmVhc1xuICAgIGhlbHBlci5tb3ZlQXJlYShjaGFydEVsZW1lbnRzLmRhdGFBcmVhLCAwLCBoZWFkZXJIZWlnaHQpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJNb250aERheXMoXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgbW9udGhJbmZvOiBNb250aEluZm8sXG4gICAgY3VyTW9udGhEYXRlOiBNb21lbnRcbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyTW9udGhEYXlzXCIpO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8pO1xuICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoSW5mbyk7XG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFtb250aEluZm8pIHJldHVybjtcblxuICAgIGxldCBtb2RlID0gbW9udGhJbmZvLm1vZGU7XG4gICAgaWYgKG1vZGUgIT09IFwiY2lyY2xlXCIgJiYgbW9kZSAhPT0gXCJhbm5vdGF0aW9uXCIpIHtcbiAgICAgICAgcmV0dXJuIFwiVW5rbm93biBtb250aCB2aWV3IG1vZGVcIjtcbiAgICB9XG5cbiAgICBsZXQgY3VyRGF0YXNldElkID0gbW9udGhJbmZvLnNlbGVjdGVkRGF0YXNldDtcbiAgICBpZiAoY3VyRGF0YXNldElkID09PSBudWxsKSByZXR1cm47XG4gICAgbGV0IGRhdGFzZXQgPSByZW5kZXJJbmZvLmRhdGFzZXRzLmdldERhdGFzZXRCeUlkKGN1ckRhdGFzZXRJZCk7XG4gICAgaWYgKCFkYXRhc2V0KSByZXR1cm47XG4gICAgLy8gY29uc29sZS5sb2coZGF0YXNldCk7XG5cbiAgICBsZXQgY3VyRGF0YXNldEluZGV4ID0gbW9udGhJbmZvLmRhdGFzZXQuZmluZEluZGV4KChpZCkgPT4ge1xuICAgICAgICByZXR1cm4gaWQgPT09IGN1ckRhdGFzZXRJZDtcbiAgICB9KTtcbiAgICBpZiAoY3VyRGF0YXNldElkIDwgMCkgY3VyRGF0YXNldEluZGV4ID0gMDtcbiAgICBsZXQgdGhyZXNob2xkID0gbW9udGhJbmZvLnRocmVzaG9sZFtjdXJEYXRhc2V0SW5kZXhdO1xuXG4gICAgbGV0IGN1ck1vbnRoID0gY3VyTW9udGhEYXRlLm1vbnRoKCk7IC8vIDB+MTFcbiAgICBsZXQgY3VyRGF5c0luTW9udGggPSBjdXJNb250aERhdGUuZGF5c0luTW9udGgoKTsgLy8gMjh+MzFcblxuICAgIGxldCBtYXhEYXlUZXh0U2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXCIzMFwiLCBcInRyYWNrZXItbW9udGgtbGFiZWxcIik7XG4gICAgbGV0IGNlbGxTaXplID1cbiAgICAgICAgTWF0aC5tYXgobWF4RGF5VGV4dFNpemUud2lkdGgsIG1heERheVRleHRTaXplLmhlaWdodCkgKiByYXRpb0NlbGxUb1RleHQ7XG4gICAgbGV0IGRvdFJhZGl1cyA9ICgoY2VsbFNpemUgLyByYXRpb0NlbGxUb1RleHQpICogcmF0aW9Eb3RUb1RleHQpIC8gMi4wO1xuICAgIGxldCBzdHJlYWtXaWR0aCA9IChjZWxsU2l6ZSAtIGRvdFJhZGl1cyAqIDIuMCkgLyAyLjA7XG4gICAgbGV0IHN0cmVha0hlaWdodCA9IDM7XG5cbiAgICAvLyBHZXQgbWluIGFuZCBtYXhcbiAgICBsZXQgeU1pbiA9IGQzLm1pbihkYXRhc2V0LmdldFZhbHVlcygpKTtcbiAgICBpZiAobW9udGhJbmZvLnlNaW5bY3VyRGF0YXNldEluZGV4XSAhPT0gbnVsbCkge1xuICAgICAgICB5TWluID0gbW9udGhJbmZvLnlNaW5bY3VyRGF0YXNldEluZGV4XTtcbiAgICB9XG4gICAgbGV0IHlNYXggPSBkMy5tYXgoZGF0YXNldC5nZXRWYWx1ZXMoKSk7XG4gICAgaWYgKG1vbnRoSW5mby55TWF4W2N1ckRhdGFzZXRJbmRleF0gIT09IG51bGwpIHtcbiAgICAgICAgeU1heCA9IG1vbnRoSW5mby55TWF4W2N1ckRhdGFzZXRJbmRleF07XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGB5TWluOiR7eU1pbn0sIHlNYXg6JHt5TWF4fWApO1xuICAgIGxldCBhbGxvd1NjYWxlZFZhbHVlID0gdHJ1ZTtcbiAgICBpZiAoeU1heCA9PT0gbnVsbCB8fCB5TWluID09PSBudWxsIHx8IHlNYXggPD0geU1pbikge1xuICAgICAgICAvLyBzY2FsZWRWYWx1ZSBjYW4gbm90IGJlIGNhbGN1bGF0ZWQsIGRvIG5vdCB1c2UgZ3JhZGllbnQgY29sb3JcbiAgICAgICAgYWxsb3dTY2FsZWRWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhcInNjYWxlZFZhbHVlIG5vdCBhbGxvd2VkXCIpO1xuICAgIH1cblxuICAgIC8vIFN0YXJ0IGFuZCBlbmRcbiAgICBjb25zdCBtb250aFN0YXJ0RGF0ZSA9IGN1ck1vbnRoRGF0ZS5jbG9uZSgpLnN0YXJ0T2YoXCJtb250aFwiKTtcbiAgICBsZXQgc3RhcnREYXRlID0gbW9udGhTdGFydERhdGVcbiAgICAgICAgLmNsb25lKClcbiAgICAgICAgLnN1YnRyYWN0KG1vbnRoU3RhcnREYXRlLmRheSgpLCBcImRheXNcIik7XG4gICAgaWYgKG1vbnRoSW5mby5zdGFydFdlZWtPbi50b0xvd2VyQ2FzZSgpID09PSBcIm1vblwiKSB7XG4gICAgICAgIHN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZS5hZGQoMSwgXCJkYXlzXCIpO1xuICAgIH1cbiAgICBjb25zdCBtb250aEVuZERhdGUgPSBjdXJNb250aERhdGUuY2xvbmUoKS5lbmRPZihcIm1vbnRoXCIpO1xuICAgIGxldCBlbmREYXRlID0gbW9udGhFbmREYXRlLmNsb25lKCkuYWRkKDcgLSBtb250aEVuZERhdGUuZGF5KCkgLSAxLCBcImRheXNcIik7XG4gICAgaWYgKG1vbnRoSW5mby5zdGFydFdlZWtPbi50b0xvd2VyQ2FzZSgpID09PSBcIm1vblwiKSB7XG4gICAgICAgIGVuZERhdGUgPSBlbmREYXRlLmFkZCgxLCBcImRheXNcIik7XG4gICAgfVxuICAgIGNvbnN0IGRhdGFTdGFydERhdGUgPSBkYXRhc2V0LmdldFN0YXJ0RGF0ZSgpO1xuICAgIGNvbnN0IGRhdGFFbmREYXRlID0gZGF0YXNldC5nZXRFbmREYXRlKCk7XG4gICAgLy8gY29uc29sZS5sb2cobW9udGhTdGFydERhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSk7XG4gICAgLy8gY29uc29sZS5sb2coc3RhcnREYXRlLmZvcm1hdChcIllZWVktTU0tRERcIikpO1xuXG4gICAgLy8gYW5ub3RhdGlvbnNcbiAgICBsZXQgc2hvd0Fubm90YXRpb24gPSBtb250aEluZm8uc2hvd0Fubm90YXRpb247XG4gICAgbGV0IGFubm90YXRpb25zID0gbW9udGhJbmZvLmFubm90YXRpb247XG4gICAgbGV0IGN1ckFubm90YXRpb24gPSBhbm5vdGF0aW9uc1tjdXJEYXRhc2V0SW5kZXhdO1xuICAgIGxldCBzaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0cyA9IG1vbnRoSW5mby5zaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0cztcblxuICAgIC8vIFByZXBhcmUgZGF0YSBmb3IgZ3JhcGhcbiAgICBsZXQgZGF5c0luTW9udGhWaWV3OiBBcnJheTxEYXlJbmZvPiA9IFtdO1xuICAgIGxldCBpbmRDb2wgPSAwO1xuICAgIGxldCBpbmRSb3cgPSAwO1xuICAgIGxldCBpbmQgPSAwO1xuICAgIGZvciAoXG4gICAgICAgIGxldCBjdXJEYXRlID0gc3RhcnREYXRlLmNsb25lKCk7XG4gICAgICAgIGN1ckRhdGUgPD0gZW5kRGF0ZTtcbiAgICAgICAgY3VyRGF0ZS5hZGQoMSwgXCJkYXlzXCIpXG4gICAgKSB7XG4gICAgICAgIC8vIG5vdCBzdXJlIHdoeSB3ZSBuZWVkIHRvIGRvIHRoaXMgdG8gc3RhYmxpemUgdGhlIGRhdGVcbiAgICAgICAgLy8gc29tZXRpbWVzLCBjdXJWYWx1ZSBpcyB3cm9uZyB3aXRob3V0IGRvaW5nIHRoaXNcbiAgICAgICAgY3VyRGF0ZSA9IGhlbHBlci5zdHJUb0RhdGUoXG4gICAgICAgICAgICBoZWxwZXIuZGF0ZVRvU3RyKGN1ckRhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCksXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGN1ckRhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSA9PT0gXCIyMDIxLTA5LTEzXCIpIHtcbiAgICAgICAgICAgIGxvZ1RvQ29uc29sZSA9IGZhbHNlOyAvLyBDaGFuZ2UgdGhpcyB0byBkbyBkdWJ1Z2dpbmdcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb250aEluZm8uc3RhcnRXZWVrT24udG9Mb3dlckNhc2UoKSA9PT0gXCJtb25cIikge1xuICAgICAgICAgICAgaW5kQ29sID0gY3VyRGF0ZS5kYXkoKSAtIDE7XG4gICAgICAgICAgICBpZiAoaW5kQ29sIDwgMCkge1xuICAgICAgICAgICAgICAgIGluZENvbCA9IDY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbmRSb3cgPSBNYXRoLmZsb29yKGluZCAvIDcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5kQ29sID0gY3VyRGF0ZS5kYXkoKTsgLy8gMH42XG4gICAgICAgICAgICBpbmRSb3cgPSBNYXRoLmZsb29yKGluZCAvIDcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaXMgdGhpcyBkYXkgaW4gdGhpcyBtb250aFxuICAgICAgICBsZXQgaXNJblRoaXNNb250aCA9IHRydWU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGN1ckRhdGUuZGlmZihtb250aFN0YXJ0RGF0ZSkgPCAwIHx8XG4gICAgICAgICAgICBjdXJEYXRlLmRpZmYobW9udGhFbmREYXRlKSA+IDBcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpc0luVGhpc01vbnRoID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaXMgdGhpcyBkYXkgb3V0IG9mIGRhdGEgcmFuZ2VcbiAgICAgICAgbGV0IGlzT3V0T2ZEYXRhUmFuZ2UgPSB0cnVlO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBkYXRhU3RhcnREYXRlICYmXG4gICAgICAgICAgICBkYXRhRW5kRGF0ZSAmJlxuICAgICAgICAgICAgY3VyRGF0ZS5kaWZmKGRhdGFTdGFydERhdGUpID49IDAgJiZcbiAgICAgICAgICAgIGN1ckRhdGUuZGlmZihkYXRhRW5kRGF0ZSkgPD0gMFxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlzT3V0T2ZEYXRhUmFuZ2UgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1clZhbHVlID0gZGF0YXNldC5nZXRWYWx1ZShjdXJEYXRlKTtcbiAgICAgICAgaWYgKGxvZ1RvQ29uc29sZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YXNldCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhoZWxwZXIuZGF0ZVRvU3RyKGN1ckRhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCkpO1xuICAgICAgICAgICAgY29uc29sZS5sb2coY3VyVmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2hvd0NpcmNsZVxuICAgICAgICBsZXQgc2hvd0NpcmNsZSA9IGZhbHNlO1xuICAgICAgICBpZiAoIW1vbnRoSW5mby5jaXJjbGVDb2xvckJ5VmFsdWUpIHtcbiAgICAgICAgICAgIC8vIHNob3duIG9yIG5vdCBzaG93blxuICAgICAgICAgICAgaWYgKGN1clZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1clZhbHVlID4gdGhyZXNob2xkKSB7XG4gICAgICAgICAgICAgICAgICAgIHNob3dDaXJjbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghYWxsb3dTY2FsZWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChjdXJWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY3VyVmFsdWUgPiB0aHJlc2hvbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDaXJjbGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaG93Q2lyY2xlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNjYWxlZFZhbHVlXG4gICAgICAgIGxldCBzY2FsZWRWYWx1ZSA9IG51bGw7XG4gICAgICAgIGlmIChtb250aEluZm8uY2lyY2xlQ29sb3JCeVZhbHVlKSB7XG4gICAgICAgICAgICBpZiAoYWxsb3dTY2FsZWRWYWx1ZSAmJiBjdXJWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHNjYWxlZFZhbHVlID0gKGN1clZhbHVlIC0geU1pbikgLyAoeU1heCAtIHlNaW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChsb2dUb0NvbnNvbGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHlNaW4pO1xuICAgICAgICAgICAgY29uc29sZS5sb2coeU1heCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhzY2FsZWRWYWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBzdHJlYWtJbiBhbmQgc3RyZWFrT3V0XG4gICAgICAgIGxldCBuZXh0VmFsdWUgPSBkYXRhc2V0LmdldFZhbHVlKGN1ckRhdGUsIDEpO1xuICAgICAgICBsZXQgcHJldlZhbHVlID0gZGF0YXNldC5nZXRWYWx1ZShjdXJEYXRlLCAtMSk7XG4gICAgICAgIGxldCBzdHJlYWtJbiA9IGZhbHNlO1xuICAgICAgICBpZiAoY3VyVmFsdWUgIT09IG51bGwgJiYgY3VyVmFsdWUgPiB0aHJlc2hvbGQpIHtcbiAgICAgICAgICAgIGlmIChwcmV2VmFsdWUgIT09IG51bGwgJiYgcHJldlZhbHVlID4gdGhyZXNob2xkKSB7XG4gICAgICAgICAgICAgICAgc3RyZWFrSW4gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGxldCBzdHJlYWtPdXQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGN1clZhbHVlICE9PSBudWxsICYmIGN1clZhbHVlID4gdGhyZXNob2xkKSB7XG4gICAgICAgICAgICBpZiAobmV4dFZhbHVlICE9PSBudWxsICYmIG5leHRWYWx1ZSA+IHRocmVzaG9sZCkge1xuICAgICAgICAgICAgICAgIHN0cmVha091dCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxvZ1RvQ29uc29sZSkge1xuICAgICAgICAgICAgY29uc29sZS5sb2coXG4gICAgICAgICAgICAgICAgYHByZVZhbHVlOiAke3ByZXZWYWx1ZX0sIGN1clZhbHVlOiAke2N1clZhbHVlfSwgbmV4dFZhbHVlOiAke25leHRWYWx1ZX1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgY29uc29sZS5sb2cobW9udGhJbmZvLnRocmVzaG9sZCk7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgc3RyZWFrSW46ICR7c3RyZWFrSW59LCBzdHJlYWtPdXQ6ICR7c3RyZWFrT3V0fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHRleHRBbm5vdGF0aW9uID0gXCJcIjtcbiAgICAgICAgaWYgKHNob3dBbm5vdGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAoIXNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1clZhbHVlID4gdGhyZXNob2xkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRleHRBbm5vdGF0aW9uID0gY3VyQW5ub3RhdGlvbjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGRhdGFzZXRJZCBvZiBtb250aEluZm8uZGF0YXNldCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YXNldEluZGV4ID0gbW9udGhJbmZvLmRhdGFzZXQuZmluZEluZGV4KChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkID09PSBkYXRhc2V0SWQ7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YXNldEluZGV4ID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2ID0gcmVuZGVySW5mby5kYXRhc2V0c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmdldFZhbHVlKGN1ckRhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHQgPSBtb250aEluZm8udGhyZXNob2xkW2RhdGFzZXRJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodiAhPT0gbnVsbCAmJiB2ID4gdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRBbm5vdGF0aW9uICs9IGFubm90YXRpb25zW2RhdGFzZXRJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBkYXlzSW5Nb250aFZpZXcucHVzaCh7XG4gICAgICAgICAgICBkYXRlOiBoZWxwZXIuZGF0ZVRvU3RyKGN1ckRhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCksXG4gICAgICAgICAgICB2YWx1ZTogY3VyVmFsdWUsXG4gICAgICAgICAgICBzY2FsZWRWYWx1ZTogc2NhbGVkVmFsdWUsXG4gICAgICAgICAgICBkYXlJbk1vbnRoOiBjdXJEYXRlLmRhdGUoKSxcbiAgICAgICAgICAgIGlzSW5UaGlzTW9udGg6IGlzSW5UaGlzTW9udGgsXG4gICAgICAgICAgICBpc091dE9mRGF0YVJhbmdlOiBpc091dE9mRGF0YVJhbmdlLFxuICAgICAgICAgICAgcm93OiBpbmRSb3csXG4gICAgICAgICAgICBjb2w6IGluZENvbCxcbiAgICAgICAgICAgIHNob3dDaXJjbGU6IHNob3dDaXJjbGUsXG4gICAgICAgICAgICBzdHJlYWtJbjogc3RyZWFrSW4sXG4gICAgICAgICAgICBzdHJlYWtPdXQ6IHN0cmVha091dCxcbiAgICAgICAgICAgIGFubm90YXRpb246IHRleHRBbm5vdGF0aW9uLFxuICAgICAgICB9KTtcblxuICAgICAgICBpbmQrKztcblxuICAgICAgICAvLyBEaXNhYmxlIGxvZ2dpbmcgc3RhcnRzIGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBsb29wXG4gICAgICAgIGlmIChsb2dUb0NvbnNvbGUpIHtcbiAgICAgICAgICAgIGxvZ1RvQ29uc29sZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKGRheXNJbk1vbnRoVmlldyk7XG4gICAgLy8gY29uc29sZS5sb2coZGF5c0luTW9udGhWaWV3LmZpbHRlcihmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgIC8vICAgICByZXR1cm4gZC5zdHJlYWtJbjtcbiAgICAvLyB9KSk7XG4gICAgLy8gY29uc29sZS5sb2coZGF5c0luTW9udGhWaWV3LmZpbHRlcihmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgIC8vICAgICByZXR1cm4gZC5zdHJlYWtPdXQ7XG4gICAgLy8gfSkpO1xuXG4gICAgLy8gc2NhbGVcbiAgICBsZXQgdG90YWxEYXlCbG9ja1dpZHRoID0gKGluZENvbCArIDEpICogY2VsbFNpemU7XG4gICAgbGV0IHRvdGFsQmxvY2tIZWlnaHQgPSAoaW5kUm93ICsgMSkgKiBjZWxsU2l6ZTtcbiAgICBsZXQgc2NhbGUgPSBkM1xuICAgICAgICAuc2NhbGVMaW5lYXIoKVxuICAgICAgICAuZG9tYWluKFstMC41LCA2LjVdKVxuICAgICAgICAucmFuZ2UoWzAsIHRvdGFsRGF5QmxvY2tXaWR0aF0pO1xuXG4gICAgLy8gc3RyZWFrIGxpbmVzXG4gICAgaWYgKG1vZGUgPT09IFwiY2lyY2xlXCIgJiYgbW9udGhJbmZvLnNob3dDaXJjbGUgJiYgbW9udGhJbmZvLnNob3dTdHJlYWspIHtcbiAgICAgICAgbGV0IHN0cmVha0NvbG9yID0gXCIjNjliM2EyXCI7XG4gICAgICAgIGlmIChtb250aEluZm8uY2lyY2xlQ29sb3IpIHtcbiAgICAgICAgICAgIHN0cmVha0NvbG9yID0gbW9udGhJbmZvLmNpcmNsZUNvbG9yO1xuICAgICAgICB9IGVsc2UgaWYgKG1vbnRoSW5mby5jb2xvcikge1xuICAgICAgICAgICAgc3RyZWFrQ29sb3IgPSBtb250aEluZm8uY29sb3I7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coc3RyZWFrQ29sb3IpO1xuXG4gICAgICAgIGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJzdHJlYWtJblwiKVxuICAgICAgICAgICAgLmRhdGEoXG4gICAgICAgICAgICAgICAgZGF5c0luTW9udGhWaWV3LmZpbHRlcihmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZC5zdHJlYWtJbjtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAgIC5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgICAgICAvLyAuYXR0cihcImlkXCIsIGZ1bmN0aW9uKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gXCJpblwiICsgZC5kYXRlLmZvcm1hdChcIllZWVktTU0tRERcIik7XG4gICAgICAgICAgICAvLyB9KVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgbGV0IHggPSBzY2FsZShkLmNvbCkgLSBkb3RSYWRpdXMgLSBzdHJlYWtXaWR0aDtcbiAgICAgICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5yb3cpIC0gc3RyZWFrSGVpZ2h0IC8gMi4wO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgc3RyZWFrV2lkdGgpXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBzdHJlYWtIZWlnaHQpXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgaWYgKGQuc2hvd0NpcmNsZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW1vbnRoSW5mby5jaXJjbGVDb2xvckJ5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJlYWtDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZC5zY2FsZWRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQzLmludGVycG9sYXRlTGFiKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid2hpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYWtDb2xvclxuICAgICAgICAgICAgICAgICAgICAgICAgKShkLnNjYWxlZFZhbHVlICogMC44ICsgMC4yKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gXCJub25lXCI7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN0eWxlKFwib3BhY2l0eVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZC5pc091dE9mRGF0YVJhbmdlIHx8XG4gICAgICAgICAgICAgICAgICAgIChtb250aEluZm8uZGltTm90SW5Nb250aCAmJiAhZC5pc0luVGhpc01vbnRoKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMC4yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gMS4wO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgLnNlbGVjdEFsbChcInN0cmVha091dFwiKVxuICAgICAgICAgICAgLmRhdGEoXG4gICAgICAgICAgICAgICAgZGF5c0luTW9udGhWaWV3LmZpbHRlcihmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZC5zdHJlYWtPdXQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgLy8gLmF0dHIoXCJpZFwiLCBmdW5jdGlvbihkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAvLyAgICAgcmV0dXJuIFwib3V0XCIgKyBkLmRhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcbiAgICAgICAgICAgIC8vIH0pXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgICAgICBsZXQgeCA9IHNjYWxlKGQuY29sKSArIGRvdFJhZGl1cztcbiAgICAgICAgICAgICAgICByZXR1cm4geDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5yb3cpIC0gc3RyZWFrSGVpZ2h0IC8gMi4wO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgc3RyZWFrV2lkdGgpXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBzdHJlYWtIZWlnaHQpXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgaWYgKGQuc2hvd0NpcmNsZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW1vbnRoSW5mby5jaXJjbGVDb2xvckJ5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdHJlYWtDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZC5zY2FsZWRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQzLmludGVycG9sYXRlTGFiKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid2hpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYWtDb2xvclxuICAgICAgICAgICAgICAgICAgICAgICAgKShkLnNjYWxlZFZhbHVlICogMC44ICsgMC4yKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gXCJub25lXCI7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN0eWxlKFwib3BhY2l0eVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZC5pc091dE9mRGF0YVJhbmdlIHx8XG4gICAgICAgICAgICAgICAgICAgIChtb250aEluZm8uZGltTm90SW5Nb250aCAmJiAhZC5pc0luVGhpc01vbnRoKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMC4yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gMS4wO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gY2lyY2xlc1xuICAgIGxldCBjaXJjbGVDb2xvciA9IFwiIzY5YjNhMlwiO1xuICAgIGlmIChtb250aEluZm8uY2lyY2xlQ29sb3IpIHtcbiAgICAgICAgY2lyY2xlQ29sb3IgPSBtb250aEluZm8uY2lyY2xlQ29sb3I7XG4gICAgfSBlbHNlIGlmIChtb250aEluZm8uY29sb3IpIHtcbiAgICAgICAgY2lyY2xlQ29sb3IgPSBtb250aEluZm8uY29sb3I7XG4gICAgfVxuICAgIGlmIChtb2RlID09PSBcImNpcmNsZVwiICYmIG1vbnRoSW5mby5zaG93Q2lyY2xlKSB7XG4gICAgICAgIGxldCBkb3RzID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgLnNlbGVjdEFsbChcImRvdFwiKVxuICAgICAgICAgICAgLmRhdGEoZGF5c0luTW9udGhWaWV3KVxuICAgICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAgIC5hcHBlbmQoXCJjaXJjbGVcIilcbiAgICAgICAgICAgIC5hdHRyKFwiclwiLCBkb3RSYWRpdXMpXG4gICAgICAgICAgICAuYXR0cihcImN4XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjYWxlKGQuY29sKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcImN5XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjYWxlKGQucm93KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgaWYgKGQuc2hvd0NpcmNsZSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIW1vbnRoSW5mby5jaXJjbGVDb2xvckJ5VmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaXJjbGVDb2xvcjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoZC5zY2FsZWRWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNjYWxlZENvbG9yID0gZDMuaW50ZXJwb2xhdGVMYWIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ3aGl0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpcmNsZUNvbG9yXG4gICAgICAgICAgICAgICAgICAgICAgICApKGQuc2NhbGVkVmFsdWUgKiAwLjggKyAwLjIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZC5zY2FsZWRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhzY2FsZWRDb2xvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGVkQ29sb3I7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJub25lXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwibm9uZVwiO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdHlsZShcIm9wYWNpdHlcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGQuaXNPdXRPZkRhdGFSYW5nZSB8fFxuICAgICAgICAgICAgICAgICAgICAobW9udGhJbmZvLmRpbU5vdEluTW9udGggJiYgIWQuaXNJblRoaXNNb250aClcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIDEuMDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJkZWZhdWx0XCIpO1xuICAgIH1cblxuICAgIC8vIHRvZGF5IHJpbmdzXG4gICAgbGV0IHRvZGF5ID0gaGVscGVyLmRhdGVUb1N0cih3aW5kb3cubW9tZW50KCksIHJlbmRlckluZm8uZGF0ZUZvcm1hdCk7XG4gICAgaWYgKG1vZGUgPT09IFwiY2lyY2xlXCIgJiYgbW9udGhJbmZvLnNob3dUb2RheVJpbmcpIHtcbiAgICAgICAgbGV0IHRvZGF5UmluZ3MgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwidG9kYXlSaW5nXCIpXG4gICAgICAgICAgICAuZGF0YShcbiAgICAgICAgICAgICAgICBkYXlzSW5Nb250aFZpZXcuZmlsdGVyKGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkLmRhdGUgPT09IHRvZGF5O1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxuICAgICAgICAgICAgLmF0dHIoXCJyXCIsIGRvdFJhZGl1cyAqIDAuOSlcbiAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5jb2wpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5yb3cpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLXRvZGF5LWNpcmNsZVwiKSAvLyBzdHJva2Ugbm90IHdvcmtzPz9cbiAgICAgICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIik7XG5cbiAgICAgICAgaWYgKG1vbnRoSW5mby50b2RheVJpbmdDb2xvciAhPT0gXCJcIikge1xuICAgICAgICAgICAgdG9kYXlSaW5ncy5zdHlsZShcInN0cm9rZVwiLCBtb250aEluZm8udG9kYXlSaW5nQ29sb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdG9kYXlSaW5ncy5zdHlsZShcInN0cm9rZVwiLCBcIndoaXRlXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gc2VsZWN0ZWQgcmluZ3NcbiAgICBpZiAobW9kZSA9PT0gXCJjaXJjbGVcIiAmJiBtb250aEluZm8uc2hvd1NlbGVjdGVkUmluZykge1xuICAgICAgICBsZXQgc2VsZWN0ZWRSaW5ncyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJzZWxlY3RlZFJpbmdcIilcbiAgICAgICAgICAgIC5kYXRhKGRheXNJbk1vbnRoVmlldylcbiAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwiY2lyY2xlXCIpXG4gICAgICAgICAgICAuYXR0cihcInJcIiwgZG90UmFkaXVzKVxuICAgICAgICAgICAgLmF0dHIoXCJjeFwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY2FsZShkLmNvbCk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJjeVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgIHJldHVybiBzY2FsZShkLnJvdyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgIHJldHVybiBcInRyYWNrZXItc2VsZWN0ZWQtY2lyY2xlLVwiICsgZC5kYXRlO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLXNlbGVjdGVkLWNpcmNsZVwiKSAvLyBzdHJva2Ugbm90IHdvcmtzPz9cbiAgICAgICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIilcbiAgICAgICAgICAgIC5zdHlsZShcInN0cm9rZVwiLCBcIm5vbmVcIik7XG4gICAgfVxuXG4gICAgLy8gbGFiZWxzXG4gICAgbGV0IGRheUxhYmFscyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgLnNlbGVjdEFsbChcImRheUxhYmVsXCIpXG4gICAgICAgIC5kYXRhKGRheXNJbk1vbnRoVmlldylcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLnRleHQoZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgIHJldHVybiBkLmRheUluTW9udGgudG9TdHJpbmcoKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcbiAgICAgICAgICAgIGxldCB0cmFuc1ggPSBzY2FsZShkLmNvbCk7XG4gICAgICAgICAgICBsZXQgdHJhbnNZID0gc2NhbGUoZC5yb3cpICsgbWF4RGF5VGV4dFNpemUuaGVpZ2h0IC8gNDtcbiAgICAgICAgICAgIGxldCBzdHJUcmFuc2xhdGUgPSBcInRyYW5zbGF0ZShcIiArIHRyYW5zWCArIFwiLFwiICsgdHJhbnNZICsgXCIpXCI7XG5cbiAgICAgICAgICAgIHJldHVybiBzdHJUcmFuc2xhdGU7XG4gICAgICAgIH0pXG4gICAgICAgIC5zdHlsZShcImZpbGwtb3BhY2l0eVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGQuaXNPdXRPZkRhdGFSYW5nZSB8fFxuICAgICAgICAgICAgICAgIChtb250aEluZm8uZGltTm90SW5Nb250aCAmJiAhZC5pc0luVGhpc01vbnRoKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDAuMjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAxLjA7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKFwiZGF0ZVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIGQuZGF0ZTtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoXCJ2YWx1ZVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIGQudmFsdWU7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKFwidmFsdWVUeXBlXCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gVmFsdWVUeXBlW2RhdGFzZXQudmFsdWVUeXBlXTtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbW9udGgtbGFiZWxcIilcbiAgICAgICAgLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgICAgIC8vIGNsZWFyIGNpcmNsZXNcbiAgICAgICAgICAgIGNsZWFyU2VsZWN0aW9uKGNoYXJ0RWxlbWVudHMsIG1vbnRoSW5mbyk7XG4gICAgICAgICAgICAvLyBzaG93IG5ldyBzZWxlY3RlZCBjaXJjbGVcbiAgICAgICAgICAgIGxldCBkYXRlID0gZDMuc2VsZWN0KHRoaXMpLmF0dHIoXCJkYXRlXCIpO1xuICAgICAgICAgICAgbW9udGhJbmZvLnNlbGVjdGVkRGF0ZSA9IGRhdGU7XG4gICAgICAgICAgICBpZiAobW9udGhJbmZvLnNob3dTZWxlY3RlZFJpbmcpIHtcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXG4gICAgICAgICAgICAgICAgICAgIC5zZWxlY3QoXCIjdHJhY2tlci1zZWxlY3RlZC1jaXJjbGUtXCIgKyBkYXRlKVxuICAgICAgICAgICAgICAgICAgICAuc3R5bGUoXCJzdHJva2VcIiwgbW9udGhJbmZvLnNlbGVjdGVkUmluZ0NvbG9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIHNob3cgdmFsdWUgb24gbW9uaXRvclxuICAgICAgICAgICAgaWYgKG1vbnRoSW5mby5zaG93U2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIGxldCBzdHJWYWx1ZSA9IGQzLnNlbGVjdCh0aGlzKS5hdHRyKFwidmFsdWVcIik7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlVHlwZSA9IGQzLnNlbGVjdCh0aGlzKS5hdHRyKFwidmFsdWVUeXBlXCIpO1xuICAgICAgICAgICAgICAgIGxldCB2YWx1ZVRleHQgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZVR5cGUgPT09IFwiVGltZVwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXlTdGFydCA9IHdpbmRvdy5tb21lbnQoXCIwMDowMFwiLCBcIkhIOm1tXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGlja1RpbWUgPSBkYXlTdGFydC5hZGQoXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUZsb2F0KHN0clZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIFwic2Vjb25kc1wiXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVGV4dCA9IHRpY2tUaW1lLmZvcm1hdChcIkhIOm1tXCIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVGV4dCA9IHN0clZhbHVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLm1vbml0b3IudGV4dCh2YWx1ZVRleHQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJwb2ludGVyXCIpO1xuXG4gICAgLy8gYW5ub3RhdGlvblxuICAgIGlmIChtb2RlID09PSBcImFubm90YXRpb25cIiAmJiBzaG93QW5ub3RhdGlvbikge1xuICAgICAgICBsZXQgZGF5QW5ub3RhdGlvbiA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJkYXlBbm5vdGF0aW9uXCIpXG4gICAgICAgICAgICAuZGF0YShkYXlzSW5Nb250aFZpZXcpXG4gICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGQuYW5ub3RhdGlvbjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xuICAgICAgICAgICAgICAgIGxldCB0cmFuc1ggPSBzY2FsZShkLmNvbCk7XG4gICAgICAgICAgICAgICAgbGV0IHRyYW5zWSA9IHNjYWxlKGQucm93KSArIG1heERheVRleHRTaXplLmhlaWdodCAvIDQ7XG4gICAgICAgICAgICAgICAgaWYgKGQuYW5ub3RhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc1kgKz0gZG90UmFkaXVzO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgc3RyVHJhbnNsYXRlID0gXCJ0cmFuc2xhdGUoXCIgKyB0cmFuc1ggKyBcIixcIiArIHRyYW5zWSArIFwiKVwiO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0clRyYW5zbGF0ZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC1hbm5vdGF0aW9uXCIpO1xuICAgIH1cblxuICAgIC8vIEV4cGFuZCBhcmVhc1xuICAgIGxldCBzdmdXaWR0aCA9IHBhcnNlRmxvYXQoY2hhcnRFbGVtZW50cy5zdmcuYXR0cihcIndpZHRoXCIpKTtcbiAgICBsZXQgc3ZnSGVpZ2h0ID0gcGFyc2VGbG9hdChjaGFydEVsZW1lbnRzLnN2Zy5hdHRyKFwiaGVpZ2h0XCIpKTtcbiAgICBsZXQgZ3JhcGhBcmVhV2lkdGggPSBwYXJzZUZsb2F0KGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLmF0dHIoXCJ3aWR0aFwiKSk7XG4gICAgbGV0IGdyYXBoQXJlYUhlaWdodCA9IHBhcnNlRmxvYXQoY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEuYXR0cihcImhlaWdodFwiKSk7XG4gICAgbGV0IHRvdGFsSGVpZ2h0ID1cbiAgICAgICAgNyAqIGNlbGxTaXplICsgcGFyc2VGbG9hdChjaGFydEVsZW1lbnRzLmhlYWRlci5hdHRyKFwiaGVpZ2h0XCIpKTtcbiAgICBsZXQgdG90YWxXaWR0aCA9IDcgKiBjZWxsU2l6ZTtcbiAgICBpZiAodG90YWxIZWlnaHQgPiBzdmdIZWlnaHQpIHtcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5zdmcsIDAsIHRvdGFsSGVpZ2h0IC0gc3ZnSGVpZ2h0KTtcbiAgICB9XG4gICAgaWYgKHRvdGFsV2lkdGggPiBzdmdXaWR0aCkge1xuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgdG90YWxXaWR0aCAtIHN2Z1dpZHRoLCAwKTtcbiAgICB9XG4gICAgaWYgKHRvdGFsSGVpZ2h0ID4gZ3JhcGhBcmVhSGVpZ2h0KSB7XG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKFxuICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsXG4gICAgICAgICAgICAwLFxuICAgICAgICAgICAgdG90YWxIZWlnaHQgLSBncmFwaEFyZWFIZWlnaHRcbiAgICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHRvdGFsV2lkdGggPiBncmFwaEFyZWFXaWR0aCkge1xuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgdG90YWxXaWR0aCAtIGdyYXBoQXJlYVdpZHRoLCAwKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlZnJlc2goXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgbW9udGhJbmZvOiBNb250aEluZm8sXG4gICAgY3VyTW9udGhEYXRlOiBNb21lbnRcbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVmcmVzaFwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIXJlbmRlck1vbnRoKSByZXR1cm47XG5cbiAgICBjaGFydEVsZW1lbnRzID0gY3JlYXRlQXJlYXMoY2hhcnRFbGVtZW50cywgY2FudmFzLCByZW5kZXJJbmZvLCBtb250aEluZm8pO1xuXG4gICAgLy8gcmVuZGVyXG4gICAgcmVuZGVyTW9udGhIZWFkZXIoXG4gICAgICAgIGNhbnZhcyxcbiAgICAgICAgY2hhcnRFbGVtZW50cyxcbiAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgbW9udGhJbmZvLFxuICAgICAgICBjdXJNb250aERhdGVcbiAgICApO1xuXG4gICAgcmVuZGVyTW9udGhEYXlzKGNhbnZhcywgY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbW9udGhJbmZvLCBjdXJNb250aERhdGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyTW9udGgoXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIG1vbnRoSW5mbzogTW9udGhJbmZvXG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlck1vbnRoXCIpO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8pO1xuICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoSW5mbyk7XG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFyZW5kZXJNb250aCkgcmV0dXJuO1xuXG4gICAgLy8gZGF0YXNldFxuICAgIGxldCBkYXRhc2V0SWRzID0gbW9udGhJbmZvLmRhdGFzZXQ7XG4gICAgbGV0IG51bUF2YWlsYWJsZURhdGFzZXQgPSAwO1xuICAgIGZvciAobGV0IGRhdGFzZXQgb2YgcmVuZGVySW5mby5kYXRhc2V0cykge1xuICAgICAgICBpZiAoIWRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkge1xuICAgICAgICAgICAgbnVtQXZhaWxhYmxlRGF0YXNldCsrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChudW1BdmFpbGFibGVEYXRhc2V0ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBcIk5vIGF2YWlsYWJsZSBkYXRhc2V0IGZvdW5kXCI7XG4gICAgfVxuICAgIHRvTmV4dERhdGFzZXQocmVuZGVySW5mbywgbW9udGhJbmZvKTtcbiAgICBpZiAobW9udGhJbmZvLnNlbGVjdGVkRGF0YXNldCA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gXCJObyBhdmFpbGFibGUgZGF0YXNldCBmb3VuZFwiO1xuICAgIH1cblxuICAgIGxldCBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzID0ge307XG4gICAgY2hhcnRFbGVtZW50cyA9IGNyZWF0ZUFyZWFzKGNoYXJ0RWxlbWVudHMsIGNhbnZhcywgcmVuZGVySW5mbywgbW9udGhJbmZvKTtcblxuICAgIGxldCBtb250aERhdGU6IE1vbWVudCA9IG51bGw7XG4gICAgaWYgKG1vbnRoSW5mby5pbml0TW9udGgpIHtcbiAgICAgICAgbW9udGhEYXRlID0gaGVscGVyLmdldERhdGVCeUR1cmF0aW9uVG9Ub2RheShcbiAgICAgICAgICAgIG1vbnRoSW5mby5pbml0TW9udGgsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKCFtb250aERhdGUpIHtcbiAgICAgICAgICAgIGxldCBpbml0TW9udGggPSB3aW5kb3cubW9tZW50KG1vbnRoSW5mby5pbml0TW9udGgsIFwiWVlZWS1NTVwiLCB0cnVlKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGluaXRNb250aCk7XG4gICAgICAgICAgICBpZiAoaW5pdE1vbnRoLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgIG1vbnRoRGF0ZSA9IGluaXRNb250aDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiSW52YWxpZCBpbml0TW9udGhcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIG1vbnRoRGF0ZSA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0ZXMoKS5sYXN0KCk7XG4gICAgfVxuICAgIGlmICghbW9udGhEYXRlKSByZXR1cm47XG5cbiAgICByZW5kZXJNb250aEhlYWRlcihjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIG1vbnRoSW5mbywgbW9udGhEYXRlKTtcblxuICAgIHJlbmRlck1vbnRoRGF5cyhjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIG1vbnRoSW5mbywgbW9udGhEYXRlKTtcblxuICAgIHNldENoYXJ0U2NhbGUoY2FudmFzLCBjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvKTtcbn1cbiIsImltcG9ydCB7IE1vbWVudCB9IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7XG4gICAgRGF0YXNldHMsXG4gICAgRGF0YVBvaW50LFxuICAgIFJlbmRlckluZm8sXG4gICAgTW9udGhJbmZvLFxuICAgIEhlYXRtYXBJbmZvLFxuICAgIERhdGFzZXQsXG4gICAgU2l6ZSxcbiAgICBUcmFuc2Zvcm0sXG4gICAgQ2hhcnRFbGVtZW50cyxcbiAgICBHcmFwaFR5cGUsXG4gICAgVmFsdWVUeXBlLFxufSBmcm9tIFwiLi9kYXRhXCI7XG5pbXBvcnQgKiBhcyBoZWxwZXIgZnJvbSBcIi4vaGVscGVyXCI7XG5pbXBvcnQgKiBhcyBkMyBmcm9tIFwiZDNcIjtcblxuaW50ZXJmYWNlIERheUluZm8ge1xuICAgIGRhdGU6IHN0cmluZztcbiAgICB2YWx1ZTogbnVtYmVyO1xuICAgIHNjYWxlZFZhbHVlOiBudW1iZXI7XG4gICAgcm93OiBudW1iZXI7XG4gICAgY29sOiBudW1iZXI7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFyZWFzKFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGhlYXRtYXBJbmZvOiBIZWF0bWFwSW5mb1xuKTogQ2hhcnRFbGVtZW50cyB7XG4gICAgLy8gY2xlYW4gYXJlYXNcbiAgICBkMy5zZWxlY3QoY2FudmFzKS5zZWxlY3QoXCIjc3ZnXCIpLnJlbW92ZSgpO1xuICAgIHZhciBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGNoYXJ0RWxlbWVudHMpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgLy8gZDMuc2VsZWN0KGNoYXJ0RWxlbWVudHNbcHJvcHNbaV1dKS5yZW1vdmUoKTtcbiAgICAgICAgZGVsZXRlIGNoYXJ0RWxlbWVudHNbcHJvcHNbaV1dO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhjaGFydEVsZW1lbnRzKTtcblxuICAgIC8vIHdob2xlIGFyZWEgZm9yIHBsb3R0aW5nLCBpbmNsdWRlcyBtYXJnaW5zXG4gICAgbGV0IHN2ZyA9IGQzXG4gICAgICAgIC5zZWxlY3QoY2FudmFzKVxuICAgICAgICAuYXBwZW5kKFwic3ZnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJzdmdcIilcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ubGVmdCArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ucmlnaHRcbiAgICAgICAgKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnRvcCArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4uYm90dG9tXG4gICAgICAgICk7XG4gICAgY2hhcnRFbGVtZW50c1tcInN2Z1wiXSA9IHN2ZztcblxuICAgIC8vIGdyYXBoQXJlYSwgaW5jbHVkZXMgY2hhcnRBcmVhLCB0aXRsZSwgbGVnZW5kXG4gICAgbGV0IGdyYXBoQXJlYSA9IHN2Z1xuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcImlkXCIsIFwiZ3JhcGhBcmVhXCIpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5sZWZ0ICtcbiAgICAgICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4udG9wICtcbiAgICAgICAgICAgICAgICBcIilcIlxuICAgICAgICApXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggKyByZW5kZXJJbmZvLm1hcmdpbi5yaWdodClcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICsgcmVuZGVySW5mby5tYXJnaW4uYm90dG9tXG4gICAgICAgICk7XG4gICAgY2hhcnRFbGVtZW50c1tcImdyYXBoQXJlYVwiXSA9IGdyYXBoQXJlYTtcblxuICAgIC8vIGRhdGFBcmVhLCB1bmRlciBncmFwaEFyZWEsIGluY2x1ZGVzIHBvaW50cywgbGluZXMsIHhBeGlzLCB5QXhpc1xuICAgIGxldCBkYXRhQXJlYSA9IGdyYXBoQXJlYVxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcImlkXCIsIFwiZGF0YUFyZWFcIilcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aClcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0KTtcbiAgICBjaGFydEVsZW1lbnRzW1wiZGF0YUFyZWFcIl0gPSBkYXRhQXJlYTtcblxuICAgIHJldHVybiBjaGFydEVsZW1lbnRzO1xufVxuXG5mdW5jdGlvbiByZW5kZXJIZWF0bWFwSGVhZGVyKFxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGhlYXRtYXBJbmZvOiBIZWF0bWFwSW5mbyxcbiAgICBkYXRhc2V0OiBEYXRhc2V0XG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlck1vbnRoSGVhZGVyXCIpXG5cbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWhlYXRtYXBJbmZvKSByZXR1cm47XG5cbn1cblxuZnVuY3Rpb24gcmVuZGVySGVhdG1hcERheXMoXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgaGVhdG1hcEluZm86IEhlYXRtYXBJbmZvLFxuICAgIGRhdGFzZXQ6IERhdGFzZXQsXG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlckhlYXRtYXBEYXlzXCIpO1xuXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFoZWF0bWFwSW5mbykgcmV0dXJuO1xuXG4gICAgbGV0IGNlbGxTaXplID0gMjA7XG4gICAgbGV0IGRvdFJhZGl1cyA9IGNlbGxTaXplIC8gMi4wICogMC42O1xuXG4gICAgLy8gR2V0IG1pbiBhbmQgbWF4LCBudWxsIHZhbHVlcyB3aWxsIGJlIHRyZWF0ZWQgYXMgemVybyBoZXJlXG4gICAgbGV0IHlNaW4gPSBkMy5taW4oZGF0YXNldC5nZXRWYWx1ZXMoKSk7XG4gICAgaWYgKGhlYXRtYXBJbmZvLnlNaW4gIT09IG51bGwpIHtcbiAgICAgICAgeU1pbiA9IGhlYXRtYXBJbmZvLnlNaW47XG4gICAgfVxuICAgIGxldCB5TWF4ID0gZDMubWF4KGRhdGFzZXQuZ2V0VmFsdWVzKCkpO1xuICAgIGlmIChoZWF0bWFwSW5mby55TWF4ICE9PSBudWxsKSB7XG4gICAgICAgIHlNYXggPSBoZWF0bWFwSW5mby55TWF4O1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhgeU1pbjoke3lNaW59LCB5TWF4OiR7eU1heH1gKTtcblxuICAgIC8vIFByZXBhcmUgZGF0YSBmb3IgZ3JhcGhcbiAgICBsZXQgZGF5c0luSGVhdG1hcFZpZXc6IEFycmF5PERheUluZm8+ID0gW107XG4gICAgY29uc3QgZGF0YVN0YXJ0RGF0ZSA9IGRhdGFzZXQuZ2V0U3RhcnREYXRlKCkuY2xvbmUoKTtcbiAgICBsZXQgc3RhcnREYXRlID0gZGF0YVN0YXJ0RGF0ZVxuICAgICAgICAuY2xvbmUoKVxuICAgICAgICAuc3VidHJhY3QoZGF0YVN0YXJ0RGF0ZS5kYXkoKSwgXCJkYXlzXCIpO1xuICAgIGlmIChoZWF0bWFwSW5mby5zdGFydFdlZWtPbi50b0xvd2VyQ2FzZSgpID09PSBcIm1vblwiKSB7XG4gICAgICAgIHN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZS5hZGQoMSwgXCJkYXlzXCIpO1xuICAgIH1cbiAgICBjb25zdCBkYXRhRW5kRGF0ZSA9IGRhdGFzZXQuZ2V0RW5kRGF0ZSgpLmNsb25lKCk7XG4gICAgbGV0IGVuZERhdGUgPSBkYXRhRW5kRGF0ZS5jbG9uZSgpLmFkZCg3IC0gZGF0YUVuZERhdGUuZGF5KCkgLSAxLCBcImRheXNcIik7XG4gICAgaWYgKGhlYXRtYXBJbmZvLnN0YXJ0V2Vla09uLnRvTG93ZXJDYXNlKCkgPT09IFwibW9uXCIpIHtcbiAgICAgICAgZW5kRGF0ZSA9IGVuZERhdGUuYWRkKDEsIFwiZGF5c1wiKTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coc3RhcnREYXRlLmZvcm1hdChcIllZWVktTU0tRERcIikpO1xuICAgIC8vIGNvbnNvbGUubG9nKGVuZERhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSk7XG5cbiAgICBsZXQgaW5kQ29sID0gMDtcbiAgICBsZXQgaW5kUm93ID0gMDtcbiAgICBsZXQgaW5kID0gMDtcbiAgICBmb3IgKFxuICAgICAgICBsZXQgY3VyRGF0ZSA9IHN0YXJ0RGF0ZS5jbG9uZSgpO1xuICAgICAgICBjdXJEYXRlIDw9IGVuZERhdGU7XG4gICAgICAgIGN1ckRhdGUuYWRkKDEsIFwiZGF5c1wiKVxuICAgICkge1xuICAgICAgICBpZiAoaGVhdG1hcEluZm8uc3RhcnRXZWVrT24udG9Mb3dlckNhc2UoKSA9PT0gXCJtb25cIikge1xuICAgICAgICAgICAgaW5kQ29sID0gY3VyRGF0ZS5kYXkoKSAtIDE7XG4gICAgICAgICAgICBpZiAoaW5kQ29sIDwgMCkge1xuICAgICAgICAgICAgICAgIGluZENvbCA9IDY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbmRSb3cgPSBNYXRoLmZsb29yKGluZCAvIDcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaW5kQ29sID0gY3VyRGF0ZS5kYXkoKTsgLy8gMH42XG4gICAgICAgICAgICBpbmRSb3cgPSBNYXRoLmZsb29yKGluZCAvIDcpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY3VyVmFsdWUgYW5kIHNjYWxlZFZhbHVlXG4gICAgICAgIGxldCBjdXJWYWx1ZSA9IGRhdGFzZXQuZ2V0VmFsdWUoY3VyRGF0ZSk7XG4gICAgICAgIGxldCBzY2FsZWRWYWx1ZSA9IDA7XG4gICAgICAgIGlmIChOdW1iZXIuaXNOdW1iZXIoeU1heCkgJiYgTnVtYmVyLmlzTnVtYmVyKHlNaW4pICYmIHlNYXggLSB5TWluID4gMCkge1xuICAgICAgICAgICAgc2NhbGVkVmFsdWUgPSAoY3VyVmFsdWUgLSB5TWluKSAvICh5TWF4IC0geU1pbik7XG4gICAgICAgIH1cblxuICAgICAgICBkYXlzSW5IZWF0bWFwVmlldy5wdXNoKHtcbiAgICAgICAgICAgIGRhdGU6IGhlbHBlci5kYXRlVG9TdHIoY3VyRGF0ZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KSxcbiAgICAgICAgICAgIHZhbHVlOiBjdXJWYWx1ZSxcbiAgICAgICAgICAgIHNjYWxlZFZhbHVlOiBzY2FsZWRWYWx1ZSxcbiAgICAgICAgICAgIHJvdzogaW5kUm93LFxuICAgICAgICAgICAgY29sOiBpbmRDb2wsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGluZCsrO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhkYXlzSW5IZWF0bWFwVmlldyk7XG5cbiAgICAvLyBzY2FsZVxuICAgIGxldCB0b3RhbERheUJsb2NrV2lkdGggPSAoaW5kQ29sICsgMSkgKiBjZWxsU2l6ZTtcbiAgICBsZXQgdG90YWxCbG9ja0hlaWdodCA9IChpbmRSb3cgKyAxKSAqIGNlbGxTaXplO1xuICAgIGxldCBzY2FsZSA9IGQzXG4gICAgICAgIC5zY2FsZUxpbmVhcigpXG4gICAgICAgIC5kb21haW4oWy0wLjUsIDYuNV0pXG4gICAgICAgIC5yYW5nZShbMCwgdG90YWxEYXlCbG9ja1dpZHRoXSk7XG5cbiAgICAvLyBjaXJjbGVzXG4gICAgbGV0IGhlYXRtYXBDb2xvciA9IFwiIzY5YjNhMlwiO1xuICAgIGlmIChoZWF0bWFwSW5mby5jb2xvcikge1xuICAgICAgICBoZWF0bWFwQ29sb3IgPSBoZWF0bWFwSW5mby5jb2xvcjtcbiAgICB9XG5cbiAgICAvLyBkYXlzLCBzaG93biBhcyBkb3RzIG9yIHNxdWFyZXNcbiAgICBsZXQgZGF5cyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgLnNlbGVjdEFsbChcImRvdFwiKVxuICAgICAgICAuZGF0YShkYXlzSW5IZWF0bWFwVmlldylcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxuICAgICAgICAuYXR0cihcInJcIiwgZG90UmFkaXVzKVxuICAgICAgICAuYXR0cihcImN4XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5jb2wpO1xuICAgICAgICB9KVxuICAgICAgICAuYXR0cihcImN5XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5yb3cpO1xuICAgICAgICB9KVxuICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gZDMuaW50ZXJwb2xhdGVMYWIoXG4gICAgICAgICAgICAgICAgICAgIFwid2hpdGVcIixcbiAgICAgICAgICAgICAgICAgICAgaGVhdG1hcENvbG9yXG4gICAgICAgICAgICAgICAgKShkLnNjYWxlZFZhbHVlKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwiZGVmYXVsdFwiKTtcblxuICAgIC8vIEV4cGFuZCBhcmVhc1xuICAgIGxldCBzdmdXaWR0aCA9IHBhcnNlRmxvYXQoY2hhcnRFbGVtZW50cy5zdmcuYXR0cihcIndpZHRoXCIpKTtcbiAgICBsZXQgc3ZnSGVpZ2h0ID0gcGFyc2VGbG9hdChjaGFydEVsZW1lbnRzLnN2Zy5hdHRyKFwiaGVpZ2h0XCIpKTtcbiAgICBsZXQgZ3JhcGhBcmVhV2lkdGggPSBwYXJzZUZsb2F0KGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLmF0dHIoXCJ3aWR0aFwiKSk7XG4gICAgbGV0IGdyYXBoQXJlYUhlaWdodCA9IHBhcnNlRmxvYXQoY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEuYXR0cihcImhlaWdodFwiKSk7XG4gICAgbGV0IHRvdGFsSGVpZ2h0ID1cbiAgICAgICAgKGluZFJvdyArIDIpICogY2VsbFNpemU7Ly8gKyBwYXJzZUZsb2F0KGNoYXJ0RWxlbWVudHMuaGVhZGVyLmF0dHIoXCJoZWlnaHRcIikpO1xuICAgIGxldCB0b3RhbFdpZHRoID0gKGluZENvbCArIDEpICogY2VsbFNpemU7XG4gICAgaWYgKHRvdGFsSGVpZ2h0ID4gc3ZnSGVpZ2h0KSB7XG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuc3ZnLCAwLCB0b3RhbEhlaWdodCAtIHN2Z0hlaWdodCk7XG4gICAgfVxuICAgIGlmICh0b3RhbFdpZHRoID4gc3ZnV2lkdGgpIHtcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5zdmcsIHRvdGFsV2lkdGggLSBzdmdXaWR0aCwgMCk7XG4gICAgfVxuICAgIGlmICh0b3RhbEhlaWdodCA+IGdyYXBoQXJlYUhlaWdodCkge1xuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShcbiAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLFxuICAgICAgICAgICAgMCxcbiAgICAgICAgICAgIHRvdGFsSGVpZ2h0IC0gZ3JhcGhBcmVhSGVpZ2h0XG4gICAgICAgICk7XG4gICAgfVxuICAgIGlmICh0b3RhbFdpZHRoID4gZ3JhcGhBcmVhV2lkdGgpIHtcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5zdmcsIHRvdGFsV2lkdGggLSBncmFwaEFyZWFXaWR0aCwgMCk7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVySGVhdG1hcChcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgaGVhdG1hcEluZm86IEhlYXRtYXBJbmZvXG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlckhlYXRtYXBcIik7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFyZW5kZXJIZWF0bWFwKSByZXR1cm47XG5cbiAgICByZXR1cm4gXCJVbmRlciBjb25zdHJ1Y3Rpb25cIjtcblxuICAgIGxldCBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzID0ge307XG4gICAgY2hhcnRFbGVtZW50cyA9IGNyZWF0ZUFyZWFzKGNoYXJ0RWxlbWVudHMsIGNhbnZhcywgcmVuZGVySW5mbywgaGVhdG1hcEluZm8pO1xuXG4gICAgbGV0IHRvZGF5ID0gd2luZG93Lm1vbWVudCgpO1xuICAgIGxldCBsYXN0RGF0YU1vbnRoRGF0ZSA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0ZXMoKS5sYXN0KCk7XG5cbiAgICBsZXQgZGF0YXNldElkID0gcGFyc2VGbG9hdChoZWF0bWFwSW5mby5kYXRhc2V0KTtcbiAgICBsZXQgZGF0YXNldCA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkKTtcblxuICAgIHJlbmRlckhlYXRtYXBIZWFkZXIoXG4gICAgICAgIGNhbnZhcyxcbiAgICAgICAgY2hhcnRFbGVtZW50cyxcbiAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgaGVhdG1hcEluZm8sXG4gICAgICAgIGRhdGFzZXRcbiAgICApO1xuXG4gICAgcmVuZGVySGVhdG1hcERheXMoXG4gICAgICAgIGNhbnZhcyxcbiAgICAgICAgY2hhcnRFbGVtZW50cyxcbiAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgaGVhdG1hcEluZm8sXG4gICAgICAgIGRhdGFzZXRcbiAgICApO1xufVxuIiwiaW1wb3J0IHtcbiAgICBEYXRhc2V0cyxcbiAgICBEYXRhUG9pbnQsXG4gICAgUmVuZGVySW5mbyxcbiAgICBCdWxsZXRJbmZvLFxuICAgIERhdGFzZXQsXG4gICAgU2l6ZSxcbiAgICBUcmFuc2Zvcm0sXG4gICAgQ2hhcnRFbGVtZW50cyxcbiAgICBHcmFwaFR5cGUsXG4gICAgVmFsdWVUeXBlLFxufSBmcm9tIFwiLi9kYXRhXCI7XG5pbXBvcnQgKiBhcyBoZWxwZXIgZnJvbSBcIi4vaGVscGVyXCI7XG5pbXBvcnQgKiBhcyBkMyBmcm9tIFwiZDNcIjtcbmltcG9ydCAqIGFzIGV4cHIgZnJvbSBcIi4vZXhwclwiO1xuXG5mdW5jdGlvbiBjcmVhdGVBcmVhcyhcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgYnVsbGV0SW5mbzogQnVsbGV0SW5mb1xuKTogQ2hhcnRFbGVtZW50cyB7XG4gICAgbGV0IGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMgPSB7fTtcbiAgICAvLyB3aG9sZSBhcmVhIGZvciBwbG90dGluZywgaW5jbHVkZXMgbWFyZ2luc1xuXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFidWxsZXRJbmZvKSByZXR1cm47XG5cbiAgICBsZXQgc3ZnID0gZDNcbiAgICAgICAgLnNlbGVjdChjYW52YXMpXG4gICAgICAgIC5hcHBlbmQoXCJzdmdcIilcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcInN2Z1wiKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5sZWZ0ICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5yaWdodFxuICAgICAgICApXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4udG9wICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5ib3R0b21cbiAgICAgICAgKTtcbiAgICBjaGFydEVsZW1lbnRzW1wic3ZnXCJdID0gc3ZnO1xuXG4gICAgLy8gZ3JhcGhBcmVhLCBpbmNsdWRlcyBjaGFydEFyZWEsIHRpdGxlLCBsZWdlbmRcbiAgICBsZXQgZ3JhcGhBcmVhID0gc3ZnXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJncmFwaEFyZWFcIilcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmxlZnQgK1xuICAgICAgICAgICAgICAgIFwiLFwiICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi50b3AgK1xuICAgICAgICAgICAgICAgIFwiKVwiXG4gICAgICAgIClcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArIHJlbmRlckluZm8ubWFyZ2luLnJpZ2h0KVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgKyByZW5kZXJJbmZvLm1hcmdpbi5ib3R0b21cbiAgICAgICAgKTtcbiAgICBjaGFydEVsZW1lbnRzW1wiZ3JhcGhBcmVhXCJdID0gZ3JhcGhBcmVhO1xuXG4gICAgLy8gZGF0YUFyZWEsIHVuZGVyIGdyYXBoQXJlYSwgaW5jbHVkZXMgcG9pbnRzLCBsaW5lcywgeEF4aXMsIHlBeGlzXG4gICAgbGV0IGRhdGFBcmVhID0gZ3JhcGhBcmVhXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJkYXRhQXJlYVwiKVxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoKVxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQpO1xuICAgIGNoYXJ0RWxlbWVudHNbXCJkYXRhQXJlYVwiXSA9IGRhdGFBcmVhO1xuXG4gICAgcmV0dXJuIGNoYXJ0RWxlbWVudHM7XG59XG5cbmZ1bmN0aW9uIHNldENoYXJ0U2NhbGUoXG4gICAgX2NhbnZhczogSFRNTEVsZW1lbnQsXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXG4pIHtcbiAgICBsZXQgY2FudmFzID0gZDMuc2VsZWN0KF9jYW52YXMpO1xuICAgIGxldCBzdmcgPSBjaGFydEVsZW1lbnRzLnN2ZztcbiAgICBsZXQgc3ZnV2lkdGggPSBwYXJzZUZsb2F0KHN2Zy5hdHRyKFwid2lkdGhcIikpO1xuICAgIGxldCBzdmdIZWlnaHQgPSBwYXJzZUZsb2F0KHN2Zy5hdHRyKFwiaGVpZ2h0XCIpKTtcbiAgICBzdmcuYXR0cihcIndpZHRoXCIsIG51bGwpXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG51bGwpXG4gICAgICAgIC5hdHRyKFwidmlld0JveFwiLCBgMCAwICR7c3ZnV2lkdGh9ICR7c3ZnSGVpZ2h0fWApXG4gICAgICAgIC5hdHRyKFwicHJlc2VydmVBc3BlY3RSYXRpb1wiLCBcInhNaWRZTWlkIG1lZXRcIik7XG5cbiAgICBpZiAocmVuZGVySW5mby5maXRQYW5lbFdpZHRoKSB7XG4gICAgICAgIGNhbnZhcy5zdHlsZShcIndpZHRoXCIsIFwiMTAwJVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjYW52YXMuc3R5bGUoXG4gICAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgICAoc3ZnV2lkdGggKiByZW5kZXJJbmZvLmZpeGVkU2NhbGUpLnRvU3RyaW5nKCkgKyBcInB4XCJcbiAgICAgICAgKTtcbiAgICAgICAgY2FudmFzLnN0eWxlKFxuICAgICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICAgIChzdmdIZWlnaHQgKiByZW5kZXJJbmZvLmZpeGVkU2NhbGUpLnRvU3RyaW5nKCkgKyBcInB4XCJcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlclRpdGxlKFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBidWxsZXRJbmZvOiBCdWxsZXRJbmZvXG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlclRpdGxlXCIpO1xuICAgIC8vIHVuZGVyIGdyYXBoQXJlYVxuXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFidWxsZXRJbmZvKSByZXR1cm47XG5cbiAgICBjb25zdCBzcGFjaW5nID0gNjsgLy8gc3BhY2luZyBiZXR3ZWVuIHRpdGxlIGFuZCBkYXRhQXJlYVxuXG4gICAgaWYgKGJ1bGxldEluZm8udGl0bGUpIHtcbiAgICAgICAgbGV0IHRpdGxlU2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXG4gICAgICAgICAgICBidWxsZXRJbmZvLnRpdGxlLFxuICAgICAgICAgICAgXCJ0cmFja2VyLXRpdGxlLXNtYWxsXCJcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgICAgICAudGV4dChidWxsZXRJbmZvLnRpdGxlKSAvLyBwaXZvdCBhdCBjZW50ZXJcbiAgICAgICAgICAgICAgICAuYXR0cihcImlkXCIsIFwidGl0bGVcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcInhcIiwgdGl0bGVTaXplLndpZHRoIC8gMi4wKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieVwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgLyAyLjApXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGl0bGVTaXplLmhlaWdodCkgLy8gZm9yIGxhdGVyIHVzZVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRpdGxlLXNtYWxsXCIpO1xuICAgICAgICAgICAgY2hhcnRFbGVtZW50c1tcInRpdGxlXCJdID0gdGl0bGU7XG5cbiAgICAgICAgICAgIC8vIEV4cGFuZCBwYXJlbnQgYXJlYXNcbiAgICAgICAgICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuc3ZnLCB0aXRsZVNpemUud2lkdGggKyBzcGFjaW5nLCAwKTtcbiAgICAgICAgICAgIGhlbHBlci5leHBhbmRBcmVhKFxuICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLFxuICAgICAgICAgICAgICAgIHRpdGxlU2l6ZS53aWR0aCArIHNwYWNpbmcsXG4gICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gTW92ZSBzaWJsaW5nIGFyZWFzXG4gICAgICAgICAgICBoZWxwZXIubW92ZUFyZWEoXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5kYXRhQXJlYSxcbiAgICAgICAgICAgICAgICB0aXRsZVNpemUud2lkdGggKyBzcGFjaW5nLFxuICAgICAgICAgICAgICAgIDBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgICAgICAvLyBpZiBsYWJlbCB3aWR0aCA+IGRhdGFBcmVhIHdpZHRoXG4gICAgICAgICAgICBsZXQgeE1pZGRsZSA9IHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMi4wO1xuICAgICAgICAgICAgaWYgKHRpdGxlU2l6ZS53aWR0aCA+IHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoKSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJleHBhbmQgYXJlYSBmb3IgdmVydGljYWwgdGl0bGVcIik7XG4gICAgICAgICAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXG4gICAgICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuc3ZnLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZVNpemUud2lkdGggLSByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXG4gICAgICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZVNpemUud2lkdGggLSByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgMFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBoZWxwZXIubW92ZUFyZWEoXG4gICAgICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZGF0YUFyZWEsXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlU2l6ZS53aWR0aCAvIDIuMCAtIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMi4wLFxuICAgICAgICAgICAgICAgICAgICAwXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB4TWlkZGxlID0gdGl0bGVTaXplLndpZHRoIC8gMi4wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgYXhpc1dpZHRoID0gcGFyc2VGbG9hdChjaGFydEVsZW1lbnRzLmF4aXMuYXR0cihcIndpZHRoXCIpKTtcblxuICAgICAgICAgICAgbGV0IHRpdGxlID0gY2hhcnRFbGVtZW50cy5ncmFwaEFyZWFcbiAgICAgICAgICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAgICAgICAgIC50ZXh0KGJ1bGxldEluZm8udGl0bGUpIC8vIHBpdm90IGF0IGNlbnRlclxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgXCJ0aXRsZVwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieFwiLCB4TWlkZGxlICsgYXhpc1dpZHRoKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieVwiLCB0aXRsZVNpemUuaGVpZ2h0IC8gMi4wKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRpdGxlU2l6ZS5oZWlnaHQpIC8vIGZvciBsYXRlciB1c2VcbiAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10aXRsZS1zbWFsbFwiKTtcbiAgICAgICAgICAgIGNoYXJ0RWxlbWVudHNbXCJ0aXRsZVwiXSA9IHRpdGxlO1xuXG4gICAgICAgICAgICAvLyBFeHBhbmQgcGFyZW50IGFyZWFzXG4gICAgICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgMCwgdGl0bGVTaXplLmhlaWdodCArIHNwYWNpbmcpO1xuICAgICAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB0aXRsZVNpemUuaGVpZ2h0ICsgc3BhY2luZ1xuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgLy8gTW92ZSBzaWJsaW5nIGFyZWFzXG4gICAgICAgICAgICBoZWxwZXIubW92ZUFyZWEoXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5kYXRhQXJlYSxcbiAgICAgICAgICAgICAgICAwLFxuICAgICAgICAgICAgICAgIHRpdGxlU2l6ZS5oZWlnaHQgKyBzcGFjaW5nXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGJ1bGxldEluZm8udmFsdWVVbml0KSB7XG4gICAgICAgIGxldCB1bml0U2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXG4gICAgICAgICAgICBidWxsZXRJbmZvLnZhbHVlVW5pdCxcbiAgICAgICAgICAgIFwidHJhY2tlci10aWNrLWxhYmVsXCJcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgICAgIGxldCB1bml0ID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAgICAgLnRleHQoYnVsbGV0SW5mby52YWx1ZVVuaXQpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCBcInVuaXRcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcInhcIiwgLTEgKiAodW5pdFNpemUud2lkdGggKyBzcGFjaW5nKSlcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICsgc3BhY2luZylcbiAgICAgICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCB1bml0U2l6ZS5oZWlnaHQpIC8vIGZvciBsYXRlciB1c2VcbiAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10aWNrLWxhYmVsXCIpOyAvLyBwaXZvdCBhdCBjb3JkZXJcbiAgICAgICAgICAgIGNoYXJ0RWxlbWVudHNbXCJ1bml0XCJdID0gdW5pdDtcbiAgICAgICAgfSBlbHNlIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgICAgIGxldCB1bml0ID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAgICAgLnRleHQoYnVsbGV0SW5mby52YWx1ZVVuaXQpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCBcInVuaXRcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcbiAgICAgICAgICAgICAgICAgICAgXCJ4XCIsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMiAtIHVuaXRTaXplLndpZHRoIC8gMlxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuYXR0cihcInlcIiwgLSh1bml0U2l6ZS5oZWlnaHQgLyAyLjAgKyBzcGFjaW5nKSlcbiAgICAgICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCB1bml0U2l6ZS5oZWlnaHQpIC8vIGZvciBsYXRlciB1c2VcbiAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10aWNrLWxhYmVsXCIpOyAvLyBwaXZvdCBhdCBjb3JkZXJcbiAgICAgICAgICAgIGNoYXJ0RWxlbWVudHNbXCJ1bml0XCJdID0gdW5pdDtcblxuICAgICAgICAgICAgLy8gRXhwYW5kIHBhcmVudCBhcmVhc1xuICAgICAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5zdmcsIDAsIHVuaXRTaXplLmhlaWdodCArIHNwYWNpbmcpO1xuICAgICAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsXG4gICAgICAgICAgICAgICAgMCxcbiAgICAgICAgICAgICAgICB1bml0U2l6ZS5oZWlnaHQgKyBzcGFjaW5nXG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAvLyBNb3ZlIGRhdGFBcmVhIGRvd25cbiAgICAgICAgICAgIGhlbHBlci5tb3ZlQXJlYShcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLmRhdGFBcmVhLFxuICAgICAgICAgICAgICAgIDAsXG4gICAgICAgICAgICAgICAgdW5pdFNpemUuaGVpZ2h0ICsgc3BhY2luZ1xuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gUmVuZGVyIHRpY2tzLCB0aWNrIGxhYmVsc1xuZnVuY3Rpb24gcmVuZGVyQXhpcyhcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgYnVsbGV0SW5mbzogQnVsbGV0SW5mbyxcbiAgICBkYXRhc2V0OiBEYXRhc2V0XG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlckF4aXNcIik7XG4gICAgLy8gY29uc29sZS5sb2coY2hhcnRFbGVtZW50cyk7XG4gICAgLy8gY29uc29sZS5sb2coZGF0YXNldCk7XG5cbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWJ1bGxldEluZm8pIHJldHVybjtcblxuICAgIGxldCByYW5nZSA9IGJ1bGxldEluZm8ucmFuZ2U7XG4gICAgbGV0IGxhc3RSYW5nZSA9IHJhbmdlW3JhbmdlLmxlbmd0aCAtIDFdO1xuICAgIGxldCBkb21haW4gPSBbMCwgbGFzdFJhbmdlXTtcblxuICAgIGxldCB0aWNrTGVuZ3RoID0gNjtcbiAgICBsZXQgdmFsdWVVbml0ID0gYnVsbGV0SW5mby52YWx1ZVVuaXQ7XG4gICAgbGV0IHRpY2tGb3JtYXRGbjogYW55ID0gZnVuY3Rpb24gKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgaWYgKHZhbHVlVW5pdCAmJiB2YWx1ZVVuaXQuZW5kc1dpdGgoXCIlXCIpKSB7XG4gICAgICAgICAgICByZXR1cm4gZDMudGlja0Zvcm1hdCgwLCBsYXN0UmFuZ2UsIDcpKHZhbHVlKSArIFwiICVcIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZDMudGlja0Zvcm1hdCgwLCBsYXN0UmFuZ2UsIDcpKHZhbHVlKTtcbiAgICB9O1xuICAgIGxldCBtYXhUaWNrTGFiZWwgPSB0aWNrRm9ybWF0Rm4obGFzdFJhbmdlKTtcbiAgICBsZXQgbWF4VGlja0xhYmVsU2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXG4gICAgICAgIG1heFRpY2tMYWJlbCxcbiAgICAgICAgXCJ0cmFja2VyLXRpY2stbGFiZWxcIlxuICAgICk7XG5cbiAgICBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgbGV0IHNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKTtcbiAgICAgICAgc2NhbGUuZG9tYWluKGRvbWFpbikucmFuZ2UoWzAsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoXSk7XG4gICAgICAgIGNoYXJ0RWxlbWVudHNbXCJzY2FsZVwiXSA9IHNjYWxlO1xuXG4gICAgICAgIGxldCBheGlzR2VuID0gZDMuYXhpc0JvdHRvbShzY2FsZSk7XG4gICAgICAgIGF4aXNHZW4udGlja0Zvcm1hdCh0aWNrRm9ybWF0Rm4pO1xuICAgICAgICBsZXQgYXhpcyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuYXR0cihcImlkXCIsIFwiYXhpc1wiKVxuICAgICAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcbiAgICAgICAgICAgICAgICBcInRyYW5zbGF0ZSgwLFwiICsgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICsgXCIpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5jYWxsKGF4aXNHZW4pXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1heGlzXCIpO1xuICAgICAgICBjaGFydEVsZW1lbnRzW1wiYXhpc1wiXSA9IGF4aXM7XG5cbiAgICAgICAgbGV0IGF4aXNMaW5lID0gYXhpcy5zZWxlY3RBbGwoXCJwYXRoXCIpLnN0eWxlKFwic3Ryb2tlXCIsIFwibm9uZVwiKTtcblxuICAgICAgICBsZXQgYXhpc1RpY2tzID0gYXhpcy5zZWxlY3RBbGwoXCJsaW5lXCIpO1xuXG4gICAgICAgIGxldCBheGlzVGlja0xhYmVscyA9IGF4aXNcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10aWNrLWxhYmVsXCIpO1xuXG4gICAgICAgIGF4aXMuYXR0cihcbiAgICAgICAgICAgIFwid2lkdGhcIixcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICsgbWF4VGlja0xhYmVsU2l6ZS53aWR0aFxuICAgICAgICApO1xuICAgICAgICBheGlzLmF0dHIoXCJoZWlnaHRcIiwgdGlja0xlbmd0aCArIG1heFRpY2tMYWJlbFNpemUuaGVpZ2h0KTtcblxuICAgICAgICAvLyBFeHBhbmQgYXJlYXNcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXG4gICAgICAgICAgICBjaGFydEVsZW1lbnRzLnN2ZyxcbiAgICAgICAgICAgICttYXhUaWNrTGFiZWxTaXplLndpZHRoLFxuICAgICAgICAgICAgdGlja0xlbmd0aCArIG1heFRpY2tMYWJlbFNpemUuaGVpZ2h0XG4gICAgICAgICk7XG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKFxuICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsXG4gICAgICAgICAgICArbWF4VGlja0xhYmVsU2l6ZS53aWR0aCxcbiAgICAgICAgICAgIHRpY2tMZW5ndGggKyBtYXhUaWNrTGFiZWxTaXplLmhlaWdodFxuICAgICAgICApO1xuICAgIH0gZWxzZSBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgIGxldCBzY2FsZSA9IGQzLnNjYWxlTGluZWFyKCk7XG4gICAgICAgIHNjYWxlLmRvbWFpbihkb21haW4pLnJhbmdlKFtyZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQsIDBdKTtcbiAgICAgICAgY2hhcnRFbGVtZW50c1tcInNjYWxlXCJdID0gc2NhbGU7XG5cbiAgICAgICAgbGV0IGF4aXNHZW4gPSBkMy5heGlzTGVmdChzY2FsZSk7XG4gICAgICAgIGF4aXNHZW4udGlja0Zvcm1hdCh0aWNrRm9ybWF0Rm4pO1xuICAgICAgICBsZXQgYXhpcyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgICAgICAuYXR0cihcImlkXCIsIFwiYXhpc1wiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIDApXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgMClcbiAgICAgICAgICAgIC5jYWxsKGF4aXNHZW4pXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1heGlzXCIpO1xuICAgICAgICBjaGFydEVsZW1lbnRzW1wiYXhpc1wiXSA9IGF4aXM7XG5cbiAgICAgICAgbGV0IGF4aXNMaW5lID0gYXhpcy5zZWxlY3RBbGwoXCJwYXRoXCIpLnN0eWxlKFwic3Ryb2tlXCIsIFwibm9uZVwiKTtcblxuICAgICAgICBsZXQgYXhpc1RpY2tzID0gYXhpcy5zZWxlY3RBbGwoXCJsaW5lXCIpO1xuXG4gICAgICAgIGxldCBheGlzVGlja0xhYmVscyA9IGF4aXNcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10aWNrLWxhYmVsXCIpO1xuXG4gICAgICAgIGF4aXMuYXR0cihcIndpZHRoXCIsIHRpY2tMZW5ndGggKyBtYXhUaWNrTGFiZWxTaXplLndpZHRoKTtcbiAgICAgICAgYXhpcy5hdHRyKFwiaGVpZ2h0XCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoKTtcblxuICAgICAgICAvLyBFeHBhbmQgYXJlYXNcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXG4gICAgICAgICAgICBjaGFydEVsZW1lbnRzLnN2ZyxcbiAgICAgICAgICAgIHRpY2tMZW5ndGggKyBtYXhUaWNrTGFiZWxTaXplLndpZHRoLFxuICAgICAgICAgICAgMFxuICAgICAgICApO1xuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShcbiAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLFxuICAgICAgICAgICAgdGlja0xlbmd0aCArIG1heFRpY2tMYWJlbFNpemUud2lkdGgsXG4gICAgICAgICAgICAwXG4gICAgICAgICk7XG5cbiAgICAgICAgaGVscGVyLm1vdmVBcmVhKFxuICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5kYXRhQXJlYSxcbiAgICAgICAgICAgIHRpY2tMZW5ndGggKyBtYXhUaWNrTGFiZWxTaXplLndpZHRoLFxuICAgICAgICAgICAgMFxuICAgICAgICApO1xuICAgIH1cbn1cblxuLy8gUmVuZGVyIHF1YW50aXRhdGl2ZSByYW5nZSwgcG9vci9hdmVyYWdlL2dvb2QvLi4uXG5mdW5jdGlvbiByZW5kZXJCYWNrUGFuZWwoXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGJ1bGxldEluZm86IEJ1bGxldEluZm8sXG4gICAgZGF0YXNldDogRGF0YXNldFxuKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJCYWNrUGFuZWxcIik7XG4gICAgLy8gY29uc29sZS5sb2coZGF0YXNldCk7XG5cbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWJ1bGxldEluZm8pIHJldHVybjtcblxuICAgIGxldCBzY2FsZSA9IGNoYXJ0RWxlbWVudHMuc2NhbGU7XG5cbiAgICAvLyBQcmVwYXJlIGRhdGFcbiAgICBsZXQgcmFuZ2UgPSBidWxsZXRJbmZvLnJhbmdlO1xuICAgIGxldCByYW5nZUNvbG9yID0gYnVsbGV0SW5mby5yYW5nZUNvbG9yO1xuICAgIGxldCBkYXRhID0gW107XG4gICAgbGV0IGxhc3RCb3VuZCA9IDA7XG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgcmFuZ2UubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICBkYXRhLnB1c2goe1xuICAgICAgICAgICAgc3RhcnQ6IGxhc3RCb3VuZCxcbiAgICAgICAgICAgIGVuZDogcmFuZ2VbaW5kXSxcbiAgICAgICAgICAgIGNvbG9yOiByYW5nZUNvbG9yW2luZF0sXG4gICAgICAgIH0pO1xuICAgICAgICBsYXN0Qm91bmQgPSByYW5nZVtpbmRdO1xuICAgIH1cblxuICAgIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgICBsZXQgcGFuZWwgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwiYmFja1BhbmVsXCIpXG4gICAgICAgICAgICAuZGF0YShkYXRhKVxuICAgICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAgIC5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24gKGQ6IGFueSwgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3Ioc2NhbGUoZC5zdGFydCkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBmdW5jdGlvbiAoZDogYW55LCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5jZWlsKHNjYWxlKGQuZW5kIC0gZC5zdGFydCkpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodClcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKGQ6IGFueSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkLmNvbG9yO1xuICAgICAgICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgbGV0IHBhbmVsID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgLnNlbGVjdEFsbChcImJhY2tQYW5lbFwiKVxuICAgICAgICAgICAgLmRhdGEoZGF0YSlcbiAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGZ1bmN0aW9uIChkOiBhbnksIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbiAoZDogYW55KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3Ioc2NhbGUoZC5lbmQpKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoKVxuICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgZnVuY3Rpb24gKGQ6IGFueSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCAtXG4gICAgICAgICAgICAgICAgICAgIE1hdGguZmxvb3Ioc2NhbGUoZC5lbmQgLSBkLnN0YXJ0KSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKGQ6IGFueSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBkLmNvbG9yO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxufVxuXG4vLyBSZW5kZXIgYmFyIGZvciBhY3R1YWwgdmFsdWVcbmZ1bmN0aW9uIHJlbmRlckJhcihcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgYnVsbGV0SW5mbzogQnVsbGV0SW5mbyxcbiAgICBkYXRhc2V0OiBEYXRhc2V0XG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlckJhclwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0KTtcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJcIjtcblxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhYnVsbGV0SW5mbykgcmV0dXJuO1xuXG4gICAgbGV0IHJldEFjdHVhbFZhbHVlID0gZXhwci5yZXNvbHZlVmFsdWUoYnVsbGV0SW5mby52YWx1ZSwgcmVuZGVySW5mbyk7XG4gICAgLy8gY29uc29sZS5sb2cocmV0QWN0dWFsVmFsdWUpO1xuICAgIGlmICh0eXBlb2YgcmV0QWN0dWFsVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldEFjdHVhbFZhbHVlO1xuICAgIH1cbiAgICBsZXQgYWN0dWFsVmFsdWUgPSByZXRBY3R1YWxWYWx1ZTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKGFjdHVhbFZhbHVlKSkge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXQgdmFsdWU6IFwiICsgcmV0QWN0dWFsVmFsdWU7XG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgfVxuICAgIGxldCB2YWx1ZUNvbG9yID0gYnVsbGV0SW5mby52YWx1ZUNvbG9yO1xuXG4gICAgbGV0IHNjYWxlID0gY2hhcnRFbGVtZW50cy5zY2FsZTtcblxuICAgIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgICBsZXQgYmFyV2lkdGggPSByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgLyAzO1xuICAgICAgICBsZXQgYmFyID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCBzY2FsZSgwKSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBiYXJXaWR0aClcbiAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgTWF0aC5mbG9vcihzY2FsZShhY3R1YWxWYWx1ZSkpKVxuICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgYmFyV2lkdGgpXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIHZhbHVlQ29sb3IpO1xuICAgIH0gZWxzZSBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgIGxldCBiYXJXaWR0aCA9IHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMztcbiAgICAgICAgbGV0IGJhciA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgICAgIC5hcHBlbmQoXCJyZWN0XCIpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgYmFyV2lkdGgpXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgTWF0aC5mbG9vcihzY2FsZShhY3R1YWxWYWx1ZSkpKVxuICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBiYXJXaWR0aClcbiAgICAgICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgICAgIFwiaGVpZ2h0XCIsXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0IC0gTWF0aC5mbG9vcihzY2FsZShhY3R1YWxWYWx1ZSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIHZhbHVlQ29sb3IpO1xuICAgIH1cbn1cblxuLy8gUmVuZGVyIG1hcmsgbGluZSBmb3IgdGFyZ2V0IHZhbHVlXG5mdW5jdGlvbiByZW5kZXJNYXJrKFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBidWxsZXRJbmZvOiBCdWxsZXRJbmZvLFxuICAgIGRhdGFzZXQ6IERhdGFzZXRcbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyTWFya1wiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0KTtcblxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhYnVsbGV0SW5mbykgcmV0dXJuO1xuXG4gICAgbGV0IHNob3dNYXJrZXIgPSBidWxsZXRJbmZvLnNob3dNYXJrZXI7XG4gICAgaWYgKCFzaG93TWFya2VyKSByZXR1cm47XG5cbiAgICBsZXQgbWFya2VyVmFsdWUgPSBidWxsZXRJbmZvLm1hcmtlclZhbHVlO1xuICAgIGxldCBtYXJrZXJDb2xvciA9IGJ1bGxldEluZm8ubWFya2VyQ29sb3I7XG5cbiAgICBsZXQgc2NhbGUgPSBjaGFydEVsZW1lbnRzLnNjYWxlO1xuXG4gICAgaWYgKGJ1bGxldEluZm8ub3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICAgIGxldCBtYXJrZXJMZW5ndGggPSAocmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICogMikgLyAzO1xuICAgICAgICBsZXQgbWFya2VyID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxuICAgICAgICAgICAgLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCBzY2FsZShtYXJrZXJWYWx1ZSkgLSAxLjUpXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgbWFya2VyTGVuZ3RoIC8gNClcbiAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgMylcbiAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG1hcmtlckxlbmd0aClcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgbWFya2VyQ29sb3IpO1xuICAgIH0gZWxzZSBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgIGxldCBtYXJrZXJMZW5ndGggPSAocmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggKiAyKSAvIDM7XG4gICAgICAgIGxldCBtYXJrZXIgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXG4gICAgICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIG1hcmtlckxlbmd0aCAvIDQpXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgc2NhbGUobWFya2VyVmFsdWUpIC0gMS41KVxuICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBtYXJrZXJMZW5ndGgpXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCAzKVxuICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBtYXJrZXJDb2xvcik7XG4gICAgfVxufVxuXG4vLyBCdWxsZXQgZ3JhcGggaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQnVsbGV0X2dyYXBoXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyQnVsbGV0KFxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBidWxsZXRJbmZvOiBCdWxsZXRJbmZvXG4pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlckJ1bGxldFwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWJ1bGxldEluZm8pIHJldHVybjtcblxuICAgIGxldCBkYXRhc2V0SWQgPSBwYXJzZUZsb2F0KGJ1bGxldEluZm8uZGF0YXNldCk7XG4gICAgbGV0IGRhdGFzZXQgPSByZW5kZXJJbmZvLmRhdGFzZXRzLmdldERhdGFzZXRCeUlkKGRhdGFzZXRJZCk7XG5cbiAgICAvLyBTZXQgaW5pdGlhbCBkYXRhQXJlYSBzaXplXG4gICAgaWYgKGJ1bGxldEluZm8ub3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XG4gICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplID0geyB3aWR0aDogMjUwLCBoZWlnaHQ6IDI0IH07XG4gICAgfSBlbHNlIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUgPSB7IHdpZHRoOiAyNCwgaGVpZ2h0OiAyNTAgfTtcbiAgICB9XG5cbiAgICBsZXQgY2hhcnRFbGVtZW50cyA9IGNyZWF0ZUFyZWFzKGNhbnZhcywgcmVuZGVySW5mbywgYnVsbGV0SW5mbyk7XG5cbiAgICBsZXQgcmV0UmVuZGVyQXhpcyA9IHJlbmRlckF4aXMoXG4gICAgICAgIGNoYXJ0RWxlbWVudHMsXG4gICAgICAgIHJlbmRlckluZm8sXG4gICAgICAgIGJ1bGxldEluZm8sXG4gICAgICAgIGRhdGFzZXRcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0UmVuZGVyQXhpcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0UmVuZGVyQXhpcztcbiAgICB9XG5cbiAgICByZW5kZXJUaXRsZShjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBidWxsZXRJbmZvKTtcblxuICAgIHJlbmRlckJhY2tQYW5lbChjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBidWxsZXRJbmZvLCBkYXRhc2V0KTtcblxuICAgIGxldCByZXRSZW5kZXJCYXIgPSByZW5kZXJCYXIoXG4gICAgICAgIGNoYXJ0RWxlbWVudHMsXG4gICAgICAgIHJlbmRlckluZm8sXG4gICAgICAgIGJ1bGxldEluZm8sXG4gICAgICAgIGRhdGFzZXRcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0UmVuZGVyQmFyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRSZW5kZXJCYXI7XG4gICAgfVxuXG4gICAgcmVuZGVyTWFyayhjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBidWxsZXRJbmZvLCBkYXRhc2V0KTtcblxuICAgIHNldENoYXJ0U2NhbGUoY2FudmFzLCBjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvKTtcbn1cbiIsImltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xuaW1wb3J0IHsgTW9tZW50LCBEdXJhdGlvbiB9IGZyb20gXCJtb21lbnRcIjtcbmltcG9ydCB7XG4gICAgRGF0YXNldHMsXG4gICAgRGF0YVBvaW50LFxuICAgIFJlbmRlckluZm8sXG4gICAgRGF0YXNldCxcbiAgICBTaXplLFxuICAgIFRyYW5zZm9ybSxcbiAgICBDaGFydEVsZW1lbnRzLFxuICAgIEdyYXBoVHlwZSxcbiAgICBWYWx1ZVR5cGUsXG4gICAgQ29tbW9uQ2hhcnRJbmZvLFxuICAgIExpbmVJbmZvLFxuICAgIEJhckluZm8sXG4gICAgUGllSW5mbyxcbiAgICBTdW1tYXJ5SW5mbyxcbiAgICBCdWxsZXRJbmZvLFxuICAgIE1vbnRoSW5mbyxcbiAgICBIZWF0bWFwSW5mbyxcbn0gZnJvbSBcIi4vZGF0YVwiO1xuaW1wb3J0ICogYXMgcGllIGZyb20gXCIuL3BpZVwiO1xuaW1wb3J0ICogYXMgc3VtbWFyeSBmcm9tIFwiLi9zdW1tYXJ5XCI7XG5pbXBvcnQgKiBhcyBtb250aCBmcm9tIFwiLi9tb250aFwiO1xuaW1wb3J0ICogYXMgaGVhdG1hcCBmcm9tIFwiLi9oZWF0bWFwXCI7XG5pbXBvcnQgKiBhcyBidWxsZXQgZnJvbSBcIi4vYnVsbGV0XCI7XG5pbXBvcnQgKiBhcyBoZWxwZXIgZnJvbSBcIi4vaGVscGVyXCI7XG5pbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSBcInNwcmludGYtanNcIjtcblxuZnVuY3Rpb24gZ2V0WFRpY2tWYWx1ZXMoXG4gICAgZGF0ZXM6IE1vbWVudFtdLFxuICAgIGludGVydmFsOiBEdXJhdGlvblxuKTogW0FycmF5PERhdGU+LCBkMy5UaW1lSW50ZXJ2YWxdIHtcbiAgICAvLyBUaGUgaW5wdXQgaW50ZXJ2YWwgY291bGQgYmUgbnVsbCxcbiAgICAvLyBnZW5lcmF0ZSB0aWNrIHZhbHVlcyBldmVuIGlmIGludGVydmFsIGlzIG51bGxcblxuICAgIC8vIGNvbnNvbGUubG9nKGludGVydmFsKTtcblxuICAgIGxldCB0aWNrVmFsdWVzOiBBcnJheTxEYXRlPiA9IFtdO1xuICAgIGxldCB0aWNrSW50ZXJ2YWwgPSBudWxsO1xuXG4gICAgLy8geSB2YWx1ZXMgYXJlIHRpbWUgdmFsdWVzXG4gICAgaWYgKGludGVydmFsKSB7XG4gICAgICAgIGxldCBmaXJzdERhdGUgPSBkYXRlc1swXTtcbiAgICAgICAgbGV0IGxhc3REYXRlID0gZGF0ZXNbZGF0ZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIHRpY2tWYWx1ZXMgPSBkMy50aW1lRGF5LnJhbmdlKFxuICAgICAgICAgICAgZmlyc3REYXRlLnRvRGF0ZSgpLFxuICAgICAgICAgICAgbGFzdERhdGUudG9EYXRlKCksXG4gICAgICAgICAgICBpbnRlcnZhbC5hc0RheXMoKVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBkYXlzID0gZGF0ZXMubGVuZ3RoO1xuICAgICAgICBpZiAoZGF5cyA8PSAxNSkge1xuICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHRpY2tzOiAwLTE1XG4gICAgICAgICAgICB0aWNrSW50ZXJ2YWwgPSBkMy50aW1lRGF5O1xuICAgICAgICB9IGVsc2UgaWYgKGRheXMgPD0gNCAqIDE1KSB7XG4gICAgICAgICAgICAvLyBudW1iZXIgb2YgdGlja3M6IDQtMTVcbiAgICAgICAgICAgIHRpY2tJbnRlcnZhbCA9IGQzLnRpbWVEYXkuZXZlcnkoNCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5cyA8PSA3ICogMTUpIHtcbiAgICAgICAgICAgIC8vIG51bWJlciBvZiB0aWNrczogOC0xNVxuICAgICAgICAgICAgdGlja0ludGVydmFsID0gZDMudGltZVdlZWs7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5cyA8PSAxNSAqIDMwKSB7XG4gICAgICAgICAgICAvLyBudW1iZXIgb2YgdGlja3M6IDQtMTVcbiAgICAgICAgICAgIHRpY2tJbnRlcnZhbCA9IGQzLnRpbWVNb250aDtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlzIDw9IDE1ICogNjApIHtcbiAgICAgICAgICAgIC8vIG51bWJlciBvZiB0aWNrczogOC0xNVxuICAgICAgICAgICAgdGlja0ludGVydmFsID0gZDMudGltZU1vbnRoLmV2ZXJ5KDIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGlja0ludGVydmFsID0gZDMudGltZVllYXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW3RpY2tWYWx1ZXMsIHRpY2tJbnRlcnZhbF07XG59XG5cbmZ1bmN0aW9uIGdldFhUaWNrTGFiZWxGb3JtYXQoZGF0ZXM6IE1vbWVudFtdLCBpblRpY2tMYWJlbEZvcm1hdDogc3RyaW5nKSB7XG4gICAgaWYgKGluVGlja0xhYmVsRm9ybWF0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZuVGlja0xhYmVsRm9ybWF0KGRhdGU6IERhdGUpOiBzdHJpbmcge1xuICAgICAgICAgICAgcmV0dXJuIGhlbHBlci5kYXRlVG9TdHIod2luZG93Lm1vbWVudChkYXRlKSwgaW5UaWNrTGFiZWxGb3JtYXQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmblRpY2tMYWJlbEZvcm1hdDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgdGlja0xhYmVsRm9ybWF0ID0gbnVsbDtcbiAgICAgICAgbGV0IGRheXMgPSBkYXRlcy5sZW5ndGg7XG5cbiAgICAgICAgaWYgKGRheXMgPD0gMTUpIHtcbiAgICAgICAgICAgIC8vIG51bWJlciBvZiB0aWNrczogMC0xNVxuICAgICAgICAgICAgdGlja0xhYmVsRm9ybWF0ID0gZDMudGltZUZvcm1hdChcIiV5LSVtLSVkXCIpO1xuICAgICAgICB9IGVsc2UgaWYgKGRheXMgPD0gNCAqIDE1KSB7XG4gICAgICAgICAgICAvLyBudW1iZXIgb2YgdGlja3M6IDQtMTVcbiAgICAgICAgICAgIHRpY2tMYWJlbEZvcm1hdCA9IGQzLnRpbWVGb3JtYXQoXCIleS0lbS0lZFwiKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlzIDw9IDcgKiAxNSkge1xuICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHRpY2tzOiA4LTE1XG4gICAgICAgICAgICB0aWNrTGFiZWxGb3JtYXQgPSBkMy50aW1lRm9ybWF0KFwiJXktJW0tJWRcIik7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF5cyA8PSAxNSAqIDMwKSB7XG4gICAgICAgICAgICAvLyBudW1iZXIgb2YgdGlja3M6IDQtMTVcbiAgICAgICAgICAgIHRpY2tMYWJlbEZvcm1hdCA9IGQzLnRpbWVGb3JtYXQoXCIleSAlYlwiKTtcbiAgICAgICAgfSBlbHNlIGlmIChkYXlzIDw9IDE1ICogNjApIHtcbiAgICAgICAgICAgIC8vIG51bWJlciBvZiB0aWNrczogOC0xNVxuICAgICAgICAgICAgdGlja0xhYmVsRm9ybWF0ID0gZDMudGltZUZvcm1hdChcIiV5ICViXCIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGlja0xhYmVsRm9ybWF0ID0gZDMudGltZUZvcm1hdChcIiVZXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRpY2tMYWJlbEZvcm1hdDtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGdldFlUaWNrVmFsdWVzKFxuICAgIHlMb3dlcjogbnVtYmVyLFxuICAgIHlVcHBlcjogbnVtYmVyLFxuICAgIGludGVydmFsOiBudW1iZXIgfCBEdXJhdGlvbixcbiAgICBpc1RpbWVWYWx1ZSA9IGZhbHNlXG4pIHtcbiAgICAvLyBUaGUgaW5wdXQgaW50ZXJ2YWwgY291bGQgYmUgbnVsbCxcbiAgICAvLyBnZW5lcmF0ZSB0aWNrIHZhbHVlcyBmb3IgdGltZSB2YWx1ZXMgZXZlbiBpZiBpbnRlcnZhbCBpcyBudWxsXG5cbiAgICAvLyBjb25zb2xlLmxvZyhpbnRlcnZhbCk7XG4gICAgLy8gY29uc29sZS5sb2coaXNUaW1lVmFsdWUpO1xuXG4gICAgY29uc3QgYWJzRXh0ZW50ID0gTWF0aC5hYnMoeVVwcGVyIC0geUxvd2VyKTtcbiAgICBsZXQgdGlja1ZhbHVlczogQXJyYXk8bnVtYmVyPiA9IFtdO1xuXG4gICAgaWYgKCFpc1RpbWVWYWx1ZSkge1xuICAgICAgICAvLyB5IHZhbHVlcyBhcmUgbnVtYmVyc1xuICAgICAgICBpZiAoaW50ZXJ2YWwgJiYgdHlwZW9mIGludGVydmFsID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAvLyAhPT1udWxsICYmICE9PSAwXG4gICAgICAgICAgICB0aWNrVmFsdWVzID0gZDMucmFuZ2UoeUxvd2VyLCB5VXBwZXIsIGludGVydmFsKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHkgdmFsdWVzIGFyZSB0aW1lIHZhbHVlc1xuICAgICAgICBpZiAoaW50ZXJ2YWwgJiYgd2luZG93Lm1vbWVudC5pc0R1cmF0aW9uKGludGVydmFsKSkge1xuICAgICAgICAgICAgbGV0IGludGVydmFsSW5TZWNvbmRzID0gTWF0aC5hYnMoaW50ZXJ2YWwuYXNTZWNvbmRzKCkpO1xuICAgICAgICAgICAgdGlja1ZhbHVlcyA9IGQzLnJhbmdlKHlMb3dlciwgeVVwcGVyLCBpbnRlcnZhbEluU2Vjb25kcyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBhdXRvIGludGVydmFsIGZvciB0aW1lIHZhbHVlc1xuICAgICAgICAgICAgaWYgKGFic0V4dGVudCA+IDUgKiA2MCAqIDYwKSB7XG4gICAgICAgICAgICAgICAgLy8gZXh0ZW50IG92ZXIgdGhhbiA1IGhvdXJzXG4gICAgICAgICAgICAgICAgLy8gdGljayBvbiB0aGUgaG91clxuICAgICAgICAgICAgICAgIHlMb3dlciA9IE1hdGguZmxvb3IoeUxvd2VyIC8gMzYwMCkgKiAzNjAwO1xuICAgICAgICAgICAgICAgIHlVcHBlciA9IE1hdGguY2VpbCh5VXBwZXIgLyAzNjAwKSAqIDM2MDA7XG5cbiAgICAgICAgICAgICAgICB0aWNrVmFsdWVzID0gZDMucmFuZ2UoeUxvd2VyLCB5VXBwZXIsIDM2MDApO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyB0aWNrIG9uIHRoZSBoYWxmIGhvdXJcbiAgICAgICAgICAgICAgICB5TG93ZXIgPSBNYXRoLmZsb29yKHlMb3dlciAvIDE4MDApICogMTgwMDtcbiAgICAgICAgICAgICAgICB5VXBwZXIgPSBNYXRoLmNlaWwoeVVwcGVyIC8gMTgwMCkgKiAxODAwO1xuXG4gICAgICAgICAgICAgICAgdGlja1ZhbHVlcyA9IGQzLnJhbmdlKHlMb3dlciwgeVVwcGVyLCAxODAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aWNrVmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRpY2tWYWx1ZXM7XG59XG5cbmZ1bmN0aW9uIGdldFlUaWNrTGFiZWxGb3JtYXQoXG4gICAgeUxvd2VyOiBudW1iZXIsXG4gICAgeVVwcGVyOiBudW1iZXIsXG4gICAgaW5UaWNrTGFiZWxGb3JtYXQ6IHN0cmluZyxcbiAgICBpc1RpbWVWYWx1ZSA9IGZhbHNlXG4pIHtcbiAgICAvLyByZXR1cm4gYSBmdW5jdGlvbiBjb252ZXJ0IHZhbHVlIHRvIHRpbWUgc3RyaW5nXG5cbiAgICBpZiAoIWlzVGltZVZhbHVlKSB7XG4gICAgICAgIGlmIChpblRpY2tMYWJlbEZvcm1hdCkge1xuICAgICAgICAgICAgZnVuY3Rpb24gdGlja0Zvcm1hdCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgICAgICAgICBsZXQgc3RyVmFsdWUgPSBzcHJpbnRmKFwiJVwiICsgaW5UaWNrTGFiZWxGb3JtYXQsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyVmFsdWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB0aWNrRm9ybWF0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkMy50aWNrRm9ybWF0KHlMb3dlciwgeVVwcGVyLCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gdmFsdWVzIGluIHNlY29uZHNcbiAgICAgICAgaWYgKGluVGlja0xhYmVsRm9ybWF0KSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmblRpY2tMYWJlbEZvcm1hdCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgICAgICAgICBsZXQgZGF5U3RhcnQgPSB3aW5kb3cubW9tZW50KFwiMDA6MDBcIiwgXCJISDptbVwiLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBsZXQgdGlja1RpbWUgPSBkYXlTdGFydC5hZGQodmFsdWUsIFwic2Vjb25kc1wiKTtcbiAgICAgICAgICAgICAgICBsZXQgZm9ybWF0ID0gdGlja1RpbWUuZm9ybWF0KGluVGlja0xhYmVsRm9ybWF0KTtcblxuICAgICAgICAgICAgICAgIGxldCBkZXZIb3VyID0gKHZhbHVlIC0geUxvd2VyKSAvIDM2MDA7XG4gICAgICAgICAgICAgICAgbGV0IGludGVybGVhdmUgPSBkZXZIb3VyICUgMjtcblxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZm5UaWNrTGFiZWxGb3JtYXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmdW5jdGlvbiBmblRpY2tMYWJlbEZvcm1hdCh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhYnNFeHRlbnQgPSBNYXRoLmFicyh5VXBwZXIgLSB5TG93ZXIpO1xuICAgICAgICAgICAgICAgIGxldCBkYXlTdGFydCA9IHdpbmRvdy5tb21lbnQoXCIwMDowMFwiLCBcIkhIOm1tXCIsIHRydWUpO1xuICAgICAgICAgICAgICAgIGxldCB0aWNrVGltZSA9IGRheVN0YXJ0LmFkZCh2YWx1ZSwgXCJzZWNvbmRzXCIpO1xuICAgICAgICAgICAgICAgIGxldCBmb3JtYXQgPSB0aWNrVGltZS5mb3JtYXQoXCJISDptbVwiKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgeUxvd2VyL3lVcHBlcjogJHt5TG93ZXJ9LyR7eVVwcGVyfWApXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYHZhbHVlL2V4dGVudC9pbnRlcjoke3ZhbHVlfS8ke2Fic0V4dGVudH0vJHsodmFsdWUteUxvd2VyKS8zNjAwfWApO1xuXG4gICAgICAgICAgICAgICAgLy8gYXV0byBpbnRlcmxlYXZlIGlmIGV4dGVudCBvdmVyIDEyIGhvdXJzXG4gICAgICAgICAgICAgICAgaWYgKGFic0V4dGVudCA+IDEyICogNjAgKiA2MCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGV2SG91ciA9ICh2YWx1ZSAtIHlMb3dlcikgLyAzNjAwO1xuICAgICAgICAgICAgICAgICAgICBsZXQgaW50ZXJsZWF2ZSA9IGRldkhvdXIgJSAyO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPCB5TG93ZXIgfHwgdmFsdWUgPiB5VXBwZXIgfHwgaW50ZXJsZWF2ZSA8IDEuMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmblRpY2tMYWJlbEZvcm1hdDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyKGNhbnZhczogSFRNTEVsZW1lbnQsIHJlbmRlckluZm86IFJlbmRlckluZm8pIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlclwiKTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmRhdGFzZXRzKTtcblxuICAgIC8vIERhdGEgcHJlcHJvY2Vzc2luZ1xuICAgIGZvciAobGV0IGRhdGFzZXQgb2YgcmVuZGVySW5mby5kYXRhc2V0cykge1xuICAgICAgICBpZiAoZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSBjb250aW51ZTtcbiAgICAgICAgLy8gdmFsdWVTaGlmdFxuICAgICAgICBsZXQgc2hpZnRBbW91bnQgPSByZW5kZXJJbmZvLnZhbHVlU2hpZnRbZGF0YXNldC5nZXRJZCgpXTtcbiAgICAgICAgaWYgKHNoaWZ0QW1vdW50ICE9PSBudWxsICYmIHNoaWZ0QW1vdW50ICE9PSAwKSB7XG4gICAgICAgICAgICBkYXRhc2V0LnNoaWZ0KFxuICAgICAgICAgICAgICAgIHNoaWZ0QW1vdW50LFxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8uc2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuW2RhdGFzZXQuZ2V0SWQoKV1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gcGVuYWx0eVxuICAgICAgICBpZiAocmVuZGVySW5mby5wZW5hbHR5W2RhdGFzZXQuZ2V0SWQoKV0gIT09IG51bGwpIHtcbiAgICAgICAgICAgIGRhdGFzZXQuc2V0UGVuYWx0eShyZW5kZXJJbmZvLnBlbmFsdHlbZGF0YXNldC5nZXRJZCgpXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYWNjdW1cbiAgICAgICAgaWYgKHJlbmRlckluZm8uYWNjdW1bZGF0YXNldC5nZXRJZCgpXSkge1xuICAgICAgICAgICAgZGF0YXNldC5hY2N1bXVsYXRlVmFsdWVzKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gc3RhY2tcbiAgICBpZiAocmVuZGVySW5mby5zdGFjaykge1xuICAgICAgICAvLyBUcmF2ZXJzZSB0aGUgZGF0YXNldHMsIGFuZCBhZGQgdXAgdGhlIHZhbHVlcyBmcm9tIGVhY2ggZGF0YXNldC5cbiAgICAgICAgbGV0IGxhc3REYXRhc2V0ID0gbnVsbDtcbiAgICAgICAgZm9yIChsZXQgZGF0YXNldCBvZiByZW5kZXJJbmZvLmRhdGFzZXRzKSB7XG4gICAgICAgICAgICBpZiAoZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSBjb250aW51ZTtcbiAgICAgICAgICAgIGlmIChsYXN0RGF0YXNldCkge1xuICAgICAgICAgICAgICAgIGRhdGFzZXQuc2hpZnRCeURhdGFzZXQobGFzdERhdGFzZXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGFzdERhdGFzZXQgPSBkYXRhc2V0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChsZXQgbGluZUluZm8gb2YgcmVuZGVySW5mby5saW5lKSB7XG4gICAgICAgIGxldCByZXQgPSByZW5kZXJMaW5lQ2hhcnQoY2FudmFzLCByZW5kZXJJbmZvLCBsaW5lSW5mbyk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IGJhckluZm8gb2YgcmVuZGVySW5mby5iYXIpIHtcbiAgICAgICAgbGV0IHJldCA9IHJlbmRlckJhckNoYXJ0KGNhbnZhcywgcmVuZGVySW5mbywgYmFySW5mbyk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGZvciAobGV0IHBpZUluZm8gb2YgcmVuZGVySW5mby5waWUpIHtcbiAgICAgICAgbGV0IHJldCA9IHBpZS5yZW5kZXJQaWVDaGFydChjYW52YXMsIHJlbmRlckluZm8sIHBpZUluZm8pO1xuICAgICAgICBpZiAodHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBzdW1tYXJ5SW5mbyBvZiByZW5kZXJJbmZvLnN1bW1hcnkpIHtcbiAgICAgICAgbGV0IHJldCA9IHN1bW1hcnkucmVuZGVyU3VtbWFyeShjYW52YXMsIHJlbmRlckluZm8sIHN1bW1hcnlJbmZvKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZm9yIChsZXQgYnVsbGV0SW5mbyBvZiByZW5kZXJJbmZvLmJ1bGxldCkge1xuICAgICAgICBsZXQgcmV0ID0gYnVsbGV0LnJlbmRlckJ1bGxldChjYW52YXMsIHJlbmRlckluZm8sIGJ1bGxldEluZm8pO1xuICAgICAgICBpZiAodHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBtb250aEluZm8gb2YgcmVuZGVySW5mby5tb250aCkge1xuICAgICAgICBsZXQgcmV0ID0gbW9udGgucmVuZGVyTW9udGgoY2FudmFzLCByZW5kZXJJbmZvLCBtb250aEluZm8pO1xuICAgICAgICBpZiAodHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBoZWF0bWFwSW5mbyBvZiByZW5kZXJJbmZvLmhlYXRtYXApIHtcbiAgICAgICAgbGV0IHJldCA9IGhlYXRtYXAucmVuZGVySGVhdG1hcChjYW52YXMsIHJlbmRlckluZm8sIGhlYXRtYXBJbmZvKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXQ7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlclhBeGlzKFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBjaGFydEluZm86IENvbW1vbkNoYXJ0SW5mb1xuKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJYQXhpc1wiKTtcblxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhY2hhcnRJbmZvKSByZXR1cm47XG5cbiAgICBsZXQgZGF0YXNldHMgPSByZW5kZXJJbmZvLmRhdGFzZXRzO1xuICAgIGxldCB4RG9tYWluID0gZDMuZXh0ZW50KGRhdGFzZXRzLmdldERhdGVzKCkpO1xuICAgIGxldCB4U2NhbGUgPSBkM1xuICAgICAgICAuc2NhbGVUaW1lKClcbiAgICAgICAgLmRvbWFpbih4RG9tYWluKVxuICAgICAgICAucmFuZ2UoWzAsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoXSk7XG4gICAgY2hhcnRFbGVtZW50c1tcInhTY2FsZVwiXSA9IHhTY2FsZTtcblxuICAgIGxldCB0aWNrSW50ZXJ2YWxJbkR1cmF0aW9uID0gaGVscGVyLnBhcnNlRHVyYXRpb25TdHJpbmcoXG4gICAgICAgIGNoYXJ0SW5mby54QXhpc1RpY2tJbnRlcnZhbFxuICAgICk7XG5cbiAgICBsZXQgW3RpY2tWYWx1ZXMsIHRpY2tJbnRlcnZhbF0gPSBnZXRYVGlja1ZhbHVlcyhcbiAgICAgICAgZGF0YXNldHMuZ2V0RGF0ZXMoKSxcbiAgICAgICAgdGlja0ludGVydmFsSW5EdXJhdGlvblxuICAgICk7XG4gICAgbGV0IHRpY2tGb3JtYXQgPSBnZXRYVGlja0xhYmVsRm9ybWF0KFxuICAgICAgICBkYXRhc2V0cy5nZXREYXRlcygpLFxuICAgICAgICBjaGFydEluZm8ueEF4aXNUaWNrTGFiZWxGb3JtYXRcbiAgICApO1xuXG4gICAgbGV0IHhBeGlzR2VuID0gZDMuYXhpc0JvdHRvbSh4U2NhbGUpO1xuXG4gICAgaWYgKHRpY2tWYWx1ZXMgJiYgdGlja1ZhbHVlcy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgeEF4aXNHZW4udGlja1ZhbHVlcyh0aWNrVmFsdWVzKTtcbiAgICB9IGVsc2UgaWYgKHRpY2tJbnRlcnZhbCkge1xuICAgICAgICB4QXhpc0dlbi50aWNrcyh0aWNrSW50ZXJ2YWwpO1xuICAgIH1cbiAgICBpZiAodGlja0Zvcm1hdCkge1xuICAgICAgICB4QXhpc0dlbi50aWNrRm9ybWF0KHRpY2tGb3JtYXQpO1xuICAgIH1cblxuICAgIGxldCB4QXhpcyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWEgLy8gYXhpcyBpbmNsdWRlcyB0aWNrc1xuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxuICAgICAgICAuYXR0cihcImlkXCIsIFwieEF4aXNcIilcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoMCxcIiArIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArIFwiKVwiXG4gICAgICAgICkgLy8gcmVsYXRpdmUgdG8gZ3JhcGhBcmVhXG4gICAgICAgIC5jYWxsKHhBeGlzR2VuKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1heGlzXCIpO1xuICAgIGlmIChjaGFydEluZm8ueEF4aXNDb2xvcikge1xuICAgICAgICB4QXhpcy5zdHlsZShcInN0cm9rZVwiLCBjaGFydEluZm8ueEF4aXNDb2xvcik7XG4gICAgfVxuICAgIGNoYXJ0RWxlbWVudHNbXCJ4QXhpc1wiXSA9IHhBeGlzO1xuXG4gICAgbGV0IHRleHRTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcIjk5LTk5LTk5XCIpO1xuXG4gICAgbGV0IHhBeGlzVGlja0xhYmVscyA9IHhBeGlzXG4gICAgICAgIC5zZWxlY3RBbGwoXCJ0ZXh0XCIpXG4gICAgICAgIC5hdHRyKFwieFwiLCAtMSAqIHRleHRTaXplLmhlaWdodCAqIE1hdGguY29zKCg2NSAvIDE4MCkgKiBNYXRoLlBJKSlcbiAgICAgICAgLmF0dHIoXCJ5XCIsIDApXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwicm90YXRlKC02NSlcIilcbiAgICAgICAgLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgXCJlbmRcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItdGljay1sYWJlbFwiKTtcbiAgICBpZiAoY2hhcnRJbmZvLnhBeGlzQ29sb3IpIHtcbiAgICAgICAgeEF4aXNUaWNrTGFiZWxzLnN0eWxlKFwiZmlsbFwiLCBjaGFydEluZm8ueEF4aXNDb2xvcik7XG4gICAgfVxuXG4gICAgbGV0IHRpY2tMZW5ndGggPSA2O1xuICAgIGxldCB0aWNrTGFiZWxIZWlnaHQgPSB0ZXh0U2l6ZS53aWR0aCAqIE1hdGguc2luKCg2NSAvIDE4MCkgKiBNYXRoLlBJKTtcbiAgICBsZXQgeEF4aXNMYWJlbCA9IHhBeGlzXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgIC50ZXh0KGNoYXJ0SW5mby54QXhpc0xhYmVsKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggLyAyICtcbiAgICAgICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICAgICAgKHRpY2tMZW5ndGggKyB0aWNrTGFiZWxIZWlnaHQpICtcbiAgICAgICAgICAgICAgICBcIilcIlxuICAgICAgICApXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWF4aXMtbGFiZWxcIik7XG4gICAgaWYgKGNoYXJ0SW5mby54QXhpc0xhYmVsQ29sb3IpIHtcbiAgICAgICAgeEF4aXNMYWJlbC5zdHlsZShcImZpbGxcIiwgY2hhcnRJbmZvLnhBeGlzTGFiZWxDb2xvcik7XG4gICAgfVxuXG4gICAgLy8geEF4aXMgaGVpZ2h0XG4gICAgeEF4aXMuYXR0cihcImhlaWdodFwiLCB0aWNrTGVuZ3RoICsgdGlja0xhYmVsSGVpZ2h0KTtcblxuICAgIC8vIEV4cGFuZCBhcmVhc1xuICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuc3ZnLCAwLCB0aWNrTGVuZ3RoICsgdGlja0xhYmVsSGVpZ2h0KTtcbiAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLmdyYXBoQXJlYSwgMCwgdGlja0xlbmd0aCArIHRpY2tMYWJlbEhlaWdodCk7XG59XG5cbmZ1bmN0aW9uIHJlbmRlcllBeGlzKFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBjaGFydEluZm86IENvbW1vbkNoYXJ0SW5mbyxcbiAgICB5QXhpc0xvY2F0aW9uOiBzdHJpbmcsXG4gICAgZGF0YXNldElkczogQXJyYXk8bnVtYmVyPlxuKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJZQXhpc1wiKVxuICAgIC8vIGNvbnNvbGUubG9nKGRhdGFzZXRzKTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0SWRzKTtcblxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhY2hhcnRJbmZvKSByZXR1cm47XG5cbiAgICBsZXQgZGF0YXNldHMgPSByZW5kZXJJbmZvLmRhdGFzZXRzO1xuICAgIGlmIChkYXRhc2V0SWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHlBeGlzTG9jYXRpb24gIT09IFwibGVmdFwiICYmIHlBeGlzTG9jYXRpb24gIT09IFwicmlnaHRcIikgcmV0dXJuO1xuXG4gICAgbGV0IHlNaW5PZkRhdGFzZXRzID0gbnVsbDtcbiAgICBsZXQgeU1heE9mRGF0YXNldHMgPSBudWxsO1xuICAgIGxldCB0bXBWYWx1ZUlzVGltZSA9IG51bGw7XG4gICAgbGV0IHZhbHVlSXNUaW1lID0gZmFsc2U7XG4gICAgZm9yIChsZXQgZGF0YXNldElkIG9mIGRhdGFzZXRJZHMpIHtcbiAgICAgICAgbGV0IGRhdGFzZXQgPSBkYXRhc2V0cy5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpO1xuICAgICAgICBpZiAoZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSBjb250aW51ZTtcblxuICAgICAgICBpZiAoeU1pbk9mRGF0YXNldHMgPT09IG51bGwgfHwgZGF0YXNldC5nZXRZTWluKCkgPCB5TWluT2ZEYXRhc2V0cykge1xuICAgICAgICAgICAgeU1pbk9mRGF0YXNldHMgPSBkYXRhc2V0LmdldFlNaW4oKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeU1heE9mRGF0YXNldHMgPT09IG51bGwgfHwgZGF0YXNldC5nZXRZTWF4KCkgPiB5TWF4T2ZEYXRhc2V0cykge1xuICAgICAgICAgICAgeU1heE9mRGF0YXNldHMgPSBkYXRhc2V0LmdldFlNYXgoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5lZWQgYWxsIGRhdGFzZXRzIGhhdmUgc2FtZSBzZXR0aW5ncyBmb3IgdGltZSB2YWx1ZVxuICAgICAgICB2YWx1ZUlzVGltZSA9IGRhdGFzZXQudmFsdWVUeXBlID09PSBWYWx1ZVR5cGUuVGltZTtcbiAgICAgICAgaWYgKHRtcFZhbHVlSXNUaW1lID09PSBudWxsKSB7XG4gICAgICAgICAgICB0bXBWYWx1ZUlzVGltZSA9IHZhbHVlSXNUaW1lO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKHZhbHVlSXNUaW1lICE9PSB0bXBWYWx1ZUlzVGltZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBcIk5vdCBhbGwgdmFsdWVzIGluIHRpbWUgZm9ybWF0XCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coeU1pbk9mRGF0YXNldHMpO1xuICAgIC8vIGNvbnNvbGUubG9nKHlNYXhPZkRhdGFzZXRzKTtcblxuICAgIGxldCB5TWluID0gbnVsbDtcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgeU1pbiA9IGNoYXJ0SW5mby55TWluWzBdO1xuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgIHlNaW4gPSBjaGFydEluZm8ueU1pblsxXTtcbiAgICB9XG4gICAgbGV0IHlNaW5Bc3NpZ25lZCA9IGZhbHNlO1xuICAgIGlmICh0eXBlb2YgeU1pbiAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICB5TWluID0geU1pbk9mRGF0YXNldHM7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgeU1pbkFzc2lnbmVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBsZXQgeU1heCA9IG51bGw7XG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XG4gICAgICAgIHlNYXggPSBjaGFydEluZm8ueU1heFswXTtcbiAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICB5TWF4ID0gY2hhcnRJbmZvLnlNYXhbMV07XG4gICAgfVxuICAgIGxldCB5TWF4QXNzaWduZWQgPSBmYWxzZTtcbiAgICBpZiAodHlwZW9mIHlNYXggIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgeU1heCA9IHlNYXhPZkRhdGFzZXRzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHlNYXhBc3NpZ25lZCA9IHRydWU7XG4gICAgfVxuICAgIGlmICh5TWF4IDwgeU1pbikge1xuICAgICAgICBsZXQgeVRtcCA9IHlNaW47XG4gICAgICAgIHlNaW4gPSB5TWF4O1xuICAgICAgICB5TWF4ID0geVRtcDtcbiAgICAgICAgbGV0IHlUbXBBc3NpZ25lZCA9IHlNaW5Bc3NpZ25lZDtcbiAgICAgICAgeU1pbkFzc2lnbmVkID0geU1heEFzc2lnbmVkO1xuICAgICAgICB5TWF4QXNzaWduZWQgPSB5VG1wQXNzaWduZWQ7XG4gICAgfVxuXG4gICAgbGV0IHlFeHRlbnQgPSB5TWF4IC0geU1pbjtcblxuICAgIGxldCB5U2NhbGUgPSBkMy5zY2FsZUxpbmVhcigpO1xuICAgIGxldCB5TG93ZXIsIHlVcHBlcjtcbiAgICBpZiAoeU1pbkFzc2lnbmVkKSB7XG4gICAgICAgIHlMb3dlciA9IHlNaW47XG4gICAgfSBlbHNlIHtcbiAgICAgICAgeUxvd2VyID0geU1pbiAtIHlFeHRlbnQgKiAwLjI7XG4gICAgfVxuICAgIGlmICh5TWF4QXNzaWduZWQpIHtcbiAgICAgICAgeVVwcGVyID0geU1heDtcbiAgICB9IGVsc2Uge1xuICAgICAgICB5VXBwZXIgPSB5TWF4ICsgeUV4dGVudCAqIDAuMjtcbiAgICB9XG4gICAgLy8gaWYgaXQgaXMgYmFyIGNoYXJ0LCB6ZXJvIG11c3QgYmUgY29udGFpbmVkIGluIHRoZSByYW5nZVxuICAgIGlmIChjaGFydEluZm8uR2V0R3JhcGhUeXBlKCkgPT09IEdyYXBoVHlwZS5CYXIpIHtcbiAgICAgICAgaWYgKHlVcHBlciA8IDAuMCkge1xuICAgICAgICAgICAgeVVwcGVyID0gMDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoeUxvd2VyID4gMC4wKSB7XG4gICAgICAgICAgICB5TG93ZXIgPSAwLjA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IGRvbWFpbiA9IFt5TG93ZXIsIHlVcHBlcl07XG4gICAgaWYgKFxuICAgICAgICAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIgJiYgY2hhcnRJbmZvLnJldmVyc2VZQXhpc1swXSkgfHxcbiAgICAgICAgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIiAmJiBjaGFydEluZm8ucmV2ZXJzZVlBeGlzWzFdKVxuICAgICkge1xuICAgICAgICBkb21haW4gPSBbeVVwcGVyLCB5TG93ZXJdO1xuICAgIH1cbiAgICB5U2NhbGUuZG9tYWluKGRvbWFpbikucmFuZ2UoW3JlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCwgMF0pO1xuXG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XG4gICAgICAgIGNoYXJ0RWxlbWVudHNbXCJsZWZ0WVNjYWxlXCJdID0geVNjYWxlO1xuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgIGNoYXJ0RWxlbWVudHNbXCJyaWdodFlTY2FsZVwiXSA9IHlTY2FsZTtcbiAgICB9XG5cbiAgICBsZXQgeUF4aXNDb2xvciA9IFwiXCI7XG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XG4gICAgICAgIHlBeGlzQ29sb3IgPSBjaGFydEluZm8ueUF4aXNDb2xvclswXTtcbiAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICB5QXhpc0NvbG9yID0gY2hhcnRJbmZvLnlBeGlzQ29sb3JbMV07XG4gICAgfVxuXG4gICAgbGV0IHlBeGlzTGFiZWxDb2xvciA9IFwiXCI7XG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XG4gICAgICAgIHlBeGlzTGFiZWxDb2xvciA9IGNoYXJ0SW5mby55QXhpc0xhYmVsQ29sb3JbMF07XG4gICAgfSBlbHNlIGlmICh5QXhpc0xvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgeUF4aXNMYWJlbENvbG9yID0gY2hhcnRJbmZvLnlBeGlzTGFiZWxDb2xvclsxXTtcbiAgICB9XG5cbiAgICBsZXQgeUF4aXNMYWJlbFRleHQgPSBcIlwiO1xuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgICB5QXhpc0xhYmVsVGV4dCA9IGNoYXJ0SW5mby55QXhpc0xhYmVsWzBdO1xuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgIHlBeGlzTGFiZWxUZXh0ID0gY2hhcnRJbmZvLnlBeGlzTGFiZWxbMV07XG4gICAgfVxuXG4gICAgbGV0IHlBeGlzVW5pdFRleHQgPSBcIlwiO1xuICAgIGxldCB5QXhpc1RpY2tJbnRlcnZhbCA9IG51bGw7XG4gICAgbGV0IHlBeGlzVGlja0xhYmVsRm9ybWF0ID0gbnVsbDtcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgeUF4aXNVbml0VGV4dCA9IGNoYXJ0SW5mby55QXhpc1VuaXRbMF07XG4gICAgICAgIHlBeGlzVGlja0ludGVydmFsID0gY2hhcnRJbmZvLnlBeGlzVGlja0ludGVydmFsWzBdOyAvLyBzdHJpbmdcbiAgICAgICAgeUF4aXNUaWNrTGFiZWxGb3JtYXQgPSBjaGFydEluZm8ueUF4aXNUaWNrTGFiZWxGb3JtYXRbMF07XG4gICAgfSBlbHNlIGlmICh5QXhpc0xvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgeUF4aXNVbml0VGV4dCA9IGNoYXJ0SW5mby55QXhpc1VuaXRbMV07XG4gICAgICAgIHlBeGlzVGlja0ludGVydmFsID0gY2hhcnRJbmZvLnlBeGlzVGlja0ludGVydmFsWzFdOyAvLyBzdHJpbmdcbiAgICAgICAgeUF4aXNUaWNrTGFiZWxGb3JtYXQgPSBjaGFydEluZm8ueUF4aXNUaWNrTGFiZWxGb3JtYXRbMV07XG4gICAgfVxuICAgIC8vIGdldCBpbnRlcnZhbCBmcm9tIHN0cmluZ1xuICAgIGxldCB0aWNrSW50ZXJ2YWwgPSBudWxsO1xuICAgIGlmICh2YWx1ZUlzVGltZSkge1xuICAgICAgICB0aWNrSW50ZXJ2YWwgPSBoZWxwZXIucGFyc2VEdXJhdGlvblN0cmluZyh5QXhpc1RpY2tJbnRlcnZhbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdGlja0ludGVydmFsID0gcGFyc2VGbG9hdCh5QXhpc1RpY2tJbnRlcnZhbCk7XG4gICAgICAgIGlmICghTnVtYmVyLmlzTnVtYmVyKHRpY2tJbnRlcnZhbCkgfHwgTnVtYmVyLmlzTmFOKHRpY2tJbnRlcnZhbCkpIHtcbiAgICAgICAgICAgIHRpY2tJbnRlcnZhbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgeUF4aXNHZW47XG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XG4gICAgICAgIHlBeGlzR2VuID0gZDMuYXhpc0xlZnQoeVNjYWxlKTtcbiAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICB5QXhpc0dlbiA9IGQzLmF4aXNSaWdodCh5U2NhbGUpO1xuICAgIH1cbiAgICBpZiAoeUF4aXNHZW4pIHtcbiAgICAgICAgbGV0IHRpY2tMYWJlbEZvcm1hdCA9IGdldFlUaWNrTGFiZWxGb3JtYXQoXG4gICAgICAgICAgICB5TG93ZXIsXG4gICAgICAgICAgICB5VXBwZXIsXG4gICAgICAgICAgICB5QXhpc1RpY2tMYWJlbEZvcm1hdCxcbiAgICAgICAgICAgIHZhbHVlSXNUaW1lXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0aWNrTGFiZWxGb3JtYXQpIHtcbiAgICAgICAgICAgIHlBeGlzR2VuLnRpY2tGb3JtYXQodGlja0xhYmVsRm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdGlja1ZhbHVlcyA9IGdldFlUaWNrVmFsdWVzKFxuICAgICAgICAgICAgeUxvd2VyLFxuICAgICAgICAgICAgeVVwcGVyLFxuICAgICAgICAgICAgdGlja0ludGVydmFsLFxuICAgICAgICAgICAgdmFsdWVJc1RpbWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHRpY2tWYWx1ZXMpIHtcbiAgICAgICAgICAgIHlBeGlzR2VuLnRpY2tWYWx1ZXModGlja1ZhbHVlcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgeUF4aXMgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJ5QXhpc1wiKVxuICAgICAgICAuY2FsbCh5QXhpc0dlbilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItYXhpc1wiKTtcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgeUF4aXMuYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICsgXCIgLDApXCJcbiAgICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XG4gICAgICAgIGNoYXJ0RWxlbWVudHNbXCJsZWZ0WUF4aXNcIl0gPSB5QXhpcztcbiAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICBjaGFydEVsZW1lbnRzW1wicmlnaHRZQXhpc1wiXSA9IHlBeGlzO1xuICAgIH1cblxuICAgIGxldCB5QXhpc0xpbmUgPSB5QXhpcy5zZWxlY3RBbGwoXCJwYXRoXCIpO1xuICAgIGlmICh5QXhpc0NvbG9yKSB7XG4gICAgICAgIHlBeGlzTGluZS5zdHlsZShcInN0cm9rZVwiLCB5QXhpc0NvbG9yKTtcbiAgICB9XG5cbiAgICBsZXQgeUF4aXNUaWNrcyA9IHlBeGlzLnNlbGVjdEFsbChcImxpbmVcIik7XG4gICAgaWYgKHlBeGlzQ29sb3IpIHtcbiAgICAgICAgeUF4aXNUaWNrcy5zdHlsZShcInN0cm9rZVwiLCB5QXhpc0NvbG9yKTtcbiAgICB9XG5cbiAgICBsZXQgeUF4aXNUaWNrTGFiZWxzID0geUF4aXNcbiAgICAgICAgLnNlbGVjdEFsbChcInRleHRcIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItdGljay1sYWJlbFwiKTtcbiAgICBpZiAoeUF4aXNDb2xvcikge1xuICAgICAgICB5QXhpc1RpY2tMYWJlbHMuc3R5bGUoXCJmaWxsXCIsIHlBeGlzQ29sb3IpO1xuICAgIH1cblxuICAgIC8vIEdldCBtYXggdGljayBsYWJlbCB3aWR0aFxuICAgIGxldCBtYXhUaWNrTGFiZWxXaWR0aCA9IDA7XG4gICAgZm9yIChsZXQgbGFiZWwgb2YgeUF4aXNUaWNrTGFiZWxzKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGxhYmVsLnRleHRDb250ZW50KTtcbiAgICAgICAgaWYgKGxhYmVsLnRleHRDb250ZW50KSB7XG4gICAgICAgICAgICBsZXQgbGFiZWxTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcbiAgICAgICAgICAgICAgICBsYWJlbC50ZXh0Q29udGVudCxcbiAgICAgICAgICAgICAgICBcInRyYWNrZXItYXhpcy1sYWJlbFwiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGxhYmVsU2l6ZS53aWR0aCA+IG1heFRpY2tMYWJlbFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgbWF4VGlja0xhYmVsV2lkdGggPSBsYWJlbFNpemUud2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2cobWF4VGlja0xhYmVsV2lkdGgpO1xuXG4gICAgaWYgKHlBeGlzVW5pdFRleHQgIT09IFwiXCIpIHtcbiAgICAgICAgeUF4aXNMYWJlbFRleHQgKz0gXCIgKFwiICsgeUF4aXNVbml0VGV4dCArIFwiKVwiO1xuICAgIH1cbiAgICBsZXQgeVRpY2tMZW5ndGggPSA2O1xuICAgIGxldCB5QXhpc0xhYmVsU2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoeUF4aXNMYWJlbFRleHQpO1xuICAgIGxldCB5QXhpc0xhYmVsID0geUF4aXNcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgLnRleHQoeUF4aXNMYWJlbFRleHQpXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwicm90YXRlKC05MClcIilcbiAgICAgICAgLmF0dHIoXCJ4XCIsICgtMSAqIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCkgLyAyLjApXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWF4aXMtbGFiZWxcIik7XG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XG4gICAgICAgIHlBeGlzTGFiZWwuYXR0cihcbiAgICAgICAgICAgIFwieVwiLFxuICAgICAgICAgICAgLXlUaWNrTGVuZ3RoIC0gbWF4VGlja0xhYmVsV2lkdGggLSB5QXhpc0xhYmVsU2l6ZS5oZWlnaHQgLyAyLjBcbiAgICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB5QXhpc0xhYmVsLmF0dHIoXG4gICAgICAgICAgICBcInlcIixcbiAgICAgICAgICAgICt5VGlja0xlbmd0aCArIG1heFRpY2tMYWJlbFdpZHRoICsgeUF4aXNMYWJlbFNpemUuaGVpZ2h0XG4gICAgICAgICk7XG4gICAgfVxuICAgIGlmICh5QXhpc0xhYmVsQ29sb3IpIHtcbiAgICAgICAgeUF4aXNMYWJlbC5zdHlsZShcImZpbGxcIiwgeUF4aXNMYWJlbENvbG9yKTtcbiAgICB9XG5cbiAgICBsZXQgeUF4aXNXaWR0aCA9IHlBeGlzTGFiZWxTaXplLmhlaWdodCArIG1heFRpY2tMYWJlbFdpZHRoICsgeVRpY2tMZW5ndGg7XG4gICAgeUF4aXMuYXR0cihcIndpZHRoXCIsIHlBeGlzV2lkdGgpO1xuXG4gICAgLy8gRXhwYW5kIGFyZWFzXG4gICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5zdmcsIHlBeGlzV2lkdGgsIDApO1xuICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLCB5QXhpc1dpZHRoLCAwKTtcblxuICAgIC8vIE1vdmUgYXJlYXNcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgLy8gTW92ZSBkYXRhQXJlYVxuICAgICAgICBoZWxwZXIubW92ZUFyZWEoY2hhcnRFbGVtZW50cy5kYXRhQXJlYSwgeUF4aXNXaWR0aCwgMCk7XG5cbiAgICAgICAgLy8gTW92ZSB0aXRsZVxuICAgICAgICBpZiAoY2hhcnRFbGVtZW50cy50aXRsZSkge1xuICAgICAgICAgICAgaGVscGVyLm1vdmVBcmVhKGNoYXJ0RWxlbWVudHMudGl0bGUsIHlBeGlzV2lkdGgsIDApO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZW5kZXJMaW5lKFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBsaW5lSW5mbzogTGluZUluZm8sXG4gICAgZGF0YXNldDogRGF0YXNldCxcbiAgICB5QXhpc0xvY2F0aW9uOiBzdHJpbmdcbikge1xuICAgIC8vIGNvbnNvbGUubG9nKGRhdGFzZXQpO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8pO1xuXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFsaW5lSW5mbykgcmV0dXJuO1xuXG4gICAgbGV0IHlTY2FsZTogYW55ID0gbnVsbDtcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgeVNjYWxlID0gY2hhcnRFbGVtZW50cy5sZWZ0WVNjYWxlO1xuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgIHlTY2FsZSA9IGNoYXJ0RWxlbWVudHMucmlnaHRZU2NhbGU7XG4gICAgfVxuXG4gICAgaWYgKGxpbmVJbmZvLnNob3dMaW5lW2RhdGFzZXQuZ2V0SWQoKV0pIHtcbiAgICAgICAgbGV0IGxpbmVHZW4gPSBkM1xuICAgICAgICAgICAgLmxpbmU8RGF0YVBvaW50PigpXG4gICAgICAgICAgICAuZGVmaW5lZChmdW5jdGlvbiAocDogRGF0YVBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHAudmFsdWUgIT09IG51bGw7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLngoZnVuY3Rpb24gKHA6IERhdGFQb2ludCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjaGFydEVsZW1lbnRzLnhTY2FsZShwLmRhdGUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC55KGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geVNjYWxlKHAudmFsdWUpO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgbGV0IGxpbmUgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXG4gICAgICAgICAgICAuYXBwZW5kKFwicGF0aFwiKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbGluZVwiKVxuICAgICAgICAgICAgLnN0eWxlKFwic3Ryb2tlLXdpZHRoXCIsIGxpbmVJbmZvLmxpbmVXaWR0aFtkYXRhc2V0LmdldElkKCldKTtcblxuICAgICAgICBpZiAobGluZUluZm8uZmlsbEdhcFtkYXRhc2V0LmdldElkKCldKSB7XG4gICAgICAgICAgICBsaW5lLmRhdHVtKFxuICAgICAgICAgICAgICAgIEFycmF5LmZyb20oZGF0YXNldCkuZmlsdGVyKGZ1bmN0aW9uIChwKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwLnZhbHVlICE9PSBudWxsO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApLmF0dHIoXCJkXCIsIGxpbmVHZW4gYXMgYW55KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxpbmUuZGF0dW0oZGF0YXNldCkuYXR0cihcImRcIiwgbGluZUdlbiBhcyBhbnkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGxpbmVJbmZvLmxpbmVDb2xvcltkYXRhc2V0LmdldElkKCldKSB7XG4gICAgICAgICAgICBsaW5lLnN0eWxlKFwic3Ryb2tlXCIsIGxpbmVJbmZvLmxpbmVDb2xvcltkYXRhc2V0LmdldElkKCldKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyUG9pbnRzKFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBsaW5lSW5mbzogTGluZUluZm8sXG4gICAgZGF0YXNldDogRGF0YXNldCxcbiAgICB5QXhpc0xvY2F0aW9uOiBzdHJpbmdcbikge1xuICAgIC8vIGNvbnNvbGUubG9nKGxpbmVJbmZvKTtcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0KTtcblxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhbGluZUluZm8pIHJldHVybjtcblxuICAgIGxldCB5U2NhbGU6IGFueSA9IG51bGw7XG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XG4gICAgICAgIHlTY2FsZSA9IGNoYXJ0RWxlbWVudHMubGVmdFlTY2FsZTtcbiAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICB5U2NhbGUgPSBjaGFydEVsZW1lbnRzLnJpZ2h0WVNjYWxlO1xuICAgIH1cblxuICAgIGlmIChsaW5lSW5mby5zaG93UG9pbnRbZGF0YXNldC5nZXRJZCgpXSkge1xuICAgICAgICBsZXQgZG90cyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJkb3RcIilcbiAgICAgICAgICAgIC5kYXRhKFxuICAgICAgICAgICAgICAgIEFycmF5LmZyb20oZGF0YXNldCkuZmlsdGVyKGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAudmFsdWUgIT09IG51bGw7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAuYXBwZW5kKFwiY2lyY2xlXCIpXG4gICAgICAgICAgICAuYXR0cihcInJcIiwgbGluZUluZm8ucG9pbnRTaXplW2RhdGFzZXQuZ2V0SWQoKV0pXG4gICAgICAgICAgICAuYXR0cihcImN4XCIsIGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY2hhcnRFbGVtZW50cy54U2NhbGUocC5kYXRlKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcImN5XCIsIGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geVNjYWxlKHAudmFsdWUpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwiZGF0ZVwiLCBmdW5jdGlvbiAocDogRGF0YVBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGQzLnRpbWVGb3JtYXQoXCIleS0lbS0lZFwiKShwLmRhdGUgYXMgYW55KTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcInZhbHVlXCIsIGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAocC52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihwLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAudmFsdWUudG9GaXhlZCgwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcC52YWx1ZS50b0ZpeGVkKDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuYXR0cihcInZhbHVlVHlwZVwiLCBWYWx1ZVR5cGVbZGF0YXNldC52YWx1ZVR5cGVdKVxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItZG90XCIpO1xuICAgICAgICBpZiAobGluZUluZm8ucG9pbnRDb2xvcltkYXRhc2V0LmdldElkKCldKSB7XG4gICAgICAgICAgICBkb3RzLnN0eWxlKFwiZmlsbFwiLCBsaW5lSW5mby5wb2ludENvbG9yW2RhdGFzZXQuZ2V0SWQoKV0pO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgbGluZUluZm8ucG9pbnRCb3JkZXJDb2xvcltkYXRhc2V0LmdldElkKCldICYmXG4gICAgICAgICAgICAgICAgbGluZUluZm8ucG9pbnRCb3JkZXJXaWR0aFtkYXRhc2V0LmdldElkKCldID4gMC4wXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBkb3RzLnN0eWxlKFxuICAgICAgICAgICAgICAgICAgICBcInN0cm9rZVwiLFxuICAgICAgICAgICAgICAgICAgICBsaW5lSW5mby5wb2ludEJvcmRlckNvbG9yW2RhdGFzZXQuZ2V0SWQoKV1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGRvdHMuc3R5bGUoXG4gICAgICAgICAgICAgICAgICAgIFwic3Ryb2tlLXdpZHRoXCIsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVJbmZvLnBvaW50Qm9yZGVyV2lkdGhbZGF0YXNldC5nZXRJZCgpXVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGluZUluZm8uYWxsb3dJbnNwZWN0RGF0YSkge1xuICAgICAgICAgICAgcmVuZGVyVG9vbHRpcChkb3RzLCBjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyVG9vbHRpcChcbiAgICB0YXJnZXRFbGVtZW50czogYW55LFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xuKSB7XG4gICAgbGV0IHRvb2x0aXAgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhLmFwcGVuZChcInN2Z1wiKS5zdHlsZShcIm9wYWNpdHlcIiwgMCk7XG4gICAgbGV0IHRvb2x0aXBCZyA9IHRvb2x0aXAuYXBwZW5kKFwicmVjdFwiKS5hdHRyKFwieFwiLCAwKS5hdHRyKFwieVwiLCAwKTtcbiAgICBsZXQgdG9vbHRpcExhYmVsID0gdG9vbHRpcC5hcHBlbmQoXCJ0ZXh0XCIpO1xuICAgIGxldCB0b29sdGlwTGFiZWxEYXRlID0gdG9vbHRpcExhYmVsXG4gICAgICAgIC5hcHBlbmQoXCJ0c3BhblwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10b29sdGlwLWxhYmVsXCIpO1xuICAgIGxldCB0b29sdGlwTGFiZWxWYWx1ZSA9IHRvb2x0aXBMYWJlbFxuICAgICAgICAuYXBwZW5kKFwidHNwYW5cIilcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItdG9vbHRpcC1sYWJlbFwiKTtcblxuICAgIGxldCB4U3BhY2luZyA9IDM7XG4gICAgbGV0IHlTcGFjaW5nID0gMztcblxuICAgIHRhcmdldEVsZW1lbnRzXG4gICAgICAgIC5vbihcIm1vdXNlZW50ZXJcIiwgZnVuY3Rpb24gKGV2ZW50OiBhbnkpIHtcbiAgICAgICAgICAgIGNvbnN0IFt4LCB5XSA9IGQzLnBvaW50ZXIoZXZlbnQpO1xuICAgICAgICAgICAgbGV0IHRvb2x0aXBCZ1dpZHRoID0gMDtcbiAgICAgICAgICAgIGxldCB0b29sdGlwQmdIZWlnaHQgPSAwO1xuICAgICAgICAgICAgLy8gRGF0ZVxuICAgICAgICAgICAgbGV0IGxhYmVsRGF0ZVRleHQgPSBcImRhdGU6IFwiICsgZDMuc2VsZWN0KHRoaXMpLmF0dHIoXCJkYXRlXCIpO1xuICAgICAgICAgICAgLy8gbGFiZWxEYXRlVGV4dCA9IHgudG9TdHJpbmcoKTsvLyBkZWJ1Z1xuICAgICAgICAgICAgbGV0IGxhYmVsRGF0ZVNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKFxuICAgICAgICAgICAgICAgIGxhYmVsRGF0ZVRleHQsXG4gICAgICAgICAgICAgICAgXCJ0cmFja2VyLXRvb2x0aXAtbGFiZWxcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRvb2x0aXBMYWJlbERhdGUudGV4dChsYWJlbERhdGVUZXh0KTtcbiAgICAgICAgICAgIGlmIChsYWJlbERhdGVTaXplLndpZHRoID4gdG9vbHRpcEJnV2lkdGgpIHtcbiAgICAgICAgICAgICAgICB0b29sdGlwQmdXaWR0aCA9IGxhYmVsRGF0ZVNpemUud2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b29sdGlwQmdIZWlnaHQgKz0gbGFiZWxEYXRlU2l6ZS5oZWlnaHQ7XG4gICAgICAgICAgICB0b29sdGlwTGFiZWxEYXRlLmF0dHIoXCJ4XCIsIHhTcGFjaW5nKS5hdHRyKFwieVwiLCB0b29sdGlwQmdIZWlnaHQpO1xuXG4gICAgICAgICAgICAvLyBWYWx1ZVxuICAgICAgICAgICAgbGV0IGxhYmVsVmFsdWVUZXh0ID0gXCJ2YWx1ZTogXCI7XG4gICAgICAgICAgICBsZXQgdmFsdWVUeXBlID0gZDMuc2VsZWN0KHRoaXMpLmF0dHIoXCJ2YWx1ZVR5cGVcIik7XG4gICAgICAgICAgICBsZXQgc3RyVmFsdWUgPSBkMy5zZWxlY3QodGhpcykuYXR0cihcInZhbHVlXCIpO1xuICAgICAgICAgICAgLy8gc3RyVmFsdWUgKz0geS50b1N0cmluZygpOy8vZGVidWdcbiAgICAgICAgICAgIGlmICh2YWx1ZVR5cGUgPT09IFwiVGltZVwiKSB7XG4gICAgICAgICAgICAgICAgbGV0IGRheVN0YXJ0ID0gd2luZG93Lm1vbWVudChcIjAwOjAwXCIsIFwiSEg6bW1cIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgbGV0IHRpY2tUaW1lID0gZGF5U3RhcnQuYWRkKHBhcnNlRmxvYXQoc3RyVmFsdWUpLCBcInNlY29uZHNcIik7XG4gICAgICAgICAgICAgICAgbGV0IGRhdGVWYWx1ZSA9IHRpY2tUaW1lLmZvcm1hdChcIkhIOm1tXCIpO1xuICAgICAgICAgICAgICAgIGxhYmVsVmFsdWVUZXh0ICs9IGRhdGVWYWx1ZTtcbiAgICAgICAgICAgICAgICB0b29sdGlwTGFiZWxWYWx1ZS50ZXh0KGxhYmVsVmFsdWVUZXh0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGFiZWxWYWx1ZVRleHQgKz0gc3RyVmFsdWU7XG4gICAgICAgICAgICAgICAgdG9vbHRpcExhYmVsVmFsdWUudGV4dChsYWJlbFZhbHVlVGV4dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgbGFiZWxWYWx1ZVNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKFxuICAgICAgICAgICAgICAgIGxhYmVsVmFsdWVUZXh0LFxuICAgICAgICAgICAgICAgIFwidHJhY2tlci10b29sdGlwLWxhYmVsXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAobGFiZWxWYWx1ZVNpemUud2lkdGggPiB0b29sdGlwQmdXaWR0aCkge1xuICAgICAgICAgICAgICAgIHRvb2x0aXBCZ1dpZHRoID0gbGFiZWxWYWx1ZVNpemUud2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0b29sdGlwQmdIZWlnaHQgKz0geVNwYWNpbmcgKyBsYWJlbFZhbHVlU2l6ZS5oZWlnaHQ7XG4gICAgICAgICAgICB0b29sdGlwTGFiZWxWYWx1ZS5hdHRyKFwieFwiLCB4U3BhY2luZykuYXR0cihcInlcIiwgdG9vbHRpcEJnSGVpZ2h0KTtcblxuICAgICAgICAgICAgdG9vbHRpcEJnV2lkdGggKz0gMiAqIHhTcGFjaW5nO1xuICAgICAgICAgICAgdG9vbHRpcEJnSGVpZ2h0ICs9IDIgKiB5U3BhY2luZztcbiAgICAgICAgICAgIHRvb2x0aXBMYWJlbFxuICAgICAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgdG9vbHRpcEJnV2lkdGgpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdG9vbHRpcEJnSGVpZ2h0KTtcblxuICAgICAgICAgICAgdG9vbHRpcEJnXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0b29sdGlwQmdXaWR0aClcbiAgICAgICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCB0b29sdGlwQmdIZWlnaHQpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItdG9vbHRpcFwiKTtcblxuICAgICAgICAgICAgbGV0IHRvb2x0aXBQb3NYID0geDtcbiAgICAgICAgICAgIGxldCB0b29sdGlwUG9zWSA9IHk7XG4gICAgICAgICAgICBsZXQgdG9vbHRpcFhPZmZzZXQgPSAxMjtcbiAgICAgICAgICAgIGxldCB0b29sdGlwWU9mZnNldCA9IDEyO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHggKyB0b29sdGlwWE9mZnNldCArIHRvb2x0aXBCZ1dpZHRoID5cbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gbW92ZSB0b29sdGlwIHRvIGxlZnRcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zWCA9IHggLSB0b29sdGlwQmdXaWR0aCAtIHRvb2x0aXBYT2Zmc2V0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IGF0IHRoZSByaWdodCBzaWRlXG4gICAgICAgICAgICAgICAgdG9vbHRpcFBvc1ggPSB4ICsgdG9vbHRpcFhPZmZzZXQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoeSAtIHRvb2x0aXBZT2Zmc2V0IC0gdG9vbHRpcEJnSGVpZ2h0IDwgMCkge1xuICAgICAgICAgICAgICAgIC8vIGRvd24gc2lkZVxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NZID0geSArIHRvb2x0aXBZT2Zmc2V0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IG1vdmUgdG8gdXAgc2lkZVxuICAgICAgICAgICAgICAgIHRvb2x0aXBQb3NZID0geSAtIHRvb2x0aXBZT2Zmc2V0IC0gdG9vbHRpcEJnSGVpZ2h0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdG9vbHRpcC5hdHRyKFwieFwiLCB0b29sdGlwUG9zWCkuYXR0cihcInlcIiwgdG9vbHRpcFBvc1kpO1xuICAgICAgICAgICAgdG9vbHRpcC50cmFuc2l0aW9uKCkuZHVyYXRpb24oMjAwKS5zdHlsZShcIm9wYWNpdHlcIiwgMSk7XG4gICAgICAgIH0pXG4gICAgICAgIC5vbihcIm1vdXNlbGVhdmVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdG9vbHRpcC50cmFuc2l0aW9uKCkuZHVyYXRpb24oNTAwKS5zdHlsZShcIm9wYWNpdHlcIiwgMCk7XG4gICAgICAgIH0pO1xufVxuXG5mdW5jdGlvbiByZW5kZXJCYXIoXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGJhckluZm86IEJhckluZm8sXG4gICAgZGF0YXNldDogRGF0YXNldCxcbiAgICB5QXhpc0xvY2F0aW9uOiBzdHJpbmcsXG4gICAgY3VyckJhclNldDogbnVtYmVyLFxuICAgIHRvdGFsTnVtT2ZCYXJTZXRzOiBudW1iZXJcbikge1xuICAgIC8vIGNvbnNvbGUubG9nKGRhdGFzZXQpO1xuICAgIC8vIGNvbnNvbGUubG9nKGJhckluZm8pO1xuICAgIC8vIGNvbnNvbGUubG9nKFwiJWQvJWRcIiwgY3VyckJhclNldCwgdG90YWxOdW1PZkJhclNldHMpO1xuXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFiYXJJbmZvKSByZXR1cm47XG5cbiAgICBsZXQgYmFyR2FwID0gMTtcbiAgICBsZXQgYmFyU2V0V2lkdGggPSByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAvIGRhdGFzZXQuZ2V0TGVuZ3RoKCk7XG4gICAgbGV0IGJhcldpZHRoID0gYmFyU2V0V2lkdGg7XG4gICAgbGV0IGN1cnJlbnREaWFwbGF5SW5kID0gY3VyckJhclNldDtcbiAgICBsZXQgdG90YWxEaWFwbGF5U2V0ID0gdG90YWxOdW1PZkJhclNldHM7XG4gICAgaWYgKGJhclNldFdpZHRoIC0gYmFyR2FwID4gMCkge1xuICAgICAgICBiYXJXaWR0aCA9IGJhclNldFdpZHRoIC0gYmFyR2FwO1xuICAgIH1cbiAgICBpZiAoIXJlbmRlckluZm8uc3RhY2spIHtcbiAgICAgICAgYmFyV2lkdGggPSBiYXJXaWR0aCAvIHRvdGFsTnVtT2ZCYXJTZXRzO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGN1cnJlbnREaWFwbGF5SW5kID0gMDtcbiAgICAgICAgdG90YWxEaWFwbGF5U2V0ID0gMTtcbiAgICB9XG5cbiAgICBsZXQgcG9ydGlvbkxlZnQgPSAoY3VyckJhclNldCArIDEpIC8gdG90YWxOdW1PZkJhclNldHM7XG5cbiAgICBsZXQgeVNjYWxlOiBhbnkgPSBudWxsO1xuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xuICAgICAgICB5U2NhbGUgPSBjaGFydEVsZW1lbnRzLmxlZnRZU2NhbGU7XG4gICAgfSBlbHNlIGlmICh5QXhpc0xvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgeVNjYWxlID0gY2hhcnRFbGVtZW50cy5yaWdodFlTY2FsZTtcbiAgICB9XG5cbiAgICBsZXQgYmFycyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcbiAgICAgICAgLnNlbGVjdEFsbChcImJhclwiKVxuICAgICAgICAuZGF0YShcbiAgICAgICAgICAgIEFycmF5LmZyb20oZGF0YXNldCkuZmlsdGVyKGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcC52YWx1ZSAhPT0gbnVsbDtcbiAgICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgLmVudGVyKClcbiAgICAgICAgLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgLmF0dHIoXCJ4XCIsIGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBsZXQgcG9ydGlvblZpc2libGUgPSBjdXJyZW50RGlhcGxheUluZCArIDEgLSB0b3RhbERpYXBsYXlTZXQgLyAyLjA7XG4gICAgICAgICAgICAgICAgaWYgKHBvcnRpb25WaXNpYmxlIDwgMS4wKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLnhTY2FsZShwLmRhdGUpIC1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJhclNldFdpZHRoIC8gMi4wICtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnREaWFwbGF5SW5kICogYmFyV2lkdGggK1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9ydGlvblZpc2libGUgKiBiYXJXaWR0aFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy54U2NhbGUocC5kYXRlKSAtXG4gICAgICAgICAgICAgICAgYmFyU2V0V2lkdGggLyAyLjAgK1xuICAgICAgICAgICAgICAgIGN1cnJlbnREaWFwbGF5SW5kICogYmFyV2lkdGhcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbiAocDogRGF0YVBvaW50KSB7XG4gICAgICAgICAgICByZXR1cm4geVNjYWxlKE1hdGgubWF4KHAudmFsdWUsIDApKTtcbiAgICAgICAgfSlcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBmdW5jdGlvbiAocDogRGF0YVBvaW50LCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBvcnRpb25WaXNpYmxlID0gY3VycmVudERpYXBsYXlJbmQgKyAxIC0gdG90YWxEaWFwbGF5U2V0IC8gMi4wO1xuICAgICAgICAgICAgICAgIGlmIChwb3J0aW9uVmlzaWJsZSA8IDAuMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMC4wO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocG9ydGlvblZpc2libGUgPCAxLjApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhcldpZHRoICogcG9ydGlvblZpc2libGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBiYXJXaWR0aDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gZGF0YXNldC5nZXRMZW5ndGgoKSAtIDEpIHtcbiAgICAgICAgICAgICAgICBsZXQgcG9ydGlvblZpc2libGUgPVxuICAgICAgICAgICAgICAgICAgICAxLjAgLSAoY3VycmVudERpYXBsYXlJbmQgKyAxIC0gdG90YWxEaWFwbGF5U2V0IC8gMi4wKTtcbiAgICAgICAgICAgICAgICBpZiAocG9ydGlvblZpc2libGUgPCAwLjApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBvcnRpb25WaXNpYmxlIDwgMS4wKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXJXaWR0aCAqIHBvcnRpb25WaXNpYmxlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gYmFyV2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmFyV2lkdGg7XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQpIHtcbiAgICAgICAgICAgIGlmIChwLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguYWJzKHlTY2FsZShwLnZhbHVlKSAtIHlTY2FsZSgwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWJhclwiKTtcblxuICAgIGlmIChiYXJJbmZvLmJhckNvbG9yW2RhdGFzZXQuZ2V0SWQoKV0pIHtcbiAgICAgICAgYmFycy5zdHlsZShcImZpbGxcIiwgYmFySW5mby5iYXJDb2xvcltkYXRhc2V0LmdldElkKCldKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlckxlZ2VuZChcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgY2hhcnRJbmZvOiBDb21tb25DaGFydEluZm9cbikge1xuICAgIC8vIGNvbnNvbGUubG9nKGNoYXJ0SW5mby5sZWdlbmRQb3NpdGlvbik7XG4gICAgLy8gY29uc29sZS5sb2coY2hhcnRJbmZvLmxlZ2VuZE9yaWVudGF0aW9uKTtcblxuICAgIC8vIEdldCBjaGFydCBlbGVtZW50c1xuICAgIGxldCBzdmcgPSBjaGFydEVsZW1lbnRzLnN2ZztcbiAgICBsZXQgZ3JhcGhBcmVhID0gY2hhcnRFbGVtZW50cy5ncmFwaEFyZWE7XG4gICAgbGV0IGRhdGFBcmVhID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYTtcbiAgICBsZXQgdGl0bGUgPSBjaGFydEVsZW1lbnRzLnRpdGxlO1xuICAgIGxldCB4QXhpcyA9IGNoYXJ0RWxlbWVudHMueEF4aXM7XG4gICAgbGV0IGxlZnRZQXhpcyA9IGNoYXJ0RWxlbWVudHMubGVmdFlBeGlzO1xuICAgIGxldCByaWdodFlBeGlzID0gY2hhcnRFbGVtZW50cy5yaWdodFlBeGlzO1xuXG4gICAgLy8gR2V0IGVsZW1lbnQgd2lkdGggYW5kIGhlaWdodFxuICAgIGxldCB0aXRsZUhlaWdodCA9IDAuMDtcbiAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgdGl0bGVIZWlnaHQgPSBwYXJzZUZsb2F0KHRpdGxlLmF0dHIoXCJoZWlnaHRcIikpO1xuICAgIH1cbiAgICBsZXQgeEF4aXNIZWlnaHQgPSBwYXJzZUZsb2F0KHhBeGlzLmF0dHIoXCJoZWlnaHRcIikpO1xuICAgIGxldCBsZWZ0WUF4aXNXaWR0aCA9IDAuMDtcbiAgICBpZiAobGVmdFlBeGlzKSB7XG4gICAgICAgIGxlZnRZQXhpc1dpZHRoID0gcGFyc2VGbG9hdChsZWZ0WUF4aXMuYXR0cihcIndpZHRoXCIpKTtcbiAgICB9XG4gICAgbGV0IHJpZ2h0WUF4aXNXaWR0aCA9IDAuMDtcbiAgICBpZiAocmlnaHRZQXhpcykge1xuICAgICAgICByaWdodFlBeGlzV2lkdGggPSBwYXJzZUZsb2F0KHJpZ2h0WUF4aXMuYXR0cihcIndpZHRoXCIpKTtcbiAgICB9XG4gICAgLy8gR2V0IGRhdGFzZXRzXG4gICAgbGV0IGRhdGFzZXRzID0gcmVuZGVySW5mby5kYXRhc2V0cztcbiAgICBsZXQgeERhdGFzZXRJZHMgPSBkYXRhc2V0cy5nZXRYRGF0YXNldElkcygpO1xuICAgIC8vIGNvbnNvbGUubG9nKHhEYXRhc2V0SWRzKTtcblxuICAgIC8vIEdldCBuYW1lcyBhbmQgdGhlaXIgZGltZW5zaW9uXG4gICAgbGV0IG5hbWVzID0gZGF0YXNldHMuZ2V0TmFtZXMoKTsgLy8geERhdGFzZXQgbmFtZSBpbmNsdWRlZFxuICAgIGxldCBuYW1lU2l6ZXMgPSBuYW1lcy5tYXAoZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgcmV0dXJuIGhlbHBlci5tZWFzdXJlVGV4dFNpemUobiwgXCJ0cmFja2VyLWxlZ2VuZC1sYWJlbFwiKTtcbiAgICB9KTtcbiAgICBsZXQgaW5kTWF4TmFtZSA9IDA7XG4gICAgbGV0IG1heE5hbWVXaWR0aCA9IDAuMDtcbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBuYW1lcy5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpbmQpKSBjb250aW51ZTtcbiAgICAgICAgaWYgKG5hbWVTaXplc1tpbmRdLndpZHRoID4gbWF4TmFtZVdpZHRoKSB7XG4gICAgICAgICAgICBtYXhOYW1lV2lkdGggPSBuYW1lU2l6ZXNbaW5kXS53aWR0aDtcbiAgICAgICAgICAgIGluZE1heE5hbWUgPSBpbmQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgbGV0IG1heE5hbWUgPSBuYW1lc1tpbmRNYXhOYW1lXTtcbiAgICBsZXQgY2hhcmFjdGVyV2lkdGggPSBtYXhOYW1lV2lkdGggLyBtYXhOYW1lLmxlbmd0aDtcbiAgICBsZXQgbmFtZUhlaWdodCA9IG5hbWVTaXplc1tpbmRNYXhOYW1lXS5oZWlnaHQ7XG4gICAgbGV0IG51bU5hbWVzID0gbmFtZXMubGVuZ3RoIC0geERhdGFzZXRJZHMubGVuZ3RoO1xuXG4gICAgbGV0IHhTcGFjaW5nID0gMiAqIGNoYXJhY3RlcldpZHRoO1xuICAgIGxldCB5U3BhY2luZyA9IG5hbWVIZWlnaHQ7XG4gICAgbGV0IG1hcmtlcldpZHRoID0gMiAqIGNoYXJhY3RlcldpZHRoO1xuXG4gICAgLy8gR2V0IGxlZ2VuZCB3aWR0aCBhbmQgaGVpZ2h0XG4gICAgbGV0IGxlZ2VuZFdpZHRoID0gMDtcbiAgICBsZXQgbGVnZW5kSGVpZ2h0ID0gMDtcbiAgICBpZiAoY2hhcnRJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcbiAgICAgICAgbGVnZW5kV2lkdGggPSB4U3BhY2luZyAqIDMgKyBtYXJrZXJXaWR0aCArIG1heE5hbWVXaWR0aDtcbiAgICAgICAgbGVnZW5kSGVpZ2h0ID0gKG51bU5hbWVzICsgMSkgKiB5U3BhY2luZztcbiAgICB9IGVsc2UgaWYgKGNoYXJ0SW5mby5sZWdlbmRPcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcbiAgICAgICAgbGVnZW5kV2lkdGggPVxuICAgICAgICAgICAgKDIgKiB4U3BhY2luZyArIG1hcmtlcldpZHRoKSAqIG51bU5hbWVzICtcbiAgICAgICAgICAgIHhTcGFjaW5nICtcbiAgICAgICAgICAgIGQzLnN1bShuYW1lU2l6ZXMsIGZ1bmN0aW9uIChzLCBpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm4gMDtcbiAgICAgICAgICAgICAgICByZXR1cm4gcy53aWR0aDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBsZWdlbmRIZWlnaHQgPSB5U3BhY2luZyArIG5hbWVIZWlnaHQ7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKFxuICAgIC8vICAgICBgbWF4TmFtZTogJHttYXhOYW1lfSwgY2hhcmFjdGVyV2lkdGg6ICR7Y2hhcmFjdGVyV2lkdGh9LCBtYXhOYW1lV2lkdGg6ICR7bWF4TmFtZVdpZHRofWBcbiAgICAvLyApO1xuICAgIC8vIGNvbnNvbGUubG9nKGB4U3BhY2luZzoke3hTcGFjaW5nfSwgbnVtTmFtZXM6ICR7bnVtTmFtZXN9LCBtYXJrZXJXaWR0aDogJHttYXJrZXJXaWR0aH1gKTtcbiAgICAvLyBjb25zb2xlLmxvZyhgbGVnZW5kV2lkdGg6ICR7bGVnZW5kV2lkdGh9LCBsZWdlbmRIZWlnaHQ6ICR7bGVnZW5kSGVpZ2h0fWApO1xuXG4gICAgLy8gQ2FsY3VhbHRlIGxlbmdlbmRYIGFuZCBsZWdlbmRZXG4gICAgbGV0IGxlZ2VuZFggPSAwLjA7IC8vIHJlbGF0aXZlIHRvIGdyYXBoQXJlYVxuICAgIGxldCBsZWdlbmRZID0gMC4wO1xuICAgIGlmIChjaGFydEluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwidG9wXCIpIHtcbiAgICAgICAgLy8gYmVsb3cgdGl0bGVcbiAgICAgICAgbGVnZW5kWCA9XG4gICAgICAgICAgICBsZWZ0WUF4aXNXaWR0aCArXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAvIDIuMCAtXG4gICAgICAgICAgICBsZWdlbmRXaWR0aCAvIDIuMDtcbiAgICAgICAgbGVnZW5kWSA9IHRpdGxlSGVpZ2h0O1xuICAgICAgICAvLyBFeHBhbmQgc3ZnXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKHN2ZywgMCwgbGVnZW5kSGVpZ2h0ICsgeVNwYWNpbmcpO1xuICAgICAgICAvLyBNb3ZlIGRhdGFBcmVhIGRvd25cbiAgICAgICAgaGVscGVyLm1vdmVBcmVhKGRhdGFBcmVhLCAwLCBsZWdlbmRIZWlnaHQgKyB5U3BhY2luZyk7XG4gICAgfSBlbHNlIGlmIChjaGFydEluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwiYm90dG9tXCIpIHtcbiAgICAgICAgLy8gYmVsbG93IHgtYXhpcyBsYWJlbFxuICAgICAgICBsZWdlbmRYID1cbiAgICAgICAgICAgIGxlZnRZQXhpc1dpZHRoICtcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMi4wIC1cbiAgICAgICAgICAgIGxlZ2VuZFdpZHRoIC8gMi4wO1xuICAgICAgICBsZWdlbmRZID1cbiAgICAgICAgICAgIHRpdGxlSGVpZ2h0ICtcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArXG4gICAgICAgICAgICB4QXhpc0hlaWdodCArXG4gICAgICAgICAgICB5U3BhY2luZztcbiAgICAgICAgLy8gRXhwYW5kIHN2Z1xuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShzdmcsIDAsIGxlZ2VuZEhlaWdodCArIHlTcGFjaW5nKTtcbiAgICB9IGVsc2UgaWYgKGNoYXJ0SW5mby5sZWdlbmRQb3NpdGlvbiA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgbGVnZW5kWCA9IDA7XG4gICAgICAgIGxlZ2VuZFkgPVxuICAgICAgICAgICAgdGl0bGVIZWlnaHQgK1xuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0IC8gMi4wIC1cbiAgICAgICAgICAgIGxlZ2VuZEhlaWdodCAvIDIuMDtcbiAgICAgICAgLy8gRXhwYW5kIHN2Z1xuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShzdmcsIGxlZ2VuZFdpZHRoICsgeFNwYWNpbmcsIDApO1xuICAgICAgICAvLyBNb3ZlIGRhdGFBcmVhIHJpZ2h0XG4gICAgICAgIGhlbHBlci5tb3ZlQXJlYShkYXRhQXJlYSwgbGVnZW5kV2lkdGggKyB4U3BhY2luZywgMCk7XG4gICAgfSBlbHNlIGlmIChjaGFydEluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwicmlnaHRcIikge1xuICAgICAgICBsZWdlbmRYID1cbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICtcbiAgICAgICAgICAgIGxlZnRZQXhpc1dpZHRoICtcbiAgICAgICAgICAgIHJpZ2h0WUF4aXNXaWR0aCArXG4gICAgICAgICAgICB4U3BhY2luZztcbiAgICAgICAgbGVnZW5kWSA9XG4gICAgICAgICAgICB0aXRsZUhlaWdodCArXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgLyAyLjAgLVxuICAgICAgICAgICAgbGVnZW5kSGVpZ2h0IC8gMi4wO1xuICAgICAgICAvLyBFeHBhbmQgc3ZnXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKHN2ZywgbGVnZW5kV2lkdGggKyB4U3BhY2luZywgMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhgbGVnZW5kWDogJHtsZWdlbmRYfSwgbGVnZW5kWTogJHtsZWdlbmRZfWApO1xuXG4gICAgbGV0IGxlZ2VuZCA9IGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJsZWdlbmRcIilcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyBsZWdlbmRYICsgXCIsXCIgKyBsZWdlbmRZICsgXCIpXCIpO1xuICAgIC8vIGNvbnNvbGUubG9nKCdsZWdlbmRYOiAlZCwgbGVnZW5kWTogJWQnLCBsZWdlbmRYLCBsZWdlbmRZKTtcblxuICAgIGxldCBsZWdlbmRCZyA9IGxlZ2VuZFxuICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1sZWdlbmRcIilcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBsZWdlbmRXaWR0aClcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbGVnZW5kSGVpZ2h0KTtcbiAgICBpZiAoY2hhcnRJbmZvLmxlZ2VuZEJnQ29sb3IpIHtcbiAgICAgICAgbGVnZW5kQmcuc3R5bGUoXCJmaWxsXCIsIGNoYXJ0SW5mby5sZWdlbmRCZ0NvbG9yKTtcbiAgICB9XG4gICAgaWYgKGNoYXJ0SW5mby5sZWdlbmRCb3JkZXJDb2xvcikge1xuICAgICAgICBsZWdlbmRCZy5zdHlsZShcInN0cm9rZVwiLCBjaGFydEluZm8ubGVnZW5kQm9yZGVyQ29sb3IpO1xuICAgIH1cblxuICAgIGxldCBmaXJzdE1hcmtlclggPSB4U3BhY2luZztcbiAgICBsZXQgZmlyc3RNYXJrZXJZID0gbmFtZUhlaWdodDtcbiAgICBsZXQgZmlyc3RMYWJlbFggPSBmaXJzdE1hcmtlclggKyB4U3BhY2luZyArIG1hcmtlcldpZHRoOyAvLyB4U3BhY2luZyArIDIgKiB4U3BhaW5nXG4gICAgbGV0IGZpcnN0TGFiZWxZID0gZmlyc3RNYXJrZXJZO1xuXG4gICAgaWYgKGNoYXJ0SW5mby5sZWdlbmRPcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XG4gICAgICAgIGlmIChjaGFydEluZm8uR2V0R3JhcGhUeXBlKCkgPT09IEdyYXBoVHlwZS5MaW5lKSB7XG4gICAgICAgICAgICAvLyBsaW5lc1xuICAgICAgICAgICAgbGVnZW5kXG4gICAgICAgICAgICAgICAgLnNlbGVjdEFsbChcIm1hcmtlcnNcIilcbiAgICAgICAgICAgICAgICAuZGF0YShuYW1lcylcbiAgICAgICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJsaW5lXCIpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4MVwiLCBmaXJzdE1hcmtlclgpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ4MlwiLCBmaXJzdE1hcmtlclggKyBtYXJrZXJXaWR0aClcbiAgICAgICAgICAgICAgICAuYXR0cihcInkxXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICBsZXQgbnVtRWxlbXNFeGNsdWRlZCA9IHhEYXRhc2V0SWRzLmZpbHRlcigoaWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpZCA8IGk7XG4gICAgICAgICAgICAgICAgICAgIH0pLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgaSA9IGkgLSBudW1FbGVtc0V4Y2x1ZGVkO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RNYXJrZXJZICsgaSAqIHlTcGFjaW5nO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5MlwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG51bUVsZW1zRXhjbHVkZWQgPSB4RGF0YXNldElkcy5maWx0ZXIoKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWQgPCBpO1xuICAgICAgICAgICAgICAgICAgICB9KS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBpIC0gbnVtRWxlbXNFeGNsdWRlZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0TWFya2VyWSArIGkgKiB5U3BhY2luZztcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5zdHlsZShcInN0cm9rZVwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcnRJbmZvIGFzIExpbmVJbmZvKS5saW5lQ29sb3JbaV07XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIHBvaW50c1xuICAgICAgICAgICAgbGVnZW5kXG4gICAgICAgICAgICAgICAgLnNlbGVjdEFsbChcIm1hcmtlcnNcIilcbiAgICAgICAgICAgICAgICAuZGF0YShuYW1lcylcbiAgICAgICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJjaXJjbGVcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcImN4XCIsIGZpcnN0TWFya2VyWCArIG1hcmtlcldpZHRoIC8gMi4wKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBudW1FbGVtc0V4Y2x1ZGVkID0geERhdGFzZXRJZHMuZmlsdGVyKChpZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkIDwgaTtcbiAgICAgICAgICAgICAgICAgICAgfSkubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICBpID0gaSAtIG51bUVsZW1zRXhjbHVkZWQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdE1hcmtlclkgKyBpICogeVNwYWNpbmc7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXR0cihcInJcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGNoYXJ0SW5mbyBhcyBMaW5lSW5mbykuc2hvd1BvaW50W2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoYXJ0SW5mbyBhcyBMaW5lSW5mbykucG9pbnRTaXplW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwLjA7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgTGluZUluZm8pLnBvaW50Q29sb3JbaV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hhcnRJbmZvLkdldEdyYXBoVHlwZSgpID09PSBHcmFwaFR5cGUuQmFyKSB7XG4gICAgICAgICAgICAvLyBiYXJzXG4gICAgICAgICAgICBsZWdlbmRcbiAgICAgICAgICAgICAgICAuc2VsZWN0QWxsKFwibWFya2Vyc1wiKVxuICAgICAgICAgICAgICAgIC5kYXRhKG5hbWVzKVxuICAgICAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcInhcIiwgZmlyc3RNYXJrZXJYKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG51bUVsZW1zRXhjbHVkZWQgPSB4RGF0YXNldElkcy5maWx0ZXIoKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWQgPCBpO1xuICAgICAgICAgICAgICAgICAgICB9KS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBpIC0gbnVtRWxlbXNFeGNsdWRlZDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0TWFya2VyWSArIGkgKiB5U3BhY2luZyAtIG5hbWVIZWlnaHQgLyAyLjA7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIG1hcmtlcldpZHRoKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG5hbWVIZWlnaHQpXG4gICAgICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcnRJbmZvIGFzIEJhckluZm8pLmJhckNvbG9yW2ldO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbmFtZXNcbiAgICAgICAgbGV0IG5hbWVMYWJlbHMgPSBsZWdlbmRcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJsYWJlbHNcIilcbiAgICAgICAgICAgIC5kYXRhKG5hbWVzKVxuICAgICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgZmlyc3RMYWJlbFgpXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgbGV0IG51bUVsZW1zRXhjbHVkZWQgPSB4RGF0YXNldElkcy5maWx0ZXIoKGlkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpZCA8IGk7XG4gICAgICAgICAgICAgICAgfSkubGVuZ3RoO1xuICAgICAgICAgICAgICAgIGkgPSBpIC0gbnVtRWxlbXNFeGNsdWRlZDtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RMYWJlbFkgKyBpICogeVNwYWNpbmc7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnRleHQoZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuc3R5bGUoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIilcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWxlZ2VuZC1sYWJlbFwiKTtcblxuICAgICAgICBpZiAoY2hhcnRJbmZvLkdldEdyYXBoVHlwZSgpID09PSBHcmFwaFR5cGUuTGluZSkge1xuICAgICAgICAgICAgbmFtZUxhYmVscy5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgTGluZUluZm8pLmxpbmVDb2xvcltpXTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGNoYXJ0SW5mby5HZXRHcmFwaFR5cGUoKSA9PT0gR3JhcGhUeXBlLkJhcikge1xuICAgICAgICAgICAgbmFtZUxhYmVscy5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm47XG4gICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgQmFySW5mbykuYmFyQ29sb3JbaV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2hhcnRJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xuICAgICAgICBpZiAoY2hhcnRJbmZvLkdldEdyYXBoVHlwZSgpID09PSBHcmFwaFR5cGUuTGluZSkge1xuICAgICAgICAgICAgLy8gbGluZXNcbiAgICAgICAgICAgIGxlZ2VuZFxuICAgICAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJtYXJrZXJzXCIpXG4gICAgICAgICAgICAgICAgLmRhdGEobmFtZXMpXG4gICAgICAgICAgICAgICAgLmVudGVyKClcbiAgICAgICAgICAgICAgICAuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieDFcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3NYID0geFNwYWNpbmc7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IFtpbmQsIHNpemVdIG9mIG5hbWVTaXplcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpbmQpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmQgPCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zWCArPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJXaWR0aCArIHhTcGFjaW5nICsgc2l6ZS53aWR0aCArIHhTcGFjaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zWDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieDJcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3NYID0geFNwYWNpbmcgKyBtYXJrZXJXaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgW2luZCwgc2l6ZV0gb2YgbmFtZVNpemVzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGluZCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZCA8IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NYICs9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhTcGFjaW5nICsgc2l6ZS53aWR0aCArIHhTcGFjaW5nICsgbWFya2VyV2lkdGg7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NYO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5MVwiLCBmaXJzdE1hcmtlclkpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5MlwiLCBmaXJzdE1hcmtlclkpXG4gICAgICAgICAgICAgICAgLnN0eWxlKFwic3Ryb2tlXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgTGluZUluZm8pLmxpbmVDb2xvcltpXTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gcG9pbnRzXG4gICAgICAgICAgICBsZWdlbmRcbiAgICAgICAgICAgICAgICAuc2VsZWN0QWxsKFwibWFya2Vyc1wiKVxuICAgICAgICAgICAgICAgIC5kYXRhKG5hbWVzKVxuICAgICAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3NYID0geFNwYWNpbmcgKyBtYXJrZXJXaWR0aCAvIDIuMDtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgW2luZCwgc2l6ZV0gb2YgbmFtZVNpemVzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGluZCkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZCA8IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NYICs9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcldpZHRoIC8gMi4wICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFNwYWNpbmcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplLndpZHRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFNwYWNpbmcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJXaWR0aCAvIDIuMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc1g7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuYXR0cihcImN5XCIsIGZpcnN0TWFya2VyWSlcbiAgICAgICAgICAgICAgICAuYXR0cihcInJcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGNoYXJ0SW5mbyBhcyBMaW5lSW5mbykuc2hvd1BvaW50W2ldKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoYXJ0SW5mbyBhcyBMaW5lSW5mbykucG9pbnRTaXplW2ldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwLjA7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgTGluZUluZm8pLnBvaW50Q29sb3JbaV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hhcnRJbmZvLkdldEdyYXBoVHlwZSgpID09PSBHcmFwaFR5cGUuQmFyKSB7XG4gICAgICAgICAgICAvLyBiYXJzXG4gICAgICAgICAgICBsZWdlbmRcbiAgICAgICAgICAgICAgICAuc2VsZWN0QWxsKFwibWFya2Vyc1wiKVxuICAgICAgICAgICAgICAgIC5kYXRhKFxuICAgICAgICAgICAgICAgICAgICBuYW1lcy5maWx0ZXIoKG4sIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAheERhdGFzZXRJZHMuaW5jbHVkZXMoaSk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5lbnRlcigpXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcInJlY3RcIilcbiAgICAgICAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3NYID0geFNwYWNpbmc7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IFtpbmQsIHNpemVdIG9mIG5hbWVTaXplcy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpbmQpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmQgPCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zWCArPVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJXaWR0aCArIHhTcGFjaW5nICsgc2l6ZS53aWR0aCArIHhTcGFjaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zWDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmaXJzdE1hcmtlclkgLSBuYW1lSGVpZ2h0IC8gMi4wKVxuICAgICAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgbWFya2VyV2lkdGgpXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbmFtZUhlaWdodClcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgQmFySW5mbykuYmFyQ29sb3JbaV07XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBuYW1lc1xuICAgICAgICBsZXQgbmFtZUxhYmVscyA9IGxlZ2VuZFxuICAgICAgICAgICAgLnNlbGVjdEFsbChcImxhYmVsc1wiKVxuICAgICAgICAgICAgLmRhdGEobmFtZXMpXG4gICAgICAgICAgICAuZW50ZXIoKVxuICAgICAgICAgICAgLmFwcGVuZChcInRleHRcIilcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcbiAgICAgICAgICAgICAgICBsZXQgcG9zWCA9IHhTcGFjaW5nICsgbWFya2VyV2lkdGggKyB4U3BhY2luZztcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBbaW5kLCBzaXplXSBvZiBuYW1lU2l6ZXMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpbmQpKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZCA8IGkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc1ggKz0gc2l6ZS53aWR0aCArIHhTcGFjaW5nICsgbWFya2VyV2lkdGggKyB4U3BhY2luZztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwb3NYO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmaXJzdExhYmVsWSlcbiAgICAgICAgICAgIC50ZXh0KGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuIFwiXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnN0eWxlKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1sZWdlbmQtbGFiZWxcIik7XG5cbiAgICAgICAgaWYgKGNoYXJ0SW5mby5HZXRHcmFwaFR5cGUoKSA9PT0gR3JhcGhUeXBlLkxpbmUpIHtcbiAgICAgICAgICAgIG5hbWVMYWJlbHMuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcnRJbmZvIGFzIExpbmVJbmZvKS5saW5lQ29sb3JbaV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChjaGFydEluZm8uR2V0R3JhcGhUeXBlKCkgPT09IEdyYXBoVHlwZS5CYXIpIHtcbiAgICAgICAgICAgIG5hbWVMYWJlbHMuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xuICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xuICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcnRJbmZvIGFzIEJhckluZm8pLmJhckNvbG9yW2ldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmZ1bmN0aW9uIHJlbmRlclRpdGxlKFxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBjaGFydEluZm86IENvbW1vbkNoYXJ0SW5mb1xuKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJUaXRsZVwiKVxuICAgIC8vIHVuZGVyIGdyYXBoQXJlYVxuXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFjaGFydEluZm8pIHJldHVybjtcblxuICAgIGlmICghY2hhcnRJbmZvLnRpdGxlKSByZXR1cm47XG4gICAgbGV0IHRpdGxlU2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoY2hhcnRJbmZvLnRpdGxlLCBcInRyYWNrZXItdGl0bGVcIik7XG5cbiAgICAvLyBBcHBlbmQgdGl0bGVcbiAgICBsZXQgdGl0bGUgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYVxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAudGV4dChjaGFydEluZm8udGl0bGUpIC8vIHBpdm90IGF0IGNlbnRlclxuICAgICAgICAuYXR0cihcImlkXCIsIFwidGl0bGVcIilcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMi4wICtcbiAgICAgICAgICAgICAgICBcIixcIiArXG4gICAgICAgICAgICAgICAgdGl0bGVTaXplLmhlaWdodCAvIDIuMCArXG4gICAgICAgICAgICAgICAgXCIpXCJcbiAgICAgICAgKVxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCB0aXRsZVNpemUuaGVpZ2h0KSAvLyBmb3IgbGF0ZXIgdXNlXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRpdGxlXCIpO1xuICAgIGNoYXJ0RWxlbWVudHNbXCJ0aXRsZVwiXSA9IHRpdGxlO1xuXG4gICAgLy8gRXhwYW5kIHBhcmVudCBhcmVhc1xuICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuc3ZnLCAwLCB0aXRsZVNpemUuaGVpZ2h0KTtcbiAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLmdyYXBoQXJlYSwgMCwgdGl0bGVTaXplLmhlaWdodCk7XG5cbiAgICAvLyBNb3ZlIHNpYmxpbmcgYXJlYXNcbiAgICBoZWxwZXIubW92ZUFyZWEoY2hhcnRFbGVtZW50cy5kYXRhQXJlYSwgMCwgdGl0bGVTaXplLmhlaWdodCk7XG5cbiAgICByZXR1cm47XG59XG5cbmZ1bmN0aW9uIHNldENoYXJ0U2NhbGUoXG4gICAgX2NhbnZhczogSFRNTEVsZW1lbnQsXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXG4pIHtcbiAgICBsZXQgY2FudmFzID0gZDMuc2VsZWN0KF9jYW52YXMpO1xuICAgIGxldCBzdmcgPSBjaGFydEVsZW1lbnRzLnN2ZztcbiAgICBsZXQgc3ZnV2lkdGggPSBwYXJzZUZsb2F0KHN2Zy5hdHRyKFwid2lkdGhcIikpO1xuICAgIGxldCBzdmdIZWlnaHQgPSBwYXJzZUZsb2F0KHN2Zy5hdHRyKFwiaGVpZ2h0XCIpKTtcbiAgICBzdmcuYXR0cihcIndpZHRoXCIsIG51bGwpXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG51bGwpXG4gICAgICAgIC5hdHRyKFwidmlld0JveFwiLCBgMCAwICR7c3ZnV2lkdGh9ICR7c3ZnSGVpZ2h0fWApXG4gICAgICAgIC5hdHRyKFwicHJlc2VydmVBc3BlY3RSYXRpb1wiLCBcInhNaWRZTWlkIG1lZXRcIik7XG5cbiAgICBpZiAocmVuZGVySW5mby5maXRQYW5lbFdpZHRoKSB7XG4gICAgICAgIGNhbnZhcy5zdHlsZShcIndpZHRoXCIsIFwiMTAwJVwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBjYW52YXMuc3R5bGUoXG4gICAgICAgICAgICBcIndpZHRoXCIsXG4gICAgICAgICAgICAoc3ZnV2lkdGggKiByZW5kZXJJbmZvLmZpeGVkU2NhbGUpLnRvU3RyaW5nKCkgKyBcInB4XCJcbiAgICAgICAgKTtcbiAgICAgICAgY2FudmFzLnN0eWxlKFxuICAgICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICAgIChzdmdIZWlnaHQgKiByZW5kZXJJbmZvLmZpeGVkU2NhbGUpLnRvU3RyaW5nKCkgKyBcInB4XCJcbiAgICAgICAgKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFyZWFzKFxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xuKTogQ2hhcnRFbGVtZW50cyB7XG4gICAgbGV0IGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMgPSB7fTtcbiAgICAvLyB3aG9sZSBhcmVhIGZvciBwbG90dGluZywgaW5jbHVkZXMgbWFyZ2luc1xuICAgIGxldCBzdmcgPSBkM1xuICAgICAgICAuc2VsZWN0KGNhbnZhcylcbiAgICAgICAgLmFwcGVuZChcInN2Z1wiKVxuICAgICAgICAuYXR0cihcImlkXCIsIFwic3ZnXCIpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJ3aWR0aFwiLFxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmxlZnQgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnJpZ2h0XG4gICAgICAgIClcbiAgICAgICAgLmF0dHIoXG4gICAgICAgICAgICBcImhlaWdodFwiLFxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi50b3AgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmJvdHRvbVxuICAgICAgICApO1xuICAgIGNoYXJ0RWxlbWVudHNbXCJzdmdcIl0gPSBzdmc7XG5cbiAgICAvLyBncmFwaEFyZWEsIGluY2x1ZGVzIGNoYXJ0QXJlYSwgdGl0bGUsIGxlZ2VuZFxuICAgIGxldCBncmFwaEFyZWEgPSBzdmdcbiAgICAgICAgLmFwcGVuZChcImdcIilcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImdyYXBoQXJlYVwiKVxuICAgICAgICAuYXR0cihcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ubGVmdCArXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnRvcCArXG4gICAgICAgICAgICAgICAgXCIpXCJcbiAgICAgICAgKVxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICsgcmVuZGVySW5mby5tYXJnaW4ucmlnaHQpXG4gICAgICAgIC5hdHRyKFxuICAgICAgICAgICAgXCJoZWlnaHRcIixcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArIHJlbmRlckluZm8ubWFyZ2luLmJvdHRvbVxuICAgICAgICApO1xuICAgIGNoYXJ0RWxlbWVudHNbXCJncmFwaEFyZWFcIl0gPSBncmFwaEFyZWE7XG5cbiAgICAvLyBkYXRhQXJlYSwgdW5kZXIgZ3JhcGhBcmVhLCBpbmNsdWRlcyBwb2ludHMsIGxpbmVzLCB4QXhpcywgeUF4aXNcbiAgICBsZXQgZGF0YUFyZWEgPSBncmFwaEFyZWFcbiAgICAgICAgLmFwcGVuZChcImdcIilcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImRhdGFBcmVhXCIpXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGgpXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCk7XG4gICAgY2hhcnRFbGVtZW50c1tcImRhdGFBcmVhXCJdID0gZGF0YUFyZWE7XG5cbiAgICByZXR1cm4gY2hhcnRFbGVtZW50cztcbn1cblxuZnVuY3Rpb24gcmVuZGVyTGluZUNoYXJ0KFxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBsaW5lSW5mbzogTGluZUluZm9cbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyTGluZUNoYXJ0XCIpO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8pO1xuXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFsaW5lSW5mbykgcmV0dXJuO1xuXG4gICAgbGV0IGNoYXJ0RWxlbWVudHMgPSBjcmVhdGVBcmVhcyhjYW52YXMsIHJlbmRlckluZm8pO1xuXG4gICAgcmVuZGVyVGl0bGUoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbGluZUluZm8pO1xuXG4gICAgcmVuZGVyWEF4aXMoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbGluZUluZm8pO1xuICAgIC8vIGNvbnNvbGUubG9nKGNoYXJ0RWxlbWVudHMueEF4aXMpO1xuICAgIC8vIGNvbnNvbGUubG9nKGNoYXJ0RWxlbWVudHMueFNjYWxlKTtcblxuICAgIGxldCBkYXRhc2V0T25MZWZ0WUF4aXMgPSBbXTtcbiAgICBsZXQgZGF0YXNldE9uUmlnaHRZQXhpcyA9IFtdO1xuICAgIGxldCB4RGF0YXNldElkcyA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0WERhdGFzZXRJZHMoKTtcbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBsaW5lSW5mby55QXhpc0xvY2F0aW9uLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGluZCkpIGNvbnRpbnVlO1xuICAgICAgICBsZXQgeUF4aXNMb2NhdGlvbiA9IGxpbmVJbmZvLnlBeGlzTG9jYXRpb25baW5kXTtcbiAgICAgICAgaWYgKHlBeGlzTG9jYXRpb24udG9Mb3dlckNhc2UoKSA9PT0gXCJsZWZ0XCIpIHtcbiAgICAgICAgICAgIGRhdGFzZXRPbkxlZnRZQXhpcy5wdXNoKGluZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbi50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBcInJpZ2h0XCIpIHtcbiAgICAgICAgICAgIGRhdGFzZXRPblJpZ2h0WUF4aXMucHVzaChpbmQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJldFJlbmRlckxlZnRZQXhpcyA9IHJlbmRlcllBeGlzKFxuICAgICAgICBjaGFydEVsZW1lbnRzLFxuICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICBsaW5lSW5mbyxcbiAgICAgICAgXCJsZWZ0XCIsXG4gICAgICAgIGRhdGFzZXRPbkxlZnRZQXhpc1xuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRSZW5kZXJMZWZ0WUF4aXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFJlbmRlckxlZnRZQXhpcztcbiAgICB9XG5cbiAgICBpZiAoY2hhcnRFbGVtZW50cy5sZWZ0WUF4aXMgJiYgY2hhcnRFbGVtZW50cy5sZWZ0WVNjYWxlKSB7XG4gICAgICAgIGZvciAobGV0IGRhdGFzZXRJZCBvZiBkYXRhc2V0T25MZWZ0WUF4aXMpIHtcbiAgICAgICAgICAgIGxldCBkYXRhc2V0ID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpO1xuICAgICAgICAgICAgaWYgKGRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkgY29udGludWU7XG5cbiAgICAgICAgICAgIHJlbmRlckxpbmUoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbGluZUluZm8sIGRhdGFzZXQsIFwibGVmdFwiKTtcblxuICAgICAgICAgICAgcmVuZGVyUG9pbnRzKGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIGxpbmVJbmZvLCBkYXRhc2V0LCBcImxlZnRcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgcmV0UmVuZGVyUmlnaHRZQXhpcyA9IHJlbmRlcllBeGlzKFxuICAgICAgICBjaGFydEVsZW1lbnRzLFxuICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICBsaW5lSW5mbyxcbiAgICAgICAgXCJyaWdodFwiLFxuICAgICAgICBkYXRhc2V0T25SaWdodFlBeGlzXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHJldFJlbmRlclJpZ2h0WUF4aXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFJlbmRlclJpZ2h0WUF4aXM7XG4gICAgfVxuXG4gICAgaWYgKGNoYXJ0RWxlbWVudHMucmlnaHRZQXhpcyAmJiBjaGFydEVsZW1lbnRzLnJpZ2h0WVNjYWxlKSB7XG4gICAgICAgIGZvciAobGV0IGRhdGFzZXRJZCBvZiBkYXRhc2V0T25SaWdodFlBeGlzKSB7XG4gICAgICAgICAgICBsZXQgZGF0YXNldCA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkKTtcbiAgICAgICAgICAgIGlmIChkYXRhc2V0LmdldFF1ZXJ5KCkudXNlZEFzWERhdGFzZXQpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICByZW5kZXJMaW5lKGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIGxpbmVJbmZvLCBkYXRhc2V0LCBcInJpZ2h0XCIpO1xuXG4gICAgICAgICAgICByZW5kZXJQb2ludHMoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbGluZUluZm8sIGRhdGFzZXQsIFwicmlnaHRcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobGluZUluZm8uc2hvd0xlZ2VuZCkge1xuICAgICAgICByZW5kZXJMZWdlbmQoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbGluZUluZm8pO1xuICAgIH1cblxuICAgIHNldENoYXJ0U2NhbGUoY2FudmFzLCBjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvKTtcbn1cblxuZnVuY3Rpb24gcmVuZGVyQmFyQ2hhcnQoXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGJhckluZm86IEJhckluZm9cbikge1xuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyQmFyQ2hhcnRcIik7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFiYXJJbmZvKSByZXR1cm47XG5cbiAgICBsZXQgY2hhcnRFbGVtZW50cyA9IGNyZWF0ZUFyZWFzKGNhbnZhcywgcmVuZGVySW5mbyk7XG5cbiAgICByZW5kZXJUaXRsZShjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBiYXJJbmZvKTtcblxuICAgIHJlbmRlclhBeGlzKGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIGJhckluZm8pO1xuXG4gICAgbGV0IGRhdGFzZXRPbkxlZnRZQXhpcyA9IFtdO1xuICAgIGxldCBkYXRhc2V0T25SaWdodFlBeGlzID0gW107XG4gICAgbGV0IHhEYXRhc2V0SWRzID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXRYRGF0YXNldElkcygpO1xuICAgIGlmIChyZW5kZXJJbmZvLnN0YWNrKSB7XG4gICAgICAgIGZvciAobGV0IGluZCA9IGJhckluZm8ueUF4aXNMb2NhdGlvbi5sZW5ndGggLSAxOyBpbmQgPj0gMDsgaW5kLS0pIHtcbiAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpbmQpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCB5QXhpc0xvY2F0aW9uID0gYmFySW5mby55QXhpc0xvY2F0aW9uW2luZF07XG4gICAgICAgICAgICBpZiAoeUF4aXNMb2NhdGlvbi50b0xvd2VyQ2FzZSgpID09PSBcImxlZnRcIikge1xuICAgICAgICAgICAgICAgIGRhdGFzZXRPbkxlZnRZQXhpcy5wdXNoKGluZCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgICAgICAgICAgLy8gcmlnaHRcbiAgICAgICAgICAgICAgICBkYXRhc2V0T25SaWdodFlBeGlzLnB1c2goaW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgYmFySW5mby55QXhpc0xvY2F0aW9uLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpbmQpKSBjb250aW51ZTtcbiAgICAgICAgICAgIGxldCB5QXhpc0xvY2F0aW9uID0gYmFySW5mby55QXhpc0xvY2F0aW9uW2luZF07XG4gICAgICAgICAgICBpZiAoeUF4aXNMb2NhdGlvbi50b0xvd2VyQ2FzZSgpID09PSBcImxlZnRcIikge1xuICAgICAgICAgICAgICAgIGRhdGFzZXRPbkxlZnRZQXhpcy5wdXNoKGluZCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0gXCJyaWdodFwiKSB7XG4gICAgICAgICAgICAgICAgLy8gcmlnaHRcbiAgICAgICAgICAgICAgICBkYXRhc2V0T25SaWdodFlBeGlzLnB1c2goaW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgfVxuXG4gICAgbGV0IHJldFJlbmRlckxlZnRZQXhpcyA9IHJlbmRlcllBeGlzKFxuICAgICAgICBjaGFydEVsZW1lbnRzLFxuICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICBiYXJJbmZvLFxuICAgICAgICBcImxlZnRcIixcbiAgICAgICAgZGF0YXNldE9uTGVmdFlBeGlzXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHJldFJlbmRlckxlZnRZQXhpcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0UmVuZGVyTGVmdFlBeGlzO1xuICAgIH1cblxuICAgIGxldCB0b3RhbE51bU9mQmFyU2V0cyA9XG4gICAgICAgIGRhdGFzZXRPbkxlZnRZQXhpcy5sZW5ndGggKyBkYXRhc2V0T25SaWdodFlBeGlzLmxlbmd0aDtcbiAgICBsZXQgY3VyckJhclNldCA9IDA7XG5cbiAgICBpZiAoY2hhcnRFbGVtZW50cy5sZWZ0WUF4aXMgJiYgY2hhcnRFbGVtZW50cy5sZWZ0WVNjYWxlKSB7XG4gICAgICAgIGZvciAobGV0IGRhdGFzZXRJZCBvZiBkYXRhc2V0T25MZWZ0WUF4aXMpIHtcbiAgICAgICAgICAgIGxldCBkYXRhc2V0ID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpO1xuICAgICAgICAgICAgaWYgKGRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkgY29udGludWU7XG5cbiAgICAgICAgICAgIHJlbmRlckJhcihcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLFxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXG4gICAgICAgICAgICAgICAgYmFySW5mbyxcbiAgICAgICAgICAgICAgICBkYXRhc2V0LFxuICAgICAgICAgICAgICAgIFwibGVmdFwiLFxuICAgICAgICAgICAgICAgIGN1cnJCYXJTZXQsXG4gICAgICAgICAgICAgICAgdG90YWxOdW1PZkJhclNldHNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGN1cnJCYXJTZXQrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZXRSZW5kZXJSaWdodFlBeGlzID0gcmVuZGVyWUF4aXMoXG4gICAgICAgIGNoYXJ0RWxlbWVudHMsXG4gICAgICAgIHJlbmRlckluZm8sXG4gICAgICAgIGJhckluZm8sXG4gICAgICAgIFwicmlnaHRcIixcbiAgICAgICAgZGF0YXNldE9uUmlnaHRZQXhpc1xuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRSZW5kZXJSaWdodFlBeGlzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRSZW5kZXJSaWdodFlBeGlzO1xuICAgIH1cblxuICAgIGlmIChjaGFydEVsZW1lbnRzLnJpZ2h0WUF4aXMgJiYgY2hhcnRFbGVtZW50cy5yaWdodFlTY2FsZSkge1xuICAgICAgICBmb3IgKGxldCBkYXRhc2V0SWQgb2YgZGF0YXNldE9uUmlnaHRZQXhpcykge1xuICAgICAgICAgICAgbGV0IGRhdGFzZXQgPSByZW5kZXJJbmZvLmRhdGFzZXRzLmdldERhdGFzZXRCeUlkKGRhdGFzZXRJZCk7XG4gICAgICAgICAgICBpZiAoZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSBjb250aW51ZTtcblxuICAgICAgICAgICAgcmVuZGVyQmFyKFxuICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMsXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgICAgICAgICBiYXJJbmZvLFxuICAgICAgICAgICAgICAgIGRhdGFzZXQsXG4gICAgICAgICAgICAgICAgXCJyaWdodFwiLFxuICAgICAgICAgICAgICAgIGN1cnJCYXJTZXQsXG4gICAgICAgICAgICAgICAgdG90YWxOdW1PZkJhclNldHNcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGN1cnJCYXJTZXQrKztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChiYXJJbmZvLnNob3dMZWdlbmQpIHtcbiAgICAgICAgcmVuZGVyTGVnZW5kKGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIGJhckluZm8pO1xuICAgIH1cblxuICAgIHNldENoYXJ0U2NhbGUoY2FudmFzLCBjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckVycm9yTWVzc2FnZShjYW52YXM6IEhUTUxFbGVtZW50LCBlcnJvck1lc3NhZ2U6IHN0cmluZykge1xuICAgIC8vIFJlbW92ZSBncmFwaCBub3QgY29tcGxldGVkXG4gICAgbGV0IGdyYXBoID0gZDMuc2VsZWN0KGNhbnZhcykuc2VsZWN0KFwiI3N2Z1wiKS5yZW1vdmUoKTtcblxuICAgIGxldCBzdmcgPSBkM1xuICAgICAgICAuc2VsZWN0KGNhbnZhcylcbiAgICAgICAgLmFwcGVuZChcImRpdlwiKVxuICAgICAgICAudGV4dChlcnJvck1lc3NhZ2UpXG4gICAgICAgIC5zdHlsZShcImJhY2tncm91bmQtY29sb3JcIiwgXCJ3aGl0ZVwiKVxuICAgICAgICAuc3R5bGUoXCJtYXJnaW4tYm90dG9tXCIsIFwiMjBweFwiKVxuICAgICAgICAuc3R5bGUoXCJwYWRkaW5nXCIsIFwiMTBweFwiKVxuICAgICAgICAuc3R5bGUoXCJjb2xvclwiLCBcInJlZFwiKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4dGVudCh2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgbGV0IG1pbjtcbiAgbGV0IG1heDtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCkge1xuICAgICAgICBpZiAobWluID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpZiAodmFsdWUgPj0gdmFsdWUpIG1pbiA9IG1heCA9IHZhbHVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmIChtaW4gPiB2YWx1ZSkgbWluID0gdmFsdWU7XG4gICAgICAgICAgaWYgKG1heCA8IHZhbHVlKSBtYXggPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgaW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlLCArK2luZGV4LCB2YWx1ZXMpKSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChtaW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh2YWx1ZSA+PSB2YWx1ZSkgbWluID0gbWF4ID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG1pbiA+IHZhbHVlKSBtaW4gPSB2YWx1ZTtcbiAgICAgICAgICBpZiAobWF4IDwgdmFsdWUpIG1heCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBbbWluLCBtYXhdO1xufVxuIiwiaW1wb3J0IGFycmF5IGZyb20gXCIuL2FycmF5LmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBjdXJ2ZUxpbmVhciBmcm9tIFwiLi9jdXJ2ZS9saW5lYXIuanNcIjtcbmltcG9ydCB7d2l0aFBhdGh9IGZyb20gXCIuL3BhdGguanNcIjtcbmltcG9ydCB7eCBhcyBwb2ludFgsIHkgYXMgcG9pbnRZfSBmcm9tIFwiLi9wb2ludC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4LCB5KSB7XG4gIHZhciBkZWZpbmVkID0gY29uc3RhbnQodHJ1ZSksXG4gICAgICBjb250ZXh0ID0gbnVsbCxcbiAgICAgIGN1cnZlID0gY3VydmVMaW5lYXIsXG4gICAgICBvdXRwdXQgPSBudWxsLFxuICAgICAgcGF0aCA9IHdpdGhQYXRoKGxpbmUpO1xuXG4gIHggPSB0eXBlb2YgeCA9PT0gXCJmdW5jdGlvblwiID8geCA6ICh4ID09PSB1bmRlZmluZWQpID8gcG9pbnRYIDogY29uc3RhbnQoeCk7XG4gIHkgPSB0eXBlb2YgeSA9PT0gXCJmdW5jdGlvblwiID8geSA6ICh5ID09PSB1bmRlZmluZWQpID8gcG9pbnRZIDogY29uc3RhbnQoeSk7XG5cbiAgZnVuY3Rpb24gbGluZShkYXRhKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG4gPSAoZGF0YSA9IGFycmF5KGRhdGEpKS5sZW5ndGgsXG4gICAgICAgIGQsXG4gICAgICAgIGRlZmluZWQwID0gZmFsc2UsXG4gICAgICAgIGJ1ZmZlcjtcblxuICAgIGlmIChjb250ZXh0ID09IG51bGwpIG91dHB1dCA9IGN1cnZlKGJ1ZmZlciA9IHBhdGgoKSk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDw9IG47ICsraSkge1xuICAgICAgaWYgKCEoaSA8IG4gJiYgZGVmaW5lZChkID0gZGF0YVtpXSwgaSwgZGF0YSkpID09PSBkZWZpbmVkMCkge1xuICAgICAgICBpZiAoZGVmaW5lZDAgPSAhZGVmaW5lZDApIG91dHB1dC5saW5lU3RhcnQoKTtcbiAgICAgICAgZWxzZSBvdXRwdXQubGluZUVuZCgpO1xuICAgICAgfVxuICAgICAgaWYgKGRlZmluZWQwKSBvdXRwdXQucG9pbnQoK3goZCwgaSwgZGF0YSksICt5KGQsIGksIGRhdGEpKTtcbiAgICB9XG5cbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gb3V0cHV0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgbGluZS54ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHggPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgbGluZSkgOiB4O1xuICB9O1xuXG4gIGxpbmUueSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh5ID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGxpbmUpIDogeTtcbiAgfTtcblxuICBsaW5lLmRlZmluZWQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZGVmaW5lZCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoISFfKSwgbGluZSkgOiBkZWZpbmVkO1xuICB9O1xuXG4gIGxpbmUuY3VydmUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY3VydmUgPSBfLCBjb250ZXh0ICE9IG51bGwgJiYgKG91dHB1dCA9IGN1cnZlKGNvbnRleHQpKSwgbGluZSkgOiBjdXJ2ZTtcbiAgfTtcblxuICBsaW5lLmNvbnRleHQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoXyA9PSBudWxsID8gY29udGV4dCA9IG91dHB1dCA9IG51bGwgOiBvdXRwdXQgPSBjdXJ2ZShjb250ZXh0ID0gXyksIGxpbmUpIDogY29udGV4dDtcbiAgfTtcblxuICByZXR1cm4gbGluZTtcbn1cbiIsImltcG9ydCBzb3VyY2VFdmVudCBmcm9tIFwiLi9zb3VyY2VFdmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihldmVudCwgbm9kZSkge1xuICBldmVudCA9IHNvdXJjZUV2ZW50KGV2ZW50KTtcbiAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkgbm9kZSA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gIGlmIChub2RlKSB7XG4gICAgdmFyIHN2ZyA9IG5vZGUub3duZXJTVkdFbGVtZW50IHx8IG5vZGU7XG4gICAgaWYgKHN2Zy5jcmVhdGVTVkdQb2ludCkge1xuICAgICAgdmFyIHBvaW50ID0gc3ZnLmNyZWF0ZVNWR1BvaW50KCk7XG4gICAgICBwb2ludC54ID0gZXZlbnQuY2xpZW50WCwgcG9pbnQueSA9IGV2ZW50LmNsaWVudFk7XG4gICAgICBwb2ludCA9IHBvaW50Lm1hdHJpeFRyYW5zZm9ybShub2RlLmdldFNjcmVlbkNUTSgpLmludmVyc2UoKSk7XG4gICAgICByZXR1cm4gW3BvaW50LngsIHBvaW50LnldO1xuICAgIH1cbiAgICBpZiAobm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QpIHtcbiAgICAgIHZhciByZWN0ID0gbm9kZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIHJldHVybiBbZXZlbnQuY2xpZW50WCAtIHJlY3QubGVmdCAtIG5vZGUuY2xpZW50TGVmdCwgZXZlbnQuY2xpZW50WSAtIHJlY3QudG9wIC0gbm9kZS5jbGllbnRUb3BdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gW2V2ZW50LnBhZ2VYLCBldmVudC5wYWdlWV07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihldmVudCkge1xuICBsZXQgc291cmNlRXZlbnQ7XG4gIHdoaWxlIChzb3VyY2VFdmVudCA9IGV2ZW50LnNvdXJjZUV2ZW50KSBldmVudCA9IHNvdXJjZUV2ZW50O1xuICByZXR1cm4gZXZlbnQ7XG59XG4iLCJpbXBvcnQgVHJhY2tlciBmcm9tIFwiLi9tYWluXCI7XG5pbXBvcnQge1xuICAgIFNlYXJjaFR5cGUsXG4gICAgQmFySW5mbyxcbiAgICBDb21tb25DaGFydEluZm8sXG4gICAgUXVlcnksXG4gICAgUmVuZGVySW5mbyxcbiAgICBTdW1tYXJ5SW5mbyxcbiAgICBNYXJnaW4sXG4gICAgR3JhcGhUeXBlLFxuICAgIExpbmVJbmZvLFxuICAgIFBpZUluZm8sXG4gICAgTW9udGhJbmZvLFxuICAgIEhlYXRtYXBJbmZvLFxuICAgIEJ1bGxldEluZm8sXG4gICAgRGF0YXNldCxcbiAgICBDdXN0b21EYXRhc2V0SW5mbyxcbiAgICBBc3BlY3RSYXRpbyxcbn0gZnJvbSBcIi4vZGF0YVwiO1xuaW1wb3J0IHsgVEZvbGRlciwgbm9ybWFsaXplUGF0aCB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHsgcGFyc2VZYW1sIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgKiBhcyBoZWxwZXIgZnJvbSBcIi4vaGVscGVyXCI7XG5cbmZ1bmN0aW9uIHN0clRvQm9vbChzdHI6IHN0cmluZyk6IGJvb2xlYW4gfCBudWxsIHtcbiAgICBzdHIgPSBzdHIudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG4gICAgc3dpdGNoIChzdHIpIHtcbiAgICAgICAgY2FzZSBcInRydWVcIjpcbiAgICAgICAgY2FzZSBcIjFcIjpcbiAgICAgICAgY2FzZSBcIm9uXCI6XG4gICAgICAgIGNhc2UgXCJ5ZXNcIjpcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBjYXNlIFwiZmFsc2VcIjpcbiAgICAgICAgY2FzZSBcIjBcIjpcbiAgICAgICAgY2FzZSBcIm9mZlwiOlxuICAgICAgICBjYXNlIFwibm9cIjpcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlU2VhcmNoVHlwZShzZWFyY2hUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBpZiAoXG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0YWdcIiB8fFxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiIHx8XG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJmcm9udG1hdHRlclwiIHx8XG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ3aWtpXCIgfHxcbiAgICAgICAgc2VhcmNoVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcIndpa2kubGlua1wiIHx8XG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ3aWtpLmRpc3BsYXlcIiB8fFxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwiZHZmaWVsZFwiIHx8XG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0YWJsZVwiIHx8XG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJmaWxlbWV0YVwiIHx8XG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0YXNrXCIgfHxcbiAgICAgICAgc2VhcmNoVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcInRhc2suYWxsXCIgfHxcbiAgICAgICAgc2VhcmNoVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcInRhc2suZG9uZVwiIHx8XG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0YXNrLm5vdGRvbmVcIlxuICAgICkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVlBeGlzTG9jYXRpb24obG9jYXRpb246IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGlmIChsb2NhdGlvbiA9PT0gXCJsZWZ0XCIgfHwgbG9jYXRpb24gPT09IFwicmlnaHRcIiB8fCBsb2NhdGlvbiA9PT0gXCJub25lXCIpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVDb2xvcihjb2xvcjogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHNwbGl0SW5wdXRCeUNvbW1hKGlucHV0OiBzdHJpbmcpIHtcbiAgICAvLyBTcGxpdCBzdHJpbmcgYnkgJywnIGJ1dCBub3QgYnkgJ1xcLCdcbiAgICAvLyBsZXQgc3BsaXR0ZWQgPSBpbnB1dC5zcGxpdCgvKD88IVxcXFwpLC8pOyAvLyAtLT5sb29rYmVoaW5kIG5vdCBzdXBwb3J0IGluIFNhZmFyaSBmb3Igbm93XG4gICAgY29uc3QgZHVtbXkgPSBcIjo6Ojo6OnRyYWNrZXI6Ojo6OjpcIjtcbiAgICBsZXQgdGVtcCA9IGlucHV0LnNwbGl0KFwiXFxcXCxcIikuam9pbihkdW1teSk7XG4gICAgbGV0IHNwbGl0dGVkID0gdGVtcC5zcGxpdChcIixcIik7XG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgc3BsaXR0ZWQubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICBzcGxpdHRlZFtpbmRdID0gc3BsaXR0ZWRbaW5kXS5zcGxpdChkdW1teSkuam9pbihcIixcIik7XG4gICAgfVxuICAgIHJldHVybiBzcGxpdHRlZDtcbn1cblxuZnVuY3Rpb24gZ2V0Qm9vbEFycmF5RnJvbUlucHV0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBpbnB1dDogYW55LFxuICAgIG51bURhdGFzZXQ6IG51bWJlcixcbiAgICBkZWZhdWx0VmFsdWU6IGJvb2xlYW4sXG4gICAgYWxsb3dOb1ZhbGlkVmFsdWU6IGJvb2xlYW5cbik6IEFycmF5PGJvb2xlYW4+IHwgc3RyaW5nIHtcbiAgICBsZXQgYXJyYXk6IEFycmF5PGJvb2xlYW4+ID0gW107XG4gICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiXCI7XG4gICAgbGV0IG51bVZhbGlkVmFsdWUgPSAwO1xuXG4gICAgd2hpbGUgKG51bURhdGFzZXQgPiBhcnJheS5sZW5ndGgpIHtcbiAgICAgICAgYXJyYXkucHVzaChkZWZhdWx0VmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwidW5kZWZpbmVkXCIgfHwgaW5wdXQgPT09IG51bGwpIHtcbiAgICAgICAgLy8gYWxsIGRlZmF1bHRWYWx1ZVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcIm9iamVjdFwiICYmIGlucHV0ICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuICAgICAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA+IG51bURhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIlRvbyBtYW55IGlucHV0cyBmb3IgcGFyYW1ldGVyICdcIiArIG5hbWUgKyBcIidcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiRW1wdHkgYXJyYXkgbm90IGFsbG93ZCBmb3IgXCIgKyBuYW1lO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGluZCA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgY3VyciA9IGlucHV0W2luZF07XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcmV2ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBpbnB1dFtpbmQgLSAxXS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjdXJyID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyciA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmV2ICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBwcmV2O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBkZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGN1cnIgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gY3VycjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRXhjZWVkcyB0aGUgbGVuZ3RoIG9mIGlucHV0LCB1c2UgcHJldiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdCA9IGlucHV0W2lucHV0Lmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobnVtVmFsaWRWYWx1ZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBsYXN0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGxldCBzcGxpdHRlZCA9IHNwbGl0SW5wdXRCeUNvbW1hKGlucHV0KTtcbiAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGlmIChzcGxpdHRlZC5sZW5ndGggPiBudW1EYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJUb28gbWFueSBpbnB1dHMgZm9yIHBhcmFtZXRlciAnXCIgKyBuYW1lICsgXCInXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kIDwgc3BsaXR0ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyID0gc3BsaXR0ZWRbaW5kXS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcmV2ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBzdHJUb0Jvb2woc3BsaXR0ZWRbaW5kIC0gMV0udHJpbSgpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VyciA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gcHJldjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyQm9vbCA9IHN0clRvQm9vbChjdXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyQm9vbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBjdXJyQm9vbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4Y2VlZHMgdGhlIGxlbmd0aCBvZiBpbnB1dCwgdXNlIHByZXYgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3QgPSBzdHJUb0Jvb2woc3BsaXR0ZWRbc3BsaXR0ZWQubGVuZ3RoIC0gMV0udHJpbSgpKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bVZhbGlkVmFsdWUgPiAwICYmIGxhc3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBsYXN0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgIC8vIGFsbCBkZWZhdWx0VmFsdWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0Qm9vbCA9IHN0clRvQm9vbChpbnB1dCk7XG4gICAgICAgICAgICAgICAgaWYgKGlucHV0Qm9vbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBhcnJheVswXSA9IGlucHV0Qm9vbDtcbiAgICAgICAgICAgICAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAxOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gaW5wdXRCb29sO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICBhcnJheVswXSA9IGlucHV0O1xuICAgICAgICBudW1WYWxpZFZhbHVlKys7XG4gICAgICAgIGZvciAobGV0IGluZCA9IDE7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgIGFycmF5W2luZF0gPSBpbnB1dDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcbiAgICB9XG5cbiAgICBpZiAoIWFsbG93Tm9WYWxpZFZhbHVlICYmIG51bVZhbGlkVmFsdWUgPT09IDApIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJObyB2YWxpZCBpbnB1dCBmb3IgXCIgKyBuYW1lO1xuICAgIH1cblxuICAgIGlmIChlcnJvck1lc3NhZ2UgIT09IFwiXCIpIHtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJyYXk7XG59XG5cbmZ1bmN0aW9uIGdldE51bWJlckFycmF5RnJvbUlucHV0KFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBpbnB1dDogYW55LFxuICAgIG51bURhdGFzZXQ6IG51bWJlcixcbiAgICBkZWZhdWx0VmFsdWU6IG51bWJlcixcbiAgICBhbGxvd05vVmFsaWRWYWx1ZTogYm9vbGVhblxuKTogQXJyYXk8bnVtYmVyPiB8IHN0cmluZyB7XG4gICAgLy8gY29uc29sZS5sb2coXCJnZXROdW1iZXJBcnJheUZyb21JbnB1dFwiKTtcblxuICAgIGxldCBhcnJheTogQXJyYXk8bnVtYmVyPiA9IFtdO1xuICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiO1xuICAgIGxldCBudW1WYWxpZFZhbHVlID0gMDtcblxuICAgIHdoaWxlIChudW1EYXRhc2V0ID4gYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgIGFycmF5LnB1c2goZGVmYXVsdFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInVuZGVmaW5lZFwiIHx8IGlucHV0ID09PSBudWxsKSB7XG4gICAgICAgIC8vIGFsbCBkZWZhdWx0VmFsdWVcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIiAmJiBpbnB1dCAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPiBudW1EYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJUb28gbWFueSBpbnB1dHMgZm9yIHBhcmFtZXRlciAnXCIgKyBuYW1lICsgXCInXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkVtcHR5IGFycmF5IG5vdCBhbGxvd2QgZm9yIFwiICsgbmFtZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgYXJyYXkubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgICAgIGlmIChpbmQgPCBpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnIgPSBpbnB1dFtpbmRdO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJldiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gaW5wdXRbaW5kIC0gMV0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3VyciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnIgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gcHJldjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjdXJyID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gY3VycjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gRXhjZWVkcyB0aGUgbGVuZ3RoIG9mIGlucHV0LCB1c2UgcHJldiB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdCA9IGlucHV0W2lucHV0Lmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgICAgICAgICBpZiAobnVtVmFsaWRWYWx1ZSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBsYXN0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGxldCBzcGxpdHRlZCA9IHNwbGl0SW5wdXRCeUNvbW1hKGlucHV0KTtcbiAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIGlmIChzcGxpdHRlZC5sZW5ndGggPiBudW1EYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJUb28gbWFueSBpbnB1dHMgZm9yIHBhcmFtZXRlciAnXCIgKyBuYW1lICsgXCInXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5kIDwgc3BsaXR0ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyID0gc3BsaXR0ZWRbaW5kXS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBwcmV2ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBoZWxwZXIucGFyc2VGbG9hdEZyb21BbnkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0ZWRbaW5kIC0gMV0udHJpbSgpXG4gICAgICAgICAgICAgICAgICAgICAgICApLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCAmJiBOdW1iZXIuaXNOdW1iZXIocHJldikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gcHJldjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjdXJyTnVtID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KGN1cnIpLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJOdW0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gY3Vyck51bTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4Y2VlZHMgdGhlIGxlbmd0aCBvZiBpbnB1dCwgdXNlIHByZXYgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3QgPSBoZWxwZXIucGFyc2VGbG9hdEZyb21BbnkoXG4gICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHRlZFtpbnB1dC5sZW5ndGggLSAxXS50cmltKClcbiAgICAgICAgICAgICAgICAgICAgKS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bVZhbGlkVmFsdWUgPiAwICYmIGxhc3QgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBsYXN0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgIC8vIGFsbCBkZWZhdWx0VmFsdWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbGV0IGlucHV0TnVtID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KGlucHV0KS52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXROdW0gIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbMF0gPSBpbnB1dE51bTtcbiAgICAgICAgICAgICAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAxOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gaW5wdXROdW07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgaWYgKE51bWJlci5pc051bWJlcihpbnB1dCkpIHtcbiAgICAgICAgICAgIGFycmF5WzBdID0gaW5wdXQ7XG4gICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAxOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGlucHV0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xuICAgIH1cblxuICAgIGlmICghYWxsb3dOb1ZhbGlkVmFsdWUgJiYgbnVtVmFsaWRWYWx1ZSA9PT0gMCkge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIk5vIHZhbGlkIGlucHV0IGZvciBcIiArIG5hbWU7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yTWVzc2FnZSAhPT0gXCJcIikge1xuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RyaW5nRnJvbUlucHV0KGlucHV0OiBhbnksIGRlZmF1bHRWYWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBoZWxwZXIucmVwbGFjZUltZ1RhZ0J5QWx0KGlucHV0KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gaW5wdXQudG9TdHJpbmcoKTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmF1bHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGlucHV0OiBhbnksXG4gICAgbnVtRGF0YXNldDogbnVtYmVyLFxuICAgIGRlZmF1bHRWYWx1ZTogc3RyaW5nLFxuICAgIHZhbGlkYXRvcjogRnVuY3Rpb24sXG4gICAgYWxsb3dOb1ZhbGlkVmFsdWU6IGJvb2xlYW5cbik6IEFycmF5PHN0cmluZz4gfCBzdHJpbmcge1xuICAgIGxldCBhcnJheTogQXJyYXk8c3RyaW5nPiA9IFtdO1xuICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiO1xuICAgIGxldCBudW1WYWxpZFZhbHVlID0gMDtcblxuICAgIHdoaWxlIChudW1EYXRhc2V0ID4gYXJyYXkubGVuZ3RoKSB7XG4gICAgICAgIGFycmF5LnB1c2goZGVmYXVsdFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInVuZGVmaW5lZFwiIHx8IGlucHV0ID09PSBudWxsKSB7XG4gICAgICAgIC8vIGFsbCBkZWZhdWx0VmFsdWVcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIiAmJiBpbnB1dCAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPiBudW1EYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJUb28gbWFueSBpbnB1dHMgZm9yIHBhcmFtZXRlciAnXCIgKyBuYW1lICsgXCInXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkVtcHR5IGFycmF5IG5vdCBhbGxvd2QgZm9yIFwiICsgbmFtZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgYXJyYXkubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgICAgIGlmIChpbmQgPCBpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnIgPSBpbnB1dFtpbmRdO1xuICAgICAgICAgICAgICAgICAgICBsZXQgcHJldiA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gaW5wdXRbaW5kIC0gMV0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3VyciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnIgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gcHJldjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yKGN1cnIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gY3VycjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGN1cnI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4Y2VlZHMgdGhlIGxlbmd0aCBvZiBpbnB1dCwgdXNlIHByZXYgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3QgPSBpbnB1dFtpbnB1dC5sZW5ndGggLSAxXS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1WYWxpZFZhbHVlID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGxhc3Q7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbGV0IHNwbGl0dGVkID0gc3BsaXRJbnB1dEJ5Q29tbWEoaW5wdXQpO1xuICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA+IG51bURhdGFzZXQpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIlRvbyBtYW55IGlucHV0cyBmb3IgcGFyYW1ldGVyICdcIiArIG5hbWUgKyBcIidcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgYXJyYXkubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgICAgIGlmIChpbmQgPCBzcGxpdHRlZC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnIgPSBzcGxpdHRlZFtpbmRdLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByZXYgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IHNwbGl0dGVkW2luZCAtIDFdLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VyciA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gcHJldjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yKGN1cnIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBjdXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBjdXJyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEV4Y2VlZHMgdGhlIGxlbmd0aCBvZiBpbnB1dCwgdXNlIHByZXYgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3QgPSBzcGxpdHRlZFtzcGxpdHRlZC5sZW5ndGggLSAxXS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1WYWxpZFZhbHVlID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGxhc3Q7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKGlucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgLy8gYWxsIGRlZmF1bHRWYWx1ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IoaW5wdXQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVswXSA9IGlucHV0O1xuICAgICAgICAgICAgICAgICAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMTsgaW5kIDwgYXJyYXkubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBpbnB1dDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5WzBdID0gaW5wdXQ7XG4gICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMTsgaW5kIDwgYXJyYXkubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGlucHV0O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgbGV0IHN0ck51bWJlciA9IGlucHV0LnRvU3RyaW5nKCk7XG4gICAgICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgICAgICAgIGlmICh2YWxpZGF0b3Ioc3RyTnVtYmVyKSkge1xuICAgICAgICAgICAgICAgIGFycmF5WzBdID0gc3RyTnVtYmVyO1xuICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAxOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBzdHJOdW1iZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhcnJheVswXSA9IHN0ck51bWJlcjtcbiAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDE7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gc3RyTnVtYmVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xuICAgIH1cblxuICAgIGlmICghYWxsb3dOb1ZhbGlkVmFsdWUgJiYgbnVtVmFsaWRWYWx1ZSA9PT0gMCkge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIk5vIHZhbGlkIGlucHV0IGZvciBcIiArIG5hbWU7XG4gICAgfVxuXG4gICAgaWYgKGVycm9yTWVzc2FnZSAhPT0gXCJcIikge1xuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgIH1cblxuICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgYXJyYXlbaW5kXSA9IGhlbHBlci5yZXBsYWNlSW1nVGFnQnlBbHQoYXJyYXlbaW5kXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFycmF5O1xufVxuXG5mdW5jdGlvbiBnZXROdW1iZXJBcnJheShuYW1lOiBzdHJpbmcsIGlucHV0OiBhbnkpOiBBcnJheTxudW1iZXI+IHwgc3RyaW5nIHtcbiAgICBsZXQgbnVtQXJyYXk6IEFycmF5PG51bWJlcj4gPSBbXTtcblxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwidW5kZWZpbmVkXCIgfHwgaW5wdXQgPT09IG51bGwpIHJldHVybiBudW1BcnJheTtcblxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBlbGVtIG9mIGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCB2ID0gcGFyc2VGbG9hdChlbGVtKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKE51bWJlci5pc051bWJlcih2KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJyYXkucHVzaCh2KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBgUGFyYW1ldGVyICcke25hbWV9JyBhY2NlcHRzIG9ubHkgbnVtYmVyc2A7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbGV0IHNwbGl0dGVkID0gc3BsaXRJbnB1dEJ5Q29tbWEoaW5wdXQpO1xuICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgZm9yIChsZXQgcGllY2Ugb2Ygc3BsaXR0ZWQpIHtcbiAgICAgICAgICAgICAgICBsZXQgdiA9IHBhcnNlRmxvYXQocGllY2UudHJpbSgpKTtcbiAgICAgICAgICAgICAgICBpZiAoIU51bWJlci5pc05hTih2KSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBOdW1iZXIuaXNOdW1iZXIoTmFOKSAtLT4gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICBudW1BcnJheS5wdXNoKHYpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBgUGFyYW1ldGVyICcke25hbWV9JyBhY2NlcHRzIG9ubHkgbnVtYmVyc2A7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYEVtcHR5ICR7bmFtZX0gaXMgbm90IGFsbG93ZWQuYDtcbiAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgdiA9IHBhcnNlRmxvYXQoaW5wdXQpO1xuICAgICAgICAgICAgaWYgKE51bWJlci5pc051bWJlcih2KSkge1xuICAgICAgICAgICAgICAgIG51bUFycmF5LnB1c2godik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBgUGFyYW1ldGVyICcke25hbWV9JyBhY2NlcHRzIG9ubHkgbnVtYmVyc2A7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIG51bUFycmF5LnB1c2goaW5wdXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBgSW52YWxpZCAke25hbWV9YDtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVtQXJyYXk7XG59XG5cbmZ1bmN0aW9uIGdldFN0cmluZ0FycmF5KG5hbWU6IHN0cmluZywgaW5wdXQ6IGFueSk6IEFycmF5PHN0cmluZz4gfCBzdHJpbmcge1xuICAgIGxldCBzdHJBcnJheTogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJ1bmRlZmluZWRcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIHN0ckFycmF5O1xuXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGVsZW0gb2YgaW5wdXQpIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGVsZW0gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyQXJyYXkucHVzaChlbGVtLnRyaW0oKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbGV0IHNwbGl0dGVkID0gc3BsaXRJbnB1dEJ5Q29tbWEoaW5wdXQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhzcGxpdHRlZCk7XG4gICAgICAgIGlmIChzcGxpdHRlZC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBwaWVjZSBvZiBzcGxpdHRlZCkge1xuICAgICAgICAgICAgICAgIHN0ckFycmF5LnB1c2gocGllY2UudHJpbSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gXCJcIikge1xuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IGBFbXB0eSAke25hbWV9IGlzIG5vdCBhbGxvd2VkLmA7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3RyQXJyYXkucHVzaChpbnB1dCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYEludmFsaWQgJHtuYW1lfWA7XG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgc3RyQXJyYXkubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICBzdHJBcnJheVtpbmRdID0gaGVscGVyLnJlcGxhY2VJbWdUYWdCeUFsdChzdHJBcnJheVtpbmRdKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyQXJyYXk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQ29tbW9uQ2hhcnRJbmZvKHlhbWw6IGFueSwgcmVuZGVySW5mbzogQ29tbW9uQ2hhcnRJbmZvKSB7XG4gICAgLy8gY29uc29sZS5sb2coXCJwYXJzZUNvbW1vbkNoYXJ0SW5mb1wiKTtcblxuICAgIC8vIHNpbmdsZSB2YWx1ZSwgdXNlIGRlZmF1bHQgdmFsdWUgaWYgbm8gdmFsdWUgZnJvbSBZQU1MXG4gICAgaWYgKHlhbWwpIHtcbiAgICAgICAgLy8gdGl0bGVcbiAgICAgICAgcmVuZGVySW5mby50aXRsZSA9IGdldFN0cmluZ0Zyb21JbnB1dCh5YW1sPy50aXRsZSwgcmVuZGVySW5mby50aXRsZSk7XG5cbiAgICAgICAgLy8geEF4aXNMYWJlbFxuICAgICAgICByZW5kZXJJbmZvLnhBeGlzTGFiZWwgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgICAgICB5YW1sPy54QXhpc0xhYmVsLFxuICAgICAgICAgICAgcmVuZGVySW5mby54QXhpc0xhYmVsXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8geEF4aXNDb2xvclxuICAgICAgICByZW5kZXJJbmZvLnhBeGlzQ29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgICAgICB5YW1sPy54QXhpc0NvbG9yLFxuICAgICAgICAgICAgcmVuZGVySW5mby54QXhpc0NvbG9yXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8geEF4aXNMYWJlbENvbG9yXG4gICAgICAgIHJlbmRlckluZm8ueEF4aXNMYWJlbENvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbD8ueEF4aXNMYWJlbENvbG9yLFxuICAgICAgICAgICAgcmVuZGVySW5mby54QXhpc0xhYmVsQ29sb3JcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBhbGxvd0luc3BlY3REYXRhXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbC5hbGxvd0luc3BlY3REYXRhID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgcmVuZGVySW5mby5hbGxvd0luc3BlY3REYXRhID0geWFtbC5hbGxvd0luc3BlY3REYXRhO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2hvd0xlZ2VuZFxuICAgICAgICBpZiAodHlwZW9mIHlhbWwuc2hvd0xlZ2VuZCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHJlbmRlckluZm8uc2hvd0xlZ2VuZCA9IHlhbWwuc2hvd0xlZ2VuZDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGxlZ2VuZFBvc2l0aW9uXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbC5sZWdlbmRQb3NpdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmVuZGVySW5mby5sZWdlbmRQb3NpdGlvbiA9IHlhbWwubGVnZW5kUG9zaXRpb247XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZFBvc2l0aW9uID0gXCJib3R0b21cIjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGxlZ2VuZE9yaWVudFxuICAgICAgICBpZiAodHlwZW9mIHlhbWwubGVnZW5kT3JpZW50YXRpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kT3JpZW50YXRpb24gPSB5YW1sLmxlZ2VuZE9yaWVudGF0aW9uO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwidG9wXCIgfHxcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZFBvc2l0aW9uID09PSBcImJvdHRvbVwiXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID0gXCJob3Jpem9udGFsXCI7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwibGVmdFwiIHx8XG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5sZWdlbmRQb3NpdGlvbiA9PT0gXCJyaWdodFwiXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID0gXCJ2ZXJ0aWNhbFwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID0gXCJob3Jpem9udGFsXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5sZWdlbmRQb3NpdGlvbik7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ubGVnZW5kT3JpZW50YXRpb24pO1xuXG4gICAgICAgIC8vIGxlZ2VuZEJnQ29sb3JcbiAgICAgICAgcmVuZGVySW5mby5sZWdlbmRCZ0NvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbD8ubGVnZW5kQmdDb2xvcixcbiAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kQmdDb2xvclxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGxlZ2VuZEJvcmRlckNvbG9yXG4gICAgICAgIHJlbmRlckluZm8ubGVnZW5kQm9yZGVyQ29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgICAgICB5YW1sPy5sZWdlbmRCb3JkZXJDb2xvcixcbiAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kQm9yZGVyQ29sb3JcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyB5QXhpc0xhYmVsXG4gICAgbGV0IHJldFlBeGlzTGFiZWwgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcbiAgICAgICAgXCJ5QXhpc0xhYmVsXCIsXG4gICAgICAgIHlhbWw/LnlBeGlzTGFiZWwsXG4gICAgICAgIDIsXG4gICAgICAgIFwiVmFsdWVcIixcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRZQXhpc0xhYmVsID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRZQXhpc0xhYmVsOyAvLyBlcnJvck1lc3NhZ2VcbiAgICB9XG4gICAgaWYgKHJldFlBeGlzTGFiZWwubGVuZ3RoID4gMikge1xuICAgICAgICByZXR1cm4gXCJ5QXhpc0xhYmVsIGFjY2VwdHMgbm90IG1vcmUgdGhhbiB0d28gdmFsdWVzIGZvciBsZWZ0IGFuZCByaWdodCB5LWF4ZXNcIjtcbiAgICB9XG4gICAgcmVuZGVySW5mby55QXhpc0xhYmVsID0gcmV0WUF4aXNMYWJlbDtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnlBeGlzTGFiZWwpO1xuXG4gICAgLy8geUF4aXNDb2xvclxuICAgIGxldCByZXRZQXhpc0NvbG9yID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwieUF4aXNDb2xvclwiLFxuICAgICAgICB5YW1sPy55QXhpc0NvbG9yLFxuICAgICAgICAyLFxuICAgICAgICBcIlwiLFxuICAgICAgICB2YWxpZGF0ZUNvbG9yLFxuICAgICAgICB0cnVlXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHJldFlBeGlzQ29sb3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFlBeGlzQ29sb3I7IC8vIGVycm9yTWVzc2FnZVxuICAgIH1cbiAgICBpZiAocmV0WUF4aXNDb2xvci5sZW5ndGggPiAyKSB7XG4gICAgICAgIHJldHVybiBcInlBeGlzQ29sb3IgYWNjZXB0cyBub3QgbW9yZSB0aGFuIHR3byB2YWx1ZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHktYXhlc1wiO1xuICAgIH1cbiAgICByZW5kZXJJbmZvLnlBeGlzQ29sb3IgPSByZXRZQXhpc0NvbG9yO1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ueUF4aXNDb2xvcik7XG5cbiAgICAvLyB5QXhpc0xhYmVsQ29sb3JcbiAgICBsZXQgcmV0WUF4aXNMYWJlbENvbG9yID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwieUF4aXNMYWJlbENvbG9yXCIsXG4gICAgICAgIHlhbWw/LnlBeGlzTGFiZWxDb2xvcixcbiAgICAgICAgMixcbiAgICAgICAgXCJcIixcbiAgICAgICAgdmFsaWRhdGVDb2xvcixcbiAgICAgICAgdHJ1ZVxuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRZQXhpc0xhYmVsQ29sb3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFlBeGlzTGFiZWxDb2xvcjsgLy8gZXJyb3JNZXNzYWdlXG4gICAgfVxuICAgIGlmIChyZXRZQXhpc0xhYmVsQ29sb3IubGVuZ3RoID4gMikge1xuICAgICAgICByZXR1cm4gXCJ5QXhpc0xhYmVsQ29sb3IgYWNjZXB0cyBub3QgbW9yZSB0aGFuIHR3byB2YWx1ZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHktYXhlc1wiO1xuICAgIH1cbiAgICByZW5kZXJJbmZvLnlBeGlzTGFiZWxDb2xvciA9IHJldFlBeGlzTGFiZWxDb2xvcjtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnlBeGlzTGFiZWxDb2xvcik7XG5cbiAgICAvLyB5QXhpc1VuaXRcbiAgICBsZXQgcmV0WUF4aXNVbml0ID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwieUF4aXNVbml0XCIsXG4gICAgICAgIHlhbWw/LnlBeGlzVW5pdCxcbiAgICAgICAgMixcbiAgICAgICAgXCJcIixcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRZQXhpc1VuaXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFlBeGlzVW5pdDsgLy8gZXJyb3JNZXNzYWdlXG4gICAgfVxuICAgIGlmIChyZXRZQXhpc1VuaXQubGVuZ3RoID4gMikge1xuICAgICAgICByZXR1cm4gXCJ5QXhpc1VuaXQgYWNjZXB0cyBub3QgbW9yZSB0aGFuIHR3byB2YWx1ZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHktYXhlc1wiO1xuICAgIH1cbiAgICByZW5kZXJJbmZvLnlBeGlzVW5pdCA9IHJldFlBeGlzVW5pdDtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnlBeGlzVW5pdCk7XG5cbiAgICAvLyB4QXhpc1RpY2tJbnRlcnZhbFxuICAgIHJlbmRlckluZm8ueEF4aXNUaWNrSW50ZXJ2YWwgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgIHlhbWw/LnhBeGlzVGlja0ludGVydmFsLFxuICAgICAgICByZW5kZXJJbmZvLnhBeGlzVGlja0ludGVydmFsXG4gICAgKTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnhBeGlzVGlja0ludGVydmFsKTtcblxuICAgIC8vIHlBeGlzVGlja0ludGVydmFsXG4gICAgbGV0IHJldFlBeGlzVGlja0ludGVydmFsID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwieUF4aXNUaWNrSW50ZXJ2YWxcIixcbiAgICAgICAgeWFtbD8ueUF4aXNUaWNrSW50ZXJ2YWwsXG4gICAgICAgIDIsXG4gICAgICAgIG51bGwsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0WUF4aXNUaWNrSW50ZXJ2YWwgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFlBeGlzVGlja0ludGVydmFsOyAvLyBlcnJvck1lc3NhZ2VcbiAgICB9XG4gICAgaWYgKHJldFlBeGlzVGlja0ludGVydmFsLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgcmV0dXJuIFwieUF4aXNUaWNrSW50ZXJ2YWwgYWNjZXB0cyBub3QgbW9yZSB0aGFuIHR3byB2YWx1ZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHktYXhlc1wiO1xuICAgIH1cbiAgICByZW5kZXJJbmZvLnlBeGlzVGlja0ludGVydmFsID0gcmV0WUF4aXNUaWNrSW50ZXJ2YWw7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby55QXhpc1RpY2tJbnRlcnZhbCk7XG5cbiAgICAvLyB4QXhpc1RpY2tMYWJlbEZvcm1hdFxuICAgIHJlbmRlckluZm8ueEF4aXNUaWNrTGFiZWxGb3JtYXQgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgIHlhbWw/LnhBeGlzVGlja0xhYmVsRm9ybWF0LFxuICAgICAgICByZW5kZXJJbmZvLnhBeGlzVGlja0xhYmVsRm9ybWF0XG4gICAgKTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnhBeGlzVGlja0xhYmVsRm9ybWF0KTtcblxuICAgIC8vIHlBeGlzVGlja0xhYmVsRm9ybWF0XG4gICAgbGV0IHJldFlBeGlzVGlja0xhYmVsRm9ybWF0ID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwieUF4aXNUaWNrTGFiZWxGb3JtYXRcIixcbiAgICAgICAgeWFtbD8ueUF4aXNUaWNrTGFiZWxGb3JtYXQsXG4gICAgICAgIDIsXG4gICAgICAgIG51bGwsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0WUF4aXNUaWNrTGFiZWxGb3JtYXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFlBeGlzVGlja0xhYmVsRm9ybWF0OyAvLyBlcnJvck1lc3NhZ2VcbiAgICB9XG4gICAgaWYgKHJldFlBeGlzVGlja0xhYmVsRm9ybWF0Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgcmV0dXJuIFwieUF4aXNUaWNrTGFiZWxGb3JtYXQgYWNjZXB0cyBub3QgbW9yZSB0aGFuIHR3byB2YWx1ZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHktYXhlc1wiO1xuICAgIH1cbiAgICByZW5kZXJJbmZvLnlBeGlzVGlja0xhYmVsRm9ybWF0ID0gcmV0WUF4aXNUaWNrTGFiZWxGb3JtYXQ7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby55QXhpc1RpY2tMYWJlbEZvcm1hdCk7XG5cbiAgICAvLyB5TWluXG4gICAgbGV0IHJldFlNaW4gPSBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcInlNaW5cIiwgeWFtbD8ueU1pbiwgMiwgbnVsbCwgdHJ1ZSk7XG4gICAgaWYgKHR5cGVvZiByZXRZTWluID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRZTWluOyAvLyBlcnJvck1lc3NhZ2VcbiAgICB9XG4gICAgaWYgKHJldFlNaW4ubGVuZ3RoID4gMikge1xuICAgICAgICByZXR1cm4gXCJ5TWluIGFjY2VwdHMgbm90IG1vcmUgdGhhbiB0d28gdmFsdWVzIGZvciBsZWZ0IGFuZCByaWdodCB5LWF4ZXNcIjtcbiAgICB9XG4gICAgcmVuZGVySW5mby55TWluID0gcmV0WU1pbjtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnlNaW4pO1xuXG4gICAgLy8geU1heFxuICAgIGxldCByZXRZTWF4ID0gZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQoXCJ5TWF4XCIsIHlhbWw/LnlNYXgsIDIsIG51bGwsIHRydWUpO1xuICAgIGlmICh0eXBlb2YgcmV0WU1heCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0WU1heDsgLy8gZXJyb3JNZXNzYWdlXG4gICAgfVxuICAgIGlmIChyZXRZTWF4Lmxlbmd0aCA+IDIpIHtcbiAgICAgICAgcmV0dXJuIFwieU1heCBhY2NlcHRzIG5vdCBtb3JlIHRoYW4gdHdvIHZhbHVlcyBmb3IgbGVmdCBhbmQgcmlnaHQgeS1heGVzXCI7XG4gICAgfVxuICAgIHJlbmRlckluZm8ueU1heCA9IHJldFlNYXg7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby55TWF4KTtcblxuICAgIC8vIHJldmVyc2VZQXhpc1xuICAgIGxldCByZXRSZXZlcnNlWUF4aXMgPSBnZXRCb29sQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwicmV2ZXJzZVlBeGlzXCIsXG4gICAgICAgIHlhbWw/LnJldmVyc2VZQXhpcyxcbiAgICAgICAgMixcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0UmV2ZXJzZVlBeGlzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRSZXZlcnNlWUF4aXM7IC8vIGVycm9yTWVzc2FnZVxuICAgIH1cbiAgICBpZiAocmV0UmV2ZXJzZVlBeGlzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgcmV0dXJuIFwicmV2ZXJzZVlBeGlzIGFjY2VwdHMgbm90IG1vcmUgdGhhbiB0d28gdmFsdWVzIGZvciBsZWZ0IGFuZCByaWdodCB5LWF4ZXNcIjtcbiAgICB9XG4gICAgcmVuZGVySW5mby5yZXZlcnNlWUF4aXMgPSByZXRSZXZlcnNlWUF4aXM7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5yZXZlcnNlWUF4aXMpO1xufVxuXG5mdW5jdGlvbiBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyhvYmo6IG9iamVjdCk6IHN0cmluZ1tdIHtcbiAgICBsZXQga2V5czogc3RyaW5nW10gPSBbXTtcbiAgICBpZiAob2JqICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IG9iamVjdEtleXMgPSBPYmplY3Qua2V5cyhvYmopIGFzIEFycmF5PGtleW9mIHN0cmluZz47XG4gICAgICAgIGZvciAobGV0IGtleSBvZiBvYmplY3RLZXlzKSB7XG4gICAgICAgICAgICBrZXlzLnB1c2goa2V5LnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBrZXlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVuZGVySW5mb0Zyb21ZYW1sKFxuICAgIHlhbWxUZXh0OiBzdHJpbmcsXG4gICAgcGx1Z2luOiBUcmFja2VyXG4pOiBSZW5kZXJJbmZvIHwgc3RyaW5nIHtcbiAgICBsZXQgeWFtbDtcbiAgICB0cnkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh5YW1sVGV4dCk7XG4gICAgICAgIHlhbWwgPSBwYXJzZVlhbWwoeWFtbFRleHQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJFcnJvciBwYXJzaW5nIFlBTUxcIjtcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICB9XG4gICAgaWYgKCF5YW1sKSB7XG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIkVycm9yIHBhcnNpbmcgWUFNTFwiO1xuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyh5YW1sKTtcbiAgICBsZXQga2V5c0ZvdW5kSW5ZQU1MID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoeWFtbCk7XG4gICAgLy8gY29uc29sZS5sb2coa2V5c0ZvdW5kSW5ZQU1MKTtcblxuICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiO1xuXG4gICAgLy8gU2VhcmNoIHRhcmdldFxuICAgIGlmICgha2V5c0ZvdW5kSW5ZQU1MLmluY2x1ZGVzKFwic2VhcmNoVGFyZ2V0XCIpKSB7XG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlBhcmFtZXRlciAnc2VhcmNoVGFyZ2V0JyBub3QgZm91bmQgaW4gWUFNTFwiO1xuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgIH1cbiAgICBsZXQgc2VhcmNoVGFyZ2V0OiBBcnJheTxzdHJpbmc+ID0gW107XG4gICAgaWYgKHR5cGVvZiB5YW1sLnNlYXJjaFRhcmdldCA9PT0gXCJvYmplY3RcIiAmJiB5YW1sLnNlYXJjaFRhcmdldCAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh5YW1sLnNlYXJjaFRhcmdldCkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IHRhcmdldCBvZiB5YW1sLnNlYXJjaFRhcmdldCkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdGFyZ2V0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0YXJnZXQgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFRhcmdldC5wdXNoKHRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkVtcHR5IHNlYXJjaCB0YXJnZXQgaXMgbm90IGFsbG93ZWQuXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHlhbWwuc2VhcmNoVGFyZ2V0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGxldCBzcGxpdHRlZCA9IHNwbGl0SW5wdXRCeUNvbW1hKHlhbWwuc2VhcmNoVGFyZ2V0KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coc3BsaXR0ZWQpO1xuICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgZm9yIChsZXQgcGllY2Ugb2Ygc3BsaXR0ZWQpIHtcbiAgICAgICAgICAgICAgICBwaWVjZSA9IHBpZWNlLnRyaW0oKTtcbiAgICAgICAgICAgICAgICBpZiAocGllY2UgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoVGFyZ2V0LnB1c2gocGllY2UpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiRW1wdHkgc2VhcmNoIHRhcmdldCBpcyBub3QgYWxsb3dlZC5cIjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHlhbWwuc2VhcmNoVGFyZ2V0ID09PSBcIlwiKSB7XG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkVtcHR5IHNlYXJjaCB0YXJnZXQgaXMgbm90IGFsbG93ZWQuXCI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZWFyY2hUYXJnZXQucHVzaCh5YW1sLnNlYXJjaFRhcmdldCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgc2VhcmNoIHRhcmdldCAoc2VhcmNoVGFyZ2V0KVwiO1xuICAgIH1cbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBzZWFyY2hUYXJnZXQubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICBzZWFyY2hUYXJnZXRbaW5kXSA9IGhlbHBlci5yZXBsYWNlSW1nVGFnQnlBbHQoc2VhcmNoVGFyZ2V0W2luZF0pO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhzZWFyY2hUYXJnZXQpO1xuXG4gICAgaWYgKGVycm9yTWVzc2FnZSAhPT0gXCJcIikge1xuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgIH1cblxuICAgIGxldCBudW1EYXRhc2V0cyA9IHNlYXJjaFRhcmdldC5sZW5ndGg7XG5cbiAgICAvLyBTZWFyY2ggdHlwZVxuICAgIGlmICgha2V5c0ZvdW5kSW5ZQU1MLmluY2x1ZGVzKFwic2VhcmNoVHlwZVwiKSkge1xuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJQYXJhbWV0ZXIgJ3NlYXJjaFR5cGUnIG5vdCBmb3VuZCBpbiBZQU1MXCI7XG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgfVxuICAgIGxldCBzZWFyY2hUeXBlOiBBcnJheTxTZWFyY2hUeXBlPiA9IFtdO1xuICAgIGxldCByZXRTZWFyY2hUeXBlID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwic2VhcmNoVHlwZVwiLFxuICAgICAgICB5YW1sLnNlYXJjaFR5cGUsXG4gICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICBcIlwiLFxuICAgICAgICB2YWxpZGF0ZVNlYXJjaFR5cGUsXG4gICAgICAgIGZhbHNlXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHJldFNlYXJjaFR5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFNlYXJjaFR5cGU7IC8vIGVycm9yTWVzc2FnZVxuICAgIH1cbiAgICBmb3IgKGxldCBzdHJUeXBlIG9mIHJldFNlYXJjaFR5cGUpIHtcbiAgICAgICAgc3dpdGNoIChzdHJUeXBlLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgXCJ0YWdcIjpcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5UYWcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcImZyb250bWF0dGVyXCI6XG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuRnJvbnRtYXR0ZXIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcIndpa2lcIjpcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5XaWtpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJ3aWtpLmxpbmtcIjpcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5XaWtpTGluayk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwid2lraS5kaXNwbGF5XCI6XG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuV2lraURpc3BsYXkpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInRleHRcIjpcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5UZXh0KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgXCJkdmZpZWxkXCI6XG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuZHZGaWVsZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidGFibGVcIjpcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5UYWJsZSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwiZmlsZW1ldGFcIjpcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5GaWxlTWV0YSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidGFza1wiOlxuICAgICAgICAgICAgICAgIHNlYXJjaFR5cGUucHVzaChTZWFyY2hUeXBlLlRhc2spO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInRhc2suYWxsXCI6XG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuVGFzayk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFwidGFzay5kb25lXCI6XG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuVGFza0RvbmUpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBcInRhc2subm90ZG9uZVwiOlxuICAgICAgICAgICAgICAgIHNlYXJjaFR5cGUucHVzaChTZWFyY2hUeXBlLlRhc2tOb3REb25lKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDdXJyZW50bHksIHdlIGRvbid0IGFsbG93IHR5cGUgJ3RhYmxlJyB1c2VkIHdpdGggb3RoZXIgdHlwZXNcbiAgICBpZiAoXG4gICAgICAgIHNlYXJjaFR5cGUuaW5jbHVkZXMoU2VhcmNoVHlwZS5UYWJsZSkgJiZcbiAgICAgICAgc2VhcmNoVHlwZS5maWx0ZXIoKHQpID0+IHQgIT09IFNlYXJjaFR5cGUuVGFibGUpLmxlbmd0aCA+IDBcbiAgICApIHtcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICBcInNlYXJjaFR5cGUgJ3RhYmxlJyBkb2VzdG4ndCB3b3JrIHdpdGggb3RoZXIgdHlwZXMgZm9yIG5vd1wiO1xuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhzZWFyY2hUeXBlKTtcblxuICAgIC8vIHNlcGFyYXRvclxuICAgIGxldCBtdWx0aXBsZVZhbHVlU3BhcmF0b3I6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICBsZXQgcmV0TXVsdGlwbGVWYWx1ZVNwYXJhdG9yID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwic2VwYXJhdG9yXCIsXG4gICAgICAgIHlhbWwuc2VwYXJhdG9yLFxuICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgXCJcIiwgLy8gc2V0IHRoZSBkZWZhdWx0IHZhbHVlIGxhdGVyXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0TXVsdGlwbGVWYWx1ZVNwYXJhdG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRNdWx0aXBsZVZhbHVlU3BhcmF0b3I7IC8vIGVycm9yTWVzc2FnZVxuICAgIH1cbiAgICBtdWx0aXBsZVZhbHVlU3BhcmF0b3IgPSByZXRNdWx0aXBsZVZhbHVlU3BhcmF0b3IubWFwKChzZXApID0+IHtcbiAgICAgICAgaWYgKHNlcCA9PT0gXCJjb21tYVwiIHx8IHNlcCA9PT0gXCJcXFxcLFwiKSB7XG4gICAgICAgICAgICByZXR1cm4gXCIsXCI7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlcDtcbiAgICB9KTtcbiAgICAvLyBjb25zb2xlLmxvZyhtdWx0aXBsZVZhbHVlU3BhcmF0b3IpO1xuXG4gICAgLy8geERhdGFzZXRcbiAgICBsZXQgcmV0WERhdGFzZXQgPSBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcbiAgICAgICAgXCJ4RGF0YXNldFwiLFxuICAgICAgICB5YW1sLnhEYXRhc2V0LFxuICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgLTEsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0WERhdGFzZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFhEYXRhc2V0OyAvLyBlcnJvck1lc3NhZ2VcbiAgICB9XG4gICAgbGV0IHhEYXRhc2V0ID0gcmV0WERhdGFzZXQubWFwKChkOiBudW1iZXIpID0+IHtcbiAgICAgICAgaWYgKGQgPCAwIHx8IGQgPj0gbnVtRGF0YXNldHMpIHtcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZDtcbiAgICB9KTtcbiAgICAvLyBhc3NpZ24gdGhpcyB0byByZW5kZXJJbmZvIGxhdGVyXG5cbiAgICAvLyBDcmVhdGUgcXVlcmllc1xuICAgIGxldCBxdWVyaWVzOiBBcnJheTxRdWVyeT4gPSBbXTtcbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBzZWFyY2hUYXJnZXQubGVuZ3RoOyBpbmQrKykge1xuICAgICAgICBsZXQgcXVlcnkgPSBuZXcgUXVlcnkoXG4gICAgICAgICAgICBxdWVyaWVzLmxlbmd0aCxcbiAgICAgICAgICAgIHNlYXJjaFR5cGVbaW5kXSxcbiAgICAgICAgICAgIHNlYXJjaFRhcmdldFtpbmRdXG4gICAgICAgICk7XG4gICAgICAgIHF1ZXJ5LnNldFNlcGFyYXRvcihtdWx0aXBsZVZhbHVlU3BhcmF0b3JbaW5kXSk7XG4gICAgICAgIGlmICh4RGF0YXNldC5pbmNsdWRlcyhpbmQpKSBxdWVyeS51c2VkQXNYRGF0YXNldCA9IHRydWU7XG4gICAgICAgIHF1ZXJpZXMucHVzaChxdWVyeSk7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHF1ZXJpZXMpO1xuXG4gICAgLy8gQ3JlYXRlIGdyYXJwaCBpbmZvXG4gICAgbGV0IHJlbmRlckluZm8gPSBuZXcgUmVuZGVySW5mbyhxdWVyaWVzKTtcbiAgICBsZXQga2V5c09mUmVuZGVySW5mbyA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHJlbmRlckluZm8pO1xuICAgIGxldCBhZGRpdGlvbmFsQWxsb3dlZEtleXMgPSBbXCJzZWFyY2hUeXBlXCIsIFwic2VhcmNoVGFyZ2V0XCIsIFwic2VwYXJhdG9yXCJdO1xuICAgIC8vIGNvbnNvbGUubG9nKGtleXNPZlJlbmRlckluZm8pO1xuICAgIGxldCB5YW1sTGluZUtleXMgPSBbXTtcbiAgICBsZXQgeWFtbEJhcktleXMgPSBbXTtcbiAgICBsZXQgeWFtbFBpZUtleXMgPSBbXTtcbiAgICBsZXQgeWFtbFN1bW1hcnlLZXlzID0gW107XG4gICAgbGV0IHlhbWxNb250aEtleXMgPSBbXTtcbiAgICBsZXQgeWFtbEhlYXRtYXBLZXlzID0gW107XG4gICAgbGV0IHlhbWxCdWxsZXRLZXlzID0gW107XG4gICAgZm9yIChsZXQga2V5IG9mIGtleXNGb3VuZEluWUFNTCkge1xuICAgICAgICBpZiAoL15saW5lWzAtOV0qJC8udGVzdChrZXkpKSB7XG4gICAgICAgICAgICB5YW1sTGluZUtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoL15iYXJbMC05XSokLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICAgIHlhbWxCYXJLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxBbGxvd2VkS2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKC9ecGllWzAtOV0qJC8udGVzdChrZXkpKSB7XG4gICAgICAgICAgICB5YW1sUGllS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZEtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgvXnN1bW1hcnlbMC05XSokLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICAgIHlhbWxTdW1tYXJ5S2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZEtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgvXmJ1bGxldFswLTldKiQvLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeWFtbEJ1bGxldEtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoL15tb250aFswLTldKiQvLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgeWFtbE1vbnRoS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZEtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgvXmhlYXRtYXBbMC05XSokLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICAgIHlhbWxIZWF0bWFwS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZEtleXMucHVzaChrZXkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEN1c3RvbSBkYXRhc2V0XG4gICAgbGV0IHlhbWxDdXN0b21EYXRhc2V0S2V5cyA9IFtdO1xuICAgIGZvciAobGV0IGtleSBvZiBrZXlzRm91bmRJbllBTUwpIHtcbiAgICAgICAgaWYgKC9eZGF0YXNldFswLTldKiQvLnRlc3Qoa2V5KSkge1xuICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIGlkIG9mIGN1c3RvbSBkYXRhc2V0IGlzIG5vdCBkdXBsaWNhdGVkXG4gICAgICAgICAgICBsZXQgY3VzdG9tRGF0YXNldElkID0gLTE7XG4gICAgICAgICAgICBsZXQgc3RyQ3VzdG9tRGF0YXNldElkID0ga2V5LnJlcGxhY2UoXCJkYXRhc2V0XCIsIFwiXCIpO1xuICAgICAgICAgICAgaWYgKHN0ckN1c3RvbURhdGFzZXRJZCA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgIGN1c3RvbURhdGFzZXRJZCA9IDA7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN1c3RvbURhdGFzZXRJZCA9IHBhcnNlRmxvYXQoc3RyQ3VzdG9tRGF0YXNldElkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHF1ZXJpZXMuc29tZSgocSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcS5nZXRJZCgpID09PSBjdXN0b21EYXRhc2V0SWQ7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiRHVwbGljYXRlZCBkYXRhc2V0IGlkIGZvciBrZXkgJ1wiICsga2V5ICsgXCInXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgeWFtbEN1c3RvbURhdGFzZXRLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxBbGxvd2VkS2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coYWRkaXRpb25hbEFsbG93ZWRLZXlzKTtcbiAgICBmb3IgKGxldCBrZXkgb2Yga2V5c0ZvdW5kSW5ZQU1MKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFrZXlzT2ZSZW5kZXJJbmZvLmluY2x1ZGVzKGtleSkgJiZcbiAgICAgICAgICAgICFhZGRpdGlvbmFsQWxsb3dlZEtleXMuaW5jbHVkZXMoa2V5KVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiJ1wiICsga2V5ICsgXCInIGlzIG5vdCBhbiBhdmFpbGFibGUga2V5XCI7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHRvdGFsTnVtT3V0cHV0cyA9XG4gICAgICAgIHlhbWxMaW5lS2V5cy5sZW5ndGggK1xuICAgICAgICB5YW1sQmFyS2V5cy5sZW5ndGggK1xuICAgICAgICB5YW1sUGllS2V5cy5sZW5ndGggK1xuICAgICAgICB5YW1sU3VtbWFyeUtleXMubGVuZ3RoICtcbiAgICAgICAgeWFtbEJ1bGxldEtleXMubGVuZ3RoICtcbiAgICAgICAgeWFtbE1vbnRoS2V5cy5sZW5ndGggK1xuICAgICAgICB5YW1sSGVhdG1hcEtleXMubGVuZ3RoO1xuICAgIGlmICh0b3RhbE51bU91dHB1dHMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFwiTm8gb3V0cHV0IHBhcmFtZXRlciBwcm92aWRlZCwgcGxlYXNlIHBsYWNlIGxpbmUsIGJhciwgcGllLCBtb250aCwgYnVsbGV0LCBvciBzdW1tYXJ5LlwiO1xuICAgIH1cblxuICAgIC8vIFJvb3QgZm9sZGVyIHRvIHNlYXJjaFxuICAgIHJlbmRlckluZm8uZm9sZGVyID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICB5YW1sPy5mb2xkZXIsXG4gICAgICAgIHBsdWdpbi5zZXR0aW5ncy5mb2xkZXJcbiAgICApO1xuICAgIGlmIChyZW5kZXJJbmZvLmZvbGRlci50cmltKCkgPT09IFwiXCIpIHtcbiAgICAgICAgcmVuZGVySW5mby5mb2xkZXIgPSBwbHVnaW4uc2V0dGluZ3MuZm9sZGVyO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlckluZm8gZm9sZGVyOiBcIiArIHJlbmRlckluZm8uZm9sZGVyKTtcblxuICAgIGxldCBhYnN0cmFjdEZvbGRlciA9IHBsdWdpbi5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKFxuICAgICAgICBub3JtYWxpemVQYXRoKHJlbmRlckluZm8uZm9sZGVyKVxuICAgICk7XG4gICAgaWYgKCFhYnN0cmFjdEZvbGRlciB8fCAhKGFic3RyYWN0Rm9sZGVyIGluc3RhbmNlb2YgVEZvbGRlcikpIHtcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiRm9sZGVyICdcIiArIHJlbmRlckluZm8uZm9sZGVyICsgXCInIGRvZXNuJ3QgZXhpc3RcIjtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICB9XG5cbiAgICAvLyBmaWxlXG4gICAgaWYgKHR5cGVvZiB5YW1sLmZpbGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbGV0IHJldEZpbGVzID0gZ2V0U3RyaW5nQXJyYXkoXCJmaWxlXCIsIHlhbWwuZmlsZSk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0RmlsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRGaWxlczsgLy8gZXJyb3IgbWVzc2FnZVxuICAgICAgICB9XG4gICAgICAgIHJlbmRlckluZm8uZmlsZSA9IHJldEZpbGVzO1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmZpbGUpO1xuXG4gICAgLy8gc3BlY2lmaWVkRmlsZXNPbmx5XG4gICAgaWYgKHR5cGVvZiB5YW1sLnNwZWNpZmllZEZpbGVzT25seSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgcmVuZGVySW5mby5zcGVjaWZpZWRGaWxlc09ubHkgPSB5YW1sLnNwZWNpZmllZEZpbGVzT25seTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5zcGVjaWZpZWRGaWxlc09ubHkpO1xuXG4gICAgLy8gZmlsZUNvbnRhaW5zTGlua2VkRmlsZXNcbiAgICBpZiAodHlwZW9mIHlhbWwuZmlsZUNvbnRhaW5zTGlua2VkRmlsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgbGV0IHJldEZpbGVzID0gZ2V0U3RyaW5nQXJyYXkoXG4gICAgICAgICAgICBcImZpbGVDb250YWluc0xpbmtlZEZpbGVzXCIsXG4gICAgICAgICAgICB5YW1sLmZpbGVDb250YWluc0xpbmtlZEZpbGVzXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0RmlsZXMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRGaWxlcztcbiAgICAgICAgfVxuICAgICAgICByZW5kZXJJbmZvLmZpbGVDb250YWluc0xpbmtlZEZpbGVzID0gcmV0RmlsZXM7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uZmlsZUNvbnRhaW5zTGlua2VkRmlsZXMpO1xuXG4gICAgLy8gZmlsZU11bHRpcGxpZXJBZnRlckxpbmtcbiAgICByZW5kZXJJbmZvLmZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICB5YW1sPy5maWxlTXVsdGlwbGllckFmdGVyTGluayxcbiAgICAgICAgcmVuZGVySW5mby5maWxlTXVsdGlwbGllckFmdGVyTGlua1xuICAgICk7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5maWxlTXVsdGlwbGllckFmdGVyTGluayk7XG5cbiAgICAvLyBEYXRlIGZvcm1hdFxuICAgIGNvbnN0IGRhdGVGb3JtYXQgPSB5YW1sLmRhdGVGb3JtYXQ7XG4gICAgLy8/PyBub3Qgc3VyZSB3aHkgSSBuZWVkIHRoaXMgdG8gbWFrZSBpdCB3b3JrcyxcbiAgICAvLyB3aXRob3V0IHRoYXQsIHRoZSBhc3NpZ25lZCB0aGUgcmVuZGVySW5mby5kYXRlRm9ybWF0IHdpbGwgYmVjb21lIHVuZGVmaW5lZFxuICAgIGlmICh0eXBlb2YgeWFtbC5kYXRlRm9ybWF0ID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICh5YW1sLmRhdGVGb3JtYXQgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdCA9IHBsdWdpbi5zZXR0aW5ncy5kYXRlRm9ybWF0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdCA9IHBsdWdpbi5zZXR0aW5ncy5kYXRlRm9ybWF0O1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlckluZm8gZGF0ZUZvcm1hdDogXCIgKyByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xuXG4gICAgLy8gRGF0ZSBmb3JtYXQgcHJlZml4XG4gICAgcmVuZGVySW5mby5kYXRlRm9ybWF0UHJlZml4ID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICB5YW1sPy5kYXRlRm9ybWF0UHJlZml4LFxuICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRQcmVmaXhcbiAgICApO1xuXG4gICAgLy8gRGF0ZSBmcm9tYXQgc3VmZml4XG4gICAgcmVuZGVySW5mby5kYXRlRm9ybWF0U3VmZml4ID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICB5YW1sPy5kYXRlRm9ybWF0U3VmZml4LFxuICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRTdWZmaXhcbiAgICApO1xuXG4gICAgLy8gc3RhcnREYXRlLCBlbmREYXRlXG4gICAgLy8gY29uc29sZS5sb2coXCJQYXJzaW5nIHN0YXJ0RGF0ZVwiKTtcbiAgICBpZiAodHlwZW9mIHlhbWwuc3RhcnREYXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICgvXihbXFwtXT9bMC05XStbXFwuXVswLTldK3xbXFwtXT9bMC05XSspbSQvLnRlc3QoeWFtbC5zdGFydERhdGUpKSB7XG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgICAgICBcIidtJyBmb3IgJ21pbnV0ZScgaXMgdG9vIHNtYWxsIGZvciBwYXJhbWV0ZXIgc3RhcnREYXRlLCBwbGVhc2UgdXNlICdkJyBmb3IgJ2RheScgb3IgJ00nIGZvciBtb250aFwiO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgc3RyU3RhcnREYXRlID0gaGVscGVyLmdldERhdGVTdHJpbmdGcm9tSW5wdXRTdHJpbmcoXG4gICAgICAgICAgICB5YW1sLnN0YXJ0RGF0ZSxcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFByZWZpeCxcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFN1ZmZpeFxuICAgICAgICApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhzdHJTdGFydERhdGUpO1xuXG4gICAgICAgIC8vIHJlbGF0aXZlIGRhdGVcbiAgICAgICAgbGV0IHN0YXJ0RGF0ZSA9IG51bGw7XG4gICAgICAgIGxldCBpc1N0YXJ0RGF0ZVZhbGlkID0gZmFsc2U7XG4gICAgICAgIHN0YXJ0RGF0ZSA9IGhlbHBlci5nZXREYXRlQnlEdXJhdGlvblRvVG9kYXkoXG4gICAgICAgICAgICBzdHJTdGFydERhdGUsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coc3RhcnREYXRlKTtcblxuICAgICAgICBpZiAoc3RhcnREYXRlKSB7XG4gICAgICAgICAgICBpc1N0YXJ0RGF0ZVZhbGlkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IGhlbHBlci5zdHJUb0RhdGUoc3RyU3RhcnREYXRlLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgaWYgKHN0YXJ0RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICBpc1N0YXJ0RGF0ZVZhbGlkID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhzdGFydERhdGUpO1xuXG4gICAgICAgIGlmICghaXNTdGFydERhdGVWYWxpZCB8fCBzdGFydERhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgIFwiSW52YWxpZCBzdGFydERhdGUsIHRoZSBmb3JtYXQgb2Ygc3RhcnREYXRlIG1heSBub3QgbWF0Y2ggeW91ciBkYXRlRm9ybWF0IFwiICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXQ7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlckluZm8uc3RhcnREYXRlID0gc3RhcnREYXRlO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKFwiUGFyc2luZyBlbmREYXRlXCIpO1xuICAgIGlmICh0eXBlb2YgeWFtbC5lbmREYXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGlmICgvXihbXFwtXT9bMC05XStbXFwuXVswLTldK3xbXFwtXT9bMC05XSspbSQvLnRlc3QoeWFtbC5lbmREYXRlKSkge1xuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgXCInbScgZm9yICdtaW51dGUnIGlzIHRvbyBzbWFsbCBmb3IgcGFyYW1ldGVyIGVuZERhdGUsIHBsZWFzZSB1c2UgJ2QnIGZvciAnZGF5JyBvciAnTScgZm9yIG1vbnRoXCI7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBzdHJFbmREYXRlID0gaGVscGVyLmdldERhdGVTdHJpbmdGcm9tSW5wdXRTdHJpbmcoXG4gICAgICAgICAgICB5YW1sLmVuZERhdGUsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRQcmVmaXgsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRTdWZmaXhcbiAgICAgICAgKTtcblxuICAgICAgICBsZXQgZW5kRGF0ZSA9IG51bGw7XG4gICAgICAgIGxldCBpc0VuZERhdGVWYWxpZCA9IGZhbHNlO1xuICAgICAgICBlbmREYXRlID0gaGVscGVyLmdldERhdGVCeUR1cmF0aW9uVG9Ub2RheShcbiAgICAgICAgICAgIHN0ckVuZERhdGUsXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGVuZERhdGUpIHtcbiAgICAgICAgICAgIGlzRW5kRGF0ZVZhbGlkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVuZERhdGUgPSBoZWxwZXIuc3RyVG9EYXRlKHN0ckVuZERhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICBpZiAoZW5kRGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICBpc0VuZERhdGVWYWxpZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coZW5kRGF0ZSk7XG5cbiAgICAgICAgaWYgKCFpc0VuZERhdGVWYWxpZCB8fCBlbmREYXRlID09PSBudWxsKSB7XG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgICAgICBcIkludmFsaWQgZW5kRGF0ZSwgdGhlIGZvcm1hdCBvZiBlbmREYXRlIG1heSBub3QgbWF0Y2ggeW91ciBkYXRlRm9ybWF0IFwiICtcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXQ7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG4gICAgICAgIHJlbmRlckluZm8uZW5kRGF0ZSA9IGVuZERhdGU7XG4gICAgfVxuICAgIGlmIChcbiAgICAgICAgcmVuZGVySW5mby5zdGFydERhdGUgIT09IG51bGwgJiZcbiAgICAgICAgcmVuZGVySW5mby5zdGFydERhdGUuaXNWYWxpZCgpICYmXG4gICAgICAgIHJlbmRlckluZm8uZW5kRGF0ZSAhPT0gbnVsbCAmJlxuICAgICAgICByZW5kZXJJbmZvLmVuZERhdGUuaXNWYWxpZCgpXG4gICAgKSB7XG4gICAgICAgIC8vIE1ha2Ugc3VyZSBlbmREYXRlID4gc3RhcnREYXRlXG4gICAgICAgIGlmIChyZW5kZXJJbmZvLmVuZERhdGUgPCByZW5kZXJJbmZvLnN0YXJ0RGF0ZSkge1xuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgXCJJbnZhbGlkIGRhdGUgcmFuZ2UgKHN0YXJ0RGF0ZSBsYXJnZXIgdGhhbiBlbmREYXRlKVwiO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnN0YXJ0RGF0ZSk7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5lbmREYXRlKTtcblxuICAgIC8vIHhEYXRhc2V0XG4gICAgcmVuZGVySW5mby54RGF0YXNldCA9IHhEYXRhc2V0O1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ueERhdGFzZXQpO1xuXG4gICAgLy8gRGF0YXNldCBuYW1lIChuZWVkIHhEYXRhc2V0IHRvIHNldCBkZWZhdWx0IG5hbWUpXG4gICAgbGV0IHJldERhdGFzZXROYW1lID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwiZGF0YXNldE5hbWVcIixcbiAgICAgICAgeWFtbC5kYXRhc2V0TmFtZSxcbiAgICAgICAgbnVtRGF0YXNldHMsXG4gICAgICAgIFwidW50aXRsZWRcIixcbiAgICAgICAgbnVsbCxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXREYXRhc2V0TmFtZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0RGF0YXNldE5hbWU7IC8vIGVycm9yTWVzc2FnZVxuICAgIH1cbiAgICAvLyByZW5hbWUgdW50aXRsZWRcbiAgICBsZXQgaW5kVW50aXRsZWQgPSAwO1xuICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHJldERhdGFzZXROYW1lLmxlbmd0aDsgaW5kKyspIHtcbiAgICAgICAgaWYgKHJlbmRlckluZm8ueERhdGFzZXQuaW5jbHVkZXMoaW5kKSkgY29udGludWU7XG4gICAgICAgIGlmIChyZXREYXRhc2V0TmFtZVtpbmRdID09PSBcInVudGl0bGVkXCIpIHtcbiAgICAgICAgICAgIHJldERhdGFzZXROYW1lW2luZF0gPSBcInVudGl0bGVkXCIgKyBpbmRVbnRpdGxlZC50b1N0cmluZygpO1xuICAgICAgICAgICAgaW5kVW50aXRsZWQrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDaGVjayBkdXBsaWNhdGVkIG5hbWVzXG4gICAgaWYgKG5ldyBTZXQocmV0RGF0YXNldE5hbWUpLnNpemUgPT09IHJldERhdGFzZXROYW1lLmxlbmd0aCkge1xuICAgICAgICByZW5kZXJJbmZvLmRhdGFzZXROYW1lID0gcmV0RGF0YXNldE5hbWU7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiTm90IGVub3VnaCBkYXRhc2V0IG5hbWVzIG9yIGR1cGxpY2F0ZWQgbmFtZXNcIjtcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5kYXRhc2V0TmFtZSk7XG5cbiAgICAvLyBjb25zdFZhbHVlXG4gICAgbGV0IHJldENvbnN0VmFsdWUgPSBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcbiAgICAgICAgXCJjb25zdFZhbHVlXCIsXG4gICAgICAgIHlhbWwuY29uc3RWYWx1ZSxcbiAgICAgICAgbnVtRGF0YXNldHMsXG4gICAgICAgIDEuMCxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRDb25zdFZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRDb25zdFZhbHVlOyAvLyBlcnJvck1lc3NhZ2VcbiAgICB9XG4gICAgcmVuZGVySW5mby5jb25zdFZhbHVlID0gcmV0Q29uc3RWYWx1ZTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmNvbnN0VmFsdWUpO1xuXG4gICAgLy8gaWdub3JlQXR0YWNoZWRWYWx1ZVxuICAgIGxldCByZXRJZ25vcmVBdHRhY2hlZFZhbHVlID0gZ2V0Qm9vbEFycmF5RnJvbUlucHV0KFxuICAgICAgICBcImlnbm9yZUF0dGFjaGVkVmFsdWVcIixcbiAgICAgICAgeWFtbC5pZ25vcmVBdHRhY2hlZFZhbHVlLFxuICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0SWdub3JlQXR0YWNoZWRWYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0SWdub3JlQXR0YWNoZWRWYWx1ZTtcbiAgICB9XG4gICAgcmVuZGVySW5mby5pZ25vcmVBdHRhY2hlZFZhbHVlID0gcmV0SWdub3JlQXR0YWNoZWRWYWx1ZTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmlnbm9yZUF0dGFjaGVkVmFsdWUpO1xuXG4gICAgLy8gaWdub3JlWmVyb1ZhbHVlXG4gICAgbGV0IHJldElnbm9yZVplcm9WYWx1ZSA9IGdldEJvb2xBcnJheUZyb21JbnB1dChcbiAgICAgICAgXCJpZ25vcmVaZXJvVmFsdWVcIixcbiAgICAgICAgeWFtbC5pZ25vcmVaZXJvVmFsdWUsXG4gICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRJZ25vcmVaZXJvVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldElnbm9yZVplcm9WYWx1ZTtcbiAgICB9XG4gICAgcmVuZGVySW5mby5pZ25vcmVaZXJvVmFsdWUgPSByZXRJZ25vcmVaZXJvVmFsdWU7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5pZ25vcmVBdHRhY2hlZFZhbHVlKTtcblxuICAgIC8vIGFjY3VtXG4gICAgbGV0IHJldEFjY3VtID0gZ2V0Qm9vbEFycmF5RnJvbUlucHV0KFxuICAgICAgICBcImFjY3VtXCIsXG4gICAgICAgIHlhbWwuYWNjdW0sXG4gICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICBmYWxzZSxcbiAgICAgICAgdHJ1ZVxuICAgICk7XG4gICAgaWYgKHR5cGVvZiByZXRBY2N1bSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0QWNjdW07XG4gICAgfVxuICAgIHJlbmRlckluZm8uYWNjdW0gPSByZXRBY2N1bTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmFjY3VtKTtcblxuICAgIC8vIHN0YWNrXG4gICAgaWYgKHR5cGVvZiB5YW1sLnN0YWNrID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICByZW5kZXJJbmZvLnN0YWNrID0geWFtbC5zdGFjaztcbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5zdGFjayk7XG5cbiAgICAvLyBwZW5hbHR5XG4gICAgbGV0IHJldFBlbmFsdHkgPSBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcbiAgICAgICAgXCJwZW5hbHR5XCIsXG4gICAgICAgIHlhbWwucGVuYWx0eSxcbiAgICAgICAgbnVtRGF0YXNldHMsXG4gICAgICAgIG51bGwsXG4gICAgICAgIHRydWVcbiAgICApO1xuICAgIGlmICh0eXBlb2YgcmV0UGVuYWx0eSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0UGVuYWx0eTtcbiAgICB9XG4gICAgcmVuZGVySW5mby5wZW5hbHR5ID0gcmV0UGVuYWx0eTtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnBlbmFsdHkpO1xuXG4gICAgLy8gdmFsdWVTaGlmdFxuICAgIGxldCByZXRWYWx1ZVNoaWZ0ID0gZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgIFwidmFsdWVTaGlmdFwiLFxuICAgICAgICB5YW1sLnZhbHVlU2hpZnQsXG4gICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICAwLFxuICAgICAgICB0cnVlXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHJldFZhbHVlU2hpZnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIHJldFZhbHVlU2hpZnQ7XG4gICAgfVxuICAgIHJlbmRlckluZm8udmFsdWVTaGlmdCA9IHJldFZhbHVlU2hpZnQ7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby52YWx1ZVNoaWZ0KTtcblxuICAgIC8vIHNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhblxuICAgIGxldCByZXRTaGlmdE9ubHlWYWx1ZUxhcmdlclRoYW4gPSBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcbiAgICAgICAgXCJzaGlmdE9ubHlWYWx1ZUxhcmdlclRoYW5cIixcbiAgICAgICAgeWFtbC5zaGlmdE9ubHlWYWx1ZUxhcmdlclRoYW4sXG4gICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICBudWxsLFxuICAgICAgICB0cnVlXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHJldFNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gcmV0U2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuO1xuICAgIH1cbiAgICByZW5kZXJJbmZvLnNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbiA9IHJldFNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbjtcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbik7XG5cbiAgICAvLyB0ZXh0VmFsdWVNYXBcbiAgICBpZiAodHlwZW9mIHlhbWwudGV4dFZhbHVlTWFwICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGxldCBrZXlzID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoeWFtbC50ZXh0VmFsdWVNYXApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyh0ZXh0cyk7XG4gICAgICAgIGZvciAobGV0IGtleSBvZiBrZXlzKSB7XG4gICAgICAgICAgICBsZXQgdGV4dCA9IGtleS50cmltKCk7XG4gICAgICAgICAgICByZW5kZXJJbmZvLnRleHRWYWx1ZU1hcFt0ZXh0XSA9IHlhbWwudGV4dFZhbHVlTWFwW3RleHRdO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8udGV4dFZhbHVlTWFwKTtcblxuICAgIC8vIGZpeGVkU2NhbGVcbiAgICBpZiAodHlwZW9mIHlhbWwuZml4ZWRTY2FsZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZW5kZXJJbmZvLmZpeGVkU2NhbGUgPSB5YW1sLmZpeGVkU2NhbGU7XG4gICAgfVxuXG4gICAgLy8gZml0UGFuZWxXaWR0aFxuICAgIGlmICh0eXBlb2YgeWFtbC5maXRQYW5lbFdpZHRoID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICByZW5kZXJJbmZvLmZpdFBhbmVsV2lkdGggPSB5YW1sLmZpdFBhbmVsV2lkdGg7XG4gICAgfVxuXG4gICAgLy8gYXNwZWN0UmF0aW9cbiAgICBpZiAodHlwZW9mIHlhbWwuYXNwZWN0UmF0aW8gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgLy8geWFtbC5maXRQYW5lbFdpZHRoXG4gICAgICAgIGxldCByYXRpb1JlZ0V4ID0gLyhbMC05XSopOihbMC05XSopLztcbiAgICAgICAgbGV0IHBhcnRzID0geWFtbC5hc3BlY3RSYXRpby5tYXRjaChyYXRpb1JlZ0V4KTtcbiAgICAgICAgcGFydHMuc2hpZnQoKTtcbiAgICAgICAgcGFydHMgPSBwYXJ0cy5tYXAoKGk6IHN0cmluZyk9PnBhcnNlSW50KGksMTApKTtcbiAgICAgICAgaWYgKHBhcnRzLmxlbmd0aD09Mikge1xuICAgICAgICAgICAgcmVuZGVySW5mby5hc3BlY3RSYXRpbyA9IG5ldyBBc3BlY3RSYXRpbyhwYXJ0c1swXSwgcGFydHNbMV0pO1xuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUgPSByZW5kZXJJbmZvLmFzcGVjdFJhdGlvLnJlY2FsY3VsYXRlU2l6ZShyZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIG1hcmdpblxuICAgIGxldCByZXRNYXJnaW4gPSBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcIm1hcmdpblwiLCB5YW1sLm1hcmdpbiwgNCwgMTAsIHRydWUpO1xuICAgIGlmICh0eXBlb2YgcmV0TWFyZ2luID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiByZXRNYXJnaW47IC8vIGVycm9yTWVzc2FnZVxuICAgIH1cbiAgICBpZiAocmV0TWFyZ2luLmxlbmd0aCA+IDQpIHtcbiAgICAgICAgcmV0dXJuIFwibWFyZ2luIGFjY2VwdHMgbm90IG1vcmUgdGhhbiBmb3VyIHZhbHVlcyBmb3IgdG9wLCByaWdodCwgYm90dG9tLCBhbmQgbGVmdCBtYXJnaW5zLlwiO1xuICAgIH1cbiAgICByZW5kZXJJbmZvLm1hcmdpbiA9IG5ldyBNYXJnaW4oXG4gICAgICAgIHJldE1hcmdpblswXSxcbiAgICAgICAgcmV0TWFyZ2luWzFdLFxuICAgICAgICByZXRNYXJnaW5bMl0sXG4gICAgICAgIHJldE1hcmdpblszXVxuICAgICk7XG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5tYXJnaW4pO1xuXG4gICAgLy8gY3VzdG9tRGF0YXNldCByZWxhdGVkIHBhcmFtZXRlcnNcbiAgICBmb3IgKGxldCBkYXRhc2V0S2V5IG9mIHlhbWxDdXN0b21EYXRhc2V0S2V5cykge1xuICAgICAgICBsZXQgY3VzdG9tRGF0YXNldCA9IG5ldyBDdXN0b21EYXRhc2V0SW5mbygpO1xuICAgICAgICBsZXQgeWFtbEN1c3RvbURhdGFzZXQgPSB5YW1sW2RhdGFzZXRLZXldO1xuXG4gICAgICAgIGxldCBrZXlzT2ZDdXN0b21EYXRhc2V0SW5mbyA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKGN1c3RvbURhdGFzZXQpO1xuICAgICAgICBsZXQga2V5c0ZvdW5kSW5ZQU1MID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoeWFtbEN1c3RvbURhdGFzZXQpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzT2ZDdXN0b21EYXRhc2V0SW5mbyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNGb3VuZEluWUFNTCk7XG4gICAgICAgIGZvciAobGV0IGtleSBvZiBrZXlzRm91bmRJbllBTUwpIHtcbiAgICAgICAgICAgIGlmICgha2V5c09mQ3VzdG9tRGF0YXNldEluZm8uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiJ1wiICsga2V5ICsgXCInIGlzIG5vdCBhbiBhdmFpbGFibGUga2V5XCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlkXG4gICAgICAgIGxldCBjdXN0b21EYXRhc2V0SWQgPSAtMTtcbiAgICAgICAgbGV0IHN0ckN1c3RvbURhdGFzZXRJZCA9IGRhdGFzZXRLZXkucmVwbGFjZShcImRhdGFzZXRcIiwgXCJcIik7XG4gICAgICAgIGlmIChzdHJDdXN0b21EYXRhc2V0SWQgPT09IFwiXCIpIHtcbiAgICAgICAgICAgIGN1c3RvbURhdGFzZXRJZCA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXN0b21EYXRhc2V0SWQgPSBwYXJzZUZsb2F0KHN0ckN1c3RvbURhdGFzZXRJZCk7XG4gICAgICAgIH1cbiAgICAgICAgY3VzdG9tRGF0YXNldC5pZCA9IGN1c3RvbURhdGFzZXRJZDtcblxuICAgICAgICAvLyBuYW1lXG4gICAgICAgIGN1c3RvbURhdGFzZXQubmFtZSA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxDdXN0b21EYXRhc2V0Py5uYW1lLFxuICAgICAgICAgICAgY3VzdG9tRGF0YXNldC5uYW1lXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8geERhdGFcbiAgICAgICAgbGV0IHJldFhEYXRhID0gZ2V0U3RyaW5nQXJyYXkoXCJ4RGF0YVwiLCB5YW1sQ3VzdG9tRGF0YXNldD8ueERhdGEpO1xuICAgICAgICBpZiAodHlwZW9mIHJldFhEYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0WERhdGE7XG4gICAgICAgIH1cbiAgICAgICAgY3VzdG9tRGF0YXNldC54RGF0YSA9IHJldFhEYXRhO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhjdXN0b21EYXRhc2V0LnhEYXRhKTtcbiAgICAgICAgbGV0IG51bVhEYXRhID0gY3VzdG9tRGF0YXNldC54RGF0YS5sZW5ndGg7XG5cbiAgICAgICAgLy8geURhdGFcbiAgICAgICAgbGV0IHJldFlEYXRhID0gZ2V0U3RyaW5nQXJyYXkoXCJ5RGF0YVwiLCB5YW1sQ3VzdG9tRGF0YXNldD8ueURhdGEpO1xuICAgICAgICBpZiAodHlwZW9mIHJldFlEYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0WURhdGE7XG4gICAgICAgIH1cbiAgICAgICAgY3VzdG9tRGF0YXNldC55RGF0YSA9IHJldFlEYXRhO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhjdXN0b21EYXRhc2V0LnlEYXRhKTtcbiAgICAgICAgaWYgKGN1c3RvbURhdGFzZXQueURhdGEubGVuZ3RoICE9PSBudW1YRGF0YSkge1xuICAgICAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgXCJOdW1iZXIgb2YgZWxlbWVudHMgaW4geERhdGEgYW5kIHlEYXRhIG5vdCBtYXRjaGVkXCI7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVySW5mby5jdXN0b21EYXRhc2V0LnB1c2goY3VzdG9tRGF0YXNldCk7XG4gICAgfSAvLyBjdXN0b21EYXRhc2V0IHJlbGF0ZWQgcGFyYW1ldGVyc1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uY3VzdG9tRGF0YXNldCk7XG5cbiAgICAvLyBsaW5lIHJlbGF0ZWQgcGFyYW1ldGVyc1xuICAgIGZvciAobGV0IGxpbmVLZXkgb2YgeWFtbExpbmVLZXlzKSB7XG4gICAgICAgIGxldCBsaW5lID0gbmV3IExpbmVJbmZvKCk7XG4gICAgICAgIGxldCB5YW1sTGluZSA9IHlhbWxbbGluZUtleV07XG5cbiAgICAgICAgbGV0IGtleXNPZkxpbmVJbmZvID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MobGluZSk7XG4gICAgICAgIGxldCBrZXlzRm91bmRJbllBTUwgPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyh5YW1sTGluZSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNPZkxpbmVJbmZvKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c0ZvdW5kSW5ZQU1MKTtcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXNGb3VuZEluWUFNTCkge1xuICAgICAgICAgICAgaWYgKCFrZXlzT2ZMaW5lSW5mby5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCInXCIgKyBrZXkgKyBcIicgaXMgbm90IGFuIGF2YWlsYWJsZSBrZXlcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJldFBhcnNlQ29tbW9uQ2hhcnRJbmZvID0gcGFyc2VDb21tb25DaGFydEluZm8oeWFtbExpbmUsIGxpbmUpO1xuICAgICAgICBpZiAodHlwZW9mIHJldFBhcnNlQ29tbW9uQ2hhcnRJbmZvID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0UGFyc2VDb21tb25DaGFydEluZm87XG4gICAgICAgIH1cblxuICAgICAgICAvLyBsaW5lQ29sb3JcbiAgICAgICAgbGV0IHJldExpbmVDb2xvciA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJsaW5lQ29sb3JcIixcbiAgICAgICAgICAgIHlhbWxMaW5lPy5saW5lQ29sb3IsXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICB2YWxpZGF0ZUNvbG9yLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAodHlwZW9mIHJldExpbmVDb2xvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldExpbmVDb2xvcjsgLy8gZXJyb3JNZXNzYWdlXG4gICAgICAgIH1cbiAgICAgICAgbGluZS5saW5lQ29sb3IgPSByZXRMaW5lQ29sb3I7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmUubGluZUNvbG9yKTtcblxuICAgICAgICAvLyBsaW5lV2lkdGhcbiAgICAgICAgbGV0IHJldExpbmVXaWR0aCA9IGdldE51bWJlckFycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJsaW5lV2lkdGhcIixcbiAgICAgICAgICAgIHlhbWxMaW5lPy5saW5lV2lkdGgsXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgICAgIDEuNSxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRMaW5lV2lkdGggPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRMaW5lV2lkdGg7IC8vIGVycm9yTWVzc2FnZVxuICAgICAgICB9XG4gICAgICAgIGxpbmUubGluZVdpZHRoID0gcmV0TGluZVdpZHRoO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lLmxpbmVXaWR0aCk7XG5cbiAgICAgICAgLy8gc2hvd0xpbmVcbiAgICAgICAgbGV0IHJldFNob3dMaW5lID0gZ2V0Qm9vbEFycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJzaG93TGluZVwiLFxuICAgICAgICAgICAgeWFtbExpbmU/LnNob3dMaW5lLFxuICAgICAgICAgICAgbnVtRGF0YXNldHMsXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAodHlwZW9mIHJldFNob3dMaW5lID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0U2hvd0xpbmU7XG4gICAgICAgIH1cbiAgICAgICAgbGluZS5zaG93TGluZSA9IHJldFNob3dMaW5lO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lLnNob3dMaW5lKTtcblxuICAgICAgICAvLyBzaG93UG9pbnRcbiAgICAgICAgbGV0IHJldFNob3dQb2ludCA9IGdldEJvb2xBcnJheUZyb21JbnB1dChcbiAgICAgICAgICAgIFwic2hvd1BvaW50XCIsXG4gICAgICAgICAgICB5YW1sTGluZT8uc2hvd1BvaW50LFxuICAgICAgICAgICAgbnVtRGF0YXNldHMsXG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAodHlwZW9mIHJldFNob3dQb2ludCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldFNob3dQb2ludDtcbiAgICAgICAgfVxuICAgICAgICBsaW5lLnNob3dQb2ludCA9IHJldFNob3dQb2ludDtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobGluZS5zaG93UG9pbnQpO1xuXG4gICAgICAgIC8vIHBvaW50Q29sb3JcbiAgICAgICAgbGV0IHJldFBvaW50Q29sb3IgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcbiAgICAgICAgICAgIFwicG9pbnRDb2xvclwiLFxuICAgICAgICAgICAgeWFtbExpbmU/LnBvaW50Q29sb3IsXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgICAgIFwiIzY5YjNhMlwiLFxuICAgICAgICAgICAgdmFsaWRhdGVDb2xvcixcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRQb2ludENvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0UG9pbnRDb2xvcjtcbiAgICAgICAgfVxuICAgICAgICBsaW5lLnBvaW50Q29sb3IgPSByZXRQb2ludENvbG9yO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lLnBvaW50Q29sb3IpO1xuXG4gICAgICAgIC8vIHBvaW50Qm9yZGVyQ29sb3JcbiAgICAgICAgbGV0IHJldFBvaW50Qm9yZGVyQ29sb3IgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcbiAgICAgICAgICAgIFwicG9pbnRCb3JkZXJDb2xvclwiLFxuICAgICAgICAgICAgeWFtbExpbmU/LnBvaW50Qm9yZGVyQ29sb3IsXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgICAgIFwiIzY5YjNhMlwiLFxuICAgICAgICAgICAgdmFsaWRhdGVDb2xvcixcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRQb2ludEJvcmRlckNvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0UG9pbnRCb3JkZXJDb2xvcjtcbiAgICAgICAgfVxuICAgICAgICBsaW5lLnBvaW50Qm9yZGVyQ29sb3IgPSByZXRQb2ludEJvcmRlckNvbG9yO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lLnBvaW50Qm9yZGVyQ29sb3IpO1xuXG4gICAgICAgIC8vIHBvaW50Qm9yZGVyV2lkdGhcbiAgICAgICAgbGV0IHJldFBvaW50Qm9yZGVyV2lkdGggPSBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcbiAgICAgICAgICAgIFwicG9pbnRCb3JkZXJXaWR0aFwiLFxuICAgICAgICAgICAgeWFtbExpbmU/LnBvaW50Qm9yZGVyV2lkdGgsXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgICAgIDAuMCxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRQb2ludEJvcmRlcldpZHRoID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0UG9pbnRCb3JkZXJXaWR0aDsgLy8gZXJyb3JNZXNzYWdlXG4gICAgICAgIH1cbiAgICAgICAgbGluZS5wb2ludEJvcmRlcldpZHRoID0gcmV0UG9pbnRCb3JkZXJXaWR0aDtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobGluZS5wb2ludEJvcmRlcldpZHRoKTtcblxuICAgICAgICAvLyBwb2ludFNpemVcbiAgICAgICAgbGV0IHJldFBvaW50U2l6ZSA9IGdldE51bWJlckFycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJwb2ludFNpemVcIixcbiAgICAgICAgICAgIHlhbWxMaW5lPy5wb2ludFNpemUsXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgICAgIDMuMCxcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRQb2ludFNpemUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRQb2ludFNpemU7IC8vIGVycm9yTWVzc2FnZVxuICAgICAgICB9XG4gICAgICAgIGxpbmUucG9pbnRTaXplID0gcmV0UG9pbnRTaXplO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lLnBvaW50U2l6ZSk7XG5cbiAgICAgICAgLy8gZmlsbEdhcFxuICAgICAgICBsZXQgcmV0RmlsbEdhcCA9IGdldEJvb2xBcnJheUZyb21JbnB1dChcbiAgICAgICAgICAgIFwiZmlsbEdhcFwiLFxuICAgICAgICAgICAgeWFtbExpbmU/LmZpbGxHYXAsXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcbiAgICAgICAgICAgIGZhbHNlLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAodHlwZW9mIHJldEZpbGxHYXAgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRGaWxsR2FwO1xuICAgICAgICB9XG4gICAgICAgIGxpbmUuZmlsbEdhcCA9IHJldEZpbGxHYXA7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmUuZmlsbEdhcCk7XG5cbiAgICAgICAgLy8geUF4aXNMb2NhdGlvblxuICAgICAgICBsZXQgcmV0WUF4aXNMb2NhdGlvbiA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJ5QXhpc0xvY2F0aW9uXCIsXG4gICAgICAgICAgICB5YW1sTGluZT8ueUF4aXNMb2NhdGlvbixcbiAgICAgICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICAgICAgXCJsZWZ0XCIsXG4gICAgICAgICAgICB2YWxpZGF0ZVlBeGlzTG9jYXRpb24sXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0WUF4aXNMb2NhdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldFlBeGlzTG9jYXRpb247IC8vIGVycm9yTWVzc2FnZVxuICAgICAgICB9XG4gICAgICAgIGxpbmUueUF4aXNMb2NhdGlvbiA9IHJldFlBeGlzTG9jYXRpb247XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmUueUF4aXNMb2NhdGlvbik7XG5cbiAgICAgICAgcmVuZGVySW5mby5saW5lLnB1c2gobGluZSk7XG4gICAgfSAvLyBsaW5lIHJlbGF0ZWQgcGFyYW1ldGVyc1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ubGluZSk7XG5cbiAgICAvLyBiYXIgcmVsYXRlZCBwYXJhbWV0ZXJzXG4gICAgZm9yIChsZXQgYmFyS2V5IG9mIHlhbWxCYXJLZXlzKSB7XG4gICAgICAgIGxldCBiYXIgPSBuZXcgQmFySW5mbygpO1xuICAgICAgICBsZXQgeWFtbEJhciA9IHlhbWxbYmFyS2V5XTtcblxuICAgICAgICBsZXQga2V5c09mQmFySW5mbyA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKGJhcik7XG4gICAgICAgIGxldCBrZXlzRm91bmRJbllBTUwgPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyh5YW1sQmFyKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c09mQmFySW5mbyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNGb3VuZEluWUFNTCk7XG4gICAgICAgIGZvciAobGV0IGtleSBvZiBrZXlzRm91bmRJbllBTUwpIHtcbiAgICAgICAgICAgIGlmICgha2V5c09mQmFySW5mby5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCInXCIgKyBrZXkgKyBcIicgaXMgbm90IGFuIGF2YWlsYWJsZSBrZXlcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHJldFBhcnNlQ29tbW9uQ2hhcnRJbmZvID0gcGFyc2VDb21tb25DaGFydEluZm8oeWFtbEJhciwgYmFyKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRQYXJzZUNvbW1vbkNoYXJ0SW5mbyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldFBhcnNlQ29tbW9uQ2hhcnRJbmZvO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYmFyQ29sb3JcbiAgICAgICAgbGV0IHJldEJhckNvbG9yID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXG4gICAgICAgICAgICBcImJhckNvbG9yXCIsXG4gICAgICAgICAgICB5YW1sQmFyPy5iYXJDb2xvcixcbiAgICAgICAgICAgIG51bURhdGFzZXRzLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIHZhbGlkYXRlQ29sb3IsXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0QmFyQ29sb3IgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRCYXJDb2xvcjsgLy8gZXJyb3JNZXNzYWdlXG4gICAgICAgIH1cbiAgICAgICAgYmFyLmJhckNvbG9yID0gcmV0QmFyQ29sb3I7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGJhci5iYXJDb2xvcik7XG5cbiAgICAgICAgLy8geUF4aXNMb2NhdGlvblxuICAgICAgICBsZXQgcmV0WUF4aXNMb2NhdGlvbiA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJ5QXhpc0xvY2F0aW9uXCIsXG4gICAgICAgICAgICB5YW1sQmFyPy55QXhpc0xvY2F0aW9uLFxuICAgICAgICAgICAgbnVtRGF0YXNldHMsXG4gICAgICAgICAgICBcImxlZnRcIixcbiAgICAgICAgICAgIHZhbGlkYXRlWUF4aXNMb2NhdGlvbixcbiAgICAgICAgICAgIHRydWVcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRZQXhpc0xvY2F0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0WUF4aXNMb2NhdGlvbjsgLy8gZXJyb3JNZXNzYWdlXG4gICAgICAgIH1cbiAgICAgICAgYmFyLnlBeGlzTG9jYXRpb24gPSByZXRZQXhpc0xvY2F0aW9uO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhiYXIueUF4aXNMb2NhdGlvbik7XG5cbiAgICAgICAgcmVuZGVySW5mby5iYXIucHVzaChiYXIpO1xuICAgIH0gLy8gYmFyIHJlbGF0ZWQgcGFyYW1ldGVyc1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uYmFyKTtcblxuICAgIC8vIHBpZSByZWxhdGVkIHBhcmFtZXRlcnNcbiAgICBmb3IgKGxldCBwaWVLZXkgb2YgeWFtbFBpZUtleXMpIHtcbiAgICAgICAgbGV0IHBpZSA9IG5ldyBQaWVJbmZvKCk7XG4gICAgICAgIGxldCB5YW1sUGllID0geWFtbFtwaWVLZXldO1xuXG4gICAgICAgIGxldCBrZXlzT2ZQaWVJbmZvID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MocGllKTtcbiAgICAgICAgbGV0IGtleXNGb3VuZEluWUFNTCA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHlhbWxQaWUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzT2ZQaWVJbmZvKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c0ZvdW5kSW5ZQU1MKTtcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXNGb3VuZEluWUFNTCkge1xuICAgICAgICAgICAgaWYgKCFrZXlzT2ZQaWVJbmZvLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIidcIiArIGtleSArIFwiJyBpcyBub3QgYW4gYXZhaWxhYmxlIGtleVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0aXRsZVxuICAgICAgICBwaWUudGl0bGUgPSBnZXRTdHJpbmdGcm9tSW5wdXQoeWFtbFBpZT8udGl0bGUsIHBpZS50aXRsZSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS50aXRsZSk7XG5cbiAgICAgICAgLy8gZGF0YVxuICAgICAgICBsZXQgcmV0RGF0YSA9IGdldFN0cmluZ0FycmF5KFwiZGF0YVwiLCB5YW1sUGllPy5kYXRhKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXREYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0RGF0YTtcbiAgICAgICAgfVxuICAgICAgICBwaWUuZGF0YSA9IHJldERhdGE7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS5kYXRhKTtcbiAgICAgICAgbGV0IG51bURhdGEgPSBwaWUuZGF0YS5sZW5ndGg7XG5cbiAgICAgICAgLy8gZGF0YUNvbG9yXG4gICAgICAgIGxldCByZXREYXRhQ29sb3IgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcbiAgICAgICAgICAgIFwiZGF0YUNvbG9yXCIsXG4gICAgICAgICAgICB5YW1sUGllPy5kYXRhQ29sb3IsXG4gICAgICAgICAgICBudW1EYXRhLFxuICAgICAgICAgICAgbnVsbCxcbiAgICAgICAgICAgIHZhbGlkYXRlQ29sb3IsXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0RGF0YUNvbG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0RGF0YUNvbG9yOyAvLyBlcnJvck1lc3NhZ2VcbiAgICAgICAgfVxuICAgICAgICBwaWUuZGF0YUNvbG9yID0gcmV0RGF0YUNvbG9yO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhwaWUuZGF0YUNvbG9yKTtcblxuICAgICAgICAvLyBkYXRhTmFtZVxuICAgICAgICBsZXQgcmV0RGF0YU5hbWUgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcbiAgICAgICAgICAgIFwiZGF0YU5hbWVcIixcbiAgICAgICAgICAgIHlhbWxQaWU/LmRhdGFOYW1lLFxuICAgICAgICAgICAgbnVtRGF0YSxcbiAgICAgICAgICAgIFwiXCIsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgdHJ1ZVxuICAgICAgICApO1xuICAgICAgICBpZiAodHlwZW9mIHJldERhdGFOYW1lID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0RGF0YU5hbWU7IC8vIGVycm9yTWVzc2FnZVxuICAgICAgICB9XG4gICAgICAgIHBpZS5kYXRhTmFtZSA9IHJldERhdGFOYW1lO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhwaWUuZGF0YU5hbWUpO1xuXG4gICAgICAgIC8vIGxhYmVsXG4gICAgICAgIGxldCByZXRMYWJlbCA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJsYWJlbFwiLFxuICAgICAgICAgICAgeWFtbFBpZT8ubGFiZWwsXG4gICAgICAgICAgICBudW1EYXRhLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0TGFiZWwgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRMYWJlbDsgLy8gZXJyb3JNZXNzYWdlXG4gICAgICAgIH1cbiAgICAgICAgcGllLmxhYmVsID0gcmV0TGFiZWw7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS5sYWJlbCk7XG5cbiAgICAgICAgLy8gaGlkZUxhYmVsTGVzc1RoYW5cbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sUGllPy5oaWRlTGFiZWxMZXNzVGhhbiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgcGllLmhpZGVMYWJlbExlc3NUaGFuID0geWFtbFBpZS5oaWRlTGFiZWxMZXNzVGhhbjtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhwaWUuaGlkZUxhYmVsTGVzc1RoYW4pO1xuXG4gICAgICAgIC8vIGV4dExhYmVsXG4gICAgICAgIGxldCByZXRFeHRMYWJlbCA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxuICAgICAgICAgICAgXCJleHRMYWJlbFwiLFxuICAgICAgICAgICAgeWFtbFBpZT8uZXh0TGFiZWwsXG4gICAgICAgICAgICBudW1EYXRhLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIG51bGwsXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0RXh0TGFiZWwgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXRFeHRMYWJlbDsgLy8gZXJyb3JNZXNzYWdlXG4gICAgICAgIH1cbiAgICAgICAgcGllLmV4dExhYmVsID0gcmV0RXh0TGFiZWw7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS5leHRMYWJlbCk7XG5cbiAgICAgICAgLy8gc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbFxuICAgICAgICBpZiAodHlwZW9mIHlhbWxQaWU/LnNob3dFeHRMYWJlbE9ubHlJZk5vTGFiZWwgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBwaWUuc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbCA9IHlhbWxQaWUuc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbDtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhwaWUuc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbCk7XG5cbiAgICAgICAgLy8gcmF0aW9Jbm5lclJhZGl1c1xuICAgICAgICBpZiAodHlwZW9mIHlhbWxQaWU/LnJhdGlvSW5uZXJSYWRpdXMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHBpZS5yYXRpb0lubmVyUmFkaXVzID0geWFtbFBpZS5yYXRpb0lubmVyUmFkaXVzO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS5yYXRpb0lubmVyUmFkaXVzKTtcblxuICAgICAgICAvLyBzaG93TGVnZW5kXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbFBpZT8uc2hvd0xlZ2VuZCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHBpZS5zaG93TGVnZW5kID0geWFtbFBpZS5zaG93TGVnZW5kO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gbGVnZW5kUG9zaXRpb25cbiAgICAgICAgcGllLmxlZ2VuZFBvc2l0aW9uID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbFBpZT8ubGVnZW5kUG9zaXRpb24sXG4gICAgICAgICAgICBcInJpZ2h0XCJcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBsZWdlbmRPcmllbnRcbiAgICAgICAgbGV0IGRlZmF1bHRMZWdlbmRPcmllbnRhdGlvbiA9IFwiaG9yaXpvbnRhbFwiO1xuICAgICAgICBpZiAocGllLmxlZ2VuZFBvc2l0aW9uID09PSBcInRvcFwiIHx8IHBpZS5sZWdlbmRQb3NpdGlvbiA9PT0gXCJib3R0b21cIikge1xuICAgICAgICAgICAgZGVmYXVsdExlZ2VuZE9yaWVudGF0aW9uID0gXCJob3Jpem9udGFsXCI7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBwaWUubGVnZW5kUG9zaXRpb24gPT09IFwibGVmdFwiIHx8XG4gICAgICAgICAgICBwaWUubGVnZW5kUG9zaXRpb24gPT09IFwicmlnaHRcIlxuICAgICAgICApIHtcbiAgICAgICAgICAgIGRlZmF1bHRMZWdlbmRPcmllbnRhdGlvbiA9IFwidmVydGljYWxcIjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlZmF1bHRMZWdlbmRPcmllbnRhdGlvbiA9IFwiaG9yaXpvbnRhbFwiO1xuICAgICAgICB9XG4gICAgICAgIHBpZS5sZWdlbmRPcmllbnRhdGlvbiA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxQaWU/LmxlZ2VuZE9yaWVudGF0aW9uLFxuICAgICAgICAgICAgZGVmYXVsdExlZ2VuZE9yaWVudGF0aW9uXG4gICAgICAgICk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS5sZWdlbmRQb3NpdGlvbik7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS5sZWdlbmRPcmllbnRhdGlvbik7XG5cbiAgICAgICAgLy8gbGVnZW5kQmdDb2xvclxuICAgICAgICBwaWUubGVnZW5kQmdDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxQaWU/LmxlZ2VuZEJnQ29sb3IsXG4gICAgICAgICAgICBwaWUubGVnZW5kQmdDb2xvclxuICAgICAgICApO1xuXG4gICAgICAgIC8vIGxlZ2VuZEJvcmRlckNvbG9yXG4gICAgICAgIHBpZS5sZWdlbmRCb3JkZXJDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxQaWU/LmxlZ2VuZEJvcmRlckNvbG9yLFxuICAgICAgICAgICAgcGllLmxlZ2VuZEJvcmRlckNvbG9yXG4gICAgICAgICk7XG5cbiAgICAgICAgcmVuZGVySW5mby5waWUucHVzaChwaWUpO1xuICAgIH0gLy8gcGllIHJlbGF0ZWQgcGFyYW1ldGVyc1xuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ucGllKTtcblxuICAgIC8vIHN1bW1hcnkgcmVsYXRlZCBwYXJhbWV0ZXJzXG4gICAgZm9yIChsZXQgc3VtbWFyeUtleSBvZiB5YW1sU3VtbWFyeUtleXMpIHtcbiAgICAgICAgbGV0IHN1bW1hcnkgPSBuZXcgU3VtbWFyeUluZm8oKTtcbiAgICAgICAgbGV0IHlhbWxTdW1tYXJ5ID0geWFtbFtzdW1tYXJ5S2V5XTtcblxuICAgICAgICBsZXQga2V5c09mU3VtbWFyeUluZm8gPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyhzdW1tYXJ5KTtcbiAgICAgICAgbGV0IGtleXNGb3VuZEluWUFNTCA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHlhbWxTdW1tYXJ5KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c09mU3VtbWFyeUluZm8pO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzRm91bmRJbllBTUwpO1xuICAgICAgICBmb3IgKGxldCBrZXkgb2Yga2V5c0ZvdW5kSW5ZQU1MKSB7XG4gICAgICAgICAgICBpZiAoIWtleXNPZlN1bW1hcnlJbmZvLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIidcIiArIGtleSArIFwiJyBpcyBub3QgYW4gYXZhaWxhYmxlIGtleVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyB0ZW1wbGF0ZVxuICAgICAgICBzdW1tYXJ5LnRlbXBsYXRlID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbFN1bW1hcnk/LnRlbXBsYXRlLFxuICAgICAgICAgICAgc3VtbWFyeS50ZW1wbGF0ZVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIHN0eWxlXG4gICAgICAgIHN1bW1hcnkuc3R5bGUgPSBnZXRTdHJpbmdGcm9tSW5wdXQoeWFtbFN1bW1hcnk/LnN0eWxlLCBzdW1tYXJ5LnN0eWxlKTtcblxuICAgICAgICByZW5kZXJJbmZvLnN1bW1hcnkucHVzaChzdW1tYXJ5KTtcbiAgICB9IC8vIHN1bW1hcnkgcmVsYXRlZCBwYXJhbWV0ZXJzXG5cbiAgICAvLyBNb250aCByZWxhdGVkIHBhcmFtZXRlcnNcbiAgICBmb3IgKGxldCBtb250aEtleSBvZiB5YW1sTW9udGhLZXlzKSB7XG4gICAgICAgIGxldCBtb250aCA9IG5ldyBNb250aEluZm8oKTtcbiAgICAgICAgbGV0IHlhbWxNb250aCA9IHlhbWxbbW9udGhLZXldO1xuXG4gICAgICAgIGxldCBrZXlzT2ZNb250aEluZm8gPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyhtb250aCk7XG4gICAgICAgIGxldCBrZXlzRm91bmRJbllBTUwgPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyh5YW1sTW9udGgpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzT2ZTdW1tYXJ5SW5mbyk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNGb3VuZEluWUFNTCk7XG4gICAgICAgIGZvciAobGV0IGtleSBvZiBrZXlzRm91bmRJbllBTUwpIHtcbiAgICAgICAgICAgIGlmICgha2V5c09mTW9udGhJbmZvLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIidcIiArIGtleSArIFwiJyBpcyBub3QgYW4gYXZhaWxhYmxlIGtleVwiO1xuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBtb2RlXG4gICAgICAgIG1vbnRoLm1vZGUgPSBnZXRTdHJpbmdGcm9tSW5wdXQoeWFtbE1vbnRoPy5tb2RlLCBtb250aC5tb2RlKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGgubW9kZSk7XG5cbiAgICAgICAgLy8gZGF0YXNldFxuICAgICAgICBsZXQgcmV0RGF0YXNldCA9IGdldE51bWJlckFycmF5KFwiZGF0YXNldFwiLCB5YW1sTW9udGg/LmRhdGFzZXQpO1xuICAgICAgICBpZiAodHlwZW9mIHJldERhdGFzZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiByZXREYXRhc2V0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChyZXREYXRhc2V0Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgLy8gaW5zZXJ0IHkgZGF0YXNldCBnaXZlblxuICAgICAgICAgICAgZm9yIChsZXQgcSBvZiBxdWVyaWVzKSB7XG4gICAgICAgICAgICAgICAgcmV0RGF0YXNldC5wdXNoKHEuZ2V0SWQoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbW9udGguZGF0YXNldCA9IHJldERhdGFzZXQ7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLmRhdGFzZXQpO1xuICAgICAgICBsZXQgbnVtRGF0YXNldCA9IG1vbnRoLmRhdGFzZXQubGVuZ3RoO1xuXG4gICAgICAgIC8vIHN0YXJ0V2Vla09uXG4gICAgICAgIG1vbnRoLnN0YXJ0V2Vla09uID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbE1vbnRoPy5zdGFydFdlZWtPbixcbiAgICAgICAgICAgIG1vbnRoLnN0YXJ0V2Vla09uXG4gICAgICAgICk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnN0YXJ0V2Vla09uKTtcblxuICAgICAgICAvLyBzaG93Q2lyY2xlXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbE1vbnRoPy5zaG93Q2lyY2xlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgbW9udGguc2hvd0NpcmNsZSA9IHlhbWxNb250aC5zaG93Q2lyY2xlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnNob3dDaXJjbGUpO1xuXG4gICAgICAgIC8vIHRocmVzaG9sZFxuICAgICAgICBsZXQgcmV0VGhyZXNob2xkID0gZ2V0TnVtYmVyQXJyYXkoXCJ0aHJlc2hvbGRcIiwgeWFtbE1vbnRoPy50aHJlc2hvbGQpO1xuICAgICAgICBpZiAodHlwZW9mIHJldFRocmVzaG9sZCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldFRocmVzaG9sZDtcbiAgICAgICAgfVxuICAgICAgICBtb250aC50aHJlc2hvbGQgPSByZXRUaHJlc2hvbGQ7XG4gICAgICAgIGlmIChtb250aC50aHJlc2hvbGQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmREYXRhc2V0ID0gMDsgaW5kRGF0YXNldCA8IG51bURhdGFzZXQ7IGluZERhdGFzZXQrKykge1xuICAgICAgICAgICAgICAgIG1vbnRoLnRocmVzaG9sZC5wdXNoKDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChtb250aC50aHJlc2hvbGQubGVuZ3RoICE9PSBtb250aC5kYXRhc2V0Lmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGgudGhyZXNob2xkKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLmRhdGFzZXQpO1xuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgICAgICBcIlRoZSBudW1iZXIgb2YgaW5wdXRzIG9mIHRocmVzaG9sZCBhbmQgZGF0YXNldCBub3QgbWF0Y2hlZFwiO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC50aHJlc2hvbGQpO1xuXG4gICAgICAgIC8vIHlNaW5cbiAgICAgICAgbGV0IHJldFlNaW4gPSBnZXROdW1iZXJBcnJheShcInlNaW5cIiwgeWFtbE1vbnRoPy55TWluKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRZTWluID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0WU1pbjtcbiAgICAgICAgfVxuICAgICAgICBtb250aC55TWluID0gcmV0WU1pbjtcbiAgICAgICAgaWYgKG1vbnRoLnlNaW4ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmREYXRhc2V0ID0gMDsgaW5kRGF0YXNldCA8IG51bURhdGFzZXQ7IGluZERhdGFzZXQrKykge1xuICAgICAgICAgICAgICAgIG1vbnRoLnlNaW4ucHVzaChudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobW9udGgueU1pbi5sZW5ndGggIT09IG1vbnRoLmRhdGFzZXQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgIFwiVGhlIG51bWJlciBvZiBpbnB1dHMgb2YgeU1pbiBhbmQgZGF0YXNldCBub3QgbWF0Y2hlZFwiO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC55TWluKTtcblxuICAgICAgICAvLyB5TWF4XG4gICAgICAgIGxldCByZXRZTWF4ID0gZ2V0TnVtYmVyQXJyYXkoXCJ5TWF4XCIsIHlhbWxNb250aD8ueU1heCk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0WU1heCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldFlNYXg7XG4gICAgICAgIH1cbiAgICAgICAgbW9udGgueU1heCA9IHJldFlNYXg7XG4gICAgICAgIGlmIChtb250aC55TWF4Lmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaW5kRGF0YXNldCA9IDA7IGluZERhdGFzZXQgPCBudW1EYXRhc2V0OyBpbmREYXRhc2V0KyspIHtcbiAgICAgICAgICAgICAgICBtb250aC55TWF4LnB1c2gobnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1vbnRoLnlNYXgubGVuZ3RoICE9PSBtb250aC5kYXRhc2V0Lmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgICAgICBcIlRoZSBudW1iZXIgb2YgaW5wdXRzIG9mIHlNaW4gYW5kIGRhdGFzZXQgbm90IG1hdGNoZWRcIjtcbiAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGgueU1heCk7XG5cbiAgICAgICAgLy8gY29sb3JcbiAgICAgICAgbW9udGguY29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoeWFtbE1vbnRoPy5jb2xvciwgbW9udGguY29sb3IpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5jb2xvcik7XG5cbiAgICAgICAgLy8gZGltTm90SW5Nb250aFxuICAgICAgICBpZiAodHlwZW9mIHlhbWxNb250aD8uZGltTm90SW5Nb250aCA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIG1vbnRoLmRpbU5vdEluTW9udGggPSB5YW1sTW9udGguZGltTm90SW5Nb250aDtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5kaW1Ob3RJbk1vbnRoKTtcblxuICAgICAgICAvLyBzaG93U3RyZWFrXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbE1vbnRoPy5zaG93U3RyZWFrID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgbW9udGguc2hvd1N0cmVhayA9IHlhbWxNb250aC5zaG93U3RyZWFrO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnNob3dTdHJlYWspO1xuXG4gICAgICAgIC8vIHNob3dUb2RheVJpbmdcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sTW9udGg/LnNob3dUb2RheVJpbmcgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBtb250aC5zaG93VG9kYXlSaW5nID0geWFtbE1vbnRoLnNob3dUb2RheVJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguc2hvd1RvZGF5UmluZyk7XG5cbiAgICAgICAgLy8gc2hvd1NlbGVjdGVkVmFsdWVcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sTW9udGg/LnNob3dTZWxlY3RlZFZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgbW9udGguc2hvd1NlbGVjdGVkVmFsdWUgPSB5YW1sTW9udGguc2hvd1NlbGVjdGVkVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguc2hvd1NlbGVjdGVkVmFsdWUpO1xuXG4gICAgICAgIC8vIHNob3dTZWxlY3RlZFJpbmdcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sTW9udGg/LnNob3dTZWxlY3RlZFJpbmcgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBtb250aC5zaG93U2VsZWN0ZWRSaW5nID0geWFtbE1vbnRoLnNob3dTZWxlY3RlZFJpbmc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguc2hvd1NlbGVjdGVkUmluZyk7XG5cbiAgICAgICAgLy8gY2lyY2xlQ29sb3JcbiAgICAgICAgbW9udGguY2lyY2xlQ29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgICAgICB5YW1sTW9udGg/LmNpcmNsZUNvbG9yLFxuICAgICAgICAgICAgbW9udGguY2lyY2xlQ29sb3JcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguY2lyY2xlQ29sb3IpO1xuXG4gICAgICAgIC8vIGNpcmNsZUNvbG9yQnlWYWx1ZVxuICAgICAgICBpZiAodHlwZW9mIHlhbWxNb250aD8uY2lyY2xlQ29sb3JCeVZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgbW9udGguY2lyY2xlQ29sb3JCeVZhbHVlID0geWFtbE1vbnRoLmNpcmNsZUNvbG9yQnlWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5jaXJjbGVDb2xvckJ5VmFsdWUpO1xuXG4gICAgICAgIC8vIGhlYWRlclllYXJDb2xvclxuICAgICAgICBtb250aC5oZWFkZXJZZWFyQ29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgICAgICB5YW1sTW9udGg/LmhlYWRlclllYXJDb2xvcixcbiAgICAgICAgICAgIG1vbnRoLmhlYWRlclllYXJDb2xvclxuICAgICAgICApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5oZWFkZXJZZWFyQ29sb3IpO1xuXG4gICAgICAgIC8vIGhlYWRlck1vbnRoQ29sb3JcbiAgICAgICAgbW9udGguaGVhZGVyTW9udGhDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxNb250aD8uaGVhZGVyTW9udGhDb2xvcixcbiAgICAgICAgICAgIG1vbnRoLmhlYWRlck1vbnRoQ29sb3JcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguaGVhZGVyTW9udGhDb2xvcik7XG5cbiAgICAgICAgLy8gZGl2aWRpbmdMaW5lQ29sb3JcbiAgICAgICAgbW9udGguZGl2aWRpbmdMaW5lQ29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgICAgICB5YW1sTW9udGg/LmRpdmlkaW5nTGluZUNvbG9yLFxuICAgICAgICAgICAgbW9udGguZGl2aWRpbmdMaW5lQ29sb3JcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguZGl2aWRpbmdMaW5lQ29sb3IpO1xuXG4gICAgICAgIC8vIHRvZGF5UmluZ0NvbG9yXG4gICAgICAgIG1vbnRoLnRvZGF5UmluZ0NvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbE1vbnRoPy50b2RheVJpbmdDb2xvcixcbiAgICAgICAgICAgIG1vbnRoLnRvZGF5UmluZ0NvbG9yXG4gICAgICAgICk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnRvZGF5UmluZ0NvbG9yKTtcblxuICAgICAgICAvLyBzZWxlY3RlZFJpbmdDb2xvclxuICAgICAgICBtb250aC5zZWxlY3RlZFJpbmdDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxNb250aD8uc2VsZWN0ZWRSaW5nQ29sb3IsXG4gICAgICAgICAgICBtb250aC5zZWxlY3RlZFJpbmdDb2xvclxuICAgICAgICApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5zZWxlY3RlZFJpbmdDb2xvcik7XG5cbiAgICAgICAgLy8gaW5pdE1vbnRoXG4gICAgICAgIG1vbnRoLmluaXRNb250aCA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxNb250aD8uaW5pdE1vbnRoLFxuICAgICAgICAgICAgbW9udGguaW5pdE1vbnRoXG4gICAgICAgICk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLmluaXRNb250aCk7XG5cbiAgICAgICAgLy8gc2hvd0Fubm90YXRpb25cbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sTW9udGg/LnNob3dBbm5vdGF0aW9uID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgbW9udGguc2hvd0Fubm90YXRpb24gPSB5YW1sTW9udGguc2hvd0Fubm90YXRpb247XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguc2hvd0Fubm90YXRpb24pO1xuXG4gICAgICAgIC8vIGFubm90YXRpb25cbiAgICAgICAgbGV0IHJldEFubm90YXRpb24gPSBnZXRTdHJpbmdBcnJheShcImFubm90YXRpb25cIiwgeWFtbE1vbnRoPy5hbm5vdGF0aW9uKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRBbm5vdGF0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0QW5ub3RhdGlvbjtcbiAgICAgICAgfVxuICAgICAgICBtb250aC5hbm5vdGF0aW9uID0gcmV0QW5ub3RhdGlvbjtcbiAgICAgICAgaWYgKG1vbnRoLmFubm90YXRpb24ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpbmREYXRhc2V0ID0gMDsgaW5kRGF0YXNldCA8IG51bURhdGFzZXQ7IGluZERhdGFzZXQrKykge1xuICAgICAgICAgICAgICAgIG1vbnRoLmFubm90YXRpb24ucHVzaChudWxsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobW9udGguYW5ub3RhdGlvbi5sZW5ndGggIT09IG1vbnRoLmRhdGFzZXQubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgIFwiVGhlIG51bWJlciBvZiBpbnB1dHMgb2YgYW5ub3RhdGlvbiBhbmQgZGF0YXNldCBub3QgbWF0Y2hlZFwiO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5hbm5vdGF0aW9uKTtcblxuICAgICAgICAvLyBzaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0c1xuICAgICAgICBpZiAodHlwZW9mIHlhbWxNb250aD8uc2hvd0Fubm90YXRpb25PZkFsbFRhcmdldHMgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBtb250aC5zaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0cyA9XG4gICAgICAgICAgICAgICAgeWFtbE1vbnRoLnNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzKTtcblxuICAgICAgICByZW5kZXJJbmZvLm1vbnRoLnB1c2gobW9udGgpO1xuICAgIH0gLy8gTW9udGggcmVsYXRlZCBwYXJhbWV0ZXJzXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5tb250aCk7XG5cbiAgICAvLyBIZWF0bWFwIHJlbGF0ZWQgcGFyYW1ldGVyc1xuICAgIGZvciAobGV0IGhlYXRtYXBLZXkgb2YgeWFtbEhlYXRtYXBLZXlzKSB7XG4gICAgICAgIGxldCBoZWF0bWFwID0gbmV3IEhlYXRtYXBJbmZvKCk7XG4gICAgICAgIGxldCB5YW1sSGVhdG1hcCA9IHlhbWxbaGVhdG1hcEtleV07XG5cbiAgICAgICAgbGV0IGtleXNPZkhlYXRtYXBJbmZvID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoaGVhdG1hcCk7XG4gICAgICAgIGxldCBrZXlzRm91bmRJbllBTUwgPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyh5YW1sSGVhdG1hcCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNPZkhlYXRtYXBJbmZvKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c0ZvdW5kSW5ZQU1MKTtcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXNGb3VuZEluWUFNTCkge1xuICAgICAgICAgICAgaWYgKCFrZXlzT2ZIZWF0bWFwSW5mby5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCInXCIgKyBrZXkgKyBcIicgaXMgbm90IGFuIGF2YWlsYWJsZSBrZXlcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmVuZGVySW5mby5oZWF0bWFwLnB1c2goaGVhdG1hcCk7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uaGVhdG1hcCk7XG5cbiAgICAvLyBCdWxsZXQgcmVsYXRlZCBwYXJhbWV0ZXJzXG4gICAgZm9yIChsZXQgYnVsbGV0S2V5IG9mIHlhbWxCdWxsZXRLZXlzKSB7XG4gICAgICAgIGxldCBidWxsZXQgPSBuZXcgQnVsbGV0SW5mbygpO1xuICAgICAgICBsZXQgeWFtbEJ1bGxldCA9IHlhbWxbYnVsbGV0S2V5XTtcblxuICAgICAgICBsZXQga2V5c09mQnVsbGV0SW5mbyA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKGJ1bGxldCk7XG4gICAgICAgIGxldCBrZXlzRm91bmRJbllBTUwgPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyh5YW1sQnVsbGV0KTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c09mU3VtbWFyeUluZm8pO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzRm91bmRJbllBTUwpO1xuICAgICAgICBmb3IgKGxldCBrZXkgb2Yga2V5c0ZvdW5kSW5ZQU1MKSB7XG4gICAgICAgICAgICBpZiAoIWtleXNPZkJ1bGxldEluZm8uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiJ1wiICsga2V5ICsgXCInIGlzIG5vdCBhbiBhdmFpbGFibGUga2V5XCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHRpdGxlXG4gICAgICAgIGJ1bGxldC50aXRsZSA9IGdldFN0cmluZ0Zyb21JbnB1dCh5YW1sQnVsbGV0Py50aXRsZSwgYnVsbGV0LnRpdGxlKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYnVsbGV0LnRpdGxlKTtcblxuICAgICAgICAvLyBkYXRhc2V0XG4gICAgICAgIGJ1bGxldC5kYXRhc2V0ID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxuICAgICAgICAgICAgeWFtbEJ1bGxldD8uZGF0YXNldCxcbiAgICAgICAgICAgIGJ1bGxldC5kYXRhc2V0XG4gICAgICAgICk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGJ1bGxldC5kYXRhc2V0KTtcblxuICAgICAgICAvLyBvcmllbnRhdGlvblxuICAgICAgICBidWxsZXQub3JpZW50YXRpb24gPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgICAgICB5YW1sQnVsbGV0Py5vcmllbnRhdGlvbixcbiAgICAgICAgICAgIGJ1bGxldC5vcmllbnRhdGlvblxuICAgICAgICApO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhidWxsZXQub3JpZW50YXRpb24pO1xuXG4gICAgICAgIC8vIHJhbmdlXG4gICAgICAgIGxldCByZXRSYW5nZSA9IGdldE51bWJlckFycmF5KFwicmFuZ2VcIiwgeWFtbEJ1bGxldD8ucmFuZ2UpO1xuICAgICAgICBpZiAodHlwZW9mIHJldFJhbmdlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gcmV0UmFuZ2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHJhbmdlID0gcmV0UmFuZ2UgYXMgQXJyYXk8bnVtYmVyPjtcbiAgICAgICAgLy8gQ2hlY2sgdGhlIHZhbHVlIGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZ1xuICAgICAgICAvLyBDaGVjayB0aGUgdmFsdWUgaXMgbm90IG5lZ2F0aXZlXG4gICAgICAgIGlmIChyYW5nZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGlmIChyYW5nZVswXSA8IDApIHtcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIk5lZ2F0aXZlIHJhbmdlIHZhbHVlIGlzIG5vdCBhbGxvd2VkXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChyYW5nZS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgICBsZXQgbGFzdEJvdW5kID0gcmFuZ2VbMF07XG4gICAgICAgICAgICBpZiAobGFzdEJvdW5kIDwgMCkge1xuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiTmVnYXRpdmUgcmFuZ2UgdmFsdWUgaXMgbm90IGFsbG93ZWRcIjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAxOyBpbmQgPCByYW5nZS5sZW5ndGg7IGluZCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyYW5nZVtpbmRdIDw9IGxhc3RCb3VuZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlZhbHVlcyBpbiBwYXJhbWV0ZXIgJ3JhbmdlJyBzaG91bGQgYmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJFbXB0eSByYW5nZSBpcyBub3QgYWxsb3dlZFwiO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcbiAgICAgICAgfVxuICAgICAgICBidWxsZXQucmFuZ2UgPSByYW5nZTtcbiAgICAgICAgbGV0IG51bVJhbmdlID0gcmFuZ2UubGVuZ3RoO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmJ1bGxldC5yYW5nZSk7XG5cbiAgICAgICAgLy8gcmFuZ2UgY29sb3JcbiAgICAgICAgbGV0IHJldFJhbmdlQ29sb3IgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcbiAgICAgICAgICAgIFwicmFuZ2VDb2xvclwiLFxuICAgICAgICAgICAgeWFtbEJ1bGxldD8ucmFuZ2VDb2xvcixcbiAgICAgICAgICAgIG51bVJhbmdlLFxuICAgICAgICAgICAgXCJcIixcbiAgICAgICAgICAgIHZhbGlkYXRlQ29sb3IsXG4gICAgICAgICAgICB0cnVlXG4gICAgICAgICk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0UmFuZ2VDb2xvciA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHJldFJhbmdlQ29sb3I7IC8vIGVycm9yTWVzc2FnZVxuICAgICAgICB9XG4gICAgICAgIGJ1bGxldC5yYW5nZUNvbG9yID0gcmV0UmFuZ2VDb2xvcjtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYnVsbGV0LnJhbmdlQ29sb3IpO1xuXG4gICAgICAgIC8vIGFjdHVhbCB2YWx1ZSwgY2FuIHBvc3Nlc3MgdGVtcGxhdGUgdmFyaWFibGVcbiAgICAgICAgYnVsbGV0LnZhbHVlID0gZ2V0U3RyaW5nRnJvbUlucHV0KHlhbWxCdWxsZXQ/LnZhbHVlLCBidWxsZXQudmFsdWUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhidWxsZXQudmFsdWUpO1xuXG4gICAgICAgIC8vIHZhbHVlIHVuaXRcbiAgICAgICAgYnVsbGV0LnZhbHVlVW5pdCA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxCdWxsZXQ/LnZhbHVlVW5pdCxcbiAgICAgICAgICAgIGJ1bGxldC52YWx1ZVVuaXRcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYnVsbGV0LnZhbHVlVW5pdCk7XG5cbiAgICAgICAgLy8gdmFsdWUgY29sb3JcbiAgICAgICAgYnVsbGV0LnZhbHVlQ29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXG4gICAgICAgICAgICB5YW1sQnVsbGV0Py52YWx1ZUNvbG9yLFxuICAgICAgICAgICAgYnVsbGV0LnZhbHVlQ29sb3JcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYnVsbGV0LnZhbHVlQ29sb3IpO1xuXG4gICAgICAgIC8vIHNob3cgbWFya1xuICAgICAgICBpZiAodHlwZW9mIHlhbWxCdWxsZXQ/LnNob3dNYXJrZXIgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBidWxsZXQuc2hvd01hcmtlciA9IHlhbWxCdWxsZXQuc2hvd01hcmtlcjtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhidWxsZXQuc2hvd01hcmspO1xuXG4gICAgICAgIC8vIG1hcmsgdmFsdWVcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sQnVsbGV0Py5tYXJrZXJWYWx1ZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgYnVsbGV0Lm1hcmtlclZhbHVlID0geWFtbEJ1bGxldC5tYXJrZXJWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhidWxsZXQubWFya1ZhbHVlKTtcblxuICAgICAgICAvLyBtYXJrIGNvbG9yXG4gICAgICAgIGJ1bGxldC5tYXJrZXJDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcbiAgICAgICAgICAgIHlhbWxCdWxsZXQ/Lm1hcmtlckNvbG9yLFxuICAgICAgICAgICAgYnVsbGV0Lm1hcmtlckNvbG9yXG4gICAgICAgICk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGJ1bGxldC5tYXJrVmFsdWUpO1xuXG4gICAgICAgIHJlbmRlckluZm8uYnVsbGV0LnB1c2goYnVsbGV0KTtcbiAgICB9IC8vIEJ1bGxldCByZWxhdGVkIHBhcmFtZXRlcnNcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmJ1bGxldCk7XG5cbiAgICByZXR1cm4gcmVuZGVySW5mbztcbn1cbiIsImltcG9ydCB7IENhY2hlZE1ldGFkYXRhLCBURmlsZSwgbm9ybWFsaXplUGF0aCB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IHtcbiAgICBEYXRhTWFwLFxuICAgIFF1ZXJ5LFxuICAgIFJlbmRlckluZm8sXG4gICAgWFZhbHVlTWFwLFxuICAgIFF1ZXJ5VmFsdWVQYWlyLFxuICAgIFRhYmxlRGF0YSxcbiAgICBTZWFyY2hUeXBlLFxuICAgIFZhbHVlVHlwZSxcbn0gZnJvbSBcIi4vZGF0YVwiO1xuaW1wb3J0ICogYXMgaGVscGVyIGZyb20gXCIuL2hlbHBlclwiO1xuaW1wb3J0IHsgTW9tZW50IH0gZnJvbSBcIm1vbWVudFwiO1xuXG4vLyByZWY6IGh0dHBzOi8vd3d3LnJhcGlkdGFibGVzLmNvbS9jb2RlL3RleHQvdW5pY29kZS1jaGFyYWN0ZXJzLmh0bWxcbmNvbnN0IEN1cnJlbmN5Q29kZXMgPVxuICAgIFwiXFx1MDAyNFxcdTIwQUNcXHUwMEEzXFx1MDBBNVxcdTAwQTJcXHUyMEI5XFx1MjBBOFxcdTIwQjFcXHUyMEE5XFx1MEUzRlxcdTIwQUJcXHUyMEFBXCI7XG5jb25zdCBBbHBoYWJldENvZGVzID0gXCJcXHUwM0IxLVxcdTAzQzlcXHUwMzkxLVxcdTAzQTlcIjtcbmNvbnN0IEludGVsbGVjdHVhbFByb3BlcnR5Q29kZXMgPSBcIlxcdTAwQTlcXHUwMEFFXFx1MjExN1xcdTIxMjJcXHUyMTIwXCI7XG5jb25zdCBDSktDb2RlcyA9IFwiXFx1NEUwMC1cXHU5RkZGXFx1MzQwMC1cXHU0REJGXFx1MzAwMFxcdTMwMDEtXFx1MzAzRlwiO1xuY29uc3QgV29yZENoYXJhY3RlcnMgPVxuICAgIFwiXFxcXHdcIiArXG4gICAgQ3VycmVuY3lDb2RlcyArXG4gICAgQWxwaGFiZXRDb2RlcyArXG4gICAgSW50ZWxsZWN0dWFsUHJvcGVydHlDb2RlcyArXG4gICAgQ0pLQ29kZXM7XG5cbi8vIGZpbGVCYXNlTmFtZSBpcyBhIHN0cmluZyBjb250YWlucyBkYXRlRm9ybWF0IG9ubHlcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlRnJvbUZpbGVuYW1lKFxuICAgIGZpbGU6IFRGaWxlLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbik6IE1vbWVudCB7XG4gICAgLy8gY29uc29sZS5sb2coYGdldERhdGVGcm9tRmlsZW5hbWU6ICR7ZmlsZS5uYW1lfWApO1xuICAgIC8vIEdldCBkYXRlIGZvcm0gZmlsZUJhc2VOYW1lXG5cbiAgICBsZXQgZmlsZUJhc2VOYW1lID0gZmlsZS5iYXNlbmFtZTtcblxuICAgIGxldCBkYXRlU3RyaW5nID0gaGVscGVyLmdldERhdGVTdHJpbmdGcm9tSW5wdXRTdHJpbmcoXG4gICAgICAgIGZpbGVCYXNlTmFtZSxcbiAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0UHJlZml4LFxuICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRTdWZmaXhcbiAgICApO1xuICAgIC8vIGNvbnNvbGUubG9nKGRhdGVTdHJpbmcpO1xuXG4gICAgbGV0IGZpbGVEYXRlID0gaGVscGVyLnN0clRvRGF0ZShkYXRlU3RyaW5nLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xuICAgIC8vIGNvbnNvbGUubG9nKGZpbGVEYXRlKTtcblxuICAgIHJldHVybiBmaWxlRGF0ZTtcbn1cblxuLy8gTm90IHN1cHBvcnQgbXVsdGlwbGUgdGFyZ2V0c1xuLy8gSW4gZm9ybSAna2V5OiB2YWx1ZScsIHRhcmdldCB1c2VkIHRvIGlkZW50aWZ5ICdmcm9udG1hdHRlciBrZXknXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZUZyb21Gcm9udG1hdHRlcihcbiAgICBmaWxlQ2FjaGU6IENhY2hlZE1ldGFkYXRhLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXG4pOiBNb21lbnQge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiZ2V0RGF0ZUZyb21Gcm9udG1hdHRlclwiKTtcbiAgICAvLyBHZXQgZGF0ZSBmcm9tICdmcm9udE1hdHRlcktleTogZGF0ZSdcblxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcblxuICAgIGxldCBmcm9udE1hdHRlciA9IGZpbGVDYWNoZS5mcm9udG1hdHRlcjtcbiAgICBpZiAoZnJvbnRNYXR0ZXIpIHtcbiAgICAgICAgaWYgKGhlbHBlci5kZWVwVmFsdWUoZnJvbnRNYXR0ZXIsIHF1ZXJ5LmdldFRhcmdldCgpKSkge1xuICAgICAgICAgICAgbGV0IHN0ckRhdGUgPSBoZWxwZXIuZGVlcFZhbHVlKGZyb250TWF0dGVyLCBxdWVyeS5nZXRUYXJnZXQoKSk7XG5cbiAgICAgICAgICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBzaW5nbGUgdmFsdWUgZm9yIG5vd1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBzdHJEYXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgc3RyRGF0ZSA9IGhlbHBlci5nZXREYXRlU3RyaW5nRnJvbUlucHV0U3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICBzdHJEYXRlLFxuICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRQcmVmaXgsXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFN1ZmZpeFxuICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICBkYXRlID0gaGVscGVyLnN0clRvRGF0ZShzdHJEYXRlLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGU7XG59XG5cbi8vIGhlbHBlciBmdW5jdGlvblxuLy8gc3RyUmVnZXggbXVzdCBoYXZlIG5hbWUgZ3JvdXAgJ3ZhbHVlJ1xuLy8gTmFtZWQgZ3JvdXAgJ3ZhbHVlJyBjb3VsZCBiZSBwcm92aWRlZCBmcm9tIHVzZXJzIG9yIHBsdWdpblxuZnVuY3Rpb24gZXh0cmFjdERhdGVVc2luZ1JlZ2V4V2l0aFZhbHVlKFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBzdHJSZWdleDogc3RyaW5nLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbik6IE1vbWVudCB7XG4gICAgbGV0IGRhdGUgPSB3aW5kb3cubW9tZW50KFwiXCIpO1xuXG4gICAgbGV0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnbVwiKTtcbiAgICBsZXQgbWF0Y2g7XG4gICAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWModGV4dCkpKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1hdGNoKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgdHlwZW9mIG1hdGNoLmdyb3VwcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICAgICAgdHlwZW9mIG1hdGNoLmdyb3Vwcy52YWx1ZSAhPT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICApIHtcbiAgICAgICAgICAgIC8vIG11c3QgaGF2ZSBncm91cCBuYW1lICd2YWx1ZSdcbiAgICAgICAgICAgIGxldCBzdHJEYXRlID0gbWF0Y2guZ3JvdXBzLnZhbHVlLnRyaW0oKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHN0ckRhdGUpO1xuXG4gICAgICAgICAgICBzdHJEYXRlID0gaGVscGVyLmdldERhdGVTdHJpbmdGcm9tSW5wdXRTdHJpbmcoXG4gICAgICAgICAgICAgICAgc3RyRGF0ZSxcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRQcmVmaXgsXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0U3VmZml4XG4gICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBkYXRlID0gaGVscGVyLnN0clRvRGF0ZShzdHJEYXRlLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xuICAgICAgICAgICAgaWYgKGRhdGUuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZTtcbn1cblxuLy8gTm90IHN1cHBvcnQgbXVsdGlwbGUgdGFyZ2V0c1xuLy8gSW4gZm9ybSAna2V5OiB2YWx1ZScsIG5hbWUgZ3JvdXAgJ3ZhbHVlJyBmcm9tIHBsdWdpbiwgbm90IGZyb20gdXNlcnNcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlRnJvbVRhZyhcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgcXVlcnk6IFF1ZXJ5LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbik6IE1vbWVudCB7XG4gICAgLy8gY29uc29sZS5sb2coXCJnZXREYXRlRnJvbVRhZ1wiKTtcbiAgICAvLyBHZXQgZGF0ZSBmcm9tICcjdGFnTmFtZTogZGF0ZSdcbiAgICAvLyBJbmxpbmUgdmFsdWUtYXR0YWNoZWQgdGFnIG9ubHlcblxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcblxuICAgIGxldCB0YWdOYW1lID0gcXVlcnkuZ2V0VGFyZ2V0KCk7XG4gICAgaWYgKHF1ZXJ5LmdldFBhcmVudFRhcmdldCgpKSB7XG4gICAgICAgIHRhZ05hbWUgPSBxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKTsgLy8gdXNlIHBhcmVudCB0YWcgbmFtZSBmb3IgbXVsdGlwbGUgdmFsdWVzXG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHRhZ05hbWUpO1xuXG4gICAgbGV0IHN0clJlZ2V4ID1cbiAgICAgICAgXCIoXnxcXFxccykjXCIgK1xuICAgICAgICB0YWdOYW1lICtcbiAgICAgICAgXCIoXFxcXC9bXFxcXHctXSspKig6KD88dmFsdWU+W1xcXFxkXFxcXC5cXFxcLy1dKilbYS16QS1aXSopPyhbXFxcXC4hLFxcXFw/O34tXSopPyhcXFxcc3wkKVwiO1xuICAgIC8vIGNvbnNvbGUubG9nKHN0clJlZ2V4KTtcblxuICAgIHJldHVybiBleHRyYWN0RGF0ZVVzaW5nUmVnZXhXaXRoVmFsdWUoY29udGVudCwgc3RyUmVnZXgsIHJlbmRlckluZm8pO1xufVxuXG4vLyBOb3Qgc3VwcG9ydCBtdWx0aXBsZSB0YXJnZXRzXG4vLyBJbiBmb3JtICdyZWdleCB3aXRoIHZhbHVlJywgbmFtZSBncm91cCAndmFsdWUnIGZyb20gdXNlcnNcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlRnJvbVRleHQoXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXG4pOiBNb21lbnQge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiZ2V0RGF0ZUZyb21UZXh0XCIpO1xuICAgIC8vIEdldCBkYXRlIGZyb20gdGV4dCB1c2luZyByZWdleCB3aXRoIHZhbHVlXG5cbiAgICBsZXQgZGF0ZSA9IHdpbmRvdy5tb21lbnQoXCJcIik7XG5cbiAgICBsZXQgc3RyUmVnZXggPSBxdWVyeS5nZXRUYXJnZXQoKTtcbiAgICAvLyBjb25zb2xlLmxvZyhzdHJUZXh0UmVnZXgpO1xuXG4gICAgcmV0dXJuIGV4dHJhY3REYXRlVXNpbmdSZWdleFdpdGhWYWx1ZShjb250ZW50LCBzdHJSZWdleCwgcmVuZGVySW5mbyk7XG59XG5cbi8vIE5vdCBzdXBwb3J0IG11bHRpcGxlIHRhcmdldHNcbi8vIEluIGZvcm0gJ2tleTo6dmFsdWUnLCBuYW1lZCBncm91cCAndmFsdWUnIGZyb20gcGx1Z2luXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZUZyb21EdkZpZWxkKFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBxdWVyeTogUXVlcnksXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xuKTogTW9tZW50IHtcbiAgICAvLyBjb25zb2xlLmxvZyhcImdldERhdGVGcm9tRHZGaWVsZFwiKTtcbiAgICAvLyBHZXQgZGF0ZSBmb3JtICd0YXJnZXROYW1lOjogZGF0ZSdcblxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcblxuICAgIGxldCBkdlRhcmdldCA9IHF1ZXJ5LmdldFRhcmdldCgpO1xuICAgIGlmIChxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKSkge1xuICAgICAgICBkdlRhcmdldCA9IHF1ZXJ5LmdldFBhcmVudFRhcmdldCgpOyAvLyB1c2UgcGFyZW50IHRhZyBuYW1lIGZvciBtdWx0aXBsZSB2YWx1ZXNcbiAgICB9XG4gICAgLy8gRGF0YXZpZXcgYXNrIHVzZXIgdG8gYWRkIGRhc2hlcyBmb3Igc3BhY2VzIGFzIHNlYXJjaCB0YXJnZXRcbiAgICAvLyBTbyBhIGRhc2ggbWF5IHN0YW5kcyBmb3IgYSByZWFsIGRhc2ggb3IgYSBzcGFjZVxuICAgIGR2VGFyZ2V0ID0gZHZUYXJnZXQucmVwbGFjZShcIi1cIiwgXCJbXFxcXHNcXFxcLV1cIik7XG5cbiAgICAvLyBUZXN0IHRoaXMgaW4gUmVnZXgxMDFcbiAgICAvLyByZW1lbWJlciAnXFxzJyBpbmNsdWRlcyBuZXcgbGluZVxuICAgIC8vIChefCB8XFx0KVxcKnswLDJ9ZHZUYXJnZXRcXCp7MCwyfSg6OlsgfFxcdF0qKD88dmFsdWU+W1xcZFxcLlxcL1xcLVxcdyxAOyBcXHQ6XSopKShcXHI/XFxufFxccnwkKVxuICAgIGxldCBzdHJSZWdleCA9XG4gICAgICAgIFwiKF58IHxcXFxcdClcXFxcKnswLDJ9XCIgK1xuICAgICAgICBkdlRhcmdldCArXG4gICAgICAgIFwiXFxcXCp7MCwyfSg6OlsgfFxcXFx0XSooPzx2YWx1ZT5bXFxcXGRcXFxcLlxcXFwvXFxcXC1cXFxcdyxAOyBcXFxcdDpdKikpKFxcXFxyXFxcXD9cXFxcbnxcXFxccnwkKVwiO1xuICAgIC8vIGNvbnNvbGUubG9nKHN0clJlZ2V4KTtcblxuICAgIHJldHVybiBleHRyYWN0RGF0ZVVzaW5nUmVnZXhXaXRoVmFsdWUoY29udGVudCwgc3RyUmVnZXgsIHJlbmRlckluZm8pO1xufVxuXG4vLyBOb3Qgc3VwcG9ydCBtdWx0aXBsZSB0YXJnZXRzXG4vLyBJbiBmb3JtICdyZWdleCB3aXRoIHZhbHVlJywgbmFtZSBncm91cCAndmFsdWUnIGZyb20gdXNlcnNcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlRnJvbVdpa2koXG4gICAgZmlsZUNhY2hlOiBDYWNoZWRNZXRhZGF0YSxcbiAgICBxdWVyeTogUXVlcnksXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xuKTogTW9tZW50IHtcbiAgICAvL2NvbnNvbGUubG9nKFwiZ2V0RGF0ZUZyb21XaWtpXCIpO1xuICAgIC8vIEdldCBkYXRlIGZyb20gJ1tbcmVnZXggd2l0aCB2YWx1ZV1dJ1xuXG4gICAgbGV0IGRhdGUgPSB3aW5kb3cubW9tZW50KFwiXCIpO1xuXG4gICAgbGV0IGxpbmtzID0gZmlsZUNhY2hlLmxpbmtzO1xuICAgIGlmICghbGlua3MpIHJldHVybiBkYXRlO1xuXG4gICAgbGV0IHNlYXJjaFRhcmdldCA9IHF1ZXJ5LmdldFRhcmdldCgpO1xuICAgIGxldCBzZWFyY2hUeXBlID0gcXVlcnkuZ2V0VHlwZSgpO1xuXG4gICAgZm9yIChsZXQgbGluayBvZiBsaW5rcykge1xuICAgICAgICBpZiAoIWxpbmspIGNvbnRpbnVlO1xuXG4gICAgICAgIGxldCB3aWtpVGV4dCA9IFwiXCI7XG4gICAgICAgIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLldpa2kpIHtcbiAgICAgICAgICAgIGlmIChsaW5rLmRpc3BsYXlUZXh0KSB7XG4gICAgICAgICAgICAgICAgd2lraVRleHQgPSBsaW5rLmRpc3BsYXlUZXh0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsubGluaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLldpa2lMaW5rKSB7XG4gICAgICAgICAgICAvLyB3aWtpLmxpbmsgcG9pbnQgdG8gYSBmaWxlIG5hbWVcbiAgICAgICAgICAgIC8vIGEgY29sb24gaXMgbm90IGFsbG93ZWQgYmUgaW4gZmlsZSBuYW1lXG4gICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsubGluaztcbiAgICAgICAgfSBlbHNlIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLldpa2lEaXNwbGF5KSB7XG4gICAgICAgICAgICBpZiAobGluay5kaXNwbGF5VGV4dCkge1xuICAgICAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5kaXNwbGF5VGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChsaW5rLmRpc3BsYXlUZXh0KSB7XG4gICAgICAgICAgICAgICAgd2lraVRleHQgPSBsaW5rLmRpc3BsYXlUZXh0O1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsubGluaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3aWtpVGV4dCA9IHdpa2lUZXh0LnRyaW0oKTtcblxuICAgICAgICBsZXQgc3RyUmVnZXggPSBcIl5cIiArIHNlYXJjaFRhcmdldCArIFwiJFwiO1xuICAgICAgICByZXR1cm4gZXh0cmFjdERhdGVVc2luZ1JlZ2V4V2l0aFZhbHVlKHdpa2lUZXh0LCBzdHJSZWdleCwgcmVuZGVySW5mbyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRhdGU7XG59XG5cbi8vIE5vdCBzdXBwb3J0IG11bHRpcGxlIHRhcmdldHNcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlRnJvbUZpbGVNZXRhKFxuICAgIGZpbGU6IFRGaWxlLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXG4pOiBNb21lbnQge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiZ2V0RGF0ZUZyb21GaWxlTWV0YVwiKTtcbiAgICAvLyBHZXQgZGF0ZSBmcm9tIGNEYXRlLCBtRGF0ZSBvciBiYXNlRmlsZU5hbWVcblxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcblxuICAgIGlmIChmaWxlICYmIGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhmaWxlLnN0YXQpO1xuXG4gICAgICAgIGxldCB0YXJnZXQgPSBxdWVyeS5nZXRUYXJnZXQoKTtcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gXCJjRGF0ZVwiKSB7XG4gICAgICAgICAgICBsZXQgY3RpbWUgPSBmaWxlLnN0YXQuY3RpbWU7IC8vIHVuaXggdGltZVxuICAgICAgICAgICAgZGF0ZSA9IGhlbHBlci5nZXREYXRlRnJvbVVuaXhUaW1lKGN0aW1lLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJtRGF0ZVwiKSB7XG4gICAgICAgICAgICBsZXQgbXRpbWUgPSBmaWxlLnN0YXQubXRpbWU7IC8vIHVuaXggdGltZVxuICAgICAgICAgICAgZGF0ZSA9IGhlbHBlci5nZXREYXRlRnJvbVVuaXhUaW1lKG10aW1lLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJuYW1lXCIpIHtcbiAgICAgICAgICAgIGRhdGUgPSBnZXREYXRlRnJvbUZpbGVuYW1lKGZpbGUsIHJlbmRlckluZm8pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5sb2coZGF0ZSk7XG4gICAgcmV0dXJuIGRhdGU7XG59XG5cbi8vIE5vdCBzdXBwb3J0IG11bHRpcGxlIHRhcmdldHNcbi8vIEluIGZvcm0gJ3JlZ2V4IHdpdGggdmFsdWUnLCBuYW1lIGdyb3VwICd2YWx1ZScgZnJvbSB1c2Vyc1xuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVGcm9tVGFzayhcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgcXVlcnk6IFF1ZXJ5LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbik6IE1vbWVudCB7XG4gICAgLy8gY29uc29sZS5sb2coXCJnZXREYXRlRnJvbVRhc2tcIik7XG4gICAgLy8gR2V0IGRhdGUgZnJvbSAnLSBbIF0gcmVnZXggd2l0aCB2YWx1ZScgb3IgJy0gW3hdIHJlZ2V4IHdpdGggdmFsdWUnXG5cbiAgICBsZXQgZGF0ZSA9IHdpbmRvdy5tb21lbnQoXCJcIik7XG4gICAgbGV0IHNlYXJjaFR5cGUgPSBxdWVyeS5nZXRUeXBlKCk7XG4gICAgLy8gY29uc29sZS5sb2coc2VhcmNoVHlwZSk7XG5cbiAgICBsZXQgc3RyUmVnZXggPSBxdWVyeS5nZXRUYXJnZXQoKTtcbiAgICBpZiAoc2VhcmNoVHlwZSA9PT0gU2VhcmNoVHlwZS5UYXNrKSB7XG4gICAgICAgIHN0clJlZ2V4ID0gXCJcXFxcW1tcXFxcc3hdXFxcXF1cXFxcc1wiICsgc3RyUmVnZXg7XG4gICAgfSBlbHNlIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLlRhc2tEb25lKSB7XG4gICAgICAgIHN0clJlZ2V4ID0gXCJcXFxcW3hcXFxcXVxcXFxzXCIgKyBzdHJSZWdleDtcbiAgICB9IGVsc2UgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuVGFza05vdERvbmUpIHtcbiAgICAgICAgc3RyUmVnZXggPSBcIlxcXFxbXFxcXHNcXFxcXVxcXFxzXCIgKyBzdHJSZWdleDtcbiAgICB9IGVsc2Uge1xuICAgICAgICBzdHJSZWdleCA9IFwiXFxcXFtbXFxcXHN4XVxcXFxdXFxcXHNcIiArIHN0clJlZ2V4O1xuICAgIH1cbiAgICAvLyBjb25zb2xlLmxvZyhzdHJUZXh0UmVnZXgpO1xuXG4gICAgcmV0dXJuIGV4dHJhY3REYXRlVXNpbmdSZWdleFdpdGhWYWx1ZShjb250ZW50LCBzdHJSZWdleCwgcmVuZGVySW5mbyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRUb0RhdGFNYXAoXG4gICAgZGF0YU1hcDogRGF0YU1hcCxcbiAgICBkYXRlOiBzdHJpbmcsXG4gICAgcXVlcnk6IFF1ZXJ5LFxuICAgIHZhbHVlOiBudW1iZXIgfCBudWxsXG4pIHtcbiAgICBpZiAoIWRhdGFNYXAuaGFzKGRhdGUpKSB7XG4gICAgICAgIGxldCBxdWVyeVZhbHVlUGFpcnMgPSBuZXcgQXJyYXk8UXVlcnlWYWx1ZVBhaXI+KCk7XG4gICAgICAgIHF1ZXJ5VmFsdWVQYWlycy5wdXNoKHsgcXVlcnk6IHF1ZXJ5LCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgICAgIGRhdGFNYXAuc2V0KGRhdGUsIHF1ZXJ5VmFsdWVQYWlycyk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IHRhcmdldFZhbHVlUGFpcnMgPSBkYXRhTWFwLmdldChkYXRlKTtcbiAgICAgICAgdGFyZ2V0VmFsdWVQYWlycy5wdXNoKHsgcXVlcnk6IHF1ZXJ5LCB2YWx1ZTogdmFsdWUgfSk7XG4gICAgfVxufVxuXG4vLyBIZWxwZXIgZnVuY3Rpb25cbi8vIEFjY2VwdCBtdWx0aXBsZSB2YWx1ZXMgdXNpbmcgY3VzdG9tIHNlcGFyYXRvcnNcbi8vIHJlZ2V4IHdpdGggdmFsdWUgLS0+IGV4dHJhY3QgdmFsdWVcbi8vIHJlZ2V4IHdpdGhvdXQgdmFsdWUgLS0+IGNvdW50IG9jY3VycmVuY2llc1xuZnVuY3Rpb24gZXh0cmFjdERhdGFVc2luZ1JlZ2V4V2l0aE11bHRpcGxlVmFsdWVzKFxuICAgIHRleHQ6IHN0cmluZyxcbiAgICBzdHJSZWdleDogc3RyaW5nLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICBkYXRhTWFwOiBEYXRhTWFwLFxuICAgIHhWYWx1ZU1hcDogWFZhbHVlTWFwLFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cbik6IGJvb2xlYW4ge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiZXh0cmFjdERhdGFVc2luZ1JlZ2V4V2l0aE11bHRpcGxlVmFsdWVzXCIpO1xuXG4gICAgbGV0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnbXVcIik7XG4gICAgbGV0IG1hdGNoO1xuICAgIGxldCBtZWFzdXJlID0gMC4wO1xuICAgIGxldCBleHRyYWN0ZWQgPSBmYWxzZTtcbiAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyh0ZXh0KSkpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2cobWF0Y2gpO1xuICAgICAgICBpZiAoIXJlbmRlckluZm8uaWdub3JlQXR0YWNoZWRWYWx1ZVtxdWVyeS5nZXRJZCgpXSkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHR5cGVvZiBtYXRjaC5ncm91cHMgIT09IFwidW5kZWZpbmVkXCIgJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgbWF0Y2guZ3JvdXBzLnZhbHVlICE9PSBcInVuZGVmaW5lZFwiXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWVzID0gbWF0Y2guZ3JvdXBzLnZhbHVlLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh2YWx1ZXMpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXJ5LmdldFNlcGFyYXRvcigpKTtcbiAgICAgICAgICAgICAgICBsZXQgc3BsaXR0ZWQgPSB2YWx1ZXMuc3BsaXQocXVlcnkuZ2V0U2VwYXJhdG9yKCkpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHNwbGl0dGVkKTtcbiAgICAgICAgICAgICAgICBpZiAoIXNwbGl0dGVkKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwic2luZ2xlLXZhbHVlXCIpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdG9QYXJzZSA9IHNwbGl0dGVkWzBdLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2codG9QYXJzZSk7XG4gICAgICAgICAgICAgICAgICAgIGxldCByZXRQYXJzZSA9IGhlbHBlci5wYXJzZUZsb2F0RnJvbUFueShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvUGFyc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnRleHRWYWx1ZU1hcFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmV0UGFyc2UudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS50eXBlID09PSBWYWx1ZVR5cGUuVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmUgPSByZXRQYXJzZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LnZhbHVlVHlwZSA9IFZhbHVlVHlwZS5UaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcmVuZGVySW5mby5pZ25vcmVaZXJvVmFsdWVbcXVlcnkuZ2V0SWQoKV0gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0UGFyc2UudmFsdWUgIT09IDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZSArPSByZXRQYXJzZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHNwbGl0dGVkLmxlbmd0aCA+IHF1ZXJ5LmdldEFjY2Vzc29yKCkgJiZcbiAgICAgICAgICAgICAgICAgICAgcXVlcnkuZ2V0QWNjZXNzb3IoKSA+PSAwXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwibXVsdGlwbGUtdmFsdWVzXCIpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgdG9QYXJzZSA9IHNwbGl0dGVkW3F1ZXJ5LmdldEFjY2Vzc29yKCldLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldFBhcnNlID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KFxuICAgICAgICAgICAgICAgICAgICAgICAgdG9QYXJzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8udGV4dFZhbHVlTWFwXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2cocmV0UGFyc2UpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmV0UGFyc2UudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS50eXBlID09PSBWYWx1ZVR5cGUuVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmUgPSByZXRQYXJzZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LnZhbHVlVHlwZSA9IFZhbHVlVHlwZS5UaW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZSArPSByZXRQYXJzZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gbm8gbmFtZWQgZ3JvdXBzLCBjb3VudCBvY2N1cnJlbmNpZXNcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImNvdW50IG9jY3VycmVuY2llc1wiKTtcbiAgICAgICAgICAgICAgICBtZWFzdXJlICs9IHJlbmRlckluZm8uY29uc3RWYWx1ZVtxdWVyeS5nZXRJZCgpXTtcbiAgICAgICAgICAgICAgICBleHRyYWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGZvcmNlIHRvIGNvdW50IG9jY3VycmVuY2llc1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJmb3JjZWQgY291bnQgb2NjdXJyZW5jaWVzXCIpO1xuICAgICAgICAgICAgbWVhc3VyZSArPSByZW5kZXJJbmZvLmNvbnN0VmFsdWVbcXVlcnkuZ2V0SWQoKV07XG4gICAgICAgICAgICBleHRyYWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGV4dHJhY3RlZCkge1xuICAgICAgICBsZXQgeFZhbHVlID0geFZhbHVlTWFwLmdldChyZW5kZXJJbmZvLnhEYXRhc2V0W3F1ZXJ5LmdldElkKCldKTtcbiAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIG1lYXN1cmUpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIE5vIHZhbHVlLCBjb3VudCBvY2N1cnJlbmNlcyBvbmx5XG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tRnJvbnRtYXR0ZXJUYWcoXG4gICAgZmlsZUNhY2hlOiBDYWNoZWRNZXRhZGF0YSxcbiAgICBxdWVyeTogUXVlcnksXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICBkYXRhTWFwOiBEYXRhTWFwLFxuICAgIHhWYWx1ZU1hcDogWFZhbHVlTWFwXG4pOiBib29sZWFuIHtcbiAgICAvLyBjb25zb2xlLmxvZyhcImNvbGxlY3REYXRhRnJvbUZyb250bWF0dGVyVGFnXCIpO1xuICAgIC8vIGNvbnNvbGUubG9nKHF1ZXJ5KTtcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhTWFwKTtcbiAgICAvLyBjb25zb2xlLmxvZyh4VmFsdWVNYXApO1xuXG4gICAgbGV0IGZyb250TWF0dGVyID0gZmlsZUNhY2hlLmZyb250bWF0dGVyO1xuICAgIGxldCBmcm9udE1hdHRlclRhZ3M6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKGZyb250TWF0dGVyICYmIGZyb250TWF0dGVyLnRhZ3MpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZnJvbnRNYXR0ZXIudGFncyk7XG4gICAgICAgIGxldCB0YWdNZWFzdXJlID0gMC4wO1xuICAgICAgICBsZXQgdGFnRXhpc3QgPSBmYWxzZTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZnJvbnRNYXR0ZXIudGFncykpIHtcbiAgICAgICAgICAgIGZyb250TWF0dGVyVGFncyA9IGZyb250TWF0dGVyVGFncy5jb25jYXQoZnJvbnRNYXR0ZXIudGFncyk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGZyb250TWF0dGVyLnRhZ3MgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGxldCBzcGxpdHRlZCA9IGZyb250TWF0dGVyLnRhZ3Muc3BsaXQocXVlcnkuZ2V0U2VwYXJhdG9yKHRydWUpKTtcbiAgICAgICAgICAgIGZvciAobGV0IHNwbGl0dGVkUGFydCBvZiBzcGxpdHRlZCkge1xuICAgICAgICAgICAgICAgIGxldCBwYXJ0ID0gc3BsaXR0ZWRQYXJ0LnRyaW0oKTtcbiAgICAgICAgICAgICAgICBpZiAocGFydCAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICBmcm9udE1hdHRlclRhZ3MucHVzaChwYXJ0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gY29uc29sZS5sb2coZnJvbnRNYXR0ZXJUYWdzKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcnkuZ2V0VGFyZ2V0KCkpO1xuXG4gICAgICAgIGZvciAobGV0IHRhZyBvZiBmcm9udE1hdHRlclRhZ3MpIHtcbiAgICAgICAgICAgIGlmICh0YWcgPT09IHF1ZXJ5LmdldFRhcmdldCgpKSB7XG4gICAgICAgICAgICAgICAgLy8gc2ltcGxlIHRhZ1xuICAgICAgICAgICAgICAgIHRhZ01lYXN1cmUgPSB0YWdNZWFzdXJlICsgcmVuZGVySW5mby5jb25zdFZhbHVlW3F1ZXJ5LmdldElkKCldO1xuICAgICAgICAgICAgICAgIHRhZ0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHRhZy5zdGFydHNXaXRoKHF1ZXJ5LmdldFRhcmdldCgpICsgXCIvXCIpKSB7XG4gICAgICAgICAgICAgICAgLy8gbmVzdGVkIHRhZ1xuICAgICAgICAgICAgICAgIHRhZ01lYXN1cmUgPSB0YWdNZWFzdXJlICsgcmVuZGVySW5mby5jb25zdFZhbHVlW3F1ZXJ5LmdldElkKCldO1xuICAgICAgICAgICAgICAgIHRhZ0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyB2YWx1ZWQtdGFnIGluIGZyb250bWF0dGVyIGlzIG5vdCBzdXBwb3J0ZWRcbiAgICAgICAgICAgIC8vIGJlY2F1c2UgdGhlIFwidGFnOnZhbHVlXCIgaW4gZnJvbnRtYXR0ZXIgd2lsbCBiZSBjb25zaWRlciBhcyBhIG5ldyB0YWcgZm9yIGVhY2ggZXhpc3RpbmcgdmFsdWVcblxuICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgIGlmICh0YWdFeGlzdCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGFnTWVhc3VyZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB4VmFsdWUgPSB4VmFsdWVNYXAuZ2V0KHJlbmRlckluZm8ueERhdGFzZXRbcXVlcnkuZ2V0SWQoKV0pO1xuICAgICAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIHZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBJbiBmb3JtICdrZXk6IHZhbHVlJywgdGFyZ2V0IHVzZWQgdG8gaWRlbnRpZnkgJ2Zyb250bWF0dGVyIGtleSdcbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0RGF0YUZyb21Gcm9udG1hdHRlcktleShcbiAgICBmaWxlQ2FjaGU6IENhY2hlZE1ldGFkYXRhLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGRhdGFNYXA6IERhdGFNYXAsXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXBcbik6IGJvb2xlYW4ge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiY29sbGVjdERhdGFGcm9tRnJvbnRtYXR0ZXJLZXlcIik7XG5cbiAgICBsZXQgZnJvbnRNYXR0ZXIgPSBmaWxlQ2FjaGUuZnJvbnRtYXR0ZXI7XG4gICAgaWYgKGZyb250TWF0dGVyKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZyb250TWF0dGVyKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcnkuZ2V0VGFyZ2V0KCkpO1xuICAgICAgICBsZXQgZGVlcFZhbHVlID0gaGVscGVyLmRlZXBWYWx1ZShmcm9udE1hdHRlciwgcXVlcnkuZ2V0VGFyZ2V0KCkpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhkZWVwVmFsdWUpO1xuICAgICAgICBpZiAoZGVlcFZhbHVlKSB7XG4gICAgICAgICAgICBsZXQgcmV0UGFyc2UgPSBoZWxwZXIucGFyc2VGbG9hdEZyb21BbnkoXG4gICAgICAgICAgICAgICAgZGVlcFZhbHVlLFxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8udGV4dFZhbHVlTWFwXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocmV0UGFyc2UpO1xuICAgICAgICAgICAgaWYgKHJldFBhcnNlLnZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gVHJ5IHBhcnNpbmcgYXMgYSBib29sZWFuOiB0cnVlIG1lYW5zIDEsIGZhbHNlIG1lYW5zIDAuXG4gICAgICAgICAgICAgICAgaWYgKGRlZXBWYWx1ZSA9PT0gXCJ0cnVlXCIgfHwgZGVlcFZhbHVlID09PSBcImZhbHNlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0UGFyc2UudHlwZSA9IFZhbHVlVHlwZS5OdW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIHJldFBhcnNlLnZhbHVlID0gZGVlcFZhbHVlID09PSBcInRydWVcIiA/IDEgOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChyZXRQYXJzZS52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS50eXBlID09PSBWYWx1ZVR5cGUuVGltZSkge1xuICAgICAgICAgICAgICAgICAgICBxdWVyeS52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuVGltZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xuICAgICAgICAgICAgICAgIGxldCB4VmFsdWUgPSB4VmFsdWVNYXAuZ2V0KHJlbmRlckluZm8ueERhdGFzZXRbcXVlcnkuZ2V0SWQoKV0pO1xuICAgICAgICAgICAgICAgIGFkZFRvRGF0YU1hcChkYXRhTWFwLCB4VmFsdWUsIHF1ZXJ5LCByZXRQYXJzZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICBxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKSAmJlxuICAgICAgICAgICAgaGVscGVyLmRlZXBWYWx1ZShmcm9udE1hdHRlciwgcXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCkpXG4gICAgICAgICkge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJtdWx0aXBsZSB2YWx1ZXNcIik7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVyeS5nZXRUYXJnZXQoKSk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKSk7XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVyeS5nZXRTdWJJZCgpKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgLy8gICAgIGZyb250TWF0dGVyW3F1ZXJ5LmdldFBhcmVudFRhcmdldCgpXVxuICAgICAgICAgICAgLy8gKTtcbiAgICAgICAgICAgIGxldCB0b1BhcnNlID0gaGVscGVyLmRlZXBWYWx1ZShcbiAgICAgICAgICAgICAgICBmcm9udE1hdHRlcixcbiAgICAgICAgICAgICAgICBxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGxldCBzcGxpdHRlZCA9IG51bGw7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0b1BhcnNlKSkge1xuICAgICAgICAgICAgICAgIHNwbGl0dGVkID0gdG9QYXJzZS5tYXAoKHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRvUGFyc2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBzcGxpdHRlZCA9IHRvUGFyc2Uuc3BsaXQocXVlcnkuZ2V0U2VwYXJhdG9yKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc3BsaXR0ZWQpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHNwbGl0dGVkICYmXG4gICAgICAgICAgICAgICAgc3BsaXR0ZWQubGVuZ3RoID4gcXVlcnkuZ2V0QWNjZXNzb3IoKSAmJlxuICAgICAgICAgICAgICAgIHF1ZXJ5LmdldEFjY2Vzc29yKCkgPj0gMFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogaXQncyBub3QgZWZmaWNlbnQgdG8gcmV0cmlldmUgb25lIHZhbHVlIGF0IGEgdGltZSwgZW5oYW5jZSB0aGlzXG4gICAgICAgICAgICAgICAgbGV0IHNwbGl0dGVkUGFydCA9IHNwbGl0dGVkW3F1ZXJ5LmdldEFjY2Vzc29yKCldLnRyaW0oKTtcbiAgICAgICAgICAgICAgICBsZXQgcmV0UGFyc2UgPSBoZWxwZXIucGFyc2VGbG9hdEZyb21BbnkoXG4gICAgICAgICAgICAgICAgICAgIHNwbGl0dGVkUGFydCxcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby50ZXh0VmFsdWVNYXBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS52YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmV0UGFyc2UudHlwZSA9PT0gVmFsdWVUeXBlLlRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LnZhbHVlVHlwZSA9IFZhbHVlVHlwZS5UaW1lO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHhWYWx1ZSA9IHhWYWx1ZU1hcC5nZXQoXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnhEYXRhc2V0W3F1ZXJ5LmdldElkKCldXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGFkZFRvRGF0YU1hcChkYXRhTWFwLCB4VmFsdWUsIHF1ZXJ5LCByZXRQYXJzZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZTtcbn1cblxuLy8gSW4gZm9ybSAncmVnZXggd2l0aCB2YWx1ZScsIG5hbWUgZ3JvdXAgJ3ZhbHVlJyBmcm9tIHVzZXJzXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tV2lraShcbiAgICBmaWxlQ2FjaGU6IENhY2hlZE1ldGFkYXRhLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGRhdGFNYXA6IERhdGFNYXAsXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXBcbik6IGJvb2xlYW4ge1xuICAgIGxldCBsaW5rcyA9IGZpbGVDYWNoZS5saW5rcztcbiAgICBpZiAoIWxpbmtzKSByZXR1cm4gZmFsc2U7XG5cbiAgICBsZXQgc2VhcmNoVGFyZ2V0ID0gcXVlcnkuZ2V0VGFyZ2V0KCk7XG4gICAgbGV0IHNlYXJjaFR5cGUgPSBxdWVyeS5nZXRUeXBlKCk7XG5cbiAgICBsZXQgdGV4dFRvU2VhcmNoID0gXCJcIjtcbiAgICBsZXQgc3RyUmVnZXggPSBzZWFyY2hUYXJnZXQ7XG5cbiAgICAvLyBQcmVwYXJlIHRleHRUb1NlYXJjaFxuICAgIGZvciAobGV0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgaWYgKCFsaW5rKSBjb250aW51ZTtcblxuICAgICAgICBsZXQgd2lraVRleHQgPSBcIlwiO1xuICAgICAgICBpZiAoc2VhcmNoVHlwZSA9PT0gU2VhcmNoVHlwZS5XaWtpKSB7XG4gICAgICAgICAgICBpZiAobGluay5kaXNwbGF5VGV4dCkge1xuICAgICAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5kaXNwbGF5VGV4dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2lraVRleHQgPSBsaW5rLmxpbms7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2VhcmNoVHlwZSA9PT0gU2VhcmNoVHlwZS5XaWtpTGluaykge1xuICAgICAgICAgICAgLy8gd2lraS5saW5rIHBvaW50IHRvIGEgZmlsZSBuYW1lXG4gICAgICAgICAgICAvLyBhIGNvbG9uIGlzIG5vdCBhbGxvd2VkIGJlIGluIGZpbGUgbmFtZVxuICAgICAgICAgICAgd2lraVRleHQgPSBsaW5rLmxpbms7XG4gICAgICAgIH0gZWxzZSBpZiAoc2VhcmNoVHlwZSA9PT0gU2VhcmNoVHlwZS5XaWtpRGlzcGxheSkge1xuICAgICAgICAgICAgaWYgKGxpbmsuZGlzcGxheVRleHQpIHtcbiAgICAgICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsuZGlzcGxheVRleHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobGluay5kaXNwbGF5VGV4dCkge1xuICAgICAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5kaXNwbGF5VGV4dDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgd2lraVRleHQgPSBsaW5rLmxpbms7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgd2lraVRleHQgPSB3aWtpVGV4dC50cmltKCk7XG5cbiAgICAgICAgdGV4dFRvU2VhcmNoICs9IHdpa2lUZXh0ICsgXCJcXG5cIjtcbiAgICB9XG5cbiAgICByZXR1cm4gZXh0cmFjdERhdGFVc2luZ1JlZ2V4V2l0aE11bHRpcGxlVmFsdWVzKFxuICAgICAgICB0ZXh0VG9TZWFyY2gsXG4gICAgICAgIHN0clJlZ2V4LFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgZGF0YU1hcCxcbiAgICAgICAgeFZhbHVlTWFwLFxuICAgICAgICByZW5kZXJJbmZvXG4gICAgKTtcbn1cblxuLy8gSW4gZm9ybSAna2V5OiB2YWx1ZScsIG5hbWUgZ3JvdXAgJ3ZhbHVlJyBmcm9tIHBsdWdpbiwgbm90IGZyb20gdXNlcnNcbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0RGF0YUZyb21JbmxpbmVUYWcoXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGRhdGFNYXA6IERhdGFNYXAsXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXBcbik6IGJvb2xlYW4ge1xuICAgIC8vIGNvbnNvbGUubG9nKGNvbnRlbnQpO1xuICAgIC8vIFRlc3QgdGhpcyBpbiBSZWdleDEwMVxuICAgIC8vIChefFxccykjdGFnTmFtZShcXC9bXFx3LV0rKSooOig/PHZhbHVlPltcXGRcXC5cXC8tXSopW2EtekEtWl0qKT8oW1xcXFwuISxcXFxcPzt+LV0qKT8oXFxzfCQpXG4gICAgbGV0IHRhZ05hbWUgPSBxdWVyeS5nZXRUYXJnZXQoKTtcbiAgICBpZiAocXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCkpIHtcbiAgICAgICAgdGFnTmFtZSA9IHF1ZXJ5LmdldFBhcmVudFRhcmdldCgpOyAvLyB1c2UgcGFyZW50IHRhZyBuYW1lIGZvciBtdWx0aXBsZSB2YWx1ZXNcbiAgICB9XG4gICAgaWYgKHRhZ05hbWUubGVuZ3RoID4gMSAmJiB0YWdOYW1lLnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnN1YnN0cmluZygxKTtcbiAgICB9XG4gICAgbGV0IHN0clJlZ2V4ID1cbiAgICAgICAgXCIoXnxcXFxccykjXCIgK1xuICAgICAgICB0YWdOYW1lICtcbiAgICAgICAgXCIoXFxcXC9bXFxcXHctXSspKig6KD88dmFsdWU+W1xcXFxkXFxcXC5cXFxcLy1dKilbYS16QS1aXSopPyhbXFxcXC4hLFxcXFw/O34tXSopPyhcXFxcc3wkKVwiO1xuICAgIC8vIGNvbnNvbGUubG9nKHN0clJlZ2V4KTtcblxuICAgIHJldHVybiBleHRyYWN0RGF0YVVzaW5nUmVnZXhXaXRoTXVsdGlwbGVWYWx1ZXMoXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIHN0clJlZ2V4LFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgZGF0YU1hcCxcbiAgICAgICAgeFZhbHVlTWFwLFxuICAgICAgICByZW5kZXJJbmZvXG4gICAgKTtcbn1cblxuLy8gSW4gZm9ybSAncmVnZXggd2l0aCB2YWx1ZScsIG5hbWUgZ3JvdXAgJ3ZhbHVlJyBmcm9tIHVzZXJzXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tVGV4dChcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgcXVlcnk6IFF1ZXJ5LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgZGF0YU1hcDogRGF0YU1hcCxcbiAgICB4VmFsdWVNYXA6IFhWYWx1ZU1hcFxuKTogYm9vbGVhbiB7XG4gICAgLy8gY29uc29sZS5sb2coXCJjb2xsZWN0RGF0YUZyb21UZXh0XCIpO1xuXG4gICAgbGV0IHN0clJlZ2V4ID0gcXVlcnkuZ2V0VGFyZ2V0KCk7XG4gICAgLy8gY29uc29sZS5sb2coc3RyUmVnZXgpO1xuXG4gICAgcmV0dXJuIGV4dHJhY3REYXRhVXNpbmdSZWdleFdpdGhNdWx0aXBsZVZhbHVlcyhcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgc3RyUmVnZXgsXG4gICAgICAgIHF1ZXJ5LFxuICAgICAgICBkYXRhTWFwLFxuICAgICAgICB4VmFsdWVNYXAsXG4gICAgICAgIHJlbmRlckluZm9cbiAgICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tRmlsZU1ldGEoXG4gICAgZmlsZTogVEZpbGUsXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGRhdGFNYXA6IERhdGFNYXAsXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXBcbik6IGJvb2xlYW4ge1xuICAgIC8vIGNvbnNvbGUubG9nKFwiY29sbGVjdERhdGFGcm9tRmlsZU1ldGFcIik7XG5cbiAgICBpZiAoZmlsZSAmJiBmaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZmlsZS5zdGF0KTtcblxuICAgICAgICBsZXQgdGFyZ2V0ID0gcXVlcnkuZ2V0VGFyZ2V0KCk7XG4gICAgICAgIGxldCB4VmFsdWUgPSB4VmFsdWVNYXAuZ2V0KHJlbmRlckluZm8ueERhdGFzZXRbcXVlcnkuZ2V0SWQoKV0pO1xuXG4gICAgICAgIGlmICh0YXJnZXQgPT09IFwiY0RhdGVcIikge1xuICAgICAgICAgICAgbGV0IGN0aW1lID0gZmlsZS5zdGF0LmN0aW1lOyAvLyB1bml4IHRpbWVcbiAgICAgICAgICAgIHF1ZXJ5LnZhbHVlVHlwZSA9IFZhbHVlVHlwZS5EYXRlO1xuICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xuICAgICAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIGN0aW1lKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJtRGF0ZVwiKSB7XG4gICAgICAgICAgICBsZXQgbXRpbWUgPSBmaWxlLnN0YXQubXRpbWU7IC8vIHVuaXggdGltZVxuICAgICAgICAgICAgcXVlcnkudmFsdWVUeXBlID0gVmFsdWVUeXBlLkRhdGU7XG4gICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XG4gICAgICAgICAgICBhZGRUb0RhdGFNYXAoZGF0YU1hcCwgeFZhbHVlLCBxdWVyeSwgbXRpbWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09PSBcInNpemVcIikge1xuICAgICAgICAgICAgbGV0IHNpemUgPSBmaWxlLnN0YXQuc2l6ZTsgLy8gbnVtYmVyIGluXG4gICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XG4gICAgICAgICAgICBhZGRUb0RhdGFNYXAoZGF0YU1hcCwgeFZhbHVlLCBxdWVyeSwgc2l6ZSk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgPT09IFwibnVtV29yZHNcIikge1xuICAgICAgICAgICAgbGV0IG51bVdvcmRzID0gaGVscGVyLmdldFdvcmRDb3VudChjb250ZW50KTtcbiAgICAgICAgICAgIGFkZFRvRGF0YU1hcChkYXRhTWFwLCB4VmFsdWUsIHF1ZXJ5LCBudW1Xb3Jkcyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgPT09IFwibnVtQ2hhcnNcIikge1xuICAgICAgICAgICAgbGV0IG51bUNoYXJzID0gaGVscGVyLmdldENoYXJhY3RlckNvdW50KGNvbnRlbnQpO1xuICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xuICAgICAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIG51bUNoYXJzKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJudW1TZW50ZW5jZXNcIikge1xuICAgICAgICAgICAgbGV0IG51bVNlbnRlbmNlcyA9IGhlbHBlci5nZXRTZW50ZW5jZUNvdW50KGNvbnRlbnQpO1xuICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xuICAgICAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIG51bVNlbnRlbmNlcyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgPT09IFwibmFtZVwiKSB7XG4gICAgICAgICAgICBsZXQgdGFyZ2V0TWVhc3VyZSA9IDAuMDtcbiAgICAgICAgICAgIGxldCB0YXJnZXRFeGlzdCA9IGZhbHNlO1xuICAgICAgICAgICAgbGV0IHJldFBhcnNlID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KFxuICAgICAgICAgICAgICAgIGZpbGUuYmFzZW5hbWUsXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby50ZXh0VmFsdWVNYXBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZiAocmV0UGFyc2UudmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAocmV0UGFyc2UudHlwZSA9PT0gVmFsdWVUeXBlLlRpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TWVhc3VyZSA9IHJldFBhcnNlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRFeGlzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5LnZhbHVlVHlwZSA9IFZhbHVlVHlwZS5UaW1lO1xuICAgICAgICAgICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgIXJlbmRlckluZm8uaWdub3JlWmVyb1ZhbHVlW3F1ZXJ5LmdldElkKCldIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICByZXRQYXJzZS52YWx1ZSAhPT0gMFxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE1lYXN1cmUgKz0gcmV0UGFyc2UudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRFeGlzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGFyZ2V0RXhpc3QpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRhcmdldE1lYXN1cmU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBhZGRUb0RhdGFNYXAoZGF0YU1hcCwgeFZhbHVlLCBxdWVyeSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG4vLyBJbiBmb3JtICdrZXk6OnZhbHVlJywgbmFtZWQgZ3JvdXAgJ3ZhbHVlJyBmcm9tIHBsdWdpblxuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3REYXRhRnJvbUR2RmllbGQoXG4gICAgY29udGVudDogc3RyaW5nLFxuICAgIHF1ZXJ5OiBRdWVyeSxcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgIGRhdGFNYXA6IERhdGFNYXAsXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXBcbik6IGJvb2xlYW4ge1xuICAgIGxldCBkdlRhcmdldCA9IHF1ZXJ5LmdldFRhcmdldCgpO1xuICAgIGlmIChxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKSkge1xuICAgICAgICBkdlRhcmdldCA9IHF1ZXJ5LmdldFBhcmVudFRhcmdldCgpOyAvLyB1c2UgcGFyZW50IHRhZyBuYW1lIGZvciBtdWx0aXBsZSB2YWx1ZXNcbiAgICB9XG4gICAgLy8gRGF0YXZpZXcgYXNrIHVzZXIgdG8gYWRkIGRhc2hlcyBmb3Igc3BhY2VzIGFzIHNlYXJjaCB0YXJnZXRcbiAgICAvLyBTbyBhIGRhc2ggbWF5IHN0YW5kcyBmb3IgYSByZWFsIGRhc2ggb3IgYSBzcGFjZVxuICAgIGR2VGFyZ2V0ID0gZHZUYXJnZXQucmVwbGFjZShcIi1cIiwgXCJbXFxcXHNcXFxcLV1cIik7XG5cbiAgICAvLyBUZXN0IHRoaXMgaW4gUmVnZXgxMDFcbiAgICAvLyByZW1lbWJlciAnXFxzJyBpbmNsdWRlcyBuZXcgbGluZVxuICAgIC8vIChefCB8XFx0fFxcfCkoXFxbfFxcKCk/XFwqezAsMn1kdlRhcmdldFxcKnswLDJ9KDo6WyB8XFx0XSooPzx2YWx1ZT5bXFxkXFwuXFwvXFwtXFx3LEA7IFxcdDpdKikoXFxdfFxcKSk/KVxuICAgIGxldCBzdHJSZWdleCA9XG4gICAgICAgIFN0cmluZy5yYXdgKF58IHxcXHR8XFx8KShcXFt8XFwoKT9cXCp7MCwyfWAgK1xuICAgICAgICBkdlRhcmdldCArXG4gICAgICAgIFN0cmluZy5yYXdgXFwqezAsMn0oOjpbIHxcXHRdKig/PHZhbHVlPltcXHB7RXh0UGljdH1cXGRcXC5cXC9cXC1cXHcsQDsgXFx0OmAgK1xuICAgICAgICBXb3JkQ2hhcmFjdGVycyArXG4gICAgICAgIFN0cmluZy5yYXdgXSopKFxcXXxcXCkpPylgO1xuICAgIC8vIGNvbnNvbGUubG9nKHN0clJlZ2V4KTtcblxuICAgIHJldHVybiBleHRyYWN0RGF0YVVzaW5nUmVnZXhXaXRoTXVsdGlwbGVWYWx1ZXMoXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIHN0clJlZ2V4LFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgZGF0YU1hcCxcbiAgICAgICAgeFZhbHVlTWFwLFxuICAgICAgICByZW5kZXJJbmZvXG4gICAgKTtcbn1cblxuLy8gSW4gZm9ybSAncmVnZXggd2l0aCB2YWx1ZScsIG5hbWUgZ3JvdXAgJ3ZhbHVlJyBmcm9tIHVzZXJzXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tVGFzayhcbiAgICBjb250ZW50OiBzdHJpbmcsXG4gICAgcXVlcnk6IFF1ZXJ5LFxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXG4gICAgZGF0YU1hcDogRGF0YU1hcCxcbiAgICB4VmFsdWVNYXA6IFhWYWx1ZU1hcFxuKTogYm9vbGVhbiB7XG4gICAgLy8gY29uc29sZS5sb2coXCJjb2xsZWN0RGF0YUZyb21UYXNrXCIpO1xuICAgIGxldCBzZWFyY2hUeXBlID0gcXVlcnkuZ2V0VHlwZSgpO1xuICAgIC8vIGNvbnNvbGUubG9nKHNlYXJjaFR5cGUpO1xuXG4gICAgbGV0IHN0clJlZ2V4ID0gcXVlcnkuZ2V0VGFyZ2V0KCk7XG4gICAgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuVGFzaykge1xuICAgICAgICBzdHJSZWdleCA9IFwiXFxcXFtbXFxcXHN4XVxcXFxdXFxcXHNcIiArIHN0clJlZ2V4O1xuICAgIH0gZWxzZSBpZiAoc2VhcmNoVHlwZSA9PT0gU2VhcmNoVHlwZS5UYXNrRG9uZSkge1xuICAgICAgICBzdHJSZWdleCA9IFwiXFxcXFt4XFxcXF1cXFxcc1wiICsgc3RyUmVnZXg7XG4gICAgfSBlbHNlIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLlRhc2tOb3REb25lKSB7XG4gICAgICAgIHN0clJlZ2V4ID0gXCJcXFxcW1xcXFxzXFxcXF1cXFxcc1wiICsgc3RyUmVnZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy8gYWxsXG4gICAgICAgIHN0clJlZ2V4ID0gXCJcXFxcW1tcXFxcc3hdXFxcXF1cXFxcc1wiICsgc3RyUmVnZXg7XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKHN0clJlZ2V4KTtcblxuICAgIHJldHVybiBleHRyYWN0RGF0YVVzaW5nUmVnZXhXaXRoTXVsdGlwbGVWYWx1ZXMoXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIHN0clJlZ2V4LFxuICAgICAgICBxdWVyeSxcbiAgICAgICAgZGF0YU1hcCxcbiAgICAgICAgeFZhbHVlTWFwLFxuICAgICAgICByZW5kZXJJbmZvXG4gICAgKTtcbn1cbiIsImltcG9ydCB7IEFwcCwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0IFRyYWNrZXIgZnJvbSBcIi4vbWFpblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNrZXJTZXR0aW5ncyB7XG4gICAgZm9sZGVyOiBzdHJpbmc7XG4gICAgZGF0ZUZvcm1hdDogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgREVGQVVMVF9TRVRUSU5HUzogVHJhY2tlclNldHRpbmdzID0ge1xuICAgIGZvbGRlcjogXCIvXCIsXG4gICAgZGF0ZUZvcm1hdDogXCJZWVlZLU1NLUREXCIsXG59O1xuXG5leHBvcnQgY2xhc3MgVHJhY2tlclNldHRpbmdUYWIgZXh0ZW5kcyBQbHVnaW5TZXR0aW5nVGFiIHtcbiAgICBwbHVnaW46IFRyYWNrZXI7XG5cbiAgICBjb25zdHJ1Y3RvcihhcHA6IEFwcCwgcGx1Z2luOiBUcmFja2VyKSB7XG4gICAgICAgIHN1cGVyKGFwcCwgcGx1Z2luKTtcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XG4gICAgfVxuXG4gICAgZGlzcGxheSgpOiB2b2lkIHtcbiAgICAgICAgbGV0IHsgY29udGFpbmVyRWwgfSA9IHRoaXM7XG5cbiAgICAgICAgY29udGFpbmVyRWwuZW1wdHkoKTtcblxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRGVmYXVsdCBmb2xkZXIgbG9jYXRpb25cIilcbiAgICAgICAgICAgIC5zZXREZXNjKFxuICAgICAgICAgICAgICAgIFwiRmlsZXMgaW4gdGhpcyBmb2xkZXIgd2lsbCBiZSBwYXJzZWQgYW5kIHVzZWQgYXMgaW5wdXQgZGF0YSBvZiB0aGUgdHJhY2tlciBwbHVnaW4uXFxuWW91IGNhbiBhbHNvIG92ZXJyaWRlIGl0IHVzaW5nICdmb2xkZXInIGFyZ3VtZW50IGluIHRoZSB0cmFja2VyIGNvZGVibG9jay5cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmFkZFRleHQoKHRleHQpID0+XG4gICAgICAgICAgICAgICAgdGV4dFxuICAgICAgICAgICAgICAgICAgICAuc2V0UGxhY2Vob2xkZXIoXCJGb2xkZXIgUGF0aFwiKVxuICAgICAgICAgICAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZm9sZGVyKVxuICAgICAgICAgICAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXIgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucGx1Z2luLnNhdmVTZXR0aW5ncygpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKTtcblxuICAgICAgICBuZXcgU2V0dGluZyhjb250YWluZXJFbClcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRGVmYXVsdCBkYXRlIGZvcm1hdFwiKVxuICAgICAgICAgICAgLnNldERlc2MoXG4gICAgICAgICAgICAgICAgXCJUaGlzIGZvcm1hdCBpcyB1c2VkIHRvIHBhcnNlIHRoZSBkYXRlIGluIHlvdXIgZGlhcnkgdGl0bGUuXFxuWW91IGNhbiBhbHNvIG92ZXJyaWRlIGl0IHVzaW5nICdkYXRlRm9ybWF0JyBhcmd1bWVudCBpbiB0aGUgdHJhY2tlciBjb2RlYmxvY2suXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5hZGRUZXh0KCh0ZXh0KSA9PlxuICAgICAgICAgICAgICAgIHRleHRcbiAgICAgICAgICAgICAgICAgICAgLnNldFBsYWNlaG9sZGVyKFwiWVlZWS1NTS1ERFwiKVxuICAgICAgICAgICAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZGF0ZUZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wbHVnaW4uc2V0dGluZ3MuZGF0ZUZvcm1hdCA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEFwcCwgQ2FjaGVkTWV0YWRhdGEsIGdldExpbmtwYXRoLCBQbHVnaW4gfSBmcm9tIFwib2JzaWRpYW5cIjtcbmltcG9ydCB7IE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQsIE1hcmtkb3duVmlldywgRWRpdG9yIH0gZnJvbSBcIm9ic2lkaWFuXCI7XG5pbXBvcnQgeyBURmlsZSwgVEZvbGRlciwgbm9ybWFsaXplUGF0aCB9IGZyb20gXCJvYnNpZGlhblwiO1xuaW1wb3J0ICogYXMgcmVuZGVyaW5nIGZyb20gXCIuL3JlbmRlcmluZ1wiO1xuaW1wb3J0IHsgZ2V0UmVuZGVySW5mb0Zyb21ZYW1sIH0gZnJvbSBcIi4vcGFyc2luZ1wiO1xuaW1wb3J0IHtcbiAgICBEYXRhc2V0cyxcbiAgICBRdWVyeSxcbiAgICBRdWVyeVZhbHVlUGFpcixcbiAgICBHcmFwaFR5cGUsXG4gICAgU2VhcmNoVHlwZSxcbiAgICBUYWJsZURhdGEsXG4gICAgUmVuZGVySW5mbyxcbiAgICBYVmFsdWVNYXAsXG4gICAgRGF0YU1hcCxcbiAgICBDdXN0b21EYXRhc2V0SW5mbyxcbiAgICBDb2xsZWN0aW5nUHJvY2Vzc0luZm8sXG4gICAgVmFsdWVUeXBlLFxufSBmcm9tIFwiLi9kYXRhXCI7XG5pbXBvcnQgKiBhcyBjb2xsZWN0aW5nIGZyb20gXCIuL2NvbGxlY3RpbmdcIjtcbmltcG9ydCB7XG4gICAgVHJhY2tlclNldHRpbmdzLFxuICAgIERFRkFVTFRfU0VUVElOR1MsXG4gICAgVHJhY2tlclNldHRpbmdUYWIsXG59IGZyb20gXCIuL3NldHRpbmdzXCI7XG5pbXBvcnQgKiBhcyBoZWxwZXIgZnJvbSBcIi4vaGVscGVyXCI7XG5pbXBvcnQgeyBNb21lbnQgfSBmcm9tIFwibW9tZW50XCI7XG4vLyBpbXBvcnQgeyBnZXREYWlseU5vdGVTZXR0aW5ncyB9IGZyb20gXCJvYnNpZGlhbi1kYWlseS1ub3Rlcy1pbnRlcmZhY2VcIjtcblxuZGVjbGFyZSBnbG9iYWwge1xuICAgIGludGVyZmFjZSBXaW5kb3cge1xuICAgICAgICBhcHA6IEFwcDtcbiAgICAgICAgbW9tZW50OiAoKSA9PiBNb21lbnQ7XG4gICAgfVxufVxuXG5kZWNsYXJlIG1vZHVsZSAnb2JzaWRpYW4nIHtcbiAgICBpbnRlcmZhY2UgVmF1bHQge1xuICAgICAgICBnZXRDb25maWcocHJvcDogc3RyaW5nKTogYW55O1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVHJhY2tlciBleHRlbmRzIFBsdWdpbiB7XG4gICAgc2V0dGluZ3M6IFRyYWNrZXJTZXR0aW5ncztcblxuICAgIGFzeW5jIG9ubG9hZCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJsb2FkaW5nIG9ic2lkaWFuLXRyYWNrZXIgcGx1Z2luXCIpO1xuXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XG5cbiAgICAgICAgdGhpcy5hZGRTZXR0aW5nVGFiKG5ldyBUcmFja2VyU2V0dGluZ1RhYih0aGlzLmFwcCwgdGhpcykpO1xuXG4gICAgICAgIHRoaXMucmVnaXN0ZXJNYXJrZG93bkNvZGVCbG9ja1Byb2Nlc3NvcihcbiAgICAgICAgICAgIFwidHJhY2tlclwiLFxuICAgICAgICAgICAgdGhpcy5wb3N0cHJvY2Vzc29yLmJpbmQodGhpcylcbiAgICAgICAgKTtcblxuICAgICAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgICAgICAgaWQ6IFwiYWRkLWxpbmUtY2hhcnQtdHJhY2tlclwiLFxuICAgICAgICAgICAgbmFtZTogXCJBZGQgTGluZSBDaGFydCBUcmFja2VyXCIsXG4gICAgICAgICAgICBjYWxsYmFjazogKCkgPT4gdGhpcy5hZGRDb2RlQmxvY2soR3JhcGhUeXBlLkxpbmUpLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgICAgICAgaWQ6IFwiYWRkLWJhci1jaGFydC10cmFja2VyXCIsXG4gICAgICAgICAgICBuYW1lOiBcIkFkZCBCYXIgQ2hhcnQgVHJhY2tlclwiLFxuICAgICAgICAgICAgY2FsbGJhY2s6ICgpID0+IHRoaXMuYWRkQ29kZUJsb2NrKEdyYXBoVHlwZS5CYXIpLFxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmFkZENvbW1hbmQoe1xuICAgICAgICAgICAgaWQ6IFwiYWRkLXN1bW1hcnktdHJhY2tlclwiLFxuICAgICAgICAgICAgbmFtZTogXCJBZGQgU3VtbWFyeSBUcmFja2VyXCIsXG4gICAgICAgICAgICBjYWxsYmFjazogKCkgPT4gdGhpcy5hZGRDb2RlQmxvY2soR3JhcGhUeXBlLlN1bW1hcnkpLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyBsb2FkU2V0dGluZ3MoKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBERUZBVUxUX1NFVFRJTkdTLFxuICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkRGF0YSgpXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2F2ZVNldHRpbmdzKCkge1xuICAgICAgICBhd2FpdCB0aGlzLnNhdmVEYXRhKHRoaXMuc2V0dGluZ3MpO1xuICAgIH1cblxuICAgIHJlbmRlckVycm9yTWVzc2FnZShtZXNzYWdlOiBzdHJpbmcsIGNhbnZhczogSFRNTEVsZW1lbnQsIGVsOiBIVE1MRWxlbWVudCkge1xuICAgICAgICByZW5kZXJpbmcucmVuZGVyRXJyb3JNZXNzYWdlKGNhbnZhcywgbWVzc2FnZSk7XG4gICAgICAgIGVsLmFwcGVuZENoaWxkKGNhbnZhcyk7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvbnVubG9hZCgpIHtcbiAgICAgICAgY29uc29sZS5sb2coXCJ1bmxvYWRpbmcgb2JzaWRpYW4tdHJhY2tlciBwbHVnaW5cIik7XG4gICAgfVxuXG4gICAgZ2V0RmlsZXNJbkZvbGRlcihcbiAgICAgICAgZm9sZGVyOiBURm9sZGVyLFxuICAgICAgICBpbmNsdWRlU3ViRm9sZGVyczogYm9vbGVhbiA9IHRydWVcbiAgICApOiBURmlsZVtdIHtcbiAgICAgICAgbGV0IGZpbGVzOiBURmlsZVtdID0gW107XG5cbiAgICAgICAgZm9yIChsZXQgaXRlbSBvZiBmb2xkZXIuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICAgICAgICAgICAgICBpZiAoaXRlbS5leHRlbnNpb24gPT09IFwibWRcIikge1xuICAgICAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gaW5zdGFuY2VvZiBURm9sZGVyICYmIGluY2x1ZGVTdWJGb2xkZXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpbGVzID0gZmlsZXMuY29uY2F0KHRoaXMuZ2V0RmlsZXNJbkZvbGRlcihpdGVtKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpbGVzO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEZpbGVzKFxuICAgICAgICBmaWxlczogVEZpbGVbXSxcbiAgICAgICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcbiAgICAgICAgaW5jbHVkZVN1YkZvbGRlcnM6IGJvb2xlYW4gPSB0cnVlXG4gICAgKSB7XG4gICAgICAgIGlmICghZmlsZXMpIHJldHVybjtcblxuICAgICAgICBsZXQgZm9sZGVyVG9TZWFyY2ggPSByZW5kZXJJbmZvLmZvbGRlcjtcbiAgICAgICAgbGV0IHVzZVNwZWNpZmllZEZpbGVzT25seSA9IHJlbmRlckluZm8uc3BlY2lmaWVkRmlsZXNPbmx5O1xuICAgICAgICBsZXQgc3BlY2lmaWVkRmlsZXMgPSByZW5kZXJJbmZvLmZpbGU7XG4gICAgICAgIGxldCBmaWxlc0NvbnRhaW5zTGlua2VkRmlsZXMgPSByZW5kZXJJbmZvLmZpbGVDb250YWluc0xpbmtlZEZpbGVzO1xuICAgICAgICBsZXQgZmlsZU11bHRpcGxpZXJBZnRlckxpbmsgPSByZW5kZXJJbmZvLmZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rO1xuXG4gICAgICAgIC8vIEluY2x1ZGUgZmlsZXMgaW4gZm9sZGVyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHVzZVNwZWNpZmllZEZpbGVzT25seSk7XG4gICAgICAgIGlmICghdXNlU3BlY2lmaWVkRmlsZXNPbmx5KSB7XG4gICAgICAgICAgICBsZXQgZm9sZGVyID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKFxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZVBhdGgoZm9sZGVyVG9TZWFyY2gpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKGZvbGRlciAmJiBmb2xkZXIgaW5zdGFuY2VvZiBURm9sZGVyKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZvbGRlckZpbGVzID0gdGhpcy5nZXRGaWxlc0luRm9sZGVyKGZvbGRlcik7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZmlsZSBvZiBmb2xkZXJGaWxlcykge1xuICAgICAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEluY2x1ZGUgc3BlY2lmaWVkIGZpbGVcbiAgICAgICAgLy8gY29uc29sZS5sb2coc3BlY2lmaWVkRmlsZXMpO1xuICAgICAgICBmb3IgKGxldCBmaWxlUGF0aCBvZiBzcGVjaWZpZWRGaWxlcykge1xuICAgICAgICAgICAgbGV0IHBhdGggPSBmaWxlUGF0aDtcbiAgICAgICAgICAgIGlmICghcGF0aC5lbmRzV2l0aChcIi5tZFwiKSkge1xuICAgICAgICAgICAgICAgIHBhdGggKz0gXCIubWRcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhdGggPSBub3JtYWxpemVQYXRoKHBhdGgpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocGF0aCk7XG5cbiAgICAgICAgICAgIGxldCBmaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKHBhdGgpO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZmlsZSk7XG4gICAgICAgICAgICBpZiAoZmlsZSAmJiBmaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbGVzKTtcblxuICAgICAgICAvLyBJbmNsdWRlIGZpbGVzIGluIHBvaW50ZWQgYnkgbGlua3MgaW4gZmlsZVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmaWxlc0NvbnRhaW5zTGlua2VkRmlsZXMpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhmaWxlTXVsdGlwbGllckFmdGVyTGluayk7XG4gICAgICAgIGxldCBsaW5rZWRGaWxlTXVsdGlwbGllciA9IDE7XG4gICAgICAgIGxldCBzZWFyY2hGaWxlTXVsdGlmcGllckFmdGVyTGluayA9IHRydWU7XG4gICAgICAgIGlmIChmaWxlTXVsdGlwbGllckFmdGVyTGluayA9PT0gXCJcIikge1xuICAgICAgICAgICAgc2VhcmNoRmlsZU11bHRpZnBpZXJBZnRlckxpbmsgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICgvXlswLTldKyQvLnRlc3QoZmlsZU11bHRpcGxpZXJBZnRlckxpbmspKSB7XG4gICAgICAgICAgICAvLyBpbnRlZ2VyXG4gICAgICAgICAgICBsaW5rZWRGaWxlTXVsdGlwbGllciA9IHBhcnNlRmxvYXQoZmlsZU11bHRpcGxpZXJBZnRlckxpbmspO1xuICAgICAgICAgICAgc2VhcmNoRmlsZU11bHRpZnBpZXJBZnRlckxpbmsgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICghL1xcPzx2YWx1ZT4vLnRlc3QoZmlsZU11bHRpcGxpZXJBZnRlckxpbmspKSB7XG4gICAgICAgICAgICAvLyBubyAndmFsdWUnIG5hbWVkIGdyb3VwXG4gICAgICAgICAgICBzZWFyY2hGaWxlTXVsdGlmcGllckFmdGVyTGluayA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGZpbGVQYXRoIG9mIGZpbGVzQ29udGFpbnNMaW5rZWRGaWxlcykge1xuICAgICAgICAgICAgaWYgKCFmaWxlUGF0aC5lbmRzV2l0aChcIi5tZFwiKSkge1xuICAgICAgICAgICAgICAgIGZpbGVQYXRoICs9IFwiLm1kXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgZmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChcbiAgICAgICAgICAgICAgICBub3JtYWxpemVQYXRoKGZpbGVQYXRoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChmaWxlICYmIGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgICAgICAgICAgIC8vIEdldCBsaW5rZWQgZmlsZXNcbiAgICAgICAgICAgICAgICBsZXQgZmlsZUNhY2hlID0gdGhpcy5hcHAubWV0YWRhdGFDYWNoZS5nZXRGaWxlQ2FjaGUoZmlsZSk7XG4gICAgICAgICAgICAgICAgbGV0IGZpbGVDb250ZW50ID0gYXdhaXQgdGhpcy5hcHAudmF1bHQuYWRhcHRlci5yZWFkKGZpbGUucGF0aCk7XG4gICAgICAgICAgICAgICAgbGV0IGxpbmVzID0gZmlsZUNvbnRlbnQuc3BsaXQoXG4gICAgICAgICAgICAgICAgICAgIC9cXHJcXG58W1xcblxcdlxcZlxcclxceDg1XFx1MjAyOFxcdTIwMjldL1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobGluZXMpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFmaWxlQ2FjaGU/LmxpbmtzKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIGZvciAobGV0IGxpbmsgb2YgZmlsZUNhY2hlLmxpbmtzKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbGluaykgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIGxldCBsaW5rZWRGaWxlID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0Rmlyc3RMaW5rcGF0aERlc3QoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluay5saW5rLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVQYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGlua2VkRmlsZSAmJiBsaW5rZWRGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWFyY2hGaWxlTXVsdGlmcGllckFmdGVyTGluaykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgbGluZSBvZiBsaW5rIGluIGZpbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluZU51bWJlciA9IGxpbmsucG9zaXRpb24uZW5kLmxpbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobGluZU51bWJlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVOdW1iZXIgPj0gMCAmJiBsaW5lTnVtYmVyIDwgbGluZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5lID0gbGluZXNbbGluZU51bWJlcl07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyeSBleHRyYWN0IG11bHRpcGxpZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKGxpbmsucG9zaXRpb24pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzcGxpdHRlZCA9IGxpbmUuc3BsaXQobGluay5vcmlnaW5hbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHNwbGl0dGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRvUGFyc2UgPSBzcGxpdHRlZFsxXS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RyUmVnZXggPSBmaWxlTXVsdGlwbGllckFmdGVyTGluaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZWdleCA9IG5ldyBSZWdFeHAoc3RyUmVnZXgsIFwiZ21cIik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWF0Y2g7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyh0b1BhcnNlKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhtYXRjaCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgbWF0Y2guZ3JvdXBzICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bmRlZmluZWRcIiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgbWF0Y2guZ3JvdXBzLnZhbHVlICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bmRlZmluZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtdXN0IGhhdmUgZ3JvdXAgbmFtZSAndmFsdWUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXRQYXJzZSA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIucGFyc2VGbG9hdEZyb21BbnkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2guZ3JvdXBzLnZhbHVlLnRyaW0oKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnRleHRWYWx1ZU1hcFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldFBhcnNlLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZWRGaWxlTXVsdGlwbGllciA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0UGFyc2UudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaW5rZWRGaWxlTXVsdGlwbGllcjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZXMucHVzaChsaW5rZWRGaWxlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbGVzKTtcbiAgICB9XG5cbiAgICBhc3luYyBwb3N0cHJvY2Vzc29yKFxuICAgICAgICBzb3VyY2U6IHN0cmluZyxcbiAgICAgICAgZWw6IEhUTUxFbGVtZW50LFxuICAgICAgICBjdHg6IE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHRcbiAgICApIHtcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJwb3N0cHJvY2Vzc1wiKTtcbiAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcblxuICAgICAgICBsZXQgeWFtbFRleHQgPSBzb3VyY2UudHJpbSgpO1xuXG4gICAgICAgIC8vIFJlcGxhY2UgYWxsIHRhYnMgYnkgc3BhY2VzXG4gICAgICAgIGxldCB0YWJTaXplID0gdGhpcy5hcHAudmF1bHQuZ2V0Q29uZmlnKFwidGFiU2l6ZVwiKTtcbiAgICAgICAgbGV0IHNwYWNlcyA9IEFycmF5KHRhYlNpemUpLmZpbGwoXCIgXCIpLmpvaW4oXCJcIik7XG4gICAgICAgIHlhbWxUZXh0ID0geWFtbFRleHQucmVwbGFjZSgvXFx0L2dtLCBzcGFjZXMpO1xuXG4gICAgICAgIC8vIEdldCByZW5kZXIgaW5mb1xuICAgICAgICBsZXQgcmV0UmVuZGVySW5mbyA9IGdldFJlbmRlckluZm9Gcm9tWWFtbCh5YW1sVGV4dCwgdGhpcyk7XG4gICAgICAgIGlmICh0eXBlb2YgcmV0UmVuZGVySW5mbyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRXJyb3JNZXNzYWdlKHJldFJlbmRlckluZm8sIGNhbnZhcywgZWwpO1xuICAgICAgICB9XG4gICAgICAgIGxldCByZW5kZXJJbmZvID0gcmV0UmVuZGVySW5mbyBhcyBSZW5kZXJJbmZvO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcblxuICAgICAgICAvLyBHZXQgZmlsZXNcbiAgICAgICAgbGV0IGZpbGVzOiBURmlsZVtdID0gW107XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBhd2FpdCB0aGlzLmdldEZpbGVzKGZpbGVzLCByZW5kZXJJbmZvKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRXJyb3JNZXNzYWdlKGUubWVzc2FnZSwgY2FudmFzLCBlbCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgIFwiTm8gbWFya2Rvd24gZmlsZXMgZm91bmQgaW4gZm9sZGVyXCIsXG4gICAgICAgICAgICAgICAgY2FudmFzLFxuICAgICAgICAgICAgICAgIGVsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbGVzKTtcblxuICAgICAgICAvLyBsZXQgZGFpbHlOb3Rlc1NldHRpbmdzID0gZ2V0RGFpbHlOb3RlU2V0dGluZ3MoKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZGFpbHlOb3Rlc1NldHRpbmdzKTtcbiAgICAgICAgLy8gSSBhbHdheXMgZ290IFlZWVktTU0tREQgZnJvbSBkYWlseU5vdGVzU2V0dGluZ3MuZm9ybWF0XG4gICAgICAgIC8vIFVzZSBvd24gc2V0dGluZ3MgcGFuZWwgZm9yIG5vd1xuXG4gICAgICAgIC8vIENvbGxlY3RpbmcgZGF0YSB0byBkYXRhTWFwIGZpcnN0XG4gICAgICAgIGxldCBkYXRhTWFwOiBEYXRhTWFwID0gbmV3IE1hcCgpOyAvLyB7c3RyRGF0ZTogW3F1ZXJ5OiB2YWx1ZSwgLi4uXX1cbiAgICAgICAgbGV0IHByb2Nlc3NJbmZvID0gbmV3IENvbGxlY3RpbmdQcm9jZXNzSW5mbygpO1xuICAgICAgICBwcm9jZXNzSW5mby5maWxlVG90YWwgPSBmaWxlcy5sZW5ndGg7XG5cbiAgICAgICAgLy8gQ29sbGVjdCBkYXRhIGZyb20gZmlsZXMsIGVhY2ggZmlsZSBoYXMgb25lIGRhdGEgcG9pbnQgZm9yIGVhY2ggcXVlcnlcbiAgICAgICAgY29uc3QgbG9vcEZpbGVQcm9taXNlcyA9IGZpbGVzLm1hcChhc3luYyAoZmlsZSkgPT4ge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZmlsZS5iYXNlbmFtZSk7XG4gICAgICAgICAgICAvLyBHZXQgZmlsZUNhY2hlIGFuZCBjb250ZW50XG4gICAgICAgICAgICBsZXQgZmlsZUNhY2hlOiBDYWNoZWRNZXRhZGF0YSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgbmVlZEZpbGVDYWNoZSA9IHJlbmRlckluZm8ucXVlcmllcy5zb21lKChxKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHR5cGUgPSBxLmdldFR5cGUoKTtcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gcS5nZXRUYXJnZXQoKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFNlYXJjaFR5cGUuRnJvbnRtYXR0ZXIgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gU2VhcmNoVHlwZS5UYWcgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gU2VhcmNoVHlwZS5XaWtpIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFNlYXJjaFR5cGUuV2lraUxpbmsgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gU2VhcmNoVHlwZS5XaWtpRGlzcGxheVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAobmVlZEZpbGVDYWNoZSkge1xuICAgICAgICAgICAgICAgIGZpbGVDYWNoZSA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGZpbGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgY29udGVudDogc3RyaW5nID0gbnVsbDtcbiAgICAgICAgICAgIGxldCBuZWVkQ29udGVudCA9IHJlbmRlckluZm8ucXVlcmllcy5zb21lKChxKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHR5cGUgPSBxLmdldFR5cGUoKTtcbiAgICAgICAgICAgICAgICBsZXQgdGFyZ2V0ID0gcS5nZXRUYXJnZXQoKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFNlYXJjaFR5cGUuVGFnIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFNlYXJjaFR5cGUuVGV4dCB8fFxuICAgICAgICAgICAgICAgICAgICB0eXBlID09PSBTZWFyY2hUeXBlLmR2RmllbGQgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gU2VhcmNoVHlwZS5UYXNrIHx8XG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFNlYXJjaFR5cGUuVGFza0RvbmUgfHxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gU2VhcmNoVHlwZS5UYXNrTm90RG9uZVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFNlYXJjaFR5cGUuRmlsZU1ldGEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID09PSBcIm51bVdvcmRzXCIgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9PT0gXCJudW1DaGFyc1wiIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQgPT09IFwibnVtU2VudGVuY2VzXCJcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChuZWVkQ29udGVudCkge1xuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBhd2FpdCB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLnJlYWQoZmlsZS5wYXRoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gR2V0IHhWYWx1ZSBhbmQgYWRkIGl0IGludG8geFZhbHVlTWFwIGZvciBsYXRlciB1c2VcbiAgICAgICAgICAgIGxldCB4VmFsdWVNYXA6IFhWYWx1ZU1hcCA9IG5ldyBNYXAoKTsgLy8gcXVlcnlJZDogeFZhbHVlIGZvciB0aGlzIGZpbGVcbiAgICAgICAgICAgIGxldCBza2lwVGhpc0ZpbGUgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ueERhdGFzZXQpO1xuICAgICAgICAgICAgZm9yIChsZXQgeERhdGFzZXRJZCBvZiByZW5kZXJJbmZvLnhEYXRhc2V0KSB7XG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYHhEYXRhc2V0SWQ6ICR7eERhdGFzZXRJZH1gKTtcbiAgICAgICAgICAgICAgICBpZiAoIXhWYWx1ZU1hcC5oYXMoeERhdGFzZXRJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHhEYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWQgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IHVzaW5nIGRhdGUgaW4gZmlsZW5hbWUgYXMgeFZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICB4RGF0ZSA9IGNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21GaWxlbmFtZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh4RGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgeERhdGFzZXRRdWVyeSA9IHJlbmRlckluZm8ucXVlcmllc1t4RGF0YXNldElkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHhEYXRhc2V0UXVlcnkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh4RGF0YXNldFF1ZXJ5LmdldFR5cGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2VhcmNoVHlwZS5Gcm9udG1hdHRlcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeERhdGUgPSBjb2xsZWN0aW5nLmdldERhdGVGcm9tRnJvbnRtYXR0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlQ2FjaGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0YXNldFF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNlYXJjaFR5cGUuVGFnOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0ZSA9IGNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21UYWcoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeERhdGFzZXRRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTZWFyY2hUeXBlLlRleHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRlID0gY29sbGVjdGluZy5nZXREYXRlRnJvbVRleHQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeERhdGFzZXRRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTZWFyY2hUeXBlLmR2RmllbGQ6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRlID0gY29sbGVjdGluZy5nZXREYXRlRnJvbUR2RmllbGQoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeERhdGFzZXRRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTZWFyY2hUeXBlLkZpbGVNZXRhOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0ZSA9IGNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21GaWxlTWV0YShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0YXNldFF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mb1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNlYXJjaFR5cGUuVGFzazpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNlYXJjaFR5cGUuVGFza0RvbmU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTZWFyY2hUeXBlLlRhc2tOb3REb25lOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0ZSA9IGNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21UYXNrKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRhc2V0UXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCF4RGF0ZS5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiSW52YWxpZCB4RGF0ZVwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNraXBUaGlzRmlsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5maWxlTm90SW5Gb3JtYXQrKztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZmlsZSBcIiArIGZpbGUuYmFzZW5hbWUgKyBcIiBhY2NlcHRlZFwiKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW5kZXJJbmZvLnN0YXJ0RGF0ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4RGF0ZSA8IHJlbmRlckluZm8uc3RhcnREYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBUaGlzRmlsZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmZpbGVPdXRPZkRhdGVSYW5nZSsrO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW5kZXJJbmZvLmVuZERhdGUgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGUgPiByZW5kZXJJbmZvLmVuZERhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2tpcFRoaXNGaWxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZmlsZU91dE9mRGF0ZVJhbmdlKys7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFza2lwVGhpc0ZpbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWFZhbHVlIHx8PSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlTWFwLnNldChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0YXNldElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5kYXRlVG9TdHIoeERhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5maWxlQXZhaWxhYmxlKys7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdldCBtaW4vbWF4IGRhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9jZXNzSW5mby5maWxlQXZhaWxhYmxlID09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5taW5EYXRlID0geERhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5tYXhEYXRlID0geERhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRlIDwgcHJvY2Vzc0luZm8ubWluRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5taW5EYXRlID0geERhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRlID4gcHJvY2Vzc0luZm8ubWF4RGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5tYXhEYXRlID0geERhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2tpcFRoaXNGaWxlKSByZXR1cm47XG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh4VmFsdWVNYXApO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYG1pbkRhdGU6ICR7bWluRGF0ZX1gKTtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGBtYXhEYXRlOiAke21heERhdGV9YCk7XG5cbiAgICAgICAgICAgIC8vIExvb3Agb3ZlciBxdWVyaWVzXG4gICAgICAgICAgICBsZXQgeURhdGFzZXRRdWVyaWVzID0gcmVuZGVySW5mby5xdWVyaWVzLmZpbHRlcigocSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBxLmdldFR5cGUoKSAhPT0gU2VhcmNoVHlwZS5UYWJsZSAmJiAhcS51c2VkQXNYRGF0YXNldDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coeURhdGFzZXRRdWVyaWVzKTtcblxuICAgICAgICAgICAgY29uc3QgbG9vcFF1ZXJ5UHJvbWlzZXMgPSB5RGF0YXNldFF1ZXJpZXMubWFwKGFzeW5jIChxdWVyeSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIEdldCB4VmFsdWUgZnJvbSBmaWxlIGlmIHhEYXRhc2V0IGFzc2lnbmVkXG4gICAgICAgICAgICAgICAgLy8gaWYgKHJlbmRlckluZm8ueERhdGFzZXQgIT09IG51bGwpXG4gICAgICAgICAgICAgICAgLy8gbGV0IHhEYXRhc2V0SWQgPSByZW5kZXJJbmZvLnhEYXRhc2V0O1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXJ5KTtcblxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU2VhcmNoIGZyb250bWF0dGVyIHRhZ3NcIik7XG4gICAgICAgICAgICAgICAgaWYgKGZpbGVDYWNoZSAmJiBxdWVyeS5nZXRUeXBlKCkgPT09IFNlYXJjaFR5cGUuVGFnKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEFkZCBmcm9udG1hdHRlciB0YWdzLCBhbGxvdyBzaW1wbGUgdGFnIG9ubHlcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdvdEFueVZhbHVlID0gY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21Gcm9udG1hdHRlclRhZyhcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVDYWNoZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFNYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVNYXBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRZVmFsdWUgfHw9IGdvdEFueVZhbHVlO1xuICAgICAgICAgICAgICAgIH0gLy8gU2VhcmNoIGZyb250bWF0dGVyIHRhZ3NcblxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU2VhcmNoIGZyb250bWF0dGVyIGtleXNcIik7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICBmaWxlQ2FjaGUgJiZcbiAgICAgICAgICAgICAgICAgICAgcXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLkZyb250bWF0dGVyICYmXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmdldFRhcmdldCgpICE9PSBcInRhZ3NcIlxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZ290QW55VmFsdWUgPSBjb2xsZWN0aW5nLmNvbGxlY3REYXRhRnJvbUZyb250bWF0dGVyS2V5KFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUNhY2hlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZU1hcFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5nb3RBbnlWYWxpZFlWYWx1ZSB8fD0gZ290QW55VmFsdWU7XG4gICAgICAgICAgICAgICAgfSAvLyBjb25zb2xlLmxvZyhcIlNlYXJjaCBmcm9udG1hdHRlciBrZXlzXCIpO1xuXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJTZWFyY2ggd2lraSBsaW5rc1wiKTtcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIGZpbGVDYWNoZSAmJlxuICAgICAgICAgICAgICAgICAgICAocXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLldpa2kgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5XaWtpTGluayB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLldpa2lEaXNwbGF5KVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZ290QW55VmFsdWUgPSBjb2xsZWN0aW5nLmNvbGxlY3REYXRhRnJvbVdpa2koXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlQ2FjaGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlTWFwXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWVZhbHVlIHx8PSBnb3RBbnlWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlNlYXJjaCBpbmxpbmUgdGFnc1wiKTtcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudCAmJiBxdWVyeS5nZXRUeXBlKCkgPT09IFNlYXJjaFR5cGUuVGFnKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBnb3RBbnlWYWx1ZSA9IGNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tSW5saW5lVGFnKFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFNYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVNYXBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRZVmFsdWUgfHw9IGdvdEFueVZhbHVlO1xuICAgICAgICAgICAgICAgIH0gLy8gU2VhcmNoIGlubGluZSB0YWdzXG5cbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlNlYXJjaCBUZXh0XCIpO1xuICAgICAgICAgICAgICAgIGlmIChjb250ZW50ICYmIHF1ZXJ5LmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5UZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBnb3RBbnlWYWx1ZSA9IGNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tVGV4dChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlTWFwXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWVZhbHVlIHx8PSBnb3RBbnlWYWx1ZTtcbiAgICAgICAgICAgICAgICB9IC8vIFNlYXJjaCB0ZXh0XG5cbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlNlYXJjaCBGaWxlTWV0YVwiKTtcbiAgICAgICAgICAgICAgICBpZiAocXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLkZpbGVNZXRhKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBnb3RBbnlWYWx1ZSA9IGNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tRmlsZU1ldGEoXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFNYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVNYXBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRZVmFsdWUgfHw9IGdvdEFueVZhbHVlO1xuICAgICAgICAgICAgICAgIH0gLy8gU2VhcmNoIEZpbGVNZXRhXG5cbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlNlYXJjaCBkdkZpZWxkXCIpO1xuICAgICAgICAgICAgICAgIGlmIChjb250ZW50ICYmIHF1ZXJ5LmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5kdkZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBnb3RBbnlWYWx1ZSA9IGNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tRHZGaWVsZChcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlTWFwXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWVZhbHVlIHx8PSBnb3RBbnlWYWx1ZTtcbiAgICAgICAgICAgICAgICB9IC8vIHNlYXJjaCBkdkZpZWxkXG5cbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlNlYXJjaCBUYXNrXCIpO1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgY29udGVudCAmJlxuICAgICAgICAgICAgICAgICAgICAocXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLlRhc2sgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5UYXNrRG9uZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLlRhc2tOb3REb25lKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZ290QW55VmFsdWUgPSBjb2xsZWN0aW5nLmNvbGxlY3REYXRhRnJvbVRhc2soXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnksXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hcCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZU1hcFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5nb3RBbnlWYWxpZFlWYWx1ZSB8fD0gZ290QW55VmFsdWU7XG4gICAgICAgICAgICAgICAgfSAvLyBzZWFyY2ggVGFza1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChsb29wUXVlcnlQcm9taXNlcyk7XG4gICAgICAgIH0pO1xuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChsb29wRmlsZVByb21pc2VzKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZGF0YU1hcCk7XG5cbiAgICAgICAgLy8gQ29sbGVjdCBkYXRhIGZyb20gYSBmaWxlLCBvbmUgZmlsZSBjb250YWlucyBmdWxsIGRhdGFzZXRcbiAgICAgICAgYXdhaXQgdGhpcy5jb2xsZWN0RGF0YUZyb21UYWJsZShkYXRhTWFwLCByZW5kZXJJbmZvLCBwcm9jZXNzSW5mbyk7XG4gICAgICAgIGlmIChwcm9jZXNzSW5mby5lcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9yTWVzc2FnZShcbiAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5lcnJvck1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgY2FudmFzLFxuICAgICAgICAgICAgICAgIGVsXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1pbkRhdGUpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZyhtYXhEYXRlKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coZGF0YU1hcCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgZGF0ZSByYW5nZVxuICAgICAgICAvLyBtaW5EYXRlIGFuZCBtYXhEYXRlIGFyZSBjb2xsZWN0ZWQgd2l0aG91dCBrbm93aW5nIHN0YXJ0RGF0ZSBhbmQgZW5kRGF0ZVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhgZmlsZVRvdGFsOiAke3Byb2Nlc3NJbmZvLmZpbGVUb3RhbH1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYGZpbGVBdmFpbGFibGU6ICR7cHJvY2Vzc0luZm8uZmlsZUF2YWlsYWJsZX1gKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coYGZpbGVOb3RJbkZvcm1hdDogJHtwcm9jZXNzSW5mby5maWxlTm90SW5Gb3JtYXR9YCk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBmaWxlT3V0T2ZEYXRlUmFuZ2U6ICR7cHJvY2Vzc0luZm8uZmlsZU91dE9mRGF0ZVJhbmdlfWApO1xuICAgICAgICBsZXQgZGF0ZUVycm9yTWVzc2FnZSA9IFwiXCI7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgICFwcm9jZXNzSW5mby5taW5EYXRlLmlzVmFsaWQoKSB8fFxuICAgICAgICAgICAgIXByb2Nlc3NJbmZvLm1heERhdGUuaXNWYWxpZCgpIHx8XG4gICAgICAgICAgICBwcm9jZXNzSW5mby5maWxlQXZhaWxhYmxlID09PSAwIHx8XG4gICAgICAgICAgICAhcHJvY2Vzc0luZm8uZ290QW55VmFsaWRYVmFsdWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBkYXRlRXJyb3JNZXNzYWdlID0gYE5vIHZhbGlkIGRhdGUgYXMgWCB2YWx1ZSBmb3VuZCBpbiBub3Rlc2A7XG4gICAgICAgICAgICBpZiAocHJvY2Vzc0luZm8uZmlsZU91dE9mRGF0ZVJhbmdlID4gMCkge1xuICAgICAgICAgICAgICAgIGRhdGVFcnJvck1lc3NhZ2UgKz0gYFxcbiR7cHJvY2Vzc0luZm8uZmlsZU91dE9mRGF0ZVJhbmdlfSBmaWxlcyBhcmUgb3V0IG9mIHRoZSBkYXRlIHJhbmdlLmA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocHJvY2Vzc0luZm8uZmlsZU5vdEluRm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgZGF0ZUVycm9yTWVzc2FnZSArPSBgXFxuJHtwcm9jZXNzSW5mby5maWxlTm90SW5Gb3JtYXR9IGZpbGVzIGFyZSBub3QgaW4gdGhlIHJpZ2h0IGZvcm1hdC5gO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZW5kZXJJbmZvLnN0YXJ0RGF0ZSA9PT0gbnVsbCAmJiByZW5kZXJJbmZvLmVuZERhdGUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIC8vIE5vIGRhdGUgYXJndW1lbnRzXG4gICAgICAgICAgICByZW5kZXJJbmZvLnN0YXJ0RGF0ZSA9IHByb2Nlc3NJbmZvLm1pbkRhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgIHJlbmRlckluZm8uZW5kRGF0ZSA9IHByb2Nlc3NJbmZvLm1heERhdGUuY2xvbmUoKTtcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJlbmRlckluZm8uc3RhcnREYXRlICE9PSBudWxsICYmXG4gICAgICAgICAgICByZW5kZXJJbmZvLmVuZERhdGUgPT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAocmVuZGVySW5mby5zdGFydERhdGUgPCBwcm9jZXNzSW5mby5tYXhEYXRlKSB7XG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5lbmREYXRlID0gcHJvY2Vzc0luZm8ubWF4RGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRlRXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGRhdGUgcmFuZ2VcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAgIHJlbmRlckluZm8uZW5kRGF0ZSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgcmVuZGVySW5mby5zdGFydERhdGUgPT09IG51bGxcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAocmVuZGVySW5mby5lbmREYXRlID4gcHJvY2Vzc0luZm8ubWluRGF0ZSkge1xuICAgICAgICAgICAgICAgIHJlbmRlckluZm8uc3RhcnREYXRlID0gcHJvY2Vzc0luZm8ubWluRGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkYXRlRXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGRhdGUgcmFuZ2VcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHN0YXJ0RGF0ZSBhbmQgZW5kRGF0ZSBhcmUgdmFsaWRcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAocmVuZGVySW5mby5zdGFydERhdGUgPCBwcm9jZXNzSW5mby5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZW5kRGF0ZSA8IHByb2Nlc3NJbmZvLm1pbkRhdGUpIHx8XG4gICAgICAgICAgICAgICAgKHJlbmRlckluZm8uc3RhcnREYXRlID4gcHJvY2Vzc0luZm8ubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmVuZERhdGUgPiBwcm9jZXNzSW5mby5tYXhEYXRlKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgZGF0ZUVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBkYXRlIHJhbmdlXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGVFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9yTWVzc2FnZShkYXRlRXJyb3JNZXNzYWdlLCBjYW52YXMsIGVsKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnN0YXJ0RGF0ZSk7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uZW5kRGF0ZSk7XG5cbiAgICAgICAgaWYgKCFwcm9jZXNzSW5mby5nb3RBbnlWYWxpZFlWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRXJyb3JNZXNzYWdlKFxuICAgICAgICAgICAgICAgIFwiTm8gdmFsaWQgWSB2YWx1ZSBmb3VuZCBpbiBub3Rlc1wiLFxuICAgICAgICAgICAgICAgIGNhbnZhcyxcbiAgICAgICAgICAgICAgICBlbFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlc2hhcGUgZGF0YSBmb3IgcmVuZGVyaW5nXG4gICAgICAgIGxldCBkYXRhc2V0cyA9IG5ldyBEYXRhc2V0cyhyZW5kZXJJbmZvLnN0YXJ0RGF0ZSwgcmVuZGVySW5mby5lbmREYXRlKTtcbiAgICAgICAgZm9yIChsZXQgcXVlcnkgb2YgcmVuZGVySW5mby5xdWVyaWVzKSB7XG4gICAgICAgICAgICAvLyBXZSBzdGlsbCBjcmVhdGUgYSBkYXRhc2V0IGZvciB4RGF0YXNldCxcbiAgICAgICAgICAgIC8vIHRvIGtlZXAgdGhlIHNlcXVlbmNlIGFuZCBvcmRlciBvZiB0YXJnZXRzXG4gICAgICAgICAgICBsZXQgZGF0YXNldCA9IGRhdGFzZXRzLmNyZWF0ZURhdGFzZXQocXVlcnksIHJlbmRlckluZm8pO1xuICAgICAgICAgICAgLy8gQWRkIG51bWJlciBvZiB0YXJnZXRzIHRvIHRoZSBkYXRhc2V0XG4gICAgICAgICAgICAvLyBOdW1iZXIgb2YgdGFyZ2V0cyBoYXMgYmVlbiBhY2N1bXVsYXRlZCB3aGlsZSBjb2xsZWN0aW5nIGRhdGFcbiAgICAgICAgICAgIGRhdGFzZXQuYWRkTnVtVGFyZ2V0cyhxdWVyeS5nZXROdW1UYXJnZXRzKCkpO1xuICAgICAgICAgICAgZm9yIChcbiAgICAgICAgICAgICAgICBsZXQgY3VyRGF0ZSA9IHJlbmRlckluZm8uc3RhcnREYXRlLmNsb25lKCk7XG4gICAgICAgICAgICAgICAgY3VyRGF0ZSA8PSByZW5kZXJJbmZvLmVuZERhdGU7XG4gICAgICAgICAgICAgICAgY3VyRGF0ZS5hZGQoMSwgXCJkYXlzXCIpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhjdXJEYXRlKTtcblxuICAgICAgICAgICAgICAgIC8vIGRhdGFNYXAgLS0+IHtkYXRlOiBbcXVlcnk6IHZhbHVlLCAuLi5dfVxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgZGF0YU1hcC5oYXMoXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIuZGF0ZVRvU3RyKGN1ckRhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdClcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgcXVlcnlWYWx1ZVBhaXJzID0gZGF0YU1hcFxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldChoZWxwZXIuZGF0ZVRvU3RyKGN1ckRhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCkpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChwYWlyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhaXIucXVlcnkuZXF1YWxUbyhxdWVyeSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5VmFsdWVQYWlycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBNZXJnZSB2YWx1ZXMgb2YgdGhlIHNhbWUgZGF5IHNhbWUgcXVlcnlcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRQYWlyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRQYWlyIDwgcXVlcnlWYWx1ZVBhaXJzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRQYWlyKytcbiAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2xsZWN0ZWQgPSBxdWVyeVZhbHVlUGFpcnNbaW5kUGFpcl0udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOdW1iZXIuaXNOdW1iZXIoY29sbGVjdGVkKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhTnVtYmVyLmlzTmFOKGNvbGxlY3RlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGNvbGxlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IGNvbGxlY3RlZDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGhhc1ZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQuc2V0VmFsdWUoY3VyRGF0ZSwgdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJlbmRlckluZm8uZGF0YXNldHMgPSBkYXRhc2V0cztcbiAgICAgICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5kYXRhc2V0cyk7XG5cbiAgICAgICAgbGV0IHJldFJlbmRlciA9IHJlbmRlcmluZy5yZW5kZXIoY2FudmFzLCByZW5kZXJJbmZvKTtcbiAgICAgICAgaWYgKHR5cGVvZiByZXRSZW5kZXIgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9yTWVzc2FnZShyZXRSZW5kZXIsIGNhbnZhcywgZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgZWwuYXBwZW5kQ2hpbGQoY2FudmFzKTtcbiAgICB9XG5cbiAgICAvLyBUT0RPOiByZW1vdmUgdGhpcy5hcHAgYW5kIG1vdmUgdG8gY29sbGVjdGluZy50c1xuICAgIGFzeW5jIGNvbGxlY3REYXRhRnJvbVRhYmxlKFxuICAgICAgICBkYXRhTWFwOiBEYXRhTWFwLFxuICAgICAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxuICAgICAgICBwcm9jZXNzSW5mbzogQ29sbGVjdGluZ1Byb2Nlc3NJbmZvXG4gICAgKSB7XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiY29sbGVjdERhdGFGcm9tVGFibGVcIik7XG5cbiAgICAgICAgbGV0IHRhYmxlUXVlcmllcyA9IHJlbmRlckluZm8ucXVlcmllcy5maWx0ZXIoXG4gICAgICAgICAgICAocSkgPT4gcS5nZXRUeXBlKCkgPT09IFNlYXJjaFR5cGUuVGFibGVcbiAgICAgICAgKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2codGFibGVRdWVyaWVzKTtcbiAgICAgICAgLy8gU2VwYXJhdGUgcXVlcmllcyBieSB0YWJsZXMgYW5kIHhEYXRhc2V0cy95RGF0YXNldHNcbiAgICAgICAgbGV0IHRhYmxlczogQXJyYXk8VGFibGVEYXRhPiA9IFtdO1xuICAgICAgICBsZXQgdGFibGVGaWxlTm90Rm91bmQgPSBmYWxzZTtcbiAgICAgICAgZm9yIChsZXQgcXVlcnkgb2YgdGFibGVRdWVyaWVzKSB7XG4gICAgICAgICAgICBsZXQgZmlsZVBhdGggPSBxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKTtcbiAgICAgICAgICAgIGxldCBmaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKFxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZVBhdGgoZmlsZVBhdGggKyBcIi5tZFwiKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICghZmlsZSB8fCAhKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkpIHtcbiAgICAgICAgICAgICAgICB0YWJsZUZpbGVOb3RGb3VuZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB0YWJsZUluZGV4ID0gcXVlcnkuZ2V0QWNjZXNzb3IoKTtcbiAgICAgICAgICAgIGxldCBpc1ggPSBxdWVyeS51c2VkQXNYRGF0YXNldDtcblxuICAgICAgICAgICAgbGV0IHRhYmxlID0gdGFibGVzLmZpbmQoXG4gICAgICAgICAgICAgICAgKHQpID0+IHQuZmlsZVBhdGggPT09IGZpbGVQYXRoICYmIHQudGFibGVJbmRleCA9PT0gdGFibGVJbmRleFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmICh0YWJsZSkge1xuICAgICAgICAgICAgICAgIGlmIChpc1gpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFibGUueERhdGFzZXQgPSBxdWVyeTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YWJsZS55RGF0YXNldHMucHVzaChxdWVyeSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBsZXQgdGFibGVEYXRhID0gbmV3IFRhYmxlRGF0YShmaWxlUGF0aCwgdGFibGVJbmRleCk7XG4gICAgICAgICAgICAgICAgaWYgKGlzWCkge1xuICAgICAgICAgICAgICAgICAgICB0YWJsZURhdGEueERhdGFzZXQgPSBxdWVyeTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YWJsZURhdGEueURhdGFzZXRzLnB1c2gocXVlcnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0YWJsZXMucHVzaCh0YWJsZURhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRhYmxlcyk7XG5cbiAgICAgICAgaWYgKHRhYmxlRmlsZU5vdEZvdW5kKSB7XG4gICAgICAgICAgICBwcm9jZXNzSW5mby5lcnJvck1lc3NhZ2UgPSBcIkZpbGUgY29udGFpbmluZyB0YWJsZXMgbm90IGZvdW5kXCI7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGxldCB0YWJsZURhdGEgb2YgdGFibGVzKSB7XG4gICAgICAgICAgICAvL2V4dHJhY3QgeERhdGFzZXQgZnJvbSBxdWVyeVxuICAgICAgICAgICAgbGV0IHhEYXRhc2V0UXVlcnkgPSB0YWJsZURhdGEueERhdGFzZXQ7XG4gICAgICAgICAgICBpZiAoIXhEYXRhc2V0UXVlcnkpIHtcbiAgICAgICAgICAgICAgICAvLyBtaXNzaW5nIHhEYXRhc2V0XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgeURhdGFzZXRRdWVyaWVzID0gdGFibGVEYXRhLnlEYXRhc2V0cztcbiAgICAgICAgICAgIGxldCBmaWxlUGF0aCA9IHhEYXRhc2V0UXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCk7XG4gICAgICAgICAgICBsZXQgdGFibGVJbmRleCA9IHhEYXRhc2V0UXVlcnkuZ2V0QWNjZXNzb3IoKTtcblxuICAgICAgICAgICAgLy8gR2V0IHRhYmxlIHRleHRcbiAgICAgICAgICAgIGxldCB0ZXh0VGFibGUgPSBcIlwiO1xuICAgICAgICAgICAgZmlsZVBhdGggPSBmaWxlUGF0aCArIFwiLm1kXCI7XG4gICAgICAgICAgICBsZXQgZmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChcbiAgICAgICAgICAgICAgICBub3JtYWxpemVQYXRoKGZpbGVQYXRoKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGlmIChmaWxlICYmIGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmZpbGVBdmFpbGFibGUrKztcbiAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IGF3YWl0IHRoaXMuYXBwLnZhdWx0LmFkYXB0ZXIucmVhZChmaWxlLnBhdGgpO1xuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGNvbnRlbnQpO1xuXG4gICAgICAgICAgICAgICAgLy8gVGVzdCB0aGlzIGluIFJlZ2V4MTAxXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG5vdC1zby1zdHJpY3QgdGFibGUgc2VsZWN0b3JcbiAgICAgICAgICAgICAgICAvLyAoKFxccj9cXG4pezJ9fF4pKFteXFxyXFxuXSpcXHxbXlxcclxcbl0qKFxccj9cXG4pPykrKD89KFxccj9cXG4pezJ9fCQpXG4gICAgICAgICAgICAgICAgbGV0IHN0ck1EVGFibGVSZWdleCA9XG4gICAgICAgICAgICAgICAgICAgIFwiKChcXFxccj9cXFxcbil7Mn18XikoW15cXFxcclxcXFxuXSpcXFxcfFteXFxcXHJcXFxcbl0qKFxcXFxyP1xcXFxuKT8pKyg/PShcXFxccj9cXFxcbil7Mn18JClcIjtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhzdHJNRFRhYmxlUmVnZXgpO1xuICAgICAgICAgICAgICAgIGxldCBtZFRhYmxlUmVnZXggPSBuZXcgUmVnRXhwKHN0ck1EVGFibGVSZWdleCwgXCJnbVwiKTtcbiAgICAgICAgICAgICAgICBsZXQgbWF0Y2g7XG4gICAgICAgICAgICAgICAgbGV0IGluZFRhYmxlID0gMDtcblxuICAgICAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSBtZFRhYmxlUmVnZXguZXhlYyhjb250ZW50KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobWF0Y2gpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kVGFibGUgPT09IHRhYmxlSW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRUYWJsZSA9IG1hdGNoWzBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaW5kVGFibGUrKztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIGZpbGUgbm90IGV4aXN0c1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGV4dFRhYmxlKTtcblxuICAgICAgICAgICAgbGV0IHRhYmxlTGluZXMgPSB0ZXh0VGFibGUuc3BsaXQoL1xccj9cXG4vKTtcbiAgICAgICAgICAgIHRhYmxlTGluZXMgPSB0YWJsZUxpbmVzLmZpbHRlcigobGluZSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBsaW5lICE9PSBcIlwiO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBsZXQgbnVtQ29sdW1ucyA9IDA7XG4gICAgICAgICAgICBsZXQgbnVtRGF0YVJvd3MgPSAwO1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGFibGVMaW5lcyk7XG5cbiAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSBpdCBpcyBhIHZhbGlkIHRhYmxlIGZpcnN0XG4gICAgICAgICAgICBpZiAodGFibGVMaW5lcy5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgIC8vIE11c3QgaGF2ZSBoZWFkZXIgYW5kIHNlcGFyYXRvciBsaW5lXG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlckxpbmUgPSB0YWJsZUxpbmVzLnNoaWZ0KCkudHJpbSgpO1xuICAgICAgICAgICAgICAgIGhlYWRlckxpbmUgPSBoZWxwZXIudHJpbUJ5Q2hhcihoZWFkZXJMaW5lLCBcInxcIik7XG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlclNwbGl0dGVkID0gaGVhZGVyTGluZS5zcGxpdChcInxcIik7XG4gICAgICAgICAgICAgICAgbnVtQ29sdW1ucyA9IGhlYWRlclNwbGl0dGVkLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgIGxldCBzZXBMaW5lID0gdGFibGVMaW5lcy5zaGlmdCgpLnRyaW0oKTtcbiAgICAgICAgICAgICAgICBzZXBMaW5lID0gaGVscGVyLnRyaW1CeUNoYXIoc2VwTGluZSwgXCJ8XCIpO1xuICAgICAgICAgICAgICAgIGxldCBzcGVwTGluZVNwbGl0dGVkID0gc2VwTGluZS5zcGxpdChcInxcIik7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY29sIG9mIHNwZXBMaW5lU3BsaXR0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2wuaW5jbHVkZXMoXCItXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsgLy8gTm90IGEgdmFsaWQgc2VwXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBudW1EYXRhUm93cyA9IHRhYmxlTGluZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobnVtRGF0YVJvd3MgPT0gMCkgY29udGludWU7XG5cbiAgICAgICAgICAgIC8vIGdldCB4IGRhdGFcbiAgICAgICAgICAgIGxldCBjb2x1bW5YRGF0YXNldCA9IHhEYXRhc2V0UXVlcnkuZ2V0QWNjZXNzb3IoMSk7XG4gICAgICAgICAgICBpZiAoY29sdW1uWERhdGFzZXQgPj0gbnVtQ29sdW1ucykgY29udGludWU7XG4gICAgICAgICAgICBsZXQgeFZhbHVlcyA9IFtdO1xuXG4gICAgICAgICAgICBsZXQgaW5kTGluZSA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCB0YWJsZUxpbmUgb2YgdGFibGVMaW5lcykge1xuICAgICAgICAgICAgICAgIGxldCBkYXRhUm93ID0gaGVscGVyLnRyaW1CeUNoYXIodGFibGVMaW5lLnRyaW0oKSwgXCJ8XCIpO1xuICAgICAgICAgICAgICAgIGxldCBkYXRhUm93U3BsaXR0ZWQgPSBkYXRhUm93LnNwbGl0KFwifFwiKTtcbiAgICAgICAgICAgICAgICBpZiAoY29sdW1uWERhdGFzZXQgPCBkYXRhUm93U3BsaXR0ZWQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gZGF0YVJvd1NwbGl0dGVkW2NvbHVtblhEYXRhc2V0XS50cmltKCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRlID0gaGVscGVyLnN0clRvRGF0ZShkYXRhLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRlLmlzVmFsaWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlcy5wdXNoKGRhdGUpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIXByb2Nlc3NJbmZvLm1pbkRhdGUuaXNWYWxpZCgpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIXByb2Nlc3NJbmZvLm1heERhdGUuaXNWYWxpZCgpXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5taW5EYXRlID0gZGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLm1heERhdGUgPSBkYXRlLmNsb25lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRlIDwgcHJvY2Vzc0luZm8ubWluRGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5taW5EYXRlID0gZGF0ZS5jbG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZSA+IHByb2Nlc3NJbmZvLm1heERhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8ubWF4RGF0ZSA9IGRhdGUuY2xvbmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB4VmFsdWVzLnB1c2gobnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGluZExpbmUrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHhWYWx1ZXMpO1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgeFZhbHVlcy5ldmVyeSgodikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdiA9PT0gbnVsbDtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZXJyb3JNZXNzYWdlID1cbiAgICAgICAgICAgICAgICAgICAgXCJObyB2YWxpZCBkYXRlIGFzIFggdmFsdWUgZm91bmQgaW4gdGFibGVcIjtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWFZhbHVlIHx8PSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBnZXQgeSBkYXRhXG4gICAgICAgICAgICBmb3IgKGxldCB5RGF0YXNldFF1ZXJ5IG9mIHlEYXRhc2V0UXVlcmllcykge1xuICAgICAgICAgICAgICAgIGxldCBjb2x1bW5PZkludGVyZXN0ID0geURhdGFzZXRRdWVyeS5nZXRBY2Nlc3NvcigxKTtcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgY29sdW1uT2ZJbnRlcmVzdDogJHtjb2x1bW5PZkludGVyZXN0fSwgbnVtQ29sdW1uczogJHtudW1Db2x1bW5zfWApO1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW5PZkludGVyZXN0ID49IG51bUNvbHVtbnMpIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgbGV0IGluZExpbmUgPSAwO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IHRhYmxlTGluZSBvZiB0YWJsZUxpbmVzKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhUm93ID0gaGVscGVyLnRyaW1CeUNoYXIodGFibGVMaW5lLnRyaW0oKSwgXCJ8XCIpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YVJvd1NwbGl0dGVkID0gZGF0YVJvdy5zcGxpdChcInxcIik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2x1bW5PZkludGVyZXN0IDwgZGF0YVJvd1NwbGl0dGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBkYXRhUm93U3BsaXR0ZWRbY29sdW1uT2ZJbnRlcmVzdF0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNwbGl0dGVkID0gZGF0YS5zcGxpdCh5RGF0YXNldFF1ZXJ5LmdldFNlcGFyYXRvcigpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHNwbGl0dGVkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc3BsaXR0ZWQpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXRQYXJzZSA9IGhlbHBlci5wYXJzZUZsb2F0RnJvbUFueShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0ZWRbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8udGV4dFZhbHVlTWFwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXRQYXJzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldFBhcnNlLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS50eXBlID09PSBWYWx1ZVR5cGUuVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeURhdGFzZXRRdWVyeS52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuVGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSByZXRQYXJzZS52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kTGluZSA8IHhWYWx1ZXMubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVzW2luZExpbmVdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRZVmFsdWUgfHw9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW5nLmFkZFRvRGF0YU1hcChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhTWFwLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5kYXRlVG9TdHIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZXNbaW5kTGluZV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeURhdGFzZXRRdWVyeSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0ZWQubGVuZ3RoID4geURhdGFzZXRRdWVyeS5nZXRBY2Nlc3NvcigyKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlEYXRhc2V0UXVlcnkuZ2V0QWNjZXNzb3IoMikgPj0gMFxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3BsaXR0ZWRQYXJ0ID1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0ZWRbeURhdGFzZXRRdWVyeS5nZXRBY2Nlc3NvcigyKV0udHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHNwbGl0dGVkUGFydCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldFBhcnNlID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHRlZFBhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8udGV4dFZhbHVlTWFwXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXRQYXJzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldFBhcnNlLnZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS50eXBlID09PSBWYWx1ZVR5cGUuVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeURhdGFzZXRRdWVyeS52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuVGltZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHJldFBhcnNlLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRMaW5lIDwgeFZhbHVlcy5sZW5ndGggJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZXNbaW5kTGluZV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5nb3RBbnlWYWxpZFlWYWx1ZSB8fD0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3RpbmcuYWRkVG9EYXRhTWFwKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFNYXAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVscGVyLmRhdGVUb1N0cihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlc1tpbmRMaW5lXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5RGF0YXNldFF1ZXJ5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaW5kTGluZSsrO1xuICAgICAgICAgICAgICAgIH0gLy8gTG9vcCBvdmVyIHRhYmxlTGluZXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldEVkaXRvcigpOiBFZGl0b3Ige1xuICAgICAgICByZXR1cm4gdGhpcy5hcHAud29ya3NwYWNlLmdldEFjdGl2ZVZpZXdPZlR5cGUoTWFya2Rvd25WaWV3KS5lZGl0b3I7XG4gICAgfVxuXG4gICAgYWRkQ29kZUJsb2NrKG91dHB1dFR5cGU6IEdyYXBoVHlwZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50VmlldyA9IHRoaXMuYXBwLndvcmtzcGFjZS5hY3RpdmVMZWFmLnZpZXc7XG5cbiAgICAgICAgaWYgKCEoY3VycmVudFZpZXcgaW5zdGFuY2VvZiBNYXJrZG93blZpZXcpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgY29kZWJsb2NrVG9JbnNlcnQgPSBcIlwiO1xuICAgICAgICBzd2l0Y2ggKG91dHB1dFR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgR3JhcGhUeXBlLkxpbmU6XG4gICAgICAgICAgICAgICAgY29kZWJsb2NrVG9JbnNlcnQgPSBgXFxgXFxgXFxgIHRyYWNrZXJcbnNlYXJjaFR5cGU6IHRhZ1xuc2VhcmNoVGFyZ2V0OiB0YWdOYW1lXG5mb2xkZXI6IC9cbnN0YXJ0RGF0ZTpcbmVuZERhdGU6XG5saW5lOlxuICAgIHRpdGxlOiBcIkxpbmUgQ2hhcnRcIlxuICAgIHhBeGlzTGFiZWw6IERhdGVcbiAgICB5QXhpc0xhYmVsOiBWYWx1ZVxuXFxgXFxgXFxgYDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgR3JhcGhUeXBlLkJhcjpcbiAgICAgICAgICAgICAgICBjb2RlYmxvY2tUb0luc2VydCA9IGBcXGBcXGBcXGAgdHJhY2tlclxuc2VhcmNoVHlwZTogdGFnXG5zZWFyY2hUYXJnZXQ6IHRhZ05hbWVcbmZvbGRlcjogL1xuc3RhcnREYXRlOlxuZW5kRGF0ZTpcbmJhcjpcbiAgICB0aXRsZTogXCJCYXIgQ2hhcnRcIlxuICAgIHhBeGlzTGFiZWw6IERhdGVcbiAgICB5QXhpc0xhYmVsOiBWYWx1ZVxuXFxgXFxgXFxgYDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgR3JhcGhUeXBlLlN1bW1hcnk6XG4gICAgICAgICAgICAgICAgY29kZWJsb2NrVG9JbnNlcnQgPSBgXFxgXFxgXFxgIHRyYWNrZXJcbnNlYXJjaFR5cGU6IHRhZ1xuc2VhcmNoVGFyZ2V0OiB0YWdOYW1lXG5mb2xkZXI6IC9cbnN0YXJ0RGF0ZTpcbmVuZERhdGU6XG5zdW1tYXJ5OlxuICAgIHRlbXBsYXRlOiBcIkF2ZXJhZ2UgdmFsdWUgb2YgdGFnTmFtZSBpcyB7e2F2ZXJhZ2UoKX19XCJcbiAgICBzdHlsZTogXCJjb2xvcjp3aGl0ZTtcIlxuXFxgXFxgXFxgYDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29kZWJsb2NrVG9JbnNlcnQgIT09IFwiXCIpIHtcbiAgICAgICAgICAgIGxldCB0ZXh0SW5zZXJ0ZWQgPSB0aGlzLmluc2VydFRvTmV4dExpbmUoY29kZWJsb2NrVG9JbnNlcnQpO1xuICAgICAgICAgICAgaWYgKCF0ZXh0SW5zZXJ0ZWQpIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluc2VydFRvTmV4dExpbmUodGV4dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGxldCBlZGl0b3IgPSB0aGlzLmdldEVkaXRvcigpO1xuXG4gICAgICAgIGlmIChlZGl0b3IpIHtcbiAgICAgICAgICAgIGxldCBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yKCk7XG4gICAgICAgICAgICBsZXQgbGluZU51bWJlciA9IGN1cnNvci5saW5lO1xuICAgICAgICAgICAgbGV0IGxpbmUgPSBlZGl0b3IuZ2V0TGluZShsaW5lTnVtYmVyKTtcblxuICAgICAgICAgICAgY3Vyc29yLmNoID0gbGluZS5sZW5ndGg7XG4gICAgICAgICAgICBlZGl0b3Iuc2V0U2VsZWN0aW9uKGN1cnNvcik7XG4gICAgICAgICAgICBlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihcIlxcblwiICsgdGV4dCk7XG5cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cbiJdLCJuYW1lcyI6WyJfX2F3YWl0ZXIiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsIlAiLCJnZW5lcmF0b3IiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInZhbHVlIiwic3RlcCIsIm5leHQiLCJlIiwicmVqZWN0ZWQiLCJyZXN1bHQiLCJkb25lIiwidGhlbiIsImFwcGx5IiwiYXNjZW5kaW5nIiwiYSIsImIiLCJOYU4iLCJkZXNjZW5kaW5nIiwiYmlzZWN0b3IiLCJmIiwiY29tcGFyZTEiLCJjb21wYXJlMiIsImRlbHRhIiwibGVmdCIsIngiLCJsbyIsImhpIiwibGVuZ3RoIiwibWlkIiwiZCIsInplcm8iLCJjZW50ZXIiLCJpIiwicmlnaHQiLCJTdXBwcmVzc2VkRXJyb3IiLCJiaXNlY3RSaWdodCIsIkludGVybk1hcCIsIk1hcCIsImNvbnN0cnVjdG9yIiwiZW50cmllcyIsImtleSIsImtleW9mIiwic3VwZXIiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0aWVzIiwidGhpcyIsIl9pbnRlcm4iLCJfa2V5Iiwic2V0IiwiZ2V0IiwiaW50ZXJuX2dldCIsImhhcyIsImludGVybl9zZXQiLCJkZWxldGUiLCJpbnRlcm5fZGVsZXRlIiwidmFsdWVPZiIsImFzY2VuZGluZ0RlZmluZWQiLCJlMTAiLCJNYXRoIiwic3FydCIsImU1IiwiZTIiLCJ0aWNrU3BlYyIsInN0YXJ0Iiwic3RvcCIsImNvdW50IiwibWF4IiwicG93ZXIiLCJmbG9vciIsImxvZzEwIiwiZXJyb3IiLCJwb3ciLCJmYWN0b3IiLCJpMSIsImkyIiwiaW5jIiwicm91bmQiLCJ0aWNrSW5jcmVtZW50IiwidGlja1N0ZXAiLCJyZXZlcnNlIiwidmFsdWVzIiwidmFsdWVvZiIsInVuZGVmaW5lZCIsIm1pbiIsInF1aWNrc2VsZWN0IiwiYXJyYXkiLCJrIiwiSW5maW5pdHkiLCJjb21wYXJlIiwiVHlwZUVycm9yIiwiY29tcGFyZURlZmluZWQiLCJuIiwibSIsInoiLCJsb2ciLCJzIiwiZXhwIiwic2QiLCJ0IiwiaiIsInN3YXAiLCJtZWRpYW4iLCJwIiwiRmxvYXQ2NEFycmF5IiwiZnJvbSIsIm51bWJlcnMiLCJpc05hTiIsImkwIiwidmFsdWUwIiwic3ViYXJyYXkiLCJxdWFudGlsZSIsInJhbmdlIiwiYXJndW1lbnRzIiwiY2VpbCIsIkFycmF5Iiwic3VtIiwiaW5kZXgiLCJpZGVudGl0eSQ0IiwidG9wIiwiYm90dG9tIiwiZXBzaWxvbiIsInRyYW5zbGF0ZVgiLCJ0cmFuc2xhdGVZIiwieSIsIm51bWJlciIsInNjYWxlIiwib2Zmc2V0IiwiYmFuZHdpZHRoIiwiZW50ZXJpbmciLCJfX2F4aXMiLCJheGlzIiwib3JpZW50IiwidGlja0FyZ3VtZW50cyIsInRpY2tWYWx1ZXMiLCJ0aWNrRm9ybWF0IiwidGlja1NpemVJbm5lciIsInRpY2tTaXplT3V0ZXIiLCJ0aWNrUGFkZGluZyIsIndpbmRvdyIsImRldmljZVBpeGVsUmF0aW8iLCJ0cmFuc2Zvcm0iLCJjb250ZXh0IiwidGlja3MiLCJkb21haW4iLCJmb3JtYXQiLCJpZGVudGl0eSIsInNwYWNpbmciLCJyYW5nZTAiLCJyYW5nZTEiLCJwb3NpdGlvbiIsImNvcHkiLCJzZWxlY3Rpb24iLCJwYXRoIiwic2VsZWN0QWxsIiwiZGF0YSIsInRpY2siLCJvcmRlciIsInRpY2tFeGl0IiwiZXhpdCIsInRpY2tFbnRlciIsImVudGVyIiwiYXBwZW5kIiwiYXR0ciIsImxpbmUiLCJzZWxlY3QiLCJ0ZXh0IiwibWVyZ2UiLCJpbnNlcnQiLCJ0cmFuc2l0aW9uIiwiaXNGaW5pdGUiLCJnZXRBdHRyaWJ1dGUiLCJwYXJlbnROb2RlIiwicmVtb3ZlIiwiZmlsdGVyIiwiZWFjaCIsIl8iLCJzbGljZSIsInRpY2tTaXplIiwiYXhpc0JvdHRvbSIsImF4aXNMZWZ0Iiwibm9vcCIsImRpc3BhdGNoIiwidGVzdCIsIkVycm9yIiwiRGlzcGF0Y2giLCJ0eXBlIiwibmFtZSIsImMiLCJjYWxsYmFjayIsImNvbmNhdCIsInB1c2giLCJwcm90b3R5cGUiLCJvbiIsInR5cGVuYW1lIiwidHlwZXMiLCJUIiwidHJpbSIsInNwbGl0IiwibWFwIiwiaW5kZXhPZiIsImhhc093blByb3BlcnR5IiwiY2FsbCIsInRoYXQiLCJhcmdzIiwieGh0bWwiLCJuYW1lc3BhY2VzIiwic3ZnIiwieGxpbmsiLCJ4bWwiLCJ4bWxucyIsIm5hbWVzcGFjZSIsInByZWZpeCIsInNwYWNlIiwibG9jYWwiLCJjcmVhdG9ySW5oZXJpdCIsImRvY3VtZW50Iiwib3duZXJEb2N1bWVudCIsInVyaSIsIm5hbWVzcGFjZVVSSSIsImRvY3VtZW50RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjcmVhdGVFbGVtZW50TlMiLCJjcmVhdG9yRml4ZWQiLCJmdWxsbmFtZSIsImNyZWF0b3IiLCJub25lIiwic2VsZWN0b3IiLCJxdWVyeVNlbGVjdG9yIiwiZW1wdHkiLCJzZWxlY3RvckFsbCIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJhcnJheUFsbCIsImlzQXJyYXkiLCJtYXRjaGVyIiwibWF0Y2hlcyIsImNoaWxkTWF0Y2hlciIsIm5vZGUiLCJmaW5kIiwiY2hpbGRGaXJzdCIsImZpcnN0RWxlbWVudENoaWxkIiwiY2hpbGRyZW4iLCJzcGFyc2UiLCJ1cGRhdGUiLCJFbnRlck5vZGUiLCJwYXJlbnQiLCJkYXR1bSIsIl9uZXh0IiwiX3BhcmVudCIsIl9fZGF0YV9fIiwiYmluZEluZGV4IiwiZ3JvdXAiLCJncm91cExlbmd0aCIsImRhdGFMZW5ndGgiLCJiaW5kS2V5Iiwia2V5VmFsdWUiLCJub2RlQnlLZXlWYWx1ZSIsImtleVZhbHVlcyIsImFycmF5bGlrZSIsImF0dHJSZW1vdmUiLCJyZW1vdmVBdHRyaWJ1dGUiLCJhdHRyUmVtb3ZlTlMiLCJyZW1vdmVBdHRyaWJ1dGVOUyIsImF0dHJDb25zdGFudCIsInNldEF0dHJpYnV0ZSIsImF0dHJDb25zdGFudE5TIiwic2V0QXR0cmlidXRlTlMiLCJhdHRyRnVuY3Rpb24iLCJ2IiwiYXR0ckZ1bmN0aW9uTlMiLCJkZWZhdWx0VmlldyIsInN0eWxlUmVtb3ZlIiwic3R5bGUiLCJyZW1vdmVQcm9wZXJ0eSIsInN0eWxlQ29uc3RhbnQiLCJwcmlvcml0eSIsInNldFByb3BlcnR5Iiwic3R5bGVGdW5jdGlvbiIsInN0eWxlVmFsdWUiLCJnZXRQcm9wZXJ0eVZhbHVlIiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInByb3BlcnR5UmVtb3ZlIiwicHJvcGVydHlDb25zdGFudCIsInByb3BlcnR5RnVuY3Rpb24iLCJjbGFzc0FycmF5Iiwic3RyaW5nIiwiY2xhc3NMaXN0IiwiQ2xhc3NMaXN0IiwiX25vZGUiLCJfbmFtZXMiLCJjbGFzc2VkQWRkIiwibmFtZXMiLCJsaXN0IiwiYWRkIiwiY2xhc3NlZFJlbW92ZSIsImNsYXNzZWRUcnVlIiwiY2xhc3NlZEZhbHNlIiwiY2xhc3NlZEZ1bmN0aW9uIiwidGV4dFJlbW92ZSIsInRleHRDb250ZW50IiwidGV4dENvbnN0YW50IiwidGV4dEZ1bmN0aW9uIiwiaHRtbFJlbW92ZSIsImlubmVySFRNTCIsImh0bWxDb25zdGFudCIsImh0bWxGdW5jdGlvbiIsInJhaXNlIiwibmV4dFNpYmxpbmciLCJhcHBlbmRDaGlsZCIsImxvd2VyIiwicHJldmlvdXNTaWJsaW5nIiwiaW5zZXJ0QmVmb3JlIiwiZmlyc3RDaGlsZCIsImNvbnN0YW50TnVsbCIsInJlbW92ZUNoaWxkIiwic2VsZWN0aW9uX2Nsb25lU2hhbGxvdyIsImNsb25lIiwiY2xvbmVOb2RlIiwic2VsZWN0aW9uX2Nsb25lRGVlcCIsIm9uUmVtb3ZlIiwiX19vbiIsIm8iLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGlzdGVuZXIiLCJvcHRpb25zIiwib25BZGQiLCJldmVudCIsImNvbnRleHRMaXN0ZW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJkaXNwYXRjaEV2ZW50IiwicGFyYW1zIiwiQ3VzdG9tRXZlbnQiLCJjcmVhdGVFdmVudCIsImluaXRFdmVudCIsImJ1YmJsZXMiLCJjYW5jZWxhYmxlIiwiZGV0YWlsIiwiZGlzcGF0Y2hDb25zdGFudCIsImRpc3BhdGNoRnVuY3Rpb24iLCJjaGlsZCIsImpvaW4iLCJzcGxpY2UiLCJjb250YWlucyIsInJvb3QiLCJTZWxlY3Rpb24iLCJncm91cHMiLCJwYXJlbnRzIiwiX2dyb3VwcyIsIl9wYXJlbnRzIiwiZGVmaW5lIiwiZmFjdG9yeSIsImV4dGVuZCIsImRlZmluaXRpb24iLCJjcmVhdGUiLCJDb2xvciIsInN1Ymdyb3VwcyIsInN1Ym5vZGUiLCJzdWJncm91cCIsInNlbGVjdENoaWxkIiwibWF0Y2giLCJjaGlsZEZpbmQiLCJzZWxlY3RDaGlsZHJlbiIsImNoaWxkcmVuRmlsdGVyIiwiYmluZCIsImNvbnN0YW50IiwiZW50ZXJHcm91cCIsInVwZGF0ZUdyb3VwIiwicHJldmlvdXMiLCJfZW50ZXIiLCJfZXhpdCIsIm9uZW50ZXIiLCJvbnVwZGF0ZSIsIm9uZXhpdCIsImdyb3VwczAiLCJncm91cHMxIiwibTAiLCJtMSIsIm1lcmdlcyIsImdyb3VwMCIsImdyb3VwMSIsImNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIiwic29ydCIsImNvbXBhcmVOb2RlIiwic29ydGdyb3VwcyIsInNvcnRncm91cCIsIm5vZGVzIiwic2l6ZSIsImdldEF0dHJpYnV0ZU5TIiwicHJvcGVydHkiLCJjbGFzc2VkIiwiaHRtbCIsImJlZm9yZSIsImRlZXAiLCJ0eXBlbmFtZXMiLCJwYXJzZVR5cGVuYW1lcyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiZGFya2VyIiwiYnJpZ2h0ZXIiLCJyZUkiLCJyZU4iLCJyZVAiLCJyZUhleCIsInJlUmdiSW50ZWdlciIsIlJlZ0V4cCIsInJlUmdiUGVyY2VudCIsInJlUmdiYUludGVnZXIiLCJyZVJnYmFQZXJjZW50IiwicmVIc2xQZXJjZW50IiwicmVIc2xhUGVyY2VudCIsIm5hbWVkIiwiYWxpY2VibHVlIiwiYW50aXF1ZXdoaXRlIiwiYXF1YSIsImFxdWFtYXJpbmUiLCJhenVyZSIsImJlaWdlIiwiYmlzcXVlIiwiYmxhY2siLCJibGFuY2hlZGFsbW9uZCIsImJsdWUiLCJibHVldmlvbGV0IiwiYnJvd24iLCJidXJseXdvb2QiLCJjYWRldGJsdWUiLCJjaGFydHJldXNlIiwiY2hvY29sYXRlIiwiY29yYWwiLCJjb3JuZmxvd2VyYmx1ZSIsImNvcm5zaWxrIiwiY3JpbXNvbiIsImN5YW4iLCJkYXJrYmx1ZSIsImRhcmtjeWFuIiwiZGFya2dvbGRlbnJvZCIsImRhcmtncmF5IiwiZGFya2dyZWVuIiwiZGFya2dyZXkiLCJkYXJra2hha2kiLCJkYXJrbWFnZW50YSIsImRhcmtvbGl2ZWdyZWVuIiwiZGFya29yYW5nZSIsImRhcmtvcmNoaWQiLCJkYXJrcmVkIiwiZGFya3NhbG1vbiIsImRhcmtzZWFncmVlbiIsImRhcmtzbGF0ZWJsdWUiLCJkYXJrc2xhdGVncmF5IiwiZGFya3NsYXRlZ3JleSIsImRhcmt0dXJxdW9pc2UiLCJkYXJrdmlvbGV0IiwiZGVlcHBpbmsiLCJkZWVwc2t5Ymx1ZSIsImRpbWdyYXkiLCJkaW1ncmV5IiwiZG9kZ2VyYmx1ZSIsImZpcmVicmljayIsImZsb3JhbHdoaXRlIiwiZm9yZXN0Z3JlZW4iLCJmdWNoc2lhIiwiZ2FpbnNib3JvIiwiZ2hvc3R3aGl0ZSIsImdvbGQiLCJnb2xkZW5yb2QiLCJncmF5IiwiZ3JlZW4iLCJncmVlbnllbGxvdyIsImdyZXkiLCJob25leWRldyIsImhvdHBpbmsiLCJpbmRpYW5yZWQiLCJpbmRpZ28iLCJpdm9yeSIsImtoYWtpIiwibGF2ZW5kZXIiLCJsYXZlbmRlcmJsdXNoIiwibGF3bmdyZWVuIiwibGVtb25jaGlmZm9uIiwibGlnaHRibHVlIiwibGlnaHRjb3JhbCIsImxpZ2h0Y3lhbiIsImxpZ2h0Z29sZGVucm9keWVsbG93IiwibGlnaHRncmF5IiwibGlnaHRncmVlbiIsImxpZ2h0Z3JleSIsImxpZ2h0cGluayIsImxpZ2h0c2FsbW9uIiwibGlnaHRzZWFncmVlbiIsImxpZ2h0c2t5Ymx1ZSIsImxpZ2h0c2xhdGVncmF5IiwibGlnaHRzbGF0ZWdyZXkiLCJsaWdodHN0ZWVsYmx1ZSIsImxpZ2h0eWVsbG93IiwibGltZSIsImxpbWVncmVlbiIsImxpbmVuIiwibWFnZW50YSIsIm1hcm9vbiIsIm1lZGl1bWFxdWFtYXJpbmUiLCJtZWRpdW1ibHVlIiwibWVkaXVtb3JjaGlkIiwibWVkaXVtcHVycGxlIiwibWVkaXVtc2VhZ3JlZW4iLCJtZWRpdW1zbGF0ZWJsdWUiLCJtZWRpdW1zcHJpbmdncmVlbiIsIm1lZGl1bXR1cnF1b2lzZSIsIm1lZGl1bXZpb2xldHJlZCIsIm1pZG5pZ2h0Ymx1ZSIsIm1pbnRjcmVhbSIsIm1pc3R5cm9zZSIsIm1vY2Nhc2luIiwibmF2YWpvd2hpdGUiLCJuYXZ5Iiwib2xkbGFjZSIsIm9saXZlIiwib2xpdmVkcmFiIiwib3JhbmdlIiwib3JhbmdlcmVkIiwib3JjaGlkIiwicGFsZWdvbGRlbnJvZCIsInBhbGVncmVlbiIsInBhbGV0dXJxdW9pc2UiLCJwYWxldmlvbGV0cmVkIiwicGFwYXlhd2hpcCIsInBlYWNocHVmZiIsInBlcnUiLCJwaW5rIiwicGx1bSIsInBvd2RlcmJsdWUiLCJwdXJwbGUiLCJyZWJlY2NhcHVycGxlIiwicmVkIiwicm9zeWJyb3duIiwicm95YWxibHVlIiwic2FkZGxlYnJvd24iLCJzYWxtb24iLCJzYW5keWJyb3duIiwic2VhZ3JlZW4iLCJzZWFzaGVsbCIsInNpZW5uYSIsInNpbHZlciIsInNreWJsdWUiLCJzbGF0ZWJsdWUiLCJzbGF0ZWdyYXkiLCJzbGF0ZWdyZXkiLCJzbm93Iiwic3ByaW5nZ3JlZW4iLCJzdGVlbGJsdWUiLCJ0YW4iLCJ0ZWFsIiwidGhpc3RsZSIsInRvbWF0byIsInR1cnF1b2lzZSIsInZpb2xldCIsIndoZWF0Iiwid2hpdGUiLCJ3aGl0ZXNtb2tlIiwieWVsbG93IiwieWVsbG93Z3JlZW4iLCJjb2xvcl9mb3JtYXRIZXgiLCJyZ2IiLCJmb3JtYXRIZXgiLCJjb2xvcl9mb3JtYXRSZ2IiLCJmb3JtYXRSZ2IiLCJjb2xvciIsImwiLCJ0b0xvd2VyQ2FzZSIsImV4ZWMiLCJwYXJzZUludCIsInJnYm4iLCJSZ2IiLCJyZ2JhIiwiaHNsYSIsInIiLCJnIiwicmdiQ29udmVydCIsIm9wYWNpdHkiLCJyZ2JfZm9ybWF0SGV4IiwiaGV4IiwicmdiX2Zvcm1hdFJnYiIsImNsYW1wYSIsImNsYW1waSIsInRvU3RyaW5nIiwiaCIsIkhzbCIsImhzbENvbnZlcnQiLCJjbGFtcGgiLCJjbGFtcHQiLCJoc2wycmdiIiwibTIiLCJjaGFubmVscyIsImFzc2lnbiIsImRpc3BsYXlhYmxlIiwiZm9ybWF0SGV4OCIsImZvcm1hdEhzbCIsImNsYW1wIiwicmFkaWFucyIsIlBJIiwiZGVncmVlcyIsIlhuIiwiWW4iLCJabiIsInQwIiwidDEiLCJ0MiIsInQzIiwibGFiQ29udmVydCIsIkxhYiIsIkhjbCIsImhjbDJsYWIiLCJyZ2IybHJnYiIsInh5ejJsYWIiLCJsYWIiLCJsYWIyeHl6IiwibHJnYjJyZ2IiLCJjb3MiLCJzaW4iLCJhdGFuMiIsImhjbENvbnZlcnQiLCJjb25zdGFudCQxIiwiZ2FtbWEiLCJub2dhbW1hIiwiZXhwb25lbnRpYWwiLCJsaW5lYXIiLCJpbnRlcnBvbGF0ZVJnYiIsInJnYkdhbW1hIiwiZW5kIiwiY29sb3JSZ2IiLCJzcGxpbmUiLCJyZ2JCYXNpcyIsInYxIiwidjIiLCJ2MCIsInYzIiwiYmFzaXMiLCJjb2xvcnMiLCJudW1iZXJBcnJheSIsImdlbmVyaWNBcnJheSIsIm5iIiwibmEiLCJkYXRlJDEiLCJEYXRlIiwic2V0VGltZSIsImludGVycG9sYXRlTnVtYmVyIiwib2JqZWN0IiwicmVBIiwicmVCIiwic291cmNlIiwiaW50ZXJwb2xhdGVTdHJpbmciLCJhbSIsImJtIiwiYnMiLCJiaSIsImxhc3RJbmRleCIsInEiLCJvbmUiLCJpbnRlcnBvbGF0ZSQxIiwiZGF0ZSIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwiRGF0YVZpZXciLCJpc051bWJlckFycmF5IiwiaW50ZXJwb2xhdGVSb3VuZCIsInN2Z05vZGUiLCJyb3RhdGUiLCJza2V3WCIsInNjYWxlWCIsInNjYWxlWSIsImRlY29tcG9zZSIsImF0YW4iLCJpbnRlcnBvbGF0ZVRyYW5zZm9ybSIsInBhcnNlIiwicHhDb21tYSIsInB4UGFyZW4iLCJkZWdQYXJlbiIsInBvcCIsInhhIiwieWEiLCJ4YiIsInliIiwidHJhbnNsYXRlIiwiaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MiLCJET01NYXRyaXgiLCJXZWJLaXRDU1NNYXRyaXgiLCJpc0lkZW50aXR5IiwiaW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmciLCJiYXNlVmFsIiwiY29uc29saWRhdGUiLCJtYXRyaXgiLCJjb2xvckxhYiIsInRhc2tIZWFkIiwidGFza1RhaWwiLCJmcmFtZSIsInRpbWVvdXQiLCJpbnRlcnZhbCIsInBva2VEZWxheSIsImNsb2NrTGFzdCIsImNsb2NrTm93IiwiY2xvY2tTa2V3IiwiY2xvY2siLCJwZXJmb3JtYW5jZSIsIm5vdyIsInNldEZyYW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwic2V0VGltZW91dCIsImNsZWFyTm93IiwiVGltZXIiLCJfY2FsbCIsIl90aW1lIiwidGltZXIiLCJkZWxheSIsInRpbWUiLCJyZXN0YXJ0Iiwid2FrZSIsInRpbWVyRmx1c2giLCJzbGVlcCIsIm5hcCIsInBva2UiLCJjbGVhclRpbWVvdXQiLCJjbGVhckludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJlbGFwc2VkIiwiZW1wdHlPbiIsImVtcHR5VHdlZW4iLCJDUkVBVEVEIiwiU0NIRURVTEVEIiwiU1RBUlRJTkciLCJTVEFSVEVEIiwiUlVOTklORyIsIkVORElORyIsIkVOREVEIiwic2NoZWR1bGUiLCJpZCIsInRpbWluZyIsInNjaGVkdWxlcyIsIl9fdHJhbnNpdGlvbiIsInNlbGYiLCJ0d2VlbiIsInN0YXRlIiwiZHVyYXRpb24iLCJlYXNlIiwiaW5pdCIsInR3ZWVuUmVtb3ZlIiwidHdlZW4wIiwidHdlZW4xIiwidHdlZW5GdW5jdGlvbiIsInR3ZWVuVmFsdWUiLCJfaWQiLCJpbnRlcnBvbGF0ZSIsInZhbHVlMSIsInN0cmluZzAwIiwiaW50ZXJwb2xhdGUwIiwic3RyaW5nMSIsInN0cmluZzAiLCJzdHJpbmcxMCIsImF0dHJUd2Vlbk5TIiwiYXR0ckludGVycG9sYXRlTlMiLCJfdmFsdWUiLCJhdHRyVHdlZW4iLCJhdHRySW50ZXJwb2xhdGUiLCJkZWxheUZ1bmN0aW9uIiwiZGVsYXlDb25zdGFudCIsImR1cmF0aW9uRnVuY3Rpb24iLCJkdXJhdGlvbkNvbnN0YW50IiwiVHJhbnNpdGlvbiIsIl9uYW1lIiwibmV3SWQiLCJzZWxlY3Rpb25fcHJvdG90eXBlIiwiaW5oZXJpdCIsImlkMCIsImlkMSIsIm9uMCIsIm9uMSIsInNpdCIsImV2ZXJ5Iiwib25GdW5jdGlvbiIsInN0eWxlVHdlZW4iLCJzdHlsZU51bGwiLCJsaXN0ZW5lcjAiLCJzdHlsZU1heWJlUmVtb3ZlIiwic3R5bGVJbnRlcnBvbGF0ZSIsInRleHRUd2VlbiIsInRleHRJbnRlcnBvbGF0ZSIsInJlbW92ZUZ1bmN0aW9uIiwiZWFzZUNvbnN0YW50IiwiZWFzZVZhcnlpbmciLCJjYW5jZWwiLCJpbnRlcnJ1cHQiLCJkZWZhdWx0VGltaW5nIiwiYWN0aXZlIiwicGkiLCJ0YXUiLCJ0YXVFcHNpbG9uIiwic3RyaW5ncyIsIlBhdGgiLCJkaWdpdHMiLCJfeDAiLCJfeTAiLCJfeDEiLCJfeTEiLCJfYXBwZW5kIiwiYXBwZW5kUm91bmQiLCJtb3ZlVG8iLCJjbG9zZVBhdGgiLCJsaW5lVG8iLCJxdWFkcmF0aWNDdXJ2ZVRvIiwieDEiLCJ5MSIsImJlemllckN1cnZlVG8iLCJ4MiIsInkyIiwiYXJjVG8iLCJ4MCIsInkwIiwieDIxIiwieTIxIiwieDAxIiwieTAxIiwibDAxXzIiLCJhYnMiLCJ4MjAiLCJ5MjAiLCJsMjFfMiIsImwyMF8yIiwibDIxIiwibDAxIiwiYWNvcyIsInQwMSIsInQyMSIsImFyYyIsImEwIiwiYTEiLCJjY3ciLCJkeCIsImR5IiwiY3ciLCJkYSIsInJlY3QiLCJ3IiwiZm9ybWF0RGVjaW1hbFBhcnRzIiwidG9FeHBvbmVudGlhbCIsImNvZWZmaWNpZW50IiwiZXhwb25lbnQiLCJwcmVmaXhFeHBvbmVudCIsInJlIiwiZm9ybWF0U3BlY2lmaWVyIiwic3BlY2lmaWVyIiwiRm9ybWF0U3BlY2lmaWVyIiwiZmlsbCIsImFsaWduIiwic2lnbiIsInN5bWJvbCIsIndpZHRoIiwiY29tbWEiLCJwcmVjaXNpb24iLCJmb3JtYXRSb3VuZGVkIiwiZm9ybWF0VHlwZXMiLCJ0b0ZpeGVkIiwidG9Mb2NhbGVTdHJpbmciLCJyZXBsYWNlIiwidG9QcmVjaXNpb24iLCJYIiwidG9VcHBlckNhc2UiLCJpZGVudGl0eSQyIiwibG9jYWxlIiwiZm9ybWF0UHJlZml4IiwicHJlZml4ZXMiLCJmb3JtYXRMb2NhbGUkMSIsImdyb3VwaW5nIiwidGhvdXNhbmRzIiwiTnVtYmVyIiwic3Vic3RyaW5nIiwiY3VycmVuY3lQcmVmaXgiLCJjdXJyZW5jeSIsImN1cnJlbmN5U3VmZml4IiwiZGVjaW1hbCIsIm51bWVyYWxzIiwiZm9ybWF0TnVtZXJhbHMiLCJTdHJpbmciLCJwZXJjZW50IiwibWludXMiLCJuYW4iLCJuZXdGb3JtYXQiLCJzdWZmaXgiLCJmb3JtYXRUeXBlIiwibWF5YmVTdWZmaXgiLCJ2YWx1ZVByZWZpeCIsInZhbHVlU3VmZml4IiwidmFsdWVOZWdhdGl2ZSIsIm91dCIsImZvcm1hdFRyaW0iLCJjaGFyQ29kZUF0IiwicGFkZGluZyIsImluaXRSYW5nZSIsImZvcm1hdExvY2FsZSIsImltcGxpY2l0Iiwib3JkaW5hbCIsInVua25vd24iLCJ1bml0Iiwibm9ybWFsaXplIiwiYmltYXAiLCJkMCIsImQxIiwicjAiLCJyMSIsInBvbHltYXAiLCJiaXNlY3QiLCJ0YXJnZXQiLCJ0cmFuc2Zvcm1lciIsInVudHJhbnNmb3JtIiwicGllY2V3aXNlIiwib3V0cHV0IiwiaW5wdXQiLCJpbnRlcnBvbGF0ZVZhbHVlIiwicmVzY2FsZSIsImludmVydCIsInJhbmdlUm91bmQiLCJ1IiwiY29udGludW91cyIsInByZWNpc2lvblByZWZpeCIsInByZWNpc2lvblJvdW5kIiwicHJlY2lzaW9uRml4ZWQiLCJsaW5lYXJpc2giLCJuaWNlIiwicHJlc3RlcCIsIm1heEl0ZXIiLCJ0aW1lSW50ZXJ2YWwiLCJmbG9vcmkiLCJvZmZzZXRpIiwiZmllbGQiLCJtaWxsaXNlY29uZCIsImR1cmF0aW9uU2Vjb25kIiwiZHVyYXRpb25NaW51dGUiLCJkdXJhdGlvbkhvdXIiLCJkdXJhdGlvbkRheSIsImR1cmF0aW9uV2VlayIsImR1cmF0aW9uTW9udGgiLCJkdXJhdGlvblllYXIiLCJzZWNvbmQiLCJnZXRNaWxsaXNlY29uZHMiLCJnZXRVVENTZWNvbmRzIiwidGltZU1pbnV0ZSIsImdldFNlY29uZHMiLCJnZXRNaW51dGVzIiwidXRjTWludXRlIiwic2V0VVRDU2Vjb25kcyIsImdldFVUQ01pbnV0ZXMiLCJ0aW1lSG91ciIsImdldEhvdXJzIiwidXRjSG91ciIsInNldFVUQ01pbnV0ZXMiLCJnZXRVVENIb3VycyIsInRpbWVEYXkiLCJzZXRIb3VycyIsInNldERhdGUiLCJnZXREYXRlIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJ1dGNEYXkiLCJzZXRVVENIb3VycyIsInNldFVUQ0RhdGUiLCJnZXRVVENEYXRlIiwidW5peERheSIsInRpbWVXZWVrZGF5IiwiZ2V0RGF5IiwidGltZVN1bmRheSIsInRpbWVNb25kYXkiLCJ0aW1lVHVlc2RheSIsInRpbWVXZWRuZXNkYXkiLCJ0aW1lVGh1cnNkYXkiLCJ0aW1lRnJpZGF5IiwidGltZVNhdHVyZGF5IiwidXRjV2Vla2RheSIsImdldFVUQ0RheSIsInV0Y1N1bmRheSIsInV0Y01vbmRheSIsInV0Y1R1ZXNkYXkiLCJ1dGNXZWRuZXNkYXkiLCJ1dGNUaHVyc2RheSIsInV0Y0ZyaWRheSIsInV0Y1NhdHVyZGF5IiwidGltZU1vbnRoIiwic2V0TW9udGgiLCJnZXRNb250aCIsImdldEZ1bGxZZWFyIiwidXRjTW9udGgiLCJzZXRVVENNb250aCIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRnVsbFllYXIiLCJ0aW1lWWVhciIsInNldEZ1bGxZZWFyIiwidXRjWWVhciIsInNldFVUQ0Z1bGxZZWFyIiwidGltZVRpY2tzIiwidGltZVRpY2tJbnRlcnZhbCIsInllYXIiLCJtb250aCIsIndlZWsiLCJkYXkiLCJob3VyIiwibWludXRlIiwidGlja0ludGVydmFscyIsInRpY2tJbnRlcnZhbCIsInRpY2tlciIsImxvY2FsRGF0ZSIsIkgiLCJNIiwiUyIsIkwiLCJ1dGNEYXRlIiwiVVRDIiwibmV3RGF0ZSIsInRpbWVGb3JtYXQiLCJwYWRzIiwibnVtYmVyUmUiLCJwZXJjZW50UmUiLCJyZXF1b3RlUmUiLCJwYWQiLCJyZXF1b3RlIiwiZm9ybWF0UmUiLCJmb3JtYXRMb29rdXAiLCJwYXJzZVdlZWtkYXlOdW1iZXJTdW5kYXkiLCJwYXJzZVdlZWtkYXlOdW1iZXJNb25kYXkiLCJwYXJzZVdlZWtOdW1iZXJTdW5kYXkiLCJVIiwicGFyc2VXZWVrTnVtYmVySVNPIiwiViIsInBhcnNlV2Vla051bWJlck1vbmRheSIsIlciLCJwYXJzZUZ1bGxZZWFyIiwicGFyc2VZZWFyIiwicGFyc2Vab25lIiwiWiIsInBhcnNlUXVhcnRlciIsInBhcnNlTW9udGhOdW1iZXIiLCJwYXJzZURheU9mTW9udGgiLCJwYXJzZURheU9mWWVhciIsInBhcnNlSG91cjI0IiwicGFyc2VNaW51dGVzIiwicGFyc2VTZWNvbmRzIiwicGFyc2VNaWxsaXNlY29uZHMiLCJwYXJzZU1pY3Jvc2Vjb25kcyIsInBhcnNlTGl0ZXJhbFBlcmNlbnQiLCJwYXJzZVVuaXhUaW1lc3RhbXAiLCJRIiwicGFyc2VVbml4VGltZXN0YW1wU2Vjb25kcyIsImZvcm1hdERheU9mTW9udGgiLCJmb3JtYXRIb3VyMjQiLCJmb3JtYXRIb3VyMTIiLCJmb3JtYXREYXlPZlllYXIiLCJmb3JtYXRNaWxsaXNlY29uZHMiLCJmb3JtYXRNaWNyb3NlY29uZHMiLCJmb3JtYXRNb250aE51bWJlciIsImZvcm1hdE1pbnV0ZXMiLCJmb3JtYXRTZWNvbmRzIiwiZm9ybWF0V2Vla2RheU51bWJlck1vbmRheSIsImZvcm1hdFdlZWtOdW1iZXJTdW5kYXkiLCJkSVNPIiwiZm9ybWF0V2Vla051bWJlcklTTyIsImZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXkiLCJmb3JtYXRXZWVrTnVtYmVyTW9uZGF5IiwiZm9ybWF0WWVhciIsImZvcm1hdFllYXJJU08iLCJmb3JtYXRGdWxsWWVhciIsImZvcm1hdEZ1bGxZZWFySVNPIiwiZm9ybWF0Wm9uZSIsImZvcm1hdFVUQ0RheU9mTW9udGgiLCJmb3JtYXRVVENIb3VyMjQiLCJmb3JtYXRVVENIb3VyMTIiLCJmb3JtYXRVVENEYXlPZlllYXIiLCJmb3JtYXRVVENNaWxsaXNlY29uZHMiLCJnZXRVVENNaWxsaXNlY29uZHMiLCJmb3JtYXRVVENNaWNyb3NlY29uZHMiLCJmb3JtYXRVVENNb250aE51bWJlciIsImZvcm1hdFVUQ01pbnV0ZXMiLCJmb3JtYXRVVENTZWNvbmRzIiwiZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheSIsImRvdyIsImZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXkiLCJVVENkSVNPIiwiZm9ybWF0VVRDV2Vla051bWJlcklTTyIsImZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJTdW5kYXkiLCJmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5IiwiZm9ybWF0VVRDWWVhciIsImZvcm1hdFVUQ1llYXJJU08iLCJmb3JtYXRVVENGdWxsWWVhciIsImZvcm1hdFVUQ0Z1bGxZZWFySVNPIiwiZm9ybWF0VVRDWm9uZSIsImZvcm1hdExpdGVyYWxQZXJjZW50IiwiZm9ybWF0VW5peFRpbWVzdGFtcCIsImZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzIiwiY2FsZW5kYXIiLCJmb3JtYXRNaWxsaXNlY29uZCIsImZvcm1hdFNlY29uZCIsImZvcm1hdE1pbnV0ZSIsImZvcm1hdEhvdXIiLCJmb3JtYXREYXkiLCJmb3JtYXRXZWVrIiwiZm9ybWF0TW9udGgiLCJ0aW1lV2VlayIsInRpbWVTZWNvbmQiLCJsb2NhbGVfZGF0ZVRpbWUiLCJkYXRlVGltZSIsImxvY2FsZV9kYXRlIiwibG9jYWxlX3RpbWUiLCJsb2NhbGVfcGVyaW9kcyIsInBlcmlvZHMiLCJsb2NhbGVfd2Vla2RheXMiLCJkYXlzIiwibG9jYWxlX3Nob3J0V2Vla2RheXMiLCJzaG9ydERheXMiLCJsb2NhbGVfbW9udGhzIiwibW9udGhzIiwibG9jYWxlX3Nob3J0TW9udGhzIiwic2hvcnRNb250aHMiLCJwZXJpb2RSZSIsInBlcmlvZExvb2t1cCIsIndlZWtkYXlSZSIsIndlZWtkYXlMb29rdXAiLCJzaG9ydFdlZWtkYXlSZSIsInNob3J0V2Vla2RheUxvb2t1cCIsIm1vbnRoUmUiLCJtb250aExvb2t1cCIsInNob3J0TW9udGhSZSIsInNob3J0TW9udGhMb29rdXAiLCJmb3JtYXRzIiwiQSIsIkIiLCJHIiwiSSIsIlkiLCJ1dGNGb3JtYXRzIiwicGFyc2VzIiwicGFyc2VTcGVjaWZpZXIiLCJjaGFyQXQiLCJuZXdQYXJzZSIsInV0Y0Zvcm1hdCIsInV0Y1BhcnNlIiwiZGVmYXVsdExvY2FsZSIsInNjaGVtZSIsImludGVycG9sYXRlUmdiQmFzaXMiLCJyYW1wIiwiaGFsZlBpIiwiYXNpbiIsIndpdGhQYXRoIiwic2hhcGUiLCJSYW5nZUVycm9yIiwiYXJjSW5uZXJSYWRpdXMiLCJpbm5lclJhZGl1cyIsImFyY091dGVyUmFkaXVzIiwib3V0ZXJSYWRpdXMiLCJhcmNTdGFydEFuZ2xlIiwic3RhcnRBbmdsZSIsImFyY0VuZEFuZ2xlIiwiZW5kQW5nbGUiLCJhcmNQYWRBbmdsZSIsInBhZEFuZ2xlIiwiY29ybmVyVGFuZ2VudHMiLCJyYyIsIm94Iiwib3kiLCJ4MTEiLCJ5MTEiLCJ4MTAiLCJ5MTAiLCJ4MDAiLCJ5MDAiLCJkMiIsIkQiLCJjeDAiLCJjeTAiLCJjeDEiLCJjeTEiLCJkeDAiLCJkeTAiLCJkeDEiLCJkeTEiLCJjeCIsImN5IiwiY29ybmVyUmFkaXVzIiwicGFkUmFkaXVzIiwiYnVmZmVyIiwiYTAxIiwiYTExIiwiYTAwIiwiYTEwIiwiZGEwIiwiZGExIiwiYXAiLCJycCIsInJjMCIsInJjMSIsInAwIiwicDEiLCJvYyIsIngzIiwieTMiLCJ4MzIiLCJ5MzIiLCJpbnRlcnNlY3QiLCJheCIsImF5IiwiYngiLCJieSIsImtjIiwibGMiLCJjZW50cm9pZCIsIkxpbmVhciIsIl9jb250ZXh0IiwiY3VydmVMaW5lYXIiLCJUcmFuc2Zvcm0iLCJTZWFyY2hUeXBlIiwiR3JhcGhUeXBlIiwiVmFsdWVUeXBlIiwiYXJlYVN0YXJ0IiwiX2xpbmUiLCJhcmVhRW5kIiwibGluZVN0YXJ0IiwiX3BvaW50IiwibGluZUVuZCIsInBvaW50IiwiYXBwbHlYIiwiYXBwbHlZIiwibG9jYXRpb24iLCJpbnZlcnRYIiwiaW52ZXJ0WSIsInJlc2NhbGVYIiwicmVzY2FsZVkiLCJEYXRhUG9pbnQiLCJRdWVyeSIsInNlYXJjaFR5cGUiLCJzZWFyY2hUYXJnZXQiLCJzZXBhcmF0b3IiLCJhY2Nlc3NvciIsImFjY2Vzc29yMSIsImFjY2Vzc29yMiIsInZhbHVlVHlwZSIsInVzZWRBc1hEYXRhc2V0IiwibnVtVGFyZ2V0cyIsIlRhYmxlIiwicmVnZXgiLCJwYXJzZUZsb2F0IiwiaXNOdW1iZXIiLCJwYXJlbnRUYXJnZXQiLCJlcXVhbFRvIiwib3RoZXIiLCJnZXRUeXBlIiwiZ2V0VGFyZ2V0IiwiZ2V0UGFyZW50VGFyZ2V0IiwiZ2V0SWQiLCJnZXRBY2Nlc3NvciIsInNldFNlcGFyYXRvciIsInNlcCIsImdldFNlcGFyYXRvciIsImlzRm9yRnJvbnRtYXR0ZXJUYWdzIiwiYWRkTnVtVGFyZ2V0cyIsIm51bSIsImdldE51bVRhcmdldHMiLCJEYXRhc2V0IiwicXVlcnkiLCJjdXJyZW50SW5kZXgiLCJ5TWluIiwieU1heCIsInN0YXJ0RGF0ZSIsImVuZERhdGUiLCJsaW5lSW5mbyIsImJhckluZm8iLCJpc1RtcERhdGFzZXQiLCJpbmQiLCJnZXREYXRlcyIsImNsb25lVG9UbXBEYXRhc2V0IiwidG1wRGF0YXNldCIsImdldE5hbWUiLCJzZXROYW1lIiwic2V0SWQiLCJnZXRWYWx1ZSIsImRheVNoaWZ0IiwiZ2V0SW5kZXhPZkRhdGUiLCJzZXRWYWx1ZSIsInJlY2FsY3VsYXRlTWluTWF4IiwiZ2V0WU1pbiIsImdldFlNYXgiLCJnZXRTdGFydERhdGUiLCJnZXRFbmREYXRlIiwic2hpZnQiLCJzaGlmdEFtb3VudCIsImRvTGFyZ2VydGhhbiIsImFueVNoaWZ0ZWQiLCJzZXRQZW5hbHR5IiwicGVuYWx0eSIsImdldFF1ZXJ5IiwiYWNjdW11bGF0ZVZhbHVlcyIsImFjY3VtVmFsdWUiLCJzaGlmdEJ5RGF0YXNldCIsInNoaWZ0RGF0YXNldCIsImN1cnJlbnRWYWx1ZSIsImdldFZhbHVlcyIsImdldExlbmd0aCIsImdldExlbmd0aE5vdE51bGwiLCJjb3VudE5vdE51bGwiLCJEYXRhc2V0cyIsImRhdGVzIiwiZGF0YXNldHMiLCJkYXRlRm9ybWF0IiwiY3JlYXRpb25EYXRhIiwiY3VyRGF0ZSIsIm1vbWVudCIsImNyZWF0ZURhdGFzZXQiLCJyZW5kZXJJbmZvIiwiZGF0YXNldCIsImRhdGFzZXROYW1lIiwiZ2V0RGF0YXNldEJ5UXVlcnkiLCJnZXREYXRhc2V0QnlJZCIsImdldFhEYXRhc2V0SWRzIiwiaWRzIiwiaW5jbHVkZXMiLCJnZXROYW1lcyIsIlJlbmRlckluZm8iLCJxdWVyaWVzIiwieERhdGFzZXQiLCJmb2xkZXIiLCJmaWxlIiwic3BlY2lmaWVkRmlsZXNPbmx5IiwiZmlsZUNvbnRhaW5zTGlua2VkRmlsZXMiLCJmaWxlTXVsdGlwbGllckFmdGVyTGluayIsImRhdGVGb3JtYXRQcmVmaXgiLCJkYXRlRm9ybWF0U3VmZml4IiwiY29uc3RWYWx1ZSIsImlnbm9yZUF0dGFjaGVkVmFsdWUiLCJpZ25vcmVaZXJvVmFsdWUiLCJhY2N1bSIsInN0YWNrIiwidmFsdWVTaGlmdCIsInNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbiIsInRleHRWYWx1ZU1hcCIsImRhdGFBcmVhU2l6ZSIsIlNpemUiLCJhc3BlY3RSYXRpbyIsIkFzcGVjdFJhdGlvIiwibWFyZ2luIiwiTWFyZ2luIiwiZml4ZWRTY2FsZSIsImZpdFBhbmVsV2lkdGgiLCJiYXIiLCJwaWUiLCJzdW1tYXJ5IiwiaGVhdG1hcCIsImJ1bGxldCIsImN1c3RvbURhdGFzZXQiLCJnZXRRdWVyeUJ5SWQiLCJDdXN0b21EYXRhc2V0SW5mbyIsInhEYXRhIiwieURhdGEiLCJDb21tb25DaGFydEluZm8iLCJ0aXRsZSIsInhBeGlzTGFiZWwiLCJ4QXhpc0NvbG9yIiwieEF4aXNMYWJlbENvbG9yIiwieUF4aXNMYWJlbCIsInlBeGlzQ29sb3IiLCJ5QXhpc0xhYmVsQ29sb3IiLCJ5QXhpc1VuaXQiLCJ4QXhpc1RpY2tJbnRlcnZhbCIsInlBeGlzVGlja0ludGVydmFsIiwieEF4aXNUaWNrTGFiZWxGb3JtYXQiLCJ5QXhpc1RpY2tMYWJlbEZvcm1hdCIsInJldmVyc2VZQXhpcyIsImFsbG93SW5zcGVjdERhdGEiLCJzaG93TGVnZW5kIiwibGVnZW5kUG9zaXRpb24iLCJsZWdlbmRPcmllbnRhdGlvbiIsImxlZ2VuZEJnQ29sb3IiLCJsZWdlbmRCb3JkZXJDb2xvciIsIkdldEdyYXBoVHlwZSIsIlVua25vd24iLCJMaW5lSW5mbyIsImxpbmVDb2xvciIsImxpbmVXaWR0aCIsInNob3dMaW5lIiwic2hvd1BvaW50IiwicG9pbnRDb2xvciIsInBvaW50Qm9yZGVyQ29sb3IiLCJwb2ludEJvcmRlcldpZHRoIiwicG9pbnRTaXplIiwiZmlsbEdhcCIsInlBeGlzTG9jYXRpb24iLCJMaW5lIiwiQmFySW5mbyIsImJhckNvbG9yIiwiQmFyIiwiUGllSW5mbyIsImRhdGFDb2xvciIsImRhdGFOYW1lIiwibGFiZWwiLCJoaWRlTGFiZWxMZXNzVGhhbiIsImV4dExhYmVsIiwic2hvd0V4dExhYmVsT25seUlmTm9MYWJlbCIsInJhdGlvSW5uZXJSYWRpdXMiLCJQaWUiLCJTdW1tYXJ5SW5mbyIsInRlbXBsYXRlIiwiU3VtbWFyeSIsIk1vbnRoSW5mbyIsIm1vZGUiLCJzdGFydFdlZWtPbiIsInRocmVzaG9sZCIsImRpbU5vdEluTW9udGgiLCJpbml0TW9udGgiLCJzaG93U2VsZWN0ZWRWYWx1ZSIsImhlYWRlclllYXJDb2xvciIsImhlYWRlck1vbnRoQ29sb3IiLCJkaXZpZGluZ0xpbmVDb2xvciIsInNob3dDaXJjbGUiLCJzaG93U3RyZWFrIiwic2hvd1RvZGF5UmluZyIsInNob3dTZWxlY3RlZFJpbmciLCJjaXJjbGVDb2xvciIsImNpcmNsZUNvbG9yQnlWYWx1ZSIsInRvZGF5UmluZ0NvbG9yIiwic2VsZWN0ZWRSaW5nQ29sb3IiLCJzaG93QW5ub3RhdGlvbiIsImFubm90YXRpb24iLCJzaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0cyIsInNlbGVjdGVkRGF0ZSIsInNlbGVjdGVkRGF0YXNldCIsIk1vbnRoIiwiSGVhdG1hcEluZm8iLCJvcmllbnRhdGlvbiIsIkhlYXRtYXAiLCJCdWxsZXRJbmZvIiwidmFsdWVVbml0IiwidmFsdWVDb2xvciIsInJhbmdlQ29sb3IiLCJzaG93TWFya2VyIiwibWFya2VyVmFsdWUiLCJtYXJrZXJDb2xvciIsIkJ1bGxldCIsImhlaWdodCIsInJlY2FsY3VsYXRlU2l6ZSIsIlRhYmxlRGF0YSIsImZpbGVQYXRoIiwidGFibGVJbmRleCIsInlEYXRhc2V0cyIsIkNvbGxlY3RpbmdQcm9jZXNzSW5mbyIsImZpbGVUb3RhbCIsImZpbGVBdmFpbGFibGUiLCJmaWxlT3V0T2ZEYXRlUmFuZ2UiLCJmaWxlTm90SW5Gb3JtYXQiLCJlcnJvck1lc3NhZ2UiLCJtaW5EYXRlIiwibWF4RGF0ZSIsImdvdEFueVZhbGlkWFZhbHVlIiwiZ290QW55VmFsaWRZVmFsdWUiLCJmbXRIb3VycyIsImZtdE1pbnMiLCJmbXRTZWNzIiwiZm10SG91ciIsImZtdE1pbiIsImZtdFNlYyIsImZtdCIsIm1ha2VUaW1lRm9ybWF0IiwiZ2V0RGF0ZVN0cmluZ0Zyb21JbnB1dFN0cmluZyIsImlucHV0U3RyaW5nIiwiZGF0ZVN0cmluZyIsInN0YXJ0c1dpdGgiLCJzdHJUb0RhdGUiLCJzdHJEYXRlIiwiZW5kc1dpdGgiLCJJU09fODYwMSIsInN0YXJ0T2YiLCJleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmciLCJzdHJEdXJhdGlvbiIsInVuaXRzIiwicmVtb3ZlUGF0dGVybiIsInN0clJlZ2V4IiwicGFyc2VEdXJhdGlvblN0cmluZyIsImhhc1ZhbHVlIiwibmVnYXRpdmVWYWx1ZSIsInllYXJWYWx1ZSIsIm1vbnRoVmFsdWUiLCJ3ZWVrVmFsdWUiLCJkYXlWYWx1ZSIsImhvdXJWYWx1ZSIsIm1pbnV0ZVZhbHVlIiwic2Vjb25kVmFsdWUiLCJnZXREYXRlQnlEdXJhdGlvblRvVG9kYXkiLCJyZWxEYXRlU3RyaW5nIiwiaXNEdXJhdGlvbiIsImdldERhdGVUb2RheSIsImlzVmFsaWQiLCJkYXRlVG9TdHIiLCJnZXREYXRlRnJvbVVuaXhUaW1lIiwidW5peFRpbWUiLCJkZWVwVmFsdWUiLCJvYmoiLCJzdHIiLCJ0cmltQnlDaGFyIiwiY2hhciIsImFyciIsImZpcnN0IiwiZmluZEluZGV4IiwibGFzdCIsInJlcGxhY2VJbWdUYWdCeUFsdCIsImVtb2ppIiwicGFyc2VGbG9hdEZyb21BbnkiLCJ0b1BhcnNlIiwidGltZVZhbHVlIiwiZGlmZiIsIlRpbWUiLCJrZXlzIiwic3RyUmVwbGFjZWRWYWx1ZSIsIm1lYXN1cmVUZXh0U2l6ZSIsInN0eWxlQ2xhc3MiLCJjb250YWluZXIiLCJkMy5zZWxlY3QiLCJ0ZXh0QmxvY2siLCJnZXRCQm94IiwiZXhwYW5kQXJlYSIsImFyZWEiLCJhZGRXIiwiYWRkSCIsIm5ld1dpZHRoIiwibmV3SGVpZ2h0IiwibW92ZUFyZWEiLCJzaGlmdFgiLCJzaGlmdFkiLCJ0cmFucyIsImNsZWFuVGV4dCIsIkpzZXAiLCJ2ZXJzaW9uIiwiYWRkVW5hcnlPcCIsIm9wX25hbWUiLCJtYXhfdW5vcF9sZW4iLCJ1bmFyeV9vcHMiLCJhZGRCaW5hcnlPcCIsInByZWNlZGVuY2UiLCJpc1JpZ2h0QXNzb2NpYXRpdmUiLCJtYXhfYmlub3BfbGVuIiwiYmluYXJ5X29wcyIsInJpZ2h0X2Fzc29jaWF0aXZlIiwiYWRkSWRlbnRpZmllckNoYXIiLCJhZGRpdGlvbmFsX2lkZW50aWZpZXJfY2hhcnMiLCJhZGRMaXRlcmFsIiwibGl0ZXJhbF9uYW1lIiwibGl0ZXJhbF92YWx1ZSIsImxpdGVyYWxzIiwicmVtb3ZlVW5hcnlPcCIsImdldE1heEtleUxlbiIsInJlbW92ZUFsbFVuYXJ5T3BzIiwicmVtb3ZlSWRlbnRpZmllckNoYXIiLCJyZW1vdmVCaW5hcnlPcCIsInJlbW92ZUFsbEJpbmFyeU9wcyIsInJlbW92ZUxpdGVyYWwiLCJyZW1vdmVBbGxMaXRlcmFscyIsImV4cHIiLCJjb2RlIiwiaXNEZWNpbWFsRGlnaXQiLCJjaCIsImJpbmFyeVByZWNlZGVuY2UiLCJvcF92YWwiLCJpc0lkZW50aWZpZXJTdGFydCIsImZyb21DaGFyQ29kZSIsImlzSWRlbnRpZmllclBhcnQiLCJ0aHJvd0Vycm9yIiwibWVzc2FnZSIsImRlc2NyaXB0aW9uIiwicnVuSG9vayIsImhvb2tzIiwiZW52IiwicnVuIiwic2VhcmNoSG9vayIsImdvYmJsZVNwYWNlcyIsIlNQQUNFX0NPREUiLCJUQUJfQ09ERSIsIkxGX0NPREUiLCJDUl9DT0RFIiwiZ29iYmxlRXhwcmVzc2lvbnMiLCJDT01QT1VORCIsImJvZHkiLCJ1bnRpbElDb2RlIiwiY2hfaSIsIlNFTUNPTF9DT0RFIiwiQ09NTUFfQ09ERSIsImdvYmJsZUV4cHJlc3Npb24iLCJnb2JibGVCaW5hcnlFeHByZXNzaW9uIiwiZ29iYmxlQmluYXJ5T3AiLCJ0b19jaGVjayIsInN1YnN0ciIsInRjX2xlbiIsImJpb3AiLCJwcmVjIiwiYmlvcF9pbmZvIiwiY3VyX2Jpb3AiLCJnb2JibGVUb2tlbiIsInJpZ2h0X2EiLCJjb21wYXJlUHJldiIsInByZXYiLCJCSU5BUllfRVhQIiwib3BlcmF0b3IiLCJQRVJJT0RfQ09ERSIsImdvYmJsZU51bWVyaWNMaXRlcmFsIiwiU1FVT1RFX0NPREUiLCJEUVVPVEVfQ09ERSIsImdvYmJsZVN0cmluZ0xpdGVyYWwiLCJPQlJBQ0tfQ09ERSIsImdvYmJsZUFycmF5IiwiYXJndW1lbnQiLCJVTkFSWV9FWFAiLCJnb2JibGVJZGVudGlmaWVyIiwiTElURVJBTCIsInJhdyIsInRoaXNfc3RyIiwiVEhJU19FWFAiLCJPUEFSRU5fQ09ERSIsImdvYmJsZUdyb3VwIiwiZ29iYmxlVG9rZW5Qcm9wZXJ0eSIsIlFVTUFSS19DT0RFIiwib3B0aW9uYWwiLCJNRU1CRVJfRVhQIiwiY29tcHV0ZWQiLCJDQlJBQ0tfQ09ERSIsIkNBTExfRVhQIiwiZ29iYmxlQXJndW1lbnRzIiwiQ1BBUkVOX0NPREUiLCJjYWxsZWUiLCJjaENvZGUiLCJzdGFydEluZGV4IiwicXVvdGUiLCJjbG9zZWQiLCJJREVOVElGSUVSIiwidGVybWluYXRpb24iLCJzZXBhcmF0b3JfY291bnQiLCJhcmciLCJTRVFVRU5DRV9FWFAiLCJleHByZXNzaW9ucyIsIkFSUkFZX0VYUCIsImVsZW1lbnRzIiwiZm9yRWFjaCIsInBsdWdpbnMiLCJqc2VwIiwicmVnaXN0ZXJlZCIsInJlZ2lzdGVyIiwicGx1Z2luIiwiQ09MT05fQ09ERSIsIlNldCIsInRydWUiLCJmYWxzZSIsIm51bGwiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwidGVybmFyeSIsImNvbnNlcXVlbnQiLCJhbHRlcm5hdGUiLCJuZXdUZXN0IiwiY2hlY2tEaXZpc29yIiwiZGl2aXNvciIsInNvbWUiLCJub3Rfc3RyaW5nIiwibm90X2Jvb2wiLCJub3RfdHlwZSIsIm5vdF9wcmltaXRpdmUiLCJudW1lcmljX2FyZyIsImpzb24iLCJub3RfanNvbiIsIm1vZHVsbyIsInBsYWNlaG9sZGVyIiwia2V5X2FjY2VzcyIsImluZGV4X2FjY2VzcyIsInNwcmludGYiLCJwYXJzZV90cmVlIiwiYXJndiIsInBoIiwicGFkX2NoYXJhY3RlciIsInBhZF9sZW5ndGgiLCJpc19wb3NpdGl2ZSIsImN1cnNvciIsInRyZWVfbGVuZ3RoIiwicGFyYW1fbm8iLCJGdW5jdGlvbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJwYWRfY2hhciIsInJlcGVhdCIsInNwcmludGZfZm9ybWF0Iiwic3ByaW50Zl9jYWNoZSIsIl9mbXQiLCJhcmdfbmFtZXMiLCJTeW50YXhFcnJvciIsImZpZWxkX2xpc3QiLCJyZXBsYWNlbWVudF9maWVsZCIsImZpZWxkX21hdGNoIiwic3ByaW50Zl9wYXJzZSIsInZzcHJpbnRmIiwiZXhwb3J0cyIsImZuTWFwRGF0YXNldFRvVmFsdWUiLCJkMy5taW4iLCJhcnJheURhdGFzZXQiLCJkYXRhUG9pbnQiLCJkMy5tYXgiLCJkMy5zdW0iLCJudW1EYXlzIiwibnVtRGF5c0hhdmluZ0RhdGEiLCJtYXhTdHJlYWsiLCJzdHJlYWsiLCJtYXhTdHJlYWtTdGFydCIsInN0cmVha1N0YXJ0IiwibWF4U3RyZWFrRW5kIiwic3RyZWFrRW5kIiwibmV4dFBvaW50IiwibWF4QnJlYWtzIiwiYnJlYWtzIiwibWF4QnJlYWtzU3RhcnQiLCJicmVha3NTdGFydCIsIm1heEJyZWFrc0VuZCIsImJyZWFrc0VuZCIsImxhc3RTdHJlYWsiLCJjdXJyZW50U3RyZWFrIiwiY3VycmVudFN0cmVha1N0YXJ0IiwiY3VycmVudFN0cmVha0VuZCIsImN1cnJlbnRCcmVha3MiLCJjdXJyZW50QnJlYWtzU3RhcnQiLCJjdXJyZW50QnJlYWtzRW5kIiwiYXZlcmFnZSIsImQzLm1lZGlhbiIsInZhcmlhbmNlIiwibWVhbiIsImQzLnZhcmlhbmNlIiwiZm5NYXBVbmlyeU9wIiwiZm5NYXBCaW5hcnlPcCIsImZuTWFwRGF0YXNldFRvRGF0YXNldCIsIm5vcm1hbGl6ZWQiLCJzZXRNaXNzaW5nVmFsdWVzIiwibWlzc2luZ1ZhbHVlIiwibmV3RGF0YXNldCIsImV2YWx1YXRlIiwiaWRlbnRpZmllck5hbWUiLCJ1bmlyeUV4cHIiLCJyZXRVbmlyeUFyZyIsImJpbmFyeUV4cHIiLCJsZWZ0VmFsdWUiLCJyaWdodFZhbHVlIiwicmV0Q2hlY2siLCJpc01vbWVudCIsImNoZWNrQmluYXJ5T3BlcmFudFR5cGUiLCJjYWxsRXhwciIsImZuTmFtZSIsImV2YWx1YXRlZEFyZ3MiLCJldmFsdWF0ZUFycmF5IiwiZGF0YXNldElkIiwiZHMiLCJleHByTWFwIiwiZXhwclJlZ2V4IiwiZnVsbG1hdGNoIiwiYXN0IiwiZXJyIiwicmVzb2x2ZVRlbXBsYXRlIiwicmV0UmVzb2x2ZSIsImV4cHJSZXNvbHZlZCIsInN0clZhbHVlIiwiaGVscGVyLmRhdGVUb1N0ciIsInJlc29sdmVWYWx1ZSIsInJlbmRlclBpZSIsImNhbnZhcyIsImNoYXJ0RWxlbWVudHMiLCJwaWVJbmZvIiwicmFkaXVzIiwib3V0dGVyUmFkaXVzIiwic3RyRXhwciIsInJldFZhbHVlIiwiZXhwci5yZXNvbHZlVmFsdWUiLCJsYWJlbHMiLCJyZXRMYWJlbCIsImV4cHIucmVzb2x2ZVRlbXBsYXRlIiwibGFiZWxTaXplcyIsImhlbHBlci5tZWFzdXJlVGV4dFNpemUiLCJleHRMYWJlbHMiLCJyZXRFeHRMYWJlbCIsImV4dExhYmVsU2l6ZXMiLCJjb2xvclNjYWxlIiwiZDMuc2NhbGVPcmRpbmFsIiwic2VjdG9yc0dyb3VwIiwiZGF0YUFyZWEiLCJzb3J0VmFsdWVzIiwiYXJjcyIsInBhIiwiZDMucGllIiwicGllVmFsdWVzIiwiaW5wdXRfaW5kZXgiLCJzZWN0b3JzIiwiZDMuYXJjIiwiaGlkZGVuQXJjIiwiZDNcbiAgICAgICAgLmFyYyIsImlzTGFiZWxIaWRkZW4iLCJhcmNPYmoiLCJnZXRNaWRBbmdsZSIsImV4dGVybmFsTGFiZWxUZXh0IiwicHJldkJCIiwiZXh0bGFiZWxQb3MiLCJnZXRQb2ludHNGb3JDb25uZWN0aW9uTGluZXMiLCJsYWJlbFdpZHRoIiwibGFiZWxIaWRkZW4iLCJtaWRBbmdsZSIsInBvc0xhYmVsIiwicG9zTWlkZGxlIiwicG9zRXh0TGFiZWwiLCJkaXN0TWlkZGxlVG9MYWJlbCIsImFyY09iajEiLCJhcmNPYmoyIiwieXNoaWZ0IiwidGhpc0JCIiwiRE9NUmVjdCIsInJlbmRlclBpZUNoYXJ0IiwicHJvcHMiLCJkM1xuICAgICAgICAuc2VsZWN0IiwiZ3JhcGhBcmVhIiwiY3JlYXRlQXJlYXMiLCJkZWZhdWx0RGF0YUNvbG9yIiwiZDMuc2NoZW1lU3BlY3RyYWwiLCJ0aXRsZVNpemUiLCJoZWxwZXIuZXhwYW5kQXJlYSIsImhlbHBlci5tb3ZlQXJlYSIsInJlbmRlclRpdGxlIiwidGl0bGVIZWlnaHQiLCJuYW1lU2l6ZXMiLCJpbmRNYXhOYW1lIiwibWF4TmFtZVdpZHRoIiwiY2hhcmFjdGVyV2lkdGgiLCJuYW1lSGVpZ2h0IiwibnVtTmFtZXMiLCJ4U3BhY2luZyIsInlTcGFjaW5nIiwibWFya2VyV2lkdGgiLCJsZWdlbmRXaWR0aCIsImxlZ2VuZEhlaWdodCIsImxlZ2VuZFgiLCJsZWdlbmRZIiwibGVnZW5kIiwibGVnZW5kQmciLCJmaXJzdE1hcmtlclgiLCJmaXJzdE1hcmtlclkiLCJmaXJzdExhYmVsWCIsImZpcnN0TGFiZWxZIiwiY3VyclJlbmRlclBvc1giLCJyZW5kZXJMZWdlbmQiLCJfY2FudmFzIiwic3ZnV2lkdGgiLCJzdmdIZWlnaHQiLCJzZXRDaGFydFNjYWxlIiwicmVuZGVyU3VtbWFyeSIsInN1bW1hcnlJbmZvIiwib3V0cHV0U3VtbWFyeSIsInJldFJlc29sdmVkVGVtcGxhdGUiLCJvdXRwdXRMaW5lcyIsIm91dHB1dExpbmUiLCJsb2dUb0NvbnNvbGUiLCJyYXRpb0NlbGxUb1RleHQiLCJyYXRpb0RvdFRvVGV4dCIsInRvTmV4dERhdGFzZXQiLCJtb250aEluZm8iLCJkYXRhc2V0SWRzIiwiY3VyRGF0YXNldElkIiwiY3VySW5kZXgiLCJjbGVhclNlbGVjdGlvbiIsImNpcmNsZXMiLCJjaXJjbGUiLCJtb25pdG9yIiwicmVuZGVyTW9udGhIZWFkZXIiLCJjdXJNb250aERhdGUiLCJkYXlzSW5Nb250aCIsIm1heERheVRleHRTaXplIiwiY2VsbFNpemUiLCJoZWFkZXJZZWFyVGV4dCIsImhlYWRlck1vbnRoVGV4dCIsImhlYWRlclllYXJTaXplIiwiaGVhZGVyTW9udGhTaXplIiwiaGVhZGVySGVpZ2h0IiwiaGVhZGVyR3JvdXAiLCJoZWFkZXJNb250aCIsImhlYWRlclllYXIiLCJkYXRhc2V0TmFtZVNpemUiLCJkYXRhc2V0Um90YXRvciIsInJlZnJlc2giLCJtb25pdG9yVGV4dFNpemUiLCJhcnJvd1NpemUiLCJwcmV2TW9udGhEYXRlIiwibmV4dE1vbnRoRGF0ZSIsInRvZGF5RGF0ZSIsImhlbHBlci5nZXREYXRlVG9kYXkiLCJ3ZWVrZGF5TmFtZXMiLCJ3ZWVrZGF5TmFtZVNpemUiLCJkaXZpZGluZ0xpbmUiLCJyZW5kZXJNb250aERheXMiLCJjdXJEYXRhc2V0SW5kZXgiLCJkb3RSYWRpdXMiLCJzdHJlYWtXaWR0aCIsImFsbG93U2NhbGVkVmFsdWUiLCJtb250aFN0YXJ0RGF0ZSIsInN1YnRyYWN0IiwibW9udGhFbmREYXRlIiwiZW5kT2YiLCJkYXRhU3RhcnREYXRlIiwiZGF0YUVuZERhdGUiLCJhbm5vdGF0aW9ucyIsImN1ckFubm90YXRpb24iLCJkYXlzSW5Nb250aFZpZXciLCJpbmRDb2wiLCJpbmRSb3ciLCJoZWxwZXIuc3RyVG9EYXRlIiwiaXNJblRoaXNNb250aCIsImlzT3V0T2ZEYXRhUmFuZ2UiLCJjdXJWYWx1ZSIsImNvbnNvbGUiLCJzY2FsZWRWYWx1ZSIsIm5leHRWYWx1ZSIsInByZXZWYWx1ZSIsInN0cmVha0luIiwic3RyZWFrT3V0IiwidGV4dEFubm90YXRpb24iLCJkYXRhc2V0SW5kZXgiLCJkYXlJbk1vbnRoIiwicm93IiwiY29sIiwidG90YWxEYXlCbG9ja1dpZHRoIiwiZDNcbiAgICAgICAgLnNjYWxlTGluZWFyIiwic3RyZWFrQ29sb3IiLCJzdHJlYWtIZWlnaHQiLCJkMy5pbnRlcnBvbGF0ZUxhYiIsInRvZGF5IiwidG9kYXlSaW5ncyIsInZhbHVlVGV4dCIsInRyYW5zWCIsInRyYW5zWSIsImdyYXBoQXJlYVdpZHRoIiwiZ3JhcGhBcmVhSGVpZ2h0IiwidG90YWxIZWlnaHQiLCJoZWFkZXIiLCJ0b3RhbFdpZHRoIiwicmVuZGVyTW9udGgiLCJudW1BdmFpbGFibGVEYXRhc2V0IiwibW9udGhEYXRlIiwiaGVscGVyLmdldERhdGVCeUR1cmF0aW9uVG9Ub2RheSIsInJlbmRlckhlYXRtYXAiLCJoZWF0bWFwSW5mbyIsInJlbmRlckJ1bGxldCIsImJ1bGxldEluZm8iLCJyZXRSZW5kZXJBeGlzIiwibGFzdFJhbmdlIiwidGlja0Zvcm1hdEZuIiwiZDMudGlja0Zvcm1hdCIsIm1heFRpY2tMYWJlbFNpemUiLCJkMy5zY2FsZUxpbmVhciIsImF4aXNHZW4iLCJkMy5heGlzQm90dG9tIiwiZDMuYXhpc0xlZnQiLCJyZW5kZXJBeGlzIiwieE1pZGRsZSIsImF4aXNXaWR0aCIsInVuaXRTaXplIiwibGFzdEJvdW5kIiwicmVuZGVyQmFja1BhbmVsIiwicmV0UmVuZGVyQmFyIiwicmV0QWN0dWFsVmFsdWUiLCJhY3R1YWxWYWx1ZSIsImJhcldpZHRoIiwicmVuZGVyQmFyIiwibWFya2VyTGVuZ3RoIiwicmVuZGVyTWFyayIsInJlbmRlclhBeGlzIiwiY2hhcnRJbmZvIiwieERvbWFpbiIsImQzLmV4dGVudCIsInhTY2FsZSIsImQzXG4gICAgICAgIC5zY2FsZVRpbWUiLCJ0aWNrSW50ZXJ2YWxJbkR1cmF0aW9uIiwiaGVscGVyLnBhcnNlRHVyYXRpb25TdHJpbmciLCJmaXJzdERhdGUiLCJsYXN0RGF0ZSIsImQzLnRpbWVEYXkiLCJ0b0RhdGUiLCJhc0RheXMiLCJkMy50aW1lV2VlayIsImQzLnRpbWVNb250aCIsImQzLnRpbWVZZWFyIiwiZ2V0WFRpY2tWYWx1ZXMiLCJpblRpY2tMYWJlbEZvcm1hdCIsImZuVGlja0xhYmVsRm9ybWF0IiwidGlja0xhYmVsRm9ybWF0IiwiZDMudGltZUZvcm1hdCIsImdldFhUaWNrTGFiZWxGb3JtYXQiLCJ4QXhpc0dlbiIsInhBeGlzIiwidGV4dFNpemUiLCJ4QXhpc1RpY2tMYWJlbHMiLCJ0aWNrTGFiZWxIZWlnaHQiLCJyZW5kZXJZQXhpcyIsInlNaW5PZkRhdGFzZXRzIiwieU1heE9mRGF0YXNldHMiLCJ0bXBWYWx1ZUlzVGltZSIsInZhbHVlSXNUaW1lIiwieU1pbkFzc2lnbmVkIiwieU1heEFzc2lnbmVkIiwieVRtcCIsInlUbXBBc3NpZ25lZCIsInlMb3dlciIsInlVcHBlciIsInlFeHRlbnQiLCJ5U2NhbGUiLCJ5QXhpc0xhYmVsVGV4dCIsInlBeGlzVW5pdFRleHQiLCJ5QXhpc0dlbiIsImlzVGltZVZhbHVlIiwiYWJzRXh0ZW50IiwiZ2V0WVRpY2tMYWJlbEZvcm1hdCIsImQzLnJhbmdlIiwiYXNTZWNvbmRzIiwiZ2V0WVRpY2tWYWx1ZXMiLCJ5QXhpcyIsInlBeGlzTGluZSIsInlBeGlzVGlja3MiLCJ5QXhpc1RpY2tMYWJlbHMiLCJtYXhUaWNrTGFiZWxXaWR0aCIsImxhYmVsU2l6ZSIsInlBeGlzTGFiZWxTaXplIiwieUF4aXNXaWR0aCIsInJlbmRlckxpbmUiLCJsZWZ0WVNjYWxlIiwicmlnaHRZU2NhbGUiLCJsaW5lR2VuIiwiZGVmaW5lZCIsImN1cnZlIiwiZGVmaW5lZDAiLCJwb2ludFgiLCJwb2ludFkiLCJkM1xuICAgICAgICAgICAgLmxpbmUiLCJyZW5kZXJQb2ludHMiLCJkb3RzIiwiaXNJbnRlZ2VyIiwidGFyZ2V0RWxlbWVudHMiLCJ0b29sdGlwIiwidG9vbHRpcEJnIiwidG9vbHRpcExhYmVsIiwidG9vbHRpcExhYmVsRGF0ZSIsInRvb2x0aXBMYWJlbFZhbHVlIiwic291cmNlRXZlbnQiLCJjdXJyZW50VGFyZ2V0Iiwib3duZXJTVkdFbGVtZW50IiwiY3JlYXRlU1ZHUG9pbnQiLCJjbGllbnRYIiwiY2xpZW50WSIsIm1hdHJpeFRyYW5zZm9ybSIsImdldFNjcmVlbkNUTSIsImludmVyc2UiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJjbGllbnRMZWZ0IiwiY2xpZW50VG9wIiwicGFnZVgiLCJwYWdlWSIsImQzLnBvaW50ZXIiLCJ0b29sdGlwQmdXaWR0aCIsInRvb2x0aXBCZ0hlaWdodCIsImxhYmVsRGF0ZVRleHQiLCJsYWJlbERhdGVTaXplIiwibGFiZWxWYWx1ZVRleHQiLCJsYWJlbFZhbHVlU2l6ZSIsInRvb2x0aXBQb3NYIiwidG9vbHRpcFBvc1kiLCJ0b29sdGlwWE9mZnNldCIsInRvb2x0aXBZT2Zmc2V0IiwicmVuZGVyVG9vbHRpcCIsImN1cnJCYXJTZXQiLCJ0b3RhbE51bU9mQmFyU2V0cyIsImJhclNldFdpZHRoIiwiY3VycmVudERpYXBsYXlJbmQiLCJ0b3RhbERpYXBsYXlTZXQiLCJiYXJzIiwicG9ydGlvblZpc2libGUiLCJsZWZ0WUF4aXMiLCJyaWdodFlBeGlzIiwieEF4aXNIZWlnaHQiLCJsZWZ0WUF4aXNXaWR0aCIsInJpZ2h0WUF4aXNXaWR0aCIsInhEYXRhc2V0SWRzIiwibnVtRWxlbXNFeGNsdWRlZCIsIm5hbWVMYWJlbHMiLCJwb3NYIiwicmVuZGVyTGluZUNoYXJ0IiwiZGF0YXNldE9uTGVmdFlBeGlzIiwiZGF0YXNldE9uUmlnaHRZQXhpcyIsInRvTG9jYWxlTG93ZXJDYXNlIiwicmV0UmVuZGVyTGVmdFlBeGlzIiwicmV0UmVuZGVyUmlnaHRZQXhpcyIsInJlbmRlckJhckNoYXJ0Iiwic3RyVG9Cb29sIiwidmFsaWRhdGVTZWFyY2hUeXBlIiwidmFsaWRhdGVZQXhpc0xvY2F0aW9uIiwidmFsaWRhdGVDb2xvciIsInNwbGl0SW5wdXRCeUNvbW1hIiwiZHVtbXkiLCJzcGxpdHRlZCIsImdldEJvb2xBcnJheUZyb21JbnB1dCIsIm51bURhdGFzZXQiLCJkZWZhdWx0VmFsdWUiLCJhbGxvd05vVmFsaWRWYWx1ZSIsIm51bVZhbGlkVmFsdWUiLCJjdXJyIiwiY3VyckJvb2wiLCJpbnB1dEJvb2wiLCJnZXROdW1iZXJBcnJheUZyb21JbnB1dCIsImhlbHBlci5wYXJzZUZsb2F0RnJvbUFueSIsImN1cnJOdW0iLCJpbnB1dE51bSIsImdldFN0cmluZ0Zyb21JbnB1dCIsImhlbHBlci5yZXBsYWNlSW1nVGFnQnlBbHQiLCJnZXRTdHJpbmdBcnJheUZyb21JbnB1dCIsInZhbGlkYXRvciIsInN0ck51bWJlciIsImdldE51bWJlckFycmF5IiwibnVtQXJyYXkiLCJlbGVtIiwicGllY2UiLCJnZXRTdHJpbmdBcnJheSIsInN0ckFycmF5IiwicGFyc2VDb21tb25DaGFydEluZm8iLCJ5YW1sIiwicmV0WUF4aXNMYWJlbCIsInJldFlBeGlzQ29sb3IiLCJyZXRZQXhpc0xhYmVsQ29sb3IiLCJyZXRZQXhpc1VuaXQiLCJyZXRZQXhpc1RpY2tJbnRlcnZhbCIsInJldFlBeGlzVGlja0xhYmVsRm9ybWF0IiwicmV0WU1pbiIsInJldFlNYXgiLCJyZXRSZXZlcnNlWUF4aXMiLCJnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyIsIm9iamVjdEtleXMiLCJnZXREYXRlRnJvbUZpbGVuYW1lIiwiaGVscGVyLmdldERhdGVTdHJpbmdGcm9tSW5wdXRTdHJpbmciLCJiYXNlbmFtZSIsImdldERhdGVGcm9tRnJvbnRtYXR0ZXIiLCJmaWxlQ2FjaGUiLCJmcm9udE1hdHRlciIsImZyb250bWF0dGVyIiwiaGVscGVyLmRlZXBWYWx1ZSIsImV4dHJhY3REYXRlVXNpbmdSZWdleFdpdGhWYWx1ZSIsImdldERhdGVGcm9tVGFnIiwiY29udGVudCIsInRhZ05hbWUiLCJnZXREYXRlRnJvbVRleHQiLCJnZXREYXRlRnJvbUR2RmllbGQiLCJkdlRhcmdldCIsImdldERhdGVGcm9tRmlsZU1ldGEiLCJURmlsZSIsImhlbHBlci5nZXREYXRlRnJvbVVuaXhUaW1lIiwic3RhdCIsImN0aW1lIiwibXRpbWUiLCJnZXREYXRlRnJvbVRhc2siLCJUYXNrIiwiVGFza0RvbmUiLCJUYXNrTm90RG9uZSIsImFkZFRvRGF0YU1hcCIsImRhdGFNYXAiLCJxdWVyeVZhbHVlUGFpcnMiLCJleHRyYWN0RGF0YVVzaW5nUmVnZXhXaXRoTXVsdGlwbGVWYWx1ZXMiLCJ4VmFsdWVNYXAiLCJtZWFzdXJlIiwiZXh0cmFjdGVkIiwicmV0UGFyc2UiLCJjb2xsZWN0RGF0YUZyb21GaWxlTWV0YSIsInhWYWx1ZSIsInBhdHRlcm4iLCJoZWxwZXIuZ2V0V29yZENvdW50IiwibnVtQ2hhcnMiLCJudW1TZW50ZW5jZXMiLCJoZWxwZXIuZ2V0U2VudGVuY2VDb3VudCIsInRhcmdldE1lYXN1cmUiLCJ0YXJnZXRFeGlzdCIsIkRFRkFVTFRfU0VUVElOR1MiLCJUcmFja2VyU2V0dGluZ1RhYiIsIlBsdWdpblNldHRpbmdUYWIiLCJhcHAiLCJkaXNwbGF5IiwiY29udGFpbmVyRWwiLCJTZXR0aW5nIiwic2V0RGVzYyIsImFkZFRleHQiLCJzZXRQbGFjZWhvbGRlciIsInNldHRpbmdzIiwib25DaGFuZ2UiLCJzYXZlU2V0dGluZ3MiLCJUcmFja2VyIiwiUGx1Z2luIiwib25sb2FkIiwibG9hZFNldHRpbmdzIiwiYWRkU2V0dGluZ1RhYiIsInJlZ2lzdGVyTWFya2Rvd25Db2RlQmxvY2tQcm9jZXNzb3IiLCJwb3N0cHJvY2Vzc29yIiwiYWRkQ29tbWFuZCIsImFkZENvZGVCbG9jayIsImxvYWREYXRhIiwic2F2ZURhdGEiLCJyZW5kZXJFcnJvck1lc3NhZ2UiLCJlbCIsInJlbmRlcmluZy5yZW5kZXJFcnJvck1lc3NhZ2UiLCJvbnVubG9hZCIsImdldEZpbGVzSW5Gb2xkZXIiLCJpbmNsdWRlU3ViRm9sZGVycyIsImZpbGVzIiwiaXRlbSIsImV4dGVuc2lvbiIsIlRGb2xkZXIiLCJnZXRGaWxlcyIsImZpbGVzXzEiLCJyZW5kZXJJbmZvXzEiLCJmb2xkZXJUb1NlYXJjaCIsInVzZVNwZWNpZmllZEZpbGVzT25seSIsInNwZWNpZmllZEZpbGVzIiwiZmlsZXNDb250YWluc0xpbmtlZEZpbGVzIiwidmF1bHQiLCJnZXRBYnN0cmFjdEZpbGVCeVBhdGgiLCJub3JtYWxpemVQYXRoIiwiZm9sZGVyRmlsZXMiLCJsaW5rZWRGaWxlTXVsdGlwbGllciIsInNlYXJjaEZpbGVNdWx0aWZwaWVyQWZ0ZXJMaW5rIiwibWV0YWRhdGFDYWNoZSIsImdldEZpbGVDYWNoZSIsImxpbmVzIiwiYWRhcHRlciIsInJlYWQiLCJsaW5rcyIsImxpbmsiLCJsaW5rZWRGaWxlIiwiZ2V0Rmlyc3RMaW5rcGF0aERlc3QiLCJsaW5lTnVtYmVyIiwib3JpZ2luYWwiLCJjdHgiLCJ5YW1sVGV4dCIsInRhYlNpemUiLCJnZXRDb25maWciLCJzcGFjZXMiLCJyZXRSZW5kZXJJbmZvIiwicGFyc2VZYW1sIiwia2V5c0ZvdW5kSW5ZQU1MIiwibnVtRGF0YXNldHMiLCJyZXRTZWFyY2hUeXBlIiwic3RyVHlwZSIsIlRhZyIsIkZyb250bWF0dGVyIiwiV2lraSIsIldpa2lMaW5rIiwiV2lraURpc3BsYXkiLCJUZXh0IiwiZHZGaWVsZCIsIkZpbGVNZXRhIiwibXVsdGlwbGVWYWx1ZVNwYXJhdG9yIiwicmV0TXVsdGlwbGVWYWx1ZVNwYXJhdG9yIiwicmV0WERhdGFzZXQiLCJrZXlzT2ZSZW5kZXJJbmZvIiwiYWRkaXRpb25hbEFsbG93ZWRLZXlzIiwieWFtbExpbmVLZXlzIiwieWFtbEJhcktleXMiLCJ5YW1sUGllS2V5cyIsInlhbWxTdW1tYXJ5S2V5cyIsInlhbWxNb250aEtleXMiLCJ5YW1sSGVhdG1hcEtleXMiLCJ5YW1sQnVsbGV0S2V5cyIsInlhbWxDdXN0b21EYXRhc2V0S2V5cyIsImN1c3RvbURhdGFzZXRJZCIsInN0ckN1c3RvbURhdGFzZXRJZCIsImFic3RyYWN0Rm9sZGVyIiwicmV0RmlsZXMiLCJzdHJTdGFydERhdGUiLCJpc1N0YXJ0RGF0ZVZhbGlkIiwic3RyRW5kRGF0ZSIsImlzRW5kRGF0ZVZhbGlkIiwicmV0RGF0YXNldE5hbWUiLCJpbmRVbnRpdGxlZCIsInJldENvbnN0VmFsdWUiLCJyZXRJZ25vcmVBdHRhY2hlZFZhbHVlIiwicmV0SWdub3JlWmVyb1ZhbHVlIiwicmV0QWNjdW0iLCJyZXRQZW5hbHR5IiwicmV0VmFsdWVTaGlmdCIsInJldFNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbiIsInJhdGlvUmVnRXgiLCJwYXJ0cyIsInJldE1hcmdpbiIsImRhdGFzZXRLZXkiLCJ5YW1sQ3VzdG9tRGF0YXNldCIsImtleXNPZkN1c3RvbURhdGFzZXRJbmZvIiwicmV0WERhdGEiLCJudW1YRGF0YSIsInJldFlEYXRhIiwibGluZUtleSIsInlhbWxMaW5lIiwia2V5c09mTGluZUluZm8iLCJyZXRQYXJzZUNvbW1vbkNoYXJ0SW5mbyIsInJldExpbmVDb2xvciIsInJldExpbmVXaWR0aCIsInJldFNob3dMaW5lIiwicmV0U2hvd1BvaW50IiwicmV0UG9pbnRDb2xvciIsInJldFBvaW50Qm9yZGVyQ29sb3IiLCJyZXRQb2ludEJvcmRlcldpZHRoIiwicmV0UG9pbnRTaXplIiwicmV0RmlsbEdhcCIsInJldFlBeGlzTG9jYXRpb24iLCJiYXJLZXkiLCJ5YW1sQmFyIiwia2V5c09mQmFySW5mbyIsInJldEJhckNvbG9yIiwicGllS2V5IiwieWFtbFBpZSIsImtleXNPZlBpZUluZm8iLCJyZXREYXRhIiwibnVtRGF0YSIsInJldERhdGFDb2xvciIsInJldERhdGFOYW1lIiwiZGVmYXVsdExlZ2VuZE9yaWVudGF0aW9uIiwic3VtbWFyeUtleSIsInlhbWxTdW1tYXJ5Iiwia2V5c09mU3VtbWFyeUluZm8iLCJtb250aEtleSIsInlhbWxNb250aCIsImtleXNPZk1vbnRoSW5mbyIsInJldERhdGFzZXQiLCJyZXRUaHJlc2hvbGQiLCJpbmREYXRhc2V0IiwicmV0QW5ub3RhdGlvbiIsImhlYXRtYXBLZXkiLCJ5YW1sSGVhdG1hcCIsImtleXNPZkhlYXRtYXBJbmZvIiwiYnVsbGV0S2V5IiwieWFtbEJ1bGxldCIsImtleXNPZkJ1bGxldEluZm8iLCJyZXRSYW5nZSIsIm51bVJhbmdlIiwicmV0UmFuZ2VDb2xvciIsImdldFJlbmRlckluZm9Gcm9tWWFtbCIsInByb2Nlc3NJbmZvIiwibG9vcEZpbGVQcm9taXNlcyIsInNraXBUaGlzRmlsZSIsInhEYXRhc2V0SWQiLCJ4RGF0ZSIsImNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21GaWxlbmFtZSIsInhEYXRhc2V0UXVlcnkiLCJjb2xsZWN0aW5nLmdldERhdGVGcm9tRnJvbnRtYXR0ZXIiLCJjb2xsZWN0aW5nLmdldERhdGVGcm9tVGFnIiwiY29sbGVjdGluZy5nZXREYXRlRnJvbVRleHQiLCJjb2xsZWN0aW5nLmdldERhdGVGcm9tRHZGaWVsZCIsImNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21GaWxlTWV0YSIsImNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21UYXNrIiwibG9vcFF1ZXJ5UHJvbWlzZXMiLCJnb3RBbnlWYWx1ZSIsImZyb250TWF0dGVyVGFncyIsInRhZ3MiLCJ0YWdNZWFzdXJlIiwidGFnRXhpc3QiLCJzcGxpdHRlZFBhcnQiLCJwYXJ0IiwidGFnIiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21Gcm9udG1hdHRlclRhZyIsImNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tRnJvbnRtYXR0ZXJLZXkiLCJ0ZXh0VG9TZWFyY2giLCJ3aWtpVGV4dCIsImRpc3BsYXlUZXh0IiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21XaWtpIiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21JbmxpbmVUYWciLCJjb2xsZWN0aW5nLmNvbGxlY3REYXRhRnJvbVRleHQiLCJjb2xsZWN0aW5nLmNvbGxlY3REYXRhRnJvbUZpbGVNZXRhIiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21EdkZpZWxkIiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21UYXNrIiwiYWxsIiwiY29sbGVjdERhdGFGcm9tVGFibGUiLCJkYXRlRXJyb3JNZXNzYWdlIiwicGFpciIsImluZFBhaXIiLCJjb2xsZWN0ZWQiLCJyZXRSZW5kZXIiLCJsYXN0RGF0YXNldCIsInJldCIsInBpZS5yZW5kZXJQaWVDaGFydCIsInN1bW1hcnkucmVuZGVyU3VtbWFyeSIsImJ1bGxldC5yZW5kZXJCdWxsZXQiLCJtb250aC5yZW5kZXJNb250aCIsImhlYXRtYXAucmVuZGVySGVhdG1hcCIsInJlbmRlcmluZy5yZW5kZXIiLCJ0YWJsZVF1ZXJpZXMiLCJ0YWJsZXMiLCJ0YWJsZUZpbGVOb3RGb3VuZCIsImlzWCIsInRhYmxlIiwidGFibGVEYXRhIiwieURhdGFzZXRRdWVyaWVzIiwidGV4dFRhYmxlIiwibWRUYWJsZVJlZ2V4IiwiaW5kVGFibGUiLCJ0YWJsZUxpbmVzIiwibnVtQ29sdW1ucyIsIm51bURhdGFSb3dzIiwiaGVhZGVyTGluZSIsImhlbHBlci50cmltQnlDaGFyIiwic2VwTGluZSIsInNwZXBMaW5lU3BsaXR0ZWQiLCJjb2x1bW5YRGF0YXNldCIsInhWYWx1ZXMiLCJ0YWJsZUxpbmUiLCJkYXRhUm93U3BsaXR0ZWQiLCJ5RGF0YXNldFF1ZXJ5IiwiY29sdW1uT2ZJbnRlcmVzdCIsImluZExpbmUiLCJjb2xsZWN0aW5nLmFkZFRvRGF0YU1hcCIsImdldEVkaXRvciIsIndvcmtzcGFjZSIsImdldEFjdGl2ZVZpZXdPZlR5cGUiLCJNYXJrZG93blZpZXciLCJlZGl0b3IiLCJvdXRwdXRUeXBlIiwiYWN0aXZlTGVhZiIsInZpZXciLCJjb2RlYmxvY2tUb0luc2VydCIsImluc2VydFRvTmV4dExpbmUiLCJnZXRDdXJzb3IiLCJnZXRMaW5lIiwic2V0U2VsZWN0aW9uIiwicmVwbGFjZVNlbGVjdGlvbiJdLCJtYXBwaW5ncyI6InVDQWtITyxTQUFTQSxFQUFVQyxFQUFTQyxFQUFZQyxFQUFHQyxHQUU5QyxPQUFPLElBQUtELElBQU1BLEVBQUlFLFdBQVUsU0FBVUMsRUFBU0MsR0FDL0MsU0FBU0MsRUFBVUMsR0FBUyxJQUFNQyxFQUFLTixFQUFVTyxLQUFLRixHQUFRLENBQUcsTUFBT0csR0FBS0wsRUFBT0ssR0FBTyxDQUMzRixTQUFTQyxFQUFTSixHQUFTLElBQU1DLEVBQUtOLEVBQWlCLE1BQUVLLEdBQVUsQ0FB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LEtBQUs0ekUsWUFFbEIsR0FBSUksRUFBUSxDQUNSLElBQUlydUIsRUFBU3F1QixFQUFPTSxZQUNoQjdMLEVBQWE5aUIsRUFBT3IrQyxLQUNwQkEsRUFBTzBzRSxFQUFPTyxRQUFROUwsR0FNMUIsT0FKQTlpQixFQUFPckgsR0FBS2gzQyxFQUFLeEksT0FDakJrMUUsRUFBT1EsYUFBYTd1QixHQUNwQnF1QixFQUFPUyxpQkFBaUIsS0FBT2p0RSxJQUV4QixDQUNWLENBRUQsT0FBTyxDQUNWIiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTI3LDEyOCwxMjksMTMwLDEzMSwxMzIsMTMzLDEzNCwxMzUsMTM2LDEzNywxMzgsMTM5LDE0MCwxNDEsMTQyLDE0MywxNDQsMTQ1LDE0NiwxNDcsMTQ4LDE0OSwxNTAsMTUxLDE1MiwxNTMsMTU0LDE1NSwxNTYsMTU3LDE1OCwxNTksMTYwLDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY4LDE3MCwxNzEsMTczLDE3OSwxODAsMTgxLDE4Ml19