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.

17 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");
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */function e(t,e,n,r){return new(n||(n=Promise))((function(a,i){function l(t){try{u(r.next(t))}catch(t){i(t)}}function o(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?a(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(l,o)}u((r=r.apply(t,e||[])).next())}))}function n(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function r(t){let e=t,r=t;function a(t,e,n,a){for(null==n&&(n=0),null==a&&(a=t.length);n<a;){const i=n+a>>>1;r(t[i],e)<0?n=i+1:a=i}return n}return 1===t.length&&(e=(e,n)=>t(e)-n,r=function(t){return(e,r)=>n(t(e),r)}(t)),{left:a,center:function(t,n,r,i){null==r&&(r=0),null==i&&(i=t.length);const l=a(t,n,r,i-1);return l>r&&e(t[l-1],n)>-e(t[l],n)?l-1:l},right:function(t,e,n,a){for(null==n&&(n=0),null==a&&(a=t.length);n<a;){const i=n+a>>>1;r(t[i],e)>0?a=i:n=i+1}return n}}}const a=r(n).right;function i(t,e,n){return t(n={path:e,exports:{},require:function(t,e){return function(){throw new Error("Dynamic requires are not currently supported by @rollup/plugin-commonjs")}(null==e&&n.path)}},n.exports),n.exports}r((function(t){return null===t?NaN:+t})).center;var l=Math.sqrt(50),o=Math.sqrt(10),u=Math.sqrt(2);function s(t,e,n){var r=(e-t)/Math.max(0,n),a=Math.floor(Math.log(r)/Math.LN10),i=r/Math.pow(10,a);return a>=0?(i>=l?10:i>=o?5:i>=u?2:1)*Math.pow(10,a):-Math.pow(10,-a)/(i>=l?10:i>=o?5:i>=u?2:1)}function f(t,e,n){var r=Math.abs(e-t)/Math.max(0,n),a=Math.pow(10,Math.floor(Math.log(r)/Math.LN10)),i=r/a;return i>=l?a*=10:i>=o?a*=5:i>=u&&(a*=2),e<t?-a:a}function c(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n<e||void 0===n&&e>=e)&&(n=e);else{let r=-1;for(let a of t)null!=(a=e(a,++r,t))&&(n<a||void 0===n&&a>=a)&&(n=a)}return n}function h(t,e){let n;if(void 0===e)for(const e of t)null!=e&&(n>e||void 0===n&&e>=e)&&(n=e);else{let r=-1;for(let a of t)null!=(a=e(a,++r,t))&&(n>a||void 0===n&&a>=a)&&(n=a)}return n}function d(t,e,r=0,a=t.length-1,i=n){for(;a>r;){if(a-r>600){const n=a-r+1,l=e-r+1,o=Math.log(n),u=.5*Math.exp(2*o/3),s=.5*Math.sqrt(o*u*(n-u)/n)*(l-n/2<0?-1:1);d(t,e,Math.max(r,Math.floor(e-l*u/n+s)),Math.min(a,Math.floor(e+(n-l)*u/n+s)),i)}const n=t[e];let l=r,o=a;for(g(t,r,e),i(t[a],n)>0&&g(t,r,a);l<o;){for(g(t,l,o),++l,--o;i(t[l],n)<0;)++l;for(;i(t[o],n)>0;)--o}0===i(t[r],n)?g(t,r,o):(++o,g(t,o,a)),o<=e&&(r=o+1),e<=o&&(a=o-1)}return t}function g(t,e,n){const r=t[e];t[e]=t[n],t[n]=r}function p(t,e,n){if(r=(t=Float64Array.from(function*(t,e){if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(yield e);else{let n=-1;for(let r of t)null!=(r=e(r,++n,t))&&(r=+r)>=r&&(yield r)}}(t,n))).length){if((e=+e)<=0||r<2)return h(t);if(e>=1)return c(t);var r,a=(r-1)*e,i=Math.floor(a),l=c(d(t,i).subarray(0,i+1));return l+(h(t.subarray(i+1))-l)*(a-i)}}function y(t,e,n){t=+t,e=+e,n=(a=arguments.length)<2?(e=t,t=0,1):a<3?1:+n;for(var r=-1,a=0|Math.max(0,Math.ceil((e-t)/n)),i=new Array(a);++r<a;)i[r]=t+r*n;return i}function m(t,e){let n=0;if(void 0===e)for(let e of t)(e=+e)&&(n+=e);else{let r=-1;for(let a of t)(a=+e(a,++r,t))&&(n+=a)}return n}var v=Array.prototype.slice;function w(t){return t}function x(t){return"translate("+t+",0)"}function A(t){return"translate(0,"+t+")"}function b(t){return e=>+t(e)}function D(t,e){return e=Math.max(0,t.bandwidth()-2*e)/2,t.round()&&(e=Math.round(e)),n=>+t(n)+e}function k(){return!this.__axis}function M(t,e){var n=[],r=null,a=null,i=6,l=6,o=3,u="undefined"!=typeof window&&window.devicePixelRatio>1?0:.5,s=1===t||4===t?-1:1,f=4===t||2===t?"x":"y",c=1===t||3===t?x:A;function h(h){var d=null==r?e.ticks?e.ticks.apply(e,n):e.domain():r,g=null==a?e.tickFormat?e.tickFormat.apply(e,n):w:a,p=Math.max(i,0)+o,y=e.range(),m=+y[0]+u,v=+y[y.length-1]+u,x=(e.bandwidth?D:b)(e.copy(),u),A=h.selection?h.selection():h,M=A.selectAll(".domain").data([null]),T=A.selectAll(".tick").data(d,e).order(),C=T.exit(),F=T.enter().append("g").attr("class","tick"),_=T.select("line"),S=T.select("text");M=M.merge(M.enter().insert("path",".tick").attr("class","domain").attr("stroke","currentColor")),T=T.merge(F),_=_.merge(F.append("line").attr("stroke","currentColor").attr(f+"2",s*i)),S=S.merge(F.append("text").attr("fill","currentColor").attr(f,s*p).attr("dy",1===t?"0em":3===t?"0.71em":"0.32em")),h!==A&&(M=M.transition(h),T=T.transition(h),_=_.transition(h),S=S.transition(h),C=C.transition(h).attr("opacity",1e-6).attr("transform",(function(t){return isFinite(t=x(t))?c(t+u):this.getAttribute("transform")})),F.attr("opacity",1e-6).attr("transform",(function(t){var e=this.parentNode.__axis;return c((e&&isFinite(e=e(t))?e:x(t))+u)}))),C.remove(),M.attr("d",4===t||2===t?l?"M"+s*l+","+m+"H"+u+"V"+v+"H"+s*l:"M"+u+","+m+"V"+v:l?"M"+m+","+s*l+"V"+u+"H"+v+"V"+s*l:"M"+m+","+u+"H"+v),T.attr("opacity",1).attr("transform",(function(t){return c(x(t)+u)})),_.attr(f+"2",s*i),S.attr(f,s*p).text(g),A.filter(k).attr("fill","none").attr("font-size",10).attr("font-family","sans-serif").attr("text-anchor",2===t?"start":4===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=v.call(arguments),h},h.tickArguments=function(t){return arguments.length?(n=null==t?[]:v.call(t),h):n.slice()},h.tickValues=function(t){return arguments.length?(r=null==t?null:v.call(t),h):r&&r.slice()},h.tickFormat=function(t){return arguments.length?(a=t,h):a},h.tickSize=function(t){return arguments.length?(i=l=+t,h):i},h.tickSizeInner=function(t){return arguments.length?(i=+t,h):i},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?(u=+t,h):u},h}function T(t){return M(3,t)}function C(t){return M(4,t)}var F={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 S(r)}function S(t){this._=t}function E(t,e){return t.trim().split(/^|\s+/).map((function(t){var n="",r=t.indexOf(".");if(r>=0&&(n=t.slice(r+1),t=t.slice(0,r)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:n}}))}function B(t,e){for(var n,r=0,a=t.length;r<a;++r)if((n=t[r]).name===e)return n.value}function N(t,e,n){for(var r=0,a=t.length;r<a;++r)if(t[r].name===e){t[r]=F,t=t.slice(0,r).concat(t.slice(r+1));break}return null!=n&&t.push({name:e,value:n}),t}S.prototype=_.prototype={constructor:S,on:function(t,e){var n,r=this._,a=E(t+"",r),i=-1,l=a.length;if(!(arguments.length<2)){if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++i<l;)if(n=(t=a[i]).type)r[n]=N(r[n],t.name,e);else if(null==e)for(n in r)r[n]=N(r[n],t.name,null);return this}for(;++i<l;)if((n=(t=a[i]).type)&&(n=B(r[n],t.name)))return n},copy:function(){var t={},e=this._;for(var n in e)t[n]=e[n].slice();return new S(t)},call:function(t,e){if((n=arguments.length-2)>0)for(var n,r,a=new Array(n),i=0;i<n;++i)a[i]=arguments[i+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(i=0,n=(r=this._[t]).length;i<n;++i)r[i].value.apply(e,a)},apply:function(t,e,n){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var r=this._[t],a=0,i=r.length;a<i;++a)r[a].value.apply(e,n)}};var L="http://www.w3.org/1999/xhtml",V={svg:"http://www.w3.org/2000/svg",xhtml:L,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function I(t){var e=t+="",n=e.indexOf(":");return n>=0&&"xmlns"!==(e=t.slice(0,n))&&(t=t.slice(n+1)),V.hasOwnProperty(e)?{space:V[e],local:t}:t}function Y(t){return function(){var e=this.ownerDocument,n=this.namespaceURI;return n===L&&e.documentElement.namespaceURI===L?e.createElement(t):e.createElementNS(n,t)}}function P(t){return function(){return this.ownerDocument.createElementNS(t.space,t.local)}}function z(t){var e=I(t);return(e.local?P:Y)(e)}function O(){}function U(t){return null==t?O:function(){return this.querySelector(t)}}function R(t){return"object"==typeof t&&"length"in t?t:Array.from(t)}function W(){return[]}function $(t){return null==t?W:function(){return this.querySelectorAll(t)}}function H(t){return function(){return this.matches(t)}}function X(t){return function(e){return e.matches(t)}}var j=Array.prototype.find;function q(){return this.firstElementChild}var G=Array.prototype.filter;function Q(){return this.children}function Z(t){return new Array(t.length)}function J(t,e){this.ownerDocument=t.ownerDocument,this.namespaceURI=t.namespaceURI,this._next=null,this._parent=t,this.__data__=e}function K(t){return function(){return t}}function tt(t,e,n,r,a,i){for(var l,o=0,u=e.length,s=i.length;o<s;++o)(l=e[o])?(l.__data__=i[o],r[o]=l):n[o]=new J(t,i[o]);for(;o<u;++o)(l=e[o])&&(a[o]=l)}function et(t,e,n,r,a,i,l){var o,u,s,f=new Map,c=e.length,h=i.length,d=new Array(c);for(o=0;o<c;++o)(u=e[o])&&(d[o]=s=l.call(u,u.__data__,o,e)+"",f.has(s)?a[o]=u:f.set(s,u));for(o=0;o<h;++o)s=l.call(t,i[o],o,i)+"",(u=f.get(s))?(r[o]=u,u.__data__=i[o],f.delete(s)):n[o]=new J(t,i[o]);for(o=0;o<c;++o)(u=e[o])&&f.get(d[o])===u&&(a[o]=u)}function nt(t){return t.__data__}function rt(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function at(t){return function(){this.removeAttribute(t)}}function it(t){return function(){this.removeAttributeNS(t.space,t.local)}}function lt(t,e){return function(){this.setAttribute(t,e)}}function ot(t,e){return function(){this.setAttributeNS(t.space,t.local,e)}}function ut(t,e){return function(){var n=e.apply(this,arguments);null==n?this.removeAttribute(t):this.setAttribute(t,n)}}function st(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 ft(t){return t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView}function ct(t){return function(){this.style.removeProperty(t)}}function ht(t,e,n){return function(){this.style.setProperty(t,e,n)}}function dt(t,e,n){return function(){var r=e.apply(this,arguments);null==r?this.style.removeProperty(t):this.style.setProperty(t,r,n)}}function gt(t,e){return t.style.getPropertyValue(e)||ft(t).getComputedStyle(t,null).getPropertyValue(e)}function pt(t){return function(){delete this[t]}}function yt(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 vt(t){return t.trim().split(/^|\s+/)}function wt(t){return t.classList||new xt(t)}function xt(t){this._node=t,this._names=vt(t.getAttribute("class")||"")}function At(t,e){for(var n=wt(t),r=-1,a=e.length;++r<a;)n.add(e[r])}function bt(t,e){for(var n=wt(t),r=-1,a=e.length;++r<a;)n.remove(e[r])}function Dt(t){return function(){At(this,t)}}function kt(t){return function(){bt(this,t)}}function Mt(t,e){return function(){(e.apply(this,arguments)?At:bt)(this,t)}}function Tt(){this.textContent=""}function Ct(t){return function(){this.textContent=t}}function Ft(t){return function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}}function _t(){this.innerHTML=""}function St(t){return function(){this.innerHTML=t}}function Et(t){return function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}}function Bt(){this.nextSibling&&this.parentNode.appendChild(this)}function Nt(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function Lt(){return null}function Vt(){var t=this.parentNode;t&&t.removeChild(this)}function It(){var t=this.cloneNode(!1),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function Yt(){var t=this.cloneNode(!0),e=this.parentNode;return e?e.insertBefore(t,this.nextSibling):t}function Pt(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}}))}function zt(t){return function(){var e=this.__on;if(e){for(var n,r=0,a=-1,i=e.length;r<i;++r)n=e[r],t.type&&n.type!==t.type||n.name!==t.name?e[++a]=n:this.removeEventListener(n.type,n.listener,n.options);++a?e.length=a:delete this.__on}}}function Ot(t,e,n){return function(){var r,a=this.__on,i=function(t){return function(e){t.call(this,e,this.__data__)}}(e);if(a)for(var l=0,o=a.length;l<o;++l)if((r=a[l]).type===t.type&&r.name===t.name)return this.removeEventListener(r.type,r.listener,r.options),this.addEventListener(r.type,r.listener=i,r.options=n),void(r.value=e);this.addEventListener(t.type,i,n),r={type:t.type,name:t.name,value:e,listener:i,options:n},a?a.push(r):this.__on=[r]}}function Ut(t,e,n){var r=ft(t),a=r.CustomEvent;"function"==typeof a?a=new a(e,n):(a=r.document.createEvent("Event"),n?(a.initEvent(e,n.bubbles,n.cancelable),a.detail=n.detail):a.initEvent(e,!1,!1)),t.dispatchEvent(a)}function Rt(t,e){return function(){return Ut(this,t,e)}}function Wt(t,e){return function(){return Ut(this,t,e.apply(this,arguments))}}J.prototype={constructor:J,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)}},xt.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 $t=[null];function Ht(t,e){this._groups=t,this._parents=e}function Xt(){return new Ht([[document.documentElement]],$t)}function jt(t){return"string"==typeof t?new Ht([[document.querySelector(t)]],[document.documentElement]):new Ht([[t]],$t)}function qt(t,e,n){t.prototype=e.prototype=n,n.constructor=t}function Gt(t,e){var n=Object.create(t.prototype);for(var r in e)n[r]=e[r];return n}function Qt(){}Ht.prototype=Xt.prototype={constructor:Ht,select:function(t){"function"!=typeof t&&(t=U(t));for(var e=this._groups,n=e.length,r=new Array(n),a=0;a<n;++a)for(var i,l,o=e[a],u=o.length,s=r[a]=new Array(u),f=0;f<u;++f)(i=o[f])&&(l=t.call(i,i.__data__,f,o))&&("__data__"in i&&(l.__data__=i.__data__),s[f]=l);return new Ht(r,this._parents)},selectAll:function(t){t="function"==typeof t?function(t){return function(){var e=t.apply(this,arguments);return null==e?[]:R(e)}}(t):$(t);for(var e=this._groups,n=e.length,r=[],a=[],i=0;i<n;++i)for(var l,o=e[i],u=o.length,s=0;s<u;++s)(l=o[s])&&(r.push(t.call(l,l.__data__,s,o)),a.push(l));return new Ht(r,a)},selectChild:function(t){return this.select(null==t?q:function(t){return function(){return j.call(this.children,t)}}("function"==typeof t?t:X(t)))},selectChildren:function(t){return this.selectAll(null==t?Q:function(t){return function(){return G.call(this.children,t)}}("function"==typeof t?t:X(t)))},filter:function(t){"function"!=typeof t&&(t=H(t));for(var e=this._groups,n=e.length,r=new Array(n),a=0;a<n;++a)for(var i,l=e[a],o=l.length,u=r[a]=[],s=0;s<o;++s)(i=l[s])&&t.call(i,i.__data__,s,l)&&u.push(i);return new Ht(r,this._parents)},data:function(t,e){if(!arguments.length)return Array.from(this,nt);var n=e?et:tt,r=this._parents,a=this._groups;"function"!=typeof t&&(t=K(t));for(var i=a.length,l=new Array(i),o=new Array(i),u=new Array(i),s=0;s<i;++s){var f=r[s],c=a[s],h=c.length,d=R(t.call(f,f&&f.__data__,s,r)),g=d.length,p=o[s]=new Array(g),y=l[s]=new Array(g),m=u[s]=new Array(h);n(f,c,p,y,m,d,e);for(var v,w,x=0,A=0;x<g;++x)if(v=p[x]){for(x>=A&&(A=x+1);!(w=y[A])&&++A<g;);v._next=w||null}}return(l=new Ht(l,r))._enter=o,l._exit=u,l},enter:function(){return new Ht(this._enter||this._groups.map(Z),this._parents)},exit:function(){return new Ht(this._exit||this._groups.map(Z),this._parents)},join:function(t,e,n){var r=this.enter(),a=this,i=this.exit();return r="function"==typeof t?t(r):r.append(t+""),null!=e&&(a=e(a)),null==n?i.remove():n(i),r&&a?r.merge(a).order():a},merge:function(t){if(!(t instanceof Ht))throw new Error("invalid merge");for(var e=this._groups,n=t._groups,r=e.length,a=n.length,i=Math.min(r,a),l=new Array(r),o=0;o<i;++o)for(var u,s=e[o],f=n[o],c=s.length,h=l[o]=new Array(c),d=0;d<c;++d)(u=s[d]||f[d])&&(h[d]=u);for(;o<r;++o)l[o]=e[o];return new Ht(l,this._parents)},selection:function(){return this},order:function(){for(var t=this._groups,e=-1,n=t.length;++e<n;)for(var r,a=t[e],i=a.length-1,l=a[i];--i>=0;)(r=a[i])&&(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=rt);for(var n=this._groups,r=n.length,a=new Array(r),i=0;i<r;++i){for(var l,o=n[i],u=o.length,s=a[i]=new Array(u),f=0;f<u;++f)(l=o[f])&&(s[f]=l);s.sort(e)}return new Ht(a,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],a=0,i=r.length;a<i;++a){var l=r[a];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 a,i=e[n],l=0,o=i.length;l<o;++l)(a=i[l])&&t.call(a,a.__data__,l,i);return this},attr:function(t,e){var n=I(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?it:at:"function"==typeof e?n.local?st:ut:n.local?ot:lt)(n,e))},style:function(t,e,n){return arguments.length>1?this.each((null==e?ct:"function"==typeof e?dt:ht)(t,e,null==n?"":n)):gt(this.node(),t)},property:function(t,e){return arguments.length>1?this.each((null==e?pt:"function"==typeof e?mt:yt)(t,e)):this.node()[t]},classed:function(t,e){var n=vt(t+"");if(arguments.length<2){for(var r=wt(this.node()),a=-1,i=n.length;++a<i;)if(!r.contains(n[a]))return!1;return!0}return this.each(("function"==typeof e?Mt:e?Dt:kt)(n,e))},text:function(t){return arguments.length?this.each(null==t?Tt:("function"==typeof t?Ft:Ct)(t)):this.node().textContent},html:function(t){return arguments.length?this.each(null==t?_t:("function"==typeof t?Et:St)(t)):this.node().innerHTML},raise:function(){return this.each(Bt)},lower:function(){return this.each(Nt)},append:function(t){var e="function"==typeof t?t:z(t);return this.select((function(){return this.appendChild(e.apply(this,arguments))}))},insert:function(t,e){var n="function"==typeof t?t:z(t),r=null==e?Lt:"function"==typeof e?e:U(e);return this.select((function(){return this.insertBefore(n.apply(this,arguments),r.apply(this,arguments)||null)}))},remove:function(){return this.each(Vt)},clone:function(t){return this.select(t?Yt:It)},datum:function(t){return arguments.length?this.property("__data__",t):this.node().__data__},on:function(t,e,n){var r,a,i=Pt(t+""),l=i.length;if(!(arguments.length<2)){for(o=e?Ot:zt,r=0;r<l;++r)this.each(o(i[r],e,n));return this}var o=this.node().__on;if(o)for(var u,s=0,f=o.length;s<f;++s)for(r=0,u=o[s];r<l;++r)if((a=i[r]).type===u.type&&a.name===u.name)return u.value},dispatch:function(t,e){return this.each(("function"==typeof e?Wt:Rt)(t,e))},[Symbol.iterator]:function*(){for(var t=this._groups,e=0,n=t.length;e<n;++e)for(var r,a=t[e],i=0,l=a.length;i<l;++i)(r=a[i])&&(yield r)}};var Zt=1/.7,Jt="\\s*([+-]?\\d+)\\s*",Kt="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",te="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",ee=/^#([0-9a-f]{3,8})$/,ne=new RegExp("^rgb\\("+[Jt,Jt,Jt]+"\\)$"),re=new RegExp("^rgb\\("+[te,te,te]+"\\)$"),ae=new RegExp("^rgba\\("+[Jt,Jt,Jt,Kt]+"\\)$"),ie=new RegExp("^rgba\\("+[te,te,te,Kt]+"\\)$"),le=new RegExp("^hsl\\("+[Kt,te,te]+"\\)$"),oe=new RegExp("^hsla\\("+[Kt,te,te,Kt]+"\\)$"),ue={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 se(){return this.rgb().formatHex()}function fe(){return this.rgb().formatRgb()}function ce(t){var e,n;return t=(t+"").trim().toLowerCase(),(e=ee.exec(t))?(n=e[1].length,e=parseInt(e[1],16),6===n?he(e):3===n?new ye(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1):8===n?de(e>>24&255,e>>16&255,e>>8&255,(255&e)/255):4===n?de(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=ne.exec(t))?new ye(e[1],e[2],e[3],1):(e=re.exec(t))?new ye(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=ae.exec(t))?de(e[1],e[2],e[3],e[4]):(e=ie.exec(t))?de(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=le.exec(t))?xe(e[1],e[2]/100,e[3]/100,1):(e=oe.exec(t))?xe(e[1],e[2]/100,e[3]/100,e[4]):ue.hasOwnProperty(t)?he(ue[t]):"transparent"===t?new ye(NaN,NaN,NaN,0):null}function he(t){return new ye(t>>16&255,t>>8&255,255&t,1)}function de(t,e,n,r){return r<=0&&(t=e=n=NaN),new ye(t,e,n,r)}function ge(t){return t instanceof Qt||(t=ce(t)),t?new ye((t=t.rgb()).r,t.g,t.b,t.opacity):new ye}function pe(t,e,n,r){return 1===arguments.length?ge(t):new ye(t,e,n,null==r?1:r)}function ye(t,e,n,r){this.r=+t,this.g=+e,this.b=+n,this.opacity=+r}function me(){return"#"+we(this.r)+we(this.g)+we(this.b)}function ve(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}function we(t){return((t=Math.max(0,Math.min(255,Math.round(t)||0)))<16?"0":"")+t.toString(16)}function xe(t,e,n,r){return r<=0?t=e=n=NaN:n<=0||n>=1?t=e=NaN:e<=0&&(t=NaN),new be(t,e,n,r)}function Ae(t){if(t instanceof be)return new be(t.h,t.s,t.l,t.opacity);if(t instanceof Qt||(t=ce(t)),!t)return new be;if(t instanceof be)return t;var e=(t=t.rgb()).r/255,n=t.g/255,r=t.b/255,a=Math.min(e,n,r),i=Math.max(e,n,r),l=NaN,o=i-a,u=(i+a)/2;return o?(l=e===i?(n-r)/o+6*(n<r):n===i?(r-e)/o+2:(e-n)/o+4,o/=u<.5?i+a:2-i-a,l*=60):o=u>0&&u<1?0:l,new be(l,o,u,t.opacity)}function be(t,e,n,r){this.h=+t,this.s=+e,this.l=+n,this.opacity=+r}function De(t,e,n){return 255*(t<60?e+(n-e)*t/60:t<180?n:t<240?e+(n-e)*(240-t)/60:e)}qt(Qt,ce,{copy:function(t){return Object.assign(new this.constructor,this,t)},displayable:function(){return this.rgb().displayable()},hex:se,formatHex:se,formatHsl:function(){return Ae(this).formatHsl()},formatRgb:fe,toString:fe}),qt(ye,pe,Gt(Qt,{brighter:function(t){return t=null==t?Zt:Math.pow(Zt,t),new ye(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new ye(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){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,formatRgb:ve,toString:ve})),qt(be,(function(t,e,n,r){return 1===arguments.length?Ae(t):new be(t,e,n,null==r?1:r)}),Gt(Qt,{brighter:function(t){return t=null==t?Zt:Math.pow(Zt,t),new be(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new be(this.h,this.s,this.l*t,this.opacity)},rgb:function(){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,a=2*n-r;return new ye(De(t>=240?t-240:t+120,a,r),De(t,a,r),De(t<120?t+240:t-120,a,r),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl:function(){var t=this.opacity;return(1===(t=isNaN(t)?1:Math.max(0,Math.min(1,t)))?"hsl(":"hsla(")+(this.h||0)+", "+100*(this.s||0)+"%, "+100*(this.l||0)+"%"+(1===t?")":", "+t+")")}}));const ke=Math.PI/180,Me=180/Math.PI,Te=4/29,Ce=6/29,Fe=3*Ce*Ce;function _e(t){if(t instanceof Ee)return new Ee(t.l,t.a,t.b,t.opacity);if(t instanceof Ye)return Pe(t);t instanceof ye||(t=ge(t));var e,n,r=Ve(t.r),a=Ve(t.g),i=Ve(t.b),l=Be((.2225045*r+.7168786*a+.0606169*i)/1);return r===a&&a===i?e=n=l:(e=Be((.4360747*r+.3850649*a+.1430804*i)/.96422),n=Be((.0139322*r+.0971045*a+.7141733*i)/.82521)),new Ee(116*l-16,500*(e-l),200*(l-n),t.opacity)}function Se(t,e,n,r){return 1===arguments.length?_e(t):new Ee(t,e,n,null==r?1:r)}function Ee(t,e,n,r){this.l=+t,this.a=+e,this.b=+n,this.opacity=+r}function Be(t){return t>.008856451679035631?Math.pow(t,1/3):t/Fe+Te}function Ne(t){return t>Ce?t*t*t:Fe*(t-Te)}function Le(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function Ve(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function Ie(t){if(t instanceof Ye)return new Ye(t.h,t.c,t.l,t.opacity);if(t instanceof Ee||(t=_e(t)),0===t.a&&0===t.b)return new Ye(NaN,0<t.l&&t.l<100?0:NaN,t.l,t.opacity);var e=Math.atan2(t.b,t.a)*Me;return new Ye(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function Ye(t,e,n,r){this.h=+t,this.c=+e,this.l=+n,this.opacity=+r}function Pe(t){if(isNaN(t.h))return new Ee(t.l,0,0,t.opacity);var e=t.h*ke;return new Ee(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}qt(Ee,Se,Gt(Qt,{brighter:function(t){return new Ee(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new Ee(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){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 ye(Le(3.1338561*(e=.96422*Ne(e))-1.6168667*(t=1*Ne(t))-.4906146*(n=.82521*Ne(n))),Le(-.9787684*e+1.9161415*t+.033454*n),Le(.0719453*e-.2289914*t+1.4052427*n),this.opacity)}})),qt(Ye,(function(t,e,n,r){return 1===arguments.length?Ie(t):new Ye(t,e,n,null==r?1:r)}),Gt(Qt,{brighter:function(t){return new Ye(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new Ye(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return Pe(this).rgb()}}));var ze,Oe,Ue=0,Re=0,We=0,$e=0,He=0,Xe=0,je="object"==typeof performance&&performance.now?performance:Date,qe="object"==typeof window&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(t){setTimeout(t,17)};function Ge(){return He||(qe(Qe),He=je.now()+Xe)}function Qe(){He=0}function Ze(){this._call=this._time=this._next=null}function Je(t,e,n){var r=new Ze;return r.restart(t,e,n),r}function Ke(){He=($e=je.now())+Xe,Ue=Re=0;try{!function(){Ge(),++Ue;for(var t,e=ze;e;)(t=He-e._time)>=0&&e._call.call(null,t),e=e._next;--Ue}()}finally{Ue=0,function(){var t,e,n=ze,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:ze=e);Oe=t,en(r)}(),He=0}}function tn(){var t=je.now(),e=t-$e;e>1e3&&(Xe-=e,$e=t)}function en(t){Ue||(Re&&(Re=clearTimeout(Re)),t-He>24?(t<1/0&&(Re=setTimeout(Ke,t-je.now()-Xe)),We&&(We=clearInterval(We))):(We||($e=je.now(),We=setInterval(tn,1e3)),Ue=1,qe(Ke)))}function nn(t,e,n){var r=new Ze;return e=null==e?0:+e,r.restart((n=>{r.stop(),t(n+e)}),e,n),r}Ze.prototype=Je.prototype={constructor:Ze,restart:function(t,e,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?Ge():+n)+(null==e?0:+e),this._next||Oe===this||(Oe?Oe._next=this:ze=this,Oe=this),this._call=t,this._time=n,en()},stop:function(){this._call&&(this._call=null,this._time=1/0,en())}};var rn=_("start","end","cancel","interrupt"),an=[];function ln(t,e,n,r,a,i){var l=t.__transition;if(l){if(n in l)return}else t.__transition={};!function(t,e,n){var r,a=t.__transition;function i(t){n.state=1,n.timer.restart(l,n.delay,n.time),n.delay<=t&&l(t-n.delay)}function l(i){var s,f,c,h;if(1!==n.state)return u();for(s in a)if((h=a[s]).name===n.name){if(3===h.state)return nn(l);4===h.state?(h.state=6,h.timer.stop(),h.on.call("interrupt",t,t.__data__,h.index,h.group),delete a[s]):+s<e&&(h.state=6,h.timer.stop(),h.on.call("cancel",t,t.__data__,h.index,h.group),delete a[s])}if(nn((function(){3===n.state&&(n.state=4,n.timer.restart(o,n.delay,n.time),o(i))})),n.state=2,n.on.call("start",t,t.__data__,n.index,n.group),2===n.state){for(n.state=3,r=new Array(c=n.tween.length),s=0,f=-1;s<c;++s)(h=n.tween[s].value.call(t,t.__data__,n.index,n.group))&&(r[++f]=h);r.length=f+1}}function o(e){for(var a=e<n.duration?n.ease.call(null,e/n.duration):(n.timer.restart(u),n.state=5,1),i=-1,l=r.length;++i<l;)r[i].call(t,a);5===n.state&&(n.on.call("end",t,t.__data__,n.index,n.group),u())}function u(){for(var r in n.state=6,n.timer.stop(),delete a[e],a)return;delete t.__transition}a[e]=n,n.timer=Je(i,0,n.time)}(t,n,{name:e,index:r,group:a,on:rn,tween:an,time:i.time,delay:i.delay,duration:i.duration,ease:i.ease,timer:null,state:0})}function on(t,e){var n=sn(t,e);if(n.state>0)throw new Error("too late; already scheduled");return n}function un(t,e){var n=sn(t,e);if(n.state>3)throw new Error("too late; already running");return n}function sn(t,e){var n=t.__transition;if(!n||!(n=n[e]))throw new Error("transition not found");return n}var fn=t=>()=>t;function cn(t){return 1==(t=+t)?hn: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):fn(isNaN(e)?n:e)}}function hn(t,e){var n=e-t;return n?function(t,e){return function(n){return t+n*e}}(t,n):fn(isNaN(t)?e:t)}var dn=function t(e){var n=cn(e);function r(t,e){var r=n((t=pe(t)).r,(e=pe(e)).r),a=n(t.g,e.g),i=n(t.b,e.b),l=hn(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=a(e),t.b=i(e),t.opacity=l(e),t+""}}return r.gamma=t,r}(1);function gn(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}var pn=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,yn=new RegExp(pn.source,"g");function mn(t,e){var n,r,a,i=pn.lastIndex=yn.lastIndex=0,l=-1,o=[],u=[];for(t+="",e+="";(n=pn.exec(t))&&(r=yn.exec(e));)(a=r.index)>i&&(a=e.slice(i,a),o[l]?o[l]+=a:o[++l]=a),(n=n[0])===(r=r[0])?o[l]?o[l]+=r:o[++l]=r:(o[++l]=null,u.push({i:l,x:gn(n,r)})),i=yn.lastIndex;return i<e.length&&(a=e.slice(i),o[l]?o[l]+=a:o[++l]=a),o.length<2?u[0]?function(t){return function(e){return t(e)+""}}(u[0].x):function(t){return function(){return t}}(e):(e=u.length,function(t){for(var n,r=0;r<e;++r)o[(n=u[r]).i]=n.x(t);return o.join("")})}var vn,wn=180/Math.PI,xn={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function An(t,e,n,r,a,i){var l,o,u;return(l=Math.sqrt(t*t+e*e))&&(t/=l,e/=l),(u=t*n+e*r)&&(n-=t*u,r-=e*u),(o=Math.sqrt(n*n+r*r))&&(n/=o,r/=o,u/=o),t*r<e*n&&(t=-t,e=-e,u=-u,l=-l),{translateX:a,translateY:i,rotate:Math.atan2(e,t)*wn,skewX:Math.atan(u)*wn,scaleX:l,scaleY:o}}function bn(t,e,n,r){function a(t){return t.length?t.pop()+" ":""}return function(i,l){var o=[],u=[];return i=t(i),l=t(l),function(t,r,a,i,l,o){if(t!==a||r!==i){var u=l.push("translate(",null,e,null,n);o.push({i:u-4,x:gn(t,a)},{i:u-2,x:gn(r,i)})}else(a||i)&&l.push("translate("+a+e+i+n)}(i.translateX,i.translateY,l.translateX,l.translateY,o,u),function(t,e,n,i){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),i.push({i:n.push(a(n)+"rotate(",null,r)-2,x:gn(t,e)})):e&&n.push(a(n)+"rotate("+e+r)}(i.rotate,l.rotate,o,u),function(t,e,n,i){t!==e?i.push({i:n.push(a(n)+"skewX(",null,r)-2,x:gn(t,e)}):e&&n.push(a(n)+"skewX("+e+r)}(i.skewX,l.skewX,o,u),function(t,e,n,r,i,l){if(t!==n||e!==r){var o=i.push(a(i)+"scale(",null,",",null,")");l.push({i:o-4,x:gn(t,n)},{i:o-2,x:gn(e,r)})}else 1===n&&1===r||i.push(a(i)+"scale("+n+","+r+")")}(i.scaleX,i.scaleY,l.scaleX,l.scaleY,o,u),i=l=null,function(t){for(var e,n=-1,r=u.length;++n<r;)o[(e=u[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?xn:An(e.a,e.b,e.c,e.d,e.e,e.f)}),"px, ","px)","deg)"),kn=bn((function(t){return null==t?xn:(vn||(vn=document.createElementNS("http://www.w3.org/2000/svg","g")),vn.setAttribute("transform",t),(t=vn.transform.baseVal.consolidate())?An((t=t.matrix).a,t.b,t.c,t.d,t.e,t.f):xn)}),", ",")",")");function Mn(t,e){var n,r;return function(){var a=un(this,t),i=a.tween;if(i!==n)for(var l=0,o=(r=n=i).length;l<o;++l)if(r[l].name===e){(r=r.slice()).splice(l,1);break}a.tween=r}}function Tn(t,e,n){var r,a;if("function"!=typeof n)throw new Error;return function(){var i=un(this,t),l=i.tween;if(l!==r){a=(r=l).slice();for(var o={name:e,value:n},u=0,s=a.length;u<s;++u)if(a[u].name===e){a[u]=o;break}u===s&&a.push(o)}i.tween=a}}function Cn(t,e,n){var r=t._id;return t.each((function(){var t=un(this,r);(t.value||(t.value={}))[e]=n.apply(this,arguments)})),function(t){return sn(t,r).value[e]}}function Fn(t,e){var n;return("number"==typeof e?gn:e instanceof ce?dn:(n=ce(e))?(e=n,dn):mn)(t,e)}function _n(t){return function(){this.removeAttribute(t)}}function Sn(t){return function(){this.removeAttributeNS(t.space,t.local)}}function En(t,e,n){var r,a,i=n+"";return function(){var l=this.getAttribute(t);return l===i?null:l===r?a:a=e(r=l,n)}}function Bn(t,e,n){var r,a,i=n+"";return function(){var l=this.getAttributeNS(t.space,t.local);return l===i?null:l===r?a:a=e(r=l,n)}}function Nn(t,e,n){var r,a,i;return function(){var l,o,u=n(this);if(null!=u)return(l=this.getAttribute(t))===(o=u+"")?null:l===r&&o===a?i:(a=o,i=e(r=l,u));this.removeAttribute(t)}}function Ln(t,e,n){var r,a,i;return function(){var l,o,u=n(this);if(null!=u)return(l=this.getAttributeNS(t.space,t.local))===(o=u+"")?null:l===r&&o===a?i:(a=o,i=e(r=l,u));this.removeAttributeNS(t.space,t.local)}}function Vn(t,e){return function(n){this.setAttribute(t,e.call(this,n))}}function In(t,e){return function(n){this.setAttributeNS(t.space,t.local,e.call(this,n))}}function Yn(t,e){var n,r;function a(){var a=e.apply(this,arguments);return a!==r&&(n=(r=a)&&In(t,a)),n}return a._value=e,a}function Pn(t,e){var n,r;function a(){var a=e.apply(this,arguments);return a!==r&&(n=(r=a)&&Vn(t,a)),n}return a._value=e,a}function zn(t,e){return function(){on(this,t).delay=+e.apply(this,arguments)}}function On(t,e){return e=+e,function(){on(this,t).delay=e}}function Un(t,e){return function(){un(this,t).duration=+e.apply(this,arguments)}}function Rn(t,e){return e=+e,function(){un(this,t).duration=e}}function Wn(t,e){if("function"!=typeof e)throw new Error;return function(){un(this,t).ease=e}}function $n(t,e,n){var r,a,i=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)?on:un;return function(){var l=i(this,t),o=l.on;o!==r&&(a=(r=o).copy()).on(e,n),l.on=a}}var Hn=Xt.prototype.constructor;function Xn(t){return function(){this.style.removeProperty(t)}}function jn(t,e,n){return function(r){this.style.setProperty(t,e.call(this,r),n)}}function qn(t,e,n){var r,a;function i(){var i=e.apply(this,arguments);return i!==a&&(r=(a=i)&&jn(t,i,n)),r}return i._value=e,i}function Gn(t){return function(e){this.textContent=t.call(this,e)}}function Qn(t){var e,n;function r(){var r=t.apply(this,arguments);return r!==n&&(e=(n=r)&&Gn(r)),e}return r._value=t,r}var Zn=0;function Jn(t,e,n,r){this._groups=t,this._parents=e,this._name=n,this._id=r}function Kn(){return++Zn}var tr=Xt.prototype;Jn.prototype={constructor:Jn,select:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=U(t));for(var r=this._groups,a=r.length,i=new Array(a),l=0;l<a;++l)for(var o,u,s=r[l],f=s.length,c=i[l]=new Array(f),h=0;h<f;++h)(o=s[h])&&(u=t.call(o,o.__data__,h,s))&&("__data__"in o&&(u.__data__=o.__data__),c[h]=u,ln(c[h],e,n,h,c,sn(o,n)));return new Jn(i,this._parents,e,n)},selectAll:function(t){var e=this._name,n=this._id;"function"!=typeof t&&(t=$(t));for(var r=this._groups,a=r.length,i=[],l=[],o=0;o<a;++o)for(var u,s=r[o],f=s.length,c=0;c<f;++c)if(u=s[c]){for(var h,d=t.call(u,u.__data__,c,s),g=sn(u,n),p=0,y=d.length;p<y;++p)(h=d[p])&&ln(h,e,n,p,d,g);i.push(d),l.push(u)}return new Jn(i,l,e,n)},filter:function(t){"function"!=typeof t&&(t=H(t));for(var e=this._groups,n=e.length,r=new Array(n),a=0;a<n;++a)for(var i,l=e[a],o=l.length,u=r[a]=[],s=0;s<o;++s)(i=l[s])&&t.call(i,i.__data__,s,l)&&u.push(i);return new Jn(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,a=n.length,i=Math.min(r,a),l=new Array(r),o=0;o<i;++o)for(var u,s=e[o],f=n[o],c=s.length,h=l[o]=new Array(c),d=0;d<c;++d)(u=s[d]||f[d])&&(h[d]=u);for(;o<r;++o)l[o]=e[o];return new Jn(l,this._parents,this._name,this._id)},selection:function(){return new Hn(this._groups,this._parents)},transition:function(){for(var t=this._name,e=this._id,n=Kn(),r=this._groups,a=r.length,i=0;i<a;++i)for(var l,o=r[i],u=o.length,s=0;s<u;++s)if(l=o[s]){var f=sn(l,e);ln(l,t,n,s,o,{time:f.time+f.delay+f.duration,delay:0,duration:f.duration,ease:f.ease})}return new Jn(r,this._parents,t,n)},call:tr.call,nodes:tr.nodes,node:tr.node,size:tr.size,empty:tr.empty,each:tr.each,on:function(t,e){var n=this._id;return arguments.length<2?sn(this.node(),n).on.on(t):this.each($n(n,t,e))},attr:function(t,e){var n=I(t),r="transform"===n?kn:Fn;return this.attrTween(t,"function"==typeof e?(n.local?Ln:Nn)(n,r,Cn(this,"attr."+t,e)):null==e?(n.local?Sn:_n)(n):(n.local?Bn:En)(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=I(t);return this.tween(n,(r.local?Yn:Pn)(r,e))},style:function(t,e,n){var r="transform"==(t+="")?Dn:Fn;return null==e?this.styleTween(t,function(t,e){var n,r,a;return function(){var i=gt(this,t),l=(this.style.removeProperty(t),gt(this,t));return i===l?null:i===n&&l===r?a:a=e(n=i,r=l)}}(t,r)).on("end.style."+t,Xn(t)):"function"==typeof e?this.styleTween(t,function(t,e,n){var r,a,i;return function(){var l=gt(this,t),o=n(this),u=o+"";return null==o&&(this.style.removeProperty(t),u=o=gt(this,t)),l===u?null:l===r&&u===a?i:(a=u,i=e(r=l,o))}}(t,r,Cn(this,"style."+t,e))).each(function(t,e){var n,r,a,i,l="style."+e,o="end."+l;return function(){var u=un(this,t),s=u.on,f=null==u.value[l]?i||(i=Xn(e)):void 0;s===n&&a===f||(r=(n=s).copy()).on(o,a=f),u.on=r}}(this._id,t)):this.styleTween(t,function(t,e,n){var r,a,i=n+"";return function(){var l=gt(this,t);return l===i?null:l===r?a:a=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,qn(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}}(Cn(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,Qn(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,a=sn(this.node(),n).tween,i=0,l=a.length;i<l;++i)if((r=a[i]).name===t)return r.value;return null}return this.each((null==e?Mn:Tn)(n,t,e))},delay:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?zn:On)(e,t)):sn(this.node(),e).delay},duration:function(t){var e=this._id;return arguments.length?this.each(("function"==typeof t?Un:Rn)(e,t)):sn(this.node(),e).duration},ease:function(t){var e=this._id;return arguments.length?this.each(Wn(e,t)):sn(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;un(this,t).ease=n}}(this._id,t))},end:function(){var t,e,n=this,r=n._id,a=n.size();return new Promise((function(i,l){var o={value:l},u={value:function(){0==--a&&i()}};n.each((function(){var n=un(this,r),a=n.on;a!==t&&((e=(t=a).copy())._.cancel.push(o),e._.interrupt.push(o),e._.end.push(u)),n.on=e})),0===a&&i()}))},[Symbol.iterator]:tr[Symbol.iterator]};var er={time:null,delay:0,duration:250,ease:function(t){return((t*=2)<=1?t*t*t:(t-=2)*t*t+2)/2}};function nr(t,e){for(var n;!(n=t.__transition)||!(n=n[e]);)if(!(t=t.parentNode))throw new Error(`transition ${e} not found`);return n}Xt.prototype.interrupt=function(t){return this.each((function(){!function(t,e){var n,r,a,i=t.__transition,l=!0;if(i){for(a in e=null==e?null:e+"",i)(n=i[a]).name===e?(r=n.state>2&&n.state<5,n.state=6,n.timer.stop(),n.on.call(r?"interrupt":"cancel",t,t.__data__,n.index,n.group),delete i[a]):l=!1;l&&delete t.__transition}}(this,t)}))},Xt.prototype.transition=function(t){var e,n;t instanceof Jn?(e=t._id,t=t._name):(e=Kn(),(n=er).time=Ge(),t=null==t?null:t+"");for(var r=this._groups,a=r.length,i=0;i<a;++i)for(var l,o=r[i],u=o.length,s=0;s<u;++s)(l=o[s])&&ln(l,t,e,s,o,n||nr(l,e));return new Jn(r,this._parents,t,e)};const rr=Math.PI,ar=2*rr,ir=ar-1e-6;function lr(){this._x0=this._y0=this._x1=this._y1=null,this._=""}function or(){return new lr}function ur(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 sr(t){return(t=ur(Math.abs(t)))?t[1]:NaN}lr.prototype=or.prototype={constructor:lr,moveTo:function(t,e){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)},closePath:function(){null!==this._x1&&(this._x1=this._x0,this._y1=this._y0,this._+="Z")},lineTo:function(t,e){this._+="L"+(this._x1=+t)+","+(this._y1=+e)},quadraticCurveTo:function(t,e,n,r){this._+="Q"+ +t+","+ +e+","+(this._x1=+n)+","+(this._y1=+r)},bezierCurveTo:function(t,e,n,r,a,i){this._+="C"+ +t+","+ +e+","+ +n+","+ +r+","+(this._x1=+a)+","+(this._y1=+i)},arcTo:function(t,e,n,r,a){t=+t,e=+e,n=+n,r=+r,a=+a;var i=this._x1,l=this._y1,o=n-t,u=r-e,s=i-t,f=l-e,c=s*s+f*f;if(a<0)throw new Error("negative radius: "+a);if(null===this._x1)this._+="M"+(this._x1=t)+","+(this._y1=e);else if(c>1e-6)if(Math.abs(f*o-u*s)>1e-6&&a){var h=n-i,d=r-l,g=o*o+u*u,p=h*h+d*d,y=Math.sqrt(g),m=Math.sqrt(c),v=a*Math.tan((rr-Math.acos((g+c-p)/(2*y*m)))/2),w=v/m,x=v/y;Math.abs(w-1)>1e-6&&(this._+="L"+(t+w*s)+","+(e+w*f)),this._+="A"+a+","+a+",0,0,"+ +(f*h>s*d)+","+(this._x1=t+x*o)+","+(this._y1=e+x*u)}else this._+="L"+(this._x1=t)+","+(this._y1=e);else;},arc:function(t,e,n,r,a,i){t=+t,e=+e,i=!!i;var l=(n=+n)*Math.cos(r),o=n*Math.sin(r),u=t+l,s=e+o,f=1^i,c=i?r-a:a-r;if(n<0)throw new Error("negative radius: "+n);null===this._x1?this._+="M"+u+","+s:(Math.abs(this._x1-u)>1e-6||Math.abs(this._y1-s)>1e-6)&&(this._+="L"+u+","+s),n&&(c<0&&(c=c%ar+ar),c>ir?this._+="A"+n+","+n+",0,1,"+f+","+(t-l)+","+(e-o)+"A"+n+","+n+",0,1,"+f+","+(this._x1=u)+","+(this._y1=s):c>1e-6&&(this._+="A"+n+","+n+",0,"+ +(c>=rr)+","+f+","+(this._x1=t+n*Math.cos(a))+","+(this._y1=e+n*Math.sin(a))))},rect:function(t,e,n,r){this._+="M"+(this._x0=this._x1=+t)+","+(this._y0=this._y1=+e)+"h"+ +n+"v"+ +r+"h"+-n+"Z"},toString:function(){return this._}};var fr,cr=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function hr(t){if(!(e=cr.exec(t)))throw new Error("invalid format: "+t);var e;return new dr({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 dr(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 gr(t,e){var n=ur(t,e);if(!n)return t+"";var r=n[0],a=n[1];return a<0?"0."+new Array(-a).join("0")+r:r.length>a+1?r.slice(0,a+1)+"."+r.slice(a+1):r+new Array(a-r.length+2).join("0")}hr.prototype=dr.prototype,dr.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 pr={"%":(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)=>gr(100*t,e),r:gr,s:function(t,e){var n=ur(t,e);if(!n)return t+"";var r=n[0],a=n[1],i=a-(fr=3*Math.max(-8,Math.min(8,Math.floor(a/3))))+1,l=r.length;return i===l?r:i>l?r+new Array(i-l+1).join("0"):i>0?r.slice(0,i)+"."+r.slice(i):"0."+new Array(1-i).join("0")+ur(t,Math.max(0,e+i-1))[0]},X:t=>Math.round(t).toString(16).toUpperCase(),x:t=>Math.round(t).toString(16)};function yr(t){return t}var mr,vr,wr,xr=Array.prototype.map,Ar=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function br(t){var e,n,r=void 0===t.grouping||void 0===t.thousands?yr:(e=xr.call(t.grouping,Number),n=t.thousands+"",function(t,r){for(var a=t.length,i=[],l=0,o=e[0],u=0;a>0&&o>0&&(u+o+1>r&&(o=Math.max(1,r-u)),i.push(t.substring(a-=o,a+o)),!((u+=o+1)>r));)o=e[l=(l+1)%e.length];return i.reverse().join(n)}),a=void 0===t.currency?"":t.currency[0]+"",i=void 0===t.currency?"":t.currency[1]+"",l=void 0===t.decimal?".":t.decimal+"",o=void 0===t.numerals?yr:function(t){return function(e){return e.replace(/[0-9]/g,(function(e){return t[+e]}))}}(xr.call(t.numerals,String)),u=void 0===t.percent?"%":t.percent+"",s=void 0===t.minus?"":t.minus+"",f=void 0===t.nan?"NaN":t.nan+"";function c(t){var e=(t=hr(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"):pr[v]||(void 0===y&&(y=12),m=!0,v="g"),(d||"0"===e&&"="===n)&&(d=!0,e="0",n="=");var w="$"===h?a:"#"===h&&/[boxX]/.test(v)?"0"+v.toLowerCase():"",x="$"===h?i:/[%p]/.test(v)?u:"",A=pr[v],b=/[defgprs%]/.test(v);function D(t){var a,i,u,h=w,D=x;if("c"===v)D=A(t)+D,t="";else{var k=(t=+t)<0||1/t<0;if(t=isNaN(t)?f:A(Math.abs(t),y),m&&(t=function(t){t:for(var e,n=t.length,r=1,a=-1;r<n;++r)switch(t[r]){case".":a=e=r;break;case"0":0===a&&(a=r),e=r;break;default:if(!+t[r])break t;a>0&&(a=0)}return a>0?t.slice(0,a)+t.slice(e+1):t}(t)),k&&0==+t&&"+"!==c&&(k=!1),h=(k?"("===c?c:s:"-"===c||"("===c?"":c)+h,D=("s"===v?Ar[8+fr/3]:"")+D+(k&&"("===c?")":""),b)for(a=-1,i=t.length;++a<i;)if(48>(u=t.charCodeAt(a))||u>57){D=(46===u?l+t.slice(a+1):t.slice(a))+D,t=t.slice(0,a);break}}p&&!d&&(t=r(t,1/0));var M=h.length+t.length+D.length,T=M<g?new Array(g-M+1).join(e):"";switch(p&&d&&(t=r(T+t,T.length?g-D.length:1/0),T=""),n){case"<":t=h+t+D+T;break;case"=":t=h+T+t+D;break;case"^":t=T.slice(0,M=T.length>>1)+h+t+D+T.slice(M);break;default:t=T+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=hr(t)).type="f",t)),r=3*Math.max(-8,Math.min(8,Math.floor(sr(e)/3))),a=Math.pow(10,-r),i=Ar[8+r/3];return function(t){return n(a*t)+i}}}}mr=br({thousands:",",grouping:[3],currency:["$",""]}),vr=mr.format,wr=mr.formatPrefix;function Dr(t,e){var n=e-t;return n?function(t,e){return function(n){return t+n*e}}(t,n):(t=>()=>t)(isNaN(t)?e:t)}function kr(t,e){var n=Dr((t=Se(t)).l,(e=Se(e)).l),r=Dr(t.a,e.a),a=Dr(t.b,e.b),i=Dr(t.opacity,e.opacity);return function(e){return t.l=n(e),t.a=r(e),t.b=a(e),t.opacity=i(e),t+""}}function Mr(t,e){switch(arguments.length){case 0:break;case 1:this.range(t);break;default:this.range(e).domain(t)}return this}const Tr=Symbol("implicit");function Cr(){var t=new Map,e=[],n=[],r=Tr;function a(a){var i=a+"",l=t.get(i);if(!l){if(r!==Tr)return r;t.set(i,l=e.push(a))}return n[(l-1)%n.length]}return a.domain=function(n){if(!arguments.length)return e.slice();e=[],t=new Map;for(const r of n){const n=r+"";t.has(n)||t.set(n,e.push(r))}return a},a.range=function(t){return arguments.length?(n=Array.from(t),a):n.slice()},a.unknown=function(t){return arguments.length?(r=t,a):r},a.copy=function(){return Cr(e,n).unknown(r)},Mr.apply(a,arguments),a}var Fr=t=>()=>t;function _r(t){return 1==(t=+t)?Sr: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):Fr(isNaN(e)?n:e)}}function Sr(t,e){var n=e-t;return n?function(t,e){return function(n){return t+n*e}}(t,n):Fr(isNaN(t)?e:t)}var Er=function t(e){var n=_r(e);function r(t,e){var r=n((t=pe(t)).r,(e=pe(e)).r),a=n(t.g,e.g),i=n(t.b,e.b),l=Sr(t.opacity,e.opacity);return function(e){return t.r=r(e),t.g=a(e),t.b=i(e),t.opacity=l(e),t+""}}return r.gamma=t,r}(1);function Br(t,e){e||(e=[]);var n,r=t?Math.min(e.length,t.length):0,a=e.slice();return function(i){for(n=0;n<r;++n)a[n]=t[n]*(1-i)+e[n]*i;return a}}function Nr(t,e){var n,r=e?e.length:0,a=t?Math.min(r,t.length):0,i=new Array(a),l=new Array(r);for(n=0;n<a;++n)i[n]=Or(t[n],e[n]);for(;n<r;++n)l[n]=e[n];return function(t){for(n=0;n<a;++n)l[n]=i[n](t);return l}}function Lr(t,e){var n=new Date;return t=+t,e=+e,function(r){return n.setTime(t*(1-r)+e*r),n}}function Vr(t,e){return t=+t,e=+e,function(n){return t*(1-n)+e*n}}function Ir(t,e){var n,r={},a={};for(n in null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={}),e)n in t?r[n]=Or(t[n],e[n]):a[n]=e[n];return function(t){for(n in r)a[n]=r[n](t);return a}}var Yr=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,Pr=new RegExp(Yr.source,"g");function zr(t,e){var n,r,a,i=Yr.lastIndex=Pr.lastIndex=0,l=-1,o=[],u=[];for(t+="",e+="";(n=Yr.exec(t))&&(r=Pr.exec(e));)(a=r.index)>i&&(a=e.slice(i,a),o[l]?o[l]+=a:o[++l]=a),(n=n[0])===(r=r[0])?o[l]?o[l]+=r:o[++l]=r:(o[++l]=null,u.push({i:l,x:Vr(n,r)})),i=Pr.lastIndex;return i<e.length&&(a=e.slice(i),o[l]?o[l]+=a:o[++l]=a),o.length<2?u[0]?function(t){return function(e){return t(e)+""}}(u[0].x):function(t){return function(){return t}}(e):(e=u.length,function(t){for(var n,r=0;r<e;++r)o[(n=u[r]).i]=n.x(t);return o.join("")})}function Or(t,e){var n,r=typeof e;return null==e||"boolean"===r?Fr(e):("number"===r?Vr:"string"===r?(n=ce(e))?(e=n,Er):zr:e instanceof ce?Er:e instanceof Date?Lr:function(t){return ArrayBuffer.isView(t)&&!(t instanceof DataView)}(e)?Br:Array.isArray(e)?Nr:"function"!=typeof e.valueOf&&"function"!=typeof e.toString||isNaN(e)?Ir:Vr)(t,e)}function Ur(t,e){return t=+t,e=+e,function(n){return Math.round(t*(1-n)+e*n)}}function Rr(t){return+t}var Wr=[0,1];function $r(t){return t}function Hr(t,e){return(e-=t=+t)?function(n){return(n-t)/e}:function(t){return function(){return t}}(isNaN(e)?NaN:.5)}function Xr(t,e,n){var r=t[0],a=t[1],i=e[0],l=e[1];return a<r?(r=Hr(a,r),i=n(l,i)):(r=Hr(r,a),i=n(i,l)),function(t){return i(r(t))}}function jr(t,e,n){var r=Math.min(t.length,e.length)-1,i=new Array(r),l=new Array(r),o=-1;for(t[r]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++o<r;)i[o]=Hr(t[o],t[o+1]),l[o]=n(e[o],e[o+1]);return function(e){var n=a(t,e,1,r)-1;return l[n](i[n](e))}}function qr(t,e){return e.domain(t.domain()).range(t.range()).interpolate(t.interpolate()).clamp(t.clamp()).unknown(t.unknown())}function Gr(){var t,e,n,r,a,i,l=Wr,o=Wr,u=Or,s=$r;function f(){var t,e,n,u=Math.min(l.length,o.length);return s!==$r&&(t=l[0],e=l[u-1],t>e&&(n=t,t=e,e=n),s=function(n){return Math.max(t,Math.min(e,n))}),r=u>2?jr:Xr,a=i=null,c}function c(e){return null==e||isNaN(e=+e)?n:(a||(a=r(l.map(t),o,u)))(t(s(e)))}return c.invert=function(n){return s(e((i||(i=r(o,l.map(t),Vr)))(n)))},c.domain=function(t){return arguments.length?(l=Array.from(t,Rr),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),u=Ur,f()},c.clamp=function(t){return arguments.length?(s=!!t||$r,f()):s!==$r},c.interpolate=function(t){return arguments.length?(u=t,f()):u},c.unknown=function(t){return arguments.length?(n=t,c):n},function(n,r){return t=n,e=r,f()}}function Qr(){return Gr()($r,$r)}function Zr(t,e,n,r){var a,i=f(t,e,n);switch((r=hr(null==r?",f":r)).type){case"s":var l=Math.max(Math.abs(t),Math.abs(e));return null!=r.precision||isNaN(a=function(t,e){return Math.max(0,3*Math.max(-8,Math.min(8,Math.floor(sr(e)/3)))-sr(Math.abs(t)))}(i,l))||(r.precision=a),wr(r,l);case"":case"e":case"g":case"p":case"r":null!=r.precision||isNaN(a=function(t,e){return t=Math.abs(t),e=Math.abs(e)-t,Math.max(0,sr(e)-sr(t))+1}(i,Math.max(Math.abs(t),Math.abs(e))))||(r.precision=a-("e"===r.type));break;case"f":case"%":null!=r.precision||isNaN(a=function(t){return Math.max(0,-sr(Math.abs(t)))}(i))||(r.precision=a-2*("%"===r.type))}return vr(r)}function Jr(t){var e=t.domain;return t.ticks=function(t){var n=e();return function(t,e,n){var r,a,i,l,o=-1;if(n=+n,(t=+t)==(e=+e)&&n>0)return[t];if((r=e<t)&&(a=t,t=e,e=a),0===(l=s(t,e,n))||!isFinite(l))return[];if(l>0){let n=Math.round(t/l),r=Math.round(e/l);for(n*l<t&&++n,r*l>e&&--r,i=new Array(a=r-n+1);++o<a;)i[o]=(n+o)*l}else{l=-l;let n=Math.round(t*l),r=Math.round(e*l);for(n/l<t&&++n,r/l>e&&--r,i=new Array(a=r-n+1);++o<a;)i[o]=(n+o)/l}return r&&i.reverse(),i}(n[0],n[n.length-1],null==t?10:t)},t.tickFormat=function(t,n){var r=e();return Zr(r[0],r[r.length-1],null==t?10:t,n)},t.nice=function(n){null==n&&(n=10);var r,a,i=e(),l=0,o=i.length-1,u=i[l],f=i[o],c=10;for(f<u&&(a=u,u=f,f=a,a=l,l=o,o=a);c-- >0;){if((a=s(u,f,n))===r)return i[l]=u,i[o]=f,e(i);if(a>0)u=Math.floor(u/a)*a,f=Math.ceil(f/a)*a;else{if(!(a<0))break;u=Math.ceil(u*a)/a,f=Math.floor(f*a)/a}r=a}return t},t}function Kr(){var t=Qr();return t.copy=function(){return qr(t,Kr())},Mr.apply(t,arguments),Jr(t)}var ta=new Date,ea=new Date;function na(t,e,n,r){function a(e){return t(e=0===arguments.length?new Date:new Date(+e)),e}return a.floor=function(e){return t(e=new Date(+e)),e},a.ceil=function(n){return t(n=new Date(n-1)),e(n,1),t(n),n},a.round=function(t){var e=a(t),n=a.ceil(t);return t-e<n-t?e:n},a.offset=function(t,n){return e(t=new Date(+t),null==n?1:Math.floor(n)),t},a.range=function(n,r,i){var l,o=[];if(n=a.ceil(n),i=null==i?1:Math.floor(i),!(n<r&&i>0))return o;do{o.push(l=new Date(+n)),e(n,i),t(n)}while(l<n&&n<r);return o},a.filter=function(n){return na((function(e){if(e>=e)for(;t(e),!n(e);)e.setTime(e-1)}),(function(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&&(a.count=function(e,r){return ta.setTime(+e),ea.setTime(+r),t(ta),t(ea),Math.floor(n(ta,ea))},a.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?a.filter(r?function(e){return r(e)%t==0}:function(e){return a.count(0,e)%t==0}):a:null}),a}var ra=na((function(){}),(function(t,e){t.setTime(+t+e)}),(function(t,e){return e-t}));ra.every=function(t){return t=Math.floor(t),isFinite(t)&&t>0?t>1?na((function(e){e.setTime(Math.floor(e/t)*t)}),(function(e,n){e.setTime(+e+n*t)}),(function(e,n){return(n-e)/t})):ra:null};var aa=na((function(t){t.setTime(t-t.getMilliseconds())}),(function(t,e){t.setTime(+t+1e3*e)}),(function(t,e){return(e-t)/1e3}),(function(t){return t.getUTCSeconds()})),ia=na((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds())}),(function(t,e){t.setTime(+t+6e4*e)}),(function(t,e){return(e-t)/6e4}),(function(t){return t.getMinutes()})),la=na((function(t){t.setTime(t-t.getMilliseconds()-1e3*t.getSeconds()-6e4*t.getMinutes())}),(function(t,e){t.setTime(+t+36e5*e)}),(function(t,e){return(e-t)/36e5}),(function(t){return t.getHours()})),oa=na((t=>t.setHours(0,0,0,0)),((t,e)=>t.setDate(t.getDate()+e)),((t,e)=>(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/864e5),(t=>t.getDate()-1));function ua(t){return na((function(e){e.setDate(e.getDate()-(e.getDay()+7-t)%7),e.setHours(0,0,0,0)}),(function(t,e){t.setDate(t.getDate()+7*e)}),(function(t,e){return(e-t-6e4*(e.getTimezoneOffset()-t.getTimezoneOffset()))/6048e5}))}var sa=ua(0),fa=ua(1);ua(2),ua(3);var ca=ua(4);ua(5),ua(6);var ha=na((function(t){t.setDate(1),t.setHours(0,0,0,0)}),(function(t,e){t.setMonth(t.getMonth()+e)}),(function(t,e){return e.getMonth()-t.getMonth()+12*(e.getFullYear()-t.getFullYear())}),(function(t){return t.getMonth()})),da=na((function(t){t.setMonth(0,1),t.setHours(0,0,0,0)}),(function(t,e){t.setFullYear(t.getFullYear()+e)}),(function(t,e){return e.getFullYear()-t.getFullYear()}),(function(t){return t.getFullYear()}));da.every=function(t){return isFinite(t=Math.floor(t))&&t>0?na((function(e){e.setFullYear(Math.floor(e.getFullYear()/t)*t),e.setMonth(0,1),e.setHours(0,0,0,0)}),(function(e,n){e.setFullYear(e.getFullYear()+n*t)})):null},na((function(t){t.setUTCSeconds(0,0)}),(function(t,e){t.setTime(+t+6e4*e)}),(function(t,e){return(e-t)/6e4}),(function(t){return t.getUTCMinutes()})),na((function(t){t.setUTCMinutes(0,0,0)}),(function(t,e){t.setTime(+t+36e5*e)}),(function(t,e){return(e-t)/36e5}),(function(t){return t.getUTCHours()}));var ga=na((function(t){t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+e)}),(function(t,e){return(e-t)/864e5}),(function(t){return t.getUTCDate()-1}));function pa(t){return na((function(e){e.setUTCDate(e.getUTCDate()-(e.getUTCDay()+7-t)%7),e.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCDate(t.getUTCDate()+7*e)}),(function(t,e){return(e-t)/6048e5}))}var ya=pa(0),ma=pa(1);pa(2),pa(3);var va=pa(4);pa(5),pa(6),na((function(t){t.setUTCDate(1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCMonth(t.getUTCMonth()+e)}),(function(t,e){return e.getUTCMonth()-t.getUTCMonth()+12*(e.getUTCFullYear()-t.getUTCFullYear())}),(function(t){return t.getUTCMonth()}));var wa=na((function(t){t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)}),(function(t,e){t.setUTCFullYear(t.getUTCFullYear()+e)}),(function(t,e){return e.getUTCFullYear()-t.getUTCFullYear()}),(function(t){return t.getUTCFullYear()}));wa.every=function(t){return isFinite(t=Math.floor(t))&&t>0?na((function(e){e.setUTCFullYear(Math.floor(e.getUTCFullYear()/t)*t),e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)}),(function(e,n){e.setUTCFullYear(e.getUTCFullYear()+n*t)})):null};const[xa,Aa]=function(t,e,n,a,i,l){const o=[[aa,1,1e3],[aa,5,5e3],[aa,15,15e3],[aa,30,3e4],[l,1,6e4],[l,5,3e5],[l,15,9e5],[l,30,18e5],[i,1,36e5],[i,3,108e5],[i,6,216e5],[i,12,432e5],[a,1,864e5],[a,2,1728e5],[n,1,6048e5],[e,1,2592e6],[e,3,7776e6],[t,1,31536e6]];function u(e,n,a){const i=Math.abs(n-e)/a,l=r((([,,t])=>t)).right(o,i);if(l===o.length)return t.every(f(e/31536e6,n/31536e6,a));if(0===l)return ra.every(Math.max(f(e,n,a),1));const[u,s]=o[i/o[l-1][2]<o[l][2]/i?l-1:l];return u.every(s)}return[function(t,e,n){const r=e<t;r&&([t,e]=[e,t]);const a=n&&"function"==typeof n.range?n:u(t,e,n),i=a?a.range(t,+e+1):[];return r?i.reverse():i},u]}(da,ha,sa,oa,la,ia);function ba(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 Da(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 ka(t,e,n){return{y:t,m:e,d:n,H:0,M:0,S:0,L:0}}var Ma,Ta,Ca={"-":"",_:" ",0:"0"},Fa=/^\s*\d+/,_a=/^%/,Sa=/[\\^$*+?|[\]().{}]/g;function Ea(t,e,n){var r=t<0?"-":"",a=(r?-t:t)+"",i=a.length;return r+(i<n?new Array(n-i+1).join(e)+a:a)}function Ba(t){return t.replace(Sa,"\\$&")}function Na(t){return new RegExp("^(?:"+t.map(Ba).join("|")+")","i")}function La(t){return new Map(t.map(((t,e)=>[t.toLowerCase(),e])))}function Va(t,e,n){var r=Fa.exec(e.slice(n,n+1));return r?(t.w=+r[0],n+r[0].length):-1}function Ia(t,e,n){var r=Fa.exec(e.slice(n,n+1));return r?(t.u=+r[0],n+r[0].length):-1}function Ya(t,e,n){var r=Fa.exec(e.slice(n,n+2));return r?(t.U=+r[0],n+r[0].length):-1}function Pa(t,e,n){var r=Fa.exec(e.slice(n,n+2));return r?(t.V=+r[0],n+r[0].length):-1}function za(t,e,n){var r=Fa.exec(e.slice(n,n+2));return r?(t.W=+r[0],n+r[0].length):-1}function Oa(t,e,n){var r=Fa.exec(e.slice(n,n+4));return r?(t.y=+r[0],n+r[0].length):-1}function Ua(t,e,n){var r=Fa.exec(e.slice(n,n+2));return r?(t.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function Ra(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 Wa(t,e,n){var r=Fa.exec(e.slice(n,n+1));return r?(t.q=3*r[0]-3,n+r[0].length):-1}function $a(t,e,n){var r=Fa.exec(e.slice(n,n+2));return r?(t.m=r[0]-1,n+r[0].length):-1}function Ha(t,e,n){var r=Fa.exec(e.slice(n,n+2));return r?(t.d=+r[0],n+r[0].length):-1}function Xa(t,e,n){var r=Fa.exec(e.slice(n,n+3));return r?(t.m=0,t.d=+r[0],n+r[0].length):-1}function ja(t,e,n){var r=Fa.exec(e.slice(n,n+2));return r?(t.H=+r[0],n+r[0].length):-1}function qa(t,e,n){var r=Fa.exec(e.slice(n,n+2));return r?(t.M=+r[0],n+r[0].length):-1}function Ga(t,e,n){var r=Fa.exec(e.slice(n,n+2));return r?(t.S=+r[0],n+r[0].length):-1}function Qa(t,e,n){var r=Fa.exec(e.slice(n,n+3));return r?(t.L=+r[0],n+r[0].length):-1}function Za(t,e,n){var r=Fa.exec(e.slice(n,n+6));return r?(t.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function Ja(t,e,n){var r=_a.exec(e.slice(n,n+1));return r?n+r[0].length:-1}function Ka(t,e,n){var r=Fa.exec(e.slice(n));return r?(t.Q=+r[0],n+r[0].length):-1}function ti(t,e,n){var r=Fa.exec(e.slice(n));return r?(t.s=+r[0],n+r[0].length):-1}function ei(t,e){return Ea(t.getDate(),e,2)}function ni(t,e){return Ea(t.getHours(),e,2)}function ri(t,e){return Ea(t.getHours()%12||12,e,2)}function ai(t,e){return Ea(1+oa.count(da(t),t),e,3)}function ii(t,e){return Ea(t.getMilliseconds(),e,3)}function li(t,e){return ii(t,e)+"000"}function oi(t,e){return Ea(t.getMonth()+1,e,2)}function ui(t,e){return Ea(t.getMinutes(),e,2)}function si(t,e){return Ea(t.getSeconds(),e,2)}function fi(t){var e=t.getDay();return 0===e?7:e}function ci(t,e){return Ea(sa.count(da(t)-1,t),e,2)}function hi(t){var e=t.getDay();return e>=4||0===e?ca(t):ca.ceil(t)}function di(t,e){return t=hi(t),Ea(ca.count(da(t),t)+(4===da(t).getDay()),e,2)}function gi(t){return t.getDay()}function pi(t,e){return Ea(fa.count(da(t)-1,t),e,2)}function yi(t,e){return Ea(t.getFullYear()%100,e,2)}function mi(t,e){return Ea((t=hi(t)).getFullYear()%100,e,2)}function vi(t,e){return Ea(t.getFullYear()%1e4,e,4)}function wi(t,e){var n=t.getDay();return Ea((t=n>=4||0===n?ca(t):ca.ceil(t)).getFullYear()%1e4,e,4)}function xi(t){var e=t.getTimezoneOffset();return(e>0?"-":(e*=-1,"+"))+Ea(e/60|0,"0",2)+Ea(e%60,"0",2)}function Ai(t,e){return Ea(t.getUTCDate(),e,2)}function bi(t,e){return Ea(t.getUTCHours(),e,2)}function Di(t,e){return Ea(t.getUTCHours()%12||12,e,2)}function ki(t,e){return Ea(1+ga.count(wa(t),t),e,3)}function Mi(t,e){return Ea(t.getUTCMilliseconds(),e,3)}function Ti(t,e){return Mi(t,e)+"000"}function Ci(t,e){return Ea(t.getUTCMonth()+1,e,2)}function Fi(t,e){return Ea(t.getUTCMinutes(),e,2)}function _i(t,e){return Ea(t.getUTCSeconds(),e,2)}function Si(t){var e=t.getUTCDay();return 0===e?7:e}function Ei(t,e){return Ea(ya.count(wa(t)-1,t),e,2)}function Bi(t){var e=t.getUTCDay();return e>=4||0===e?va(t):va.ceil(t)}function Ni(t,e){return t=Bi(t),Ea(va.count(wa(t),t)+(4===wa(t).getUTCDay()),e,2)}function Li(t){return t.getUTCDay()}function Vi(t,e){return Ea(ma.count(wa(t)-1,t),e,2)}function Ii(t,e){return Ea(t.getUTCFullYear()%100,e,2)}function Yi(t,e){return Ea((t=Bi(t)).getUTCFullYear()%100,e,2)}function Pi(t,e){return Ea(t.getUTCFullYear()%1e4,e,4)}function zi(t,e){var n=t.getUTCDay();return Ea((t=n>=4||0===n?va(t):va.ceil(t)).getUTCFullYear()%1e4,e,4)}function Oi(){return"+0000"}function Ui(){return"%"}function Ri(t){return+t}function Wi(t){return Math.floor(+t/1e3)}function $i(t){return new Date(t)}function Hi(t){return t instanceof Date?+t:+new Date(+t)}function Xi(t,e,n,r,a,i,l,o,u,s){var f=Qr(),c=f.invert,h=f.domain,d=s(".%L"),g=s(":%S"),p=s("%I:%M"),y=s("%I %p"),m=s("%a %d"),v=s("%b %d"),w=s("%B"),x=s("%Y");function A(t){return(u(t)<t?d:o(t)<t?g:l(t)<t?p:i(t)<t?y:r(t)<t?a(t)<t?m:v:n(t)<t?w:x)(t)}return f.invert=function(t){return new Date(c(t))},f.domain=function(t){return arguments.length?h(Array.from(t,Hi)):h().map($i)},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?A:s(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,a=(t=t.slice()).length-1,i=t[r],l=t[a];return l<i&&(n=r,r=a,a=n,n=i,i=l,l=n),t[r]=e.floor(i),t[a]=e.ceil(l),t}(n,t)):f},f.copy=function(){return qr(f,Xi(t,e,n,r,a,i,l,o,u,s))},f}!function(t){Ma=function(t){var e=t.dateTime,n=t.date,r=t.time,a=t.periods,i=t.days,l=t.shortDays,o=t.months,u=t.shortMonths,s=Na(a),f=La(a),c=Na(i),h=La(i),d=Na(l),g=La(l),p=Na(o),y=La(o),m=Na(u),v=La(u),w={a:function(t){return l[t.getDay()]},A:function(t){return i[t.getDay()]},b:function(t){return u[t.getMonth()]},B:function(t){return o[t.getMonth()]},c:null,d:ei,e:ei,f:li,g:mi,G:wi,H:ni,I:ri,j:ai,L:ii,m:oi,M:ui,p:function(t){return a[+(t.getHours()>=12)]},q:function(t){return 1+~~(t.getMonth()/3)},Q:Ri,s:Wi,S:si,u:fi,U:ci,V:di,w:gi,W:pi,x:null,X:null,y:yi,Y:vi,Z:xi,"%":Ui},x={a:function(t){return l[t.getUTCDay()]},A:function(t){return i[t.getUTCDay()]},b:function(t){return u[t.getUTCMonth()]},B:function(t){return o[t.getUTCMonth()]},c:null,d:Ai,e:Ai,f:Ti,g:Yi,G:zi,H:bi,I:Di,j:ki,L:Mi,m:Ci,M:Fi,p:function(t){return a[+(t.getUTCHours()>=12)]},q:function(t){return 1+~~(t.getUTCMonth()/3)},Q:Ri,s:Wi,S:_i,u:Si,U:Ei,V:Ni,w:Li,W:Vi,x:null,X:null,y:Ii,Y:Pi,Z:Oi,"%":Ui},A={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:Ha,e:Ha,f:Za,g:Ua,G:Oa,H:ja,I:ja,j:Xa,L:Qa,m:$a,M:qa,p:function(t,e,n){var r=s.exec(e.slice(n));return r?(t.p=f.get(r[0].toLowerCase()),n+r[0].length):-1},q:Wa,Q:Ka,s:ti,S:Ga,u:Ia,U:Ya,V:Pa,w:Va,W:za,x:function(t,e,r){return k(t,n,e,r)},X:function(t,e,n){return k(t,r,e,n)},y:Ua,Y:Oa,Z:Ra,"%":Ja};function b(t,e){return function(n){var r,a,i,l=[],o=-1,u=0,s=t.length;for(n instanceof Date||(n=new Date(+n));++o<s;)37===t.charCodeAt(o)&&(l.push(t.slice(u,o)),null!=(a=Ca[r=t.charAt(++o)])?r=t.charAt(++o):a="e"===r?" ":"0",(i=e[r])&&(r=i(n,a)),l.push(r),u=o+1);return l.push(t.slice(u,o)),l.join("")}}function D(t,e){return function(n){var r,a,i=ka(1900,void 0,1);if(k(i,t,n+="",0)!=n.length)return null;if("Q"in i)return new Date(i.Q);if("s"in i)return new Date(1e3*i.s+("L"in i?i.L:0));if(e&&!("Z"in i)&&(i.Z=0),"p"in i&&(i.H=i.H%12+12*i.p),void 0===i.m&&(i.m="q"in i?i.q:0),"V"in i){if(i.V<1||i.V>53)return null;"w"in i||(i.w=1),"Z"in i?(a=(r=Da(ka(i.y,0,1))).getUTCDay(),r=a>4||0===a?ma.ceil(r):ma(r),r=ga.offset(r,7*(i.V-1)),i.y=r.getUTCFullYear(),i.m=r.getUTCMonth(),i.d=r.getUTCDate()+(i.w+6)%7):(a=(r=ba(ka(i.y,0,1))).getDay(),r=a>4||0===a?fa.ceil(r):fa(r),r=oa.offset(r,7*(i.V-1)),i.y=r.getFullYear(),i.m=r.getMonth(),i.d=r.getDate()+(i.w+6)%7)}else("W"in i||"U"in i)&&("w"in i||(i.w="u"in i?i.u%7:"W"in i?1:0),a="Z"in i?Da(ka(i.y,0,1)).getUTCDay():ba(ka(i.y,0,1)).getDay(),i.m=0,i.d="W"in i?(i.w+6)%7+7*i.W-(a+5)%7:i.w+7*i.U-(a+6)%7);return"Z"in i?(i.H+=i.Z/100|0,i.M+=i.Z%100,Da(i)):ba(i)}}function k(t,e,n,r){for(var a,i,l=0,o=e.length,u=n.length;l<o;){if(r>=u)return-1;if(37===(a=e.charCodeAt(l++))){if(a=e.charAt(l++),!(i=A[a in Ca?e.charAt(l++):a])||(r=i(t,n,r))<0)return-1}else if(a!=n.charCodeAt(r++))return-1}return r}return w.x=b(n,w),w.X=b(r,w),w.c=b(e,w),x.x=b(n,x),x.X=b(r,x),x.c=b(e,x),{format:function(t){var e=b(t+="",w);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+="",x);return e.toString=function(){return t},e},utcParse:function(t){var e=D(t+="",!0);return e.toString=function(){return t},e}}}(t),Ta=Ma.format}({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 ji,qi=(ji=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),a=t[r],i=t[r+1],l=r>0?t[r-1]:2*a-i,o=r<e-1?t[r+2]:2*i-a;return function(t,e,n,r,a){var i=t*t,l=i*t;return((1-3*t+3*i-l)*e+(4-6*i+3*l)*n+(1+3*t+3*i-3*l)*r+l*a)/6}((n-r/e)*e,l,a,i,o)}},function(t){var e,n,r=t.length,a=new Array(r),i=new Array(r),l=new Array(r);for(e=0;e<r;++e)n=pe(t[e]),a[e]=n.r||0,i[e]=n.g||0,l[e]=n.b||0;return a=ji(a),i=ji(i),l=ji(l),n.opacity=1,function(t){return n.r=a(t),n.g=i(t),n.b=l(t),n+""}}),Gi=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 Qi(t){return function(){return t}}(t=>{qi(t[t.length-1])})(Gi);var Zi,Ji,Ki,tl=Math.abs,el=Math.atan2,nl=Math.cos,rl=Math.max,al=Math.min,il=Math.sin,ll=Math.sqrt,ol=Math.PI,ul=ol/2,sl=2*ol;function fl(t){return t>1?0:t<-1?ol:Math.acos(t)}function cl(t){return t>=1?ul:t<=-1?-ul:Math.asin(t)}function hl(t){return t.innerRadius}function dl(t){return t.outerRadius}function gl(t){return t.startAngle}function pl(t){return t.endAngle}function yl(t){return t&&t.padAngle}function ml(t,e,n,r,a,i,l,o){var u=n-t,s=r-e,f=l-a,c=o-i,h=c*u-f*s;if(!(h*h<1e-12))return[t+(h=(f*(e-i)-c*(t-a))/h)*u,e+h*s]}function vl(t,e,n,r,a,i,l){var o=t-n,u=e-r,s=(l?i:-i)/ll(o*o+u*u),f=s*u,c=-s*o,h=t+f,d=e+c,g=n+f,p=r+c,y=(h+g)/2,m=(d+p)/2,v=g-h,w=p-d,x=v*v+w*w,A=a-i,b=h*p-g*d,D=(w<0?-1:1)*ll(rl(0,A*A*x-b*b)),k=(b*w-v*D)/x,M=(-b*v-w*D)/x,T=(b*w+v*D)/x,C=(-b*v+w*D)/x,F=k-y,_=M-m,S=T-y,E=C-m;return F*F+_*_>S*S+E*E&&(k=T,M=C),{cx:k,cy:M,x01:-f,y01:-c,x11:k*(a/A-1),y11:M*(a/A-1)}}function wl(){var t=hl,e=dl,n=Qi(0),r=null,a=gl,i=pl,l=yl,o=null;function u(){var u,s,f=+t.apply(this,arguments),c=+e.apply(this,arguments),h=a.apply(this,arguments)-ul,d=i.apply(this,arguments)-ul,g=tl(d-h),p=d>h;if(o||(o=u=or()),c<f&&(s=c,c=f,f=s),c>1e-12)if(g>sl-1e-12)o.moveTo(c*nl(h),c*il(h)),o.arc(0,0,c,h,d,!p),f>1e-12&&(o.moveTo(f*nl(d),f*il(d)),o.arc(0,0,f,d,h,p));else{var y,m,v=h,w=d,x=h,A=d,b=g,D=g,k=l.apply(this,arguments)/2,M=k>1e-12&&(r?+r.apply(this,arguments):ll(f*f+c*c)),T=al(tl(c-f)/2,+n.apply(this,arguments)),C=T,F=T;if(M>1e-12){var _=cl(M/f*il(k)),S=cl(M/c*il(k));(b-=2*_)>1e-12?(x+=_*=p?1:-1,A-=_):(b=0,x=A=(h+d)/2),(D-=2*S)>1e-12?(v+=S*=p?1:-1,w-=S):(D=0,v=w=(h+d)/2)}var E=c*nl(v),B=c*il(v),N=f*nl(A),L=f*il(A);if(T>1e-12){var V,I=c*nl(w),Y=c*il(w),P=f*nl(x),z=f*il(x);if(g<ol&&(V=ml(E,B,P,z,I,Y,N,L))){var O=E-V[0],U=B-V[1],R=I-V[0],W=Y-V[1],$=1/il(fl((O*R+U*W)/(ll(O*O+U*U)*ll(R*R+W*W)))/2),H=ll(V[0]*V[0]+V[1]*V[1]);C=al(T,(f-H)/($-1)),F=al(T,(c-H)/($+1))}}D>1e-12?F>1e-12?(y=vl(P,z,E,B,c,F,p),m=vl(I,Y,N,L,c,F,p),o.moveTo(y.cx+y.x01,y.cy+y.y01),F<T?o.arc(y.cx,y.cy,F,el(y.y01,y.x01),el(m.y01,m.x01),!p):(o.arc(y.cx,y.cy,F,el(y.y01,y.x01),el(y.y11,y.x11),!p),o.arc(0,0,c,el(y.cy+y.y11,y.cx+y.x11),el(m.cy+m.y11,m.cx+m.x11),!p),o.arc(m.cx,m.cy,F,el(m.y11,m.x11),el(m.y01,m.x01),!p))):(o.moveTo(E,B),o.arc(0,0,c,v,w,!p)):o.moveTo(E,B),f>1e-12&&b>1e-12?C>1e-12?(y=vl(N,L,I,Y,f,-C,p),m=vl(E,B,P,z,f,-C,p),o.lineTo(y.cx+y.x01,y.cy+y.y01),C<T?o.arc(y.cx,y.cy,C,el(y.y01,y.x01),el(m.y01,m.x01),!p):(o.arc(y.cx,y.cy,C,el(y.y01,y.x01),el(y.y11,y.x11),!p),o.arc(0,0,f,el(y.cy+y.y11,y.cx+y.x11),el(m.cy+m.y11,m.cx+m.x11),p),o.arc(m.cx,m.cy,C,el(m.y11,m.x11),el(m.y01,m.x01),!p))):o.arc(0,0,f,A,x,p):o.lineTo(N,L)}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=(+a.apply(this,arguments)+ +i.apply(this,arguments))/2-ol/2;return[nl(r)*n,il(r)*n]},u.innerRadius=function(e){return arguments.length?(t="function"==typeof e?e:Qi(+e),u):t},u.outerRadius=function(t){return arguments.length?(e="function"==typeof t?t:Qi(+t),u):e},u.cornerRadius=function(t){return arguments.length?(n="function"==typeof t?t:Qi(+t),u):n},u.padRadius=function(t){return arguments.length?(r=null==t?null:"function"==typeof t?t:Qi(+t),u):r},u.startAngle=function(t){return arguments.length?(a="function"==typeof t?t:Qi(+t),u):a},u.endAngle=function(t){return arguments.length?(i="function"==typeof t?t:Qi(+t),u):i},u.padAngle=function(t){return arguments.length?(l="function"==typeof t?t:Qi(+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 Al(t){this._context=t}function bl(t){return new Al(t)}function Dl(t){return t[0]}function kl(t){return t[1]}function Ml(t,e){return e<t?-1:e>t?1:e>=t?0:NaN}function Tl(t){return t}Al.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)}}},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"}(Zi||(Zi={})),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"}(Ji||(Ji={})),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"}(Ki||(Ki={}));class Cl{constructor(t,e){this.date=t,this.value=e}}class Fl{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=Ki.Number,this.usedAsXDataset=!1,this.numTargets=0,e===Zi.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 a=parseFloat(t.groups.accessor1);if(Number.isNumber(a)){let i;void 0!==t.groups.accessor2&&(i=parseFloat(t.groups.accessor2)),this.accessor=r,this.accessor1=a,Number.isNumber(i)&&(this.accessor2=i),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 _l{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 _l(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)}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 Cl(this.parent.getDates()[t],this.values[t])}}return this.currentIndex=0,{done:!0,value:null}}[Symbol.iterator](){return this}}class Sl{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 _l(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 El{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.penalty=[],this.valueShift=[],this.shiftOnlyValueLargerThan=[],this.valueType=[],this.textValueMap={},this.dataAreaSize=new Ul(300,300),this.margin=new Rl(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 Bl{constructor(){this.id=-1,this.name="",this.xData=[],this.yData=[]}}class Nl{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 Ji.Unknown}}class Ll extends Nl{constructor(){super(),this.lineColor=[],this.lineWidth=[],this.showLine=[],this.showPoint=[],this.pointColor=[],this.pointBorderColor=[],this.pointBorderWidth=[],this.pointSize=[],this.fillGap=[],this.yAxisLocation=[]}GetGraphType(){return Ji.Line}}class Vl extends Nl{constructor(){super(),this.barColor=[],this.yAxisLocation=[]}GetGraphType(){return Ji.Bar}}class Il{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 Ji.Pie}}class Yl{constructor(){this.template="",this.style=""}GetGraphType(){return Ji.Summary}}class Pl{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 Ji.Month}}class zl{constructor(){this.dataset="0",this.startWeekOn="Sun",this.orientation="vertical",this.yMin=null,this.yMax=null,this.color=null}GetGraphType(){return Ji.Heatmap}}class Ol{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 Ji.Bullet}}class Ul{constructor(t,e){this.width=t,this.height=e}}class Rl{constructor(t,e,n,r){this.top=t,this.right=e,this.bottom=n,this.left=r}}class Wl{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 $l{constructor(t,e){this.filePath=t,this.tableIndex=e,this.xDataset=null,this.yDatasets=[]}}class Hl{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 Xl=function(){const t=["HH","H","hh","h"],e=["mm","m"],n=["ss","s",""];let r=[];for(let a of t)for(let t of e)for(let e of n){let n=`${a}:${t}`;""!==e&&(n+=`:${e}`),a.contains("h")&&(n+=" a"),r.push(n)}return r}();function jl(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 ql(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 Gl(t,e,n=!0){if(!t||!e||0===e.length)return[null,t];let r=null;const a="^(?<value>[0-9]+)("+e.join("|")+")$",i=new RegExp(a,"gm");let l=i.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(i,"")),[r,t]):[null,t]}function Ql(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 a=null;[a,t]=Gl(t,["year","years","Y","y"]),null!==a&&(r&&(a*=-1),e.add(a,"years"),n=!0);let i=null;[i,t]=Gl(t,["month","months","M"]),null!==i&&(r&&(i*=-1),e.add(i,"months"),n=!0);let l=null;[l,t]=Gl(t,["week","weeks","W","w"]),null!==l&&(r&&(l*=-1),e.add(l,"weeks"),n=!0);let o=null;[o,t]=Gl(t,["day","days","D","d"]),null!==o&&(r&&(o*=-1),e.add(o,"days"),n=!0);let u=null;[u,t]=Gl(t,["hour","hours","H","h"]),null!==u&&(r&&(u*=-1),e.add(u,"hours"),n=!0);let s=null;[s,t]=Gl(t,["minute","minutes","m"]),null!==s&&(r&&(s*=-1),e.add(s,"minutes"),n=!0);let f=null;return[f,t]=Gl(t,["second","seconds","S","s"]),null!==f&&(r&&(f*=-1),e.add(f,"seconds"),n=!0),n?e:null}function Zl(t,e){let n=null,r=Ql(t);return r&&window.moment.isDuration(r)&&(n=to(e),n=n.add(r),n&&n.isValid()),n}function Jl(t,e){return null==t?null:"iso-8601"===e.toLowerCase()?t.format():t.format(e)}function Kl(t,e){return ql(Jl(window.moment(t),e),e)}function to(t){return ql(Jl(window.moment(),t),t)}function eo(t,e){for(var n=(e=e.replace(/^\./,"")).split("."),r=0,a=n.length;r<a;++r){var i=n[r];if(!(i in t))return null;t=t[i]}return"string"==typeof t||Array.isArray(t)?t:"number"==typeof t?t.toString():null}function no(t,e){const n=Array.from(t),r=n.findIndex((t=>t!==e)),a=n.reverse().findIndex((t=>t!==e));return-1===r&&-1===a?t:t.substring(r,t.length-a)}function ro(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 ao(t,e=null){let n=null,r=Ki.Number;if("string"==typeof t)if(t.includes(":")){let e=!1;t.startsWith("-")&&(e=!0,t=t.substring(1));let a=window.moment(t,Xl,!0);a.isValid()&&(n=a.diff(window.moment("00:00","HH:mm",!0),"seconds"),e&&(n*=-1),r=Ki.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 a=e[n].toString();t=t.replace(r,a);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 io(t,e="",n=""){var r=jt("body").append("svg");let a=r.append("text").text(t).attr("x",-99999).attr("y",-99999);e&&a.attr("class",e),n&&a.attr("transform","rotate("+n+")");var i=r.node().getBBox();return r.remove(),{width:i.width,height:i.height}}function lo(t,e,n){let r=(0|parseFloat(t.attr("width")))+e,a=(0|parseFloat(t.attr("height")))+n;t.attr("width",r),t.attr("height",a)}function oo(t,e,n){let r=new Wl(t.attr("transform"));t.attr("transform","translate("+(r.translateX+e)+","+(r.translateY+n)+")")}function uo(t){return t=(t=(t=t.replace(/(^\\s\*)|(\\s\*$)/gi,"")).replace(/\[ \]{2,}/gi," ")).replace(/\\n /,"\\n")}var so=i((function(t,e){!function(n){var r="Compound",a="MemberExpression",i="Literal",l=function(t,e){var n=new Error(t+" at character "+e);throw n.index=e,n.description=t,n},o=!0,u={"-":o,"!":o,"~":o,"+":o},s={"||":1,"&&":2,"|":3,"^":4,"&":5,"==":6,"!=":6,"===":6,"!==":6,"<":7,">":7,"<=":7,">=":7,"<<":8,">>":8,">>>":8,"+":9,"-":9,"*":10,"/":10,"%":10},f={$:o,_:o},c=function(t){var e,n=0;for(var r in t)(e=r.length)>n&&t.hasOwnProperty(r)&&(n=e);return n},h=c(u),d=c(s),g={true:!0,false:!1,null:null},p=function(t){return s[t]||0},y=function(t,e,n){return{type:"||"===t||"&&"===t?"LogicalExpression":"BinaryExpression",operator:t,left:e,right:n}},m=function(t){return t>=48&&t<=57},v=function(t){return t>=65&&t<=90||t>=97&&t<=122||t>=128&&!s[String.fromCharCode(t)]||f.hasOwnProperty(String.fromCharCode(t))},w=function(t){return t>=65&&t<=90||t>=97&&t<=122||t>=48&&t<=57||t>=128&&!s[String.fromCharCode(t)]||f.hasOwnProperty(String.fromCharCode(t))},x=function(t){for(var e,n,o=0,f=t.charAt,c=t.charCodeAt,x=function(e){return f.call(t,e)},A=function(e){return c.call(t,e)},b=t.length,D=function(){for(var t=A(o);32===t||9===t||10===t||13===t;)t=A(++o)},k=function(){var t,e,n=T();return D(),63!==A(o)?n:(o++,(t=k())||l("Expected expression",o),D(),58===A(o)?(o++,(e=k())||l("Expected expression",o),{type:"ConditionalExpression",test:n,consequent:t,alternate:e}):void l("Expected :",o))},M=function(){D();for(var e=t.substr(o,d),n=e.length;n>0;){if(s.hasOwnProperty(e)&&(!v(A(o))||o+e.length<t.length&&!w(A(o+e.length))))return o+=n,e;e=e.substr(0,--n)}return!1},T=function(){var t,e,n,r,a,i,u,s,f;if(i=C(),!(e=M()))return i;for(a={value:e,prec:p(e)},(u=C())||l("Expected expression after "+e,o),r=[i,a,u];(e=M())&&0!==(n=p(e));){for(a={value:e,prec:n},f=e;r.length>2&&n<=r[r.length-2].prec;)u=r.pop(),e=r.pop().value,i=r.pop(),t=y(e,i,u),r.push(t);(t=C())||l("Expected expression after "+f,o),r.push(a,t)}for(t=r[s=r.length-1];s>1;)t=y(r[s-1].value,r[s-2],t),s-=2;return t},C=function(){var e,n,r,i;if(D(),e=A(o),m(e)||46===e)return F();if(39===e||34===e)i=_();else if(91===e)i=N();else{for(r=(n=t.substr(o,h)).length;r>0;){if(u.hasOwnProperty(n)&&(!v(A(o))||o+n.length<t.length&&!w(A(o+n.length))))return o+=r,{type:"UnaryExpression",operator:n,argument:C(),prefix:!0};n=n.substr(0,--r)}v(e)?i=S():40===e&&(i=B())}if(!i)return!1;for(D(),e=A(o);46===e||91===e||40===e;)o++,46===e?(D(),i={type:a,computed:!1,object:i,property:S()}):91===e?(i={type:a,computed:!0,object:i,property:k()},D(),93!==(e=A(o))&&l("Unclosed [",o),o++):40===e&&(i={type:"CallExpression",arguments:E(41),callee:i}),D(),e=A(o);return i},F=function(){for(var t,e,n="";m(A(o));)n+=x(o++);if(46===A(o))for(n+=x(o++);m(A(o));)n+=x(o++);if("e"===(t=x(o))||"E"===t){for(n+=x(o++),"+"!==(t=x(o))&&"-"!==t||(n+=x(o++));m(A(o));)n+=x(o++);m(A(o-1))||l("Expected exponent ("+n+x(o)+")",o)}return e=A(o),v(e)?l("Variable names cannot start with a number ("+n+x(o)+")",o):46===e&&l("Unexpected period",o),{type:i,value:parseFloat(n),raw:n}},_=function(){for(var t,e="",n=x(o++),r=!1;o<b;){if((t=x(o++))===n){r=!0;break}if("\\"===t)switch(t=x(o++)){case"n":e+="\n";break;case"r":e+="\r";break;case"t":e+="\t";break;case"b":e+="\b";break;case"f":e+="\f";break;case"v":e+="\v";break;default:e+=t}else e+=t}return r||l('Unclosed quote after "'+e+'"',o),{type:i,value:e,raw:n+e+n}},S=function(){var e,n=A(o),r=o;for(v(n)?o++:l("Unexpected "+x(o),o);o<b&&(n=A(o),w(n));)o++;return e=t.slice(r,o),g.hasOwnProperty(e)?{type:i,value:g[e],raw:e}:"this"===e?{type:"ThisExpression"}:{type:"Identifier",name:e}},E=function(t){for(var e,n,a=[],i=!1,u=0;o<b;){if(D(),(e=A(o))===t){i=!0,o++,41===t&&u&&u>=a.length&&l("Unexpected token "+String.fromCharCode(t),o);break}if(44===e){if(o++,++u!==a.length)if(41===t)l("Unexpected token ,",o);else if(93===t)for(var s=a.length;s<u;s++)a.push(null)}else(n=k())&&n.type!==r||l("Expected comma",o),a.push(n)}return i||l("Expected "+String.fromCharCode(t),o),a},B=function(){o++;var t=k();if(D(),41===A(o))return o++,t;l("Unclosed (",o)},N=function(){return o++,{type:"ArrayExpression",elements:E(93)}},L=[];o<b;)59===(e=A(o))||44===e?o++:(n=k())?L.push(n):o<b&&l('Unexpected "'+x(o)+'"',o);return 1===L.length?L[0]:{type:r,body:L}};x.version="0.4.0",x.toString=function(){return"JavaScript Expression Parser (JSEP) v"+x.version},x.addUnaryOp=function(t){return h=Math.max(t.length,h),u[t]=o,this},x.addBinaryOp=function(t,e){return d=Math.max(t.length,d),s[t]=e,this},x.addIdentifierChar=function(t){return f[t]=o,this},x.addLiteral=function(t,e){return g[t]=e,this},x.removeUnaryOp=function(t){return delete u[t],t.length===h&&(h=c(u)),this},x.removeAllUnaryOps=function(){return u={},h=0,this},x.removeIdentifierChar=function(t){return delete f[t],this},x.removeBinaryOp=function(t){return delete s[t],t.length===d&&(d=c(s)),this},x.removeAllBinaryOps=function(){return s={},d=0,this},x.removeLiteral=function(t){return delete g[t],this},x.removeAllLiterals=function(){return g={},this},t.exports?e=t.exports=x:e.parse=x}()})),fo=i((function(t,e){!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 n(t){return a(l(t),arguments)}function r(t,e){return n.apply(null,[t].concat(e||[]))}function a(e,r){var a,i,l,o,u,s,f,c,h,d=1,g=e.length,p="";for(i=0;i<g;i++)if("string"==typeof e[i])p+=e[i];else if("object"==typeof e[i]){if((o=e[i]).keys)for(a=r[d],l=0;l<o.keys.length;l++){if(null==a)throw new Error(n('[sprintf] Cannot access property "%s" of undefined value "%s"',o.keys[l],o.keys[l-1]));a=a[o.keys[l]]}else a=o.param_no?r[o.param_no]:r[d++];if(t.not_type.test(o.type)&&t.not_primitive.test(o.type)&&a instanceof Function&&(a=a()),t.numeric_arg.test(o.type)&&"number"!=typeof a&&isNaN(a))throw new TypeError(n("[sprintf] expecting number but found %T",a));switch(t.number.test(o.type)&&(c=a>=0),o.type){case"b":a=parseInt(a,10).toString(2);break;case"c":a=String.fromCharCode(parseInt(a,10));break;case"d":case"i":a=parseInt(a,10);break;case"j":a=JSON.stringify(a,null,o.width?parseInt(o.width):0);break;case"e":a=o.precision?parseFloat(a).toExponential(o.precision):parseFloat(a).toExponential();break;case"f":a=o.precision?parseFloat(a).toFixed(o.precision):parseFloat(a);break;case"g":a=o.precision?String(Number(a.toPrecision(o.precision))):parseFloat(a);break;case"o":a=(parseInt(a,10)>>>0).toString(8);break;case"s":a=String(a),a=o.precision?a.substring(0,o.precision):a;break;case"t":a=String(!!a),a=o.precision?a.substring(0,o.precision):a;break;case"T":a=Object.prototype.toString.call(a).slice(8,-1).toLowerCase(),a=o.precision?a.substring(0,o.precision):a;break;case"u":a=parseInt(a,10)>>>0;break;case"v":a=a.valueOf(),a=o.precision?a.substring(0,o.precision):a;break;case"x":a=(parseInt(a,10)>>>0).toString(16);break;case"X":a=(parseInt(a,10)>>>0).toString(16).toUpperCase()}t.json.test(o.type)?p+=a:(!t.number.test(o.type)||c&&!o.sign?h="":(h=c?"+":"-",a=a.toString().replace(t.sign,"")),s=o.pad_char?"0"===o.pad_char?"0":o.pad_char.charAt(1):" ",f=o.width-(h+a).length,u=o.width&&f>0?s.repeat(f):"",p+=o.align?h+a+u:"0"===s?h+u+a:u+h+a)}return p}var i=Object.create(null);function l(e){if(i[e])return i[e];for(var n,r=e,a=[],l=0;r;){if(null!==(n=t.text.exec(r)))a.push(n[0]);else if(null!==(n=t.modulo.exec(r)))a.push("%");else{if(null===(n=t.placeholder.exec(r)))throw new SyntaxError("[sprintf] unexpected placeholder");if(n[2]){l|=1;var o=[],u=n[2],s=[];if(null===(s=t.key.exec(u)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(o.push(s[1]);""!==(u=u.substring(s[0].length));)if(null!==(s=t.key_access.exec(u)))o.push(s[1]);else{if(null===(s=t.index_access.exec(u)))throw new SyntaxError("[sprintf] failed to parse named argument key");o.push(s[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]})}r=r.substring(n[0].length)}return i[e]=a}e.sprintf=n,e.vsprintf=r,"undefined"!=typeof window&&(window.sprintf=n,window.vsprintf=r)}()}));function co(t){if("number"==typeof t){if(0===t)return!1}else if(t instanceof _l&&t.getValues().some((function(t){return 0===t})))return!1;return!0}const ho={min:function(t,e){return h(t.getValues())},minDate:function(t,e){let n=h(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 c(t.getValues())},maxDate:function(t,e){let n=c(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 m(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)null!==e.value?n++:n=0,n>=r&&(r=n);return r},maxStreakStart:function(t,e){let n=0,r=0,a=null,i=null;if(t)for(let e of t)null!==e.value?(0===n&&(a=e.date),n++):n=0,n>=r&&(r=n,i=a);return i},maxStreakEnd:function(t,e){let n=0,r=0,a=null,i=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]),null!==l.value?(n++,null===(null==o?void 0:o.value)&&(a=l.date)):n=0,n>=r&&(r=n,i=a)}}return i},maxBreaks:function(t,e){let n=0,r=0;for(let e of t)null===e.value?n++:n=0,n>r&&(r=n);return r},maxBreaksStart:function(t,e){let n=0,r=0,a=null,i=null;if(t)for(let e of t)null===e.value?(0===n&&(a=e.date),n++):n=0,n>=r&&(r=n,i=a);return i},maxBreaksEnd:function(t,e){let n=0,r=0,a=null,i=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]),null===l.value?(n++,null!==(null==o?void 0:o.value)&&(a=l.date)):n=0,n>=r&&(r=n,i=a)}}return i},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(null===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),null===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 a=e[t];if(null===a.value)break;0===n&&(r=a.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(null!==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),null!==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 a=e[t];if(null!==a.value)break;0===n&&(r=a.date),n++}}return null===r?"Error: absense":r},average:function(t,e){let n=t.getLengthNotNull();return co(n)?m(t.getValues())/n:"Error: divide by zero in expression"},median:function(t,e){return p(t.getValues(),.5,n);var n},variance:function(t,e){return function(t,e){let n,r=0,a=0,i=0;if(void 0===e)for(let e of t)null!=e&&(e=+e)>=e&&(n=e-a,a+=n/++r,i+=n*(e-a));else{let l=-1;for(let o of t)null!=(o=e(o,++l,t))&&(o=+o)>=o&&(n=o-a,a+=n/++r,i+=n*(o-a))}if(r>1)return i/(r-1)}(t.getValues())}},go={"-":function(t){if("number"==typeof t)return-1*t;if(t instanceof _l){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 _l){return t.cloneToTmpDataset()}return"Error: unknown operation for '+'"}},po={"+":function(t,e){if("number"==typeof t&&"number"==typeof e)return t+e;if("number"==typeof t&&e instanceof _l){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 _l&&"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 _l&&e instanceof _l){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 _l){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 _l&&"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 _l&&e instanceof _l){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 _l){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 _l&&"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 _l&&e instanceof _l){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(!co(e))return"Error: divide by zero in expression";if("number"==typeof t&&"number"==typeof e)return t/e;if("number"==typeof t&&e instanceof _l){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 _l&&"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 _l&&e instanceof _l){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(!co(e))return"Error: divide by zero in expression";if("number"==typeof t&&"number"==typeof e)return t%e;if("number"==typeof t&&e instanceof _l){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 _l&&"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 _l&&e instanceof _l){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 '%'"}},yo={normalize:function(t,e,n){let r=t.getYMin(),a=t.getYMax();if(null!==r&&null!==a&&a>r){let e=t.cloneToTmpDataset();return e.getValues().forEach((function(t,e,n){n[e]=(t-r)/(a-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 mo(t,e){switch(t.type){case"Literal":return t.value;case"Identifier":let n=t.name;return n in ho||n in yo?`Error: deprecated template variable '${n}', use '${n}()' instead`:`Error: unknown function name '${n}'`;case"UnaryExpression":let r=t,a=mo(r.argument,e);return"string"==typeof a?a:go[r.operator](a);case"BinaryExpression":let i=t,l=mo(i.left,e),o=mo(i.right,e),u=function(t,e){return"string"==typeof t?t:"string"==typeof e?e:"number"==typeof t||window.moment.isMoment(t)||t instanceof _l?"number"==typeof e||window.moment.isMoment(e)||e instanceof _l?"":"Error: invalide operant type":"Error: invalid operant type"}(l,o);return"string"==typeof u&&u.startsWith("Error:")?u:po[i.operator](l,o);case"CallExpression":let s=t,f=s.callee.name,c=function(t,e){return t.map((function(t){return mo(t,e)}))}(s.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 ho){if(0===c.length){let t=null;for(let n of e.datasets)t||n.getQuery().usedAsXDataset||(t=n);return t?ho[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 _l?ho[f](t,e):`Error: function '${f}' only accepts Dataset`}return`Error: Too many arguments for function ${f}`}if(f in yo){if(1===c.length){if("string"==typeof c[0])return c[0];if(c[0]instanceof _l){let t=c[0];return yo[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 _l){let t=c[0];return yo[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 vo(t,e){let n,r=[],a=new RegExp("{{(?<expr>[\\w+\\-*\\/0-9\\s()\\[\\]%.,]+)(::(?<format>[\\w+\\-*\\/0-9\\s()\\[\\]%.:]+))?}}","gm");for(;n=a.exec(t);){let t=n[0];if(!r.some((e=>e.source===t))&&(void 0!==n.groups&&void 0!==n.groups.expr)){let a=n.groups.expr,i=null;try{i=so(a)}catch(t){return"Error:"+t.message}if(!i)return"Error: failed to parse expression";const l=mo(i,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 wo(t,e){let n=vo(t,e);if("string"==typeof n)return n;let r=n;for(let n of r){let r=n.source,a=n.value,i=n.format,l="";"number"==typeof a?l=i?fo.sprintf("%"+i,a):a.toFixed(1):window.moment.isMoment(a)&&(l=Jl(a,i||e.dateFormat)),l&&(t=t.split(r).join(l))}return t}function xo(t,e){if(t=t.trim(),/^([\-]?[0-9]+[\.][0-9]+|[\-]?[0-9]+)$/.test(t))return parseFloat(t);let n=vo(t,e);if("string"==typeof n)return n;let r=n;return r.length>0?r[0].value:"Error: failed to resolve values"}function Ao(t,e,n,r){let a="",i=.5*n.dataAreaSize.width,l=.7*i,o=l*r.ratioInnerRadius,u=[];for(let t of r.data){let e=xo(t,n);if("string"==typeof e){a=e;break}"number"==typeof e&&u.push(e)}if(""!==a)return a;let s=[];for(let t of r.label){let e=wo(t,n);if(e.startsWith("Error")){a=e;break}s.push(e)}if(""!==a)return a;let f=r.hideLabelLessThan,c=s.map((function(t){return io(t,"tracker-tick-label")})),h=[];for(let t of r.extLabel){let e=wo(t,n);if(e.startsWith("Error")){a=e;break}h.push(e)}if(""!==a)return a;let d=h.map((function(t){return io(t,"tracker-pie-label")})),g=r.showExtLabelOnlyIfNoLabel,p=Cr().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=Tl,e=Ml,n=null,r=Qi(0),a=Qi(sl),i=Qi(0);function l(l){var o,u,s,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(sl,Math.max(-sl,a.apply(this,arguments)-y)),v=Math.min(Math.abs(m)/h,i.apply(this,arguments)),w=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,s=d?(m-h*w)/d:0;o<h;++o,y=f)u=g[o],f=y+((c=p[u])>0?c*s:0)+w,p[u]={data:l[u],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:Qi(+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:Qi(+t),l):r},l.endAngle=function(t){return arguments.length?(a="function"==typeof t?t:Qi(+t),l):a},l.padAngle=function(t){return arguments.length?(i="function"==typeof t?t:Qi(+t),l):i},l}(),v=m(u),w=y.selectAll("sector").data(v).enter().append("g").attr("class","sector"),x=wl().innerRadius(o).outerRadius(l);var A=wl().innerRadius(.9*i).outerRadius(.9*i);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){let n=c[e].width,r=d[e].width;b(t);let a=D(t),l=x.centroid(t),o=A.centroid(t),u=A.centroid(t),f=Math.sqrt(Math.pow(o[0]-l[0],2)+Math.pow(o[1]-l[1],2));return""!==s[e]&&(l[0]=l[0]+(o[0]-l[0])*n/f,l[1]=l[1]+(o[1]-l[1])*n/f,u[0]=(.99*i-r-3)*(a<Math.PI?1:-1)),f=Math.sqrt(Math.pow(o[0]-l[0],2)+Math.pow(o[1]-l[1],2)),f>Math.sqrt(Math.pow(u[0]-l[0],2)+Math.pow(u[1]-l[1],2))?[l,u]:[l,o,u]}w.append("path").attr("fill",(function(t,e){return p(e.toString())})).attr("d",x),y.selectAll("label").data(m(u)).enter().append("text").text((function(t,e){return b(t)?"":s[e]})).attr("transform",(function(t){return"translate("+x.centroid(t)[0]+","+x.centroid(t)[1]+")"})).style("text-anchor","middle").attr("class","tracker-pie-label"),y.selectAll("extLabel").data(v).enter().append("text").text((function(t,e){return g?""===s[e]||b(t)?h[e]:"":h[e]})).attr("transform",(function(t,e){let n=A.centroid(t),r=D(t);return n[0]=(.99*i-d[e].width)*(r<Math.PI?1:-1),"translate("+n[0]+","+n[1]+")"})).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((""===s[e]||b(t))&&""!==h[e])return k(t,e)}else if(""!==h[e])return k(t,e)})).attr("class","tracker-axis")}function bo(t,e,n){if(!e||!n)return;let r={};r=function(t,e,n,r){jt(e).select("#svg").remove();for(var a=Object.getOwnPropertyNames(t),i=0;i<a.length;i++)delete t[a[i]];let l=jt(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 u=o.append("g").attr("id","dataArea").attr("width",n.dataAreaSize.width).attr("height",n.dataAreaSize.height);return t.dataArea=u,t}(r,t,e);let a=Gi[n.dataColor.length];for(let t=0;t<n.dataColor.length;t++)null===n.dataColor[t]&&(n.dataColor[t]=a[t]);!function(t,e,n,r){if(!n||!r)return;if(!r.title)return;let a=io(r.title,"tracker-title"),i=e.graphArea.append("text").text(r.title).attr("id","title").attr("transform","translate("+n.dataAreaSize.width/2+","+a.height/2+")").attr("height",a.height).attr("class","tracker-title");e.title=i,lo(e.svg,0,a.height),lo(e.graphArea,0,a.height),oo(e.dataArea,0,a.height)}(0,r,e,n),Ao(0,r,e,n),n.showLegend&&function(t,e,n,r){let a=e.svg;e.graphArea;let i=e.dataArea,l=e.title,o=0;l&&(o=parseFloat(l.attr("height")));let u=r.dataName,s=u.map((function(t){return io(t,"tracker-legend-label")})),f=0,c=0;for(let t=0;t<u.length;t++)s[t].width>c&&(c=s[t].width,f=t);let h=c/u[f].length,d=s[f].height,g=u.length,p=2*h,y=d,v=2*h,w=0,x=0;"vertical"===r.legendOrientation?(w=3*p+v+c,x=(g+1)*y):"horizontal"===r.legendOrientation&&(w=(2*p+v)*g+p+m(s,(function(t,e){return t.width})),x=y+d);let A=0,b=0;if("top"===r.legendPosition)A=n.dataAreaSize.width/2-w/2,b=o,lo(a,0,x+y),oo(i,0,x+y);else if("bottom"===r.legendPosition)A=n.dataAreaSize.width/2-w/2,b=o+n.dataAreaSize.height+y,lo(a,0,x+y);else if("left"===r.legendPosition)A=0,b=o+n.dataAreaSize.height/2-x/2,lo(a,w+p,0),oo(i,w+p,0);else{if("right"!==r.legendPosition)return;A=n.dataAreaSize.width+p,b=o+n.dataAreaSize.height/2-x/2,lo(a,w+p,0)}let D=e.graphArea.append("g").attr("id","legend").attr("transform","translate("+A+","+b+")"),k=D.append("rect").attr("class","tracker-legend").attr("width",w).attr("height",x);r.legendBgColor&&k.style("fill",r.legendBgColor),r.legendBorderColor&&k.style("stroke",r.legendBorderColor);let M=p,T=d,C=M+p+v,F=T;if("vertical"===r.legendOrientation)D.selectAll("markers").data(u).enter().append("circle").attr("cx",M+v/2).attr("cy",(function(t,e){return T+e*y})).attr("r",(function(t,e){return 5})).style("fill",(function(t,e){return r.dataColor[e]})),D.selectAll("labels").data(u).enter().append("text").attr("x",C).attr("y",(function(t,e){return F+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,D.selectAll("markers").data(u).enter().append("circle").attr("cx",(function(e,n){return 0===n?t=M+v/2:t+=s[n].width+p+v+p,t})).attr("cy",T).attr("r",(function(t,e){return 5})).style("fill",(function(t,e){return r.dataColor[e]})),t=0,D.selectAll("labels").data(u).enter().append("text").attr("x",(function(e,n){return 0===n?t=C:t+=s[n].width+p+v+p,t})).attr("y",F).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=jt(t),a=e.svg,i=parseFloat(a.attr("width")),l=parseFloat(a.attr("height"));a.attr("width",null).attr("height",null).attr("viewBox",`0 0 ${i} ${l}`).attr("preserveAspectRatio","xMidYMid meet"),n.fitPanelWidth?r.style("width","100%"):(r.style("width",(i*n.fixedScale).toString()+"px"),r.style("height",(l*n.fixedScale).toString()+"px"))}(t,r,e)}function Do(t,e,n){if(!e||!n)return;let r="";n.template,r=n.template;let a=wo(r,e);if(a.startsWith("Error:"))return a;if(r=a,""!==r){let e=jt(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 ko=!1;function Mo(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 a=e.selectedDataset,i=n.findIndex((t=>t===a));if(i>=0){if(i===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)}{i++;let a=n[i];if(r=t.datasets.getDatasetById(a),e.selectedDataset=a,r&&!r.getQuery().usedAsXDataset)return!0;Mo(t,e)}}}return!1}function To(t,e,n,r){jt(e).select("#svg").remove();for(var a=Object.getOwnPropertyNames(t),i=0;i<a.length;i++)delete t[a[i]];let l=jt(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 u=o.append("g").attr("id","dataArea").attr("width",n.dataAreaSize.width).attr("height",n.dataAreaSize.height);return t.dataArea=u,t}function Co(t,e){let n=t.svg.selectAll("circle");for(let t of n){let e=jt(t).attr("id");e&&e.startsWith("tracker-selected-circle-")&&jt(t).style("stroke","none")}e.selectedDate="",t.monitor.text("")}function Fo(t,e,n,r,a){if(!n||!r)return;let i=r.selectedDataset;if(null===i)return;let l=n.datasets.getDatasetById(i);if(!l)return;let o=l.getName();a.month(),a.daysInMonth(),a.year();let u=io("30","tracker-month-label"),s=2.8*Math.max(u.width,u.height),f=a.format("YYYY"),c=a.format("MMM"),h=io(f,"tracker-month-header-year"),d=io(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("+s/4+","+d.height+")").attr("class","tracker-month-header-month").style("cursor","default").on("click",(function(t){Co(e,r)}));y&&m.style("fill",y),g+=d.height;let v=null;r.headerYearColor?v=r.headerYearColor:r.color&&(v=r.color);let w=p.append("text").text(f).attr("id","titleYear").attr("transform","translate("+s/4+","+(g+h.height)+")").attr("class","tracker-month-header-year").style("cursor","default").attr("font-weight","bold").on("click",(function(t){Co(e,r)}));v&&w.style("fill",v),g+=h.height;let x=io(o,"tracker-month-title-rotator");if("circle"===r.mode||"annotation"===r.mode&&!r.showAnnotationOfAllTargets){let i=p.append("text").text(o).attr("transform","translate("+3.5*s+","+x.height+")").attr("class","tracker-month-title-rotator").style("cursor","pointer").on("click",(function(i){Mo(n,r)&&(Co(e,r),So(t,e,n,r,a))}));e.rotator=i}let A=io("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*s+","+(x.height+A.height)+")").style("cursor","pointer").style("fill",r.selectedRingColor);e.monitor=b;let D=io("<","tracker-month-title-arrow");p.append("text").text("<").attr("id","arrowLeft").attr("transform","translate("+5.5*s+","+(g/2+D.height/2)+")").attr("class","tracker-month-title-arrow").on("click",(function(i){Co(e,r),r.selectedDate="";let l=a.clone().add(-1,"month");So(t,e,n,r,l)})).style("cursor","pointer"),p.append("text").text(">").attr("id","arrowLeft").attr("transform","translate("+6.5*s+","+(g/2+D.height/2)+")").attr("class","tracker-month-title-arrow").on("click",(function(i){Co(e,r);let l=a.clone().add(1,"month");So(t,e,n,r,l)})).style("cursor","pointer"),p.append("text").text("◦").attr("id","arrowToday").attr("transform","translate("+6*s+","+(g/2+D.height/2)+")").attr("class","tracker-month-title-arrow").on("click",(function(a){Co(e,r);let i=to(n.dateFormat);So(t,e,n,r,i)})).style("cursor","pointer"),g+=8;let k=["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];"mon"===r.startWeekOn.toLowerCase()&&k.push(k.shift());let M=io(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)*s+","+(g+M.height)+")"})).attr("class","tracker-month-weekday").attr("text-anchor","middle").style("cursor","default").on("click",(function(t){Co(e,r)})),g+=M.height+8;let T=null;r.dividingLineColor?T=r.dividingLineColor:r.color&&(T=r.color);let C=e.graphArea.append("rect").attr("x",0).attr("y",g).attr("width",6.5*s+M.width).attr("height",1).attr("class","tracker-month-dividing-line");T&&C.style("fill",T),g+=1,p.attr("height",g),e.header=p,oo(e.dataArea,0,g)}function _o(t,e,n,r,a){if(!n||!r)return;let i=r.mode;if("circle"!==i&&"annotation"!==i)return"Unknown month view mode";let l=r.selectedDataset;if(null===l)return;let o=n.datasets.getDatasetById(l);if(!o)return;let u=r.dataset.findIndex((t=>t===l));l<0&&(u=0);let s=r.threshold[u];a.month(),a.daysInMonth();let f=io("30","tracker-month-label"),d=2.8*Math.max(f.width,f.height),g=d/2.8*1.8/2,p=(d-2*g)/2,y=h(o.getValues());null!==r.yMin[u]&&(y=r.yMin[u]);let m=c(o.getValues());null!==r.yMax[u]&&(m=r.yMax[u]);let v=!0;(null===m||null===y||m<=y)&&(v=!1);const w=a.clone().startOf("month");let x=w.clone().subtract(w.day(),"days");"mon"===r.startWeekOn.toLowerCase()&&(x=x.add(1,"days"));const A=a.clone().endOf("month");let b=A.clone().add(7-A.day()-1,"days");"mon"===r.startWeekOn.toLowerCase()&&(b=b.add(1,"days"));const D=o.getStartDate(),k=o.getEndDate();let M=r.showAnnotation,T=r.annotation,C=T[u],F=r.showAnnotationOfAllTargets,_=[],S=0,E=0,B=0;for(let t=x.clone();t<=b;t.add(1,"days")){t=ql(Jl(t,n.dateFormat),n.dateFormat),"2021-09-13"===t.format("YYYY-MM-DD")&&(ko=!1),"mon"===r.startWeekOn.toLowerCase()?(S=t.day()-1,S<0&&(S=6),E=Math.floor(B/7)):(S=t.day(),E=Math.floor(B/7));let e=!0;(t.diff(w)<0||t.diff(A)>0)&&(e=!1);let a=!0;D&&k&&t.diff(D)>=0&&t.diff(k)<=0&&(a=!1);const i=o.getValue(t);ko&&(console.log(o),console.log(Jl(t,n.dateFormat)),console.log(i));let l=!1;r.circleColorByValue?(v||null!==i&&i>s)&&(l=!0):null!==i&&i>s&&(l=!0);let u=null;r.circleColorByValue&&v&&null!==i&&(u=(i-y)/(m-y)),ko&&(console.log(y),console.log(m),console.log(u));let f=o.getValue(t,1),c=o.getValue(t,-1),h=!1;null!==i&&i>s&&null!==c&&c>s&&(h=!0);let d=!1;null!==i&&i>s&&null!==f&&f>s&&(d=!0),ko&&(console.log(`preValue: ${c}, curValue: ${i}, nextValue: ${f}`),console.log(r.threshold),console.log(`streakIn: ${h}, streakOut: ${d}`));let g="";if(M)if(F)for(let e of r.dataset){let a=r.dataset.findIndex((t=>t===e));if(a>=0){let i=n.datasets.getDatasetById(e).getValue(t),l=r.threshold[a];null!==i&&i>l&&(g+=T[a])}}else i>s&&(g=C);_.push({date:Jl(t,n.dateFormat),value:i,scaledValue:u,dayInMonth:t.date(),isInThisMonth:e,isOutOfDataRange:a,row:E,col:S,showCircle:l,streakIn:h,streakOut:d,annotation:g}),B++,ko&&(ko=!1)}let N=(S+1)*d,L=Kr().domain([-.5,6.5]).range([0,N]);if("circle"===i&&r.showCircle&&r.showStreak){let t="#69b3a2";r.circleColor?t=r.circleColor:r.color&&(t=r.color),e.dataArea.selectAll("streakIn").data(_.filter((function(t){return t.streakIn}))).enter().append("rect").attr("x",(function(t){return L(t.col)-g-p})).attr("y",(function(t){return L(t.row)-1.5})).attr("width",p).attr("height",3).style("fill",(function(e){return e.showCircle?r.circleColorByValue?null!==e.scaledValue?kr("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(_.filter((function(t){return t.streakOut}))).enter().append("rect").attr("x",(function(t){return L(t.col)+g})).attr("y",(function(t){return L(t.row)-1.5})).attr("width",p).attr("height",3).style("fill",(function(e){return e.showCircle?r.circleColorByValue?null!==e.scaledValue?kr("white",t)(.8*e.scaledValue+.2):"none":t:"none"})).style("opacity",(function(t){return t.isOutOfDataRange||r.dimNotInMonth&&!t.isInThisMonth?.2:1}))}let V="#69b3a2";r.circleColor?V=r.circleColor:r.color&&(V=r.color),"circle"===i&&r.showCircle&&e.dataArea.selectAll("dot").data(_).enter().append("circle").attr("r",g).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 V;if(null!==t.scaledValue){return kr("white",V)(.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 I=Jl(window.moment(),n.dateFormat);if("circle"===i&&r.showTodayRing){let t=e.dataArea.selectAll("todayRing").data(_.filter((function(t){return t.date===I}))).enter().append("circle").attr("r",.9*g).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"===i&&r.showSelectedRing&&e.dataArea.selectAll("selectedRing").data(_).enter().append("circle").attr("r",g).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(_).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 Ki[o.valueType]})).attr("class","tracker-month-label").on("click",(function(t){Co(e,r);let n=jt(this).attr("date");if(r.selectedDate=n,r.showSelectedRing&&e.dataArea.select("#tracker-selected-circle-"+n).style("stroke",r.selectedRingColor),r.showSelectedValue){let t=jt(this).attr("value"),n="";if("Time"===jt(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"===i&&M&&e.dataArea.selectAll("dayAnnotation").data(_).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+=g),"translate("+e+","+n+")"})).attr("class","tracker-month-annotation");let Y=parseFloat(e.svg.attr("width")),P=parseFloat(e.svg.attr("height")),z=parseFloat(e.graphArea.attr("width")),O=parseFloat(e.graphArea.attr("height")),U=7*d+parseFloat(e.header.attr("height")),R=7*d;U>P&&lo(e.svg,0,U-P),R>Y&&lo(e.svg,R-Y,0),U>O&&lo(e.graphArea,0,U-O),R>z&&lo(e.svg,R-z,0)}function So(t,e,n,r,a){n&&Eo&&(Fo(t,e=To(e,t,n),n,r,a),_o(0,e,n,r,a))}function Eo(t,e,n){if(!e||!Eo)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(Mo(e,n),null===n.selectedDataset)return"No available dataset found";let a={};a=To(a,t,e);let i=null;if(n.initMonth){if(i=Zl(n.initMonth,e.dateFormat),!i){let t=window.moment(n.initMonth,"YYYY-MM",!0);if(!t.isValid())return"Invalid initMonth";i=t}}else i=e.datasets.getDates().last();i&&(Fo(t,a,e,n,i),_o(0,a,e,n,i),function(t,e,n){let r=jt(t),a=e.svg,i=parseFloat(a.attr("width")),l=parseFloat(a.attr("height"));a.attr("width",null).attr("height",null).attr("viewBox",`0 0 ${i} ${l}`).attr("preserveAspectRatio","xMidYMid meet"),n.fitPanelWidth?r.style("width","100%"):(r.style("width",(i*n.fixedScale).toString()+"px"),r.style("height",(l*n.fixedScale).toString()+"px"))}(t,a,e))}function Bo(t,e,n){if(e&&Bo)return"Under construction"}function No(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 a=function(t,e,n){let r={};if(!e||!n)return;let a=jt(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=a;let i=a.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=i;let l=i.append("g").attr("id","dataArea").attr("width",e.dataAreaSize.width).attr("height",e.dataAreaSize.height);return r.dataArea=l,r}(t,e,n),i=function(t,e,n,r){if(!e||!n)return;let a=n.range,i=a[a.length-1],l=[0,i],o=n.valueUnit,u=function(t){return o&&o.endsWith("%")?Zr(0,i,7)(t)+" %":Zr(0,i,7)(t)},s=io(u(i),"tracker-tick-label");if("horizontal"===n.orientation){let n=Kr();n.domain(l).range([0,e.dataAreaSize.width]),t.scale=n;let r=T(n);r.tickFormat(u);let a=t.dataArea.append("g").attr("id","axis").attr("transform","translate(0,"+e.dataAreaSize.height+")").call(r).attr("class","tracker-axis");t.axis=a,a.selectAll("path").style("stroke","none"),a.selectAll("line"),a.selectAll("text").attr("class","tracker-tick-label"),a.attr("width",e.dataAreaSize.width+s.width),a.attr("height",6+s.height),lo(t.svg,+s.width,6+s.height),lo(t.graphArea,+s.width,6+s.height)}else if("vertical"===n.orientation){let n=Kr();n.domain(l).range([e.dataAreaSize.height,0]),t.scale=n;let r=C(n);r.tickFormat(u);let a=t.dataArea.append("g").attr("id","axis").attr("x",0).attr("y",0).call(r).attr("class","tracker-axis");t.axis=a,a.selectAll("path").style("stroke","none"),a.selectAll("line"),a.selectAll("text").attr("class","tracker-tick-label"),a.attr("width",6+s.width),a.attr("height",e.dataAreaSize.width),lo(t.svg,6+s.width,0),lo(t.graphArea,6+s.width,0),oo(t.dataArea,6+s.width,0)}}(a,e,n);if("string"==typeof i)return i;!function(t,e,n){if(!e||!n)return;if(n.title){let r=io(n.title,"tracker-title-small");if("horizontal"===n.orientation){let a=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=a,lo(t.svg,r.width+6,0),lo(t.graphArea,r.width+6,0),oo(t.dataArea,r.width+6,0)}else if("vertical"===n.orientation){let a=e.dataAreaSize.width/2;r.width>e.dataAreaSize.width&&(lo(t.svg,r.width-e.dataAreaSize.width,0),lo(t.graphArea,r.width-e.dataAreaSize.width,0),oo(t.dataArea,r.width/2-e.dataAreaSize.width/2,0),a=r.width/2);let i=parseFloat(t.axis.attr("width")),l=t.graphArea.append("text").text(n.title).attr("id","title").attr("x",a+i).attr("y",r.height/2).attr("height",r.height).attr("class","tracker-title-small");t.title=l,lo(t.svg,0,r.height+6),lo(t.graphArea,0,r.height+6),oo(t.dataArea,0,r.height+6)}}if(n.valueUnit){let r=io(n.valueUnit,"tracker-tick-label");if("horizontal"===n.orientation){let a=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=a}else if("vertical"===n.orientation){let a=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=a,lo(t.svg,0,r.height+6),lo(t.graphArea,0,r.height+6),oo(t.dataArea,0,r.height+6)}}}(a,e,n),function(t,e,n,r){if(!e||!n)return;let a=t.scale,i=n.range,l=n.rangeColor,o=[],u=0;for(let t=0;t<i.length;t++)o.push({start:u,end:i[t],color:l[t]}),u=i[t];"horizontal"===n.orientation?t.dataArea.selectAll("backPanel").data(o).enter().append("rect").attr("x",(function(t,e){return Math.floor(a(t.start))})).attr("y",(function(t){return 0})).attr("width",(function(t,e){return Math.ceil(a(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(a(t.end))})).attr("width",e.dataAreaSize.width).attr("height",(function(t){return e.dataAreaSize.height-Math.floor(a(t.end-t.start))})).style("fill",(function(t){return t.color}))}(a,e,n);let l=function(t,e,n,r){let a="";if(!e||!n)return;let i=xo(n.value,e);if("string"==typeof i)return i;let l=i;if(Number.isNaN(l))return a="Invalid input value: "+i,a;let o=n.valueColor,u=t.scale;if("horizontal"===n.orientation){let n=e.dataAreaSize.height/3;t.dataArea.append("rect").attr("x",u(0)).attr("y",n).attr("width",Math.floor(u(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(u(l))).attr("width",n).attr("height",e.dataAreaSize.height-Math.floor(u(l))).style("fill",o)}}(a,e,n);if("string"==typeof l)return l;!function(t,e,n,r){if(!e||!n)return;if(!n.showMarker)return;let a=n.markerValue,i=n.markerColor,l=t.scale;if("horizontal"===n.orientation){let n=2*e.dataAreaSize.height/3;t.dataArea.append("rect").attr("x",l(a)-1.5).attr("y",n/4).attr("width",3).attr("height",n).style("fill",i)}else if("vertical"===n.orientation){let n=2*e.dataAreaSize.width/3;t.dataArea.append("rect").attr("x",n/4).attr("y",l(a)-1.5).attr("width",n).attr("height",3).style("fill",i)}}(a,e,n),function(t,e,n){let r=jt(t),a=e.svg,i=parseFloat(a.attr("width")),l=parseFloat(a.attr("height"));a.attr("width",null).attr("height",null).attr("viewBox",`0 0 ${i} ${l}`).attr("preserveAspectRatio","xMidYMid meet"),n.fitPanelWidth?r.style("width","100%"):(r.style("width",(i*n.fixedScale).toString()+"px"),r.style("height",(l*n.fixedScale).toString()+"px"))}(t,a,e)}function Lo(t,e,n){if(!e||!n)return;let r=e.datasets,a=function(t,e){let n,r;if(void 0===e)for(const e of t)null!=e&&(void 0===n?e>=e&&(n=r=e):(n>e&&(n=e),r<e&&(r=e)));else{let a=-1;for(let i of t)null!=(i=e(i,++a,t))&&(void 0===n?i>=i&&(n=r=i):(n>i&&(n=i),r<i&&(r=i)))}return[n,r]}(r.getDates()),i=function(){return Mr.apply(Xi(xa,Aa,da,ha,sa,oa,la,ia,aa,Ta).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}().domain(a).range([0,e.dataAreaSize.width]);t.xScale=i;let l=Ql(n.xAxisTickInterval),[o,u]=function(t,e){let n=[],r=null;if(e){let r=t[0],a=t[t.length-1];n=oa.range(r.toDate(),a.toDate(),e.asDays())}else{let e=t.length;r=e<=15?oa:e<=60?oa.every(4):e<=105?sa:e<=450?ha:e<=900?ha.every(2):da}return[n,r]}(r.getDates(),l),s=function(t,e){if(e){function t(t){return Jl(window.moment(t),e)}return t}{let e=null,n=t.length;return e=Ta(n<=15||n<=60||n<=105?"%y-%m-%d":n<=450||n<=900?"%y %b":"%Y"),e}}(r.getDates(),n.xAxisTickLabelFormat),f=T(i);o&&0!==o.length?f.tickValues(o):u&&f.ticks(u),s&&f.tickFormat(s);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=io("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),lo(t.svg,0,6+g),lo(t.graphArea,0,6+g)}function Vo(t,e,n,r,a){if(!e||!n)return;let i=e.datasets;if(0===a.length)return;if("left"!==r&&"right"!==r)return;let l=null,o=null,u=null,s=!1;for(let t of a){let e=i.getDatasetById(t);if(!e.getQuery().usedAsXDataset)if((null===l||e.getYMin()<l)&&(l=e.getYMin()),(null===o||e.getYMax()>o)&&(o=e.getYMax()),s=e.valueType===Ki.Time,null===u)u=s;else if(s!==u)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,m=h-f,v=Kr();g=c?f:f-.2*m,p=d?h:h+.2*m,n.GetGraphType()===Ji.Bar&&(p<0&&(p=0),g>0&&(g=0));let w=[g,p];("left"===r&&n.reverseYAxis[0]||"right"===r&&n.reverseYAxis[1])&&(w=[p,g]),v.domain(w).range([e.dataAreaSize.height,0]),"left"===r?t.leftYScale=v:"right"===r&&(t.rightYScale=v);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 b="";"left"===r?b=n.yAxisLabel[0]:"right"===r&&(b=n.yAxisLabel[1]);let D="",k=null,T=null;"left"===r?(D=n.yAxisUnit[0],k=n.yAxisTickInterval[0],T=n.yAxisTickLabelFormat[0]):"right"===r&&(D=n.yAxisUnit[1],k=n.yAxisTickInterval[1],T=n.yAxisTickLabelFormat[1]);let F,_=null;if(s?_=Ql(k):(_=parseFloat(k),Number.isNumber(_)&&!Number.isNaN(_)||(_=null)),"left"===r?F=C(v):"right"===r&&(F=M(2,v)),F){let t=function(t,e,n,r=!1){if(r){if(n){function t(t){return window.moment("00:00","HH:mm",!0).add(t,"seconds").format(n)}return t}{function n(n){const r=Math.abs(e-t);let a=window.moment("00:00","HH:mm",!0).add(n,"seconds").format("HH:mm");if(r>43200){let r=(n-t)/3600%2;(n<t||n>e||r<1)&&(a="")}return a}return n}}if(n){function t(t){return fo.sprintf("%"+n,t)}return t}return Zr(t,e,10)}(g,p,T,s);t&&F.tickFormat(t);let e=function(t,e,n,r=!1){const a=Math.abs(e-t);let i=[];r?i=n&&window.moment.isDuration(n)?y(t,e,Math.abs(n.asSeconds())):a>18e3?y(t=3600*Math.floor(t/3600),e=3600*Math.ceil(e/3600),3600):y(t=1800*Math.floor(t/1800),e=1800*Math.ceil(e/1800),1800):n&&"number"==typeof n&&(i=y(t,e,n));return 0===i.length?null:i}(g,p,_,s);e&&F.tickValues(e)}let S=t.dataArea.append("g").attr("id","yAxis").call(F).attr("class","tracker-axis");"right"==r&&S.attr("transform","translate("+e.dataAreaSize.width+" ,0)"),"left"===r?t.leftYAxis=S:"right"===r&&(t.rightYAxis=S);let E=S.selectAll("path");x&&E.style("stroke",x);let B=S.selectAll("line");x&&B.style("stroke",x);let N=S.selectAll("text").attr("class","tracker-tick-label");x&&N.style("fill",x);let L=0;for(let t of N)if(t.textContent){let e=io(t.textContent,"tracker-axis-label");e.width>L&&(L=e.width)}""!==D&&(b+=" ("+D+")");let V=io(b),I=S.append("text").text(b).attr("transform","rotate(-90)").attr("x",-1*e.dataAreaSize.height/2).attr("class","tracker-axis-label");"left"===r?I.attr("y",-6-L-V.height/2):I.attr("y",6+L+V.height),A&&I.style("fill",A);let Y=V.height+L+6;S.attr("width",Y),lo(t.svg,Y,0),lo(t.graphArea,Y,0),"left"===r&&(oo(t.dataArea,Y,0),t.title&&oo(t.title,Y,0))}function Io(t,e,n,r,a){if(!e||!n)return;let i=null;if("left"===a?i=t.leftYScale:"right"===a&&(i=t.rightYScale),n.showLine[r.getId()]){let e=function(t,e){var n=Qi(!0),r=null,a=bl,i=null;function l(l){var o,u,s,f=(l=xl(l)).length,c=!1;for(null==r&&(i=a(s=or())),o=0;o<=f;++o)!(o<f&&n(u=l[o],o,l))===c&&((c=!c)?i.lineStart():i.lineEnd()),c&&i.point(+t(u,o,l),+e(u,o,l));if(s)return i=null,s+""||null}return t="function"==typeof t?t:void 0===t?Dl:Qi(t),e="function"==typeof e?e:void 0===e?kl:Qi(e),l.x=function(e){return arguments.length?(t="function"==typeof e?e:Qi(+e),l):t},l.y=function(t){return arguments.length?(e="function"==typeof t?t:Qi(+t),l):e},l.defined=function(t){return arguments.length?(n="function"==typeof t?t:Qi(!!t),l):n},l.curve=function(t){return arguments.length?(a=t,null!=r&&(i=a(r)),l):a},l.context=function(t){return arguments.length?(null==t?r=i=null:i=a(r=t),l):r},l}().defined((function(t){return null!==t.value})).x((function(e){return t.xScale(e.date)})).y((function(t){return i(t.value)})),a=t.dataArea.append("path").attr("class","tracker-line").style("stroke-width",n.lineWidth[r.getId()]);n.fillGap[r.getId()]?a.datum(Array.from(r).filter((function(t){return null!==t.value}))).attr("d",e):a.datum(r).attr("d",e),n.lineColor[r.getId()]&&a.style("stroke",n.lineColor[r.getId()])}}function Yo(t,e,n,r,a){if(!e||!n)return;let i=null;if("left"===a?i=t.leftYScale:"right"===a&&(i=t.rightYScale),n.showPoint[r.getId()]){let a=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 i(t.value)})).attr("date",(function(t){return Ta("%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",Ki[r.valueType]).attr("class","tracker-dot");n.pointColor[r.getId()]&&(a.style("fill",n.pointColor[r.getId()]),n.pointBorderColor[r.getId()]&&n.pointBorderWidth[r.getId()]>0&&(a.style("stroke",n.pointBorderColor[r.getId()]),a.style("stroke-width",n.pointBorderWidth[r.getId()]))),n.allowInspectData&&function(t,e,n){let r=e.dataArea.append("svg").style("opacity",0),a=r.append("rect").attr("x",0).attr("y",0),i=r.append("text"),l=i.append("tspan").attr("class","tracker-tooltip-label"),o=i.append("tspan").attr("class","tracker-tooltip-label"),u=3,s=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 a=e.getBoundingClientRect();return[t.clientX-a.left-e.clientLeft,t.clientY-a.top-e.clientTop]}}return[t.pageX,t.pageY]}(t);let c=0,h=0,d="date: "+jt(this).attr("date"),g=io(d,"tracker-tooltip-label");l.text(d),g.width>c&&(c=g.width),h+=g.height,l.attr("x",u).attr("y",h);let p="value: ",y=jt(this).attr("valueType"),m=jt(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=io(p,"tracker-tooltip-label");v.width>c&&(c=v.width),h+=s+v.height,o.attr("x",u).attr("y",h),c+=2*u,h+=2*s,i.attr("width",c).attr("height",h),a.attr("width",c).attr("height",h).attr("class","tracker-tooltip");let w=e,x=f,A=12,b=12;w=e+A+c>n.dataAreaSize.width?e-c-A:e+A,x=f-b-h<0?f+b:f-b-h,r.attr("x",w).attr("y",x),r.transition().duration(200).style("opacity",1)})).on("mouseleave",(function(){r.transition().duration(500).style("opacity",0)}))}(a,t,e)}}function Po(t,e,n,r,a,i,l){if(!e||!n)return;let o=e.dataAreaSize.width/r.getLength(),u=o;o-1>0&&(u=o-1),u/=l;let s=null;"left"===a?s=t.leftYScale:"right"===a&&(s=t.rightYScale);let f=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=i+1-l/2;if(n<1)return t.xScale(e.date)-o/2+i*u+n*u}return t.xScale(e.date)-o/2+i*u})).attr("y",(function(t){return s(Math.max(t.value,0))})).attr("width",(function(t,e){if(0===e){let t=i+1-l/2;return t<0?0:t<1?u*t:u}if(e===r.getLength()-1){let t=1-(i+1-l/2);return t<0?0:t<1?u*t:u}return u})).attr("height",(function(t){if(null!==t.value)return Math.abs(s(t.value)-s(0))})).attr("class","tracker-bar");n.barColor[r.getId()]&&f.style("fill",n.barColor[r.getId()])}function zo(t,e,n){let r=t.svg;t.graphArea;let a=t.dataArea,i=t.title,l=t.xAxis,o=t.leftYAxis,u=t.rightYAxis,s=0;i&&(s=parseFloat(i.attr("height")));let f=parseFloat(l.attr("height")),c=0;o&&(c=parseFloat(o.attr("width")));let h=0;u&&(h=parseFloat(u.attr("width")));let d=e.datasets,g=d.getXDatasetIds(),p=d.getNames(),y=p.map((function(t){return io(t,"tracker-legend-label")})),v=0,w=0;for(let t=0;t<p.length;t++)g.includes(t)||y[t].width>w&&(w=y[t].width,v=t);let x=w/p[v].length,A=y[v].height,b=p.length-g.length,D=2*x,k=A,M=2*x,T=0,C=0;"vertical"===n.legendOrientation?(T=3*D+M+w,C=(b+1)*k):"horizontal"===n.legendOrientation&&(T=(2*D+M)*b+D+m(y,(function(t,e){return g.includes(e)?0:t.width})),C=k+A);let F=0,_=0;if("top"===n.legendPosition)F=c+e.dataAreaSize.width/2-T/2,_=s,lo(r,0,C+k),oo(a,0,C+k);else if("bottom"===n.legendPosition)F=c+e.dataAreaSize.width/2-T/2,_=s+e.dataAreaSize.height+f+k,lo(r,0,C+k);else if("left"===n.legendPosition)F=0,_=s+e.dataAreaSize.height/2-C/2,lo(r,T+D,0),oo(a,T+D,0);else{if("right"!==n.legendPosition)return;F=e.dataAreaSize.width+c+h+D,_=s+e.dataAreaSize.height/2-C/2,lo(r,T+D,0)}let S=t.graphArea.append("g").attr("id","legend").attr("transform","translate("+F+","+_+")"),E=S.append("rect").attr("class","tracker-legend").attr("width",T).attr("height",C);n.legendBgColor&&E.style("fill",n.legendBgColor),n.legendBorderColor&&E.style("stroke",n.legendBorderColor);let B=D,N=A,L=B+D+M,V=N;if("vertical"===n.legendOrientation){n.GetGraphType()===Ji.Line?(S.selectAll("markers").data(p).enter().append("line").attr("x1",B).attr("x2",B+M).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]})),S.selectAll("markers").data(p).enter().append("circle").attr("cx",B+M/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()===Ji.Bar&&S.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",M).attr("height",A).style("fill",(function(t,e){if(!g.includes(e))return n.barColor[e]}));let t=S.selectAll("labels").data(p).enter().append("text").attr("x",L).attr("y",(function(t,e){let n=g.filter((t=>t<e)).length;return V+(e-=n)*k})).text((function(t,e){return g.includes(e)?"":t})).style("alignment-baseline","middle").attr("class","tracker-legend-label");n.GetGraphType()===Ji.Line?t.style("fill",(function(t,e){if(!g.includes(e))return n.lineColor[e]})):n.GetGraphType()===Ji.Bar&&t.style("fill",(function(t,e){if(!g.includes(e))return n.barColor[e]}))}else if("horizontal"===n.legendOrientation){n.GetGraphType()===Ji.Line?(S.selectAll("markers").data(p).enter().append("line").attr("x1",(function(t,e){let n=D;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=M+D+r.width+D}return n})).attr("x2",(function(t,e){let n=D+M;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=D+r.width+D+M}return n})).attr("y1",N).attr("y2",N).style("stroke",(function(t,e){if(!g.includes(e))return n.lineColor[e]})),S.selectAll("markers").data(p).enter().append("circle").attr("cx",(function(t,e){let n=D+M/2;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=M/2+D+r.width+D+M/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()===Ji.Bar&&S.selectAll("markers").data(p.filter(((t,e)=>!g.includes(e)))).enter().append("rect").attr("x",(function(t,e){let n=D;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=M+D+r.width+D}return n})).attr("y",N-A/2).attr("width",M).attr("height",A).style("fill",(function(t,e){if(!g.includes(e))return n.barColor[e]}));let t=S.selectAll("labels").data(p).enter().append("text").attr("x",(function(t,e){let n=D+M+D;for(let[t,r]of y.entries())if(!g.includes(t)){if(!(t<e))break;n+=r.width+D+M+D}return n})).attr("y",V).text((function(t,e){return g.includes(e)?"":t})).style("alignment-baseline","middle").attr("class","tracker-legend-label");n.GetGraphType()===Ji.Line?t.style("fill",(function(t,e){if(!g.includes(e))return n.lineColor[e]})):n.GetGraphType()===Ji.Bar&&t.style("fill",(function(t,e){if(!g.includes(e))return n.barColor[e]}))}}function Oo(t,e,n){if(!e||!n)return;if(!n.title)return;let r=io(n.title,"tracker-title"),a=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=a,lo(t.svg,0,r.height),lo(t.graphArea,0,r.height),oo(t.dataArea,0,r.height)}function Uo(t,e,n){let r=jt(t),a=e.svg,i=parseFloat(a.attr("width")),l=parseFloat(a.attr("height"));a.attr("width",null).attr("height",null).attr("viewBox",`0 0 ${i} ${l}`).attr("preserveAspectRatio","xMidYMid meet"),n.fitPanelWidth?r.style("width","100%"):(r.style("width",(i*n.fixedScale).toString()+"px"),r.style("height",(l*n.fixedScale).toString()+"px"))}function Ro(t,e){let n={},r=jt(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 a=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=a;let i=a.append("g").attr("id","dataArea").attr("width",e.dataAreaSize.width).attr("height",e.dataAreaSize.height);return n.dataArea=i,n}function Wo(t,e,n){if(!e||!n)return;let r=Ro(t,e);Oo(r,e,n),Lo(r,e,n);let a=[],i=[],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()?a.push(t):"right"===e.toLocaleLowerCase()&&i.push(t)}let o=Vo(r,e,n,"left",a);if("string"==typeof o)return o;if(r.leftYAxis&&r.leftYScale)for(let t of a){let a=e.datasets.getDatasetById(t);a.getQuery().usedAsXDataset||(Io(r,e,n,a,"left"),Yo(r,e,n,a,"left"))}let u=Vo(r,e,n,"right",i);if("string"==typeof u)return u;if(r.rightYAxis&&r.rightYScale)for(let t of i){let a=e.datasets.getDatasetById(t);a.getQuery().usedAsXDataset||(Io(r,e,n,a,"right"),Yo(r,e,n,a,"right"))}n.showLegend&&zo(r,e,n),Uo(t,r,e)}function $o(t,e,n){if(!e||!n)return;let r=Ro(t,e);Oo(r,e,n),Lo(r,e,n);let a=[],i=[],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()?a.push(t):"right"===e.toLocaleLowerCase()&&i.push(t)}let o=Vo(r,e,n,"left",a);if("string"==typeof o)return o;let u=a.length+i.length,s=0;if(r.leftYAxis&&r.leftYScale)for(let t of a){let a=e.datasets.getDatasetById(t);a.getQuery().usedAsXDataset||(Po(r,e,n,a,"left",s,u),s++)}let f=Vo(r,e,n,"right",i);if("string"==typeof f)return f;if(r.rightYAxis&&r.rightYScale)for(let t of i){let a=e.datasets.getDatasetById(t);a.getQuery().usedAsXDataset||(Po(r,e,n,a,"right",s,u),s++)}n.showLegend&&zo(r,e,n),Uo(t,r,e)}function Ho(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 Xo(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 jo(t){return"left"===t||"right"===t||"none"===t}function qo(t){return!0}function Go(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 Qo(t,e,n,r,a){let i=[],l="",o=0;for(;n>i.length;)i.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<i.length;n++)if(n<e.length){let a=e[n],u=null;if(n>0&&(u=e[n-1].trim()),"string"==typeof a){if(a=a.trim(),""!==a){l="Invalid inputs for "+t;break}i[n]=null!==u?u:r}else{if("boolean"!=typeof a){l="Invalid inputs for "+t;break}i[n]=a,o++}}else{let t=e[e.length-1];i[n]=o>0?t:r}}}else if("string"==typeof e){let a=Go(e);if(a.length>1){if(a.length>n)return l="Too many inputs for parameter '"+t+"'",l;for(let e=0;e<i.length;e++)if(e<a.length){let n=a[e].trim(),u=null;if(e>0&&(u=Ho(a[e-1].trim())),""===n)i[e]=null!==u?u:r;else{let r=Ho(n);if(null===r){l="Invalid inputs for "+t;break}i[e]=r,o++}}else{let t=Ho(a[a.length-1].trim());i[e]=o>0&&null!==t?t:r}}else if(""===e);else{let n=Ho(e);if(null!==n){i[0]=n,o++;for(let t=1;t<i.length;t++)i[t]=n}else l="Invalid inputs for "+t}}else if("boolean"==typeof e){i[0]=e,o++;for(let t=1;t<i.length;t++)i[t]=e}else l="Invalid inputs for "+t;return a||0!==o||(l="No valid input for "+t),""!==l?l:i}function Zo(t,e,n,r,a){let i=[],l="",o=0;for(;n>i.length;)i.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<i.length;n++)if(n<e.length){let a=e[n],u=null;if(n>0&&(u=e[n-1].trim()),"string"==typeof a){if(a=a.trim(),""!==a){l="Invalid inputs for "+t;break}i[n]=null!==u?u:r}else{if("number"!=typeof a){l="Invalid inputs for "+t;break}i[n]=a,o++}}else{let t=e[e.length-1];i[n]=o>0?t:r}}}else if("string"==typeof e){let a=Go(e);if(a.length>1){if(a.length>n)return l="Too many inputs for parameter '"+t+"'",l;for(let n=0;n<i.length;n++)if(n<a.length){let e=a[n].trim(),u=null;if(n>0&&(u=ao(a[n-1].trim()).value),""===e)null!==u&&Number.isNumber(u)?i[n]=u:i[n]=r;else{let r=ao(e).value;if(null===r){l="Invalid inputs for "+t;break}i[n]=r,o++}}else{let t=ao(a[e.length-1].trim()).value;i[n]=o>0&&null!==t?t:r}}else if(""===e);else{let n=ao(e).value;if(null!==n){i[0]=n,o++;for(let t=1;t<i.length;t++)i[t]=n}else l="Invalid inputs for "+t}}else if("number"==typeof e)if(Number.isNumber(e)){i[0]=e,o++;for(let t=1;t<i.length;t++)i[t]=e}else l="Invalid inputs for "+t;else l="Invalid inputs for "+t;return a||0!==o||(l="No valid input for "+t),""!==l?l:i}function Jo(t,e){return"string"==typeof t?ro(t):"number"==typeof t?t.toString():e}function Ko(t,e,n,r,a,i){let l=[],o="",u=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 i=e[n],s=null;if(n>0&&(s=e[n-1].trim()),"string"!=typeof i){o="Invalid inputs for "+t;break}if(i=i.trim(),""===i)l[n]=null!==s?s:r;else if(a){if(!a(i)){o="Invalid inputs for "+t;break}l[n]=i,u++}else l[n]=i,u++}else{let t=e[e.length-1].trim();l[n]=u>0?t:r}}}else if("string"==typeof e){let i=Go(e);if(i.length>1){if(i.length>n)return o="Too many inputs for parameter '"+t+"'",o;for(let e=0;e<l.length;e++)if(e<i.length){let n=i[e].trim(),s=null;if(e>0&&(s=i[e-1].trim()),""===n)l[e]=null!==s?s:r;else if(a){if(!a(n)){o="Invalid inputs for "+t;break}l[e]=n,u++}else l[e]=n,u++}else{let t=i[i.length-1].trim();l[e]=u>0?t:r}}else if(""===e);else if(a)if(a(e)){l[0]=e,u++;for(let t=1;t<l.length;t++)l[t]=e}else o="Invalid inputs for "+t;else{l[0]=e,u++;for(let t=1;t<l.length;t++)l[t]=e}}else if("number"==typeof e){let n=e.toString();if(a)if(a(n)){l[0]=n,u++;for(let t=1;t<l.length;t++)l[t]=n}else o="Invalid inputs for "+t;else{l[0]=n,u++;for(let t=1;t<l.length;t++)l[t]=n}}else o="Invalid inputs for "+t;if(i||0!==u||(o="No valid input for "+t),""!==o)return o;for(let t=0;t<l.length;t++)l[t]=ro(l[t]);return l}function tu(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=Go(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 eu(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=Go(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]=ro(n[t]);return n}function nu(t,e){t&&(e.title=Jo(null==t?void 0:t.title,e.title),e.xAxisLabel=Jo(null==t?void 0:t.xAxisLabel,e.xAxisLabel),e.xAxisColor=Jo(null==t?void 0:t.xAxisColor,e.xAxisColor),e.xAxisLabelColor=Jo(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=Jo(null==t?void 0:t.legendBgColor,e.legendBgColor),e.legendBorderColor=Jo(null==t?void 0:t.legendBorderColor,e.legendBorderColor));let n=Ko("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=Ko("yAxisColor",null==t?void 0:t.yAxisColor,2,"",qo,!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 a=Ko("yAxisLabelColor",null==t?void 0:t.yAxisLabelColor,2,"",qo,!0);if("string"==typeof a)return a;if(a.length>2)return"yAxisLabelColor accepts not more than two values for left and right y-axes";e.yAxisLabelColor=a;let i=Ko("yAxisUnit",null==t?void 0:t.yAxisUnit,2,"",null,!0);if("string"==typeof i)return i;if(i.length>2)return"yAxisUnit accepts not more than two values for left and right y-axes";e.yAxisUnit=i,e.xAxisTickInterval=Jo(null==t?void 0:t.xAxisTickInterval,e.xAxisTickInterval);let l=Ko("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=Jo(null==t?void 0:t.xAxisTickLabelFormat,e.xAxisTickLabelFormat);let o=Ko("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 u=Zo("yMin",null==t?void 0:t.yMin,2,null,!0);if("string"==typeof u)return u;if(u.length>2)return"yMin accepts not more than two values for left and right y-axes";e.yMin=u;let s=Zo("yMax",null==t?void 0:t.yMax,2,null,!0);if("string"==typeof s)return s;if(s.length>2)return"yMax accepts not more than two values for left and right y-axes";e.yMax=s;let f=Qo("reverseYAxis",null==t?void 0:t.reverseYAxis,2,!1,!0);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 ru(t){let e=[];if(null!==t){const n=Object.keys(t);for(let t of n)e.push(t.toString())}return e}function au(t,e){return ql(jl(t.basename,e.dateFormatPrefix,e.dateFormatSuffix),e.dateFormat)}function iu(t,e,n){let r=window.moment(""),a=t.frontmatter;if(a&&eo(a,e.getTarget())){let t=eo(a,e.getTarget());"string"==typeof t&&(t=jl(t,n.dateFormatPrefix,n.dateFormatSuffix),r=ql(t,n.dateFormat))}return r}function lu(t,e,n){let r,a=window.moment(""),i=new RegExp(e,"gm");for(;r=i.exec(t);)if(void 0!==r.groups&&void 0!==r.groups.value){let t=r.groups.value.trim();if(t=jl(t,n.dateFormatPrefix,n.dateFormatSuffix),a=ql(t,n.dateFormat),a.isValid())return a}return a}function ou(t,e,n){window.moment("");let r=e.getTarget();return e.getParentTarget()&&(r=e.getParentTarget()),lu(t,"(^|\\s)#"+r+"(\\/[\\w-]+)*(:(?<value>[\\d\\.\\/-]*)[a-zA-Z]*)?([\\.!,\\?;~-]*)?(\\s|$)",n)}function uu(t,e,n){return window.moment(""),lu(t,e.getTarget(),n)}function su(t,e,n){window.moment("");let r=e.getTarget();return e.getParentTarget()&&(r=e.getParentTarget()),r=r.replace("-","[\\s\\-]"),lu(t,"(^| |\\t)\\*{0,2}"+r+"\\*{0,2}(::[ |\\t]*(?<value>[\\d\\.\\/\\-\\w,@; \\t:]*))(\\r\\?\\n|\\r|$)",n)}function fu(e,n,r){let a=window.moment("");if(e&&e instanceof t.TFile){let t=n.getTarget();if("cDate"===t){a=Kl(e.stat.ctime,r.dateFormat)}else if("mDate"===t){a=Kl(e.stat.mtime,r.dateFormat)}else"name"===t&&(a=au(e,r))}return a}function cu(t,e,n){window.moment("");let r=e.getType(),a=e.getTarget();return a=r===Zi.Task?"\\[[\\sx]\\]\\s"+a:r===Zi.TaskDone?"\\[x\\]\\s"+a:r===Zi.TaskNotDone?"\\[\\s\\]\\s"+a:"\\[[\\sx]\\]\\s"+a,lu(t,a,n)}function hu(t,e,n,r){if(t.has(e)){t.get(e).push({query:n,value:r})}else{let a=new Array;a.push({query:n,value:r}),t.set(e,a)}}function du(t,e,n,r,a,i){let l,o=new RegExp(e,"gm"),u=0,s=!1;for(;l=o.exec(t);)if(i.ignoreAttachedValue[n.getId()])u+=i.constValue[n.getId()],s=!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=ao(t[0].trim(),i.textValueMap);null!==e.value&&(e.type===Ki.Time?(u=e.value,s=!0,n.valueType=Ki.Time,n.addNumTargets()):i.ignoreZeroValue[n.getId()]&&0===e.value||(u+=e.value,s=!0,n.addNumTargets()))}else if(t.length>n.getAccessor()&&n.getAccessor()>=0){let e=ao(t[n.getAccessor()].trim(),i.textValueMap);null!==e.value&&(e.type===Ki.Time?(u=e.value,s=!0,n.valueType=Ki.Time,n.addNumTargets()):(u+=e.value,s=!0,n.addNumTargets()))}}else u+=i.constValue[n.getId()],s=!0,n.addNumTargets();if(s){return hu(r,a.get(i.xDataset[n.getId()]),n,u),!0}return!1}function gu(e,n,r,a,i,l){if(e&&e instanceof t.TFile){let t=r.getTarget(),o=l.get(a.xDataset[r.getId()]);if("cDate"===t){let t=e.stat.ctime;return r.valueType=Ki.Date,r.addNumTargets(),hu(i,o,r,t),!0}if("mDate"===t){let t=e.stat.mtime;return r.valueType=Ki.Date,r.addNumTargets(),hu(i,o,r,t),!0}if("size"===t){let t=e.stat.size;return r.addNumTargets(),hu(i,o,r,t),!0}if("numWords"===t){return hu(i,o,r,function(t){t=uo(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(),hu(i,o,r,t),!0}if("numSentences"===t){let t=function(t){return(((t=uo(t))||"").match(/[^.。!?\s][^.。!?]*(?:[.!?](?!['"“”「」『』]?\s|$)[^.。!?]*)*[.。!?]?['"”」』]?(?=\s||$)/gm)||[]).length}(n);return r.addNumTargets(),hu(i,o,r,t),!0}if("name"===t){let t=0,n=!1,l=ao(e.basename,a.textValueMap);null!==l.value&&(l.type===Ki.Time?(t=l.value,n=!0,r.valueType=Ki.Time,r.addNumTargets()):a.ignoreZeroValue[r.getId()]&&0===l.value||(t+=l.value,n=!0,r.addNumTargets()));let u=null;if(n&&(u=t),null!==u)return hu(i,o,r,u),!0}}return!1}const pu={folder:"/",dateFormat:"YYYY-MM-DD"};class yu 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 'date-format' 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 mu extends t.Plugin{onload(){return e(this,void 0,void 0,(function*(){console.log("loading obsidian-tracker plugin"),yield this.loadSettings(),this.addSettingTab(new yu(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(Ji.Line)}),this.addCommand({id:"add-bar-chart-tracker",name:"Add Bar Chart Tracker",callback:()=>this.addCodeBlock(Ji.Bar)}),this.addCommand({id:"add-summary-tracker",name:"Add Summary Tracker",callback:()=>this.addCodeBlock(Ji.Summary)})}))}loadSettings(){return e(this,void 0,void 0,(function*(){this.settings=Object.assign({},pu,yield this.loadData())}))}saveSettings(){return e(this,void 0,void 0,(function*(){yield this.saveData(this.settings)}))}renderErrorMessage(t,e,n){!function(t,e){jt(t).select("#svg").remove(),jt(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 a of e.children)a instanceof t.TFile?"md"===a.extension&&r.push(a):a instanceof t.TFolder&&n&&(r=r.concat(this.getFilesInFolder(a)));return r}getFiles(n,r,a=!0){return e(this,void 0,void 0,(function*(){if(!n)return;let e=r.folder,a=r.specifiedFilesOnly,i=r.file,l=r.fileContainsLinkedFiles,o=r.fileMultiplierAfterLink;if(!a){let r=this.app.vault.getAbstractFileByPath(t.normalizePath(e));if(r&&r instanceof t.TFolder){let t=this.getFilesInFolder(r);for(let e of t)n.push(e)}}for(let e of i){let r=e;r.endsWith(".md")||(r+=".md"),r=t.normalizePath(r);let a=this.app.vault.getAbstractFileByPath(r);a&&a instanceof t.TFile&&n.push(a)}let u=1,s=!0;""===o?s=!1:/^[0-9]+$/.test(o)?(u=parseFloat(o),s=!1):/\?<value>/.test(o)||(s=!1);for(let e of l){e.endsWith(".md")||(e+=".md");let a=this.app.vault.getAbstractFileByPath(t.normalizePath(e));if(a&&a instanceof t.TFile){let i=this.app.metadataCache.getFileCache(a),l=(yield this.app.vault.adapter.read(a.path)).split(/\r\n|[\n\v\f\r\x85\u2028\u2029]/);if(!(null==i?void 0:i.links))continue;for(let a of i.links){if(!a)continue;let i=this.app.metadataCache.getFirstLinkpathDest(a.link,e);if(i&&i instanceof t.TFile){if(s){let t=a.position.end.line;if(t>=0&&t<l.length){let e=l[t].split(a.original);if(2===e.length){let t,n=e[1].trim(),a=new RegExp(o,"gm");for(;t=a.exec(n);)if(void 0!==t.groups&&void 0!==t.groups.value){let e=ao(t.groups.value.trim(),r.textValueMap);if(null!==e.value){u=e.value;break}}}}}for(let t=0;t<u;t++)n.push(i)}}}}}))}postprocessor(n,r,a){return e(this,void 0,void 0,(function*(){const a=document.createElement("div");let i=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 a=ru(r),i="";if(!a.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){i="Empty search target is not allowed.";break}l.push(t)}}else if("string"==typeof r.searchTarget){let t=Go(r.searchTarget);if(t.length>1)for(let e of t){if(e=e.trim(),""===e){i="Empty search target is not allowed.";break}l.push(e)}else""===r.searchTarget?i="Empty search target is not allowed.":l.push(r.searchTarget)}else i="Invalid search target (searchTarget)";for(let t=0;t<l.length;t++)l[t]=ro(l[t]);if(""!==i)return i;let o=l.length;if(!a.includes("searchType"))return"Parameter 'searchType' not found in YAML";let u=[],s=Ko("searchType",r.searchType,o,"",Xo,!1);if("string"==typeof s)return s;for(let t of s)switch(t.toLowerCase()){case"tag":u.push(Zi.Tag);break;case"frontmatter":u.push(Zi.Frontmatter);break;case"wiki":u.push(Zi.Wiki);break;case"wiki.link":u.push(Zi.WikiLink);break;case"wiki.display":u.push(Zi.WikiDisplay);break;case"text":u.push(Zi.Text);break;case"dvfield":u.push(Zi.dvField);break;case"table":u.push(Zi.Table);break;case"filemeta":u.push(Zi.FileMeta);break;case"task":case"task.all":u.push(Zi.Task);break;case"task.done":u.push(Zi.TaskDone);break;case"task.notdone":u.push(Zi.TaskNotDone)}if(u.includes(Zi.Table)&&u.filter((t=>t!==Zi.Table)).length>0)return"searchType 'table' doestn't work with other types for now";let f=[],c=Ko("separator",r.separator,o,"",null,!0);if("string"==typeof c)return c;f=c.map((t=>"comma"===t||"\\,"===t?",":t));let h=Zo("xDataset",r.xDataset,o,-1,!0);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 Fl(g.length,u[t],l[t]);e.setSeparator(f[t]),d.includes(t)&&(e.usedAsXDataset=!0),g.push(e)}let p=new El(g),y=ru(p),m=["searchType","searchTarget","separator"],v=[],w=[],x=[],A=[],b=[],D=[],k=[];for(let t of a)/^line[0-9]*$/.test(t)&&(v.push(t),m.push(t)),/^bar[0-9]*$/.test(t)&&(w.push(t),m.push(t)),/^pie[0-9]*$/.test(t)&&(x.push(t),m.push(t)),/^summary[0-9]*$/.test(t)&&(A.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 M=[];for(let t of a)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 i="Duplicated dataset id for key '"+t+"'",i;M.push(t),m.push(t)}for(let t of a)if(!y.includes(t)&&!m.includes(t))return i="'"+t+"' is not an available key",i;if(0===v.length+w.length+x.length+A.length+k.length+b.length+D.length)return"No output parameter provided, please place line, bar, pie, month, bullet, or summary.";"string"==typeof r.folder?""===r.folder?p.folder=n.settings.folder:p.folder=r.folder:p.folder=n.settings.folder;let T=n.app.vault.getAbstractFileByPath(t.normalizePath(p.folder));if(!(T&&T instanceof t.TFolder))return"Folder '"+p.folder+"' doesn't exist";if("string"==typeof r.file){let t=eu("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=eu("fileContainsLinkedFiles",r.fileContainsLinkedFiles);if("string"==typeof t)return t;p.fileContainsLinkedFiles=t}p.fileMultiplierAfterLink=Jo(null==r?void 0:r.fileMultiplierAfterLink,p.fileMultiplierAfterLink);const C=r.dateFormat;if("string"==typeof r.dateFormat?""===r.dateFormat?p.dateFormat=n.settings.dateFormat:p.dateFormat=C:p.dateFormat=n.settings.dateFormat,p.dateFormatPrefix=Jo(null==r?void 0:r.dateFormatPrefix,p.dateFormatPrefix),p.dateFormatSuffix=Jo(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=jl(r.startDate,p.dateFormatPrefix,p.dateFormatSuffix),e=null,n=!1;if(e=Zl(t,p.dateFormat),e?n=!0:(e=ql(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=jl(r.endDate,p.dateFormatPrefix,p.dateFormatSuffix),e=null,n=!1;if(e=Zl(t,p.dateFormat),e?n=!0:(e=ql(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 F=Ko("datasetName",r.datasetName,o,"untitled",null,!0);if("string"==typeof F)return F;let _=0;for(let t=0;t<F.length;t++)p.xDataset.includes(t)||"untitled"===F[t]&&(F[t]="untitled"+_.toString(),_++);if(new Set(F).size!==F.length)return"Not enough dataset names or duplicated names";p.datasetName=F;let S=Zo("constValue",r.constValue,o,1,!0);if("string"==typeof S)return S;p.constValue=S;let E=Qo("ignoreAttachedValue",r.ignoreAttachedValue,o,!1,!0);if("string"==typeof E)return E;p.ignoreAttachedValue=E;let B=Qo("ignoreZeroValue",r.ignoreZeroValue,o,!1,!0);if("string"==typeof B)return B;p.ignoreZeroValue=B;let N=Qo("accum",r.accum,o,!1,!0);if("string"==typeof N)return N;p.accum=N;let L=Zo("penalty",r.penalty,o,null,!0);if("string"==typeof L)return L;p.penalty=L;let V=Zo("valueShift",r.valueShift,o,0,!0);if("string"==typeof V)return V;p.valueShift=V;let I=Zo("shiftOnlyValueLargerThan",r.shiftOnlyValueLargerThan,o,null,!0);if("string"==typeof I)return I;if(p.shiftOnlyValueLargerThan=I,void 0!==r.textValueMap){let t=ru(r.textValueMap);for(let e of t){let t=e.trim();p.textValueMap[t]=r.textValueMap[t]}}"number"==typeof r.fixedScale&&(p.fixedScale=r.fixedScale),"boolean"==typeof r.fitPanelWidth&&(p.fitPanelWidth=r.fitPanelWidth);let Y=Zo("margin",r.margin,4,10,!0);if("string"==typeof Y)return Y;if(Y.length>4)return"margin accepts not more than four values for top, right, bottom, and left margins.";p.margin=new Rl(Y[0],Y[1],Y[2],Y[3]);for(let t of M){let e=new Bl,n=r[t],a=ru(e),l=ru(n);for(let t of l)if(!a.includes(t))return i="'"+t+"' is not an available key",i;let o=-1,u=t.replace("dataset","");o=""===u?0:parseFloat(u),e.id=o,e.name=Jo(null==n?void 0:n.name,e.name);let s=eu("xData",null==n?void 0:n.xData);if("string"==typeof s)return s;e.xData=s;let f=e.xData.length,c=eu("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 Ll,n=r[t],a=ru(e),l=ru(n);for(let t of l)if(!a.includes(t))return i="'"+t+"' is not an available key",i;let u=nu(n,e);if("string"==typeof u)return u;let s=Ko("lineColor",null==n?void 0:n.lineColor,o,"",qo,!0);if("string"==typeof s)return s;e.lineColor=s;let f=Zo("lineWidth",null==n?void 0:n.lineWidth,o,1.5,!0);if("string"==typeof f)return f;e.lineWidth=f;let c=Qo("showLine",null==n?void 0:n.showLine,o,!0,!0);if("string"==typeof c)return c;e.showLine=c;let h=Qo("showPoint",null==n?void 0:n.showPoint,o,!0,!0);if("string"==typeof h)return h;e.showPoint=h;let d=Ko("pointColor",null==n?void 0:n.pointColor,o,"#69b3a2",qo,!0);if("string"==typeof d)return d;e.pointColor=d;let g=Ko("pointBorderColor",null==n?void 0:n.pointBorderColor,o,"#69b3a2",qo,!0);if("string"==typeof g)return g;e.pointBorderColor=g;let y=Zo("pointBorderWidth",null==n?void 0:n.pointBorderWidth,o,0,!0);if("string"==typeof y)return y;e.pointBorderWidth=y;let m=Zo("pointSize",null==n?void 0:n.pointSize,o,3,!0);if("string"==typeof m)return m;e.pointSize=m;let v=Qo("fillGap",null==n?void 0:n.fillGap,o,!1,!0);if("string"==typeof v)return v;e.fillGap=v;let w=Ko("yAxisLocation",null==n?void 0:n.yAxisLocation,o,"left",jo,!0);if("string"==typeof w)return w;e.yAxisLocation=w,p.line.push(e)}for(let t of w){let e=new Vl,n=r[t],a=ru(e),l=ru(n);for(let t of l)if(!a.includes(t))return i="'"+t+"' is not an available key",i;let u=nu(n,e);if("string"==typeof u)return u;let s=Ko("barColor",null==n?void 0:n.barColor,o,"",qo,!0);if("string"==typeof s)return s;e.barColor=s;let f=Ko("yAxisLocation",null==n?void 0:n.yAxisLocation,o,"left",jo,!0);if("string"==typeof f)return f;e.yAxisLocation=f,p.bar.push(e)}for(let t of x){let e=new Il,n=r[t],a=ru(e),l=ru(n);for(let t of l)if(!a.includes(t))return i="'"+t+"' is not an available key",i;e.title=Jo(null==n?void 0:n.title,e.title);let o=eu("data",null==n?void 0:n.data);if("string"==typeof o)return o;e.data=o;let u=e.data.length,s=Ko("dataColor",null==n?void 0:n.dataColor,u,null,qo,!0);if("string"==typeof s)return s;e.dataColor=s;let f=Ko("dataName",null==n?void 0:n.dataName,u,"",null,!0);if("string"==typeof f)return f;e.dataName=f;let c=Ko("label",null==n?void 0:n.label,u,"",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=Ko("extLabel",null==n?void 0:n.extLabel,u,"",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=Jo(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=Jo(null==n?void 0:n.legendOrientation,d),e.legendBgColor=Jo(null==n?void 0:n.legendBgColor,e.legendBgColor),e.legendBorderColor=Jo(null==n?void 0:n.legendBorderColor,e.legendBorderColor),p.pie.push(e)}for(let t of A){let e=new Yl,n=r[t],a=ru(e),l=ru(n);for(let t of l)if(!a.includes(t))return i="'"+t+"' is not an available key",i;e.template=Jo(null==n?void 0:n.template,e.template),e.style=Jo(null==n?void 0:n.style,e.style),p.summary.push(e)}for(let t of b){let e=new Pl,n=r[t],a=ru(e),l=ru(n);for(let t of l)if(!a.includes(t))return i="'"+t+"' is not an available key",i;e.mode=Jo(null==n?void 0:n.mode,e.mode);let o=tu("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 u=e.dataset.length;e.startWeekOn=Jo(null==n?void 0:n.startWeekOn,e.startWeekOn),"boolean"==typeof(null==n?void 0:n.showCircle)&&(e.showCircle=n.showCircle);let s=tu("threshold",null==n?void 0:n.threshold);if("string"==typeof s)return s;if(e.threshold=s,0===e.threshold.length)for(let t=0;t<u;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=tu("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<u;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=tu("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<u;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=Jo(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=Jo(null==n?void 0:n.circleColor,e.circleColor),"boolean"==typeof(null==n?void 0:n.circleColorByValue)&&(e.circleColorByValue=n.circleColorByValue),e.headerYearColor=Jo(null==n?void 0:n.headerYearColor,e.headerYearColor),e.headerMonthColor=Jo(null==n?void 0:n.headerMonthColor,e.headerMonthColor),e.dividingLineColor=Jo(null==n?void 0:n.dividingLineColor,e.dividingLineColor),e.todayRingColor=Jo(n.todayRingColor,e.todayRingColor),e.selectedRingColor=Jo(null==n?void 0:n.selectedRingColor,e.selectedRingColor),e.initMonth=Jo(null==n?void 0:n.initMonth,e.initMonth),"boolean"==typeof(null==n?void 0:n.showAnnotation)&&(e.showAnnotation=n.showAnnotation);let h=eu("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<u;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 zl,n=r[t],a=ru(e),l=ru(n);for(let t of l)if(!a.includes(t))return i="'"+t+"' is not an available key",i;p.heatmap.push(e)}for(let t of k){let e=new Ol,n=r[t],a=ru(e),l=ru(n);for(let t of l)if(!a.includes(t))return i="'"+t+"' is not an available key",i;e.title=Jo(null==n?void 0:n.title,e.title),e.dataset=Jo(null==n?void 0:n.dataset,e.dataset),e.orientation=Jo(null==n?void 0:n.orientation,e.orientation);let o=tu("range",null==n?void 0:n.range);if("string"==typeof o)return o;let u=o;if(1===u.length){if(u[0]<0)return i="Negative range value is not allowed",i}else{if(!(u.length>1))return i="Empty range is not allowed",i;{let t=u[0];if(t<0)return i="Negative range value is not allowed",i;for(let e=1;e<u.length;e++)if(u[e]<=t)return i="Values in parameter 'range' should be monotonically increasing",i}}e.range=u;let s=u.length,f=Ko("rangeColor",null==n?void 0:n.rangeColor,s,"",qo,!0);if("string"==typeof f)return f;e.rangeColor=f,e.value=Jo(null==n?void 0:n.value,e.value),e.valueUnit=Jo(null==n?void 0:n.valueUnit,e.valueUnit),e.valueColor=Jo(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=Jo(null==n?void 0:n.markerColor,e.markerColor),p.bullet.push(e)}return p}(n.trim(),this);if("string"==typeof i)return this.renderErrorMessage(i,a,r);let l=i,o=[];try{yield this.getFiles(o,l)}catch(t){return this.renderErrorMessage(t.message,a,r)}if(0===o.length)return this.renderErrorMessage("No markdown files found in folder",a,r);let u=new Map,s=new Hl;s.fileTotal=o.length;const f=o.map((t=>e(this,void 0,void 0,(function*(){let n=null;l.queries.some((t=>{let e=t.getType();return t.getTarget(),e===Zi.Frontmatter||e===Zi.Tag||e===Zi.Wiki||e===Zi.WikiLink||e===Zi.WikiDisplay}))&&(n=this.app.metadataCache.getFileCache(t));let r=null;l.queries.some((t=>{let e=t.getType(),n=t.getTarget();return e===Zi.Tag||e===Zi.Text||e===Zi.dvField||e===Zi.Task||e===Zi.TaskDone||e===Zi.TaskNotDone||e===Zi.FileMeta&&("numWords"===n||"numChars"===n||"numSentences"===n)}))&&(r=yield this.app.vault.adapter.read(t.path));let a=new Map,i=!1;for(let e of l.xDataset)if(!a.has(e)){let o=window.moment("");if(-1===e)o=au(t,l);else{let a=l.queries[e];switch(a.getType()){case Zi.Frontmatter:o=iu(n,a,l);break;case Zi.Tag:o=ou(r,a,l);break;case Zi.Text:o=uu(r,a,l);break;case Zi.dvField:o=su(r,a,l);break;case Zi.FileMeta:o=fu(t,a,l);break;case Zi.Task:case Zi.TaskDone:case Zi.TaskNotDone:o=cu(r,a,l)}}o.isValid()?(null!==l.startDate&&o<l.startDate&&(i=!0,s.fileOutOfDateRange++),null!==l.endDate&&o>l.endDate&&(i=!0,s.fileOutOfDateRange++)):(i=!0,s.fileNotInFormat++),i||(s.gotAnyValidXValue||(s.gotAnyValidXValue=!0),a.set(e,Jl(o,l.dateFormat)),s.fileAvailable++,1==s.fileAvailable?(s.minDate=o.clone(),s.maxDate=o.clone()):(o<s.minDate&&(s.minDate=o.clone()),o>s.maxDate&&(s.maxDate=o.clone())))}if(i)return;const o=l.queries.filter((t=>t.getType()!==Zi.Table&&!t.usedAsXDataset)).map((i=>e(this,void 0,void 0,(function*(){if(n&&i.getType()===Zi.Tag){let t=function(t,e,n,r,a){let i=t.frontmatter,l=[];if(i&&i.tags){let t=0,o=!1;if(Array.isArray(i.tags))l=l.concat(i.tags);else if("string"==typeof i.tags){let t=i.tags.split(e.getSeparator(!0));for(let e of t){let t=e.trim();""!==t&&l.push(t)}}for(let i of l){if(i===e.getTarget())t+=n.constValue[e.getId()],o=!0,e.addNumTargets();else{if(!i.startsWith(e.getTarget()+"/"))continue;t+=n.constValue[e.getId()],o=!0,e.addNumTargets()}let l=null;return o&&(l=t),hu(r,a.get(n.xDataset[e.getId()]),e,l),!0}}return!1}(n,i,l,u,a);s.gotAnyValidYValue||(s.gotAnyValidYValue=t)}if(n&&i.getType()===Zi.Frontmatter&&"tags"!==i.getTarget()){let t=function(t,e,n,r,a){let i=t.frontmatter;if(i){let t=eo(i,e.getTarget());if(t){let i=ao(t,n.textValueMap);if(null!==i.value)return i.type===Ki.Time&&(e.valueType=Ki.Time),e.addNumTargets(),hu(r,a.get(n.xDataset[e.getId()]),e,i.value),!0}else if(e.getParentTarget()&&eo(i,e.getParentTarget())){let t=eo(i,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=ao(l[e.getAccessor()].trim(),n.textValueMap);if(null!==t.value)return t.type===Ki.Time&&(e.valueType=Ki.Time),e.addNumTargets(),hu(r,a.get(n.xDataset[e.getId()]),e,t.value),!0}}}return!1}(n,i,l,u,a);s.gotAnyValidYValue||(s.gotAnyValidYValue=t)}if(n&&(i.getType()===Zi.Wiki||i.getType()===Zi.WikiLink||i.getType()===Zi.WikiDisplay)){let t=function(t,e,n,r,a){let i=t.links;if(!i)return!1;let l=e.getTarget(),o=e.getType(),u="",s=l;for(let t of i){if(!t)continue;let e="";o===Zi.Wiki?e=t.displayText?t.displayText:t.link:o===Zi.WikiLink?e=t.link:o===Zi.WikiDisplay?t.displayText&&(e=t.displayText):e=t.displayText?t.displayText:t.link,e=e.trim(),u+=e+"\n"}return du(u,s,e,r,a,n)}(n,i,l,u,a);s.gotAnyValidYValue||(s.gotAnyValidYValue=t)}if(r&&i.getType()===Zi.Tag){let t=function(t,e,n,r,a){let i=e.getTarget();return e.getParentTarget()&&(i=e.getParentTarget()),i.length>1&&i.startsWith("#")&&(i=i.substring(1)),du(t,"(^|\\s)#"+i+"(\\/[\\w-]+)*(:(?<value>[\\d\\.\\/-]*)[a-zA-Z]*)?([\\.!,\\?;~-]*)?(\\s|$)",e,r,a,n)}(r,i,l,u,a);s.gotAnyValidYValue||(s.gotAnyValidYValue=t)}if(r&&i.getType()===Zi.Text){let t=function(t,e,n,r,a){return du(t,e.getTarget(),e,r,a,n)}(r,i,l,u,a);s.gotAnyValidYValue||(s.gotAnyValidYValue=t)}if(i.getType()===Zi.FileMeta){let e=gu(t,r,i,l,u,a);s.gotAnyValidYValue||(s.gotAnyValidYValue=e)}if(r&&i.getType()===Zi.dvField){let t=function(t,e,n,r,a){let i=e.getTarget();return e.getParentTarget()&&(i=e.getParentTarget()),i=i.replace("-","[\\s\\-]"),du(t,"(^| |\\t)\\*{0,2}"+i+"\\*{0,2}(::[ |\\t]*(?<value>[\\d\\.\\/\\-\\w,@; \\t:]*))(\\r\\?\\n|\\r|$)",e,r,a,n)}(r,i,l,u,a);s.gotAnyValidYValue||(s.gotAnyValidYValue=t)}if(r&&(i.getType()===Zi.Task||i.getType()===Zi.TaskDone||i.getType()===Zi.TaskNotDone)){let t=function(t,e,n,r,a){let i=e.getType(),l=e.getTarget();return l=i===Zi.Task?"\\[[\\sx]\\]\\s"+l:i===Zi.TaskDone?"\\[x\\]\\s"+l:i===Zi.TaskNotDone?"\\[\\s\\]\\s"+l:"\\[[\\sx]\\]\\s"+l,du(t,l,e,r,a,n)}(r,i,l,u,a);s.gotAnyValidYValue||(s.gotAnyValidYValue=t)}}))));yield Promise.all(o)}))));if(yield Promise.all(f),yield this.collectDataFromTable(u,l,s),s.errorMessage)return this.renderErrorMessage(s.errorMessage,a,r);let c="";if(s.minDate.isValid()&&s.maxDate.isValid()&&0!==s.fileAvailable&&s.gotAnyValidXValue||(c="No valid date as X value found in notes",s.fileOutOfDateRange>0&&(c+=`\n${s.fileOutOfDateRange} files are out of the date range.`),s.fileNotInFormat&&(c+=`\n${s.fileNotInFormat} files are not in the right format.`)),null===l.startDate&&null===l.endDate?(l.startDate=s.minDate.clone(),l.endDate=s.maxDate.clone()):null!==l.startDate&&null===l.endDate?l.startDate<s.maxDate?l.endDate=s.maxDate.clone():c="Invalid date range":null!==l.endDate&&null===l.startDate?l.endDate>s.minDate?l.startDate=s.minDate.clone():c="Invalid date range":(l.startDate<s.minDate&&l.endDate<s.minDate||l.startDate>s.maxDate&&l.endDate>s.maxDate)&&(c="Invalid date range"),c)return this.renderErrorMessage(c,a,r);if(!s.gotAnyValidYValue)return this.renderErrorMessage("No valid Y value found in notes",a,r);let h=new Sl(l.startDate,l.endDate);for(let t of l.queries){let e=h.createDataset(t,l);e.addNumTargets(t.getNumTargets());for(let n=l.startDate.clone();n<=l.endDate;n.add(1,"days"))if(u.has(Jl(n,l.dateFormat))){let r=u.get(Jl(n,l.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)}}}l.datasets=h;let d=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()}for(let n of e.line){let r=Wo(t,e,n);if("string"==typeof r)return r}for(let n of e.bar){let r=$o(t,e,n);if("string"==typeof r)return r}for(let n of e.pie){let r=bo(t,e,n);if("string"==typeof r)return r}for(let n of e.summary){let r=Do(t,e,n);if("string"==typeof r)return r}for(let n of e.bullet){let r=No(t,e,n);if("string"==typeof r)return r}for(let n of e.month){let r=Eo(t,e,n);if("string"==typeof r)return r}for(let t of e.heatmap){let t=Bo(0,e);if("string"==typeof t)return t}}(a,l);if("string"==typeof d)return this.renderErrorMessage(d,a,r);r.appendChild(a)}))}collectDataFromTable(n,r,a){return e(this,void 0,void 0,(function*(){let e=r.queries.filter((t=>t.getType()===Zi.Table)),i=[],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 a=n.getAccessor(),o=n.usedAsXDataset,u=i.find((t=>t.filePath===e&&t.tableIndex===a));if(u)o?u.xDataset=n:u.yDatasets.push(n);else{let t=new $l(e,a);o?t.xDataset=n:t.yDatasets.push(n),i.push(t)}}if(l)a.errorMessage="File containing tables not found";else for(let e of i){let i=e.xDataset;if(!i)continue;let l=e.yDatasets,o=i.getParentTarget(),u=i.getAccessor(),s="";o+=".md";let f=this.app.vault.getAbstractFileByPath(t.normalizePath(o));if(!(f&&f instanceof t.TFile))continue;{a.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===u){s=t[0];break}r++}}let c=s.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=i.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=ql(e[g].trim(),r.dateFormat);t.isValid()?(p.push(t),a.minDate.isValid()||a.maxDate.isValid()?(t<a.minDate&&(a.minDate=t.clone()),t>a.maxDate&&(a.maxDate=t.clone())):(a.minDate=t.clone(),a.maxDate=t.clone())):p.push(null)}else p.push(null)}if(p.every((t=>null===t)))return void(a.errorMessage="No valid date as X value found in table");a.gotAnyValidXValue||(a.gotAnyValidXValue=!0);for(let t of l){let e=t.getAccessor(1);if(e>=h)continue;let i=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=ao(l[0],r.textValueMap);if(null!==e.value){e.type===Ki.Time&&(t.valueType=Ki.Time);let l=e.value;i<p.length&&p[i]&&(a.gotAnyValidYValue||(a.gotAnyValidYValue=!0),hu(n,Jl(p[i],r.dateFormat),t,l))}}else if(l.length>t.getAccessor(2)&&t.getAccessor(2)>=0){let e=null,o=ao(l[t.getAccessor(2)].trim(),r.textValueMap);null!==o.value&&(o.type===Ki.Time&&(t.valueType=Ki.Time),e=o.value,i<p.length&&p[i]&&(a.gotAnyValidYValue||(a.gotAnyValidYValue=!0),hu(n,Jl(p[i],r.dateFormat),t,e)))}}i++}}}}))}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 Ji.Line:n='``` tracker\nsearchType: tag\nsearchTarget: tagName\nfolder: /\nstartDate:\nendDate:\nline:\n title: "Line Chart"\n xAxisLabel: Date\n yAxisLabel: Value\n```';break;case Ji.Bar:n='``` tracker\nsearchType: tag\nsearchTarget: tagName\nfolder: /\nstartDate:\nendDate:\nbar:\n title: "Bar Chart"\n xAxisLabel: Date\n yAxisLabel: Value\n```';break;case Ji.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,a=e.getLine(r);return n.ch=a.length,e.setSelection(n),e.replaceSelection("\n"+t),!0}return!1}}module.exports=mu;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZXMiOlsibm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYXNjZW5kaW5nLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9iaXNlY3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvYmlzZWN0LmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9udW1iZXIuanMiLCJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3RpY2tzLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9tYXguanMiLCJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL21pbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvcXVpY2tzZWxlY3QuanMiLCJub2RlX21vZHVsZXMvZDMtYXJyYXkvc3JjL3F1YW50aWxlLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy9yYW5nZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvc3VtLmpzIiwibm9kZV9tb2R1bGVzL2QzLWF4aXMvc3JjL2FycmF5LmpzIiwibm9kZV9tb2R1bGVzL2QzLWF4aXMvc3JjL2lkZW50aXR5LmpzIiwibm9kZV9tb2R1bGVzL2QzLWF4aXMvc3JjL2F4aXMuanMiLCJub2RlX21vZHVsZXMvZDMtZGlzcGF0Y2gvc3JjL2Rpc3BhdGNoLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvbmFtZXNwYWNlcy5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL25hbWVzcGFjZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NyZWF0b3IuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rvci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2FycmF5LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0b3JBbGwuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9tYXRjaGVyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdENoaWxkLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdENoaWxkcmVuLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NwYXJzZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9lbnRlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL2NvbnN0YW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdGEuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc29ydC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9hdHRyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvd2luZG93LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3N0eWxlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3Byb3BlcnR5LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2NsYXNzZWQuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vdGV4dC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9odG1sLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3JhaXNlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2xvd2VyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2luc2VydC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9yZW1vdmUuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vY2xvbmUuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vb24uanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZGlzcGF0Y2guanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3QuanMiLCJub2RlX21vZHVsZXMvZDMtY29sb3Ivc3JjL2RlZmluZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1jb2xvci9zcmMvY29sb3IuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vc2VsZWN0LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL3NlbGVjdEFsbC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9maWx0ZXIuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vZXhpdC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9qb2luLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL21lcmdlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL29yZGVyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2NhbGwuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbm9kZXMuanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vbm9kZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NlbGVjdGlvbi9zaXplLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VtcHR5LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2VhY2guanMiLCJub2RlX21vZHVsZXMvZDMtc2VsZWN0aW9uL3NyYy9zZWxlY3Rpb24vYXBwZW5kLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2RhdHVtLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvc2VsZWN0aW9uL2l0ZXJhdG9yLmpzIiwibm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9tYXRoLmpzIiwibm9kZV9tb2R1bGVzL2QzLWNvbG9yL3NyYy9sYWIuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZXIvc3JjL3RpbWVyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWVyL3NyYy90aW1lb3V0LmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vc2NoZWR1bGUuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbnN0YW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb2xvci5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcmdiLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXIuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3N0cmluZy5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL2RlY29tcG9zZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvdHJhbnNmb3JtL3BhcnNlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy90cmFuc2Zvcm0vaW5kZXguanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90d2Vlbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2ludGVycG9sYXRlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vYXR0ci5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2F0dHJUd2Vlbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2RlbGF5LmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vZHVyYXRpb24uanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vb24uanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zZWxlY3Rpb24uanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9zdHlsZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3N0eWxlVHdlZW4uanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi90ZXh0VHdlZW4uanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3NlbGVjdEFsbC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2ZpbHRlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL21lcmdlLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRyYW5zaXRpb24vc3JjL3RyYW5zaXRpb24vdHJhbnNpdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL3RleHQuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9yZW1vdmUuanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvdHJhbnNpdGlvbi9lYXNlVmFyeWluZy5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy90cmFuc2l0aW9uL2VuZC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vdHJhbnNpdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy1lYXNlL3NyYy9jdWJpYy5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9zZWxlY3Rpb24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvZDMtdHJhbnNpdGlvbi9zcmMvc2VsZWN0aW9uL2ludGVycnVwdC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10cmFuc2l0aW9uL3NyYy9pbnRlcnJ1cHQuanMiLCJub2RlX21vZHVsZXMvZDMtcGF0aC9zcmMvcGF0aC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdERlY2ltYWwuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9leHBvbmVudC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFNwZWNpZmllci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdFByZWZpeEF1dG8uanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRSb3VuZGVkLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0VHlwZXMuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9pZGVudGl0eS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2xvY2FsZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2RlZmF1bHRMb2NhbGUuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9mb3JtYXRHcm91cC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1mb3JtYXQvc3JjL2Zvcm1hdE51bWVyYWxzLmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvZm9ybWF0VHJpbS5qcyIsIm5vZGVfbW9kdWxlcy9kMy9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbG9yLmpzIiwibm9kZV9tb2R1bGVzL2QzL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvY29uc3RhbnQuanMiLCJub2RlX21vZHVsZXMvZDMvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9sYWIuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2luaXQuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL29yZGluYWwuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9jb25zdGFudC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2NvbG9yLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNjYWxlL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvcmdiLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNjYWxlL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvbnVtYmVyQXJyYXkuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9hcnJheS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL2RhdGUuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9udW1iZXIuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9vYmplY3QuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9zdHJpbmcuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy92YWx1ZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9ub2RlX21vZHVsZXMvZDMtaW50ZXJwb2xhdGUvc3JjL3JvdW5kLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy9udW1iZXIuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnRpbnVvdXMuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUvc3JjL2NvbnN0YW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNjYWxlL3NyYy90aWNrRm9ybWF0LmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uUHJlZml4LmpzIiwibm9kZV9tb2R1bGVzL2QzLWZvcm1hdC9zcmMvcHJlY2lzaW9uUm91bmQuanMiLCJub2RlX21vZHVsZXMvZDMtZm9ybWF0L3NyYy9wcmVjaXNpb25GaXhlZC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbGluZWFyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL2ludGVydmFsLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL21pbGxpc2Vjb25kLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3NlY29uZC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9kdXJhdGlvbi5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9taW51dGUuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvaG91ci5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9kYXkuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvd2Vlay5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy9tb250aC5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy95ZWFyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y01pbnV0ZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNIb3VyLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y0RheS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lL3NyYy91dGNXZWVrLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y01vbnRoLmpzIiwibm9kZV9tb2R1bGVzL2QzLXRpbWUvc3JjL3V0Y1llYXIuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS9zcmMvdGlja3MuanMiLCJub2RlX21vZHVsZXMvZDMtdGltZS1mb3JtYXQvc3JjL2xvY2FsZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy10aW1lLWZvcm1hdC9zcmMvZGVmYXVsdExvY2FsZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvdGltZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS9zcmMvbmljZS5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zY2FsZS1jaHJvbWF0aWMvbm9kZV9tb2R1bGVzL2QzLWludGVycG9sYXRlL3NyYy9yZ2IuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL25vZGVfbW9kdWxlcy9kMy1pbnRlcnBvbGF0ZS9zcmMvYmFzaXMuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9kaXZlcmdpbmcvU3BlY3RyYWwuanMiLCJub2RlX21vZHVsZXMvZDMtc2NhbGUtY2hyb21hdGljL3NyYy9jb2xvcnMuanMiLCJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2NvbnN0YW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNjYWxlLWNocm9tYXRpYy9zcmMvcmFtcC5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zaGFwZS9zcmMvbWF0aC5qcyIsInNyYy9kYXRhLnRzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9hcmMuanMiLCJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL2FycmF5LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9jdXJ2ZS9saW5lYXIuanMiLCJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BvaW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9kZXNjZW5kaW5nLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9pZGVudGl0eS5qcyIsInNyYy9oZWxwZXIudHMiLCJub2RlX21vZHVsZXMvanNlcC9idWlsZC9qc2VwLmpzIiwibm9kZV9tb2R1bGVzL3NwcmludGYtanMvc3JjL3NwcmludGYuanMiLCJzcmMvZXhwci50cyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvbWVkaWFuLmpzIiwibm9kZV9tb2R1bGVzL2QzLWFycmF5L3NyYy92YXJpYW5jZS5qcyIsInNyYy9waWUudHMiLCJub2RlX21vZHVsZXMvZDMtc2hhcGUvc3JjL3BpZS5qcyIsInNyYy9zdW1tYXJ5LnRzIiwic3JjL21vbnRoLnRzIiwic3JjL2hlYXRtYXAudHMiLCJzcmMvYnVsbGV0LnRzIiwic3JjL3JlbmRlcmluZy50cyIsIm5vZGVfbW9kdWxlcy9kMy1hcnJheS9zcmMvZXh0ZW50LmpzIiwibm9kZV9tb2R1bGVzL2QzLXNoYXBlL3NyYy9saW5lLmpzIiwibm9kZV9tb2R1bGVzL2QzLXNlbGVjdGlvbi9zcmMvcG9pbnRlci5qcyIsIm5vZGVfbW9kdWxlcy9kMy1zZWxlY3Rpb24vc3JjL3NvdXJjZUV2ZW50LmpzIiwic3JjL3BhcnNpbmcudHMiLCJzcmMvY29sbGVjdGluZy50cyIsInNyYy9zZXR0aW5ncy50cyIsInNyYy9tYWluLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfSk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgZnJvbSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufVxyXG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogYSA+PSBiID8gMCA6IE5hTjtcbn1cbiIsImltcG9ydCBhc2NlbmRpbmcgZnJvbSBcIi4vYXNjZW5kaW5nLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGYpIHtcbiAgbGV0IGRlbHRhID0gZjtcbiAgbGV0IGNvbXBhcmUgPSBmO1xuXG4gIGlmIChmLmxlbmd0aCA9PT0gMSkge1xuICAgIGRlbHRhID0gKGQsIHgpID0+IGYoZCkgLSB4O1xuICAgIGNvbXBhcmUgPSBhc2NlbmRpbmdDb21wYXJhdG9yKGYpO1xuICB9XG5cbiAgZnVuY3Rpb24gbGVmdChhLCB4LCBsbywgaGkpIHtcbiAgICBpZiAobG8gPT0gbnVsbCkgbG8gPSAwO1xuICAgIGlmIChoaSA9PSBudWxsKSBoaSA9IGEubGVuZ3RoO1xuICAgIHdoaWxlIChsbyA8IGhpKSB7XG4gICAgICBjb25zdCBtaWQgPSAobG8gKyBoaSkgPj4+IDE7XG4gICAgICBpZiAoY29tcGFyZShhW21pZF0sIHgpIDwgMCkgbG8gPSBtaWQgKyAxO1xuICAgICAgZWxzZSBoaSA9IG1pZDtcbiAgICB9XG4gICAgcmV0dXJuIGxvO1xuICB9XG5cbiAgZnVuY3Rpb24gcmlnaHQoYSwgeCwgbG8sIGhpKSB7XG4gICAgaWYgKGxvID09IG51bGwpIGxvID0gMDtcbiAgICBpZiAoaGkgPT0gbnVsbCkgaGkgPSBhLmxlbmd0aDtcbiAgICB3aGlsZSAobG8gPCBoaSkge1xuICAgICAgY29uc3QgbWlkID0gKGxvICsgaGkpID4+PiAxO1xuICAgICAgaWYgKGNvbXBhcmUoYVttaWRdLCB4KSA+IDApIGhpID0gbWlkO1xuICAgICAgZWxzZSBsbyA9IG1pZCArIDE7XG4gICAgfVxuICAgIHJldHVybiBsbztcbiAgfVxuXG4gIGZ1bmN0aW9uIGNlbnRlcihhLCB4LCBsbywgaGkpIHtcbiAgICBpZiAobG8gPT0gbnVsbCkgbG8gPSAwO1xuICAgIGlmIChoaSA9PSBudWxsKSBoaSA9IGEubGVuZ3RoO1xuICAgIGNvbnN0IGkgPSBsZWZ0KGEsIHgsIGxvLCBoaSAtIDEpO1xuICAgIHJldHVybiBpID4gbG8gJiYgZGVsdGEoYVtpIC0gMV0sIHgpID4gLWRlbHRhKGFbaV0sIHgpID8gaSAtIDEgOiBpO1xuICB9XG5cbiAgcmV0dXJuIHtsZWZ0LCBjZW50ZXIsIHJpZ2h0fTtcbn1cblxuZnVuY3Rpb24gYXNjZW5kaW5nQ29tcGFyYXRvcihmKSB7XG4gIHJldHVybiAoZCwgeCkgPT4gYXNjZW5kaW5nKGYoZCksIHgpO1xufVxuIiwiaW1wb3J0IGFzY2VuZGluZyBmcm9tIFwiLi9hc2NlbmRpbmcuanNcIjtcbmltcG9ydCBiaXNlY3RvciBmcm9tIFwiLi9iaXNlY3Rvci5qc1wiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXIuanNcIjtcblxuY29uc3QgYXNjZW5kaW5nQmlzZWN0ID0gYmlzZWN0b3IoYXNjZW5kaW5nKTtcbmV4cG9ydCBjb25zdCBiaXNlY3RSaWdodCA9IGFzY2VuZGluZ0Jpc2VjdC5yaWdodDtcbmV4cG9ydCBjb25zdCBiaXNlY3RMZWZ0ID0gYXNjZW5kaW5nQmlzZWN0LmxlZnQ7XG5leHBvcnQgY29uc3QgYmlzZWN0Q2VudGVyID0gYmlzZWN0b3IobnVtYmVyKS5jZW50ZXI7XG5leHBvcnQgZGVmYXVsdCBiaXNlY3RSaWdodDtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHggPT09IG51bGwgPyBOYU4gOiAreDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uKiBudW1iZXJzKHZhbHVlcywgdmFsdWVvZikge1xuICBpZiAodmFsdWVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZm9yIChsZXQgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiAodmFsdWUgPSArdmFsdWUpID49IHZhbHVlKSB7XG4gICAgICAgIHlpZWxkIHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgaW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlLCArK2luZGV4LCB2YWx1ZXMpKSAhPSBudWxsICYmICh2YWx1ZSA9ICt2YWx1ZSkgPj0gdmFsdWUpIHtcbiAgICAgICAgeWllbGQgdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCJ2YXIgZTEwID0gTWF0aC5zcXJ0KDUwKSxcbiAgICBlNSA9IE1hdGguc3FydCgxMCksXG4gICAgZTIgPSBNYXRoLnNxcnQoMik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICB2YXIgcmV2ZXJzZSxcbiAgICAgIGkgPSAtMSxcbiAgICAgIG4sXG4gICAgICB0aWNrcyxcbiAgICAgIHN0ZXA7XG5cbiAgc3RvcCA9ICtzdG9wLCBzdGFydCA9ICtzdGFydCwgY291bnQgPSArY291bnQ7XG4gIGlmIChzdGFydCA9PT0gc3RvcCAmJiBjb3VudCA+IDApIHJldHVybiBbc3RhcnRdO1xuICBpZiAocmV2ZXJzZSA9IHN0b3AgPCBzdGFydCkgbiA9IHN0YXJ0LCBzdGFydCA9IHN0b3AsIHN0b3AgPSBuO1xuICBpZiAoKHN0ZXAgPSB0aWNrSW5jcmVtZW50KHN0YXJ0LCBzdG9wLCBjb3VudCkpID09PSAwIHx8ICFpc0Zpbml0ZShzdGVwKSkgcmV0dXJuIFtdO1xuXG4gIGlmIChzdGVwID4gMCkge1xuICAgIGxldCByMCA9IE1hdGgucm91bmQoc3RhcnQgLyBzdGVwKSwgcjEgPSBNYXRoLnJvdW5kKHN0b3AgLyBzdGVwKTtcbiAgICBpZiAocjAgKiBzdGVwIDwgc3RhcnQpICsrcjA7XG4gICAgaWYgKHIxICogc3RlcCA+IHN0b3ApIC0tcjE7XG4gICAgdGlja3MgPSBuZXcgQXJyYXkobiA9IHIxIC0gcjAgKyAxKTtcbiAgICB3aGlsZSAoKytpIDwgbikgdGlja3NbaV0gPSAocjAgKyBpKSAqIHN0ZXA7XG4gIH0gZWxzZSB7XG4gICAgc3RlcCA9IC1zdGVwO1xuICAgIGxldCByMCA9IE1hdGgucm91bmQoc3RhcnQgKiBzdGVwKSwgcjEgPSBNYXRoLnJvdW5kKHN0b3AgKiBzdGVwKTtcbiAgICBpZiAocjAgLyBzdGVwIDwgc3RhcnQpICsrcjA7XG4gICAgaWYgKHIxIC8gc3RlcCA+IHN0b3ApIC0tcjE7XG4gICAgdGlja3MgPSBuZXcgQXJyYXkobiA9IHIxIC0gcjAgKyAxKTtcbiAgICB3aGlsZSAoKytpIDwgbikgdGlja3NbaV0gPSAocjAgKyBpKSAvIHN0ZXA7XG4gIH1cblxuICBpZiAocmV2ZXJzZSkgdGlja3MucmV2ZXJzZSgpO1xuXG4gIHJldHVybiB0aWNrcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpY2tJbmNyZW1lbnQoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHZhciBzdGVwID0gKHN0b3AgLSBzdGFydCkgLyBNYXRoLm1heCgwLCBjb3VudCksXG4gICAgICBwb3dlciA9IE1hdGguZmxvb3IoTWF0aC5sb2coc3RlcCkgLyBNYXRoLkxOMTApLFxuICAgICAgZXJyb3IgPSBzdGVwIC8gTWF0aC5wb3coMTAsIHBvd2VyKTtcbiAgcmV0dXJuIHBvd2VyID49IDBcbiAgICAgID8gKGVycm9yID49IGUxMCA/IDEwIDogZXJyb3IgPj0gZTUgPyA1IDogZXJyb3IgPj0gZTIgPyAyIDogMSkgKiBNYXRoLnBvdygxMCwgcG93ZXIpXG4gICAgICA6IC1NYXRoLnBvdygxMCwgLXBvd2VyKSAvIChlcnJvciA+PSBlMTAgPyAxMCA6IGVycm9yID49IGU1ID8gNSA6IGVycm9yID49IGUyID8gMiA6IDEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGlja1N0ZXAoc3RhcnQsIHN0b3AsIGNvdW50KSB7XG4gIHZhciBzdGVwMCA9IE1hdGguYWJzKHN0b3AgLSBzdGFydCkgLyBNYXRoLm1heCgwLCBjb3VudCksXG4gICAgICBzdGVwMSA9IE1hdGgucG93KDEwLCBNYXRoLmZsb29yKE1hdGgubG9nKHN0ZXAwKSAvIE1hdGguTE4xMCkpLFxuICAgICAgZXJyb3IgPSBzdGVwMCAvIHN0ZXAxO1xuICBpZiAoZXJyb3IgPj0gZTEwKSBzdGVwMSAqPSAxMDtcbiAgZWxzZSBpZiAoZXJyb3IgPj0gZTUpIHN0ZXAxICo9IDU7XG4gIGVsc2UgaWYgKGVycm9yID49IGUyKSBzdGVwMSAqPSAyO1xuICByZXR1cm4gc3RvcCA8IHN0YXJ0ID8gLXN0ZXAxIDogc3RlcDE7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYXgodmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBtYXg7XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGxcbiAgICAgICAgICAmJiAobWF4IDwgdmFsdWUgfHwgKG1heCA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpICE9IG51bGxcbiAgICAgICAgICAmJiAobWF4IDwgdmFsdWUgfHwgKG1heCA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWF4ID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtYXg7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtaW4odmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBtaW47XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGxcbiAgICAgICAgICAmJiAobWluID4gdmFsdWUgfHwgKG1pbiA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpICE9IG51bGxcbiAgICAgICAgICAmJiAobWluID4gdmFsdWUgfHwgKG1pbiA9PT0gdW5kZWZpbmVkICYmIHZhbHVlID49IHZhbHVlKSkpIHtcbiAgICAgICAgbWluID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBtaW47XG59XG4iLCJpbXBvcnQgYXNjZW5kaW5nIGZyb20gXCIuL2FzY2VuZGluZy5qc1wiO1xuXG4vLyBCYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vbW91cm5lci9xdWlja3NlbGVjdFxuLy8gSVNDIGxpY2Vuc2UsIENvcHlyaWdodCAyMDE4IFZsYWRpbWlyIEFnYWZvbmtpbi5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHF1aWNrc2VsZWN0KGFycmF5LCBrLCBsZWZ0ID0gMCwgcmlnaHQgPSBhcnJheS5sZW5ndGggLSAxLCBjb21wYXJlID0gYXNjZW5kaW5nKSB7XG4gIHdoaWxlIChyaWdodCA+IGxlZnQpIHtcbiAgICBpZiAocmlnaHQgLSBsZWZ0ID4gNjAwKSB7XG4gICAgICBjb25zdCBuID0gcmlnaHQgLSBsZWZ0ICsgMTtcbiAgICAgIGNvbnN0IG0gPSBrIC0gbGVmdCArIDE7XG4gICAgICBjb25zdCB6ID0gTWF0aC5sb2cobik7XG4gICAgICBjb25zdCBzID0gMC41ICogTWF0aC5leHAoMiAqIHogLyAzKTtcbiAgICAgIGNvbnN0IHNkID0gMC41ICogTWF0aC5zcXJ0KHogKiBzICogKG4gLSBzKSAvIG4pICogKG0gLSBuIC8gMiA8IDAgPyAtMSA6IDEpO1xuICAgICAgY29uc3QgbmV3TGVmdCA9IE1hdGgubWF4KGxlZnQsIE1hdGguZmxvb3IoayAtIG0gKiBzIC8gbiArIHNkKSk7XG4gICAgICBjb25zdCBuZXdSaWdodCA9IE1hdGgubWluKHJpZ2h0LCBNYXRoLmZsb29yKGsgKyAobiAtIG0pICogcyAvIG4gKyBzZCkpO1xuICAgICAgcXVpY2tzZWxlY3QoYXJyYXksIGssIG5ld0xlZnQsIG5ld1JpZ2h0LCBjb21wYXJlKTtcbiAgICB9XG5cbiAgICBjb25zdCB0ID0gYXJyYXlba107XG4gICAgbGV0IGkgPSBsZWZ0O1xuICAgIGxldCBqID0gcmlnaHQ7XG5cbiAgICBzd2FwKGFycmF5LCBsZWZ0LCBrKTtcbiAgICBpZiAoY29tcGFyZShhcnJheVtyaWdodF0sIHQpID4gMCkgc3dhcChhcnJheSwgbGVmdCwgcmlnaHQpO1xuXG4gICAgd2hpbGUgKGkgPCBqKSB7XG4gICAgICBzd2FwKGFycmF5LCBpLCBqKSwgKytpLCAtLWo7XG4gICAgICB3aGlsZSAoY29tcGFyZShhcnJheVtpXSwgdCkgPCAwKSArK2k7XG4gICAgICB3aGlsZSAoY29tcGFyZShhcnJheVtqXSwgdCkgPiAwKSAtLWo7XG4gICAgfVxuXG4gICAgaWYgKGNvbXBhcmUoYXJyYXlbbGVmdF0sIHQpID09PSAwKSBzd2FwKGFycmF5LCBsZWZ0LCBqKTtcbiAgICBlbHNlICsraiwgc3dhcChhcnJheSwgaiwgcmlnaHQpO1xuXG4gICAgaWYgKGogPD0gaykgbGVmdCA9IGogKyAxO1xuICAgIGlmIChrIDw9IGopIHJpZ2h0ID0gaiAtIDE7XG4gIH1cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5mdW5jdGlvbiBzd2FwKGFycmF5LCBpLCBqKSB7XG4gIGNvbnN0IHQgPSBhcnJheVtpXTtcbiAgYXJyYXlbaV0gPSBhcnJheVtqXTtcbiAgYXJyYXlbal0gPSB0O1xufVxuIiwiaW1wb3J0IG1heCBmcm9tIFwiLi9tYXguanNcIjtcbmltcG9ydCBtaW4gZnJvbSBcIi4vbWluLmpzXCI7XG5pbXBvcnQgcXVpY2tzZWxlY3QgZnJvbSBcIi4vcXVpY2tzZWxlY3QuanNcIjtcbmltcG9ydCBudW1iZXIsIHtudW1iZXJzfSBmcm9tIFwiLi9udW1iZXIuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVhbnRpbGUodmFsdWVzLCBwLCB2YWx1ZW9mKSB7XG4gIHZhbHVlcyA9IEZsb2F0NjRBcnJheS5mcm9tKG51bWJlcnModmFsdWVzLCB2YWx1ZW9mKSk7XG4gIGlmICghKG4gPSB2YWx1ZXMubGVuZ3RoKSkgcmV0dXJuO1xuICBpZiAoKHAgPSArcCkgPD0gMCB8fCBuIDwgMikgcmV0dXJuIG1pbih2YWx1ZXMpO1xuICBpZiAocCA+PSAxKSByZXR1cm4gbWF4KHZhbHVlcyk7XG4gIHZhciBuLFxuICAgICAgaSA9IChuIC0gMSkgKiBwLFxuICAgICAgaTAgPSBNYXRoLmZsb29yKGkpLFxuICAgICAgdmFsdWUwID0gbWF4KHF1aWNrc2VsZWN0KHZhbHVlcywgaTApLnN1YmFycmF5KDAsIGkwICsgMSkpLFxuICAgICAgdmFsdWUxID0gbWluKHZhbHVlcy5zdWJhcnJheShpMCArIDEpKTtcbiAgcmV0dXJuIHZhbHVlMCArICh2YWx1ZTEgLSB2YWx1ZTApICogKGkgLSBpMCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWFudGlsZVNvcnRlZCh2YWx1ZXMsIHAsIHZhbHVlb2YgPSBudW1iZXIpIHtcbiAgaWYgKCEobiA9IHZhbHVlcy5sZW5ndGgpKSByZXR1cm47XG4gIGlmICgocCA9ICtwKSA8PSAwIHx8IG4gPCAyKSByZXR1cm4gK3ZhbHVlb2YodmFsdWVzWzBdLCAwLCB2YWx1ZXMpO1xuICBpZiAocCA+PSAxKSByZXR1cm4gK3ZhbHVlb2YodmFsdWVzW24gLSAxXSwgbiAtIDEsIHZhbHVlcyk7XG4gIHZhciBuLFxuICAgICAgaSA9IChuIC0gMSkgKiBwLFxuICAgICAgaTAgPSBNYXRoLmZsb29yKGkpLFxuICAgICAgdmFsdWUwID0gK3ZhbHVlb2YodmFsdWVzW2kwXSwgaTAsIHZhbHVlcyksXG4gICAgICB2YWx1ZTEgPSArdmFsdWVvZih2YWx1ZXNbaTAgKyAxXSwgaTAgKyAxLCB2YWx1ZXMpO1xuICByZXR1cm4gdmFsdWUwICsgKHZhbHVlMSAtIHZhbHVlMCkgKiAoaSAtIGkwKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0YXJ0LCBzdG9wLCBzdGVwKSB7XG4gIHN0YXJ0ID0gK3N0YXJ0LCBzdG9wID0gK3N0b3AsIHN0ZXAgPSAobiA9IGFyZ3VtZW50cy5sZW5ndGgpIDwgMiA/IChzdG9wID0gc3RhcnQsIHN0YXJ0ID0gMCwgMSkgOiBuIDwgMyA/IDEgOiArc3RlcDtcblxuICB2YXIgaSA9IC0xLFxuICAgICAgbiA9IE1hdGgubWF4KDAsIE1hdGguY2VpbCgoc3RvcCAtIHN0YXJ0KSAvIHN0ZXApKSB8IDAsXG4gICAgICByYW5nZSA9IG5ldyBBcnJheShuKTtcblxuICB3aGlsZSAoKytpIDwgbikge1xuICAgIHJhbmdlW2ldID0gc3RhcnQgKyBpICogc3RlcDtcbiAgfVxuXG4gIHJldHVybiByYW5nZTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN1bSh2YWx1ZXMsIHZhbHVlb2YpIHtcbiAgbGV0IHN1bSA9IDA7XG4gIGlmICh2YWx1ZW9mID09PSB1bmRlZmluZWQpIHtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICh2YWx1ZSA9ICt2YWx1ZSkge1xuICAgICAgICBzdW0gKz0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlID0gK3ZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpIHtcbiAgICAgICAgc3VtICs9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gc3VtO1xufVxuIiwiZXhwb3J0IHZhciBzbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHg7XG59XG4iLCJpbXBvcnQge3NsaWNlfSBmcm9tIFwiLi9hcnJheS5qc1wiO1xuaW1wb3J0IGlkZW50aXR5IGZyb20gXCIuL2lkZW50aXR5LmpzXCI7XG5cbnZhciB0b3AgPSAxLFxuICAgIHJpZ2h0ID0gMixcbiAgICBib3R0b20gPSAzLFxuICAgIGxlZnQgPSA0LFxuICAgIGVwc2lsb24gPSAxZS02O1xuXG5mdW5jdGlvbiB0cmFuc2xhdGVYKHgpIHtcbiAgcmV0dXJuIFwidHJhbnNsYXRlKFwiICsgeCArIFwiLDApXCI7XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZVkoeSkge1xuICByZXR1cm4gXCJ0cmFuc2xhdGUoMCxcIiArIHkgKyBcIilcIjtcbn1cblxuZnVuY3Rpb24gbnVtYmVyKHNjYWxlKSB7XG4gIHJldHVybiBkID0+ICtzY2FsZShkKTtcbn1cblxuZnVuY3Rpb24gY2VudGVyKHNjYWxlLCBvZmZzZXQpIHtcbiAgb2Zmc2V0ID0gTWF0aC5tYXgoMCwgc2NhbGUuYmFuZHdpZHRoKCkgLSBvZmZzZXQgKiAyKSAvIDI7XG4gIGlmIChzY2FsZS5yb3VuZCgpKSBvZmZzZXQgPSBNYXRoLnJvdW5kKG9mZnNldCk7XG4gIHJldHVybiBkID0+ICtzY2FsZShkKSArIG9mZnNldDtcbn1cblxuZnVuY3Rpb24gZW50ZXJpbmcoKSB7XG4gIHJldHVybiAhdGhpcy5fX2F4aXM7XG59XG5cbmZ1bmN0aW9uIGF4aXMob3JpZW50LCBzY2FsZSkge1xuICB2YXIgdGlja0FyZ3VtZW50cyA9IFtdLFxuICAgICAgdGlja1ZhbHVlcyA9IG51bGwsXG4gICAgICB0aWNrRm9ybWF0ID0gbnVsbCxcbiAgICAgIHRpY2tTaXplSW5uZXIgPSA2LFxuICAgICAgdGlja1NpemVPdXRlciA9IDYsXG4gICAgICB0aWNrUGFkZGluZyA9IDMsXG4gICAgICBvZmZzZXQgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvID4gMSA/IDAgOiAwLjUsXG4gICAgICBrID0gb3JpZW50ID09PSB0b3AgfHwgb3JpZW50ID09PSBsZWZ0ID8gLTEgOiAxLFxuICAgICAgeCA9IG9yaWVudCA9PT0gbGVmdCB8fCBvcmllbnQgPT09IHJpZ2h0ID8gXCJ4XCIgOiBcInlcIixcbiAgICAgIHRyYW5zZm9ybSA9IG9yaWVudCA9PT0gdG9wIHx8IG9yaWVudCA9PT0gYm90dG9tID8gdHJhbnNsYXRlWCA6IHRyYW5zbGF0ZVk7XG5cbiAgZnVuY3Rpb24gYXhpcyhjb250ZXh0KSB7XG4gICAgdmFyIHZhbHVlcyA9IHRpY2tWYWx1ZXMgPT0gbnVsbCA/IChzY2FsZS50aWNrcyA/IHNjYWxlLnRpY2tzLmFwcGx5KHNjYWxlLCB0aWNrQXJndW1lbnRzKSA6IHNjYWxlLmRvbWFpbigpKSA6IHRpY2tWYWx1ZXMsXG4gICAgICAgIGZvcm1hdCA9IHRpY2tGb3JtYXQgPT0gbnVsbCA/IChzY2FsZS50aWNrRm9ybWF0ID8gc2NhbGUudGlja0Zvcm1hdC5hcHBseShzY2FsZSwgdGlja0FyZ3VtZW50cykgOiBpZGVudGl0eSkgOiB0aWNrRm9ybWF0LFxuICAgICAgICBzcGFjaW5nID0gTWF0aC5tYXgodGlja1NpemVJbm5lciwgMCkgKyB0aWNrUGFkZGluZyxcbiAgICAgICAgcmFuZ2UgPSBzY2FsZS5yYW5nZSgpLFxuICAgICAgICByYW5nZTAgPSArcmFuZ2VbMF0gKyBvZmZzZXQsXG4gICAgICAgIHJhbmdlMSA9ICtyYW5nZVtyYW5nZS5sZW5ndGggLSAxXSArIG9mZnNldCxcbiAgICAgICAgcG9zaXRpb24gPSAoc2NhbGUuYmFuZHdpZHRoID8gY2VudGVyIDogbnVtYmVyKShzY2FsZS5jb3B5KCksIG9mZnNldCksXG4gICAgICAgIHNlbGVjdGlvbiA9IGNvbnRleHQuc2VsZWN0aW9uID8gY29udGV4dC5zZWxlY3Rpb24oKSA6IGNvbnRleHQsXG4gICAgICAgIHBhdGggPSBzZWxlY3Rpb24uc2VsZWN0QWxsKFwiLmRvbWFpblwiKS5kYXRhKFtudWxsXSksXG4gICAgICAgIHRpY2sgPSBzZWxlY3Rpb24uc2VsZWN0QWxsKFwiLnRpY2tcIikuZGF0YSh2YWx1ZXMsIHNjYWxlKS5vcmRlcigpLFxuICAgICAgICB0aWNrRXhpdCA9IHRpY2suZXhpdCgpLFxuICAgICAgICB0aWNrRW50ZXIgPSB0aWNrLmVudGVyKCkuYXBwZW5kKFwiZ1wiKS5hdHRyKFwiY2xhc3NcIiwgXCJ0aWNrXCIpLFxuICAgICAgICBsaW5lID0gdGljay5zZWxlY3QoXCJsaW5lXCIpLFxuICAgICAgICB0ZXh0ID0gdGljay5zZWxlY3QoXCJ0ZXh0XCIpO1xuXG4gICAgcGF0aCA9IHBhdGgubWVyZ2UocGF0aC5lbnRlcigpLmluc2VydChcInBhdGhcIiwgXCIudGlja1wiKVxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwiZG9tYWluXCIpXG4gICAgICAgIC5hdHRyKFwic3Ryb2tlXCIsIFwiY3VycmVudENvbG9yXCIpKTtcblxuICAgIHRpY2sgPSB0aWNrLm1lcmdlKHRpY2tFbnRlcik7XG5cbiAgICBsaW5lID0gbGluZS5tZXJnZSh0aWNrRW50ZXIuYXBwZW5kKFwibGluZVwiKVxuICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcImN1cnJlbnRDb2xvclwiKVxuICAgICAgICAuYXR0cih4ICsgXCIyXCIsIGsgKiB0aWNrU2l6ZUlubmVyKSk7XG5cbiAgICB0ZXh0ID0gdGV4dC5tZXJnZSh0aWNrRW50ZXIuYXBwZW5kKFwidGV4dFwiKVxuICAgICAgICAuYXR0cihcImZpbGxcIiwgXCJjdXJyZW50Q29sb3JcIilcbiAgICAgICAgLmF0dHIoeCwgayAqIHNwYWNpbmcpXG4gICAgICAgIC5hdHRyKFwiZHlcIiwgb3JpZW50ID09PSB0b3AgPyBcIjBlbVwiIDogb3JpZW50ID09PSBib3R0b20gPyBcIjAuNzFlbVwiIDogXCIwLjMyZW1cIikpO1xuXG4gICAgaWYgKGNvbnRleHQgIT09IHNlbGVjdGlvbikge1xuICAgICAgcGF0aCA9IHBhdGgudHJhbnNpdGlvbihjb250ZXh0KTtcbiAgICAgIHRpY2sgPSB0aWNrLnRyYW5zaXRpb24oY29udGV4dCk7XG4gICAgICBsaW5lID0gbGluZS50cmFuc2l0aW9uKGNvbnRleHQpO1xuICAgICAgdGV4dCA9IHRleHQudHJhbnNpdGlvbihjb250ZXh0KTtcblxuICAgICAgdGlja0V4aXQgPSB0aWNrRXhpdC50cmFuc2l0aW9uKGNvbnRleHQpXG4gICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIGVwc2lsb24pXG4gICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gaXNGaW5pdGUoZCA9IHBvc2l0aW9uKGQpKSA/IHRyYW5zZm9ybShkICsgb2Zmc2V0KSA6IHRoaXMuZ2V0QXR0cmlidXRlKFwidHJhbnNmb3JtXCIpOyB9KTtcblxuICAgICAgdGlja0VudGVyXG4gICAgICAgICAgLmF0dHIoXCJvcGFjaXR5XCIsIGVwc2lsb24pXG4gICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyB2YXIgcCA9IHRoaXMucGFyZW50Tm9kZS5fX2F4aXM7IHJldHVybiB0cmFuc2Zvcm0oKHAgJiYgaXNGaW5pdGUocCA9IHAoZCkpID8gcCA6IHBvc2l0aW9uKGQpKSArIG9mZnNldCk7IH0pO1xuICAgIH1cblxuICAgIHRpY2tFeGl0LnJlbW92ZSgpO1xuXG4gICAgcGF0aFxuICAgICAgICAuYXR0cihcImRcIiwgb3JpZW50ID09PSBsZWZ0IHx8IG9yaWVudCA9PT0gcmlnaHRcbiAgICAgICAgICAgID8gKHRpY2tTaXplT3V0ZXIgPyBcIk1cIiArIGsgKiB0aWNrU2l6ZU91dGVyICsgXCIsXCIgKyByYW5nZTAgKyBcIkhcIiArIG9mZnNldCArIFwiVlwiICsgcmFuZ2UxICsgXCJIXCIgKyBrICogdGlja1NpemVPdXRlciA6IFwiTVwiICsgb2Zmc2V0ICsgXCIsXCIgKyByYW5nZTAgKyBcIlZcIiArIHJhbmdlMSlcbiAgICAgICAgICAgIDogKHRpY2tTaXplT3V0ZXIgPyBcIk1cIiArIHJhbmdlMCArIFwiLFwiICsgayAqIHRpY2tTaXplT3V0ZXIgKyBcIlZcIiArIG9mZnNldCArIFwiSFwiICsgcmFuZ2UxICsgXCJWXCIgKyBrICogdGlja1NpemVPdXRlciA6IFwiTVwiICsgcmFuZ2UwICsgXCIsXCIgKyBvZmZzZXQgKyBcIkhcIiArIHJhbmdlMSkpO1xuXG4gICAgdGlja1xuICAgICAgICAuYXR0cihcIm9wYWNpdHlcIiwgMSlcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24oZCkgeyByZXR1cm4gdHJhbnNmb3JtKHBvc2l0aW9uKGQpICsgb2Zmc2V0KTsgfSk7XG5cbiAgICBsaW5lXG4gICAgICAgIC5hdHRyKHggKyBcIjJcIiwgayAqIHRpY2tTaXplSW5uZXIpO1xuXG4gICAgdGV4dFxuICAgICAgICAuYXR0cih4LCBrICogc3BhY2luZylcbiAgICAgICAgLnRleHQoZm9ybWF0KTtcblxuICAgIHNlbGVjdGlvbi5maWx0ZXIoZW50ZXJpbmcpXG4gICAgICAgIC5hdHRyKFwiZmlsbFwiLCBcIm5vbmVcIilcbiAgICAgICAgLmF0dHIoXCJmb250LXNpemVcIiwgMTApXG4gICAgICAgIC5hdHRyKFwiZm9udC1mYW1pbHlcIiwgXCJzYW5zLXNlcmlmXCIpXG4gICAgICAgIC5hdHRyKFwidGV4dC1hbmNob3JcIiwgb3JpZW50ID09PSByaWdodCA/IFwic3RhcnRcIiA6IG9yaWVudCA9PT0gbGVmdCA/IFwiZW5kXCIgOiBcIm1pZGRsZVwiKTtcblxuICAgIHNlbGVjdGlvblxuICAgICAgICAuZWFjaChmdW5jdGlvbigpIHsgdGhpcy5fX2F4aXMgPSBwb3NpdGlvbjsgfSk7XG4gIH1cblxuICBheGlzLnNjYWxlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHNjYWxlID0gXywgYXhpcykgOiBzY2FsZTtcbiAgfTtcblxuICBheGlzLnRpY2tzID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRpY2tBcmd1bWVudHMgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyksIGF4aXM7XG4gIH07XG5cbiAgYXhpcy50aWNrQXJndW1lbnRzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tBcmd1bWVudHMgPSBfID09IG51bGwgPyBbXSA6IHNsaWNlLmNhbGwoXyksIGF4aXMpIDogdGlja0FyZ3VtZW50cy5zbGljZSgpO1xuICB9O1xuXG4gIGF4aXMudGlja1ZhbHVlcyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrVmFsdWVzID0gXyA9PSBudWxsID8gbnVsbCA6IHNsaWNlLmNhbGwoXyksIGF4aXMpIDogdGlja1ZhbHVlcyAmJiB0aWNrVmFsdWVzLnNsaWNlKCk7XG4gIH07XG5cbiAgYXhpcy50aWNrRm9ybWF0ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tGb3JtYXQgPSBfLCBheGlzKSA6IHRpY2tGb3JtYXQ7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZUlubmVyID0gdGlja1NpemVPdXRlciA9ICtfLCBheGlzKSA6IHRpY2tTaXplSW5uZXI7XG4gIH07XG5cbiAgYXhpcy50aWNrU2l6ZUlubmVyID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tTaXplSW5uZXIgPSArXywgYXhpcykgOiB0aWNrU2l6ZUlubmVyO1xuICB9O1xuXG4gIGF4aXMudGlja1NpemVPdXRlciA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh0aWNrU2l6ZU91dGVyID0gK18sIGF4aXMpIDogdGlja1NpemVPdXRlcjtcbiAgfTtcblxuICBheGlzLnRpY2tQYWRkaW5nID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHRpY2tQYWRkaW5nID0gK18sIGF4aXMpIDogdGlja1BhZGRpbmc7XG4gIH07XG5cbiAgYXhpcy5vZmZzZXQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAob2Zmc2V0ID0gK18sIGF4aXMpIDogb2Zmc2V0O1xuICB9O1xuXG4gIHJldHVybiBheGlzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc1RvcChzY2FsZSkge1xuICByZXR1cm4gYXhpcyh0b3AsIHNjYWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNSaWdodChzY2FsZSkge1xuICByZXR1cm4gYXhpcyhyaWdodCwgc2NhbGUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXhpc0JvdHRvbShzY2FsZSkge1xuICByZXR1cm4gYXhpcyhib3R0b20sIHNjYWxlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGF4aXNMZWZ0KHNjYWxlKSB7XG4gIHJldHVybiBheGlzKGxlZnQsIHNjYWxlKTtcbn1cbiIsInZhciBub29wID0ge3ZhbHVlOiAoKSA9PiB7fX07XG5cbmZ1bmN0aW9uIGRpc3BhdGNoKCkge1xuICBmb3IgKHZhciBpID0gMCwgbiA9IGFyZ3VtZW50cy5sZW5ndGgsIF8gPSB7fSwgdDsgaSA8IG47ICsraSkge1xuICAgIGlmICghKHQgPSBhcmd1bWVudHNbaV0gKyBcIlwiKSB8fCAodCBpbiBfKSB8fCAvW1xccy5dLy50ZXN0KHQpKSB0aHJvdyBuZXcgRXJyb3IoXCJpbGxlZ2FsIHR5cGU6IFwiICsgdCk7XG4gICAgX1t0XSA9IFtdO1xuICB9XG4gIHJldHVybiBuZXcgRGlzcGF0Y2goXyk7XG59XG5cbmZ1bmN0aW9uIERpc3BhdGNoKF8pIHtcbiAgdGhpcy5fID0gXztcbn1cblxuZnVuY3Rpb24gcGFyc2VUeXBlbmFtZXModHlwZW5hbWVzLCB0eXBlcykge1xuICByZXR1cm4gdHlwZW5hbWVzLnRyaW0oKS5zcGxpdCgvXnxcXHMrLykubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICB2YXIgbmFtZSA9IFwiXCIsIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIG5hbWUgPSB0LnNsaWNlKGkgKyAxKSwgdCA9IHQuc2xpY2UoMCwgaSk7XG4gICAgaWYgKHQgJiYgIXR5cGVzLmhhc093blByb3BlcnR5KHQpKSB0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHR5cGU6IFwiICsgdCk7XG4gICAgcmV0dXJuIHt0eXBlOiB0LCBuYW1lOiBuYW1lfTtcbiAgfSk7XG59XG5cbkRpc3BhdGNoLnByb3RvdHlwZSA9IGRpc3BhdGNoLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IERpc3BhdGNoLFxuICBvbjogZnVuY3Rpb24odHlwZW5hbWUsIGNhbGxiYWNrKSB7XG4gICAgdmFyIF8gPSB0aGlzLl8sXG4gICAgICAgIFQgPSBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZSArIFwiXCIsIF8pLFxuICAgICAgICB0LFxuICAgICAgICBpID0gLTEsXG4gICAgICAgIG4gPSBULmxlbmd0aDtcblxuICAgIC8vIElmIG5vIGNhbGxiYWNrIHdhcyBzcGVjaWZpZWQsIHJldHVybiB0aGUgY2FsbGJhY2sgb2YgdGhlIGdpdmVuIHR5cGUgYW5kIG5hbWUuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAyKSB7XG4gICAgICB3aGlsZSAoKytpIDwgbikgaWYgKCh0ID0gKHR5cGVuYW1lID0gVFtpXSkudHlwZSkgJiYgKHQgPSBnZXQoX1t0XSwgdHlwZW5hbWUubmFtZSkpKSByZXR1cm4gdDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBJZiBhIHR5cGUgd2FzIHNwZWNpZmllZCwgc2V0IHRoZSBjYWxsYmFjayBmb3IgdGhlIGdpdmVuIHR5cGUgYW5kIG5hbWUuXG4gICAgLy8gT3RoZXJ3aXNlLCBpZiBhIG51bGwgY2FsbGJhY2sgd2FzIHNwZWNpZmllZCwgcmVtb3ZlIGNhbGxiYWNrcyBvZiB0aGUgZ2l2ZW4gbmFtZS5cbiAgICBpZiAoY2FsbGJhY2sgIT0gbnVsbCAmJiB0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBjYWxsYmFjazogXCIgKyBjYWxsYmFjayk7XG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIGlmICh0ID0gKHR5cGVuYW1lID0gVFtpXSkudHlwZSkgX1t0XSA9IHNldChfW3RdLCB0eXBlbmFtZS5uYW1lLCBjYWxsYmFjayk7XG4gICAgICBlbHNlIGlmIChjYWxsYmFjayA9PSBudWxsKSBmb3IgKHQgaW4gXykgX1t0XSA9IHNldChfW3RdLCB0eXBlbmFtZS5uYW1lLCBudWxsKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgY29weTogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGNvcHkgPSB7fSwgXyA9IHRoaXMuXztcbiAgICBmb3IgKHZhciB0IGluIF8pIGNvcHlbdF0gPSBfW3RdLnNsaWNlKCk7XG4gICAgcmV0dXJuIG5ldyBEaXNwYXRjaChjb3B5KTtcbiAgfSxcbiAgY2FsbDogZnVuY3Rpb24odHlwZSwgdGhhdCkge1xuICAgIGlmICgobiA9IGFyZ3VtZW50cy5sZW5ndGggLSAyKSA+IDApIGZvciAodmFyIGFyZ3MgPSBuZXcgQXJyYXkobiksIGkgPSAwLCBuLCB0OyBpIDwgbjsgKytpKSBhcmdzW2ldID0gYXJndW1lbnRzW2kgKyAyXTtcbiAgICBpZiAoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHR5cGUpO1xuICAgIGZvciAodCA9IHRoaXMuX1t0eXBlXSwgaSA9IDAsIG4gPSB0Lmxlbmd0aDsgaSA8IG47ICsraSkgdFtpXS52YWx1ZS5hcHBseSh0aGF0LCBhcmdzKTtcbiAgfSxcbiAgYXBwbHk6IGZ1bmN0aW9uKHR5cGUsIHRoYXQsIGFyZ3MpIHtcbiAgICBpZiAoIXRoaXMuXy5oYXNPd25Qcm9wZXJ0eSh0eXBlKSkgdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biB0eXBlOiBcIiArIHR5cGUpO1xuICAgIGZvciAodmFyIHQgPSB0aGlzLl9bdHlwZV0sIGkgPSAwLCBuID0gdC5sZW5ndGg7IGkgPCBuOyArK2kpIHRbaV0udmFsdWUuYXBwbHkodGhhdCwgYXJncyk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGdldCh0eXBlLCBuYW1lKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gdHlwZS5sZW5ndGgsIGM7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAoKGMgPSB0eXBlW2ldKS5uYW1lID09PSBuYW1lKSB7XG4gICAgICByZXR1cm4gYy52YWx1ZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0KHR5cGUsIG5hbWUsIGNhbGxiYWNrKSB7XG4gIGZvciAodmFyIGkgPSAwLCBuID0gdHlwZS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICBpZiAodHlwZVtpXS5uYW1lID09PSBuYW1lKSB7XG4gICAgICB0eXBlW2ldID0gbm9vcCwgdHlwZSA9IHR5cGUuc2xpY2UoMCwgaSkuY29uY2F0KHR5cGUuc2xpY2UoaSArIDEpKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICBpZiAoY2FsbGJhY2sgIT0gbnVsbCkgdHlwZS5wdXNoKHtuYW1lOiBuYW1lLCB2YWx1ZTogY2FsbGJhY2t9KTtcbiAgcmV0dXJuIHR5cGU7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGRpc3BhdGNoO1xuIiwiZXhwb3J0IHZhciB4aHRtbCA9IFwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHN2ZzogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICB4aHRtbDogeGh0bWwsXG4gIHhsaW5rOiBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmtcIixcbiAgeG1sOiBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiLFxuICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3htbG5zL1wiXG59O1xuIiwiaW1wb3J0IG5hbWVzcGFjZXMgZnJvbSBcIi4vbmFtZXNwYWNlcy5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBwcmVmaXggPSBuYW1lICs9IFwiXCIsIGkgPSBwcmVmaXguaW5kZXhPZihcIjpcIik7XG4gIGlmIChpID49IDAgJiYgKHByZWZpeCA9IG5hbWUuc2xpY2UoMCwgaSkpICE9PSBcInhtbG5zXCIpIG5hbWUgPSBuYW1lLnNsaWNlKGkgKyAxKTtcbiAgcmV0dXJuIG5hbWVzcGFjZXMuaGFzT3duUHJvcGVydHkocHJlZml4KSA/IHtzcGFjZTogbmFtZXNwYWNlc1twcmVmaXhdLCBsb2NhbDogbmFtZX0gOiBuYW1lOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xufVxuIiwiaW1wb3J0IG5hbWVzcGFjZSBmcm9tIFwiLi9uYW1lc3BhY2UuanNcIjtcbmltcG9ydCB7eGh0bWx9IGZyb20gXCIuL25hbWVzcGFjZXMuanNcIjtcblxuZnVuY3Rpb24gY3JlYXRvckluaGVyaXQobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGRvY3VtZW50ID0gdGhpcy5vd25lckRvY3VtZW50LFxuICAgICAgICB1cmkgPSB0aGlzLm5hbWVzcGFjZVVSSTtcbiAgICByZXR1cm4gdXJpID09PSB4aHRtbCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubmFtZXNwYWNlVVJJID09PSB4aHRtbFxuICAgICAgICA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQobmFtZSlcbiAgICAgICAgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlModXJpLCBuYW1lKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRvckZpeGVkKGZ1bGxuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcbiAgcmV0dXJuIChmdWxsbmFtZS5sb2NhbFxuICAgICAgPyBjcmVhdG9yRml4ZWRcbiAgICAgIDogY3JlYXRvckluaGVyaXQpKGZ1bGxuYW1lKTtcbn1cbiIsImZ1bmN0aW9uIG5vbmUoKSB7fVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IG5vbmUgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgpIHtcbiAgcmV0dXJuIHR5cGVvZiB4ID09PSBcIm9iamVjdFwiICYmIFwibGVuZ3RoXCIgaW4geFxuICAgID8geCAvLyBBcnJheSwgVHlwZWRBcnJheSwgTm9kZUxpc3QsIGFycmF5LWxpa2VcbiAgICA6IEFycmF5LmZyb20oeCk7IC8vIE1hcCwgU2V0LCBpdGVyYWJsZSwgc3RyaW5nLCBvciBhbnl0aGluZyBlbHNlXG59XG4iLCJmdW5jdGlvbiBlbXB0eSgpIHtcbiAgcmV0dXJuIFtdO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gc2VsZWN0b3IgPT0gbnVsbCA/IGVtcHR5IDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMubWF0Y2hlcyhzZWxlY3Rvcik7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjaGlsZE1hdGNoZXIoc2VsZWN0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgfTtcbn1cblxuIiwiaW1wb3J0IHtjaGlsZE1hdGNoZXJ9IGZyb20gXCIuLi9tYXRjaGVyLmpzXCI7XG5cbnZhciBmaW5kID0gQXJyYXkucHJvdG90eXBlLmZpbmQ7XG5cbmZ1bmN0aW9uIGNoaWxkRmluZChtYXRjaCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGZpbmQuY2FsbCh0aGlzLmNoaWxkcmVuLCBtYXRjaCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGNoaWxkRmlyc3QoKSB7XG4gIHJldHVybiB0aGlzLmZpcnN0RWxlbWVudENoaWxkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICByZXR1cm4gdGhpcy5zZWxlY3QobWF0Y2ggPT0gbnVsbCA/IGNoaWxkRmlyc3RcbiAgICAgIDogY2hpbGRGaW5kKHR5cGVvZiBtYXRjaCA9PT0gXCJmdW5jdGlvblwiID8gbWF0Y2ggOiBjaGlsZE1hdGNoZXIobWF0Y2gpKSk7XG59XG4iLCJpbXBvcnQge2NoaWxkTWF0Y2hlcn0gZnJvbSBcIi4uL21hdGNoZXIuanNcIjtcblxudmFyIGZpbHRlciA9IEFycmF5LnByb3RvdHlwZS5maWx0ZXI7XG5cbmZ1bmN0aW9uIGNoaWxkcmVuKCkge1xuICByZXR1cm4gdGhpcy5jaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gY2hpbGRyZW5GaWx0ZXIobWF0Y2gpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLmNoaWxkcmVuLCBtYXRjaCk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG1hdGNoKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdEFsbChtYXRjaCA9PSBudWxsID8gY2hpbGRyZW5cbiAgICAgIDogY2hpbGRyZW5GaWx0ZXIodHlwZW9mIG1hdGNoID09PSBcImZ1bmN0aW9uXCIgPyBtYXRjaCA6IGNoaWxkTWF0Y2hlcihtYXRjaCkpKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHVwZGF0ZSkge1xuICByZXR1cm4gbmV3IEFycmF5KHVwZGF0ZS5sZW5ndGgpO1xufVxuIiwiaW1wb3J0IHNwYXJzZSBmcm9tIFwiLi9zcGFyc2UuanNcIjtcbmltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZW50ZXIgfHwgdGhpcy5fZ3JvdXBzLm1hcChzcGFyc2UpLCB0aGlzLl9wYXJlbnRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIEVudGVyTm9kZShwYXJlbnQsIGRhdHVtKSB7XG4gIHRoaXMub3duZXJEb2N1bWVudCA9IHBhcmVudC5vd25lckRvY3VtZW50O1xuICB0aGlzLm5hbWVzcGFjZVVSSSA9IHBhcmVudC5uYW1lc3BhY2VVUkk7XG4gIHRoaXMuX25leHQgPSBudWxsO1xuICB0aGlzLl9wYXJlbnQgPSBwYXJlbnQ7XG4gIHRoaXMuX19kYXRhX18gPSBkYXR1bTtcbn1cblxuRW50ZXJOb2RlLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IEVudGVyTm9kZSxcbiAgYXBwZW5kQ2hpbGQ6IGZ1bmN0aW9uKGNoaWxkKSB7IHJldHVybiB0aGlzLl9wYXJlbnQuaW5zZXJ0QmVmb3JlKGNoaWxkLCB0aGlzLl9uZXh0KTsgfSxcbiAgaW5zZXJ0QmVmb3JlOiBmdW5jdGlvbihjaGlsZCwgbmV4dCkgeyByZXR1cm4gdGhpcy5fcGFyZW50Lmluc2VydEJlZm9yZShjaGlsZCwgbmV4dCk7IH0sXG4gIHF1ZXJ5U2VsZWN0b3I6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7IHJldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7IH0sXG4gIHF1ZXJ5U2VsZWN0b3JBbGw6IGZ1bmN0aW9uKHNlbGVjdG9yKSB7IHJldHVybiB0aGlzLl9wYXJlbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3Rvcik7IH1cbn07XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHtFbnRlck5vZGV9IGZyb20gXCIuL2VudGVyLmpzXCI7XG5pbXBvcnQgYXJyYXkgZnJvbSBcIi4uL2FycmF5LmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4uL2NvbnN0YW50LmpzXCI7XG5cbmZ1bmN0aW9uIGJpbmRJbmRleChwYXJlbnQsIGdyb3VwLCBlbnRlciwgdXBkYXRlLCBleGl0LCBkYXRhKSB7XG4gIHZhciBpID0gMCxcbiAgICAgIG5vZGUsXG4gICAgICBncm91cExlbmd0aCA9IGdyb3VwLmxlbmd0aCxcbiAgICAgIGRhdGFMZW5ndGggPSBkYXRhLmxlbmd0aDtcblxuICAvLyBQdXQgYW55IG5vbi1udWxsIG5vZGVzIHRoYXQgZml0IGludG8gdXBkYXRlLlxuICAvLyBQdXQgYW55IG51bGwgbm9kZXMgaW50byBlbnRlci5cbiAgLy8gUHV0IGFueSByZW1haW5pbmcgZGF0YSBpbnRvIGVudGVyLlxuICBmb3IgKDsgaSA8IGRhdGFMZW5ndGg7ICsraSkge1xuICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgIG5vZGUuX19kYXRhX18gPSBkYXRhW2ldO1xuICAgICAgdXBkYXRlW2ldID0gbm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50ZXJbaV0gPSBuZXcgRW50ZXJOb2RlKHBhcmVudCwgZGF0YVtpXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gUHV0IGFueSBub24tbnVsbCBub2RlcyB0aGF0IGRvbuKAmXQgZml0IGludG8gZXhpdC5cbiAgZm9yICg7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGJpbmRLZXkocGFyZW50LCBncm91cCwgZW50ZXIsIHVwZGF0ZSwgZXhpdCwgZGF0YSwga2V5KSB7XG4gIHZhciBpLFxuICAgICAgbm9kZSxcbiAgICAgIG5vZGVCeUtleVZhbHVlID0gbmV3IE1hcCxcbiAgICAgIGdyb3VwTGVuZ3RoID0gZ3JvdXAubGVuZ3RoLFxuICAgICAgZGF0YUxlbmd0aCA9IGRhdGEubGVuZ3RoLFxuICAgICAga2V5VmFsdWVzID0gbmV3IEFycmF5KGdyb3VwTGVuZ3RoKSxcbiAgICAgIGtleVZhbHVlO1xuXG4gIC8vIENvbXB1dGUgdGhlIGtleSBmb3IgZWFjaCBub2RlLlxuICAvLyBJZiBtdWx0aXBsZSBub2RlcyBoYXZlIHRoZSBzYW1lIGtleSwgdGhlIGR1cGxpY2F0ZXMgYXJlIGFkZGVkIHRvIGV4aXQuXG4gIGZvciAoaSA9IDA7IGkgPCBncm91cExlbmd0aDsgKytpKSB7XG4gICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAga2V5VmFsdWVzW2ldID0ga2V5VmFsdWUgPSBrZXkuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkgKyBcIlwiO1xuICAgICAgaWYgKG5vZGVCeUtleVZhbHVlLmhhcyhrZXlWYWx1ZSkpIHtcbiAgICAgICAgZXhpdFtpXSA9IG5vZGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlQnlLZXlWYWx1ZS5zZXQoa2V5VmFsdWUsIG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIENvbXB1dGUgdGhlIGtleSBmb3IgZWFjaCBkYXR1bS5cbiAgLy8gSWYgdGhlcmUgYSBub2RlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGtleSwgam9pbiBhbmQgYWRkIGl0IHRvIHVwZGF0ZS5cbiAgLy8gSWYgdGhlcmUgaXMgbm90IChvciB0aGUga2V5IGlzIGEgZHVwbGljYXRlKSwgYWRkIGl0IHRvIGVudGVyLlxuICBmb3IgKGkgPSAwOyBpIDwgZGF0YUxlbmd0aDsgKytpKSB7XG4gICAga2V5VmFsdWUgPSBrZXkuY2FsbChwYXJlbnQsIGRhdGFbaV0sIGksIGRhdGEpICsgXCJcIjtcbiAgICBpZiAobm9kZSA9IG5vZGVCeUtleVZhbHVlLmdldChrZXlWYWx1ZSkpIHtcbiAgICAgIHVwZGF0ZVtpXSA9IG5vZGU7XG4gICAgICBub2RlLl9fZGF0YV9fID0gZGF0YVtpXTtcbiAgICAgIG5vZGVCeUtleVZhbHVlLmRlbGV0ZShrZXlWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGVudGVyW2ldID0gbmV3IEVudGVyTm9kZShwYXJlbnQsIGRhdGFbaV0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIEFkZCBhbnkgcmVtYWluaW5nIG5vZGVzIHRoYXQgd2VyZSBub3QgYm91bmQgdG8gZGF0YSB0byBleGl0LlxuICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBMZW5ndGg7ICsraSkge1xuICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAobm9kZUJ5S2V5VmFsdWUuZ2V0KGtleVZhbHVlc1tpXSkgPT09IG5vZGUpKSB7XG4gICAgICBleGl0W2ldID0gbm9kZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZGF0dW0obm9kZSkge1xuICByZXR1cm4gbm9kZS5fX2RhdGFfXztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHJldHVybiBBcnJheS5mcm9tKHRoaXMsIGRhdHVtKTtcblxuICB2YXIgYmluZCA9IGtleSA/IGJpbmRLZXkgOiBiaW5kSW5kZXgsXG4gICAgICBwYXJlbnRzID0gdGhpcy5fcGFyZW50cyxcbiAgICAgIGdyb3VwcyA9IHRoaXMuX2dyb3VwcztcblxuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHZhbHVlID0gY29uc3RhbnQodmFsdWUpO1xuXG4gIGZvciAodmFyIG0gPSBncm91cHMubGVuZ3RoLCB1cGRhdGUgPSBuZXcgQXJyYXkobSksIGVudGVyID0gbmV3IEFycmF5KG0pLCBleGl0ID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIHZhciBwYXJlbnQgPSBwYXJlbnRzW2pdLFxuICAgICAgICBncm91cCA9IGdyb3Vwc1tqXSxcbiAgICAgICAgZ3JvdXBMZW5ndGggPSBncm91cC5sZW5ndGgsXG4gICAgICAgIGRhdGEgPSBhcnJheSh2YWx1ZS5jYWxsKHBhcmVudCwgcGFyZW50ICYmIHBhcmVudC5fX2RhdGFfXywgaiwgcGFyZW50cykpLFxuICAgICAgICBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGgsXG4gICAgICAgIGVudGVyR3JvdXAgPSBlbnRlcltqXSA9IG5ldyBBcnJheShkYXRhTGVuZ3RoKSxcbiAgICAgICAgdXBkYXRlR3JvdXAgPSB1cGRhdGVbal0gPSBuZXcgQXJyYXkoZGF0YUxlbmd0aCksXG4gICAgICAgIGV4aXRHcm91cCA9IGV4aXRbal0gPSBuZXcgQXJyYXkoZ3JvdXBMZW5ndGgpO1xuXG4gICAgYmluZChwYXJlbnQsIGdyb3VwLCBlbnRlckdyb3VwLCB1cGRhdGVHcm91cCwgZXhpdEdyb3VwLCBkYXRhLCBrZXkpO1xuXG4gICAgLy8gTm93IGNvbm5lY3QgdGhlIGVudGVyIG5vZGVzIHRvIHRoZWlyIGZvbGxvd2luZyB1cGRhdGUgbm9kZSwgc3VjaCB0aGF0XG4gICAgLy8gYXBwZW5kQ2hpbGQgY2FuIGluc2VydCB0aGUgbWF0ZXJpYWxpemVkIGVudGVyIG5vZGUgYmVmb3JlIHRoaXMgbm9kZSxcbiAgICAvLyByYXRoZXIgdGhhbiBhdCB0aGUgZW5kIG9mIHRoZSBwYXJlbnQgbm9kZS5cbiAgICBmb3IgKHZhciBpMCA9IDAsIGkxID0gMCwgcHJldmlvdXMsIG5leHQ7IGkwIDwgZGF0YUxlbmd0aDsgKytpMCkge1xuICAgICAgaWYgKHByZXZpb3VzID0gZW50ZXJHcm91cFtpMF0pIHtcbiAgICAgICAgaWYgKGkwID49IGkxKSBpMSA9IGkwICsgMTtcbiAgICAgICAgd2hpbGUgKCEobmV4dCA9IHVwZGF0ZUdyb3VwW2kxXSkgJiYgKytpMSA8IGRhdGFMZW5ndGgpO1xuICAgICAgICBwcmV2aW91cy5fbmV4dCA9IG5leHQgfHwgbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB1cGRhdGUgPSBuZXcgU2VsZWN0aW9uKHVwZGF0ZSwgcGFyZW50cyk7XG4gIHVwZGF0ZS5fZW50ZXIgPSBlbnRlcjtcbiAgdXBkYXRlLl9leGl0ID0gZXhpdDtcbiAgcmV0dXJuIHVwZGF0ZTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjb21wYXJlKSB7XG4gIGlmICghY29tcGFyZSkgY29tcGFyZSA9IGFzY2VuZGluZztcblxuICBmdW5jdGlvbiBjb21wYXJlTm9kZShhLCBiKSB7XG4gICAgcmV0dXJuIGEgJiYgYiA/IGNvbXBhcmUoYS5fX2RhdGFfXywgYi5fX2RhdGFfXykgOiAhYSAtICFiO1xuICB9XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc29ydGdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc29ydGdyb3VwID0gc29ydGdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc29ydGdyb3VwW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc29ydGdyb3VwLnNvcnQoY29tcGFyZU5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc29ydGdyb3VwcywgdGhpcy5fcGFyZW50cykub3JkZXIoKTtcbn1cblxuZnVuY3Rpb24gYXNjZW5kaW5nKGEsIGIpIHtcbiAgcmV0dXJuIGEgPCBiID8gLTEgOiBhID4gYiA/IDEgOiBhID49IGIgPyAwIDogTmFOO1xufVxuIiwiaW1wb3J0IG5hbWVzcGFjZSBmcm9tIFwiLi4vbmFtZXNwYWNlLmpzXCI7XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmVOUyhmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnQobmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckNvbnN0YW50TlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgdmFsdWUpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICBlbHNlIHRoaXMuc2V0QXR0cmlidXRlKG5hbWUsIHYpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb25OUyhmdWxsbmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodiA9PSBudWxsKSB0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgZWxzZSB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgdik7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgbm9kZSA9IHRoaXMubm9kZSgpO1xuICAgIHJldHVybiBmdWxsbmFtZS5sb2NhbFxuICAgICAgICA/IG5vZGUuZ2V0QXR0cmlidXRlTlMoZnVsbG5hbWUuc3BhY2UsIGZ1bGxuYW1lLmxvY2FsKVxuICAgICAgICA6IG5vZGUuZ2V0QXR0cmlidXRlKGZ1bGxuYW1lKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLmVhY2goKHZhbHVlID09IG51bGxcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0clJlbW92ZU5TIDogYXR0clJlbW92ZSkgOiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0ckZ1bmN0aW9uTlMgOiBhdHRyRnVuY3Rpb24pXG4gICAgICA6IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJDb25zdGFudE5TIDogYXR0ckNvbnN0YW50KSkpKGZ1bGxuYW1lLCB2YWx1ZSkpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obm9kZSkge1xuICByZXR1cm4gKG5vZGUub3duZXJEb2N1bWVudCAmJiBub2RlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpIC8vIG5vZGUgaXMgYSBOb2RlXG4gICAgICB8fCAobm9kZS5kb2N1bWVudCAmJiBub2RlKSAvLyBub2RlIGlzIGEgV2luZG93XG4gICAgICB8fCBub2RlLmRlZmF1bHRWaWV3OyAvLyBub2RlIGlzIGEgRG9jdW1lbnRcbn1cbiIsImltcG9ydCBkZWZhdWx0VmlldyBmcm9tIFwiLi4vd2luZG93LmpzXCI7XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQobmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KG5hbWUsIHZhbHVlLCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlRnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgdGhpcy5zdHlsZS5yZW1vdmVQcm9wZXJ0eShuYW1lKTtcbiAgICBlbHNlIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgdiwgcHJpb3JpdHkpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgPyBzdHlsZVJlbW92ZSA6IHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICA/IHN0eWxlRnVuY3Rpb25cbiAgICAgICAgICAgIDogc3R5bGVDb25zdGFudCkobmFtZSwgdmFsdWUsIHByaW9yaXR5ID09IG51bGwgPyBcIlwiIDogcHJpb3JpdHkpKVxuICAgICAgOiBzdHlsZVZhbHVlKHRoaXMubm9kZSgpLCBuYW1lKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0eWxlVmFsdWUobm9kZSwgbmFtZSkge1xuICByZXR1cm4gbm9kZS5zdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKG5hbWUpXG4gICAgICB8fCBkZWZhdWx0Vmlldyhub2RlKS5nZXRDb21wdXRlZFN0eWxlKG5vZGUsIG51bGwpLmdldFByb3BlcnR5VmFsdWUobmFtZSk7XG59XG4iLCJmdW5jdGlvbiBwcm9wZXJ0eVJlbW92ZShuYW1lKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBkZWxldGUgdGhpc1tuYW1lXTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gcHJvcGVydHlDb25zdGFudChuYW1lLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpc1tuYW1lXSA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0eUZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgdiA9IHZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgaWYgKHYgPT0gbnVsbCkgZGVsZXRlIHRoaXNbbmFtZV07XG4gICAgZWxzZSB0aGlzW25hbWVdID0gdjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAxXG4gICAgICA/IHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gcHJvcGVydHlSZW1vdmUgOiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gcHJvcGVydHlGdW5jdGlvblxuICAgICAgICAgIDogcHJvcGVydHlDb25zdGFudCkobmFtZSwgdmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKVtuYW1lXTtcbn1cbiIsImZ1bmN0aW9uIGNsYXNzQXJyYXkoc3RyaW5nKSB7XG4gIHJldHVybiBzdHJpbmcudHJpbSgpLnNwbGl0KC9efFxccysvKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NMaXN0KG5vZGUpIHtcbiAgcmV0dXJuIG5vZGUuY2xhc3NMaXN0IHx8IG5ldyBDbGFzc0xpc3Qobm9kZSk7XG59XG5cbmZ1bmN0aW9uIENsYXNzTGlzdChub2RlKSB7XG4gIHRoaXMuX25vZGUgPSBub2RlO1xuICB0aGlzLl9uYW1lcyA9IGNsYXNzQXJyYXkobm9kZS5nZXRBdHRyaWJ1dGUoXCJjbGFzc1wiKSB8fCBcIlwiKTtcbn1cblxuQ2xhc3NMaXN0LnByb3RvdHlwZSA9IHtcbiAgYWRkOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpIDwgMCkge1xuICAgICAgdGhpcy5fbmFtZXMucHVzaChuYW1lKTtcbiAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xuICAgIH1cbiAgfSxcbiAgcmVtb3ZlOiBmdW5jdGlvbihuYW1lKSB7XG4gICAgdmFyIGkgPSB0aGlzLl9uYW1lcy5pbmRleE9mKG5hbWUpO1xuICAgIGlmIChpID49IDApIHtcbiAgICAgIHRoaXMuX25hbWVzLnNwbGljZShpLCAxKTtcbiAgICAgIHRoaXMuX25vZGUuc2V0QXR0cmlidXRlKFwiY2xhc3NcIiwgdGhpcy5fbmFtZXMuam9pbihcIiBcIikpO1xuICAgIH1cbiAgfSxcbiAgY29udGFpbnM6IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5fbmFtZXMuaW5kZXhPZihuYW1lKSA+PSAwO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjbGFzc2VkQWRkKG5vZGUsIG5hbWVzKSB7XG4gIHZhciBsaXN0ID0gY2xhc3NMaXN0KG5vZGUpLCBpID0gLTEsIG4gPSBuYW1lcy5sZW5ndGg7XG4gIHdoaWxlICgrK2kgPCBuKSBsaXN0LmFkZChuYW1lc1tpXSk7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZWRSZW1vdmUobm9kZSwgbmFtZXMpIHtcbiAgdmFyIGxpc3QgPSBjbGFzc0xpc3Qobm9kZSksIGkgPSAtMSwgbiA9IG5hbWVzLmxlbmd0aDtcbiAgd2hpbGUgKCsraSA8IG4pIGxpc3QucmVtb3ZlKG5hbWVzW2ldKTtcbn1cblxuZnVuY3Rpb24gY2xhc3NlZFRydWUobmFtZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGNsYXNzZWRBZGQodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkRmFsc2UobmFtZXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGNsYXNzZWRSZW1vdmUodGhpcywgbmFtZXMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBjbGFzc2VkRnVuY3Rpb24obmFtZXMsIHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAodmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKSA/IGNsYXNzZWRBZGQgOiBjbGFzc2VkUmVtb3ZlKSh0aGlzLCBuYW1lcyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBuYW1lcyA9IGNsYXNzQXJyYXkobmFtZSArIFwiXCIpO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgMikge1xuICAgIHZhciBsaXN0ID0gY2xhc3NMaXN0KHRoaXMubm9kZSgpKSwgaSA9IC0xLCBuID0gbmFtZXMubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBuKSBpZiAoIWxpc3QuY29udGFpbnMobmFtZXNbaV0pKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyBjbGFzc2VkRnVuY3Rpb24gOiB2YWx1ZVxuICAgICAgPyBjbGFzc2VkVHJ1ZVxuICAgICAgOiBjbGFzc2VkRmFsc2UpKG5hbWVzLCB2YWx1ZSkpO1xufVxuIiwiZnVuY3Rpb24gdGV4dFJlbW92ZSgpIHtcbiAgdGhpcy50ZXh0Q29udGVudCA9IFwiXCI7XG59XG5cbmZ1bmN0aW9uIHRleHRDb25zdGFudCh2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0RnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdiA9PSBudWxsID8gXCJcIiA6IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaCh2YWx1ZSA9PSBudWxsXG4gICAgICAgICAgPyB0ZXh0UmVtb3ZlIDogKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgPyB0ZXh0RnVuY3Rpb25cbiAgICAgICAgICA6IHRleHRDb25zdGFudCkodmFsdWUpKVxuICAgICAgOiB0aGlzLm5vZGUoKS50ZXh0Q29udGVudDtcbn1cbiIsImZ1bmN0aW9uIGh0bWxSZW1vdmUoKSB7XG4gIHRoaXMuaW5uZXJIVE1MID0gXCJcIjtcbn1cblxuZnVuY3Rpb24gaHRtbENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlubmVySFRNTCA9IHZhbHVlO1xuICB9O1xufVxuXG5mdW5jdGlvbiBodG1sRnVuY3Rpb24odmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB0aGlzLmlubmVySFRNTCA9IHYgPT0gbnVsbCA/IFwiXCIgOiB2O1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLmVhY2godmFsdWUgPT0gbnVsbFxuICAgICAgICAgID8gaHRtbFJlbW92ZSA6ICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gaHRtbEZ1bmN0aW9uXG4gICAgICAgICAgOiBodG1sQ29uc3RhbnQpKHZhbHVlKSlcbiAgICAgIDogdGhpcy5ub2RlKCkuaW5uZXJIVE1MO1xufVxuIiwiZnVuY3Rpb24gcmFpc2UoKSB7XG4gIGlmICh0aGlzLm5leHRTaWJsaW5nKSB0aGlzLnBhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGhpcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKHJhaXNlKTtcbn1cbiIsImZ1bmN0aW9uIGxvd2VyKCkge1xuICBpZiAodGhpcy5wcmV2aW91c1NpYmxpbmcpIHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcywgdGhpcy5wYXJlbnROb2RlLmZpcnN0Q2hpbGQpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuZWFjaChsb3dlcik7XG59XG4iLCJpbXBvcnQgY3JlYXRvciBmcm9tIFwiLi4vY3JlYXRvci5qc1wiO1xuaW1wb3J0IHNlbGVjdG9yIGZyb20gXCIuLi9zZWxlY3Rvci5qc1wiO1xuXG5mdW5jdGlvbiBjb25zdGFudE51bGwoKSB7XG4gIHJldHVybiBudWxsO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCBiZWZvcmUpIHtcbiAgdmFyIGNyZWF0ZSA9IHR5cGVvZiBuYW1lID09PSBcImZ1bmN0aW9uXCIgPyBuYW1lIDogY3JlYXRvcihuYW1lKSxcbiAgICAgIHNlbGVjdCA9IGJlZm9yZSA9PSBudWxsID8gY29uc3RhbnROdWxsIDogdHlwZW9mIGJlZm9yZSA9PT0gXCJmdW5jdGlvblwiID8gYmVmb3JlIDogc2VsZWN0b3IoYmVmb3JlKTtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmluc2VydEJlZm9yZShjcmVhdGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSwgc2VsZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgbnVsbCk7XG4gIH0pO1xufVxuIiwiZnVuY3Rpb24gcmVtb3ZlKCkge1xuICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICBpZiAocGFyZW50KSBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5lYWNoKHJlbW92ZSk7XG59XG4iLCJmdW5jdGlvbiBzZWxlY3Rpb25fY2xvbmVTaGFsbG93KCkge1xuICB2YXIgY2xvbmUgPSB0aGlzLmNsb25lTm9kZShmYWxzZSksIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcbiAgcmV0dXJuIHBhcmVudCA/IHBhcmVudC5pbnNlcnRCZWZvcmUoY2xvbmUsIHRoaXMubmV4dFNpYmxpbmcpIDogY2xvbmU7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdGlvbl9jbG9uZURlZXAoKSB7XG4gIHZhciBjbG9uZSA9IHRoaXMuY2xvbmVOb2RlKHRydWUpLCBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG4gIHJldHVybiBwYXJlbnQgPyBwYXJlbnQuaW5zZXJ0QmVmb3JlKGNsb25lLCB0aGlzLm5leHRTaWJsaW5nKSA6IGNsb25lO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihkZWVwKSB7XG4gIHJldHVybiB0aGlzLnNlbGVjdChkZWVwID8gc2VsZWN0aW9uX2Nsb25lRGVlcCA6IHNlbGVjdGlvbl9jbG9uZVNoYWxsb3cpO1xufVxuIiwiZnVuY3Rpb24gY29udGV4dExpc3RlbmVyKGxpc3RlbmVyKSB7XG4gIHJldHVybiBmdW5jdGlvbihldmVudCkge1xuICAgIGxpc3RlbmVyLmNhbGwodGhpcywgZXZlbnQsIHRoaXMuX19kYXRhX18pO1xuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZXMpIHtcbiAgcmV0dXJuIHR5cGVuYW1lcy50cmltKCkuc3BsaXQoL158XFxzKy8pLm1hcChmdW5jdGlvbih0KSB7XG4gICAgdmFyIG5hbWUgPSBcIlwiLCBpID0gdC5pbmRleE9mKFwiLlwiKTtcbiAgICBpZiAoaSA+PSAwKSBuYW1lID0gdC5zbGljZShpICsgMSksIHQgPSB0LnNsaWNlKDAsIGkpO1xuICAgIHJldHVybiB7dHlwZTogdCwgbmFtZTogbmFtZX07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBvblJlbW92ZSh0eXBlbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG9uID0gdGhpcy5fX29uO1xuICAgIGlmICghb24pIHJldHVybjtcbiAgICBmb3IgKHZhciBqID0gMCwgaSA9IC0xLCBtID0gb24ubGVuZ3RoLCBvOyBqIDwgbTsgKytqKSB7XG4gICAgICBpZiAobyA9IG9uW2pdLCAoIXR5cGVuYW1lLnR5cGUgfHwgby50eXBlID09PSB0eXBlbmFtZS50eXBlKSAmJiBvLm5hbWUgPT09IHR5cGVuYW1lLm5hbWUpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSwgby5saXN0ZW5lciwgby5vcHRpb25zKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uWysraV0gPSBvO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoKytpKSBvbi5sZW5ndGggPSBpO1xuICAgIGVsc2UgZGVsZXRlIHRoaXMuX19vbjtcbiAgfTtcbn1cblxuZnVuY3Rpb24gb25BZGQodHlwZW5hbWUsIHZhbHVlLCBvcHRpb25zKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgb24gPSB0aGlzLl9fb24sIG8sIGxpc3RlbmVyID0gY29udGV4dExpc3RlbmVyKHZhbHVlKTtcbiAgICBpZiAob24pIGZvciAodmFyIGogPSAwLCBtID0gb24ubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgICBpZiAoKG8gPSBvbltqXSkudHlwZSA9PT0gdHlwZW5hbWUudHlwZSAmJiBvLm5hbWUgPT09IHR5cGVuYW1lLm5hbWUpIHtcbiAgICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG8udHlwZSwgby5saXN0ZW5lciwgby5vcHRpb25zKTtcbiAgICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKG8udHlwZSwgby5saXN0ZW5lciA9IGxpc3RlbmVyLCBvLm9wdGlvbnMgPSBvcHRpb25zKTtcbiAgICAgICAgby52YWx1ZSA9IHZhbHVlO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcih0eXBlbmFtZS50eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gICAgbyA9IHt0eXBlOiB0eXBlbmFtZS50eXBlLCBuYW1lOiB0eXBlbmFtZS5uYW1lLCB2YWx1ZTogdmFsdWUsIGxpc3RlbmVyOiBsaXN0ZW5lciwgb3B0aW9uczogb3B0aW9uc307XG4gICAgaWYgKCFvbikgdGhpcy5fX29uID0gW29dO1xuICAgIGVsc2Ugb24ucHVzaChvKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odHlwZW5hbWUsIHZhbHVlLCBvcHRpb25zKSB7XG4gIHZhciB0eXBlbmFtZXMgPSBwYXJzZVR5cGVuYW1lcyh0eXBlbmFtZSArIFwiXCIpLCBpLCBuID0gdHlwZW5hbWVzLmxlbmd0aCwgdDtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgb24gPSB0aGlzLm5vZGUoKS5fX29uO1xuICAgIGlmIChvbikgZm9yICh2YXIgaiA9IDAsIG0gPSBvbi5sZW5ndGgsIG87IGogPCBtOyArK2opIHtcbiAgICAgIGZvciAoaSA9IDAsIG8gPSBvbltqXTsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAoKHQgPSB0eXBlbmFtZXNbaV0pLnR5cGUgPT09IG8udHlwZSAmJiB0Lm5hbWUgPT09IG8ubmFtZSkge1xuICAgICAgICAgIHJldHVybiBvLnZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIG9uID0gdmFsdWUgPyBvbkFkZCA6IG9uUmVtb3ZlO1xuICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB0aGlzLmVhY2gob24odHlwZW5hbWVzW2ldLCB2YWx1ZSwgb3B0aW9ucykpO1xuICByZXR1cm4gdGhpcztcbn1cbiIsImltcG9ydCBkZWZhdWx0VmlldyBmcm9tIFwiLi4vd2luZG93LmpzXCI7XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRXZlbnQobm9kZSwgdHlwZSwgcGFyYW1zKSB7XG4gIHZhciB3aW5kb3cgPSBkZWZhdWx0Vmlldyhub2RlKSxcbiAgICAgIGV2ZW50ID0gd2luZG93LkN1c3RvbUV2ZW50O1xuXG4gIGlmICh0eXBlb2YgZXZlbnQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGV2ZW50ID0gbmV3IGV2ZW50KHR5cGUsIHBhcmFtcyk7XG4gIH0gZWxzZSB7XG4gICAgZXZlbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKTtcbiAgICBpZiAocGFyYW1zKSBldmVudC5pbml0RXZlbnQodHlwZSwgcGFyYW1zLmJ1YmJsZXMsIHBhcmFtcy5jYW5jZWxhYmxlKSwgZXZlbnQuZGV0YWlsID0gcGFyYW1zLmRldGFpbDtcbiAgICBlbHNlIGV2ZW50LmluaXRFdmVudCh0eXBlLCBmYWxzZSwgZmFsc2UpO1xuICB9XG5cbiAgbm9kZS5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbn1cblxuZnVuY3Rpb24gZGlzcGF0Y2hDb25zdGFudCh0eXBlLCBwYXJhbXMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBkaXNwYXRjaEV2ZW50KHRoaXMsIHR5cGUsIHBhcmFtcyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRpc3BhdGNoRnVuY3Rpb24odHlwZSwgcGFyYW1zKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gZGlzcGF0Y2hFdmVudCh0aGlzLCB0eXBlLCBwYXJhbXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHR5cGUsIHBhcmFtcykge1xuICByZXR1cm4gdGhpcy5lYWNoKCh0eXBlb2YgcGFyYW1zID09PSBcImZ1bmN0aW9uXCJcbiAgICAgID8gZGlzcGF0Y2hGdW5jdGlvblxuICAgICAgOiBkaXNwYXRjaENvbnN0YW50KSh0eXBlLCBwYXJhbXMpKTtcbn1cbiIsImltcG9ydCBzZWxlY3Rpb25fc2VsZWN0IGZyb20gXCIuL3NlbGVjdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9zZWxlY3RBbGwgZnJvbSBcIi4vc2VsZWN0QWxsLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdENoaWxkIGZyb20gXCIuL3NlbGVjdENoaWxkLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3NlbGVjdENoaWxkcmVuIGZyb20gXCIuL3NlbGVjdENoaWxkcmVuLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2ZpbHRlciBmcm9tIFwiLi9maWx0ZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGF0YSBmcm9tIFwiLi9kYXRhLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VudGVyIGZyb20gXCIuL2VudGVyLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2V4aXQgZnJvbSBcIi4vZXhpdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9qb2luIGZyb20gXCIuL2pvaW4uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbWVyZ2UgZnJvbSBcIi4vbWVyZ2UuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fb3JkZXIgZnJvbSBcIi4vb3JkZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc29ydCBmcm9tIFwiLi9zb3J0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2NhbGwgZnJvbSBcIi4vY2FsbC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlcyBmcm9tIFwiLi9ub2Rlcy5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9ub2RlIGZyb20gXCIuL25vZGUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc2l6ZSBmcm9tIFwiLi9zaXplLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VtcHR5IGZyb20gXCIuL2VtcHR5LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX2VhY2ggZnJvbSBcIi4vZWFjaC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9hdHRyIGZyb20gXCIuL2F0dHIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fc3R5bGUgZnJvbSBcIi4vc3R5bGUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fcHJvcGVydHkgZnJvbSBcIi4vcHJvcGVydHkuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xhc3NlZCBmcm9tIFwiLi9jbGFzc2VkLmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3RleHQgZnJvbSBcIi4vdGV4dC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9odG1sIGZyb20gXCIuL2h0bWwuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fcmFpc2UgZnJvbSBcIi4vcmFpc2UuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fbG93ZXIgZnJvbSBcIi4vbG93ZXIuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fYXBwZW5kIGZyb20gXCIuL2FwcGVuZC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl9pbnNlcnQgZnJvbSBcIi4vaW5zZXJ0LmpzXCI7XG5pbXBvcnQgc2VsZWN0aW9uX3JlbW92ZSBmcm9tIFwiLi9yZW1vdmUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fY2xvbmUgZnJvbSBcIi4vY2xvbmUuanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGF0dW0gZnJvbSBcIi4vZGF0dW0uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fb24gZnJvbSBcIi4vb24uanNcIjtcbmltcG9ydCBzZWxlY3Rpb25fZGlzcGF0Y2ggZnJvbSBcIi4vZGlzcGF0Y2guanNcIjtcbmltcG9ydCBzZWxlY3Rpb25faXRlcmF0b3IgZnJvbSBcIi4vaXRlcmF0b3IuanNcIjtcblxuZXhwb3J0IHZhciByb290ID0gW251bGxdO1xuXG5leHBvcnQgZnVuY3Rpb24gU2VsZWN0aW9uKGdyb3VwcywgcGFyZW50cykge1xuICB0aGlzLl9ncm91cHMgPSBncm91cHM7XG4gIHRoaXMuX3BhcmVudHMgPSBwYXJlbnRzO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKFtbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XV0sIHJvb3QpO1xufVxuXG5mdW5jdGlvbiBzZWxlY3Rpb25fc2VsZWN0aW9uKCkge1xuICByZXR1cm4gdGhpcztcbn1cblxuU2VsZWN0aW9uLnByb3RvdHlwZSA9IHNlbGVjdGlvbi5wcm90b3R5cGUgPSB7XG4gIGNvbnN0cnVjdG9yOiBTZWxlY3Rpb24sXG4gIHNlbGVjdDogc2VsZWN0aW9uX3NlbGVjdCxcbiAgc2VsZWN0QWxsOiBzZWxlY3Rpb25fc2VsZWN0QWxsLFxuICBzZWxlY3RDaGlsZDogc2VsZWN0aW9uX3NlbGVjdENoaWxkLFxuICBzZWxlY3RDaGlsZHJlbjogc2VsZWN0aW9uX3NlbGVjdENoaWxkcmVuLFxuICBmaWx0ZXI6IHNlbGVjdGlvbl9maWx0ZXIsXG4gIGRhdGE6IHNlbGVjdGlvbl9kYXRhLFxuICBlbnRlcjogc2VsZWN0aW9uX2VudGVyLFxuICBleGl0OiBzZWxlY3Rpb25fZXhpdCxcbiAgam9pbjogc2VsZWN0aW9uX2pvaW4sXG4gIG1lcmdlOiBzZWxlY3Rpb25fbWVyZ2UsXG4gIHNlbGVjdGlvbjogc2VsZWN0aW9uX3NlbGVjdGlvbixcbiAgb3JkZXI6IHNlbGVjdGlvbl9vcmRlcixcbiAgc29ydDogc2VsZWN0aW9uX3NvcnQsXG4gIGNhbGw6IHNlbGVjdGlvbl9jYWxsLFxuICBub2Rlczogc2VsZWN0aW9uX25vZGVzLFxuICBub2RlOiBzZWxlY3Rpb25fbm9kZSxcbiAgc2l6ZTogc2VsZWN0aW9uX3NpemUsXG4gIGVtcHR5OiBzZWxlY3Rpb25fZW1wdHksXG4gIGVhY2g6IHNlbGVjdGlvbl9lYWNoLFxuICBhdHRyOiBzZWxlY3Rpb25fYXR0cixcbiAgc3R5bGU6IHNlbGVjdGlvbl9zdHlsZSxcbiAgcHJvcGVydHk6IHNlbGVjdGlvbl9wcm9wZXJ0eSxcbiAgY2xhc3NlZDogc2VsZWN0aW9uX2NsYXNzZWQsXG4gIHRleHQ6IHNlbGVjdGlvbl90ZXh0LFxuICBodG1sOiBzZWxlY3Rpb25faHRtbCxcbiAgcmFpc2U6IHNlbGVjdGlvbl9yYWlzZSxcbiAgbG93ZXI6IHNlbGVjdGlvbl9sb3dlcixcbiAgYXBwZW5kOiBzZWxlY3Rpb25fYXBwZW5kLFxuICBpbnNlcnQ6IHNlbGVjdGlvbl9pbnNlcnQsXG4gIHJlbW92ZTogc2VsZWN0aW9uX3JlbW92ZSxcbiAgY2xvbmU6IHNlbGVjdGlvbl9jbG9uZSxcbiAgZGF0dW06IHNlbGVjdGlvbl9kYXR1bSxcbiAgb246IHNlbGVjdGlvbl9vbixcbiAgZGlzcGF0Y2g6IHNlbGVjdGlvbl9kaXNwYXRjaCxcbiAgW1N5bWJvbC5pdGVyYXRvcl06IHNlbGVjdGlvbl9pdGVyYXRvclxufTtcblxuZXhwb3J0IGRlZmF1bHQgc2VsZWN0aW9uO1xuIiwiaW1wb3J0IHtTZWxlY3Rpb24sIHJvb3R9IGZyb20gXCIuL3NlbGVjdGlvbi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzZWxlY3Rvcikge1xuICByZXR1cm4gdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiXG4gICAgICA/IG5ldyBTZWxlY3Rpb24oW1tkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKV1dLCBbZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XSlcbiAgICAgIDogbmV3IFNlbGVjdGlvbihbW3NlbGVjdG9yXV0sIHJvb3QpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29uc3RydWN0b3IsIGZhY3RvcnksIHByb3RvdHlwZSkge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBmYWN0b3J5LnByb3RvdHlwZSA9IHByb3RvdHlwZTtcbiAgcHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRlbmQocGFyZW50LCBkZWZpbml0aW9uKSB7XG4gIHZhciBwcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHBhcmVudC5wcm90b3R5cGUpO1xuICBmb3IgKHZhciBrZXkgaW4gZGVmaW5pdGlvbikgcHJvdG90eXBlW2tleV0gPSBkZWZpbml0aW9uW2tleV07XG4gIHJldHVybiBwcm90b3R5cGU7XG59XG4iLCJpbXBvcnQgZGVmaW5lLCB7ZXh0ZW5kfSBmcm9tIFwiLi9kZWZpbmUuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIENvbG9yKCkge31cblxuZXhwb3J0IHZhciBkYXJrZXIgPSAwLjc7XG5leHBvcnQgdmFyIGJyaWdodGVyID0gMSAvIGRhcmtlcjtcblxudmFyIHJlSSA9IFwiXFxcXHMqKFsrLV0/XFxcXGQrKVxcXFxzKlwiLFxuICAgIHJlTiA9IFwiXFxcXHMqKFsrLV0/XFxcXGQqXFxcXC4/XFxcXGQrKD86W2VFXVsrLV0/XFxcXGQrKT8pXFxcXHMqXCIsXG4gICAgcmVQID0gXCJcXFxccyooWystXT9cXFxcZCpcXFxcLj9cXFxcZCsoPzpbZUVdWystXT9cXFxcZCspPyklXFxcXHMqXCIsXG4gICAgcmVIZXggPSAvXiMoWzAtOWEtZl17Myw4fSkkLyxcbiAgICByZVJnYkludGVnZXIgPSBuZXcgUmVnRXhwKFwiXnJnYlxcXFwoXCIgKyBbcmVJLCByZUksIHJlSV0gKyBcIlxcXFwpJFwiKSxcbiAgICByZVJnYlBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXnJnYlxcXFwoXCIgKyBbcmVQLCByZVAsIHJlUF0gKyBcIlxcXFwpJFwiKSxcbiAgICByZVJnYmFJbnRlZ2VyID0gbmV3IFJlZ0V4cChcIl5yZ2JhXFxcXChcIiArIFtyZUksIHJlSSwgcmVJLCByZU5dICsgXCJcXFxcKSRcIiksXG4gICAgcmVSZ2JhUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJecmdiYVxcXFwoXCIgKyBbcmVQLCByZVAsIHJlUCwgcmVOXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlSHNsUGVyY2VudCA9IG5ldyBSZWdFeHAoXCJeaHNsXFxcXChcIiArIFtyZU4sIHJlUCwgcmVQXSArIFwiXFxcXCkkXCIpLFxuICAgIHJlSHNsYVBlcmNlbnQgPSBuZXcgUmVnRXhwKFwiXmhzbGFcXFxcKFwiICsgW3JlTiwgcmVQLCByZVAsIHJlTl0gKyBcIlxcXFwpJFwiKTtcblxudmFyIG5hbWVkID0ge1xuICBhbGljZWJsdWU6IDB4ZjBmOGZmLFxuICBhbnRpcXVld2hpdGU6IDB4ZmFlYmQ3LFxuICBhcXVhOiAweDAwZmZmZixcbiAgYXF1YW1hcmluZTogMHg3ZmZmZDQsXG4gIGF6dXJlOiAweGYwZmZmZixcbiAgYmVpZ2U6IDB4ZjVmNWRjLFxuICBiaXNxdWU6IDB4ZmZlNGM0LFxuICBibGFjazogMHgwMDAwMDAsXG4gIGJsYW5jaGVkYWxtb25kOiAweGZmZWJjZCxcbiAgYmx1ZTogMHgwMDAwZmYsXG4gIGJsdWV2aW9sZXQ6IDB4OGEyYmUyLFxuICBicm93bjogMHhhNTJhMmEsXG4gIGJ1cmx5d29vZDogMHhkZWI4ODcsXG4gIGNhZGV0Ymx1ZTogMHg1ZjllYTAsXG4gIGNoYXJ0cmV1c2U6IDB4N2ZmZjAwLFxuICBjaG9jb2xhdGU6IDB4ZDI2OTFlLFxuICBjb3JhbDogMHhmZjdmNTAsXG4gIGNvcm5mbG93ZXJibHVlOiAweDY0OTVlZCxcbiAgY29ybnNpbGs6IDB4ZmZmOGRjLFxuICBjcmltc29uOiAweGRjMTQzYyxcbiAgY3lhbjogMHgwMGZmZmYsXG4gIGRhcmtibHVlOiAweDAwMDA4YixcbiAgZGFya2N5YW46IDB4MDA4YjhiLFxuICBkYXJrZ29sZGVucm9kOiAweGI4ODYwYixcbiAgZGFya2dyYXk6IDB4YTlhOWE5LFxuICBkYXJrZ3JlZW46IDB4MDA2NDAwLFxuICBkYXJrZ3JleTogMHhhOWE5YTksXG4gIGRhcmtraGFraTogMHhiZGI3NmIsXG4gIGRhcmttYWdlbnRhOiAweDhiMDA4YixcbiAgZGFya29saXZlZ3JlZW46IDB4NTU2YjJmLFxuICBkYXJrb3JhbmdlOiAweGZmOGMwMCxcbiAgZGFya29yY2hpZDogMHg5OTMyY2MsXG4gIGRhcmtyZWQ6IDB4OGIwMDAwLFxuICBkYXJrc2FsbW9uOiAweGU5OTY3YSxcbiAgZGFya3NlYWdyZWVuOiAweDhmYmM4ZixcbiAgZGFya3NsYXRlYmx1ZTogMHg0ODNkOGIsXG4gIGRhcmtzbGF0ZWdyYXk6IDB4MmY0ZjRmLFxuICBkYXJrc2xhdGVncmV5OiAweDJmNGY0ZixcbiAgZGFya3R1cnF1b2lzZTogMHgwMGNlZDEsXG4gIGRhcmt2aW9sZXQ6IDB4OTQwMGQzLFxuICBkZWVwcGluazogMHhmZjE0OTMsXG4gIGRlZXBza3libHVlOiAweDAwYmZmZixcbiAgZGltZ3JheTogMHg2OTY5NjksXG4gIGRpbWdyZXk6IDB4Njk2OTY5LFxuICBkb2RnZXJibHVlOiAweDFlOTBmZixcbiAgZmlyZWJyaWNrOiAweGIyMjIyMixcbiAgZmxvcmFsd2hpdGU6IDB4ZmZmYWYwLFxuICBmb3Jlc3RncmVlbjogMHgyMjhiMjIsXG4gIGZ1Y2hzaWE6IDB4ZmYwMGZmLFxuICBnYWluc2Jvcm86IDB4ZGNkY2RjLFxuICBnaG9zdHdoaXRlOiAweGY4ZjhmZixcbiAgZ29sZDogMHhmZmQ3MDAsXG4gIGdvbGRlbnJvZDogMHhkYWE1MjAsXG4gIGdyYXk6IDB4ODA4MDgwLFxuICBncmVlbjogMHgwMDgwMDAsXG4gIGdyZWVueWVsbG93OiAweGFkZmYyZixcbiAgZ3JleTogMHg4MDgwODAsXG4gIGhvbmV5ZGV3OiAweGYwZmZmMCxcbiAgaG90cGluazogMHhmZjY5YjQsXG4gIGluZGlhbnJlZDogMHhjZDVjNWMsXG4gIGluZGlnbzogMHg0YjAwODIsXG4gIGl2b3J5OiAweGZmZmZmMCxcbiAga2hha2k6IDB4ZjBlNjhjLFxuICBsYXZlbmRlcjogMHhlNmU2ZmEsXG4gIGxhdmVuZGVyYmx1c2g6IDB4ZmZmMGY1LFxuICBsYXduZ3JlZW46IDB4N2NmYzAwLFxuICBsZW1vbmNoaWZmb246IDB4ZmZmYWNkLFxuICBsaWdodGJsdWU6IDB4YWRkOGU2LFxuICBsaWdodGNvcmFsOiAweGYwODA4MCxcbiAgbGlnaHRjeWFuOiAweGUwZmZmZixcbiAgbGlnaHRnb2xkZW5yb2R5ZWxsb3c6IDB4ZmFmYWQyLFxuICBsaWdodGdyYXk6IDB4ZDNkM2QzLFxuICBsaWdodGdyZWVuOiAweDkwZWU5MCxcbiAgbGlnaHRncmV5OiAweGQzZDNkMyxcbiAgbGlnaHRwaW5rOiAweGZmYjZjMSxcbiAgbGlnaHRzYWxtb246IDB4ZmZhMDdhLFxuICBsaWdodHNlYWdyZWVuOiAweDIwYjJhYSxcbiAgbGlnaHRza3libHVlOiAweDg3Y2VmYSxcbiAgbGlnaHRzbGF0ZWdyYXk6IDB4Nzc4ODk5LFxuICBsaWdodHNsYXRlZ3JleTogMHg3Nzg4OTksXG4gIGxpZ2h0c3RlZWxibHVlOiAweGIwYzRkZSxcbiAgbGlnaHR5ZWxsb3c6IDB4ZmZmZmUwLFxuICBsaW1lOiAweDAwZmYwMCxcbiAgbGltZWdyZWVuOiAweDMyY2QzMixcbiAgbGluZW46IDB4ZmFmMGU2LFxuICBtYWdlbnRhOiAweGZmMDBmZixcbiAgbWFyb29uOiAweDgwMDAwMCxcbiAgbWVkaXVtYXF1YW1hcmluZTogMHg2NmNkYWEsXG4gIG1lZGl1bWJsdWU6IDB4MDAwMGNkLFxuICBtZWRpdW1vcmNoaWQ6IDB4YmE1NWQzLFxuICBtZWRpdW1wdXJwbGU6IDB4OTM3MGRiLFxuICBtZWRpdW1zZWFncmVlbjogMHgzY2IzNzEsXG4gIG1lZGl1bXNsYXRlYmx1ZTogMHg3YjY4ZWUsXG4gIG1lZGl1bXNwcmluZ2dyZWVuOiAweDAwZmE5YSxcbiAgbWVkaXVtdHVycXVvaXNlOiAweDQ4ZDFjYyxcbiAgbWVkaXVtdmlvbGV0cmVkOiAweGM3MTU4NSxcbiAgbWlkbmlnaHRibHVlOiAweDE5MTk3MCxcbiAgbWludGNyZWFtOiAweGY1ZmZmYSxcbiAgbWlzdHlyb3NlOiAweGZmZTRlMSxcbiAgbW9jY2FzaW46IDB4ZmZlNGI1LFxuICBuYXZham93aGl0ZTogMHhmZmRlYWQsXG4gIG5hdnk6IDB4MDAwMDgwLFxuICBvbGRsYWNlOiAweGZkZjVlNixcbiAgb2xpdmU6IDB4ODA4MDAwLFxuICBvbGl2ZWRyYWI6IDB4NmI4ZTIzLFxuICBvcmFuZ2U6IDB4ZmZhNTAwLFxuICBvcmFuZ2VyZWQ6IDB4ZmY0NTAwLFxuICBvcmNoaWQ6IDB4ZGE3MGQ2LFxuICBwYWxlZ29sZGVucm9kOiAweGVlZThhYSxcbiAgcGFsZWdyZWVuOiAweDk4ZmI5OCxcbiAgcGFsZXR1cnF1b2lzZTogMHhhZmVlZWUsXG4gIHBhbGV2aW9sZXRyZWQ6IDB4ZGI3MDkzLFxuICBwYXBheWF3aGlwOiAweGZmZWZkNSxcbiAgcGVhY2hwdWZmOiAweGZmZGFiOSxcbiAgcGVydTogMHhjZDg1M2YsXG4gIHBpbms6IDB4ZmZjMGNiLFxuICBwbHVtOiAweGRkYTBkZCxcbiAgcG93ZGVyYmx1ZTogMHhiMGUwZTYsXG4gIHB1cnBsZTogMHg4MDAwODAsXG4gIHJlYmVjY2FwdXJwbGU6IDB4NjYzMzk5LFxuICByZWQ6IDB4ZmYwMDAwLFxuICByb3N5YnJvd246IDB4YmM4ZjhmLFxuICByb3lhbGJsdWU6IDB4NDE2OWUxLFxuICBzYWRkbGVicm93bjogMHg4YjQ1MTMsXG4gIHNhbG1vbjogMHhmYTgwNzIsXG4gIHNhbmR5YnJvd246IDB4ZjRhNDYwLFxuICBzZWFncmVlbjogMHgyZThiNTcsXG4gIHNlYXNoZWxsOiAweGZmZjVlZSxcbiAgc2llbm5hOiAweGEwNTIyZCxcbiAgc2lsdmVyOiAweGMwYzBjMCxcbiAgc2t5Ymx1ZTogMHg4N2NlZWIsXG4gIHNsYXRlYmx1ZTogMHg2YTVhY2QsXG4gIHNsYXRlZ3JheTogMHg3MDgwOTAsXG4gIHNsYXRlZ3JleTogMHg3MDgwOTAsXG4gIHNub3c6IDB4ZmZmYWZhLFxuICBzcHJpbmdncmVlbjogMHgwMGZmN2YsXG4gIHN0ZWVsYmx1ZTogMHg0NjgyYjQsXG4gIHRhbjogMHhkMmI0OGMsXG4gIHRlYWw6IDB4MDA4MDgwLFxuICB0aGlzdGxlOiAweGQ4YmZkOCxcbiAgdG9tYXRvOiAweGZmNjM0NyxcbiAgdHVycXVvaXNlOiAweDQwZTBkMCxcbiAgdmlvbGV0OiAweGVlODJlZSxcbiAgd2hlYXQ6IDB4ZjVkZWIzLFxuICB3aGl0ZTogMHhmZmZmZmYsXG4gIHdoaXRlc21va2U6IDB4ZjVmNWY1LFxuICB5ZWxsb3c6IDB4ZmZmZjAwLFxuICB5ZWxsb3dncmVlbjogMHg5YWNkMzJcbn07XG5cbmRlZmluZShDb2xvciwgY29sb3IsIHtcbiAgY29weTogZnVuY3Rpb24oY2hhbm5lbHMpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgdGhpcy5jb25zdHJ1Y3RvciwgdGhpcywgY2hhbm5lbHMpO1xuICB9LFxuICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMucmdiKCkuZGlzcGxheWFibGUoKTtcbiAgfSxcbiAgaGV4OiBjb2xvcl9mb3JtYXRIZXgsIC8vIERlcHJlY2F0ZWQhIFVzZSBjb2xvci5mb3JtYXRIZXguXG4gIGZvcm1hdEhleDogY29sb3JfZm9ybWF0SGV4LFxuICBmb3JtYXRIc2w6IGNvbG9yX2Zvcm1hdEhzbCxcbiAgZm9ybWF0UmdiOiBjb2xvcl9mb3JtYXRSZ2IsXG4gIHRvU3RyaW5nOiBjb2xvcl9mb3JtYXRSZ2Jcbn0pO1xuXG5mdW5jdGlvbiBjb2xvcl9mb3JtYXRIZXgoKSB7XG4gIHJldHVybiB0aGlzLnJnYigpLmZvcm1hdEhleCgpO1xufVxuXG5mdW5jdGlvbiBjb2xvcl9mb3JtYXRIc2woKSB7XG4gIHJldHVybiBoc2xDb252ZXJ0KHRoaXMpLmZvcm1hdEhzbCgpO1xufVxuXG5mdW5jdGlvbiBjb2xvcl9mb3JtYXRSZ2IoKSB7XG4gIHJldHVybiB0aGlzLnJnYigpLmZvcm1hdFJnYigpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb2xvcihmb3JtYXQpIHtcbiAgdmFyIG0sIGw7XG4gIGZvcm1hdCA9IChmb3JtYXQgKyBcIlwiKS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIChtID0gcmVIZXguZXhlYyhmb3JtYXQpKSA/IChsID0gbVsxXS5sZW5ndGgsIG0gPSBwYXJzZUludChtWzFdLCAxNiksIGwgPT09IDYgPyByZ2JuKG0pIC8vICNmZjAwMDBcbiAgICAgIDogbCA9PT0gMyA/IG5ldyBSZ2IoKG0gPj4gOCAmIDB4ZikgfCAobSA+PiA0ICYgMHhmMCksIChtID4+IDQgJiAweGYpIHwgKG0gJiAweGYwKSwgKChtICYgMHhmKSA8PCA0KSB8IChtICYgMHhmKSwgMSkgLy8gI2YwMFxuICAgICAgOiBsID09PSA4ID8gcmdiYShtID4+IDI0ICYgMHhmZiwgbSA+PiAxNiAmIDB4ZmYsIG0gPj4gOCAmIDB4ZmYsIChtICYgMHhmZikgLyAweGZmKSAvLyAjZmYwMDAwMDBcbiAgICAgIDogbCA9PT0gNCA/IHJnYmEoKG0gPj4gMTIgJiAweGYpIHwgKG0gPj4gOCAmIDB4ZjApLCAobSA+PiA4ICYgMHhmKSB8IChtID4+IDQgJiAweGYwKSwgKG0gPj4gNCAmIDB4ZikgfCAobSAmIDB4ZjApLCAoKChtICYgMHhmKSA8PCA0KSB8IChtICYgMHhmKSkgLyAweGZmKSAvLyAjZjAwMFxuICAgICAgOiBudWxsKSAvLyBpbnZhbGlkIGhleFxuICAgICAgOiAobSA9IHJlUmdiSW50ZWdlci5leGVjKGZvcm1hdCkpID8gbmV3IFJnYihtWzFdLCBtWzJdLCBtWzNdLCAxKSAvLyByZ2IoMjU1LCAwLCAwKVxuICAgICAgOiAobSA9IHJlUmdiUGVyY2VudC5leGVjKGZvcm1hdCkpID8gbmV3IFJnYihtWzFdICogMjU1IC8gMTAwLCBtWzJdICogMjU1IC8gMTAwLCBtWzNdICogMjU1IC8gMTAwLCAxKSAvLyByZ2IoMTAwJSwgMCUsIDAlKVxuICAgICAgOiAobSA9IHJlUmdiYUludGVnZXIuZXhlYyhmb3JtYXQpKSA/IHJnYmEobVsxXSwgbVsyXSwgbVszXSwgbVs0XSkgLy8gcmdiYSgyNTUsIDAsIDAsIDEpXG4gICAgICA6IChtID0gcmVSZ2JhUGVyY2VudC5leGVjKGZvcm1hdCkpID8gcmdiYShtWzFdICogMjU1IC8gMTAwLCBtWzJdICogMjU1IC8gMTAwLCBtWzNdICogMjU1IC8gMTAwLCBtWzRdKSAvLyByZ2IoMTAwJSwgMCUsIDAlLCAxKVxuICAgICAgOiAobSA9IHJlSHNsUGVyY2VudC5leGVjKGZvcm1hdCkpID8gaHNsYShtWzFdLCBtWzJdIC8gMTAwLCBtWzNdIC8gMTAwLCAxKSAvLyBoc2woMTIwLCA1MCUsIDUwJSlcbiAgICAgIDogKG0gPSByZUhzbGFQZXJjZW50LmV4ZWMoZm9ybWF0KSkgPyBoc2xhKG1bMV0sIG1bMl0gLyAxMDAsIG1bM10gLyAxMDAsIG1bNF0pIC8vIGhzbGEoMTIwLCA1MCUsIDUwJSwgMSlcbiAgICAgIDogbmFtZWQuaGFzT3duUHJvcGVydHkoZm9ybWF0KSA/IHJnYm4obmFtZWRbZm9ybWF0XSkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIDogZm9ybWF0ID09PSBcInRyYW5zcGFyZW50XCIgPyBuZXcgUmdiKE5hTiwgTmFOLCBOYU4sIDApXG4gICAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHJnYm4obikge1xuICByZXR1cm4gbmV3IFJnYihuID4+IDE2ICYgMHhmZiwgbiA+PiA4ICYgMHhmZiwgbiAmIDB4ZmYsIDEpO1xufVxuXG5mdW5jdGlvbiByZ2JhKHIsIGcsIGIsIGEpIHtcbiAgaWYgKGEgPD0gMCkgciA9IGcgPSBiID0gTmFOO1xuICByZXR1cm4gbmV3IFJnYihyLCBnLCBiLCBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJnYkNvbnZlcnQobykge1xuICBpZiAoIShvIGluc3RhbmNlb2YgQ29sb3IpKSBvID0gY29sb3Iobyk7XG4gIGlmICghbykgcmV0dXJuIG5ldyBSZ2I7XG4gIG8gPSBvLnJnYigpO1xuICByZXR1cm4gbmV3IFJnYihvLnIsIG8uZywgby5iLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmdiKHIsIGcsIGIsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyByZ2JDb252ZXJ0KHIpIDogbmV3IFJnYihyLCBnLCBiLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBSZ2IociwgZywgYiwgb3BhY2l0eSkge1xuICB0aGlzLnIgPSArcjtcbiAgdGhpcy5nID0gK2c7XG4gIHRoaXMuYiA9ICtiO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKFJnYiwgcmdiLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICBrID0gayA9PSBudWxsID8gYnJpZ2h0ZXIgOiBNYXRoLnBvdyhicmlnaHRlciwgayk7XG4gICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBSZ2IodGhpcy5yICogaywgdGhpcy5nICogaywgdGhpcy5iICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSxcbiAgZGlzcGxheWFibGU6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiAoLTAuNSA8PSB0aGlzLnIgJiYgdGhpcy5yIDwgMjU1LjUpXG4gICAgICAgICYmICgtMC41IDw9IHRoaXMuZyAmJiB0aGlzLmcgPCAyNTUuNSlcbiAgICAgICAgJiYgKC0wLjUgPD0gdGhpcy5iICYmIHRoaXMuYiA8IDI1NS41KVxuICAgICAgICAmJiAoMCA8PSB0aGlzLm9wYWNpdHkgJiYgdGhpcy5vcGFjaXR5IDw9IDEpO1xuICB9LFxuICBoZXg6IHJnYl9mb3JtYXRIZXgsIC8vIERlcHJlY2F0ZWQhIFVzZSBjb2xvci5mb3JtYXRIZXguXG4gIGZvcm1hdEhleDogcmdiX2Zvcm1hdEhleCxcbiAgZm9ybWF0UmdiOiByZ2JfZm9ybWF0UmdiLFxuICB0b1N0cmluZzogcmdiX2Zvcm1hdFJnYlxufSkpO1xuXG5mdW5jdGlvbiByZ2JfZm9ybWF0SGV4KCkge1xuICByZXR1cm4gXCIjXCIgKyBoZXgodGhpcy5yKSArIGhleCh0aGlzLmcpICsgaGV4KHRoaXMuYik7XG59XG5cbmZ1bmN0aW9uIHJnYl9mb3JtYXRSZ2IoKSB7XG4gIHZhciBhID0gdGhpcy5vcGFjaXR5OyBhID0gaXNOYU4oYSkgPyAxIDogTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgYSkpO1xuICByZXR1cm4gKGEgPT09IDEgPyBcInJnYihcIiA6IFwicmdiYShcIilcbiAgICAgICsgTWF0aC5tYXgoMCwgTWF0aC5taW4oMjU1LCBNYXRoLnJvdW5kKHRoaXMucikgfHwgMCkpICsgXCIsIFwiXG4gICAgICArIE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh0aGlzLmcpIHx8IDApKSArIFwiLCBcIlxuICAgICAgKyBNYXRoLm1heCgwLCBNYXRoLm1pbigyNTUsIE1hdGgucm91bmQodGhpcy5iKSB8fCAwKSlcbiAgICAgICsgKGEgPT09IDEgPyBcIilcIiA6IFwiLCBcIiArIGEgKyBcIilcIik7XG59XG5cbmZ1bmN0aW9uIGhleCh2YWx1ZSkge1xuICB2YWx1ZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDI1NSwgTWF0aC5yb3VuZCh2YWx1ZSkgfHwgMCkpO1xuICByZXR1cm4gKHZhbHVlIDwgMTYgPyBcIjBcIiA6IFwiXCIpICsgdmFsdWUudG9TdHJpbmcoMTYpO1xufVxuXG5mdW5jdGlvbiBoc2xhKGgsIHMsIGwsIGEpIHtcbiAgaWYgKGEgPD0gMCkgaCA9IHMgPSBsID0gTmFOO1xuICBlbHNlIGlmIChsIDw9IDAgfHwgbCA+PSAxKSBoID0gcyA9IE5hTjtcbiAgZWxzZSBpZiAocyA8PSAwKSBoID0gTmFOO1xuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhzbENvbnZlcnQobykge1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG5ldyBIc2woby5oLCBvLnMsIG8ubCwgby5vcGFjaXR5KTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIENvbG9yKSkgbyA9IGNvbG9yKG8pO1xuICBpZiAoIW8pIHJldHVybiBuZXcgSHNsO1xuICBpZiAobyBpbnN0YW5jZW9mIEhzbCkgcmV0dXJuIG87XG4gIG8gPSBvLnJnYigpO1xuICB2YXIgciA9IG8uciAvIDI1NSxcbiAgICAgIGcgPSBvLmcgLyAyNTUsXG4gICAgICBiID0gby5iIC8gMjU1LFxuICAgICAgbWluID0gTWF0aC5taW4ociwgZywgYiksXG4gICAgICBtYXggPSBNYXRoLm1heChyLCBnLCBiKSxcbiAgICAgIGggPSBOYU4sXG4gICAgICBzID0gbWF4IC0gbWluLFxuICAgICAgbCA9IChtYXggKyBtaW4pIC8gMjtcbiAgaWYgKHMpIHtcbiAgICBpZiAociA9PT0gbWF4KSBoID0gKGcgLSBiKSAvIHMgKyAoZyA8IGIpICogNjtcbiAgICBlbHNlIGlmIChnID09PSBtYXgpIGggPSAoYiAtIHIpIC8gcyArIDI7XG4gICAgZWxzZSBoID0gKHIgLSBnKSAvIHMgKyA0O1xuICAgIHMgLz0gbCA8IDAuNSA/IG1heCArIG1pbiA6IDIgLSBtYXggLSBtaW47XG4gICAgaCAqPSA2MDtcbiAgfSBlbHNlIHtcbiAgICBzID0gbCA+IDAgJiYgbCA8IDEgPyAwIDogaDtcbiAgfVxuICByZXR1cm4gbmV3IEhzbChoLCBzLCBsLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaHNsKGgsIHMsIGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoc2xDb252ZXJ0KGgpIDogbmV3IEhzbChoLCBzLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmZ1bmN0aW9uIEhzbChoLCBzLCBsLCBvcGFjaXR5KSB7XG4gIHRoaXMuaCA9ICtoO1xuICB0aGlzLnMgPSArcztcbiAgdGhpcy5sID0gK2w7XG4gIHRoaXMub3BhY2l0eSA9ICtvcGFjaXR5O1xufVxuXG5kZWZpbmUoSHNsLCBoc2wsIGV4dGVuZChDb2xvciwge1xuICBicmlnaHRlcjogZnVuY3Rpb24oaykge1xuICAgIGsgPSBrID09IG51bGwgPyBicmlnaHRlciA6IE1hdGgucG93KGJyaWdodGVyLCBrKTtcbiAgICByZXR1cm4gbmV3IEhzbCh0aGlzLmgsIHRoaXMucywgdGhpcy5sICogaywgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgZGFya2VyOiBmdW5jdGlvbihrKSB7XG4gICAgayA9IGsgPT0gbnVsbCA/IGRhcmtlciA6IE1hdGgucG93KGRhcmtlciwgayk7XG4gICAgcmV0dXJuIG5ldyBIc2wodGhpcy5oLCB0aGlzLnMsIHRoaXMubCAqIGssIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGggPSB0aGlzLmggJSAzNjAgKyAodGhpcy5oIDwgMCkgKiAzNjAsXG4gICAgICAgIHMgPSBpc05hTihoKSB8fCBpc05hTih0aGlzLnMpID8gMCA6IHRoaXMucyxcbiAgICAgICAgbCA9IHRoaXMubCxcbiAgICAgICAgbTIgPSBsICsgKGwgPCAwLjUgPyBsIDogMSAtIGwpICogcyxcbiAgICAgICAgbTEgPSAyICogbCAtIG0yO1xuICAgIHJldHVybiBuZXcgUmdiKFxuICAgICAgaHNsMnJnYihoID49IDI0MCA/IGggLSAyNDAgOiBoICsgMTIwLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoLCBtMSwgbTIpLFxuICAgICAgaHNsMnJnYihoIDwgMTIwID8gaCArIDI0MCA6IGggLSAxMjAsIG0xLCBtMiksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9LFxuICBkaXNwbGF5YWJsZTogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuICgwIDw9IHRoaXMucyAmJiB0aGlzLnMgPD0gMSB8fCBpc05hTih0aGlzLnMpKVxuICAgICAgICAmJiAoMCA8PSB0aGlzLmwgJiYgdGhpcy5sIDw9IDEpXG4gICAgICAgICYmICgwIDw9IHRoaXMub3BhY2l0eSAmJiB0aGlzLm9wYWNpdHkgPD0gMSk7XG4gIH0sXG4gIGZvcm1hdEhzbDogZnVuY3Rpb24oKSB7XG4gICAgdmFyIGEgPSB0aGlzLm9wYWNpdHk7IGEgPSBpc05hTihhKSA/IDEgOiBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCBhKSk7XG4gICAgcmV0dXJuIChhID09PSAxID8gXCJoc2woXCIgOiBcImhzbGEoXCIpXG4gICAgICAgICsgKHRoaXMuaCB8fCAwKSArIFwiLCBcIlxuICAgICAgICArICh0aGlzLnMgfHwgMCkgKiAxMDAgKyBcIiUsIFwiXG4gICAgICAgICsgKHRoaXMubCB8fCAwKSAqIDEwMCArIFwiJVwiXG4gICAgICAgICsgKGEgPT09IDEgPyBcIilcIiA6IFwiLCBcIiArIGEgKyBcIilcIik7XG4gIH1cbn0pKTtcblxuLyogRnJvbSBGdkQgMTMuMzcsIENTUyBDb2xvciBNb2R1bGUgTGV2ZWwgMyAqL1xuZnVuY3Rpb24gaHNsMnJnYihoLCBtMSwgbTIpIHtcbiAgcmV0dXJuIChoIDwgNjAgPyBtMSArIChtMiAtIG0xKSAqIGggLyA2MFxuICAgICAgOiBoIDwgMTgwID8gbTJcbiAgICAgIDogaCA8IDI0MCA/IG0xICsgKG0yIC0gbTEpICogKDI0MCAtIGgpIC8gNjBcbiAgICAgIDogbTEpICogMjU1O1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2VsZWN0b3IgZnJvbSBcIi4uL3NlbGVjdG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICBpZiAodHlwZW9mIHNlbGVjdCAhPT0gXCJmdW5jdGlvblwiKSBzZWxlY3QgPSBzZWxlY3RvcihzZWxlY3QpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIHN1Ym5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKG5vZGUgPSBncm91cFtpXSkgJiYgKHN1Ym5vZGUgPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpKSB7XG4gICAgICAgIGlmIChcIl9fZGF0YV9fXCIgaW4gbm9kZSkgc3Vibm9kZS5fX2RhdGFfXyA9IG5vZGUuX19kYXRhX187XG4gICAgICAgIHN1Ymdyb3VwW2ldID0gc3Vibm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFNlbGVjdGlvbihzdWJncm91cHMsIHRoaXMuX3BhcmVudHMpO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgYXJyYXkgZnJvbSBcIi4uL2FycmF5LmpzXCI7XG5pbXBvcnQgc2VsZWN0b3JBbGwgZnJvbSBcIi4uL3NlbGVjdG9yQWxsLmpzXCI7XG5cbmZ1bmN0aW9uIGFycmF5QWxsKHNlbGVjdCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGdyb3VwID0gc2VsZWN0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIGdyb3VwID09IG51bGwgPyBbXSA6IGFycmF5KGdyb3VwKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc2VsZWN0KSB7XG4gIGlmICh0eXBlb2Ygc2VsZWN0ID09PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IGFycmF5QWxsKHNlbGVjdCk7XG4gIGVsc2Ugc2VsZWN0ID0gc2VsZWN0b3JBbGwoc2VsZWN0KTtcblxuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIG0gPSBncm91cHMubGVuZ3RoLCBzdWJncm91cHMgPSBbXSwgcGFyZW50cyA9IFtdLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkge1xuICAgICAgICBzdWJncm91cHMucHVzaChzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCkpO1xuICAgICAgICBwYXJlbnRzLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24oc3ViZ3JvdXBzLCBwYXJlbnRzKTtcbn1cbiIsImltcG9ydCB7U2VsZWN0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IG1hdGNoZXIgZnJvbSBcIi4uL21hdGNoZXIuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obWF0Y2gpIHtcbiAgaWYgKHR5cGVvZiBtYXRjaCAhPT0gXCJmdW5jdGlvblwiKSBtYXRjaCA9IG1hdGNoZXIobWF0Y2gpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIHN1Ymdyb3VwcyA9IG5ldyBBcnJheShtKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgc3ViZ3JvdXAgPSBzdWJncm91cHNbal0gPSBbXSwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiBtYXRjaC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkge1xuICAgICAgICBzdWJncm91cC5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgU2VsZWN0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJpbXBvcnQgc3BhcnNlIGZyb20gXCIuL3NwYXJzZS5qc1wiO1xuaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IFNlbGVjdGlvbih0aGlzLl9leGl0IHx8IHRoaXMuX2dyb3Vwcy5tYXAoc3BhcnNlKSwgdGhpcy5fcGFyZW50cyk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihvbmVudGVyLCBvbnVwZGF0ZSwgb25leGl0KSB7XG4gIHZhciBlbnRlciA9IHRoaXMuZW50ZXIoKSwgdXBkYXRlID0gdGhpcywgZXhpdCA9IHRoaXMuZXhpdCgpO1xuICBlbnRlciA9IHR5cGVvZiBvbmVudGVyID09PSBcImZ1bmN0aW9uXCIgPyBvbmVudGVyKGVudGVyKSA6IGVudGVyLmFwcGVuZChvbmVudGVyICsgXCJcIik7XG4gIGlmIChvbnVwZGF0ZSAhPSBudWxsKSB1cGRhdGUgPSBvbnVwZGF0ZSh1cGRhdGUpO1xuICBpZiAob25leGl0ID09IG51bGwpIGV4aXQucmVtb3ZlKCk7IGVsc2Ugb25leGl0KGV4aXQpO1xuICByZXR1cm4gZW50ZXIgJiYgdXBkYXRlID8gZW50ZXIubWVyZ2UodXBkYXRlKS5vcmRlcigpIDogdXBkYXRlO1xufVxuIiwiaW1wb3J0IHtTZWxlY3Rpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdGlvbikge1xuICBpZiAoIShzZWxlY3Rpb24gaW5zdGFuY2VvZiBTZWxlY3Rpb24pKSB0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIG1lcmdlXCIpO1xuXG4gIGZvciAodmFyIGdyb3VwczAgPSB0aGlzLl9ncm91cHMsIGdyb3VwczEgPSBzZWxlY3Rpb24uX2dyb3VwcywgbTAgPSBncm91cHMwLmxlbmd0aCwgbTEgPSBncm91cHMxLmxlbmd0aCwgbSA9IE1hdGgubWluKG0wLCBtMSksIG1lcmdlcyA9IG5ldyBBcnJheShtMCksIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAwID0gZ3JvdXBzMFtqXSwgZ3JvdXAxID0gZ3JvdXBzMVtqXSwgbiA9IGdyb3VwMC5sZW5ndGgsIG1lcmdlID0gbWVyZ2VzW2pdID0gbmV3IEFycmF5KG4pLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cDBbaV0gfHwgZ3JvdXAxW2ldKSB7XG4gICAgICAgIG1lcmdlW2ldID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKDsgaiA8IG0wOyArK2opIHtcbiAgICBtZXJnZXNbal0gPSBncm91cHMwW2pdO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IC0xLCBtID0gZ3JvdXBzLmxlbmd0aDsgKytqIDwgbTspIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IGdyb3VwLmxlbmd0aCAtIDEsIG5leHQgPSBncm91cFtpXSwgbm9kZTsgLS1pID49IDA7KSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIGlmIChuZXh0ICYmIG5vZGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24obmV4dCkgXiA0KSBuZXh0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKG5vZGUsIG5leHQpO1xuICAgICAgICBuZXh0ID0gbm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgY2FsbGJhY2sgPSBhcmd1bWVudHNbMF07XG4gIGFyZ3VtZW50c1swXSA9IHRoaXM7XG4gIGNhbGxiYWNrLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XG4gIHJldHVybiB0aGlzO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiBBcnJheS5mcm9tKHRoaXMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBqID0gMCwgbSA9IGdyb3Vwcy5sZW5ndGg7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgaSA9IDAsIG4gPSBncm91cC5sZW5ndGg7IGkgPCBuOyArK2kpIHtcbiAgICAgIHZhciBub2RlID0gZ3JvdXBbaV07XG4gICAgICBpZiAobm9kZSkgcmV0dXJuIG5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgbGV0IHNpemUgPSAwO1xuICBmb3IgKGNvbnN0IG5vZGUgb2YgdGhpcykgKytzaXplOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG4gIHJldHVybiBzaXplO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oKSB7XG4gIHJldHVybiAhdGhpcy5ub2RlKCk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihjYWxsYmFjaykge1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgaiA9IDAsIG0gPSBncm91cHMubGVuZ3RoOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIGkgPSAwLCBuID0gZ3JvdXAubGVuZ3RoLCBub2RlOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSBjYWxsYmFjay5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cbiIsImltcG9ydCBjcmVhdG9yIGZyb20gXCIuLi9jcmVhdG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUpIHtcbiAgdmFyIGNyZWF0ZSA9IHR5cGVvZiBuYW1lID09PSBcImZ1bmN0aW9uXCIgPyBuYW1lIDogY3JlYXRvcihuYW1lKTtcbiAgcmV0dXJuIHRoaXMuc2VsZWN0KGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmFwcGVuZENoaWxkKGNyZWF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKTtcbiAgfSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aFxuICAgICAgPyB0aGlzLnByb3BlcnR5KFwiX19kYXRhX19cIiwgdmFsdWUpXG4gICAgICA6IHRoaXMubm9kZSgpLl9fZGF0YV9fO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24qKCkge1xuICBmb3IgKHZhciBncm91cHMgPSB0aGlzLl9ncm91cHMsIGogPSAwLCBtID0gZ3JvdXBzLmxlbmd0aDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBpID0gMCwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZTsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKG5vZGUgPSBncm91cFtpXSkgeWllbGQgbm9kZTtcbiAgICB9XG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCByYWRpYW5zID0gTWF0aC5QSSAvIDE4MDtcbmV4cG9ydCBjb25zdCBkZWdyZWVzID0gMTgwIC8gTWF0aC5QSTtcbiIsImltcG9ydCBkZWZpbmUsIHtleHRlbmR9IGZyb20gXCIuL2RlZmluZS5qc1wiO1xuaW1wb3J0IHtDb2xvciwgcmdiQ29udmVydCwgUmdifSBmcm9tIFwiLi9jb2xvci5qc1wiO1xuaW1wb3J0IHtkZWdyZWVzLCByYWRpYW5zfSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbi8vIGh0dHBzOi8vb2JzZXJ2YWJsZWhxLmNvbS9AbWJvc3RvY2svbGFiLWFuZC1yZ2JcbmNvbnN0IEsgPSAxOCxcbiAgICBYbiA9IDAuOTY0MjIsXG4gICAgWW4gPSAxLFxuICAgIFpuID0gMC44MjUyMSxcbiAgICB0MCA9IDQgLyAyOSxcbiAgICB0MSA9IDYgLyAyOSxcbiAgICB0MiA9IDMgKiB0MSAqIHQxLFxuICAgIHQzID0gdDEgKiB0MSAqIHQxO1xuXG5mdW5jdGlvbiBsYWJDb252ZXJ0KG8pIHtcbiAgaWYgKG8gaW5zdGFuY2VvZiBMYWIpIHJldHVybiBuZXcgTGFiKG8ubCwgby5hLCBvLmIsIG8ub3BhY2l0eSk7XG4gIGlmIChvIGluc3RhbmNlb2YgSGNsKSByZXR1cm4gaGNsMmxhYihvKTtcbiAgaWYgKCEobyBpbnN0YW5jZW9mIFJnYikpIG8gPSByZ2JDb252ZXJ0KG8pO1xuICB2YXIgciA9IHJnYjJscmdiKG8uciksXG4gICAgICBnID0gcmdiMmxyZ2Ioby5nKSxcbiAgICAgIGIgPSByZ2IybHJnYihvLmIpLFxuICAgICAgeSA9IHh5ejJsYWIoKDAuMjIyNTA0NSAqIHIgKyAwLjcxNjg3ODYgKiBnICsgMC4wNjA2MTY5ICogYikgLyBZbiksIHgsIHo7XG4gIGlmIChyID09PSBnICYmIGcgPT09IGIpIHggPSB6ID0geTsgZWxzZSB7XG4gICAgeCA9IHh5ejJsYWIoKDAuNDM2MDc0NyAqIHIgKyAwLjM4NTA2NDkgKiBnICsgMC4xNDMwODA0ICogYikgLyBYbik7XG4gICAgeiA9IHh5ejJsYWIoKDAuMDEzOTMyMiAqIHIgKyAwLjA5NzEwNDUgKiBnICsgMC43MTQxNzMzICogYikgLyBabik7XG4gIH1cbiAgcmV0dXJuIG5ldyBMYWIoMTE2ICogeSAtIDE2LCA1MDAgKiAoeCAtIHkpLCAyMDAgKiAoeSAtIHopLCBvLm9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ3JheShsLCBvcGFjaXR5KSB7XG4gIHJldHVybiBuZXcgTGFiKGwsIDAsIDAsIG9wYWNpdHkgPT0gbnVsbCA/IDEgOiBvcGFjaXR5KTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGFiKGwsIGEsIGIsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBsYWJDb252ZXJ0KGwpIDogbmV3IExhYihsLCBhLCBiLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBMYWIobCwgYSwgYiwgb3BhY2l0eSkge1xuICB0aGlzLmwgPSArbDtcbiAgdGhpcy5hID0gK2E7XG4gIHRoaXMuYiA9ICtiO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZGVmaW5lKExhYiwgbGFiLCBleHRlbmQoQ29sb3IsIHtcbiAgYnJpZ2h0ZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IExhYih0aGlzLmwgKyBLICogKGsgPT0gbnVsbCA/IDEgOiBrKSwgdGhpcy5hLCB0aGlzLmIsIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIGRhcmtlcjogZnVuY3Rpb24oaykge1xuICAgIHJldHVybiBuZXcgTGFiKHRoaXMubCAtIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLmEsIHRoaXMuYiwgdGhpcy5vcGFjaXR5KTtcbiAgfSxcbiAgcmdiOiBmdW5jdGlvbigpIHtcbiAgICB2YXIgeSA9ICh0aGlzLmwgKyAxNikgLyAxMTYsXG4gICAgICAgIHggPSBpc05hTih0aGlzLmEpID8geSA6IHkgKyB0aGlzLmEgLyA1MDAsXG4gICAgICAgIHogPSBpc05hTih0aGlzLmIpID8geSA6IHkgLSB0aGlzLmIgLyAyMDA7XG4gICAgeCA9IFhuICogbGFiMnh5eih4KTtcbiAgICB5ID0gWW4gKiBsYWIyeHl6KHkpO1xuICAgIHogPSBabiAqIGxhYjJ4eXooeik7XG4gICAgcmV0dXJuIG5ldyBSZ2IoXG4gICAgICBscmdiMnJnYiggMy4xMzM4NTYxICogeCAtIDEuNjE2ODY2NyAqIHkgLSAwLjQ5MDYxNDYgKiB6KSxcbiAgICAgIGxyZ2IycmdiKC0wLjk3ODc2ODQgKiB4ICsgMS45MTYxNDE1ICogeSArIDAuMDMzNDU0MCAqIHopLFxuICAgICAgbHJnYjJyZ2IoIDAuMDcxOTQ1MyAqIHggLSAwLjIyODk5MTQgKiB5ICsgMS40MDUyNDI3ICogeiksXG4gICAgICB0aGlzLm9wYWNpdHlcbiAgICApO1xuICB9XG59KSk7XG5cbmZ1bmN0aW9uIHh5ejJsYWIodCkge1xuICByZXR1cm4gdCA+IHQzID8gTWF0aC5wb3codCwgMSAvIDMpIDogdCAvIHQyICsgdDA7XG59XG5cbmZ1bmN0aW9uIGxhYjJ4eXoodCkge1xuICByZXR1cm4gdCA+IHQxID8gdCAqIHQgKiB0IDogdDIgKiAodCAtIHQwKTtcbn1cblxuZnVuY3Rpb24gbHJnYjJyZ2IoeCkge1xuICByZXR1cm4gMjU1ICogKHggPD0gMC4wMDMxMzA4ID8gMTIuOTIgKiB4IDogMS4wNTUgKiBNYXRoLnBvdyh4LCAxIC8gMi40KSAtIDAuMDU1KTtcbn1cblxuZnVuY3Rpb24gcmdiMmxyZ2IoeCkge1xuICByZXR1cm4gKHggLz0gMjU1KSA8PSAwLjA0MDQ1ID8geCAvIDEyLjkyIDogTWF0aC5wb3coKHggKyAwLjA1NSkgLyAxLjA1NSwgMi40KTtcbn1cblxuZnVuY3Rpb24gaGNsQ29udmVydChvKSB7XG4gIGlmIChvIGluc3RhbmNlb2YgSGNsKSByZXR1cm4gbmV3IEhjbChvLmgsIG8uYywgby5sLCBvLm9wYWNpdHkpO1xuICBpZiAoIShvIGluc3RhbmNlb2YgTGFiKSkgbyA9IGxhYkNvbnZlcnQobyk7XG4gIGlmIChvLmEgPT09IDAgJiYgby5iID09PSAwKSByZXR1cm4gbmV3IEhjbChOYU4sIDAgPCBvLmwgJiYgby5sIDwgMTAwID8gMCA6IE5hTiwgby5sLCBvLm9wYWNpdHkpO1xuICB2YXIgaCA9IE1hdGguYXRhbjIoby5iLCBvLmEpICogZGVncmVlcztcbiAgcmV0dXJuIG5ldyBIY2woaCA8IDAgPyBoICsgMzYwIDogaCwgTWF0aC5zcXJ0KG8uYSAqIG8uYSArIG8uYiAqIG8uYiksIG8ubCwgby5vcGFjaXR5KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxjaChsLCBjLCBoLCBvcGFjaXR5KSB7XG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID8gaGNsQ29udmVydChsKSA6IG5ldyBIY2woaCwgYywgbCwgb3BhY2l0eSA9PSBudWxsID8gMSA6IG9wYWNpdHkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaGNsKGgsIGMsIGwsIG9wYWNpdHkpIHtcbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgPyBoY2xDb252ZXJ0KGgpIDogbmV3IEhjbChoLCBjLCBsLCBvcGFjaXR5ID09IG51bGwgPyAxIDogb3BhY2l0eSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIY2woaCwgYywgbCwgb3BhY2l0eSkge1xuICB0aGlzLmggPSAraDtcbiAgdGhpcy5jID0gK2M7XG4gIHRoaXMubCA9ICtsO1xuICB0aGlzLm9wYWNpdHkgPSArb3BhY2l0eTtcbn1cblxuZnVuY3Rpb24gaGNsMmxhYihvKSB7XG4gIGlmIChpc05hTihvLmgpKSByZXR1cm4gbmV3IExhYihvLmwsIDAsIDAsIG8ub3BhY2l0eSk7XG4gIHZhciBoID0gby5oICogcmFkaWFucztcbiAgcmV0dXJuIG5ldyBMYWIoby5sLCBNYXRoLmNvcyhoKSAqIG8uYywgTWF0aC5zaW4oaCkgKiBvLmMsIG8ub3BhY2l0eSk7XG59XG5cbmRlZmluZShIY2wsIGhjbCwgZXh0ZW5kKENvbG9yLCB7XG4gIGJyaWdodGVyOiBmdW5jdGlvbihrKSB7XG4gICAgcmV0dXJuIG5ldyBIY2wodGhpcy5oLCB0aGlzLmMsIHRoaXMubCArIEsgKiAoayA9PSBudWxsID8gMSA6IGspLCB0aGlzLm9wYWNpdHkpO1xuICB9LFxuICBkYXJrZXI6IGZ1bmN0aW9uKGspIHtcbiAgICByZXR1cm4gbmV3IEhjbCh0aGlzLmgsIHRoaXMuYywgdGhpcy5sIC0gSyAqIChrID09IG51bGwgPyAxIDogayksIHRoaXMub3BhY2l0eSk7XG4gIH0sXG4gIHJnYjogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGhjbDJsYWIodGhpcykucmdiKCk7XG4gIH1cbn0pKTtcbiIsInZhciBmcmFtZSA9IDAsIC8vIGlzIGFuIGFuaW1hdGlvbiBmcmFtZSBwZW5kaW5nP1xuICAgIHRpbWVvdXQgPSAwLCAvLyBpcyBhIHRpbWVvdXQgcGVuZGluZz9cbiAgICBpbnRlcnZhbCA9IDAsIC8vIGFyZSBhbnkgdGltZXJzIGFjdGl2ZT9cbiAgICBwb2tlRGVsYXkgPSAxMDAwLCAvLyBob3cgZnJlcXVlbnRseSB3ZSBjaGVjayBmb3IgY2xvY2sgc2tld1xuICAgIHRhc2tIZWFkLFxuICAgIHRhc2tUYWlsLFxuICAgIGNsb2NrTGFzdCA9IDAsXG4gICAgY2xvY2tOb3cgPSAwLFxuICAgIGNsb2NrU2tldyA9IDAsXG4gICAgY2xvY2sgPSB0eXBlb2YgcGVyZm9ybWFuY2UgPT09IFwib2JqZWN0XCIgJiYgcGVyZm9ybWFuY2Uubm93ID8gcGVyZm9ybWFuY2UgOiBEYXRlLFxuICAgIHNldEZyYW1lID0gdHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIiAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdykgOiBmdW5jdGlvbihmKSB7IHNldFRpbWVvdXQoZiwgMTcpOyB9O1xuXG5leHBvcnQgZnVuY3Rpb24gbm93KCkge1xuICByZXR1cm4gY2xvY2tOb3cgfHwgKHNldEZyYW1lKGNsZWFyTm93KSwgY2xvY2tOb3cgPSBjbG9jay5ub3coKSArIGNsb2NrU2tldyk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyTm93KCkge1xuICBjbG9ja05vdyA9IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBUaW1lcigpIHtcbiAgdGhpcy5fY2FsbCA9XG4gIHRoaXMuX3RpbWUgPVxuICB0aGlzLl9uZXh0ID0gbnVsbDtcbn1cblxuVGltZXIucHJvdG90eXBlID0gdGltZXIucHJvdG90eXBlID0ge1xuICBjb25zdHJ1Y3RvcjogVGltZXIsXG4gIHJlc3RhcnQ6IGZ1bmN0aW9uKGNhbGxiYWNrLCBkZWxheSwgdGltZSkge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcImNhbGxiYWNrIGlzIG5vdCBhIGZ1bmN0aW9uXCIpO1xuICAgIHRpbWUgPSAodGltZSA9PSBudWxsID8gbm93KCkgOiArdGltZSkgKyAoZGVsYXkgPT0gbnVsbCA/IDAgOiArZGVsYXkpO1xuICAgIGlmICghdGhpcy5fbmV4dCAmJiB0YXNrVGFpbCAhPT0gdGhpcykge1xuICAgICAgaWYgKHRhc2tUYWlsKSB0YXNrVGFpbC5fbmV4dCA9IHRoaXM7XG4gICAgICBlbHNlIHRhc2tIZWFkID0gdGhpcztcbiAgICAgIHRhc2tUYWlsID0gdGhpcztcbiAgICB9XG4gICAgdGhpcy5fY2FsbCA9IGNhbGxiYWNrO1xuICAgIHRoaXMuX3RpbWUgPSB0aW1lO1xuICAgIHNsZWVwKCk7XG4gIH0sXG4gIHN0b3A6IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLl9jYWxsKSB7XG4gICAgICB0aGlzLl9jYWxsID0gbnVsbDtcbiAgICAgIHRoaXMuX3RpbWUgPSBJbmZpbml0eTtcbiAgICAgIHNsZWVwKCk7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdGltZXIoY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyO1xuICB0LnJlc3RhcnQoY2FsbGJhY2ssIGRlbGF5LCB0aW1lKTtcbiAgcmV0dXJuIHQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0aW1lckZsdXNoKCkge1xuICBub3coKTsgLy8gR2V0IHRoZSBjdXJyZW50IHRpbWUsIGlmIG5vdCBhbHJlYWR5IHNldC5cbiAgKytmcmFtZTsgLy8gUHJldGVuZCB3ZeKAmXZlIHNldCBhbiBhbGFybSwgaWYgd2UgaGF2ZW7igJl0IGFscmVhZHkuXG4gIHZhciB0ID0gdGFza0hlYWQsIGU7XG4gIHdoaWxlICh0KSB7XG4gICAgaWYgKChlID0gY2xvY2tOb3cgLSB0Ll90aW1lKSA+PSAwKSB0Ll9jYWxsLmNhbGwobnVsbCwgZSk7XG4gICAgdCA9IHQuX25leHQ7XG4gIH1cbiAgLS1mcmFtZTtcbn1cblxuZnVuY3Rpb24gd2FrZSgpIHtcbiAgY2xvY2tOb3cgPSAoY2xvY2tMYXN0ID0gY2xvY2subm93KCkpICsgY2xvY2tTa2V3O1xuICBmcmFtZSA9IHRpbWVvdXQgPSAwO1xuICB0cnkge1xuICAgIHRpbWVyRmx1c2goKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBmcmFtZSA9IDA7XG4gICAgbmFwKCk7XG4gICAgY2xvY2tOb3cgPSAwO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBva2UoKSB7XG4gIHZhciBub3cgPSBjbG9jay5ub3coKSwgZGVsYXkgPSBub3cgLSBjbG9ja0xhc3Q7XG4gIGlmIChkZWxheSA+IHBva2VEZWxheSkgY2xvY2tTa2V3IC09IGRlbGF5LCBjbG9ja0xhc3QgPSBub3c7XG59XG5cbmZ1bmN0aW9uIG5hcCgpIHtcbiAgdmFyIHQwLCB0MSA9IHRhc2tIZWFkLCB0MiwgdGltZSA9IEluZmluaXR5O1xuICB3aGlsZSAodDEpIHtcbiAgICBpZiAodDEuX2NhbGwpIHtcbiAgICAgIGlmICh0aW1lID4gdDEuX3RpbWUpIHRpbWUgPSB0MS5fdGltZTtcbiAgICAgIHQwID0gdDEsIHQxID0gdDEuX25leHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHQyID0gdDEuX25leHQsIHQxLl9uZXh0ID0gbnVsbDtcbiAgICAgIHQxID0gdDAgPyB0MC5fbmV4dCA9IHQyIDogdGFza0hlYWQgPSB0MjtcbiAgICB9XG4gIH1cbiAgdGFza1RhaWwgPSB0MDtcbiAgc2xlZXAodGltZSk7XG59XG5cbmZ1bmN0aW9uIHNsZWVwKHRpbWUpIHtcbiAgaWYgKGZyYW1lKSByZXR1cm47IC8vIFNvb25lc3QgYWxhcm0gYWxyZWFkeSBzZXQsIG9yIHdpbGwgYmUuXG4gIGlmICh0aW1lb3V0KSB0aW1lb3V0ID0gY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICB2YXIgZGVsYXkgPSB0aW1lIC0gY2xvY2tOb3c7IC8vIFN0cmljdGx5IGxlc3MgdGhhbiBpZiB3ZSByZWNvbXB1dGVkIGNsb2NrTm93LlxuICBpZiAoZGVsYXkgPiAyNCkge1xuICAgIGlmICh0aW1lIDwgSW5maW5pdHkpIHRpbWVvdXQgPSBzZXRUaW1lb3V0KHdha2UsIHRpbWUgLSBjbG9jay5ub3coKSAtIGNsb2NrU2tldyk7XG4gICAgaWYgKGludGVydmFsKSBpbnRlcnZhbCA9IGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICB9IGVsc2Uge1xuICAgIGlmICghaW50ZXJ2YWwpIGNsb2NrTGFzdCA9IGNsb2NrLm5vdygpLCBpbnRlcnZhbCA9IHNldEludGVydmFsKHBva2UsIHBva2VEZWxheSk7XG4gICAgZnJhbWUgPSAxLCBzZXRGcmFtZSh3YWtlKTtcbiAgfVxufVxuIiwiaW1wb3J0IHtUaW1lcn0gZnJvbSBcIi4vdGltZXIuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY2FsbGJhY2ssIGRlbGF5LCB0aW1lKSB7XG4gIHZhciB0ID0gbmV3IFRpbWVyO1xuICBkZWxheSA9IGRlbGF5ID09IG51bGwgPyAwIDogK2RlbGF5O1xuICB0LnJlc3RhcnQoZWxhcHNlZCA9PiB7XG4gICAgdC5zdG9wKCk7XG4gICAgY2FsbGJhY2soZWxhcHNlZCArIGRlbGF5KTtcbiAgfSwgZGVsYXksIHRpbWUpO1xuICByZXR1cm4gdDtcbn1cbiIsImltcG9ydCB7ZGlzcGF0Y2h9IGZyb20gXCJkMy1kaXNwYXRjaFwiO1xuaW1wb3J0IHt0aW1lciwgdGltZW91dH0gZnJvbSBcImQzLXRpbWVyXCI7XG5cbnZhciBlbXB0eU9uID0gZGlzcGF0Y2goXCJzdGFydFwiLCBcImVuZFwiLCBcImNhbmNlbFwiLCBcImludGVycnVwdFwiKTtcbnZhciBlbXB0eVR3ZWVuID0gW107XG5cbmV4cG9ydCB2YXIgQ1JFQVRFRCA9IDA7XG5leHBvcnQgdmFyIFNDSEVEVUxFRCA9IDE7XG5leHBvcnQgdmFyIFNUQVJUSU5HID0gMjtcbmV4cG9ydCB2YXIgU1RBUlRFRCA9IDM7XG5leHBvcnQgdmFyIFJVTk5JTkcgPSA0O1xuZXhwb3J0IHZhciBFTkRJTkcgPSA1O1xuZXhwb3J0IHZhciBFTkRFRCA9IDY7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUsIGlkLCBpbmRleCwgZ3JvdXAsIHRpbWluZykge1xuICB2YXIgc2NoZWR1bGVzID0gbm9kZS5fX3RyYW5zaXRpb247XG4gIGlmICghc2NoZWR1bGVzKSBub2RlLl9fdHJhbnNpdGlvbiA9IHt9O1xuICBlbHNlIGlmIChpZCBpbiBzY2hlZHVsZXMpIHJldHVybjtcbiAgY3JlYXRlKG5vZGUsIGlkLCB7XG4gICAgbmFtZTogbmFtZSxcbiAgICBpbmRleDogaW5kZXgsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBncm91cDogZ3JvdXAsIC8vIEZvciBjb250ZXh0IGR1cmluZyBjYWxsYmFjay5cbiAgICBvbjogZW1wdHlPbixcbiAgICB0d2VlbjogZW1wdHlUd2VlbixcbiAgICB0aW1lOiB0aW1pbmcudGltZSxcbiAgICBkZWxheTogdGltaW5nLmRlbGF5LFxuICAgIGR1cmF0aW9uOiB0aW1pbmcuZHVyYXRpb24sXG4gICAgZWFzZTogdGltaW5nLmVhc2UsXG4gICAgdGltZXI6IG51bGwsXG4gICAgc3RhdGU6IENSRUFURURcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IGdldChub2RlLCBpZCk7XG4gIGlmIChzY2hlZHVsZS5zdGF0ZSA+IENSRUFURUQpIHRocm93IG5ldyBFcnJvcihcInRvbyBsYXRlOyBhbHJlYWR5IHNjaGVkdWxlZFwiKTtcbiAgcmV0dXJuIHNjaGVkdWxlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0KG5vZGUsIGlkKSB7XG4gIHZhciBzY2hlZHVsZSA9IGdldChub2RlLCBpZCk7XG4gIGlmIChzY2hlZHVsZS5zdGF0ZSA+IFNUQVJURUQpIHRocm93IG5ldyBFcnJvcihcInRvbyBsYXRlOyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldChub2RlLCBpZCkge1xuICB2YXIgc2NoZWR1bGUgPSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgaWYgKCFzY2hlZHVsZSB8fCAhKHNjaGVkdWxlID0gc2NoZWR1bGVbaWRdKSkgdGhyb3cgbmV3IEVycm9yKFwidHJhbnNpdGlvbiBub3QgZm91bmRcIik7XG4gIHJldHVybiBzY2hlZHVsZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlKG5vZGUsIGlkLCBzZWxmKSB7XG4gIHZhciBzY2hlZHVsZXMgPSBub2RlLl9fdHJhbnNpdGlvbixcbiAgICAgIHR3ZWVuO1xuXG4gIC8vIEluaXRpYWxpemUgdGhlIHNlbGYgdGltZXIgd2hlbiB0aGUgdHJhbnNpdGlvbiBpcyBjcmVhdGVkLlxuICAvLyBOb3RlIHRoZSBhY3R1YWwgZGVsYXkgaXMgbm90IGtub3duIHVudGlsIHRoZSBmaXJzdCBjYWxsYmFjayFcbiAgc2NoZWR1bGVzW2lkXSA9IHNlbGY7XG4gIHNlbGYudGltZXIgPSB0aW1lcihzY2hlZHVsZSwgMCwgc2VsZi50aW1lKTtcblxuICBmdW5jdGlvbiBzY2hlZHVsZShlbGFwc2VkKSB7XG4gICAgc2VsZi5zdGF0ZSA9IFNDSEVEVUxFRDtcbiAgICBzZWxmLnRpbWVyLnJlc3RhcnQoc3RhcnQsIHNlbGYuZGVsYXksIHNlbGYudGltZSk7XG5cbiAgICAvLyBJZiB0aGUgZWxhcHNlZCBkZWxheSBpcyBsZXNzIHRoYW4gb3VyIGZpcnN0IHNsZWVwLCBzdGFydCBpbW1lZGlhdGVseS5cbiAgICBpZiAoc2VsZi5kZWxheSA8PSBlbGFwc2VkKSBzdGFydChlbGFwc2VkIC0gc2VsZi5kZWxheSk7XG4gIH1cblxuICBmdW5jdGlvbiBzdGFydChlbGFwc2VkKSB7XG4gICAgdmFyIGksIGosIG4sIG87XG5cbiAgICAvLyBJZiB0aGUgc3RhdGUgaXMgbm90IFNDSEVEVUxFRCwgdGhlbiB3ZSBwcmV2aW91c2x5IGVycm9yZWQgb24gc3RhcnQuXG4gICAgaWYgKHNlbGYuc3RhdGUgIT09IFNDSEVEVUxFRCkgcmV0dXJuIHN0b3AoKTtcblxuICAgIGZvciAoaSBpbiBzY2hlZHVsZXMpIHtcbiAgICAgIG8gPSBzY2hlZHVsZXNbaV07XG4gICAgICBpZiAoby5uYW1lICE9PSBzZWxmLm5hbWUpIGNvbnRpbnVlO1xuXG4gICAgICAvLyBXaGlsZSB0aGlzIGVsZW1lbnQgYWxyZWFkeSBoYXMgYSBzdGFydGluZyB0cmFuc2l0aW9uIGR1cmluZyB0aGlzIGZyYW1lLFxuICAgICAgLy8gZGVmZXIgc3RhcnRpbmcgYW4gaW50ZXJydXB0aW5nIHRyYW5zaXRpb24gdW50aWwgdGhhdCB0cmFuc2l0aW9uIGhhcyBhXG4gICAgICAvLyBjaGFuY2UgdG8gdGljayAoYW5kIHBvc3NpYmx5IGVuZCk7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzU0IVxuICAgICAgaWYgKG8uc3RhdGUgPT09IFNUQVJURUQpIHJldHVybiB0aW1lb3V0KHN0YXJ0KTtcblxuICAgICAgLy8gSW50ZXJydXB0IHRoZSBhY3RpdmUgdHJhbnNpdGlvbiwgaWYgYW55LlxuICAgICAgaWYgKG8uc3RhdGUgPT09IFJVTk5JTkcpIHtcbiAgICAgICAgby5zdGF0ZSA9IEVOREVEO1xuICAgICAgICBvLnRpbWVyLnN0b3AoKTtcbiAgICAgICAgby5vbi5jYWxsKFwiaW50ZXJydXB0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIG8uaW5kZXgsIG8uZ3JvdXApO1xuICAgICAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICAgICAgfVxuXG4gICAgICAvLyBDYW5jZWwgYW55IHByZS1lbXB0ZWQgdHJhbnNpdGlvbnMuXG4gICAgICBlbHNlIGlmICgraSA8IGlkKSB7XG4gICAgICAgIG8uc3RhdGUgPSBFTkRFRDtcbiAgICAgICAgby50aW1lci5zdG9wKCk7XG4gICAgICAgIG8ub24uY2FsbChcImNhbmNlbFwiLCBub2RlLCBub2RlLl9fZGF0YV9fLCBvLmluZGV4LCBvLmdyb3VwKTtcbiAgICAgICAgZGVsZXRlIHNjaGVkdWxlc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBEZWZlciB0aGUgZmlyc3QgdGljayB0byBlbmQgb2YgdGhlIGN1cnJlbnQgZnJhbWU7IHNlZSBkMy9kMyMxNTc2LlxuICAgIC8vIE5vdGUgdGhlIHRyYW5zaXRpb24gbWF5IGJlIGNhbmNlbGVkIGFmdGVyIHN0YXJ0IGFuZCBiZWZvcmUgdGhlIGZpcnN0IHRpY2shXG4gICAgLy8gTm90ZSB0aGlzIG11c3QgYmUgc2NoZWR1bGVkIGJlZm9yZSB0aGUgc3RhcnQgZXZlbnQ7IHNlZSBkMy9kMy10cmFuc2l0aW9uIzE2IVxuICAgIC8vIEFzc3VtaW5nIHRoaXMgaXMgc3VjY2Vzc2Z1bCwgc3Vic2VxdWVudCBjYWxsYmFja3MgZ28gc3RyYWlnaHQgdG8gdGljay5cbiAgICB0aW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHNlbGYuc3RhdGUgPT09IFNUQVJURUQpIHtcbiAgICAgICAgc2VsZi5zdGF0ZSA9IFJVTk5JTkc7XG4gICAgICAgIHNlbGYudGltZXIucmVzdGFydCh0aWNrLCBzZWxmLmRlbGF5LCBzZWxmLnRpbWUpO1xuICAgICAgICB0aWNrKGVsYXBzZWQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIHN0YXJ0IGV2ZW50LlxuICAgIC8vIE5vdGUgdGhpcyBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSB0d2VlbiBhcmUgaW5pdGlhbGl6ZWQuXG4gICAgc2VsZi5zdGF0ZSA9IFNUQVJUSU5HO1xuICAgIHNlbGYub24uY2FsbChcInN0YXJ0XCIsIG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApO1xuICAgIGlmIChzZWxmLnN0YXRlICE9PSBTVEFSVElORykgcmV0dXJuOyAvLyBpbnRlcnJ1cHRlZFxuICAgIHNlbGYuc3RhdGUgPSBTVEFSVEVEO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgdHdlZW4sIGRlbGV0aW5nIG51bGwgdHdlZW4uXG4gICAgdHdlZW4gPSBuZXcgQXJyYXkobiA9IHNlbGYudHdlZW4ubGVuZ3RoKTtcbiAgICBmb3IgKGkgPSAwLCBqID0gLTE7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChvID0gc2VsZi50d2VlbltpXS52YWx1ZS5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIHNlbGYuaW5kZXgsIHNlbGYuZ3JvdXApKSB7XG4gICAgICAgIHR3ZWVuWysral0gPSBvO1xuICAgICAgfVxuICAgIH1cbiAgICB0d2Vlbi5sZW5ndGggPSBqICsgMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRpY2soZWxhcHNlZCkge1xuICAgIHZhciB0ID0gZWxhcHNlZCA8IHNlbGYuZHVyYXRpb24gPyBzZWxmLmVhc2UuY2FsbChudWxsLCBlbGFwc2VkIC8gc2VsZi5kdXJhdGlvbikgOiAoc2VsZi50aW1lci5yZXN0YXJ0KHN0b3ApLCBzZWxmLnN0YXRlID0gRU5ESU5HLCAxKSxcbiAgICAgICAgaSA9IC0xLFxuICAgICAgICBuID0gdHdlZW4ubGVuZ3RoO1xuXG4gICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgIHR3ZWVuW2ldLmNhbGwobm9kZSwgdCk7XG4gICAgfVxuXG4gICAgLy8gRGlzcGF0Y2ggdGhlIGVuZCBldmVudC5cbiAgICBpZiAoc2VsZi5zdGF0ZSA9PT0gRU5ESU5HKSB7XG4gICAgICBzZWxmLm9uLmNhbGwoXCJlbmRcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2VsZi5pbmRleCwgc2VsZi5ncm91cCk7XG4gICAgICBzdG9wKCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc3RvcCgpIHtcbiAgICBzZWxmLnN0YXRlID0gRU5ERUQ7XG4gICAgc2VsZi50aW1lci5zdG9wKCk7XG4gICAgZGVsZXRlIHNjaGVkdWxlc1tpZF07XG4gICAgZm9yICh2YXIgaSBpbiBzY2hlZHVsZXMpIHJldHVybjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIGRlbGV0ZSBub2RlLl9fdHJhbnNpdGlvbjtcbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgeCA9PiAoKSA9PiB4O1xuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5cbmZ1bmN0aW9uIGxpbmVhcihhLCBkKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGEgKyB0ICogZDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZXhwb25lbnRpYWwoYSwgYiwgeSkge1xuICByZXR1cm4gYSA9IE1hdGgucG93KGEsIHkpLCBiID0gTWF0aC5wb3coYiwgeSkgLSBhLCB5ID0gMSAvIHksIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gTWF0aC5wb3coYSArIHQgKiBiLCB5KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh1ZShhLCBiKSB7XG4gIHZhciBkID0gYiAtIGE7XG4gIHJldHVybiBkID8gbGluZWFyKGEsIGQgPiAxODAgfHwgZCA8IC0xODAgPyBkIC0gMzYwICogTWF0aC5yb3VuZChkIC8gMzYwKSA6IGQpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnYW1tYSh5KSB7XG4gIHJldHVybiAoeSA9ICt5KSA9PT0gMSA/IG5vZ2FtbWEgOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGIgLSBhID8gZXhwb25lbnRpYWwoYSwgYiwgeSkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9nYW1tYShhLCBiKSB7XG4gIHZhciBkID0gYiAtIGE7XG4gIHJldHVybiBkID8gbGluZWFyKGEsIGQpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG59XG4iLCJpbXBvcnQge3JnYiBhcyBjb2xvclJnYn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgYmFzaXMgZnJvbSBcIi4vYmFzaXMuanNcIjtcbmltcG9ydCBiYXNpc0Nsb3NlZCBmcm9tIFwiLi9iYXNpc0Nsb3NlZC5qc1wiO1xuaW1wb3J0IG5vZ2FtbWEsIHtnYW1tYX0gZnJvbSBcIi4vY29sb3IuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgKGZ1bmN0aW9uIHJnYkdhbW1hKHkpIHtcbiAgdmFyIGNvbG9yID0gZ2FtbWEoeSk7XG5cbiAgZnVuY3Rpb24gcmdiKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgciA9IGNvbG9yKChzdGFydCA9IGNvbG9yUmdiKHN0YXJ0KSkuciwgKGVuZCA9IGNvbG9yUmdiKGVuZCkpLnIpLFxuICAgICAgICBnID0gY29sb3Ioc3RhcnQuZywgZW5kLmcpLFxuICAgICAgICBiID0gY29sb3Ioc3RhcnQuYiwgZW5kLmIpLFxuICAgICAgICBvcGFjaXR5ID0gbm9nYW1tYShzdGFydC5vcGFjaXR5LCBlbmQub3BhY2l0eSk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHN0YXJ0LnIgPSByKHQpO1xuICAgICAgc3RhcnQuZyA9IGcodCk7XG4gICAgICBzdGFydC5iID0gYih0KTtcbiAgICAgIHN0YXJ0Lm9wYWNpdHkgPSBvcGFjaXR5KHQpO1xuICAgICAgcmV0dXJuIHN0YXJ0ICsgXCJcIjtcbiAgICB9O1xuICB9XG5cbiAgcmdiLmdhbW1hID0gcmdiR2FtbWE7XG5cbiAgcmV0dXJuIHJnYjtcbn0pKDEpO1xuXG5mdW5jdGlvbiByZ2JTcGxpbmUoc3BsaW5lKSB7XG4gIHJldHVybiBmdW5jdGlvbihjb2xvcnMpIHtcbiAgICB2YXIgbiA9IGNvbG9ycy5sZW5ndGgsXG4gICAgICAgIHIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGcgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGIgPSBuZXcgQXJyYXkobiksXG4gICAgICAgIGksIGNvbG9yO1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGNvbG9yID0gY29sb3JSZ2IoY29sb3JzW2ldKTtcbiAgICAgIHJbaV0gPSBjb2xvci5yIHx8IDA7XG4gICAgICBnW2ldID0gY29sb3IuZyB8fCAwO1xuICAgICAgYltpXSA9IGNvbG9yLmIgfHwgMDtcbiAgICB9XG4gICAgciA9IHNwbGluZShyKTtcbiAgICBnID0gc3BsaW5lKGcpO1xuICAgIGIgPSBzcGxpbmUoYik7XG4gICAgY29sb3Iub3BhY2l0eSA9IDE7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIGNvbG9yLnIgPSByKHQpO1xuICAgICAgY29sb3IuZyA9IGcodCk7XG4gICAgICBjb2xvci5iID0gYih0KTtcbiAgICAgIHJldHVybiBjb2xvciArIFwiXCI7XG4gICAgfTtcbiAgfTtcbn1cblxuZXhwb3J0IHZhciByZ2JCYXNpcyA9IHJnYlNwbGluZShiYXNpcyk7XG5leHBvcnQgdmFyIHJnYkJhc2lzQ2xvc2VkID0gcmdiU3BsaW5lKGJhc2lzQ2xvc2VkKTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiA9ICtiLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGEgKiAoMSAtIHQpICsgYiAqIHQ7XG4gIH07XG59XG4iLCJpbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuXG52YXIgcmVBID0gL1stK10/KD86XFxkK1xcLj9cXGQqfFxcLj9cXGQrKSg/OltlRV1bLStdP1xcZCspPy9nLFxuICAgIHJlQiA9IG5ldyBSZWdFeHAocmVBLnNvdXJjZSwgXCJnXCIpO1xuXG5mdW5jdGlvbiB6ZXJvKGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbmUoYikge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBiKHQpICsgXCJcIjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgYmkgPSByZUEubGFzdEluZGV4ID0gcmVCLmxhc3RJbmRleCA9IDAsIC8vIHNjYW4gaW5kZXggZm9yIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGFtLCAvLyBjdXJyZW50IG1hdGNoIGluIGFcbiAgICAgIGJtLCAvLyBjdXJyZW50IG1hdGNoIGluIGJcbiAgICAgIGJzLCAvLyBzdHJpbmcgcHJlY2VkaW5nIGN1cnJlbnQgbnVtYmVyIGluIGIsIGlmIGFueVxuICAgICAgaSA9IC0xLCAvLyBpbmRleCBpbiBzXG4gICAgICBzID0gW10sIC8vIHN0cmluZyBjb25zdGFudHMgYW5kIHBsYWNlaG9sZGVyc1xuICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xuXG4gIC8vIENvZXJjZSBpbnB1dHMgdG8gc3RyaW5ncy5cbiAgYSA9IGEgKyBcIlwiLCBiID0gYiArIFwiXCI7XG5cbiAgLy8gSW50ZXJwb2xhdGUgcGFpcnMgb2YgbnVtYmVycyBpbiBhICYgYi5cbiAgd2hpbGUgKChhbSA9IHJlQS5leGVjKGEpKVxuICAgICAgJiYgKGJtID0gcmVCLmV4ZWMoYikpKSB7XG4gICAgaWYgKChicyA9IGJtLmluZGV4KSA+IGJpKSB7IC8vIGEgc3RyaW5nIHByZWNlZGVzIHRoZSBuZXh0IG51bWJlciBpbiBiXG4gICAgICBicyA9IGIuc2xpY2UoYmksIGJzKTtcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBicztcbiAgICB9XG4gICAgaWYgKChhbSA9IGFtWzBdKSA9PT0gKGJtID0gYm1bMF0pKSB7IC8vIG51bWJlcnMgaW4gYSAmIGIgbWF0Y2hcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJtOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBibTtcbiAgICB9IGVsc2UgeyAvLyBpbnRlcnBvbGF0ZSBub24tbWF0Y2hpbmcgbnVtYmVyc1xuICAgICAgc1srK2ldID0gbnVsbDtcbiAgICAgIHEucHVzaCh7aTogaSwgeDogbnVtYmVyKGFtLCBibSl9KTtcbiAgICB9XG4gICAgYmkgPSByZUIubGFzdEluZGV4O1xuICB9XG5cbiAgLy8gQWRkIHJlbWFpbnMgb2YgYi5cbiAgaWYgKGJpIDwgYi5sZW5ndGgpIHtcbiAgICBicyA9IGIuc2xpY2UoYmkpO1xuICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgIGVsc2Ugc1srK2ldID0gYnM7XG4gIH1cblxuICAvLyBTcGVjaWFsIG9wdGltaXphdGlvbiBmb3Igb25seSBhIHNpbmdsZSBtYXRjaC5cbiAgLy8gT3RoZXJ3aXNlLCBpbnRlcnBvbGF0ZSBlYWNoIG9mIHRoZSBudW1iZXJzIGFuZCByZWpvaW4gdGhlIHN0cmluZy5cbiAgcmV0dXJuIHMubGVuZ3RoIDwgMiA/IChxWzBdXG4gICAgICA/IG9uZShxWzBdLngpXG4gICAgICA6IHplcm8oYikpXG4gICAgICA6IChiID0gcS5sZW5ndGgsIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbzsgaSA8IGI7ICsraSkgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgICAgIHJldHVybiBzLmpvaW4oXCJcIik7XG4gICAgICAgIH0pO1xufVxuIiwidmFyIGRlZ3JlZXMgPSAxODAgLyBNYXRoLlBJO1xuXG5leHBvcnQgdmFyIGlkZW50aXR5ID0ge1xuICB0cmFuc2xhdGVYOiAwLFxuICB0cmFuc2xhdGVZOiAwLFxuICByb3RhdGU6IDAsXG4gIHNrZXdYOiAwLFxuICBzY2FsZVg6IDEsXG4gIHNjYWxlWTogMVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYiwgYywgZCwgZSwgZikge1xuICB2YXIgc2NhbGVYLCBzY2FsZVksIHNrZXdYO1xuICBpZiAoc2NhbGVYID0gTWF0aC5zcXJ0KGEgKiBhICsgYiAqIGIpKSBhIC89IHNjYWxlWCwgYiAvPSBzY2FsZVg7XG4gIGlmIChza2V3WCA9IGEgKiBjICsgYiAqIGQpIGMgLT0gYSAqIHNrZXdYLCBkIC09IGIgKiBza2V3WDtcbiAgaWYgKHNjYWxlWSA9IE1hdGguc3FydChjICogYyArIGQgKiBkKSkgYyAvPSBzY2FsZVksIGQgLz0gc2NhbGVZLCBza2V3WCAvPSBzY2FsZVk7XG4gIGlmIChhICogZCA8IGIgKiBjKSBhID0gLWEsIGIgPSAtYiwgc2tld1ggPSAtc2tld1gsIHNjYWxlWCA9IC1zY2FsZVg7XG4gIHJldHVybiB7XG4gICAgdHJhbnNsYXRlWDogZSxcbiAgICB0cmFuc2xhdGVZOiBmLFxuICAgIHJvdGF0ZTogTWF0aC5hdGFuMihiLCBhKSAqIGRlZ3JlZXMsXG4gICAgc2tld1g6IE1hdGguYXRhbihza2V3WCkgKiBkZWdyZWVzLFxuICAgIHNjYWxlWDogc2NhbGVYLFxuICAgIHNjYWxlWTogc2NhbGVZXG4gIH07XG59XG4iLCJpbXBvcnQgZGVjb21wb3NlLCB7aWRlbnRpdHl9IGZyb20gXCIuL2RlY29tcG9zZS5qc1wiO1xuXG52YXIgc3ZnTm9kZTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZWYgKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUNzcyh2YWx1ZSkge1xuICBjb25zdCBtID0gbmV3ICh0eXBlb2YgRE9NTWF0cml4ID09PSBcImZ1bmN0aW9uXCIgPyBET01NYXRyaXggOiBXZWJLaXRDU1NNYXRyaXgpKHZhbHVlICsgXCJcIik7XG4gIHJldHVybiBtLmlzSWRlbnRpdHkgPyBpZGVudGl0eSA6IGRlY29tcG9zZShtLmEsIG0uYiwgbS5jLCBtLmQsIG0uZSwgbS5mKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlU3ZnKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gaWRlbnRpdHk7XG4gIGlmICghc3ZnTm9kZSkgc3ZnTm9kZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwiZ1wiKTtcbiAgc3ZnTm9kZS5zZXRBdHRyaWJ1dGUoXCJ0cmFuc2Zvcm1cIiwgdmFsdWUpO1xuICBpZiAoISh2YWx1ZSA9IHN2Z05vZGUudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKSkpIHJldHVybiBpZGVudGl0eTtcbiAgdmFsdWUgPSB2YWx1ZS5tYXRyaXg7XG4gIHJldHVybiBkZWNvbXBvc2UodmFsdWUuYSwgdmFsdWUuYiwgdmFsdWUuYywgdmFsdWUuZCwgdmFsdWUuZSwgdmFsdWUuZik7XG59XG4iLCJpbXBvcnQgbnVtYmVyIGZyb20gXCIuLi9udW1iZXIuanNcIjtcbmltcG9ydCB7cGFyc2VDc3MsIHBhcnNlU3ZnfSBmcm9tIFwiLi9wYXJzZS5qc1wiO1xuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZVRyYW5zZm9ybShwYXJzZSwgcHhDb21tYSwgcHhQYXJlbiwgZGVnUGFyZW4pIHtcblxuICBmdW5jdGlvbiBwb3Aocykge1xuICAgIHJldHVybiBzLmxlbmd0aCA/IHMucG9wKCkgKyBcIiBcIiA6IFwiXCI7XG4gIH1cblxuICBmdW5jdGlvbiB0cmFuc2xhdGUoeGEsIHlhLCB4YiwgeWIsIHMsIHEpIHtcbiAgICBpZiAoeGEgIT09IHhiIHx8IHlhICE9PSB5Yikge1xuICAgICAgdmFyIGkgPSBzLnB1c2goXCJ0cmFuc2xhdGUoXCIsIG51bGwsIHB4Q29tbWEsIG51bGwsIHB4UGFyZW4pO1xuICAgICAgcS5wdXNoKHtpOiBpIC0gNCwgeDogbnVtYmVyKHhhLCB4Yil9LCB7aTogaSAtIDIsIHg6IG51bWJlcih5YSwgeWIpfSk7XG4gICAgfSBlbHNlIGlmICh4YiB8fCB5Yikge1xuICAgICAgcy5wdXNoKFwidHJhbnNsYXRlKFwiICsgeGIgKyBweENvbW1hICsgeWIgKyBweFBhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByb3RhdGUoYSwgYiwgcywgcSkge1xuICAgIGlmIChhICE9PSBiKSB7XG4gICAgICBpZiAoYSAtIGIgPiAxODApIGIgKz0gMzYwOyBlbHNlIGlmIChiIC0gYSA+IDE4MCkgYSArPSAzNjA7IC8vIHNob3J0ZXN0IHBhdGhcbiAgICAgIHEucHVzaCh7aTogcy5wdXNoKHBvcChzKSArIFwicm90YXRlKFwiLCBudWxsLCBkZWdQYXJlbikgLSAyLCB4OiBudW1iZXIoYSwgYil9KTtcbiAgICB9IGVsc2UgaWYgKGIpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInJvdGF0ZShcIiArIGIgKyBkZWdQYXJlbik7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gc2tld1goYSwgYiwgcywgcSkge1xuICAgIGlmIChhICE9PSBiKSB7XG4gICAgICBxLnB1c2goe2k6IHMucHVzaChwb3AocykgKyBcInNrZXdYKFwiLCBudWxsLCBkZWdQYXJlbikgLSAyLCB4OiBudW1iZXIoYSwgYil9KTtcbiAgICB9IGVsc2UgaWYgKGIpIHtcbiAgICAgIHMucHVzaChwb3AocykgKyBcInNrZXdYKFwiICsgYiArIGRlZ1BhcmVuKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBzY2FsZSh4YSwgeWEsIHhiLCB5YiwgcywgcSkge1xuICAgIGlmICh4YSAhPT0geGIgfHwgeWEgIT09IHliKSB7XG4gICAgICB2YXIgaSA9IHMucHVzaChwb3AocykgKyBcInNjYWxlKFwiLCBudWxsLCBcIixcIiwgbnVsbCwgXCIpXCIpO1xuICAgICAgcS5wdXNoKHtpOiBpIC0gNCwgeDogbnVtYmVyKHhhLCB4Yil9LCB7aTogaSAtIDIsIHg6IG51bWJlcih5YSwgeWIpfSk7XG4gICAgfSBlbHNlIGlmICh4YiAhPT0gMSB8fCB5YiAhPT0gMSkge1xuICAgICAgcy5wdXNoKHBvcChzKSArIFwic2NhbGUoXCIgKyB4YiArIFwiLFwiICsgeWIgKyBcIilcIik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKGEsIGIpIHtcbiAgICB2YXIgcyA9IFtdLCAvLyBzdHJpbmcgY29uc3RhbnRzIGFuZCBwbGFjZWhvbGRlcnNcbiAgICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xuICAgIGEgPSBwYXJzZShhKSwgYiA9IHBhcnNlKGIpO1xuICAgIHRyYW5zbGF0ZShhLnRyYW5zbGF0ZVgsIGEudHJhbnNsYXRlWSwgYi50cmFuc2xhdGVYLCBiLnRyYW5zbGF0ZVksIHMsIHEpO1xuICAgIHJvdGF0ZShhLnJvdGF0ZSwgYi5yb3RhdGUsIHMsIHEpO1xuICAgIHNrZXdYKGEuc2tld1gsIGIuc2tld1gsIHMsIHEpO1xuICAgIHNjYWxlKGEuc2NhbGVYLCBhLnNjYWxlWSwgYi5zY2FsZVgsIGIuc2NhbGVZLCBzLCBxKTtcbiAgICBhID0gYiA9IG51bGw7IC8vIGdjXG4gICAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciBpID0gLTEsIG4gPSBxLmxlbmd0aCwgbztcbiAgICAgIHdoaWxlICgrK2kgPCBuKSBzWyhvID0gcVtpXSkuaV0gPSBvLngodCk7XG4gICAgICByZXR1cm4gcy5qb2luKFwiXCIpO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MgPSBpbnRlcnBvbGF0ZVRyYW5zZm9ybShwYXJzZUNzcywgXCJweCwgXCIsIFwicHgpXCIsIFwiZGVnKVwiKTtcbmV4cG9ydCB2YXIgaW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmcgPSBpbnRlcnBvbGF0ZVRyYW5zZm9ybShwYXJzZVN2ZywgXCIsIFwiLCBcIilcIiwgXCIpXCIpO1xuIiwiaW1wb3J0IHtnZXQsIHNldH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gdHdlZW5SZW1vdmUoaWQsIG5hbWUpIHtcbiAgdmFyIHR3ZWVuMCwgdHdlZW4xO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgdHdlZW4gPSBzY2hlZHVsZS50d2VlbjtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgdHdlZW4gd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgdHdlZW4gYW5kIHdl4oCZcmUgZG9uZSFcbiAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgaWYgKHR3ZWVuICE9PSB0d2VlbjApIHtcbiAgICAgIHR3ZWVuMSA9IHR3ZWVuMCA9IHR3ZWVuO1xuICAgICAgZm9yICh2YXIgaSA9IDAsIG4gPSB0d2VlbjEubGVuZ3RoOyBpIDwgbjsgKytpKSB7XG4gICAgICAgIGlmICh0d2VlbjFbaV0ubmFtZSA9PT0gbmFtZSkge1xuICAgICAgICAgIHR3ZWVuMSA9IHR3ZWVuMS5zbGljZSgpO1xuICAgICAgICAgIHR3ZWVuMS5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBzY2hlZHVsZS50d2VlbiA9IHR3ZWVuMTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gdHdlZW5GdW5jdGlvbihpZCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIHR3ZWVuMCwgdHdlZW4xO1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBFcnJvcjtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNldCh0aGlzLCBpZCksXG4gICAgICAgIHR3ZWVuID0gc2NoZWR1bGUudHdlZW47XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIHR3ZWVuIHdpdGggdGhlIHByZXZpb3VzIG5vZGUsXG4gICAgLy8ganVzdCBhc3NpZ24gdGhlIHVwZGF0ZWQgc2hhcmVkIHR3ZWVuIGFuZCB3ZeKAmXJlIGRvbmUhXG4gICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgIGlmICh0d2VlbiAhPT0gdHdlZW4wKSB7XG4gICAgICB0d2VlbjEgPSAodHdlZW4wID0gdHdlZW4pLnNsaWNlKCk7XG4gICAgICBmb3IgKHZhciB0ID0ge25hbWU6IG5hbWUsIHZhbHVlOiB2YWx1ZX0sIGkgPSAwLCBuID0gdHdlZW4xLmxlbmd0aDsgaSA8IG47ICsraSkge1xuICAgICAgICBpZiAodHdlZW4xW2ldLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgICB0d2VlbjFbaV0gPSB0O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoaSA9PT0gbikgdHdlZW4xLnB1c2godCk7XG4gICAgfVxuXG4gICAgc2NoZWR1bGUudHdlZW4gPSB0d2VlbjE7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIG5hbWUgKz0gXCJcIjtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHtcbiAgICB2YXIgdHdlZW4gPSBnZXQodGhpcy5ub2RlKCksIGlkKS50d2VlbjtcbiAgICBmb3IgKHZhciBpID0gMCwgbiA9IHR3ZWVuLmxlbmd0aCwgdDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKCh0ID0gdHdlZW5baV0pLm5hbWUgPT09IG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHQudmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuZWFjaCgodmFsdWUgPT0gbnVsbCA/IHR3ZWVuUmVtb3ZlIDogdHdlZW5GdW5jdGlvbikoaWQsIG5hbWUsIHZhbHVlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0d2VlblZhbHVlKHRyYW5zaXRpb24sIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBpZCA9IHRyYW5zaXRpb24uX2lkO1xuXG4gIHRyYW5zaXRpb24uZWFjaChmdW5jdGlvbigpIHtcbiAgICB2YXIgc2NoZWR1bGUgPSBzZXQodGhpcywgaWQpO1xuICAgIChzY2hlZHVsZS52YWx1ZSB8fCAoc2NoZWR1bGUudmFsdWUgPSB7fSkpW25hbWVdID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKG5vZGUpIHtcbiAgICByZXR1cm4gZ2V0KG5vZGUsIGlkKS52YWx1ZVtuYW1lXTtcbiAgfTtcbn1cbiIsImltcG9ydCB7Y29sb3J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IHtpbnRlcnBvbGF0ZU51bWJlciwgaW50ZXJwb2xhdGVSZ2IsIGludGVycG9sYXRlU3RyaW5nfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgYztcbiAgcmV0dXJuICh0eXBlb2YgYiA9PT0gXCJudW1iZXJcIiA/IGludGVycG9sYXRlTnVtYmVyXG4gICAgICA6IGIgaW5zdGFuY2VvZiBjb2xvciA/IGludGVycG9sYXRlUmdiXG4gICAgICA6IChjID0gY29sb3IoYikpID8gKGIgPSBjLCBpbnRlcnBvbGF0ZVJnYilcbiAgICAgIDogaW50ZXJwb2xhdGVTdHJpbmcpKGEsIGIpO1xufVxuIiwiaW1wb3J0IHtpbnRlcnBvbGF0ZVRyYW5zZm9ybVN2ZyBhcyBpbnRlcnBvbGF0ZVRyYW5zZm9ybX0gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5pbXBvcnQge25hbWVzcGFjZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHt0d2VlblZhbHVlfSBmcm9tIFwiLi90d2Vlbi5qc1wiO1xuaW1wb3J0IGludGVycG9sYXRlIGZyb20gXCIuL2ludGVycG9sYXRlLmpzXCI7XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmUobmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJSZW1vdmVOUyhmdWxsbmFtZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyQ29uc3RhbnQobmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIixcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJDb25zdGFudE5TKGZ1bGxuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUxKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSB0aGlzLmdldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGF0dHJGdW5jdGlvbihuYW1lLCBpbnRlcnBvbGF0ZSwgdmFsdWUpIHtcbiAgdmFyIHN0cmluZzAwLFxuICAgICAgc3RyaW5nMTAsXG4gICAgICBpbnRlcnBvbGF0ZTA7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgc3RyaW5nMCwgdmFsdWUxID0gdmFsdWUodGhpcyksIHN0cmluZzE7XG4gICAgaWYgKHZhbHVlMSA9PSBudWxsKSByZXR1cm4gdm9pZCB0aGlzLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICBzdHJpbmcwID0gdGhpcy5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCI7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiAoc3RyaW5nMTAgPSBzdHJpbmcxLCBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBhdHRyRnVuY3Rpb25OUyhmdWxsbmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAsIHZhbHVlMSA9IHZhbHVlKHRoaXMpLCBzdHJpbmcxO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgcmV0dXJuIHZvaWQgdGhpcy5yZW1vdmVBdHRyaWJ1dGVOUyhmdWxsbmFtZS5zcGFjZSwgZnVsbG5hbWUubG9jYWwpO1xuICAgIHN0cmluZzAgPSB0aGlzLmdldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCk7XG4gICAgc3RyaW5nMSA9IHZhbHVlMSArIFwiXCI7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiAoc3RyaW5nMTAgPSBzdHJpbmcxLCBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSkpO1xuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICB2YXIgZnVsbG5hbWUgPSBuYW1lc3BhY2UobmFtZSksIGkgPSBmdWxsbmFtZSA9PT0gXCJ0cmFuc2Zvcm1cIiA/IGludGVycG9sYXRlVHJhbnNmb3JtIDogaW50ZXJwb2xhdGU7XG4gIHJldHVybiB0aGlzLmF0dHJUd2VlbihuYW1lLCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyAoZnVsbG5hbWUubG9jYWwgPyBhdHRyRnVuY3Rpb25OUyA6IGF0dHJGdW5jdGlvbikoZnVsbG5hbWUsIGksIHR3ZWVuVmFsdWUodGhpcywgXCJhdHRyLlwiICsgbmFtZSwgdmFsdWUpKVxuICAgICAgOiB2YWx1ZSA9PSBudWxsID8gKGZ1bGxuYW1lLmxvY2FsID8gYXR0clJlbW92ZU5TIDogYXR0clJlbW92ZSkoZnVsbG5hbWUpXG4gICAgICA6IChmdWxsbmFtZS5sb2NhbCA/IGF0dHJDb25zdGFudE5TIDogYXR0ckNvbnN0YW50KShmdWxsbmFtZSwgaSwgdmFsdWUpKTtcbn1cbiIsImltcG9ydCB7bmFtZXNwYWNlfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbmZ1bmN0aW9uIGF0dHJJbnRlcnBvbGF0ZShuYW1lLCBpKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdGhpcy5zZXRBdHRyaWJ1dGUobmFtZSwgaS5jYWxsKHRoaXMsIHQpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0ckludGVycG9sYXRlTlMoZnVsbG5hbWUsIGkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnNldEF0dHJpYnV0ZU5TKGZ1bGxuYW1lLnNwYWNlLCBmdWxsbmFtZS5sb2NhbCwgaS5jYWxsKHRoaXMsIHQpKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gYXR0clR3ZWVuTlMoZnVsbG5hbWUsIHZhbHVlKSB7XG4gIHZhciB0MCwgaTA7XG4gIGZ1bmN0aW9uIHR3ZWVuKCkge1xuICAgIHZhciBpID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAoaSAhPT0gaTApIHQwID0gKGkwID0gaSkgJiYgYXR0ckludGVycG9sYXRlTlMoZnVsbG5hbWUsIGkpO1xuICAgIHJldHVybiB0MDtcbiAgfVxuICB0d2Vlbi5fdmFsdWUgPSB2YWx1ZTtcbiAgcmV0dXJuIHR3ZWVuO1xufVxuXG5mdW5jdGlvbiBhdHRyVHdlZW4obmFtZSwgdmFsdWUpIHtcbiAgdmFyIHQwLCBpMDtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChpICE9PSBpMCkgdDAgPSAoaTAgPSBpKSAmJiBhdHRySW50ZXJwb2xhdGUobmFtZSwgaSk7XG4gICAgcmV0dXJuIHQwO1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlKSB7XG4gIHZhciBrZXkgPSBcImF0dHIuXCIgKyBuYW1lO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHZhciBmdWxsbmFtZSA9IG5hbWVzcGFjZShuYW1lKTtcbiAgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCAoZnVsbG5hbWUubG9jYWwgPyBhdHRyVHdlZW5OUyA6IGF0dHJUd2VlbikoZnVsbG5hbWUsIHZhbHVlKSk7XG59XG4iLCJpbXBvcnQge2dldCwgaW5pdH0gZnJvbSBcIi4vc2NoZWR1bGUuanNcIjtcblxuZnVuY3Rpb24gZGVsYXlGdW5jdGlvbihpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIGluaXQodGhpcywgaWQpLmRlbGF5ID0gK3ZhbHVlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGRlbGF5Q29uc3RhbnQoaWQsIHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9ICt2YWx1ZSwgZnVuY3Rpb24oKSB7XG4gICAgaW5pdCh0aGlzLCBpZCkuZGVsYXkgPSB2YWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKCh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gZGVsYXlGdW5jdGlvblxuICAgICAgICAgIDogZGVsYXlDb25zdGFudCkoaWQsIHZhbHVlKSlcbiAgICAgIDogZ2V0KHRoaXMubm9kZSgpLCBpZCkuZGVsYXk7XG59XG4iLCJpbXBvcnQge2dldCwgc2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBkdXJhdGlvbkZ1bmN0aW9uKGlkLCB2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgc2V0KHRoaXMsIGlkKS5kdXJhdGlvbiA9ICt2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBkdXJhdGlvbkNvbnN0YW50KGlkLCB2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPSArdmFsdWUsIGZ1bmN0aW9uKCkge1xuICAgIHNldCh0aGlzLCBpZCkuZHVyYXRpb24gPSB2YWx1ZTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWUpIHtcbiAgdmFyIGlkID0gdGhpcy5faWQ7XG5cbiAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGhcbiAgICAgID8gdGhpcy5lYWNoKCh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgID8gZHVyYXRpb25GdW5jdGlvblxuICAgICAgICAgIDogZHVyYXRpb25Db25zdGFudCkoaWQsIHZhbHVlKSlcbiAgICAgIDogZ2V0KHRoaXMubm9kZSgpLCBpZCkuZHVyYXRpb247XG59XG4iLCJpbXBvcnQge2dldCwgc2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBlYXNlQ29uc3RhbnQoaWQsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgc2V0KHRoaXMsIGlkKS5lYXNlID0gdmFsdWU7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoXG4gICAgICA/IHRoaXMuZWFjaChlYXNlQ29uc3RhbnQoaWQsIHZhbHVlKSlcbiAgICAgIDogZ2V0KHRoaXMubm9kZSgpLCBpZCkuZWFzZTtcbn1cbiIsImltcG9ydCB7Z2V0LCBzZXQsIGluaXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmZ1bmN0aW9uIHN0YXJ0KG5hbWUpIHtcbiAgcmV0dXJuIChuYW1lICsgXCJcIikudHJpbSgpLnNwbGl0KC9efFxccysvKS5ldmVyeShmdW5jdGlvbih0KSB7XG4gICAgdmFyIGkgPSB0LmluZGV4T2YoXCIuXCIpO1xuICAgIGlmIChpID49IDApIHQgPSB0LnNsaWNlKDAsIGkpO1xuICAgIHJldHVybiAhdCB8fCB0ID09PSBcInN0YXJ0XCI7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBvbkZ1bmN0aW9uKGlkLCBuYW1lLCBsaXN0ZW5lcikge1xuICB2YXIgb24wLCBvbjEsIHNpdCA9IHN0YXJ0KG5hbWUpID8gaW5pdCA6IHNldDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzY2hlZHVsZSA9IHNpdCh0aGlzLCBpZCksXG4gICAgICAgIG9uID0gc2NoZWR1bGUub247XG5cbiAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIGEgZGlzcGF0Y2ggd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAvLyBqdXN0IGFzc2lnbiB0aGUgdXBkYXRlZCBzaGFyZWQgZGlzcGF0Y2ggYW5kIHdl4oCZcmUgZG9uZSFcbiAgICAvLyBPdGhlcndpc2UsIGNvcHktb24td3JpdGUuXG4gICAgaWYgKG9uICE9PSBvbjApIChvbjEgPSAob24wID0gb24pLmNvcHkoKSkub24obmFtZSwgbGlzdGVuZXIpO1xuXG4gICAgc2NoZWR1bGUub24gPSBvbjE7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIGxpc3RlbmVyKSB7XG4gIHZhciBpZCA9IHRoaXMuX2lkO1xuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoIDwgMlxuICAgICAgPyBnZXQodGhpcy5ub2RlKCksIGlkKS5vbi5vbihuYW1lKVxuICAgICAgOiB0aGlzLmVhY2gob25GdW5jdGlvbihpZCwgbmFtZSwgbGlzdGVuZXIpKTtcbn1cbiIsImltcG9ydCB7c2VsZWN0aW9ufSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5cbnZhciBTZWxlY3Rpb24gPSBzZWxlY3Rpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBTZWxlY3Rpb24odGhpcy5fZ3JvdXBzLCB0aGlzLl9wYXJlbnRzKTtcbn1cbiIsImltcG9ydCB7aW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MgYXMgaW50ZXJwb2xhdGVUcmFuc2Zvcm19IGZyb20gXCJkMy1pbnRlcnBvbGF0ZVwiO1xuaW1wb3J0IHtzdHlsZX0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5pbXBvcnQge3R3ZWVuVmFsdWV9IGZyb20gXCIuL3R3ZWVuLmpzXCI7XG5pbXBvcnQgaW50ZXJwb2xhdGUgZnJvbSBcIi4vaW50ZXJwb2xhdGUuanNcIjtcblxuZnVuY3Rpb24gc3R5bGVOdWxsKG5hbWUsIGludGVycG9sYXRlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSBzdHlsZSh0aGlzLCBuYW1lKSxcbiAgICAgICAgc3RyaW5nMSA9ICh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpLCBzdHlsZSh0aGlzLCBuYW1lKSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHN0cmluZzEwID0gc3RyaW5nMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlUmVtb3ZlKG5hbWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobmFtZSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlQ29uc3RhbnQobmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlMSkge1xuICB2YXIgc3RyaW5nMDAsXG4gICAgICBzdHJpbmcxID0gdmFsdWUxICsgXCJcIixcbiAgICAgIGludGVycG9sYXRlMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBzdHJpbmcwID0gc3R5bGUodGhpcywgbmFtZSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlRnVuY3Rpb24obmFtZSwgaW50ZXJwb2xhdGUsIHZhbHVlKSB7XG4gIHZhciBzdHJpbmcwMCxcbiAgICAgIHN0cmluZzEwLFxuICAgICAgaW50ZXJwb2xhdGUwO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHN0cmluZzAgPSBzdHlsZSh0aGlzLCBuYW1lKSxcbiAgICAgICAgdmFsdWUxID0gdmFsdWUodGhpcyksXG4gICAgICAgIHN0cmluZzEgPSB2YWx1ZTEgKyBcIlwiO1xuICAgIGlmICh2YWx1ZTEgPT0gbnVsbCkgc3RyaW5nMSA9IHZhbHVlMSA9ICh0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG5hbWUpLCBzdHlsZSh0aGlzLCBuYW1lKSk7XG4gICAgcmV0dXJuIHN0cmluZzAgPT09IHN0cmluZzEgPyBudWxsXG4gICAgICAgIDogc3RyaW5nMCA9PT0gc3RyaW5nMDAgJiYgc3RyaW5nMSA9PT0gc3RyaW5nMTAgPyBpbnRlcnBvbGF0ZTBcbiAgICAgICAgOiAoc3RyaW5nMTAgPSBzdHJpbmcxLCBpbnRlcnBvbGF0ZTAgPSBpbnRlcnBvbGF0ZShzdHJpbmcwMCA9IHN0cmluZzAsIHZhbHVlMSkpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBzdHlsZU1heWJlUmVtb3ZlKGlkLCBuYW1lKSB7XG4gIHZhciBvbjAsIG9uMSwgbGlzdGVuZXIwLCBrZXkgPSBcInN0eWxlLlwiICsgbmFtZSwgZXZlbnQgPSBcImVuZC5cIiArIGtleSwgcmVtb3ZlO1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgb24gPSBzY2hlZHVsZS5vbixcbiAgICAgICAgbGlzdGVuZXIgPSBzY2hlZHVsZS52YWx1ZVtrZXldID09IG51bGwgPyByZW1vdmUgfHwgKHJlbW92ZSA9IHN0eWxlUmVtb3ZlKG5hbWUpKSA6IHVuZGVmaW5lZDtcblxuICAgIC8vIElmIHRoaXMgbm9kZSBzaGFyZWQgYSBkaXNwYXRjaCB3aXRoIHRoZSBwcmV2aW91cyBub2RlLFxuICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCBkaXNwYXRjaCBhbmQgd2XigJlyZSBkb25lIVxuICAgIC8vIE90aGVyd2lzZSwgY29weS1vbi13cml0ZS5cbiAgICBpZiAob24gIT09IG9uMCB8fCBsaXN0ZW5lcjAgIT09IGxpc3RlbmVyKSAob24xID0gKG9uMCA9IG9uKS5jb3B5KCkpLm9uKGV2ZW50LCBsaXN0ZW5lcjAgPSBsaXN0ZW5lcik7XG5cbiAgICBzY2hlZHVsZS5vbiA9IG9uMTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciBpID0gKG5hbWUgKz0gXCJcIikgPT09IFwidHJhbnNmb3JtXCIgPyBpbnRlcnBvbGF0ZVRyYW5zZm9ybSA6IGludGVycG9sYXRlO1xuICByZXR1cm4gdmFsdWUgPT0gbnVsbCA/IHRoaXNcbiAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlTnVsbChuYW1lLCBpKSlcbiAgICAgIC5vbihcImVuZC5zdHlsZS5cIiArIG5hbWUsIHN0eWxlUmVtb3ZlKG5hbWUpKVxuICAgIDogdHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIgPyB0aGlzXG4gICAgICAuc3R5bGVUd2VlbihuYW1lLCBzdHlsZUZ1bmN0aW9uKG5hbWUsIGksIHR3ZWVuVmFsdWUodGhpcywgXCJzdHlsZS5cIiArIG5hbWUsIHZhbHVlKSkpXG4gICAgICAuZWFjaChzdHlsZU1heWJlUmVtb3ZlKHRoaXMuX2lkLCBuYW1lKSlcbiAgICA6IHRoaXNcbiAgICAgIC5zdHlsZVR3ZWVuKG5hbWUsIHN0eWxlQ29uc3RhbnQobmFtZSwgaSwgdmFsdWUpLCBwcmlvcml0eSlcbiAgICAgIC5vbihcImVuZC5zdHlsZS5cIiArIG5hbWUsIG51bGwpO1xufVxuIiwiZnVuY3Rpb24gc3R5bGVJbnRlcnBvbGF0ZShuYW1lLCBpLCBwcmlvcml0eSkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkobmFtZSwgaS5jYWxsKHRoaXMsIHQpLCBwcmlvcml0eSk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHN0eWxlVHdlZW4obmFtZSwgdmFsdWUsIHByaW9yaXR5KSB7XG4gIHZhciB0LCBpMDtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChpICE9PSBpMCkgdCA9IChpMCA9IGkpICYmIHN0eWxlSW50ZXJwb2xhdGUobmFtZSwgaSwgcHJpb3JpdHkpO1xuICAgIHJldHVybiB0O1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5hbWUsIHZhbHVlLCBwcmlvcml0eSkge1xuICB2YXIga2V5ID0gXCJzdHlsZS5cIiArIChuYW1lICs9IFwiXCIpO1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDIpIHJldHVybiAoa2V5ID0gdGhpcy50d2VlbihrZXkpKSAmJiBrZXkuX3ZhbHVlO1xuICBpZiAodmFsdWUgPT0gbnVsbCkgcmV0dXJuIHRoaXMudHdlZW4oa2V5LCBudWxsKTtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgRXJyb3I7XG4gIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgc3R5bGVUd2VlbihuYW1lLCB2YWx1ZSwgcHJpb3JpdHkgPT0gbnVsbCA/IFwiXCIgOiBwcmlvcml0eSkpO1xufVxuIiwiZnVuY3Rpb24gdGV4dEludGVycG9sYXRlKGkpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gaS5jYWxsKHRoaXMsIHQpO1xuICB9O1xufVxuXG5mdW5jdGlvbiB0ZXh0VHdlZW4odmFsdWUpIHtcbiAgdmFyIHQwLCBpMDtcbiAgZnVuY3Rpb24gdHdlZW4oKSB7XG4gICAgdmFyIGkgPSB2YWx1ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGlmIChpICE9PSBpMCkgdDAgPSAoaTAgPSBpKSAmJiB0ZXh0SW50ZXJwb2xhdGUoaSk7XG4gICAgcmV0dXJuIHQwO1xuICB9XG4gIHR3ZWVuLl92YWx1ZSA9IHZhbHVlO1xuICByZXR1cm4gdHdlZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHZhciBrZXkgPSBcInRleHRcIjtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPCAxKSByZXR1cm4gKGtleSA9IHRoaXMudHdlZW4oa2V5KSkgJiYga2V5Ll92YWx1ZTtcbiAgaWYgKHZhbHVlID09IG51bGwpIHJldHVybiB0aGlzLnR3ZWVuKGtleSwgbnVsbCk7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gdGhpcy50d2VlbihrZXksIHRleHRUd2Vlbih2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCB0cmFuc2l0aW9uX2F0dHIgZnJvbSBcIi4vYXR0ci5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fYXR0clR3ZWVuIGZyb20gXCIuL2F0dHJUd2Vlbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZGVsYXkgZnJvbSBcIi4vZGVsYXkuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2R1cmF0aW9uIGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9lYXNlIGZyb20gXCIuL2Vhc2UuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX2Vhc2VWYXJ5aW5nIGZyb20gXCIuL2Vhc2VWYXJ5aW5nLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9maWx0ZXIgZnJvbSBcIi4vZmlsdGVyLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9tZXJnZSBmcm9tIFwiLi9tZXJnZS5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fb24gZnJvbSBcIi4vb24uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3JlbW92ZSBmcm9tIFwiLi9yZW1vdmUuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3NlbGVjdCBmcm9tIFwiLi9zZWxlY3QuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3NlbGVjdEFsbCBmcm9tIFwiLi9zZWxlY3RBbGwuanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3NlbGVjdGlvbiBmcm9tIFwiLi9zZWxlY3Rpb24uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3N0eWxlIGZyb20gXCIuL3N0eWxlLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl9zdHlsZVR3ZWVuIGZyb20gXCIuL3N0eWxlVHdlZW4uanNcIjtcbmltcG9ydCB0cmFuc2l0aW9uX3RleHQgZnJvbSBcIi4vdGV4dC5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fdGV4dFR3ZWVuIGZyb20gXCIuL3RleHRUd2Vlbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fdHJhbnNpdGlvbiBmcm9tIFwiLi90cmFuc2l0aW9uLmpzXCI7XG5pbXBvcnQgdHJhbnNpdGlvbl90d2VlbiBmcm9tIFwiLi90d2Vlbi5qc1wiO1xuaW1wb3J0IHRyYW5zaXRpb25fZW5kIGZyb20gXCIuL2VuZC5qc1wiO1xuXG52YXIgaWQgPSAwO1xuXG5leHBvcnQgZnVuY3Rpb24gVHJhbnNpdGlvbihncm91cHMsIHBhcmVudHMsIG5hbWUsIGlkKSB7XG4gIHRoaXMuX2dyb3VwcyA9IGdyb3VwcztcbiAgdGhpcy5fcGFyZW50cyA9IHBhcmVudHM7XG4gIHRoaXMuX25hbWUgPSBuYW1lO1xuICB0aGlzLl9pZCA9IGlkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0cmFuc2l0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHNlbGVjdGlvbigpLnRyYW5zaXRpb24obmFtZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBuZXdJZCgpIHtcbiAgcmV0dXJuICsraWQ7XG59XG5cbnZhciBzZWxlY3Rpb25fcHJvdG90eXBlID0gc2VsZWN0aW9uLnByb3RvdHlwZTtcblxuVHJhbnNpdGlvbi5wcm90b3R5cGUgPSB0cmFuc2l0aW9uLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFRyYW5zaXRpb24sXG4gIHNlbGVjdDogdHJhbnNpdGlvbl9zZWxlY3QsXG4gIHNlbGVjdEFsbDogdHJhbnNpdGlvbl9zZWxlY3RBbGwsXG4gIGZpbHRlcjogdHJhbnNpdGlvbl9maWx0ZXIsXG4gIG1lcmdlOiB0cmFuc2l0aW9uX21lcmdlLFxuICBzZWxlY3Rpb246IHRyYW5zaXRpb25fc2VsZWN0aW9uLFxuICB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uX3RyYW5zaXRpb24sXG4gIGNhbGw6IHNlbGVjdGlvbl9wcm90b3R5cGUuY2FsbCxcbiAgbm9kZXM6IHNlbGVjdGlvbl9wcm90b3R5cGUubm9kZXMsXG4gIG5vZGU6IHNlbGVjdGlvbl9wcm90b3R5cGUubm9kZSxcbiAgc2l6ZTogc2VsZWN0aW9uX3Byb3RvdHlwZS5zaXplLFxuICBlbXB0eTogc2VsZWN0aW9uX3Byb3RvdHlwZS5lbXB0eSxcbiAgZWFjaDogc2VsZWN0aW9uX3Byb3RvdHlwZS5lYWNoLFxuICBvbjogdHJhbnNpdGlvbl9vbixcbiAgYXR0cjogdHJhbnNpdGlvbl9hdHRyLFxuICBhdHRyVHdlZW46IHRyYW5zaXRpb25fYXR0clR3ZWVuLFxuICBzdHlsZTogdHJhbnNpdGlvbl9zdHlsZSxcbiAgc3R5bGVUd2VlbjogdHJhbnNpdGlvbl9zdHlsZVR3ZWVuLFxuICB0ZXh0OiB0cmFuc2l0aW9uX3RleHQsXG4gIHRleHRUd2VlbjogdHJhbnNpdGlvbl90ZXh0VHdlZW4sXG4gIHJlbW92ZTogdHJhbnNpdGlvbl9yZW1vdmUsXG4gIHR3ZWVuOiB0cmFuc2l0aW9uX3R3ZWVuLFxuICBkZWxheTogdHJhbnNpdGlvbl9kZWxheSxcbiAgZHVyYXRpb246IHRyYW5zaXRpb25fZHVyYXRpb24sXG4gIGVhc2U6IHRyYW5zaXRpb25fZWFzZSxcbiAgZWFzZVZhcnlpbmc6IHRyYW5zaXRpb25fZWFzZVZhcnlpbmcsXG4gIGVuZDogdHJhbnNpdGlvbl9lbmQsXG4gIFtTeW1ib2wuaXRlcmF0b3JdOiBzZWxlY3Rpb25fcHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl1cbn07XG4iLCJpbXBvcnQge3NlbGVjdG9yfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZCA9IHRoaXMuX2lkO1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IG5ldyBBcnJheShuKSwgbm9kZSwgc3Vibm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmICgobm9kZSA9IGdyb3VwW2ldKSAmJiAoc3Vibm9kZSA9IHNlbGVjdC5jYWxsKG5vZGUsIG5vZGUuX19kYXRhX18sIGksIGdyb3VwKSkpIHtcbiAgICAgICAgaWYgKFwiX19kYXRhX19cIiBpbiBub2RlKSBzdWJub2RlLl9fZGF0YV9fID0gbm9kZS5fX2RhdGFfXztcbiAgICAgICAgc3ViZ3JvdXBbaV0gPSBzdWJub2RlO1xuICAgICAgICBzY2hlZHVsZShzdWJncm91cFtpXSwgbmFtZSwgaWQsIGksIHN1Ymdyb3VwLCBnZXQobm9kZSwgaWQpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24oc3ViZ3JvdXBzLCB0aGlzLl9wYXJlbnRzLCBuYW1lLCBpZCk7XG59XG4iLCJpbXBvcnQge3NlbGVjdG9yQWxsfSBmcm9tIFwiZDMtc2VsZWN0aW9uXCI7XG5pbXBvcnQge1RyYW5zaXRpb259IGZyb20gXCIuL2luZGV4LmpzXCI7XG5pbXBvcnQgc2NoZWR1bGUsIHtnZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNlbGVjdCkge1xuICB2YXIgbmFtZSA9IHRoaXMuX25hbWUsXG4gICAgICBpZCA9IHRoaXMuX2lkO1xuXG4gIGlmICh0eXBlb2Ygc2VsZWN0ICE9PSBcImZ1bmN0aW9uXCIpIHNlbGVjdCA9IHNlbGVjdG9yQWxsKHNlbGVjdCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gW10sIHBhcmVudHMgPSBbXSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgZm9yICh2YXIgY2hpbGRyZW4gPSBzZWxlY3QuY2FsbChub2RlLCBub2RlLl9fZGF0YV9fLCBpLCBncm91cCksIGNoaWxkLCBpbmhlcml0ID0gZ2V0KG5vZGUsIGlkKSwgayA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGsgPCBsOyArK2spIHtcbiAgICAgICAgICBpZiAoY2hpbGQgPSBjaGlsZHJlbltrXSkge1xuICAgICAgICAgICAgc2NoZWR1bGUoY2hpbGQsIG5hbWUsIGlkLCBrLCBjaGlsZHJlbiwgaW5oZXJpdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN1Ymdyb3Vwcy5wdXNoKGNoaWxkcmVuKTtcbiAgICAgICAgcGFyZW50cy5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihzdWJncm91cHMsIHBhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsImltcG9ydCB7bWF0Y2hlcn0gZnJvbSBcImQzLXNlbGVjdGlvblwiO1xuaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihtYXRjaCkge1xuICBpZiAodHlwZW9mIG1hdGNoICE9PSBcImZ1bmN0aW9uXCIpIG1hdGNoID0gbWF0Y2hlcihtYXRjaCk7XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgc3ViZ3JvdXBzID0gbmV3IEFycmF5KG0pLCBqID0gMDsgaiA8IG07ICsraikge1xuICAgIGZvciAodmFyIGdyb3VwID0gZ3JvdXBzW2pdLCBuID0gZ3JvdXAubGVuZ3RoLCBzdWJncm91cCA9IHN1Ymdyb3Vwc1tqXSA9IFtdLCBub2RlLCBpID0gMDsgaSA8IG47ICsraSkge1xuICAgICAgaWYgKChub2RlID0gZ3JvdXBbaV0pICYmIG1hdGNoLmNhbGwobm9kZSwgbm9kZS5fX2RhdGFfXywgaSwgZ3JvdXApKSB7XG4gICAgICAgIHN1Ymdyb3VwLnB1c2gobm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKHN1Ymdyb3VwcywgdGhpcy5fcGFyZW50cywgdGhpcy5fbmFtZSwgdGhpcy5faWQpO1xufVxuIiwiaW1wb3J0IHtUcmFuc2l0aW9ufSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih0cmFuc2l0aW9uKSB7XG4gIGlmICh0cmFuc2l0aW9uLl9pZCAhPT0gdGhpcy5faWQpIHRocm93IG5ldyBFcnJvcjtcblxuICBmb3IgKHZhciBncm91cHMwID0gdGhpcy5fZ3JvdXBzLCBncm91cHMxID0gdHJhbnNpdGlvbi5fZ3JvdXBzLCBtMCA9IGdyb3VwczAubGVuZ3RoLCBtMSA9IGdyb3VwczEubGVuZ3RoLCBtID0gTWF0aC5taW4obTAsIG0xKSwgbWVyZ2VzID0gbmV3IEFycmF5KG0wKSwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cDAgPSBncm91cHMwW2pdLCBncm91cDEgPSBncm91cHMxW2pdLCBuID0gZ3JvdXAwLmxlbmd0aCwgbWVyZ2UgPSBtZXJnZXNbal0gPSBuZXcgQXJyYXkobiksIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwMFtpXSB8fCBncm91cDFbaV0pIHtcbiAgICAgICAgbWVyZ2VbaV0gPSBub2RlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBqIDwgbTA7ICsraikge1xuICAgIG1lcmdlc1tqXSA9IGdyb3VwczBbal07XG4gIH1cblxuICByZXR1cm4gbmV3IFRyYW5zaXRpb24obWVyZ2VzLCB0aGlzLl9wYXJlbnRzLCB0aGlzLl9uYW1lLCB0aGlzLl9pZCk7XG59XG4iLCJpbXBvcnQge1RyYW5zaXRpb24sIG5ld0lkfSBmcm9tIFwiLi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlLCB7Z2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIG5hbWUgPSB0aGlzLl9uYW1lLFxuICAgICAgaWQwID0gdGhpcy5faWQsXG4gICAgICBpZDEgPSBuZXdJZCgpO1xuXG4gIGZvciAodmFyIGdyb3VwcyA9IHRoaXMuX2dyb3VwcywgbSA9IGdyb3Vwcy5sZW5ndGgsIGogPSAwOyBqIDwgbTsgKytqKSB7XG4gICAgZm9yICh2YXIgZ3JvdXAgPSBncm91cHNbal0sIG4gPSBncm91cC5sZW5ndGgsIG5vZGUsIGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAobm9kZSA9IGdyb3VwW2ldKSB7XG4gICAgICAgIHZhciBpbmhlcml0ID0gZ2V0KG5vZGUsIGlkMCk7XG4gICAgICAgIHNjaGVkdWxlKG5vZGUsIG5hbWUsIGlkMSwgaSwgZ3JvdXAsIHtcbiAgICAgICAgICB0aW1lOiBpbmhlcml0LnRpbWUgKyBpbmhlcml0LmRlbGF5ICsgaW5oZXJpdC5kdXJhdGlvbixcbiAgICAgICAgICBkZWxheTogMCxcbiAgICAgICAgICBkdXJhdGlvbjogaW5oZXJpdC5kdXJhdGlvbixcbiAgICAgICAgICBlYXNlOiBpbmhlcml0LmVhc2VcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ldyBUcmFuc2l0aW9uKGdyb3VwcywgdGhpcy5fcGFyZW50cywgbmFtZSwgaWQxKTtcbn1cbiIsImltcG9ydCB7dHdlZW5WYWx1ZX0gZnJvbSBcIi4vdHdlZW4uanNcIjtcblxuZnVuY3Rpb24gdGV4dENvbnN0YW50KHZhbHVlKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHRleHRGdW5jdGlvbih2YWx1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHZhbHVlMSA9IHZhbHVlKHRoaXMpO1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTEgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZTE7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0aGlzLnR3ZWVuKFwidGV4dFwiLCB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgPyB0ZXh0RnVuY3Rpb24odHdlZW5WYWx1ZSh0aGlzLCBcInRleHRcIiwgdmFsdWUpKVxuICAgICAgOiB0ZXh0Q29uc3RhbnQodmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSArIFwiXCIpKTtcbn1cbiIsImZ1bmN0aW9uIHJlbW92ZUZ1bmN0aW9uKGlkKSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuICAgIGZvciAodmFyIGkgaW4gdGhpcy5fX3RyYW5zaXRpb24pIGlmICgraSAhPT0gaWQpIHJldHVybjtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQucmVtb3ZlQ2hpbGQodGhpcyk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5vbihcImVuZC5yZW1vdmVcIiwgcmVtb3ZlRnVuY3Rpb24odGhpcy5faWQpKTtcbn1cbiIsImltcG9ydCB7c2V0fSBmcm9tIFwiLi9zY2hlZHVsZS5qc1wiO1xuXG5mdW5jdGlvbiBlYXNlVmFyeWluZyhpZCwgdmFsdWUpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciB2ID0gdmFsdWUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICBpZiAodHlwZW9mIHYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICAgIHNldCh0aGlzLCBpZCkuZWFzZSA9IHY7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IEVycm9yO1xuICByZXR1cm4gdGhpcy5lYWNoKGVhc2VWYXJ5aW5nKHRoaXMuX2lkLCB2YWx1ZSkpO1xufVxuIiwiaW1wb3J0IHtzZXR9IGZyb20gXCIuL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgb24wLCBvbjEsIHRoYXQgPSB0aGlzLCBpZCA9IHRoYXQuX2lkLCBzaXplID0gdGhhdC5zaXplKCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICB2YXIgY2FuY2VsID0ge3ZhbHVlOiByZWplY3R9LFxuICAgICAgICBlbmQgPSB7dmFsdWU6IGZ1bmN0aW9uKCkgeyBpZiAoLS1zaXplID09PSAwKSByZXNvbHZlKCk7IH19O1xuXG4gICAgdGhhdC5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHNjaGVkdWxlID0gc2V0KHRoaXMsIGlkKSxcbiAgICAgICAgICBvbiA9IHNjaGVkdWxlLm9uO1xuXG4gICAgICAvLyBJZiB0aGlzIG5vZGUgc2hhcmVkIGEgZGlzcGF0Y2ggd2l0aCB0aGUgcHJldmlvdXMgbm9kZSxcbiAgICAgIC8vIGp1c3QgYXNzaWduIHRoZSB1cGRhdGVkIHNoYXJlZCBkaXNwYXRjaCBhbmQgd2XigJlyZSBkb25lIVxuICAgICAgLy8gT3RoZXJ3aXNlLCBjb3B5LW9uLXdyaXRlLlxuICAgICAgaWYgKG9uICE9PSBvbjApIHtcbiAgICAgICAgb24xID0gKG9uMCA9IG9uKS5jb3B5KCk7XG4gICAgICAgIG9uMS5fLmNhbmNlbC5wdXNoKGNhbmNlbCk7XG4gICAgICAgIG9uMS5fLmludGVycnVwdC5wdXNoKGNhbmNlbCk7XG4gICAgICAgIG9uMS5fLmVuZC5wdXNoKGVuZCk7XG4gICAgICB9XG5cbiAgICAgIHNjaGVkdWxlLm9uID0gb24xO1xuICAgIH0pO1xuXG4gICAgLy8gVGhlIHNlbGVjdGlvbiB3YXMgZW1wdHksIHJlc29sdmUgZW5kIGltbWVkaWF0ZWx5XG4gICAgaWYgKHNpemUgPT09IDApIHJlc29sdmUoKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQge1RyYW5zaXRpb24sIG5ld0lkfSBmcm9tIFwiLi4vdHJhbnNpdGlvbi9pbmRleC5qc1wiO1xuaW1wb3J0IHNjaGVkdWxlIGZyb20gXCIuLi90cmFuc2l0aW9uL3NjaGVkdWxlLmpzXCI7XG5pbXBvcnQge2Vhc2VDdWJpY0luT3V0fSBmcm9tIFwiZDMtZWFzZVwiO1xuaW1wb3J0IHtub3d9IGZyb20gXCJkMy10aW1lclwiO1xuXG52YXIgZGVmYXVsdFRpbWluZyA9IHtcbiAgdGltZTogbnVsbCwgLy8gU2V0IG9uIHVzZS5cbiAgZGVsYXk6IDAsXG4gIGR1cmF0aW9uOiAyNTAsXG4gIGVhc2U6IGVhc2VDdWJpY0luT3V0XG59O1xuXG5mdW5jdGlvbiBpbmhlcml0KG5vZGUsIGlkKSB7XG4gIHZhciB0aW1pbmc7XG4gIHdoaWxlICghKHRpbWluZyA9IG5vZGUuX190cmFuc2l0aW9uKSB8fCAhKHRpbWluZyA9IHRpbWluZ1tpZF0pKSB7XG4gICAgaWYgKCEobm9kZSA9IG5vZGUucGFyZW50Tm9kZSkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgdHJhbnNpdGlvbiAke2lkfSBub3QgZm91bmRgKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRpbWluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICB2YXIgaWQsXG4gICAgICB0aW1pbmc7XG5cbiAgaWYgKG5hbWUgaW5zdGFuY2VvZiBUcmFuc2l0aW9uKSB7XG4gICAgaWQgPSBuYW1lLl9pZCwgbmFtZSA9IG5hbWUuX25hbWU7XG4gIH0gZWxzZSB7XG4gICAgaWQgPSBuZXdJZCgpLCAodGltaW5nID0gZGVmYXVsdFRpbWluZykudGltZSA9IG5vdygpLCBuYW1lID0gbmFtZSA9PSBudWxsID8gbnVsbCA6IG5hbWUgKyBcIlwiO1xuICB9XG5cbiAgZm9yICh2YXIgZ3JvdXBzID0gdGhpcy5fZ3JvdXBzLCBtID0gZ3JvdXBzLmxlbmd0aCwgaiA9IDA7IGogPCBtOyArK2opIHtcbiAgICBmb3IgKHZhciBncm91cCA9IGdyb3Vwc1tqXSwgbiA9IGdyb3VwLmxlbmd0aCwgbm9kZSwgaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIGlmIChub2RlID0gZ3JvdXBbaV0pIHtcbiAgICAgICAgc2NoZWR1bGUobm9kZSwgbmFtZSwgaWQsIGksIGdyb3VwLCB0aW1pbmcgfHwgaW5oZXJpdChub2RlLCBpZCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXcgVHJhbnNpdGlvbihncm91cHMsIHRoaXMuX3BhcmVudHMsIG5hbWUsIGlkKTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBjdWJpY0luKHQpIHtcbiAgcmV0dXJuIHQgKiB0ICogdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljT3V0KHQpIHtcbiAgcmV0dXJuIC0tdCAqIHQgKiB0ICsgMTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGN1YmljSW5PdXQodCkge1xuICByZXR1cm4gKCh0ICo9IDIpIDw9IDEgPyB0ICogdCAqIHQgOiAodCAtPSAyKSAqIHQgKiB0ICsgMikgLyAyO1xufVxuIiwiaW1wb3J0IHtzZWxlY3Rpb259IGZyb20gXCJkMy1zZWxlY3Rpb25cIjtcbmltcG9ydCBzZWxlY3Rpb25faW50ZXJydXB0IGZyb20gXCIuL2ludGVycnVwdC5qc1wiO1xuaW1wb3J0IHNlbGVjdGlvbl90cmFuc2l0aW9uIGZyb20gXCIuL3RyYW5zaXRpb24uanNcIjtcblxuc2VsZWN0aW9uLnByb3RvdHlwZS5pbnRlcnJ1cHQgPSBzZWxlY3Rpb25faW50ZXJydXB0O1xuc2VsZWN0aW9uLnByb3RvdHlwZS50cmFuc2l0aW9uID0gc2VsZWN0aW9uX3RyYW5zaXRpb247XG4iLCJpbXBvcnQgaW50ZXJydXB0IGZyb20gXCIuLi9pbnRlcnJ1cHQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24obmFtZSkge1xuICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uKCkge1xuICAgIGludGVycnVwdCh0aGlzLCBuYW1lKTtcbiAgfSk7XG59XG4iLCJpbXBvcnQge1NUQVJUSU5HLCBFTkRJTkcsIEVOREVEfSBmcm9tIFwiLi90cmFuc2l0aW9uL3NjaGVkdWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG5vZGUsIG5hbWUpIHtcbiAgdmFyIHNjaGVkdWxlcyA9IG5vZGUuX190cmFuc2l0aW9uLFxuICAgICAgc2NoZWR1bGUsXG4gICAgICBhY3RpdmUsXG4gICAgICBlbXB0eSA9IHRydWUsXG4gICAgICBpO1xuXG4gIGlmICghc2NoZWR1bGVzKSByZXR1cm47XG5cbiAgbmFtZSA9IG5hbWUgPT0gbnVsbCA/IG51bGwgOiBuYW1lICsgXCJcIjtcblxuICBmb3IgKGkgaW4gc2NoZWR1bGVzKSB7XG4gICAgaWYgKChzY2hlZHVsZSA9IHNjaGVkdWxlc1tpXSkubmFtZSAhPT0gbmFtZSkgeyBlbXB0eSA9IGZhbHNlOyBjb250aW51ZTsgfVxuICAgIGFjdGl2ZSA9IHNjaGVkdWxlLnN0YXRlID4gU1RBUlRJTkcgJiYgc2NoZWR1bGUuc3RhdGUgPCBFTkRJTkc7XG4gICAgc2NoZWR1bGUuc3RhdGUgPSBFTkRFRDtcbiAgICBzY2hlZHVsZS50aW1lci5zdG9wKCk7XG4gICAgc2NoZWR1bGUub24uY2FsbChhY3RpdmUgPyBcImludGVycnVwdFwiIDogXCJjYW5jZWxcIiwgbm9kZSwgbm9kZS5fX2RhdGFfXywgc2NoZWR1bGUuaW5kZXgsIHNjaGVkdWxlLmdyb3VwKTtcbiAgICBkZWxldGUgc2NoZWR1bGVzW2ldO1xuICB9XG5cbiAgaWYgKGVtcHR5KSBkZWxldGUgbm9kZS5fX3RyYW5zaXRpb247XG59XG4iLCJjb25zdCBwaSA9IE1hdGguUEksXG4gICAgdGF1ID0gMiAqIHBpLFxuICAgIGVwc2lsb24gPSAxZS02LFxuICAgIHRhdUVwc2lsb24gPSB0YXUgLSBlcHNpbG9uO1xuXG5mdW5jdGlvbiBQYXRoKCkge1xuICB0aGlzLl94MCA9IHRoaXMuX3kwID0gLy8gc3RhcnQgb2YgY3VycmVudCBzdWJwYXRoXG4gIHRoaXMuX3gxID0gdGhpcy5feTEgPSBudWxsOyAvLyBlbmQgb2YgY3VycmVudCBzdWJwYXRoXG4gIHRoaXMuXyA9IFwiXCI7XG59XG5cbmZ1bmN0aW9uIHBhdGgoKSB7XG4gIHJldHVybiBuZXcgUGF0aDtcbn1cblxuUGF0aC5wcm90b3R5cGUgPSBwYXRoLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFBhdGgsXG4gIG1vdmVUbzogZnVuY3Rpb24oeCwgeSkge1xuICAgIHRoaXMuXyArPSBcIk1cIiArICh0aGlzLl94MCA9IHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTAgPSB0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgY2xvc2VQYXRoOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5feDEgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3gxID0gdGhpcy5feDAsIHRoaXMuX3kxID0gdGhpcy5feTA7XG4gICAgICB0aGlzLl8gKz0gXCJaXCI7XG4gICAgfVxuICB9LFxuICBsaW5lVG86IGZ1bmN0aW9uKHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJMXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgcXVhZHJhdGljQ3VydmVUbzogZnVuY3Rpb24oeDEsIHkxLCB4LCB5KSB7XG4gICAgdGhpcy5fICs9IFwiUVwiICsgKCt4MSkgKyBcIixcIiArICgreTEpICsgXCIsXCIgKyAodGhpcy5feDEgPSAreCkgKyBcIixcIiArICh0aGlzLl95MSA9ICt5KTtcbiAgfSxcbiAgYmV6aWVyQ3VydmVUbzogZnVuY3Rpb24oeDEsIHkxLCB4MiwgeTIsIHgsIHkpIHtcbiAgICB0aGlzLl8gKz0gXCJDXCIgKyAoK3gxKSArIFwiLFwiICsgKCt5MSkgKyBcIixcIiArICgreDIpICsgXCIsXCIgKyAoK3kyKSArIFwiLFwiICsgKHRoaXMuX3gxID0gK3gpICsgXCIsXCIgKyAodGhpcy5feTEgPSAreSk7XG4gIH0sXG4gIGFyY1RvOiBmdW5jdGlvbih4MSwgeTEsIHgyLCB5Miwgcikge1xuICAgIHgxID0gK3gxLCB5MSA9ICt5MSwgeDIgPSAreDIsIHkyID0gK3kyLCByID0gK3I7XG4gICAgdmFyIHgwID0gdGhpcy5feDEsXG4gICAgICAgIHkwID0gdGhpcy5feTEsXG4gICAgICAgIHgyMSA9IHgyIC0geDEsXG4gICAgICAgIHkyMSA9IHkyIC0geTEsXG4gICAgICAgIHgwMSA9IHgwIC0geDEsXG4gICAgICAgIHkwMSA9IHkwIC0geTEsXG4gICAgICAgIGwwMV8yID0geDAxICogeDAxICsgeTAxICogeTAxO1xuXG4gICAgLy8gSXMgdGhlIHJhZGl1cyBuZWdhdGl2ZT8gRXJyb3IuXG4gICAgaWYgKHIgPCAwKSB0aHJvdyBuZXcgRXJyb3IoXCJuZWdhdGl2ZSByYWRpdXM6IFwiICsgcik7XG5cbiAgICAvLyBJcyB0aGlzIHBhdGggZW1wdHk/IE1vdmUgdG8gKHgxLHkxKS5cbiAgICBpZiAodGhpcy5feDEgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuXyArPSBcIk1cIiArICh0aGlzLl94MSA9IHgxKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTEpO1xuICAgIH1cblxuICAgIC8vIE9yLCBpcyAoeDEseTEpIGNvaW5jaWRlbnQgd2l0aCAoeDAseTApPyBEbyBub3RoaW5nLlxuICAgIGVsc2UgaWYgKCEobDAxXzIgPiBlcHNpbG9uKSk7XG5cbiAgICAvLyBPciwgYXJlICh4MCx5MCksICh4MSx5MSkgYW5kICh4Mix5MikgY29sbGluZWFyP1xuICAgIC8vIEVxdWl2YWxlbnRseSwgaXMgKHgxLHkxKSBjb2luY2lkZW50IHdpdGggKHgyLHkyKT9cbiAgICAvLyBPciwgaXMgdGhlIHJhZGl1cyB6ZXJvPyBMaW5lIHRvICh4MSx5MSkuXG4gICAgZWxzZSBpZiAoIShNYXRoLmFicyh5MDEgKiB4MjEgLSB5MjEgKiB4MDEpID4gZXBzaWxvbikgfHwgIXIpIHtcbiAgICAgIHRoaXMuXyArPSBcIkxcIiArICh0aGlzLl94MSA9IHgxKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTEpO1xuICAgIH1cblxuICAgIC8vIE90aGVyd2lzZSwgZHJhdyBhbiBhcmMhXG4gICAgZWxzZSB7XG4gICAgICB2YXIgeDIwID0geDIgLSB4MCxcbiAgICAgICAgICB5MjAgPSB5MiAtIHkwLFxuICAgICAgICAgIGwyMV8yID0geDIxICogeDIxICsgeTIxICogeTIxLFxuICAgICAgICAgIGwyMF8yID0geDIwICogeDIwICsgeTIwICogeTIwLFxuICAgICAgICAgIGwyMSA9IE1hdGguc3FydChsMjFfMiksXG4gICAgICAgICAgbDAxID0gTWF0aC5zcXJ0KGwwMV8yKSxcbiAgICAgICAgICBsID0gciAqIE1hdGgudGFuKChwaSAtIE1hdGguYWNvcygobDIxXzIgKyBsMDFfMiAtIGwyMF8yKSAvICgyICogbDIxICogbDAxKSkpIC8gMiksXG4gICAgICAgICAgdDAxID0gbCAvIGwwMSxcbiAgICAgICAgICB0MjEgPSBsIC8gbDIxO1xuXG4gICAgICAvLyBJZiB0aGUgc3RhcnQgdGFuZ2VudCBpcyBub3QgY29pbmNpZGVudCB3aXRoICh4MCx5MCksIGxpbmUgdG8uXG4gICAgICBpZiAoTWF0aC5hYnModDAxIC0gMSkgPiBlcHNpbG9uKSB7XG4gICAgICAgIHRoaXMuXyArPSBcIkxcIiArICh4MSArIHQwMSAqIHgwMSkgKyBcIixcIiArICh5MSArIHQwMSAqIHkwMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuXyArPSBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLDAsXCIgKyAoKyh5MDEgKiB4MjAgPiB4MDEgKiB5MjApKSArIFwiLFwiICsgKHRoaXMuX3gxID0geDEgKyB0MjEgKiB4MjEpICsgXCIsXCIgKyAodGhpcy5feTEgPSB5MSArIHQyMSAqIHkyMSk7XG4gICAgfVxuICB9LFxuICBhcmM6IGZ1bmN0aW9uKHgsIHksIHIsIGEwLCBhMSwgY2N3KSB7XG4gICAgeCA9ICt4LCB5ID0gK3ksIHIgPSArciwgY2N3ID0gISFjY3c7XG4gICAgdmFyIGR4ID0gciAqIE1hdGguY29zKGEwKSxcbiAgICAgICAgZHkgPSByICogTWF0aC5zaW4oYTApLFxuICAgICAgICB4MCA9IHggKyBkeCxcbiAgICAgICAgeTAgPSB5ICsgZHksXG4gICAgICAgIGN3ID0gMSBeIGNjdyxcbiAgICAgICAgZGEgPSBjY3cgPyBhMCAtIGExIDogYTEgLSBhMDtcblxuICAgIC8vIElzIHRoZSByYWRpdXMgbmVnYXRpdmU/IEVycm9yLlxuICAgIGlmIChyIDwgMCkgdGhyb3cgbmV3IEVycm9yKFwibmVnYXRpdmUgcmFkaXVzOiBcIiArIHIpO1xuXG4gICAgLy8gSXMgdGhpcyBwYXRoIGVtcHR5PyBNb3ZlIHRvICh4MCx5MCkuXG4gICAgaWYgKHRoaXMuX3gxID09PSBudWxsKSB7XG4gICAgICB0aGlzLl8gKz0gXCJNXCIgKyB4MCArIFwiLFwiICsgeTA7XG4gICAgfVxuXG4gICAgLy8gT3IsIGlzICh4MCx5MCkgbm90IGNvaW5jaWRlbnQgd2l0aCB0aGUgcHJldmlvdXMgcG9pbnQ/IExpbmUgdG8gKHgwLHkwKS5cbiAgICBlbHNlIGlmIChNYXRoLmFicyh0aGlzLl94MSAtIHgwKSA+IGVwc2lsb24gfHwgTWF0aC5hYnModGhpcy5feTEgLSB5MCkgPiBlcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJMXCIgKyB4MCArIFwiLFwiICsgeTA7XG4gICAgfVxuXG4gICAgLy8gSXMgdGhpcyBhcmMgZW1wdHk/IFdl4oCZcmUgZG9uZS5cbiAgICBpZiAoIXIpIHJldHVybjtcblxuICAgIC8vIERvZXMgdGhlIGFuZ2xlIGdvIHRoZSB3cm9uZyB3YXk/IEZsaXAgdGhlIGRpcmVjdGlvbi5cbiAgICBpZiAoZGEgPCAwKSBkYSA9IGRhICUgdGF1ICsgdGF1O1xuXG4gICAgLy8gSXMgdGhpcyBhIGNvbXBsZXRlIGNpcmNsZT8gRHJhdyB0d28gYXJjcyB0byBjb21wbGV0ZSB0aGUgY2lyY2xlLlxuICAgIGlmIChkYSA+IHRhdUVwc2lsb24pIHtcbiAgICAgIHRoaXMuXyArPSBcIkFcIiArIHIgKyBcIixcIiArIHIgKyBcIiwwLDEsXCIgKyBjdyArIFwiLFwiICsgKHggLSBkeCkgKyBcIixcIiArICh5IC0gZHkpICsgXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCwxLFwiICsgY3cgKyBcIixcIiArICh0aGlzLl94MSA9IHgwKSArIFwiLFwiICsgKHRoaXMuX3kxID0geTApO1xuICAgIH1cblxuICAgIC8vIElzIHRoaXMgYXJjIG5vbi1lbXB0eT8gRHJhdyBhbiBhcmMhXG4gICAgZWxzZSBpZiAoZGEgPiBlcHNpbG9uKSB7XG4gICAgICB0aGlzLl8gKz0gXCJBXCIgKyByICsgXCIsXCIgKyByICsgXCIsMCxcIiArICgrKGRhID49IHBpKSkgKyBcIixcIiArIGN3ICsgXCIsXCIgKyAodGhpcy5feDEgPSB4ICsgciAqIE1hdGguY29zKGExKSkgKyBcIixcIiArICh0aGlzLl95MSA9IHkgKyByICogTWF0aC5zaW4oYTEpKTtcbiAgICB9XG4gIH0sXG4gIHJlY3Q6IGZ1bmN0aW9uKHgsIHksIHcsIGgpIHtcbiAgICB0aGlzLl8gKz0gXCJNXCIgKyAodGhpcy5feDAgPSB0aGlzLl94MSA9ICt4KSArIFwiLFwiICsgKHRoaXMuX3kwID0gdGhpcy5feTEgPSAreSkgKyBcImhcIiArICgrdykgKyBcInZcIiArICgraCkgKyBcImhcIiArICgtdykgKyBcIlpcIjtcbiAgfSxcbiAgdG9TdHJpbmc6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLl87XG4gIH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHBhdGg7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBNYXRoLmFicyh4ID0gTWF0aC5yb3VuZCh4KSkgPj0gMWUyMVxuICAgICAgPyB4LnRvTG9jYWxlU3RyaW5nKFwiZW5cIikucmVwbGFjZSgvLC9nLCBcIlwiKVxuICAgICAgOiB4LnRvU3RyaW5nKDEwKTtcbn1cblxuLy8gQ29tcHV0ZXMgdGhlIGRlY2ltYWwgY29lZmZpY2llbnQgYW5kIGV4cG9uZW50IG9mIHRoZSBzcGVjaWZpZWQgbnVtYmVyIHggd2l0aFxuLy8gc2lnbmlmaWNhbnQgZGlnaXRzIHAsIHdoZXJlIHggaXMgcG9zaXRpdmUgYW5kIHAgaXMgaW4gWzEsIDIxXSBvciB1bmRlZmluZWQuXG4vLyBGb3IgZXhhbXBsZSwgZm9ybWF0RGVjaW1hbFBhcnRzKDEuMjMpIHJldHVybnMgW1wiMTIzXCIsIDBdLlxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdERlY2ltYWxQYXJ0cyh4LCBwKSB7XG4gIGlmICgoaSA9ICh4ID0gcCA/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+IHdpZHRoKSBicmVhaztcbiAgICAgIGcgPSBncm91cGluZ1tqID0gKGogKyAxKSAlIGdyb3VwaW5nLmxlbmd0aF07XG4gICAgfVxuXG4gICAgcmV0dXJuIHQucmV2ZXJzZSgpLmpvaW4odGhvdXNhbmRzKTtcbiAgfTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKG51bWVyYWxzKSB7XG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9bMC05XS9nLCBmdW5jdGlvbihpKSB7XG4gICAgICByZXR1cm4gbnVtZXJhbHNbK2ldO1xuICAgIH0pO1xuICB9O1xufVxuIiwiLy8gVHJpbXMgaW5zaWduaWZpY2FudCB6ZXJvcywgZS5nLiwgcmVwbGFjZXMgMS4yMDAwayB3aXRoIDEuMmsuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzKSB7XG4gIG91dDogZm9yICh2YXIgbiA9IHMubGVuZ3RoLCBpID0gMSwgaTAgPSAtMSwgaTE7IGkgPCBuOyArK2kpIHtcbiAgICBzd2l0Y2ggKHNbaV0pIHtcbiAgICAgIGNhc2UgXCIuXCI6IGkwID0gaTEgPSBpOyBicmVhaztcbiAgICAgIGNhc2UgXCIwXCI6IGlmIChpMCA9PT0gMCkgaTAgPSBpOyBpMSA9IGk7IGJyZWFrO1xuICAgICAgZGVmYXVsdDogaWYgKCErc1tpXSkgYnJlYWsgb3V0OyBpZiAoaTAgPiAwKSBpMCA9IDA7IGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTAgPiAwID8gcy5zbGljZSgwLCBpMCkgKyBzLnNsaWNlKGkxICsgMSkgOiBzO1xufVxuIiwiaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5cbmZ1bmN0aW9uIGxpbmVhcihhLCBkKSB7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGEgKyB0ICogZDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gZXhwb25lbnRpYWwoYSwgYiwgeSkge1xuICByZXR1cm4gYSA9IE1hdGgucG93KGEsIHkpLCBiID0gTWF0aC5wb3coYiwgeSkgLSBhLCB5ID0gMSAvIHksIGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gTWF0aC5wb3coYSArIHQgKiBiLCB5KTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGh1ZShhLCBiKSB7XG4gIHZhciBkID0gYiAtIGE7XG4gIHJldHVybiBkID8gbGluZWFyKGEsIGQgPiAxODAgfHwgZCA8IC0xODAgPyBkIC0gMzYwICogTWF0aC5yb3VuZChkIC8gMzYwKSA6IGQpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnYW1tYSh5KSB7XG4gIHJldHVybiAoeSA9ICt5KSA9PT0gMSA/IG5vZ2FtbWEgOiBmdW5jdGlvbihhLCBiKSB7XG4gICAgcmV0dXJuIGIgLSBhID8gZXhwb25lbnRpYWwoYSwgYiwgeSkgOiBjb25zdGFudChpc05hTihhKSA/IGIgOiBhKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbm9nYW1tYShhLCBiKSB7XG4gIHZhciBkID0gYiAtIGE7XG4gIHJldHVybiBkID8gbGluZWFyKGEsIGQpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG59XG4iLCJleHBvcnQgZGVmYXVsdCB4ID0+ICgpID0+IHg7XG4iLCJpbXBvcnQge2xhYiBhcyBjb2xvckxhYn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgY29sb3IgZnJvbSBcIi4vY29sb3IuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGFiKHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGwgPSBjb2xvcigoc3RhcnQgPSBjb2xvckxhYihzdGFydCkpLmwsIChlbmQgPSBjb2xvckxhYihlbmQpKS5sKSxcbiAgICAgIGEgPSBjb2xvcihzdGFydC5hLCBlbmQuYSksXG4gICAgICBiID0gY29sb3Ioc3RhcnQuYiwgZW5kLmIpLFxuICAgICAgb3BhY2l0eSA9IGNvbG9yKHN0YXJ0Lm9wYWNpdHksIGVuZC5vcGFjaXR5KTtcbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBzdGFydC5sID0gbCh0KTtcbiAgICBzdGFydC5hID0gYSh0KTtcbiAgICBzdGFydC5iID0gYih0KTtcbiAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICByZXR1cm4gc3RhcnQgKyBcIlwiO1xuICB9O1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGluaXRSYW5nZShkb21haW4sIHJhbmdlKSB7XG4gIHN3aXRjaCAoYXJndW1lbnRzLmxlbmd0aCkge1xuICAgIGNhc2UgMDogYnJlYWs7XG4gICAgY2FzZSAxOiB0aGlzLnJhbmdlKGRvbWFpbik7IGJyZWFrO1xuICAgIGRlZmF1bHQ6IHRoaXMucmFuZ2UocmFuZ2UpLmRvbWFpbihkb21haW4pOyBicmVhaztcbiAgfVxuICByZXR1cm4gdGhpcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluaXRJbnRlcnBvbGF0b3IoZG9tYWluLCBpbnRlcnBvbGF0b3IpIHtcbiAgc3dpdGNoIChhcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgY2FzZSAwOiBicmVhaztcbiAgICBjYXNlIDE6IHtcbiAgICAgIGlmICh0eXBlb2YgZG9tYWluID09PSBcImZ1bmN0aW9uXCIpIHRoaXMuaW50ZXJwb2xhdG9yKGRvbWFpbik7XG4gICAgICBlbHNlIHRoaXMucmFuZ2UoZG9tYWluKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB0aGlzLmRvbWFpbihkb21haW4pO1xuICAgICAgaWYgKHR5cGVvZiBpbnRlcnBvbGF0b3IgPT09IFwiZnVuY3Rpb25cIikgdGhpcy5pbnRlcnBvbGF0b3IoaW50ZXJwb2xhdG9yKTtcbiAgICAgIGVsc2UgdGhpcy5yYW5nZShpbnRlcnBvbGF0b3IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuIiwiaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXQuanNcIjtcblxuZXhwb3J0IGNvbnN0IGltcGxpY2l0ID0gU3ltYm9sKFwiaW1wbGljaXRcIik7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9yZGluYWwoKSB7XG4gIHZhciBpbmRleCA9IG5ldyBNYXAoKSxcbiAgICAgIGRvbWFpbiA9IFtdLFxuICAgICAgcmFuZ2UgPSBbXSxcbiAgICAgIHVua25vd24gPSBpbXBsaWNpdDtcblxuICBmdW5jdGlvbiBzY2FsZShkKSB7XG4gICAgdmFyIGtleSA9IGQgKyBcIlwiLCBpID0gaW5kZXguZ2V0KGtleSk7XG4gICAgaWYgKCFpKSB7XG4gICAgICBpZiAodW5rbm93biAhPT0gaW1wbGljaXQpIHJldHVybiB1bmtub3duO1xuICAgICAgaW5kZXguc2V0KGtleSwgaSA9IGRvbWFpbi5wdXNoKGQpKTtcbiAgICB9XG4gICAgcmV0dXJuIHJhbmdlWyhpIC0gMSkgJSByYW5nZS5sZW5ndGhdO1xuICB9XG5cbiAgc2NhbGUuZG9tYWluID0gZnVuY3Rpb24oXykge1xuICAgIGlmICghYXJndW1lbnRzLmxlbmd0aCkgcmV0dXJuIGRvbWFpbi5zbGljZSgpO1xuICAgIGRvbWFpbiA9IFtdLCBpbmRleCA9IG5ldyBNYXAoKTtcbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIF8pIHtcbiAgICAgIGNvbnN0IGtleSA9IHZhbHVlICsgXCJcIjtcbiAgICAgIGlmIChpbmRleC5oYXMoa2V5KSkgY29udGludWU7XG4gICAgICBpbmRleC5zZXQoa2V5LCBkb21haW4ucHVzaCh2YWx1ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG5cbiAgc2NhbGUucmFuZ2UgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocmFuZ2UgPSBBcnJheS5mcm9tKF8pLCBzY2FsZSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBvcmRpbmFsKGRvbWFpbiwgcmFuZ2UpLnVua25vd24odW5rbm93bik7XG4gIH07XG5cbiAgaW5pdFJhbmdlLmFwcGx5KHNjYWxlLCBhcmd1bWVudHMpO1xuXG4gIHJldHVybiBzY2FsZTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IHggPT4gKCkgPT4geDtcbiIsImltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuXG5mdW5jdGlvbiBsaW5lYXIoYSwgZCkge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICsgdCAqIGQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGV4cG9uZW50aWFsKGEsIGIsIHkpIHtcbiAgcmV0dXJuIGEgPSBNYXRoLnBvdyhhLCB5KSwgYiA9IE1hdGgucG93KGIsIHkpIC0gYSwgeSA9IDEgLyB5LCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucG93KGEgKyB0ICogYiwgeSk7XG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBodWUoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkID4gMTgwIHx8IGQgPCAtMTgwID8gZCAtIDM2MCAqIE1hdGgucm91bmQoZCAvIDM2MCkgOiBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2FtbWEoeSkge1xuICByZXR1cm4gKHkgPSAreSkgPT09IDEgPyBub2dhbW1hIDogZnVuY3Rpb24oYSwgYikge1xuICAgIHJldHVybiBiIC0gYSA/IGV4cG9uZW50aWFsKGEsIGIsIHkpIDogY29uc3RhbnQoaXNOYU4oYSkgPyBiIDogYSk7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG5vZ2FtbWEoYSwgYikge1xuICB2YXIgZCA9IGIgLSBhO1xuICByZXR1cm4gZCA/IGxpbmVhcihhLCBkKSA6IGNvbnN0YW50KGlzTmFOKGEpID8gYiA6IGEpO1xufVxuIiwiaW1wb3J0IHtyZ2IgYXMgY29sb3JSZ2J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGJhc2lzIGZyb20gXCIuL2Jhc2lzLmpzXCI7XG5pbXBvcnQgYmFzaXNDbG9zZWQgZnJvbSBcIi4vYmFzaXNDbG9zZWQuanNcIjtcbmltcG9ydCBub2dhbW1hLCB7Z2FtbWF9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiByZ2JHYW1tYSh5KSB7XG4gIHZhciBjb2xvciA9IGdhbW1hKHkpO1xuXG4gIGZ1bmN0aW9uIHJnYihzdGFydCwgZW5kKSB7XG4gICAgdmFyIHIgPSBjb2xvcigoc3RhcnQgPSBjb2xvclJnYihzdGFydCkpLnIsIChlbmQgPSBjb2xvclJnYihlbmQpKS5yKSxcbiAgICAgICAgZyA9IGNvbG9yKHN0YXJ0LmcsIGVuZC5nKSxcbiAgICAgICAgYiA9IGNvbG9yKHN0YXJ0LmIsIGVuZC5iKSxcbiAgICAgICAgb3BhY2l0eSA9IG5vZ2FtbWEoc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBzdGFydC5yID0gcih0KTtcbiAgICAgIHN0YXJ0LmcgPSBnKHQpO1xuICAgICAgc3RhcnQuYiA9IGIodCk7XG4gICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgfTtcbiAgfVxuXG4gIHJnYi5nYW1tYSA9IHJnYkdhbW1hO1xuXG4gIHJldHVybiByZ2I7XG59KSgxKTtcblxuZnVuY3Rpb24gcmdiU3BsaW5lKHNwbGluZSkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sb3JzKSB7XG4gICAgdmFyIG4gPSBjb2xvcnMubGVuZ3RoLFxuICAgICAgICByID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBnID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBiID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBpLCBjb2xvcjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb2xvciA9IGNvbG9yUmdiKGNvbG9yc1tpXSk7XG4gICAgICByW2ldID0gY29sb3IuciB8fCAwO1xuICAgICAgZ1tpXSA9IGNvbG9yLmcgfHwgMDtcbiAgICAgIGJbaV0gPSBjb2xvci5iIHx8IDA7XG4gICAgfVxuICAgIHIgPSBzcGxpbmUocik7XG4gICAgZyA9IHNwbGluZShnKTtcbiAgICBiID0gc3BsaW5lKGIpO1xuICAgIGNvbG9yLm9wYWNpdHkgPSAxO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBjb2xvci5yID0gcih0KTtcbiAgICAgIGNvbG9yLmcgPSBnKHQpO1xuICAgICAgY29sb3IuYiA9IGIodCk7XG4gICAgICByZXR1cm4gY29sb3IgKyBcIlwiO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgcmdiQmFzaXMgPSByZ2JTcGxpbmUoYmFzaXMpO1xuZXhwb3J0IHZhciByZ2JCYXNpc0Nsb3NlZCA9IHJnYlNwbGluZShiYXNpc0Nsb3NlZCk7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIGlmICghYikgYiA9IFtdO1xuICB2YXIgbiA9IGEgPyBNYXRoLm1pbihiLmxlbmd0aCwgYS5sZW5ndGgpIDogMCxcbiAgICAgIGMgPSBiLnNsaWNlKCksXG4gICAgICBpO1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIGNbaV0gPSBhW2ldICogKDEgLSB0KSArIGJbaV0gKiB0O1xuICAgIHJldHVybiBjO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNOdW1iZXJBcnJheSh4KSB7XG4gIHJldHVybiBBcnJheUJ1ZmZlci5pc1ZpZXcoeCkgJiYgISh4IGluc3RhbmNlb2YgRGF0YVZpZXcpO1xufVxuIiwiaW1wb3J0IHZhbHVlIGZyb20gXCIuL3ZhbHVlLmpzXCI7XG5pbXBvcnQgbnVtYmVyQXJyYXksIHtpc051bWJlckFycmF5fSBmcm9tIFwiLi9udW1iZXJBcnJheS5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiAoaXNOdW1iZXJBcnJheShiKSA/IG51bWJlckFycmF5IDogZ2VuZXJpY0FycmF5KShhLCBiKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyaWNBcnJheShhLCBiKSB7XG4gIHZhciBuYiA9IGIgPyBiLmxlbmd0aCA6IDAsXG4gICAgICBuYSA9IGEgPyBNYXRoLm1pbihuYiwgYS5sZW5ndGgpIDogMCxcbiAgICAgIHggPSBuZXcgQXJyYXkobmEpLFxuICAgICAgYyA9IG5ldyBBcnJheShuYiksXG4gICAgICBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBuYTsgKytpKSB4W2ldID0gdmFsdWUoYVtpXSwgYltpXSk7XG4gIGZvciAoOyBpIDwgbmI7ICsraSkgY1tpXSA9IGJbaV07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbmE7ICsraSkgY1tpXSA9IHhbaV0odCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHZhciBkID0gbmV3IERhdGU7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBkLnNldFRpbWUoYSAqICgxIC0gdCkgKyBiICogdCksIGQ7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBhID0gK2EsIGIgPSArYiwgZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBhICogKDEgLSB0KSArIGIgKiB0O1xuICB9O1xufVxuIiwiaW1wb3J0IHZhbHVlIGZyb20gXCIuL3ZhbHVlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIGkgPSB7fSxcbiAgICAgIGMgPSB7fSxcbiAgICAgIGs7XG5cbiAgaWYgKGEgPT09IG51bGwgfHwgdHlwZW9mIGEgIT09IFwib2JqZWN0XCIpIGEgPSB7fTtcbiAgaWYgKGIgPT09IG51bGwgfHwgdHlwZW9mIGIgIT09IFwib2JqZWN0XCIpIGIgPSB7fTtcblxuICBmb3IgKGsgaW4gYikge1xuICAgIGlmIChrIGluIGEpIHtcbiAgICAgIGlba10gPSB2YWx1ZShhW2tdLCBiW2tdKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY1trXSA9IGJba107XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQpIHtcbiAgICBmb3IgKGsgaW4gaSkgY1trXSA9IGlba10odCk7XG4gICAgcmV0dXJuIGM7XG4gIH07XG59XG4iLCJpbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuXG52YXIgcmVBID0gL1stK10/KD86XFxkK1xcLj9cXGQqfFxcLj9cXGQrKSg/OltlRV1bLStdP1xcZCspPy9nLFxuICAgIHJlQiA9IG5ldyBSZWdFeHAocmVBLnNvdXJjZSwgXCJnXCIpO1xuXG5mdW5jdGlvbiB6ZXJvKGIpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBiO1xuICB9O1xufVxuXG5mdW5jdGlvbiBvbmUoYikge1xuICByZXR1cm4gZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBiKHQpICsgXCJcIjtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oYSwgYikge1xuICB2YXIgYmkgPSByZUEubGFzdEluZGV4ID0gcmVCLmxhc3RJbmRleCA9IDAsIC8vIHNjYW4gaW5kZXggZm9yIG5leHQgbnVtYmVyIGluIGJcbiAgICAgIGFtLCAvLyBjdXJyZW50IG1hdGNoIGluIGFcbiAgICAgIGJtLCAvLyBjdXJyZW50IG1hdGNoIGluIGJcbiAgICAgIGJzLCAvLyBzdHJpbmcgcHJlY2VkaW5nIGN1cnJlbnQgbnVtYmVyIGluIGIsIGlmIGFueVxuICAgICAgaSA9IC0xLCAvLyBpbmRleCBpbiBzXG4gICAgICBzID0gW10sIC8vIHN0cmluZyBjb25zdGFudHMgYW5kIHBsYWNlaG9sZGVyc1xuICAgICAgcSA9IFtdOyAvLyBudW1iZXIgaW50ZXJwb2xhdG9yc1xuXG4gIC8vIENvZXJjZSBpbnB1dHMgdG8gc3RyaW5ncy5cbiAgYSA9IGEgKyBcIlwiLCBiID0gYiArIFwiXCI7XG5cbiAgLy8gSW50ZXJwb2xhdGUgcGFpcnMgb2YgbnVtYmVycyBpbiBhICYgYi5cbiAgd2hpbGUgKChhbSA9IHJlQS5leGVjKGEpKVxuICAgICAgJiYgKGJtID0gcmVCLmV4ZWMoYikpKSB7XG4gICAgaWYgKChicyA9IGJtLmluZGV4KSA+IGJpKSB7IC8vIGEgc3RyaW5nIHByZWNlZGVzIHRoZSBuZXh0IG51bWJlciBpbiBiXG4gICAgICBicyA9IGIuc2xpY2UoYmksIGJzKTtcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBicztcbiAgICB9XG4gICAgaWYgKChhbSA9IGFtWzBdKSA9PT0gKGJtID0gYm1bMF0pKSB7IC8vIG51bWJlcnMgaW4gYSAmIGIgbWF0Y2hcbiAgICAgIGlmIChzW2ldKSBzW2ldICs9IGJtOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgICAgZWxzZSBzWysraV0gPSBibTtcbiAgICB9IGVsc2UgeyAvLyBpbnRlcnBvbGF0ZSBub24tbWF0Y2hpbmcgbnVtYmVyc1xuICAgICAgc1srK2ldID0gbnVsbDtcbiAgICAgIHEucHVzaCh7aTogaSwgeDogbnVtYmVyKGFtLCBibSl9KTtcbiAgICB9XG4gICAgYmkgPSByZUIubGFzdEluZGV4O1xuICB9XG5cbiAgLy8gQWRkIHJlbWFpbnMgb2YgYi5cbiAgaWYgKGJpIDwgYi5sZW5ndGgpIHtcbiAgICBicyA9IGIuc2xpY2UoYmkpO1xuICAgIGlmIChzW2ldKSBzW2ldICs9IGJzOyAvLyBjb2FsZXNjZSB3aXRoIHByZXZpb3VzIHN0cmluZ1xuICAgIGVsc2Ugc1srK2ldID0gYnM7XG4gIH1cblxuICAvLyBTcGVjaWFsIG9wdGltaXphdGlvbiBmb3Igb25seSBhIHNpbmdsZSBtYXRjaC5cbiAgLy8gT3RoZXJ3aXNlLCBpbnRlcnBvbGF0ZSBlYWNoIG9mIHRoZSBudW1iZXJzIGFuZCByZWpvaW4gdGhlIHN0cmluZy5cbiAgcmV0dXJuIHMubGVuZ3RoIDwgMiA/IChxWzBdXG4gICAgICA/IG9uZShxWzBdLngpXG4gICAgICA6IHplcm8oYikpXG4gICAgICA6IChiID0gcS5sZW5ndGgsIGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbzsgaSA8IGI7ICsraSkgc1sobyA9IHFbaV0pLmldID0gby54KHQpO1xuICAgICAgICAgIHJldHVybiBzLmpvaW4oXCJcIik7XG4gICAgICAgIH0pO1xufVxuIiwiaW1wb3J0IHtjb2xvcn0gZnJvbSBcImQzLWNvbG9yXCI7XG5pbXBvcnQgcmdiIGZyb20gXCIuL3JnYi5qc1wiO1xuaW1wb3J0IHtnZW5lcmljQXJyYXl9IGZyb20gXCIuL2FycmF5LmpzXCI7XG5pbXBvcnQgZGF0ZSBmcm9tIFwiLi9kYXRlLmpzXCI7XG5pbXBvcnQgbnVtYmVyIGZyb20gXCIuL251bWJlci5qc1wiO1xuaW1wb3J0IG9iamVjdCBmcm9tIFwiLi9vYmplY3QuanNcIjtcbmltcG9ydCBzdHJpbmcgZnJvbSBcIi4vc3RyaW5nLmpzXCI7XG5pbXBvcnQgY29uc3RhbnQgZnJvbSBcIi4vY29uc3RhbnQuanNcIjtcbmltcG9ydCBudW1iZXJBcnJheSwge2lzTnVtYmVyQXJyYXl9IGZyb20gXCIuL251bWJlckFycmF5LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgdmFyIHQgPSB0eXBlb2YgYiwgYztcbiAgcmV0dXJuIGIgPT0gbnVsbCB8fCB0ID09PSBcImJvb2xlYW5cIiA/IGNvbnN0YW50KGIpXG4gICAgICA6ICh0ID09PSBcIm51bWJlclwiID8gbnVtYmVyXG4gICAgICA6IHQgPT09IFwic3RyaW5nXCIgPyAoKGMgPSBjb2xvcihiKSkgPyAoYiA9IGMsIHJnYikgOiBzdHJpbmcpXG4gICAgICA6IGIgaW5zdGFuY2VvZiBjb2xvciA/IHJnYlxuICAgICAgOiBiIGluc3RhbmNlb2YgRGF0ZSA/IGRhdGVcbiAgICAgIDogaXNOdW1iZXJBcnJheShiKSA/IG51bWJlckFycmF5XG4gICAgICA6IEFycmF5LmlzQXJyYXkoYikgPyBnZW5lcmljQXJyYXlcbiAgICAgIDogdHlwZW9mIGIudmFsdWVPZiAhPT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBiLnRvU3RyaW5nICE9PSBcImZ1bmN0aW9uXCIgfHwgaXNOYU4oYikgPyBvYmplY3RcbiAgICAgIDogbnVtYmVyKShhLCBiKTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGEsIGIpIHtcbiAgcmV0dXJuIGEgPSArYSwgYiA9ICtiLCBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQoYSAqICgxIC0gdCkgKyBiICogdCk7XG4gIH07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBudW1iZXIoeCkge1xuICByZXR1cm4gK3g7XG59XG4iLCJpbXBvcnQge2Jpc2VjdH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2ludGVycG9sYXRlIGFzIGludGVycG9sYXRlVmFsdWUsIGludGVycG9sYXRlTnVtYmVyLCBpbnRlcnBvbGF0ZVJvdW5kfSBmcm9tIFwiZDMtaW50ZXJwb2xhdGVcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IG51bWJlciBmcm9tIFwiLi9udW1iZXIuanNcIjtcblxudmFyIHVuaXQgPSBbMCwgMV07XG5cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGl0eSh4KSB7XG4gIHJldHVybiB4O1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemUoYSwgYikge1xuICByZXR1cm4gKGIgLT0gKGEgPSArYSkpXG4gICAgICA/IGZ1bmN0aW9uKHgpIHsgcmV0dXJuICh4IC0gYSkgLyBiOyB9XG4gICAgICA6IGNvbnN0YW50KGlzTmFOKGIpID8gTmFOIDogMC41KTtcbn1cblxuZnVuY3Rpb24gY2xhbXBlcihhLCBiKSB7XG4gIHZhciB0O1xuICBpZiAoYSA+IGIpIHQgPSBhLCBhID0gYiwgYiA9IHQ7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7IHJldHVybiBNYXRoLm1heChhLCBNYXRoLm1pbihiLCB4KSk7IH07XG59XG5cbi8vIG5vcm1hbGl6ZShhLCBiKSh4KSB0YWtlcyBhIGRvbWFpbiB2YWx1ZSB4IGluIFthLGJdIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHBhcmFtZXRlciB0IGluIFswLDFdLlxuLy8gaW50ZXJwb2xhdGUoYSwgYikodCkgdGFrZXMgYSBwYXJhbWV0ZXIgdCBpbiBbMCwxXSBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByYW5nZSB2YWx1ZSB4IGluIFthLGJdLlxuZnVuY3Rpb24gYmltYXAoZG9tYWluLCByYW5nZSwgaW50ZXJwb2xhdGUpIHtcbiAgdmFyIGQwID0gZG9tYWluWzBdLCBkMSA9IGRvbWFpblsxXSwgcjAgPSByYW5nZVswXSwgcjEgPSByYW5nZVsxXTtcbiAgaWYgKGQxIDwgZDApIGQwID0gbm9ybWFsaXplKGQxLCBkMCksIHIwID0gaW50ZXJwb2xhdGUocjEsIHIwKTtcbiAgZWxzZSBkMCA9IG5vcm1hbGl6ZShkMCwgZDEpLCByMCA9IGludGVycG9sYXRlKHIwLCByMSk7XG4gIHJldHVybiBmdW5jdGlvbih4KSB7IHJldHVybiByMChkMCh4KSk7IH07XG59XG5cbmZ1bmN0aW9uIHBvbHltYXAoZG9tYWluLCByYW5nZSwgaW50ZXJwb2xhdGUpIHtcbiAgdmFyIGogPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGgpIC0gMSxcbiAgICAgIGQgPSBuZXcgQXJyYXkoaiksXG4gICAgICByID0gbmV3IEFycmF5KGopLFxuICAgICAgaSA9IC0xO1xuXG4gIC8vIFJldmVyc2UgZGVzY2VuZGluZyBkb21haW5zLlxuICBpZiAoZG9tYWluW2pdIDwgZG9tYWluWzBdKSB7XG4gICAgZG9tYWluID0gZG9tYWluLnNsaWNlKCkucmV2ZXJzZSgpO1xuICAgIHJhbmdlID0gcmFuZ2Uuc2xpY2UoKS5yZXZlcnNlKCk7XG4gIH1cblxuICB3aGlsZSAoKytpIDwgaikge1xuICAgIGRbaV0gPSBub3JtYWxpemUoZG9tYWluW2ldLCBkb21haW5baSArIDFdKTtcbiAgICByW2ldID0gaW50ZXJwb2xhdGUocmFuZ2VbaV0sIHJhbmdlW2kgKyAxXSk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24oeCkge1xuICAgIHZhciBpID0gYmlzZWN0KGRvbWFpbiwgeCwgMSwgaikgLSAxO1xuICAgIHJldHVybiByW2ldKGRbaV0oeCkpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29weShzb3VyY2UsIHRhcmdldCkge1xuICByZXR1cm4gdGFyZ2V0XG4gICAgICAuZG9tYWluKHNvdXJjZS5kb21haW4oKSlcbiAgICAgIC5yYW5nZShzb3VyY2UucmFuZ2UoKSlcbiAgICAgIC5pbnRlcnBvbGF0ZShzb3VyY2UuaW50ZXJwb2xhdGUoKSlcbiAgICAgIC5jbGFtcChzb3VyY2UuY2xhbXAoKSlcbiAgICAgIC51bmtub3duKHNvdXJjZS51bmtub3duKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJhbnNmb3JtZXIoKSB7XG4gIHZhciBkb21haW4gPSB1bml0LFxuICAgICAgcmFuZ2UgPSB1bml0LFxuICAgICAgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVZhbHVlLFxuICAgICAgdHJhbnNmb3JtLFxuICAgICAgdW50cmFuc2Zvcm0sXG4gICAgICB1bmtub3duLFxuICAgICAgY2xhbXAgPSBpZGVudGl0eSxcbiAgICAgIHBpZWNld2lzZSxcbiAgICAgIG91dHB1dCxcbiAgICAgIGlucHV0O1xuXG4gIGZ1bmN0aW9uIHJlc2NhbGUoKSB7XG4gICAgdmFyIG4gPSBNYXRoLm1pbihkb21haW4ubGVuZ3RoLCByYW5nZS5sZW5ndGgpO1xuICAgIGlmIChjbGFtcCAhPT0gaWRlbnRpdHkpIGNsYW1wID0gY2xhbXBlcihkb21haW5bMF0sIGRvbWFpbltuIC0gMV0pO1xuICAgIHBpZWNld2lzZSA9IG4gPiAyID8gcG9seW1hcCA6IGJpbWFwO1xuICAgIG91dHB1dCA9IGlucHV0ID0gbnVsbDtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH1cblxuICBmdW5jdGlvbiBzY2FsZSh4KSB7XG4gICAgcmV0dXJuIHggPT0gbnVsbCB8fCBpc05hTih4ID0gK3gpID8gdW5rbm93biA6IChvdXRwdXQgfHwgKG91dHB1dCA9IHBpZWNld2lzZShkb21haW4ubWFwKHRyYW5zZm9ybSksIHJhbmdlLCBpbnRlcnBvbGF0ZSkpKSh0cmFuc2Zvcm0oY2xhbXAoeCkpKTtcbiAgfVxuXG4gIHNjYWxlLmludmVydCA9IGZ1bmN0aW9uKHkpIHtcbiAgICByZXR1cm4gY2xhbXAodW50cmFuc2Zvcm0oKGlucHV0IHx8IChpbnB1dCA9IHBpZWNld2lzZShyYW5nZSwgZG9tYWluLm1hcCh0cmFuc2Zvcm0pLCBpbnRlcnBvbGF0ZU51bWJlcikpKSh5KSkpO1xuICB9O1xuXG4gIHNjYWxlLmRvbWFpbiA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkb21haW4gPSBBcnJheS5mcm9tKF8sIG51bWJlciksIHJlc2NhbGUoKSkgOiBkb21haW4uc2xpY2UoKTtcbiAgfTtcblxuICBzY2FsZS5yYW5nZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChyYW5nZSA9IEFycmF5LmZyb20oXyksIHJlc2NhbGUoKSkgOiByYW5nZS5zbGljZSgpO1xuICB9O1xuXG4gIHNjYWxlLnJhbmdlUm91bmQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIHJhbmdlID0gQXJyYXkuZnJvbShfKSwgaW50ZXJwb2xhdGUgPSBpbnRlcnBvbGF0ZVJvdW5kLCByZXNjYWxlKCk7XG4gIH07XG5cbiAgc2NhbGUuY2xhbXAgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY2xhbXAgPSBfID8gdHJ1ZSA6IGlkZW50aXR5LCByZXNjYWxlKCkpIDogY2xhbXAgIT09IGlkZW50aXR5O1xuICB9O1xuXG4gIHNjYWxlLmludGVycG9sYXRlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGludGVycG9sYXRlID0gXywgcmVzY2FsZSgpKSA6IGludGVycG9sYXRlO1xuICB9O1xuXG4gIHNjYWxlLnVua25vd24gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAodW5rbm93biA9IF8sIHNjYWxlKSA6IHVua25vd247XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uKHQsIHUpIHtcbiAgICB0cmFuc2Zvcm0gPSB0LCB1bnRyYW5zZm9ybSA9IHU7XG4gICAgcmV0dXJuIHJlc2NhbGUoKTtcbiAgfTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29udGludW91cygpIHtcbiAgcmV0dXJuIHRyYW5zZm9ybWVyKCkoaWRlbnRpdHksIGlkZW50aXR5KTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnN0YW50cyh4KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImltcG9ydCB7dGlja1N0ZXB9IGZyb20gXCJkMy1hcnJheVwiO1xuaW1wb3J0IHtmb3JtYXQsIGZvcm1hdFByZWZpeCwgZm9ybWF0U3BlY2lmaWVyLCBwcmVjaXNpb25GaXhlZCwgcHJlY2lzaW9uUHJlZml4LCBwcmVjaXNpb25Sb3VuZH0gZnJvbSBcImQzLWZvcm1hdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0aWNrRm9ybWF0KHN0YXJ0LCBzdG9wLCBjb3VudCwgc3BlY2lmaWVyKSB7XG4gIHZhciBzdGVwID0gdGlja1N0ZXAoc3RhcnQsIHN0b3AsIGNvdW50KSxcbiAgICAgIHByZWNpc2lvbjtcbiAgc3BlY2lmaWVyID0gZm9ybWF0U3BlY2lmaWVyKHNwZWNpZmllciA9PSBudWxsID8gXCIsZlwiIDogc3BlY2lmaWVyKTtcbiAgc3dpdGNoIChzcGVjaWZpZXIudHlwZSkge1xuICAgIGNhc2UgXCJzXCI6IHtcbiAgICAgIHZhciB2YWx1ZSA9IE1hdGgubWF4KE1hdGguYWJzKHN0YXJ0KSwgTWF0aC5hYnMoc3RvcCkpO1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUHJlZml4KHN0ZXAsIHZhbHVlKSkpIHNwZWNpZmllci5wcmVjaXNpb24gPSBwcmVjaXNpb247XG4gICAgICByZXR1cm4gZm9ybWF0UHJlZml4KHNwZWNpZmllciwgdmFsdWUpO1xuICAgIH1cbiAgICBjYXNlIFwiXCI6XG4gICAgY2FzZSBcImVcIjpcbiAgICBjYXNlIFwiZ1wiOlxuICAgIGNhc2UgXCJwXCI6XG4gICAgY2FzZSBcInJcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uUm91bmQoc3RlcCwgTWF0aC5tYXgoTWF0aC5hYnMoc3RhcnQpLCBNYXRoLmFicyhzdG9wKSkpKSkgc3BlY2lmaWVyLnByZWNpc2lvbiA9IHByZWNpc2lvbiAtIChzcGVjaWZpZXIudHlwZSA9PT0gXCJlXCIpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgXCJmXCI6XG4gICAgY2FzZSBcIiVcIjoge1xuICAgICAgaWYgKHNwZWNpZmllci5wcmVjaXNpb24gPT0gbnVsbCAmJiAhaXNOYU4ocHJlY2lzaW9uID0gcHJlY2lzaW9uRml4ZWQoc3RlcCkpKSBzcGVjaWZpZXIucHJlY2lzaW9uID0gcHJlY2lzaW9uIC0gKHNwZWNpZmllci50eXBlID09PSBcIiVcIikgKiAyO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiBmb3JtYXQoc3BlY2lmaWVyKTtcbn1cbiIsImltcG9ydCBleHBvbmVudCBmcm9tIFwiLi9leHBvbmVudC5qc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbihzdGVwLCB2YWx1ZSkge1xuICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5tYXgoLTgsIE1hdGgubWluKDgsIE1hdGguZmxvb3IoZXhwb25lbnQodmFsdWUpIC8gMykpKSAqIDMgLSBleHBvbmVudChNYXRoLmFicyhzdGVwKSkpO1xufVxuIiwiaW1wb3J0IGV4cG9uZW50IGZyb20gXCIuL2V4cG9uZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHN0ZXAsIG1heCkge1xuICBzdGVwID0gTWF0aC5hYnMoc3RlcCksIG1heCA9IE1hdGguYWJzKG1heCkgLSBzdGVwO1xuICByZXR1cm4gTWF0aC5tYXgoMCwgZXhwb25lbnQobWF4KSAtIGV4cG9uZW50KHN0ZXApKSArIDE7XG59XG4iLCJpbXBvcnQgZXhwb25lbnQgZnJvbSBcIi4vZXhwb25lbnQuanNcIjtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oc3RlcCkge1xuICByZXR1cm4gTWF0aC5tYXgoMCwgLWV4cG9uZW50KE1hdGguYWJzKHN0ZXApKSk7XG59XG4iLCJpbXBvcnQge3RpY2tzLCB0aWNrSW5jcmVtZW50fSBmcm9tIFwiZDMtYXJyYXlcIjtcbmltcG9ydCBjb250aW51b3VzLCB7Y29weX0gZnJvbSBcIi4vY29udGludW91cy5qc1wiO1xuaW1wb3J0IHtpbml0UmFuZ2V9IGZyb20gXCIuL2luaXQuanNcIjtcbmltcG9ydCB0aWNrRm9ybWF0IGZyb20gXCIuL3RpY2tGb3JtYXQuanNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGxpbmVhcmlzaChzY2FsZSkge1xuICB2YXIgZG9tYWluID0gc2NhbGUuZG9tYWluO1xuXG4gIHNjYWxlLnRpY2tzID0gZnVuY3Rpb24oY291bnQpIHtcbiAgICB2YXIgZCA9IGRvbWFpbigpO1xuICAgIHJldHVybiB0aWNrcyhkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIGNvdW50ID09IG51bGwgPyAxMCA6IGNvdW50KTtcbiAgfTtcblxuICBzY2FsZS50aWNrRm9ybWF0ID0gZnVuY3Rpb24oY291bnQsIHNwZWNpZmllcikge1xuICAgIHZhciBkID0gZG9tYWluKCk7XG4gICAgcmV0dXJuIHRpY2tGb3JtYXQoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBjb3VudCA9PSBudWxsID8gMTAgOiBjb3VudCwgc3BlY2lmaWVyKTtcbiAgfTtcblxuICBzY2FsZS5uaWNlID0gZnVuY3Rpb24oY291bnQpIHtcbiAgICBpZiAoY291bnQgPT0gbnVsbCkgY291bnQgPSAxMDtcblxuICAgIHZhciBkID0gZG9tYWluKCk7XG4gICAgdmFyIGkwID0gMDtcbiAgICB2YXIgaTEgPSBkLmxlbmd0aCAtIDE7XG4gICAgdmFyIHN0YXJ0ID0gZFtpMF07XG4gICAgdmFyIHN0b3AgPSBkW2kxXTtcbiAgICB2YXIgcHJlc3RlcDtcbiAgICB2YXIgc3RlcDtcbiAgICB2YXIgbWF4SXRlciA9IDEwO1xuXG4gICAgaWYgKHN0b3AgPCBzdGFydCkge1xuICAgICAgc3RlcCA9IHN0YXJ0LCBzdGFydCA9IHN0b3AsIHN0b3AgPSBzdGVwO1xuICAgICAgc3RlcCA9IGkwLCBpMCA9IGkxLCBpMSA9IHN0ZXA7XG4gICAgfVxuICAgIFxuICAgIHdoaWxlIChtYXhJdGVyLS0gPiAwKSB7XG4gICAgICBzdGVwID0gdGlja0luY3JlbWVudChzdGFydCwgc3RvcCwgY291bnQpO1xuICAgICAgaWYgKHN0ZXAgPT09IHByZXN0ZXApIHtcbiAgICAgICAgZFtpMF0gPSBzdGFydFxuICAgICAgICBkW2kxXSA9IHN0b3BcbiAgICAgICAgcmV0dXJuIGRvbWFpbihkKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RlcCA+IDApIHtcbiAgICAgICAgc3RhcnQgPSBNYXRoLmZsb29yKHN0YXJ0IC8gc3RlcCkgKiBzdGVwO1xuICAgICAgICBzdG9wID0gTWF0aC5jZWlsKHN0b3AgLyBzdGVwKSAqIHN0ZXA7XG4gICAgICB9IGVsc2UgaWYgKHN0ZXAgPCAwKSB7XG4gICAgICAgIHN0YXJ0ID0gTWF0aC5jZWlsKHN0YXJ0ICogc3RlcCkgLyBzdGVwO1xuICAgICAgICBzdG9wID0gTWF0aC5mbG9vcihzdG9wICogc3RlcCkgLyBzdGVwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBwcmVzdGVwID0gc3RlcDtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NhbGU7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaW5lYXIoKSB7XG4gIHZhciBzY2FsZSA9IGNvbnRpbnVvdXMoKTtcblxuICBzY2FsZS5jb3B5ID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIGNvcHkoc2NhbGUsIGxpbmVhcigpKTtcbiAgfTtcblxuICBpbml0UmFuZ2UuYXBwbHkoc2NhbGUsIGFyZ3VtZW50cyk7XG5cbiAgcmV0dXJuIGxpbmVhcmlzaChzY2FsZSk7XG59XG4iLCJ2YXIgdDAgPSBuZXcgRGF0ZSxcbiAgICB0MSA9IG5ldyBEYXRlO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBuZXdJbnRlcnZhbChmbG9vcmksIG9mZnNldGksIGNvdW50LCBmaWVsZCkge1xuXG4gIGZ1bmN0aW9uIGludGVydmFsKGRhdGUpIHtcbiAgICByZXR1cm4gZmxvb3JpKGRhdGUgPSBhcmd1bWVudHMubGVuZ3RoID09PSAwID8gbmV3IERhdGUgOiBuZXcgRGF0ZSgrZGF0ZSkpLCBkYXRlO1xuICB9XG5cbiAgaW50ZXJ2YWwuZmxvb3IgPSBmdW5jdGlvbihkYXRlKSB7XG4gICAgcmV0dXJuIGZsb29yaShkYXRlID0gbmV3IERhdGUoK2RhdGUpKSwgZGF0ZTtcbiAgfTtcblxuICBpbnRlcnZhbC5jZWlsID0gZnVuY3Rpb24oZGF0ZSkge1xuICAgIHJldHVybiBmbG9vcmkoZGF0ZSA9IG5ldyBEYXRlKGRhdGUgLSAxKSksIG9mZnNldGkoZGF0ZSwgMSksIGZsb29yaShkYXRlKSwgZGF0ZTtcbiAgfTtcblxuICBpbnRlcnZhbC5yb3VuZCA9IGZ1bmN0aW9uKGRhdGUpIHtcbiAgICB2YXIgZDAgPSBpbnRlcnZhbChkYXRlKSxcbiAgICAgICAgZDEgPSBpbnRlcnZhbC5jZWlsKGRhdGUpO1xuICAgIHJldHVybiBkYXRlIC0gZDAgPCBkMSAtIGRhdGUgPyBkMCA6IGQxO1xuICB9O1xuXG4gIGludGVydmFsLm9mZnNldCA9IGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICByZXR1cm4gb2Zmc2V0aShkYXRlID0gbmV3IERhdGUoK2RhdGUpLCBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKSksIGRhdGU7XG4gIH07XG5cbiAgaW50ZXJ2YWwucmFuZ2UgPSBmdW5jdGlvbihzdGFydCwgc3RvcCwgc3RlcCkge1xuICAgIHZhciByYW5nZSA9IFtdLCBwcmV2aW91cztcbiAgICBzdGFydCA9IGludGVydmFsLmNlaWwoc3RhcnQpO1xuICAgIHN0ZXAgPSBzdGVwID09IG51bGwgPyAxIDogTWF0aC5mbG9vcihzdGVwKTtcbiAgICBpZiAoIShzdGFydCA8IHN0b3ApIHx8ICEoc3RlcCA+IDApKSByZXR1cm4gcmFuZ2U7IC8vIGFsc28gaGFuZGxlcyBJbnZhbGlkIERhdGVcbiAgICBkbyByYW5nZS5wdXNoKHByZXZpb3VzID0gbmV3IERhdGUoK3N0YXJ0KSksIG9mZnNldGkoc3RhcnQsIHN0ZXApLCBmbG9vcmkoc3RhcnQpO1xuICAgIHdoaWxlIChwcmV2aW91cyA8IHN0YXJ0ICYmIHN0YXJ0IDwgc3RvcCk7XG4gICAgcmV0dXJuIHJhbmdlO1xuICB9O1xuXG4gIGludGVydmFsLmZpbHRlciA9IGZ1bmN0aW9uKHRlc3QpIHtcbiAgICByZXR1cm4gbmV3SW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkgd2hpbGUgKGZsb29yaShkYXRlKSwgIXRlc3QoZGF0ZSkpIGRhdGUuc2V0VGltZShkYXRlIC0gMSk7XG4gICAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgICAgaWYgKGRhdGUgPj0gZGF0ZSkge1xuICAgICAgICBpZiAoc3RlcCA8IDApIHdoaWxlICgrK3N0ZXAgPD0gMCkge1xuICAgICAgICAgIHdoaWxlIChvZmZzZXRpKGRhdGUsIC0xKSwgIXRlc3QoZGF0ZSkpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgfSBlbHNlIHdoaWxlICgtLXN0ZXAgPj0gMCkge1xuICAgICAgICAgIHdoaWxlIChvZmZzZXRpKGRhdGUsICsxKSwgIXRlc3QoZGF0ZSkpIHt9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tZW1wdHlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGlmIChjb3VudCkge1xuICAgIGludGVydmFsLmNvdW50ID0gZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgICAgdDAuc2V0VGltZSgrc3RhcnQpLCB0MS5zZXRUaW1lKCtlbmQpO1xuICAgICAgZmxvb3JpKHQwKSwgZmxvb3JpKHQxKTtcbiAgICAgIHJldHVybiBNYXRoLmZsb29yKGNvdW50KHQwLCB0MSkpO1xuICAgIH07XG5cbiAgICBpbnRlcnZhbC5ldmVyeSA9IGZ1bmN0aW9uKHN0ZXApIHtcbiAgICAgIHN0ZXAgPSBNYXRoLmZsb29yKHN0ZXApO1xuICAgICAgcmV0dXJuICFpc0Zpbml0ZShzdGVwKSB8fCAhKHN0ZXAgPiAwKSA/IG51bGxcbiAgICAgICAgICA6ICEoc3RlcCA+IDEpID8gaW50ZXJ2YWxcbiAgICAgICAgICA6IGludGVydmFsLmZpbHRlcihmaWVsZFxuICAgICAgICAgICAgICA/IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGZpZWxkKGQpICUgc3RlcCA9PT0gMDsgfVxuICAgICAgICAgICAgICA6IGZ1bmN0aW9uKGQpIHsgcmV0dXJuIGludGVydmFsLmNvdW50KDAsIGQpICUgc3RlcCA9PT0gMDsgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiBpbnRlcnZhbDtcbn1cbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuXG52YXIgbWlsbGlzZWNvbmQgPSBpbnRlcnZhbChmdW5jdGlvbigpIHtcbiAgLy8gbm9vcFxufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZCAtIHN0YXJ0O1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbm1pbGxpc2Vjb25kLmV2ZXJ5ID0gZnVuY3Rpb24oaykge1xuICBrID0gTWF0aC5mbG9vcihrKTtcbiAgaWYgKCFpc0Zpbml0ZShrKSB8fCAhKGsgPiAwKSkgcmV0dXJuIG51bGw7XG4gIGlmICghKGsgPiAxKSkgcmV0dXJuIG1pbGxpc2Vjb25kO1xuICByZXR1cm4gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0VGltZShNYXRoLmZsb29yKGRhdGUgLyBrKSAqIGspO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGspO1xuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBrO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IG1pbGxpc2Vjb25kO1xuZXhwb3J0IHZhciBtaWxsaXNlY29uZHMgPSBtaWxsaXNlY29uZC5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvblNlY29uZH0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxudmFyIHNlY29uZCA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRUaW1lKGRhdGUgLSBkYXRlLmdldE1pbGxpc2Vjb25kcygpKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uU2Vjb25kKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvblNlY29uZDtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0VVRDU2Vjb25kcygpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHNlY29uZDtcbmV4cG9ydCB2YXIgc2Vjb25kcyA9IHNlY29uZC5yYW5nZTtcbiIsImV4cG9ydCBjb25zdCBkdXJhdGlvblNlY29uZCA9IDEwMDA7XG5leHBvcnQgY29uc3QgZHVyYXRpb25NaW51dGUgPSBkdXJhdGlvblNlY29uZCAqIDYwO1xuZXhwb3J0IGNvbnN0IGR1cmF0aW9uSG91ciA9IGR1cmF0aW9uTWludXRlICogNjA7XG5leHBvcnQgY29uc3QgZHVyYXRpb25EYXkgPSBkdXJhdGlvbkhvdXIgKiAyNDtcbmV4cG9ydCBjb25zdCBkdXJhdGlvbldlZWsgPSBkdXJhdGlvbkRheSAqIDc7XG5leHBvcnQgY29uc3QgZHVyYXRpb25Nb250aCA9IGR1cmF0aW9uRGF5ICogMzA7XG5leHBvcnQgY29uc3QgZHVyYXRpb25ZZWFyID0gZHVyYXRpb25EYXkgKiAzNjU7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcbmltcG9ydCB7ZHVyYXRpb25NaW51dGUsIGR1cmF0aW9uU2Vjb25kfSBmcm9tIFwiLi9kdXJhdGlvbi5qc1wiO1xuXG52YXIgbWludXRlID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFRpbWUoZGF0ZSAtIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSBkYXRlLmdldFNlY29uZHMoKSAqIGR1cmF0aW9uU2Vjb25kKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uTWludXRlKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbk1pbnV0ZTtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0TWludXRlcygpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IG1pbnV0ZTtcbmV4cG9ydCB2YXIgbWludXRlcyA9IG1pbnV0ZS5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbkhvdXIsIGR1cmF0aW9uTWludXRlLCBkdXJhdGlvblNlY29uZH0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxudmFyIGhvdXIgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VGltZShkYXRlIC0gZGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIGRhdGUuZ2V0U2Vjb25kcygpICogZHVyYXRpb25TZWNvbmQgLSBkYXRlLmdldE1pbnV0ZXMoKSAqIGR1cmF0aW9uTWludXRlKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uSG91cik7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25Ib3VyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRIb3VycygpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGhvdXI7XG5leHBvcnQgdmFyIGhvdXJzID0gaG91ci5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbkRheSwgZHVyYXRpb25NaW51dGV9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbnZhciBkYXkgPSBpbnRlcnZhbChcbiAgZGF0ZSA9PiBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApLFxuICAoZGF0ZSwgc3RlcCkgPT4gZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgc3RlcCksXG4gIChzdGFydCwgZW5kKSA9PiAoZW5kIC0gc3RhcnQgLSAoZW5kLmdldFRpbWV6b25lT2Zmc2V0KCkgLSBzdGFydC5nZXRUaW1lem9uZU9mZnNldCgpKSAqIGR1cmF0aW9uTWludXRlKSAvIGR1cmF0aW9uRGF5LFxuICBkYXRlID0+IGRhdGUuZ2V0RGF0ZSgpIC0gMVxuKTtcblxuZXhwb3J0IGRlZmF1bHQgZGF5O1xuZXhwb3J0IHZhciBkYXlzID0gZGF5LnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQge2R1cmF0aW9uTWludXRlLCBkdXJhdGlvbldlZWt9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5cbmZ1bmN0aW9uIHdlZWtkYXkoaSkge1xuICByZXR1cm4gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIChkYXRlLmdldERheSgpICsgNyAtIGkpICUgNyk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXAgKiA3KTtcbiAgfSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICAgIHJldHVybiAoZW5kIC0gc3RhcnQgLSAoZW5kLmdldFRpbWV6b25lT2Zmc2V0KCkgLSBzdGFydC5nZXRUaW1lem9uZU9mZnNldCgpKSAqIGR1cmF0aW9uTWludXRlKSAvIGR1cmF0aW9uV2VlaztcbiAgfSk7XG59XG5cbmV4cG9ydCB2YXIgc3VuZGF5ID0gd2Vla2RheSgwKTtcbmV4cG9ydCB2YXIgbW9uZGF5ID0gd2Vla2RheSgxKTtcbmV4cG9ydCB2YXIgdHVlc2RheSA9IHdlZWtkYXkoMik7XG5leHBvcnQgdmFyIHdlZG5lc2RheSA9IHdlZWtkYXkoMyk7XG5leHBvcnQgdmFyIHRodXJzZGF5ID0gd2Vla2RheSg0KTtcbmV4cG9ydCB2YXIgZnJpZGF5ID0gd2Vla2RheSg1KTtcbmV4cG9ydCB2YXIgc2F0dXJkYXkgPSB3ZWVrZGF5KDYpO1xuXG5leHBvcnQgdmFyIHN1bmRheXMgPSBzdW5kYXkucmFuZ2U7XG5leHBvcnQgdmFyIG1vbmRheXMgPSBtb25kYXkucmFuZ2U7XG5leHBvcnQgdmFyIHR1ZXNkYXlzID0gdHVlc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgd2VkbmVzZGF5cyA9IHdlZG5lc2RheS5yYW5nZTtcbmV4cG9ydCB2YXIgdGh1cnNkYXlzID0gdGh1cnNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIGZyaWRheXMgPSBmcmlkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHNhdHVyZGF5cyA9IHNhdHVyZGF5LnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbnZhciBtb250aCA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXREYXRlKDEpO1xuICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldE1vbnRoKGRhdGUuZ2V0TW9udGgoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldE1vbnRoKCkgLSBzdGFydC5nZXRNb250aCgpICsgKGVuZC5nZXRGdWxsWWVhcigpIC0gc3RhcnQuZ2V0RnVsbFllYXIoKSkgKiAxMjtcbn0sIGZ1bmN0aW9uKGRhdGUpIHtcbiAgcmV0dXJuIGRhdGUuZ2V0TW9udGgoKTtcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBtb250aDtcbmV4cG9ydCB2YXIgbW9udGhzID0gbW9udGgucmFuZ2U7XG4iLCJpbXBvcnQgaW50ZXJ2YWwgZnJvbSBcIi4vaW50ZXJ2YWwuanNcIjtcblxudmFyIHllYXIgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG59LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiBlbmQuZ2V0RnVsbFllYXIoKSAtIHN0YXJ0LmdldEZ1bGxZZWFyKCk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldEZ1bGxZZWFyKCk7XG59KTtcblxuLy8gQW4gb3B0aW1pemVkIGltcGxlbWVudGF0aW9uIGZvciB0aGlzIHNpbXBsZSBjYXNlLlxueWVhci5ldmVyeSA9IGZ1bmN0aW9uKGspIHtcbiAgcmV0dXJuICFpc0Zpbml0ZShrID0gTWF0aC5mbG9vcihrKSkgfHwgIShrID4gMCkgPyBudWxsIDogaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICAgIGRhdGUuc2V0RnVsbFllYXIoTWF0aC5mbG9vcihkYXRlLmdldEZ1bGxZZWFyKCkgLyBrKSAqIGspO1xuICAgIGRhdGUuc2V0TW9udGgoMCwgMSk7XG4gICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgfSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICAgIGRhdGUuc2V0RnVsbFllYXIoZGF0ZS5nZXRGdWxsWWVhcigpICsgc3RlcCAqIGspO1xuICB9KTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHllYXI7XG5leHBvcnQgdmFyIHllYXJzID0geWVhci5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbk1pbnV0ZX0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxudmFyIHV0Y01pbnV0ZSA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRVVENTZWNvbmRzKDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFRpbWUoK2RhdGUgKyBzdGVwICogZHVyYXRpb25NaW51dGUpO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gKGVuZCAtIHN0YXJ0KSAvIGR1cmF0aW9uTWludXRlO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENNaW51dGVzKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgdXRjTWludXRlO1xuZXhwb3J0IHZhciB1dGNNaW51dGVzID0gdXRjTWludXRlLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQge2R1cmF0aW9uSG91cn0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxudmFyIHV0Y0hvdXIgPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDTWludXRlcygwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRUaW1lKCtkYXRlICsgc3RlcCAqIGR1cmF0aW9uSG91cik7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25Ib3VyO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENIb3VycygpO1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IHV0Y0hvdXI7XG5leHBvcnQgdmFyIHV0Y0hvdXJzID0gdXRjSG91ci5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuaW1wb3J0IHtkdXJhdGlvbkRheX0gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxudmFyIHV0Y0RheSA9IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgc3RlcCk7XG59LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gIHJldHVybiAoZW5kIC0gc3RhcnQpIC8gZHVyYXRpb25EYXk7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ0RhdGUoKSAtIDE7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgdXRjRGF5O1xuZXhwb3J0IHZhciB1dGNEYXlzID0gdXRjRGF5LnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5pbXBvcnQge2R1cmF0aW9uV2Vla30gZnJvbSBcIi4vZHVyYXRpb24uanNcIjtcblxuZnVuY3Rpb24gdXRjV2Vla2RheShpKSB7XG4gIHJldHVybiBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gICAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpIC0gKGRhdGUuZ2V0VVRDRGF5KCkgKyA3IC0gaSkgJSA3KTtcbiAgICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xuICB9LCBmdW5jdGlvbihkYXRlLCBzdGVwKSB7XG4gICAgZGF0ZS5zZXRVVENEYXRlKGRhdGUuZ2V0VVRDRGF0ZSgpICsgc3RlcCAqIDcpO1xuICB9LCBmdW5jdGlvbihzdGFydCwgZW5kKSB7XG4gICAgcmV0dXJuIChlbmQgLSBzdGFydCkgLyBkdXJhdGlvbldlZWs7XG4gIH0pO1xufVxuXG5leHBvcnQgdmFyIHV0Y1N1bmRheSA9IHV0Y1dlZWtkYXkoMCk7XG5leHBvcnQgdmFyIHV0Y01vbmRheSA9IHV0Y1dlZWtkYXkoMSk7XG5leHBvcnQgdmFyIHV0Y1R1ZXNkYXkgPSB1dGNXZWVrZGF5KDIpO1xuZXhwb3J0IHZhciB1dGNXZWRuZXNkYXkgPSB1dGNXZWVrZGF5KDMpO1xuZXhwb3J0IHZhciB1dGNUaHVyc2RheSA9IHV0Y1dlZWtkYXkoNCk7XG5leHBvcnQgdmFyIHV0Y0ZyaWRheSA9IHV0Y1dlZWtkYXkoNSk7XG5leHBvcnQgdmFyIHV0Y1NhdHVyZGF5ID0gdXRjV2Vla2RheSg2KTtcblxuZXhwb3J0IHZhciB1dGNTdW5kYXlzID0gdXRjU3VuZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNNb25kYXlzID0gdXRjTW9uZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNUdWVzZGF5cyA9IHV0Y1R1ZXNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y1dlZG5lc2RheXMgPSB1dGNXZWRuZXNkYXkucmFuZ2U7XG5leHBvcnQgdmFyIHV0Y1RodXJzZGF5cyA9IHV0Y1RodXJzZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNGcmlkYXlzID0gdXRjRnJpZGF5LnJhbmdlO1xuZXhwb3J0IHZhciB1dGNTYXR1cmRheXMgPSB1dGNTYXR1cmRheS5yYW5nZTtcbiIsImltcG9ydCBpbnRlcnZhbCBmcm9tIFwiLi9pbnRlcnZhbC5qc1wiO1xuXG52YXIgdXRjTW9udGggPSBpbnRlcnZhbChmdW5jdGlvbihkYXRlKSB7XG4gIGRhdGUuc2V0VVRDRGF0ZSgxKTtcbiAgZGF0ZS5zZXRVVENIb3VycygwLCAwLCAwLCAwKTtcbn0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgZGF0ZS5zZXRVVENNb250aChkYXRlLmdldFVUQ01vbnRoKCkgKyBzdGVwKTtcbn0sIGZ1bmN0aW9uKHN0YXJ0LCBlbmQpIHtcbiAgcmV0dXJuIGVuZC5nZXRVVENNb250aCgpIC0gc3RhcnQuZ2V0VVRDTW9udGgoKSArIChlbmQuZ2V0VVRDRnVsbFllYXIoKSAtIHN0YXJ0LmdldFVUQ0Z1bGxZZWFyKCkpICogMTI7XG59LCBmdW5jdGlvbihkYXRlKSB7XG4gIHJldHVybiBkYXRlLmdldFVUQ01vbnRoKCk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgdXRjTW9udGg7XG5leHBvcnQgdmFyIHV0Y01vbnRocyA9IHV0Y01vbnRoLnJhbmdlO1xuIiwiaW1wb3J0IGludGVydmFsIGZyb20gXCIuL2ludGVydmFsLmpzXCI7XG5cbnZhciB1dGNZZWFyID0gaW50ZXJ2YWwoZnVuY3Rpb24oZGF0ZSkge1xuICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICBkYXRlLnNldFVUQ0hvdXJzKDAsIDAsIDAsIDApO1xufSwgZnVuY3Rpb24oZGF0ZSwgc3RlcCkge1xuICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXApO1xufSwgZnVuY3Rpb24oc3RhcnQsIGVuZCkge1xuICByZXR1cm4gZW5kLmdldFVUQ0Z1bGxZZWFyKCkgLSBzdGFydC5nZXRVVENGdWxsWWVhcigpO1xufSwgZnVuY3Rpb24oZGF0ZSkge1xuICByZXR1cm4gZGF0ZS5nZXRVVENGdWxsWWVhcigpO1xufSk7XG5cbi8vIEFuIG9wdGltaXplZCBpbXBsZW1lbnRhdGlvbiBmb3IgdGhpcyBzaW1wbGUgY2FzZS5cbnV0Y1llYXIuZXZlcnkgPSBmdW5jdGlvbihrKSB7XG4gIHJldHVybiAhaXNGaW5pdGUoayA9IE1hdGguZmxvb3IoaykpIHx8ICEoayA+IDApID8gbnVsbCA6IGludGVydmFsKGZ1bmN0aW9uKGRhdGUpIHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKE1hdGguZmxvb3IoZGF0ZS5nZXRVVENGdWxsWWVhcigpIC8gaykgKiBrKTtcbiAgICBkYXRlLnNldFVUQ01vbnRoKDAsIDEpO1xuICAgIGRhdGUuc2V0VVRDSG91cnMoMCwgMCwgMCwgMCk7XG4gIH0sIGZ1bmN0aW9uKGRhdGUsIHN0ZXApIHtcbiAgICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSArIHN0ZXAgKiBrKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCB1dGNZZWFyO1xuZXhwb3J0IHZhciB1dGNZZWFycyA9IHV0Y1llYXIucmFuZ2U7XG4iLCJpbXBvcnQge2Jpc2VjdG9yLCB0aWNrU3RlcH0gZnJvbSBcImQzLWFycmF5XCI7XG5pbXBvcnQge2R1cmF0aW9uRGF5LCBkdXJhdGlvbkhvdXIsIGR1cmF0aW9uTWludXRlLCBkdXJhdGlvbk1vbnRoLCBkdXJhdGlvblNlY29uZCwgZHVyYXRpb25XZWVrLCBkdXJhdGlvblllYXJ9IGZyb20gXCIuL2R1cmF0aW9uLmpzXCI7XG5pbXBvcnQgbWlsbGlzZWNvbmQgZnJvbSBcIi4vbWlsbGlzZWNvbmQuanNcIjtcbmltcG9ydCBzZWNvbmQgZnJvbSBcIi4vc2Vjb25kLmpzXCI7XG5pbXBvcnQgbWludXRlIGZyb20gXCIuL21pbnV0ZS5qc1wiO1xuaW1wb3J0IGhvdXIgZnJvbSBcIi4vaG91ci5qc1wiO1xuaW1wb3J0IGRheSBmcm9tIFwiLi9kYXkuanNcIjtcbmltcG9ydCB7c3VuZGF5IGFzIHdlZWt9IGZyb20gXCIuL3dlZWsuanNcIjtcbmltcG9ydCBtb250aCBmcm9tIFwiLi9tb250aC5qc1wiO1xuaW1wb3J0IHllYXIgZnJvbSBcIi4veWVhci5qc1wiO1xuaW1wb3J0IHV0Y01pbnV0ZSBmcm9tIFwiLi91dGNNaW51dGUuanNcIjtcbmltcG9ydCB1dGNIb3VyIGZyb20gXCIuL3V0Y0hvdXIuanNcIjtcbmltcG9ydCB1dGNEYXkgZnJvbSBcIi4vdXRjRGF5LmpzXCI7XG5pbXBvcnQge3V0Y1N1bmRheSBhcyB1dGNXZWVrfSBmcm9tIFwiLi91dGNXZWVrLmpzXCI7XG5pbXBvcnQgdXRjTW9udGggZnJvbSBcIi4vdXRjTW9udGguanNcIjtcbmltcG9ydCB1dGNZZWFyIGZyb20gXCIuL3V0Y1llYXIuanNcIjtcblxuZnVuY3Rpb24gdGlja2VyKHllYXIsIG1vbnRoLCB3ZWVrLCBkYXksIGhvdXIsIG1pbnV0ZSkge1xuXG4gIGNvbnN0IHRpY2tJbnRlcnZhbHMgPSBbXG4gICAgW3NlY29uZCwgIDEsICAgICAgZHVyYXRpb25TZWNvbmRdLFxuICAgIFtzZWNvbmQsICA1LCAgNSAqIGR1cmF0aW9uU2Vjb25kXSxcbiAgICBbc2Vjb25kLCAxNSwgMTUgKiBkdXJhdGlvblNlY29uZF0sXG4gICAgW3NlY29uZCwgMzAsIDMwICogZHVyYXRpb25TZWNvbmRdLFxuICAgIFttaW51dGUsICAxLCAgICAgIGR1cmF0aW9uTWludXRlXSxcbiAgICBbbWludXRlLCAgNSwgIDUgKiBkdXJhdGlvbk1pbnV0ZV0sXG4gICAgW21pbnV0ZSwgMTUsIDE1ICogZHVyYXRpb25NaW51dGVdLFxuICAgIFttaW51dGUsIDMwLCAzMCAqIGR1cmF0aW9uTWludXRlXSxcbiAgICBbICBob3VyLCAgMSwgICAgICBkdXJhdGlvbkhvdXIgIF0sXG4gICAgWyAgaG91ciwgIDMsICAzICogZHVyYXRpb25Ib3VyICBdLFxuICAgIFsgIGhvdXIsICA2LCAgNiAqIGR1cmF0aW9uSG91ciAgXSxcbiAgICBbICBob3VyLCAxMiwgMTIgKiBkdXJhdGlvbkhvdXIgIF0sXG4gICAgWyAgIGRheSwgIDEsICAgICAgZHVyYXRpb25EYXkgICBdLFxuICAgIFsgICBkYXksICAyLCAgMiAqIGR1cmF0aW9uRGF5ICAgXSxcbiAgICBbICB3ZWVrLCAgMSwgICAgICBkdXJhdGlvbldlZWsgIF0sXG4gICAgWyBtb250aCwgIDEsICAgICAgZHVyYXRpb25Nb250aCBdLFxuICAgIFsgbW9udGgsICAzLCAgMyAqIGR1cmF0aW9uTW9udGggXSxcbiAgICBbICB5ZWFyLCAgMSwgICAgICBkdXJhdGlvblllYXIgIF1cbiAgXTtcblxuICBmdW5jdGlvbiB0aWNrcyhzdGFydCwgc3RvcCwgY291bnQpIHtcbiAgICBjb25zdCByZXZlcnNlID0gc3RvcCA8IHN0YXJ0O1xuICAgIGlmIChyZXZlcnNlKSBbc3RhcnQsIHN0b3BdID0gW3N0b3AsIHN0YXJ0XTtcbiAgICBjb25zdCBpbnRlcnZhbCA9IGNvdW50ICYmIHR5cGVvZiBjb3VudC5yYW5nZSA9PT0gXCJmdW5jdGlvblwiID8gY291bnQgOiB0aWNrSW50ZXJ2YWwoc3RhcnQsIHN0b3AsIGNvdW50KTtcbiAgICBjb25zdCB0aWNrcyA9IGludGVydmFsID8gaW50ZXJ2YWwucmFuZ2Uoc3RhcnQsICtzdG9wICsgMSkgOiBbXTsgLy8gaW5jbHVzaXZlIHN0b3BcbiAgICByZXR1cm4gcmV2ZXJzZSA/IHRpY2tzLnJldmVyc2UoKSA6IHRpY2tzO1xuICB9XG5cbiAgZnVuY3Rpb24gdGlja0ludGVydmFsKHN0YXJ0LCBzdG9wLCBjb3VudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IE1hdGguYWJzKHN0b3AgLSBzdGFydCkgLyBjb3VudDtcbiAgICBjb25zdCBpID0gYmlzZWN0b3IoKFssLCBzdGVwXSkgPT4gc3RlcCkucmlnaHQodGlja0ludGVydmFscywgdGFyZ2V0KTtcbiAgICBpZiAoaSA9PT0gdGlja0ludGVydmFscy5sZW5ndGgpIHJldHVybiB5ZWFyLmV2ZXJ5KHRpY2tTdGVwKHN0YXJ0IC8gZHVyYXRpb25ZZWFyLCBzdG9wIC8gZHVyYXRpb25ZZWFyLCBjb3VudCkpO1xuICAgIGlmIChpID09PSAwKSByZXR1cm4gbWlsbGlzZWNvbmQuZXZlcnkoTWF0aC5tYXgodGlja1N0ZXAoc3RhcnQsIHN0b3AsIGNvdW50KSwgMSkpO1xuICAgIGNvbnN0IFt0LCBzdGVwXSA9IHRpY2tJbnRlcnZhbHNbdGFyZ2V0IC8gdGlja0ludGVydmFsc1tpIC0gMV1bMl0gPCB0aWNrSW50ZXJ2YWxzW2ldWzJdIC8gdGFyZ2V0ID8gaSAtIDEgOiBpXTtcbiAgICByZXR1cm4gdC5ldmVyeShzdGVwKTtcbiAgfVxuXG4gIHJldHVybiBbdGlja3MsIHRpY2tJbnRlcnZhbF07XG59XG5cbmNvbnN0IFt1dGNUaWNrcywgdXRjVGlja0ludGVydmFsXSA9IHRpY2tlcih1dGNZZWFyLCB1dGNNb250aCwgdXRjV2VlaywgdXRjRGF5LCB1dGNIb3VyLCB1dGNNaW51dGUpO1xuY29uc3QgW3RpbWVUaWNrcywgdGltZVRpY2tJbnRlcnZhbF0gPSB0aWNrZXIoeWVhciwgbW9udGgsIHdlZWssIGRheSwgaG91ciwgbWludXRlKTtcblxuZXhwb3J0IHt1dGNUaWNrcywgdXRjVGlja0ludGVydmFsLCB0aW1lVGlja3MsIHRpbWVUaWNrSW50ZXJ2YWx9O1xuIiwiaW1wb3J0IHtcbiAgdGltZURheSxcbiAgdGltZVN1bmRheSxcbiAgdGltZU1vbmRheSxcbiAgdGltZVRodXJzZGF5LFxuICB0aW1lWWVhcixcbiAgdXRjRGF5LFxuICB1dGNTdW5kYXksXG4gIHV0Y01vbmRheSxcbiAgdXRjVGh1cnNkYXksXG4gIHV0Y1llYXJcbn0gZnJvbSBcImQzLXRpbWVcIjtcblxuZnVuY3Rpb24gbG9jYWxEYXRlKGQpIHtcbiAgaWYgKDAgPD0gZC55ICYmIGQueSA8IDEwMCkge1xuICAgIHZhciBkYXRlID0gbmV3IERhdGUoLTEsIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpO1xuICAgIGRhdGUuc2V0RnVsbFllYXIoZC55KTtcbiAgICByZXR1cm4gZGF0ZTtcbiAgfVxuICByZXR1cm4gbmV3IERhdGUoZC55LCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKTtcbn1cblxuZnVuY3Rpb24gdXRjRGF0ZShkKSB7XG4gIGlmICgwIDw9IGQueSAmJiBkLnkgPCAxMDApIHtcbiAgICB2YXIgZGF0ZSA9IG5ldyBEYXRlKERhdGUuVVRDKC0xLCBkLm0sIGQuZCwgZC5ILCBkLk0sIGQuUywgZC5MKSk7XG4gICAgZGF0ZS5zZXRVVENGdWxsWWVhcihkLnkpO1xuICAgIHJldHVybiBkYXRlO1xuICB9XG4gIHJldHVybiBuZXcgRGF0ZShEYXRlLlVUQyhkLnksIGQubSwgZC5kLCBkLkgsIGQuTSwgZC5TLCBkLkwpKTtcbn1cblxuZnVuY3Rpb24gbmV3RGF0ZSh5LCBtLCBkKSB7XG4gIHJldHVybiB7eTogeSwgbTogbSwgZDogZCwgSDogMCwgTTogMCwgUzogMCwgTDogMH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdExvY2FsZShsb2NhbGUpIHtcbiAgdmFyIGxvY2FsZV9kYXRlVGltZSA9IGxvY2FsZS5kYXRlVGltZSxcbiAgICAgIGxvY2FsZV9kYXRlID0gbG9jYWxlLmRhdGUsXG4gICAgICBsb2NhbGVfdGltZSA9IGxvY2FsZS50aW1lLFxuICAgICAgbG9jYWxlX3BlcmlvZHMgPSBsb2NhbGUucGVyaW9kcyxcbiAgICAgIGxvY2FsZV93ZWVrZGF5cyA9IGxvY2FsZS5kYXlzLFxuICAgICAgbG9jYWxlX3Nob3J0V2Vla2RheXMgPSBsb2NhbGUuc2hvcnREYXlzLFxuICAgICAgbG9jYWxlX21vbnRocyA9IGxvY2FsZS5tb250aHMsXG4gICAgICBsb2NhbGVfc2hvcnRNb250aHMgPSBsb2NhbGUuc2hvcnRNb250aHM7XG5cbiAgdmFyIHBlcmlvZFJlID0gZm9ybWF0UmUobG9jYWxlX3BlcmlvZHMpLFxuICAgICAgcGVyaW9kTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9wZXJpb2RzKSxcbiAgICAgIHdlZWtkYXlSZSA9IGZvcm1hdFJlKGxvY2FsZV93ZWVrZGF5cyksXG4gICAgICB3ZWVrZGF5TG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV93ZWVrZGF5cyksXG4gICAgICBzaG9ydFdlZWtkYXlSZSA9IGZvcm1hdFJlKGxvY2FsZV9zaG9ydFdlZWtkYXlzKSxcbiAgICAgIHNob3J0V2Vla2RheUxvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfc2hvcnRXZWVrZGF5cyksXG4gICAgICBtb250aFJlID0gZm9ybWF0UmUobG9jYWxlX21vbnRocyksXG4gICAgICBtb250aExvb2t1cCA9IGZvcm1hdExvb2t1cChsb2NhbGVfbW9udGhzKSxcbiAgICAgIHNob3J0TW9udGhSZSA9IGZvcm1hdFJlKGxvY2FsZV9zaG9ydE1vbnRocyksXG4gICAgICBzaG9ydE1vbnRoTG9va3VwID0gZm9ybWF0TG9va3VwKGxvY2FsZV9zaG9ydE1vbnRocyk7XG5cbiAgdmFyIGZvcm1hdHMgPSB7XG4gICAgXCJhXCI6IGZvcm1hdFNob3J0V2Vla2RheSxcbiAgICBcIkFcIjogZm9ybWF0V2Vla2RheSxcbiAgICBcImJcIjogZm9ybWF0U2hvcnRNb250aCxcbiAgICBcIkJcIjogZm9ybWF0TW9udGgsXG4gICAgXCJjXCI6IG51bGwsXG4gICAgXCJkXCI6IGZvcm1hdERheU9mTW9udGgsXG4gICAgXCJlXCI6IGZvcm1hdERheU9mTW9udGgsXG4gICAgXCJmXCI6IGZvcm1hdE1pY3Jvc2Vjb25kcyxcbiAgICBcImdcIjogZm9ybWF0WWVhcklTTyxcbiAgICBcIkdcIjogZm9ybWF0RnVsbFllYXJJU08sXG4gICAgXCJIXCI6IGZvcm1hdEhvdXIyNCxcbiAgICBcIklcIjogZm9ybWF0SG91cjEyLFxuICAgIFwialwiOiBmb3JtYXREYXlPZlllYXIsXG4gICAgXCJMXCI6IGZvcm1hdE1pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogZm9ybWF0TW9udGhOdW1iZXIsXG4gICAgXCJNXCI6IGZvcm1hdE1pbnV0ZXMsXG4gICAgXCJwXCI6IGZvcm1hdFBlcmlvZCxcbiAgICBcInFcIjogZm9ybWF0UXVhcnRlcixcbiAgICBcIlFcIjogZm9ybWF0VW5peFRpbWVzdGFtcCxcbiAgICBcInNcIjogZm9ybWF0VW5peFRpbWVzdGFtcFNlY29uZHMsXG4gICAgXCJTXCI6IGZvcm1hdFNlY29uZHMsXG4gICAgXCJ1XCI6IGZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXksXG4gICAgXCJVXCI6IGZvcm1hdFdlZWtOdW1iZXJTdW5kYXksXG4gICAgXCJWXCI6IGZvcm1hdFdlZWtOdW1iZXJJU08sXG4gICAgXCJ3XCI6IGZvcm1hdFdlZWtkYXlOdW1iZXJTdW5kYXksXG4gICAgXCJXXCI6IGZvcm1hdFdlZWtOdW1iZXJNb25kYXksXG4gICAgXCJ4XCI6IG51bGwsXG4gICAgXCJYXCI6IG51bGwsXG4gICAgXCJ5XCI6IGZvcm1hdFllYXIsXG4gICAgXCJZXCI6IGZvcm1hdEZ1bGxZZWFyLFxuICAgIFwiWlwiOiBmb3JtYXRab25lLFxuICAgIFwiJVwiOiBmb3JtYXRMaXRlcmFsUGVyY2VudFxuICB9O1xuXG4gIHZhciB1dGNGb3JtYXRzID0ge1xuICAgIFwiYVwiOiBmb3JtYXRVVENTaG9ydFdlZWtkYXksXG4gICAgXCJBXCI6IGZvcm1hdFVUQ1dlZWtkYXksXG4gICAgXCJiXCI6IGZvcm1hdFVUQ1Nob3J0TW9udGgsXG4gICAgXCJCXCI6IGZvcm1hdFVUQ01vbnRoLFxuICAgIFwiY1wiOiBudWxsLFxuICAgIFwiZFwiOiBmb3JtYXRVVENEYXlPZk1vbnRoLFxuICAgIFwiZVwiOiBmb3JtYXRVVENEYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBmb3JtYXRVVENNaWNyb3NlY29uZHMsXG4gICAgXCJnXCI6IGZvcm1hdFVUQ1llYXJJU08sXG4gICAgXCJHXCI6IGZvcm1hdFVUQ0Z1bGxZZWFySVNPLFxuICAgIFwiSFwiOiBmb3JtYXRVVENIb3VyMjQsXG4gICAgXCJJXCI6IGZvcm1hdFVUQ0hvdXIxMixcbiAgICBcImpcIjogZm9ybWF0VVRDRGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBmb3JtYXRVVENNaWxsaXNlY29uZHMsXG4gICAgXCJtXCI6IGZvcm1hdFVUQ01vbnRoTnVtYmVyLFxuICAgIFwiTVwiOiBmb3JtYXRVVENNaW51dGVzLFxuICAgIFwicFwiOiBmb3JtYXRVVENQZXJpb2QsXG4gICAgXCJxXCI6IGZvcm1hdFVUQ1F1YXJ0ZXIsXG4gICAgXCJRXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXAsXG4gICAgXCJzXCI6IGZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzLFxuICAgIFwiU1wiOiBmb3JtYXRVVENTZWNvbmRzLFxuICAgIFwidVwiOiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyTW9uZGF5LFxuICAgIFwiVVwiOiBmb3JtYXRVVENXZWVrTnVtYmVyU3VuZGF5LFxuICAgIFwiVlwiOiBmb3JtYXRVVENXZWVrTnVtYmVySVNPLFxuICAgIFwid1wiOiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyU3VuZGF5LFxuICAgIFwiV1wiOiBmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5LFxuICAgIFwieFwiOiBudWxsLFxuICAgIFwiWFwiOiBudWxsLFxuICAgIFwieVwiOiBmb3JtYXRVVENZZWFyLFxuICAgIFwiWVwiOiBmb3JtYXRVVENGdWxsWWVhcixcbiAgICBcIlpcIjogZm9ybWF0VVRDWm9uZSxcbiAgICBcIiVcIjogZm9ybWF0TGl0ZXJhbFBlcmNlbnRcbiAgfTtcblxuICB2YXIgcGFyc2VzID0ge1xuICAgIFwiYVwiOiBwYXJzZVNob3J0V2Vla2RheSxcbiAgICBcIkFcIjogcGFyc2VXZWVrZGF5LFxuICAgIFwiYlwiOiBwYXJzZVNob3J0TW9udGgsXG4gICAgXCJCXCI6IHBhcnNlTW9udGgsXG4gICAgXCJjXCI6IHBhcnNlTG9jYWxlRGF0ZVRpbWUsXG4gICAgXCJkXCI6IHBhcnNlRGF5T2ZNb250aCxcbiAgICBcImVcIjogcGFyc2VEYXlPZk1vbnRoLFxuICAgIFwiZlwiOiBwYXJzZU1pY3Jvc2Vjb25kcyxcbiAgICBcImdcIjogcGFyc2VZZWFyLFxuICAgIFwiR1wiOiBwYXJzZUZ1bGxZZWFyLFxuICAgIFwiSFwiOiBwYXJzZUhvdXIyNCxcbiAgICBcIklcIjogcGFyc2VIb3VyMjQsXG4gICAgXCJqXCI6IHBhcnNlRGF5T2ZZZWFyLFxuICAgIFwiTFwiOiBwYXJzZU1pbGxpc2Vjb25kcyxcbiAgICBcIm1cIjogcGFyc2VNb250aE51bWJlcixcbiAgICBcIk1cIjogcGFyc2VNaW51dGVzLFxuICAgIFwicFwiOiBwYXJzZVBlcmlvZCxcbiAgICBcInFcIjogcGFyc2VRdWFydGVyLFxuICAgIFwiUVwiOiBwYXJzZVVuaXhUaW1lc3RhbXAsXG4gICAgXCJzXCI6IHBhcnNlVW5peFRpbWVzdGFtcFNlY29uZHMsXG4gICAgXCJTXCI6IHBhcnNlU2Vjb25kcyxcbiAgICBcInVcIjogcGFyc2VXZWVrZGF5TnVtYmVyTW9uZGF5LFxuICAgIFwiVVwiOiBwYXJzZVdlZWtOdW1iZXJTdW5kYXksXG4gICAgXCJWXCI6IHBhcnNlV2Vla051bWJlcklTTyxcbiAgICBcIndcIjogcGFyc2VXZWVrZGF5TnVtYmVyU3VuZGF5LFxuICAgIFwiV1wiOiBwYXJzZVdlZWtOdW1iZXJNb25kYXksXG4gICAgXCJ4XCI6IHBhcnNlTG9jYWxlRGF0ZSxcbiAgICBcIlhcIjogcGFyc2VMb2NhbGVUaW1lLFxuICAgIFwieVwiOiBwYXJzZVllYXIsXG4gICAgXCJZXCI6IHBhcnNlRnVsbFllYXIsXG4gICAgXCJaXCI6IHBhcnNlWm9uZSxcbiAgICBcIiVcIjogcGFyc2VMaXRlcmFsUGVyY2VudFxuICB9O1xuXG4gIC8vIFRoZXNlIHJlY3Vyc2l2ZSBkaXJlY3RpdmUgZGVmaW5pdGlvbnMgbXVzdCBiZSBkZWZlcnJlZC5cbiAgZm9ybWF0cy54ID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlLCBmb3JtYXRzKTtcbiAgZm9ybWF0cy5YID0gbmV3Rm9ybWF0KGxvY2FsZV90aW1lLCBmb3JtYXRzKTtcbiAgZm9ybWF0cy5jID0gbmV3Rm9ybWF0KGxvY2FsZV9kYXRlVGltZSwgZm9ybWF0cyk7XG4gIHV0Y0Zvcm1hdHMueCA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZSwgdXRjRm9ybWF0cyk7XG4gIHV0Y0Zvcm1hdHMuWCA9IG5ld0Zvcm1hdChsb2NhbGVfdGltZSwgdXRjRm9ybWF0cyk7XG4gIHV0Y0Zvcm1hdHMuYyA9IG5ld0Zvcm1hdChsb2NhbGVfZGF0ZVRpbWUsIHV0Y0Zvcm1hdHMpO1xuXG4gIGZ1bmN0aW9uIG5ld0Zvcm1hdChzcGVjaWZpZXIsIGZvcm1hdHMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24oZGF0ZSkge1xuICAgICAgdmFyIHN0cmluZyA9IFtdLFxuICAgICAgICAgIGkgPSAtMSxcbiAgICAgICAgICBqID0gMCxcbiAgICAgICAgICBuID0gc3BlY2lmaWVyLmxlbmd0aCxcbiAgICAgICAgICBjLFxuICAgICAgICAgIHBhZCxcbiAgICAgICAgICBmb3JtYXQ7XG5cbiAgICAgIGlmICghKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSkgZGF0ZSA9IG5ldyBEYXRlKCtkYXRlKTtcblxuICAgICAgd2hpbGUgKCsraSA8IG4pIHtcbiAgICAgICAgaWYgKHNwZWNpZmllci5jaGFyQ29kZUF0KGkpID09PSAzNykge1xuICAgICAgICAgIHN0cmluZy5wdXNoKHNwZWNpZmllci5zbGljZShqLCBpKSk7XG4gICAgICAgICAgaWYgKChwYWQgPSBwYWRzW2MgPSBzcGVjaWZpZXIuY2hhckF0KCsraSldKSAhPSBudWxsKSBjID0gc3BlY2lmaWVyLmNoYXJBdCgrK2kpO1xuICAgICAgICAgIGVsc2UgcGFkID0gYyA9PT0gXCJlXCIgPyBcIiBcIiA6IFwiMFwiO1xuICAgICAgICAgIGlmIChmb3JtYXQgPSBmb3JtYXRzW2NdKSBjID0gZm9ybWF0KGRhdGUsIHBhZCk7XG4gICAgICAgICAgc3RyaW5nLnB1c2goYyk7XG4gICAgICAgICAgaiA9IGkgKyAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHN0cmluZy5wdXNoKHNwZWNpZmllci5zbGljZShqLCBpKSk7XG4gICAgICByZXR1cm4gc3RyaW5nLmpvaW4oXCJcIik7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5ld1BhcnNlKHNwZWNpZmllciwgWikge1xuICAgIHJldHVybiBmdW5jdGlvbihzdHJpbmcpIHtcbiAgICAgIHZhciBkID0gbmV3RGF0ZSgxOTAwLCB1bmRlZmluZWQsIDEpLFxuICAgICAgICAgIGkgPSBwYXJzZVNwZWNpZmllcihkLCBzcGVjaWZpZXIsIHN0cmluZyArPSBcIlwiLCAwKSxcbiAgICAgICAgICB3ZWVrLCBkYXk7XG4gICAgICBpZiAoaSAhPSBzdHJpbmcubGVuZ3RoKSByZXR1cm4gbnVsbDtcblxuICAgICAgLy8gSWYgYSBVTklYIHRpbWVzdGFtcCBpcyBzcGVjaWZpZWQsIHJldHVybiBpdC5cbiAgICAgIGlmIChcIlFcIiBpbiBkKSByZXR1cm4gbmV3IERhdGUoZC5RKTtcbiAgICAgIGlmIChcInNcIiBpbiBkKSByZXR1cm4gbmV3IERhdGUoZC5zICogMTAwMCArIChcIkxcIiBpbiBkID8gZC5MIDogMCkpO1xuXG4gICAgICAvLyBJZiB0aGlzIGlzIHV0Y1BhcnNlLCBuZXZlciB1c2UgdGhlIGxvY2FsIHRpbWV6b25lLlxuICAgICAgaWYgKFogJiYgIShcIlpcIiBpbiBkKSkgZC5aID0gMDtcblxuICAgICAgLy8gVGhlIGFtLXBtIGZsYWcgaXMgMCBmb3IgQU0sIGFuZCAxIGZvciBQTS5cbiAgICAgIGlmIChcInBcIiBpbiBkKSBkLkggPSBkLkggJSAxMiArIGQucCAqIDEyO1xuXG4gICAgICAvLyBJZiB0aGUgbW9udGggd2FzIG5vdCBzcGVjaWZpZWQsIGluaGVyaXQgZnJvbSB0aGUgcXVhcnRlci5cbiAgICAgIGlmIChkLm0gPT09IHVuZGVmaW5lZCkgZC5tID0gXCJxXCIgaW4gZCA/IGQucSA6IDA7XG5cbiAgICAgIC8vIENvbnZlcnQgZGF5LW9mLXdlZWsgYW5kIHdlZWstb2YteWVhciB0byBkYXktb2YteWVhci5cbiAgICAgIGlmIChcIlZcIiBpbiBkKSB7XG4gICAgICAgIGlmIChkLlYgPCAxIHx8IGQuViA+IDUzKSByZXR1cm4gbnVsbDtcbiAgICAgICAgaWYgKCEoXCJ3XCIgaW4gZCkpIGQudyA9IDE7XG4gICAgICAgIGlmIChcIlpcIiBpbiBkKSB7XG4gICAgICAgICAgd2VlayA9IHV0Y0RhdGUobmV3RGF0ZShkLnksIDAsIDEpKSwgZGF5ID0gd2Vlay5nZXRVVENEYXkoKTtcbiAgICAgICAgICB3ZWVrID0gZGF5ID4gNCB8fCBkYXkgPT09IDAgPyB1dGNNb25kYXkuY2VpbCh3ZWVrKSA6IHV0Y01vbmRheSh3ZWVrKTtcbiAgICAgICAgICB3ZWVrID0gdXRjRGF5Lm9mZnNldCh3ZWVrLCAoZC5WIC0gMSkgKiA3KTtcbiAgICAgICAgICBkLnkgPSB3ZWVrLmdldFVUQ0Z1bGxZZWFyKCk7XG4gICAgICAgICAgZC5tID0gd2Vlay5nZXRVVENNb250aCgpO1xuICAgICAgICAgIGQuZCA9IHdlZWsuZ2V0VVRDRGF0ZSgpICsgKGQudyArIDYpICUgNztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB3ZWVrID0gbG9jYWxEYXRlKG5ld0RhdGUoZC55LCAwLCAxKSksIGRheSA9IHdlZWsuZ2V0RGF5KCk7XG4gICAgICAgICAgd2VlayA9IGRheSA+IDQgfHwgZGF5ID09PSAwID8gdGltZU1vbmRheS5jZWlsKHdlZWspIDogdGltZU1vbmRheSh3ZWVrKTtcbiAgICAgICAgICB3ZWVrID0gdGltZURheS5vZmZzZXQod2VlaywgKGQuViAtIDEpICogNyk7XG4gICAgICAgICAgZC55ID0gd2Vlay5nZXRGdWxsWWVhcigpO1xuICAgICAgICAgIGQubSA9IHdlZWsuZ2V0TW9udGgoKTtcbiAgICAgICAgICBkLmQgPSB3ZWVrLmdldERhdGUoKSArIChkLncgKyA2KSAlIDc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoXCJXXCIgaW4gZCB8fCBcIlVcIiBpbiBkKSB7XG4gICAgICAgIGlmICghKFwid1wiIGluIGQpKSBkLncgPSBcInVcIiBpbiBkID8gZC51ICUgNyA6IFwiV1wiIGluIGQgPyAxIDogMDtcbiAgICAgICAgZGF5ID0gXCJaXCIgaW4gZCA/IHV0Y0RhdGUobmV3RGF0ZShkLnksIDAsIDEpKS5nZXRVVENEYXkoKSA6IGxvY2FsRGF0ZShuZXdEYXRlKGQueSwgMCwgMSkpLmdldERheSgpO1xuICAgICAgICBkLm0gPSAwO1xuICAgICAgICBkLmQgPSBcIldcIiBpbiBkID8gKGQudyArIDYpICUgNyArIGQuVyAqIDcgLSAoZGF5ICsgNSkgJSA3IDogZC53ICsgZC5VICogNyAtIChkYXkgKyA2KSAlIDc7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIGEgdGltZSB6b25lIGlzIHNwZWNpZmllZCwgYWxsIGZpZWxkcyBhcmUgaW50ZXJwcmV0ZWQgYXMgVVRDIGFuZCB0aGVuXG4gICAgICAvLyBvZmZzZXQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgdGltZSB6b25lLlxuICAgICAgaWYgKFwiWlwiIGluIGQpIHtcbiAgICAgICAgZC5IICs9IGQuWiAvIDEwMCB8IDA7XG4gICAgICAgIGQuTSArPSBkLlogJSAxMDA7XG4gICAgICAgIHJldHVybiB1dGNEYXRlKGQpO1xuICAgICAgfVxuXG4gICAgICAvLyBPdGhlcndpc2UsIGFsbCBmaWVsZHMgYXJlIGluIGxvY2FsIHRpbWUuXG4gICAgICByZXR1cm4gbG9jYWxEYXRlKGQpO1xuICAgIH07XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNwZWNpZmllcihkLCBzcGVjaWZpZXIsIHN0cmluZywgaikge1xuICAgIHZhciBpID0gMCxcbiAgICAgICAgbiA9IHNwZWNpZmllci5sZW5ndGgsXG4gICAgICAgIG0gPSBzdHJpbmcubGVuZ3RoLFxuICAgICAgICBjLFxuICAgICAgICBwYXJzZTtcblxuICAgIHdoaWxlIChpIDwgbikge1xuICAgICAgaWYgKGogPj0gbSkgcmV0dXJuIC0xO1xuICAgICAgYyA9IHNwZWNpZmllci5jaGFyQ29kZUF0KGkrKyk7XG4gICAgICBpZiAoYyA9PT0gMzcpIHtcbiAgICAgICAgYyA9IHNwZWNpZmllci5jaGFyQXQoaSsrKTtcbiAgICAgICAgcGFyc2UgPSBwYXJzZXNbYyBpbiBwYWRzID8gc3BlY2lmaWVyLmNoYXJBdChpKyspIDogY107XG4gICAgICAgIGlmICghcGFyc2UgfHwgKChqID0gcGFyc2UoZCwgc3RyaW5nLCBqKSkgPCAwKSkgcmV0dXJuIC0xO1xuICAgICAgfSBlbHNlIGlmIChjICE9IHN0cmluZy5jaGFyQ29kZUF0KGorKykpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBqO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VQZXJpb2QoZCwgc3RyaW5nLCBpKSB7XG4gICAgdmFyIG4gPSBwZXJpb2RSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5wID0gcGVyaW9kTG9va3VwLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZVNob3J0V2Vla2RheShkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHNob3J0V2Vla2RheVJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLncgPSBzaG9ydFdlZWtkYXlMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlV2Vla2RheShkLCBzdHJpbmcsIGkpIHtcbiAgICB2YXIgbiA9IHdlZWtkYXlSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC53ID0gd2Vla2RheUxvb2t1cC5nZXQoblswXS50b0xvd2VyQ2FzZSgpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gcGFyc2VTaG9ydE1vbnRoKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gc2hvcnRNb250aFJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgICByZXR1cm4gbiA/IChkLm0gPSBzaG9ydE1vbnRoTG9va3VwLmdldChuWzBdLnRvTG93ZXJDYXNlKCkpLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZU1vbnRoKGQsIHN0cmluZywgaSkge1xuICAgIHZhciBuID0gbW9udGhSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gICAgcmV0dXJuIG4gPyAoZC5tID0gbW9udGhMb29rdXAuZ2V0KG5bMF0udG9Mb3dlckNhc2UoKSksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9jYWxlRGF0ZVRpbWUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV9kYXRlVGltZSwgc3RyaW5nLCBpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBhcnNlTG9jYWxlRGF0ZShkLCBzdHJpbmcsIGkpIHtcbiAgICByZXR1cm4gcGFyc2VTcGVjaWZpZXIoZCwgbG9jYWxlX2RhdGUsIHN0cmluZywgaSk7XG4gIH1cblxuICBmdW5jdGlvbiBwYXJzZUxvY2FsZVRpbWUoZCwgc3RyaW5nLCBpKSB7XG4gICAgcmV0dXJuIHBhcnNlU3BlY2lmaWVyKGQsIGxvY2FsZV90aW1lLCBzdHJpbmcsIGkpO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0U2hvcnRXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3Nob3J0V2Vla2RheXNbZC5nZXREYXkoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRXZWVrZGF5KGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3dlZWtkYXlzW2QuZ2V0RGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0U2hvcnRNb250aChkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydE1vbnRoc1tkLmdldE1vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfbW9udGhzW2QuZ2V0TW9udGgoKV07XG4gIH1cblxuICBmdW5jdGlvbiBmb3JtYXRQZXJpb2QoZCkge1xuICAgIHJldHVybiBsb2NhbGVfcGVyaW9kc1srKGQuZ2V0SG91cnMoKSA+PSAxMildO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0UXVhcnRlcihkKSB7XG4gICAgcmV0dXJuIDEgKyB+fihkLmdldE1vbnRoKCkgLyAzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0V2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV9zaG9ydFdlZWtkYXlzW2QuZ2V0VVRDRGF5KCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDV2Vla2RheShkKSB7XG4gICAgcmV0dXJuIGxvY2FsZV93ZWVrZGF5c1tkLmdldFVUQ0RheSgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1Nob3J0TW9udGgoZCkge1xuICAgIHJldHVybiBsb2NhbGVfc2hvcnRNb250aHNbZC5nZXRVVENNb250aCgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ01vbnRoKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX21vbnRoc1tkLmdldFVUQ01vbnRoKCldO1xuICB9XG5cbiAgZnVuY3Rpb24gZm9ybWF0VVRDUGVyaW9kKGQpIHtcbiAgICByZXR1cm4gbG9jYWxlX3BlcmlvZHNbKyhkLmdldFVUQ0hvdXJzKCkgPj0gMTIpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZvcm1hdFVUQ1F1YXJ0ZXIoZCkge1xuICAgIHJldHVybiAxICsgfn4oZC5nZXRVVENNb250aCgpIC8gMyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGZvcm1hdDogZnVuY3Rpb24oc3BlY2lmaWVyKSB7XG4gICAgICB2YXIgZiA9IG5ld0Zvcm1hdChzcGVjaWZpZXIgKz0gXCJcIiwgZm9ybWF0cyk7XG4gICAgICBmLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gZjtcbiAgICB9LFxuICAgIHBhcnNlOiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBwID0gbmV3UGFyc2Uoc3BlY2lmaWVyICs9IFwiXCIsIGZhbHNlKTtcbiAgICAgIHAudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBwO1xuICAgIH0sXG4gICAgdXRjRm9ybWF0OiBmdW5jdGlvbihzcGVjaWZpZXIpIHtcbiAgICAgIHZhciBmID0gbmV3Rm9ybWF0KHNwZWNpZmllciArPSBcIlwiLCB1dGNGb3JtYXRzKTtcbiAgICAgIGYudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHNwZWNpZmllcjsgfTtcbiAgICAgIHJldHVybiBmO1xuICAgIH0sXG4gICAgdXRjUGFyc2U6IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICAgICAgdmFyIHAgPSBuZXdQYXJzZShzcGVjaWZpZXIgKz0gXCJcIiwgdHJ1ZSk7XG4gICAgICBwLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7IHJldHVybiBzcGVjaWZpZXI7IH07XG4gICAgICByZXR1cm4gcDtcbiAgICB9XG4gIH07XG59XG5cbnZhciBwYWRzID0ge1wiLVwiOiBcIlwiLCBcIl9cIjogXCIgXCIsIFwiMFwiOiBcIjBcIn0sXG4gICAgbnVtYmVyUmUgPSAvXlxccypcXGQrLywgLy8gbm90ZTogaWdub3JlcyBuZXh0IGRpcmVjdGl2ZVxuICAgIHBlcmNlbnRSZSA9IC9eJS8sXG4gICAgcmVxdW90ZVJlID0gL1tcXFxcXiQqKz98W1xcXSgpLnt9XS9nO1xuXG5mdW5jdGlvbiBwYWQodmFsdWUsIGZpbGwsIHdpZHRoKSB7XG4gIHZhciBzaWduID0gdmFsdWUgPCAwID8gXCItXCIgOiBcIlwiLFxuICAgICAgc3RyaW5nID0gKHNpZ24gPyAtdmFsdWUgOiB2YWx1ZSkgKyBcIlwiLFxuICAgICAgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcbiAgcmV0dXJuIHNpZ24gKyAobGVuZ3RoIDwgd2lkdGggPyBuZXcgQXJyYXkod2lkdGggLSBsZW5ndGggKyAxKS5qb2luKGZpbGwpICsgc3RyaW5nIDogc3RyaW5nKTtcbn1cblxuZnVuY3Rpb24gcmVxdW90ZShzKSB7XG4gIHJldHVybiBzLnJlcGxhY2UocmVxdW90ZVJlLCBcIlxcXFwkJlwiKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0UmUobmFtZXMpIHtcbiAgcmV0dXJuIG5ldyBSZWdFeHAoXCJeKD86XCIgKyBuYW1lcy5tYXAocmVxdW90ZSkuam9pbihcInxcIikgKyBcIilcIiwgXCJpXCIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRMb29rdXAobmFtZXMpIHtcbiAgcmV0dXJuIG5ldyBNYXAobmFtZXMubWFwKChuYW1lLCBpKSA9PiBbbmFtZS50b0xvd2VyQ2FzZSgpLCBpXSkpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtkYXlOdW1iZXJTdW5kYXkoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcbiAgcmV0dXJuIG4gPyAoZC53ID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrZGF5TnVtYmVyTW9uZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAxKSk7XG4gIHJldHVybiBuID8gKGQudSA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlV2Vla051bWJlclN1bmRheShkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLlUgPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVdlZWtOdW1iZXJJU08oZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5WID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VXZWVrTnVtYmVyTW9uZGF5KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuVyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRnVsbFllYXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDQpKTtcbiAgcmV0dXJuIG4gPyAoZC55ID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VZZWFyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQueSA9ICtuWzBdICsgKCtuWzBdID4gNjggPyAxOTAwIDogMjAwMCksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2Vab25lKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IC9eKFopfChbKy1dXFxkXFxkKSg/Ojo/KFxcZFxcZCkpPy8uZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDYpKTtcbiAgcmV0dXJuIG4gPyAoZC5aID0gblsxXSA/IDAgOiAtKG5bMl0gKyAoblszXSB8fCBcIjAwXCIpKSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVF1YXJ0ZXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcbiAgcmV0dXJuIG4gPyAoZC5xID0gblswXSAqIDMgLSAzLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTW9udGhOdW1iZXIoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5tID0gblswXSAtIDEsIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VEYXlPZk1vbnRoKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuZCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRGF5T2ZZZWFyKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAzKSk7XG4gIHJldHVybiBuID8gKGQubSA9IDAsIGQuZCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlSG91cjI0KGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGksIGkgKyAyKSk7XG4gIHJldHVybiBuID8gKGQuSCA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIHBhcnNlTWludXRlcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpLCBpICsgMikpO1xuICByZXR1cm4gbiA/IChkLk0gPSArblswXSwgaSArIG5bMF0ubGVuZ3RoKSA6IC0xO1xufVxuXG5mdW5jdGlvbiBwYXJzZVNlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDIpKTtcbiAgcmV0dXJuIG4gPyAoZC5TID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNaWxsaXNlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDMpKTtcbiAgcmV0dXJuIG4gPyAoZC5MID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VNaWNyb3NlY29uZHMoZCwgc3RyaW5nLCBpKSB7XG4gIHZhciBuID0gbnVtYmVyUmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDYpKTtcbiAgcmV0dXJuIG4gPyAoZC5MID0gTWF0aC5mbG9vcihuWzBdIC8gMTAwMCksIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VMaXRlcmFsUGVyY2VudChkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBwZXJjZW50UmUuZXhlYyhzdHJpbmcuc2xpY2UoaSwgaSArIDEpKTtcbiAgcmV0dXJuIG4gPyBpICsgblswXS5sZW5ndGggOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VVbml4VGltZXN0YW1wKGQsIHN0cmluZywgaSkge1xuICB2YXIgbiA9IG51bWJlclJlLmV4ZWMoc3RyaW5nLnNsaWNlKGkpKTtcbiAgcmV0dXJuIG4gPyAoZC5RID0gK25bMF0sIGkgKyBuWzBdLmxlbmd0aCkgOiAtMTtcbn1cblxuZnVuY3Rpb24gcGFyc2VVbml4VGltZXN0YW1wU2Vjb25kcyhkLCBzdHJpbmcsIGkpIHtcbiAgdmFyIG4gPSBudW1iZXJSZS5leGVjKHN0cmluZy5zbGljZShpKSk7XG4gIHJldHVybiBuID8gKGQucyA9ICtuWzBdLCBpICsgblswXS5sZW5ndGgpIDogLTE7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdERheU9mTW9udGgoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0RGF0ZSgpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0SG91cjI0KGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEhvdXJzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRIb3VyMTIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0SG91cnMoKSAlIDEyIHx8IDEyLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RGF5T2ZZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZCgxICsgdGltZURheS5jb3VudCh0aW1lWWVhcihkKSwgZCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNaWxsaXNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0TWlsbGlzZWNvbmRzKCksIHAsIDMpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNaWNyb3NlY29uZHMoZCwgcCkge1xuICByZXR1cm4gZm9ybWF0TWlsbGlzZWNvbmRzKGQsIHApICsgXCIwMDBcIjtcbn1cblxuZnVuY3Rpb24gZm9ybWF0TW9udGhOdW1iZXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0TW9udGgoKSArIDEsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRNaW51dGVzKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldE1pbnV0ZXMoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFNlY29uZHMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0U2Vjb25kcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla2RheU51bWJlck1vbmRheShkKSB7XG4gIHZhciBkYXkgPSBkLmdldERheSgpO1xuICByZXR1cm4gZGF5ID09PSAwID8gNyA6IGRheTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlclN1bmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodGltZVN1bmRheS5jb3VudCh0aW1lWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZElTTyhkKSB7XG4gIHZhciBkYXkgPSBkLmdldERheSgpO1xuICByZXR1cm4gKGRheSA+PSA0IHx8IGRheSA9PT0gMCkgPyB0aW1lVGh1cnNkYXkoZCkgOiB0aW1lVGh1cnNkYXkuY2VpbChkKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla051bWJlcklTTyhkLCBwKSB7XG4gIGQgPSBkSVNPKGQpO1xuICByZXR1cm4gcGFkKHRpbWVUaHVyc2RheS5jb3VudCh0aW1lWWVhcihkKSwgZCkgKyAodGltZVllYXIoZCkuZ2V0RGF5KCkgPT09IDQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0V2Vla2RheU51bWJlclN1bmRheShkKSB7XG4gIHJldHVybiBkLmdldERheSgpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRXZWVrTnVtYmVyTW9uZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh0aW1lTW9uZGF5LmNvdW50KHRpbWVZZWFyKGQpIC0gMSwgZCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRZZWFyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldEZ1bGxZZWFyKCkgJSAxMDAsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRZZWFySVNPKGQsIHApIHtcbiAgZCA9IGRJU08oZCk7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RnVsbFllYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0RnVsbFllYXIoKSAlIDEwMDAwLCBwLCA0KTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0RnVsbFllYXJJU08oZCwgcCkge1xuICB2YXIgZGF5ID0gZC5nZXREYXkoKTtcbiAgZCA9IChkYXkgPj0gNCB8fCBkYXkgPT09IDApID8gdGltZVRodXJzZGF5KGQpIDogdGltZVRodXJzZGF5LmNlaWwoZCk7XG4gIHJldHVybiBwYWQoZC5nZXRGdWxsWWVhcigpICUgMTAwMDAsIHAsIDQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRab25lKGQpIHtcbiAgdmFyIHogPSBkLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHJldHVybiAoeiA+IDAgPyBcIi1cIiA6ICh6ICo9IC0xLCBcIitcIikpXG4gICAgICArIHBhZCh6IC8gNjAgfCAwLCBcIjBcIiwgMilcbiAgICAgICsgcGFkKHogJSA2MCwgXCIwXCIsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENEYXlPZk1vbnRoKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0RhdGUoKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0hvdXIyNChkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENIb3VycygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDSG91cjEyKGQsIHApIHtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0hvdXJzKCkgJSAxMiB8fCAxMiwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ0RheU9mWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoMSArIHV0Y0RheS5jb3VudCh1dGNZZWFyKGQpLCBkKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ01pbGxpc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENNaWxsaXNlY29uZHMoKSwgcCwgMyk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ01pY3Jvc2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBmb3JtYXRVVENNaWxsaXNlY29uZHMoZCwgcCkgKyBcIjAwMFwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENNb250aE51bWJlcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENNb250aCgpICsgMSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ01pbnV0ZXMoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDTWludXRlcygpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDU2Vjb25kcyhkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENTZWNvbmRzKCksIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrZGF5TnVtYmVyTW9uZGF5KGQpIHtcbiAgdmFyIGRvdyA9IGQuZ2V0VVRDRGF5KCk7XG4gIHJldHVybiBkb3cgPT09IDAgPyA3IDogZG93O1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENXZWVrTnVtYmVyU3VuZGF5KGQsIHApIHtcbiAgcmV0dXJuIHBhZCh1dGNTdW5kYXkuY291bnQodXRjWWVhcihkKSAtIDEsIGQpLCBwLCAyKTtcbn1cblxuZnVuY3Rpb24gVVRDZElTTyhkKSB7XG4gIHZhciBkYXkgPSBkLmdldFVUQ0RheSgpO1xuICByZXR1cm4gKGRheSA+PSA0IHx8IGRheSA9PT0gMCkgPyB1dGNUaHVyc2RheShkKSA6IHV0Y1RodXJzZGF5LmNlaWwoZCk7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtOdW1iZXJJU08oZCwgcCkge1xuICBkID0gVVRDZElTTyhkKTtcbiAgcmV0dXJuIHBhZCh1dGNUaHVyc2RheS5jb3VudCh1dGNZZWFyKGQpLCBkKSArICh1dGNZZWFyKGQpLmdldFVUQ0RheSgpID09PSA0KSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJTdW5kYXkoZCkge1xuICByZXR1cm4gZC5nZXRVVENEYXkoKTtcbn1cblxuZnVuY3Rpb24gZm9ybWF0VVRDV2Vla051bWJlck1vbmRheShkLCBwKSB7XG4gIHJldHVybiBwYWQodXRjTW9uZGF5LmNvdW50KHV0Y1llYXIoZCkgLSAxLCBkKSwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1llYXIoZCwgcCkge1xuICByZXR1cm4gcGFkKGQuZ2V0VVRDRnVsbFllYXIoKSAlIDEwMCwgcCwgMik7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdFVUQ1llYXJJU08oZCwgcCkge1xuICBkID0gVVRDZElTTyhkKTtcbiAgcmV0dXJuIHBhZChkLmdldFVUQ0Z1bGxZZWFyKCkgJSAxMDAsIHAsIDIpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENGdWxsWWVhcihkLCBwKSB7XG4gIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwMDAsIHAsIDQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENGdWxsWWVhcklTTyhkLCBwKSB7XG4gIHZhciBkYXkgPSBkLmdldFVUQ0RheSgpO1xuICBkID0gKGRheSA+PSA0IHx8IGRheSA9PT0gMCkgPyB1dGNUaHVyc2RheShkKSA6IHV0Y1RodXJzZGF5LmNlaWwoZCk7XG4gIHJldHVybiBwYWQoZC5nZXRVVENGdWxsWWVhcigpICUgMTAwMDAsIHAsIDQpO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVVENab25lKCkge1xuICByZXR1cm4gXCIrMDAwMFwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRMaXRlcmFsUGVyY2VudCgpIHtcbiAgcmV0dXJuIFwiJVwiO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVbml4VGltZXN0YW1wKGQpIHtcbiAgcmV0dXJuICtkO1xufVxuXG5mdW5jdGlvbiBmb3JtYXRVbml4VGltZXN0YW1wU2Vjb25kcyhkKSB7XG4gIHJldHVybiBNYXRoLmZsb29yKCtkIC8gMTAwMCk7XG59XG4iLCJpbXBvcnQgZm9ybWF0TG9jYWxlIGZyb20gXCIuL2xvY2FsZS5qc1wiO1xuXG52YXIgbG9jYWxlO1xuZXhwb3J0IHZhciB0aW1lRm9ybWF0O1xuZXhwb3J0IHZhciB0aW1lUGFyc2U7XG5leHBvcnQgdmFyIHV0Y0Zvcm1hdDtcbmV4cG9ydCB2YXIgdXRjUGFyc2U7XG5cbmRlZmF1bHRMb2NhbGUoe1xuICBkYXRlVGltZTogXCIleCwgJVhcIixcbiAgZGF0ZTogXCIlLW0vJS1kLyVZXCIsXG4gIHRpbWU6IFwiJS1JOiVNOiVTICVwXCIsXG4gIHBlcmlvZHM6IFtcIkFNXCIsIFwiUE1cIl0sXG4gIGRheXM6IFtcIlN1bmRheVwiLCBcIk1vbmRheVwiLCBcIlR1ZXNkYXlcIiwgXCJXZWRuZXNkYXlcIiwgXCJUaHVyc2RheVwiLCBcIkZyaWRheVwiLCBcIlNhdHVyZGF5XCJdLFxuICBzaG9ydERheXM6IFtcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXSxcbiAgbW9udGhzOiBbXCJKYW51YXJ5XCIsIFwiRmVicnVhcnlcIiwgXCJNYXJjaFwiLCBcIkFwcmlsXCIsIFwiTWF5XCIsIFwiSnVuZVwiLCBcIkp1bHlcIiwgXCJBdWd1c3RcIiwgXCJTZXB0ZW1iZXJcIiwgXCJPY3RvYmVyXCIsIFwiTm92ZW1iZXJcIiwgXCJEZWNlbWJlclwiXSxcbiAgc2hvcnRNb250aHM6IFtcIkphblwiLCBcIkZlYlwiLCBcIk1hclwiLCBcIkFwclwiLCBcIk1heVwiLCBcIkp1blwiLCBcIkp1bFwiLCBcIkF1Z1wiLCBcIlNlcFwiLCBcIk9jdFwiLCBcIk5vdlwiLCBcIkRlY1wiXVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlZmF1bHRMb2NhbGUoZGVmaW5pdGlvbikge1xuICBsb2NhbGUgPSBmb3JtYXRMb2NhbGUoZGVmaW5pdGlvbik7XG4gIHRpbWVGb3JtYXQgPSBsb2NhbGUuZm9ybWF0O1xuICB0aW1lUGFyc2UgPSBsb2NhbGUucGFyc2U7XG4gIHV0Y0Zvcm1hdCA9IGxvY2FsZS51dGNGb3JtYXQ7XG4gIHV0Y1BhcnNlID0gbG9jYWxlLnV0Y1BhcnNlO1xuICByZXR1cm4gbG9jYWxlO1xufVxuIiwiaW1wb3J0IHt0aW1lWWVhciwgdGltZU1vbnRoLCB0aW1lV2VlaywgdGltZURheSwgdGltZUhvdXIsIHRpbWVNaW51dGUsIHRpbWVTZWNvbmQsIHRpbWVUaWNrcywgdGltZVRpY2tJbnRlcnZhbH0gZnJvbSBcImQzLXRpbWVcIjtcbmltcG9ydCB7dGltZUZvcm1hdH0gZnJvbSBcImQzLXRpbWUtZm9ybWF0XCI7XG5pbXBvcnQgY29udGludW91cywge2NvcHl9IGZyb20gXCIuL2NvbnRpbnVvdXMuanNcIjtcbmltcG9ydCB7aW5pdFJhbmdlfSBmcm9tIFwiLi9pbml0LmpzXCI7XG5pbXBvcnQgbmljZSBmcm9tIFwiLi9uaWNlLmpzXCI7XG5cbmZ1bmN0aW9uIGRhdGUodCkge1xuICByZXR1cm4gbmV3IERhdGUodCk7XG59XG5cbmZ1bmN0aW9uIG51bWJlcih0KSB7XG4gIHJldHVybiB0IGluc3RhbmNlb2YgRGF0ZSA/ICt0IDogK25ldyBEYXRlKCt0KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNhbGVuZGFyKHRpY2tzLCB0aWNrSW50ZXJ2YWwsIHllYXIsIG1vbnRoLCB3ZWVrLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmb3JtYXQpIHtcbiAgdmFyIHNjYWxlID0gY29udGludW91cygpLFxuICAgICAgaW52ZXJ0ID0gc2NhbGUuaW52ZXJ0LFxuICAgICAgZG9tYWluID0gc2NhbGUuZG9tYWluO1xuXG4gIHZhciBmb3JtYXRNaWxsaXNlY29uZCA9IGZvcm1hdChcIi4lTFwiKSxcbiAgICAgIGZvcm1hdFNlY29uZCA9IGZvcm1hdChcIjolU1wiKSxcbiAgICAgIGZvcm1hdE1pbnV0ZSA9IGZvcm1hdChcIiVJOiVNXCIpLFxuICAgICAgZm9ybWF0SG91ciA9IGZvcm1hdChcIiVJICVwXCIpLFxuICAgICAgZm9ybWF0RGF5ID0gZm9ybWF0KFwiJWEgJWRcIiksXG4gICAgICBmb3JtYXRXZWVrID0gZm9ybWF0KFwiJWIgJWRcIiksXG4gICAgICBmb3JtYXRNb250aCA9IGZvcm1hdChcIiVCXCIpLFxuICAgICAgZm9ybWF0WWVhciA9IGZvcm1hdChcIiVZXCIpO1xuXG4gIGZ1bmN0aW9uIHRpY2tGb3JtYXQoZGF0ZSkge1xuICAgIHJldHVybiAoc2Vjb25kKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdE1pbGxpc2Vjb25kXG4gICAgICAgIDogbWludXRlKGRhdGUpIDwgZGF0ZSA/IGZvcm1hdFNlY29uZFxuICAgICAgICA6IGhvdXIoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TWludXRlXG4gICAgICAgIDogZGF5KGRhdGUpIDwgZGF0ZSA/IGZvcm1hdEhvdXJcbiAgICAgICAgOiBtb250aChkYXRlKSA8IGRhdGUgPyAod2VlayhkYXRlKSA8IGRhdGUgPyBmb3JtYXREYXkgOiBmb3JtYXRXZWVrKVxuICAgICAgICA6IHllYXIoZGF0ZSkgPCBkYXRlID8gZm9ybWF0TW9udGhcbiAgICAgICAgOiBmb3JtYXRZZWFyKShkYXRlKTtcbiAgfVxuXG4gIHNjYWxlLmludmVydCA9IGZ1bmN0aW9uKHkpIHtcbiAgICByZXR1cm4gbmV3IERhdGUoaW52ZXJ0KHkpKTtcbiAgfTtcblxuICBzY2FsZS5kb21haW4gPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyBkb21haW4oQXJyYXkuZnJvbShfLCBudW1iZXIpKSA6IGRvbWFpbigpLm1hcChkYXRlKTtcbiAgfTtcblxuICBzY2FsZS50aWNrcyA9IGZ1bmN0aW9uKGludGVydmFsKSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICByZXR1cm4gdGlja3MoZFswXSwgZFtkLmxlbmd0aCAtIDFdLCBpbnRlcnZhbCA9PSBudWxsID8gMTAgOiBpbnRlcnZhbCk7XG4gIH07XG5cbiAgc2NhbGUudGlja0Zvcm1hdCA9IGZ1bmN0aW9uKGNvdW50LCBzcGVjaWZpZXIpIHtcbiAgICByZXR1cm4gc3BlY2lmaWVyID09IG51bGwgPyB0aWNrRm9ybWF0IDogZm9ybWF0KHNwZWNpZmllcik7XG4gIH07XG5cbiAgc2NhbGUubmljZSA9IGZ1bmN0aW9uKGludGVydmFsKSB7XG4gICAgdmFyIGQgPSBkb21haW4oKTtcbiAgICBpZiAoIWludGVydmFsIHx8IHR5cGVvZiBpbnRlcnZhbC5yYW5nZSAhPT0gXCJmdW5jdGlvblwiKSBpbnRlcnZhbCA9IHRpY2tJbnRlcnZhbChkWzBdLCBkW2QubGVuZ3RoIC0gMV0sIGludGVydmFsID09IG51bGwgPyAxMCA6IGludGVydmFsKTtcbiAgICByZXR1cm4gaW50ZXJ2YWwgPyBkb21haW4obmljZShkLCBpbnRlcnZhbCkpIDogc2NhbGU7XG4gIH07XG5cbiAgc2NhbGUuY29weSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBjb3B5KHNjYWxlLCBjYWxlbmRhcih0aWNrcywgdGlja0ludGVydmFsLCB5ZWFyLCBtb250aCwgd2VlaywgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZm9ybWF0KSk7XG4gIH07XG5cbiAgcmV0dXJuIHNjYWxlO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB0aW1lKCkge1xuICByZXR1cm4gaW5pdFJhbmdlLmFwcGx5KGNhbGVuZGFyKHRpbWVUaWNrcywgdGltZVRpY2tJbnRlcnZhbCwgdGltZVllYXIsIHRpbWVNb250aCwgdGltZVdlZWssIHRpbWVEYXksIHRpbWVIb3VyLCB0aW1lTWludXRlLCB0aW1lU2Vjb25kLCB0aW1lRm9ybWF0KS5kb21haW4oW25ldyBEYXRlKDIwMDAsIDAsIDEpLCBuZXcgRGF0ZSgyMDAwLCAwLCAyKV0pLCBhcmd1bWVudHMpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbmljZShkb21haW4sIGludGVydmFsKSB7XG4gIGRvbWFpbiA9IGRvbWFpbi5zbGljZSgpO1xuXG4gIHZhciBpMCA9IDAsXG4gICAgICBpMSA9IGRvbWFpbi5sZW5ndGggLSAxLFxuICAgICAgeDAgPSBkb21haW5baTBdLFxuICAgICAgeDEgPSBkb21haW5baTFdLFxuICAgICAgdDtcblxuICBpZiAoeDEgPCB4MCkge1xuICAgIHQgPSBpMCwgaTAgPSBpMSwgaTEgPSB0O1xuICAgIHQgPSB4MCwgeDAgPSB4MSwgeDEgPSB0O1xuICB9XG5cbiAgZG9tYWluW2kwXSA9IGludGVydmFsLmZsb29yKHgwKTtcbiAgZG9tYWluW2kxXSA9IGludGVydmFsLmNlaWwoeDEpO1xuICByZXR1cm4gZG9tYWluO1xufVxuIiwiaW1wb3J0IHtyZ2IgYXMgY29sb3JSZ2J9IGZyb20gXCJkMy1jb2xvclwiO1xuaW1wb3J0IGJhc2lzIGZyb20gXCIuL2Jhc2lzLmpzXCI7XG5pbXBvcnQgYmFzaXNDbG9zZWQgZnJvbSBcIi4vYmFzaXNDbG9zZWQuanNcIjtcbmltcG9ydCBub2dhbW1hLCB7Z2FtbWF9IGZyb20gXCIuL2NvbG9yLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChmdW5jdGlvbiByZ2JHYW1tYSh5KSB7XG4gIHZhciBjb2xvciA9IGdhbW1hKHkpO1xuXG4gIGZ1bmN0aW9uIHJnYihzdGFydCwgZW5kKSB7XG4gICAgdmFyIHIgPSBjb2xvcigoc3RhcnQgPSBjb2xvclJnYihzdGFydCkpLnIsIChlbmQgPSBjb2xvclJnYihlbmQpKS5yKSxcbiAgICAgICAgZyA9IGNvbG9yKHN0YXJ0LmcsIGVuZC5nKSxcbiAgICAgICAgYiA9IGNvbG9yKHN0YXJ0LmIsIGVuZC5iKSxcbiAgICAgICAgb3BhY2l0eSA9IG5vZ2FtbWEoc3RhcnQub3BhY2l0eSwgZW5kLm9wYWNpdHkpO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBzdGFydC5yID0gcih0KTtcbiAgICAgIHN0YXJ0LmcgPSBnKHQpO1xuICAgICAgc3RhcnQuYiA9IGIodCk7XG4gICAgICBzdGFydC5vcGFjaXR5ID0gb3BhY2l0eSh0KTtcbiAgICAgIHJldHVybiBzdGFydCArIFwiXCI7XG4gICAgfTtcbiAgfVxuXG4gIHJnYi5nYW1tYSA9IHJnYkdhbW1hO1xuXG4gIHJldHVybiByZ2I7XG59KSgxKTtcblxuZnVuY3Rpb24gcmdiU3BsaW5lKHNwbGluZSkge1xuICByZXR1cm4gZnVuY3Rpb24oY29sb3JzKSB7XG4gICAgdmFyIG4gPSBjb2xvcnMubGVuZ3RoLFxuICAgICAgICByID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBnID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBiID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBpLCBjb2xvcjtcbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBjb2xvciA9IGNvbG9yUmdiKGNvbG9yc1tpXSk7XG4gICAgICByW2ldID0gY29sb3IuciB8fCAwO1xuICAgICAgZ1tpXSA9IGNvbG9yLmcgfHwgMDtcbiAgICAgIGJbaV0gPSBjb2xvci5iIHx8IDA7XG4gICAgfVxuICAgIHIgPSBzcGxpbmUocik7XG4gICAgZyA9IHNwbGluZShnKTtcbiAgICBiID0gc3BsaW5lKGIpO1xuICAgIGNvbG9yLm9wYWNpdHkgPSAxO1xuICAgIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgICBjb2xvci5yID0gcih0KTtcbiAgICAgIGNvbG9yLmcgPSBnKHQpO1xuICAgICAgY29sb3IuYiA9IGIodCk7XG4gICAgICByZXR1cm4gY29sb3IgKyBcIlwiO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCB2YXIgcmdiQmFzaXMgPSByZ2JTcGxpbmUoYmFzaXMpO1xuZXhwb3J0IHZhciByZ2JCYXNpc0Nsb3NlZCA9IHJnYlNwbGluZShiYXNpc0Nsb3NlZCk7XG4iLCJleHBvcnQgZnVuY3Rpb24gYmFzaXModDEsIHYwLCB2MSwgdjIsIHYzKSB7XG4gIHZhciB0MiA9IHQxICogdDEsIHQzID0gdDIgKiB0MTtcbiAgcmV0dXJuICgoMSAtIDMgKiB0MSArIDMgKiB0MiAtIHQzKSAqIHYwXG4gICAgICArICg0IC0gNiAqIHQyICsgMyAqIHQzKSAqIHYxXG4gICAgICArICgxICsgMyAqIHQxICsgMyAqIHQyIC0gMyAqIHQzKSAqIHYyXG4gICAgICArIHQzICogdjMpIC8gNjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24odmFsdWVzKSB7XG4gIHZhciBuID0gdmFsdWVzLmxlbmd0aCAtIDE7XG4gIHJldHVybiBmdW5jdGlvbih0KSB7XG4gICAgdmFyIGkgPSB0IDw9IDAgPyAodCA9IDApIDogdCA+PSAxID8gKHQgPSAxLCBuIC0gMSkgOiBNYXRoLmZsb29yKHQgKiBuKSxcbiAgICAgICAgdjEgPSB2YWx1ZXNbaV0sXG4gICAgICAgIHYyID0gdmFsdWVzW2kgKyAxXSxcbiAgICAgICAgdjAgPSBpID4gMCA/IHZhbHVlc1tpIC0gMV0gOiAyICogdjEgLSB2MixcbiAgICAgICAgdjMgPSBpIDwgbiAtIDEgPyB2YWx1ZXNbaSArIDJdIDogMiAqIHYyIC0gdjE7XG4gICAgcmV0dXJuIGJhc2lzKCh0IC0gaSAvIG4pICogbiwgdjAsIHYxLCB2MiwgdjMpO1xuICB9O1xufVxuIiwiaW1wb3J0IGNvbG9ycyBmcm9tIFwiLi4vY29sb3JzLmpzXCI7XG5pbXBvcnQgcmFtcCBmcm9tIFwiLi4vcmFtcC5qc1wiO1xuXG5leHBvcnQgdmFyIHNjaGVtZSA9IG5ldyBBcnJheSgzKS5jb25jYXQoXG4gIFwiZmM4ZDU5ZmZmZmJmOTlkNTk0XCIsXG4gIFwiZDcxOTFjZmRhZTYxYWJkZGE0MmI4M2JhXCIsXG4gIFwiZDcxOTFjZmRhZTYxZmZmZmJmYWJkZGE0MmI4M2JhXCIsXG4gIFwiZDUzZTRmZmM4ZDU5ZmVlMDhiZTZmNTk4OTlkNTk0MzI4OGJkXCIsXG4gIFwiZDUzZTRmZmM4ZDU5ZmVlMDhiZmZmZmJmZTZmNTk4OTlkNTk0MzI4OGJkXCIsXG4gIFwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkXCIsXG4gIFwiZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkXCIsXG4gIFwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyXCIsXG4gIFwiOWUwMTQyZDUzZTRmZjQ2ZDQzZmRhZTYxZmVlMDhiZmZmZmJmZTZmNTk4YWJkZGE0NjZjMmE1MzI4OGJkNWU0ZmEyXCJcbikubWFwKGNvbG9ycyk7XG5cbmV4cG9ydCBkZWZhdWx0IHJhbXAoc2NoZW1lKTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHNwZWNpZmllcikge1xuICB2YXIgbiA9IHNwZWNpZmllci5sZW5ndGggLyA2IHwgMCwgY29sb3JzID0gbmV3IEFycmF5KG4pLCBpID0gMDtcbiAgd2hpbGUgKGkgPCBuKSBjb2xvcnNbaV0gPSBcIiNcIiArIHNwZWNpZmllci5zbGljZShpICogNiwgKytpICogNik7XG4gIHJldHVybiBjb2xvcnM7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiBmdW5jdGlvbiBjb25zdGFudCgpIHtcbiAgICByZXR1cm4geDtcbiAgfTtcbn1cbiIsImltcG9ydCB7aW50ZXJwb2xhdGVSZ2JCYXNpc30gZnJvbSBcImQzLWludGVycG9sYXRlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IHNjaGVtZSA9PiBpbnRlcnBvbGF0ZVJnYkJhc2lzKHNjaGVtZVtzY2hlbWUubGVuZ3RoIC0gMV0pO1xuIiwiZXhwb3J0IHZhciBhYnMgPSBNYXRoLmFicztcbmV4cG9ydCB2YXIgYXRhbjIgPSBNYXRoLmF0YW4yO1xuZXhwb3J0IHZhciBjb3MgPSBNYXRoLmNvcztcbmV4cG9ydCB2YXIgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgdmFyIG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IHZhciBzaW4gPSBNYXRoLnNpbjtcbmV4cG9ydCB2YXIgc3FydCA9IE1hdGguc3FydDtcblxuZXhwb3J0IHZhciBlcHNpbG9uID0gMWUtMTI7XG5leHBvcnQgdmFyIHBpID0gTWF0aC5QSTtcbmV4cG9ydCB2YXIgaGFsZlBpID0gcGkgLyAyO1xuZXhwb3J0IHZhciB0YXUgPSAyICogcGk7XG5cbmV4cG9ydCBmdW5jdGlvbiBhY29zKHgpIHtcbiAgcmV0dXJuIHggPiAxID8gMCA6IHggPCAtMSA/IHBpIDogTWF0aC5hY29zKHgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXNpbih4KSB7XG4gIHJldHVybiB4ID49IDEgPyBoYWxmUGkgOiB4IDw9IC0xID8gLWhhbGZQaSA6IE1hdGguYXNpbih4KTtcbn1cbiIsImltcG9ydCB7IE1vbWVudCB9IGZyb20gXCJtb21lbnRcIjtcclxuXHJcbmV4cG9ydCBlbnVtIFNlYXJjaFR5cGUge1xyXG4gICAgVGFnLFxyXG4gICAgRnJvbnRtYXR0ZXIsXHJcbiAgICBXaWtpLFxyXG4gICAgV2lraUxpbmssXHJcbiAgICBXaWtpRGlzcGxheSxcclxuICAgIFRleHQsXHJcbiAgICBkdkZpZWxkLFxyXG4gICAgVGFibGUsXHJcbiAgICBGaWxlTWV0YSxcclxuICAgIFRhc2ssXHJcbiAgICBUYXNrRG9uZSxcclxuICAgIFRhc2tOb3REb25lLFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBHcmFwaFR5cGUge1xyXG4gICAgTGluZSxcclxuICAgIEJhcixcclxuICAgIFBpZSxcclxuICAgIFJhZGFyLFxyXG4gICAgU3VtbWFyeSxcclxuICAgIFRhYmxlLFxyXG4gICAgTW9udGgsXHJcbiAgICBIZWF0bWFwLFxyXG4gICAgQnVsbGV0LFxyXG4gICAgVW5rbm93bixcclxufVxyXG5cclxuZXhwb3J0IGVudW0gVmFsdWVUeXBlIHtcclxuICAgIE51bWJlcixcclxuICAgIEludCxcclxuICAgIERhdGUsXHJcbiAgICBUaW1lLFxyXG4gICAgRGF0ZVRpbWUsXHJcbiAgICBTdHJpbmcsXHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFRleHRWYWx1ZU1hcCA9IHtcclxuICAgIFtrZXk6IHN0cmluZ106IG51bWJlcjtcclxufTtcclxuXHJcbmV4cG9ydCBjbGFzcyBEYXRhUG9pbnQge1xyXG4gICAgZGF0ZTogTW9tZW50O1xyXG4gICAgdmFsdWU6IG51bWJlcjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihkYXRlOiBNb21lbnQsIHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmRhdGUgPSBkYXRlO1xyXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFF1ZXJ5IHtcclxuICAgIHByaXZhdGUgdHlwZTogU2VhcmNoVHlwZSB8IG51bGw7XHJcbiAgICBwcml2YXRlIHRhcmdldDogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBwYXJlbnRUYXJnZXQ6IHN0cmluZyB8IG51bGw7XHJcbiAgICBwcml2YXRlIHNlcGFyYXRvcjogc3RyaW5nOyAvLyBtdWx0aXBsZSB2YWx1ZSBzZXBhcmF0b3JcclxuICAgIHByaXZhdGUgaWQ6IG51bWJlcjtcclxuICAgIHByaXZhdGUgYWNjZXNzb3I6IG51bWJlcjtcclxuICAgIHByaXZhdGUgYWNjZXNzb3IxOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGFjY2Vzc29yMjogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBudW1UYXJnZXRzOiBudW1iZXI7XHJcblxyXG4gICAgdmFsdWVUeXBlOiBWYWx1ZVR5cGU7XHJcbiAgICB1c2VkQXNYRGF0YXNldDogYm9vbGVhbjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihpZDogbnVtYmVyLCBzZWFyY2hUeXBlOiBTZWFyY2hUeXBlLCBzZWFyY2hUYXJnZXQ6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMudHlwZSA9IHNlYXJjaFR5cGU7XHJcbiAgICAgICAgdGhpcy50YXJnZXQgPSBzZWFyY2hUYXJnZXQ7XHJcbiAgICAgICAgdGhpcy5zZXBhcmF0b3IgPSBcIlwiOyAvLyBzZXBhcmF0b3IgdG8gc2VwYXJhdGUgbXVsdGlwbGUgdmFsdWVzXHJcbiAgICAgICAgdGhpcy5pZCA9IGlkO1xyXG4gICAgICAgIHRoaXMuYWNjZXNzb3IgPSAtMTtcclxuICAgICAgICB0aGlzLmFjY2Vzc29yMSA9IC0xO1xyXG4gICAgICAgIHRoaXMuYWNjZXNzb3IyID0gLTE7XHJcbiAgICAgICAgdGhpcy52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuTnVtYmVyO1xyXG4gICAgICAgIHRoaXMudXNlZEFzWERhdGFzZXQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm51bVRhcmdldHMgPSAwO1xyXG5cclxuICAgICAgICBpZiAoc2VhcmNoVHlwZSA9PT0gU2VhcmNoVHlwZS5UYWJsZSkge1xyXG4gICAgICAgICAgICAvLyBzZWFyY2hUYXJnZXQgLS0+IHt7ZmlsZVBhdGh9fVt7e3RhYmxlfX1dW3t7Y29sdW1ufX1dXHJcbiAgICAgICAgICAgIGxldCBzdHJSZWdleCA9XHJcbiAgICAgICAgICAgICAgICBcIlxcXFxbKD88YWNjZXNzb3I+WzAtOV0rKVxcXFxdXFxcXFsoPzxhY2Nlc3NvcjE+WzAtOV0rKVxcXFxdKFxcXFxbKD88YWNjZXNzb3IyPlswLTldKylcXFxcXSk/XCI7XHJcbiAgICAgICAgICAgIGxldCByZWdleCA9IG5ldyBSZWdFeHAoc3RyUmVnZXgsIFwiZ21cIik7XHJcbiAgICAgICAgICAgIGxldCBtYXRjaDtcclxuICAgICAgICAgICAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWMoc2VhcmNoVGFyZ2V0KSkpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWF0Y2guZ3JvdXBzLmFjY2Vzc29yICE9PSBcInVuZGVmaW5lZFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFjY2Vzc29yID0gcGFyc2VGbG9hdChtYXRjaC5ncm91cHMuYWNjZXNzb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOdW1iZXIoYWNjZXNzb3IpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbWF0Y2guZ3JvdXBzLmFjY2Vzc29yMSAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFjY2Vzc29yMSA9IHBhcnNlRmxvYXQobWF0Y2guZ3JvdXBzLmFjY2Vzc29yMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKGFjY2Vzc29yMSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWNjZXNzb3IyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIG1hdGNoLmdyb3Vwcy5hY2Nlc3NvcjIgIT09XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwidW5kZWZpbmVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzb3IyID0gcGFyc2VGbG9hdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoLmdyb3Vwcy5hY2Nlc3NvcjJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWNjZXNzb3IgPSBhY2Nlc3NvcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjY2Vzc29yMSA9IGFjY2Vzc29yMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKGFjY2Vzc29yMikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hY2Nlc3NvcjIgPSBhY2Nlc3NvcjI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50VGFyZ2V0ID0gc2VhcmNoVGFyZ2V0LnJlcGxhY2UoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IHN0clJlZ2V4ID0gXCJcXFxcWyg/PGFjY2Vzc29yPlswLTldKylcXFxcXVwiO1xyXG4gICAgICAgICAgICBsZXQgcmVnZXggPSBuZXcgUmVnRXhwKHN0clJlZ2V4LCBcImdtXCIpO1xyXG4gICAgICAgICAgICBsZXQgbWF0Y2g7XHJcbiAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHNlYXJjaFRhcmdldCkpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1hdGNoLmdyb3Vwcy5hY2Nlc3NvciAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhY2Nlc3NvciA9IHBhcnNlRmxvYXQobWF0Y2guZ3JvdXBzLmFjY2Vzc29yKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKGFjY2Vzc29yKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFjY2Vzc29yID0gYWNjZXNzb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyZW50VGFyZ2V0ID0gc2VhcmNoVGFyZ2V0LnJlcGxhY2UocmVnZXgsIFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZXF1YWxUbyhvdGhlcjogUXVlcnkpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy50eXBlID09PSBvdGhlci50eXBlICYmIHRoaXMudGFyZ2V0ID09PSBvdGhlci50YXJnZXQpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VHlwZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50eXBlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRUYXJnZXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGFyZ2V0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRQYXJlbnRUYXJnZXQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50VGFyZ2V0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJZCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5pZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QWNjZXNzb3IoaW5kZXggPSAwKSB7XHJcbiAgICAgICAgc3dpdGNoIChpbmRleCkge1xyXG4gICAgICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hY2Nlc3NvcjtcclxuICAgICAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWNjZXNzb3IxO1xyXG4gICAgICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hY2Nlc3NvcjI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0U2VwYXJhdG9yKHNlcDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zZXBhcmF0b3IgPSBzZXA7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFNlcGFyYXRvcihpc0ZvckZyb250bWF0dGVyVGFnczogYm9vbGVhbiA9IGZhbHNlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VwYXJhdG9yID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGlmIChpc0ZvckZyb250bWF0dGVyVGFncykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiLFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBcIi9cIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VwYXJhdG9yO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGROdW1UYXJnZXRzKG51bTogbnVtYmVyID0gMSkge1xyXG4gICAgICAgIHRoaXMubnVtVGFyZ2V0cyA9IHRoaXMubnVtVGFyZ2V0cyArIG51bTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TnVtVGFyZ2V0cygpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5udW1UYXJnZXRzO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5VmFsdWVQYWlyIHtcclxuICAgIHF1ZXJ5OiBRdWVyeTtcclxuICAgIHZhbHVlOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBEYXRhc2V0IGltcGxlbWVudHMgSXRlcmFibGVJdGVyYXRvcjxEYXRhUG9pbnQ+IHtcclxuICAgIC8vIEFycmF5IG9mIERhdGFQb2ludHNcclxuICAgIHByaXZhdGUgbmFtZTogc3RyaW5nO1xyXG4gICAgcHJpdmF0ZSBxdWVyeTogUXVlcnk7XHJcbiAgICBwcml2YXRlIHZhbHVlczogbnVtYmVyW107XHJcbiAgICBwcml2YXRlIHBhcmVudDogRGF0YXNldHM7XHJcbiAgICBwcml2YXRlIGlkOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIHlNaW46IG51bWJlcjtcclxuICAgIHByaXZhdGUgeU1heDogbnVtYmVyO1xyXG4gICAgcHJpdmF0ZSBzdGFydERhdGU6IE1vbWVudDtcclxuICAgIHByaXZhdGUgZW5kRGF0ZTogTW9tZW50O1xyXG4gICAgcHJpdmF0ZSBudW1UYXJnZXRzOiBudW1iZXI7XHJcbiAgICBwcml2YXRlIGxpbmVJbmZvOiBMaW5lSW5mbztcclxuICAgIHByaXZhdGUgYmFySW5mbzogQmFySW5mbztcclxuXHJcbiAgICBwcml2YXRlIGlzVG1wRGF0YXNldDogYm9vbGVhbjtcclxuXHJcbiAgICB2YWx1ZVR5cGU6IFZhbHVlVHlwZTtcclxuXHJcbiAgICBwcml2YXRlIGN1cnJlbnRJbmRleCA9IDA7IC8vIEl0ZXJhYmxlSXRlcmF0b3JcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwYXJlbnQ6IERhdGFzZXRzLCBxdWVyeTogUXVlcnkpIHtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcInVudGl0bGVkXCI7XHJcbiAgICAgICAgdGhpcy5xdWVyeSA9IHF1ZXJ5O1xyXG4gICAgICAgIHRoaXMudmFsdWVzID0gW107XHJcbiAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XHJcbiAgICAgICAgdGhpcy5pZCA9IC0xO1xyXG4gICAgICAgIHRoaXMueU1pbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy55TWF4ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnN0YXJ0RGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5lbmREYXRlID0gbnVsbDtcclxuICAgICAgICB0aGlzLm51bVRhcmdldHMgPSAwO1xyXG4gICAgICAgIHRoaXMubGluZUluZm8gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuYmFySW5mbyA9IG51bGw7XHJcblxyXG4gICAgICAgIHRoaXMuaXNUbXBEYXRhc2V0ID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMudmFsdWVUeXBlID0gcXVlcnk/LnZhbHVlVHlwZTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgcGFyZW50LmdldERhdGVzKCkubGVuZ3RoOyBpbmQrKykge1xyXG4gICAgICAgICAgICB0aGlzLnZhbHVlcy5wdXNoKG51bGwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2xvbmVUb1RtcERhdGFzZXQoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmlzVG1wRGF0YXNldCkge1xyXG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IG5ldyBEYXRhc2V0KHRoaXMucGFyZW50LCBudWxsKTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5uYW1lID0gXCJ0bXBcIjtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC52YWx1ZXMgPSBbLi4udGhpcy52YWx1ZXNdO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LnlNaW4gPSB0aGlzLnlNaW47XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQueU1heCA9IHRoaXMueU1heDtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5zdGFydERhdGUgPSB0aGlzLnN0YXJ0RGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LmVuZERhdGUgPSB0aGlzLmVuZERhdGUuY2xvbmUoKTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5udW1UYXJnZXRzID0gdGhpcy5udW1UYXJnZXRzO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LmlzVG1wRGF0YXNldCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQudmFsdWVUeXBlID0gdGhpcy52YWx1ZVR5cGU7XHJcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpczsgLy8gYWxyZWFkeSB0bXAgZGF0YXNldFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXROYW1lKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldE5hbWUobmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0SWQoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldElkKGlkOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLmlkID0gaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZE51bVRhcmdldHMobnVtOiBudW1iZXIpIHtcclxuICAgICAgICB0aGlzLm51bVRhcmdldHMgPSB0aGlzLm51bVRhcmdldHMgKyBudW07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldE51bVRhcmdldHMoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubnVtVGFyZ2V0cztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VmFsdWUoZGF0ZTogTW9tZW50LCBkYXlTaGlmdDogbnVtYmVyID0gMCkge1xyXG4gICAgICAgIGxldCBpbmQgPSB0aGlzLnBhcmVudC5nZXRJbmRleE9mRGF0ZShkYXRlKSArIE1hdGguZmxvb3IoZGF5U2hpZnQpO1xyXG4gICAgICAgIGlmIChpbmQgPj0gMCAmJiBpbmQgPCB0aGlzLnZhbHVlcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzW2luZF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRWYWx1ZShkYXRlOiBNb21lbnQsIHZhbHVlOiBudW1iZXIpIHtcclxuICAgICAgICBsZXQgaW5kID0gdGhpcy5wYXJlbnQuZ2V0SW5kZXhPZkRhdGUoZGF0ZSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coaW5kKTtcclxuXHJcbiAgICAgICAgaWYgKGluZCA+PSAwICYmIGluZCA8IHRoaXMudmFsdWVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAvLyBTZXQgdmFsdWVcclxuICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kXSA9IHZhbHVlO1xyXG5cclxuICAgICAgICAgICAgLy8gVXBkYXRlIHlNaW4gYW5kIHlNYXhcclxuICAgICAgICAgICAgaWYgKHRoaXMueU1pbiA9PT0gbnVsbCB8fCB2YWx1ZSA8IHRoaXMueU1pbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy55TWluID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMueU1heCA9PT0gbnVsbCB8fCB2YWx1ZSA+IHRoaXMueU1heCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy55TWF4ID0gdmFsdWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIFVwZGF0ZSBzdGFydERhdGUgYW5kIGVuZERhdGVcclxuICAgICAgICAgICAgaWYgKHRoaXMuc3RhcnREYXRlID09PSBudWxsIHx8IGRhdGUgPCB0aGlzLnN0YXJ0RGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdGFydERhdGUgPSBkYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuZW5kRGF0ZSA9PT0gbnVsbCB8fCBkYXRlID4gdGhpcy5lbmREYXRlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuZERhdGUgPSBkYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHJlY2FsY3VsYXRlTWluTWF4KCkge1xyXG4gICAgICAgIHRoaXMueU1pbiA9IE1hdGgubWluKC4uLnRoaXMudmFsdWVzKTtcclxuICAgICAgICB0aGlzLnlNYXggPSBNYXRoLm1heCguLi50aGlzLnZhbHVlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFlNaW4oKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMueU1pbjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0WU1heCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy55TWF4O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTdGFydERhdGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnREYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRFbmREYXRlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmVuZERhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNoaWZ0KHNoaWZ0QW1vdW50OiBudW1iZXIsIGRvTGFyZ2VydGhhbjogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IGFueVNoaWZ0ZWQgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCB0aGlzLnZhbHVlcy5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlc1tpbmRdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZG9MYXJnZXJ0aGFuID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy52YWx1ZXNbaW5kXSA9IHRoaXMudmFsdWVzW2luZF0gKyBzaGlmdEFtb3VudDtcclxuICAgICAgICAgICAgICAgICAgICBhbnlTaGlmdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzW2luZF0gPj0gZG9MYXJnZXJ0aGFuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZF0gPSB0aGlzLnZhbHVlc1tpbmRdICsgc2hpZnRBbW91bnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFueVNoaWZ0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoYW55U2hpZnRlZCkge1xyXG4gICAgICAgICAgICB0aGlzLnlNaW4gPSB0aGlzLnlNaW4gKyBzaGlmdEFtb3VudDtcclxuICAgICAgICAgICAgdGhpcy55TWF4ID0gdGhpcy55TWF4ICsgc2hpZnRBbW91bnQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRQZW5hbHR5KHBlbmFsdHk6IG51bWJlcikge1xyXG4gICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHRoaXMudmFsdWVzLmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVzW2luZF0gPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZF0gPSBwZW5hbHR5O1xyXG4gICAgICAgICAgICAgICAgaWYgKHBlbmFsdHkgPCB0aGlzLnlNaW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnlNaW4gPSBwZW5hbHR5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBlbmFsdHkgPiB0aGlzLnlNYXgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnlNYXggPSBwZW5hbHR5O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRRdWVyeSgpOiBRdWVyeSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucXVlcnk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFjY3VtdWxhdGVWYWx1ZXMoKSB7XHJcbiAgICAgICAgbGV0IGFjY3VtVmFsdWUgPSAwLjA7XHJcbiAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgdGhpcy52YWx1ZXMubGVuZ3RoOyBpbmQrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZXNbaW5kXSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgYWNjdW1WYWx1ZSArPSB0aGlzLnZhbHVlc1tpbmRdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMudmFsdWVzW2luZF0gPSBhY2N1bVZhbHVlO1xyXG4gICAgICAgICAgICBpZiAoYWNjdW1WYWx1ZSA8IHRoaXMueU1pbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy55TWluID0gYWNjdW1WYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYWNjdW1WYWx1ZSA+IHRoaXMueU1heCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy55TWF4ID0gYWNjdW1WYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0VmFsdWVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcztcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0TGVuZ3RoKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlcy5sZW5ndGg7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldExlbmd0aE5vdE51bGwoKSB7XHJcbiAgICAgICAgbGV0IGNvdW50Tm90TnVsbCA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgdGhpcy52YWx1ZXMubGVuZ3RoOyBpbmQrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZXNbaW5kXSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgY291bnROb3ROdWxsKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNvdW50Tm90TnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBuZXh0KCk6IEl0ZXJhdG9yUmVzdWx0PERhdGFQb2ludD4ge1xyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRJbmRleCA8IHRoaXMudmFsdWVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICBsZXQgaW5kID0gdGhpcy5jdXJyZW50SW5kZXgrKztcclxuICAgICAgICAgICAgbGV0IGRhdGFQb2ludCA9IG5ldyBEYXRhUG9pbnQoXHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5nZXREYXRlcygpW2luZF0sXHJcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlc1tpbmRdXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBkb25lOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBkYXRhUG9pbnQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50SW5kZXggPSAwO1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgZG9uZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBudWxsLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBbU3ltYm9sLml0ZXJhdG9yXSgpOiBJdGVyYWJsZUl0ZXJhdG9yPERhdGFQb2ludD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRGF0YXNldHMgaW1wbGVtZW50cyBJdGVyYWJsZUl0ZXJhdG9yPERhdGFzZXQ+IHtcclxuICAgIC8vIEl0ZXJhYmxlIG9mIERhdGFzZXRcclxuICAgIHByaXZhdGUgZGF0ZXM6IE1vbWVudFtdO1xyXG4gICAgcHJpdmF0ZSBkYXRhc2V0czogRGF0YXNldFtdO1xyXG5cclxuICAgIHByaXZhdGUgY3VycmVudEluZGV4ID0gMDsgLy8gSXRlcmFibGVJdGVyYXRvclxyXG5cclxuICAgIGNvbnN0cnVjdG9yKHN0YXJ0RGF0ZTogTW9tZW50LCBlbmREYXRlOiBNb21lbnQpIHtcclxuICAgICAgICB0aGlzLmRhdGVzID0gW107XHJcbiAgICAgICAgdGhpcy5kYXRhc2V0cyA9IFtdO1xyXG5cclxuICAgICAgICBsZXQgY0RhdGEgPSBzdGFydERhdGUuY3JlYXRpb25EYXRhKCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coY0RhdGEpO1xyXG4gICAgICAgIGNvbnN0IGRhdGVGb3JtYXQgPSBjRGF0YS5mb3JtYXQudG9TdHJpbmcoKTtcclxuICAgICAgICBmb3IgKFxyXG4gICAgICAgICAgICBsZXQgY3VyRGF0ZSA9IHN0YXJ0RGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICBjdXJEYXRlIDw9IGVuZERhdGU7XHJcbiAgICAgICAgICAgIGN1ckRhdGUuYWRkKDEsIFwiZGF5c1wiKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBsZXQgbmV3RGF0ZSA9IHdpbmRvdy5tb21lbnQoXHJcbiAgICAgICAgICAgICAgICBjdXJEYXRlLmZvcm1hdChkYXRlRm9ybWF0KSxcclxuICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQsXHJcbiAgICAgICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0ZXMucHVzaChuZXdEYXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcy5kYXRlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNyZWF0ZURhdGFzZXQocXVlcnk6IFF1ZXJ5LCByZW5kZXJJbmZvOiBSZW5kZXJJbmZvKSB7XHJcbiAgICAgICAgbGV0IGRhdGFzZXQgPSBuZXcgRGF0YXNldCh0aGlzLCBxdWVyeSk7XHJcbiAgICAgICAgZGF0YXNldC5zZXRJZChxdWVyeS5nZXRJZCgpKTtcclxuICAgICAgICBpZiAocmVuZGVySW5mbykge1xyXG4gICAgICAgICAgICBkYXRhc2V0LnNldE5hbWUocmVuZGVySW5mby5kYXRhc2V0TmFtZVtxdWVyeS5nZXRJZCgpXSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmRhdGFzZXRzLnB1c2goZGF0YXNldCk7XHJcblxyXG4gICAgICAgIHJldHVybiBkYXRhc2V0O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRJbmRleE9mRGF0ZShkYXRlOiBNb21lbnQpIHtcclxuICAgICAgICBsZXQgY0RhdGEgPSBkYXRlLmNyZWF0aW9uRGF0YSgpO1xyXG4gICAgICAgIGNvbnN0IGRhdGVGb3JtYXQgPSBjRGF0YS5mb3JtYXQudG9TdHJpbmcoKTtcclxuICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCB0aGlzLmRhdGVzLmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5kYXRlc1tpbmRdLmZvcm1hdChkYXRlRm9ybWF0KSA9PT0gZGF0ZS5mb3JtYXQoZGF0ZUZvcm1hdClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5kO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAtMTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RGF0YXNldEJ5UXVlcnkocXVlcnk6IFF1ZXJ5KSB7XHJcbiAgICAgICAgZm9yIChsZXQgZGF0YXNldCBvZiB0aGlzLmRhdGFzZXRzKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhc2V0LmdldFF1ZXJ5KCkuZXF1YWxUbyhxdWVyeSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhc2V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXREYXRhc2V0QnlJZChpZDogbnVtYmVyKSB7XHJcbiAgICAgICAgZm9yIChsZXQgZGF0YXNldCBvZiB0aGlzLmRhdGFzZXRzKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhc2V0LmdldElkKCkgPT09IGlkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YXNldDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFhEYXRhc2V0SWRzKCkge1xyXG4gICAgICAgIGxldCBpZHM6IEFycmF5PG51bWJlcj4gPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBkYXRhc2V0IG9mIHRoaXMuZGF0YXNldHMpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IGlkID0gZGF0YXNldC5nZXRRdWVyeSgpLmdldElkKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWlkcy5pbmNsdWRlcyhpZCkgJiYgaWQgIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWRzLnB1c2goaWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpZHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldERhdGVzKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmRhdGVzO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXROYW1lcygpIHtcclxuICAgICAgICBsZXQgbmFtZXMgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBkYXRhc2V0IG9mIHRoaXMuZGF0YXNldHMpIHtcclxuICAgICAgICAgICAgbmFtZXMucHVzaChkYXRhc2V0LmdldE5hbWUoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBuYW1lcztcclxuICAgIH1cclxuXHJcbiAgICBuZXh0KCk6IEl0ZXJhdG9yUmVzdWx0PERhdGFzZXQ+IHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50SW5kZXggPCB0aGlzLmRhdGFzZXRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgZG9uZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5kYXRhc2V0c1t0aGlzLmN1cnJlbnRJbmRleCsrXSxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRJbmRleCA9IDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICBkb25lOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgdmFsdWU6IG51bGwsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIFtTeW1ib2wuaXRlcmF0b3JdKCk6IEl0ZXJhYmxlSXRlcmF0b3I8RGF0YXNldD4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUmVuZGVySW5mbyB7XHJcbiAgICAvLyBJbnB1dFxyXG4gICAgcXVlcmllczogUXVlcnlbXTtcclxuICAgIHhEYXRhc2V0OiBudW1iZXJbXTtcclxuICAgIGZvbGRlcjogc3RyaW5nO1xyXG4gICAgZmlsZTogc3RyaW5nW107XHJcbiAgICBzcGVjaWZpZWRGaWxlc09ubHk6IGJvb2xlYW47XHJcbiAgICBmaWxlQ29udGFpbnNMaW5rZWRGaWxlczogc3RyaW5nW107XHJcbiAgICBmaWxlTXVsdGlwbGllckFmdGVyTGluazogc3RyaW5nO1xyXG4gICAgZGF0ZUZvcm1hdDogc3RyaW5nO1xyXG4gICAgZGF0ZUZvcm1hdFByZWZpeDogc3RyaW5nO1xyXG4gICAgZGF0ZUZvcm1hdFN1ZmZpeDogc3RyaW5nO1xyXG4gICAgc3RhcnREYXRlOiBNb21lbnQgfCBudWxsO1xyXG4gICAgZW5kRGF0ZTogTW9tZW50IHwgbnVsbDtcclxuICAgIGRhdGFzZXROYW1lOiBzdHJpbmdbXTtcclxuICAgIGNvbnN0VmFsdWU6IG51bWJlcltdO1xyXG4gICAgaWdub3JlQXR0YWNoZWRWYWx1ZTogYm9vbGVhbltdO1xyXG4gICAgaWdub3JlWmVyb1ZhbHVlOiBib29sZWFuW107XHJcbiAgICBhY2N1bTogYm9vbGVhbltdO1xyXG4gICAgcGVuYWx0eTogbnVtYmVyW107XHJcbiAgICB2YWx1ZVNoaWZ0OiBudW1iZXJbXTtcclxuICAgIHNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbjogbnVtYmVyW107XHJcbiAgICB2YWx1ZVR5cGU6IHN0cmluZ1tdOyAvLyBudW1iZXIvZmxvYXQsIGludCwgc3RyaW5nLCBib29sZWFuLCBkYXRlLCB0aW1lLCBkYXRldGltZVxyXG4gICAgdGV4dFZhbHVlTWFwOiBUZXh0VmFsdWVNYXA7XHJcblxyXG4gICAgZGF0YUFyZWFTaXplOiBTaXplO1xyXG4gICAgbWFyZ2luOiBNYXJnaW47XHJcblxyXG4gICAgZml4ZWRTY2FsZTogbnVtYmVyO1xyXG4gICAgZml0UGFuZWxXaWR0aDogYm9vbGVhbjtcclxuXHJcbiAgICBvdXRwdXQ6IGFueVtdO1xyXG4gICAgbGluZTogTGluZUluZm9bXTtcclxuICAgIGJhcjogQmFySW5mb1tdO1xyXG4gICAgcGllOiBQaWVJbmZvW107XHJcbiAgICBzdW1tYXJ5OiBTdW1tYXJ5SW5mb1tdO1xyXG4gICAgbW9udGg6IE1vbnRoSW5mb1tdO1xyXG4gICAgaGVhdG1hcDogSGVhdG1hcEluZm9bXTtcclxuICAgIGJ1bGxldDogQnVsbGV0SW5mb1tdO1xyXG4gICAgY3VzdG9tRGF0YXNldDogQ3VzdG9tRGF0YXNldEluZm9bXTtcclxuXHJcbiAgICBwdWJsaWMgZGF0YXNldHM6IERhdGFzZXRzIHwgbnVsbDtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihxdWVyaWVzOiBRdWVyeVtdKSB7XHJcbiAgICAgICAgdGhpcy5xdWVyaWVzID0gcXVlcmllcztcclxuICAgICAgICB0aGlzLnhEYXRhc2V0ID0gW107IC8vIHVzZSBmaWxlIG5hbWVcclxuICAgICAgICB0aGlzLmZvbGRlciA9IFwiL1wiO1xyXG4gICAgICAgIHRoaXMuZmlsZSA9IFtdOyAvLyBleHRyYSBmaWxlcyB0byB1c2VcclxuICAgICAgICB0aGlzLnNwZWNpZmllZEZpbGVzT25seSA9IGZhbHNlOyAvLyBpZiB0cnVlLCB1c2UgZmlsZXMgc3BlY2lmaWVkIG9ubHlcclxuICAgICAgICB0aGlzLmZpbGVDb250YWluc0xpbmtlZEZpbGVzID0gW107XHJcbiAgICAgICAgdGhpcy5maWxlTXVsdGlwbGllckFmdGVyTGluayA9IFwiXCI7IC8vIHJlZ2V4IHBhdHRlcm4gdG8gZXh0cmFjdCBtdWx0aXBsaWVyIGFmdGVyIGxpbmtcclxuICAgICAgICB0aGlzLmRhdGVGb3JtYXQgPSBcIllZWVktTU0tRERcIjtcclxuICAgICAgICB0aGlzLmRhdGVGb3JtYXRQcmVmaXggPSBcIlwiO1xyXG4gICAgICAgIHRoaXMuZGF0ZUZvcm1hdFN1ZmZpeCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5zdGFydERhdGUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZW5kRGF0ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5kYXRhc2V0TmFtZSA9IFtdOyAvLyB1bnRpdGxlZFxyXG4gICAgICAgIHRoaXMuY29uc3RWYWx1ZSA9IFsxLjBdO1xyXG4gICAgICAgIHRoaXMuaWdub3JlQXR0YWNoZWRWYWx1ZSA9IFtdOyAvLyBmYWxzZVxyXG4gICAgICAgIHRoaXMuaWdub3JlWmVyb1ZhbHVlID0gW107IC8vIGZhbHNlXHJcbiAgICAgICAgdGhpcy5hY2N1bSA9IFtdOyAvLyBmYWxzZSwgYWNjdW0gdmFsdWVzIHN0YXJ0IGZyb20gemVybyBvdmVyIGRheXNcclxuICAgICAgICB0aGlzLnBlbmFsdHkgPSBbXTsgLy8gbnVsbCwgdXNlIHRoaXMgdmFsdWUgaW5zdGVhZCBvZiBudWxsIHZhbHVlXHJcbiAgICAgICAgdGhpcy52YWx1ZVNoaWZ0ID0gW107XHJcbiAgICAgICAgdGhpcy5zaGlmdE9ubHlWYWx1ZUxhcmdlclRoYW4gPSBbXTtcclxuICAgICAgICB0aGlzLnZhbHVlVHlwZSA9IFtdO1xyXG4gICAgICAgIHRoaXMudGV4dFZhbHVlTWFwID0ge307XHJcblxyXG4gICAgICAgIHRoaXMuZGF0YUFyZWFTaXplID0gbmV3IFNpemUoMzAwLCAzMDApO1xyXG4gICAgICAgIHRoaXMubWFyZ2luID0gbmV3IE1hcmdpbigxMCwgMTAsIDEwLCAxMCk7IC8vIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdFxyXG5cclxuICAgICAgICB0aGlzLmZpeGVkU2NhbGUgPSAxLjA7XHJcbiAgICAgICAgdGhpcy5maXRQYW5lbFdpZHRoID0gZmFsc2U7XHJcblxyXG4gICAgICAgIHRoaXMub3V0cHV0ID0gW107XHJcbiAgICAgICAgdGhpcy5saW5lID0gW107XHJcbiAgICAgICAgdGhpcy5iYXIgPSBbXTtcclxuICAgICAgICB0aGlzLnBpZSA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3VtbWFyeSA9IFtdO1xyXG4gICAgICAgIHRoaXMubW9udGggPSBbXTtcclxuICAgICAgICB0aGlzLmhlYXRtYXAgPSBbXTtcclxuICAgICAgICB0aGlzLmJ1bGxldCA9IFtdO1xyXG4gICAgICAgIHRoaXMuY3VzdG9tRGF0YXNldCA9IFtdO1xyXG5cclxuICAgICAgICB0aGlzLmRhdGFzZXRzID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0UXVlcnlCeUlkKGlkOiBudW1iZXIpIHtcclxuICAgICAgICBmb3IgKGxldCBxdWVyeSBvZiB0aGlzLnF1ZXJpZXMpIHtcclxuICAgICAgICAgICAgaWYgKHF1ZXJ5LmdldElkKCkgPT09IGlkKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcXVlcnk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDdXN0b21EYXRhc2V0SW5mbyB7XHJcbiAgICBpZDogbnVtYmVyO1xyXG4gICAgbmFtZTogc3RyaW5nO1xyXG4gICAgeERhdGE6IHN0cmluZ1tdO1xyXG4gICAgeURhdGE6IHN0cmluZ1tdO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMuaWQgPSAtMTtcclxuICAgICAgICB0aGlzLm5hbWUgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMueERhdGEgPSBbXTtcclxuICAgICAgICB0aGlzLnlEYXRhID0gW107XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUdyYXBoIHtcclxuICAgIEdldEdyYXBoVHlwZSgpOiBHcmFwaFR5cGU7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2VuZCB7XHJcbiAgICBzaG93TGVnZW5kOiBib29sZWFuO1xyXG4gICAgbGVnZW5kUG9zaXRpb246IHN0cmluZztcclxuICAgIGxlZ2VuZE9yaWVudGF0aW9uOiBzdHJpbmc7XHJcbiAgICBsZWdlbmRCZ0NvbG9yOiBzdHJpbmc7XHJcbiAgICBsZWdlbmRCb3JkZXJDb2xvcjogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQ29tbW9uQ2hhcnRJbmZvIGltcGxlbWVudHMgSUdyYXBoLCBJTGVnZW5kIHtcclxuICAgIHRpdGxlOiBzdHJpbmc7XHJcbiAgICB4QXhpc0xhYmVsOiBzdHJpbmc7XHJcbiAgICB4QXhpc0NvbG9yOiBzdHJpbmc7XHJcbiAgICB4QXhpc0xhYmVsQ29sb3I6IHN0cmluZztcclxuICAgIHlBeGlzTGFiZWw6IHN0cmluZ1tdO1xyXG4gICAgeUF4aXNDb2xvcjogc3RyaW5nW107XHJcbiAgICB5QXhpc0xhYmVsQ29sb3I6IHN0cmluZ1tdO1xyXG4gICAgeUF4aXNVbml0OiBzdHJpbmdbXTtcclxuICAgIHhBeGlzVGlja0ludGVydmFsOiBzdHJpbmc7XHJcbiAgICB5QXhpc1RpY2tJbnRlcnZhbDogc3RyaW5nW107XHJcbiAgICB4QXhpc1RpY2tMYWJlbEZvcm1hdDogc3RyaW5nO1xyXG4gICAgeUF4aXNUaWNrTGFiZWxGb3JtYXQ6IHN0cmluZ1tdO1xyXG4gICAgeU1pbjogbnVtYmVyW107XHJcbiAgICB5TWF4OiBudW1iZXJbXTtcclxuICAgIHJldmVyc2VZQXhpczogYm9vbGVhbltdO1xyXG4gICAgYWxsb3dJbnNwZWN0RGF0YTogYm9vbGVhbjtcclxuXHJcbiAgICAvLyBJTGVnZW5kXHJcbiAgICBzaG93TGVnZW5kOiBib29sZWFuO1xyXG4gICAgbGVnZW5kUG9zaXRpb246IHN0cmluZztcclxuICAgIGxlZ2VuZE9yaWVudGF0aW9uOiBzdHJpbmc7XHJcbiAgICBsZWdlbmRCZ0NvbG9yOiBzdHJpbmc7XHJcbiAgICBsZWdlbmRCb3JkZXJDb2xvcjogc3RyaW5nO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMudGl0bGUgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMueEF4aXNMYWJlbCA9IFwiRGF0ZVwiO1xyXG4gICAgICAgIHRoaXMueEF4aXNDb2xvciA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy54QXhpc0xhYmVsQ29sb3IgPSBcIlwiO1xyXG4gICAgICAgIHRoaXMueUF4aXNMYWJlbCA9IFtdOyAvLyBcIlZhbHVlXCIsIDIgZWxlbWVudHNcclxuICAgICAgICB0aGlzLnlBeGlzQ29sb3IgPSBbXTsgLy8gXCJcIiwgMiBlbGVtZW50c1xyXG4gICAgICAgIHRoaXMueUF4aXNMYWJlbENvbG9yID0gW107IC8vIFwiXCIsIDIgZWxlbWVudHNcclxuICAgICAgICB0aGlzLnlBeGlzVW5pdCA9IFtdOyAvLyBcIlwiLCAyIGVsZW1lbnRzXHJcbiAgICAgICAgdGhpcy54QXhpc1RpY2tJbnRlcnZhbCA9IG51bGw7IC8vIHRoZSBzdHJpbmcgd2lsbCBiZSBjb252ZXJ0ZWQgdG8gRHVyYXRpb24gKGEgbW9udGggaXMgbm90IG5lc3NjZXNhcnkgdG8gMzAgZGF5cylcclxuICAgICAgICB0aGlzLnlBeGlzVGlja0ludGVydmFsID0gW107IC8vIG51bGwsIDIgZWxlbWVudHNcclxuICAgICAgICB0aGlzLnhBeGlzVGlja0xhYmVsRm9ybWF0ID0gbnVsbDtcclxuICAgICAgICB0aGlzLnlBeGlzVGlja0xhYmVsRm9ybWF0ID0gW107IC8vIG51bGwsIDIgZWxlbWVudHNcclxuICAgICAgICB0aGlzLnlNaW4gPSBbXTsgLy8gbnVsbCwgMiBlbGVtZW50c1xyXG4gICAgICAgIHRoaXMueU1heCA9IFtdOyAvLyBudWxsLCAyIGVsZW1lbnRzXHJcbiAgICAgICAgdGhpcy5yZXZlcnNlWUF4aXMgPSBbXTsgLy8gZmFsc2UsIDIgZWxlbWVudHNcclxuICAgICAgICB0aGlzLmFsbG93SW5zcGVjdERhdGEgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyBJTGVnZW5kXHJcbiAgICAgICAgdGhpcy5zaG93TGVnZW5kID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5sZWdlbmRQb3NpdGlvbiA9IFwiXCI7IC8vIHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodFxyXG4gICAgICAgIHRoaXMubGVnZW5kT3JpZW50YXRpb24gPSBcIlwiOyAvLyBob3Jpem9udGFsLCB2ZXJ0aWNhbFxyXG4gICAgICAgIHRoaXMubGVnZW5kQmdDb2xvciA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5sZWdlbmRCb3JkZXJDb2xvciA9IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIEdldEdyYXBoVHlwZSgpIHtcclxuICAgICAgICByZXR1cm4gR3JhcGhUeXBlLlVua25vd247XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBMaW5lSW5mbyBleHRlbmRzIENvbW1vbkNoYXJ0SW5mbyB7XHJcbiAgICBsaW5lQ29sb3I6IHN0cmluZ1tdO1xyXG4gICAgbGluZVdpZHRoOiBudW1iZXJbXTtcclxuICAgIHNob3dMaW5lOiBib29sZWFuW107XHJcbiAgICBzaG93UG9pbnQ6IGJvb2xlYW5bXTtcclxuICAgIHBvaW50Q29sb3I6IHN0cmluZ1tdO1xyXG4gICAgcG9pbnRCb3JkZXJDb2xvcjogc3RyaW5nW107XHJcbiAgICBwb2ludEJvcmRlcldpZHRoOiBudW1iZXJbXTtcclxuICAgIHBvaW50U2l6ZTogbnVtYmVyW107XHJcbiAgICBmaWxsR2FwOiBib29sZWFuW107XHJcbiAgICB5QXhpc0xvY2F0aW9uOiBzdHJpbmdbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMubGluZUNvbG9yID0gW107IC8vIFwiXCJcclxuICAgICAgICB0aGlzLmxpbmVXaWR0aCA9IFtdOyAvLyAxLjVcclxuICAgICAgICB0aGlzLnNob3dMaW5lID0gW107IC8vIHRydWVcclxuICAgICAgICB0aGlzLnNob3dQb2ludCA9IFtdOyAvLyB0cnVlXHJcbiAgICAgICAgdGhpcy5wb2ludENvbG9yID0gW107IC8vICM2OWIzYTJcclxuICAgICAgICB0aGlzLnBvaW50Qm9yZGVyQ29sb3IgPSBbXTtcclxuICAgICAgICB0aGlzLnBvaW50Qm9yZGVyV2lkdGggPSBbXTsgLy8gMC4wXHJcbiAgICAgICAgdGhpcy5wb2ludFNpemUgPSBbXTsgLy8gMy4wXHJcbiAgICAgICAgdGhpcy5maWxsR2FwID0gW107IC8vIGZhbHNlXHJcbiAgICAgICAgdGhpcy55QXhpc0xvY2F0aW9uID0gW107IC8vIGxlZnQsIGZvciBlYWNoIHRhcmdldFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBHZXRHcmFwaFR5cGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIEdyYXBoVHlwZS5MaW5lO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgQmFySW5mbyBleHRlbmRzIENvbW1vbkNoYXJ0SW5mbyB7XHJcbiAgICBiYXJDb2xvcjogc3RyaW5nW107XHJcbiAgICB5QXhpc0xvY2F0aW9uOiBzdHJpbmdbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICBzdXBlcigpO1xyXG4gICAgICAgIHRoaXMuYmFyQ29sb3IgPSBbXTsgLy8gIzY5YjNhMlxyXG4gICAgICAgIHRoaXMueUF4aXNMb2NhdGlvbiA9IFtdOyAvLyBsZWZ0LCBmb3IgZWFjaCB0YXJnZXRcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgR2V0R3JhcGhUeXBlKCkge1xyXG4gICAgICAgIHJldHVybiBHcmFwaFR5cGUuQmFyO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgUGllSW5mbyBpbXBsZW1lbnRzIElHcmFwaCwgSUxlZ2VuZCB7XHJcbiAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgZGF0YTogc3RyaW5nW107XHJcbiAgICBkYXRhQ29sb3I6IHN0cmluZ1tdO1xyXG4gICAgZGF0YU5hbWU6IHN0cmluZ1tdO1xyXG4gICAgbGFiZWw6IHN0cmluZ1tdO1xyXG4gICAgaGlkZUxhYmVsTGVzc1RoYW46IG51bWJlcjtcclxuICAgIHNob3dFeHRMYWJlbE9ubHlJZk5vTGFiZWw6IGJvb2xlYW47XHJcbiAgICBleHRMYWJlbDogc3RyaW5nW107XHJcblxyXG4gICAgcmF0aW9Jbm5lclJhZGl1czogbnVtYmVyO1xyXG5cclxuICAgIC8vIElMZWdlbmRcclxuICAgIHNob3dMZWdlbmQ6IGJvb2xlYW47XHJcbiAgICBsZWdlbmRQb3NpdGlvbjogc3RyaW5nO1xyXG4gICAgbGVnZW5kT3JpZW50YXRpb246IHN0cmluZztcclxuICAgIGxlZ2VuZEJnQ29sb3I6IHN0cmluZztcclxuICAgIGxlZ2VuZEJvcmRlckNvbG9yOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy50aXRsZSA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5kYXRhID0gW107XHJcbiAgICAgICAgdGhpcy5kYXRhQ29sb3IgPSBbXTtcclxuICAgICAgICB0aGlzLmRhdGFOYW1lID0gW107XHJcbiAgICAgICAgdGhpcy5sYWJlbCA9IFtdO1xyXG4gICAgICAgIHRoaXMuaGlkZUxhYmVsTGVzc1RoYW4gPSAwLjAzO1xyXG4gICAgICAgIHRoaXMuZXh0TGFiZWwgPSBbXTtcclxuICAgICAgICB0aGlzLnNob3dFeHRMYWJlbE9ubHlJZk5vTGFiZWwgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnJhdGlvSW5uZXJSYWRpdXMgPSAwLjA7XHJcblxyXG4gICAgICAgIC8vIElMZWdlbmRcclxuICAgICAgICB0aGlzLnNob3dMZWdlbmQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmxlZ2VuZFBvc2l0aW9uID0gXCJcIjsgLy8gdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0XHJcbiAgICAgICAgdGhpcy5sZWdlbmRPcmllbnRhdGlvbiA9IFwiXCI7IC8vIGhvcml6b250YWwsIHZlcnRpY2FsXHJcbiAgICAgICAgdGhpcy5sZWdlbmRCZ0NvbG9yID0gXCJcIjtcclxuICAgICAgICB0aGlzLmxlZ2VuZEJvcmRlckNvbG9yID0gXCJcIjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgR2V0R3JhcGhUeXBlKCkge1xyXG4gICAgICAgIHJldHVybiBHcmFwaFR5cGUuUGllO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU3VtbWFyeUluZm8gaW1wbGVtZW50cyBJR3JhcGgge1xyXG4gICAgdGVtcGxhdGU6IHN0cmluZztcclxuICAgIHN0eWxlOiBzdHJpbmc7XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy50ZW1wbGF0ZSA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5zdHlsZSA9IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIEdldEdyYXBoVHlwZSgpIHtcclxuICAgICAgICByZXR1cm4gR3JhcGhUeXBlLlN1bW1hcnk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBNb250aEluZm8gaW1wbGVtZW50cyBJR3JhcGgge1xyXG4gICAgbW9kZTogc3RyaW5nO1xyXG4gICAgZGF0YXNldDogbnVtYmVyW107XHJcbiAgICBzdGFydFdlZWtPbjogc3RyaW5nO1xyXG4gICAgdGhyZXNob2xkOiBudW1iZXJbXTtcclxuICAgIHlNaW46IG51bWJlcltdO1xyXG4gICAgeU1heDogbnVtYmVyW107XHJcbiAgICBjb2xvcjogc3RyaW5nO1xyXG4gICAgZGltTm90SW5Nb250aDogYm9vbGVhbjtcclxuICAgIGluaXRNb250aDogc3RyaW5nOyAvLyBZWVlZLU1NXHJcbiAgICBzaG93U2VsZWN0ZWRWYWx1ZTogYm9vbGVhbjtcclxuXHJcbiAgICAvLyBoZWFkZXJcclxuICAgIGhlYWRlclllYXJDb2xvcjogc3RyaW5nO1xyXG4gICAgaGVhZGVyTW9udGhDb2xvcjogc3RyaW5nO1xyXG4gICAgZGl2aWRpbmdMaW5lQ29sb3I6IHN0cmluZztcclxuXHJcbiAgICAvLyBjaXJjbGVzIGFuZCByaW5nc1xyXG4gICAgc2hvd0NpcmNsZTogYm9vbGVhbjtcclxuICAgIHNob3dTdHJlYWs6IGJvb2xlYW47XHJcbiAgICBzaG93VG9kYXlSaW5nOiBib29sZWFuO1xyXG4gICAgc2hvd1NlbGVjdGVkUmluZzogYm9vbGVhbjtcclxuICAgIGNpcmNsZUNvbG9yOiBzdHJpbmc7XHJcbiAgICBjaXJjbGVDb2xvckJ5VmFsdWU6IGJvb2xlYW47XHJcbiAgICB0b2RheVJpbmdDb2xvcjogc3RyaW5nO1xyXG4gICAgc2VsZWN0ZWRSaW5nQ29sb3I6IHN0cmluZztcclxuXHJcbiAgICAvLyBhbm5vdGF0aW9uc1xyXG4gICAgc2hvd0Fubm90YXRpb246IGJvb2xlYW47XHJcbiAgICBhbm5vdGF0aW9uOiBzdHJpbmdbXTtcclxuICAgIHNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzOiBib29sZWFuO1xyXG5cclxuICAgIC8vIGludGVybmFsXHJcbiAgICBzZWxlY3RlZERhdGU6IHN0cmluZztcclxuICAgIHNlbGVjdGVkRGF0YXNldDogbnVtYmVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgICAgIHRoaXMubW9kZSA9IFwiY2lyY2xlXCI7IC8vIGNpcmNsZSwgYW5ub3RhdGlvblxyXG4gICAgICAgIHRoaXMuZGF0YXNldCA9IFtdO1xyXG4gICAgICAgIHRoaXMuc3RhcnRXZWVrT24gPSBcIlN1blwiO1xyXG4gICAgICAgIHRoaXMudGhyZXNob2xkID0gW107IC8vIGlmIHZhbHVlID4gdGhyZXNob2xkLCB3aWxsIHNob3cgZG90XHJcbiAgICAgICAgdGhpcy55TWluID0gW107XHJcbiAgICAgICAgdGhpcy55TWF4ID0gW107XHJcbiAgICAgICAgdGhpcy5jb2xvciA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5kaW1Ob3RJbk1vbnRoID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmluaXRNb250aCA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5zaG93U2VsZWN0ZWRWYWx1ZSA9IHRydWU7XHJcblxyXG4gICAgICAgIC8vIGhlYWRlclxyXG4gICAgICAgIHRoaXMuaGVhZGVyWWVhckNvbG9yID0gbnVsbDtcclxuICAgICAgICB0aGlzLmhlYWRlck1vbnRoQ29sb3IgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZGl2aWRpbmdMaW5lQ29sb3IgPSBudWxsO1xyXG5cclxuICAgICAgICAvLyBjaXJjbGVzIGFuZCByaW5nc1xyXG4gICAgICAgIHRoaXMuc2hvd0NpcmNsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zaG93U3RyZWFrID0gdHJ1ZTsgLy8gYSBzdHJlYWsgY29ubmVjdHMgbmVpZ2JvciBkb3RzXHJcbiAgICAgICAgdGhpcy5zaG93VG9kYXlSaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNob3dTZWxlY3RlZFJpbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuY2lyY2xlQ29sb3IgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY2lyY2xlQ29sb3JCeVZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy50b2RheVJpbmdDb2xvciA9IFwiXCI7IC8vIHdoaXRlXHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFJpbmdDb2xvciA9IFwiZmlyZWJyaWNrXCI7XHJcblxyXG4gICAgICAgIC8vIGFubm90YXRpb25zXHJcbiAgICAgICAgdGhpcy5zaG93QW5ub3RhdGlvbiA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hbm5vdGF0aW9uID0gW107IC8vIGFubm90YXRpb24gZm9yIGVhY2ggZGF0YXNldCwgYWNjZXB0IGV4cHJlc3Npb24gdGh1cyB2YWx1ZVxyXG4gICAgICAgIHRoaXMuc2hvd0Fubm90YXRpb25PZkFsbFRhcmdldHMgPSB0cnVlO1xyXG5cclxuICAgICAgICAvLyBpbnRlcm5hbFxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gXCJcIjsgLy8gc2VsZWN0ZWQgZGF0ZVxyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhc2V0ID0gbnVsbDsgLy8gc2VsZWN0ZWQgaW5kZXggb2YgZGF0YXNldFxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBHZXRHcmFwaFR5cGUoKSB7XHJcbiAgICAgICAgcmV0dXJuIEdyYXBoVHlwZS5Nb250aDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEhlYXRtYXBJbmZvIGltcGxlbWVudHMgSUdyYXBoIHtcclxuICAgIGRhdGFzZXQ6IHN0cmluZztcclxuICAgIHN0YXJ0V2Vla09uOiBzdHJpbmc7XHJcbiAgICBvcmllbnRhdGlvbjogc3RyaW5nO1xyXG4gICAgeU1pbjogbnVtYmVyO1xyXG4gICAgeU1heDogbnVtYmVyO1xyXG4gICAgY29sb3I6IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLmRhdGFzZXQgPSBcIjBcIjtcclxuICAgICAgICB0aGlzLnN0YXJ0V2Vla09uID0gXCJTdW5cIjtcclxuICAgICAgICB0aGlzLm9yaWVudGF0aW9uID0gXCJ2ZXJ0aWNhbFwiO1xyXG4gICAgICAgIHRoaXMueU1pbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy55TWF4ID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNvbG9yID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgR2V0R3JhcGhUeXBlKCkge1xyXG4gICAgICAgIHJldHVybiBHcmFwaFR5cGUuSGVhdG1hcDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEJ1bGxldEluZm8gaW1wbGVtZW50cyBJR3JhcGgge1xyXG4gICAgdGl0bGU6IHN0cmluZztcclxuICAgIGRhdGFzZXQ6IHN0cmluZztcclxuICAgIG9yaWVudGF0aW9uOiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogc3RyaW5nO1xyXG4gICAgdmFsdWVVbml0OiBzdHJpbmc7XHJcbiAgICB2YWx1ZUNvbG9yOiBzdHJpbmc7XHJcbiAgICByYW5nZTogbnVtYmVyW107XHJcbiAgICByYW5nZUNvbG9yOiBzdHJpbmdbXTtcclxuICAgIHNob3dNYXJrZXI6IGJvb2xlYW47XHJcbiAgICBtYXJrZXJWYWx1ZTogbnVtYmVyO1xyXG4gICAgbWFya2VyQ29sb3I6IHN0cmluZztcclxuXHJcbiAgICBjb25zdHJ1Y3RvcigpIHtcclxuICAgICAgICB0aGlzLnRpdGxlID0gXCJcIjtcclxuICAgICAgICB0aGlzLmRhdGFzZXQgPSBcIjBcIjsgLy8gZGF0YXNldCBpZCBvciBuYW1lXHJcbiAgICAgICAgdGhpcy5vcmllbnRhdGlvbiA9IFwiaG9yaXpvbnRhbFwiOyAvLyBvciB2ZXJ0aWNhbFxyXG4gICAgICAgIHRoaXMudmFsdWUgPSBcIlwiOyAvLyBDYW4gcG9zc2VzcyB0ZW1wbGF0ZSB2YXJpYWxiZVxyXG4gICAgICAgIHRoaXMudmFsdWVVbml0ID0gXCJcIjtcclxuICAgICAgICB0aGlzLnZhbHVlQ29sb3IgPSBcIiM2OWIzYTJcIjtcclxuICAgICAgICB0aGlzLnJhbmdlID0gW107XHJcbiAgICAgICAgdGhpcy5yYW5nZUNvbG9yID0gW107XHJcbiAgICAgICAgdGhpcy5zaG93TWFya2VyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tYXJrZXJWYWx1ZSA9IDA7XHJcbiAgICAgICAgdGhpcy5tYXJrZXJDb2xvciA9IFwiXCI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIEdldEdyYXBoVHlwZSgpIHtcclxuICAgICAgICByZXR1cm4gR3JhcGhUeXBlLkJ1bGxldDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFNpemUge1xyXG4gICAgd2lkdGg6IG51bWJlcjtcclxuICAgIGhlaWdodDogbnVtYmVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHc6IG51bWJlciwgaDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy53aWR0aCA9IHc7XHJcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBoO1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgTWFyZ2luIHtcclxuICAgIHRvcDogbnVtYmVyO1xyXG4gICAgcmlnaHQ6IG51bWJlcjtcclxuICAgIGJvdHRvbTogbnVtYmVyO1xyXG4gICAgbGVmdDogbnVtYmVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHRvcDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBib3R0b206IG51bWJlciwgbGVmdDogbnVtYmVyKSB7XHJcbiAgICAgICAgdGhpcy50b3AgPSB0b3A7XHJcbiAgICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xyXG4gICAgICAgIHRoaXMuYm90dG9tID0gYm90dG9tO1xyXG4gICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBUcmFuc2Zvcm0ge1xyXG4gICAgdHJhbnNsYXRlWDogbnVtYmVyO1xyXG4gICAgdHJhbnNsYXRlWTogbnVtYmVyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHRyYW5zZm9ybTogYW55KSB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVYID0gMDtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVkgPSAwO1xyXG5cclxuICAgICAgICBpZiAodHlwZW9mIHRyYW5zZm9ybSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICBsZXQgZ3JvdXBzID0gdHJhbnNmb3JtLm1hdGNoKFxyXG4gICAgICAgICAgICAgICAgL3RyYW5zbGF0ZVxcKFxccyooPzx4PltcXGRcXC5cXC8tXSspXFxzKixcXHMqKD88eT5bXFxkXFwuXFwvLV0rKVxccypcXCkvXHJcbiAgICAgICAgICAgICkuZ3JvdXBzO1xyXG4gICAgICAgICAgICBpZiAoZ3JvdXBzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVggPSBwYXJzZUZsb2F0KGdyb3Vwcy54KTtcclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNsYXRlWSA9IHBhcnNlRmxvYXQoZ3JvdXBzLnkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdHlwZSBDaGFydEVsZW1lbnRzID0ge1xyXG4gICAgW2tleTogc3RyaW5nXTogYW55O1xyXG59O1xyXG5cclxuZXhwb3J0IGNsYXNzIFRhYmxlRGF0YSB7XHJcbiAgICBmaWxlUGF0aDogc3RyaW5nO1xyXG4gICAgdGFibGVJbmRleDogbnVtYmVyO1xyXG4gICAgeERhdGFzZXQ6IFF1ZXJ5IHwgbnVsbDtcclxuICAgIHlEYXRhc2V0czogQXJyYXk8UXVlcnk+O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGZpbGVQYXRoOiBzdHJpbmcsIHRhYmxlSW5kZXg6IG51bWJlcikge1xyXG4gICAgICAgIHRoaXMuZmlsZVBhdGggPSBmaWxlUGF0aDtcclxuICAgICAgICB0aGlzLnRhYmxlSW5kZXggPSB0YWJsZUluZGV4O1xyXG4gICAgICAgIHRoaXMueERhdGFzZXQgPSBudWxsO1xyXG4gICAgICAgIHRoaXMueURhdGFzZXRzID0gW107IC8vIGFycmF5IG9mIHF1ZXJ5XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBDb2xsZWN0aW5nUHJvY2Vzc0luZm8ge1xyXG4gICAgZmlsZVRvdGFsOiBudW1iZXI7IC8vIHRvdGFsIG51bWJlciBvZiBmaWxlc1xyXG4gICAgZmlsZUF2YWlsYWJsZTogbnVtYmVyOyAvLyB0b3RhbCBhdmFpbGFibGUgY291bnRcclxuICAgIGZpbGVPdXRPZkRhdGVSYW5nZTogbnVtYmVyO1xyXG4gICAgZmlsZU5vdEluRm9ybWF0OiBudW1iZXI7XHJcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZztcclxuICAgIG1pbkRhdGU6IE1vbWVudDtcclxuICAgIG1heERhdGU6IE1vbWVudDtcclxuICAgIGdvdEFueVZhbGlkWFZhbHVlOiBib29sZWFuO1xyXG4gICAgZ290QW55VmFsaWRZVmFsdWU6IGJvb2xlYW47XHJcblxyXG4gICAgY29uc3RydWN0b3IoKSB7XHJcbiAgICAgICAgdGhpcy5maWxlVG90YWwgPSAwO1xyXG4gICAgICAgIHRoaXMuZmlsZUF2YWlsYWJsZSA9IDA7XHJcbiAgICAgICAgdGhpcy5maWxlT3V0T2ZEYXRlUmFuZ2UgPSAwO1xyXG4gICAgICAgIHRoaXMuZmlsZU5vdEluRm9ybWF0ID0gMDtcclxuICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IFwiXCI7XHJcbiAgICAgICAgdGhpcy5taW5EYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTsgLy8gaW52YWxpZCBkYXRlXHJcbiAgICAgICAgdGhpcy5tYXhEYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTsgLy8gaW52YWxpZCBkYXRlXHJcbiAgICAgICAgdGhpcy5nb3RBbnlWYWxpZFhWYWx1ZSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ290QW55VmFsaWRZVmFsdWUgPSBmYWxzZTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgWFZhbHVlTWFwID0gTWFwPG51bWJlciwgc3RyaW5nPjtcclxuZXhwb3J0IHR5cGUgRGF0YU1hcCA9IE1hcDxzdHJpbmcsIEFycmF5PFF1ZXJ5VmFsdWVQYWlyPj47XHJcbiIsImltcG9ydCB7cGF0aH0gZnJvbSBcImQzLXBhdGhcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IHthYnMsIGFjb3MsIGFzaW4sIGF0YW4yLCBjb3MsIGVwc2lsb24sIGhhbGZQaSwgbWF4LCBtaW4sIHBpLCBzaW4sIHNxcnQsIHRhdX0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBhcmNJbm5lclJhZGl1cyhkKSB7XG4gIHJldHVybiBkLmlubmVyUmFkaXVzO1xufVxuXG5mdW5jdGlvbiBhcmNPdXRlclJhZGl1cyhkKSB7XG4gIHJldHVybiBkLm91dGVyUmFkaXVzO1xufVxuXG5mdW5jdGlvbiBhcmNTdGFydEFuZ2xlKGQpIHtcbiAgcmV0dXJuIGQuc3RhcnRBbmdsZTtcbn1cblxuZnVuY3Rpb24gYXJjRW5kQW5nbGUoZCkge1xuICByZXR1cm4gZC5lbmRBbmdsZTtcbn1cblxuZnVuY3Rpb24gYXJjUGFkQW5nbGUoZCkge1xuICByZXR1cm4gZCAmJiBkLnBhZEFuZ2xlOyAvLyBOb3RlOiBvcHRpb25hbCFcbn1cblxuZnVuY3Rpb24gaW50ZXJzZWN0KHgwLCB5MCwgeDEsIHkxLCB4MiwgeTIsIHgzLCB5Mykge1xuICB2YXIgeDEwID0geDEgLSB4MCwgeTEwID0geTEgLSB5MCxcbiAgICAgIHgzMiA9IHgzIC0geDIsIHkzMiA9IHkzIC0geTIsXG4gICAgICB0ID0geTMyICogeDEwIC0geDMyICogeTEwO1xuICBpZiAodCAqIHQgPCBlcHNpbG9uKSByZXR1cm47XG4gIHQgPSAoeDMyICogKHkwIC0geTIpIC0geTMyICogKHgwIC0geDIpKSAvIHQ7XG4gIHJldHVybiBbeDAgKyB0ICogeDEwLCB5MCArIHQgKiB5MTBdO1xufVxuXG4vLyBDb21wdXRlIHBlcnBlbmRpY3VsYXIgb2Zmc2V0IGxpbmUgb2YgbGVuZ3RoIHJjLlxuLy8gaHR0cDovL21hdGh3b3JsZC53b2xmcmFtLmNvbS9DaXJjbGUtTGluZUludGVyc2VjdGlvbi5odG1sXG5mdW5jdGlvbiBjb3JuZXJUYW5nZW50cyh4MCwgeTAsIHgxLCB5MSwgcjEsIHJjLCBjdykge1xuICB2YXIgeDAxID0geDAgLSB4MSxcbiAgICAgIHkwMSA9IHkwIC0geTEsXG4gICAgICBsbyA9IChjdyA/IHJjIDogLXJjKSAvIHNxcnQoeDAxICogeDAxICsgeTAxICogeTAxKSxcbiAgICAgIG94ID0gbG8gKiB5MDEsXG4gICAgICBveSA9IC1sbyAqIHgwMSxcbiAgICAgIHgxMSA9IHgwICsgb3gsXG4gICAgICB5MTEgPSB5MCArIG95LFxuICAgICAgeDEwID0geDEgKyBveCxcbiAgICAgIHkxMCA9IHkxICsgb3ksXG4gICAgICB4MDAgPSAoeDExICsgeDEwKSAvIDIsXG4gICAgICB5MDAgPSAoeTExICsgeTEwKSAvIDIsXG4gICAgICBkeCA9IHgxMCAtIHgxMSxcbiAgICAgIGR5ID0geTEwIC0geTExLFxuICAgICAgZDIgPSBkeCAqIGR4ICsgZHkgKiBkeSxcbiAgICAgIHIgPSByMSAtIHJjLFxuICAgICAgRCA9IHgxMSAqIHkxMCAtIHgxMCAqIHkxMSxcbiAgICAgIGQgPSAoZHkgPCAwID8gLTEgOiAxKSAqIHNxcnQobWF4KDAsIHIgKiByICogZDIgLSBEICogRCkpLFxuICAgICAgY3gwID0gKEQgKiBkeSAtIGR4ICogZCkgLyBkMixcbiAgICAgIGN5MCA9ICgtRCAqIGR4IC0gZHkgKiBkKSAvIGQyLFxuICAgICAgY3gxID0gKEQgKiBkeSArIGR4ICogZCkgLyBkMixcbiAgICAgIGN5MSA9ICgtRCAqIGR4ICsgZHkgKiBkKSAvIGQyLFxuICAgICAgZHgwID0gY3gwIC0geDAwLFxuICAgICAgZHkwID0gY3kwIC0geTAwLFxuICAgICAgZHgxID0gY3gxIC0geDAwLFxuICAgICAgZHkxID0gY3kxIC0geTAwO1xuXG4gIC8vIFBpY2sgdGhlIGNsb3NlciBvZiB0aGUgdHdvIGludGVyc2VjdGlvbiBwb2ludHMuXG4gIC8vIFRPRE8gSXMgdGhlcmUgYSBmYXN0ZXIgd2F5IHRvIGRldGVybWluZSB3aGljaCBpbnRlcnNlY3Rpb24gdG8gdXNlP1xuICBpZiAoZHgwICogZHgwICsgZHkwICogZHkwID4gZHgxICogZHgxICsgZHkxICogZHkxKSBjeDAgPSBjeDEsIGN5MCA9IGN5MTtcblxuICByZXR1cm4ge1xuICAgIGN4OiBjeDAsXG4gICAgY3k6IGN5MCxcbiAgICB4MDE6IC1veCxcbiAgICB5MDE6IC1veSxcbiAgICB4MTE6IGN4MCAqIChyMSAvIHIgLSAxKSxcbiAgICB5MTE6IGN5MCAqIChyMSAvIHIgLSAxKVxuICB9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbigpIHtcbiAgdmFyIGlubmVyUmFkaXVzID0gYXJjSW5uZXJSYWRpdXMsXG4gICAgICBvdXRlclJhZGl1cyA9IGFyY091dGVyUmFkaXVzLFxuICAgICAgY29ybmVyUmFkaXVzID0gY29uc3RhbnQoMCksXG4gICAgICBwYWRSYWRpdXMgPSBudWxsLFxuICAgICAgc3RhcnRBbmdsZSA9IGFyY1N0YXJ0QW5nbGUsXG4gICAgICBlbmRBbmdsZSA9IGFyY0VuZEFuZ2xlLFxuICAgICAgcGFkQW5nbGUgPSBhcmNQYWRBbmdsZSxcbiAgICAgIGNvbnRleHQgPSBudWxsO1xuXG4gIGZ1bmN0aW9uIGFyYygpIHtcbiAgICB2YXIgYnVmZmVyLFxuICAgICAgICByLFxuICAgICAgICByMCA9ICtpbm5lclJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICByMSA9ICtvdXRlclJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpLFxuICAgICAgICBhMCA9IHN0YXJ0QW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSAtIGhhbGZQaSxcbiAgICAgICAgYTEgPSBlbmRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIC0gaGFsZlBpLFxuICAgICAgICBkYSA9IGFicyhhMSAtIGEwKSxcbiAgICAgICAgY3cgPSBhMSA+IGEwO1xuXG4gICAgaWYgKCFjb250ZXh0KSBjb250ZXh0ID0gYnVmZmVyID0gcGF0aCgpO1xuXG4gICAgLy8gRW5zdXJlIHRoYXQgdGhlIG91dGVyIHJhZGl1cyBpcyBhbHdheXMgbGFyZ2VyIHRoYW4gdGhlIGlubmVyIHJhZGl1cy5cbiAgICBpZiAocjEgPCByMCkgciA9IHIxLCByMSA9IHIwLCByMCA9IHI7XG5cbiAgICAvLyBJcyBpdCBhIHBvaW50P1xuICAgIGlmICghKHIxID4gZXBzaWxvbikpIGNvbnRleHQubW92ZVRvKDAsIDApO1xuXG4gICAgLy8gT3IgaXMgaXQgYSBjaXJjbGUgb3IgYW5udWx1cz9cbiAgICBlbHNlIGlmIChkYSA+IHRhdSAtIGVwc2lsb24pIHtcbiAgICAgIGNvbnRleHQubW92ZVRvKHIxICogY29zKGEwKSwgcjEgKiBzaW4oYTApKTtcbiAgICAgIGNvbnRleHQuYXJjKDAsIDAsIHIxLCBhMCwgYTEsICFjdyk7XG4gICAgICBpZiAocjAgPiBlcHNpbG9uKSB7XG4gICAgICAgIGNvbnRleHQubW92ZVRvKHIwICogY29zKGExKSwgcjAgKiBzaW4oYTEpKTtcbiAgICAgICAgY29udGV4dC5hcmMoMCwgMCwgcjAsIGExLCBhMCwgY3cpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE9yIGlzIGl0IGEgY2lyY3VsYXIgb3IgYW5udWxhciBzZWN0b3I/XG4gICAgZWxzZSB7XG4gICAgICB2YXIgYTAxID0gYTAsXG4gICAgICAgICAgYTExID0gYTEsXG4gICAgICAgICAgYTAwID0gYTAsXG4gICAgICAgICAgYTEwID0gYTEsXG4gICAgICAgICAgZGEwID0gZGEsXG4gICAgICAgICAgZGExID0gZGEsXG4gICAgICAgICAgYXAgPSBwYWRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIC8gMixcbiAgICAgICAgICBycCA9IChhcCA+IGVwc2lsb24pICYmIChwYWRSYWRpdXMgPyArcGFkUmFkaXVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgOiBzcXJ0KHIwICogcjAgKyByMSAqIHIxKSksXG4gICAgICAgICAgcmMgPSBtaW4oYWJzKHIxIC0gcjApIC8gMiwgK2Nvcm5lclJhZGl1cy5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSxcbiAgICAgICAgICByYzAgPSByYyxcbiAgICAgICAgICByYzEgPSByYyxcbiAgICAgICAgICB0MCxcbiAgICAgICAgICB0MTtcblxuICAgICAgLy8gQXBwbHkgcGFkZGluZz8gTm90ZSB0aGF0IHNpbmNlIHIxIOKJpSByMCwgZGExIOKJpSBkYTAuXG4gICAgICBpZiAocnAgPiBlcHNpbG9uKSB7XG4gICAgICAgIHZhciBwMCA9IGFzaW4ocnAgLyByMCAqIHNpbihhcCkpLFxuICAgICAgICAgICAgcDEgPSBhc2luKHJwIC8gcjEgKiBzaW4oYXApKTtcbiAgICAgICAgaWYgKChkYTAgLT0gcDAgKiAyKSA+IGVwc2lsb24pIHAwICo9IChjdyA/IDEgOiAtMSksIGEwMCArPSBwMCwgYTEwIC09IHAwO1xuICAgICAgICBlbHNlIGRhMCA9IDAsIGEwMCA9IGExMCA9IChhMCArIGExKSAvIDI7XG4gICAgICAgIGlmICgoZGExIC09IHAxICogMikgPiBlcHNpbG9uKSBwMSAqPSAoY3cgPyAxIDogLTEpLCBhMDEgKz0gcDEsIGExMSAtPSBwMTtcbiAgICAgICAgZWxzZSBkYTEgPSAwLCBhMDEgPSBhMTEgPSAoYTAgKyBhMSkgLyAyO1xuICAgICAgfVxuXG4gICAgICB2YXIgeDAxID0gcjEgKiBjb3MoYTAxKSxcbiAgICAgICAgICB5MDEgPSByMSAqIHNpbihhMDEpLFxuICAgICAgICAgIHgxMCA9IHIwICogY29zKGExMCksXG4gICAgICAgICAgeTEwID0gcjAgKiBzaW4oYTEwKTtcblxuICAgICAgLy8gQXBwbHkgcm91bmRlZCBjb3JuZXJzP1xuICAgICAgaWYgKHJjID4gZXBzaWxvbikge1xuICAgICAgICB2YXIgeDExID0gcjEgKiBjb3MoYTExKSxcbiAgICAgICAgICAgIHkxMSA9IHIxICogc2luKGExMSksXG4gICAgICAgICAgICB4MDAgPSByMCAqIGNvcyhhMDApLFxuICAgICAgICAgICAgeTAwID0gcjAgKiBzaW4oYTAwKSxcbiAgICAgICAgICAgIG9jO1xuXG4gICAgICAgIC8vIFJlc3RyaWN0IHRoZSBjb3JuZXIgcmFkaXVzIGFjY29yZGluZyB0byB0aGUgc2VjdG9yIGFuZ2xlLlxuICAgICAgICBpZiAoZGEgPCBwaSAmJiAob2MgPSBpbnRlcnNlY3QoeDAxLCB5MDEsIHgwMCwgeTAwLCB4MTEsIHkxMSwgeDEwLCB5MTApKSkge1xuICAgICAgICAgIHZhciBheCA9IHgwMSAtIG9jWzBdLFxuICAgICAgICAgICAgICBheSA9IHkwMSAtIG9jWzFdLFxuICAgICAgICAgICAgICBieCA9IHgxMSAtIG9jWzBdLFxuICAgICAgICAgICAgICBieSA9IHkxMSAtIG9jWzFdLFxuICAgICAgICAgICAgICBrYyA9IDEgLyBzaW4oYWNvcygoYXggKiBieCArIGF5ICogYnkpIC8gKHNxcnQoYXggKiBheCArIGF5ICogYXkpICogc3FydChieCAqIGJ4ICsgYnkgKiBieSkpKSAvIDIpLFxuICAgICAgICAgICAgICBsYyA9IHNxcnQob2NbMF0gKiBvY1swXSArIG9jWzFdICogb2NbMV0pO1xuICAgICAgICAgIHJjMCA9IG1pbihyYywgKHIwIC0gbGMpIC8gKGtjIC0gMSkpO1xuICAgICAgICAgIHJjMSA9IG1pbihyYywgKHIxIC0gbGMpIC8gKGtjICsgMSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElzIHRoZSBzZWN0b3IgY29sbGFwc2VkIHRvIGEgbGluZT9cbiAgICAgIGlmICghKGRhMSA+IGVwc2lsb24pKSBjb250ZXh0Lm1vdmVUbyh4MDEsIHkwMSk7XG5cbiAgICAgIC8vIERvZXMgdGhlIHNlY3RvcuKAmXMgb3V0ZXIgcmluZyBoYXZlIHJvdW5kZWQgY29ybmVycz9cbiAgICAgIGVsc2UgaWYgKHJjMSA+IGVwc2lsb24pIHtcbiAgICAgICAgdDAgPSBjb3JuZXJUYW5nZW50cyh4MDAsIHkwMCwgeDAxLCB5MDEsIHIxLCByYzEsIGN3KTtcbiAgICAgICAgdDEgPSBjb3JuZXJUYW5nZW50cyh4MTEsIHkxMSwgeDEwLCB5MTAsIHIxLCByYzEsIGN3KTtcblxuICAgICAgICBjb250ZXh0Lm1vdmVUbyh0MC5jeCArIHQwLngwMSwgdDAuY3kgKyB0MC55MDEpO1xuXG4gICAgICAgIC8vIEhhdmUgdGhlIGNvcm5lcnMgbWVyZ2VkP1xuICAgICAgICBpZiAocmMxIDwgcmMpIGNvbnRleHQuYXJjKHQwLmN4LCB0MC5jeSwgcmMxLCBhdGFuMih0MC55MDEsIHQwLngwMSksIGF0YW4yKHQxLnkwMSwgdDEueDAxKSwgIWN3KTtcblxuICAgICAgICAvLyBPdGhlcndpc2UsIGRyYXcgdGhlIHR3byBjb3JuZXJzIGFuZCB0aGUgcmluZy5cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgY29udGV4dC5hcmModDAuY3gsIHQwLmN5LCByYzEsIGF0YW4yKHQwLnkwMSwgdDAueDAxKSwgYXRhbjIodDAueTExLCB0MC54MTEpLCAhY3cpO1xuICAgICAgICAgIGNvbnRleHQuYXJjKDAsIDAsIHIxLCBhdGFuMih0MC5jeSArIHQwLnkxMSwgdDAuY3ggKyB0MC54MTEpLCBhdGFuMih0MS5jeSArIHQxLnkxMSwgdDEuY3ggKyB0MS54MTEpLCAhY3cpO1xuICAgICAgICAgIGNvbnRleHQuYXJjKHQxLmN4LCB0MS5jeSwgcmMxLCBhdGFuMih0MS55MTEsIHQxLngxMSksIGF0YW4yKHQxLnkwMSwgdDEueDAxKSwgIWN3KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBPciBpcyB0aGUgb3V0ZXIgcmluZyBqdXN0IGEgY2lyY3VsYXIgYXJjP1xuICAgICAgZWxzZSBjb250ZXh0Lm1vdmVUbyh4MDEsIHkwMSksIGNvbnRleHQuYXJjKDAsIDAsIHIxLCBhMDEsIGExMSwgIWN3KTtcblxuICAgICAgLy8gSXMgdGhlcmUgbm8gaW5uZXIgcmluZywgYW5kIGl04oCZcyBhIGNpcmN1bGFyIHNlY3Rvcj9cbiAgICAgIC8vIE9yIHBlcmhhcHMgaXTigJlzIGFuIGFubnVsYXIgc2VjdG9yIGNvbGxhcHNlZCBkdWUgdG8gcGFkZGluZz9cbiAgICAgIGlmICghKHIwID4gZXBzaWxvbikgfHwgIShkYTAgPiBlcHNpbG9uKSkgY29udGV4dC5saW5lVG8oeDEwLCB5MTApO1xuXG4gICAgICAvLyBEb2VzIHRoZSBzZWN0b3LigJlzIGlubmVyIHJpbmcgKG9yIHBvaW50KSBoYXZlIHJvdW5kZWQgY29ybmVycz9cbiAgICAgIGVsc2UgaWYgKHJjMCA+IGVwc2lsb24pIHtcbiAgICAgICAgdDAgPSBjb3JuZXJUYW5nZW50cyh4MTAsIHkxMCwgeDExLCB5MTEsIHIwLCAtcmMwLCBjdyk7XG4gICAgICAgIHQxID0gY29ybmVyVGFuZ2VudHMoeDAxLCB5MDEsIHgwMCwgeTAwLCByMCwgLXJjMCwgY3cpO1xuXG4gICAgICAgIGNvbnRleHQubGluZVRvKHQwLmN4ICsgdDAueDAxLCB0MC5jeSArIHQwLnkwMSk7XG5cbiAgICAgICAgLy8gSGF2ZSB0aGUgY29ybmVycyBtZXJnZWQ/XG4gICAgICAgIGlmIChyYzAgPCByYykgY29udGV4dC5hcmModDAuY3gsIHQwLmN5LCByYzAsIGF0YW4yKHQwLnkwMSwgdDAueDAxKSwgYXRhbjIodDEueTAxLCB0MS54MDEpLCAhY3cpO1xuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgZHJhdyB0aGUgdHdvIGNvcm5lcnMgYW5kIHRoZSByaW5nLlxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb250ZXh0LmFyYyh0MC5jeCwgdDAuY3ksIHJjMCwgYXRhbjIodDAueTAxLCB0MC54MDEpLCBhdGFuMih0MC55MTEsIHQwLngxMSksICFjdyk7XG4gICAgICAgICAgY29udGV4dC5hcmMoMCwgMCwgcjAsIGF0YW4yKHQwLmN5ICsgdDAueTExLCB0MC5jeCArIHQwLngxMSksIGF0YW4yKHQxLmN5ICsgdDEueTExLCB0MS5jeCArIHQxLngxMSksIGN3KTtcbiAgICAgICAgICBjb250ZXh0LmFyYyh0MS5jeCwgdDEuY3ksIHJjMCwgYXRhbjIodDEueTExLCB0MS54MTEpLCBhdGFuMih0MS55MDEsIHQxLngwMSksICFjdyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gT3IgaXMgdGhlIGlubmVyIHJpbmcganVzdCBhIGNpcmN1bGFyIGFyYz9cbiAgICAgIGVsc2UgY29udGV4dC5hcmMoMCwgMCwgcjAsIGExMCwgYTAwLCBjdyk7XG4gICAgfVxuXG4gICAgY29udGV4dC5jbG9zZVBhdGgoKTtcblxuICAgIGlmIChidWZmZXIpIHJldHVybiBjb250ZXh0ID0gbnVsbCwgYnVmZmVyICsgXCJcIiB8fCBudWxsO1xuICB9XG5cbiAgYXJjLmNlbnRyb2lkID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSAoK2lubmVyUmFkaXVzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgKyArb3V0ZXJSYWRpdXMuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgLyAyLFxuICAgICAgICBhID0gKCtzdGFydEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgKyArZW5kQW5nbGUuYXBwbHkodGhpcywgYXJndW1lbnRzKSkgLyAyIC0gcGkgLyAyO1xuICAgIHJldHVybiBbY29zKGEpICogciwgc2luKGEpICogcl07XG4gIH07XG5cbiAgYXJjLmlubmVyUmFkaXVzID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGlubmVyUmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBpbm5lclJhZGl1cztcbiAgfTtcblxuICBhcmMub3V0ZXJSYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAob3V0ZXJSYWRpdXMgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IG91dGVyUmFkaXVzO1xuICB9O1xuXG4gIGFyYy5jb3JuZXJSYWRpdXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoY29ybmVyUmFkaXVzID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBjb3JuZXJSYWRpdXM7XG4gIH07XG5cbiAgYXJjLnBhZFJhZGl1cyA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRSYWRpdXMgPSBfID09IG51bGwgPyBudWxsIDogdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIGFyYykgOiBwYWRSYWRpdXM7XG4gIH07XG5cbiAgYXJjLnN0YXJ0QW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc3RhcnRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogc3RhcnRBbmdsZTtcbiAgfTtcblxuICBhcmMuZW5kQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoZW5kQW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgYXJjKSA6IGVuZEFuZ2xlO1xuICB9O1xuXG4gIGFyYy5wYWRBbmdsZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChwYWRBbmdsZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBhcmMpIDogcGFkQW5nbGU7XG4gIH07XG5cbiAgYXJjLmNvbnRleHQgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoKGNvbnRleHQgPSBfID09IG51bGwgPyBudWxsIDogXyksIGFyYykgOiBjb250ZXh0O1xuICB9O1xuXG4gIHJldHVybiBhcmM7XG59XG4iLCJleHBvcnQgdmFyIHNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbih4KSB7XG4gIHJldHVybiB0eXBlb2YgeCA9PT0gXCJvYmplY3RcIiAmJiBcImxlbmd0aFwiIGluIHhcbiAgICA/IHggLy8gQXJyYXksIFR5cGVkQXJyYXksIE5vZGVMaXN0LCBhcnJheS1saWtlXG4gICAgOiBBcnJheS5mcm9tKHgpOyAvLyBNYXAsIFNldCwgaXRlcmFibGUsIHN0cmluZywgb3IgYW55dGhpbmcgZWxzZVxufVxuIiwiZnVuY3Rpb24gTGluZWFyKGNvbnRleHQpIHtcbiAgdGhpcy5fY29udGV4dCA9IGNvbnRleHQ7XG59XG5cbkxpbmVhci5wcm90b3R5cGUgPSB7XG4gIGFyZWFTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fbGluZSA9IDA7XG4gIH0sXG4gIGFyZWFFbmQ6IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuX2xpbmUgPSBOYU47XG4gIH0sXG4gIGxpbmVTdGFydDogZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5fcG9pbnQgPSAwO1xuICB9LFxuICBsaW5lRW5kOiBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5fbGluZSB8fCAodGhpcy5fbGluZSAhPT0gMCAmJiB0aGlzLl9wb2ludCA9PT0gMSkpIHRoaXMuX2NvbnRleHQuY2xvc2VQYXRoKCk7XG4gICAgdGhpcy5fbGluZSA9IDEgLSB0aGlzLl9saW5lO1xuICB9LFxuICBwb2ludDogZnVuY3Rpb24oeCwgeSkge1xuICAgIHggPSAreCwgeSA9ICt5O1xuICAgIHN3aXRjaCAodGhpcy5fcG9pbnQpIHtcbiAgICAgIGNhc2UgMDogdGhpcy5fcG9pbnQgPSAxOyB0aGlzLl9saW5lID8gdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSkgOiB0aGlzLl9jb250ZXh0Lm1vdmVUbyh4LCB5KTsgYnJlYWs7XG4gICAgICBjYXNlIDE6IHRoaXMuX3BvaW50ID0gMjsgLy8gcHJvY2VlZFxuICAgICAgZGVmYXVsdDogdGhpcy5fY29udGV4dC5saW5lVG8oeCwgeSk7IGJyZWFrO1xuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24oY29udGV4dCkge1xuICByZXR1cm4gbmV3IExpbmVhcihjb250ZXh0KTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiB4KHApIHtcbiAgcmV0dXJuIHBbMF07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB5KHApIHtcbiAgcmV0dXJuIHBbMV07XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbihhLCBiKSB7XG4gIHJldHVybiBiIDwgYSA/IC0xIDogYiA+IGEgPyAxIDogYiA+PSBhID8gMCA6IE5hTjtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGQpIHtcbiAgcmV0dXJuIGQ7XG59XG4iLCJpbXBvcnQgeyBSZW5kZXJJbmZvLCBTaXplLCBUZXh0VmFsdWVNYXAsIFRyYW5zZm9ybSB9IGZyb20gXCIuL2RhdGFcIjtcclxuaW1wb3J0IHsgVEZpbGUsIFRGb2xkZXIsIG5vcm1hbGl6ZVBhdGggfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0IHsgVmFsdWVUeXBlIH0gZnJvbSBcIi4vZGF0YVwiO1xyXG5pbXBvcnQgKiBhcyBkMyBmcm9tIFwiZDNcIjtcclxuaW1wb3J0IHsgTW9tZW50LCBEdXJhdGlvbiB9IGZyb20gXCJtb21lbnRcIjtcclxuXHJcbi8vIGRhdGUgYW5kIHRpbWVcclxuZnVuY3Rpb24gbWFrZVRpbWVGb3JtYXQoKSB7XHJcbiAgICAvL0hIOiAyLWRpZ2l0cyBob3VycyAoMjQgaG91ciB0aW1lKSBmcm9tIDAgdG8gMjMsIEg6LCAyLWRpZ2l0cyBob3VycyAoMjQgaG91ciB0aW1lKSBmcm9tIDAgdG8gMjMgd2l0aG91dCBsZWFkaW5nIDBcclxuICAgIC8vIGhoOiAyLWRpZ2l0cyBob3VycyAoMTIgaG91ciB0aW1lKSwgaDogMi1kaWdpdHMgaG91cnMgKDEyIGhvdXIgdGltZSkgd2l0aG91dCBsZWFkaW5nIDBcclxuICAgIC8vIGEvQTogYW0gb3IgcG1cclxuICAgIGNvbnN0IGZtdEhvdXJzID0gW1wiSEhcIiwgXCJIXCIsIFwiaGhcIiwgXCJoXCJdO1xyXG4gICAgLy9tbTogMi1kaWdpdHMgbWludXRlcywgbTogMi1kaWdpdHMgbWludXRlcyB3aXRob3V0IGxlYWRpbmcgemVyb1xyXG4gICAgY29uc3QgZm10TWlucyA9IFtcIm1tXCIsIFwibVwiXTtcclxuICAgIC8vIHNzOiAyLWRpZ2l0cyBzZWNvbmRzLCBzOiAyLWRpZ2l0cyBzZWNvbmRzIHdpdGhvdXQgbGVhZGluZyB6ZXJvXHJcbiAgICAvLyBjYW4gYmUgZW1wdHlcclxuICAgIGNvbnN0IGZtdFNlY3MgPSBbXCJzc1wiLCBcInNcIiwgXCJcIl07XHJcblxyXG4gICAgbGV0IHRpbWVGb3JtYXQgPSBbXTtcclxuICAgIGZvciAobGV0IGZtdEhvdXIgb2YgZm10SG91cnMpIHtcclxuICAgICAgICBmb3IgKGxldCBmbXRNaW4gb2YgZm10TWlucykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBmbXRTZWMgb2YgZm10U2Vjcykge1xyXG4gICAgICAgICAgICAgICAgbGV0IGZtdCA9IGAke2ZtdEhvdXJ9OiR7Zm10TWlufWA7XHJcbiAgICAgICAgICAgICAgICBpZiAoZm10U2VjICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZm10ICs9IGA6JHtmbXRTZWN9YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChmbXRIb3VyLmNvbnRhaW5zKFwiaFwiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZtdCArPSBcIiBhXCI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aW1lRm9ybWF0LnB1c2goZm10KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vY29uc29sZS5sb2codGltZUZvcm1hdCk7XHJcbiAgICByZXR1cm4gdGltZUZvcm1hdDtcclxufVxyXG5jb25zdCB0aW1lRm9ybWF0ID0gbWFrZVRpbWVGb3JtYXQoKTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlU3RyaW5nRnJvbUlucHV0U3RyaW5nKFxyXG4gICAgaW5wdXRTdHJpbmc6IHN0cmluZyxcclxuICAgIGRhdGVGb3JtYXRQcmVmaXg6IHN0cmluZyxcclxuICAgIGRhdGVGb3JtYXRTdWZmaXg6IHN0cmluZ1xyXG4pIHtcclxuICAgIGlmICghZGF0ZUZvcm1hdFByZWZpeCAmJiAhZGF0ZUZvcm1hdFN1ZmZpeCkgcmV0dXJuIGlucHV0U3RyaW5nO1xyXG5cclxuICAgIGxldCBkYXRlU3RyaW5nID0gaW5wdXRTdHJpbmc7XHJcbiAgICBpZiAoZGF0ZVN0cmluZy5zdGFydHNXaXRoKFwiXlwiKSkge1xyXG4gICAgICAgIGRhdGVTdHJpbmcgPSBkYXRlU3RyaW5nLnNsaWNlKDEpO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coZGF0ZVN0cmluZyk7XHJcblxyXG4gICAgaWYgKGRhdGVGb3JtYXRQcmVmaXgpIHtcclxuICAgICAgICBsZXQgc3RyUmVnZXggPSBcIl4oXCIgKyBkYXRlRm9ybWF0UHJlZml4ICsgXCIpXCI7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coc3RyUmVnZXgpO1xyXG4gICAgICAgIGxldCByZWdleCA9IG5ldyBSZWdFeHAoc3RyUmVnZXgsIFwiZ21cIik7XHJcbiAgICAgICAgaWYgKHJlZ2V4LnRlc3QoZGF0ZVN0cmluZykpIHtcclxuICAgICAgICAgICAgZGF0ZVN0cmluZyA9IGRhdGVTdHJpbmcucmVwbGFjZShyZWdleCwgXCJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coZGF0ZVN0cmluZyk7XHJcblxyXG4gICAgaWYgKGRhdGVGb3JtYXRTdWZmaXgpIHtcclxuICAgICAgICBsZXQgc3RyUmVnZXggPSBcIihcIiArIGRhdGVGb3JtYXRTdWZmaXggKyBcIikkXCI7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coc3RyUmVnZXgpO1xyXG4gICAgICAgIGxldCByZWdleCA9IG5ldyBSZWdFeHAoc3RyUmVnZXgsIFwiZ21cIik7XHJcbiAgICAgICAgaWYgKHJlZ2V4LnRlc3QoZGF0ZVN0cmluZykpIHtcclxuICAgICAgICAgICAgZGF0ZVN0cmluZyA9IGRhdGVTdHJpbmcucmVwbGFjZShyZWdleCwgXCJcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coZGF0ZVN0cmluZyk7XHJcblxyXG4gICAgcmV0dXJuIGRhdGVTdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBzdHJUb0RhdGUoc3RyRGF0ZTogc3RyaW5nLCBkYXRlRm9ybWF0OiBzdHJpbmcpOiBNb21lbnQge1xyXG4gICAgbGV0IGZvcm1hdDogYW55ID0gZGF0ZUZvcm1hdDtcclxuXHJcbiAgICBpZiAoXHJcbiAgICAgICAgc3RyRGF0ZS5sZW5ndGggPiA0ICYmXHJcbiAgICAgICAgc3RyRGF0ZS5zdGFydHNXaXRoKFwiW1tcIikgJiZcclxuICAgICAgICBzdHJEYXRlLmVuZHNXaXRoKFwiXV1cIilcclxuICAgICkge1xyXG4gICAgICAgIHN0ckRhdGUgPSBzdHJEYXRlLnN1YnN0cmluZygyLCBzdHJEYXRlLmxlbmd0aCAtIDIpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChkYXRlRm9ybWF0LnRvTG93ZXJDYXNlKCkgPT09IFwiaXNvLTg2MDFcIikge1xyXG4gICAgICAgIGZvcm1hdCA9IHdpbmRvdy5tb21lbnQuSVNPXzg2MDE7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRhdGUgPSB3aW5kb3cubW9tZW50KHN0ckRhdGUsIGZvcm1hdCwgdHJ1ZSk7XHJcblxyXG4gICAgLy8gc3RpcCB0aW1lXHJcbiAgICBkYXRlID0gZGF0ZS5zdGFydE9mKFwiZGF5XCIpO1xyXG5cclxuICAgIHJldHVybiBkYXRlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoXHJcbiAgICBzdHJEdXJhdGlvbjogc3RyaW5nLFxyXG4gICAgdW5pdHM6IEFycmF5PHN0cmluZz4sXHJcbiAgICByZW1vdmVQYXR0ZXJuOiBib29sZWFuID0gdHJ1ZVxyXG4pOiBbbnVtYmVyLCBzdHJpbmddIHtcclxuICAgIGlmICghc3RyRHVyYXRpb24gfHwgIXVuaXRzIHx8IHVuaXRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybiBbbnVsbCwgc3RyRHVyYXRpb25dO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB2YWx1ZSA9IG51bGw7XHJcbiAgICBjb25zdCBzdHJSZWdleCA9IFwiXig/PHZhbHVlPlswLTldKykoXCIgKyB1bml0cy5qb2luKFwifFwiKSArIFwiKSRcIjtcclxuICAgIC8vIGNvbnNvbGUubG9nKHN0clJlZ2V4KTtcclxuICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnbVwiKTtcclxuICAgIGxldCBtYXRjaCA9IHJlZ2V4LmV4ZWMoc3RyRHVyYXRpb24pO1xyXG4gICAgaWYgKFxyXG4gICAgICAgIG1hdGNoICYmXHJcbiAgICAgICAgdHlwZW9mIG1hdGNoLmdyb3VwcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxyXG4gICAgICAgIHR5cGVvZiBtYXRjaC5ncm91cHMudmFsdWUgIT09IFwidW5kZWZpbmVkXCJcclxuICAgICkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1hdGNoKTtcclxuICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQobWF0Y2guZ3JvdXBzLnZhbHVlKTtcclxuICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKHZhbHVlKSAmJiAhTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xyXG4gICAgICAgICAgICBpZiAocmVtb3ZlUGF0dGVybikge1xyXG4gICAgICAgICAgICAgICAgc3RyRHVyYXRpb24gPSBzdHJEdXJhdGlvbi5yZXBsYWNlKHJlZ2V4LCBcIlwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHN0ckR1cmF0aW9uKTtcclxuICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZSwgc3RyRHVyYXRpb25dO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gW251bGwsIHN0ckR1cmF0aW9uXTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRHVyYXRpb25TdHJpbmcoc3RyRHVyYXRpb246IHN0cmluZykge1xyXG4gICAgLy9kdXJhdGlvbiBzdHJpbmcgZm9ybWF0OlxyXG4gICAgLy95ZWFyICh5ZWFycywgeSwgWSksXHJcbiAgICAvL21vbnRoIChtb250aHMsIE0pLCAvLyBtIHdpbGwgY29uZmxpY3Qgd2l0aCBtaW51dGUhISFcclxuICAgIC8vd2VlayAod2Vla3MsIHcsIFcpLFxyXG4gICAgLy9kYXkgKGRheXMsIGQsIEQpLFxyXG4gICAgLy9ob3VyIChob3VycywgaCwgSCksXHJcbiAgICAvL21pbnV0ZSAobWludXRlcywgbSksIC8vIE0gd2lsbCBjb25mbGljdCB3aXRoIG1vbnRoISEhXHJcbiAgICAvL3NlY29uZCAoc2Vjb25kcywgcywgUylcclxuICAgIGlmICghc3RyRHVyYXRpb24pIHJldHVybiBudWxsO1xyXG5cclxuICAgIGxldCBkdXJhdGlvbjogRHVyYXRpb24gPSB3aW5kb3cubW9tZW50LmR1cmF0aW9uKDApO1xyXG4gICAgbGV0IGhhc1ZhbHVlID0gZmFsc2U7XHJcblxyXG4gICAgbGV0IG5lZ2F0aXZlVmFsdWUgPSBmYWxzZTtcclxuICAgIGlmIChzdHJEdXJhdGlvbi5zdGFydHNXaXRoKFwiK1wiKSkge1xyXG4gICAgICAgIG5lZ2F0aXZlVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICBzdHJEdXJhdGlvbiA9IHN0ckR1cmF0aW9uLnN1YnN0cmluZygxKTtcclxuICAgIH1cclxuICAgIGlmIChzdHJEdXJhdGlvbi5zdGFydHNXaXRoKFwiLVwiKSkge1xyXG4gICAgICAgIG5lZ2F0aXZlVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgIHN0ckR1cmF0aW9uID0gc3RyRHVyYXRpb24uc3Vic3RyaW5nKDEpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB5ZWFyVmFsdWUgPSBudWxsO1xyXG4gICAgW3llYXJWYWx1ZSwgc3RyRHVyYXRpb25dID0gZXh0cmFjdFZhbHVlRnJvbUR1cmF0aW9uU3RyaW5nKHN0ckR1cmF0aW9uLCBbXHJcbiAgICAgICAgXCJ5ZWFyXCIsXHJcbiAgICAgICAgXCJ5ZWFyc1wiLFxyXG4gICAgICAgIFwiWVwiLFxyXG4gICAgICAgIFwieVwiLFxyXG4gICAgXSk7XHJcbiAgICBpZiAoeWVhclZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKG5lZ2F0aXZlVmFsdWUpIHtcclxuICAgICAgICAgICAgeWVhclZhbHVlICo9IC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkdXJhdGlvbi5hZGQoeWVhclZhbHVlLCBcInllYXJzXCIpO1xyXG4gICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbW9udGhWYWx1ZSA9IG51bGw7XHJcbiAgICBbbW9udGhWYWx1ZSwgc3RyRHVyYXRpb25dID0gZXh0cmFjdFZhbHVlRnJvbUR1cmF0aW9uU3RyaW5nKHN0ckR1cmF0aW9uLCBbXHJcbiAgICAgICAgXCJtb250aFwiLFxyXG4gICAgICAgIFwibW9udGhzXCIsXHJcbiAgICAgICAgXCJNXCIsXHJcbiAgICBdKTtcclxuICAgIGlmIChtb250aFZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKG5lZ2F0aXZlVmFsdWUpIHtcclxuICAgICAgICAgICAgbW9udGhWYWx1ZSAqPSAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZHVyYXRpb24uYWRkKG1vbnRoVmFsdWUsIFwibW9udGhzXCIpO1xyXG4gICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgd2Vla1ZhbHVlID0gbnVsbDtcclxuICAgIFt3ZWVrVmFsdWUsIHN0ckR1cmF0aW9uXSA9IGV4dHJhY3RWYWx1ZUZyb21EdXJhdGlvblN0cmluZyhzdHJEdXJhdGlvbiwgW1xyXG4gICAgICAgIFwid2Vla1wiLFxyXG4gICAgICAgIFwid2Vla3NcIixcclxuICAgICAgICBcIldcIixcclxuICAgICAgICBcIndcIixcclxuICAgIF0pO1xyXG4gICAgaWYgKHdlZWtWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChuZWdhdGl2ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgIHdlZWtWYWx1ZSAqPSAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZHVyYXRpb24uYWRkKHdlZWtWYWx1ZSwgXCJ3ZWVrc1wiKTtcclxuICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRheVZhbHVlID0gbnVsbDtcclxuICAgIFtkYXlWYWx1ZSwgc3RyRHVyYXRpb25dID0gZXh0cmFjdFZhbHVlRnJvbUR1cmF0aW9uU3RyaW5nKHN0ckR1cmF0aW9uLCBbXHJcbiAgICAgICAgXCJkYXlcIixcclxuICAgICAgICBcImRheXNcIixcclxuICAgICAgICBcIkRcIixcclxuICAgICAgICBcImRcIixcclxuICAgIF0pO1xyXG4gICAgaWYgKGRheVZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKG5lZ2F0aXZlVmFsdWUpIHtcclxuICAgICAgICAgICAgZGF5VmFsdWUgKj0gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGR1cmF0aW9uLmFkZChkYXlWYWx1ZSwgXCJkYXlzXCIpO1xyXG4gICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaG91clZhbHVlID0gbnVsbDtcclxuICAgIFtob3VyVmFsdWUsIHN0ckR1cmF0aW9uXSA9IGV4dHJhY3RWYWx1ZUZyb21EdXJhdGlvblN0cmluZyhzdHJEdXJhdGlvbiwgW1xyXG4gICAgICAgIFwiaG91clwiLFxyXG4gICAgICAgIFwiaG91cnNcIixcclxuICAgICAgICBcIkhcIixcclxuICAgICAgICBcImhcIixcclxuICAgIF0pO1xyXG4gICAgaWYgKGhvdXJWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChuZWdhdGl2ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgIGhvdXJWYWx1ZSAqPSAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZHVyYXRpb24uYWRkKGhvdXJWYWx1ZSwgXCJob3Vyc1wiKTtcclxuICAgICAgICBoYXNWYWx1ZSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG1pbnV0ZVZhbHVlID0gbnVsbDtcclxuICAgIFttaW51dGVWYWx1ZSwgc3RyRHVyYXRpb25dID0gZXh0cmFjdFZhbHVlRnJvbUR1cmF0aW9uU3RyaW5nKHN0ckR1cmF0aW9uLCBbXHJcbiAgICAgICAgXCJtaW51dGVcIixcclxuICAgICAgICBcIm1pbnV0ZXNcIixcclxuICAgICAgICBcIm1cIixcclxuICAgIF0pO1xyXG4gICAgaWYgKG1pbnV0ZVZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKG5lZ2F0aXZlVmFsdWUpIHtcclxuICAgICAgICAgICAgbWludXRlVmFsdWUgKj0gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGR1cmF0aW9uLmFkZChtaW51dGVWYWx1ZSwgXCJtaW51dGVzXCIpO1xyXG4gICAgICAgIGhhc1ZhbHVlID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgc2Vjb25kVmFsdWUgPSBudWxsO1xyXG4gICAgW3NlY29uZFZhbHVlLCBzdHJEdXJhdGlvbl0gPSBleHRyYWN0VmFsdWVGcm9tRHVyYXRpb25TdHJpbmcoc3RyRHVyYXRpb24sIFtcclxuICAgICAgICBcInNlY29uZFwiLFxyXG4gICAgICAgIFwic2Vjb25kc1wiLFxyXG4gICAgICAgIFwiU1wiLFxyXG4gICAgICAgIFwic1wiLFxyXG4gICAgXSk7XHJcbiAgICBpZiAoc2Vjb25kVmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICBpZiAobmVnYXRpdmVWYWx1ZSkge1xyXG4gICAgICAgICAgICBzZWNvbmRWYWx1ZSAqPSAtMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZHVyYXRpb24uYWRkKHNlY29uZFZhbHVlLCBcInNlY29uZHNcIik7XHJcbiAgICAgICAgaGFzVmFsdWUgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghaGFzVmFsdWUpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIGR1cmF0aW9uO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZUJ5RHVyYXRpb25Ub1RvZGF5KFxyXG4gICAgcmVsRGF0ZVN0cmluZzogc3RyaW5nLFxyXG4gICAgZGF0ZUZvcm1hdDogc3RyaW5nXHJcbik6IE1vbWVudCB7XHJcbiAgICBsZXQgZGF0ZSA9IG51bGw7XHJcbiAgICBsZXQgZHVyYXRpb24gPSBwYXJzZUR1cmF0aW9uU3RyaW5nKHJlbERhdGVTdHJpbmcpO1xyXG4gICAgaWYgKGR1cmF0aW9uICYmIHdpbmRvdy5tb21lbnQuaXNEdXJhdGlvbihkdXJhdGlvbikpIHtcclxuICAgICAgICBkYXRlID0gZ2V0RGF0ZVRvZGF5KGRhdGVGb3JtYXQpO1xyXG4gICAgICAgIGRhdGUgPSBkYXRlLmFkZChkdXJhdGlvbik7XHJcblxyXG4gICAgICAgIGlmIChkYXRlICYmIGRhdGUuaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGRhdGVUb1N0cihkYXRlOiBNb21lbnQsIGRhdGVGb3JtYXQ6IHN0cmluZyk6IHN0cmluZyB7XHJcbiAgICBpZiAodHlwZW9mIGRhdGUgPT09IFwidW5kZWZpbmVkXCIgfHwgZGF0ZSA9PT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgaWYgKGRhdGVGb3JtYXQudG9Mb3dlckNhc2UoKSA9PT0gXCJpc28tODYwMVwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGRhdGUuZm9ybWF0KCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGF0ZS5mb3JtYXQoZGF0ZUZvcm1hdCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlRnJvbVVuaXhUaW1lKFxyXG4gICAgdW5peFRpbWU6IG51bWJlcixcclxuICAgIGRhdGVGb3JtYXQ6IHN0cmluZ1xyXG4pOiBNb21lbnQge1xyXG4gICAgbGV0IGRhdGUgPSB3aW5kb3cubW9tZW50KHVuaXhUaW1lKTtcclxuICAgIGxldCBzdHJEYXRlID0gZGF0ZVRvU3RyKGRhdGUsIGRhdGVGb3JtYXQpO1xyXG4gICAgcmV0dXJuIHN0clRvRGF0ZShzdHJEYXRlLCBkYXRlRm9ybWF0KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVUb2RheShkYXRlRm9ybWF0OiBzdHJpbmcpIHtcclxuICAgIGxldCB0b2RheSA9IHdpbmRvdy5tb21lbnQoKTtcclxuICAgIGxldCBzdHJUb2RheSA9IGRhdGVUb1N0cih0b2RheSwgZGF0ZUZvcm1hdCk7XHJcbiAgICByZXR1cm4gc3RyVG9EYXRlKHN0clRvZGF5LCBkYXRlRm9ybWF0KTtcclxufVxyXG5cclxuLy8gaHR0cDovL2pzZmlkZGxlLm5ldC9hbG5pdGFrL2hFc3lzL1xyXG5leHBvcnQgZnVuY3Rpb24gZGVlcFZhbHVlKG9iajogYW55LCBzdHI6IHN0cmluZykge1xyXG4gICAgc3RyID0gc3RyLnJlcGxhY2UoL15cXC4vLCBcIlwiKTtcclxuICAgIHZhciBhID0gc3RyLnNwbGl0KFwiLlwiKTtcclxuICAgIGZvciAodmFyIGkgPSAwLCBuID0gYS5sZW5ndGg7IGkgPCBuOyArK2kpIHtcclxuICAgICAgICB2YXIgayA9IGFbaV07XHJcbiAgICAgICAgaWYgKGsgaW4gb2JqKSB7XHJcbiAgICAgICAgICAgIG9iaiA9IG9ialtrXTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KG9iaikpIHtcclxuICAgICAgICByZXR1cm4gb2JqO1xyXG4gICAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgcmV0dXJuIG9iai50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbi8vIFN0cmluZyBoZWxwZXJzXHJcbmV4cG9ydCBmdW5jdGlvbiB0cmltQnlDaGFyKHN0cjogc3RyaW5nLCBjaGFyOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IGFyciA9IEFycmF5LmZyb20oc3RyKTtcclxuICAgIGNvbnN0IGZpcnN0ID0gYXJyLmZpbmRJbmRleCgoYykgPT4gYyAhPT0gY2hhcik7XHJcbiAgICBjb25zdCBsYXN0ID0gYXJyLnJldmVyc2UoKS5maW5kSW5kZXgoKGMpID0+IGMgIT09IGNoYXIpO1xyXG4gICAgcmV0dXJuIGZpcnN0ID09PSAtMSAmJiBsYXN0ID09PSAtMVxyXG4gICAgICAgID8gc3RyXHJcbiAgICAgICAgOiBzdHIuc3Vic3RyaW5nKGZpcnN0LCBzdHIubGVuZ3RoIC0gbGFzdCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlSW1nVGFnQnlBbHQoaW5wdXQ6IHN0cmluZykge1xyXG4gICAgaWYgKGlucHV0ID09PSBudWxsKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICAvLyA8aW1nW14+XSo/YWx0XFxzKj1cXHMqW1wiXCInXT8oPzxlbW9qaT5bXidcIlwiID5dKz8pWyAnXCJcIl1bXj5dKj8+XHJcbiAgICBsZXQgc3RyUmVnZXggPVxyXG4gICAgICAgICc8aW1nW14+XSo/YWx0XFxcXHMqPVxcXFxzKltcIlwiXFwnXT8oPzxlbW9qaT5bXlxcJ1wiXCIgPl0rPylbIFxcJ1wiXCJdW14+XSo/Pic7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhzdHJSZWdleCk7XHJcbiAgICBsZXQgcmVnZXggPSBuZXcgUmVnRXhwKHN0clJlZ2V4LCBcImdcIik7XHJcblxyXG4gICAgbGV0IG91dHB1dCA9IGlucHV0LnJlcGxhY2UocmVnZXgsICguLi5hcmdzKSA9PiB7XHJcbiAgICAgICAgbGV0IGdyb3VwcyA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcclxuICAgICAgICBpZiAoZ3JvdXBzICYmIGdyb3Vwcy5lbW9qaSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZ3JvdXBzLmVtb2ppLnRyaW0oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICB9KTtcclxuXHJcbiAgICByZXR1cm4gb3V0cHV0O1xyXG59XHJcbi8vIFBhcnNpbmdcclxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRmxvYXRGcm9tQW55KFxyXG4gICAgdG9QYXJzZTogYW55LFxyXG4gICAgdGV4dFZhbHVlTWFwOiBUZXh0VmFsdWVNYXAgPSBudWxsXHJcbikge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJwYXJzZUZsb2F0RnJvbUFueVwiKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHRvUGFyc2UpO1xyXG5cclxuICAgIGxldCB2YWx1ZSA9IG51bGw7XHJcbiAgICBsZXQgdmFsdWVUeXBlID0gVmFsdWVUeXBlLk51bWJlcjtcclxuICAgIGlmICh0eXBlb2YgdG9QYXJzZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIC8vIHRpbWUgdmFsdWVcclxuICAgICAgICBpZiAodG9QYXJzZS5pbmNsdWRlcyhcIjpcIikpIHtcclxuICAgICAgICAgICAgbGV0IG5lZ2F0aXZlVmFsdWUgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHRvUGFyc2Uuc3RhcnRzV2l0aChcIi1cIikpIHtcclxuICAgICAgICAgICAgICAgIG5lZ2F0aXZlVmFsdWUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgdG9QYXJzZSA9IHRvUGFyc2Uuc3Vic3RyaW5nKDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCB0aW1lVmFsdWUgPSB3aW5kb3cubW9tZW50KHRvUGFyc2UsIHRpbWVGb3JtYXQsIHRydWUpO1xyXG4gICAgICAgICAgICBpZiAodGltZVZhbHVlLmlzVmFsaWQoKSkge1xyXG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0aW1lVmFsdWUuZGlmZihcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cubW9tZW50KFwiMDA6MDBcIiwgXCJISDptbVwiLCB0cnVlKSxcclxuICAgICAgICAgICAgICAgICAgICBcInNlY29uZHNcIlxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmIChuZWdhdGl2ZVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAtMSAqIHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdmFsdWVUeXBlID0gVmFsdWVUeXBlLlRpbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGV4dFZhbHVlTWFwKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYW55TWF0Y2ggPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0ZXh0VmFsdWVNYXApIGFzIEFycmF5PGtleW9mIHN0cmluZz47XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrZXkgb2Yga2V5cykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZWdleCA9IG5ldyBSZWdFeHAoa2V5LCBcImdtXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh0b1BhcnNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXgudGVzdCh0b1BhcnNlKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTnVtYmVyLmlzTnVtYmVyKHRleHRWYWx1ZU1hcFtrZXldKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdHJSZXBsYWNlZFZhbHVlID0gdGV4dFZhbHVlTWFwW2tleV0udG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvUGFyc2UgPSB0b1BhcnNlLnJlcGxhY2UocmVnZXgsIHN0clJlcGxhY2VkVmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2codG9QYXJzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnlNYXRjaCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHBhcnNlRmxvYXQodG9QYXJzZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VGbG9hdCh0b1BhcnNlKTtcclxuICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOYU4odmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdG9QYXJzZSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgIHZhbHVlID0gdG9QYXJzZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4geyB0eXBlOiB2YWx1ZVR5cGUsIHZhbHVlOiB2YWx1ZSB9O1xyXG59XHJcblxyXG4vLyBDaGFydCBoZWxwZXJzXHJcbmV4cG9ydCBmdW5jdGlvbiBtZWFzdXJlVGV4dFNpemUoXHJcbiAgICB0ZXh0OiBzdHJpbmcsXHJcbiAgICBzdHlsZUNsYXNzOiBzdHJpbmcgPSBcIlwiLFxyXG4gICAgcm90YXRlOiBzdHJpbmcgPSBcIlwiXHJcbik6IFNpemUge1xyXG4gICAgdmFyIGNvbnRhaW5lciA9IGQzLnNlbGVjdChcImJvZHlcIikuYXBwZW5kKFwic3ZnXCIpO1xyXG4gICAgbGV0IHRleHRCbG9jayA9IGNvbnRhaW5lclxyXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgLnRleHQodGV4dClcclxuICAgICAgICAuYXR0cihcInhcIiwgLTk5OTk5KVxyXG4gICAgICAgIC5hdHRyKFwieVwiLCAtOTk5OTkpO1xyXG4gICAgaWYgKHN0eWxlQ2xhc3MpIHtcclxuICAgICAgICB0ZXh0QmxvY2suYXR0cihcImNsYXNzXCIsIHN0eWxlQ2xhc3MpO1xyXG4gICAgfVxyXG4gICAgaWYgKHJvdGF0ZSkge1xyXG4gICAgICAgIHRleHRCbG9jay5hdHRyKFwidHJhbnNmb3JtXCIsIFwicm90YXRlKFwiICsgcm90YXRlICsgXCIpXCIpO1xyXG4gICAgfVxyXG4gICAgdmFyIHNpemUgPSBjb250YWluZXIubm9kZSgpLmdldEJCb3goKTtcclxuICAgIGNvbnRhaW5lci5yZW1vdmUoKTtcclxuICAgIHJldHVybiB7IHdpZHRoOiBzaXplLndpZHRoLCBoZWlnaHQ6IHNpemUuaGVpZ2h0IH07XHJcbn1cclxuXHJcbi8vIGRvbVxyXG5leHBvcnQgZnVuY3Rpb24gZXhwYW5kQXJlYShhcmVhOiBhbnksIGFkZFc6IG51bWJlciwgYWRkSDogbnVtYmVyKSB7XHJcbiAgICBsZXQgb3JpV2lkdGggPSBwYXJzZUZsb2F0KGFyZWEuYXR0cihcIndpZHRoXCIpKSB8IDA7XHJcbiAgICBsZXQgb3JpSGVpZ2h0ID0gcGFyc2VGbG9hdChhcmVhLmF0dHIoXCJoZWlnaHRcIikpIHwgMDtcclxuICAgIGxldCBuZXdXaWR0aCA9IG9yaVdpZHRoICsgYWRkVztcclxuICAgIGxldCBuZXdIZWlnaHQgPSBvcmlIZWlnaHQgKyBhZGRIO1xyXG4gICAgYXJlYS5hdHRyKFwid2lkdGhcIiwgbmV3V2lkdGgpO1xyXG4gICAgYXJlYS5hdHRyKFwiaGVpZ2h0XCIsIG5ld0hlaWdodCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBtb3ZlQXJlYShhcmVhOiBhbnksIHNoaWZ0WDogbnVtYmVyLCBzaGlmdFk6IG51bWJlcikge1xyXG4gICAgbGV0IHRyYW5zID0gbmV3IFRyYW5zZm9ybShhcmVhLmF0dHIoXCJ0cmFuc2Zvcm1cIikpO1xyXG4gICAgYXJlYS5hdHRyKFxyXG4gICAgICAgIFwidHJhbnNmb3JtXCIsXHJcbiAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xyXG4gICAgICAgICAgICAodHJhbnMudHJhbnNsYXRlWCArIHNoaWZ0WCkgK1xyXG4gICAgICAgICAgICBcIixcIiArXHJcbiAgICAgICAgICAgICh0cmFucy50cmFuc2xhdGVZICsgc2hpZnRZKSArXHJcbiAgICAgICAgICAgIFwiKVwiXHJcbiAgICApO1xyXG59XHJcblxyXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5mdW5jdGlvbiBjbGVhblRleHQodGV4dDogc3RyaW5nKSB7XHJcbiAgICAvLyBUaGFua3MgdG8gdG9yYW50aW5lXHJcbiAgICAvLyBjb2RlIHNuaXBwZXQgZnJvbSBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90b3JhbnRpbmUvYWY2MzljYmEzYzMyNzYyNTc2ZDY0YzM0ZWZmYWY2MTRcclxuICAgIHRleHQgPSB0ZXh0LnJlcGxhY2UoLyheXFxcXHNcXCopfChcXFxcc1xcKiQpL2dpLCBcIlwiKTsgLy8gcmVtb3ZlIHRoZSBzdGFydCBhbmQgZW5kIHNwYWNlcyBvZiB0aGUgZ2l2ZW4gc3RyaW5nXHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXFsgXFxdezIsfS9naSwgXCIgXCIpOyAvLyByZWR1Y2UgbXVsdGlwbGUgc3BhY2VzIHRvIGEgc2luZ2xlIHNwYWNlXHJcbiAgICB0ZXh0ID0gdGV4dC5yZXBsYWNlKC9cXFxcbiAvLCBcIlxcXFxuXCIpOyAvLyBleGNsdWRlIGEgbmV3IGxpbmUgd2l0aCBhIHN0YXJ0IHNwYWNpbmdcclxuICAgIHJldHVybiB0ZXh0O1xyXG59XHJcblxyXG4vLyBUaGFua3MgdG8gbHVrZWxlcHBhbiBmb3IgcGx1Z2luICdiZXR0ZXItd29yZC1jb3VudCdcclxuLy8gQ29kZSBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9sdWtlbGVwcGFuL2JldHRlci13b3JkLWNvdW50L2Jsb2IvbWFzdGVyL3NyYy9zdGF0cy50c1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0V29yZENvdW50KHRleHQ6IHN0cmluZykge1xyXG4gICAgdGV4dCA9IGNsZWFuVGV4dCh0ZXh0KTtcclxuXHJcbiAgICAvLyBUaGFua3MgdG8gbGlhbWNhbmVcclxuICAgIHZhciBzcGFjZURlbGltaXRlZENoYXJzID1cclxuICAgICAgICAvQS1aYS16XFx1MDBBQVxcdTAwQjVcXHUwMEJBXFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkMxXFx1MDJDNi1cXHUwMkQxXFx1MDJFMC1cXHUwMkU0XFx1MDJFQ1xcdTAyRUVcXHUwMzcwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N1xcdTAzN0EtXFx1MDM3RFxcdTAzN0ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0OEEtXFx1MDUyRlxcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYxLVxcdTA1ODdcXHUwNUQwLVxcdTA1RUFcXHUwNUYwLVxcdTA1RjJcXHUwNjIwLVxcdTA2NEFcXHUwNjZFXFx1MDY2RlxcdTA2NzEtXFx1MDZEM1xcdTA2RDVcXHUwNkU1XFx1MDZFNlxcdTA2RUVcXHUwNkVGXFx1MDZGQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTBcXHUwNzEyLVxcdTA3MkZcXHUwNzRELVxcdTA3QTVcXHUwN0IxXFx1MDdDQS1cXHUwN0VBXFx1MDdGNFxcdTA3RjVcXHUwN0ZBXFx1MDgwMC1cXHUwODE1XFx1MDgxQVxcdTA4MjRcXHUwODI4XFx1MDg0MC1cXHUwODU4XFx1MDhBMC1cXHUwOEI0XFx1MDkwNC1cXHUwOTM5XFx1MDkzRFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcxLVxcdTA5ODBcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOUJEXFx1MDlDRVxcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUxXFx1MDlGMFxcdTA5RjFcXHUwQTA1LVxcdTBBMEFcXHUwQTBGXFx1MEExMFxcdTBBMTMtXFx1MEEyOFxcdTBBMkEtXFx1MEEzMFxcdTBBMzJcXHUwQTMzXFx1MEEzNVxcdTBBMzZcXHUwQTM4XFx1MEEzOVxcdTBBNTktXFx1MEE1Q1xcdTBBNUVcXHUwQTcyLVxcdTBBNzRcXHUwQTg1LVxcdTBBOERcXHUwQThGLVxcdTBBOTFcXHUwQTkzLVxcdTBBQThcXHUwQUFBLVxcdTBBQjBcXHUwQUIyXFx1MEFCM1xcdTBBQjUtXFx1MEFCOVxcdTBBQkRcXHUwQUQwXFx1MEFFMFxcdTBBRTFcXHUwQUY5XFx1MEIwNS1cXHUwQjBDXFx1MEIwRlxcdTBCMTBcXHUwQjEzLVxcdTBCMjhcXHUwQjJBLVxcdTBCMzBcXHUwQjMyXFx1MEIzM1xcdTBCMzUtXFx1MEIzOVxcdTBCM0RcXHUwQjVDXFx1MEI1RFxcdTBCNUYtXFx1MEI2MVxcdTBCNzFcXHUwQjgzXFx1MEI4NS1cXHUwQjhBXFx1MEI4RS1cXHUwQjkwXFx1MEI5Mi1cXHUwQjk1XFx1MEI5OVxcdTBCOUFcXHUwQjlDXFx1MEI5RVxcdTBCOUZcXHUwQkEzXFx1MEJBNFxcdTBCQTgtXFx1MEJBQVxcdTBCQUUtXFx1MEJCOVxcdTBCRDBcXHUwQzA1LVxcdTBDMENcXHUwQzBFLVxcdTBDMTBcXHUwQzEyLVxcdTBDMjhcXHUwQzJBLVxcdTBDMzlcXHUwQzNEXFx1MEM1OC1cXHUwQzVBXFx1MEM2MFxcdTBDNjFcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERVxcdTBDRTBcXHUwQ0UxXFx1MENGMVxcdTBDRjJcXHUwRDA1LVxcdTBEMENcXHUwRDBFLVxcdTBEMTBcXHUwRDEyLVxcdTBEM0FcXHUwRDNEXFx1MEQ0RVxcdTBENUYtXFx1MEQ2MVxcdTBEN0EtXFx1MEQ3RlxcdTBEODUtXFx1MEQ5NlxcdTBEOUEtXFx1MERCMVxcdTBEQjMtXFx1MERCQlxcdTBEQkRcXHUwREMwLVxcdTBEQzZcXHUwRTAxLVxcdTBFMzBcXHUwRTMyXFx1MEUzM1xcdTBFNDAtXFx1MEU0NlxcdTBFODFcXHUwRTgyXFx1MEU4NFxcdTBFODdcXHUwRTg4XFx1MEU4QVxcdTBFOERcXHUwRTk0LVxcdTBFOTdcXHUwRTk5LVxcdTBFOUZcXHUwRUExLVxcdTBFQTNcXHUwRUE1XFx1MEVBN1xcdTBFQUFcXHUwRUFCXFx1MEVBRC1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjQwLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjg4LVxcdTBGOENcXHUxMDAwLVxcdTEwMkFcXHUxMDNGXFx1MTA1MC1cXHUxMDU1XFx1MTA1QS1cXHUxMDVEXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2RS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXFx1MTA4RVxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjVcXHUxM0Y4LVxcdTEzRkRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkYxLVxcdTE2RjhcXHUxNzAwLVxcdTE3MENcXHUxNzBFLVxcdTE3MTFcXHUxNzIwLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0Q3XFx1MTdEQ1xcdTE4MjAtXFx1MTg3N1xcdTE4ODAtXFx1MThBOFxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUVcXHUxOTUwLVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxQTAwLVxcdTFBMTZcXHUxQTIwLVxcdTFBNTRcXHUxQUE3XFx1MUIwNS1cXHUxQjMzXFx1MUI0NS1cXHUxQjRCXFx1MUI4My1cXHUxQkEwXFx1MUJBRVxcdTFCQUZcXHUxQkJBLVxcdTFCRTVcXHUxQzAwLVxcdTFDMjNcXHUxQzRELVxcdTFDNEZcXHUxQzVBLVxcdTFDN0RcXHUxQ0U5LVxcdTFDRUNcXHUxQ0VFLVxcdTFDRjFcXHUxQ0Y1XFx1MUNGNlxcdTFEMDAtXFx1MURCRlxcdTFFMDAtXFx1MUYxNVxcdTFGMTgtXFx1MUYxRFxcdTFGMjAtXFx1MUY0NVxcdTFGNDgtXFx1MUY0RFxcdTFGNTAtXFx1MUY1N1xcdTFGNTlcXHUxRjVCXFx1MUY1RFxcdTFGNUYtXFx1MUY3RFxcdTFGODAtXFx1MUZCNFxcdTFGQjYtXFx1MUZCQ1xcdTFGQkVcXHUxRkMyLVxcdTFGQzRcXHUxRkM2LVxcdTFGQ0NcXHUxRkQwLVxcdTFGRDNcXHUxRkQ2LVxcdTFGREJcXHUxRkUwLVxcdTFGRUNcXHUxRkYyLVxcdTFGRjRcXHUxRkY2LVxcdTFGRkNcXHUyMDcxXFx1MjA3RlxcdTIwOTAtXFx1MjA5Q1xcdTIxMDJcXHUyMTA3XFx1MjEwQS1cXHUyMTEzXFx1MjExNVxcdTIxMTktXFx1MjExRFxcdTIxMjRcXHUyMTI2XFx1MjEyOFxcdTIxMkEtXFx1MjEyRFxcdTIxMkYtXFx1MjEzOVxcdTIxM0MtXFx1MjEzRlxcdTIxNDUtXFx1MjE0OVxcdTIxNEVcXHUyMTgzXFx1MjE4NFxcdTJDMDAtXFx1MkMyRVxcdTJDMzAtXFx1MkM1RVxcdTJDNjAtXFx1MkNFNFxcdTJDRUItXFx1MkNFRVxcdTJDRjJcXHUyQ0YzXFx1MkQwMC1cXHUyRDI1XFx1MkQyN1xcdTJEMkRcXHUyRDMwLVxcdTJENjdcXHUyRDZGXFx1MkQ4MC1cXHUyRDk2XFx1MkRBMC1cXHUyREE2XFx1MkRBOC1cXHUyREFFXFx1MkRCMC1cXHUyREI2XFx1MkRCOC1cXHUyREJFXFx1MkRDMC1cXHUyREM2XFx1MkRDOC1cXHUyRENFXFx1MkREMC1cXHUyREQ2XFx1MkREOC1cXHUyRERFXFx1MkUyRlxcdTMwMDVcXHUzMDA2XFx1MzAzMS1cXHUzMDM1XFx1MzAzQlxcdTMwM0NcXHUzMTA1LVxcdTMxMkRcXHUzMTMxLVxcdTMxOEVcXHUzMUEwLVxcdTMxQkFcXHUzMUYwLVxcdTMxRkZcXHUzNDAwLVxcdTREQjVcXHVBMDAwLVxcdUE0OENcXHVBNEQwLVxcdUE0RkRcXHVBNTAwLVxcdUE2MENcXHVBNjEwLVxcdUE2MUZcXHVBNjJBXFx1QTYyQlxcdUE2NDAtXFx1QTY2RVxcdUE2N0YtXFx1QTY5RFxcdUE2QTAtXFx1QTZFNVxcdUE3MTctXFx1QTcxRlxcdUE3MjItXFx1QTc4OFxcdUE3OEItXFx1QTdBRFxcdUE3QjAtXFx1QTdCN1xcdUE3RjctXFx1QTgwMVxcdUE4MDMtXFx1QTgwNVxcdUE4MDctXFx1QTgwQVxcdUE4MEMtXFx1QTgyMlxcdUE4NDAtXFx1QTg3M1xcdUE4ODItXFx1QThCM1xcdUE4RjItXFx1QThGN1xcdUE4RkJcXHVBOEZEXFx1QTkwQS1cXHVBOTI1XFx1QTkzMC1cXHVBOTQ2XFx1QTk2MC1cXHVBOTdDXFx1QTk4NC1cXHVBOUIyXFx1QTlDRlxcdUE5RTAtXFx1QTlFNFxcdUE5RTYtXFx1QTlFRlxcdUE5RkEtXFx1QTlGRVxcdUFBMDAtXFx1QUEyOFxcdUFBNDAtXFx1QUE0MlxcdUFBNDQtXFx1QUE0QlxcdUFBNjAtXFx1QUE3NlxcdUFBN0FcXHVBQTdFLVxcdUFBQUZcXHVBQUIxXFx1QUFCNVxcdUFBQjZcXHVBQUI5LVxcdUFBQkRcXHVBQUMwXFx1QUFDMlxcdUFBREItXFx1QUFERFxcdUFBRTAtXFx1QUFFQVxcdUFBRjItXFx1QUFGNFxcdUFCMDEtXFx1QUIwNlxcdUFCMDktXFx1QUIwRVxcdUFCMTEtXFx1QUIxNlxcdUFCMjAtXFx1QUIyNlxcdUFCMjgtXFx1QUIyRVxcdUFCMzAtXFx1QUI1QVxcdUFCNUMtXFx1QUI2NVxcdUFCNzAtXFx1QUJFMlxcdUFDMDAtXFx1RDdBM1xcdUQ3QjAtXFx1RDdDNlxcdUQ3Q0ItXFx1RDdGQlxcdUY5MDAtXFx1RkE2RFxcdUZBNzAtXFx1RkFEOVxcdUZCMDAtXFx1RkIwNlxcdUZCMTMtXFx1RkIxN1xcdUZCMURcXHVGQjFGLVxcdUZCMjhcXHVGQjJBLVxcdUZCMzZcXHVGQjM4LVxcdUZCM0NcXHVGQjNFXFx1RkI0MFxcdUZCNDFcXHVGQjQzXFx1RkI0NFxcdUZCNDYtXFx1RkJCMVxcdUZCRDMtXFx1RkQzRFxcdUZENTAtXFx1RkQ4RlxcdUZEOTItXFx1RkRDN1xcdUZERjAtXFx1RkRGQlxcdUZFNzAtXFx1RkU3NFxcdUZFNzYtXFx1RkVGQ1xcdUZGMjEtXFx1RkYzQVxcdUZGNDEtXFx1RkY1QVxcdUZGNjYtXFx1RkZCRVxcdUZGQzItXFx1RkZDN1xcdUZGQ0EtXFx1RkZDRlxcdUZGRDItXFx1RkZEN1xcdUZGREEtXFx1RkZEQy9cclxuICAgICAgICAgICAgLnNvdXJjZTtcclxuICAgIHZhciBub25TcGFjZURlbGltaXRlZFdvcmRzID1cclxuICAgICAgICAvW1xcdTMwNDEtXFx1MzA5NlxcdTMwOUQtXFx1MzA5RlxcdTMwQTEtXFx1MzBGQVxcdTMwRkMtXFx1MzBGRlxcdTRFMDAtXFx1OUZENV17MX0vXHJcbiAgICAgICAgICAgIC5zb3VyY2U7XHJcbiAgICB2YXIgcGF0dGVybiA9IG5ldyBSZWdFeHAoXHJcbiAgICAgICAgW1xyXG4gICAgICAgICAgICBcIig/OlswLTldKyg/Oig/Oix8XFxcXC4pWzAtOV0rKSp8W1xcXFwtXCIgKyBzcGFjZURlbGltaXRlZENoYXJzICsgXCJdKStcIixcclxuICAgICAgICAgICAgbm9uU3BhY2VEZWxpbWl0ZWRXb3JkcyxcclxuICAgICAgICBdLmpvaW4oXCJ8XCIpLFxyXG4gICAgICAgIFwiZ1wiXHJcbiAgICApO1xyXG4gICAgcmV0dXJuICh0ZXh0Lm1hdGNoKHBhdHRlcm4pIHx8IFtdKS5sZW5ndGg7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRDaGFyYWN0ZXJDb3VudCh0ZXh0OiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0ZXh0Lmxlbmd0aDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFNlbnRlbmNlQ291bnQodGV4dDogc3RyaW5nKSB7XHJcbiAgICB0ZXh0ID0gY2xlYW5UZXh0KHRleHQpO1xyXG5cclxuICAgIC8vIFRoYW5rcyB0byBFeHRyYWN0IEhpZ2hsaWdodHMgcGx1Z2luIGFuZCBBbmdlbHVzRG9taW5pXHJcbiAgICAvLyBBbHNvIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzU1NTM0MTBcclxuICAgIHZhciBzZW50ZW5jZXMgPVxyXG4gICAgICAgICh0ZXh0IHx8IFwiXCIpLm1hdGNoKFxyXG4gICAgICAgICAgICAvW14u44CCIe+8gT/vvJ9cXHNdW14u44CCIe+8gT/vvJ9dKig/OlsuIT9dKD8hWyfigJjigJlcIuKAnOKAneOAjOOAjeOAjuOAj10/XFxzfCQpW14u44CCIe+8gT/vvJ9dKikqWy7jgIIh77yBP++8n10/WyfigJlcIuKAneOAjeOAj10/KD89XFxzfHwkKS9nbVxyXG4gICAgICAgICkgfHwgW107XHJcbiAgICB2YXIgc2VudGVuY2VzTGVuZ3RoID0gc2VudGVuY2VzLmxlbmd0aDtcclxuICAgIHJldHVybiBzZW50ZW5jZXNMZW5ndGg7XHJcbn1cclxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuIiwiLy8gICAgIEphdmFTY3JpcHQgRXhwcmVzc2lvbiBQYXJzZXIgKEpTRVApIDAuNC4wXG4vLyAgICAgSlNFUCBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBNSVQgTGljZW5zZVxuLy8gICAgIGh0dHBzOi8vZXJpY3NtZWtlbnMuZ2l0aHViLmlvL2pzZXAvXG5cbi8qZ2xvYmFsIG1vZHVsZTogdHJ1ZSwgZXhwb3J0czogdHJ1ZSwgY29uc29sZTogdHJ1ZSAqL1xuKGZ1bmN0aW9uIChyb290KSB7XG5cdCd1c2Ugc3RyaWN0Jztcblx0Ly8gTm9kZSBUeXBlc1xuXHQvLyAtLS0tLS0tLS0tXG5cblx0Ly8gVGhpcyBpcyB0aGUgZnVsbCBzZXQgb2YgdHlwZXMgdGhhdCBhbnkgSlNFUCBub2RlIGNhbiBiZS5cblx0Ly8gU3RvcmUgdGhlbSBoZXJlIHRvIHNhdmUgc3BhY2Ugd2hlbiBtaW5pZmllZFxuXHR2YXIgQ09NUE9VTkQgPSAnQ29tcG91bmQnLFxuXHRcdElERU5USUZJRVIgPSAnSWRlbnRpZmllcicsXG5cdFx0TUVNQkVSX0VYUCA9ICdNZW1iZXJFeHByZXNzaW9uJyxcblx0XHRMSVRFUkFMID0gJ0xpdGVyYWwnLFxuXHRcdFRISVNfRVhQID0gJ1RoaXNFeHByZXNzaW9uJyxcblx0XHRDQUxMX0VYUCA9ICdDYWxsRXhwcmVzc2lvbicsXG5cdFx0VU5BUllfRVhQID0gJ1VuYXJ5RXhwcmVzc2lvbicsXG5cdFx0QklOQVJZX0VYUCA9ICdCaW5hcnlFeHByZXNzaW9uJyxcblx0XHRMT0dJQ0FMX0VYUCA9ICdMb2dpY2FsRXhwcmVzc2lvbicsXG5cdFx0Q09ORElUSU9OQUxfRVhQID0gJ0NvbmRpdGlvbmFsRXhwcmVzc2lvbicsXG5cdFx0QVJSQVlfRVhQID0gJ0FycmF5RXhwcmVzc2lvbicsXG5cblx0XHRQRVJJT0RfQ09ERSA9IDQ2LCAvLyAnLidcblx0XHRDT01NQV9DT0RFICA9IDQ0LCAvLyAnLCdcblx0XHRTUVVPVEVfQ09ERSA9IDM5LCAvLyBzaW5nbGUgcXVvdGVcblx0XHREUVVPVEVfQ09ERSA9IDM0LCAvLyBkb3VibGUgcXVvdGVzXG5cdFx0T1BBUkVOX0NPREUgPSA0MCwgLy8gKFxuXHRcdENQQVJFTl9DT0RFID0gNDEsIC8vIClcblx0XHRPQlJBQ0tfQ09ERSA9IDkxLCAvLyBbXG5cdFx0Q0JSQUNLX0NPREUgPSA5MywgLy8gXVxuXHRcdFFVTUFSS19DT0RFID0gNjMsIC8vID9cblx0XHRTRU1DT0xfQ09ERSA9IDU5LCAvLyA7XG5cdFx0Q09MT05fQ09ERSAgPSA1OCwgLy8gOlxuXG5cdFx0dGhyb3dFcnJvciA9IGZ1bmN0aW9uKG1lc3NhZ2UsIGluZGV4KSB7XG5cdFx0XHR2YXIgZXJyb3IgPSBuZXcgRXJyb3IobWVzc2FnZSArICcgYXQgY2hhcmFjdGVyICcgKyBpbmRleCk7XG5cdFx0XHRlcnJvci5pbmRleCA9IGluZGV4O1xuXHRcdFx0ZXJyb3IuZGVzY3JpcHRpb24gPSBtZXNzYWdlO1xuXHRcdFx0dGhyb3cgZXJyb3I7XG5cdFx0fSxcblxuXHQvLyBPcGVyYXRpb25zXG5cdC8vIC0tLS0tLS0tLS1cblxuXHQvLyBTZXQgYHRgIHRvIGB0cnVlYCB0byBzYXZlIHNwYWNlICh3aGVuIG1pbmlmaWVkLCBub3QgZ3ppcHBlZClcblx0XHR0ID0gdHJ1ZSxcblx0Ly8gVXNlIGEgcXVpY2tseS1hY2Nlc3NpYmxlIG1hcCB0byBzdG9yZSBhbGwgb2YgdGhlIHVuYXJ5IG9wZXJhdG9yc1xuXHQvLyBWYWx1ZXMgYXJlIHNldCB0byBgdHJ1ZWAgKGl0IHJlYWxseSBkb2Vzbid0IG1hdHRlcilcblx0XHR1bmFyeV9vcHMgPSB7Jy0nOiB0LCAnISc6IHQsICd+JzogdCwgJysnOiB0fSxcblx0Ly8gQWxzbyB1c2UgYSBtYXAgZm9yIHRoZSBiaW5hcnkgb3BlcmF0aW9ucyBidXQgc2V0IHRoZWlyIHZhbHVlcyB0byB0aGVpclxuXHQvLyBiaW5hcnkgcHJlY2VkZW5jZSBmb3IgcXVpY2sgcmVmZXJlbmNlOlxuXHQvLyBzZWUgW09yZGVyIG9mIG9wZXJhdGlvbnNdKGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvT3JkZXJfb2Zfb3BlcmF0aW9ucyNQcm9ncmFtbWluZ19sYW5ndWFnZSlcblx0XHRiaW5hcnlfb3BzID0ge1xuXHRcdFx0J3x8JzogMSwgJyYmJzogMiwgJ3wnOiAzLCAgJ14nOiA0LCAgJyYnOiA1LFxuXHRcdFx0Jz09JzogNiwgJyE9JzogNiwgJz09PSc6IDYsICchPT0nOiA2LFxuXHRcdFx0JzwnOiA3LCAgJz4nOiA3LCAgJzw9JzogNywgICc+PSc6IDcsXG5cdFx0XHQnPDwnOjgsICAnPj4nOiA4LCAnPj4+JzogOCxcblx0XHRcdCcrJzogOSwgJy0nOiA5LFxuXHRcdFx0JyonOiAxMCwgJy8nOiAxMCwgJyUnOiAxMFxuXHRcdH0sXG5cdC8vIEFkZGl0aW9uYWwgdmFsaWQgaWRlbnRpZmllciBjaGFycywgYXBhcnQgZnJvbSBhLXosIEEtWiBhbmQgMC05IChleGNlcHQgb24gdGhlIHN0YXJ0aW5nIGNoYXIpXG5cdFx0YWRkaXRpb25hbF9pZGVudGlmaWVyX2NoYXJzID0geyckJzogdCwgJ18nOiB0fSxcblx0Ly8gR2V0IHJldHVybiB0aGUgbG9uZ2VzdCBrZXkgbGVuZ3RoIG9mIGFueSBvYmplY3Rcblx0XHRnZXRNYXhLZXlMZW4gPSBmdW5jdGlvbihvYmopIHtcblx0XHRcdHZhciBtYXhfbGVuID0gMCwgbGVuO1xuXHRcdFx0Zm9yKHZhciBrZXkgaW4gb2JqKSB7XG5cdFx0XHRcdGlmKChsZW4gPSBrZXkubGVuZ3RoKSA+IG1heF9sZW4gJiYgb2JqLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdFx0XHRtYXhfbGVuID0gbGVuO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF4X2xlbjtcblx0XHR9LFxuXHRcdG1heF91bm9wX2xlbiA9IGdldE1heEtleUxlbih1bmFyeV9vcHMpLFxuXHRcdG1heF9iaW5vcF9sZW4gPSBnZXRNYXhLZXlMZW4oYmluYXJ5X29wcyksXG5cdC8vIExpdGVyYWxzXG5cdC8vIC0tLS0tLS0tLS1cblx0Ly8gU3RvcmUgdGhlIHZhbHVlcyB0byByZXR1cm4gZm9yIHRoZSB2YXJpb3VzIGxpdGVyYWxzIHdlIG1heSBlbmNvdW50ZXJcblx0XHRsaXRlcmFscyA9IHtcblx0XHRcdCd0cnVlJzogdHJ1ZSxcblx0XHRcdCdmYWxzZSc6IGZhbHNlLFxuXHRcdFx0J251bGwnOiBudWxsXG5cdFx0fSxcblx0Ly8gRXhjZXB0IGZvciBgdGhpc2AsIHdoaWNoIGlzIHNwZWNpYWwuIFRoaXMgY291bGQgYmUgY2hhbmdlZCB0byBzb21ldGhpbmcgbGlrZSBgJ3NlbGYnYCBhcyB3ZWxsXG5cdFx0dGhpc19zdHIgPSAndGhpcycsXG5cdC8vIFJldHVybnMgdGhlIHByZWNlZGVuY2Ugb2YgYSBiaW5hcnkgb3BlcmF0b3Igb3IgYDBgIGlmIGl0IGlzbid0IGEgYmluYXJ5IG9wZXJhdG9yXG5cdFx0YmluYXJ5UHJlY2VkZW5jZSA9IGZ1bmN0aW9uKG9wX3ZhbCkge1xuXHRcdFx0cmV0dXJuIGJpbmFyeV9vcHNbb3BfdmFsXSB8fCAwO1xuXHRcdH0sXG5cdC8vIFV0aWxpdHkgZnVuY3Rpb24gKGdldHMgY2FsbGVkIGZyb20gbXVsdGlwbGUgcGxhY2VzKVxuXHQvLyBBbHNvIG5vdGUgdGhhdCBgYSAmJiBiYCBhbmQgYGEgfHwgYmAgYXJlICpsb2dpY2FsKiBleHByZXNzaW9ucywgbm90IGJpbmFyeSBleHByZXNzaW9uc1xuXHRcdGNyZWF0ZUJpbmFyeUV4cHJlc3Npb24gPSBmdW5jdGlvbiAob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KSB7XG5cdFx0XHR2YXIgdHlwZSA9IChvcGVyYXRvciA9PT0gJ3x8JyB8fCBvcGVyYXRvciA9PT0gJyYmJykgPyBMT0dJQ0FMX0VYUCA6IEJJTkFSWV9FWFA7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRvcGVyYXRvcjogb3BlcmF0b3IsXG5cdFx0XHRcdGxlZnQ6IGxlZnQsXG5cdFx0XHRcdHJpZ2h0OiByaWdodFxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdC8vIGBjaGAgaXMgYSBjaGFyYWN0ZXIgY29kZSBpbiB0aGUgbmV4dCB0aHJlZSBmdW5jdGlvbnNcblx0XHRpc0RlY2ltYWxEaWdpdCA9IGZ1bmN0aW9uKGNoKSB7XG5cdFx0XHRyZXR1cm4gKGNoID49IDQ4ICYmIGNoIDw9IDU3KTsgLy8gMC4uLjlcblx0XHR9LFxuXHRcdGlzSWRlbnRpZmllclN0YXJ0ID0gZnVuY3Rpb24oY2gpIHtcblx0XHRcdHJldHVybiAgKGNoID49IDY1ICYmIGNoIDw9IDkwKSB8fCAvLyBBLi4uWlxuXHRcdFx0XHRcdChjaCA+PSA5NyAmJiBjaCA8PSAxMjIpIHx8IC8vIGEuLi56XG5cdFx0XHRcdFx0KGNoID49IDEyOCAmJiAhYmluYXJ5X29wc1tTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKV0pIHx8IC8vIGFueSBub24tQVNDSUkgdGhhdCBpcyBub3QgYW4gb3BlcmF0b3Jcblx0XHRcdFx0XHQoYWRkaXRpb25hbF9pZGVudGlmaWVyX2NoYXJzLmhhc093blByb3BlcnR5KFN0cmluZy5mcm9tQ2hhckNvZGUoY2gpKSk7IC8vIGFkZGl0aW9uYWwgY2hhcmFjdGVyc1xuXHRcdH0sXG5cdFx0aXNJZGVudGlmaWVyUGFydCA9IGZ1bmN0aW9uKGNoKSB7XG5cdFx0XHRyZXR1cm4gXHQoY2ggPj0gNjUgJiYgY2ggPD0gOTApIHx8IC8vIEEuLi5aXG5cdFx0XHRcdFx0KGNoID49IDk3ICYmIGNoIDw9IDEyMikgfHwgLy8gYS4uLnpcblx0XHRcdFx0XHQoY2ggPj0gNDggJiYgY2ggPD0gNTcpIHx8IC8vIDAuLi45XG5cdFx0XHRcdFx0KGNoID49IDEyOCAmJiAhYmluYXJ5X29wc1tTdHJpbmcuZnJvbUNoYXJDb2RlKGNoKV0pfHwgLy8gYW55IG5vbi1BU0NJSSB0aGF0IGlzIG5vdCBhbiBvcGVyYXRvclxuXHRcdFx0XHRcdChhZGRpdGlvbmFsX2lkZW50aWZpZXJfY2hhcnMuaGFzT3duUHJvcGVydHkoU3RyaW5nLmZyb21DaGFyQ29kZShjaCkpKTsgLy8gYWRkaXRpb25hbCBjaGFyYWN0ZXJzXG5cdFx0fSxcblxuXHRcdC8vIFBhcnNpbmdcblx0XHQvLyAtLS0tLS0tXG5cdFx0Ly8gYGV4cHJgIGlzIGEgc3RyaW5nIHdpdGggdGhlIHBhc3NlZCBpbiBleHByZXNzaW9uXG5cdFx0anNlcCA9IGZ1bmN0aW9uKGV4cHIpIHtcblx0XHRcdC8vIGBpbmRleGAgc3RvcmVzIHRoZSBjaGFyYWN0ZXIgbnVtYmVyIHdlIGFyZSBjdXJyZW50bHkgYXQgd2hpbGUgYGxlbmd0aGAgaXMgYSBjb25zdGFudFxuXHRcdFx0Ly8gQWxsIG9mIHRoZSBnb2JibGVzIGJlbG93IHdpbGwgbW9kaWZ5IGBpbmRleGAgYXMgd2UgbW92ZSBhbG9uZ1xuXHRcdFx0dmFyIGluZGV4ID0gMCxcblx0XHRcdFx0Y2hhckF0RnVuYyA9IGV4cHIuY2hhckF0LFxuXHRcdFx0XHRjaGFyQ29kZUF0RnVuYyA9IGV4cHIuY2hhckNvZGVBdCxcblx0XHRcdFx0ZXhwckkgPSBmdW5jdGlvbihpKSB7IHJldHVybiBjaGFyQXRGdW5jLmNhbGwoZXhwciwgaSk7IH0sXG5cdFx0XHRcdGV4cHJJQ29kZSA9IGZ1bmN0aW9uKGkpIHsgcmV0dXJuIGNoYXJDb2RlQXRGdW5jLmNhbGwoZXhwciwgaSk7IH0sXG5cdFx0XHRcdGxlbmd0aCA9IGV4cHIubGVuZ3RoLFxuXG5cdFx0XHRcdC8vIFB1c2ggYGluZGV4YCB1cCB0byB0aGUgbmV4dCBub24tc3BhY2UgY2hhcmFjdGVyXG5cdFx0XHRcdGdvYmJsZVNwYWNlcyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHZhciBjaCA9IGV4cHJJQ29kZShpbmRleCk7XG5cdFx0XHRcdFx0Ly8gc3BhY2Ugb3IgdGFiXG5cdFx0XHRcdFx0d2hpbGUoY2ggPT09IDMyIHx8IGNoID09PSA5IHx8IGNoID09PSAxMCB8fCBjaCA9PT0gMTMpIHtcblx0XHRcdFx0XHRcdGNoID0gZXhwcklDb2RlKCsraW5kZXgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBUaGUgbWFpbiBwYXJzaW5nIGZ1bmN0aW9uLiBNdWNoIG9mIHRoaXMgY29kZSBpcyBkZWRpY2F0ZWQgdG8gdGVybmFyeSBleHByZXNzaW9uc1xuXHRcdFx0XHRnb2JibGVFeHByZXNzaW9uID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIHRlc3QgPSBnb2JibGVCaW5hcnlFeHByZXNzaW9uKCksXG5cdFx0XHRcdFx0XHRjb25zZXF1ZW50LCBhbHRlcm5hdGU7XG5cdFx0XHRcdFx0Z29iYmxlU3BhY2VzKCk7XG5cblx0XHRcdFx0XHRpZihleHBySUNvZGUoaW5kZXgpID09PSBRVU1BUktfQ09ERSkge1xuXHRcdFx0XHRcdFx0Ly8gVGVybmFyeSBleHByZXNzaW9uOiB0ZXN0ID8gY29uc2VxdWVudCA6IGFsdGVybmF0ZVxuXHRcdFx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0XHRcdGNvbnNlcXVlbnQgPSBnb2JibGVFeHByZXNzaW9uKCk7XG5cdFx0XHRcdFx0XHRpZighY29uc2VxdWVudCkge1xuXHRcdFx0XHRcdFx0XHR0aHJvd0Vycm9yKCdFeHBlY3RlZCBleHByZXNzaW9uJywgaW5kZXgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Z29iYmxlU3BhY2VzKCk7XG5cdFx0XHRcdFx0XHRpZihleHBySUNvZGUoaW5kZXgpID09PSBDT0xPTl9DT0RFKSB7XG5cdFx0XHRcdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdFx0XHRcdGFsdGVybmF0ZSA9IGdvYmJsZUV4cHJlc3Npb24oKTtcblx0XHRcdFx0XHRcdFx0aWYoIWFsdGVybmF0ZSkge1xuXHRcdFx0XHRcdFx0XHRcdHRocm93RXJyb3IoJ0V4cGVjdGVkIGV4cHJlc3Npb24nLCBpbmRleCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBDT05ESVRJT05BTF9FWFAsXG5cdFx0XHRcdFx0XHRcdFx0dGVzdDogdGVzdCxcblx0XHRcdFx0XHRcdFx0XHRjb25zZXF1ZW50OiBjb25zZXF1ZW50LFxuXHRcdFx0XHRcdFx0XHRcdGFsdGVybmF0ZTogYWx0ZXJuYXRlXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aHJvd0Vycm9yKCdFeHBlY3RlZCA6JywgaW5kZXgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGVzdDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gU2VhcmNoIGZvciB0aGUgb3BlcmF0aW9uIHBvcnRpb24gb2YgdGhlIHN0cmluZyAoZS5nLiBgK2AsIGA9PT1gKVxuXHRcdFx0XHQvLyBTdGFydCBieSB0YWtpbmcgdGhlIGxvbmdlc3QgcG9zc2libGUgYmluYXJ5IG9wZXJhdGlvbnMgKDMgY2hhcmFjdGVyczogYD09PWAsIGAhPT1gLCBgPj4+YClcblx0XHRcdFx0Ly8gYW5kIG1vdmUgZG93biBmcm9tIDMgdG8gMiB0byAxIGNoYXJhY3RlciB1bnRpbCBhIG1hdGNoaW5nIGJpbmFyeSBvcGVyYXRpb24gaXMgZm91bmRcblx0XHRcdFx0Ly8gdGhlbiwgcmV0dXJuIHRoYXQgYmluYXJ5IG9wZXJhdGlvblxuXHRcdFx0XHRnb2JibGVCaW5hcnlPcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGdvYmJsZVNwYWNlcygpO1xuXHRcdFx0XHRcdHZhciBiaW9wLCB0b19jaGVjayA9IGV4cHIuc3Vic3RyKGluZGV4LCBtYXhfYmlub3BfbGVuKSwgdGNfbGVuID0gdG9fY2hlY2subGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlKHRjX2xlbiA+IDApIHtcblx0XHRcdFx0XHRcdC8vIERvbid0IGFjY2VwdCBhIGJpbmFyeSBvcCB3aGVuIGl0IGlzIGFuIGlkZW50aWZpZXIuXG5cdFx0XHRcdFx0XHQvLyBCaW5hcnkgb3BzIHRoYXQgc3RhcnQgd2l0aCBhIGlkZW50aWZpZXItdmFsaWQgY2hhcmFjdGVyIG11c3QgYmUgZm9sbG93ZWRcblx0XHRcdFx0XHRcdC8vIGJ5IGEgbm9uIGlkZW50aWZpZXItcGFydCB2YWxpZCBjaGFyYWN0ZXJcblx0XHRcdFx0XHRcdGlmKGJpbmFyeV9vcHMuaGFzT3duUHJvcGVydHkodG9fY2hlY2spICYmIChcblx0XHRcdFx0XHRcdFx0IWlzSWRlbnRpZmllclN0YXJ0KGV4cHJJQ29kZShpbmRleCkpIHx8XG5cdFx0XHRcdFx0XHRcdChpbmRleCt0b19jaGVjay5sZW5ndGg8IGV4cHIubGVuZ3RoICYmICFpc0lkZW50aWZpZXJQYXJ0KGV4cHJJQ29kZShpbmRleCt0b19jaGVjay5sZW5ndGgpKSlcblx0XHRcdFx0XHRcdCkpIHtcblx0XHRcdFx0XHRcdFx0aW5kZXggKz0gdGNfbGVuO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdG9fY2hlY2s7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR0b19jaGVjayA9IHRvX2NoZWNrLnN1YnN0cigwLCAtLXRjX2xlbik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBUaGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciBnb2JibGluZyBhbiBpbmRpdmlkdWFsIGV4cHJlc3Npb24sXG5cdFx0XHRcdC8vIGUuZy4gYDFgLCBgMSsyYCwgYGErKGIqMiktTWF0aC5zcXJ0KDIpYFxuXHRcdFx0XHRnb2JibGVCaW5hcnlFeHByZXNzaW9uID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIGNoX2ksIG5vZGUsIGJpb3AsIHByZWMsIHN0YWNrLCBiaW9wX2luZm8sIGxlZnQsIHJpZ2h0LCBpLCBjdXJfYmlvcDtcblxuXHRcdFx0XHRcdC8vIEZpcnN0LCB0cnkgdG8gZ2V0IHRoZSBsZWZ0bW9zdCB0aGluZ1xuXHRcdFx0XHRcdC8vIFRoZW4sIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSdzIGEgYmluYXJ5IG9wZXJhdG9yIG9wZXJhdGluZyBvbiB0aGF0IGxlZnRtb3N0IHRoaW5nXG5cdFx0XHRcdFx0bGVmdCA9IGdvYmJsZVRva2VuKCk7XG5cdFx0XHRcdFx0YmlvcCA9IGdvYmJsZUJpbmFyeU9wKCk7XG5cblx0XHRcdFx0XHQvLyBJZiB0aGVyZSB3YXNuJ3QgYSBiaW5hcnkgb3BlcmF0b3IsIGp1c3QgcmV0dXJuIHRoZSBsZWZ0bW9zdCBub2RlXG5cdFx0XHRcdFx0aWYoIWJpb3ApIHtcblx0XHRcdFx0XHRcdHJldHVybiBsZWZ0O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgd2UgbmVlZCB0byBzdGFydCBhIHN0YWNrIHRvIHByb3Blcmx5IHBsYWNlIHRoZSBiaW5hcnkgb3BlcmF0aW9ucyBpbiB0aGVpclxuXHRcdFx0XHRcdC8vIHByZWNlZGVuY2Ugc3RydWN0dXJlXG5cdFx0XHRcdFx0YmlvcF9pbmZvID0geyB2YWx1ZTogYmlvcCwgcHJlYzogYmluYXJ5UHJlY2VkZW5jZShiaW9wKX07XG5cblx0XHRcdFx0XHRyaWdodCA9IGdvYmJsZVRva2VuKCk7XG5cdFx0XHRcdFx0aWYoIXJpZ2h0KSB7XG5cdFx0XHRcdFx0XHR0aHJvd0Vycm9yKFwiRXhwZWN0ZWQgZXhwcmVzc2lvbiBhZnRlciBcIiArIGJpb3AsIGluZGV4KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c3RhY2sgPSBbbGVmdCwgYmlvcF9pbmZvLCByaWdodF07XG5cblx0XHRcdFx0XHQvLyBQcm9wZXJseSBkZWFsIHdpdGggcHJlY2VkZW5jZSB1c2luZyBbcmVjdXJzaXZlIGRlc2NlbnRdKGh0dHA6Ly93d3cuZW5nci5tdW4uY2EvfnRoZW8vTWlzYy9leHBfcGFyc2luZy5odG0pXG5cdFx0XHRcdFx0d2hpbGUoKGJpb3AgPSBnb2JibGVCaW5hcnlPcCgpKSkge1xuXHRcdFx0XHRcdFx0cHJlYyA9IGJpbmFyeVByZWNlZGVuY2UoYmlvcCk7XG5cblx0XHRcdFx0XHRcdGlmKHByZWMgPT09IDApIHtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRiaW9wX2luZm8gPSB7IHZhbHVlOiBiaW9wLCBwcmVjOiBwcmVjIH07XG5cblx0XHRcdFx0XHRcdGN1cl9iaW9wID0gYmlvcDtcblx0XHRcdFx0XHRcdC8vIFJlZHVjZTogbWFrZSBhIGJpbmFyeSBleHByZXNzaW9uIGZyb20gdGhlIHRocmVlIHRvcG1vc3QgZW50cmllcy5cblx0XHRcdFx0XHRcdHdoaWxlICgoc3RhY2subGVuZ3RoID4gMikgJiYgKHByZWMgPD0gc3RhY2tbc3RhY2subGVuZ3RoIC0gMl0ucHJlYykpIHtcblx0XHRcdFx0XHRcdFx0cmlnaHQgPSBzdGFjay5wb3AoKTtcblx0XHRcdFx0XHRcdFx0YmlvcCA9IHN0YWNrLnBvcCgpLnZhbHVlO1xuXHRcdFx0XHRcdFx0XHRsZWZ0ID0gc3RhY2sucG9wKCk7XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBjcmVhdGVCaW5hcnlFeHByZXNzaW9uKGJpb3AsIGxlZnQsIHJpZ2h0KTtcblx0XHRcdFx0XHRcdFx0c3RhY2sucHVzaChub2RlKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0bm9kZSA9IGdvYmJsZVRva2VuKCk7XG5cdFx0XHRcdFx0XHRpZighbm9kZSkge1xuXHRcdFx0XHRcdFx0XHR0aHJvd0Vycm9yKFwiRXhwZWN0ZWQgZXhwcmVzc2lvbiBhZnRlciBcIiArIGN1cl9iaW9wLCBpbmRleCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRzdGFjay5wdXNoKGJpb3BfaW5mbywgbm9kZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aSA9IHN0YWNrLmxlbmd0aCAtIDE7XG5cdFx0XHRcdFx0bm9kZSA9IHN0YWNrW2ldO1xuXHRcdFx0XHRcdHdoaWxlKGkgPiAxKSB7XG5cdFx0XHRcdFx0XHRub2RlID0gY3JlYXRlQmluYXJ5RXhwcmVzc2lvbihzdGFja1tpIC0gMV0udmFsdWUsIHN0YWNrW2kgLSAyXSwgbm9kZSk7XG5cdFx0XHRcdFx0XHRpIC09IDI7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEFuIGluZGl2aWR1YWwgcGFydCBvZiBhIGJpbmFyeSBleHByZXNzaW9uOlxuXHRcdFx0XHQvLyBlLmcuIGBmb28uYmFyKGJheilgLCBgMWAsIGBcImFiY1wiYCwgYChhICUgMilgIChiZWNhdXNlIGl0J3MgaW4gcGFyZW50aGVzaXMpXG5cdFx0XHRcdGdvYmJsZVRva2VuID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIGNoLCB0b19jaGVjaywgdGNfbGVuLCBub2RlO1xuXG5cdFx0XHRcdFx0Z29iYmxlU3BhY2VzKCk7XG5cdFx0XHRcdFx0Y2ggPSBleHBySUNvZGUoaW5kZXgpO1xuXG5cdFx0XHRcdFx0aWYoaXNEZWNpbWFsRGlnaXQoY2gpIHx8IGNoID09PSBQRVJJT0RfQ09ERSkge1xuXHRcdFx0XHRcdFx0Ly8gQ2hhciBjb2RlIDQ2IGlzIGEgZG90IGAuYCB3aGljaCBjYW4gc3RhcnQgb2ZmIGEgbnVtZXJpYyBsaXRlcmFsXG5cdFx0XHRcdFx0XHRyZXR1cm4gZ29iYmxlTnVtZXJpY0xpdGVyYWwoKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZihjaCA9PT0gU1FVT1RFX0NPREUgfHwgY2ggPT09IERRVU9URV9DT0RFKSB7XG5cdFx0XHRcdFx0XHQvLyBTaW5nbGUgb3IgZG91YmxlIHF1b3Rlc1xuXHRcdFx0XHRcdFx0bm9kZSA9IGdvYmJsZVN0cmluZ0xpdGVyYWwoKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKGNoID09PSBPQlJBQ0tfQ09ERSkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGdvYmJsZUFycmF5KCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRvX2NoZWNrID0gZXhwci5zdWJzdHIoaW5kZXgsIG1heF91bm9wX2xlbik7XG5cdFx0XHRcdFx0XHR0Y19sZW4gPSB0b19jaGVjay5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSh0Y19sZW4gPiAwKSB7XG5cdFx0XHRcdFx0XHQvLyBEb24ndCBhY2NlcHQgYW4gdW5hcnkgb3Agd2hlbiBpdCBpcyBhbiBpZGVudGlmaWVyLlxuXHRcdFx0XHRcdFx0Ly8gVW5hcnkgb3BzIHRoYXQgc3RhcnQgd2l0aCBhIGlkZW50aWZpZXItdmFsaWQgY2hhcmFjdGVyIG11c3QgYmUgZm9sbG93ZWRcblx0XHRcdFx0XHRcdC8vIGJ5IGEgbm9uIGlkZW50aWZpZXItcGFydCB2YWxpZCBjaGFyYWN0ZXJcblx0XHRcdFx0XHRcdFx0aWYodW5hcnlfb3BzLmhhc093blByb3BlcnR5KHRvX2NoZWNrKSAmJiAoXG5cdFx0XHRcdFx0XHRcdFx0IWlzSWRlbnRpZmllclN0YXJ0KGV4cHJJQ29kZShpbmRleCkpIHx8XG5cdFx0XHRcdFx0XHRcdFx0KGluZGV4K3RvX2NoZWNrLmxlbmd0aCA8IGV4cHIubGVuZ3RoICYmICFpc0lkZW50aWZpZXJQYXJ0KGV4cHJJQ29kZShpbmRleCt0b19jaGVjay5sZW5ndGgpKSlcblx0XHRcdFx0XHRcdFx0KSkge1xuXHRcdFx0XHRcdFx0XHRcdGluZGV4ICs9IHRjX2xlbjtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZTogVU5BUllfRVhQLFxuXHRcdFx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IHRvX2NoZWNrLFxuXHRcdFx0XHRcdFx0XHRcdFx0YXJndW1lbnQ6IGdvYmJsZVRva2VuKCksXG5cdFx0XHRcdFx0XHRcdFx0XHRwcmVmaXg6IHRydWVcblx0XHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHRvX2NoZWNrID0gdG9fY2hlY2suc3Vic3RyKDAsIC0tdGNfbGVuKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKGlzSWRlbnRpZmllclN0YXJ0KGNoKSkge1xuXHRcdFx0XHRcdFx0XHRub2RlID0gZ29iYmxlSWRlbnRpZmllcigpO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChjaCA9PT0gT1BBUkVOX0NPREUpIHsgLy8gb3BlbiBwYXJlbnRoZXNpc1xuXHRcdFx0XHRcdFx0XHRub2RlID0gZ29iYmxlR3JvdXAoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoIW5vZGUpIHtcblx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRnb2JibGVTcGFjZXMoKTtcblxuXHRcdFx0XHRcdGNoID0gZXhwcklDb2RlKGluZGV4KTtcblxuXHRcdFx0XHRcdC8vIEdvYmJsZSBwcm9wZXJ0aWVzIG9mIG9mIGlkZW50aWZpZXJzL3N0cmluZ3MvYXJyYXlzL2dyb3Vwcy5cblx0XHRcdFx0XHQvLyBlLmcuIGBmb29gLCBgYmFyLmJhemAsIGBmb29bJ2JhciddLmJhemBcblx0XHRcdFx0XHQvLyBJdCBhbHNvIGdvYmJsZXMgZnVuY3Rpb24gY2FsbHM6XG5cdFx0XHRcdFx0Ly8gZS5nLiBgTWF0aC5hY29zKG9iai5hbmdsZSlgXG5cblx0XHRcdFx0XHR3aGlsZShjaCA9PT0gUEVSSU9EX0NPREUgfHwgY2ggPT09IE9CUkFDS19DT0RFIHx8IGNoID09PSBPUEFSRU5fQ09ERSkge1xuXHRcdFx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0XHRcdGlmKGNoID09PSBQRVJJT0RfQ09ERSkge1xuXHRcdFx0XHRcdFx0XHRnb2JibGVTcGFjZXMoKTtcblx0XHRcdFx0XHRcdFx0bm9kZSA9IHtcblx0XHRcdFx0XHRcdFx0XHR0eXBlOiBNRU1CRVJfRVhQLFxuXHRcdFx0XHRcdFx0XHRcdGNvbXB1dGVkOiBmYWxzZSxcblx0XHRcdFx0XHRcdFx0XHRvYmplY3Q6IG5vZGUsXG5cdFx0XHRcdFx0XHRcdFx0cHJvcGVydHk6IGdvYmJsZUlkZW50aWZpZXIoKVxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmKGNoID09PSBPQlJBQ0tfQ09ERSkge1xuXHRcdFx0XHRcdFx0XHRub2RlID0ge1xuXHRcdFx0XHRcdFx0XHRcdHR5cGU6IE1FTUJFUl9FWFAsXG5cdFx0XHRcdFx0XHRcdFx0Y29tcHV0ZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0b2JqZWN0OiBub2RlLFxuXHRcdFx0XHRcdFx0XHRcdHByb3BlcnR5OiBnb2JibGVFeHByZXNzaW9uKClcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0Z29iYmxlU3BhY2VzKCk7XG5cdFx0XHRcdFx0XHRcdGNoID0gZXhwcklDb2RlKGluZGV4KTtcblx0XHRcdFx0XHRcdFx0aWYoY2ggIT09IENCUkFDS19DT0RFKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhyb3dFcnJvcignVW5jbG9zZWQgWycsIGluZGV4KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmKGNoID09PSBPUEFSRU5fQ09ERSkge1xuXHRcdFx0XHRcdFx0XHQvLyBBIGZ1bmN0aW9uIGNhbGwgaXMgYmVpbmcgbWFkZTsgZ29iYmxlIGFsbCB0aGUgYXJndW1lbnRzXG5cdFx0XHRcdFx0XHRcdG5vZGUgPSB7XG5cdFx0XHRcdFx0XHRcdFx0dHlwZTogQ0FMTF9FWFAsXG5cdFx0XHRcdFx0XHRcdFx0J2FyZ3VtZW50cyc6IGdvYmJsZUFyZ3VtZW50cyhDUEFSRU5fQ09ERSksXG5cdFx0XHRcdFx0XHRcdFx0Y2FsbGVlOiBub2RlXG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRnb2JibGVTcGFjZXMoKTtcblx0XHRcdFx0XHRcdGNoID0gZXhwcklDb2RlKGluZGV4KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gbm9kZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0Ly8gUGFyc2Ugc2ltcGxlIG51bWVyaWMgbGl0ZXJhbHM6IGAxMmAsIGAzLjRgLCBgLjVgLiBEbyB0aGlzIGJ5IHVzaW5nIGEgc3RyaW5nIHRvXG5cdFx0XHRcdC8vIGtlZXAgdHJhY2sgb2YgZXZlcnl0aGluZyBpbiB0aGUgbnVtZXJpYyBsaXRlcmFsIGFuZCB0aGVuIGNhbGxpbmcgYHBhcnNlRmxvYXRgIG9uIHRoYXQgc3RyaW5nXG5cdFx0XHRcdGdvYmJsZU51bWVyaWNMaXRlcmFsID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIG51bWJlciA9ICcnLCBjaCwgY2hDb2RlO1xuXHRcdFx0XHRcdHdoaWxlKGlzRGVjaW1hbERpZ2l0KGV4cHJJQ29kZShpbmRleCkpKSB7XG5cdFx0XHRcdFx0XHRudW1iZXIgKz0gZXhwckkoaW5kZXgrKyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYoZXhwcklDb2RlKGluZGV4KSA9PT0gUEVSSU9EX0NPREUpIHsgLy8gY2FuIHN0YXJ0IHdpdGggYSBkZWNpbWFsIG1hcmtlclxuXHRcdFx0XHRcdFx0bnVtYmVyICs9IGV4cHJJKGluZGV4KyspO1xuXG5cdFx0XHRcdFx0XHR3aGlsZShpc0RlY2ltYWxEaWdpdChleHBySUNvZGUoaW5kZXgpKSkge1xuXHRcdFx0XHRcdFx0XHRudW1iZXIgKz0gZXhwckkoaW5kZXgrKyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y2ggPSBleHBySShpbmRleCk7XG5cdFx0XHRcdFx0aWYoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7IC8vIGV4cG9uZW50IG1hcmtlclxuXHRcdFx0XHRcdFx0bnVtYmVyICs9IGV4cHJJKGluZGV4KyspO1xuXHRcdFx0XHRcdFx0Y2ggPSBleHBySShpbmRleCk7XG5cdFx0XHRcdFx0XHRpZihjaCA9PT0gJysnIHx8IGNoID09PSAnLScpIHsgLy8gZXhwb25lbnQgc2lnblxuXHRcdFx0XHRcdFx0XHRudW1iZXIgKz0gZXhwckkoaW5kZXgrKyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR3aGlsZShpc0RlY2ltYWxEaWdpdChleHBySUNvZGUoaW5kZXgpKSkgeyAvL2V4cG9uZW50IGl0c2VsZlxuXHRcdFx0XHRcdFx0XHRudW1iZXIgKz0gZXhwckkoaW5kZXgrKyk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZighaXNEZWNpbWFsRGlnaXQoZXhwcklDb2RlKGluZGV4LTEpKSApIHtcblx0XHRcdFx0XHRcdFx0dGhyb3dFcnJvcignRXhwZWN0ZWQgZXhwb25lbnQgKCcgKyBudW1iZXIgKyBleHBySShpbmRleCkgKyAnKScsIGluZGV4KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblxuXHRcdFx0XHRcdGNoQ29kZSA9IGV4cHJJQ29kZShpbmRleCk7XG5cdFx0XHRcdFx0Ly8gQ2hlY2sgdG8gbWFrZSBzdXJlIHRoaXMgaXNuJ3QgYSB2YXJpYWJsZSBuYW1lIHRoYXQgc3RhcnQgd2l0aCBhIG51bWJlciAoMTIzYWJjKVxuXHRcdFx0XHRcdGlmKGlzSWRlbnRpZmllclN0YXJ0KGNoQ29kZSkpIHtcblx0XHRcdFx0XHRcdHRocm93RXJyb3IoJ1ZhcmlhYmxlIG5hbWVzIGNhbm5vdCBzdGFydCB3aXRoIGEgbnVtYmVyICgnICtcblx0XHRcdFx0XHRcdFx0XHRcdG51bWJlciArIGV4cHJJKGluZGV4KSArICcpJywgaW5kZXgpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZihjaENvZGUgPT09IFBFUklPRF9DT0RFKSB7XG5cdFx0XHRcdFx0XHR0aHJvd0Vycm9yKCdVbmV4cGVjdGVkIHBlcmlvZCcsIGluZGV4KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0dHlwZTogTElURVJBTCxcblx0XHRcdFx0XHRcdHZhbHVlOiBwYXJzZUZsb2F0KG51bWJlciksXG5cdFx0XHRcdFx0XHRyYXc6IG51bWJlclxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gUGFyc2VzIGEgc3RyaW5nIGxpdGVyYWwsIHN0YXJpbmcgd2l0aCBzaW5nbGUgb3IgZG91YmxlIHF1b3RlcyB3aXRoIGJhc2ljIHN1cHBvcnQgZm9yIGVzY2FwZSBjb2Rlc1xuXHRcdFx0XHQvLyBlLmcuIGBcImhlbGxvIHdvcmxkXCJgLCBgJ3RoaXMgaXNcXG5KU0VQJ2Bcblx0XHRcdFx0Z29iYmxlU3RyaW5nTGl0ZXJhbCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHZhciBzdHIgPSAnJywgcXVvdGUgPSBleHBySShpbmRleCsrKSwgY2xvc2VkID0gZmFsc2UsIGNoO1xuXG5cdFx0XHRcdFx0d2hpbGUoaW5kZXggPCBsZW5ndGgpIHtcblx0XHRcdFx0XHRcdGNoID0gZXhwckkoaW5kZXgrKyk7XG5cdFx0XHRcdFx0XHRpZihjaCA9PT0gcXVvdGUpIHtcblx0XHRcdFx0XHRcdFx0Y2xvc2VkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYoY2ggPT09ICdcXFxcJykge1xuXHRcdFx0XHRcdFx0XHQvLyBDaGVjayBmb3IgYWxsIG9mIHRoZSBjb21tb24gZXNjYXBlIGNvZGVzXG5cdFx0XHRcdFx0XHRcdGNoID0gZXhwckkoaW5kZXgrKyk7XG5cdFx0XHRcdFx0XHRcdHN3aXRjaChjaCkge1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJ24nOiBzdHIgKz0gJ1xcbic7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJ3InOiBzdHIgKz0gJ1xccic7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJ3QnOiBzdHIgKz0gJ1xcdCc7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJ2InOiBzdHIgKz0gJ1xcYic7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJ2YnOiBzdHIgKz0gJ1xcZic7IGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdGNhc2UgJ3YnOiBzdHIgKz0gJ1xceDBCJzsgYnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0ZGVmYXVsdCA6IHN0ciArPSBjaDtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c3RyICs9IGNoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmKCFjbG9zZWQpIHtcblx0XHRcdFx0XHRcdHRocm93RXJyb3IoJ1VuY2xvc2VkIHF1b3RlIGFmdGVyIFwiJytzdHIrJ1wiJywgaW5kZXgpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHR0eXBlOiBMSVRFUkFMLFxuXHRcdFx0XHRcdFx0dmFsdWU6IHN0cixcblx0XHRcdFx0XHRcdHJhdzogcXVvdGUgKyBzdHIgKyBxdW90ZVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gR29iYmxlcyBvbmx5IGlkZW50aWZpZXJzXG5cdFx0XHRcdC8vIGUuZy46IGBmb29gLCBgX3ZhbHVlYCwgYCR4MWBcblx0XHRcdFx0Ly8gQWxzbywgdGhpcyBmdW5jdGlvbiBjaGVja3MgaWYgdGhhdCBpZGVudGlmaWVyIGlzIGEgbGl0ZXJhbDpcblx0XHRcdFx0Ly8gKGUuZy4gYHRydWVgLCBgZmFsc2VgLCBgbnVsbGApIG9yIGB0aGlzYFxuXHRcdFx0XHRnb2JibGVJZGVudGlmaWVyID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0dmFyIGNoID0gZXhwcklDb2RlKGluZGV4KSwgc3RhcnQgPSBpbmRleCwgaWRlbnRpZmllcjtcblxuXHRcdFx0XHRcdGlmKGlzSWRlbnRpZmllclN0YXJ0KGNoKSkge1xuXHRcdFx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhyb3dFcnJvcignVW5leHBlY3RlZCAnICsgZXhwckkoaW5kZXgpLCBpbmRleCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0d2hpbGUoaW5kZXggPCBsZW5ndGgpIHtcblx0XHRcdFx0XHRcdGNoID0gZXhwcklDb2RlKGluZGV4KTtcblx0XHRcdFx0XHRcdGlmKGlzSWRlbnRpZmllclBhcnQoY2gpKSB7XG5cdFx0XHRcdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWRlbnRpZmllciA9IGV4cHIuc2xpY2Uoc3RhcnQsIGluZGV4KTtcblxuXHRcdFx0XHRcdGlmKGxpdGVyYWxzLmhhc093blByb3BlcnR5KGlkZW50aWZpZXIpKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBMSVRFUkFMLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogbGl0ZXJhbHNbaWRlbnRpZmllcl0sXG5cdFx0XHRcdFx0XHRcdHJhdzogaWRlbnRpZmllclxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9IGVsc2UgaWYoaWRlbnRpZmllciA9PT0gdGhpc19zdHIpIHtcblx0XHRcdFx0XHRcdHJldHVybiB7IHR5cGU6IFRISVNfRVhQIH07XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IElERU5USUZJRVIsXG5cdFx0XHRcdFx0XHRcdG5hbWU6IGlkZW50aWZpZXJcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEdvYmJsZXMgYSBsaXN0IG9mIGFyZ3VtZW50cyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBmdW5jdGlvbiBjYWxsXG5cdFx0XHRcdC8vIG9yIGFycmF5IGxpdGVyYWwuIFRoaXMgZnVuY3Rpb24gYWxzbyBhc3N1bWVzIHRoYXQgdGhlIG9wZW5pbmcgY2hhcmFjdGVyXG5cdFx0XHRcdC8vIGAoYCBvciBgW2AgaGFzIGFscmVhZHkgYmVlbiBnb2JibGVkLCBhbmQgZ29iYmxlcyBleHByZXNzaW9ucyBhbmQgY29tbWFzXG5cdFx0XHRcdC8vIHVudGlsIHRoZSB0ZXJtaW5hdG9yIGNoYXJhY3RlciBgKWAgb3IgYF1gIGlzIGVuY291bnRlcmVkLlxuXHRcdFx0XHQvLyBlLmcuIGBmb28oYmFyLCBiYXopYCwgYG15X2Z1bmMoKWAsIG9yIGBbYmFyLCBiYXpdYFxuXHRcdFx0XHRnb2JibGVBcmd1bWVudHMgPSBmdW5jdGlvbih0ZXJtaW5hdGlvbikge1xuXHRcdFx0XHRcdHZhciBjaF9pLCBhcmdzID0gW10sIG5vZGUsIGNsb3NlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdHZhciBzZXBhcmF0b3JfY291bnQgPSAwO1xuXHRcdFx0XHRcdHdoaWxlKGluZGV4IDwgbGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRnb2JibGVTcGFjZXMoKTtcblx0XHRcdFx0XHRcdGNoX2kgPSBleHBySUNvZGUoaW5kZXgpO1xuXHRcdFx0XHRcdFx0aWYoY2hfaSA9PT0gdGVybWluYXRpb24pIHsgLy8gZG9uZSBwYXJzaW5nXG5cdFx0XHRcdFx0XHRcdGNsb3NlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdFx0XHRcdGlmKHRlcm1pbmF0aW9uID09PSBDUEFSRU5fQ09ERSAmJiBzZXBhcmF0b3JfY291bnQgJiYgc2VwYXJhdG9yX2NvdW50ID49IGFyZ3MubGVuZ3RoKXtcblx0XHRcdFx0XHRcdFx0XHR0aHJvd0Vycm9yKCdVbmV4cGVjdGVkIHRva2VuICcgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKHRlcm1pbmF0aW9uKSwgaW5kZXgpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChjaF9pID09PSBDT01NQV9DT0RFKSB7IC8vIGJldHdlZW4gZXhwcmVzc2lvbnNcblx0XHRcdFx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0XHRcdFx0c2VwYXJhdG9yX2NvdW50Kys7XG5cdFx0XHRcdFx0XHRcdGlmKHNlcGFyYXRvcl9jb3VudCAhPT0gYXJncy5sZW5ndGgpIHsgLy8gbWlzc2luZyBhcmd1bWVudFxuXHRcdFx0XHRcdFx0XHRcdGlmKHRlcm1pbmF0aW9uID09PSBDUEFSRU5fQ09ERSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dGhyb3dFcnJvcignVW5leHBlY3RlZCB0b2tlbiAsJywgaW5kZXgpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmKHRlcm1pbmF0aW9uID09PSBDQlJBQ0tfQ09ERSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Zm9yKHZhciBhcmcgPSBhcmdzLmxlbmd0aDsgYXJnPCBzZXBhcmF0b3JfY291bnQ7IGFyZysrKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MucHVzaChudWxsKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBnb2JibGVFeHByZXNzaW9uKCk7XG5cdFx0XHRcdFx0XHRcdGlmKCFub2RlIHx8IG5vZGUudHlwZSA9PT0gQ09NUE9VTkQpIHtcblx0XHRcdFx0XHRcdFx0XHR0aHJvd0Vycm9yKCdFeHBlY3RlZCBjb21tYScsIGluZGV4KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRhcmdzLnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICghY2xvc2VkKSB7XG5cdFx0XHRcdFx0XHR0aHJvd0Vycm9yKCdFeHBlY3RlZCAnICsgU3RyaW5nLmZyb21DaGFyQ29kZSh0ZXJtaW5hdGlvbiksIGluZGV4KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIGFyZ3M7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gUmVzcG9uc2libGUgZm9yIHBhcnNpbmcgYSBncm91cCBvZiB0aGluZ3Mgd2l0aGluIHBhcmVudGhlc2VzIGAoKWBcblx0XHRcdFx0Ly8gVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgaXQgbmVlZHMgdG8gZ29iYmxlIHRoZSBvcGVuaW5nIHBhcmVudGhlc2lzXG5cdFx0XHRcdC8vIGFuZCB0aGVuIHRyaWVzIHRvIGdvYmJsZSBldmVyeXRoaW5nIHdpdGhpbiB0aGF0IHBhcmVudGhlc2lzLCBhc3N1bWluZ1xuXHRcdFx0XHQvLyB0aGF0IHRoZSBuZXh0IHRoaW5nIGl0IHNob3VsZCBzZWUgaXMgdGhlIGNsb3NlIHBhcmVudGhlc2lzLiBJZiBub3QsXG5cdFx0XHRcdC8vIHRoZW4gdGhlIGV4cHJlc3Npb24gcHJvYmFibHkgZG9lc24ndCBoYXZlIGEgYClgXG5cdFx0XHRcdGdvYmJsZUdyb3VwID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0XHR2YXIgbm9kZSA9IGdvYmJsZUV4cHJlc3Npb24oKTtcblx0XHRcdFx0XHRnb2JibGVTcGFjZXMoKTtcblx0XHRcdFx0XHRpZihleHBySUNvZGUoaW5kZXgpID09PSBDUEFSRU5fQ09ERSkge1xuXHRcdFx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0XHRcdHJldHVybiBub2RlO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aHJvd0Vycm9yKCdVbmNsb3NlZCAoJywgaW5kZXgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBSZXNwb25zaWJsZSBmb3IgcGFyc2luZyBBcnJheSBsaXRlcmFscyBgWzEsIDIsIDNdYFxuXHRcdFx0XHQvLyBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCBpdCBuZWVkcyB0byBnb2JibGUgdGhlIG9wZW5pbmcgYnJhY2tldFxuXHRcdFx0XHQvLyBhbmQgdGhlbiB0cmllcyB0byBnb2JibGUgdGhlIGV4cHJlc3Npb25zIGFzIGFyZ3VtZW50cy5cblx0XHRcdFx0Z29iYmxlQXJyYXkgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpbmRleCsrO1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHR0eXBlOiBBUlJBWV9FWFAsXG5cdFx0XHRcdFx0XHRlbGVtZW50czogZ29iYmxlQXJndW1lbnRzKENCUkFDS19DT0RFKVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0bm9kZXMgPSBbXSwgY2hfaSwgbm9kZTtcblxuXHRcdFx0d2hpbGUoaW5kZXggPCBsZW5ndGgpIHtcblx0XHRcdFx0Y2hfaSA9IGV4cHJJQ29kZShpbmRleCk7XG5cblx0XHRcdFx0Ly8gRXhwcmVzc2lvbnMgY2FuIGJlIHNlcGFyYXRlZCBieSBzZW1pY29sb25zLCBjb21tYXMsIG9yIGp1c3QgaW5mZXJyZWQgd2l0aG91dCBhbnlcblx0XHRcdFx0Ly8gc2VwYXJhdG9yc1xuXHRcdFx0XHRpZihjaF9pID09PSBTRU1DT0xfQ09ERSB8fCBjaF9pID09PSBDT01NQV9DT0RFKSB7XG5cdFx0XHRcdFx0aW5kZXgrKzsgLy8gaWdub3JlIHNlcGFyYXRvcnNcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBUcnkgdG8gZ29iYmxlIGVhY2ggZXhwcmVzc2lvbiBpbmRpdmlkdWFsbHlcblx0XHRcdFx0XHRpZigobm9kZSA9IGdvYmJsZUV4cHJlc3Npb24oKSkpIHtcblx0XHRcdFx0XHRcdG5vZGVzLnB1c2gobm9kZSk7XG5cdFx0XHRcdFx0Ly8gSWYgd2Ugd2VyZW4ndCBhYmxlIHRvIGZpbmQgYSBiaW5hcnkgZXhwcmVzc2lvbiBhbmQgYXJlIG91dCBvZiByb29tLCB0aGVuXG5cdFx0XHRcdFx0Ly8gdGhlIGV4cHJlc3Npb24gcGFzc2VkIGluIHByb2JhYmx5IGhhcyB0b28gbXVjaFxuXHRcdFx0XHRcdH0gZWxzZSBpZihpbmRleCA8IGxlbmd0aCkge1xuXHRcdFx0XHRcdFx0dGhyb3dFcnJvcignVW5leHBlY3RlZCBcIicgKyBleHBySShpbmRleCkgKyAnXCInLCBpbmRleCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHRoZXJlJ3Mgb25seSBvbmUgZXhwcmVzc2lvbiBqdXN0IHRyeSByZXR1cm5pbmcgdGhlIGV4cHJlc3Npb25cblx0XHRcdGlmKG5vZGVzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0XHRyZXR1cm4gbm9kZXNbMF07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdHR5cGU6IENPTVBPVU5ELFxuXHRcdFx0XHRcdGJvZHk6IG5vZGVzXG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fTtcblxuXHQvLyBUbyBiZSBmaWxsZWQgaW4gYnkgdGhlIHRlbXBsYXRlXG5cdGpzZXAudmVyc2lvbiA9ICcwLjQuMCc7XG5cdGpzZXAudG9TdHJpbmcgPSBmdW5jdGlvbigpIHsgcmV0dXJuICdKYXZhU2NyaXB0IEV4cHJlc3Npb24gUGFyc2VyIChKU0VQKSB2JyArIGpzZXAudmVyc2lvbjsgfTtcblxuXHQvKipcblx0ICogQG1ldGhvZCBqc2VwLmFkZFVuYXJ5T3Bcblx0ICogQHBhcmFtIHtzdHJpbmd9IG9wX25hbWUgVGhlIG5hbWUgb2YgdGhlIHVuYXJ5IG9wIHRvIGFkZFxuXHQgKiBAcmV0dXJuIGpzZXBcblx0ICovXG5cdGpzZXAuYWRkVW5hcnlPcCA9IGZ1bmN0aW9uKG9wX25hbWUpIHtcblx0XHRtYXhfdW5vcF9sZW4gPSBNYXRoLm1heChvcF9uYW1lLmxlbmd0aCwgbWF4X3Vub3BfbGVuKTtcblx0XHR1bmFyeV9vcHNbb3BfbmFtZV0gPSB0OyByZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogQG1ldGhvZCBqc2VwLmFkZEJpbmFyeU9wXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBvcF9uYW1lIFRoZSBuYW1lIG9mIHRoZSBiaW5hcnkgb3AgdG8gYWRkXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBwcmVjZWRlbmNlIFRoZSBwcmVjZWRlbmNlIG9mIHRoZSBiaW5hcnkgb3AgKGNhbiBiZSBhIGZsb2F0KVxuXHQgKiBAcmV0dXJuIGpzZXBcblx0ICovXG5cdGpzZXAuYWRkQmluYXJ5T3AgPSBmdW5jdGlvbihvcF9uYW1lLCBwcmVjZWRlbmNlKSB7XG5cdFx0bWF4X2Jpbm9wX2xlbiA9IE1hdGgubWF4KG9wX25hbWUubGVuZ3RoLCBtYXhfYmlub3BfbGVuKTtcblx0XHRiaW5hcnlfb3BzW29wX25hbWVdID0gcHJlY2VkZW5jZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogQG1ldGhvZCBqc2VwLmFkZElkZW50aWZpZXJDaGFyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyIFRoZSBhZGRpdGlvbmFsIGNoYXJhY3RlciB0byB0cmVhdCBhcyBhIHZhbGlkIHBhcnQgb2YgYW4gaWRlbnRpZmllclxuXHQgKiBAcmV0dXJuIGpzZXBcblx0ICovXG5cdGpzZXAuYWRkSWRlbnRpZmllckNoYXIgPSBmdW5jdGlvbihjaGFyKSB7XG5cdFx0YWRkaXRpb25hbF9pZGVudGlmaWVyX2NoYXJzW2NoYXJdID0gdDsgcmV0dXJuIHRoaXM7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBtZXRob2QganNlcC5hZGRMaXRlcmFsXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsaXRlcmFsX25hbWUgVGhlIG5hbWUgb2YgdGhlIGxpdGVyYWwgdG8gYWRkXG5cdCAqIEBwYXJhbSB7Kn0gbGl0ZXJhbF92YWx1ZSBUaGUgdmFsdWUgb2YgdGhlIGxpdGVyYWxcblx0ICogQHJldHVybiBqc2VwXG5cdCAqL1xuXHRqc2VwLmFkZExpdGVyYWwgPSBmdW5jdGlvbihsaXRlcmFsX25hbWUsIGxpdGVyYWxfdmFsdWUpIHtcblx0XHRsaXRlcmFsc1tsaXRlcmFsX25hbWVdID0gbGl0ZXJhbF92YWx1ZTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogQG1ldGhvZCBqc2VwLnJlbW92ZVVuYXJ5T3Bcblx0ICogQHBhcmFtIHtzdHJpbmd9IG9wX25hbWUgVGhlIG5hbWUgb2YgdGhlIHVuYXJ5IG9wIHRvIHJlbW92ZVxuXHQgKiBAcmV0dXJuIGpzZXBcblx0ICovXG5cdGpzZXAucmVtb3ZlVW5hcnlPcCA9IGZ1bmN0aW9uKG9wX25hbWUpIHtcblx0XHRkZWxldGUgdW5hcnlfb3BzW29wX25hbWVdO1xuXHRcdGlmKG9wX25hbWUubGVuZ3RoID09PSBtYXhfdW5vcF9sZW4pIHtcblx0XHRcdG1heF91bm9wX2xlbiA9IGdldE1heEtleUxlbih1bmFyeV9vcHMpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogQG1ldGhvZCBqc2VwLnJlbW92ZUFsbFVuYXJ5T3BzXG5cdCAqIEByZXR1cm4ganNlcFxuXHQgKi9cblx0anNlcC5yZW1vdmVBbGxVbmFyeU9wcyA9IGZ1bmN0aW9uKCkge1xuXHRcdHVuYXJ5X29wcyA9IHt9O1xuXHRcdG1heF91bm9wX2xlbiA9IDA7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogQG1ldGhvZCBqc2VwLnJlbW92ZUlkZW50aWZpZXJDaGFyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyIFRoZSBhZGRpdGlvbmFsIGNoYXJhY3RlciB0byBzdG9wIHRyZWF0aW5nIGFzIGEgdmFsaWQgcGFydCBvZiBhbiBpZGVudGlmaWVyXG5cdCAqIEByZXR1cm4ganNlcFxuXHQgKi9cblx0anNlcC5yZW1vdmVJZGVudGlmaWVyQ2hhciA9IGZ1bmN0aW9uKGNoYXIpIHtcblx0XHRkZWxldGUgYWRkaXRpb25hbF9pZGVudGlmaWVyX2NoYXJzW2NoYXJdO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cblx0LyoqXG5cdCAqIEBtZXRob2QganNlcC5yZW1vdmVCaW5hcnlPcFxuXHQgKiBAcGFyYW0ge3N0cmluZ30gb3BfbmFtZSBUaGUgbmFtZSBvZiB0aGUgYmluYXJ5IG9wIHRvIHJlbW92ZVxuXHQgKiBAcmV0dXJuIGpzZXBcblx0ICovXG5cdGpzZXAucmVtb3ZlQmluYXJ5T3AgPSBmdW5jdGlvbihvcF9uYW1lKSB7XG5cdFx0ZGVsZXRlIGJpbmFyeV9vcHNbb3BfbmFtZV07XG5cdFx0aWYob3BfbmFtZS5sZW5ndGggPT09IG1heF9iaW5vcF9sZW4pIHtcblx0XHRcdG1heF9iaW5vcF9sZW4gPSBnZXRNYXhLZXlMZW4oYmluYXJ5X29wcyk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAbWV0aG9kIGpzZXAucmVtb3ZlQWxsQmluYXJ5T3BzXG5cdCAqIEByZXR1cm4ganNlcFxuXHQgKi9cblx0anNlcC5yZW1vdmVBbGxCaW5hcnlPcHMgPSBmdW5jdGlvbigpIHtcblx0XHRiaW5hcnlfb3BzID0ge307XG5cdFx0bWF4X2Jpbm9wX2xlbiA9IDA7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogQG1ldGhvZCBqc2VwLnJlbW92ZUxpdGVyYWxcblx0ICogQHBhcmFtIHtzdHJpbmd9IGxpdGVyYWxfbmFtZSBUaGUgbmFtZSBvZiB0aGUgbGl0ZXJhbCB0byByZW1vdmVcblx0ICogQHJldHVybiBqc2VwXG5cdCAqL1xuXHRqc2VwLnJlbW92ZUxpdGVyYWwgPSBmdW5jdGlvbihsaXRlcmFsX25hbWUpIHtcblx0XHRkZWxldGUgbGl0ZXJhbHNbbGl0ZXJhbF9uYW1lXTtcblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvKipcblx0ICogQG1ldGhvZCBqc2VwLnJlbW92ZUFsbExpdGVyYWxzXG5cdCAqIEByZXR1cm4ganNlcFxuXHQgKi9cblx0anNlcC5yZW1vdmVBbGxMaXRlcmFscyA9IGZ1bmN0aW9uKCkge1xuXHRcdGxpdGVyYWxzID0ge307XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fTtcblxuXHQvLyBJbiBkZXNrdG9wIGVudmlyb25tZW50cywgaGF2ZSBhIHdheSB0byByZXN0b3JlIHRoZSBvbGQgdmFsdWUgZm9yIGBqc2VwYFxuXHRpZiAodHlwZW9mIGV4cG9ydHMgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0dmFyIG9sZF9qc2VwID0gcm9vdC5qc2VwO1xuXHRcdC8vIFRoZSBzdGFyIG9mIHRoZSBzaG93ISBJdCdzIGEgZnVuY3Rpb24hXG5cdFx0cm9vdC5qc2VwID0ganNlcDtcblx0XHQvLyBBbmQgYSBjb3VydGVvdXMgZnVuY3Rpb24gd2lsbGluZyB0byBtb3ZlIG91dCBvZiB0aGUgd2F5IGZvciBvdGhlciBzaW1pbGFybHktbmFtZWQgb2JqZWN0cyFcblx0XHRqc2VwLm5vQ29uZmxpY3QgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmKHJvb3QuanNlcCA9PT0ganNlcCkge1xuXHRcdFx0XHRyb290LmpzZXAgPSBvbGRfanNlcDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBqc2VwO1xuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0Ly8gSW4gTm9kZS5KUyBlbnZpcm9ubWVudHNcblx0XHRpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcblx0XHRcdGV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IGpzZXA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGV4cG9ydHMucGFyc2UgPSBqc2VwO1xuXHRcdH1cblx0fVxufSh0aGlzKSk7XG4iLCIvKiBnbG9iYWwgd2luZG93LCBleHBvcnRzLCBkZWZpbmUgKi9cblxuIWZ1bmN0aW9uKCkge1xuICAgICd1c2Ugc3RyaWN0J1xuXG4gICAgdmFyIHJlID0ge1xuICAgICAgICBub3Rfc3RyaW5nOiAvW15zXS8sXG4gICAgICAgIG5vdF9ib29sOiAvW150XS8sXG4gICAgICAgIG5vdF90eXBlOiAvW15UXS8sXG4gICAgICAgIG5vdF9wcmltaXRpdmU6IC9bXnZdLyxcbiAgICAgICAgbnVtYmVyOiAvW2RpZWZnXS8sXG4gICAgICAgIG51bWVyaWNfYXJnOiAvW2JjZGllZmd1eFhdLyxcbiAgICAgICAganNvbjogL1tqXS8sXG4gICAgICAgIG5vdF9qc29uOiAvW15qXS8sXG4gICAgICAgIHRleHQ6IC9eW15cXHgyNV0rLyxcbiAgICAgICAgbW9kdWxvOiAvXlxceDI1ezJ9LyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IC9eXFx4MjUoPzooWzEtOV1cXGQqKVxcJHxcXCgoW14pXSspXFwpKT8oXFwrKT8oMHwnW14kXSk/KC0pPyhcXGQrKT8oPzpcXC4oXFxkKykpPyhbYi1naWpvc3RUdXZ4WF0pLyxcbiAgICAgICAga2V5OiAvXihbYS16X11bYS16X1xcZF0qKS9pLFxuICAgICAgICBrZXlfYWNjZXNzOiAvXlxcLihbYS16X11bYS16X1xcZF0qKS9pLFxuICAgICAgICBpbmRleF9hY2Nlc3M6IC9eXFxbKFxcZCspXFxdLyxcbiAgICAgICAgc2lnbjogL15bKy1dL1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNwcmludGYoa2V5KSB7XG4gICAgICAgIC8vIGBhcmd1bWVudHNgIGlzIG5vdCBhbiBhcnJheSwgYnV0IHNob3VsZCBiZSBmaW5lIGZvciB0aGlzIGNhbGxcbiAgICAgICAgcmV0dXJuIHNwcmludGZfZm9ybWF0KHNwcmludGZfcGFyc2Uoa2V5KSwgYXJndW1lbnRzKVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHZzcHJpbnRmKGZtdCwgYXJndikge1xuICAgICAgICByZXR1cm4gc3ByaW50Zi5hcHBseShudWxsLCBbZm10XS5jb25jYXQoYXJndiB8fCBbXSkpXG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc3ByaW50Zl9mb3JtYXQocGFyc2VfdHJlZSwgYXJndikge1xuICAgICAgICB2YXIgY3Vyc29yID0gMSwgdHJlZV9sZW5ndGggPSBwYXJzZV90cmVlLmxlbmd0aCwgYXJnLCBvdXRwdXQgPSAnJywgaSwgaywgcGgsIHBhZCwgcGFkX2NoYXJhY3RlciwgcGFkX2xlbmd0aCwgaXNfcG9zaXRpdmUsIHNpZ25cbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHRyZWVfbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcGFyc2VfdHJlZVtpXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXQgKz0gcGFyc2VfdHJlZVtpXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHBhcnNlX3RyZWVbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgcGggPSBwYXJzZV90cmVlW2ldIC8vIGNvbnZlbmllbmNlIHB1cnBvc2VzIG9ubHlcbiAgICAgICAgICAgICAgICBpZiAocGgua2V5cykgeyAvLyBrZXl3b3JkIGFyZ3VtZW50XG4gICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3ZbY3Vyc29yXVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgcGgua2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZyA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3ByaW50ZignW3NwcmludGZdIENhbm5vdCBhY2Nlc3MgcHJvcGVydHkgXCIlc1wiIG9mIHVuZGVmaW5lZCB2YWx1ZSBcIiVzXCInLCBwaC5rZXlzW2tdLCBwaC5rZXlzW2stMV0pKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnW3BoLmtleXNba11dXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAocGgucGFyYW1fbm8pIHsgLy8gcG9zaXRpb25hbCBhcmd1bWVudCAoZXhwbGljaXQpXG4gICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3ZbcGgucGFyYW1fbm9dXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgeyAvLyBwb3NpdGlvbmFsIGFyZ3VtZW50IChpbXBsaWNpdClcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndltjdXJzb3IrK11cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmUubm90X3R5cGUudGVzdChwaC50eXBlKSAmJiByZS5ub3RfcHJpbWl0aXZlLnRlc3QocGgudHlwZSkgJiYgYXJnIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnKClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmUubnVtZXJpY19hcmcudGVzdChwaC50eXBlKSAmJiAodHlwZW9mIGFyZyAhPT0gJ251bWJlcicgJiYgaXNOYU4oYXJnKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzcHJpbnRmKCdbc3ByaW50Zl0gZXhwZWN0aW5nIG51bWJlciBidXQgZm91bmQgJVQnLCBhcmcpKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZS5udW1iZXIudGVzdChwaC50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICBpc19wb3NpdGl2ZSA9IGFyZyA+PSAwXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChwaC50eXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2InOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gcGFyc2VJbnQoYXJnLCAxMCkudG9TdHJpbmcoMilcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChhcmcsIDEwKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgICAgICAgICBjYXNlICdpJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBhcnNlSW50KGFyZywgMTApXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdqJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEpTT04uc3RyaW5naWZ5KGFyZywgbnVsbCwgcGgud2lkdGggPyBwYXJzZUludChwaC53aWR0aCkgOiAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBwaC5wcmVjaXNpb24gPyBwYXJzZUZsb2F0KGFyZykudG9FeHBvbmVudGlhbChwaC5wcmVjaXNpb24pIDogcGFyc2VGbG9hdChhcmcpLnRvRXhwb25lbnRpYWwoKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBwaC5wcmVjaXNpb24gPyBwYXJzZUZsb2F0KGFyZykudG9GaXhlZChwaC5wcmVjaXNpb24pIDogcGFyc2VGbG9hdChhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdnJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBoLnByZWNpc2lvbiA/IFN0cmluZyhOdW1iZXIoYXJnLnRvUHJlY2lzaW9uKHBoLnByZWNpc2lvbikpKSA6IHBhcnNlRmxvYXQoYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnbyc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAocGFyc2VJbnQoYXJnLCAxMCkgPj4+IDApLnRvU3RyaW5nKDgpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IFN0cmluZyhhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAocGgucHJlY2lzaW9uID8gYXJnLnN1YnN0cmluZygwLCBwaC5wcmVjaXNpb24pIDogYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBTdHJpbmcoISFhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAocGgucHJlY2lzaW9uID8gYXJnLnN1YnN0cmluZygwLCBwaC5wcmVjaXNpb24pIDogYXJnKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnVCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJnKS5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gKHBoLnByZWNpc2lvbiA/IGFyZy5zdWJzdHJpbmcoMCwgcGgucHJlY2lzaW9uKSA6IGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3UnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gcGFyc2VJbnQoYXJnLCAxMCkgPj4+IDBcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3YnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnLnZhbHVlT2YoKVxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gKHBoLnByZWNpc2lvbiA/IGFyZy5zdWJzdHJpbmcoMCwgcGgucHJlY2lzaW9uKSA6IGFyZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ3gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gKHBhcnNlSW50KGFyZywgMTApID4+PiAwKS50b1N0cmluZygxNilcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ1gnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gKHBhcnNlSW50KGFyZywgMTApID4+PiAwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlLmpzb24udGVzdChwaC50eXBlKSkge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gYXJnXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAocmUubnVtYmVyLnRlc3QocGgudHlwZSkgJiYgKCFpc19wb3NpdGl2ZSB8fCBwaC5zaWduKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiA9IGlzX3Bvc2l0aXZlID8gJysnIDogJy0nXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcudG9TdHJpbmcoKS5yZXBsYWNlKHJlLnNpZ24sICcnKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiA9ICcnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGFkX2NoYXJhY3RlciA9IHBoLnBhZF9jaGFyID8gcGgucGFkX2NoYXIgPT09ICcwJyA/ICcwJyA6IHBoLnBhZF9jaGFyLmNoYXJBdCgxKSA6ICcgJ1xuICAgICAgICAgICAgICAgICAgICBwYWRfbGVuZ3RoID0gcGgud2lkdGggLSAoc2lnbiArIGFyZykubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgIHBhZCA9IHBoLndpZHRoID8gKHBhZF9sZW5ndGggPiAwID8gcGFkX2NoYXJhY3Rlci5yZXBlYXQocGFkX2xlbmd0aCkgOiAnJykgOiAnJ1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXQgKz0gcGguYWxpZ24gPyBzaWduICsgYXJnICsgcGFkIDogKHBhZF9jaGFyYWN0ZXIgPT09ICcwJyA/IHNpZ24gKyBwYWQgKyBhcmcgOiBwYWQgKyBzaWduICsgYXJnKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0cHV0XG4gICAgfVxuXG4gICAgdmFyIHNwcmludGZfY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbiAgICBmdW5jdGlvbiBzcHJpbnRmX3BhcnNlKGZtdCkge1xuICAgICAgICBpZiAoc3ByaW50Zl9jYWNoZVtmbXRdKSB7XG4gICAgICAgICAgICByZXR1cm4gc3ByaW50Zl9jYWNoZVtmbXRdXG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX2ZtdCA9IGZtdCwgbWF0Y2gsIHBhcnNlX3RyZWUgPSBbXSwgYXJnX25hbWVzID0gMFxuICAgICAgICB3aGlsZSAoX2ZtdCkge1xuICAgICAgICAgICAgaWYgKChtYXRjaCA9IHJlLnRleHQuZXhlYyhfZm10KSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXJzZV90cmVlLnB1c2gobWF0Y2hbMF0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgobWF0Y2ggPSByZS5tb2R1bG8uZXhlYyhfZm10KSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBwYXJzZV90cmVlLnB1c2goJyUnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoKG1hdGNoID0gcmUucGxhY2Vob2xkZXIuZXhlYyhfZm10KSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMl0pIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnX25hbWVzIHw9IDFcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkX2xpc3QgPSBbXSwgcmVwbGFjZW1lbnRfZmllbGQgPSBtYXRjaFsyXSwgZmllbGRfbWF0Y2ggPSBbXVxuICAgICAgICAgICAgICAgICAgICBpZiAoKGZpZWxkX21hdGNoID0gcmUua2V5LmV4ZWMocmVwbGFjZW1lbnRfZmllbGQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbGlzdC5wdXNoKGZpZWxkX21hdGNoWzFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChyZXBsYWNlbWVudF9maWVsZCA9IHJlcGxhY2VtZW50X2ZpZWxkLnN1YnN0cmluZyhmaWVsZF9tYXRjaFswXS5sZW5ndGgpKSAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGZpZWxkX21hdGNoID0gcmUua2V5X2FjY2Vzcy5leGVjKHJlcGxhY2VtZW50X2ZpZWxkKSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbGlzdC5wdXNoKGZpZWxkX21hdGNoWzFdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgoZmllbGRfbWF0Y2ggPSByZS5pbmRleF9hY2Nlc3MuZXhlYyhyZXBsYWNlbWVudF9maWVsZCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2xpc3QucHVzaChmaWVsZF9tYXRjaFsxXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignW3NwcmludGZdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXknKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcignW3NwcmludGZdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXknKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoWzJdID0gZmllbGRfbGlzdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnX25hbWVzIHw9IDJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFyZ19uYW1lcyA9PT0gMykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1tzcHJpbnRmXSBtaXhpbmcgcG9zaXRpb25hbCBhbmQgbmFtZWQgcGxhY2Vob2xkZXJzIGlzIG5vdCAoeWV0KSBzdXBwb3J0ZWQnKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHBhcnNlX3RyZWUucHVzaChcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IG1hdGNoWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1fbm86ICAgIG1hdGNoWzFdLFxuICAgICAgICAgICAgICAgICAgICAgICAga2V5czogICAgICAgIG1hdGNoWzJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbjogICAgICAgIG1hdGNoWzNdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkX2NoYXI6ICAgIG1hdGNoWzRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ246ICAgICAgIG1hdGNoWzVdLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6ICAgICAgIG1hdGNoWzZdLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJlY2lzaW9uOiAgIG1hdGNoWzddLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogICAgICAgIG1hdGNoWzhdXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoJ1tzcHJpbnRmXSB1bmV4cGVjdGVkIHBsYWNlaG9sZGVyJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9mbXQgPSBfZm10LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNwcmludGZfY2FjaGVbZm10XSA9IHBhcnNlX3RyZWVcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBleHBvcnQgdG8gZWl0aGVyIGJyb3dzZXIgb3Igbm9kZS5qc1xuICAgICAqL1xuICAgIC8qIGVzbGludC1kaXNhYmxlIHF1b3RlLXByb3BzICovXG4gICAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBleHBvcnRzWydzcHJpbnRmJ10gPSBzcHJpbnRmXG4gICAgICAgIGV4cG9ydHNbJ3ZzcHJpbnRmJ10gPSB2c3ByaW50ZlxuICAgIH1cbiAgICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgd2luZG93WydzcHJpbnRmJ10gPSBzcHJpbnRmXG4gICAgICAgIHdpbmRvd1sndnNwcmludGYnXSA9IHZzcHJpbnRmXG5cbiAgICAgICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lWydhbWQnXSkge1xuICAgICAgICAgICAgZGVmaW5lKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgICdzcHJpbnRmJzogc3ByaW50ZixcbiAgICAgICAgICAgICAgICAgICAgJ3ZzcHJpbnRmJzogdnNwcmludGZcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgcXVvdGUtcHJvcHMgKi9cbn0oKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuIiwiaW1wb3J0IHsgUmVuZGVySW5mbywgRGF0YXNldCB9IGZyb20gXCIuL2RhdGFcIjtcclxuaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XHJcbmltcG9ydCB7IGlzTW9tZW50LCBNb21lbnQgfSBmcm9tIFwibW9tZW50XCI7XHJcbmltcG9ydCAqIGFzIGhlbHBlciBmcm9tIFwiLi9oZWxwZXJcIjtcclxuaW1wb3J0IGpzZXAgZnJvbSBcImpzZXBcIjtcclxuaW1wb3J0IHsgc3ByaW50ZiB9IGZyb20gXCJzcHJpbnRmLWpzXCI7XHJcblxyXG4vLyBGdW5jdGlvbiBhY2NlcHQgZGF0YXNldElkIGFzIGZpcnN0IGFyZ3VtZW50XHJcbnR5cGUgRm5EYXRhc2V0VG9WYWx1ZSA9IChcclxuICAgIGRhdGFzZXQ6IERhdGFzZXQsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXHJcbikgPT4gbnVtYmVyIHwgTW9tZW50IHwgc3RyaW5nO1xyXG50eXBlIEZuRGF0YXNldFRvRGF0YXNldCA9IChcclxuICAgIGRhdGFzZXQ6IERhdGFzZXQsXHJcbiAgICBhcmdzOiBBcnJheTxudW1iZXIgfCBEYXRhc2V0PixcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cclxuKSA9PiBEYXRhc2V0IHwgc3RyaW5nO1xyXG50eXBlIEZuVW5pcnlPcCA9IChcclxuICAgIHU6IG51bWJlciB8IE1vbWVudCB8IERhdGFzZXRcclxuKSA9PiBudW1iZXIgfCBNb21lbnQgfCBEYXRhc2V0IHwgc3RyaW5nO1xyXG50eXBlIEZuQmluYXJ5T3AgPSAoXHJcbiAgICBsOiBudW1iZXIgfCBNb21lbnQgfCBEYXRhc2V0LFxyXG4gICAgcjogbnVtYmVyIHwgTW9tZW50IHwgRGF0YXNldFxyXG4pID0+IG51bWJlciB8IE1vbWVudCB8IERhdGFzZXQgfCBzdHJpbmc7XHJcblxyXG5pbnRlcmZhY2UgRm5NYXBEYXRhc2V0VG9WYWx1ZSB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBGbkRhdGFzZXRUb1ZhbHVlO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgRm5NYXBEYXRhc2V0VG9EYXRhc2V0IHtcclxuICAgIFtrZXk6IHN0cmluZ106IEZuRGF0YXNldFRvRGF0YXNldDtcclxufVxyXG5cclxuaW50ZXJmYWNlIEZuTWFwQmluYXJ5T3Age1xyXG4gICAgW2tleTogc3RyaW5nXTogRm5CaW5hcnlPcDtcclxufVxyXG5cclxuaW50ZXJmYWNlIEZuTWFwVW5pcnlPcCB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBGblVuaXJ5T3A7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNoZWNrRGl2aXNvcihkaXZpc29yOiBhbnkpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiY2hlY2tpbmcgZGl2aW9yXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBkaXZpc29yID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgaWYgKGRpdmlzb3IgPT09IDApIHJldHVybiBmYWxzZTtcclxuICAgIH0gZWxzZSBpZiAoZGl2aXNvciBpbnN0YW5jZW9mIERhdGFzZXQpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGRpdmlzb3IuZ2V0VmFsdWVzKCkuc29tZShmdW5jdGlvbiAodikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHYgPT09IDA7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdHJ1ZTtcclxufVxyXG5cclxuZnVuY3Rpb24gY2hlY2tCaW5hcnlPcGVyYW50VHlwZShsZWZ0OiBhbnksIHJpZ2h0OiBhbnkpIHtcclxuICAgIGlmICh0eXBlb2YgbGVmdCA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIGxlZnQ7XHJcbiAgICBpZiAodHlwZW9mIHJpZ2h0ID09PSBcInN0cmluZ1wiKSByZXR1cm4gcmlnaHQ7XHJcbiAgICBpZiAoXHJcbiAgICAgICAgdHlwZW9mIGxlZnQgIT09IFwibnVtYmVyXCIgJiZcclxuICAgICAgICAhd2luZG93Lm1vbWVudC5pc01vbWVudChsZWZ0KSAmJlxyXG4gICAgICAgICEobGVmdCBpbnN0YW5jZW9mIERhdGFzZXQpXHJcbiAgICApIHtcclxuICAgICAgICByZXR1cm4gXCJFcnJvcjogaW52YWxpZCBvcGVyYW50IHR5cGVcIjtcclxuICAgIH1cclxuICAgIGlmIChcclxuICAgICAgICB0eXBlb2YgcmlnaHQgIT09IFwibnVtYmVyXCIgJiZcclxuICAgICAgICAhd2luZG93Lm1vbWVudC5pc01vbWVudChyaWdodCkgJiZcclxuICAgICAgICAhKHJpZ2h0IGluc3RhbmNlb2YgRGF0YXNldClcclxuICAgICkge1xyXG4gICAgICAgIHJldHVybiBcIkVycm9yOiBpbnZhbGlkZSBvcGVyYW50IHR5cGVcIjtcclxuICAgIH1cclxuICAgIHJldHVybiBcIlwiO1xyXG59XHJcblxyXG5jb25zdCBmbk1hcERhdGFzZXRUb1ZhbHVlOiBGbk1hcERhdGFzZXRUb1ZhbHVlID0ge1xyXG4gICAgLy8gbWluIHZhbHVlIG9mIGEgZGF0YXNldFxyXG4gICAgbWluOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xyXG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcclxuICAgICAgICByZXR1cm4gZDMubWluKGRhdGFzZXQuZ2V0VmFsdWVzKCkpO1xyXG4gICAgfSxcclxuICAgIC8vIHRoZSBsYXRlc3QgZGF0ZSB3aXRoIG1pbiB2YWx1ZVxyXG4gICAgbWluRGF0ZTogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICAvLyByZXR1cm4gTW9tZW50XHJcbiAgICAgICAgbGV0IG1pbiA9IGQzLm1pbihkYXRhc2V0LmdldFZhbHVlcygpKTtcclxuICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKG1pbikpIHtcclxuICAgICAgICAgICAgbGV0IGFycmF5RGF0YXNldCA9IEFycmF5LmZyb20oZGF0YXNldCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGRhdGFQb2ludCBvZiBhcnJheURhdGFzZXQucmV2ZXJzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVBvaW50LnZhbHVlICE9PSBudWxsICYmIGRhdGFQb2ludC52YWx1ZSA9PT0gbWluKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFQb2ludC5kYXRlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIkVycm9yOiBtaW4gbm90IGZvdW5kXCI7XHJcbiAgICB9LFxyXG4gICAgLy8gbWF4IHZhbHVlIG9mIGEgZGF0YXNldFxyXG4gICAgbWF4OiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xyXG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcclxuICAgICAgICByZXR1cm4gZDMubWF4KGRhdGFzZXQuZ2V0VmFsdWVzKCkpO1xyXG4gICAgfSxcclxuICAgIC8vIHRoZSBsYXRlc3QgZGF0ZSB3aXRoIG1heCB2YWx1ZVxyXG4gICAgbWF4RGF0ZTogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICAvLyByZXR1cm4gTW9tZW50XHJcbiAgICAgICAgbGV0IG1heCA9IGQzLm1heChkYXRhc2V0LmdldFZhbHVlcygpKTtcclxuICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKG1heCkpIHtcclxuICAgICAgICAgICAgbGV0IGFycmF5RGF0YXNldCA9IEFycmF5LmZyb20oZGF0YXNldCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGRhdGFQb2ludCBvZiBhcnJheURhdGFzZXQucmV2ZXJzZSgpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YVBvaW50LnZhbHVlICE9PSBudWxsICYmIGRhdGFQb2ludC52YWx1ZSA9PT0gbWF4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFQb2ludC5kYXRlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIkVycm9yOiBtYXggbm90IGZvdW5kXCI7XHJcbiAgICB9LFxyXG4gICAgLy8gc3RhcnQgZGF0ZSBvZiBhIGRhdGFzZXRcclxuICAgIC8vIGlmIGRhdGFzZXRJZCBub3QgZm91bmQsIHJldHVybiBvdmVyYWxsIHN0YXJ0RGF0ZVxyXG4gICAgc3RhcnREYXRlOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xyXG4gICAgICAgIC8vIHJldHVybiBNb21lbnRcclxuICAgICAgICBpZiAoZGF0YXNldCkge1xyXG4gICAgICAgICAgICBsZXQgc3RhcnREYXRlID0gZGF0YXNldC5nZXRTdGFydERhdGUoKTtcclxuICAgICAgICAgICAgaWYgKHN0YXJ0RGF0ZSAmJiBzdGFydERhdGUuaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhcnREYXRlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZW5kZXJJbmZvLnN0YXJ0RGF0ZTtcclxuICAgIH0sXHJcbiAgICAvLyBlbmQgZGF0ZSBvZiBhIGRhdGFzZXRcclxuICAgIC8vIGlmIGRhdGFzZXRJZCBub3QgZm91bmQsIHJldHVybiBvdmVyYWxsIGVuZERhdGVcclxuICAgIGVuZERhdGU6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxyXG4gICAgICAgIGlmIChkYXRhc2V0KSB7XHJcbiAgICAgICAgICAgIGxldCBlbmREYXRlID0gZGF0YXNldC5nZXRFbmREYXRlKCk7XHJcbiAgICAgICAgICAgIGlmIChlbmREYXRlICYmIGVuZERhdGUuaXNWYWxpZCgpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW5kRGF0ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVuZGVySW5mby5lbmREYXRlO1xyXG4gICAgfSxcclxuICAgIC8vIHN1bSBvZiBhbGwgdmFsdWVzIGluIGEgZGF0YXNldFxyXG4gICAgc3VtOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xyXG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcclxuICAgICAgICByZXR1cm4gZDMuc3VtKGRhdGFzZXQuZ2V0VmFsdWVzKCkpO1xyXG4gICAgfSxcclxuICAgIGNvdW50OiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xyXG4gICAgICAgIHJldHVybiBcIkVycm9yOiBkZXByZWNhdGVkIGZ1bmN0aW9uICdjb3VudCdcIjtcclxuICAgIH0sXHJcbiAgICAvLyBudW1iZXIgb2Ygb2NjdXJyZW5jZXMgb2YgYSB0YXJnZXQgaW4gYSBkYXRhc2V0XHJcbiAgICBudW1UYXJnZXRzOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xyXG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcclxuICAgICAgICByZXR1cm4gZGF0YXNldC5nZXROdW1UYXJnZXRzKCk7XHJcbiAgICB9LFxyXG4gICAgZGF5czogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICByZXR1cm4gXCJFcnJvcjogZGVwcmVjYXRlZCBmdW5jdGlvbiAnZGF5cydcIjtcclxuICAgIH0sXHJcbiAgICBudW1EYXlzOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xyXG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcclxuICAgICAgICByZXR1cm4gZGF0YXNldC5nZXRMZW5ndGgoKTtcclxuICAgIH0sXHJcbiAgICBudW1EYXlzSGF2aW5nRGF0YTogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXHJcbiAgICAgICAgcmV0dXJuIGRhdGFzZXQuZ2V0TGVuZ3RoTm90TnVsbCgpO1xyXG4gICAgfSxcclxuICAgIG1heFN0cmVhazogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXHJcbiAgICAgICAgbGV0IHN0cmVhayA9IDA7XHJcbiAgICAgICAgbGV0IG1heFN0cmVhayA9IDA7XHJcbiAgICAgICAgZm9yIChsZXQgZGF0YVBvaW50IG9mIGRhdGFzZXQpIHtcclxuICAgICAgICAgICAgaWYgKGRhdGFQb2ludC52YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgc3RyZWFrKys7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzdHJlYWsgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzdHJlYWsgPj0gbWF4U3RyZWFrKSB7XHJcbiAgICAgICAgICAgICAgICBtYXhTdHJlYWsgPSBzdHJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1heFN0cmVhaztcclxuICAgIH0sXHJcbiAgICBtYXhTdHJlYWtTdGFydDogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICAvLyByZXR1cm4gTW9tZW50XHJcbiAgICAgICAgbGV0IHN0cmVhayA9IDA7XHJcbiAgICAgICAgbGV0IG1heFN0cmVhayA9IDA7XHJcbiAgICAgICAgbGV0IHN0cmVha1N0YXJ0OiBNb21lbnQgPSBudWxsO1xyXG4gICAgICAgIGxldCBtYXhTdHJlYWtTdGFydDogTW9tZW50ID0gbnVsbDtcclxuICAgICAgICBpZiAoZGF0YXNldCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBkYXRhUG9pbnQgb2YgZGF0YXNldCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGFQb2ludC52YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYWsgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFrU3RhcnQgPSBkYXRhUG9pbnQuZGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFrKys7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHN0cmVhayA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoc3RyZWFrID49IG1heFN0cmVhaykge1xyXG4gICAgICAgICAgICAgICAgICAgIG1heFN0cmVhayA9IHN0cmVhaztcclxuICAgICAgICAgICAgICAgICAgICBtYXhTdHJlYWtTdGFydCA9IHN0cmVha1N0YXJ0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtYXhTdHJlYWtTdGFydDtcclxuICAgIH0sXHJcbiAgICBtYXhTdHJlYWtFbmQ6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxyXG4gICAgICAgIGxldCBzdHJlYWsgPSAwO1xyXG4gICAgICAgIGxldCBtYXhTdHJlYWsgPSAwO1xyXG4gICAgICAgIGxldCBzdHJlYWtFbmQ6IE1vbWVudCA9IG51bGw7XHJcbiAgICAgICAgbGV0IG1heFN0cmVha0VuZDogTW9tZW50ID0gbnVsbDtcclxuICAgICAgICBpZiAoZGF0YXNldCkge1xyXG4gICAgICAgICAgICBsZXQgYXJyYXlEYXRhc2V0ID0gQXJyYXkuZnJvbShkYXRhc2V0KTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgYXJyYXlEYXRhc2V0Lmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBwb2ludCA9IGFycmF5RGF0YXNldFtpbmRdO1xyXG4gICAgICAgICAgICAgICAgbGV0IG5leHRQb2ludCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kIDwgYXJyYXlEYXRhc2V0Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0UG9pbnQgPSBhcnJheURhdGFzZXRbaW5kICsgMV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pbnQudmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdHJlYWsrKztcclxuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFBvaW50Py52YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJlYWtFbmQgPSBwb2ludC5kYXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc3RyZWFrID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChzdHJlYWsgPj0gbWF4U3RyZWFrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc3RyZWFrKTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhtYXhTdHJlYWspO1xyXG4gICAgICAgICAgICAgICAgICAgIG1heFN0cmVhayA9IHN0cmVhaztcclxuICAgICAgICAgICAgICAgICAgICBtYXhTdHJlYWtFbmQgPSBzdHJlYWtFbmQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1heFN0cmVha0VuZDtcclxuICAgIH0sXHJcbiAgICBtYXhCcmVha3M6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIG51bWJlclxyXG4gICAgICAgIGxldCBicmVha3MgPSAwO1xyXG4gICAgICAgIGxldCBtYXhCcmVha3MgPSAwO1xyXG4gICAgICAgIGZvciAobGV0IGRhdGFQb2ludCBvZiBkYXRhc2V0KSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhUG9pbnQudmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGJyZWFrcysrO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgYnJlYWtzID0gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoYnJlYWtzID4gbWF4QnJlYWtzKSB7XHJcbiAgICAgICAgICAgICAgICBtYXhCcmVha3MgPSBicmVha3M7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG1heEJyZWFrcztcclxuICAgIH0sXHJcbiAgICBtYXhCcmVha3NTdGFydDogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICAvLyByZXR1cm4gTW9tZW50XHJcbiAgICAgICAgbGV0IGJyZWFrcyA9IDA7XHJcbiAgICAgICAgbGV0IG1heEJyZWFrcyA9IDA7XHJcbiAgICAgICAgbGV0IGJyZWFrc1N0YXJ0OiBNb21lbnQgPSBudWxsO1xyXG4gICAgICAgIGxldCBtYXhCcmVha3NTdGFydDogTW9tZW50ID0gbnVsbDtcclxuICAgICAgICBpZiAoZGF0YXNldCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBkYXRhUG9pbnQgb2YgZGF0YXNldCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGFQb2ludC52YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChicmVha3MgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWtzU3RhcnQgPSBkYXRhUG9pbnQuZGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtzKys7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrcyA9IDA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoYnJlYWtzID49IG1heEJyZWFrcykge1xyXG4gICAgICAgICAgICAgICAgICAgIG1heEJyZWFrcyA9IGJyZWFrcztcclxuICAgICAgICAgICAgICAgICAgICBtYXhCcmVha3NTdGFydCA9IGJyZWFrc1N0YXJ0O1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtYXhCcmVha3NTdGFydDtcclxuICAgIH0sXHJcbiAgICBtYXhCcmVha3NFbmQ6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIE1vbWVudFxyXG4gICAgICAgIGxldCBicmVha3MgPSAwO1xyXG4gICAgICAgIGxldCBtYXhCcmVha3MgPSAwO1xyXG4gICAgICAgIGxldCBicmVha3NFbmQ6IE1vbWVudCA9IG51bGw7XHJcbiAgICAgICAgbGV0IG1heEJyZWFrc0VuZDogTW9tZW50ID0gbnVsbDtcclxuICAgICAgICBpZiAoZGF0YXNldCkge1xyXG4gICAgICAgICAgICBsZXQgYXJyYXlEYXRhc2V0ID0gQXJyYXkuZnJvbShkYXRhc2V0KTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgYXJyYXlEYXRhc2V0Lmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICAgICAgICAgIGxldCBwb2ludCA9IGFycmF5RGF0YXNldFtpbmRdO1xyXG4gICAgICAgICAgICAgICAgbGV0IG5leHRQb2ludCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kIDwgYXJyYXlEYXRhc2V0Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBuZXh0UG9pbnQgPSBhcnJheURhdGFzZXRbaW5kICsgMV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pbnQudmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBicmVha3MrKztcclxuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dFBvaW50Py52YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVha3NFbmQgPSBwb2ludC5kYXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtzID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChicmVha3MgPj0gbWF4QnJlYWtzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbWF4QnJlYWtzID0gYnJlYWtzO1xyXG4gICAgICAgICAgICAgICAgICAgIG1heEJyZWFrc0VuZCA9IGJyZWFrc0VuZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWF4QnJlYWtzRW5kO1xyXG4gICAgfSxcclxuICAgIGxhc3RTdHJlYWs6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGRlcHJlY2F0ZWQgZnVuY3Rpb24gJ2xhc3RTdHJlYWsnXCI7XHJcbiAgICB9LFxyXG4gICAgY3VycmVudFN0cmVhazogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICAvLyByZXR1cm4gbnVtYmVyXHJcbiAgICAgICAgbGV0IGN1cnJlbnRTdHJlYWsgPSAwO1xyXG4gICAgICAgIGlmIChkYXRhc2V0KSB7XHJcbiAgICAgICAgICAgIGxldCBhcnJheURhdGFzZXQgPSBBcnJheS5mcm9tKGRhdGFzZXQpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSBhcnJheURhdGFzZXQubGVuZ3RoIC0gMTsgaW5kID49IDA7IGluZC0tKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnQgPSBhcnJheURhdGFzZXRbaW5kXTtcclxuICAgICAgICAgICAgICAgIGlmIChwb2ludC52YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyZWFrKys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTdHJlYWs7XHJcbiAgICB9LFxyXG4gICAgY3VycmVudFN0cmVha1N0YXJ0OiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xyXG4gICAgICAgIC8vIHJldHVybiBNb21lbnRcclxuICAgICAgICBsZXQgY3VycmVudFN0cmVhayA9IDA7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRTdHJlYWtTdGFydDogTW9tZW50ID0gbnVsbDtcclxuICAgICAgICBpZiAoZGF0YXNldCkge1xyXG4gICAgICAgICAgICBsZXQgYXJyYXlEYXRhc2V0ID0gQXJyYXkuZnJvbShkYXRhc2V0KTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gYXJyYXlEYXRhc2V0Lmxlbmd0aCAtIDE7IGluZCA+PSAwOyBpbmQtLSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBvaW50ID0gYXJyYXlEYXRhc2V0W2luZF07XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kIDwgYXJyYXlEYXRhc2V0Lmxlbmd0aCAtIDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyZWFrU3RhcnQgPSBhcnJheURhdGFzZXRbaW5kICsgMV0uZGF0ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwb2ludC52YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyZWFrKys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjdXJyZW50U3RyZWFrU3RhcnQgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGFic2Vuc2VcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRTdHJlYWtTdGFydDtcclxuICAgIH0sXHJcbiAgICBjdXJyZW50U3RyZWFrRW5kOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xyXG4gICAgICAgIC8vIHJldHVybiBNb21lbnRcclxuICAgICAgICBsZXQgY3VycmVudFN0cmVhayA9IDA7XHJcbiAgICAgICAgbGV0IGN1cnJlbnRTdHJlYWtFbmQ6IE1vbWVudCA9IG51bGw7XHJcbiAgICAgICAgaWYgKGRhdGFzZXQpIHtcclxuICAgICAgICAgICAgbGV0IGFycmF5RGF0YXNldCA9IEFycmF5LmZyb20oZGF0YXNldCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IGFycmF5RGF0YXNldC5sZW5ndGggLSAxOyBpbmQgPj0gMDsgaW5kLS0pIHtcclxuICAgICAgICAgICAgICAgIGxldCBwb2ludCA9IGFycmF5RGF0YXNldFtpbmRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBvaW50LnZhbHVlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50U3RyZWFrID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTdHJlYWtFbmQgPSBwb2ludC5kYXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3RyZWFrKys7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjdXJyZW50U3RyZWFrRW5kID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkVycm9yOiBhYnNlbnNlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50U3RyZWFrRW5kO1xyXG4gICAgfSxcclxuICAgIGN1cnJlbnRCcmVha3M6IGZ1bmN0aW9uIChkYXRhc2V0LCByZW5kZXJJbmZvKSB7XHJcbiAgICAgICAgLy8gcmV0dXJuIG51bWJlclxyXG4gICAgICAgIGxldCBjdXJyZW50QnJlYWtzID0gMDtcclxuICAgICAgICBpZiAoZGF0YXNldCkge1xyXG4gICAgICAgICAgICBsZXQgYXJyYXlEYXRhc2V0ID0gQXJyYXkuZnJvbShkYXRhc2V0KTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gYXJyYXlEYXRhc2V0Lmxlbmd0aCAtIDE7IGluZCA+PSAwOyBpbmQtLSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBvaW50ID0gYXJyYXlEYXRhc2V0W2luZF07XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pbnQudmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50QnJlYWtzKys7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50QnJlYWtzO1xyXG4gICAgfSxcclxuICAgIGN1cnJlbnRCcmVha3NTdGFydDogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICAvLyByZXR1cm4gTW9tZW50XHJcbiAgICAgICAgbGV0IGN1cnJlbnRCcmVha3MgPSAwO1xyXG4gICAgICAgIGxldCBjdXJyZW50QnJlYWtzU3RhcnQ6IE1vbWVudCA9IG51bGw7XHJcbiAgICAgICAgaWYgKGRhdGFzZXQpIHtcclxuICAgICAgICAgICAgbGV0IGFycmF5RGF0YXNldCA9IEFycmF5LmZyb20oZGF0YXNldCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IGFycmF5RGF0YXNldC5sZW5ndGggLSAxOyBpbmQgPj0gMDsgaW5kLS0pIHtcclxuICAgICAgICAgICAgICAgIGxldCBwb2ludCA9IGFycmF5RGF0YXNldFtpbmRdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZCA8IGFycmF5RGF0YXNldC5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEJyZWFrc1N0YXJ0ID0gYXJyYXlEYXRhc2V0W2luZCArIDFdLmRhdGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pbnQudmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50QnJlYWtzKys7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY3VycmVudEJyZWFrc1N0YXJ0ID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkVycm9yOiBhYnNlbnNlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjdXJyZW50QnJlYWtzU3RhcnQ7XHJcbiAgICB9LFxyXG4gICAgY3VycmVudEJyZWFrc0VuZDogZnVuY3Rpb24gKGRhdGFzZXQsIHJlbmRlckluZm8pIHtcclxuICAgICAgICAvLyByZXR1cm4gTW9tZW50XHJcbiAgICAgICAgbGV0IGN1cnJlbnRCcmVha3MgPSAwO1xyXG4gICAgICAgIGxldCBjdXJyZW50QnJlYWtzRW5kOiBNb21lbnQgPSBudWxsO1xyXG4gICAgICAgIGlmIChkYXRhc2V0KSB7XHJcbiAgICAgICAgICAgIGxldCBhcnJheURhdGFzZXQgPSBBcnJheS5mcm9tKGRhdGFzZXQpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSBhcnJheURhdGFzZXQubGVuZ3RoIC0gMTsgaW5kID49IDA7IGluZC0tKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcG9pbnQgPSBhcnJheURhdGFzZXRbaW5kXTtcclxuICAgICAgICAgICAgICAgIGlmIChwb2ludC52YWx1ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50QnJlYWtzID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRCcmVha3NFbmQgPSBwb2ludC5kYXRlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50QnJlYWtzKys7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoY3VycmVudEJyZWFrc0VuZCA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogYWJzZW5zZVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY3VycmVudEJyZWFrc0VuZDtcclxuICAgIH0sXHJcbiAgICBhdmVyYWdlOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xyXG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcclxuICAgICAgICBsZXQgY291bnROb3ROdWxsID0gZGF0YXNldC5nZXRMZW5ndGhOb3ROdWxsKCk7XHJcbiAgICAgICAgaWYgKCFjaGVja0Rpdmlzb3IoY291bnROb3ROdWxsKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogZGl2aWRlIGJ5IHplcm8gaW4gZXhwcmVzc2lvblwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3VtID0gZDMuc3VtKGRhdGFzZXQuZ2V0VmFsdWVzKCkpO1xyXG4gICAgICAgIHJldHVybiBzdW0gLyBjb3VudE5vdE51bGw7XHJcbiAgICB9LFxyXG4gICAgbWVkaWFuOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xyXG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcclxuICAgICAgICByZXR1cm4gZDMubWVkaWFuKGRhdGFzZXQuZ2V0VmFsdWVzKCkpO1xyXG4gICAgfSxcclxuICAgIHZhcmlhbmNlOiBmdW5jdGlvbiAoZGF0YXNldCwgcmVuZGVySW5mbykge1xyXG4gICAgICAgIC8vIHJldHVybiBudW1iZXJcclxuICAgICAgICByZXR1cm4gZDMudmFyaWFuY2UoZGF0YXNldC5nZXRWYWx1ZXMoKSk7XHJcbiAgICB9LFxyXG59O1xyXG5cclxuY29uc3QgZm5NYXBVbmlyeU9wOiBGbk1hcFVuaXJ5T3AgPSB7XHJcbiAgICBcIi1cIjogZnVuY3Rpb24gKHUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xICogdTtcclxuICAgICAgICB9IGVsc2UgaWYgKHUgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XHJcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gdS5jbG9uZVRvVG1wRGF0YXNldCgpO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSAtMSAqIHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IHVua25vd24gb3BlcmF0aW9uIGZvciAnLSdcIjtcclxuICAgIH0sXHJcbiAgICBcIitcIjogZnVuY3Rpb24gKHUpIHtcclxuICAgICAgICBpZiAodHlwZW9mIHUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh1IGluc3RhbmNlb2YgRGF0YXNldCkge1xyXG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IHUuY2xvbmVUb1RtcERhdGFzZXQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIkVycm9yOiB1bmtub3duIG9wZXJhdGlvbiBmb3IgJysnXCI7XHJcbiAgICB9LFxyXG59O1xyXG5cclxuY29uc3QgZm5NYXBCaW5hcnlPcDogRm5NYXBCaW5hcnlPcCA9IHtcclxuICAgIFwiK1wiOiBmdW5jdGlvbiAobCwgcikge1xyXG4gICAgICAgIGlmICh0eXBlb2YgbCA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gbnVtYmVyXHJcbiAgICAgICAgICAgIHJldHVybiBsICsgcjtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHIgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XHJcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gci5jbG9uZVRvVG1wRGF0YXNldCgpO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBsICsgdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAobCBpbnN0YW5jZW9mIERhdGFzZXQgJiYgdHlwZW9mIHIgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcclxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSBsLmNsb25lVG9UbXBEYXRhc2V0KCk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IHZhbHVlICsgcjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiByIGluc3RhbmNlb2YgRGF0YXNldCkge1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxyXG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IGwuY2xvbmVUb1RtcERhdGFzZXQoKTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWUgKyByLmdldFZhbHVlcygpW2luZGV4XTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIkVycm9yOiB1bmtub3duIG9wZXJhdGlvbiBmb3IgJysnXCI7XHJcbiAgICB9LFxyXG4gICAgXCItXCI6IGZ1bmN0aW9uIChsLCByKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHR5cGVvZiByID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiBudW1iZXJcclxuICAgICAgICAgICAgcmV0dXJuIGwgLSByO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGwgPT09IFwibnVtYmVyXCIgJiYgciBpbnN0YW5jZW9mIERhdGFzZXQpIHtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcclxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSByLmNsb25lVG9UbXBEYXRhc2V0KCk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IGwgLSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxyXG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IGwuY2xvbmVUb1RtcERhdGFzZXQoKTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWUgLSByO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiByIGluc3RhbmNlb2YgRGF0YXNldCkge1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxyXG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IGwuY2xvbmVUb1RtcERhdGFzZXQoKTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWUgLSByLmdldFZhbHVlcygpW2luZGV4XTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIkVycm9yOiB1bmtub3duIG9wZXJhdGlvbiBmb3IgJy0nXCI7XHJcbiAgICB9LFxyXG4gICAgXCIqXCI6IGZ1bmN0aW9uIChsLCByKSB7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHR5cGVvZiByID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiBudW1iZXJcclxuICAgICAgICAgICAgcmV0dXJuIGwgKiByO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGwgPT09IFwibnVtYmVyXCIgJiYgciBpbnN0YW5jZW9mIERhdGFzZXQpIHtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcclxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSByLmNsb25lVG9UbXBEYXRhc2V0KCk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IGwgKiB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxyXG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IGwuY2xvbmVUb1RtcERhdGFzZXQoKTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWUgKiByO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcclxuICAgICAgICB9IGVsc2UgaWYgKGwgaW5zdGFuY2VvZiBEYXRhc2V0ICYmIHIgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XHJcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gbC5jbG9uZVRvVG1wRGF0YXNldCgpO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZSAqIHIuZ2V0VmFsdWVzKClbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IHVua25vd24gb3BlcmF0aW9uIGZvciAnKidcIjtcclxuICAgIH0sXHJcbiAgICBcIi9cIjogZnVuY3Rpb24gKGwsIHIpIHtcclxuICAgICAgICBpZiAoIWNoZWNrRGl2aXNvcihyKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gXCJFcnJvcjogZGl2aWRlIGJ5IHplcm8gaW4gZXhwcmVzc2lvblwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodHlwZW9mIGwgPT09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHIgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIG51bWJlclxyXG4gICAgICAgICAgICByZXR1cm4gbCAvIHI7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgbCA9PT0gXCJudW1iZXJcIiAmJiByIGluc3RhbmNlb2YgRGF0YXNldCkge1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxyXG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IHIuY2xvbmVUb1RtcERhdGFzZXQoKTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbCAvIHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gdG1wRGF0YXNldDtcclxuICAgICAgICB9IGVsc2UgaWYgKGwgaW5zdGFuY2VvZiBEYXRhc2V0ICYmIHR5cGVvZiByID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XHJcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gbC5jbG9uZVRvVG1wRGF0YXNldCgpO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSB2YWx1ZSAvIHI7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAobCBpbnN0YW5jZW9mIERhdGFzZXQgJiYgciBpbnN0YW5jZW9mIERhdGFzZXQpIHtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcclxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSBsLmNsb25lVG9UbXBEYXRhc2V0KCk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IHZhbHVlIC8gci5nZXRWYWx1ZXMoKVtpbmRleF07XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gXCJFcnJvcjogdW5rbm93biBvcGVyYXRpb24gZm9yICcvJ1wiO1xyXG4gICAgfSxcclxuICAgIFwiJVwiOiBmdW5jdGlvbiAobCwgcikge1xyXG4gICAgICAgIGlmICghY2hlY2tEaXZpc29yKHIpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBcIkVycm9yOiBkaXZpZGUgYnkgemVybyBpbiBleHByZXNzaW9uXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0eXBlb2YgbCA9PT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgciA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gbnVtYmVyXHJcbiAgICAgICAgICAgIHJldHVybiBsICUgcjtcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBsID09PSBcIm51bWJlclwiICYmIHIgaW5zdGFuY2VvZiBEYXRhc2V0KSB7XHJcbiAgICAgICAgICAgIC8vIHJldHVybiBEYXRhc2V0XHJcbiAgICAgICAgICAgIGxldCB0bXBEYXRhc2V0ID0gci5jbG9uZVRvVG1wRGF0YXNldCgpO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIGlmIChhcnJheVtpbmRleF0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRleF0gPSBsICUgdmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0bXBEYXRhc2V0LnJlY2FsY3VsYXRlTWluTWF4KCk7XHJcbiAgICAgICAgICAgIHJldHVybiB0bXBEYXRhc2V0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAobCBpbnN0YW5jZW9mIERhdGFzZXQgJiYgdHlwZW9mIHIgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgLy8gcmV0dXJuIERhdGFzZXRcclxuICAgICAgICAgICAgbGV0IHRtcERhdGFzZXQgPSBsLmNsb25lVG9UbXBEYXRhc2V0KCk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGFycmF5W2luZGV4XSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZGV4XSA9IHZhbHVlICUgcjtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XHJcbiAgICAgICAgfSBlbHNlIGlmIChsIGluc3RhbmNlb2YgRGF0YXNldCAmJiByIGluc3RhbmNlb2YgRGF0YXNldCkge1xyXG4gICAgICAgICAgICAvLyByZXR1cm4gRGF0YXNldFxyXG4gICAgICAgICAgICBsZXQgdG1wRGF0YXNldCA9IGwuY2xvbmVUb1RtcERhdGFzZXQoKTtcclxuICAgICAgICAgICAgdG1wRGF0YXNldC5nZXRWYWx1ZXMoKS5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJyYXlbaW5kZXhdICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gdmFsdWUgJSByLmdldFZhbHVlcygpW2luZGV4XTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRtcERhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRtcERhdGFzZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIkVycm9yOiB1bmtub3duIG9wZXJhdGlvbiBmb3IgJyUnXCI7XHJcbiAgICB9LFxyXG59O1xyXG5cclxuY29uc3QgZm5NYXBEYXRhc2V0VG9EYXRhc2V0OiBGbk1hcERhdGFzZXRUb0RhdGFzZXQgPSB7XHJcbiAgICAvLyBtaW4gdmFsdWUgb2YgYSBkYXRhc2V0XHJcbiAgICBub3JtYWxpemU6IGZ1bmN0aW9uIChkYXRhc2V0LCBhcmdzLCByZW5kZXJJbmZvKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJub3JtYWxpemVcIik7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coZGF0YXNldCk7XHJcbiAgICAgICAgbGV0IHlNaW4gPSBkYXRhc2V0LmdldFlNaW4oKTtcclxuICAgICAgICBsZXQgeU1heCA9IGRhdGFzZXQuZ2V0WU1heCgpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGB5TWluL3lNYXg6ICR7eU1pbn0vJHt5TWF4fWApO1xyXG4gICAgICAgIGlmICh5TWluICE9PSBudWxsICYmIHlNYXggIT09IG51bGwgJiYgeU1heCA+IHlNaW4pIHtcclxuICAgICAgICAgICAgbGV0IG5vcm1hbGl6ZWQgPSBkYXRhc2V0LmNsb25lVG9UbXBEYXRhc2V0KCk7XHJcbiAgICAgICAgICAgIG5vcm1hbGl6ZWQuZ2V0VmFsdWVzKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gKHZhbHVlIC0geU1pbikgLyAoeU1heCAtIHlNaW4pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgbm9ybWFsaXplZC5yZWNhbGN1bGF0ZU1pbk1heCgpO1xyXG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplZDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFwiRXJyb3I6IGludmFsaWQgZGF0YSByYW5nZSBmb3IgZnVuY3Rpb24gJ25vcm1hbGl6ZSdcIjtcclxuICAgIH0sXHJcbiAgICBzZXRNaXNzaW5nVmFsdWVzOiBmdW5jdGlvbiAoZGF0YXNldCwgYXJncywgcmVuZGVySW5mbykge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwic2V0TWlzc2luZ1ZhbHVlc1wiKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0KTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhhcmdzKTtcclxuICAgICAgICBpZiAoYXJncyAmJiBhcmdzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgbGV0IG1pc3NpbmdWYWx1ZSA9IGFyZ3NbMF07XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG1pc3NpbmdWYWx1ZSk7XHJcbiAgICAgICAgICAgIGxldCBuZXdEYXRhc2V0ID0gZGF0YXNldC5jbG9uZVRvVG1wRGF0YXNldCgpO1xyXG4gICAgICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKG1pc3NpbmdWYWx1ZSkgJiYgIU51bWJlci5pc05hTihtaXNzaW5nVmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICBuZXdEYXRhc2V0LmdldFZhbHVlcygpLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBpbmRleCwgYXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kZXhdID0gbWlzc2luZ1ZhbHVlIGFzIG51bWJlcjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIG5ld0RhdGFzZXQucmVjYWxjdWxhdGVNaW5NYXgoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuZXdEYXRhc2V0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBcIkVycm9yOiBpbnZhbGlkIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gJ3NldE1pc3NpbmdWYWx1ZXMnXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBcIkVycm9yOiBpbnZhbGlkIGFyZ3VtZW50cyBmb3IgZnVuY3Rpb24gJ3NldE1pc3NpbmdWYWx1ZXNcIjtcclxuICAgIH0sXHJcbn07XHJcblxyXG5mdW5jdGlvbiBnZXREYXRhc2V0QnlJZChkYXRhc2V0SWQ6IG51bWJlciwgcmVuZGVySW5mbzogUmVuZGVySW5mbykge1xyXG4gICAgcmV0dXJuIHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZXZhbHVhdGVBcnJheShhcnI6IGFueSwgcmVuZGVySW5mbzogUmVuZGVySW5mbykge1xyXG4gICAgcmV0dXJuIGFyci5tYXAoZnVuY3Rpb24gKGV4cHI6IGpzZXAuRXhwcmVzc2lvbikge1xyXG4gICAgICAgIHJldHVybiBldmFsdWF0ZShleHByLCByZW5kZXJJbmZvKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBldmFsdWF0ZShleHByOiBqc2VwLkV4cHJlc3Npb24sIHJlbmRlckluZm86IFJlbmRlckluZm8pOiBhbnkge1xyXG4gICAgLy8gY29uc29sZS5sb2coZXhwcik7XHJcblxyXG4gICAgc3dpdGNoIChleHByLnR5cGUpIHtcclxuICAgICAgICBjYXNlIFwiTGl0ZXJhbFwiOlxyXG4gICAgICAgICAgICBsZXQgbGl0ZXJhbEV4cHIgPSBleHByIGFzIGpzZXAuTGl0ZXJhbDtcclxuICAgICAgICAgICAgcmV0dXJuIGxpdGVyYWxFeHByLnZhbHVlOyAvLyBzdHJpbmcsIG51bWJlciwgYm9vbGVhblxyXG5cclxuICAgICAgICBjYXNlIFwiSWRlbnRpZmllclwiOlxyXG4gICAgICAgICAgICBsZXQgaWRlbnRpZmllckV4cHIgPSBleHByIGFzIGpzZXAuSWRlbnRpZmllcjtcclxuICAgICAgICAgICAgbGV0IGlkZW50aWZpZXJOYW1lID0gaWRlbnRpZmllckV4cHIubmFtZTtcclxuICAgICAgICAgICAgaWYgKGlkZW50aWZpZXJOYW1lIGluIGZuTWFwRGF0YXNldFRvVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgRXJyb3I6IGRlcHJlY2F0ZWQgdGVtcGxhdGUgdmFyaWFibGUgJyR7aWRlbnRpZmllck5hbWV9JywgdXNlICcke2lkZW50aWZpZXJOYW1lfSgpJyBpbnN0ZWFkYDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpZGVudGlmaWVyTmFtZSBpbiBmbk1hcERhdGFzZXRUb0RhdGFzZXQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBgRXJyb3I6IGRlcHJlY2F0ZWQgdGVtcGxhdGUgdmFyaWFibGUgJyR7aWRlbnRpZmllck5hbWV9JywgdXNlICcke2lkZW50aWZpZXJOYW1lfSgpJyBpbnN0ZWFkYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYEVycm9yOiB1bmtub3duIGZ1bmN0aW9uIG5hbWUgJyR7aWRlbnRpZmllck5hbWV9J2A7XHJcblxyXG4gICAgICAgIGNhc2UgXCJVbmFyeUV4cHJlc3Npb25cIjpcclxuICAgICAgICAgICAgbGV0IHVuaXJ5RXhwciA9IGV4cHIgYXMganNlcC5VbmFyeUV4cHJlc3Npb247XHJcbiAgICAgICAgICAgIGxldCByZXRVbmlyeUFyZyA9IGV2YWx1YXRlKHVuaXJ5RXhwci5hcmd1bWVudCwgcmVuZGVySW5mbyk7XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmV0VW5pcnlBcmcgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXRVbmlyeUFyZztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZm5NYXBVbmlyeU9wW3VuaXJ5RXhwci5vcGVyYXRvcl0ocmV0VW5pcnlBcmcpO1xyXG5cclxuICAgICAgICBjYXNlIFwiQmluYXJ5RXhwcmVzc2lvblwiOlxyXG4gICAgICAgICAgICBsZXQgYmluYXJ5RXhwciA9IGV4cHIgYXMganNlcC5CaW5hcnlFeHByZXNzaW9uO1xyXG4gICAgICAgICAgICBsZXQgbGVmdFZhbHVlID0gZXZhbHVhdGUoYmluYXJ5RXhwci5sZWZ0LCByZW5kZXJJbmZvKTtcclxuICAgICAgICAgICAgbGV0IHJpZ2h0VmFsdWUgPSBldmFsdWF0ZShiaW5hcnlFeHByLnJpZ2h0LCByZW5kZXJJbmZvKTtcclxuICAgICAgICAgICAgbGV0IHJldENoZWNrID0gY2hlY2tCaW5hcnlPcGVyYW50VHlwZShsZWZ0VmFsdWUsIHJpZ2h0VmFsdWUpO1xyXG4gICAgICAgICAgICBpZiAodHlwZW9mIHJldENoZWNrID09PSBcInN0cmluZ1wiICYmIHJldENoZWNrLnN0YXJ0c1dpdGgoXCJFcnJvcjpcIikpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiByZXRDaGVjaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZm5NYXBCaW5hcnlPcFtiaW5hcnlFeHByLm9wZXJhdG9yXShsZWZ0VmFsdWUsIHJpZ2h0VmFsdWUpO1xyXG5cclxuICAgICAgICBjYXNlIFwiQ2FsbEV4cHJlc3Npb25cIjpcclxuICAgICAgICAgICAgbGV0IGNhbGxFeHByID0gZXhwciBhcyBqc2VwLkNhbGxFeHByZXNzaW9uO1xyXG5cclxuICAgICAgICAgICAgbGV0IGNhbGxlZUlkZW50aWZpZXIgPSBjYWxsRXhwci5jYWxsZWUgYXMganNlcC5JZGVudGlmaWVyO1xyXG4gICAgICAgICAgICBsZXQgZm5OYW1lID0gY2FsbGVlSWRlbnRpZmllci5uYW1lO1xyXG4gICAgICAgICAgICBsZXQgYXJncyA9IGNhbGxFeHByLmFyZ3VtZW50cztcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZm5OYW1lKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYXJncyk7XHJcbiAgICAgICAgICAgIGxldCBldmFsdWF0ZWRBcmdzID0gZXZhbHVhdGVBcnJheShhcmdzLCByZW5kZXJJbmZvKTtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBldmFsdWF0ZWRBcmdzID09PSBcInN0cmluZ1wiKSByZXR1cm4gZXZhbHVhdGVkQXJncztcclxuXHJcbiAgICAgICAgICAgIC8vIGZ1bmN0aW9uIGRhdGFzZXQgYWNjZXB0IG9ubHkgb25lIGFyZyBpbiBudW1iZXJcclxuICAgICAgICAgICAgaWYgKGZuTmFtZSA9PT0gXCJkYXRhc2V0XCIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChldmFsdWF0ZWRBcmdzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhcmcgPSBldmFsdWF0ZWRBcmdzWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnID09PSBcInN0cmluZ1wiKSByZXR1cm4gYXJnO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnICE9PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIkVycm9yOiBmdW5jdGlvbiAnZGF0YXNldCcgb25seSBhY2NlcHRzIGlkIGluIG51bWJlclwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YXNldCA9IGdldERhdGFzZXRCeUlkKGFyZywgcmVuZGVySW5mbyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgRXJyb3I6IG5vIGRhdGFzZXQgZm91bmQgZm9yIGlkICcke2FyZ30nYDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFzZXQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gZm5EYXRhc2V0IGFjY2VwdCBvbmx5IG9uZSBhcmcgaW4gbnVtYmVyIG9yIERhdGFzZXRcclxuICAgICAgICAgICAgZWxzZSBpZiAoZm5OYW1lIGluIGZuTWFwRGF0YXNldFRvVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChldmFsdWF0ZWRBcmdzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFVzZSBmaXJzdCBub24tWCBkYXRhc2V0XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFzZXQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGRzIG9mIHJlbmRlckluZm8uZGF0YXNldHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhc2V0ICYmICFkcy5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0ID0gZHM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiBicmVha3MgaGVyZSwgdGhlIGluZGV4IG9mIERhdGFzZXRzIG5vdCByZXNldD8/P1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YXNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYE5vIGF2YWlsYWJsZSBkYXRhc2V0IGZvdW5kIGZvciBmdW5jdGlvbiAke2ZuTmFtZX1gO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm5NYXBEYXRhc2V0VG9WYWx1ZVtmbk5hbWVdKGRhdGFzZXQsIHJlbmRlckluZm8pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGV2YWx1YXRlZEFyZ3MubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGFyZyA9IGV2YWx1YXRlZEFyZ3NbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCIpIHJldHVybiBhcmc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFyZyBpbnN0YW5jZW9mIERhdGFzZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuTWFwRGF0YXNldFRvVmFsdWVbZm5OYW1lXShhcmcsIHJlbmRlckluZm8pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgRXJyb3I6IGZ1bmN0aW9uICcke2ZuTmFtZX0nIG9ubHkgYWNjZXB0cyBEYXRhc2V0YDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gYEVycm9yOiBUb28gbWFueSBhcmd1bWVudHMgZm9yIGZ1bmN0aW9uICR7Zm5OYW1lfWA7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm5OYW1lIGluIGZuTWFwRGF0YXNldFRvRGF0YXNldCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2YWx1YXRlZEFyZ3MubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBldmFsdWF0ZWRBcmdzWzBdID09PSBcInN0cmluZ1wiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZhbHVhdGVkQXJnc1swXTsgLy8gZXJyb3IgbWVzc2FnZVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChldmFsdWF0ZWRBcmdzWzBdIGluc3RhbmNlb2YgRGF0YXNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YXNldCA9IGV2YWx1YXRlZEFyZ3NbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmbk1hcERhdGFzZXRUb0RhdGFzZXRbZm5OYW1lXShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBgRXJyb3I6IGZ1bmN0aW9uICR7Zm5OYW1lfSBvbmx5IGFjY2VwdCBEYXRhc2V0YDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2YWx1YXRlZEFyZ3MubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZXZhbHVhdGVkQXJnc1swXSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXZhbHVhdGVkQXJnc1swXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV2YWx1YXRlZEFyZ3NbMF0gaW5zdGFuY2VvZiBEYXRhc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhc2V0ID0gZXZhbHVhdGVkQXJnc1swXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZuTWFwRGF0YXNldFRvRGF0YXNldFtmbk5hbWVdKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXNldCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWx1YXRlZEFyZ3MuZmlsdGVyKGZ1bmN0aW9uIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYW55LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBudW1iZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyOiBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleCA+IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYEVycm9yOiBmdW5jdGlvbiAke2ZuTmFtZX0gb25seSBhY2NlcHQgRGF0YXNldGA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGBFcnJvcjogVG9vIG1hbnkgYXJndW1lbnRzIGZvciBmdW5jdGlvbiAke2ZuTmFtZX1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBgRXJyb3I6IHVua25vd24gZnVuY3Rpb24gbmFtZSAnJHtmbk5hbWV9J2A7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gXCJFcnJvcjogdW5rbm93biBleHByZXNzaW9uXCI7XHJcbn1cclxuXHJcbmludGVyZmFjZSBFeHByUmVzb2x2ZWQge1xyXG4gICAgc291cmNlOiBzdHJpbmc7XHJcbiAgICB2YWx1ZTogbnVtYmVyIHwgTW9tZW50O1xyXG4gICAgZm9ybWF0OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8vIEdldCBhIGxpc3Qgb2YgcmVzb2x2ZWQgcmVzdWx0IGNvbnRhaW5pbmcgc291cmNlLCB2YWx1ZSwgYW5kIGZvcm1hdFxyXG5mdW5jdGlvbiByZXNvbHZlKFxyXG4gICAgdGV4dDogc3RyaW5nLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xyXG4pOiBBcnJheTxFeHByUmVzb2x2ZWQ+IHwgc3RyaW5nIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKHRleHQpO1xyXG5cclxuICAgIGxldCBleHByTWFwOiBBcnJheTxFeHByUmVzb2x2ZWQ+ID0gW107XHJcblxyXG4gICAgLy8ge3soPzxleHByPltcXHcrXFwtKlxcLzAtOVxccygpXFxbXFxdJS5dKykoOjooPzxmb3JtYXQ+W1xcdytcXC0qXFwvMC05XFxzKClcXFtcXF0lLjpdKykpP319XHJcbiAgICBsZXQgc3RyRXhwclJlZ2V4ID1cclxuICAgICAgICBcInt7KD88ZXhwcj5bXFxcXHcrXFxcXC0qXFxcXC8wLTlcXFxccygpXFxcXFtcXFxcXSUuLF0rKSg6Oig/PGZvcm1hdD5bXFxcXHcrXFxcXC0qXFxcXC8wLTlcXFxccygpXFxcXFtcXFxcXSUuOl0rKSk/fX1cIjtcclxuICAgIGxldCBleHByUmVnZXggPSBuZXcgUmVnRXhwKHN0ckV4cHJSZWdleCwgXCJnbVwiKTtcclxuICAgIGxldCBtYXRjaDtcclxuICAgIHdoaWxlICgobWF0Y2ggPSBleHByUmVnZXguZXhlYyh0ZXh0KSkpIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtYXRjaCk7XHJcbiAgICAgICAgbGV0IGZ1bGxtYXRjaCA9IG1hdGNoWzBdO1xyXG4gICAgICAgIGlmIChleHByTWFwLnNvbWUoKGUpID0+IGUuc291cmNlID09PSBmdWxsbWF0Y2gpKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBtYXRjaC5ncm91cHMgIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBtYXRjaC5ncm91cHMuZXhwciAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGV4cHIgPSBtYXRjaC5ncm91cHMuZXhwcjtcclxuXHJcbiAgICAgICAgICAgICAgICBsZXQgYXN0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXN0ID0ganNlcChleHByKTtcclxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIkVycm9yOlwiICsgZXJyLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAoIWFzdCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcIkVycm9yOiBmYWlsZWQgdG8gcGFyc2UgZXhwcmVzc2lvblwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYXN0KTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGV2YWx1YXRlKGFzdCwgcmVuZGVySW5mbyk7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOyAvLyBlcnJvciBtZXNzYWdlXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5tb21lbnQuaXNNb21lbnQodmFsdWUpXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZm9ybWF0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG1hdGNoLmdyb3Vwcy5mb3JtYXQgIT09IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ID0gbWF0Y2guZ3JvdXBzLmZvcm1hdDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGV4cHJNYXAucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogZnVsbG1hdGNoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogZm9ybWF0LFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBleHByTWFwO1xyXG59XHJcblxyXG4vLyBSZXNvbHZlIHRoZSB0ZW1wbGF0ZSBleHByZXNzaW9uIGluIHN0cmluZyBhbmQgcmV0dXJuIGEgcmVzb2x2ZWQgc3RyaW5nXHJcbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlVGVtcGxhdGUoXHJcbiAgICB0ZW1wbGF0ZTogc3RyaW5nLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xyXG4pOiBzdHJpbmcge1xyXG4gICAgbGV0IHJldFJlc29sdmUgPSByZXNvbHZlKHRlbXBsYXRlLCByZW5kZXJJbmZvKTtcclxuICAgIGlmICh0eXBlb2YgcmV0UmVzb2x2ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiByZXRSZXNvbHZlOyAvLyBlcnJvciBtZXNzYWdlXHJcbiAgICB9XHJcbiAgICBsZXQgZXhwck1hcCA9IHJldFJlc29sdmUgYXMgQXJyYXk8RXhwclJlc29sdmVkPjtcclxuXHJcbiAgICBmb3IgKGxldCBleHByUmVzb2x2ZWQgb2YgZXhwck1hcCkge1xyXG4gICAgICAgIGxldCBzb3VyY2UgPSBleHByUmVzb2x2ZWQuc291cmNlO1xyXG4gICAgICAgIGxldCB2YWx1ZSA9IGV4cHJSZXNvbHZlZC52YWx1ZTtcclxuICAgICAgICBsZXQgZm9ybWF0ID0gZXhwclJlc29sdmVkLmZvcm1hdDtcclxuICAgICAgICBsZXQgc3RyVmFsdWUgPSBcIlwiO1xyXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgaWYgKGZvcm1hdCkge1xyXG4gICAgICAgICAgICAgICAgc3RyVmFsdWUgPSBzcHJpbnRmKFwiJVwiICsgZm9ybWF0LCB2YWx1ZSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBzdHJWYWx1ZSA9IHZhbHVlLnRvRml4ZWQoMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHdpbmRvdy5tb21lbnQuaXNNb21lbnQodmFsdWUpKSB7XHJcbiAgICAgICAgICAgIGlmIChmb3JtYXQpIHtcclxuICAgICAgICAgICAgICAgIHN0clZhbHVlID0gaGVscGVyLmRhdGVUb1N0cih2YWx1ZSwgZm9ybWF0KTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN0clZhbHVlID0gaGVscGVyLmRhdGVUb1N0cih2YWx1ZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHN0clZhbHVlKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGV4cHJSZXNvbHZlZCk7XHJcbiAgICAgICAgICAgIHRlbXBsYXRlID0gdGVtcGxhdGUuc3BsaXQoc291cmNlKS5qb2luKHN0clZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRlbXBsYXRlO1xyXG59XHJcblxyXG4vLyBSZXNvbHZlIHRoZSB0ZW1wbGF0ZSBleHByZXNzaW9uIGluIHN0cmluZyBhbmQgcmV0dXJuIGEgbnVtYmVyIG9yIGRhdGVcclxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVWYWx1ZShcclxuICAgIHRleHQ6IHN0cmluZyxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cclxuKTogbnVtYmVyIHwgTW9tZW50IHwgc3RyaW5nIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKHRlbXBsYXRlKTtcclxuICAgIHRleHQgPSB0ZXh0LnRyaW0oKTtcclxuXHJcbiAgICAvLyBpbnB1dCBpcyBwdXJlIG51bWJlclxyXG4gICAgaWYgKC9eKFtcXC1dP1swLTldK1tcXC5dWzAtOV0rfFtcXC1dP1swLTldKykkLy50ZXN0KHRleHQpKSB7XHJcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodGV4dCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdGVtcGxhdGVcclxuICAgIGxldCByZXRSZXNvbHZlID0gcmVzb2x2ZSh0ZXh0LCByZW5kZXJJbmZvKTtcclxuICAgIGlmICh0eXBlb2YgcmV0UmVzb2x2ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiByZXRSZXNvbHZlOyAvLyBlcnJvciBtZXNzYWdlXHJcbiAgICB9XHJcbiAgICBsZXQgZXhwck1hcCA9IHJldFJlc29sdmUgYXMgQXJyYXk8RXhwclJlc29sdmVkPjtcclxuXHJcbiAgICBpZiAoZXhwck1hcC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgcmV0dXJuIGV4cHJNYXBbMF0udmFsdWU7IC8vIG9ubHkgZmlyc3QgdmFsdWUgd2lsbCBiZSByZXR1cm5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gXCJFcnJvcjogZmFpbGVkIHRvIHJlc29sdmUgdmFsdWVzXCI7XHJcbn1cclxuIiwiaW1wb3J0IHF1YW50aWxlIGZyb20gXCIuL3F1YW50aWxlLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICByZXR1cm4gcXVhbnRpbGUodmFsdWVzLCAwLjUsIHZhbHVlb2YpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdmFyaWFuY2UodmFsdWVzLCB2YWx1ZW9mKSB7XG4gIGxldCBjb3VudCA9IDA7XG4gIGxldCBkZWx0YTtcbiAgbGV0IG1lYW4gPSAwO1xuICBsZXQgc3VtID0gMDtcbiAgaWYgKHZhbHVlb2YgPT09IHVuZGVmaW5lZCkge1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgKHZhbHVlID0gK3ZhbHVlKSA+PSB2YWx1ZSkge1xuICAgICAgICBkZWx0YSA9IHZhbHVlIC0gbWVhbjtcbiAgICAgICAgbWVhbiArPSBkZWx0YSAvICsrY291bnQ7XG4gICAgICAgIHN1bSArPSBkZWx0YSAqICh2YWx1ZSAtIG1lYW4pO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBsZXQgaW5kZXggPSAtMTtcbiAgICBmb3IgKGxldCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICgodmFsdWUgPSB2YWx1ZW9mKHZhbHVlLCArK2luZGV4LCB2YWx1ZXMpKSAhPSBudWxsICYmICh2YWx1ZSA9ICt2YWx1ZSkgPj0gdmFsdWUpIHtcbiAgICAgICAgZGVsdGEgPSB2YWx1ZSAtIG1lYW47XG4gICAgICAgIG1lYW4gKz0gZGVsdGEgLyArK2NvdW50O1xuICAgICAgICBzdW0gKz0gZGVsdGEgKiAodmFsdWUgLSBtZWFuKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKGNvdW50ID4gMSkgcmV0dXJuIHN1bSAvIChjb3VudCAtIDEpO1xufVxuIiwiaW1wb3J0IHsgTW9tZW50IH0gZnJvbSBcIm1vbWVudFwiO1xyXG5pbXBvcnQge1xyXG4gICAgRGF0YXNldHMsXHJcbiAgICBEYXRhUG9pbnQsXHJcbiAgICBSZW5kZXJJbmZvLFxyXG4gICAgUGllSW5mbyxcclxuICAgIE1vbnRoSW5mbyxcclxuICAgIERhdGFzZXQsXHJcbiAgICBTaXplLFxyXG4gICAgVHJhbnNmb3JtLFxyXG4gICAgQ2hhcnRFbGVtZW50cyxcclxuICAgIEdyYXBoVHlwZSxcclxuICAgIFZhbHVlVHlwZSxcclxufSBmcm9tIFwiLi9kYXRhXCI7XHJcbmltcG9ydCAqIGFzIGhlbHBlciBmcm9tIFwiLi9oZWxwZXJcIjtcclxuaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XHJcbmltcG9ydCAqIGFzIGV4cHIgZnJvbSBcIi4vZXhwclwiO1xyXG5pbXBvcnQgeyBwaWUgfSBmcm9tIFwiZDNcIjtcclxuXHJcbmZ1bmN0aW9uIHNldENoYXJ0U2NhbGUoXHJcbiAgICBfY2FudmFzOiBIVE1MRWxlbWVudCxcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXHJcbikge1xyXG4gICAgbGV0IGNhbnZhcyA9IGQzLnNlbGVjdChfY2FudmFzKTtcclxuICAgIGxldCBzdmcgPSBjaGFydEVsZW1lbnRzLnN2ZztcclxuICAgIGxldCBzdmdXaWR0aCA9IHBhcnNlRmxvYXQoc3ZnLmF0dHIoXCJ3aWR0aFwiKSk7XHJcbiAgICBsZXQgc3ZnSGVpZ2h0ID0gcGFyc2VGbG9hdChzdmcuYXR0cihcImhlaWdodFwiKSk7XHJcbiAgICBzdmcuYXR0cihcIndpZHRoXCIsIG51bGwpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbnVsbClcclxuICAgICAgICAuYXR0cihcInZpZXdCb3hcIiwgYDAgMCAke3N2Z1dpZHRofSAke3N2Z0hlaWdodH1gKVxyXG4gICAgICAgIC5hdHRyKFwicHJlc2VydmVBc3BlY3RSYXRpb1wiLCBcInhNaWRZTWlkIG1lZXRcIik7XHJcblxyXG4gICAgaWYgKHJlbmRlckluZm8uZml0UGFuZWxXaWR0aCkge1xyXG4gICAgICAgIGNhbnZhcy5zdHlsZShcIndpZHRoXCIsIFwiMTAwJVwiKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2FudmFzLnN0eWxlKFxyXG4gICAgICAgICAgICBcIndpZHRoXCIsXHJcbiAgICAgICAgICAgIChzdmdXaWR0aCAqIHJlbmRlckluZm8uZml4ZWRTY2FsZSkudG9TdHJpbmcoKSArIFwicHhcIlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY2FudmFzLnN0eWxlKFxyXG4gICAgICAgICAgICBcImhlaWdodFwiLFxyXG4gICAgICAgICAgICAoc3ZnSGVpZ2h0ICogcmVuZGVySW5mby5maXhlZFNjYWxlKS50b1N0cmluZygpICsgXCJweFwiXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlQXJlYXMoXHJcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxyXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBwaWVJbmZvOiBQaWVJbmZvXHJcbik6IENoYXJ0RWxlbWVudHMge1xyXG4gICAgLy8gY2xlYW4gYXJlYXNcclxuICAgIGQzLnNlbGVjdChjYW52YXMpLnNlbGVjdChcIiNzdmdcIikucmVtb3ZlKCk7XHJcbiAgICB2YXIgcHJvcHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhjaGFydEVsZW1lbnRzKTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAvLyBkMy5zZWxlY3QoY2hhcnRFbGVtZW50c1twcm9wc1tpXV0pLnJlbW92ZSgpO1xyXG4gICAgICAgIGRlbGV0ZSBjaGFydEVsZW1lbnRzW3Byb3BzW2ldXTtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKGNoYXJ0RWxlbWVudHMpO1xyXG5cclxuICAgIC8vIHdob2xlIGFyZWEgZm9yIHBsb3R0aW5nLCBpbmNsdWRlcyBtYXJnaW5zXHJcbiAgICBsZXQgc3ZnID0gZDNcclxuICAgICAgICAuc2VsZWN0KGNhbnZhcylcclxuICAgICAgICAuYXBwZW5kKFwic3ZnXCIpXHJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcInN2Z1wiKVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICBcIndpZHRoXCIsXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmxlZnQgK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ucmlnaHRcclxuICAgICAgICApXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgIFwiaGVpZ2h0XCIsXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi50b3AgK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4uYm90dG9tXHJcbiAgICAgICAgKTtcclxuICAgIGNoYXJ0RWxlbWVudHNbXCJzdmdcIl0gPSBzdmc7XHJcblxyXG4gICAgLy8gZ3JhcGhBcmVhLCBpbmNsdWRlcyBjaGFydEFyZWEsIHRpdGxlLCBsZWdlbmRcclxuICAgIGxldCBncmFwaEFyZWEgPSBzdmdcclxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJncmFwaEFyZWFcIilcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcclxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ubGVmdCArXHJcbiAgICAgICAgICAgICAgICBcIixcIiArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi50b3AgK1xyXG4gICAgICAgICAgICAgICAgXCIpXCJcclxuICAgICAgICApXHJcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArIHJlbmRlckluZm8ubWFyZ2luLnJpZ2h0KVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICBcImhlaWdodFwiLFxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgKyByZW5kZXJJbmZvLm1hcmdpbi5ib3R0b21cclxuICAgICAgICApO1xyXG4gICAgY2hhcnRFbGVtZW50c1tcImdyYXBoQXJlYVwiXSA9IGdyYXBoQXJlYTtcclxuXHJcbiAgICAvLyBkYXRhQXJlYSwgdW5kZXIgZ3JhcGhBcmVhLCBpbmNsdWRlcyBwb2ludHMsIGxpbmVzLCB4QXhpcywgeUF4aXNcclxuICAgIGxldCBkYXRhQXJlYSA9IGdyYXBoQXJlYVxyXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImRhdGFBcmVhXCIpXHJcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aClcclxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQpO1xyXG4gICAgY2hhcnRFbGVtZW50c1tcImRhdGFBcmVhXCJdID0gZGF0YUFyZWE7XHJcblxyXG4gICAgcmV0dXJuIGNoYXJ0RWxlbWVudHM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbmRlclRpdGxlKFxyXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgcGllSW5mbzogUGllSW5mb1xyXG4pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyVGl0bGVcIik7XHJcbiAgICAvLyB1bmRlciBncmFwaEFyZWFcclxuXHJcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIXBpZUluZm8pIHJldHVybjtcclxuXHJcbiAgICBpZiAoIXBpZUluZm8udGl0bGUpIHJldHVybjtcclxuICAgIGxldCB0aXRsZVNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKHBpZUluZm8udGl0bGUsIFwidHJhY2tlci10aXRsZVwiKTtcclxuXHJcbiAgICAvLyBBcHBlbmQgdGl0bGVcclxuICAgIGxldCB0aXRsZSA9IGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhXHJcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcclxuICAgICAgICAudGV4dChwaWVJbmZvLnRpdGxlKSAvLyBwaXZvdCBhdCBjZW50ZXJcclxuICAgICAgICAuYXR0cihcImlkXCIsIFwidGl0bGVcIilcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcclxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggLyAyLjAgK1xyXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xyXG4gICAgICAgICAgICAgICAgdGl0bGVTaXplLmhlaWdodCAvIDIuMCArXHJcbiAgICAgICAgICAgICAgICBcIilcIlxyXG4gICAgICAgIClcclxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCB0aXRsZVNpemUuaGVpZ2h0KSAvLyBmb3IgbGF0ZXIgdXNlXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItdGl0bGVcIik7XHJcbiAgICBjaGFydEVsZW1lbnRzW1widGl0bGVcIl0gPSB0aXRsZTtcclxuXHJcbiAgICAvLyBFeHBhbmQgcGFyZW50IGFyZWFzXHJcbiAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgMCwgdGl0bGVTaXplLmhlaWdodCk7XHJcbiAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLmdyYXBoQXJlYSwgMCwgdGl0bGVTaXplLmhlaWdodCk7XHJcblxyXG4gICAgLy8gTW92ZSBzaWJsaW5nIGFyZWFzXHJcbiAgICBoZWxwZXIubW92ZUFyZWEoY2hhcnRFbGVtZW50cy5kYXRhQXJlYSwgMCwgdGl0bGVTaXplLmhlaWdodCk7XHJcblxyXG4gICAgcmV0dXJuO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW5kZXJMZWdlbmQoXHJcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxyXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBwaWVJbmZvOiBQaWVJbmZvXHJcbikge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJMZWdlbmRcIik7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhwaUluZm8ubGVnZW5kUG9zaXRpb24pO1xyXG4gICAgLy8gY29uc29sZS5sb2cocGlJbmZvLmxlZ2VuZE9yaWVudGF0aW9uKTtcclxuXHJcbiAgICAvLyBHZXQgY2hhcnQgZWxlbWVudHNcclxuICAgIGxldCBzdmcgPSBjaGFydEVsZW1lbnRzLnN2ZztcclxuICAgIGxldCBncmFwaEFyZWEgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYTtcclxuICAgIGxldCBkYXRhQXJlYSA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWE7XHJcbiAgICBsZXQgdGl0bGUgPSBjaGFydEVsZW1lbnRzLnRpdGxlO1xyXG5cclxuICAgIC8vIEdldCBlbGVtZW50IHdpZHRoIGFuZCBoZWlnaHRcclxuICAgIGxldCB0aXRsZUhlaWdodCA9IDAuMDtcclxuICAgIGlmICh0aXRsZSkge1xyXG4gICAgICAgIHRpdGxlSGVpZ2h0ID0gcGFyc2VGbG9hdCh0aXRsZS5hdHRyKFwiaGVpZ2h0XCIpKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBHZXQgbmFtZXMgYW5kIHRoZWlyIGRpbWVuc2lvblxyXG4gICAgbGV0IG5hbWVzID0gcGllSW5mby5kYXRhTmFtZTtcclxuICAgIGxldCBuYW1lU2l6ZXMgPSBuYW1lcy5tYXAoZnVuY3Rpb24gKG4pIHtcclxuICAgICAgICByZXR1cm4gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShuLCBcInRyYWNrZXItbGVnZW5kLWxhYmVsXCIpO1xyXG4gICAgfSk7XHJcbiAgICBsZXQgaW5kTWF4TmFtZSA9IDA7XHJcbiAgICBsZXQgbWF4TmFtZVdpZHRoID0gMC4wO1xyXG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgbmFtZXMubGVuZ3RoOyBpbmQrKykge1xyXG4gICAgICAgIGlmIChuYW1lU2l6ZXNbaW5kXS53aWR0aCA+IG1heE5hbWVXaWR0aCkge1xyXG4gICAgICAgICAgICBtYXhOYW1lV2lkdGggPSBuYW1lU2l6ZXNbaW5kXS53aWR0aDtcclxuICAgICAgICAgICAgaW5kTWF4TmFtZSA9IGluZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgbWF4TmFtZSA9IG5hbWVzW2luZE1heE5hbWVdO1xyXG4gICAgbGV0IGNoYXJhY3RlcldpZHRoID0gbWF4TmFtZVdpZHRoIC8gbWF4TmFtZS5sZW5ndGg7XHJcbiAgICBsZXQgbmFtZUhlaWdodCA9IG5hbWVTaXplc1tpbmRNYXhOYW1lXS5oZWlnaHQ7XHJcbiAgICBsZXQgbnVtTmFtZXMgPSBuYW1lcy5sZW5ndGg7XHJcblxyXG4gICAgbGV0IHhTcGFjaW5nID0gMiAqIGNoYXJhY3RlcldpZHRoO1xyXG4gICAgbGV0IHlTcGFjaW5nID0gbmFtZUhlaWdodDtcclxuICAgIGxldCBtYXJrZXJXaWR0aCA9IDIgKiBjaGFyYWN0ZXJXaWR0aDtcclxuXHJcbiAgICAvLyBHZXQgbGVnZW5kIHdpZHRoIGFuZCBoZWlnaHRcclxuICAgIGxldCBsZWdlbmRXaWR0aCA9IDA7XHJcbiAgICBsZXQgbGVnZW5kSGVpZ2h0ID0gMDtcclxuICAgIGlmIChwaWVJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcclxuICAgICAgICBsZWdlbmRXaWR0aCA9IHhTcGFjaW5nICogMyArIG1hcmtlcldpZHRoICsgbWF4TmFtZVdpZHRoO1xyXG4gICAgICAgIGxlZ2VuZEhlaWdodCA9IChudW1OYW1lcyArIDEpICogeVNwYWNpbmc7XHJcbiAgICB9IGVsc2UgaWYgKHBpZUluZm8ubGVnZW5kT3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XHJcbiAgICAgICAgbGVnZW5kV2lkdGggPVxyXG4gICAgICAgICAgICAoMiAqIHhTcGFjaW5nICsgbWFya2VyV2lkdGgpICogbnVtTmFtZXMgK1xyXG4gICAgICAgICAgICB4U3BhY2luZyArXHJcbiAgICAgICAgICAgIGQzLnN1bShuYW1lU2l6ZXMsIGZ1bmN0aW9uIChzLCBpKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcy53aWR0aDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgbGVnZW5kSGVpZ2h0ID0geVNwYWNpbmcgKyBuYW1lSGVpZ2h0O1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coXHJcbiAgICAvLyAgICAgYG1heE5hbWU6ICR7bWF4TmFtZX0sIGNoYXJhY3RlcldpZHRoOiAke2NoYXJhY3RlcldpZHRofSwgbWF4TmFtZVdpZHRoOiAke21heE5hbWVXaWR0aH1gXHJcbiAgICAvLyApO1xyXG4gICAgLy8gY29uc29sZS5sb2coYHhTcGFjaW5nOiR7eFNwYWNpbmd9LCBudW1OYW1lczogJHtudW1OYW1lc30sIG1hcmtlcldpZHRoOiAke21hcmtlcldpZHRofWApO1xyXG4gICAgLy8gY29uc29sZS5sb2coYGxlZ2VuZFdpZHRoOiAke2xlZ2VuZFdpZHRofSwgbGVnZW5kSGVpZ2h0OiAke2xlZ2VuZEhlaWdodH1gKTtcclxuXHJcbiAgICAvLyBDYWxjdWFsdGUgbGVuZ2VuZFggYW5kIGxlZ2VuZFlcclxuICAgIGxldCBsZWdlbmRYID0gMC4wOyAvLyByZWxhdGl2ZSB0byBncmFwaEFyZWFcclxuICAgIGxldCBsZWdlbmRZID0gMC4wO1xyXG4gICAgaWYgKHBpZUluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwidG9wXCIpIHtcclxuICAgICAgICAvLyBiZWxvdyB0aXRsZVxyXG4gICAgICAgIGxlZ2VuZFggPSByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAvIDIuMCAtIGxlZ2VuZFdpZHRoIC8gMi4wO1xyXG4gICAgICAgIGxlZ2VuZFkgPSB0aXRsZUhlaWdodDtcclxuICAgICAgICAvLyBFeHBhbmQgc3ZnXHJcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoc3ZnLCAwLCBsZWdlbmRIZWlnaHQgKyB5U3BhY2luZyk7XHJcbiAgICAgICAgLy8gTW92ZSBkYXRhQXJlYSBkb3duXHJcbiAgICAgICAgaGVscGVyLm1vdmVBcmVhKGRhdGFBcmVhLCAwLCBsZWdlbmRIZWlnaHQgKyB5U3BhY2luZyk7XHJcbiAgICB9IGVsc2UgaWYgKHBpZUluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwiYm90dG9tXCIpIHtcclxuICAgICAgICAvLyBiZWxsb3cgeC1heGlzIGxhYmVsXHJcbiAgICAgICAgbGVnZW5kWCA9IHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMi4wIC0gbGVnZW5kV2lkdGggLyAyLjA7XHJcbiAgICAgICAgbGVnZW5kWSA9IHRpdGxlSGVpZ2h0ICsgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICsgeVNwYWNpbmc7XHJcbiAgICAgICAgLy8gRXhwYW5kIHN2Z1xyXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKHN2ZywgMCwgbGVnZW5kSGVpZ2h0ICsgeVNwYWNpbmcpO1xyXG4gICAgfSBlbHNlIGlmIChwaWVJbmZvLmxlZ2VuZFBvc2l0aW9uID09PSBcImxlZnRcIikge1xyXG4gICAgICAgIGxlZ2VuZFggPSAwO1xyXG4gICAgICAgIGxlZ2VuZFkgPVxyXG4gICAgICAgICAgICB0aXRsZUhlaWdodCArXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCAvIDIuMCAtXHJcbiAgICAgICAgICAgIGxlZ2VuZEhlaWdodCAvIDIuMDtcclxuICAgICAgICAvLyBFeHBhbmQgc3ZnXHJcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoc3ZnLCBsZWdlbmRXaWR0aCArIHhTcGFjaW5nLCAwKTtcclxuICAgICAgICAvLyBNb3ZlIGRhdGFBcmVhIHJpZ2h0XHJcbiAgICAgICAgaGVscGVyLm1vdmVBcmVhKGRhdGFBcmVhLCBsZWdlbmRXaWR0aCArIHhTcGFjaW5nLCAwKTtcclxuICAgIH0gZWxzZSBpZiAocGllSW5mby5sZWdlbmRQb3NpdGlvbiA9PT0gXCJyaWdodFwiKSB7XHJcbiAgICAgICAgbGVnZW5kWCA9IHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICsgeFNwYWNpbmc7XHJcbiAgICAgICAgbGVnZW5kWSA9XHJcbiAgICAgICAgICAgIHRpdGxlSGVpZ2h0ICtcclxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0IC8gMi4wIC1cclxuICAgICAgICAgICAgbGVnZW5kSGVpZ2h0IC8gMi4wO1xyXG4gICAgICAgIC8vIEV4cGFuZCBzdmdcclxuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShzdmcsIGxlZ2VuZFdpZHRoICsgeFNwYWNpbmcsIDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhgbGVnZW5kWDogJHtsZWdlbmRYfSwgbGVnZW5kWTogJHtsZWdlbmRZfWApO1xyXG5cclxuICAgIGxldCBsZWdlbmQgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYVxyXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImxlZ2VuZFwiKVxyXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwidHJhbnNsYXRlKFwiICsgbGVnZW5kWCArIFwiLFwiICsgbGVnZW5kWSArIFwiKVwiKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKCdsZWdlbmRYOiAlZCwgbGVnZW5kWTogJWQnLCBsZWdlbmRYLCBsZWdlbmRZKTtcclxuXHJcbiAgICBsZXQgbGVnZW5kQmcgPSBsZWdlbmRcclxuICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWxlZ2VuZFwiKVxyXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgbGVnZW5kV2lkdGgpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbGVnZW5kSGVpZ2h0KTtcclxuICAgIGlmIChwaWVJbmZvLmxlZ2VuZEJnQ29sb3IpIHtcclxuICAgICAgICBsZWdlbmRCZy5zdHlsZShcImZpbGxcIiwgcGllSW5mby5sZWdlbmRCZ0NvbG9yKTtcclxuICAgIH1cclxuICAgIGlmIChwaWVJbmZvLmxlZ2VuZEJvcmRlckNvbG9yKSB7XHJcbiAgICAgICAgbGVnZW5kQmcuc3R5bGUoXCJzdHJva2VcIiwgcGllSW5mby5sZWdlbmRCb3JkZXJDb2xvcik7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IG1hcmtlclJhZGl1cyA9IDUuMDtcclxuICAgIGxldCBmaXJzdE1hcmtlclggPSB4U3BhY2luZztcclxuICAgIGxldCBmaXJzdE1hcmtlclkgPSBuYW1lSGVpZ2h0O1xyXG4gICAgbGV0IGZpcnN0TGFiZWxYID0gZmlyc3RNYXJrZXJYICsgeFNwYWNpbmcgKyBtYXJrZXJXaWR0aDsgLy8geFNwYWNpbmcgKyAyICogeFNwYWluZ1xyXG4gICAgbGV0IGZpcnN0TGFiZWxZID0gZmlyc3RNYXJrZXJZO1xyXG5cclxuICAgIGlmIChwaWVJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcclxuICAgICAgICAvLyBwb2ludHNcclxuICAgICAgICBsZWdlbmRcclxuICAgICAgICAgICAgLnNlbGVjdEFsbChcIm1hcmtlcnNcIilcclxuICAgICAgICAgICAgLmRhdGEobmFtZXMpXHJcbiAgICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoXCJjaXJjbGVcIilcclxuICAgICAgICAgICAgLmF0dHIoXCJjeFwiLCBmaXJzdE1hcmtlclggKyBtYXJrZXJXaWR0aCAvIDIuMClcclxuICAgICAgICAgICAgLmF0dHIoXCJjeVwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdE1hcmtlclkgKyBpICogeVNwYWNpbmc7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFwiclwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtYXJrZXJSYWRpdXM7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGllSW5mby5kYXRhQ29sb3JbaV07XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvLyBuYW1lc1xyXG4gICAgICAgIGxldCBuYW1lTGFiZWxzID0gbGVnZW5kXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJsYWJlbHNcIilcclxuICAgICAgICAgICAgLmRhdGEobmFtZXMpXHJcbiAgICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCBmaXJzdExhYmVsWClcclxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0TGFiZWxZICsgaSAqIHlTcGFjaW5nO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAudGV4dChmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBuYW1lO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3R5bGUoXCJhbGlnbm1lbnQtYmFzZWxpbmVcIiwgXCJtaWRkbGVcIilcclxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbGVnZW5kLWxhYmVsXCIpO1xyXG5cclxuICAgICAgICBuYW1lTGFiZWxzLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHBpZUluZm8uZGF0YUNvbG9yW2ldO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSBlbHNlIGlmIChwaWVJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xyXG4gICAgICAgIGxldCBjdXJyUmVuZGVyUG9zWCA9IDAuMDtcclxuICAgICAgICBsZXQgY3VyclJlbmRlclBvc1gyID0gMC4wO1xyXG5cclxuICAgICAgICAvLyBwb2ludHNcclxuICAgICAgICBjdXJyUmVuZGVyUG9zWCA9IDAuMDtcclxuICAgICAgICBsZWdlbmRcclxuICAgICAgICAgICAgLnNlbGVjdEFsbChcIm1hcmtlcnNcIilcclxuICAgICAgICAgICAgLmRhdGEobmFtZXMpXHJcbiAgICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoXCJjaXJjbGVcIilcclxuICAgICAgICAgICAgLmF0dHIoXCJjeFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VyclJlbmRlclBvc1ggPSBmaXJzdE1hcmtlclggKyBtYXJrZXJXaWR0aCAvIDIuMDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3VyclJlbmRlclBvc1ggKz1cclxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZVNpemVzW2ldLndpZHRoICsgeFNwYWNpbmcgKyBtYXJrZXJXaWR0aCArIHhTcGFjaW5nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJSZW5kZXJQb3NYO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcImN5XCIsIGZpcnN0TWFya2VyWSlcclxuICAgICAgICAgICAgLmF0dHIoXCJyXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmtlclJhZGl1cztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwaWVJbmZvLmRhdGFDb2xvcltpXTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIG5hbWVzXHJcbiAgICAgICAgY3VyclJlbmRlclBvc1ggPSAwLjA7XHJcbiAgICAgICAgbGV0IG5hbWVMYWJlbHMgPSBsZWdlbmRcclxuICAgICAgICAgICAgLnNlbGVjdEFsbChcImxhYmVsc1wiKVxyXG4gICAgICAgICAgICAuZGF0YShuYW1lcylcclxuICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgLmFwcGVuZChcInRleHRcIilcclxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyUmVuZGVyUG9zWCA9IGZpcnN0TGFiZWxYO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjdXJyUmVuZGVyUG9zWCArPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lU2l6ZXNbaV0ud2lkdGggKyB4U3BhY2luZyArIG1hcmtlcldpZHRoICsgeFNwYWNpbmc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gY3VyclJlbmRlclBvc1g7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmaXJzdExhYmVsWSlcclxuICAgICAgICAgICAgLnRleHQoZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN0eWxlKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpXHJcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWxlZ2VuZC1sYWJlbFwiKTtcclxuXHJcbiAgICAgICAgbmFtZUxhYmVscy5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBwaWVJbmZvLmRhdGFDb2xvcltpXTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVuZGVyUGllKFxyXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgcGllSW5mbzogUGllSW5mb1xyXG4pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyUGllXCIpO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XHJcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJcIjtcclxuXHJcbiAgICBsZXQgcmFkaXVzID0gcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggKiAwLjU7XHJcbiAgICBsZXQgb3V0dGVyUmFkaXVzID0gcmFkaXVzICogMC43O1xyXG4gICAgbGV0IGlubmVyUmFkaXVzID0gb3V0dGVyUmFkaXVzICogcGllSW5mby5yYXRpb0lubmVyUmFkaXVzO1xyXG5cclxuICAgIC8vIHZhbHVlc1xyXG4gICAgbGV0IHZhbHVlczogQXJyYXk8bnVtYmVyPiA9IFtdO1xyXG4gICAgZm9yIChsZXQgc3RyRXhwciBvZiBwaWVJbmZvLmRhdGEpIHtcclxuICAgICAgICBsZXQgcmV0VmFsdWUgPSBleHByLnJlc29sdmVWYWx1ZShzdHJFeHByLCByZW5kZXJJbmZvKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldFZhbHVlID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IHJldFZhbHVlO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXRWYWx1ZSA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICB2YWx1ZXMucHVzaChyZXRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGVycm9yTWVzc2FnZSAhPT0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyh2YWx1ZXMpO1xyXG5cclxuICAgIC8vIGxhYmVsc1xyXG4gICAgbGV0IGxhYmVsczogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gICAgZm9yIChsZXQgc3RyRXhwciBvZiBwaWVJbmZvLmxhYmVsKSB7XHJcbiAgICAgICAgbGV0IHJldExhYmVsID0gZXhwci5yZXNvbHZlVGVtcGxhdGUoc3RyRXhwciwgcmVuZGVySW5mbyk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cocmV0TGFiZWwpO1xyXG4gICAgICAgIGlmIChyZXRMYWJlbC5zdGFydHNXaXRoKFwiRXJyb3JcIikpIHtcclxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmV0TGFiZWw7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsYWJlbHMucHVzaChyZXRMYWJlbCk7XHJcbiAgICB9XHJcbiAgICBpZiAoZXJyb3JNZXNzYWdlICE9PSBcIlwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKGxhYmVscyk7XHJcblxyXG4gICAgLy8gaGlkZUxhYmVsTGVzc1RoYW5cclxuICAgIGxldCBoaWRlTGFiZWxMZXNzVGhhbiA9IHBpZUluZm8uaGlkZUxhYmVsTGVzc1RoYW47XHJcblxyXG4gICAgLy8gbGFiZWwgc2l6ZXNcclxuICAgIGxldCBsYWJlbFNpemVzID0gbGFiZWxzLm1hcChmdW5jdGlvbiAobikge1xyXG4gICAgICAgIHJldHVybiBoZWxwZXIubWVhc3VyZVRleHRTaXplKG4sIFwidHJhY2tlci10aWNrLWxhYmVsXCIpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgLy8gZXh0TGFiZWxcclxuICAgIGxldCBleHRMYWJlbHM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuICAgIGZvciAobGV0IHN0ckV4cHIgb2YgcGllSW5mby5leHRMYWJlbCkge1xyXG4gICAgICAgIGxldCByZXRFeHRMYWJlbCA9IGV4cHIucmVzb2x2ZVRlbXBsYXRlKHN0ckV4cHIsIHJlbmRlckluZm8pO1xyXG4gICAgICAgIGlmIChyZXRFeHRMYWJlbC5zdGFydHNXaXRoKFwiRXJyb3JcIikpIHtcclxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gcmV0RXh0TGFiZWw7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBleHRMYWJlbHMucHVzaChyZXRFeHRMYWJlbCk7XHJcbiAgICB9XHJcbiAgICBpZiAoZXJyb3JNZXNzYWdlICE9PSBcIlwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKGV4dExhYmVscyk7XHJcblxyXG4gICAgLy8gZXh0TGFiZWwgc2l6ZXNcclxuICAgIGxldCBleHRMYWJlbFNpemVzID0gZXh0TGFiZWxzLm1hcChmdW5jdGlvbiAobikge1xyXG4gICAgICAgIHJldHVybiBoZWxwZXIubWVhc3VyZVRleHRTaXplKG4sIFwidHJhY2tlci1waWUtbGFiZWxcIik7XHJcbiAgICB9KTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGV4dExhYmVsU2l6ZXMpO1xyXG5cclxuICAgIGxldCBzaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsID0gcGllSW5mby5zaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsO1xyXG5cclxuICAgIC8vIHNjYWxlXHJcbiAgICBsZXQgY29sb3JTY2FsZSA9IGQzLnNjYWxlT3JkaW5hbCgpLnJhbmdlKHBpZUluZm8uZGF0YUNvbG9yKTtcclxuXHJcbiAgICBsZXQgc2VjdG9yc0dyb3VwID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYS5hcHBlbmQoXCJnXCIpO1xyXG4gICAgc2VjdG9yc0dyb3VwLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGxldCBzdHJUcmFuc2xhdGUgPVxyXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICogMC41ICtcclxuICAgICAgICAgICAgXCIsXCIgK1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgKiAwLjUgK1xyXG4gICAgICAgICAgICBcIilcIjtcclxuXHJcbiAgICAgICAgcmV0dXJuIHN0clRyYW5zbGF0ZTtcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBwaWUgPSBkMy5waWUoKTtcclxuICAgIGxldCBwaWVWYWx1ZXMgPSBwaWUodmFsdWVzKTtcclxuXHJcbiAgICBsZXQgc2VjdG9ycyA9IHNlY3RvcnNHcm91cFxyXG4gICAgICAgIC5zZWxlY3RBbGwoXCJzZWN0b3JcIilcclxuICAgICAgICAuZGF0YShwaWVWYWx1ZXMpXHJcbiAgICAgICAgLmVudGVyKClcclxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJzZWN0b3JcIik7XHJcblxyXG4gICAgbGV0IGFyYyA9IGQzLmFyYygpLmlubmVyUmFkaXVzKGlubmVyUmFkaXVzKS5vdXRlclJhZGl1cyhvdXR0ZXJSYWRpdXMpO1xyXG5cclxuICAgIHZhciBoaWRkZW5BcmMgPSBkM1xyXG4gICAgICAgIC5hcmMoKVxyXG4gICAgICAgIC5pbm5lclJhZGl1cyhyYWRpdXMgKiAwLjkpXHJcbiAgICAgICAgLm91dGVyUmFkaXVzKHJhZGl1cyAqIDAuOSk7XHJcblxyXG4gICAgbGV0IHNlY3RvclBhdGhzID0gc2VjdG9yc1xyXG4gICAgICAgIC5hcHBlbmQoXCJwYXRoXCIpXHJcbiAgICAgICAgLmF0dHIoXCJmaWxsXCIsIGZ1bmN0aW9uIChkOiBhbnksIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICByZXR1cm4gY29sb3JTY2FsZShpLnRvU3RyaW5nKCkpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoXCJkXCIsIGFyYyk7XHJcblxyXG4gICAgZnVuY3Rpb24gaXNMYWJlbEhpZGRlbihhcmNPYmo6IGFueSkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBzdGFydC9lbmQ6ICR7YXJjT2JqLnN0YXJ0QW5nbGV9LyR7YXJjT2JqLmVuZEFuZ2xlfWApO1xyXG4gICAgICAgIGxldCBmcmFjdGlvbiA9IChhcmNPYmouZW5kQW5nbGUgLSBhcmNPYmouc3RhcnRBbmdsZSkgLyAoMi4wICogTWF0aC5QSSk7XHJcbiAgICAgICAgaWYgKGZyYWN0aW9uIDwgaGlkZUxhYmVsTGVzc1RoYW4pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBsYWJlbCBlbGVtZW50c1xyXG4gICAgbGV0IGxhYmVsRWxlbWVudHMgPSBzZWN0b3JzR3JvdXBcclxuICAgICAgICAuc2VsZWN0QWxsKFwibGFiZWxcIilcclxuICAgICAgICAuZGF0YShwaWUodmFsdWVzKSlcclxuICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgLnRleHQoZnVuY3Rpb24gKGFyY09iajogYW55LCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgaWYgKGlzTGFiZWxIaWRkZW4oYXJjT2JqKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGxhYmVsc1tpXTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIGZ1bmN0aW9uIChkOiBhbnkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcclxuICAgICAgICAgICAgICAgIGFyYy5jZW50cm9pZChkKVswXSArXHJcbiAgICAgICAgICAgICAgICBcIixcIiArXHJcbiAgICAgICAgICAgICAgICBhcmMuY2VudHJvaWQoZClbMV0gK1xyXG4gICAgICAgICAgICAgICAgXCIpXCJcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdHlsZShcInRleHQtYW5jaG9yXCIsIFwibWlkZGxlXCIpXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItcGllLWxhYmVsXCIpO1xyXG5cclxuICAgIGZ1bmN0aW9uIGdldE1pZEFuZ2xlKGFyY09iajogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIGFyY09iai5zdGFydEFuZ2xlICsgKGFyY09iai5lbmRBbmdsZSAtIGFyY09iai5zdGFydEFuZ2xlKSAvIDI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZXh0ZXJuYWwgbGFiZWwgZWxlbWVudHNcclxuICAgIGxldCBleHRMYWJlbEVsZW1lbnRzID0gc2VjdG9yc0dyb3VwXHJcbiAgICAgICAgLnNlbGVjdEFsbChcImV4dExhYmVsXCIpXHJcbiAgICAgICAgLmRhdGEocGllVmFsdWVzKVxyXG4gICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcclxuICAgICAgICAudGV4dChmdW5jdGlvbiAoYXJjT2JqOiBhbnksIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICBpZiAoc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGxhYmVsc1tpXSA9PT0gXCJcIiB8fCBpc0xhYmVsSGlkZGVuKGFyY09iaikpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXh0TGFiZWxzW2ldO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXh0TGFiZWxzW2ldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBmdW5jdGlvbiAoYXJjT2JqOiBhbnksIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICBsZXQgcG9zTGFiZWwgPSBoaWRkZW5BcmMuY2VudHJvaWQoYXJjT2JqKTtcclxuICAgICAgICAgICAgbGV0IG1pZEFuZ2xlID0gZ2V0TWlkQW5nbGUoYXJjT2JqKTtcclxuXHJcbiAgICAgICAgICAgIHBvc0xhYmVsWzBdID1cclxuICAgICAgICAgICAgICAgIChyYWRpdXMgKiAwLjk5IC0gZXh0TGFiZWxTaXplc1tpXS53aWR0aCkgKlxyXG4gICAgICAgICAgICAgICAgKG1pZEFuZ2xlIDwgTWF0aC5QSSA/IDEgOiAtMSk7XHJcbiAgICAgICAgICAgIHJldHVybiBcInRyYW5zbGF0ZShcIiArIHBvc0xhYmVsWzBdICsgXCIsXCIgKyBwb3NMYWJlbFsxXSArIFwiKVwiO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0eWxlKFwidGV4dC1hbmNob3JcIiwgZnVuY3Rpb24gKGFyY09iajogYW55KSB7XHJcbiAgICAgICAgICAgIGxldCBtaWRBbmdsZSA9IGdldE1pZEFuZ2xlKGFyY09iaik7XHJcbiAgICAgICAgICAgIHJldHVybiBtaWRBbmdsZSA8IE1hdGguUEkgPyBcInN0YXJ0XCIgOiBcImVuZFwiO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItcGllLWxhYmVsXCIpO1xyXG5cclxuICAgIGZ1bmN0aW9uIGdldFBvaW50c0ZvckNvbm5lY3Rpb25MaW5lcyhhcmNPYmo6IGFueSwgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgbGV0IGxhYmVsV2lkdGggPSBsYWJlbFNpemVzW2ldLndpZHRoO1xyXG4gICAgICAgIGxldCBleHRMYWJlbFdpZHRoID0gZXh0TGFiZWxTaXplc1tpXS53aWR0aDtcclxuICAgICAgICBsZXQgbGFiZWxIaWRkZW4gPSBpc0xhYmVsSGlkZGVuKGFyY09iaik7XHJcbiAgICAgICAgbGV0IG1pZEFuZ2xlID0gZ2V0TWlkQW5nbGUoYXJjT2JqKTtcclxuXHJcbiAgICAgICAgbGV0IHBvc0xhYmVsID0gYXJjLmNlbnRyb2lkKGFyY09iaik7IC8vIGxpbmUgaW5zZXJ0aW9uIGluIHRoZSBzbGljZVxyXG4gICAgICAgIGxldCBwb3NNaWRkbGUgPSBoaWRkZW5BcmMuY2VudHJvaWQoYXJjT2JqKTsgLy8gbGluZSBicmVhazogd2UgdXNlIHRoZSBvdGhlciBhcmMgZ2VuZXJhdG9yIHRoYXQgaGFzIGJlZW4gYnVpbHQgb25seSBmb3IgdGhhdFxyXG4gICAgICAgIGxldCBwb3NFeHRMYWJlbCA9IGhpZGRlbkFyYy5jZW50cm9pZChhcmNPYmopOyAvLyBMYWJlbCBwb3NpdGlvbiA9IGFsbW9zdCB0aGUgc2FtZSBhcyBwb3NCXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobGFiZWxzW2ldKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhgbGFiZWwvbWlkZGxlL2V4dExhYmVsOiAke3Bvc0xhYmVsfS8ke3Bvc01pZGRsZX0vJHtwb3NFeHRMYWJlbH1gKTtcclxuXHJcbiAgICAgICAgbGV0IGRpc3RNaWRkbGVUb0xhYmVsID0gTWF0aC5zcXJ0KFxyXG4gICAgICAgICAgICAocG9zTWlkZGxlWzBdIC0gcG9zTGFiZWxbMF0pICoqIDIgK1xyXG4gICAgICAgICAgICAgICAgKHBvc01pZGRsZVsxXSAtIHBvc0xhYmVsWzFdKSAqKiAyXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaWYgKGxhYmVsc1tpXSAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICAvLyBzaGlmdCBwb3NMYWJlbCwgdG93YXJkIHRoZSBtaWRkbGUgcG9pbnRcclxuICAgICAgICAgICAgcG9zTGFiZWxbMF0gPVxyXG4gICAgICAgICAgICAgICAgcG9zTGFiZWxbMF0gK1xyXG4gICAgICAgICAgICAgICAgKChwb3NNaWRkbGVbMF0gLSBwb3NMYWJlbFswXSkgKiBsYWJlbFdpZHRoKSAvIGRpc3RNaWRkbGVUb0xhYmVsO1xyXG4gICAgICAgICAgICBwb3NMYWJlbFsxXSA9XHJcbiAgICAgICAgICAgICAgICBwb3NMYWJlbFsxXSArXHJcbiAgICAgICAgICAgICAgICAoKHBvc01pZGRsZVsxXSAtIHBvc0xhYmVsWzFdKSAqIGxhYmVsV2lkdGgpIC8gZGlzdE1pZGRsZVRvTGFiZWw7XHJcblxyXG4gICAgICAgICAgICAvLyBzaGlmdCBwb3NFeHRMYWJlbFxyXG4gICAgICAgICAgICBwb3NFeHRMYWJlbFswXSA9XHJcbiAgICAgICAgICAgICAgICAocmFkaXVzICogMC45OSAtIGV4dExhYmVsV2lkdGggLSAzKSAqXHJcbiAgICAgICAgICAgICAgICAobWlkQW5nbGUgPCBNYXRoLlBJID8gMSA6IC0xKTsgLy8gbXVsdGlwbHkgYnkgMSBvciAtMSB0byBwdXQgaXQgb24gdGhlIHJpZ2h0IG9yIG9uIHRoZSBsZWZ0XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkaXN0TWlkZGxlVG9MYWJlbCA9IE1hdGguc3FydChcclxuICAgICAgICAgICAgKHBvc01pZGRsZVswXSAtIHBvc0xhYmVsWzBdKSAqKiAyICtcclxuICAgICAgICAgICAgICAgIChwb3NNaWRkbGVbMV0gLSBwb3NMYWJlbFsxXSkgKiogMlxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGxldCBkaXN0RXh0TGFiZWxUb0xhYmVsID0gTWF0aC5zcXJ0KFxyXG4gICAgICAgICAgICAocG9zRXh0TGFiZWxbMF0gLSBwb3NMYWJlbFswXSkgKiogMiArXHJcbiAgICAgICAgICAgICAgICAocG9zRXh0TGFiZWxbMV0gLSBwb3NMYWJlbFsxXSkgKiogMlxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmIChkaXN0TWlkZGxlVG9MYWJlbCA+IGRpc3RFeHRMYWJlbFRvTGFiZWwpIHtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJ0d28gcG9pbnRzXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gW3Bvc0xhYmVsLCBwb3NFeHRMYWJlbF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBbcG9zTGFiZWwsIHBvc01pZGRsZSwgcG9zRXh0TGFiZWxdO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEFkZCBsaW5lcyBiZXR3ZWVuIHNlY3RvcnMgYW5kIGV4dGVybmFsIGxhYmVsc1xyXG4gICAgbGV0IGxpbmVzID0gc2VjdG9yc0dyb3VwXHJcbiAgICAgICAgLnNlbGVjdEFsbChcImxpbmVcIilcclxuICAgICAgICAuZGF0YShwaWVWYWx1ZXMpXHJcbiAgICAgICAgLmVudGVyKClcclxuICAgICAgICAuYXBwZW5kKFwicG9seWxpbmVcIilcclxuICAgICAgICAuYXR0cihcInN0cm9rZVwiLCBcImJsYWNrXCIpXHJcbiAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBcIm5vbmVcIilcclxuICAgICAgICAuYXR0cihcInN0cm9rZS13aWR0aFwiLCAxKVxyXG4gICAgICAgIC5hdHRyKFwicG9pbnRzXCIsIGZ1bmN0aW9uIChhcmNPYmo6IGFueSwgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgIGlmIChzaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAobGFiZWxzW2ldID09PSBcIlwiIHx8IGlzTGFiZWxIaWRkZW4oYXJjT2JqKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChleHRMYWJlbHNbaV0gIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldFBvaW50c0ZvckNvbm5lY3Rpb25MaW5lcyhhcmNPYmosIGkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChleHRMYWJlbHNbaV0gIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UG9pbnRzRm9yQ29ubmVjdGlvbkxpbmVzKGFyY09iaiwgaSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWF4aXNcIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJQaWVDaGFydChcclxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgcGllSW5mbzogUGllSW5mb1xyXG4pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyUGllQ2hhcnRcIik7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcclxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhcGllSW5mbykgcmV0dXJuO1xyXG5cclxuICAgIC8vIHJldHVybiBcIlVuZGVyIGNvbnN0cnVjdGlvblwiO1xyXG5cclxuICAgIGxldCBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzID0ge307XHJcbiAgICBjaGFydEVsZW1lbnRzID0gY3JlYXRlQXJlYXMoY2hhcnRFbGVtZW50cywgY2FudmFzLCByZW5kZXJJbmZvLCBwaWVJbmZvKTtcclxuXHJcbiAgICAvLyBTZXQgZGVmYXVsdCBkYXRhQ29sb3IgaWYgbm8gZGF0YUNvbG9yIHByb3ZpZGVkXHJcbiAgICBsZXQgZGVmYXVsdERhdGFDb2xvciA9IGQzLnNjaGVtZVNwZWN0cmFsW3BpZUluZm8uZGF0YUNvbG9yLmxlbmd0aF07XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBpZUluZm8uZGF0YUNvbG9yLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKHBpZUluZm8uZGF0YUNvbG9yW2ldID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHBpZUluZm8uZGF0YUNvbG9yW2ldID0gZGVmYXVsdERhdGFDb2xvcltpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyVGl0bGUoY2FudmFzLCBjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBwaWVJbmZvKTtcclxuXHJcbiAgICByZW5kZXJQaWUoY2FudmFzLCBjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBwaWVJbmZvKTtcclxuXHJcbiAgICBpZiAocGllSW5mby5zaG93TGVnZW5kKSB7XHJcbiAgICAgICAgcmVuZGVyTGVnZW5kKGNhbnZhcywgY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgcGllSW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0Q2hhcnRTY2FsZShjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8pO1xyXG59XHJcbiIsImltcG9ydCBhcnJheSBmcm9tIFwiLi9hcnJheS5qc1wiO1xuaW1wb3J0IGNvbnN0YW50IGZyb20gXCIuL2NvbnN0YW50LmpzXCI7XG5pbXBvcnQgZGVzY2VuZGluZyBmcm9tIFwiLi9kZXNjZW5kaW5nLmpzXCI7XG5pbXBvcnQgaWRlbnRpdHkgZnJvbSBcIi4vaWRlbnRpdHkuanNcIjtcbmltcG9ydCB7dGF1fSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKCkge1xuICB2YXIgdmFsdWUgPSBpZGVudGl0eSxcbiAgICAgIHNvcnRWYWx1ZXMgPSBkZXNjZW5kaW5nLFxuICAgICAgc29ydCA9IG51bGwsXG4gICAgICBzdGFydEFuZ2xlID0gY29uc3RhbnQoMCksXG4gICAgICBlbmRBbmdsZSA9IGNvbnN0YW50KHRhdSksXG4gICAgICBwYWRBbmdsZSA9IGNvbnN0YW50KDApO1xuXG4gIGZ1bmN0aW9uIHBpZShkYXRhKSB7XG4gICAgdmFyIGksXG4gICAgICAgIG4gPSAoZGF0YSA9IGFycmF5KGRhdGEpKS5sZW5ndGgsXG4gICAgICAgIGosXG4gICAgICAgIGssXG4gICAgICAgIHN1bSA9IDAsXG4gICAgICAgIGluZGV4ID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBhcmNzID0gbmV3IEFycmF5KG4pLFxuICAgICAgICBhMCA9ICtzdGFydEFuZ2xlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyksXG4gICAgICAgIGRhID0gTWF0aC5taW4odGF1LCBNYXRoLm1heCgtdGF1LCBlbmRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpIC0gYTApKSxcbiAgICAgICAgYTEsXG4gICAgICAgIHAgPSBNYXRoLm1pbihNYXRoLmFicyhkYSkgLyBuLCBwYWRBbmdsZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpKSxcbiAgICAgICAgcGEgPSBwICogKGRhIDwgMCA/IC0xIDogMSksXG4gICAgICAgIHY7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgKytpKSB7XG4gICAgICBpZiAoKHYgPSBhcmNzW2luZGV4W2ldID0gaV0gPSArdmFsdWUoZGF0YVtpXSwgaSwgZGF0YSkpID4gMCkge1xuICAgICAgICBzdW0gKz0gdjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPcHRpb25hbGx5IHNvcnQgdGhlIGFyY3MgYnkgcHJldmlvdXNseS1jb21wdXRlZCB2YWx1ZXMgb3IgYnkgZGF0YS5cbiAgICBpZiAoc29ydFZhbHVlcyAhPSBudWxsKSBpbmRleC5zb3J0KGZ1bmN0aW9uKGksIGopIHsgcmV0dXJuIHNvcnRWYWx1ZXMoYXJjc1tpXSwgYXJjc1tqXSk7IH0pO1xuICAgIGVsc2UgaWYgKHNvcnQgIT0gbnVsbCkgaW5kZXguc29ydChmdW5jdGlvbihpLCBqKSB7IHJldHVybiBzb3J0KGRhdGFbaV0sIGRhdGFbal0pOyB9KTtcblxuICAgIC8vIENvbXB1dGUgdGhlIGFyY3MhIFRoZXkgYXJlIHN0b3JlZCBpbiB0aGUgb3JpZ2luYWwgZGF0YSdzIG9yZGVyLlxuICAgIGZvciAoaSA9IDAsIGsgPSBzdW0gPyAoZGEgLSBuICogcGEpIC8gc3VtIDogMDsgaSA8IG47ICsraSwgYTAgPSBhMSkge1xuICAgICAgaiA9IGluZGV4W2ldLCB2ID0gYXJjc1tqXSwgYTEgPSBhMCArICh2ID4gMCA/IHYgKiBrIDogMCkgKyBwYSwgYXJjc1tqXSA9IHtcbiAgICAgICAgZGF0YTogZGF0YVtqXSxcbiAgICAgICAgaW5kZXg6IGksXG4gICAgICAgIHZhbHVlOiB2LFxuICAgICAgICBzdGFydEFuZ2xlOiBhMCxcbiAgICAgICAgZW5kQW5nbGU6IGExLFxuICAgICAgICBwYWRBbmdsZTogcFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJjcztcbiAgfVxuXG4gIHBpZS52YWx1ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/ICh2YWx1ZSA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBwaWUpIDogdmFsdWU7XG4gIH07XG5cbiAgcGllLnNvcnRWYWx1ZXMgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoc29ydFZhbHVlcyA9IF8sIHNvcnQgPSBudWxsLCBwaWUpIDogc29ydFZhbHVlcztcbiAgfTtcblxuICBwaWUuc29ydCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChzb3J0ID0gXywgc29ydFZhbHVlcyA9IG51bGwsIHBpZSkgOiBzb3J0O1xuICB9O1xuXG4gIHBpZS5zdGFydEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHN0YXJ0QW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcGllKSA6IHN0YXJ0QW5nbGU7XG4gIH07XG5cbiAgcGllLmVuZEFuZ2xlID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKGVuZEFuZ2xlID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCgrXyksIHBpZSkgOiBlbmRBbmdsZTtcbiAgfTtcblxuICBwaWUucGFkQW5nbGUgPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAocGFkQW5nbGUgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgcGllKSA6IHBhZEFuZ2xlO1xuICB9O1xuXG4gIHJldHVybiBwaWU7XG59XG4iLCJpbXBvcnQgKiBhcyBkMyBmcm9tIFwiZDNcIjtcclxuaW1wb3J0IHsgUmVuZGVySW5mbywgU3VtbWFyeUluZm8gfSBmcm9tIFwiLi9kYXRhXCI7XHJcbmltcG9ydCAqIGFzIGV4cHIgZnJvbSBcIi4vZXhwclwiO1xyXG5cclxuZnVuY3Rpb24gY2hlY2tTdW1tYXJ5VGVtcGxhdGVWYWxpZChzdW1tYXJ5VGVtcGxhdGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJTdW1tYXJ5KFxyXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBzdW1tYXJ5SW5mbzogU3VtbWFyeUluZm9cclxuKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlclN1bW1hcnlcIik7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcclxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhc3VtbWFyeUluZm8pIHJldHVybjtcclxuXHJcbiAgICAvLyBjb25zb2xlLmxvZyhzdW1tYXJ5SW5mby50ZW1wbGF0ZSk7XHJcbiAgICBsZXQgb3V0cHV0U3VtbWFyeSA9IFwiXCI7XHJcbiAgICBpZiAoY2hlY2tTdW1tYXJ5VGVtcGxhdGVWYWxpZChzdW1tYXJ5SW5mby50ZW1wbGF0ZSkpIHtcclxuICAgICAgICBvdXRwdXRTdW1tYXJ5ID0gc3VtbWFyeUluZm8udGVtcGxhdGU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybiBcIkludmFsaWQgc3VtbWFyeSB0ZW1wbGF0ZVwiO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXRSZXNvbHZlZFRlbXBsYXRlID0gZXhwci5yZXNvbHZlVGVtcGxhdGUob3V0cHV0U3VtbWFyeSwgcmVuZGVySW5mbyk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZXRSZXNvbHZlZFRlbXBsYXRlKTtcclxuICAgIGlmIChyZXRSZXNvbHZlZFRlbXBsYXRlLnN0YXJ0c1dpdGgoXCJFcnJvcjpcIikpIHtcclxuICAgICAgICByZXR1cm4gcmV0UmVzb2x2ZWRUZW1wbGF0ZTtcclxuICAgIH1cclxuICAgIG91dHB1dFN1bW1hcnkgPSByZXRSZXNvbHZlZFRlbXBsYXRlO1xyXG5cclxuICAgIGlmIChvdXRwdXRTdW1tYXJ5ICE9PSBcIlwiKSB7XHJcbiAgICAgICAgbGV0IHRleHRCbG9jayA9IGQzLnNlbGVjdChjYW52YXMpLmFwcGVuZChcImRpdlwiKTtcclxuICAgICAgICBpZiAob3V0cHV0U3VtbWFyeS5pbmNsdWRlcyhcIlxcblwiKSB8fCBvdXRwdXRTdW1tYXJ5LmluY2x1ZGVzKFwiXFxcXG5cIikpIHtcclxuICAgICAgICAgICAgbGV0IG91dHB1dExpbmVzID0gb3V0cHV0U3VtbWFyeS5zcGxpdCgvKFxcbnxcXFxcbikvKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cob3V0cHV0TGluZXMpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBvdXRwdXRMaW5lIG9mIG91dHB1dExpbmVzKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAob3V0cHV0TGluZSAhPT0gXCJcXG5cIiAmJiBvdXRwdXRMaW5lICE9PSBcIlxcXFxuXCIpXHJcbiAgICAgICAgICAgICAgICB0ZXh0QmxvY2suYXBwZW5kKFwiZGl2XCIpLnRleHQob3V0cHV0TGluZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0ZXh0QmxvY2sudGV4dChvdXRwdXRTdW1tYXJ5KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzdW1tYXJ5SW5mby5zdHlsZSAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICB0ZXh0QmxvY2suYXR0cihcInN0eWxlXCIsIHN1bW1hcnlJbmZvLnN0eWxlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIiwiaW1wb3J0IHsgTW9tZW50IH0gZnJvbSBcIm1vbWVudFwiO1xyXG5pbXBvcnQge1xyXG4gICAgRGF0YXNldHMsXHJcbiAgICBEYXRhUG9pbnQsXHJcbiAgICBSZW5kZXJJbmZvLFxyXG4gICAgTW9udGhJbmZvLFxyXG4gICAgRGF0YXNldCxcclxuICAgIFNpemUsXHJcbiAgICBUcmFuc2Zvcm0sXHJcbiAgICBDaGFydEVsZW1lbnRzLFxyXG4gICAgR3JhcGhUeXBlLFxyXG4gICAgVmFsdWVUeXBlLFxyXG59IGZyb20gXCIuL2RhdGFcIjtcclxuaW1wb3J0ICogYXMgaGVscGVyIGZyb20gXCIuL2hlbHBlclwiO1xyXG5pbXBvcnQgKiBhcyBkMyBmcm9tIFwiZDNcIjtcclxuXHJcbmxldCBsb2dUb0NvbnNvbGUgPSBmYWxzZTtcclxubGV0IHJhdGlvQ2VsbFRvVGV4dCA9IDIuODtcclxubGV0IHJhdGlvRG90VG9UZXh0ID0gMS44O1xyXG5cclxuaW50ZXJmYWNlIERheUluZm8ge1xyXG4gICAgZGF0ZTogc3RyaW5nO1xyXG4gICAgdmFsdWU6IG51bWJlcjtcclxuICAgIHNjYWxlZFZhbHVlOiBudW1iZXI7XHJcbiAgICBkYXlJbk1vbnRoOiBudW1iZXI7XHJcbiAgICBpc0luVGhpc01vbnRoOiBib29sZWFuO1xyXG4gICAgaXNPdXRPZkRhdGFSYW5nZTogYm9vbGVhbjtcclxuICAgIHJvdzogbnVtYmVyO1xyXG4gICAgY29sOiBudW1iZXI7XHJcbiAgICBzaG93Q2lyY2xlOiBib29sZWFuO1xyXG4gICAgc3RyZWFrSW46IGJvb2xlYW47XHJcbiAgICBzdHJlYWtPdXQ6IGJvb2xlYW47XHJcbiAgICBhbm5vdGF0aW9uOiBzdHJpbmc7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldENoYXJ0U2NhbGUoXHJcbiAgICBfY2FudmFzOiBIVE1MRWxlbWVudCxcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXHJcbikge1xyXG4gICAgbGV0IGNhbnZhcyA9IGQzLnNlbGVjdChfY2FudmFzKTtcclxuICAgIGxldCBzdmcgPSBjaGFydEVsZW1lbnRzLnN2ZztcclxuICAgIGxldCBzdmdXaWR0aCA9IHBhcnNlRmxvYXQoc3ZnLmF0dHIoXCJ3aWR0aFwiKSk7XHJcbiAgICBsZXQgc3ZnSGVpZ2h0ID0gcGFyc2VGbG9hdChzdmcuYXR0cihcImhlaWdodFwiKSk7XHJcbiAgICBzdmcuYXR0cihcIndpZHRoXCIsIG51bGwpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbnVsbClcclxuICAgICAgICAuYXR0cihcInZpZXdCb3hcIiwgYDAgMCAke3N2Z1dpZHRofSAke3N2Z0hlaWdodH1gKVxyXG4gICAgICAgIC5hdHRyKFwicHJlc2VydmVBc3BlY3RSYXRpb1wiLCBcInhNaWRZTWlkIG1lZXRcIik7XHJcblxyXG4gICAgaWYgKHJlbmRlckluZm8uZml0UGFuZWxXaWR0aCkge1xyXG4gICAgICAgIGNhbnZhcy5zdHlsZShcIndpZHRoXCIsIFwiMTAwJVwiKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2FudmFzLnN0eWxlKFxyXG4gICAgICAgICAgICBcIndpZHRoXCIsXHJcbiAgICAgICAgICAgIChzdmdXaWR0aCAqIHJlbmRlckluZm8uZml4ZWRTY2FsZSkudG9TdHJpbmcoKSArIFwicHhcIlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY2FudmFzLnN0eWxlKFxyXG4gICAgICAgICAgICBcImhlaWdodFwiLFxyXG4gICAgICAgICAgICAoc3ZnSGVpZ2h0ICogcmVuZGVySW5mby5maXhlZFNjYWxlKS50b1N0cmluZygpICsgXCJweFwiXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdG9OZXh0RGF0YXNldChyZW5kZXJJbmZvOiBSZW5kZXJJbmZvLCBtb250aEluZm86IE1vbnRoSW5mbyk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IGRhdGFzZXRJZHMgPSBtb250aEluZm8uZGF0YXNldDtcclxuICAgIGlmIChkYXRhc2V0SWRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlOyAvLyBmYWxzZSBpZiBzZWxlY3RlZCBkYXRhc2V0IG5vdCBjaGFuZ2VkXHJcblxyXG4gICAgbGV0IGRhdGFzZXQgPSBudWxsO1xyXG4gICAgaWYgKG1vbnRoSW5mby5zZWxlY3RlZERhdGFzZXQgPT09IG51bGwpIHtcclxuICAgICAgICBmb3IgKGxldCBkYXRhc2V0SWQgb2YgZGF0YXNldElkcykge1xyXG4gICAgICAgICAgICBkYXRhc2V0ID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpO1xyXG4gICAgICAgICAgICBpZiAoZGF0YXNldCAmJiAhZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRhdGFzZXQpIHtcclxuICAgICAgICAgICAgbW9udGhJbmZvLnNlbGVjdGVkRGF0YXNldCA9IGRhdGFzZXQuZ2V0SWQoKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7IC8vIHRydWUgaWYgc2VsZWN0ZWMgZGF0YXNldCBjaGFuZ2VkXHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgY3VyRGF0YXNldElkID0gbW9udGhJbmZvLnNlbGVjdGVkRGF0YXNldDtcclxuICAgICAgICBsZXQgY3VySW5kZXggPSBkYXRhc2V0SWRzLmZpbmRJbmRleCgoaWQpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGlkID09PSBjdXJEYXRhc2V0SWQ7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKGN1ckluZGV4ID49IDApIHtcclxuICAgICAgICAgICAgaWYgKGN1ckluZGV4ID09PSBtb250aEluZm8uZGF0YXNldC5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBzZWFyY2ggZnJvbSBzdGFydFxyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgZGF0YXNldElkIG9mIGRhdGFzZXRJZHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0ID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhc2V0ICYmICFkYXRhc2V0LmdldFF1ZXJ5KCkudXNlZEFzWERhdGFzZXQpIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKGRhdGFzZXQpIHtcclxuICAgICAgICAgICAgICAgICAgICBtb250aEluZm8uc2VsZWN0ZWREYXRhc2V0ID0gZGF0YXNldC5nZXRJZCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOyAvLyB0cnVlIGlmIHNlbGVjdGVjIGRhdGFzZXQgY2hhbmdlZFxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjdXJJbmRleCsrO1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGFzZXRJZCA9IGRhdGFzZXRJZHNbY3VySW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgZGF0YXNldCA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkKTtcclxuICAgICAgICAgICAgICAgIG1vbnRoSW5mby5zZWxlY3RlZERhdGFzZXQgPSBkYXRhc2V0SWQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF0YXNldCAmJiAhZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRvTmV4dERhdGFzZXQocmVuZGVySW5mbywgbW9udGhJbmZvKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGNyZWF0ZUFyZWFzKFxyXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcclxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgbW9udGhJbmZvOiBNb250aEluZm9cclxuKTogQ2hhcnRFbGVtZW50cyB7XHJcbiAgICAvLyBjbGVhbiBhcmVhc1xyXG4gICAgZDMuc2VsZWN0KGNhbnZhcykuc2VsZWN0KFwiI3N2Z1wiKS5yZW1vdmUoKTtcclxuICAgIHZhciBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGNoYXJ0RWxlbWVudHMpO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIC8vIGQzLnNlbGVjdChjaGFydEVsZW1lbnRzW3Byb3BzW2ldXSkucmVtb3ZlKCk7XHJcbiAgICAgICAgZGVsZXRlIGNoYXJ0RWxlbWVudHNbcHJvcHNbaV1dO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coY2hhcnRFbGVtZW50cyk7XHJcblxyXG4gICAgLy8gd2hvbGUgYXJlYSBmb3IgcGxvdHRpbmcsIGluY2x1ZGVzIG1hcmdpbnNcclxuICAgIGxldCBzdmcgPSBkM1xyXG4gICAgICAgIC5zZWxlY3QoY2FudmFzKVxyXG4gICAgICAgIC5hcHBlbmQoXCJzdmdcIilcclxuICAgICAgICAuYXR0cihcImlkXCIsIFwic3ZnXCIpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgIFwid2lkdGhcIixcclxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ubGVmdCArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5yaWdodFxyXG4gICAgICAgIClcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJoZWlnaHRcIixcclxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnRvcCArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5ib3R0b21cclxuICAgICAgICApO1xyXG4gICAgY2hhcnRFbGVtZW50c1tcInN2Z1wiXSA9IHN2ZztcclxuXHJcbiAgICAvLyBncmFwaEFyZWEsIGluY2x1ZGVzIGNoYXJ0QXJlYSwgdGl0bGUsIGxlZ2VuZFxyXG4gICAgbGV0IGdyYXBoQXJlYSA9IHN2Z1xyXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImdyYXBoQXJlYVwiKVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxyXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5sZWZ0ICtcclxuICAgICAgICAgICAgICAgIFwiLFwiICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnRvcCArXHJcbiAgICAgICAgICAgICAgICBcIilcIlxyXG4gICAgICAgIClcclxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICsgcmVuZGVySW5mby5tYXJnaW4ucmlnaHQpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgIFwiaGVpZ2h0XCIsXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArIHJlbmRlckluZm8ubWFyZ2luLmJvdHRvbVxyXG4gICAgICAgICk7XHJcbiAgICBjaGFydEVsZW1lbnRzW1wiZ3JhcGhBcmVhXCJdID0gZ3JhcGhBcmVhO1xyXG5cclxuICAgIC8vIGRhdGFBcmVhLCB1bmRlciBncmFwaEFyZWEsIGluY2x1ZGVzIHBvaW50cywgbGluZXMsIHhBeGlzLCB5QXhpc1xyXG4gICAgbGV0IGRhdGFBcmVhID0gZ3JhcGhBcmVhXHJcbiAgICAgICAgLmFwcGVuZChcImdcIilcclxuICAgICAgICAuYXR0cihcImlkXCIsIFwiZGF0YUFyZWFcIilcclxuICAgICAgICAuYXR0cihcIndpZHRoXCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoKVxyXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCk7XHJcbiAgICBjaGFydEVsZW1lbnRzW1wiZGF0YUFyZWFcIl0gPSBkYXRhQXJlYTtcclxuXHJcbiAgICByZXR1cm4gY2hhcnRFbGVtZW50cztcclxufVxyXG5cclxuZnVuY3Rpb24gY2xlYXJTZWxlY3Rpb24oY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cywgbW9udGhJbmZvOiBNb250aEluZm8pIHtcclxuICAgIGxldCBjaXJjbGVzID0gY2hhcnRFbGVtZW50cy5zdmcuc2VsZWN0QWxsKFwiY2lyY2xlXCIpO1xyXG4gICAgLy8gY29uc29sZS5sb2coY2lyY2xlcyk7XHJcbiAgICBmb3IgKGxldCBjaXJjbGUgb2YgY2lyY2xlcykge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGNpcmNsZSk7XHJcbiAgICAgICAgbGV0IGlkID0gZDMuc2VsZWN0KGNpcmNsZSkuYXR0cihcImlkXCIpO1xyXG4gICAgICAgIGlmIChpZCAmJiBpZC5zdGFydHNXaXRoKFwidHJhY2tlci1zZWxlY3RlZC1jaXJjbGUtXCIpKSB7XHJcbiAgICAgICAgICAgIGQzLnNlbGVjdChjaXJjbGUpLnN0eWxlKFwic3Ryb2tlXCIsIFwibm9uZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbW9udGhJbmZvLnNlbGVjdGVkRGF0ZSA9IFwiXCI7XHJcblxyXG4gICAgY2hhcnRFbGVtZW50cy5tb25pdG9yLnRleHQoXCJcIik7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbmRlck1vbnRoSGVhZGVyKFxyXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgbW9udGhJbmZvOiBNb250aEluZm8sXHJcbiAgICBjdXJNb250aERhdGU6IE1vbWVudFxyXG4pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyTW9udGhIZWFkZXJcIilcclxuXHJcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIW1vbnRoSW5mbykgcmV0dXJuO1xyXG5cclxuICAgIGxldCBjdXJEYXRhc2V0SWQgPSBtb250aEluZm8uc2VsZWN0ZWREYXRhc2V0O1xyXG4gICAgaWYgKGN1ckRhdGFzZXRJZCA9PT0gbnVsbCkgcmV0dXJuO1xyXG4gICAgbGV0IGRhdGFzZXQgPSByZW5kZXJJbmZvLmRhdGFzZXRzLmdldERhdGFzZXRCeUlkKGN1ckRhdGFzZXRJZCk7XHJcbiAgICBpZiAoIWRhdGFzZXQpIHJldHVybjtcclxuICAgIGxldCBkYXRhc2V0TmFtZSA9IGRhdGFzZXQuZ2V0TmFtZSgpO1xyXG5cclxuICAgIGxldCBjdXJNb250aCA9IGN1ck1vbnRoRGF0ZS5tb250aCgpOyAvLyAwfjExXHJcbiAgICBsZXQgY3VyRGF5c0luTW9udGggPSBjdXJNb250aERhdGUuZGF5c0luTW9udGgoKTsgLy8gMjh+MzFcclxuICAgIGxldCBjdXJZZWFyID0gY3VyTW9udGhEYXRlLnllYXIoKTtcclxuXHJcbiAgICBsZXQgbWF4RGF5VGV4dFNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKFwiMzBcIiwgXCJ0cmFja2VyLW1vbnRoLWxhYmVsXCIpO1xyXG4gICAgbGV0IGNlbGxTaXplID1cclxuICAgICAgICBNYXRoLm1heChtYXhEYXlUZXh0U2l6ZS53aWR0aCwgbWF4RGF5VGV4dFNpemUuaGVpZ2h0KSAqIHJhdGlvQ2VsbFRvVGV4dDtcclxuICAgIGxldCBkb3RSYWRpdXMgPSAoKGNlbGxTaXplIC8gcmF0aW9DZWxsVG9UZXh0KSAqIHJhdGlvRG90VG9UZXh0KSAvIDIuMDtcclxuXHJcbiAgICBsZXQgaGVhZGVyWWVhclRleHQgPSBjdXJNb250aERhdGUuZm9ybWF0KFwiWVlZWVwiKTtcclxuICAgIGxldCBoZWFkZXJNb250aFRleHQgPSBjdXJNb250aERhdGUuZm9ybWF0KFwiTU1NXCIpO1xyXG4gICAgbGV0IGhlYWRlclllYXJTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcclxuICAgICAgICBoZWFkZXJZZWFyVGV4dCxcclxuICAgICAgICBcInRyYWNrZXItbW9udGgtaGVhZGVyLXllYXJcIlxyXG4gICAgKTtcclxuICAgIGxldCBoZWFkZXJNb250aFNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKFxyXG4gICAgICAgIGhlYWRlck1vbnRoVGV4dCxcclxuICAgICAgICBcInRyYWNrZXItbW9udGgtaGVhZGVyLW1vbnRoXCJcclxuICAgICk7XHJcblxyXG4gICAgbGV0IGhlYWRlckhlaWdodCA9IDA7XHJcbiAgICBsZXQgeVNwYWNpbmcgPSA4O1xyXG5cclxuICAgIC8vIEFwcGVuZCBoZWFkZXIgZ3JvdXBcclxuICAgIGxldCBoZWFkZXJHcm91cCA9IGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLmFwcGVuZChcImdcIik7XHJcblxyXG4gICAgLy8gaGFlZGVyIG1vbnRoXHJcbiAgICBsZXQgaGVhZGVyTW9udGhDb2xvciA9IG51bGw7XHJcbiAgICBpZiAobW9udGhJbmZvLmhlYWRlck1vbnRoQ29sb3IpIHtcclxuICAgICAgICBoZWFkZXJNb250aENvbG9yID0gbW9udGhJbmZvLmhlYWRlck1vbnRoQ29sb3I7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChtb250aEluZm8uY29sb3IpIHtcclxuICAgICAgICAgICAgaGVhZGVyTW9udGhDb2xvciA9IG1vbnRoSW5mby5jb2xvcjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgaGVhZGVyTW9udGggPSBoZWFkZXJHcm91cFxyXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgLnRleHQoaGVhZGVyTW9udGhUZXh0KSAvLyBwaXZvdCBhdCBjZW50ZXJcclxuICAgICAgICAuYXR0cihcImlkXCIsIFwidGl0bGVNb250aFwiKVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxyXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArIGNlbGxTaXplIC8gNC4wICsgXCIsXCIgKyBoZWFkZXJNb250aFNpemUuaGVpZ2h0ICsgXCIpXCJcclxuICAgICAgICApXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbW9udGgtaGVhZGVyLW1vbnRoXCIpXHJcbiAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwiZGVmYXVsdFwiKVxyXG4gICAgICAgIC5vbihcImNsaWNrXCIsIGZ1bmN0aW9uIChldmVudDogYW55KSB7XHJcbiAgICAgICAgICAgIGNsZWFyU2VsZWN0aW9uKGNoYXJ0RWxlbWVudHMsIG1vbnRoSW5mbyk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgaWYgKGhlYWRlck1vbnRoQ29sb3IpIHtcclxuICAgICAgICBoZWFkZXJNb250aC5zdHlsZShcImZpbGxcIiwgaGVhZGVyTW9udGhDb2xvcik7XHJcbiAgICB9XHJcbiAgICBoZWFkZXJIZWlnaHQgKz0gaGVhZGVyTW9udGhTaXplLmhlaWdodDtcclxuXHJcbiAgICAvLyBoZWFkZXIgeWVhclxyXG4gICAgbGV0IGhlYWRlclllYXJDb2xvciA9IG51bGw7XHJcbiAgICBpZiAobW9udGhJbmZvLmhlYWRlclllYXJDb2xvcikge1xyXG4gICAgICAgIGhlYWRlclllYXJDb2xvciA9IG1vbnRoSW5mby5oZWFkZXJZZWFyQ29sb3I7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChtb250aEluZm8uY29sb3IpIHtcclxuICAgICAgICAgICAgaGVhZGVyWWVhckNvbG9yID0gbW9udGhJbmZvLmNvbG9yO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBoZWFkZXJZZWFyID0gaGVhZGVyR3JvdXBcclxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAgIC50ZXh0KGhlYWRlclllYXJUZXh0KSAvLyBwaXZvdCBhdCBjZW50ZXJcclxuICAgICAgICAuYXR0cihcImlkXCIsIFwidGl0bGVZZWFyXCIpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXHJcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcclxuICAgICAgICAgICAgICAgIGNlbGxTaXplIC8gNC4wICtcclxuICAgICAgICAgICAgICAgIFwiLFwiICtcclxuICAgICAgICAgICAgICAgIChoZWFkZXJIZWlnaHQgKyBoZWFkZXJZZWFyU2l6ZS5oZWlnaHQpICtcclxuICAgICAgICAgICAgICAgIFwiKVwiXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLWhlYWRlci15ZWFyXCIpXHJcbiAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwiZGVmYXVsdFwiKVxyXG4gICAgICAgIC5hdHRyKFwiZm9udC13ZWlnaHRcIiwgXCJib2xkXCIpXHJcbiAgICAgICAgLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb24oY2hhcnRFbGVtZW50cywgbW9udGhJbmZvKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICBpZiAoaGVhZGVyWWVhckNvbG9yKSB7XHJcbiAgICAgICAgaGVhZGVyWWVhci5zdHlsZShcImZpbGxcIiwgaGVhZGVyWWVhckNvbG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBoZWFkZXJIZWlnaHQgKz0gaGVhZGVyWWVhclNpemUuaGVpZ2h0O1xyXG5cclxuICAgIC8vIGRhdGFzZXQgcm90YXRvclxyXG4gICAgbGV0IGRhdGFzZXROYW1lU2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXHJcbiAgICAgICAgZGF0YXNldE5hbWUsXHJcbiAgICAgICAgXCJ0cmFja2VyLW1vbnRoLXRpdGxlLXJvdGF0b3JcIlxyXG4gICAgKTtcclxuICAgIGlmIChcclxuICAgICAgICBtb250aEluZm8ubW9kZSA9PT0gXCJjaXJjbGVcIiB8fFxyXG4gICAgICAgIChtb250aEluZm8ubW9kZSA9PT0gXCJhbm5vdGF0aW9uXCIgJiZcclxuICAgICAgICAgICAgIW1vbnRoSW5mby5zaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0cylcclxuICAgICkge1xyXG4gICAgICAgIGxldCBkYXRhc2V0Um90YXRvciA9IGhlYWRlckdyb3VwXHJcbiAgICAgICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgICAgIC50ZXh0KGRhdGFzZXROYW1lKVxyXG4gICAgICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXHJcbiAgICAgICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXHJcbiAgICAgICAgICAgICAgICAgICAgMy41ICogY2VsbFNpemUgK1xyXG4gICAgICAgICAgICAgICAgICAgIFwiLFwiICtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhc2V0TmFtZVNpemUuaGVpZ2h0ICtcclxuICAgICAgICAgICAgICAgICAgICBcIilcIlxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLXRpdGxlLXJvdGF0b3JcIilcclxuICAgICAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwicG9pbnRlclwiKVxyXG4gICAgICAgICAgICAub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgICAgICAgICAgLy8gc2hvdyBuZXh0IHRhcmdldFxyXG4gICAgICAgICAgICAgICAgaWYgKHRvTmV4dERhdGFzZXQocmVuZGVySW5mbywgbW9udGhJbmZvKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNsZWFyIGNpcmNsZXNcclxuICAgICAgICAgICAgICAgICAgICBjbGVhclNlbGVjdGlvbihjaGFydEVsZW1lbnRzLCBtb250aEluZm8pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjYW52YXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vbnRoSW5mbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VyTW9udGhEYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgY2hhcnRFbGVtZW50c1tcInJvdGF0b3JcIl0gPSBkYXRhc2V0Um90YXRvcjtcclxuICAgIH1cclxuXHJcbiAgICAvLyB2YWx1ZSBtb25pdG9yXHJcbiAgICBsZXQgbW9uaXRvclRleHRTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcclxuICAgICAgICBcIjAuMDAwMFwiLFxyXG4gICAgICAgIFwidHJhY2tlci1tb250aC10aXRsZS1tb25pdG9yXCJcclxuICAgICk7XHJcbiAgICBsZXQgbW9uaXRvciA9IGhlYWRlckdyb3VwXHJcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcclxuICAgICAgICAudGV4dChcIlwiKVxyXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJtb25pdG9yXCIpXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbW9udGgtdGl0bGUtbW9uaXRvclwiKVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxyXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXHJcbiAgICAgICAgICAgICAgICAzLjUgKiBjZWxsU2l6ZSArXHJcbiAgICAgICAgICAgICAgICBcIixcIiArXHJcbiAgICAgICAgICAgICAgICAoZGF0YXNldE5hbWVTaXplLmhlaWdodCArIG1vbml0b3JUZXh0U2l6ZS5oZWlnaHQpICtcclxuICAgICAgICAgICAgICAgIFwiKVwiXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcInBvaW50ZXJcIilcclxuICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIG1vbnRoSW5mby5zZWxlY3RlZFJpbmdDb2xvcik7XHJcbiAgICBjaGFydEVsZW1lbnRzW1wibW9uaXRvclwiXSA9IG1vbml0b3I7XHJcblxyXG4gICAgLy8gYXJyb3cgbGVmdFxyXG4gICAgbGV0IGFycm93U2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXCI8XCIsIFwidHJhY2tlci1tb250aC10aXRsZS1hcnJvd1wiKTtcclxuICAgIGxldCBhcnJvd0xlZnQgPSBoZWFkZXJHcm91cFxyXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgLnRleHQoXCI8XCIpIC8vIHBpdm90IGF0IGNlbnRlclxyXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJhcnJvd0xlZnRcIilcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcclxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xyXG4gICAgICAgICAgICAgICAgNS41ICogY2VsbFNpemUgK1xyXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xyXG4gICAgICAgICAgICAgICAgKGhlYWRlckhlaWdodCAvIDIgKyBhcnJvd1NpemUuaGVpZ2h0IC8gMikgK1xyXG4gICAgICAgICAgICAgICAgXCIpXCJcclxuICAgICAgICApXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbW9udGgtdGl0bGUtYXJyb3dcIilcclxuICAgICAgICAub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImxlZnQgYXJyb3cgY2xpY2tlZFwiKTtcclxuICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb24oY2hhcnRFbGVtZW50cywgbW9udGhJbmZvKTtcclxuICAgICAgICAgICAgbW9udGhJbmZvLnNlbGVjdGVkRGF0ZSA9IFwiXCI7XHJcbiAgICAgICAgICAgIGxldCBwcmV2TW9udGhEYXRlID0gY3VyTW9udGhEYXRlLmNsb25lKCkuYWRkKC0xLCBcIm1vbnRoXCIpO1xyXG4gICAgICAgICAgICByZWZyZXNoKFxyXG4gICAgICAgICAgICAgICAgY2FudmFzLFxyXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cyxcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXHJcbiAgICAgICAgICAgICAgICBtb250aEluZm8sXHJcbiAgICAgICAgICAgICAgICBwcmV2TW9udGhEYXRlXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJwb2ludGVyXCIpO1xyXG5cclxuICAgIC8vIGFycm93IHJpZ2h0XHJcbiAgICBsZXQgYXJyb3dSaWdodCA9IGhlYWRlckdyb3VwXHJcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcclxuICAgICAgICAudGV4dChcIj5cIikgLy8gcGl2b3QgYXQgY2VudGVyXHJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImFycm93TGVmdFwiKVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxyXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXHJcbiAgICAgICAgICAgICAgICA2LjUgKiBjZWxsU2l6ZSArXHJcbiAgICAgICAgICAgICAgICBcIixcIiArXHJcbiAgICAgICAgICAgICAgICAoaGVhZGVySGVpZ2h0IC8gMiArIGFycm93U2l6ZS5oZWlnaHQgLyAyKSArXHJcbiAgICAgICAgICAgICAgICBcIilcIlxyXG4gICAgICAgIClcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC10aXRsZS1hcnJvd1wiKVxyXG4gICAgICAgIC5vbihcImNsaWNrXCIsIGZ1bmN0aW9uIChldmVudDogYW55KSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwicmlnaHQgYXJyb3cgY2xpY2tlZFwiKTtcclxuICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb24oY2hhcnRFbGVtZW50cywgbW9udGhJbmZvKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBuZXh0TW9udGhEYXRlID0gY3VyTW9udGhEYXRlLmNsb25lKCkuYWRkKDEsIFwibW9udGhcIik7XHJcbiAgICAgICAgICAgIHJlZnJlc2goXHJcbiAgICAgICAgICAgICAgICBjYW52YXMsXHJcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLFxyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcclxuICAgICAgICAgICAgICAgIG1vbnRoSW5mbyxcclxuICAgICAgICAgICAgICAgIG5leHRNb250aERhdGVcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcInBvaW50ZXJcIik7XHJcblxyXG4gICAgLy8gYXJyb3cgdG9kYXlcclxuICAgIGxldCBhcnJvd1RvZGF5ID0gaGVhZGVyR3JvdXBcclxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAgIC50ZXh0KFwi4pemXCIpIC8vIHBpdm90IGF0IGNlbnRlclxyXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJhcnJvd1RvZGF5XCIpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXHJcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcclxuICAgICAgICAgICAgICAgIDYgKiBjZWxsU2l6ZSArXHJcbiAgICAgICAgICAgICAgICBcIixcIiArXHJcbiAgICAgICAgICAgICAgICAoaGVhZGVySGVpZ2h0IC8gMiArIGFycm93U2l6ZS5oZWlnaHQgLyAyKSArXHJcbiAgICAgICAgICAgICAgICBcIilcIlxyXG4gICAgICAgIClcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC10aXRsZS1hcnJvd1wiKVxyXG4gICAgICAgIC5vbihcImNsaWNrXCIsIGZ1bmN0aW9uIChldmVudDogYW55KSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwidG9kYXkgYXJyb3cgY2xpY2tlZFwiKTtcclxuICAgICAgICAgICAgY2xlYXJTZWxlY3Rpb24oY2hhcnRFbGVtZW50cywgbW9udGhJbmZvKTtcclxuXHJcbiAgICAgICAgICAgIGxldCB0b2RheURhdGUgPSBoZWxwZXIuZ2V0RGF0ZVRvZGF5KHJlbmRlckluZm8uZGF0ZUZvcm1hdCk7XHJcbiAgICAgICAgICAgIHJlZnJlc2goY2FudmFzLCBjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBtb250aEluZm8sIHRvZGF5RGF0ZSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3R5bGUoXCJjdXJzb3JcIiwgXCJwb2ludGVyXCIpO1xyXG5cclxuICAgIGhlYWRlckhlaWdodCArPSB5U3BhY2luZztcclxuXHJcbiAgICAvLyB3ZWVrIGRheSBuYW1lc1xyXG4gICAgbGV0IHdlZWtkYXlOYW1lcyA9IFtcIlN1blwiLCBcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiXTtcclxuICAgIGlmIChtb250aEluZm8uc3RhcnRXZWVrT24udG9Mb3dlckNhc2UoKSA9PT0gXCJtb25cIikge1xyXG4gICAgICAgIHdlZWtkYXlOYW1lcy5wdXNoKHdlZWtkYXlOYW1lcy5zaGlmdCgpKTtcclxuICAgIH1cclxuICAgIGxldCB3ZWVrZGF5TmFtZVNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKFxyXG4gICAgICAgIHdlZWtkYXlOYW1lc1swXSxcclxuICAgICAgICBcInRyYWNrZXItbW9udGgtd2Vla2RheVwiXHJcbiAgICApO1xyXG4gICAgbGV0IHdlZWtEYXlzID0gY2hhcnRFbGVtZW50cy5ncmFwaEFyZWFcclxuICAgICAgICAuc2VsZWN0QWxsKFwid2Vla0RheXNcIilcclxuICAgICAgICAuZGF0YSh3ZWVrZGF5TmFtZXMpXHJcbiAgICAgICAgLmVudGVyKClcclxuICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAgIC50ZXh0KGZ1bmN0aW9uIChuOiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG47XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBmdW5jdGlvbiAobjogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgbGV0IHN0clRyYW5zbGF0ZSA9XHJcbiAgICAgICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXHJcbiAgICAgICAgICAgICAgICAoaSArIDAuNSkgKiBjZWxsU2l6ZSArXHJcbiAgICAgICAgICAgICAgICBcIixcIiArXHJcbiAgICAgICAgICAgICAgICAoaGVhZGVySGVpZ2h0ICsgd2Vla2RheU5hbWVTaXplLmhlaWdodCkgK1xyXG4gICAgICAgICAgICAgICAgXCIpXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBzdHJUcmFuc2xhdGU7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC13ZWVrZGF5XCIpXHJcbiAgICAgICAgLmF0dHIoXCJ0ZXh0LWFuY2hvclwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIilcclxuICAgICAgICAub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoZXZlbnQ6IGFueSkge1xyXG4gICAgICAgICAgICBjbGVhclNlbGVjdGlvbihjaGFydEVsZW1lbnRzLCBtb250aEluZm8pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgaGVhZGVySGVpZ2h0ICs9IHdlZWtkYXlOYW1lU2l6ZS5oZWlnaHQgKyB5U3BhY2luZztcclxuXHJcbiAgICAvLyBkaXZpZGluZyBsaW5lXHJcbiAgICBsZXQgZGl2aWRpbmdMaW5lSGVpZ2h0ID0gMTtcclxuICAgIGxldCBkaXZpZGluZ0xpbmVDb2xvciA9IG51bGw7XHJcbiAgICBpZiAobW9udGhJbmZvLmRpdmlkaW5nTGluZUNvbG9yKSB7XHJcbiAgICAgICAgZGl2aWRpbmdMaW5lQ29sb3IgPSBtb250aEluZm8uZGl2aWRpbmdMaW5lQ29sb3I7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmIChtb250aEluZm8uY29sb3IpIHtcclxuICAgICAgICAgICAgZGl2aWRpbmdMaW5lQ29sb3IgPSBtb250aEluZm8uY29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgbGV0IGRpdmlkaW5nTGluZSA9IGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhXHJcbiAgICAgICAgLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgICAuYXR0cihcInhcIiwgMClcclxuICAgICAgICAuYXR0cihcInlcIiwgaGVhZGVySGVpZ2h0KVxyXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgNi41ICogY2VsbFNpemUgKyB3ZWVrZGF5TmFtZVNpemUud2lkdGgpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgZGl2aWRpbmdMaW5lSGVpZ2h0KVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLWRpdmlkaW5nLWxpbmVcIik7XHJcblxyXG4gICAgaWYgKGRpdmlkaW5nTGluZUNvbG9yKSB7XHJcbiAgICAgICAgZGl2aWRpbmdMaW5lLnN0eWxlKFwiZmlsbFwiLCBkaXZpZGluZ0xpbmVDb2xvcik7XHJcbiAgICB9XHJcbiAgICBoZWFkZXJIZWlnaHQgKz0gZGl2aWRpbmdMaW5lSGVpZ2h0O1xyXG5cclxuICAgIGhlYWRlckdyb3VwLmF0dHIoXCJoZWlnaHRcIiwgaGVhZGVySGVpZ2h0KTtcclxuICAgIGNoYXJ0RWxlbWVudHNbXCJoZWFkZXJcIl0gPSBoZWFkZXJHcm91cDtcclxuXHJcbiAgICAvLyBNb3ZlIHNpYmxpbmcgYXJlYXNcclxuICAgIGhlbHBlci5tb3ZlQXJlYShjaGFydEVsZW1lbnRzLmRhdGFBcmVhLCAwLCBoZWFkZXJIZWlnaHQpO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW5kZXJNb250aERheXMoXHJcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxyXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBtb250aEluZm86IE1vbnRoSW5mbyxcclxuICAgIGN1ck1vbnRoRGF0ZTogTW9tZW50XHJcbikge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJNb250aERheXNcIik7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoSW5mbyk7XHJcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIW1vbnRoSW5mbykgcmV0dXJuO1xyXG5cclxuICAgIGxldCBtb2RlID0gbW9udGhJbmZvLm1vZGU7XHJcbiAgICBpZiAobW9kZSAhPT0gXCJjaXJjbGVcIiAmJiBtb2RlICE9PSBcImFubm90YXRpb25cIikge1xyXG4gICAgICAgIHJldHVybiBcIlVua25vd24gbW9udGggdmlldyBtb2RlXCI7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGN1ckRhdGFzZXRJZCA9IG1vbnRoSW5mby5zZWxlY3RlZERhdGFzZXQ7XHJcbiAgICBpZiAoY3VyRGF0YXNldElkID09PSBudWxsKSByZXR1cm47XHJcbiAgICBsZXQgZGF0YXNldCA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoY3VyRGF0YXNldElkKTtcclxuICAgIGlmICghZGF0YXNldCkgcmV0dXJuO1xyXG4gICAgLy8gY29uc29sZS5sb2coZGF0YXNldCk7XHJcblxyXG4gICAgbGV0IGN1ckRhdGFzZXRJbmRleCA9IG1vbnRoSW5mby5kYXRhc2V0LmZpbmRJbmRleCgoaWQpID0+IHtcclxuICAgICAgICByZXR1cm4gaWQgPT09IGN1ckRhdGFzZXRJZDtcclxuICAgIH0pO1xyXG4gICAgaWYgKGN1ckRhdGFzZXRJZCA8IDApIGN1ckRhdGFzZXRJbmRleCA9IDA7XHJcbiAgICBsZXQgdGhyZXNob2xkID0gbW9udGhJbmZvLnRocmVzaG9sZFtjdXJEYXRhc2V0SW5kZXhdO1xyXG5cclxuICAgIGxldCBjdXJNb250aCA9IGN1ck1vbnRoRGF0ZS5tb250aCgpOyAvLyAwfjExXHJcbiAgICBsZXQgY3VyRGF5c0luTW9udGggPSBjdXJNb250aERhdGUuZGF5c0luTW9udGgoKTsgLy8gMjh+MzFcclxuXHJcbiAgICBsZXQgbWF4RGF5VGV4dFNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKFwiMzBcIiwgXCJ0cmFja2VyLW1vbnRoLWxhYmVsXCIpO1xyXG4gICAgbGV0IGNlbGxTaXplID1cclxuICAgICAgICBNYXRoLm1heChtYXhEYXlUZXh0U2l6ZS53aWR0aCwgbWF4RGF5VGV4dFNpemUuaGVpZ2h0KSAqIHJhdGlvQ2VsbFRvVGV4dDtcclxuICAgIGxldCBkb3RSYWRpdXMgPSAoKGNlbGxTaXplIC8gcmF0aW9DZWxsVG9UZXh0KSAqIHJhdGlvRG90VG9UZXh0KSAvIDIuMDtcclxuICAgIGxldCBzdHJlYWtXaWR0aCA9IChjZWxsU2l6ZSAtIGRvdFJhZGl1cyAqIDIuMCkgLyAyLjA7XHJcbiAgICBsZXQgc3RyZWFrSGVpZ2h0ID0gMztcclxuXHJcbiAgICAvLyBHZXQgbWluIGFuZCBtYXhcclxuICAgIGxldCB5TWluID0gZDMubWluKGRhdGFzZXQuZ2V0VmFsdWVzKCkpO1xyXG4gICAgaWYgKG1vbnRoSW5mby55TWluW2N1ckRhdGFzZXRJbmRleF0gIT09IG51bGwpIHtcclxuICAgICAgICB5TWluID0gbW9udGhJbmZvLnlNaW5bY3VyRGF0YXNldEluZGV4XTtcclxuICAgIH1cclxuICAgIGxldCB5TWF4ID0gZDMubWF4KGRhdGFzZXQuZ2V0VmFsdWVzKCkpO1xyXG4gICAgaWYgKG1vbnRoSW5mby55TWF4W2N1ckRhdGFzZXRJbmRleF0gIT09IG51bGwpIHtcclxuICAgICAgICB5TWF4ID0gbW9udGhJbmZvLnlNYXhbY3VyRGF0YXNldEluZGV4XTtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKGB5TWluOiR7eU1pbn0sIHlNYXg6JHt5TWF4fWApO1xyXG4gICAgbGV0IGFsbG93U2NhbGVkVmFsdWUgPSB0cnVlO1xyXG4gICAgaWYgKHlNYXggPT09IG51bGwgfHwgeU1pbiA9PT0gbnVsbCB8fCB5TWF4IDw9IHlNaW4pIHtcclxuICAgICAgICAvLyBzY2FsZWRWYWx1ZSBjYW4gbm90IGJlIGNhbGN1bGF0ZWQsIGRvIG5vdCB1c2UgZ3JhZGllbnQgY29sb3JcclxuICAgICAgICBhbGxvd1NjYWxlZFZhbHVlID0gZmFsc2U7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJzY2FsZWRWYWx1ZSBub3QgYWxsb3dlZFwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTdGFydCBhbmQgZW5kXHJcbiAgICBjb25zdCBtb250aFN0YXJ0RGF0ZSA9IGN1ck1vbnRoRGF0ZS5jbG9uZSgpLnN0YXJ0T2YoXCJtb250aFwiKTtcclxuICAgIGxldCBzdGFydERhdGUgPSBtb250aFN0YXJ0RGF0ZVxyXG4gICAgICAgIC5jbG9uZSgpXHJcbiAgICAgICAgLnN1YnRyYWN0KG1vbnRoU3RhcnREYXRlLmRheSgpLCBcImRheXNcIik7XHJcbiAgICBpZiAobW9udGhJbmZvLnN0YXJ0V2Vla09uLnRvTG93ZXJDYXNlKCkgPT09IFwibW9uXCIpIHtcclxuICAgICAgICBzdGFydERhdGUgPSBzdGFydERhdGUuYWRkKDEsIFwiZGF5c1wiKTtcclxuICAgIH1cclxuICAgIGNvbnN0IG1vbnRoRW5kRGF0ZSA9IGN1ck1vbnRoRGF0ZS5jbG9uZSgpLmVuZE9mKFwibW9udGhcIik7XHJcbiAgICBsZXQgZW5kRGF0ZSA9IG1vbnRoRW5kRGF0ZS5jbG9uZSgpLmFkZCg3IC0gbW9udGhFbmREYXRlLmRheSgpIC0gMSwgXCJkYXlzXCIpO1xyXG4gICAgaWYgKG1vbnRoSW5mby5zdGFydFdlZWtPbi50b0xvd2VyQ2FzZSgpID09PSBcIm1vblwiKSB7XHJcbiAgICAgICAgZW5kRGF0ZSA9IGVuZERhdGUuYWRkKDEsIFwiZGF5c1wiKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGRhdGFTdGFydERhdGUgPSBkYXRhc2V0LmdldFN0YXJ0RGF0ZSgpO1xyXG4gICAgY29uc3QgZGF0YUVuZERhdGUgPSBkYXRhc2V0LmdldEVuZERhdGUoKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoU3RhcnREYXRlLmZvcm1hdChcIllZWVktTU0tRERcIikpO1xyXG4gICAgLy8gY29uc29sZS5sb2coc3RhcnREYXRlLmZvcm1hdChcIllZWVktTU0tRERcIikpO1xyXG5cclxuICAgIC8vIGFubm90YXRpb25zXHJcbiAgICBsZXQgc2hvd0Fubm90YXRpb24gPSBtb250aEluZm8uc2hvd0Fubm90YXRpb247XHJcbiAgICBsZXQgYW5ub3RhdGlvbnMgPSBtb250aEluZm8uYW5ub3RhdGlvbjtcclxuICAgIGxldCBjdXJBbm5vdGF0aW9uID0gYW5ub3RhdGlvbnNbY3VyRGF0YXNldEluZGV4XTtcclxuICAgIGxldCBzaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0cyA9IG1vbnRoSW5mby5zaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0cztcclxuXHJcbiAgICAvLyBQcmVwYXJlIGRhdGEgZm9yIGdyYXBoXHJcbiAgICBsZXQgZGF5c0luTW9udGhWaWV3OiBBcnJheTxEYXlJbmZvPiA9IFtdO1xyXG4gICAgbGV0IGluZENvbCA9IDA7XHJcbiAgICBsZXQgaW5kUm93ID0gMDtcclxuICAgIGxldCBpbmQgPSAwO1xyXG4gICAgZm9yIChcclxuICAgICAgICBsZXQgY3VyRGF0ZSA9IHN0YXJ0RGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgIGN1ckRhdGUgPD0gZW5kRGF0ZTtcclxuICAgICAgICBjdXJEYXRlLmFkZCgxLCBcImRheXNcIilcclxuICAgICkge1xyXG4gICAgICAgIC8vIG5vdCBzdXJlIHdoeSB3ZSBuZWVkIHRvIGRvIHRoaXMgdG8gc3RhYmxpemUgdGhlIGRhdGVcclxuICAgICAgICAvLyBzb21ldGltZXMsIGN1clZhbHVlIGlzIHdyb25nIHdpdGhvdXQgZG9pbmcgdGhpc1xyXG4gICAgICAgIGN1ckRhdGUgPSBoZWxwZXIuc3RyVG9EYXRlKFxyXG4gICAgICAgICAgICBoZWxwZXIuZGF0ZVRvU3RyKGN1ckRhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCksXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGN1ckRhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSA9PT0gXCIyMDIxLTA5LTEzXCIpIHtcclxuICAgICAgICAgICAgbG9nVG9Db25zb2xlID0gZmFsc2U7IC8vIENoYW5nZSB0aGlzIHRvIGRvIGR1YnVnZ2luZ1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKG1vbnRoSW5mby5zdGFydFdlZWtPbi50b0xvd2VyQ2FzZSgpID09PSBcIm1vblwiKSB7XHJcbiAgICAgICAgICAgIGluZENvbCA9IGN1ckRhdGUuZGF5KCkgLSAxO1xyXG4gICAgICAgICAgICBpZiAoaW5kQ29sIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgaW5kQ29sID0gNjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpbmRSb3cgPSBNYXRoLmZsb29yKGluZCAvIDcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGluZENvbCA9IGN1ckRhdGUuZGF5KCk7IC8vIDB+NlxyXG4gICAgICAgICAgICBpbmRSb3cgPSBNYXRoLmZsb29yKGluZCAvIDcpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaXMgdGhpcyBkYXkgaW4gdGhpcyBtb250aFxyXG4gICAgICAgIGxldCBpc0luVGhpc01vbnRoID0gdHJ1ZTtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIGN1ckRhdGUuZGlmZihtb250aFN0YXJ0RGF0ZSkgPCAwIHx8XHJcbiAgICAgICAgICAgIGN1ckRhdGUuZGlmZihtb250aEVuZERhdGUpID4gMFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBpc0luVGhpc01vbnRoID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGlzIHRoaXMgZGF5IG91dCBvZiBkYXRhIHJhbmdlXHJcbiAgICAgICAgbGV0IGlzT3V0T2ZEYXRhUmFuZ2UgPSB0cnVlO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgZGF0YVN0YXJ0RGF0ZSAmJlxyXG4gICAgICAgICAgICBkYXRhRW5kRGF0ZSAmJlxyXG4gICAgICAgICAgICBjdXJEYXRlLmRpZmYoZGF0YVN0YXJ0RGF0ZSkgPj0gMCAmJlxyXG4gICAgICAgICAgICBjdXJEYXRlLmRpZmYoZGF0YUVuZERhdGUpIDw9IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgaXNPdXRPZkRhdGFSYW5nZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgY3VyVmFsdWUgPSBkYXRhc2V0LmdldFZhbHVlKGN1ckRhdGUpO1xyXG4gICAgICAgIGlmIChsb2dUb0NvbnNvbGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coZGF0YXNldCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGhlbHBlci5kYXRlVG9TdHIoY3VyRGF0ZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGN1clZhbHVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHNob3dDaXJjbGVcclxuICAgICAgICBsZXQgc2hvd0NpcmNsZSA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghbW9udGhJbmZvLmNpcmNsZUNvbG9yQnlWYWx1ZSkge1xyXG4gICAgICAgICAgICAvLyBzaG93biBvciBub3Qgc2hvd25cclxuICAgICAgICAgICAgaWYgKGN1clZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VyVmFsdWUgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICBzaG93Q2lyY2xlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICghYWxsb3dTY2FsZWRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1clZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1clZhbHVlID4gdGhyZXNob2xkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNob3dDaXJjbGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHNob3dDaXJjbGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzY2FsZWRWYWx1ZVxyXG4gICAgICAgIGxldCBzY2FsZWRWYWx1ZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKG1vbnRoSW5mby5jaXJjbGVDb2xvckJ5VmFsdWUpIHtcclxuICAgICAgICAgICAgaWYgKGFsbG93U2NhbGVkVmFsdWUgJiYgY3VyVmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHNjYWxlZFZhbHVlID0gKGN1clZhbHVlIC0geU1pbikgLyAoeU1heCAtIHlNaW4pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChsb2dUb0NvbnNvbGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coeU1pbik7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKHlNYXgpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhzY2FsZWRWYWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzdHJlYWtJbiBhbmQgc3RyZWFrT3V0XHJcbiAgICAgICAgbGV0IG5leHRWYWx1ZSA9IGRhdGFzZXQuZ2V0VmFsdWUoY3VyRGF0ZSwgMSk7XHJcbiAgICAgICAgbGV0IHByZXZWYWx1ZSA9IGRhdGFzZXQuZ2V0VmFsdWUoY3VyRGF0ZSwgLTEpO1xyXG4gICAgICAgIGxldCBzdHJlYWtJbiA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChjdXJWYWx1ZSAhPT0gbnVsbCAmJiBjdXJWYWx1ZSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICBpZiAocHJldlZhbHVlICE9PSBudWxsICYmIHByZXZWYWx1ZSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICAgICAgc3RyZWFrSW4gPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBzdHJlYWtPdXQgPSBmYWxzZTtcclxuICAgICAgICBpZiAoY3VyVmFsdWUgIT09IG51bGwgJiYgY3VyVmFsdWUgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgaWYgKG5leHRWYWx1ZSAhPT0gbnVsbCAmJiBuZXh0VmFsdWUgPiB0aHJlc2hvbGQpIHtcclxuICAgICAgICAgICAgICAgIHN0cmVha091dCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGxvZ1RvQ29uc29sZSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAgIGBwcmVWYWx1ZTogJHtwcmV2VmFsdWV9LCBjdXJWYWx1ZTogJHtjdXJWYWx1ZX0sIG5leHRWYWx1ZTogJHtuZXh0VmFsdWV9YFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhtb250aEluZm8udGhyZXNob2xkKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYHN0cmVha0luOiAke3N0cmVha0lufSwgc3RyZWFrT3V0OiAke3N0cmVha091dH1gKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB0ZXh0QW5ub3RhdGlvbiA9IFwiXCI7XHJcbiAgICAgICAgaWYgKHNob3dBbm5vdGF0aW9uKSB7XHJcbiAgICAgICAgICAgIGlmICghc2hvd0Fubm90YXRpb25PZkFsbFRhcmdldHMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJWYWx1ZSA+IHRocmVzaG9sZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHRBbm5vdGF0aW9uID0gY3VyQW5ub3RhdGlvbjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGRhdGFzZXRJZCBvZiBtb250aEluZm8uZGF0YXNldCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhc2V0SW5kZXggPSBtb250aEluZm8uZGF0YXNldC5maW5kSW5kZXgoKGlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpZCA9PT0gZGF0YXNldElkO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRhc2V0SW5kZXggPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdiA9IHJlbmRlckluZm8uZGF0YXNldHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuZ2V0VmFsdWUoY3VyRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0ID0gbW9udGhJbmZvLnRocmVzaG9sZFtkYXRhc2V0SW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodiAhPT0gbnVsbCAmJiB2ID4gdCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dEFubm90YXRpb24gKz0gYW5ub3RhdGlvbnNbZGF0YXNldEluZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZGF5c0luTW9udGhWaWV3LnB1c2goe1xyXG4gICAgICAgICAgICBkYXRlOiBoZWxwZXIuZGF0ZVRvU3RyKGN1ckRhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCksXHJcbiAgICAgICAgICAgIHZhbHVlOiBjdXJWYWx1ZSxcclxuICAgICAgICAgICAgc2NhbGVkVmFsdWU6IHNjYWxlZFZhbHVlLFxyXG4gICAgICAgICAgICBkYXlJbk1vbnRoOiBjdXJEYXRlLmRhdGUoKSxcclxuICAgICAgICAgICAgaXNJblRoaXNNb250aDogaXNJblRoaXNNb250aCxcclxuICAgICAgICAgICAgaXNPdXRPZkRhdGFSYW5nZTogaXNPdXRPZkRhdGFSYW5nZSxcclxuICAgICAgICAgICAgcm93OiBpbmRSb3csXHJcbiAgICAgICAgICAgIGNvbDogaW5kQ29sLFxyXG4gICAgICAgICAgICBzaG93Q2lyY2xlOiBzaG93Q2lyY2xlLFxyXG4gICAgICAgICAgICBzdHJlYWtJbjogc3RyZWFrSW4sXHJcbiAgICAgICAgICAgIHN0cmVha091dDogc3RyZWFrT3V0LFxyXG4gICAgICAgICAgICBhbm5vdGF0aW9uOiB0ZXh0QW5ub3RhdGlvbixcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaW5kKys7XHJcblxyXG4gICAgICAgIC8vIERpc2FibGUgbG9nZ2luZyBzdGFydHMgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIGxvb3BcclxuICAgICAgICBpZiAobG9nVG9Db25zb2xlKSB7XHJcbiAgICAgICAgICAgIGxvZ1RvQ29uc29sZSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKGRheXNJbk1vbnRoVmlldyk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhkYXlzSW5Nb250aFZpZXcuZmlsdGVyKGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAvLyAgICAgcmV0dXJuIGQuc3RyZWFrSW47XHJcbiAgICAvLyB9KSk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhkYXlzSW5Nb250aFZpZXcuZmlsdGVyKGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAvLyAgICAgcmV0dXJuIGQuc3RyZWFrT3V0O1xyXG4gICAgLy8gfSkpO1xyXG5cclxuICAgIC8vIHNjYWxlXHJcbiAgICBsZXQgdG90YWxEYXlCbG9ja1dpZHRoID0gKGluZENvbCArIDEpICogY2VsbFNpemU7XHJcbiAgICBsZXQgdG90YWxCbG9ja0hlaWdodCA9IChpbmRSb3cgKyAxKSAqIGNlbGxTaXplO1xyXG4gICAgbGV0IHNjYWxlID0gZDNcclxuICAgICAgICAuc2NhbGVMaW5lYXIoKVxyXG4gICAgICAgIC5kb21haW4oWy0wLjUsIDYuNV0pXHJcbiAgICAgICAgLnJhbmdlKFswLCB0b3RhbERheUJsb2NrV2lkdGhdKTtcclxuXHJcbiAgICAvLyBzdHJlYWsgbGluZXNcclxuICAgIGlmIChtb2RlID09PSBcImNpcmNsZVwiICYmIG1vbnRoSW5mby5zaG93Q2lyY2xlICYmIG1vbnRoSW5mby5zaG93U3RyZWFrKSB7XHJcbiAgICAgICAgbGV0IHN0cmVha0NvbG9yID0gXCIjNjliM2EyXCI7XHJcbiAgICAgICAgaWYgKG1vbnRoSW5mby5jaXJjbGVDb2xvcikge1xyXG4gICAgICAgICAgICBzdHJlYWtDb2xvciA9IG1vbnRoSW5mby5jaXJjbGVDb2xvcjtcclxuICAgICAgICB9IGVsc2UgaWYgKG1vbnRoSW5mby5jb2xvcikge1xyXG4gICAgICAgICAgICBzdHJlYWtDb2xvciA9IG1vbnRoSW5mby5jb2xvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coc3RyZWFrQ29sb3IpO1xyXG5cclxuICAgICAgICBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJzdHJlYWtJblwiKVxyXG4gICAgICAgICAgICAuZGF0YShcclxuICAgICAgICAgICAgICAgIGRheXNJbk1vbnRoVmlldy5maWx0ZXIoZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZC5zdHJlYWtJbjtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgICAgICAgLy8gLmF0dHIoXCJpZFwiLCBmdW5jdGlvbihkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgIC8vICAgICByZXR1cm4gXCJpblwiICsgZC5kYXRlLmZvcm1hdChcIllZWVktTU0tRERcIik7XHJcbiAgICAgICAgICAgIC8vIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHggPSBzY2FsZShkLmNvbCkgLSBkb3RSYWRpdXMgLSBzdHJlYWtXaWR0aDtcclxuICAgICAgICAgICAgICAgIHJldHVybiB4O1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzY2FsZShkLnJvdykgLSBzdHJlYWtIZWlnaHQgLyAyLjA7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgc3RyZWFrV2lkdGgpXHJcbiAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHN0cmVha0hlaWdodClcclxuICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGQuc2hvd0NpcmNsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbW9udGhJbmZvLmNpcmNsZUNvbG9yQnlWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFrQ29sb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkLnNjYWxlZFZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkMy5pbnRlcnBvbGF0ZUxhYihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwid2hpdGVcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVha0NvbG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICkoZC5zY2FsZWRWYWx1ZSAqIDAuOCArIDAuMik7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibm9uZVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBcIm5vbmVcIjtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN0eWxlKFwib3BhY2l0eVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGQuaXNPdXRPZkRhdGFSYW5nZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChtb250aEluZm8uZGltTm90SW5Nb250aCAmJiAhZC5pc0luVGhpc01vbnRoKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAxLjA7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJzdHJlYWtPdXRcIilcclxuICAgICAgICAgICAgLmRhdGEoXHJcbiAgICAgICAgICAgICAgICBkYXlzSW5Nb250aFZpZXcuZmlsdGVyKGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGQuc3RyZWFrT3V0O1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAgICAgICAvLyAuYXR0cihcImlkXCIsIGZ1bmN0aW9uKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgLy8gICAgIHJldHVybiBcIm91dFwiICsgZC5kYXRlLmZvcm1hdChcIllZWVktTU0tRERcIik7XHJcbiAgICAgICAgICAgIC8vIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xyXG4gICAgICAgICAgICAgICAgbGV0IHggPSBzY2FsZShkLmNvbCkgKyBkb3RSYWRpdXM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5yb3cpIC0gc3RyZWFrSGVpZ2h0IC8gMi4wO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIHN0cmVha1dpZHRoKVxyXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBzdHJlYWtIZWlnaHQpXHJcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgICAgIGlmIChkLnNob3dDaXJjbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW1vbnRoSW5mby5jaXJjbGVDb2xvckJ5VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmVha0NvbG9yO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZC5zY2FsZWRWYWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZDMuaW50ZXJwb2xhdGVMYWIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIndoaXRlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYWtDb2xvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICApKGQuc2NhbGVkVmFsdWUgKiAwLjggKyAwLjIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcIm5vbmVcIjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJub25lXCI7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdHlsZShcIm9wYWNpdHlcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBkLmlzT3V0T2ZEYXRhUmFuZ2UgfHxcclxuICAgICAgICAgICAgICAgICAgICAobW9udGhJbmZvLmRpbU5vdEluTW9udGggJiYgIWQuaXNJblRoaXNNb250aClcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwLjI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMS4wO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjaXJjbGVzXHJcbiAgICBsZXQgY2lyY2xlQ29sb3IgPSBcIiM2OWIzYTJcIjtcclxuICAgIGlmIChtb250aEluZm8uY2lyY2xlQ29sb3IpIHtcclxuICAgICAgICBjaXJjbGVDb2xvciA9IG1vbnRoSW5mby5jaXJjbGVDb2xvcjtcclxuICAgIH0gZWxzZSBpZiAobW9udGhJbmZvLmNvbG9yKSB7XHJcbiAgICAgICAgY2lyY2xlQ29sb3IgPSBtb250aEluZm8uY29sb3I7XHJcbiAgICB9XHJcbiAgICBpZiAobW9kZSA9PT0gXCJjaXJjbGVcIiAmJiBtb250aEluZm8uc2hvd0NpcmNsZSkge1xyXG4gICAgICAgIGxldCBkb3RzID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxyXG4gICAgICAgICAgICAuc2VsZWN0QWxsKFwiZG90XCIpXHJcbiAgICAgICAgICAgIC5kYXRhKGRheXNJbk1vbnRoVmlldylcclxuICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxyXG4gICAgICAgICAgICAuYXR0cihcInJcIiwgZG90UmFkaXVzKVxyXG4gICAgICAgICAgICAuYXR0cihcImN4XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5jb2wpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcImN5XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5yb3cpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZC5zaG93Q2lyY2xlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFtb250aEluZm8uY2lyY2xlQ29sb3JCeVZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaXJjbGVDb2xvcjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGQuc2NhbGVkVmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNjYWxlZENvbG9yID0gZDMuaW50ZXJwb2xhdGVMYWIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIndoaXRlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaXJjbGVDb2xvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICApKGQuc2NhbGVkVmFsdWUgKiAwLjggKyAwLjIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhkLnNjYWxlZFZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc2NhbGVkQ29sb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGVkQ29sb3I7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwibm9uZVwiO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBcIm5vbmVcIjtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN0eWxlKFwib3BhY2l0eVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIGQuaXNPdXRPZkRhdGFSYW5nZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIChtb250aEluZm8uZGltTm90SW5Nb250aCAmJiAhZC5pc0luVGhpc01vbnRoKVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMjtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiAxLjA7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gdG9kYXkgcmluZ3NcclxuICAgIGxldCB0b2RheSA9IGhlbHBlci5kYXRlVG9TdHIod2luZG93Lm1vbWVudCgpLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xyXG4gICAgaWYgKG1vZGUgPT09IFwiY2lyY2xlXCIgJiYgbW9udGhJbmZvLnNob3dUb2RheVJpbmcpIHtcclxuICAgICAgICBsZXQgdG9kYXlSaW5ncyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcclxuICAgICAgICAgICAgLnNlbGVjdEFsbChcInRvZGF5UmluZ1wiKVxyXG4gICAgICAgICAgICAuZGF0YShcclxuICAgICAgICAgICAgICAgIGRheXNJbk1vbnRoVmlldy5maWx0ZXIoZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZC5kYXRlID09PSB0b2RheTtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxyXG4gICAgICAgICAgICAuYXR0cihcInJcIiwgZG90UmFkaXVzICogMC45KVxyXG4gICAgICAgICAgICAuYXR0cihcImN4XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5jb2wpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcImN5XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc2NhbGUoZC5yb3cpO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC10b2RheS1jaXJjbGVcIikgLy8gc3Ryb2tlIG5vdCB3b3Jrcz8/XHJcbiAgICAgICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIik7XHJcblxyXG4gICAgICAgIGlmIChtb250aEluZm8udG9kYXlSaW5nQ29sb3IgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgdG9kYXlSaW5ncy5zdHlsZShcInN0cm9rZVwiLCBtb250aEluZm8udG9kYXlSaW5nQ29sb3IpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRvZGF5UmluZ3Muc3R5bGUoXCJzdHJva2VcIiwgXCJ3aGl0ZVwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLy8gc2VsZWN0ZWQgcmluZ3NcclxuICAgIGlmIChtb2RlID09PSBcImNpcmNsZVwiICYmIG1vbnRoSW5mby5zaG93U2VsZWN0ZWRSaW5nKSB7XHJcbiAgICAgICAgbGV0IHNlbGVjdGVkUmluZ3MgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJzZWxlY3RlZFJpbmdcIilcclxuICAgICAgICAgICAgLmRhdGEoZGF5c0luTW9udGhWaWV3KVxyXG4gICAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgICAuYXBwZW5kKFwiY2lyY2xlXCIpXHJcbiAgICAgICAgICAgIC5hdHRyKFwiclwiLCBkb3RSYWRpdXMpXHJcbiAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzY2FsZShkLmNvbCk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzY2FsZShkLnJvdyk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcInRyYWNrZXItc2VsZWN0ZWQtY2lyY2xlLVwiICsgZC5kYXRlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC1zZWxlY3RlZC1jaXJjbGVcIikgLy8gc3Ryb2tlIG5vdCB3b3Jrcz8/XHJcbiAgICAgICAgICAgIC5zdHlsZShcImN1cnNvclwiLCBcImRlZmF1bHRcIilcclxuICAgICAgICAgICAgLnN0eWxlKFwic3Ryb2tlXCIsIFwibm9uZVwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBsYWJlbHNcclxuICAgIGxldCBkYXlMYWJhbHMgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXHJcbiAgICAgICAgLnNlbGVjdEFsbChcImRheUxhYmVsXCIpXHJcbiAgICAgICAgLmRhdGEoZGF5c0luTW9udGhWaWV3KVxyXG4gICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcclxuICAgICAgICAudGV4dChmdW5jdGlvbiAoZDogRGF5SW5mbykge1xyXG4gICAgICAgICAgICByZXR1cm4gZC5kYXlJbk1vbnRoLnRvU3RyaW5nKCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cihcInRyYW5zZm9ybVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xyXG4gICAgICAgICAgICBsZXQgdHJhbnNYID0gc2NhbGUoZC5jb2wpO1xyXG4gICAgICAgICAgICBsZXQgdHJhbnNZID0gc2NhbGUoZC5yb3cpICsgbWF4RGF5VGV4dFNpemUuaGVpZ2h0IC8gNDtcclxuICAgICAgICAgICAgbGV0IHN0clRyYW5zbGF0ZSA9IFwidHJhbnNsYXRlKFwiICsgdHJhbnNYICsgXCIsXCIgKyB0cmFuc1kgKyBcIilcIjtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBzdHJUcmFuc2xhdGU7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3R5bGUoXCJmaWxsLW9wYWNpdHlcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgZC5pc091dE9mRGF0YVJhbmdlIHx8XHJcbiAgICAgICAgICAgICAgICAobW9udGhJbmZvLmRpbU5vdEluTW9udGggJiYgIWQuaXNJblRoaXNNb250aClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMC4yO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiAxLjA7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cihcImRhdGVcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQuZGF0ZTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKFwidmFsdWVcIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgcmV0dXJuIGQudmFsdWU7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cihcInZhbHVlVHlwZVwiLCBmdW5jdGlvbiAoZDogRGF5SW5mbykge1xyXG4gICAgICAgICAgICByZXR1cm4gVmFsdWVUeXBlW2RhdGFzZXQudmFsdWVUeXBlXTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLW1vbnRoLWxhYmVsXCIpXHJcbiAgICAgICAgLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICAgICAgLy8gY2xlYXIgY2lyY2xlc1xyXG4gICAgICAgICAgICBjbGVhclNlbGVjdGlvbihjaGFydEVsZW1lbnRzLCBtb250aEluZm8pO1xyXG4gICAgICAgICAgICAvLyBzaG93IG5ldyBzZWxlY3RlZCBjaXJjbGVcclxuICAgICAgICAgICAgbGV0IGRhdGUgPSBkMy5zZWxlY3QodGhpcykuYXR0cihcImRhdGVcIik7XHJcbiAgICAgICAgICAgIG1vbnRoSW5mby5zZWxlY3RlZERhdGUgPSBkYXRlO1xyXG4gICAgICAgICAgICBpZiAobW9udGhJbmZvLnNob3dTZWxlY3RlZFJpbmcpIHtcclxuICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcclxuICAgICAgICAgICAgICAgICAgICAuc2VsZWN0KFwiI3RyYWNrZXItc2VsZWN0ZWQtY2lyY2xlLVwiICsgZGF0ZSlcclxuICAgICAgICAgICAgICAgICAgICAuc3R5bGUoXCJzdHJva2VcIiwgbW9udGhJbmZvLnNlbGVjdGVkUmluZ0NvbG9yKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBzaG93IHZhbHVlIG9uIG1vbml0b3JcclxuICAgICAgICAgICAgaWYgKG1vbnRoSW5mby5zaG93U2VsZWN0ZWRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHN0clZhbHVlID0gZDMuc2VsZWN0KHRoaXMpLmF0dHIoXCJ2YWx1ZVwiKTtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZVR5cGUgPSBkMy5zZWxlY3QodGhpcykuYXR0cihcInZhbHVlVHlwZVwiKTtcclxuICAgICAgICAgICAgICAgIGxldCB2YWx1ZVRleHQgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlVHlwZSA9PT0gXCJUaW1lXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF5U3RhcnQgPSB3aW5kb3cubW9tZW50KFwiMDA6MDBcIiwgXCJISDptbVwiLCB0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgdGlja1RpbWUgPSBkYXlTdGFydC5hZGQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQoc3RyVmFsdWUpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcInNlY29uZHNcIlxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVUZXh0ID0gdGlja1RpbWUuZm9ybWF0KFwiSEg6bW1cIik7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVGV4dCA9IHN0clZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5tb25pdG9yLnRleHQodmFsdWVUZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwicG9pbnRlclwiKTtcclxuXHJcbiAgICAvLyBhbm5vdGF0aW9uXHJcbiAgICBpZiAobW9kZSA9PT0gXCJhbm5vdGF0aW9uXCIgJiYgc2hvd0Fubm90YXRpb24pIHtcclxuICAgICAgICBsZXQgZGF5QW5ub3RhdGlvbiA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcclxuICAgICAgICAgICAgLnNlbGVjdEFsbChcImRheUFubm90YXRpb25cIilcclxuICAgICAgICAgICAgLmRhdGEoZGF5c0luTW9udGhWaWV3KVxyXG4gICAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgICAuYXBwZW5kKFwidGV4dFwiKVxyXG4gICAgICAgICAgICAudGV4dChmdW5jdGlvbiAoZDogRGF5SW5mbykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGQuYW5ub3RhdGlvbjtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgZnVuY3Rpb24gKGQ6IERheUluZm8pIHtcclxuICAgICAgICAgICAgICAgIGxldCB0cmFuc1ggPSBzY2FsZShkLmNvbCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdHJhbnNZID0gc2NhbGUoZC5yb3cpICsgbWF4RGF5VGV4dFNpemUuaGVpZ2h0IC8gNDtcclxuICAgICAgICAgICAgICAgIGlmIChkLmFubm90YXRpb24pIHtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc1kgKz0gZG90UmFkaXVzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgbGV0IHN0clRyYW5zbGF0ZSA9IFwidHJhbnNsYXRlKFwiICsgdHJhbnNYICsgXCIsXCIgKyB0cmFuc1kgKyBcIilcIjtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RyVHJhbnNsYXRlO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1tb250aC1hbm5vdGF0aW9uXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEV4cGFuZCBhcmVhc1xyXG4gICAgbGV0IHN2Z1dpZHRoID0gcGFyc2VGbG9hdChjaGFydEVsZW1lbnRzLnN2Zy5hdHRyKFwid2lkdGhcIikpO1xyXG4gICAgbGV0IHN2Z0hlaWdodCA9IHBhcnNlRmxvYXQoY2hhcnRFbGVtZW50cy5zdmcuYXR0cihcImhlaWdodFwiKSk7XHJcbiAgICBsZXQgZ3JhcGhBcmVhV2lkdGggPSBwYXJzZUZsb2F0KGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLmF0dHIoXCJ3aWR0aFwiKSk7XHJcbiAgICBsZXQgZ3JhcGhBcmVhSGVpZ2h0ID0gcGFyc2VGbG9hdChjaGFydEVsZW1lbnRzLmdyYXBoQXJlYS5hdHRyKFwiaGVpZ2h0XCIpKTtcclxuICAgIGxldCB0b3RhbEhlaWdodCA9XHJcbiAgICAgICAgNyAqIGNlbGxTaXplICsgcGFyc2VGbG9hdChjaGFydEVsZW1lbnRzLmhlYWRlci5hdHRyKFwiaGVpZ2h0XCIpKTtcclxuICAgIGxldCB0b3RhbFdpZHRoID0gNyAqIGNlbGxTaXplO1xyXG4gICAgaWYgKHRvdGFsSGVpZ2h0ID4gc3ZnSGVpZ2h0KSB7XHJcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5zdmcsIDAsIHRvdGFsSGVpZ2h0IC0gc3ZnSGVpZ2h0KTtcclxuICAgIH1cclxuICAgIGlmICh0b3RhbFdpZHRoID4gc3ZnV2lkdGgpIHtcclxuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgdG90YWxXaWR0aCAtIHN2Z1dpZHRoLCAwKTtcclxuICAgIH1cclxuICAgIGlmICh0b3RhbEhlaWdodCA+IGdyYXBoQXJlYUhlaWdodCkge1xyXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKFxyXG4gICAgICAgICAgICBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYSxcclxuICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgdG90YWxIZWlnaHQgLSBncmFwaEFyZWFIZWlnaHRcclxuICAgICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRvdGFsV2lkdGggPiBncmFwaEFyZWFXaWR0aCkge1xyXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuc3ZnLCB0b3RhbFdpZHRoIC0gZ3JhcGhBcmVhV2lkdGgsIDApO1xyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZWZyZXNoKFxyXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgbW9udGhJbmZvOiBNb250aEluZm8sXHJcbiAgICBjdXJNb250aERhdGU6IE1vbWVudFxyXG4pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwicmVmcmVzaFwiKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8pO1xyXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFyZW5kZXJNb250aCkgcmV0dXJuO1xyXG5cclxuICAgIGNoYXJ0RWxlbWVudHMgPSBjcmVhdGVBcmVhcyhjaGFydEVsZW1lbnRzLCBjYW52YXMsIHJlbmRlckluZm8sIG1vbnRoSW5mbyk7XHJcblxyXG4gICAgLy8gcmVuZGVyXHJcbiAgICByZW5kZXJNb250aEhlYWRlcihcclxuICAgICAgICBjYW52YXMsXHJcbiAgICAgICAgY2hhcnRFbGVtZW50cyxcclxuICAgICAgICByZW5kZXJJbmZvLFxyXG4gICAgICAgIG1vbnRoSW5mbyxcclxuICAgICAgICBjdXJNb250aERhdGVcclxuICAgICk7XHJcblxyXG4gICAgcmVuZGVyTW9udGhEYXlzKGNhbnZhcywgY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbW9udGhJbmZvLCBjdXJNb250aERhdGUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcmVuZGVyTW9udGgoXHJcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIG1vbnRoSW5mbzogTW9udGhJbmZvXHJcbikge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJNb250aFwiKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8pO1xyXG4gICAgLy8gY29uc29sZS5sb2cobW9udGhJbmZvKTtcclxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhcmVuZGVyTW9udGgpIHJldHVybjtcclxuXHJcbiAgICAvLyBkYXRhc2V0XHJcbiAgICBsZXQgZGF0YXNldElkcyA9IG1vbnRoSW5mby5kYXRhc2V0O1xyXG4gICAgbGV0IG51bUF2YWlsYWJsZURhdGFzZXQgPSAwO1xyXG4gICAgZm9yIChsZXQgZGF0YXNldCBvZiByZW5kZXJJbmZvLmRhdGFzZXRzKSB7XHJcbiAgICAgICAgaWYgKCFkYXRhc2V0LmdldFF1ZXJ5KCkudXNlZEFzWERhdGFzZXQpIHtcclxuICAgICAgICAgICAgbnVtQXZhaWxhYmxlRGF0YXNldCsrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChudW1BdmFpbGFibGVEYXRhc2V0ID09PSAwKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiTm8gYXZhaWxhYmxlIGRhdGFzZXQgZm91bmRcIjtcclxuICAgIH1cclxuICAgIHRvTmV4dERhdGFzZXQocmVuZGVySW5mbywgbW9udGhJbmZvKTtcclxuICAgIGlmIChtb250aEluZm8uc2VsZWN0ZWREYXRhc2V0ID09PSBudWxsKSB7XHJcbiAgICAgICAgcmV0dXJuIFwiTm8gYXZhaWxhYmxlIGRhdGFzZXQgZm91bmRcIjtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyA9IHt9O1xyXG4gICAgY2hhcnRFbGVtZW50cyA9IGNyZWF0ZUFyZWFzKGNoYXJ0RWxlbWVudHMsIGNhbnZhcywgcmVuZGVySW5mbywgbW9udGhJbmZvKTtcclxuXHJcbiAgICBsZXQgbW9udGhEYXRlOiBNb21lbnQgPSBudWxsO1xyXG4gICAgaWYgKG1vbnRoSW5mby5pbml0TW9udGgpIHtcclxuICAgICAgICBtb250aERhdGUgPSBoZWxwZXIuZ2V0RGF0ZUJ5RHVyYXRpb25Ub1RvZGF5KFxyXG4gICAgICAgICAgICBtb250aEluZm8uaW5pdE1vbnRoLFxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghbW9udGhEYXRlKSB7XHJcbiAgICAgICAgICAgIGxldCBpbml0TW9udGggPSB3aW5kb3cubW9tZW50KG1vbnRoSW5mby5pbml0TW9udGgsIFwiWVlZWS1NTVwiLCB0cnVlKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coaW5pdE1vbnRoKTtcclxuICAgICAgICAgICAgaWYgKGluaXRNb250aC5pc1ZhbGlkKCkpIHtcclxuICAgICAgICAgICAgICAgIG1vbnRoRGF0ZSA9IGluaXRNb250aDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIkludmFsaWQgaW5pdE1vbnRoXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1vbnRoRGF0ZSA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0ZXMoKS5sYXN0KCk7XHJcbiAgICB9XHJcbiAgICBpZiAoIW1vbnRoRGF0ZSkgcmV0dXJuO1xyXG5cclxuICAgIHJlbmRlck1vbnRoSGVhZGVyKGNhbnZhcywgY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbW9udGhJbmZvLCBtb250aERhdGUpO1xyXG5cclxuICAgIHJlbmRlck1vbnRoRGF5cyhjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIG1vbnRoSW5mbywgbW9udGhEYXRlKTtcclxuXHJcbiAgICBzZXRDaGFydFNjYWxlKGNhbnZhcywgY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbyk7XHJcbn1cclxuIiwiaW1wb3J0IHsgTW9tZW50IH0gZnJvbSBcIm1vbWVudFwiO1xyXG5pbXBvcnQge1xyXG4gICAgRGF0YXNldHMsXHJcbiAgICBEYXRhUG9pbnQsXHJcbiAgICBSZW5kZXJJbmZvLFxyXG4gICAgTW9udGhJbmZvLFxyXG4gICAgSGVhdG1hcEluZm8sXHJcbiAgICBEYXRhc2V0LFxyXG4gICAgU2l6ZSxcclxuICAgIFRyYW5zZm9ybSxcclxuICAgIENoYXJ0RWxlbWVudHMsXHJcbiAgICBHcmFwaFR5cGUsXHJcbiAgICBWYWx1ZVR5cGUsXHJcbn0gZnJvbSBcIi4vZGF0YVwiO1xyXG5pbXBvcnQgKiBhcyBoZWxwZXIgZnJvbSBcIi4vaGVscGVyXCI7XHJcbmltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xyXG5cclxuaW50ZXJmYWNlIERheUluZm8ge1xyXG4gICAgZGF0ZTogc3RyaW5nO1xyXG4gICAgdmFsdWU6IG51bWJlcjtcclxuICAgIHNjYWxlZFZhbHVlOiBudW1iZXI7XHJcbiAgICByb3c6IG51bWJlcjtcclxuICAgIGNvbDogbnVtYmVyO1xyXG59XHJcblxyXG5mdW5jdGlvbiBjcmVhdGVBcmVhcyhcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIGhlYXRtYXBJbmZvOiBIZWF0bWFwSW5mb1xyXG4pOiBDaGFydEVsZW1lbnRzIHtcclxuICAgIC8vIGNsZWFuIGFyZWFzXHJcbiAgICBkMy5zZWxlY3QoY2FudmFzKS5zZWxlY3QoXCIjc3ZnXCIpLnJlbW92ZSgpO1xyXG4gICAgdmFyIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY2hhcnRFbGVtZW50cyk7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgLy8gZDMuc2VsZWN0KGNoYXJ0RWxlbWVudHNbcHJvcHNbaV1dKS5yZW1vdmUoKTtcclxuICAgICAgICBkZWxldGUgY2hhcnRFbGVtZW50c1twcm9wc1tpXV07XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhjaGFydEVsZW1lbnRzKTtcclxuXHJcbiAgICAvLyB3aG9sZSBhcmVhIGZvciBwbG90dGluZywgaW5jbHVkZXMgbWFyZ2luc1xyXG4gICAgbGV0IHN2ZyA9IGQzXHJcbiAgICAgICAgLnNlbGVjdChjYW52YXMpXHJcbiAgICAgICAgLmFwcGVuZChcInN2Z1wiKVxyXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJzdmdcIilcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJ3aWR0aFwiLFxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5sZWZ0ICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnJpZ2h0XHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICBcImhlaWdodFwiLFxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4udG9wICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmJvdHRvbVxyXG4gICAgICAgICk7XHJcbiAgICBjaGFydEVsZW1lbnRzW1wic3ZnXCJdID0gc3ZnO1xyXG5cclxuICAgIC8vIGdyYXBoQXJlYSwgaW5jbHVkZXMgY2hhcnRBcmVhLCB0aXRsZSwgbGVnZW5kXHJcbiAgICBsZXQgZ3JhcGhBcmVhID0gc3ZnXHJcbiAgICAgICAgLmFwcGVuZChcImdcIilcclxuICAgICAgICAuYXR0cihcImlkXCIsIFwiZ3JhcGhBcmVhXCIpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXHJcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmxlZnQgK1xyXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4udG9wICtcclxuICAgICAgICAgICAgICAgIFwiKVwiXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggKyByZW5kZXJJbmZvLm1hcmdpbi5yaWdodClcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJoZWlnaHRcIixcclxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICsgcmVuZGVySW5mby5tYXJnaW4uYm90dG9tXHJcbiAgICAgICAgKTtcclxuICAgIGNoYXJ0RWxlbWVudHNbXCJncmFwaEFyZWFcIl0gPSBncmFwaEFyZWE7XHJcblxyXG4gICAgLy8gZGF0YUFyZWEsIHVuZGVyIGdyYXBoQXJlYSwgaW5jbHVkZXMgcG9pbnRzLCBsaW5lcywgeEF4aXMsIHlBeGlzXHJcbiAgICBsZXQgZGF0YUFyZWEgPSBncmFwaEFyZWFcclxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJkYXRhQXJlYVwiKVxyXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGgpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0KTtcclxuICAgIGNoYXJ0RWxlbWVudHNbXCJkYXRhQXJlYVwiXSA9IGRhdGFBcmVhO1xyXG5cclxuICAgIHJldHVybiBjaGFydEVsZW1lbnRzO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW5kZXJIZWF0bWFwSGVhZGVyKFxyXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgaGVhdG1hcEluZm86IEhlYXRtYXBJbmZvLFxyXG4gICAgZGF0YXNldDogRGF0YXNldFxyXG4pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyTW9udGhIZWFkZXJcIilcclxuXHJcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWhlYXRtYXBJbmZvKSByZXR1cm47XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiByZW5kZXJIZWF0bWFwRGF5cyhcclxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXHJcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIGhlYXRtYXBJbmZvOiBIZWF0bWFwSW5mbyxcclxuICAgIGRhdGFzZXQ6IERhdGFzZXQsXHJcbikge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJIZWF0bWFwRGF5c1wiKTtcclxuXHJcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWhlYXRtYXBJbmZvKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGNlbGxTaXplID0gMjA7XHJcbiAgICBsZXQgZG90UmFkaXVzID0gY2VsbFNpemUgLyAyLjAgKiAwLjY7XHJcblxyXG4gICAgLy8gR2V0IG1pbiBhbmQgbWF4LCBudWxsIHZhbHVlcyB3aWxsIGJlIHRyZWF0ZWQgYXMgemVybyBoZXJlXHJcbiAgICBsZXQgeU1pbiA9IGQzLm1pbihkYXRhc2V0LmdldFZhbHVlcygpKTtcclxuICAgIGlmIChoZWF0bWFwSW5mby55TWluICE9PSBudWxsKSB7XHJcbiAgICAgICAgeU1pbiA9IGhlYXRtYXBJbmZvLnlNaW47XHJcbiAgICB9XHJcbiAgICBsZXQgeU1heCA9IGQzLm1heChkYXRhc2V0LmdldFZhbHVlcygpKTtcclxuICAgIGlmIChoZWF0bWFwSW5mby55TWF4ICE9PSBudWxsKSB7XHJcbiAgICAgICAgeU1heCA9IGhlYXRtYXBJbmZvLnlNYXg7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhgeU1pbjoke3lNaW59LCB5TWF4OiR7eU1heH1gKTtcclxuXHJcbiAgICAvLyBQcmVwYXJlIGRhdGEgZm9yIGdyYXBoXHJcbiAgICBsZXQgZGF5c0luSGVhdG1hcFZpZXc6IEFycmF5PERheUluZm8+ID0gW107XHJcbiAgICBjb25zdCBkYXRhU3RhcnREYXRlID0gZGF0YXNldC5nZXRTdGFydERhdGUoKS5jbG9uZSgpO1xyXG4gICAgbGV0IHN0YXJ0RGF0ZSA9IGRhdGFTdGFydERhdGVcclxuICAgICAgICAuY2xvbmUoKVxyXG4gICAgICAgIC5zdWJ0cmFjdChkYXRhU3RhcnREYXRlLmRheSgpLCBcImRheXNcIik7XHJcbiAgICBpZiAoaGVhdG1hcEluZm8uc3RhcnRXZWVrT24udG9Mb3dlckNhc2UoKSA9PT0gXCJtb25cIikge1xyXG4gICAgICAgIHN0YXJ0RGF0ZSA9IHN0YXJ0RGF0ZS5hZGQoMSwgXCJkYXlzXCIpO1xyXG4gICAgfVxyXG4gICAgY29uc3QgZGF0YUVuZERhdGUgPSBkYXRhc2V0LmdldEVuZERhdGUoKS5jbG9uZSgpO1xyXG4gICAgbGV0IGVuZERhdGUgPSBkYXRhRW5kRGF0ZS5jbG9uZSgpLmFkZCg3IC0gZGF0YUVuZERhdGUuZGF5KCkgLSAxLCBcImRheXNcIik7XHJcbiAgICBpZiAoaGVhdG1hcEluZm8uc3RhcnRXZWVrT24udG9Mb3dlckNhc2UoKSA9PT0gXCJtb25cIikge1xyXG4gICAgICAgIGVuZERhdGUgPSBlbmREYXRlLmFkZCgxLCBcImRheXNcIik7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhzdGFydERhdGUuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKSk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhlbmREYXRlLmZvcm1hdChcIllZWVktTU0tRERcIikpO1xyXG5cclxuICAgIGxldCBpbmRDb2wgPSAwO1xyXG4gICAgbGV0IGluZFJvdyA9IDA7XHJcbiAgICBsZXQgaW5kID0gMDtcclxuICAgIGZvciAoXHJcbiAgICAgICAgbGV0IGN1ckRhdGUgPSBzdGFydERhdGUuY2xvbmUoKTtcclxuICAgICAgICBjdXJEYXRlIDw9IGVuZERhdGU7XHJcbiAgICAgICAgY3VyRGF0ZS5hZGQoMSwgXCJkYXlzXCIpXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoaGVhdG1hcEluZm8uc3RhcnRXZWVrT24udG9Mb3dlckNhc2UoKSA9PT0gXCJtb25cIikge1xyXG4gICAgICAgICAgICBpbmRDb2wgPSBjdXJEYXRlLmRheSgpIC0gMTtcclxuICAgICAgICAgICAgaWYgKGluZENvbCA8IDApIHtcclxuICAgICAgICAgICAgICAgIGluZENvbCA9IDY7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaW5kUm93ID0gTWF0aC5mbG9vcihpbmQgLyA3KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpbmRDb2wgPSBjdXJEYXRlLmRheSgpOyAvLyAwfjZcclxuICAgICAgICAgICAgaW5kUm93ID0gTWF0aC5mbG9vcihpbmQgLyA3KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGN1clZhbHVlIGFuZCBzY2FsZWRWYWx1ZVxyXG4gICAgICAgIGxldCBjdXJWYWx1ZSA9IGRhdGFzZXQuZ2V0VmFsdWUoY3VyRGF0ZSk7XHJcbiAgICAgICAgbGV0IHNjYWxlZFZhbHVlID0gMDtcclxuICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKHlNYXgpICYmIE51bWJlci5pc051bWJlcih5TWluKSAmJiB5TWF4IC0geU1pbiA+IDApIHtcclxuICAgICAgICAgICAgc2NhbGVkVmFsdWUgPSAoY3VyVmFsdWUgLSB5TWluKSAvICh5TWF4IC0geU1pbik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBkYXlzSW5IZWF0bWFwVmlldy5wdXNoKHtcclxuICAgICAgICAgICAgZGF0ZTogaGVscGVyLmRhdGVUb1N0cihjdXJEYXRlLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpLFxyXG4gICAgICAgICAgICB2YWx1ZTogY3VyVmFsdWUsXHJcbiAgICAgICAgICAgIHNjYWxlZFZhbHVlOiBzY2FsZWRWYWx1ZSxcclxuICAgICAgICAgICAgcm93OiBpbmRSb3csXHJcbiAgICAgICAgICAgIGNvbDogaW5kQ29sLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBpbmQrKztcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKGRheXNJbkhlYXRtYXBWaWV3KTtcclxuXHJcbiAgICAvLyBzY2FsZVxyXG4gICAgbGV0IHRvdGFsRGF5QmxvY2tXaWR0aCA9IChpbmRDb2wgKyAxKSAqIGNlbGxTaXplO1xyXG4gICAgbGV0IHRvdGFsQmxvY2tIZWlnaHQgPSAoaW5kUm93ICsgMSkgKiBjZWxsU2l6ZTtcclxuICAgIGxldCBzY2FsZSA9IGQzXHJcbiAgICAgICAgLnNjYWxlTGluZWFyKClcclxuICAgICAgICAuZG9tYWluKFstMC41LCA2LjVdKVxyXG4gICAgICAgIC5yYW5nZShbMCwgdG90YWxEYXlCbG9ja1dpZHRoXSk7XHJcblxyXG4gICAgLy8gY2lyY2xlc1xyXG4gICAgbGV0IGhlYXRtYXBDb2xvciA9IFwiIzY5YjNhMlwiO1xyXG4gICAgaWYgKGhlYXRtYXBJbmZvLmNvbG9yKSB7XHJcbiAgICAgICAgaGVhdG1hcENvbG9yID0gaGVhdG1hcEluZm8uY29sb3I7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZGF5cywgc2hvd24gYXMgZG90cyBvciBzcXVhcmVzXHJcbiAgICBsZXQgZGF5cyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcclxuICAgICAgICAuc2VsZWN0QWxsKFwiZG90XCIpXHJcbiAgICAgICAgLmRhdGEoZGF5c0luSGVhdG1hcFZpZXcpXHJcbiAgICAgICAgLmVudGVyKClcclxuICAgICAgICAuYXBwZW5kKFwiY2lyY2xlXCIpXHJcbiAgICAgICAgLmF0dHIoXCJyXCIsIGRvdFJhZGl1cylcclxuICAgICAgICAuYXR0cihcImN4XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzY2FsZShkLmNvbCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cihcImN5XCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBzY2FsZShkLnJvdyk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChkOiBEYXlJbmZvKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkMy5pbnRlcnBvbGF0ZUxhYihcclxuICAgICAgICAgICAgICAgICAgICBcIndoaXRlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVhdG1hcENvbG9yXHJcbiAgICAgICAgICAgICAgICApKGQuc2NhbGVkVmFsdWUpO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLnN0eWxlKFwiY3Vyc29yXCIsIFwiZGVmYXVsdFwiKTtcclxuXHJcbiAgICAvLyBFeHBhbmQgYXJlYXNcclxuICAgIGxldCBzdmdXaWR0aCA9IHBhcnNlRmxvYXQoY2hhcnRFbGVtZW50cy5zdmcuYXR0cihcIndpZHRoXCIpKTtcclxuICAgIGxldCBzdmdIZWlnaHQgPSBwYXJzZUZsb2F0KGNoYXJ0RWxlbWVudHMuc3ZnLmF0dHIoXCJoZWlnaHRcIikpO1xyXG4gICAgbGV0IGdyYXBoQXJlYVdpZHRoID0gcGFyc2VGbG9hdChjaGFydEVsZW1lbnRzLmdyYXBoQXJlYS5hdHRyKFwid2lkdGhcIikpO1xyXG4gICAgbGV0IGdyYXBoQXJlYUhlaWdodCA9IHBhcnNlRmxvYXQoY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEuYXR0cihcImhlaWdodFwiKSk7XHJcbiAgICBsZXQgdG90YWxIZWlnaHQgPVxyXG4gICAgICAgIChpbmRSb3cgKyAyKSAqIGNlbGxTaXplOy8vICsgcGFyc2VGbG9hdChjaGFydEVsZW1lbnRzLmhlYWRlci5hdHRyKFwiaGVpZ2h0XCIpKTtcclxuICAgIGxldCB0b3RhbFdpZHRoID0gKGluZENvbCArIDEpICogY2VsbFNpemU7XHJcbiAgICBpZiAodG90YWxIZWlnaHQgPiBzdmdIZWlnaHQpIHtcclxuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgMCwgdG90YWxIZWlnaHQgLSBzdmdIZWlnaHQpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRvdGFsV2lkdGggPiBzdmdXaWR0aCkge1xyXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuc3ZnLCB0b3RhbFdpZHRoIC0gc3ZnV2lkdGgsIDApO1xyXG4gICAgfVxyXG4gICAgaWYgKHRvdGFsSGVpZ2h0ID4gZ3JhcGhBcmVhSGVpZ2h0KSB7XHJcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXHJcbiAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLFxyXG4gICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICB0b3RhbEhlaWdodCAtIGdyYXBoQXJlYUhlaWdodFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAodG90YWxXaWR0aCA+IGdyYXBoQXJlYVdpZHRoKSB7XHJcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5zdmcsIHRvdGFsV2lkdGggLSBncmFwaEFyZWFXaWR0aCwgMCk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJIZWF0bWFwKFxyXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBoZWF0bWFwSW5mbzogSGVhdG1hcEluZm9cclxuKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlckhlYXRtYXBcIik7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcclxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhcmVuZGVySGVhdG1hcCkgcmV0dXJuO1xyXG5cclxuICAgIHJldHVybiBcIlVuZGVyIGNvbnN0cnVjdGlvblwiO1xyXG5cclxuICAgIGxldCBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzID0ge307XHJcbiAgICBjaGFydEVsZW1lbnRzID0gY3JlYXRlQXJlYXMoY2hhcnRFbGVtZW50cywgY2FudmFzLCByZW5kZXJJbmZvLCBoZWF0bWFwSW5mbyk7XHJcblxyXG4gICAgbGV0IHRvZGF5ID0gd2luZG93Lm1vbWVudCgpO1xyXG4gICAgbGV0IGxhc3REYXRhTW9udGhEYXRlID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRlcygpLmxhc3QoKTtcclxuXHJcbiAgICBsZXQgZGF0YXNldElkID0gcGFyc2VGbG9hdChoZWF0bWFwSW5mby5kYXRhc2V0KTtcclxuICAgIGxldCBkYXRhc2V0ID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpO1xyXG5cclxuICAgIHJlbmRlckhlYXRtYXBIZWFkZXIoXHJcbiAgICAgICAgY2FudmFzLFxyXG4gICAgICAgIGNoYXJ0RWxlbWVudHMsXHJcbiAgICAgICAgcmVuZGVySW5mbyxcclxuICAgICAgICBoZWF0bWFwSW5mbyxcclxuICAgICAgICBkYXRhc2V0XHJcbiAgICApO1xyXG5cclxuICAgIHJlbmRlckhlYXRtYXBEYXlzKFxyXG4gICAgICAgIGNhbnZhcyxcclxuICAgICAgICBjaGFydEVsZW1lbnRzLFxyXG4gICAgICAgIHJlbmRlckluZm8sXHJcbiAgICAgICAgaGVhdG1hcEluZm8sXHJcbiAgICAgICAgZGF0YXNldFxyXG4gICAgKTtcclxufVxyXG4iLCJpbXBvcnQge1xyXG4gICAgRGF0YXNldHMsXHJcbiAgICBEYXRhUG9pbnQsXHJcbiAgICBSZW5kZXJJbmZvLFxyXG4gICAgQnVsbGV0SW5mbyxcclxuICAgIERhdGFzZXQsXHJcbiAgICBTaXplLFxyXG4gICAgVHJhbnNmb3JtLFxyXG4gICAgQ2hhcnRFbGVtZW50cyxcclxuICAgIEdyYXBoVHlwZSxcclxuICAgIFZhbHVlVHlwZSxcclxufSBmcm9tIFwiLi9kYXRhXCI7XHJcbmltcG9ydCAqIGFzIGhlbHBlciBmcm9tIFwiLi9oZWxwZXJcIjtcclxuaW1wb3J0ICogYXMgZDMgZnJvbSBcImQzXCI7XHJcbmltcG9ydCAqIGFzIGV4cHIgZnJvbSBcIi4vZXhwclwiO1xyXG5cclxuZnVuY3Rpb24gY3JlYXRlQXJlYXMoXHJcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIGJ1bGxldEluZm86IEJ1bGxldEluZm9cclxuKTogQ2hhcnRFbGVtZW50cyB7XHJcbiAgICBsZXQgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyA9IHt9O1xyXG4gICAgLy8gd2hvbGUgYXJlYSBmb3IgcGxvdHRpbmcsIGluY2x1ZGVzIG1hcmdpbnNcclxuXHJcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWJ1bGxldEluZm8pIHJldHVybjtcclxuXHJcbiAgICBsZXQgc3ZnID0gZDNcclxuICAgICAgICAuc2VsZWN0KGNhbnZhcylcclxuICAgICAgICAuYXBwZW5kKFwic3ZnXCIpXHJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcInN2Z1wiKVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICBcIndpZHRoXCIsXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmxlZnQgK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ucmlnaHRcclxuICAgICAgICApXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgIFwiaGVpZ2h0XCIsXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi50b3AgK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4uYm90dG9tXHJcbiAgICAgICAgKTtcclxuICAgIGNoYXJ0RWxlbWVudHNbXCJzdmdcIl0gPSBzdmc7XHJcblxyXG4gICAgLy8gZ3JhcGhBcmVhLCBpbmNsdWRlcyBjaGFydEFyZWEsIHRpdGxlLCBsZWdlbmRcclxuICAgIGxldCBncmFwaEFyZWEgPSBzdmdcclxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJncmFwaEFyZWFcIilcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcclxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4ubGVmdCArXHJcbiAgICAgICAgICAgICAgICBcIixcIiArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi50b3AgK1xyXG4gICAgICAgICAgICAgICAgXCIpXCJcclxuICAgICAgICApXHJcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArIHJlbmRlckluZm8ubWFyZ2luLnJpZ2h0KVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICBcImhlaWdodFwiLFxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgKyByZW5kZXJJbmZvLm1hcmdpbi5ib3R0b21cclxuICAgICAgICApO1xyXG4gICAgY2hhcnRFbGVtZW50c1tcImdyYXBoQXJlYVwiXSA9IGdyYXBoQXJlYTtcclxuXHJcbiAgICAvLyBkYXRhQXJlYSwgdW5kZXIgZ3JhcGhBcmVhLCBpbmNsdWRlcyBwb2ludHMsIGxpbmVzLCB4QXhpcywgeUF4aXNcclxuICAgIGxldCBkYXRhQXJlYSA9IGdyYXBoQXJlYVxyXG4gICAgICAgIC5hcHBlbmQoXCJnXCIpXHJcbiAgICAgICAgLmF0dHIoXCJpZFwiLCBcImRhdGFBcmVhXCIpXHJcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aClcclxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQpO1xyXG4gICAgY2hhcnRFbGVtZW50c1tcImRhdGFBcmVhXCJdID0gZGF0YUFyZWE7XHJcblxyXG4gICAgcmV0dXJuIGNoYXJ0RWxlbWVudHM7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldENoYXJ0U2NhbGUoXHJcbiAgICBfY2FudmFzOiBIVE1MRWxlbWVudCxcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXHJcbikge1xyXG4gICAgbGV0IGNhbnZhcyA9IGQzLnNlbGVjdChfY2FudmFzKTtcclxuICAgIGxldCBzdmcgPSBjaGFydEVsZW1lbnRzLnN2ZztcclxuICAgIGxldCBzdmdXaWR0aCA9IHBhcnNlRmxvYXQoc3ZnLmF0dHIoXCJ3aWR0aFwiKSk7XHJcbiAgICBsZXQgc3ZnSGVpZ2h0ID0gcGFyc2VGbG9hdChzdmcuYXR0cihcImhlaWdodFwiKSk7XHJcbiAgICBzdmcuYXR0cihcIndpZHRoXCIsIG51bGwpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbnVsbClcclxuICAgICAgICAuYXR0cihcInZpZXdCb3hcIiwgYDAgMCAke3N2Z1dpZHRofSAke3N2Z0hlaWdodH1gKVxyXG4gICAgICAgIC5hdHRyKFwicHJlc2VydmVBc3BlY3RSYXRpb1wiLCBcInhNaWRZTWlkIG1lZXRcIik7XHJcblxyXG4gICAgaWYgKHJlbmRlckluZm8uZml0UGFuZWxXaWR0aCkge1xyXG4gICAgICAgIGNhbnZhcy5zdHlsZShcIndpZHRoXCIsIFwiMTAwJVwiKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2FudmFzLnN0eWxlKFxyXG4gICAgICAgICAgICBcIndpZHRoXCIsXHJcbiAgICAgICAgICAgIChzdmdXaWR0aCAqIHJlbmRlckluZm8uZml4ZWRTY2FsZSkudG9TdHJpbmcoKSArIFwicHhcIlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY2FudmFzLnN0eWxlKFxyXG4gICAgICAgICAgICBcImhlaWdodFwiLFxyXG4gICAgICAgICAgICAoc3ZnSGVpZ2h0ICogcmVuZGVySW5mby5maXhlZFNjYWxlKS50b1N0cmluZygpICsgXCJweFwiXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVuZGVyVGl0bGUoXHJcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIGJ1bGxldEluZm86IEJ1bGxldEluZm9cclxuKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlclRpdGxlXCIpO1xyXG4gICAgLy8gdW5kZXIgZ3JhcGhBcmVhXHJcblxyXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFidWxsZXRJbmZvKSByZXR1cm47XHJcblxyXG4gICAgY29uc3Qgc3BhY2luZyA9IDY7IC8vIHNwYWNpbmcgYmV0d2VlbiB0aXRsZSBhbmQgZGF0YUFyZWFcclxuXHJcbiAgICBpZiAoYnVsbGV0SW5mby50aXRsZSkge1xyXG4gICAgICAgIGxldCB0aXRsZVNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKFxyXG4gICAgICAgICAgICBidWxsZXRJbmZvLnRpdGxlLFxyXG4gICAgICAgICAgICBcInRyYWNrZXItdGl0bGUtc21hbGxcIlxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xyXG4gICAgICAgICAgICBsZXQgdGl0bGUgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYVxyXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcInRleHRcIilcclxuICAgICAgICAgICAgICAgIC50ZXh0KGJ1bGxldEluZm8udGl0bGUpIC8vIHBpdm90IGF0IGNlbnRlclxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCBcInRpdGxlXCIpXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcInhcIiwgdGl0bGVTaXplLndpZHRoIC8gMi4wKVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCAvIDIuMClcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRpdGxlU2l6ZS5oZWlnaHQpIC8vIGZvciBsYXRlciB1c2VcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRpdGxlLXNtYWxsXCIpO1xyXG4gICAgICAgICAgICBjaGFydEVsZW1lbnRzW1widGl0bGVcIl0gPSB0aXRsZTtcclxuXHJcbiAgICAgICAgICAgIC8vIEV4cGFuZCBwYXJlbnQgYXJlYXNcclxuICAgICAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoY2hhcnRFbGVtZW50cy5zdmcsIHRpdGxlU2l6ZS53aWR0aCArIHNwYWNpbmcsIDApO1xyXG4gICAgICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShcclxuICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLFxyXG4gICAgICAgICAgICAgICAgdGl0bGVTaXplLndpZHRoICsgc3BhY2luZyxcclxuICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIE1vdmUgc2libGluZyBhcmVhc1xyXG4gICAgICAgICAgICBoZWxwZXIubW92ZUFyZWEoXHJcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLmRhdGFBcmVhLFxyXG4gICAgICAgICAgICAgICAgdGl0bGVTaXplLndpZHRoICsgc3BhY2luZyxcclxuICAgICAgICAgICAgICAgIDBcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGJ1bGxldEluZm8ub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xyXG4gICAgICAgICAgICAvLyBpZiBsYWJlbCB3aWR0aCA+IGRhdGFBcmVhIHdpZHRoXHJcbiAgICAgICAgICAgIGxldCB4TWlkZGxlID0gcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggLyAyLjA7XHJcbiAgICAgICAgICAgIGlmICh0aXRsZVNpemUud2lkdGggPiByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCkge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJleHBhbmQgYXJlYSBmb3IgdmVydGljYWwgdGl0bGVcIik7XHJcbiAgICAgICAgICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShcclxuICAgICAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLnN2ZyxcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZVNpemUud2lkdGggLSByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCxcclxuICAgICAgICAgICAgICAgICAgICAwXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsXHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGVTaXplLndpZHRoIC0gcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgMFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBoZWxwZXIubW92ZUFyZWEoXHJcbiAgICAgICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5kYXRhQXJlYSxcclxuICAgICAgICAgICAgICAgICAgICB0aXRsZVNpemUud2lkdGggLyAyLjAgLSByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAvIDIuMCxcclxuICAgICAgICAgICAgICAgICAgICAwXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgeE1pZGRsZSA9IHRpdGxlU2l6ZS53aWR0aCAvIDIuMDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGF4aXNXaWR0aCA9IHBhcnNlRmxvYXQoY2hhcnRFbGVtZW50cy5heGlzLmF0dHIoXCJ3aWR0aFwiKSk7XHJcblxyXG4gICAgICAgICAgICBsZXQgdGl0bGUgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYVxyXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcInRleHRcIilcclxuICAgICAgICAgICAgICAgIC50ZXh0KGJ1bGxldEluZm8udGl0bGUpIC8vIHBpdm90IGF0IGNlbnRlclxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCBcInRpdGxlXCIpXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcInhcIiwgeE1pZGRsZSArIGF4aXNXaWR0aClcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwieVwiLCB0aXRsZVNpemUuaGVpZ2h0IC8gMi4wKVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdGl0bGVTaXplLmhlaWdodCkgLy8gZm9yIGxhdGVyIHVzZVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItdGl0bGUtc21hbGxcIik7XHJcbiAgICAgICAgICAgIGNoYXJ0RWxlbWVudHNbXCJ0aXRsZVwiXSA9IHRpdGxlO1xyXG5cclxuICAgICAgICAgICAgLy8gRXhwYW5kIHBhcmVudCBhcmVhc1xyXG4gICAgICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgMCwgdGl0bGVTaXplLmhlaWdodCArIHNwYWNpbmcpO1xyXG4gICAgICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShcclxuICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLFxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICAgICAgICAgIHRpdGxlU2l6ZS5oZWlnaHQgKyBzcGFjaW5nXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAvLyBNb3ZlIHNpYmxpbmcgYXJlYXNcclxuICAgICAgICAgICAgaGVscGVyLm1vdmVBcmVhKFxyXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5kYXRhQXJlYSxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICB0aXRsZVNpemUuaGVpZ2h0ICsgc3BhY2luZ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoYnVsbGV0SW5mby52YWx1ZVVuaXQpIHtcclxuICAgICAgICBsZXQgdW5pdFNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKFxyXG4gICAgICAgICAgICBidWxsZXRJbmZvLnZhbHVlVW5pdCxcclxuICAgICAgICAgICAgXCJ0cmFja2VyLXRpY2stbGFiZWxcIlxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xyXG4gICAgICAgICAgICBsZXQgdW5pdCA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcclxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgICAgICAgICAudGV4dChidWxsZXRJbmZvLnZhbHVlVW5pdClcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaWRcIiwgXCJ1bml0XCIpXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcInhcIiwgLTEgKiAodW5pdFNpemUud2lkdGggKyBzcGFjaW5nKSlcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwieVwiLCByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgKyBzcGFjaW5nKVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgdW5pdFNpemUuaGVpZ2h0KSAvLyBmb3IgbGF0ZXIgdXNlXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10aWNrLWxhYmVsXCIpOyAvLyBwaXZvdCBhdCBjb3JkZXJcclxuICAgICAgICAgICAgY2hhcnRFbGVtZW50c1tcInVuaXRcIl0gPSB1bml0O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XHJcbiAgICAgICAgICAgIGxldCB1bml0ID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxyXG4gICAgICAgICAgICAgICAgLmFwcGVuZChcInRleHRcIilcclxuICAgICAgICAgICAgICAgIC50ZXh0KGJ1bGxldEluZm8udmFsdWVVbml0KVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCBcInVuaXRcIilcclxuICAgICAgICAgICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICAgICAgICAgIFwieFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMiAtIHVuaXRTaXplLndpZHRoIC8gMlxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIC0odW5pdFNpemUuaGVpZ2h0IC8gMi4wICsgc3BhY2luZykpXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCB1bml0U2l6ZS5oZWlnaHQpIC8vIGZvciBsYXRlciB1c2VcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRpY2stbGFiZWxcIik7IC8vIHBpdm90IGF0IGNvcmRlclxyXG4gICAgICAgICAgICBjaGFydEVsZW1lbnRzW1widW5pdFwiXSA9IHVuaXQ7XHJcblxyXG4gICAgICAgICAgICAvLyBFeHBhbmQgcGFyZW50IGFyZWFzXHJcbiAgICAgICAgICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuc3ZnLCAwLCB1bml0U2l6ZS5oZWlnaHQgKyBzcGFjaW5nKTtcclxuICAgICAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXHJcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYSxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICB1bml0U2l6ZS5oZWlnaHQgKyBzcGFjaW5nXHJcbiAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAvLyBNb3ZlIGRhdGFBcmVhIGRvd25cclxuICAgICAgICAgICAgaGVscGVyLm1vdmVBcmVhKFxyXG4gICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5kYXRhQXJlYSxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICB1bml0U2l6ZS5oZWlnaHQgKyBzcGFjaW5nXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG4vLyBSZW5kZXIgdGlja3MsIHRpY2sgbGFiZWxzXHJcbmZ1bmN0aW9uIHJlbmRlckF4aXMoXHJcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIGJ1bGxldEluZm86IEJ1bGxldEluZm8sXHJcbiAgICBkYXRhc2V0OiBEYXRhc2V0XHJcbikge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJBeGlzXCIpO1xyXG4gICAgLy8gY29uc29sZS5sb2coY2hhcnRFbGVtZW50cyk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0KTtcclxuXHJcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWJ1bGxldEluZm8pIHJldHVybjtcclxuXHJcbiAgICBsZXQgcmFuZ2UgPSBidWxsZXRJbmZvLnJhbmdlO1xyXG4gICAgbGV0IGxhc3RSYW5nZSA9IHJhbmdlW3JhbmdlLmxlbmd0aCAtIDFdO1xyXG4gICAgbGV0IGRvbWFpbiA9IFswLCBsYXN0UmFuZ2VdO1xyXG5cclxuICAgIGxldCB0aWNrTGVuZ3RoID0gNjtcclxuICAgIGxldCB2YWx1ZVVuaXQgPSBidWxsZXRJbmZvLnZhbHVlVW5pdDtcclxuICAgIGxldCB0aWNrRm9ybWF0Rm46IGFueSA9IGZ1bmN0aW9uICh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHZhbHVlVW5pdCAmJiB2YWx1ZVVuaXQuZW5kc1dpdGgoXCIlXCIpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBkMy50aWNrRm9ybWF0KDAsIGxhc3RSYW5nZSwgNykodmFsdWUpICsgXCIgJVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZDMudGlja0Zvcm1hdCgwLCBsYXN0UmFuZ2UsIDcpKHZhbHVlKTtcclxuICAgIH07XHJcbiAgICBsZXQgbWF4VGlja0xhYmVsID0gdGlja0Zvcm1hdEZuKGxhc3RSYW5nZSk7XHJcbiAgICBsZXQgbWF4VGlja0xhYmVsU2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXHJcbiAgICAgICAgbWF4VGlja0xhYmVsLFxyXG4gICAgICAgIFwidHJhY2tlci10aWNrLWxhYmVsXCJcclxuICAgICk7XHJcblxyXG4gICAgaWYgKGJ1bGxldEluZm8ub3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XHJcbiAgICAgICAgbGV0IHNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKTtcclxuICAgICAgICBzY2FsZS5kb21haW4oZG9tYWluKS5yYW5nZShbMCwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGhdKTtcclxuICAgICAgICBjaGFydEVsZW1lbnRzW1wic2NhbGVcIl0gPSBzY2FsZTtcclxuXHJcbiAgICAgICAgbGV0IGF4aXNHZW4gPSBkMy5heGlzQm90dG9tKHNjYWxlKTtcclxuICAgICAgICBheGlzR2VuLnRpY2tGb3JtYXQodGlja0Zvcm1hdEZuKTtcclxuICAgICAgICBsZXQgYXhpcyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcclxuICAgICAgICAgICAgLmFwcGVuZChcImdcIilcclxuICAgICAgICAgICAgLmF0dHIoXCJpZFwiLCBcImF4aXNcIilcclxuICAgICAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxyXG4gICAgICAgICAgICAgICAgXCJ0cmFuc2xhdGUoMCxcIiArIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArIFwiKVwiXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLmNhbGwoYXhpc0dlbilcclxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItYXhpc1wiKTtcclxuICAgICAgICBjaGFydEVsZW1lbnRzW1wiYXhpc1wiXSA9IGF4aXM7XHJcblxyXG4gICAgICAgIGxldCBheGlzTGluZSA9IGF4aXMuc2VsZWN0QWxsKFwicGF0aFwiKS5zdHlsZShcInN0cm9rZVwiLCBcIm5vbmVcIik7XHJcblxyXG4gICAgICAgIGxldCBheGlzVGlja3MgPSBheGlzLnNlbGVjdEFsbChcImxpbmVcIik7XHJcblxyXG4gICAgICAgIGxldCBheGlzVGlja0xhYmVscyA9IGF4aXNcclxuICAgICAgICAgICAgLnNlbGVjdEFsbChcInRleHRcIilcclxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItdGljay1sYWJlbFwiKTtcclxuXHJcbiAgICAgICAgYXhpcy5hdHRyKFxyXG4gICAgICAgICAgICBcIndpZHRoXCIsXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICsgbWF4VGlja0xhYmVsU2l6ZS53aWR0aFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgYXhpcy5hdHRyKFwiaGVpZ2h0XCIsIHRpY2tMZW5ndGggKyBtYXhUaWNrTGFiZWxTaXplLmhlaWdodCk7XHJcblxyXG4gICAgICAgIC8vIEV4cGFuZCBhcmVhc1xyXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKFxyXG4gICAgICAgICAgICBjaGFydEVsZW1lbnRzLnN2ZyxcclxuICAgICAgICAgICAgK21heFRpY2tMYWJlbFNpemUud2lkdGgsXHJcbiAgICAgICAgICAgIHRpY2tMZW5ndGggKyBtYXhUaWNrTGFiZWxTaXplLmhlaWdodFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoXHJcbiAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLFxyXG4gICAgICAgICAgICArbWF4VGlja0xhYmVsU2l6ZS53aWR0aCxcclxuICAgICAgICAgICAgdGlja0xlbmd0aCArIG1heFRpY2tMYWJlbFNpemUuaGVpZ2h0XHJcbiAgICAgICAgKTtcclxuICAgIH0gZWxzZSBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XHJcbiAgICAgICAgbGV0IHNjYWxlID0gZDMuc2NhbGVMaW5lYXIoKTtcclxuICAgICAgICBzY2FsZS5kb21haW4oZG9tYWluKS5yYW5nZShbcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0LCAwXSk7XHJcbiAgICAgICAgY2hhcnRFbGVtZW50c1tcInNjYWxlXCJdID0gc2NhbGU7XHJcblxyXG4gICAgICAgIGxldCBheGlzR2VuID0gZDMuYXhpc0xlZnQoc2NhbGUpO1xyXG4gICAgICAgIGF4aXNHZW4udGlja0Zvcm1hdCh0aWNrRm9ybWF0Rm4pO1xyXG4gICAgICAgIGxldCBheGlzID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxyXG4gICAgICAgICAgICAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAgICAgICAuYXR0cihcImlkXCIsIFwiYXhpc1wiKVxyXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgMClcclxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIDApXHJcbiAgICAgICAgICAgIC5jYWxsKGF4aXNHZW4pXHJcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWF4aXNcIik7XHJcbiAgICAgICAgY2hhcnRFbGVtZW50c1tcImF4aXNcIl0gPSBheGlzO1xyXG5cclxuICAgICAgICBsZXQgYXhpc0xpbmUgPSBheGlzLnNlbGVjdEFsbChcInBhdGhcIikuc3R5bGUoXCJzdHJva2VcIiwgXCJub25lXCIpO1xyXG5cclxuICAgICAgICBsZXQgYXhpc1RpY2tzID0gYXhpcy5zZWxlY3RBbGwoXCJsaW5lXCIpO1xyXG5cclxuICAgICAgICBsZXQgYXhpc1RpY2tMYWJlbHMgPSBheGlzXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJ0ZXh0XCIpXHJcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRpY2stbGFiZWxcIik7XHJcblxyXG4gICAgICAgIGF4aXMuYXR0cihcIndpZHRoXCIsIHRpY2tMZW5ndGggKyBtYXhUaWNrTGFiZWxTaXplLndpZHRoKTtcclxuICAgICAgICBheGlzLmF0dHIoXCJoZWlnaHRcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGgpO1xyXG5cclxuICAgICAgICAvLyBFeHBhbmQgYXJlYXNcclxuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShcclxuICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5zdmcsXHJcbiAgICAgICAgICAgIHRpY2tMZW5ndGggKyBtYXhUaWNrTGFiZWxTaXplLndpZHRoLFxyXG4gICAgICAgICAgICAwXHJcbiAgICAgICAgKTtcclxuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShcclxuICAgICAgICAgICAgY2hhcnRFbGVtZW50cy5ncmFwaEFyZWEsXHJcbiAgICAgICAgICAgIHRpY2tMZW5ndGggKyBtYXhUaWNrTGFiZWxTaXplLndpZHRoLFxyXG4gICAgICAgICAgICAwXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgaGVscGVyLm1vdmVBcmVhKFxyXG4gICAgICAgICAgICBjaGFydEVsZW1lbnRzLmRhdGFBcmVhLFxyXG4gICAgICAgICAgICB0aWNrTGVuZ3RoICsgbWF4VGlja0xhYmVsU2l6ZS53aWR0aCxcclxuICAgICAgICAgICAgMFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIFJlbmRlciBxdWFudGl0YXRpdmUgcmFuZ2UsIHBvb3IvYXZlcmFnZS9nb29kLy4uLlxyXG5mdW5jdGlvbiByZW5kZXJCYWNrUGFuZWwoXHJcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIGJ1bGxldEluZm86IEJ1bGxldEluZm8sXHJcbiAgICBkYXRhc2V0OiBEYXRhc2V0XHJcbikge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJCYWNrUGFuZWxcIik7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0KTtcclxuXHJcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWJ1bGxldEluZm8pIHJldHVybjtcclxuXHJcbiAgICBsZXQgc2NhbGUgPSBjaGFydEVsZW1lbnRzLnNjYWxlO1xyXG5cclxuICAgIC8vIFByZXBhcmUgZGF0YVxyXG4gICAgbGV0IHJhbmdlID0gYnVsbGV0SW5mby5yYW5nZTtcclxuICAgIGxldCByYW5nZUNvbG9yID0gYnVsbGV0SW5mby5yYW5nZUNvbG9yO1xyXG4gICAgbGV0IGRhdGEgPSBbXTtcclxuICAgIGxldCBsYXN0Qm91bmQgPSAwO1xyXG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgcmFuZ2UubGVuZ3RoOyBpbmQrKykge1xyXG4gICAgICAgIGRhdGEucHVzaCh7XHJcbiAgICAgICAgICAgIHN0YXJ0OiBsYXN0Qm91bmQsXHJcbiAgICAgICAgICAgIGVuZDogcmFuZ2VbaW5kXSxcclxuICAgICAgICAgICAgY29sb3I6IHJhbmdlQ29sb3JbaW5kXSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBsYXN0Qm91bmQgPSByYW5nZVtpbmRdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xyXG4gICAgICAgIGxldCBwYW5lbCA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcclxuICAgICAgICAgICAgLnNlbGVjdEFsbChcImJhY2tQYW5lbFwiKVxyXG4gICAgICAgICAgICAuZGF0YShkYXRhKVxyXG4gICAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24gKGQ6IGFueSwgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gTWF0aC5mbG9vcihzY2FsZShkLnN0YXJ0KSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBmdW5jdGlvbiAoZDogYW55KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBmdW5jdGlvbiAoZDogYW55LCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmNlaWwoc2NhbGUoZC5lbmQgLSBkLnN0YXJ0KSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodClcclxuICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAoZDogYW55KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZC5jb2xvcjtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9IGVsc2UgaWYgKGJ1bGxldEluZm8ub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xyXG4gICAgICAgIGxldCBwYW5lbCA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcclxuICAgICAgICAgICAgLnNlbGVjdEFsbChcImJhY2tQYW5lbFwiKVxyXG4gICAgICAgICAgICAuZGF0YShkYXRhKVxyXG4gICAgICAgICAgICAuZW50ZXIoKVxyXG4gICAgICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24gKGQ6IGFueSwgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uIChkOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmZsb29yKHNjYWxlKGQuZW5kKSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGgpXHJcbiAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGZ1bmN0aW9uIChkOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0IC1cclxuICAgICAgICAgICAgICAgICAgICBNYXRoLmZsb29yKHNjYWxlKGQuZW5kIC0gZC5zdGFydCkpXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChkOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkLmNvbG9yO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgIH1cclxufVxyXG5cclxuLy8gUmVuZGVyIGJhciBmb3IgYWN0dWFsIHZhbHVlXHJcbmZ1bmN0aW9uIHJlbmRlckJhcihcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgYnVsbGV0SW5mbzogQnVsbGV0SW5mbyxcclxuICAgIGRhdGFzZXQ6IERhdGFzZXRcclxuKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlckJhclwiKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGRhdGFzZXQpO1xyXG4gICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiXCI7XHJcblxyXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFidWxsZXRJbmZvKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHJldEFjdHVhbFZhbHVlID0gZXhwci5yZXNvbHZlVmFsdWUoYnVsbGV0SW5mby52YWx1ZSwgcmVuZGVySW5mbyk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZXRBY3R1YWxWYWx1ZSk7XHJcbiAgICBpZiAodHlwZW9mIHJldEFjdHVhbFZhbHVlID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldEFjdHVhbFZhbHVlO1xyXG4gICAgfVxyXG4gICAgbGV0IGFjdHVhbFZhbHVlID0gcmV0QWN0dWFsVmFsdWU7XHJcbiAgICBpZiAoTnVtYmVyLmlzTmFOKGFjdHVhbFZhbHVlKSkge1xyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dCB2YWx1ZTogXCIgKyByZXRBY3R1YWxWYWx1ZTtcclxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgfVxyXG4gICAgbGV0IHZhbHVlQ29sb3IgPSBidWxsZXRJbmZvLnZhbHVlQ29sb3I7XHJcblxyXG4gICAgbGV0IHNjYWxlID0gY2hhcnRFbGVtZW50cy5zY2FsZTtcclxuXHJcbiAgICBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcclxuICAgICAgICBsZXQgYmFyV2lkdGggPSByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgLyAzO1xyXG4gICAgICAgIGxldCBiYXIgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXHJcbiAgICAgICAgICAgIC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCBzY2FsZSgwKSlcclxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGJhcldpZHRoKVxyXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIE1hdGguZmxvb3Ioc2NhbGUoYWN0dWFsVmFsdWUpKSlcclxuICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgYmFyV2lkdGgpXHJcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgdmFsdWVDb2xvcik7XHJcbiAgICB9IGVsc2UgaWYgKGJ1bGxldEluZm8ub3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xyXG4gICAgICAgIGxldCBiYXJXaWR0aCA9IHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMztcclxuICAgICAgICBsZXQgYmFyID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxyXG4gICAgICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgYmFyV2lkdGgpXHJcbiAgICAgICAgICAgIC5hdHRyKFwieVwiLCBNYXRoLmZsb29yKHNjYWxlKGFjdHVhbFZhbHVlKSkpXHJcbiAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgYmFyV2lkdGgpXHJcbiAgICAgICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICAgICAgXCJoZWlnaHRcIixcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCAtIE1hdGguZmxvb3Ioc2NhbGUoYWN0dWFsVmFsdWUpKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgdmFsdWVDb2xvcik7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIFJlbmRlciBtYXJrIGxpbmUgZm9yIHRhcmdldCB2YWx1ZVxyXG5mdW5jdGlvbiByZW5kZXJNYXJrKFxyXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBidWxsZXRJbmZvOiBCdWxsZXRJbmZvLFxyXG4gICAgZGF0YXNldDogRGF0YXNldFxyXG4pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyTWFya1wiKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGRhdGFzZXQpO1xyXG5cclxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhYnVsbGV0SW5mbykgcmV0dXJuO1xyXG5cclxuICAgIGxldCBzaG93TWFya2VyID0gYnVsbGV0SW5mby5zaG93TWFya2VyO1xyXG4gICAgaWYgKCFzaG93TWFya2VyKSByZXR1cm47XHJcblxyXG4gICAgbGV0IG1hcmtlclZhbHVlID0gYnVsbGV0SW5mby5tYXJrZXJWYWx1ZTtcclxuICAgIGxldCBtYXJrZXJDb2xvciA9IGJ1bGxldEluZm8ubWFya2VyQ29sb3I7XHJcblxyXG4gICAgbGV0IHNjYWxlID0gY2hhcnRFbGVtZW50cy5zY2FsZTtcclxuXHJcbiAgICBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJob3Jpem9udGFsXCIpIHtcclxuICAgICAgICBsZXQgbWFya2VyTGVuZ3RoID0gKHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCAqIDIpIC8gMztcclxuICAgICAgICBsZXQgbWFya2VyID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxyXG4gICAgICAgICAgICAuYXBwZW5kKFwicmVjdFwiKVxyXG4gICAgICAgICAgICAuYXR0cihcInhcIiwgc2NhbGUobWFya2VyVmFsdWUpIC0gMS41KVxyXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgbWFya2VyTGVuZ3RoIC8gNClcclxuICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCAzKVxyXG4gICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCBtYXJrZXJMZW5ndGgpXHJcbiAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgbWFya2VyQ29sb3IpO1xyXG4gICAgfSBlbHNlIGlmIChidWxsZXRJbmZvLm9yaWVudGF0aW9uID09PSBcInZlcnRpY2FsXCIpIHtcclxuICAgICAgICBsZXQgbWFya2VyTGVuZ3RoID0gKHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICogMikgLyAzO1xyXG4gICAgICAgIGxldCBtYXJrZXIgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXHJcbiAgICAgICAgICAgIC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCBtYXJrZXJMZW5ndGggLyA0KVxyXG4gICAgICAgICAgICAuYXR0cihcInlcIiwgc2NhbGUobWFya2VyVmFsdWUpIC0gMS41KVxyXG4gICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIG1hcmtlckxlbmd0aClcclxuICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgMylcclxuICAgICAgICAgICAgLnN0eWxlKFwiZmlsbFwiLCBtYXJrZXJDb2xvcik7XHJcbiAgICB9XHJcbn1cclxuXHJcbi8vIEJ1bGxldCBncmFwaCBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CdWxsZXRfZ3JhcGhcclxuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlckJ1bGxldChcclxuICAgIGNhbnZhczogSFRNTEVsZW1lbnQsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgYnVsbGV0SW5mbzogQnVsbGV0SW5mb1xyXG4pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyQnVsbGV0XCIpO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XHJcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWJ1bGxldEluZm8pIHJldHVybjtcclxuXHJcbiAgICBsZXQgZGF0YXNldElkID0gcGFyc2VGbG9hdChidWxsZXRJbmZvLmRhdGFzZXQpO1xyXG4gICAgbGV0IGRhdGFzZXQgPSByZW5kZXJJbmZvLmRhdGFzZXRzLmdldERhdGFzZXRCeUlkKGRhdGFzZXRJZCk7XHJcblxyXG4gICAgLy8gU2V0IGluaXRpYWwgZGF0YUFyZWEgc2l6ZVxyXG4gICAgaWYgKGJ1bGxldEluZm8ub3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XHJcbiAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUgPSB7IHdpZHRoOiAyNTAsIGhlaWdodDogMjQgfTtcclxuICAgIH0gZWxzZSBpZiAoYnVsbGV0SW5mby5vcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XHJcbiAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUgPSB7IHdpZHRoOiAyNCwgaGVpZ2h0OiAyNTAgfTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgY2hhcnRFbGVtZW50cyA9IGNyZWF0ZUFyZWFzKGNhbnZhcywgcmVuZGVySW5mbywgYnVsbGV0SW5mbyk7XHJcblxyXG4gICAgbGV0IHJldFJlbmRlckF4aXMgPSByZW5kZXJBeGlzKFxyXG4gICAgICAgIGNoYXJ0RWxlbWVudHMsXHJcbiAgICAgICAgcmVuZGVySW5mbyxcclxuICAgICAgICBidWxsZXRJbmZvLFxyXG4gICAgICAgIGRhdGFzZXRcclxuICAgICk7XHJcbiAgICBpZiAodHlwZW9mIHJldFJlbmRlckF4aXMgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gcmV0UmVuZGVyQXhpcztcclxuICAgIH1cclxuXHJcbiAgICByZW5kZXJUaXRsZShjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBidWxsZXRJbmZvKTtcclxuXHJcbiAgICByZW5kZXJCYWNrUGFuZWwoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgYnVsbGV0SW5mbywgZGF0YXNldCk7XHJcblxyXG4gICAgbGV0IHJldFJlbmRlckJhciA9IHJlbmRlckJhcihcclxuICAgICAgICBjaGFydEVsZW1lbnRzLFxyXG4gICAgICAgIHJlbmRlckluZm8sXHJcbiAgICAgICAgYnVsbGV0SW5mbyxcclxuICAgICAgICBkYXRhc2V0XHJcbiAgICApO1xyXG4gICAgaWYgKHR5cGVvZiByZXRSZW5kZXJCYXIgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gcmV0UmVuZGVyQmFyO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbmRlck1hcmsoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgYnVsbGV0SW5mbywgZGF0YXNldCk7XHJcblxyXG4gICAgc2V0Q2hhcnRTY2FsZShjYW52YXMsIGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8pO1xyXG59XHJcbiIsImltcG9ydCAqIGFzIGQzIGZyb20gXCJkM1wiO1xyXG5pbXBvcnQgeyBNb21lbnQsIER1cmF0aW9uIH0gZnJvbSBcIm1vbWVudFwiO1xyXG5pbXBvcnQge1xyXG4gICAgRGF0YXNldHMsXHJcbiAgICBEYXRhUG9pbnQsXHJcbiAgICBSZW5kZXJJbmZvLFxyXG4gICAgRGF0YXNldCxcclxuICAgIFNpemUsXHJcbiAgICBUcmFuc2Zvcm0sXHJcbiAgICBDaGFydEVsZW1lbnRzLFxyXG4gICAgR3JhcGhUeXBlLFxyXG4gICAgVmFsdWVUeXBlLFxyXG4gICAgQ29tbW9uQ2hhcnRJbmZvLFxyXG4gICAgTGluZUluZm8sXHJcbiAgICBCYXJJbmZvLFxyXG4gICAgUGllSW5mbyxcclxuICAgIFN1bW1hcnlJbmZvLFxyXG4gICAgQnVsbGV0SW5mbyxcclxuICAgIE1vbnRoSW5mbyxcclxuICAgIEhlYXRtYXBJbmZvLFxyXG59IGZyb20gXCIuL2RhdGFcIjtcclxuaW1wb3J0ICogYXMgcGllIGZyb20gXCIuL3BpZVwiO1xyXG5pbXBvcnQgKiBhcyBzdW1tYXJ5IGZyb20gXCIuL3N1bW1hcnlcIjtcclxuaW1wb3J0ICogYXMgbW9udGggZnJvbSBcIi4vbW9udGhcIjtcclxuaW1wb3J0ICogYXMgaGVhdG1hcCBmcm9tIFwiLi9oZWF0bWFwXCI7XHJcbmltcG9ydCAqIGFzIGJ1bGxldCBmcm9tIFwiLi9idWxsZXRcIjtcclxuaW1wb3J0ICogYXMgaGVscGVyIGZyb20gXCIuL2hlbHBlclwiO1xyXG5pbXBvcnQgeyBzcHJpbnRmIH0gZnJvbSBcInNwcmludGYtanNcIjtcclxuXHJcbmZ1bmN0aW9uIGdldFhUaWNrVmFsdWVzKFxyXG4gICAgZGF0ZXM6IE1vbWVudFtdLFxyXG4gICAgaW50ZXJ2YWw6IER1cmF0aW9uXHJcbik6IFtBcnJheTxEYXRlPiwgZDMuVGltZUludGVydmFsXSB7XHJcbiAgICAvLyBUaGUgaW5wdXQgaW50ZXJ2YWwgY291bGQgYmUgbnVsbCxcclxuICAgIC8vIGdlbmVyYXRlIHRpY2sgdmFsdWVzIGV2ZW4gaWYgaW50ZXJ2YWwgaXMgbnVsbFxyXG5cclxuICAgIC8vIGNvbnNvbGUubG9nKGludGVydmFsKTtcclxuXHJcbiAgICBsZXQgdGlja1ZhbHVlczogQXJyYXk8RGF0ZT4gPSBbXTtcclxuICAgIGxldCB0aWNrSW50ZXJ2YWwgPSBudWxsO1xyXG5cclxuICAgIC8vIHkgdmFsdWVzIGFyZSB0aW1lIHZhbHVlc1xyXG4gICAgaWYgKGludGVydmFsKSB7XHJcbiAgICAgICAgbGV0IGZpcnN0RGF0ZSA9IGRhdGVzWzBdO1xyXG4gICAgICAgIGxldCBsYXN0RGF0ZSA9IGRhdGVzW2RhdGVzLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIHRpY2tWYWx1ZXMgPSBkMy50aW1lRGF5LnJhbmdlKFxyXG4gICAgICAgICAgICBmaXJzdERhdGUudG9EYXRlKCksXHJcbiAgICAgICAgICAgIGxhc3REYXRlLnRvRGF0ZSgpLFxyXG4gICAgICAgICAgICBpbnRlcnZhbC5hc0RheXMoKVxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBkYXlzID0gZGF0ZXMubGVuZ3RoO1xyXG4gICAgICAgIGlmIChkYXlzIDw9IDE1KSB7XHJcbiAgICAgICAgICAgIC8vIG51bWJlciBvZiB0aWNrczogMC0xNVxyXG4gICAgICAgICAgICB0aWNrSW50ZXJ2YWwgPSBkMy50aW1lRGF5O1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF5cyA8PSA0ICogMTUpIHtcclxuICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHRpY2tzOiA0LTE1XHJcbiAgICAgICAgICAgIHRpY2tJbnRlcnZhbCA9IGQzLnRpbWVEYXkuZXZlcnkoNCk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXlzIDw9IDcgKiAxNSkge1xyXG4gICAgICAgICAgICAvLyBudW1iZXIgb2YgdGlja3M6IDgtMTVcclxuICAgICAgICAgICAgdGlja0ludGVydmFsID0gZDMudGltZVdlZWs7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXlzIDw9IDE1ICogMzApIHtcclxuICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHRpY2tzOiA0LTE1XHJcbiAgICAgICAgICAgIHRpY2tJbnRlcnZhbCA9IGQzLnRpbWVNb250aDtcclxuICAgICAgICB9IGVsc2UgaWYgKGRheXMgPD0gMTUgKiA2MCkge1xyXG4gICAgICAgICAgICAvLyBudW1iZXIgb2YgdGlja3M6IDgtMTVcclxuICAgICAgICAgICAgdGlja0ludGVydmFsID0gZDMudGltZU1vbnRoLmV2ZXJ5KDIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRpY2tJbnRlcnZhbCA9IGQzLnRpbWVZZWFyO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gW3RpY2tWYWx1ZXMsIHRpY2tJbnRlcnZhbF07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFhUaWNrTGFiZWxGb3JtYXQoZGF0ZXM6IE1vbWVudFtdLCBpblRpY2tMYWJlbEZvcm1hdDogc3RyaW5nKSB7XHJcbiAgICBpZiAoaW5UaWNrTGFiZWxGb3JtYXQpIHtcclxuICAgICAgICBmdW5jdGlvbiBmblRpY2tMYWJlbEZvcm1hdChkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgICAgICAgICAgcmV0dXJuIGhlbHBlci5kYXRlVG9TdHIod2luZG93Lm1vbWVudChkYXRlKSwgaW5UaWNrTGFiZWxGb3JtYXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZm5UaWNrTGFiZWxGb3JtYXQ7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCB0aWNrTGFiZWxGb3JtYXQgPSBudWxsO1xyXG4gICAgICAgIGxldCBkYXlzID0gZGF0ZXMubGVuZ3RoO1xyXG5cclxuICAgICAgICBpZiAoZGF5cyA8PSAxNSkge1xyXG4gICAgICAgICAgICAvLyBudW1iZXIgb2YgdGlja3M6IDAtMTVcclxuICAgICAgICAgICAgdGlja0xhYmVsRm9ybWF0ID0gZDMudGltZUZvcm1hdChcIiV5LSVtLSVkXCIpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoZGF5cyA8PSA0ICogMTUpIHtcclxuICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHRpY2tzOiA0LTE1XHJcbiAgICAgICAgICAgIHRpY2tMYWJlbEZvcm1hdCA9IGQzLnRpbWVGb3JtYXQoXCIleS0lbS0lZFwiKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRheXMgPD0gNyAqIDE1KSB7XHJcbiAgICAgICAgICAgIC8vIG51bWJlciBvZiB0aWNrczogOC0xNVxyXG4gICAgICAgICAgICB0aWNrTGFiZWxGb3JtYXQgPSBkMy50aW1lRm9ybWF0KFwiJXktJW0tJWRcIik7XHJcbiAgICAgICAgfSBlbHNlIGlmIChkYXlzIDw9IDE1ICogMzApIHtcclxuICAgICAgICAgICAgLy8gbnVtYmVyIG9mIHRpY2tzOiA0LTE1XHJcbiAgICAgICAgICAgIHRpY2tMYWJlbEZvcm1hdCA9IGQzLnRpbWVGb3JtYXQoXCIleSAlYlwiKTtcclxuICAgICAgICB9IGVsc2UgaWYgKGRheXMgPD0gMTUgKiA2MCkge1xyXG4gICAgICAgICAgICAvLyBudW1iZXIgb2YgdGlja3M6IDgtMTVcclxuICAgICAgICAgICAgdGlja0xhYmVsRm9ybWF0ID0gZDMudGltZUZvcm1hdChcIiV5ICViXCIpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRpY2tMYWJlbEZvcm1hdCA9IGQzLnRpbWVGb3JtYXQoXCIlWVwiKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiB0aWNrTGFiZWxGb3JtYXQ7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFlUaWNrVmFsdWVzKFxyXG4gICAgeUxvd2VyOiBudW1iZXIsXHJcbiAgICB5VXBwZXI6IG51bWJlcixcclxuICAgIGludGVydmFsOiBudW1iZXIgfCBEdXJhdGlvbixcclxuICAgIGlzVGltZVZhbHVlID0gZmFsc2VcclxuKSB7XHJcbiAgICAvLyBUaGUgaW5wdXQgaW50ZXJ2YWwgY291bGQgYmUgbnVsbCxcclxuICAgIC8vIGdlbmVyYXRlIHRpY2sgdmFsdWVzIGZvciB0aW1lIHZhbHVlcyBldmVuIGlmIGludGVydmFsIGlzIG51bGxcclxuXHJcbiAgICAvLyBjb25zb2xlLmxvZyhpbnRlcnZhbCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhpc1RpbWVWYWx1ZSk7XHJcblxyXG4gICAgY29uc3QgYWJzRXh0ZW50ID0gTWF0aC5hYnMoeVVwcGVyIC0geUxvd2VyKTtcclxuICAgIGxldCB0aWNrVmFsdWVzOiBBcnJheTxudW1iZXI+ID0gW107XHJcblxyXG4gICAgaWYgKCFpc1RpbWVWYWx1ZSkge1xyXG4gICAgICAgIC8vIHkgdmFsdWVzIGFyZSBudW1iZXJzXHJcbiAgICAgICAgaWYgKGludGVydmFsICYmIHR5cGVvZiBpbnRlcnZhbCA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICAvLyAhPT1udWxsICYmICE9PSAwXHJcbiAgICAgICAgICAgIHRpY2tWYWx1ZXMgPSBkMy5yYW5nZSh5TG93ZXIsIHlVcHBlciwgaW50ZXJ2YWwpO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgLy8geSB2YWx1ZXMgYXJlIHRpbWUgdmFsdWVzXHJcbiAgICAgICAgaWYgKGludGVydmFsICYmIHdpbmRvdy5tb21lbnQuaXNEdXJhdGlvbihpbnRlcnZhbCkpIHtcclxuICAgICAgICAgICAgbGV0IGludGVydmFsSW5TZWNvbmRzID0gTWF0aC5hYnMoaW50ZXJ2YWwuYXNTZWNvbmRzKCkpO1xyXG4gICAgICAgICAgICB0aWNrVmFsdWVzID0gZDMucmFuZ2UoeUxvd2VyLCB5VXBwZXIsIGludGVydmFsSW5TZWNvbmRzKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBhdXRvIGludGVydmFsIGZvciB0aW1lIHZhbHVlc1xyXG4gICAgICAgICAgICBpZiAoYWJzRXh0ZW50ID4gNSAqIDYwICogNjApIHtcclxuICAgICAgICAgICAgICAgIC8vIGV4dGVudCBvdmVyIHRoYW4gNSBob3Vyc1xyXG4gICAgICAgICAgICAgICAgLy8gdGljayBvbiB0aGUgaG91clxyXG4gICAgICAgICAgICAgICAgeUxvd2VyID0gTWF0aC5mbG9vcih5TG93ZXIgLyAzNjAwKSAqIDM2MDA7XHJcbiAgICAgICAgICAgICAgICB5VXBwZXIgPSBNYXRoLmNlaWwoeVVwcGVyIC8gMzYwMCkgKiAzNjAwO1xyXG5cclxuICAgICAgICAgICAgICAgIHRpY2tWYWx1ZXMgPSBkMy5yYW5nZSh5TG93ZXIsIHlVcHBlciwgMzYwMCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyB0aWNrIG9uIHRoZSBoYWxmIGhvdXJcclxuICAgICAgICAgICAgICAgIHlMb3dlciA9IE1hdGguZmxvb3IoeUxvd2VyIC8gMTgwMCkgKiAxODAwO1xyXG4gICAgICAgICAgICAgICAgeVVwcGVyID0gTWF0aC5jZWlsKHlVcHBlciAvIDE4MDApICogMTgwMDtcclxuXHJcbiAgICAgICAgICAgICAgICB0aWNrVmFsdWVzID0gZDMucmFuZ2UoeUxvd2VyLCB5VXBwZXIsIDE4MDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aWNrVmFsdWVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XHJcbiAgICByZXR1cm4gdGlja1ZhbHVlcztcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0WVRpY2tMYWJlbEZvcm1hdChcclxuICAgIHlMb3dlcjogbnVtYmVyLFxyXG4gICAgeVVwcGVyOiBudW1iZXIsXHJcbiAgICBpblRpY2tMYWJlbEZvcm1hdDogc3RyaW5nLFxyXG4gICAgaXNUaW1lVmFsdWUgPSBmYWxzZVxyXG4pIHtcclxuICAgIC8vIHJldHVybiBhIGZ1bmN0aW9uIGNvbnZlcnQgdmFsdWUgdG8gdGltZSBzdHJpbmdcclxuXHJcbiAgICBpZiAoIWlzVGltZVZhbHVlKSB7XHJcbiAgICAgICAgaWYgKGluVGlja0xhYmVsRm9ybWF0KSB7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHRpY2tGb3JtYXQodmFsdWU6IG51bWJlcik6IHN0cmluZyB7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3RyVmFsdWUgPSBzcHJpbnRmKFwiJVwiICsgaW5UaWNrTGFiZWxGb3JtYXQsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBzdHJWYWx1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIHRpY2tGb3JtYXQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBkMy50aWNrRm9ybWF0KHlMb3dlciwgeVVwcGVyLCAxMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIHZhbHVlcyBpbiBzZWNvbmRzXHJcbiAgICAgICAgaWYgKGluVGlja0xhYmVsRm9ybWF0KSB7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGZuVGlja0xhYmVsRm9ybWF0KHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRheVN0YXJ0ID0gd2luZG93Lm1vbWVudChcIjAwOjAwXCIsIFwiSEg6bW1cIiwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGlja1RpbWUgPSBkYXlTdGFydC5hZGQodmFsdWUsIFwic2Vjb25kc1wiKTtcclxuICAgICAgICAgICAgICAgIGxldCBmb3JtYXQgPSB0aWNrVGltZS5mb3JtYXQoaW5UaWNrTGFiZWxGb3JtYXQpO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBkZXZIb3VyID0gKHZhbHVlIC0geUxvd2VyKSAvIDM2MDA7XHJcbiAgICAgICAgICAgICAgICBsZXQgaW50ZXJsZWF2ZSA9IGRldkhvdXIgJSAyO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZuVGlja0xhYmVsRm9ybWF0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIGZuVGlja0xhYmVsRm9ybWF0KHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYWJzRXh0ZW50ID0gTWF0aC5hYnMoeVVwcGVyIC0geUxvd2VyKTtcclxuICAgICAgICAgICAgICAgIGxldCBkYXlTdGFydCA9IHdpbmRvdy5tb21lbnQoXCIwMDowMFwiLCBcIkhIOm1tXCIsIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRpY2tUaW1lID0gZGF5U3RhcnQuYWRkKHZhbHVlLCBcInNlY29uZHNcIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgZm9ybWF0ID0gdGlja1RpbWUuZm9ybWF0KFwiSEg6bW1cIik7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgeUxvd2VyL3lVcHBlcjogJHt5TG93ZXJ9LyR7eVVwcGVyfWApXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgdmFsdWUvZXh0ZW50L2ludGVyOiR7dmFsdWV9LyR7YWJzRXh0ZW50fS8keyh2YWx1ZS15TG93ZXIpLzM2MDB9YCk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gYXV0byBpbnRlcmxlYXZlIGlmIGV4dGVudCBvdmVyIDEyIGhvdXJzXHJcbiAgICAgICAgICAgICAgICBpZiAoYWJzRXh0ZW50ID4gMTIgKiA2MCAqIDYwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRldkhvdXIgPSAodmFsdWUgLSB5TG93ZXIpIC8gMzYwMDtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaW50ZXJsZWF2ZSA9IGRldkhvdXIgJSAyO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8IHlMb3dlciB8fCB2YWx1ZSA+IHlVcHBlciB8fCBpbnRlcmxlYXZlIDwgMS4wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdCA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBmb3JtYXQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBmblRpY2tMYWJlbEZvcm1hdDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG51bGw7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZW5kZXIoY2FudmFzOiBIVE1MRWxlbWVudCwgcmVuZGVySW5mbzogUmVuZGVySW5mbykge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJcIik7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmRhdGFzZXRzKTtcclxuXHJcbiAgICAvLyBEYXRhIHByZXByb2Nlc3NpbmdcclxuICAgIGZvciAobGV0IGRhdGFzZXQgb2YgcmVuZGVySW5mby5kYXRhc2V0cykge1xyXG4gICAgICAgIGlmIChkYXRhc2V0LmdldFF1ZXJ5KCkudXNlZEFzWERhdGFzZXQpIGNvbnRpbnVlO1xyXG4gICAgICAgIC8vIHZhbHVlU2hpZnRcclxuICAgICAgICBsZXQgc2hpZnRBbW91bnQgPSByZW5kZXJJbmZvLnZhbHVlU2hpZnRbZGF0YXNldC5nZXRJZCgpXTtcclxuICAgICAgICBpZiAoc2hpZnRBbW91bnQgIT09IG51bGwgJiYgc2hpZnRBbW91bnQgIT09IDApIHtcclxuICAgICAgICAgICAgZGF0YXNldC5zaGlmdChcclxuICAgICAgICAgICAgICAgIHNoaWZ0QW1vdW50LFxyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5zaGlmdE9ubHlWYWx1ZUxhcmdlclRoYW5bZGF0YXNldC5nZXRJZCgpXVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBwZW5hbHR5XHJcbiAgICAgICAgaWYgKHJlbmRlckluZm8ucGVuYWx0eVtkYXRhc2V0LmdldElkKCldICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGRhdGFzZXQuc2V0UGVuYWx0eShyZW5kZXJJbmZvLnBlbmFsdHlbZGF0YXNldC5nZXRJZCgpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGFjY3VtXHJcbiAgICAgICAgaWYgKHJlbmRlckluZm8uYWNjdW1bZGF0YXNldC5nZXRJZCgpXSkge1xyXG4gICAgICAgICAgICBkYXRhc2V0LmFjY3VtdWxhdGVWYWx1ZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgbGluZUluZm8gb2YgcmVuZGVySW5mby5saW5lKSB7XHJcbiAgICAgICAgbGV0IHJldCA9IHJlbmRlckxpbmVDaGFydChjYW52YXMsIHJlbmRlckluZm8sIGxpbmVJbmZvKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IGJhckluZm8gb2YgcmVuZGVySW5mby5iYXIpIHtcclxuICAgICAgICBsZXQgcmV0ID0gcmVuZGVyQmFyQ2hhcnQoY2FudmFzLCByZW5kZXJJbmZvLCBiYXJJbmZvKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGZvciAobGV0IHBpZUluZm8gb2YgcmVuZGVySW5mby5waWUpIHtcclxuICAgICAgICBsZXQgcmV0ID0gcGllLnJlbmRlclBpZUNoYXJ0KGNhbnZhcywgcmVuZGVySW5mbywgcGllSW5mbyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBzdW1tYXJ5SW5mbyBvZiByZW5kZXJJbmZvLnN1bW1hcnkpIHtcclxuICAgICAgICBsZXQgcmV0ID0gc3VtbWFyeS5yZW5kZXJTdW1tYXJ5KGNhbnZhcywgcmVuZGVySW5mbywgc3VtbWFyeUluZm8pO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgYnVsbGV0SW5mbyBvZiByZW5kZXJJbmZvLmJ1bGxldCkge1xyXG4gICAgICAgIGxldCByZXQgPSBidWxsZXQucmVuZGVyQnVsbGV0KGNhbnZhcywgcmVuZGVySW5mbywgYnVsbGV0SW5mbyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBtb250aEluZm8gb2YgcmVuZGVySW5mby5tb250aCkge1xyXG4gICAgICAgIGxldCByZXQgPSBtb250aC5yZW5kZXJNb250aChjYW52YXMsIHJlbmRlckluZm8sIG1vbnRoSW5mbyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBoZWF0bWFwSW5mbyBvZiByZW5kZXJJbmZvLmhlYXRtYXApIHtcclxuICAgICAgICBsZXQgcmV0ID0gaGVhdG1hcC5yZW5kZXJIZWF0bWFwKGNhbnZhcywgcmVuZGVySW5mbywgaGVhdG1hcEluZm8pO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZW5kZXJYQXhpcyhcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgY2hhcnRJbmZvOiBDb21tb25DaGFydEluZm9cclxuKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlclhBeGlzXCIpO1xyXG5cclxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhY2hhcnRJbmZvKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRhdGFzZXRzID0gcmVuZGVySW5mby5kYXRhc2V0cztcclxuICAgIGxldCB4RG9tYWluID0gZDMuZXh0ZW50KGRhdGFzZXRzLmdldERhdGVzKCkpO1xyXG4gICAgbGV0IHhTY2FsZSA9IGQzXHJcbiAgICAgICAgLnNjYWxlVGltZSgpXHJcbiAgICAgICAgLmRvbWFpbih4RG9tYWluKVxyXG4gICAgICAgIC5yYW5nZShbMCwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGhdKTtcclxuICAgIGNoYXJ0RWxlbWVudHNbXCJ4U2NhbGVcIl0gPSB4U2NhbGU7XHJcblxyXG4gICAgbGV0IHRpY2tJbnRlcnZhbEluRHVyYXRpb24gPSBoZWxwZXIucGFyc2VEdXJhdGlvblN0cmluZyhcclxuICAgICAgICBjaGFydEluZm8ueEF4aXNUaWNrSW50ZXJ2YWxcclxuICAgICk7XHJcblxyXG4gICAgbGV0IFt0aWNrVmFsdWVzLCB0aWNrSW50ZXJ2YWxdID0gZ2V0WFRpY2tWYWx1ZXMoXHJcbiAgICAgICAgZGF0YXNldHMuZ2V0RGF0ZXMoKSxcclxuICAgICAgICB0aWNrSW50ZXJ2YWxJbkR1cmF0aW9uXHJcbiAgICApO1xyXG4gICAgbGV0IHRpY2tGb3JtYXQgPSBnZXRYVGlja0xhYmVsRm9ybWF0KFxyXG4gICAgICAgIGRhdGFzZXRzLmdldERhdGVzKCksXHJcbiAgICAgICAgY2hhcnRJbmZvLnhBeGlzVGlja0xhYmVsRm9ybWF0XHJcbiAgICApO1xyXG5cclxuICAgIGxldCB4QXhpc0dlbiA9IGQzLmF4aXNCb3R0b20oeFNjYWxlKTtcclxuXHJcbiAgICBpZiAodGlja1ZhbHVlcyAmJiB0aWNrVmFsdWVzLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgIHhBeGlzR2VuLnRpY2tWYWx1ZXModGlja1ZhbHVlcyk7XHJcbiAgICB9IGVsc2UgaWYgKHRpY2tJbnRlcnZhbCkge1xyXG4gICAgICAgIHhBeGlzR2VuLnRpY2tzKHRpY2tJbnRlcnZhbCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGlja0Zvcm1hdCkge1xyXG4gICAgICAgIHhBeGlzR2VuLnRpY2tGb3JtYXQodGlja0Zvcm1hdCk7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHhBeGlzID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYSAvLyBheGlzIGluY2x1ZGVzIHRpY2tzXHJcbiAgICAgICAgLmFwcGVuZChcImdcIilcclxuICAgICAgICAuYXR0cihcImlkXCIsIFwieEF4aXNcIilcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcclxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoMCxcIiArIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLmhlaWdodCArIFwiKVwiXHJcbiAgICAgICAgKSAvLyByZWxhdGl2ZSB0byBncmFwaEFyZWFcclxuICAgICAgICAuY2FsbCh4QXhpc0dlbilcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1heGlzXCIpO1xyXG4gICAgaWYgKGNoYXJ0SW5mby54QXhpc0NvbG9yKSB7XHJcbiAgICAgICAgeEF4aXMuc3R5bGUoXCJzdHJva2VcIiwgY2hhcnRJbmZvLnhBeGlzQ29sb3IpO1xyXG4gICAgfVxyXG4gICAgY2hhcnRFbGVtZW50c1tcInhBeGlzXCJdID0geEF4aXM7XHJcblxyXG4gICAgbGV0IHRleHRTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcIjk5LTk5LTk5XCIpO1xyXG5cclxuICAgIGxldCB4QXhpc1RpY2tMYWJlbHMgPSB4QXhpc1xyXG4gICAgICAgIC5zZWxlY3RBbGwoXCJ0ZXh0XCIpXHJcbiAgICAgICAgLmF0dHIoXCJ4XCIsIC0xICogdGV4dFNpemUuaGVpZ2h0ICogTWF0aC5jb3MoKDY1IC8gMTgwKSAqIE1hdGguUEkpKVxyXG4gICAgICAgIC5hdHRyKFwieVwiLCAwKVxyXG4gICAgICAgIC5hdHRyKFwidHJhbnNmb3JtXCIsIFwicm90YXRlKC02NSlcIilcclxuICAgICAgICAuc3R5bGUoXCJ0ZXh0LWFuY2hvclwiLCBcImVuZFwiKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRpY2stbGFiZWxcIik7XHJcbiAgICBpZiAoY2hhcnRJbmZvLnhBeGlzQ29sb3IpIHtcclxuICAgICAgICB4QXhpc1RpY2tMYWJlbHMuc3R5bGUoXCJmaWxsXCIsIGNoYXJ0SW5mby54QXhpc0NvbG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdGlja0xlbmd0aCA9IDY7XHJcbiAgICBsZXQgdGlja0xhYmVsSGVpZ2h0ID0gdGV4dFNpemUud2lkdGggKiBNYXRoLnNpbigoNjUgLyAxODApICogTWF0aC5QSSk7XHJcbiAgICBsZXQgeEF4aXNMYWJlbCA9IHhBeGlzXHJcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcclxuICAgICAgICAudGV4dChjaGFydEluZm8ueEF4aXNMYWJlbClcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcclxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggLyAyICtcclxuICAgICAgICAgICAgICAgIFwiLFwiICtcclxuICAgICAgICAgICAgICAgICh0aWNrTGVuZ3RoICsgdGlja0xhYmVsSGVpZ2h0KSArXHJcbiAgICAgICAgICAgICAgICBcIilcIlxyXG4gICAgICAgIClcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1heGlzLWxhYmVsXCIpO1xyXG4gICAgaWYgKGNoYXJ0SW5mby54QXhpc0xhYmVsQ29sb3IpIHtcclxuICAgICAgICB4QXhpc0xhYmVsLnN0eWxlKFwiZmlsbFwiLCBjaGFydEluZm8ueEF4aXNMYWJlbENvbG9yKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyB4QXhpcyBoZWlnaHRcclxuICAgIHhBeGlzLmF0dHIoXCJoZWlnaHRcIiwgdGlja0xlbmd0aCArIHRpY2tMYWJlbEhlaWdodCk7XHJcblxyXG4gICAgLy8gRXhwYW5kIGFyZWFzXHJcbiAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLnN2ZywgMCwgdGlja0xlbmd0aCArIHRpY2tMYWJlbEhlaWdodCk7XHJcbiAgICBoZWxwZXIuZXhwYW5kQXJlYShjaGFydEVsZW1lbnRzLmdyYXBoQXJlYSwgMCwgdGlja0xlbmd0aCArIHRpY2tMYWJlbEhlaWdodCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbmRlcllBeGlzKFxyXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBjaGFydEluZm86IENvbW1vbkNoYXJ0SW5mbyxcclxuICAgIHlBeGlzTG9jYXRpb246IHN0cmluZyxcclxuICAgIGRhdGFzZXRJZHM6IEFycmF5PG51bWJlcj5cclxuKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlcllBeGlzXCIpXHJcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0cyk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGRhdGFzZXRJZHMpO1xyXG5cclxuICAgIGlmICghcmVuZGVySW5mbyB8fCAhY2hhcnRJbmZvKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGRhdGFzZXRzID0gcmVuZGVySW5mby5kYXRhc2V0cztcclxuICAgIGlmIChkYXRhc2V0SWRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiAhPT0gXCJsZWZ0XCIgJiYgeUF4aXNMb2NhdGlvbiAhPT0gXCJyaWdodFwiKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHlNaW5PZkRhdGFzZXRzID0gbnVsbDtcclxuICAgIGxldCB5TWF4T2ZEYXRhc2V0cyA9IG51bGw7XHJcbiAgICBsZXQgdG1wVmFsdWVJc1RpbWUgPSBudWxsO1xyXG4gICAgbGV0IHZhbHVlSXNUaW1lID0gZmFsc2U7XHJcbiAgICBmb3IgKGxldCBkYXRhc2V0SWQgb2YgZGF0YXNldElkcykge1xyXG4gICAgICAgIGxldCBkYXRhc2V0ID0gZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkKTtcclxuICAgICAgICBpZiAoZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgaWYgKHlNaW5PZkRhdGFzZXRzID09PSBudWxsIHx8IGRhdGFzZXQuZ2V0WU1pbigpIDwgeU1pbk9mRGF0YXNldHMpIHtcclxuICAgICAgICAgICAgeU1pbk9mRGF0YXNldHMgPSBkYXRhc2V0LmdldFlNaW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHlNYXhPZkRhdGFzZXRzID09PSBudWxsIHx8IGRhdGFzZXQuZ2V0WU1heCgpID4geU1heE9mRGF0YXNldHMpIHtcclxuICAgICAgICAgICAgeU1heE9mRGF0YXNldHMgPSBkYXRhc2V0LmdldFlNYXgoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIE5lZWQgYWxsIGRhdGFzZXRzIGhhdmUgc2FtZSBzZXR0aW5ncyBmb3IgdGltZSB2YWx1ZVxyXG4gICAgICAgIHZhbHVlSXNUaW1lID0gZGF0YXNldC52YWx1ZVR5cGUgPT09IFZhbHVlVHlwZS5UaW1lO1xyXG4gICAgICAgIGlmICh0bXBWYWx1ZUlzVGltZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0bXBWYWx1ZUlzVGltZSA9IHZhbHVlSXNUaW1lO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZUlzVGltZSAhPT0gdG1wVmFsdWVJc1RpbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcIk5vdCBhbGwgdmFsdWVzIGluIHRpbWUgZm9ybWF0XCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyh5TWluT2ZEYXRhc2V0cyk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh5TWF4T2ZEYXRhc2V0cyk7XHJcblxyXG4gICAgbGV0IHlNaW4gPSBudWxsO1xyXG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XHJcbiAgICAgICAgeU1pbiA9IGNoYXJ0SW5mby55TWluWzBdO1xyXG4gICAgfSBlbHNlIGlmICh5QXhpc0xvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcclxuICAgICAgICB5TWluID0gY2hhcnRJbmZvLnlNaW5bMV07XHJcbiAgICB9XHJcbiAgICBsZXQgeU1pbkFzc2lnbmVkID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZW9mIHlNaW4gIT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICB5TWluID0geU1pbk9mRGF0YXNldHM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHlNaW5Bc3NpZ25lZCA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHlNYXggPSBudWxsO1xyXG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XHJcbiAgICAgICAgeU1heCA9IGNoYXJ0SW5mby55TWF4WzBdO1xyXG4gICAgfSBlbHNlIGlmICh5QXhpc0xvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcclxuICAgICAgICB5TWF4ID0gY2hhcnRJbmZvLnlNYXhbMV07XHJcbiAgICB9XHJcbiAgICBsZXQgeU1heEFzc2lnbmVkID0gZmFsc2U7XHJcbiAgICBpZiAodHlwZW9mIHlNYXggIT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICB5TWF4ID0geU1heE9mRGF0YXNldHM7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHlNYXhBc3NpZ25lZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoeU1heCA8IHlNaW4pIHtcclxuICAgICAgICBsZXQgeVRtcCA9IHlNaW47XHJcbiAgICAgICAgeU1pbiA9IHlNYXg7XHJcbiAgICAgICAgeU1heCA9IHlUbXA7XHJcbiAgICAgICAgbGV0IHlUbXBBc3NpZ25lZCA9IHlNaW5Bc3NpZ25lZDtcclxuICAgICAgICB5TWluQXNzaWduZWQgPSB5TWF4QXNzaWduZWQ7XHJcbiAgICAgICAgeU1heEFzc2lnbmVkID0geVRtcEFzc2lnbmVkO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB5RXh0ZW50ID0geU1heCAtIHlNaW47XHJcblxyXG4gICAgbGV0IHlTY2FsZSA9IGQzLnNjYWxlTGluZWFyKCk7XHJcbiAgICBsZXQgeUxvd2VyLCB5VXBwZXI7XHJcbiAgICBpZiAoeU1pbkFzc2lnbmVkKSB7XHJcbiAgICAgICAgeUxvd2VyID0geU1pbjtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgeUxvd2VyID0geU1pbiAtIHlFeHRlbnQgKiAwLjI7XHJcbiAgICB9XHJcbiAgICBpZiAoeU1heEFzc2lnbmVkKSB7XHJcbiAgICAgICAgeVVwcGVyID0geU1heDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgeVVwcGVyID0geU1heCArIHlFeHRlbnQgKiAwLjI7XHJcbiAgICB9XHJcbiAgICAvLyBpZiBpdCBpcyBiYXIgY2hhcnQsIHplcm8gbXVzdCBiZSBjb250YWluZWQgaW4gdGhlIHJhbmdlXHJcbiAgICBpZiAoY2hhcnRJbmZvLkdldEdyYXBoVHlwZSgpID09PSBHcmFwaFR5cGUuQmFyKSB7XHJcbiAgICAgICAgaWYgKHlVcHBlciA8IDAuMCkge1xyXG4gICAgICAgICAgICB5VXBwZXIgPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoeUxvd2VyID4gMC4wKSB7XHJcbiAgICAgICAgICAgIHlMb3dlciA9IDAuMDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBsZXQgZG9tYWluID0gW3lMb3dlciwgeVVwcGVyXTtcclxuICAgIGlmIChcclxuICAgICAgICAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIgJiYgY2hhcnRJbmZvLnJldmVyc2VZQXhpc1swXSkgfHxcclxuICAgICAgICAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiICYmIGNoYXJ0SW5mby5yZXZlcnNlWUF4aXNbMV0pXHJcbiAgICApIHtcclxuICAgICAgICBkb21haW4gPSBbeVVwcGVyLCB5TG93ZXJdO1xyXG4gICAgfVxyXG4gICAgeVNjYWxlLmRvbWFpbihkb21haW4pLnJhbmdlKFtyZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQsIDBdKTtcclxuXHJcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgICBjaGFydEVsZW1lbnRzW1wibGVmdFlTY2FsZVwiXSA9IHlTY2FsZTtcclxuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XHJcbiAgICAgICAgY2hhcnRFbGVtZW50c1tcInJpZ2h0WVNjYWxlXCJdID0geVNjYWxlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB5QXhpc0NvbG9yID0gXCJcIjtcclxuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xyXG4gICAgICAgIHlBeGlzQ29sb3IgPSBjaGFydEluZm8ueUF4aXNDb2xvclswXTtcclxuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XHJcbiAgICAgICAgeUF4aXNDb2xvciA9IGNoYXJ0SW5mby55QXhpc0NvbG9yWzFdO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB5QXhpc0xhYmVsQ29sb3IgPSBcIlwiO1xyXG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XHJcbiAgICAgICAgeUF4aXNMYWJlbENvbG9yID0gY2hhcnRJbmZvLnlBeGlzTGFiZWxDb2xvclswXTtcclxuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XHJcbiAgICAgICAgeUF4aXNMYWJlbENvbG9yID0gY2hhcnRJbmZvLnlBeGlzTGFiZWxDb2xvclsxXTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgeUF4aXNMYWJlbFRleHQgPSBcIlwiO1xyXG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XHJcbiAgICAgICAgeUF4aXNMYWJlbFRleHQgPSBjaGFydEluZm8ueUF4aXNMYWJlbFswXTtcclxuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XHJcbiAgICAgICAgeUF4aXNMYWJlbFRleHQgPSBjaGFydEluZm8ueUF4aXNMYWJlbFsxXTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgeUF4aXNVbml0VGV4dCA9IFwiXCI7XHJcbiAgICBsZXQgeUF4aXNUaWNrSW50ZXJ2YWwgPSBudWxsO1xyXG4gICAgbGV0IHlBeGlzVGlja0xhYmVsRm9ybWF0ID0gbnVsbDtcclxuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xyXG4gICAgICAgIHlBeGlzVW5pdFRleHQgPSBjaGFydEluZm8ueUF4aXNVbml0WzBdO1xyXG4gICAgICAgIHlBeGlzVGlja0ludGVydmFsID0gY2hhcnRJbmZvLnlBeGlzVGlja0ludGVydmFsWzBdOyAvLyBzdHJpbmdcclxuICAgICAgICB5QXhpc1RpY2tMYWJlbEZvcm1hdCA9IGNoYXJ0SW5mby55QXhpc1RpY2tMYWJlbEZvcm1hdFswXTtcclxuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XHJcbiAgICAgICAgeUF4aXNVbml0VGV4dCA9IGNoYXJ0SW5mby55QXhpc1VuaXRbMV07XHJcbiAgICAgICAgeUF4aXNUaWNrSW50ZXJ2YWwgPSBjaGFydEluZm8ueUF4aXNUaWNrSW50ZXJ2YWxbMV07IC8vIHN0cmluZ1xyXG4gICAgICAgIHlBeGlzVGlja0xhYmVsRm9ybWF0ID0gY2hhcnRJbmZvLnlBeGlzVGlja0xhYmVsRm9ybWF0WzFdO1xyXG4gICAgfVxyXG4gICAgLy8gZ2V0IGludGVydmFsIGZyb20gc3RyaW5nXHJcbiAgICBsZXQgdGlja0ludGVydmFsID0gbnVsbDtcclxuICAgIGlmICh2YWx1ZUlzVGltZSkge1xyXG4gICAgICAgIHRpY2tJbnRlcnZhbCA9IGhlbHBlci5wYXJzZUR1cmF0aW9uU3RyaW5nKHlBeGlzVGlja0ludGVydmFsKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGlja0ludGVydmFsID0gcGFyc2VGbG9hdCh5QXhpc1RpY2tJbnRlcnZhbCk7XHJcbiAgICAgICAgaWYgKCFOdW1iZXIuaXNOdW1iZXIodGlja0ludGVydmFsKSB8fCBOdW1iZXIuaXNOYU4odGlja0ludGVydmFsKSkge1xyXG4gICAgICAgICAgICB0aWNrSW50ZXJ2YWwgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgeUF4aXNHZW47XHJcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgICB5QXhpc0dlbiA9IGQzLmF4aXNMZWZ0KHlTY2FsZSk7XHJcbiAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xyXG4gICAgICAgIHlBeGlzR2VuID0gZDMuYXhpc1JpZ2h0KHlTY2FsZSk7XHJcbiAgICB9XHJcbiAgICBpZiAoeUF4aXNHZW4pIHtcclxuICAgICAgICBsZXQgdGlja0xhYmVsRm9ybWF0ID0gZ2V0WVRpY2tMYWJlbEZvcm1hdChcclxuICAgICAgICAgICAgeUxvd2VyLFxyXG4gICAgICAgICAgICB5VXBwZXIsXHJcbiAgICAgICAgICAgIHlBeGlzVGlja0xhYmVsRm9ybWF0LFxyXG4gICAgICAgICAgICB2YWx1ZUlzVGltZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHRpY2tMYWJlbEZvcm1hdCkge1xyXG4gICAgICAgICAgICB5QXhpc0dlbi50aWNrRm9ybWF0KHRpY2tMYWJlbEZvcm1hdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCB0aWNrVmFsdWVzID0gZ2V0WVRpY2tWYWx1ZXMoXHJcbiAgICAgICAgICAgIHlMb3dlcixcclxuICAgICAgICAgICAgeVVwcGVyLFxyXG4gICAgICAgICAgICB0aWNrSW50ZXJ2YWwsXHJcbiAgICAgICAgICAgIHZhbHVlSXNUaW1lXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodGlja1ZhbHVlcykge1xyXG4gICAgICAgICAgICB5QXhpc0dlbi50aWNrVmFsdWVzKHRpY2tWYWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgeUF4aXMgPSBjaGFydEVsZW1lbnRzLmRhdGFBcmVhXHJcbiAgICAgICAgLmFwcGVuZChcImdcIilcclxuICAgICAgICAuYXR0cihcImlkXCIsIFwieUF4aXNcIilcclxuICAgICAgICAuY2FsbCh5QXhpc0dlbilcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1heGlzXCIpO1xyXG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT0gXCJyaWdodFwiKSB7XHJcbiAgICAgICAgeUF4aXMuYXR0cihcclxuICAgICAgICAgICAgXCJ0cmFuc2Zvcm1cIixcclxuICAgICAgICAgICAgXCJ0cmFuc2xhdGUoXCIgKyByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArIFwiICwwKVwiXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xyXG4gICAgICAgIGNoYXJ0RWxlbWVudHNbXCJsZWZ0WUF4aXNcIl0gPSB5QXhpcztcclxuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XHJcbiAgICAgICAgY2hhcnRFbGVtZW50c1tcInJpZ2h0WUF4aXNcIl0gPSB5QXhpcztcclxuICAgIH1cclxuXHJcbiAgICBsZXQgeUF4aXNMaW5lID0geUF4aXMuc2VsZWN0QWxsKFwicGF0aFwiKTtcclxuICAgIGlmICh5QXhpc0NvbG9yKSB7XHJcbiAgICAgICAgeUF4aXNMaW5lLnN0eWxlKFwic3Ryb2tlXCIsIHlBeGlzQ29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB5QXhpc1RpY2tzID0geUF4aXMuc2VsZWN0QWxsKFwibGluZVwiKTtcclxuICAgIGlmICh5QXhpc0NvbG9yKSB7XHJcbiAgICAgICAgeUF4aXNUaWNrcy5zdHlsZShcInN0cm9rZVwiLCB5QXhpc0NvbG9yKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgeUF4aXNUaWNrTGFiZWxzID0geUF4aXNcclxuICAgICAgICAuc2VsZWN0QWxsKFwidGV4dFwiKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLXRpY2stbGFiZWxcIik7XHJcbiAgICBpZiAoeUF4aXNDb2xvcikge1xyXG4gICAgICAgIHlBeGlzVGlja0xhYmVscy5zdHlsZShcImZpbGxcIiwgeUF4aXNDb2xvcik7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gR2V0IG1heCB0aWNrIGxhYmVsIHdpZHRoXHJcbiAgICBsZXQgbWF4VGlja0xhYmVsV2lkdGggPSAwO1xyXG4gICAgZm9yIChsZXQgbGFiZWwgb2YgeUF4aXNUaWNrTGFiZWxzKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobGFiZWwudGV4dENvbnRlbnQpO1xyXG4gICAgICAgIGlmIChsYWJlbC50ZXh0Q29udGVudCkge1xyXG4gICAgICAgICAgICBsZXQgbGFiZWxTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShcclxuICAgICAgICAgICAgICAgIGxhYmVsLnRleHRDb250ZW50LFxyXG4gICAgICAgICAgICAgICAgXCJ0cmFja2VyLWF4aXMtbGFiZWxcIlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAobGFiZWxTaXplLndpZHRoID4gbWF4VGlja0xhYmVsV2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIG1heFRpY2tMYWJlbFdpZHRoID0gbGFiZWxTaXplLndpZHRoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2cobWF4VGlja0xhYmVsV2lkdGgpO1xyXG5cclxuICAgIGlmICh5QXhpc1VuaXRUZXh0ICE9PSBcIlwiKSB7XHJcbiAgICAgICAgeUF4aXNMYWJlbFRleHQgKz0gXCIgKFwiICsgeUF4aXNVbml0VGV4dCArIFwiKVwiO1xyXG4gICAgfVxyXG4gICAgbGV0IHlUaWNrTGVuZ3RoID0gNjtcclxuICAgIGxldCB5QXhpc0xhYmVsU2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoeUF4aXNMYWJlbFRleHQpO1xyXG4gICAgbGV0IHlBeGlzTGFiZWwgPSB5QXhpc1xyXG4gICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgLnRleHQoeUF4aXNMYWJlbFRleHQpXHJcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJyb3RhdGUoLTkwKVwiKVxyXG4gICAgICAgIC5hdHRyKFwieFwiLCAoLTEgKiByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQpIC8gMi4wKVxyXG4gICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWF4aXMtbGFiZWxcIik7XHJcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgICB5QXhpc0xhYmVsLmF0dHIoXHJcbiAgICAgICAgICAgIFwieVwiLFxyXG4gICAgICAgICAgICAteVRpY2tMZW5ndGggLSBtYXhUaWNrTGFiZWxXaWR0aCAtIHlBeGlzTGFiZWxTaXplLmhlaWdodCAvIDIuMFxyXG4gICAgICAgICk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHlBeGlzTGFiZWwuYXR0cihcclxuICAgICAgICAgICAgXCJ5XCIsXHJcbiAgICAgICAgICAgICt5VGlja0xlbmd0aCArIG1heFRpY2tMYWJlbFdpZHRoICsgeUF4aXNMYWJlbFNpemUuaGVpZ2h0XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmICh5QXhpc0xhYmVsQ29sb3IpIHtcclxuICAgICAgICB5QXhpc0xhYmVsLnN0eWxlKFwiZmlsbFwiLCB5QXhpc0xhYmVsQ29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCB5QXhpc1dpZHRoID0geUF4aXNMYWJlbFNpemUuaGVpZ2h0ICsgbWF4VGlja0xhYmVsV2lkdGggKyB5VGlja0xlbmd0aDtcclxuICAgIHlBeGlzLmF0dHIoXCJ3aWR0aFwiLCB5QXhpc1dpZHRoKTtcclxuXHJcbiAgICAvLyBFeHBhbmQgYXJlYXNcclxuICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuc3ZnLCB5QXhpc1dpZHRoLCAwKTtcclxuICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLCB5QXhpc1dpZHRoLCAwKTtcclxuXHJcbiAgICAvLyBNb3ZlIGFyZWFzXHJcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgICAvLyBNb3ZlIGRhdGFBcmVhXHJcbiAgICAgICAgaGVscGVyLm1vdmVBcmVhKGNoYXJ0RWxlbWVudHMuZGF0YUFyZWEsIHlBeGlzV2lkdGgsIDApO1xyXG5cclxuICAgICAgICAvLyBNb3ZlIHRpdGxlXHJcbiAgICAgICAgaWYgKGNoYXJ0RWxlbWVudHMudGl0bGUpIHtcclxuICAgICAgICAgICAgaGVscGVyLm1vdmVBcmVhKGNoYXJ0RWxlbWVudHMudGl0bGUsIHlBeGlzV2lkdGgsIDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gcmVuZGVyTGluZShcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgbGluZUluZm86IExpbmVJbmZvLFxyXG4gICAgZGF0YXNldDogRGF0YXNldCxcclxuICAgIHlBeGlzTG9jYXRpb246IHN0cmluZ1xyXG4pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKGRhdGFzZXQpO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XHJcblxyXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFsaW5lSW5mbykgcmV0dXJuO1xyXG5cclxuICAgIGxldCB5U2NhbGU6IGFueSA9IG51bGw7XHJcbiAgICBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgICB5U2NhbGUgPSBjaGFydEVsZW1lbnRzLmxlZnRZU2NhbGU7XHJcbiAgICB9IGVsc2UgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwicmlnaHRcIikge1xyXG4gICAgICAgIHlTY2FsZSA9IGNoYXJ0RWxlbWVudHMucmlnaHRZU2NhbGU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGxpbmVJbmZvLnNob3dMaW5lW2RhdGFzZXQuZ2V0SWQoKV0pIHtcclxuICAgICAgICBsZXQgbGluZUdlbiA9IGQzXHJcbiAgICAgICAgICAgIC5saW5lPERhdGFQb2ludD4oKVxyXG4gICAgICAgICAgICAuZGVmaW5lZChmdW5jdGlvbiAocDogRGF0YVBvaW50KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcC52YWx1ZSAhPT0gbnVsbDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLngoZnVuY3Rpb24gKHA6IERhdGFQb2ludCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJ0RWxlbWVudHMueFNjYWxlKHAuZGF0ZSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC55KGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB5U2NhbGUocC52YWx1ZSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICBsZXQgbGluZSA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcclxuICAgICAgICAgICAgLmFwcGVuZChcInBhdGhcIilcclxuICAgICAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbGluZVwiKVxyXG4gICAgICAgICAgICAuc3R5bGUoXCJzdHJva2Utd2lkdGhcIiwgbGluZUluZm8ubGluZVdpZHRoW2RhdGFzZXQuZ2V0SWQoKV0pO1xyXG5cclxuICAgICAgICBpZiAobGluZUluZm8uZmlsbEdhcFtkYXRhc2V0LmdldElkKCldKSB7XHJcbiAgICAgICAgICAgIGxpbmUuZGF0dW0oXHJcbiAgICAgICAgICAgICAgICBBcnJheS5mcm9tKGRhdGFzZXQpLmZpbHRlcihmdW5jdGlvbiAocCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwLnZhbHVlICE9PSBudWxsO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKS5hdHRyKFwiZFwiLCBsaW5lR2VuIGFzIGFueSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgbGluZS5kYXR1bShkYXRhc2V0KS5hdHRyKFwiZFwiLCBsaW5lR2VuIGFzIGFueSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobGluZUluZm8ubGluZUNvbG9yW2RhdGFzZXQuZ2V0SWQoKV0pIHtcclxuICAgICAgICAgICAgbGluZS5zdHlsZShcInN0cm9rZVwiLCBsaW5lSW5mby5saW5lQ29sb3JbZGF0YXNldC5nZXRJZCgpXSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZW5kZXJQb2ludHMoXHJcbiAgICBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIGxpbmVJbmZvOiBMaW5lSW5mbyxcclxuICAgIGRhdGFzZXQ6IERhdGFzZXQsXHJcbiAgICB5QXhpc0xvY2F0aW9uOiBzdHJpbmdcclxuKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhsaW5lSW5mbyk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0KTtcclxuXHJcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWxpbmVJbmZvKSByZXR1cm47XHJcblxyXG4gICAgbGV0IHlTY2FsZTogYW55ID0gbnVsbDtcclxuICAgIGlmICh5QXhpc0xvY2F0aW9uID09PSBcImxlZnRcIikge1xyXG4gICAgICAgIHlTY2FsZSA9IGNoYXJ0RWxlbWVudHMubGVmdFlTY2FsZTtcclxuICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbiA9PT0gXCJyaWdodFwiKSB7XHJcbiAgICAgICAgeVNjYWxlID0gY2hhcnRFbGVtZW50cy5yaWdodFlTY2FsZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAobGluZUluZm8uc2hvd1BvaW50W2RhdGFzZXQuZ2V0SWQoKV0pIHtcclxuICAgICAgICBsZXQgZG90cyA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWFcclxuICAgICAgICAgICAgLnNlbGVjdEFsbChcImRvdFwiKVxyXG4gICAgICAgICAgICAuZGF0YShcclxuICAgICAgICAgICAgICAgIEFycmF5LmZyb20oZGF0YXNldCkuZmlsdGVyKGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcC52YWx1ZSAhPT0gbnVsbDtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgLmFwcGVuZChcImNpcmNsZVwiKVxyXG4gICAgICAgICAgICAuYXR0cihcInJcIiwgbGluZUluZm8ucG9pbnRTaXplW2RhdGFzZXQuZ2V0SWQoKV0pXHJcbiAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgZnVuY3Rpb24gKHA6IERhdGFQb2ludCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoYXJ0RWxlbWVudHMueFNjYWxlKHAuZGF0ZSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgZnVuY3Rpb24gKHA6IERhdGFQb2ludCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHlTY2FsZShwLnZhbHVlKTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoXCJkYXRlXCIsIGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkMy50aW1lRm9ybWF0KFwiJXktJW0tJWRcIikocC5kYXRlIGFzIGFueSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5hdHRyKFwidmFsdWVcIiwgZnVuY3Rpb24gKHA6IERhdGFQb2ludCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHAudmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihwLnZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcC52YWx1ZS50b0ZpeGVkKDApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcC52YWx1ZS50b0ZpeGVkKDIpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAuYXR0cihcInZhbHVlVHlwZVwiLCBWYWx1ZVR5cGVbZGF0YXNldC52YWx1ZVR5cGVdKVxyXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1kb3RcIik7XHJcbiAgICAgICAgaWYgKGxpbmVJbmZvLnBvaW50Q29sb3JbZGF0YXNldC5nZXRJZCgpXSkge1xyXG4gICAgICAgICAgICBkb3RzLnN0eWxlKFwiZmlsbFwiLCBsaW5lSW5mby5wb2ludENvbG9yW2RhdGFzZXQuZ2V0SWQoKV0pO1xyXG5cclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgbGluZUluZm8ucG9pbnRCb3JkZXJDb2xvcltkYXRhc2V0LmdldElkKCldICYmXHJcbiAgICAgICAgICAgICAgICBsaW5lSW5mby5wb2ludEJvcmRlcldpZHRoW2RhdGFzZXQuZ2V0SWQoKV0gPiAwLjBcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBkb3RzLnN0eWxlKFxyXG4gICAgICAgICAgICAgICAgICAgIFwic3Ryb2tlXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgbGluZUluZm8ucG9pbnRCb3JkZXJDb2xvcltkYXRhc2V0LmdldElkKCldXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgZG90cy5zdHlsZShcclxuICAgICAgICAgICAgICAgICAgICBcInN0cm9rZS13aWR0aFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGxpbmVJbmZvLnBvaW50Qm9yZGVyV2lkdGhbZGF0YXNldC5nZXRJZCgpXVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGxpbmVJbmZvLmFsbG93SW5zcGVjdERhdGEpIHtcclxuICAgICAgICAgICAgcmVuZGVyVG9vbHRpcChkb3RzLCBjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbmRlclRvb2x0aXAoXHJcbiAgICB0YXJnZXRFbGVtZW50czogYW55LFxyXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cclxuKSB7XHJcbiAgICBsZXQgdG9vbHRpcCA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWEuYXBwZW5kKFwic3ZnXCIpLnN0eWxlKFwib3BhY2l0eVwiLCAwKTtcclxuICAgIGxldCB0b29sdGlwQmcgPSB0b29sdGlwLmFwcGVuZChcInJlY3RcIikuYXR0cihcInhcIiwgMCkuYXR0cihcInlcIiwgMCk7XHJcbiAgICBsZXQgdG9vbHRpcExhYmVsID0gdG9vbHRpcC5hcHBlbmQoXCJ0ZXh0XCIpO1xyXG4gICAgbGV0IHRvb2x0aXBMYWJlbERhdGUgPSB0b29sdGlwTGFiZWxcclxuICAgICAgICAuYXBwZW5kKFwidHNwYW5cIilcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10b29sdGlwLWxhYmVsXCIpO1xyXG4gICAgbGV0IHRvb2x0aXBMYWJlbFZhbHVlID0gdG9vbHRpcExhYmVsXHJcbiAgICAgICAgLmFwcGVuZChcInRzcGFuXCIpXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItdG9vbHRpcC1sYWJlbFwiKTtcclxuXHJcbiAgICBsZXQgeFNwYWNpbmcgPSAzO1xyXG4gICAgbGV0IHlTcGFjaW5nID0gMztcclxuXHJcbiAgICB0YXJnZXRFbGVtZW50c1xyXG4gICAgICAgIC5vbihcIm1vdXNlZW50ZXJcIiwgZnVuY3Rpb24gKGV2ZW50OiBhbnkpIHtcclxuICAgICAgICAgICAgY29uc3QgW3gsIHldID0gZDMucG9pbnRlcihldmVudCk7XHJcbiAgICAgICAgICAgIGxldCB0b29sdGlwQmdXaWR0aCA9IDA7XHJcbiAgICAgICAgICAgIGxldCB0b29sdGlwQmdIZWlnaHQgPSAwO1xyXG4gICAgICAgICAgICAvLyBEYXRlXHJcbiAgICAgICAgICAgIGxldCBsYWJlbERhdGVUZXh0ID0gXCJkYXRlOiBcIiArIGQzLnNlbGVjdCh0aGlzKS5hdHRyKFwiZGF0ZVwiKTtcclxuICAgICAgICAgICAgLy8gbGFiZWxEYXRlVGV4dCA9IHgudG9TdHJpbmcoKTsvLyBkZWJ1Z1xyXG4gICAgICAgICAgICBsZXQgbGFiZWxEYXRlU2l6ZSA9IGhlbHBlci5tZWFzdXJlVGV4dFNpemUoXHJcbiAgICAgICAgICAgICAgICBsYWJlbERhdGVUZXh0LFxyXG4gICAgICAgICAgICAgICAgXCJ0cmFja2VyLXRvb2x0aXAtbGFiZWxcIlxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0b29sdGlwTGFiZWxEYXRlLnRleHQobGFiZWxEYXRlVGV4dCk7XHJcbiAgICAgICAgICAgIGlmIChsYWJlbERhdGVTaXplLndpZHRoID4gdG9vbHRpcEJnV2lkdGgpIHtcclxuICAgICAgICAgICAgICAgIHRvb2x0aXBCZ1dpZHRoID0gbGFiZWxEYXRlU2l6ZS53aWR0aDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0b29sdGlwQmdIZWlnaHQgKz0gbGFiZWxEYXRlU2l6ZS5oZWlnaHQ7XHJcbiAgICAgICAgICAgIHRvb2x0aXBMYWJlbERhdGUuYXR0cihcInhcIiwgeFNwYWNpbmcpLmF0dHIoXCJ5XCIsIHRvb2x0aXBCZ0hlaWdodCk7XHJcblxyXG4gICAgICAgICAgICAvLyBWYWx1ZVxyXG4gICAgICAgICAgICBsZXQgbGFiZWxWYWx1ZVRleHQgPSBcInZhbHVlOiBcIjtcclxuICAgICAgICAgICAgbGV0IHZhbHVlVHlwZSA9IGQzLnNlbGVjdCh0aGlzKS5hdHRyKFwidmFsdWVUeXBlXCIpO1xyXG4gICAgICAgICAgICBsZXQgc3RyVmFsdWUgPSBkMy5zZWxlY3QodGhpcykuYXR0cihcInZhbHVlXCIpO1xyXG4gICAgICAgICAgICAvLyBzdHJWYWx1ZSArPSB5LnRvU3RyaW5nKCk7Ly9kZWJ1Z1xyXG4gICAgICAgICAgICBpZiAodmFsdWVUeXBlID09PSBcIlRpbWVcIikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGRheVN0YXJ0ID0gd2luZG93Lm1vbWVudChcIjAwOjAwXCIsIFwiSEg6bW1cIiwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGlja1RpbWUgPSBkYXlTdGFydC5hZGQocGFyc2VGbG9hdChzdHJWYWx1ZSksIFwic2Vjb25kc1wiKTtcclxuICAgICAgICAgICAgICAgIGxldCBkYXRlVmFsdWUgPSB0aWNrVGltZS5mb3JtYXQoXCJISDptbVwiKTtcclxuICAgICAgICAgICAgICAgIGxhYmVsVmFsdWVUZXh0ICs9IGRhdGVWYWx1ZTtcclxuICAgICAgICAgICAgICAgIHRvb2x0aXBMYWJlbFZhbHVlLnRleHQobGFiZWxWYWx1ZVRleHQpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGFiZWxWYWx1ZVRleHQgKz0gc3RyVmFsdWU7XHJcbiAgICAgICAgICAgICAgICB0b29sdGlwTGFiZWxWYWx1ZS50ZXh0KGxhYmVsVmFsdWVUZXh0KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgbGFiZWxWYWx1ZVNpemUgPSBoZWxwZXIubWVhc3VyZVRleHRTaXplKFxyXG4gICAgICAgICAgICAgICAgbGFiZWxWYWx1ZVRleHQsXHJcbiAgICAgICAgICAgICAgICBcInRyYWNrZXItdG9vbHRpcC1sYWJlbFwiXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChsYWJlbFZhbHVlU2l6ZS53aWR0aCA+IHRvb2x0aXBCZ1dpZHRoKSB7XHJcbiAgICAgICAgICAgICAgICB0b29sdGlwQmdXaWR0aCA9IGxhYmVsVmFsdWVTaXplLndpZHRoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRvb2x0aXBCZ0hlaWdodCArPSB5U3BhY2luZyArIGxhYmVsVmFsdWVTaXplLmhlaWdodDtcclxuICAgICAgICAgICAgdG9vbHRpcExhYmVsVmFsdWUuYXR0cihcInhcIiwgeFNwYWNpbmcpLmF0dHIoXCJ5XCIsIHRvb2x0aXBCZ0hlaWdodCk7XHJcblxyXG4gICAgICAgICAgICB0b29sdGlwQmdXaWR0aCArPSAyICogeFNwYWNpbmc7XHJcbiAgICAgICAgICAgIHRvb2x0aXBCZ0hlaWdodCArPSAyICogeVNwYWNpbmc7XHJcbiAgICAgICAgICAgIHRvb2x0aXBMYWJlbFxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCB0b29sdGlwQmdXaWR0aClcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRvb2x0aXBCZ0hlaWdodCk7XHJcblxyXG4gICAgICAgICAgICB0b29sdGlwQmdcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwid2lkdGhcIiwgdG9vbHRpcEJnV2lkdGgpXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcImhlaWdodFwiLCB0b29sdGlwQmdIZWlnaHQpXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10b29sdGlwXCIpO1xyXG5cclxuICAgICAgICAgICAgbGV0IHRvb2x0aXBQb3NYID0geDtcclxuICAgICAgICAgICAgbGV0IHRvb2x0aXBQb3NZID0geTtcclxuICAgICAgICAgICAgbGV0IHRvb2x0aXBYT2Zmc2V0ID0gMTI7XHJcbiAgICAgICAgICAgIGxldCB0b29sdGlwWU9mZnNldCA9IDEyO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICB4ICsgdG9vbHRpcFhPZmZzZXQgKyB0b29sdGlwQmdXaWR0aCA+XHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIC8vIG1vdmUgdG9vbHRpcCB0byBsZWZ0XHJcbiAgICAgICAgICAgICAgICB0b29sdGlwUG9zWCA9IHggLSB0b29sdGlwQmdXaWR0aCAtIHRvb2x0aXBYT2Zmc2V0O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gZGVmYXVsdCBhdCB0aGUgcmlnaHQgc2lkZVxyXG4gICAgICAgICAgICAgICAgdG9vbHRpcFBvc1ggPSB4ICsgdG9vbHRpcFhPZmZzZXQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHkgLSB0b29sdGlwWU9mZnNldCAtIHRvb2x0aXBCZ0hlaWdodCA8IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIGRvd24gc2lkZVxyXG4gICAgICAgICAgICAgICAgdG9vbHRpcFBvc1kgPSB5ICsgdG9vbHRpcFlPZmZzZXQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBkZWZhdWx0IG1vdmUgdG8gdXAgc2lkZVxyXG4gICAgICAgICAgICAgICAgdG9vbHRpcFBvc1kgPSB5IC0gdG9vbHRpcFlPZmZzZXQgLSB0b29sdGlwQmdIZWlnaHQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdG9vbHRpcC5hdHRyKFwieFwiLCB0b29sdGlwUG9zWCkuYXR0cihcInlcIiwgdG9vbHRpcFBvc1kpO1xyXG4gICAgICAgICAgICB0b29sdGlwLnRyYW5zaXRpb24oKS5kdXJhdGlvbigyMDApLnN0eWxlKFwib3BhY2l0eVwiLCAxKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5vbihcIm1vdXNlbGVhdmVcIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0b29sdGlwLnRyYW5zaXRpb24oKS5kdXJhdGlvbig1MDApLnN0eWxlKFwib3BhY2l0eVwiLCAwKTtcclxuICAgICAgICB9KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVuZGVyQmFyKFxyXG4gICAgY2hhcnRFbGVtZW50czogQ2hhcnRFbGVtZW50cyxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBiYXJJbmZvOiBCYXJJbmZvLFxyXG4gICAgZGF0YXNldDogRGF0YXNldCxcclxuICAgIHlBeGlzTG9jYXRpb246IHN0cmluZyxcclxuICAgIGN1cnJCYXJTZXQ6IG51bWJlcixcclxuICAgIHRvdGFsTnVtT2ZCYXJTZXRzOiBudW1iZXJcclxuKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhkYXRhc2V0KTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGJhckluZm8pO1xyXG4gICAgLy8gY29uc29sZS5sb2coXCIlZC8lZFwiLCBjdXJyQmFyU2V0LCB0b3RhbE51bU9mQmFyU2V0cyk7XHJcblxyXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFiYXJJbmZvKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGJhckdhcCA9IDE7XHJcbiAgICBsZXQgYmFyU2V0V2lkdGggPSByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAvIGRhdGFzZXQuZ2V0TGVuZ3RoKCk7XHJcbiAgICBsZXQgYmFyV2lkdGggPSBiYXJTZXRXaWR0aDtcclxuICAgIGlmIChiYXJTZXRXaWR0aCAtIGJhckdhcCA+IDApIHtcclxuICAgICAgICBiYXJXaWR0aCA9IGJhclNldFdpZHRoIC0gYmFyR2FwO1xyXG4gICAgfVxyXG4gICAgYmFyV2lkdGggPSBiYXJXaWR0aCAvIHRvdGFsTnVtT2ZCYXJTZXRzO1xyXG5cclxuICAgIGxldCBwb3J0aW9uTGVmdCA9IChjdXJyQmFyU2V0ICsgMSkgLyB0b3RhbE51bU9mQmFyU2V0cztcclxuXHJcbiAgICBsZXQgeVNjYWxlOiBhbnkgPSBudWxsO1xyXG4gICAgaWYgKHlBeGlzTG9jYXRpb24gPT09IFwibGVmdFwiKSB7XHJcbiAgICAgICAgeVNjYWxlID0gY2hhcnRFbGVtZW50cy5sZWZ0WVNjYWxlO1xyXG4gICAgfSBlbHNlIGlmICh5QXhpc0xvY2F0aW9uID09PSBcInJpZ2h0XCIpIHtcclxuICAgICAgICB5U2NhbGUgPSBjaGFydEVsZW1lbnRzLnJpZ2h0WVNjYWxlO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBiYXJzID0gY2hhcnRFbGVtZW50cy5kYXRhQXJlYVxyXG4gICAgICAgIC5zZWxlY3RBbGwoXCJiYXJcIilcclxuICAgICAgICAuZGF0YShcclxuICAgICAgICAgICAgQXJyYXkuZnJvbShkYXRhc2V0KS5maWx0ZXIoZnVuY3Rpb24gKHA6IERhdGFQb2ludCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHAudmFsdWUgIT09IG51bGw7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgLmFwcGVuZChcInJlY3RcIilcclxuICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24gKHA6IERhdGFQb2ludCwgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgIGlmIChpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcG9ydGlvblZpc2libGUgPSBjdXJyQmFyU2V0ICsgMSAtIHRvdGFsTnVtT2ZCYXJTZXRzIC8gMi4wO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBvcnRpb25WaXNpYmxlIDwgMS4wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnRFbGVtZW50cy54U2NhbGUocC5kYXRlKSAtXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhclNldFdpZHRoIC8gMi4wICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VyckJhclNldCAqIGJhcldpZHRoICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9ydGlvblZpc2libGUgKiBiYXJXaWR0aFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMueFNjYWxlKHAuZGF0ZSkgLVxyXG4gICAgICAgICAgICAgICAgYmFyU2V0V2lkdGggLyAyLjAgK1xyXG4gICAgICAgICAgICAgICAgY3VyckJhclNldCAqIGJhcldpZHRoXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cihcInlcIiwgZnVuY3Rpb24gKHA6IERhdGFQb2ludCkge1xyXG4gICAgICAgICAgICByZXR1cm4geVNjYWxlKE1hdGgubWF4KHAudmFsdWUsIDApKTtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgZnVuY3Rpb24gKHA6IERhdGFQb2ludCwgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgIGlmIChpID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgcG9ydGlvblZpc2libGUgPSBjdXJyQmFyU2V0ICsgMSAtIHRvdGFsTnVtT2ZCYXJTZXRzIC8gMi4wO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBvcnRpb25WaXNpYmxlIDwgMC4wKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMDtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocG9ydGlvblZpc2libGUgPCAxLjApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFyV2lkdGggKiBwb3J0aW9uVmlzaWJsZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBiYXJXaWR0aDtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChpID09PSBkYXRhc2V0LmdldExlbmd0aCgpIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBvcnRpb25WaXNpYmxlID1cclxuICAgICAgICAgICAgICAgICAgICAxLjAgLSAoY3VyckJhclNldCArIDEgLSB0b3RhbE51bU9mQmFyU2V0cyAvIDIuMCk7XHJcbiAgICAgICAgICAgICAgICBpZiAocG9ydGlvblZpc2libGUgPCAwLjApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMC4wO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwb3J0aW9uVmlzaWJsZSA8IDEuMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXJXaWR0aCAqIHBvcnRpb25WaXNpYmxlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJhcldpZHRoO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBiYXJXaWR0aDtcclxuICAgICAgICB9KVxyXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIGZ1bmN0aW9uIChwOiBEYXRhUG9pbnQpIHtcclxuICAgICAgICAgICAgaWYgKHAudmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLmFicyh5U2NhbGUocC52YWx1ZSkgLSB5U2NhbGUoMCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1iYXJcIik7XHJcblxyXG4gICAgaWYgKGJhckluZm8uYmFyQ29sb3JbZGF0YXNldC5nZXRJZCgpXSkge1xyXG4gICAgICAgIGJhcnMuc3R5bGUoXCJmaWxsXCIsIGJhckluZm8uYmFyQ29sb3JbZGF0YXNldC5nZXRJZCgpXSk7XHJcbiAgICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbmRlckxlZ2VuZChcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgY2hhcnRJbmZvOiBDb21tb25DaGFydEluZm9cclxuKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhjaGFydEluZm8ubGVnZW5kUG9zaXRpb24pO1xyXG4gICAgLy8gY29uc29sZS5sb2coY2hhcnRJbmZvLmxlZ2VuZE9yaWVudGF0aW9uKTtcclxuXHJcbiAgICAvLyBHZXQgY2hhcnQgZWxlbWVudHNcclxuICAgIGxldCBzdmcgPSBjaGFydEVsZW1lbnRzLnN2ZztcclxuICAgIGxldCBncmFwaEFyZWEgPSBjaGFydEVsZW1lbnRzLmdyYXBoQXJlYTtcclxuICAgIGxldCBkYXRhQXJlYSA9IGNoYXJ0RWxlbWVudHMuZGF0YUFyZWE7XHJcbiAgICBsZXQgdGl0bGUgPSBjaGFydEVsZW1lbnRzLnRpdGxlO1xyXG4gICAgbGV0IHhBeGlzID0gY2hhcnRFbGVtZW50cy54QXhpcztcclxuICAgIGxldCBsZWZ0WUF4aXMgPSBjaGFydEVsZW1lbnRzLmxlZnRZQXhpcztcclxuICAgIGxldCByaWdodFlBeGlzID0gY2hhcnRFbGVtZW50cy5yaWdodFlBeGlzO1xyXG5cclxuICAgIC8vIEdldCBlbGVtZW50IHdpZHRoIGFuZCBoZWlnaHRcclxuICAgIGxldCB0aXRsZUhlaWdodCA9IDAuMDtcclxuICAgIGlmICh0aXRsZSkge1xyXG4gICAgICAgIHRpdGxlSGVpZ2h0ID0gcGFyc2VGbG9hdCh0aXRsZS5hdHRyKFwiaGVpZ2h0XCIpKTtcclxuICAgIH1cclxuICAgIGxldCB4QXhpc0hlaWdodCA9IHBhcnNlRmxvYXQoeEF4aXMuYXR0cihcImhlaWdodFwiKSk7XHJcbiAgICBsZXQgbGVmdFlBeGlzV2lkdGggPSAwLjA7XHJcbiAgICBpZiAobGVmdFlBeGlzKSB7XHJcbiAgICAgICAgbGVmdFlBeGlzV2lkdGggPSBwYXJzZUZsb2F0KGxlZnRZQXhpcy5hdHRyKFwid2lkdGhcIikpO1xyXG4gICAgfVxyXG4gICAgbGV0IHJpZ2h0WUF4aXNXaWR0aCA9IDAuMDtcclxuICAgIGlmIChyaWdodFlBeGlzKSB7XHJcbiAgICAgICAgcmlnaHRZQXhpc1dpZHRoID0gcGFyc2VGbG9hdChyaWdodFlBeGlzLmF0dHIoXCJ3aWR0aFwiKSk7XHJcbiAgICB9XHJcbiAgICAvLyBHZXQgZGF0YXNldHNcclxuICAgIGxldCBkYXRhc2V0cyA9IHJlbmRlckluZm8uZGF0YXNldHM7XHJcbiAgICBsZXQgeERhdGFzZXRJZHMgPSBkYXRhc2V0cy5nZXRYRGF0YXNldElkcygpO1xyXG4gICAgLy8gY29uc29sZS5sb2coeERhdGFzZXRJZHMpO1xyXG5cclxuICAgIC8vIEdldCBuYW1lcyBhbmQgdGhlaXIgZGltZW5zaW9uXHJcbiAgICBsZXQgbmFtZXMgPSBkYXRhc2V0cy5nZXROYW1lcygpOyAvLyB4RGF0YXNldCBuYW1lIGluY2x1ZGVkXHJcbiAgICBsZXQgbmFtZVNpemVzID0gbmFtZXMubWFwKGZ1bmN0aW9uIChuKSB7XHJcbiAgICAgICAgcmV0dXJuIGhlbHBlci5tZWFzdXJlVGV4dFNpemUobiwgXCJ0cmFja2VyLWxlZ2VuZC1sYWJlbFwiKTtcclxuICAgIH0pO1xyXG4gICAgbGV0IGluZE1heE5hbWUgPSAwO1xyXG4gICAgbGV0IG1heE5hbWVXaWR0aCA9IDAuMDtcclxuICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IG5hbWVzLmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaW5kKSkgY29udGludWU7XHJcbiAgICAgICAgaWYgKG5hbWVTaXplc1tpbmRdLndpZHRoID4gbWF4TmFtZVdpZHRoKSB7XHJcbiAgICAgICAgICAgIG1heE5hbWVXaWR0aCA9IG5hbWVTaXplc1tpbmRdLndpZHRoO1xyXG4gICAgICAgICAgICBpbmRNYXhOYW1lID0gaW5kO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGxldCBtYXhOYW1lID0gbmFtZXNbaW5kTWF4TmFtZV07XHJcbiAgICBsZXQgY2hhcmFjdGVyV2lkdGggPSBtYXhOYW1lV2lkdGggLyBtYXhOYW1lLmxlbmd0aDtcclxuICAgIGxldCBuYW1lSGVpZ2h0ID0gbmFtZVNpemVzW2luZE1heE5hbWVdLmhlaWdodDtcclxuICAgIGxldCBudW1OYW1lcyA9IG5hbWVzLmxlbmd0aCAtIHhEYXRhc2V0SWRzLmxlbmd0aDtcclxuXHJcbiAgICBsZXQgeFNwYWNpbmcgPSAyICogY2hhcmFjdGVyV2lkdGg7XHJcbiAgICBsZXQgeVNwYWNpbmcgPSBuYW1lSGVpZ2h0O1xyXG4gICAgbGV0IG1hcmtlcldpZHRoID0gMiAqIGNoYXJhY3RlcldpZHRoO1xyXG5cclxuICAgIC8vIEdldCBsZWdlbmQgd2lkdGggYW5kIGhlaWdodFxyXG4gICAgbGV0IGxlZ2VuZFdpZHRoID0gMDtcclxuICAgIGxldCBsZWdlbmRIZWlnaHQgPSAwO1xyXG4gICAgaWYgKGNoYXJ0SW5mby5sZWdlbmRPcmllbnRhdGlvbiA9PT0gXCJ2ZXJ0aWNhbFwiKSB7XHJcbiAgICAgICAgbGVnZW5kV2lkdGggPSB4U3BhY2luZyAqIDMgKyBtYXJrZXJXaWR0aCArIG1heE5hbWVXaWR0aDtcclxuICAgICAgICBsZWdlbmRIZWlnaHQgPSAobnVtTmFtZXMgKyAxKSAqIHlTcGFjaW5nO1xyXG4gICAgfSBlbHNlIGlmIChjaGFydEluZm8ubGVnZW5kT3JpZW50YXRpb24gPT09IFwiaG9yaXpvbnRhbFwiKSB7XHJcbiAgICAgICAgbGVnZW5kV2lkdGggPVxyXG4gICAgICAgICAgICAoMiAqIHhTcGFjaW5nICsgbWFya2VyV2lkdGgpICogbnVtTmFtZXMgK1xyXG4gICAgICAgICAgICB4U3BhY2luZyArXHJcbiAgICAgICAgICAgIGQzLnN1bShuYW1lU2l6ZXMsIGZ1bmN0aW9uIChzLCBpKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybiAwO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHMud2lkdGg7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIGxlZ2VuZEhlaWdodCA9IHlTcGFjaW5nICsgbmFtZUhlaWdodDtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKFxyXG4gICAgLy8gICAgIGBtYXhOYW1lOiAke21heE5hbWV9LCBjaGFyYWN0ZXJXaWR0aDogJHtjaGFyYWN0ZXJXaWR0aH0sIG1heE5hbWVXaWR0aDogJHttYXhOYW1lV2lkdGh9YFxyXG4gICAgLy8gKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGB4U3BhY2luZzoke3hTcGFjaW5nfSwgbnVtTmFtZXM6ICR7bnVtTmFtZXN9LCBtYXJrZXJXaWR0aDogJHttYXJrZXJXaWR0aH1gKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGBsZWdlbmRXaWR0aDogJHtsZWdlbmRXaWR0aH0sIGxlZ2VuZEhlaWdodDogJHtsZWdlbmRIZWlnaHR9YCk7XHJcblxyXG4gICAgLy8gQ2FsY3VhbHRlIGxlbmdlbmRYIGFuZCBsZWdlbmRZXHJcbiAgICBsZXQgbGVnZW5kWCA9IDAuMDsgLy8gcmVsYXRpdmUgdG8gZ3JhcGhBcmVhXHJcbiAgICBsZXQgbGVnZW5kWSA9IDAuMDtcclxuICAgIGlmIChjaGFydEluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwidG9wXCIpIHtcclxuICAgICAgICAvLyBiZWxvdyB0aXRsZVxyXG4gICAgICAgIGxlZ2VuZFggPVxyXG4gICAgICAgICAgICBsZWZ0WUF4aXNXaWR0aCArXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMi4wIC1cclxuICAgICAgICAgICAgbGVnZW5kV2lkdGggLyAyLjA7XHJcbiAgICAgICAgbGVnZW5kWSA9IHRpdGxlSGVpZ2h0O1xyXG4gICAgICAgIC8vIEV4cGFuZCBzdmdcclxuICAgICAgICBoZWxwZXIuZXhwYW5kQXJlYShzdmcsIDAsIGxlZ2VuZEhlaWdodCArIHlTcGFjaW5nKTtcclxuICAgICAgICAvLyBNb3ZlIGRhdGFBcmVhIGRvd25cclxuICAgICAgICBoZWxwZXIubW92ZUFyZWEoZGF0YUFyZWEsIDAsIGxlZ2VuZEhlaWdodCArIHlTcGFjaW5nKTtcclxuICAgIH0gZWxzZSBpZiAoY2hhcnRJbmZvLmxlZ2VuZFBvc2l0aW9uID09PSBcImJvdHRvbVwiKSB7XHJcbiAgICAgICAgLy8gYmVsbG93IHgtYXhpcyBsYWJlbFxyXG4gICAgICAgIGxlZ2VuZFggPVxyXG4gICAgICAgICAgICBsZWZ0WUF4aXNXaWR0aCArXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoIC8gMi4wIC1cclxuICAgICAgICAgICAgbGVnZW5kV2lkdGggLyAyLjA7XHJcbiAgICAgICAgbGVnZW5kWSA9XHJcbiAgICAgICAgICAgIHRpdGxlSGVpZ2h0ICtcclxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICtcclxuICAgICAgICAgICAgeEF4aXNIZWlnaHQgK1xyXG4gICAgICAgICAgICB5U3BhY2luZztcclxuICAgICAgICAvLyBFeHBhbmQgc3ZnXHJcbiAgICAgICAgaGVscGVyLmV4cGFuZEFyZWEoc3ZnLCAwLCBsZWdlbmRIZWlnaHQgKyB5U3BhY2luZyk7XHJcbiAgICB9IGVsc2UgaWYgKGNoYXJ0SW5mby5sZWdlbmRQb3NpdGlvbiA9PT0gXCJsZWZ0XCIpIHtcclxuICAgICAgICBsZWdlbmRYID0gMDtcclxuICAgICAgICBsZWdlbmRZID1cclxuICAgICAgICAgICAgdGl0bGVIZWlnaHQgK1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgLyAyLjAgLVxyXG4gICAgICAgICAgICBsZWdlbmRIZWlnaHQgLyAyLjA7XHJcbiAgICAgICAgLy8gRXhwYW5kIHN2Z1xyXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKHN2ZywgbGVnZW5kV2lkdGggKyB4U3BhY2luZywgMCk7XHJcbiAgICAgICAgLy8gTW92ZSBkYXRhQXJlYSByaWdodFxyXG4gICAgICAgIGhlbHBlci5tb3ZlQXJlYShkYXRhQXJlYSwgbGVnZW5kV2lkdGggKyB4U3BhY2luZywgMCk7XHJcbiAgICB9IGVsc2UgaWYgKGNoYXJ0SW5mby5sZWdlbmRQb3NpdGlvbiA9PT0gXCJyaWdodFwiKSB7XHJcbiAgICAgICAgbGVnZW5kWCA9XHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0YUFyZWFTaXplLndpZHRoICtcclxuICAgICAgICAgICAgbGVmdFlBeGlzV2lkdGggK1xyXG4gICAgICAgICAgICByaWdodFlBeGlzV2lkdGggK1xyXG4gICAgICAgICAgICB4U3BhY2luZztcclxuICAgICAgICBsZWdlbmRZID1cclxuICAgICAgICAgICAgdGl0bGVIZWlnaHQgK1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgLyAyLjAgLVxyXG4gICAgICAgICAgICBsZWdlbmRIZWlnaHQgLyAyLjA7XHJcbiAgICAgICAgLy8gRXhwYW5kIHN2Z1xyXG4gICAgICAgIGhlbHBlci5leHBhbmRBcmVhKHN2ZywgbGVnZW5kV2lkdGggKyB4U3BhY2luZywgMCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKGBsZWdlbmRYOiAke2xlZ2VuZFh9LCBsZWdlbmRZOiAke2xlZ2VuZFl9YCk7XHJcblxyXG4gICAgbGV0IGxlZ2VuZCA9IGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhXHJcbiAgICAgICAgLmFwcGVuZChcImdcIilcclxuICAgICAgICAuYXR0cihcImlkXCIsIFwibGVnZW5kXCIpXHJcbiAgICAgICAgLmF0dHIoXCJ0cmFuc2Zvcm1cIiwgXCJ0cmFuc2xhdGUoXCIgKyBsZWdlbmRYICsgXCIsXCIgKyBsZWdlbmRZICsgXCIpXCIpO1xyXG4gICAgLy8gY29uc29sZS5sb2coJ2xlZ2VuZFg6ICVkLCBsZWdlbmRZOiAlZCcsIGxlZ2VuZFgsIGxlZ2VuZFkpO1xyXG5cclxuICAgIGxldCBsZWdlbmRCZyA9IGxlZ2VuZFxyXG4gICAgICAgIC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgICAgLmF0dHIoXCJjbGFzc1wiLCBcInRyYWNrZXItbGVnZW5kXCIpXHJcbiAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBsZWdlbmRXaWR0aClcclxuICAgICAgICAuYXR0cihcImhlaWdodFwiLCBsZWdlbmRIZWlnaHQpO1xyXG4gICAgaWYgKGNoYXJ0SW5mby5sZWdlbmRCZ0NvbG9yKSB7XHJcbiAgICAgICAgbGVnZW5kQmcuc3R5bGUoXCJmaWxsXCIsIGNoYXJ0SW5mby5sZWdlbmRCZ0NvbG9yKTtcclxuICAgIH1cclxuICAgIGlmIChjaGFydEluZm8ubGVnZW5kQm9yZGVyQ29sb3IpIHtcclxuICAgICAgICBsZWdlbmRCZy5zdHlsZShcInN0cm9rZVwiLCBjaGFydEluZm8ubGVnZW5kQm9yZGVyQ29sb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBmaXJzdE1hcmtlclggPSB4U3BhY2luZztcclxuICAgIGxldCBmaXJzdE1hcmtlclkgPSBuYW1lSGVpZ2h0O1xyXG4gICAgbGV0IGZpcnN0TGFiZWxYID0gZmlyc3RNYXJrZXJYICsgeFNwYWNpbmcgKyBtYXJrZXJXaWR0aDsgLy8geFNwYWNpbmcgKyAyICogeFNwYWluZ1xyXG4gICAgbGV0IGZpcnN0TGFiZWxZID0gZmlyc3RNYXJrZXJZO1xyXG5cclxuICAgIGlmIChjaGFydEluZm8ubGVnZW5kT3JpZW50YXRpb24gPT09IFwidmVydGljYWxcIikge1xyXG4gICAgICAgIGlmIChjaGFydEluZm8uR2V0R3JhcGhUeXBlKCkgPT09IEdyYXBoVHlwZS5MaW5lKSB7XHJcbiAgICAgICAgICAgIC8vIGxpbmVzXHJcbiAgICAgICAgICAgIGxlZ2VuZFxyXG4gICAgICAgICAgICAgICAgLnNlbGVjdEFsbChcIm1hcmtlcnNcIilcclxuICAgICAgICAgICAgICAgIC5kYXRhKG5hbWVzKVxyXG4gICAgICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJsaW5lXCIpXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcIngxXCIsIGZpcnN0TWFya2VyWClcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwieDJcIiwgZmlyc3RNYXJrZXJYICsgbWFya2VyV2lkdGgpXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcInkxXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBudW1FbGVtc0V4Y2x1ZGVkID0geERhdGFzZXRJZHMuZmlsdGVyKChpZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWQgPCBpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICBpID0gaSAtIG51bUVsZW1zRXhjbHVkZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0TWFya2VyWSArIGkgKiB5U3BhY2luZztcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcInkyXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBudW1FbGVtc0V4Y2x1ZGVkID0geERhdGFzZXRJZHMuZmlsdGVyKChpZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWQgPCBpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICBpID0gaSAtIG51bUVsZW1zRXhjbHVkZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0TWFya2VyWSArIGkgKiB5U3BhY2luZztcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJzdHJva2VcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgTGluZUluZm8pLmxpbmVDb2xvcltpXTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gcG9pbnRzXHJcbiAgICAgICAgICAgIGxlZ2VuZFxyXG4gICAgICAgICAgICAgICAgLnNlbGVjdEFsbChcIm1hcmtlcnNcIilcclxuICAgICAgICAgICAgICAgIC5kYXRhKG5hbWVzKVxyXG4gICAgICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJjaXJjbGVcIilcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY3hcIiwgZmlyc3RNYXJrZXJYICsgbWFya2VyV2lkdGggLyAyLjApXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcImN5XCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBudW1FbGVtc0V4Y2x1ZGVkID0geERhdGFzZXRJZHMuZmlsdGVyKChpZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWQgPCBpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICBpID0gaSAtIG51bUVsZW1zRXhjbHVkZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0TWFya2VyWSArIGkgKiB5U3BhY2luZztcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcInJcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKChjaGFydEluZm8gYXMgTGluZUluZm8pLnNob3dQb2ludFtpXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGNoYXJ0SW5mbyBhcyBMaW5lSW5mbykucG9pbnRTaXplW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gMC4wO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgTGluZUluZm8pLnBvaW50Q29sb3JbaV07XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNoYXJ0SW5mby5HZXRHcmFwaFR5cGUoKSA9PT0gR3JhcGhUeXBlLkJhcikge1xyXG4gICAgICAgICAgICAvLyBiYXJzXHJcbiAgICAgICAgICAgIGxlZ2VuZFxyXG4gICAgICAgICAgICAgICAgLnNlbGVjdEFsbChcIm1hcmtlcnNcIilcclxuICAgICAgICAgICAgICAgIC5kYXRhKG5hbWVzKVxyXG4gICAgICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcInhcIiwgZmlyc3RNYXJrZXJYKVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBudW1FbGVtc0V4Y2x1ZGVkID0geERhdGFzZXRJZHMuZmlsdGVyKChpZCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaWQgPCBpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICBpID0gaSAtIG51bUVsZW1zRXhjbHVkZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0TWFya2VyWSArIGkgKiB5U3BhY2luZyAtIG5hbWVIZWlnaHQgLyAyLjA7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ3aWR0aFwiLCBtYXJrZXJXaWR0aClcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIG5hbWVIZWlnaHQpXHJcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcnRJbmZvIGFzIEJhckluZm8pLmJhckNvbG9yW2ldO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBuYW1lc1xyXG4gICAgICAgIGxldCBuYW1lTGFiZWxzID0gbGVnZW5kXHJcbiAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJsYWJlbHNcIilcclxuICAgICAgICAgICAgLmRhdGEobmFtZXMpXHJcbiAgICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAgIC5hcHBlbmQoXCJ0ZXh0XCIpXHJcbiAgICAgICAgICAgIC5hdHRyKFwieFwiLCBmaXJzdExhYmVsWClcclxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgbGV0IG51bUVsZW1zRXhjbHVkZWQgPSB4RGF0YXNldElkcy5maWx0ZXIoKGlkKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlkIDwgaTtcclxuICAgICAgICAgICAgICAgIH0pLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgIGkgPSBpIC0gbnVtRWxlbXNFeGNsdWRlZDtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmaXJzdExhYmVsWSArIGkgKiB5U3BhY2luZztcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnRleHQoZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybiBcIlwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5hbWU7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIC5zdHlsZShcImFsaWdubWVudC1iYXNlbGluZVwiLCBcIm1pZGRsZVwiKVxyXG4gICAgICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci1sZWdlbmQtbGFiZWxcIik7XHJcblxyXG4gICAgICAgIGlmIChjaGFydEluZm8uR2V0R3JhcGhUeXBlKCkgPT09IEdyYXBoVHlwZS5MaW5lKSB7XHJcbiAgICAgICAgICAgIG5hbWVMYWJlbHMuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKGNoYXJ0SW5mbyBhcyBMaW5lSW5mbykubGluZUNvbG9yW2ldO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKGNoYXJ0SW5mby5HZXRHcmFwaFR5cGUoKSA9PT0gR3JhcGhUeXBlLkJhcikge1xyXG4gICAgICAgICAgICBuYW1lTGFiZWxzLnN0eWxlKFwiZmlsbFwiLCBmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgQmFySW5mbykuYmFyQ29sb3JbaV07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAoY2hhcnRJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID09PSBcImhvcml6b250YWxcIikge1xyXG4gICAgICAgIGlmIChjaGFydEluZm8uR2V0R3JhcGhUeXBlKCkgPT09IEdyYXBoVHlwZS5MaW5lKSB7XHJcbiAgICAgICAgICAgIC8vIGxpbmVzXHJcbiAgICAgICAgICAgIGxlZ2VuZFxyXG4gICAgICAgICAgICAgICAgLnNlbGVjdEFsbChcIm1hcmtlcnNcIilcclxuICAgICAgICAgICAgICAgIC5kYXRhKG5hbWVzKVxyXG4gICAgICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJsaW5lXCIpXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcIngxXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3NYID0geFNwYWNpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgW2luZCwgc2l6ZV0gb2YgbmFtZVNpemVzLmVudHJpZXMoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaW5kKSkgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmQgPCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NYICs9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFya2VyV2lkdGggKyB4U3BhY2luZyArIHNpemUud2lkdGggKyB4U3BhY2luZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NYO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwieDJcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvc1ggPSB4U3BhY2luZyArIG1hcmtlcldpZHRoO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IFtpbmQsIHNpemVdIG9mIG5hbWVTaXplcy5lbnRyaWVzKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGluZCkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kIDwgaSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zWCArPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhTcGFjaW5nICsgc2l6ZS53aWR0aCArIHhTcGFjaW5nICsgbWFya2VyV2lkdGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcG9zWDtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcInkxXCIsIGZpcnN0TWFya2VyWSlcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwieTJcIiwgZmlyc3RNYXJrZXJZKVxyXG4gICAgICAgICAgICAgICAgLnN0eWxlKFwic3Ryb2tlXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcnRJbmZvIGFzIExpbmVJbmZvKS5saW5lQ29sb3JbaV07XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIHBvaW50c1xyXG4gICAgICAgICAgICBsZWdlbmRcclxuICAgICAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJtYXJrZXJzXCIpXHJcbiAgICAgICAgICAgICAgICAuZGF0YShuYW1lcylcclxuICAgICAgICAgICAgICAgIC5lbnRlcigpXHJcbiAgICAgICAgICAgICAgICAuYXBwZW5kKFwiY2lyY2xlXCIpXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcImN4XCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwb3NYID0geFNwYWNpbmcgKyBtYXJrZXJXaWR0aCAvIDIuMDtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBbaW5kLCBzaXplXSBvZiBuYW1lU2l6ZXMuZW50cmllcygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpbmQpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZCA8IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc1ggKz1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJXaWR0aCAvIDIuMCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFNwYWNpbmcgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemUud2lkdGggK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhTcGFjaW5nICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJXaWR0aCAvIDIuMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NYO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIC5hdHRyKFwiY3lcIiwgZmlyc3RNYXJrZXJZKVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJyXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICgoY2hhcnRJbmZvIGFzIExpbmVJbmZvKS5zaG93UG9pbnRbaV0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgTGluZUluZm8pLnBvaW50U2l6ZVtpXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDAuMDtcclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcnRJbmZvIGFzIExpbmVJbmZvKS5wb2ludENvbG9yW2ldO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChjaGFydEluZm8uR2V0R3JhcGhUeXBlKCkgPT09IEdyYXBoVHlwZS5CYXIpIHtcclxuICAgICAgICAgICAgLy8gYmFyc1xyXG4gICAgICAgICAgICBsZWdlbmRcclxuICAgICAgICAgICAgICAgIC5zZWxlY3RBbGwoXCJtYXJrZXJzXCIpXHJcbiAgICAgICAgICAgICAgICAuZGF0YShcclxuICAgICAgICAgICAgICAgICAgICBuYW1lcy5maWx0ZXIoKG4sIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICF4RGF0YXNldElkcy5pbmNsdWRlcyhpKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgICAgIC5hcHBlbmQoXCJyZWN0XCIpXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcInhcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBvc1ggPSB4U3BhY2luZztcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBbaW5kLCBzaXplXSBvZiBuYW1lU2l6ZXMuZW50cmllcygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpbmQpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZCA8IGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc1ggKz1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJXaWR0aCArIHhTcGFjaW5nICsgc2l6ZS53aWR0aCArIHhTcGFjaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc1g7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGZpcnN0TWFya2VyWSAtIG5hbWVIZWlnaHQgLyAyLjApXHJcbiAgICAgICAgICAgICAgICAuYXR0cihcIndpZHRoXCIsIG1hcmtlcldpZHRoKVxyXG4gICAgICAgICAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbmFtZUhlaWdodClcclxuICAgICAgICAgICAgICAgIC5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChjaGFydEluZm8gYXMgQmFySW5mbykuYmFyQ29sb3JbaV07XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG5hbWVzXHJcbiAgICAgICAgbGV0IG5hbWVMYWJlbHMgPSBsZWdlbmRcclxuICAgICAgICAgICAgLnNlbGVjdEFsbChcImxhYmVsc1wiKVxyXG4gICAgICAgICAgICAuZGF0YShuYW1lcylcclxuICAgICAgICAgICAgLmVudGVyKClcclxuICAgICAgICAgICAgLmFwcGVuZChcInRleHRcIilcclxuICAgICAgICAgICAgLmF0dHIoXCJ4XCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBvc1ggPSB4U3BhY2luZyArIG1hcmtlcldpZHRoICsgeFNwYWNpbmc7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBbaW5kLCBzaXplXSBvZiBuYW1lU2l6ZXMuZW50cmllcygpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGluZCkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmQgPCBpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc1ggKz0gc2l6ZS53aWR0aCArIHhTcGFjaW5nICsgbWFya2VyV2lkdGggKyB4U3BhY2luZztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcG9zWDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLmF0dHIoXCJ5XCIsIGZpcnN0TGFiZWxZKVxyXG4gICAgICAgICAgICAudGV4dChmdW5jdGlvbiAobmFtZTogc3RyaW5nLCBpOiBudW1iZXIpIHtcclxuICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpKSkgcmV0dXJuIFwiXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmFtZTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgLnN0eWxlKFwiYWxpZ25tZW50LWJhc2VsaW5lXCIsIFwibWlkZGxlXCIpXHJcbiAgICAgICAgICAgIC5hdHRyKFwiY2xhc3NcIiwgXCJ0cmFja2VyLWxlZ2VuZC1sYWJlbFwiKTtcclxuXHJcbiAgICAgICAgaWYgKGNoYXJ0SW5mby5HZXRHcmFwaFR5cGUoKSA9PT0gR3JhcGhUeXBlLkxpbmUpIHtcclxuICAgICAgICAgICAgbmFtZUxhYmVscy5zdHlsZShcImZpbGxcIiwgZnVuY3Rpb24gKG5hbWU6IHN0cmluZywgaTogbnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoeERhdGFzZXRJZHMuaW5jbHVkZXMoaSkpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIHJldHVybiAoY2hhcnRJbmZvIGFzIExpbmVJbmZvKS5saW5lQ29sb3JbaV07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoY2hhcnRJbmZvLkdldEdyYXBoVHlwZSgpID09PSBHcmFwaFR5cGUuQmFyKSB7XHJcbiAgICAgICAgICAgIG5hbWVMYWJlbHMuc3R5bGUoXCJmaWxsXCIsIGZ1bmN0aW9uIChuYW1lOiBzdHJpbmcsIGk6IG51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgaWYgKHhEYXRhc2V0SWRzLmluY2x1ZGVzKGkpKSByZXR1cm47XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gKGNoYXJ0SW5mbyBhcyBCYXJJbmZvKS5iYXJDb2xvcltpXTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiByZW5kZXJUaXRsZShcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgY2hhcnRJbmZvOiBDb21tb25DaGFydEluZm9cclxuKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInJlbmRlclRpdGxlXCIpXHJcbiAgICAvLyB1bmRlciBncmFwaEFyZWFcclxuXHJcbiAgICBpZiAoIXJlbmRlckluZm8gfHwgIWNoYXJ0SW5mbykgcmV0dXJuO1xyXG5cclxuICAgIGlmICghY2hhcnRJbmZvLnRpdGxlKSByZXR1cm47XHJcbiAgICBsZXQgdGl0bGVTaXplID0gaGVscGVyLm1lYXN1cmVUZXh0U2l6ZShjaGFydEluZm8udGl0bGUsIFwidHJhY2tlci10aXRsZVwiKTtcclxuXHJcbiAgICAvLyBBcHBlbmQgdGl0bGVcclxuICAgIGxldCB0aXRsZSA9IGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhXHJcbiAgICAgICAgLmFwcGVuZChcInRleHRcIilcclxuICAgICAgICAudGV4dChjaGFydEluZm8udGl0bGUpIC8vIHBpdm90IGF0IGNlbnRlclxyXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJ0aXRsZVwiKVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICBcInRyYW5zZm9ybVwiLFxyXG4gICAgICAgICAgICBcInRyYW5zbGF0ZShcIiArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCAvIDIuMCArXHJcbiAgICAgICAgICAgICAgICBcIixcIiArXHJcbiAgICAgICAgICAgICAgICB0aXRsZVNpemUuaGVpZ2h0IC8gMi4wICtcclxuICAgICAgICAgICAgICAgIFwiKVwiXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5hdHRyKFwiaGVpZ2h0XCIsIHRpdGxlU2l6ZS5oZWlnaHQpIC8vIGZvciBsYXRlciB1c2VcclxuICAgICAgICAuYXR0cihcImNsYXNzXCIsIFwidHJhY2tlci10aXRsZVwiKTtcclxuICAgIGNoYXJ0RWxlbWVudHNbXCJ0aXRsZVwiXSA9IHRpdGxlO1xyXG5cclxuICAgIC8vIEV4cGFuZCBwYXJlbnQgYXJlYXNcclxuICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuc3ZnLCAwLCB0aXRsZVNpemUuaGVpZ2h0KTtcclxuICAgIGhlbHBlci5leHBhbmRBcmVhKGNoYXJ0RWxlbWVudHMuZ3JhcGhBcmVhLCAwLCB0aXRsZVNpemUuaGVpZ2h0KTtcclxuXHJcbiAgICAvLyBNb3ZlIHNpYmxpbmcgYXJlYXNcclxuICAgIGhlbHBlci5tb3ZlQXJlYShjaGFydEVsZW1lbnRzLmRhdGFBcmVhLCAwLCB0aXRsZVNpemUuaGVpZ2h0KTtcclxuXHJcbiAgICByZXR1cm47XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldENoYXJ0U2NhbGUoXHJcbiAgICBfY2FudmFzOiBIVE1MRWxlbWVudCxcclxuICAgIGNoYXJ0RWxlbWVudHM6IENoYXJ0RWxlbWVudHMsXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXHJcbikge1xyXG4gICAgbGV0IGNhbnZhcyA9IGQzLnNlbGVjdChfY2FudmFzKTtcclxuICAgIGxldCBzdmcgPSBjaGFydEVsZW1lbnRzLnN2ZztcclxuICAgIGxldCBzdmdXaWR0aCA9IHBhcnNlRmxvYXQoc3ZnLmF0dHIoXCJ3aWR0aFwiKSk7XHJcbiAgICBsZXQgc3ZnSGVpZ2h0ID0gcGFyc2VGbG9hdChzdmcuYXR0cihcImhlaWdodFwiKSk7XHJcbiAgICBzdmcuYXR0cihcIndpZHRoXCIsIG51bGwpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgbnVsbClcclxuICAgICAgICAuYXR0cihcInZpZXdCb3hcIiwgYDAgMCAke3N2Z1dpZHRofSAke3N2Z0hlaWdodH1gKVxyXG4gICAgICAgIC5hdHRyKFwicHJlc2VydmVBc3BlY3RSYXRpb1wiLCBcInhNaWRZTWlkIG1lZXRcIik7XHJcblxyXG4gICAgaWYgKHJlbmRlckluZm8uZml0UGFuZWxXaWR0aCkge1xyXG4gICAgICAgIGNhbnZhcy5zdHlsZShcIndpZHRoXCIsIFwiMTAwJVwiKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY2FudmFzLnN0eWxlKFxyXG4gICAgICAgICAgICBcIndpZHRoXCIsXHJcbiAgICAgICAgICAgIChzdmdXaWR0aCAqIHJlbmRlckluZm8uZml4ZWRTY2FsZSkudG9TdHJpbmcoKSArIFwicHhcIlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY2FudmFzLnN0eWxlKFxyXG4gICAgICAgICAgICBcImhlaWdodFwiLFxyXG4gICAgICAgICAgICAoc3ZnSGVpZ2h0ICogcmVuZGVySW5mby5maXhlZFNjYWxlKS50b1N0cmluZygpICsgXCJweFwiXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG5cclxuZnVuY3Rpb24gY3JlYXRlQXJlYXMoXHJcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xyXG4pOiBDaGFydEVsZW1lbnRzIHtcclxuICAgIGxldCBjaGFydEVsZW1lbnRzOiBDaGFydEVsZW1lbnRzID0ge307XHJcbiAgICAvLyB3aG9sZSBhcmVhIGZvciBwbG90dGluZywgaW5jbHVkZXMgbWFyZ2luc1xyXG4gICAgbGV0IHN2ZyA9IGQzXHJcbiAgICAgICAgLnNlbGVjdChjYW52YXMpXHJcbiAgICAgICAgLmFwcGVuZChcInN2Z1wiKVxyXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJzdmdcIilcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJ3aWR0aFwiLFxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS53aWR0aCArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLm1hcmdpbi5sZWZ0ICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLnJpZ2h0XHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5hdHRyKFxyXG4gICAgICAgICAgICBcImhlaWdodFwiLFxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGFBcmVhU2l6ZS5oZWlnaHQgK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4udG9wICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmJvdHRvbVxyXG4gICAgICAgICk7XHJcbiAgICBjaGFydEVsZW1lbnRzW1wic3ZnXCJdID0gc3ZnO1xyXG5cclxuICAgIC8vIGdyYXBoQXJlYSwgaW5jbHVkZXMgY2hhcnRBcmVhLCB0aXRsZSwgbGVnZW5kXHJcbiAgICBsZXQgZ3JhcGhBcmVhID0gc3ZnXHJcbiAgICAgICAgLmFwcGVuZChcImdcIilcclxuICAgICAgICAuYXR0cihcImlkXCIsIFwiZ3JhcGhBcmVhXCIpXHJcbiAgICAgICAgLmF0dHIoXHJcbiAgICAgICAgICAgIFwidHJhbnNmb3JtXCIsXHJcbiAgICAgICAgICAgIFwidHJhbnNsYXRlKFwiICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubWFyZ2luLmxlZnQgK1xyXG4gICAgICAgICAgICAgICAgXCIsXCIgK1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5tYXJnaW4udG9wICtcclxuICAgICAgICAgICAgICAgIFwiKVwiXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGggKyByZW5kZXJJbmZvLm1hcmdpbi5yaWdodClcclxuICAgICAgICAuYXR0cihcclxuICAgICAgICAgICAgXCJoZWlnaHRcIixcclxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0ICsgcmVuZGVySW5mby5tYXJnaW4uYm90dG9tXHJcbiAgICAgICAgKTtcclxuICAgIGNoYXJ0RWxlbWVudHNbXCJncmFwaEFyZWFcIl0gPSBncmFwaEFyZWE7XHJcblxyXG4gICAgLy8gZGF0YUFyZWEsIHVuZGVyIGdyYXBoQXJlYSwgaW5jbHVkZXMgcG9pbnRzLCBsaW5lcywgeEF4aXMsIHlBeGlzXHJcbiAgICBsZXQgZGF0YUFyZWEgPSBncmFwaEFyZWFcclxuICAgICAgICAuYXBwZW5kKFwiZ1wiKVxyXG4gICAgICAgIC5hdHRyKFwiaWRcIiwgXCJkYXRhQXJlYVwiKVxyXG4gICAgICAgIC5hdHRyKFwid2lkdGhcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUud2lkdGgpXHJcbiAgICAgICAgLmF0dHIoXCJoZWlnaHRcIiwgcmVuZGVySW5mby5kYXRhQXJlYVNpemUuaGVpZ2h0KTtcclxuICAgIGNoYXJ0RWxlbWVudHNbXCJkYXRhQXJlYVwiXSA9IGRhdGFBcmVhO1xyXG5cclxuICAgIHJldHVybiBjaGFydEVsZW1lbnRzO1xyXG59XHJcblxyXG5mdW5jdGlvbiByZW5kZXJMaW5lQ2hhcnQoXHJcbiAgICBjYW52YXM6IEhUTUxFbGVtZW50LFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIGxpbmVJbmZvOiBMaW5lSW5mb1xyXG4pIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVyTGluZUNoYXJ0XCIpO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XHJcblxyXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFsaW5lSW5mbykgcmV0dXJuO1xyXG5cclxuICAgIGxldCBjaGFydEVsZW1lbnRzID0gY3JlYXRlQXJlYXMoY2FudmFzLCByZW5kZXJJbmZvKTtcclxuXHJcbiAgICByZW5kZXJUaXRsZShjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBsaW5lSW5mbyk7XHJcblxyXG4gICAgcmVuZGVyWEF4aXMoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbGluZUluZm8pO1xyXG4gICAgLy8gY29uc29sZS5sb2coY2hhcnRFbGVtZW50cy54QXhpcyk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhjaGFydEVsZW1lbnRzLnhTY2FsZSk7XHJcblxyXG4gICAgbGV0IGRhdGFzZXRPbkxlZnRZQXhpcyA9IFtdO1xyXG4gICAgbGV0IGRhdGFzZXRPblJpZ2h0WUF4aXMgPSBbXTtcclxuICAgIGxldCB4RGF0YXNldElkcyA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0WERhdGFzZXRJZHMoKTtcclxuICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IGxpbmVJbmZvLnlBeGlzTG9jYXRpb24ubGVuZ3RoOyBpbmQrKykge1xyXG4gICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpbmQpKSBjb250aW51ZTtcclxuICAgICAgICBsZXQgeUF4aXNMb2NhdGlvbiA9IGxpbmVJbmZvLnlBeGlzTG9jYXRpb25baW5kXTtcclxuICAgICAgICBpZiAoeUF4aXNMb2NhdGlvbi50b0xvd2VyQ2FzZSgpID09PSBcImxlZnRcIikge1xyXG4gICAgICAgICAgICBkYXRhc2V0T25MZWZ0WUF4aXMucHVzaChpbmQpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoeUF4aXNMb2NhdGlvbi50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBcInJpZ2h0XCIpIHtcclxuICAgICAgICAgICAgZGF0YXNldE9uUmlnaHRZQXhpcy5wdXNoKGluZCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGxldCByZXRSZW5kZXJMZWZ0WUF4aXMgPSByZW5kZXJZQXhpcyhcclxuICAgICAgICBjaGFydEVsZW1lbnRzLFxyXG4gICAgICAgIHJlbmRlckluZm8sXHJcbiAgICAgICAgbGluZUluZm8sXHJcbiAgICAgICAgXCJsZWZ0XCIsXHJcbiAgICAgICAgZGF0YXNldE9uTGVmdFlBeGlzXHJcbiAgICApO1xyXG4gICAgaWYgKHR5cGVvZiByZXRSZW5kZXJMZWZ0WUF4aXMgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gcmV0UmVuZGVyTGVmdFlBeGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFydEVsZW1lbnRzLmxlZnRZQXhpcyAmJiBjaGFydEVsZW1lbnRzLmxlZnRZU2NhbGUpIHtcclxuICAgICAgICBmb3IgKGxldCBkYXRhc2V0SWQgb2YgZGF0YXNldE9uTGVmdFlBeGlzKSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRhc2V0ID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpO1xyXG4gICAgICAgICAgICBpZiAoZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIHJlbmRlckxpbmUoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbGluZUluZm8sIGRhdGFzZXQsIFwibGVmdFwiKTtcclxuXHJcbiAgICAgICAgICAgIHJlbmRlclBvaW50cyhjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBsaW5lSW5mbywgZGF0YXNldCwgXCJsZWZ0XCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgcmV0UmVuZGVyUmlnaHRZQXhpcyA9IHJlbmRlcllBeGlzKFxyXG4gICAgICAgIGNoYXJ0RWxlbWVudHMsXHJcbiAgICAgICAgcmVuZGVySW5mbyxcclxuICAgICAgICBsaW5lSW5mbyxcclxuICAgICAgICBcInJpZ2h0XCIsXHJcbiAgICAgICAgZGF0YXNldE9uUmlnaHRZQXhpc1xyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgcmV0UmVuZGVyUmlnaHRZQXhpcyA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiByZXRSZW5kZXJSaWdodFlBeGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFydEVsZW1lbnRzLnJpZ2h0WUF4aXMgJiYgY2hhcnRFbGVtZW50cy5yaWdodFlTY2FsZSkge1xyXG4gICAgICAgIGZvciAobGV0IGRhdGFzZXRJZCBvZiBkYXRhc2V0T25SaWdodFlBeGlzKSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRhc2V0ID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpO1xyXG4gICAgICAgICAgICBpZiAoZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIHJlbmRlckxpbmUoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbGluZUluZm8sIGRhdGFzZXQsIFwicmlnaHRcIik7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJQb2ludHMoY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbywgbGluZUluZm8sIGRhdGFzZXQsIFwicmlnaHRcIik7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChsaW5lSW5mby5zaG93TGVnZW5kKSB7XHJcbiAgICAgICAgcmVuZGVyTGVnZW5kKGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIGxpbmVJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRDaGFydFNjYWxlKGNhbnZhcywgY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbmRlckJhckNoYXJ0KFxyXG4gICAgY2FudmFzOiBIVE1MRWxlbWVudCxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBiYXJJbmZvOiBCYXJJbmZvXHJcbikge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJCYXJDaGFydFwiKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8pO1xyXG4gICAgaWYgKCFyZW5kZXJJbmZvIHx8ICFiYXJJbmZvKSByZXR1cm47XHJcblxyXG4gICAgbGV0IGNoYXJ0RWxlbWVudHMgPSBjcmVhdGVBcmVhcyhjYW52YXMsIHJlbmRlckluZm8pO1xyXG5cclxuICAgIHJlbmRlclRpdGxlKGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIGJhckluZm8pO1xyXG5cclxuICAgIHJlbmRlclhBeGlzKGNoYXJ0RWxlbWVudHMsIHJlbmRlckluZm8sIGJhckluZm8pO1xyXG5cclxuICAgIGxldCBkYXRhc2V0T25MZWZ0WUF4aXMgPSBbXTtcclxuICAgIGxldCBkYXRhc2V0T25SaWdodFlBeGlzID0gW107XHJcbiAgICBsZXQgeERhdGFzZXRJZHMgPSByZW5kZXJJbmZvLmRhdGFzZXRzLmdldFhEYXRhc2V0SWRzKCk7XHJcbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBiYXJJbmZvLnlBeGlzTG9jYXRpb24ubGVuZ3RoOyBpbmQrKykge1xyXG4gICAgICAgIGlmICh4RGF0YXNldElkcy5pbmNsdWRlcyhpbmQpKSBjb250aW51ZTtcclxuICAgICAgICBsZXQgeUF4aXNMb2NhdGlvbiA9IGJhckluZm8ueUF4aXNMb2NhdGlvbltpbmRdO1xyXG4gICAgICAgIGlmICh5QXhpc0xvY2F0aW9uLnRvTG93ZXJDYXNlKCkgPT09IFwibGVmdFwiKSB7XHJcbiAgICAgICAgICAgIGRhdGFzZXRPbkxlZnRZQXhpcy5wdXNoKGluZCk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh5QXhpc0xvY2F0aW9uLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IFwicmlnaHRcIikge1xyXG4gICAgICAgICAgICAvLyByaWdodFxyXG4gICAgICAgICAgICBkYXRhc2V0T25SaWdodFlBeGlzLnB1c2goaW5kKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJldFJlbmRlckxlZnRZQXhpcyA9IHJlbmRlcllBeGlzKFxyXG4gICAgICAgIGNoYXJ0RWxlbWVudHMsXHJcbiAgICAgICAgcmVuZGVySW5mbyxcclxuICAgICAgICBiYXJJbmZvLFxyXG4gICAgICAgIFwibGVmdFwiLFxyXG4gICAgICAgIGRhdGFzZXRPbkxlZnRZQXhpc1xyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgcmV0UmVuZGVyTGVmdFlBeGlzID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldFJlbmRlckxlZnRZQXhpcztcclxuICAgIH1cclxuXHJcbiAgICBsZXQgdG90YWxOdW1PZkJhclNldHMgPVxyXG4gICAgICAgIGRhdGFzZXRPbkxlZnRZQXhpcy5sZW5ndGggKyBkYXRhc2V0T25SaWdodFlBeGlzLmxlbmd0aDtcclxuICAgIGxldCBjdXJyQmFyU2V0ID0gMDtcclxuXHJcbiAgICBpZiAoY2hhcnRFbGVtZW50cy5sZWZ0WUF4aXMgJiYgY2hhcnRFbGVtZW50cy5sZWZ0WVNjYWxlKSB7XHJcbiAgICAgICAgZm9yIChsZXQgZGF0YXNldElkIG9mIGRhdGFzZXRPbkxlZnRZQXhpcykge1xyXG4gICAgICAgICAgICBsZXQgZGF0YXNldCA9IHJlbmRlckluZm8uZGF0YXNldHMuZ2V0RGF0YXNldEJ5SWQoZGF0YXNldElkKTtcclxuICAgICAgICAgICAgaWYgKGRhdGFzZXQuZ2V0UXVlcnkoKS51c2VkQXNYRGF0YXNldCkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICByZW5kZXJCYXIoXHJcbiAgICAgICAgICAgICAgICBjaGFydEVsZW1lbnRzLFxyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcclxuICAgICAgICAgICAgICAgIGJhckluZm8sXHJcbiAgICAgICAgICAgICAgICBkYXRhc2V0LFxyXG4gICAgICAgICAgICAgICAgXCJsZWZ0XCIsXHJcbiAgICAgICAgICAgICAgICBjdXJyQmFyU2V0LFxyXG4gICAgICAgICAgICAgICAgdG90YWxOdW1PZkJhclNldHNcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGN1cnJCYXJTZXQrKztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IHJldFJlbmRlclJpZ2h0WUF4aXMgPSByZW5kZXJZQXhpcyhcclxuICAgICAgICBjaGFydEVsZW1lbnRzLFxyXG4gICAgICAgIHJlbmRlckluZm8sXHJcbiAgICAgICAgYmFySW5mbyxcclxuICAgICAgICBcInJpZ2h0XCIsXHJcbiAgICAgICAgZGF0YXNldE9uUmlnaHRZQXhpc1xyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgcmV0UmVuZGVyUmlnaHRZQXhpcyA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiByZXRSZW5kZXJSaWdodFlBeGlzO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFydEVsZW1lbnRzLnJpZ2h0WUF4aXMgJiYgY2hhcnRFbGVtZW50cy5yaWdodFlTY2FsZSkge1xyXG4gICAgICAgIGZvciAobGV0IGRhdGFzZXRJZCBvZiBkYXRhc2V0T25SaWdodFlBeGlzKSB7XHJcbiAgICAgICAgICAgIGxldCBkYXRhc2V0ID0gcmVuZGVySW5mby5kYXRhc2V0cy5nZXREYXRhc2V0QnlJZChkYXRhc2V0SWQpO1xyXG4gICAgICAgICAgICBpZiAoZGF0YXNldC5nZXRRdWVyeSgpLnVzZWRBc1hEYXRhc2V0KSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgIHJlbmRlckJhcihcclxuICAgICAgICAgICAgICAgIGNoYXJ0RWxlbWVudHMsXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLFxyXG4gICAgICAgICAgICAgICAgYmFySW5mbyxcclxuICAgICAgICAgICAgICAgIGRhdGFzZXQsXHJcbiAgICAgICAgICAgICAgICBcInJpZ2h0XCIsXHJcbiAgICAgICAgICAgICAgICBjdXJyQmFyU2V0LFxyXG4gICAgICAgICAgICAgICAgdG90YWxOdW1PZkJhclNldHNcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGN1cnJCYXJTZXQrKztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGJhckluZm8uc2hvd0xlZ2VuZCkge1xyXG4gICAgICAgIHJlbmRlckxlZ2VuZChjaGFydEVsZW1lbnRzLCByZW5kZXJJbmZvLCBiYXJJbmZvKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRDaGFydFNjYWxlKGNhbnZhcywgY2hhcnRFbGVtZW50cywgcmVuZGVySW5mbyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJFcnJvck1lc3NhZ2UoY2FudmFzOiBIVE1MRWxlbWVudCwgZXJyb3JNZXNzYWdlOiBzdHJpbmcpIHtcclxuICAgIC8vIFJlbW92ZSBncmFwaCBub3QgY29tcGxldGVkXHJcbiAgICBsZXQgZ3JhcGggPSBkMy5zZWxlY3QoY2FudmFzKS5zZWxlY3QoXCIjc3ZnXCIpLnJlbW92ZSgpO1xyXG5cclxuICAgIGxldCBzdmcgPSBkM1xyXG4gICAgICAgIC5zZWxlY3QoY2FudmFzKVxyXG4gICAgICAgIC5hcHBlbmQoXCJkaXZcIilcclxuICAgICAgICAudGV4dChlcnJvck1lc3NhZ2UpXHJcbiAgICAgICAgLnN0eWxlKFwiYmFja2dyb3VuZC1jb2xvclwiLCBcIndoaXRlXCIpXHJcbiAgICAgICAgLnN0eWxlKFwibWFyZ2luLWJvdHRvbVwiLCBcIjIwcHhcIilcclxuICAgICAgICAuc3R5bGUoXCJwYWRkaW5nXCIsIFwiMTBweFwiKVxyXG4gICAgICAgIC5zdHlsZShcImNvbG9yXCIsIFwicmVkXCIpO1xyXG59XHJcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHZhbHVlcywgdmFsdWVvZikge1xuICBsZXQgbWluO1xuICBsZXQgbWF4O1xuICBpZiAodmFsdWVvZiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgIGlmIChtaW4gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh2YWx1ZSA+PSB2YWx1ZSkgbWluID0gbWF4ID0gdmFsdWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKG1pbiA+IHZhbHVlKSBtaW4gPSB2YWx1ZTtcbiAgICAgICAgICBpZiAobWF4IDwgdmFsdWUpIG1heCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxldCBpbmRleCA9IC0xO1xuICAgIGZvciAobGV0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgaWYgKCh2YWx1ZSA9IHZhbHVlb2YodmFsdWUsICsraW5kZXgsIHZhbHVlcykpICE9IG51bGwpIHtcbiAgICAgICAgaWYgKG1pbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKHZhbHVlID49IHZhbHVlKSBtaW4gPSBtYXggPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAobWluID4gdmFsdWUpIG1pbiA9IHZhbHVlO1xuICAgICAgICAgIGlmIChtYXggPCB2YWx1ZSkgbWF4ID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIFttaW4sIG1heF07XG59XG4iLCJpbXBvcnQge3BhdGh9IGZyb20gXCJkMy1wYXRoXCI7XG5pbXBvcnQgYXJyYXkgZnJvbSBcIi4vYXJyYXkuanNcIjtcbmltcG9ydCBjb25zdGFudCBmcm9tIFwiLi9jb25zdGFudC5qc1wiO1xuaW1wb3J0IGN1cnZlTGluZWFyIGZyb20gXCIuL2N1cnZlL2xpbmVhci5qc1wiO1xuaW1wb3J0IHt4IGFzIHBvaW50WCwgeSBhcyBwb2ludFl9IGZyb20gXCIuL3BvaW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKHgsIHkpIHtcbiAgdmFyIGRlZmluZWQgPSBjb25zdGFudCh0cnVlKSxcbiAgICAgIGNvbnRleHQgPSBudWxsLFxuICAgICAgY3VydmUgPSBjdXJ2ZUxpbmVhcixcbiAgICAgIG91dHB1dCA9IG51bGw7XG5cbiAgeCA9IHR5cGVvZiB4ID09PSBcImZ1bmN0aW9uXCIgPyB4IDogKHggPT09IHVuZGVmaW5lZCkgPyBwb2ludFggOiBjb25zdGFudCh4KTtcbiAgeSA9IHR5cGVvZiB5ID09PSBcImZ1bmN0aW9uXCIgPyB5IDogKHkgPT09IHVuZGVmaW5lZCkgPyBwb2ludFkgOiBjb25zdGFudCh5KTtcblxuICBmdW5jdGlvbiBsaW5lKGRhdGEpIHtcbiAgICB2YXIgaSxcbiAgICAgICAgbiA9IChkYXRhID0gYXJyYXkoZGF0YSkpLmxlbmd0aCxcbiAgICAgICAgZCxcbiAgICAgICAgZGVmaW5lZDAgPSBmYWxzZSxcbiAgICAgICAgYnVmZmVyO1xuXG4gICAgaWYgKGNvbnRleHQgPT0gbnVsbCkgb3V0cHV0ID0gY3VydmUoYnVmZmVyID0gcGF0aCgpKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPD0gbjsgKytpKSB7XG4gICAgICBpZiAoIShpIDwgbiAmJiBkZWZpbmVkKGQgPSBkYXRhW2ldLCBpLCBkYXRhKSkgPT09IGRlZmluZWQwKSB7XG4gICAgICAgIGlmIChkZWZpbmVkMCA9ICFkZWZpbmVkMCkgb3V0cHV0LmxpbmVTdGFydCgpO1xuICAgICAgICBlbHNlIG91dHB1dC5saW5lRW5kKCk7XG4gICAgICB9XG4gICAgICBpZiAoZGVmaW5lZDApIG91dHB1dC5wb2ludCgreChkLCBpLCBkYXRhKSwgK3koZCwgaSwgZGF0YSkpO1xuICAgIH1cblxuICAgIGlmIChidWZmZXIpIHJldHVybiBvdXRwdXQgPSBudWxsLCBidWZmZXIgKyBcIlwiIHx8IG51bGw7XG4gIH1cblxuICBsaW5lLnggPSBmdW5jdGlvbihfKSB7XG4gICAgcmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPyAoeCA9IHR5cGVvZiBfID09PSBcImZ1bmN0aW9uXCIgPyBfIDogY29uc3RhbnQoK18pLCBsaW5lKSA6IHg7XG4gIH07XG5cbiAgbGluZS55ID0gZnVuY3Rpb24oXykge1xuICAgIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID8gKHkgPSB0eXBlb2YgXyA9PT0gXCJmdW5jdGlvblwiID8gXyA6IGNvbnN0YW50KCtfKSwgbGluZSkgOiB5O1xuICB9O1xuXG4gIGxpbmUuZGVmaW5lZCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChkZWZpbmVkID0gdHlwZW9mIF8gPT09IFwiZnVuY3Rpb25cIiA/IF8gOiBjb25zdGFudCghIV8pLCBsaW5lKSA6IGRlZmluZWQ7XG4gIH07XG5cbiAgbGluZS5jdXJ2ZSA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChjdXJ2ZSA9IF8sIGNvbnRleHQgIT0gbnVsbCAmJiAob3V0cHV0ID0gY3VydmUoY29udGV4dCkpLCBsaW5lKSA6IGN1cnZlO1xuICB9O1xuXG4gIGxpbmUuY29udGV4dCA9IGZ1bmN0aW9uKF8pIHtcbiAgICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA/IChfID09IG51bGwgPyBjb250ZXh0ID0gb3V0cHV0ID0gbnVsbCA6IG91dHB1dCA9IGN1cnZlKGNvbnRleHQgPSBfKSwgbGluZSkgOiBjb250ZXh0O1xuICB9O1xuXG4gIHJldHVybiBsaW5lO1xufVxuIiwiaW1wb3J0IHNvdXJjZUV2ZW50IGZyb20gXCIuL3NvdXJjZUV2ZW50LmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGV2ZW50LCBub2RlKSB7XG4gIGV2ZW50ID0gc291cmNlRXZlbnQoZXZlbnQpO1xuICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSBub2RlID0gZXZlbnQuY3VycmVudFRhcmdldDtcbiAgaWYgKG5vZGUpIHtcbiAgICB2YXIgc3ZnID0gbm9kZS5vd25lclNWR0VsZW1lbnQgfHwgbm9kZTtcbiAgICBpZiAoc3ZnLmNyZWF0ZVNWR1BvaW50KSB7XG4gICAgICB2YXIgcG9pbnQgPSBzdmcuY3JlYXRlU1ZHUG9pbnQoKTtcbiAgICAgIHBvaW50LnggPSBldmVudC5jbGllbnRYLCBwb2ludC55ID0gZXZlbnQuY2xpZW50WTtcbiAgICAgIHBvaW50ID0gcG9pbnQubWF0cml4VHJhbnNmb3JtKG5vZGUuZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKTtcbiAgICAgIHJldHVybiBbcG9pbnQueCwgcG9pbnQueV07XG4gICAgfVxuICAgIGlmIChub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCkge1xuICAgICAgdmFyIHJlY3QgPSBub2RlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgcmV0dXJuIFtldmVudC5jbGllbnRYIC0gcmVjdC5sZWZ0IC0gbm9kZS5jbGllbnRMZWZ0LCBldmVudC5jbGllbnRZIC0gcmVjdC50b3AgLSBub2RlLmNsaWVudFRvcF07XG4gICAgfVxuICB9XG4gIHJldHVybiBbZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZXTtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uKGV2ZW50KSB7XG4gIGxldCBzb3VyY2VFdmVudDtcbiAgd2hpbGUgKHNvdXJjZUV2ZW50ID0gZXZlbnQuc291cmNlRXZlbnQpIGV2ZW50ID0gc291cmNlRXZlbnQ7XG4gIHJldHVybiBldmVudDtcbn1cbiIsImltcG9ydCBUcmFja2VyIGZyb20gXCIuL21haW5cIjtcclxuaW1wb3J0IHtcclxuICAgIFNlYXJjaFR5cGUsXHJcbiAgICBCYXJJbmZvLFxyXG4gICAgQ29tbW9uQ2hhcnRJbmZvLFxyXG4gICAgUXVlcnksXHJcbiAgICBSZW5kZXJJbmZvLFxyXG4gICAgU3VtbWFyeUluZm8sXHJcbiAgICBNYXJnaW4sXHJcbiAgICBHcmFwaFR5cGUsXHJcbiAgICBMaW5lSW5mbyxcclxuICAgIFBpZUluZm8sXHJcbiAgICBNb250aEluZm8sXHJcbiAgICBIZWF0bWFwSW5mbyxcclxuICAgIEJ1bGxldEluZm8sXHJcbiAgICBEYXRhc2V0LFxyXG4gICAgQ3VzdG9tRGF0YXNldEluZm8sXHJcbn0gZnJvbSBcIi4vZGF0YVwiO1xyXG5pbXBvcnQgeyBURm9sZGVyLCBub3JtYWxpemVQYXRoIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IHBhcnNlWWFtbCB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgKiBhcyBoZWxwZXIgZnJvbSBcIi4vaGVscGVyXCI7XHJcblxyXG5mdW5jdGlvbiBzdHJUb0Jvb2woc3RyOiBzdHJpbmcpOiBib29sZWFuIHwgbnVsbCB7XHJcbiAgICBzdHIgPSBzdHIudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcbiAgICBzd2l0Y2ggKHN0cikge1xyXG4gICAgICAgIGNhc2UgXCJ0cnVlXCI6XHJcbiAgICAgICAgY2FzZSBcIjFcIjpcclxuICAgICAgICBjYXNlIFwib25cIjpcclxuICAgICAgICBjYXNlIFwieWVzXCI6XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIGNhc2UgXCJmYWxzZVwiOlxyXG4gICAgICAgIGNhc2UgXCIwXCI6XHJcbiAgICAgICAgY2FzZSBcIm9mZlwiOlxyXG4gICAgICAgIGNhc2UgXCJub1wiOlxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxufVxyXG5cclxuZnVuY3Rpb24gdmFsaWRhdGVTZWFyY2hUeXBlKHNlYXJjaFR5cGU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKFxyXG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0YWdcIiB8fFxyXG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0ZXh0XCIgfHxcclxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwiZnJvbnRtYXR0ZXJcIiB8fFxyXG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ3aWtpXCIgfHxcclxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwid2lraS5saW5rXCIgfHxcclxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwid2lraS5kaXNwbGF5XCIgfHxcclxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwiZHZmaWVsZFwiIHx8XHJcbiAgICAgICAgc2VhcmNoVHlwZS50b0xvd2VyQ2FzZSgpID09PSBcInRhYmxlXCIgfHxcclxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwiZmlsZW1ldGFcIiB8fFxyXG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0YXNrXCIgfHxcclxuICAgICAgICBzZWFyY2hUeXBlLnRvTG93ZXJDYXNlKCkgPT09IFwidGFzay5hbGxcIiB8fFxyXG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0YXNrLmRvbmVcIiB8fFxyXG4gICAgICAgIHNlYXJjaFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0YXNrLm5vdGRvbmVcIlxyXG4gICAgKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHZhbGlkYXRlWUF4aXNMb2NhdGlvbihsb2NhdGlvbjogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICBpZiAobG9jYXRpb24gPT09IFwibGVmdFwiIHx8IGxvY2F0aW9uID09PSBcInJpZ2h0XCIgfHwgbG9jYXRpb24gPT09IFwibm9uZVwiKSB7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHZhbGlkYXRlQ29sb3IoY29sb3I6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNwbGl0SW5wdXRCeUNvbW1hKGlucHV0OiBzdHJpbmcpIHtcclxuICAgIC8vIFNwbGl0IHN0cmluZyBieSAnLCcgYnV0IG5vdCBieSAnXFwsJ1xyXG4gICAgLy8gbGV0IHNwbGl0dGVkID0gaW5wdXQuc3BsaXQoLyg/PCFcXFxcKSwvKTsgLy8gLS0+bG9va2JlaGluZCBub3Qgc3VwcG9ydCBpbiBTYWZhcmkgZm9yIG5vd1xyXG4gICAgY29uc3QgZHVtbXkgPSBcIjo6Ojo6OnRyYWNrZXI6Ojo6OjpcIjtcclxuICAgIGxldCB0ZW1wID0gaW5wdXQuc3BsaXQoXCJcXFxcLFwiKS5qb2luKGR1bW15KTtcclxuICAgIGxldCBzcGxpdHRlZCA9IHRlbXAuc3BsaXQoXCIsXCIpO1xyXG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgc3BsaXR0ZWQubGVuZ3RoOyBpbmQrKykge1xyXG4gICAgICAgIHNwbGl0dGVkW2luZF0gPSBzcGxpdHRlZFtpbmRdLnNwbGl0KGR1bW15KS5qb2luKFwiLFwiKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzcGxpdHRlZDtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0Qm9vbEFycmF5RnJvbUlucHV0KFxyXG4gICAgbmFtZTogc3RyaW5nLFxyXG4gICAgaW5wdXQ6IGFueSxcclxuICAgIG51bURhdGFzZXQ6IG51bWJlcixcclxuICAgIGRlZmF1bHRWYWx1ZTogYm9vbGVhbixcclxuICAgIGFsbG93Tm9WYWxpZFZhbHVlOiBib29sZWFuXHJcbik6IEFycmF5PGJvb2xlYW4+IHwgc3RyaW5nIHtcclxuICAgIGxldCBhcnJheTogQXJyYXk8Ym9vbGVhbj4gPSBbXTtcclxuICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlwiO1xyXG4gICAgbGV0IG51bVZhbGlkVmFsdWUgPSAwO1xyXG5cclxuICAgIHdoaWxlIChudW1EYXRhc2V0ID4gYXJyYXkubGVuZ3RoKSB7XHJcbiAgICAgICAgYXJyYXkucHVzaChkZWZhdWx0VmFsdWUpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwidW5kZWZpbmVkXCIgfHwgaW5wdXQgPT09IG51bGwpIHtcclxuICAgICAgICAvLyBhbGwgZGVmYXVsdFZhbHVlXHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIiAmJiBpbnB1dCAhPT0gbnVsbCkge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xyXG4gICAgICAgICAgICBpZiAoaW5wdXQubGVuZ3RoID4gbnVtRGF0YXNldCkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJUb28gbWFueSBpbnB1dHMgZm9yIHBhcmFtZXRlciAnXCIgKyBuYW1lICsgXCInXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiRW1wdHkgYXJyYXkgbm90IGFsbG93ZCBmb3IgXCIgKyBuYW1lO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kIDwgaW5wdXQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnIgPSBpbnB1dFtpbmRdO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcmV2ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gaW5wdXRbaW5kIC0gMV0udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN1cnIgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnIudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyciA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gcHJldjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgY3VyciA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGN1cnI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gRXhjZWVkcyB0aGUgbGVuZ3RoIG9mIGlucHV0LCB1c2UgcHJldiB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBsYXN0ID0gaW5wdXRbaW5wdXQubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG51bVZhbGlkVmFsdWUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBsYXN0O1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBkZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICBsZXQgc3BsaXR0ZWQgPSBzcGxpdElucHV0QnlDb21tYShpbnB1dCk7XHJcbiAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA+IG51bURhdGFzZXQpIHtcclxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiVG9vIG1hbnkgaW5wdXRzIGZvciBwYXJhbWV0ZXIgJ1wiICsgbmFtZSArIFwiJ1wiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kIDwgc3BsaXR0ZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnIgPSBzcGxpdHRlZFtpbmRdLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgcHJldiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJldiA9IHN0clRvQm9vbChzcGxpdHRlZFtpbmQgLSAxXS50cmltKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VyciA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IHByZXY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGN1cnJCb29sID0gc3RyVG9Cb29sKGN1cnIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyckJvb2wgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBjdXJyQm9vbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBFeGNlZWRzIHRoZSBsZW5ndGggb2YgaW5wdXQsIHVzZSBwcmV2IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxhc3QgPSBzdHJUb0Jvb2woc3BsaXR0ZWRbc3BsaXR0ZWQubGVuZ3RoIC0gMV0udHJpbSgpKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobnVtVmFsaWRWYWx1ZSA+IDAgJiYgbGFzdCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gbGFzdDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgLy8gYWxsIGRlZmF1bHRWYWx1ZVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IGlucHV0Qm9vbCA9IHN0clRvQm9vbChpbnB1dCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXRCb29sICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlbMF0gPSBpbnB1dEJvb2w7XHJcbiAgICAgICAgICAgICAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDE7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGlucHV0Qm9vbDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgIGFycmF5WzBdID0gaW5wdXQ7XHJcbiAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xyXG4gICAgICAgIGZvciAobGV0IGluZCA9IDE7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGlucHV0O1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghYWxsb3dOb1ZhbGlkVmFsdWUgJiYgbnVtVmFsaWRWYWx1ZSA9PT0gMCkge1xyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IFwiTm8gdmFsaWQgaW5wdXQgZm9yIFwiICsgbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXJyb3JNZXNzYWdlICE9PSBcIlwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXJyYXk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE51bWJlckFycmF5RnJvbUlucHV0KFxyXG4gICAgbmFtZTogc3RyaW5nLFxyXG4gICAgaW5wdXQ6IGFueSxcclxuICAgIG51bURhdGFzZXQ6IG51bWJlcixcclxuICAgIGRlZmF1bHRWYWx1ZTogbnVtYmVyLFxyXG4gICAgYWxsb3dOb1ZhbGlkVmFsdWU6IGJvb2xlYW5cclxuKTogQXJyYXk8bnVtYmVyPiB8IHN0cmluZyB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcImdldE51bWJlckFycmF5RnJvbUlucHV0XCIpO1xyXG5cclxuICAgIGxldCBhcnJheTogQXJyYXk8bnVtYmVyPiA9IFtdO1xyXG4gICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiXCI7XHJcbiAgICBsZXQgbnVtVmFsaWRWYWx1ZSA9IDA7XHJcblxyXG4gICAgd2hpbGUgKG51bURhdGFzZXQgPiBhcnJheS5sZW5ndGgpIHtcclxuICAgICAgICBhcnJheS5wdXNoKGRlZmF1bHRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJ1bmRlZmluZWRcIiB8fCBpbnB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAgIC8vIGFsbCBkZWZhdWx0VmFsdWVcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcIm9iamVjdFwiICYmIGlucHV0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPiBudW1EYXRhc2V0KSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIlRvbyBtYW55IGlucHV0cyBmb3IgcGFyYW1ldGVyICdcIiArIG5hbWUgKyBcIidcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJFbXB0eSBhcnJheSBub3QgYWxsb3dkIGZvciBcIiArIG5hbWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbmQgPCBpbnB1dC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY3VyciA9IGlucHV0W2luZF07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByZXYgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBpbnB1dFtpbmQgLSAxXS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3VyciA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBwcmV2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjdXJyID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBjdXJyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEV4Y2VlZHMgdGhlIGxlbmd0aCBvZiBpbnB1dCwgdXNlIHByZXYgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdCA9IGlucHV0W2lucHV0Lmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChudW1WYWxpZFZhbHVlID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gbGFzdDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgbGV0IHNwbGl0dGVkID0gc3BsaXRJbnB1dEJ5Q29tbWEoaW5wdXQpO1xyXG4gICAgICAgIGlmIChzcGxpdHRlZC5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIGlmIChzcGxpdHRlZC5sZW5ndGggPiBudW1EYXRhc2V0KSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIlRvbyBtYW55IGlucHV0cyBmb3IgcGFyYW1ldGVyICdcIiArIG5hbWUgKyBcIidcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgYXJyYXkubGVuZ3RoOyBpbmQrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZCA8IHNwbGl0dGVkLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyID0gc3BsaXR0ZWRbaW5kXS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByZXYgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBoZWxwZXIucGFyc2VGbG9hdEZyb21BbnkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHRlZFtpbmQgLSAxXS50cmltKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnIgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZXYgIT09IG51bGwgJiYgTnVtYmVyLmlzTnVtYmVyKHByZXYpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gcHJldjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBkZWZhdWx0VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY3Vyck51bSA9IGhlbHBlci5wYXJzZUZsb2F0RnJvbUFueShjdXJyKS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJOdW0gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBjdXJyTnVtO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEV4Y2VlZHMgdGhlIGxlbmd0aCBvZiBpbnB1dCwgdXNlIHByZXYgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdCA9IGhlbHBlci5wYXJzZUZsb2F0RnJvbUFueShcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0ZWRbaW5wdXQubGVuZ3RoIC0gMV0udHJpbSgpXHJcbiAgICAgICAgICAgICAgICAgICAgKS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobnVtVmFsaWRWYWx1ZSA+IDAgJiYgbGFzdCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gbGFzdDtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgLy8gYWxsIGRlZmF1bHRWYWx1ZVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbGV0IGlucHV0TnVtID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KGlucHV0KS52YWx1ZTtcclxuICAgICAgICAgICAgICAgIGlmIChpbnB1dE51bSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5WzBdID0gaW5wdXROdW07XHJcbiAgICAgICAgICAgICAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDE7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGlucHV0TnVtO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgaW5wdXQgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICBpZiAoTnVtYmVyLmlzTnVtYmVyKGlucHV0KSkge1xyXG4gICAgICAgICAgICBhcnJheVswXSA9IGlucHV0O1xyXG4gICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDE7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBpbnB1dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWFsbG93Tm9WYWxpZFZhbHVlICYmIG51bVZhbGlkVmFsdWUgPT09IDApIHtcclxuICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIk5vIHZhbGlkIGlucHV0IGZvciBcIiArIG5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGVycm9yTWVzc2FnZSAhPT0gXCJcIikge1xyXG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGFycmF5O1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRTdHJpbmdGcm9tSW5wdXQoaW5wdXQ6IGFueSwgZGVmYXVsdFZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiBoZWxwZXIucmVwbGFjZUltZ1RhZ0J5QWx0KGlucHV0KTtcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGlucHV0LnRvU3RyaW5nKCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZGVmYXVsdFZhbHVlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcclxuICAgIG5hbWU6IHN0cmluZyxcclxuICAgIGlucHV0OiBhbnksXHJcbiAgICBudW1EYXRhc2V0OiBudW1iZXIsXHJcbiAgICBkZWZhdWx0VmFsdWU6IHN0cmluZyxcclxuICAgIHZhbGlkYXRvcjogRnVuY3Rpb24sXHJcbiAgICBhbGxvd05vVmFsaWRWYWx1ZTogYm9vbGVhblxyXG4pOiBBcnJheTxzdHJpbmc+IHwgc3RyaW5nIHtcclxuICAgIGxldCBhcnJheTogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiXCI7XHJcbiAgICBsZXQgbnVtVmFsaWRWYWx1ZSA9IDA7XHJcblxyXG4gICAgd2hpbGUgKG51bURhdGFzZXQgPiBhcnJheS5sZW5ndGgpIHtcclxuICAgICAgICBhcnJheS5wdXNoKGRlZmF1bHRWYWx1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJ1bmRlZmluZWRcIiB8fCBpbnB1dCA9PT0gbnVsbCkge1xyXG4gICAgICAgIC8vIGFsbCBkZWZhdWx0VmFsdWVcclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcIm9iamVjdFwiICYmIGlucHV0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XHJcbiAgICAgICAgICAgIGlmIChpbnB1dC5sZW5ndGggPiBudW1EYXRhc2V0KSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIlRvbyBtYW55IGlucHV0cyBmb3IgcGFyYW1ldGVyICdcIiArIG5hbWUgKyBcIidcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJFbXB0eSBhcnJheSBub3QgYWxsb3dkIGZvciBcIiArIG5hbWU7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbmQgPCBpbnB1dC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY3VyciA9IGlucHV0W2luZF07XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByZXYgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmQgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByZXYgPSBpbnB1dFtpbmQgLSAxXS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3VyciA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyID0gY3Vyci50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBwcmV2O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IoY3VycikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGN1cnI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGN1cnI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEV4Y2VlZHMgdGhlIGxlbmd0aCBvZiBpbnB1dCwgdXNlIHByZXYgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdCA9IGlucHV0W2lucHV0Lmxlbmd0aCAtIDFdLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobnVtVmFsaWRWYWx1ZSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGxhc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIGxldCBzcGxpdHRlZCA9IHNwbGl0SW5wdXRCeUNvbW1hKGlucHV0KTtcclxuICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID4gbnVtRGF0YXNldCkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJUb28gbWFueSBpbnB1dHMgZm9yIHBhcmFtZXRlciAnXCIgKyBuYW1lICsgXCInXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChpbmQgPCBzcGxpdHRlZC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgY3VyciA9IHNwbGl0dGVkW2luZF0udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBwcmV2ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gc3BsaXR0ZWRbaW5kIC0gMV0udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VyciA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJldiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IHByZXY7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gZGVmYXVsdFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbGlkYXRvcihjdXJyKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBjdXJyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVZhbGlkVmFsdWUrKztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGlucHV0cyBmb3IgXCIgKyBuYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGN1cnI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIEV4Y2VlZHMgdGhlIGxlbmd0aCBvZiBpbnB1dCwgdXNlIHByZXYgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdCA9IHNwbGl0dGVkW3NwbGl0dGVkLmxlbmd0aCAtIDFdLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobnVtVmFsaWRWYWx1ZSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGxhc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGRlZmF1bHRWYWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgIC8vIGFsbCBkZWZhdWx0VmFsdWVcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICh2YWxpZGF0b3IpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsaWRhdG9yKGlucHV0KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcnJheVswXSA9IGlucHV0O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBudW1WYWxpZFZhbHVlKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDE7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBpbnB1dDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dHMgZm9yIFwiICsgbmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5WzBdID0gaW5wdXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGluZCA9IDE7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlbaW5kXSA9IGlucHV0O1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgbGV0IHN0ck51bWJlciA9IGlucHV0LnRvU3RyaW5nKCk7XHJcbiAgICAgICAgaWYgKHZhbGlkYXRvcikge1xyXG4gICAgICAgICAgICBpZiAodmFsaWRhdG9yKHN0ck51bWJlcikpIHtcclxuICAgICAgICAgICAgICAgIGFycmF5WzBdID0gc3RyTnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaW5kID0gMTsgaW5kIDwgYXJyYXkubGVuZ3RoOyBpbmQrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGFycmF5W2luZF0gPSBzdHJOdW1iZXI7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhcnJheVswXSA9IHN0ck51bWJlcjtcclxuICAgICAgICAgICAgbnVtVmFsaWRWYWx1ZSsrO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAxOyBpbmQgPCBhcnJheS5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgICAgICAgICBhcnJheVtpbmRdID0gc3RyTnVtYmVyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRzIGZvciBcIiArIG5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFhbGxvd05vVmFsaWRWYWx1ZSAmJiBudW1WYWxpZFZhbHVlID09PSAwKSB7XHJcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJObyB2YWxpZCBpbnB1dCBmb3IgXCIgKyBuYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChlcnJvck1lc3NhZ2UgIT09IFwiXCIpIHtcclxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IGFycmF5Lmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICBhcnJheVtpbmRdID0gaGVscGVyLnJlcGxhY2VJbWdUYWdCeUFsdChhcnJheVtpbmRdKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gYXJyYXk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldE51bWJlckFycmF5KG5hbWU6IHN0cmluZywgaW5wdXQ6IGFueSk6IEFycmF5PG51bWJlcj4gfCBzdHJpbmcge1xyXG4gICAgbGV0IG51bUFycmF5OiBBcnJheTxudW1iZXI+ID0gW107XHJcblxyXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJ1bmRlZmluZWRcIiB8fCBpbnB1dCA9PT0gbnVsbCkgcmV0dXJuIG51bUFycmF5O1xyXG5cclxuICAgIGlmICh0eXBlb2YgaW5wdXQgPT09IFwib2JqZWN0XCIpIHtcclxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgZWxlbSBvZiBpbnB1dCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHYgPSBwYXJzZUZsb2F0KGVsZW0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOdW1iZXIodikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtQXJyYXkucHVzaCh2KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYFBhcmFtZXRlciAnJHtuYW1lfScgYWNjZXB0cyBvbmx5IG51bWJlcnNgO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgbGV0IHNwbGl0dGVkID0gc3BsaXRJbnB1dEJ5Q29tbWEoaW5wdXQpO1xyXG4gICAgICAgIGlmIChzcGxpdHRlZC5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHBpZWNlIG9mIHNwbGl0dGVkKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdiA9IHBhcnNlRmxvYXQocGllY2UudHJpbSgpKTtcclxuICAgICAgICAgICAgICAgIGlmICghTnVtYmVyLmlzTmFOKHYpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gTnVtYmVyLmlzTnVtYmVyKE5hTikgLS0+IHRydWVcclxuICAgICAgICAgICAgICAgICAgICBudW1BcnJheS5wdXNoKHYpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYFBhcmFtZXRlciAnJHtuYW1lfScgYWNjZXB0cyBvbmx5IG51bWJlcnNgO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBgRW1wdHkgJHtuYW1lfSBpcyBub3QgYWxsb3dlZC5gO1xyXG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCB2ID0gcGFyc2VGbG9hdChpbnB1dCk7XHJcbiAgICAgICAgICAgIGlmIChOdW1iZXIuaXNOdW1iZXIodikpIHtcclxuICAgICAgICAgICAgICAgIG51bUFycmF5LnB1c2godik7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYFBhcmFtZXRlciAnJHtuYW1lfScgYWNjZXB0cyBvbmx5IG51bWJlcnNgO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgbnVtQXJyYXkucHVzaChpbnB1dCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBgSW52YWxpZCAke25hbWV9YDtcclxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBudW1BcnJheTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U3RyaW5nQXJyYXkobmFtZTogc3RyaW5nLCBpbnB1dDogYW55KTogQXJyYXk8c3RyaW5nPiB8IHN0cmluZyB7XHJcbiAgICBsZXQgc3RyQXJyYXk6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuXHJcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSBcInVuZGVmaW5lZFwiIHx8IGlucHV0ID09PSBudWxsKSByZXR1cm4gc3RyQXJyYXk7XHJcblxyXG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBlbGVtIG9mIGlucHV0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGVsZW0gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBzdHJBcnJheS5wdXNoKGVsZW0udHJpbSgpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgbGV0IHNwbGl0dGVkID0gc3BsaXRJbnB1dEJ5Q29tbWEoaW5wdXQpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHNwbGl0dGVkKTtcclxuICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBwaWVjZSBvZiBzcGxpdHRlZCkge1xyXG4gICAgICAgICAgICAgICAgc3RyQXJyYXkucHVzaChwaWVjZS50cmltKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gYEVtcHR5ICR7bmFtZX0gaXMgbm90IGFsbG93ZWQuYDtcclxuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzdHJBcnJheS5wdXNoKGlucHV0KTtcclxuICAgICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBgSW52YWxpZCAke25hbWV9YDtcclxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgfVxyXG5cclxuICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHN0ckFycmF5Lmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICBzdHJBcnJheVtpbmRdID0gaGVscGVyLnJlcGxhY2VJbWdUYWdCeUFsdChzdHJBcnJheVtpbmRdKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gc3RyQXJyYXk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHBhcnNlQ29tbW9uQ2hhcnRJbmZvKHlhbWw6IGFueSwgcmVuZGVySW5mbzogQ29tbW9uQ2hhcnRJbmZvKSB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcInBhcnNlQ29tbW9uQ2hhcnRJbmZvXCIpO1xyXG5cclxuICAgIC8vIHNpbmdsZSB2YWx1ZSwgdXNlIGRlZmF1bHQgdmFsdWUgaWYgbm8gdmFsdWUgZnJvbSBZQU1MXHJcbiAgICBpZiAoeWFtbCkge1xyXG4gICAgICAgIC8vIHRpdGxlXHJcbiAgICAgICAgcmVuZGVySW5mby50aXRsZSA9IGdldFN0cmluZ0Zyb21JbnB1dCh5YW1sPy50aXRsZSwgcmVuZGVySW5mby50aXRsZSk7XHJcblxyXG4gICAgICAgIC8vIHhBeGlzTGFiZWxcclxuICAgICAgICByZW5kZXJJbmZvLnhBeGlzTGFiZWwgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIHlhbWw/LnhBeGlzTGFiZWwsXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8ueEF4aXNMYWJlbFxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIHhBeGlzQ29sb3JcclxuICAgICAgICByZW5kZXJJbmZvLnhBeGlzQ29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIHlhbWw/LnhBeGlzQ29sb3IsXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8ueEF4aXNDb2xvclxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIHhBeGlzTGFiZWxDb2xvclxyXG4gICAgICAgIHJlbmRlckluZm8ueEF4aXNMYWJlbENvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxyXG4gICAgICAgICAgICB5YW1sPy54QXhpc0xhYmVsQ29sb3IsXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8ueEF4aXNMYWJlbENvbG9yXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gYWxsb3dJbnNwZWN0RGF0YVxyXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbC5hbGxvd0luc3BlY3REYXRhID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmFsbG93SW5zcGVjdERhdGEgPSB5YW1sLmFsbG93SW5zcGVjdERhdGE7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBzaG93TGVnZW5kXHJcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sLnNob3dMZWdlbmQgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uc2hvd0xlZ2VuZCA9IHlhbWwuc2hvd0xlZ2VuZDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGxlZ2VuZFBvc2l0aW9uXHJcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sLmxlZ2VuZFBvc2l0aW9uID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kUG9zaXRpb24gPSB5YW1sLmxlZ2VuZFBvc2l0aW9uO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kUG9zaXRpb24gPSBcImJvdHRvbVwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbGVnZW5kT3JpZW50XHJcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sLmxlZ2VuZE9yaWVudGF0aW9uID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kT3JpZW50YXRpb24gPSB5YW1sLmxlZ2VuZE9yaWVudGF0aW9uO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwidG9wXCIgfHxcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kUG9zaXRpb24gPT09IFwiYm90dG9tXCJcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZE9yaWVudGF0aW9uID0gXCJob3Jpem9udGFsXCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZFBvc2l0aW9uID09PSBcImxlZnRcIiB8fFxyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5sZWdlbmRQb3NpdGlvbiA9PT0gXCJyaWdodFwiXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5sZWdlbmRPcmllbnRhdGlvbiA9IFwidmVydGljYWxcIjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8ubGVnZW5kT3JpZW50YXRpb24gPSBcImhvcml6b250YWxcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmxlZ2VuZFBvc2l0aW9uKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmxlZ2VuZE9yaWVudGF0aW9uKTtcclxuXHJcbiAgICAgICAgLy8gbGVnZW5kQmdDb2xvclxyXG4gICAgICAgIHJlbmRlckluZm8ubGVnZW5kQmdDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcclxuICAgICAgICAgICAgeWFtbD8ubGVnZW5kQmdDb2xvcixcclxuICAgICAgICAgICAgcmVuZGVySW5mby5sZWdlbmRCZ0NvbG9yXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gbGVnZW5kQm9yZGVyQ29sb3JcclxuICAgICAgICByZW5kZXJJbmZvLmxlZ2VuZEJvcmRlckNvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxyXG4gICAgICAgICAgICB5YW1sPy5sZWdlbmRCb3JkZXJDb2xvcixcclxuICAgICAgICAgICAgcmVuZGVySW5mby5sZWdlbmRCb3JkZXJDb2xvclxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8geUF4aXNMYWJlbFxyXG4gICAgbGV0IHJldFlBeGlzTGFiZWwgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcclxuICAgICAgICBcInlBeGlzTGFiZWxcIixcclxuICAgICAgICB5YW1sPy55QXhpc0xhYmVsLFxyXG4gICAgICAgIDIsXHJcbiAgICAgICAgXCJWYWx1ZVwiLFxyXG4gICAgICAgIG51bGwsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgcmV0WUF4aXNMYWJlbCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiByZXRZQXhpc0xhYmVsOyAvLyBlcnJvck1lc3NhZ2VcclxuICAgIH1cclxuICAgIGlmIChyZXRZQXhpc0xhYmVsLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICByZXR1cm4gXCJ5QXhpc0xhYmVsIGFjY2VwdHMgbm90IG1vcmUgdGhhbiB0d28gdmFsdWVzIGZvciBsZWZ0IGFuZCByaWdodCB5LWF4ZXNcIjtcclxuICAgIH1cclxuICAgIHJlbmRlckluZm8ueUF4aXNMYWJlbCA9IHJldFlBeGlzTGFiZWw7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnlBeGlzTGFiZWwpO1xyXG5cclxuICAgIC8vIHlBeGlzQ29sb3JcclxuICAgIGxldCByZXRZQXhpc0NvbG9yID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgXCJ5QXhpc0NvbG9yXCIsXHJcbiAgICAgICAgeWFtbD8ueUF4aXNDb2xvcixcclxuICAgICAgICAyLFxyXG4gICAgICAgIFwiXCIsXHJcbiAgICAgICAgdmFsaWRhdGVDb2xvcixcclxuICAgICAgICB0cnVlXHJcbiAgICApO1xyXG4gICAgaWYgKHR5cGVvZiByZXRZQXhpc0NvbG9yID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldFlBeGlzQ29sb3I7IC8vIGVycm9yTWVzc2FnZVxyXG4gICAgfVxyXG4gICAgaWYgKHJldFlBeGlzQ29sb3IubGVuZ3RoID4gMikge1xyXG4gICAgICAgIHJldHVybiBcInlBeGlzQ29sb3IgYWNjZXB0cyBub3QgbW9yZSB0aGFuIHR3byB2YWx1ZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHktYXhlc1wiO1xyXG4gICAgfVxyXG4gICAgcmVuZGVySW5mby55QXhpc0NvbG9yID0gcmV0WUF4aXNDb2xvcjtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ueUF4aXNDb2xvcik7XHJcblxyXG4gICAgLy8geUF4aXNMYWJlbENvbG9yXHJcbiAgICBsZXQgcmV0WUF4aXNMYWJlbENvbG9yID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgXCJ5QXhpc0xhYmVsQ29sb3JcIixcclxuICAgICAgICB5YW1sPy55QXhpc0xhYmVsQ29sb3IsXHJcbiAgICAgICAgMixcclxuICAgICAgICBcIlwiLFxyXG4gICAgICAgIHZhbGlkYXRlQ29sb3IsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgcmV0WUF4aXNMYWJlbENvbG9yID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldFlBeGlzTGFiZWxDb2xvcjsgLy8gZXJyb3JNZXNzYWdlXHJcbiAgICB9XHJcbiAgICBpZiAocmV0WUF4aXNMYWJlbENvbG9yLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICByZXR1cm4gXCJ5QXhpc0xhYmVsQ29sb3IgYWNjZXB0cyBub3QgbW9yZSB0aGFuIHR3byB2YWx1ZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHktYXhlc1wiO1xyXG4gICAgfVxyXG4gICAgcmVuZGVySW5mby55QXhpc0xhYmVsQ29sb3IgPSByZXRZQXhpc0xhYmVsQ29sb3I7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnlBeGlzTGFiZWxDb2xvcik7XHJcblxyXG4gICAgLy8geUF4aXNVbml0XHJcbiAgICBsZXQgcmV0WUF4aXNVbml0ID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgXCJ5QXhpc1VuaXRcIixcclxuICAgICAgICB5YW1sPy55QXhpc1VuaXQsXHJcbiAgICAgICAgMixcclxuICAgICAgICBcIlwiLFxyXG4gICAgICAgIG51bGwsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgcmV0WUF4aXNVbml0ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldFlBeGlzVW5pdDsgLy8gZXJyb3JNZXNzYWdlXHJcbiAgICB9XHJcbiAgICBpZiAocmV0WUF4aXNVbml0Lmxlbmd0aCA+IDIpIHtcclxuICAgICAgICByZXR1cm4gXCJ5QXhpc1VuaXQgYWNjZXB0cyBub3QgbW9yZSB0aGFuIHR3byB2YWx1ZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHktYXhlc1wiO1xyXG4gICAgfVxyXG4gICAgcmVuZGVySW5mby55QXhpc1VuaXQgPSByZXRZQXhpc1VuaXQ7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnlBeGlzVW5pdCk7XHJcblxyXG4gICAgLy8geEF4aXNUaWNrSW50ZXJ2YWxcclxuICAgIHJlbmRlckluZm8ueEF4aXNUaWNrSW50ZXJ2YWwgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXHJcbiAgICAgICAgeWFtbD8ueEF4aXNUaWNrSW50ZXJ2YWwsXHJcbiAgICAgICAgcmVuZGVySW5mby54QXhpc1RpY2tJbnRlcnZhbFxyXG4gICAgKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ueEF4aXNUaWNrSW50ZXJ2YWwpO1xyXG5cclxuICAgIC8vIHlBeGlzVGlja0ludGVydmFsXHJcbiAgICBsZXQgcmV0WUF4aXNUaWNrSW50ZXJ2YWwgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcclxuICAgICAgICBcInlBeGlzVGlja0ludGVydmFsXCIsXHJcbiAgICAgICAgeWFtbD8ueUF4aXNUaWNrSW50ZXJ2YWwsXHJcbiAgICAgICAgMixcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIG51bGwsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgcmV0WUF4aXNUaWNrSW50ZXJ2YWwgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gcmV0WUF4aXNUaWNrSW50ZXJ2YWw7IC8vIGVycm9yTWVzc2FnZVxyXG4gICAgfVxyXG4gICAgaWYgKHJldFlBeGlzVGlja0ludGVydmFsLmxlbmd0aCA+IDIpIHtcclxuICAgICAgICByZXR1cm4gXCJ5QXhpc1RpY2tJbnRlcnZhbCBhY2NlcHRzIG5vdCBtb3JlIHRoYW4gdHdvIHZhbHVlcyBmb3IgbGVmdCBhbmQgcmlnaHQgeS1heGVzXCI7XHJcbiAgICB9XHJcbiAgICByZW5kZXJJbmZvLnlBeGlzVGlja0ludGVydmFsID0gcmV0WUF4aXNUaWNrSW50ZXJ2YWw7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnlBeGlzVGlja0ludGVydmFsKTtcclxuXHJcbiAgICAvLyB4QXhpc1RpY2tMYWJlbEZvcm1hdFxyXG4gICAgcmVuZGVySW5mby54QXhpc1RpY2tMYWJlbEZvcm1hdCA9IGdldFN0cmluZ0Zyb21JbnB1dChcclxuICAgICAgICB5YW1sPy54QXhpc1RpY2tMYWJlbEZvcm1hdCxcclxuICAgICAgICByZW5kZXJJbmZvLnhBeGlzVGlja0xhYmVsRm9ybWF0XHJcbiAgICApO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby54QXhpc1RpY2tMYWJlbEZvcm1hdCk7XHJcblxyXG4gICAgLy8geUF4aXNUaWNrTGFiZWxGb3JtYXRcclxuICAgIGxldCByZXRZQXhpc1RpY2tMYWJlbEZvcm1hdCA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxyXG4gICAgICAgIFwieUF4aXNUaWNrTGFiZWxGb3JtYXRcIixcclxuICAgICAgICB5YW1sPy55QXhpc1RpY2tMYWJlbEZvcm1hdCxcclxuICAgICAgICAyLFxyXG4gICAgICAgIG51bGwsXHJcbiAgICAgICAgbnVsbCxcclxuICAgICAgICB0cnVlXHJcbiAgICApO1xyXG4gICAgaWYgKHR5cGVvZiByZXRZQXhpc1RpY2tMYWJlbEZvcm1hdCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiByZXRZQXhpc1RpY2tMYWJlbEZvcm1hdDsgLy8gZXJyb3JNZXNzYWdlXHJcbiAgICB9XHJcbiAgICBpZiAocmV0WUF4aXNUaWNrTGFiZWxGb3JtYXQubGVuZ3RoID4gMikge1xyXG4gICAgICAgIHJldHVybiBcInlBeGlzVGlja0xhYmVsRm9ybWF0IGFjY2VwdHMgbm90IG1vcmUgdGhhbiB0d28gdmFsdWVzIGZvciBsZWZ0IGFuZCByaWdodCB5LWF4ZXNcIjtcclxuICAgIH1cclxuICAgIHJlbmRlckluZm8ueUF4aXNUaWNrTGFiZWxGb3JtYXQgPSByZXRZQXhpc1RpY2tMYWJlbEZvcm1hdDtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ueUF4aXNUaWNrTGFiZWxGb3JtYXQpO1xyXG5cclxuICAgIC8vIHlNaW5cclxuICAgIGxldCByZXRZTWluID0gZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQoXCJ5TWluXCIsIHlhbWw/LnlNaW4sIDIsIG51bGwsIHRydWUpO1xyXG4gICAgaWYgKHR5cGVvZiByZXRZTWluID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldFlNaW47IC8vIGVycm9yTWVzc2FnZVxyXG4gICAgfVxyXG4gICAgaWYgKHJldFlNaW4ubGVuZ3RoID4gMikge1xyXG4gICAgICAgIHJldHVybiBcInlNaW4gYWNjZXB0cyBub3QgbW9yZSB0aGFuIHR3byB2YWx1ZXMgZm9yIGxlZnQgYW5kIHJpZ2h0IHktYXhlc1wiO1xyXG4gICAgfVxyXG4gICAgcmVuZGVySW5mby55TWluID0gcmV0WU1pbjtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ueU1pbik7XHJcblxyXG4gICAgLy8geU1heFxyXG4gICAgbGV0IHJldFlNYXggPSBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcInlNYXhcIiwgeWFtbD8ueU1heCwgMiwgbnVsbCwgdHJ1ZSk7XHJcbiAgICBpZiAodHlwZW9mIHJldFlNYXggPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gcmV0WU1heDsgLy8gZXJyb3JNZXNzYWdlXHJcbiAgICB9XHJcbiAgICBpZiAocmV0WU1heC5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgcmV0dXJuIFwieU1heCBhY2NlcHRzIG5vdCBtb3JlIHRoYW4gdHdvIHZhbHVlcyBmb3IgbGVmdCBhbmQgcmlnaHQgeS1heGVzXCI7XHJcbiAgICB9XHJcbiAgICByZW5kZXJJbmZvLnlNYXggPSByZXRZTWF4O1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby55TWF4KTtcclxuXHJcbiAgICAvLyByZXZlcnNlWUF4aXNcclxuICAgIGxldCByZXRSZXZlcnNlWUF4aXMgPSBnZXRCb29sQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgXCJyZXZlcnNlWUF4aXNcIixcclxuICAgICAgICB5YW1sPy5yZXZlcnNlWUF4aXMsXHJcbiAgICAgICAgMixcclxuICAgICAgICBmYWxzZSxcclxuICAgICAgICB0cnVlXHJcbiAgICApO1xyXG4gICAgaWYgKHR5cGVvZiByZXRSZXZlcnNlWUF4aXMgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gcmV0UmV2ZXJzZVlBeGlzOyAvLyBlcnJvck1lc3NhZ2VcclxuICAgIH1cclxuICAgIGlmIChyZXRSZXZlcnNlWUF4aXMubGVuZ3RoID4gMikge1xyXG4gICAgICAgIHJldHVybiBcInJldmVyc2VZQXhpcyBhY2NlcHRzIG5vdCBtb3JlIHRoYW4gdHdvIHZhbHVlcyBmb3IgbGVmdCBhbmQgcmlnaHQgeS1heGVzXCI7XHJcbiAgICB9XHJcbiAgICByZW5kZXJJbmZvLnJldmVyc2VZQXhpcyA9IHJldFJldmVyc2VZQXhpcztcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ucmV2ZXJzZVlBeGlzKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3Mob2JqOiBvYmplY3QpOiBzdHJpbmdbXSB7XHJcbiAgICBsZXQga2V5czogc3RyaW5nW10gPSBbXTtcclxuICAgIGlmIChvYmogIT09IG51bGwpIHtcclxuICAgICAgICBjb25zdCBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMob2JqKSBhcyBBcnJheTxrZXlvZiBzdHJpbmc+O1xyXG4gICAgICAgIGZvciAobGV0IGtleSBvZiBvYmplY3RLZXlzKSB7XHJcbiAgICAgICAgICAgIGtleXMucHVzaChrZXkudG9TdHJpbmcoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGtleXM7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXRSZW5kZXJJbmZvRnJvbVlhbWwoXHJcbiAgICB5YW1sVGV4dDogc3RyaW5nLFxyXG4gICAgcGx1Z2luOiBUcmFja2VyXHJcbik6IFJlbmRlckluZm8gfCBzdHJpbmcge1xyXG4gICAgbGV0IHlhbWw7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHlhbWwgPSBwYXJzZVlhbWwoeWFtbFRleHQpO1xyXG4gICAgfSBjYXRjaCAoZXJyKSB7XHJcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiRXJyb3IgcGFyc2luZyBZQU1MXCI7XHJcbiAgICAgICAgY29uc29sZS5sb2coZXJyKTtcclxuICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgfVxyXG4gICAgaWYgKCF5YW1sKSB7XHJcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9IFwiRXJyb3IgcGFyc2luZyBZQU1MXCI7XHJcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKHlhbWwpO1xyXG4gICAgbGV0IGtleXNGb3VuZEluWUFNTCA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHlhbWwpO1xyXG4gICAgLy8gY29uc29sZS5sb2coa2V5c0ZvdW5kSW5ZQU1MKTtcclxuXHJcbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJcIjtcclxuXHJcbiAgICAvLyBTZWFyY2ggdGFyZ2V0XHJcbiAgICBpZiAoIWtleXNGb3VuZEluWUFNTC5pbmNsdWRlcyhcInNlYXJjaFRhcmdldFwiKSkge1xyXG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIlBhcmFtZXRlciAnc2VhcmNoVGFyZ2V0JyBub3QgZm91bmQgaW4gWUFNTFwiO1xyXG4gICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICB9XHJcbiAgICBsZXQgc2VhcmNoVGFyZ2V0OiBBcnJheTxzdHJpbmc+ID0gW107XHJcbiAgICBpZiAodHlwZW9mIHlhbWwuc2VhcmNoVGFyZ2V0ID09PSBcIm9iamVjdFwiICYmIHlhbWwuc2VhcmNoVGFyZ2V0ICE9PSBudWxsKSB7XHJcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoeWFtbC5zZWFyY2hUYXJnZXQpKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHRhcmdldCBvZiB5YW1sLnNlYXJjaFRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaFRhcmdldC5wdXNoKHRhcmdldCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJFbXB0eSBzZWFyY2ggdGFyZ2V0IGlzIG5vdCBhbGxvd2VkLlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB5YW1sLnNlYXJjaFRhcmdldCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIGxldCBzcGxpdHRlZCA9IHNwbGl0SW5wdXRCeUNvbW1hKHlhbWwuc2VhcmNoVGFyZ2V0KTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhzcGxpdHRlZCk7XHJcbiAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgcGllY2Ugb2Ygc3BsaXR0ZWQpIHtcclxuICAgICAgICAgICAgICAgIHBpZWNlID0gcGllY2UudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBpZWNlICE9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoVGFyZ2V0LnB1c2gocGllY2UpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkVtcHR5IHNlYXJjaCB0YXJnZXQgaXMgbm90IGFsbG93ZWQuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKHlhbWwuc2VhcmNoVGFyZ2V0ID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiRW1wdHkgc2VhcmNoIHRhcmdldCBpcyBub3QgYWxsb3dlZC5cIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzZWFyY2hUYXJnZXQucHVzaCh5YW1sLnNlYXJjaFRhcmdldCk7XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIkludmFsaWQgc2VhcmNoIHRhcmdldCAoc2VhcmNoVGFyZ2V0KVwiO1xyXG4gICAgfVxyXG4gICAgZm9yIChsZXQgaW5kID0gMDsgaW5kIDwgc2VhcmNoVGFyZ2V0Lmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICBzZWFyY2hUYXJnZXRbaW5kXSA9IGhlbHBlci5yZXBsYWNlSW1nVGFnQnlBbHQoc2VhcmNoVGFyZ2V0W2luZF0pO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coc2VhcmNoVGFyZ2V0KTtcclxuXHJcbiAgICBpZiAoZXJyb3JNZXNzYWdlICE9PSBcIlwiKSB7XHJcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgbnVtRGF0YXNldHMgPSBzZWFyY2hUYXJnZXQubGVuZ3RoO1xyXG5cclxuICAgIC8vIFNlYXJjaCB0eXBlXHJcbiAgICBpZiAoIWtleXNGb3VuZEluWUFNTC5pbmNsdWRlcyhcInNlYXJjaFR5cGVcIikpIHtcclxuICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJQYXJhbWV0ZXIgJ3NlYXJjaFR5cGUnIG5vdCBmb3VuZCBpbiBZQU1MXCI7XHJcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgIH1cclxuICAgIGxldCBzZWFyY2hUeXBlOiBBcnJheTxTZWFyY2hUeXBlPiA9IFtdO1xyXG4gICAgbGV0IHJldFNlYXJjaFR5cGUgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcclxuICAgICAgICBcInNlYXJjaFR5cGVcIixcclxuICAgICAgICB5YW1sLnNlYXJjaFR5cGUsXHJcbiAgICAgICAgbnVtRGF0YXNldHMsXHJcbiAgICAgICAgXCJcIixcclxuICAgICAgICB2YWxpZGF0ZVNlYXJjaFR5cGUsXHJcbiAgICAgICAgZmFsc2VcclxuICAgICk7XHJcbiAgICBpZiAodHlwZW9mIHJldFNlYXJjaFR5cGUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gcmV0U2VhcmNoVHlwZTsgLy8gZXJyb3JNZXNzYWdlXHJcbiAgICB9XHJcbiAgICBmb3IgKGxldCBzdHJUeXBlIG9mIHJldFNlYXJjaFR5cGUpIHtcclxuICAgICAgICBzd2l0Y2ggKHN0clR5cGUudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICBjYXNlIFwidGFnXCI6XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5UYWcpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJmcm9udG1hdHRlclwiOlxyXG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuRnJvbnRtYXR0ZXIpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ3aWtpXCI6XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5XaWtpKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwid2lraS5saW5rXCI6XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5XaWtpTGluayk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcIndpa2kuZGlzcGxheVwiOlxyXG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuV2lraURpc3BsYXkpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ0ZXh0XCI6XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5UZXh0KTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFwiZHZmaWVsZFwiOlxyXG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuZHZGaWVsZCk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInRhYmxlXCI6XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5UYWJsZSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcImZpbGVtZXRhXCI6XHJcbiAgICAgICAgICAgICAgICBzZWFyY2hUeXBlLnB1c2goU2VhcmNoVHlwZS5GaWxlTWV0YSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInRhc2tcIjpcclxuICAgICAgICAgICAgICAgIHNlYXJjaFR5cGUucHVzaChTZWFyY2hUeXBlLlRhc2spO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ0YXNrLmFsbFwiOlxyXG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuVGFzayk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBcInRhc2suZG9uZVwiOlxyXG4gICAgICAgICAgICAgICAgc2VhcmNoVHlwZS5wdXNoKFNlYXJjaFR5cGUuVGFza0RvbmUpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgXCJ0YXNrLm5vdGRvbmVcIjpcclxuICAgICAgICAgICAgICAgIHNlYXJjaFR5cGUucHVzaChTZWFyY2hUeXBlLlRhc2tOb3REb25lKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEN1cnJlbnRseSwgd2UgZG9uJ3QgYWxsb3cgdHlwZSAndGFibGUnIHVzZWQgd2l0aCBvdGhlciB0eXBlc1xyXG4gICAgaWYgKFxyXG4gICAgICAgIHNlYXJjaFR5cGUuaW5jbHVkZXMoU2VhcmNoVHlwZS5UYWJsZSkgJiZcclxuICAgICAgICBzZWFyY2hUeXBlLmZpbHRlcigodCkgPT4gdCAhPT0gU2VhcmNoVHlwZS5UYWJsZSkubGVuZ3RoID4gMFxyXG4gICAgKSB7XHJcbiAgICAgICAgbGV0IGVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICAgIFwic2VhcmNoVHlwZSAndGFibGUnIGRvZXN0bid0IHdvcmsgd2l0aCBvdGhlciB0eXBlcyBmb3Igbm93XCI7XHJcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKHNlYXJjaFR5cGUpO1xyXG5cclxuICAgIC8vIHNlcGFyYXRvclxyXG4gICAgbGV0IG11bHRpcGxlVmFsdWVTcGFyYXRvcjogQXJyYXk8c3RyaW5nPiA9IFtdO1xyXG4gICAgbGV0IHJldE11bHRpcGxlVmFsdWVTcGFyYXRvciA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxyXG4gICAgICAgIFwic2VwYXJhdG9yXCIsXHJcbiAgICAgICAgeWFtbC5zZXBhcmF0b3IsXHJcbiAgICAgICAgbnVtRGF0YXNldHMsXHJcbiAgICAgICAgXCJcIiwgLy8gc2V0IHRoZSBkZWZhdWx0IHZhbHVlIGxhdGVyXHJcbiAgICAgICAgbnVsbCxcclxuICAgICAgICB0cnVlXHJcbiAgICApO1xyXG4gICAgaWYgKHR5cGVvZiByZXRNdWx0aXBsZVZhbHVlU3BhcmF0b3IgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gcmV0TXVsdGlwbGVWYWx1ZVNwYXJhdG9yOyAvLyBlcnJvck1lc3NhZ2VcclxuICAgIH1cclxuICAgIG11bHRpcGxlVmFsdWVTcGFyYXRvciA9IHJldE11bHRpcGxlVmFsdWVTcGFyYXRvci5tYXAoKHNlcCkgPT4ge1xyXG4gICAgICAgIGlmIChzZXAgPT09IFwiY29tbWFcIiB8fCBzZXAgPT09IFwiXFxcXCxcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gXCIsXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBzZXA7XHJcbiAgICB9KTtcclxuICAgIC8vIGNvbnNvbGUubG9nKG11bHRpcGxlVmFsdWVTcGFyYXRvcik7XHJcblxyXG4gICAgLy8geERhdGFzZXRcclxuICAgIGxldCByZXRYRGF0YXNldCA9IGdldE51bWJlckFycmF5RnJvbUlucHV0KFxyXG4gICAgICAgIFwieERhdGFzZXRcIixcclxuICAgICAgICB5YW1sLnhEYXRhc2V0LFxyXG4gICAgICAgIG51bURhdGFzZXRzLFxyXG4gICAgICAgIC0xLFxyXG4gICAgICAgIHRydWVcclxuICAgICk7XHJcbiAgICBpZiAodHlwZW9mIHJldFhEYXRhc2V0ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldFhEYXRhc2V0OyAvLyBlcnJvck1lc3NhZ2VcclxuICAgIH1cclxuICAgIGxldCB4RGF0YXNldCA9IHJldFhEYXRhc2V0Lm1hcCgoZDogbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgaWYgKGQgPCAwIHx8IGQgPj0gbnVtRGF0YXNldHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIC0xO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZDtcclxuICAgIH0pO1xyXG4gICAgLy8gYXNzaWduIHRoaXMgdG8gcmVuZGVySW5mbyBsYXRlclxyXG5cclxuICAgIC8vIENyZWF0ZSBxdWVyaWVzXHJcbiAgICBsZXQgcXVlcmllczogQXJyYXk8UXVlcnk+ID0gW107XHJcbiAgICBmb3IgKGxldCBpbmQgPSAwOyBpbmQgPCBzZWFyY2hUYXJnZXQubGVuZ3RoOyBpbmQrKykge1xyXG4gICAgICAgIGxldCBxdWVyeSA9IG5ldyBRdWVyeShcclxuICAgICAgICAgICAgcXVlcmllcy5sZW5ndGgsXHJcbiAgICAgICAgICAgIHNlYXJjaFR5cGVbaW5kXSxcclxuICAgICAgICAgICAgc2VhcmNoVGFyZ2V0W2luZF1cclxuICAgICAgICApO1xyXG4gICAgICAgIHF1ZXJ5LnNldFNlcGFyYXRvcihtdWx0aXBsZVZhbHVlU3BhcmF0b3JbaW5kXSk7XHJcbiAgICAgICAgaWYgKHhEYXRhc2V0LmluY2x1ZGVzKGluZCkpIHF1ZXJ5LnVzZWRBc1hEYXRhc2V0ID0gdHJ1ZTtcclxuICAgICAgICBxdWVyaWVzLnB1c2gocXVlcnkpO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2cocXVlcmllcyk7XHJcblxyXG4gICAgLy8gQ3JlYXRlIGdyYXJwaCBpbmZvXHJcbiAgICBsZXQgcmVuZGVySW5mbyA9IG5ldyBSZW5kZXJJbmZvKHF1ZXJpZXMpO1xyXG4gICAgbGV0IGtleXNPZlJlbmRlckluZm8gPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyhyZW5kZXJJbmZvKTtcclxuICAgIGxldCBhZGRpdGlvbmFsQWxsb3dlZEtleXMgPSBbXCJzZWFyY2hUeXBlXCIsIFwic2VhcmNoVGFyZ2V0XCIsIFwic2VwYXJhdG9yXCJdO1xyXG4gICAgLy8gY29uc29sZS5sb2coa2V5c09mUmVuZGVySW5mbyk7XHJcbiAgICBsZXQgeWFtbExpbmVLZXlzID0gW107XHJcbiAgICBsZXQgeWFtbEJhcktleXMgPSBbXTtcclxuICAgIGxldCB5YW1sUGllS2V5cyA9IFtdO1xyXG4gICAgbGV0IHlhbWxTdW1tYXJ5S2V5cyA9IFtdO1xyXG4gICAgbGV0IHlhbWxNb250aEtleXMgPSBbXTtcclxuICAgIGxldCB5YW1sSGVhdG1hcEtleXMgPSBbXTtcclxuICAgIGxldCB5YW1sQnVsbGV0S2V5cyA9IFtdO1xyXG4gICAgZm9yIChsZXQga2V5IG9mIGtleXNGb3VuZEluWUFNTCkge1xyXG4gICAgICAgIGlmICgvXmxpbmVbMC05XSokLy50ZXN0KGtleSkpIHtcclxuICAgICAgICAgICAgeWFtbExpbmVLZXlzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRLZXlzLnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKC9eYmFyWzAtOV0qJC8udGVzdChrZXkpKSB7XHJcbiAgICAgICAgICAgIHlhbWxCYXJLZXlzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRLZXlzLnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKC9ecGllWzAtOV0qJC8udGVzdChrZXkpKSB7XHJcbiAgICAgICAgICAgIHlhbWxQaWVLZXlzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRLZXlzLnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKC9ec3VtbWFyeVswLTldKiQvLnRlc3Qoa2V5KSkge1xyXG4gICAgICAgICAgICB5YW1sU3VtbWFyeUtleXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZEtleXMucHVzaChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoL15idWxsZXRbMC05XSokLy50ZXN0KGtleSkpIHtcclxuICAgICAgICAgICAgeWFtbEJ1bGxldEtleXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZEtleXMucHVzaChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoL15tb250aFswLTldKiQvLnRlc3Qoa2V5KSkge1xyXG4gICAgICAgICAgICB5YW1sTW9udGhLZXlzLnB1c2goa2V5KTtcclxuICAgICAgICAgICAgYWRkaXRpb25hbEFsbG93ZWRLZXlzLnB1c2goa2V5KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKC9eaGVhdG1hcFswLTldKiQvLnRlc3Qoa2V5KSkge1xyXG4gICAgICAgICAgICB5YW1sSGVhdG1hcEtleXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZEtleXMucHVzaChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIEN1c3RvbSBkYXRhc2V0XHJcbiAgICBsZXQgeWFtbEN1c3RvbURhdGFzZXRLZXlzID0gW107XHJcbiAgICBmb3IgKGxldCBrZXkgb2Yga2V5c0ZvdW5kSW5ZQU1MKSB7XHJcbiAgICAgICAgaWYgKC9eZGF0YXNldFswLTldKiQvLnRlc3Qoa2V5KSkge1xyXG4gICAgICAgICAgICAvLyBDaGVjayB0aGUgaWQgb2YgY3VzdG9tIGRhdGFzZXQgaXMgbm90IGR1cGxpY2F0ZWRcclxuICAgICAgICAgICAgbGV0IGN1c3RvbURhdGFzZXRJZCA9IC0xO1xyXG4gICAgICAgICAgICBsZXQgc3RyQ3VzdG9tRGF0YXNldElkID0ga2V5LnJlcGxhY2UoXCJkYXRhc2V0XCIsIFwiXCIpO1xyXG4gICAgICAgICAgICBpZiAoc3RyQ3VzdG9tRGF0YXNldElkID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICBjdXN0b21EYXRhc2V0SWQgPSAwO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY3VzdG9tRGF0YXNldElkID0gcGFyc2VGbG9hdChzdHJDdXN0b21EYXRhc2V0SWQpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBxdWVyaWVzLnNvbWUoKHEpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcS5nZXRJZCgpID09PSBjdXN0b21EYXRhc2V0SWQ7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiRHVwbGljYXRlZCBkYXRhc2V0IGlkIGZvciBrZXkgJ1wiICsga2V5ICsgXCInXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB5YW1sQ3VzdG9tRGF0YXNldEtleXMucHVzaChrZXkpO1xyXG4gICAgICAgICAgICBhZGRpdGlvbmFsQWxsb3dlZEtleXMucHVzaChrZXkpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKGFkZGl0aW9uYWxBbGxvd2VkS2V5cyk7XHJcbiAgICBmb3IgKGxldCBrZXkgb2Yga2V5c0ZvdW5kSW5ZQU1MKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAha2V5c09mUmVuZGVySW5mby5pbmNsdWRlcyhrZXkpICYmXHJcbiAgICAgICAgICAgICFhZGRpdGlvbmFsQWxsb3dlZEtleXMuaW5jbHVkZXMoa2V5KVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIidcIiArIGtleSArIFwiJyBpcyBub3QgYW4gYXZhaWxhYmxlIGtleVwiO1xyXG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgdG90YWxOdW1PdXRwdXRzID1cclxuICAgICAgICB5YW1sTGluZUtleXMubGVuZ3RoICtcclxuICAgICAgICB5YW1sQmFyS2V5cy5sZW5ndGggK1xyXG4gICAgICAgIHlhbWxQaWVLZXlzLmxlbmd0aCArXHJcbiAgICAgICAgeWFtbFN1bW1hcnlLZXlzLmxlbmd0aCArXHJcbiAgICAgICAgeWFtbEJ1bGxldEtleXMubGVuZ3RoICtcclxuICAgICAgICB5YW1sTW9udGhLZXlzLmxlbmd0aCArXHJcbiAgICAgICAgeWFtbEhlYXRtYXBLZXlzLmxlbmd0aDtcclxuICAgIGlmICh0b3RhbE51bU91dHB1dHMgPT09IDApIHtcclxuICAgICAgICByZXR1cm4gXCJObyBvdXRwdXQgcGFyYW1ldGVyIHByb3ZpZGVkLCBwbGVhc2UgcGxhY2UgbGluZSwgYmFyLCBwaWUsIG1vbnRoLCBidWxsZXQsIG9yIHN1bW1hcnkuXCI7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gUm9vdCBmb2xkZXIgdG8gc2VhcmNoXHJcbiAgICBpZiAodHlwZW9mIHlhbWwuZm9sZGVyID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgaWYgKHlhbWwuZm9sZGVyID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZm9sZGVyID0gcGx1Z2luLnNldHRpbmdzLmZvbGRlcjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmZvbGRlciA9IHlhbWwuZm9sZGVyO1xyXG4gICAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgcmVuZGVySW5mby5mb2xkZXIgPSBwbHVnaW4uc2V0dGluZ3MuZm9sZGVyO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coXCJyZW5kZXJJbmZvIGZvbGRlcjogXCIgKyByZW5kZXJJbmZvLmZvbGRlcik7XHJcblxyXG4gICAgbGV0IGFic3RyYWN0Rm9sZGVyID0gcGx1Z2luLmFwcC52YXVsdC5nZXRBYnN0cmFjdEZpbGVCeVBhdGgoXHJcbiAgICAgICAgbm9ybWFsaXplUGF0aChyZW5kZXJJbmZvLmZvbGRlcilcclxuICAgICk7XHJcbiAgICBpZiAoIWFic3RyYWN0Rm9sZGVyIHx8ICEoYWJzdHJhY3RGb2xkZXIgaW5zdGFuY2VvZiBURm9sZGVyKSkge1xyXG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIkZvbGRlciAnXCIgKyByZW5kZXJJbmZvLmZvbGRlciArIFwiJyBkb2Vzbid0IGV4aXN0XCI7XHJcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBmaWxlXHJcbiAgICBpZiAodHlwZW9mIHlhbWwuZmlsZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIGxldCByZXRGaWxlcyA9IGdldFN0cmluZ0FycmF5KFwiZmlsZVwiLCB5YW1sLmZpbGUpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0RmlsZXMgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldEZpbGVzOyAvLyBlcnJvciBtZXNzYWdlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlbmRlckluZm8uZmlsZSA9IHJldEZpbGVzO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5maWxlKTtcclxuXHJcbiAgICAvLyBzcGVjaWZpZWRGaWxlc09ubHlcclxuICAgIGlmICh0eXBlb2YgeWFtbC5zcGVjaWZpZWRGaWxlc09ubHkgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgcmVuZGVySW5mby5zcGVjaWZpZWRGaWxlc09ubHkgPSB5YW1sLnNwZWNpZmllZEZpbGVzT25seTtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uc3BlY2lmaWVkRmlsZXNPbmx5KTtcclxuXHJcbiAgICAvLyBmaWxlQ29udGFpbnNMaW5rZWRGaWxlc1xyXG4gICAgaWYgKHR5cGVvZiB5YW1sLmZpbGVDb250YWluc0xpbmtlZEZpbGVzID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgbGV0IHJldEZpbGVzID0gZ2V0U3RyaW5nQXJyYXkoXHJcbiAgICAgICAgICAgIFwiZmlsZUNvbnRhaW5zTGlua2VkRmlsZXNcIixcclxuICAgICAgICAgICAgeWFtbC5maWxlQ29udGFpbnNMaW5rZWRGaWxlc1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXRGaWxlcyA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0RmlsZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlbmRlckluZm8uZmlsZUNvbnRhaW5zTGlua2VkRmlsZXMgPSByZXRGaWxlcztcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uZmlsZUNvbnRhaW5zTGlua2VkRmlsZXMpO1xyXG5cclxuICAgIC8vIGZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rXHJcbiAgICByZW5kZXJJbmZvLmZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxyXG4gICAgICAgIHlhbWw/LmZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rLFxyXG4gICAgICAgIHJlbmRlckluZm8uZmlsZU11bHRpcGxpZXJBZnRlckxpbmtcclxuICAgICk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rKTtcclxuXHJcbiAgICAvLyBEYXRlIGZvcm1hdFxyXG4gICAgY29uc3QgZGF0ZUZvcm1hdCA9IHlhbWwuZGF0ZUZvcm1hdDtcclxuICAgIC8vPz8gbm90IHN1cmUgd2h5IEkgbmVlZCB0aGlzIHRvIG1ha2UgaXQgd29ya3MsXHJcbiAgICAvLyB3aXRob3V0IHRoYXQsIHRoZSBhc3NpZ25lZCB0aGUgcmVuZGVySW5mby5kYXRlRm9ybWF0IHdpbGwgYmVjb21lIHVuZGVmaW5lZFxyXG4gICAgaWYgKHR5cGVvZiB5YW1sLmRhdGVGb3JtYXQgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICBpZiAoeWFtbC5kYXRlRm9ybWF0ID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdCA9IHBsdWdpbi5zZXR0aW5ncy5kYXRlRm9ybWF0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdCA9IGRhdGVGb3JtYXQ7XHJcbiAgICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXQgPSBwbHVnaW4uc2V0dGluZ3MuZGF0ZUZvcm1hdDtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKFwicmVuZGVySW5mbyBkYXRlRm9ybWF0OiBcIiArIHJlbmRlckluZm8uZGF0ZUZvcm1hdCk7XHJcblxyXG4gICAgLy8gRGF0ZSBmb3JtYXQgcHJlZml4XHJcbiAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRQcmVmaXggPSBnZXRTdHJpbmdGcm9tSW5wdXQoXHJcbiAgICAgICAgeWFtbD8uZGF0ZUZvcm1hdFByZWZpeCxcclxuICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRQcmVmaXhcclxuICAgICk7XHJcblxyXG4gICAgLy8gRGF0ZSBmcm9tYXQgc3VmZml4XHJcbiAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRTdWZmaXggPSBnZXRTdHJpbmdGcm9tSW5wdXQoXHJcbiAgICAgICAgeWFtbD8uZGF0ZUZvcm1hdFN1ZmZpeCxcclxuICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRTdWZmaXhcclxuICAgICk7XHJcblxyXG4gICAgLy8gc3RhcnREYXRlLCBlbmREYXRlXHJcbiAgICAvLyBjb25zb2xlLmxvZyhcIlBhcnNpbmcgc3RhcnREYXRlXCIpO1xyXG4gICAgaWYgKHR5cGVvZiB5YW1sLnN0YXJ0RGF0ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIGlmICgvXihbXFwtXT9bMC05XStbXFwuXVswLTldK3xbXFwtXT9bMC05XSspbSQvLnRlc3QoeWFtbC5zdGFydERhdGUpKSB7XHJcbiAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICAgICAgICAgXCInbScgZm9yICdtaW51dGUnIGlzIHRvbyBzbWFsbCBmb3IgcGFyYW1ldGVyIHN0YXJ0RGF0ZSwgcGxlYXNlIHVzZSAnZCcgZm9yICdkYXknIG9yICdNJyBmb3IgbW9udGhcIjtcclxuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHN0clN0YXJ0RGF0ZSA9IGhlbHBlci5nZXREYXRlU3RyaW5nRnJvbUlucHV0U3RyaW5nKFxyXG4gICAgICAgICAgICB5YW1sLnN0YXJ0RGF0ZSxcclxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0UHJlZml4LFxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRTdWZmaXhcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHN0clN0YXJ0RGF0ZSk7XHJcblxyXG4gICAgICAgIC8vIHJlbGF0aXZlIGRhdGVcclxuICAgICAgICBsZXQgc3RhcnREYXRlID0gbnVsbDtcclxuICAgICAgICBsZXQgaXNTdGFydERhdGVWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgIHN0YXJ0RGF0ZSA9IGhlbHBlci5nZXREYXRlQnlEdXJhdGlvblRvVG9kYXkoXHJcbiAgICAgICAgICAgIHN0clN0YXJ0RGF0ZSxcclxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0XHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhzdGFydERhdGUpO1xyXG5cclxuICAgICAgICBpZiAoc3RhcnREYXRlKSB7XHJcbiAgICAgICAgICAgIGlzU3RhcnREYXRlVmFsaWQgPSB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHN0YXJ0RGF0ZSA9IGhlbHBlci5zdHJUb0RhdGUoc3RyU3RhcnREYXRlLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xyXG4gICAgICAgICAgICBpZiAoc3RhcnREYXRlLmlzVmFsaWQoKSkge1xyXG4gICAgICAgICAgICAgICAgaXNTdGFydERhdGVWYWxpZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coc3RhcnREYXRlKTtcclxuXHJcbiAgICAgICAgaWYgKCFpc1N0YXJ0RGF0ZVZhbGlkIHx8IHN0YXJ0RGF0ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgICAgIFwiSW52YWxpZCBzdGFydERhdGUsIHRoZSBmb3JtYXQgb2Ygc3RhcnREYXRlIG1heSBub3QgbWF0Y2ggeW91ciBkYXRlRm9ybWF0IFwiICtcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdDtcclxuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmVuZGVySW5mby5zdGFydERhdGUgPSBzdGFydERhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gY29uc29sZS5sb2coXCJQYXJzaW5nIGVuZERhdGVcIik7XHJcbiAgICBpZiAodHlwZW9mIHlhbWwuZW5kRGF0ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIGlmICgvXihbXFwtXT9bMC05XStbXFwuXVswLTldK3xbXFwtXT9bMC05XSspbSQvLnRlc3QoeWFtbC5lbmREYXRlKSkge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgICAgIFwiJ20nIGZvciAnbWludXRlJyBpcyB0b28gc21hbGwgZm9yIHBhcmFtZXRlciBlbmREYXRlLCBwbGVhc2UgdXNlICdkJyBmb3IgJ2RheScgb3IgJ00nIGZvciBtb250aFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgc3RyRW5kRGF0ZSA9IGhlbHBlci5nZXREYXRlU3RyaW5nRnJvbUlucHV0U3RyaW5nKFxyXG4gICAgICAgICAgICB5YW1sLmVuZERhdGUsXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFByZWZpeCxcclxuICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0U3VmZml4XHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgbGV0IGVuZERhdGUgPSBudWxsO1xyXG4gICAgICAgIGxldCBpc0VuZERhdGVWYWxpZCA9IGZhbHNlO1xyXG4gICAgICAgIGVuZERhdGUgPSBoZWxwZXIuZ2V0RGF0ZUJ5RHVyYXRpb25Ub1RvZGF5KFxyXG4gICAgICAgICAgICBzdHJFbmREYXRlLFxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChlbmREYXRlKSB7XHJcbiAgICAgICAgICAgIGlzRW5kRGF0ZVZhbGlkID0gdHJ1ZTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBlbmREYXRlID0gaGVscGVyLnN0clRvRGF0ZShzdHJFbmREYXRlLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xyXG4gICAgICAgICAgICBpZiAoZW5kRGF0ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgICAgICAgICAgIGlzRW5kRGF0ZVZhbGlkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhlbmREYXRlKTtcclxuXHJcbiAgICAgICAgaWYgKCFpc0VuZERhdGVWYWxpZCB8fCBlbmREYXRlID09PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICAgICAgICAgXCJJbnZhbGlkIGVuZERhdGUsIHRoZSBmb3JtYXQgb2YgZW5kRGF0ZSBtYXkgbm90IG1hdGNoIHlvdXIgZGF0ZUZvcm1hdCBcIiArXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXQ7XHJcbiAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJlbmRlckluZm8uZW5kRGF0ZSA9IGVuZERhdGU7XHJcbiAgICB9XHJcbiAgICBpZiAoXHJcbiAgICAgICAgcmVuZGVySW5mby5zdGFydERhdGUgIT09IG51bGwgJiZcclxuICAgICAgICByZW5kZXJJbmZvLnN0YXJ0RGF0ZS5pc1ZhbGlkKCkgJiZcclxuICAgICAgICByZW5kZXJJbmZvLmVuZERhdGUgIT09IG51bGwgJiZcclxuICAgICAgICByZW5kZXJJbmZvLmVuZERhdGUuaXNWYWxpZCgpXHJcbiAgICApIHtcclxuICAgICAgICAvLyBNYWtlIHN1cmUgZW5kRGF0ZSA+IHN0YXJ0RGF0ZVxyXG4gICAgICAgIGlmIChyZW5kZXJJbmZvLmVuZERhdGUgPCByZW5kZXJJbmZvLnN0YXJ0RGF0ZSkge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgICAgIFwiSW52YWxpZCBkYXRlIHJhbmdlIChzdGFydERhdGUgbGFyZ2VyIHRoYW4gZW5kRGF0ZSlcIjtcclxuICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnN0YXJ0RGF0ZSk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmVuZERhdGUpO1xyXG5cclxuICAgIC8vIHhEYXRhc2V0XHJcbiAgICByZW5kZXJJbmZvLnhEYXRhc2V0ID0geERhdGFzZXQ7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLnhEYXRhc2V0KTtcclxuXHJcbiAgICAvLyBEYXRhc2V0IG5hbWUgKG5lZWQgeERhdGFzZXQgdG8gc2V0IGRlZmF1bHQgbmFtZSlcclxuICAgIGxldCByZXREYXRhc2V0TmFtZSA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxyXG4gICAgICAgIFwiZGF0YXNldE5hbWVcIixcclxuICAgICAgICB5YW1sLmRhdGFzZXROYW1lLFxyXG4gICAgICAgIG51bURhdGFzZXRzLFxyXG4gICAgICAgIFwidW50aXRsZWRcIixcclxuICAgICAgICBudWxsLFxyXG4gICAgICAgIHRydWVcclxuICAgICk7XHJcbiAgICBpZiAodHlwZW9mIHJldERhdGFzZXROYW1lID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldERhdGFzZXROYW1lOyAvLyBlcnJvck1lc3NhZ2VcclxuICAgIH1cclxuICAgIC8vIHJlbmFtZSB1bnRpdGxlZFxyXG4gICAgbGV0IGluZFVudGl0bGVkID0gMDtcclxuICAgIGZvciAobGV0IGluZCA9IDA7IGluZCA8IHJldERhdGFzZXROYW1lLmxlbmd0aDsgaW5kKyspIHtcclxuICAgICAgICBpZiAocmVuZGVySW5mby54RGF0YXNldC5pbmNsdWRlcyhpbmQpKSBjb250aW51ZTtcclxuICAgICAgICBpZiAocmV0RGF0YXNldE5hbWVbaW5kXSA9PT0gXCJ1bnRpdGxlZFwiKSB7XHJcbiAgICAgICAgICAgIHJldERhdGFzZXROYW1lW2luZF0gPSBcInVudGl0bGVkXCIgKyBpbmRVbnRpdGxlZC50b1N0cmluZygpO1xyXG4gICAgICAgICAgICBpbmRVbnRpdGxlZCsrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8vIENoZWNrIGR1cGxpY2F0ZWQgbmFtZXNcclxuICAgIGlmIChuZXcgU2V0KHJldERhdGFzZXROYW1lKS5zaXplID09PSByZXREYXRhc2V0TmFtZS5sZW5ndGgpIHtcclxuICAgICAgICByZW5kZXJJbmZvLmRhdGFzZXROYW1lID0gcmV0RGF0YXNldE5hbWU7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIGxldCBlcnJvck1lc3NhZ2UgPSBcIk5vdCBlbm91Z2ggZGF0YXNldCBuYW1lcyBvciBkdXBsaWNhdGVkIG5hbWVzXCI7XHJcbiAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uZGF0YXNldE5hbWUpO1xyXG5cclxuICAgIC8vIGNvbnN0VmFsdWVcclxuICAgIGxldCByZXRDb25zdFZhbHVlID0gZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgXCJjb25zdFZhbHVlXCIsXHJcbiAgICAgICAgeWFtbC5jb25zdFZhbHVlLFxyXG4gICAgICAgIG51bURhdGFzZXRzLFxyXG4gICAgICAgIDEuMCxcclxuICAgICAgICB0cnVlXHJcbiAgICApO1xyXG4gICAgaWYgKHR5cGVvZiByZXRDb25zdFZhbHVlID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldENvbnN0VmFsdWU7IC8vIGVycm9yTWVzc2FnZVxyXG4gICAgfVxyXG4gICAgcmVuZGVySW5mby5jb25zdFZhbHVlID0gcmV0Q29uc3RWYWx1ZTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uY29uc3RWYWx1ZSk7XHJcblxyXG4gICAgLy8gaWdub3JlQXR0YWNoZWRWYWx1ZVxyXG4gICAgbGV0IHJldElnbm9yZUF0dGFjaGVkVmFsdWUgPSBnZXRCb29sQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgXCJpZ25vcmVBdHRhY2hlZFZhbHVlXCIsXHJcbiAgICAgICAgeWFtbC5pZ25vcmVBdHRhY2hlZFZhbHVlLFxyXG4gICAgICAgIG51bURhdGFzZXRzLFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIHRydWVcclxuICAgICk7XHJcbiAgICBpZiAodHlwZW9mIHJldElnbm9yZUF0dGFjaGVkVmFsdWUgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gcmV0SWdub3JlQXR0YWNoZWRWYWx1ZTtcclxuICAgIH1cclxuICAgIHJlbmRlckluZm8uaWdub3JlQXR0YWNoZWRWYWx1ZSA9IHJldElnbm9yZUF0dGFjaGVkVmFsdWU7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmlnbm9yZUF0dGFjaGVkVmFsdWUpO1xyXG5cclxuICAgIC8vIGlnbm9yZVplcm9WYWx1ZVxyXG4gICAgbGV0IHJldElnbm9yZVplcm9WYWx1ZSA9IGdldEJvb2xBcnJheUZyb21JbnB1dChcclxuICAgICAgICBcImlnbm9yZVplcm9WYWx1ZVwiLFxyXG4gICAgICAgIHlhbWwuaWdub3JlWmVyb1ZhbHVlLFxyXG4gICAgICAgIG51bURhdGFzZXRzLFxyXG4gICAgICAgIGZhbHNlLFxyXG4gICAgICAgIHRydWVcclxuICAgICk7XHJcbiAgICBpZiAodHlwZW9mIHJldElnbm9yZVplcm9WYWx1ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiByZXRJZ25vcmVaZXJvVmFsdWU7XHJcbiAgICB9XHJcbiAgICByZW5kZXJJbmZvLmlnbm9yZVplcm9WYWx1ZSA9IHJldElnbm9yZVplcm9WYWx1ZTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uaWdub3JlQXR0YWNoZWRWYWx1ZSk7XHJcblxyXG4gICAgLy8gYWNjdW1cclxuICAgIGxldCByZXRBY2N1bSA9IGdldEJvb2xBcnJheUZyb21JbnB1dChcclxuICAgICAgICBcImFjY3VtXCIsXHJcbiAgICAgICAgeWFtbC5hY2N1bSxcclxuICAgICAgICBudW1EYXRhc2V0cyxcclxuICAgICAgICBmYWxzZSxcclxuICAgICAgICB0cnVlXHJcbiAgICApO1xyXG4gICAgaWYgKHR5cGVvZiByZXRBY2N1bSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiByZXRBY2N1bTtcclxuICAgIH1cclxuICAgIHJlbmRlckluZm8uYWNjdW0gPSByZXRBY2N1bTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uYWNjdW0pO1xyXG5cclxuICAgIC8vIHBlbmFsdHlcclxuICAgIGxldCByZXRQZW5hbHR5ID0gZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgXCJwZW5hbHR5XCIsXHJcbiAgICAgICAgeWFtbC5wZW5hbHR5LFxyXG4gICAgICAgIG51bURhdGFzZXRzLFxyXG4gICAgICAgIG51bGwsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgcmV0UGVuYWx0eSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgIHJldHVybiByZXRQZW5hbHR5O1xyXG4gICAgfVxyXG4gICAgcmVuZGVySW5mby5wZW5hbHR5ID0gcmV0UGVuYWx0eTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ucGVuYWx0eSk7XHJcblxyXG4gICAgLy8gdmFsdWVTaGlmdFxyXG4gICAgbGV0IHJldFZhbHVlU2hpZnQgPSBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcclxuICAgICAgICBcInZhbHVlU2hpZnRcIixcclxuICAgICAgICB5YW1sLnZhbHVlU2hpZnQsXHJcbiAgICAgICAgbnVtRGF0YXNldHMsXHJcbiAgICAgICAgMCxcclxuICAgICAgICB0cnVlXHJcbiAgICApO1xyXG4gICAgaWYgKHR5cGVvZiByZXRWYWx1ZVNoaWZ0ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldFZhbHVlU2hpZnQ7XHJcbiAgICB9XHJcbiAgICByZW5kZXJJbmZvLnZhbHVlU2hpZnQgPSByZXRWYWx1ZVNoaWZ0O1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby52YWx1ZVNoaWZ0KTtcclxuXHJcbiAgICAvLyBzaGlmdE9ubHlWYWx1ZUxhcmdlclRoYW5cclxuICAgIGxldCByZXRTaGlmdE9ubHlWYWx1ZUxhcmdlclRoYW4gPSBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcclxuICAgICAgICBcInNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhblwiLFxyXG4gICAgICAgIHlhbWwuc2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuLFxyXG4gICAgICAgIG51bURhdGFzZXRzLFxyXG4gICAgICAgIG51bGwsXHJcbiAgICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIGlmICh0eXBlb2YgcmV0U2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgcmV0dXJuIHJldFNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbjtcclxuICAgIH1cclxuICAgIHJlbmRlckluZm8uc2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuID0gcmV0U2hpZnRPbmx5VmFsdWVMYXJnZXJUaGFuO1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5zaGlmdE9ubHlWYWx1ZUxhcmdlclRoYW4pO1xyXG5cclxuICAgIC8vIHRleHRWYWx1ZU1hcFxyXG4gICAgaWYgKHR5cGVvZiB5YW1sLnRleHRWYWx1ZU1hcCAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICAgIGxldCBrZXlzID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoeWFtbC50ZXh0VmFsdWVNYXApO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRleHRzKTtcclxuICAgICAgICBmb3IgKGxldCBrZXkgb2Yga2V5cykge1xyXG4gICAgICAgICAgICBsZXQgdGV4dCA9IGtleS50cmltKCk7XHJcbiAgICAgICAgICAgIHJlbmRlckluZm8udGV4dFZhbHVlTWFwW3RleHRdID0geWFtbC50ZXh0VmFsdWVNYXBbdGV4dF07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby50ZXh0VmFsdWVNYXApO1xyXG5cclxuICAgIC8vIGZpeGVkU2NhbGVcclxuICAgIGlmICh0eXBlb2YgeWFtbC5maXhlZFNjYWxlID09PSBcIm51bWJlclwiKSB7XHJcbiAgICAgICAgcmVuZGVySW5mby5maXhlZFNjYWxlID0geWFtbC5maXhlZFNjYWxlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZpdFBhbmVsV2lkdGhcclxuICAgIGlmICh0eXBlb2YgeWFtbC5maXRQYW5lbFdpZHRoID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgIHJlbmRlckluZm8uZml0UGFuZWxXaWR0aCA9IHlhbWwuZml0UGFuZWxXaWR0aDtcclxuICAgIH1cclxuXHJcbiAgICAvLyBtYXJnaW5cclxuICAgIGxldCByZXRNYXJnaW4gPSBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcIm1hcmdpblwiLCB5YW1sLm1hcmdpbiwgNCwgMTAsIHRydWUpO1xyXG4gICAgaWYgKHR5cGVvZiByZXRNYXJnaW4gPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICByZXR1cm4gcmV0TWFyZ2luOyAvLyBlcnJvck1lc3NhZ2VcclxuICAgIH1cclxuICAgIGlmIChyZXRNYXJnaW4ubGVuZ3RoID4gNCkge1xyXG4gICAgICAgIHJldHVybiBcIm1hcmdpbiBhY2NlcHRzIG5vdCBtb3JlIHRoYW4gZm91ciB2YWx1ZXMgZm9yIHRvcCwgcmlnaHQsIGJvdHRvbSwgYW5kIGxlZnQgbWFyZ2lucy5cIjtcclxuICAgIH1cclxuICAgIHJlbmRlckluZm8ubWFyZ2luID0gbmV3IE1hcmdpbihcclxuICAgICAgICByZXRNYXJnaW5bMF0sXHJcbiAgICAgICAgcmV0TWFyZ2luWzFdLFxyXG4gICAgICAgIHJldE1hcmdpblsyXSxcclxuICAgICAgICByZXRNYXJnaW5bM11cclxuICAgICk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLm1hcmdpbik7XHJcblxyXG4gICAgLy8gY3VzdG9tRGF0YXNldCByZWxhdGVkIHBhcmFtZXRlcnNcclxuICAgIGZvciAobGV0IGRhdGFzZXRLZXkgb2YgeWFtbEN1c3RvbURhdGFzZXRLZXlzKSB7XHJcbiAgICAgICAgbGV0IGN1c3RvbURhdGFzZXQgPSBuZXcgQ3VzdG9tRGF0YXNldEluZm8oKTtcclxuICAgICAgICBsZXQgeWFtbEN1c3RvbURhdGFzZXQgPSB5YW1sW2RhdGFzZXRLZXldO1xyXG5cclxuICAgICAgICBsZXQga2V5c09mQ3VzdG9tRGF0YXNldEluZm8gPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyhjdXN0b21EYXRhc2V0KTtcclxuICAgICAgICBsZXQga2V5c0ZvdW5kSW5ZQU1MID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoeWFtbEN1c3RvbURhdGFzZXQpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNPZkN1c3RvbURhdGFzZXRJbmZvKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzRm91bmRJbllBTUwpO1xyXG4gICAgICAgIGZvciAobGV0IGtleSBvZiBrZXlzRm91bmRJbllBTUwpIHtcclxuICAgICAgICAgICAgaWYgKCFrZXlzT2ZDdXN0b21EYXRhc2V0SW5mby5pbmNsdWRlcyhrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIidcIiArIGtleSArIFwiJyBpcyBub3QgYW4gYXZhaWxhYmxlIGtleVwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gaWRcclxuICAgICAgICBsZXQgY3VzdG9tRGF0YXNldElkID0gLTE7XHJcbiAgICAgICAgbGV0IHN0ckN1c3RvbURhdGFzZXRJZCA9IGRhdGFzZXRLZXkucmVwbGFjZShcImRhdGFzZXRcIiwgXCJcIik7XHJcbiAgICAgICAgaWYgKHN0ckN1c3RvbURhdGFzZXRJZCA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICBjdXN0b21EYXRhc2V0SWQgPSAwO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGN1c3RvbURhdGFzZXRJZCA9IHBhcnNlRmxvYXQoc3RyQ3VzdG9tRGF0YXNldElkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY3VzdG9tRGF0YXNldC5pZCA9IGN1c3RvbURhdGFzZXRJZDtcclxuXHJcbiAgICAgICAgLy8gbmFtZVxyXG4gICAgICAgIGN1c3RvbURhdGFzZXQubmFtZSA9IGdldFN0cmluZ0Zyb21JbnB1dChcclxuICAgICAgICAgICAgeWFtbEN1c3RvbURhdGFzZXQ/Lm5hbWUsXHJcbiAgICAgICAgICAgIGN1c3RvbURhdGFzZXQubmFtZVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIHhEYXRhXHJcbiAgICAgICAgbGV0IHJldFhEYXRhID0gZ2V0U3RyaW5nQXJyYXkoXCJ4RGF0YVwiLCB5YW1sQ3VzdG9tRGF0YXNldD8ueERhdGEpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0WERhdGEgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldFhEYXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdXN0b21EYXRhc2V0LnhEYXRhID0gcmV0WERhdGE7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coY3VzdG9tRGF0YXNldC54RGF0YSk7XHJcbiAgICAgICAgbGV0IG51bVhEYXRhID0gY3VzdG9tRGF0YXNldC54RGF0YS5sZW5ndGg7XHJcblxyXG4gICAgICAgIC8vIHlEYXRhXHJcbiAgICAgICAgbGV0IHJldFlEYXRhID0gZ2V0U3RyaW5nQXJyYXkoXCJ5RGF0YVwiLCB5YW1sQ3VzdG9tRGF0YXNldD8ueURhdGEpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0WURhdGEgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldFlEYXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjdXN0b21EYXRhc2V0LnlEYXRhID0gcmV0WURhdGE7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coY3VzdG9tRGF0YXNldC55RGF0YSk7XHJcbiAgICAgICAgaWYgKGN1c3RvbURhdGFzZXQueURhdGEubGVuZ3RoICE9PSBudW1YRGF0YSkge1xyXG4gICAgICAgICAgICBsZXQgZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgICAgIFwiTnVtYmVyIG9mIGVsZW1lbnRzIGluIHhEYXRhIGFuZCB5RGF0YSBub3QgbWF0Y2hlZFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVySW5mby5jdXN0b21EYXRhc2V0LnB1c2goY3VzdG9tRGF0YXNldCk7XHJcbiAgICB9IC8vIGN1c3RvbURhdGFzZXQgcmVsYXRlZCBwYXJhbWV0ZXJzXHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmN1c3RvbURhdGFzZXQpO1xyXG5cclxuICAgIC8vIGxpbmUgcmVsYXRlZCBwYXJhbWV0ZXJzXHJcbiAgICBmb3IgKGxldCBsaW5lS2V5IG9mIHlhbWxMaW5lS2V5cykge1xyXG4gICAgICAgIGxldCBsaW5lID0gbmV3IExpbmVJbmZvKCk7XHJcbiAgICAgICAgbGV0IHlhbWxMaW5lID0geWFtbFtsaW5lS2V5XTtcclxuXHJcbiAgICAgICAgbGV0IGtleXNPZkxpbmVJbmZvID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MobGluZSk7XHJcbiAgICAgICAgbGV0IGtleXNGb3VuZEluWUFNTCA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHlhbWxMaW5lKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzT2ZMaW5lSW5mbyk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c0ZvdW5kSW5ZQU1MKTtcclxuICAgICAgICBmb3IgKGxldCBrZXkgb2Yga2V5c0ZvdW5kSW5ZQU1MKSB7XHJcbiAgICAgICAgICAgIGlmICgha2V5c09mTGluZUluZm8uaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCInXCIgKyBrZXkgKyBcIicgaXMgbm90IGFuIGF2YWlsYWJsZSBrZXlcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCByZXRQYXJzZUNvbW1vbkNoYXJ0SW5mbyA9IHBhcnNlQ29tbW9uQ2hhcnRJbmZvKHlhbWxMaW5lLCBsaW5lKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldFBhcnNlQ29tbW9uQ2hhcnRJbmZvID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXRQYXJzZUNvbW1vbkNoYXJ0SW5mbztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGxpbmVDb2xvclxyXG4gICAgICAgIGxldCByZXRMaW5lQ29sb3IgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcclxuICAgICAgICAgICAgXCJsaW5lQ29sb3JcIixcclxuICAgICAgICAgICAgeWFtbExpbmU/LmxpbmVDb2xvcixcclxuICAgICAgICAgICAgbnVtRGF0YXNldHMsXHJcbiAgICAgICAgICAgIFwiXCIsXHJcbiAgICAgICAgICAgIHZhbGlkYXRlQ29sb3IsXHJcbiAgICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0TGluZUNvbG9yID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXRMaW5lQ29sb3I7IC8vIGVycm9yTWVzc2FnZVxyXG4gICAgICAgIH1cclxuICAgICAgICBsaW5lLmxpbmVDb2xvciA9IHJldExpbmVDb2xvcjtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lLmxpbmVDb2xvcik7XHJcblxyXG4gICAgICAgIC8vIGxpbmVXaWR0aFxyXG4gICAgICAgIGxldCByZXRMaW5lV2lkdGggPSBnZXROdW1iZXJBcnJheUZyb21JbnB1dChcclxuICAgICAgICAgICAgXCJsaW5lV2lkdGhcIixcclxuICAgICAgICAgICAgeWFtbExpbmU/LmxpbmVXaWR0aCxcclxuICAgICAgICAgICAgbnVtRGF0YXNldHMsXHJcbiAgICAgICAgICAgIDEuNSxcclxuICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXRMaW5lV2lkdGggPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldExpbmVXaWR0aDsgLy8gZXJyb3JNZXNzYWdlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpbmUubGluZVdpZHRoID0gcmV0TGluZVdpZHRoO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmUubGluZVdpZHRoKTtcclxuXHJcbiAgICAgICAgLy8gc2hvd0xpbmVcclxuICAgICAgICBsZXQgcmV0U2hvd0xpbmUgPSBnZXRCb29sQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIFwic2hvd0xpbmVcIixcclxuICAgICAgICAgICAgeWFtbExpbmU/LnNob3dMaW5lLFxyXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcclxuICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXRTaG93TGluZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0U2hvd0xpbmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpbmUuc2hvd0xpbmUgPSByZXRTaG93TGluZTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lLnNob3dMaW5lKTtcclxuXHJcbiAgICAgICAgLy8gc2hvd1BvaW50XHJcbiAgICAgICAgbGV0IHJldFNob3dQb2ludCA9IGdldEJvb2xBcnJheUZyb21JbnB1dChcclxuICAgICAgICAgICAgXCJzaG93UG9pbnRcIixcclxuICAgICAgICAgICAgeWFtbExpbmU/LnNob3dQb2ludCxcclxuICAgICAgICAgICAgbnVtRGF0YXNldHMsXHJcbiAgICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0U2hvd1BvaW50ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXRTaG93UG9pbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpbmUuc2hvd1BvaW50ID0gcmV0U2hvd1BvaW50O1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGxpbmUuc2hvd1BvaW50KTtcclxuXHJcbiAgICAgICAgLy8gcG9pbnRDb2xvclxyXG4gICAgICAgIGxldCByZXRQb2ludENvbG9yID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIFwicG9pbnRDb2xvclwiLFxyXG4gICAgICAgICAgICB5YW1sTGluZT8ucG9pbnRDb2xvcixcclxuICAgICAgICAgICAgbnVtRGF0YXNldHMsXHJcbiAgICAgICAgICAgIFwiIzY5YjNhMlwiLFxyXG4gICAgICAgICAgICB2YWxpZGF0ZUNvbG9yLFxyXG4gICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldFBvaW50Q29sb3IgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldFBvaW50Q29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpbmUucG9pbnRDb2xvciA9IHJldFBvaW50Q29sb3I7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobGluZS5wb2ludENvbG9yKTtcclxuXHJcbiAgICAgICAgLy8gcG9pbnRCb3JkZXJDb2xvclxyXG4gICAgICAgIGxldCByZXRQb2ludEJvcmRlckNvbG9yID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIFwicG9pbnRCb3JkZXJDb2xvclwiLFxyXG4gICAgICAgICAgICB5YW1sTGluZT8ucG9pbnRCb3JkZXJDb2xvcixcclxuICAgICAgICAgICAgbnVtRGF0YXNldHMsXHJcbiAgICAgICAgICAgIFwiIzY5YjNhMlwiLFxyXG4gICAgICAgICAgICB2YWxpZGF0ZUNvbG9yLFxyXG4gICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldFBvaW50Qm9yZGVyQ29sb3IgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldFBvaW50Qm9yZGVyQ29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxpbmUucG9pbnRCb3JkZXJDb2xvciA9IHJldFBvaW50Qm9yZGVyQ29sb3I7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobGluZS5wb2ludEJvcmRlckNvbG9yKTtcclxuXHJcbiAgICAgICAgLy8gcG9pbnRCb3JkZXJXaWR0aFxyXG4gICAgICAgIGxldCByZXRQb2ludEJvcmRlcldpZHRoID0gZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIFwicG9pbnRCb3JkZXJXaWR0aFwiLFxyXG4gICAgICAgICAgICB5YW1sTGluZT8ucG9pbnRCb3JkZXJXaWR0aCxcclxuICAgICAgICAgICAgbnVtRGF0YXNldHMsXHJcbiAgICAgICAgICAgIDAuMCxcclxuICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXRQb2ludEJvcmRlcldpZHRoID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXRQb2ludEJvcmRlcldpZHRoOyAvLyBlcnJvck1lc3NhZ2VcclxuICAgICAgICB9XHJcbiAgICAgICAgbGluZS5wb2ludEJvcmRlcldpZHRoID0gcmV0UG9pbnRCb3JkZXJXaWR0aDtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lLnBvaW50Qm9yZGVyV2lkdGgpO1xyXG5cclxuICAgICAgICAvLyBwb2ludFNpemVcclxuICAgICAgICBsZXQgcmV0UG9pbnRTaXplID0gZ2V0TnVtYmVyQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIFwicG9pbnRTaXplXCIsXHJcbiAgICAgICAgICAgIHlhbWxMaW5lPy5wb2ludFNpemUsXHJcbiAgICAgICAgICAgIG51bURhdGFzZXRzLFxyXG4gICAgICAgICAgICAzLjAsXHJcbiAgICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0UG9pbnRTaXplID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXRQb2ludFNpemU7IC8vIGVycm9yTWVzc2FnZVxyXG4gICAgICAgIH1cclxuICAgICAgICBsaW5lLnBvaW50U2l6ZSA9IHJldFBvaW50U2l6ZTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lLnBvaW50U2l6ZSk7XHJcblxyXG4gICAgICAgIC8vIGZpbGxHYXBcclxuICAgICAgICBsZXQgcmV0RmlsbEdhcCA9IGdldEJvb2xBcnJheUZyb21JbnB1dChcclxuICAgICAgICAgICAgXCJmaWxsR2FwXCIsXHJcbiAgICAgICAgICAgIHlhbWxMaW5lPy5maWxsR2FwLFxyXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcclxuICAgICAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0RmlsbEdhcCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0RmlsbEdhcDtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGluZS5maWxsR2FwID0gcmV0RmlsbEdhcDtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lLmZpbGxHYXApO1xyXG5cclxuICAgICAgICAvLyB5QXhpc0xvY2F0aW9uXHJcbiAgICAgICAgbGV0IHJldFlBeGlzTG9jYXRpb24gPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcclxuICAgICAgICAgICAgXCJ5QXhpc0xvY2F0aW9uXCIsXHJcbiAgICAgICAgICAgIHlhbWxMaW5lPy55QXhpc0xvY2F0aW9uLFxyXG4gICAgICAgICAgICBudW1EYXRhc2V0cyxcclxuICAgICAgICAgICAgXCJsZWZ0XCIsXHJcbiAgICAgICAgICAgIHZhbGlkYXRlWUF4aXNMb2NhdGlvbixcclxuICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXRZQXhpc0xvY2F0aW9uID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXRZQXhpc0xvY2F0aW9uOyAvLyBlcnJvck1lc3NhZ2VcclxuICAgICAgICB9XHJcbiAgICAgICAgbGluZS55QXhpc0xvY2F0aW9uID0gcmV0WUF4aXNMb2NhdGlvbjtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lLnlBeGlzTG9jYXRpb24pO1xyXG5cclxuICAgICAgICByZW5kZXJJbmZvLmxpbmUucHVzaChsaW5lKTtcclxuICAgIH0gLy8gbGluZSByZWxhdGVkIHBhcmFtZXRlcnNcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ubGluZSk7XHJcblxyXG4gICAgLy8gYmFyIHJlbGF0ZWQgcGFyYW1ldGVyc1xyXG4gICAgZm9yIChsZXQgYmFyS2V5IG9mIHlhbWxCYXJLZXlzKSB7XHJcbiAgICAgICAgbGV0IGJhciA9IG5ldyBCYXJJbmZvKCk7XHJcbiAgICAgICAgbGV0IHlhbWxCYXIgPSB5YW1sW2JhcktleV07XHJcblxyXG4gICAgICAgIGxldCBrZXlzT2ZCYXJJbmZvID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoYmFyKTtcclxuICAgICAgICBsZXQga2V5c0ZvdW5kSW5ZQU1MID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoeWFtbEJhcik7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c09mQmFySW5mbyk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c0ZvdW5kSW5ZQU1MKTtcclxuICAgICAgICBmb3IgKGxldCBrZXkgb2Yga2V5c0ZvdW5kSW5ZQU1MKSB7XHJcbiAgICAgICAgICAgIGlmICgha2V5c09mQmFySW5mby5pbmNsdWRlcyhrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIidcIiArIGtleSArIFwiJyBpcyBub3QgYW4gYXZhaWxhYmxlIGtleVwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IHJldFBhcnNlQ29tbW9uQ2hhcnRJbmZvID0gcGFyc2VDb21tb25DaGFydEluZm8oeWFtbEJhciwgYmFyKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldFBhcnNlQ29tbW9uQ2hhcnRJbmZvID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXRQYXJzZUNvbW1vbkNoYXJ0SW5mbztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGJhckNvbG9yXHJcbiAgICAgICAgbGV0IHJldEJhckNvbG9yID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIFwiYmFyQ29sb3JcIixcclxuICAgICAgICAgICAgeWFtbEJhcj8uYmFyQ29sb3IsXHJcbiAgICAgICAgICAgIG51bURhdGFzZXRzLFxyXG4gICAgICAgICAgICBcIlwiLFxyXG4gICAgICAgICAgICB2YWxpZGF0ZUNvbG9yLFxyXG4gICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldEJhckNvbG9yID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXRCYXJDb2xvcjsgLy8gZXJyb3JNZXNzYWdlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJhci5iYXJDb2xvciA9IHJldEJhckNvbG9yO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGJhci5iYXJDb2xvcik7XHJcblxyXG4gICAgICAgIC8vIHlBeGlzTG9jYXRpb25cclxuICAgICAgICBsZXQgcmV0WUF4aXNMb2NhdGlvbiA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxyXG4gICAgICAgICAgICBcInlBeGlzTG9jYXRpb25cIixcclxuICAgICAgICAgICAgeWFtbEJhcj8ueUF4aXNMb2NhdGlvbixcclxuICAgICAgICAgICAgbnVtRGF0YXNldHMsXHJcbiAgICAgICAgICAgIFwibGVmdFwiLFxyXG4gICAgICAgICAgICB2YWxpZGF0ZVlBeGlzTG9jYXRpb24sXHJcbiAgICAgICAgICAgIHRydWVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0WUF4aXNMb2NhdGlvbiA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0WUF4aXNMb2NhdGlvbjsgLy8gZXJyb3JNZXNzYWdlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJhci55QXhpc0xvY2F0aW9uID0gcmV0WUF4aXNMb2NhdGlvbjtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhiYXIueUF4aXNMb2NhdGlvbik7XHJcblxyXG4gICAgICAgIHJlbmRlckluZm8uYmFyLnB1c2goYmFyKTtcclxuICAgIH0gLy8gYmFyIHJlbGF0ZWQgcGFyYW1ldGVyc1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5iYXIpO1xyXG5cclxuICAgIC8vIHBpZSByZWxhdGVkIHBhcmFtZXRlcnNcclxuICAgIGZvciAobGV0IHBpZUtleSBvZiB5YW1sUGllS2V5cykge1xyXG4gICAgICAgIGxldCBwaWUgPSBuZXcgUGllSW5mbygpO1xyXG4gICAgICAgIGxldCB5YW1sUGllID0geWFtbFtwaWVLZXldO1xyXG5cclxuICAgICAgICBsZXQga2V5c09mUGllSW5mbyA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHBpZSk7XHJcbiAgICAgICAgbGV0IGtleXNGb3VuZEluWUFNTCA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHlhbWxQaWUpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNPZlBpZUluZm8pO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNGb3VuZEluWUFNTCk7XHJcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXNGb3VuZEluWUFNTCkge1xyXG4gICAgICAgICAgICBpZiAoIWtleXNPZlBpZUluZm8uaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCInXCIgKyBrZXkgKyBcIicgaXMgbm90IGFuIGF2YWlsYWJsZSBrZXlcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRpdGxlXHJcbiAgICAgICAgcGllLnRpdGxlID0gZ2V0U3RyaW5nRnJvbUlucHV0KHlhbWxQaWU/LnRpdGxlLCBwaWUudGl0bGUpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS50aXRsZSk7XHJcblxyXG4gICAgICAgIC8vIGRhdGFcclxuICAgICAgICBsZXQgcmV0RGF0YSA9IGdldFN0cmluZ0FycmF5KFwiZGF0YVwiLCB5YW1sUGllPy5kYXRhKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldERhdGEgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldERhdGE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBpZS5kYXRhID0gcmV0RGF0YTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhwaWUuZGF0YSk7XHJcbiAgICAgICAgbGV0IG51bURhdGEgPSBwaWUuZGF0YS5sZW5ndGg7XHJcblxyXG4gICAgICAgIC8vIGRhdGFDb2xvclxyXG4gICAgICAgIGxldCByZXREYXRhQ29sb3IgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcclxuICAgICAgICAgICAgXCJkYXRhQ29sb3JcIixcclxuICAgICAgICAgICAgeWFtbFBpZT8uZGF0YUNvbG9yLFxyXG4gICAgICAgICAgICBudW1EYXRhLFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICB2YWxpZGF0ZUNvbG9yLFxyXG4gICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldERhdGFDb2xvciA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0RGF0YUNvbG9yOyAvLyBlcnJvck1lc3NhZ2VcclxuICAgICAgICB9XHJcbiAgICAgICAgcGllLmRhdGFDb2xvciA9IHJldERhdGFDb2xvcjtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhwaWUuZGF0YUNvbG9yKTtcclxuXHJcbiAgICAgICAgLy8gZGF0YU5hbWVcclxuICAgICAgICBsZXQgcmV0RGF0YU5hbWUgPSBnZXRTdHJpbmdBcnJheUZyb21JbnB1dChcclxuICAgICAgICAgICAgXCJkYXRhTmFtZVwiLFxyXG4gICAgICAgICAgICB5YW1sUGllPy5kYXRhTmFtZSxcclxuICAgICAgICAgICAgbnVtRGF0YSxcclxuICAgICAgICAgICAgXCJcIixcclxuICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXREYXRhTmFtZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0RGF0YU5hbWU7IC8vIGVycm9yTWVzc2FnZVxyXG4gICAgICAgIH1cclxuICAgICAgICBwaWUuZGF0YU5hbWUgPSByZXREYXRhTmFtZTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhwaWUuZGF0YU5hbWUpO1xyXG5cclxuICAgICAgICAvLyBsYWJlbFxyXG4gICAgICAgIGxldCByZXRMYWJlbCA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxyXG4gICAgICAgICAgICBcImxhYmVsXCIsXHJcbiAgICAgICAgICAgIHlhbWxQaWU/LmxhYmVsLFxyXG4gICAgICAgICAgICBudW1EYXRhLFxyXG4gICAgICAgICAgICBcIlwiLFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldExhYmVsID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXRMYWJlbDsgLy8gZXJyb3JNZXNzYWdlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBpZS5sYWJlbCA9IHJldExhYmVsO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS5sYWJlbCk7XHJcblxyXG4gICAgICAgIC8vIGhpZGVMYWJlbExlc3NUaGFuXHJcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sUGllPy5oaWRlTGFiZWxMZXNzVGhhbiA9PT0gXCJudW1iZXJcIikge1xyXG4gICAgICAgICAgICBwaWUuaGlkZUxhYmVsTGVzc1RoYW4gPSB5YW1sUGllLmhpZGVMYWJlbExlc3NUaGFuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhwaWUuaGlkZUxhYmVsTGVzc1RoYW4pO1xyXG5cclxuICAgICAgICAvLyBleHRMYWJlbFxyXG4gICAgICAgIGxldCByZXRFeHRMYWJlbCA9IGdldFN0cmluZ0FycmF5RnJvbUlucHV0KFxyXG4gICAgICAgICAgICBcImV4dExhYmVsXCIsXHJcbiAgICAgICAgICAgIHlhbWxQaWU/LmV4dExhYmVsLFxyXG4gICAgICAgICAgICBudW1EYXRhLFxyXG4gICAgICAgICAgICBcIlwiLFxyXG4gICAgICAgICAgICBudWxsLFxyXG4gICAgICAgICAgICB0cnVlXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldEV4dExhYmVsID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXRFeHRMYWJlbDsgLy8gZXJyb3JNZXNzYWdlXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHBpZS5leHRMYWJlbCA9IHJldEV4dExhYmVsO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS5leHRMYWJlbCk7XHJcblxyXG4gICAgICAgIC8vIHNob3dFeHRMYWJlbE9ubHlJZk5vTGFiZWxcclxuICAgICAgICBpZiAodHlwZW9mIHlhbWxQaWU/LnNob3dFeHRMYWJlbE9ubHlJZk5vTGFiZWwgPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgICAgIHBpZS5zaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsID0geWFtbFBpZS5zaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhwaWUuc2hvd0V4dExhYmVsT25seUlmTm9MYWJlbCk7XHJcblxyXG4gICAgICAgIC8vIHJhdGlvSW5uZXJSYWRpdXNcclxuICAgICAgICBpZiAodHlwZW9mIHlhbWxQaWU/LnJhdGlvSW5uZXJSYWRpdXMgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgcGllLnJhdGlvSW5uZXJSYWRpdXMgPSB5YW1sUGllLnJhdGlvSW5uZXJSYWRpdXM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS5yYXRpb0lubmVyUmFkaXVzKTtcclxuXHJcbiAgICAgICAgLy8gc2hvd0xlZ2VuZFxyXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbFBpZT8uc2hvd0xlZ2VuZCA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICAgICAgcGllLnNob3dMZWdlbmQgPSB5YW1sUGllLnNob3dMZWdlbmQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBsZWdlbmRQb3NpdGlvblxyXG4gICAgICAgIHBpZS5sZWdlbmRQb3NpdGlvbiA9IGdldFN0cmluZ0Zyb21JbnB1dChcclxuICAgICAgICAgICAgeWFtbFBpZT8ubGVnZW5kUG9zaXRpb24sXHJcbiAgICAgICAgICAgIFwicmlnaHRcIlxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIGxlZ2VuZE9yaWVudFxyXG4gICAgICAgIGxldCBkZWZhdWx0TGVnZW5kT3JpZW50YXRpb24gPSBcImhvcml6b250YWxcIjtcclxuICAgICAgICBpZiAocGllLmxlZ2VuZFBvc2l0aW9uID09PSBcInRvcFwiIHx8IHBpZS5sZWdlbmRQb3NpdGlvbiA9PT0gXCJib3R0b21cIikge1xyXG4gICAgICAgICAgICBkZWZhdWx0TGVnZW5kT3JpZW50YXRpb24gPSBcImhvcml6b250YWxcIjtcclxuICAgICAgICB9IGVsc2UgaWYgKFxyXG4gICAgICAgICAgICBwaWUubGVnZW5kUG9zaXRpb24gPT09IFwibGVmdFwiIHx8XHJcbiAgICAgICAgICAgIHBpZS5sZWdlbmRQb3NpdGlvbiA9PT0gXCJyaWdodFwiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIGRlZmF1bHRMZWdlbmRPcmllbnRhdGlvbiA9IFwidmVydGljYWxcIjtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBkZWZhdWx0TGVnZW5kT3JpZW50YXRpb24gPSBcImhvcml6b250YWxcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcGllLmxlZ2VuZE9yaWVudGF0aW9uID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxyXG4gICAgICAgICAgICB5YW1sUGllPy5sZWdlbmRPcmllbnRhdGlvbixcclxuICAgICAgICAgICAgZGVmYXVsdExlZ2VuZE9yaWVudGF0aW9uXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhwaWUubGVnZW5kUG9zaXRpb24pO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHBpZS5sZWdlbmRPcmllbnRhdGlvbik7XHJcblxyXG4gICAgICAgIC8vIGxlZ2VuZEJnQ29sb3JcclxuICAgICAgICBwaWUubGVnZW5kQmdDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcclxuICAgICAgICAgICAgeWFtbFBpZT8ubGVnZW5kQmdDb2xvcixcclxuICAgICAgICAgICAgcGllLmxlZ2VuZEJnQ29sb3JcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICAvLyBsZWdlbmRCb3JkZXJDb2xvclxyXG4gICAgICAgIHBpZS5sZWdlbmRCb3JkZXJDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcclxuICAgICAgICAgICAgeWFtbFBpZT8ubGVnZW5kQm9yZGVyQ29sb3IsXHJcbiAgICAgICAgICAgIHBpZS5sZWdlbmRCb3JkZXJDb2xvclxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHJlbmRlckluZm8ucGllLnB1c2gocGllKTtcclxuICAgIH0gLy8gcGllIHJlbGF0ZWQgcGFyYW1ldGVyc1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5waWUpO1xyXG5cclxuICAgIC8vIHN1bW1hcnkgcmVsYXRlZCBwYXJhbWV0ZXJzXHJcbiAgICBmb3IgKGxldCBzdW1tYXJ5S2V5IG9mIHlhbWxTdW1tYXJ5S2V5cykge1xyXG4gICAgICAgIGxldCBzdW1tYXJ5ID0gbmV3IFN1bW1hcnlJbmZvKCk7XHJcbiAgICAgICAgbGV0IHlhbWxTdW1tYXJ5ID0geWFtbFtzdW1tYXJ5S2V5XTtcclxuXHJcbiAgICAgICAgbGV0IGtleXNPZlN1bW1hcnlJbmZvID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3Moc3VtbWFyeSk7XHJcbiAgICAgICAgbGV0IGtleXNGb3VuZEluWUFNTCA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHlhbWxTdW1tYXJ5KTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzT2ZTdW1tYXJ5SW5mbyk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c0ZvdW5kSW5ZQU1MKTtcclxuICAgICAgICBmb3IgKGxldCBrZXkgb2Yga2V5c0ZvdW5kSW5ZQU1MKSB7XHJcbiAgICAgICAgICAgIGlmICgha2V5c09mU3VtbWFyeUluZm8uaW5jbHVkZXMoa2V5KSkge1xyXG4gICAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCInXCIgKyBrZXkgKyBcIicgaXMgbm90IGFuIGF2YWlsYWJsZSBrZXlcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHRlbXBsYXRlXHJcbiAgICAgICAgc3VtbWFyeS50ZW1wbGF0ZSA9IGdldFN0cmluZ0Zyb21JbnB1dChcclxuICAgICAgICAgICAgeWFtbFN1bW1hcnk/LnRlbXBsYXRlLFxyXG4gICAgICAgICAgICBzdW1tYXJ5LnRlbXBsYXRlXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gc3R5bGVcclxuICAgICAgICBzdW1tYXJ5LnN0eWxlID0gZ2V0U3RyaW5nRnJvbUlucHV0KHlhbWxTdW1tYXJ5Py5zdHlsZSwgc3VtbWFyeS5zdHlsZSk7XHJcblxyXG4gICAgICAgIHJlbmRlckluZm8uc3VtbWFyeS5wdXNoKHN1bW1hcnkpO1xyXG4gICAgfSAvLyBzdW1tYXJ5IHJlbGF0ZWQgcGFyYW1ldGVyc1xyXG5cclxuICAgIC8vIE1vbnRoIHJlbGF0ZWQgcGFyYW1ldGVyc1xyXG4gICAgZm9yIChsZXQgbW9udGhLZXkgb2YgeWFtbE1vbnRoS2V5cykge1xyXG4gICAgICAgIGxldCBtb250aCA9IG5ldyBNb250aEluZm8oKTtcclxuICAgICAgICBsZXQgeWFtbE1vbnRoID0geWFtbFttb250aEtleV07XHJcblxyXG4gICAgICAgIGxldCBrZXlzT2ZNb250aEluZm8gPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyhtb250aCk7XHJcbiAgICAgICAgbGV0IGtleXNGb3VuZEluWUFNTCA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHlhbWxNb250aCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coa2V5c09mU3VtbWFyeUluZm8pO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNGb3VuZEluWUFNTCk7XHJcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXNGb3VuZEluWUFNTCkge1xyXG4gICAgICAgICAgICBpZiAoIWtleXNPZk1vbnRoSW5mby5pbmNsdWRlcyhrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIidcIiArIGtleSArIFwiJyBpcyBub3QgYW4gYXZhaWxhYmxlIGtleVwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gbW9kZVxyXG4gICAgICAgIG1vbnRoLm1vZGUgPSBnZXRTdHJpbmdGcm9tSW5wdXQoeWFtbE1vbnRoPy5tb2RlLCBtb250aC5tb2RlKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5tb2RlKTtcclxuXHJcbiAgICAgICAgLy8gZGF0YXNldFxyXG4gICAgICAgIGxldCByZXREYXRhc2V0ID0gZ2V0TnVtYmVyQXJyYXkoXCJkYXRhc2V0XCIsIHlhbWxNb250aD8uZGF0YXNldCk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXREYXRhc2V0ID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXREYXRhc2V0O1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmV0RGF0YXNldC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgLy8gaW5zZXJ0IHkgZGF0YXNldCBnaXZlblxyXG4gICAgICAgICAgICBmb3IgKGxldCBxIG9mIHF1ZXJpZXMpIHtcclxuICAgICAgICAgICAgICAgIHJldERhdGFzZXQucHVzaChxLmdldElkKCkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1vbnRoLmRhdGFzZXQgPSByZXREYXRhc2V0O1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLmRhdGFzZXQpO1xyXG4gICAgICAgIGxldCBudW1EYXRhc2V0ID0gbW9udGguZGF0YXNldC5sZW5ndGg7XHJcblxyXG4gICAgICAgIC8vIHN0YXJ0V2Vla09uXHJcbiAgICAgICAgbW9udGguc3RhcnRXZWVrT24gPSBnZXRTdHJpbmdGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIHlhbWxNb250aD8uc3RhcnRXZWVrT24sXHJcbiAgICAgICAgICAgIG1vbnRoLnN0YXJ0V2Vla09uXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5zdGFydFdlZWtPbik7XHJcblxyXG4gICAgICAgIC8vIHNob3dDaXJjbGVcclxuICAgICAgICBpZiAodHlwZW9mIHlhbWxNb250aD8uc2hvd0NpcmNsZSA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICAgICAgbW9udGguc2hvd0NpcmNsZSA9IHlhbWxNb250aC5zaG93Q2lyY2xlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5zaG93Q2lyY2xlKTtcclxuXHJcbiAgICAgICAgLy8gdGhyZXNob2xkXHJcbiAgICAgICAgbGV0IHJldFRocmVzaG9sZCA9IGdldE51bWJlckFycmF5KFwidGhyZXNob2xkXCIsIHlhbWxNb250aD8udGhyZXNob2xkKTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldFRocmVzaG9sZCA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0VGhyZXNob2xkO1xyXG4gICAgICAgIH1cclxuICAgICAgICBtb250aC50aHJlc2hvbGQgPSByZXRUaHJlc2hvbGQ7XHJcbiAgICAgICAgaWYgKG1vbnRoLnRocmVzaG9sZC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaW5kRGF0YXNldCA9IDA7IGluZERhdGFzZXQgPCBudW1EYXRhc2V0OyBpbmREYXRhc2V0KyspIHtcclxuICAgICAgICAgICAgICAgIG1vbnRoLnRocmVzaG9sZC5wdXNoKDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtb250aC50aHJlc2hvbGQubGVuZ3RoICE9PSBtb250aC5kYXRhc2V0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC50aHJlc2hvbGQpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5kYXRhc2V0KTtcclxuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgICAgIFwiVGhlIG51bWJlciBvZiBpbnB1dHMgb2YgdGhyZXNob2xkIGFuZCBkYXRhc2V0IG5vdCBtYXRjaGVkXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnRocmVzaG9sZCk7XHJcblxyXG4gICAgICAgIC8vIHlNaW5cclxuICAgICAgICBsZXQgcmV0WU1pbiA9IGdldE51bWJlckFycmF5KFwieU1pblwiLCB5YW1sTW9udGg/LnlNaW4pO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0WU1pbiA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0WU1pbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbW9udGgueU1pbiA9IHJldFlNaW47XHJcbiAgICAgICAgaWYgKG1vbnRoLnlNaW4ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZERhdGFzZXQgPSAwOyBpbmREYXRhc2V0IDwgbnVtRGF0YXNldDsgaW5kRGF0YXNldCsrKSB7XHJcbiAgICAgICAgICAgICAgICBtb250aC55TWluLnB1c2gobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1vbnRoLnlNaW4ubGVuZ3RoICE9PSBtb250aC5kYXRhc2V0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICAgICAgICAgXCJUaGUgbnVtYmVyIG9mIGlucHV0cyBvZiB5TWluIGFuZCBkYXRhc2V0IG5vdCBtYXRjaGVkXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnlNaW4pO1xyXG5cclxuICAgICAgICAvLyB5TWF4XHJcbiAgICAgICAgbGV0IHJldFlNYXggPSBnZXROdW1iZXJBcnJheShcInlNYXhcIiwgeWFtbE1vbnRoPy55TWF4KTtcclxuICAgICAgICBpZiAodHlwZW9mIHJldFlNYXggPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldFlNYXg7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG1vbnRoLnlNYXggPSByZXRZTWF4O1xyXG4gICAgICAgIGlmIChtb250aC55TWF4Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpbmREYXRhc2V0ID0gMDsgaW5kRGF0YXNldCA8IG51bURhdGFzZXQ7IGluZERhdGFzZXQrKykge1xyXG4gICAgICAgICAgICAgICAgbW9udGgueU1heC5wdXNoKG51bGwpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChtb250aC55TWF4Lmxlbmd0aCAhPT0gbW9udGguZGF0YXNldC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID1cclxuICAgICAgICAgICAgICAgIFwiVGhlIG51bWJlciBvZiBpbnB1dHMgb2YgeU1pbiBhbmQgZGF0YXNldCBub3QgbWF0Y2hlZFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC55TWF4KTtcclxuXHJcbiAgICAgICAgLy8gY29sb3JcclxuICAgICAgICBtb250aC5jb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dCh5YW1sTW9udGg/LmNvbG9yLCBtb250aC5jb2xvcik7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguY29sb3IpO1xyXG5cclxuICAgICAgICAvLyBkaW1Ob3RJbk1vbnRoXHJcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sTW9udGg/LmRpbU5vdEluTW9udGggPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgICAgIG1vbnRoLmRpbU5vdEluTW9udGggPSB5YW1sTW9udGguZGltTm90SW5Nb250aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguZGltTm90SW5Nb250aCk7XHJcblxyXG4gICAgICAgIC8vIHNob3dTdHJlYWtcclxuICAgICAgICBpZiAodHlwZW9mIHlhbWxNb250aD8uc2hvd1N0cmVhayA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICAgICAgbW9udGguc2hvd1N0cmVhayA9IHlhbWxNb250aC5zaG93U3RyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5zaG93U3RyZWFrKTtcclxuXHJcbiAgICAgICAgLy8gc2hvd1RvZGF5UmluZ1xyXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbE1vbnRoPy5zaG93VG9kYXlSaW5nID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgICAgICBtb250aC5zaG93VG9kYXlSaW5nID0geWFtbE1vbnRoLnNob3dUb2RheVJpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnNob3dUb2RheVJpbmcpO1xyXG5cclxuICAgICAgICAvLyBzaG93U2VsZWN0ZWRWYWx1ZVxyXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbE1vbnRoPy5zaG93U2VsZWN0ZWRWYWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICAgICAgbW9udGguc2hvd1NlbGVjdGVkVmFsdWUgPSB5YW1sTW9udGguc2hvd1NlbGVjdGVkVmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnNob3dTZWxlY3RlZFZhbHVlKTtcclxuXHJcbiAgICAgICAgLy8gc2hvd1NlbGVjdGVkUmluZ1xyXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbE1vbnRoPy5zaG93U2VsZWN0ZWRSaW5nID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgICAgICBtb250aC5zaG93U2VsZWN0ZWRSaW5nID0geWFtbE1vbnRoLnNob3dTZWxlY3RlZFJpbmc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLnNob3dTZWxlY3RlZFJpbmcpO1xyXG5cclxuICAgICAgICAvLyBjaXJjbGVDb2xvclxyXG4gICAgICAgIG1vbnRoLmNpcmNsZUNvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxyXG4gICAgICAgICAgICB5YW1sTW9udGg/LmNpcmNsZUNvbG9yLFxyXG4gICAgICAgICAgICBtb250aC5jaXJjbGVDb2xvclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguY2lyY2xlQ29sb3IpO1xyXG5cclxuICAgICAgICAvLyBjaXJjbGVDb2xvckJ5VmFsdWVcclxuICAgICAgICBpZiAodHlwZW9mIHlhbWxNb250aD8uY2lyY2xlQ29sb3JCeVZhbHVlID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgICAgICBtb250aC5jaXJjbGVDb2xvckJ5VmFsdWUgPSB5YW1sTW9udGguY2lyY2xlQ29sb3JCeVZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5jaXJjbGVDb2xvckJ5VmFsdWUpO1xyXG5cclxuICAgICAgICAvLyBoZWFkZXJZZWFyQ29sb3JcclxuICAgICAgICBtb250aC5oZWFkZXJZZWFyQ29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIHlhbWxNb250aD8uaGVhZGVyWWVhckNvbG9yLFxyXG4gICAgICAgICAgICBtb250aC5oZWFkZXJZZWFyQ29sb3JcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLmhlYWRlclllYXJDb2xvcik7XHJcblxyXG4gICAgICAgIC8vIGhlYWRlck1vbnRoQ29sb3JcclxuICAgICAgICBtb250aC5oZWFkZXJNb250aENvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxyXG4gICAgICAgICAgICB5YW1sTW9udGg/LmhlYWRlck1vbnRoQ29sb3IsXHJcbiAgICAgICAgICAgIG1vbnRoLmhlYWRlck1vbnRoQ29sb3JcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLmhlYWRlck1vbnRoQ29sb3IpO1xyXG5cclxuICAgICAgICAvLyBkaXZpZGluZ0xpbmVDb2xvclxyXG4gICAgICAgIG1vbnRoLmRpdmlkaW5nTGluZUNvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxyXG4gICAgICAgICAgICB5YW1sTW9udGg/LmRpdmlkaW5nTGluZUNvbG9yLFxyXG4gICAgICAgICAgICBtb250aC5kaXZpZGluZ0xpbmVDb2xvclxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguZGl2aWRpbmdMaW5lQ29sb3IpO1xyXG5cclxuICAgICAgICAvLyB0b2RheVJpbmdDb2xvclxyXG4gICAgICAgIG1vbnRoLnRvZGF5UmluZ0NvbG9yID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxyXG4gICAgICAgICAgICB5YW1sTW9udGgudG9kYXlSaW5nQ29sb3IsXHJcbiAgICAgICAgICAgIG1vbnRoLnRvZGF5UmluZ0NvbG9yXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC50b2RheVJpbmdDb2xvcik7XHJcblxyXG4gICAgICAgIC8vIHNlbGVjdGVkUmluZ0NvbG9yXHJcbiAgICAgICAgbW9udGguc2VsZWN0ZWRSaW5nQ29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIHlhbWxNb250aD8uc2VsZWN0ZWRSaW5nQ29sb3IsXHJcbiAgICAgICAgICAgIG1vbnRoLnNlbGVjdGVkUmluZ0NvbG9yXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5zZWxlY3RlZFJpbmdDb2xvcik7XHJcblxyXG4gICAgICAgIC8vIGluaXRNb250aFxyXG4gICAgICAgIG1vbnRoLmluaXRNb250aCA9IGdldFN0cmluZ0Zyb21JbnB1dChcclxuICAgICAgICAgICAgeWFtbE1vbnRoPy5pbml0TW9udGgsXHJcbiAgICAgICAgICAgIG1vbnRoLmluaXRNb250aFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobW9udGguaW5pdE1vbnRoKTtcclxuXHJcbiAgICAgICAgLy8gc2hvd0Fubm90YXRpb25cclxuICAgICAgICBpZiAodHlwZW9mIHlhbWxNb250aD8uc2hvd0Fubm90YXRpb24gPT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgICAgIG1vbnRoLnNob3dBbm5vdGF0aW9uID0geWFtbE1vbnRoLnNob3dBbm5vdGF0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5zaG93QW5ub3RhdGlvbik7XHJcblxyXG4gICAgICAgIC8vIGFubm90YXRpb25cclxuICAgICAgICBsZXQgcmV0QW5ub3RhdGlvbiA9IGdldFN0cmluZ0FycmF5KFwiYW5ub3RhdGlvblwiLCB5YW1sTW9udGg/LmFubm90YXRpb24pO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0QW5ub3RhdGlvbiA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICByZXR1cm4gcmV0QW5ub3RhdGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgbW9udGguYW5ub3RhdGlvbiA9IHJldEFubm90YXRpb247XHJcbiAgICAgICAgaWYgKG1vbnRoLmFubm90YXRpb24ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGluZERhdGFzZXQgPSAwOyBpbmREYXRhc2V0IDwgbnVtRGF0YXNldDsgaW5kRGF0YXNldCsrKSB7XHJcbiAgICAgICAgICAgICAgICBtb250aC5hbm5vdGF0aW9uLnB1c2gobnVsbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKG1vbnRoLmFubm90YXRpb24ubGVuZ3RoICE9PSBtb250aC5kYXRhc2V0Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPVxyXG4gICAgICAgICAgICAgICAgXCJUaGUgbnVtYmVyIG9mIGlucHV0cyBvZiBhbm5vdGF0aW9uIGFuZCBkYXRhc2V0IG5vdCBtYXRjaGVkXCI7XHJcbiAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1vbnRoLmFubm90YXRpb24pO1xyXG5cclxuICAgICAgICAvLyBzaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0c1xyXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbE1vbnRoPy5zaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0cyA9PT0gXCJib29sZWFuXCIpIHtcclxuICAgICAgICAgICAgbW9udGguc2hvd0Fubm90YXRpb25PZkFsbFRhcmdldHMgPVxyXG4gICAgICAgICAgICAgICAgeWFtbE1vbnRoLnNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhtb250aC5zaG93QW5ub3RhdGlvbk9mQWxsVGFyZ2V0cyk7XHJcblxyXG4gICAgICAgIHJlbmRlckluZm8ubW9udGgucHVzaChtb250aCk7XHJcbiAgICB9IC8vIE1vbnRoIHJlbGF0ZWQgcGFyYW1ldGVyc1xyXG4gICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5tb250aCk7XHJcblxyXG4gICAgLy8gSGVhdG1hcCByZWxhdGVkIHBhcmFtZXRlcnNcclxuICAgIGZvciAobGV0IGhlYXRtYXBLZXkgb2YgeWFtbEhlYXRtYXBLZXlzKSB7XHJcbiAgICAgICAgbGV0IGhlYXRtYXAgPSBuZXcgSGVhdG1hcEluZm8oKTtcclxuICAgICAgICBsZXQgeWFtbEhlYXRtYXAgPSB5YW1sW2hlYXRtYXBLZXldO1xyXG5cclxuICAgICAgICBsZXQga2V5c09mSGVhdG1hcEluZm8gPSBnZXRBdmFpbGFibGVLZXlzT2ZDbGFzcyhoZWF0bWFwKTtcclxuICAgICAgICBsZXQga2V5c0ZvdW5kSW5ZQU1MID0gZ2V0QXZhaWxhYmxlS2V5c09mQ2xhc3MoeWFtbEhlYXRtYXApO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNPZkhlYXRtYXBJbmZvKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzRm91bmRJbllBTUwpO1xyXG4gICAgICAgIGZvciAobGV0IGtleSBvZiBrZXlzRm91bmRJbllBTUwpIHtcclxuICAgICAgICAgICAgaWYgKCFrZXlzT2ZIZWF0bWFwSW5mby5pbmNsdWRlcyhrZXkpKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIidcIiArIGtleSArIFwiJyBpcyBub3QgYW4gYXZhaWxhYmxlIGtleVwiO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVycm9yTWVzc2FnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmVuZGVySW5mby5oZWF0bWFwLnB1c2goaGVhdG1hcCk7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmhlYXRtYXApO1xyXG5cclxuICAgIC8vIEJ1bGxldCByZWxhdGVkIHBhcmFtZXRlcnNcclxuICAgIGZvciAobGV0IGJ1bGxldEtleSBvZiB5YW1sQnVsbGV0S2V5cykge1xyXG4gICAgICAgIGxldCBidWxsZXQgPSBuZXcgQnVsbGV0SW5mbygpO1xyXG4gICAgICAgIGxldCB5YW1sQnVsbGV0ID0geWFtbFtidWxsZXRLZXldO1xyXG5cclxuICAgICAgICBsZXQga2V5c09mQnVsbGV0SW5mbyA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKGJ1bGxldCk7XHJcbiAgICAgICAgbGV0IGtleXNGb3VuZEluWUFNTCA9IGdldEF2YWlsYWJsZUtleXNPZkNsYXNzKHlhbWxCdWxsZXQpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGtleXNPZlN1bW1hcnlJbmZvKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhrZXlzRm91bmRJbllBTUwpO1xyXG4gICAgICAgIGZvciAobGV0IGtleSBvZiBrZXlzRm91bmRJbllBTUwpIHtcclxuICAgICAgICAgICAgaWYgKCFrZXlzT2ZCdWxsZXRJbmZvLmluY2x1ZGVzKGtleSkpIHtcclxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiJ1wiICsga2V5ICsgXCInIGlzIG5vdCBhbiBhdmFpbGFibGUga2V5XCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyB0aXRsZVxyXG4gICAgICAgIGJ1bGxldC50aXRsZSA9IGdldFN0cmluZ0Zyb21JbnB1dCh5YW1sQnVsbGV0Py50aXRsZSwgYnVsbGV0LnRpdGxlKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhidWxsZXQudGl0bGUpO1xyXG5cclxuICAgICAgICAvLyBkYXRhc2V0XHJcbiAgICAgICAgYnVsbGV0LmRhdGFzZXQgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIHlhbWxCdWxsZXQ/LmRhdGFzZXQsXHJcbiAgICAgICAgICAgIGJ1bGxldC5kYXRhc2V0XHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhidWxsZXQuZGF0YXNldCk7XHJcblxyXG4gICAgICAgIC8vIG9yaWVudGF0aW9uXHJcbiAgICAgICAgYnVsbGV0Lm9yaWVudGF0aW9uID0gZ2V0U3RyaW5nRnJvbUlucHV0KFxyXG4gICAgICAgICAgICB5YW1sQnVsbGV0Py5vcmllbnRhdGlvbixcclxuICAgICAgICAgICAgYnVsbGV0Lm9yaWVudGF0aW9uXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhidWxsZXQub3JpZW50YXRpb24pO1xyXG5cclxuICAgICAgICAvLyByYW5nZVxyXG4gICAgICAgIGxldCByZXRSYW5nZSA9IGdldE51bWJlckFycmF5KFwicmFuZ2VcIiwgeWFtbEJ1bGxldD8ucmFuZ2UpO1xyXG4gICAgICAgIGlmICh0eXBlb2YgcmV0UmFuZ2UgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJldFJhbmdlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcmFuZ2UgPSByZXRSYW5nZSBhcyBBcnJheTxudW1iZXI+O1xyXG4gICAgICAgIC8vIENoZWNrIHRoZSB2YWx1ZSBpcyBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmdcclxuICAgICAgICAvLyBDaGVjayB0aGUgdmFsdWUgaXMgbm90IG5lZ2F0aXZlXHJcbiAgICAgICAgaWYgKHJhbmdlLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICBpZiAocmFuZ2VbMF0gPCAwKSB7XHJcbiAgICAgICAgICAgICAgICBlcnJvck1lc3NhZ2UgPSBcIk5lZ2F0aXZlIHJhbmdlIHZhbHVlIGlzIG5vdCBhbGxvd2VkXCI7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChyYW5nZS5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIGxldCBsYXN0Qm91bmQgPSByYW5nZVswXTtcclxuICAgICAgICAgICAgaWYgKGxhc3RCb3VuZCA8IDApIHtcclxuICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IFwiTmVnYXRpdmUgcmFuZ2UgdmFsdWUgaXMgbm90IGFsbG93ZWRcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpbmQgPSAxOyBpbmQgPCByYW5nZS5sZW5ndGg7IGluZCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJhbmdlW2luZF0gPD0gbGFzdEJvdW5kKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlZhbHVlcyBpbiBwYXJhbWV0ZXIgJ3JhbmdlJyBzaG91bGQgYmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnJvck1lc3NhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gXCJFbXB0eSByYW5nZSBpcyBub3QgYWxsb3dlZFwiO1xyXG4gICAgICAgICAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBidWxsZXQucmFuZ2UgPSByYW5nZTtcclxuICAgICAgICBsZXQgbnVtUmFuZ2UgPSByYW5nZS5sZW5ndGg7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5idWxsZXQucmFuZ2UpO1xyXG5cclxuICAgICAgICAvLyByYW5nZSBjb2xvclxyXG4gICAgICAgIGxldCByZXRSYW5nZUNvbG9yID0gZ2V0U3RyaW5nQXJyYXlGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIFwicmFuZ2VDb2xvclwiLFxyXG4gICAgICAgICAgICB5YW1sQnVsbGV0Py5yYW5nZUNvbG9yLFxyXG4gICAgICAgICAgICBudW1SYW5nZSxcclxuICAgICAgICAgICAgXCJcIixcclxuICAgICAgICAgICAgdmFsaWRhdGVDb2xvcixcclxuICAgICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXRSYW5nZUNvbG9yID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiByZXRSYW5nZUNvbG9yOyAvLyBlcnJvck1lc3NhZ2VcclxuICAgICAgICB9XHJcbiAgICAgICAgYnVsbGV0LnJhbmdlQ29sb3IgPSByZXRSYW5nZUNvbG9yO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGJ1bGxldC5yYW5nZUNvbG9yKTtcclxuXHJcbiAgICAgICAgLy8gYWN0dWFsIHZhbHVlLCBjYW4gcG9zc2VzcyB0ZW1wbGF0ZSB2YXJpYWJsZVxyXG4gICAgICAgIGJ1bGxldC52YWx1ZSA9IGdldFN0cmluZ0Zyb21JbnB1dCh5YW1sQnVsbGV0Py52YWx1ZSwgYnVsbGV0LnZhbHVlKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhidWxsZXQudmFsdWUpO1xyXG5cclxuICAgICAgICAvLyB2YWx1ZSB1bml0XHJcbiAgICAgICAgYnVsbGV0LnZhbHVlVW5pdCA9IGdldFN0cmluZ0Zyb21JbnB1dChcclxuICAgICAgICAgICAgeWFtbEJ1bGxldD8udmFsdWVVbml0LFxyXG4gICAgICAgICAgICBidWxsZXQudmFsdWVVbml0XHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhidWxsZXQudmFsdWVVbml0KTtcclxuXHJcbiAgICAgICAgLy8gdmFsdWUgY29sb3JcclxuICAgICAgICBidWxsZXQudmFsdWVDb2xvciA9IGdldFN0cmluZ0Zyb21JbnB1dChcclxuICAgICAgICAgICAgeWFtbEJ1bGxldD8udmFsdWVDb2xvcixcclxuICAgICAgICAgICAgYnVsbGV0LnZhbHVlQ29sb3JcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGJ1bGxldC52YWx1ZUNvbG9yKTtcclxuXHJcbiAgICAgICAgLy8gc2hvdyBtYXJrXHJcbiAgICAgICAgaWYgKHR5cGVvZiB5YW1sQnVsbGV0Py5zaG93TWFya2VyID09PSBcImJvb2xlYW5cIikge1xyXG4gICAgICAgICAgICBidWxsZXQuc2hvd01hcmtlciA9IHlhbWxCdWxsZXQuc2hvd01hcmtlcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coYnVsbGV0LnNob3dNYXJrKTtcclxuXHJcbiAgICAgICAgLy8gbWFyayB2YWx1ZVxyXG4gICAgICAgIGlmICh0eXBlb2YgeWFtbEJ1bGxldD8ubWFya2VyVmFsdWUgPT09IFwibnVtYmVyXCIpIHtcclxuICAgICAgICAgICAgYnVsbGV0Lm1hcmtlclZhbHVlID0geWFtbEJ1bGxldC5tYXJrZXJWYWx1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coYnVsbGV0Lm1hcmtWYWx1ZSk7XHJcblxyXG4gICAgICAgIC8vIG1hcmsgY29sb3JcclxuICAgICAgICBidWxsZXQubWFya2VyQ29sb3IgPSBnZXRTdHJpbmdGcm9tSW5wdXQoXHJcbiAgICAgICAgICAgIHlhbWxCdWxsZXQ/Lm1hcmtlckNvbG9yLFxyXG4gICAgICAgICAgICBidWxsZXQubWFya2VyQ29sb3JcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGJ1bGxldC5tYXJrVmFsdWUpO1xyXG5cclxuICAgICAgICByZW5kZXJJbmZvLmJ1bGxldC5wdXNoKGJ1bGxldCk7XHJcbiAgICB9IC8vIEJ1bGxldCByZWxhdGVkIHBhcmFtZXRlcnNcclxuICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uYnVsbGV0KTtcclxuXHJcbiAgICByZXR1cm4gcmVuZGVySW5mbztcclxufVxyXG4iLCJpbXBvcnQgeyBDYWNoZWRNZXRhZGF0YSwgVEZpbGUsIG5vcm1hbGl6ZVBhdGggfSBmcm9tIFwib2JzaWRpYW5cIjtcclxuaW1wb3J0IHtcclxuICAgIERhdGFNYXAsXHJcbiAgICBRdWVyeSxcclxuICAgIFJlbmRlckluZm8sXHJcbiAgICBYVmFsdWVNYXAsXHJcbiAgICBRdWVyeVZhbHVlUGFpcixcclxuICAgIFRhYmxlRGF0YSxcclxuICAgIFNlYXJjaFR5cGUsXHJcbiAgICBWYWx1ZVR5cGUsXHJcbn0gZnJvbSBcIi4vZGF0YVwiO1xyXG5pbXBvcnQgKiBhcyBoZWxwZXIgZnJvbSBcIi4vaGVscGVyXCI7XHJcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gXCJtb21lbnRcIjtcclxuXHJcbi8vIGZpbGVCYXNlTmFtZSBpcyBhIHN0cmluZyBjb250YWlucyBkYXRlRm9ybWF0IG9ubHlcclxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVGcm9tRmlsZW5hbWUoXHJcbiAgICBmaWxlOiBURmlsZSxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cclxuKTogTW9tZW50IHtcclxuICAgIC8vIGNvbnNvbGUubG9nKGBnZXREYXRlRnJvbUZpbGVuYW1lOiAke2ZpbGUubmFtZX1gKTtcclxuICAgIC8vIEdldCBkYXRlIGZvcm0gZmlsZUJhc2VOYW1lXHJcblxyXG4gICAgbGV0IGZpbGVCYXNlTmFtZSA9IGZpbGUuYmFzZW5hbWU7XHJcblxyXG4gICAgbGV0IGRhdGVTdHJpbmcgPSBoZWxwZXIuZ2V0RGF0ZVN0cmluZ0Zyb21JbnB1dFN0cmluZyhcclxuICAgICAgICBmaWxlQmFzZU5hbWUsXHJcbiAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0UHJlZml4LFxyXG4gICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFN1ZmZpeFxyXG4gICAgKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGRhdGVTdHJpbmcpO1xyXG5cclxuICAgIGxldCBmaWxlRGF0ZSA9IGhlbHBlci5zdHJUb0RhdGUoZGF0ZVN0cmluZywgcmVuZGVySW5mby5kYXRlRm9ybWF0KTtcclxuICAgIC8vIGNvbnNvbGUubG9nKGZpbGVEYXRlKTtcclxuXHJcbiAgICByZXR1cm4gZmlsZURhdGU7XHJcbn1cclxuXHJcbi8vIE5vdCBzdXBwb3J0IG11bHRpcGxlIHRhcmdldHNcclxuLy8gSW4gZm9ybSAna2V5OiB2YWx1ZScsIHRhcmdldCB1c2VkIHRvIGlkZW50aWZ5ICdmcm9udG1hdHRlciBrZXknXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlRnJvbUZyb250bWF0dGVyKFxyXG4gICAgZmlsZUNhY2hlOiBDYWNoZWRNZXRhZGF0YSxcclxuICAgIHF1ZXJ5OiBRdWVyeSxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cclxuKTogTW9tZW50IHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiZ2V0RGF0ZUZyb21Gcm9udG1hdHRlclwiKTtcclxuICAgIC8vIEdldCBkYXRlIGZyb20gJ2Zyb250TWF0dGVyS2V5OiBkYXRlJ1xyXG5cclxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcclxuXHJcbiAgICBsZXQgZnJvbnRNYXR0ZXIgPSBmaWxlQ2FjaGUuZnJvbnRtYXR0ZXI7XHJcbiAgICBpZiAoZnJvbnRNYXR0ZXIpIHtcclxuICAgICAgICBpZiAoaGVscGVyLmRlZXBWYWx1ZShmcm9udE1hdHRlciwgcXVlcnkuZ2V0VGFyZ2V0KCkpKSB7XHJcbiAgICAgICAgICAgIGxldCBzdHJEYXRlID0gaGVscGVyLmRlZXBWYWx1ZShmcm9udE1hdHRlciwgcXVlcnkuZ2V0VGFyZ2V0KCkpO1xyXG5cclxuICAgICAgICAgICAgLy8gV2Ugb25seSBzdXBwb3J0IHNpbmdsZSB2YWx1ZSBmb3Igbm93XHJcbiAgICAgICAgICAgIGlmICh0eXBlb2Ygc3RyRGF0ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICAgICAgc3RyRGF0ZSA9IGhlbHBlci5nZXREYXRlU3RyaW5nRnJvbUlucHV0U3RyaW5nKFxyXG4gICAgICAgICAgICAgICAgICAgIHN0ckRhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0UHJlZml4LFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZGF0ZUZvcm1hdFN1ZmZpeFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICBkYXRlID0gaGVscGVyLnN0clRvRGF0ZShzdHJEYXRlLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGU7XHJcbn1cclxuXHJcbi8vIGhlbHBlciBmdW5jdGlvblxyXG4vLyBzdHJSZWdleCBtdXN0IGhhdmUgbmFtZSBncm91cCAndmFsdWUnXHJcbi8vIE5hbWVkIGdyb3VwICd2YWx1ZScgY291bGQgYmUgcHJvdmlkZWQgZnJvbSB1c2VycyBvciBwbHVnaW5cclxuZnVuY3Rpb24gZXh0cmFjdERhdGVVc2luZ1JlZ2V4V2l0aFZhbHVlKFxyXG4gICAgdGV4dDogc3RyaW5nLFxyXG4gICAgc3RyUmVnZXg6IHN0cmluZyxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cclxuKTogTW9tZW50IHtcclxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcclxuXHJcbiAgICBsZXQgcmVnZXggPSBuZXcgUmVnRXhwKHN0clJlZ2V4LCBcImdtXCIpO1xyXG4gICAgbGV0IG1hdGNoO1xyXG4gICAgd2hpbGUgKChtYXRjaCA9IHJlZ2V4LmV4ZWModGV4dCkpKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cobWF0Y2gpO1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdHlwZW9mIG1hdGNoLmdyb3VwcyAhPT0gXCJ1bmRlZmluZWRcIiAmJlxyXG4gICAgICAgICAgICB0eXBlb2YgbWF0Y2guZ3JvdXBzLnZhbHVlICE9PSBcInVuZGVmaW5lZFwiXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIG11c3QgaGF2ZSBncm91cCBuYW1lICd2YWx1ZSdcclxuICAgICAgICAgICAgbGV0IHN0ckRhdGUgPSBtYXRjaC5ncm91cHMudmFsdWUudHJpbSgpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhzdHJEYXRlKTtcclxuXHJcbiAgICAgICAgICAgIHN0ckRhdGUgPSBoZWxwZXIuZ2V0RGF0ZVN0cmluZ0Zyb21JbnB1dFN0cmluZyhcclxuICAgICAgICAgICAgICAgIHN0ckRhdGUsXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRQcmVmaXgsXHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRTdWZmaXhcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGRhdGUgPSBoZWxwZXIuc3RyVG9EYXRlKHN0ckRhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCk7XHJcbiAgICAgICAgICAgIGlmIChkYXRlLmlzVmFsaWQoKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGU7XHJcbn1cclxuXHJcbi8vIE5vdCBzdXBwb3J0IG11bHRpcGxlIHRhcmdldHNcclxuLy8gSW4gZm9ybSAna2V5OiB2YWx1ZScsIG5hbWUgZ3JvdXAgJ3ZhbHVlJyBmcm9tIHBsdWdpbiwgbm90IGZyb20gdXNlcnNcclxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVGcm9tVGFnKFxyXG4gICAgY29udGVudDogc3RyaW5nLFxyXG4gICAgcXVlcnk6IFF1ZXJ5LFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xyXG4pOiBNb21lbnQge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJnZXREYXRlRnJvbVRhZ1wiKTtcclxuICAgIC8vIEdldCBkYXRlIGZyb20gJyN0YWdOYW1lOiBkYXRlJ1xyXG4gICAgLy8gSW5saW5lIHZhbHVlLWF0dGFjaGVkIHRhZyBvbmx5XHJcblxyXG4gICAgbGV0IGRhdGUgPSB3aW5kb3cubW9tZW50KFwiXCIpO1xyXG5cclxuICAgIGxldCB0YWdOYW1lID0gcXVlcnkuZ2V0VGFyZ2V0KCk7XHJcbiAgICBpZiAocXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCkpIHtcclxuICAgICAgICB0YWdOYW1lID0gcXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCk7IC8vIHVzZSBwYXJlbnQgdGFnIG5hbWUgZm9yIG11bHRpcGxlIHZhbHVlc1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2codGFnTmFtZSk7XHJcblxyXG4gICAgbGV0IHN0clJlZ2V4ID1cclxuICAgICAgICBcIihefFxcXFxzKSNcIiArXHJcbiAgICAgICAgdGFnTmFtZSArXHJcbiAgICAgICAgXCIoXFxcXC9bXFxcXHctXSspKig6KD88dmFsdWU+W1xcXFxkXFxcXC5cXFxcLy1dKilbYS16QS1aXSopPyhbXFxcXC4hLFxcXFw/O34tXSopPyhcXFxcc3wkKVwiO1xyXG4gICAgLy8gY29uc29sZS5sb2coc3RyUmVnZXgpO1xyXG5cclxuICAgIHJldHVybiBleHRyYWN0RGF0ZVVzaW5nUmVnZXhXaXRoVmFsdWUoY29udGVudCwgc3RyUmVnZXgsIHJlbmRlckluZm8pO1xyXG59XHJcblxyXG4vLyBOb3Qgc3VwcG9ydCBtdWx0aXBsZSB0YXJnZXRzXHJcbi8vIEluIGZvcm0gJ3JlZ2V4IHdpdGggdmFsdWUnLCBuYW1lIGdyb3VwICd2YWx1ZScgZnJvbSB1c2Vyc1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZUZyb21UZXh0KFxyXG4gICAgY29udGVudDogc3RyaW5nLFxyXG4gICAgcXVlcnk6IFF1ZXJ5LFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xyXG4pOiBNb21lbnQge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJnZXREYXRlRnJvbVRleHRcIik7XHJcbiAgICAvLyBHZXQgZGF0ZSBmcm9tIHRleHQgdXNpbmcgcmVnZXggd2l0aCB2YWx1ZVxyXG5cclxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcclxuXHJcbiAgICBsZXQgc3RyUmVnZXggPSBxdWVyeS5nZXRUYXJnZXQoKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHN0clRleHRSZWdleCk7XHJcblxyXG4gICAgcmV0dXJuIGV4dHJhY3REYXRlVXNpbmdSZWdleFdpdGhWYWx1ZShjb250ZW50LCBzdHJSZWdleCwgcmVuZGVySW5mbyk7XHJcbn1cclxuXHJcbi8vIE5vdCBzdXBwb3J0IG11bHRpcGxlIHRhcmdldHNcclxuLy8gSW4gZm9ybSAna2V5Ojp2YWx1ZScsIG5hbWVkIGdyb3VwICd2YWx1ZScgZnJvbSBwbHVnaW5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVGcm9tRHZGaWVsZChcclxuICAgIGNvbnRlbnQ6IHN0cmluZyxcclxuICAgIHF1ZXJ5OiBRdWVyeSxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cclxuKTogTW9tZW50IHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiZ2V0RGF0ZUZyb21EdkZpZWxkXCIpO1xyXG4gICAgLy8gR2V0IGRhdGUgZm9ybSAndGFyZ2V0TmFtZTo6IGRhdGUnXHJcblxyXG4gICAgbGV0IGRhdGUgPSB3aW5kb3cubW9tZW50KFwiXCIpO1xyXG5cclxuICAgIGxldCBkdlRhcmdldCA9IHF1ZXJ5LmdldFRhcmdldCgpO1xyXG4gICAgaWYgKHF1ZXJ5LmdldFBhcmVudFRhcmdldCgpKSB7XHJcbiAgICAgICAgZHZUYXJnZXQgPSBxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKTsgLy8gdXNlIHBhcmVudCB0YWcgbmFtZSBmb3IgbXVsdGlwbGUgdmFsdWVzXHJcbiAgICB9XHJcbiAgICAvLyBEYXRhdmlldyBhc2sgdXNlciB0byBhZGQgZGFzaGVzIGZvciBzcGFjZXMgYXMgc2VhcmNoIHRhcmdldFxyXG4gICAgLy8gU28gYSBkYXNoIG1heSBzdGFuZHMgZm9yIGEgcmVhbCBkYXNoIG9yIGEgc3BhY2VcclxuICAgIGR2VGFyZ2V0ID0gZHZUYXJnZXQucmVwbGFjZShcIi1cIiwgXCJbXFxcXHNcXFxcLV1cIik7XHJcblxyXG4gICAgLy8gVGVzdCB0aGlzIGluIFJlZ2V4MTAxXHJcbiAgICAvLyByZW1lbWJlciAnXFxzJyBpbmNsdWRlcyBuZXcgbGluZVxyXG4gICAgLy8gKF58IHxcXHQpXFwqezAsMn1kdlRhcmdldFxcKnswLDJ9KDo6WyB8XFx0XSooPzx2YWx1ZT5bXFxkXFwuXFwvXFwtXFx3LEA7IFxcdDpdKikpKFxccj9cXG58XFxyfCQpXHJcbiAgICBsZXQgc3RyUmVnZXggPVxyXG4gICAgICAgIFwiKF58IHxcXFxcdClcXFxcKnswLDJ9XCIgK1xyXG4gICAgICAgIGR2VGFyZ2V0ICtcclxuICAgICAgICBcIlxcXFwqezAsMn0oOjpbIHxcXFxcdF0qKD88dmFsdWU+W1xcXFxkXFxcXC5cXFxcL1xcXFwtXFxcXHcsQDsgXFxcXHQ6XSopKShcXFxcclxcXFw/XFxcXG58XFxcXHJ8JClcIjtcclxuICAgIC8vIGNvbnNvbGUubG9nKHN0clJlZ2V4KTtcclxuXHJcbiAgICByZXR1cm4gZXh0cmFjdERhdGVVc2luZ1JlZ2V4V2l0aFZhbHVlKGNvbnRlbnQsIHN0clJlZ2V4LCByZW5kZXJJbmZvKTtcclxufVxyXG5cclxuLy8gTm90IHN1cHBvcnQgbXVsdGlwbGUgdGFyZ2V0c1xyXG4vLyBJbiBmb3JtICdyZWdleCB3aXRoIHZhbHVlJywgbmFtZSBncm91cCAndmFsdWUnIGZyb20gdXNlcnNcclxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVGcm9tV2lraShcclxuICAgIGZpbGVDYWNoZTogQ2FjaGVkTWV0YWRhdGEsXHJcbiAgICBxdWVyeTogUXVlcnksXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXHJcbik6IE1vbWVudCB7XHJcbiAgICAvL2NvbnNvbGUubG9nKFwiZ2V0RGF0ZUZyb21XaWtpXCIpO1xyXG4gICAgLy8gR2V0IGRhdGUgZnJvbSAnW1tyZWdleCB3aXRoIHZhbHVlXV0nXHJcblxyXG4gICAgbGV0IGRhdGUgPSB3aW5kb3cubW9tZW50KFwiXCIpO1xyXG5cclxuICAgIGxldCBsaW5rcyA9IGZpbGVDYWNoZS5saW5rcztcclxuICAgIGlmICghbGlua3MpIHJldHVybiBkYXRlO1xyXG5cclxuICAgIGxldCBzZWFyY2hUYXJnZXQgPSBxdWVyeS5nZXRUYXJnZXQoKTtcclxuICAgIGxldCBzZWFyY2hUeXBlID0gcXVlcnkuZ2V0VHlwZSgpO1xyXG5cclxuICAgIGZvciAobGV0IGxpbmsgb2YgbGlua3MpIHtcclxuICAgICAgICBpZiAoIWxpbmspIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICBsZXQgd2lraVRleHQgPSBcIlwiO1xyXG4gICAgICAgIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLldpa2kpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmsuZGlzcGxheVRleHQpIHtcclxuICAgICAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5kaXNwbGF5VGV4dDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5saW5rO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLldpa2lMaW5rKSB7XHJcbiAgICAgICAgICAgIC8vIHdpa2kubGluayBwb2ludCB0byBhIGZpbGUgbmFtZVxyXG4gICAgICAgICAgICAvLyBhIGNvbG9uIGlzIG5vdCBhbGxvd2VkIGJlIGluIGZpbGUgbmFtZVxyXG4gICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsubGluaztcclxuICAgICAgICB9IGVsc2UgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuV2lraURpc3BsYXkpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmsuZGlzcGxheVRleHQpIHtcclxuICAgICAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5kaXNwbGF5VGV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChsaW5rLmRpc3BsYXlUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsuZGlzcGxheVRleHQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsubGluaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB3aWtpVGV4dCA9IHdpa2lUZXh0LnRyaW0oKTtcclxuXHJcbiAgICAgICAgbGV0IHN0clJlZ2V4ID0gXCJeXCIgKyBzZWFyY2hUYXJnZXQgKyBcIiRcIjtcclxuICAgICAgICByZXR1cm4gZXh0cmFjdERhdGVVc2luZ1JlZ2V4V2l0aFZhbHVlKHdpa2lUZXh0LCBzdHJSZWdleCwgcmVuZGVySW5mbyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGRhdGU7XHJcbn1cclxuXHJcbi8vIE5vdCBzdXBwb3J0IG11bHRpcGxlIHRhcmdldHNcclxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGVGcm9tRmlsZU1ldGEoXHJcbiAgICBmaWxlOiBURmlsZSxcclxuICAgIHF1ZXJ5OiBRdWVyeSxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm9cclxuKTogTW9tZW50IHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiZ2V0RGF0ZUZyb21GaWxlTWV0YVwiKTtcclxuICAgIC8vIEdldCBkYXRlIGZyb20gY0RhdGUsIG1EYXRlIG9yIGJhc2VGaWxlTmFtZVxyXG5cclxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcclxuXHJcbiAgICBpZiAoZmlsZSAmJiBmaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmaWxlLnN0YXQpO1xyXG5cclxuICAgICAgICBsZXQgdGFyZ2V0ID0gcXVlcnkuZ2V0VGFyZ2V0KCk7XHJcbiAgICAgICAgaWYgKHRhcmdldCA9PT0gXCJjRGF0ZVwiKSB7XHJcbiAgICAgICAgICAgIGxldCBjdGltZSA9IGZpbGUuc3RhdC5jdGltZTsgLy8gdW5peCB0aW1lXHJcbiAgICAgICAgICAgIGRhdGUgPSBoZWxwZXIuZ2V0RGF0ZUZyb21Vbml4VGltZShjdGltZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJtRGF0ZVwiKSB7XHJcbiAgICAgICAgICAgIGxldCBtdGltZSA9IGZpbGUuc3RhdC5tdGltZTsgLy8gdW5peCB0aW1lXHJcbiAgICAgICAgICAgIGRhdGUgPSBoZWxwZXIuZ2V0RGF0ZUZyb21Vbml4VGltZShtdGltZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJuYW1lXCIpIHtcclxuICAgICAgICAgICAgZGF0ZSA9IGdldERhdGVGcm9tRmlsZW5hbWUoZmlsZSwgcmVuZGVySW5mbyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8vIGNvbnNvbGUubG9nKGRhdGUpO1xyXG4gICAgcmV0dXJuIGRhdGU7XHJcbn1cclxuXHJcbi8vIE5vdCBzdXBwb3J0IG11bHRpcGxlIHRhcmdldHNcclxuLy8gSW4gZm9ybSAncmVnZXggd2l0aCB2YWx1ZScsIG5hbWUgZ3JvdXAgJ3ZhbHVlJyBmcm9tIHVzZXJzXHJcbmV4cG9ydCBmdW5jdGlvbiBnZXREYXRlRnJvbVRhc2soXHJcbiAgICBjb250ZW50OiBzdHJpbmcsXHJcbiAgICBxdWVyeTogUXVlcnksXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvXHJcbik6IE1vbWVudCB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcImdldERhdGVGcm9tVGFza1wiKTtcclxuICAgIC8vIEdldCBkYXRlIGZyb20gJy0gWyBdIHJlZ2V4IHdpdGggdmFsdWUnIG9yICctIFt4XSByZWdleCB3aXRoIHZhbHVlJ1xyXG5cclxuICAgIGxldCBkYXRlID0gd2luZG93Lm1vbWVudChcIlwiKTtcclxuICAgIGxldCBzZWFyY2hUeXBlID0gcXVlcnkuZ2V0VHlwZSgpO1xyXG4gICAgLy8gY29uc29sZS5sb2coc2VhcmNoVHlwZSk7XHJcblxyXG4gICAgbGV0IHN0clJlZ2V4ID0gcXVlcnkuZ2V0VGFyZ2V0KCk7XHJcbiAgICBpZiAoc2VhcmNoVHlwZSA9PT0gU2VhcmNoVHlwZS5UYXNrKSB7XHJcbiAgICAgICAgc3RyUmVnZXggPSBcIlxcXFxbW1xcXFxzeF1cXFxcXVxcXFxzXCIgKyBzdHJSZWdleDtcclxuICAgIH0gZWxzZSBpZiAoc2VhcmNoVHlwZSA9PT0gU2VhcmNoVHlwZS5UYXNrRG9uZSkge1xyXG4gICAgICAgIHN0clJlZ2V4ID0gXCJcXFxcW3hcXFxcXVxcXFxzXCIgKyBzdHJSZWdleDtcclxuICAgIH0gZWxzZSBpZiAoc2VhcmNoVHlwZSA9PT0gU2VhcmNoVHlwZS5UYXNrTm90RG9uZSkge1xyXG4gICAgICAgIHN0clJlZ2V4ID0gXCJcXFxcW1xcXFxzXFxcXF1cXFxcc1wiICsgc3RyUmVnZXg7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAgIHN0clJlZ2V4ID0gXCJcXFxcW1tcXFxcc3hdXFxcXF1cXFxcc1wiICsgc3RyUmVnZXg7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhzdHJUZXh0UmVnZXgpO1xyXG5cclxuICAgIHJldHVybiBleHRyYWN0RGF0ZVVzaW5nUmVnZXhXaXRoVmFsdWUoY29udGVudCwgc3RyUmVnZXgsIHJlbmRlckluZm8pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYWRkVG9EYXRhTWFwKFxyXG4gICAgZGF0YU1hcDogRGF0YU1hcCxcclxuICAgIGRhdGU6IHN0cmluZyxcclxuICAgIHF1ZXJ5OiBRdWVyeSxcclxuICAgIHZhbHVlOiBudW1iZXIgfCBudWxsXHJcbikge1xyXG4gICAgaWYgKCFkYXRhTWFwLmhhcyhkYXRlKSkge1xyXG4gICAgICAgIGxldCBxdWVyeVZhbHVlUGFpcnMgPSBuZXcgQXJyYXk8UXVlcnlWYWx1ZVBhaXI+KCk7XHJcbiAgICAgICAgcXVlcnlWYWx1ZVBhaXJzLnB1c2goeyBxdWVyeTogcXVlcnksIHZhbHVlOiB2YWx1ZSB9KTtcclxuICAgICAgICBkYXRhTWFwLnNldChkYXRlLCBxdWVyeVZhbHVlUGFpcnMpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICBsZXQgdGFyZ2V0VmFsdWVQYWlycyA9IGRhdGFNYXAuZ2V0KGRhdGUpO1xyXG4gICAgICAgIHRhcmdldFZhbHVlUGFpcnMucHVzaCh7IHF1ZXJ5OiBxdWVyeSwgdmFsdWU6IHZhbHVlIH0pO1xyXG4gICAgfVxyXG59XHJcblxyXG4vLyBIZWxwZXIgZnVuY3Rpb25cclxuLy8gQWNjZXB0IG11bHRpcGxlIHZhbHVlcyB1c2luZyBjdXN0b20gc2VwYXJhdG9yc1xyXG4vLyByZWdleCB3aXRoIHZhbHVlIC0tPiBleHRyYWN0IHZhbHVlXHJcbi8vIHJlZ2V4IHdpdGhvdXQgdmFsdWUgLS0+IGNvdW50IG9jY3VycmVuY2llc1xyXG5mdW5jdGlvbiBleHRyYWN0RGF0YVVzaW5nUmVnZXhXaXRoTXVsdGlwbGVWYWx1ZXMoXHJcbiAgICB0ZXh0OiBzdHJpbmcsXHJcbiAgICBzdHJSZWdleDogc3RyaW5nLFxyXG4gICAgcXVlcnk6IFF1ZXJ5LFxyXG4gICAgZGF0YU1hcDogRGF0YU1hcCxcclxuICAgIHhWYWx1ZU1hcDogWFZhbHVlTWFwLFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mb1xyXG4pOiBib29sZWFuIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiZXh0cmFjdERhdGFVc2luZ1JlZ2V4V2l0aE11bHRpcGxlVmFsdWVzXCIpO1xyXG5cclxuICAgIGxldCByZWdleCA9IG5ldyBSZWdFeHAoc3RyUmVnZXgsIFwiZ21cIik7XHJcbiAgICBsZXQgbWF0Y2g7XHJcbiAgICBsZXQgbWVhc3VyZSA9IDAuMDtcclxuICAgIGxldCBleHRyYWN0ZWQgPSBmYWxzZTtcclxuICAgIHdoaWxlICgobWF0Y2ggPSByZWdleC5leGVjKHRleHQpKSkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1hdGNoKTtcclxuICAgICAgICBpZiAoIXJlbmRlckluZm8uaWdub3JlQXR0YWNoZWRWYWx1ZVtxdWVyeS5nZXRJZCgpXSkge1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICB0eXBlb2YgbWF0Y2guZ3JvdXBzICE9PSBcInVuZGVmaW5lZFwiICYmXHJcbiAgICAgICAgICAgICAgICB0eXBlb2YgbWF0Y2guZ3JvdXBzLnZhbHVlICE9PSBcInVuZGVmaW5lZFwiXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlcyA9IG1hdGNoLmdyb3Vwcy52YWx1ZS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh2YWx1ZXMpO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcnkuZ2V0U2VwYXJhdG9yKCkpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNwbGl0dGVkID0gdmFsdWVzLnNwbGl0KHF1ZXJ5LmdldFNlcGFyYXRvcigpKTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHNwbGl0dGVkKTtcclxuICAgICAgICAgICAgICAgIGlmICghc3BsaXR0ZWQpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwic2luZ2xlLXZhbHVlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0b1BhcnNlID0gc3BsaXR0ZWRbMF0udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRvUGFyc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCByZXRQYXJzZSA9IGhlbHBlci5wYXJzZUZsb2F0RnJvbUFueShcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG9QYXJzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby50ZXh0VmFsdWVNYXBcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS52YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0UGFyc2UudHlwZSA9PT0gVmFsdWVUeXBlLlRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYXN1cmUgPSByZXRQYXJzZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuVGltZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcmVuZGVySW5mby5pZ25vcmVaZXJvVmFsdWVbcXVlcnkuZ2V0SWQoKV0gfHxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRQYXJzZS52YWx1ZSAhPT0gMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZSArPSByZXRQYXJzZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgc3BsaXR0ZWQubGVuZ3RoID4gcXVlcnkuZ2V0QWNjZXNzb3IoKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmdldEFjY2Vzc29yKCkgPj0gMFxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJtdWx0aXBsZS12YWx1ZXNcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRvUGFyc2UgPSBzcGxpdHRlZFtxdWVyeS5nZXRBY2Nlc3NvcigpXS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJldFBhcnNlID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0b1BhcnNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnRleHRWYWx1ZU1hcFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhyZXRQYXJzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJldFBhcnNlLnZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS50eXBlID09PSBWYWx1ZVR5cGUuVGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZSA9IHJldFBhcnNlLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LnZhbHVlVHlwZSA9IFZhbHVlVHlwZS5UaW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVhc3VyZSArPSByZXRQYXJzZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBubyBuYW1lZCBncm91cHMsIGNvdW50IG9jY3VycmVuY2llc1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJjb3VudCBvY2N1cnJlbmNpZXNcIik7XHJcbiAgICAgICAgICAgICAgICBtZWFzdXJlICs9IHJlbmRlckluZm8uY29uc3RWYWx1ZVtxdWVyeS5nZXRJZCgpXTtcclxuICAgICAgICAgICAgICAgIGV4dHJhY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyBmb3JjZSB0byBjb3VudCBvY2N1cnJlbmNpZXNcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJmb3JjZWQgY291bnQgb2NjdXJyZW5jaWVzXCIpO1xyXG4gICAgICAgICAgICBtZWFzdXJlICs9IHJlbmRlckluZm8uY29uc3RWYWx1ZVtxdWVyeS5nZXRJZCgpXTtcclxuICAgICAgICAgICAgZXh0cmFjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoZXh0cmFjdGVkKSB7XHJcbiAgICAgICAgbGV0IHhWYWx1ZSA9IHhWYWx1ZU1hcC5nZXQocmVuZGVySW5mby54RGF0YXNldFtxdWVyeS5nZXRJZCgpXSk7XHJcbiAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIG1lYXN1cmUpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuLy8gTm8gdmFsdWUsIGNvdW50IG9jY3VycmVuY2VzIG9ubHlcclxuZXhwb3J0IGZ1bmN0aW9uIGNvbGxlY3REYXRhRnJvbUZyb250bWF0dGVyVGFnKFxyXG4gICAgZmlsZUNhY2hlOiBDYWNoZWRNZXRhZGF0YSxcclxuICAgIHF1ZXJ5OiBRdWVyeSxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBkYXRhTWFwOiBEYXRhTWFwLFxyXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXBcclxuKTogYm9vbGVhbiB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcImNvbGxlY3REYXRhRnJvbUZyb250bWF0dGVyVGFnXCIpO1xyXG4gICAgLy8gY29uc29sZS5sb2cocXVlcnkpO1xyXG4gICAgLy8gY29uc29sZS5sb2coZGF0YU1hcCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyh4VmFsdWVNYXApO1xyXG5cclxuICAgIGxldCBmcm9udE1hdHRlciA9IGZpbGVDYWNoZS5mcm9udG1hdHRlcjtcclxuICAgIGxldCBmcm9udE1hdHRlclRhZ3M6IHN0cmluZ1tdID0gW107XHJcbiAgICBpZiAoZnJvbnRNYXR0ZXIgJiYgZnJvbnRNYXR0ZXIudGFncykge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZyb250TWF0dGVyLnRhZ3MpO1xyXG4gICAgICAgIGxldCB0YWdNZWFzdXJlID0gMC4wO1xyXG4gICAgICAgIGxldCB0YWdFeGlzdCA9IGZhbHNlO1xyXG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGZyb250TWF0dGVyLnRhZ3MpKSB7XHJcbiAgICAgICAgICAgIGZyb250TWF0dGVyVGFncyA9IGZyb250TWF0dGVyVGFncy5jb25jYXQoZnJvbnRNYXR0ZXIudGFncyk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZnJvbnRNYXR0ZXIudGFncyA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICAgICAgICBsZXQgc3BsaXR0ZWQgPSBmcm9udE1hdHRlci50YWdzLnNwbGl0KHF1ZXJ5LmdldFNlcGFyYXRvcih0cnVlKSk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IHNwbGl0dGVkUGFydCBvZiBzcGxpdHRlZCkge1xyXG4gICAgICAgICAgICAgICAgbGV0IHBhcnQgPSBzcGxpdHRlZFBhcnQudHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBhcnQgIT09IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBmcm9udE1hdHRlclRhZ3MucHVzaChwYXJ0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmcm9udE1hdHRlclRhZ3MpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXJ5LmdldFRhcmdldCgpKTtcclxuXHJcbiAgICAgICAgZm9yIChsZXQgdGFnIG9mIGZyb250TWF0dGVyVGFncykge1xyXG4gICAgICAgICAgICBpZiAodGFnID09PSBxdWVyeS5nZXRUYXJnZXQoKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gc2ltcGxlIHRhZ1xyXG4gICAgICAgICAgICAgICAgdGFnTWVhc3VyZSA9IHRhZ01lYXN1cmUgKyByZW5kZXJJbmZvLmNvbnN0VmFsdWVbcXVlcnkuZ2V0SWQoKV07XHJcbiAgICAgICAgICAgICAgICB0YWdFeGlzdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGFnLnN0YXJ0c1dpdGgocXVlcnkuZ2V0VGFyZ2V0KCkgKyBcIi9cIikpIHtcclxuICAgICAgICAgICAgICAgIC8vIG5lc3RlZCB0YWdcclxuICAgICAgICAgICAgICAgIHRhZ01lYXN1cmUgPSB0YWdNZWFzdXJlICsgcmVuZGVySW5mby5jb25zdFZhbHVlW3F1ZXJ5LmdldElkKCldO1xyXG4gICAgICAgICAgICAgICAgdGFnRXhpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIHZhbHVlZC10YWcgaW4gZnJvbnRtYXR0ZXIgaXMgbm90IHN1cHBvcnRlZFxyXG4gICAgICAgICAgICAvLyBiZWNhdXNlIHRoZSBcInRhZzp2YWx1ZVwiIGluIGZyb250bWF0dGVyIHdpbGwgYmUgY29uc2lkZXIgYXMgYSBuZXcgdGFnIGZvciBlYWNoIGV4aXN0aW5nIHZhbHVlXHJcblxyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICBpZiAodGFnRXhpc3QpIHtcclxuICAgICAgICAgICAgICAgIHZhbHVlID0gdGFnTWVhc3VyZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgeFZhbHVlID0geFZhbHVlTWFwLmdldChyZW5kZXJJbmZvLnhEYXRhc2V0W3F1ZXJ5LmdldElkKCldKTtcclxuICAgICAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIHZhbHVlKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuLy8gSW4gZm9ybSAna2V5OiB2YWx1ZScsIHRhcmdldCB1c2VkIHRvIGlkZW50aWZ5ICdmcm9udG1hdHRlciBrZXknXHJcbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0RGF0YUZyb21Gcm9udG1hdHRlcktleShcclxuICAgIGZpbGVDYWNoZTogQ2FjaGVkTWV0YWRhdGEsXHJcbiAgICBxdWVyeTogUXVlcnksXHJcbiAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgZGF0YU1hcDogRGF0YU1hcCxcclxuICAgIHhWYWx1ZU1hcDogWFZhbHVlTWFwXHJcbik6IGJvb2xlYW4ge1xyXG4gICAgLy8gY29uc29sZS5sb2coXCJjb2xsZWN0RGF0YUZyb21Gcm9udG1hdHRlcktleVwiKTtcclxuXHJcbiAgICBsZXQgZnJvbnRNYXR0ZXIgPSBmaWxlQ2FjaGUuZnJvbnRtYXR0ZXI7XHJcbiAgICBpZiAoZnJvbnRNYXR0ZXIpIHtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmcm9udE1hdHRlcik7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcnkuZ2V0VGFyZ2V0KCkpO1xyXG4gICAgICAgIGxldCBkZWVwVmFsdWUgPSBoZWxwZXIuZGVlcFZhbHVlKGZyb250TWF0dGVyLCBxdWVyeS5nZXRUYXJnZXQoKSk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coZGVlcFZhbHVlKTtcclxuICAgICAgICBpZiAoZGVlcFZhbHVlKSB7XHJcbiAgICAgICAgICAgIGxldCByZXRQYXJzZSA9IGhlbHBlci5wYXJzZUZsb2F0RnJvbUFueShcclxuICAgICAgICAgICAgICAgIGRlZXBWYWx1ZSxcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8udGV4dFZhbHVlTWFwXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJldFBhcnNlKTtcclxuICAgICAgICAgICAgaWYgKHJldFBhcnNlLnZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmV0UGFyc2UudHlwZSA9PT0gVmFsdWVUeXBlLlRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBxdWVyeS52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuVGltZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcclxuICAgICAgICAgICAgICAgIGxldCB4VmFsdWUgPSB4VmFsdWVNYXAuZ2V0KHJlbmRlckluZm8ueERhdGFzZXRbcXVlcnkuZ2V0SWQoKV0pO1xyXG4gICAgICAgICAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIHJldFBhcnNlLnZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgcXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCkgJiZcclxuICAgICAgICAgICAgaGVscGVyLmRlZXBWYWx1ZShmcm9udE1hdHRlciwgcXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCkpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwibXVsdGlwbGUgdmFsdWVzXCIpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhxdWVyeS5nZXRUYXJnZXQoKSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHF1ZXJ5LmdldFBhcmVudFRhcmdldCgpKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcnkuZ2V0U3ViSWQoKSk7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAvLyAgICAgZnJvbnRNYXR0ZXJbcXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCldXHJcbiAgICAgICAgICAgIC8vICk7XHJcbiAgICAgICAgICAgIGxldCB0b1BhcnNlID0gaGVscGVyLmRlZXBWYWx1ZShcclxuICAgICAgICAgICAgICAgIGZyb250TWF0dGVyLFxyXG4gICAgICAgICAgICAgICAgcXVlcnkuZ2V0UGFyZW50VGFyZ2V0KClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgbGV0IHNwbGl0dGVkID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodG9QYXJzZSkpIHtcclxuICAgICAgICAgICAgICAgIHNwbGl0dGVkID0gdG9QYXJzZS5tYXAoKHApID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcC50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHRvUGFyc2UgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgICAgIHNwbGl0dGVkID0gdG9QYXJzZS5zcGxpdChxdWVyeS5nZXRTZXBhcmF0b3IoKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc3BsaXR0ZWQpO1xyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICBzcGxpdHRlZCAmJlxyXG4gICAgICAgICAgICAgICAgc3BsaXR0ZWQubGVuZ3RoID4gcXVlcnkuZ2V0QWNjZXNzb3IoKSAmJlxyXG4gICAgICAgICAgICAgICAgcXVlcnkuZ2V0QWNjZXNzb3IoKSA+PSAwXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogaXQncyBub3QgZWZmaWNlbnQgdG8gcmV0cmlldmUgb25lIHZhbHVlIGF0IGEgdGltZSwgZW5oYW5jZSB0aGlzXHJcbiAgICAgICAgICAgICAgICBsZXQgc3BsaXR0ZWRQYXJ0ID0gc3BsaXR0ZWRbcXVlcnkuZ2V0QWNjZXNzb3IoKV0udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHJldFBhcnNlID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KFxyXG4gICAgICAgICAgICAgICAgICAgIHNwbGl0dGVkUGFydCxcclxuICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnRleHRWYWx1ZU1hcFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS52YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS50eXBlID09PSBWYWx1ZVR5cGUuVGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuVGltZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB4VmFsdWUgPSB4VmFsdWVNYXAuZ2V0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnhEYXRhc2V0W3F1ZXJ5LmdldElkKCldXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBhZGRUb0RhdGFNYXAoZGF0YU1hcCwgeFZhbHVlLCBxdWVyeSwgcmV0UGFyc2UudmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBmYWxzZTtcclxufVxyXG5cclxuLy8gSW4gZm9ybSAncmVnZXggd2l0aCB2YWx1ZScsIG5hbWUgZ3JvdXAgJ3ZhbHVlJyBmcm9tIHVzZXJzXHJcbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0RGF0YUZyb21XaWtpKFxyXG4gICAgZmlsZUNhY2hlOiBDYWNoZWRNZXRhZGF0YSxcclxuICAgIHF1ZXJ5OiBRdWVyeSxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBkYXRhTWFwOiBEYXRhTWFwLFxyXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXBcclxuKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgbGlua3MgPSBmaWxlQ2FjaGUubGlua3M7XHJcbiAgICBpZiAoIWxpbmtzKSByZXR1cm4gZmFsc2U7XHJcblxyXG4gICAgbGV0IHNlYXJjaFRhcmdldCA9IHF1ZXJ5LmdldFRhcmdldCgpO1xyXG4gICAgbGV0IHNlYXJjaFR5cGUgPSBxdWVyeS5nZXRUeXBlKCk7XHJcblxyXG4gICAgbGV0IHRleHRUb1NlYXJjaCA9IFwiXCI7XHJcbiAgICBsZXQgc3RyUmVnZXggPSBzZWFyY2hUYXJnZXQ7XHJcblxyXG4gICAgLy8gUHJlcGFyZSB0ZXh0VG9TZWFyY2hcclxuICAgIGZvciAobGV0IGxpbmsgb2YgbGlua3MpIHtcclxuICAgICAgICBpZiAoIWxpbmspIGNvbnRpbnVlO1xyXG5cclxuICAgICAgICBsZXQgd2lraVRleHQgPSBcIlwiO1xyXG4gICAgICAgIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLldpa2kpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmsuZGlzcGxheVRleHQpIHtcclxuICAgICAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5kaXNwbGF5VGV4dDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5saW5rO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIGlmIChzZWFyY2hUeXBlID09PSBTZWFyY2hUeXBlLldpa2lMaW5rKSB7XHJcbiAgICAgICAgICAgIC8vIHdpa2kubGluayBwb2ludCB0byBhIGZpbGUgbmFtZVxyXG4gICAgICAgICAgICAvLyBhIGNvbG9uIGlzIG5vdCBhbGxvd2VkIGJlIGluIGZpbGUgbmFtZVxyXG4gICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsubGluaztcclxuICAgICAgICB9IGVsc2UgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuV2lraURpc3BsYXkpIHtcclxuICAgICAgICAgICAgaWYgKGxpbmsuZGlzcGxheVRleHQpIHtcclxuICAgICAgICAgICAgICAgIHdpa2lUZXh0ID0gbGluay5kaXNwbGF5VGV4dDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChsaW5rLmRpc3BsYXlUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsuZGlzcGxheVRleHQ7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB3aWtpVGV4dCA9IGxpbmsubGluaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB3aWtpVGV4dCA9IHdpa2lUZXh0LnRyaW0oKTtcclxuXHJcbiAgICAgICAgdGV4dFRvU2VhcmNoICs9IHdpa2lUZXh0ICsgXCJcXG5cIjtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZXh0cmFjdERhdGFVc2luZ1JlZ2V4V2l0aE11bHRpcGxlVmFsdWVzKFxyXG4gICAgICAgIHRleHRUb1NlYXJjaCxcclxuICAgICAgICBzdHJSZWdleCxcclxuICAgICAgICBxdWVyeSxcclxuICAgICAgICBkYXRhTWFwLFxyXG4gICAgICAgIHhWYWx1ZU1hcCxcclxuICAgICAgICByZW5kZXJJbmZvXHJcbiAgICApO1xyXG59XHJcblxyXG4vLyBJbiBmb3JtICdrZXk6IHZhbHVlJywgbmFtZSBncm91cCAndmFsdWUnIGZyb20gcGx1Z2luLCBub3QgZnJvbSB1c2Vyc1xyXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tSW5saW5lVGFnKFxyXG4gICAgY29udGVudDogc3RyaW5nLFxyXG4gICAgcXVlcnk6IFF1ZXJ5LFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIGRhdGFNYXA6IERhdGFNYXAsXHJcbiAgICB4VmFsdWVNYXA6IFhWYWx1ZU1hcFxyXG4pOiBib29sZWFuIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKGNvbnRlbnQpO1xyXG4gICAgLy8gVGVzdCB0aGlzIGluIFJlZ2V4MTAxXHJcbiAgICAvLyAoXnxcXHMpI3RhZ05hbWUoXFwvW1xcdy1dKykqKDooPzx2YWx1ZT5bXFxkXFwuXFwvLV0qKVthLXpBLVpdKik/KFtcXFxcLiEsXFxcXD87fi1dKik/KFxcc3wkKVxyXG4gICAgbGV0IHRhZ05hbWUgPSBxdWVyeS5nZXRUYXJnZXQoKTtcclxuICAgIGlmIChxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKSkge1xyXG4gICAgICAgIHRhZ05hbWUgPSBxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKTsgLy8gdXNlIHBhcmVudCB0YWcgbmFtZSBmb3IgbXVsdGlwbGUgdmFsdWVzXHJcbiAgICB9XHJcbiAgICBpZiAodGFnTmFtZS5sZW5ndGggPiAxICYmIHRhZ05hbWUuc3RhcnRzV2l0aChcIiNcIikpIHtcclxuICAgICAgICB0YWdOYW1lID0gdGFnTmFtZS5zdWJzdHJpbmcoMSk7XHJcbiAgICB9XHJcbiAgICBsZXQgc3RyUmVnZXggPVxyXG4gICAgICAgIFwiKF58XFxcXHMpI1wiICtcclxuICAgICAgICB0YWdOYW1lICtcclxuICAgICAgICBcIihcXFxcL1tcXFxcdy1dKykqKDooPzx2YWx1ZT5bXFxcXGRcXFxcLlxcXFwvLV0qKVthLXpBLVpdKik/KFtcXFxcLiEsXFxcXD87fi1dKik/KFxcXFxzfCQpXCI7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhzdHJSZWdleCk7XHJcblxyXG4gICAgcmV0dXJuIGV4dHJhY3REYXRhVXNpbmdSZWdleFdpdGhNdWx0aXBsZVZhbHVlcyhcclxuICAgICAgICBjb250ZW50LFxyXG4gICAgICAgIHN0clJlZ2V4LFxyXG4gICAgICAgIHF1ZXJ5LFxyXG4gICAgICAgIGRhdGFNYXAsXHJcbiAgICAgICAgeFZhbHVlTWFwLFxyXG4gICAgICAgIHJlbmRlckluZm9cclxuICAgICk7XHJcbn1cclxuXHJcbi8vIEluIGZvcm0gJ3JlZ2V4IHdpdGggdmFsdWUnLCBuYW1lIGdyb3VwICd2YWx1ZScgZnJvbSB1c2Vyc1xyXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tVGV4dChcclxuICAgIGNvbnRlbnQ6IHN0cmluZyxcclxuICAgIHF1ZXJ5OiBRdWVyeSxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBkYXRhTWFwOiBEYXRhTWFwLFxyXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXBcclxuKTogYm9vbGVhbiB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcImNvbGxlY3REYXRhRnJvbVRleHRcIik7XHJcblxyXG4gICAgbGV0IHN0clJlZ2V4ID0gcXVlcnkuZ2V0VGFyZ2V0KCk7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhzdHJSZWdleCk7XHJcblxyXG4gICAgcmV0dXJuIGV4dHJhY3REYXRhVXNpbmdSZWdleFdpdGhNdWx0aXBsZVZhbHVlcyhcclxuICAgICAgICBjb250ZW50LFxyXG4gICAgICAgIHN0clJlZ2V4LFxyXG4gICAgICAgIHF1ZXJ5LFxyXG4gICAgICAgIGRhdGFNYXAsXHJcbiAgICAgICAgeFZhbHVlTWFwLFxyXG4gICAgICAgIHJlbmRlckluZm9cclxuICAgICk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjb2xsZWN0RGF0YUZyb21GaWxlTWV0YShcclxuICAgIGZpbGU6IFRGaWxlLFxyXG4gICAgY29udGVudDogc3RyaW5nLFxyXG4gICAgcXVlcnk6IFF1ZXJ5LFxyXG4gICAgcmVuZGVySW5mbzogUmVuZGVySW5mbyxcclxuICAgIGRhdGFNYXA6IERhdGFNYXAsXHJcbiAgICB4VmFsdWVNYXA6IFhWYWx1ZU1hcFxyXG4pOiBib29sZWFuIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiY29sbGVjdERhdGFGcm9tRmlsZU1ldGFcIik7XHJcblxyXG4gICAgaWYgKGZpbGUgJiYgZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coZmlsZS5zdGF0KTtcclxuXHJcbiAgICAgICAgbGV0IHRhcmdldCA9IHF1ZXJ5LmdldFRhcmdldCgpO1xyXG4gICAgICAgIGxldCB4VmFsdWUgPSB4VmFsdWVNYXAuZ2V0KHJlbmRlckluZm8ueERhdGFzZXRbcXVlcnkuZ2V0SWQoKV0pO1xyXG5cclxuICAgICAgICBpZiAodGFyZ2V0ID09PSBcImNEYXRlXCIpIHtcclxuICAgICAgICAgICAgbGV0IGN0aW1lID0gZmlsZS5zdGF0LmN0aW1lOyAvLyB1bml4IHRpbWVcclxuICAgICAgICAgICAgcXVlcnkudmFsdWVUeXBlID0gVmFsdWVUeXBlLkRhdGU7XHJcbiAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcclxuICAgICAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIGN0aW1lKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgPT09IFwibURhdGVcIikge1xyXG4gICAgICAgICAgICBsZXQgbXRpbWUgPSBmaWxlLnN0YXQubXRpbWU7IC8vIHVuaXggdGltZVxyXG4gICAgICAgICAgICBxdWVyeS52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuRGF0ZTtcclxuICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xyXG4gICAgICAgICAgICBhZGRUb0RhdGFNYXAoZGF0YU1hcCwgeFZhbHVlLCBxdWVyeSwgbXRpbWUpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJzaXplXCIpIHtcclxuICAgICAgICAgICAgbGV0IHNpemUgPSBmaWxlLnN0YXQuc2l6ZTsgLy8gbnVtYmVyIGluXHJcbiAgICAgICAgICAgIHF1ZXJ5LmFkZE51bVRhcmdldHMoKTtcclxuICAgICAgICAgICAgYWRkVG9EYXRhTWFwKGRhdGFNYXAsIHhWYWx1ZSwgcXVlcnksIHNpemUpO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRhcmdldCA9PT0gXCJudW1Xb3Jkc1wiKSB7XHJcbiAgICAgICAgICAgIGxldCBudW1Xb3JkcyA9IGhlbHBlci5nZXRXb3JkQ291bnQoY29udGVudCk7XHJcbiAgICAgICAgICAgIGFkZFRvRGF0YU1hcChkYXRhTWFwLCB4VmFsdWUsIHF1ZXJ5LCBudW1Xb3Jkcyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09PSBcIm51bUNoYXJzXCIpIHtcclxuICAgICAgICAgICAgbGV0IG51bUNoYXJzID0gaGVscGVyLmdldENoYXJhY3RlckNvdW50KGNvbnRlbnQpO1xyXG4gICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XHJcbiAgICAgICAgICAgIGFkZFRvRGF0YU1hcChkYXRhTWFwLCB4VmFsdWUsIHF1ZXJ5LCBudW1DaGFycyk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGFyZ2V0ID09PSBcIm51bVNlbnRlbmNlc1wiKSB7XHJcbiAgICAgICAgICAgIGxldCBudW1TZW50ZW5jZXMgPSBoZWxwZXIuZ2V0U2VudGVuY2VDb3VudChjb250ZW50KTtcclxuICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xyXG4gICAgICAgICAgICBhZGRUb0RhdGFNYXAoZGF0YU1hcCwgeFZhbHVlLCBxdWVyeSwgbnVtU2VudGVuY2VzKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgPT09IFwibmFtZVwiKSB7XHJcbiAgICAgICAgICAgIGxldCB0YXJnZXRNZWFzdXJlID0gMC4wO1xyXG4gICAgICAgICAgICBsZXQgdGFyZ2V0RXhpc3QgPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IHJldFBhcnNlID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KFxyXG4gICAgICAgICAgICAgICAgZmlsZS5iYXNlbmFtZSxcclxuICAgICAgICAgICAgICAgIHJlbmRlckluZm8udGV4dFZhbHVlTWFwXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChyZXRQYXJzZS52YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHJldFBhcnNlLnR5cGUgPT09IFZhbHVlVHlwZS5UaW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0TWVhc3VyZSA9IHJldFBhcnNlLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRhcmdldEV4aXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBxdWVyeS52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuVGltZTtcclxuICAgICAgICAgICAgICAgICAgICBxdWVyeS5hZGROdW1UYXJnZXRzKCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgIXJlbmRlckluZm8uaWdub3JlWmVyb1ZhbHVlW3F1ZXJ5LmdldElkKCldIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldFBhcnNlLnZhbHVlICE9PSAwXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldE1lYXN1cmUgKz0gcmV0UGFyc2UudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEV4aXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnkuYWRkTnVtVGFyZ2V0cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHRhcmdldEV4aXN0KSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRhcmdldE1lYXN1cmU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBhZGRUb0RhdGFNYXAoZGF0YU1hcCwgeFZhbHVlLCBxdWVyeSwgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG59XHJcblxyXG4vLyBJbiBmb3JtICdrZXk6OnZhbHVlJywgbmFtZWQgZ3JvdXAgJ3ZhbHVlJyBmcm9tIHBsdWdpblxyXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tRHZGaWVsZChcclxuICAgIGNvbnRlbnQ6IHN0cmluZyxcclxuICAgIHF1ZXJ5OiBRdWVyeSxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBkYXRhTWFwOiBEYXRhTWFwLFxyXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXBcclxuKTogYm9vbGVhbiB7XHJcbiAgICBsZXQgZHZUYXJnZXQgPSBxdWVyeS5nZXRUYXJnZXQoKTtcclxuICAgIGlmIChxdWVyeS5nZXRQYXJlbnRUYXJnZXQoKSkge1xyXG4gICAgICAgIGR2VGFyZ2V0ID0gcXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCk7IC8vIHVzZSBwYXJlbnQgdGFnIG5hbWUgZm9yIG11bHRpcGxlIHZhbHVlc1xyXG4gICAgfVxyXG4gICAgLy8gRGF0YXZpZXcgYXNrIHVzZXIgdG8gYWRkIGRhc2hlcyBmb3Igc3BhY2VzIGFzIHNlYXJjaCB0YXJnZXRcclxuICAgIC8vIFNvIGEgZGFzaCBtYXkgc3RhbmRzIGZvciBhIHJlYWwgZGFzaCBvciBhIHNwYWNlXHJcbiAgICBkdlRhcmdldCA9IGR2VGFyZ2V0LnJlcGxhY2UoXCItXCIsIFwiW1xcXFxzXFxcXC1dXCIpO1xyXG5cclxuICAgIC8vIFRlc3QgdGhpcyBpbiBSZWdleDEwMVxyXG4gICAgLy8gcmVtZW1iZXIgJ1xccycgaW5jbHVkZXMgbmV3IGxpbmVcclxuICAgIC8vIChefCB8XFx0KVxcKnswLDJ9ZHZUYXJnZXRcXCp7MCwyfSg6OlsgfFxcdF0qKD88dmFsdWU+W1xcZFxcLlxcL1xcLVxcdyxAOyBcXHQ6XSopKShcXHI/XFxufFxccnwkKVxyXG4gICAgbGV0IHN0clJlZ2V4ID1cclxuICAgICAgICBcIihefCB8XFxcXHQpXFxcXCp7MCwyfVwiICtcclxuICAgICAgICBkdlRhcmdldCArXHJcbiAgICAgICAgXCJcXFxcKnswLDJ9KDo6WyB8XFxcXHRdKig/PHZhbHVlPltcXFxcZFxcXFwuXFxcXC9cXFxcLVxcXFx3LEA7IFxcXFx0Ol0qKSkoXFxcXHJcXFxcP1xcXFxufFxcXFxyfCQpXCI7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhzdHJSZWdleCk7XHJcblxyXG4gICAgcmV0dXJuIGV4dHJhY3REYXRhVXNpbmdSZWdleFdpdGhNdWx0aXBsZVZhbHVlcyhcclxuICAgICAgICBjb250ZW50LFxyXG4gICAgICAgIHN0clJlZ2V4LFxyXG4gICAgICAgIHF1ZXJ5LFxyXG4gICAgICAgIGRhdGFNYXAsXHJcbiAgICAgICAgeFZhbHVlTWFwLFxyXG4gICAgICAgIHJlbmRlckluZm9cclxuICAgICk7XHJcbn1cclxuXHJcbi8vIEluIGZvcm0gJ3JlZ2V4IHdpdGggdmFsdWUnLCBuYW1lIGdyb3VwICd2YWx1ZScgZnJvbSB1c2Vyc1xyXG5leHBvcnQgZnVuY3Rpb24gY29sbGVjdERhdGFGcm9tVGFzayhcclxuICAgIGNvbnRlbnQ6IHN0cmluZyxcclxuICAgIHF1ZXJ5OiBRdWVyeSxcclxuICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICBkYXRhTWFwOiBEYXRhTWFwLFxyXG4gICAgeFZhbHVlTWFwOiBYVmFsdWVNYXBcclxuKTogYm9vbGVhbiB7XHJcbiAgICAvLyBjb25zb2xlLmxvZyhcImNvbGxlY3REYXRhRnJvbVRhc2tcIik7XHJcbiAgICBsZXQgc2VhcmNoVHlwZSA9IHF1ZXJ5LmdldFR5cGUoKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHNlYXJjaFR5cGUpO1xyXG5cclxuICAgIGxldCBzdHJSZWdleCA9IHF1ZXJ5LmdldFRhcmdldCgpO1xyXG4gICAgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuVGFzaykge1xyXG4gICAgICAgIHN0clJlZ2V4ID0gXCJcXFxcW1tcXFxcc3hdXFxcXF1cXFxcc1wiICsgc3RyUmVnZXg7XHJcbiAgICB9IGVsc2UgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuVGFza0RvbmUpIHtcclxuICAgICAgICBzdHJSZWdleCA9IFwiXFxcXFt4XFxcXF1cXFxcc1wiICsgc3RyUmVnZXg7XHJcbiAgICB9IGVsc2UgaWYgKHNlYXJjaFR5cGUgPT09IFNlYXJjaFR5cGUuVGFza05vdERvbmUpIHtcclxuICAgICAgICBzdHJSZWdleCA9IFwiXFxcXFtcXFxcc1xcXFxdXFxcXHNcIiArIHN0clJlZ2V4O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgICAvLyBhbGxcclxuICAgICAgICBzdHJSZWdleCA9IFwiXFxcXFtbXFxcXHN4XVxcXFxdXFxcXHNcIiArIHN0clJlZ2V4O1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coc3RyUmVnZXgpO1xyXG5cclxuICAgIHJldHVybiBleHRyYWN0RGF0YVVzaW5nUmVnZXhXaXRoTXVsdGlwbGVWYWx1ZXMoXHJcbiAgICAgICAgY29udGVudCxcclxuICAgICAgICBzdHJSZWdleCxcclxuICAgICAgICBxdWVyeSxcclxuICAgICAgICBkYXRhTWFwLFxyXG4gICAgICAgIHhWYWx1ZU1hcCxcclxuICAgICAgICByZW5kZXJJbmZvXHJcbiAgICApO1xyXG59XHJcbiIsImltcG9ydCB7IEFwcCwgUGx1Z2luU2V0dGluZ1RhYiwgU2V0dGluZyB9IGZyb20gXCJvYnNpZGlhblwiO1xyXG5pbXBvcnQgVHJhY2tlciBmcm9tIFwiLi9tYWluXCI7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFRyYWNrZXJTZXR0aW5ncyB7XHJcbiAgICBmb2xkZXI6IHN0cmluZztcclxuICAgIGRhdGVGb3JtYXQ6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IERFRkFVTFRfU0VUVElOR1M6IFRyYWNrZXJTZXR0aW5ncyA9IHtcclxuICAgIGZvbGRlcjogXCIvXCIsXHJcbiAgICBkYXRlRm9ybWF0OiBcIllZWVktTU0tRERcIixcclxufTtcclxuXHJcbmV4cG9ydCBjbGFzcyBUcmFja2VyU2V0dGluZ1RhYiBleHRlbmRzIFBsdWdpblNldHRpbmdUYWIge1xyXG4gICAgcGx1Z2luOiBUcmFja2VyO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKGFwcDogQXBwLCBwbHVnaW46IFRyYWNrZXIpIHtcclxuICAgICAgICBzdXBlcihhcHAsIHBsdWdpbik7XHJcbiAgICAgICAgdGhpcy5wbHVnaW4gPSBwbHVnaW47XHJcbiAgICB9XHJcblxyXG4gICAgZGlzcGxheSgpOiB2b2lkIHtcclxuICAgICAgICBsZXQgeyBjb250YWluZXJFbCB9ID0gdGhpcztcclxuXHJcbiAgICAgICAgY29udGFpbmVyRWwuZW1wdHkoKTtcclxuXHJcbiAgICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRGVmYXVsdCBmb2xkZXIgbG9jYXRpb25cIilcclxuICAgICAgICAgICAgLnNldERlc2MoXHJcbiAgICAgICAgICAgICAgICBcIkZpbGVzIGluIHRoaXMgZm9sZGVyIHdpbGwgYmUgcGFyc2VkIGFuZCB1c2VkIGFzIGlucHV0IGRhdGEgb2YgdGhlIHRyYWNrZXIgcGx1Z2luLlxcbllvdSBjYW4gYWxzbyBvdmVycmlkZSBpdCB1c2luZyAnZm9sZGVyJyBhcmd1bWVudCBpbiB0aGUgdHJhY2tlciBjb2RlYmxvY2suXCJcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAuYWRkVGV4dCgodGV4dCkgPT5cclxuICAgICAgICAgICAgICAgIHRleHRcclxuICAgICAgICAgICAgICAgICAgICAuc2V0UGxhY2Vob2xkZXIoXCJGb2xkZXIgUGF0aFwiKVxyXG4gICAgICAgICAgICAgICAgICAgIC5zZXRWYWx1ZSh0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXIpXHJcbiAgICAgICAgICAgICAgICAgICAgLm9uQ2hhbmdlKGFzeW5jICh2YWx1ZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbi5zZXR0aW5ncy5mb2xkZXIgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgbmV3IFNldHRpbmcoY29udGFpbmVyRWwpXHJcbiAgICAgICAgICAgIC5zZXROYW1lKFwiRGVmYXVsdCBkYXRlIGZvcm1hdFwiKVxyXG4gICAgICAgICAgICAuc2V0RGVzYyhcclxuICAgICAgICAgICAgICAgIFwiVGhpcyBmb3JtYXQgaXMgdXNlZCB0byBwYXJzZSB0aGUgZGF0ZSBpbiB5b3VyIGRpYXJ5IHRpdGxlLlxcbllvdSBjYW4gYWxzbyBvdmVycmlkZSBpdCB1c2luZyAnZGF0ZS1mb3JtYXQnIGFyZ3VtZW50IGluIHRoZSB0cmFja2VyIGNvZGVibG9jay5cIlxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICAgIC5hZGRUZXh0KCh0ZXh0KSA9PlxyXG4gICAgICAgICAgICAgICAgdGV4dFxyXG4gICAgICAgICAgICAgICAgICAgIC5zZXRQbGFjZWhvbGRlcihcIllZWVktTU0tRERcIilcclxuICAgICAgICAgICAgICAgICAgICAuc2V0VmFsdWUodGhpcy5wbHVnaW4uc2V0dGluZ3MuZGF0ZUZvcm1hdClcclxuICAgICAgICAgICAgICAgICAgICAub25DaGFuZ2UoYXN5bmMgKHZhbHVlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luLnNldHRpbmdzLmRhdGVGb3JtYXQgPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wbHVnaW4uc2F2ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgIH1cclxufVxyXG4iLCJpbXBvcnQgeyBBcHAsIENhY2hlZE1ldGFkYXRhLCBnZXRMaW5rcGF0aCwgUGx1Z2luIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHQsIE1hcmtkb3duVmlldywgRWRpdG9yIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCB7IFRGaWxlLCBURm9sZGVyLCBub3JtYWxpemVQYXRoIH0gZnJvbSBcIm9ic2lkaWFuXCI7XHJcbmltcG9ydCAqIGFzIHJlbmRlcmluZyBmcm9tIFwiLi9yZW5kZXJpbmdcIjtcclxuaW1wb3J0IHsgZ2V0UmVuZGVySW5mb0Zyb21ZYW1sIH0gZnJvbSBcIi4vcGFyc2luZ1wiO1xyXG5pbXBvcnQge1xyXG4gICAgRGF0YXNldHMsXHJcbiAgICBRdWVyeSxcclxuICAgIFF1ZXJ5VmFsdWVQYWlyLFxyXG4gICAgR3JhcGhUeXBlLFxyXG4gICAgU2VhcmNoVHlwZSxcclxuICAgIFRhYmxlRGF0YSxcclxuICAgIFJlbmRlckluZm8sXHJcbiAgICBYVmFsdWVNYXAsXHJcbiAgICBEYXRhTWFwLFxyXG4gICAgQ3VzdG9tRGF0YXNldEluZm8sXHJcbiAgICBDb2xsZWN0aW5nUHJvY2Vzc0luZm8sXHJcbiAgICBWYWx1ZVR5cGUsXHJcbn0gZnJvbSBcIi4vZGF0YVwiO1xyXG5pbXBvcnQgKiBhcyBjb2xsZWN0aW5nIGZyb20gXCIuL2NvbGxlY3RpbmdcIjtcclxuaW1wb3J0IHtcclxuICAgIFRyYWNrZXJTZXR0aW5ncyxcclxuICAgIERFRkFVTFRfU0VUVElOR1MsXHJcbiAgICBUcmFja2VyU2V0dGluZ1RhYixcclxufSBmcm9tIFwiLi9zZXR0aW5nc1wiO1xyXG5pbXBvcnQgKiBhcyBoZWxwZXIgZnJvbSBcIi4vaGVscGVyXCI7XHJcbmltcG9ydCB7IE1vbWVudCB9IGZyb20gXCJtb21lbnRcIjtcclxuLy8gaW1wb3J0IHsgZ2V0RGFpbHlOb3RlU2V0dGluZ3MgfSBmcm9tIFwib2JzaWRpYW4tZGFpbHktbm90ZXMtaW50ZXJmYWNlXCI7XHJcblxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgICBpbnRlcmZhY2UgV2luZG93IHtcclxuICAgICAgICBhcHA6IEFwcDtcclxuICAgICAgICBtb21lbnQ6ICgpID0+IE1vbWVudDtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVHJhY2tlciBleHRlbmRzIFBsdWdpbiB7XHJcbiAgICBzZXR0aW5nczogVHJhY2tlclNldHRpbmdzO1xyXG5cclxuICAgIGFzeW5jIG9ubG9hZCgpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhcImxvYWRpbmcgb2JzaWRpYW4tdHJhY2tlciBwbHVnaW5cIik7XHJcblxyXG4gICAgICAgIGF3YWl0IHRoaXMubG9hZFNldHRpbmdzKCk7XHJcblxyXG4gICAgICAgIHRoaXMuYWRkU2V0dGluZ1RhYihuZXcgVHJhY2tlclNldHRpbmdUYWIodGhpcy5hcHAsIHRoaXMpKTtcclxuXHJcbiAgICAgICAgdGhpcy5yZWdpc3Rlck1hcmtkb3duQ29kZUJsb2NrUHJvY2Vzc29yKFxyXG4gICAgICAgICAgICBcInRyYWNrZXJcIixcclxuICAgICAgICAgICAgdGhpcy5wb3N0cHJvY2Vzc29yLmJpbmQodGhpcylcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICAgICAgICBpZDogXCJhZGQtbGluZS1jaGFydC10cmFja2VyXCIsXHJcbiAgICAgICAgICAgIG5hbWU6IFwiQWRkIExpbmUgQ2hhcnQgVHJhY2tlclwiLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogKCkgPT4gdGhpcy5hZGRDb2RlQmxvY2soR3JhcGhUeXBlLkxpbmUpLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICAgICAgICBpZDogXCJhZGQtYmFyLWNoYXJ0LXRyYWNrZXJcIixcclxuICAgICAgICAgICAgbmFtZTogXCJBZGQgQmFyIENoYXJ0IFRyYWNrZXJcIixcclxuICAgICAgICAgICAgY2FsbGJhY2s6ICgpID0+IHRoaXMuYWRkQ29kZUJsb2NrKEdyYXBoVHlwZS5CYXIpLFxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLmFkZENvbW1hbmQoe1xyXG4gICAgICAgICAgICBpZDogXCJhZGQtc3VtbWFyeS10cmFja2VyXCIsXHJcbiAgICAgICAgICAgIG5hbWU6IFwiQWRkIFN1bW1hcnkgVHJhY2tlclwiLFxyXG4gICAgICAgICAgICBjYWxsYmFjazogKCkgPT4gdGhpcy5hZGRDb2RlQmxvY2soR3JhcGhUeXBlLlN1bW1hcnkpLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvYWRTZXR0aW5ncygpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihcclxuICAgICAgICAgICAge30sXHJcbiAgICAgICAgICAgIERFRkFVTFRfU0VUVElOR1MsXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZERhdGEoKVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2F2ZVNldHRpbmdzKCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2F2ZURhdGEodGhpcy5zZXR0aW5ncyk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyRXJyb3JNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZywgY2FudmFzOiBIVE1MRWxlbWVudCwgZWw6IEhUTUxFbGVtZW50KSB7XHJcbiAgICAgICAgcmVuZGVyaW5nLnJlbmRlckVycm9yTWVzc2FnZShjYW52YXMsIG1lc3NhZ2UpO1xyXG4gICAgICAgIGVsLmFwcGVuZENoaWxkKGNhbnZhcyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIG9udW5sb2FkKCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwidW5sb2FkaW5nIG9ic2lkaWFuLXRyYWNrZXIgcGx1Z2luXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEZpbGVzSW5Gb2xkZXIoXHJcbiAgICAgICAgZm9sZGVyOiBURm9sZGVyLFxyXG4gICAgICAgIGluY2x1ZGVTdWJGb2xkZXJzOiBib29sZWFuID0gdHJ1ZVxyXG4gICAgKTogVEZpbGVbXSB7XHJcbiAgICAgICAgbGV0IGZpbGVzOiBURmlsZVtdID0gW107XHJcblxyXG4gICAgICAgIGZvciAobGV0IGl0ZW0gb2YgZm9sZGVyLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtLmV4dGVuc2lvbiA9PT0gXCJtZFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZXMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtIGluc3RhbmNlb2YgVEZvbGRlciAmJiBpbmNsdWRlU3ViRm9sZGVycykge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbGVzID0gZmlsZXMuY29uY2F0KHRoaXMuZ2V0RmlsZXNJbkZvbGRlcihpdGVtKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmaWxlcztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRGaWxlcyhcclxuICAgICAgICBmaWxlczogVEZpbGVbXSxcclxuICAgICAgICByZW5kZXJJbmZvOiBSZW5kZXJJbmZvLFxyXG4gICAgICAgIGluY2x1ZGVTdWJGb2xkZXJzOiBib29sZWFuID0gdHJ1ZVxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKCFmaWxlcykgcmV0dXJuO1xyXG5cclxuICAgICAgICBsZXQgZm9sZGVyVG9TZWFyY2ggPSByZW5kZXJJbmZvLmZvbGRlcjtcclxuICAgICAgICBsZXQgdXNlU3BlY2lmaWVkRmlsZXNPbmx5ID0gcmVuZGVySW5mby5zcGVjaWZpZWRGaWxlc09ubHk7XHJcbiAgICAgICAgbGV0IHNwZWNpZmllZEZpbGVzID0gcmVuZGVySW5mby5maWxlO1xyXG4gICAgICAgIGxldCBmaWxlc0NvbnRhaW5zTGlua2VkRmlsZXMgPSByZW5kZXJJbmZvLmZpbGVDb250YWluc0xpbmtlZEZpbGVzO1xyXG4gICAgICAgIGxldCBmaWxlTXVsdGlwbGllckFmdGVyTGluayA9IHJlbmRlckluZm8uZmlsZU11bHRpcGxpZXJBZnRlckxpbms7XHJcblxyXG4gICAgICAgIC8vIEluY2x1ZGUgZmlsZXMgaW4gZm9sZGVyXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codXNlU3BlY2lmaWVkRmlsZXNPbmx5KTtcclxuICAgICAgICBpZiAoIXVzZVNwZWNpZmllZEZpbGVzT25seSkge1xyXG4gICAgICAgICAgICBsZXQgZm9sZGVyID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKFxyXG4gICAgICAgICAgICAgICAgbm9ybWFsaXplUGF0aChmb2xkZXJUb1NlYXJjaClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGZvbGRlciAmJiBmb2xkZXIgaW5zdGFuY2VvZiBURm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgZm9sZGVyRmlsZXMgPSB0aGlzLmdldEZpbGVzSW5Gb2xkZXIoZm9sZGVyKTtcclxuICAgICAgICAgICAgICAgIGZvciAobGV0IGZpbGUgb2YgZm9sZGVyRmlsZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBJbmNsdWRlIHNwZWNpZmllZCBmaWxlXHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coc3BlY2lmaWVkRmlsZXMpO1xyXG4gICAgICAgIGZvciAobGV0IGZpbGVQYXRoIG9mIHNwZWNpZmllZEZpbGVzKSB7XHJcbiAgICAgICAgICAgIGxldCBwYXRoID0gZmlsZVBhdGg7XHJcbiAgICAgICAgICAgIGlmICghcGF0aC5lbmRzV2l0aChcIi5tZFwiKSkge1xyXG4gICAgICAgICAgICAgICAgcGF0aCArPSBcIi5tZFwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhdGggPSBub3JtYWxpemVQYXRoKHBhdGgpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhwYXRoKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBmaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKHBhdGgpO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhmaWxlKTtcclxuICAgICAgICAgICAgaWYgKGZpbGUgJiYgZmlsZSBpbnN0YW5jZW9mIFRGaWxlKSB7XHJcbiAgICAgICAgICAgICAgICBmaWxlcy5wdXNoKGZpbGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbGVzKTtcclxuXHJcbiAgICAgICAgLy8gSW5jbHVkZSBmaWxlcyBpbiBwb2ludGVkIGJ5IGxpbmtzIGluIGZpbGVcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmaWxlc0NvbnRhaW5zTGlua2VkRmlsZXMpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rKTtcclxuICAgICAgICBsZXQgbGlua2VkRmlsZU11bHRpcGxpZXIgPSAxO1xyXG4gICAgICAgIGxldCBzZWFyY2hGaWxlTXVsdGlmcGllckFmdGVyTGluayA9IHRydWU7XHJcbiAgICAgICAgaWYgKGZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rID09PSBcIlwiKSB7XHJcbiAgICAgICAgICAgIHNlYXJjaEZpbGVNdWx0aWZwaWVyQWZ0ZXJMaW5rID0gZmFsc2U7XHJcbiAgICAgICAgfSBlbHNlIGlmICgvXlswLTldKyQvLnRlc3QoZmlsZU11bHRpcGxpZXJBZnRlckxpbmspKSB7XHJcbiAgICAgICAgICAgIC8vIGludGVnZXJcclxuICAgICAgICAgICAgbGlua2VkRmlsZU11bHRpcGxpZXIgPSBwYXJzZUZsb2F0KGZpbGVNdWx0aXBsaWVyQWZ0ZXJMaW5rKTtcclxuICAgICAgICAgICAgc2VhcmNoRmlsZU11bHRpZnBpZXJBZnRlckxpbmsgPSBmYWxzZTtcclxuICAgICAgICB9IGVsc2UgaWYgKCEvXFw/PHZhbHVlPi8udGVzdChmaWxlTXVsdGlwbGllckFmdGVyTGluaykpIHtcclxuICAgICAgICAgICAgLy8gbm8gJ3ZhbHVlJyBuYW1lZCBncm91cFxyXG4gICAgICAgICAgICBzZWFyY2hGaWxlTXVsdGlmcGllckFmdGVyTGluayA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IgKGxldCBmaWxlUGF0aCBvZiBmaWxlc0NvbnRhaW5zTGlua2VkRmlsZXMpIHtcclxuICAgICAgICAgICAgaWYgKCFmaWxlUGF0aC5lbmRzV2l0aChcIi5tZFwiKSkge1xyXG4gICAgICAgICAgICAgICAgZmlsZVBhdGggKz0gXCIubWRcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgZmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChcclxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZVBhdGgoZmlsZVBhdGgpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChmaWxlICYmIGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xyXG4gICAgICAgICAgICAgICAgLy8gR2V0IGxpbmtlZCBmaWxlc1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpbGVDYWNoZSA9IHRoaXMuYXBwLm1ldGFkYXRhQ2FjaGUuZ2V0RmlsZUNhY2hlKGZpbGUpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpbGVDb250ZW50ID0gYXdhaXQgdGhpcy5hcHAudmF1bHQuYWRhcHRlci5yZWFkKGZpbGUucGF0aCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgbGluZXMgPSBmaWxlQ29udGVudC5zcGxpdChcclxuICAgICAgICAgICAgICAgICAgICAvXFxyXFxufFtcXG5cXHZcXGZcXHJcXHg4NVxcdTIwMjhcXHUyMDI5XS9cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFmaWxlQ2FjaGU/LmxpbmtzKSBjb250aW51ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBsaW5rIG9mIGZpbGVDYWNoZS5saW5rcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbGluaykgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGxpbmtlZEZpbGUgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFwcC5tZXRhZGF0YUNhY2hlLmdldEZpcnN0TGlua3BhdGhEZXN0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluay5saW5rLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZVBhdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobGlua2VkRmlsZSAmJiBsaW5rZWRGaWxlIGluc3RhbmNlb2YgVEZpbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlYXJjaEZpbGVNdWx0aWZwaWVyQWZ0ZXJMaW5rKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIGxpbmUgb2YgbGluayBpbiBmaWxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbGluZU51bWJlciA9IGxpbmsucG9zaXRpb24uZW5kLmxpbmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhsaW5lTnVtYmVyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaW5lTnVtYmVyID49IDAgJiYgbGluZU51bWJlciA8IGxpbmVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBsaW5lID0gbGluZXNbbGluZU51bWJlcl07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobGluZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRyeSBleHRyYWN0IG11bHRpcGxpZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZiAobGluay5wb3NpdGlvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3BsaXR0ZWQgPSBsaW5lLnNwbGl0KGxpbmsub3JpZ2luYWwpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHNwbGl0dGVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BsaXR0ZWQubGVuZ3RoID09PSAyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0b1BhcnNlID0gc3BsaXR0ZWRbMV0udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RyUmVnZXggPSBmaWxlTXVsdGlwbGllckFmdGVyTGluaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJSZWdleCwgXCJnbVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG1hdGNoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKG1hdGNoID0gcmVnZXguZXhlYyh0b1BhcnNlKSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKG1hdGNoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgbWF0Y2guZ3JvdXBzICE9PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInVuZGVmaW5lZFwiICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW9mIG1hdGNoLmdyb3Vwcy52YWx1ZSAhPT1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJ1bmRlZmluZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbXVzdCBoYXZlIGdyb3VwIG5hbWUgJ3ZhbHVlJ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXRQYXJzZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5wYXJzZUZsb2F0RnJvbUFueShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoLmdyb3Vwcy52YWx1ZS50cmltKCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLnRleHRWYWx1ZU1hcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRQYXJzZS52YWx1ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5rZWRGaWxlTXVsdGlwbGllciA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRQYXJzZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxpbmtlZEZpbGVNdWx0aXBsaWVyOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVzLnB1c2gobGlua2VkRmlsZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbGVzKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBwb3N0cHJvY2Vzc29yKFxyXG4gICAgICAgIHNvdXJjZTogc3RyaW5nLFxyXG4gICAgICAgIGVsOiBIVE1MRWxlbWVudCxcclxuICAgICAgICBjdHg6IE1hcmtkb3duUG9zdFByb2Nlc3NvckNvbnRleHRcclxuICAgICkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwicG9zdHByb2Nlc3NcIik7XHJcbiAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtcclxuXHJcbiAgICAgICAgbGV0IHlhbWxUZXh0ID0gc291cmNlLnRyaW0oKTtcclxuICAgICAgICBsZXQgcmV0UmVuZGVySW5mbyA9IGdldFJlbmRlckluZm9Gcm9tWWFtbCh5YW1sVGV4dCwgdGhpcyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXRSZW5kZXJJbmZvID09PSBcInN0cmluZ1wiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9yTWVzc2FnZShyZXRSZW5kZXJJbmZvLCBjYW52YXMsIGVsKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IHJlbmRlckluZm8gPSByZXRSZW5kZXJJbmZvIGFzIFJlbmRlckluZm87XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mbyk7XHJcblxyXG4gICAgICAgIC8vIEdldCBmaWxlc1xyXG4gICAgICAgIGxldCBmaWxlczogVEZpbGVbXSA9IFtdO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZ2V0RmlsZXMoZmlsZXMsIHJlbmRlckluZm8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRXJyb3JNZXNzYWdlKGUubWVzc2FnZSwgY2FudmFzLCBlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChmaWxlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRXJyb3JNZXNzYWdlKFxyXG4gICAgICAgICAgICAgICAgXCJObyBtYXJrZG93biBmaWxlcyBmb3VuZCBpbiBmb2xkZXJcIixcclxuICAgICAgICAgICAgICAgIGNhbnZhcyxcclxuICAgICAgICAgICAgICAgIGVsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbGVzKTtcclxuXHJcbiAgICAgICAgLy8gbGV0IGRhaWx5Tm90ZXNTZXR0aW5ncyA9IGdldERhaWx5Tm90ZVNldHRpbmdzKCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coZGFpbHlOb3Rlc1NldHRpbmdzKTtcclxuICAgICAgICAvLyBJIGFsd2F5cyBnb3QgWVlZWS1NTS1ERCBmcm9tIGRhaWx5Tm90ZXNTZXR0aW5ncy5mb3JtYXRcclxuICAgICAgICAvLyBVc2Ugb3duIHNldHRpbmdzIHBhbmVsIGZvciBub3dcclxuXHJcbiAgICAgICAgLy8gQ29sbGVjdGluZyBkYXRhIHRvIGRhdGFNYXAgZmlyc3RcclxuICAgICAgICBsZXQgZGF0YU1hcDogRGF0YU1hcCA9IG5ldyBNYXAoKTsgLy8ge3N0ckRhdGU6IFtxdWVyeTogdmFsdWUsIC4uLl19XHJcbiAgICAgICAgbGV0IHByb2Nlc3NJbmZvID0gbmV3IENvbGxlY3RpbmdQcm9jZXNzSW5mbygpO1xyXG4gICAgICAgIHByb2Nlc3NJbmZvLmZpbGVUb3RhbCA9IGZpbGVzLmxlbmd0aDtcclxuXHJcbiAgICAgICAgLy8gQ29sbGVjdCBkYXRhIGZyb20gZmlsZXMsIGVhY2ggZmlsZSBoYXMgb25lIGRhdGEgcG9pbnQgZm9yIGVhY2ggcXVlcnlcclxuICAgICAgICBjb25zdCBsb29wRmlsZVByb21pc2VzID0gZmlsZXMubWFwKGFzeW5jIChmaWxlKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGZpbGUuYmFzZW5hbWUpO1xyXG4gICAgICAgICAgICAvLyBHZXQgZmlsZUNhY2hlIGFuZCBjb250ZW50XHJcbiAgICAgICAgICAgIGxldCBmaWxlQ2FjaGU6IENhY2hlZE1ldGFkYXRhID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IG5lZWRGaWxlQ2FjaGUgPSByZW5kZXJJbmZvLnF1ZXJpZXMuc29tZSgocSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHR5cGUgPSBxLmdldFR5cGUoKTtcclxuICAgICAgICAgICAgICAgIGxldCB0YXJnZXQgPSBxLmdldFRhcmdldCgpO1xyXG4gICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFNlYXJjaFR5cGUuRnJvbnRtYXR0ZXIgfHxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlID09PSBTZWFyY2hUeXBlLlRhZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFNlYXJjaFR5cGUuV2lraSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPT09IFNlYXJjaFR5cGUuV2lraUxpbmsgfHxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlID09PSBTZWFyY2hUeXBlLldpa2lEaXNwbGF5XHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmIChuZWVkRmlsZUNhY2hlKSB7XHJcbiAgICAgICAgICAgICAgICBmaWxlQ2FjaGUgPSB0aGlzLmFwcC5tZXRhZGF0YUNhY2hlLmdldEZpbGVDYWNoZShmaWxlKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGNvbnRlbnQ6IHN0cmluZyA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCBuZWVkQ29udGVudCA9IHJlbmRlckluZm8ucXVlcmllcy5zb21lKChxKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdHlwZSA9IHEuZ2V0VHlwZSgpO1xyXG4gICAgICAgICAgICAgICAgbGV0IHRhcmdldCA9IHEuZ2V0VGFyZ2V0KCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gU2VhcmNoVHlwZS5UYWcgfHxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlID09PSBTZWFyY2hUeXBlLlRleHQgfHxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlID09PSBTZWFyY2hUeXBlLmR2RmllbGQgfHxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlID09PSBTZWFyY2hUeXBlLlRhc2sgfHxcclxuICAgICAgICAgICAgICAgICAgICB0eXBlID09PSBTZWFyY2hUeXBlLlRhc2tEb25lIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9PT0gU2VhcmNoVHlwZS5UYXNrTm90RG9uZVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT09IFNlYXJjaFR5cGUuRmlsZU1ldGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9PT0gXCJudW1Xb3Jkc1wiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9PT0gXCJudW1DaGFyc1wiIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldCA9PT0gXCJudW1TZW50ZW5jZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAobmVlZENvbnRlbnQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBhd2FpdCB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLnJlYWQoZmlsZS5wYXRoKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gR2V0IHhWYWx1ZSBhbmQgYWRkIGl0IGludG8geFZhbHVlTWFwIGZvciBsYXRlciB1c2VcclxuICAgICAgICAgICAgbGV0IHhWYWx1ZU1hcDogWFZhbHVlTWFwID0gbmV3IE1hcCgpOyAvLyBxdWVyeUlkOiB4VmFsdWUgZm9yIHRoaXMgZmlsZVxyXG4gICAgICAgICAgICBsZXQgc2tpcFRoaXNGaWxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8ueERhdGFzZXQpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCB4RGF0YXNldElkIG9mIHJlbmRlckluZm8ueERhdGFzZXQpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGB4RGF0YXNldElkOiAke3hEYXRhc2V0SWR9YCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXhWYWx1ZU1hcC5oYXMoeERhdGFzZXRJZCkpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgeERhdGUgPSB3aW5kb3cubW9tZW50KFwiXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4RGF0YXNldElkID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWZhdWx0IHVzaW5nIGRhdGUgaW4gZmlsZW5hbWUgYXMgeFZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRlID0gY29sbGVjdGluZy5nZXREYXRlRnJvbUZpbGVuYW1lKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coeERhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB4RGF0YXNldFF1ZXJ5ID0gcmVuZGVySW5mby5xdWVyaWVzW3hEYXRhc2V0SWRdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh4RGF0YXNldFF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh4RGF0YXNldFF1ZXJ5LmdldFR5cGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTZWFyY2hUeXBlLkZyb250bWF0dGVyOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRlID0gY29sbGVjdGluZy5nZXREYXRlRnJvbUZyb250bWF0dGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlQ2FjaGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRhc2V0UXVlcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTZWFyY2hUeXBlLlRhZzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0ZSA9IGNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21UYWcoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhEYXRhc2V0UXVlcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBTZWFyY2hUeXBlLlRleHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeERhdGUgPSBjb2xsZWN0aW5nLmdldERhdGVGcm9tVGV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeERhdGFzZXRRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNlYXJjaFR5cGUuZHZGaWVsZDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0ZSA9IGNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21EdkZpZWxkKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0YXNldFF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2VhcmNoVHlwZS5GaWxlTWV0YTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0ZSA9IGNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21GaWxlTWV0YShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeERhdGFzZXRRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFNlYXJjaFR5cGUuVGFzazpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2VhcmNoVHlwZS5UYXNrRG9uZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgU2VhcmNoVHlwZS5UYXNrTm90RG9uZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0ZSA9IGNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21UYXNrKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4RGF0YXNldFF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF4RGF0ZS5pc1ZhbGlkKCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJJbnZhbGlkIHhEYXRlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBza2lwVGhpc0ZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5maWxlTm90SW5Gb3JtYXQrKztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImZpbGUgXCIgKyBmaWxlLmJhc2VuYW1lICsgXCIgYWNjZXB0ZWRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW5kZXJJbmZvLnN0YXJ0RGF0ZSAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRlIDwgcmVuZGVySW5mby5zdGFydERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBza2lwVGhpc0ZpbGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmZpbGVPdXRPZkRhdGVSYW5nZSsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW5kZXJJbmZvLmVuZERhdGUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4RGF0ZSA+IHJlbmRlckluZm8uZW5kRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNraXBUaGlzRmlsZSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZmlsZU91dE9mRGF0ZVJhbmdlKys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghc2tpcFRoaXNGaWxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWFZhbHVlIHx8PSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVNYXAuc2V0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeERhdGFzZXRJZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5kYXRlVG9TdHIoeERhdGUsIHJlbmRlckluZm8uZGF0ZUZvcm1hdClcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZmlsZUF2YWlsYWJsZSsrO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gR2V0IG1pbi9tYXggZGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvY2Vzc0luZm8uZmlsZUF2YWlsYWJsZSA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5taW5EYXRlID0geERhdGUuY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLm1heERhdGUgPSB4RGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRlIDwgcHJvY2Vzc0luZm8ubWluRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLm1pbkRhdGUgPSB4RGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHhEYXRlID4gcHJvY2Vzc0luZm8ubWF4RGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLm1heERhdGUgPSB4RGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChza2lwVGhpc0ZpbGUpIHJldHVybjtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coeFZhbHVlTWFwKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYG1pbkRhdGU6ICR7bWluRGF0ZX1gKTtcclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coYG1heERhdGU6ICR7bWF4RGF0ZX1gKTtcclxuXHJcbiAgICAgICAgICAgIC8vIExvb3Agb3ZlciBxdWVyaWVzXHJcbiAgICAgICAgICAgIGxldCB5RGF0YXNldFF1ZXJpZXMgPSByZW5kZXJJbmZvLnF1ZXJpZXMuZmlsdGVyKChxKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcS5nZXRUeXBlKCkgIT09IFNlYXJjaFR5cGUuVGFibGUgJiYgIXEudXNlZEFzWERhdGFzZXQ7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh5RGF0YXNldFF1ZXJpZXMpO1xyXG5cclxuICAgICAgICAgICAgY29uc3QgbG9vcFF1ZXJ5UHJvbWlzZXMgPSB5RGF0YXNldFF1ZXJpZXMubWFwKGFzeW5jIChxdWVyeSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgLy8gR2V0IHhWYWx1ZSBmcm9tIGZpbGUgaWYgeERhdGFzZXQgYXNzaWduZWRcclxuICAgICAgICAgICAgICAgIC8vIGlmIChyZW5kZXJJbmZvLnhEYXRhc2V0ICE9PSBudWxsKVxyXG4gICAgICAgICAgICAgICAgLy8gbGV0IHhEYXRhc2V0SWQgPSByZW5kZXJJbmZvLnhEYXRhc2V0O1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocXVlcnkpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU2VhcmNoIGZyb250bWF0dGVyIHRhZ3NcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoZmlsZUNhY2hlICYmIHF1ZXJ5LmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5UYWcpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBBZGQgZnJvbnRtYXR0ZXIgdGFncywgYWxsb3cgc2ltcGxlIHRhZyBvbmx5XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdvdEFueVZhbHVlID0gY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21Gcm9udG1hdHRlclRhZyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZUNhY2hlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlTWFwXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5nb3RBbnlWYWxpZFlWYWx1ZSB8fD0gZ290QW55VmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9IC8vIFNlYXJjaCBmcm9udG1hdHRlciB0YWdzXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJTZWFyY2ggZnJvbnRtYXR0ZXIga2V5c1wiKTtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBmaWxlQ2FjaGUgJiZcclxuICAgICAgICAgICAgICAgICAgICBxdWVyeS5nZXRUeXBlKCkgPT09IFNlYXJjaFR5cGUuRnJvbnRtYXR0ZXIgJiZcclxuICAgICAgICAgICAgICAgICAgICBxdWVyeS5nZXRUYXJnZXQoKSAhPT0gXCJ0YWdzXCJcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBnb3RBbnlWYWx1ZSA9IGNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tRnJvbnRtYXR0ZXJLZXkoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVDYWNoZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFNYXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZU1hcFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRZVmFsdWUgfHw9IGdvdEFueVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSAvLyBjb25zb2xlLmxvZyhcIlNlYXJjaCBmcm9udG1hdHRlciBrZXlzXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU2VhcmNoIHdpa2kgbGlua3NcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsZUNhY2hlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKHF1ZXJ5LmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5XaWtpIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5XaWtpTGluayB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5nZXRUeXBlKCkgPT09IFNlYXJjaFR5cGUuV2lraURpc3BsYXkpXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZ290QW55VmFsdWUgPSBjb2xsZWN0aW5nLmNvbGxlY3REYXRhRnJvbVdpa2koXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVDYWNoZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFNYXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZU1hcFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRZVmFsdWUgfHw9IGdvdEFueVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU2VhcmNoIGlubGluZSB0YWdzXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRlbnQgJiYgcXVlcnkuZ2V0VHlwZSgpID09PSBTZWFyY2hUeXBlLlRhZykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBnb3RBbnlWYWx1ZSA9IGNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tSW5saW5lVGFnKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlTWFwXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5nb3RBbnlWYWxpZFlWYWx1ZSB8fD0gZ290QW55VmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9IC8vIFNlYXJjaCBpbmxpbmUgdGFnc1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU2VhcmNoIFRleHRcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29udGVudCAmJiBxdWVyeS5nZXRUeXBlKCkgPT09IFNlYXJjaFR5cGUuVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBnb3RBbnlWYWx1ZSA9IGNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tVGV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcXVlcnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFNYXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZU1hcFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRZVmFsdWUgfHw9IGdvdEFueVZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfSAvLyBTZWFyY2ggdGV4dFxyXG5cclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU2VhcmNoIEZpbGVNZXRhXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5LmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5GaWxlTWV0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBnb3RBbnlWYWx1ZSA9IGNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tRmlsZU1ldGEoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTWFwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVNYXBcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWVZhbHVlIHx8PSBnb3RBbnlWYWx1ZTtcclxuICAgICAgICAgICAgICAgIH0gLy8gU2VhcmNoIEZpbGVNZXRhXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJTZWFyY2ggZHZGaWVsZFwiKTtcclxuICAgICAgICAgICAgICAgIGlmIChjb250ZW50ICYmIHF1ZXJ5LmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5kdkZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGdvdEFueVZhbHVlID0gY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21EdkZpZWxkKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mbyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlTWFwXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5nb3RBbnlWYWxpZFlWYWx1ZSB8fD0gZ290QW55VmFsdWU7XHJcbiAgICAgICAgICAgICAgICB9IC8vIHNlYXJjaCBkdkZpZWxkXHJcblxyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJTZWFyY2ggVGFza1wiKTtcclxuICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50ICYmXHJcbiAgICAgICAgICAgICAgICAgICAgKHF1ZXJ5LmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5UYXNrIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5UYXNrRG9uZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeS5nZXRUeXBlKCkgPT09IFNlYXJjaFR5cGUuVGFza05vdERvbmUpXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZ290QW55VmFsdWUgPSBjb2xsZWN0aW5nLmNvbGxlY3REYXRhRnJvbVRhc2soXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhTWFwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVNYXBcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWVZhbHVlIHx8PSBnb3RBbnlWYWx1ZTtcclxuICAgICAgICAgICAgICAgIH0gLy8gc2VhcmNoIFRhc2tcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKGxvb3BRdWVyeVByb21pc2VzKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChsb29wRmlsZVByb21pc2VzKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhkYXRhTWFwKTtcclxuXHJcbiAgICAgICAgLy8gQ29sbGVjdCBkYXRhIGZyb20gYSBmaWxlLCBvbmUgZmlsZSBjb250YWlucyBmdWxsIGRhdGFzZXRcclxuICAgICAgICBhd2FpdCB0aGlzLmNvbGxlY3REYXRhRnJvbVRhYmxlKGRhdGFNYXAsIHJlbmRlckluZm8sIHByb2Nlc3NJbmZvKTtcclxuICAgICAgICBpZiAocHJvY2Vzc0luZm8uZXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9yTWVzc2FnZShcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmVycm9yTWVzc2FnZSxcclxuICAgICAgICAgICAgICAgIGNhbnZhcyxcclxuICAgICAgICAgICAgICAgIGVsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1pbkRhdGUpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKG1heERhdGUpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGRhdGFNYXApO1xyXG5cclxuICAgICAgICAvLyBDaGVjayBkYXRlIHJhbmdlXHJcbiAgICAgICAgLy8gbWluRGF0ZSBhbmQgbWF4RGF0ZSBhcmUgY29sbGVjdGVkIHdpdGhvdXQga25vd2luZyBzdGFydERhdGUgYW5kIGVuZERhdGVcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhgZmlsZVRvdGFsOiAke3Byb2Nlc3NJbmZvLmZpbGVUb3RhbH1gKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhgZmlsZUF2YWlsYWJsZTogJHtwcm9jZXNzSW5mby5maWxlQXZhaWxhYmxlfWApO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBmaWxlTm90SW5Gb3JtYXQ6ICR7cHJvY2Vzc0luZm8uZmlsZU5vdEluRm9ybWF0fWApO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKGBmaWxlT3V0T2ZEYXRlUmFuZ2U6ICR7cHJvY2Vzc0luZm8uZmlsZU91dE9mRGF0ZVJhbmdlfWApO1xyXG4gICAgICAgIGxldCBkYXRlRXJyb3JNZXNzYWdlID0gXCJcIjtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICFwcm9jZXNzSW5mby5taW5EYXRlLmlzVmFsaWQoKSB8fFxyXG4gICAgICAgICAgICAhcHJvY2Vzc0luZm8ubWF4RGF0ZS5pc1ZhbGlkKCkgfHxcclxuICAgICAgICAgICAgcHJvY2Vzc0luZm8uZmlsZUF2YWlsYWJsZSA9PT0gMCB8fFxyXG4gICAgICAgICAgICAhcHJvY2Vzc0luZm8uZ290QW55VmFsaWRYVmFsdWVcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgZGF0ZUVycm9yTWVzc2FnZSA9IGBObyB2YWxpZCBkYXRlIGFzIFggdmFsdWUgZm91bmQgaW4gbm90ZXNgO1xyXG4gICAgICAgICAgICBpZiAocHJvY2Vzc0luZm8uZmlsZU91dE9mRGF0ZVJhbmdlID4gMCkge1xyXG4gICAgICAgICAgICAgICAgZGF0ZUVycm9yTWVzc2FnZSArPSBgXFxuJHtwcm9jZXNzSW5mby5maWxlT3V0T2ZEYXRlUmFuZ2V9IGZpbGVzIGFyZSBvdXQgb2YgdGhlIGRhdGUgcmFuZ2UuYDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocHJvY2Vzc0luZm8uZmlsZU5vdEluRm9ybWF0KSB7XHJcbiAgICAgICAgICAgICAgICBkYXRlRXJyb3JNZXNzYWdlICs9IGBcXG4ke3Byb2Nlc3NJbmZvLmZpbGVOb3RJbkZvcm1hdH0gZmlsZXMgYXJlIG5vdCBpbiB0aGUgcmlnaHQgZm9ybWF0LmA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlbmRlckluZm8uc3RhcnREYXRlID09PSBudWxsICYmIHJlbmRlckluZm8uZW5kRGF0ZSA9PT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvLyBObyBkYXRlIGFyZ3VtZW50c1xyXG4gICAgICAgICAgICByZW5kZXJJbmZvLnN0YXJ0RGF0ZSA9IHByb2Nlc3NJbmZvLm1pbkRhdGUuY2xvbmUoKTtcclxuICAgICAgICAgICAgcmVuZGVySW5mby5lbmREYXRlID0gcHJvY2Vzc0luZm8ubWF4RGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uc3RhcnREYXRlICE9PSBudWxsICYmXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZW5kRGF0ZSA9PT0gbnVsbFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAocmVuZGVySW5mby5zdGFydERhdGUgPCBwcm9jZXNzSW5mby5tYXhEYXRlKSB7XHJcbiAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmVuZERhdGUgPSBwcm9jZXNzSW5mby5tYXhEYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkYXRlRXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGRhdGUgcmFuZ2VcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgIHJlbmRlckluZm8uZW5kRGF0ZSAhPT0gbnVsbCAmJlxyXG4gICAgICAgICAgICByZW5kZXJJbmZvLnN0YXJ0RGF0ZSA9PT0gbnVsbFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBpZiAocmVuZGVySW5mby5lbmREYXRlID4gcHJvY2Vzc0luZm8ubWluRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgcmVuZGVySW5mby5zdGFydERhdGUgPSBwcm9jZXNzSW5mby5taW5EYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkYXRlRXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGRhdGUgcmFuZ2VcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIC8vIHN0YXJ0RGF0ZSBhbmQgZW5kRGF0ZSBhcmUgdmFsaWRcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgKHJlbmRlckluZm8uc3RhcnREYXRlIDwgcHJvY2Vzc0luZm8ubWluRGF0ZSAmJlxyXG4gICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8uZW5kRGF0ZSA8IHByb2Nlc3NJbmZvLm1pbkRhdGUpIHx8XHJcbiAgICAgICAgICAgICAgICAocmVuZGVySW5mby5zdGFydERhdGUgPiBwcm9jZXNzSW5mby5tYXhEYXRlICYmXHJcbiAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby5lbmREYXRlID4gcHJvY2Vzc0luZm8ubWF4RGF0ZSlcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBkYXRlRXJyb3JNZXNzYWdlID0gXCJJbnZhbGlkIGRhdGUgcmFuZ2VcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZGF0ZUVycm9yTWVzc2FnZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJFcnJvck1lc3NhZ2UoZGF0ZUVycm9yTWVzc2FnZSwgY2FudmFzLCBlbCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHJlbmRlckluZm8uc3RhcnREYXRlKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhyZW5kZXJJbmZvLmVuZERhdGUpO1xyXG5cclxuICAgICAgICBpZiAoIXByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWVZhbHVlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckVycm9yTWVzc2FnZShcclxuICAgICAgICAgICAgICAgIFwiTm8gdmFsaWQgWSB2YWx1ZSBmb3VuZCBpbiBub3Rlc1wiLFxyXG4gICAgICAgICAgICAgICAgY2FudmFzLFxyXG4gICAgICAgICAgICAgICAgZWxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIFJlc2hhcGUgZGF0YSBmb3IgcmVuZGVyaW5nXHJcbiAgICAgICAgbGV0IGRhdGFzZXRzID0gbmV3IERhdGFzZXRzKHJlbmRlckluZm8uc3RhcnREYXRlLCByZW5kZXJJbmZvLmVuZERhdGUpO1xyXG4gICAgICAgIGZvciAobGV0IHF1ZXJ5IG9mIHJlbmRlckluZm8ucXVlcmllcykge1xyXG4gICAgICAgICAgICAvLyBXZSBzdGlsbCBjcmVhdGUgYSBkYXRhc2V0IGZvciB4RGF0YXNldCxcclxuICAgICAgICAgICAgLy8gdG8ga2VlcCB0aGUgc2VxdWVuY2UgYW5kIG9yZGVyIG9mIHRhcmdldHNcclxuICAgICAgICAgICAgbGV0IGRhdGFzZXQgPSBkYXRhc2V0cy5jcmVhdGVEYXRhc2V0KHF1ZXJ5LCByZW5kZXJJbmZvKTtcclxuICAgICAgICAgICAgLy8gQWRkIG51bWJlciBvZiB0YXJnZXRzIHRvIHRoZSBkYXRhc2V0XHJcbiAgICAgICAgICAgIC8vIE51bWJlciBvZiB0YXJnZXRzIGhhcyBiZWVuIGFjY3VtdWxhdGVkIHdoaWxlIGNvbGxlY3RpbmcgZGF0YVxyXG4gICAgICAgICAgICBkYXRhc2V0LmFkZE51bVRhcmdldHMocXVlcnkuZ2V0TnVtVGFyZ2V0cygpKTtcclxuICAgICAgICAgICAgZm9yIChcclxuICAgICAgICAgICAgICAgIGxldCBjdXJEYXRlID0gcmVuZGVySW5mby5zdGFydERhdGUuY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgIGN1ckRhdGUgPD0gcmVuZGVySW5mby5lbmREYXRlO1xyXG4gICAgICAgICAgICAgICAgY3VyRGF0ZS5hZGQoMSwgXCJkYXlzXCIpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coY3VyRGF0ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLy8gZGF0YU1hcCAtLT4ge2RhdGU6IFtxdWVyeTogdmFsdWUsIC4uLl19XHJcbiAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YU1hcC5oYXMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5kYXRlVG9TdHIoY3VyRGF0ZSwgcmVuZGVySW5mby5kYXRlRm9ybWF0KVxyXG4gICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBxdWVyeVZhbHVlUGFpcnMgPSBkYXRhTWFwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC5nZXQoaGVscGVyLmRhdGVUb1N0cihjdXJEYXRlLCByZW5kZXJJbmZvLmRhdGVGb3JtYXQpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uIChwYWlyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFpci5xdWVyeS5lcXVhbFRvKHF1ZXJ5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHF1ZXJ5VmFsdWVQYWlycy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1lcmdlIHZhbHVlcyBvZiB0aGUgc2FtZSBkYXkgc2FtZSBxdWVyeVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZFBhaXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kUGFpciA8IHF1ZXJ5VmFsdWVQYWlycy5sZW5ndGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRQYWlyKytcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29sbGVjdGVkID0gcXVlcnlWYWx1ZVBhaXJzW2luZFBhaXJdLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlci5pc051bWJlcihjb2xsZWN0ZWQpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIU51bWJlci5pc05hTihjb2xsZWN0ZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBjb2xsZWN0ZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gY29sbGVjdGVkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhoYXNWYWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhc2V0LnNldFZhbHVlKGN1ckRhdGUsIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZW5kZXJJbmZvLmRhdGFzZXRzID0gZGF0YXNldHM7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cocmVuZGVySW5mby5kYXRhc2V0cyk7XHJcblxyXG4gICAgICAgIGxldCByZXRSZW5kZXIgPSByZW5kZXJpbmcucmVuZGVyKGNhbnZhcywgcmVuZGVySW5mbyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiByZXRSZW5kZXIgPT09IFwic3RyaW5nXCIpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyRXJyb3JNZXNzYWdlKHJldFJlbmRlciwgY2FudmFzLCBlbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbC5hcHBlbmRDaGlsZChjYW52YXMpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFRPRE86IHJlbW92ZSB0aGlzLmFwcCBhbmQgbW92ZSB0byBjb2xsZWN0aW5nLnRzXHJcbiAgICBhc3luYyBjb2xsZWN0RGF0YUZyb21UYWJsZShcclxuICAgICAgICBkYXRhTWFwOiBEYXRhTWFwLFxyXG4gICAgICAgIHJlbmRlckluZm86IFJlbmRlckluZm8sXHJcbiAgICAgICAgcHJvY2Vzc0luZm86IENvbGxlY3RpbmdQcm9jZXNzSW5mb1xyXG4gICAgKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJjb2xsZWN0RGF0YUZyb21UYWJsZVwiKTtcclxuXHJcbiAgICAgICAgbGV0IHRhYmxlUXVlcmllcyA9IHJlbmRlckluZm8ucXVlcmllcy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChxKSA9PiBxLmdldFR5cGUoKSA9PT0gU2VhcmNoVHlwZS5UYWJsZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2codGFibGVRdWVyaWVzKTtcclxuICAgICAgICAvLyBTZXBhcmF0ZSBxdWVyaWVzIGJ5IHRhYmxlcyBhbmQgeERhdGFzZXRzL3lEYXRhc2V0c1xyXG4gICAgICAgIGxldCB0YWJsZXM6IEFycmF5PFRhYmxlRGF0YT4gPSBbXTtcclxuICAgICAgICBsZXQgdGFibGVGaWxlTm90Rm91bmQgPSBmYWxzZTtcclxuICAgICAgICBmb3IgKGxldCBxdWVyeSBvZiB0YWJsZVF1ZXJpZXMpIHtcclxuICAgICAgICAgICAgbGV0IGZpbGVQYXRoID0gcXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIGxldCBmaWxlID0gdGhpcy5hcHAudmF1bHQuZ2V0QWJzdHJhY3RGaWxlQnlQYXRoKFxyXG4gICAgICAgICAgICAgICAgbm9ybWFsaXplUGF0aChmaWxlUGF0aCArIFwiLm1kXCIpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmICghZmlsZSB8fCAhKGZpbGUgaW5zdGFuY2VvZiBURmlsZSkpIHtcclxuICAgICAgICAgICAgICAgIHRhYmxlRmlsZU5vdEZvdW5kID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgdGFibGVJbmRleCA9IHF1ZXJ5LmdldEFjY2Vzc29yKCk7XHJcbiAgICAgICAgICAgIGxldCBpc1ggPSBxdWVyeS51c2VkQXNYRGF0YXNldDtcclxuXHJcbiAgICAgICAgICAgIGxldCB0YWJsZSA9IHRhYmxlcy5maW5kKFxyXG4gICAgICAgICAgICAgICAgKHQpID0+IHQuZmlsZVBhdGggPT09IGZpbGVQYXRoICYmIHQudGFibGVJbmRleCA9PT0gdGFibGVJbmRleFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAodGFibGUpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc1gpIHtcclxuICAgICAgICAgICAgICAgICAgICB0YWJsZS54RGF0YXNldCA9IHF1ZXJ5O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0YWJsZS55RGF0YXNldHMucHVzaChxdWVyeSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGFibGVEYXRhID0gbmV3IFRhYmxlRGF0YShmaWxlUGF0aCwgdGFibGVJbmRleCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNYKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGFibGVEYXRhLnhEYXRhc2V0ID0gcXVlcnk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRhYmxlRGF0YS55RGF0YXNldHMucHVzaChxdWVyeSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0YWJsZXMucHVzaCh0YWJsZURhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKHRhYmxlcyk7XHJcblxyXG4gICAgICAgIGlmICh0YWJsZUZpbGVOb3RGb3VuZCkge1xyXG4gICAgICAgICAgICBwcm9jZXNzSW5mby5lcnJvck1lc3NhZ2UgPSBcIkZpbGUgY29udGFpbmluZyB0YWJsZXMgbm90IGZvdW5kXCI7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZvciAobGV0IHRhYmxlRGF0YSBvZiB0YWJsZXMpIHtcclxuICAgICAgICAgICAgLy9leHRyYWN0IHhEYXRhc2V0IGZyb20gcXVlcnlcclxuICAgICAgICAgICAgbGV0IHhEYXRhc2V0UXVlcnkgPSB0YWJsZURhdGEueERhdGFzZXQ7XHJcbiAgICAgICAgICAgIGlmICgheERhdGFzZXRRdWVyeSkge1xyXG4gICAgICAgICAgICAgICAgLy8gbWlzc2luZyB4RGF0YXNldFxyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgbGV0IHlEYXRhc2V0UXVlcmllcyA9IHRhYmxlRGF0YS55RGF0YXNldHM7XHJcbiAgICAgICAgICAgIGxldCBmaWxlUGF0aCA9IHhEYXRhc2V0UXVlcnkuZ2V0UGFyZW50VGFyZ2V0KCk7XHJcbiAgICAgICAgICAgIGxldCB0YWJsZUluZGV4ID0geERhdGFzZXRRdWVyeS5nZXRBY2Nlc3NvcigpO1xyXG5cclxuICAgICAgICAgICAgLy8gR2V0IHRhYmxlIHRleHRcclxuICAgICAgICAgICAgbGV0IHRleHRUYWJsZSA9IFwiXCI7XHJcbiAgICAgICAgICAgIGZpbGVQYXRoID0gZmlsZVBhdGggKyBcIi5tZFwiO1xyXG4gICAgICAgICAgICBsZXQgZmlsZSA9IHRoaXMuYXBwLnZhdWx0LmdldEFic3RyYWN0RmlsZUJ5UGF0aChcclxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZVBhdGgoZmlsZVBhdGgpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChmaWxlICYmIGZpbGUgaW5zdGFuY2VvZiBURmlsZSkge1xyXG4gICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZmlsZUF2YWlsYWJsZSsrO1xyXG4gICAgICAgICAgICAgICAgbGV0IGNvbnRlbnQgPSBhd2FpdCB0aGlzLmFwcC52YXVsdC5hZGFwdGVyLnJlYWQoZmlsZS5wYXRoKTtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGNvbnRlbnQpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8vIFRlc3QgdGhpcyBpbiBSZWdleDEwMVxyXG4gICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIG5vdC1zby1zdHJpY3QgdGFibGUgc2VsZWN0b3JcclxuICAgICAgICAgICAgICAgIC8vICgoXFxyP1xcbil7Mn18XikoW15cXHJcXG5dKlxcfFteXFxyXFxuXSooXFxyP1xcbik/KSsoPz0oXFxyP1xcbil7Mn18JClcclxuICAgICAgICAgICAgICAgIGxldCBzdHJNRFRhYmxlUmVnZXggPVxyXG4gICAgICAgICAgICAgICAgICAgIFwiKChcXFxccj9cXFxcbil7Mn18XikoW15cXFxcclxcXFxuXSpcXFxcfFteXFxcXHJcXFxcbl0qKFxcXFxyP1xcXFxuKT8pKyg/PShcXFxccj9cXFxcbil7Mn18JClcIjtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHN0ck1EVGFibGVSZWdleCk7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWRUYWJsZVJlZ2V4ID0gbmV3IFJlZ0V4cChzdHJNRFRhYmxlUmVnZXgsIFwiZ21cIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgbWF0Y2g7XHJcbiAgICAgICAgICAgICAgICBsZXQgaW5kVGFibGUgPSAwO1xyXG5cclxuICAgICAgICAgICAgICAgIHdoaWxlICgobWF0Y2ggPSBtZFRhYmxlUmVnZXguZXhlYyhjb250ZW50KSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhtYXRjaCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZFRhYmxlID09PSB0YWJsZUluZGV4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHRUYWJsZSA9IG1hdGNoWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaW5kVGFibGUrKztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGZpbGUgbm90IGV4aXN0c1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2codGV4dFRhYmxlKTtcclxuXHJcbiAgICAgICAgICAgIGxldCB0YWJsZUxpbmVzID0gdGV4dFRhYmxlLnNwbGl0KC9cXHI/XFxuLyk7XHJcbiAgICAgICAgICAgIHRhYmxlTGluZXMgPSB0YWJsZUxpbmVzLmZpbHRlcigobGluZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGxpbmUgIT09IFwiXCI7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsZXQgbnVtQ29sdW1ucyA9IDA7XHJcbiAgICAgICAgICAgIGxldCBudW1EYXRhUm93cyA9IDA7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKHRhYmxlTGluZXMpO1xyXG5cclxuICAgICAgICAgICAgLy8gTWFrZSBzdXJlIGl0IGlzIGEgdmFsaWQgdGFibGUgZmlyc3RcclxuICAgICAgICAgICAgaWYgKHRhYmxlTGluZXMubGVuZ3RoID49IDIpIHtcclxuICAgICAgICAgICAgICAgIC8vIE11c3QgaGF2ZSBoZWFkZXIgYW5kIHNlcGFyYXRvciBsaW5lXHJcbiAgICAgICAgICAgICAgICBsZXQgaGVhZGVyTGluZSA9IHRhYmxlTGluZXMuc2hpZnQoKS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICBoZWFkZXJMaW5lID0gaGVscGVyLnRyaW1CeUNoYXIoaGVhZGVyTGluZSwgXCJ8XCIpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlclNwbGl0dGVkID0gaGVhZGVyTGluZS5zcGxpdChcInxcIik7XHJcbiAgICAgICAgICAgICAgICBudW1Db2x1bW5zID0gaGVhZGVyU3BsaXR0ZWQubGVuZ3RoO1xyXG5cclxuICAgICAgICAgICAgICAgIGxldCBzZXBMaW5lID0gdGFibGVMaW5lcy5zaGlmdCgpLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgIHNlcExpbmUgPSBoZWxwZXIudHJpbUJ5Q2hhcihzZXBMaW5lLCBcInxcIik7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3BlcExpbmVTcGxpdHRlZCA9IHNlcExpbmUuc3BsaXQoXCJ8XCIpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgY29sIG9mIHNwZXBMaW5lU3BsaXR0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbC5pbmNsdWRlcyhcIi1cIikpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIE5vdCBhIHZhbGlkIHNlcFxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBudW1EYXRhUm93cyA9IHRhYmxlTGluZXMubGVuZ3RoO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAobnVtRGF0YVJvd3MgPT0gMCkgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICAvLyBnZXQgeCBkYXRhXHJcbiAgICAgICAgICAgIGxldCBjb2x1bW5YRGF0YXNldCA9IHhEYXRhc2V0UXVlcnkuZ2V0QWNjZXNzb3IoMSk7XHJcbiAgICAgICAgICAgIGlmIChjb2x1bW5YRGF0YXNldCA+PSBudW1Db2x1bW5zKSBjb250aW51ZTtcclxuICAgICAgICAgICAgbGV0IHhWYWx1ZXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGxldCBpbmRMaW5lID0gMDtcclxuICAgICAgICAgICAgZm9yIChsZXQgdGFibGVMaW5lIG9mIHRhYmxlTGluZXMpIHtcclxuICAgICAgICAgICAgICAgIGxldCBkYXRhUm93ID0gaGVscGVyLnRyaW1CeUNoYXIodGFibGVMaW5lLnRyaW0oKSwgXCJ8XCIpO1xyXG4gICAgICAgICAgICAgICAgbGV0IGRhdGFSb3dTcGxpdHRlZCA9IGRhdGFSb3cuc3BsaXQoXCJ8XCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtblhEYXRhc2V0IDwgZGF0YVJvd1NwbGl0dGVkLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gZGF0YVJvd1NwbGl0dGVkW2NvbHVtblhEYXRhc2V0XS50cmltKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGUgPSBoZWxwZXIuc3RyVG9EYXRlKGRhdGEsIHJlbmRlckluZm8uZGF0ZUZvcm1hdCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXRlLmlzVmFsaWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVzLnB1c2goZGF0ZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhcHJvY2Vzc0luZm8ubWluRGF0ZS5pc1ZhbGlkKCkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFwcm9jZXNzSW5mby5tYXhEYXRlLmlzVmFsaWQoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLm1pbkRhdGUgPSBkYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzSW5mby5tYXhEYXRlID0gZGF0ZS5jbG9uZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGUgPCBwcm9jZXNzSW5mby5taW5EYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8ubWluRGF0ZSA9IGRhdGUuY2xvbmUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRlID4gcHJvY2Vzc0luZm8ubWF4RGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLm1heERhdGUgPSBkYXRlLmNsb25lKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVzLnB1c2gobnVsbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB4VmFsdWVzLnB1c2gobnVsbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpbmRMaW5lKys7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coeFZhbHVlcyk7XHJcblxyXG4gICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICB4VmFsdWVzLmV2ZXJ5KCh2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHYgPT09IG51bGw7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmVycm9yTWVzc2FnZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgXCJObyB2YWxpZCBkYXRlIGFzIFggdmFsdWUgZm91bmQgaW4gdGFibGVcIjtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWFZhbHVlIHx8PSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBnZXQgeSBkYXRhXHJcbiAgICAgICAgICAgIGZvciAobGV0IHlEYXRhc2V0UXVlcnkgb2YgeURhdGFzZXRRdWVyaWVzKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29sdW1uT2ZJbnRlcmVzdCA9IHlEYXRhc2V0UXVlcnkuZ2V0QWNjZXNzb3IoMSk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhgY29sdW1uT2ZJbnRlcmVzdDogJHtjb2x1bW5PZkludGVyZXN0fSwgbnVtQ29sdW1uczogJHtudW1Db2x1bW5zfWApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbk9mSW50ZXJlc3QgPj0gbnVtQ29sdW1ucykgY29udGludWU7XHJcblxyXG4gICAgICAgICAgICAgICAgbGV0IGluZExpbmUgPSAwO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgdGFibGVMaW5lIG9mIHRhYmxlTGluZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YVJvdyA9IGhlbHBlci50cmltQnlDaGFyKHRhYmxlTGluZS50cmltKCksIFwifFwiKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YVJvd1NwbGl0dGVkID0gZGF0YVJvdy5zcGxpdChcInxcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHVtbk9mSW50ZXJlc3QgPCBkYXRhUm93U3BsaXR0ZWQubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gZGF0YVJvd1NwbGl0dGVkW2NvbHVtbk9mSW50ZXJlc3RdLnRyaW0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNwbGl0dGVkID0gZGF0YS5zcGxpdCh5RGF0YXNldFF1ZXJ5LmdldFNlcGFyYXRvcigpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc3BsaXR0ZWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNwbGl0dGVkKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNwbGl0dGVkLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJldFBhcnNlID0gaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0dGVkWzBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbmRlckluZm8udGV4dFZhbHVlTWFwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cocmV0UGFyc2UpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldFBhcnNlLnZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldFBhcnNlLnR5cGUgPT09IFZhbHVlVHlwZS5UaW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlEYXRhc2V0UXVlcnkudmFsdWVUeXBlID0gVmFsdWVUeXBlLlRpbWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHJldFBhcnNlLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kTGluZSA8IHhWYWx1ZXMubGVuZ3RoICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZXNbaW5kTGluZV1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc0luZm8uZ290QW55VmFsaWRZVmFsdWUgfHw9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxlY3RpbmcuYWRkVG9EYXRhTWFwKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YU1hcCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlbHBlci5kYXRlVG9TdHIoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeFZhbHVlc1tpbmRMaW5lXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW5kZXJJbmZvLmRhdGVGb3JtYXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5RGF0YXNldFF1ZXJ5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHRlZC5sZW5ndGggPiB5RGF0YXNldFF1ZXJ5LmdldEFjY2Vzc29yKDIpICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5RGF0YXNldFF1ZXJ5LmdldEFjY2Vzc29yKDIpID49IDBcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNwbGl0dGVkUGFydCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXR0ZWRbeURhdGFzZXRRdWVyeS5nZXRBY2Nlc3NvcigyKV0udHJpbSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coc3BsaXR0ZWRQYXJ0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXRQYXJzZSA9IGhlbHBlci5wYXJzZUZsb2F0RnJvbUFueShcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGxpdHRlZFBhcnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby50ZXh0VmFsdWVNYXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyZXRQYXJzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0UGFyc2UudmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0UGFyc2UudHlwZSA9PT0gVmFsdWVUeXBlLlRpbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeURhdGFzZXRRdWVyeS52YWx1ZVR5cGUgPSBWYWx1ZVR5cGUuVGltZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSByZXRQYXJzZS52YWx1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZExpbmUgPCB4VmFsdWVzLmxlbmd0aCAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4VmFsdWVzW2luZExpbmVdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NJbmZvLmdvdEFueVZhbGlkWVZhbHVlIHx8PSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xsZWN0aW5nLmFkZFRvRGF0YU1hcChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFNYXAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWxwZXIuZGF0ZVRvU3RyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhWYWx1ZXNbaW5kTGluZV0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVuZGVySW5mby5kYXRlRm9ybWF0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeURhdGFzZXRRdWVyeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpbmRMaW5lKys7XHJcbiAgICAgICAgICAgICAgICB9IC8vIExvb3Agb3ZlciB0YWJsZUxpbmVzXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RWRpdG9yKCk6IEVkaXRvciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwLndvcmtzcGFjZS5nZXRBY3RpdmVWaWV3T2ZUeXBlKE1hcmtkb3duVmlldykuZWRpdG9yO1xyXG4gICAgfVxyXG5cclxuICAgIGFkZENvZGVCbG9jayhvdXRwdXRUeXBlOiBHcmFwaFR5cGUpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBjdXJyZW50VmlldyA9IHRoaXMuYXBwLndvcmtzcGFjZS5hY3RpdmVMZWFmLnZpZXc7XHJcblxyXG4gICAgICAgIGlmICghKGN1cnJlbnRWaWV3IGluc3RhbmNlb2YgTWFya2Rvd25WaWV3KSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgY29kZWJsb2NrVG9JbnNlcnQgPSBcIlwiO1xyXG4gICAgICAgIHN3aXRjaCAob3V0cHV0VHlwZSkge1xyXG4gICAgICAgICAgICBjYXNlIEdyYXBoVHlwZS5MaW5lOlxyXG4gICAgICAgICAgICAgICAgY29kZWJsb2NrVG9JbnNlcnQgPSBgXFxgXFxgXFxgIHRyYWNrZXJcclxuc2VhcmNoVHlwZTogdGFnXHJcbnNlYXJjaFRhcmdldDogdGFnTmFtZVxyXG5mb2xkZXI6IC9cclxuc3RhcnREYXRlOlxyXG5lbmREYXRlOlxyXG5saW5lOlxyXG4gICAgdGl0bGU6IFwiTGluZSBDaGFydFwiXHJcbiAgICB4QXhpc0xhYmVsOiBEYXRlXHJcbiAgICB5QXhpc0xhYmVsOiBWYWx1ZVxyXG5cXGBcXGBcXGBgO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgR3JhcGhUeXBlLkJhcjpcclxuICAgICAgICAgICAgICAgIGNvZGVibG9ja1RvSW5zZXJ0ID0gYFxcYFxcYFxcYCB0cmFja2VyXHJcbnNlYXJjaFR5cGU6IHRhZ1xyXG5zZWFyY2hUYXJnZXQ6IHRhZ05hbWVcclxuZm9sZGVyOiAvXHJcbnN0YXJ0RGF0ZTpcclxuZW5kRGF0ZTpcclxuYmFyOlxyXG4gICAgdGl0bGU6IFwiQmFyIENoYXJ0XCJcclxuICAgIHhBeGlzTGFiZWw6IERhdGVcclxuICAgIHlBeGlzTGFiZWw6IFZhbHVlXHJcblxcYFxcYFxcYGA7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBHcmFwaFR5cGUuU3VtbWFyeTpcclxuICAgICAgICAgICAgICAgIGNvZGVibG9ja1RvSW5zZXJ0ID0gYFxcYFxcYFxcYCB0cmFja2VyXHJcbnNlYXJjaFR5cGU6IHRhZ1xyXG5zZWFyY2hUYXJnZXQ6IHRhZ05hbWVcclxuZm9sZGVyOiAvXHJcbnN0YXJ0RGF0ZTpcclxuZW5kRGF0ZTpcclxuc3VtbWFyeTpcclxuICAgIHRlbXBsYXRlOiBcIkF2ZXJhZ2UgdmFsdWUgb2YgdGFnTmFtZSBpcyB7e2F2ZXJhZ2V9fVwiXHJcbiAgICBzdHlsZTogXCJjb2xvcjp3aGl0ZTtcIlxyXG5cXGBcXGBcXGBgO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChjb2RlYmxvY2tUb0luc2VydCAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICBsZXQgdGV4dEluc2VydGVkID0gdGhpcy5pbnNlcnRUb05leHRMaW5lKGNvZGVibG9ja1RvSW5zZXJ0KTtcclxuICAgICAgICAgICAgaWYgKCF0ZXh0SW5zZXJ0ZWQpIHtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbnNlcnRUb05leHRMaW5lKHRleHQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGxldCBlZGl0b3IgPSB0aGlzLmdldEVkaXRvcigpO1xyXG5cclxuICAgICAgICBpZiAoZWRpdG9yKSB7XHJcbiAgICAgICAgICAgIGxldCBjdXJzb3IgPSBlZGl0b3IuZ2V0Q3Vyc29yKCk7XHJcbiAgICAgICAgICAgIGxldCBsaW5lTnVtYmVyID0gY3Vyc29yLmxpbmU7XHJcbiAgICAgICAgICAgIGxldCBsaW5lID0gZWRpdG9yLmdldExpbmUobGluZU51bWJlcik7XHJcblxyXG4gICAgICAgICAgICBjdXJzb3IuY2ggPSBsaW5lLmxlbmd0aDtcclxuICAgICAgICAgICAgZWRpdG9yLnNldFNlbGVjdGlvbihjdXJzb3IpO1xyXG4gICAgICAgICAgICBlZGl0b3IucmVwbGFjZVNlbGVjdGlvbihcIlxcblwiICsgdGV4dCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxufVxyXG4iXSwibmFtZXMiOlsiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJ2YWx1ZSIsInN0ZXAiLCJuZXh0IiwiZSIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJhcHBseSIsImEiLCJiIiwiTmFOIiwiZiIsImRlbHRhIiwiY29tcGFyZSIsImxlZnQiLCJ4IiwibG8iLCJoaSIsImxlbmd0aCIsIm1pZCIsImQiLCJhc2NlbmRpbmciLCJhc2NlbmRpbmdDb21wYXJhdG9yIiwiY2VudGVyIiwiaSIsInJpZ2h0IiwiYmlzZWN0UmlnaHQiLCJiaXNlY3RvciIsImUxMCIsIk1hdGgiLCJzcXJ0IiwiZTUiLCJlMiIsInRpY2tJbmNyZW1lbnQiLCJzdGFydCIsInN0b3AiLCJjb3VudCIsIm1heCIsInBvd2VyIiwiZmxvb3IiLCJsb2ciLCJMTjEwIiwiZXJyb3IiLCJwb3ciLCJ0aWNrU3RlcCIsInN0ZXAwIiwiYWJzIiwic3RlcDEiLCJ2YWx1ZXMiLCJ2YWx1ZW9mIiwidW5kZWZpbmVkIiwiaW5kZXgiLCJtaW4iLCJxdWlja3NlbGVjdCIsImFycmF5IiwiayIsIm4iLCJtIiwieiIsInMiLCJleHAiLCJzZCIsInQiLCJqIiwic3dhcCIsInF1YW50aWxlIiwicCIsIkZsb2F0NjRBcnJheSIsImZyb20iLCJudW1iZXJzIiwiaTAiLCJ2YWx1ZTAiLCJzdWJhcnJheSIsImFyZ3VtZW50cyIsImNlaWwiLCJyYW5nZSIsIkFycmF5Iiwic3VtIiwic2xpY2UiLCJwcm90b3R5cGUiLCJ0cmFuc2xhdGVYIiwidHJhbnNsYXRlWSIsInkiLCJudW1iZXIiLCJzY2FsZSIsIm9mZnNldCIsImJhbmR3aWR0aCIsInJvdW5kIiwiZW50ZXJpbmciLCJ0aGlzIiwiX19heGlzIiwiYXhpcyIsIm9yaWVudCIsInRpY2tBcmd1bWVudHMiLCJ0aWNrVmFsdWVzIiwidGlja0Zvcm1hdCIsInRpY2tTaXplSW5uZXIiLCJ0aWNrU2l6ZU91dGVyIiwidGlja1BhZGRpbmciLCJ3aW5kb3ciLCJkZXZpY2VQaXhlbFJhdGlvIiwidHJhbnNmb3JtIiwiY29udGV4dCIsInRpY2tzIiwiZG9tYWluIiwiZm9ybWF0IiwiaWRlbnRpdHkiLCJzcGFjaW5nIiwicmFuZ2UwIiwicmFuZ2UxIiwicG9zaXRpb24iLCJjb3B5Iiwic2VsZWN0aW9uIiwicGF0aCIsInNlbGVjdEFsbCIsImRhdGEiLCJ0aWNrIiwib3JkZXIiLCJ0aWNrRXhpdCIsImV4aXQiLCJ0aWNrRW50ZXIiLCJlbnRlciIsImFwcGVuZCIsImF0dHIiLCJsaW5lIiwic2VsZWN0IiwidGV4dCIsIm1lcmdlIiwiaW5zZXJ0IiwidHJhbnNpdGlvbiIsImlzRmluaXRlIiwiZ2V0QXR0cmlidXRlIiwicGFyZW50Tm9kZSIsInJlbW92ZSIsImZpbHRlciIsImVhY2giLCJfIiwiY2FsbCIsInRpY2tTaXplIiwiYXhpc0JvdHRvbSIsImF4aXNMZWZ0Iiwibm9vcCIsImRpc3BhdGNoIiwidGVzdCIsIkVycm9yIiwiRGlzcGF0Y2giLCJwYXJzZVR5cGVuYW1lcyIsInR5cGVuYW1lcyIsInR5cGVzIiwidHJpbSIsInNwbGl0IiwibWFwIiwibmFtZSIsImluZGV4T2YiLCJoYXNPd25Qcm9wZXJ0eSIsInR5cGUiLCJnZXQiLCJjIiwic2V0IiwiY2FsbGJhY2siLCJjb25jYXQiLCJwdXNoIiwiY29uc3RydWN0b3IiLCJvbiIsInR5cGVuYW1lIiwiVCIsInRoYXQiLCJhcmdzIiwieGh0bWwiLCJzdmciLCJ4bGluayIsInhtbCIsInhtbG5zIiwicHJlZml4IiwibmFtZXNwYWNlcyIsInNwYWNlIiwibG9jYWwiLCJjcmVhdG9ySW5oZXJpdCIsImRvY3VtZW50Iiwib3duZXJEb2N1bWVudCIsInVyaSIsIm5hbWVzcGFjZVVSSSIsImRvY3VtZW50RWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjcmVhdGVFbGVtZW50TlMiLCJjcmVhdG9yRml4ZWQiLCJmdWxsbmFtZSIsIm5hbWVzcGFjZSIsIm5vbmUiLCJzZWxlY3RvciIsInF1ZXJ5U2VsZWN0b3IiLCJlbXB0eSIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJtYXRjaGVzIiwiY2hpbGRNYXRjaGVyIiwibm9kZSIsImZpbmQiLCJjaGlsZEZpcnN0IiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJjaGlsZHJlbiIsInVwZGF0ZSIsIkVudGVyTm9kZSIsInBhcmVudCIsImRhdHVtIiwiX25leHQiLCJfcGFyZW50IiwiX19kYXRhX18iLCJiaW5kSW5kZXgiLCJncm91cCIsImdyb3VwTGVuZ3RoIiwiZGF0YUxlbmd0aCIsImJpbmRLZXkiLCJrZXkiLCJrZXlWYWx1ZSIsIm5vZGVCeUtleVZhbHVlIiwiTWFwIiwia2V5VmFsdWVzIiwiaGFzIiwiZGVsZXRlIiwiYXR0clJlbW92ZSIsInJlbW92ZUF0dHJpYnV0ZSIsImF0dHJSZW1vdmVOUyIsInJlbW92ZUF0dHJpYnV0ZU5TIiwiYXR0ckNvbnN0YW50Iiwic2V0QXR0cmlidXRlIiwiYXR0ckNvbnN0YW50TlMiLCJzZXRBdHRyaWJ1dGVOUyIsImF0dHJGdW5jdGlvbiIsInYiLCJhdHRyRnVuY3Rpb25OUyIsImRlZmF1bHRWaWV3Iiwic3R5bGVSZW1vdmUiLCJzdHlsZSIsInJlbW92ZVByb3BlcnR5Iiwic3R5bGVDb25zdGFudCIsInByaW9yaXR5Iiwic2V0UHJvcGVydHkiLCJzdHlsZUZ1bmN0aW9uIiwic3R5bGVWYWx1ZSIsImdldFByb3BlcnR5VmFsdWUiLCJnZXRDb21wdXRlZFN0eWxlIiwicHJvcGVydHlSZW1vdmUiLCJwcm9wZXJ0eUNvbnN0YW50IiwicHJvcGVydHlGdW5jdGlvbiIsImNsYXNzQXJyYXkiLCJzdHJpbmciLCJjbGFzc0xpc3QiLCJDbGFzc0xpc3QiLCJfbm9kZSIsIl9uYW1lcyIsImNsYXNzZWRBZGQiLCJuYW1lcyIsImxpc3QiLCJhZGQiLCJjbGFzc2VkUmVtb3ZlIiwiY2xhc3NlZFRydWUiLCJjbGFzc2VkRmFsc2UiLCJjbGFzc2VkRnVuY3Rpb24iLCJ0ZXh0UmVtb3ZlIiwidGV4dENvbnRlbnQiLCJ0ZXh0Q29uc3RhbnQiLCJ0ZXh0RnVuY3Rpb24iLCJodG1sUmVtb3ZlIiwiaW5uZXJIVE1MIiwiaHRtbENvbnN0YW50IiwiaHRtbEZ1bmN0aW9uIiwicmFpc2UiLCJuZXh0U2libGluZyIsImFwcGVuZENoaWxkIiwibG93ZXIiLCJwcmV2aW91c1NpYmxpbmciLCJpbnNlcnRCZWZvcmUiLCJmaXJzdENoaWxkIiwiY29uc3RhbnROdWxsIiwicmVtb3ZlQ2hpbGQiLCJzZWxlY3Rpb25fY2xvbmVTaGFsbG93IiwiY2xvbmUiLCJjbG9uZU5vZGUiLCJzZWxlY3Rpb25fY2xvbmVEZWVwIiwib25SZW1vdmUiLCJfX29uIiwibyIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJsaXN0ZW5lciIsIm9wdGlvbnMiLCJvbkFkZCIsImV2ZW50IiwiY29udGV4dExpc3RlbmVyIiwiYWRkRXZlbnRMaXN0ZW5lciIsImRpc3BhdGNoRXZlbnQiLCJwYXJhbXMiLCJDdXN0b21FdmVudCIsImNyZWF0ZUV2ZW50IiwiaW5pdEV2ZW50IiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJkZXRhaWwiLCJkaXNwYXRjaENvbnN0YW50IiwiZGlzcGF0Y2hGdW5jdGlvbiIsImNoaWxkIiwiam9pbiIsInNwbGljZSIsImNvbnRhaW5zIiwicm9vdCIsIlNlbGVjdGlvbiIsImdyb3VwcyIsInBhcmVudHMiLCJfZ3JvdXBzIiwiX3BhcmVudHMiLCJmYWN0b3J5IiwiZXh0ZW5kIiwiZGVmaW5pdGlvbiIsIk9iamVjdCIsImNyZWF0ZSIsIkNvbG9yIiwic3ViZ3JvdXBzIiwic3Vibm9kZSIsInN1Ymdyb3VwIiwiYXJyYXlBbGwiLCJzZWxlY3RvckFsbCIsInNlbGVjdENoaWxkIiwibWF0Y2giLCJjaGlsZEZpbmQiLCJzZWxlY3RDaGlsZHJlbiIsImNoaWxkcmVuRmlsdGVyIiwibWF0Y2hlciIsImJpbmQiLCJjb25zdGFudCIsImVudGVyR3JvdXAiLCJ1cGRhdGVHcm91cCIsImV4aXRHcm91cCIsInByZXZpb3VzIiwiaTEiLCJfZW50ZXIiLCJfZXhpdCIsInNwYXJzZSIsIm9uZW50ZXIiLCJvbnVwZGF0ZSIsIm9uZXhpdCIsImdyb3VwczAiLCJncm91cHMxIiwibTAiLCJtMSIsIm1lcmdlcyIsImdyb3VwMCIsImdyb3VwMSIsImNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIiwic29ydCIsImNvbXBhcmVOb2RlIiwic29ydGdyb3VwcyIsInNvcnRncm91cCIsIm5vZGVzIiwic2l6ZSIsImdldEF0dHJpYnV0ZU5TIiwicHJvcGVydHkiLCJjbGFzc2VkIiwiaHRtbCIsImNyZWF0b3IiLCJiZWZvcmUiLCJkZWVwIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJicmlnaHRlciIsInJlSSIsInJlTiIsInJlUCIsInJlSGV4IiwicmVSZ2JJbnRlZ2VyIiwiUmVnRXhwIiwicmVSZ2JQZXJjZW50IiwicmVSZ2JhSW50ZWdlciIsInJlUmdiYVBlcmNlbnQiLCJyZUhzbFBlcmNlbnQiLCJyZUhzbGFQZXJjZW50IiwibmFtZWQiLCJhbGljZWJsdWUiLCJhbnRpcXVld2hpdGUiLCJhcXVhIiwiYXF1YW1hcmluZSIsImF6dXJlIiwiYmVpZ2UiLCJiaXNxdWUiLCJibGFjayIsImJsYW5jaGVkYWxtb25kIiwiYmx1ZSIsImJsdWV2aW9sZXQiLCJicm93biIsImJ1cmx5d29vZCIsImNhZGV0Ymx1ZSIsImNoYXJ0cmV1c2UiLCJjaG9jb2xhdGUiLCJjb3JhbCIsImNvcm5mbG93ZXJibHVlIiwiY29ybnNpbGsiLCJjcmltc29uIiwiY3lhbiIsImRhcmtibHVlIiwiZGFya2N5YW4iLCJkYXJrZ29sZGVucm9kIiwiZGFya2dyYXkiLCJkYXJrZ3JlZW4iLCJkYXJrZ3JleSIsImRhcmtraGFraSIsImRhcmttYWdlbnRhIiwiZGFya29saXZlZ3JlZW4iLCJkYXJrb3JhbmdlIiwiZGFya29yY2hpZCIsImRhcmtyZWQiLCJkYXJrc2FsbW9uIiwiZGFya3NlYWdyZWVuIiwiZGFya3NsYXRlYmx1ZSIsImRhcmtzbGF0ZWdyYXkiLCJkYXJrc2xhdGVncmV5IiwiZGFya3R1cnF1b2lzZSIsImRhcmt2aW9sZXQiLCJkZWVwcGluayIsImRlZXBza3libHVlIiwiZGltZ3JheSIsImRpbWdyZXkiLCJkb2RnZXJibHVlIiwiZmlyZWJyaWNrIiwiZmxvcmFsd2hpdGUiLCJmb3Jlc3RncmVlbiIsImZ1Y2hzaWEiLCJnYWluc2Jvcm8iLCJnaG9zdHdoaXRlIiwiZ29sZCIsImdvbGRlbnJvZCIsImdyYXkiLCJncmVlbiIsImdyZWVueWVsbG93IiwiZ3JleSIsImhvbmV5ZGV3IiwiaG90cGluayIsImluZGlhbnJlZCIsImluZGlnbyIsIml2b3J5Iiwia2hha2kiLCJsYXZlbmRlciIsImxhdmVuZGVyYmx1c2giLCJsYXduZ3JlZW4iLCJsZW1vbmNoaWZmb24iLCJsaWdodGJsdWUiLCJsaWdodGNvcmFsIiwibGlnaHRjeWFuIiwibGlnaHRnb2xkZW5yb2R5ZWxsb3ciLCJsaWdodGdyYXkiLCJsaWdodGdyZWVuIiwibGlnaHRncmV5IiwibGlnaHRwaW5rIiwibGlnaHRzYWxtb24iLCJsaWdodHNlYWdyZWVuIiwibGlnaHRza3libHVlIiwibGlnaHRzbGF0ZWdyYXkiLCJsaWdodHNsYXRlZ3JleSIsImxpZ2h0c3RlZWxibHVlIiwibGlnaHR5ZWxsb3ciLCJsaW1lIiwibGltZWdyZWVuIiwibGluZW4iLCJtYWdlbnRhIiwibWFyb29uIiwibWVkaXVtYXF1YW1hcmluZSIsIm1lZGl1bWJsdWUiLCJtZWRpdW1vcmNoaWQiLCJtZWRpdW1wdXJwbGUiLCJtZWRpdW1zZWFncmVlbiIsIm1lZGl1bXNsYXRlYmx1ZSIsIm1lZGl1bXNwcmluZ2dyZWVuIiwibWVkaXVtdHVycXVvaXNlIiwibWVkaXVtdmlvbGV0cmVkIiwibWlkbmlnaHRibHVlIiwibWludGNyZWFtIiwibWlzdHlyb3NlIiwibW9jY2FzaW4iLCJuYXZham93aGl0ZSIsIm5hdnkiLCJvbGRsYWNlIiwib2xpdmUiLCJvbGl2ZWRyYWIiLCJvcmFuZ2UiLCJvcmFuZ2VyZWQiLCJvcmNoaWQiLCJwYWxlZ29sZGVucm9kIiwicGFsZWdyZWVuIiwicGFsZXR1cnF1b2lzZSIsInBhbGV2aW9sZXRyZWQiLCJwYXBheWF3aGlwIiwicGVhY2hwdWZmIiwicGVydSIsInBpbmsiLCJwbHVtIiwicG93ZGVyYmx1ZSIsInB1cnBsZSIsInJlYmVjY2FwdXJwbGUiLCJyZWQiLCJyb3N5YnJvd24iLCJyb3lhbGJsdWUiLCJzYWRkbGVicm93biIsInNhbG1vbiIsInNhbmR5YnJvd24iLCJzZWFncmVlbiIsInNlYXNoZWxsIiwic2llbm5hIiwic2lsdmVyIiwic2t5Ymx1ZSIsInNsYXRlYmx1ZSIsInNsYXRlZ3JheSIsInNsYXRlZ3JleSIsInNub3ciLCJzcHJpbmdncmVlbiIsInN0ZWVsYmx1ZSIsInRhbiIsInRlYWwiLCJ0aGlzdGxlIiwidG9tYXRvIiwidHVycXVvaXNlIiwidmlvbGV0Iiwid2hlYXQiLCJ3aGl0ZSIsIndoaXRlc21va2UiLCJ5ZWxsb3ciLCJ5ZWxsb3dncmVlbiIsImNvbG9yX2Zvcm1hdEhleCIsInJnYiIsImZvcm1hdEhleCIsImNvbG9yX2Zvcm1hdFJnYiIsImZvcm1hdFJnYiIsImNvbG9yIiwibCIsInRvTG93ZXJDYXNlIiwiZXhlYyIsInBhcnNlSW50IiwicmdibiIsIlJnYiIsInJnYmEiLCJoc2xhIiwiciIsImciLCJyZ2JDb252ZXJ0Iiwib3BhY2l0eSIsInJnYl9mb3JtYXRIZXgiLCJoZXgiLCJyZ2JfZm9ybWF0UmdiIiwiaXNOYU4iLCJ0b1N0cmluZyIsImgiLCJIc2wiLCJoc2xDb252ZXJ0IiwiaHNsMnJnYiIsIm0yIiwiZGVmaW5lIiwiY2hhbm5lbHMiLCJhc3NpZ24iLCJkaXNwbGF5YWJsZSIsImZvcm1hdEhzbCIsImRhcmtlciIsInJhZGlhbnMiLCJQSSIsImRlZ3JlZXMiLCJ0MCIsInQxIiwidDIiLCJsYWJDb252ZXJ0IiwiTGFiIiwiSGNsIiwiaGNsMmxhYiIsInJnYjJscmdiIiwieHl6MmxhYiIsImxhYiIsImxhYjJ4eXoiLCJscmdiMnJnYiIsImhjbENvbnZlcnQiLCJhdGFuMiIsImNvcyIsInNpbiIsInRhc2tIZWFkIiwidGFza1RhaWwiLCJmcmFtZSIsInRpbWVvdXQiLCJpbnRlcnZhbCIsImNsb2NrTGFzdCIsImNsb2NrTm93IiwiY2xvY2tTa2V3IiwiY2xvY2siLCJwZXJmb3JtYW5jZSIsIm5vdyIsIkRhdGUiLCJzZXRGcmFtZSIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInNldFRpbWVvdXQiLCJjbGVhck5vdyIsIlRpbWVyIiwiX2NhbGwiLCJfdGltZSIsInRpbWVyIiwiZGVsYXkiLCJ0aW1lIiwicmVzdGFydCIsIndha2UiLCJ0aW1lckZsdXNoIiwiSW5maW5pdHkiLCJzbGVlcCIsIm5hcCIsInBva2UiLCJjbGVhclRpbWVvdXQiLCJjbGVhckludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJlbGFwc2VkIiwiVHlwZUVycm9yIiwiZW1wdHlPbiIsImVtcHR5VHdlZW4iLCJpZCIsInRpbWluZyIsInNjaGVkdWxlcyIsIl9fdHJhbnNpdGlvbiIsInNlbGYiLCJ0d2VlbiIsInNjaGVkdWxlIiwic3RhdGUiLCJkdXJhdGlvbiIsImVhc2UiLCJpbml0IiwiZ2FtbWEiLCJub2dhbW1hIiwiZXhwb25lbnRpYWwiLCJsaW5lYXIiLCJyZ2JHYW1tYSIsImVuZCIsImNvbG9yUmdiIiwicmVBIiwicmVCIiwic291cmNlIiwiYW0iLCJibSIsImJzIiwiYmkiLCJsYXN0SW5kZXgiLCJxIiwib25lIiwiemVybyIsInN2Z05vZGUiLCJyb3RhdGUiLCJza2V3WCIsInNjYWxlWCIsInNjYWxlWSIsImF0YW4iLCJpbnRlcnBvbGF0ZVRyYW5zZm9ybSIsInBhcnNlIiwicHhDb21tYSIsInB4UGFyZW4iLCJkZWdQYXJlbiIsInBvcCIsInhhIiwieWEiLCJ4YiIsInliIiwidHJhbnNsYXRlIiwiaW50ZXJwb2xhdGVUcmFuc2Zvcm1Dc3MiLCJET01NYXRyaXgiLCJXZWJLaXRDU1NNYXRyaXgiLCJpc0lkZW50aXR5IiwiZGVjb21wb3NlIiwiaW50ZXJwb2xhdGVUcmFuc2Zvcm1TdmciLCJiYXNlVmFsIiwiY29uc29saWRhdGUiLCJtYXRyaXgiLCJ0d2VlblJlbW92ZSIsInR3ZWVuMCIsInR3ZWVuMSIsInR3ZWVuRnVuY3Rpb24iLCJ0d2VlblZhbHVlIiwiX2lkIiwiaW50ZXJwb2xhdGVOdW1iZXIiLCJpbnRlcnBvbGF0ZVJnYiIsImludGVycG9sYXRlU3RyaW5nIiwiaW50ZXJwb2xhdGUiLCJ2YWx1ZTEiLCJzdHJpbmcwMCIsImludGVycG9sYXRlMCIsInN0cmluZzEiLCJzdHJpbmcwIiwic3RyaW5nMTAiLCJhdHRySW50ZXJwb2xhdGUiLCJhdHRySW50ZXJwb2xhdGVOUyIsImF0dHJUd2Vlbk5TIiwiX3ZhbHVlIiwiYXR0clR3ZWVuIiwiZGVsYXlGdW5jdGlvbiIsImRlbGF5Q29uc3RhbnQiLCJkdXJhdGlvbkZ1bmN0aW9uIiwiZHVyYXRpb25Db25zdGFudCIsImVhc2VDb25zdGFudCIsIm9uRnVuY3Rpb24iLCJvbjAiLCJvbjEiLCJzaXQiLCJldmVyeSIsInN0eWxlSW50ZXJwb2xhdGUiLCJzdHlsZVR3ZWVuIiwidGV4dEludGVycG9sYXRlIiwidGV4dFR3ZWVuIiwiVHJhbnNpdGlvbiIsIl9uYW1lIiwibmV3SWQiLCJzZWxlY3Rpb25fcHJvdG90eXBlIiwiaW5oZXJpdCIsImlkMCIsImlkMSIsInN0eWxlTnVsbCIsImxpc3RlbmVyMCIsInN0eWxlTWF5YmVSZW1vdmUiLCJyZW1vdmVGdW5jdGlvbiIsImVhc2VWYXJ5aW5nIiwiY2FuY2VsIiwiaW50ZXJydXB0IiwiZGVmYXVsdFRpbWluZyIsImFjdGl2ZSIsInBpIiwidGF1IiwidGF1RXBzaWxvbiIsIlBhdGgiLCJfeDAiLCJfeTAiLCJfeDEiLCJfeTEiLCJmb3JtYXREZWNpbWFsUGFydHMiLCJ0b0V4cG9uZW50aWFsIiwiY29lZmZpY2llbnQiLCJtb3ZlVG8iLCJjbG9zZVBhdGgiLCJsaW5lVG8iLCJxdWFkcmF0aWNDdXJ2ZVRvIiwieDEiLCJ5MSIsImJlemllckN1cnZlVG8iLCJ4MiIsInkyIiwiYXJjVG8iLCJ4MCIsInkwIiwieDIxIiwieTIxIiwieDAxIiwieTAxIiwibDAxXzIiLCJ4MjAiLCJ5MjAiLCJsMjFfMiIsImwyMF8yIiwibDIxIiwibDAxIiwiYWNvcyIsInQwMSIsInQyMSIsImFyYyIsImEwIiwiYTEiLCJjY3ciLCJkeCIsImR5IiwiY3ciLCJkYSIsInJlY3QiLCJ3IiwicHJlZml4RXhwb25lbnQiLCJyZSIsImZvcm1hdFNwZWNpZmllciIsInNwZWNpZmllciIsIkZvcm1hdFNwZWNpZmllciIsImZpbGwiLCJhbGlnbiIsInNpZ24iLCJzeW1ib2wiLCJ3aWR0aCIsImNvbW1hIiwicHJlY2lzaW9uIiwiZXhwb25lbnQiLCJ0b0ZpeGVkIiwidG9Mb2NhbGVTdHJpbmciLCJyZXBsYWNlIiwidG9QcmVjaXNpb24iLCJmb3JtYXRSb3VuZGVkIiwiWCIsInRvVXBwZXJDYXNlIiwibG9jYWxlIiwiZm9ybWF0UHJlZml4IiwicHJlZml4ZXMiLCJncm91cGluZyIsInRob3VzYW5kcyIsIk51bWJlciIsInN1YnN0cmluZyIsInJldmVyc2UiLCJjdXJyZW5jeVByZWZpeCIsImN1cnJlbmN5IiwiY3VycmVuY3lTdWZmaXgiLCJkZWNpbWFsIiwibnVtZXJhbHMiLCJmb3JtYXROdW1lcmFscyIsIlN0cmluZyIsInBlcmNlbnQiLCJtaW51cyIsIm5hbiIsIm5ld0Zvcm1hdCIsImZvcm1hdFR5cGVzIiwic3VmZml4IiwiZm9ybWF0VHlwZSIsIm1heWJlU3VmZml4IiwidmFsdWVQcmVmaXgiLCJ2YWx1ZVN1ZmZpeCIsInZhbHVlTmVnYXRpdmUiLCJvdXQiLCJmb3JtYXRUcmltIiwiY2hhckNvZGVBdCIsInBhZGRpbmciLCJmb3JtYXRMb2NhbGUiLCJjb2xvckxhYiIsImluaXRSYW5nZSIsImltcGxpY2l0Iiwib3JkaW5hbCIsInVua25vd24iLCJnZW5lcmljQXJyYXkiLCJuYiIsIm5hIiwic2V0VGltZSIsImRhdGUiLCJBcnJheUJ1ZmZlciIsImlzVmlldyIsIkRhdGFWaWV3IiwiaXNOdW1iZXJBcnJheSIsIm51bWJlckFycmF5IiwiaXNBcnJheSIsInZhbHVlT2YiLCJvYmplY3QiLCJ1bml0Iiwibm9ybWFsaXplIiwiYmltYXAiLCJkMCIsImQxIiwicjAiLCJyMSIsInBvbHltYXAiLCJiaXNlY3QiLCJ0YXJnZXQiLCJjbGFtcCIsInRyYW5zZm9ybWVyIiwidW50cmFuc2Zvcm0iLCJwaWVjZXdpc2UiLCJvdXRwdXQiLCJpbnB1dCIsImludGVycG9sYXRlVmFsdWUiLCJyZXNjYWxlIiwiaW52ZXJ0IiwicmFuZ2VSb3VuZCIsImludGVycG9sYXRlUm91bmQiLCJ1IiwiY29udGludW91cyIsInByZWNpc2lvblByZWZpeCIsInByZWNpc2lvblJvdW5kIiwicHJlY2lzaW9uRml4ZWQiLCJsaW5lYXJpc2giLCJuaWNlIiwicHJlc3RlcCIsIm1heEl0ZXIiLCJuZXdJbnRlcnZhbCIsImZsb29yaSIsIm9mZnNldGkiLCJmaWVsZCIsIm1pbGxpc2Vjb25kIiwic2Vjb25kIiwiZ2V0TWlsbGlzZWNvbmRzIiwiZ2V0VVRDU2Vjb25kcyIsIm1pbnV0ZSIsImdldFNlY29uZHMiLCJkdXJhdGlvblNlY29uZCIsImdldE1pbnV0ZXMiLCJob3VyIiwiZHVyYXRpb25NaW51dGUiLCJnZXRIb3VycyIsImRheSIsInNldEhvdXJzIiwic2V0RGF0ZSIsImdldERhdGUiLCJnZXRUaW1lem9uZU9mZnNldCIsImR1cmF0aW9uSG91ciIsIndlZWtkYXkiLCJnZXREYXkiLCJkdXJhdGlvbkRheSIsInN1bmRheSIsIm1vbmRheSIsInRodXJzZGF5IiwibW9udGgiLCJzZXRNb250aCIsImdldE1vbnRoIiwiZ2V0RnVsbFllYXIiLCJ5ZWFyIiwic2V0RnVsbFllYXIiLCJzZXRVVENTZWNvbmRzIiwiZ2V0VVRDTWludXRlcyIsInNldFVUQ01pbnV0ZXMiLCJnZXRVVENIb3VycyIsInV0Y0RheSIsInNldFVUQ0hvdXJzIiwic2V0VVRDRGF0ZSIsImdldFVUQ0RhdGUiLCJ1dGNXZWVrZGF5IiwiZ2V0VVRDRGF5IiwidXRjU3VuZGF5IiwidXRjTW9uZGF5IiwidXRjVGh1cnNkYXkiLCJzZXRVVENNb250aCIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRnVsbFllYXIiLCJ1dGNZZWFyIiwic2V0VVRDRnVsbFllYXIiLCJ0aW1lVGlja3MiLCJ0aW1lVGlja0ludGVydmFsIiwid2VlayIsInRpY2tJbnRlcnZhbHMiLCJ0aWNrSW50ZXJ2YWwiLCJ0aWNrZXIiLCJsb2NhbERhdGUiLCJIIiwiTSIsIlMiLCJMIiwidXRjRGF0ZSIsIlVUQyIsIm5ld0RhdGUiLCJ0aW1lRm9ybWF0IiwicGFkcyIsIm51bWJlclJlIiwicGVyY2VudFJlIiwicmVxdW90ZVJlIiwicGFkIiwicmVxdW90ZSIsImZvcm1hdFJlIiwiZm9ybWF0TG9va3VwIiwicGFyc2VXZWVrZGF5TnVtYmVyU3VuZGF5IiwicGFyc2VXZWVrZGF5TnVtYmVyTW9uZGF5IiwicGFyc2VXZWVrTnVtYmVyU3VuZGF5IiwiVSIsInBhcnNlV2Vla051bWJlcklTTyIsIlYiLCJwYXJzZVdlZWtOdW1iZXJNb25kYXkiLCJXIiwicGFyc2VGdWxsWWVhciIsInBhcnNlWWVhciIsInBhcnNlWm9uZSIsIloiLCJwYXJzZVF1YXJ0ZXIiLCJwYXJzZU1vbnRoTnVtYmVyIiwicGFyc2VEYXlPZk1vbnRoIiwicGFyc2VEYXlPZlllYXIiLCJwYXJzZUhvdXIyNCIsInBhcnNlTWludXRlcyIsInBhcnNlU2Vjb25kcyIsInBhcnNlTWlsbGlzZWNvbmRzIiwicGFyc2VNaWNyb3NlY29uZHMiLCJwYXJzZUxpdGVyYWxQZXJjZW50IiwicGFyc2VVbml4VGltZXN0YW1wIiwiUSIsInBhcnNlVW5peFRpbWVzdGFtcFNlY29uZHMiLCJmb3JtYXREYXlPZk1vbnRoIiwiZm9ybWF0SG91cjI0IiwiZm9ybWF0SG91cjEyIiwiZm9ybWF0RGF5T2ZZZWFyIiwidGltZURheSIsInRpbWVZZWFyIiwiZm9ybWF0TWlsbGlzZWNvbmRzIiwiZm9ybWF0TWljcm9zZWNvbmRzIiwiZm9ybWF0TW9udGhOdW1iZXIiLCJmb3JtYXRNaW51dGVzIiwiZm9ybWF0U2Vjb25kcyIsImZvcm1hdFdlZWtkYXlOdW1iZXJNb25kYXkiLCJmb3JtYXRXZWVrTnVtYmVyU3VuZGF5IiwidGltZVN1bmRheSIsImRJU08iLCJ0aW1lVGh1cnNkYXkiLCJmb3JtYXRXZWVrTnVtYmVySVNPIiwiZm9ybWF0V2Vla2RheU51bWJlclN1bmRheSIsImZvcm1hdFdlZWtOdW1iZXJNb25kYXkiLCJ0aW1lTW9uZGF5IiwiZm9ybWF0WWVhciIsImZvcm1hdFllYXJJU08iLCJmb3JtYXRGdWxsWWVhciIsImZvcm1hdEZ1bGxZZWFySVNPIiwiZm9ybWF0Wm9uZSIsImZvcm1hdFVUQ0RheU9mTW9udGgiLCJmb3JtYXRVVENIb3VyMjQiLCJmb3JtYXRVVENIb3VyMTIiLCJmb3JtYXRVVENEYXlPZlllYXIiLCJmb3JtYXRVVENNaWxsaXNlY29uZHMiLCJnZXRVVENNaWxsaXNlY29uZHMiLCJmb3JtYXRVVENNaWNyb3NlY29uZHMiLCJmb3JtYXRVVENNb250aE51bWJlciIsImZvcm1hdFVUQ01pbnV0ZXMiLCJmb3JtYXRVVENTZWNvbmRzIiwiZm9ybWF0VVRDV2Vla2RheU51bWJlck1vbmRheSIsImRvdyIsImZvcm1hdFVUQ1dlZWtOdW1iZXJTdW5kYXkiLCJVVENkSVNPIiwiZm9ybWF0VVRDV2Vla051bWJlcklTTyIsImZvcm1hdFVUQ1dlZWtkYXlOdW1iZXJTdW5kYXkiLCJmb3JtYXRVVENXZWVrTnVtYmVyTW9uZGF5IiwiZm9ybWF0VVRDWWVhciIsImZvcm1hdFVUQ1llYXJJU08iLCJmb3JtYXRVVENGdWxsWWVhciIsImZvcm1hdFVUQ0Z1bGxZZWFySVNPIiwiZm9ybWF0VVRDWm9uZSIsImZvcm1hdExpdGVyYWxQZXJjZW50IiwiZm9ybWF0VW5peFRpbWVzdGFtcCIsImZvcm1hdFVuaXhUaW1lc3RhbXBTZWNvbmRzIiwiY2FsZW5kYXIiLCJmb3JtYXRNaWxsaXNlY29uZCIsImZvcm1hdFNlY29uZCIsImZvcm1hdE1pbnV0ZSIsImZvcm1hdEhvdXIiLCJmb3JtYXREYXkiLCJmb3JtYXRXZWVrIiwiZm9ybWF0TW9udGgiLCJsb2NhbGVfZGF0ZVRpbWUiLCJkYXRlVGltZSIsImxvY2FsZV9kYXRlIiwibG9jYWxlX3RpbWUiLCJsb2NhbGVfcGVyaW9kcyIsInBlcmlvZHMiLCJsb2NhbGVfd2Vla2RheXMiLCJkYXlzIiwibG9jYWxlX3Nob3J0V2Vla2RheXMiLCJzaG9ydERheXMiLCJsb2NhbGVfbW9udGhzIiwibW9udGhzIiwibG9jYWxlX3Nob3J0TW9udGhzIiwic2hvcnRNb250aHMiLCJwZXJpb2RSZSIsInBlcmlvZExvb2t1cCIsIndlZWtkYXlSZSIsIndlZWtkYXlMb29rdXAiLCJzaG9ydFdlZWtkYXlSZSIsInNob3J0V2Vla2RheUxvb2t1cCIsIm1vbnRoUmUiLCJtb250aExvb2t1cCIsInNob3J0TW9udGhSZSIsInNob3J0TW9udGhMb29rdXAiLCJmb3JtYXRzIiwiQSIsIkIiLCJHIiwiSSIsIlkiLCJ1dGNGb3JtYXRzIiwicGFyc2VzIiwicGFyc2VTcGVjaWZpZXIiLCJjaGFyQXQiLCJuZXdQYXJzZSIsInV0Y0Zvcm1hdCIsInV0Y1BhcnNlIiwiZGVmYXVsdExvY2FsZSIsInNwbGluZSIsInJnYkJhc2lzIiwidjEiLCJ2MiIsInYwIiwidjMiLCJ0MyIsImJhc2lzIiwiY29sb3JzIiwic2NoZW1lIiwiaW50ZXJwb2xhdGVSZ2JCYXNpcyIsInJhbXAiLCJTZWFyY2hUeXBlIiwiR3JhcGhUeXBlIiwiVmFsdWVUeXBlIiwiaGFsZlBpIiwiYXNpbiIsImFyY0lubmVyUmFkaXVzIiwiaW5uZXJSYWRpdXMiLCJhcmNPdXRlclJhZGl1cyIsIm91dGVyUmFkaXVzIiwiYXJjU3RhcnRBbmdsZSIsInN0YXJ0QW5nbGUiLCJhcmNFbmRBbmdsZSIsImVuZEFuZ2xlIiwiYXJjUGFkQW5nbGUiLCJwYWRBbmdsZSIsImludGVyc2VjdCIsIngzIiwieTMiLCJ4MTAiLCJ5MTAiLCJ4MzIiLCJ5MzIiLCJjb3JuZXJUYW5nZW50cyIsInJjIiwib3giLCJveSIsIngxMSIsInkxMSIsIngwMCIsInkwMCIsImQyIiwiRCIsImN4MCIsImN5MCIsImN4MSIsImN5MSIsImR4MCIsImR5MCIsImR4MSIsImR5MSIsImN4IiwiY3kiLCJjb3JuZXJSYWRpdXMiLCJwYWRSYWRpdXMiLCJidWZmZXIiLCJhMDEiLCJhMTEiLCJhMDAiLCJhMTAiLCJkYTAiLCJkYTEiLCJhcCIsInJwIiwicmMwIiwicmMxIiwicDAiLCJwMSIsIm9jIiwiYXgiLCJheSIsImJ4IiwiYnkiLCJrYyIsImxjIiwiY2VudHJvaWQiLCJMaW5lYXIiLCJfY29udGV4dCIsImFyZWFTdGFydCIsIl9saW5lIiwiYXJlYUVuZCIsImxpbmVTdGFydCIsIl9wb2ludCIsImxpbmVFbmQiLCJwb2ludCIsIkRhdGFQb2ludCIsIlF1ZXJ5Iiwic2VhcmNoVHlwZSIsInNlYXJjaFRhcmdldCIsInNlcGFyYXRvciIsImFjY2Vzc29yIiwiYWNjZXNzb3IxIiwiYWNjZXNzb3IyIiwidmFsdWVUeXBlIiwidXNlZEFzWERhdGFzZXQiLCJudW1UYXJnZXRzIiwiVGFibGUiLCJyZWdleCIsInBhcnNlRmxvYXQiLCJpc051bWJlciIsInBhcmVudFRhcmdldCIsImVxdWFsVG8iLCJvdGhlciIsImdldFR5cGUiLCJnZXRUYXJnZXQiLCJnZXRQYXJlbnRUYXJnZXQiLCJnZXRJZCIsImdldEFjY2Vzc29yIiwic2V0U2VwYXJhdG9yIiwic2VwIiwiZ2V0U2VwYXJhdG9yIiwiaXNGb3JGcm9udG1hdHRlclRhZ3MiLCJhZGROdW1UYXJnZXRzIiwibnVtIiwiZ2V0TnVtVGFyZ2V0cyIsIkRhdGFzZXQiLCJxdWVyeSIsInlNaW4iLCJ5TWF4Iiwic3RhcnREYXRlIiwiZW5kRGF0ZSIsImxpbmVJbmZvIiwiYmFySW5mbyIsImlzVG1wRGF0YXNldCIsImluZCIsImdldERhdGVzIiwiY2xvbmVUb1RtcERhdGFzZXQiLCJ0bXBEYXRhc2V0IiwiZ2V0TmFtZSIsInNldE5hbWUiLCJzZXRJZCIsImdldFZhbHVlIiwiZGF5U2hpZnQiLCJnZXRJbmRleE9mRGF0ZSIsInNldFZhbHVlIiwicmVjYWxjdWxhdGVNaW5NYXgiLCJnZXRZTWluIiwiZ2V0WU1heCIsImdldFN0YXJ0RGF0ZSIsImdldEVuZERhdGUiLCJzaGlmdCIsInNoaWZ0QW1vdW50IiwiZG9MYXJnZXJ0aGFuIiwiYW55U2hpZnRlZCIsInNldFBlbmFsdHkiLCJwZW5hbHR5IiwiZ2V0UXVlcnkiLCJhY2N1bXVsYXRlVmFsdWVzIiwiYWNjdW1WYWx1ZSIsImdldFZhbHVlcyIsImdldExlbmd0aCIsImdldExlbmd0aE5vdE51bGwiLCJjb3VudE5vdE51bGwiLCJjdXJyZW50SW5kZXgiLCJEYXRhc2V0cyIsImRhdGVzIiwiZGF0YXNldHMiLCJkYXRlRm9ybWF0IiwiY3JlYXRpb25EYXRhIiwiY3VyRGF0ZSIsIm1vbWVudCIsImNyZWF0ZURhdGFzZXQiLCJyZW5kZXJJbmZvIiwiZGF0YXNldCIsImRhdGFzZXROYW1lIiwiZ2V0RGF0YXNldEJ5UXVlcnkiLCJnZXREYXRhc2V0QnlJZCIsImdldFhEYXRhc2V0SWRzIiwiaWRzIiwiaW5jbHVkZXMiLCJnZXROYW1lcyIsIlJlbmRlckluZm8iLCJxdWVyaWVzIiwieERhdGFzZXQiLCJmb2xkZXIiLCJmaWxlIiwic3BlY2lmaWVkRmlsZXNPbmx5IiwiZmlsZUNvbnRhaW5zTGlua2VkRmlsZXMiLCJmaWxlTXVsdGlwbGllckFmdGVyTGluayIsImRhdGVGb3JtYXRQcmVmaXgiLCJkYXRlRm9ybWF0U3VmZml4IiwiY29uc3RWYWx1ZSIsImlnbm9yZUF0dGFjaGVkVmFsdWUiLCJpZ25vcmVaZXJvVmFsdWUiLCJhY2N1bSIsInZhbHVlU2hpZnQiLCJzaGlmdE9ubHlWYWx1ZUxhcmdlclRoYW4iLCJ0ZXh0VmFsdWVNYXAiLCJkYXRhQXJlYVNpemUiLCJTaXplIiwibWFyZ2luIiwiTWFyZ2luIiwiZml4ZWRTY2FsZSIsImZpdFBhbmVsV2lkdGgiLCJiYXIiLCJwaWUiLCJzdW1tYXJ5IiwiaGVhdG1hcCIsImJ1bGxldCIsImN1c3RvbURhdGFzZXQiLCJnZXRRdWVyeUJ5SWQiLCJDdXN0b21EYXRhc2V0SW5mbyIsInhEYXRhIiwieURhdGEiLCJDb21tb25DaGFydEluZm8iLCJ0aXRsZSIsInhBeGlzTGFiZWwiLCJ4QXhpc0NvbG9yIiwieEF4aXNMYWJlbENvbG9yIiwieUF4aXNMYWJlbCIsInlBeGlzQ29sb3IiLCJ5QXhpc0xhYmVsQ29sb3IiLCJ5QXhpc1VuaXQiLCJ4QXhpc1RpY2tJbnRlcnZhbCIsInlBeGlzVGlja0ludGVydmFsIiwieEF4aXNUaWNrTGFiZWxGb3JtYXQiLCJ5QXhpc1RpY2tMYWJlbEZvcm1hdCIsInJldmVyc2VZQXhpcyIsImFsbG93SW5zcGVjdERhdGEiLCJzaG93TGVnZW5kIiwibGVnZW5kUG9zaXRpb24iLCJsZWdlbmRPcmllbnRhdGlvbiIsImxlZ2VuZEJnQ29sb3IiLCJsZWdlbmRCb3JkZXJDb2xvciIsIkdldEdyYXBoVHlwZSIsIlVua25vd24iLCJMaW5lSW5mbyIsInN1cGVyIiwibGluZUNvbG9yIiwibGluZVdpZHRoIiwic2hvd0xpbmUiLCJzaG93UG9pbnQiLCJwb2ludENvbG9yIiwicG9pbnRCb3JkZXJDb2xvciIsInBvaW50Qm9yZGVyV2lkdGgiLCJwb2ludFNpemUiLCJmaWxsR2FwIiwieUF4aXNMb2NhdGlvbiIsIkxpbmUiLCJCYXJJbmZvIiwiYmFyQ29sb3IiLCJCYXIiLCJQaWVJbmZvIiwiZGF0YUNvbG9yIiwiZGF0YU5hbWUiLCJsYWJlbCIsImhpZGVMYWJlbExlc3NUaGFuIiwiZXh0TGFiZWwiLCJzaG93RXh0TGFiZWxPbmx5SWZOb0xhYmVsIiwicmF0aW9Jbm5lclJhZGl1cyIsIlBpZSIsIlN1bW1hcnlJbmZvIiwidGVtcGxhdGUiLCJTdW1tYXJ5IiwiTW9udGhJbmZvIiwibW9kZSIsInN0YXJ0V2Vla09uIiwidGhyZXNob2xkIiwiZGltTm90SW5Nb250aCIsImluaXRNb250aCIsInNob3dTZWxlY3RlZFZhbHVlIiwiaGVhZGVyWWVhckNvbG9yIiwiaGVhZGVyTW9udGhDb2xvciIsImRpdmlkaW5nTGluZUNvbG9yIiwic2hvd0NpcmNsZSIsInNob3dTdHJlYWsiLCJzaG93VG9kYXlSaW5nIiwic2hvd1NlbGVjdGVkUmluZyIsImNpcmNsZUNvbG9yIiwiY2lyY2xlQ29sb3JCeVZhbHVlIiwidG9kYXlSaW5nQ29sb3IiLCJzZWxlY3RlZFJpbmdDb2xvciIsInNob3dBbm5vdGF0aW9uIiwiYW5ub3RhdGlvbiIsInNob3dBbm5vdGF0aW9uT2ZBbGxUYXJnZXRzIiwic2VsZWN0ZWREYXRlIiwic2VsZWN0ZWREYXRhc2V0IiwiTW9udGgiLCJIZWF0bWFwSW5mbyIsIm9yaWVudGF0aW9uIiwiSGVhdG1hcCIsIkJ1bGxldEluZm8iLCJ2YWx1ZVVuaXQiLCJ2YWx1ZUNvbG9yIiwicmFuZ2VDb2xvciIsInNob3dNYXJrZXIiLCJtYXJrZXJWYWx1ZSIsIm1hcmtlckNvbG9yIiwiQnVsbGV0IiwiaGVpZ2h0IiwidG9wIiwiYm90dG9tIiwiVHJhbnNmb3JtIiwiVGFibGVEYXRhIiwiZmlsZVBhdGgiLCJ0YWJsZUluZGV4IiwieURhdGFzZXRzIiwiQ29sbGVjdGluZ1Byb2Nlc3NJbmZvIiwiZmlsZVRvdGFsIiwiZmlsZUF2YWlsYWJsZSIsImZpbGVPdXRPZkRhdGVSYW5nZSIsImZpbGVOb3RJbkZvcm1hdCIsImVycm9yTWVzc2FnZSIsIm1pbkRhdGUiLCJtYXhEYXRlIiwiZ290QW55VmFsaWRYVmFsdWUiLCJnb3RBbnlWYWxpZFlWYWx1ZSIsImZtdEhvdXJzIiwiZm10TWlucyIsImZtdFNlY3MiLCJmbXRIb3VyIiwiZm10TWluIiwiZm10U2VjIiwiZm10IiwibWFrZVRpbWVGb3JtYXQiLCJnZXREYXRlU3RyaW5nRnJvbUlucHV0U3RyaW5nIiwiaW5wdXRTdHJpbmciLCJkYXRlU3RyaW5nIiwic3RhcnRzV2l0aCIsInN0clRvRGF0ZSIsInN0ckRhdGUiLCJlbmRzV2l0aCIsIklTT184NjAxIiwic3RhcnRPZiIsImV4dHJhY3RWYWx1ZUZyb21EdXJhdGlvblN0cmluZyIsInN0ckR1cmF0aW9uIiwidW5pdHMiLCJyZW1vdmVQYXR0ZXJuIiwic3RyUmVnZXgiLCJwYXJzZUR1cmF0aW9uU3RyaW5nIiwiaGFzVmFsdWUiLCJuZWdhdGl2ZVZhbHVlIiwieWVhclZhbHVlIiwibW9udGhWYWx1ZSIsIndlZWtWYWx1ZSIsImRheVZhbHVlIiwiaG91clZhbHVlIiwibWludXRlVmFsdWUiLCJzZWNvbmRWYWx1ZSIsImdldERhdGVCeUR1cmF0aW9uVG9Ub2RheSIsInJlbERhdGVTdHJpbmciLCJpc0R1cmF0aW9uIiwiZ2V0RGF0ZVRvZGF5IiwiaXNWYWxpZCIsImRhdGVUb1N0ciIsImdldERhdGVGcm9tVW5peFRpbWUiLCJ1bml4VGltZSIsImRlZXBWYWx1ZSIsIm9iaiIsInN0ciIsInRyaW1CeUNoYXIiLCJjaGFyIiwiYXJyIiwiZmlyc3QiLCJmaW5kSW5kZXgiLCJsYXN0IiwicmVwbGFjZUltZ1RhZ0J5QWx0IiwiZW1vamkiLCJwYXJzZUZsb2F0RnJvbUFueSIsInRvUGFyc2UiLCJ0aW1lVmFsdWUiLCJkaWZmIiwiVGltZSIsImtleXMiLCJzdHJSZXBsYWNlZFZhbHVlIiwibWVhc3VyZVRleHRTaXplIiwic3R5bGVDbGFzcyIsImNvbnRhaW5lciIsImQzLnNlbGVjdCIsInRleHRCbG9jayIsImdldEJCb3giLCJleHBhbmRBcmVhIiwiYXJlYSIsImFkZFciLCJhZGRIIiwibmV3V2lkdGgiLCJuZXdIZWlnaHQiLCJtb3ZlQXJlYSIsInNoaWZ0WCIsInNoaWZ0WSIsInRyYW5zIiwiY2xlYW5UZXh0IiwiQ09NUE9VTkQiLCJNRU1CRVJfRVhQIiwiTElURVJBTCIsInRocm93RXJyb3IiLCJtZXNzYWdlIiwiZGVzY3JpcHRpb24iLCJ1bmFyeV9vcHMiLCJiaW5hcnlfb3BzIiwiYWRkaXRpb25hbF9pZGVudGlmaWVyX2NoYXJzIiwiJCIsImdldE1heEtleUxlbiIsImxlbiIsIm1heF9sZW4iLCJtYXhfdW5vcF9sZW4iLCJtYXhfYmlub3BfbGVuIiwibGl0ZXJhbHMiLCJ0cnVlIiwiZmFsc2UiLCJudWxsIiwiYmluYXJ5UHJlY2VkZW5jZSIsIm9wX3ZhbCIsImNyZWF0ZUJpbmFyeUV4cHJlc3Npb24iLCJvcGVyYXRvciIsImlzRGVjaW1hbERpZ2l0IiwiY2giLCJpc0lkZW50aWZpZXJTdGFydCIsImZyb21DaGFyQ29kZSIsImlzSWRlbnRpZmllclBhcnQiLCJqc2VwIiwiZXhwciIsImNoX2kiLCJjaGFyQXRGdW5jIiwiY2hhckNvZGVBdEZ1bmMiLCJleHBySSIsImV4cHJJQ29kZSIsImdvYmJsZVNwYWNlcyIsImdvYmJsZUV4cHJlc3Npb24iLCJjb25zZXF1ZW50IiwiYWx0ZXJuYXRlIiwiZ29iYmxlQmluYXJ5RXhwcmVzc2lvbiIsImdvYmJsZUJpbmFyeU9wIiwidG9fY2hlY2siLCJzdWJzdHIiLCJ0Y19sZW4iLCJiaW9wIiwicHJlYyIsInN0YWNrIiwiYmlvcF9pbmZvIiwiY3VyX2Jpb3AiLCJnb2JibGVUb2tlbiIsImdvYmJsZU51bWVyaWNMaXRlcmFsIiwiZ29iYmxlU3RyaW5nTGl0ZXJhbCIsImdvYmJsZUFycmF5IiwiYXJndW1lbnQiLCJnb2JibGVJZGVudGlmaWVyIiwiZ29iYmxlR3JvdXAiLCJjb21wdXRlZCIsImdvYmJsZUFyZ3VtZW50cyIsImNhbGxlZSIsImNoQ29kZSIsInJhdyIsInF1b3RlIiwiY2xvc2VkIiwiaWRlbnRpZmllciIsInRlcm1pbmF0aW9uIiwic2VwYXJhdG9yX2NvdW50IiwiYXJnIiwiZWxlbWVudHMiLCJib2R5IiwidmVyc2lvbiIsImFkZFVuYXJ5T3AiLCJvcF9uYW1lIiwiYWRkQmluYXJ5T3AiLCJwcmVjZWRlbmNlIiwiYWRkSWRlbnRpZmllckNoYXIiLCJhZGRMaXRlcmFsIiwibGl0ZXJhbF9uYW1lIiwibGl0ZXJhbF92YWx1ZSIsInJlbW92ZVVuYXJ5T3AiLCJyZW1vdmVBbGxVbmFyeU9wcyIsInJlbW92ZUlkZW50aWZpZXJDaGFyIiwicmVtb3ZlQmluYXJ5T3AiLCJyZW1vdmVBbGxCaW5hcnlPcHMiLCJyZW1vdmVMaXRlcmFsIiwicmVtb3ZlQWxsTGl0ZXJhbHMiLCJtb2R1bGUiLCJleHBvcnRzIiwibm90X3N0cmluZyIsIm5vdF9ib29sIiwibm90X3R5cGUiLCJub3RfcHJpbWl0aXZlIiwibnVtZXJpY19hcmciLCJqc29uIiwibm90X2pzb24iLCJtb2R1bG8iLCJwbGFjZWhvbGRlciIsImtleV9hY2Nlc3MiLCJpbmRleF9hY2Nlc3MiLCJzcHJpbnRmIiwic3ByaW50Zl9mb3JtYXQiLCJzcHJpbnRmX3BhcnNlIiwidnNwcmludGYiLCJhcmd2IiwicGFyc2VfdHJlZSIsInBoIiwicGFkX2NoYXJhY3RlciIsInBhZF9sZW5ndGgiLCJpc19wb3NpdGl2ZSIsImN1cnNvciIsInRyZWVfbGVuZ3RoIiwicGFyYW1fbm8iLCJGdW5jdGlvbiIsIkpTT04iLCJzdHJpbmdpZnkiLCJwYWRfY2hhciIsInJlcGVhdCIsInNwcmludGZfY2FjaGUiLCJfZm10IiwiYXJnX25hbWVzIiwiU3ludGF4RXJyb3IiLCJmaWVsZF9saXN0IiwicmVwbGFjZW1lbnRfZmllbGQiLCJmaWVsZF9tYXRjaCIsImNoZWNrRGl2aXNvciIsImRpdmlzb3IiLCJzb21lIiwiZm5NYXBEYXRhc2V0VG9WYWx1ZSIsImQzLm1pbiIsImFycmF5RGF0YXNldCIsImRhdGFQb2ludCIsImQzLm1heCIsImQzLnN1bSIsIm51bURheXMiLCJudW1EYXlzSGF2aW5nRGF0YSIsIm1heFN0cmVhayIsInN0cmVhayIsIm1heFN0cmVha1N0YXJ0Iiwic3RyZWFrU3RhcnQiLCJtYXhTdHJlYWtFbmQiLCJzdHJlYWtFbmQiLCJuZXh0UG9pbnQiLCJtYXhCcmVha3MiLCJicmVha3MiLCJtYXhCcmVha3NTdGFydCIsImJyZWFrc1N0YXJ0IiwibWF4QnJlYWtzRW5kIiwiYnJlYWtzRW5kIiwibGFzdFN0cmVhayIsImN1cnJlbnRTdHJlYWsiLCJjdXJyZW50U3RyZWFrU3RhcnQiLCJjdXJyZW50U3RyZWFrRW5kIiwiY3VycmVudEJyZWFrcyIsImN1cnJlbnRCcmVha3NTdGFydCIsImN1cnJlbnRCcmVha3NFbmQiLCJhdmVyYWdlIiwibWVkaWFuIiwidmFyaWFuY2UiLCJtZWFuIiwiZDMudmFyaWFuY2UiLCJmbk1hcFVuaXJ5T3AiLCJmb3JFYWNoIiwiZm5NYXBCaW5hcnlPcCIsImZuTWFwRGF0YXNldFRvRGF0YXNldCIsIm5vcm1hbGl6ZWQiLCJzZXRNaXNzaW5nVmFsdWVzIiwibWlzc2luZ1ZhbHVlIiwibmV3RGF0YXNldCIsImV2YWx1YXRlIiwiaWRlbnRpZmllck5hbWUiLCJ1bmlyeUV4cHIiLCJyZXRVbmlyeUFyZyIsImJpbmFyeUV4cHIiLCJsZWZ0VmFsdWUiLCJyaWdodFZhbHVlIiwicmV0Q2hlY2siLCJpc01vbWVudCIsImNoZWNrQmluYXJ5T3BlcmFudFR5cGUiLCJjYWxsRXhwciIsImZuTmFtZSIsImV2YWx1YXRlZEFyZ3MiLCJldmFsdWF0ZUFycmF5IiwiZGF0YXNldElkIiwiZHMiLCJleHByTWFwIiwiZXhwclJlZ2V4IiwiZnVsbG1hdGNoIiwiYXN0IiwiZXJyIiwicmVzb2x2ZVRlbXBsYXRlIiwicmV0UmVzb2x2ZSIsImV4cHJSZXNvbHZlZCIsInN0clZhbHVlIiwiaGVscGVyLmRhdGVUb1N0ciIsInJlc29sdmVWYWx1ZSIsInJlbmRlclBpZSIsImNhbnZhcyIsImNoYXJ0RWxlbWVudHMiLCJwaWVJbmZvIiwicmFkaXVzIiwib3V0dGVyUmFkaXVzIiwic3RyRXhwciIsInJldFZhbHVlIiwiZXhwci5yZXNvbHZlVmFsdWUiLCJsYWJlbHMiLCJyZXRMYWJlbCIsImV4cHIucmVzb2x2ZVRlbXBsYXRlIiwibGFiZWxTaXplcyIsImhlbHBlci5tZWFzdXJlVGV4dFNpemUiLCJleHRMYWJlbHMiLCJyZXRFeHRMYWJlbCIsImV4dExhYmVsU2l6ZXMiLCJjb2xvclNjYWxlIiwiZDMuc2NhbGVPcmRpbmFsIiwic2VjdG9yc0dyb3VwIiwiZGF0YUFyZWEiLCJzb3J0VmFsdWVzIiwiZGVzY2VuZGluZyIsImFyY3MiLCJwYSIsImQzLnBpZSIsInBpZVZhbHVlcyIsInNlY3RvcnMiLCJkMy5hcmMiLCJoaWRkZW5BcmMiLCJkM1xyXG4gICAgICAgIC5hcmMiLCJpc0xhYmVsSGlkZGVuIiwiYXJjT2JqIiwiZ2V0TWlkQW5nbGUiLCJnZXRQb2ludHNGb3JDb25uZWN0aW9uTGluZXMiLCJsYWJlbFdpZHRoIiwiZXh0TGFiZWxXaWR0aCIsIm1pZEFuZ2xlIiwicG9zTGFiZWwiLCJwb3NNaWRkbGUiLCJwb3NFeHRMYWJlbCIsImRpc3RNaWRkbGVUb0xhYmVsIiwicmVuZGVyUGllQ2hhcnQiLCJwcm9wcyIsImdldE93blByb3BlcnR5TmFtZXMiLCJkM1xyXG4gICAgICAgIC5zZWxlY3QiLCJncmFwaEFyZWEiLCJjcmVhdGVBcmVhcyIsImRlZmF1bHREYXRhQ29sb3IiLCJkMy5zY2hlbWVTcGVjdHJhbCIsInRpdGxlU2l6ZSIsImhlbHBlci5leHBhbmRBcmVhIiwiaGVscGVyLm1vdmVBcmVhIiwicmVuZGVyVGl0bGUiLCJ0aXRsZUhlaWdodCIsIm5hbWVTaXplcyIsImluZE1heE5hbWUiLCJtYXhOYW1lV2lkdGgiLCJjaGFyYWN0ZXJXaWR0aCIsIm5hbWVIZWlnaHQiLCJudW1OYW1lcyIsInhTcGFjaW5nIiwieVNwYWNpbmciLCJtYXJrZXJXaWR0aCIsImxlZ2VuZFdpZHRoIiwibGVnZW5kSGVpZ2h0IiwibGVnZW5kWCIsImxlZ2VuZFkiLCJsZWdlbmQiLCJsZWdlbmRCZyIsImZpcnN0TWFya2VyWCIsImZpcnN0TWFya2VyWSIsImZpcnN0TGFiZWxYIiwiZmlyc3RMYWJlbFkiLCJjdXJyUmVuZGVyUG9zWCIsInJlbmRlckxlZ2VuZCIsIl9jYW52YXMiLCJzdmdXaWR0aCIsInN2Z0hlaWdodCIsInNldENoYXJ0U2NhbGUiLCJyZW5kZXJTdW1tYXJ5Iiwic3VtbWFyeUluZm8iLCJvdXRwdXRTdW1tYXJ5IiwicmV0UmVzb2x2ZWRUZW1wbGF0ZSIsIm91dHB1dExpbmVzIiwib3V0cHV0TGluZSIsImxvZ1RvQ29uc29sZSIsInRvTmV4dERhdGFzZXQiLCJtb250aEluZm8iLCJkYXRhc2V0SWRzIiwiY3VyRGF0YXNldElkIiwiY3VySW5kZXgiLCJjbGVhclNlbGVjdGlvbiIsImNpcmNsZXMiLCJjaXJjbGUiLCJtb25pdG9yIiwicmVuZGVyTW9udGhIZWFkZXIiLCJjdXJNb250aERhdGUiLCJkYXlzSW5Nb250aCIsIm1heERheVRleHRTaXplIiwiY2VsbFNpemUiLCJoZWFkZXJZZWFyVGV4dCIsImhlYWRlck1vbnRoVGV4dCIsImhlYWRlclllYXJTaXplIiwiaGVhZGVyTW9udGhTaXplIiwiaGVhZGVySGVpZ2h0IiwiaGVhZGVyR3JvdXAiLCJoZWFkZXJNb250aCIsImhlYWRlclllYXIiLCJkYXRhc2V0TmFtZVNpemUiLCJkYXRhc2V0Um90YXRvciIsInJlZnJlc2giLCJtb25pdG9yVGV4dFNpemUiLCJhcnJvd1NpemUiLCJwcmV2TW9udGhEYXRlIiwibmV4dE1vbnRoRGF0ZSIsInRvZGF5RGF0ZSIsImhlbHBlci5nZXREYXRlVG9kYXkiLCJ3ZWVrZGF5TmFtZXMiLCJ3ZWVrZGF5TmFtZVNpemUiLCJkaXZpZGluZ0xpbmUiLCJyZW5kZXJNb250aERheXMiLCJjdXJEYXRhc2V0SW5kZXgiLCJkb3RSYWRpdXMiLCJzdHJlYWtXaWR0aCIsImFsbG93U2NhbGVkVmFsdWUiLCJtb250aFN0YXJ0RGF0ZSIsInN1YnRyYWN0IiwibW9udGhFbmREYXRlIiwiZW5kT2YiLCJkYXRhU3RhcnREYXRlIiwiZGF0YUVuZERhdGUiLCJhbm5vdGF0aW9ucyIsImN1ckFubm90YXRpb24iLCJkYXlzSW5Nb250aFZpZXciLCJpbmRDb2wiLCJpbmRSb3ciLCJoZWxwZXIuc3RyVG9EYXRlIiwiaXNJblRoaXNNb250aCIsImlzT3V0T2ZEYXRhUmFuZ2UiLCJjdXJWYWx1ZSIsImNvbnNvbGUiLCJzY2FsZWRWYWx1ZSIsIm5leHRWYWx1ZSIsInByZXZWYWx1ZSIsInN0cmVha0luIiwic3RyZWFrT3V0IiwidGV4dEFubm90YXRpb24iLCJkYXRhc2V0SW5kZXgiLCJkYXlJbk1vbnRoIiwicm93IiwiY29sIiwidG90YWxEYXlCbG9ja1dpZHRoIiwiZDNcclxuICAgICAgICAuc2NhbGVMaW5lYXIiLCJzdHJlYWtDb2xvciIsInN0cmVha0hlaWdodCIsImQzLmludGVycG9sYXRlTGFiIiwidG9kYXkiLCJ0b2RheVJpbmdzIiwidmFsdWVUZXh0IiwidHJhbnNYIiwidHJhbnNZIiwiZ3JhcGhBcmVhV2lkdGgiLCJncmFwaEFyZWFIZWlnaHQiLCJ0b3RhbEhlaWdodCIsImhlYWRlciIsInRvdGFsV2lkdGgiLCJyZW5kZXJNb250aCIsIm51bUF2YWlsYWJsZURhdGFzZXQiLCJtb250aERhdGUiLCJoZWxwZXIuZ2V0RGF0ZUJ5RHVyYXRpb25Ub1RvZGF5IiwicmVuZGVySGVhdG1hcCIsImhlYXRtYXBJbmZvIiwicmVuZGVyQnVsbGV0IiwiYnVsbGV0SW5mbyIsInJldFJlbmRlckF4aXMiLCJsYXN0UmFuZ2UiLCJ0aWNrRm9ybWF0Rm4iLCJkMy50aWNrRm9ybWF0IiwibWF4VGlja0xhYmVsU2l6ZSIsImQzLnNjYWxlTGluZWFyIiwiYXhpc0dlbiIsImQzLmF4aXNCb3R0b20iLCJkMy5heGlzTGVmdCIsInJlbmRlckF4aXMiLCJ4TWlkZGxlIiwiYXhpc1dpZHRoIiwidW5pdFNpemUiLCJsYXN0Qm91bmQiLCJyZW5kZXJCYWNrUGFuZWwiLCJyZXRSZW5kZXJCYXIiLCJyZXRBY3R1YWxWYWx1ZSIsImFjdHVhbFZhbHVlIiwiYmFyV2lkdGgiLCJyZW5kZXJCYXIiLCJtYXJrZXJMZW5ndGgiLCJyZW5kZXJNYXJrIiwicmVuZGVyWEF4aXMiLCJjaGFydEluZm8iLCJ4RG9tYWluIiwiZDMuZXh0ZW50IiwieFNjYWxlIiwidGltZU1vbnRoIiwidGltZVdlZWsiLCJ0aW1lSG91ciIsInRpbWVNaW51dGUiLCJ0aW1lU2Vjb25kIiwiZDNcclxuICAgICAgICAuc2NhbGVUaW1lIiwidGlja0ludGVydmFsSW5EdXJhdGlvbiIsImhlbHBlci5wYXJzZUR1cmF0aW9uU3RyaW5nIiwiZmlyc3REYXRlIiwibGFzdERhdGUiLCJkMy50aW1lRGF5IiwidG9EYXRlIiwiYXNEYXlzIiwiZDMudGltZVdlZWsiLCJkMy50aW1lTW9udGgiLCJkMy50aW1lWWVhciIsImdldFhUaWNrVmFsdWVzIiwiaW5UaWNrTGFiZWxGb3JtYXQiLCJmblRpY2tMYWJlbEZvcm1hdCIsInRpY2tMYWJlbEZvcm1hdCIsImQzLnRpbWVGb3JtYXQiLCJnZXRYVGlja0xhYmVsRm9ybWF0IiwieEF4aXNHZW4iLCJ4QXhpcyIsInRleHRTaXplIiwieEF4aXNUaWNrTGFiZWxzIiwidGlja0xhYmVsSGVpZ2h0IiwicmVuZGVyWUF4aXMiLCJ5TWluT2ZEYXRhc2V0cyIsInlNYXhPZkRhdGFzZXRzIiwidG1wVmFsdWVJc1RpbWUiLCJ2YWx1ZUlzVGltZSIsInlNaW5Bc3NpZ25lZCIsInlNYXhBc3NpZ25lZCIsInlUbXAiLCJ5VG1wQXNzaWduZWQiLCJ5TG93ZXIiLCJ5VXBwZXIiLCJ5RXh0ZW50IiwieVNjYWxlIiwieUF4aXNMYWJlbFRleHQiLCJ5QXhpc1VuaXRUZXh0IiwieUF4aXNHZW4iLCJpc1RpbWVWYWx1ZSIsImFic0V4dGVudCIsImludGVybGVhdmUiLCJnZXRZVGlja0xhYmVsRm9ybWF0IiwiZDMucmFuZ2UiLCJhc1NlY29uZHMiLCJnZXRZVGlja1ZhbHVlcyIsInlBeGlzIiwieUF4aXNMaW5lIiwieUF4aXNUaWNrcyIsInlBeGlzVGlja0xhYmVscyIsIm1heFRpY2tMYWJlbFdpZHRoIiwibGFiZWxTaXplIiwieUF4aXNMYWJlbFNpemUiLCJ5QXhpc1dpZHRoIiwicmVuZGVyTGluZSIsImxlZnRZU2NhbGUiLCJyaWdodFlTY2FsZSIsImxpbmVHZW4iLCJkZWZpbmVkIiwiY3VydmUiLCJjdXJ2ZUxpbmVhciIsImRlZmluZWQwIiwicG9pbnRYIiwicG9pbnRZIiwiZDNcclxuICAgICAgICAgICAgLmxpbmUiLCJyZW5kZXJQb2ludHMiLCJkb3RzIiwiaXNJbnRlZ2VyIiwidGFyZ2V0RWxlbWVudHMiLCJ0b29sdGlwIiwidG9vbHRpcEJnIiwidG9vbHRpcExhYmVsIiwidG9vbHRpcExhYmVsRGF0ZSIsInRvb2x0aXBMYWJlbFZhbHVlIiwic291cmNlRXZlbnQiLCJjdXJyZW50VGFyZ2V0Iiwib3duZXJTVkdFbGVtZW50IiwiY3JlYXRlU1ZHUG9pbnQiLCJjbGllbnRYIiwiY2xpZW50WSIsIm1hdHJpeFRyYW5zZm9ybSIsImdldFNjcmVlbkNUTSIsImludmVyc2UiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJjbGllbnRMZWZ0IiwiY2xpZW50VG9wIiwicGFnZVgiLCJwYWdlWSIsImQzLnBvaW50ZXIiLCJ0b29sdGlwQmdXaWR0aCIsInRvb2x0aXBCZ0hlaWdodCIsImxhYmVsRGF0ZVRleHQiLCJsYWJlbERhdGVTaXplIiwibGFiZWxWYWx1ZVRleHQiLCJsYWJlbFZhbHVlU2l6ZSIsInRvb2x0aXBQb3NYIiwidG9vbHRpcFBvc1kiLCJ0b29sdGlwWE9mZnNldCIsInRvb2x0aXBZT2Zmc2V0IiwicmVuZGVyVG9vbHRpcCIsImN1cnJCYXJTZXQiLCJ0b3RhbE51bU9mQmFyU2V0cyIsImJhclNldFdpZHRoIiwiYmFycyIsInBvcnRpb25WaXNpYmxlIiwibGVmdFlBeGlzIiwicmlnaHRZQXhpcyIsInhBeGlzSGVpZ2h0IiwibGVmdFlBeGlzV2lkdGgiLCJyaWdodFlBeGlzV2lkdGgiLCJ4RGF0YXNldElkcyIsIm51bUVsZW1zRXhjbHVkZWQiLCJuYW1lTGFiZWxzIiwicG9zWCIsImVudHJpZXMiLCJyZW5kZXJMaW5lQ2hhcnQiLCJkYXRhc2V0T25MZWZ0WUF4aXMiLCJkYXRhc2V0T25SaWdodFlBeGlzIiwidG9Mb2NhbGVMb3dlckNhc2UiLCJyZXRSZW5kZXJMZWZ0WUF4aXMiLCJyZXRSZW5kZXJSaWdodFlBeGlzIiwicmVuZGVyQmFyQ2hhcnQiLCJzdHJUb0Jvb2wiLCJ2YWxpZGF0ZVNlYXJjaFR5cGUiLCJ2YWxpZGF0ZVlBeGlzTG9jYXRpb24iLCJsb2NhdGlvbiIsInZhbGlkYXRlQ29sb3IiLCJzcGxpdElucHV0QnlDb21tYSIsImR1bW15Iiwic3BsaXR0ZWQiLCJnZXRCb29sQXJyYXlGcm9tSW5wdXQiLCJudW1EYXRhc2V0IiwiZGVmYXVsdFZhbHVlIiwiYWxsb3dOb1ZhbGlkVmFsdWUiLCJudW1WYWxpZFZhbHVlIiwiY3VyciIsInByZXYiLCJjdXJyQm9vbCIsImlucHV0Qm9vbCIsImdldE51bWJlckFycmF5RnJvbUlucHV0IiwiaGVscGVyLnBhcnNlRmxvYXRGcm9tQW55IiwiY3Vyck51bSIsImlucHV0TnVtIiwiZ2V0U3RyaW5nRnJvbUlucHV0IiwiaGVscGVyLnJlcGxhY2VJbWdUYWdCeUFsdCIsImdldFN0cmluZ0FycmF5RnJvbUlucHV0IiwidmFsaWRhdG9yIiwic3RyTnVtYmVyIiwiZ2V0TnVtYmVyQXJyYXkiLCJudW1BcnJheSIsImVsZW0iLCJwaWVjZSIsImdldFN0cmluZ0FycmF5Iiwic3RyQXJyYXkiLCJwYXJzZUNvbW1vbkNoYXJ0SW5mbyIsInlhbWwiLCJyZXRZQXhpc0xhYmVsIiwicmV0WUF4aXNDb2xvciIsInJldFlBeGlzTGFiZWxDb2xvciIsInJldFlBeGlzVW5pdCIsInJldFlBeGlzVGlja0ludGVydmFsIiwicmV0WUF4aXNUaWNrTGFiZWxGb3JtYXQiLCJyZXRZTWluIiwicmV0WU1heCIsInJldFJldmVyc2VZQXhpcyIsImdldEF2YWlsYWJsZUtleXNPZkNsYXNzIiwib2JqZWN0S2V5cyIsImdldERhdGVGcm9tRmlsZW5hbWUiLCJoZWxwZXIuZ2V0RGF0ZVN0cmluZ0Zyb21JbnB1dFN0cmluZyIsImJhc2VuYW1lIiwiZ2V0RGF0ZUZyb21Gcm9udG1hdHRlciIsImZpbGVDYWNoZSIsImZyb250TWF0dGVyIiwiZnJvbnRtYXR0ZXIiLCJoZWxwZXIuZGVlcFZhbHVlIiwiZXh0cmFjdERhdGVVc2luZ1JlZ2V4V2l0aFZhbHVlIiwiZ2V0RGF0ZUZyb21UYWciLCJjb250ZW50IiwidGFnTmFtZSIsImdldERhdGVGcm9tVGV4dCIsImdldERhdGVGcm9tRHZGaWVsZCIsImR2VGFyZ2V0IiwiZ2V0RGF0ZUZyb21GaWxlTWV0YSIsIlRGaWxlIiwiaGVscGVyLmdldERhdGVGcm9tVW5peFRpbWUiLCJzdGF0IiwiY3RpbWUiLCJtdGltZSIsImdldERhdGVGcm9tVGFzayIsIlRhc2siLCJUYXNrRG9uZSIsIlRhc2tOb3REb25lIiwiYWRkVG9EYXRhTWFwIiwiZGF0YU1hcCIsInF1ZXJ5VmFsdWVQYWlycyIsImV4dHJhY3REYXRhVXNpbmdSZWdleFdpdGhNdWx0aXBsZVZhbHVlcyIsInhWYWx1ZU1hcCIsIm1lYXN1cmUiLCJleHRyYWN0ZWQiLCJyZXRQYXJzZSIsImNvbGxlY3REYXRhRnJvbUZpbGVNZXRhIiwieFZhbHVlIiwicGF0dGVybiIsImhlbHBlci5nZXRXb3JkQ291bnQiLCJudW1DaGFycyIsIm51bVNlbnRlbmNlcyIsImhlbHBlci5nZXRTZW50ZW5jZUNvdW50IiwidGFyZ2V0TWVhc3VyZSIsInRhcmdldEV4aXN0IiwiREVGQVVMVF9TRVRUSU5HUyIsIlRyYWNrZXJTZXR0aW5nVGFiIiwiUGx1Z2luU2V0dGluZ1RhYiIsImFwcCIsInBsdWdpbiIsImRpc3BsYXkiLCJjb250YWluZXJFbCIsIlNldHRpbmciLCJzZXREZXNjIiwiYWRkVGV4dCIsInNldFBsYWNlaG9sZGVyIiwic2V0dGluZ3MiLCJvbkNoYW5nZSIsInNhdmVTZXR0aW5ncyIsIlRyYWNrZXIiLCJQbHVnaW4iLCJvbmxvYWQiLCJsb2FkU2V0dGluZ3MiLCJhZGRTZXR0aW5nVGFiIiwicmVnaXN0ZXJNYXJrZG93bkNvZGVCbG9ja1Byb2Nlc3NvciIsInBvc3Rwcm9jZXNzb3IiLCJhZGRDb21tYW5kIiwiYWRkQ29kZUJsb2NrIiwibG9hZERhdGEiLCJzYXZlRGF0YSIsInJlbmRlckVycm9yTWVzc2FnZSIsImVsIiwicmVuZGVyaW5nLnJlbmRlckVycm9yTWVzc2FnZSIsIm9udW5sb2FkIiwiZ2V0RmlsZXNJbkZvbGRlciIsImluY2x1ZGVTdWJGb2xkZXJzIiwiZmlsZXMiLCJpdGVtIiwiZXh0ZW5zaW9uIiwiVEZvbGRlciIsImdldEZpbGVzIiwiZm9sZGVyVG9TZWFyY2giLCJ1c2VTcGVjaWZpZWRGaWxlc09ubHkiLCJzcGVjaWZpZWRGaWxlcyIsImZpbGVzQ29udGFpbnNMaW5rZWRGaWxlcyIsInZhdWx0IiwiZ2V0QWJzdHJhY3RGaWxlQnlQYXRoIiwibm9ybWFsaXplUGF0aCIsImZvbGRlckZpbGVzIiwibGlua2VkRmlsZU11bHRpcGxpZXIiLCJzZWFyY2hGaWxlTXVsdGlmcGllckFmdGVyTGluayIsIm1ldGFkYXRhQ2FjaGUiLCJnZXRGaWxlQ2FjaGUiLCJsaW5lcyIsImFkYXB0ZXIiLCJyZWFkIiwibGlua3MiLCJsaW5rIiwibGlua2VkRmlsZSIsImdldEZpcnN0TGlua3BhdGhEZXN0IiwibGluZU51bWJlciIsIm9yaWdpbmFsIiwiY3R4IiwicmV0UmVuZGVySW5mbyIsInlhbWxUZXh0IiwicGFyc2VZYW1sIiwia2V5c0ZvdW5kSW5ZQU1MIiwibnVtRGF0YXNldHMiLCJyZXRTZWFyY2hUeXBlIiwic3RyVHlwZSIsIlRhZyIsIkZyb250bWF0dGVyIiwiV2lraSIsIldpa2lMaW5rIiwiV2lraURpc3BsYXkiLCJUZXh0IiwiZHZGaWVsZCIsIkZpbGVNZXRhIiwibXVsdGlwbGVWYWx1ZVNwYXJhdG9yIiwicmV0TXVsdGlwbGVWYWx1ZVNwYXJhdG9yIiwicmV0WERhdGFzZXQiLCJrZXlzT2ZSZW5kZXJJbmZvIiwiYWRkaXRpb25hbEFsbG93ZWRLZXlzIiwieWFtbExpbmVLZXlzIiwieWFtbEJhcktleXMiLCJ5YW1sUGllS2V5cyIsInlhbWxTdW1tYXJ5S2V5cyIsInlhbWxNb250aEtleXMiLCJ5YW1sSGVhdG1hcEtleXMiLCJ5YW1sQnVsbGV0S2V5cyIsInlhbWxDdXN0b21EYXRhc2V0S2V5cyIsImN1c3RvbURhdGFzZXRJZCIsInN0ckN1c3RvbURhdGFzZXRJZCIsImFic3RyYWN0Rm9sZGVyIiwicmV0RmlsZXMiLCJzdHJTdGFydERhdGUiLCJpc1N0YXJ0RGF0ZVZhbGlkIiwic3RyRW5kRGF0ZSIsImlzRW5kRGF0ZVZhbGlkIiwicmV0RGF0YXNldE5hbWUiLCJpbmRVbnRpdGxlZCIsIlNldCIsInJldENvbnN0VmFsdWUiLCJyZXRJZ25vcmVBdHRhY2hlZFZhbHVlIiwicmV0SWdub3JlWmVyb1ZhbHVlIiwicmV0QWNjdW0iLCJyZXRQZW5hbHR5IiwicmV0VmFsdWVTaGlmdCIsInJldFNoaWZ0T25seVZhbHVlTGFyZ2VyVGhhbiIsInJldE1hcmdpbiIsImRhdGFzZXRLZXkiLCJ5YW1sQ3VzdG9tRGF0YXNldCIsImtleXNPZkN1c3RvbURhdGFzZXRJbmZvIiwicmV0WERhdGEiLCJudW1YRGF0YSIsInJldFlEYXRhIiwibGluZUtleSIsInlhbWxMaW5lIiwia2V5c09mTGluZUluZm8iLCJyZXRQYXJzZUNvbW1vbkNoYXJ0SW5mbyIsInJldExpbmVDb2xvciIsInJldExpbmVXaWR0aCIsInJldFNob3dMaW5lIiwicmV0U2hvd1BvaW50IiwicmV0UG9pbnRDb2xvciIsInJldFBvaW50Qm9yZGVyQ29sb3IiLCJyZXRQb2ludEJvcmRlcldpZHRoIiwicmV0UG9pbnRTaXplIiwicmV0RmlsbEdhcCIsInJldFlBeGlzTG9jYXRpb24iLCJiYXJLZXkiLCJ5YW1sQmFyIiwia2V5c09mQmFySW5mbyIsInJldEJhckNvbG9yIiwicGllS2V5IiwieWFtbFBpZSIsImtleXNPZlBpZUluZm8iLCJyZXREYXRhIiwibnVtRGF0YSIsInJldERhdGFDb2xvciIsInJldERhdGFOYW1lIiwiZGVmYXVsdExlZ2VuZE9yaWVudGF0aW9uIiwic3VtbWFyeUtleSIsInlhbWxTdW1tYXJ5Iiwia2V5c09mU3VtbWFyeUluZm8iLCJtb250aEtleSIsInlhbWxNb250aCIsImtleXNPZk1vbnRoSW5mbyIsInJldERhdGFzZXQiLCJyZXRUaHJlc2hvbGQiLCJpbmREYXRhc2V0IiwicmV0QW5ub3RhdGlvbiIsImhlYXRtYXBLZXkiLCJ5YW1sSGVhdG1hcCIsImtleXNPZkhlYXRtYXBJbmZvIiwiYnVsbGV0S2V5IiwieWFtbEJ1bGxldCIsImtleXNPZkJ1bGxldEluZm8iLCJyZXRSYW5nZSIsIm51bVJhbmdlIiwicmV0UmFuZ2VDb2xvciIsImdldFJlbmRlckluZm9Gcm9tWWFtbCIsInByb2Nlc3NJbmZvIiwibG9vcEZpbGVQcm9taXNlcyIsInNraXBUaGlzRmlsZSIsInhEYXRhc2V0SWQiLCJ4RGF0ZSIsImNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21GaWxlbmFtZSIsInhEYXRhc2V0UXVlcnkiLCJjb2xsZWN0aW5nLmdldERhdGVGcm9tRnJvbnRtYXR0ZXIiLCJjb2xsZWN0aW5nLmdldERhdGVGcm9tVGFnIiwiY29sbGVjdGluZy5nZXREYXRlRnJvbVRleHQiLCJjb2xsZWN0aW5nLmdldERhdGVGcm9tRHZGaWVsZCIsImNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21GaWxlTWV0YSIsImNvbGxlY3RpbmcuZ2V0RGF0ZUZyb21UYXNrIiwibG9vcFF1ZXJ5UHJvbWlzZXMiLCJnb3RBbnlWYWx1ZSIsImZyb250TWF0dGVyVGFncyIsInRhZ3MiLCJ0YWdNZWFzdXJlIiwidGFnRXhpc3QiLCJzcGxpdHRlZFBhcnQiLCJwYXJ0IiwidGFnIiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21Gcm9udG1hdHRlclRhZyIsImNvbGxlY3RpbmcuY29sbGVjdERhdGFGcm9tRnJvbnRtYXR0ZXJLZXkiLCJ0ZXh0VG9TZWFyY2giLCJ3aWtpVGV4dCIsImRpc3BsYXlUZXh0IiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21XaWtpIiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21JbmxpbmVUYWciLCJjb2xsZWN0aW5nLmNvbGxlY3REYXRhRnJvbVRleHQiLCJjb2xsZWN0aW5nLmNvbGxlY3REYXRhRnJvbUZpbGVNZXRhIiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21EdkZpZWxkIiwiY29sbGVjdGluZy5jb2xsZWN0RGF0YUZyb21UYXNrIiwiYWxsIiwiY29sbGVjdERhdGFGcm9tVGFibGUiLCJkYXRlRXJyb3JNZXNzYWdlIiwicGFpciIsImluZFBhaXIiLCJjb2xsZWN0ZWQiLCJyZXRSZW5kZXIiLCJyZXQiLCJwaWUucmVuZGVyUGllQ2hhcnQiLCJzdW1tYXJ5LnJlbmRlclN1bW1hcnkiLCJidWxsZXQucmVuZGVyQnVsbGV0IiwibW9udGgucmVuZGVyTW9udGgiLCJoZWF0bWFwLnJlbmRlckhlYXRtYXAiLCJyZW5kZXJpbmcucmVuZGVyIiwidGFibGVRdWVyaWVzIiwidGFibGVzIiwidGFibGVGaWxlTm90Rm91bmQiLCJpc1giLCJ0YWJsZSIsInRhYmxlRGF0YSIsInlEYXRhc2V0UXVlcmllcyIsInRleHRUYWJsZSIsIm1kVGFibGVSZWdleCIsImluZFRhYmxlIiwidGFibGVMaW5lcyIsIm51bUNvbHVtbnMiLCJudW1EYXRhUm93cyIsImhlYWRlckxpbmUiLCJoZWxwZXIudHJpbUJ5Q2hhciIsInNlcExpbmUiLCJzcGVwTGluZVNwbGl0dGVkIiwiY29sdW1uWERhdGFzZXQiLCJ4VmFsdWVzIiwidGFibGVMaW5lIiwiZGF0YVJvd1NwbGl0dGVkIiwieURhdGFzZXRRdWVyeSIsImNvbHVtbk9mSW50ZXJlc3QiLCJpbmRMaW5lIiwiY29sbGVjdGluZy5hZGRUb0RhdGFNYXAiLCJnZXRFZGl0b3IiLCJ3b3Jrc3BhY2UiLCJnZXRBY3RpdmVWaWV3T2ZUeXBlIiwiTWFya2Rvd25WaWV3IiwiZWRpdG9yIiwib3V0cHV0VHlwZSIsImFjdGl2ZUxlYWYiLCJ2aWV3IiwiY29kZWJsb2NrVG9JbnNlcnQiLCJpbnNlcnRUb05leHRMaW5lIiwiZ2V0Q3Vyc29yIiwiZ2V0TGluZSIsInNldFNlbGVjdGlvbiIsInJlcGxhY2VTZWxlY3Rpb24iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O2dGQXFFTyxTQUFTQSxFQUFVQyxFQUFTQyxFQUFZQyxFQUFHQyxHQUU5QyxPQUFPLElBQUtELElBQU1BLEVBQUlFLFdBQVUsU0FBVUMsRUFBU0MsR0FDL0MsU0FBU0MsRUFBVUMsR0FBUyxJQUFNQyxFQUFLTixFQUFVTyxLQUFLRixJQUFXLE1BQU9HLEdBQUtMLEVBQU9LLElBQ3BGLFNBQVNDLEVBQVNKLEdBQVMsSUFBTUMsRUFBS04sRUFBaUIsTUFBRUssSUFBVyxNQUFPRyxHQUFLTCxFQUFPSyxJQUN2RixTQUFTRixFQUFLSSxHQUpsQixJQUFlTCxFQUlhSyxFQUFPQyxLQUFPVCxFQUFRUSxFQUFPTCxRQUoxQ0EsRUFJeURLLEVBQU9MLE1BSmhEQSxhQUFpQk4sRUFBSU0sRUFBUSxJQUFJTixHQUFFLFNBQVVHLEdB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