1(self.webpackChunkservice=self.webpackChunkservice||[]).push([[5229],{773:function(e,t,r){var n,a="__lodash_hash_undefined__",o=/^\[object .+?Constructor\]$/,i="object"==typeof r.g&&r.g&&r.g.Object===Object&&r.g,c="object"==typeof self&&self&&self.Object===Object&&self,u=i||c||Function("return this")(),l=Array.prototype,s=Function.prototype,f=Object.prototype,p=u["__core-js_shared__"],y=(n=/[^.]+$/.exec(p&&p.keys&&p.keys.IE_PROTO||""))?"Symbol(src)_1."+n:"",b=s.toString,v=f.hasOwnProperty,d=f.toString,m=RegExp("^"+b.call(v).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),O=l.splice,h=_(u,"Map"),g=_(Object,"create");function w(e){var t=-1,r=e?e.length:0;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function j(e){var t=-1,r=e?e.length:0;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function D(e){var t=-1,r=e?e.length:0;for(this.clear();++t<r;){var n=e[t];this.set(n[0],n[1])}}function S(e,t){for(var r,n,a=e.length;a--;)if((r=e[a][0])===(n=t)||r!=r&&n!=n)return a;return-1}function P(e,t){var r,n,a=e.__data__;return("string"==(n=typeof(r=t))||"number"==n||"symbol"==n||"boolean"==n?"__proto__"!==r:null===r)?a["string"==typeof t?"string":"hash"]:a.map}function _(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return function(e){if(!E(e)||y&&y in e)return!1;var t=function(e){var t=E(e)?d.call(e):"";return"[object Function]"==t||"[object GeneratorFunction]"==t}(e)||function(e){var t=!1;if(null!=e&&"function"!=typeof e.toString)try{t=!!(e+"")}catch(e){}return t}(e)?m:o;return t.test(function(e){if(null!=e){try{return b.call(e)}catch(e){}try{return e+""}catch(e){}}return""}(e))}(r)?r:void 0}function k(e,t){if("function"!=typeof e||t&&"function"!=typeof t)throw new TypeError("Expected a function");var r=function(){var n=arguments,a=t?t.apply(this,n):n[0],o=r.cache;if(o.has(a))return o.get(a);var i=e.apply(this,n);return r.cache=o.set(a,i),i};return r.cache=new(k.Cache||D),r}function E(e){var t=typeof e;return!!e&&("object"==t||"function"==t)}w.prototype.clear=function(){this.__data__=g?g(null):{}},w.prototype.delete=function(e){return this.has(e)&&delete this.__data__[e]},w.prototype.get=function(e){var t=this.__data__;if(g){var r=t[e];return r===a?void 0:r}return v.call(t,e)?t[e]:void 0},w.prototype.has=function(e){var t=this.__data__;return g?void 0!==t[e]:v.call(t,e)},w.prototype.set=function(e,t){return this.__data__[e]=g&&void 0===t?a:t,this},j.prototype.clear=function(){this.__data__=[]},j.prototype.delete=function(e){var t=this.__data__,r=S(t,e);return!(r<0||(r==t.length-1?t.pop():O.call(t,r,1),0))},j.prototype.get=function(e){var t=this.__data__,r=S(t,e);return r<0?void 0:t[r][1]},j.prototype.has=function(e){return S(this.__data__,e)>-1},j.prototype.set=function(e,t){var r=this.__data__,n=S(r,e);return n<0?r.push([e,t]):r[n][1]=t,this},D.prototype.clear=function(){this.__data__={hash:new w,map:new(h||j),string:new w}},D.prototype.delete=function(e){return P(this,e).delete(e)},D.prototype.get=function(e){return P(this,e).get(e)},D.prototype.has=function(e){return P(this,e).has(e)},D.prototype.set=function(e,t){return P(this,e).set(e,t),this},k.Cache=D,e.exports=k},5229:function(e,t,r){"use strict";r.d(t,{Z:function(){return Qr}});var n=r(7294),a=r(5697),o=r.n(a);function i(){return Array.prototype.slice.call(arguments).reduce((function(e,t){return e.concat(t)}),[]).filter((function(e){return"string"==typeof e})).join(" ")}var c=r(773),u=r.n(c);function l(e){return JSON.stringify(e)}var s=u()((function(e){var t,r=void 0===e?{}:e,n=r.useFallbackLocale,a=void 0===n||n,o=r.fallbackLocale,i=void 0===o?"en-US":o,c=[];if("undefined"!=typeof window){var u=window.navigator;c=c.concat(u.languages,u.language,u.userLanguage,u.browserLanguage,u.systemLanguage)}return a&&c.push(i),function(e){return e.map((function(e){if(!e||-1===e.indexOf("-")||e.toLowerCase()!==e)return e;var t=e.split("-");return t[0]+"-"+t[1].toUpperCase()}))}((t=c).filter((function(e,r){return e&&t.indexOf(e)===r})))}),l),f=u()((function(e){return s(e)[0]||null}),l),p=f;function y(e,t,r){return function(n){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:r,o=e(n)+a;return t(o)}}function b(e){return function(t){return new Date(e(t).getTime()-1)}}function v(e){return function(t){return e.map((function(e){return e(t)}))}}function d(e){if(e instanceof Date)return e.getFullYear();if("number"==typeof e)return e;var t=parseInt(e,10);if("string"==typeof e&&!isNaN(t))return t;throw new Error("Failed to get year from date: ".concat(e,"."))}function m(e){if(e instanceof Date)return e.getMonth();throw new Error("Failed to get month from date: ".concat(e,"."))}function O(e){if(e instanceof Date)return e.getDate();throw new Error("Failed to get year from date: ".concat(e,"."))}function h(e){var t=d(e),r=t+(1-t)%100,n=new Date;return n.setFullYear(r,0,1),n.setHours(0,0,0,0),n}var g=y(d,h,-100),w=y(d,h,100),j=b(w),D=y(d,j,-100),S=(y(d,j,100),v([h,j]));function P(e){var t=d(e),r=t+(1-t)%10,n=new Date;return n.setFullYear(r,0,1),n.setHours(0,0,0,0),n}var _=y(d,P,-10),k=y(d,P,10),E=b(k),x=y(d,E,-10),T=(y(d,E,10),v([P,E]));function A(e){var t=d(e),r=new Date;return r.setFullYear(t,0,1),r.setHours(0,0,0,0),r}var C=y(d,A,-1),N=y(d,A,1),L=b(N),R=y(d,L,-1),M=(y(d,L,1),v([A,L]));function I(e,t){return function(r){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,a=d(r),o=m(r)+n,i=new Date;return i.setFullYear(a,o,1),i.setHours(0,0,0,0),e(i)}}function W(e){var t=d(e),r=m(e),n=new Date;return n.setFullYear(t,r,1),n.setHours(0,0,0,0),n}var Y=I(W,-1),F=I(W,1),q=b(F),U=I(q,-1),V=(I(q,1),v([W,q]));function H(e,t){return function(r){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t,a=d(r),o=m(r),i=O(r)+n,c=new Date;return c.setFullYear(a,o,i),c.setHours(0,0,0,0),e(c)}}function B(e){var t=d(e),r=m(e),n=O(e),a=new Date;return a.setFullYear(t,r,n),a.setHours(0,0,0,0),a}H(B,-1);var $,G=b(H(B,1)),J=(H(G,-1),H(G,1),v([B,G]));function Q(e){return O(q(e))}function Z(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function K(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var X,z={ARABIC:"Arabic",HEBREW:"Hebrew",ISO_8601:"ISO 8601",US:"US"},ee=(K($={},z.US,["en-CA","en-US","es-AR","es-BO","es-CL","es-CO","es-CR","es-DO","es-EC","es-GT","es-HN","es-MX","es-NI","es-PA","es-PE","es-PR","es-SV","es-VE","pt-B
1R"]),K($,z.ARABIC,["ar","ar-AE","ar-BH","ar-DZ","ar-EG","ar-IQ","ar-JO","ar-KW","ar-LY","ar-OM","ar-QA","ar-SA","ar-SD","ar-SY","ar-YE","dv","dv-MV","ps","ps-AR"]),K($,z.HEBREW,["he","he-IL"]),$),te=(X=Array(7),function(e){if(Array.isArray(e))return Z(e)}(X)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(X)||function(e,t){if(e){if("string"==typeof e)return Z(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Z(e,t):void 0}}(X)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()).map((function(e,t){return t})),re=new Map;function ne(e){return function(t,r){return function(e){return function(t,r){var n=t||p();re.has(n)||re.set(n,new Map);var a=re.get(n);return a.has(e)||a.set(e,new Intl.DateTimeFormat(n,e).format),a.get(e)(r)}}(e)(t,function(e){var t=new Date(e);return new Date(t.setHours(12))}(r))}}ne({day:"numeric",month:"numeric",year:"numeric"});var ae=ne({day:"numeric"}),oe=ne({day:"numeric",month:"long",year:"numeric"}),ie=ne({month:"long"}),ce=ne({month:"long",year:"numeric"}),ue=ne({weekday:"short"}),le=ne({weekday:"long"}),se=ne({year:"numeric"}),fe=te[0],pe=te[5],ye=te[6];function be(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z.ISO_8601,r=e.getDay();switch(t){case z.ISO_8601:return(r+6)%7;case z.ARABIC:return(r+1)%7;case z.HEBREW:case z.US:return r;default:throw new Error("Unsupported calendar type.")}}function ve(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z.ISO_8601,r=d(e),n=m(e),a=e.getDate()-be(e,t);return new Date(r,n,a)}function de(e,t){switch(e){case"century":return h(t);case"decade":return P(t);case"year":return A(t);case"month":return W(t);case"day":return B(t);default:throw new Error("Invalid rangeType: ".concat(e))}}function me(e,t){switch(e){case"century":return w(t);case"decade":return k(t);case"year":return N(t);case"month":return F(t);default:throw new Error("Invalid rangeType: ".concat(e))}}function Oe(e,t){switch(e){case"century":return j(t);case"decade":return E(t);case"year":return L(t);case"month":return q(t);case"day":return G(t);default:throw new Error("Invalid rangeType: ".concat(e))}}function he(e,t){switch(e){case"century":return S(t);case"decade":return T(t);case"year":return M(t);case"month":return V(t);case"day":return J(t);default:throw new Error("Invalid rangeType: ".concat(e))}}function ge(e,t,r){var n=[t,r].sort((function(e,t){return e-t}));return[de(e,n[0]),Oe(e,n[1])]}function we(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:se,r=arguments.length>2?arguments[2]:void 0;return r.map((function(r){return t(e,r)})).join(" â ")}function je(e,t,r){return we(e,t,T(r))}function De(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z.ISO_8601,r=e.getDay();switch(t){case z.ARABIC:case z.HEBREW:return r===pe||r===ye;case z.ISO_8601:case z.US:return r===ye||r===fe;default:throw new Error("Unsupported calendar type.")}}function Se(e){return Se="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Se(e)}var Pe=Object.values(z),_e=["century","decade","year","month"],ke=o().oneOf(Pe),Ee=o().oneOfType([o().string,o().arrayOf(o().string)]),xe=function(e,t,r){var n=e[t];if(!n)return null;if(!(n instanceof Date))return new Error("Invalid prop `".concat(t,"` of type `").concat(Se(n),"` supplied to `").concat(r,"`, expected instance of `Date`."));var a=e.maxDate;return a&&n>a?new Error("Invalid prop `".concat(t,"` of type `").concat(Se(n),"` supplied to `").concat(r,"`, minDate cannot be larger than maxDate.")):null},Te=function(e,t,r){var n=e[t];if(!n)return null;if(!(n instanceof Date))return new Error("Invalid prop `".concat(t,"` of type `").concat(Se(n),"` supplied to `").concat(r,"`, expected instance of `Date`."));var a=e.minDate;return a&&n<a?new Error("Invalid prop `".concat(t,"` of type `").concat(Se(n),"` supplied to `").concat(r,"`, maxDate cannot be smaller than minDate.")):null},Ae=o().oneOfType([o().func,o().shape({current:o().any})]),Ce=o().oneOfType([o().instanceOf(Date),o().arrayOf(o().instanceOf(Date))]),Ne=o().arrayOf(o().oneOf(_e)),Le=function(e,t,r){var n=e[t],a=e.views||_e;return void 0!==n&&-1===a.indexOf(n)?new Error("Invalid prop `".concat(t,"` of value `").concat(n,"` supplied to `").concat(r,"`, expected one of [").concat(a.map((function(e){return'"'.concat(e,'"')})).join(", "),"].")):null};Le.isRequired=function(e,t,r){var n=e[t];return n?Le(e,t,r):new Error("The prop `".concat(t,"` is marked as required in `").concat(r,"`, but its value is `").concat(n,"`."))};var Re={activeStartDate:o().instanceOf(Date).isRequired,hover:o().instanceOf(Date),locale:o().string,maxDate:Te,minDate:xe,onClick:o().func,onMouseOver:o().func,tileClassName:o().oneOfType([o().func,Ee]),tileContent:o().oneOfType([o().func,o().node]),value:Ce,valueType:
1o().string},Me={activeStartDate:o().instanceOf(Date).isRequired,classes:o().arrayOf(o().string).isRequired,date:o().instanceOf(Date).isRequired,locale:o().string,maxDate:Te,minDate:xe,onClick:o().func,onMouseOver:o().func,style:o().objectOf(o().oneOfType([o().string,o().number])),tileClassName:o().oneOfType([o().func,Ee]),tileContent:o().oneOfType([o().func,o().node]),tileDisabled:o().func},Ie="react-calendar__navigation";function We(e){var t,r=e.activeStartDate,a=e.drillUp,o=e.formatMonthYear,i=void 0===o?ce:o,c=e.formatYear,u=void 0===c?se:c,l=e.locale,s=e.maxDate,p=e.minDate,y=e.navigationAriaLabel,b=void 0===y?"":y,v=e.navigationAriaLive,d=e.navigationLabel,m=e.next2AriaLabel,O=void 0===m?"":m,h=e.next2Label,w=void 0===h?"»":h,j=e.nextAriaLabel,P=void 0===j?"":j,E=e.nextLabel,T=void 0===E?"âº":E,A=e.prev2AriaLabel,L=void 0===A?"":A,M=e.prev2Label,I=void 0===M?"«":M,W=e.prevAriaLabel,q=void 0===W?"":W,V=e.prevLabel,H=void 0===V?"â¹":V,B=e.setActiveStartDate,$=e.showDoubleView,G=e.view,J=e.views.indexOf(G)>0,Q="century"!==G,Z=function(e,t){switch(e){case"century":return g(t);case"decade":return _(t);case"year":return C(t);case"month":return Y(t);default:throw new Error("Invalid rangeType: ".concat(e))}}(G,r),K=Q&&function(e,t){switch(e){case"decade":return _(t,-100);case"year":return C(t,-10);case"month":return Y(t,-12);default:throw new Error("Invalid rangeType: ".concat(e))}}(G,r),X=me(G,r),z=Q&&function(e,t){switch(e){case"decade":return k(t,100);case"year":return N(t,10);case"month":return F(t,12);default:throw new Error("Invalid rangeType: ".concat(e))}}(G,r),ee=function(){if(Z.getFullYear()<0)return!0;var e=function(e,t){switch(e){case"century":return D(t);case"decade":return x(t);case"year":return R(t);case"month":return U(t);default:throw new Error("Invalid rangeType: ".concat(e))}}(G,r);return p&&p>=e}(),te=Q&&function(){if(K.getFullYear()<0)return!0;var e=function(e,t){switch(e){case"decade":return x(t,-100);case"year":return R(t,-10);case"month":return U(t,-12);default:throw new Error("Invalid rangeType: ".concat(e))}}(G,r);return p&&p>=e}(),re=s&&s<X,ne=Q&&s&&s<z;function ae(e){var t=function(){switch(G){case"century":return function(e,t,r){return we(e,t,S(r))}(l,u,e);case"decade":return je(l,u,e);case"year":return u(l,e);case"month":return i(l,e);default:throw new Error("Invalid view: ".concat(G,"."))}}();return d?d({date:e,label:t,locale:l||f(),view:G}):t}return n.createElement("div",{className:Ie},null!==I&&Q&&n.createElement("button",{"aria-label":L,className:"".concat(Ie,"__arrow ").concat(Ie,"__prev2-button"),disabled:te,onClick:function(){B(K,"prev2")},type:"button"},I),null!==H&&n.createElement("button",{"aria-label":q,className:"".concat(Ie,"__arrow ").concat(Ie,"__prev-button"),disabled:ee,onClick:function(){B(Z,"prev")},type:"button"},H),(t="".concat(Ie,"__label"),n.createElement("button",{"aria-label":b,"aria-live":v,className:t,disabled:!J,onClick:a,style:{flexGrow:1},type:"button"},n.createElement("span",{className:"".concat(t,"__labelText ").concat(t,"__labelText--from")},ae(r)),$&&n.createElement(n.Fragment,null,n.createElement("span",{className:"".concat(t,"__divider")}," â "),n.createElement("span",{className:"".concat(t,"__labelText ").concat(t,"__labelText--to")},ae(X))))),null!==T&&n.createElement("button",{"aria-label":P,className:"".concat(Ie,"__arrow ").concat(Ie,"__next-button"),disabled:re,onClick:function(){B(X,"next")},type:"button"},T),null!==w&&Q&&n.createElement("button",{"aria-label":O,className:"".concat(Ie,"__arrow ").concat(Ie,"__next2-button"),disabled:ne,onClick:function(){B(z,"next2")},type:"button"},w))}We.propTypes={activeStartDate:o().instanceOf(Date).isRequired,drillUp:o().func.isRequired,formatMonthYear:o().func,formatYear:o().func,locale:o().string,maxDate:o().instanceOf(Date),minDate:o().instanceOf(Date),navigationAriaLabel:o().string,navigationAriaLive:o().string,navigationLabel:o().func,next2AriaLabel:o().string,next2Label:o().node,nextAriaLabel:o().string,nextLabel:o().node,prev2AriaLabel:o().string,prev2Label:o().node,prevAriaLabel:o().string,prevLabel:o().node,setActiveStartDate:o().func.isRequired,showDoubleView:o().bool,view:Le.isRequired,views:Ne.isRequired};var Ye=["children","className","direction","count","offset","style","wrap"];function Fe(){return Fe=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];
1for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Fe.apply(this,arguments)}function qe(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Ue(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?qe(Object(r),!0).forEach((function(t){Ve(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):qe(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Ve(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function He(e){return"".concat(e,"%")}function Be(e){var t=e.children,r=e.className,a=e.direction,o=e.count,i=e.offset,c=e.style,u=e.wrap,l=function(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}(e,Ye);return n.createElement("div",Fe({className:r,style:Ue({display:"flex",flexDirection:a,flexWrap:u?"wrap":"no-wrap"},c)},l),n.Children.map(t,(function(e,t){return n.cloneElement(e,Ue(Ue({},e.props),{},{style:{flexBasis:He(100/o),flexShrink:0,flexGrow:0,overflow:"hidden",marginLeft:i&&0===t?He(100*i/o):null}}))})))}function $e(e){return function(e){if(Array.isArray(e))return Ge(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return Ge(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Ge(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Ge(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function Je(e,t){return t[0]<=e&&t[1]>=e}function Qe(e,t){return e[0]<=t[0]&&e[1]>=t[1]}function Ze(e,t){return Je(e[0],t)||Je(e[1],t)}function Ke(e,t,r){var n=[];if(Ze(t,e)){n.push(r);var a=Je(e[0],t),o=Je(e[1],t);a&&n.push("".concat(r,"Start")),o&&n.push("".concat(r,"End")),a&&o&&n.push("".concat(r,"BothEnds"))}return n}function Xe(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t=e.value,r=e.valueType,n=e.date,a=e.dateType,o=e.hover,i="react-calendar__tile",c=[i];if(!n)return c;if(!Array.isArray(n)&&!a)throw new Error("getTileClasses(): Unable to get tile activity classes because one or more required arguments were not passed.");var u=new Date,l=Array.isArray(n)?n:he(a,n);if(Je(u,l)&&c.push("".concat(i,"--now")),!t)return c;if(!Array.isArray(t)&&!r)throw new Error("getTileClasses(): Unable to get tile activity classes because one or more required arguments were not passed.");var s=Array.isArray(t)?t:he(r,t);Qe(s,l)?c.push("".concat(i,"--active")):Ze(s,l)&&c.push("".concat(i,"--hasActive"));var f=Ke(s,l,"".concat(i,"--range"));c.push.apply(c,$e(f));var p=[].concat(t);if(o&&1===p.length){var y=o>s[0]?[s[0],o]:[o,s[0]],b=Ke(y,l,"".concat(i,"--hover"));c.push.apply(c,$e(b))}return c}
1Be.propTypes={children:o().node,className:o().string,count:o().number.isRequired,direction:o().string,offset:o().number,style:o().objectOf(o().oneOfType([o().string,o().number])),wrap:o().bool};var ze=["className","count","dateTransform","dateType","end","hover","offset","start","step","tile","value","valueType"];function et(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function tt(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?et(Object(r),!0).forEach((function(t){rt(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):et(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function rt(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function nt(){return nt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},nt.apply(this,arguments)}function at(e){for(var t=e.className,r=e.count,a=void 0===r?3:r,o=e.dateTransform,i=e.dateType,c=e.end,u=e.hover,l=e.offset,s=e.start,f=e.step,p=void 0===f?1:f,y=e.tile,b=e.value,v=e.valueType,d=function(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}(e,ze),m=[],O=s;O<=c;O+=p){var h=o(O);m.push(n.createElement(y,nt({key:h.getTime(),classes:Xe({value:b,valueType:v,date:h,dateType:i,hover:u}),date:h,point:O},d)))}return n.createElement(Be,{className:t,count:a,offset:l,wrap:!0},m)}function ot(e){return ot="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ot(e)}function it(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function ct(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?it(Object(r),!0).forEach((function(t){bt(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):it(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function ut(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function lt(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function st(e,t){return st=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},st(e,t)}function ft(e,t){if(t&&("object"===ot(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return pt(e)}function pt(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function yt(e){return yt=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},yt(e)}function bt(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function vt(e,t){return e&&!t||!e&&t||e&&t&&e.getTime()!==t.getTime()}function dt(e,t){var r=e.activeStartDate,n=e.date,a=e.view;return"function"==typeof t?t({activeStartDate:r,date:n,view:a}):t}at.propTypes=tt(tt({},Re),{},{activeStartDate:o().instanceOf(Date),count:o().number,dateTransform:o().func.isRequired,dateType:
1o().string,offset:o().number,step:o().number,tile:o().func.isRequired});var mt=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&st(e,t)}(l,e);var t,r,a,o,c,u=(o=l,c=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,t=yt(o);if(c){var r=yt(this).constructor;e=Reflect.construct(t,arguments,r)}else e=t.apply(this,arguments);return ft(this,e)});function l(){var e;ut(this,l);for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];return bt(pt(e=u.call.apply(u,[this].concat(r))),"state",{}),e}return t=l,a=[{key:"getDerivedStateFromProps",value:function(e,t){var r=e.activeStartDate,n=e.tileClassName,a=e.tileContent,o={};return(n!==t.tileClassNameProps||vt(r,t.activeStartDateProps))&&(o.tileClassName=dt(e,n),o.tileClassNameProps=n),(a!==t.tileContentProps||vt(r,t.activeStartDateProps))&&(o.tileContent=dt(e,a),o.tileContentProps=a),o.activeStartDateProps=r,o}}],(r=[{key:"render",value:function(){var e=this.props,t=e.activeStartDate,r=e.children,a=e.classes,o=e.date,c=e.formatAbbr,u=e.locale,l=e.maxDate,s=e.maxDateTransform,f=e.minDate,p=e.minDateTransform,y=e.onClick,b=e.onMouseOver,v=e.style,d=e.tileDisabled,m=e.view,O=this.state,h=O.tileClassName,g=O.tileContent;return n.createElement("button",{className:i(a,h),disabled:f&&p(f)>o||l&&s(l)<o||d&&d({activeStartDate:t,date:o,view:m}),onClick:y&&function(e){return y(o,e)},onFocus:b&&function(){return b(o)},onMouseOver:b&&function(){return b(o)},style:v,type:"button"},c?n.createElement("abbr",{"aria-label":c(u,o)},r):r,g)}}])&<(t.prototype,r),a&<(t,a),Object.defineProperty(t,"prototype",{writable:!1}),l}(n.Component);mt.propTypes=ct(ct({},Me),{},{children:o().node.isRequired,formatAbbr:o().func,maxDateTransform:o().func.isRequired,minDateTransform:o().func.isRequired});var Ot=["classes","formatYear"];function ht(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function gt(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ht(Object(r),!0).forEach((function(t){wt(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ht(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function wt(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function jt(){return jt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},jt.apply(this,arguments)}function Dt(e){var t=e.classes,r=e.formatYear,a=void 0===r?se:r,o=function(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}(e,Ot),i=o.date,c=o.locale;return n.createElement(mt,jt({},o,{classes:[].concat(t,"react-calendar__century-view__decades__decade"),maxDateTransform:E,minDateTransform:P,view:"century"}),je(c,a,i))}function St(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Pt(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function _t(){return _t=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];
1for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},_t.apply(this,arguments)}function kt(e){var t=d(h(e.activeStartDate)),r=t+99;return n.createElement(at,_t({},e,{className:"react-calendar__century-view__decades",dateTransform:P,dateType:"decade",end:r,start:t,step:10,tile:Dt}))}function Et(e){return n.createElement("div",{className:"react-calendar__century-view"},n.createElement(kt,e))}Dt.propTypes=gt(gt({},Me),{},{formatYear:o().func}),kt.propTypes=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?St(Object(r),!0).forEach((function(t){Pt(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):St(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({},Re);var xt=["classes","formatYear"];function Tt(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function At(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Tt(Object(r),!0).forEach((function(t){Ct(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Tt(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Ct(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Nt(){return Nt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Nt.apply(this,arguments)}function Lt(e){var t=e.classes,r=e.formatYear,a=void 0===r?se:r,o=function(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}(e,xt),i=o.date,c=o.locale;return n.createElement(mt,Nt({},o,{classes:[].concat(t,"react-calendar__decade-view__years__year"),maxDateTransform:L,minDateTransform:A,view:"decade"}),a(c,i))}function Rt(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Mt(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function It(){return It=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},It.apply(this,arguments)}function Wt(e){var t=d(P(e.activeStartDate)),r=t+9;return n.createElement(at,It({},e,{className:"react-calendar__decade-view__years",dateTransform:function(e){var t=new Date;return t.setFullYear(e,0,1),t.setHours(0,0,0,0),t},dateType:"year",end:r,start:t,tile:Lt}))}function Yt(e){return n.createElement("div",{className:"react-calendar__decade-view"},n.createElement(Wt,e))}Lt.propTypes=At(At({},Me),{},{formatYear:o().func}),Wt.propTypes=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Rt(Object(r),!0).forEach((function(t){Mt(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Rt(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({},Re);var Ft=["classes","formatMonth","formatMonthYear"];function qt(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Ut(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};
1t%2?qt(Object(r),!0).forEach((function(t){Vt(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):qt(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Vt(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ht(){return Ht=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Ht.apply(this,arguments)}function Bt(e){var t=e.classes,r=e.formatMonth,a=void 0===r?ie:r,o=e.formatMonthYear,i=void 0===o?ce:o,c=function(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}(e,Ft),u=c.date,l=c.locale;return n.createElement(mt,Ht({},c,{classes:[].concat(t,"react-calendar__year-view__months__month"),formatAbbr:i,maxDateTransform:q,minDateTransform:W,view:"year"}),a(l,u))}function $t(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Gt(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?$t(Object(r),!0).forEach((function(t){Jt(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):$t(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Jt(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Qt(){return Qt=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Qt.apply(this,arguments)}function Zt(e){var t=d(e.activeStartDate);return n.createElement(at,Qt({},e,{className:"react-calendar__year-view__months",dateTransform:function(e){var r=new Date;return r.setFullYear(t,e,1),r.setHours(0,0,0,0),r},dateType:"month",end:11,start:0,tile:Bt}))}function Kt(e){return n.createElement("div",{className:"react-calendar__year-view"},n.createElement(Zt,e))}Bt.propTypes=Ut(Ut({},Me),{},{formatMonth:o().func,formatMonthYear:o().func}),Zt.propTypes=Gt(Gt({},Re),{},{locale:o().string});var Xt=["formatDay","formatLongDate","calendarType","classes","currentMonthIndex"];function zt(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function er(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?zt(Object(r),!0).forEach((function(t){tr(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):zt(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function tr(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function rr(){return rr=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},rr.apply(this,arguments)}var nr="react-calendar__month-view__days__day";function ar(e){var t=e.formatDay,r=void 0===t?ae:t,a=e.formatLongDate,o=void 0===a?oe:a,i=e.calendarType,c=e.classes,u=e.currentMonthIndex,l=function(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}(e,Xt),s=l.date,f=l.locale;return n.createElement(mt,rr({},l,{classes:[].concat(c,nr,De(s,i)?"".concat(nr,"--weekend"):null,s.getMonth()!==u?"".concat(nr,"--neighboringMonth"):null),formatAbbr:o,maxDateTransform:G,minDateTransform:B,view:"month"}),r(f,s))}ar.propTypes=er(er({},Me),{},{currentMonthIndex:o().number.isRequired,formatDay:o().func,formatLongDate:o().func});
1var or=["showFixedNumberOfWeeks","showNeighboringMonth"];function ir(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function cr(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ur(){return ur=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},ur.apply(this,arguments)}function lr(e){var t=e.activeStartDate,r=e.calendarType,a=e.showFixedNumberOfWeeks,o=e.showNeighboringMonth,i=function(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}(e,or),c=d(t),u=m(t),l=a||o,s=be(t,r),f=l?0:s,p=1+(l?-s:0),y=function(){if(a)return p+42-1;var e=Q(t);if(o){var n=new Date;
1return n.setFullYear(c,u,e),n.setHours(0,0,0,0),e+(7-be(n,r)-1)}return e}();return n.createElement(at,ur({},i,{className:"react-calendar__month-view__days",count:7,currentMonthIndex:u,dateTransform:function(e){var t=new Date;return t.setFullYear(c,u,e),t.setHours(0,0,0,0),t},dateType:"day",end:y,offset:f,start:p,tile:ar}))}lr.propTypes=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?ir(Object(r),!0).forEach((function(t){cr(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):ir(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({calendarType:ke.isRequired,showFixedNumberOfWeeks:o().bool,showNeighboringMonth:o().bool},Re);var sr="react-calendar__month-view__weekdays",fr="".concat(sr,"__weekday");function pr(e){for(var t=e.calendarType,r=e.formatShortWeekday,a=void 0===r?ue:r,o=e.formatWeekday,c=void 0===o?le:o,u=e.locale,l=e.onMouseLeave,s=W(new Date),f=d(s),p=m(s),y=[],b=1;b<=7;b+=1){var v=new Date(f,p,b-be(s,t)),O=c(u,v);y.push(n.createElement("div",{key:b,className:i(fr,De(v,t)&&"".concat(fr,"--weekend"))},n.createElement("abbr",{"aria-label":O,title:O},a(u,v).replace(".",""))))}return n.createElement(Be,{className:sr,count:7,onFocus:l,onMouseOver:l},y)}pr.propTypes={calendarType:ke.isRequired,formatShortWeekday:o().func,formatWeekday:o().func,locale:o().string,onMouseLeave:o().func};var yr=["date","onClickWeekNumber","weekNumber"];function br(){return br=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},br.apply(this,arguments)}function vr(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function dr(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function mr(e){var t=e.date,r=e.onClickWeekNumber,a=e.weekNumber,o=function(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?vr(Object(r),!0).forEach((function(t){dr(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):vr(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}({className:"react-calendar__tile"},function(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}(e,yr)),i=n.createElement("span",null,a);return r?n.createElement("button",br({},o,{onClick:function(e){return r(a,t,e)},type:"button"}),i):n.createElement("div",o,i)}function Or(e){var t=e.activeStartDate,r=e.calendarType,a=e.onClickWeekNumber,o=e.onMouseLeave,i=e.showFixedNumberOfWeeks,c=function(){if(i)return 6;var e=Q(t)-(7-be(t,r));return 1+Math.ceil(e/7)}(),u=function(){for(var e=d(t),n=m(t),a=O(t),o=[],i=0;i<c;i+=1)o.push(ve(new Date(e,n,a+7*i),r));return o}(),l=u.map((function(e){return function(e){var t,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:z.ISO_8601,n=r===z.US?z.US:z.ISO_8601,a=ve(e,r),o=d(e)+1;do{t=ve(new Date(o,0,n===z.ISO_8601?4:1),r),o-=1}while(e<t);return Math.round((a-t)/6048e5)+1}(e,r)}));return n.createElement(Be,{className:"react-calendar__month-view__weekNumbers",count:c,direction:"column",onFocus:o,onMouseOver:o,style:{flexBasis:"calc(100% * (1 / 8)",flexShrink:0}},l.map((function(e,t){return n.createElement(mr,{key:e,date:u[t],onClickWeekNumber:a,weekNumber:e})})))}mr.propTypes={date:o().instanceOf(Date).isRequired,onClickWeekNumber:o().func,weekNumber:o().node.isRequired},Or.propTypes={activeStartDate:o().instanceOf(Date).isRequired,calendarType:ke.isRequired,onClickWeekNumber:o().func,onMouseLeave:o().func,showFixedNumberOfWeeks:o().bool};var hr=["calendarType","formatShortWeekday","formatWeekday","onClickWeekNumber","showWeekNumbers"];function gr(){return gr=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];
1for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},gr.apply(this,arguments)}function wr(e){var t=e.activeStartDate,r=e.locale,a=e.onMouseLeave,o=e.showFixedNumberOfWeeks,c=e.calendarType,u=void 0===c?function(e){return Object.keys(ee).find((function(t){return ee[t].includes(e)}))||z.ISO_8601}(r):c,l=e.formatShortWeekday,s=e.formatWeekday,f=e.onClickWeekNumber,p=e.showWeekNumbers,y=function(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}(e,hr),b="react-calendar__month-view";return n.createElement("div",{className:i(b,p?"".concat(b,"--weekNumbers"):"")},n.createElement("div",{style:{display:"flex",alignItems:"flex-end"}},p?n.createElement(Or,{activeStartDate:t,calendarType:u,onClickWeekNumber:f,onMouseLeave:a,showFixedNumberOfWeeks:o}):null,n.createElement("div",{style:{flexGrow:1,width:"100%"}},n.createElement(pr,{calendarType:u,formatShortWeekday:l,formatWeekday:s,locale:r,onMouseLeave:a}),n.createElement(lr,gr({calendarType:u},y)))))}wr.propTypes={activeStartDate:o().instanceOf(Date).isRequired,calendarType:ke,formatShortWeekday:o().func,formatWeekday:o().func,locale:o().string,onClickWeekNumber:o().func,onMouseLeave:o().func,showFixedNumberOfWeeks:o().bool,showWeekNumbers:o().bool};var jr=["activeStartDate","defaultActiveStartDate","defaultValue","defaultView","maxDetail","minDetail","value","view"];function Dr(){return Dr=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(e[n]=r[n])}return e},Dr.apply(this,arguments)}function Sr(e){return Sr="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Sr(e)}function Pr(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function _r(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function kr(e,t){return kr=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},kr(e,t)}function Er(e,t){if(t&&("object"===Sr(t)||"function"==typeof t))return t;if(void 0!==t)throw new TypeError("Derived constructors may only return object or undefined");return xr(e)}function xr(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function Tr(e){return Tr=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(e){return e.__proto__||Object.getPrototypeOf(e)},Tr(e)}function Ar(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function Cr(e){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{};t%2?Ar(Object(r),!0).forEach((function(t){Nr(e,t,r[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):Ar(Object(r)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(r,t))}))}return e}function Nr(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Lr(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}var Rr=new Date;Rr.setFullYear(1,0,1),Rr.setHours(0,0,0,0);var Mr=new Date(864e13),Ir="react-calendar",Wr=["century","decade","year","month"],Yr=[].concat(function(e){return function(e){if(Array.isArray(e))return Lr(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return Lr(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?Lr(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(Wr.slice(1)),["day"]);function Fr(e,t){return Wr.slice(Wr.indexOf(e),Wr.indexOf(t)+1)}function qr(e,t,r){return function(e,t,r){return-1!==Fr(t,r).indexOf(e)}(e,t,r)?e:r}function Ur(e){return Yr[Wr.indexOf(e)]}function Vr(e,t){var r=e.value,n=e.minDate,a=e.maxDate,o=e.maxDetail,i=function(e,t){if(!e)return null;var r=Array.isArray(e)&&2===e.length?e[t]:e;if(!r)return null;var n=function(e){return e instanceof Date?e:new Date(e)}(r);if(isNaN(n.getTime()))throw new Error("Invalid date: ".concat(e));return n}(r,t);if(!i)return null;var c=Ur(o);return function(e,t,r){return t&&t>e?t:r&&r<e?r:e}([de,Oe][t](c,i),n,a)}var Hr=function(e){return Vr(e,0)},Br=function(e){return Vr(e,1)},$r=function(e){var t=e.value;return Array.isArray(t)?t:[Hr,Br].map((function(t){return t(e)}))};function Gr(e){var t=e.maxDate,r=e.maxDetail,n=e.minDate,a=e.minDetail,o=e.value;return de(qr(e.view,a,r),Hr({value:o,minDate:n,maxDate:t,maxDetail:r})||new Date)}var Jr=function(e){return e&&1===[].concat(e).length},Qr=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&kr(e,t)}(u,e);var t,r,a,o,c=(a=u,o=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}(),function(){var e,t=Tr(a);if(o){var r=Tr(this).constructor;e=Reflect.construct(t,arguments,r)}else e=t.apply(this,arguments);return Er(this,e)});function u(){var e;Pr(this,u);for(var t=arguments.length,r=new Array(t),n=0;n<t;n++)r[n]=arguments[n];return Nr(xr(e=c.call.apply(c,[this].concat(r))),"state",{activeStartDate:e.props.defaultActiveStartDate,value:e.props.defaultValue,view:e.props.defaultView}),Nr(xr(e),"setStateAndCallCallbacks",(function(t,r,n){var a=xr(e),o=a.activeStartDate,i=a.view,c=e.props,u=c.allowPartialRange,l=c.onActiveStartDateChange,s=c.onChange,f
1=c.onViewChange,p=c.selectRange,y={activeStartDate:o,view:i};e.setState(t,(function(){var a={action:t.action,activeStartDate:t.activeStartDate||e.activeStartDate,value:t.value||e.value,view:t.view||e.view};function o(e){return e in t&&(Sr(t[e])!==Sr(y[e])||(t[e]instanceof Date?t[e].getTime()!==y[e].getTime():t[e]!==y[e]))}o("activeStartDate")&&l&&l(a),o("view")&&f&&f(a),o("value")&&s&&(p&&Jr(t.value)?u&&s([t.value],r):s(t.value,r)),n&&n(a)}))})),Nr(xr(e),"setActiveStartDate",(function(t,r){e.setStateAndCallCallbacks({action:r,activeStartDate:t})})),Nr(xr(e),"drillDown",(function(t,r){if(e.drillDownAvailable){e.onClickTile(t,r);var n=xr(e),a=n.view,o=n.views,i=e.props.onDrillDown,c=o[o.indexOf(a)+1];e.setStateAndCallCallbacks({action:"drillDown",activeStartDate:t,view:c},void 0,i)}})),Nr(xr(e),"drillUp",(function(){if(e.drillUpAvailable){var t=xr(e),r=t.activeStartDate,n=t.view,a=t.views,o=e.props.onDrillUp,i=a[a.indexOf(n)-1],c=de(i,r);e.setStateAndCallCallbacks({action:"drillUp",activeStartDate:c,view:i},void 0,o)}})),Nr(xr(e),"onChange",(function(t,r){var n=xr(e).value,a=e.props,o=a.goToRangeStartOnSelect,i=a.selectRange;e.onClickTile(t,r);var c,u=i&&!Jr(n);if(i){var l=xr(e).valueType;c=u?de(l,t):ge(l,n,t)}else c=e.getProcessedValue(t);var s=!i||u||o?Gr(Cr(Cr({},e.props),{},{value:c})):null;r.persist(),e.setStateAndCallCallbacks({action:"onChange",activeStartDate:s,value:c},r)})),Nr(xr(e),"onClickTile",(function(t,r){var n=xr(e).view,a=e.props,o=a.onClickDay,i=a.onClickDecade,c=a.onClickMonth,u=a.onClickYear,l=function(){switch(n){case"century":return i;case"decade":return u;case"year":return c;case"month":return o;default:throw new Error("Invalid view: ".concat(n,"."))}}();l&&l(t,r)})),Nr(xr(e),"onMouseOver",(function(t){e.setState((function(e){return e.hover&&e.hover.getTime()===t.getTime()?null:{hover:t}}))})),Nr(xr(e),"onMouseLeave",(function(){e.setState({hover:null})})),e}return t=u,r=[{key:"activeStartDate",get:function(){var e,t,r,n,a,o,i,c,u,l,s,f,p=this.props.activeStartDate,y=this.state.activeStartDate;return p||y||(t=(e=this.props).activeStartDate,r=e.defaultActiveStartDate,n=e.defaultValue,a=e.defaultView,o=e.maxDetail,i=e.minDetail,c=e.value,u=e.view,l=function(e,t){if(null==e)return{};var r,n,a=function(e,t){if(null==e)return{};var r,n,a={},o=Object.keys(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n<o.length;n++)r=o[n],t.indexOf(r)>=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}(e,jr),s=qr(u,i,o),(f=t||r)?de(s,f):Gr(Cr({maxDetail:o,minDetail:i,value:c||n,view:u||a},l)))}},{key:"value",get:function(){var e=this.props,t=e.selectRange,r=e.value,n=this.state.value;return t&&Jr(n)?n:void 0!==r?r:n}},{key:"valueType",get:function(){return Ur(this.props.maxDetail)}},{key:"view",get:function(){var e=this.props,t=e.minDetail,r=e.maxDetail,n=e.view,a=this.state.view;return qr(n||a,t,r)}},{key:"views",get:function(){var e=this.props;return Fr(e.minDetail,e.maxDetail)}},{key:"hover",get:function(){var e=this.props.selectRange,t=this.state.hover;return e?t:null}},{key:"drillDownAvailable",get:function(){var e=this.view,t=this.views;return t.indexOf(e)<t.length-1}},{key:"drillUpAvailable",get:function(){var e=this.view;return this.views.indexOf(e)>0}},{key:"getProcessedValue",value:function(e){var t=this.props,r=t.minDate,n=t.maxDate,a=t.maxDetail,o=t.returnValue;return function(){switch(o){case"start":return Hr;case"end":return Br;case"range":return $r;default:throw new Error("Invalid returnValue.")}}()({value:e,minDate:r,maxDate:n,maxDetail:a})}},{key:"renderContent",value:function(e){var t=this.activeStartDate,r=this.onMouseOver,a=this.valueType,o=this.value,i=this.view,c=this.props,u=c.calendarType,l=c.locale,s=c.maxDate,f=c.minDate,p=c.selectRange,y=c.tileClassName,b=c.tileContent,v=c.tileDisabled,d=this.hover,m={activeStartDate:e?me(i,t):de(i,t),hover:d,locale:l,maxDate:s,minDate:f,onClick:this.drillDownAvailable?this.drillDown:this.onChange,onMouseOver:p?r:null,tileClassName:y,tileContent:b,tileDisabled:v,value:o,valueType:a};switch(i){case"century":var O=this.props.formatYear;return n.createElement(Et,Dr({formatYear:O},m));case"decade":var h=this.props.formatYear;return n.createElement(Yt,Dr({formatYear:h},m));case"year":var g=this.props,w=g.formatMonth,j=g.formatMonthYear;return n.createElement(Kt,Dr({formatMonth:w,formatMonthYear:j},m));case"month":var D=this.props,S=D.formatDay,P=D.formatLongDate,_=D.formatShortWeekday,k=D.formatWeekday,E=D.onClickWeekNumber,x=D.showDoubleView,T=D.showFixedNumberOfWeeks,A=D.showNeighboringMonth,C=D.showWeekNumbers,N=this.onMouseLeave;return n.createElement(wr,Dr({calendarType:u,formatDay:S,formatLongDate:P,formatShortWeekday:_,formatWeekday:k,onClickWeekNumber:E,onMouseLeave:p?N:null,
1showFixedNumberOfWeeks:void 0!==T?T:x,showNeighboringMonth:A,showWeekNumbers:C},m));default:throw new Error("Invalid view: ".concat(i,"."))}}},{key:"renderNavigation",value:function(){if(!this.props.showNavigation)return null;var e=this.activeStartDate,t=this.view,r=this.views,a=this.props,o=a.formatMonthYear,i=a.formatYear,c=a.locale,u=a.maxDate,l=a.minDate,s=a.navigationAriaLabel,f=a.navigationAriaLive,p=a.navigationLabel,y=a.next2AriaLabel,b=a.next2Label,v=a.nextAriaLabel,d=a.nextLabel,m=a.prev2AriaLabel,O=a.prev2Label,h=a.prevAriaLabel,g=a.prevLabel,w=a.showDoubleView;return n.createElement(We,{activeStartDate:e,drillUp:this.drillUp,formatMonthYear:o,formatYear:i,locale:c,maxDate:u,minDate:l,navigationAriaLabel:s,navigationAriaLive:f,navigationLabel:p,next2AriaLabel:y,next2Label:b,nextAriaLabel:v,nextLabel:d,prev2AriaLabel:m,prev2Label:O,prevAriaLabel:h,prevLabel:g,setActiveStartDate:this.setActiveStartDate,showDoubleView:w,view:t,views:r})}},{key:"render",value:function(){var e=this.props,t=e.className,r=e.inputRef,a=e.selectRange,o=e.showDoubleView,c=this.onMouseLeave,u=this.value,l=[].concat(u);return n.createElement("div",{className:i(Ir,a&&1===l.length&&"".concat(Ir,"--selectRange"),o&&"".concat(Ir,"--doubleView"),t),ref:r},this.renderNavigation(),n.createElement("div",{className:"".concat(Ir,"__viewContainer"),onBlur:a?c:null,onMouseLeave:a?c:null},this.renderContent(),o&&this.renderContent(!0)))}}],r&&_r(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),u}(n.Component);Qr.defaultProps={goToRangeStartOnSelect:!0,maxDate:Mr,maxDetail:"month",minDate:Rr,minDetail:"century",returnValue:"start",showNavigation:!0,showNeighboringMonth:!0};var Zr=o().instanceOf(Date),Kr=o().oneOfType([o().string,Ce]);Qr.propTypes={activeStartDate:Zr,allowPartialRange:o().bool,calendarType:ke,className:Ee,defaultActiveStartDate:Zr,defaultValue:Kr,defaultView:Le,formatDay:o().func,formatLongDate:o().func,formatMonth:o().func,formatMonthYear:o().func,formatShortWeekday:o().func,formatWeekday:o().func,formatYear:o().func,goToRangeStartOnSelect:o().bool,inputRef:Ae,locale:o().string,maxDate:Te,maxDetail:o().oneOf(Wr),minDate:xe,minDetail:o().oneOf(Wr),navigationAriaLabel:o().string,navigationAriaLive:o().oneOf(["off","polite","assertive"]),navigationLabel:o().func,next2AriaLabel:o().string,next2Label:o().node,nextAriaLabel:o().string,nextLabel:o().node,onActiveStartDateChange:o().func,onChange:o().func,onClickDay:o().func,onClickDecade:o().func,onClickMonth:o().func,onClickWeekNumber:o().func,onClickYear:o().func,onDrillDown:o().func,onDrillUp:o().func,onViewChange:o().func,prev2AriaLabel:o().string,prev2Label:o().node,prevAriaLabel:o().string,prevLabel:o().node,returnValue:o().oneOf(["start","end","range"]),selectRange:o().bool,showDoubleView:o().bool,showFixedNumberOfWeeks:o().bool,showNavigation:o().bool,showNeighboringMonth:o().bool,showWeekNumbers:o().bool,tileClassName:o().oneOfType([o().func,Ee]),tileContent:o().oneOfType([o().func,o().node]),tileDisabled:o().func,value:Kr,view:Le}}}]); 2//# sourceMappingURL=data:application/json;charset=utf-8;base64,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CxZQUFhclIsR0FDYjRNLFVBQVcsU0FDWEUsZUFBZ0IsU0FDaEJQLFlBQWEsU0FDYmpMLGdCQUFpQixTQUNqQm9NLG1CQUFvQixTQUNwQkUsY0FBZSxTQUNmalAsV0FBWSxTQUNaaVUsdUJBQXdCLFNBQ3hCaUMsU0FBVWpWLEdBQ1ZoRCxPQUFRLFdBQ1I4QyxRQUFTQyxHQUNUcVEsVUFBVyxVQUFnQixJQUMzQnZRLFFBQVNKLEdBQ1QwUSxVQUFXLFVBQWdCLElBQzNCdE8sb0JBQXFCLFdBQ3JCQyxtQkFBb0IsVUFBZ0IsQ0FBQyxNQUFPLFNBQVUsY0FDdERDLGdCQUFpQixTQUNqQkUsZUFBZ0IsV0FDaEJFLFdBQVksU0FDWkUsY0FBZSxXQUNmRSxVQUFXLFNBQ1h1UCx3QkFBeUIsU0FDekJDLFNBQVUsU0FDVnVCLFdBQVksU0FDWkMsY0FBZSxTQUNmQyxhQUFjLFNBQ2RoRixrQkFBbUIsU0FDbkJpRixZQUFhLFNBQ2JmLFlBQWEsU0FDYkcsVUFBVyxTQUNYYixhQUFjLFNBQ2R2UCxlQUFnQixXQUNoQkUsV0FBWSxTQUNaRSxjQUFlLFdBQ2ZFLFVBQVcsU0FDWHFSLFlBQWEsVUFBZ0IsQ0FBQyxRQUFTLE1BQU8sVUFDOUNuQyxZQUFhLFNBQ2JoUCxlQUFnQixTQUNoQm9LLHVCQUF3QixTQUN4QnlILGVBQWdCLFNBQ2hCeEgscUJBQXNCLFNBQ3RCcUMsZ0JBQWlCLFNBQ2pCN08sY0FBZSxjQUFvQixDQUFDLFNBQWdCdEIsS0FDcER1QixZQUFhLGNBQW9CLENBQUMsU0FBZ0IsV0FDbERLLGFBQWMsU0FDZDVPLE1BQU9nakIsR0FDUG5WLEtBQU1ELEciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zZXJ2aWNlLy4vbm9kZV9tb2R1bGVzL2xvZGFzaC5tZW1vaXplL2luZGV4LmpzIiwid2VicGFjazovL3NlcnZpY2UvLi9ub2RlX21vZHVsZXMvbWVyZ2UtY2xhc3MtbmFtZXMvZGlzdC9lc20vaW5kZXguanMiLCJ3ZWJwYWNrOi8vc2VydmljZS8uL25vZGVfbW9kdWxlcy9nZXQtdXNlci1sb2NhbGUvZGlzdC9lc20vaW5kZXguanMiLCJ3ZWJwYWNrOi8vc2VydmljZS8uL25vZGVfbW9kdWxlcy9Ad29qdGVrbWFqL2RhdGUtdXRpbHMvZGlzdC9lc20vaW5kZXguanMiLCJ3ZWJwYWNrOi8vc2VydmljZS8uL25vZGVfbW9kdWxlcy9yZWFjdC1jYWxlbmRhci9kaXN0L2VzbS9zaGFyZWQvY29uc3QuanMiLCJ3ZWJwYWNrOi8vc2VydmljZS8uL25vZGVfbW9kdWxlcy9yZWFjdC1jYWxlbmRhci9kaXN0L2VzbS9zaGFyZWQvZGF0ZUZvcm1hdHRlci5qcyIsIndlYnBhY2s6Ly9zZXJ2aWNlLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWNhbGVuZGFyL2Rpc3QvZXNtL3NoYXJlZC9kYXRlcy5qcyIsIndlYnBhY2s6Ly9zZXJ2aWNlLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWNhbGVuZGFyL2Rpc3QvZXNtL3NoYXJlZC9wcm9wVHlwZXMuanMiLCJ3ZWJwYWNrOi8vc2VydmljZS8uL25vZGVfbW9kdWxlcy9yZWFjdC1jYWxlbmRhci9kaXN0L2VzbS9DYWxlbmRhci9OYXZpZ2F0aW9uLmpzIiwid2VicGFjazovL3NlcnZpY2UvLi9ub2RlX21vZHVsZXMvcmVhY3QtY2FsZW5kYXIvZGlzdC9lc20vRmxleC5qcyIsIndlYnBhY2s6Ly9zZXJ2aWNlLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWNhbGVuZGFyL2Rpc3QvZXNtL3NoYXJlZC91dGlscy5qcyIsIndlYnBhY2s6Ly9zZXJ2aWNlLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWNhbGVuZGFyL2Rpc3QvZXNtL1RpbGVHcm91cC5qcyIsIndlYnBhY2s6Ly9zZXJ2aWNlLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWNhbGVuZGFyL2Rpc3QvZXNtL1RpbGUuanMiLCJ3ZWJwYWNrOi8vc2VydmljZS8uL25vZGVfbW9kdWxlcy9yZWFjdC1jYWxlbmRhci9kaXN0L2VzbS9DZW50dXJ5Vmlldy9EZWNhZGUuanMiLCJ3ZWJwYWNrOi8vc2VydmljZS8uL25vZGVfbW9kdWxlcy9yZWFjdC1jYWxlbmRhci9kaXN0L2VzbS9DZW50dXJ5Vmlldy9EZWNhZGVzLmpzIiwid2VicGFjazovL3NlcnZpY2UvLi9ub2RlX21vZHVsZXMvcmVhY3QtY2FsZW5kYXIvZGlzdC9lc20vQ2VudHVyeVZpZXcuanMiLCJ3ZWJwYWNrOi8vc2VydmljZS8uL25vZGVfbW9kdWxlcy9yZWFjdC1jYWxlbmRhci9kaXN0L2VzbS9EZWNhZGVWaWV3L1llYXIuanMiLCJ3ZWJwYWNrOi8vc2VydmljZS8uL25vZGVfbW9kdWxlcy9yZWFjdC1jYWxlbmRhci9kaXN0L2VzbS9EZWNhZGVWaWV3L1llYXJzLmpzIiwid2VicGFjazovL3NlcnZpY2UvLi9ub2RlX21vZHVsZXMvcmVhY3QtY2FsZW5kYXIvZGlzdC9lc20vRGVjYWRlVmlldy5qcyIsIndlYnBhY2s6Ly9zZXJ2aWNlLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWNhbGVuZGFyL2Rpc3QvZXNtL1llYXJWaWV3L01vbnRoLmpzIiwid2VicGFjazovL3NlcnZpY2UvLi9ub2RlX21vZHVsZXMvcmVhY3QtY2FsZW5kYXIvZGlzdC9lc20vWWVhclZpZXcvTW9udGhzLmpzIiwid2VicGFjazovL3NlcnZpY2UvLi9ub2RlX21vZHVsZXMvcmVhY3QtY2FsZW5kYXIvZGlzdC9lc20vWWVhclZpZXcuanMiLCJ3ZWJwYWNrOi8vc2VydmljZS8uL25vZGVfbW9kdWxlcy9yZWFjdC1jYWxlbmRhci9kaXN0L2VzbS9Nb250aFZpZXcvRGF5LmpzIiwid2VicGFjazovL3NlcnZpY2UvLi9ub2RlX21vZHVsZXMvcmVhY3QtY2FsZW5kYXIvZGlzdC9lc20vTW9udGhWaWV3L0RheXMuanMiLCJ3ZWJwYWNrOi8vc2VydmljZS8uL25vZGVfbW9kdWxlcy9yZWFjdC1jYWxlbmRhci9kaXN0L2VzbS9Nb250aFZpZXcvV2Vla2RheXMuanMiLCJ3ZWJwYWNrOi8vc2VydmljZS8uL25vZGVfbW9kdWxlcy9yZWFjdC1jYWxlbmRhci9kaXN0L2VzbS9Nb250aFZpZXcvV2Vla051bWJlci5qcyIsIndlYnBhY2s6Ly9zZXJ2aWNlLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWNhbGVuZGFyL2Rpc3QvZXNtL01vbnRoVmlldy9XZWVrTnVtYmVycy5qcyIsIndlYnBhY2s6Ly9zZXJ2aWNlLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWNhbGVuZGFyL2Rpc3QvZXNtL01vbnRoVmlldy5qcyIsIndlYnBhY2s6Ly9zZXJ2aWNlLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWNhbGVuZGFyL2Rpc3QvZXNtL0NhbGVuZGFyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogbG9kYXNoIChDdXN0b20gQnVpbGQpIDxodHRwczovL2xvZGFzaC5jb20vPlxuICogQnVpbGQ6IGBsb2Rhc2ggbW9kdWxhcml
26ZSBleHBvcnRzPVwibnBtXCIgLW8gLi9gXG4gKiBDb3B5cmlnaHQgalF1ZXJ5IEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9ycyA8aHR0cHM6Ly9qcXVlcnkub3JnLz5cbiAqIFJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlIDxodHRwczovL2xvZGFzaC5jb20vbGljZW5zZT5cbiAqIEJhc2VkIG9uIFVuZGVyc2NvcmUuanMgMS44LjMgPGh0dHA6Ly91bmRlcnNjb3JlanMub3JnL0xJQ0VOU0U+XG4gKiBDb3B5cmlnaHQgSmVyZW15IEFzaGtlbmFzLCBEb2N1bWVudENsb3VkIGFuZCBJbnZlc3RpZ2F0aXZlIFJlcG9ydGVycyAmIEVkaXRvcnNcbiAqL1xuXG4vKiogVXNlZCBhcyB0aGUgYFR5cGVFcnJvcmAgbWVzc2FnZSBmb3IgXCJGdW5jdGlvbnNcIiBtZXRob2RzLiAqL1xudmFyIEZVTkNfRVJST1JfVEVYVCA9ICdFeHBlY3RlZCBhIGZ1bmN0aW9uJztcblxuLyoqIFVzZWQgdG8gc3RhbmQtaW4gZm9yIGB1bmRlZmluZWRgIGhhc2ggdmFsdWVzLiAqL1xudmFyIEhBU0hfVU5ERUZJTkVEID0gJ19fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18nO1xuXG4vKiogYE9iamVjdCN0b1N0cmluZ2AgcmVzdWx0IHJlZmVyZW5jZXMuICovXG52YXIgZnVuY1RhZyA9ICdbb2JqZWN0IEZ1bmN0aW9uXScsXG4gICAgZ2VuVGFnID0gJ1tvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dJztcblxuLyoqXG4gKiBVc2VkIHRvIG1hdGNoIGBSZWdFeHBgXG4gKiBbc3ludGF4IGNoYXJhY3RlcnNdKGh0dHA6Ly9lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLXBhdHRlcm5zKS5cbiAqL1xudmFyIHJlUmVnRXhwQ2hhciA9IC9bXFxcXF4kLiorPygpW1xcXXt9fF0vZztcblxuLyoqIFVzZWQgdG8gZGV0ZWN0IGhvc3QgY29uc3RydWN0b3JzIChTYWZhcmkpLiAqL1xudmFyIHJlSXNIb3N0Q3RvciA9IC9eXFxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXFxdJC87XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgZ2xvYmFsYCBmcm9tIE5vZGUuanMuICovXG52YXIgZnJlZUdsb2JhbCA9IHR5cGVvZiBnbG9iYWwgPT0gJ29iamVjdCcgJiYgZ2xvYmFsICYmIGdsb2JhbC5PYmplY3QgPT09IE9iamVjdCAmJiBnbG9iYWw7XG5cbi8qKiBEZXRlY3QgZnJlZSB2YXJpYWJsZSBgc2VsZmAuICovXG52YXIgZnJlZVNlbGYgPSB0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmICYmIHNlbGYuT2JqZWN0ID09PSBPYmplY3QgJiYgc2VsZjtcblxuLyoqIFVzZWQgYXMgYSByZWZlcmVuY2UgdG8gdGhlIGdsb2JhbCBvYmplY3QuICovXG52YXIgcm9vdCA9IGZyZWVHbG9iYWwgfHwgZnJlZVNlbGYgfHwgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblxuLyoqXG4gKiBHZXRzIHRoZSB2YWx1ZSBhdCBga2V5YCBvZiBgb2JqZWN0YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3RdIFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqIEByZXR1cm5zIHsqfSBSZXR1cm5zIHRoZSBwcm9wZXJ0eSB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0VmFsdWUob2JqZWN0LCBrZXkpIHtcbiAgcmV0dXJuIG9iamVjdCA9PSBudWxsID8gdW5kZWZpbmVkIDogb2JqZWN0W2tleV07XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgYSBob3N0IG9iamVjdCBpbiBJRSA8IDkuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBob3N0IG9iamVjdCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0hvc3RPYmplY3QodmFsdWUpIHtcbiAgLy8gTWFueSBob3N0IG9iamVjdHMgYXJlIGBPYmplY3RgIG9iamVjdHMgdGhhdCBjYW4gY29lcmNlIHRvIHN0cmluZ3NcbiAgLy8gZGVzcGl0ZSBoYXZpbmcgaW1wcm9wZXJseSBkZWZpbmVkIGB0b1N0cmluZ2AgbWV0aG9kcy5cbiAgdmFyIHJlc3VsdCA9IGZhbHNlO1xuICBpZiAodmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgdmFsdWUudG9TdHJpbmcgIT0gJ2Z1bmN0aW9uJykge1xuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSAhISh2YWx1ZSArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKiBVc2VkIGZvciBidWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcy4gKi9cbnZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLFxuICAgIGZ1bmNQcm90byA9IEZ1bmN0aW9uLnByb3RvdHlwZSxcbiAgICBvYmplY3RQcm90byA9IE9iamVjdC5wcm90b3R5cGU7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBvdmVycmVhY2hpbmcgY29yZS1qcyBzaGltcy4gKi9cbnZhciBjb3JlSnNEYXRhID0gcm9vdFsnX19jb3JlLWpzX3NoYXJlZF9fJ107XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBtZXRob2RzIG1hc3F1ZXJhZGluZyBhcyBuYXRpdmUuICovXG52YXIgbWFza1NyY0tleSA9IChmdW5jdGlvbigpIHtcbiAgdmFyIHVpZCA9IC9bXi5dKyQvLmV4ZWMoY29yZUpzRGF0YSAmJiBjb3JlSnNEYXRhLmtleXMgJiYgY29yZUpzRGF0YS5rZXlzLklFX1BST1RPIHx8ICcnKTtcbiAgcmV0dXJuIHVpZCA/ICgnU3ltYm9sKHNyYylfMS4nICsgdWlkKSA6ICcnO1xufSgpKTtcblxuLyoqIFVzZWQgdG8gcmVzb2x2ZSB0aGUgZGVjb21waWxlZCBzb3VyY2Ugb2YgZnVuY3Rpb25zLiAqL1xudmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZztcblxuLyoqIFVzZWQgdG8gY2hlY2sgb2JqZWN0cyBmb3Igb3duIHByb3BlcnRpZXMuICovXG52YXIgaGFzT3duUHJvcGVydHkgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTtcblxuLyoqXG4gKiBVc2VkIHRvIHJlc29sdmUgdGhlXG4gKiBbYHRvU3RyaW5nVGFnYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZylcbiAqIG9mIHZhbHVlcy5cbiAqL1xudmFyIG9iamVjdFRvU3RyaW5nID0gb2JqZWN0UHJvdG8udG9TdHJpbmc7XG5cbi8qKiBVc2VkIHRvIGRldGVjdCBpZiBhIG1ldGhvZCBpcyBuYXRpdmUuICovXG52YXIgcmVJc05hdGl2ZSA9IFJlZ0V4cCgnXicgK1xuICBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eSkucmVwbGFjZShyZVJlZ0V4cENoYXIsICdcXFxcJCYnKVxuICAucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXFxcXCgpfCBmb3IgLis/KD89XFxcXFxcXSkvZywgJyQxLio/JykgKyAnJCdcbik7XG5cbi8qKiBCdWlsdC1pbiB2YWx1ZSByZWZlcmVuY2VzLiAqL1xudmFyIHNwbGljZSA9IGFycmF5UHJvdG8uc3BsaWNlO1xuXG4vKiBCdWlsdC1pbiBtZXRob2QgcmVmZXJlbmNlcyB0aGF0IGFyZSB2ZXJpZmllZCB0byBiZSBuYXRpdmUuICovXG52YXIgTWFwID0gZ2V0TmF0aXZlKHJvb3QsICdNYXAnKSxcbiAgICBuYXRpdmVDcmVhdGUgPSBnZXROYXRpdmUoT2JqZWN0LCAnY3JlYXRlJyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGhhc2ggb2JqZWN0LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7QXJyYXl9IFtlbnRyaWVzXSBUaGUga2V5LXZhbHVlIHBhaXJzIHRvIGNhY2hlLlxuICovXG5mdW5jdGlvbiBIYXNoKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID8gZW50cmllcy5sZW5ndGggOiAwO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgaGFzaC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKi9cbmZ1bmN0aW9uIGhhc2hDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9O1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBoYXNoLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBkZWxldGVcbiAqIEBtZW1iZXJPZiBIYXNoXG4gKiBAcGFyYW0ge09
2iamVjdH0gaGFzaCBUaGUgaGFzaCB0byBtb2RpZnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkpIHtcbiAgcmV0dXJuIHRoaXMuaGFzKGtleSkgJiYgZGVsZXRlIHRoaXMuX19kYXRhX19ba2V5XTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBoYXNoIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgSGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZW50cnkgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGhhc2hHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgaWYgKG5hdGl2ZUNyZWF0ZSkge1xuICAgIHZhciByZXN1bHQgPSBkYXRhW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdCA9PT0gSEFTSF9VTkRFRklORUQgPyB1bmRlZmluZWQgOiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KSA/IGRhdGFba2V5XSA6IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBoYXNoIHZhbHVlIGZvciBga2V5YCBleGlzdHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGhhc1xuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBoYXNoSGFzKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187XG4gIHJldHVybiBuYXRpdmVDcmVhdGUgPyBkYXRhW2tleV0gIT09IHVuZGVmaW5lZCA6IGhhc093blByb3BlcnR5LmNhbGwoZGF0YSwga2V5KTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBoYXNoIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIEhhc2hcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgaGFzaCBpbnN0YW5jZS5cbiAqL1xuZnVuY3Rpb24gaGFzaFNldChrZXksIHZhbHVlKSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXztcbiAgZGF0YVtrZXldID0gKG5hdGl2ZUNyZWF0ZSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSA/IEhBU0hfVU5ERUZJTkVEIDogdmFsdWU7XG4gIHJldHVybiB0aGlzO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgSGFzaGAuXG5IYXNoLnByb3RvdHlwZS5jbGVhciA9IGhhc2hDbGVhcjtcbkhhc2gucHJvdG90eXBlWydkZWxldGUnXSA9IGhhc2hEZWxldGU7XG5IYXNoLnByb3RvdHlwZS5nZXQgPSBoYXNoR2V0O1xuSGFzaC5wcm90b3R5cGUuaGFzID0gaGFzaEhhcztcbkhhc2gucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBsaXN0IGNhY2hlIG9iamVjdC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTGlzdENhY2hlKGVudHJpZXMpIHtcbiAgdmFyIGluZGV4ID0gLTEsXG4gICAgICBsZW5ndGggPSBlbnRyaWVzID8gZW50cmllcy5sZW5ndGggOiAwO1xuXG4gIHRoaXMuY2xlYXIoKTtcbiAgd2hpbGUgKCsraW5kZXggPCBsZW5ndGgpIHtcbiAgICB2YXIgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICB0aGlzLnNldChlbnRyeVswXSwgZW50cnlbMV0pO1xuICB9XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhbGwga2V5LXZhbHVlIGVudHJpZXMgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgY2xlYXJcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlQ2xlYXIoKSB7XG4gIHRoaXMuX19kYXRhX18gPSBbXTtcbn1cblxuLyoqXG4gKiBSZW1vdmVzIGBrZXlgIGFuZCBpdHMgdmFsdWUgZnJvbSB0aGUgbGlzdCBjYWNoZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZGVsZXRlXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlRGVsZXRlKGtleSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTtcbiAgaWYgKGluZGV4ID09IGxhc3RJbmRleCkge1xuICAgIGRhdGEucG9wKCk7XG4gIH0gZWxzZSB7XG4gICAgc3BsaWNlLmNhbGwoZGF0YSwgaW5kZXgsIDEpO1xuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAbmFtZSBnZXRcbiAqIEBtZW1iZXJPZiBMaXN0Q2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVHZXQoa2V5KSB7XG4gIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXyxcbiAgICAgIGluZGV4ID0gYXNzb2NJbmRleE9mKGRhdGEsIGtleSk7XG5cbiAgcmV0dXJuIGluZGV4IDwgMCA/IHVuZGVmaW5lZCA6IGRhdGFbaW5kZXhdWzFdO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGxpc3QgY2FjaGUgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTGlzdENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIGVudHJ5IHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGFuIGVudHJ5IGZvciBga2V5YCBleGlzdHMsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleSkge1xuICByZXR1cm4gYXNzb2NJbmRleE9mKHRoaXMuX19kYXRhX18sIGtleSkgPiAtMTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBsaXN0IGNhY2hlIGBrZXlgIHRvIGB2YWx1ZWAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIHNldFxuICogQG1lbWJlck9mIExpc3RDYWNoZVxuICogQHBhcmFtIHtzdHJpbmd9IGtleSBUaGUga2V5IG9mIHRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBzZXQuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBsaXN0IGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBsaXN0Q2FjaGVTZXQoa2V5LCB2YWx1ZSkge1xuICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sXG4gICAgICBpbmRleCA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkpO1xuXG4gIGlmIChpbmRleCA8IDApIHtcbiAgICBkYXRhLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSBlbHNlIHtcbiAgICBkYXRhW2luZGV4XVsxXSA9IHZhbHVlO1xuICB9XG4gI
2HJldHVybiB0aGlzO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTGlzdENhY2hlYC5cbkxpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjtcbkxpc3RDYWNoZS5wcm90b3R5cGVbJ2RlbGV0ZSddID0gbGlzdENhY2hlRGVsZXRlO1xuTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7XG5MaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhcztcbkxpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0O1xuXG4vKipcbiAqIENyZWF0ZXMgYSBtYXAgY2FjaGUgb2JqZWN0IHRvIHN0b3JlIGtleS12YWx1ZSBwYWlycy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge0FycmF5fSBbZW50cmllc10gVGhlIGtleS12YWx1ZSBwYWlycyB0byBjYWNoZS5cbiAqL1xuZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykge1xuICB2YXIgaW5kZXggPSAtMSxcbiAgICAgIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7XG5cbiAgdGhpcy5jbGVhcigpO1xuICB3aGlsZSAoKytpbmRleCA8IGxlbmd0aCkge1xuICAgIHZhciBlbnRyeSA9IGVudHJpZXNbaW5kZXhdO1xuICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBSZW1vdmVzIGFsbCBrZXktdmFsdWUgZW50cmllcyBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGNsZWFyXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVDbGVhcigpIHtcbiAgdGhpcy5fX2RhdGFfXyA9IHtcbiAgICAnaGFzaCc6IG5ldyBIYXNoLFxuICAgICdtYXAnOiBuZXcgKE1hcCB8fCBMaXN0Q2FjaGUpLFxuICAgICdzdHJpbmcnOiBuZXcgSGFzaFxuICB9O1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYGtleWAgYW5kIGl0cyB2YWx1ZSBmcm9tIHRoZSBtYXAuXG4gKlxuICogQHByaXZhdGVcbiAqIEBuYW1lIGRlbGV0ZVxuICogQG1lbWJlck9mIE1hcENhY2hlXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIHZhbHVlIHRvIHJlbW92ZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgZW50cnkgd2FzIHJlbW92ZWQsIGVsc2UgYGZhbHNlYC5cbiAqL1xuZnVuY3Rpb24gbWFwQ2FjaGVEZWxldGUoa2V5KSB7XG4gIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleSlbJ2RlbGV0ZSddKGtleSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbWFwIHZhbHVlIGZvciBga2V5YC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgZ2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gZ2V0LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIGVudHJ5IHZhbHVlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUdldChrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5nZXQoa2V5KTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBtYXAgdmFsdWUgZm9yIGBrZXlgIGV4aXN0cy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgaGFzXG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgZW50cnkgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYW4gZW50cnkgZm9yIGBrZXlgIGV4aXN0cywgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkpIHtcbiAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5KS5oYXMoa2V5KTtcbn1cblxuLyoqXG4gKiBTZXRzIHRoZSBtYXAgYGtleWAgdG8gYHZhbHVlYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQG5hbWUgc2V0XG4gKiBAbWVtYmVyT2YgTWFwQ2FjaGVcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgVGhlIGtleSBvZiB0aGUgdmFsdWUgdG8gc2V0LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gc2V0LlxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgbWFwIGNhY2hlIGluc3RhbmNlLlxuICovXG5mdW5jdGlvbiBtYXBDYWNoZVNldChrZXksIHZhbHVlKSB7XG4gIGdldE1hcERhdGEodGhpcywga2V5KS5zZXQoa2V5LCB2YWx1ZSk7XG4gIHJldHVybiB0aGlzO1xufVxuXG4vLyBBZGQgbWV0aG9kcyB0byBgTWFwQ2FjaGVgLlxuTWFwQ2FjaGUucHJvdG90eXBlLmNsZWFyID0gbWFwQ2FjaGVDbGVhcjtcbk1hcENhY2hlLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBtYXBDYWNoZURlbGV0ZTtcbk1hcENhY2hlLnByb3RvdHlwZS5nZXQgPSBtYXBDYWNoZUdldDtcbk1hcENhY2hlLnByb3RvdHlwZS5oYXMgPSBtYXBDYWNoZUhhcztcbk1hcENhY2hlLnByb3RvdHlwZS5zZXQgPSBtYXBDYWNoZVNldDtcblxuLyoqXG4gKiBHZXRzIHRoZSBpbmRleCBhdCB3aGljaCB0aGUgYGtleWAgaXMgZm91bmQgaW4gYGFycmF5YCBvZiBrZXktdmFsdWUgcGFpcnMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpbnNwZWN0LlxuICogQHBhcmFtIHsqfSBrZXkgVGhlIGtleSB0byBzZWFyY2ggZm9yLlxuICogQHJldHVybnMge251bWJlcn0gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIG1hdGNoZWQgdmFsdWUsIGVsc2UgYC0xYC5cbiAqL1xuZnVuY3Rpb24gYXNzb2NJbmRleE9mKGFycmF5LCBrZXkpIHtcbiAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgd2hpbGUgKGxlbmd0aC0tKSB7XG4gICAgaWYgKGVxKGFycmF5W2xlbmd0aF1bMF0sIGtleSkpIHtcbiAgICAgIHJldHVybiBsZW5ndGg7XG4gICAgfVxuICB9XG4gIHJldHVybiAtMTtcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgXy5pc05hdGl2ZWAgd2l0aG91dCBiYWQgc2hpbSBjaGVja3MuXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYSBuYXRpdmUgZnVuY3Rpb24sXG4gKiAgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBiYXNlSXNOYXRpdmUodmFsdWUpIHtcbiAgaWYgKCFpc09iamVjdCh2YWx1ZSkgfHwgaXNNYXNrZWQodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gI
2HZhciBwYXR0ZXJuID0gKGlzRnVuY3Rpb24odmFsdWUpIHx8IGlzSG9zdE9iamVjdCh2YWx1ZSkpID8gcmVJc05hdGl2ZSA6IHJlSXNIb3N0Q3RvcjtcbiAgcmV0dXJuIHBhdHRlcm4udGVzdCh0b1NvdXJjZSh2YWx1ZSkpO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGRhdGEgZm9yIGBtYXBgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gbWFwIFRoZSBtYXAgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSByZWZlcmVuY2Uga2V5LlxuICogQHJldHVybnMgeyp9IFJldHVybnMgdGhlIG1hcCBkYXRhLlxuICovXG5mdW5jdGlvbiBnZXRNYXBEYXRhKG1hcCwga2V5KSB7XG4gIHZhciBkYXRhID0gbWFwLl9fZGF0YV9fO1xuICByZXR1cm4gaXNLZXlhYmxlKGtleSlcbiAgICA/IGRhdGFbdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/ICdzdHJpbmcnIDogJ2hhc2gnXVxuICAgIDogZGF0YS5tYXA7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgbmF0aXZlIGZ1bmN0aW9uIGF0IGBrZXlgIG9mIGBvYmplY3RgLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0IFRoZSBvYmplY3QgdG8gcXVlcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IFRoZSBrZXkgb2YgdGhlIG1ldGhvZCB0byBnZXQuXG4gKiBAcmV0dXJucyB7Kn0gUmV0dXJucyB0aGUgZnVuY3Rpb24gaWYgaXQncyBuYXRpdmUsIGVsc2UgYHVuZGVmaW5lZGAuXG4gKi9cbmZ1bmN0aW9uIGdldE5hdGl2ZShvYmplY3QsIGtleSkge1xuICB2YXIgdmFsdWUgPSBnZXRWYWx1ZShvYmplY3QsIGtleSk7XG4gIHJldHVybiBiYXNlSXNOYXRpdmUodmFsdWUpID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgc3VpdGFibGUgZm9yIHVzZSBhcyB1bmlxdWUgb2JqZWN0IGtleS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBzdWl0YWJsZSwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc0tleWFibGUodmFsdWUpIHtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsdWU7XG4gIHJldHVybiAodHlwZSA9PSAnc3RyaW5nJyB8fCB0eXBlID09ICdudW1iZXInIHx8IHR5cGUgPT0gJ3N5bWJvbCcgfHwgdHlwZSA9PSAnYm9vbGVhbicpXG4gICAgPyAodmFsdWUgIT09ICdfX3Byb3RvX18nKVxuICAgIDogKHZhbHVlID09PSBudWxsKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYGZ1bmNgIGhhcyBpdHMgc291cmNlIG1hc2tlZC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYGZ1bmNgIGlzIG1hc2tlZCwgZWxzZSBgZmFsc2VgLlxuICovXG5mdW5jdGlvbiBpc01hc2tlZChmdW5jKSB7XG4gIHJldHVybiAhIW1hc2tTcmNLZXkgJiYgKG1hc2tTcmNLZXkgaW4gZnVuYyk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYGZ1bmNgIHRvIGl0cyBzb3VyY2UgY29kZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gcHJvY2Vzcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIHNvdXJjZSBjb2RlLlxuICovXG5mdW5jdGlvbiB0b1NvdXJjZShmdW5jKSB7XG4gIGlmIChmdW5jICE9IG51bGwpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZ1bmNUb1N0cmluZy5jYWxsKGZ1bmMpO1xuICAgIH0gY2F0Y2ggKGUpIHt9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoZnVuYyArICcnKTtcbiAgICB9IGNhdGNoIChlKSB7fVxuICB9XG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZnVuY3Rpb24gdGhhdCBtZW1vaXplcyB0aGUgcmVzdWx0IG9mIGBmdW5jYC4gSWYgYHJlc29sdmVyYCBpc1xuICog
2cHJvdmlkZWQsIGl0IGRldGVybWluZXMgdGhlIGNhY2hlIGtleSBmb3Igc3RvcmluZyB0aGUgcmVzdWx0IGJhc2VkIG9uIHRoZVxuICogYXJndW1lbnRzIHByb3ZpZGVkIHRvIHRoZSBtZW1vaXplZCBmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGZpcnN0IGFyZ3VtZW50XG4gKiBwcm92aWRlZCB0byB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24gaXMgdXNlZCBhcyB0aGUgbWFwIGNhY2hlIGtleS4gVGhlIGBmdW5jYFxuICogaXMgaW52b2tlZCB3aXRoIHRoZSBgdGhpc2AgYmluZGluZyBvZiB0aGUgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKlxuICogKipOb3RlOioqIFRoZSBjYWNoZSBpcyBleHBvc2VkIGFzIHRoZSBgY2FjaGVgIHByb3BlcnR5IG9uIHRoZSBtZW1vaXplZFxuICogZnVuY3Rpb24uIEl0cyBjcmVhdGlvbiBtYXkgYmUgY3VzdG9taXplZCBieSByZXBsYWNpbmcgdGhlIGBfLm1lbW9pemUuQ2FjaGVgXG4gKiBjb25zdHJ1Y3RvciB3aXRoIG9uZSB3aG9zZSBpbnN0YW5jZXMgaW1wbGVtZW50IHRoZVxuICogW2BNYXBgXShodHRwOi8vZWNtYS1pbnRlcm5hdGlvbmFsLm9yZy9lY21hLTI2Mi83LjAvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1tYXAtcHJvdG90eXBlLW9iamVjdClcbiAqIG1ldGhvZCBpbnRlcmZhY2Ugb2YgYGRlbGV0ZWAsIGBnZXRgLCBgaGFzYCwgYW5kIGBzZXRgLlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgMC4xLjBcbiAqIEBjYXRlZ29yeSBGdW5jdGlvblxuICogQHBhcmFtIHtGdW5jdGlvbn0gZnVuYyBUaGUgZnVuY3Rpb24gdG8gaGF2ZSBpdHMgb3V0cHV0IG1lbW9pemVkLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW3Jlc29sdmVyXSBUaGUgZnVuY3Rpb24gdG8gcmVzb2x2ZSB0aGUgY2FjaGUga2V5LlxuICogQHJldHVybnMge0Z1bmN0aW9ufSBSZXR1cm5zIHRoZSBuZXcgbWVtb2l6ZWQgZnVuY3Rpb24uXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSwgJ2InOiAyIH07XG4gKiB2YXIgb3RoZXIgPSB7ICdjJzogMywgJ2QnOiA0IH07XG4gKlxuICogdmFyIHZhbHVlcyA9IF8ubWVtb2l6ZShfLnZhbHVlcyk7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIHZhbHVlcyhvdGhlcik7XG4gKiAvLyA9PiBbMywgNF1cbiAqXG4gKiBvYmplY3QuYSA9IDI7XG4gKiB2YWx1ZXMob2JqZWN0KTtcbiAqIC8vID0+IFsxLCAyXVxuICpcbiAqIC8vIE1vZGlmeSB0aGUgcmVzdWx0IGNhY2hlLlxuICogdmFsdWVzLmNhY2hlLnNldChvYmplY3QsIFsnYScsICdiJ10pO1xuICogdmFsdWVzKG9iamVjdCk7XG4gKiAvLyA9PiBbJ2EnLCAnYiddXG4gKlxuICogLy8gUmVwbGFjZSBgXy5tZW1vaXplLkNhY2hlYC5cbiAqIF8ubWVtb2l6ZS5DYWNoZSA9IFdlYWtNYXA7XG4gKi9cbmZ1bmN0aW9uIG1lbW9pemUoZnVuYywgcmVzb2x2ZXIpIHtcbiAgaWYgKHR5cGVvZiBmdW5jICE9ICdmdW5jdGlvbicgfHwgKHJlc29sdmVyICYmIHR5cGVvZiByZXNvbHZlciAhPSAnZnVuY3Rpb24nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoRlVOQ19FUlJPUl9URVhUKTtcbiAgfVxuICB2YXIgbWVtb2l6ZWQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IGFyZ3VtZW50cyxcbiAgICAgICAga2V5ID0gcmVzb2x2ZXIgPyByZXNvbHZlci5hcHBseSh0aGlzLCBhcmdzKSA6IGFyZ3NbMF0sXG4gICAgICAgIGNhY2hlID0gbWVtb2l6ZWQuY2FjaGU7XG5cbiAgICBpZiAoY2FjaGUuaGFzKGtleSkpIHtcbiAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KTtcbiAgICB9XG4gICAgdmFyIHJlc3VsdCA9IGZ1bmMuYXBwbHkodGhpcywgYXJncyk7XG4gICAgbWVtb2l6ZWQuY2FjaGUgPSBjYWNoZS5zZXQoa2V5LCByZXN1bHQpO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG4gIG1lbW9pemVkLmNhY2hlID0gbmV3IChtZW1vaXplLkNhY2hlIHx8IE1hcENhY2hlKTtcbiAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG4vLyBBc3NpZ24gY2FjaGUgdG8gYF8ubWVtb2l6ZWAuXG5tZW1vaXplLkNhY2hlID0gTWFwQ2FjaGU7XG5cbi8qKlxuICogUGVyZm9ybXMgYVxuICogW2BTYW1lVmFsdWVaZXJvYF0oaHR0cDovL2VjbWEtaW50ZXJuYXRpb25hbC5vcmcvZWNtYS0yNjIvNy4wLyNzZWMtc2FtZXZhbHVlemVybylcbiAqIGNvbXBhcmlzb24gYmV0d2VlbiB0d28gdmFsdWVzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBlcXVpdmFsZW50LlxuICpcbiAqIEBzdGF0aWNcbiAqIEBtZW1iZXJPZiBfXG4gKiBAc2luY2UgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBjb21wYXJlLlxuICogQHBhcmFtIHsqfSBvdGhlciBUaGUgb3RoZXIgdmFsdWUgdG8gY29tcGFyZS5cbiAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIHZhciBvYmplY3QgPSB7ICdhJzogMSB9O1xuICogdmFyIG90aGVyID0geyAnYSc6IDEgfTtcbiAqXG4gKiBfLmVxKG9iamVjdCwgb2JqZWN0KTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKG9iamVjdCwgb3RoZXIpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKCdhJywgJ2EnKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmVxKCdhJywgT2JqZWN0KCdhJykpO1xuICogLy8gPT4gZmFsc2VcbiAqXG4gKiBfLmVxKE5hTiwgTmFOKTtcbiAqIC8vID0+IHRydWVcbiAqL1xuZnVuY3Rpb24gZXEodmFsdWUsIG90aGVyKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gb3RoZXIgfHwgKHZhbHVlICE9PSB2YWx1ZSAmJiBvdGhlciAhPT0gb3RoZXIpO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBgdmFsdWVgIGlzIGNsYXNzaWZpZWQgYXMgYSBgRnVuY3Rpb25gIG9iamVjdC5cbiAqXG4gKiBAc3RhdGljXG4gKiBAbWVtYmVyT2YgX1xuICogQHNpbmNlIDAuMS4wXG4gKiBAY2F0ZWdvcnkgTGFuZ1xuICogQHBhcmFtIHsqfSB2YWx1ZSBUaGUgdmFsdWUgdG8gY2hlY2suXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyBgdHJ1ZWAgaWYgYHZhbHVlYCBpcyBhIGZ1bmN0aW9uLCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNGdW5jdGlvbihfKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzRnVuY3Rpb24oL2FiYy8pO1xuICogLy8gPT4gZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWx1ZSkge1xuICAvLyBUaGUgdXNlIG9mIGBPYmplY3QjdG9TdHJpbmdgIGF2b2lkcyBpc3N1ZXMgd2l0aCB0aGUgYHR5cGVvZmAgb3BlcmF0b3JcbiAgLy8gaW4gU2FmYXJpIDgtOSB3aGljaCByZXR1cm5zICdvYmplY3QnIGZvciB0eXBlZCBhcnJheSBhbmQgb3RoZXIgY29uc3RydWN0b3JzLlxuICB2YXIgdGFnID0gaXNPYmplY3QodmFsdWUpID8gb2JqZWN0VG9TdHJpbmcuY2FsbCh2YWx1ZSkgOiAnJztcbiAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGB2YWx1ZWAgaXMgdGhlXG4gKiBbbGFuZ3VhZ2UgdHlwZV0oaHR0cDovL3d3dy5lY21hLWludGVybmF0aW9uYWwub3JnL2VjbWEtMjYyLzcuMC8jc2VjLWVjbWFzY3JpcHQtbGFuZ3VhZ2UtdHlwZXMpXG4gKiBvZiBgT2JqZWN0YC4gKGUuZy4gYXJyYXlzLCBmdW5jdGlvbnMsIG9iamVjdHMsIHJlZ2V4ZXMsIGBuZXcgTnVtYmVyKDApYCwgYW5kIGBuZXcgU3RyaW5nKCcnKWApXG4gKlxuICogQHN0YXRpY1xuICogQG1lbWJlck9mIF9cbiAqIEBzaW5jZSAwLjEuMFxuICogQGNhdGVnb3J5IExhbmdcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNoZWNrLlxuICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgYHRydWVgIGlmIGB2YWx1ZWAgaXMgYW4gb2JqZWN0LCBlbHNlIGBmYWxzZWAuXG4gKiBAZXhhbXBsZVxuICpcbiAqIF8uaXNPYmplY3Qoe30pO1xuICogLy8gPT4gdHJ1ZVxuICpcbiAqIF8uaXNPYmplY3QoWzEsIDIsIDNdKTtcbiAqIC8vID0+IHRydWVcbiAqXG4gKiBfLmlzT2JqZWN0KF8ubm9vcCk7XG4gKiAvLyA9PiB0cnVlXG4gKlxuICogXy5pc09iamVjdChudWxsKTtcbiAqIC8vID0+IGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gIHZhciB0eXBlID0gdHlwZW9mIHZhbHVlO1xuICByZXR1cm4gISF2YWx1ZSAmJiAodHlwZSA9PSAnb2JqZWN0JyB8fCB0eXBlID09ICdmdW5jdGlvbicpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IG1lbW9pemU7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZUNsYXNzTmFtZXMoKSB7XG4gIHJldHVybi
2BBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpLnJlZHVjZShmdW5jdGlvbiAoY2xhc3NMaXN0LCBhcmcpIHtcbiAgICByZXR1cm4gY2xhc3NMaXN0LmNvbmNhdChhcmcpO1xuICB9LCBbXSkuZmlsdGVyKGZ1bmN0aW9uIChhcmcpIHtcbiAgICByZXR1cm4gdHlwZW9mIGFyZyA9PT0gJ3N0cmluZyc7XG4gIH0pLmpvaW4oJyAnKTtcbn0iLCJpbXBvcnQgbWVtb2l6ZSBmcm9tICdsb2Rhc2gubWVtb2l6ZSc7XG5cbmZ1bmN0aW9uIHJlc29sdmVyKG9wdGlvbnMpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiB1bmlxRGVmaW5lZChhcnIpIHtcbiAgcmV0dXJuIGFyci5maWx0ZXIoZnVuY3Rpb24gKGVsLCBpbmRleCkge1xuICAgIHJldHVybiBlbCAmJiBhcnIuaW5kZXhPZihlbCkgPT09IGluZGV4O1xuICB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTG9jYWxlcyhhcnIpIHtcbiAgcmV0dXJuIGFyci5tYXAoZnVuY3Rpb24gKGVsKSB7XG4gICAgaWYgKCFlbCB8fCBlbC5pbmRleE9mKCctJykgPT09IC0xIHx8IGVsLnRvTG93ZXJDYXNlKCkgIT09IGVsKSB7XG4gICAgICByZXR1cm4gZWw7XG4gICAgfVxuXG4gICAgdmFyIHNwbGl0RWwgPSBlbC5zcGxpdCgnLScpO1xuICAgIHJldHVybiBzcGxpdEVsWzBdICsgXCItXCIgKyBzcGxpdEVsWzFdLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBnZXRVc2VyTG9jYWxlc0ludGVybmFsKF90ZW1wKSB7XG4gIHZhciBfcmVmID0gX3RlbXAgPT09IHZvaWQgMCA/IHt9IDogX3RlbXAsXG4gICAgICBfcmVmJHVzZUZhbGxiYWNrTG9jYWwgPSBfcmVmLnVzZUZhbGxiYWNrTG9jYWxlLFxuICAgICAgdXNlRmFsbGJhY2tMb2NhbGUgPSBfcmVmJHVzZUZhbGxiYWNrTG9jYWwgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmJHVzZUZhbGxiYWNrTG9jYWwsXG4gICAgICBfcmVmJGZhbGxiYWNrTG9jYWxlID0gX3JlZi5mYWxsYmFja0xvY2FsZSxcbiAgICAgIGZhbGxiYWNrTG9jYWxlID0gX3JlZiRmYWxsYmFja0xvY2FsZSA9PT0gdm9pZCAwID8gJ2VuLVVTJyA6IF9yZWYkZmFsbGJhY2tMb2NhbGU7XG5cbiAgdmFyIGxhbmd1YWdlTGlzdCA9IFtdO1xuXG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgIHZhciBfd2luZG93ID0gd2luZG93LFxuICAgICAgICBuYXZpZ2F0b3IgPSBfd2luZG93Lm5hdmlnYXRvcjtcbiAgICBsYW5ndWFnZUxpc3QgPSBsYW5ndWFnZUxpc3QuY29uY2F0KG5hdmlnYXRvci5sYW5ndWFnZXMsIG5hdmlnYXRvci5sYW5ndWFnZSwgbmF2aWdhdG9yLnVzZXJMYW5ndWFnZSwgbmF2aWdhdG9yLmJyb3dzZXJMYW5ndWFnZSwgbmF2aWdhdG9yLnN5c3RlbUxhbmd1YWdlKTtcbiAgfVxuXG4gIGlmICh1c2VGYWxsYmFja0xvY2FsZSkge1xuICAgIGxhbmd1YWdlTGlzdC5wdXNoKGZhbGxiYWNrTG9jYWxlKTtcbiAgfVxuXG4gIHJldHVybiBub3JtYWxpemVMb2NhbGVzKHVuaXFEZWZpbmVkKGxhbmd1YWdlTGlzdCkpO1xufVxuXG5leHBvcnQgdmFyIGdldFVzZXJMb2NhbGVzID0gbWVtb2l6ZShnZXRVc2VyTG9jYWxlc0ludGVybmFsLCByZXNvbHZlcik7XG5cbmZ1bmN0aW9uIGdldFVzZXJMb2NhbGVJbnRlcm5hbChvcHRpb25zKSB7XG4gIHJldHVybiBnZXRVc2VyTG9jYWxlcyhvcHRpb25zKVswXSB8fCBudWxsO1xufVxuXG5leHBvcnQgdmFyIGdldFVzZXJMb2NhbGUgPSBtZW1vaXplKGdldFVzZXJMb2NhbGVJbnRlcm5hbCwgcmVzb2x2ZXIpO1xuZXhwb3J0IGRlZmF1bHQgZ2V0VXNlckxvY2FsZTsiLCIvKipcbiAqIFV0aWxzXG4gKi9cbmZ1bmN0aW9uIG1ha2VHZXRFZGdlT2ZOZWlnaGJvcihnZXRQZXJpb2QsIGdldEVkZ2VPZlBlcmlvZCwgZGVmYXVsdE9mZnNldCkge1xuICByZXR1cm4gZnVuY3Rpb24gbWFrZUdldEVkZ2VPZk5laWdoYm9ySW50ZXJuYWwoZGF0ZSkge1xuICAgIHZhciBvZmZzZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGRlZmF1bHRPZmZzZXQ7XG4gICAgdmFyIHByZXZpb3VzUGVyaW9kID0gZ2V0UGVyaW9kKGRhdGUpICsgb2Zmc2V0O1xuICAgIHJldHVybiBnZXRFZGdlT2ZQZXJpb2QocHJldmlvdXNQZXJpb2QpO1xuICB9O1xufVxuXG5mdW5jdGlvbiBtYWtlR2V0RW5kKGdldEJlZ2luT2ZOZXh0UGVyaW9kKSB7XG4gIHJldHVybiBmdW5jdGlvbiBtYWtlR2V0RW5kSW50ZXJuYWwoZGF0ZSkge1xuICAgIHJldHVybiBuZXcgRGF0ZShnZXRCZWdpbk9mTmV4dFBlcmlvZChkYXRlKS5nZXRUaW1lKCkgLSAxKTtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWFrZUdldFJhbmdlKGZ1bmN0aW9ucykge1xuICByZXR1cm4gZnVuY3Rpb24gbWFrZUdldFJhbmdlSW50ZXJuYWwoZGF0ZSkge1xuICAgIHJldHVybiBmdW5jdGlvbnMubWFwKGZ1bmN0aW9uIChmbikge1xuICAgICAgcmV0dXJuIGZuKGRhdGUpO1xuICAgIH0pO1xuICB9O1xufVxuLyoqXG4gKiBTaW1wbGUgZ2V0dGVycyAtIGdldHRpbmcgYSBwcm9wZXJ0eSBvZiBhIGdpdmVuIHBvaW50IGluIHRpbWVcbiAqL1xuXG4vKipcbiAqIEdldHMgeWVhciBmcm9tIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfG51bWJlcnxzdHJpbmd9IGRhdGUgRGF0ZSB0byBnZXQgeWVhciBmcm9tLlxuICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFllYXIoZGF0ZSkge1xuICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBkYXRlID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBkYXRlO1xuICB9XG5cbiAgdmFyIHllYXIgPSBwYXJzZUludChkYXRlLCAxMCk7XG5cbiAgaWYgKHR5cGVvZiBkYXRlID09PSAnc3RyaW5nJyAmJiAhaXNOYU4oeWVhcikpIHtcbiAgICByZXR1cm4geWVhcjtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgeWVhciBmcm9tIGRhdGU6IFwiLmNvbmNhdChkYXRlLCBcIi5cIikpO1xufVxuLyoqXG4gKiBHZXRzIG1vbnRoIGZyb20gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV9IGRhdGUgRGF0ZSB0byBnZXQgbW9udGggZnJvbS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9udGgoZGF0ZSkge1xuICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gZGF0ZS5nZXRNb250aCgpO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGdldCBtb250aCBmcm9tIGRhdGU6IFwiLmNvbmNhdChkYXRlLCBcIi5cIikpO1xufVxuLyoqXG4gKiBHZXRzIGh1bWFuLXJlYWRhYmxlIG1vbnRoIGZyb20gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV9IGRhdGUgRGF0ZSB0byBnZXQgaHVtYW4tcmVhZGFibGUgbW9udGggZnJvbS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9udGhIdW1hbihkYXRlKSB7XG4gIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybi
2BkYXRlLmdldE1vbnRoKCkgKyAxO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIGdldCBodW1hbi1yZWFkYWJsZSBtb250aCBmcm9tIGRhdGU6IFwiLmNvbmNhdChkYXRlLCBcIi5cIikpO1xufVxuLyoqXG4gKiBHZXRzIGh1bWFuLXJlYWRhYmxlIGRheSBvZiB0aGUgbW9udGggZnJvbSBkYXRlLlxuICpcbiAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSBEYXRlIHRvIGdldCBkYXkgb2YgdGhlIG1vbnRoIGZyb20uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERhdGUoZGF0ZSkge1xuICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gZGF0ZS5nZXREYXRlKCk7XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IHllYXIgZnJvbSBkYXRlOiBcIi5jb25jYXQoZGF0ZSwgXCIuXCIpKTtcbn1cbi8qKlxuICogR2V0cyBob3VycyBmcm9tIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfHN0cmluZ30gZGF0ZSBEYXRlIHRvIGdldCBob3VycyBmcm9tLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRIb3VycyhkYXRlKSB7XG4gIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBkYXRlLmdldEhvdXJzKCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIGRhdGVQaWVjZXMgPSBkYXRlLnNwbGl0KCc6Jyk7XG5cbiAgICBpZiAoZGF0ZVBpZWNlcy5sZW5ndGggPj0gMikge1xuICAgICAgdmFyIGhvdXJzU3RyaW5nID0gZGF0ZVBpZWNlc1swXTtcbiAgICAgIHZhciBob3VycyA9IHBhcnNlSW50KGhvdXJzU3RyaW5nLCAxMCk7XG5cbiAgICAgIGlmICghaXNOYU4oaG91cnMpKSB7XG4gICAgICAgIHJldHVybiBob3VycztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IGhvdXJzIGZyb20gZGF0ZTogXCIuY29uY2F0KGRhdGUsIFwiLlwiKSk7XG59XG4vKipcbiAqIEdldHMgbWludXRlcyBmcm9tIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfHN0cmluZ30gZGF0ZSBEYXRlIHRvIGdldCBtaW51dGVzIGZyb20uXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE1pbnV0ZXMoZGF0ZSkge1xuICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gZGF0ZS5nZXRNaW51dGVzKCk7XG4gIH1cblxuICBpZiAodHlwZW9mIGRhdGUgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFyIGRhdGVQaWVjZXMgPSBkYXRlLnNwbGl0KCc6Jyk7XG5cbiAgICBpZiAoZGF0ZVBpZWNlcy5sZW5ndGggPj0gMikge1xuICAgICAgdmFyIG1pbnV0ZXNTdHJpbmcgPSBkYXRlUGllY2VzWzFdIHx8IDA7XG4gICAgICB2Y
2XIgbWludXRlcyA9IHBhcnNlSW50KG1pbnV0ZXNTdHJpbmcsIDEwKTtcblxuICAgICAgaWYgKCFpc05hTihtaW51dGVzKSkge1xuICAgICAgICByZXR1cm4gbWludXRlcztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gZ2V0IG1pbnV0ZXMgZnJvbSBkYXRlOiBcIi5jb25jYXQoZGF0ZSwgXCIuXCIpKTtcbn1cbi8qKlxuICogR2V0cyBzZWNvbmRzIGZyb20gZGF0ZS5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8c3RyaW5nfSBkYXRlIERhdGUgdG8gZ2V0IHNlY29uZHMgZnJvbS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2Vjb25kcyhkYXRlKSB7XG4gIGlmIChkYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBkYXRlLmdldFNlY29uZHMoKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YXIgZGF0ZVBpZWNlcyA9IGRhdGUuc3BsaXQoJzonKTtcblxuICAgIGlmIChkYXRlUGllY2VzLmxlbmd0aCA+PSAyKSB7XG4gICAgICB2YXIgc2Vjb25kc1N0cmluZyA9IGRhdGVQaWVjZXNbMl0gfHwgMDtcbiAgICAgIHZhciBzZWNvbmRzID0gcGFyc2VJbnQoc2Vjb25kc1N0cmluZywgMTApO1xuXG4gICAgICBpZiAoIWlzTmFOKHNlY29uZHMpKSB7XG4gICAgICAgIHJldHVybiBzZWNvbmRzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcIkZhaWxlZCB0byBnZXQgc2Vjb25kcyBmcm9tIGRhdGU6IFwiLmNvbmNhdChkYXRlLCBcIi5cIikpO1xufVxuLyoqXG4gKiBDZW50dXJ5XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldENlbnR1cnlTdGFydChkYXRlKSB7XG4gIHZhciB5ZWFyID0gZ2V0WWVhcihkYXRlKTtcbiAgdmFyIGNlbnR1cnlTdGFydFllYXIgPSB5ZWFyICsgKC15ZWFyICsgMSkgJSAxMDA7XG4gIHZhciBjZW50dXJ5U3RhcnREYXRlID0gbmV3IERhdGUoKTtcbiAgY2VudHVyeVN0YXJ0RGF0ZS5zZXRGdWxsWWVhcihjZW50dXJ5U3RhcnRZZWFyLCAwLCAxKTtcbiAgY2VudHVyeVN0YXJ0RGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGNlbnR1cnlTdGFydERhdGU7XG59XG5leHBvcnQgdmFyIGdldFByZXZpb3VzQ2VudHVyeVN0YXJ0ID0gbWFrZUdldEVkZ2VPZk5laWdoYm9yKGdldFllYXIsIGdldENlbnR1cnlTdGFydCwgLTEwMCk7XG5leHBvcnQgdmFyIGdldE5leHRDZW50dXJ5U3RhcnQgPSBtYWtlR2V0RWRnZU9mTmVpZ2hib3IoZ2V0WWVhciwgZ2V0Q2VudHVyeVN0YXJ0LCAxMDApO1xuZXhwb3J0IHZhciBnZXRDZW50dXJ5RW5kID0gbWFrZUdldEVuZChnZXROZXh0Q2VudHVyeVN0YXJ0KTtcbmV4cG9ydCB2YXIgZ2V0UHJldmlvdXNDZW50dXJ5RW5kID0gbWFrZUdldEVkZ2VPZk5laWdoYm9yKGdldFllYXIsIGdldENlbnR1cnlFbmQsIC0xMDApO1xuZXhwb3J0IHZhciBnZXROZXh0Q2VudHVyeUVuZCA9IG1ha2VHZXRFZGdlT2ZOZWlnaGJvcihnZXRZZWFyLCBnZXRDZW50dXJ5RW5kLCAxMDApO1xuZXhwb3J0IHZhciBnZXRDZW50dXJ5UmFuZ2UgPSBtYWtlR2V0UmFuZ2UoW2dldENlbnR1cnlTdGFydCwgZ2V0Q2VudHVyeUVuZF0pO1xuLyoqXG4gKiBEZWNhZGVcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVjYWRlU3RhcnQoZGF0ZSkge1xuICB2YXIgeWVhciA9IGdldFllYXIoZGF0ZSk7XG4gIHZhciBkZWNhZGVTdGFydFllYXIgPSB5ZWFyICsgKC15ZWFyICsgMSkgJSAxMDtcbiAgdmFyIGRlY2FkZVN0YXJ0RGF0ZSA9IG5ldyBEYXRlKCk7XG4gIGRlY2FkZVN0YXJ0RGF0ZS5zZXRGdWxsWWVhcihkZWNhZGVTdGFydFllYXIsIDAsIDEpO1xuICBkZWNhZGVTdGFydERhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBkZWNhZGVTdGFydERhdGU7XG59XG5leHBvcnQgdmFyIGdldFByZXZpb3VzRGVjYWRlU3RhcnQgPSBtYWtlR2V0RWRnZU9mTmVpZ2hib3IoZ2V0WWVhciwgZ2V0RGVjYWRlU3RhcnQsIC0xMCk7XG5leHBvcnQgdmFyIGdldE5leHREZWNhZGVTdGFydCA9IG1ha2VHZXRFZGdlT2ZOZWlnaGJvcihnZXRZZWFyLCBnZXREZWNhZGVTdGFydCwgMTApO1xuZXhwb3J0IHZhciBnZXREZWNhZGVFbmQgPSBtYWtlR2V0RW5kKGdldE5leHREZWNhZGVTdGFydCk7XG5leHBvcnQgdmFyIGdldFByZXZpb3VzRGVjYWRlRW5kID0gbWFrZUdldEVkZ2VPZk5laWdoYm9yKGdldFllYXIsIGdldERlY2FkZUVuZCwgLTEwKTtcbmV4cG9ydCB2YXIgZ2V0TmV4dERlY2FkZUVuZCA9IG1ha2VHZXRFZGdlT2ZOZWlnaGJvcihnZXRZZWFyLCBnZXREZWNhZGVFbmQsIDEwKTtcbmV4cG9ydCB2YXIgZ2V0RGVjYWRlUmFuZ2UgPSBtYWtlR2V0UmFuZ2UoW2dldERlY2FkZVN0YXJ0LCBnZXREZWNhZGVFbmRdKTtcbi8qKlxuICogWWVhclxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRZZWFyU3RhcnQoZGF0ZSkge1xuICB2YXIgeWVhciA9IGdldFllYXIoZGF0ZSk7XG4gIHZhciB5ZWFyU3RhcnREYXRlID0gbmV3IERhdGUoKTtcbiAgeWVhclN0YXJ0RGF0ZS5zZXRGdWxsWWVhcih5ZWFyLCAwLCAxKTtcbiAgeWVhclN0YXJ0RGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIHllYXJTdGFydERhdGU7XG59XG5leHBvcnQgdmFyIGdldFByZXZpb3VzWWVhclN0YXJ0ID0gbWFrZUdldEVkZ2VPZk5laWdoYm9yKGdldFllYXIsIGdldFllYXJTdGFydCwgLTEpO1xuZXhwb3J0IHZhciBnZXROZXh0WWVhclN0YXJ0ID0gbWFrZUdldEVkZ2VPZk5laWdoYm9yKGdldFllYXIsIGdldFllYXJTdGFydCwgMSk7XG5leHBvcnQgdmFyIGdldFllYXJFbmQgPSBtYWtlR2V0RW5kKGdldE5leHRZZWFyU3RhcnQpO1xuZXhwb3J0IHZhciBnZXRQcmV2aW91c1llYXJFbmQgPSBtYWtlR2V0RWRnZU9mTmVpZ2hib3IoZ2V0WWVhciwgZ2V0WWVhckVuZCwgLTEpO1xuZXhwb3J0IHZhciBnZXROZXh0WWVhckVuZCA9IG1ha2VHZXRFZGdlT2ZOZWlnaGJvcihnZXRZZWFyLCBnZXRZZWFyRW5kLCAxKTtcbmV4cG9ydCB2YXIgZ2V0WWVhclJhbmdlID0gbWFrZUdldFJhbmdlKFtnZXRZZWFyU3RhcnQsIGdldFllYXJFbmRdKTtcbi8qKlxuICogTW9udGhcbiAqL1xuXG5mdW5jdGlvbiBtYWtlR2V0RWRnZU9mTmVpZ2hib3JNb250aChnZXRFZGdlT2ZQZXJpb2QsIGRlZmF1bHRPZmZzZXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIG1ha2VHZXRFZGdlT2ZOZWlnaGJvck1vbnRoSW50ZXJuYWwoZGF0ZSkge1xuICAgIHZhciBvZmZzZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IGRlZmF1bHRPZmZzZXQ7XG4gICAgdmFyIHllYXIgPSBnZXRZZWFyKGRhdGUpO1xuICAgIHZhciBtb250aCA9IGdldE1vbnRoKGRhdGUpICsgb2Zmc2V0O1xuICAgIHZhciBwcmV2aW91c1BlcmlvZCA9IG5ldyBEYXRlKCk7XG4gICAgcHJldmlvdXNQZXJpb2Quc2V0RnVsbFllYXIoeWVhciwgbW9udGgsIDEpO1xuICAgIHByZXZpb3VzUGVyaW9kLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIHJldHVybi
2BnZXRFZGdlT2ZQZXJpb2QocHJldmlvdXNQZXJpb2QpO1xuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9udGhTdGFydChkYXRlKSB7XG4gIHZhciB5ZWFyID0gZ2V0WWVhcihkYXRlKTtcbiAgdmFyIG1vbnRoID0gZ2V0TW9udGgoZGF0ZSk7XG4gIHZhciBtb250aFN0YXJ0RGF0ZSA9IG5ldyBEYXRlKCk7XG4gIG1vbnRoU3RhcnREYXRlLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCAxKTtcbiAgbW9udGhTdGFydERhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gIHJldHVybiBtb250aFN0YXJ0RGF0ZTtcbn1cbmV4cG9ydCB2YXIgZ2V0UHJldmlvdXNNb250aFN0YXJ0ID0gbWFrZUdldEVkZ2VPZk5laWdoYm9yTW9udGgoZ2V0TW9udGhTdGFydCwgLTEpO1xuZXhwb3J0IHZhciBnZXROZXh0TW9udGhTdGFydCA9IG1ha2VHZXRFZGdlT2ZOZWlnaGJvck1vbnRoKGdldE1vbnRoU3RhcnQsIDEpO1xuZXhwb3J0IHZhciBnZXRNb250aEVuZCA9IG1ha2VHZXRFbmQoZ2V0TmV4dE1vbnRoU3RhcnQpO1xuZXhwb3J0IHZhciBnZXRQcmV2aW91c01vbnRoRW5kID0gbWFrZUdldEVkZ2VPZk5laWdoYm9yTW9udGgoZ2V0TW9udGhFbmQsIC0xKTtcbmV4cG9ydCB2YXIgZ2V0TmV4dE1vbnRoRW5kID0gbWFrZUdldEVkZ2VPZk5laWdoYm9yTW9udGgoZ2V0TW9udGhFbmQsIDEpO1xuZXhwb3J0IHZhciBnZXRNb250aFJhbmdlID0gbWFrZUdldFJhbmdlKFtnZXRNb250aFN0YXJ0LCBnZXRNb250aEVuZF0pO1xuLyoqXG4gKiBEYXlcbiAqL1xuXG5mdW5jdGlvbiBtYWtlR2V0RWRnZU9mTmVpZ2hib3JEYXkoZ2V0RWRnZU9mUGVyaW9kLCBkZWZhdWx0T2Zmc2V0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBtYWtlR2V0RWRnZU9mTmVpZ2hib3JEYXlJbnRlcm5hbChkYXRlKSB7XG4gICAgdmFyIG9mZnNldCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZGVmYXVsdE9mZnNldDtcbiAgICB2YXIgeWVhciA9IGdldFllYXIoZGF0ZSk7XG4gICAgdmFyIG1vbnRoID0gZ2V0TW9udGgoZGF0ZSk7XG4gICAgdmFyIGRheSA9IGdldERhdGUoZGF0ZSkgKyBvZmZzZXQ7XG4gICAgdmFyIHByZXZpb3VzUGVyaW9kID0gbmV3IERhdGUoKTtcbiAgICBwcmV2aW91c1BlcmlvZC5zZXRGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF5KTtcbiAgICBwcmV2aW91c1BlcmlvZC5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICByZXR1cm4gZ2V0RWRnZU9mUGVyaW9kKHByZXZpb3VzUGVyaW9kKTtcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERheVN0YXJ0KGRhdGUpIHtcbiAgdmFyIHllYXIgPSBnZXRZZWFyKGRhdGUpO1xuICB2YXIgbW9udGggPSBnZXRNb250aChkYXRlKTtcbiAgdmFyIGRheSA9IGdldERhdGUoZGF0ZSk7XG4gIHZhciBkYXlTdGFydERhdGUgPSBuZXcgRGF0ZSgpO1xuICBkYXlTdGFydERhdGUuc2V0RnVsbFllYXIoeWVhciwgbW9udGgsIGRheSk7XG4gIGRheVN0YXJ0RGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgcmV0dXJuIGRheVN0YXJ0RGF0ZTtcbn1cbmV4cG9ydCB2YXIgZ2V0UHJldmlvdXNEYXlTdGFydCA9IG1ha2VHZXRFZGdlT2ZOZWlnaGJvckRheShnZXREYXlTdGFydCwgLTEpO1xuZXhwb3J0IHZhciBnZXROZXh0RGF5U3RhcnQgPSBtYWtlR2V0RWRnZU9mTmVpZ2hib3JEYXkoZ2V0RGF5U3RhcnQsIDEpO1xuZXhwb3J0IHZhciBnZXREYXlFbmQgPSBtYWtlR2V0RW5kKGdldE5leHREYXlTdGFydCk7XG5leHBvcnQgdmFyIGdldFByZXZpb3VzRGF5RW5kID0gbWFrZUdldEVkZ2VPZk5laWdoYm9yRGF5KGdldERheUVuZCwgLTEpO1xuZXhwb3J0IHZhciBnZXROZXh0RGF5RW5kID0gbWFrZUdldEVkZ2VPZk5laWdoYm9yRGF5KGdldERheUVuZCwgMSk7XG5leHBvcnQgdmFyIGdldERheVJhbmdlID0gbWFrZUdldFJhbmdlKFtnZXREYXlTdGFydCwgZ2V0RGF5RW5kXSk7XG4vKipcbiAqIE90aGVyXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIGEgbnVtYmVyIG9mIGRheXMgaW4gYSBtb250aCBvZiBhIGdpdmVuIGRhdGUuXG4gKlxuICogQHBhcmFtIHtEYXRlfSBkYXRlIERhdGUuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERheXNJbk1vbnRoKGRhdGUpIHtcbiAgcmV0dXJuIGdldERhdGUoZ2V0TW9udGhFbmQoZGF0ZSkpO1xufVxuXG5mdW5jdGlvbiBwYWRTdGFydChudW0pIHtcbiAgdmFyIHZhbCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogMjtcbiAgdmFyIG51bVN0ciA9IFwiXCIuY29uY2F0KG51bSk7XG5cbiAgaWYgKG51bVN0ci5sZW5ndGggPj0gdmFsKSB7XG4gICAgcmV0dXJuIG51bTtcbiAgfVxuXG4gIHJldHVybiBcIjAwMDBcIi5jb25jYXQobnVtU3RyKS5zbGljZSgtdmFsKTtcbn1cbi8qKlxuICogUmV0dXJucyBsb2NhbCBob3VycyBhbmQgbWludXRlcyAoaGg6bW0pLlxuICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhvdXJzTWludXRlcyhkYXRlKSB7XG4gIHZhciBob3VycyA9IHBhZFN0YXJ0KGdldEhvdXJzKGRhdGUpKTtcbiAgdmFyIG1pbnV0ZXMgPSBwYWRTdGFydChnZXRNaW51dGVzKGRhdGUpKTtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KGhvdXJzLCBcIjpcIikuY29uY2F0KG1pbnV0ZXMpO1xufVxuLyoqXG4gKiBSZXR1cm5zIGxvY2FsIGhvdXJzLCBtaW51dGVzIGFuZCBzZWNvbmRzIChoaDptbTpzcykuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEhvdXJzTWludXRlc1NlY29uZHMoZGF0ZSkge1xuICB2YXIgaG91cnMgPSBwYWRTdGFydChnZXRIb3VycyhkYXRlKSk7XG4gIHZhciBtaW51dGVzID0gcGFkU3RhcnQoZ2V0TWludXRlcyhkYXRlKSk7XG4gIHZhciBzZWNvbmRzID0gcGFkU3RhcnQoZ2V0U2Vjb25kcyhkYXRlKSk7XG4gIHJldHVybiBcIlwiLmNvbmNhdChob3VycywgXCI6XCIpLmNvbmNhdChtaW51dGVzLCBcIjpcIikuY29uY2F0KHNlY29uZHMpO1xufVxuLyoqXG4gKiBSZXR1cm5zIGxvY2FsIG1vbnRoIGluIElTTy1saWtlIGZvcm1hdCAoWVlZWS1NTSkuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldElTT0xvY2FsTW9udGgoZGF0ZSkge1xuICB2YXIgeWVhciA9IHBhZFN0YXJ0KGdldFllYXIoZGF0ZSksIDQpO1xuICB2YXIgbW9udGggPSBwYWRTdGFydChnZXRNb250aEh1bWFuKGRhdGUpKTtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KHllYXIsIFwiLVwiKS5jb25jYXQobW9udGgpO1xufVxuLyoqXG4gKiBSZXR1cm5zIGxvY2FsIGRhdGUgaW4gSVNPLWxpa2UgZm9ybWF0IChZWVlZLU1NLUREKS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SVNPTG9jYWxEYXRlKGRhdGUpIHtcbiAgdmFyIHllYXIgPSBwYWRTdGFydChnZXRZZWFyKGRhdGUpLCA0KTtcbiAgdmFyIG1vbnRoID0gcGFkU3R
2hcnQoZ2V0TW9udGhIdW1hbihkYXRlKSk7XG4gIHZhciBkYXkgPSBwYWRTdGFydChnZXREYXRlKGRhdGUpKTtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KHllYXIsIFwiLVwiKS5jb25jYXQobW9udGgsIFwiLVwiKS5jb25jYXQoZGF5KTtcbn1cbi8qKlxuICogUmV0dXJucyBsb2NhbCBkYXRlICYgdGltZSBpbiBJU08tbGlrZSBmb3JtYXQgKFlZWVktTU0tRERUaGg6bW06c3MpLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJU09Mb2NhbERhdGVUaW1lKGRhdGUpIHtcbiAgcmV0dXJuIFwiXCIuY29uY2F0KGdldElTT0xvY2FsRGF0ZShkYXRlKSwgXCJUXCIpLmNvbmNhdChnZXRIb3Vyc01pbnV0ZXNTZWNvbmRzKGRhdGUpKTtcbn0iLCJ2YXIgX0NBTEVOREFSX1RZUEVfTE9DQUxFO1xuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmV4cG9ydCB2YXIgQ0FMRU5EQVJfVFlQRVMgPSB7XG4gIEFSQUJJQzogJ0FyYWJpYycsXG4gIEhFQlJFVzogJ0hlYnJldycsXG4gIElTT184NjAxOiAnSVNPIDg2MDEnLFxuICBVUzogJ1VTJ1xufTtcbmV4cG9ydCB2YXIgQ0FMRU5EQVJfVFlQRV9MT0NBTEVTID0gKF9DQUxFTkRBUl9UWVBFX0xPQ0FMRSA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX0NBTEVOREFSX1RZUEVfTE9DQUxFLCBDQUxFTkRBUl9UWVBFUy5VUywgWydlbi1DQScsICdlbi1VUycsICdlcy1BUicsICdlcy1CTycsICdlcy1DTCcsICdlcy1DTycsICdlcy1DUicsICdlcy1ETycsICdlcy1FQycsICdlcy1HVCcsICdlcy1ITicsICdlcy1NWCcsICdlcy1OSScsICdlcy1QQScsICdlcy1QRScsICdlcy1QUicsICdlcy1TVicsICdlcy1WRScsICdwdC1CUiddKSwgX2RlZmluZVByb3BlcnR5KF9DQUxFTkRBUl9UWVBFX0xPQ0FMRSwgQ0FMRU5EQVJfVFlQRVMuQVJBQklDLCBbLy8gYXItTEIsIGFyLU1BIGludGVudGlvbmFsbHkgbWlzc2luZ1xuJ2FyJywgJ2FyLUFFJywgJ2FyLUJIJywgJ2FyLURaJywgJ2FyLUVHJywgJ2FyLUlRJywgJ2FyLUpPJywgJ2FyLUtXJywgJ2FyLUxZJywgJ2FyLU9NJywgJ2FyLVFBJywgJ2FyLVNBJywgJ2FyLVNEJywgJ2FyLVNZJywgJ2FyLVlFJywgJ2R2JywgJ2R2LU1WJywgJ3BzJywgJ3BzLUFSJ10pLCBfZGVmaW5lUHJvcGVydHkoX0NBTEVOREFSX1RZUEVfTE9DQUxFLCBDQUxFTkRBUl9UWVBFUy5IRUJSRVcsIFsnaGUnLCAnaGUtSUwnXSksIF9DQUxFTkRBUl9UWVBFX0xPQ0FMRSk7XG5leHBvcnQgdmFyIFdFRUtEQVlTID0gX3RvQ29uc3VtYWJsZUFycmF5KEFycmF5KDcpKS5tYXAoZnVuY3Rpb24gKGVsLCBpbmRleCkge1xuICByZXR1cm4gaW5kZXg7XG59KTsiLCJpbXBvcnQgZ2V0VXNlckxvY2FsZSBmcm9tICdnZXQtdXNlci1sb2NhbGUnO1xudmFyIGZvcm1hdHRlckNhY2hlID0gbmV3IE1hcCgpO1xuXG5mdW5jdGlvbiBnZXRGb3JtYXR0ZXIob3B0aW9ucykge1xuICByZXR1cm4gZnVuY3Rpb24gKGxvY2FsZSwgZGF0ZSkge1xuICAgIHZhciBsb2NhbGVXaXRoRGVmYXVsdCA9IGxvY2FsZSB8fCBnZXRVc2VyTG9jYWxlKCk7XG5cbiAgICBpZiAoIWZvcm1hdHRlckNhY2hlLmhhcyhsb2NhbGVXaXRoRGVmYXVsdCkpIHtcbiAgICAgIGZvcm1hdHRlckNhY2hlLnNldChsb2NhbGVXaXRoRGVmYXVsdCwgbmV3IE1hcCgpKTtcbiAgICB9XG5cbiAgICB2YXIgZm9ybWF0dGVyQ2FjaGVMb2NhbGUgPSBmb3JtYXR0ZXJDYWNoZS5nZXQobG9jYWxlV2l0aERlZmF1bHQpO1xuXG4gICAgaWYgKCFmb3JtYXR0ZXJDYWNoZUxvY2FsZS5oYXMob3B0aW9ucykpIHtcbiAgICAgIGZvcm1hdHRlckNhY2hlTG9jYWxlLnNldChvcHRpb25zLCBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGVXaXRoRGVmYXVsdCwgb3B0aW9ucykuZm9ybWF0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZm9ybWF0dGVyQ2FjaGVMb2NhbGUuZ2V0KG9wdGlvbnMpKGRhdGUpO1xuICB9O1xufVxuLyoqXG4gKiBDaGFuZ2VzIHRoZSBob3VyIGluIGEgRGF0ZSB0byBlbnN1cmUgcmlnaHQgZGF0ZSBmb3JtYXR0aW5nIGV2ZW4gaWYgRFNUIGlzIG1lc3NlZCB1cC5cbiAqIFdvcmthcm91bmQgZm9yIGJ1ZyBpbiBXZWJLaXQgYW5kIEZpcmVmb3ggd2l0aCBoaXN0b3JpY2FsIGRhdGVzLlxuICogRm9yIG1vcmUgZGV0YWlscywgc2VlOlxuICogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NzUwNDY1XG4gKiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9p
2ZD0xMzg1NjQzXG4gKlxuICogQHBhcmFtIHtEYXRlfSBkYXRlIERhdGUuXG4gKi9cblxuXG5mdW5jdGlvbiB0b1NhZmVIb3VyKGRhdGUpIHtcbiAgdmFyIHNhZmVEYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gIHJldHVybiBuZXcgRGF0ZShzYWZlRGF0ZS5zZXRIb3VycygxMikpO1xufVxuXG5mdW5jdGlvbiBnZXRTYWZlRm9ybWF0dGVyKG9wdGlvbnMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChsb2NhbGUsIGRhdGUpIHtcbiAgICByZXR1cm4gZ2V0Rm9ybWF0dGVyKG9wdGlvbnMpKGxvY2FsZSwgdG9TYWZlSG91cihkYXRlKSk7XG4gIH07XG59XG5cbnZhciBmb3JtYXREYXRlT3B0aW9ucyA9IHtcbiAgZGF5OiAnbnVtZXJpYycsXG4gIG1vbnRoOiAnbnVtZXJpYycsXG4gIHllYXI6ICdudW1lcmljJ1xufTtcbnZhciBmb3JtYXREYXlPcHRpb25zID0ge1xuICBkYXk6ICdudW1lcmljJ1xufTtcbnZhciBmb3JtYXRMb25nRGF0ZU9wdGlvbnMgPSB7XG4gIGRheTogJ251bWVyaWMnLFxuICBtb250aDogJ2xvbmcnLFxuICB5ZWFyOiAnbnVtZXJpYydcbn07XG52YXIgZm9ybWF0TW9udGhPcHRpb25zID0ge1xuICBtb250aDogJ2xvbmcnXG59O1xudmFyIGZvcm1hdE1vbnRoWWVhck9wdGlvbnMgPSB7XG4gIG1vbnRoOiAnbG9uZycsXG4gIHllYXI6ICdudW1lcmljJ1xufTtcbnZhciBmb3JtYXRTaG9ydFdlZWtkYXlPcHRpb25zID0ge1xuICB3ZWVrZGF5OiAnc2hvcnQnXG59O1xudmFyIGZvcm1hdFdlZWtkYXlPcHRpb25zID0ge1xuICB3ZWVrZGF5OiAnbG9uZydcbn07XG52YXIgZm9ybWF0WWVhck9wdGlvbnMgPSB7XG4gIHllYXI6ICdudW1lcmljJ1xufTtcbmV4cG9ydCB2YXIgZm9ybWF0RGF0ZSA9IGdldFNhZmVGb3JtYXR0ZXIoZm9ybWF0RGF0ZU9wdGlvbnMpO1xuZXhwb3J0IHZhciBmb3JtYXREYXkgPSBnZXRTYWZlRm9ybWF0dGVyKGZvcm1hdERheU9wdGlvbnMpO1xuZXhwb3J0IHZhciBmb3JtYXRMb25nRGF0ZSA9IGdldFNhZmVGb3JtYXR0ZXIoZm9ybWF0TG9uZ0RhdGVPcHRpb25zKTtcbmV4cG9ydCB2YXIgZm9ybWF0TW9udGggPSBnZXRTYWZlRm9ybWF0dGVyKGZvcm1hdE1vbnRoT3B0aW9ucyk7XG5leHBvcnQgdmFyIGZvcm1hdE1vbnRoWWVhciA9IGdldFNhZmVGb3JtYXR0ZXIoZm9ybWF0TW9udGhZZWFyT3B0aW9ucyk7XG5leHBvcnQgdmFyIGZvcm1hdFNob3J0V2Vla2RheSA9IGdldFNhZmVGb3JtYXR0ZXIoZm9ybWF0U2hvcnRXZWVrZGF5T3B0aW9ucyk7XG5leHBvcnQgdmFyIGZvcm1hdFdlZWtkYXkgPSBnZXRTYWZlRm9ybWF0dGVyKGZvcm1hdFdlZWtkYXlPcHRpb25zKTtcbmV4cG9ydCB2YXIgZm9ybWF0WWVhciA9IGdldFNhZmVGb3JtYXR0ZXIoZm9ybWF0WWVhck9wdGlvbnMpOyIsImltcG9ydCB7IGdldFllYXIsIGdldE1vbnRoIGFzIGdldE1vbnRoSW5kZXgsIGdldENlbnR1cnlTdGFydCwgZ2V0UHJldmlvdXNDZW50dXJ5U3RhcnQsIGdldE5leHRDZW50dXJ5U3RhcnQsIGdldENlbnR1cnlFbmQsIGdldFByZXZpb3VzQ2VudHVyeUVuZCwgZ2V0Q2VudHVyeVJhbmdlLCBnZXREZWNhZGVTdGFydCwgZ2V0UHJldmlvdXNEZWNhZGVTdGFydCwgZ2V0TmV4dERlY2FkZVN0YXJ0LCBnZXREZWNhZGVFbmQsIGdldFByZXZpb3VzRGVjYWRlRW5kLCBnZXREZWNhZGVSYW5nZSwgZ2V0WWVhclN0YXJ0LCBnZXRQcmV2aW91c1llYXJTdGFydCwgZ2V0TmV4dFllYXJTdGFydCwgZ2V0WWVhckVuZCwgZ2V0UHJldmlvdXNZZWFyRW5kLCBnZXRZZWFyUmFuZ2UsIGdldE1vbnRoU3RhcnQsIGdldFByZXZpb3VzTW9udGhTdGFydCwgZ2V0TmV4dE1vbnRoU3RhcnQsIGdldE1vbnRoRW5kLCBnZXRQcmV2aW91c01vbnRoRW5kLCBnZXRNb250aFJhbmdlLCBnZXREYXlTdGFydCwgZ2V0RGF5RW5kLCBnZXREYXlSYW5nZSB9IGZyb20gJ0B3b2p0ZWttYWovZGF0ZS11dGlscyc7XG5pbXBvcnQgeyBDQUxFTkRBUl9UWVBFUywgV0VFS0RBWVMgfSBmcm9tICcuL2NvbnN0JztcbmltcG9ydCB7IGZvcm1hdFllYXIgYXMgZGVmYXVsdEZvcm1hdFllYXIgfSBmcm9tICcuL2RhdGVGb3JtYXR0ZXInO1xudmFyIFNVTkRBWSA9IFdFRUtEQVlTWzBdO1xudmFyIEZSSURBWSA9IFdFRUtEQVlTWzVdO1xudmFyIFNBVFVSREFZID0gV0VFS0RBWVNbNl07XG4vKiBTaW1wbGUgZ2V0dGVycyAtIGdldHRpbmcgYSBwcm9wZXJ0eSBvZiBhIGdpdmVuIHBvaW50IGluIHRpbWUgKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERheU9mV2VlayhkYXRlKSB7XG4gIHZhciBjYWxlbmRhclR5cGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IENBTEVOREFSX1RZUEVTLklTT184NjAxO1xuICB2YXIgd2Vla2RheSA9IGRhdGUuZ2V0RGF5KCk7XG5cbiAgc3dpdGNoIChjYWxlbmRhclR5cGUpIHtcbiAgICBjYXNlIENBTEVOREFSX1RZUEVTLklTT184NjAxOlxuICAgICAgLy8gU2hpZnRzIGRheXMgb2YgdGhlIHdlZWsgc28gdGhhdCBNb25kYXkgaXMgMCwgU3VuZGF5IGlzIDZcbiAgICAgIHJldHVybiAod2Vla2RheSArIDYpICUgNztcblxuICAgIGNhc2UgQ0FMRU5EQVJfVFlQRVMuQVJBQklDOlxuICAgICAgcmV0dXJuICh3ZWVrZGF5ICsgMSkgJSA3O1xuXG4gICAgY2FzZSBDQUxFTkRBUl9UWVBFUy5IRUJSRVc6XG4gICAgY2FzZSBDQUxFTkRBUl9UWVBFUy5VUzpcbiAgICAgIHJldHVybiB3ZWVrZGF5O1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY2FsZW5kYXIgdHlwZS4nKTtcbiAgfVxufVxuLyoqXG4gKiBDZW50dXJ5XG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJlZ2luT2ZDZW50dXJ5WWVhcihkYXRlKSB7XG4gIHZhciBiZWdpbk9mQ2VudHVyeSA9IGdldENlbnR1cnlTdGFydChkYXRlKTtcbiAgcmV0dXJuIGdldFllYXIoYmVnaW5PZkNlbnR1cnkpO1xufVxuLyoqXG4gKiBEZWNhZGVcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmVnaW5PZkRlY2FkZVllYXIoZGF0ZSkge1xuICB2YXIgYmVnaW5PZkRlY2FkZSA9IGdldERlY2FkZVN0YXJ0KGRhdGUpO1xuICByZXR1cm4gZ2V0WWVhcihiZWdpbk9mRGVjYWRlKTtcbn1cbi8qKlxuICogV2Vla1xuICovXG5cbi8qKlxuICogUmV0dXJucyB0aGUgYmVnaW5uaW5nIG9mIGEgZ2l2ZW4gd2Vlay5cbiAqXG4gKiBAcGFyYW0ge0RhdGV9IGRhdGUgRGF0ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjYWxlbmRhclR5cGUgQ2FsZW5kYXIgdHlwZS4gQ2FuIGJlIElTTyA4
2NjAxIG9yIFVTLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCZWdpbk9mV2VlayhkYXRlKSB7XG4gIHZhciBjYWxlbmRhclR5cGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6IENBTEVOREFSX1RZUEVTLklTT184NjAxO1xuICB2YXIgeWVhciA9IGdldFllYXIoZGF0ZSk7XG4gIHZhciBtb250aEluZGV4ID0gZ2V0TW9udGhJbmRleChkYXRlKTtcbiAgdmFyIGRheSA9IGRhdGUuZ2V0RGF0ZSgpIC0gZ2V0RGF5T2ZXZWVrKGRhdGUsIGNhbGVuZGFyVHlwZSk7XG4gIHJldHVybiBuZXcgRGF0ZSh5ZWFyLCBtb250aEluZGV4LCBkYXkpO1xufVxuLyoqXG4gKiBHZXRzIHdlZWsgbnVtYmVyIGFjY29yZGluZyB0byBJU08gODYwMSBvciBVUyBzdGFuZGFyZC5cbiAqIEluIElTTyA4NjAxLCBBcmFiaWMgYW5kIEhlYnJldyB3ZWVrIDEgaXMgdGhlIG9uZSB3aXRoIEphbnVhcnkgNC5cbiAqIEluIFVTIGNhbGVuZGFyIHdlZWsgMSBpcyB0aGUgb25lIHdpdGggSmFudWFyeSAxLlxuICpcbiAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSBEYXRlLlxuICogQHBhcmFtIHtzdHJpbmd9IGNhbGVuZGFyVHlwZSBDYWxlbmRhciB0eXBlLiBDYW4gYmUgSVNPIDg2MDEgb3IgVVMuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFdlZWtOdW1iZXIoZGF0ZSkge1xuICB2YXIgY2FsZW5kYXJUeXBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBDQUxFTkRBUl9UWVBFUy5JU09fODYwMTtcbiAgdmFyIGNhbGVuZGFyVHlwZUZvcldlZWtOdW1iZXIgPSBjYWxlbmRhclR5cGUgPT09IENBTEVOREFSX1RZUEVTLlVTID8gQ0FMRU5EQVJfVFlQRVMuVVMgOiBDQUxFTkRBUl9UWVBFUy5JU09fODYwMTtcbiAgdmFyIGJlZ2luT2ZXZWVrID0gZ2V0QmVnaW5PZldlZWsoZGF0ZSwgY2FsZW5kYXJUeXBlKTtcbiAgdmFyIHllYXIgPSBnZXRZZWFyKGRhdGUpICsgMTtcbiAgdmFyIGRheUluV2Vla09uZTtcbiAgdmFyIGJlZ2luT2ZGaXJzdFdlZWs7IC8vIExvb2sgZm9yIHRoZSBmaXJzdCB3ZWVrIG9uZSB0aGF0IGRvZXMgbm90IGNvbWUgYWZ0ZXIgYSBnaXZlbiBkYXRlXG5cbiAgZG8ge1xuICAgIGRheUluV2Vla09uZSA9IG5ldyBEYXRlKHllYXIsIDAsIGNhbGVuZGFyVHlwZUZvcldlZWtOdW1iZXIgPT09IENBTEVOREFSX1RZUEVTLklTT184NjAxID8gNCA6IDEpO1xuICAgIGJlZ2luT2ZGaXJzdFdlZWsgPSBnZXRCZWdpbk9mV2VlayhkYXlJbldlZWtPbmUsIGNhbGVuZGFyVHlwZSk7XG4gICAgeWVhciAtPSAxO1xuICB9IHdoaWxlIChkYXRlIDwgYmVnaW5PZkZpcnN0V2Vlayk7XG5cbiAgcmV0dXJuIE1hdGgucm91bmQoKGJlZ2luT2ZXZWVrIC0gYmVnaW5PZkZpcnN0V2VlaykgLyAoOC42NGU3ICogNykpICsgMTtcbn1cbi8qKlxuICogT3RoZXJzXG4gKi9cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBiZWdpbm5pbmcgb2YgYSBnaXZlbiByYW5nZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmFuZ2VUeXBlIFJhbmdlIHR5cGUgKGUuZy4gJ2RheScpXG4gKiBAcGFyYW0ge0RhdGV9IGRhdGUgRGF0ZS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0QmVnaW4ocmFuZ2VUeXBlLCBkYXRlKSB7XG4gIHN3aXRjaCAocmFuZ2VUeXBlKSB7XG4gICAgY2FzZSAnY2VudHVyeSc6XG4gICAgICByZXR1cm4gZ2V0Q2VudHVyeVN0YXJ0KGRhdGUpO1xuXG4gICAgY2FzZSAnZGVjYWRlJzpcbiAgICAgIHJldHVybiBnZXREZWNhZGVTdGFydChkYXRlKTtcblxuICAgIGNhc2UgJ3llYXInOlxuICAgICAgcmV0dXJuIGdldFllYXJTdGFydChkYXRlKTtcblxuICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIHJldHVybiBnZXRNb250aFN0YXJ0KGRhdGUpO1xuXG4gICAgY2FzZSAnZGF5JzpcbiAgICAgIHJldHVybiBnZXREYXlTdGFydChkYXRlKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KHJhbmdlVHlwZSkpO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QmVnaW5QcmV2aW91cyhyYW5nZVR5cGUsIGRhdGUpIHtcbiAgc3dpdGNoIChyYW5nZVR5cGUpIHtcbiAgICBjYXNlICdjZW50dXJ5JzpcbiAgICAgIHJldHVybiBnZXRQcmV2aW91c0NlbnR1cnlTdGFydChkYXRlKTtcblxuICAgIGNhc2UgJ2RlY2FkZSc6XG4gICAgICByZXR1cm4gZ2V0UHJldmlvdXNEZWNhZGVTdGFydChkYXRlKTtcblxuICAgIGNhc2UgJ3llYXInOlxuICAgICAgcmV0dXJuIGdldFByZXZpb3VzWWVhclN0YXJ0KGRhdGUpO1xuXG4gICAgY2FzZSAnbW9udGgnOlxuICAgICAgcmV0dXJuIGdldFByZXZpb3VzTW9udGhTdGFydChkYXRlKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KHJhbmdlVHlwZSkpO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0QmVnaW5OZXh0KHJhbmdlVHlwZSwgZGF0ZSkge1xuICBzd2l0Y2ggKHJhbmdlVHlwZSkge1xuICAgIGNhc2UgJ2NlbnR1cnknOlxuICAgICAgcmV0dXJuIGdldE5leHRDZW50dXJ5U3RhcnQoZGF0ZSk7XG5cbiAgICBjYXNlICdkZWNhZGUnOlxuICAgICAgcmV0dXJuIGdldE5leHREZWNhZGVTdGFydChkYXRlKTtcblxuICAgIGNhc2UgJ3llYXInOlxuICAgICAgcmV0dXJuIGdldE5leHRZZWFyU3RhcnQoZGF0ZSk7XG5cbiAgICBjYXNlICdtb250aCc6XG4gICAgICByZXR1cm4gZ2V0TmV4dE1vbnRoU3RhcnQoZGF0ZSk7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChyYW5nZVR5cGUpKTtcbiAgfVxufVxuZXhwb3J0IHZhciBnZXRCZWdpblByZXZpb3VzMiA9IGZ1bmN0aW9uIGdldEJlZ2luUHJldmlvdXMyKHJhbmdlVHlwZSwgZGF0ZSkge1xuICBzd2l0Y2ggKHJhbmdlVHlwZSkge1xuICAgIGNhc2UgJ2RlY2FkZSc6XG4gICAgICByZXR1cm4gZ2V0UHJldmlvdXNEZWNhZGVTdGFydChkYXRlLCAtMTAwKTtcblxuICAgIGNhc2UgJ3llYXInOlxuICAgICAgcmV0dXJuIGdldFByZXZpb3VzWWVhclN0YXJ0KGRhdGUsIC0xMCk7XG5cbiAgICBjYXNlICdtb250aCc6XG4gICAgICByZXR1cm4gZ2V0UHJldmlvdXNNb250aFN0YXJ0KGRhdGUsIC0xMik7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChyYW5nZVR5cGUpKTtcbiAgfVxufTtcbmV4cG9ydCB2YXIgZ2V0QmVnaW5OZXh0MiA9IGZ1bmN0aW9uIGdldEJlZ2luTmV4dDIocmFuZ2VUeXBlLCBkYXRlKSB7XG4gIHN3aXRjaCAocmFuZ2VUeXBlKSB7XG4gICAgY2FzZSAnZGVjYWRlJzpcbiAgICAgIHJldHVybi
2BnZXROZXh0RGVjYWRlU3RhcnQoZGF0ZSwgMTAwKTtcblxuICAgIGNhc2UgJ3llYXInOlxuICAgICAgcmV0dXJuIGdldE5leHRZZWFyU3RhcnQoZGF0ZSwgMTApO1xuXG4gICAgY2FzZSAnbW9udGgnOlxuICAgICAgcmV0dXJuIGdldE5leHRNb250aFN0YXJ0KGRhdGUsIDEyKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KHJhbmdlVHlwZSkpO1xuICB9XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBlbmQgb2YgYSBnaXZlbiByYW5nZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmFuZ2VUeXBlIFJhbmdlIHR5cGUgKGUuZy4gJ2RheScpXG4gKiBAcGFyYW0ge0RhdGV9IGRhdGUgRGF0ZS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5kKHJhbmdlVHlwZSwgZGF0ZSkge1xuICBzd2l0Y2ggKHJhbmdlVHlwZSkge1xuICAgIGNhc2UgJ2NlbnR1cnknOlxuICAgICAgcmV0dXJuIGdldENlbnR1cnlFbmQoZGF0ZSk7XG5cbiAgICBjYXNlICdkZWNhZGUnOlxuICAgICAgcmV0dXJuIGdldERlY2FkZUVuZChkYXRlKTtcblxuICAgIGNhc2UgJ3llYXInOlxuICAgICAgcmV0dXJuIGdldFllYXJFbmQoZGF0ZSk7XG5cbiAgICBjYXNlICdtb250aCc6XG4gICAgICByZXR1cm4gZ2V0TW9udGhFbmQoZGF0ZSk7XG5cbiAgICBjYXNlICdkYXknOlxuICAgICAgcmV0dXJuIGdldERheUVuZChkYXRlKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KHJhbmdlVHlwZSkpO1xuICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RW5kUHJldmlvdXMocmFuZ2VUeXBlLCBkYXRlKSB7XG4gIHN3aXRjaCAocmFuZ2VUeXBlKSB7XG4gICAgY2FzZSAnY2VudHVyeSc6XG4gICAgICByZXR1cm4gZ2V0UHJldmlvdXNDZW50dXJ5RW5kKGRhdGUpO1xuXG4gICAgY2FzZSAnZGVjYWRlJzpcbiAgICAgIHJldHVybiBnZXRQcmV2aW91c0RlY2FkZUVuZChkYXRlKTtcblxuICAgIGNhc2UgJ3llYXInOlxuICAgICAgcmV0dXJuIGdldFByZXZpb3VzWWVhckVuZChkYXRlKTtcblxuICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIHJldHVybiBnZXRQcmV2aW91c01vbnRoRW5kKGRhdGUpO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgcmFuZ2VUeXBlOiBcIi5jb25jYXQocmFuZ2VUeXBlKSk7XG4gIH1cbn1cbmV4cG9ydCB2YXIgZ2V0RW5kUHJldmlvdXMyID0gZnVuY3Rpb24gZ2V0RW5kUHJldmlvdXMyKHJhbmdlVHlwZSwgZGF0ZSkge1xuICBzd2l0Y2ggKHJhbmdlVHlwZSkge1xuICAgIGNhc2UgJ2RlY2FkZSc6XG4gICAgICByZXR1cm4gZ2V0UHJldmlvdXNEZWNhZGVFbmQoZGF0ZSwgLTEwMCk7XG5cbiAgICBjYXNlICd5ZWFyJzpcbiAgICAgIHJldHVybiBnZXRQcmV2aW91c1llYXJFbmQoZGF0ZSwgLTEwKTtcblxuICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIHJldHVybiBnZXRQcmV2aW91c01vbnRoRW5kKGRhdGUsIC0xMik7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCByYW5nZVR5cGU6IFwiLmNvbmNhdChyYW5nZVR5cGUpKTtcbiAgfVxufTtcbi8qKlxuICogUmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSBiZWdpbm5pbmcgYW5kIHRoZSBlbmQgb2YgYSBnaXZlbiByYW5nZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcmFuZ2VUeXBlIFJhbmdlIHR5cGUgKGUuZy4gJ2RheScpXG4gKiBAcGFyYW0ge0RhdGV9IGRhdGUgRGF0ZS5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmFuZ2UocmFuZ2VUeXBlLCBkYXRlKSB7XG4gIHN3aXRjaCAocmFuZ2VUeXBlKSB7XG4gICAgY2FzZSAnY2VudHVyeSc6XG4gICAgICByZXR1cm4gZ2V0Q2VudHVyeVJhbmdlKGRhdGUpO1xuXG4gICAgY2FzZSAnZGVjYWRlJzpcbiAgICAgIHJldHVybiBnZXREZWNhZGVSYW5nZShkYXRlKTtcblxuICAgIGNhc2UgJ3llYXInOlxuICAgICAgcmV0dXJuIGdldFllYXJSYW5nZShkYXRlKTtcblxuICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIHJldHVybiBnZXRNb250aFJhbmdlKGRhdGUpO1xuXG4gICAgY2FzZSAnZGF5JzpcbiAgICAgIHJldHVybiBnZXREYXlSYW5nZShkYXRlKTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHJhbmdlVHlwZTogXCIuY29uY2F0KHJhbmdlVHlwZSkpO1xuICB9XG59XG4vKipcbiAqIENyZWF0ZXMgYSByYW5nZSBvdXQgb2YgdHdvIHZhbHVlcywgZW5zdXJpbmcgdGhleSBhcmUgaW4gb3JkZXIgYW5kIGNvdmVyaW5nIGVudGlyZSBwZXJpb2QgcmFuZ2VzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByYW5nZVR5cGUgUmFuZ2UgdHlwZSAoZS5nLiAnZGF5JylcbiAqIEBwYXJhbSB7RGF0ZX0gZGF0ZTEgRmlyc3QgZGF0ZS5cbiAqIEBwYXJhbSB7RGF0ZX0gZGF0ZTIgU2Vjb25kIGRhdGUuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZhbHVlUmFuZ2UocmFuZ2VUeXBlLCBkYXRlMSwgZGF0ZTIpIHtcbiAgdmFyIHJhd05leHRWYWx1ZSA9IFtkYXRlMSwgZGF0ZTJdLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYSAtIGI7XG4gIH0pO1xuICByZXR1cm4gW2dldEJlZ2luKHJhbmdlVHlwZSwgcmF3TmV4dFZhbHVlWzBdKSwgZ2V0RW5kKHJhbmdlVHlwZSwgcmF3TmV4dFZhbHVlWzFdKV07XG59XG5cbmZ1bmN0aW9uIHRvWWVhckxhYmVsKGxvY2FsZSkge1xuICB2YXIgZm9ybWF0WWVhciA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzFdIDogZGVmYXVsdEZvcm1hdFllYXI7XG4gIHZhciBkYXRlcyA9IGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICByZXR1cm4gZGF0ZXMubWFwKGZ1bmN0aW9uIChkYXRlKSB7XG4gICAgcmV0dXJuIGZvcm1hdFllYXIobG9jYWxlLCBkYXRlKTtcbiAgfSkuam9pbignIOKAkyAnKTtcbn1cbi8qKlxuICogUmV0dXJucyBhIHN0cmluZyBsYWJlbGxpbmcgYSBjZW50dXJ5IG9mIGEgZ2l2ZW4gZGF0ZS5cbiAqIEZvciBleGFtcGxlLCBmb3IgMjAxNyBpdCB3aWxsIHJldHVybiAyMDAxLTIxMDAuXG4gKlxuICogQHBhcmFtIHtEYXRlfFN0cmluZ3xOdW1iZXJ9IGRhdGUgRGF0ZSBvciBhIHllYXIgYXMgYSBzdHJpbmcgb3IgYXMgYSBudW1iZXIuXG4gKi9cblxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2VudHVyeUxhYmVsKGxvY2FsZSwgZm9ybWF0WWVhciwgZGF0ZSkge1xuICByZXR1cm4gdG9ZZWFyTGFiZWwobG9jYWxlLCBmb3JtYXRZZWFyLCBnZXRDZW50dXJ5UmFuZ2UoZGF0ZSkpO1xufVxuLyoqXG4gKiBSZXR1cm5zIGEgc3RyaW5nIGxhYmVsbGluZyBhIGNlbnR1cnkgb2YgYSBnaXZlbiBkYXRlLlxuICogRm9yIGV4YW1wbGUsIGZvciAyMDE3IGl0IHdpbGwgcmV0dXJuIDIwMTEtMjAyMC5cbiAqXG4gKiBAcGFyYW0ge0RhdGV8U3RyaW5nfE51bWJlcn0gZGF0ZSBEYXRlIG9yIGEgeWVhciBhcyBh
2IHN0cmluZyBvciBhcyBhIG51bWJlci5cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVjYWRlTGFiZWwobG9jYWxlLCBmb3JtYXRZZWFyLCBkYXRlKSB7XG4gIHJldHVybiB0b1llYXJMYWJlbChsb2NhbGUsIGZvcm1hdFllYXIsIGdldERlY2FkZVJhbmdlKGRhdGUpKTtcbn1cbi8qKlxuICogUmV0dXJucyBhIGJvb2xlYW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIGdpdmVuIGRhdGUgaXMgb24gU2F0dXJkYXkgb3IgU3VuZGF5LlxuICpcbiAqIEBwYXJhbSB7RGF0ZX0gZGF0ZSBEYXRlLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dlZWtlbmQoZGF0ZSkge1xuICB2YXIgY2FsZW5kYXJUeXBlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiBDQUxFTkRBUl9UWVBFUy5JU09fODYwMTtcbiAgdmFyIHdlZWtkYXkgPSBkYXRlLmdldERheSgpO1xuXG4gIHN3aXRjaCAoY2FsZW5kYXJUeXBlKSB7XG4gICAgY2FzZSBDQUxFTkRBUl9UWVBFUy5BUkFCSUM6XG4gICAgY2FzZSBDQUxFTkRBUl9UWVBFUy5IRUJSRVc6XG4gICAgICByZXR1cm4gd2Vla2RheSA9PT0gRlJJREFZIHx8IHdlZWtkYXkgPT09IFNBVFVSREFZO1xuXG4gICAgY2FzZSBDQUxFTkRBUl9UWVBFUy5JU09fODYwMTpcbiAgICBjYXNlIENBTEVOREFSX1RZUEVTLlVTOlxuICAgICAgcmV0dXJuIHdlZWtkYXkgPT09IFNBVFVSREFZIHx8IHdlZWtkYXkgPT09IFNVTkRBWTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGNhbGVuZGFyIHR5cGUuJyk7XG4gIH1cbn0iLCJmdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfSwgX3R5cGVvZihvYmopOyB9XG5cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBDQUxFTkRBUl9UWVBFUyB9IGZyb20gJy4vY29uc3QnO1xudmFyIGNhbGVuZGFyVHlwZXMgPSBPYmplY3QudmFsdWVzKENBTEVOREFSX1RZUEVTKTtcbnZhciBhbGxWaWV3cyA9IFsnY2VudHVyeScsICdkZWNhZGUnLCAneWVhcicsICdtb250aCddO1xuZXhwb3J0IHZhciBpc0NhbGVuZGFyVHlwZSA9IFByb3BUeXBlcy5vbmVPZihjYWxlbmRhclR5cGVzKTtcbmV4cG9ydCB2YXIgaXNDbGFzc05hbWUgPSBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKV0pO1xuZXhwb3J0IHZhciBpc01pbkRhdGUgPSBmdW5jdGlvbiBpc01pbkRhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIHZhciBtaW5EYXRlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gIGlmICghbWluRGF0ZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKCEobWluRGF0ZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihcIkludmFsaWQgcHJvcCBgXCIuY29uY2F0KHByb3BOYW1lLCBcImAgb2YgdHlwZSBgXCIpLmNvbmNhdChfdHlwZW9mKG1pbkRhdGUpLCBcImAgc3VwcGxpZWQgdG8gYFwiKS5jb25jYXQoY29tcG9uZW50TmFtZSwgXCJgLCBleHBlY3RlZCBpbnN0YW5jZSBvZiBgRGF0ZWAuXCIpKTtcbiAgfVxuXG4gIHZhciBtYXhEYXRlID0gcHJvcHMubWF4RGF0ZTtcblxuICBpZiAobWF4RGF0ZSAmJiBtaW5EYXRlID4gbWF4RGF0ZSkge1xuICAgIHJldHVybiBuZXcgRXJyb3IoXCJJbnZhbGlkIHByb3AgYFwiLmNvbmNhdChwcm9wTmFtZSwgXCJgIG9mIHR5cGUgYFwiKS5jb25jYXQoX3R5cGVvZihtaW5EYXRlKSwgXCJgIHN1cHBsaWVkIHRvIGBcIikuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiYCwgbWluRGF0ZSBjYW5ub3QgYmUgbGFyZ2VyIHRoYW4gbWF4RGF0ZS5cIikpO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59O1xuZXhwb3J0IHZhciBpc01heERhdGUgPSBmdW5jdGlvbiBpc01heERhdGUocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIHZhciBtYXhEYXRlID0gcHJvcHNbcHJvcE5hbWVdO1xuXG4gIGlmICghbWF4RGF0ZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKCEobWF4RGF0ZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihcIkludmFsaWQgcHJvcCBgXCIuY29uY2F0KHByb3BOYW1lLCBcImAgb2YgdHlwZSBgXCIpLmNvbmNhdChfdHlwZW9mKG1heERhdGUpLCBcImAgc3VwcGxpZWQgdG8gYFwiKS5jb25jYXQoY29tcG9uZW50TmFtZSwgXCJgLCBleHBlY3RlZCBpbnN0YW5jZSBvZiBgRGF0ZWAuXCIpKTtcbiAgfVxuXG4gIHZhciBtaW5EYXRlID0gcHJvcHMubWluRGF0ZTtcblxuICBpZiAobWluRGF0ZSAmJiBtYXhEYXRlIDwgbWluRGF0ZSkge1xuICAgIHJldHVybiBuZXcgRXJyb3IoXCJJbnZhbGlkIHByb3AgYFwiLmNvbmNhdChwcm9wTmFtZSwgXCJgIG9mIHR5cGUgYFwiKS5jb25jYXQoX3R5cGVvZihtYXhEYXRlKSwgXCJgIHN1cHBsaWVkIHRvIGBcIikuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiYCwgbWF4RGF0ZSBjYW5ub3QgYmUgc21hbGxlciB0aGFuIG1pbkRhdGUuXCIpKTtcbiAgfVxuXG4gIHJldHVybiBudWxsO1xufTtcbmV4cG9ydCB2YXIgaXNSZWYgPSBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLnNoYXBlKHtcbiAgY3VycmVudDogUHJvcFR5cGVzLmFueVxufSldKTtcbmV4cG9ydCB2YXIgaXNWYWx1ZSA9IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5pbnN0YW5jZU9mKERhdGUpLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuaW5zdGFuY2VPZihEYXRl
2KSldKTtcbmV4cG9ydCB2YXIgaXNWaWV3cyA9IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZihhbGxWaWV3cykpO1xuZXhwb3J0IHZhciBpc1ZpZXcgPSBmdW5jdGlvbiBpc1ZpZXcocHJvcHMsIHByb3BOYW1lLCBjb21wb25lbnROYW1lKSB7XG4gIHZhciB2aWV3ID0gcHJvcHNbcHJvcE5hbWVdO1xuICB2YXIgdmlld3MgPSBwcm9wcy52aWV3cztcbiAgdmFyIGFsbG93ZWRWaWV3cyA9IHZpZXdzIHx8IGFsbFZpZXdzO1xuXG4gIGlmICh2aWV3ICE9PSB1bmRlZmluZWQgJiYgYWxsb3dlZFZpZXdzLmluZGV4T2YodmlldykgPT09IC0xKSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihcIkludmFsaWQgcHJvcCBgXCIuY29uY2F0KHByb3BOYW1lLCBcImAgb2YgdmFsdWUgYFwiKS5jb25jYXQodmlldywgXCJgIHN1cHBsaWVkIHRvIGBcIikuY29uY2F0KGNvbXBvbmVudE5hbWUsIFwiYCwgZXhwZWN0ZWQgb25lIG9mIFtcIikuY29uY2F0KGFsbG93ZWRWaWV3cy5tYXAoZnVuY3Rpb24gKGEpIHtcbiAgICAgIHJldHVybiBcIlxcXCJcIi5jb25jYXQoYSwgXCJcXFwiXCIpO1xuICAgIH0pLmpvaW4oJywgJyksIFwiXS5cIikpO1xuICB9IC8vIEV2ZXJ5dGhpbmcgaXMgZmluZVxuXG5cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5pc1ZpZXcuaXNSZXF1aXJlZCA9IGZ1bmN0aW9uIChwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpIHtcbiAgdmFyIHZpZXcgPSBwcm9wc1twcm9wTmFtZV07XG5cbiAgaWYgKCF2aWV3KSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcihcIlRoZSBwcm9wIGBcIi5jb25jYXQocHJvcE5hbWUsIFwiYCBpcyBtYXJrZWQgYXMgcmVxdWlyZWQgaW4gYFwiKS5jb25jYXQoY29tcG9uZW50TmFtZSwgXCJgLCBidXQgaXRzIHZhbHVlIGlzIGBcIikuY29uY2F0KHZpZXcsIFwiYC5cIikpO1xuICB9XG5cbiAgcmV0dXJuIGlzVmlldyhwcm9wcywgcHJvcE5hbWUsIGNvbXBvbmVudE5hbWUpO1xufTtcblxuZXhwb3J0IHZhciB0aWxlR3JvdXBQcm9wcyA9IHtcbiAgYWN0aXZlU3RhcnREYXRlOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLFxuICBob3ZlcjogUHJvcFR5cGVzLmluc3RhbmNlT2YoRGF0ZSksXG4gIGxvY2FsZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgbWF4RGF0ZTogaXNNYXhEYXRlLFxuICBtaW5EYXRlOiBpc01pbkRhdGUsXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICBvbk1vdXNlT3ZlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIHRpbGVDbGFzc05hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBpc0NsYXNzTmFtZV0pLFxuICB0aWxlQ29udGVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5ub2RlXSksXG4gIHZhbHVlOiBpc1ZhbHVlLFxuICB2YWx1ZVR5cGU6IFByb3BUeXBlcy5zdHJpbmdcbn07XG5leHBvcnQgdmFyIHRpbGVQcm9wcyA9IHtcbiAgYWN0aXZlU3RhcnREYXRlOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLFxuICBjbGFzc2VzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKS5pc1JlcXVpcmVkLFxuICBkYXRlOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLFxuICBsb2NhbGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG1heERhdGU6IGlzTWF4RGF0ZSxcbiAgbWluRGF0ZTogaXNNaW5EYXRlLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Nb3VzZU92ZXI6IFByb3BUeXBlcy5mdW5jLFxuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKSksXG4gIHRpbGVDbGFzc05hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBpc0NsYXNzTmFtZV0pLFxuICB0aWxlQ29udGVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5ub2RlXSksXG4gIHRpbGVEaXNhYmxlZDogUHJvcFR5cGVzLmZ1bmNcbn07IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBnZXRVc2VyTG9jYWxlIH0gZnJvbSAnZ2V0LXVzZXItbG9jYWxlJztcbmltcG9ydCB7IGdldENlbnR1cnlMYWJlbCwgZ2V0RGVjYWRlTGFiZWwsIGdldEJlZ2luTmV4dCwgZ2V0QmVnaW5OZXh0MiwgZ2V0QmVnaW5QcmV2aW91cywgZ2V0QmVnaW5QcmV2aW91czIsIGdldEVuZFByZXZpb3VzLCBnZXRFbmRQcmV2aW91czIgfSBmcm9tICcuLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHsgZm9ybWF0TW9udGhZZWFyIGFzIGRlZmF1bHRGb3JtYXRNb250aFllYXIsIGZvcm1hdFllYXIgYXMgZGVmYXVsdEZvcm1hdFllYXIgfSBmcm9tICcuLi9zaGFyZWQvZGF0ZUZvcm1hdHRlcic7XG5pbXBvcnQgeyBpc1ZpZXcsIGlzVmlld3MgfSBmcm9tICcuLi9zaGFyZWQvcHJvcFR5cGVzJztcbnZhciBjbGFzc05hbWUgPSAncmVhY3QtY2FsZW5kYXJfX25hdmlnYXRpb24nO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gTmF2aWdhdGlvbihfcmVmKSB7XG4gIHZhciBhY3RpdmVTdGFydERhdGUgPSBfcmVmLmFjdGl2ZVN0YXJ0RGF0ZSxcbiAgICAgIGRyaWxsVXAgPSBfcmVmLmRyaWxsVXAsXG4gICAgICBfcmVmJGZvcm1hdE1vbnRoWWVhciA9IF9yZWYuZm9ybWF0TW9udGhZZWFyLFxuICAgICAgZm9ybWF0TW9udGhZZWFyID0gX3JlZiRmb3JtYXRNb250aFllYXIgPT09IHZvaWQgMCA/IGRlZmF1bHRGb3JtYXRNb250aFllYXIgOiBfcmVmJGZvcm1hdE1vbnRoWWVhcixcbiAgICAgIF9yZWYkZm9ybWF0WWVhciA9IF9yZWYuZm9ybWF0WWVhcixcbiAgICAgIGZvcm1hdFllYXIgPSBfcmVmJGZvcm1hdFllYXIgPT09IHZvaWQgMCA/IGRlZmF1bHRGb3JtYXRZZWFyIDogX3JlZiRmb3JtYXRZZWFyLFxuICAgICAgbG9jYWxlID0gX3JlZi5sb2NhbGUsXG4gICAgICBtYXhEYXRlID0gX3JlZi5tYXhEYXRlLFxuICAgICAgbWluRGF0ZSA9IF9yZWYubWluRGF0ZSxcbiAgICAgIF9yZWYkbmF2aWdhdGlvbkFyaWFMYSA9IF9yZWYubmF2aWdhdGlvbkFyaWFMYWJlbCxcbiAgICAgIG5hdmlnYXRpb25BcmlhTGFiZWwgPSBfcmVmJG5hdmlnYXRpb25BcmlhTGEgPT09IHZvaWQgMCA/ICcnIDogX3JlZiRuYXZpZ2F0aW9uQXJpYUxhLFxuICAgICAgbmF2aWdhdGlvbkFyaWFMaXZlID0gX3JlZi5uYXZpZ2F0aW9uQXJpYUxpdmUsXG4gICAgICBuYXZpZ2F0aW9uTGFiZWwgPSBfcmVmLm5hdmlnYXRpb25MYWJlbCxcbiAgICAgIF9yZWYkbmV4dDJBcmlhTGFiZWwgPSBfcmVmLm5leHQyQXJpYUxhYmVsLFxuICAgICAgbmV4dDJBcmlhTGFiZWwgPSBfcmVmJG5leHQyQXJpYUxhYmVsID09PSB2b2lkIDAgPyAnJyA6IF9yZWYkbmV4dDJBcmlhTGFiZWwsXG4gICAgICBfcmVmJG5leHQyTGFiZWwgPSBfcmVmLm5leHQyTGFiZWwsXG4gICAgICBuZXh0MkxhYmVsID0gX3JlZiRuZXh0MkxhYmVsID09PSB2b2lkIDAgPyAnwrsnIDogX3JlZiRuZXh0MkxhYmVsLFxuICAgICAgX3JlZiRuZXh0QXJpYUxhYmVsID0gX3JlZi5uZXh0QXJpYUxhYmVsLFxuICAgICAgbmV4dEFyaWFMYWJlbCA9IF9yZWYkbmV4dEFyaWFMYWJlbCA9PT0gdm9pZCAwID8gJycgOiBfcmVmJG5leHRBcmlhTGFiZWwsXG4gICAgICBfcmVmJG5leHRMYWJlbCA9IF9yZWYubmV4dExhYmVsLFxuICAgICAgbmV4dExhYmVsID0gX3JlZiRuZXh0TGFiZWwgPT09IHZvaWQgMCA/ICfigLonIDogX3JlZiRuZXh0TGFiZWwsXG4gICAgICBfcmVmJHByZXYyQXJpYUxhYmVsID0gX3JlZi5wcmV2MkFyaWFMYWJlbCxcbiAgICAgIHByZXYyQXJpYUxhYmVsID0gX3JlZiRwcmV2MkFyaWFMYWJlbCA9PT0gdm9pZCAwID8gJycgOiBfcmVmJHByZXYyQXJpYUxhYmVsLFxuICAgICAgX3JlZiRwcmV2MkxhYmVsID0gX3JlZi5wcmV2MkxhYmVsLFxuICAgICAgcHJldjJMYWJlbCA9IF9yZWYkcHJldjJMYWJlbCA9PT0gdm9pZCAwID8gJ8KrJyA6IF9yZWYkcHJldjJMYWJlbCxcbiAgICAgIF9yZWYkcHJldkFyaWFMYWJlbCA9IF9yZWYucHJldkFyaWFMYWJlbCxcbiAgICAgIHByZXZBcmlhTGFiZWwgPSBfcmVmJHByZXZBcmlhTGFiZWwgPT09IHZvaWQgMCA/ICcnIDogX3JlZiRwcmV2QXJpYUxhYmVsLFxuICAgICAgX3JlZiRwcmV2TGFiZWwgPSBfcmVmLnByZXZMYWJlbCxcbiAgICAgIHByZXZMYWJlbCA9IF9yZWYkcHJldkxhYmVsID09PSB2b2lkIDAgPyAn4oC5JyA6IF9yZWYkcHJldkxhYmVsLFxuICAgICAgc2V0QWN0aXZlU3RhcnREYXRlID0gX3JlZi5zZXRBY3RpdmVTdGFydERhdGUsXG4gICAgICBzaG93RG91YmxlVmlldyA9IF9yZWYuc2hvd0RvdWJsZVZpZXcsXG4gICAgICB2aWV3ID0gX3JlZi52aWV3LFxuICAgICAgdmlld3MgPSBfcmVmLnZpZXdzO1xuICB2YXIgZ
2HJpbGxVcEF2YWlsYWJsZSA9IHZpZXdzLmluZGV4T2YodmlldykgPiAwO1xuICB2YXIgc2hvdWxkU2hvd1ByZXZOZXh0MkJ1dHRvbnMgPSB2aWV3ICE9PSAnY2VudHVyeSc7XG4gIHZhciBwcmV2aW91c0FjdGl2ZVN0YXJ0RGF0ZSA9IGdldEJlZ2luUHJldmlvdXModmlldywgYWN0aXZlU3RhcnREYXRlKTtcbiAgdmFyIHByZXZpb3VzQWN0aXZlU3RhcnREYXRlMiA9IHNob3VsZFNob3dQcmV2TmV4dDJCdXR0b25zICYmIGdldEJlZ2luUHJldmlvdXMyKHZpZXcsIGFjdGl2ZVN0YXJ0RGF0ZSk7XG4gIHZhciBuZXh0QWN0aXZlU3RhcnREYXRlID0gZ2V0QmVnaW5OZXh0KHZpZXcsIGFjdGl2ZVN0YXJ0RGF0ZSk7XG4gIHZhciBuZXh0QWN0aXZlU3RhcnREYXRlMiA9IHNob3VsZFNob3dQcmV2TmV4dDJCdXR0b25zICYmIGdldEJlZ2luTmV4dDIodmlldywgYWN0aXZlU3RhcnREYXRlKTtcblxuICB2YXIgcHJldkJ1dHRvbkRpc2FibGVkID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChwcmV2aW91c0FjdGl2ZVN0YXJ0RGF0ZS5nZXRGdWxsWWVhcigpIDwgMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdmFyIHByZXZpb3VzQWN0aXZlRW5kRGF0ZSA9IGdldEVuZFByZXZpb3VzKHZpZXcsIGFjdGl2ZVN0YXJ0RGF0ZSk7XG4gICAgcmV0dXJuIG1pbkRhdGUgJiYgbWluRGF0ZSA+PSBwcmV2aW91c0FjdGl2ZUVuZERhdGU7XG4gIH0oKTtcblxuICB2YXIgcHJldjJCdXR0b25EaXNhYmxlZCA9IHNob3VsZFNob3dQcmV2TmV4dDJCdXR0b25zICYmIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAocHJldmlvdXNBY3RpdmVTdGFydERhdGUyLmdldEZ1bGxZZWFyKCkgPCAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNBY3RpdmVFbmREYXRlID0gZ2V0RW5kUHJldmlvdXMyKHZpZXcsIGFjdGl2ZVN0YXJ0RGF0ZSk7XG4gICAgcmV0dXJuIG1pbkRhdGUgJiYgbWluRGF0ZSA+PSBwcmV2aW91c0FjdGl2ZUVuZERhdGU7XG4gIH0oKTtcblxuICB2YXIgbmV4dEJ1dHRvbkRpc2FibGVkID0gbWF4RGF0ZSAmJiBtYXhEYXRlIDwgbmV4dEFjdGl2ZVN0YXJ0RGF0ZTtcbiAgdmFyIG5leHQyQnV0dG9uRGlzYWJsZWQgPSBzaG91bGRTaG93UHJldk5leHQyQnV0dG9ucyAmJiBtYXhEYXRlICYmIG1heERhdGUgPCBuZXh0QWN0aXZlU3RhcnREYXRlMjtcblxuICBmdW5jdGlvbiBvbkNsaWNrUHJldmlvdXMoKSB7XG4gICAgc2V0QWN0aXZlU3RhcnREYXRlKHByZXZpb3VzQWN0aXZlU3RhcnREYXRlLCAncHJldicpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25DbGlja1ByZXZpb3VzMigpIHtcbiAgICBzZXRBY3RpdmVTdGFydERhdGUocHJldmlvdXNBY3RpdmVTdGFydERhdGUyLCAncHJldjInKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ2xpY2tOZXh0KCkge1xuICAgIHNldEFjdGl2ZVN0YXJ0RGF0ZShuZXh0QWN0aXZlU3RhcnREYXRlLCAnbmV4dCcpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25DbGlja05leHQyKCkge1xuICAgIHNldEFjdGl2ZVN0YXJ0RGF0ZShuZXh0QWN0aXZlU3RhcnREYXRlMiwgJ25leHQyJyk7XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJMYWJlbChkYXRlKSB7XG4gICAgdmFyIGxhYmVsID0gZnVuY3Rpb24gKCkge1xuICAgICAgc3dpdGNoICh2aWV3KSB7XG4gICAgICAgIGNhc2UgJ2NlbnR1cnknOlxuICAgICAgICAgIHJldHVybiBnZXRDZW50dXJ5TGFiZWwobG9jYWxlLCBmb3JtYXRZZWFyLCBkYXRlKTtcblxuICAgICAgICBjYXNlICdkZWNhZGUnOlxuICAgICAgICAgIHJldHVybiBnZXREZWNhZGVMYWJlbChsb2NhbGUsIGZvcm1hdFllYXIsIGRhdGUpO1xuXG4gICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgIHJldHVybiBmb3JtYXRZZWFyKGxvY2FsZSwgZGF0ZSk7XG5cbiAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgIHJldHVybiBmb3JtYXRNb250aFllYXIobG9jYWxlLCBkYXRlKTtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdmlldzogXCIuY29uY2F0KHZpZXcsIFwiLlwiKSk7XG4gICAgICB9XG4gICAgfSgpO1xuXG4gICAgcmV0dXJuIG5hdmlnYXRpb25MYWJlbCA/IG5hdmlnYXRpb25MYWJlbCh7XG4gICAgICBkYXRlOiBkYXRlLFxuICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgbG9jYWxlOiBsb2NhbGUgfHwgZ2V0VXNlckxvY2FsZSgpLFxuICAgICAgdmlldzogdmlld1xuICAgIH0pIDogbGFiZWw7XG4gIH1cblxuICBmdW5jdGlvbiByZW5kZXJCdXR0b24oKSB7XG4gICAgdmFyIGxhYmVsQ2xhc3NOYW1lID0gXCJcIi5jb25jYXQoY2xhc3NOYW1lLCBcIl9fbGFiZWxcIik7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIHtcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBuYXZpZ2F0aW9uQXJpYUxhYmVsLFxuICAgICAgXCJhcmlhLWxpdmVcIjogbmF2aWdhdGlvbkFyaWFMaXZlLFxuICAgICAgY2xhc3NOYW1lOiBsYWJlbENsYXNzTmFtZSxcbiAgICAgIGRpc2FibGVkOiAhZHJpbGxVcEF2YWlsYWJsZSxcbiAgICAgIG9uQ2xpY2s6IGRyaWxsVXAsXG4gICAgICBzdHlsZToge1xuICAgICAgICBmbGV4R3JvdzogMVxuICAgICAgfSxcbiAgICAgIHR5cGU6IFwiYnV0dG9uXCJcbiAgICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChsYWJlbENsYXNzTmFtZSwgXCJfX2xhYmVsVGV4dCBcIikuY29uY2F0KGxhYmVsQ2xhc3NOYW1lLCBcIl9fbGFiZWxUZXh0LS1mcm9tXCIpXG4gICAgfSwgcmVuZGVyTGFiZWwoYWN0aXZlU3RhcnREYXRlKSksIHNob3dEb3VibGVWaWV3ICYmIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwge1xuICAgICAgY2xhc3NOYW1lOiBcIlwiLmNvbmNhdChsYWJlbENsYXNzTmFtZSwgXCJfX2RpdmlkZXJcIilcbiAgICB9LCBcIiBcXHUyMDEzIFwiKSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQobGFiZWxDbGFzc05hbWUsIFwiX19sYWJlbFRleHQgXCIpLmNvbmNhdChsYWJlbENsYXNzTmFtZSwgXCJfX2xhYmVsVGV4dC0tdG9cIilcbiAgICB9LCByZW5kZXJMYWJlbChuZXh0QWN0aXZlU3RhcnREYXRlKSkpKTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWVcbiAgfSwgcHJldjJMYWJlbCAhPT0gbnVsbCAmJiBzaG91bGRTaG93UHJldk5leHQyQnV0dG9ucyAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7XG4gICAgXCJhcmlhLWxhYmVsXCI6IHByZXYyQXJpYUxhYmVsLFxuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoY2xhc3NOYW1lLCBcIl9fYXJyb3cgXCIpLmNvbmNhdChjbGFzc05hbWUsIFwiX19wcmV2Mi1idXR0b25cIiksXG4gICAgZGlzYWJsZWQ6IHByZXYyQnV0dG9uRGlzYWJsZWQsXG4gICAgb25DbGljazogb25DbGlja1ByZXZpb3VzMixcbiAgICB0eX
2BlOiBcImJ1dHRvblwiXG4gIH0sIHByZXYyTGFiZWwpLCBwcmV2TGFiZWwgIT09IG51bGwgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgIFwiYXJpYS1sYWJlbFwiOiBwcmV2QXJpYUxhYmVsLFxuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoY2xhc3NOYW1lLCBcIl9fYXJyb3cgXCIpLmNvbmNhdChjbGFzc05hbWUsIFwiX19wcmV2LWJ1dHRvblwiKSxcbiAgICBkaXNhYmxlZDogcHJldkJ1dHRvbkRpc2FibGVkLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2tQcmV2aW91cyxcbiAgICB0eXBlOiBcImJ1dHRvblwiXG4gIH0sIHByZXZMYWJlbCksIHJlbmRlckJ1dHRvbigpLCBuZXh0TGFiZWwgIT09IG51bGwgJiYgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgIFwiYXJpYS1sYWJlbFwiOiBuZXh0QXJpYUxhYmVsLFxuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoY2xhc3NOYW1lLCBcIl9fYXJyb3cgXCIpLmNvbmNhdChjbGFzc05hbWUsIFwiX19uZXh0LWJ1dHRvblwiKSxcbiAgICBkaXNhYmxlZDogbmV4dEJ1dHRvbkRpc2FibGVkLFxuICAgIG9uQ2xpY2s6IG9uQ2xpY2tOZXh0LFxuICAgIHR5cGU6IFwiYnV0dG9uXCJcbiAgfSwgbmV4dExhYmVsKSwgbmV4dDJMYWJlbCAhPT0gbnVsbCAmJiBzaG91bGRTaG93UHJldk5leHQyQnV0dG9ucyAmJiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiLCB7XG4gICAgXCJhcmlhLWxhYmVsXCI6IG5leHQyQXJpYUxhYmVsLFxuICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoY2xhc3NOYW1lLCBcIl9fYXJyb3cgXCIpLmNvbmNhdChjbGFzc05hbWUsIFwiX19uZXh0Mi1idXR0b25cIiksXG4gICAgZGlzYWJsZWQ6IG5leHQyQnV0dG9uRGlzYWJsZWQsXG4gICAgb25DbGljazogb25DbGlja05leHQyLFxuICAgIHR5cGU6IFwiYnV0dG9uXCJcbiAgfSwgbmV4dDJMYWJlbCkpO1xufVxuTmF2aWdhdGlvbi5wcm9wVHlwZXMgPSB7XG4gIGFjdGl2ZVN0YXJ0RGF0ZTogUHJvcFR5cGVzLmluc3RhbmNlT2YoRGF0ZSkuaXNSZXF1aXJlZCxcbiAgZHJpbGxVcDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgZm9ybWF0TW9udGhZZWFyOiBQcm9wVHlwZXMuZnVuYyxcbiAgZm9ybWF0WWVhcjogUHJvcFR5cGVzLmZ1bmMsXG4gIGxvY2FsZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgbWF4RGF0ZTogUHJvcFR5cGVzLmluc3RhbmNlT2YoRGF0ZSksXG4gIG1pbkRhdGU6IFByb3BUeXBlcy5pbnN0YW5jZU9mKERhdGUpLFxuICBuYXZpZ2F0aW9uQXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBuYXZpZ2F0aW9uQXJpYUxpdmU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG5hdmlnYXRpb25MYWJlbDogUHJvcFR5cGVzLmZ1bmMsXG4gIG5leHQyQXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBuZXh0MkxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgbmV4dEFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgbmV4dExhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgcHJldjJBcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHByZXYyTGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuICBwcmV2QXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBwcmV2TGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuICBzZXRBY3RpdmVTdGFydERhdGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIHNob3dEb3VibGVWaWV3OiBQcm9wVHlwZXMuYm9vbCxcbiAgdmlldzogaXNWaWV3LmlzUmVxdWlyZWQsXG4gIHZpZXdzOiBpc1ZpZXdzLmlzUmVxdWlyZWRcbn07IiwidmFyIF9leGNsdWRlZCA9IFtcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlyZWN0aW9uXCIsIFwiY291bnRcIiwgXCJvZmZzZXRcIiwgXCJzdHlsZVwiLCBcIndyYXBcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybi
2B7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuZnVuY3Rpb24gdG9QZXJjZW50KG51bSkge1xuICByZXR1cm4gXCJcIi5jb25jYXQobnVtLCBcIiVcIik7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEZsZXgoX3JlZikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmLmNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBkaXJlY3Rpb24gPSBfcmVmLmRpcmVjdGlvbixcbiAgICAgIGNvdW50ID0gX3JlZi5jb3VudCxcbiAgICAgIG9mZnNldCA9IF9yZWYub2Zmc2V0LFxuICAgICAgc3R5bGUgPSBfcmVmLnN0eWxlLFxuICAgICAgd3JhcCA9IF9yZWYud3JhcCxcbiAgICAgIG90aGVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgX2V4dGVuZHMoe1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIHN0eWxlOiBfb2JqZWN0U3ByZWFkKHtcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGZsZXhEaXJlY3Rpb246IGRpcmVjdGlvbixcbiAgICAgIGZsZXhXcmFwOiB3cmFwID8gJ3dyYXAnIDogJ25vLXdyYXAnXG4gICAgfSwgc3R5bGUpXG4gIH0sIG90aGVyUHJvcHMpLCBSZWFjdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIGZ1bmN0aW9uIChjaGlsZCwgaW5kZXgpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNsb25lRWxlbWVudChjaGlsZCwgX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBjaGlsZC5wcm9wcyksIHt9LCB7XG4gICAgICBzdHlsZToge1xuICAgICAgICBmbGV4QmFzaXM6IHRvUGVyY2VudCgxMDAgLyBjb3VudCksXG4gICAgICAgIGZsZXhTaHJpbms6IDAsXG4gICAgICAgIGZsZXhHcm93OiAwLFxuICAgICAgICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gICAgICAgIG1hcmdpbkxlZnQ6IG9mZnNldCAmJiBpbmRleCA9PT0gMCA/IHRvUGVyY2VudCgxMDAgKiBvZmZzZXQgLyBjb3VudCkgOiBudWxsXG4gICAgICB9XG4gICAgfSkpO1xuICB9KSk7XG59XG5GbGV4LnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGNvdW50OiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gIGRpcmVjdGlvbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgb2Zmc2V0OiBQcm9wVHlwZXMubnVtYmVyLFxuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5zdHJpbmcsIFByb3BUeXBlcy5udW1iZXJdKSksXG4gIHdyYXA6IFByb3BUeXBlcy5ib29sXG59OyIsImZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHsgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHx8IF9pdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkoYXJyKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsgfVxuXG5mdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoXCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9XG5cbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShvLCBtaW5MZW4pIHsgaWYgKCFvKSByZXR1cm47IGlmICh0eXBlb2YgbyA9PT0gXCJzdHJpbmdcIikgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IHZhciBuID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTsgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTsgaWYgKG4gPT09IFwiTWFwXCIgfHwgbiA9PT0gXCJTZXRcIikgcmV0dXJuIEFycmF5LmZyb20obyk7IGlmIChuID09PSBcIkFyZ3VtZW50c1wiIHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KG4pKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgfVxuXG5mdW5jdGlvbiBfaXRlcmFibGVUb0FycmF5KGl0ZXIpIHsgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7IH1cblxuZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikgeyBpZiAoQXJyYXkuaXNBcnJheShhcnIpKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkoYXJyKTsgfVxuXG5mdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikgeyBpZiAobGVuID09IG51bGwgfHwgbGVuID4gYXJyLmxlbmd0aCkgbGVuID0gYXJyLmxlbmd0aDsgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSB7IGFycjJbaV0gPSBhcnJbaV07IH0gcmV0dXJuIGFycjI7IH1cblxuaW1wb3J0IHsgZ2V0UmFuZ2UgfSBmcm9tICcuL2RhdGVzJztcbi8qKlxuICogUmV0dXJucyBhIHZhbHVlIG5vIHNtYWxsZXIgdGhhbiBtaW4gYW5kIG5vIGxhcmdlciB0aGFuIG1heC5cbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIFZhbHVlIHRvIHJldHVybi5cbiAqIEBwYXJhbSB7Kn0gbWluIE1pbmltdW0gcmV0dXJuIHZhbHVlLlxuICogQHBhcmFtIHsqfSBtYXggTWF4aW11bSByZXR1cm4gdmFsdWUuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIGJldHdlZW4odmFsdWUsIG1pbiwgbWF4KSB7XG4gIGlmIChtaW4gJiYgbWluID4gdmFsdWUpIHtcbiAgICByZXR1cm4gbWluO1xuICB9XG5cbiAgaWYgKG1heCAmJiBtYXggPCB2YWx1ZSkge1xuICAgIHJldHVybi
2BtYXg7XG4gIH1cblxuICByZXR1cm4gdmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNWYWx1ZVdpdGhpblJhbmdlKHZhbHVlLCByYW5nZSkge1xuICByZXR1cm4gcmFuZ2VbMF0gPD0gdmFsdWUgJiYgcmFuZ2VbMV0gPj0gdmFsdWU7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNSYW5nZVdpdGhpblJhbmdlKGdyZWF0ZXJSYW5nZSwgc21hbGxlclJhbmdlKSB7XG4gIHJldHVybiBncmVhdGVyUmFuZ2VbMF0gPD0gc21hbGxlclJhbmdlWzBdICYmIGdyZWF0ZXJSYW5nZVsxXSA+PSBzbWFsbGVyUmFuZ2VbMV07XG59XG5leHBvcnQgZnVuY3Rpb24gZG9SYW5nZXNPdmVybGFwKHJhbmdlMSwgcmFuZ2UyKSB7XG4gIHJldHVybiBpc1ZhbHVlV2l0aGluUmFuZ2UocmFuZ2UxWzBdLCByYW5nZTIpIHx8IGlzVmFsdWVXaXRoaW5SYW5nZShyYW5nZTFbMV0sIHJhbmdlMik7XG59XG5cbmZ1bmN0aW9uIGdldFJhbmdlQ2xhc3NOYW1lcyh2YWx1ZVJhbmdlLCBkYXRlUmFuZ2UsIGJhc2VDbGFzc05hbWUpIHtcbiAgdmFyIGlzUmFuZ2UgPSBkb1Jhbmdlc092ZXJsYXAoZGF0ZVJhbmdlLCB2YWx1ZVJhbmdlKTtcbiAgdmFyIGNsYXNzZXMgPSBbXTtcblxuICBpZiAoaXNSYW5nZSkge1xuICAgIGNsYXNzZXMucHVzaChiYXNlQ2xhc3NOYW1lKTtcbiAgICB2YXIgaXNSYW5nZVN0YXJ0ID0gaXNWYWx1ZVdpdGhpblJhbmdlKHZhbHVlUmFuZ2VbMF0sIGRhdGVSYW5nZSk7XG4gICAgdmFyIGlzUmFuZ2VFbmQgPSBpc1ZhbHVlV2l0aGluUmFuZ2UodmFsdWVSYW5nZVsxXSwgZGF0ZVJhbmdlKTtcblxuICAgIGlmIChpc1JhbmdlU3RhcnQpIHtcbiAgICAgIGNsYXNzZXMucHVzaChcIlwiLmNvbmNhdChiYXNlQ2xhc3NOYW1lLCBcIlN0YXJ0XCIpKTtcbiAgICB9XG5cbiAgICBpZiAoaXNSYW5nZUVuZCkge1xuICAgICAgY2xhc3Nlcy5wdXNoKFwiXCIuY29uY2F0KGJhc2VDbGFzc05hbWUsIFwiRW5kXCIpKTtcbiAgICB9XG5cbiAgICBpZiAoaXNSYW5nZVN0YXJ0ICYmIGlzUmFuZ2VFbmQpIHtcbiAgICAgIGNsYXNzZXMucHVzaChcIlwiLmNvbmNhdChiYXNlQ2xhc3NOYW1lLCBcIkJvdGhFbmRzXCIpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gY2xhc3Nlcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbGVDbGFzc2VzKCkge1xuICB2YXIgX3JlZiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDoge30sXG4gICAgICB2YWx1ZSA9IF9yZWYudmFsdWUsXG4gICAgICB2YWx1ZVR5cGUgPSBfcmVmLnZhbHVlVHlwZSxcbiAgICAgIGRhdGUgPSBfcmVmLmRhdGUsXG4gICAgICBkYXRlVHlwZSA9IF9yZWYuZGF0ZVR5cGUsXG4gICAgICBob3ZlciA9IF9yZWYuaG92ZXI7XG5cbiAgdmFyIGNsYXNzTmFtZSA9ICdyZWFjdC1jYWxlbmRhcl9fdGlsZSc7XG4gIHZhciBjbGFzc2VzID0gW2NsYXNzTmFtZV07XG5cbiAgaWYgKCFkYXRlKSB7XG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkoZGF0ZSkgJiYgIWRhdGVUeXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdnZXRUaWxlQ2xhc3NlcygpOiBVbmFibGUgdG8gZ2V0IHRpbGUgYWN0aXZpdHkgY2xhc3NlcyBiZWNhdXNlIG9uZSBvciBtb3JlIHJlcXVpcmVkIGFyZ3VtZW50cyB3ZXJlIG5vdCBwYXNzZWQuJyk7XG4gIH1cblxuICB2YXIgbm93ID0gbmV3IERhdGUoKTtcbiAgdmFyIGRhdGVSYW5nZSA9IEFycmF5LmlzQXJyYXkoZGF0ZSkgPyBkYXRlIDogZ2V0UmFuZ2UoZGF0ZVR5cGUsIGRhdGUpO1xuXG4gIGlmIChpc1ZhbHVlV2l0aGluUmFuZ2Uobm93LCBkYXRlUmFuZ2UpKSB7XG4gICAgY2xhc3Nlcy5wdXNoKFwiXCIuY29uY2F0KGNsYXNzTmFtZSwgXCItLW5vd1wiKSk7XG4gIH1cblxuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuIGNsYXNzZXM7XG4gIH1cblxuICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpICYmICF2YWx1ZVR5cGUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2dldFRpbGVDbGFzc2VzKCk6IFVuYWJsZSB0byBnZXQgdGlsZSBhY3Rpdml0eSBjbGFzc2VzIGJlY2F1c2Ugb25lIG9yIG1vcmUgcmVxdWlyZWQgYXJndW1lbnRzIHdlcmUgbm90IHBhc3NlZC4nKTtcbiAgfVxuXG4gIHZhciB2YWx1ZVJhbmdlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IGdldFJhbmdlKHZhbHVlVHlwZSwgdmFsdWUpO1xuXG4gIGlmIChpc1JhbmdlV2l0aGluUmFuZ2UodmFsdWVSYW5nZSwgZGF0ZVJhbmdlKSkge1xuICAgIGNsYXNzZXMucHVzaChcIlwiLmNvbmNhdChjbGFzc05hbWUsIFwiLS1hY3RpdmVcIikpO1xuICB9IGVsc2UgaWYgKGRvUmFuZ2VzT3ZlcmxhcCh2YWx1ZVJhbmdlLCBkYXRlUmFuZ2UpKSB7XG4gICAgY2xhc3Nlcy5wdXNoKFwiXCIuY29uY2F0KGNsYXNzTmFtZSwgXCItLWhhc0FjdGl2ZVwiKSk7XG4gIH1cblxuICB2YXIgdmFsdWVSYW5nZUNsYXNzTmFtZXMgPSBnZXRSYW5nZUNsYXNzTmFtZXModmFsdWVSYW5nZSwgZGF0ZVJhbmdlLCBcIlwiLmNvbmNhdChjbGFzc05hbWUsIFwiLS1yYW5nZVwiKSk7XG4gIGNsYXNzZXMucHVzaC5hcHBseShjbGFzc2VzLCBfdG9Db25zdW1hYmxlQXJyYXkodmFsdWVSYW5nZUNsYXNzTmFtZXMpKTtcbiAgdmFyIHZhbHVlQXJyYXkgPSBbXS5jb25jYXQodmFsdWUpO1xuXG4gIGlmIChob3ZlciAmJiB2YWx1ZUFycmF5Lmxlbmd0aCA9PT0gMSkge1xuICAgIHZhciBob3ZlclJhbmdlID0gaG92ZXIgPiB2YWx1ZVJhbmdlWzBdID8gW3ZhbHVlUmFuZ2VbMF0sIGhvdmVyXSA6IFtob3ZlciwgdmFsdWVSYW5nZVswXV07XG4gICAgdmFyIGhvdmVyUmFuZ2VDbGFzc05hbWVzID0gZ2V0UmFuZ2VDbGFzc05hbWVzKGhvdmVyUmFuZ2UsIGRhdGVSYW5nZSwgXCJcIi5jb25jYXQoY2xhc3NOYW1lLCBcIi0taG92ZXJcIikpO1xuICAgIGNsYXNzZXMucHVzaC5hcHBseShjbGFzc2VzLCBfdG9Db25zdW1hYmxlQXJyYXkoaG92ZXJSYW5nZUNsYXNzTmFtZXMpKTtcbiAgfVxuXG4gIHJldHVybiBjbGFzc2VzO1xufSIsInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJjb3VudFwiLCBcImRhdGVUcmFuc2Zvcm1cIiwgXCJkYXRlVHlwZVwiLCBcImVuZFwiLCBcImhvdmVyXCIsIFwib2Zmc2V0XCIsIFwic3RhcnRcIiwgXCJzdGVwXCIsIFwidGlsZVwiLCBcInZhbHVlXCIsIFwidmFsdWVUeXBlXCJdO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybi
2BPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgRmxleCBmcm9tICcuL0ZsZXgnO1xuaW1wb3J0IHsgZ2V0VGlsZUNsYXNzZXMgfSBmcm9tICcuL3NoYXJlZC91dGlscyc7XG5pbXBvcnQgeyB0aWxlR3JvdXBQcm9wcyB9IGZyb20gJy4vc2hhcmVkL3Byb3BUeXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBUaWxlR3JvdXAoX3JlZikge1xuICB2YXIgY2xhc3NOYW1lID0gX3JlZi5jbGFzc05hbWUsXG4gICAgICBfcmVmJGNvdW50ID0gX3JlZi5jb3VudCxcbiAgICAgIGNvdW50ID0gX3JlZiRjb3VudCA9PT0gdm9pZCAwID8gMyA6IF9yZWYkY291bnQsXG4gICAgICBkYXRlVHJhbnNmb3JtID0gX3JlZi5kYXRlVHJhbnNmb3JtLFxuICAgICAgZGF0ZVR5cGUgPSBfcmVmLmRhdGVUeXBlLFxuICAgICAgZW5kID0gX3JlZi5lbmQsXG4gICAgICBob3ZlciA9IF9yZWYuaG92ZXIsXG4gICAgICBvZmZzZXQgPSBfcmVmLm9mZnNldCxcbiAgICAgIHN0YXJ0ID0gX3JlZi5zdGFydCxcbiAgICAgIF9yZWYkc3RlcCA9IF9yZWYuc3RlcCxcbiAgICAgIHN0ZXAgPSBfcmVmJHN0ZXAgPT09IHZvaWQgMCA/IDEgOiBfcmVmJHN0ZXAsXG4gICAgICBUaWxlID0gX3JlZi50aWxlLFxuICAgICAgdmFsdWUgPSBfcmVmLnZhbHVlLFxuICAgICAgdmFsdWVUeXBlID0gX3JlZi52YWx1ZVR5cGUsXG4gICAgICB0aWxlUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgdGlsZXMgPSBbXTtcblxuICBmb3IgKHZhciBwb2ludCA9IHN0YXJ0OyBwb2ludCA8PSBlbmQ7IHBvaW50ICs9IHN0ZXApIHtcbiAgICB2YXIgZGF0ZSA9IGRhdGVUcmFuc2Zvcm0ocG9pbnQpO1xuICAgIHRpbGVzLnB1c2goIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRpbGUsIF9leHRlbmRzKHtcbiAgICAgIGtleTogZGF0ZS5nZXRUaW1lKCksXG4gICAgICBjbGFzc2VzOiBnZXRUaWxlQ2xhc3Nlcyh7XG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgdmFsdWVUeXBlOiB2YWx1ZVR5cGUsXG4gICAgICAgIGRhdGU6IGRhdGUsXG4gICAgICAgIGRhdGVUeXBlOiBkYXRlVHlwZSxcbiAgICAgICAgaG92ZXI6IGhvdmVyXG4gICAgICB9KSxcbiAgICAgIGRhdGU6IGRhdGUsXG4gICAgICBwb2ludDogcG9pbnRcbiAgICB9LCB0aWxlUHJvcHMpKSk7XG4gIH1cblxuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRmxleCwge1xuICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgIGNvdW50OiBjb3VudCxcbiAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICB3cmFwOiB0cnVlXG4gIH0sIHRpbGVzKTtcbn1cblRpbGVHcm91cC5wcm9wVHlwZXMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRpbGVHcm91cFByb3BzKSwge30sIHtcbiAgYWN0aXZlU3RhcnREYXRlOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihEYXRl
2KSxcbiAgY291bnQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIGRhdGVUcmFuc2Zvcm06IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gIGRhdGVUeXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvZmZzZXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIHN0ZXA6IFByb3BUeXBlcy5udW1iZXIsXG4gIHRpbGU6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWRcbn0pOyIsImZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9LCBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307IGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci
25jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogZmFsc2UgfSk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3ViQ2xhc3MsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6IGZhbHNlIH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5pbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBtZXJnZUNsYXNzTmFtZXMgZnJvbSAnbWVyZ2UtY2xhc3MtbmFtZXMnO1xuaW1wb3J0IHsgdGlsZVByb3BzIH0gZnJvbSAnLi9zaGFyZWQvcHJvcFR5cGVzJztcblxuZnVuY3Rpb24gZGF0ZXNBcmVEaWZmZXJlbnQoZGF0ZTEsIGRhdGUyKSB7XG4gIHJldHVybiBkYXRlMSAmJiAhZGF0ZTIgfHwgIWRhdGUxICYmIGRhdGUyIHx8IGRhdGUxICYmIGRhdGUyICYmIGRhdGUxLmdldFRpbWUoKSAhPT0gZGF0ZTIuZ2V0VGltZSgpO1xufVxuXG5mdW5jdGlvbiBnZXRWYWx1ZShuZXh0UHJvcHMsIHByb3ApIHtcbiAgdmFyIGFjdGl2ZVN0YXJ0RGF0ZSA9IG5leHRQcm9wcy5hY3RpdmVTdGFydERhdGUsXG4gICAgICBkYXRlID0gbmV4dFByb3BzLmRh
2dGUsXG4gICAgICB2aWV3ID0gbmV4dFByb3BzLnZpZXc7XG4gIHJldHVybiB0eXBlb2YgcHJvcCA9PT0gJ2Z1bmN0aW9uJyA/IHByb3Aoe1xuICAgIGFjdGl2ZVN0YXJ0RGF0ZTogYWN0aXZlU3RhcnREYXRlLFxuICAgIGRhdGU6IGRhdGUsXG4gICAgdmlldzogdmlld1xuICB9KSA6IHByb3A7XG59XG5cbnZhciBUaWxlID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhUaWxlLCBfQ29tcG9uZW50KTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFRpbGUpO1xuXG4gIGZ1bmN0aW9uIFRpbGUoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIFRpbGUpO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KGFyZ3MpKTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJzdGF0ZVwiLCB7fSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoVGlsZSwgW3tcbiAgICBrZXk6IFwicmVuZGVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgYWN0aXZlU3RhcnREYXRlID0gX3RoaXMkcHJvcHMuYWN0aXZlU3RhcnREYXRlLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NlcyA9IF90aGlzJHByb3BzLmNsYXNzZXMsXG4gICAgICAgICAgZGF0ZSA9IF90aGlzJHByb3BzLmRhdGUsXG4gICAgICAgICAgZm9ybWF0QWJiciA9IF90aGlzJHByb3BzLmZvcm1hdEFiYnIsXG4gICAgICAgICAgbG9jYWxlID0gX3RoaXMkcHJvcHMubG9jYWxlLFxuICAgICAgICAgIG1heERhdGUgPSBfdGhpcyRwcm9wcy5tYXhEYXRlLFxuICAgICAgICAgIG1heERhdGVUcmFuc2Zvcm0gPSBfdGhpcyRwcm9wcy5tYXhEYXRlVHJhbnNmb3JtLFxuICAgICAgICAgIG1pbkRhdGUgPSBfdGhpcyRwcm9wcy5taW5EYXRlLFxuICAgICAgICAgIG1pbkRhdGVUcmFuc2Zvcm0gPSBfdGhpcyRwcm9wcy5taW5EYXRlVHJhbnNmb3JtLFxuICAgICAgICAgIG9uQ2xpY2sgPSBfdGhpcyRwcm9wcy5vbkNsaWNrLFxuICAgICAgICAgIG9uTW91c2VPdmVyID0gX3RoaXMkcHJvcHMub25Nb3VzZU92ZXIsXG4gICAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wcy5zdHlsZSxcbiAgICAgICAgICB0aWxlRGlzYWJsZWQgPSBfdGhpcyRwcm9wcy50aWxlRGlzYWJsZWQsXG4gICAgICAgICAgdmlldyA9IF90aGlzJHByb3BzLnZpZXc7XG4gICAgICB2Y
2XIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIHRpbGVDbGFzc05hbWUgPSBfdGhpcyRzdGF0ZS50aWxlQ2xhc3NOYW1lLFxuICAgICAgICAgIHRpbGVDb250ZW50ID0gX3RoaXMkc3RhdGUudGlsZUNvbnRlbnQ7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIiwge1xuICAgICAgICBjbGFzc05hbWU6IG1lcmdlQ2xhc3NOYW1lcyhjbGFzc2VzLCB0aWxlQ2xhc3NOYW1lKSxcbiAgICAgICAgZGlzYWJsZWQ6IG1pbkRhdGUgJiYgbWluRGF0ZVRyYW5zZm9ybShtaW5EYXRlKSA+IGRhdGUgfHwgbWF4RGF0ZSAmJiBtYXhEYXRlVHJhbnNmb3JtKG1heERhdGUpIDwgZGF0ZSB8fCB0aWxlRGlzYWJsZWQgJiYgdGlsZURpc2FibGVkKHtcbiAgICAgICAgICBhY3RpdmVTdGFydERhdGU6IGFjdGl2ZVN0YXJ0RGF0ZSxcbiAgICAgICAgICBkYXRlOiBkYXRlLFxuICAgICAgICAgIHZpZXc6IHZpZXdcbiAgICAgICAgfSksXG4gICAgICAgIG9uQ2xpY2s6IG9uQ2xpY2sgJiYgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgcmV0dXJuIG9uQ2xpY2soZGF0ZSwgZXZlbnQpO1xuICAgICAgICB9LFxuICAgICAgICBvbkZvY3VzOiBvbk1vdXNlT3ZlciAmJiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIG9uTW91c2VPdmVyKGRhdGUpO1xuICAgICAgICB9LFxuICAgICAgICBvbk1vdXNlT3Zlcjogb25Nb3VzZU92ZXIgJiYgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiBvbk1vdXNlT3ZlcihkYXRlKTtcbiAgICAgICAgfSxcbiAgICAgICAgc3R5bGU6IHN0eWxlLFxuICAgICAgICB0eXBlOiBcImJ1dHRvblwiXG4gICAgICB9LCBmb3JtYXRBYmJyID8gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhYmJyXCIsIHtcbiAgICAgICAgXCJhcmlhLWxhYmVsXCI6IGZvcm1hdEFiYnIobG9jYWxlLCBkYXRlKVxuICAgICAgfSwgY2hpbGRyZW4pIDogY2hpbGRyZW4sIHRpbGVDb250ZW50KTtcbiAgICB9XG4gIH1dLCBbe1xuICAgIGtleTogXCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICB2Y
2XIgYWN0aXZlU3RhcnREYXRlID0gbmV4dFByb3BzLmFjdGl2ZVN0YXJ0RGF0ZSxcbiAgICAgICAgICB0aWxlQ2xhc3NOYW1lID0gbmV4dFByb3BzLnRpbGVDbGFzc05hbWUsXG4gICAgICAgICAgdGlsZUNvbnRlbnQgPSBuZXh0UHJvcHMudGlsZUNvbnRlbnQ7XG4gICAgICB2YXIgbmV4dFN0YXRlID0ge307XG5cbiAgICAgIGlmICh0aWxlQ2xhc3NOYW1lICE9PSBwcmV2U3RhdGUudGlsZUNsYXNzTmFtZVByb3BzIHx8IGRhdGVzQXJlRGlmZmVyZW50KGFjdGl2ZVN0YXJ0RGF0ZSwgcHJldlN0YXRlLmFjdGl2ZVN0YXJ0RGF0ZVByb3BzKSkge1xuICAgICAgICBuZXh0U3RhdGUudGlsZUNsYXNzTmFtZSA9IGdldFZhbHVlKG5leHRQcm9wcywgdGlsZUNsYXNzTmFtZSk7XG4gICAgICAgIG5leHRTdGF0ZS50aWxlQ2xhc3NOYW1lUHJvcHMgPSB0aWxlQ2xhc3NOYW1lO1xuICAgICAgfVxuXG4gICAgICBpZiAodGlsZUNvbnRlbnQgIT09IHByZXZTdGF0ZS50aWxlQ29udGVudFByb3BzIHx8IGRhdGVzQXJlRGlmZmVyZW50KGFjdGl2ZVN0YXJ0RGF0ZSwgcHJldlN0YXRlLmFjdGl2ZVN0YXJ0RGF0ZVByb3BzKSkge1xuICAgICAgICBuZXh0U3RhdGUudGlsZUNvbnRlbnQgPSBnZXRWYWx1ZShuZXh0UHJvcHMsIHRpbGVDb250ZW50KTtcbiAgICAgICAgbmV4dFN0YXRlLnRpbGVDb250ZW50UHJvcHMgPSB0aWxlQ29udGVudDtcbiAgICAgIH1cblxuICAgICAgbmV4dFN0YXRlLmFjdGl2ZVN0YXJ0RGF0ZVByb3BzID0gYWN0aXZlU3RhcnREYXRlO1xuICAgICAgcmV0dXJuIG5leHRTdGF0ZTtcbiAgICB9XG4gIH1dKTtcblxuICByZXR1cm4gVGlsZTtcbn0oQ29tcG9uZW50KTtcblxuZXhwb3J0IHsgVGlsZSBhcyBkZWZhdWx0IH07XG5UaWxlLnByb3BUeXBlcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGlsZVByb3BzKSwge30sIHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIGZvcm1hdEFiYnI6IFByb3BUeXBlcy5mdW5jLFxuICBtYXhEYXRlVHJhbnNmb3JtOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBtaW5EYXRlVHJhbnNmb3JtOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG59KTsiLCJ2YXIgX2V4Y2x1ZGVkID0gW1wiY2xhc3Nlc1wiLCBcImZvcm1hdFllYXJcIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBlbnVtZXJhYmxlT25seSAmJiAoc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pKSwga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBudWxsICE9IGFyZ3VtZW50c1tpXSA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpICUgMiA/IG93bktleXMoT2JqZWN0KHNvdXJjZSksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpIDogb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybi
2B7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGdldERlY2FkZVN0YXJ0LCBnZXREZWNhZGVFbmQgfSBmcm9tICdAd29qdGVrbWFqL2RhdGUtdXRpbHMnO1xuaW1wb3J0IFRpbGUgZnJvbSAnLi4vVGlsZSc7XG5pbXBvcnQgeyBnZXREZWNhZGVMYWJlbCB9IGZyb20gJy4uL3NoYXJlZC9kYXRlcyc7XG5pbXBvcnQgeyBmb3JtYXRZZWFyIGFzIGRlZmF1bHRGb3JtYXRZZWFyIH0gZnJvbSAnLi4vc2hhcmVkL2RhdGVGb3JtYXR0ZXInO1xuaW1wb3J0IHsgdGlsZVByb3BzIH0gZnJvbSAnLi4vc2hhcmVkL3Byb3BUeXBlcyc7XG52YXIgY2xhc3NOYW1lID0gJ3JlYWN0LWNhbGVuZGFyX19jZW50dXJ5LXZpZXdfX2RlY2FkZXNfX2RlY2FkZSc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEZWNhZGUoX3JlZikge1xuICB2YXIgY2xhc3NlcyA9IF9yZWYuY2xhc3NlcyxcbiAgICAgIF9yZWYkZm9ybWF0WWVhciA9IF9yZWYuZm9ybWF0WWVhcixcbiAgICAgIGZvcm1hdFllYXIgPSBfcmVmJGZvcm1hdFllYXIgPT09IHZvaWQgMCA/IGRlZmF1bHRGb3JtYXRZZWFyIDogX3JlZiRmb3JtYXRZZWFyLFxuICAgICAgb3RoZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBkYXRlID0gb3RoZXJQcm9wcy5kYXRlLFxuICAgICAgbG9jYWxlID0gb3RoZXJQcm9wcy5sb2NhbGU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaWxlLCBfZXh0ZW5kcyh7fSwgb3RoZXJQcm9wcywge1xuICAgIGNsYXNzZXM6IFtdLmNvbmNhdChjbGFzc2VzLCBjbGFzc05hbWUpLFxuICAgIG1heERhdGVUcmFuc2Zvcm06IGdldERlY2FkZUVuZCxcbiAgICBtaW5EYXRlVHJhbnNmb3JtOiBnZXREZWNhZGVTdGFydCxcbiAgICB2aWV3OiBcImNlbnR1cnlcIlxuICB9KSwgZ2V0RGVjYWRlTGFiZWwobG9jYWxlLCBmb3JtYXRZZWFyLCBkYXRlKSk7XG59XG5EZWNhZGUucHJvcFR5cGVzID0gX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCB0aWxlUHJvcHMpLCB7fSwge1xuICBmb3JtYXRZZWFyOiBQcm9wVHlwZXMuZnVuY1xufSk7IiwiZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307IGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBnZXREZWNhZGVTdGFydCB9IGZyb20gJ0B3b2p0ZWttYWovZGF0ZS11dGlscyc7XG5pbXBvcnQgVGlsZUdyb3VwIGZyb20gJy4uL1RpbGVHcm91cCc7XG5pbXBvcnQgRGVjYWRlIGZyb20gJy4vRGVjYWRlJztcbmltcG9ydCB7IGdldEJlZ2luT2ZDZW50dXJ5WWVhciB9IGZyb20gJy4uL3NoYXJlZC9kYXRlcyc7XG5pbXBvcnQgeyB0aWxlR3JvdXBQcm9wcyB9IGZyb20gJy4uL3NoYXJlZC9wcm9wVHlwZXMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGVjYWRlcyhwcm9wcykge1xuICB2YXIgYWN0aXZlU3RhcnREYXRlID0gcHJvcHMuYWN0aXZlU3RhcnREYXRlO1xuICB2YXIgc3RhcnQgPSBnZXRCZWdpbk9mQ2VudHVyeVllYXIoYWN0aXZlU3RhcnREYXRlKTtcbiAgdmFyIGVuZCA9IHN0YXJ0ICsgOTk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaWxlR3JvdXAsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNsYXNzTmFtZTogXCJyZWFjdC1jYWxlbmRhcl9fY2VudHVyeS12aWV3X19kZWNhZGVzXCIsXG4gICAgZGF0ZVRyYW5zZm9ybTogZ2V0RGVjYWRlU3RhcnQsXG4gICAgZGF0ZVR5cGU6IFwiZGVjYWRlXCIsXG4gICAgZW5kOiBlbmQsXG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIHN0ZXA6IDEwLFxuICAgIHRpbGU6IERlY2FkZVxuICB9KSk7XG59XG5EZWNhZGVzLnByb3BUeXBlcyA9IF9vYmplY3RTcHJlYWQoe30sIHRpbGVHcm91cFByb3BzKTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IERlY2FkZXMgZnJvbSAnLi9DZW50dXJ5Vmlldy9EZWNhZGVzJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIENlbnR1cnlWaWV3KHByb3BzKSB7XG4gIGZ1bmN0aW9uIHJlbmRlckRlY2FkZXMoKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERlY2FkZXMsIHByb3BzKTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcInJlYW
2N0LWNhbGVuZGFyX19jZW50dXJ5LXZpZXdcIlxuICB9LCByZW5kZXJEZWNhZGVzKCkpO1xufSIsInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc2VzXCIsIFwiZm9ybWF0WWVhclwiXTtcblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7IHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKG9iamVjdCk7IGVudW1lcmFibGVPbmx5ICYmIChzeW1ib2xzID0gc3ltYm9scy5maWx0ZXIoZnVuY3Rpb24gKHN5bSkgeyByZXR1cm4gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihvYmplY3QsIHN5bSkuZW51bWVyYWJsZTsgfSkpLCBrZXlzLnB1c2guYXBwbHkoa2V5cywgc3ltYm9scyk7IH0gcmV0dXJuIGtleXM7IH1cblxuZnVuY3Rpb24gX29iamVjdFNwcmVhZCh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IG51bGwgIT0gYXJndW1lbnRzW2ldID8gYXJndW1lbnRzW2ldIDoge307IGkgJSAyID8gb3duS2V5cyhPYmplY3Qoc291cmNlKSwgITApLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSkgOiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHRhcmdldCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoc291cmNlKSkgOiBvd25LZXlzKE9iamVjdChzb3VyY2UpKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSwga2V5KSk7IH0pOyB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgZ2V0WWVhclN0YXJ0LCBnZXRZZWFyRW5kIH0gZnJvbSAnQHdvanRla21hai9kYXRlLXV0aWxzJztcbmltcG9ydCBUaWxlIGZyb20gJy4uL1RpbGUnO1xuaW1wb3J0IHsgZm9ybWF0WWVhciBhcyBkZWZhdWx0Rm9ybWF0WWVhciB9IGZyb20gJy4uL3NoYXJlZC9kYXRlRm9ybWF0dGVyJztcbmltcG9ydCB7IHRpbGVQcm9wcyB9IGZyb20gJy4uL3NoYXJlZC9wcm9wVHlwZXMnO1xudmFyIGNsYXNzTmFtZSA9ICdyZWFjdC1jYWxlbmRhcl9fZGVjYWRlLXZpZXdfX3llYXJzX195ZWFyJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFllYXIoX3JlZikge1xuICB2YXIgY2xhc3NlcyA9IF9yZWYuY2xhc3NlcyxcbiAgICAgIF9yZWYkZm9ybWF0WWVhciA9IF9yZWYuZm9ybWF0WWVhcixcbiAgICAgIGZvcm1hdFllYXIgPSBfcmVmJGZvcm1hdFllYXIgPT09IHZvaWQgMCA/IGRlZmF1bHRGb3JtYXRZZWFyIDogX3JlZiRmb3JtYXRZZWFyLFxuICAgICAgb3RoZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBkYXRlID0gb3RoZXJQcm9wcy5kYXRlLFxuICAgICAgbG9jYWxlID0gb3RoZXJQcm9wcy5sb2NhbGU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaWxlLCBfZXh0ZW5kcyh7fSwgb3RoZXJQcm9wcywge1xuICAgIGNsYXNzZXM6IFtdLmNvbmNhdChjbGFzc2VzLCBjbGFzc05hbWUpLFxuICAgIG1heERhdGVUcmFuc2Zvcm06IGdldFllYXJFbmQsXG4gICAgbWluRGF0ZVRyYW5zZm9ybTogZ2V0WWVhclN0YXJ0LFxuICAgIHZpZXc6IFwiZGVjYWRlXCJcbiAgfSksIGZvcm1hdFllYXIobG9jYWxlLCBkYXRlKSk7XG59XG5ZZWFyLnByb3BUeXBlcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGlsZVByb3BzKSwge30sIHtcbiAgZm9ybWF0WWVhcjogUHJvcFR5cGVzLmZ1bmNcbn0pOyIsImZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBlbnVtZXJhYmxlT25seSAmJiAoc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pKSwga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybi
2BrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBudWxsICE9IGFyZ3VtZW50c1tpXSA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpICUgMiA/IG93bktleXMoT2JqZWN0KHNvdXJjZSksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpIDogb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFRpbGVHcm91cCBmcm9tICcuLi9UaWxlR3JvdXAnO1xuaW1wb3J0IFllYXIgZnJvbSAnLi9ZZWFyJztcbmltcG9ydCB7IGdldEJlZ2luT2ZEZWNhZGVZZWFyIH0gZnJvbSAnLi4vc2hhcmVkL2RhdGVzJztcbmltcG9ydCB7IHRpbGVHcm91cFByb3BzIH0gZnJvbSAnLi4vc2hhcmVkL3Byb3BUeXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBZZWFycyhwcm9wcykge1xuICB2YXIgYWN0aXZlU3RhcnREYXRlID0gcHJvcHMuYWN0aXZlU3RhcnREYXRlO1xuICB2YXIgc3RhcnQgPSBnZXRCZWdpbk9mRGVjYWRlWWVhcihhY3RpdmVTdGFydERhdGUpO1xuICB2YXIgZW5kID0gc3RhcnQgKyA5O1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVGlsZUdyb3VwLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjbGFzc05hbWU6IFwicmVhY3QtY2FsZW5kYXJfX2RlY2FkZS12aWV3X195ZWFyc1wiLFxuICAgIGRhdGVUcmFuc2Zvcm06IGZ1bmN0aW9uIGRhdGVUcmFuc2Zvcm0oeWVhcikge1xuICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5ZWFyLCAwLCAxKTtcbiAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9LFxuICAgIGRhdGVUeXBlOiBcInllYXJcIixcbiAgICBlbmQ6IGVuZCxcbiAgICBzdGFydDogc3RhcnQsXG4gICAgdGlsZTogWWVhclxuICB9KSk7XG59XG5ZZWFycy5wcm9wVHlwZXMgPSBfb2JqZWN0U3ByZWFkKHt9LCB0aWxlR3JvdXBQcm9wcyk7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBZZWFycyBmcm9tICcuL0RlY2FkZVZpZXcvWWVhcnMnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gRGVjYWRlVmlldyhwcm9wcykge1xuICBmdW5jdGlvbiByZW5kZXJZZWFycygpIHtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoWWVhcnMsIHByb3BzKTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBcInJlYWN0LWNhbGVuZGFyX19kZWNhZGUtdmlld1wiXG4gIH0sIHJlbmRlclllYXJzKCkpO1xufSIsInZhciBfZXhjbHVkZWQgPSBbXCJjbGFzc2VzXCIsIFwiZm9ybWF0TW9udGhcIiwgXCJmb3JtYXRNb250aFllYXJcIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBlbnVtZXJhYmxlT25seSAmJiAoc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pKSwga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBudWxsICE9IGFyZ3VtZW50c1tpXSA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpICUgMiA/IG93bktleXMoT2JqZWN0KHNvdXJjZSksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpIDogb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybi
2B7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGdldE1vbnRoU3RhcnQsIGdldE1vbnRoRW5kIH0gZnJvbSAnQHdvanRla21hai9kYXRlLXV0aWxzJztcbmltcG9ydCBUaWxlIGZyb20gJy4uL1RpbGUnO1xuaW1wb3J0IHsgZm9ybWF0TW9udGggYXMgZGVmYXVsdEZvcm1hdE1vbnRoLCBmb3JtYXRNb250aFllYXIgYXMgZGVmYXVsdEZvcm1hdE1vbnRoWWVhciB9IGZyb20gJy4uL3NoYXJlZC9kYXRlRm9ybWF0dGVyJztcbmltcG9ydCB7IHRpbGVQcm9wcyB9IGZyb20gJy4uL3NoYXJlZC9wcm9wVHlwZXMnO1xudmFyIGNsYXNzTmFtZSA9ICdyZWFjdC1jYWxlbmRhcl9feWVhci12aWV3X19tb250aHNfX21vbnRoJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIE1vbnRoKF9yZWYpIHtcbiAgdmFyIGNsYXNzZXMgPSBfcmVmLmNsYXNzZXMsXG4gICAgICBfcmVmJGZvcm1hdE1vbnRoID0gX3JlZi5mb3JtYXRNb250aCxcbiAgICAgIGZvcm1hdE1vbnRoID0gX3JlZiRmb3JtYXRNb250aCA9PT0gdm9pZCAwID8gZGVmYXVsdEZvcm1hdE1vbnRoIDogX3JlZiRmb3JtYXRNb250aCxcbiAgICAgIF9yZWYkZm9ybWF0TW9udGhZZWFyID0gX3JlZi5mb3JtYXRNb250aFllYXIsXG4gICAgICBmb3JtYXRNb250aFllYXIgPSBfcmVmJGZvcm1hdE1vbnRoWWVhciA9PT0gdm9pZCAwID8gZGVmYXVsdEZvcm1hdE1vbnRoWWVhciA6IF9yZWYkZm9ybWF0TW9udGhZZWFyLFxuICAgICAgb3RoZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBkYXRlID0gb3RoZXJQcm9wcy5kYXRlLFxuICAgICAgbG9jYWxlID0gb3RoZXJQcm9wcy5sb2NhbGU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaWxlLCBfZXh0ZW5kcyh7fSwgb3RoZXJQcm9wcywge1xuICAgIGNsYXNzZXM6IFtdLmNvbmNhdChjbGFzc2VzLCBjbGFzc05hbWUpLFxuICAgIGZvcm1hdEFiYnI6IGZvcm1hdE1vbnRoWWVhcixcbiAgICBtYXhEYXRlVHJhbnNmb3JtOiBnZXRNb250aEVuZCxcbiAgICBtaW5EYXRlVHJhbnNmb3JtOiBnZXRNb250aFN0YXJ0LFxuICAgIHZpZXc6IFwieWVhclwiXG4gIH0pLCBmb3JtYXRNb250aChsb2NhbGUsIGRhdGUpKTtcbn1cbk1vbnRoLnByb3BUeXBlcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGlsZVByb3BzKSwge30sIHtcbiAgZm9ybWF0TW9udGg6IFByb3BUeXBlcy5mdW5jLFxuICBmb3JtYXRNb250aFllYXI6IFByb3BUeXBlcy5mdW5jXG59KTsiLCJmdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBnZXRZZWFyIH0gZnJvbSAnQHdvanRla21hai9kYXRlLXV0aWxzJztcbmltcG9ydCBUaWxlR3JvdXAgZnJvbSAnLi4vVGlsZUdyb3VwJztcbmltcG9ydCBNb250aCBmcm9tICcuL01vbnRoJztcbmltcG9ydCB7
2IHRpbGVHcm91cFByb3BzIH0gZnJvbSAnLi4vc2hhcmVkL3Byb3BUeXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb250aHMocHJvcHMpIHtcbiAgdmFyIGFjdGl2ZVN0YXJ0RGF0ZSA9IHByb3BzLmFjdGl2ZVN0YXJ0RGF0ZTtcbiAgdmFyIHN0YXJ0ID0gMDtcbiAgdmFyIGVuZCA9IDExO1xuICB2YXIgeWVhciA9IGdldFllYXIoYWN0aXZlU3RhcnREYXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRpbGVHcm91cCwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY2xhc3NOYW1lOiBcInJlYWN0LWNhbGVuZGFyX195ZWFyLXZpZXdfX21vbnRoc1wiLFxuICAgIGRhdGVUcmFuc2Zvcm06IGZ1bmN0aW9uIGRhdGVUcmFuc2Zvcm0obW9udGhJbmRleCkge1xuICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5ZWFyLCBtb250aEluZGV4LCAxKTtcbiAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9LFxuICAgIGRhdGVUeXBlOiBcIm1vbnRoXCIsXG4gICAgZW5kOiBlbmQsXG4gICAgc3RhcnQ6IHN0YXJ0LFxuICAgIHRpbGU6IE1vbnRoXG4gIH0pKTtcbn1cbk1vbnRocy5wcm9wVHlwZXMgPSBfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIHRpbGVHcm91cFByb3BzKSwge30sIHtcbiAgbG9jYWxlOiBQcm9wVHlwZXMuc3RyaW5nXG59KTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IE1vbnRocyBmcm9tICcuL1llYXJWaWV3L01vbnRocyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBZZWFyVmlldyhwcm9wcykge1xuICBmdW5jdGlvbiByZW5kZXJNb250aHMoKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KE1vbnRocywgcHJvcHMpO1xuICB9XG5cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBjbGFzc05hbWU6IFwicmVhY3QtY2FsZW5kYXJfX3llYXItdmlld1wiXG4gIH0sIHJlbmRlck1vbnRocygpKTtcbn0iLCJ2YXIgX2V4Y2x1ZGVkID0gW1wiZm9ybWF0RGF5XCIsIFwiZm9ybWF0TG9uZ0RhdGVcIiwgXCJjYWxlbmRhclR5cGVcIiwgXCJjbGFzc2VzXCIsIFwiY3VycmVudE1vbnRoSW5kZXhcIl07XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBlbnVtZXJhYmxlT25seSAmJiAoc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pKSwga2V5cy5wdXNoLmFwcGx5KGtleXMsIHN5bWJvbHMpOyB9IHJldHVybiBrZXlzOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RTcHJlYWQodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBudWxsICE9IGFyZ3VtZW50c1tpXSA/IGFyZ3VtZW50c1tpXSA6IHt9OyBpICUgMiA/IG93bktleXMoT2JqZWN0KHNvdXJjZSksICEwKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgX2RlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBzb3VyY2Vba2V5XSk7IH0pIDogT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKHNvdXJjZSkpIDogb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgdmFsdWUpIHsgaWYgKGtleSBpbiBvYmopIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTsgfSBlbHNlIHsgb2JqW2tleV0gPSB2YWx1ZTsgfSByZXR1cm4gb2JqOyB9XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybi
2B0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGdldERheVN0YXJ0LCBnZXREYXlFbmQgfSBmcm9tICdAd29qdGVrbWFqL2RhdGUtdXRpbHMnO1xuaW1wb3J0IFRpbGUgZnJvbSAnLi4vVGlsZSc7XG5pbXBvcnQgeyBpc1dlZWtlbmQgfSBmcm9tICcuLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHsgZm9ybWF0RGF5IGFzIGRlZmF1bHRGb3JtYXREYXksIGZvcm1hdExvbmdEYXRlIGFzIGRlZmF1bHRGb3JtYXRMb25nRGF0ZSB9IGZyb20gJy4uL3NoYXJlZC9kYXRlRm9ybWF0dGVyJztcbmltcG9ydCB7IHRpbGVQcm9wcyB9IGZyb20gJy4uL3NoYXJlZC9wcm9wVHlwZXMnO1xudmFyIGNsYXNzTmFtZSA9ICdyZWFjdC1jYWxlbmRhcl9fbW9udGgtdmlld19fZGF5c19fZGF5JztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIERheShfcmVmKSB7XG4gIHZhciBfcmVmJGZvcm1hdERheSA9IF9yZWYuZm9ybWF0RGF5LFxuICAgICAgZm9ybWF0RGF5ID0gX3JlZiRmb3JtYXREYXkgPT09IHZvaWQgMCA/IGRlZmF1bHRGb3JtYXREYXkgOiBfcmVmJGZvcm1hdERheSxcbiAgICAgIF9yZWYkZm9ybWF0TG9uZ0RhdGUgPSBfcmVmLmZvcm1hdExvbmdEYXRlLFxuICAgICAgZm9ybWF0TG9uZ0RhdGUgPSBfcmVmJGZvcm1hdExvbmdEYXRlID09PSB2b2lkIDAgPyBkZWZhdWx0Rm9ybWF0TG9uZ0RhdGUgOiBfcmVmJGZvcm1hdExvbmdEYXRlLFxuICAgICAgY2FsZW5kYXJUeXBlID0gX3JlZi5jYWxlbmRhclR5cGUsXG4gICAgICBjbGFzc2VzID0gX3JlZi5jbGFzc2VzLFxuICAgICAgY3VycmVudE1vbnRoSW5kZXggPSBfcmVmLmN1cnJlbnRNb250aEluZGV4LFxuICAgICAgb3RoZXJQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhfcmVmLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBkYXRlID0gb3RoZXJQcm9wcy5kYXRlLFxuICAgICAgbG9jYWxlID0gb3RoZXJQcm9wcy5sb2NhbGU7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaWxlLCBfZXh0ZW5kcyh7fSwgb3RoZXJQcm9wcywge1xuICAgIGNsYXNzZXM6IFtdLmNvbmNhdChjbGFzc2VzLCBjbGFzc05hbWUsIGlzV2Vla2VuZChkYXRlLCBjYWxlbmRhclR5cGUpID8gXCJcIi5jb25jYXQoY2xhc3NOYW1lLCBcIi0td2Vla2VuZFwiKSA6IG51bGwsIGRhdGUuZ2V0TW9udGgoKSAhPT0gY3VycmVudE1vbnRoSW5kZXggPyBcIlwiLmNvbmNhdChjbGFzc05hbWUsIFwiLS1uZWlnaGJvcmluZ01vbnRoXCIpIDogbnVsbCksXG4gICAgZm9ybWF0QWJicjogZm9ybWF0TG9uZ0RhdGUsXG4gICAgbWF4RGF0ZVRyYW5zZm9ybTogZ2V0RGF5RW5kLFxuICAgIG1pbkRhdGVUcmFuc2Zvcm06IGdldERheVN0YXJ0LFxuICAgIHZpZXc6IFwibW9udGhcIlxuICB9KSwgZm9ybWF0RGF5KGxvY2FsZSwgZGF0ZSkpO1xufVxuRGF5LnByb3BUeXBlcyA9IF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZCh7fSwgdGlsZVByb3BzKSwge30sIHtcbiAgY3VycmVudE1vbnRoSW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgZm9ybWF0RGF5OiBQcm9wVHlwZXMuZnVuYyxcbiAgZm9ybWF0TG9uZ0RhdGU6IFByb3BUeXBlcy5mdW5jXG59KTsiLCJ2YXIgX2V4Y2x1ZGVkID0gW1wic2hvd0ZpeGVkTnVtYmVyT2ZXZWVrc1wiLCBcInNob3dOZWlnaGJvcmluZ01vbnRoXCJdO1xuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKTsgdmFyIGtleSwgaTsgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsgdmFyIHNvdXJjZVN5bWJvbEtleXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHNvdXJjZSk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VTeW1ib2xLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZVN5bWJvbEtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHNvdXJjZSwga2V5KSkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHsgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307IHZhciB0YXJnZXQgPSB7fTsgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOyB2YXIga2V5LCBpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IHJldHVybi
2B0YXJnZXQ7IH1cblxuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBnZXRZZWFyLCBnZXRNb250aCwgZ2V0RGF5c0luTW9udGggfSBmcm9tICdAd29qdGVrbWFqL2RhdGUtdXRpbHMnO1xuaW1wb3J0IFRpbGVHcm91cCBmcm9tICcuLi9UaWxlR3JvdXAnO1xuaW1wb3J0IERheSBmcm9tICcuL0RheSc7XG5pbXBvcnQgeyBnZXREYXlPZldlZWsgfSBmcm9tICcuLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHsgaXNDYWxlbmRhclR5cGUsIHRpbGVHcm91cFByb3BzIH0gZnJvbSAnLi4vc2hhcmVkL3Byb3BUeXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBEYXlzKHByb3BzKSB7XG4gIHZhciBhY3RpdmVTdGFydERhdGUgPSBwcm9wcy5hY3RpdmVTdGFydERhdGUsXG4gICAgICBjYWxlbmRhclR5cGUgPSBwcm9wcy5jYWxlbmRhclR5cGU7XG5cbiAgdmFyIHNob3dGaXhlZE51bWJlck9mV2Vla3MgPSBwcm9wcy5zaG93Rml4ZWROdW1iZXJPZldlZWtzLFxuICAgICAgc2hvd05laWdoYm9yaW5nTW9udGggPSBwcm9wcy5zaG93TmVpZ2hib3JpbmdNb250aCxcbiAgICAgIG90aGVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgdmFyIHllYXIgPSBnZXRZZWFyKGFjdGl2ZVN0YXJ0RGF0ZSk7XG4gIHZhciBtb250aEluZGV4ID0gZ2V0TW9udGgoYWN0aXZlU3RhcnREYXRlKTtcbiAgdmFyIGhhc0ZpeGVkTnVtYmVyT2ZXZWVrcyA9IHNob3dGaXhlZE51bWJlck9mV2Vla3MgfHwgc2hvd05laWdoYm9yaW5nTW9udGg7XG4gIHZhciBkYXlPZldlZWsgPSBnZXREYXlPZldlZWsoYWN0aXZlU3RhcnREYXRlLCBjYWxlbmRhclR5cGUpO1xuICB2YXIgb2Zmc2V0ID0gaGFzRml4ZWROdW1iZXJPZldlZWtzID8gMCA6IGRheU9mV2VlaztcbiAgLyoqXG4gICAqIERlZmluZXMgb24gd2hpY2ggZGF5IG9mIHRoZSBtb250aCB0aGUgZ3JpZCBzaGFsbCBzdGFydC4gSWYgd2Ugc2ltcGx5IHNob3cgY3VycmVudFxuICAgKiBtb250aCwgd2Ugb2J2aW91c2x5IHN0YXJ0IG9uIGRheSBvbmUsIGJ1dCBpZiBzaG93TmVpZ2hib3JpbmdNb250aCBpcyBzZXQgdG9cbiAgICogdHJ1ZSwgd2UgbmVlZCB0byBmaW5kIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHdlZWsgdGhlIGZpcnN0IGRheSBvZiB0aGUgbW9udGggaXMgaW4uXG4gICAqL1xuXG4gIHZhciBzdGFydCA9IChoYXNGaXhlZE51bWJlck9mV2Vla3MgPyAtZGF5T2ZXZWVrIDogMCkgKyAxO1xuICAvKipcbiAgICogRGVmaW5lcyBvbiB3aGljaCBkYXkgb2YgdGhlIG1vbnRoIHRoZSBncmlkIHNoYWxsIGVuZC4gSWYgd2Ugc2ltcGx5IHNob3cgY3VycmVudFxuICAgKiBtb250aCwgd2UgbmVlZCB0byBzdG9wIG9uIHRoZSBsYXN0IGRheSBvZiB0aGUgbW9udGgsIGJ1dCBpZiBzaG93TmVpZ2hib3JpbmdNb250aFxuICAgKiBpcyBzZXQgdG8gdHJ1ZSwgd2UgbmVlZCB0byBmaW5kIHRoZSBlbmQgb2YgdGhlIHdlZWsgdGhlIGxhc3QgZGF5IG9mIHRoZSBtb250aCBpcyBpbi5cbiAgICovXG5cbiAgdmFyIGVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrcykge1xuICAgICAgLy8gQWx3YXlzIHNob3cgNiB3ZWVrc1xuICAgICAgcmV0dXJuIHN0YXJ0ICsgNiAqIDcgLSAxO1xuICAgIH1cblxuICAgIHZhciBkYXlzSW5Nb250aCA9IGdldERheXNJbk1vbnRoKGFjdGl2ZVN0YXJ0RGF0ZSk7XG5cbiAgICBpZiAoc2hvd05laWdoYm9yaW5nTW9udGgpIHtcbiAgICAgIHZhciBhY3RpdmVFbmREYXRlID0gbmV3IERhdGUoKTtcbiAgICAgIGFjdGl2ZUVuZERhdGUuc2V0RnVsbFllYXIoeWVhciwgbW9udGhJbmRleCwgZGF5c0luTW9udGgpO1xuICAgICAgYWN0aXZlRW5kRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgIHZhciBkYXlzVW50aWxFbmRPZlRoZVdlZWsgPSA3IC0gZ2V0RGF5T2ZXZWVrKGFjdGl2ZUVuZERhdGUsIGNhbGVuZGFyVHlwZSkgLSAxO1xuICAgICAgcmV0dXJuIGRheXNJbk1vbnRoICsgZGF5c1VudGlsRW5kT2ZUaGVXZWVrO1xuICAgIH1cblxuICAgIHJldHVybiBkYXlzSW5Nb250aDtcbiAgfSgpO1xuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUaWxlR3JvdXAsIF9leHRlbmRzKHt9LCBvdGhlclByb3BzLCB7XG4gICAgY2xhc3NOYW1lOiBcInJlYWN0LWNhbGVuZGFyX19tb250aC12aWV3X19kYXlzXCIsXG4gICAgY291bnQ6IDcsXG4gICAgY3VycmVudE1vbnRoSW5kZXg6IG1vbnRoSW5kZXgsXG4gICAgZGF0ZVRyYW5zZm9ybTogZnVuY3Rpb24gZGF0ZVRyYW5zZm9ybShkYXkpIHtcbiAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTtcbiAgICAgIGRhdGUuc2V0RnVsbFllYXIoeWVhciwgbW9udGhJbmRleCwgZGF5KTtcbiAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICByZXR1cm4gZGF0ZTtcbiAgICB9LFxuICAgIGRhdGVUeXBlOiBcImRheVwiLFxuICAgIGVuZDogZW5kLFxuICAgIG9mZnNldDogb2Zmc2V0LFxuICAgIHN0YXJ0OiBzdGFydCxcbiAgICB0aWxlOiBEYXlcbiAgfSkpO1xufVxuRGF5cy5wcm9wVHlwZXMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgY2FsZW5kYXJUeXBlOiBpc0NhbGVuZGFyVHlwZS5pc1JlcXVpcmVkLFxuICBzaG93Rml4ZWROdW1iZXJPZldlZWtzOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2hvd05laWdoYm9yaW5nTW9udGg6IFByb3BUeXBlcy5ib29sXG59LCB0aWxlR3JvdXBQcm9wcyk7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgbWVyZ2VDbGFzc05hbWVzIGZyb20gJ21lcmdlLWNsYXNzLW5hbWVzJztcbmltcG9ydCB7IGdldFllYXIsIGdldE1vbnRoLCBnZXRNb250aFN0YXJ0IH0gZnJvbSAnQHdvanRla21hai9kYXRlLXV0aWxzJztcbmltcG9ydCBGbGV4IGZyb20gJy4uL0ZsZXgnO1xuaW1wb3J0IHsgZ2V0RGF5T2ZXZWVrLCBpc1dlZWtlbmQgfSBmcm9tICcuLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHsgZm9ybWF0U2hvcnRXZWVrZGF5IGFzIGRlZmF1bHRGb3JtYXRTaG9ydFdlZWtkYXksIGZvcm1hdFdlZWtkYXkgYXMgZGVmYXVsdEZvcm1hdFdlZWtkYXkgfSBmcm9tICcuLi9zaGFyZWQvZGF0ZUZvcm1hdHRlcic7XG5pbXBvcnQgeyBpc0NhbGVuZGFyVHlwZSB9IGZyb20gJy4uL3NoYXJlZC9wcm9wVHlwZXMnO1xudmFyIGNsYXNzTmFtZSA9ICdyZWFjdC1jYWxlbmRhcl9fbW9udGgtdmlld19fd2Vla2RheXMnO
21xudmFyIHdlZWtkYXlDbGFzc05hbWUgPSBcIlwiLmNvbmNhdChjbGFzc05hbWUsIFwiX193ZWVrZGF5XCIpO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gV2Vla2RheXMocHJvcHMpIHtcbiAgdmFyIGNhbGVuZGFyVHlwZSA9IHByb3BzLmNhbGVuZGFyVHlwZSxcbiAgICAgIF9wcm9wcyRmb3JtYXRTaG9ydFdlZSA9IHByb3BzLmZvcm1hdFNob3J0V2Vla2RheSxcbiAgICAgIGZvcm1hdFNob3J0V2Vla2RheSA9IF9wcm9wcyRmb3JtYXRTaG9ydFdlZSA9PT0gdm9pZCAwID8gZGVmYXVsdEZvcm1hdFNob3J0V2Vla2RheSA6IF9wcm9wcyRmb3JtYXRTaG9ydFdlZSxcbiAgICAgIF9wcm9wcyRmb3JtYXRXZWVrZGF5ID0gcHJvcHMuZm9ybWF0V2Vla2RheSxcbiAgICAgIGZvcm1hdFdlZWtkYXkgPSBfcHJvcHMkZm9ybWF0V2Vla2RheSA9PT0gdm9pZCAwID8gZGVmYXVsdEZvcm1hdFdlZWtkYXkgOiBfcHJvcHMkZm9ybWF0V2Vla2RheSxcbiAgICAgIGxvY2FsZSA9IHByb3BzLmxvY2FsZSxcbiAgICAgIG9uTW91c2VMZWF2ZSA9IHByb3BzLm9uTW91c2VMZWF2ZTtcbiAgdmFyIGFueURhdGUgPSBuZXcgRGF0ZSgpO1xuICB2YXIgYmVnaW5PZk1vbnRoID0gZ2V0TW9udGhTdGFydChhbnlEYXRlKTtcbiAgdmFyIHllYXIgPSBnZXRZZWFyKGJlZ2luT2ZNb250aCk7XG4gIHZhciBtb250aEluZGV4ID0gZ2V0TW9udGgoYmVnaW5PZk1vbnRoKTtcbiAgdmFyIHdlZWtkYXlzID0gW107XG5cbiAgZm9yICh2YXIgd2Vla2RheSA9IDE7IHdlZWtkYXkgPD0gNzsgd2Vla2RheSArPSAxKSB7XG4gICAgdmFyIHdlZWtkYXlEYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGhJbmRleCwgd2Vla2RheSAtIGdldERheU9mV2VlayhiZWdpbk9mTW9udGgsIGNhbGVuZGFyVHlwZSkpO1xuICAgIHZhciBhYmJyID0gZm9ybWF0V2Vla2RheShsb2NhbGUsIHdlZWtkYXlEYXRlKTtcbiAgICB3ZWVrZGF5cy5wdXNoKCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICBrZXk6IHdlZWtkYXksXG4gICAgICBjbGFzc05hbWU6IG1lcmdlQ2xhc3NOYW1lcyh3ZWVrZGF5Q2xhc3NOYW1lLCBpc1dlZWtlbmQod2Vla2RheURhdGUsIGNhbGVuZGFyVHlwZSkgJiYgXCJcIi5jb25jYXQod2Vla2RheUNsYXNzTmFtZSwgXCItLXdlZWtlbmRcIikpXG4gICAgfSwgLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJhYmJyXCIsIHtcbiAgICAgIFwiYXJpYS1sYWJlbFwiOiBhYmJyLFxuICAgICAgdGl0bGU6IGFiYnJcbiAgICB9LCBmb3JtYXRTaG9ydFdlZWtkYXkobG9jYWxlLCB3ZWVrZGF5RGF0ZSkucmVwbGFjZSgnLicsICcnKSkpKTtcbiAgfVxuXG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChGbGV4LCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgY291bnQ6IDcsXG4gICAgb25Gb2N1czogb25Nb3VzZUxlYXZlLFxuICAgIG9uTW91c2VPdmVyOiBvbk1vdXNlTGVhdmVcbiAgfSwgd2Vla2RheXMpO1xufVxuV2Vla2RheXMucHJvcFR5cGVzID0ge1xuICBjYWxlbmRhclR5cGU6IGlzQ2FsZW5kYXJUeXBlLmlzUmVxdWlyZWQsXG4gIGZvcm1hdFNob3J0V2Vla2RheTogUHJvcFR5cGVzLmZ1bmMsXG4gIGZvcm1hdFdlZWtkYXk6IFByb3BUeXBlcy5mdW5jLFxuICBsb2NhbGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uTW91c2VMZWF2ZTogUHJvcFR5cGVzLmZ1bmNcbn07IiwidmFyIF9leGNsdWRlZCA9IFtcImRhdGVcIiwgXCJvbkNsaWNrV2Vla051bWJlclwiLCBcIndlZWtOdW1iZXJcIl07XG5cbmZ1bmN0aW9uIF9leHRlbmRzKCkgeyBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gPyBPYmplY3QuYXNzaWduLmJpbmQoKSA6IGZ1bmN0aW9uICh0YXJnZXQpIHsgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHsgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTsgZm9yICh2YXIga2V5IGluIHNvdXJjZSkgeyBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkgeyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gfSByZXR1cm4gdGFyZ2V0OyB9OyByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybi
2B7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbnZhciBjbGFzc05hbWUgPSAncmVhY3QtY2FsZW5kYXJfX3RpbGUnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gV2Vla051bWJlcihfcmVmKSB7XG4gIHZhciBkYXRlID0gX3JlZi5kYXRlLFxuICAgICAgb25DbGlja1dlZWtOdW1iZXIgPSBfcmVmLm9uQ2xpY2tXZWVrTnVtYmVyLFxuICAgICAgd2Vla051bWJlciA9IF9yZWYud2Vla051bWJlcixcbiAgICAgIG90aGVyUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoX3JlZiwgX2V4Y2x1ZGVkKTtcblxuICB2YXIgcHJvcHMgPSBfb2JqZWN0U3ByZWFkKHtcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZVxuICB9LCBvdGhlclByb3BzKTtcblxuICB2YXIgY2hpbGRyZW4gPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInNwYW5cIiwgbnVsbCwgd2Vla051bWJlcik7XG4gIHJldHVybiBvbkNsaWNrV2Vla051bWJlciA/IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiYnV0dG9uXCIsIF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIG9uQ2xpY2s6IGZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQpIHtcbiAgICAgIHJldHVybiBvbkNsaWNrV2Vla051bWJlcih3ZWVrTnVtYmVyLCBkYXRlLCBldmVudCk7XG4gICAgfSxcbiAgICB0eXBlOiBcImJ1dHRvblwiXG4gIH0pLCBjaGlsZHJlbikgOiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCBwcm9wcywgY2hpbGRyZW4pO1xufVxuV2Vla051bWJlci5wcm9wVHlwZXMgPSB7XG4gIGRhdGU6IFByb3BUeXBlcy5pbnN0YW5jZU9mKERhdGUpLmlzUmVxdWlyZWQsXG4gIG9uQ2xpY2tXZWVrTnVtYmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgd2Vla051bWJlcjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZFxufTsiLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGdldFllYXIsIGdldE1vbnRoLCBnZXREYXRlLCBnZXREYXlzSW5Nb250aCB9IGZyb20gJ0B3b2p0ZWttYWovZGF0ZS11dGlscyc7XG5pbXBvcnQgV2Vla051bWJlciBmcm9tICcuL1dlZWtOdW1iZXInO1xuaW1wb3J0IEZsZXggZnJvbSAnLi4vRmxleCc7XG5pbXBvcnQgeyBnZXRCZWdpbk9mV2VlaywgZ2V0RGF5T2ZXZWVrLCBnZXRXZWVrTnVtYmVyIH0gZnJvbSAnLi4vc2hhcmVkL2RhdGVzJztcbmltcG9ydCB7IGlzQ2FsZW5kYXJUeXBlIH0gZnJvbSAnLi4vc2hhcmVkL3Byb3BUeXBlcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBXZWVrTnVtYmVycyhwcm9wcykge1xuICB2YXIgYWN0aXZlU3RhcnREYXRlID0gcHJvcHMuYWN0aXZlU3RhcnREYXRlLFxuICAgICAgY2FsZW5kYXJUeXBlID0gcHJvcHMuY2FsZW5kYXJUeXBlLFxuICAgICAgb25DbGlja1dlZWtOdW1iZXIgPSBwcm9wcy5vbkNsaWNrV2Vla051bWJlcixcbiAgICAgIG9uTW91c2VMZWF2ZSA9IHByb3BzLm9uTW91c2VMZWF2ZSxcbiAgICAgIHNob3dGaXhlZE51bWJlck9mV2Vla3MgPSBwcm9wcy5zaG93Rml4ZWROdW1iZXJPZldlZWtzO1xuXG4gIHZhciBudW1iZXJPZldlZWtzID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChzaG93Rml4ZWROdW1iZXJPZldlZWtzKSB7XG4gICAgICByZXR1cm4gNjtcbiAgICB9XG5cbiAgICB2YXIgbnVtYmVyT2ZEYXlzID0gZ2V0RGF5c0luTW9udGgoYWN0aXZlU3RhcnREYXRlKTtcbiAgICB2YXIgc3RhcnRXZWVrZGF5ID0gZ2V0RGF5T2ZXZWVrKGFjdGl2ZVN0YXJ0RGF0ZSwgY2FsZW5kYXJUeXBlKTtcbiAgICB2YXIgZGF5cyA9IG51bWJlck9mRGF5cyAtICg3IC0gc3RhcnRXZWVrZGF5KTtcbiAgICByZXR1cm4gMSArIE1hdGguY2VpbChkYXlzIC8gNyk7XG4gIH0oKTtcblxuICB2YXIgZGF0ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHllYXIgPSBnZXRZZWFyKGFjdGl2ZVN0YXJ0RGF0ZSk7XG4gICAgdmFyIG1vbnRoSW5kZXggPSBnZXRNb250aChhY3RpdmVTdGFydERhdGUpO1xuICAgIHZhciBkYXkgPSBnZXREYXRlKGFjdGl2ZVN0YXJ0RGF0ZSk7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuXG4gICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IG51bWJlck9mV2Vla3M7IGluZGV4ICs9IDEpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGdldEJlZ2luT2ZXZWVrKG5ldyBEYXRlKHllYXIsIG1vbnRoSW5kZXgsIGRheSArIGluZGV4ICogNyksIGNhbGVuZGFyVHlwZSkpO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0oKTtcblxuICB2YXIgd2Vla051bWJlcnMgPSBkYXRlcy5tYXAoZnVuY3Rpb24gKGRhdGUpIHtcbiAgICByZXR1cm4gZ2V0V2Vla051bWJlcihkYXRlLCBjYWxlbmRhclR5cGUpO1xuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KEZsZXgsIHtcbiAgICBjbGFzc05hbWU6IFwicmVhY3QtY2FsZW5kYXJfX21vbnRoLXZpZXdfX3dlZWtOdW1iZXJzXCIsXG4gICAgY291bnQ6IG51bWJlck9mV2Vla3MsXG4gICAgZGlyZWN0aW9uOiBcImNvbHVtblwiLFxuICAgIG9uRm9jdXM6IG9uTW91c2VMZWF2ZSxcbiAgICBvbk1vdXNlT3Zlcjogb25Nb3VzZUxlYXZlLFxuICAgIHN0eWxlOiB7XG4gICAgICBmbGV4QmFzaXM6ICdjYWxjKDEwMCUgKiAoMSAvIDgpJyxcbiAgICAgIGZsZXhTaHJpbms6IDBcbiAgICB9XG4gI
2H0sIHdlZWtOdW1iZXJzLm1hcChmdW5jdGlvbiAod2Vla051bWJlciwgd2Vla0luZGV4KSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFdlZWtOdW1iZXIsIHtcbiAgICAgIGtleTogd2Vla051bWJlcixcbiAgICAgIGRhdGU6IGRhdGVzW3dlZWtJbmRleF0sXG4gICAgICBvbkNsaWNrV2Vla051bWJlcjogb25DbGlja1dlZWtOdW1iZXIsXG4gICAgICB3ZWVrTnVtYmVyOiB3ZWVrTnVtYmVyXG4gICAgfSk7XG4gIH0pKTtcbn1cbldlZWtOdW1iZXJzLnByb3BUeXBlcyA9IHtcbiAgYWN0aXZlU3RhcnREYXRlOiBQcm9wVHlwZXMuaW5zdGFuY2VPZihEYXRlKS5pc1JlcXVpcmVkLFxuICBjYWxlbmRhclR5cGU6IGlzQ2FsZW5kYXJUeXBlLmlzUmVxdWlyZWQsXG4gIG9uQ2xpY2tXZWVrTnVtYmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Nb3VzZUxlYXZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczogUHJvcFR5cGVzLmJvb2xcbn07IiwidmFyIF9leGNsdWRlZCA9IFtcImNhbGVuZGFyVHlwZVwiLCBcImZvcm1hdFNob3J0V2Vla2RheVwiLCBcImZvcm1hdFdlZWtkYXlcIiwgXCJvbkNsaWNrV2Vla051bWJlclwiLCBcInNob3dXZWVrTnVtYmVyc1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllcyhzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCk7IHZhciBrZXksIGk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzb3VyY2VTeW1ib2xLZXlzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzb3VyY2UpOyBmb3IgKGkgPSAwOyBpIDwgc291cmNlU3ltYm9sS2V5cy5sZW5ndGg7IGkrKykgeyBrZXkgPSBzb3VyY2VTeW1ib2xLZXlzW2ldOyBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlOyBpZiAoIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzb3VyY2UsIGtleSkpIGNvbnRpbnVlOyB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldOyB9IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7IGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9OyB2YXIgdGFyZ2V0ID0ge307IHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTsgdmFyIGtleSwgaTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSByZXR1cm4gdGFyZ2V0OyB9XG5cbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IG1lcmdlQ2xhc3NOYW1lcyBmcm9tICdtZXJnZS1jbGFzcy1uYW1lcyc7XG5pbXBvcnQgRGF5cyBmcm9tICcuL01vbnRoVmlldy9EYXlzJztcbmltcG9ydCBXZWVrZGF5cyBmcm9tICcuL01vbnRoVmlldy9XZWVrZGF5cyc7XG5pbXBvcnQgV2Vla051bWJlcnMgZnJvbSAnLi9Nb250aFZpZXcvV2Vla051bWJlcnMnO1xuaW1wb3J0IHsgQ0FMRU5EQVJfVFlQRVMsIENBTEVOREFSX1RZUEVfTE9DQUxFUyB9IGZyb20gJy4vc2hhcmVkL2NvbnN0JztcbmltcG9ydCB7IGlzQ2FsZW5kYXJUeXBlIH0gZnJvbSAnLi9zaGFyZWQvcHJvcFR5cGVzJztcblxuZnVuY3Rpb24gZ2V0Q2FsZW5kYXJUeXBlRnJvbUxvY2FsZShsb2NhbGUpIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKENBTEVOREFSX1RZUEVfTE9DQUxFUykuZmluZChmdW5jdGlvbiAoY2FsZW5kYXJUeXBlKSB7XG4gICAgcmV0dXJuIENBTEVOREFSX1RZUEVfTE9DQUxFU1tjYWxlbmRhclR5cGVdLmluY2x1ZGVzKGxvY2FsZSk7XG4gIH0pIHx8IENBTEVOREFSX1RZUEVTLklTT184NjAxO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNb250aFZpZXcocHJvcHMpIHtcbiAgdmFyIGFjdGl2ZVN0YXJ0RGF0ZSA9IHByb3BzLmFjdGl2ZVN0YXJ0RGF0ZSxcbiAgICAgIGxvY2FsZSA9IHByb3BzLmxvY2FsZSxcbiAgICAgIG9uTW91c2VMZWF2ZSA9IHByb3BzLm9uTW91c2VMZWF2ZSxcbiAgICAgIHNob3dGaXhlZE51bWJlck9mV2Vla3MgPSBwcm9wcy5zaG93Rml4ZWROdW1iZXJPZldlZWtzO1xuXG4gIHZhciBfcHJvcHMkY2FsZW5kYXJUeXBlID0gcHJvcHMuY2FsZW5kYXJUeXBlLFxuICAgICAgY2FsZW5kYXJUeXBlID0gX3Byb3BzJGNhbGVuZGFyVHlwZSA9PT0gdm9pZCAwID8gZ2V0Q2FsZW5kYXJUeXBlRnJvbUxvY2FsZShsb2NhbGUpIDogX3Byb3BzJGNhbGVuZGFyVHlwZSxcbiAgICAgIGZvcm1hdFNob3J0V2Vla2RheSA9IHByb3BzLmZvcm1hdFNob3J0V2Vla2RheSxcbiAgICAgIGZvcm1hdFdlZWtkYXkgPSBwcm9wcy5mb3JtYXRXZWVrZGF5LFxuICAgICAgb25DbGlja1dlZWtOdW1iZXIgPSBwcm9wcy5vbkNsaWNrV2Vla051bWJlcixcbiAgICAgIHNob3dXZWVrTnVtYmVycyA9IHByb3BzLnNob3dXZWVrTnVtYmVycyxcbiAgICAgIGNoaWxkUHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMocHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgZnVuY3Rpb24gcmVuZGVyV2Vla2RheXMoKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFdlZWtkYXlzLCB7XG4gICAgICBjYWxlbmRhclR5cGU6IGNhbGVuZGFyVHlwZSxcbiAgICAgIGZvcm1hdFNob3J0V2Vla2RheTogZm9ybWF0U2hvcnRXZWVrZGF5LFxuICAgICAgZm9ybWF0V2Vla2RheTogZm9ybWF0V2Vla2RheSxcbiAgICAgIGxvY2FsZTogbG9jYWxlLFxuICAgICAgb25Nb3VzZUxlYXZlOiBvbk1vdXNlTGVhdmVcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlcldlZWtOdW1iZXJzKCkge1xuICAgIGlmICghc2hvd1dlZWtOdW1iZXJzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoV2Vla051bWJlcnMsIHtcbiAgICAgIGFjdGl2ZVN0YXJ0RGF0ZTogYWN0aXZlU3RhcnREYXRlLFxuICAgICAgY2FsZW5kYXJUeXBlOiBjYWxlbmRhclR5cGUsXG4gICAgICBvbkNsaWNrV2Vla051bWJlcjogb25DbGlja1dlZWtOdW1iZXIsXG4gICAgICBvbk1vdXNlTGVhdmU6IG9uTW91c2VMZWF2ZSxcbiAgICAgIHNob3dGaXhlZE51bWJlck9mV2Vla3M6IHNob3dGaXhlZE51bWJlck9mV2Vla3NcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbmRlckRheXMoKSB7XG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KERheXMsIF9leHRlbmRzKHtcbiAgICAgIGNhbGVuZGFyVHlwZTogY2FsZW5kYXJUeXBlXG4gICAgfSwgY2hpbGRQcm9wcykpO1xuICB9XG5cbiAgdmFyIGNsYXNzTmFtZSA9ICdyZWFjdC1jYWxlbmRhcl9fbW9udGgtdmlldyc7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgY2xhc3NOYW1lOiBtZXJnZUNsYXNzTmFtZXMoY2xhc3NOYW1lLCBzaG93V2Vla051bWJlcnMgPyBcIlwiLmNvbmNhdChjbGFzc05hbWUsIFwiLS13ZWVrTnVtYmVyc1wiKSA6ICcnKVxuICB9LCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgc3R5bGU6IHtcbiAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgIGFsaWduSXRlbXM6ICdmbGV4LWVuZCdcbiAgICB9XG4gI
2H0sIHJlbmRlcldlZWtOdW1iZXJzKCksIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwiZGl2XCIsIHtcbiAgICBzdHlsZToge1xuICAgICAgZmxleEdyb3c6IDEsXG4gICAgICB3aWR0aDogJzEwMCUnXG4gICAgfVxuICB9LCByZW5kZXJXZWVrZGF5cygpLCByZW5kZXJEYXlzKCkpKSk7XG59XG5Nb250aFZpZXcucHJvcFR5cGVzID0ge1xuICBhY3RpdmVTdGFydERhdGU6IFByb3BUeXBlcy5pbnN0YW5jZU9mKERhdGUpLmlzUmVxdWlyZWQsXG4gIGNhbGVuZGFyVHlwZTogaXNDYWxlbmRhclR5cGUsXG4gIGZvcm1hdFNob3J0V2Vla2RheTogUHJvcFR5cGVzLmZ1bmMsXG4gIGZvcm1hdFdlZWtkYXk6IFByb3BUeXBlcy5mdW5jLFxuICBsb2NhbGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG9uQ2xpY2tXZWVrTnVtYmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Nb3VzZUxlYXZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczogUHJvcFR5cGVzLmJvb2wsXG4gIHNob3dXZWVrTnVtYmVyczogUHJvcFR5cGVzLmJvb2xcbn07IiwidmFyIF9leGNsdWRlZCA9IFtcImFjdGl2ZVN0YXJ0RGF0ZVwiLCBcImRlZmF1bHRBY3RpdmVTdGFydERhdGVcIiwgXCJkZWZhdWx0VmFsdWVcIiwgXCJkZWZhdWx0Vmlld1wiLCBcIm1heERldGFpbFwiLCBcIm1pbkRldGFpbFwiLCBcInZhbHVlXCIsIFwidmlld1wiXTtcblxuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9LCBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykgeyBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7IHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07IGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTsgZGVzY3JpcHRvci
25jb25maWd1cmFibGUgPSB0cnVlOyBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlOyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7IH0gfVxuXG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7IGlmIChwcm90b1Byb3BzKSBfZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpOyBpZiAoc3RhdGljUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLCBzdGF0aWNQcm9wcyk7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShDb25zdHJ1Y3RvciwgXCJwcm90b3R5cGVcIiwgeyB3cml0YWJsZTogZmFsc2UgfSk7IHJldHVybiBDb25zdHJ1Y3RvcjsgfVxuXG5mdW5jdGlvbiBfaW5oZXJpdHMoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIHsgaWYgKHR5cGVvZiBzdXBlckNsYXNzICE9PSBcImZ1bmN0aW9uXCIgJiYgc3VwZXJDbGFzcyAhPT0gbnVsbCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7IH0gc3ViQ2xhc3MucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckNsYXNzICYmIHN1cGVyQ2xhc3MucHJvdG90eXBlLCB7IGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBzdWJDbGFzcywgd3JpdGFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9IH0pOyBPYmplY3QuZGVmaW5lUHJvcGVydHkoc3ViQ2xhc3MsIFwicHJvdG90eXBlXCIsIHsgd3JpdGFibGU6IGZhbHNlIH0pOyBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTsgfVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkgeyBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHsgby5fX3Byb3RvX18gPSBwOyByZXR1cm4gbzsgfTsgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTsgfVxuXG5mdW5jdGlvbiBfY3JlYXRlU3VwZXIoRGVyaXZlZCkgeyB2YXIgaGFzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCA9IF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKTsgcmV0dXJuIGZ1bmN0aW9uIF9jcmVhdGVTdXBlckludGVybmFsKCkgeyB2YXIgU3VwZXIgPSBfZ2V0UHJvdG90eXBlT2YoRGVyaXZlZCksIHJlc3VsdDsgaWYgKGhhc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QpIHsgdmFyIE5ld1RhcmdldCA9IF9nZXRQcm90b3R5cGVPZih0aGlzKS5jb25zdHJ1Y3RvcjsgcmVzdWx0ID0gUmVmbGVjdC5jb25zdHJ1Y3QoU3VwZXIsIGFyZ3VtZW50cywgTmV3VGFyZ2V0KTsgfSBlbHNlIHsgcmVzdWx0ID0gU3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfSByZXR1cm4gX3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgcmVzdWx0KTsgfTsgfVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7IGlmIChjYWxsICYmIChfdHlwZW9mKGNhbGwpID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpKSB7IHJldHVybiBjYWxsOyB9IGVsc2UgaWYgKGNhbGwgIT09IHZvaWQgMCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRGVyaXZlZCBjb25zdHJ1Y3RvcnMgbWF5IG9ubHkgcmV0dXJuIG9iamVjdCBvciB1bmRlZmluZWRcIik7IH0gcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7IH1cblxuZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7IGlmIChzZWxmID09PSB2b2lkIDApIHsgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpOyB9IHJldHVybiBzZWxmOyB9XG5cbmZ1bmN0aW9uIF9pc05hdGl2ZVJlZmxlY3RDb25zdHJ1Y3QoKSB7IGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJ1bmRlZmluZWRcIiB8fCAhUmVmbGVjdC5jb25zdHJ1Y3QpIHJldHVybiBmYWxzZTsgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTsgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gdHJ1ZTsgdHJ5IHsgQm9vbGVhbi5wcm90b3R5cGUudmFsdWVPZi5jYWxsKFJlZmxlY3QuY29uc3RydWN0KEJvb2xlYW4sIFtdLCBmdW5jdGlvbiAoKSB7fSkpOyByZXR1cm4gdHJ1ZTsgfSBjYXRjaCAoZSkgeyByZXR1cm4gZmFsc2U7IH0gfVxuXG5mdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YobykgeyBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHsgcmV0dXJuIG8uX19wcm90b19fIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihvKTsgfTsgcmV0dXJuIF9nZXRQcm90b3R5cGVPZihvKTsgfVxuXG5mdW5jdGlvbiBvd25LZXlzKG9iamVjdCwgZW51bWVyYWJsZU9ubHkpIHsgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMob2JqZWN0KTsgZW51bWVyYWJsZU9ubHkgJiYgKHN5bWJvbHMgPSBzeW1ib2xzLmZpbHRlcihmdW5jdGlvbiAoc3ltKSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlOyB9KSksIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gbnVsbCAhPSBhcmd1bWVudHNbaV0gPyBhcmd1bWVudHNbaV0gOiB7fTsgaSAlIDIgPyBvd25LZXlzKE9iamVjdChzb3VyY2UpLCAhMCkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pOyB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKSA6
2IG93bktleXMoT2JqZWN0KHNvdXJjZSkpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Ioc291cmNlLCBrZXkpKTsgfSk7IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7IGlmIChrZXkgaW4gb2JqKSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwgeyB2YWx1ZTogdmFsdWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSk7IH0gZWxzZSB7IG9ialtrZXldID0gdmFsdWU7IH0gcmV0dXJuIG9iajsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpOyB2YXIga2V5LCBpOyBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykgeyB2YXIgc291cmNlU3ltYm9sS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc291cmNlKTsgZm9yIChpID0gMDsgaSA8IHNvdXJjZVN5bWJvbEtleXMubGVuZ3RoOyBpKyspIHsga2V5ID0gc291cmNlU3ltYm9sS2V5c1tpXTsgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTsgaWYgKCFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoc291cmNlLCBrZXkpKSBjb250aW51ZTsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkgeyBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTsgdmFyIHRhcmdldCA9IHt9OyB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7IHZhciBrZXksIGk7IGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7IGtleSA9IHNvdXJjZUtleXNbaV07IGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gcmV0dXJuIHRhcmdldDsgfVxuXG5mdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkoYXJyKSB7IHJldHVybiBfYXJyYXlXaXRob3V0SG9sZXMoYXJyKSB8fCBfaXRlcmFibGVUb0FycmF5KGFycikgfHwgX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KGFycikgfHwgX25vbkl0ZXJhYmxlU3ByZWFkKCk7IH1cblxuZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTsgfVxuXG5mdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7IGlmICghbykgcmV0dXJuOyBpZiAodHlwZW9mIG8gPT09IFwic3RyaW5nXCIpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7IGlmIChuID09PSBcIk9iamVjdFwiICYmIG8uY29uc3RydWN0b3IpIG4gPSBvLmNvbnN0cnVjdG9yLm5hbWU7IGlmIChuID09PSBcIk1hcFwiIHx8IG4gPT09IFwiU2V0XCIpIHJldHVybiBBcnJheS5mcm9tKG8pOyBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7IH1cblxuZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7IGlmICh0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIGl0ZXJbU3ltYm9sLml0ZXJhdG9yXSAhPSBudWxsIHx8IGl0ZXJbXCJAQGl0ZXJhdG9yXCJdICE9IG51bGwpIHJldHVybiBBcnJheS5mcm9tKGl0ZXIpOyB9XG5cbmZ1bmN0aW9uIF9hcnJheVdpdGhvdXRIb2xlcyhhcnIpIHsgaWYgKEFycmF5LmlzQXJyYXkoYXJyKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KGFycik7IH1cblxuZnVuY3Rpb24gX2FycmF5TGlrZVRvQXJyYXkoYXJyLCBsZW4pIHsgaWYgKGxlbiA9PSBudWxsIHx8IGxlbiA+IGFyci5sZW5ndGgpIGxlbiA9IGFyci5sZW5ndGg7IGZvciAodmFyIGkgPSAwLCBhcnIyID0gbmV3IEFycmF5KGxlbik7IGkgPCBsZW47IGkrKykgeyBhcnIyW2ldID0gYXJyW2ldOyB9IHJldHVybiBhcnIyOyB9XG5cbmltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IG1lcmdlQ2xhc3NOYW1lcyBmcm9tICdtZXJnZS1jbGFzcy1uYW1lcyc7XG5pbXBvcnQgTmF2aWdhdGlvbiBmcm9tICcuL0NhbGVuZGFyL05hdmlnYXRpb24nO1xuaW1wb3J0IENlbnR1cnlWaWV3IGZyb20gJy4vQ2VudHVyeVZpZXcnO1xuaW1wb3J0IERlY2FkZVZpZXcgZnJvbSAnLi9EZWNhZGVWaWV3JztcbmltcG9ydCBZZWFyVmlldyBmcm9tICcuL1llYXJWaWV3JztcbmltcG9ydCBNb250aFZpZXcgZnJvbSAnLi9Nb250aFZpZXcnO1xuaW1wb3J0IHsgZ2V0QmVnaW4sIGdldEJlZ2luTmV4dCwgZ2V0RW5kLCBnZXRWYWx1ZVJhbmdlIH0gZnJvbSAnLi9zaGFyZWQvZGF0ZXMnO1xuaW1wb3J0IHsgaXNDYWxlbmRhclR5cGUsIGlzQ2xhc3NOYW1lLCBpc01heERhdGUsIGlzTWluRGF0ZSwgaXNSZWYsIGlzVmFsdWUsIGlzVmlldyB9IGZyb20gJy4vc2hhcmVkL3Byb3BUeXBlcyc7XG5pbXBvcnQgeyBiZXR3ZWVuIH0gZnJvbSAnLi9zaGFyZWQvdXRpbHMnO1xudmFyIGRlZmF1bHRNaW5EYXRlID0gbmV3IERhdGUoKTtcbmRlZmF1bHRNaW5EYXRlLnNldEZ1bGxZZWFyKDEsIDAsIDEpO1xuZGVmYXVsdE1pbkRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG52YXIgZGVmYXVsdE1heERhdGUgPSBuZXcgRGF0ZSg4LjY0ZTE1KTtcbnZhciBiYXNlQ2xhc3NOYW1lID0gJ3JlYWN0LWNhbGVuZGFyJztcbnZhciBhbGxWaWV3cyA9IFsnY2VudHVyeScsICdkZWNhZGUnLCAneWVhcicsICdtb250aCddO1xudmFyIGFsbFZhbHVlVHlwZXMgPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGFsbFZpZXdzLnNsaWNlKDEpKSwgWydkYXknXSk7XG5cbmZ1bmN0aW9uIHRvRGF0ZSh2YWx1ZSkge1xuICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcbn1cbi8qKlxuICogUmV0dXJucyB2aWV3cyBhcnJheSB3aXRoIGRpc2FsbG93ZWQgdmFsdWVzIGN1dCBvZmYuXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRMaW1pdGVkVmlld3MobWluRGV0YWlsLCBtYXhEZXRhaWwpIHtcbiAgcmV0dXJuIGFsbFZpZXdzLnNsaWNlKGFsbFZpZXdzLmluZGV4T2YobWluRGV0YWlsKSwgYWxsVmlld3MuaW5kZXhPZihtYXhEZXRhaWwpICsgMSk7XG59XG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIGdpdmVuIHZpZXcgaXMgYWxsb3dlZCB3aXRoIGN1cnJlbnRseSBhcHBsaWVkIHNldH
2RpbmdzLlxuICovXG5cblxuZnVuY3Rpb24gaXNWaWV3QWxsb3dlZCh2aWV3LCBtaW5EZXRhaWwsIG1heERldGFpbCkge1xuICB2YXIgdmlld3MgPSBnZXRMaW1pdGVkVmlld3MobWluRGV0YWlsLCBtYXhEZXRhaWwpO1xuICByZXR1cm4gdmlld3MuaW5kZXhPZih2aWV3KSAhPT0gLTE7XG59XG4vKipcbiAqIEdldHMgZWl0aGVyIHByb3ZpZGVkIHZpZXcgaWYgYWxsb3dlZCBieSBtaW5EZXRhaWwgYW5kIG1heERldGFpbCwgb3IgZ2V0c1xuICogdGhlIGRlZmF1bHQgdmlldyBpZiBub3QgYWxsb3dlZC5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFZpZXcodmlldywgbWluRGV0YWlsLCBtYXhEZXRhaWwpIHtcbiAgaWYgKGlzVmlld0FsbG93ZWQodmlldywgbWluRGV0YWlsLCBtYXhEZXRhaWwpKSB7XG4gICAgcmV0dXJuIHZpZXc7XG4gIH1cblxuICByZXR1cm4gbWF4RGV0YWlsO1xufVxuLyoqXG4gKiBSZXR1cm5zIHZhbHVlIHR5cGUgdGhhdCBjYW4gYmUgcmV0dXJuZWQgd2l0aCBjdXJyZW50bHkgYXBwbGllZCBzZXR0aW5ncy5cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldFZhbHVlVHlwZShtYXhEZXRhaWwpIHtcbiAgcmV0dXJuIGFsbFZhbHVlVHlwZXNbYWxsVmlld3MuaW5kZXhPZihtYXhEZXRhaWwpXTtcbn1cblxuZnVuY3Rpb24gZ2V0VmFsdWUodmFsdWUsIGluZGV4KSB7XG4gIGlmICghdmFsdWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciByYXdWYWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsdWUpICYmIHZhbHVlLmxlbmd0aCA9PT0gMiA/IHZhbHVlW2luZGV4XSA6IHZhbHVlO1xuXG4gIGlmICghcmF3VmFsdWUpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHZhciB2YWx1ZURhdGUgPSB0b0RhdGUocmF3VmFsdWUpO1xuXG4gIGlmIChpc05hTih2YWx1ZURhdGUuZ2V0VGltZSgpKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgZGF0ZTogXCIuY29uY2F0KHZhbHVlKSk7XG4gIH1cblxuICByZXR1cm4gdmFsdWVEYXRlO1xufVxuXG5mdW5jdGlvbiBnZXREZXRhaWxWYWx1ZShfcmVmLCBpbmRleCkge1xuICB2YXIgdmFsdWUgPSBfcmVmLnZhbHVlLFxuICAgICAgbWluRGF0ZSA9IF9yZWYubWluRGF0ZSxcbiAgICAgIG1heERhdGUgPSBfcmVmLm1heERhdGUsXG4gICAgICBtYXhEZXRhaWwgPSBfcmVmLm1heERldGFpbDtcbiAgdmFyIHZhbHVlUGllY2UgPSBnZXRWYWx1ZSh2YWx1ZSwgaW5kZXgpO1xuXG4gIGlmICghdmFsdWVQaWVjZSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgdmFyIHZhbHVlVHlwZSA9IGdldFZhbHVlVHlwZShtYXhEZXRhaWwpO1xuICB2YXIgZGV0YWlsVmFsdWVGcm9tID0gW2dldEJlZ2luLCBnZXRFbmRdW2luZGV4XSh2YWx1ZVR5cGUsIHZhbHVlUGllY2UpO1xuICByZXR1cm4gYmV0d2VlbihkZXRhaWxWYWx1ZUZyb20sIG1pbkRhdGUsIG1heERhdGUpO1xufVxuXG52YXIgZ2V0RGV0YWlsVmFsdWVGcm9tID0gZnVuY3Rpb24gZ2V0RGV0YWlsVmFsdWVGcm9tKGFyZ3MpIHtcbiAgcmV0dXJuIGdldERldGFpbFZhbHVlKGFyZ3MsIDApO1xufTtcblxudmFyIGdldERldGFpbFZhbHVlVG8gPSBmdW5jdGlvbiBnZXREZXRhaWxWYWx1ZVRvKGFyZ3MpIHtcbiAgcmV0dXJuIGdldERldGFpbFZhbHVlKGFyZ3MsIDEpO1xufTtcblxudmFyIGdldERldGFpbFZhbHVlQXJyYXkgPSBmdW5jdGlvbiBnZXREZXRhaWxWYWx1ZUFycmF5KGFyZ3MpIHtcbiAgdmFyIHZhbHVlID0gYXJncy52YWx1ZTtcblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gW2dldERldGFpbFZhbHVlRnJvbSwgZ2V0RGV0YWlsVmFsdWVUb10ubWFwKGZ1bmN0aW9uIChmbikge1xuICAgIHJldHVybiBmbihhcmdzKTtcbiAgfSk7XG59O1xuXG5mdW5jdGlvbiBnZXRBY3RpdmVTdGFydERhdGUocHJvcHMpIHtcbiAgdmFyIG1heERhdGUgPSBwcm9wcy5tYXhEYXRlLFxuICAgICAgbWF4RGV0YWlsID0gcHJvcHMubWF4RGV0YWlsLFxuICAgICAgbWluRGF0ZSA9IHByb3BzLm1pbkRhdGUsXG4gICAgICBtaW5EZXRhaWwgPSBwcm9wcy5taW5EZXRhaWwsXG4gICAgICB2YWx1ZSA9IHByb3BzLnZhbHVlLFxuICAgICAgdmlldyA9IHByb3BzLnZpZXc7XG4gIHZhciByYW5nZVR5cGUgPSBnZXRWaWV3KHZpZXcsIG1pbkRldGFpbCwgbWF4RGV0YWlsKTtcbiAgdmFyIHZhbHVlRnJvbSA9IGdldERldGFpbFZhbHVlRnJvbSh7XG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIG1pbkRhdGU6IG1pbkRhdGUsXG4gICAgbWF4RGF0ZTogbWF4RGF0ZSxcbiAgICBtYXhEZXRhaWw6IG1heERldGFpbFxuICB9KSB8fCBuZXcgRGF0ZSgpO1xuICByZXR1cm4gZ2V0QmVnaW4ocmFuZ2VUeXBlLCB2YWx1ZUZyb20pO1xufVxuXG5mdW5jdGlvbiBnZXRJbml0aWFsQWN0aXZlU3RhcnREYXRlKHByb3BzKSB7XG4gIHZhciBhY3RpdmVTdGFydERhdGUgPSBwcm9wcy5hY3RpdmVTdGFydERhdGUsXG4gICAgICBkZWZhdWx0QWN0aXZlU3RhcnREYXRlID0gcHJvcHMuZGVmYXVsdEFjdGl2ZVN0YXJ0RGF0ZSxcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IHByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgIGRlZmF1bHRWaWV3ID0gcHJvcHMuZGVmYXVsdFZpZXcsXG4gICAgICBtYXhEZXRhaWwgPSBwcm9wcy5tYXhEZXRhaWwsXG4gICAgICBtaW5EZXRhaWwgPSBwcm9wcy5taW5EZXRhaWwsXG4gICAgICB2YWx1ZSA9IHByb3BzLnZhbHVlLFxuICAgICAgdmlldyA9IHByb3BzLnZpZXcsXG4gICAgICBvdGhlclByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzKHByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIHZhciByYW5nZVR5cGUgPSBnZXRWaWV3KHZpZXcsIG1pbkRldGFpbCwgbWF4RGV0YWlsKTtcbiAgdmFyIHZhbHVlRnJvbSA9IGFjdGl2ZVN0YXJ0RGF0ZSB8fCBkZWZhdWx0QWN0aXZlU3RhcnREYXRlO1xuXG4gIGlmICh2YWx1ZUZyb20pIHtcbiAgICByZXR1cm4gZ2V0QmVnaW4ocmFuZ2VUeXBlLCB2YWx1ZUZyb20pO1xuICB9XG5cbiAgcmV0dXJuIGdldEFjdGl2ZVN0YXJ0RGF0ZShfb2JqZWN0U3ByZWFkKHtcbiAgICBtYXhEZXRhaWw6IG1heERldGFpbCxcbiAgICBtaW5EZXRhaWw6IG1pbkRldGFpbCxcbiAgICB2YWx1ZTogdmFsdWUgfHwgZGVmYXVsdFZhbHVlLFxuICAgIHZpZXc6IHZpZXcgfHwgZGVmYXVsdFZpZXdcbiAgfSwgb3RoZXJQcm9wcykpO1xufVxuXG52YXIgZ2V0SXNTaW5nbGVWYWx1ZSA9IGZ1bmN0aW9uIGdldElzU2luZ2xlVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICYmIFtdLmNvbmNhdCh2YWx1ZSkubGVuZ3RoID09PSAxO1xufTtcblxudmFyIENhbGVuZGFyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0cyhDYWxlbmRhciwgX0NvbXBvbmVudCk7XG5cbiAgdmFyIF9zdXBlciA9IF9jcmVhdGVTdXBlcihDYWxlbmRhcik7XG5cbiAgZnVuY3Rpb24gQ2FsZW5kYXIoKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIENhbGVuZGFyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBfYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIF9hcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX3N1cGVyLmNhbGwuYXBwbHkoX3N1cGVyLCBbdGhpc10uY29uY2F0KF9hcmdzKSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic3RhdGVcIiwge1xuICAgICAgYWN0aXZlU3RhcnREYXRlOiBfdGhpcy5wcm9wcy5kZWZh
2dWx0QWN0aXZlU3RhcnREYXRlLFxuICAgICAgdmFsdWU6IF90aGlzLnByb3BzLmRlZmF1bHRWYWx1ZSxcbiAgICAgIHZpZXc6IF90aGlzLnByb3BzLmRlZmF1bHRWaWV3XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwic2V0U3RhdGVBbmRDYWxsQ2FsbGJhY2tzXCIsIGZ1bmN0aW9uIChuZXh0U3RhdGUsIGV2ZW50LCBjYWxsYmFjaykge1xuICAgICAgdmFyIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZSA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLFxuICAgICAgICAgIHByZXZpb3VzQWN0aXZlU3RhcnREYXRlID0gX2Fzc2VydFRoaXNJbml0aWFsaXplLmFjdGl2ZVN0YXJ0RGF0ZSxcbiAgICAgICAgICBwcmV2aW91c1ZpZXcgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemUudmlldztcblxuICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgYWxsb3dQYXJ0aWFsUmFuZ2UgPSBfdGhpcyRwcm9wcy5hbGxvd1BhcnRpYWxSYW5nZSxcbiAgICAgICAgICBvbkFjdGl2ZVN0YXJ0RGF0ZUNoYW5nZSA9IF90aGlzJHByb3BzLm9uQWN0aXZlU3RhcnREYXRlQ2hhbmdlLFxuICAgICAgICAgIG9uQ2hhbmdlID0gX3RoaXMkcHJvcHMub25DaGFuZ2UsXG4gICAgICAgICAgb25WaWV3Q2hhbmdlID0gX3RoaXMkcHJvcHMub25WaWV3Q2hhbmdlLFxuICAgICAgICAgIHNlbGVjdFJhbmdlID0gX3RoaXMkcHJvcHMuc2VsZWN0UmFuZ2U7XG4gICAgICB2YXIgcHJldkFyZ3MgPSB7XG4gICAgICAgIGFjdGl2ZVN0YXJ0RGF0ZTogcHJldmlvdXNBY3RpdmVTdGFydERhdGUsXG4gICAgICAgIHZpZXc6IHByZXZpb3VzVmlld1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGUobmV4dFN0YXRlLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBhcmdzID0ge1xuICAgICAgICAgIGFjdGlvbjogbmV4dFN0YXRlLmFjdGlvbixcbiAgICAgICAgICBhY3RpdmVTdGFydERhdGU6IG5leHRTdGF0ZS5hY3RpdmVTdGFydERhdGUgfHwgX3RoaXMuYWN0aXZlU3RhcnREYXRlLFxuICAgICAgICAgIHZhbHVlOiBuZXh0U3RhdGUudmFsdWUgfHwgX3RoaXMudmFsdWUsXG4gICAgICAgICAgdmlldzogbmV4dFN0YXRlLnZpZXcgfHwgX3RoaXMudmlld1xuICAgICAgICB9O1xuXG4gICAgICAgIGZ1bmN0aW9uIHNob3VsZFVwZGF0ZShrZXkpIHtcbiAgICAgICAgICByZXR1cm4gKC8vIEtleSBtdXN0IGV4aXN0LCBhbmTigKZcbiAgICAgICAgICAgIGtleSBpbiBuZXh0U3RhdGUgJiYgKCAvLyDigKZrZXkgY2hhbmdlZCBmcm9tIHVuZGVmaW5lZCB0byBkZWZpbmVkIG9yIHRoZSBvdGhlciB3YXkgYXJvdW5kLCBvcuKAplxuICAgICAgICAgICAgX3R5cGVvZihuZXh0U3RhdGVba2V5XSkgIT09IF90eXBlb2YocHJldkFyZ3Nba2V5XSkgfHwgKCAvLyDigKZ2YWx1ZSBjaGFuZ2VkLlxuICAgICAgICAgICAgbmV4dFN0YXRlW2tleV0gaW5zdGFuY2VvZiBEYXRlID8gbmV4dFN0YXRlW2tleV0uZ2V0VGltZSgpICE9PSBwcmV2QXJnc1trZXldLmdldFRpbWUoKSA6IG5leHRTdGF0ZVtrZXldICE9PSBwcmV2QXJnc1trZXldKSlcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3VsZFVwZGF0ZSgnYWN0aXZlU3RhcnREYXRlJykpIHtcbiAgICAgICAgICBpZiAob25BY3RpdmVTdGFydERhdGVDaGFuZ2UpIG9uQWN0aXZlU3RhcnREYXRlQ2hhbmdlKGFyZ3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3VsZFVwZGF0ZSgndmlldycpKSB7XG4gICAgICAgICAgaWYgKG9uVmlld0NoYW5nZSkgb25WaWV3Q2hhbmdlKGFyZ3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNob3VsZFVwZGF0ZSgndmFsdWUnKSkge1xuICAgICAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICAgICAgaWYgKHNlbGVjdFJhbmdlKSB7XG4gICAgICAgICAgICAgIHZhciBpc1NpbmdsZVZhbHVlID0gZ2V0SXNTaW5nbGVWYWx1ZShuZXh0U3RhdGUudmFsdWUpO1xuXG4gICAgICAgICAgICAgIGlmICghaXNTaW5nbGVWYWx1ZSkge1xuICAgICAgICAgICAgICAgIG9uQ2hhbmdlKG5leHRTdGF0ZS52YWx1ZSwgZXZlbnQpO1xuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGFsbG93UGFydGlhbFJhbmdlKSB7XG4gICAgICAgICAgICAgICAgb25DaGFuZ2UoW25leHRTdGF0ZS52YWx1ZV0sIGV2ZW50KTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb25DaGFuZ2UobmV4dFN0YXRlLnZhbHVlLCBldmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSBjYWxsYmFjayhhcmdzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcInNldEFjdGl2ZVN0YXJ0RGF0ZVwiLCBmdW5jdGlvbiAobmV4dEFjdGl2ZVN0YXJ0RGF0ZSwgYWN0aW9uKSB7XG4gICAgICBfdGhpcy5zZXRTdGF0ZUFuZENhbGxDYWxsYmFja3Moe1xuICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgYWN0aXZlU3RhcnREYXRlOiBuZXh0QWN0aXZlU3RhcnREYXRlXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJkcmlsbERvd25cIiwgZnVuY3Rpb24gKG5leHRBY3RpdmVTdGFydERhdGUsIGV2ZW50KSB7XG4gICAgICBpZiAoIV90aGlzLmRyaWxsRG93bkF2YWlsYWJsZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIF90aGlzLm9uQ2xpY2tUaWxlKG5leHRBY3RpdmVTdGFydERhdGUsIGV2ZW50KTtcblxuICAgICAgdmFyIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZTIgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSxcbiAgICAgICAgICB2aWV3ID0gX2Fzc2VydFRoaXNJbml0aWFsaXplMi52aWV3LFxuICAgICAgICAgIHZpZXdzID0gX2Fzc2VydFRoaXNJbml0aWFsaXplMi52aWV3cztcblxuICAgICAgdmFyIG9uRHJpbGxEb3duID0gX3RoaXMucHJvcHMub25EcmlsbERvd247XG4gICAgICB2Y
2XIgbmV4dFZpZXcgPSB2aWV3c1t2aWV3cy5pbmRleE9mKHZpZXcpICsgMV07XG5cbiAgICAgIF90aGlzLnNldFN0YXRlQW5kQ2FsbENhbGxiYWNrcyh7XG4gICAgICAgIGFjdGlvbjogJ2RyaWxsRG93bicsXG4gICAgICAgIGFjdGl2ZVN0YXJ0RGF0ZTogbmV4dEFjdGl2ZVN0YXJ0RGF0ZSxcbiAgICAgICAgdmlldzogbmV4dFZpZXdcbiAgICAgIH0sIHVuZGVmaW5lZCwgb25EcmlsbERvd24pO1xuICAgIH0pO1xuXG4gICAgX2RlZmluZVByb3BlcnR5KF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLCBcImRyaWxsVXBcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKCFfdGhpcy5kcmlsbFVwQXZhaWxhYmxlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmFyIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZTMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSxcbiAgICAgICAgICBhY3RpdmVTdGFydERhdGUgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemUzLmFjdGl2ZVN0YXJ0RGF0ZSxcbiAgICAgICAgICB2aWV3ID0gX2Fzc2VydFRoaXNJbml0aWFsaXplMy52aWV3LFxuICAgICAgICAgIHZpZXdzID0gX2Fzc2VydFRoaXNJbml0aWFsaXplMy52aWV3cztcblxuICAgICAgdmFyIG9uRHJpbGxVcCA9IF90aGlzLnByb3BzLm9uRHJpbGxVcDtcbiAgICAgIHZhciBuZXh0VmlldyA9IHZpZXdzW3ZpZXdzLmluZGV4T2YodmlldykgLSAxXTtcbiAgICAgIHZhciBuZXh0QWN0aXZlU3RhcnREYXRlID0gZ2V0QmVnaW4obmV4dFZpZXcsIGFjdGl2ZVN0YXJ0RGF0ZSk7XG5cbiAgICAgIF90aGlzLnNldFN0YXRlQW5kQ2FsbENhbGxiYWNrcyh7XG4gICAgICAgIGFjdGlvbjogJ2RyaWxsVXAnLFxuICAgICAgICBhY3RpdmVTdGFydERhdGU6IG5leHRBY3RpdmVTdGFydERhdGUsXG4gICAgICAgIHZpZXc6IG5leHRWaWV3XG4gICAgICB9LCB1bmRlZmluZWQsIG9uRHJpbGxVcCk7XG4gICAgfSk7XG5cbiAgICBfZGVmaW5lUHJvcGVydHkoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksIFwib25DaGFuZ2VcIiwgZnVuY3Rpb24gKHZhbHVlLCBldmVudCkge1xuICAgICAgdmFyIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZTQgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSxcbiAgICAgICAgICBwcmV2aW91c1ZhbHVlID0gX2Fzc2VydFRoaXNJbml0aWFsaXplNC52YWx1ZTtcblxuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IF90aGlzLnByb3BzLFxuICAgICAgICAgIGdvVG9SYW5nZVN0YXJ0T25TZWxlY3QgPSBfdGhpcyRwcm9wczIuZ29Ub1JhbmdlU3RhcnRPblNlbGVjdCxcbiAgICAgICAgICBzZWxlY3RSYW5nZSA9IF90aGlzJHByb3BzMi5zZWxlY3RSYW5nZTtcblxuICAgICAgX3RoaXMub25DbGlja1RpbGUodmFsdWUsIGV2ZW50KTtcblxuICAgICAgdmFyIGlzRmlyc3RWYWx1ZUluUmFuZ2UgPSBzZWxlY3RSYW5nZSAmJiAhZ2V0SXNTaW5nbGVWYWx1ZShwcmV2aW91c1ZhbHVlKTtcbiAgICAgIHZhciBuZXh0VmFsdWU7XG5cbiAgICAgIGlmIChzZWxlY3RSYW5nZSkge1xuICAgICAgICAvLyBSYW5nZSBzZWxlY3Rpb24gdHVybmVkIG9uXG4gICAgICAgIHZhciBfYXNzZXJ0VGhpc0luaXRpYWxpemU1ID0gX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksXG4gICAgICAgICAgICB2YWx1ZVR5cGUgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemU1LnZhbHVlVHlwZTtcblxuICAgICAgICBpZiAoaXNGaXJzdFZhbHVlSW5SYW5nZSkge1xuICAgICAgICAgIC8vIFZhbHVlIGhhcyAwIG9yIDIgZWxlbWVudHMgLSBlaXRoZXIgd2F5IHdlJ3JlIHN0YXJ0aW5nIGEgbmV3IGFycmF5XG4gICAgICAgICAgLy8gRmlyc3QgdmFsdWVcbiAgICAgICAgICBuZXh0VmFsdWUgPSBnZXRCZWdpbih2YWx1ZVR5cGUsIHZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBTZWNvbmQgdmFsdWVcbiAgICAgICAgICBuZXh0VmFsdWUgPSBnZXRWYWx1ZVJhbmdlKHZhbHVlVHlwZSwgcHJldmlvdXNWYWx1ZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBSYW5nZSBzZWxlY3Rpb24gdHVybmVkIG9mZlxuICAgICAgICBuZXh0VmFsdWUgPSBfdGhpcy5nZXRQcm9jZXNzZWRWYWx1ZSh2YWx1ZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBuZXh0QWN0aXZlU3RhcnREYXRlID0gLy8gUmFuZ2Ugc2VsZWN0aW9uIHR1cm5lZCBvZmZcbiAgICAgICFzZWxlY3RSYW5nZSB8fCAvLyBSYW5nZSBzZWxlY3Rpb24gdHVybmVkIG9uLCBmaXJzdCB2YWx1ZVxuICAgICAgaXNGaXJzdFZhbHVlSW5SYW5nZSB8fCAvLyBSYW5nZSBzZWxlY3Rpb24gdHVybmVkIG9uLCBzZWNvbmQgdmFsdWUsIGdvVG9SYW5nZVN0YXJ0T25TZWxlY3QgdG9nZ2xlZCBvblxuICAgICAgZ29Ub1JhbmdlU3RhcnRPblNlbGVjdCA/IGdldEFjdGl2ZVN0YXJ0RGF0ZShfb2JqZWN0U3ByZWFkKF9vYmplY3RTcHJlYWQoe30sIF90aGlzLnByb3BzKSwge30sIHtcbiAgICAgICAgdmFsdWU6IG5leHRWYWx1ZVxuICAgICAgfSkpIDogbnVsbDtcbiAgICAgIGV2ZW50LnBlcnNpc3QoKTtcblxuICAgICAgX3RoaXMuc2V0U3RhdGVBbmRDYWxsQ2FsbGJhY2tzKHtcbiAgICAgICAgYWN0aW9uOiAnb25DaGFuZ2UnLFxuICAgICAgICBhY3RpdmVTdGFydERhdGU6IG5leHRBY3RpdmVTdGFydERhdGUsXG4gICAgICAgIHZhbHVlOiBuZXh0VmFsdWVcbiAgICAgIH0sIGV2ZW50KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbkNsaWNrVGlsZVwiLCBmdW5jdGlvbiAodmFsdWUsIGV2ZW50KSB7XG4gICAgICB2Y
2XIgX2Fzc2VydFRoaXNJbml0aWFsaXplNiA9IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLFxuICAgICAgICAgIHZpZXcgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemU2LnZpZXc7XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICBvbkNsaWNrRGF5ID0gX3RoaXMkcHJvcHMzLm9uQ2xpY2tEYXksXG4gICAgICAgICAgb25DbGlja0RlY2FkZSA9IF90aGlzJHByb3BzMy5vbkNsaWNrRGVjYWRlLFxuICAgICAgICAgIG9uQ2xpY2tNb250aCA9IF90aGlzJHByb3BzMy5vbkNsaWNrTW9udGgsXG4gICAgICAgICAgb25DbGlja1llYXIgPSBfdGhpcyRwcm9wczMub25DbGlja1llYXI7XG5cbiAgICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc3dpdGNoICh2aWV3KSB7XG4gICAgICAgICAgY2FzZSAnY2VudHVyeSc6XG4gICAgICAgICAgICByZXR1cm4gb25DbGlja0RlY2FkZTtcblxuICAgICAgICAgIGNhc2UgJ2RlY2FkZSc6XG4gICAgICAgICAgICByZXR1cm4gb25DbGlja1llYXI7XG5cbiAgICAgICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgICAgIHJldHVybiBvbkNsaWNrTW9udGg7XG5cbiAgICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAgICByZXR1cm4gb25DbGlja0RheTtcblxuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHZpZXc6IFwiLmNvbmNhdCh2aWV3LCBcIi5cIikpO1xuICAgICAgICB9XG4gICAgICB9KCk7XG5cbiAgICAgIGlmIChjYWxsYmFjaykgY2FsbGJhY2sodmFsdWUsIGV2ZW50KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbk1vdXNlT3ZlclwiLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5ob3ZlciAmJiBwcmV2U3RhdGUuaG92ZXIuZ2V0VGltZSgpID09PSB2YWx1ZS5nZXRUaW1lKCkpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaG92ZXI6IHZhbHVlXG4gICAgICAgIH07XG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIF9kZWZpbmVQcm9wZXJ0eShfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSwgXCJvbk1vdXNlTGVhdmVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBob3ZlcjogbnVsbFxuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBfY3JlYXRlQ2xhc3MoQ2FsZW5kYXIsIFt7XG4gICAga2V5OiBcImFjdGl2ZVN0YXJ0RGF0ZVwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIGFjdGl2ZVN0YXJ0RGF0ZVByb3BzID0gdGhpcy5wcm9wcy5hY3RpdmVTdGFydERhdGU7XG4gICAgICB2Y
2XIgYWN0aXZlU3RhcnREYXRlU3RhdGUgPSB0aGlzLnN0YXRlLmFjdGl2ZVN0YXJ0RGF0ZTtcbiAgICAgIHJldHVybiBhY3RpdmVTdGFydERhdGVQcm9wcyB8fCBhY3RpdmVTdGFydERhdGVTdGF0ZSB8fCBnZXRJbml0aWFsQWN0aXZlU3RhcnREYXRlKHRoaXMucHJvcHMpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2YWx1ZVwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgc2VsZWN0UmFuZ2UgPSBfdGhpcyRwcm9wczQuc2VsZWN0UmFuZ2UsXG4gICAgICAgICAgdmFsdWVQcm9wcyA9IF90aGlzJHByb3BzNC52YWx1ZTtcbiAgICAgIHZhciB2YWx1ZVN0YXRlID0gdGhpcy5zdGF0ZS52YWx1ZTsgLy8gSW4gdGhlIG1pZGRsZSBvZiByYW5nZSBzZWxlY3Rpb24sIHVzZSB2YWx1ZSBmcm9tIHN0YXRlXG5cbiAgICAgIGlmIChzZWxlY3RSYW5nZSAmJiBnZXRJc1NpbmdsZVZhbHVlKHZhbHVlU3RhdGUpKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZVN0YXRlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdmFsdWVQcm9wcyAhPT0gdW5kZWZpbmVkID8gdmFsdWVQcm9wcyA6IHZhbHVlU3RhdGU7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInZhbHVlVHlwZVwiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIG1heERldGFpbCA9IHRoaXMucHJvcHMubWF4RGV0YWlsO1xuICAgICAgcmV0dXJuIGdldFZhbHVlVHlwZShtYXhEZXRhaWwpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2aWV3XCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2Y
2XIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBtaW5EZXRhaWwgPSBfdGhpcyRwcm9wczUubWluRGV0YWlsLFxuICAgICAgICAgIG1heERldGFpbCA9IF90aGlzJHByb3BzNS5tYXhEZXRhaWwsXG4gICAgICAgICAgdmlld1Byb3BzID0gX3RoaXMkcHJvcHM1LnZpZXc7XG4gICAgICB2YXIgdmlld1N0YXRlID0gdGhpcy5zdGF0ZS52aWV3O1xuICAgICAgcmV0dXJuIGdldFZpZXcodmlld1Byb3BzIHx8IHZpZXdTdGF0ZSwgbWluRGV0YWlsLCBtYXhEZXRhaWwpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJ2aWV3c1wiLFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgbWluRGV0YWlsID0gX3RoaXMkcHJvcHM2Lm1pbkRldGFpbCxcbiAgICAgICAgICBtYXhEZXRhaWwgPSBfdGhpcyRwcm9wczYubWF4RGV0YWlsO1xuICAgICAgcmV0dXJuIGdldExpbWl0ZWRWaWV3cyhtaW5EZXRhaWwsIG1heERldGFpbCk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImhvdmVyXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2YXIgc2VsZWN0UmFuZ2UgPSB0aGlzLnByb3BzLnNlbGVjdFJhbmdlO1xuICAgICAgdmFyIGhvdmVyID0gdGhpcy5zdGF0ZS5ob3ZlcjtcbiAgICAgIHJldHVybiBzZWxlY3RSYW5nZSA/IGhvdmVyIDogbnVsbDtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiZHJpbGxEb3duQXZhaWxhYmxlXCIsXG4gICAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgICB2Y
2XIgdmlldyA9IHRoaXMudmlldyxcbiAgICAgICAgICB2aWV3cyA9IHRoaXMudmlld3M7XG4gICAgICByZXR1cm4gdmlld3MuaW5kZXhPZih2aWV3KSA8IHZpZXdzLmxlbmd0aCAtIDE7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImRyaWxsVXBBdmFpbGFibGVcIixcbiAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICAgIHZhciB2aWV3ID0gdGhpcy52aWV3LFxuICAgICAgICAgIHZpZXdzID0gdGhpcy52aWV3cztcbiAgICAgIHJldHVybiB2aWV3cy5pbmRleE9mKHZpZXcpID4gMDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogR2V0cyBjdXJyZW50IHZhbHVlIGluIGEgZGVzaXJlZCBmb3JtYXQuXG4gICAgICovXG5cbiAgfSwge1xuICAgIGtleTogXCJnZXRQcm9jZXNzZWRWYWx1ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBnZXRQcm9jZXNzZWRWYWx1ZSh2YWx1ZSkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgbWluRGF0ZSA9IF90aGlzJHByb3BzNy5taW5EYXRlLFxuICAgICAgICAgIG1heERhdGUgPSBfdGhpcyRwcm9wczcubWF4RGF0ZSxcbiAgICAgICAgICBtYXhEZXRhaWwgPSBfdGhpcyRwcm9wczcubWF4RGV0YWlsLFxuICAgICAgICAgIHJldHVyblZhbHVlID0gX3RoaXMkcHJvcHM3LnJldHVyblZhbHVlO1xuXG4gICAgICB2YXIgcHJvY2Vzc0Z1bmN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBzd2l0Y2ggKHJldHVyblZhbHVlKSB7XG4gICAgICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICAgICAgcmV0dXJuIGdldERldGFpbFZhbHVlRnJvbTtcblxuICAgICAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgICAgICByZXR1cm4gZ2V0RGV0YWlsVmFsdWVUbztcblxuICAgICAgICAgIGNhc2UgJ3JhbmdlJzpcbiAgICAgICAgICAgIHJldHVybiBnZXREZXRhaWxWYWx1ZUFycmF5O1xuXG4gICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCByZXR1cm5WYWx1ZS4nKTtcbiAgICAgICAgfVxuICAgICAgfSgpO1xuXG4gICAgICByZXR1cm4gcHJvY2Vzc0Z1bmN0aW9uKHtcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICBtaW5EYXRlOiBtaW5EYXRlLFxuICAgICAgICBtYXhEYXRlOiBtYXhEYXRlLFxuICAgICAgICBtYXhEZXRhaWw6IG1heERldGFpbFxuICAgICAgfSk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlckNvbnRlbnRcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyQ29udGVudChuZXh0KSB7XG4gICAgICB2Y
2XIgY3VycmVudEFjdGl2ZVN0YXJ0RGF0ZSA9IHRoaXMuYWN0aXZlU3RhcnREYXRlLFxuICAgICAgICAgIG9uTW91c2VPdmVyID0gdGhpcy5vbk1vdXNlT3ZlcixcbiAgICAgICAgICB2YWx1ZVR5cGUgPSB0aGlzLnZhbHVlVHlwZSxcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMudmFsdWUsXG4gICAgICAgICAgdmlldyA9IHRoaXMudmlldztcbiAgICAgIHZhciBfdGhpcyRwcm9wczggPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNhbGVuZGFyVHlwZSA9IF90aGlzJHByb3BzOC5jYWxlbmRhclR5cGUsXG4gICAgICAgICAgbG9jYWxlID0gX3RoaXMkcHJvcHM4LmxvY2FsZSxcbiAgICAgICAgICBtYXhEYXRlID0gX3RoaXMkcHJvcHM4Lm1heERhdGUsXG4gICAgICAgICAgbWluRGF0ZSA9IF90aGlzJHByb3BzOC5taW5EYXRlLFxuICAgICAgICAgIHNlbGVjdFJhbmdlID0gX3RoaXMkcHJvcHM4LnNlbGVjdFJhbmdlLFxuICAgICAgICAgIHRpbGVDbGFzc05hbWUgPSBfdGhpcyRwcm9wczgudGlsZUNsYXNzTmFtZSxcbiAgICAgICAgICB0aWxlQ29udGVudCA9IF90aGlzJHByb3BzOC50aWxlQ29udGVudCxcbiAgICAgICAgICB0aWxlRGlzYWJsZWQgPSBfdGhpcyRwcm9wczgudGlsZURpc2FibGVkO1xuICAgICAgdmFyIGhvdmVyID0gdGhpcy5ob3ZlcjtcbiAgICAgIHZhciBhY3RpdmVTdGFydERhdGUgPSBuZXh0ID8gZ2V0QmVnaW5OZXh0KHZpZXcsIGN1cnJlbnRBY3RpdmVTdGFydERhdGUpIDogZ2V0QmVnaW4odmlldywgY3VycmVudEFjdGl2ZVN0YXJ0RGF0ZSk7XG4gICAgICB2Y
2XIgb25DbGljayA9IHRoaXMuZHJpbGxEb3duQXZhaWxhYmxlID8gdGhpcy5kcmlsbERvd24gOiB0aGlzLm9uQ2hhbmdlO1xuICAgICAgdmFyIGNvbW1vblByb3BzID0ge1xuICAgICAgICBhY3RpdmVTdGFydERhdGU6IGFjdGl2ZVN0YXJ0RGF0ZSxcbiAgICAgICAgaG92ZXI6IGhvdmVyLFxuICAgICAgICBsb2NhbGU6IGxvY2FsZSxcbiAgICAgICAgbWF4RGF0ZTogbWF4RGF0ZSxcbiAgICAgICAgbWluRGF0ZTogbWluRGF0ZSxcbiAgICAgICAgb25DbGljazogb25DbGljayxcbiAgICAgICAgb25Nb3VzZU92ZXI6IHNlbGVjdFJhbmdlID8gb25Nb3VzZU92ZXIgOiBudWxsLFxuICAgICAgICB0aWxlQ2xhc3NOYW1lOiB0aWxlQ2xhc3NOYW1lLFxuICAgICAgICB0aWxlQ29udGVudDogdGlsZUNvbnRlbnQsXG4gICAgICAgIHRpbGVEaXNhYmxlZDogdGlsZURpc2FibGVkLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIHZhbHVlVHlwZTogdmFsdWVUeXBlXG4gICAgICB9O1xuXG4gICAgICBzd2l0Y2ggKHZpZXcpIHtcbiAgICAgICAgY2FzZSAnY2VudHVyeSc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIGZvcm1hdFllYXIgPSB0aGlzLnByb3BzLmZvcm1hdFllYXI7XG4gICAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoQ2VudHVyeVZpZXcsIF9leHRlbmRzKHtcbiAgICAgICAgICAgICAgZm9ybWF0WWVhcjogZm9ybWF0WWVhclxuICAgICAgICAgICAgfSwgY29tbW9uUHJvcHMpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnZGVjYWRlJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICB2Y
2XIgX2Zvcm1hdFllYXIgPSB0aGlzLnByb3BzLmZvcm1hdFllYXI7XG4gICAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoRGVjYWRlVmlldywgX2V4dGVuZHMoe1xuICAgICAgICAgICAgICBmb3JtYXRZZWFyOiBfZm9ybWF0WWVhclxuICAgICAgICAgICAgfSwgY29tbW9uUHJvcHMpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF90aGlzJHByb3BzOSA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgICAgICAgZm9ybWF0TW9udGggPSBfdGhpcyRwcm9wczkuZm9ybWF0TW9udGgsXG4gICAgICAgICAgICAgICAgZm9ybWF0TW9udGhZZWFyID0gX3RoaXMkcHJvcHM5LmZvcm1hdE1vbnRoWWVhcjtcbiAgICAgICAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChZZWFyVmlldywgX2V4dGVuZHMoe1xuICAgICAgICAgICAgICBmb3JtYXRNb250aDogZm9ybWF0TW9udGgsXG4gICAgICAgICAgICAgIGZvcm1hdE1vbnRoWWVhcjogZm9ybWF0TW9udGhZZWFyXG4gICAgICAgICAgICB9LCBjb21tb25Qcm9wcykpO1xuICAgICAgICAgIH1cblxuICAgICAgICBjYXNlICdtb250aCc6XG4gICAgICAgICAge1xuICAgICAgICAgICAgdmFyIF90aGlzJHByb3BzMTAgPSB0aGlzLnByb3BzLFxuICAgICAgICAgICAgICAgIGZvcm1hdERheSA9IF90aGlzJHByb3BzMTAuZm9ybWF0RGF5LFxuICAgICAgICAgICAgICAgIGZvcm1hdExvbmdEYXRlID0gX3RoaXMkcHJvcHMxMC5mb3JtYXRMb25nRGF0ZSxcbiAgICAgICAgICAgICAgICBmb3JtYXRTaG9ydFdlZWtkYXkgPSBfdGhpcyRwcm9wczEwLmZvcm1hdFNob3J0V2Vla2RheSxcbiAgICAgICAgICAgICAgICBmb3JtYXRXZWVrZGF5ID0gX3RoaXMkcHJvcHMxMC5mb3JtYXRXZWVrZGF5LFxuICAgICAgICAgICAgICAgIG9uQ2xpY2tXZWVrTnVtYmVyID0gX3RoaXMkcHJvcHMxMC5vbkNsaWNrV2Vla051bWJlcixcbiAgICAgICAgICAgICAgICBzaG93RG91YmxlVmlldyA9IF90aGlzJHByb3BzMTAuc2hvd0RvdWJsZVZpZXcsXG4gICAgICAgICAgICAgICAgc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrcyA9IF90aGlzJHByb3BzMTAuc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrcyxcbiAgICAgICAgICAgICAgICBzaG93TmVpZ2hib3JpbmdNb250aCA9IF90aGlzJHByb3BzMTAuc2hvd05laWdoYm9yaW5nTW9udGgsXG4gICAgICAgICAgICAgICAgc2hvd1dlZWtOdW1iZXJzID0gX3RoaXMkcHJvcHMxMC5zaG93V2Vla051bWJlcnM7XG4gICAgICAgICAgICB2Y
2XIgb25Nb3VzZUxlYXZlID0gdGhpcy5vbk1vdXNlTGVhdmU7XG4gICAgICAgICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTW9udGhWaWV3LCBfZXh0ZW5kcyh7XG4gICAgICAgICAgICAgIGNhbGVuZGFyVHlwZTogY2FsZW5kYXJUeXBlLFxuICAgICAgICAgICAgICBmb3JtYXREYXk6IGZvcm1hdERheSxcbiAgICAgICAgICAgICAgZm9ybWF0TG9uZ0RhdGU6IGZvcm1hdExvbmdEYXRlLFxuICAgICAgICAgICAgICBmb3JtYXRTaG9ydFdlZWtkYXk6IGZvcm1hdFNob3J0V2Vla2RheSxcbiAgICAgICAgICAgICAgZm9ybWF0V2Vla2RheTogZm9ybWF0V2Vla2RheSxcbiAgICAgICAgICAgICAgb25DbGlja1dlZWtOdW1iZXI6IG9uQ2xpY2tXZWVrTnVtYmVyLFxuICAgICAgICAgICAgICBvbk1vdXNlTGVhdmU6IHNlbGVjdFJhbmdlID8gb25Nb3VzZUxlYXZlIDogbnVsbCxcbiAgICAgICAgICAgICAgc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrczogdHlwZW9mIHNob3dGaXhlZE51bWJlck9mV2Vla3MgIT09ICd1bmRlZmluZWQnID8gc2hvd0ZpeGVkTnVtYmVyT2ZXZWVrcyA6IHNob3dEb3VibGVWaWV3LFxuICAgICAgICAgICAgICBzaG93TmVpZ2hib3JpbmdNb250aDogc2hvd05laWdoYm9yaW5nTW9udGgsXG4gICAgICAgICAgICAgIHNob3dXZWVrTnVtYmVyczogc2hvd1dlZWtOdW1iZXJzXG4gICAgICAgICAgICB9LCBjb21tb25Qcm9wcykpO1xuICAgICAgICAgIH1cblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdmlldzogXCIuY29uY2F0KHZpZXcsIFwiLlwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcInJlbmRlck5hdmlnYXRpb25cIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyTmF2aWdhdGlvbigpIHtcbiAgICAgIHZhciBzaG93TmF2aWdhdGlvbiA9IHRoaXMucHJvcHMuc2hvd05hdmlnYXRpb247XG5cbiAgICAgIGlmICghc2hvd05hdmlnYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG5cbiAgICAgIHZhciBhY3RpdmVTdGFydERhdGUgPSB0aGlzLmFjdGl2ZVN0YXJ0RGF0ZSxcbiAgICAgICAgICB2aWV3ID0gdGhpcy52aWV3LFxuICAgICAgICAgIHZpZXdzID0gdGhpcy52aWV3cztcbiAgICAgIHZhciBfdGhpcyRwcm9wczExID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBmb3JtYXRNb250aFllYXIgPSBfdGhpcyRwcm9wczExLmZvcm1hdE1vbnRoWWVhcixcbiAgICAgICAgICBmb3JtYXRZZWFyID0gX3RoaXMkcHJvcHMxMS5mb3JtYXRZZWFyLFxuICAgICAgICAgIGxvY2FsZSA9IF90aGlzJHByb3BzMTEubG9jYWxlLFxuICAgICAgICAgIG1heERhdGUgPSBfdGhpcyRwcm9wczExLm1heERhdGUsXG4gICAgICAgICAgbWluRGF0ZSA9IF90aGlzJHByb3BzMTEubWluRGF0ZSxcbiAgICAgICAgICBuYXZpZ2F0aW9uQXJpYUxhYmVsID0gX3RoaXMkcHJvcHMxMS5uYXZpZ2F0aW9uQXJpYUxhYmVsLFxuICAgICAgICAgIG5hdmlnYXRpb25BcmlhTGl2ZSA9IF90aGlzJHByb3BzMTEubmF2aWdhdGlvbkFyaWFMaXZlLFxuICAgICAgICAgIG5hdmlnYXRpb25MYWJlbCA9IF90aGlzJHByb3BzMTEubmF2aWdhdGlvbkxhYmVsLFxuICAgICAgICAgIG5leHQyQXJpYUxhYmVsID0gX3RoaXMkcHJvcHMxMS5uZXh0MkFyaWFMYWJlbCxcbiAgICAgICAgICBuZXh0MkxhYmVsID0gX3RoaXMkcHJvcHMxMS5uZXh0MkxhYmVsLFxuICAgICAgICAgIG5leHRBcmlhTGFiZWwgPSBfdGhpcyRwcm9wczExLm5leHRBcmlhTGFiZWwsXG4gICAgICAgICAgbmV4dExhYmVsID0gX3RoaXMkcHJvcHMxMS5uZXh0TGFiZWwsXG4gICAgICAgICAgcHJldjJBcmlhTGFiZWwgPSBfdGhpcyRwcm9wczExLnByZXYyQXJpYUxhYmVsLFxuICAgICAgICAgIHByZXYyTGFiZWwgPSBfdGhpcyRwcm9wczExLnByZXYyTGFiZWwsXG4gICAgICAgICAgcHJldkFyaWFMYWJlbCA9IF90aGlzJHByb3BzMTEucHJldkFyaWFMYWJlbCxcbiAgICAgICAgICBwcmV2TGFiZWwgPSBfdGhpcyRwcm9wczExLnByZXZMYWJlbCxcbiAgICAgICAgICBzaG93RG91YmxlVmlldyA9IF90aGlzJHByb3BzMTEuc2hvd0RvdWJsZVZpZXc7XG4gICAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoTmF2aWdhdGlvbiwge1xuICAgICAgICBhY3RpdmVTdGFydERhdGU6IGFjdGl2ZVN0YXJ0RGF0ZSxcbiAgICAgICAgZHJpbGxVcDogdGhpcy5kcmlsbFVwLFxuICAgICAgICBmb3JtYXRNb250aFllYXI6IGZvcm1hdE1vbnRoWWVhcixcbiAgICAgICAgZm9ybWF0WWVhcjogZm9ybWF0WWVhcixcbiAgICAgICAgbG9jYWxlOiBsb2NhbGUsXG4gICAgICAgIG1heERhdGU6IG1heERhdGUsXG4gICAgICAgIG1pbkRhdGU6IG1pbkRhdGUsXG4gICAgICAgIG5hdmlnYXRpb25BcmlhTGFiZWw6IG5hdmlnYXRpb25BcmlhTGFiZWwsXG4gICAgICAgIG5hdmlnYXRpb25BcmlhTGl2ZTogbmF2aWdhdGlvbkFyaWFMaXZlLFxuICAgICAgICBuYXZpZ2F0aW9uTGFiZWw6IG5hdmlnYXRpb25MYWJlbCxcbiAgICAgICAgbmV4dDJBcmlhTGFiZWw6IG5leHQyQXJpYUxhYmVsLFxuICAgICAgICBuZXh0MkxhYmVsOiBuZXh0MkxhYmVsLFxuICAgICAgICBuZXh0QXJpYUxhYmVsOiBuZXh0QXJpYUxhYmVsLFxuICAgICAgICBuZXh0TGFiZWw6IG5leHRMYWJlbCxcbiAgICAgICAgcHJldjJBcmlhTGFiZWw6IHByZXYyQXJpYUxhYmVsLFxuICAgICAgICBwcmV2MkxhYmVsOiBwcmV2MkxhYmVsLFxuICAgICAgICBwcmV2QXJpYUxhYmVsOiBwcmV2QXJpYUxhYmVsLFxuICAgICAgICBwcmV2TGFiZWw6IHByZXZMYWJlbCxcbiAgICAgICAgc2V0QWN0aXZlU3RhcnREYXRlOiB0aGlzLnNldEFjdGl2ZVN0YXJ0RGF0ZSxcbiAgICAgICAgc2hvd0RvdWJsZVZpZXc6IHNob3dEb3VibGVWaWV3LFxuICAgICAgICB2aWV3OiB2aWV3LFxuICAgICAgICB2aWV3czogdmlld3NcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJyZW5kZXJcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMTIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzMTIuY2xhc3NOYW1lLFxuICAgICAgICAgIGlucHV0UmVmID0gX3RoaXMkcHJvcHMxMi5pbnB1dFJlZixcbiAgICAgICAgICBzZWxlY3RSYW5nZSA9IF90aGlzJHByb3BzMTIuc2VsZWN0UmFuZ2UsXG4gICAgICAgICAgc2hvd0RvdWJsZVZpZXcgPSBfdGhpcyRwcm9wczEyLnNob3dEb3VibGVWaWV3O1xuICAgICAgdmFyIG9uTW91c2VMZWF2ZSA9IHRoaXMub25Nb3VzZUxlYXZlLFxuICAgICAgICAgI
2HZhbHVlID0gdGhpcy52YWx1ZTtcbiAgICAgIHZhciB2YWx1ZUFycmF5ID0gW10uY29uY2F0KHZhbHVlKTtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogbWVyZ2VDbGFzc05hbWVzKGJhc2VDbGFzc05hbWUsIHNlbGVjdFJhbmdlICYmIHZhbHVlQXJyYXkubGVuZ3RoID09PSAxICYmIFwiXCIuY29uY2F0KGJhc2VDbGFzc05hbWUsIFwiLS1zZWxlY3RSYW5nZVwiKSwgc2hvd0RvdWJsZVZpZXcgJiYgXCJcIi5jb25jYXQoYmFzZUNsYXNzTmFtZSwgXCItLWRvdWJsZVZpZXdcIiksIGNsYXNzTmFtZSksXG4gICAgICAgIHJlZjogaW5wdXRSZWZcbiAgICAgIH0sIHRoaXMucmVuZGVyTmF2aWdhdGlvbigpLCAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7XG4gICAgICAgIGNsYXNzTmFtZTogXCJcIi5jb25jYXQoYmFzZUNsYXNzTmFtZSwgXCJfX3ZpZXdDb250YWluZXJcIiksXG4gICAgICAgIG9uQmx1cjogc2VsZWN0UmFuZ2UgPyBvbk1vdXNlTGVhdmUgOiBudWxsLFxuICAgICAgICBvbk1vdXNlTGVhdmU6IHNlbGVjdFJhbmdlID8gb25Nb3VzZUxlYXZlIDogbnVsbFxuICAgICAgfSwgdGhpcy5yZW5kZXJDb250ZW50KCksIHNob3dEb3VibGVWaWV3ICYmIHRoaXMucmVuZGVyQ29udGVudCh0cnVlKSkpO1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBDYWxlbmRhcjtcbn0oQ29tcG9uZW50KTtcblxuZXhwb3J0IHsgQ2FsZW5kYXIgYXMgZGVmYXVsdCB9O1xuQ2FsZW5kYXIuZGVmYXVsdFByb3BzID0ge1xuICBnb1RvUmFuZ2VTdGFydE9uU2VsZWN0OiB0cnVlLFxuICBtYXhEYXRlOiBkZWZhdWx0TWF4RGF0ZSxcbiAgbWF4RGV0YWlsOiAnbW9udGgnLFxuICBtaW5EYXRlOiBkZWZhdWx0TWluRGF0ZSxcbiAgbWluRGV0YWlsOiAnY2VudHVyeScsXG4gIHJldHVyblZhbHVlOiAnc3RhcnQnLFxuICBzaG93TmF2aWdhdGlvbjogdHJ1ZSxcbiAgc2hvd05laWdoYm9yaW5nTW9udGg6IHRydWVcbn07XG52YXIgaXNBY3RpdmVTdGFydERhdGUgPSBQcm9wVHlwZXMuaW5zdGFuY2VPZihEYXRlKTtcbnZhciBpc0xvb3NlVmFsdWUgPSBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBpc1ZhbHVlXSk7XG5DYWxlbmRhci5wcm9wVHlwZXMgPSB7XG4gIGFjdGl2ZVN0YXJ0RGF0ZTogaXNBY3RpdmVTdGFydERhdGUsXG4gIGFsbG93UGFydGlhbFJhbmdlOiBQcm9wVHlwZXMuYm9vbCxcbiAgY2FsZW5kYXJUeXBlOiBpc0NhbGVuZGFyVHlwZSxcbiAgY2xhc3NOYW1lOiBpc0NsYXNzTmFtZSxcbiAgZGVmYXVsdEFjdGl2ZVN0YXJ0RGF0ZTogaXNBY3RpdmVTdGFydERhdGUsXG4gIGRlZmF1bHRWYWx1ZTogaXNMb29zZVZhbHVlLFxuICBkZWZhdWx0VmlldzogaXNWaWV3LFxuICBmb3JtYXREYXk6IFByb3BUeXBlcy5mdW5jLFxuICBmb3JtYXRMb25nRGF0ZTogUHJvcFR5cGVzLmZ1bmMsXG4gIGZvcm1hdE1vbnRoOiBQcm9wVHlwZXMuZnVuYyxcbiAgZm9ybWF0TW9udGhZZWFyOiBQcm9wVHlwZXMuZnVuYyxcbiAgZm9ybWF0U2hvcnRXZWVrZGF5OiBQcm9wVHlwZXMuZnVuYyxcbiAgZm9ybWF0V2Vla2RheTogUHJvcFR5cGVzLmZ1bmMsXG4gIGZvcm1hdFllYXI6IFByb3BUeXBlcy5mdW5jLFxuICBnb1RvUmFuZ2VTdGFydE9uU2VsZWN0OiBQcm9wVHlwZXMuYm9vbCxcbiAgaW5wdXRSZWY6IGlzUmVmLFxuICBsb2NhbGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG1heERhdGU6IGlzTWF4RGF0ZSxcbiAgbWF4RGV0YWlsOiBQcm9wVHlwZXMub25lT2YoYWxsVmlld3MpLFxuICBtaW5EYXRlOiBpc01pbkRhdGUsXG4gIG1pbkRldGFpbDogUHJvcFR5cGVzLm9uZU9mKGFsbFZpZXdzKSxcbiAgbmF2aWdhdGlvbkFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgbmF2aWdhdGlvbkFyaWFMaXZlOiBQcm9wVHlwZXMub25lT2YoWydvZmYnLCAncG9saXRlJywgJ2Fzc2VydGl2ZSddKSxcbiAgbmF2aWdhdGlvbkxhYmVsOiBQcm9wVHlwZXMuZnVuYyxcbiAgbmV4dDJBcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG5leHQyTGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuICBuZXh0QXJpYUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBuZXh0TGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuICBvbkFjdGl2ZVN0YXJ0RGF0ZUNoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25DbGlja0RheTogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2xpY2tEZWNhZGU6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNsaWNrTW9udGg6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNsaWNrV2Vla051bWJlcjogUHJvcFR5cGVzLmZ1bmMsXG4gIG9uQ2xpY2tZZWFyOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25EcmlsbERvd246IFByb3BUeXBlcy5mdW5jLFxuICBvbkRyaWxsVXA6IFByb3BUeXBlcy5mdW5jLFxuICBvblZpZXdDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICBwcmV2MkFyaWFMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgcHJldjJMYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIHByZXZBcmlhTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gIHByZXZMYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIHJldHVyblZhbHVlOiBQcm9wVHlwZXMub25lT2YoWydzdGFydCcsICdlbmQnLCAncmFuZ2UnXSksXG4gIHNlbGVjdFJhbmdlOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2hvd0RvdWJsZVZpZXc6IFByb3BUeXBlcy5ib29sLFxuICBzaG93Rml4ZWROdW1iZXJPZldlZWtzOiBQcm9wVHlwZXMuYm9vbCxcbiAgc2hvd05hdmlnYXRpb246IFByb3BUeXBlcy5ib29sLFxuICBzaG93TmVpZ2hib3JpbmdNb250aDogUHJvcFR5cGVzLmJvb2wsXG4gIHNob3dXZWVrTnVtYmVyczogUHJvcFR5cGVzLmJvb2wsXG4gIHRpbGVDbGFzc05hbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBpc0NsYXNzTmFtZV0pLFxuICB0aWxlQ29udGVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5ub2RlXSksXG4gIHRpbGVEaXNhYmxlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIHZhbHVlOiBpc0xvb3NlVmFsdWUsXG4gIHZpZXc6IGlzVmlld1xufTsiXSwibmFtZXMiOlsidWlkIiwiSEFTSF9VTkRFRklORUQiLCJyZUlzSG9zdEN0b3IiLCJmcmVlR2xvYmFsIiwiZyIsIk9iamVjdCIsImZy
2ZWVTZWxmIiwic2VsZiIsInJvb3QiLCJGdW5jdGlvbiIsImFycmF5UHJvdG8iLCJBcnJheSIsInByb3RvdHlwZSIsImZ1bmNQcm90byIsIm9iamVjdFByb3RvIiwiY29yZUpzRGF0YSIsIm1hc2tTcmNLZXkiLCJleGVjIiwia2V5cyIsIklFX1BST1RPIiwiZnVuY1RvU3RyaW5nIiwidG9TdHJpbmciLCJoYXNPd25Qcm9wZXJ0eSIsIm9iamVjdFRvU3RyaW5nIiwicmVJc05hdGl2ZSIsIlJlZ0V4cCIsImNhbGwiLCJyZXBsYWNlIiwic3BsaWNlIiwiTWFwIiwiZ2V0TmF0aXZlIiwibmF0aXZlQ3JlYXRlIiwiSGFzaCIsImVudHJpZXMiLCJpbmRleCIsImxlbmd0aCIsInRoaXMiLCJjbGVhciIsImVudHJ5Iiwic2V0IiwiTGlzdENhY2hlIiwiTWFwQ2FjaGUiLCJhc3NvY0luZGV4T2YiLCJhcnJheSIsImtleSIsInZhbHVlIiwib3RoZXIiLCJnZXRNYXBEYXRhIiwibWFwIiwidHlwZSIsImRhdGEiLCJfX2RhdGFfXyIsIm9iamVjdCIsInVuZGVmaW5lZCIsImdldFZhbHVlIiwiaXNPYmplY3QiLCJwYXR0ZXJuIiwidGFnIiwiaXNGdW5jdGlvbiIsInJlc3VsdCIsImUiLCJpc0hvc3RPYmplY3QiLCJ0ZXN0IiwiZnVuYyIsInRvU291cmNlIiwiYmFzZUlzTmF0aXZlIiwibWVtb2l6ZSIsInJlc29sdmVyIiwiVHlwZUVycm9yIiwibWVtb2l6ZWQiLCJhcmdzIiwiYXJndW1lbnRzIiwiYXBwbHkiLCJjYWNoZSIsImhhcyIsImdldCIsIkNhY2hlIiwicG9wIiwicHVzaCIsIm1vZHVsZSIsImV4cG9ydHMiLCJtZXJnZUNsYXNzTmFtZXMiLCJzbGljZSIsInJlZHVjZSIsImNsYXNzTGlzdCIsImFyZyIsImNvbmNhdCIsImZpbHRlciIsImpvaW4iLCJvcHRpb25zIiwiSlNPTiIsInN0cmluZ2lmeSIsImdldFVzZXJMb2NhbGVzIiwiX3RlbXAiLCJhcnIiLCJfcmVmIiwiX3JlZiR1c2VGYWxsYmFja0xvY2FsIiwidXNlRmFsbGJhY2tMb2NhbGUiLCJfcmVmJGZhbGxiYWNrTG9jYWxlIiwiZmFsbGJhY2tMb2NhbGUiLCJsYW5ndWFnZUxpc3QiLCJ3aW5kb3ciLCJuYXZpZ2F0b3IiLCJsYW5ndWFnZXMiLCJsYW5ndWFnZSIsInVzZXJMYW5ndWFnZSIsImJyb3dzZXJMYW5ndWFnZSIsInN5c3RlbUxhbmd1YWdlIiwiZWwiLCJpbmRleE9mIiwidG9Mb3dlckNhc2UiLCJzcGxpdEVsIiwic3BsaXQiLCJ0b1VwcGVyQ2FzZSIsIm5vcm1hbGl6ZUxvY2FsZXMiLCJnZXRVc2VyTG9jYWxlIiwibWFrZUdldEVkZ2VPZk5laWdoYm9yIiwiZ2V0UGVyaW9kIiwiZ2V0RWRnZU9mUGVyaW9kIiwiZGVmYXVsdE9mZnNldCIsImRhdGUiLCJvZmZzZXQiLCJwcmV2aW91c1BlcmlvZCIsIm1ha2VHZXRFbmQiLCJnZXRCZWdpbk9mTmV4dFBlcmlvZCIsIkRhdGUiLCJnZXRUaW1lIiwibWFrZUdldFJhbmdlIiwiZnVuY3Rpb25zIiwiZm4iLCJnZXRZZWFyIiwiZ2V0RnVsbFllYXIiLCJ5ZWFyIiwicGFyc2VJbnQiLCJpc05hTiIsIkVycm9yIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiZ2V0Q2VudHVyeVN0YXJ0IiwiY2VudHVyeVN0YXJ0WWVhciIsImNlbnR1cnlTdGFydERhdGUiLCJzZXRGdWxsWWVhciIsInNldEhvdXJzIiwiZ2V0UHJldmlvdXNDZW50dXJ5U3RhcnQiLCJnZXROZXh0Q2VudHVyeVN0YXJ0IiwiZ2V0Q2VudHVyeUVuZCIsImdldFByZXZpb3VzQ2VudHVyeUVuZCIsImdldENlbnR1cnlSYW5nZSIsImdldERlY2FkZVN0YXJ0IiwiZGVjYWRlU3RhcnRZZWFyIiwiZGVjYWRlU3RhcnREYXRlIiwiZ2V0UHJldmlvdXNEZWNhZGVTdGFydCIsImdldE5leHREZWNhZGVTdGFydCIsImdldERlY2FkZUVuZCIsImdldFByZXZpb3VzRGVjYWRlRW5kIiwiZ2V0RGVjYWRlUmFuZ2UiLCJnZXRZZWFyU3RhcnQiLCJ5ZWFyU3RhcnREYXRlIiwiZ2V0UHJldmlvdXNZZWFyU3RhcnQiLCJnZXROZXh0WWVhclN0YXJ0IiwiZ2V0WWVhckVuZCIsImdldFByZXZpb3VzWWVhckVuZCIsImdldFllYXJSYW5nZSIsIm1ha2VHZXRFZGdlT2ZOZWlnaGJvck1vbnRoIiwibW9udGgiLCJnZXRNb250aFN0YXJ0IiwibW9udGhTdGFydERhdGUiLCJnZXRQcmV2aW91c01vbnRoU3RhcnQiLCJnZXROZXh0TW9udGhTdGFydCIsImdldE1vbnRoRW5kIiwiZ2V0UHJldmlvdXNNb250aEVuZCIsImdldE1vbnRoUmFuZ2UiLCJtYWtlR2V0RWRnZU9mTmVpZ2hib3JEYXkiLCJkYXkiLCJnZXREYXlTdGFydCIsImRheVN0YXJ0RGF0ZSIsIl9DQUxFTkRBUl9UWVBFX0xPQ0FMRSIsImdldERheUVuZCIsImdldERheVJhbmdlIiwiZ2V0RGF5c0luTW9udGgiLCJfYXJyYXlMaWtlVG9BcnJheSIsImxlbiIsImkiLCJhcnIyIiwiX2RlZmluZVByb3BlcnR5Iiwib2JqIiwiZGVmaW5lUHJvcGVydHkiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJDQUxFTkRBUl9UWVBFUyIsIkFSQUJJQyIsIkhFQlJFVyIsIklTT184NjAxIiwiVVMiLCJDQUxFTkRBUl9UWVBFX0xPQ0FMRVMiLCJXRUVLREFZUyIsImlzQXJyYXkiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJpdGVyIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJmcm9tIiwiX2l0ZXJhYmxlVG9BcnJheSIsIm8iLCJtaW5MZW4iLCJuIiwiY29uc3RydWN0b3IiLCJuYW1lIiwiX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5IiwiX25vbkl0ZXJhYmxlU3ByZWFkIiwiZm9ybWF0dGVyQ2FjaGUiLCJnZXRTYWZlRm9ybWF0dGVyIiwibG9jYWxlIiwibG9jYWxlV2l0aERlZmF1bHQiLCJmb3JtYXR0ZXJDYWNoZUxvY2FsZSIsIkludGwiLCJEYXRlVGltZUZvcm1hdCIsImZvcm1hdCIsImdldEZvcm1hdHRlciIsInNhZmVEYXRlIiwidG9TYWZlSG91ciIsIndlZWtkYXkiLCJTVU5EQVkiLCJGUklEQVkiLCJTQVRVUkRBWSIsImdldERheU9mV2VlayIsImNhbGVuZGFyVHlwZSIsImdldERheSIsImdldEJlZ2luT2ZXZWVrIiwibW9udGhJbmRleCIsImdldEJlZ2luIiwicmFuZ2VUeXBlIiwiZ2V0QmVnaW5OZXh0IiwiZ2V0RW5kIiwiZ2V0UmFuZ2UiLCJnZXRWYWx1ZVJhbmdlIiwiZGF0ZTEiLCJkYXRlMiIsInJhd05leHRWYWx1ZSIsInNvcnQiLCJhIiwiYiIsInRvWWVhckxhYmVsIiwiZm9ybWF0WWVhciIsImRhdGVzIiwiZ2V0RGVjYWRlTGFiZWwiLCJpc1dlZWtlbmQiLCJfdHlwZW9mIiwiY2FsZW5kYXJUeXBlcyIsInZhbHVlcyIsImFsbFZpZXdzIiwiaXNDYWxlbmRhclR5cGUiLCJpc0NsYXNzTmFtZSIsImlzTWluRGF0ZSIsInByb3BzIiwicHJvcE5hbWUiLCJjb21wb25lbnROYW1lIiwibWluRGF0ZSIsIm1heERhdGUiLCJpc01heERhdGUiLCJpc1JlZiIsIm
2N1cnJlbnQiLCJpc1ZhbHVlIiwiaXNWaWV3cyIsImlzVmlldyIsInZpZXciLCJhbGxvd2VkVmlld3MiLCJ2aWV3cyIsImlzUmVxdWlyZWQiLCJ0aWxlR3JvdXBQcm9wcyIsImFjdGl2ZVN0YXJ0RGF0ZSIsImhvdmVyIiwib25DbGljayIsIm9uTW91c2VPdmVyIiwidGlsZUNsYXNzTmFtZSIsInRpbGVDb250ZW50IiwidmFsdWVUeXBlIiwidGlsZVByb3BzIiwiY2xhc3NlcyIsInN0eWxlIiwidGlsZURpc2FibGVkIiwiY2xhc3NOYW1lIiwiTmF2aWdhdGlvbiIsImxhYmVsQ2xhc3NOYW1lIiwiZHJpbGxVcCIsIl9yZWYkZm9ybWF0TW9udGhZZWFyIiwiZm9ybWF0TW9udGhZZWFyIiwiX3JlZiRmb3JtYXRZZWFyIiwiX3JlZiRuYXZpZ2F0aW9uQXJpYUxhIiwibmF2aWdhdGlvbkFyaWFMYWJlbCIsIm5hdmlnYXRpb25BcmlhTGl2ZSIsIm5hdmlnYXRpb25MYWJlbCIsIl9yZWYkbmV4dDJBcmlhTGFiZWwiLCJuZXh0MkFyaWFMYWJlbCIsIl9yZWYkbmV4dDJMYWJlbCIsIm5leHQyTGFiZWwiLCJfcmVmJG5leHRBcmlhTGFiZWwiLCJuZXh0QXJpYUxhYmVsIiwiX3JlZiRuZXh0TGFiZWwiLCJuZXh0TGFiZWwiLCJfcmVmJHByZXYyQXJpYUxhYmVsIiwicHJldjJBcmlhTGFiZWwiLCJfcmVmJHByZXYyTGFiZWwiLCJwcmV2MkxhYmVsIiwiX3JlZiRwcmV2QXJpYUxhYmVsIiwicHJldkFyaWFMYWJlbCIsIl9yZWYkcHJldkxhYmVsIiwicHJldkxhYmVsIiwic2V0QWN0aXZlU3RhcnREYXRlIiwic2hvd0RvdWJsZVZpZXciLCJkcmlsbFVwQXZhaWxhYmxlIiwic2hvdWxkU2hvd1ByZXZOZXh0MkJ1dHRvbnMiLCJwcmV2aW91c0FjdGl2ZVN0YXJ0RGF0ZSIsImdldEJlZ2luUHJldmlvdXMiLCJwcmV2aW91c0FjdGl2ZVN0YXJ0RGF0ZTIiLCJnZXRCZWdpblByZXZpb3VzMiIsIm5leHRBY3RpdmVTdGFydERhdGUiLCJuZXh0QWN0aXZlU3RhcnREYXRlMiIsImdldEJlZ2luTmV4dDIiLCJwcmV2QnV0dG9uRGlzYWJsZWQiLCJwcmV2aW91c0FjdGl2ZUVuZERhdGUiLCJnZXRFbmRQcmV2aW91cyIsInByZXYyQnV0dG9uRGlzYWJsZWQiLCJnZXRFbmRQcmV2aW91czIiLCJuZXh0QnV0dG9uRGlzYWJsZWQiLCJuZXh0MkJ1dHRvbkRpc2FibGVkIiwicmVuZGVyTGFiZWwiLCJsYWJlbCIsImdldENlbnR1cnlMYWJlbCIsImRpc2FibGVkIiwiZmxleEdyb3ciLCJwcm9wVHlwZXMiLCJfZXhjbHVkZWQiLCJfZXh0ZW5kcyIsImFzc2lnbiIsImJpbmQiLCJ0YXJnZXQiLCJzb3VyY2UiLCJvd25LZXlzIiwiZW51bWVyYWJsZU9ubHkiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJzeW1ib2xzIiwic3ltIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX29iamVjdFNwcmVhZCIsImZvckVhY2giLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiZGVmaW5lUHJvcGVydGllcyIsInRvUGVyY2VudCIsIm51bSIsIkZsZXgiLCJjaGlsZHJlbiIsImRpcmVjdGlvbiIsImNvdW50Iiwid3JhcCIsIm90aGVyUHJvcHMiLCJleGNsdWRlZCIsInNvdXJjZUtleXMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsInNvdXJjZVN5bWJvbEtleXMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwiZmxleFdyYXAiLCJjaGlsZCIsImZsZXhCYXNpcyIsImZsZXhTaHJpbmsiLCJvdmVyZmxvdyIsIm1hcmdpbkxlZnQiLCJpc1ZhbHVlV2l0aGluUmFuZ2UiLCJyYW5nZSIsImlzUmFuZ2VXaXRoaW5SYW5nZSIsImdyZWF0ZXJSYW5nZSIsInNtYWxsZXJSYW5nZSIsImRvUmFuZ2VzT3ZlcmxhcCIsInJhbmdlMSIsInJhbmdlMiIsImdldFJhbmdlQ2xhc3NOYW1lcyIsInZhbHVlUmFuZ2UiLCJkYXRlUmFuZ2UiLCJiYXNlQ2xhc3NOYW1lIiwiaXNSYW5nZVN0YXJ0IiwiaXNSYW5nZUVuZCIsImdldFRpbGVDbGFzc2VzIiwiZGF0ZVR5cGUiLCJub3ciLCJ2YWx1ZVJhbmdlQ2xhc3NOYW1lcyIsInZhbHVlQXJyYXkiLCJob3ZlclJhbmdlIiwiaG92ZXJSYW5nZUNsYXNzTmFtZXMiLCJUaWxlR3JvdXAiLCJfcmVmJGNvdW50IiwiZGF0ZVRyYW5zZm9ybSIsImVuZCIsInN0YXJ0IiwiX3JlZiRzdGVwIiwic3RlcCIsIlRpbGUiLCJ0aWxlIiwidGlsZXMiLCJwb2ludCIsIl9jbGFzc0NhbGxDaGVjayIsImluc3RhbmNlIiwiQ29uc3RydWN0b3IiLCJfZGVmaW5lUHJvcGVydGllcyIsImRlc2NyaXB0b3IiLCJfc2V0UHJvdG90eXBlT2YiLCJwIiwic2V0UHJvdG90eXBlT2YiLCJfX3Byb3RvX18iLCJfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJSZWZlcmVuY2VFcnJvciIsIl9nZXRQcm90b3R5cGVPZiIsImdldFByb3RvdHlwZU9mIiwiZGF0ZXNBcmVEaWZmZXJlbnQiLCJuZXh0UHJvcHMiLCJwcm9wIiwiX0NvbXBvbmVudCIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsImNyZWF0ZSIsIl9pbmhlcml0cyIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsIkRlcml2ZWQiLCJoYXNOYXRpdmVSZWZsZWN0Q29uc3RydWN0IiwiX3N1cGVyIiwiUmVmbGVjdCIsIm
2NvbnN0cnVjdCIsInNoYW0iLCJQcm94eSIsIkJvb2xlYW4iLCJ2YWx1ZU9mIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlN1cGVyIiwiTmV3VGFyZ2V0IiwiX3RoaXMiLCJfbGVuIiwiX2tleSIsInByZXZTdGF0ZSIsIm5leHRTdGF0ZSIsInRpbGVDbGFzc05hbWVQcm9wcyIsImFjdGl2ZVN0YXJ0RGF0ZVByb3BzIiwidGlsZUNvbnRlbnRQcm9wcyIsIl90aGlzJHByb3BzIiwiZm9ybWF0QWJiciIsIm1heERhdGVUcmFuc2Zvcm0iLCJtaW5EYXRlVHJhbnNmb3JtIiwiX3RoaXMkc3RhdGUiLCJzdGF0ZSIsImV2ZW50Iiwib25Gb2N1cyIsIkNvbXBvbmVudCIsIkRlY2FkZSIsIkRlY2FkZXMiLCJDZW50dXJ5VmlldyIsIlllYXIiLCJZZWFycyIsIkRlY2FkZVZpZXciLCJNb250aCIsIl9yZWYkZm9ybWF0TW9udGgiLCJmb3JtYXRNb250aCIsIk1vbnRocyIsIlllYXJWaWV3IiwiRGF5IiwiX3JlZiRmb3JtYXREYXkiLCJmb3JtYXREYXkiLCJfcmVmJGZvcm1hdExvbmdEYXRlIiwiZm9ybWF0TG9uZ0RhdGUiLCJjdXJyZW50TW9udGhJbmRleCIsIkRheXMiLCJzaG93Rml4ZWROdW1iZXJPZldlZWtzIiwic2hvd05laWdoYm9yaW5nTW9udGgiLCJoYXNGaXhlZE51bWJlck9mV2Vla3MiLCJkYXlPZldlZWsiLCJkYXlzSW5Nb250aCIsImFjdGl2ZUVuZERhdGUiLCJ3ZWVrZGF5Q2xhc3NOYW1lIiwiV2Vla2RheXMiLCJfcHJvcHMkZm9ybWF0U2hvcnRXZWUiLCJmb3JtYXRTaG9ydFdlZWtkYXkiLCJfcHJvcHMkZm9ybWF0V2Vla2RheSIsImZvcm1hdFdlZWtkYXkiLCJvbk1vdXNlTGVhdmUiLCJiZWdpbk9mTW9udGgiLCJ3ZWVrZGF5cyIsIndlZWtkYXlEYXRlIiwiYWJiciIsInRpdGxlIiwiV2Vla051bWJlciIsIm9uQ2xpY2tXZWVrTnVtYmVyIiwid2Vla051bWJlciIsIldlZWtOdW1iZXJzIiwibnVtYmVyT2ZXZWVrcyIsImRheXMiLCJNYXRoIiwiY2VpbCIsIndlZWtOdW1iZXJzIiwiYmVnaW5PZkZpcnN0V2VlayIsImNhbGVuZGFyVHlwZUZvcldlZWtOdW1iZXIiLCJiZWdpbk9mV2VlayIsInJvdW5kIiwiZ2V0V2Vla051bWJlciIsIndlZWtJbmRleCIsIk1vbnRoVmlldyIsIl9wcm9wcyRjYWxlbmRhclR5cGUiLCJmaW5kIiwiaW5jbHVkZXMiLCJnZXRDYWxlbmRhclR5cGVGcm9tTG9jYWxlIiwic2hvd1dlZWtOdW1iZXJzIiwiY2hpbGRQcm9wcyIsImFsaWduSXRlbXMiLCJ3aWR0aCIsImRlZmF1bHRNaW5EYXRlIiwiZGVmYXVsdE1heERhdGUiLCJhbGxWYWx1ZVR5cGVzIiwiZ2V0TGltaXRlZFZpZXdzIiwibWluRGV0YWlsIiwibWF4RGV0YWlsIiwiZ2V0VmlldyIsImlzVmlld0FsbG93ZWQiLCJnZXRWYWx1ZVR5cGUiLCJnZXREZXRhaWxWYWx1ZSIsInZhbHVlUGllY2UiLCJyYXdWYWx1ZSIsInZhbHVlRGF0ZSIsInRvRGF0ZSIsIm1pbiIsIm1heCIsImJldHdlZW4iLCJnZXREZXRhaWxWYWx1ZUZyb20iLCJnZXREZXRhaWxWYWx1ZVRvIiwiZ2V0RGV0YWlsVmFsdWVBcnJheSIsImdldEFjdGl2ZVN0YXJ0RGF0ZSIsImdldElzU2luZ2xlVmFsdWUiLCJDYWxlbmRhciIsIl9hcmdzIiwiZGVmYXVsdEFjdGl2ZVN0YXJ0RGF0ZSIsImRlZmF1bHRWYWx1ZSIsImRlZmF1bHRWaWV3IiwiY2FsbGJhY2siLCJfYXNzZXJ0VGhpc0luaXRpYWxpemUiLCJwcmV2aW91c1ZpZXciLCJhbGxvd1BhcnRpYWxSYW5nZSIsIm9uQWN0aXZlU3RhcnREYXRlQ2hhbmdlIiwib25DaGFuZ2UiLCJvblZpZXdDaGFuZ2UiLCJzZWxlY3RSYW5nZSIsInByZXZBcmdzIiwic2V0U3RhdGUiLCJhY3Rpb24iLCJzaG91bGRVcGRhdGUiLCJzZXRTdGF0ZUFuZENhbGxDYWxsYmFja3MiLCJkcmlsbERvd25BdmFpbGFibGUiLCJvbkNsaWNrVGlsZSIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZTIiLCJvbkRyaWxsRG93biIsIm5leHRWaWV3IiwiX2Fzc2VydFRoaXNJbml0aWFsaXplMyIsIm9uRHJpbGxVcCIsInByZXZpb3VzVmFsdWUiLCJfdGhpcyRwcm9wczIiLCJnb1RvUmFuZ2VTdGFydE9uU2VsZWN0IiwibmV4dFZhbHVlIiwiaXNGaXJzdFZhbHVlSW5SYW5nZSIsImdldFByb2Nlc3NlZFZhbHVlIiwicGVyc2lzdCIsIl90aGlzJHByb3BzMyIsIm9uQ2xpY2tEYXkiLCJvbkNsaWNrRGVjYWRlIiwib25DbGlja01vbnRoIiwib25DbGlja1llYXIiLCJ2YWx1ZUZyb20iLCJhY3RpdmVTdGFydERhdGVTdGF0ZSIsIl90aGlzJHByb3BzNCIsInZhbHVlUHJvcHMiLCJ2YWx1ZVN0YXRlIiwiX3RoaXMkcHJvcHM1Iiwidmlld1Byb3BzIiwidmlld1N0YXRlIiwiX3RoaXMkcHJvcHM2IiwiX3RoaXMkcHJvcHM3IiwicmV0dXJuVmFsdWUiLCJwcm9jZXNzRnVuY3Rpb24iLCJuZXh0IiwiY3VycmVudEFjdGl2ZVN0YXJ0RGF0ZSIsIl90aGlzJHByb3BzOCIsImNvbW1vblByb3BzIiwiZHJpbGxEb3duIiwiX2Zvcm1hdFllYXIiLCJfdGhpcyRwcm9wczkiLCJfdGhpcyRwcm9wczEwIiwic2hvd05hdmlnYXRpb24iLCJfdGhpcyRwcm9wczExIiwiX3RoaXMkcHJvcHMxMiIsImlucHV0UmVmIiwicmVmIiwicmVuZGVyTmF2aWdhdGlvbiIsIm9uQmx1ciIsInJlbmRlckNvbnRlbnQiLCJkZWZhdWx0UHJvcHMiLCJpc0FjdGl2ZVN0YXJ0RGF0ZSIsImlzTG9vc2VWYWx1ZSJdLCJzb3VyY2VSb290IjoiIn0=
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.