@touchtech/web-navigation-menu 0.0.14-alpha.1 → 0.0.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants/index.d.ts +0 -1
- package/dist/index.js +2 -2
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
(()=>{"use strict";var t={n:e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return t.d(n,{a:n}),n},d:(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{APPLICATIONS_TIER_WIDTH:()=>$a,AppPaths:()=>qa,Navigation:()=>ou,NavigationButton:()=>au,TENANTS_TIER_WIDTH:()=>Ka});var n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},n(t,e)};function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}var o=function(){return o=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},o.apply(this,arguments)};function i(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(t);o<r.length;o++)e.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(t,r[o])&&(n[r[o]]=t[r[o]])}return n}function a(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function s(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,s)}u((r=r.apply(t,e||[])).next())}))}function s(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,o,i=n.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){o={error:t}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}function u(t,e,n){if(n||2===arguments.length)for(var r,o=0,i=e.length;o<i;o++)!r&&o in e||(r||(r=Array.prototype.slice.call(e,0,o)),r[o]=e[o]);return t.concat(r||Array.prototype.slice.call(e))}Object.create,Object.create;const l=require("react");var c=t.n(l),d=("undefined"==typeof process||process.env,"production");const f=1/60*1e3,p="undefined"!=typeof performance?()=>performance.now():()=>Date.now(),v="undefined"!=typeof window?t=>window.requestAnimationFrame(t):t=>setTimeout((()=>t(p())),f);let h=!0,m=!1,g=!1;const y={delta:0,timestamp:0},E=["read","update","preRender","render","postRender"],x=E.reduce(((t,e)=>(t[e]=function(t){let e=[],n=[],r=0,o=!1,i=!1;const a=new WeakSet,s={schedule:(t,i=!1,s=!1)=>{const u=s&&o,l=u?e:n;return i&&a.add(t),-1===l.indexOf(t)&&(l.push(t),u&&o&&(r=e.length)),t},cancel:t=>{const e=n.indexOf(t);-1!==e&&n.splice(e,1),a.delete(t)},process:u=>{if(o)i=!0;else{if(o=!0,[e,n]=[n,e],n.length=0,r=e.length,r)for(let n=0;n<r;n++){const r=e[n];r(u),a.has(r)&&(s.schedule(r),t())}o=!1,i&&(i=!1,s.process(u))}}};return s}((()=>m=!0)),t)),{}),b=E.reduce(((t,e)=>{const n=x[e];return t[e]=(t,e=!1,r=!1)=>(m||P(),n.schedule(t,e,r)),t}),{}),w=E.reduce(((t,e)=>(t[e]=x[e].cancel,t)),{}),T=E.reduce(((t,e)=>(t[e]=()=>x[e].process(y),t)),{}),S=t=>x[t].process(y),A=t=>{m=!1,y.delta=h?f:Math.max(Math.min(t-y.timestamp,40),1),y.timestamp=t,g=!0,E.forEach(S),g=!1,m&&(h=!1,v(A))},P=()=>{m=!0,h=!0,g||v(A)},C=()=>y,M=b;var V="undefined"!=typeof document,R=V?l.useLayoutEffect:l.useEffect;function O(){var t=(0,l.useRef)(!1);return R((function(){return t.current=!0,function(){t.current=!1}}),[]),t}var D=(0,l.createContext)(null);function L(t){var e=(0,l.useRef)(null);return null===e.current&&(e.current=t()),e.current}var k=0,N=function(){return k++},I=function(){return L(N)},j=function(t){var e=t.children,n=t.initial,r=t.isPresent,o=t.onExitComplete,i=t.custom,a=t.presenceAffectsLayout,s=L(U),u=I(),c=(0,l.useMemo)((function(){return{id:u,initial:n,isPresent:r,custom:i,onExitComplete:function(t){var e,n;s.set(t,!0);try{for(var r=function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],r=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}(s.values()),i=r.next();!i.done;i=r.next())if(!i.value)return}catch(t){e={error:t}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(e)throw e.error}}null==o||o()},register:function(t){return s.set(t,!1),function(){return s.delete(t)}}}}),a?void 0:[r]);return(0,l.useMemo)((function(){s.forEach((function(t,e){return s.set(e,!1)}))}),[r]),l.useEffect((function(){!r&&!s.size&&(null==o||o())}),[r]),l.createElement(D.Provider,{value:c},e)};function U(){return new Map}var B=(0,l.createContext)({});function F(t){return(0,l.useEffect)((function(){return function(){return t()}}),[])}var _=function(t){return t.key||""},H=function(t){var e=t.children,n=t.custom,r=t.initial,o=void 0===r||r,i=t.onExitComplete,a=t.exitBeforeEnter,c=t.presenceAffectsLayout,f=void 0===c||c,p=s(function(){var t=O(),e=s((0,l.useState)(0),2),n=e[0],r=e[1],o=(0,l.useCallback)((function(){t.current&&r(n+1)}),[n]);return[(0,l.useCallback)((function(){return M.postRender(o)}),[o]),n]}(),1),v=p[0],h=(0,l.useContext)(B).forceRender;h&&(v=h);var m=O(),g=function(t){var e=[];return l.Children.forEach(t,(function(t){(0,l.isValidElement)(t)&&e.push(t)})),e}(e),y=g,E=new Set,x=(0,l.useRef)(y),b=(0,l.useRef)(new Map).current,w=(0,l.useRef)(!0);if(R((function(){w.current=!1,function(t,e){t.forEach((function(t){var n=_(t);e.set(n,t)}))}(g,b),x.current=y})),F((function(){w.current=!0,b.clear(),E.clear()})),w.current)return l.createElement(l.Fragment,null,y.map((function(t){return l.createElement(j,{key:_(t),isPresent:!0,initial:!!o&&void 0,presenceAffectsLayout:f},t)})));y=u([],s(y),!1);for(var T=x.current.map(_),S=g.map(_),A=T.length,P=0;P<A;P++){var C=T[P];-1===S.indexOf(C)&&E.add(C)}return a&&E.size&&(y=[]),E.forEach((function(t){if(-1===S.indexOf(t)){var e=b.get(t);if(e){var r=T.indexOf(t);y.splice(r,0,l.createElement(j,{key:_(e),isPresent:!1,onExitComplete:function(){b.delete(t),E.delete(t);var e=x.current.findIndex((function(e){return e.key===t}));if(x.current.splice(e,1),!E.size){if(x.current=g,!1===m.current)return;v(),i&&i()}},custom:n,presenceAffectsLayout:f},e))}}})),y=y.map((function(t){var e=t.key;return E.has(e)?t:l.createElement(j,{key:_(t),isPresent:!0,presenceAffectsLayout:f},t)})),"production"!==d&&a&&y.length>1&&console.warn("You're attempting to animate multiple children within AnimatePresence, but its exitBeforeEnter prop is set to true. This will lead to odd visual behaviour."),l.createElement(l.Fragment,null,E.size?y:y.map((function(t){return(0,l.cloneElement)(t)})))},z=function(t){return{isEnabled:function(e){return t.some((function(t){return!!e[t]}))}}},W={measureLayout:z(["layout","layoutId","drag"]),animation:z(["animate","exit","variants","whileHover","whileTap","whileFocus","whileDrag","whileInView"]),exit:z(["exit"]),drag:z(["drag","dragControls"]),focus:z(["whileFocus"]),hover:z(["whileHover","onHoverStart","onHoverEnd"]),tap:z(["whileTap","onTap","onTapStart","onTapCancel"]),pan:z(["onPan","onPanStart","onPanSessionStart","onPanEnd"]),inView:z(["whileInView","onViewportEnter","onViewportLeave"])},G=function(){},X=function(){},Y=(0,l.createContext)({strict:!1}),Z=Object.keys(W),q=Z.length,K=(0,l.createContext)({transformPagePoint:function(t){return t},isStatic:!1,reducedMotion:"never"}),$=(0,l.createContext)({}),Q={current:null},J=!1;function tt(t,e,n,r){var o,i,a=(0,l.useContext)(Y),u=(0,l.useContext)($).visualElement,c=(0,l.useContext)(D),d=(!J&&function(){if(J=!0,V)if(window.matchMedia){var t=window.matchMedia("(prefers-reduced-motion)"),e=function(){return Q.current=t.matches};t.addListener(e),e()}else Q.current=!1}(),o=s((0,l.useState)(Q.current),1)[0],"never"!==(i=(0,l.useContext)(K).reducedMotion)&&("always"===i||o)),f=(0,l.useRef)(void 0);r||(r=a.renderer),!f.current&&r&&(f.current=r(t,{visualState:e,parent:u,props:n,presenceId:null==c?void 0:c.id,blockInitialAnimation:!1===(null==c?void 0:c.initial),shouldReduceMotion:d}));var p=f.current;return R((function(){null==p||p.syncRender()})),(0,l.useEffect)((function(){var t;null===(t=null==p?void 0:p.animationState)||void 0===t||t.animateChanges()})),R((function(){return function(){return null==p?void 0:p.notifyUnmount()}}),[]),p}function et(t){return"object"==typeof t&&Object.prototype.hasOwnProperty.call(t,"current")}function nt(t){return Array.isArray(t)}function rt(t){return"string"==typeof t||nt(t)}function ot(t,e,n,r,o){var i;return void 0===r&&(r={}),void 0===o&&(o={}),"function"==typeof e&&(e=e(null!=n?n:t.custom,r,o)),"string"==typeof e&&(e=null===(i=t.variants)||void 0===i?void 0:i[e]),"function"==typeof e&&(e=e(null!=n?n:t.custom,r,o)),e}function it(t,e,n){var r=t.getProps();return ot(r,e,null!=n?n:r.custom,function(t){var e={};return t.forEachValue((function(t,n){return e[n]=t.get()})),e}(t),function(t){var e={};return t.forEachValue((function(t,n){return e[n]=t.getVelocity()})),e}(t))}function at(t){var e;return"function"==typeof(null===(e=t.animate)||void 0===e?void 0:e.start)||rt(t.initial)||rt(t.animate)||rt(t.whileHover)||rt(t.whileDrag)||rt(t.whileTap)||rt(t.whileFocus)||rt(t.exit)}function st(t){return Boolean(at(t)||t.variants)}function ut(t){return Array.isArray(t)?t.join(" "):t}var lt={hasAnimatedSinceResize:!0,hasEverUpdated:!1},ct=1,dt=(0,l.createContext)({}),ft=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.getSnapshotBeforeUpdate=function(){return this.updateProps(),null},e.prototype.componentDidUpdate=function(){},e.prototype.updateProps=function(){var t=this.props,e=t.visualElement,n=t.props;e&&e.setProps(n)},e.prototype.render=function(){return this.props.children},e}(l.Component);function pt(t){var e=t.preloadedFeatures,n=t.createVisualElement,r=t.projectionNodeConstructor,i=t.useRender,a=t.useVisualState,s=t.Component;return e&&function(t){for(var e in t)null!==t[e]&&("projectionNodeConstructor"===e?W.projectionNodeConstructor=t[e]:W[e].Component=t[e])}(e),(0,l.forwardRef)((function(t,u){var c=function(t){var e,n=t.layoutId,r=null===(e=(0,l.useContext)(B))||void 0===e?void 0:e.id;return r&&void 0!==n?r+"-"+n:n}(t);t=o(o({},t),{layoutId:c});var f=(0,l.useContext)(K),p=null,v=function(t){var e=function(t,e){if(at(t)){var n=t.initial,r=t.animate;return{initial:!1===n||rt(n)?n:void 0,animate:rt(r)?r:void 0}}return!1!==t.inherit?e:{}}(t,(0,l.useContext)($)),n=e.initial,r=e.animate;return(0,l.useMemo)((function(){return{initial:n,animate:r}}),[ut(n),ut(r)])}(t),h=f.isStatic?void 0:L((function(){if(lt.hasEverUpdated)return ct++})),m=a(t,f.isStatic);return!f.isStatic&&V&&(v.visualElement=tt(s,m,o(o({},f),t),n),function(t,e,n,r){var o,i=e.layoutId,a=e.layout,s=e.drag,u=e.dragConstraints,c=e.layoutScroll,d=(0,l.useContext)(dt);r&&n&&!(null==n?void 0:n.projection)&&(n.projection=new r(t,n.getLatestValues(),null===(o=n.parent)||void 0===o?void 0:o.projection),n.projection.setOptions({layoutId:i,layout:a,alwaysMeasureLayout:Boolean(s)||u&&et(u),visualElement:n,scheduleRender:function(){return n.scheduleRender()},animationType:"string"==typeof a?a:"both",initialPromotionConfig:d,layoutScroll:c}))}(h,t,v.visualElement,r||W.projectionNodeConstructor),p=function(t,e,n){var r=[],i=(0,l.useContext)(Y);if(!e)return null;"production"!==d&&n&&i.strict&&X(!1,"You have rendered a `motion` component within a `LazyMotion` component. This will break tree shaking. Import and render a `m` component instead.");for(var a=0;a<q;a++){var s=Z[a],u=W[s],c=u.isEnabled,f=u.Component;c(t)&&f&&r.push(l.createElement(f,o({key:s},t,{visualElement:e})))}return r}(t,v.visualElement,e)),l.createElement(ft,{visualElement:v.visualElement,props:o(o({},f),t)},p,l.createElement($.Provider,{value:v},i(s,t,h,function(t,e,n){return(0,l.useCallback)((function(r){var o;r&&(null===(o=t.mount)||void 0===o||o.call(t,r)),e&&(r?e.mount(r):e.unmount()),n&&("function"==typeof n?n(r):et(n)&&(n.current=r))}),[e])}(m,v.visualElement,u),m,f.isStatic,v.visualElement)))}))}function vt(t){function e(e,n){return void 0===n&&(n={}),pt(t(e,n))}if("undefined"==typeof Proxy)return e;var n=new Map;return new Proxy(e,{get:function(t,r){return n.has(r)||n.set(r,e(r)),n.get(r)}})}var ht=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","svg","switch","symbol","text","tspan","use","view"];function mt(t){return"string"==typeof t&&!t.includes("-")&&!!(ht.indexOf(t)>-1||/[A-Z]/.test(t))}var gt={},yt=["","X","Y","Z"],Et=["transformPerspective","x","y","z"];function xt(t,e){return Et.indexOf(t)-Et.indexOf(e)}["translate","scale","rotate","skew"].forEach((function(t){return yt.forEach((function(e){return Et.push(t+e)}))}));var bt=new Set(Et);function wt(t){return bt.has(t)}var Tt=new Set(["originX","originY","originZ"]);function St(t){return Tt.has(t)}function At(t,e){var n=e.layout,r=e.layoutId;return wt(t)||St(t)||(n||void 0!==r)&&(!!gt[t]||"opacity"===t)}var Pt=function(t){return Boolean(null!==t&&"object"==typeof t&&t.getVelocity)},Ct={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"};function Mt(t){return t.startsWith("--")}var Vt=function(t,e){return e&&"number"==typeof t?e.transform(t):t};const Rt=(t,e)=>n=>Math.max(Math.min(n,e),t),Ot=t=>t%1?Number(t.toFixed(5)):t,Dt=/(-)?([\d]*\.?[\d])+/g,Lt=/(#[0-9a-f]{6}|#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))/gi,kt=/^(#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))$/i;function Nt(t){return"string"==typeof t}const It=t=>({test:e=>Nt(e)&&e.endsWith(t)&&1===e.split(" ").length,parse:parseFloat,transform:e=>`${e}${t}`}),jt=It("deg"),Ut=It("%"),Bt=It("px"),Ft=It("vh"),_t=It("vw"),Ht=Object.assign(Object.assign({},Ut),{parse:t=>Ut.parse(t)/100,transform:t=>Ut.transform(100*t)}),zt={test:t=>"number"==typeof t,parse:parseFloat,transform:t=>t},Wt=Object.assign(Object.assign({},zt),{transform:Rt(0,1)}),Gt=Object.assign(Object.assign({},zt),{default:1});var Xt=o(o({},zt),{transform:Math.round}),Yt={borderWidth:Bt,borderTopWidth:Bt,borderRightWidth:Bt,borderBottomWidth:Bt,borderLeftWidth:Bt,borderRadius:Bt,radius:Bt,borderTopLeftRadius:Bt,borderTopRightRadius:Bt,borderBottomRightRadius:Bt,borderBottomLeftRadius:Bt,width:Bt,maxWidth:Bt,height:Bt,maxHeight:Bt,size:Bt,top:Bt,right:Bt,bottom:Bt,left:Bt,padding:Bt,paddingTop:Bt,paddingRight:Bt,paddingBottom:Bt,paddingLeft:Bt,margin:Bt,marginTop:Bt,marginRight:Bt,marginBottom:Bt,marginLeft:Bt,rotate:jt,rotateX:jt,rotateY:jt,rotateZ:jt,scale:Gt,scaleX:Gt,scaleY:Gt,scaleZ:Gt,skew:jt,skewX:jt,skewY:jt,distance:Bt,translateX:Bt,translateY:Bt,translateZ:Bt,x:Bt,y:Bt,z:Bt,perspective:Bt,transformPerspective:Bt,opacity:Wt,originX:Ht,originY:Ht,originZ:Bt,zIndex:Xt,fillOpacity:Wt,strokeOpacity:Wt,numOctaves:Xt};function Zt(t,e,n,r){var o,i=t.style,a=t.vars,s=t.transform,u=t.transformKeys,l=t.transformOrigin;u.length=0;var c=!1,d=!1,f=!0;for(var p in e){var v=e[p];if(Mt(p))a[p]=v;else{var h=Yt[p],m=Vt(v,h);if(wt(p)){if(c=!0,s[p]=m,u.push(p),!f)continue;v!==(null!==(o=h.default)&&void 0!==o?o:0)&&(f=!1)}else St(p)?(l[p]=m,d=!0):i[p]=m}}c?i.transform=function(t,e,n,r){var o=t.transform,i=t.transformKeys,a=e.enableHardwareAcceleration,s=void 0===a||a,u=e.allowTransformNone,l=void 0===u||u,c="";i.sort(xt);for(var d=!1,f=i.length,p=0;p<f;p++){var v=i[p];c+="".concat(Ct[v]||v,"(").concat(o[v],") "),"z"===v&&(d=!0)}return!d&&s?c+="translateZ(0)":c=c.trim(),r?c=r(o,n?"":c):l&&n&&(c="none"),c}(t,n,f,r):r?i.transform=r({},""):!e.transform&&i.transform&&(i.transform="none"),d&&(i.transformOrigin=function(t){var e=t.originX,n=void 0===e?"50%":e,r=t.originY,o=void 0===r?"50%":r,i=t.originZ,a=void 0===i?0:i;return"".concat(n," ").concat(o," ").concat(a)}(l))}var qt=function(){return{style:{},transform:{},transformKeys:[],transformOrigin:{},vars:{}}};function Kt(t,e,n){for(var r in e)Pt(e[r])||At(r,n)||(t[r]=e[r])}function $t(t,e,n){var r={},i=function(t,e,n){var r={};return Kt(r,t.style||{},t),Object.assign(r,function(t,e,n){var r=t.transformTemplate;return(0,l.useMemo)((function(){var t=qt();Zt(t,e,{enableHardwareAcceleration:!n},r);var i=t.vars,a=t.style;return o(o({},i),a)}),[e])}(t,e,n)),t.transformValues&&(r=t.transformValues(r)),r}(t,e,n);return Boolean(t.drag)&&!1!==t.dragListener&&(r.draggable=!1,i.userSelect=i.WebkitUserSelect=i.WebkitTouchCallout="none",i.touchAction=!0===t.drag?"none":"pan-".concat("x"===t.drag?"y":"x")),r.style=i,r}var Qt=new Set(["initial","animate","exit","style","variants","transition","transformTemplate","transformValues","custom","inherit","layout","layoutId","layoutDependency","onLayoutAnimationStart","onLayoutAnimationComplete","onLayoutMeasure","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","drag","dragControls","dragListener","dragConstraints","dragDirectionLock","dragSnapToOrigin","_dragX","_dragY","dragElastic","dragMomentum","dragPropagation","dragTransition","whileDrag","onPan","onPanStart","onPanEnd","onPanSessionStart","onTap","onTapStart","onTapCancel","onHoverStart","onHoverEnd","whileFocus","whileTap","whileHover","whileInView","onViewportEnter","onViewportLeave","viewport","layoutScroll"]);function Jt(t){return Qt.has(t)}var te,ee=function(t){return!Jt(t)};try{(te=require("@emotion/is-prop-valid").default)&&(ee=function(t){return t.startsWith("on")?!Jt(t):te(t)})}catch(t){}function ne(t,e,n){return"string"==typeof t?t:Bt.transform(e+n*t)}var re={offset:"stroke-dashoffset",array:"stroke-dasharray"},oe={offset:"strokeDashoffset",array:"strokeDasharray"};function ie(t,e,n,r){var o=e.attrX,a=e.attrY,s=e.originX,u=e.originY,l=e.pathLength,c=e.pathSpacing,d=void 0===c?1:c,f=e.pathOffset,p=void 0===f?0:f;Zt(t,i(e,["attrX","attrY","originX","originY","pathLength","pathSpacing","pathOffset"]),n,r),t.attrs=t.style,t.style={};var v=t.attrs,h=t.style,m=t.dimensions;v.transform&&(m&&(h.transform=v.transform),delete v.transform),m&&(void 0!==s||void 0!==u||h.transform)&&(h.transformOrigin=function(t,e,n){var r=ne(e,t.x,t.width),o=ne(n,t.y,t.height);return"".concat(r," ").concat(o)}(m,void 0!==s?s:.5,void 0!==u?u:.5)),void 0!==o&&(v.x=o),void 0!==a&&(v.y=a),void 0!==l&&function(t,e,n,r,o){void 0===n&&(n=1),void 0===r&&(r=0),void 0===o&&(o=!0),t.pathLength=1;var i=o?re:oe;t[i.offset]=Bt.transform(-r);var a=Bt.transform(e),s=Bt.transform(n);t[i.array]="".concat(a," ").concat(s)}(v,l,d,p,!1)}var ae=function(){return o(o({},qt()),{attrs:{}})};function se(t,e){var n=(0,l.useMemo)((function(){var n=ae();return ie(n,e,{enableHardwareAcceleration:!1},t.transformTemplate),o(o({},n.attrs),{style:o({},n.style)})}),[e]);if(t.style){var r={};Kt(r,t.style,t),n.style=o(o({},r),n.style)}return n}function ue(t){return void 0===t&&(t=!1),function(e,n,r,i,a,s){var u=a.latestValues,c=(mt(e)?se:$t)(n,u,s),d=function(t,e,n){var r={};for(var o in t)(ee(o)||!0===n&&Jt(o)||!e&&!Jt(o)||t.draggable&&o.startsWith("onDrag"))&&(r[o]=t[o]);return r}(n,"string"==typeof e,t),f=o(o(o({},d),c),{ref:i});return r&&(f["data-projection-id"]=r),(0,l.createElement)(e,f)}}var le=/([a-z])([A-Z])/g,ce=function(t){return t.replace(le,"$1-$2").toLowerCase()};function de(t,e,n,r){var o=e.style,i=e.vars;for(var a in Object.assign(t.style,o,r&&r.getProjectionStyles(n)),i)t.style.setProperty(a,i[a])}var fe=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength"]);function pe(t,e,n,r){for(var o in de(t,e,void 0,r),e.attrs)t.setAttribute(fe.has(o)?o:ce(o),e.attrs[o])}function ve(t){var e=t.style,n={};for(var r in e)(Pt(e[r])||At(r,t))&&(n[r]=e[r]);return n}function he(t){var e=ve(t);for(var n in t)Pt(t[n])&&(e["x"===n||"y"===n?"attr"+n.toUpperCase():n]=t[n]);return e}function me(t){return"object"==typeof t&&"function"==typeof t.start}var ge=function(t){return Array.isArray(t)},ye=function(t){return Boolean(t&&"object"==typeof t&&t.mix&&t.toValue)},Ee=function(t){return ge(t)?t[t.length-1]||0:t};function xe(t){var e=Pt(t)?t.get():t;return ye(e)?e.toValue():e}function be(t,e,n,r){var o=t.scrapeMotionValuesFromProps,i=t.createRenderState,a=t.onMount,s={latestValues:Te(e,n,r,o),renderState:i()};return a&&(s.mount=function(t){return a(e,t,s)}),s}var we=function(t){return function(e,n){var r=(0,l.useContext)($),o=(0,l.useContext)(D);return n?be(t,e,r,o):L((function(){return be(t,e,r,o)}))}};function Te(t,e,n,r){var o={},a=!1===(null==n?void 0:n.initial),s=r(t);for(var u in s)o[u]=xe(s[u]);var l=t.initial,c=t.animate,d=at(t),f=st(t);e&&f&&!d&&!1!==t.inherit&&(null!=l||(l=e.initial),null!=c||(c=e.animate));var p=a||!1===l,v=p?c:l;return v&&"boolean"!=typeof v&&!me(v)&&(Array.isArray(v)?v:[v]).forEach((function(e){var n=ot(t,e);if(n){var r=n.transitionEnd;n.transition;var a=i(n,["transitionEnd","transition"]);for(var s in a){var u=a[s];Array.isArray(u)&&(u=u[p?u.length-1:0]),null!==u&&(o[s]=u)}for(var s in r)o[s]=r[s]}})),o}var Se,Ae={useVisualState:we({scrapeMotionValuesFromProps:he,createRenderState:ae,onMount:function(t,e,n){var r=n.renderState,o=n.latestValues;try{r.dimensions="function"==typeof e.getBBox?e.getBBox():e.getBoundingClientRect()}catch(t){r.dimensions={x:0,y:0,width:0,height:0}}ie(r,o,{enableHardwareAcceleration:!1},t.transformTemplate),pe(e,r)}})},Pe={useVisualState:we({scrapeMotionValuesFromProps:ve,createRenderState:qt})};function Ce(t,e,n,r){return void 0===r&&(r={passive:!0}),t.addEventListener(e,n,r),function(){return t.removeEventListener(e,n)}}function Me(t,e,n,r){(0,l.useEffect)((function(){var o=t.current;if(n&&o)return Ce(o,e,n,r)}),[t,e,n,r])}function Ve(t){return"undefined"!=typeof PointerEvent&&t instanceof PointerEvent?!("mouse"!==t.pointerType):t instanceof MouseEvent}function Re(t){return!!t.touches}!function(t){t.Animate="animate",t.Hover="whileHover",t.Tap="whileTap",t.Drag="whileDrag",t.Focus="whileFocus",t.InView="whileInView",t.Exit="exit"}(Se||(Se={}));var Oe={pageX:0,pageY:0};function De(t,e){void 0===e&&(e="page");var n=t.touches[0]||t.changedTouches[0]||Oe;return{x:n[e+"X"],y:n[e+"Y"]}}function Le(t,e){return void 0===e&&(e="page"),{x:t[e+"X"],y:t[e+"Y"]}}function ke(t,e){return void 0===e&&(e="page"),{point:Re(t)?De(t,e):Le(t,e)}}var Ne=function(t,e){void 0===e&&(e=!1);var n,r=function(e){return t(e,ke(e))};return e?(n=r,function(t){var e=t instanceof MouseEvent;(!e||e&&0===t.button)&&n(t)}):r},Ie=function(){return V&&null===window.onpointerdown},je=function(){return V&&null===window.ontouchstart},Ue=function(){return V&&null===window.onmousedown},Be={pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointercancel:"mousecancel",pointerover:"mouseover",pointerout:"mouseout",pointerenter:"mouseenter",pointerleave:"mouseleave"},Fe={pointerdown:"touchstart",pointermove:"touchmove",pointerup:"touchend",pointercancel:"touchcancel"};function _e(t){return Ie()?t:je()?Fe[t]:Ue()?Be[t]:t}function He(t,e,n,r){return Ce(t,_e(e),Ne(n,"pointerdown"===e),r)}function ze(t,e,n,r){return Me(t,_e(e),n&&Ne(n,"pointerdown"===e),r)}function We(t){var e=null;return function(){return null===e&&(e=t,function(){e=null})}}var Ge=We("dragHorizontal"),Xe=We("dragVertical");function Ye(t){var e=!1;if("y"===t)e=Xe();else if("x"===t)e=Ge();else{var n=Ge(),r=Xe();n&&r?e=function(){n(),r()}:(n&&n(),r&&r())}return e}function Ze(){var t=Ye(!0);return!t||(t(),!1)}function qe(t,e,n){return function(r,o){var i;Ve(r)&&!Ze()&&(null===(i=t.animationState)||void 0===i||i.setActive(Se.Hover,e),null==n||n(r,o))}}var Ke=function(t,e){return!!e&&(t===e||Ke(t,e.parentElement))};const $e=(t,e)=>n=>e(t(n)),Qe=(...t)=>t.reduce($e);var Je=new Set,tn=new WeakMap,en=new WeakMap,nn=function(t){var e;null===(e=tn.get(t.target))||void 0===e||e(t)},rn=function(t){t.forEach(nn)};var on={some:0,all:1};function an(t,e,n,r){var a=r.root,s=r.margin,u=r.amount,c=void 0===u?"some":u,d=r.once;(0,l.useEffect)((function(){if(t){var r={root:null==a?void 0:a.current,rootMargin:s,threshold:"number"==typeof c?c:on[c]};return function(t,e,n){var r=function(t){var e=t.root,n=i(t,["root"]),r=e||document;en.has(r)||en.set(r,{});var a=en.get(r),s=JSON.stringify(n);return a[s]||(a[s]=new IntersectionObserver(rn,o({root:e},n))),a[s]}(e);return tn.set(t,n),r.observe(t),function(){tn.delete(t),r.unobserve(t)}}(n.getInstance(),r,(function(t){var r,o=t.isIntersecting;if(e.isInView!==o&&(e.isInView=o,!d||o||!e.hasEnteredView)){o&&(e.hasEnteredView=!0),null===(r=n.animationState)||void 0===r||r.setActive(Se.InView,o);var i=n.getProps(),a=o?i.onViewportEnter:i.onViewportLeave;null==a||a(t)}}))}}),[t,a,s,c])}function sn(t,e,n,r){var o=r.fallback,i=void 0===o||o;(0,l.useEffect)((function(){var r;t&&i&&("production"!==d&&(r="IntersectionObserver not available on this device. whileInView animations will trigger on mount.",Je.has(r)||(console.warn(r),Je.add(r))),requestAnimationFrame((function(){var t;e.hasEnteredView=!0;var r=n.getProps().onViewportEnter;null==r||r(null),null===(t=n.animationState)||void 0===t||t.setActive(Se.InView,!0)})))}),[t])}var un=function(t){return function(e){return t(e),null}},ln={inView:un((function(t){var e=t.visualElement,n=t.whileInView,r=t.onViewportEnter,o=t.onViewportLeave,i=t.viewport,a=void 0===i?{}:i,s=(0,l.useRef)({hasEnteredView:!1,isInView:!1}),u=Boolean(n||r||o);a.once&&s.current.hasEnteredView&&(u=!1),("undefined"==typeof IntersectionObserver?sn:an)(u,s.current,e,a)})),tap:un((function(t){var e=t.onTap,n=t.onTapStart,r=t.onTapCancel,o=t.whileTap,i=t.visualElement,a=e||n||r||o,s=(0,l.useRef)(!1),u=(0,l.useRef)(null),c={passive:!(n||e||r||h)};function d(){var t;null===(t=u.current)||void 0===t||t.call(u),u.current=null}function f(){var t;return d(),s.current=!1,null===(t=i.animationState)||void 0===t||t.setActive(Se.Tap,!1),!Ze()}function p(t,n){f()&&(Ke(i.getInstance(),t.target)?null==e||e(t,n):null==r||r(t,n))}function v(t,e){f()&&(null==r||r(t,e))}function h(t,e){var r;d(),s.current||(s.current=!0,u.current=Qe(He(window,"pointerup",p,c),He(window,"pointercancel",v,c)),null===(r=i.animationState)||void 0===r||r.setActive(Se.Tap,!0),null==n||n(t,e))}ze(i,"pointerdown",a?h:void 0,c),F(d)})),focus:un((function(t){var e=t.whileFocus,n=t.visualElement;Me(n,"focus",e?function(){var t;null===(t=n.animationState)||void 0===t||t.setActive(Se.Focus,!0)}:void 0),Me(n,"blur",e?function(){var t;null===(t=n.animationState)||void 0===t||t.setActive(Se.Focus,!1)}:void 0)})),hover:un((function(t){var e=t.onHoverStart,n=t.onHoverEnd,r=t.whileHover,o=t.visualElement;ze(o,"pointerenter",e||r?qe(o,!0,e):void 0,{passive:!e}),ze(o,"pointerleave",n||r?qe(o,!1,n):void 0,{passive:!n})}))};function cn(){var t=(0,l.useContext)(D);if(null===t)return[!0,null];var e=t.isPresent,n=t.onExitComplete,r=t.register,o=I();return(0,l.useEffect)((function(){return r(o)}),[]),!e&&n?[!1,function(){return null==n?void 0:n(o)}]:[!0]}function dn(t,e){if(!Array.isArray(e))return!1;var n=e.length;if(n!==t.length)return!1;for(var r=0;r<n;r++)if(e[r]!==t[r])return!1;return!0}const fn=(t,e,n)=>Math.min(Math.max(n,t),e),pn=.001,vn=.01,hn=10,mn=.05,gn=1;const yn=12;function En(t,e){return t*Math.sqrt(1-e*e)}const xn=["duration","bounce"],bn=["stiffness","damping","mass"];function wn(t,e){return e.some((e=>void 0!==t[e]))}function Tn(t){var{from:e=0,to:n=1,restSpeed:r=2,restDelta:o}=t,a=i(t,["from","to","restSpeed","restDelta"]);const s={done:!1,value:e};let{stiffness:u,damping:l,mass:c,velocity:d,duration:f,isResolvedFromDuration:p}=function(t){let e=Object.assign({velocity:0,stiffness:100,damping:10,mass:1,isResolvedFromDuration:!1},t);if(!wn(t,bn)&&wn(t,xn)){const n=function({duration:t=800,bounce:e=.25,velocity:n=0,mass:r=1}){let o,i;G(t<=1e3*hn,"Spring duration must be 10 seconds or less");let a=1-e;a=fn(mn,gn,a),t=fn(vn,hn,t/1e3),a<1?(o=e=>{const r=e*a,o=r*t,i=r-n,s=En(e,a),u=Math.exp(-o);return pn-i/s*u},i=e=>{const r=e*a*t,i=r*n+n,s=Math.pow(a,2)*Math.pow(e,2)*t,u=Math.exp(-r),l=En(Math.pow(e,2),a);return(-o(e)+pn>0?-1:1)*((i-s)*u)/l}):(o=e=>Math.exp(-e*t)*((e-n)*t+1)-pn,i=e=>Math.exp(-e*t)*(t*t*(n-e)));const s=function(t,e,n){let r=n;for(let n=1;n<yn;n++)r-=t(r)/e(r);return r}(o,i,5/t);if(t*=1e3,isNaN(s))return{stiffness:100,damping:10,duration:t};{const e=Math.pow(s,2)*r;return{stiffness:e,damping:2*a*Math.sqrt(r*e),duration:t}}}(t);e=Object.assign(Object.assign(Object.assign({},e),n),{velocity:0,mass:1}),e.isResolvedFromDuration=!0}return e}(a),v=Sn,h=Sn;function m(){const t=d?-d/1e3:0,r=n-e,i=l/(2*Math.sqrt(u*c)),a=Math.sqrt(u/c)/1e3;if(void 0===o&&(o=Math.min(Math.abs(n-e)/100,.4)),i<1){const e=En(a,i);v=o=>{const s=Math.exp(-i*a*o);return n-s*((t+i*a*r)/e*Math.sin(e*o)+r*Math.cos(e*o))},h=n=>{const o=Math.exp(-i*a*n);return i*a*o*(Math.sin(e*n)*(t+i*a*r)/e+r*Math.cos(e*n))-o*(Math.cos(e*n)*(t+i*a*r)-e*r*Math.sin(e*n))}}else if(1===i)v=e=>n-Math.exp(-a*e)*(r+(t+a*r)*e);else{const e=a*Math.sqrt(i*i-1);v=o=>{const s=Math.exp(-i*a*o),u=Math.min(e*o,300);return n-s*((t+i*a*r)*Math.sinh(u)+e*r*Math.cosh(u))/e}}}return m(),{next:t=>{const e=v(t);if(p)s.done=t>=f;else{const i=1e3*h(t),a=Math.abs(i)<=r,u=Math.abs(n-e)<=o;s.done=a&&u}return s.value=s.done?n:e,s},flipTarget:()=>{d=-d,[e,n]=[n,e],m()}}}Tn.needsInterpolation=(t,e)=>"string"==typeof t||"string"==typeof e;const Sn=t=>0,An=(t,e,n)=>{const r=e-t;return 0===r?1:(n-t)/r},Pn=(t,e,n)=>-n*t+n*e+t,Cn=(t,e)=>n=>Boolean(Nt(n)&&kt.test(n)&&n.startsWith(t)||e&&Object.prototype.hasOwnProperty.call(n,e)),Mn=(t,e,n)=>r=>{if(!Nt(r))return r;const[o,i,a,s]=r.match(Dt);return{[t]:parseFloat(o),[e]:parseFloat(i),[n]:parseFloat(a),alpha:void 0!==s?parseFloat(s):1}},Vn=Rt(0,255),Rn=Object.assign(Object.assign({},zt),{transform:t=>Math.round(Vn(t))}),On={test:Cn("rgb","red"),parse:Mn("red","green","blue"),transform:({red:t,green:e,blue:n,alpha:r=1})=>"rgba("+Rn.transform(t)+", "+Rn.transform(e)+", "+Rn.transform(n)+", "+Ot(Wt.transform(r))+")"},Dn={test:Cn("#"),parse:function(t){let e="",n="",r="",o="";return t.length>5?(e=t.substr(1,2),n=t.substr(3,2),r=t.substr(5,2),o=t.substr(7,2)):(e=t.substr(1,1),n=t.substr(2,1),r=t.substr(3,1),o=t.substr(4,1),e+=e,n+=n,r+=r,o+=o),{red:parseInt(e,16),green:parseInt(n,16),blue:parseInt(r,16),alpha:o?parseInt(o,16)/255:1}},transform:On.transform},Ln={test:Cn("hsl","hue"),parse:Mn("hue","saturation","lightness"),transform:({hue:t,saturation:e,lightness:n,alpha:r=1})=>"hsla("+Math.round(t)+", "+Ut.transform(Ot(e))+", "+Ut.transform(Ot(n))+", "+Ot(Wt.transform(r))+")"};function kn(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t}function Nn({hue:t,saturation:e,lightness:n,alpha:r}){t/=360,n/=100;let o=0,i=0,a=0;if(e/=100){const r=n<.5?n*(1+e):n+e-n*e,s=2*n-r;o=kn(s,r,t+1/3),i=kn(s,r,t),a=kn(s,r,t-1/3)}else o=i=a=n;return{red:Math.round(255*o),green:Math.round(255*i),blue:Math.round(255*a),alpha:r}}const In=(t,e,n)=>{const r=t*t,o=e*e;return Math.sqrt(Math.max(0,n*(o-r)+r))},jn=[Dn,On,Ln],Un=t=>jn.find((e=>e.test(t))),Bn=t=>`'${t}' is not an animatable color. Use the equivalent color code instead.`,Fn=(t,e)=>{let n=Un(t),r=Un(e);X(!!n,Bn(t)),X(!!r,Bn(e));let o=n.parse(t),i=r.parse(e);n===Ln&&(o=Nn(o),n=On),r===Ln&&(i=Nn(i),r=On);const a=Object.assign({},o);return t=>{for(const e in a)"alpha"!==e&&(a[e]=In(o[e],i[e],t));return a.alpha=Pn(o.alpha,i.alpha,t),n.transform(a)}},_n={test:t=>On.test(t)||Dn.test(t)||Ln.test(t),parse:t=>On.test(t)?On.parse(t):Ln.test(t)?Ln.parse(t):Dn.parse(t),transform:t=>Nt(t)?t:t.hasOwnProperty("red")?On.transform(t):Ln.transform(t)},Hn="${c}",zn="${n}";function Wn(t){"number"==typeof t&&(t=`${t}`);const e=[];let n=0;const r=t.match(Lt);r&&(n=r.length,t=t.replace(Lt,Hn),e.push(...r.map(_n.parse)));const o=t.match(Dt);return o&&(t=t.replace(Dt,zn),e.push(...o.map(zt.parse))),{values:e,numColors:n,tokenised:t}}function Gn(t){return Wn(t).values}function Xn(t){const{values:e,numColors:n,tokenised:r}=Wn(t),o=e.length;return t=>{let e=r;for(let r=0;r<o;r++)e=e.replace(r<n?Hn:zn,r<n?_n.transform(t[r]):Ot(t[r]));return e}}const Yn=t=>"number"==typeof t?0:t,Zn={test:function(t){var e,n,r,o;return isNaN(t)&&Nt(t)&&(null!==(n=null===(e=t.match(Dt))||void 0===e?void 0:e.length)&&void 0!==n?n:0)+(null!==(o=null===(r=t.match(Lt))||void 0===r?void 0:r.length)&&void 0!==o?o:0)>0},parse:Gn,createTransformer:Xn,getAnimatableNone:function(t){const e=Gn(t);return Xn(t)(e.map(Yn))}},qn=t=>"number"==typeof t;function Kn(t,e){return qn(t)?n=>Pn(t,e,n):_n.test(t)?Fn(t,e):tr(t,e)}const $n=(t,e)=>{const n=[...t],r=n.length,o=t.map(((t,n)=>Kn(t,e[n])));return t=>{for(let e=0;e<r;e++)n[e]=o[e](t);return n}},Qn=(t,e)=>{const n=Object.assign(Object.assign({},t),e),r={};for(const o in n)void 0!==t[o]&&void 0!==e[o]&&(r[o]=Kn(t[o],e[o]));return t=>{for(const e in r)n[e]=r[e](t);return n}};function Jn(t){const e=Zn.parse(t),n=e.length;let r=0,o=0,i=0;for(let t=0;t<n;t++)r||"number"==typeof e[t]?r++:void 0!==e[t].hue?i++:o++;return{parsed:e,numNumbers:r,numRGB:o,numHSL:i}}const tr=(t,e)=>{const n=Zn.createTransformer(e),r=Jn(t),o=Jn(e);return r.numHSL===o.numHSL&&r.numRGB===o.numRGB&&r.numNumbers>=o.numNumbers?Qe($n(r.parsed,o.parsed),n):(G(!0,`Complex values '${t}' and '${e}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`),n=>`${n>0?e:t}`)},er=(t,e)=>n=>Pn(t,e,n);function nr(t,e,{clamp:n=!0,ease:r,mixer:o}={}){const i=t.length;X(i===e.length,"Both input and output ranges must be the same length"),X(!r||!Array.isArray(r)||r.length===i-1,"Array of easing functions must be of length `input.length - 1`, as it applies to the transitions **between** the defined values."),t[0]>t[i-1]&&(t=[].concat(t),e=[].concat(e),t.reverse(),e.reverse());const a=function(t,e,n){const r=[],o=n||("number"==typeof(i=t[0])?er:"string"==typeof i?_n.test(i)?Fn:tr:Array.isArray(i)?$n:"object"==typeof i?Qn:void 0);var i;const a=t.length-1;for(let n=0;n<a;n++){let i=o(t[n],t[n+1]);if(e){const t=Array.isArray(e)?e[n]:e;i=Qe(t,i)}r.push(i)}return r}(e,r,o),s=2===i?function([t,e],[n]){return r=>n(An(t,e,r))}(t,a):function(t,e){const n=t.length,r=n-1;return o=>{let i=0,a=!1;if(o<=t[0]?a=!0:o>=t[r]&&(i=r-1,a=!0),!a){let e=1;for(;e<n&&!(t[e]>o||e===r);e++);i=e-1}const s=An(t[i],t[i+1],o);return e[i](s)}}(t,a);return n?e=>s(fn(t[0],t[i-1],e)):s}const rr=t=>e=>1-t(1-e),or=t=>e=>e<=.5?t(2*e)/2:(2-t(2*(1-e)))/2,ir=t=>e=>e*e*((t+1)*e-t),ar=t=>t,sr=(2,t=>Math.pow(t,2));const ur=rr(sr),lr=or(sr),cr=t=>1-Math.sin(Math.acos(t)),dr=rr(cr),fr=or(dr),pr=ir(1.525),vr=rr(pr),hr=or(pr),mr=(t=>{const e=ir(1.525);return t=>(t*=2)<1?.5*e(t):.5*(2-Math.pow(2,-10*(t-1)))})(),gr=t=>{if(1===t||0===t)return t;const e=t*t;return t<.36363636363636365?7.5625*e:t<.7272727272727273?9.075*e-9.9*t+3.4:t<.9?12.066481994459833*e-19.63545706371191*t+8.898060941828255:10.8*t*t-20.52*t+10.72},yr=rr(gr);function Er(t,e){return t.map((()=>e||lr)).splice(0,t.length-1)}function xr({from:t=0,to:e=1,ease:n,offset:r,duration:o=300}){const i={done:!1,value:t},a=Array.isArray(e)?e:[t,e],s=function(t,e){return t.map((t=>t*e))}(r&&r.length===a.length?r:function(t){const e=t.length;return t.map(((t,n)=>0!==n?n/(e-1):0))}(a),o);function u(){return nr(s,a,{ease:Array.isArray(n)?n:Er(a,n)})}let l=u();return{next:t=>(i.value=l(t),i.done=t>=o,i),flipTarget:()=>{a.reverse(),l=u()}}}const br={keyframes:xr,spring:Tn,decay:function({velocity:t=0,from:e=0,power:n=.8,timeConstant:r=350,restDelta:o=.5,modifyTarget:i}){const a={done:!1,value:e};let s=n*t;const u=e+s,l=void 0===i?u:i(u);return l!==u&&(s=l-e),{next:t=>{const e=-s*Math.exp(-t/r);return a.done=!(e>o||e<-o),a.value=a.done?l:l+e,a},flipTarget:()=>{}}}};function wr(t,e,n=0){return t-e-n}const Tr=t=>{const e=({delta:e})=>t(e);return{start:()=>M.update(e,!0),stop:()=>w.update(e)}};function Sr(t){var e,n,{from:r,autoplay:o=!0,driver:a=Tr,elapsed:s=0,repeat:u=0,repeatType:l="loop",repeatDelay:c=0,onPlay:d,onStop:f,onComplete:p,onRepeat:v,onUpdate:h}=t,m=i(t,["from","autoplay","driver","elapsed","repeat","repeatType","repeatDelay","onPlay","onStop","onComplete","onRepeat","onUpdate"]);let g,y,E,{to:x}=m,b=0,w=m.duration,T=!1,S=!0;const A=function(t){if(Array.isArray(t.to))return xr;if(br[t.type])return br[t.type];const e=new Set(Object.keys(t));return e.has("ease")||e.has("duration")&&!e.has("dampingRatio")?xr:e.has("dampingRatio")||e.has("stiffness")||e.has("mass")||e.has("damping")||e.has("restSpeed")||e.has("restDelta")?Tn:xr}(m);(null===(n=(e=A).needsInterpolation)||void 0===n?void 0:n.call(e,r,x))&&(E=nr([0,100],[r,x],{clamp:!1}),r=0,x=100);const P=A(Object.assign(Object.assign({},m),{from:r,to:x}));return o&&(null==d||d(),g=a((function(t){if(S||(t=-t),s+=t,!T){const t=P.next(Math.max(0,s));y=t.value,E&&(y=E(y)),T=S?t.done:s<=0}null==h||h(y),T&&(0===b&&(null!=w||(w=s)),b<u?function(t,e,n,r){return r?t>=e+n:t<=-n}(s,w,c,S)&&(b++,"reverse"===l?(S=b%2==0,s=function(t,e,n=0,r=!0){return r?wr(e+-t,e,n):e-(t-e)+n}(s,w,c,S)):(s=wr(s,w,c),"mirror"===l&&P.flipTarget()),T=!1,v&&v()):(g.stop(),p&&p()))})),g.start()),{stop:()=>{null==f||f(),g.stop()}}}function Ar(t,e){return e?t*(1e3/e):0}var Pr=function(t){return 1e3*t};const Cr=(t,e)=>1-3*e+3*t,Mr=(t,e)=>3*e-6*t,Vr=t=>3*t,Rr=(t,e,n)=>((Cr(e,n)*t+Mr(e,n))*t+Vr(e))*t,Or=(t,e,n)=>3*Cr(e,n)*t*t+2*Mr(e,n)*t+Vr(e),Dr=1e-7,Lr=10,kr=8,Nr=.001,Ir=11,jr=1/(Ir-1);function Ur(t,e,n,r){if(t===e&&n===r)return ar;const o=new Float32Array(Ir);for(let e=0;e<Ir;++e)o[e]=Rr(e*jr,t,n);return i=>0===i||1===i?i:Rr(function(e){let r=0,i=1;const a=Ir-1;for(;i!==a&&o[i]<=e;++i)r+=jr;--i;const s=r+(e-o[i])/(o[i+1]-o[i])*jr,u=Or(s,t,n);return u>=Nr?function(t,e,n,r){for(let o=0;o<kr;++o){const o=Or(e,n,r);if(0===o)return e;e-=(Rr(e,n,r)-t)/o}return e}(e,s,t,n):0===u?s:function(t,e,n,r,o){let i,a,s=0;do{a=e+(n-e)/2,i=Rr(a,r,o)-t,i>0?n=a:e=a}while(Math.abs(i)>Dr&&++s<Lr);return a}(e,r,r+jr,t,n)}(i),e,r)}var Br={linear:ar,easeIn:sr,easeInOut:lr,easeOut:ur,circIn:cr,circInOut:fr,circOut:dr,backIn:pr,backInOut:hr,backOut:vr,anticipate:mr,bounceIn:yr,bounceInOut:t=>t<.5?.5*(1-gr(1-2*t)):.5*gr(2*t-1)+.5,bounceOut:gr},Fr=function(t){if(Array.isArray(t)){X(4===t.length,"Cubic bezier arrays must contain four numerical values.");var e=s(t,4);return Ur(e[0],e[1],e[2],e[3])}return"string"==typeof t?(X(void 0!==Br[t],"Invalid easing type '".concat(t,"'")),Br[t]):t},_r=function(t){return Array.isArray(t)&&"number"!=typeof t[0]},Hr=function(t,e){return!("zIndex"===t||"number"!=typeof e&&!Array.isArray(e)&&("string"!=typeof e||!Zn.test(e)||e.startsWith("url(")))},zr=function(){return{type:"spring",stiffness:500,damping:25,restSpeed:10}},Wr=function(t){return{type:"spring",stiffness:550,damping:0===t?2*Math.sqrt(550):30,restSpeed:10}},Gr=function(){return{type:"keyframes",ease:"linear",duration:.3}},Xr=function(t){return{type:"keyframes",duration:.8,values:t}},Yr={x:zr,y:zr,z:zr,rotate:zr,rotateX:zr,rotateY:zr,rotateZ:zr,scaleX:Wr,scaleY:Wr,scale:Wr,opacity:Gr,backgroundColor:Gr,color:Gr,default:Wr},Zr=function(t,e){var n;return n=ge(e)?Xr:Yr[t]||Yr.default,o({to:e},n(e))};const qr=new Set(["brightness","contrast","saturate","opacity"]);function Kr(t){let[e,n]=t.slice(0,-1).split("(");if("drop-shadow"===e)return t;const[r]=n.match(Dt)||[];if(!r)return t;const o=n.replace(r,"");let i=qr.has(e)?1:0;return r!==n&&(i*=100),e+"("+i+o+")"}const $r=/([a-z-]*)\(.*?\)/g,Qr=Object.assign(Object.assign({},Zn),{getAnimatableNone:t=>{const e=t.match($r);return e?e.map(Kr).join(" "):t}});var Jr=o(o({},Yt),{color:_n,backgroundColor:_n,outlineColor:_n,fill:_n,stroke:_n,borderColor:_n,borderTopColor:_n,borderRightColor:_n,borderBottomColor:_n,borderLeftColor:_n,filter:Qr,WebkitFilter:Qr}),to=function(t){return Jr[t]};function eo(t,e){var n,r=to(t);return r!==Qr&&(r=Zn),null===(n=r.getAnimatableNone)||void 0===n?void 0:n.call(r,e)}var no={current:!1},ro=!1;function oo(t,e,n,r,a){var l,c=so(r,t),d=null!==(l=c.from)&&void 0!==l?l:e.get(),f=Hr(t,n);"none"===d&&f&&"string"==typeof n?d=eo(t,n):io(d)&&"string"==typeof n?d=ao(n):!Array.isArray(n)&&io(n)&&"string"==typeof d&&(n=ao(d));var p=Hr(t,d);return G(p===f,"You are trying to animate ".concat(t,' from "').concat(d,'" to "').concat(n,'". ').concat(d," is not an animatable value - to enable this animation set ").concat(d," to a value animatable to ").concat(n," via the `style` property.")),p&&f&&!1!==c.type?function(){var r={from:d,to:n,velocity:e.getVelocity(),onComplete:a,onUpdate:function(t){return e.set(t)}};return"inertia"===c.type||"decay"===c.type?function({from:t=0,velocity:e=0,min:n,max:r,power:o=.8,timeConstant:i=750,bounceStiffness:a=500,bounceDamping:s=10,restDelta:u=1,modifyTarget:l,driver:c,onUpdate:d,onComplete:f,onStop:p}){let v;function h(t){return void 0!==n&&t<n||void 0!==r&&t>r}function m(t){return void 0===n?r:void 0===r||Math.abs(n-t)<Math.abs(r-t)?n:r}function g(t){null==v||v.stop(),v=Sr(Object.assign(Object.assign({},t),{driver:c,onUpdate:e=>{var n;null==d||d(e),null===(n=t.onUpdate)||void 0===n||n.call(t,e)},onComplete:f,onStop:p}))}function y(t){g(Object.assign({type:"spring",stiffness:a,damping:s,restDelta:u},t))}if(h(t))y({from:t,velocity:e,to:m(t)});else{let r=o*e+t;void 0!==l&&(r=l(r));const a=m(r),s=a===n?-1:1;let c,d;const f=t=>{c=d,d=t,e=Ar(t-c,C().delta),(1===s&&t>a||-1===s&&t<a)&&y({from:t,to:a,velocity:e})};g({type:"decay",from:t,velocity:e,timeConstant:i,power:o,restDelta:u,modifyTarget:l,onUpdate:h(r)?f:void 0})}return{stop:()=>null==v?void 0:v.stop()}}(o(o({},r),c)):Sr(o(o({},function(t,e,n){var r;return Array.isArray(e.to)&&(null!==(r=t.duration)&&void 0!==r||(t.duration=.8)),function(t){Array.isArray(t.to)&&null===t.to[0]&&(t.to=u([],s(t.to),!1),t.to[0]=t.from)}(e),function(t){t.when,t.delay,t.delayChildren,t.staggerChildren,t.staggerDirection,t.repeat,t.repeatType,t.repeatDelay,t.from;var e=i(t,["when","delay","delayChildren","staggerChildren","staggerDirection","repeat","repeatType","repeatDelay","from"]);return!!Object.keys(e).length}(t)||(t=o(o({},t),Zr(n,e.to))),o(o({},e),function(t){var e=t.ease,n=t.times,r=t.yoyo,a=t.flip,s=t.loop,u=i(t,["ease","times","yoyo","flip","loop"]),l=o({},u);return n&&(l.offset=n),u.duration&&(l.duration=Pr(u.duration)),u.repeatDelay&&(l.repeatDelay=Pr(u.repeatDelay)),e&&(l.ease=_r(e)?e.map(Fr):Fr(e)),"tween"===u.type&&(l.type="keyframes"),(r||s||a)&&(G(!ro,"yoyo, loop and flip have been removed from the API. Replace with repeat and repeatType options."),ro=!0,r?l.repeatType="reverse":s?l.repeatType="loop":a&&(l.repeatType="mirror"),l.repeat=s||r||a||u.repeat),"spring"!==u.type&&(l.type="keyframes"),l}(t))}(c,r,t)),{onUpdate:function(t){var e;r.onUpdate(t),null===(e=c.onUpdate)||void 0===e||e.call(c,t)},onComplete:function(){var t;r.onComplete(),null===(t=c.onComplete)||void 0===t||t.call(c)}}))}:function(){var t,r,o=Ee(n);return e.set(o),a(),null===(t=null==c?void 0:c.onUpdate)||void 0===t||t.call(c,o),null===(r=null==c?void 0:c.onComplete)||void 0===r||r.call(c),{stop:function(){}}}}function io(t){return 0===t||"string"==typeof t&&0===parseFloat(t)&&-1===t.indexOf(" ")}function ao(t){return"number"==typeof t?0:eo("",t)}function so(t,e){return t[e]||t.default||t}function uo(t,e,n,r){return void 0===r&&(r={}),no.current&&(r={type:!1}),e.start((function(o){var i,a,s=oo(t,e,n,r,o),u=function(t,e){var n,r;return null!==(r=null!==(n=(so(t,e)||{}).delay)&&void 0!==n?n:t.delay)&&void 0!==r?r:0}(r,t),l=function(){return a=s()};return u?i=window.setTimeout(l,Pr(u)):l(),function(){clearTimeout(i),null==a||a.stop()}}))}var lo=function(t){return/^0[^.\s]+$/.test(t)};function co(t,e){-1===t.indexOf(e)&&t.push(e)}function fo(t,e){var n=t.indexOf(e);n>-1&&t.splice(n,1)}var po=function(){function t(){this.subscriptions=[]}return t.prototype.add=function(t){var e=this;return co(this.subscriptions,t),function(){return fo(e.subscriptions,t)}},t.prototype.notify=function(t,e,n){var r=this.subscriptions.length;if(r)if(1===r)this.subscriptions[0](t,e,n);else for(var o=0;o<r;o++){var i=this.subscriptions[o];i&&i(t,e,n)}},t.prototype.getSize=function(){return this.subscriptions.length},t.prototype.clear=function(){this.subscriptions.length=0},t}(),vo=function(t){return!isNaN(parseFloat(t))},ho=function(){function t(t){var e=this;this.version="6.5.1",this.timeDelta=0,this.lastUpdated=0,this.updateSubscribers=new po,this.velocityUpdateSubscribers=new po,this.renderSubscribers=new po,this.canTrackVelocity=!1,this.updateAndNotify=function(t,n){void 0===n&&(n=!0),e.prev=e.current,e.current=t;var r=C(),o=r.delta,i=r.timestamp;e.lastUpdated!==i&&(e.timeDelta=o,e.lastUpdated=i,M.postRender(e.scheduleVelocityCheck)),e.prev!==e.current&&e.updateSubscribers.notify(e.current),e.velocityUpdateSubscribers.getSize()&&e.velocityUpdateSubscribers.notify(e.getVelocity()),n&&e.renderSubscribers.notify(e.current)},this.scheduleVelocityCheck=function(){return M.postRender(e.velocityCheck)},this.velocityCheck=function(t){t.timestamp!==e.lastUpdated&&(e.prev=e.current,e.velocityUpdateSubscribers.notify(e.getVelocity()))},this.hasAnimated=!1,this.prev=this.current=t,this.canTrackVelocity=vo(this.current)}return t.prototype.onChange=function(t){return this.updateSubscribers.add(t)},t.prototype.clearListeners=function(){this.updateSubscribers.clear()},t.prototype.onRenderRequest=function(t){return t(this.get()),this.renderSubscribers.add(t)},t.prototype.attach=function(t){this.passiveEffect=t},t.prototype.set=function(t,e){void 0===e&&(e=!0),e&&this.passiveEffect?this.passiveEffect(t,this.updateAndNotify):this.updateAndNotify(t,e)},t.prototype.get=function(){return this.current},t.prototype.getPrevious=function(){return this.prev},t.prototype.getVelocity=function(){return this.canTrackVelocity?Ar(parseFloat(this.current)-parseFloat(this.prev),this.timeDelta):0},t.prototype.start=function(t){var e=this;return this.stop(),new Promise((function(n){e.hasAnimated=!0,e.stopAnimation=t(n)})).then((function(){return e.clearAnimation()}))},t.prototype.stop=function(){this.stopAnimation&&this.stopAnimation(),this.clearAnimation()},t.prototype.isAnimating=function(){return!!this.stopAnimation},t.prototype.clearAnimation=function(){this.stopAnimation=null},t.prototype.destroy=function(){this.updateSubscribers.clear(),this.renderSubscribers.clear(),this.stop()},t}();function mo(t){return new ho(t)}var go=function(t){return function(e){return e.test(t)}},yo=[zt,Bt,Ut,jt,_t,Ft,{test:function(t){return"auto"===t},parse:function(t){return t}}],Eo=function(t){return yo.find(go(t))},xo=u(u([],s(yo),!1),[_n,Zn],!1),bo=function(t){return xo.find(go(t))};function wo(t,e,n){t.hasValue(e)?t.getValue(e).set(n):t.addValue(e,mo(n))}function To(t,e){if(e)return(e[t]||e.default||e).from}function So(t,e,n){var r;void 0===n&&(n={});var i=it(t,e,n.custom),a=(i||{}).transition,u=void 0===a?t.getDefaultTransition()||{}:a;n.transitionOverride&&(u=n.transitionOverride);var l=i?function(){return Ao(t,i,n)}:function(){return Promise.resolve()},c=(null===(r=t.variantChildren)||void 0===r?void 0:r.size)?function(r){void 0===r&&(r=0);var i=u.delayChildren,a=void 0===i?0:i,s=u.staggerChildren,l=u.staggerDirection;return function(t,e,n,r,i,a){void 0===n&&(n=0),void 0===r&&(r=0),void 0===i&&(i=1);var s=[],u=(t.variantChildren.size-1)*r,l=1===i?function(t){return void 0===t&&(t=0),t*r}:function(t){return void 0===t&&(t=0),u-t*r};return Array.from(t.variantChildren).sort(Po).forEach((function(t,r){s.push(So(t,e,o(o({},a),{delay:n+l(r)})).then((function(){return t.notifyAnimationComplete(e)})))})),Promise.all(s)}(t,e,a+r,s,l,n)}:function(){return Promise.resolve()},d=u.when;if(d){var f=s("beforeChildren"===d?[l,c]:[c,l],2),p=f[0],v=f[1];return p().then(v)}return Promise.all([l(),c(n.delay)])}function Ao(t,e,n){var r,a=void 0===n?{}:n,s=a.delay,u=void 0===s?0:s,l=a.transitionOverride,c=a.type,d=t.makeTargetAnimatable(e),f=d.transition,p=void 0===f?t.getDefaultTransition():f,v=d.transitionEnd,h=i(d,["transition","transitionEnd"]);l&&(p=l);var m=[],g=c&&(null===(r=t.animationState)||void 0===r?void 0:r.getState()[c]);for(var y in h){var E=t.getValue(y),x=h[y];if(!(!E||void 0===x||g&&Co(g,y))){var b=o({delay:u},p);t.shouldReduceMotion&&wt(y)&&(b=o(o({},b),{type:!1,delay:0}));var w=uo(y,E,x,b);m.push(w)}}return Promise.all(m).then((function(){v&&function(t,e){var n=it(t,e),r=n?t.makeTargetAnimatable(n,!1):{},a=r.transitionEnd,s=void 0===a?{}:a;r.transition;var u=i(r,["transitionEnd","transition"]);for(var l in u=o(o({},u),s))wo(t,l,Ee(u[l]))}(t,v)}))}function Po(t,e){return t.sortNodePosition(e)}function Co(t,e){var n=t.protectedKeys,r=t.needsAnimating,o=n.hasOwnProperty(e)&&!0!==r[e];return r[e]=!1,o}var Mo=[Se.Animate,Se.InView,Se.Focus,Se.Hover,Se.Tap,Se.Drag,Se.Exit],Vo=u([],s(Mo),!1).reverse(),Ro=Mo.length;function Oo(t){var e,n=function(t){return function(e){return Promise.all(e.map((function(e){var n=e.animation,r=e.options;return function(t,e,n){var r;if(void 0===n&&(n={}),t.notifyAnimationStart(e),Array.isArray(e)){var o=e.map((function(e){return So(t,e,n)}));r=Promise.all(o)}else if("string"==typeof e)r=So(t,e,n);else{var i="function"==typeof e?it(t,e,n.custom):e;r=Ao(t,i,n)}return r.then((function(){return t.notifyAnimationComplete(e)}))}(t,n,r)})))}}(t),r=((e={})[Se.Animate]=Do(!0),e[Se.InView]=Do(),e[Se.Hover]=Do(),e[Se.Tap]=Do(),e[Se.Drag]=Do(),e[Se.Focus]=Do(),e[Se.Exit]=Do(),e),a={},l=!0,c=function(e,n){var r=it(t,n);if(r){r.transition;var a=r.transitionEnd,s=i(r,["transition","transitionEnd"]);e=o(o(o({},e),s),a)}return e};function d(e,i){for(var d,f=t.getProps(),p=t.getVariantContext(!0)||{},v=[],h=new Set,m={},g=1/0,y=function(n){var a=Vo[n],y=r[a],E=null!==(d=f[a])&&void 0!==d?d:p[a],x=rt(E),b=a===i?y.isActive:null;!1===b&&(g=n);var w=E===p[a]&&E!==f[a]&&x;if(w&&l&&t.manuallyAnimateOnMount&&(w=!1),y.protectedKeys=o({},m),!y.isActive&&null===b||!E&&!y.prevProp||me(E)||"boolean"==typeof E)return"continue";var T=function(t,e){return"string"==typeof e?e!==t:!!nt(e)&&!dn(e,t)}(y.prevProp,E),S=T||a===i&&y.isActive&&!w&&x||n>g&&x,A=Array.isArray(E)?E:[E],P=A.reduce(c,{});!1===b&&(P={});var C=y.prevResolvedValues,M=void 0===C?{}:C,V=o(o({},M),P),R=function(t){S=!0,h.delete(t),y.needsAnimating[t]=!0};for(var O in V){var D=P[O],L=M[O];m.hasOwnProperty(O)||(D!==L?ge(D)&&ge(L)?!dn(D,L)||T?R(O):y.protectedKeys[O]=!0:void 0!==D?R(O):h.add(O):void 0!==D&&h.has(O)?R(O):y.protectedKeys[O]=!0)}y.prevProp=E,y.prevResolvedValues=P,y.isActive&&(m=o(o({},m),P)),l&&t.blockInitialAnimation&&(S=!1),S&&!w&&v.push.apply(v,u([],s(A.map((function(t){return{animation:t,options:o({type:a},e)}}))),!1))},E=0;E<Ro;E++)y(E);if(a=o({},m),h.size){var x={};h.forEach((function(e){var n=t.getBaseTarget(e);void 0!==n&&(x[e]=n)})),v.push({animation:x})}var b=Boolean(v.length);return l&&!1===f.initial&&!t.manuallyAnimateOnMount&&(b=!1),l=!1,b?n(v):Promise.resolve()}return{isAnimated:function(t){return void 0!==a[t]},animateChanges:d,setActive:function(e,n,o){var i;if(r[e].isActive===n)return Promise.resolve();null===(i=t.variantChildren)||void 0===i||i.forEach((function(t){var r;return null===(r=t.animationState)||void 0===r?void 0:r.setActive(e,n)})),r[e].isActive=n;var a=d(o,e);for(var s in r)r[s].protectedKeys={};return a},setAnimateFunction:function(e){n=e(t)},getState:function(){return r}}}function Do(t){return void 0===t&&(t=!1),{isActive:t,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}}}var Lo={animation:un((function(t){var e=t.visualElement,n=t.animate;e.animationState||(e.animationState=Oo(e)),me(n)&&(0,l.useEffect)((function(){return n.subscribe(e)}),[n])})),exit:un((function(t){var e=t.custom,n=t.visualElement,r=s(cn(),2),o=r[0],i=r[1],a=(0,l.useContext)(D);(0,l.useEffect)((function(){var t,r;n.isPresent=o;var s=null===(t=n.animationState)||void 0===t?void 0:t.setActive(Se.Exit,!o,{custom:null!==(r=null==a?void 0:a.custom)&&void 0!==r?r:e});!o&&(null==s||s.then(i))}),[o])}))};const ko=t=>t.hasOwnProperty("x")&&t.hasOwnProperty("y"),No=t=>ko(t)&&t.hasOwnProperty("z"),Io=(t,e)=>Math.abs(t-e);function jo(t,e){if(qn(t)&&qn(e))return Io(t,e);if(ko(t)&&ko(e)){const n=Io(t.x,e.x),r=Io(t.y,e.y),o=No(t)&&No(e)?Io(t.z,e.z):0;return Math.sqrt(Math.pow(n,2)+Math.pow(r,2)+Math.pow(o,2))}}var Uo=function(){function t(t,e,n){var r=this,i=(void 0===n?{}:n).transformPagePoint;if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.updatePoint=function(){if(r.lastMoveEvent&&r.lastMoveEventInfo){var t=_o(r.lastMoveEventInfo,r.history),e=null!==r.startEvent,n=jo(t.offset,{x:0,y:0})>=3;if(e||n){var i=t.point,a=C().timestamp;r.history.push(o(o({},i),{timestamp:a}));var s=r.handlers,u=s.onStart,l=s.onMove;e||(u&&u(r.lastMoveEvent,t),r.startEvent=r.lastMoveEvent),l&&l(r.lastMoveEvent,t)}}},this.handlePointerMove=function(t,e){r.lastMoveEvent=t,r.lastMoveEventInfo=Bo(e,r.transformPagePoint),Ve(t)&&0===t.buttons?r.handlePointerUp(t,e):M.update(r.updatePoint,!0)},this.handlePointerUp=function(t,e){r.end();var n=r.handlers,o=n.onEnd,i=n.onSessionEnd,a=_o(Bo(e,r.transformPagePoint),r.history);r.startEvent&&o&&o(t,a),i&&i(t,a)},!(Re(t)&&t.touches.length>1)){this.handlers=e,this.transformPagePoint=i;var a=Bo(ke(t),this.transformPagePoint),s=a.point,u=C().timestamp;this.history=[o(o({},s),{timestamp:u})];var l=e.onSessionStart;l&&l(t,_o(a,this.history)),this.removeListeners=Qe(He(window,"pointermove",this.handlePointerMove),He(window,"pointerup",this.handlePointerUp),He(window,"pointercancel",this.handlePointerUp))}}return t.prototype.updateHandlers=function(t){this.handlers=t},t.prototype.end=function(){this.removeListeners&&this.removeListeners(),w.update(this.updatePoint)},t}();function Bo(t,e){return e?{point:e(t.point)}:t}function Fo(t,e){return{x:t.x-e.x,y:t.y-e.y}}function _o(t,e){var n=t.point;return{point:n,delta:Fo(n,zo(e)),offset:Fo(n,Ho(e)),velocity:Wo(e,.1)}}function Ho(t){return t[0]}function zo(t){return t[t.length-1]}function Wo(t,e){if(t.length<2)return{x:0,y:0};for(var n=t.length-1,r=null,o=zo(t);n>=0&&(r=t[n],!(o.timestamp-r.timestamp>Pr(e)));)n--;if(!r)return{x:0,y:0};var i=(o.timestamp-r.timestamp)/1e3;if(0===i)return{x:0,y:0};var a={x:(o.x-r.x)/i,y:(o.y-r.y)/i};return a.x===1/0&&(a.x=0),a.y===1/0&&(a.y=0),a}function Go(t){return t.max-t.min}function Xo(t,e,n){return void 0===e&&(e=0),void 0===n&&(n=.01),jo(t,e)<n}function Yo(t,e,n,r){void 0===r&&(r=.5),t.origin=r,t.originPoint=Pn(e.min,e.max,t.origin),t.scale=Go(n)/Go(e),(Xo(t.scale,1,1e-4)||isNaN(t.scale))&&(t.scale=1),t.translate=Pn(n.min,n.max,t.origin)-t.originPoint,(Xo(t.translate)||isNaN(t.translate))&&(t.translate=0)}function Zo(t,e,n,r){Yo(t.x,e.x,n.x,null==r?void 0:r.originX),Yo(t.y,e.y,n.y,null==r?void 0:r.originY)}function qo(t,e,n){t.min=n.min+e.min,t.max=t.min+Go(e)}function Ko(t,e,n){t.min=e.min-n.min,t.max=t.min+Go(e)}function $o(t,e,n){Ko(t.x,e.x,n.x),Ko(t.y,e.y,n.y)}function Qo(t,e,n){return{min:void 0!==e?t.min+e:void 0,max:void 0!==n?t.max+n-(t.max-t.min):void 0}}function Jo(t,e){var n,r=e.min-t.min,o=e.max-t.max;return e.max-e.min<t.max-t.min&&(r=(n=s([o,r],2))[0],o=n[1]),{min:r,max:o}}var ti=.35;function ei(t,e,n){return{min:ni(t,e),max:ni(t,n)}}function ni(t,e){var n;return"number"==typeof t?t:null!==(n=t[e])&&void 0!==n?n:0}var ri=function(){return{x:{translate:0,scale:1,origin:0,originPoint:0},y:{translate:0,scale:1,origin:0,originPoint:0}}},oi=function(){return{x:{min:0,max:0},y:{min:0,max:0}}};function ii(t){return[t("x"),t("y")]}function ai(t){var e=t.top;return{x:{min:t.left,max:t.right},y:{min:e,max:t.bottom}}}function si(t){return void 0===t||1===t}function ui(t){var e=t.scale,n=t.scaleX,r=t.scaleY;return!si(e)||!si(n)||!si(r)}function li(t){return ui(t)||ci(t.x)||ci(t.y)||t.z||t.rotate||t.rotateX||t.rotateY}function ci(t){return t&&"0%"!==t}function di(t,e,n){return n+e*(t-n)}function fi(t,e,n,r,o){return void 0!==o&&(t=di(t,o,r)),di(t,n,r)+e}function pi(t,e,n,r,o){void 0===e&&(e=0),void 0===n&&(n=1),t.min=fi(t.min,e,n,r,o),t.max=fi(t.max,e,n,r,o)}function vi(t,e){var n=e.x,r=e.y;pi(t.x,n.translate,n.scale,n.originPoint),pi(t.y,r.translate,r.scale,r.originPoint)}function hi(t,e){t.min=t.min+e,t.max=t.max+e}function mi(t,e,n){var r=s(n,3),o=r[0],i=r[1],a=r[2],u=void 0!==e[a]?e[a]:.5,l=Pn(t.min,t.max,u);pi(t,e[o],e[i],l,e.scale)}var gi=["x","scaleX","originX"],yi=["y","scaleY","originY"];function Ei(t,e){mi(t.x,e,gi),mi(t.y,e,yi)}function xi(t,e){return ai(function(t,e){if(!e)return t;var n=e({x:t.left,y:t.top}),r=e({x:t.right,y:t.bottom});return{top:n.y,left:n.x,bottom:r.y,right:r.x}}(t.getBoundingClientRect(),e))}var bi=new WeakMap,wi=function(){function t(t){this.openGlobalLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=oi(),this.visualElement=t}return t.prototype.start=function(t,e){var n=this,r=(void 0===e?{}:e).snapToCursor,o=void 0!==r&&r;!1!==this.visualElement.isPresent&&(this.panSession=new Uo(t,{onSessionStart:function(t){n.stopAnimation(),o&&n.snapToCursor(ke(t,"page").point)},onStart:function(t,e){var r,o=n.getProps(),i=o.drag,a=o.dragPropagation,s=o.onDragStart;(!i||a||(n.openGlobalLock&&n.openGlobalLock(),n.openGlobalLock=Ye(i),n.openGlobalLock))&&(n.isDragging=!0,n.currentDirection=null,n.resolveConstraints(),n.visualElement.projection&&(n.visualElement.projection.isAnimationBlocked=!0,n.visualElement.projection.target=void 0),ii((function(t){var e,r,o=n.getAxisMotionValue(t).get()||0;if(Ut.test(o)){var i=null===(r=null===(e=n.visualElement.projection)||void 0===e?void 0:e.layout)||void 0===r?void 0:r.actual[t];i&&(o=Go(i)*(parseFloat(o)/100))}n.originPoint[t]=o})),null==s||s(t,e),null===(r=n.visualElement.animationState)||void 0===r||r.setActive(Se.Drag,!0))},onMove:function(t,e){var r=n.getProps(),o=r.dragPropagation,i=r.dragDirectionLock,a=r.onDirectionLock,s=r.onDrag;if(o||n.openGlobalLock){var u=e.offset;if(i&&null===n.currentDirection)return n.currentDirection=function(t,e){void 0===e&&(e=10);var n=null;return Math.abs(t.y)>e?n="y":Math.abs(t.x)>e&&(n="x"),n}(u),void(null!==n.currentDirection&&(null==a||a(n.currentDirection)));n.updateAxis("x",e.point,u),n.updateAxis("y",e.point,u),n.visualElement.syncRender(),null==s||s(t,e)}},onSessionEnd:function(t,e){return n.stop(t,e)}},{transformPagePoint:this.visualElement.getTransformPagePoint()}))},t.prototype.stop=function(t,e){var n=this.isDragging;if(this.cancel(),n){var r=e.velocity;this.startAnimation(r);var o=this.getProps().onDragEnd;null==o||o(t,e)}},t.prototype.cancel=function(){var t,e;this.isDragging=!1,this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!1),null===(t=this.panSession)||void 0===t||t.end(),this.panSession=void 0,!this.getProps().dragPropagation&&this.openGlobalLock&&(this.openGlobalLock(),this.openGlobalLock=null),null===(e=this.visualElement.animationState)||void 0===e||e.setActive(Se.Drag,!1)},t.prototype.updateAxis=function(t,e,n){var r=this.getProps().drag;if(n&&Ti(t,r,this.currentDirection)){var o,i,a,s,u,l=this.getAxisMotionValue(t),c=this.originPoint[t]+n[t];this.constraints&&this.constraints[t]&&(o=c,i=this.constraints[t],a=this.elastic[t],s=i.min,u=i.max,void 0!==s&&o<s?o=a?Pn(s,o,a.min):Math.max(o,s):void 0!==u&&o>u&&(o=a?Pn(u,o,a.max):Math.min(o,u)),c=o),l.set(c)}},t.prototype.resolveConstraints=function(){var t=this,e=this.getProps(),n=e.dragConstraints,r=e.dragElastic,o=(this.visualElement.projection||{}).layout,i=this.constraints;n&&et(n)?this.constraints||(this.constraints=this.resolveRefConstraints()):this.constraints=!(!n||!o)&&function(t,e){var n=e.top,r=e.left,o=e.bottom,i=e.right;return{x:Qo(t.x,r,i),y:Qo(t.y,n,o)}}(o.actual,n),this.elastic=function(t){return void 0===t&&(t=ti),!1===t?t=0:!0===t&&(t=ti),{x:ei(t,"left","right"),y:ei(t,"top","bottom")}}(r),i!==this.constraints&&o&&this.constraints&&!this.hasMutatedConstraints&&ii((function(e){t.getAxisMotionValue(e)&&(t.constraints[e]=function(t,e){var n={};return void 0!==e.min&&(n.min=e.min-t.min),void 0!==e.max&&(n.max=e.max-t.min),n}(o.actual[e],t.constraints[e]))}))},t.prototype.resolveRefConstraints=function(){var t=this.getProps(),e=t.dragConstraints,n=t.onMeasureDragConstraints;if(!e||!et(e))return!1;var r=e.current;X(null!==r,"If `dragConstraints` is set as a React ref, that ref must be passed to another component's `ref` prop.");var o=this.visualElement.projection;if(!o||!o.layout)return!1;var i=function(t,e,n){var r=xi(t,n),o=e.scroll;return o&&(hi(r.x,o.x),hi(r.y,o.y)),r}(r,o.root,this.visualElement.getTransformPagePoint()),a=function(t,e){return{x:Jo(t.x,e.x),y:Jo(t.y,e.y)}}(o.layout.actual,i);if(n){var s=n(function(t){var e=t.x,n=t.y;return{top:n.min,right:e.max,bottom:n.max,left:e.min}}(a));this.hasMutatedConstraints=!!s,s&&(a=ai(s))}return a},t.prototype.startAnimation=function(t){var e=this,n=this.getProps(),r=n.drag,i=n.dragMomentum,a=n.dragElastic,s=n.dragTransition,u=n.dragSnapToOrigin,l=n.onDragTransitionEnd,c=this.constraints||{},d=ii((function(n){var l;if(Ti(n,r,e.currentDirection)){var d=null!==(l=null==c?void 0:c[n])&&void 0!==l?l:{};u&&(d={min:0,max:0});var f=a?200:1e6,p=a?40:1e7,v=o(o({type:"inertia",velocity:i?t[n]:0,bounceStiffness:f,bounceDamping:p,timeConstant:750,restDelta:1,restSpeed:10},s),d);return e.startAxisValueAnimation(n,v)}}));return Promise.all(d).then(l)},t.prototype.startAxisValueAnimation=function(t,e){return uo(t,this.getAxisMotionValue(t),0,e)},t.prototype.stopAnimation=function(){var t=this;ii((function(e){return t.getAxisMotionValue(e).stop()}))},t.prototype.getAxisMotionValue=function(t){var e,n,r="_drag"+t.toUpperCase();return this.visualElement.getProps()[r]||this.visualElement.getValue(t,null!==(n=null===(e=this.visualElement.getProps().initial)||void 0===e?void 0:e[t])&&void 0!==n?n:0)},t.prototype.snapToCursor=function(t){var e=this;ii((function(n){if(Ti(n,e.getProps().drag,e.currentDirection)){var r=e.visualElement.projection,o=e.getAxisMotionValue(n);if(r&&r.layout){var i=r.layout.actual[n],a=i.min,s=i.max;o.set(t[n]-Pn(a,s,.5))}}}))},t.prototype.scalePositionWithinConstraints=function(){var t,e=this,n=this.getProps(),r=n.drag,o=n.dragConstraints,i=this.visualElement.projection;if(et(o)&&i&&this.constraints){this.stopAnimation();var a={x:0,y:0};ii((function(t){var n,r,o,i,s,u=e.getAxisMotionValue(t);if(u){var l=u.get();a[t]=(n={min:l,max:l},r=e.constraints[t],o=.5,i=Go(n),(s=Go(r))>i?o=An(r.min,r.max-i,n.min):i>s&&(o=An(n.min,n.max-s,r.min)),fn(0,1,o))}}));var s=this.visualElement.getProps().transformTemplate;this.visualElement.getInstance().style.transform=s?s({},""):"none",null===(t=i.root)||void 0===t||t.updateScroll(),i.updateLayout(),this.resolveConstraints(),ii((function(t){if(Ti(t,r,null)){var n=e.getAxisMotionValue(t),o=e.constraints[t],i=o.min,s=o.max;n.set(Pn(i,s,a[t]))}}))}},t.prototype.addListeners=function(){var t,e=this;bi.set(this.visualElement,this);var n=He(this.visualElement.getInstance(),"pointerdown",(function(t){var n=e.getProps(),r=n.drag,o=n.dragListener;r&&(void 0===o||o)&&e.start(t)})),r=function(){et(e.getProps().dragConstraints)&&(e.constraints=e.resolveRefConstraints())},o=this.visualElement.projection,i=o.addEventListener("measure",r);o&&!o.layout&&(null===(t=o.root)||void 0===t||t.updateScroll(),o.updateLayout()),r();var a=Ce(window,"resize",(function(){return e.scalePositionWithinConstraints()}));return o.addEventListener("didUpdate",(function(t){var n=t.delta,r=t.hasLayoutChanged;e.isDragging&&r&&(ii((function(t){var r=e.getAxisMotionValue(t);r&&(e.originPoint[t]+=n[t].translate,r.set(r.get()+n[t].translate))})),e.visualElement.syncRender())})),function(){a(),n(),i()}},t.prototype.getProps=function(){var t=this.visualElement.getProps(),e=t.drag,n=void 0!==e&&e,r=t.dragDirectionLock,i=void 0!==r&&r,a=t.dragPropagation,s=void 0!==a&&a,u=t.dragConstraints,l=void 0!==u&&u,c=t.dragElastic,d=void 0===c?ti:c,f=t.dragMomentum,p=void 0===f||f;return o(o({},t),{drag:n,dragDirectionLock:i,dragPropagation:s,dragConstraints:l,dragElastic:d,dragMomentum:p})},t}();function Ti(t,e,n){return!(!0!==e&&e!==t||null!==n&&n!==t)}var Si={pan:un((function(t){var e=t.onPan,n=t.onPanStart,r=t.onPanEnd,o=t.onPanSessionStart,i=t.visualElement,a=e||n||r||o,s=(0,l.useRef)(null),u=(0,l.useContext)(K).transformPagePoint,c={onSessionStart:o,onStart:n,onMove:e,onEnd:function(t,e){s.current=null,r&&r(t,e)}};(0,l.useEffect)((function(){null!==s.current&&s.current.updateHandlers(c)})),ze(i,"pointerdown",a&&function(t){s.current=new Uo(t,c,{transformPagePoint:u})}),F((function(){return s.current&&s.current.end()}))})),drag:un((function(t){var e=t.dragControls,n=t.visualElement,r=L((function(){return new wi(n)}));(0,l.useEffect)((function(){return e&&e.subscribe(r)}),[r,e]),(0,l.useEffect)((function(){return r.addListeners()}),[r])}))},Ai=["LayoutMeasure","BeforeLayoutMeasure","LayoutUpdate","ViewportBoxUpdate","Update","Render","AnimationComplete","LayoutAnimationComplete","AnimationStart","LayoutAnimationStart","SetAxisTarget","Unmount"],Pi=function(t){var e=t.treeType,n=void 0===e?"":e,r=t.build,i=t.getBaseTarget,a=t.makeTargetAnimatable,l=t.measureViewportBox,c=t.render,d=t.readValueFromInstance,f=t.removeValueFromRenderState,p=t.sortNodePosition,v=t.scrapeMotionValuesFromProps;return function(t,e){var h=t.parent,m=t.props,g=t.presenceId,y=t.blockInitialAnimation,E=t.visualState,x=t.shouldReduceMotion;void 0===e&&(e={});var b,T,S=!1,A=E.latestValues,P=E.renderState,C=function(){var t=Ai.map((function(){return new po})),e={},n={clearAllListeners:function(){return t.forEach((function(t){return t.clear()}))},updatePropListeners:function(t){Ai.forEach((function(r){var o,i="on"+r,a=t[i];null===(o=e[r])||void 0===o||o.call(e),a&&(e[r]=n[i](a))}))}};return t.forEach((function(t,e){n["on"+Ai[e]]=function(e){return t.add(e)},n["notify"+Ai[e]]=function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return t.notify.apply(t,u([],s(e),!1))}})),n}(),V=new Map,R=new Map,O={},D=o({},A);function L(){b&&S&&(k(),c(b,P,m.style,H.projection))}function k(){r(H,P,A,e,m)}function N(){C.notifyUpdate(A)}function I(t,e){var n=e.onChange((function(e){A[t]=e,m.onUpdate&&M.update(N,!1,!0)})),r=e.onRenderRequest(H.scheduleRender);R.set(t,(function(){n(),r()}))}var j=v(m);for(var U in j){var B=j[U];void 0!==A[U]&&Pt(B)&&B.set(A[U],!1)}var F=at(m),_=st(m),H=o(o({treeType:n,current:null,depth:h?h.depth+1:0,parent:h,children:new Set,presenceId:g,shouldReduceMotion:x,variantChildren:_?new Set:void 0,isVisible:void 0,manuallyAnimateOnMount:Boolean(null==h?void 0:h.isMounted()),blockInitialAnimation:y,isMounted:function(){return Boolean(b)},mount:function(t){S=!0,b=H.current=t,H.projection&&H.projection.mount(t),_&&h&&!F&&(T=null==h?void 0:h.addVariantChild(H)),V.forEach((function(t,e){return I(e,t)})),null==h||h.children.add(H),H.setProps(m)},unmount:function(){var t;null===(t=H.projection)||void 0===t||t.unmount(),w.update(N),w.render(L),R.forEach((function(t){return t()})),null==T||T(),null==h||h.children.delete(H),C.clearAllListeners(),b=void 0,S=!1},addVariantChild:function(t){var e,n=H.getClosestVariantNode();if(n)return null===(e=n.variantChildren)||void 0===e||e.add(t),function(){return n.variantChildren.delete(t)}},sortNodePosition:function(t){return p&&n===t.treeType?p(H.getInstance(),t.getInstance()):0},getClosestVariantNode:function(){return _?H:null==h?void 0:h.getClosestVariantNode()},getLayoutId:function(){return m.layoutId},getInstance:function(){return b},getStaticValue:function(t){return A[t]},setStaticValue:function(t,e){return A[t]=e},getLatestValues:function(){return A},setVisibility:function(t){H.isVisible!==t&&(H.isVisible=t,H.scheduleRender())},makeTargetAnimatable:function(t,e){return void 0===e&&(e=!0),a(H,t,m,e)},measureViewportBox:function(){return l(b,m)},addValue:function(t,e){H.hasValue(t)&&H.removeValue(t),V.set(t,e),A[t]=e.get(),I(t,e)},removeValue:function(t){var e;V.delete(t),null===(e=R.get(t))||void 0===e||e(),R.delete(t),delete A[t],f(t,P)},hasValue:function(t){return V.has(t)},getValue:function(t,e){var n=V.get(t);return void 0===n&&void 0!==e&&(n=mo(e),H.addValue(t,n)),n},forEachValue:function(t){return V.forEach(t)},readValue:function(t){var n;return null!==(n=A[t])&&void 0!==n?n:d(b,t,e)},setBaseTarget:function(t,e){D[t]=e},getBaseTarget:function(t){if(i){var e=i(m,t);if(void 0!==e&&!Pt(e))return e}return D[t]}},C),{build:function(){return k(),P},scheduleRender:function(){M.render(L,!1,!0)},syncRender:L,setProps:function(t){(t.transformTemplate||m.transformTemplate)&&H.scheduleRender(),m=t,C.updatePropListeners(t),O=function(t,e,n){var r;for(var o in e){var i=e[o],a=n[o];if(Pt(i))t.addValue(o,i);else if(Pt(a))t.addValue(o,mo(i));else if(a!==i)if(t.hasValue(o)){var s=t.getValue(o);!s.hasAnimated&&s.set(i)}else t.addValue(o,mo(null!==(r=t.getStaticValue(o))&&void 0!==r?r:i))}for(var o in n)void 0===e[o]&&t.removeValue(o);return e}(H,v(m),O)},getProps:function(){return m},getVariant:function(t){var e;return null===(e=m.variants)||void 0===e?void 0:e[t]},getDefaultTransition:function(){return m.transition},getTransformPagePoint:function(){return m.transformPagePoint},getVariantContext:function(t){if(void 0===t&&(t=!1),t)return null==h?void 0:h.getVariantContext();if(!F){var e=(null==h?void 0:h.getVariantContext())||{};return void 0!==m.initial&&(e.initial=m.initial),e}for(var n={},r=0;r<Mi;r++){var o=Ci[r],i=m[o];(rt(i)||!1===i)&&(n[o]=i)}return n}});return H}},Ci=u(["initial"],s(Mo),!1),Mi=Ci.length;function Vi(t){return"string"==typeof t&&t.startsWith("var(--")}var Ri=/var\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\)/,Oi=4;function Di(t,e,n){void 0===n&&(n=1),X(n<=Oi,'Max CSS variable fallback depth detected in property "'.concat(t,'". This may indicate a circular fallback dependency.'));var r=s(function(t){var e=Ri.exec(t);if(!e)return[,];var n=s(e,3);return[n[1],n[2]]}(t),2),o=r[0],i=r[1];if(o){var a=window.getComputedStyle(e).getPropertyValue(o);return a?a.trim():Vi(i)?Di(i,e,n+1):i}}var Li,ki=new Set(["width","height","top","left","right","bottom","x","y"]),Ni=function(t){return ki.has(t)},Ii=function(t,e){t.set(e,!1),t.set(e)},ji=function(t){return t===zt||t===Bt};!function(t){t.width="width",t.height="height",t.left="left",t.right="right",t.top="top",t.bottom="bottom"}(Li||(Li={}));var Ui=function(t,e){return parseFloat(t.split(", ")[e])},Bi=function(t,e){return function(n,r){var o=r.transform;if("none"===o||!o)return 0;var i=o.match(/^matrix3d\((.+)\)$/);if(i)return Ui(i[1],e);var a=o.match(/^matrix\((.+)\)$/);return a?Ui(a[1],t):0}},Fi=new Set(["x","y","z"]),_i=Et.filter((function(t){return!Fi.has(t)})),Hi={width:function(t,e){var n=t.x,r=e.paddingLeft,o=void 0===r?"0":r,i=e.paddingRight,a=void 0===i?"0":i;return n.max-n.min-parseFloat(o)-parseFloat(a)},height:function(t,e){var n=t.y,r=e.paddingTop,o=void 0===r?"0":r,i=e.paddingBottom,a=void 0===i?"0":i;return n.max-n.min-parseFloat(o)-parseFloat(a)},top:function(t,e){var n=e.top;return parseFloat(n)},left:function(t,e){var n=e.left;return parseFloat(n)},bottom:function(t,e){var n=t.y,r=e.top;return parseFloat(r)+(n.max-n.min)},right:function(t,e){var n=t.x,r=e.left;return parseFloat(r)+(n.max-n.min)},x:Bi(4,13),y:Bi(5,14)},zi=function(t,e,n,r){var a=function(t,e,n){var r,a=i(e,[]),s=t.getInstance();if(!(s instanceof Element))return{target:a,transitionEnd:n};for(var u in n&&(n=o({},n)),t.forEachValue((function(t){var e=t.get();if(Vi(e)){var n=Di(e,s);n&&t.set(n)}})),a){var l=a[u];if(Vi(l)){var c=Di(l,s);c&&(a[u]=c,n&&(null!==(r=n[u])&&void 0!==r||(n[u]=l)))}}return{target:a,transitionEnd:n}}(t,e,r);return function(t,e,n,r){return function(t){return Object.keys(t).some(Ni)}(e)?function(t,e,n,r){void 0===n&&(n={}),void 0===r&&(r={}),e=o({},e),r=o({},r);var i=Object.keys(e).filter(Ni),a=[],u=!1,l=[];if(i.forEach((function(o){var i=t.getValue(o);if(t.hasValue(o)){var s,c=n[o],d=Eo(c),f=e[o];if(ge(f)){var p=f.length,v=null===f[0]?1:0;c=f[v],d=Eo(c);for(var h=v;h<p;h++)s?X(Eo(f[h])===s,"All keyframes must be of the same type"):(s=Eo(f[h]),X(s===d||ji(d)&&ji(s),"Keyframes must be of the same dimension as the current value"))}else s=Eo(f);if(d!==s)if(ji(d)&&ji(s)){var m=i.get();"string"==typeof m&&i.set(parseFloat(m)),"string"==typeof f?e[o]=parseFloat(f):Array.isArray(f)&&s===Bt&&(e[o]=f.map(parseFloat))}else(null==d?void 0:d.transform)&&(null==s?void 0:s.transform)&&(0===c||0===f)?0===c?i.set(s.transform(c)):e[o]=d.transform(f):(u||(a=function(t){var e=[];return _i.forEach((function(n){var r=t.getValue(n);void 0!==r&&(e.push([n,r.get()]),r.set(n.startsWith("scale")?1:0))})),e.length&&t.syncRender(),e}(t),u=!0),l.push(o),r[o]=void 0!==r[o]?r[o]:e[o],Ii(i,f))}})),l.length){var c=l.indexOf("height")>=0?window.pageYOffset:null,d=function(t,e,n){var r=e.measureViewportBox(),o=e.getInstance(),i=getComputedStyle(o),a=i.display,s={};"none"===a&&e.setStaticValue("display",t.display||"block"),n.forEach((function(t){s[t]=Hi[t](r,i)})),e.syncRender();var u=e.measureViewportBox();return n.forEach((function(n){var r=e.getValue(n);Ii(r,s[n]),t[n]=Hi[n](u,i)})),t}(e,t,l);return a.length&&a.forEach((function(e){var n=s(e,2),r=n[0],o=n[1];t.getValue(r).set(o)})),t.syncRender(),null!==c&&window.scrollTo({top:c}),{target:d,transitionEnd:r}}return{target:e,transitionEnd:r}}(t,e,n,r):{target:e,transitionEnd:r}}(t,e=a.target,n,r=a.transitionEnd)},Wi={treeType:"dom",readValueFromInstance:function(t,e){if(wt(e)){var n=to(e);return n&&n.default||0}var r,o=(r=t,window.getComputedStyle(r));return(Mt(e)?o.getPropertyValue(e):o[e])||0},sortNodePosition:function(t,e){return 2&t.compareDocumentPosition(e)?1:-1},getBaseTarget:function(t,e){var n;return null===(n=t.style)||void 0===n?void 0:n[e]},measureViewportBox:function(t,e){return xi(t,e.transformPagePoint)},resetTransform:function(t,e,n){var r=n.transformTemplate;e.style.transform=r?r({},""):"none",t.scheduleRender()},restoreTransform:function(t,e){t.style.transform=e.style.transform},removeValueFromRenderState:function(t,e){var n=e.vars,r=e.style;delete n[t],delete r[t]},makeTargetAnimatable:function(t,e,n,r){var a=n.transformValues;void 0===r&&(r=!0);var s=e.transition,u=e.transitionEnd,l=i(e,["transition","transitionEnd"]),c=function(t,e,n){var r,o,i={};for(var a in t)i[a]=null!==(r=To(a,e))&&void 0!==r?r:null===(o=n.getValue(a))||void 0===o?void 0:o.get();return i}(l,s||{},t);if(a&&(u&&(u=a(u)),l&&(l=a(l)),c&&(c=a(c))),r){!function(t,e,n){var r,o,i,a,s=Object.keys(e).filter((function(e){return!t.hasValue(e)})),u=s.length;if(u)for(var l=0;l<u;l++){var c=s[l],d=e[c],f=null;Array.isArray(d)&&(f=d[0]),null===f&&(f=null!==(o=null!==(r=n[c])&&void 0!==r?r:t.readValue(c))&&void 0!==o?o:e[c]),null!=f&&("string"==typeof f&&(/^\-?\d*\.?\d+$/.test(f)||lo(f))?f=parseFloat(f):!bo(f)&&Zn.test(d)&&(f=eo(c,d)),t.addValue(c,mo(f)),null!==(i=(a=n)[c])&&void 0!==i||(a[c]=f),t.setBaseTarget(c,f))}}(t,l,c);var d=zi(t,l,c,u);u=d.transitionEnd,l=d.target}return o({transition:s,transitionEnd:u},l)},scrapeMotionValuesFromProps:ve,build:function(t,e,n,r,o){void 0!==t.isVisible&&(e.style.visibility=t.isVisible?"visible":"hidden"),Zt(e,n,r,o.transformTemplate)},render:de},Gi=Pi(Wi),Xi=Pi(o(o({},Wi),{getBaseTarget:function(t,e){return t[e]},readValueFromInstance:function(t,e){var n;return wt(e)?(null===(n=to(e))||void 0===n?void 0:n.default)||0:(e=fe.has(e)?e:ce(e),t.getAttribute(e))},scrapeMotionValuesFromProps:he,build:function(t,e,n,r,o){ie(e,n,r,o.transformTemplate)},render:pe})),Yi=function(t,e){return mt(t)?Xi(e,{enableHardwareAcceleration:!1}):Gi(e,{enableHardwareAcceleration:!0})};function Zi(t,e){return e.max===e.min?0:t/(e.max-e.min)*100}var qi={correct:function(t,e){if(!e.target)return t;if("string"==typeof t){if(!Bt.test(t))return t;t=parseFloat(t)}var n=Zi(t,e.target.x),r=Zi(t,e.target.y);return"".concat(n,"% ").concat(r,"%")}},Ki="_$css",$i={correct:function(t,e){var n=e.treeScale,r=e.projectionDelta,o=t,i=t.includes("var("),a=[];i&&(t=t.replace(Ri,(function(t){return a.push(t),Ki})));var s=Zn.parse(t);if(s.length>5)return o;var u=Zn.createTransformer(t),l="number"!=typeof s[0]?1:0,c=r.x.scale*n.x,d=r.y.scale*n.y;s[0+l]/=c,s[1+l]/=d;var f=Pn(c,d,.5);"number"==typeof s[2+l]&&(s[2+l]/=f),"number"==typeof s[3+l]&&(s[3+l]/=f);var p=u(s);if(i){var v=0;p=p.replace(Ki,(function(){var t=a[v];return v++,t}))}return p}},Qi=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.componentDidMount=function(){var t,e=this,n=this.props,r=n.visualElement,i=n.layoutGroup,a=n.switchLayoutGroup,s=n.layoutId,u=r.projection;t=Ji,Object.assign(gt,t),u&&((null==i?void 0:i.group)&&i.group.add(u),(null==a?void 0:a.register)&&s&&a.register(u),u.root.didUpdate(),u.addEventListener("animationComplete",(function(){e.safeToRemove()})),u.setOptions(o(o({},u.options),{onExitComplete:function(){return e.safeToRemove()}}))),lt.hasEverUpdated=!0},e.prototype.getSnapshotBeforeUpdate=function(t){var e=this,n=this.props,r=n.layoutDependency,o=n.visualElement,i=n.drag,a=n.isPresent,s=o.projection;return s?(s.isPresent=a,i||t.layoutDependency!==r||void 0===r?s.willUpdate():this.safeToRemove(),t.isPresent!==a&&(a?s.promote():s.relegate()||M.postRender((function(){var t;(null===(t=s.getStack())||void 0===t?void 0:t.members.length)||e.safeToRemove()}))),null):null},e.prototype.componentDidUpdate=function(){var t=this.props.visualElement.projection;t&&(t.root.didUpdate(),!t.currentAnimation&&t.isLead()&&this.safeToRemove())},e.prototype.componentWillUnmount=function(){var t=this.props,e=t.visualElement,n=t.layoutGroup,r=t.switchLayoutGroup,o=e.projection;o&&(o.scheduleCheckAfterUnmount(),(null==n?void 0:n.group)&&n.group.remove(o),(null==r?void 0:r.deregister)&&r.deregister(o))},e.prototype.safeToRemove=function(){var t=this.props.safeToRemove;null==t||t()},e.prototype.render=function(){return null},e}(l.Component),Ji={borderRadius:o(o({},qi),{applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]}),borderTopLeftRadius:qi,borderTopRightRadius:qi,borderBottomLeftRadius:qi,borderBottomRightRadius:qi,boxShadow:$i},ta={measureLayout:function(t){var e=s(cn(),2),n=e[0],r=e[1],i=(0,l.useContext)(B);return l.createElement(Qi,o({},t,{layoutGroup:i,switchLayoutGroup:(0,l.useContext)(dt),isPresent:n,safeToRemove:r}))}},ea=["TopLeft","TopRight","BottomLeft","BottomRight"],na=ea.length,ra=function(t){return"string"==typeof t?parseFloat(t):t},oa=function(t){return"number"==typeof t||Bt.test(t)};function ia(t,e){var n;return null!==(n=t[e])&&void 0!==n?n:t.borderRadius}var aa=ua(0,.5,dr),sa=ua(.5,.95,ar);function ua(t,e,n){return function(r){return r<t?0:r>e?1:n(An(t,e,r))}}function la(t,e){t.min=e.min,t.max=e.max}function ca(t,e){la(t.x,e.x),la(t.y,e.y)}function da(t,e,n,r,o){return t=di(t-=e,1/n,r),void 0!==o&&(t=di(t,1/o,r)),t}function fa(t,e,n,r,o){var i=s(n,3),a=i[0],u=i[1],l=i[2];!function(t,e,n,r,o,i,a){if(void 0===e&&(e=0),void 0===n&&(n=1),void 0===r&&(r=.5),void 0===i&&(i=t),void 0===a&&(a=t),Ut.test(e)&&(e=parseFloat(e),e=Pn(a.min,a.max,e/100)-a.min),"number"==typeof e){var s=Pn(i.min,i.max,r);t===i&&(s-=e),t.min=da(t.min,e,n,s,o),t.max=da(t.max,e,n,s,o)}}(t,e[a],e[u],e[l],e.scale,r,o)}var pa=["x","scaleX","originX"],va=["y","scaleY","originY"];function ha(t,e,n,r){fa(t.x,e,pa,null==n?void 0:n.x,null==r?void 0:r.x),fa(t.y,e,va,null==n?void 0:n.y,null==r?void 0:r.y)}function ma(t){return 0===t.translate&&1===t.scale}function ga(t){return ma(t.x)&&ma(t.y)}function ya(t,e){return t.x.min===e.x.min&&t.x.max===e.x.max&&t.y.min===e.y.min&&t.y.max===e.y.max}var Ea=function(){function t(){this.members=[]}return t.prototype.add=function(t){co(this.members,t),t.scheduleRender()},t.prototype.remove=function(t){if(fo(this.members,t),t===this.prevLead&&(this.prevLead=void 0),t===this.lead){var e=this.members[this.members.length-1];e&&this.promote(e)}},t.prototype.relegate=function(t){var e,n=this.members.findIndex((function(e){return t===e}));if(0===n)return!1;for(var r=n;r>=0;r--){var o=this.members[r];if(!1!==o.isPresent){e=o;break}}return!!e&&(this.promote(e),!0)},t.prototype.promote=function(t,e){var n,r=this.lead;t!==r&&(this.prevLead=r,this.lead=t,t.show(),r&&(r.instance&&r.scheduleRender(),t.scheduleRender(),t.resumeFrom=r,e&&(t.resumeFrom.preserveOpacity=!0),r.snapshot&&(t.snapshot=r.snapshot,t.snapshot.latestValues=r.animationValues||r.latestValues,t.snapshot.isShared=!0),(null===(n=t.root)||void 0===n?void 0:n.isUpdating)&&(t.isLayoutDirty=!0),!1===t.options.crossfade&&r.hide()))},t.prototype.exitAnimationComplete=function(){this.members.forEach((function(t){var e,n,r,o,i;null===(n=(e=t.options).onExitComplete)||void 0===n||n.call(e),null===(i=null===(r=t.resumingFrom)||void 0===r?void 0:(o=r.options).onExitComplete)||void 0===i||i.call(o)}))},t.prototype.scheduleRender=function(){this.members.forEach((function(t){t.instance&&t.scheduleRender(!1)}))},t.prototype.removeLeadSnapshot=function(){this.lead&&this.lead.snapshot&&(this.lead.snapshot=void 0)},t}(),xa="translate3d(0px, 0px, 0) scale(1, 1) scale(1, 1)";function ba(t,e,n){var r=t.x.translate/e.x,o=t.y.translate/e.y,i="translate3d(".concat(r,"px, ").concat(o,"px, 0) ");if(i+="scale(".concat(1/e.x,", ").concat(1/e.y,") "),n){var a=n.rotate,s=n.rotateX,u=n.rotateY;a&&(i+="rotate(".concat(a,"deg) ")),s&&(i+="rotateX(".concat(s,"deg) ")),u&&(i+="rotateY(".concat(u,"deg) "))}var l=t.x.scale*e.x,c=t.y.scale*e.y;return(i+="scale(".concat(l,", ").concat(c,")"))===xa?"none":i}var wa=function(t,e){return t.depth-e.depth},Ta=function(){function t(){this.children=[],this.isDirty=!1}return t.prototype.add=function(t){co(this.children,t),this.isDirty=!0},t.prototype.remove=function(t){fo(this.children,t),this.isDirty=!0},t.prototype.forEach=function(t){this.isDirty&&this.children.sort(wa),this.isDirty=!1,this.children.forEach(t)},t}(),Sa=1e3;function Aa(t){var e=t.attachResizeListener,n=t.defaultParent,r=t.measureScroll,i=t.checkIsScrollRoot,a=t.resetTransform;return function(){function t(t,e,r){var o=this;void 0===e&&(e={}),void 0===r&&(r=null==n?void 0:n()),this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.potentialNodes=new Map,this.checkUpdateFailed=function(){o.isUpdating&&(o.isUpdating=!1,o.clearAllSnapshots())},this.updateProjection=function(){o.nodes.forEach(Da),o.nodes.forEach(La)},this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.id=t,this.latestValues=e,this.root=r?r.root||r:this,this.path=r?u(u([],s(r.path),!1),[r],!1):[],this.parent=r,this.depth=r?r.depth+1:0,t&&this.root.registerPotentialNode(t,this);for(var i=0;i<this.path.length;i++)this.path[i].shouldResetTransform=!0;this.root===this&&(this.nodes=new Ta)}return t.prototype.addEventListener=function(t,e){return this.eventHandlers.has(t)||this.eventHandlers.set(t,new po),this.eventHandlers.get(t).add(e)},t.prototype.notifyListeners=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];var r=this.eventHandlers.get(t);null==r||r.notify.apply(r,u([],s(e),!1))},t.prototype.hasListeners=function(t){return this.eventHandlers.has(t)},t.prototype.registerPotentialNode=function(t,e){this.potentialNodes.set(t,e)},t.prototype.mount=function(t,n){var r,i=this;if(void 0===n&&(n=!1),!this.instance){this.isSVG=t instanceof SVGElement&&"svg"!==t.tagName,this.instance=t;var a=this.options,s=a.layoutId,u=a.layout,l=a.visualElement;if(l&&!l.getInstance()&&l.mount(t),this.root.nodes.add(this),null===(r=this.parent)||void 0===r||r.children.add(this),this.id&&this.root.potentialNodes.delete(this.id),n&&(u||s)&&(this.isLayoutDirty=!0),e){var c,d=function(){return i.root.updateBlockedByResize=!1};e(t,(function(){i.root.updateBlockedByResize=!0,clearTimeout(c),c=window.setTimeout(d,250),lt.hasAnimatedSinceResize&&(lt.hasAnimatedSinceResize=!1,i.nodes.forEach(Oa))}))}s&&this.root.registerSharedNode(s,this),!1!==this.options.animate&&l&&(s||u)&&this.addEventListener("didUpdate",(function(t){var e,n,r,a,s,u=t.delta,c=t.hasLayoutChanged,d=t.hasRelativeTargetChanged,f=t.layout;if(i.isTreeAnimationBlocked())return i.target=void 0,void(i.relativeTarget=void 0);var p=null!==(n=null!==(e=i.options.transition)&&void 0!==e?e:l.getDefaultTransition())&&void 0!==n?n:Ba,v=l.getProps(),h=v.onLayoutAnimationStart,m=v.onLayoutAnimationComplete,g=!i.targetLayout||!ya(i.targetLayout,f)||d,y=!c&&d;if((null===(r=i.resumeFrom)||void 0===r?void 0:r.instance)||y||c&&(g||!i.currentAnimation)){i.resumeFrom&&(i.resumingFrom=i.resumeFrom,i.resumingFrom.resumingFrom=void 0),i.setAnimationOrigin(u,y);var E=o(o({},so(p,"layout")),{onPlay:h,onComplete:m});l.shouldReduceMotion&&(E.delay=0,E.type=!1),i.startAnimation(E)}else c||0!==i.animationProgress||i.finishAnimation(),i.isLead()&&(null===(s=(a=i.options).onExitComplete)||void 0===s||s.call(a));i.targetLayout=f}))}},t.prototype.unmount=function(){var t,e;this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this),null===(t=this.getStack())||void 0===t||t.remove(this),null===(e=this.parent)||void 0===e||e.children.delete(this),this.instance=void 0,w.preRender(this.updateProjection)},t.prototype.blockUpdate=function(){this.updateManuallyBlocked=!0},t.prototype.unblockUpdate=function(){this.updateManuallyBlocked=!1},t.prototype.isUpdateBlocked=function(){return this.updateManuallyBlocked||this.updateBlockedByResize},t.prototype.isTreeAnimationBlocked=function(){var t;return this.isAnimationBlocked||(null===(t=this.parent)||void 0===t?void 0:t.isTreeAnimationBlocked())||!1},t.prototype.startUpdate=function(){var t;this.isUpdateBlocked()||(this.isUpdating=!0,null===(t=this.nodes)||void 0===t||t.forEach(ka))},t.prototype.willUpdate=function(t){var e,n,r;if(void 0===t&&(t=!0),this.root.isUpdateBlocked())null===(n=(e=this.options).onExitComplete)||void 0===n||n.call(e);else if(!this.root.isUpdating&&this.root.startUpdate(),!this.isLayoutDirty){this.isLayoutDirty=!0;for(var o=0;o<this.path.length;o++){var i=this.path[o];i.shouldResetTransform=!0,i.updateScroll()}var a=this.options,s=a.layoutId,u=a.layout;if(void 0!==s||u){var l=null===(r=this.options.visualElement)||void 0===r?void 0:r.getProps().transformTemplate;this.prevTransformTemplateValue=null==l?void 0:l(this.latestValues,""),this.updateSnapshot(),t&&this.notifyListeners("willUpdate")}}},t.prototype.didUpdate=function(){if(this.isUpdateBlocked())return this.unblockUpdate(),this.clearAllSnapshots(),void this.nodes.forEach(Va);this.isUpdating&&(this.isUpdating=!1,this.potentialNodes.size&&(this.potentialNodes.forEach(Fa),this.potentialNodes.clear()),this.nodes.forEach(Ra),this.nodes.forEach(Pa),this.nodes.forEach(Ca),this.clearAllSnapshots(),T.update(),T.preRender(),T.render())},t.prototype.clearAllSnapshots=function(){this.nodes.forEach(Ma),this.sharedNodes.forEach(Na)},t.prototype.scheduleUpdateProjection=function(){M.preRender(this.updateProjection,!1,!0)},t.prototype.scheduleCheckAfterUnmount=function(){var t=this;M.postRender((function(){t.isLayoutDirty?t.root.didUpdate():t.root.checkUpdateFailed()}))},t.prototype.updateSnapshot=function(){if(!this.snapshot&&this.instance){var t=this.measure(),e=this.removeTransform(this.removeElementScroll(t));Ha(e),this.snapshot={measured:t,layout:e,latestValues:{}}}},t.prototype.updateLayout=function(){var t;if(this.instance&&(this.updateScroll(),this.options.alwaysMeasureLayout&&this.isLead()||this.isLayoutDirty)){if(this.resumeFrom&&!this.resumeFrom.instance)for(var e=0;e<this.path.length;e++)this.path[e].updateScroll();var n=this.measure();Ha(n);var r=this.layout;this.layout={measured:n,actual:this.removeElementScroll(n)},this.layoutCorrected=oi(),this.isLayoutDirty=!1,this.projectionDelta=void 0,this.notifyListeners("measure",this.layout.actual),null===(t=this.options.visualElement)||void 0===t||t.notifyLayoutMeasure(this.layout.actual,null==r?void 0:r.actual)}},t.prototype.updateScroll=function(){this.options.layoutScroll&&this.instance&&(this.isScrollRoot=i(this.instance),this.scroll=r(this.instance))},t.prototype.resetTransform=function(){var t;if(a){var e=this.isLayoutDirty||this.shouldResetTransform,n=this.projectionDelta&&!ga(this.projectionDelta),r=null===(t=this.options.visualElement)||void 0===t?void 0:t.getProps().transformTemplate,o=null==r?void 0:r(this.latestValues,""),i=o!==this.prevTransformTemplateValue;e&&(n||li(this.latestValues)||i)&&(a(this.instance,o),this.shouldResetTransform=!1,this.scheduleRender())}},t.prototype.measure=function(){var t=this.options.visualElement;if(!t)return oi();var e=t.measureViewportBox(),n=this.root.scroll;return n&&(hi(e.x,n.x),hi(e.y,n.y)),e},t.prototype.removeElementScroll=function(t){var e=oi();ca(e,t);for(var n=0;n<this.path.length;n++){var r=this.path[n],o=r.scroll,i=r.options,a=r.isScrollRoot;if(r!==this.root&&o&&i.layoutScroll){if(a){ca(e,t);var s=this.root.scroll;s&&(hi(e.x,-s.x),hi(e.y,-s.y))}hi(e.x,o.x),hi(e.y,o.y)}}return e},t.prototype.applyTransform=function(t,e){void 0===e&&(e=!1);var n=oi();ca(n,t);for(var r=0;r<this.path.length;r++){var o=this.path[r];!e&&o.options.layoutScroll&&o.scroll&&o!==o.root&&Ei(n,{x:-o.scroll.x,y:-o.scroll.y}),li(o.latestValues)&&Ei(n,o.latestValues)}return li(this.latestValues)&&Ei(n,this.latestValues),n},t.prototype.removeTransform=function(t){var e,n=oi();ca(n,t);for(var r=0;r<this.path.length;r++){var o=this.path[r];if(o.instance&&li(o.latestValues)){ui(o.latestValues)&&o.updateSnapshot();var i=oi();ca(i,o.measure()),ha(n,o.latestValues,null===(e=o.snapshot)||void 0===e?void 0:e.layout,i)}}return li(this.latestValues)&&ha(n,this.latestValues),n},t.prototype.setTargetDelta=function(t){this.targetDelta=t,this.root.scheduleUpdateProjection()},t.prototype.setOptions=function(t){var e;this.options=o(o(o({},this.options),t),{crossfade:null===(e=t.crossfade)||void 0===e||e})},t.prototype.clearMeasurements=function(){this.scroll=void 0,this.layout=void 0,this.snapshot=void 0,this.prevTransformTemplateValue=void 0,this.targetDelta=void 0,this.target=void 0,this.isLayoutDirty=!1},t.prototype.resolveTargetDelta=function(){var t,e,n,r,o=this.options,i=o.layout,a=o.layoutId;this.layout&&(i||a)&&(this.targetDelta||this.relativeTarget||(this.relativeParent=this.getClosestProjectingParent(),this.relativeParent&&this.relativeParent.layout&&(this.relativeTarget=oi(),this.relativeTargetOrigin=oi(),$o(this.relativeTargetOrigin,this.layout.actual,this.relativeParent.layout.actual),ca(this.relativeTarget,this.relativeTargetOrigin))),(this.relativeTarget||this.targetDelta)&&(this.target||(this.target=oi(),this.targetWithTransforms=oi()),this.relativeTarget&&this.relativeTargetOrigin&&(null===(t=this.relativeParent)||void 0===t?void 0:t.target)?(e=this.target,n=this.relativeTarget,r=this.relativeParent.target,qo(e.x,n.x,r.x),qo(e.y,n.y,r.y)):this.targetDelta?(Boolean(this.resumingFrom)?this.target=this.applyTransform(this.layout.actual):ca(this.target,this.layout.actual),vi(this.target,this.targetDelta)):ca(this.target,this.layout.actual),this.attemptToResolveRelativeTarget&&(this.attemptToResolveRelativeTarget=!1,this.relativeParent=this.getClosestProjectingParent(),this.relativeParent&&Boolean(this.relativeParent.resumingFrom)===Boolean(this.resumingFrom)&&!this.relativeParent.options.layoutScroll&&this.relativeParent.target&&(this.relativeTarget=oi(),this.relativeTargetOrigin=oi(),$o(this.relativeTargetOrigin,this.target,this.relativeParent.target),ca(this.relativeTarget,this.relativeTargetOrigin)))))},t.prototype.getClosestProjectingParent=function(){if(this.parent&&!li(this.parent.latestValues))return(this.parent.relativeTarget||this.parent.targetDelta)&&this.parent.layout?this.parent:this.parent.getClosestProjectingParent()},t.prototype.calcProjection=function(){var t,e=this.options,n=e.layout,r=e.layoutId;if(this.isTreeAnimating=Boolean((null===(t=this.parent)||void 0===t?void 0:t.isTreeAnimating)||this.currentAnimation||this.pendingAnimation),this.isTreeAnimating||(this.targetDelta=this.relativeTarget=void 0),this.layout&&(n||r)){var o=this.getLead();ca(this.layoutCorrected,this.layout.actual),function(t,e,n,r){var o,i;void 0===r&&(r=!1);var a=n.length;if(a){var s,u;e.x=e.y=1;for(var l=0;l<a;l++)u=(s=n[l]).projectionDelta,"contents"!==(null===(i=null===(o=s.instance)||void 0===o?void 0:o.style)||void 0===i?void 0:i.display)&&(r&&s.options.layoutScroll&&s.scroll&&s!==s.root&&Ei(t,{x:-s.scroll.x,y:-s.scroll.y}),u&&(e.x*=u.x.scale,e.y*=u.y.scale,vi(t,u)),r&&li(s.latestValues)&&Ei(t,s.latestValues))}}(this.layoutCorrected,this.treeScale,this.path,Boolean(this.resumingFrom)||this!==o);var i=o.target;if(i){this.projectionDelta||(this.projectionDelta=ri(),this.projectionDeltaWithTransform=ri());var a=this.treeScale.x,s=this.treeScale.y,u=this.projectionTransform;Zo(this.projectionDelta,this.layoutCorrected,i,this.latestValues),this.projectionTransform=ba(this.projectionDelta,this.treeScale),this.projectionTransform===u&&this.treeScale.x===a&&this.treeScale.y===s||(this.hasProjected=!0,this.scheduleRender(),this.notifyListeners("projectionUpdate",i))}}},t.prototype.hide=function(){this.isVisible=!1},t.prototype.show=function(){this.isVisible=!0},t.prototype.scheduleRender=function(t){var e,n,r;void 0===t&&(t=!0),null===(n=(e=this.options).scheduleRender)||void 0===n||n.call(e),t&&(null===(r=this.getStack())||void 0===r||r.scheduleRender()),this.resumingFrom&&!this.resumingFrom.instance&&(this.resumingFrom=void 0)},t.prototype.setAnimationOrigin=function(t,e){var n,r=this;void 0===e&&(e=!1);var i=this.snapshot,a=(null==i?void 0:i.latestValues)||{},s=o({},this.latestValues),u=ri();this.relativeTarget=this.relativeTargetOrigin=void 0,this.attemptToResolveRelativeTarget=!e;var l=oi(),c=null==i?void 0:i.isShared,d=((null===(n=this.getStack())||void 0===n?void 0:n.members.length)||0)<=1,f=Boolean(c&&!d&&!0===this.options.crossfade&&!this.path.some(Ua));this.animationProgress=0,this.mixTargetDelta=function(e){var n,o,i,p,v,h=e/1e3;Ia(u.x,t.x,h),Ia(u.y,t.y,h),r.setTargetDelta(u),r.relativeTarget&&r.relativeTargetOrigin&&r.layout&&(null===(n=r.relativeParent)||void 0===n?void 0:n.layout)&&($o(l,r.layout.actual,r.relativeParent.layout.actual),o=r.relativeTarget,i=r.relativeTargetOrigin,p=l,v=h,ja(o.x,i.x,p.x,v),ja(o.y,i.y,p.y,v)),c&&(r.animationValues=s,function(t,e,n,r,o,i){var a,s,u,l;o?(t.opacity=Pn(0,null!==(a=n.opacity)&&void 0!==a?a:1,aa(r)),t.opacityExit=Pn(null!==(s=e.opacity)&&void 0!==s?s:1,0,sa(r))):i&&(t.opacity=Pn(null!==(u=e.opacity)&&void 0!==u?u:1,null!==(l=n.opacity)&&void 0!==l?l:1,r));for(var c=0;c<na;c++){var d="border".concat(ea[c],"Radius"),f=ia(e,d),p=ia(n,d);void 0===f&&void 0===p||(f||(f=0),p||(p=0),0===f||0===p||oa(f)===oa(p)?(t[d]=Math.max(Pn(ra(f),ra(p),r),0),(Ut.test(p)||Ut.test(f))&&(t[d]+="%")):t[d]=p)}(e.rotate||n.rotate)&&(t.rotate=Pn(e.rotate||0,n.rotate||0,r))}(s,a,r.latestValues,h,f,d)),r.root.scheduleUpdateProjection(),r.scheduleRender(),r.animationProgress=h},this.mixTargetDelta(0)},t.prototype.startAnimation=function(t){var e,n,r=this;this.notifyListeners("animationStart"),null===(e=this.currentAnimation)||void 0===e||e.stop(),this.resumingFrom&&(null===(n=this.resumingFrom.currentAnimation)||void 0===n||n.stop()),this.pendingAnimation&&(w.update(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=M.update((function(){lt.hasAnimatedSinceResize=!0,r.currentAnimation=function(t,e,n){void 0===n&&(n={});var r=Pt(0)?0:mo(0);return uo("",r,e,n),{stop:function(){return r.stop()},isAnimating:function(){return r.isAnimating()}}}(0,Sa,o(o({},t),{onUpdate:function(e){var n;r.mixTargetDelta(e),null===(n=t.onUpdate)||void 0===n||n.call(t,e)},onComplete:function(){var e;null===(e=t.onComplete)||void 0===e||e.call(t),r.completeAnimation()}})),r.resumingFrom&&(r.resumingFrom.currentAnimation=r.currentAnimation),r.pendingAnimation=void 0}))},t.prototype.completeAnimation=function(){var t;this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0),null===(t=this.getStack())||void 0===t||t.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")},t.prototype.finishAnimation=function(){var t;this.currentAnimation&&(null===(t=this.mixTargetDelta)||void 0===t||t.call(this,Sa),this.currentAnimation.stop()),this.completeAnimation()},t.prototype.applyTransformsToTarget=function(){var t=this.getLead(),e=t.targetWithTransforms,n=t.target,r=t.layout,o=t.latestValues;e&&n&&r&&(ca(e,n),Ei(e,o),Zo(this.projectionDeltaWithTransform,this.layoutCorrected,e,o))},t.prototype.registerSharedNode=function(t,e){var n,r,o;this.sharedNodes.has(t)||this.sharedNodes.set(t,new Ea),this.sharedNodes.get(t).add(e),e.promote({transition:null===(n=e.options.initialPromotionConfig)||void 0===n?void 0:n.transition,preserveFollowOpacity:null===(o=null===(r=e.options.initialPromotionConfig)||void 0===r?void 0:r.shouldPreserveFollowOpacity)||void 0===o?void 0:o.call(r,e)})},t.prototype.isLead=function(){var t=this.getStack();return!t||t.lead===this},t.prototype.getLead=function(){var t;return this.options.layoutId&&(null===(t=this.getStack())||void 0===t?void 0:t.lead)||this},t.prototype.getPrevLead=function(){var t;return this.options.layoutId?null===(t=this.getStack())||void 0===t?void 0:t.prevLead:void 0},t.prototype.getStack=function(){var t=this.options.layoutId;if(t)return this.root.sharedNodes.get(t)},t.prototype.promote=function(t){var e=void 0===t?{}:t,n=e.needsReset,r=e.transition,o=e.preserveFollowOpacity,i=this.getStack();i&&i.promote(this,o),n&&(this.projectionDelta=void 0,this.needsReset=!0),r&&this.setOptions({transition:r})},t.prototype.relegate=function(){var t=this.getStack();return!!t&&t.relegate(this)},t.prototype.resetRotation=function(){var t=this.options.visualElement;if(t){for(var e=!1,n={},r=0;r<yt.length;r++){var o="rotate"+yt[r];t.getStaticValue(o)&&(e=!0,n[o]=t.getStaticValue(o),t.setStaticValue(o,0))}if(e){for(var o in null==t||t.syncRender(),n)t.setStaticValue(o,n[o]);t.scheduleRender()}}},t.prototype.getProjectionStyles=function(t){var e,n,r,o,i,a;void 0===t&&(t={});var s={};if(!this.instance||this.isSVG)return s;if(!this.isVisible)return{visibility:"hidden"};s.visibility="";var u=null===(e=this.options.visualElement)||void 0===e?void 0:e.getProps().transformTemplate;if(this.needsReset)return this.needsReset=!1,s.opacity="",s.pointerEvents=xe(t.pointerEvents)||"",s.transform=u?u(this.latestValues,""):"none",s;var l=this.getLead();if(!this.projectionDelta||!this.layout||!l.target){var c={};return this.options.layoutId&&(c.opacity=null!==(n=this.latestValues.opacity)&&void 0!==n?n:1,c.pointerEvents=xe(t.pointerEvents)||""),this.hasProjected&&!li(this.latestValues)&&(c.transform=u?u({},""):"none",this.hasProjected=!1),c}var d=l.animationValues||l.latestValues;this.applyTransformsToTarget(),s.transform=ba(this.projectionDeltaWithTransform,this.treeScale,d),u&&(s.transform=u(d,s.transform));var f=this.projectionDelta,p=f.x,v=f.y;for(var h in s.transformOrigin="".concat(100*p.origin,"% ").concat(100*v.origin,"% 0"),l.animationValues?s.opacity=l===this?null!==(o=null!==(r=d.opacity)&&void 0!==r?r:this.latestValues.opacity)&&void 0!==o?o:1:this.preserveOpacity?this.latestValues.opacity:d.opacityExit:s.opacity=l===this?null!==(i=d.opacity)&&void 0!==i?i:"":null!==(a=d.opacityExit)&&void 0!==a?a:0,gt)if(void 0!==d[h]){var m=gt[h],g=m.correct,y=m.applyTo,E=g(d[h],l);if(y)for(var x=y.length,b=0;b<x;b++)s[y[b]]=E;else s[h]=E}return this.options.layoutId&&(s.pointerEvents=l===this?xe(t.pointerEvents)||"":"none"),s},t.prototype.clearSnapshot=function(){this.resumeFrom=this.snapshot=void 0},t.prototype.resetTree=function(){this.root.nodes.forEach((function(t){var e;return null===(e=t.currentAnimation)||void 0===e?void 0:e.stop()})),this.root.nodes.forEach(Va),this.root.sharedNodes.clear()},t}()}function Pa(t){t.updateLayout()}function Ca(t){var e,n,r,o,i=null!==(n=null===(e=t.resumeFrom)||void 0===e?void 0:e.snapshot)&&void 0!==n?n:t.snapshot;if(t.isLead()&&t.layout&&i&&t.hasListeners("didUpdate")){var a=t.layout,s=a.actual,u=a.measured;"size"===t.options.animationType?ii((function(t){var e=i.isShared?i.measured[t]:i.layout[t],n=Go(e);e.min=s[t].min,e.max=e.min+n})):"position"===t.options.animationType&&ii((function(t){var e=i.isShared?i.measured[t]:i.layout[t],n=Go(s[t]);e.max=e.min+n}));var l=ri();Zo(l,s,i.layout);var c=ri();i.isShared?Zo(c,t.applyTransform(u,!0),i.measured):Zo(c,s,i.layout);var d=!ga(l),f=!1;if(!t.resumeFrom&&(t.relativeParent=t.getClosestProjectingParent(),t.relativeParent&&!t.relativeParent.resumeFrom)){var p=t.relativeParent,v=p.snapshot,h=p.layout;if(v&&h){var m=oi();$o(m,i.layout,v.layout);var g=oi();$o(g,s,h.actual),ya(m,g)||(f=!0)}}t.notifyListeners("didUpdate",{layout:s,snapshot:i,delta:c,layoutDelta:l,hasLayoutChanged:d,hasRelativeTargetChanged:f})}else t.isLead()&&(null===(o=(r=t.options).onExitComplete)||void 0===o||o.call(r));t.options.transition=void 0}function Ma(t){t.clearSnapshot()}function Va(t){t.clearMeasurements()}function Ra(t){var e=t.options.visualElement;(null==e?void 0:e.getProps().onBeforeLayoutMeasure)&&e.notifyBeforeLayoutMeasure(),t.resetTransform()}function Oa(t){t.finishAnimation(),t.targetDelta=t.relativeTarget=t.target=void 0}function Da(t){t.resolveTargetDelta()}function La(t){t.calcProjection()}function ka(t){t.resetRotation()}function Na(t){t.removeLeadSnapshot()}function Ia(t,e,n){t.translate=Pn(e.translate,0,n),t.scale=Pn(e.scale,1,n),t.origin=e.origin,t.originPoint=e.originPoint}function ja(t,e,n,r){t.min=Pn(e.min,n.min,r),t.max=Pn(e.max,n.max,r)}function Ua(t){return t.animationValues&&void 0!==t.animationValues.opacityExit}var Ba={duration:.45,ease:[.4,0,.1,1]};function Fa(t,e){for(var n=t.root,r=t.path.length-1;r>=0;r--)if(Boolean(t.path[r].instance)){n=t.path[r];break}var o=(n&&n!==t.root?n.instance:document).querySelector('[data-projection-id="'.concat(e,'"]'));o&&t.mount(o,!0)}function _a(t){t.min=Math.round(t.min),t.max=Math.round(t.max)}function Ha(t){_a(t.x),_a(t.y)}var za=Aa({attachResizeListener:function(t,e){return Ce(t,"resize",e)},measureScroll:function(){return{x:document.documentElement.scrollLeft||document.body.scrollLeft,y:document.documentElement.scrollTop||document.body.scrollTop}},checkIsScrollRoot:function(){return!0}}),Wa={current:void 0},Ga=Aa({measureScroll:function(t){return{x:t.scrollLeft,y:t.scrollTop}},defaultParent:function(){if(!Wa.current){var t=new za(0,{});t.mount(window),t.setOptions({layoutScroll:!0}),Wa.current=t}return Wa.current},resetTransform:function(t,e){t.style.transform=null!=e?e:"none"},checkIsScrollRoot:function(t){return Boolean("fixed"===window.getComputedStyle(t).position)}}),Xa=o(o(o(o({},Lo),ln),Si),ta),Ya=vt((function(t,e){return function(t,e,n,r,i){var a=e.forwardMotionProps,s=void 0!==a&&a,u=mt(t)?Ae:Pe;return o(o({},u),{preloadedFeatures:n,useRender:ue(s),createVisualElement:r,projectionNodeConstructor:i,Component:t})}(t,e,Xa,Yi,Ga)}));const Za=require("react-dom"),qa={SHOWROOM:"/showroom",SENDOUTS:"/sendouts",SENDOUTS_CMS:"/sendouts-cms",MARKETING_ENGINE:"/media",USER_MANAGEMENT:"/users",TENANTS:"/tenants",DASHBOARD:"/dashboard",DASHBOARD_CREATE_WORKSPACE_MODAL:"/dashboard/create-workspace",CREATE_WORKSPACE:"/create-workspace",SETTINGS:"/settings",INSTORE_ADMIN:"/instore-admin",SUPERADMIN:"/superadmin",CMS:"/cms",INSTORE:"/instore"},Ka=300,$a=300,Qa=require("@touchtech/web-auth"),Ja=require("@touchtech/web-tenant-id-provider");var ts;!function(t){t.OPEN="OPEN",t.HIDDEN="HIDDEN",t.EXPANDED="EXPANDED"}(ts||(ts={}));const es=c().createContext({});function ns(){return(0,l.useContext)(es)}function rs({children:t,isOpen:e,onNavigationClose:n=(()=>{})}){const[r]=(0,l.useContext)(Ja.TenantIdContext),[o,i]=(0,l.useState)({selectedTenantId:r,currentPosition:ts.HIDDEN}),{user:s,authService:u,canSignOut:d}=(0,l.useContext)(Qa.AuthContext);(0,l.useEffect)((()=>{i(e?t=>Object.assign(Object.assign({},t),{selectedTenantId:r,currentPosition:ts.OPEN}):t=>Object.assign(Object.assign({},t),{currentPosition:ts.HIDDEN}))}),[r,e,i]),(0,l.useEffect)((()=>{e&&u.refreshUser(300)}),[u,e]);const f=(0,l.useMemo)((()=>!!s&&(0,Qa.userHasTenantAccess)(s,o.selectedTenantId,Qa.Privileges.MARKETING_ENGINE_APP)),[o.selectedTenantId,s]),p=(0,l.useMemo)((()=>!!s&&(0,Qa.userHasTenantAccess)(s,o.selectedTenantId,Qa.Privileges.SHOWROOM_APP)),[o.selectedTenantId,s]),v=(0,l.useMemo)((()=>!!s&&(0,Qa.userHasTenantAccess)(s,o.selectedTenantId,Qa.Privileges.SENDOUTS_APP)),[o.selectedTenantId,s]),h=(0,l.useMemo)((()=>!!s&&(0,Qa.userHasTenantAccess)(s,o.selectedTenantId,Qa.Privileges.SENDOUTS_CMS_APP)),[o.selectedTenantId,s]),m=(0,l.useMemo)((()=>!!s&&(0,Qa.userHasTenantAccess)(s,o.selectedTenantId,Qa.Privileges.USER_MANAGEMENT_APP)),[o.selectedTenantId,s]),g=(0,l.useMemo)((()=>!!s&&(0,Qa.userHasTenantAccess)(s,o.selectedTenantId,Qa.Privileges.UNIVERSAL)),[o.selectedTenantId,s]),y=(0,l.useMemo)((()=>!!s&&(0,Qa.userHasTenantAccess)(s,o.selectedTenantId,"settings-app")),[o.selectedTenantId,s]),E=(0,l.useMemo)((()=>!!s&&(0,Qa.userHasTenantAccess)(s,o.selectedTenantId,"instore-admin-app")),[o.selectedTenantId,s]),x=(0,l.useCallback)((t=>i((e=>Object.assign(Object.assign({},e),t)))),[]),b=(0,l.useCallback)((()=>a(this,void 0,void 0,(function*(){d&&(yield u.signOut())}))),[u,d]),w=(0,l.useCallback)((()=>{o.currentPosition!==ts.OPEN?o.currentPosition!==ts.EXPANDED||x({currentPosition:ts.OPEN}):x({currentPosition:ts.EXPANDED,selectedTenantId:r})}),[r,x,o.currentPosition]),T=(0,l.useMemo)((()=>({hasMarketingEngineAccess:f,hasShowroomAccess:p,hasSendoutsAccess:v,hasCmsAccess:h,hasUserManagementAccess:m,hasUniversalAccess:g,hasSettingsAccess:y,hasInstoreAccess:E,viewState:o,updateViewState:x,signOut:b,toggleTenants:w,onNavigationClose:n})),[f,v,h,p,m,g,y,E,o,x,b,w,n]);return c().createElement(es.Provider,{value:T},t)}const os="tKygQ4LMDikHs5Hsh0Qk";function is(t){if("string"==typeof t||"number"==typeof t)return""+t;let e="";if(Array.isArray(t))for(let n,r=0;r<t.length;r++)""!==(n=is(t[r]))&&(e+=(e&&" ")+n);else for(let n in t)t[n]&&(e+=(e&&" ")+n);return e}const as=require("@touchtech/baselayer-ui"),ss=require("@touchtech/web-api-client"),us=require("swr");var ls=t.n(us);function cs(){const t=(0,ss.useApi)(),e=function(){var t;const e=null!==(t=process.env.TENANTS_SERVICE_URL)&&void 0!==t?t:process.env.REACT_APP_TENANTS_SERVICE_URL;if(!e)throw new Error("TENANTS_SERVICE_URL or REACT_APP_TENANTS_SERVICE_URL must be set");return(0,ss.createUrl)(e,"/api/Tenants/view")}(),{data:n,error:r}=ls()(e,t.get);return{tenants:null!=n?n:[],isLoading:!n&&!r,error:r}}const ds=function({layout:t}){const{viewState:{selectedTenantId:e}}=ns(),{tenants:n}=cs(),r=(0,l.useMemo)((()=>n.find((t=>t.id===e))),[e,n]);return r?c().createElement(as.Image,{src:r.logoUrl,layout:t}):null},fs="alkxjZvTgAcsz0JRkm6c",ps="p4JPb4DzmGoZOIhO09ws",vs="x0_VF3BXbWUtlCCgOtQZ",hs="jWPBZu8iLDyyTn6eW6kw",ms="gb6t82xpZU7ymkUdSux_",gs=function({children:t,header:e,footer:n,className:r,width:o,showHeaderBorder:i}){return c().createElement("div",{className:is([fs,r]),style:{width:o}},!!e&&c().createElement("div",{className:is([ps,{[vs]:i}])},e),c().createElement("div",{className:hs},t),!!n&&c().createElement("div",{className:ms},n))},ys=require("react-router-dom"),Es="RuYyU4ZU982IBgdb1Nr2",xs="mDVPC452sIZ1AZ12Hupu",bs=function({children:t,to:e,hidden:n,disabled:r,onClick:o}){const[i,a]=(0,l.useContext)(Ja.TenantIdContext),[s,u]=(0,l.useState)(!1),{viewState:{selectedTenantId:d}}=ns();(0,l.useEffect)((()=>{const t=()=>{i!==d&&s&&a(d)};return window.addEventListener("unload",t),()=>{window.removeEventListener("unload",t)}}),[a,i,d,s]);const f=(0,l.useCallback)((()=>{o?o(u):e&&(u(!0),window.location.assign(e))}),[e,o]),p=!!e&&!!(0,ys.matchPath)(`${e}/*`,window.location.pathname)&&i===d;return n?null:c().createElement(as.Button,{align:"left",noBorder:!0,className:is([Es,{[xs]:p}]),noShadow:!0,disabled:p||r,onClick:f},t)},ws="xq2NhM9BEi_W4nwT3yh2",Ts="BGjEtVj4r_GL1XRPggdK",Ss="VaoS9sXTECATv5AlheWA",As="WuTrGz3UU3pH1fVTiCTZ",Ps="Coh2DFrCNYqjuH_r7MvG",Cs="MOX9IB0nSx5cfLHrcoOZ",Ms="mwOFiCMJUcwQgN71e7sC",Vs="AVG7kB9Fyvbb6jW3FA0B",Rs="VKsHJOXcQi174s94qmOo",Os="SWnA20nAEkR6goWGlFre",Ds="HeDayZpMaiaMwoXvRFoD",Ls="XF2F_YGE6PmxS0tEVvP2",ks="V3IZL1yVbMWIposjQAL8",Ns="Zgx8Dpy2pAdOoqTtMMQi",Is="AZnlFbzTGExGtpYh4_LY",js="q8vjvRoPyWxP_4biO7ye",Us="K7BSR_sOQntynVNNrX45",Bs="ju83eDu5c266Yv8fgYiX",Fs=function(){const{user:t}=(0,l.useContext)(Qa.AuthContext),{signOut:e,onNavigationClose:n,toggleTenants:r,hasShowroomAccess:o,hasMarketingEngineAccess:i,hasSendoutsAccess:s,hasCmsAccess:u,hasUserManagementAccess:d,hasSettingsAccess:f,hasUniversalAccess:p,hasInstoreAccess:v,viewState:h}=ns(),m=function(){const{viewState:{selectedTenantId:t}}=ns(),{tenants:e}=cs();return(0,l.useMemo)((()=>e.find((e=>e.id===t))),[e,t])}(),g=m&&Boolean(m.planName),[y,E]=(0,l.useState)(!1),[x,b]=(0,l.useState)(!1),w=function(){const t=(0,ss.useApi)(),e=(()=>{var t;const e=null!==(t=process.env.TENANTS_SERVICE_URL)&&void 0!==t?t:process.env.REACT_APP_TENANTS_SERVICE_URL;if(!e)throw new Error("TENANTS_SERVICE_URL or REACT_APP_TENANTS_SERVICE_URL must be set");return(0,ss.createUrl)(e,"/api/Subscriptions/create-customer-portal-session")})(),{viewState:n}=ns(),[r]=(0,l.useContext)(Ja.TenantIdContext);return(0,l.useCallback)((o=>a(this,void 0,void 0,(function*(){const i=o.replace(/^\//,"");t.setHeader("tenant-id",n.selectedTenantId);try{return yield t.post(e,i)}finally{r&&t.setHeader("tenant-id",r)}}))),[t,e,n])}(),T=(0,l.useCallback)((t=>a(this,void 0,void 0,(function*(){try{b(!0);const e=yield w(window.location.pathname);t(!0),window.location.assign(e.text)}catch(t){b(!1),E(!0),yield(e=2500,new Promise((t=>setTimeout(t,e)))),E(!1)}var e}))),[h.selectedTenantId,b,w]);return c().createElement(gs,{className:ws,width:$a,showHeaderBorder:!0,header:c().createElement("div",{className:Ts},c().createElement("div",{className:Ss},c().createElement("div",{className:As},c().createElement(ds,null)),c().createElement("div",{className:Ps,onClick:n},c().createElement(as.Icon,{src:"data:image/svg+xml,%3csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M0.398438 0.399902L19.5984 19.5999M0.398438 19.5999L19.5984 0.399902' stroke='black'/%3e %3c/svg%3e",size:"large"}))),c().createElement(as.Button,{align:"left",noBorder:!0,transparent:!0,className:Cs,onClick:r},"Change brand")),footer:c().createElement("div",{className:ks,onClick:e},c().createElement("div",{className:Ns},c().createElement("div",{className:Is},c().createElement(as.Icon,{src:"data:image/svg+xml,%3csvg width='14' height='15' viewBox='0 0 14 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M7 1.5999L10.4667 4.7999M7 1.5999L3.8 4.7999M7 1.5999L7 11.7332M13.4 7.46657L13.4 14.3999L0.600002 14.3999L0.600002 7.46657' stroke='%232D2D33'/%3e %3c/svg%3e",size:"medium"})),c().createElement("div",{className:js},"Sign out")))},c().createElement("div",{className:Ms},c().createElement("div",{className:Vs},c().createElement("div",{className:Rs},c().createElement(bs,{to:qa.DASHBOARD},"Dashboard"),c().createElement(bs,{hidden:!o,to:qa.SHOWROOM},"Presentations (Showroom)"),c().createElement(bs,{hidden:!s,to:qa.SENDOUTS},"Sendouts"),c().createElement(bs,{hidden:!i,to:qa.MARKETING_ENGINE},"Media Library"),c().createElement(bs,{hidden:!v||!p,to:qa.INSTORE},"Store"),c().createElement(bs,{hidden:!u,to:qa.CMS},"Content Manager"),c().createElement(bs,{hidden:!d,to:qa.USER_MANAGEMENT},"Users"),c().createElement(bs,{hidden:!p&&!f,to:qa.SETTINGS},"Settings"),c().createElement(bs,{disabled:x,onClick:T,hidden:!p||!g,to:"#"},c().createElement("span",{className:is({[Us]:y})},"Subscription"),x?c().createElement(as.Icon,{size:"xlarge",src:"data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8' standalone='no'%3f%3e %3c!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e %3csvg width='100%25' height='100%25' viewBox='0 0 46 46' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' xml:space='preserve' xmlns:serif='http://www.serif.com/' style='fill-rule:evenodd%3bclip-rule:evenodd%3bstroke-linejoin:round%3bstroke-miterlimit:2%3b'%3e %3cg transform='matrix(1%2c0%2c0%2c1%2c-27%2c-27)'%3e %3cpath d='M73%2c50C73%2c37.3 62.7%2c27 50%2c27C37.3%2c27 27%2c37.3 27%2c50M30.9%2c50C30.9%2c39.5 39.4%2c30.9 50%2c30.9C60.6%2c30.9 69.1%2c39.5 69.1%2c50' style='fill-rule:nonzero%3b'%3e %3canimateTransform attributeName='transform' attributeType='XML' type='rotate' dur='1s' from='0 50 50' to='360 50 50' repeatCount='indefinite' /%3e %3c/path%3e %3c/g%3e %3c/svg%3e",alt:"Loading"}):""),y?c().createElement("p",{className:Bs},"Unable to access subscription page"):null),t&&c().createElement("div",{className:Os},c().createElement("div",{className:Ds},t.firstName," ",t.lastName),c().createElement("div",{className:Ls},t.email)))))},_s="oeuWMMcJvLzGVyzlkzri",Hs="bbUHwXdmTmLx1Bm14Atn",zs=function({tenant:t}){const{viewState:{selectedTenantId:e},updateViewState:n}=ns(),r=e===t.id;return c().createElement(as.Button,{key:t.id,align:"left",noBorder:!0,className:is([_s,{[Hs]:r}]),noShadow:!0,disabled:r,onClick:()=>{n({selectedTenantId:t.id,currentPosition:ts.OPEN})}},t.label)},Ws="TImCshnjb7UPVk2R4lZP",Gs="PLOWzDGNGXzLAJrH0RK3",Xs="xdEO_zIZZ4tFrfapkFFT",Ys="As12vynTQk_jknQIlJ8A",Zs="q2ws7axL5Ap1hQW3m16N",qs="zYkzNuNQhvIdWKZhoQGr",Ks="xxcu6ytXRcPl1GZJ2vd9",$s="QYhcvZqbZxgenG41kwNq",Qs=function(){const{toggleTenants:t}=ns(),{tenants:e}=cs();return c().createElement("div",{className:Ws},c().createElement(gs,{width:Ka,header:c().createElement("div",{className:Gs},c().createElement("div",{className:Xs,onClick:t},c().createElement(as.Icon,{src:"data:image/svg+xml,%3csvg width='22' height='14' viewBox='0 0 22 14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M1.6001 7.00039L8.0001 13.4004M1.6001 7.00039L8.0001 0.600391M1.6001 7.00039L21.6001 7.00039' stroke='%23262626'/%3e %3c/svg%3e",size:"large"}))),footer:c().createElement("div",{className:Zs,onClick:()=>window.location.assign(qa.CREATE_WORKSPACE)},c().createElement("div",{className:qs},c().createElement("div",{className:Ks},c().createElement(as.Icon,{src:"data:image/svg+xml,%3csvg width='14' height='14' viewBox='0 0 14 14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M0.00170906 7L13.0017 7M6.50171 13.5L6.50171 0.5' stroke='%232D2D33'/%3e %3c/svg%3e",size:"medium"})),c().createElement("div",{className:$s},"Create a brand workspace")))},c().createElement("div",{className:Ys},e.map((t=>c().createElement(zs,{tenant:t,key:t.id}))))))},Js="x4CcnKP0hsMpf8aTV1vc",tu=function(){return c().createElement("div",{className:Js},c().createElement(Fs,null),c().createElement(Qs,null))},eu=$a+Ka,nu={ease:"easeOut",duration:.3},ru={[ts.HIDDEN]:{left:-eu,transition:nu},[ts.OPEN]:{left:-$a,transition:nu},[ts.EXPANDED]:{left:0,transition:nu}},ou=function({isOpen:t,portalContainer:e=document.body,onClose:n}){return c().createElement(rs,{onNavigationClose:n,isOpen:t},c().createElement(es.Consumer,null,(({viewState:{currentPosition:t}})=>(0,Za.createPortal)(c().createElement(H,null,t!==ts.HIDDEN&&c().createElement(Ya.div,{className:os,initial:ts.HIDDEN,variants:ru,animate:t,exit:ts.HIDDEN},c().createElement(tu,null))),e))))},iu="data:image/svg+xml,%3csvg width='14' height='15' viewBox='0 0 14 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M0 1.5H14M0 5.5H14M0 9.5H14M0' stroke='black'/%3e %3c/svg%3e",au=function(t){var{size:e="medium",alt:n="Toggle navigation menu",src:r=iu,portalContainer:o=document.body}=t,a=i(t,["size","alt","src","portalContainer"]);const[u,d]=function(t){void 0===t&&(t=!1);var e=s((0,l.useState)(t),2),n=e[0],r=e[1];return[n,(0,l.useCallback)((function(t){r("boolean"==typeof t?t:function(t){return!t})}),[])]}(!1);return c().createElement(l.Fragment,null,c().createElement(as.IconButton,Object.assign({size:e,alt:n,src:r,onClick:()=>d()},a)),c().createElement(ou,{isOpen:u,portalContainer:o,onClose:()=>d()}))};var su=exports;for(var uu in e)su[uu]=e[uu];e.__esModule&&Object.defineProperty(su,"__esModule",{value:!0})})();
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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R0EzQkEsU0FBMEIsRyxJQUFBLEtBQ3hCcmtELEVBQU8sU0FBUSxJQUNmOGpELEVBQU0seUJBQXdCLElBQzlCM0MsRUFBTXVELEdBQVEsZ0JBQ2RMLEVBQWtCN21ELFNBQVM2K0MsTUFBSSxFQUM1Qno1QyxFQUFLLElBTGdCLHdDQU94QixNQUFPK2hELEVBQWtCQyxHQ25CWixTQUFtQkMsUUFDVCxJQUFqQkEsSUFBMkJBLEdBQWUsR0FDOUMsSUFBSXJtRCxFQUFLLEdBQU8sSUFBQWlDLFVBQVNva0QsR0FBZSxHQUFJanVELEVBQVE0SCxFQUFHLEdBQUlzbUQsRUFBV3RtRCxFQUFHLEdBV3pFLE1BQU8sQ0FBQzVILEdBVkssSUFBQWlLLGNBQVksU0FBVWtrRCxHQUUzQkQsRUFEb0Isa0JBQWJDLEVBQ0VBLEVBR0EsU0FBVXZjLEdBQ2YsT0FBUUEsQ0FDWixFQUVSLEdBQUcsSUFFUCxDREtxRHdjLEVBQVUsR0FFN0QsT0FDRSxrQkFBQyxFQUFBQyxTQUFRLEtBQ1Asa0JBQUMsR0FBQUMsV0FBVSxlQUNUbGxELEtBQU1BLEVBQ044akQsSUFBS0EsRUFDTDNDLElBQUtBLEVBQ0xRLFFBQVMsSUFBTWlELEtBQ1hoaUQsSUFFTixrQkFBQyxHQUFVLENBQ1RxN0MsT0FBUTBHLEVBQ1JOLGdCQUFpQkEsRUFDakJDLFFBQVMsSUFBTU0sTUFJdkIsRSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS9leHRlcm5hbCBjb21tb25qcyB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdXRpbHMvcHJvY2Vzcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lc3luYy9kaXN0L2VzL29uLW5leHQtZnJhbWUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXN5bmMvZGlzdC9lcy9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lc3luYy9kaXN0L2VzL2NyZWF0ZS1yZW5kZXItc3RlcC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy9pcy1icm93c2VyLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3V0aWxzL3VzZS1pc29tb3JwaGljLWVmZmVjdC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy91c2UtaXMtbW91bnRlZC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9jb250ZXh0L1ByZXNlbmNlQ29udGV4dC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy91c2UtY29uc3RhbnQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdXRpbHMvdXNlLWlkLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2NvbXBvbmVudHMvQW5pbWF0ZVByZXNlbmNlL1ByZXNlbmNlQ2hpbGQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvY29udGV4dC9MYXlvdXRHcm91cENvbnRleHQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdXRpbHMvdXNlLXVubW91bnQtZWZmZWN0Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2NvbXBvbmVudHMvQW5pbWF0ZVByZXNlbmNlL2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3V0aWxzL3VzZS1mb3JjZS11cGRhdGUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL2ZlYXR1cmVzL2RlZmluaXRpb25zLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvaGV5LWxpc3Rlbi9kaXN0L2hleS1saXN0ZW4uZXMuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9jb250ZXh0L0xhenlDb250ZXh0Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL21vdGlvbi9mZWF0dXJlcy91c2UtZmVhdHVyZXMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvY29udGV4dC9Nb3Rpb25Db25maWdDb250ZXh0Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2NvbnRleHQvTW90aW9uQ29udGV4dC9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy91c2UtcmVkdWNlZC1tb3Rpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL3V0aWxzL3VzZS12aXN1YWwtZWxlbWVudC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy9pcy1yZWYtb2JqZWN0Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci91dGlscy92YXJpYW50cy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9jb250ZXh0L01vdGlvbkNvbnRleHQvY3JlYXRlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vbm9kZS9zdGF0ZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL25vZGUvaWQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvY29udGV4dC9Td2l0Y2hMYXlvdXRHcm91cENvbnRleHQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL3V0aWxzL1Zpc3VhbEVsZW1lbnRIYW5kbGVyLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL21vdGlvbi9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9jb250ZXh0L01vdGlvbkNvbnRleHQvdXRpbHMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL2ZlYXR1cmVzL3VzZS1wcm9qZWN0aW9uLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL21vdGlvbi91dGlscy91c2UtbW90aW9uLXJlZi5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL21vdGlvbi1wcm94eS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvc3ZnL2xvd2VyY2FzZS1lbGVtZW50cy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3V0aWxzL2lzLXN2Zy1jb21wb25lbnQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcHJvamVjdGlvbi9zdHlsZXMvc2NhbGUtY29ycmVjdGlvbi5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvaHRtbC91dGlscy90cmFuc2Zvcm0ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL3V0aWxzL2lzLWZvcmNlZC1tb3Rpb24tdmFsdWUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdmFsdWUvdXRpbHMvaXMtbW90aW9uLXZhbHVlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9odG1sL3V0aWxzL2J1aWxkLXRyYW5zZm9ybS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3V0aWxzL2lzLWNzcy12YXJpYWJsZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3ZhbHVlLXR5cGVzL2dldC1hcy10eXBlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvc3R5bGUtdmFsdWUtdHlwZXMvZGlzdC9lcy91dGlscy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLXZhbHVlLXR5cGVzL2Rpc3QvZXMvbnVtYmVycy91bml0cy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLXZhbHVlLXR5cGVzL2Rpc3QvZXMvbnVtYmVycy9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3ZhbHVlLXR5cGVzL3R5cGUtaW50Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdmFsdWUtdHlwZXMvbnVtYmVyLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9odG1sL3V0aWxzL2J1aWxkLXN0eWxlcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvaHRtbC91dGlscy9jcmVhdGUtcmVuZGVyLXN0YXRlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9odG1sL3VzZS1wcm9wcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vdXRpbHMvdmFsaWQtcHJvcC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3V0aWxzL2ZpbHRlci1wcm9wcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvc3ZnL3V0aWxzL3RyYW5zZm9ybS1vcmlnaW4ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL3N2Zy91dGlscy9wYXRoLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9zdmcvdXRpbHMvYnVpbGQtYXR0cnMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL3N2Zy91dGlscy9jcmVhdGUtcmVuZGVyLXN0YXRlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9zdmcvdXNlLXByb3BzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdXNlLXJlbmRlci5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3V0aWxzL2NhbWVsLXRvLWRhc2gubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2h0bWwvdXRpbHMvcmVuZGVyLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9zdmcvdXRpbHMvY2FtZWwtY2FzZS1hdHRycy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvc3ZnL3V0aWxzL3JlbmRlci5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvaHRtbC91dGlscy9zY3JhcGUtbW90aW9uLXZhbHVlcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvc3ZnL3V0aWxzL3NjcmFwZS1tb3Rpb24tdmFsdWVzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2FuaW1hdGlvbi91dGlscy9pcy1hbmltYXRpb24tY29udHJvbHMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvYW5pbWF0aW9uL3V0aWxzL2lzLWtleWZyYW1lcy10YXJnZXQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdXRpbHMvcmVzb2x2ZS12YWx1ZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy92YWx1ZS91dGlscy9yZXNvbHZlLW1vdGlvbi12YWx1ZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vdXRpbHMvdXNlLXZpc3VhbC1zdGF0ZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvc3ZnL2NvbmZpZy1tb3Rpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL3V0aWxzL3R5cGVzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9odG1sL2NvbmZpZy1tb3Rpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZXZlbnRzL3VzZS1kb20tZXZlbnQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZ2VzdHVyZXMvdXRpbHMvZXZlbnQtdHlwZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9ldmVudHMvZXZlbnQtaW5mby5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9ldmVudHMvdXRpbHMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZXZlbnRzL3VzZS1wb2ludGVyLWV2ZW50Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2dlc3R1cmVzL2RyYWcvdXRpbHMvbG9jay5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9nZXN0dXJlcy91c2UtaG92ZXItZ2VzdHVyZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9nZXN0dXJlcy91dGlscy9pcy1ub2RlLW9yLWNoaWxkLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvdXRpbHMvcGlwZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy93YXJuLW9uY2UubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL2ZlYXR1cmVzL3ZpZXdwb3J0L29ic2VydmVycy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vZmVhdHVyZXMvdmlld3BvcnQvdXNlLXZpZXdwb3J0Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL21vdGlvbi91dGlscy9tYWtlLXJlbmRlcmxlc3MtY29tcG9uZW50Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL21vdGlvbi9mZWF0dXJlcy9nZXN0dXJlcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9nZXN0dXJlcy91c2UtdGFwLWdlc3R1cmUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZ2VzdHVyZXMvdXNlLWZvY3VzLWdlc3R1cmUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvY29tcG9uZW50cy9BbmltYXRlUHJlc2VuY2UvdXNlLXByZXNlbmNlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3V0aWxzL3NoYWxsb3ctY29tcGFyZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL2NsYW1wLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvYW5pbWF0aW9ucy91dGlscy9maW5kLXNwcmluZy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL2FuaW1hdGlvbnMvZ2VuZXJhdG9ycy9zcHJpbmcubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy91dGlscy9wcm9ncmVzcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL21peC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLXZhbHVlLXR5cGVzL2Rpc3QvZXMvY29sb3IvdXRpbHMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9zdHlsZS12YWx1ZS10eXBlcy9kaXN0L2VzL2NvbG9yL3JnYmEubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9zdHlsZS12YWx1ZS10eXBlcy9kaXN0L2VzL2NvbG9yL2hleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLXZhbHVlLXR5cGVzL2Rpc3QvZXMvY29sb3IvaHNsYS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL2hzbGEtdG8tcmdiYS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL21peC1jb2xvci5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLXZhbHVlLXR5cGVzL2Rpc3QvZXMvY29sb3IvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9zdHlsZS12YWx1ZS10eXBlcy9kaXN0L2VzL2NvbXBsZXgvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy91dGlscy9pbmMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy91dGlscy9taXgtY29tcGxleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL2ludGVycG9sYXRlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvZWFzaW5nL3V0aWxzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvZWFzaW5nL2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvYW5pbWF0aW9ucy9nZW5lcmF0b3JzL2tleWZyYW1lcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL2FuaW1hdGlvbnMvdXRpbHMvZGV0ZWN0LWFuaW1hdGlvbi1mcm9tLW9wdGlvbnMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy9hbmltYXRpb25zL2dlbmVyYXRvcnMvZGVjYXkubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy9hbmltYXRpb25zL3V0aWxzL2VsYXBzZWQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy9hbmltYXRpb25zL2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvdXRpbHMvdmVsb2NpdHktcGVyLXNlY29uZC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy90aW1lLWNvbnZlcnNpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy9lYXNpbmcvY3ViaWMtYmV6aWVyLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2FuaW1hdGlvbi91dGlscy9lYXNpbmcubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvYW5pbWF0aW9uL3V0aWxzL2lzLWFuaW1hdGFibGUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvYW5pbWF0aW9uL3V0aWxzL2RlZmF1bHQtdHJhbnNpdGlvbnMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9zdHlsZS12YWx1ZS10eXBlcy9kaXN0L2VzL2NvbXBsZXgvZmlsdGVyLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdmFsdWUtdHlwZXMvZGVmYXVsdHMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS92YWx1ZS10eXBlcy9hbmltYXRhYmxlLW5vbmUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdXRpbHMvdXNlLWluc3RhbnQtdHJhbnNpdGlvbi1zdGF0ZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9hbmltYXRpb24vdXRpbHMvdHJhbnNpdGlvbnMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy9hbmltYXRpb25zL2luZXJ0aWEubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdXRpbHMvaXMtbnVtZXJpY2FsLXN0cmluZy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy9pcy16ZXJvLXZhbHVlLXN0cmluZy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy9hcnJheS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy9zdWJzY3JpcHRpb24tbWFuYWdlci5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy92YWx1ZS9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3ZhbHVlLXR5cGVzL3Rlc3QubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS92YWx1ZS10eXBlcy9kaW1lbnNpb25zLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdmFsdWUtdHlwZXMvdHlwZS1hdXRvLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdmFsdWUtdHlwZXMvZmluZC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvdXRpbHMvc2V0dGVycy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvdXRpbHMvYW5pbWF0aW9uLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci91dGlscy9hbmltYXRpb24tc3RhdGUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL2ZlYXR1cmVzL2FuaW1hdGlvbnMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy91dGlscy9pcy1wb2ludC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL2lzLXBvaW50LTNkLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvdXRpbHMvZGlzdGFuY2UubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZ2VzdHVyZXMvUGFuU2Vzc2lvbi5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL2dlb21ldHJ5L2RlbHRhLWNhbGMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZ2VzdHVyZXMvZHJhZy91dGlscy9jb25zdHJhaW50cy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL2dlb21ldHJ5L21vZGVscy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL3V0aWxzL2VhY2gtYXhpcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL2dlb21ldHJ5L2NvbnZlcnNpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcHJvamVjdGlvbi91dGlscy9oYXMtdHJhbnNmb3JtLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vZ2VvbWV0cnkvZGVsdGEtYXBwbHkubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcHJvamVjdGlvbi91dGlscy9tZWFzdXJlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2dlc3R1cmVzL2RyYWcvVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vZmVhdHVyZXMvZHJhZy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9nZXN0dXJlcy91c2UtcGFuLWdlc3R1cmUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZ2VzdHVyZXMvZHJhZy91c2UtZHJhZy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvdXRpbHMvbGlmZWN5Y2xlcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL3V0aWxzL21vdGlvbi12YWx1ZXMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS91dGlscy9jc3MtdmFyaWFibGVzLWNvbnZlcnNpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS91dGlscy91bml0LWNvbnZlcnNpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS91dGlscy9wYXJzZS1kb20tdmFyaWFudC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvaHRtbC92aXN1YWwtZWxlbWVudC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvc3ZnL3Zpc3VhbC1lbGVtZW50Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vY3JlYXRlLXZpc3VhbC1lbGVtZW50Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vc3R5bGVzL3NjYWxlLWJvcmRlci1yYWRpdXMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcHJvamVjdGlvbi9zdHlsZXMvc2NhbGUtYm94LXNoYWRvdy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vZmVhdHVyZXMvbGF5b3V0L01lYXN1cmVMYXlvdXQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL2ZlYXR1cmVzL2xheW91dC9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL2FuaW1hdGlvbi9taXgtdmFsdWVzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vZ2VvbWV0cnkvY29weS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL2dlb21ldHJ5L2RlbHRhLXJlbW92ZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL2dlb21ldHJ5L3V0aWxzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vc2hhcmVkL3N0YWNrLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vc3R5bGVzL3RyYW5zZm9ybS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvdXRpbHMvY29tcGFyZS1ieS1kZXB0aC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvdXRpbHMvZmxhdC10cmVlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vbm9kZS9jcmVhdGUtcHJvamVjdGlvbi1ub2RlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2FuaW1hdGlvbi9hbmltYXRlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vbm9kZS9Eb2N1bWVudFByb2plY3Rpb25Ob2RlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vbm9kZS9IVE1MUHJvamVjdGlvbk5vZGUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS9tb3Rpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS91dGlscy9jcmVhdGUtY29uZmlnLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvZXh0ZXJuYWwgY29tbW9uanMge1wicm9vdFwiOlwiUmVhY3REb21cIixcImNvbW1vbmpzXCI6XCJyZWFjdC1kb21cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29uc3RhbnRzL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS9leHRlcm5hbCBjb21tb25qcyB7XCJyb290XCI6XCJUb3VjaHRlY2hXZWJBdXRoXCIsXCJjb21tb25qczJcIjpcIkB0b3VjaHRlY2gvd2ViLWF1dGhcIixcImNvbW1vbmpzXCI6XCJAdG91Y2h0ZWNoL3dlYi1hdXRoXCIsXCJhbWRcIjpcIkB0b3VjaHRlY2gvd2ViLWF1dGhcIn0iLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51L2V4dGVybmFsIGNvbW1vbmpzIHtcInJvb3RcIjpcIlRvdWNodGVjaFdlYlRlbmFudElkUHJvdmlkZXJcIixcImNvbW1vbmpzMlwiOlwiQHRvdWNodGVjaC93ZWItdGVuYW50LWlkLXByb3ZpZGVyXCIsXCJjb21tb25qc1wiOlwiQHRvdWNodGVjaC93ZWItdGVuYW50LWlkLXByb3ZpZGVyXCIsXCJhbWRcIjpcIkB0b3VjaHRlY2gvd2ViLXRlbmFudC1pZC1wcm92aWRlclwifSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL0NvbnRleHQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vTmF2aWdhdGlvbi5tb2R1bGUuY3NzP2EwMjQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2NsYXNzY2F0L2luZGV4LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS9leHRlcm5hbCBjb21tb25qcyB7XCJyb290XCI6XCJUb3VjaHRlY2hCYXNlbGF5ZXJVaVwiLFwiY29tbW9uanMyXCI6XCJAdG91Y2h0ZWNoL2Jhc2VsYXllci11aVwiLFwiY29tbW9uanNcIjpcIkB0b3VjaHRlY2gvYmFzZWxheWVyLXVpXCIsXCJhbWRcIjpcIkB0b3VjaHRlY2gvYmFzZWxheWVyLXVpXCJ9Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS9leHRlcm5hbCBjb21tb25qcyB7XCJyb290XCI6XCJUb3VjaHRlY2hXZWJBcGlDbGllbnRcIixcImNvbW1vbmpzMlwiOlwiQHRvdWNodGVjaC93ZWItYXBpLWNsaWVudFwiLFwiY29tbW9uanNcIjpcIkB0b3VjaHRlY2gvd2ViLWFwaS1jbGllbnRcIixcImFtZFwiOlwiQHRvdWNodGVjaC93ZWItYXBpLWNsaWVudFwifSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvZXh0ZXJuYWwgY29tbW9uanMge1wicm9vdFwiOlwiU3dyXCIsXCJjb21tb25qczJcIjpcInN3clwiLFwiY29tbW9uanNcIjpcInN3clwiLFwiYW1kXCI6XCJzd3JcIn0iLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2hvb2tzL3VzZVRlbmFudHMudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9Mb2dvL0xvZ28udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vVGllcnMvVGllci9UaWVyLm1vZHVsZS5jc3M/Zjg3OSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL1RpZXJzL1RpZXIvVGllci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51L2V4dGVybmFsIGNvbW1vbmpzIHtcInJvb3RcIjpcIlJlYWN0Um91dGVyRG9tXCIsXCJjb21tb25qczJcIjpcInJlYWN0LXJvdXRlci1kb21cIixcImNvbW1vbmpzXCI6XCJyZWFjdC1yb3V0ZXItZG9tXCIsXCJhbWRcIjpcInJlYWN0LXJvdXRlci1kb21cIn0iLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9UaWVycy9BcHBsaWNhdGlvbnMvQXBwbGljYXRpb25MaW5rL0FwcGxpY2F0aW9uTGluay5tb2R1bGUuY3NzPzNmZjYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9UaWVycy9BcHBsaWNhdGlvbnMvQXBwbGljYXRpb25MaW5rL0FwcGxpY2F0aW9uTGluay50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9UaWVycy9BcHBsaWNhdGlvbnMvQXBwbGljYXRpb25zLm1vZHVsZS5jc3M/Y2U3OCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL1RpZXJzL0FwcGxpY2F0aW9ucy9BcHBsaWNhdGlvbnMudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9ob29rcy91c2VTZWxlY3RlZFRlbmFudC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvaG9va3MvdXNlTWFuYWdlU3Vic2NyaXB0aW9uLnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL2Fzc2V0cy9pY29ucy9jbG9zZS5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vYXNzZXRzL2ljb25zL2xvZ291dC5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vYXNzZXRzL2ljb25zL3NwaW5uZXItY2lyY2xlLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL1RpZXJzL1RlbmFudHMvVGVuYW50QnV0dG9uL1RlbmFudEJ1dHRvbi5tb2R1bGUuY3NzPzY5N2QiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9UaWVycy9UZW5hbnRzL1RlbmFudEJ1dHRvbi9UZW5hbnRCdXR0b24udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vVGllcnMvVGVuYW50cy9UZW5hbnRzLm1vZHVsZS5jc3M/NjQzMCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL1RpZXJzL1RlbmFudHMvVGVuYW50cy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vYXNzZXRzL2ljb25zL2Fycm93LWxlZnQuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL2Fzc2V0cy9pY29ucy9hZGQuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vVGllcnMvVGllcnMubW9kdWxlLmNzcz9mNWEzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vVGllcnMvVGllcnMudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vTmF2aWdhdGlvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vYXNzZXRzL2ljb25zL21lbnUuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vTmF2aWdhdGlvbkJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlVG9nZ2xlL3VzZVRvZ2dsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGUgcmVxdWlyZSBzY29wZVxudmFyIF9fd2VicGFja19yZXF1aXJlX18gPSB7fTtcblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcclxuICAgIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxyXG4gICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcclxuICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xyXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XHJcbiAgICB2YXIgXywgZG9uZSA9IGZhbHNlO1xyXG4gICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgY29udGV4dCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xyXG4gICAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnB1c2goXyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xyXG4gICAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcclxuICAgIGRvbmUgPSB0cnVlO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcclxuICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xyXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xyXG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcclxuICAgIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xyXG4gICAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcclxufVxyXG4iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcInJlYWN0XCIpOyIsIi8qKlxuICogQnJvd3Nlci1zYWZlIHVzYWdlIG9mIHByb2Nlc3NcbiAqL1xudmFyIGRlZmF1bHRFbnZpcm9ubWVudCA9IFwicHJvZHVjdGlvblwiO1xudmFyIGVudiA9IHR5cGVvZiBwcm9jZXNzID09PSBcInVuZGVmaW5lZFwiIHx8IHByb2Nlc3MuZW52ID09PSB1bmRlZmluZWRcbiAgICA/IGRlZmF1bHRFbnZpcm9ubWVudFxuICAgIDogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgfHwgZGVmYXVsdEVudmlyb25tZW50O1xuXG5leHBvcnQgeyBlbnYgfTtcbiIsImNvbnN0IGRlZmF1bHRUaW1lc3RlcCA9ICgxIC8gNjApICogMTAwMDtcbmNvbnN0IGdldEN1cnJlbnRUaW1lID0gdHlwZW9mIHBlcmZvcm1hbmNlICE9PSBcInVuZGVmaW5lZFwiXG4gICAgPyAoKSA9PiBwZXJmb3JtYW5jZS5ub3coKVxuICAgIDogKCkgPT4gRGF0ZS5ub3coKTtcbmNvbnN0IG9uTmV4dEZyYW1lID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIlxuICAgID8gKGNhbGxiYWNrKSA9PiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKVxuICAgIDogKGNhbGxiYWNrKSA9PiBzZXRUaW1lb3V0KCgpID0+IGNhbGxiYWNrKGdldEN1cnJlbnRUaW1lKCkpLCBkZWZhdWx0VGltZXN0ZXApO1xuXG5leHBvcnQgeyBkZWZhdWx0VGltZXN0ZXAsIG9uTmV4dEZyYW1lIH07XG4iLCJpbXBvcnQgeyBvbk5leHRGcmFtZSwgZGVmYXVsdFRpbWVzdGVwIH0gZnJvbSAnLi9vbi1uZXh0LWZyYW1lLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVSZW5kZXJTdGVwIH0gZnJvbSAnLi9jcmVhdGUtcmVuZGVyLXN0ZXAubWpzJztcblxuY29uc3QgbWF4RWxhcHNlZCA9IDQwO1xubGV0IHVzZURlZmF1bHRFbGFwc2VkID0gdHJ1ZTtcbmxldCBydW5OZXh0RnJhbWUgPSBmYWxzZTtcbmxldCBpc1Byb2Nlc3NpbmcgPSBmYWxzZTtcbmNvbnN0IGZyYW1lID0ge1xuICAgIGRlbHRhOiAwLFxuICAgIHRpbWVzdGFtcDogMCxcbn07XG5jb25zdCBzdGVwc09yZGVyID0gW1xuICAgIFwicmVhZFwiLFxuICAgIFwidXBkYXRlXCIsXG4gICAgXCJwcmVSZW5kZXJcIixcbiAgICBcInJlbmRlclwiLFxuICAgIFwicG9zdFJlbmRlclwiLFxuXTtcbmNvbnN0IHN0ZXBzID0gc3RlcHNPcmRlci5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgYWNjW2tleV0gPSBjcmVhdGVSZW5kZXJTdGVwKCgpID0+IChydW5OZXh0RnJhbWUgPSB0cnVlKSk7XG4gICAgcmV0dXJuIGFjYztcbn0sIHt9KTtcbmNvbnN0IHN5bmMgPSBzdGVwc09yZGVyLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBzdGVwID0gc3RlcHNba2V5XTtcbiAgICBhY2Nba2V5XSA9IChwcm9jZXNzLCBrZWVwQWxpdmUgPSBmYWxzZSwgaW1tZWRpYXRlID0gZmFsc2UpID0+IHtcbiAgICAgICAgaWYgKCFydW5OZXh0RnJhbWUpXG4gICAgICAgICAgICBzdGFydExvb3AoKTtcbiAgICAgICAgcmV0dXJuIHN0ZXAuc2NoZWR1bGUocHJvY2Vzcywga2VlcEFsaXZlLCBpbW1lZGlhdGUpO1xuICAgIH07XG4gICAgcmV0dXJuIGFjYztcbn0sIHt9KTtcbmNvbnN0IGNhbmNlbFN5bmMgPSBzdGVwc09yZGVyLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBhY2Nba2V5XSA9IHN0ZXBzW2tleV0uY2FuY2VsO1xuICAgIHJldHVybiBhY2M7XG59LCB7fSk7XG5jb25zdCBmbHVzaFN5bmMgPSBzdGVwc09yZGVyLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBhY2Nba2V5XSA9ICgpID0+IHN0ZXBzW2tleV0ucHJvY2VzcyhmcmFtZSk7XG4gICAgcmV0dXJuIGFjYztcbn0sIHt9KTtcbmNvbnN0IHByb2Nlc3NTdGVwID0gKHN0ZXBJZCkgPT4gc3RlcHNbc3RlcElkXS5wcm9jZXNzKGZyYW1lKTtcbmNvbnN0IHByb2Nlc3NGcmFtZSA9ICh0aW1lc3RhbXApID0+IHtcbiAgICBydW5OZXh0RnJhbWUgPSBmYWxzZTtcbiAgICBmcmFtZS5kZWx0YSA9IHVzZURlZmF1bHRFbGFwc2VkXG4gICAgICAgID8gZGVmYXVsdFRpbWVzdGVwXG4gICAgICAgIDogTWF0aC5tYXgoTWF0aC5taW4odGltZXN0YW1wIC0gZnJhbWUudGltZXN0YW1wLCBtYXhFbGFwc2VkKSwgMSk7XG4gICAgZnJhbWUudGltZXN0YW1wID0gdGltZXN0YW1wO1xuICAgIGlzUHJvY2Vzc2luZyA9IHRydWU7XG4gICAgc3RlcHNPcmRlci5mb3JFYWNoKHByb2Nlc3NTdGVwKTtcbiAgICBpc1Byb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICBpZiAocnVuTmV4dEZyYW1lKSB7XG4gICAgICAgIHVzZURlZmF1bHRFbGFwc2VkID0gZmFsc2U7XG4gICAgICAgIG9uTmV4dEZyYW1lKHByb2Nlc3NGcmFtZSk7XG4gICAgfVxufTtcbmNvbnN0IHN0YXJ0TG9vcCA9ICgpID0+IHtcbiAgICBydW5OZXh0RnJhbWUgPSB0cnVlO1xuICAgIHVzZURlZmF1bHRFbGFwc2VkID0gdHJ1ZTtcbiAgICBpZiAoIWlzUHJvY2Vzc2luZylcbiAgICAgICAgb25OZXh0RnJhbWUocHJvY2Vzc0ZyYW1lKTtcbn07XG5jb25zdCBnZXRGcmFtZURhdGEgPSAoKSA9PiBmcmFtZTtcblxuZXhwb3J0IGRlZmF1bHQgc3luYztcbmV4cG9ydCB7IGNhbmNlbFN5bmMsIGZsdXNoU3luYywgZ2V0RnJhbWVEYXRhIH07XG4iLCJmdW5jdGlvbiBjcmVhdGVSZW5kZXJTdGVwKHJ1bk5leHRGcmFtZSkge1xuICAgIGxldCB0b1J1biA9IFtdO1xuICAgIGxldCB0b1J1bk5leHRGcmFtZSA9IFtdO1xuICAgIGxldCBudW1Ub1J1biA9IDA7XG4gICAgbGV0IGlzUHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgIGxldCBmbHVzaE5leHRGcmFtZSA9IGZhbHNlO1xuICAgIGNvbnN0IHRvS2VlcEFsaXZlID0gbmV3IFdlYWtTZXQoKTtcbiAgICBjb25zdCBzdGVwID0ge1xuICAgICAgICBzY2hlZHVsZTogKGNhbGxiYWNrLCBrZWVwQWxpdmUgPSBmYWxzZSwgaW1tZWRpYXRlID0gZmFsc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFkZFRvQ3VycmVudEZyYW1lID0gaW1tZWRpYXRlICYmIGlzUHJvY2Vzc2luZztcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IGFkZFRvQ3VycmVudEZyYW1lID8gdG9SdW4gOiB0b1J1bk5leHRGcmFtZTtcbiAgICAgICAgICAgIGlmIChrZWVwQWxpdmUpXG4gICAgICAgICAgICAgICAgdG9LZWVwQWxpdmUuYWRkKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIGlmIChidWZmZXIuaW5kZXhPZihjYWxsYmFjaykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGlmIChhZGRUb0N1cnJlbnRGcmFtZSAmJiBpc1Byb2Nlc3NpbmcpXG4gICAgICAgICAgICAgICAgICAgIG51bVRvUnVuID0gdG9SdW4ubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrO1xuICAgICAgICB9LFxuICAgICAgICBjYW5jZWw6IChjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0b1J1bk5leHRGcmFtZS5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpXG4gICAgICAgICAgICAgICAgdG9SdW5OZXh0RnJhbWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHRvS2VlcEFsaXZlLmRlbGV0ZShjYWxsYmFjayk7XG4gICAgICAgIH0sXG4gICAgICAgIHByb2Nlc3M6IChmcmFtZURhdGEpID0+IHtcbiAgICAgICAgICAgIGlmIChpc1Byb2Nlc3NpbmcpIHtcbiAgICAgICAgICAgICAgICBmbHVzaE5leHRGcmFtZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXNQcm9jZXNzaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIFt0b1J1biwgdG9SdW5OZXh0RnJhbWVdID0gW3RvUnVuTmV4dEZyYW1lLCB0b1J1bl07XG4gICAgICAgICAgICB0b1J1bk5leHRGcmFtZS5sZW5ndGggPSAwO1xuICAgICAgICAgICAgbnVtVG9SdW4gPSB0b1J1bi5sZW5ndGg7XG4gICAgICAgICAgICBpZiAobnVtVG9SdW4pIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVRvUnVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSB0b1J1bltpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZnJhbWVEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRvS2VlcEFsaXZlLmhhcyhjYWxsYmFjaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXAuc2NoZWR1bGUoY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTmV4dEZyYW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc1Byb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChmbHVzaE5leHRGcmFtZSkge1xuICAgICAgICAgICAgICAgIGZsdXNoTmV4dEZyYW1lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc3RlcC5wcm9jZXNzKGZyYW1lRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IHsgY3JlYXRlUmVuZGVyU3RlcCB9O1xuIiwidmFyIGlzQnJvd3NlciA9IHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIjtcblxuZXhwb3J0IHsgaXNCcm93c2VyIH07XG4iLCJpbXBvcnQgeyB1c2VMYXlvdXRFZmZlY3QsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzQnJvd3NlciB9IGZyb20gJy4vaXMtYnJvd3Nlci5tanMnO1xuXG52YXIgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IGlzQnJvd3NlciA/IHVzZUxheW91dEVmZmVjdCA6IHVzZUVmZmVjdDtcblxuZXhwb3J0IHsgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCB9O1xuIiwiaW1wb3J0IHsgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCB9IGZyb20gJy4vdXNlLWlzb21vcnBoaWMtZWZmZWN0Lm1qcyc7XG5cbmZ1bmN0aW9uIHVzZUlzTW91bnRlZCgpIHtcbiAgICB2YXIgaXNNb3VudGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXNNb3VudGVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXNNb3VudGVkLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIGlzTW91bnRlZDtcbn1cblxuZXhwb3J0IHsgdXNlSXNNb3VudGVkIH07XG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xudmFyIFByZXNlbmNlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQobnVsbCk7XG5cbmV4cG9ydCB7IFByZXNlbmNlQ29udGV4dCB9O1xuIiwiaW1wb3J0IHsgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjb25zdGFudCB2YWx1ZSBvdmVyIHRoZSBsaWZlY3ljbGUgb2YgYSBjb21wb25lbnQuXG4gKlxuICogRXZlbiBpZiBgdXNlTWVtb2AgaXMgcHJvdmlkZWQgYW4gZW1wdHkgYXJyYXkgYXMgaXRzIGZpbmFsIGFyZ3VtZW50LCBpdCBkb2Vzbid0IG9mZmVyXG4gKiBhIGd1YXJhbnRlZSB0aGF0IGl0IHdvbid0IHJlLXJ1biBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyBsYXRlciBvbi4gQnkgdXNpbmcgYHVzZUNvbnN0YW50YFxuICogeW91IGNhbiBlbnN1cmUgdGhhdCBpbml0aWFsaXNlcnMgZG9uJ3QgZXhlY3V0ZSB0d2ljZSBvciBtb3JlLlxuICovXG5mdW5jdGlvbiB1c2VDb25zdGFudChpbml0KSB7XG4gICAgdmFyIHJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBpZiAocmVmLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgcmVmLmN1cnJlbnQgPSBpbml0KCk7XG4gICAgfVxuICAgIHJldHVybiByZWYuY3VycmVudDtcbn1cblxuZXhwb3J0IHsgdXNlQ29uc3RhbnQgfTtcbiIsImltcG9ydCB7IHVzZUNvbnN0YW50IH0gZnJvbSAnLi91c2UtY29uc3RhbnQubWpzJztcblxudmFyIGNvdW50ZXIgPSAwO1xudmFyIGluY3JlbWVudElkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY291bnRlcisrOyB9O1xudmFyIHVzZUlkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdXNlQ29uc3RhbnQoaW5jcmVtZW50SWQpOyB9O1xuLyoqXG4gKiBJZGVhbGx5IHdlJ2QgdXNlIHRoZSBmb2xsb3dpbmcgY29kZSB0byBzdXBwb3J0IFJlYWN0IDE4IG9wdGlvbmFsbHkuXG4gKiBCdXQgdGhpcyBmYWlybHkgZmFpbHMgaW4gV2VicGFjayAob3RoZXJ3aXNlIHRyZWVzaGFraW5nIHdvdWxkbid0IHdvcmsgYXQgYWxsKS5cbiAqIE5lZWQgdG8gY29tZSB1cCB3aXRoIGEgZGlmZmVyZW50IHdheSBvZiBmaWd1cmluZyB0aGlzIG91dC5cbiAqL1xuLy8gZXhwb3J0IGNvbnN0IHVzZUlkID0gKFJlYWN0IGFzIGFueSkudXNlSWRcbi8vICAgICA/IChSZWFjdCBhcyBhbnkpLnVzZUlkXG4vLyAgICAgOiAoKSA9PiB1c2VDb25zdGFudChpbmNyZW1lbnRJZClcblxuZXhwb3J0IHsgdXNlSWQgfTtcbiIsImltcG9ydCB7IF9fdmFsdWVzIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFByZXNlbmNlQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvUHJlc2VuY2VDb250ZXh0Lm1qcyc7XG5pbXBvcnQgeyB1c2VDb25zdGFudCB9IGZyb20gJy4uLy4uL3V0aWxzL3VzZS1jb25zdGFudC5tanMnO1xuaW1wb3J0IHsgdXNlSWQgfSBmcm9tICcuLi8uLi91dGlscy91c2UtaWQubWpzJztcblxudmFyIFByZXNlbmNlQ2hpbGQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBfYS5jaGlsZHJlbiwgaW5pdGlhbCA9IF9hLmluaXRpYWwsIGlzUHJlc2VudCA9IF9hLmlzUHJlc2VudCwgb25FeGl0Q29tcGxldGUgPSBfYS5vbkV4aXRDb21wbGV0ZSwgY3VzdG9tID0gX2EuY3VzdG9tLCBwcmVzZW5jZUFmZmVjdHNMYXlvdXQgPSBfYS5wcmVzZW5jZUFmZmVjdHNMYXlvdXQ7XG4gICAgdmFyIHByZXNlbmNlQ2hpbGRyZW4gPSB1c2VDb25zdGFudChuZXdDaGlsZHJlbk1hcCk7XG4gICAgdmFyIGlkID0gdXNlSWQoKTtcbiAgICB2YXIgY29udGV4dCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkgeyByZXR1cm4gKHtcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBpbml0aWFsOiBpbml0aWFsLFxuICAgICAgICBpc1ByZXNlbnQ6IGlzUHJlc2VudCxcbiAgICAgICAgY3VzdG9tOiBjdXN0b20sXG4gICAgICAgIG9uRXhpdENvbXBsZXRlOiBmdW5jdGlvbiAoY2hpbGRJZCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBwcmVzZW5jZUNoaWxkcmVuLnNldChjaGlsZElkLCB0cnVlKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhwcmVzZW5jZUNoaWxkcmVuLnZhbHVlcygpKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNDb21wbGV0ZSA9IF9jLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ29tcGxldGUpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGNhbiBzdG9wIHNlYXJjaGluZyB3aGVuIGFueSBpcyBpbmNvbXBsZXRlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25FeGl0Q29tcGxldGUgPT09IG51bGwgfHwgb25FeGl0Q29tcGxldGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXhpdENvbXBsZXRlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZ2lzdGVyOiBmdW5jdGlvbiAoY2hpbGRJZCkge1xuICAgICAgICAgICAgcHJlc2VuY2VDaGlsZHJlbi5zZXQoY2hpbGRJZCwgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHByZXNlbmNlQ2hpbGRyZW4uZGVsZXRlKGNoaWxkSWQpOyB9O1xuICAgICAgICB9LFxuICAgIH0pOyB9LCBcbiAgICAvKipcbiAgICAgKiBJZiB0aGUgcHJlc2VuY2Ugb2YgYSBjaGlsZCBhZmZlY3RzIHRoZSBsYXlvdXQgb2YgdGhlIGNvbXBvbmVudHMgYXJvdW5kIGl0LFxuICAgICAqIHdlIHdhbnQgdG8gbWFrZSBhIG5ldyBjb250ZXh0IHZhbHVlIHRvIGVuc3VyZSB0aGV5IGdldCByZS1yZW5kZXJlZFxuICAgICAqIHNvIHRoZXkgY2FuIGRldGVjdCB0aGF0IGxheW91dCBjaGFuZ2UuXG4gICAgICovXG4gICAgcHJlc2VuY2VBZmZlY3RzTGF5b3V0ID8gdW5kZWZpbmVkIDogW2lzUHJlc2VudF0pO1xuICAgIHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgICAgICBwcmVzZW5jZUNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKF8sIGtleSkgeyByZXR1cm4gcHJlc2VuY2VDaGlsZHJlbi5zZXQoa2V5LCBmYWxzZSk7IH0pO1xuICAgIH0sIFtpc1ByZXNlbnRdKTtcbiAgICAvKipcbiAgICAgKiBJZiB0aGVyZSdzIG5vIGBtb3Rpb25gIGNvbXBvbmVudHMgdG8gZmlyZSBleGl0IGFuaW1hdGlvbnMsIHdlIHdhbnQgdG8gcmVtb3ZlIHRoaXNcbiAgICAgKiBjb21wb25lbnQgaW1tZWRpYXRlbHkuXG4gICAgICovXG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgIWlzUHJlc2VudCAmJiAhcHJlc2VuY2VDaGlsZHJlbi5zaXplICYmIChvbkV4aXRDb21wbGV0ZSA9PT0gbnVsbCB8fCBvbkV4aXRDb21wbGV0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FeGl0Q29tcGxldGUoKSk7XG4gICAgfSwgW2lzUHJlc2VudF0pO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChQcmVzZW5jZUNvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGNvbnRleHQgfSwgY2hpbGRyZW4pKTtcbn07XG5mdW5jdGlvbiBuZXdDaGlsZHJlbk1hcCgpIHtcbiAgICByZXR1cm4gbmV3IE1hcCgpO1xufVxuXG5leHBvcnQgeyBQcmVzZW5jZUNoaWxkIH07XG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuXG52YXIgTGF5b3V0R3JvdXBDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7fSk7XG5cbmV4cG9ydCB7IExheW91dEdyb3VwQ29udGV4dCB9O1xuIiwiaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG5mdW5jdGlvbiB1c2VVbm1vdW50RWZmZWN0KGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBjYWxsYmFjaygpOyB9OyB9LCBbXSk7XG59XG5cbmV4cG9ydCB7IHVzZVVubW91bnRFZmZlY3QgfTtcbiIsImltcG9ydCB7IF9fcmVhZCwgX19zcHJlYWRBcnJheSB9IGZyb20gJ3RzbGliJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRleHQsIHVzZVJlZiwgY2xvbmVFbGVtZW50LCBDaGlsZHJlbiwgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBlbnYgfSBmcm9tICcuLi8uLi91dGlscy9wcm9jZXNzLm1qcyc7XG5pbXBvcnQgeyB1c2VGb3JjZVVwZGF0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL3VzZS1mb3JjZS11cGRhdGUubWpzJztcbmltcG9ydCB7IHVzZUlzTW91bnRlZCB9IGZyb20gJy4uLy4uL3V0aWxzL3VzZS1pcy1tb3VudGVkLm1qcyc7XG5pbXBvcnQgeyBQcmVzZW5jZUNoaWxkIH0gZnJvbSAnLi9QcmVzZW5jZUNoaWxkLm1qcyc7XG5pbXBvcnQgeyBMYXlvdXRHcm91cENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L0xheW91dEdyb3VwQ29udGV4dC5tanMnO1xuaW1wb3J0IHsgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCB9IGZyb20gJy4uLy4uL3V0aWxzL3VzZS1pc29tb3JwaGljLWVmZmVjdC5tanMnO1xuaW1wb3J0IHsgdXNlVW5tb3VudEVmZmVjdCB9IGZyb20gJy4uLy4uL3V0aWxzL3VzZS11bm1vdW50LWVmZmVjdC5tanMnO1xuXG52YXIgZ2V0Q2hpbGRLZXkgPSBmdW5jdGlvbiAoY2hpbGQpIHsgcmV0dXJuIGNoaWxkLmtleSB8fCBcIlwiOyB9O1xuZnVuY3Rpb24gdXBkYXRlQ2hpbGRMb29rdXAoY2hpbGRyZW4sIGFsbENoaWxkcmVuKSB7XG4gICAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgdmFyIGtleSA9IGdldENoaWxkS2V5KGNoaWxkKTtcbiAgICAgICAgYWxsQ2hpbGRyZW4uc2V0KGtleSwgY2hpbGQpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gb25seUVsZW1lbnRzKGNoaWxkcmVuKSB7XG4gICAgdmFyIGZpbHRlcmVkID0gW107XG4gICAgLy8gV2UgdXNlIGZvckVhY2ggaGVyZSBpbnN0ZWFkIG9mIG1hcCBhcyBtYXAgbXV0YXRlcyB0aGUgY29tcG9uZW50IGtleSBieSBwcmVwcmVuZGluZyBgLiRgXG4gICAgQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChjaGlsZCkpXG4gICAgICAgICAgICBmaWx0ZXJlZC5wdXNoKGNoaWxkKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZmlsdGVyZWQ7XG59XG4vKipcbiAqIGBBbmltYXRlUHJlc2VuY2VgIGVuYWJsZXMgdGhlIGFuaW1hdGlvbiBvZiBjb21wb25lbnRzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgdHJlZS5cbiAqXG4gKiBXaGVuIGFkZGluZy9yZW1vdmluZyBtb3JlIHRoYW4gYSBzaW5nbGUgY2hpbGQsIGV2ZXJ5IGNoaWxkICoqbXVzdCoqIGJlIGdpdmVuIGEgdW5pcXVlIGBrZXlgIHByb3AuXG4gKlxuICogQW55IGBtb3Rpb25gIGNvbXBvbmVudHMgdGhhdCBoYXZlIGFuIGBleGl0YCBwcm9wZXJ0eSBkZWZpbmVkIHdpbGwgYW5pbWF0ZSBvdXQgd2hlbiByZW1vdmVkIGZyb21cbiAqIHRoZSB0cmVlLlxuICpcbiAqIGBgYGpzeFxuICogaW1wb3J0IHsgbW90aW9uLCBBbmltYXRlUHJlc2VuY2UgfSBmcm9tICdmcmFtZXItbW90aW9uJ1xuICpcbiAqIGV4cG9ydCBjb25zdCBJdGVtcyA9ICh7IGl0ZW1zIH0pID0+IChcbiAqICAgPEFuaW1hdGVQcmVzZW5jZT5cbiAqICAgICB7aXRlbXMubWFwKGl0ZW0gPT4gKFxuICogICAgICAgPG1vdGlvbi5kaXZcbiAqICAgICAgICAga2V5PXtpdGVtLmlkfVxuICogICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAgfX1cbiAqICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxIH19XG4gKiAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCB9fVxuICogICAgICAgLz5cbiAqICAgICApKX1cbiAqICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gKiApXG4gKiBgYGBcbiAqXG4gKiBZb3UgY2FuIHNlcXVlbmNlIGV4aXQgYW5pbWF0aW9ucyB0aHJvdWdob3V0IGEgdHJlZSB1c2luZyB2YXJpYW50cy5cbiAqXG4gKiBJZiBhIGNoaWxkIGNvbnRhaW5zIG11bHRpcGxlIGBtb3Rpb25gIGNvbXBvbmVudHMgd2l0aCBgZXhpdGAgcHJvcHMsIGl0IHdpbGwgb25seSB1bm1vdW50IHRoZSBjaGlsZFxuICogb25jZSBhbGwgYG1vdGlvbmAgY29tcG9uZW50cyBoYXZlIGZpbmlzaGVkIGFuaW1hdGluZyBvdXQuIExpa2V3aXNlLCBhbnkgY29tcG9uZW50cyB1c2luZ1xuICogYHVzZVByZXNlbmNlYCBhbGwgbmVlZCB0byBjYWxsIGBzYWZlVG9SZW1vdmVgLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xudmFyIEFuaW1hdGVQcmVzZW5jZSA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBjaGlsZHJlbiA9IF9hLmNoaWxkcmVuLCBjdXN0b20gPSBfYS5jdXN0b20sIF9iID0gX2EuaW5pdGlhbCwgaW5pdGlhbCA9IF9iID09PSB2b2lkIDAgPyB0cnVlIDogX2IsIG9uRXhpdENvbXBsZXRlID0gX2Eub25FeGl0Q29tcGxldGUsIGV4aXRCZWZvcmVFbnRlciA9IF9hLmV4aXRCZWZvcmVFbnRlciwgX2MgPSBfYS5wcmVzZW5jZUFmZmVjdHNMYXlvdXQsIHByZXNlbmNlQWZmZWN0c0xheW91dCA9IF9jID09PSB2b2lkIDAgPyB0cnVlIDogX2M7XG4gICAgLy8gV2Ugd2FudCB0byBmb3JjZSBhIHJlLXJlbmRlciBvbmNlIGFsbCBleGl0aW5nIGFuaW1hdGlvbnMgaGF2ZSBmaW5pc2hlZC4gV2VcbiAgICAvLyBlaXRoZXIgdXNlIGEgbG9jYWwgZm9yY2VSZW5kZXIgZnVuY3Rpb24sIG9yIG9uZSBmcm9tIGEgcGFyZW50IGNvbnRleHQgaWYgaXQgZXhpc3RzLlxuICAgIHZhciBfZCA9IF9fcmVhZCh1c2VGb3JjZVVwZGF0ZSgpLCAxKSwgZm9yY2VSZW5kZXIgPSBfZFswXTtcbiAgICB2YXIgZm9yY2VSZW5kZXJMYXlvdXRHcm91cCA9IHVzZUNvbnRleHQoTGF5b3V0R3JvdXBDb250ZXh0KS5mb3JjZVJlbmRlcjtcbiAgICBpZiAoZm9yY2VSZW5kZXJMYXlvdXRHcm91cClcbiAgICAgICAgZm9yY2VSZW5kZXIgPSBmb3JjZVJlbmRlckxheW91dEdyb3VwO1xuICAgIHZhciBpc01vdW50ZWQgPSB1c2VJc01vdW50ZWQoKTtcbiAgICAvLyBGaWx0ZXIgb3V0IGFueSBjaGlsZHJlbiB0aGF0IGFyZW4ndCBSZWFjdEVsZW1lbnRzLiBXZSBjYW4gb25seSB0cmFjayBSZWFjdEVsZW1lbnRzIHdpdGggYSBwcm9wcy5rZXlcbiAgICB2YXIgZmlsdGVyZWRDaGlsZHJlbiA9IG9ubHlFbGVtZW50cyhjaGlsZHJlbik7XG4gICAgdmFyIGNoaWxkcmVuVG9SZW5kZXIgPSBmaWx0ZXJlZENoaWxkcmVuO1xuICAgIHZhciBleGl0aW5nID0gbmV3IFNldCgpO1xuICAgIC8vIEtlZXAgYSBsaXZpbmcgcmVjb3JkIG9mIHRoZSBjaGlsZHJlbiB3ZSdyZSBhY3R1YWxseSByZW5kZXJpbmcgc28gd2VcbiAgICAvLyBjYW4gZGlmZiB0byBmaWd1cmUgb3V0IHdoaWNoIGFyZSBlbnRlcmluZyBhbmQgZXhpdGluZ1xuICAgIHZhciBwcmVzZW50Q2hpbGRyZW4gPSB1c2VSZWYoY2hpbGRyZW5Ub1JlbmRlcik7XG4gICAgLy8gQSBsb29rdXAgdGFibGUgdG8gcXVpY2tseSByZWZlcmVuY2UgY29tcG9uZW50cyBieSBrZXlcbiAgICB2YXIgYWxsQ2hpbGRyZW4gPSB1c2VSZWYobmV3IE1hcCgpKS5jdXJyZW50O1xuICAgIC8vIElmIHRoaXMgaXMgdGhlIGluaXRpYWwgY29tcG9uZW50IHJlbmRlciwganVzdCBkZWFsIHdpdGggbG9naWMgc3Vycm91bmRpbmcgd2hldGhlclxuICAgIC8vIHdlIHBsYXkgb25Nb3VudCBhbmltYXRpb25zIG9yIG5vdC5cbiAgICB2YXIgaXNJbml0aWFsUmVuZGVyID0gdXNlUmVmKHRydWUpO1xuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpc0luaXRpYWxSZW5kZXIuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB1cGRhdGVDaGlsZExvb2t1cChmaWx0ZXJlZENoaWxkcmVuLCBhbGxDaGlsZHJlbik7XG4gICAgICAgIHByZXNlbnRDaGlsZHJlbi5jdXJyZW50ID0gY2hpbGRyZW5Ub1JlbmRlcjtcbiAgICB9KTtcbiAgICB1c2VVbm1vdW50RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXNJbml0aWFsUmVuZGVyLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBhbGxDaGlsZHJlbi5jbGVhcigpO1xuICAgICAgICBleGl0aW5nLmNsZWFyKCk7XG4gICAgfSk7XG4gICAgaWYgKGlzSW5pdGlhbFJlbmRlci5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY2hpbGRyZW5Ub1JlbmRlci5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChQcmVzZW5jZUNoaWxkLCB7IGtleTogZ2V0Q2hpbGRLZXkoY2hpbGQpLCBpc1ByZXNlbnQ6IHRydWUsIGluaXRpYWw6IGluaXRpYWwgPyB1bmRlZmluZWQgOiBmYWxzZSwgcHJlc2VuY2VBZmZlY3RzTGF5b3V0OiBwcmVzZW5jZUFmZmVjdHNMYXlvdXQgfSwgY2hpbGQpKTsgfSkpKTtcbiAgICB9XG4gICAgLy8gSWYgdGhpcyBpcyBhIHN1YnNlcXVlbnQgcmVuZGVyLCBkZWFsIHdpdGggZW50ZXJpbmcgYW5kIGV4aXRpbmcgY2hpbGRyZW5cbiAgICBjaGlsZHJlblRvUmVuZGVyID0gX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGNoaWxkcmVuVG9SZW5kZXIpLCBmYWxzZSk7XG4gICAgLy8gRGlmZiB0aGUga2V5cyBvZiB0aGUgY3VycmVudGx5LXByZXNlbnQgYW5kIHRhcmdldCBjaGlsZHJlbiB0byB1cGRhdGUgb3VyXG4gICAgLy8gZXhpdGluZyBsaXN0LlxuICAgIHZhciBwcmVzZW50S2V5cyA9IHByZXNlbnRDaGlsZHJlbi5jdXJyZW50Lm1hcChnZXRDaGlsZEtleSk7XG4gICAgdmFyIHRhcmdldEtleXMgPSBmaWx0ZXJlZENoaWxkcmVuLm1hcChnZXRDaGlsZEtleSk7XG4gICAgLy8gRGlmZiB0aGUgcHJlc2VudCBjaGlsZHJlbiB3aXRoIG91ciB0YXJnZXQgY2hpbGRyZW4gYW5kIG1hcmsgdGhvc2UgdGhhdCBhcmUgZXhpdGluZ1xuICAgIHZhciBudW1QcmVzZW50ID0gcHJlc2VudEtleXMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtUHJlc2VudDsgaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBwcmVzZW50S2V5c1tpXTtcbiAgICAgICAgaWYgKHRhcmdldEtleXMuaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgICAgICAgZXhpdGluZy5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB3ZSBjdXJyZW50bHkgaGF2ZSBleGl0aW5nIGNoaWxkcmVuLCBhbmQgd2UncmUgZGVmZXJyaW5nIHJlbmRlcmluZyBpbmNvbWluZyBjaGlsZHJlblxuICAgIC8vIHVudGlsIGFmdGVyIGFsbCBjdXJyZW50IGNoaWxkcmVuIGhhdmUgZXhpdGluZywgZW1wdHkgdGhlIGNoaWxkcmVuVG9SZW5kZXIgYXJyYXlcbiAgICBpZiAoZXhpdEJlZm9yZUVudGVyICYmIGV4aXRpbmcuc2l6ZSkge1xuICAgICAgICBjaGlsZHJlblRvUmVuZGVyID0gW107XG4gICAgfVxuICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgY3VycmVudGx5IGV4aXRpbmcgY29tcG9uZW50cyBhbmQgY2xvbmUgdGhlbSB0byBvdmVyd3JpdGUgYGFuaW1hdGVgXG4gICAgLy8gd2l0aCBhbnkgYGV4aXRgIHByb3AgdGhleSBtaWdodCBoYXZlIGRlZmluZWQuXG4gICAgZXhpdGluZy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgLy8gSWYgdGhpcyBjb21wb25lbnQgaXMgYWN0dWFsbHkgZW50ZXJpbmcgYWdhaW4sIGVhcmx5IHJldHVyblxuICAgICAgICBpZiAodGFyZ2V0S2V5cy5pbmRleE9mKGtleSkgIT09IC0xKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgY2hpbGQgPSBhbGxDaGlsZHJlbi5nZXQoa2V5KTtcbiAgICAgICAgaWYgKCFjaGlsZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGluc2VydGlvbkluZGV4ID0gcHJlc2VudEtleXMuaW5kZXhPZihrZXkpO1xuICAgICAgICB2YXIgb25FeGl0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYWxsQ2hpbGRyZW4uZGVsZXRlKGtleSk7XG4gICAgICAgICAgICBleGl0aW5nLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoaXMgY2hpbGQgZnJvbSB0aGUgcHJlc2VudCBjaGlsZHJlblxuICAgICAgICAgICAgdmFyIHJlbW92ZUluZGV4ID0gcHJlc2VudENoaWxkcmVuLmN1cnJlbnQuZmluZEluZGV4KGZ1bmN0aW9uIChwcmVzZW50Q2hpbGQpIHsgcmV0dXJuIHByZXNlbnRDaGlsZC5rZXkgPT09IGtleTsgfSk7XG4gICAgICAgICAgICBwcmVzZW50Q2hpbGRyZW4uY3VycmVudC5zcGxpY2UocmVtb3ZlSW5kZXgsIDEpO1xuICAgICAgICAgICAgLy8gRGVmZXIgcmUtcmVuZGVyaW5nIHVudGlsIGFsbCBleGl0aW5nIGNoaWxkcmVuIGhhdmUgaW5kZWVkIGxlZnRcbiAgICAgICAgICAgIGlmICghZXhpdGluZy5zaXplKSB7XG4gICAgICAgICAgICAgICAgcHJlc2VudENoaWxkcmVuLmN1cnJlbnQgPSBmaWx0ZXJlZENoaWxkcmVuO1xuICAgICAgICAgICAgICAgIGlmIChpc01vdW50ZWQuY3VycmVudCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBmb3JjZVJlbmRlcigpO1xuICAgICAgICAgICAgICAgIG9uRXhpdENvbXBsZXRlICYmIG9uRXhpdENvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNoaWxkcmVuVG9SZW5kZXIuc3BsaWNlKGluc2VydGlvbkluZGV4LCAwLCBSZWFjdC5jcmVhdGVFbGVtZW50KFByZXNlbmNlQ2hpbGQsIHsga2V5OiBnZXRDaGlsZEtleShjaGlsZCksIGlzUHJlc2VudDogZmFsc2UsIG9uRXhpdENvbXBsZXRlOiBvbkV4aXQsIGN1c3RvbTogY3VzdG9tLCBwcmVzZW5jZUFmZmVjdHNMYXlvdXQ6IHByZXNlbmNlQWZmZWN0c0xheW91dCB9LCBjaGlsZCkpO1xuICAgIH0pO1xuICAgIC8vIEFkZCBgTW90aW9uQ29udGV4dGAgZXZlbiB0byBjaGlsZHJlbiB0aGF0IGRvbid0IG5lZWQgaXQgdG8gZW5zdXJlIHdlJ3JlIHJlbmRlcmluZ1xuICAgIC8vIHRoZSBzYW1lIHRyZWUgYmV0d2VlbiByZW5kZXJzXG4gICAgY2hpbGRyZW5Ub1JlbmRlciA9IGNoaWxkcmVuVG9SZW5kZXIubWFwKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICB2YXIga2V5ID0gY2hpbGQua2V5O1xuICAgICAgICByZXR1cm4gZXhpdGluZy5oYXMoa2V5KSA/IChjaGlsZCkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChQcmVzZW5jZUNoaWxkLCB7IGtleTogZ2V0Q2hpbGRLZXkoY2hpbGQpLCBpc1ByZXNlbnQ6IHRydWUsIHByZXNlbmNlQWZmZWN0c0xheW91dDogcHJlc2VuY2VBZmZlY3RzTGF5b3V0IH0sIGNoaWxkKSk7XG4gICAgfSk7XG4gICAgaWYgKGVudiAhPT0gXCJwcm9kdWN0aW9uXCIgJiZcbiAgICAgICAgZXhpdEJlZm9yZUVudGVyICYmXG4gICAgICAgIGNoaWxkcmVuVG9SZW5kZXIubGVuZ3RoID4gMSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJZb3UncmUgYXR0ZW1wdGluZyB0byBhbmltYXRlIG11bHRpcGxlIGNoaWxkcmVuIHdpdGhpbiBBbmltYXRlUHJlc2VuY2UsIGJ1dCBpdHMgZXhpdEJlZm9yZUVudGVyIHByb3AgaXMgc2V0IHRvIHRydWUuIFRoaXMgd2lsbCBsZWFkIHRvIG9kZCB2aXN1YWwgYmVoYXZpb3VyLlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBleGl0aW5nLnNpemVcbiAgICAgICAgPyBjaGlsZHJlblRvUmVuZGVyXG4gICAgICAgIDogY2hpbGRyZW5Ub1JlbmRlci5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiBjbG9uZUVsZW1lbnQoY2hpbGQpOyB9KSkpO1xufTtcblxuZXhwb3J0IHsgQW5pbWF0ZVByZXNlbmNlIH07XG4iLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgc3luYyBmcm9tICdmcmFtZXN5bmMnO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlSXNNb3VudGVkIH0gZnJvbSAnLi91c2UtaXMtbW91bnRlZC5tanMnO1xuXG5mdW5jdGlvbiB1c2VGb3JjZVVwZGF0ZSgpIHtcbiAgICB2YXIgaXNNb3VudGVkID0gdXNlSXNNb3VudGVkKCk7XG4gICAgdmFyIF9hID0gX19yZWFkKHVzZVN0YXRlKDApLCAyKSwgZm9yY2VkUmVuZGVyQ291bnQgPSBfYVswXSwgc2V0Rm9yY2VkUmVuZGVyQ291bnQgPSBfYVsxXTtcbiAgICB2YXIgZm9yY2VSZW5kZXIgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlzTW91bnRlZC5jdXJyZW50ICYmIHNldEZvcmNlZFJlbmRlckNvdW50KGZvcmNlZFJlbmRlckNvdW50ICsgMSk7XG4gICAgfSwgW2ZvcmNlZFJlbmRlckNvdW50XSk7XG4gICAgLyoqXG4gICAgICogRGVmZXIgdGhpcyB0byB0aGUgZW5kIG9mIHRoZSBuZXh0IGFuaW1hdGlvbiBmcmFtZSBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZVxuICAgICAqIHN5bmNocm9ub3VzIGNhbGxzLlxuICAgICAqL1xuICAgIHZhciBkZWZlcnJlZEZvcmNlUmVuZGVyID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkgeyByZXR1cm4gc3luYy5wb3N0UmVuZGVyKGZvcmNlUmVuZGVyKTsgfSwgW2ZvcmNlUmVuZGVyXSk7XG4gICAgcmV0dXJuIFtkZWZlcnJlZEZvcmNlUmVuZGVyLCBmb3JjZWRSZW5kZXJDb3VudF07XG59XG5cbmV4cG9ydCB7IHVzZUZvcmNlVXBkYXRlIH07XG4iLCJ2YXIgY3JlYXRlRGVmaW5pdGlvbiA9IGZ1bmN0aW9uIChwcm9wTmFtZXMpIHsgcmV0dXJuICh7XG4gICAgaXNFbmFibGVkOiBmdW5jdGlvbiAocHJvcHMpIHsgcmV0dXJuIHByb3BOYW1lcy5zb21lKGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiAhIXByb3BzW25hbWVdOyB9KTsgfSxcbn0pOyB9O1xudmFyIGZlYXR1cmVEZWZpbml0aW9ucyA9IHtcbiAgICBtZWFzdXJlTGF5b3V0OiBjcmVhdGVEZWZpbml0aW9uKFtcImxheW91dFwiLCBcImxheW91dElkXCIsIFwiZHJhZ1wiXSksXG4gICAgYW5pbWF0aW9uOiBjcmVhdGVEZWZpbml0aW9uKFtcbiAgICAgICAgXCJhbmltYXRlXCIsXG4gICAgICAgIFwiZXhpdFwiLFxuICAgICAgICBcInZhcmlhbnRzXCIsXG4gICAgICAgIFwid2hpbGVIb3ZlclwiLFxuICAgICAgICBcIndoaWxlVGFwXCIsXG4gICAgICAgIFwid2hpbGVGb2N1c1wiLFxuICAgICAgICBcIndoaWxlRHJhZ1wiLFxuICAgICAgICBcIndoaWxlSW5WaWV3XCIsXG4gICAgXSksXG4gICAgZXhpdDogY3JlYXRlRGVmaW5pdGlvbihbXCJleGl0XCJdKSxcbiAgICBkcmFnOiBjcmVhdGVEZWZpbml0aW9uKFtcImRyYWdcIiwgXCJkcmFnQ29udHJvbHNcIl0pLFxuICAgIGZvY3VzOiBjcmVhdGVEZWZpbml0aW9uKFtcIndoaWxlRm9jdXNcIl0pLFxuICAgIGhvdmVyOiBjcmVhdGVEZWZpbml0aW9uKFtcIndoaWxlSG92ZXJcIiwgXCJvbkhvdmVyU3RhcnRcIiwgXCJvbkhvdmVyRW5kXCJdKSxcbiAgICB0YXA6IGNyZWF0ZURlZmluaXRpb24oW1wid2hpbGVUYXBcIiwgXCJvblRhcFwiLCBcIm9uVGFwU3RhcnRcIiwgXCJvblRhcENhbmNlbFwiXSksXG4gICAgcGFuOiBjcmVhdGVEZWZpbml0aW9uKFtcbiAgICAgICAgXCJvblBhblwiLFxuICAgICAgICBcIm9uUGFuU3RhcnRcIixcbiAgICAgICAgXCJvblBhblNlc3Npb25TdGFydFwiLFxuICAgICAgICBcIm9uUGFuRW5kXCIsXG4gICAgXSksXG4gICAgaW5WaWV3OiBjcmVhdGVEZWZpbml0aW9uKFtcbiAgICAgICAgXCJ3aGlsZUluVmlld1wiLFxuICAgICAgICBcIm9uVmlld3BvcnRFbnRlclwiLFxuICAgICAgICBcIm9uVmlld3BvcnRMZWF2ZVwiLFxuICAgIF0pLFxufTtcbmZ1bmN0aW9uIGxvYWRGZWF0dXJlcyhmZWF0dXJlcykge1xuICAgIGZvciAodmFyIGtleSBpbiBmZWF0dXJlcykge1xuICAgICAgICBpZiAoZmVhdHVyZXNba2V5XSA9PT0gbnVsbClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoa2V5ID09PSBcInByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3JcIikge1xuICAgICAgICAgICAgZmVhdHVyZURlZmluaXRpb25zLnByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3IgPSBmZWF0dXJlc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZmVhdHVyZURlZmluaXRpb25zW2tleV0uQ29tcG9uZW50ID0gZmVhdHVyZXNba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IHsgZmVhdHVyZURlZmluaXRpb25zLCBsb2FkRmVhdHVyZXMgfTtcbiIsInZhciB3YXJuaW5nID0gZnVuY3Rpb24gKCkgeyB9O1xyXG52YXIgaW52YXJpYW50ID0gZnVuY3Rpb24gKCkgeyB9O1xyXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgd2FybmluZyA9IGZ1bmN0aW9uIChjaGVjaywgbWVzc2FnZSkge1xyXG4gICAgICAgIGlmICghY2hlY2sgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgaW52YXJpYW50ID0gZnVuY3Rpb24gKGNoZWNrLCBtZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKCFjaGVjaykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxuXG5leHBvcnQgeyBpbnZhcmlhbnQsIHdhcm5pbmcgfTtcbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5cbnZhciBMYXp5Q29udGV4dCA9IGNyZWF0ZUNvbnRleHQoeyBzdHJpY3Q6IGZhbHNlIH0pO1xuXG5leHBvcnQgeyBMYXp5Q29udGV4dCB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vLi4vdXRpbHMvcHJvY2Vzcy5tanMnO1xuaW1wb3J0IHsgZmVhdHVyZURlZmluaXRpb25zIH0gZnJvbSAnLi9kZWZpbml0aW9ucy5tanMnO1xuaW1wb3J0IHsgaW52YXJpYW50IH0gZnJvbSAnaGV5LWxpc3Rlbic7XG5pbXBvcnQgeyBMYXp5Q29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvTGF6eUNvbnRleHQubWpzJztcblxudmFyIGZlYXR1cmVOYW1lcyA9IE9iamVjdC5rZXlzKGZlYXR1cmVEZWZpbml0aW9ucyk7XG52YXIgbnVtRmVhdHVyZXMgPSBmZWF0dXJlTmFtZXMubGVuZ3RoO1xuLyoqXG4gKiBMb2FkIGZlYXR1cmVzIHZpYSByZW5kZXJsZXNzIGNvbXBvbmVudHMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIE1vdGlvblByb3BzLlxuICovXG5mdW5jdGlvbiB1c2VGZWF0dXJlcyhwcm9wcywgdmlzdWFsRWxlbWVudCwgcHJlbG9hZGVkRmVhdHVyZXMpIHtcbiAgICB2YXIgZmVhdHVyZXMgPSBbXTtcbiAgICB2YXIgbGF6eUNvbnRleHQgPSB1c2VDb250ZXh0KExhenlDb250ZXh0KTtcbiAgICBpZiAoIXZpc3VhbEVsZW1lbnQpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIC8qKlxuICAgICAqIElmIHdlJ3JlIGluIGRldmVsb3BtZW50IG1vZGUsIGNoZWNrIHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgcmVuZGVyaW5nIGEgbW90aW9uIGNvbXBvbmVudFxuICAgICAqIGFzIGEgY2hpbGQgb2YgTGF6eU1vdGlvbiwgYXMgdGhpcyB3aWxsIGJyZWFrIHRoZSBmaWxlLXNpemUgYmVuZWZpdHMgb2YgdXNpbmcgaXQuXG4gICAgICovXG4gICAgaWYgKGVudiAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgcHJlbG9hZGVkRmVhdHVyZXMgJiYgbGF6eUNvbnRleHQuc3RyaWN0KSB7XG4gICAgICAgIGludmFyaWFudChmYWxzZSwgXCJZb3UgaGF2ZSByZW5kZXJlZCBhIGBtb3Rpb25gIGNvbXBvbmVudCB3aXRoaW4gYSBgTGF6eU1vdGlvbmAgY29tcG9uZW50LiBUaGlzIHdpbGwgYnJlYWsgdHJlZSBzaGFraW5nLiBJbXBvcnQgYW5kIHJlbmRlciBhIGBtYCBjb21wb25lbnQgaW5zdGVhZC5cIik7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtRmVhdHVyZXM7IGkrKykge1xuICAgICAgICB2YXIgbmFtZV8xID0gZmVhdHVyZU5hbWVzW2ldO1xuICAgICAgICB2YXIgX2EgPSBmZWF0dXJlRGVmaW5pdGlvbnNbbmFtZV8xXSwgaXNFbmFibGVkID0gX2EuaXNFbmFibGVkLCBDb21wb25lbnQgPSBfYS5Db21wb25lbnQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJdCBtaWdodCBiZSBwb3NzaWJsZSBpbiB0aGUgZnV0dXJlIHRvIHVzZSB0aGlzIG1vbWVudCB0b1xuICAgICAgICAgKiBkeW5hbWljYWxseSByZXF1ZXN0IGZ1bmN0aW9uYWxpdHkuIEluIGluaXRpYWwgdGVzdHMgdGhpc1xuICAgICAgICAgKiB3YXMgcHJvZHVjaW5nIGEgbG90IG9mIGR1cGxpY2F0aW9uIGFtb25nc3QgYnVuZGxlcy5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChpc0VuYWJsZWQocHJvcHMpICYmIENvbXBvbmVudCkge1xuICAgICAgICAgICAgZmVhdHVyZXMucHVzaChSZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgX19hc3NpZ24oeyBrZXk6IG5hbWVfMSB9LCBwcm9wcywgeyB2aXN1YWxFbGVtZW50OiB2aXN1YWxFbGVtZW50IH0pKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZlYXR1cmVzO1xufVxuXG5leHBvcnQgeyB1c2VGZWF0dXJlcyB9O1xuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbnZhciBNb3Rpb25Db25maWdDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gICAgdHJhbnNmb3JtUGFnZVBvaW50OiBmdW5jdGlvbiAocCkgeyByZXR1cm4gcDsgfSxcbiAgICBpc1N0YXRpYzogZmFsc2UsXG4gICAgcmVkdWNlZE1vdGlvbjogXCJuZXZlclwiLFxufSk7XG5cbmV4cG9ydCB7IE1vdGlvbkNvbmZpZ0NvbnRleHQgfTtcbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5cbnZhciBNb3Rpb25Db250ZXh0ID0gY3JlYXRlQ29udGV4dCh7fSk7XG5mdW5jdGlvbiB1c2VWaXN1YWxFbGVtZW50Q29udGV4dCgpIHtcbiAgICByZXR1cm4gdXNlQ29udGV4dChNb3Rpb25Db250ZXh0KS52aXN1YWxFbGVtZW50O1xufVxuXG5leHBvcnQgeyBNb3Rpb25Db250ZXh0LCB1c2VWaXN1YWxFbGVtZW50Q29udGV4dCB9O1xuIiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNb3Rpb25Db25maWdDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9Nb3Rpb25Db25maWdDb250ZXh0Lm1qcyc7XG5pbXBvcnQgeyBpc0Jyb3dzZXIgfSBmcm9tICcuL2lzLWJyb3dzZXIubWpzJztcblxuLy8gRG9lcyB0aGlzIGRldmljZSBwcmVmZXIgcmVkdWNlZCBtb3Rpb24/IFJldHVybnMgYG51bGxgIHNlcnZlci1zaWRlLlxudmFyIHByZWZlcnNSZWR1Y2VkTW90aW9uID0geyBjdXJyZW50OiBudWxsIH07XG52YXIgaGFzRGV0ZWN0ZWQgPSBmYWxzZTtcbmZ1bmN0aW9uIGluaXRQcmVmZXJzUmVkdWNlZE1vdGlvbigpIHtcbiAgICBoYXNEZXRlY3RlZCA9IHRydWU7XG4gICAgaWYgKCFpc0Jyb3dzZXIpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAod2luZG93Lm1hdGNoTWVkaWEpIHtcbiAgICAgICAgdmFyIG1vdGlvbk1lZGlhUXVlcnlfMSA9IHdpbmRvdy5tYXRjaE1lZGlhKFwiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pXCIpO1xuICAgICAgICB2YXIgc2V0UmVkdWNlZE1vdGlvblByZWZlcmVuY2VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIChwcmVmZXJzUmVkdWNlZE1vdGlvbi5jdXJyZW50ID0gbW90aW9uTWVkaWFRdWVyeV8xLm1hdGNoZXMpO1xuICAgICAgICB9O1xuICAgICAgICBtb3Rpb25NZWRpYVF1ZXJ5XzEuYWRkTGlzdGVuZXIoc2V0UmVkdWNlZE1vdGlvblByZWZlcmVuY2VzKTtcbiAgICAgICAgc2V0UmVkdWNlZE1vdGlvblByZWZlcmVuY2VzKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBwcmVmZXJzUmVkdWNlZE1vdGlvbi5jdXJyZW50ID0gZmFsc2U7XG4gICAgfVxufVxuLyoqXG4gKiBBIGhvb2sgdGhhdCByZXR1cm5zIGB0cnVlYCBpZiB3ZSBzaG91bGQgYmUgdXNpbmcgcmVkdWNlZCBtb3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgZGV2aWNlJ3MgUmVkdWNlZCBNb3Rpb24gc2V0dGluZy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBjaGFuZ2VzIHRvIHlvdXIgVUkgYmFzZWQgb24gUmVkdWNlZCBNb3Rpb24uIEZvciBpbnN0YW5jZSwgcmVwbGFjaW5nIG1vdGlvbi1zaWNrbmVzcyBpbmR1Y2luZ1xuICogYHhgL2B5YCBhbmltYXRpb25zIHdpdGggYG9wYWNpdHlgLCBkaXNhYmxpbmcgdGhlIGF1dG9wbGF5IG9mIGJhY2tncm91bmQgdmlkZW9zLCBvciB0dXJuaW5nIG9mZiBwYXJhbGxheCBtb3Rpb24uXG4gKlxuICogSXQgd2lsbCBhY3RpdmVseSByZXNwb25kIHRvIGNoYW5nZXMgYW5kIHJlLXJlbmRlciB5b3VyIGNvbXBvbmVudHMgd2l0aCB0aGUgbGF0ZXN0IHNldHRpbmcuXG4gKlxuICogYGBganN4XG4gKiBleHBvcnQgZnVuY3Rpb24gU2lkZWJhcih7IGlzT3BlbiB9KSB7XG4gKiAgIGNvbnN0IHNob3VsZFJlZHVjZU1vdGlvbiA9IHVzZVJlZHVjZWRNb3Rpb24oKVxuICogICBjb25zdCBjbG9zZWRYID0gc2hvdWxkUmVkdWNlTW90aW9uID8gMCA6IFwiLTEwMCVcIlxuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8bW90aW9uLmRpdiBhbmltYXRlPXt7XG4gKiAgICAgICBvcGFjaXR5OiBpc09wZW4gPyAxIDogMCxcbiAqICAgICAgIHg6IGlzT3BlbiA/IDAgOiBjbG9zZWRYXG4gKiAgICAgfX0gLz5cbiAqICAgKVxuICogfVxuICogYGBgXG4gKlxuICogQHJldHVybiBib29sZWFuXG4gKlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiB1c2VSZWR1Y2VkTW90aW9uKCkge1xuICAgIC8qKlxuICAgICAqIExhenkgaW5pdGlhbGlzYXRpb24gb2YgcHJlZmVyc1JlZHVjZWRNb3Rpb25cbiAgICAgKi9cbiAgICAhaGFzRGV0ZWN0ZWQgJiYgaW5pdFByZWZlcnNSZWR1Y2VkTW90aW9uKCk7XG4gICAgdmFyIF9hID0gX19yZWFkKHVzZVN0YXRlKHByZWZlcnNSZWR1Y2VkTW90aW9uLmN1cnJlbnQpLCAxKSwgc2hvdWxkUmVkdWNlTW90aW9uID0gX2FbMF07XG4gICAgLyoqXG4gICAgICogVE9ETyBTZWUgaWYgcGVvcGxlIG1pc3MgYXV0b21hdGljYWxseSB1cGRhdGluZyBzaG91bGRSZWR1Y2VNb3Rpb24gc2V0dGluZ1xuICAgICAqL1xuICAgIHJldHVybiBzaG91bGRSZWR1Y2VNb3Rpb247XG59XG5mdW5jdGlvbiB1c2VSZWR1Y2VkTW90aW9uQ29uZmlnKCkge1xuICAgIHZhciByZWR1Y2VkTW90aW9uUHJlZmVyZW5jZSA9IHVzZVJlZHVjZWRNb3Rpb24oKTtcbiAgICB2YXIgcmVkdWNlZE1vdGlvbiA9IHVzZUNvbnRleHQoTW90aW9uQ29uZmlnQ29udGV4dCkucmVkdWNlZE1vdGlvbjtcbiAgICBpZiAocmVkdWNlZE1vdGlvbiA9PT0gXCJuZXZlclwiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVkdWNlZE1vdGlvbiA9PT0gXCJhbHdheXNcIikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiByZWR1Y2VkTW90aW9uUHJlZmVyZW5jZTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IHVzZVJlZHVjZWRNb3Rpb24sIHVzZVJlZHVjZWRNb3Rpb25Db25maWcgfTtcbiIsImltcG9ydCB7IHVzZUNvbnRleHQsIHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUHJlc2VuY2VDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9QcmVzZW5jZUNvbnRleHQubWpzJztcbmltcG9ydCB7IHVzZVZpc3VhbEVsZW1lbnRDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9Nb3Rpb25Db250ZXh0L2luZGV4Lm1qcyc7XG5pbXBvcnQgeyB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvdXNlLWlzb21vcnBoaWMtZWZmZWN0Lm1qcyc7XG5pbXBvcnQgeyBMYXp5Q29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvTGF6eUNvbnRleHQubWpzJztcbmltcG9ydCB7IHVzZVJlZHVjZWRNb3Rpb25Db25maWcgfSBmcm9tICcuLi8uLi91dGlscy91c2UtcmVkdWNlZC1tb3Rpb24ubWpzJztcblxuZnVuY3Rpb24gdXNlVmlzdWFsRWxlbWVudChDb21wb25lbnQsIHZpc3VhbFN0YXRlLCBwcm9wcywgY3JlYXRlVmlzdWFsRWxlbWVudCkge1xuICAgIHZhciBsYXp5Q29udGV4dCA9IHVzZUNvbnRleHQoTGF6eUNvbnRleHQpO1xuICAgIHZhciBwYXJlbnQgPSB1c2VWaXN1YWxFbGVtZW50Q29udGV4dCgpO1xuICAgIHZhciBwcmVzZW5jZUNvbnRleHQgPSB1c2VDb250ZXh0KFByZXNlbmNlQ29udGV4dCk7XG4gICAgdmFyIHNob3VsZFJlZHVjZU1vdGlvbiA9IHVzZVJlZHVjZWRNb3Rpb25Db25maWcoKTtcbiAgICB2YXIgdmlzdWFsRWxlbWVudFJlZiA9IHVzZVJlZih1bmRlZmluZWQpO1xuICAgIC8qKlxuICAgICAqIElmIHdlIGhhdmVuJ3QgcHJlbG9hZGVkIGEgcmVuZGVyZXIsIGNoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIG9uZSBsYXp5LWxvYWRlZFxuICAgICAqL1xuICAgIGlmICghY3JlYXRlVmlzdWFsRWxlbWVudClcbiAgICAgICAgY3JlYXRlVmlzdWFsRWxlbWVudCA9IGxhenlDb250ZXh0LnJlbmRlcmVyO1xuICAgIGlmICghdmlzdWFsRWxlbWVudFJlZi5jdXJyZW50ICYmIGNyZWF0ZVZpc3VhbEVsZW1lbnQpIHtcbiAgICAgICAgdmlzdWFsRWxlbWVudFJlZi5jdXJyZW50ID0gY3JlYXRlVmlzdWFsRWxlbWVudChDb21wb25lbnQsIHtcbiAgICAgICAgICAgIHZpc3VhbFN0YXRlOiB2aXN1YWxTdGF0ZSxcbiAgICAgICAgICAgIHBhcmVudDogcGFyZW50LFxuICAgICAgICAgICAgcHJvcHM6IHByb3BzLFxuICAgICAgICAgICAgcHJlc2VuY2VJZDogcHJlc2VuY2VDb250ZXh0ID09PSBudWxsIHx8IHByZXNlbmNlQ29udGV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJlc2VuY2VDb250ZXh0LmlkLFxuICAgICAgICAgICAgYmxvY2tJbml0aWFsQW5pbWF0aW9uOiAocHJlc2VuY2VDb250ZXh0ID09PSBudWxsIHx8IHByZXNlbmNlQ29udGV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJlc2VuY2VDb250ZXh0LmluaXRpYWwpID09PSBmYWxzZSxcbiAgICAgICAgICAgIHNob3VsZFJlZHVjZU1vdGlvbjogc2hvdWxkUmVkdWNlTW90aW9uLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdmFyIHZpc3VhbEVsZW1lbnQgPSB2aXN1YWxFbGVtZW50UmVmLmN1cnJlbnQ7XG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZpc3VhbEVsZW1lbnQgPT09IG51bGwgfHwgdmlzdWFsRWxlbWVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmlzdWFsRWxlbWVudC5zeW5jUmVuZGVyKCk7XG4gICAgfSk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAoX2EgPSB2aXN1YWxFbGVtZW50ID09PSBudWxsIHx8IHZpc3VhbEVsZW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hbmltYXRlQ2hhbmdlcygpO1xuICAgIH0pO1xuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gdmlzdWFsRWxlbWVudCA9PT0gbnVsbCB8fCB2aXN1YWxFbGVtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2aXN1YWxFbGVtZW50Lm5vdGlmeVVubW91bnQoKTsgfTsgfSwgW10pO1xuICAgIHJldHVybiB2aXN1YWxFbGVtZW50O1xufVxuXG5leHBvcnQgeyB1c2VWaXN1YWxFbGVtZW50IH07XG4iLCJmdW5jdGlvbiBpc1JlZk9iamVjdChyZWYpIHtcbiAgICByZXR1cm4gKHR5cGVvZiByZWYgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlZiwgXCJjdXJyZW50XCIpKTtcbn1cblxuZXhwb3J0IHsgaXNSZWZPYmplY3QgfTtcbiIsIi8qKlxuICogRGVjaWRlcyBpZiB0aGUgc3VwcGxpZWQgdmFyaWFibGUgaXMgYW4gYXJyYXkgb2YgdmFyaWFudCBsYWJlbHNcbiAqL1xuZnVuY3Rpb24gaXNWYXJpYW50TGFiZWxzKHYpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2KTtcbn1cbi8qKlxuICogRGVjaWRlcyBpZiB0aGUgc3VwcGxpZWQgdmFyaWFibGUgaXMgdmFyaWFudCBsYWJlbFxuICovXG5mdW5jdGlvbiBpc1ZhcmlhbnRMYWJlbCh2KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSBcInN0cmluZ1wiIHx8IGlzVmFyaWFudExhYmVscyh2KTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgbGF0ZXN0IHN0YXRlIG9mIGV2ZXJ5IE1vdGlvblZhbHVlIG9uIGEgVmlzdWFsRWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRDdXJyZW50KHZpc3VhbEVsZW1lbnQpIHtcbiAgICB2YXIgY3VycmVudCA9IHt9O1xuICAgIHZpc3VhbEVsZW1lbnQuZm9yRWFjaFZhbHVlKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7IHJldHVybiAoY3VycmVudFtrZXldID0gdmFsdWUuZ2V0KCkpOyB9KTtcbiAgICByZXR1cm4gY3VycmVudDtcbn1cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgbGF0ZXN0IHZlbG9jaXR5IG9mIGV2ZXJ5IE1vdGlvblZhbHVlIG9uIGEgVmlzdWFsRWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRWZWxvY2l0eSh2aXN1YWxFbGVtZW50KSB7XG4gICAgdmFyIHZlbG9jaXR5ID0ge307XG4gICAgdmlzdWFsRWxlbWVudC5mb3JFYWNoVmFsdWUoZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHsgcmV0dXJuICh2ZWxvY2l0eVtrZXldID0gdmFsdWUuZ2V0VmVsb2NpdHkoKSk7IH0pO1xuICAgIHJldHVybiB2ZWxvY2l0eTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVWYXJpYW50RnJvbVByb3BzKHByb3BzLCBkZWZpbml0aW9uLCBjdXN0b20sIGN1cnJlbnRWYWx1ZXMsIGN1cnJlbnRWZWxvY2l0eSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoY3VycmVudFZhbHVlcyA9PT0gdm9pZCAwKSB7IGN1cnJlbnRWYWx1ZXMgPSB7fTsgfVxuICAgIGlmIChjdXJyZW50VmVsb2NpdHkgPT09IHZvaWQgMCkgeyBjdXJyZW50VmVsb2NpdHkgPSB7fTsgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSB2YXJpYW50IGRlZmluaXRpb24gaXMgYSBmdW5jdGlvbiwgcmVzb2x2ZS5cbiAgICAgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluaXRpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBkZWZpbml0aW9uID0gZGVmaW5pdGlvbihjdXN0b20gIT09IG51bGwgJiYgY3VzdG9tICE9PSB2b2lkIDAgPyBjdXN0b20gOiBwcm9wcy5jdXN0b20sIGN1cnJlbnRWYWx1ZXMsIGN1cnJlbnRWZWxvY2l0eSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSB2YXJpYW50IGRlZmluaXRpb24gaXMgYSB2YXJpYW50IGxhYmVsLCBvclxuICAgICAqIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBhIHZhcmlhbnQgbGFiZWwsIHJlc29sdmUuXG4gICAgICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbml0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGRlZmluaXRpb24gPSAoX2EgPSBwcm9wcy52YXJpYW50cykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW2RlZmluaXRpb25dO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBdCB0aGlzIHBvaW50IHdlJ3ZlIHJlc29sdmVkIGJvdGggZnVuY3Rpb25zIGFuZCB2YXJpYW50IGxhYmVscyxcbiAgICAgKiBidXQgdGhlIHJlc29sdmVkIHZhcmlhbnQgbGFiZWwgbWlnaHQgaXRzZWxmIGhhdmUgYmVlbiBhIGZ1bmN0aW9uLlxuICAgICAqIElmIHNvLCByZXNvbHZlLiBUaGlzIGNhbiBvbmx5IGhhdmUgcmV0dXJuZWQgYSB2YWxpZCB0YXJnZXQgb2JqZWN0LlxuICAgICAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5pdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGRlZmluaXRpb24gPSBkZWZpbml0aW9uKGN1c3RvbSAhPT0gbnVsbCAmJiBjdXN0b20gIT09IHZvaWQgMCA/IGN1c3RvbSA6IHByb3BzLmN1c3RvbSwgY3VycmVudFZhbHVlcywgY3VycmVudFZlbG9jaXR5KTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmluaXRpb247XG59XG5mdW5jdGlvbiByZXNvbHZlVmFyaWFudCh2aXN1YWxFbGVtZW50LCBkZWZpbml0aW9uLCBjdXN0b20pIHtcbiAgICB2YXIgcHJvcHMgPSB2aXN1YWxFbGVtZW50LmdldFByb3BzKCk7XG4gICAgcmV0dXJuIHJlc29sdmVWYXJpYW50RnJvbVByb3BzKHByb3BzLCBkZWZpbml0aW9uLCBjdXN0b20gIT09IG51bGwgJiYgY3VzdG9tICE9PSB2b2lkIDAgPyBjdXN0b20gOiBwcm9wcy5jdXN0b20sIGdldEN1cnJlbnQodmlzdWFsRWxlbWVudCksIGdldFZlbG9jaXR5KHZpc3VhbEVsZW1lbnQpKTtcbn1cbmZ1bmN0aW9uIGNoZWNrSWZDb250cm9sbGluZ1ZhcmlhbnRzKHByb3BzKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAodHlwZW9mICgoX2EgPSBwcm9wcy5hbmltYXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3RhcnQpID09PSBcImZ1bmN0aW9uXCIgfHxcbiAgICAgICAgaXNWYXJpYW50TGFiZWwocHJvcHMuaW5pdGlhbCkgfHxcbiAgICAgICAgaXNWYXJpYW50TGFiZWwocHJvcHMuYW5pbWF0ZSkgfHxcbiAgICAgICAgaXNWYXJpYW50TGFiZWwocHJvcHMud2hpbGVIb3ZlcikgfHxcbiAgICAgICAgaXNWYXJpYW50TGFiZWwocHJvcHMud2hpbGVEcmFnKSB8fFxuICAgICAgICBpc1ZhcmlhbnRMYWJlbChwcm9wcy53aGlsZVRhcCkgfHxcbiAgICAgICAgaXNWYXJpYW50TGFiZWwocHJvcHMud2hpbGVGb2N1cykgfHxcbiAgICAgICAgaXNWYXJpYW50TGFiZWwocHJvcHMuZXhpdCkpO1xufVxuZnVuY3Rpb24gY2hlY2tJZlZhcmlhbnROb2RlKHByb3BzKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oY2hlY2tJZkNvbnRyb2xsaW5nVmFyaWFudHMocHJvcHMpIHx8IHByb3BzLnZhcmlhbnRzKTtcbn1cblxuZXhwb3J0IHsgY2hlY2tJZkNvbnRyb2xsaW5nVmFyaWFudHMsIGNoZWNrSWZWYXJpYW50Tm9kZSwgaXNWYXJpYW50TGFiZWwsIGlzVmFyaWFudExhYmVscywgcmVzb2x2ZVZhcmlhbnQsIHJlc29sdmVWYXJpYW50RnJvbVByb3BzIH07XG4iLCJpbXBvcnQgeyB1c2VNZW1vLCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTW90aW9uQ29udGV4dCB9IGZyb20gJy4vaW5kZXgubWpzJztcbmltcG9ydCB7IGdldEN1cnJlbnRUcmVlVmFyaWFudHMgfSBmcm9tICcuL3V0aWxzLm1qcyc7XG5cbmZ1bmN0aW9uIHVzZUNyZWF0ZU1vdGlvbkNvbnRleHQocHJvcHMpIHtcbiAgICB2YXIgX2EgPSBnZXRDdXJyZW50VHJlZVZhcmlhbnRzKHByb3BzLCB1c2VDb250ZXh0KE1vdGlvbkNvbnRleHQpKSwgaW5pdGlhbCA9IF9hLmluaXRpYWwsIGFuaW1hdGUgPSBfYS5hbmltYXRlO1xuICAgIHJldHVybiB1c2VNZW1vKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7IGluaXRpYWw6IGluaXRpYWwsIGFuaW1hdGU6IGFuaW1hdGUgfSk7IH0sIFt2YXJpYW50TGFiZWxzQXNEZXBlbmRlbmN5KGluaXRpYWwpLCB2YXJpYW50TGFiZWxzQXNEZXBlbmRlbmN5KGFuaW1hdGUpXSk7XG59XG5mdW5jdGlvbiB2YXJpYW50TGFiZWxzQXNEZXBlbmRlbmN5KHByb3ApIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwcm9wKSA/IHByb3Auam9pbihcIiBcIikgOiBwcm9wO1xufVxuXG5leHBvcnQgeyB1c2VDcmVhdGVNb3Rpb25Db250ZXh0IH07XG4iLCIvKipcbiAqIFRoaXMgc2hvdWxkIG9ubHkgZXZlciBiZSBtb2RpZmllZCBvbiB0aGUgY2xpZW50IG90aGVyd2lzZSBpdCdsbFxuICogcGVyc2lzdCB0aHJvdWdoIHNlcnZlciByZXF1ZXN0cy4gSWYgd2UgbmVlZCBpbnN0YW5jZWQgc3RhdGVzIHdlXG4gKiBjb3VsZCBsYXp5LWluaXQgdmlhIHJvb3QuXG4gKi9cbnZhciBnbG9iYWxQcm9qZWN0aW9uU3RhdGUgPSB7XG4gICAgLyoqXG4gICAgICogR2xvYmFsIGZsYWcgYXMgdG8gd2hldGhlciB0aGUgdHJlZSBoYXMgYW5pbWF0ZWQgc2luY2UgdGhlIGxhc3QgdGltZVxuICAgICAqIHdlIHJlc2l6ZWQgdGhlIHdpbmRvd1xuICAgICAqL1xuICAgIGhhc0FuaW1hdGVkU2luY2VSZXNpemU6IHRydWUsXG4gICAgLyoqXG4gICAgICogV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBvbmNlLCBvbiB0aGUgZmlyc3QgdXBkYXRlLiBBbnkgbm9kZXMgYWRkZWQgdG8gdGhlIHRyZWUgYmV5b25kIHRoYXRcbiAgICAgKiB1cGRhdGUgd2lsbCBiZSBnaXZlbiBhIGBkYXRhLXByb2plY3Rpb24taWRgIGF0dHJpYnV0ZS5cbiAgICAgKi9cbiAgICBoYXNFdmVyVXBkYXRlZDogZmFsc2UsXG59O1xuXG5leHBvcnQgeyBnbG9iYWxQcm9qZWN0aW9uU3RhdGUgfTtcbiIsImltcG9ydCB7IHVzZUNvbnN0YW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvdXNlLWNvbnN0YW50Lm1qcyc7XG5pbXBvcnQgeyBnbG9iYWxQcm9qZWN0aW9uU3RhdGUgfSBmcm9tICcuL3N0YXRlLm1qcyc7XG5cbnZhciBpZCA9IDE7XG5mdW5jdGlvbiB1c2VQcm9qZWN0aW9uSWQoKSB7XG4gICAgcmV0dXJuIHVzZUNvbnN0YW50KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGdsb2JhbFByb2plY3Rpb25TdGF0ZS5oYXNFdmVyVXBkYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGlkKys7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZXhwb3J0IHsgdXNlUHJvamVjdGlvbklkIH07XG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIEludGVybmFsLCBleHBvcnRlZCBvbmx5IGZvciB1c2FnZSBpbiBGcmFtZXJcbiAqL1xudmFyIFN3aXRjaExheW91dEdyb3VwQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe30pO1xuXG5leHBvcnQgeyBTd2l0Y2hMYXlvdXRHcm91cENvbnRleHQgfTtcbiIsImltcG9ydCB7IF9fZXh0ZW5kcyB9IGZyb20gJ3RzbGliJztcbmltcG9ydCBSZWFjdF9fZGVmYXVsdCBmcm9tICdyZWFjdCc7XG5cbnZhciBWaXN1YWxFbGVtZW50SGFuZGxlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVmlzdWFsRWxlbWVudEhhbmRsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVmlzdWFsRWxlbWVudEhhbmRsZXIoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBkYXRlIHZpc3VhbCBlbGVtZW50IHByb3BzIGFzIHNvb24gYXMgd2Uga25vdyB0aGlzIHVwZGF0ZSBpcyBnb2luZyB0byBiZSBjb21taXRlZC5cbiAgICAgKi9cbiAgICBWaXN1YWxFbGVtZW50SGFuZGxlci5wcm90b3R5cGUuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUHJvcHMoKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBWaXN1YWxFbGVtZW50SGFuZGxlci5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgIFZpc3VhbEVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS51cGRhdGVQcm9wcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcy5wcm9wcywgdmlzdWFsRWxlbWVudCA9IF9hLnZpc3VhbEVsZW1lbnQsIHByb3BzID0gX2EucHJvcHM7XG4gICAgICAgIGlmICh2aXN1YWxFbGVtZW50KVxuICAgICAgICAgICAgdmlzdWFsRWxlbWVudC5zZXRQcm9wcyhwcm9wcyk7XG4gICAgfTtcbiAgICBWaXN1YWxFbGVtZW50SGFuZGxlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICB9O1xuICAgIHJldHVybiBWaXN1YWxFbGVtZW50SGFuZGxlcjtcbn0oUmVhY3RfX2RlZmF1bHQuQ29tcG9uZW50KSk7XG5cbmV4cG9ydCB7IFZpc3VhbEVsZW1lbnRIYW5kbGVyIH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZvcndhcmRSZWYsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VGZWF0dXJlcyB9IGZyb20gJy4vZmVhdHVyZXMvdXNlLWZlYXR1cmVzLm1qcyc7XG5pbXBvcnQgeyBNb3Rpb25Db25maWdDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9Nb3Rpb25Db25maWdDb250ZXh0Lm1qcyc7XG5pbXBvcnQgeyBNb3Rpb25Db250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9Nb3Rpb25Db250ZXh0L2luZGV4Lm1qcyc7XG5pbXBvcnQgeyB1c2VWaXN1YWxFbGVtZW50IH0gZnJvbSAnLi91dGlscy91c2UtdmlzdWFsLWVsZW1lbnQubWpzJztcbmltcG9ydCB7IHVzZU1vdGlvblJlZiB9IGZyb20gJy4vdXRpbHMvdXNlLW1vdGlvbi1yZWYubWpzJztcbmltcG9ydCB7IHVzZUNyZWF0ZU1vdGlvbkNvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0L01vdGlvbkNvbnRleHQvY3JlYXRlLm1qcyc7XG5pbXBvcnQgeyBsb2FkRmVhdHVyZXMsIGZlYXR1cmVEZWZpbml0aW9ucyB9IGZyb20gJy4vZmVhdHVyZXMvZGVmaW5pdGlvbnMubWpzJztcbmltcG9ydCB7IGlzQnJvd3NlciB9IGZyb20gJy4uL3V0aWxzL2lzLWJyb3dzZXIubWpzJztcbmltcG9ydCB7IHVzZVByb2plY3Rpb25JZCB9IGZyb20gJy4uL3Byb2plY3Rpb24vbm9kZS9pZC5tanMnO1xuaW1wb3J0IHsgTGF5b3V0R3JvdXBDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9MYXlvdXRHcm91cENvbnRleHQubWpzJztcbmltcG9ydCB7IHVzZVByb2plY3Rpb24gfSBmcm9tICcuL2ZlYXR1cmVzL3VzZS1wcm9qZWN0aW9uLm1qcyc7XG5pbXBvcnQgeyBWaXN1YWxFbGVtZW50SGFuZGxlciB9IGZyb20gJy4vdXRpbHMvVmlzdWFsRWxlbWVudEhhbmRsZXIubWpzJztcblxuLyoqXG4gKiBDcmVhdGUgYSBgbW90aW9uYCBjb21wb25lbnQuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBhY2NlcHRzIGEgQ29tcG9uZW50IGFyZ3VtZW50LCB3aGljaCBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIChpZSBcImRpdlwiXG4gKiBmb3IgYG1vdGlvbi5kaXZgKSwgb3IgYW4gYWN0dWFsIFJlYWN0IGNvbXBvbmVudC5cbiAqXG4gKiBBbG9uZ3NpZGUgdGhpcyBpcyBhIGNvbmZpZyBvcHRpb24gd2hpY2ggcHJvdmlkZXMgYSB3YXkgb2YgcmVuZGVyaW5nIHRoZSBwcm92aWRlZFxuICogY29tcG9uZW50IFwib2ZmbGluZVwiLCBvciBvdXRzaWRlIHRoZSBSZWFjdCByZW5kZXIgY3ljbGUuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU1vdGlvbkNvbXBvbmVudChfYSkge1xuICAgIHZhciBwcmVsb2FkZWRGZWF0dXJlcyA9IF9hLnByZWxvYWRlZEZlYXR1cmVzLCBjcmVhdGVWaXN1YWxFbGVtZW50ID0gX2EuY3JlYXRlVmlzdWFsRWxlbWVudCwgcHJvamVjdGlvbk5vZGVDb25zdHJ1Y3RvciA9IF9hLnByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3IsIHVzZVJlbmRlciA9IF9hLnVzZVJlbmRlciwgdXNlVmlzdWFsU3RhdGUgPSBfYS51c2VWaXN1YWxTdGF0ZSwgQ29tcG9uZW50ID0gX2EuQ29tcG9uZW50O1xuICAgIHByZWxvYWRlZEZlYXR1cmVzICYmIGxvYWRGZWF0dXJlcyhwcmVsb2FkZWRGZWF0dXJlcyk7XG4gICAgZnVuY3Rpb24gTW90aW9uQ29tcG9uZW50KHByb3BzLCBleHRlcm5hbFJlZikge1xuICAgICAgICB2YXIgbGF5b3V0SWQgPSB1c2VMYXlvdXRJZChwcm9wcyk7XG4gICAgICAgIHByb3BzID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHByb3BzKSwgeyBsYXlvdXRJZDogbGF5b3V0SWQgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiB3ZSdyZSByZW5kZXJpbmcgaW4gYSBzdGF0aWMgZW52aXJvbm1lbnQsIHdlIG9ubHkgdmlzdWFsbHkgdXBkYXRlIHRoZSBjb21wb25lbnRcbiAgICAgICAgICogYXMgYSByZXN1bHQgb2YgYSBSZWFjdC1yZXJlbmRlciByYXRoZXIgdGhhbiBpbnRlcmFjdGlvbnMgb3IgYW5pbWF0aW9ucy4gVGhpc1xuICAgICAgICAgKiBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIGxvYWQgYWRkaXRpb25hbCBtZW1vcnkgc3RydWN0dXJlcyBsaWtlIFZpc3VhbEVsZW1lbnQsXG4gICAgICAgICAqIG9yIGFueSBnZXN0dXJlL2FuaW1hdGlvbiBmZWF0dXJlcy5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBjb25maWcgPSB1c2VDb250ZXh0KE1vdGlvbkNvbmZpZ0NvbnRleHQpO1xuICAgICAgICB2YXIgZmVhdHVyZXMgPSBudWxsO1xuICAgICAgICB2YXIgY29udGV4dCA9IHVzZUNyZWF0ZU1vdGlvbkNvbnRleHQocHJvcHMpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlIGEgdW5pcXVlIHByb2plY3Rpb24gSUQgZm9yIHRoaXMgY29tcG9uZW50LiBJZiBhIG5ldyBjb21wb25lbnQgaXMgYWRkZWRcbiAgICAgICAgICogZHVyaW5nIGEgbGF5b3V0IGFuaW1hdGlvbiB3ZSdsbCB1c2UgdGhpcyB0byBxdWVyeSB0aGUgRE9NIGFuZCBoeWRyYXRlIGl0cyByZWYgZWFybHksIGFsbG93aW5nXG4gICAgICAgICAqIHVzIHRvIG1lYXN1cmUgaXQgYXMgc29vbiBhcyBhbnkgbGF5b3V0IGVmZmVjdCBmbHVzaGVzIHBlbmRpbmcgbGF5b3V0IGFuaW1hdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFBlcmZvcm1hbmNlIG5vdGU6IEl0J2QgYmUgYmV0dGVyIG5vdCB0byBoYXZlIHRvIHNlYXJjaCB0aGUgRE9NIGZvciB0aGVzZSBlbGVtZW50cy5cbiAgICAgICAgICogRm9yIG5ld2x5LWVudGVyaW5nIGNvbXBvbmVudHMgaXQgY291bGQgYmUgZW5vdWdoIHRvIG9ubHkgY29ycmVjdCB0cmVlU2NhbGUsIGluIHdoaWNoXG4gICAgICAgICAqIGNhc2Ugd2UgY291bGQgbW91bnQgaW4gYSBzY2FsZS1jb3JyZWN0aW9uIG1vZGUuIFRoaXMgd291bGRuJ3QgYmUgZW5vdWdoIGZvclxuICAgICAgICAgKiBzaGFyZWQgZWxlbWVudCB0cmFuc2l0aW9ucyBob3dldmVyLiBQZXJoYXBzIGZvciB0aG9zZSB3ZSBjb3VsZCByZXZlcnQgdG8gYSByb290IG5vZGVcbiAgICAgICAgICogdGhhdCBnZXRzIGZvcmNlUmVuZGVyZWQgYW5kIGxheW91dCBhbmltYXRpb25zIGFyZSB0cmlnZ2VyZWQgb24gaXRzIGxheW91dCBlZmZlY3QuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgcHJvamVjdGlvbklkID0gY29uZmlnLmlzU3RhdGljID8gdW5kZWZpbmVkIDogdXNlUHJvamVjdGlvbklkKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHZpc3VhbFN0YXRlID0gdXNlVmlzdWFsU3RhdGUocHJvcHMsIGNvbmZpZy5pc1N0YXRpYyk7XG4gICAgICAgIGlmICghY29uZmlnLmlzU3RhdGljICYmIGlzQnJvd3Nlcikge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBDcmVhdGUgYSBWaXN1YWxFbGVtZW50IGZvciB0aGlzIGNvbXBvbmVudC4gQSBWaXN1YWxFbGVtZW50IHByb3ZpZGVzIGEgY29tbW9uXG4gICAgICAgICAgICAgKiBpbnRlcmZhY2UgdG8gcmVuZGVyZXItc3BlY2lmaWMgQVBJcyAoaWUgRE9NL1RocmVlLmpzIGV0YykgYXMgd2VsbCBhc1xuICAgICAgICAgICAgICogcHJvdmlkaW5nIGEgd2F5IG9mIHJlbmRlcmluZyB0byB0aGVzZSBBUElzIG91dHNpZGUgb2YgdGhlIFJlYWN0IHJlbmRlciBsb29wXG4gICAgICAgICAgICAgKiBmb3IgbW9yZSBwZXJmb3JtYW50IGFuaW1hdGlvbnMgYW5kIGludGVyYWN0aW9uc1xuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb250ZXh0LnZpc3VhbEVsZW1lbnQgPSB1c2VWaXN1YWxFbGVtZW50KENvbXBvbmVudCwgdmlzdWFsU3RhdGUsIF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb25maWcpLCBwcm9wcyksIGNyZWF0ZVZpc3VhbEVsZW1lbnQpO1xuICAgICAgICAgICAgdXNlUHJvamVjdGlvbihwcm9qZWN0aW9uSWQsIHByb3BzLCBjb250ZXh0LnZpc3VhbEVsZW1lbnQsIHByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3IgfHxcbiAgICAgICAgICAgICAgICBmZWF0dXJlRGVmaW5pdGlvbnMucHJvamVjdGlvbk5vZGVDb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIExvYWQgTW90aW9uIGdlc3R1cmUgYW5kIGFuaW1hdGlvbiBmZWF0dXJlcy4gVGhlc2UgYXJlIHJlbmRlcmVkIGFzIHJlbmRlcmxlc3NcbiAgICAgICAgICAgICAqIGNvbXBvbmVudHMgc28gZWFjaCBmZWF0dXJlIGNhbiBvcHRpb25hbGx5IG1ha2UgdXNlIG9mIFJlYWN0IGxpZmVjeWNsZSBtZXRob2RzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBmZWF0dXJlcyA9IHVzZUZlYXR1cmVzKHByb3BzLCBjb250ZXh0LnZpc3VhbEVsZW1lbnQsIHByZWxvYWRlZEZlYXR1cmVzKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIG1vdW50IG9yZGVyIGFuZCBoaWVyYXJjaHkgaXMgc3BlY2lmaWMgdG8gZW5zdXJlIG91ciBlbGVtZW50IHJlZlxuICAgICAgICAgKiBpcyBoeWRyYXRlZCBieSB0aGUgdGltZSBmZWF0dXJlcyBmaXJlIHRoZWlyIGVmZmVjdHMuXG4gICAgICAgICAqL1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsRWxlbWVudEhhbmRsZXIsIHsgdmlzdWFsRWxlbWVudDogY29udGV4dC52aXN1YWxFbGVtZW50LCBwcm9wczogX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbmZpZyksIHByb3BzKSB9LFxuICAgICAgICAgICAgZmVhdHVyZXMsXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KE1vdGlvbkNvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGNvbnRleHQgfSwgdXNlUmVuZGVyKENvbXBvbmVudCwgcHJvcHMsIHByb2plY3Rpb25JZCwgdXNlTW90aW9uUmVmKHZpc3VhbFN0YXRlLCBjb250ZXh0LnZpc3VhbEVsZW1lbnQsIGV4dGVybmFsUmVmKSwgdmlzdWFsU3RhdGUsIGNvbmZpZy5pc1N0YXRpYywgY29udGV4dC52aXN1YWxFbGVtZW50KSkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcndhcmRSZWYoTW90aW9uQ29tcG9uZW50KTtcbn1cbmZ1bmN0aW9uIHVzZUxheW91dElkKF9hKSB7XG4gICAgdmFyIF9iO1xuICAgIHZhciBsYXlvdXRJZCA9IF9hLmxheW91dElkO1xuICAgIHZhciBsYXlvdXRHcm91cElkID0gKF9iID0gdXNlQ29udGV4dChMYXlvdXRHcm91cENvbnRleHQpKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQ7XG4gICAgcmV0dXJuIGxheW91dEdyb3VwSWQgJiYgbGF5b3V0SWQgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGxheW91dEdyb3VwSWQgKyBcIi1cIiArIGxheW91dElkXG4gICAgICAgIDogbGF5b3V0SWQ7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZU1vdGlvbkNvbXBvbmVudCB9O1xuIiwiaW1wb3J0IHsgY2hlY2tJZkNvbnRyb2xsaW5nVmFyaWFudHMsIGlzVmFyaWFudExhYmVsIH0gZnJvbSAnLi4vLi4vcmVuZGVyL3V0aWxzL3ZhcmlhbnRzLm1qcyc7XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRUcmVlVmFyaWFudHMocHJvcHMsIGNvbnRleHQpIHtcbiAgICBpZiAoY2hlY2tJZkNvbnRyb2xsaW5nVmFyaWFudHMocHJvcHMpKSB7XG4gICAgICAgIHZhciBpbml0aWFsID0gcHJvcHMuaW5pdGlhbCwgYW5pbWF0ZSA9IHByb3BzLmFuaW1hdGU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbml0aWFsOiBpbml0aWFsID09PSBmYWxzZSB8fCBpc1ZhcmlhbnRMYWJlbChpbml0aWFsKVxuICAgICAgICAgICAgICAgID8gaW5pdGlhbFxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYW5pbWF0ZTogaXNWYXJpYW50TGFiZWwoYW5pbWF0ZSkgPyBhbmltYXRlIDogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gcHJvcHMuaW5oZXJpdCAhPT0gZmFsc2UgPyBjb250ZXh0IDoge307XG59XG5cbmV4cG9ydCB7IGdldEN1cnJlbnRUcmVlVmFyaWFudHMgfTtcbiIsImltcG9ydCB7IGlzUmVmT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaXMtcmVmLW9iamVjdC5tanMnO1xuaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFN3aXRjaExheW91dEdyb3VwQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvU3dpdGNoTGF5b3V0R3JvdXBDb250ZXh0Lm1qcyc7XG5cbmZ1bmN0aW9uIHVzZVByb2plY3Rpb24ocHJvamVjdGlvbklkLCBfYSwgdmlzdWFsRWxlbWVudCwgUHJvamVjdGlvbk5vZGVDb25zdHJ1Y3Rvcikge1xuICAgIHZhciBfYjtcbiAgICB2YXIgbGF5b3V0SWQgPSBfYS5sYXlvdXRJZCwgbGF5b3V0ID0gX2EubGF5b3V0LCBkcmFnID0gX2EuZHJhZywgZHJhZ0NvbnN0cmFpbnRzID0gX2EuZHJhZ0NvbnN0cmFpbnRzLCBsYXlvdXRTY3JvbGwgPSBfYS5sYXlvdXRTY3JvbGw7XG4gICAgdmFyIGluaXRpYWxQcm9tb3Rpb25Db25maWcgPSB1c2VDb250ZXh0KFN3aXRjaExheW91dEdyb3VwQ29udGV4dCk7XG4gICAgaWYgKCFQcm9qZWN0aW9uTm9kZUNvbnN0cnVjdG9yIHx8XG4gICAgICAgICF2aXN1YWxFbGVtZW50IHx8XG4gICAgICAgICh2aXN1YWxFbGVtZW50ID09PSBudWxsIHx8IHZpc3VhbEVsZW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZpc3VhbEVsZW1lbnQucHJvamVjdGlvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2aXN1YWxFbGVtZW50LnByb2plY3Rpb24gPSBuZXcgUHJvamVjdGlvbk5vZGVDb25zdHJ1Y3Rvcihwcm9qZWN0aW9uSWQsIHZpc3VhbEVsZW1lbnQuZ2V0TGF0ZXN0VmFsdWVzKCksIChfYiA9IHZpc3VhbEVsZW1lbnQucGFyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucHJvamVjdGlvbik7XG4gICAgdmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uLnNldE9wdGlvbnMoe1xuICAgICAgICBsYXlvdXRJZDogbGF5b3V0SWQsXG4gICAgICAgIGxheW91dDogbGF5b3V0LFxuICAgICAgICBhbHdheXNNZWFzdXJlTGF5b3V0OiBCb29sZWFuKGRyYWcpIHx8IChkcmFnQ29uc3RyYWludHMgJiYgaXNSZWZPYmplY3QoZHJhZ0NvbnN0cmFpbnRzKSksXG4gICAgICAgIHZpc3VhbEVsZW1lbnQ6IHZpc3VhbEVsZW1lbnQsXG4gICAgICAgIHNjaGVkdWxlUmVuZGVyOiBmdW5jdGlvbiAoKSB7IHJldHVybiB2aXN1YWxFbGVtZW50LnNjaGVkdWxlUmVuZGVyKCk7IH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUT0RPOiBVcGRhdGUgb3B0aW9ucyBpbiBhbiBlZmZlY3QuIFRoaXMgY291bGQgYmUgdHJpY2t5IGFzIGl0J2xsIGJlIHRvbyBsYXRlXG4gICAgICAgICAqIHRvIHVwZGF0ZSBieSB0aGUgdGltZSBsYXlvdXQgYW5pbWF0aW9ucyBydW4uXG4gICAgICAgICAqIFdlIGFsc28gbmVlZCB0byBmaXggdGhpcyBzYWZlVG9SZW1vdmUgYnkgbGlua2luZyBpdCB1cCB0byB0aGUgb25lIHJldHVybmVkIGJ5IHVzZVByZXNlbmNlLFxuICAgICAgICAgKiBlbnN1cmluZyBpdCBnZXRzIGNhbGxlZCBpZiB0aGVyZSdzIG5vIHBvdGVudGlhbCBsYXlvdXQgYW5pbWF0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIGFuaW1hdGlvblR5cGU6IHR5cGVvZiBsYXlvdXQgPT09IFwic3RyaW5nXCIgPyBsYXlvdXQgOiBcImJvdGhcIixcbiAgICAgICAgaW5pdGlhbFByb21vdGlvbkNvbmZpZzogaW5pdGlhbFByb21vdGlvbkNvbmZpZyxcbiAgICAgICAgbGF5b3V0U2Nyb2xsOiBsYXlvdXRTY3JvbGwsXG4gICAgfSk7XG59XG5cbmV4cG9ydCB7IHVzZVByb2plY3Rpb24gfTtcbiIsImltcG9ydCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNSZWZPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscy9pcy1yZWYtb2JqZWN0Lm1qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHJlZiBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCwgaHlkcmF0ZXMgdGhlIHByb3ZpZGVkXG4gKiBleHRlcm5hbCByZWYgYW5kIFZpc3VhbEVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHVzZU1vdGlvblJlZih2aXN1YWxTdGF0ZSwgdmlzdWFsRWxlbWVudCwgZXh0ZXJuYWxSZWYpIHtcbiAgICByZXR1cm4gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaW5zdGFuY2UgJiYgKChfYSA9IHZpc3VhbFN0YXRlLm1vdW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh2aXN1YWxTdGF0ZSwgaW5zdGFuY2UpKTtcbiAgICAgICAgaWYgKHZpc3VhbEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgPyB2aXN1YWxFbGVtZW50Lm1vdW50KGluc3RhbmNlKVxuICAgICAgICAgICAgICAgIDogdmlzdWFsRWxlbWVudC51bm1vdW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4dGVybmFsUmVmKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dGVybmFsUmVmID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBleHRlcm5hbFJlZihpbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc1JlZk9iamVjdChleHRlcm5hbFJlZikpIHtcbiAgICAgICAgICAgICAgICBleHRlcm5hbFJlZi5jdXJyZW50ID0gaW5zdGFuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBcbiAgICAvKipcbiAgICAgKiBPbmx5IHBhc3MgYSBuZXcgcmVmIGNhbGxiYWNrIHRvIFJlYWN0IGlmIHdlJ3ZlIHJlY2VpdmVkIGEgdmlzdWFsIGVsZW1lbnRcbiAgICAgKiBmYWN0b3J5LiBPdGhlcndpc2Ugd2UnbGwgYmUgbW91bnRpbmcvcmVtb3VudGluZyBldmVyeSB0aW1lIGV4dGVybmFsUmVmXG4gICAgICogb3Igb3RoZXIgZGVwZW5kZW5jaWVzIGNoYW5nZS5cbiAgICAgKi9cbiAgICBbdmlzdWFsRWxlbWVudF0pO1xufVxuXG5leHBvcnQgeyB1c2VNb3Rpb25SZWYgfTtcbiIsImltcG9ydCB7IGNyZWF0ZU1vdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vdGlvbi9pbmRleC5tanMnO1xuXG4vKipcbiAqIENvbnZlcnQgYW55IFJlYWN0IGNvbXBvbmVudCBpbnRvIGEgYG1vdGlvbmAgY29tcG9uZW50LiBUaGUgcHJvdmlkZWQgY29tcG9uZW50XG4gKiAqKm11c3QqKiB1c2UgYFJlYWN0LmZvcndhcmRSZWZgIHRvIHRoZSB1bmRlcmx5aW5nIERPTSBjb21wb25lbnQgeW91IHdhbnQgdG8gYW5pbWF0ZS5cbiAqXG4gKiBgYGBqc3hcbiAqIGNvbnN0IENvbXBvbmVudCA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHtcbiAqICAgcmV0dXJuIDxkaXYgcmVmPXtyZWZ9IC8+XG4gKiB9KVxuICpcbiAqIGNvbnN0IE1vdGlvbkNvbXBvbmVudCA9IG1vdGlvbihDb21wb25lbnQpXG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU1vdGlvblByb3h5KGNyZWF0ZUNvbmZpZykge1xuICAgIGZ1bmN0aW9uIGN1c3RvbShDb21wb25lbnQsIGN1c3RvbU1vdGlvbkNvbXBvbmVudENvbmZpZykge1xuICAgICAgICBpZiAoY3VzdG9tTW90aW9uQ29tcG9uZW50Q29uZmlnID09PSB2b2lkIDApIHsgY3VzdG9tTW90aW9uQ29tcG9uZW50Q29uZmlnID0ge307IH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1vdGlvbkNvbXBvbmVudChjcmVhdGVDb25maWcoQ29tcG9uZW50LCBjdXN0b21Nb3Rpb25Db21wb25lbnRDb25maWcpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gY3VzdG9tO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIGdlbmVyYXRlZCBgbW90aW9uYCBjb21wb25lbnRzLCBlLmcgYG1vdGlvbi5kaXZgLCBgbW90aW9uLmlucHV0YCBldGMuXG4gICAgICogUmF0aGVyIHRoYW4gZ2VuZXJhdGluZyB0aGVtIGFuZXcgZXZlcnkgcmVuZGVyLlxuICAgICAqL1xuICAgIHZhciBjb21wb25lbnRDYWNoZSA9IG5ldyBNYXAoKTtcbiAgICByZXR1cm4gbmV3IFByb3h5KGN1c3RvbSwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQ2FsbGVkIHdoZW4gYG1vdGlvbmAgaXMgcmVmZXJlbmNlZCB3aXRoIGEgcHJvcDogYG1vdGlvbi5kaXZgLCBgbW90aW9uLmlucHV0YCBldGMuXG4gICAgICAgICAqIFRoZSBwcm9wIG5hbWUgaXMgcGFzc2VkIHRocm91Z2ggYXMgYGtleWAgYW5kIHdlIGNhbiB1c2UgdGhhdCB0byBnZW5lcmF0ZSBhIGBtb3Rpb25gXG4gICAgICAgICAqIERPTSBjb21wb25lbnQgd2l0aCB0aGF0IG5hbWUuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIChfdGFyZ2V0LCBrZXkpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgdGhpcyBlbGVtZW50IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIGNvbXBvbmVudCBjYWNoZSwgY3JlYXRlIGl0IGFuZCBjYWNoZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKCFjb21wb25lbnRDYWNoZS5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudENhY2hlLnNldChrZXksIGN1c3RvbShrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRDYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cblxuZXhwb3J0IHsgY3JlYXRlTW90aW9uUHJveHkgfTtcbiIsIi8qKlxuICogV2Uga2VlcCB0aGVzZSBsaXN0ZWQgc2VwZXJhdGVseSBhcyB3ZSB1c2UgdGhlIGxvd2VyY2FzZSB0YWcgbmFtZXMgYXMgcGFydFxuICogb2YgdGhlIHJ1bnRpbWUgYnVuZGxlIHRvIGRldGVjdCBTVkcgY29tcG9uZW50c1xuICovXG52YXIgbG93ZXJjYXNlU1ZHRWxlbWVudHMgPSBbXG4gICAgXCJhbmltYXRlXCIsXG4gICAgXCJjaXJjbGVcIixcbiAgICBcImRlZnNcIixcbiAgICBcImRlc2NcIixcbiAgICBcImVsbGlwc2VcIixcbiAgICBcImdcIixcbiAgICBcImltYWdlXCIsXG4gICAgXCJsaW5lXCIsXG4gICAgXCJmaWx0ZXJcIixcbiAgICBcIm1hcmtlclwiLFxuICAgIFwibWFza1wiLFxuICAgIFwibWV0YWRhdGFcIixcbiAgICBcInBhdGhcIixcbiAgICBcInBhdHRlcm5cIixcbiAgICBcInBvbHlnb25cIixcbiAgICBcInBvbHlsaW5lXCIsXG4gICAgXCJyZWN0XCIsXG4gICAgXCJzdG9wXCIsXG4gICAgXCJzdmdcIixcbiAgICBcInN3aXRjaFwiLFxuICAgIFwic3ltYm9sXCIsXG4gICAgXCJ0ZXh0XCIsXG4gICAgXCJ0c3BhblwiLFxuICAgIFwidXNlXCIsXG4gICAgXCJ2aWV3XCIsXG5dO1xuXG5leHBvcnQgeyBsb3dlcmNhc2VTVkdFbGVtZW50cyB9O1xuIiwiaW1wb3J0IHsgbG93ZXJjYXNlU1ZHRWxlbWVudHMgfSBmcm9tICcuLi8uLi9zdmcvbG93ZXJjYXNlLWVsZW1lbnRzLm1qcyc7XG5cbmZ1bmN0aW9uIGlzU1ZHQ29tcG9uZW50KENvbXBvbmVudCkge1xuICAgIGlmIChcbiAgICAvKipcbiAgICAgKiBJZiBpdCdzIG5vdCBhIHN0cmluZywgaXQncyBhIGN1c3RvbSBSZWFjdCBjb21wb25lbnQuIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnRcbiAgICAgKiBIVE1MIGN1c3RvbSBSZWFjdCBjb21wb25lbnRzLlxuICAgICAqL1xuICAgIHR5cGVvZiBDb21wb25lbnQgIT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIGl0IGNvbnRhaW5zIGEgZGFzaCwgdGhlIGVsZW1lbnQgaXMgYSBjdXN0b20gSFRNTCB3ZWJjb21wb25lbnQuXG4gICAgICAgICAqL1xuICAgICAgICBDb21wb25lbnQuaW5jbHVkZXMoXCItXCIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoXG4gICAgLyoqXG4gICAgICogSWYgaXQncyBpbiBvdXIgbGlzdCBvZiBsb3dlcmNhc2UgU1ZHIHRhZ3MsIGl0J3MgYW4gU1ZHIGNvbXBvbmVudFxuICAgICAqL1xuICAgIGxvd2VyY2FzZVNWR0VsZW1lbnRzLmluZGV4T2YoQ29tcG9uZW50KSA+IC0xIHx8XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBpdCBjb250YWlucyBhIGNhcGl0YWwgbGV0dGVyLCBpdCdzIGFuIFNWRyBjb21wb25lbnRcbiAgICAgICAgICovXG4gICAgICAgIC9bQS1aXS8udGVzdChDb21wb25lbnQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCB7IGlzU1ZHQ29tcG9uZW50IH07XG4iLCJ2YXIgc2NhbGVDb3JyZWN0b3JzID0ge307XG5mdW5jdGlvbiBhZGRTY2FsZUNvcnJlY3Rvcihjb3JyZWN0b3JzKSB7XG4gICAgT2JqZWN0LmFzc2lnbihzY2FsZUNvcnJlY3RvcnMsIGNvcnJlY3RvcnMpO1xufVxuXG5leHBvcnQgeyBhZGRTY2FsZUNvcnJlY3Rvciwgc2NhbGVDb3JyZWN0b3JzIH07XG4iLCIvKipcbiAqIEEgbGlzdCBvZiBhbGwgdHJhbnNmb3JtYWJsZSBheGVzLiBXZSdsbCB1c2UgdGhpcyBsaXN0IHRvIGdlbmVyYXRlZCBhIHZlcnNpb25cbiAqIG9mIGVhY2ggYXhlcyBmb3IgZWFjaCB0cmFuc2Zvcm0uXG4gKi9cbnZhciB0cmFuc2Zvcm1BeGVzID0gW1wiXCIsIFwiWFwiLCBcIllcIiwgXCJaXCJdO1xuLyoqXG4gKiBBbiBvcmRlcmVkIGFycmF5IG9mIGVhY2ggdHJhbnNmb3JtYWJsZSB2YWx1ZS4gQnkgZGVmYXVsdCwgdHJhbnNmb3JtIHZhbHVlc1xuICogd2lsbCBiZSBzb3J0ZWQgdG8gdGhpcyBvcmRlci5cbiAqL1xudmFyIG9yZGVyID0gW1widHJhbnNsYXRlXCIsIFwic2NhbGVcIiwgXCJyb3RhdGVcIiwgXCJza2V3XCJdO1xuLyoqXG4gKiBHZW5lcmF0ZSBhIGxpc3Qgb2YgZXZlcnkgcG9zc2libGUgdHJhbnNmb3JtIGtleS5cbiAqL1xudmFyIHRyYW5zZm9ybVByb3BzID0gW1widHJhbnNmb3JtUGVyc3BlY3RpdmVcIiwgXCJ4XCIsIFwieVwiLCBcInpcIl07XG5vcmRlci5mb3JFYWNoKGZ1bmN0aW9uIChvcGVyYXRpb25LZXkpIHtcbiAgICByZXR1cm4gdHJhbnNmb3JtQXhlcy5mb3JFYWNoKGZ1bmN0aW9uIChheGVzS2V5KSB7XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm1Qcm9wcy5wdXNoKG9wZXJhdGlvbktleSArIGF4ZXNLZXkpO1xuICAgIH0pO1xufSk7XG4vKipcbiAqIEEgZnVuY3Rpb24gdG8gdXNlIHdpdGggQXJyYXkuc29ydCB0byBzb3J0IHRyYW5zZm9ybSBrZXlzIGJ5IHRoZWlyIGRlZmF1bHQgb3JkZXIuXG4gKi9cbmZ1bmN0aW9uIHNvcnRUcmFuc2Zvcm1Qcm9wcyhhLCBiKSB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybVByb3BzLmluZGV4T2YoYSkgLSB0cmFuc2Zvcm1Qcm9wcy5pbmRleE9mKGIpO1xufVxuLyoqXG4gKiBBIHF1aWNrIGxvb2t1cCBmb3IgdHJhbnNmb3JtIHByb3BzLlxuICovXG52YXIgdHJhbnNmb3JtUHJvcFNldCA9IG5ldyBTZXQodHJhbnNmb3JtUHJvcHMpO1xuZnVuY3Rpb24gaXNUcmFuc2Zvcm1Qcm9wKGtleSkge1xuICAgIHJldHVybiB0cmFuc2Zvcm1Qcm9wU2V0LmhhcyhrZXkpO1xufVxuLyoqXG4gKiBBIHF1aWNrIGxvb2t1cCBmb3IgdHJhbnNmb3JtIG9yaWdpbiBwcm9wc1xuICovXG52YXIgdHJhbnNmb3JtT3JpZ2luUHJvcHMgPSBuZXcgU2V0KFtcIm9yaWdpblhcIiwgXCJvcmlnaW5ZXCIsIFwib3JpZ2luWlwiXSk7XG5mdW5jdGlvbiBpc1RyYW5zZm9ybU9yaWdpblByb3Aoa2V5KSB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybU9yaWdpblByb3BzLmhhcyhrZXkpO1xufVxuXG5leHBvcnQgeyBpc1RyYW5zZm9ybU9yaWdpblByb3AsIGlzVHJhbnNmb3JtUHJvcCwgc29ydFRyYW5zZm9ybVByb3BzLCB0cmFuc2Zvcm1BeGVzLCB0cmFuc2Zvcm1Qcm9wcyB9O1xuIiwiaW1wb3J0IHsgc2NhbGVDb3JyZWN0b3JzIH0gZnJvbSAnLi4vLi4vcHJvamVjdGlvbi9zdHlsZXMvc2NhbGUtY29ycmVjdGlvbi5tanMnO1xuaW1wb3J0IHsgaXNUcmFuc2Zvcm1Qcm9wLCBpc1RyYW5zZm9ybU9yaWdpblByb3AgfSBmcm9tICcuLi8uLi9yZW5kZXIvaHRtbC91dGlscy90cmFuc2Zvcm0ubWpzJztcblxuZnVuY3Rpb24gaXNGb3JjZWRNb3Rpb25WYWx1ZShrZXksIF9hKSB7XG4gICAgdmFyIGxheW91dCA9IF9hLmxheW91dCwgbGF5b3V0SWQgPSBfYS5sYXlvdXRJZDtcbiAgICByZXR1cm4gKGlzVHJhbnNmb3JtUHJvcChrZXkpIHx8XG4gICAgICAgIGlzVHJhbnNmb3JtT3JpZ2luUHJvcChrZXkpIHx8XG4gICAgICAgICgobGF5b3V0IHx8IGxheW91dElkICE9PSB1bmRlZmluZWQpICYmXG4gICAgICAgICAgICAoISFzY2FsZUNvcnJlY3RvcnNba2V5XSB8fCBrZXkgPT09IFwib3BhY2l0eVwiKSkpO1xufVxuXG5leHBvcnQgeyBpc0ZvcmNlZE1vdGlvblZhbHVlIH07XG4iLCJ2YXIgaXNNb3Rpb25WYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiBCb29sZWFuKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZS5nZXRWZWxvY2l0eSk7XG59O1xuXG5leHBvcnQgeyBpc01vdGlvblZhbHVlIH07XG4iLCJpbXBvcnQgeyBzb3J0VHJhbnNmb3JtUHJvcHMgfSBmcm9tICcuL3RyYW5zZm9ybS5tanMnO1xuXG52YXIgdHJhbnNsYXRlQWxpYXMgPSB7XG4gICAgeDogXCJ0cmFuc2xhdGVYXCIsXG4gICAgeTogXCJ0cmFuc2xhdGVZXCIsXG4gICAgejogXCJ0cmFuc2xhdGVaXCIsXG4gICAgdHJhbnNmb3JtUGVyc3BlY3RpdmU6IFwicGVyc3BlY3RpdmVcIixcbn07XG4vKipcbiAqIEJ1aWxkIGEgQ1NTIHRyYW5zZm9ybSBzdHlsZSBmcm9tIGluZGl2aWR1YWwgeC95L3NjYWxlIGV0YyBwcm9wZXJ0aWVzLlxuICpcbiAqIFRoaXMgb3V0cHV0cyB3aXRoIGEgZGVmYXVsdCBvcmRlciBvZiB0cmFuc2Zvcm1zL3NjYWxlcy9yb3RhdGlvbnMsIHRoaXMgY2FuIGJlIGN1c3RvbWlzZWQgYnlcbiAqIHByb3ZpZGluZyBhIHRyYW5zZm9ybVRlbXBsYXRlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBidWlsZFRyYW5zZm9ybShfYSwgX2IsIHRyYW5zZm9ybUlzRGVmYXVsdCwgdHJhbnNmb3JtVGVtcGxhdGUpIHtcbiAgICB2YXIgdHJhbnNmb3JtID0gX2EudHJhbnNmb3JtLCB0cmFuc2Zvcm1LZXlzID0gX2EudHJhbnNmb3JtS2V5cztcbiAgICB2YXIgX2MgPSBfYi5lbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbiwgZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb24gPSBfYyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9jLCBfZCA9IF9iLmFsbG93VHJhbnNmb3JtTm9uZSwgYWxsb3dUcmFuc2Zvcm1Ob25lID0gX2QgPT09IHZvaWQgMCA/IHRydWUgOiBfZDtcbiAgICAvLyBUaGUgdHJhbnNmb3JtIHN0cmluZyB3ZSdyZSBnb2luZyB0byBidWlsZCBpbnRvLlxuICAgIHZhciB0cmFuc2Zvcm1TdHJpbmcgPSBcIlwiO1xuICAgIC8vIFRyYW5zZm9ybSBrZXlzIGludG8gdGhlaXIgZGVmYXVsdCBvcmRlciAtIHRoaXMgd2lsbCBkZXRlcm1pbmUgdGhlIG91dHB1dCBvcmRlci5cbiAgICB0cmFuc2Zvcm1LZXlzLnNvcnQoc29ydFRyYW5zZm9ybVByb3BzKTtcbiAgICAvLyBUcmFjayB3aGV0aGVyIHRoZSBkZWZpbmVkIHRyYW5zZm9ybSBoYXMgYSBkZWZpbmVkIHogc28gd2UgZG9uJ3QgYWRkIGFcbiAgICAvLyBzZWNvbmQgdG8gZW5hYmxlIGhhcmR3YXJlIGFjY2VsZXJhdGlvblxuICAgIHZhciB0cmFuc2Zvcm1IYXNaID0gZmFsc2U7XG4gICAgLy8gTG9vcCBvdmVyIGVhY2ggdHJhbnNmb3JtIGFuZCBidWlsZCB0aGVtIGludG8gdHJhbnNmb3JtU3RyaW5nXG4gICAgdmFyIG51bVRyYW5zZm9ybUtleXMgPSB0cmFuc2Zvcm1LZXlzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bVRyYW5zZm9ybUtleXM7IGkrKykge1xuICAgICAgICB2YXIga2V5ID0gdHJhbnNmb3JtS2V5c1tpXTtcbiAgICAgICAgdHJhbnNmb3JtU3RyaW5nICs9IFwiXCIuY29uY2F0KHRyYW5zbGF0ZUFsaWFzW2tleV0gfHwga2V5LCBcIihcIikuY29uY2F0KHRyYW5zZm9ybVtrZXldLCBcIikgXCIpO1xuICAgICAgICBpZiAoa2V5ID09PSBcInpcIilcbiAgICAgICAgICAgIHRyYW5zZm9ybUhhc1ogPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoIXRyYW5zZm9ybUhhc1ogJiYgZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb24pIHtcbiAgICAgICAgdHJhbnNmb3JtU3RyaW5nICs9IFwidHJhbnNsYXRlWigwKVwiO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdHJhbnNmb3JtU3RyaW5nID0gdHJhbnNmb3JtU3RyaW5nLnRyaW0oKTtcbiAgICB9XG4gICAgLy8gSWYgd2UgaGF2ZSBhIGN1c3RvbSBgdHJhbnNmb3JtYCB0ZW1wbGF0ZSwgcGFzcyBvdXIgdHJhbnNmb3JtIHZhbHVlcyBhbmRcbiAgICAvLyBnZW5lcmF0ZWQgdHJhbnNmb3JtU3RyaW5nIHRvIHRoYXQgYmVmb3JlIHJldHVybmluZ1xuICAgIGlmICh0cmFuc2Zvcm1UZW1wbGF0ZSkge1xuICAgICAgICB0cmFuc2Zvcm1TdHJpbmcgPSB0cmFuc2Zvcm1UZW1wbGF0ZSh0cmFuc2Zvcm0sIHRyYW5zZm9ybUlzRGVmYXVsdCA/IFwiXCIgOiB0cmFuc2Zvcm1TdHJpbmcpO1xuICAgIH1cbiAgICBlbHNlIGlmIChhbGxvd1RyYW5zZm9ybU5vbmUgJiYgdHJhbnNmb3JtSXNEZWZhdWx0KSB7XG4gICAgICAgIHRyYW5zZm9ybVN0cmluZyA9IFwibm9uZVwiO1xuICAgIH1cbiAgICByZXR1cm4gdHJhbnNmb3JtU3RyaW5nO1xufVxuLyoqXG4gKiBCdWlsZCBhIHRyYW5zZm9ybU9yaWdpbiBzdHlsZS4gVXNlcyB0aGUgc2FtZSBkZWZhdWx0cyBhcyB0aGUgYnJvd3NlciBmb3JcbiAqIHVuZGVmaW5lZCBvcmlnaW5zLlxuICovXG5mdW5jdGlvbiBidWlsZFRyYW5zZm9ybU9yaWdpbihfYSkge1xuICAgIHZhciBfYiA9IF9hLm9yaWdpblgsIG9yaWdpblggPSBfYiA9PT0gdm9pZCAwID8gXCI1MCVcIiA6IF9iLCBfYyA9IF9hLm9yaWdpblksIG9yaWdpblkgPSBfYyA9PT0gdm9pZCAwID8gXCI1MCVcIiA6IF9jLCBfZCA9IF9hLm9yaWdpblosIG9yaWdpblogPSBfZCA9PT0gdm9pZCAwID8gMCA6IF9kO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChvcmlnaW5YLCBcIiBcIikuY29uY2F0KG9yaWdpblksIFwiIFwiKS5jb25jYXQob3JpZ2luWik7XG59XG5cbmV4cG9ydCB7IGJ1aWxkVHJhbnNmb3JtLCBidWlsZFRyYW5zZm9ybU9yaWdpbiB9O1xuIiwiLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIGtleSBpcyBhIENTUyB2YXJpYWJsZVxuICovXG5mdW5jdGlvbiBpc0NTU1ZhcmlhYmxlKGtleSkge1xuICAgIHJldHVybiBrZXkuc3RhcnRzV2l0aChcIi0tXCIpO1xufVxuXG5leHBvcnQgeyBpc0NTU1ZhcmlhYmxlIH07XG4iLCIvKipcbiAqIFByb3ZpZGVkIGEgdmFsdWUgYW5kIGEgVmFsdWVUeXBlLCByZXR1cm5zIHRoZSB2YWx1ZSBhcyB0aGF0IHZhbHVlIHR5cGUuXG4gKi9cbnZhciBnZXRWYWx1ZUFzVHlwZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdHlwZSkge1xuICAgIHJldHVybiB0eXBlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIlxuICAgICAgICA/IHR5cGUudHJhbnNmb3JtKHZhbHVlKVxuICAgICAgICA6IHZhbHVlO1xufTtcblxuZXhwb3J0IHsgZ2V0VmFsdWVBc1R5cGUgfTtcbiIsImNvbnN0IGNsYW1wID0gKG1pbiwgbWF4KSA9PiAodikgPT4gTWF0aC5tYXgoTWF0aC5taW4odiwgbWF4KSwgbWluKTtcbmNvbnN0IHNhbml0aXplID0gKHYpID0+ICh2ICUgMSA/IE51bWJlcih2LnRvRml4ZWQoNSkpIDogdik7XG5jb25zdCBmbG9hdFJlZ2V4ID0gLygtKT8oW1xcZF0qXFwuP1tcXGRdKSsvZztcbmNvbnN0IGNvbG9yUmVnZXggPSAvKCNbMC05YS1mXXs2fXwjWzAtOWEtZl17M318Iyg/OlswLTlhLWZdezJ9KXsyLDR9fChyZ2J8aHNsKWE/XFwoKC0/W1xcZFxcLl0rJT9bLFxcc10rKXsyLDN9XFxzKlxcLypcXHMqW1xcZFxcLl0rJT9cXCkpL2dpO1xuY29uc3Qgc2luZ2xlQ29sb3JSZWdleCA9IC9eKCNbMC05YS1mXXszfXwjKD86WzAtOWEtZl17Mn0pezIsNH18KHJnYnxoc2wpYT9cXCgoLT9bXFxkXFwuXSslP1ssXFxzXSspezIsM31cXHMqXFwvKlxccypbXFxkXFwuXSslP1xcKSkkL2k7XG5mdW5jdGlvbiBpc1N0cmluZyh2KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJztcbn1cblxuZXhwb3J0IHsgY2xhbXAsIGNvbG9yUmVnZXgsIGZsb2F0UmVnZXgsIGlzU3RyaW5nLCBzYW5pdGl6ZSwgc2luZ2xlQ29sb3JSZWdleCB9O1xuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlscy5tanMnO1xuXG5jb25zdCBjcmVhdGVVbml0VHlwZSA9ICh1bml0KSA9PiAoe1xuICAgIHRlc3Q6ICh2KSA9PiBpc1N0cmluZyh2KSAmJiB2LmVuZHNXaXRoKHVuaXQpICYmIHYuc3BsaXQoJyAnKS5sZW5ndGggPT09IDEsXG4gICAgcGFyc2U6IHBhcnNlRmxvYXQsXG4gICAgdHJhbnNmb3JtOiAodikgPT4gYCR7dn0ke3VuaXR9YCxcbn0pO1xuY29uc3QgZGVncmVlcyA9IGNyZWF0ZVVuaXRUeXBlKCdkZWcnKTtcbmNvbnN0IHBlcmNlbnQgPSBjcmVhdGVVbml0VHlwZSgnJScpO1xuY29uc3QgcHggPSBjcmVhdGVVbml0VHlwZSgncHgnKTtcbmNvbnN0IHZoID0gY3JlYXRlVW5pdFR5cGUoJ3ZoJyk7XG5jb25zdCB2dyA9IGNyZWF0ZVVuaXRUeXBlKCd2dycpO1xuY29uc3QgcHJvZ3Jlc3NQZXJjZW50YWdlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwZXJjZW50KSwgeyBwYXJzZTogKHYpID0+IHBlcmNlbnQucGFyc2UodikgLyAxMDAsIHRyYW5zZm9ybTogKHYpID0+IHBlcmNlbnQudHJhbnNmb3JtKHYgKiAxMDApIH0pO1xuXG5leHBvcnQgeyBkZWdyZWVzLCBwZXJjZW50LCBwcm9ncmVzc1BlcmNlbnRhZ2UsIHB4LCB2aCwgdncgfTtcbiIsImltcG9ydCB7IGNsYW1wIH0gZnJvbSAnLi4vdXRpbHMubWpzJztcblxuY29uc3QgbnVtYmVyID0ge1xuICAgIHRlc3Q6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicsXG4gICAgcGFyc2U6IHBhcnNlRmxvYXQsXG4gICAgdHJhbnNmb3JtOiAodikgPT4gdixcbn07XG5jb25zdCBhbHBoYSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgbnVtYmVyKSwgeyB0cmFuc2Zvcm06IGNsYW1wKDAsIDEpIH0pO1xuY29uc3Qgc2NhbGUgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG51bWJlciksIHsgZGVmYXVsdDogMSB9KTtcblxuZXhwb3J0IHsgYWxwaGEsIG51bWJlciwgc2NhbGUgfTtcbiIsImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgbnVtYmVyIH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuXG52YXIgaW50ID0gX19hc3NpZ24oX19hc3NpZ24oe30sIG51bWJlciksIHsgdHJhbnNmb3JtOiBNYXRoLnJvdW5kIH0pO1xuXG5leHBvcnQgeyBpbnQgfTtcbiIsImltcG9ydCB7IHB4LCBkZWdyZWVzLCBzY2FsZSwgYWxwaGEsIHByb2dyZXNzUGVyY2VudGFnZSB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcbmltcG9ydCB7IGludCB9IGZyb20gJy4vdHlwZS1pbnQubWpzJztcblxudmFyIG51bWJlclZhbHVlVHlwZXMgPSB7XG4gICAgLy8gQm9yZGVyIHByb3BzXG4gICAgYm9yZGVyV2lkdGg6IHB4LFxuICAgIGJvcmRlclRvcFdpZHRoOiBweCxcbiAgICBib3JkZXJSaWdodFdpZHRoOiBweCxcbiAgICBib3JkZXJCb3R0b21XaWR0aDogcHgsXG4gICAgYm9yZGVyTGVmdFdpZHRoOiBweCxcbiAgICBib3JkZXJSYWRpdXM6IHB4LFxuICAgIHJhZGl1czogcHgsXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogcHgsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6IHB4LFxuICAgIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiBweCxcbiAgICBib3JkZXJCb3R0b21MZWZ0UmFkaXVzOiBweCxcbiAgICAvLyBQb3NpdGlvbmluZyBwcm9wc1xuICAgIHdpZHRoOiBweCxcbiAgICBtYXhXaWR0aDogcHgsXG4gICAgaGVpZ2h0OiBweCxcbiAgICBtYXhIZWlnaHQ6IHB4LFxuICAgIHNpemU6IHB4LFxuICAgIHRvcDogcHgsXG4gICAgcmlnaHQ6IHB4LFxuICAgIGJvdHRvbTogcHgsXG4gICAgbGVmdDogcHgsXG4gICAgLy8gU3BhY2luZyBwcm9wc1xuICAgIHBhZGRpbmc6IHB4LFxuICAgIHBhZGRpbmdUb3A6IHB4LFxuICAgIHBhZGRpbmdSaWdodDogcHgsXG4gICAgcGFkZGluZ0JvdHRvbTogcHgsXG4gICAgcGFkZGluZ0xlZnQ6IHB4LFxuICAgIG1hcmdpbjogcHgsXG4gICAgbWFyZ2luVG9wOiBweCxcbiAgICBtYXJnaW5SaWdodDogcHgsXG4gICAgbWFyZ2luQm90dG9tOiBweCxcbiAgICBtYXJnaW5MZWZ0OiBweCxcbiAgICAvLyBUcmFuc2Zvcm0gcHJvcHNcbiAgICByb3RhdGU6IGRlZ3JlZXMsXG4gICAgcm90YXRlWDogZGVncmVlcyxcbiAgICByb3RhdGVZOiBkZWdyZWVzLFxuICAgIHJvdGF0ZVo6IGRlZ3JlZXMsXG4gICAgc2NhbGU6IHNjYWxlLFxuICAgIHNjYWxlWDogc2NhbGUsXG4gICAgc2NhbGVZOiBzY2FsZSxcbiAgICBzY2FsZVo6IHNjYWxlLFxuICAgIHNrZXc6IGRlZ3JlZXMsXG4gICAgc2tld1g6IGRlZ3JlZXMsXG4gICAgc2tld1k6IGRlZ3JlZXMsXG4gICAgZGlzdGFuY2U6IHB4LFxuICAgIHRyYW5zbGF0ZVg6IHB4LFxuICAgIHRyYW5zbGF0ZVk6IHB4LFxuICAgIHRyYW5zbGF0ZVo6IHB4LFxuICAgIHg6IHB4LFxuICAgIHk6IHB4LFxuICAgIHo6IHB4LFxuICAgIHBlcnNwZWN0aXZlOiBweCxcbiAgICB0cmFuc2Zvcm1QZXJzcGVjdGl2ZTogcHgsXG4gICAgb3BhY2l0eTogYWxwaGEsXG4gICAgb3JpZ2luWDogcHJvZ3Jlc3NQZXJjZW50YWdlLFxuICAgIG9yaWdpblk6IHByb2dyZXNzUGVyY2VudGFnZSxcbiAgICBvcmlnaW5aOiBweCxcbiAgICAvLyBNaXNjXG4gICAgekluZGV4OiBpbnQsXG4gICAgLy8gU1ZHXG4gICAgZmlsbE9wYWNpdHk6IGFscGhhLFxuICAgIHN0cm9rZU9wYWNpdHk6IGFscGhhLFxuICAgIG51bU9jdGF2ZXM6IGludCxcbn07XG5cbmV4cG9ydCB7IG51bWJlclZhbHVlVHlwZXMgfTtcbiIsImltcG9ydCB7IGJ1aWxkVHJhbnNmb3JtLCBidWlsZFRyYW5zZm9ybU9yaWdpbiB9IGZyb20gJy4vYnVpbGQtdHJhbnNmb3JtLm1qcyc7XG5pbXBvcnQgeyBpc0NTU1ZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vZG9tL3V0aWxzL2lzLWNzcy12YXJpYWJsZS5tanMnO1xuaW1wb3J0IHsgaXNUcmFuc2Zvcm1Qcm9wLCBpc1RyYW5zZm9ybU9yaWdpblByb3AgfSBmcm9tICcuL3RyYW5zZm9ybS5tanMnO1xuaW1wb3J0IHsgZ2V0VmFsdWVBc1R5cGUgfSBmcm9tICcuLi8uLi9kb20vdmFsdWUtdHlwZXMvZ2V0LWFzLXR5cGUubWpzJztcbmltcG9ydCB7IG51bWJlclZhbHVlVHlwZXMgfSBmcm9tICcuLi8uLi9kb20vdmFsdWUtdHlwZXMvbnVtYmVyLm1qcyc7XG5cbmZ1bmN0aW9uIGJ1aWxkSFRNTFN0eWxlcyhzdGF0ZSwgbGF0ZXN0VmFsdWVzLCBvcHRpb25zLCB0cmFuc2Zvcm1UZW1wbGF0ZSkge1xuICAgIHZhciBfYTtcbiAgICB2YXIgc3R5bGUgPSBzdGF0ZS5zdHlsZSwgdmFycyA9IHN0YXRlLnZhcnMsIHRyYW5zZm9ybSA9IHN0YXRlLnRyYW5zZm9ybSwgdHJhbnNmb3JtS2V5cyA9IHN0YXRlLnRyYW5zZm9ybUtleXMsIHRyYW5zZm9ybU9yaWdpbiA9IHN0YXRlLnRyYW5zZm9ybU9yaWdpbjtcbiAgICAvLyBFbXB0eSB0aGUgdHJhbnNmb3JtS2V5cyBhcnJheS4gQXMgd2UncmUgdGhyb3dpbmcgb3V0IHJlZnMgdG8gaXRzIGl0ZW1zXG4gICAgLy8gdGhpcyBtaWdodCBub3QgYmUgYXMgY2hlYXAgYXMgc3VzcGVjdGVkLiBNYXliZSB1c2luZyB0aGUgYXJyYXkgYXMgYSBidWZmZXJcbiAgICAvLyB3aXRoIGEgbWFudWFsIGluY3JlbWVudGF0aW9uIHdvdWxkIGJlIGJldHRlci5cbiAgICB0cmFuc2Zvcm1LZXlzLmxlbmd0aCA9IDA7XG4gICAgLy8gVHJhY2sgd2hldGhlciB3ZSBlbmNvdW50ZXIgYW55IHRyYW5zZm9ybSBvciB0cmFuc2Zvcm1PcmlnaW4gdmFsdWVzLlxuICAgIHZhciBoYXNUcmFuc2Zvcm0gPSBmYWxzZTtcbiAgICB2YXIgaGFzVHJhbnNmb3JtT3JpZ2luID0gZmFsc2U7XG4gICAgLy8gRG9lcyB0aGUgY2FsY3VsYXRlZCB0cmFuc2Zvcm0gZXNzZW50aWFsbHkgZXF1YWwgXCJub25lXCI/XG4gICAgdmFyIHRyYW5zZm9ybUlzTm9uZSA9IHRydWU7XG4gICAgLyoqXG4gICAgICogTG9vcCBvdmVyIGFsbCBvdXIgbGF0ZXN0IGFuaW1hdGVkIHZhbHVlcyBhbmQgZGVjaWRlIHdoZXRoZXIgdG8gaGFuZGxlIHRoZW1cbiAgICAgKiBhcyBhIHN0eWxlIG9yIENTUyB2YXJpYWJsZS5cbiAgICAgKlxuICAgICAqIFRyYW5zZm9ybXMgYW5kIHRyYW5zZm9ybSBvcmlnaW5zIGFyZSBrZXB0IHNlcGVyYXRlbHkgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cbiAgICAgKi9cbiAgICBmb3IgKHZhciBrZXkgaW4gbGF0ZXN0VmFsdWVzKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGxhdGVzdFZhbHVlc1trZXldO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhpcyBpcyBhIENTUyB2YXJpYWJsZSB3ZSBkb24ndCBkbyBhbnkgZnVydGhlciBwcm9jZXNzaW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKGlzQ1NTVmFyaWFibGUoa2V5KSkge1xuICAgICAgICAgICAgdmFyc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDb252ZXJ0IHRoZSB2YWx1ZSB0byBpdHMgZGVmYXVsdCB2YWx1ZSB0eXBlLCBpZSAwIC0+IFwiMHB4XCJcbiAgICAgICAgdmFyIHZhbHVlVHlwZSA9IG51bWJlclZhbHVlVHlwZXNba2V5XTtcbiAgICAgICAgdmFyIHZhbHVlQXNUeXBlID0gZ2V0VmFsdWVBc1R5cGUodmFsdWUsIHZhbHVlVHlwZSk7XG4gICAgICAgIGlmIChpc1RyYW5zZm9ybVByb3Aoa2V5KSkge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHRyYW5zZm9ybSwgZmxhZyB0byBlbmFibGUgZnVydGhlciB0cmFuc2Zvcm0gcHJvY2Vzc2luZ1xuICAgICAgICAgICAgaGFzVHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyYW5zZm9ybVtrZXldID0gdmFsdWVBc1R5cGU7XG4gICAgICAgICAgICB0cmFuc2Zvcm1LZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIC8vIElmIHdlIGFscmVhZHkga25vdyB3ZSBoYXZlIGEgbm9uLWRlZmF1bHQgdHJhbnNmb3JtLCBlYXJseSByZXR1cm5cbiAgICAgICAgICAgIGlmICghdHJhbnNmb3JtSXNOb25lKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIGEgZGVmYXVsdCB0cmFuc2Zvcm1cbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gKChfYSA9IHZhbHVlVHlwZS5kZWZhdWx0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwKSlcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1Jc05vbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1RyYW5zZm9ybU9yaWdpblByb3Aoa2V5KSkge1xuICAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luW2tleV0gPSB2YWx1ZUFzVHlwZTtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSB0cmFuc2Zvcm0gb3JpZ2luLCBmbGFnIGFuZCBlbmFibGUgZnVydGhlciB0cmFuc2Zvcm0tb3JpZ2luIHByb2Nlc3NpbmdcbiAgICAgICAgICAgIGhhc1RyYW5zZm9ybU9yaWdpbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdHlsZVtrZXldID0gdmFsdWVBc1R5cGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhhc1RyYW5zZm9ybSkge1xuICAgICAgICBzdHlsZS50cmFuc2Zvcm0gPSBidWlsZFRyYW5zZm9ybShzdGF0ZSwgb3B0aW9ucywgdHJhbnNmb3JtSXNOb25lLCB0cmFuc2Zvcm1UZW1wbGF0ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRyYW5zZm9ybVRlbXBsYXRlKSB7XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVRlbXBsYXRlKHt9LCBcIlwiKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWxhdGVzdFZhbHVlcy50cmFuc2Zvcm0gJiYgc3R5bGUudHJhbnNmb3JtKSB7XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSA9IFwibm9uZVwiO1xuICAgIH1cbiAgICBpZiAoaGFzVHJhbnNmb3JtT3JpZ2luKSB7XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IGJ1aWxkVHJhbnNmb3JtT3JpZ2luKHRyYW5zZm9ybU9yaWdpbik7XG4gICAgfVxufVxuXG5leHBvcnQgeyBidWlsZEhUTUxTdHlsZXMgfTtcbiIsInZhciBjcmVhdGVIdG1sUmVuZGVyU3RhdGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAoe1xuICAgIHN0eWxlOiB7fSxcbiAgICB0cmFuc2Zvcm06IHt9LFxuICAgIHRyYW5zZm9ybUtleXM6IFtdLFxuICAgIHRyYW5zZm9ybU9yaWdpbjoge30sXG4gICAgdmFyczoge30sXG59KTsgfTtcblxuZXhwb3J0IHsgY3JlYXRlSHRtbFJlbmRlclN0YXRlIH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0ZvcmNlZE1vdGlvblZhbHVlIH0gZnJvbSAnLi4vLi4vbW90aW9uL3V0aWxzL2lzLWZvcmNlZC1tb3Rpb24tdmFsdWUubWpzJztcbmltcG9ydCB7IGlzTW90aW9uVmFsdWUgfSBmcm9tICcuLi8uLi92YWx1ZS91dGlscy9pcy1tb3Rpb24tdmFsdWUubWpzJztcbmltcG9ydCB7IGJ1aWxkSFRNTFN0eWxlcyB9IGZyb20gJy4vdXRpbHMvYnVpbGQtc3R5bGVzLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVIdG1sUmVuZGVyU3RhdGUgfSBmcm9tICcuL3V0aWxzL2NyZWF0ZS1yZW5kZXItc3RhdGUubWpzJztcblxuZnVuY3Rpb24gY29weVJhd1ZhbHVlc09ubHkodGFyZ2V0LCBzb3VyY2UsIHByb3BzKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoIWlzTW90aW9uVmFsdWUoc291cmNlW2tleV0pICYmICFpc0ZvcmNlZE1vdGlvblZhbHVlKGtleSwgcHJvcHMpKSB7XG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdXNlSW5pdGlhbE1vdGlvblZhbHVlcyhfYSwgdmlzdWFsU3RhdGUsIGlzU3RhdGljKSB7XG4gICAgdmFyIHRyYW5zZm9ybVRlbXBsYXRlID0gX2EudHJhbnNmb3JtVGVtcGxhdGU7XG4gICAgcmV0dXJuIHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc3RhdGUgPSBjcmVhdGVIdG1sUmVuZGVyU3RhdGUoKTtcbiAgICAgICAgYnVpbGRIVE1MU3R5bGVzKHN0YXRlLCB2aXN1YWxTdGF0ZSwgeyBlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjogIWlzU3RhdGljIH0sIHRyYW5zZm9ybVRlbXBsYXRlKTtcbiAgICAgICAgdmFyIHZhcnMgPSBzdGF0ZS52YXJzLCBzdHlsZSA9IHN0YXRlLnN0eWxlO1xuICAgICAgICByZXR1cm4gX19hc3NpZ24oX19hc3NpZ24oe30sIHZhcnMpLCBzdHlsZSk7XG4gICAgfSwgW3Zpc3VhbFN0YXRlXSk7XG59XG5mdW5jdGlvbiB1c2VTdHlsZShwcm9wcywgdmlzdWFsU3RhdGUsIGlzU3RhdGljKSB7XG4gICAgdmFyIHN0eWxlUHJvcCA9IHByb3BzLnN0eWxlIHx8IHt9O1xuICAgIHZhciBzdHlsZSA9IHt9O1xuICAgIC8qKlxuICAgICAqIENvcHkgbm9uLU1vdGlvbiBWYWx1ZXMgc3RyYWlnaHQgaW50byBzdHlsZVxuICAgICAqL1xuICAgIGNvcHlSYXdWYWx1ZXNPbmx5KHN0eWxlLCBzdHlsZVByb3AsIHByb3BzKTtcbiAgICBPYmplY3QuYXNzaWduKHN0eWxlLCB1c2VJbml0aWFsTW90aW9uVmFsdWVzKHByb3BzLCB2aXN1YWxTdGF0ZSwgaXNTdGF0aWMpKTtcbiAgICBpZiAocHJvcHMudHJhbnNmb3JtVmFsdWVzKSB7XG4gICAgICAgIHN0eWxlID0gcHJvcHMudHJhbnNmb3JtVmFsdWVzKHN0eWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0eWxlO1xufVxuZnVuY3Rpb24gdXNlSFRNTFByb3BzKHByb3BzLCB2aXN1YWxTdGF0ZSwgaXNTdGF0aWMpIHtcbiAgICAvLyBUaGUgYGFueWAgaXNuJ3QgaWRlYWwgYnV0IGl0IGlzIHRoZSB0eXBlIG9mIGNyZWF0ZUVsZW1lbnQgcHJvcHMgYXJndW1lbnRcbiAgICB2YXIgaHRtbFByb3BzID0ge307XG4gICAgdmFyIHN0eWxlID0gdXNlU3R5bGUocHJvcHMsIHZpc3VhbFN0YXRlLCBpc1N0YXRpYyk7XG4gICAgaWYgKEJvb2xlYW4ocHJvcHMuZHJhZykgJiYgcHJvcHMuZHJhZ0xpc3RlbmVyICE9PSBmYWxzZSkge1xuICAgICAgICAvLyBEaXNhYmxlIHRoZSBnaG9zdCBlbGVtZW50IHdoZW4gYSB1c2VyIGRyYWdzXG4gICAgICAgIGh0bWxQcm9wcy5kcmFnZ2FibGUgPSBmYWxzZTtcbiAgICAgICAgLy8gRGlzYWJsZSB0ZXh0IHNlbGVjdGlvblxuICAgICAgICBzdHlsZS51c2VyU2VsZWN0ID1cbiAgICAgICAgICAgIHN0eWxlLldlYmtpdFVzZXJTZWxlY3QgPVxuICAgICAgICAgICAgICAgIHN0eWxlLldlYmtpdFRvdWNoQ2FsbG91dCA9XG4gICAgICAgICAgICAgICAgICAgIFwibm9uZVwiO1xuICAgICAgICAvLyBEaXNhYmxlIHNjcm9sbGluZyBvbiB0aGUgZHJhZ2dhYmxlIGRpcmVjdGlvblxuICAgICAgICBzdHlsZS50b3VjaEFjdGlvbiA9XG4gICAgICAgICAgICBwcm9wcy5kcmFnID09PSB0cnVlXG4gICAgICAgICAgICAgICAgPyBcIm5vbmVcIlxuICAgICAgICAgICAgICAgIDogXCJwYW4tXCIuY29uY2F0KHByb3BzLmRyYWcgPT09IFwieFwiID8gXCJ5XCIgOiBcInhcIik7XG4gICAgfVxuICAgIGh0bWxQcm9wcy5zdHlsZSA9IHN0eWxlO1xuICAgIHJldHVybiBodG1sUHJvcHM7XG59XG5cbmV4cG9ydCB7IGNvcHlSYXdWYWx1ZXNPbmx5LCB1c2VIVE1MUHJvcHMsIHVzZVN0eWxlIH07XG4iLCIvKipcbiAqIEEgbGlzdCBvZiBhbGwgdmFsaWQgTW90aW9uUHJvcHMuXG4gKlxuICogQHByaXZhdGVSZW1hcmtzXG4gKiBUaGlzIGRvZXNuJ3QgdGhyb3cgaWYgYSBgTW90aW9uUHJvcGAgbmFtZSBpcyBtaXNzaW5nIC0gaXQgc2hvdWxkLlxuICovXG52YXIgdmFsaWRNb3Rpb25Qcm9wcyA9IG5ldyBTZXQoW1xuICAgIFwiaW5pdGlhbFwiLFxuICAgIFwiYW5pbWF0ZVwiLFxuICAgIFwiZXhpdFwiLFxuICAgIFwic3R5bGVcIixcbiAgICBcInZhcmlhbnRzXCIsXG4gICAgXCJ0cmFuc2l0aW9uXCIsXG4gICAgXCJ0cmFuc2Zvcm1UZW1wbGF0ZVwiLFxuICAgIFwidHJhbnNmb3JtVmFsdWVzXCIsXG4gICAgXCJjdXN0b21cIixcbiAgICBcImluaGVyaXRcIixcbiAgICBcImxheW91dFwiLFxuICAgIFwibGF5b3V0SWRcIixcbiAgICBcImxheW91dERlcGVuZGVuY3lcIixcbiAgICBcIm9uTGF5b3V0QW5pbWF0aW9uU3RhcnRcIixcbiAgICBcIm9uTGF5b3V0QW5pbWF0aW9uQ29tcGxldGVcIixcbiAgICBcIm9uTGF5b3V0TWVhc3VyZVwiLFxuICAgIFwib25CZWZvcmVMYXlvdXRNZWFzdXJlXCIsXG4gICAgXCJvbkFuaW1hdGlvblN0YXJ0XCIsXG4gICAgXCJvbkFuaW1hdGlvbkNvbXBsZXRlXCIsXG4gICAgXCJvblVwZGF0ZVwiLFxuICAgIFwib25EcmFnU3RhcnRcIixcbiAgICBcIm9uRHJhZ1wiLFxuICAgIFwib25EcmFnRW5kXCIsXG4gICAgXCJvbk1lYXN1cmVEcmFnQ29uc3RyYWludHNcIixcbiAgICBcIm9uRGlyZWN0aW9uTG9ja1wiLFxuICAgIFwib25EcmFnVHJhbnNpdGlvbkVuZFwiLFxuICAgIFwiZHJhZ1wiLFxuICAgIFwiZHJhZ0NvbnRyb2xzXCIsXG4gICAgXCJkcmFnTGlzdGVuZXJcIixcbiAgICBcImRyYWdDb25zdHJhaW50c1wiLFxuICAgIFwiZHJhZ0RpcmVjdGlvbkxvY2tcIixcbiAgICBcImRyYWdTbmFwVG9PcmlnaW5cIixcbiAgICBcIl9kcmFnWFwiLFxuICAgIFwiX2RyYWdZXCIsXG4gICAgXCJkcmFnRWxhc3RpY1wiLFxuICAgIFwiZHJhZ01vbWVudHVtXCIsXG4gICAgXCJkcmFnUHJvcGFnYXRpb25cIixcbiAgICBcImRyYWdUcmFuc2l0aW9uXCIsXG4gICAgXCJ3aGlsZURyYWdcIixcbiAgICBcIm9uUGFuXCIsXG4gICAgXCJvblBhblN0YXJ0XCIsXG4gICAgXCJvblBhbkVuZFwiLFxuICAgIFwib25QYW5TZXNzaW9uU3RhcnRcIixcbiAgICBcIm9uVGFwXCIsXG4gICAgXCJvblRhcFN0YXJ0XCIsXG4gICAgXCJvblRhcENhbmNlbFwiLFxuICAgIFwib25Ib3ZlclN0YXJ0XCIsXG4gICAgXCJvbkhvdmVyRW5kXCIsXG4gICAgXCJ3aGlsZUZvY3VzXCIsXG4gICAgXCJ3aGlsZVRhcFwiLFxuICAgIFwid2hpbGVIb3ZlclwiLFxuICAgIFwid2hpbGVJblZpZXdcIixcbiAgICBcIm9uVmlld3BvcnRFbnRlclwiLFxuICAgIFwib25WaWV3cG9ydExlYXZlXCIsXG4gICAgXCJ2aWV3cG9ydFwiLFxuICAgIFwibGF5b3V0U2Nyb2xsXCIsXG5dKTtcbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIHByb3AgbmFtZSBpcyBhIHZhbGlkIGBNb3Rpb25Qcm9wYCBrZXkuXG4gKlxuICogQHBhcmFtIGtleSAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGNoZWNrXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaXMga2V5IGlzIGEgdmFsaWQgYE1vdGlvblByb3BgLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZE1vdGlvblByb3Aoa2V5KSB7XG4gICAgcmV0dXJuIHZhbGlkTW90aW9uUHJvcHMuaGFzKGtleSk7XG59XG5cbmV4cG9ydCB7IGlzVmFsaWRNb3Rpb25Qcm9wIH07XG4iLCJpbXBvcnQgeyBpc1ZhbGlkTW90aW9uUHJvcCB9IGZyb20gJy4uLy4uLy4uL21vdGlvbi91dGlscy92YWxpZC1wcm9wLm1qcyc7XG5cbnZhciBzaG91bGRGb3J3YXJkID0gZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gIWlzVmFsaWRNb3Rpb25Qcm9wKGtleSk7IH07XG5mdW5jdGlvbiBsb2FkRXh0ZXJuYWxJc1ZhbGlkUHJvcChpc1ZhbGlkUHJvcCkge1xuICAgIGlmICghaXNWYWxpZFByb3ApXG4gICAgICAgIHJldHVybjtcbiAgICAvLyBFeHBsaWNpdGx5IGZpbHRlciBvdXIgZXZlbnRzXG4gICAgc2hvdWxkRm9yd2FyZCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleS5zdGFydHNXaXRoKFwib25cIikgPyAhaXNWYWxpZE1vdGlvblByb3Aoa2V5KSA6IGlzVmFsaWRQcm9wKGtleSk7XG4gICAgfTtcbn1cbi8qKlxuICogRW1vdGlvbiBhbmQgU3R5bGVkIENvbXBvbmVudHMgYm90aCBhbGxvdyB1c2VycyB0byBwYXNzIHRocm91Z2ggYXJiaXRyYXJ5IHByb3BzIHRvIHRoZWlyIGNvbXBvbmVudHNcbiAqIHRvIGR5bmFtaWNhbGx5IGdlbmVyYXRlIENTUy4gVGhleSBib3RoIHVzZSB0aGUgYEBlbW90aW9uL2lzLXByb3AtdmFsaWRgIHBhY2thZ2UgdG8gZGV0ZXJtaW5lIHdoaWNoXG4gKiBvZiB0aGVzZSBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSB1bmRlcmx5aW5nIERPTSBub2RlLlxuICpcbiAqIEhvd2V2ZXIsIHdoZW4gc3R5bGluZyBhIE1vdGlvbiBjb21wb25lbnQgYHN0eWxlZChtb3Rpb24uZGl2KWAsIGJvdGggcGFja2FnZXMgcGFzcyB0aHJvdWdoICphbGwqIHByb3BzXG4gKiBhcyBpdCdzIHNlZW4gYXMgYW4gYXJiaXRyYXJ5IGNvbXBvbmVudCByYXRoZXIgdGhhbiBhIERPTSBub2RlLiBNb3Rpb24gb25seSBhbGxvd3MgYXJiaXRyYXJ5IHByb3BzXG4gKiBwYXNzZWQgdGhyb3VnaCB0aGUgYGN1c3RvbWAgcHJvcCBzbyBpdCBkb2Vzbid0ICpuZWVkKiB0aGUgcGF5bG9hZCBvciBjb21wdXRhdGlvbmFsIG92ZXJoZWFkIG9mXG4gKiBgQGVtb3Rpb24vaXMtcHJvcC12YWxpZGAsIGhvd2V2ZXIgdG8gZml4IHRoaXMgcHJvYmxlbSB3ZSBuZWVkIHRvIHVzZSBpdC5cbiAqXG4gKiBCeSBtYWtpbmcgaXQgYW4gb3B0aW9uYWxEZXBlbmRlbmN5IHdlIGNhbiBvZmZlciB0aGlzIGZ1bmN0aW9uYWxpdHkgb25seSBpbiB0aGUgc2l0dWF0aW9ucyB3aGVyZSBpdCdzXG4gKiBhY3R1YWxseSByZXF1aXJlZC5cbiAqL1xudHJ5IHtcbiAgICAvKipcbiAgICAgKiBXZSBhdHRlbXB0IHRvIGltcG9ydCB0aGlzIHBhY2thZ2UgYnV0IHJlcXVpcmUgd29uJ3QgYmUgZGVmaW5lZCBpbiBlc20gZW52aXJvbm1lbnRzLCBpbiB0aGF0IGNhc2VcbiAgICAgKiBpc1Byb3BWYWxpZCB3aWxsIGhhdmUgdG8gYmUgcHJvdmlkZWQgdmlhIGBNb3Rpb25Db250ZXh0YC4gSW4gYSA2LjAuMCB0aGlzIHNob3VsZCBwcm9iYWJseSBiZSByZW1vdmVkXG4gICAgICogaW4gZmF2b3VyIG9mIGV4cGxpY2l0IGluamVjdGlvbi5cbiAgICAgKi9cbiAgICBsb2FkRXh0ZXJuYWxJc1ZhbGlkUHJvcChyZXF1aXJlKFwiQGVtb3Rpb24vaXMtcHJvcC12YWxpZFwiKS5kZWZhdWx0KTtcbn1cbmNhdGNoIChfYSkge1xuICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gYWN0dWFsbHkgZG8gYW55dGhpbmcgaGVyZSAtIHRoZSBmYWxsYmFjayBpcyB0aGUgZXhpc3RpbmcgYGlzUHJvcFZhbGlkYC5cbn1cbmZ1bmN0aW9uIGZpbHRlclByb3BzKHByb3BzLCBpc0RvbSwgZm9yd2FyZE1vdGlvblByb3BzKSB7XG4gICAgdmFyIGZpbHRlcmVkUHJvcHMgPSB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgaWYgKHNob3VsZEZvcndhcmQoa2V5KSB8fFxuICAgICAgICAgICAgKGZvcndhcmRNb3Rpb25Qcm9wcyA9PT0gdHJ1ZSAmJiBpc1ZhbGlkTW90aW9uUHJvcChrZXkpKSB8fFxuICAgICAgICAgICAgKCFpc0RvbSAmJiAhaXNWYWxpZE1vdGlvblByb3Aoa2V5KSkgfHxcbiAgICAgICAgICAgIC8vIElmIHRyeWluZyB0byB1c2UgbmF0aXZlIEhUTUwgZHJhZyBldmVudHMsIGZvcndhcmQgZHJhZyBsaXN0ZW5lcnNcbiAgICAgICAgICAgIChwcm9wc1tcImRyYWdnYWJsZVwiXSAmJiBrZXkuc3RhcnRzV2l0aChcIm9uRHJhZ1wiKSkpIHtcbiAgICAgICAgICAgIGZpbHRlcmVkUHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcmVkUHJvcHM7XG59XG5cbmV4cG9ydCB7IGZpbHRlclByb3BzLCBsb2FkRXh0ZXJuYWxJc1ZhbGlkUHJvcCB9O1xuIiwiaW1wb3J0IHsgcHggfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5cbmZ1bmN0aW9uIGNhbGNPcmlnaW4ob3JpZ2luLCBvZmZzZXQsIHNpemUpIHtcbiAgICByZXR1cm4gdHlwZW9mIG9yaWdpbiA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IG9yaWdpblxuICAgICAgICA6IHB4LnRyYW5zZm9ybShvZmZzZXQgKyBzaXplICogb3JpZ2luKTtcbn1cbi8qKlxuICogVGhlIFNWRyB0cmFuc2Zvcm0gb3JpZ2luIGRlZmF1bHRzIGFyZSBkaWZmZXJlbnQgdG8gQ1NTIGFuZCBpcyBsZXNzIGludHVpdGl2ZSxcbiAqIHNvIHdlIHVzZSB0aGUgbWVhc3VyZWQgZGltZW5zaW9ucyBvZiB0aGUgU1ZHIHRvIHJlY29uY2lsZSB0aGVzZS5cbiAqL1xuZnVuY3Rpb24gY2FsY1NWR1RyYW5zZm9ybU9yaWdpbihkaW1lbnNpb25zLCBvcmlnaW5YLCBvcmlnaW5ZKSB7XG4gICAgdmFyIHB4T3JpZ2luWCA9IGNhbGNPcmlnaW4ob3JpZ2luWCwgZGltZW5zaW9ucy54LCBkaW1lbnNpb25zLndpZHRoKTtcbiAgICB2YXIgcHhPcmlnaW5ZID0gY2FsY09yaWdpbihvcmlnaW5ZLCBkaW1lbnNpb25zLnksIGRpbWVuc2lvbnMuaGVpZ2h0KTtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQocHhPcmlnaW5YLCBcIiBcIikuY29uY2F0KHB4T3JpZ2luWSk7XG59XG5cbmV4cG9ydCB7IGNhbGNTVkdUcmFuc2Zvcm1PcmlnaW4gfTtcbiIsImltcG9ydCB7IHB4IH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuXG52YXIgZGFzaEtleXMgPSB7XG4gICAgb2Zmc2V0OiBcInN0cm9rZS1kYXNob2Zmc2V0XCIsXG4gICAgYXJyYXk6IFwic3Ryb2tlLWRhc2hhcnJheVwiLFxufTtcbnZhciBjYW1lbEtleXMgPSB7XG4gICAgb2Zmc2V0OiBcInN0cm9rZURhc2hvZmZzZXRcIixcbiAgICBhcnJheTogXCJzdHJva2VEYXNoYXJyYXlcIixcbn07XG4vKipcbiAqIEJ1aWxkIFNWRyBwYXRoIHByb3BlcnRpZXMuIFVzZXMgdGhlIHBhdGgncyBtZWFzdXJlZCBsZW5ndGggdG8gY29udmVydFxuICogb3VyIGN1c3RvbSBwYXRoTGVuZ3RoLCBwYXRoU3BhY2luZyBhbmQgcGF0aE9mZnNldCBpbnRvIHN0cm9rZS1kYXNob2Zmc2V0XG4gKiBhbmQgc3Ryb2tlLWRhc2hhcnJheSBhdHRyaWJ1dGVzLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbXV0YXRpdmUgdG8gcmVkdWNlIHBlci1mcmFtZSBHQy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRTVkdQYXRoKGF0dHJzLCBsZW5ndGgsIHNwYWNpbmcsIG9mZnNldCwgdXNlRGFzaENhc2UpIHtcbiAgICBpZiAoc3BhY2luZyA9PT0gdm9pZCAwKSB7IHNwYWNpbmcgPSAxOyB9XG4gICAgaWYgKG9mZnNldCA9PT0gdm9pZCAwKSB7IG9mZnNldCA9IDA7IH1cbiAgICBpZiAodXNlRGFzaENhc2UgPT09IHZvaWQgMCkgeyB1c2VEYXNoQ2FzZSA9IHRydWU7IH1cbiAgICAvLyBOb3JtYWxpc2UgcGF0aCBsZW5ndGggYnkgc2V0dGluZyBTVkcgYXR0cmlidXRlIHBhdGhMZW5ndGggdG8gMVxuICAgIGF0dHJzLnBhdGhMZW5ndGggPSAxO1xuICAgIC8vIFdlIHVzZSBkYXNoIGNhc2Ugd2hlbiBzZXR0aW5nIGF0dHJpYnV0ZXMgZGlyZWN0bHkgdG8gdGhlIERPTSBub2RlIGFuZCBjYW1lbCBjYXNlXG4gICAgLy8gd2hlbiBkZWZpbmluZyBwcm9wcyBvbiBhIFJlYWN0IGNvbXBvbmVudC5cbiAgICB2YXIga2V5cyA9IHVzZURhc2hDYXNlID8gZGFzaEtleXMgOiBjYW1lbEtleXM7XG4gICAgLy8gQnVpbGQgdGhlIGRhc2ggb2Zmc2V0XG4gICAgYXR0cnNba2V5cy5vZmZzZXRdID0gcHgudHJhbnNmb3JtKC1vZmZzZXQpO1xuICAgIC8vIEJ1aWxkIHRoZSBkYXNoIGFycmF5XG4gICAgdmFyIHBhdGhMZW5ndGggPSBweC50cmFuc2Zvcm0obGVuZ3RoKTtcbiAgICB2YXIgcGF0aFNwYWNpbmcgPSBweC50cmFuc2Zvcm0oc3BhY2luZyk7XG4gICAgYXR0cnNba2V5cy5hcnJheV0gPSBcIlwiLmNvbmNhdChwYXRoTGVuZ3RoLCBcIiBcIikuY29uY2F0KHBhdGhTcGFjaW5nKTtcbn1cblxuZXhwb3J0IHsgYnVpbGRTVkdQYXRoIH07XG4iLCJpbXBvcnQgeyBfX3Jlc3QgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBidWlsZEhUTUxTdHlsZXMgfSBmcm9tICcuLi8uLi9odG1sL3V0aWxzL2J1aWxkLXN0eWxlcy5tanMnO1xuaW1wb3J0IHsgY2FsY1NWR1RyYW5zZm9ybU9yaWdpbiB9IGZyb20gJy4vdHJhbnNmb3JtLW9yaWdpbi5tanMnO1xuaW1wb3J0IHsgYnVpbGRTVkdQYXRoIH0gZnJvbSAnLi9wYXRoLm1qcyc7XG5cbi8qKlxuICogQnVpbGQgU1ZHIHZpc3VhbCBhdHRyYnV0ZXMsIGxpa2UgY3ggYW5kIHN0eWxlLnRyYW5zZm9ybVxuICovXG5mdW5jdGlvbiBidWlsZFNWR0F0dHJzKHN0YXRlLCBfYSwgb3B0aW9ucywgdHJhbnNmb3JtVGVtcGxhdGUpIHtcbiAgICB2YXIgYXR0clggPSBfYS5hdHRyWCwgYXR0clkgPSBfYS5hdHRyWSwgb3JpZ2luWCA9IF9hLm9yaWdpblgsIG9yaWdpblkgPSBfYS5vcmlnaW5ZLCBwYXRoTGVuZ3RoID0gX2EucGF0aExlbmd0aCwgX2IgPSBfYS5wYXRoU3BhY2luZywgcGF0aFNwYWNpbmcgPSBfYiA9PT0gdm9pZCAwID8gMSA6IF9iLCBfYyA9IF9hLnBhdGhPZmZzZXQsIHBhdGhPZmZzZXQgPSBfYyA9PT0gdm9pZCAwID8gMCA6IF9jLCBcbiAgICAvLyBUaGlzIGlzIG9iamVjdCBjcmVhdGlvbiwgd2hpY2ggd2UgdHJ5IHRvIGF2b2lkIHBlci1mcmFtZS5cbiAgICBsYXRlc3QgPSBfX3Jlc3QoX2EsIFtcImF0dHJYXCIsIFwiYXR0cllcIiwgXCJvcmlnaW5YXCIsIFwib3JpZ2luWVwiLCBcInBhdGhMZW5ndGhcIiwgXCJwYXRoU3BhY2luZ1wiLCBcInBhdGhPZmZzZXRcIl0pO1xuICAgIGJ1aWxkSFRNTFN0eWxlcyhzdGF0ZSwgbGF0ZXN0LCBvcHRpb25zLCB0cmFuc2Zvcm1UZW1wbGF0ZSk7XG4gICAgc3RhdGUuYXR0cnMgPSBzdGF0ZS5zdHlsZTtcbiAgICBzdGF0ZS5zdHlsZSA9IHt9O1xuICAgIHZhciBhdHRycyA9IHN0YXRlLmF0dHJzLCBzdHlsZSA9IHN0YXRlLnN0eWxlLCBkaW1lbnNpb25zID0gc3RhdGUuZGltZW5zaW9ucztcbiAgICAvKipcbiAgICAgKiBIb3dldmVyLCB3ZSBhcHBseSB0cmFuc2Zvcm1zIGFzIENTUyB0cmFuc2Zvcm1zLiBTbyBpZiB3ZSBkZXRlY3QgYSB0cmFuc2Zvcm0gd2UgdGFrZSBpdCBmcm9tIGF0dHJzXG4gICAgICogYW5kIGNvcHkgaXQgaW50byBzdHlsZS5cbiAgICAgKi9cbiAgICBpZiAoYXR0cnMudHJhbnNmb3JtKSB7XG4gICAgICAgIGlmIChkaW1lbnNpb25zKVxuICAgICAgICAgICAgc3R5bGUudHJhbnNmb3JtID0gYXR0cnMudHJhbnNmb3JtO1xuICAgICAgICBkZWxldGUgYXR0cnMudHJhbnNmb3JtO1xuICAgIH1cbiAgICAvLyBQYXJzZSB0cmFuc2Zvcm1PcmlnaW5cbiAgICBpZiAoZGltZW5zaW9ucyAmJlxuICAgICAgICAob3JpZ2luWCAhPT0gdW5kZWZpbmVkIHx8IG9yaWdpblkgIT09IHVuZGVmaW5lZCB8fCBzdHlsZS50cmFuc2Zvcm0pKSB7XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IGNhbGNTVkdUcmFuc2Zvcm1PcmlnaW4oZGltZW5zaW9ucywgb3JpZ2luWCAhPT0gdW5kZWZpbmVkID8gb3JpZ2luWCA6IDAuNSwgb3JpZ2luWSAhPT0gdW5kZWZpbmVkID8gb3JpZ2luWSA6IDAuNSk7XG4gICAgfVxuICAgIC8vIFRyZWF0IHgveSBub3QgYXMgc2hvcnRjdXRzIGJ1dCBhcyBhY3R1YWwgYXR0cmlidXRlc1xuICAgIGlmIChhdHRyWCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBhdHRycy54ID0gYXR0clg7XG4gICAgaWYgKGF0dHJZICE9PSB1bmRlZmluZWQpXG4gICAgICAgIGF0dHJzLnkgPSBhdHRyWTtcbiAgICAvLyBCdWlsZCBTVkcgcGF0aCBpZiBvbmUgaGFzIGJlZW4gZGVmaW5lZFxuICAgIGlmIChwYXRoTGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYnVpbGRTVkdQYXRoKGF0dHJzLCBwYXRoTGVuZ3RoLCBwYXRoU3BhY2luZywgcGF0aE9mZnNldCwgZmFsc2UpO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgYnVpbGRTVkdBdHRycyB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBjcmVhdGVIdG1sUmVuZGVyU3RhdGUgfSBmcm9tICcuLi8uLi9odG1sL3V0aWxzL2NyZWF0ZS1yZW5kZXItc3RhdGUubWpzJztcblxudmFyIGNyZWF0ZVN2Z1JlbmRlclN0YXRlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKF9fYXNzaWduKF9fYXNzaWduKHt9LCBjcmVhdGVIdG1sUmVuZGVyU3RhdGUoKSksIHsgYXR0cnM6IHt9IH0pKTsgfTtcblxuZXhwb3J0IHsgY3JlYXRlU3ZnUmVuZGVyU3RhdGUgfTtcbiIsImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNvcHlSYXdWYWx1ZXNPbmx5IH0gZnJvbSAnLi4vaHRtbC91c2UtcHJvcHMubWpzJztcbmltcG9ydCB7IGJ1aWxkU1ZHQXR0cnMgfSBmcm9tICcuL3V0aWxzL2J1aWxkLWF0dHJzLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVTdmdSZW5kZXJTdGF0ZSB9IGZyb20gJy4vdXRpbHMvY3JlYXRlLXJlbmRlci1zdGF0ZS5tanMnO1xuXG5mdW5jdGlvbiB1c2VTVkdQcm9wcyhwcm9wcywgdmlzdWFsU3RhdGUpIHtcbiAgICB2YXIgdmlzdWFsUHJvcHMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gY3JlYXRlU3ZnUmVuZGVyU3RhdGUoKTtcbiAgICAgICAgYnVpbGRTVkdBdHRycyhzdGF0ZSwgdmlzdWFsU3RhdGUsIHsgZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb246IGZhbHNlIH0sIHByb3BzLnRyYW5zZm9ybVRlbXBsYXRlKTtcbiAgICAgICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBzdGF0ZS5hdHRycyksIHsgc3R5bGU6IF9fYXNzaWduKHt9LCBzdGF0ZS5zdHlsZSkgfSk7XG4gICAgfSwgW3Zpc3VhbFN0YXRlXSk7XG4gICAgaWYgKHByb3BzLnN0eWxlKSB7XG4gICAgICAgIHZhciByYXdTdHlsZXMgPSB7fTtcbiAgICAgICAgY29weVJhd1ZhbHVlc09ubHkocmF3U3R5bGVzLCBwcm9wcy5zdHlsZSwgcHJvcHMpO1xuICAgICAgICB2aXN1YWxQcm9wcy5zdHlsZSA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCByYXdTdHlsZXMpLCB2aXN1YWxQcm9wcy5zdHlsZSk7XG4gICAgfVxuICAgIHJldHVybiB2aXN1YWxQcm9wcztcbn1cblxuZXhwb3J0IHsgdXNlU1ZHUHJvcHMgfTtcbiIsImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUhUTUxQcm9wcyB9IGZyb20gJy4uL2h0bWwvdXNlLXByb3BzLm1qcyc7XG5pbXBvcnQgeyBmaWx0ZXJQcm9wcyB9IGZyb20gJy4vdXRpbHMvZmlsdGVyLXByb3BzLm1qcyc7XG5pbXBvcnQgeyBpc1NWR0NvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvaXMtc3ZnLWNvbXBvbmVudC5tanMnO1xuaW1wb3J0IHsgdXNlU1ZHUHJvcHMgfSBmcm9tICcuLi9zdmcvdXNlLXByb3BzLm1qcyc7XG5cbmZ1bmN0aW9uIGNyZWF0ZVVzZVJlbmRlcihmb3J3YXJkTW90aW9uUHJvcHMpIHtcbiAgICBpZiAoZm9yd2FyZE1vdGlvblByb3BzID09PSB2b2lkIDApIHsgZm9yd2FyZE1vdGlvblByb3BzID0gZmFsc2U7IH1cbiAgICB2YXIgdXNlUmVuZGVyID0gZnVuY3Rpb24gKENvbXBvbmVudCwgcHJvcHMsIHByb2plY3Rpb25JZCwgcmVmLCBfYSwgaXNTdGF0aWMpIHtcbiAgICAgICAgdmFyIGxhdGVzdFZhbHVlcyA9IF9hLmxhdGVzdFZhbHVlcztcbiAgICAgICAgdmFyIHVzZVZpc3VhbFByb3BzID0gaXNTVkdDb21wb25lbnQoQ29tcG9uZW50KVxuICAgICAgICAgICAgPyB1c2VTVkdQcm9wc1xuICAgICAgICAgICAgOiB1c2VIVE1MUHJvcHM7XG4gICAgICAgIHZhciB2aXN1YWxQcm9wcyA9IHVzZVZpc3VhbFByb3BzKHByb3BzLCBsYXRlc3RWYWx1ZXMsIGlzU3RhdGljKTtcbiAgICAgICAgdmFyIGZpbHRlcmVkUHJvcHMgPSBmaWx0ZXJQcm9wcyhwcm9wcywgdHlwZW9mIENvbXBvbmVudCA9PT0gXCJzdHJpbmdcIiwgZm9yd2FyZE1vdGlvblByb3BzKTtcbiAgICAgICAgdmFyIGVsZW1lbnRQcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKF9fYXNzaWduKHt9LCBmaWx0ZXJlZFByb3BzKSwgdmlzdWFsUHJvcHMpLCB7IHJlZjogcmVmIH0pO1xuICAgICAgICBpZiAocHJvamVjdGlvbklkKSB7XG4gICAgICAgICAgICBlbGVtZW50UHJvcHNbXCJkYXRhLXByb2plY3Rpb24taWRcIl0gPSBwcm9qZWN0aW9uSWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBlbGVtZW50UHJvcHMpO1xuICAgIH07XG4gICAgcmV0dXJuIHVzZVJlbmRlcjtcbn1cblxuZXhwb3J0IHsgY3JlYXRlVXNlUmVuZGVyIH07XG4iLCJ2YXIgQ0FNRUxfQ0FTRV9QQVRURVJOID0gLyhbYS16XSkoW0EtWl0pL2c7XG52YXIgUkVQTEFDRV9URU1QTEFURSA9IFwiJDEtJDJcIjtcbi8qKlxuICogQ29udmVydCBjYW1lbENhc2UgdG8gZGFzaC1jYXNlIHByb3BlcnRpZXMuXG4gKi9cbnZhciBjYW1lbFRvRGFzaCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoQ0FNRUxfQ0FTRV9QQVRURVJOLCBSRVBMQUNFX1RFTVBMQVRFKS50b0xvd2VyQ2FzZSgpO1xufTtcblxuZXhwb3J0IHsgY2FtZWxUb0Rhc2ggfTtcbiIsImZ1bmN0aW9uIHJlbmRlckhUTUwoZWxlbWVudCwgX2EsIHN0eWxlUHJvcCwgcHJvamVjdGlvbikge1xuICAgIHZhciBzdHlsZSA9IF9hLnN0eWxlLCB2YXJzID0gX2EudmFycztcbiAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlLCBwcm9qZWN0aW9uICYmIHByb2plY3Rpb24uZ2V0UHJvamVjdGlvblN0eWxlcyhzdHlsZVByb3ApKTtcbiAgICAvLyBMb29wIG92ZXIgYW55IENTUyB2YXJpYWJsZXMgYW5kIGFzc2lnbiB0aG9zZS5cbiAgICBmb3IgKHZhciBrZXkgaW4gdmFycykge1xuICAgICAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFyc1trZXldKTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IHJlbmRlckhUTUwgfTtcbiIsIi8qKlxuICogQSBzZXQgb2YgYXR0cmlidXRlIG5hbWVzIHRoYXQgYXJlIGFsd2F5cyByZWFkL3dyaXR0ZW4gYXMgY2FtZWwgY2FzZS5cbiAqL1xudmFyIGNhbWVsQ2FzZUF0dHJpYnV0ZXMgPSBuZXcgU2V0KFtcbiAgICBcImJhc2VGcmVxdWVuY3lcIixcbiAgICBcImRpZmZ1c2VDb25zdGFudFwiLFxuICAgIFwia2VybmVsTWF0cml4XCIsXG4gICAgXCJrZXJuZWxVbml0TGVuZ3RoXCIsXG4gICAgXCJrZXlTcGxpbmVzXCIsXG4gICAgXCJrZXlUaW1lc1wiLFxuICAgIFwibGltaXRpbmdDb25lQW5nbGVcIixcbiAgICBcIm1hcmtlckhlaWdodFwiLFxuICAgIFwibWFya2VyV2lkdGhcIixcbiAgICBcIm51bU9jdGF2ZXNcIixcbiAgICBcInRhcmdldFhcIixcbiAgICBcInRhcmdldFlcIixcbiAgICBcInN1cmZhY2VTY2FsZVwiLFxuICAgIFwic3BlY3VsYXJDb25zdGFudFwiLFxuICAgIFwic3BlY3VsYXJFeHBvbmVudFwiLFxuICAgIFwic3RkRGV2aWF0aW9uXCIsXG4gICAgXCJ0YWJsZVZhbHVlc1wiLFxuICAgIFwidmlld0JveFwiLFxuICAgIFwiZ3JhZGllbnRUcmFuc2Zvcm1cIixcbiAgICBcInBhdGhMZW5ndGhcIixcbl0pO1xuXG5leHBvcnQgeyBjYW1lbENhc2VBdHRyaWJ1dGVzIH07XG4iLCJpbXBvcnQgeyBjYW1lbFRvRGFzaCB9IGZyb20gJy4uLy4uL2RvbS91dGlscy9jYW1lbC10by1kYXNoLm1qcyc7XG5pbXBvcnQgeyByZW5kZXJIVE1MIH0gZnJvbSAnLi4vLi4vaHRtbC91dGlscy9yZW5kZXIubWpzJztcbmltcG9ydCB7IGNhbWVsQ2FzZUF0dHJpYnV0ZXMgfSBmcm9tICcuL2NhbWVsLWNhc2UtYXR0cnMubWpzJztcblxuZnVuY3Rpb24gcmVuZGVyU1ZHKGVsZW1lbnQsIHJlbmRlclN0YXRlLCBfc3R5bGVQcm9wLCBwcm9qZWN0aW9uKSB7XG4gICAgcmVuZGVySFRNTChlbGVtZW50LCByZW5kZXJTdGF0ZSwgdW5kZWZpbmVkLCBwcm9qZWN0aW9uKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gcmVuZGVyU3RhdGUuYXR0cnMpIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoIWNhbWVsQ2FzZUF0dHJpYnV0ZXMuaGFzKGtleSkgPyBjYW1lbFRvRGFzaChrZXkpIDoga2V5LCByZW5kZXJTdGF0ZS5hdHRyc1trZXldKTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IHJlbmRlclNWRyB9O1xuIiwiaW1wb3J0IHsgaXNGb3JjZWRNb3Rpb25WYWx1ZSB9IGZyb20gJy4uLy4uLy4uL21vdGlvbi91dGlscy9pcy1mb3JjZWQtbW90aW9uLXZhbHVlLm1qcyc7XG5pbXBvcnQgeyBpc01vdGlvblZhbHVlIH0gZnJvbSAnLi4vLi4vLi4vdmFsdWUvdXRpbHMvaXMtbW90aW9uLXZhbHVlLm1qcyc7XG5cbmZ1bmN0aW9uIHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyhwcm9wcykge1xuICAgIHZhciBzdHlsZSA9IHByb3BzLnN0eWxlO1xuICAgIHZhciBuZXdWYWx1ZXMgPSB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gc3R5bGUpIHtcbiAgICAgICAgaWYgKGlzTW90aW9uVmFsdWUoc3R5bGVba2V5XSkgfHwgaXNGb3JjZWRNb3Rpb25WYWx1ZShrZXksIHByb3BzKSkge1xuICAgICAgICAgICAgbmV3VmFsdWVzW2tleV0gPSBzdHlsZVtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdWYWx1ZXM7XG59XG5cbmV4cG9ydCB7IHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyB9O1xuIiwiaW1wb3J0IHsgaXNNb3Rpb25WYWx1ZSB9IGZyb20gJy4uLy4uLy4uL3ZhbHVlL3V0aWxzL2lzLW1vdGlvbi12YWx1ZS5tanMnO1xuaW1wb3J0IHsgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzIGFzIHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyQxIH0gZnJvbSAnLi4vLi4vaHRtbC91dGlscy9zY3JhcGUtbW90aW9uLXZhbHVlcy5tanMnO1xuXG5mdW5jdGlvbiBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMocHJvcHMpIHtcbiAgICB2YXIgbmV3VmFsdWVzID0gc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzJDEocHJvcHMpO1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgICBpZiAoaXNNb3Rpb25WYWx1ZShwcm9wc1trZXldKSkge1xuICAgICAgICAgICAgdmFyIHRhcmdldEtleSA9IGtleSA9PT0gXCJ4XCIgfHwga2V5ID09PSBcInlcIiA/IFwiYXR0clwiICsga2V5LnRvVXBwZXJDYXNlKCkgOiBrZXk7XG4gICAgICAgICAgICBuZXdWYWx1ZXNbdGFyZ2V0S2V5XSA9IHByb3BzW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld1ZhbHVlcztcbn1cblxuZXhwb3J0IHsgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzIH07XG4iLCJmdW5jdGlvbiBpc0FuaW1hdGlvbkNvbnRyb2xzKHYpIHtcbiAgICByZXR1cm4gdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHYuc3RhcnQgPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuZXhwb3J0IHsgaXNBbmltYXRpb25Db250cm9scyB9O1xuIiwidmFyIGlzS2V5ZnJhbWVzVGFyZ2V0ID0gZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2KTtcbn07XG5cbmV4cG9ydCB7IGlzS2V5ZnJhbWVzVGFyZ2V0IH07XG4iLCJpbXBvcnQgeyBpc0tleWZyYW1lc1RhcmdldCB9IGZyb20gJy4uL2FuaW1hdGlvbi91dGlscy9pcy1rZXlmcmFtZXMtdGFyZ2V0Lm1qcyc7XG5cbnZhciBpc0N1c3RvbVZhbHVlID0gZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4gQm9vbGVhbih2ICYmIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYubWl4ICYmIHYudG9WYWx1ZSk7XG59O1xudmFyIHJlc29sdmVGaW5hbFZhbHVlSW5LZXlmcmFtZXMgPSBmdW5jdGlvbiAodikge1xuICAgIC8vIFRPRE8gbWF5YmUgdGhyb3cgaWYgdi5sZW5ndGggLSAxIGlzIHBsYWNlaG9sZGVyIHRva2VuP1xuICAgIHJldHVybiBpc0tleWZyYW1lc1RhcmdldCh2KSA/IHZbdi5sZW5ndGggLSAxXSB8fCAwIDogdjtcbn07XG5cbmV4cG9ydCB7IGlzQ3VzdG9tVmFsdWUsIHJlc29sdmVGaW5hbFZhbHVlSW5LZXlmcmFtZXMgfTtcbiIsImltcG9ydCB7IGlzQ3VzdG9tVmFsdWUgfSBmcm9tICcuLi8uLi91dGlscy9yZXNvbHZlLXZhbHVlLm1qcyc7XG5pbXBvcnQgeyBpc01vdGlvblZhbHVlIH0gZnJvbSAnLi9pcy1tb3Rpb24tdmFsdWUubWpzJztcblxuLyoqXG4gKiBJZiB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgYSBNb3Rpb25WYWx1ZSwgdGhpcyByZXR1cm5zIHRoZSBhY3R1YWwgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHRoZSB2YWx1ZSBpdHNlbGZcbiAqXG4gKiBUT0RPOiBSZW1vdmUgYW5kIG1vdmUgdG8gbGlicmFyeVxuICovXG5mdW5jdGlvbiByZXNvbHZlTW90aW9uVmFsdWUodmFsdWUpIHtcbiAgICB2YXIgdW53cmFwcGVkVmFsdWUgPSBpc01vdGlvblZhbHVlKHZhbHVlKSA/IHZhbHVlLmdldCgpIDogdmFsdWU7XG4gICAgcmV0dXJuIGlzQ3VzdG9tVmFsdWUodW53cmFwcGVkVmFsdWUpXG4gICAgICAgID8gdW53cmFwcGVkVmFsdWUudG9WYWx1ZSgpXG4gICAgICAgIDogdW53cmFwcGVkVmFsdWU7XG59XG5cbmV4cG9ydCB7IHJlc29sdmVNb3Rpb25WYWx1ZSB9O1xuIiwiaW1wb3J0IHsgX19yZXN0IH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzQW5pbWF0aW9uQ29udHJvbHMgfSBmcm9tICcuLi8uLi9hbmltYXRpb24vdXRpbHMvaXMtYW5pbWF0aW9uLWNvbnRyb2xzLm1qcyc7XG5pbXBvcnQgeyBQcmVzZW5jZUNvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L1ByZXNlbmNlQ29udGV4dC5tanMnO1xuaW1wb3J0IHsgY2hlY2tJZkNvbnRyb2xsaW5nVmFyaWFudHMsIGNoZWNrSWZWYXJpYW50Tm9kZSwgcmVzb2x2ZVZhcmlhbnRGcm9tUHJvcHMgfSBmcm9tICcuLi8uLi9yZW5kZXIvdXRpbHMvdmFyaWFudHMubWpzJztcbmltcG9ydCB7IHVzZUNvbnN0YW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvdXNlLWNvbnN0YW50Lm1qcyc7XG5pbXBvcnQgeyByZXNvbHZlTW90aW9uVmFsdWUgfSBmcm9tICcuLi8uLi92YWx1ZS91dGlscy9yZXNvbHZlLW1vdGlvbi12YWx1ZS5tanMnO1xuaW1wb3J0IHsgTW90aW9uQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvTW90aW9uQ29udGV4dC9pbmRleC5tanMnO1xuXG5mdW5jdGlvbiBtYWtlU3RhdGUoX2EsIHByb3BzLCBjb250ZXh0LCBwcmVzZW5jZUNvbnRleHQpIHtcbiAgICB2YXIgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzID0gX2Euc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzLCBjcmVhdGVSZW5kZXJTdGF0ZSA9IF9hLmNyZWF0ZVJlbmRlclN0YXRlLCBvbk1vdW50ID0gX2Eub25Nb3VudDtcbiAgICB2YXIgc3RhdGUgPSB7XG4gICAgICAgIGxhdGVzdFZhbHVlczogbWFrZUxhdGVzdFZhbHVlcyhwcm9wcywgY29udGV4dCwgcHJlc2VuY2VDb250ZXh0LCBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMpLFxuICAgICAgICByZW5kZXJTdGF0ZTogY3JlYXRlUmVuZGVyU3RhdGUoKSxcbiAgICB9O1xuICAgIGlmIChvbk1vdW50KSB7XG4gICAgICAgIHN0YXRlLm1vdW50ID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7IHJldHVybiBvbk1vdW50KHByb3BzLCBpbnN0YW5jZSwgc3RhdGUpOyB9O1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGU7XG59XG52YXIgbWFrZVVzZVZpc3VhbFN0YXRlID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgIHJldHVybiBmdW5jdGlvbiAocHJvcHMsIGlzU3RhdGljKSB7XG4gICAgICAgIHZhciBjb250ZXh0ID0gdXNlQ29udGV4dChNb3Rpb25Db250ZXh0KTtcbiAgICAgICAgdmFyIHByZXNlbmNlQ29udGV4dCA9IHVzZUNvbnRleHQoUHJlc2VuY2VDb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIGlzU3RhdGljXG4gICAgICAgICAgICA/IG1ha2VTdGF0ZShjb25maWcsIHByb3BzLCBjb250ZXh0LCBwcmVzZW5jZUNvbnRleHQpXG4gICAgICAgICAgICA6IHVzZUNvbnN0YW50KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVN0YXRlKGNvbmZpZywgcHJvcHMsIGNvbnRleHQsIHByZXNlbmNlQ29udGV4dCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9O1xufTtcbmZ1bmN0aW9uIG1ha2VMYXRlc3RWYWx1ZXMocHJvcHMsIGNvbnRleHQsIHByZXNlbmNlQ29udGV4dCwgc2NyYXBlTW90aW9uVmFsdWVzKSB7XG4gICAgdmFyIHZhbHVlcyA9IHt9O1xuICAgIHZhciBibG9ja0luaXRpYWxBbmltYXRpb24gPSAocHJlc2VuY2VDb250ZXh0ID09PSBudWxsIHx8IHByZXNlbmNlQ29udGV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJlc2VuY2VDb250ZXh0LmluaXRpYWwpID09PSBmYWxzZTtcbiAgICB2YXIgbW90aW9uVmFsdWVzID0gc2NyYXBlTW90aW9uVmFsdWVzKHByb3BzKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gbW90aW9uVmFsdWVzKSB7XG4gICAgICAgIHZhbHVlc1trZXldID0gcmVzb2x2ZU1vdGlvblZhbHVlKG1vdGlvblZhbHVlc1trZXldKTtcbiAgICB9XG4gICAgdmFyIGluaXRpYWwgPSBwcm9wcy5pbml0aWFsLCBhbmltYXRlID0gcHJvcHMuYW5pbWF0ZTtcbiAgICB2YXIgaXNDb250cm9sbGluZ1ZhcmlhbnRzID0gY2hlY2tJZkNvbnRyb2xsaW5nVmFyaWFudHMocHJvcHMpO1xuICAgIHZhciBpc1ZhcmlhbnROb2RlID0gY2hlY2tJZlZhcmlhbnROb2RlKHByb3BzKTtcbiAgICBpZiAoY29udGV4dCAmJlxuICAgICAgICBpc1ZhcmlhbnROb2RlICYmXG4gICAgICAgICFpc0NvbnRyb2xsaW5nVmFyaWFudHMgJiZcbiAgICAgICAgcHJvcHMuaW5oZXJpdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgaW5pdGlhbCAhPT0gbnVsbCAmJiBpbml0aWFsICE9PSB2b2lkIDAgPyBpbml0aWFsIDogKGluaXRpYWwgPSBjb250ZXh0LmluaXRpYWwpO1xuICAgICAgICBhbmltYXRlICE9PSBudWxsICYmIGFuaW1hdGUgIT09IHZvaWQgMCA/IGFuaW1hdGUgOiAoYW5pbWF0ZSA9IGNvbnRleHQuYW5pbWF0ZSk7XG4gICAgfVxuICAgIHZhciBpbml0aWFsQW5pbWF0aW9uSXNCbG9ja2VkID0gYmxvY2tJbml0aWFsQW5pbWF0aW9uIHx8IGluaXRpYWwgPT09IGZhbHNlO1xuICAgIHZhciB2YXJpYW50VG9TZXQgPSBpbml0aWFsQW5pbWF0aW9uSXNCbG9ja2VkID8gYW5pbWF0ZSA6IGluaXRpYWw7XG4gICAgaWYgKHZhcmlhbnRUb1NldCAmJlxuICAgICAgICB0eXBlb2YgdmFyaWFudFRvU2V0ICE9PSBcImJvb2xlYW5cIiAmJlxuICAgICAgICAhaXNBbmltYXRpb25Db250cm9scyh2YXJpYW50VG9TZXQpKSB7XG4gICAgICAgIHZhciBsaXN0ID0gQXJyYXkuaXNBcnJheSh2YXJpYW50VG9TZXQpID8gdmFyaWFudFRvU2V0IDogW3ZhcmlhbnRUb1NldF07XG4gICAgICAgIGxpc3QuZm9yRWFjaChmdW5jdGlvbiAoZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgdmFyIHJlc29sdmVkID0gcmVzb2x2ZVZhcmlhbnRGcm9tUHJvcHMocHJvcHMsIGRlZmluaXRpb24pO1xuICAgICAgICAgICAgaWYgKCFyZXNvbHZlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgdHJhbnNpdGlvbkVuZCA9IHJlc29sdmVkLnRyYW5zaXRpb25FbmQ7IHJlc29sdmVkLnRyYW5zaXRpb247IHZhciB0YXJnZXQgPSBfX3Jlc3QocmVzb2x2ZWQsIFtcInRyYW5zaXRpb25FbmRcIiwgXCJ0cmFuc2l0aW9uXCJdKTtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWVUYXJnZXQgPSB0YXJnZXRba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZVRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFRha2UgZmluYWwga2V5ZnJhbWUgaWYgdGhlIGluaXRpYWwgYW5pbWF0aW9uIGlzIGJsb2NrZWQgYmVjYXVzZVxuICAgICAgICAgICAgICAgICAgICAgKiB3ZSB3YW50IHRvIGluaXRpYWxpc2UgYXQgdGhlIGVuZCBvZiB0aGF0IGJsb2NrZWQgYW5pbWF0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gaW5pdGlhbEFuaW1hdGlvbklzQmxvY2tlZFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZVRhcmdldC5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXRbaW5kZXhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFsdWVUYXJnZXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW2tleV0gPSB2YWx1ZVRhcmdldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdHJhbnNpdGlvbkVuZClcbiAgICAgICAgICAgICAgICB2YWx1ZXNba2V5XSA9IHRyYW5zaXRpb25FbmRba2V5XTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG59XG5cbmV4cG9ydCB7IG1ha2VVc2VWaXN1YWxTdGF0ZSB9O1xuIiwiaW1wb3J0IHsgcmVuZGVyU1ZHIH0gZnJvbSAnLi91dGlscy9yZW5kZXIubWpzJztcbmltcG9ydCB7IHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyB9IGZyb20gJy4vdXRpbHMvc2NyYXBlLW1vdGlvbi12YWx1ZXMubWpzJztcbmltcG9ydCB7IG1ha2VVc2VWaXN1YWxTdGF0ZSB9IGZyb20gJy4uLy4uL21vdGlvbi91dGlscy91c2UtdmlzdWFsLXN0YXRlLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVTdmdSZW5kZXJTdGF0ZSB9IGZyb20gJy4vdXRpbHMvY3JlYXRlLXJlbmRlci1zdGF0ZS5tanMnO1xuaW1wb3J0IHsgYnVpbGRTVkdBdHRycyB9IGZyb20gJy4vdXRpbHMvYnVpbGQtYXR0cnMubWpzJztcblxudmFyIHN2Z01vdGlvbkNvbmZpZyA9IHtcbiAgICB1c2VWaXN1YWxTdGF0ZTogbWFrZVVzZVZpc3VhbFN0YXRlKHtcbiAgICAgICAgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzOiBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMsXG4gICAgICAgIGNyZWF0ZVJlbmRlclN0YXRlOiBjcmVhdGVTdmdSZW5kZXJTdGF0ZSxcbiAgICAgICAgb25Nb3VudDogZnVuY3Rpb24gKHByb3BzLCBpbnN0YW5jZSwgX2EpIHtcbiAgICAgICAgICAgIHZhciByZW5kZXJTdGF0ZSA9IF9hLnJlbmRlclN0YXRlLCBsYXRlc3RWYWx1ZXMgPSBfYS5sYXRlc3RWYWx1ZXM7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlbmRlclN0YXRlLmRpbWVuc2lvbnMgPVxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuZ2V0QkJveCA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpbnN0YW5jZS5nZXRCQm94KClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaW5zdGFuY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIE1vc3QgbGlrZWx5IHRyeWluZyB0byBtZWFzdXJlIGFuIHVucmVuZGVyZWQgZWxlbWVudCB1bmRlciBGaXJlZm94XG4gICAgICAgICAgICAgICAgcmVuZGVyU3RhdGUuZGltZW5zaW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVpbGRTVkdBdHRycyhyZW5kZXJTdGF0ZSwgbGF0ZXN0VmFsdWVzLCB7IGVuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiBmYWxzZSB9LCBwcm9wcy50cmFuc2Zvcm1UZW1wbGF0ZSk7XG4gICAgICAgICAgICByZW5kZXJTVkcoaW5zdGFuY2UsIHJlbmRlclN0YXRlKTtcbiAgICAgICAgfSxcbiAgICB9KSxcbn07XG5cbmV4cG9ydCB7IHN2Z01vdGlvbkNvbmZpZyB9O1xuIiwidmFyIEFuaW1hdGlvblR5cGU7XG4oZnVuY3Rpb24gKEFuaW1hdGlvblR5cGUpIHtcbiAgICBBbmltYXRpb25UeXBlW1wiQW5pbWF0ZVwiXSA9IFwiYW5pbWF0ZVwiO1xuICAgIEFuaW1hdGlvblR5cGVbXCJIb3ZlclwiXSA9IFwid2hpbGVIb3ZlclwiO1xuICAgIEFuaW1hdGlvblR5cGVbXCJUYXBcIl0gPSBcIndoaWxlVGFwXCI7XG4gICAgQW5pbWF0aW9uVHlwZVtcIkRyYWdcIl0gPSBcIndoaWxlRHJhZ1wiO1xuICAgIEFuaW1hdGlvblR5cGVbXCJGb2N1c1wiXSA9IFwid2hpbGVGb2N1c1wiO1xuICAgIEFuaW1hdGlvblR5cGVbXCJJblZpZXdcIl0gPSBcIndoaWxlSW5WaWV3XCI7XG4gICAgQW5pbWF0aW9uVHlwZVtcIkV4aXRcIl0gPSBcImV4aXRcIjtcbn0pKEFuaW1hdGlvblR5cGUgfHwgKEFuaW1hdGlvblR5cGUgPSB7fSkpO1xuXG5leHBvcnQgeyBBbmltYXRpb25UeXBlIH07XG4iLCJpbXBvcnQgeyBtYWtlVXNlVmlzdWFsU3RhdGUgfSBmcm9tICcuLi8uLi9tb3Rpb24vdXRpbHMvdXNlLXZpc3VhbC1zdGF0ZS5tanMnO1xuaW1wb3J0IHsgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzIH0gZnJvbSAnLi91dGlscy9zY3JhcGUtbW90aW9uLXZhbHVlcy5tanMnO1xuaW1wb3J0IHsgY3JlYXRlSHRtbFJlbmRlclN0YXRlIH0gZnJvbSAnLi91dGlscy9jcmVhdGUtcmVuZGVyLXN0YXRlLm1qcyc7XG5cbnZhciBodG1sTW90aW9uQ29uZmlnID0ge1xuICAgIHVzZVZpc3VhbFN0YXRlOiBtYWtlVXNlVmlzdWFsU3RhdGUoe1xuICAgICAgICBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6IHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyxcbiAgICAgICAgY3JlYXRlUmVuZGVyU3RhdGU6IGNyZWF0ZUh0bWxSZW5kZXJTdGF0ZSxcbiAgICB9KSxcbn07XG5cbmV4cG9ydCB7IGh0bWxNb3Rpb25Db25maWcgfTtcbiIsImltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gYWRkRG9tRXZlbnQodGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7IHBhc3NpdmU6IHRydWUgfTsgfVxuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgaGFuZGxlcik7IH07XG59XG4vKipcbiAqIEF0dGFjaGVzIGFuIGV2ZW50IGxpc3RlbmVyIGRpcmVjdGx5IHRvIHRoZSBwcm92aWRlZCBET00gZWxlbWVudC5cbiAqXG4gKiBCeXBhc3NpbmcgUmVhY3QncyBldmVudCBzeXN0ZW0gY2FuIGJlIGRlc2lyYWJsZSwgZm9yIGluc3RhbmNlIHdoZW4gYXR0YWNoaW5nIG5vbi1wYXNzaXZlXG4gKiBldmVudCBoYW5kbGVycy5cbiAqXG4gKiBgYGBqc3hcbiAqIGNvbnN0IHJlZiA9IHVzZVJlZihudWxsKVxuICpcbiAqIHVzZURvbUV2ZW50KHJlZiwgJ3doZWVsJywgb25XaGVlbCwgeyBwYXNzaXZlOiBmYWxzZSB9KVxuICpcbiAqIHJldHVybiA8ZGl2IHJlZj17cmVmfSAvPlxuICogYGBgXG4gKlxuICogQHBhcmFtIHJlZiAtIFJlYWN0LlJlZk9iamVjdCB0aGF0J3MgYmVlbiBwcm92aWRlZCB0byB0aGUgZWxlbWVudCB5b3Ugd2FudCB0byBiaW5kIHRoZSBsaXN0ZW5lciB0by5cbiAqIEBwYXJhbSBldmVudE5hbWUgLSBOYW1lIG9mIHRoZSBldmVudCB5b3Ugd2FudCBsaXN0ZW4gZm9yLlxuICogQHBhcmFtIGhhbmRsZXIgLSBGdW5jdGlvbiB0byBmaXJlIHdoZW4gcmVjZWl2aW5nIHRoZSBldmVudC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIGBFdmVudC5hZGRFdmVudExpc3RlbmVyYC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIHVzZURvbUV2ZW50KHJlZiwgZXZlbnROYW1lLCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSByZWYuY3VycmVudDtcbiAgICAgICAgaWYgKGhhbmRsZXIgJiYgZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGFkZERvbUV2ZW50KGVsZW1lbnQsIGV2ZW50TmFtZSwgaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9LCBbcmVmLCBldmVudE5hbWUsIGhhbmRsZXIsIG9wdGlvbnNdKTtcbn1cblxuZXhwb3J0IHsgYWRkRG9tRXZlbnQsIHVzZURvbUV2ZW50IH07XG4iLCJmdW5jdGlvbiBpc01vdXNlRXZlbnQoZXZlbnQpIHtcbiAgICAvLyBQb2ludGVyRXZlbnQgaW5oZXJpdHMgZnJvbSBNb3VzZUV2ZW50IHNvIHdlIGNhbid0IHVzZSBhIHN0cmFpZ2h0IGluc3RhbmNlb2YgY2hlY2suXG4gICAgaWYgKHR5cGVvZiBQb2ludGVyRXZlbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgZXZlbnQgaW5zdGFuY2VvZiBQb2ludGVyRXZlbnQpIHtcbiAgICAgICAgcmV0dXJuICEhKGV2ZW50LnBvaW50ZXJUeXBlID09PSBcIm1vdXNlXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50O1xufVxuZnVuY3Rpb24gaXNUb3VjaEV2ZW50KGV2ZW50KSB7XG4gICAgdmFyIGhhc1RvdWNoZXMgPSAhIWV2ZW50LnRvdWNoZXM7XG4gICAgcmV0dXJuIGhhc1RvdWNoZXM7XG59XG5cbmV4cG9ydCB7IGlzTW91c2VFdmVudCwgaXNUb3VjaEV2ZW50IH07XG4iLCJpbXBvcnQgeyBpc1RvdWNoRXZlbnQgfSBmcm9tICcuLi9nZXN0dXJlcy91dGlscy9ldmVudC10eXBlLm1qcyc7XG5cbi8qKlxuICogRmlsdGVycyBvdXQgZXZlbnRzIG5vdCBhdHRhY2hlZCB0byB0aGUgcHJpbWFyeSBwb2ludGVyIChjdXJyZW50bHkgbGVmdCBtb3VzZSBidXR0b24pXG4gKiBAcGFyYW0gZXZlbnRIYW5kbGVyXG4gKi9cbmZ1bmN0aW9uIGZpbHRlclByaW1hcnlQb2ludGVyKGV2ZW50SGFuZGxlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIGlzTW91c2VFdmVudCA9IGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudDtcbiAgICAgICAgdmFyIGlzUHJpbWFyeVBvaW50ZXIgPSAhaXNNb3VzZUV2ZW50IHx8XG4gICAgICAgICAgICAoaXNNb3VzZUV2ZW50ICYmIGV2ZW50LmJ1dHRvbiA9PT0gMCk7XG4gICAgICAgIGlmIChpc1ByaW1hcnlQb2ludGVyKSB7XG4gICAgICAgICAgICBldmVudEhhbmRsZXIoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbnZhciBkZWZhdWx0UGFnZVBvaW50ID0geyBwYWdlWDogMCwgcGFnZVk6IDAgfTtcbmZ1bmN0aW9uIHBvaW50RnJvbVRvdWNoKGUsIHBvaW50VHlwZSkge1xuICAgIGlmIChwb2ludFR5cGUgPT09IHZvaWQgMCkgeyBwb2ludFR5cGUgPSBcInBhZ2VcIjsgfVxuICAgIHZhciBwcmltYXJ5VG91Y2ggPSBlLnRvdWNoZXNbMF0gfHwgZS5jaGFuZ2VkVG91Y2hlc1swXTtcbiAgICB2YXIgcG9pbnQgPSBwcmltYXJ5VG91Y2ggfHwgZGVmYXVsdFBhZ2VQb2ludDtcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiBwb2ludFtwb2ludFR5cGUgKyBcIlhcIl0sXG4gICAgICAgIHk6IHBvaW50W3BvaW50VHlwZSArIFwiWVwiXSxcbiAgICB9O1xufVxuZnVuY3Rpb24gcG9pbnRGcm9tTW91c2UocG9pbnQsIHBvaW50VHlwZSkge1xuICAgIGlmIChwb2ludFR5cGUgPT09IHZvaWQgMCkgeyBwb2ludFR5cGUgPSBcInBhZ2VcIjsgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHBvaW50W3BvaW50VHlwZSArIFwiWFwiXSxcbiAgICAgICAgeTogcG9pbnRbcG9pbnRUeXBlICsgXCJZXCJdLFxuICAgIH07XG59XG5mdW5jdGlvbiBleHRyYWN0RXZlbnRJbmZvKGV2ZW50LCBwb2ludFR5cGUpIHtcbiAgICBpZiAocG9pbnRUeXBlID09PSB2b2lkIDApIHsgcG9pbnRUeXBlID0gXCJwYWdlXCI7IH1cbiAgICByZXR1cm4ge1xuICAgICAgICBwb2ludDogaXNUb3VjaEV2ZW50KGV2ZW50KVxuICAgICAgICAgICAgPyBwb2ludEZyb21Ub3VjaChldmVudCwgcG9pbnRUeXBlKVxuICAgICAgICAgICAgOiBwb2ludEZyb21Nb3VzZShldmVudCwgcG9pbnRUeXBlKSxcbiAgICB9O1xufVxudmFyIHdyYXBIYW5kbGVyID0gZnVuY3Rpb24gKGhhbmRsZXIsIHNob3VsZEZpbHRlclByaW1hcnlQb2ludGVyKSB7XG4gICAgaWYgKHNob3VsZEZpbHRlclByaW1hcnlQb2ludGVyID09PSB2b2lkIDApIHsgc2hvdWxkRmlsdGVyUHJpbWFyeVBvaW50ZXIgPSBmYWxzZTsgfVxuICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICByZXR1cm4gaGFuZGxlcihldmVudCwgZXh0cmFjdEV2ZW50SW5mbyhldmVudCkpO1xuICAgIH07XG4gICAgcmV0dXJuIHNob3VsZEZpbHRlclByaW1hcnlQb2ludGVyXG4gICAgICAgID8gZmlsdGVyUHJpbWFyeVBvaW50ZXIobGlzdGVuZXIpXG4gICAgICAgIDogbGlzdGVuZXI7XG59O1xuXG5leHBvcnQgeyBleHRyYWN0RXZlbnRJbmZvLCB3cmFwSGFuZGxlciB9O1xuIiwiaW1wb3J0IHsgaXNCcm93c2VyIH0gZnJvbSAnLi4vdXRpbHMvaXMtYnJvd3Nlci5tanMnO1xuXG4vLyBXZSBjaGVjayBmb3IgZXZlbnQgc3VwcG9ydCB2aWEgZnVuY3Rpb25zIGluIGNhc2UgdGhleSd2ZSBiZWVuIG1vY2tlZCBieSBhIHRlc3Rpbmcgc3VpdGUuXG52YXIgc3VwcG9ydHNQb2ludGVyRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpc0Jyb3dzZXIgJiYgd2luZG93Lm9ucG9pbnRlcmRvd24gPT09IG51bGw7XG59O1xudmFyIHN1cHBvcnRzVG91Y2hFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGlzQnJvd3NlciAmJiB3aW5kb3cub250b3VjaHN0YXJ0ID09PSBudWxsO1xufTtcbnZhciBzdXBwb3J0c01vdXNlRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpc0Jyb3dzZXIgJiYgd2luZG93Lm9ubW91c2Vkb3duID09PSBudWxsO1xufTtcblxuZXhwb3J0IHsgc3VwcG9ydHNNb3VzZUV2ZW50cywgc3VwcG9ydHNQb2ludGVyRXZlbnRzLCBzdXBwb3J0c1RvdWNoRXZlbnRzIH07XG4iLCJpbXBvcnQgeyBhZGREb21FdmVudCwgdXNlRG9tRXZlbnQgfSBmcm9tICcuL3VzZS1kb20tZXZlbnQubWpzJztcbmltcG9ydCB7IHdyYXBIYW5kbGVyIH0gZnJvbSAnLi9ldmVudC1pbmZvLm1qcyc7XG5pbXBvcnQgeyBzdXBwb3J0c1BvaW50ZXJFdmVudHMsIHN1cHBvcnRzVG91Y2hFdmVudHMsIHN1cHBvcnRzTW91c2VFdmVudHMgfSBmcm9tICcuL3V0aWxzLm1qcyc7XG5cbnZhciBtb3VzZUV2ZW50TmFtZXMgPSB7XG4gICAgcG9pbnRlcmRvd246IFwibW91c2Vkb3duXCIsXG4gICAgcG9pbnRlcm1vdmU6IFwibW91c2Vtb3ZlXCIsXG4gICAgcG9pbnRlcnVwOiBcIm1vdXNldXBcIixcbiAgICBwb2ludGVyY2FuY2VsOiBcIm1vdXNlY2FuY2VsXCIsXG4gICAgcG9pbnRlcm92ZXI6IFwibW91c2VvdmVyXCIsXG4gICAgcG9pbnRlcm91dDogXCJtb3VzZW91dFwiLFxuICAgIHBvaW50ZXJlbnRlcjogXCJtb3VzZWVudGVyXCIsXG4gICAgcG9pbnRlcmxlYXZlOiBcIm1vdXNlbGVhdmVcIixcbn07XG52YXIgdG91Y2hFdmVudE5hbWVzID0ge1xuICAgIHBvaW50ZXJkb3duOiBcInRvdWNoc3RhcnRcIixcbiAgICBwb2ludGVybW92ZTogXCJ0b3VjaG1vdmVcIixcbiAgICBwb2ludGVydXA6IFwidG91Y2hlbmRcIixcbiAgICBwb2ludGVyY2FuY2VsOiBcInRvdWNoY2FuY2VsXCIsXG59O1xuZnVuY3Rpb24gZ2V0UG9pbnRlckV2ZW50TmFtZShuYW1lKSB7XG4gICAgaWYgKHN1cHBvcnRzUG9pbnRlckV2ZW50cygpKSB7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICBlbHNlIGlmIChzdXBwb3J0c1RvdWNoRXZlbnRzKCkpIHtcbiAgICAgICAgcmV0dXJuIHRvdWNoRXZlbnROYW1lc1tuYW1lXTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc3VwcG9ydHNNb3VzZUV2ZW50cygpKSB7XG4gICAgICAgIHJldHVybiBtb3VzZUV2ZW50TmFtZXNbbmFtZV07XG4gICAgfVxuICAgIHJldHVybiBuYW1lO1xufVxuZnVuY3Rpb24gYWRkUG9pbnRlckV2ZW50KHRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGFkZERvbUV2ZW50KHRhcmdldCwgZ2V0UG9pbnRlckV2ZW50TmFtZShldmVudE5hbWUpLCB3cmFwSGFuZGxlcihoYW5kbGVyLCBldmVudE5hbWUgPT09IFwicG9pbnRlcmRvd25cIiksIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gdXNlUG9pbnRlckV2ZW50KHJlZiwgZXZlbnROYW1lLCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHVzZURvbUV2ZW50KHJlZiwgZ2V0UG9pbnRlckV2ZW50TmFtZShldmVudE5hbWUpLCBoYW5kbGVyICYmIHdyYXBIYW5kbGVyKGhhbmRsZXIsIGV2ZW50TmFtZSA9PT0gXCJwb2ludGVyZG93blwiKSwgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCB7IGFkZFBvaW50ZXJFdmVudCwgdXNlUG9pbnRlckV2ZW50IH07XG4iLCJmdW5jdGlvbiBjcmVhdGVMb2NrKG5hbWUpIHtcbiAgICB2YXIgbG9jayA9IG51bGw7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9wZW5Mb2NrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbG9jayA9IG51bGw7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChsb2NrID09PSBudWxsKSB7XG4gICAgICAgICAgICBsb2NrID0gbmFtZTtcbiAgICAgICAgICAgIHJldHVybiBvcGVuTG9jaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbn1cbnZhciBnbG9iYWxIb3Jpem9udGFsTG9jayA9IGNyZWF0ZUxvY2soXCJkcmFnSG9yaXpvbnRhbFwiKTtcbnZhciBnbG9iYWxWZXJ0aWNhbExvY2sgPSBjcmVhdGVMb2NrKFwiZHJhZ1ZlcnRpY2FsXCIpO1xuZnVuY3Rpb24gZ2V0R2xvYmFsTG9jayhkcmFnKSB7XG4gICAgdmFyIGxvY2sgPSBmYWxzZTtcbiAgICBpZiAoZHJhZyA9PT0gXCJ5XCIpIHtcbiAgICAgICAgbG9jayA9IGdsb2JhbFZlcnRpY2FsTG9jaygpO1xuICAgIH1cbiAgICBlbHNlIGlmIChkcmFnID09PSBcInhcIikge1xuICAgICAgICBsb2NrID0gZ2xvYmFsSG9yaXpvbnRhbExvY2soKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBvcGVuSG9yaXpvbnRhbF8xID0gZ2xvYmFsSG9yaXpvbnRhbExvY2soKTtcbiAgICAgICAgdmFyIG9wZW5WZXJ0aWNhbF8xID0gZ2xvYmFsVmVydGljYWxMb2NrKCk7XG4gICAgICAgIGlmIChvcGVuSG9yaXpvbnRhbF8xICYmIG9wZW5WZXJ0aWNhbF8xKSB7XG4gICAgICAgICAgICBsb2NrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIG9wZW5Ib3Jpem9udGFsXzEoKTtcbiAgICAgICAgICAgICAgICBvcGVuVmVydGljYWxfMSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFJlbGVhc2UgdGhlIGxvY2tzIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZW1cbiAgICAgICAgICAgIGlmIChvcGVuSG9yaXpvbnRhbF8xKVxuICAgICAgICAgICAgICAgIG9wZW5Ib3Jpem9udGFsXzEoKTtcbiAgICAgICAgICAgIGlmIChvcGVuVmVydGljYWxfMSlcbiAgICAgICAgICAgICAgICBvcGVuVmVydGljYWxfMSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsb2NrO1xufVxuZnVuY3Rpb24gaXNEcmFnQWN0aXZlKCkge1xuICAgIC8vIENoZWNrIHRoZSBnZXN0dXJlIGxvY2sgLSBpZiB3ZSBnZXQgaXQsIGl0IG1lYW5zIG5vIGRyYWcgZ2VzdHVyZSBpcyBhY3RpdmVcbiAgICAvLyBhbmQgd2UgY2FuIHNhZmVseSBmaXJlIHRoZSB0YXAgZ2VzdHVyZS5cbiAgICB2YXIgb3Blbkdlc3R1cmVMb2NrID0gZ2V0R2xvYmFsTG9jayh0cnVlKTtcbiAgICBpZiAoIW9wZW5HZXN0dXJlTG9jaylcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgb3Blbkdlc3R1cmVMb2NrKCk7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgeyBjcmVhdGVMb2NrLCBnZXRHbG9iYWxMb2NrLCBpc0RyYWdBY3RpdmUgfTtcbiIsImltcG9ydCB7IGlzTW91c2VFdmVudCB9IGZyb20gJy4vdXRpbHMvZXZlbnQtdHlwZS5tanMnO1xuaW1wb3J0IHsgQW5pbWF0aW9uVHlwZSB9IGZyb20gJy4uL3JlbmRlci91dGlscy90eXBlcy5tanMnO1xuaW1wb3J0IHsgdXNlUG9pbnRlckV2ZW50IH0gZnJvbSAnLi4vZXZlbnRzL3VzZS1wb2ludGVyLWV2ZW50Lm1qcyc7XG5pbXBvcnQgeyBpc0RyYWdBY3RpdmUgfSBmcm9tICcuL2RyYWcvdXRpbHMvbG9jay5tanMnO1xuXG5mdW5jdGlvbiBjcmVhdGVIb3ZlckV2ZW50KHZpc3VhbEVsZW1lbnQsIGlzQWN0aXZlLCBjYWxsYmFjaykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQsIGluZm8pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIWlzTW91c2VFdmVudChldmVudCkgfHwgaXNEcmFnQWN0aXZlKCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFbnN1cmUgd2UgdHJpZ2dlciBhbmltYXRpb25zIGJlZm9yZSBmaXJpbmcgZXZlbnQgY2FsbGJhY2tcbiAgICAgICAgICovXG4gICAgICAgIChfYSA9IHZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZXRBY3RpdmUoQW5pbWF0aW9uVHlwZS5Ib3ZlciwgaXNBY3RpdmUpO1xuICAgICAgICBjYWxsYmFjayA9PT0gbnVsbCB8fCBjYWxsYmFjayA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FsbGJhY2soZXZlbnQsIGluZm8pO1xuICAgIH07XG59XG5mdW5jdGlvbiB1c2VIb3Zlckdlc3R1cmUoX2EpIHtcbiAgICB2YXIgb25Ib3ZlclN0YXJ0ID0gX2Eub25Ib3ZlclN0YXJ0LCBvbkhvdmVyRW5kID0gX2Eub25Ib3ZlckVuZCwgd2hpbGVIb3ZlciA9IF9hLndoaWxlSG92ZXIsIHZpc3VhbEVsZW1lbnQgPSBfYS52aXN1YWxFbGVtZW50O1xuICAgIHVzZVBvaW50ZXJFdmVudCh2aXN1YWxFbGVtZW50LCBcInBvaW50ZXJlbnRlclwiLCBvbkhvdmVyU3RhcnQgfHwgd2hpbGVIb3ZlclxuICAgICAgICA/IGNyZWF0ZUhvdmVyRXZlbnQodmlzdWFsRWxlbWVudCwgdHJ1ZSwgb25Ib3ZlclN0YXJ0KVxuICAgICAgICA6IHVuZGVmaW5lZCwgeyBwYXNzaXZlOiAhb25Ib3ZlclN0YXJ0IH0pO1xuICAgIHVzZVBvaW50ZXJFdmVudCh2aXN1YWxFbGVtZW50LCBcInBvaW50ZXJsZWF2ZVwiLCBvbkhvdmVyRW5kIHx8IHdoaWxlSG92ZXJcbiAgICAgICAgPyBjcmVhdGVIb3ZlckV2ZW50KHZpc3VhbEVsZW1lbnQsIGZhbHNlLCBvbkhvdmVyRW5kKVxuICAgICAgICA6IHVuZGVmaW5lZCwgeyBwYXNzaXZlOiAhb25Ib3ZlckVuZCB9KTtcbn1cblxuZXhwb3J0IHsgdXNlSG92ZXJHZXN0dXJlIH07XG4iLCIvKipcbiAqIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIHVwIHRoZSB0cmVlIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGNoaWxkIG5vZGVcbiAqIGlzIHRoZSBwYXJlbnQgb3IgYSBkZXNjZW5kYW50IG9mIGl0LlxuICpcbiAqIEBwYXJhbSBwYXJlbnQgLSBFbGVtZW50IHRvIGZpbmRcbiAqIEBwYXJhbSBjaGlsZCAtIEVsZW1lbnQgdG8gdGVzdCBhZ2FpbnN0IHBhcmVudFxuICovXG52YXIgaXNOb2RlT3JDaGlsZCA9IGZ1bmN0aW9uIChwYXJlbnQsIGNoaWxkKSB7XG4gICAgaWYgKCFjaGlsZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKHBhcmVudCA9PT0gY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gaXNOb2RlT3JDaGlsZChwYXJlbnQsIGNoaWxkLnBhcmVudEVsZW1lbnQpO1xuICAgIH1cbn07XG5cbmV4cG9ydCB7IGlzTm9kZU9yQ2hpbGQgfTtcbiIsImNvbnN0IGNvbWJpbmVGdW5jdGlvbnMgPSAoYSwgYikgPT4gKHYpID0+IGIoYSh2KSk7XG5jb25zdCBwaXBlID0gKC4uLnRyYW5zZm9ybWVycykgPT4gdHJhbnNmb3JtZXJzLnJlZHVjZShjb21iaW5lRnVuY3Rpb25zKTtcblxuZXhwb3J0IHsgcGlwZSB9O1xuIiwidmFyIHdhcm5lZCA9IG5ldyBTZXQoKTtcbmZ1bmN0aW9uIHdhcm5PbmNlKGNvbmRpdGlvbiwgbWVzc2FnZSwgZWxlbWVudCkge1xuICAgIGlmIChjb25kaXRpb24gfHwgd2FybmVkLmhhcyhtZXNzYWdlKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICBpZiAoZWxlbWVudClcbiAgICAgICAgY29uc29sZS53YXJuKGVsZW1lbnQpO1xuICAgIHdhcm5lZC5hZGQobWVzc2FnZSk7XG59XG5cbmV4cG9ydCB7IHdhcm5PbmNlIH07XG4iLCJpbXBvcnQgeyBfX3Jlc3QsIF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuXG4vKipcbiAqIE1hcCBhbiBJbnRlcnNlY3Rpb25IYW5kbGVyIGNhbGxiYWNrIHRvIGFuIGVsZW1lbnQuIFdlIG9ubHkgZXZlciBtYWtlIG9uZSBoYW5kbGVyIGZvciBvbmVcbiAqIGVsZW1lbnQsIHNvIGV2ZW4gdGhvdWdoIHRoZXNlIGhhbmRsZXJzIG1pZ2h0IGFsbCBiZSB0cmlnZ2VyZWQgYnkgZGlmZmVyZW50XG4gKiBvYnNlcnZlcnMsIHdlIGNhbiBrZWVwIHRoZW0gaW4gdGhlIHNhbWUgbWFwLlxuICovXG52YXIgb2JzZXJ2ZXJDYWxsYmFja3MgPSBuZXcgV2Vha01hcCgpO1xuLyoqXG4gKiBNdWx0aXBsZSBvYnNlcnZlcnMgY2FuIGJlIGNyZWF0ZWQgZm9yIG11bHRpcGxlIGVsZW1lbnQvZG9jdW1lbnQgcm9vdHMuIEVhY2ggd2l0aFxuICogZGlmZmVyZW50IHNldHRpbmdzLiBTbyBoZXJlIHdlIHN0b3JlIGRpY3Rpb25hcmllcyBvZiBvYnNlcnZlcnMgdG8gZWFjaCByb290LFxuICogdXNpbmcgc2VyaWFsaXNlZCBzZXR0aW5ncyAodGhyZXNob2xkL21hcmdpbikgYXMgbG9va3VwIGtleXMuXG4gKi9cbnZhciBvYnNlcnZlcnMgPSBuZXcgV2Vha01hcCgpO1xudmFyIGZpcmVPYnNlcnZlckNhbGxiYWNrID0gZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgdmFyIF9hO1xuICAgIChfYSA9IG9ic2VydmVyQ2FsbGJhY2tzLmdldChlbnRyeS50YXJnZXQpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EoZW50cnkpO1xufTtcbnZhciBmaXJlQWxsT2JzZXJ2ZXJDYWxsYmFja3MgPSBmdW5jdGlvbiAoZW50cmllcykge1xuICAgIGVudHJpZXMuZm9yRWFjaChmaXJlT2JzZXJ2ZXJDYWxsYmFjayk7XG59O1xuZnVuY3Rpb24gaW5pdEludGVyc2VjdGlvbk9ic2VydmVyKF9hKSB7XG4gICAgdmFyIHJvb3QgPSBfYS5yb290LCBvcHRpb25zID0gX19yZXN0KF9hLCBbXCJyb290XCJdKTtcbiAgICB2YXIgbG9va3VwUm9vdCA9IHJvb3QgfHwgZG9jdW1lbnQ7XG4gICAgLyoqXG4gICAgICogSWYgd2UgZG9uJ3QgaGF2ZSBhbiBvYnNlcnZlciBsb29rdXAgbWFwIGZvciB0aGlzIHJvb3QsIGNyZWF0ZSBvbmUuXG4gICAgICovXG4gICAgaWYgKCFvYnNlcnZlcnMuaGFzKGxvb2t1cFJvb3QpKSB7XG4gICAgICAgIG9ic2VydmVycy5zZXQobG9va3VwUm9vdCwge30pO1xuICAgIH1cbiAgICB2YXIgcm9vdE9ic2VydmVycyA9IG9ic2VydmVycy5nZXQobG9va3VwUm9vdCk7XG4gICAgdmFyIGtleSA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpO1xuICAgIC8qKlxuICAgICAqIElmIHdlIGRvbid0IGhhdmUgYW4gb2JzZXJ2ZXIgZm9yIHRoaXMgY29tYmluYXRpb24gb2Ygcm9vdCBhbmQgc2V0dGluZ3MsXG4gICAgICogY3JlYXRlIG9uZS5cbiAgICAgKi9cbiAgICBpZiAoIXJvb3RPYnNlcnZlcnNba2V5XSkge1xuICAgICAgICByb290T2JzZXJ2ZXJzW2tleV0gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZmlyZUFsbE9ic2VydmVyQ2FsbGJhY2tzLCBfX2Fzc2lnbih7IHJvb3Q6IHJvb3QgfSwgb3B0aW9ucykpO1xuICAgIH1cbiAgICByZXR1cm4gcm9vdE9ic2VydmVyc1trZXldO1xufVxuZnVuY3Rpb24gb2JzZXJ2ZUludGVyc2VjdGlvbihlbGVtZW50LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgIHZhciByb290SW50ZXJlc2VjdGlvbk9ic2VydmVyID0gaW5pdEludGVyc2VjdGlvbk9ic2VydmVyKG9wdGlvbnMpO1xuICAgIG9ic2VydmVyQ2FsbGJhY2tzLnNldChlbGVtZW50LCBjYWxsYmFjayk7XG4gICAgcm9vdEludGVyZXNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9ic2VydmVyQ2FsbGJhY2tzLmRlbGV0ZShlbGVtZW50KTtcbiAgICAgICAgcm9vdEludGVyZXNlY3Rpb25PYnNlcnZlci51bm9ic2VydmUoZWxlbWVudCk7XG4gICAgfTtcbn1cblxuZXhwb3J0IHsgb2JzZXJ2ZUludGVyc2VjdGlvbiB9O1xuIiwiaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcHJvY2Vzcy5tanMnO1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBBbmltYXRpb25UeXBlIH0gZnJvbSAnLi4vLi4vLi4vcmVuZGVyL3V0aWxzL3R5cGVzLm1qcyc7XG5pbXBvcnQgeyB3YXJuT25jZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3dhcm4tb25jZS5tanMnO1xuaW1wb3J0IHsgb2JzZXJ2ZUludGVyc2VjdGlvbiB9IGZyb20gJy4vb2JzZXJ2ZXJzLm1qcyc7XG5cbmZ1bmN0aW9uIHVzZVZpZXdwb3J0KF9hKSB7XG4gICAgdmFyIHZpc3VhbEVsZW1lbnQgPSBfYS52aXN1YWxFbGVtZW50LCB3aGlsZUluVmlldyA9IF9hLndoaWxlSW5WaWV3LCBvblZpZXdwb3J0RW50ZXIgPSBfYS5vblZpZXdwb3J0RW50ZXIsIG9uVmlld3BvcnRMZWF2ZSA9IF9hLm9uVmlld3BvcnRMZWF2ZSwgX2IgPSBfYS52aWV3cG9ydCwgdmlld3BvcnQgPSBfYiA9PT0gdm9pZCAwID8ge30gOiBfYjtcbiAgICB2YXIgc3RhdGUgPSB1c2VSZWYoe1xuICAgICAgICBoYXNFbnRlcmVkVmlldzogZmFsc2UsXG4gICAgICAgIGlzSW5WaWV3OiBmYWxzZSxcbiAgICB9KTtcbiAgICB2YXIgc2hvdWxkT2JzZXJ2ZSA9IEJvb2xlYW4od2hpbGVJblZpZXcgfHwgb25WaWV3cG9ydEVudGVyIHx8IG9uVmlld3BvcnRMZWF2ZSk7XG4gICAgaWYgKHZpZXdwb3J0Lm9uY2UgJiYgc3RhdGUuY3VycmVudC5oYXNFbnRlcmVkVmlldylcbiAgICAgICAgc2hvdWxkT2JzZXJ2ZSA9IGZhbHNlO1xuICAgIHZhciB1c2VPYnNlcnZlciA9IHR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlciA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IHVzZU1pc3NpbmdJbnRlcnNlY3Rpb25PYnNlcnZlclxuICAgICAgICA6IHVzZUludGVyc2VjdGlvbk9ic2VydmVyO1xuICAgIHVzZU9ic2VydmVyKHNob3VsZE9ic2VydmUsIHN0YXRlLmN1cnJlbnQsIHZpc3VhbEVsZW1lbnQsIHZpZXdwb3J0KTtcbn1cbnZhciB0aHJlc2hvbGROYW1lcyA9IHtcbiAgICBzb21lOiAwLFxuICAgIGFsbDogMSxcbn07XG5mdW5jdGlvbiB1c2VJbnRlcnNlY3Rpb25PYnNlcnZlcihzaG91bGRPYnNlcnZlLCBzdGF0ZSwgdmlzdWFsRWxlbWVudCwgX2EpIHtcbiAgICB2YXIgcm9vdCA9IF9hLnJvb3QsIHJvb3RNYXJnaW4gPSBfYS5tYXJnaW4sIF9iID0gX2EuYW1vdW50LCBhbW91bnQgPSBfYiA9PT0gdm9pZCAwID8gXCJzb21lXCIgOiBfYiwgb25jZSA9IF9hLm9uY2U7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFzaG91bGRPYnNlcnZlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHJvb3Q6IHJvb3QgPT09IG51bGwgfHwgcm9vdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcm9vdC5jdXJyZW50LFxuICAgICAgICAgICAgcm9vdE1hcmdpbjogcm9vdE1hcmdpbixcbiAgICAgICAgICAgIHRocmVzaG9sZDogdHlwZW9mIGFtb3VudCA9PT0gXCJudW1iZXJcIiA/IGFtb3VudCA6IHRocmVzaG9sZE5hbWVzW2Ftb3VudF0sXG4gICAgICAgIH07XG4gICAgICAgIHZhciBpbnRlcnNlY3Rpb25DYWxsYmFjayA9IGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdmFyIGlzSW50ZXJzZWN0aW5nID0gZW50cnkuaXNJbnRlcnNlY3Rpbmc7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHRoZXJlJ3MgYmVlbiBubyBjaGFuZ2UgaW4gdGhlIHZpZXdwb3J0IHN0YXRlLCBlYXJseSByZXR1cm4uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChzdGF0ZS5pc0luVmlldyA9PT0gaXNJbnRlcnNlY3RpbmcpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgc3RhdGUuaXNJblZpZXcgPSBpc0ludGVyc2VjdGluZztcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSGFuZGxlIGhhc0VudGVyZWRWaWV3LiBJZiB0aGlzIGlzIG9ubHkgbWVhbnQgdG8gcnVuIG9uY2UsIGFuZFxuICAgICAgICAgICAgICogZWxlbWVudCBpc24ndCB2aXNpYmxlLCBlYXJseSByZXR1cm4uIE90aGVyd2lzZSBzZXQgaGFzRW50ZXJlZFZpZXcgdG8gdHJ1ZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKG9uY2UgJiYgIWlzSW50ZXJzZWN0aW5nICYmIHN0YXRlLmhhc0VudGVyZWRWaWV3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5oYXNFbnRlcmVkVmlldyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAoX2EgPSB2aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2V0QWN0aXZlKEFuaW1hdGlvblR5cGUuSW5WaWV3LCBpc0ludGVyc2VjdGluZyk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFVzZSB0aGUgbGF0ZXN0IGNvbW1pdHRlZCBwcm9wcyByYXRoZXIgdGhhbiB0aGUgb25lcyBpbiBzY29wZVxuICAgICAgICAgICAgICogd2hlbiB0aGlzIG9ic2VydmVyIGlzIGNyZWF0ZWRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyIHByb3BzID0gdmlzdWFsRWxlbWVudC5nZXRQcm9wcygpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gaXNJbnRlcnNlY3RpbmdcbiAgICAgICAgICAgICAgICA/IHByb3BzLm9uVmlld3BvcnRFbnRlclxuICAgICAgICAgICAgICAgIDogcHJvcHMub25WaWV3cG9ydExlYXZlO1xuICAgICAgICAgICAgY2FsbGJhY2sgPT09IG51bGwgfHwgY2FsbGJhY2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhbGxiYWNrKGVudHJ5KTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG9ic2VydmVJbnRlcnNlY3Rpb24odmlzdWFsRWxlbWVudC5nZXRJbnN0YW5jZSgpLCBvcHRpb25zLCBpbnRlcnNlY3Rpb25DYWxsYmFjayk7XG4gICAgfSwgW3Nob3VsZE9ic2VydmUsIHJvb3QsIHJvb3RNYXJnaW4sIGFtb3VudF0pO1xufVxuLyoqXG4gKiBJZiBJbnRlcnNlY3Rpb25PYnNlcnZlciBpcyBtaXNzaW5nLCB3ZSBhY3RpdmF0ZSBpblZpZXcgYW5kIGZpcmUgb25WaWV3cG9ydEVudGVyXG4gKiBvbiBtb3VudC4gVGhpcyB3YXksIHRoZSBwYWdlIHdpbGwgYmUgaW4gdGhlIHN0YXRlIHRoZSBhdXRob3IgZXhwZWN0cyB1c2Vyc1xuICogdG8gc2VlIGl0IGluIGZvciBldmVyeW9uZS5cbiAqL1xuZnVuY3Rpb24gdXNlTWlzc2luZ0ludGVyc2VjdGlvbk9ic2VydmVyKHNob3VsZE9ic2VydmUsIHN0YXRlLCB2aXN1YWxFbGVtZW50LCBfYSkge1xuICAgIHZhciBfYiA9IF9hLmZhbGxiYWNrLCBmYWxsYmFjayA9IF9iID09PSB2b2lkIDAgPyB0cnVlIDogX2I7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFzaG91bGRPYnNlcnZlIHx8ICFmYWxsYmFjaylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGVudiAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKGZhbHNlLCBcIkludGVyc2VjdGlvbk9ic2VydmVyIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UuIHdoaWxlSW5WaWV3IGFuaW1hdGlvbnMgd2lsbCB0cmlnZ2VyIG9uIG1vdW50LlwiKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZSB0aGlzIGluIGFuIHJBRiBiZWNhdXNlLCBhdCB0aGlzIHBvaW50LCB0aGUgYW5pbWF0aW9uIHN0YXRlXG4gICAgICAgICAqIHdvbid0IGhhdmUgZmx1c2hlZCBmb3IgdGhlIGZpcnN0IHRpbWUgYW5kIHRoZXJlJ3MgY2VydGFpbiBsb2dpYyBpblxuICAgICAgICAgKiB0aGVyZSB0aGF0IGJlaGF2ZXMgZGlmZmVyZW50bHkgb24gdGhlIGluaXRpYWwgYW5pbWF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIGhvb2sgc2hvdWxkIGJlIHF1aXRlIHJhcmVseSBjYWxsZWQgc28gc2V0dGluZyB0aGlzIGluIGFuIHJBRlxuICAgICAgICAgKiBpcyBwcmVmZXJyZWQgdG8gY2hhbmdpbmcgdGhlIGJlaGF2aW91ciBvZiB0aGUgYW5pbWF0aW9uIHN0YXRlLlxuICAgICAgICAgKi9cbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHN0YXRlLmhhc0VudGVyZWRWaWV3ID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBvblZpZXdwb3J0RW50ZXIgPSB2aXN1YWxFbGVtZW50LmdldFByb3BzKCkub25WaWV3cG9ydEVudGVyO1xuICAgICAgICAgICAgb25WaWV3cG9ydEVudGVyID09PSBudWxsIHx8IG9uVmlld3BvcnRFbnRlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25WaWV3cG9ydEVudGVyKG51bGwpO1xuICAgICAgICAgICAgKF9hID0gdmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNldEFjdGl2ZShBbmltYXRpb25UeXBlLkluVmlldywgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH0sIFtzaG91bGRPYnNlcnZlXSk7XG59XG5cbmV4cG9ydCB7IHVzZVZpZXdwb3J0IH07XG4iLCJ2YXIgbWFrZVJlbmRlcmxlc3NDb21wb25lbnQgPSBmdW5jdGlvbiAoaG9vaykgeyByZXR1cm4gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgaG9vayhwcm9wcyk7XG4gICAgcmV0dXJuIG51bGw7XG59OyB9O1xuXG5leHBvcnQgeyBtYWtlUmVuZGVybGVzc0NvbXBvbmVudCB9O1xuIiwiaW1wb3J0IHsgdXNlRm9jdXNHZXN0dXJlIH0gZnJvbSAnLi4vLi4vZ2VzdHVyZXMvdXNlLWZvY3VzLWdlc3R1cmUubWpzJztcbmltcG9ydCB7IHVzZUhvdmVyR2VzdHVyZSB9IGZyb20gJy4uLy4uL2dlc3R1cmVzL3VzZS1ob3Zlci1nZXN0dXJlLm1qcyc7XG5pbXBvcnQgeyB1c2VUYXBHZXN0dXJlIH0gZnJvbSAnLi4vLi4vZ2VzdHVyZXMvdXNlLXRhcC1nZXN0dXJlLm1qcyc7XG5pbXBvcnQgeyB1c2VWaWV3cG9ydCB9IGZyb20gJy4vdmlld3BvcnQvdXNlLXZpZXdwb3J0Lm1qcyc7XG5pbXBvcnQgeyBtYWtlUmVuZGVybGVzc0NvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL21ha2UtcmVuZGVybGVzcy1jb21wb25lbnQubWpzJztcblxudmFyIGdlc3R1cmVBbmltYXRpb25zID0ge1xuICAgIGluVmlldzogbWFrZVJlbmRlcmxlc3NDb21wb25lbnQodXNlVmlld3BvcnQpLFxuICAgIHRhcDogbWFrZVJlbmRlcmxlc3NDb21wb25lbnQodXNlVGFwR2VzdHVyZSksXG4gICAgZm9jdXM6IG1ha2VSZW5kZXJsZXNzQ29tcG9uZW50KHVzZUZvY3VzR2VzdHVyZSksXG4gICAgaG92ZXI6IG1ha2VSZW5kZXJsZXNzQ29tcG9uZW50KHVzZUhvdmVyR2VzdHVyZSksXG59O1xuXG5leHBvcnQgeyBnZXN0dXJlQW5pbWF0aW9ucyB9O1xuIiwiaW1wb3J0IHsgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNOb2RlT3JDaGlsZCB9IGZyb20gJy4vdXRpbHMvaXMtbm9kZS1vci1jaGlsZC5tanMnO1xuaW1wb3J0IHsgdXNlUG9pbnRlckV2ZW50LCBhZGRQb2ludGVyRXZlbnQgfSBmcm9tICcuLi9ldmVudHMvdXNlLXBvaW50ZXItZXZlbnQubWpzJztcbmltcG9ydCB7IHVzZVVubW91bnRFZmZlY3QgfSBmcm9tICcuLi91dGlscy91c2UtdW5tb3VudC1lZmZlY3QubWpzJztcbmltcG9ydCB7IHBpcGUgfSBmcm9tICdwb3Btb3Rpb24nO1xuaW1wb3J0IHsgQW5pbWF0aW9uVHlwZSB9IGZyb20gJy4uL3JlbmRlci91dGlscy90eXBlcy5tanMnO1xuaW1wb3J0IHsgaXNEcmFnQWN0aXZlIH0gZnJvbSAnLi9kcmFnL3V0aWxzL2xvY2subWpzJztcblxuLyoqXG4gKiBAcGFyYW0gaGFuZGxlcnMgLVxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHVzZVRhcEdlc3R1cmUoX2EpIHtcbiAgICB2YXIgb25UYXAgPSBfYS5vblRhcCwgb25UYXBTdGFydCA9IF9hLm9uVGFwU3RhcnQsIG9uVGFwQ2FuY2VsID0gX2Eub25UYXBDYW5jZWwsIHdoaWxlVGFwID0gX2Eud2hpbGVUYXAsIHZpc3VhbEVsZW1lbnQgPSBfYS52aXN1YWxFbGVtZW50O1xuICAgIHZhciBoYXNQcmVzc0xpc3RlbmVycyA9IG9uVGFwIHx8IG9uVGFwU3RhcnQgfHwgb25UYXBDYW5jZWwgfHwgd2hpbGVUYXA7XG4gICAgdmFyIGlzUHJlc3NpbmcgPSB1c2VSZWYoZmFsc2UpO1xuICAgIHZhciBjYW5jZWxQb2ludGVyRW5kTGlzdGVuZXJzID0gdXNlUmVmKG51bGwpO1xuICAgIC8qKlxuICAgICAqIE9ubHkgc2V0IGxpc3RlbmVyIHRvIHBhc3NpdmUgaWYgdGhlcmUgYXJlIG5vIGV4dGVybmFsIGxpc3RlbmVycy5cbiAgICAgKi9cbiAgICB2YXIgZXZlbnRPcHRpb25zID0ge1xuICAgICAgICBwYXNzaXZlOiAhKG9uVGFwU3RhcnQgfHwgb25UYXAgfHwgb25UYXBDYW5jZWwgfHwgb25Qb2ludGVyRG93biksXG4gICAgfTtcbiAgICBmdW5jdGlvbiByZW1vdmVQb2ludGVyRW5kTGlzdGVuZXIoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgKF9hID0gY2FuY2VsUG9pbnRlckVuZExpc3RlbmVycy5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChjYW5jZWxQb2ludGVyRW5kTGlzdGVuZXJzKTtcbiAgICAgICAgY2FuY2VsUG9pbnRlckVuZExpc3RlbmVycy5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tQb2ludGVyRW5kKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJlbW92ZVBvaW50ZXJFbmRMaXN0ZW5lcigpO1xuICAgICAgICBpc1ByZXNzaW5nLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgKF9hID0gdmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNldEFjdGl2ZShBbmltYXRpb25UeXBlLlRhcCwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gIWlzRHJhZ0FjdGl2ZSgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvblBvaW50ZXJVcChldmVudCwgaW5mbykge1xuICAgICAgICBpZiAoIWNoZWNrUG9pbnRlckVuZCgpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvKipcbiAgICAgICAgICogV2Ugb25seSBjb3VudCB0aGlzIGFzIGEgdGFwIGdlc3R1cmUgaWYgdGhlIGV2ZW50LnRhcmdldCBpcyB0aGUgc2FtZVxuICAgICAgICAgKiBhcywgb3IgYSBjaGlsZCBvZiwgdGhpcyBjb21wb25lbnQncyBlbGVtZW50XG4gICAgICAgICAqL1xuICAgICAgICAhaXNOb2RlT3JDaGlsZCh2aXN1YWxFbGVtZW50LmdldEluc3RhbmNlKCksIGV2ZW50LnRhcmdldClcbiAgICAgICAgICAgID8gb25UYXBDYW5jZWwgPT09IG51bGwgfHwgb25UYXBDYW5jZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVGFwQ2FuY2VsKGV2ZW50LCBpbmZvKVxuICAgICAgICAgICAgOiBvblRhcCA9PT0gbnVsbCB8fCBvblRhcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25UYXAoZXZlbnQsIGluZm8pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvblBvaW50ZXJDYW5jZWwoZXZlbnQsIGluZm8pIHtcbiAgICAgICAgaWYgKCFjaGVja1BvaW50ZXJFbmQoKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgb25UYXBDYW5jZWwgPT09IG51bGwgfHwgb25UYXBDYW5jZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVGFwQ2FuY2VsKGV2ZW50LCBpbmZvKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gb25Qb2ludGVyRG93bihldmVudCwgaW5mbykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJlbW92ZVBvaW50ZXJFbmRMaXN0ZW5lcigpO1xuICAgICAgICBpZiAoaXNQcmVzc2luZy5jdXJyZW50KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpc1ByZXNzaW5nLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBjYW5jZWxQb2ludGVyRW5kTGlzdGVuZXJzLmN1cnJlbnQgPSBwaXBlKGFkZFBvaW50ZXJFdmVudCh3aW5kb3csIFwicG9pbnRlcnVwXCIsIG9uUG9pbnRlclVwLCBldmVudE9wdGlvbnMpLCBhZGRQb2ludGVyRXZlbnQod2luZG93LCBcInBvaW50ZXJjYW5jZWxcIiwgb25Qb2ludGVyQ2FuY2VsLCBldmVudE9wdGlvbnMpKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEVuc3VyZSB3ZSB0cmlnZ2VyIGFuaW1hdGlvbnMgYmVmb3JlIGZpcmluZyBldmVudCBjYWxsYmFja1xuICAgICAgICAgKi9cbiAgICAgICAgKF9hID0gdmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNldEFjdGl2ZShBbmltYXRpb25UeXBlLlRhcCwgdHJ1ZSk7XG4gICAgICAgIG9uVGFwU3RhcnQgPT09IG51bGwgfHwgb25UYXBTdGFydCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25UYXBTdGFydChldmVudCwgaW5mbyk7XG4gICAgfVxuICAgIHVzZVBvaW50ZXJFdmVudCh2aXN1YWxFbGVtZW50LCBcInBvaW50ZXJkb3duXCIsIGhhc1ByZXNzTGlzdGVuZXJzID8gb25Qb2ludGVyRG93biA6IHVuZGVmaW5lZCwgZXZlbnRPcHRpb25zKTtcbiAgICB1c2VVbm1vdW50RWZmZWN0KHJlbW92ZVBvaW50ZXJFbmRMaXN0ZW5lcik7XG59XG5cbmV4cG9ydCB7IHVzZVRhcEdlc3R1cmUgfTtcbiIsImltcG9ydCB7IEFuaW1hdGlvblR5cGUgfSBmcm9tICcuLi9yZW5kZXIvdXRpbHMvdHlwZXMubWpzJztcbmltcG9ydCB7IHVzZURvbUV2ZW50IH0gZnJvbSAnLi4vZXZlbnRzL3VzZS1kb20tZXZlbnQubWpzJztcblxuLyoqXG4gKlxuICogQHBhcmFtIHByb3BzXG4gKiBAcGFyYW0gcmVmXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gdXNlRm9jdXNHZXN0dXJlKF9hKSB7XG4gICAgdmFyIHdoaWxlRm9jdXMgPSBfYS53aGlsZUZvY3VzLCB2aXN1YWxFbGVtZW50ID0gX2EudmlzdWFsRWxlbWVudDtcbiAgICB2YXIgb25Gb2N1cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAoX2EgPSB2aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2V0QWN0aXZlKEFuaW1hdGlvblR5cGUuRm9jdXMsIHRydWUpO1xuICAgIH07XG4gICAgdmFyIG9uQmx1ciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAoX2EgPSB2aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2V0QWN0aXZlKEFuaW1hdGlvblR5cGUuRm9jdXMsIGZhbHNlKTtcbiAgICB9O1xuICAgIHVzZURvbUV2ZW50KHZpc3VhbEVsZW1lbnQsIFwiZm9jdXNcIiwgd2hpbGVGb2N1cyA/IG9uRm9jdXMgOiB1bmRlZmluZWQpO1xuICAgIHVzZURvbUV2ZW50KHZpc3VhbEVsZW1lbnQsIFwiYmx1clwiLCB3aGlsZUZvY3VzID8gb25CbHVyIDogdW5kZWZpbmVkKTtcbn1cblxuZXhwb3J0IHsgdXNlRm9jdXNHZXN0dXJlIH07XG4iLCJpbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBQcmVzZW5jZUNvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L1ByZXNlbmNlQ29udGV4dC5tanMnO1xuaW1wb3J0IHsgdXNlSWQgfSBmcm9tICcuLi8uLi91dGlscy91c2UtaWQubWpzJztcblxuLyoqXG4gKiBXaGVuIGEgY29tcG9uZW50IGlzIHRoZSBjaGlsZCBvZiBgQW5pbWF0ZVByZXNlbmNlYCwgaXQgY2FuIHVzZSBgdXNlUHJlc2VuY2VgXG4gKiB0byBhY2Nlc3MgaW5mb3JtYXRpb24gYWJvdXQgd2hldGhlciBpdCdzIHN0aWxsIHByZXNlbnQgaW4gdGhlIFJlYWN0IHRyZWUuXG4gKlxuICogYGBganN4XG4gKiBpbXBvcnQgeyB1c2VQcmVzZW5jZSB9IGZyb20gXCJmcmFtZXItbW90aW9uXCJcbiAqXG4gKiBleHBvcnQgY29uc3QgQ29tcG9uZW50ID0gKCkgPT4ge1xuICogICBjb25zdCBbaXNQcmVzZW50LCBzYWZlVG9SZW1vdmVdID0gdXNlUHJlc2VuY2UoKVxuICpcbiAqICAgdXNlRWZmZWN0KCgpID0+IHtcbiAqICAgICAhaXNQcmVzZW50ICYmIHNldFRpbWVvdXQoc2FmZVRvUmVtb3ZlLCAxMDAwKVxuICogICB9LCBbaXNQcmVzZW50XSlcbiAqXG4gKiAgIHJldHVybiA8ZGl2IC8+XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBJZiBgaXNQcmVzZW50YCBpcyBgZmFsc2VgLCBpdCBtZWFucyB0aGF0IGEgY29tcG9uZW50IGhhcyBiZWVuIHJlbW92ZWQgdGhlIHRyZWUsIGJ1dFxuICogYEFuaW1hdGVQcmVzZW5jZWAgd29uJ3QgcmVhbGx5IHJlbW92ZSBpdCB1bnRpbCBgc2FmZVRvUmVtb3ZlYCBoYXMgYmVlbiBjYWxsZWQuXG4gKlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiB1c2VQcmVzZW5jZSgpIHtcbiAgICB2YXIgY29udGV4dCA9IHVzZUNvbnRleHQoUHJlc2VuY2VDb250ZXh0KTtcbiAgICBpZiAoY29udGV4dCA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIFt0cnVlLCBudWxsXTtcbiAgICB2YXIgaXNQcmVzZW50ID0gY29udGV4dC5pc1ByZXNlbnQsIG9uRXhpdENvbXBsZXRlID0gY29udGV4dC5vbkV4aXRDb21wbGV0ZSwgcmVnaXN0ZXIgPSBjb250ZXh0LnJlZ2lzdGVyO1xuICAgIC8vIEl0J3Mgc2FmZSB0byBjYWxsIHRoZSBmb2xsb3dpbmcgaG9va3MgY29uZGl0aW9uYWxseSAoYWZ0ZXIgYW4gZWFybHkgcmV0dXJuKSBiZWNhdXNlIHRoZSBjb250ZXh0IHdpbGwgYWx3YXlzXG4gICAgLy8gZWl0aGVyIGJlIG51bGwgb3Igbm9uLW51bGwgZm9yIHRoZSBsaWZlc3BhbiBvZiB0aGUgY29tcG9uZW50LlxuICAgIC8vIFJlcGxhY2Ugd2l0aCB1c2VJZCB3aGVuIHJlbGVhc2VkIGluIFJlYWN0XG4gICAgdmFyIGlkID0gdXNlSWQoKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVnaXN0ZXIoaWQpOyB9LCBbXSk7XG4gICAgdmFyIHNhZmVUb1JlbW92ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uRXhpdENvbXBsZXRlID09PSBudWxsIHx8IG9uRXhpdENvbXBsZXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkV4aXRDb21wbGV0ZShpZCk7IH07XG4gICAgcmV0dXJuICFpc1ByZXNlbnQgJiYgb25FeGl0Q29tcGxldGUgPyBbZmFsc2UsIHNhZmVUb1JlbW92ZV0gOiBbdHJ1ZV07XG59XG4vKipcbiAqIFNpbWlsYXIgdG8gYHVzZVByZXNlbmNlYCwgZXhjZXB0IGB1c2VJc1ByZXNlbnRgIHNpbXBseSByZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBjb21wb25lbnQgaXMgcHJlc2VudC5cbiAqIFRoZXJlIGlzIG5vIGBzYWZlVG9SZW1vdmVgIGZ1bmN0aW9uLlxuICpcbiAqIGBgYGpzeFxuICogaW1wb3J0IHsgdXNlSXNQcmVzZW50IH0gZnJvbSBcImZyYW1lci1tb3Rpb25cIlxuICpcbiAqIGV4cG9ydCBjb25zdCBDb21wb25lbnQgPSAoKSA9PiB7XG4gKiAgIGNvbnN0IGlzUHJlc2VudCA9IHVzZUlzUHJlc2VudCgpXG4gKlxuICogICB1c2VFZmZlY3QoKCkgPT4ge1xuICogICAgICFpc1ByZXNlbnQgJiYgY29uc29sZS5sb2coXCJJJ3ZlIGJlZW4gcmVtb3ZlZCFcIilcbiAqICAgfSwgW2lzUHJlc2VudF0pXG4gKlxuICogICByZXR1cm4gPGRpdiAvPlxuICogfVxuICogYGBgXG4gKlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiB1c2VJc1ByZXNlbnQoKSB7XG4gICAgcmV0dXJuIGlzUHJlc2VudCh1c2VDb250ZXh0KFByZXNlbmNlQ29udGV4dCkpO1xufVxuZnVuY3Rpb24gaXNQcmVzZW50KGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dCA9PT0gbnVsbCA/IHRydWUgOiBjb250ZXh0LmlzUHJlc2VudDtcbn1cblxuZXhwb3J0IHsgaXNQcmVzZW50LCB1c2VJc1ByZXNlbnQsIHVzZVByZXNlbmNlIH07XG4iLCJmdW5jdGlvbiBzaGFsbG93Q29tcGFyZShuZXh0LCBwcmV2KSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHByZXYpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHByZXZMZW5ndGggPSBwcmV2Lmxlbmd0aDtcbiAgICBpZiAocHJldkxlbmd0aCAhPT0gbmV4dC5sZW5ndGgpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZMZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocHJldltpXSAhPT0gbmV4dFtpXSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCB7IHNoYWxsb3dDb21wYXJlIH07XG4iLCJjb25zdCBjbGFtcCA9IChtaW4sIG1heCwgdikgPT4gTWF0aC5taW4oTWF0aC5tYXgodiwgbWluKSwgbWF4KTtcblxuZXhwb3J0IHsgY2xhbXAgfTtcbiIsImltcG9ydCB7IHdhcm5pbmcgfSBmcm9tICdoZXktbGlzdGVuJztcbmltcG9ydCB7IGNsYW1wIH0gZnJvbSAnLi4vLi4vdXRpbHMvY2xhbXAubWpzJztcblxuY29uc3Qgc2FmZU1pbiA9IDAuMDAxO1xuY29uc3QgbWluRHVyYXRpb24gPSAwLjAxO1xuY29uc3QgbWF4RHVyYXRpb24gPSAxMC4wO1xuY29uc3QgbWluRGFtcGluZyA9IDAuMDU7XG5jb25zdCBtYXhEYW1waW5nID0gMTtcbmZ1bmN0aW9uIGZpbmRTcHJpbmcoeyBkdXJhdGlvbiA9IDgwMCwgYm91bmNlID0gMC4yNSwgdmVsb2NpdHkgPSAwLCBtYXNzID0gMSwgfSkge1xuICAgIGxldCBlbnZlbG9wZTtcbiAgICBsZXQgZGVyaXZhdGl2ZTtcbiAgICB3YXJuaW5nKGR1cmF0aW9uIDw9IG1heER1cmF0aW9uICogMTAwMCwgXCJTcHJpbmcgZHVyYXRpb24gbXVzdCBiZSAxMCBzZWNvbmRzIG9yIGxlc3NcIik7XG4gICAgbGV0IGRhbXBpbmdSYXRpbyA9IDEgLSBib3VuY2U7XG4gICAgZGFtcGluZ1JhdGlvID0gY2xhbXAobWluRGFtcGluZywgbWF4RGFtcGluZywgZGFtcGluZ1JhdGlvKTtcbiAgICBkdXJhdGlvbiA9IGNsYW1wKG1pbkR1cmF0aW9uLCBtYXhEdXJhdGlvbiwgZHVyYXRpb24gLyAxMDAwKTtcbiAgICBpZiAoZGFtcGluZ1JhdGlvIDwgMSkge1xuICAgICAgICBlbnZlbG9wZSA9ICh1bmRhbXBlZEZyZXEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9uZW50aWFsRGVjYXkgPSB1bmRhbXBlZEZyZXEgKiBkYW1waW5nUmF0aW87XG4gICAgICAgICAgICBjb25zdCBkZWx0YSA9IGV4cG9uZW50aWFsRGVjYXkgKiBkdXJhdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBleHBvbmVudGlhbERlY2F5IC0gdmVsb2NpdHk7XG4gICAgICAgICAgICBjb25zdCBiID0gY2FsY0FuZ3VsYXJGcmVxKHVuZGFtcGVkRnJlcSwgZGFtcGluZ1JhdGlvKTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBNYXRoLmV4cCgtZGVsdGEpO1xuICAgICAgICAgICAgcmV0dXJuIHNhZmVNaW4gLSAoYSAvIGIpICogYztcbiAgICAgICAgfTtcbiAgICAgICAgZGVyaXZhdGl2ZSA9ICh1bmRhbXBlZEZyZXEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9uZW50aWFsRGVjYXkgPSB1bmRhbXBlZEZyZXEgKiBkYW1waW5nUmF0aW87XG4gICAgICAgICAgICBjb25zdCBkZWx0YSA9IGV4cG9uZW50aWFsRGVjYXkgKiBkdXJhdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBkZWx0YSAqIHZlbG9jaXR5ICsgdmVsb2NpdHk7XG4gICAgICAgICAgICBjb25zdCBlID0gTWF0aC5wb3coZGFtcGluZ1JhdGlvLCAyKSAqIE1hdGgucG93KHVuZGFtcGVkRnJlcSwgMikgKiBkdXJhdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGYgPSBNYXRoLmV4cCgtZGVsdGEpO1xuICAgICAgICAgICAgY29uc3QgZyA9IGNhbGNBbmd1bGFyRnJlcShNYXRoLnBvdyh1bmRhbXBlZEZyZXEsIDIpLCBkYW1waW5nUmF0aW8pO1xuICAgICAgICAgICAgY29uc3QgZmFjdG9yID0gLWVudmVsb3BlKHVuZGFtcGVkRnJlcSkgKyBzYWZlTWluID4gMCA/IC0xIDogMTtcbiAgICAgICAgICAgIHJldHVybiAoZmFjdG9yICogKChkIC0gZSkgKiBmKSkgLyBnO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZW52ZWxvcGUgPSAodW5kYW1wZWRGcmVxKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhID0gTWF0aC5leHAoLXVuZGFtcGVkRnJlcSAqIGR1cmF0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodW5kYW1wZWRGcmVxIC0gdmVsb2NpdHkpICogZHVyYXRpb24gKyAxO1xuICAgICAgICAgICAgcmV0dXJuIC1zYWZlTWluICsgYSAqIGI7XG4gICAgICAgIH07XG4gICAgICAgIGRlcml2YXRpdmUgPSAodW5kYW1wZWRGcmVxKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhID0gTWF0aC5leHAoLXVuZGFtcGVkRnJlcSAqIGR1cmF0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodmVsb2NpdHkgLSB1bmRhbXBlZEZyZXEpICogKGR1cmF0aW9uICogZHVyYXRpb24pO1xuICAgICAgICAgICAgcmV0dXJuIGEgKiBiO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBpbml0aWFsR3Vlc3MgPSA1IC8gZHVyYXRpb247XG4gICAgY29uc3QgdW5kYW1wZWRGcmVxID0gYXBwcm94aW1hdGVSb290KGVudmVsb3BlLCBkZXJpdmF0aXZlLCBpbml0aWFsR3Vlc3MpO1xuICAgIGR1cmF0aW9uID0gZHVyYXRpb24gKiAxMDAwO1xuICAgIGlmIChpc05hTih1bmRhbXBlZEZyZXEpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGlmZm5lc3M6IDEwMCxcbiAgICAgICAgICAgIGRhbXBpbmc6IDEwLFxuICAgICAgICAgICAgZHVyYXRpb24sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBzdGlmZm5lc3MgPSBNYXRoLnBvdyh1bmRhbXBlZEZyZXEsIDIpICogbWFzcztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0aWZmbmVzcyxcbiAgICAgICAgICAgIGRhbXBpbmc6IGRhbXBpbmdSYXRpbyAqIDIgKiBNYXRoLnNxcnQobWFzcyAqIHN0aWZmbmVzcyksXG4gICAgICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgfTtcbiAgICB9XG59XG5jb25zdCByb290SXRlcmF0aW9ucyA9IDEyO1xuZnVuY3Rpb24gYXBwcm94aW1hdGVSb290KGVudmVsb3BlLCBkZXJpdmF0aXZlLCBpbml0aWFsR3Vlc3MpIHtcbiAgICBsZXQgcmVzdWx0ID0gaW5pdGlhbEd1ZXNzO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcm9vdEl0ZXJhdGlvbnM7IGkrKykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQgLSBlbnZlbG9wZShyZXN1bHQpIC8gZGVyaXZhdGl2ZShyZXN1bHQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gY2FsY0FuZ3VsYXJGcmVxKHVuZGFtcGVkRnJlcSwgZGFtcGluZ1JhdGlvKSB7XG4gICAgcmV0dXJuIHVuZGFtcGVkRnJlcSAqIE1hdGguc3FydCgxIC0gZGFtcGluZ1JhdGlvICogZGFtcGluZ1JhdGlvKTtcbn1cblxuZXhwb3J0IHsgY2FsY0FuZ3VsYXJGcmVxLCBmaW5kU3ByaW5nLCBtYXhEYW1waW5nLCBtYXhEdXJhdGlvbiwgbWluRGFtcGluZywgbWluRHVyYXRpb24gfTtcbiIsImltcG9ydCB7IF9fcmVzdCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGZpbmRTcHJpbmcsIGNhbGNBbmd1bGFyRnJlcSB9IGZyb20gJy4uL3V0aWxzL2ZpbmQtc3ByaW5nLm1qcyc7XG5cbmNvbnN0IGR1cmF0aW9uS2V5cyA9IFtcImR1cmF0aW9uXCIsIFwiYm91bmNlXCJdO1xuY29uc3QgcGh5c2ljc0tleXMgPSBbXCJzdGlmZm5lc3NcIiwgXCJkYW1waW5nXCIsIFwibWFzc1wiXTtcbmZ1bmN0aW9uIGlzU3ByaW5nVHlwZShvcHRpb25zLCBrZXlzKSB7XG4gICAgcmV0dXJuIGtleXMuc29tZSgoa2V5KSA9PiBvcHRpb25zW2tleV0gIT09IHVuZGVmaW5lZCk7XG59XG5mdW5jdGlvbiBnZXRTcHJpbmdPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBsZXQgc3ByaW5nT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyB2ZWxvY2l0eTogMC4wLCBzdGlmZm5lc3M6IDEwMCwgZGFtcGluZzogMTAsIG1hc3M6IDEuMCwgaXNSZXNvbHZlZEZyb21EdXJhdGlvbjogZmFsc2UgfSwgb3B0aW9ucyk7XG4gICAgaWYgKCFpc1NwcmluZ1R5cGUob3B0aW9ucywgcGh5c2ljc0tleXMpICYmXG4gICAgICAgIGlzU3ByaW5nVHlwZShvcHRpb25zLCBkdXJhdGlvbktleXMpKSB7XG4gICAgICAgIGNvbnN0IGRlcml2ZWQgPSBmaW5kU3ByaW5nKG9wdGlvbnMpO1xuICAgICAgICBzcHJpbmdPcHRpb25zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHNwcmluZ09wdGlvbnMpLCBkZXJpdmVkKSwgeyB2ZWxvY2l0eTogMC4wLCBtYXNzOiAxLjAgfSk7XG4gICAgICAgIHNwcmluZ09wdGlvbnMuaXNSZXNvbHZlZEZyb21EdXJhdGlvbiA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBzcHJpbmdPcHRpb25zO1xufVxuZnVuY3Rpb24gc3ByaW5nKF9hKSB7XG4gICAgdmFyIHsgZnJvbSA9IDAuMCwgdG8gPSAxLjAsIHJlc3RTcGVlZCA9IDIsIHJlc3REZWx0YSB9ID0gX2EsIG9wdGlvbnMgPSBfX3Jlc3QoX2EsIFtcImZyb21cIiwgXCJ0b1wiLCBcInJlc3RTcGVlZFwiLCBcInJlc3REZWx0YVwiXSk7XG4gICAgY29uc3Qgc3RhdGUgPSB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogZnJvbSB9O1xuICAgIGxldCB7IHN0aWZmbmVzcywgZGFtcGluZywgbWFzcywgdmVsb2NpdHksIGR1cmF0aW9uLCBpc1Jlc29sdmVkRnJvbUR1cmF0aW9uLCB9ID0gZ2V0U3ByaW5nT3B0aW9ucyhvcHRpb25zKTtcbiAgICBsZXQgcmVzb2x2ZVNwcmluZyA9IHplcm87XG4gICAgbGV0IHJlc29sdmVWZWxvY2l0eSA9IHplcm87XG4gICAgZnVuY3Rpb24gY3JlYXRlU3ByaW5nKCkge1xuICAgICAgICBjb25zdCBpbml0aWFsVmVsb2NpdHkgPSB2ZWxvY2l0eSA/IC0odmVsb2NpdHkgLyAxMDAwKSA6IDAuMDtcbiAgICAgICAgY29uc3QgaW5pdGlhbERlbHRhID0gdG8gLSBmcm9tO1xuICAgICAgICBjb25zdCBkYW1waW5nUmF0aW8gPSBkYW1waW5nIC8gKDIgKiBNYXRoLnNxcnQoc3RpZmZuZXNzICogbWFzcykpO1xuICAgICAgICBjb25zdCB1bmRhbXBlZEFuZ3VsYXJGcmVxID0gTWF0aC5zcXJ0KHN0aWZmbmVzcyAvIG1hc3MpIC8gMTAwMDtcbiAgICAgICAgaWYgKHJlc3REZWx0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN0RGVsdGEgPSBNYXRoLm1pbihNYXRoLmFicyh0byAtIGZyb20pIC8gMTAwLCAwLjQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYW1waW5nUmF0aW8gPCAxKSB7XG4gICAgICAgICAgICBjb25zdCBhbmd1bGFyRnJlcSA9IGNhbGNBbmd1bGFyRnJlcSh1bmRhbXBlZEFuZ3VsYXJGcmVxLCBkYW1waW5nUmF0aW8pO1xuICAgICAgICAgICAgcmVzb2x2ZVNwcmluZyA9ICh0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW52ZWxvcGUgPSBNYXRoLmV4cCgtZGFtcGluZ1JhdGlvICogdW5kYW1wZWRBbmd1bGFyRnJlcSAqIHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiAodG8gLVxuICAgICAgICAgICAgICAgICAgICBlbnZlbG9wZSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAoKChpbml0aWFsVmVsb2NpdHkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbXBpbmdSYXRpbyAqIHVuZGFtcGVkQW5ndWxhckZyZXEgKiBpbml0aWFsRGVsdGEpIC9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmd1bGFyRnJlcSkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguc2luKGFuZ3VsYXJGcmVxICogdCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxEZWx0YSAqIE1hdGguY29zKGFuZ3VsYXJGcmVxICogdCkpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXNvbHZlVmVsb2NpdHkgPSAodCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudmVsb3BlID0gTWF0aC5leHAoLWRhbXBpbmdSYXRpbyAqIHVuZGFtcGVkQW5ndWxhckZyZXEgKiB0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGRhbXBpbmdSYXRpbyAqXG4gICAgICAgICAgICAgICAgICAgIHVuZGFtcGVkQW5ndWxhckZyZXEgKlxuICAgICAgICAgICAgICAgICAgICBlbnZlbG9wZSAqXG4gICAgICAgICAgICAgICAgICAgICgoTWF0aC5zaW4oYW5ndWxhckZyZXEgKiB0KSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW5pdGlhbFZlbG9jaXR5ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW1waW5nUmF0aW8gKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRhbXBlZEFuZ3VsYXJGcmVxICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbERlbHRhKSkgL1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5ndWxhckZyZXEgK1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbERlbHRhICogTWF0aC5jb3MoYW5ndWxhckZyZXEgKiB0KSkgLVxuICAgICAgICAgICAgICAgICAgICBlbnZlbG9wZSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAoTWF0aC5jb3MoYW5ndWxhckZyZXEgKiB0KSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluaXRpYWxWZWxvY2l0eSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbXBpbmdSYXRpbyAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRhbXBlZEFuZ3VsYXJGcmVxICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxEZWx0YSkgLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ3VsYXJGcmVxICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbERlbHRhICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5zaW4oYW5ndWxhckZyZXEgKiB0KSkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYW1waW5nUmF0aW8gPT09IDEpIHtcbiAgICAgICAgICAgIHJlc29sdmVTcHJpbmcgPSAodCkgPT4gdG8gLVxuICAgICAgICAgICAgICAgIE1hdGguZXhwKC11bmRhbXBlZEFuZ3VsYXJGcmVxICogdCkgKlxuICAgICAgICAgICAgICAgICAgICAoaW5pdGlhbERlbHRhICtcbiAgICAgICAgICAgICAgICAgICAgICAgIChpbml0aWFsVmVsb2NpdHkgKyB1bmRhbXBlZEFuZ3VsYXJGcmVxICogaW5pdGlhbERlbHRhKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkYW1wZWRBbmd1bGFyRnJlcSA9IHVuZGFtcGVkQW5ndWxhckZyZXEgKiBNYXRoLnNxcnQoZGFtcGluZ1JhdGlvICogZGFtcGluZ1JhdGlvIC0gMSk7XG4gICAgICAgICAgICByZXNvbHZlU3ByaW5nID0gKHQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnZlbG9wZSA9IE1hdGguZXhwKC1kYW1waW5nUmF0aW8gKiB1bmRhbXBlZEFuZ3VsYXJGcmVxICogdCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZnJlcUZvclQgPSBNYXRoLm1pbihkYW1wZWRBbmd1bGFyRnJlcSAqIHQsIDMwMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0byAtXG4gICAgICAgICAgICAgICAgICAgIChlbnZlbG9wZSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGluaXRpYWxWZWxvY2l0eSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFtcGluZ1JhdGlvICogdW5kYW1wZWRBbmd1bGFyRnJlcSAqIGluaXRpYWxEZWx0YSkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguc2luaChmcmVxRm9yVCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbXBlZEFuZ3VsYXJGcmVxICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbERlbHRhICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5jb3NoKGZyZXFGb3JUKSkpIC9cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhbXBlZEFuZ3VsYXJGcmVxKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY3JlYXRlU3ByaW5nKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogKHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSByZXNvbHZlU3ByaW5nKHQpO1xuICAgICAgICAgICAgaWYgKCFpc1Jlc29sdmVkRnJvbUR1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZlbG9jaXR5ID0gcmVzb2x2ZVZlbG9jaXR5KHQpICogMTAwMDtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0JlbG93VmVsb2NpdHlUaHJlc2hvbGQgPSBNYXRoLmFicyhjdXJyZW50VmVsb2NpdHkpIDw9IHJlc3RTcGVlZDtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0JlbG93RGlzcGxhY2VtZW50VGhyZXNob2xkID0gTWF0aC5hYnModG8gLSBjdXJyZW50KSA8PSByZXN0RGVsdGE7XG4gICAgICAgICAgICAgICAgc3RhdGUuZG9uZSA9XG4gICAgICAgICAgICAgICAgICAgIGlzQmVsb3dWZWxvY2l0eVRocmVzaG9sZCAmJiBpc0JlbG93RGlzcGxhY2VtZW50VGhyZXNob2xkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuZG9uZSA9IHQgPj0gZHVyYXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0ZS52YWx1ZSA9IHN0YXRlLmRvbmUgPyB0byA6IGN1cnJlbnQ7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgIH0sXG4gICAgICAgIGZsaXBUYXJnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHZlbG9jaXR5ID0gLXZlbG9jaXR5O1xuICAgICAgICAgICAgW2Zyb20sIHRvXSA9IFt0bywgZnJvbV07XG4gICAgICAgICAgICBjcmVhdGVTcHJpbmcoKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuc3ByaW5nLm5lZWRzSW50ZXJwb2xhdGlvbiA9IChhLCBiKSA9PiB0eXBlb2YgYSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgYiA9PT0gXCJzdHJpbmdcIjtcbmNvbnN0IHplcm8gPSAoX3QpID0+IDA7XG5cbmV4cG9ydCB7IHNwcmluZyB9O1xuIiwiY29uc3QgcHJvZ3Jlc3MgPSAoZnJvbSwgdG8sIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgdG9Gcm9tRGlmZmVyZW5jZSA9IHRvIC0gZnJvbTtcbiAgICByZXR1cm4gdG9Gcm9tRGlmZmVyZW5jZSA9PT0gMCA/IDEgOiAodmFsdWUgLSBmcm9tKSAvIHRvRnJvbURpZmZlcmVuY2U7XG59O1xuXG5leHBvcnQgeyBwcm9ncmVzcyB9O1xuIiwiY29uc3QgbWl4ID0gKGZyb20sIHRvLCBwcm9ncmVzcykgPT4gLXByb2dyZXNzICogZnJvbSArIHByb2dyZXNzICogdG8gKyBmcm9tO1xuXG5leHBvcnQgeyBtaXggfTtcbiIsImltcG9ydCB7IGlzU3RyaW5nLCBzaW5nbGVDb2xvclJlZ2V4LCBmbG9hdFJlZ2V4IH0gZnJvbSAnLi4vdXRpbHMubWpzJztcblxuY29uc3QgaXNDb2xvclN0cmluZyA9ICh0eXBlLCB0ZXN0UHJvcCkgPT4gKHYpID0+IHtcbiAgICByZXR1cm4gQm9vbGVhbigoaXNTdHJpbmcodikgJiYgc2luZ2xlQ29sb3JSZWdleC50ZXN0KHYpICYmIHYuc3RhcnRzV2l0aCh0eXBlKSkgfHxcbiAgICAgICAgKHRlc3RQcm9wICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2LCB0ZXN0UHJvcCkpKTtcbn07XG5jb25zdCBzcGxpdENvbG9yID0gKGFOYW1lLCBiTmFtZSwgY05hbWUpID0+ICh2KSA9PiB7XG4gICAgaWYgKCFpc1N0cmluZyh2KSlcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgY29uc3QgW2EsIGIsIGMsIGFscGhhXSA9IHYubWF0Y2goZmxvYXRSZWdleCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgW2FOYW1lXTogcGFyc2VGbG9hdChhKSxcbiAgICAgICAgW2JOYW1lXTogcGFyc2VGbG9hdChiKSxcbiAgICAgICAgW2NOYW1lXTogcGFyc2VGbG9hdChjKSxcbiAgICAgICAgYWxwaGE6IGFscGhhICE9PSB1bmRlZmluZWQgPyBwYXJzZUZsb2F0KGFscGhhKSA6IDEsXG4gICAgfTtcbn07XG5cbmV4cG9ydCB7IGlzQ29sb3JTdHJpbmcsIHNwbGl0Q29sb3IgfTtcbiIsImltcG9ydCB7IG51bWJlciwgYWxwaGEgfSBmcm9tICcuLi9udW1iZXJzL2luZGV4Lm1qcyc7XG5pbXBvcnQgeyBzYW5pdGl6ZSwgY2xhbXAgfSBmcm9tICcuLi91dGlscy5tanMnO1xuaW1wb3J0IHsgaXNDb2xvclN0cmluZywgc3BsaXRDb2xvciB9IGZyb20gJy4vdXRpbHMubWpzJztcblxuY29uc3QgY2xhbXBSZ2JVbml0ID0gY2xhbXAoMCwgMjU1KTtcbmNvbnN0IHJnYlVuaXQgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG51bWJlciksIHsgdHJhbnNmb3JtOiAodikgPT4gTWF0aC5yb3VuZChjbGFtcFJnYlVuaXQodikpIH0pO1xuY29uc3QgcmdiYSA9IHtcbiAgICB0ZXN0OiBpc0NvbG9yU3RyaW5nKCdyZ2InLCAncmVkJyksXG4gICAgcGFyc2U6IHNwbGl0Q29sb3IoJ3JlZCcsICdncmVlbicsICdibHVlJyksXG4gICAgdHJhbnNmb3JtOiAoeyByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTogYWxwaGEkMSA9IDEgfSkgPT4gJ3JnYmEoJyArXG4gICAgICAgIHJnYlVuaXQudHJhbnNmb3JtKHJlZCkgK1xuICAgICAgICAnLCAnICtcbiAgICAgICAgcmdiVW5pdC50cmFuc2Zvcm0oZ3JlZW4pICtcbiAgICAgICAgJywgJyArXG4gICAgICAgIHJnYlVuaXQudHJhbnNmb3JtKGJsdWUpICtcbiAgICAgICAgJywgJyArXG4gICAgICAgIHNhbml0aXplKGFscGhhLnRyYW5zZm9ybShhbHBoYSQxKSkgK1xuICAgICAgICAnKScsXG59O1xuXG5leHBvcnQgeyByZ2JVbml0LCByZ2JhIH07XG4iLCJpbXBvcnQgeyByZ2JhIH0gZnJvbSAnLi9yZ2JhLm1qcyc7XG5pbXBvcnQgeyBpc0NvbG9yU3RyaW5nIH0gZnJvbSAnLi91dGlscy5tanMnO1xuXG5mdW5jdGlvbiBwYXJzZUhleCh2KSB7XG4gICAgbGV0IHIgPSAnJztcbiAgICBsZXQgZyA9ICcnO1xuICAgIGxldCBiID0gJyc7XG4gICAgbGV0IGEgPSAnJztcbiAgICBpZiAodi5sZW5ndGggPiA1KSB7XG4gICAgICAgIHIgPSB2LnN1YnN0cigxLCAyKTtcbiAgICAgICAgZyA9IHYuc3Vic3RyKDMsIDIpO1xuICAgICAgICBiID0gdi5zdWJzdHIoNSwgMik7XG4gICAgICAgIGEgPSB2LnN1YnN0cig3LCAyKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHIgPSB2LnN1YnN0cigxLCAxKTtcbiAgICAgICAgZyA9IHYuc3Vic3RyKDIsIDEpO1xuICAgICAgICBiID0gdi5zdWJzdHIoMywgMSk7XG4gICAgICAgIGEgPSB2LnN1YnN0cig0LCAxKTtcbiAgICAgICAgciArPSByO1xuICAgICAgICBnICs9IGc7XG4gICAgICAgIGIgKz0gYjtcbiAgICAgICAgYSArPSBhO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICByZWQ6IHBhcnNlSW50KHIsIDE2KSxcbiAgICAgICAgZ3JlZW46IHBhcnNlSW50KGcsIDE2KSxcbiAgICAgICAgYmx1ZTogcGFyc2VJbnQoYiwgMTYpLFxuICAgICAgICBhbHBoYTogYSA/IHBhcnNlSW50KGEsIDE2KSAvIDI1NSA6IDEsXG4gICAgfTtcbn1cbmNvbnN0IGhleCA9IHtcbiAgICB0ZXN0OiBpc0NvbG9yU3RyaW5nKCcjJyksXG4gICAgcGFyc2U6IHBhcnNlSGV4LFxuICAgIHRyYW5zZm9ybTogcmdiYS50cmFuc2Zvcm0sXG59O1xuXG5leHBvcnQgeyBoZXggfTtcbiIsImltcG9ydCB7IGFscGhhIH0gZnJvbSAnLi4vbnVtYmVycy9pbmRleC5tanMnO1xuaW1wb3J0IHsgcGVyY2VudCB9IGZyb20gJy4uL251bWJlcnMvdW5pdHMubWpzJztcbmltcG9ydCB7IHNhbml0aXplIH0gZnJvbSAnLi4vdXRpbHMubWpzJztcbmltcG9ydCB7IGlzQ29sb3JTdHJpbmcsIHNwbGl0Q29sb3IgfSBmcm9tICcuL3V0aWxzLm1qcyc7XG5cbmNvbnN0IGhzbGEgPSB7XG4gICAgdGVzdDogaXNDb2xvclN0cmluZygnaHNsJywgJ2h1ZScpLFxuICAgIHBhcnNlOiBzcGxpdENvbG9yKCdodWUnLCAnc2F0dXJhdGlvbicsICdsaWdodG5lc3MnKSxcbiAgICB0cmFuc2Zvcm06ICh7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYTogYWxwaGEkMSA9IDEgfSkgPT4ge1xuICAgICAgICByZXR1cm4gKCdoc2xhKCcgK1xuICAgICAgICAgICAgTWF0aC5yb3VuZChodWUpICtcbiAgICAgICAgICAgICcsICcgK1xuICAgICAgICAgICAgcGVyY2VudC50cmFuc2Zvcm0oc2FuaXRpemUoc2F0dXJhdGlvbikpICtcbiAgICAgICAgICAgICcsICcgK1xuICAgICAgICAgICAgcGVyY2VudC50cmFuc2Zvcm0oc2FuaXRpemUobGlnaHRuZXNzKSkgK1xuICAgICAgICAgICAgJywgJyArXG4gICAgICAgICAgICBzYW5pdGl6ZShhbHBoYS50cmFuc2Zvcm0oYWxwaGEkMSkpICtcbiAgICAgICAgICAgICcpJyk7XG4gICAgfSxcbn07XG5cbmV4cG9ydCB7IGhzbGEgfTtcbiIsImZ1bmN0aW9uIGh1ZVRvUmdiKHAsIHEsIHQpIHtcbiAgICBpZiAodCA8IDApXG4gICAgICAgIHQgKz0gMTtcbiAgICBpZiAodCA+IDEpXG4gICAgICAgIHQgLT0gMTtcbiAgICBpZiAodCA8IDEgLyA2KVxuICAgICAgICByZXR1cm4gcCArIChxIC0gcCkgKiA2ICogdDtcbiAgICBpZiAodCA8IDEgLyAyKVxuICAgICAgICByZXR1cm4gcTtcbiAgICBpZiAodCA8IDIgLyAzKVxuICAgICAgICByZXR1cm4gcCArIChxIC0gcCkgKiAoMiAvIDMgLSB0KSAqIDY7XG4gICAgcmV0dXJuIHA7XG59XG5mdW5jdGlvbiBoc2xhVG9SZ2JhKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pIHtcbiAgICBodWUgLz0gMzYwO1xuICAgIHNhdHVyYXRpb24gLz0gMTAwO1xuICAgIGxpZ2h0bmVzcyAvPSAxMDA7XG4gICAgbGV0IHJlZCA9IDA7XG4gICAgbGV0IGdyZWVuID0gMDtcbiAgICBsZXQgYmx1ZSA9IDA7XG4gICAgaWYgKCFzYXR1cmF0aW9uKSB7XG4gICAgICAgIHJlZCA9IGdyZWVuID0gYmx1ZSA9IGxpZ2h0bmVzcztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHEgPSBsaWdodG5lc3MgPCAwLjVcbiAgICAgICAgICAgID8gbGlnaHRuZXNzICogKDEgKyBzYXR1cmF0aW9uKVxuICAgICAgICAgICAgOiBsaWdodG5lc3MgKyBzYXR1cmF0aW9uIC0gbGlnaHRuZXNzICogc2F0dXJhdGlvbjtcbiAgICAgICAgY29uc3QgcCA9IDIgKiBsaWdodG5lc3MgLSBxO1xuICAgICAgICByZWQgPSBodWVUb1JnYihwLCBxLCBodWUgKyAxIC8gMyk7XG4gICAgICAgIGdyZWVuID0gaHVlVG9SZ2IocCwgcSwgaHVlKTtcbiAgICAgICAgYmx1ZSA9IGh1ZVRvUmdiKHAsIHEsIGh1ZSAtIDEgLyAzKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVkOiBNYXRoLnJvdW5kKHJlZCAqIDI1NSksXG4gICAgICAgIGdyZWVuOiBNYXRoLnJvdW5kKGdyZWVuICogMjU1KSxcbiAgICAgICAgYmx1ZTogTWF0aC5yb3VuZChibHVlICogMjU1KSxcbiAgICAgICAgYWxwaGEsXG4gICAgfTtcbn1cblxuZXhwb3J0IHsgaHNsYVRvUmdiYSB9O1xuIiwiaW1wb3J0IHsgbWl4IH0gZnJvbSAnLi9taXgubWpzJztcbmltcG9ydCB7IGhzbGEsIHJnYmEsIGhleCB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcbmltcG9ydCB7IGludmFyaWFudCB9IGZyb20gJ2hleS1saXN0ZW4nO1xuaW1wb3J0IHsgaHNsYVRvUmdiYSB9IGZyb20gJy4vaHNsYS10by1yZ2JhLm1qcyc7XG5cbmNvbnN0IG1peExpbmVhckNvbG9yID0gKGZyb20sIHRvLCB2KSA9PiB7XG4gICAgY29uc3QgZnJvbUV4cG8gPSBmcm9tICogZnJvbTtcbiAgICBjb25zdCB0b0V4cG8gPSB0byAqIHRvO1xuICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5tYXgoMCwgdiAqICh0b0V4cG8gLSBmcm9tRXhwbykgKyBmcm9tRXhwbykpO1xufTtcbmNvbnN0IGNvbG9yVHlwZXMgPSBbaGV4LCByZ2JhLCBoc2xhXTtcbmNvbnN0IGdldENvbG9yVHlwZSA9ICh2KSA9PiBjb2xvclR5cGVzLmZpbmQoKHR5cGUpID0+IHR5cGUudGVzdCh2KSk7XG5jb25zdCBub3RBbmltYXRhYmxlID0gKGNvbG9yKSA9PiBgJyR7Y29sb3J9JyBpcyBub3QgYW4gYW5pbWF0YWJsZSBjb2xvci4gVXNlIHRoZSBlcXVpdmFsZW50IGNvbG9yIGNvZGUgaW5zdGVhZC5gO1xuY29uc3QgbWl4Q29sb3IgPSAoZnJvbSwgdG8pID0+IHtcbiAgICBsZXQgZnJvbUNvbG9yVHlwZSA9IGdldENvbG9yVHlwZShmcm9tKTtcbiAgICBsZXQgdG9Db2xvclR5cGUgPSBnZXRDb2xvclR5cGUodG8pO1xuICAgIGludmFyaWFudCghIWZyb21Db2xvclR5cGUsIG5vdEFuaW1hdGFibGUoZnJvbSkpO1xuICAgIGludmFyaWFudCghIXRvQ29sb3JUeXBlLCBub3RBbmltYXRhYmxlKHRvKSk7XG4gICAgbGV0IGZyb21Db2xvciA9IGZyb21Db2xvclR5cGUucGFyc2UoZnJvbSk7XG4gICAgbGV0IHRvQ29sb3IgPSB0b0NvbG9yVHlwZS5wYXJzZSh0byk7XG4gICAgaWYgKGZyb21Db2xvclR5cGUgPT09IGhzbGEpIHtcbiAgICAgICAgZnJvbUNvbG9yID0gaHNsYVRvUmdiYShmcm9tQ29sb3IpO1xuICAgICAgICBmcm9tQ29sb3JUeXBlID0gcmdiYTtcbiAgICB9XG4gICAgaWYgKHRvQ29sb3JUeXBlID09PSBoc2xhKSB7XG4gICAgICAgIHRvQ29sb3IgPSBoc2xhVG9SZ2JhKHRvQ29sb3IpO1xuICAgICAgICB0b0NvbG9yVHlwZSA9IHJnYmE7XG4gICAgfVxuICAgIGNvbnN0IGJsZW5kZWQgPSBPYmplY3QuYXNzaWduKHt9LCBmcm9tQ29sb3IpO1xuICAgIHJldHVybiAodikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBibGVuZGVkKSB7XG4gICAgICAgICAgICBpZiAoa2V5ICE9PSBcImFscGhhXCIpIHtcbiAgICAgICAgICAgICAgICBibGVuZGVkW2tleV0gPSBtaXhMaW5lYXJDb2xvcihmcm9tQ29sb3Jba2V5XSwgdG9Db2xvcltrZXldLCB2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBibGVuZGVkLmFscGhhID0gbWl4KGZyb21Db2xvci5hbHBoYSwgdG9Db2xvci5hbHBoYSwgdik7XG4gICAgICAgIHJldHVybiBmcm9tQ29sb3JUeXBlLnRyYW5zZm9ybShibGVuZGVkKTtcbiAgICB9O1xufTtcblxuZXhwb3J0IHsgbWl4Q29sb3IsIG1peExpbmVhckNvbG9yIH07XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWxzLm1qcyc7XG5pbXBvcnQgeyBoZXggfSBmcm9tICcuL2hleC5tanMnO1xuaW1wb3J0IHsgaHNsYSB9IGZyb20gJy4vaHNsYS5tanMnO1xuaW1wb3J0IHsgcmdiYSB9IGZyb20gJy4vcmdiYS5tanMnO1xuXG5jb25zdCBjb2xvciA9IHtcbiAgICB0ZXN0OiAodikgPT4gcmdiYS50ZXN0KHYpIHx8IGhleC50ZXN0KHYpIHx8IGhzbGEudGVzdCh2KSxcbiAgICBwYXJzZTogKHYpID0+IHtcbiAgICAgICAgaWYgKHJnYmEudGVzdCh2KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJnYmEucGFyc2Uodik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHNsYS50ZXN0KHYpKSB7XG4gICAgICAgICAgICByZXR1cm4gaHNsYS5wYXJzZSh2KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBoZXgucGFyc2Uodik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHRyYW5zZm9ybTogKHYpID0+IHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHYpXG4gICAgICAgICAgICA/IHZcbiAgICAgICAgICAgIDogdi5oYXNPd25Qcm9wZXJ0eSgncmVkJylcbiAgICAgICAgICAgICAgICA/IHJnYmEudHJhbnNmb3JtKHYpXG4gICAgICAgICAgICAgICAgOiBoc2xhLnRyYW5zZm9ybSh2KTtcbiAgICB9LFxufTtcblxuZXhwb3J0IHsgY29sb3IgfTtcbiIsImltcG9ydCB7IGNvbG9yIH0gZnJvbSAnLi4vY29sb3IvaW5kZXgubWpzJztcbmltcG9ydCB7IG51bWJlciB9IGZyb20gJy4uL251bWJlcnMvaW5kZXgubWpzJztcbmltcG9ydCB7IGlzU3RyaW5nLCBmbG9hdFJlZ2V4LCBjb2xvclJlZ2V4LCBzYW5pdGl6ZSB9IGZyb20gJy4uL3V0aWxzLm1qcyc7XG5cbmNvbnN0IGNvbG9yVG9rZW4gPSAnJHtjfSc7XG5jb25zdCBudW1iZXJUb2tlbiA9ICcke259JztcbmZ1bmN0aW9uIHRlc3Qodikge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICByZXR1cm4gKGlzTmFOKHYpICYmXG4gICAgICAgIGlzU3RyaW5nKHYpICYmXG4gICAgICAgICgoX2IgPSAoX2EgPSB2Lm1hdGNoKGZsb2F0UmVnZXgpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAwKSArICgoX2QgPSAoX2MgPSB2Lm1hdGNoKGNvbG9yUmVnZXgpKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAwKSA+IDApO1xufVxuZnVuY3Rpb24gYW5hbHlzZSh2KSB7XG4gICAgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJylcbiAgICAgICAgdiA9IGAke3Z9YDtcbiAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICBsZXQgbnVtQ29sb3JzID0gMDtcbiAgICBjb25zdCBjb2xvcnMgPSB2Lm1hdGNoKGNvbG9yUmVnZXgpO1xuICAgIGlmIChjb2xvcnMpIHtcbiAgICAgICAgbnVtQ29sb3JzID0gY29sb3JzLmxlbmd0aDtcbiAgICAgICAgdiA9IHYucmVwbGFjZShjb2xvclJlZ2V4LCBjb2xvclRva2VuKTtcbiAgICAgICAgdmFsdWVzLnB1c2goLi4uY29sb3JzLm1hcChjb2xvci5wYXJzZSkpO1xuICAgIH1cbiAgICBjb25zdCBudW1iZXJzID0gdi5tYXRjaChmbG9hdFJlZ2V4KTtcbiAgICBpZiAobnVtYmVycykge1xuICAgICAgICB2ID0gdi5yZXBsYWNlKGZsb2F0UmVnZXgsIG51bWJlclRva2VuKTtcbiAgICAgICAgdmFsdWVzLnB1c2goLi4ubnVtYmVycy5tYXAobnVtYmVyLnBhcnNlKSk7XG4gICAgfVxuICAgIHJldHVybiB7IHZhbHVlcywgbnVtQ29sb3JzLCB0b2tlbmlzZWQ6IHYgfTtcbn1cbmZ1bmN0aW9uIHBhcnNlKHYpIHtcbiAgICByZXR1cm4gYW5hbHlzZSh2KS52YWx1ZXM7XG59XG5mdW5jdGlvbiBjcmVhdGVUcmFuc2Zvcm1lcih2KSB7XG4gICAgY29uc3QgeyB2YWx1ZXMsIG51bUNvbG9ycywgdG9rZW5pc2VkIH0gPSBhbmFseXNlKHYpO1xuICAgIGNvbnN0IG51bVZhbHVlcyA9IHZhbHVlcy5sZW5ndGg7XG4gICAgcmV0dXJuICh2KSA9PiB7XG4gICAgICAgIGxldCBvdXRwdXQgPSB0b2tlbmlzZWQ7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtVmFsdWVzOyBpKyspIHtcbiAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKGkgPCBudW1Db2xvcnMgPyBjb2xvclRva2VuIDogbnVtYmVyVG9rZW4sIGkgPCBudW1Db2xvcnMgPyBjb2xvci50cmFuc2Zvcm0odltpXSkgOiBzYW5pdGl6ZSh2W2ldKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9O1xufVxuY29uc3QgY29udmVydE51bWJlcnNUb1plcm8gPSAodikgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInID8gMCA6IHY7XG5mdW5jdGlvbiBnZXRBbmltYXRhYmxlTm9uZSh2KSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2Uodik7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVUcmFuc2Zvcm1lcih2KTtcbiAgICByZXR1cm4gdHJhbnNmb3JtZXIocGFyc2VkLm1hcChjb252ZXJ0TnVtYmVyc1RvWmVybykpO1xufVxuY29uc3QgY29tcGxleCA9IHsgdGVzdCwgcGFyc2UsIGNyZWF0ZVRyYW5zZm9ybWVyLCBnZXRBbmltYXRhYmxlTm9uZSB9O1xuXG5leHBvcnQgeyBjb21wbGV4IH07XG4iLCJjb25zdCB6ZXJvUG9pbnQgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwLFxuICAgIHo6IDBcbn07XG5jb25zdCBpc051bSA9ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcic7XG5cbmV4cG9ydCB7IGlzTnVtLCB6ZXJvUG9pbnQgfTtcbiIsImltcG9ydCB7IGNvbXBsZXgsIGNvbG9yIH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuaW1wb3J0IHsgbWl4IH0gZnJvbSAnLi9taXgubWpzJztcbmltcG9ydCB7IG1peENvbG9yIH0gZnJvbSAnLi9taXgtY29sb3IubWpzJztcbmltcG9ydCB7IGlzTnVtIH0gZnJvbSAnLi9pbmMubWpzJztcbmltcG9ydCB7IHBpcGUgfSBmcm9tICcuL3BpcGUubWpzJztcbmltcG9ydCB7IHdhcm5pbmcgfSBmcm9tICdoZXktbGlzdGVuJztcblxuZnVuY3Rpb24gZ2V0TWl4ZXIob3JpZ2luLCB0YXJnZXQpIHtcbiAgICBpZiAoaXNOdW0ob3JpZ2luKSkge1xuICAgICAgICByZXR1cm4gKHYpID0+IG1peChvcmlnaW4sIHRhcmdldCwgdik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNvbG9yLnRlc3Qob3JpZ2luKSkge1xuICAgICAgICByZXR1cm4gbWl4Q29sb3Iob3JpZ2luLCB0YXJnZXQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG1peENvbXBsZXgob3JpZ2luLCB0YXJnZXQpO1xuICAgIH1cbn1cbmNvbnN0IG1peEFycmF5ID0gKGZyb20sIHRvKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gWy4uLmZyb21dO1xuICAgIGNvbnN0IG51bVZhbHVlcyA9IG91dHB1dC5sZW5ndGg7XG4gICAgY29uc3QgYmxlbmRWYWx1ZSA9IGZyb20ubWFwKChmcm9tVGhpcywgaSkgPT4gZ2V0TWl4ZXIoZnJvbVRoaXMsIHRvW2ldKSk7XG4gICAgcmV0dXJuICh2KSA9PiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtVmFsdWVzOyBpKyspIHtcbiAgICAgICAgICAgIG91dHB1dFtpXSA9IGJsZW5kVmFsdWVbaV0odik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9O1xufTtcbmNvbnN0IG1peE9iamVjdCA9IChvcmlnaW4sIHRhcmdldCkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3JpZ2luKSwgdGFyZ2V0KTtcbiAgICBjb25zdCBibGVuZFZhbHVlID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3V0cHV0KSB7XG4gICAgICAgIGlmIChvcmlnaW5ba2V5XSAhPT0gdW5kZWZpbmVkICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGJsZW5kVmFsdWVba2V5XSA9IGdldE1peGVyKG9yaWdpbltrZXldLCB0YXJnZXRba2V5XSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICh2KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGJsZW5kVmFsdWUpIHtcbiAgICAgICAgICAgIG91dHB1dFtrZXldID0gYmxlbmRWYWx1ZVtrZXldKHYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfTtcbn07XG5mdW5jdGlvbiBhbmFseXNlKHZhbHVlKSB7XG4gICAgY29uc3QgcGFyc2VkID0gY29tcGxleC5wYXJzZSh2YWx1ZSk7XG4gICAgY29uc3QgbnVtVmFsdWVzID0gcGFyc2VkLmxlbmd0aDtcbiAgICBsZXQgbnVtTnVtYmVycyA9IDA7XG4gICAgbGV0IG51bVJHQiA9IDA7XG4gICAgbGV0IG51bUhTTCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1WYWx1ZXM7IGkrKykge1xuICAgICAgICBpZiAobnVtTnVtYmVycyB8fCB0eXBlb2YgcGFyc2VkW2ldID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBudW1OdW1iZXJzKys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAocGFyc2VkW2ldLmh1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbnVtSFNMKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBudW1SR0IrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBwYXJzZWQsIG51bU51bWJlcnMsIG51bVJHQiwgbnVtSFNMIH07XG59XG5jb25zdCBtaXhDb21wbGV4ID0gKG9yaWdpbiwgdGFyZ2V0KSA9PiB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBjb21wbGV4LmNyZWF0ZVRyYW5zZm9ybWVyKHRhcmdldCk7XG4gICAgY29uc3Qgb3JpZ2luU3RhdHMgPSBhbmFseXNlKG9yaWdpbik7XG4gICAgY29uc3QgdGFyZ2V0U3RhdHMgPSBhbmFseXNlKHRhcmdldCk7XG4gICAgY29uc3QgY2FuSW50ZXJwb2xhdGUgPSBvcmlnaW5TdGF0cy5udW1IU0wgPT09IHRhcmdldFN0YXRzLm51bUhTTCAmJlxuICAgICAgICBvcmlnaW5TdGF0cy5udW1SR0IgPT09IHRhcmdldFN0YXRzLm51bVJHQiAmJlxuICAgICAgICBvcmlnaW5TdGF0cy5udW1OdW1iZXJzID49IHRhcmdldFN0YXRzLm51bU51bWJlcnM7XG4gICAgaWYgKGNhbkludGVycG9sYXRlKSB7XG4gICAgICAgIHJldHVybiBwaXBlKG1peEFycmF5KG9yaWdpblN0YXRzLnBhcnNlZCwgdGFyZ2V0U3RhdHMucGFyc2VkKSwgdGVtcGxhdGUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgd2FybmluZyh0cnVlLCBgQ29tcGxleCB2YWx1ZXMgJyR7b3JpZ2lufScgYW5kICcke3RhcmdldH0nIHRvbyBkaWZmZXJlbnQgdG8gbWl4LiBFbnN1cmUgYWxsIGNvbG9ycyBhcmUgb2YgdGhlIHNhbWUgdHlwZSwgYW5kIHRoYXQgZWFjaCBjb250YWlucyB0aGUgc2FtZSBxdWFudGl0eSBvZiBudW1iZXIgYW5kIGNvbG9yIHZhbHVlcy4gRmFsbGluZyBiYWNrIHRvIGluc3RhbnQgdHJhbnNpdGlvbi5gKTtcbiAgICAgICAgcmV0dXJuIChwKSA9PiBgJHtwID4gMCA/IHRhcmdldCA6IG9yaWdpbn1gO1xuICAgIH1cbn07XG5cbmV4cG9ydCB7IG1peEFycmF5LCBtaXhDb21wbGV4LCBtaXhPYmplY3QgfTtcbiIsImltcG9ydCB7IHByb2dyZXNzIH0gZnJvbSAnLi9wcm9ncmVzcy5tanMnO1xuaW1wb3J0IHsgbWl4IH0gZnJvbSAnLi9taXgubWpzJztcbmltcG9ydCB7IG1peENvbG9yIH0gZnJvbSAnLi9taXgtY29sb3IubWpzJztcbmltcG9ydCB7IG1peENvbXBsZXgsIG1peEFycmF5LCBtaXhPYmplY3QgfSBmcm9tICcuL21peC1jb21wbGV4Lm1qcyc7XG5pbXBvcnQgeyBjb2xvciB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcbmltcG9ydCB7IGNsYW1wIH0gZnJvbSAnLi9jbGFtcC5tanMnO1xuaW1wb3J0IHsgcGlwZSB9IGZyb20gJy4vcGlwZS5tanMnO1xuaW1wb3J0IHsgaW52YXJpYW50IH0gZnJvbSAnaGV5LWxpc3Rlbic7XG5cbmNvbnN0IG1peE51bWJlciA9IChmcm9tLCB0bykgPT4gKHApID0+IG1peChmcm9tLCB0bywgcCk7XG5mdW5jdGlvbiBkZXRlY3RNaXhlckZhY3Rvcnkodikge1xuICAgIGlmICh0eXBlb2YgdiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIG1peE51bWJlcjtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChjb2xvci50ZXN0KHYpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWl4Q29sb3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbWl4Q29tcGxleDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgIHJldHVybiBtaXhBcnJheTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHYgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBtaXhPYmplY3Q7XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlTWl4ZXJzKG91dHB1dCwgZWFzZSwgY3VzdG9tTWl4ZXIpIHtcbiAgICBjb25zdCBtaXhlcnMgPSBbXTtcbiAgICBjb25zdCBtaXhlckZhY3RvcnkgPSBjdXN0b21NaXhlciB8fCBkZXRlY3RNaXhlckZhY3Rvcnkob3V0cHV0WzBdKTtcbiAgICBjb25zdCBudW1NaXhlcnMgPSBvdXRwdXQubGVuZ3RoIC0gMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU1peGVyczsgaSsrKSB7XG4gICAgICAgIGxldCBtaXhlciA9IG1peGVyRmFjdG9yeShvdXRwdXRbaV0sIG91dHB1dFtpICsgMV0pO1xuICAgICAgICBpZiAoZWFzZSkge1xuICAgICAgICAgICAgY29uc3QgZWFzaW5nRnVuY3Rpb24gPSBBcnJheS5pc0FycmF5KGVhc2UpID8gZWFzZVtpXSA6IGVhc2U7XG4gICAgICAgICAgICBtaXhlciA9IHBpcGUoZWFzaW5nRnVuY3Rpb24sIG1peGVyKTtcbiAgICAgICAgfVxuICAgICAgICBtaXhlcnMucHVzaChtaXhlcik7XG4gICAgfVxuICAgIHJldHVybiBtaXhlcnM7XG59XG5mdW5jdGlvbiBmYXN0SW50ZXJwb2xhdGUoW2Zyb20sIHRvXSwgW21peGVyXSkge1xuICAgIHJldHVybiAodikgPT4gbWl4ZXIocHJvZ3Jlc3MoZnJvbSwgdG8sIHYpKTtcbn1cbmZ1bmN0aW9uIHNsb3dJbnRlcnBvbGF0ZShpbnB1dCwgbWl4ZXJzKSB7XG4gICAgY29uc3QgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gICAgY29uc3QgbGFzdElucHV0SW5kZXggPSBpbnB1dExlbmd0aCAtIDE7XG4gICAgcmV0dXJuICh2KSA9PiB7XG4gICAgICAgIGxldCBtaXhlckluZGV4ID0gMDtcbiAgICAgICAgbGV0IGZvdW5kTWl4ZXJJbmRleCA9IGZhbHNlO1xuICAgICAgICBpZiAodiA8PSBpbnB1dFswXSkge1xuICAgICAgICAgICAgZm91bmRNaXhlckluZGV4ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2ID49IGlucHV0W2xhc3RJbnB1dEluZGV4XSkge1xuICAgICAgICAgICAgbWl4ZXJJbmRleCA9IGxhc3RJbnB1dEluZGV4IC0gMTtcbiAgICAgICAgICAgIGZvdW5kTWl4ZXJJbmRleCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb3VuZE1peGVySW5kZXgpIHtcbiAgICAgICAgICAgIGxldCBpID0gMTtcbiAgICAgICAgICAgIGZvciAoOyBpIDwgaW5wdXRMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dFtpXSA+IHYgfHwgaSA9PT0gbGFzdElucHV0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWl4ZXJJbmRleCA9IGkgLSAxO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb2dyZXNzSW5SYW5nZSA9IHByb2dyZXNzKGlucHV0W21peGVySW5kZXhdLCBpbnB1dFttaXhlckluZGV4ICsgMV0sIHYpO1xuICAgICAgICByZXR1cm4gbWl4ZXJzW21peGVySW5kZXhdKHByb2dyZXNzSW5SYW5nZSk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGludGVycG9sYXRlKGlucHV0LCBvdXRwdXQsIHsgY2xhbXA6IGlzQ2xhbXAgPSB0cnVlLCBlYXNlLCBtaXhlciB9ID0ge30pIHtcbiAgICBjb25zdCBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgICBpbnZhcmlhbnQoaW5wdXRMZW5ndGggPT09IG91dHB1dC5sZW5ndGgsICdCb3RoIGlucHV0IGFuZCBvdXRwdXQgcmFuZ2VzIG11c3QgYmUgdGhlIHNhbWUgbGVuZ3RoJyk7XG4gICAgaW52YXJpYW50KCFlYXNlIHx8ICFBcnJheS5pc0FycmF5KGVhc2UpIHx8IGVhc2UubGVuZ3RoID09PSBpbnB1dExlbmd0aCAtIDEsICdBcnJheSBvZiBlYXNpbmcgZnVuY3Rpb25zIG11c3QgYmUgb2YgbGVuZ3RoIGBpbnB1dC5sZW5ndGggLSAxYCwgYXMgaXQgYXBwbGllcyB0byB0aGUgdHJhbnNpdGlvbnMgKipiZXR3ZWVuKiogdGhlIGRlZmluZWQgdmFsdWVzLicpO1xuICAgIGlmIChpbnB1dFswXSA+IGlucHV0W2lucHV0TGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgaW5wdXQgPSBbXS5jb25jYXQoaW5wdXQpO1xuICAgICAgICBvdXRwdXQgPSBbXS5jb25jYXQob3V0cHV0KTtcbiAgICAgICAgaW5wdXQucmV2ZXJzZSgpO1xuICAgICAgICBvdXRwdXQucmV2ZXJzZSgpO1xuICAgIH1cbiAgICBjb25zdCBtaXhlcnMgPSBjcmVhdGVNaXhlcnMob3V0cHV0LCBlYXNlLCBtaXhlcik7XG4gICAgY29uc3QgaW50ZXJwb2xhdG9yID0gaW5wdXRMZW5ndGggPT09IDJcbiAgICAgICAgPyBmYXN0SW50ZXJwb2xhdGUoaW5wdXQsIG1peGVycylcbiAgICAgICAgOiBzbG93SW50ZXJwb2xhdGUoaW5wdXQsIG1peGVycyk7XG4gICAgcmV0dXJuIGlzQ2xhbXBcbiAgICAgICAgPyAodikgPT4gaW50ZXJwb2xhdG9yKGNsYW1wKGlucHV0WzBdLCBpbnB1dFtpbnB1dExlbmd0aCAtIDFdLCB2KSlcbiAgICAgICAgOiBpbnRlcnBvbGF0b3I7XG59XG5cbmV4cG9ydCB7IGludGVycG9sYXRlIH07XG4iLCJjb25zdCByZXZlcnNlRWFzaW5nID0gZWFzaW5nID0+IHAgPT4gMSAtIGVhc2luZygxIC0gcCk7XG5jb25zdCBtaXJyb3JFYXNpbmcgPSBlYXNpbmcgPT4gcCA9PiBwIDw9IDAuNSA/IGVhc2luZygyICogcCkgLyAyIDogKDIgLSBlYXNpbmcoMiAqICgxIC0gcCkpKSAvIDI7XG5jb25zdCBjcmVhdGVFeHBvSW4gPSAocG93ZXIpID0+IHAgPT4gTWF0aC5wb3cocCwgcG93ZXIpO1xuY29uc3QgY3JlYXRlQmFja0luID0gKHBvd2VyKSA9PiBwID0+IHAgKiBwICogKChwb3dlciArIDEpICogcCAtIHBvd2VyKTtcbmNvbnN0IGNyZWF0ZUFudGljaXBhdGUgPSAocG93ZXIpID0+IHtcbiAgICBjb25zdCBiYWNrRWFzaW5nID0gY3JlYXRlQmFja0luKHBvd2VyKTtcbiAgICByZXR1cm4gcCA9PiAocCAqPSAyKSA8IDFcbiAgICAgICAgPyAwLjUgKiBiYWNrRWFzaW5nKHApXG4gICAgICAgIDogMC41ICogKDIgLSBNYXRoLnBvdygyLCAtMTAgKiAocCAtIDEpKSk7XG59O1xuXG5leHBvcnQgeyBjcmVhdGVBbnRpY2lwYXRlLCBjcmVhdGVCYWNrSW4sIGNyZWF0ZUV4cG9JbiwgbWlycm9yRWFzaW5nLCByZXZlcnNlRWFzaW5nIH07XG4iLCJpbXBvcnQgeyBjcmVhdGVFeHBvSW4sIHJldmVyc2VFYXNpbmcsIG1pcnJvckVhc2luZywgY3JlYXRlQmFja0luLCBjcmVhdGVBbnRpY2lwYXRlIH0gZnJvbSAnLi91dGlscy5tanMnO1xuXG5jb25zdCBERUZBVUxUX09WRVJTSE9PVF9TVFJFTkdUSCA9IDEuNTI1O1xuY29uc3QgQk9VTkNFX0ZJUlNUX1RIUkVTSE9MRCA9IDQuMCAvIDExLjA7XG5jb25zdCBCT1VOQ0VfU0VDT05EX1RIUkVTSE9MRCA9IDguMCAvIDExLjA7XG5jb25zdCBCT1VOQ0VfVEhJUkRfVEhSRVNIT0xEID0gOS4wIC8gMTAuMDtcbmNvbnN0IGxpbmVhciA9IHAgPT4gcDtcbmNvbnN0IGVhc2VJbiA9IGNyZWF0ZUV4cG9JbigyKTtcbmNvbnN0IGVhc2VPdXQgPSByZXZlcnNlRWFzaW5nKGVhc2VJbik7XG5jb25zdCBlYXNlSW5PdXQgPSBtaXJyb3JFYXNpbmcoZWFzZUluKTtcbmNvbnN0IGNpcmNJbiA9IHAgPT4gMSAtIE1hdGguc2luKE1hdGguYWNvcyhwKSk7XG5jb25zdCBjaXJjT3V0ID0gcmV2ZXJzZUVhc2luZyhjaXJjSW4pO1xuY29uc3QgY2lyY0luT3V0ID0gbWlycm9yRWFzaW5nKGNpcmNPdXQpO1xuY29uc3QgYmFja0luID0gY3JlYXRlQmFja0luKERFRkFVTFRfT1ZFUlNIT09UX1NUUkVOR1RIKTtcbmNvbnN0IGJhY2tPdXQgPSByZXZlcnNlRWFzaW5nKGJhY2tJbik7XG5jb25zdCBiYWNrSW5PdXQgPSBtaXJyb3JFYXNpbmcoYmFja0luKTtcbmNvbnN0IGFudGljaXBhdGUgPSBjcmVhdGVBbnRpY2lwYXRlKERFRkFVTFRfT1ZFUlNIT09UX1NUUkVOR1RIKTtcbmNvbnN0IGNhID0gNDM1Ni4wIC8gMzYxLjA7XG5jb25zdCBjYiA9IDM1NDQyLjAgLyAxODA1LjA7XG5jb25zdCBjYyA9IDE2MDYxLjAgLyAxODA1LjA7XG5jb25zdCBib3VuY2VPdXQgPSAocCkgPT4ge1xuICAgIGlmIChwID09PSAxIHx8IHAgPT09IDApXG4gICAgICAgIHJldHVybiBwO1xuICAgIGNvbnN0IHAyID0gcCAqIHA7XG4gICAgcmV0dXJuIHAgPCBCT1VOQ0VfRklSU1RfVEhSRVNIT0xEXG4gICAgICAgID8gNy41NjI1ICogcDJcbiAgICAgICAgOiBwIDwgQk9VTkNFX1NFQ09ORF9USFJFU0hPTERcbiAgICAgICAgICAgID8gOS4wNzUgKiBwMiAtIDkuOSAqIHAgKyAzLjRcbiAgICAgICAgICAgIDogcCA8IEJPVU5DRV9USElSRF9USFJFU0hPTERcbiAgICAgICAgICAgICAgICA/IGNhICogcDIgLSBjYiAqIHAgKyBjY1xuICAgICAgICAgICAgICAgIDogMTAuOCAqIHAgKiBwIC0gMjAuNTIgKiBwICsgMTAuNzI7XG59O1xuY29uc3QgYm91bmNlSW4gPSByZXZlcnNlRWFzaW5nKGJvdW5jZU91dCk7XG5jb25zdCBib3VuY2VJbk91dCA9IChwKSA9PiBwIDwgMC41XG4gICAgPyAwLjUgKiAoMS4wIC0gYm91bmNlT3V0KDEuMCAtIHAgKiAyLjApKVxuICAgIDogMC41ICogYm91bmNlT3V0KHAgKiAyLjAgLSAxLjApICsgMC41O1xuXG5leHBvcnQgeyBhbnRpY2lwYXRlLCBiYWNrSW4sIGJhY2tJbk91dCwgYmFja091dCwgYm91bmNlSW4sIGJvdW5jZUluT3V0LCBib3VuY2VPdXQsIGNpcmNJbiwgY2lyY0luT3V0LCBjaXJjT3V0LCBlYXNlSW4sIGVhc2VJbk91dCwgZWFzZU91dCwgbGluZWFyIH07XG4iLCJpbXBvcnQgeyBpbnRlcnBvbGF0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2ludGVycG9sYXRlLm1qcyc7XG5pbXBvcnQgeyBlYXNlSW5PdXQgfSBmcm9tICcuLi8uLi9lYXNpbmcvaW5kZXgubWpzJztcblxuZnVuY3Rpb24gZGVmYXVsdEVhc2luZyh2YWx1ZXMsIGVhc2luZykge1xuICAgIHJldHVybiB2YWx1ZXMubWFwKCgpID0+IGVhc2luZyB8fCBlYXNlSW5PdXQpLnNwbGljZSgwLCB2YWx1ZXMubGVuZ3RoIC0gMSk7XG59XG5mdW5jdGlvbiBkZWZhdWx0T2Zmc2V0KHZhbHVlcykge1xuICAgIGNvbnN0IG51bVZhbHVlcyA9IHZhbHVlcy5sZW5ndGg7XG4gICAgcmV0dXJuIHZhbHVlcy5tYXAoKF92YWx1ZSwgaSkgPT4gaSAhPT0gMCA/IGkgLyAobnVtVmFsdWVzIC0gMSkgOiAwKTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRPZmZzZXRUb1RpbWVzKG9mZnNldCwgZHVyYXRpb24pIHtcbiAgICByZXR1cm4gb2Zmc2V0Lm1hcCgobykgPT4gbyAqIGR1cmF0aW9uKTtcbn1cbmZ1bmN0aW9uIGtleWZyYW1lcyh7IGZyb20gPSAwLCB0byA9IDEsIGVhc2UsIG9mZnNldCwgZHVyYXRpb24gPSAzMDAsIH0pIHtcbiAgICBjb25zdCBzdGF0ZSA9IHsgZG9uZTogZmFsc2UsIHZhbHVlOiBmcm9tIH07XG4gICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh0bykgPyB0byA6IFtmcm9tLCB0b107XG4gICAgY29uc3QgdGltZXMgPSBjb252ZXJ0T2Zmc2V0VG9UaW1lcyhvZmZzZXQgJiYgb2Zmc2V0Lmxlbmd0aCA9PT0gdmFsdWVzLmxlbmd0aFxuICAgICAgICA/IG9mZnNldFxuICAgICAgICA6IGRlZmF1bHRPZmZzZXQodmFsdWVzKSwgZHVyYXRpb24pO1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUludGVycG9sYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIGludGVycG9sYXRlKHRpbWVzLCB2YWx1ZXMsIHtcbiAgICAgICAgICAgIGVhc2U6IEFycmF5LmlzQXJyYXkoZWFzZSkgPyBlYXNlIDogZGVmYXVsdEVhc2luZyh2YWx1ZXMsIGVhc2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbGV0IGludGVycG9sYXRvciA9IGNyZWF0ZUludGVycG9sYXRvcigpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6ICh0KSA9PiB7XG4gICAgICAgICAgICBzdGF0ZS52YWx1ZSA9IGludGVycG9sYXRvcih0KTtcbiAgICAgICAgICAgIHN0YXRlLmRvbmUgPSB0ID49IGR1cmF0aW9uO1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICB9LFxuICAgICAgICBmbGlwVGFyZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICB2YWx1ZXMucmV2ZXJzZSgpO1xuICAgICAgICAgICAgaW50ZXJwb2xhdG9yID0gY3JlYXRlSW50ZXJwb2xhdG9yKCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuZXhwb3J0IHsgY29udmVydE9mZnNldFRvVGltZXMsIGRlZmF1bHRFYXNpbmcsIGRlZmF1bHRPZmZzZXQsIGtleWZyYW1lcyB9O1xuIiwiaW1wb3J0IHsgc3ByaW5nIH0gZnJvbSAnLi4vZ2VuZXJhdG9ycy9zcHJpbmcubWpzJztcbmltcG9ydCB7IGtleWZyYW1lcyB9IGZyb20gJy4uL2dlbmVyYXRvcnMva2V5ZnJhbWVzLm1qcyc7XG5pbXBvcnQgeyBkZWNheSB9IGZyb20gJy4uL2dlbmVyYXRvcnMvZGVjYXkubWpzJztcblxuY29uc3QgdHlwZXMgPSB7IGtleWZyYW1lcywgc3ByaW5nLCBkZWNheSB9O1xuZnVuY3Rpb24gZGV0ZWN0QW5pbWF0aW9uRnJvbU9wdGlvbnMoY29uZmlnKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29uZmlnLnRvKSkge1xuICAgICAgICByZXR1cm4ga2V5ZnJhbWVzO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlc1tjb25maWcudHlwZV0pIHtcbiAgICAgICAgcmV0dXJuIHR5cGVzW2NvbmZpZy50eXBlXTtcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXMoY29uZmlnKSk7XG4gICAgaWYgKGtleXMuaGFzKFwiZWFzZVwiKSB8fFxuICAgICAgICAoa2V5cy5oYXMoXCJkdXJhdGlvblwiKSAmJiAha2V5cy5oYXMoXCJkYW1waW5nUmF0aW9cIikpKSB7XG4gICAgICAgIHJldHVybiBrZXlmcmFtZXM7XG4gICAgfVxuICAgIGVsc2UgaWYgKGtleXMuaGFzKFwiZGFtcGluZ1JhdGlvXCIpIHx8XG4gICAgICAgIGtleXMuaGFzKFwic3RpZmZuZXNzXCIpIHx8XG4gICAgICAgIGtleXMuaGFzKFwibWFzc1wiKSB8fFxuICAgICAgICBrZXlzLmhhcyhcImRhbXBpbmdcIikgfHxcbiAgICAgICAga2V5cy5oYXMoXCJyZXN0U3BlZWRcIikgfHxcbiAgICAgICAga2V5cy5oYXMoXCJyZXN0RGVsdGFcIikpIHtcbiAgICAgICAgcmV0dXJuIHNwcmluZztcbiAgICB9XG4gICAgcmV0dXJuIGtleWZyYW1lcztcbn1cblxuZXhwb3J0IHsgZGV0ZWN0QW5pbWF0aW9uRnJvbU9wdGlvbnMgfTtcbiIsImZ1bmN0aW9uIGRlY2F5KHsgdmVsb2NpdHkgPSAwLCBmcm9tID0gMCwgcG93ZXIgPSAwLjgsIHRpbWVDb25zdGFudCA9IDM1MCwgcmVzdERlbHRhID0gMC41LCBtb2RpZnlUYXJnZXQsIH0pIHtcbiAgICBjb25zdCBzdGF0ZSA9IHsgZG9uZTogZmFsc2UsIHZhbHVlOiBmcm9tIH07XG4gICAgbGV0IGFtcGxpdHVkZSA9IHBvd2VyICogdmVsb2NpdHk7XG4gICAgY29uc3QgaWRlYWwgPSBmcm9tICsgYW1wbGl0dWRlO1xuICAgIGNvbnN0IHRhcmdldCA9IG1vZGlmeVRhcmdldCA9PT0gdW5kZWZpbmVkID8gaWRlYWwgOiBtb2RpZnlUYXJnZXQoaWRlYWwpO1xuICAgIGlmICh0YXJnZXQgIT09IGlkZWFsKVxuICAgICAgICBhbXBsaXR1ZGUgPSB0YXJnZXQgLSBmcm9tO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6ICh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWx0YSA9IC1hbXBsaXR1ZGUgKiBNYXRoLmV4cCgtdCAvIHRpbWVDb25zdGFudCk7XG4gICAgICAgICAgICBzdGF0ZS5kb25lID0gIShkZWx0YSA+IHJlc3REZWx0YSB8fCBkZWx0YSA8IC1yZXN0RGVsdGEpO1xuICAgICAgICAgICAgc3RhdGUudmFsdWUgPSBzdGF0ZS5kb25lID8gdGFyZ2V0IDogdGFyZ2V0ICsgZGVsdGE7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgIH0sXG4gICAgICAgIGZsaXBUYXJnZXQ6ICgpID0+IHsgfSxcbiAgICB9O1xufVxuXG5leHBvcnQgeyBkZWNheSB9O1xuIiwiZnVuY3Rpb24gbG9vcEVsYXBzZWQoZWxhcHNlZCwgZHVyYXRpb24sIGRlbGF5ID0gMCkge1xuICAgIHJldHVybiBlbGFwc2VkIC0gZHVyYXRpb24gLSBkZWxheTtcbn1cbmZ1bmN0aW9uIHJldmVyc2VFbGFwc2VkKGVsYXBzZWQsIGR1cmF0aW9uLCBkZWxheSA9IDAsIGlzRm9yd2FyZFBsYXliYWNrID0gdHJ1ZSkge1xuICAgIHJldHVybiBpc0ZvcndhcmRQbGF5YmFja1xuICAgICAgICA/IGxvb3BFbGFwc2VkKGR1cmF0aW9uICsgLWVsYXBzZWQsIGR1cmF0aW9uLCBkZWxheSlcbiAgICAgICAgOiBkdXJhdGlvbiAtIChlbGFwc2VkIC0gZHVyYXRpb24pICsgZGVsYXk7XG59XG5mdW5jdGlvbiBoYXNSZXBlYXREZWxheUVsYXBzZWQoZWxhcHNlZCwgZHVyYXRpb24sIGRlbGF5LCBpc0ZvcndhcmRQbGF5YmFjaykge1xuICAgIHJldHVybiBpc0ZvcndhcmRQbGF5YmFjayA/IGVsYXBzZWQgPj0gZHVyYXRpb24gKyBkZWxheSA6IGVsYXBzZWQgPD0gLWRlbGF5O1xufVxuXG5leHBvcnQgeyBoYXNSZXBlYXREZWxheUVsYXBzZWQsIGxvb3BFbGFwc2VkLCByZXZlcnNlRWxhcHNlZCB9O1xuIiwiaW1wb3J0IHsgX19yZXN0IH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgZGV0ZWN0QW5pbWF0aW9uRnJvbU9wdGlvbnMgfSBmcm9tICcuL3V0aWxzL2RldGVjdC1hbmltYXRpb24tZnJvbS1vcHRpb25zLm1qcyc7XG5pbXBvcnQgc3luYywgeyBjYW5jZWxTeW5jIH0gZnJvbSAnZnJhbWVzeW5jJztcbmltcG9ydCB7IGludGVycG9sYXRlIH0gZnJvbSAnLi4vdXRpbHMvaW50ZXJwb2xhdGUubWpzJztcbmltcG9ydCB7IGhhc1JlcGVhdERlbGF5RWxhcHNlZCwgcmV2ZXJzZUVsYXBzZWQsIGxvb3BFbGFwc2VkIH0gZnJvbSAnLi91dGlscy9lbGFwc2VkLm1qcyc7XG5cbmNvbnN0IGZyYW1lc3luYyA9ICh1cGRhdGUpID0+IHtcbiAgICBjb25zdCBwYXNzVGltZXN0YW1wID0gKHsgZGVsdGEgfSkgPT4gdXBkYXRlKGRlbHRhKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdGFydDogKCkgPT4gc3luYy51cGRhdGUocGFzc1RpbWVzdGFtcCwgdHJ1ZSksXG4gICAgICAgIHN0b3A6ICgpID0+IGNhbmNlbFN5bmMudXBkYXRlKHBhc3NUaW1lc3RhbXApLFxuICAgIH07XG59O1xuZnVuY3Rpb24gYW5pbWF0ZShfYSkge1xuICAgIHZhciBfYiwgX2M7XG4gICAgdmFyIHsgZnJvbSwgYXV0b3BsYXkgPSB0cnVlLCBkcml2ZXIgPSBmcmFtZXN5bmMsIGVsYXBzZWQgPSAwLCByZXBlYXQ6IHJlcGVhdE1heCA9IDAsIHJlcGVhdFR5cGUgPSBcImxvb3BcIiwgcmVwZWF0RGVsYXkgPSAwLCBvblBsYXksIG9uU3RvcCwgb25Db21wbGV0ZSwgb25SZXBlYXQsIG9uVXBkYXRlIH0gPSBfYSwgb3B0aW9ucyA9IF9fcmVzdChfYSwgW1wiZnJvbVwiLCBcImF1dG9wbGF5XCIsIFwiZHJpdmVyXCIsIFwiZWxhcHNlZFwiLCBcInJlcGVhdFwiLCBcInJlcGVhdFR5cGVcIiwgXCJyZXBlYXREZWxheVwiLCBcIm9uUGxheVwiLCBcIm9uU3RvcFwiLCBcIm9uQ29tcGxldGVcIiwgXCJvblJlcGVhdFwiLCBcIm9uVXBkYXRlXCJdKTtcbiAgICBsZXQgeyB0byB9ID0gb3B0aW9ucztcbiAgICBsZXQgZHJpdmVyQ29udHJvbHM7XG4gICAgbGV0IHJlcGVhdENvdW50ID0gMDtcbiAgICBsZXQgY29tcHV0ZWREdXJhdGlvbiA9IG9wdGlvbnMuZHVyYXRpb247XG4gICAgbGV0IGxhdGVzdDtcbiAgICBsZXQgaXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgIGxldCBpc0ZvcndhcmRQbGF5YmFjayA9IHRydWU7XG4gICAgbGV0IGludGVycG9sYXRlRnJvbU51bWJlcjtcbiAgICBjb25zdCBhbmltYXRvciA9IGRldGVjdEFuaW1hdGlvbkZyb21PcHRpb25zKG9wdGlvbnMpO1xuICAgIGlmICgoX2MgPSAoX2IgPSBhbmltYXRvcikubmVlZHNJbnRlcnBvbGF0aW9uKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuY2FsbChfYiwgZnJvbSwgdG8pKSB7XG4gICAgICAgIGludGVycG9sYXRlRnJvbU51bWJlciA9IGludGVycG9sYXRlKFswLCAxMDBdLCBbZnJvbSwgdG9dLCB7XG4gICAgICAgICAgICBjbGFtcDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBmcm9tID0gMDtcbiAgICAgICAgdG8gPSAxMDA7XG4gICAgfVxuICAgIGNvbnN0IGFuaW1hdGlvbiA9IGFuaW1hdG9yKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgZnJvbSwgdG8gfSkpO1xuICAgIGZ1bmN0aW9uIHJlcGVhdCgpIHtcbiAgICAgICAgcmVwZWF0Q291bnQrKztcbiAgICAgICAgaWYgKHJlcGVhdFR5cGUgPT09IFwicmV2ZXJzZVwiKSB7XG4gICAgICAgICAgICBpc0ZvcndhcmRQbGF5YmFjayA9IHJlcGVhdENvdW50ICUgMiA9PT0gMDtcbiAgICAgICAgICAgIGVsYXBzZWQgPSByZXZlcnNlRWxhcHNlZChlbGFwc2VkLCBjb21wdXRlZER1cmF0aW9uLCByZXBlYXREZWxheSwgaXNGb3J3YXJkUGxheWJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWxhcHNlZCA9IGxvb3BFbGFwc2VkKGVsYXBzZWQsIGNvbXB1dGVkRHVyYXRpb24sIHJlcGVhdERlbGF5KTtcbiAgICAgICAgICAgIGlmIChyZXBlYXRUeXBlID09PSBcIm1pcnJvclwiKVxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbi5mbGlwVGFyZ2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICBvblJlcGVhdCAmJiBvblJlcGVhdCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICAgICAgZHJpdmVyQ29udHJvbHMuc3RvcCgpO1xuICAgICAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlKGRlbHRhKSB7XG4gICAgICAgIGlmICghaXNGb3J3YXJkUGxheWJhY2spXG4gICAgICAgICAgICBkZWx0YSA9IC1kZWx0YTtcbiAgICAgICAgZWxhcHNlZCArPSBkZWx0YTtcbiAgICAgICAgaWYgKCFpc0NvbXBsZXRlKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IGFuaW1hdGlvbi5uZXh0KE1hdGgubWF4KDAsIGVsYXBzZWQpKTtcbiAgICAgICAgICAgIGxhdGVzdCA9IHN0YXRlLnZhbHVlO1xuICAgICAgICAgICAgaWYgKGludGVycG9sYXRlRnJvbU51bWJlcilcbiAgICAgICAgICAgICAgICBsYXRlc3QgPSBpbnRlcnBvbGF0ZUZyb21OdW1iZXIobGF0ZXN0KTtcbiAgICAgICAgICAgIGlzQ29tcGxldGUgPSBpc0ZvcndhcmRQbGF5YmFjayA/IHN0YXRlLmRvbmUgOiBlbGFwc2VkIDw9IDA7XG4gICAgICAgIH1cbiAgICAgICAgb25VcGRhdGUgPT09IG51bGwgfHwgb25VcGRhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVXBkYXRlKGxhdGVzdCk7XG4gICAgICAgIGlmIChpc0NvbXBsZXRlKSB7XG4gICAgICAgICAgICBpZiAocmVwZWF0Q291bnQgPT09IDApXG4gICAgICAgICAgICAgICAgY29tcHV0ZWREdXJhdGlvbiAhPT0gbnVsbCAmJiBjb21wdXRlZER1cmF0aW9uICE9PSB2b2lkIDAgPyBjb21wdXRlZER1cmF0aW9uIDogKGNvbXB1dGVkRHVyYXRpb24gPSBlbGFwc2VkKTtcbiAgICAgICAgICAgIGlmIChyZXBlYXRDb3VudCA8IHJlcGVhdE1heCkge1xuICAgICAgICAgICAgICAgIGhhc1JlcGVhdERlbGF5RWxhcHNlZChlbGFwc2VkLCBjb21wdXRlZER1cmF0aW9uLCByZXBlYXREZWxheSwgaXNGb3J3YXJkUGxheWJhY2spICYmIHJlcGVhdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwbGF5KCkge1xuICAgICAgICBvblBsYXkgPT09IG51bGwgfHwgb25QbGF5ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblBsYXkoKTtcbiAgICAgICAgZHJpdmVyQ29udHJvbHMgPSBkcml2ZXIodXBkYXRlKTtcbiAgICAgICAgZHJpdmVyQ29udHJvbHMuc3RhcnQoKTtcbiAgICB9XG4gICAgYXV0b3BsYXkgJiYgcGxheSgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0b3A6ICgpID0+IHtcbiAgICAgICAgICAgIG9uU3RvcCA9PT0gbnVsbCB8fCBvblN0b3AgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uU3RvcCgpO1xuICAgICAgICAgICAgZHJpdmVyQ29udHJvbHMuc3RvcCgpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5cbmV4cG9ydCB7IGFuaW1hdGUgfTtcbiIsImZ1bmN0aW9uIHZlbG9jaXR5UGVyU2Vjb25kKHZlbG9jaXR5LCBmcmFtZUR1cmF0aW9uKSB7XG4gICAgcmV0dXJuIGZyYW1lRHVyYXRpb24gPyB2ZWxvY2l0eSAqICgxMDAwIC8gZnJhbWVEdXJhdGlvbikgOiAwO1xufVxuXG5leHBvcnQgeyB2ZWxvY2l0eVBlclNlY29uZCB9O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBzZWNvbmRzIHRvIG1pbGxpc2Vjb25kc1xuICpcbiAqIEBwYXJhbSBzZWNvbmRzIC0gVGltZSBpbiBzZWNvbmRzLlxuICogQHJldHVybiBtaWxsaXNlY29uZHMgLSBDb252ZXJ0ZWQgdGltZSBpbiBtaWxsaXNlY29uZHMuXG4gKi9cbnZhciBzZWNvbmRzVG9NaWxsaXNlY29uZHMgPSBmdW5jdGlvbiAoc2Vjb25kcykgeyByZXR1cm4gc2Vjb25kcyAqIDEwMDA7IH07XG5cbmV4cG9ydCB7IHNlY29uZHNUb01pbGxpc2Vjb25kcyB9O1xuIiwiaW1wb3J0IHsgbGluZWFyIH0gZnJvbSAnLi9pbmRleC5tanMnO1xuXG5jb25zdCBhID0gKGExLCBhMikgPT4gMS4wIC0gMy4wICogYTIgKyAzLjAgKiBhMTtcbmNvbnN0IGIgPSAoYTEsIGEyKSA9PiAzLjAgKiBhMiAtIDYuMCAqIGExO1xuY29uc3QgYyA9IChhMSkgPT4gMy4wICogYTE7XG5jb25zdCBjYWxjQmV6aWVyID0gKHQsIGExLCBhMikgPT4gKChhKGExLCBhMikgKiB0ICsgYihhMSwgYTIpKSAqIHQgKyBjKGExKSkgKiB0O1xuY29uc3QgZ2V0U2xvcGUgPSAodCwgYTEsIGEyKSA9PiAzLjAgKiBhKGExLCBhMikgKiB0ICogdCArIDIuMCAqIGIoYTEsIGEyKSAqIHQgKyBjKGExKTtcbmNvbnN0IHN1YmRpdmlzaW9uUHJlY2lzaW9uID0gMC4wMDAwMDAxO1xuY29uc3Qgc3ViZGl2aXNpb25NYXhJdGVyYXRpb25zID0gMTA7XG5mdW5jdGlvbiBiaW5hcnlTdWJkaXZpZGUoYVgsIGFBLCBhQiwgbVgxLCBtWDIpIHtcbiAgICBsZXQgY3VycmVudFg7XG4gICAgbGV0IGN1cnJlbnRUO1xuICAgIGxldCBpID0gMDtcbiAgICBkbyB7XG4gICAgICAgIGN1cnJlbnRUID0gYUEgKyAoYUIgLSBhQSkgLyAyLjA7XG4gICAgICAgIGN1cnJlbnRYID0gY2FsY0JlemllcihjdXJyZW50VCwgbVgxLCBtWDIpIC0gYVg7XG4gICAgICAgIGlmIChjdXJyZW50WCA+IDAuMCkge1xuICAgICAgICAgICAgYUIgPSBjdXJyZW50VDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFBID0gY3VycmVudFQ7XG4gICAgICAgIH1cbiAgICB9IHdoaWxlIChNYXRoLmFicyhjdXJyZW50WCkgPiBzdWJkaXZpc2lvblByZWNpc2lvbiAmJlxuICAgICAgICArK2kgPCBzdWJkaXZpc2lvbk1heEl0ZXJhdGlvbnMpO1xuICAgIHJldHVybiBjdXJyZW50VDtcbn1cbmNvbnN0IG5ld3Rvbkl0ZXJhdGlvbnMgPSA4O1xuY29uc3QgbmV3dG9uTWluU2xvcGUgPSAwLjAwMTtcbmZ1bmN0aW9uIG5ld3RvblJhcGhzb25JdGVyYXRlKGFYLCBhR3Vlc3NULCBtWDEsIG1YMikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3dG9uSXRlcmF0aW9uczsgKytpKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTbG9wZSA9IGdldFNsb3BlKGFHdWVzc1QsIG1YMSwgbVgyKTtcbiAgICAgICAgaWYgKGN1cnJlbnRTbG9wZSA9PT0gMC4wKSB7XG4gICAgICAgICAgICByZXR1cm4gYUd1ZXNzVDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50WCA9IGNhbGNCZXppZXIoYUd1ZXNzVCwgbVgxLCBtWDIpIC0gYVg7XG4gICAgICAgIGFHdWVzc1QgLT0gY3VycmVudFggLyBjdXJyZW50U2xvcGU7XG4gICAgfVxuICAgIHJldHVybiBhR3Vlc3NUO1xufVxuY29uc3Qga1NwbGluZVRhYmxlU2l6ZSA9IDExO1xuY29uc3Qga1NhbXBsZVN0ZXBTaXplID0gMS4wIC8gKGtTcGxpbmVUYWJsZVNpemUgLSAxLjApO1xuZnVuY3Rpb24gY3ViaWNCZXppZXIobVgxLCBtWTEsIG1YMiwgbVkyKSB7XG4gICAgaWYgKG1YMSA9PT0gbVkxICYmIG1YMiA9PT0gbVkyKVxuICAgICAgICByZXR1cm4gbGluZWFyO1xuICAgIGNvbnN0IHNhbXBsZVZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkoa1NwbGluZVRhYmxlU2l6ZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrU3BsaW5lVGFibGVTaXplOyArK2kpIHtcbiAgICAgICAgc2FtcGxlVmFsdWVzW2ldID0gY2FsY0JlemllcihpICoga1NhbXBsZVN0ZXBTaXplLCBtWDEsIG1YMik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFRGb3JYKGFYKSB7XG4gICAgICAgIGxldCBpbnRlcnZhbFN0YXJ0ID0gMC4wO1xuICAgICAgICBsZXQgY3VycmVudFNhbXBsZSA9IDE7XG4gICAgICAgIGNvbnN0IGxhc3RTYW1wbGUgPSBrU3BsaW5lVGFibGVTaXplIC0gMTtcbiAgICAgICAgZm9yICg7IGN1cnJlbnRTYW1wbGUgIT09IGxhc3RTYW1wbGUgJiYgc2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGVdIDw9IGFYOyArK2N1cnJlbnRTYW1wbGUpIHtcbiAgICAgICAgICAgIGludGVydmFsU3RhcnQgKz0ga1NhbXBsZVN0ZXBTaXplO1xuICAgICAgICB9XG4gICAgICAgIC0tY3VycmVudFNhbXBsZTtcbiAgICAgICAgY29uc3QgZGlzdCA9IChhWCAtIHNhbXBsZVZhbHVlc1tjdXJyZW50U2FtcGxlXSkgL1xuICAgICAgICAgICAgKHNhbXBsZVZhbHVlc1tjdXJyZW50U2FtcGxlICsgMV0gLSBzYW1wbGVWYWx1ZXNbY3VycmVudFNhbXBsZV0pO1xuICAgICAgICBjb25zdCBndWVzc0ZvclQgPSBpbnRlcnZhbFN0YXJ0ICsgZGlzdCAqIGtTYW1wbGVTdGVwU2l6ZTtcbiAgICAgICAgY29uc3QgaW5pdGlhbFNsb3BlID0gZ2V0U2xvcGUoZ3Vlc3NGb3JULCBtWDEsIG1YMik7XG4gICAgICAgIGlmIChpbml0aWFsU2xvcGUgPj0gbmV3dG9uTWluU2xvcGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXd0b25SYXBoc29uSXRlcmF0ZShhWCwgZ3Vlc3NGb3JULCBtWDEsIG1YMik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW5pdGlhbFNsb3BlID09PSAwLjApIHtcbiAgICAgICAgICAgIHJldHVybiBndWVzc0ZvclQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYmluYXJ5U3ViZGl2aWRlKGFYLCBpbnRlcnZhbFN0YXJ0LCBpbnRlcnZhbFN0YXJ0ICsga1NhbXBsZVN0ZXBTaXplLCBtWDEsIG1YMik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICh0KSA9PiB0ID09PSAwIHx8IHQgPT09IDEgPyB0IDogY2FsY0JlemllcihnZXRURm9yWCh0KSwgbVkxLCBtWTIpO1xufVxuXG5leHBvcnQgeyBjdWJpY0JlemllciB9O1xuIiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgaW52YXJpYW50IH0gZnJvbSAnaGV5LWxpc3Rlbic7XG5pbXBvcnQgeyBjdWJpY0JlemllciwgbGluZWFyLCBlYXNlSW4sIGVhc2VJbk91dCwgZWFzZU91dCwgY2lyY0luLCBjaXJjSW5PdXQsIGNpcmNPdXQsIGJhY2tJbiwgYmFja0luT3V0LCBiYWNrT3V0LCBhbnRpY2lwYXRlLCBib3VuY2VJbiwgYm91bmNlSW5PdXQsIGJvdW5jZU91dCB9IGZyb20gJ3BvcG1vdGlvbic7XG5cbnZhciBlYXNpbmdMb29rdXAgPSB7XG4gICAgbGluZWFyOiBsaW5lYXIsXG4gICAgZWFzZUluOiBlYXNlSW4sXG4gICAgZWFzZUluT3V0OiBlYXNlSW5PdXQsXG4gICAgZWFzZU91dDogZWFzZU91dCxcbiAgICBjaXJjSW46IGNpcmNJbixcbiAgICBjaXJjSW5PdXQ6IGNpcmNJbk91dCxcbiAgICBjaXJjT3V0OiBjaXJjT3V0LFxuICAgIGJhY2tJbjogYmFja0luLFxuICAgIGJhY2tJbk91dDogYmFja0luT3V0LFxuICAgIGJhY2tPdXQ6IGJhY2tPdXQsXG4gICAgYW50aWNpcGF0ZTogYW50aWNpcGF0ZSxcbiAgICBib3VuY2VJbjogYm91bmNlSW4sXG4gICAgYm91bmNlSW5PdXQ6IGJvdW5jZUluT3V0LFxuICAgIGJvdW5jZU91dDogYm91bmNlT3V0LFxufTtcbnZhciBlYXNpbmdEZWZpbml0aW9uVG9GdW5jdGlvbiA9IGZ1bmN0aW9uIChkZWZpbml0aW9uKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgLy8gSWYgY3ViaWMgYmV6aWVyIGRlZmluaXRpb24sIGNyZWF0ZSBiZXppZXIgY3VydmVcbiAgICAgICAgaW52YXJpYW50KGRlZmluaXRpb24ubGVuZ3RoID09PSA0LCBcIkN1YmljIGJlemllciBhcnJheXMgbXVzdCBjb250YWluIGZvdXIgbnVtZXJpY2FsIHZhbHVlcy5cIik7XG4gICAgICAgIHZhciBfYSA9IF9fcmVhZChkZWZpbml0aW9uLCA0KSwgeDEgPSBfYVswXSwgeTEgPSBfYVsxXSwgeDIgPSBfYVsyXSwgeTIgPSBfYVszXTtcbiAgICAgICAgcmV0dXJuIGN1YmljQmV6aWVyKHgxLCB5MSwgeDIsIHkyKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluaXRpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgLy8gRWxzZSBsb29rdXAgZnJvbSB0YWJsZVxuICAgICAgICBpbnZhcmlhbnQoZWFzaW5nTG9va3VwW2RlZmluaXRpb25dICE9PSB1bmRlZmluZWQsIFwiSW52YWxpZCBlYXNpbmcgdHlwZSAnXCIuY29uY2F0KGRlZmluaXRpb24sIFwiJ1wiKSk7XG4gICAgICAgIHJldHVybiBlYXNpbmdMb29rdXBbZGVmaW5pdGlvbl07XG4gICAgfVxuICAgIHJldHVybiBkZWZpbml0aW9uO1xufTtcbnZhciBpc0Vhc2luZ0FycmF5ID0gZnVuY3Rpb24gKGVhc2UpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShlYXNlKSAmJiB0eXBlb2YgZWFzZVswXSAhPT0gXCJudW1iZXJcIjtcbn07XG5cbmV4cG9ydCB7IGVhc2luZ0RlZmluaXRpb25Ub0Z1bmN0aW9uLCBpc0Vhc2luZ0FycmF5IH07XG4iLCJpbXBvcnQgeyBjb21wbGV4IH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuXG4vKipcbiAqIENoZWNrIGlmIGEgdmFsdWUgaXMgYW5pbWF0YWJsZS4gRXhhbXBsZXM6XG4gKlxuICog4pyFOiAxMDAsIFwiMTAwcHhcIiwgXCIjZmZmXCJcbiAqIOKdjDogXCJibG9ja1wiLCBcInVybCgyLmpwZylcIlxuICogQHBhcmFtIHZhbHVlXG4gKlxuICogQGludGVybmFsXG4gKi9cbnZhciBpc0FuaW1hdGFibGUgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIC8vIElmIHRoZSBsaXN0IG9mIGtleXMgdGF0IG1pZ2h0IGJlIG5vbi1hbmltYXRhYmxlIGdyb3dzLCByZXBsYWNlIHdpdGggU2V0XG4gICAgaWYgKGtleSA9PT0gXCJ6SW5kZXhcIilcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIElmIGl0J3MgYSBudW1iZXIgb3IgYSBrZXlmcmFtZXMgYXJyYXksIHdlIGNhbiBhbmltYXRlIGl0LiBXZSBtaWdodCBhdCBzb21lIHBvaW50XG4gICAgLy8gbmVlZCB0byBkbyBhIGRlZXAgaXNBbmltYXRhYmxlIGNoZWNrIG9mIGtleWZyYW1lcywgb3IgbGV0IFBvcG1vdGlvbiBoYW5kbGUgdGhpcyxcbiAgICAvLyBidXQgZm9yIG5vdyBsZXRzIGxlYXZlIGl0IGxpa2UgdGhpcyBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgLy8gSXQncyBhbmltYXRhYmxlIGlmIHdlIGhhdmUgYSBzdHJpbmdcbiAgICAgICAgY29tcGxleC50ZXN0KHZhbHVlKSAmJiAvLyBBbmQgaXQgY29udGFpbnMgbnVtYmVycyBhbmQvb3IgY29sb3JzXG4gICAgICAgICF2YWx1ZS5zdGFydHNXaXRoKFwidXJsKFwiKSAvLyBVbmxlc3MgaXQgc3RhcnRzIHdpdGggXCJ1cmwoXCJcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCB7IGlzQW5pbWF0YWJsZSB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBpc0tleWZyYW1lc1RhcmdldCB9IGZyb20gJy4vaXMta2V5ZnJhbWVzLXRhcmdldC5tanMnO1xuXG52YXIgdW5kZXJEYW1wZWRTcHJpbmcgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAoe1xuICAgIHR5cGU6IFwic3ByaW5nXCIsXG4gICAgc3RpZmZuZXNzOiA1MDAsXG4gICAgZGFtcGluZzogMjUsXG4gICAgcmVzdFNwZWVkOiAxMCxcbn0pOyB9O1xudmFyIGNyaXRpY2FsbHlEYW1wZWRTcHJpbmcgPSBmdW5jdGlvbiAodG8pIHsgcmV0dXJuICh7XG4gICAgdHlwZTogXCJzcHJpbmdcIixcbiAgICBzdGlmZm5lc3M6IDU1MCxcbiAgICBkYW1waW5nOiB0byA9PT0gMCA/IDIgKiBNYXRoLnNxcnQoNTUwKSA6IDMwLFxuICAgIHJlc3RTcGVlZDogMTAsXG59KTsgfTtcbnZhciBsaW5lYXJUd2VlbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gICAgdHlwZTogXCJrZXlmcmFtZXNcIixcbiAgICBlYXNlOiBcImxpbmVhclwiLFxuICAgIGR1cmF0aW9uOiAwLjMsXG59KTsgfTtcbnZhciBrZXlmcmFtZXMgPSBmdW5jdGlvbiAodmFsdWVzKSB7IHJldHVybiAoe1xuICAgIHR5cGU6IFwia2V5ZnJhbWVzXCIsXG4gICAgZHVyYXRpb246IDAuOCxcbiAgICB2YWx1ZXM6IHZhbHVlcyxcbn0pOyB9O1xudmFyIGRlZmF1bHRUcmFuc2l0aW9ucyA9IHtcbiAgICB4OiB1bmRlckRhbXBlZFNwcmluZyxcbiAgICB5OiB1bmRlckRhbXBlZFNwcmluZyxcbiAgICB6OiB1bmRlckRhbXBlZFNwcmluZyxcbiAgICByb3RhdGU6IHVuZGVyRGFtcGVkU3ByaW5nLFxuICAgIHJvdGF0ZVg6IHVuZGVyRGFtcGVkU3ByaW5nLFxuICAgIHJvdGF0ZVk6IHVuZGVyRGFtcGVkU3ByaW5nLFxuICAgIHJvdGF0ZVo6IHVuZGVyRGFtcGVkU3ByaW5nLFxuICAgIHNjYWxlWDogY3JpdGljYWxseURhbXBlZFNwcmluZyxcbiAgICBzY2FsZVk6IGNyaXRpY2FsbHlEYW1wZWRTcHJpbmcsXG4gICAgc2NhbGU6IGNyaXRpY2FsbHlEYW1wZWRTcHJpbmcsXG4gICAgb3BhY2l0eTogbGluZWFyVHdlZW4sXG4gICAgYmFja2dyb3VuZENvbG9yOiBsaW5lYXJUd2VlbixcbiAgICBjb2xvcjogbGluZWFyVHdlZW4sXG4gICAgZGVmYXVsdDogY3JpdGljYWxseURhbXBlZFNwcmluZyxcbn07XG52YXIgZ2V0RGVmYXVsdFRyYW5zaXRpb24gPSBmdW5jdGlvbiAodmFsdWVLZXksIHRvKSB7XG4gICAgdmFyIHRyYW5zaXRpb25GYWN0b3J5O1xuICAgIGlmIChpc0tleWZyYW1lc1RhcmdldCh0bykpIHtcbiAgICAgICAgdHJhbnNpdGlvbkZhY3RvcnkgPSBrZXlmcmFtZXM7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0cmFuc2l0aW9uRmFjdG9yeSA9XG4gICAgICAgICAgICBkZWZhdWx0VHJhbnNpdGlvbnNbdmFsdWVLZXldIHx8IGRlZmF1bHRUcmFuc2l0aW9ucy5kZWZhdWx0O1xuICAgIH1cbiAgICByZXR1cm4gX19hc3NpZ24oeyB0bzogdG8gfSwgdHJhbnNpdGlvbkZhY3RvcnkodG8pKTtcbn07XG5cbmV4cG9ydCB7IGNyaXRpY2FsbHlEYW1wZWRTcHJpbmcsIGdldERlZmF1bHRUcmFuc2l0aW9uLCBsaW5lYXJUd2VlbiwgdW5kZXJEYW1wZWRTcHJpbmcgfTtcbiIsImltcG9ydCB7IGNvbXBsZXggfSBmcm9tICcuL2luZGV4Lm1qcyc7XG5pbXBvcnQgeyBmbG9hdFJlZ2V4IH0gZnJvbSAnLi4vdXRpbHMubWpzJztcblxuY29uc3QgbWF4RGVmYXVsdHMgPSBuZXcgU2V0KFsnYnJpZ2h0bmVzcycsICdjb250cmFzdCcsICdzYXR1cmF0ZScsICdvcGFjaXR5J10pO1xuZnVuY3Rpb24gYXBwbHlEZWZhdWx0RmlsdGVyKHYpIHtcbiAgICBsZXQgW25hbWUsIHZhbHVlXSA9IHYuc2xpY2UoMCwgLTEpLnNwbGl0KCcoJyk7XG4gICAgaWYgKG5hbWUgPT09ICdkcm9wLXNoYWRvdycpXG4gICAgICAgIHJldHVybiB2O1xuICAgIGNvbnN0IFtudW1iZXJdID0gdmFsdWUubWF0Y2goZmxvYXRSZWdleCkgfHwgW107XG4gICAgaWYgKCFudW1iZXIpXG4gICAgICAgIHJldHVybiB2O1xuICAgIGNvbnN0IHVuaXQgPSB2YWx1ZS5yZXBsYWNlKG51bWJlciwgJycpO1xuICAgIGxldCBkZWZhdWx0VmFsdWUgPSBtYXhEZWZhdWx0cy5oYXMobmFtZSkgPyAxIDogMDtcbiAgICBpZiAobnVtYmVyICE9PSB2YWx1ZSlcbiAgICAgICAgZGVmYXVsdFZhbHVlICo9IDEwMDtcbiAgICByZXR1cm4gbmFtZSArICcoJyArIGRlZmF1bHRWYWx1ZSArIHVuaXQgKyAnKSc7XG59XG5jb25zdCBmdW5jdGlvblJlZ2V4ID0gLyhbYS16LV0qKVxcKC4qP1xcKS9nO1xuY29uc3QgZmlsdGVyID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjb21wbGV4KSwgeyBnZXRBbmltYXRhYmxlTm9uZTogKHYpID0+IHtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25zID0gdi5tYXRjaChmdW5jdGlvblJlZ2V4KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucyA/IGZ1bmN0aW9ucy5tYXAoYXBwbHlEZWZhdWx0RmlsdGVyKS5qb2luKCcgJykgOiB2O1xuICAgIH0gfSk7XG5cbmV4cG9ydCB7IGZpbHRlciB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBjb2xvciwgZmlsdGVyIH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuaW1wb3J0IHsgbnVtYmVyVmFsdWVUeXBlcyB9IGZyb20gJy4vbnVtYmVyLm1qcyc7XG5cbi8qKlxuICogQSBtYXAgb2YgZGVmYXVsdCB2YWx1ZSB0eXBlcyBmb3IgY29tbW9uIHZhbHVlc1xuICovXG52YXIgZGVmYXVsdFZhbHVlVHlwZXMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgbnVtYmVyVmFsdWVUeXBlcyksIHsgXG4gICAgLy8gQ29sb3IgcHJvcHNcbiAgICBjb2xvcjogY29sb3IsIGJhY2tncm91bmRDb2xvcjogY29sb3IsIG91dGxpbmVDb2xvcjogY29sb3IsIGZpbGw6IGNvbG9yLCBzdHJva2U6IGNvbG9yLCBcbiAgICAvLyBCb3JkZXIgcHJvcHNcbiAgICBib3JkZXJDb2xvcjogY29sb3IsIGJvcmRlclRvcENvbG9yOiBjb2xvciwgYm9yZGVyUmlnaHRDb2xvcjogY29sb3IsIGJvcmRlckJvdHRvbUNvbG9yOiBjb2xvciwgYm9yZGVyTGVmdENvbG9yOiBjb2xvciwgZmlsdGVyOiBmaWx0ZXIsIFdlYmtpdEZpbHRlcjogZmlsdGVyIH0pO1xuLyoqXG4gKiBHZXRzIHRoZSBkZWZhdWx0IFZhbHVlVHlwZSBmb3IgdGhlIHByb3ZpZGVkIHZhbHVlIGtleVxuICovXG52YXIgZ2V0RGVmYXVsdFZhbHVlVHlwZSA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGRlZmF1bHRWYWx1ZVR5cGVzW2tleV07IH07XG5cbmV4cG9ydCB7IGRlZmF1bHRWYWx1ZVR5cGVzLCBnZXREZWZhdWx0VmFsdWVUeXBlIH07XG4iLCJpbXBvcnQgeyBmaWx0ZXIsIGNvbXBsZXggfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5pbXBvcnQgeyBnZXREZWZhdWx0VmFsdWVUeXBlIH0gZnJvbSAnLi9kZWZhdWx0cy5tanMnO1xuXG5mdW5jdGlvbiBnZXRBbmltYXRhYmxlTm9uZShrZXksIHZhbHVlKSB7XG4gICAgdmFyIF9hO1xuICAgIHZhciBkZWZhdWx0VmFsdWVUeXBlID0gZ2V0RGVmYXVsdFZhbHVlVHlwZShrZXkpO1xuICAgIGlmIChkZWZhdWx0VmFsdWVUeXBlICE9PSBmaWx0ZXIpXG4gICAgICAgIGRlZmF1bHRWYWx1ZVR5cGUgPSBjb21wbGV4O1xuICAgIC8vIElmIHZhbHVlIGlzIG5vdCByZWNvZ25pc2VkIGFzIGFuaW1hdGFibGUsIGllIFwibm9uZVwiLCBjcmVhdGUgYW4gYW5pbWF0YWJsZSB2ZXJzaW9uIG9yaWdpbiBiYXNlZCBvbiB0aGUgdGFyZ2V0XG4gICAgcmV0dXJuIChfYSA9IGRlZmF1bHRWYWx1ZVR5cGUuZ2V0QW5pbWF0YWJsZU5vbmUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKGRlZmF1bHRWYWx1ZVR5cGUsIHZhbHVlKTtcbn1cblxuZXhwb3J0IHsgZ2V0QW5pbWF0YWJsZU5vbmUgfTtcbiIsInZhciBpbnN0YW50QW5pbWF0aW9uU3RhdGUgPSB7XG4gICAgY3VycmVudDogZmFsc2UsXG59O1xuXG5leHBvcnQgeyBpbnN0YW50QW5pbWF0aW9uU3RhdGUgfTtcbiIsImltcG9ydCB7IF9fYXNzaWduLCBfX3Jlc3QsIF9fc3ByZWFkQXJyYXksIF9fcmVhZCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGluZXJ0aWEsIGFuaW1hdGUgfSBmcm9tICdwb3Btb3Rpb24nO1xuaW1wb3J0IHsgc2Vjb25kc1RvTWlsbGlzZWNvbmRzIH0gZnJvbSAnLi4vLi4vdXRpbHMvdGltZS1jb252ZXJzaW9uLm1qcyc7XG5pbXBvcnQgeyBpc0Vhc2luZ0FycmF5LCBlYXNpbmdEZWZpbml0aW9uVG9GdW5jdGlvbiB9IGZyb20gJy4vZWFzaW5nLm1qcyc7XG5pbXBvcnQgeyBpc0FuaW1hdGFibGUgfSBmcm9tICcuL2lzLWFuaW1hdGFibGUubWpzJztcbmltcG9ydCB7IGdldERlZmF1bHRUcmFuc2l0aW9uIH0gZnJvbSAnLi9kZWZhdWx0LXRyYW5zaXRpb25zLm1qcyc7XG5pbXBvcnQgeyB3YXJuaW5nIH0gZnJvbSAnaGV5LWxpc3Rlbic7XG5pbXBvcnQgeyBnZXRBbmltYXRhYmxlTm9uZSB9IGZyb20gJy4uLy4uL3JlbmRlci9kb20vdmFsdWUtdHlwZXMvYW5pbWF0YWJsZS1ub25lLm1qcyc7XG5pbXBvcnQgeyBpbnN0YW50QW5pbWF0aW9uU3RhdGUgfSBmcm9tICcuLi8uLi91dGlscy91c2UtaW5zdGFudC10cmFuc2l0aW9uLXN0YXRlLm1qcyc7XG5pbXBvcnQgeyByZXNvbHZlRmluYWxWYWx1ZUluS2V5ZnJhbWVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvcmVzb2x2ZS12YWx1ZS5tanMnO1xuXG4vKipcbiAqIERlY2lkZSB3aGV0aGVyIGEgdHJhbnNpdGlvbiBpcyBkZWZpbmVkIG9uIGEgZ2l2ZW4gVHJhbnNpdGlvbi5cbiAqIFRoaXMgZmlsdGVycyBvdXQgb3JjaGVzdHJhdGlvbiBvcHRpb25zIGFuZCByZXR1cm5zIHRydWVcbiAqIGlmIGFueSBvcHRpb25zIGFyZSBsZWZ0LlxuICovXG5mdW5jdGlvbiBpc1RyYW5zaXRpb25EZWZpbmVkKF9hKSB7XG4gICAgX2Eud2hlbjsgX2EuZGVsYXk7IF9hLmRlbGF5Q2hpbGRyZW47IF9hLnN0YWdnZXJDaGlsZHJlbjsgX2Euc3RhZ2dlckRpcmVjdGlvbjsgX2EucmVwZWF0OyBfYS5yZXBlYXRUeXBlOyBfYS5yZXBlYXREZWxheTsgX2EuZnJvbTsgdmFyIHRyYW5zaXRpb24gPSBfX3Jlc3QoX2EsIFtcIndoZW5cIiwgXCJkZWxheVwiLCBcImRlbGF5Q2hpbGRyZW5cIiwgXCJzdGFnZ2VyQ2hpbGRyZW5cIiwgXCJzdGFnZ2VyRGlyZWN0aW9uXCIsIFwicmVwZWF0XCIsIFwicmVwZWF0VHlwZVwiLCBcInJlcGVhdERlbGF5XCIsIFwiZnJvbVwiXSk7XG4gICAgcmV0dXJuICEhT2JqZWN0LmtleXModHJhbnNpdGlvbikubGVuZ3RoO1xufVxudmFyIGxlZ2FjeVJlcGVhdFdhcm5pbmcgPSBmYWxzZTtcbi8qKlxuICogQ29udmVydCBGcmFtZXIgTW90aW9uJ3MgVHJhbnNpdGlvbiB0eXBlIGludG8gUG9wbW90aW9uLWNvbXBhdGlibGUgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gY29udmVydFRyYW5zaXRpb25Ub0FuaW1hdGlvbk9wdGlvbnMoX2EpIHtcbiAgICB2YXIgZWFzZSA9IF9hLmVhc2UsIHRpbWVzID0gX2EudGltZXMsIHlveW8gPSBfYS55b3lvLCBmbGlwID0gX2EuZmxpcCwgbG9vcCA9IF9hLmxvb3AsIHRyYW5zaXRpb24gPSBfX3Jlc3QoX2EsIFtcImVhc2VcIiwgXCJ0aW1lc1wiLCBcInlveW9cIiwgXCJmbGlwXCIsIFwibG9vcFwiXSk7XG4gICAgdmFyIG9wdGlvbnMgPSBfX2Fzc2lnbih7fSwgdHJhbnNpdGlvbik7XG4gICAgaWYgKHRpbWVzKVxuICAgICAgICBvcHRpb25zW1wib2Zmc2V0XCJdID0gdGltZXM7XG4gICAgLyoqXG4gICAgICogQ29udmVydCBhbnkgZXhpc3RpbmcgZHVyYXRpb25zIGZyb20gc2Vjb25kcyB0byBtaWxsaXNlY29uZHNcbiAgICAgKi9cbiAgICBpZiAodHJhbnNpdGlvbi5kdXJhdGlvbilcbiAgICAgICAgb3B0aW9uc1tcImR1cmF0aW9uXCJdID0gc2Vjb25kc1RvTWlsbGlzZWNvbmRzKHRyYW5zaXRpb24uZHVyYXRpb24pO1xuICAgIGlmICh0cmFuc2l0aW9uLnJlcGVhdERlbGF5KVxuICAgICAgICBvcHRpb25zLnJlcGVhdERlbGF5ID0gc2Vjb25kc1RvTWlsbGlzZWNvbmRzKHRyYW5zaXRpb24ucmVwZWF0RGVsYXkpO1xuICAgIC8qKlxuICAgICAqIE1hcCBlYXNpbmcgbmFtZXMgdG8gUG9wbW90aW9uJ3MgZWFzaW5nIGZ1bmN0aW9uc1xuICAgICAqL1xuICAgIGlmIChlYXNlKSB7XG4gICAgICAgIG9wdGlvbnNbXCJlYXNlXCJdID0gaXNFYXNpbmdBcnJheShlYXNlKVxuICAgICAgICAgICAgPyBlYXNlLm1hcChlYXNpbmdEZWZpbml0aW9uVG9GdW5jdGlvbilcbiAgICAgICAgICAgIDogZWFzaW5nRGVmaW5pdGlvblRvRnVuY3Rpb24oZWFzZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN1cHBvcnQgbGVnYWN5IHRyYW5zaXRpb24gQVBJXG4gICAgICovXG4gICAgaWYgKHRyYW5zaXRpb24udHlwZSA9PT0gXCJ0d2VlblwiKVxuICAgICAgICBvcHRpb25zLnR5cGUgPSBcImtleWZyYW1lc1wiO1xuICAgIC8qKlxuICAgICAqIFRPRE86IFRoZXNlIG9wdGlvbnMgYXJlIG9mZmljaWFsbHkgcmVtb3ZlZCBmcm9tIHRoZSBBUEkuXG4gICAgICovXG4gICAgaWYgKHlveW8gfHwgbG9vcCB8fCBmbGlwKSB7XG4gICAgICAgIHdhcm5pbmcoIWxlZ2FjeVJlcGVhdFdhcm5pbmcsIFwieW95bywgbG9vcCBhbmQgZmxpcCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBBUEkuIFJlcGxhY2Ugd2l0aCByZXBlYXQgYW5kIHJlcGVhdFR5cGUgb3B0aW9ucy5cIik7XG4gICAgICAgIGxlZ2FjeVJlcGVhdFdhcm5pbmcgPSB0cnVlO1xuICAgICAgICBpZiAoeW95bykge1xuICAgICAgICAgICAgb3B0aW9ucy5yZXBlYXRUeXBlID0gXCJyZXZlcnNlXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobG9vcCkge1xuICAgICAgICAgICAgb3B0aW9ucy5yZXBlYXRUeXBlID0gXCJsb29wXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZmxpcCkge1xuICAgICAgICAgICAgb3B0aW9ucy5yZXBlYXRUeXBlID0gXCJtaXJyb3JcIjtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnJlcGVhdCA9IGxvb3AgfHwgeW95byB8fCBmbGlwIHx8IHRyYW5zaXRpb24ucmVwZWF0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUT0RPOiBQb3Btb3Rpb24gOSBoYXMgdGhlIGFiaWxpdHkgdG8gYXV0b21hdGljYWxseSBkZXRlY3Qgd2hldGhlciB0byB1c2VcbiAgICAgKiBhIGtleWZyYW1lcyBvciBzcHJpbmcgYW5pbWF0aW9uLCBidXQgZG9lcyBzbyBieSBkZXRlY3RpbmcgdmVsb2NpdHkgYW5kIG90aGVyIHNwcmluZyBvcHRpb25zLlxuICAgICAqIEl0J2QgYmUgZ29vZCB0byBpbnRyb2R1Y2UgYSBzaW1pbGFyIHRoaW5nIGhlcmUuXG4gICAgICovXG4gICAgaWYgKHRyYW5zaXRpb24udHlwZSAhPT0gXCJzcHJpbmdcIilcbiAgICAgICAgb3B0aW9ucy50eXBlID0gXCJrZXlmcmFtZXNcIjtcbiAgICByZXR1cm4gb3B0aW9ucztcbn1cbi8qKlxuICogR2V0IHRoZSBkZWxheSBmb3IgYSB2YWx1ZSBieSBjaGVja2luZyBUcmFuc2l0aW9uIHdpdGggZGVjcmVhc2luZyBzcGVjaWZpY2l0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVsYXlGcm9tVHJhbnNpdGlvbih0cmFuc2l0aW9uLCBrZXkpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHZhciB2YWx1ZVRyYW5zaXRpb24gPSBnZXRWYWx1ZVRyYW5zaXRpb24odHJhbnNpdGlvbiwga2V5KSB8fCB7fTtcbiAgICByZXR1cm4gKF9iID0gKF9hID0gdmFsdWVUcmFuc2l0aW9uLmRlbGF5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0cmFuc2l0aW9uLmRlbGF5KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAwO1xufVxuZnVuY3Rpb24gaHlkcmF0ZUtleWZyYW1lcyhvcHRpb25zKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy50bykgJiYgb3B0aW9ucy50b1swXSA9PT0gbnVsbCkge1xuICAgICAgICBvcHRpb25zLnRvID0gX19zcHJlYWRBcnJheShbXSwgX19yZWFkKG9wdGlvbnMudG8pLCBmYWxzZSk7XG4gICAgICAgIG9wdGlvbnMudG9bMF0gPSBvcHRpb25zLmZyb207XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xufVxuZnVuY3Rpb24gZ2V0UG9wbW90aW9uQW5pbWF0aW9uT3B0aW9ucyh0cmFuc2l0aW9uLCBvcHRpb25zLCBrZXkpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy50bykpIHtcbiAgICAgICAgKF9hID0gdHJhbnNpdGlvbi5kdXJhdGlvbikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKHRyYW5zaXRpb24uZHVyYXRpb24gPSAwLjgpO1xuICAgIH1cbiAgICBoeWRyYXRlS2V5ZnJhbWVzKG9wdGlvbnMpO1xuICAgIC8qKlxuICAgICAqIEdldCBhIGRlZmF1bHQgdHJhbnNpdGlvbiBpZiBub25lIGlzIGRldGVybWluZWQgdG8gYmUgZGVmaW5lZC5cbiAgICAgKi9cbiAgICBpZiAoIWlzVHJhbnNpdGlvbkRlZmluZWQodHJhbnNpdGlvbikpIHtcbiAgICAgICAgdHJhbnNpdGlvbiA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCB0cmFuc2l0aW9uKSwgZ2V0RGVmYXVsdFRyYW5zaXRpb24oa2V5LCBvcHRpb25zLnRvKSk7XG4gICAgfVxuICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb3B0aW9ucyksIGNvbnZlcnRUcmFuc2l0aW9uVG9BbmltYXRpb25PcHRpb25zKHRyYW5zaXRpb24pKTtcbn1cbi8qKlxuICpcbiAqL1xuZnVuY3Rpb24gZ2V0QW5pbWF0aW9uKGtleSwgdmFsdWUsIHRhcmdldCwgdHJhbnNpdGlvbiwgb25Db21wbGV0ZSkge1xuICAgIHZhciBfYTtcbiAgICB2YXIgdmFsdWVUcmFuc2l0aW9uID0gZ2V0VmFsdWVUcmFuc2l0aW9uKHRyYW5zaXRpb24sIGtleSk7XG4gICAgdmFyIG9yaWdpbiA9IChfYSA9IHZhbHVlVHJhbnNpdGlvbi5mcm9tKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB2YWx1ZS5nZXQoKTtcbiAgICB2YXIgaXNUYXJnZXRBbmltYXRhYmxlID0gaXNBbmltYXRhYmxlKGtleSwgdGFyZ2V0KTtcbiAgICBpZiAob3JpZ2luID09PSBcIm5vbmVcIiAmJiBpc1RhcmdldEFuaW1hdGFibGUgJiYgdHlwZW9mIHRhcmdldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgd2UncmUgdHJ5aW5nIHRvIGFuaW1hdGUgZnJvbSBcIm5vbmVcIiwgdHJ5IGFuZCBnZXQgYW4gYW5pbWF0YWJsZSB2ZXJzaW9uXG4gICAgICAgICAqIG9mIHRoZSB0YXJnZXQuIFRoaXMgY291bGQgYmUgaW1wcm92ZWQgdG8gd29yayBib3RoIHdheXMuXG4gICAgICAgICAqL1xuICAgICAgICBvcmlnaW4gPSBnZXRBbmltYXRhYmxlTm9uZShrZXksIHRhcmdldCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzWmVybyhvcmlnaW4pICYmIHR5cGVvZiB0YXJnZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgb3JpZ2luID0gZ2V0WmVyb1VuaXQodGFyZ2V0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJlxuICAgICAgICBpc1plcm8odGFyZ2V0KSAmJlxuICAgICAgICB0eXBlb2Ygb3JpZ2luID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRhcmdldCA9IGdldFplcm9Vbml0KG9yaWdpbik7XG4gICAgfVxuICAgIHZhciBpc09yaWdpbkFuaW1hdGFibGUgPSBpc0FuaW1hdGFibGUoa2V5LCBvcmlnaW4pO1xuICAgIHdhcm5pbmcoaXNPcmlnaW5BbmltYXRhYmxlID09PSBpc1RhcmdldEFuaW1hdGFibGUsIFwiWW91IGFyZSB0cnlpbmcgdG8gYW5pbWF0ZSBcIi5jb25jYXQoa2V5LCBcIiBmcm9tIFxcXCJcIikuY29uY2F0KG9yaWdpbiwgXCJcXFwiIHRvIFxcXCJcIikuY29uY2F0KHRhcmdldCwgXCJcXFwiLiBcIikuY29uY2F0KG9yaWdpbiwgXCIgaXMgbm90IGFuIGFuaW1hdGFibGUgdmFsdWUgLSB0byBlbmFibGUgdGhpcyBhbmltYXRpb24gc2V0IFwiKS5jb25jYXQob3JpZ2luLCBcIiB0byBhIHZhbHVlIGFuaW1hdGFibGUgdG8gXCIpLmNvbmNhdCh0YXJnZXQsIFwiIHZpYSB0aGUgYHN0eWxlYCBwcm9wZXJ0eS5cIikpO1xuICAgIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGZyb206IG9yaWdpbixcbiAgICAgICAgICAgIHRvOiB0YXJnZXQsXG4gICAgICAgICAgICB2ZWxvY2l0eTogdmFsdWUuZ2V0VmVsb2NpdHkoKSxcbiAgICAgICAgICAgIG9uQ29tcGxldGU6IG9uQ29tcGxldGUsXG4gICAgICAgICAgICBvblVwZGF0ZTogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHZhbHVlLnNldCh2KTsgfSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHZhbHVlVHJhbnNpdGlvbi50eXBlID09PSBcImluZXJ0aWFcIiB8fFxuICAgICAgICAgICAgdmFsdWVUcmFuc2l0aW9uLnR5cGUgPT09IFwiZGVjYXlcIlxuICAgICAgICAgICAgPyBpbmVydGlhKF9fYXNzaWduKF9fYXNzaWduKHt9LCBvcHRpb25zKSwgdmFsdWVUcmFuc2l0aW9uKSlcbiAgICAgICAgICAgIDogYW5pbWF0ZShfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZ2V0UG9wbW90aW9uQW5pbWF0aW9uT3B0aW9ucyh2YWx1ZVRyYW5zaXRpb24sIG9wdGlvbnMsIGtleSkpLCB7IG9uVXBkYXRlOiBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25VcGRhdGUodik7XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IHZhbHVlVHJhbnNpdGlvbi5vblVwZGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodmFsdWVUcmFuc2l0aW9uLCB2KTtcbiAgICAgICAgICAgICAgICB9LCBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vbkNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IHZhbHVlVHJhbnNpdGlvbi5vbkNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh2YWx1ZVRyYW5zaXRpb24pO1xuICAgICAgICAgICAgICAgIH0gfSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXQoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHZhciBmaW5hbFRhcmdldCA9IHJlc29sdmVGaW5hbFZhbHVlSW5LZXlmcmFtZXModGFyZ2V0KTtcbiAgICAgICAgdmFsdWUuc2V0KGZpbmFsVGFyZ2V0KTtcbiAgICAgICAgb25Db21wbGV0ZSgpO1xuICAgICAgICAoX2EgPSB2YWx1ZVRyYW5zaXRpb24gPT09IG51bGwgfHwgdmFsdWVUcmFuc2l0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZVRyYW5zaXRpb24ub25VcGRhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHZhbHVlVHJhbnNpdGlvbiwgZmluYWxUYXJnZXQpO1xuICAgICAgICAoX2IgPSB2YWx1ZVRyYW5zaXRpb24gPT09IG51bGwgfHwgdmFsdWVUcmFuc2l0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZVRyYW5zaXRpb24ub25Db21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwodmFsdWVUcmFuc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIHsgc3RvcDogZnVuY3Rpb24gKCkgeyB9IH07XG4gICAgfVxuICAgIHJldHVybiAhaXNPcmlnaW5BbmltYXRhYmxlIHx8XG4gICAgICAgICFpc1RhcmdldEFuaW1hdGFibGUgfHxcbiAgICAgICAgdmFsdWVUcmFuc2l0aW9uLnR5cGUgPT09IGZhbHNlXG4gICAgICAgID8gc2V0XG4gICAgICAgIDogc3RhcnQ7XG59XG5mdW5jdGlvbiBpc1plcm8odmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlID09PSAwIHx8XG4gICAgICAgICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIHBhcnNlRmxvYXQodmFsdWUpID09PSAwICYmXG4gICAgICAgICAgICB2YWx1ZS5pbmRleE9mKFwiIFwiKSA9PT0gLTEpKTtcbn1cbmZ1bmN0aW9uIGdldFplcm9Vbml0KHBvdGVudGlhbFVuaXRUeXBlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBwb3RlbnRpYWxVbml0VHlwZSA9PT0gXCJudW1iZXJcIlxuICAgICAgICA/IDBcbiAgICAgICAgOiBnZXRBbmltYXRhYmxlTm9uZShcIlwiLCBwb3RlbnRpYWxVbml0VHlwZSk7XG59XG5mdW5jdGlvbiBnZXRWYWx1ZVRyYW5zaXRpb24odHJhbnNpdGlvbiwga2V5KSB7XG4gICAgcmV0dXJuIHRyYW5zaXRpb25ba2V5XSB8fCB0cmFuc2l0aW9uW1wiZGVmYXVsdFwiXSB8fCB0cmFuc2l0aW9uO1xufVxuLyoqXG4gKiBTdGFydCBhbmltYXRpb24gb24gYSBNb3Rpb25WYWx1ZS4gVGhpcyBmdW5jdGlvbiBpcyBhbiBpbnRlcmZhY2UgYmV0d2VlblxuICogRnJhbWVyIE1vdGlvbiBhbmQgUG9wbW90aW9uXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0QW5pbWF0aW9uKGtleSwgdmFsdWUsIHRhcmdldCwgdHJhbnNpdGlvbikge1xuICAgIGlmICh0cmFuc2l0aW9uID09PSB2b2lkIDApIHsgdHJhbnNpdGlvbiA9IHt9OyB9XG4gICAgaWYgKGluc3RhbnRBbmltYXRpb25TdGF0ZS5jdXJyZW50KSB7XG4gICAgICAgIHRyYW5zaXRpb24gPSB7IHR5cGU6IGZhbHNlIH07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5zdGFydChmdW5jdGlvbiAob25Db21wbGV0ZSkge1xuICAgICAgICB2YXIgZGVsYXlUaW1lcjtcbiAgICAgICAgdmFyIGNvbnRyb2xzO1xuICAgICAgICB2YXIgYW5pbWF0aW9uID0gZ2V0QW5pbWF0aW9uKGtleSwgdmFsdWUsIHRhcmdldCwgdHJhbnNpdGlvbiwgb25Db21wbGV0ZSk7XG4gICAgICAgIHZhciBkZWxheSA9IGdldERlbGF5RnJvbVRyYW5zaXRpb24odHJhbnNpdGlvbiwga2V5KTtcbiAgICAgICAgdmFyIHN0YXJ0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKGNvbnRyb2xzID0gYW5pbWF0aW9uKCkpOyB9O1xuICAgICAgICBpZiAoZGVsYXkpIHtcbiAgICAgICAgICAgIGRlbGF5VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dChzdGFydCwgc2Vjb25kc1RvTWlsbGlzZWNvbmRzKGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdGFydCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVsYXlUaW1lcik7XG4gICAgICAgICAgICBjb250cm9scyA9PT0gbnVsbCB8fCBjb250cm9scyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29udHJvbHMuc3RvcCgpO1xuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5leHBvcnQgeyBjb252ZXJ0VHJhbnNpdGlvblRvQW5pbWF0aW9uT3B0aW9ucywgZ2V0RGVsYXlGcm9tVHJhbnNpdGlvbiwgZ2V0UG9wbW90aW9uQW5pbWF0aW9uT3B0aW9ucywgZ2V0VmFsdWVUcmFuc2l0aW9uLCBnZXRaZXJvVW5pdCwgaHlkcmF0ZUtleWZyYW1lcywgaXNUcmFuc2l0aW9uRGVmaW5lZCwgaXNaZXJvLCBzdGFydEFuaW1hdGlvbiB9O1xuIiwiaW1wb3J0IHsgYW5pbWF0ZSB9IGZyb20gJy4vaW5kZXgubWpzJztcbmltcG9ydCB7IHZlbG9jaXR5UGVyU2Vjb25kIH0gZnJvbSAnLi4vdXRpbHMvdmVsb2NpdHktcGVyLXNlY29uZC5tanMnO1xuaW1wb3J0IHsgZ2V0RnJhbWVEYXRhIH0gZnJvbSAnZnJhbWVzeW5jJztcblxuZnVuY3Rpb24gaW5lcnRpYSh7IGZyb20gPSAwLCB2ZWxvY2l0eSA9IDAsIG1pbiwgbWF4LCBwb3dlciA9IDAuOCwgdGltZUNvbnN0YW50ID0gNzUwLCBib3VuY2VTdGlmZm5lc3MgPSA1MDAsIGJvdW5jZURhbXBpbmcgPSAxMCwgcmVzdERlbHRhID0gMSwgbW9kaWZ5VGFyZ2V0LCBkcml2ZXIsIG9uVXBkYXRlLCBvbkNvbXBsZXRlLCBvblN0b3AsIH0pIHtcbiAgICBsZXQgY3VycmVudEFuaW1hdGlvbjtcbiAgICBmdW5jdGlvbiBpc091dE9mQm91bmRzKHYpIHtcbiAgICAgICAgcmV0dXJuIChtaW4gIT09IHVuZGVmaW5lZCAmJiB2IDwgbWluKSB8fCAobWF4ICE9PSB1bmRlZmluZWQgJiYgdiA+IG1heCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJvdW5kYXJ5TmVhcmVzdCh2KSB7XG4gICAgICAgIGlmIChtaW4gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBtYXg7XG4gICAgICAgIGlmIChtYXggPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIHJldHVybiBNYXRoLmFicyhtaW4gLSB2KSA8IE1hdGguYWJzKG1heCAtIHYpID8gbWluIDogbWF4O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdGFydEFuaW1hdGlvbihvcHRpb25zKSB7XG4gICAgICAgIGN1cnJlbnRBbmltYXRpb24gPT09IG51bGwgfHwgY3VycmVudEFuaW1hdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3VycmVudEFuaW1hdGlvbi5zdG9wKCk7XG4gICAgICAgIGN1cnJlbnRBbmltYXRpb24gPSBhbmltYXRlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgZHJpdmVyLCBvblVwZGF0ZTogKHYpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgb25VcGRhdGUgPT09IG51bGwgfHwgb25VcGRhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVXBkYXRlKHYpO1xuICAgICAgICAgICAgICAgIChfYSA9IG9wdGlvbnMub25VcGRhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKG9wdGlvbnMsIHYpO1xuICAgICAgICAgICAgfSwgb25Db21wbGV0ZSxcbiAgICAgICAgICAgIG9uU3RvcCB9KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0YXJ0U3ByaW5nKG9wdGlvbnMpIHtcbiAgICAgICAgc3RhcnRBbmltYXRpb24oT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwic3ByaW5nXCIsIHN0aWZmbmVzczogYm91bmNlU3RpZmZuZXNzLCBkYW1waW5nOiBib3VuY2VEYW1waW5nLCByZXN0RGVsdGEgfSwgb3B0aW9ucykpO1xuICAgIH1cbiAgICBpZiAoaXNPdXRPZkJvdW5kcyhmcm9tKSkge1xuICAgICAgICBzdGFydFNwcmluZyh7IGZyb20sIHZlbG9jaXR5LCB0bzogYm91bmRhcnlOZWFyZXN0KGZyb20pIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGV0IHRhcmdldCA9IHBvd2VyICogdmVsb2NpdHkgKyBmcm9tO1xuICAgICAgICBpZiAodHlwZW9mIG1vZGlmeVRhcmdldCAhPT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHRhcmdldCA9IG1vZGlmeVRhcmdldCh0YXJnZXQpO1xuICAgICAgICBjb25zdCBib3VuZGFyeSA9IGJvdW5kYXJ5TmVhcmVzdCh0YXJnZXQpO1xuICAgICAgICBjb25zdCBoZWFkaW5nID0gYm91bmRhcnkgPT09IG1pbiA/IC0xIDogMTtcbiAgICAgICAgbGV0IHByZXY7XG4gICAgICAgIGxldCBjdXJyZW50O1xuICAgICAgICBjb25zdCBjaGVja0JvdW5kYXJ5ID0gKHYpID0+IHtcbiAgICAgICAgICAgIHByZXYgPSBjdXJyZW50O1xuICAgICAgICAgICAgY3VycmVudCA9IHY7XG4gICAgICAgICAgICB2ZWxvY2l0eSA9IHZlbG9jaXR5UGVyU2Vjb25kKHYgLSBwcmV2LCBnZXRGcmFtZURhdGEoKS5kZWx0YSk7XG4gICAgICAgICAgICBpZiAoKGhlYWRpbmcgPT09IDEgJiYgdiA+IGJvdW5kYXJ5KSB8fFxuICAgICAgICAgICAgICAgIChoZWFkaW5nID09PSAtMSAmJiB2IDwgYm91bmRhcnkpKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRTcHJpbmcoeyBmcm9tOiB2LCB0bzogYm91bmRhcnksIHZlbG9jaXR5IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzdGFydEFuaW1hdGlvbih7XG4gICAgICAgICAgICB0eXBlOiBcImRlY2F5XCIsXG4gICAgICAgICAgICBmcm9tLFxuICAgICAgICAgICAgdmVsb2NpdHksXG4gICAgICAgICAgICB0aW1lQ29uc3RhbnQsXG4gICAgICAgICAgICBwb3dlcixcbiAgICAgICAgICAgIHJlc3REZWx0YSxcbiAgICAgICAgICAgIG1vZGlmeVRhcmdldCxcbiAgICAgICAgICAgIG9uVXBkYXRlOiBpc091dE9mQm91bmRzKHRhcmdldCkgPyBjaGVja0JvdW5kYXJ5IDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RvcDogKCkgPT4gY3VycmVudEFuaW1hdGlvbiA9PT0gbnVsbCB8fCBjdXJyZW50QW5pbWF0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXJyZW50QW5pbWF0aW9uLnN0b3AoKSxcbiAgICB9O1xufVxuXG5leHBvcnQgeyBpbmVydGlhIH07XG4iLCIvKipcbiAqIENoZWNrIGlmIHZhbHVlIGlzIGEgbnVtZXJpY2FsIHN0cmluZywgaWUgYSBzdHJpbmcgdGhhdCBpcyBwdXJlbHkgYSBudW1iZXIgZWcgXCIxMDBcIiBvciBcIi0xMDAuMVwiXG4gKi9cbnZhciBpc051bWVyaWNhbFN0cmluZyA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiAvXlxcLT9cXGQqXFwuP1xcZCskLy50ZXN0KHYpOyB9O1xuXG5leHBvcnQgeyBpc051bWVyaWNhbFN0cmluZyB9O1xuIiwiLyoqXG4gKiBDaGVjayBpZiB0aGUgdmFsdWUgaXMgYSB6ZXJvIHZhbHVlIHN0cmluZyBsaWtlIFwiMHB4XCIgb3IgXCIwJVwiXG4gKi9cbnZhciBpc1plcm9WYWx1ZVN0cmluZyA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiAvXjBbXi5cXHNdKyQvLnRlc3Qodik7IH07XG5cbmV4cG9ydCB7IGlzWmVyb1ZhbHVlU3RyaW5nIH07XG4iLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tICd0c2xpYic7XG5cbmZ1bmN0aW9uIGFkZFVuaXF1ZUl0ZW0oYXJyLCBpdGVtKSB7XG4gICAgYXJyLmluZGV4T2YoaXRlbSkgPT09IC0xICYmIGFyci5wdXNoKGl0ZW0pO1xufVxuZnVuY3Rpb24gcmVtb3ZlSXRlbShhcnIsIGl0ZW0pIHtcbiAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICBpbmRleCA+IC0xICYmIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xufVxuLy8gQWRhcHRlZCBmcm9tIGFycmF5LW1vdmVcbmZ1bmN0aW9uIG1vdmVJdGVtKF9hLCBmcm9tSW5kZXgsIHRvSW5kZXgpIHtcbiAgICB2YXIgX2IgPSBfX3JlYWQoX2EpLCBhcnIgPSBfYi5zbGljZSgwKTtcbiAgICB2YXIgc3RhcnRJbmRleCA9IGZyb21JbmRleCA8IDAgPyBhcnIubGVuZ3RoICsgZnJvbUluZGV4IDogZnJvbUluZGV4O1xuICAgIGlmIChzdGFydEluZGV4ID49IDAgJiYgc3RhcnRJbmRleCA8IGFyci5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGVuZEluZGV4ID0gdG9JbmRleCA8IDAgPyBhcnIubGVuZ3RoICsgdG9JbmRleCA6IHRvSW5kZXg7XG4gICAgICAgIHZhciBfYyA9IF9fcmVhZChhcnIuc3BsaWNlKGZyb21JbmRleCwgMSksIDEpLCBpdGVtID0gX2NbMF07XG4gICAgICAgIGFyci5zcGxpY2UoZW5kSW5kZXgsIDAsIGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gYXJyO1xufVxuXG5leHBvcnQgeyBhZGRVbmlxdWVJdGVtLCBtb3ZlSXRlbSwgcmVtb3ZlSXRlbSB9O1xuIiwiaW1wb3J0IHsgYWRkVW5pcXVlSXRlbSwgcmVtb3ZlSXRlbSB9IGZyb20gJy4vYXJyYXkubWpzJztcblxudmFyIFN1YnNjcmlwdGlvbk1hbmFnZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3Vic2NyaXB0aW9uTWFuYWdlcigpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XG4gICAgfVxuICAgIFN1YnNjcmlwdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGFkZFVuaXF1ZUl0ZW0odGhpcy5zdWJzY3JpcHRpb25zLCBoYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlbW92ZUl0ZW0oX3RoaXMuc3Vic2NyaXB0aW9ucywgaGFuZGxlcik7IH07XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb25NYW5hZ2VyLnByb3RvdHlwZS5ub3RpZnkgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgICB2YXIgbnVtU3Vic2NyaXB0aW9ucyA9IHRoaXMuc3Vic2NyaXB0aW9ucy5sZW5ndGg7XG4gICAgICAgIGlmICghbnVtU3Vic2NyaXB0aW9ucylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKG51bVN1YnNjcmlwdGlvbnMgPT09IDEpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgdGhlcmUncyBvbmx5IGEgc2luZ2xlIGhhbmRsZXIgd2UgY2FuIGp1c3QgY2FsbCBpdCB3aXRob3V0IGludm9raW5nIGEgbG9vcC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zWzBdKGEsIGIsIGMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1TdWJzY3JpcHRpb25zOyBpKyspIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBDaGVjayB3aGV0aGVyIHRoZSBoYW5kbGVyIGV4aXN0cyBiZWZvcmUgZmlyaW5nIGFzIGl0J3MgcG9zc2libGVcbiAgICAgICAgICAgICAgICAgKiB0aGUgc3Vic2NyaXB0aW9ucyB3ZXJlIG1vZGlmaWVkIGR1cmluZyB0aGlzIGxvb3AgcnVubmluZy5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB2YXIgaGFuZGxlciA9IHRoaXMuc3Vic2NyaXB0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyICYmIGhhbmRsZXIoYSwgYiwgYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbk1hbmFnZXIucHJvdG90eXBlLmdldFNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YnNjcmlwdGlvbnMubGVuZ3RoO1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uTWFuYWdlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5sZW5ndGggPSAwO1xuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmlwdGlvbk1hbmFnZXI7XG59KCkpO1xuXG5leHBvcnQgeyBTdWJzY3JpcHRpb25NYW5hZ2VyIH07XG4iLCJpbXBvcnQgc3luYywgeyBnZXRGcmFtZURhdGEgfSBmcm9tICdmcmFtZXN5bmMnO1xuaW1wb3J0IHsgdmVsb2NpdHlQZXJTZWNvbmQgfSBmcm9tICdwb3Btb3Rpb24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uTWFuYWdlciB9IGZyb20gJy4uL3V0aWxzL3N1YnNjcmlwdGlvbi1tYW5hZ2VyLm1qcyc7XG5cbnZhciBpc0Zsb2F0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KHZhbHVlKSk7XG59O1xuLyoqXG4gKiBgTW90aW9uVmFsdWVgIGlzIHVzZWQgdG8gdHJhY2sgdGhlIHN0YXRlIGFuZCB2ZWxvY2l0eSBvZiBtb3Rpb24gdmFsdWVzLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xudmFyIE1vdGlvblZhbHVlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBpbml0IC0gVGhlIGluaXRpYXRpbmcgdmFsdWVcbiAgICAgKiBAcGFyYW0gY29uZmlnIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAgICpcbiAgICAgKiAtICBgdHJhbnNmb3JtZXJgOiBBIGZ1bmN0aW9uIHRvIHRyYW5zZm9ybSBpbmNvbWluZyB2YWx1ZXMgd2l0aC5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIE1vdGlvblZhbHVlKGluaXQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgYnVpbGQgc3RlcCB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBudW1iZXIuXG4gICAgICAgICAqIFdoZW4gTW90aW9uVmFsdWVzIGFyZSBwcm92aWRlZCB0byBtb3Rpb24gY29tcG9uZW50cywgd2FybiBpZiB2ZXJzaW9ucyBhcmUgbWl4ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZlcnNpb24gPSBcIjYuNS4xXCI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEdXJhdGlvbiwgaW4gbWlsbGlzZWNvbmRzLCBzaW5jZSBsYXN0IHVwZGF0aW5nIGZyYW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGltZURlbHRhID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRpbWVzdGFtcCBvZiB0aGUgbGFzdCB0aW1lIHRoaXMgYE1vdGlvblZhbHVlYCB3YXMgdXBkYXRlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmxhc3RVcGRhdGVkID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZ1bmN0aW9ucyB0byBub3RpZnkgd2hlbiB0aGUgYE1vdGlvblZhbHVlYCB1cGRhdGVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudXBkYXRlU3Vic2NyaWJlcnMgPSBuZXcgU3Vic2NyaXB0aW9uTWFuYWdlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRnVuY3Rpb25zIHRvIG5vdGlmeSB3aGVuIHRoZSB2ZWxvY2l0eSB1cGRhdGVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudmVsb2NpdHlVcGRhdGVTdWJzY3JpYmVycyA9IG5ldyBTdWJzY3JpcHRpb25NYW5hZ2VyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGdW5jdGlvbnMgdG8gbm90aWZ5IHdoZW4gdGhlIGBNb3Rpb25WYWx1ZWAgdXBkYXRlcyBhbmQgYHJlbmRlcmAgaXMgc2V0IHRvIGB0cnVlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlbmRlclN1YnNjcmliZXJzID0gbmV3IFN1YnNjcmlwdGlvbk1hbmFnZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRyYWNrcyB3aGV0aGVyIHRoaXMgdmFsdWUgY2FuIG91dHB1dCBhIHZlbG9jaXR5LiBDdXJyZW50bHkgdGhpcyBpcyBvbmx5IHRydWVcbiAgICAgICAgICogaWYgdGhlIHZhbHVlIGlzIG51bWVyaWNhbCwgYnV0IHdlIG1pZ2h0IGJlIGFibGUgdG8gd2lkZW4gdGhlIHNjb3BlIGhlcmUgYW5kIHN1cHBvcnRcbiAgICAgICAgICogb3RoZXIgdmFsdWUgdHlwZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jYW5UcmFja1ZlbG9jaXR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMudXBkYXRlQW5kTm90aWZ5ID0gZnVuY3Rpb24gKHYsIHJlbmRlcikge1xuICAgICAgICAgICAgaWYgKHJlbmRlciA9PT0gdm9pZCAwKSB7IHJlbmRlciA9IHRydWU7IH1cbiAgICAgICAgICAgIF90aGlzLnByZXYgPSBfdGhpcy5jdXJyZW50O1xuICAgICAgICAgICAgX3RoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICAvLyBVcGRhdGUgdGltZXN0YW1wXG4gICAgICAgICAgICB2YXIgX2EgPSBnZXRGcmFtZURhdGEoKSwgZGVsdGEgPSBfYS5kZWx0YSwgdGltZXN0YW1wID0gX2EudGltZXN0YW1wO1xuICAgICAgICAgICAgaWYgKF90aGlzLmxhc3RVcGRhdGVkICE9PSB0aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICBfdGhpcy50aW1lRGVsdGEgPSBkZWx0YTtcbiAgICAgICAgICAgICAgICBfdGhpcy5sYXN0VXBkYXRlZCA9IHRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICBzeW5jLnBvc3RSZW5kZXIoX3RoaXMuc2NoZWR1bGVWZWxvY2l0eUNoZWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFVwZGF0ZSB1cGRhdGUgc3Vic2NyaWJlcnNcbiAgICAgICAgICAgIGlmIChfdGhpcy5wcmV2ICE9PSBfdGhpcy5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgX3RoaXMudXBkYXRlU3Vic2NyaWJlcnMubm90aWZ5KF90aGlzLmN1cnJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVXBkYXRlIHZlbG9jaXR5IHN1YnNjcmliZXJzXG4gICAgICAgICAgICBpZiAoX3RoaXMudmVsb2NpdHlVcGRhdGVTdWJzY3JpYmVycy5nZXRTaXplKCkpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzLm5vdGlmeShfdGhpcy5nZXRWZWxvY2l0eSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFVwZGF0ZSByZW5kZXIgc3Vic2NyaWJlcnNcbiAgICAgICAgICAgIGlmIChyZW5kZXIpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5yZW5kZXJTdWJzY3JpYmVycy5ub3RpZnkoX3RoaXMuY3VycmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTY2hlZHVsZSBhIHZlbG9jaXR5IGNoZWNrIGZvciB0aGUgbmV4dCBmcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhpcyBpcyBhbiBpbnN0YW5jZWQgYW5kIGJvdW5kIGZ1bmN0aW9uIHRvIHByZXZlbnQgZ2VuZXJhdGluZyBhIG5ld1xuICAgICAgICAgKiBmdW5jdGlvbiBvbmNlIHBlciBmcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNjaGVkdWxlVmVsb2NpdHlDaGVjayA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN5bmMucG9zdFJlbmRlcihfdGhpcy52ZWxvY2l0eUNoZWNrKTsgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVwZGF0ZXMgYHByZXZgIHdpdGggYGN1cnJlbnRgIGlmIHRoZSB2YWx1ZSBoYXNuJ3QgYmVlbiB1cGRhdGVkIHRoaXMgZnJhbWUuXG4gICAgICAgICAqIFRoaXMgZW5zdXJlcyB2ZWxvY2l0eSBjYWxjdWxhdGlvbnMgcmV0dXJuIGAwYC5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhpcyBpcyBhbiBpbnN0YW5jZWQgYW5kIGJvdW5kIGZ1bmN0aW9uIHRvIHByZXZlbnQgZ2VuZXJhdGluZyBhIG5ld1xuICAgICAgICAgKiBmdW5jdGlvbiBvbmNlIHBlciBmcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZlbG9jaXR5Q2hlY2sgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciB0aW1lc3RhbXAgPSBfYS50aW1lc3RhbXA7XG4gICAgICAgICAgICBpZiAodGltZXN0YW1wICE9PSBfdGhpcy5sYXN0VXBkYXRlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLnByZXYgPSBfdGhpcy5jdXJyZW50O1xuICAgICAgICAgICAgICAgIF90aGlzLnZlbG9jaXR5VXBkYXRlU3Vic2NyaWJlcnMubm90aWZ5KF90aGlzLmdldFZlbG9jaXR5KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmhhc0FuaW1hdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHJldiA9IHRoaXMuY3VycmVudCA9IGluaXQ7XG4gICAgICAgIHRoaXMuY2FuVHJhY2tWZWxvY2l0eSA9IGlzRmxvYXQodGhpcy5jdXJyZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBub3RpZmllZCB3aGVuIHRoZSBgTW90aW9uVmFsdWVgIGlzIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBJdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsIHdpbGwgY2FuY2VsIHRoZSBzdWJzY3JpcHRpb24uXG4gICAgICpcbiAgICAgKiBXaGVuIGNhbGxpbmcgYG9uQ2hhbmdlYCBpbnNpZGUgYSBSZWFjdCBjb21wb25lbnQsIGl0IHNob3VsZCBiZSB3cmFwcGVkIHdpdGggdGhlXG4gICAgICogYHVzZUVmZmVjdGAgaG9vay4gQXMgaXQgcmV0dXJucyBhbiB1bnN1YnNjcmliZSBmdW5jdGlvbiwgdGhpcyBzaG91bGQgYmUgcmV0dXJuZWRcbiAgICAgKiBmcm9tIHRoZSBgdXNlRWZmZWN0YCBmdW5jdGlvbiB0byBlbnN1cmUgeW91IGRvbid0IGFkZCBkdXBsaWNhdGUgc3Vic2NyaWJlcnMuLlxuICAgICAqXG4gICAgICogYGBganN4XG4gICAgICogZXhwb3J0IGNvbnN0IE15Q29tcG9uZW50ID0gKCkgPT4ge1xuICAgICAqICAgY29uc3QgeCA9IHVzZU1vdGlvblZhbHVlKDApXG4gICAgICogICBjb25zdCB5ID0gdXNlTW90aW9uVmFsdWUoMClcbiAgICAgKiAgIGNvbnN0IG9wYWNpdHkgPSB1c2VNb3Rpb25WYWx1ZSgxKVxuICAgICAqXG4gICAgICogICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAqICAgICBmdW5jdGlvbiB1cGRhdGVPcGFjaXR5KCkge1xuICAgICAqICAgICAgIGNvbnN0IG1heFhZID0gTWF0aC5tYXgoeC5nZXQoKSwgeS5nZXQoKSlcbiAgICAgKiAgICAgICBjb25zdCBuZXdPcGFjaXR5ID0gdHJhbnNmb3JtKG1heFhZLCBbMCwgMTAwXSwgWzEsIDBdKVxuICAgICAqICAgICAgIG9wYWNpdHkuc2V0KG5ld09wYWNpdHkpXG4gICAgICogICAgIH1cbiAgICAgKlxuICAgICAqICAgICBjb25zdCB1bnN1YnNjcmliZVggPSB4Lm9uQ2hhbmdlKHVwZGF0ZU9wYWNpdHkpXG4gICAgICogICAgIGNvbnN0IHVuc3Vic2NyaWJlWSA9IHkub25DaGFuZ2UodXBkYXRlT3BhY2l0eSlcbiAgICAgKlxuICAgICAqICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAqICAgICAgIHVuc3Vic2NyaWJlWCgpXG4gICAgICogICAgICAgdW5zdWJzY3JpYmVZKClcbiAgICAgKiAgICAgfVxuICAgICAqICAgfSwgW10pXG4gICAgICpcbiAgICAgKiAgIHJldHVybiA8bW90aW9uLmRpdiBzdHlsZT17eyB4IH19IC8+XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHByaXZhdGVSZW1hcmtzXG4gICAgICpcbiAgICAgKiBXZSBjb3VsZCBsb29rIGludG8gYSBgdXNlT25DaGFuZ2VgIGhvb2sgaWYgdGhlIGFib3ZlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IHByb3ZlcyBjb25mdXNpbmcuXG4gICAgICpcbiAgICAgKiBgYGBqc3hcbiAgICAgKiB1c2VPbkNoYW5nZSh4LCAoKSA9PiB7fSlcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdWJzY3JpYmVyIC0gQSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIHRoZSBsYXRlc3QgdmFsdWUuXG4gICAgICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCwgd2lsbCBjYW5jZWwgdGhpcyBzdWJzY3JpcHRpb24uXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgTW90aW9uVmFsdWUucHJvdG90eXBlLm9uQ2hhbmdlID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVTdWJzY3JpYmVycy5hZGQoc3Vic2NyaXB0aW9uKTtcbiAgICB9O1xuICAgIE1vdGlvblZhbHVlLnByb3RvdHlwZS5jbGVhckxpc3RlbmVycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTdWJzY3JpYmVycy5jbGVhcigpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBub3RpZmllZCB3aGVuIHRoZSBgTW90aW9uVmFsdWVgIHJlcXVlc3RzIGEgcmVuZGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN1YnNjcmliZXIgLSBBIGZ1bmN0aW9uIHRoYXQncyBwcm92aWRlZCB0aGUgbGF0ZXN0IHZhbHVlLlxuICAgICAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsIHdpbGwgY2FuY2VsIHRoaXMgc3Vic2NyaXB0aW9uLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgTW90aW9uVmFsdWUucHJvdG90eXBlLm9uUmVuZGVyUmVxdWVzdCA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgLy8gUmVuZGVyIGltbWVkaWF0ZWx5XG4gICAgICAgIHN1YnNjcmlwdGlvbih0aGlzLmdldCgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyU3Vic2NyaWJlcnMuYWRkKHN1YnNjcmlwdGlvbik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2hlcyBhIHBhc3NpdmUgZWZmZWN0IHRvIHRoZSBgTW90aW9uVmFsdWVgLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgTW90aW9uVmFsdWUucHJvdG90eXBlLmF0dGFjaCA9IGZ1bmN0aW9uIChwYXNzaXZlRWZmZWN0KSB7XG4gICAgICAgIHRoaXMucGFzc2l2ZUVmZmVjdCA9IHBhc3NpdmVFZmZlY3Q7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgYE1vdGlvblZhbHVlYC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICpcbiAgICAgKiBgYGBqc3hcbiAgICAgKiBjb25zdCB4ID0gdXNlTW90aW9uVmFsdWUoMClcbiAgICAgKiB4LnNldCgxMClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBsYXRlc3QgLSBMYXRlc3QgdmFsdWUgdG8gc2V0LlxuICAgICAqIEBwYXJhbSByZW5kZXIgLSBXaGV0aGVyIHRvIG5vdGlmeSByZW5kZXIgc3Vic2NyaWJlcnMuIERlZmF1bHRzIHRvIGB0cnVlYFxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIE1vdGlvblZhbHVlLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAodiwgcmVuZGVyKSB7XG4gICAgICAgIGlmIChyZW5kZXIgPT09IHZvaWQgMCkgeyByZW5kZXIgPSB0cnVlOyB9XG4gICAgICAgIGlmICghcmVuZGVyIHx8ICF0aGlzLnBhc3NpdmVFZmZlY3QpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQW5kTm90aWZ5KHYsIHJlbmRlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBhc3NpdmVFZmZlY3QodiwgdGhpcy51cGRhdGVBbmROb3RpZnkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsYXRlc3Qgc3RhdGUgb2YgYE1vdGlvblZhbHVlYFxuICAgICAqXG4gICAgICogQHJldHVybnMgLSBUaGUgbGF0ZXN0IHN0YXRlIG9mIGBNb3Rpb25WYWx1ZWBcbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBNb3Rpb25WYWx1ZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50O1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIE1vdGlvblZhbHVlLnByb3RvdHlwZS5nZXRQcmV2aW91cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJldjtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxhdGVzdCB2ZWxvY2l0eSBvZiBgTW90aW9uVmFsdWVgXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyAtIFRoZSBsYXRlc3QgdmVsb2NpdHkgb2YgYE1vdGlvblZhbHVlYC4gUmV0dXJucyBgMGAgaWYgdGhlIHN0YXRlIGlzIG5vbi1udW1lcmljYWwuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgTW90aW9uVmFsdWUucHJvdG90eXBlLmdldFZlbG9jaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIGlzRmxvYXQodGhpcy5wcmV2KSAmJiBpc0Zsb2F0KHRoaXMuY3VycmVudCksIGJ1dCB0aGF0IHdvdWxkIGJlIHdhc3RlZnVsXG4gICAgICAgIHJldHVybiB0aGlzLmNhblRyYWNrVmVsb2NpdHlcbiAgICAgICAgICAgID8gLy8gVGhlc2UgY2FzdHMgY291bGQgYmUgYXZvaWRlZCBpZiBwYXJzZUZsb2F0IHdvdWxkIGJlIHR5cGVkIGJldHRlclxuICAgICAgICAgICAgICAgIHZlbG9jaXR5UGVyU2Vjb25kKHBhcnNlRmxvYXQodGhpcy5jdXJyZW50KSAtXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQodGhpcy5wcmV2KSwgdGhpcy50aW1lRGVsdGEpXG4gICAgICAgICAgICA6IDA7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZWdpc3RlcnMgYSBuZXcgYW5pbWF0aW9uIHRvIGNvbnRyb2wgdGhpcyBgTW90aW9uVmFsdWVgLiBPbmx5IG9uZVxuICAgICAqIGFuaW1hdGlvbiBjYW4gZHJpdmUgYSBgTW90aW9uVmFsdWVgIGF0IG9uZSB0aW1lLlxuICAgICAqXG4gICAgICogYGBganN4XG4gICAgICogdmFsdWUuc3RhcnQoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIGFuaW1hdGlvbiAtIEEgZnVuY3Rpb24gdGhhdCBzdGFydHMgdGhlIHByb3ZpZGVkIGFuaW1hdGlvblxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgTW90aW9uVmFsdWUucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKGFuaW1hdGlvbikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICBfdGhpcy5oYXNBbmltYXRlZCA9IHRydWU7XG4gICAgICAgICAgICBfdGhpcy5zdG9wQW5pbWF0aW9uID0gYW5pbWF0aW9uKHJlc29sdmUpO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmNsZWFyQW5pbWF0aW9uKCk7IH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU3RvcCB0aGUgY3VycmVudGx5IGFjdGl2ZSBhbmltYXRpb24uXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgTW90aW9uVmFsdWUucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0b3BBbmltYXRpb24pXG4gICAgICAgICAgICB0aGlzLnN0b3BBbmltYXRpb24oKTtcbiAgICAgICAgdGhpcy5jbGVhckFuaW1hdGlvbigpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyB2YWx1ZSBpcyBjdXJyZW50bHkgYW5pbWF0aW5nLlxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIE1vdGlvblZhbHVlLnByb3RvdHlwZS5pc0FuaW1hdGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5zdG9wQW5pbWF0aW9uO1xuICAgIH07XG4gICAgTW90aW9uVmFsdWUucHJvdG90eXBlLmNsZWFyQW5pbWF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnN0b3BBbmltYXRpb24gPSBudWxsO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogRGVzdHJveSBhbmQgY2xlYW4gdXAgc3Vic2NyaWJlcnMgdG8gdGhpcyBgTW90aW9uVmFsdWVgLlxuICAgICAqXG4gICAgICogVGhlIGBNb3Rpb25WYWx1ZWAgaG9va3MgbGlrZSBgdXNlTW90aW9uVmFsdWVgIGFuZCBgdXNlVHJhbnNmb3JtYCBhdXRvbWF0aWNhbGx5XG4gICAgICogaGFuZGxlIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHJldHVybmVkIGBNb3Rpb25WYWx1ZWAsIHNvIHRoaXMgbWV0aG9kIGlzIG9ubHkgbmVjZXNzYXJ5IGlmIHlvdSd2ZSBtYW51YWxseVxuICAgICAqIGNyZWF0ZWQgYSBgTW90aW9uVmFsdWVgIHZpYSB0aGUgYG1vdGlvblZhbHVlYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBNb3Rpb25WYWx1ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTdWJzY3JpYmVycy5jbGVhcigpO1xuICAgICAgICB0aGlzLnJlbmRlclN1YnNjcmliZXJzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuc3RvcCgpO1xuICAgIH07XG4gICAgcmV0dXJuIE1vdGlvblZhbHVlO1xufSgpKTtcbmZ1bmN0aW9uIG1vdGlvblZhbHVlKGluaXQpIHtcbiAgICByZXR1cm4gbmV3IE1vdGlvblZhbHVlKGluaXQpO1xufVxuXG5leHBvcnQgeyBNb3Rpb25WYWx1ZSwgbW90aW9uVmFsdWUgfTtcbiIsIi8qKlxuICogVGVzdHMgYSBwcm92aWRlZCB2YWx1ZSBhZ2FpbnN0IGEgVmFsdWVUeXBlXG4gKi9cbnZhciB0ZXN0VmFsdWVUeXBlID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIGZ1bmN0aW9uICh0eXBlKSB7IHJldHVybiB0eXBlLnRlc3Qodik7IH07IH07XG5cbmV4cG9ydCB7IHRlc3RWYWx1ZVR5cGUgfTtcbiIsImltcG9ydCB7IG51bWJlciwgcHgsIHBlcmNlbnQsIGRlZ3JlZXMsIHZ3LCB2aCB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcbmltcG9ydCB7IHRlc3RWYWx1ZVR5cGUgfSBmcm9tICcuL3Rlc3QubWpzJztcbmltcG9ydCB7IGF1dG8gfSBmcm9tICcuL3R5cGUtYXV0by5tanMnO1xuXG4vKipcbiAqIEEgbGlzdCBvZiB2YWx1ZSB0eXBlcyBjb21tb25seSB1c2VkIGZvciBkaW1lbnNpb25zXG4gKi9cbnZhciBkaW1lbnNpb25WYWx1ZVR5cGVzID0gW251bWJlciwgcHgsIHBlcmNlbnQsIGRlZ3JlZXMsIHZ3LCB2aCwgYXV0b107XG4vKipcbiAqIFRlc3RzIGEgZGltZW5zaW9uYWwgdmFsdWUgYWdhaW5zdCB0aGUgbGlzdCBvZiBkaW1lbnNpb24gVmFsdWVUeXBlc1xuICovXG52YXIgZmluZERpbWVuc2lvblZhbHVlVHlwZSA9IGZ1bmN0aW9uICh2KSB7XG4gICAgcmV0dXJuIGRpbWVuc2lvblZhbHVlVHlwZXMuZmluZCh0ZXN0VmFsdWVUeXBlKHYpKTtcbn07XG5cbmV4cG9ydCB7IGRpbWVuc2lvblZhbHVlVHlwZXMsIGZpbmREaW1lbnNpb25WYWx1ZVR5cGUgfTtcbiIsIi8qKlxuICogVmFsdWVUeXBlIGZvciBcImF1dG9cIlxuICovXG52YXIgYXV0byA9IHtcbiAgICB0ZXN0OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiA9PT0gXCJhdXRvXCI7IH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2OyB9LFxufTtcblxuZXhwb3J0IHsgYXV0byB9O1xuIiwiaW1wb3J0IHsgX19zcHJlYWRBcnJheSwgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgY29sb3IsIGNvbXBsZXggfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5pbXBvcnQgeyBkaW1lbnNpb25WYWx1ZVR5cGVzIH0gZnJvbSAnLi9kaW1lbnNpb25zLm1qcyc7XG5pbXBvcnQgeyB0ZXN0VmFsdWVUeXBlIH0gZnJvbSAnLi90ZXN0Lm1qcyc7XG5cbi8qKlxuICogQSBsaXN0IG9mIGFsbCBWYWx1ZVR5cGVzXG4gKi9cbnZhciB2YWx1ZVR5cGVzID0gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoZGltZW5zaW9uVmFsdWVUeXBlcyksIGZhbHNlKSwgW2NvbG9yLCBjb21wbGV4XSwgZmFsc2UpO1xuLyoqXG4gKiBUZXN0cyBhIHZhbHVlIGFnYWluc3QgdGhlIGxpc3Qgb2YgVmFsdWVUeXBlc1xuICovXG52YXIgZmluZFZhbHVlVHlwZSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2YWx1ZVR5cGVzLmZpbmQodGVzdFZhbHVlVHlwZSh2KSk7IH07XG5cbmV4cG9ydCB7IGZpbmRWYWx1ZVR5cGUgfTtcbiIsImltcG9ydCB7IF9fcmVzdCwgX19hc3NpZ24sIF9fc3ByZWFkQXJyYXksIF9fcmVhZCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGNvbXBsZXggfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5pbXBvcnQgeyBpc051bWVyaWNhbFN0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzL2lzLW51bWVyaWNhbC1zdHJpbmcubWpzJztcbmltcG9ydCB7IGlzWmVyb1ZhbHVlU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvaXMtemVyby12YWx1ZS1zdHJpbmcubWpzJztcbmltcG9ydCB7IHJlc29sdmVGaW5hbFZhbHVlSW5LZXlmcmFtZXMgfSBmcm9tICcuLi8uLi91dGlscy9yZXNvbHZlLXZhbHVlLm1qcyc7XG5pbXBvcnQgeyBtb3Rpb25WYWx1ZSB9IGZyb20gJy4uLy4uL3ZhbHVlL2luZGV4Lm1qcyc7XG5pbXBvcnQgeyBnZXRBbmltYXRhYmxlTm9uZSB9IGZyb20gJy4uL2RvbS92YWx1ZS10eXBlcy9hbmltYXRhYmxlLW5vbmUubWpzJztcbmltcG9ydCB7IGZpbmRWYWx1ZVR5cGUgfSBmcm9tICcuLi9kb20vdmFsdWUtdHlwZXMvZmluZC5tanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhcmlhbnQgfSBmcm9tICcuL3ZhcmlhbnRzLm1qcyc7XG5cbi8qKlxuICogU2V0IFZpc3VhbEVsZW1lbnQncyBNb3Rpb25WYWx1ZSwgY3JlYXRpbmcgYSBuZXcgTW90aW9uVmFsdWUgZm9yIGl0IGlmXG4gKiBpdCBkb2Vzbid0IGV4aXN0LlxuICovXG5mdW5jdGlvbiBzZXRNb3Rpb25WYWx1ZSh2aXN1YWxFbGVtZW50LCBrZXksIHZhbHVlKSB7XG4gICAgaWYgKHZpc3VhbEVsZW1lbnQuaGFzVmFsdWUoa2V5KSkge1xuICAgICAgICB2aXN1YWxFbGVtZW50LmdldFZhbHVlKGtleSkuc2V0KHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZpc3VhbEVsZW1lbnQuYWRkVmFsdWUoa2V5LCBtb3Rpb25WYWx1ZSh2YWx1ZSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHNldFRhcmdldCh2aXN1YWxFbGVtZW50LCBkZWZpbml0aW9uKSB7XG4gICAgdmFyIHJlc29sdmVkID0gcmVzb2x2ZVZhcmlhbnQodmlzdWFsRWxlbWVudCwgZGVmaW5pdGlvbik7XG4gICAgdmFyIF9hID0gcmVzb2x2ZWQgPyB2aXN1YWxFbGVtZW50Lm1ha2VUYXJnZXRBbmltYXRhYmxlKHJlc29sdmVkLCBmYWxzZSkgOiB7fSwgX2IgPSBfYS50cmFuc2l0aW9uRW5kLCB0cmFuc2l0aW9uRW5kID0gX2IgPT09IHZvaWQgMCA/IHt9IDogX2I7IF9hLnRyYW5zaXRpb247IHZhciB0YXJnZXQgPSBfX3Jlc3QoX2EsIFtcInRyYW5zaXRpb25FbmRcIiwgXCJ0cmFuc2l0aW9uXCJdKTtcbiAgICB0YXJnZXQgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgdGFyZ2V0KSwgdHJhbnNpdGlvbkVuZCk7XG4gICAgZm9yICh2YXIga2V5IGluIHRhcmdldCkge1xuICAgICAgICB2YXIgdmFsdWUgPSByZXNvbHZlRmluYWxWYWx1ZUluS2V5ZnJhbWVzKHRhcmdldFtrZXldKTtcbiAgICAgICAgc2V0TW90aW9uVmFsdWUodmlzdWFsRWxlbWVudCwga2V5LCB2YWx1ZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gc2V0VmFyaWFudHModmlzdWFsRWxlbWVudCwgdmFyaWFudExhYmVscykge1xuICAgIHZhciByZXZlcnNlZExhYmVscyA9IF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZCh2YXJpYW50TGFiZWxzKSwgZmFsc2UpLnJldmVyc2UoKTtcbiAgICByZXZlcnNlZExhYmVscy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgdmFyaWFudCA9IHZpc3VhbEVsZW1lbnQuZ2V0VmFyaWFudChrZXkpO1xuICAgICAgICB2YXJpYW50ICYmIHNldFRhcmdldCh2aXN1YWxFbGVtZW50LCB2YXJpYW50KTtcbiAgICAgICAgKF9hID0gdmlzdWFsRWxlbWVudC52YXJpYW50Q2hpbGRyZW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICAgICAgc2V0VmFyaWFudHMoY2hpbGQsIHZhcmlhbnRMYWJlbHMpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHNldFZhbHVlcyh2aXN1YWxFbGVtZW50LCBkZWZpbml0aW9uKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIHNldFZhcmlhbnRzKHZpc3VhbEVsZW1lbnQsIGRlZmluaXRpb24pO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5pdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gc2V0VmFyaWFudHModmlzdWFsRWxlbWVudCwgW2RlZmluaXRpb25dKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNldFRhcmdldCh2aXN1YWxFbGVtZW50LCBkZWZpbml0aW9uKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjaGVja1RhcmdldEZvck5ld1ZhbHVlcyh2aXN1YWxFbGVtZW50LCB0YXJnZXQsIG9yaWdpbikge1xuICAgIHZhciBfYSwgX2IsIF9jO1xuICAgIHZhciBfZDtcbiAgICB2YXIgbmV3VmFsdWVLZXlzID0gT2JqZWN0LmtleXModGFyZ2V0KS5maWx0ZXIoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gIXZpc3VhbEVsZW1lbnQuaGFzVmFsdWUoa2V5KTsgfSk7XG4gICAgdmFyIG51bU5ld1ZhbHVlcyA9IG5ld1ZhbHVlS2V5cy5sZW5ndGg7XG4gICAgaWYgKCFudW1OZXdWYWx1ZXMpXG4gICAgICAgIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bU5ld1ZhbHVlczsgaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBuZXdWYWx1ZUtleXNbaV07XG4gICAgICAgIHZhciB0YXJnZXRWYWx1ZSA9IHRhcmdldFtrZXldO1xuICAgICAgICB2YXIgdmFsdWUgPSBudWxsO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlIHRhcmdldCBpcyBhIHNlcmllcyBvZiBrZXlmcmFtZXMsIHdlIGNhbiB1c2UgdGhlIGZpcnN0IHZhbHVlXG4gICAgICAgICAqIGluIHRoZSBhcnJheS4gSWYgdGhpcyBmaXJzdCB2YWx1ZSBpcyBudWxsLCB3ZSdsbCBzdGlsbCBuZWVkIHRvIHJlYWQgZnJvbSB0aGUgRE9NLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0VmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRhcmdldFZhbHVlWzBdO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiB0aGUgdGFyZ2V0IGlzbid0IGtleWZyYW1lcywgb3IgdGhlIGZpcnN0IGtleWZyYW1lIHdhcyBudWxsLCB3ZSBuZWVkIHRvXG4gICAgICAgICAqIGZpcnN0IGNoZWNrIGlmIGFuIG9yaWdpbiB2YWx1ZSB3YXMgZXhwbGljaXRseSBkZWZpbmVkIGluIHRoZSB0cmFuc2l0aW9uIGFzIFwiZnJvbVwiLFxuICAgICAgICAgKiBpZiBub3QgcmVhZCB0aGUgdmFsdWUgZnJvbSB0aGUgRE9NLiBBcyBhbiBhYnNvbHV0ZSBmYWxsYmFjaywgdGFrZSB0aGUgZGVmaW5lZCB0YXJnZXQgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhbHVlID0gKF9iID0gKF9hID0gb3JpZ2luW2tleV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZpc3VhbEVsZW1lbnQucmVhZFZhbHVlKGtleSkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHRhcmdldFtrZXldO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiB2YWx1ZSBpcyBzdGlsbCB1bmRlZmluZWQgb3IgbnVsbCwgaWdub3JlIGl0LiBQcmVmZXJhYmx5IHRoaXMgd291bGQgdGhyb3csXG4gICAgICAgICAqIGJ1dCB0aGlzIHdhcyBjYXVzaW5nIGlzc3VlcyBpbiBGcmFtZXIuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAoaXNOdW1lcmljYWxTdHJpbmcodmFsdWUpIHx8IGlzWmVyb1ZhbHVlU3RyaW5nKHZhbHVlKSkpIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBudW1iZXIgcmVhZCBhcyBhIHN0cmluZywgaWUgXCIwXCIgb3IgXCIyMDBcIiwgY29udmVydCBpdCB0byBhIG51bWJlclxuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghZmluZFZhbHVlVHlwZSh2YWx1ZSkgJiYgY29tcGxleC50ZXN0KHRhcmdldFZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBnZXRBbmltYXRhYmxlTm9uZShrZXksIHRhcmdldFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB2aXN1YWxFbGVtZW50LmFkZFZhbHVlKGtleSwgbW90aW9uVmFsdWUodmFsdWUpKTtcbiAgICAgICAgKF9jID0gKF9kID0gb3JpZ2luKVtrZXldKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAoX2Rba2V5XSA9IHZhbHVlKTtcbiAgICAgICAgdmlzdWFsRWxlbWVudC5zZXRCYXNlVGFyZ2V0KGtleSwgdmFsdWUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldE9yaWdpbkZyb21UcmFuc2l0aW9uKGtleSwgdHJhbnNpdGlvbikge1xuICAgIGlmICghdHJhbnNpdGlvbilcbiAgICAgICAgcmV0dXJuO1xuICAgIHZhciB2YWx1ZVRyYW5zaXRpb24gPSB0cmFuc2l0aW9uW2tleV0gfHwgdHJhbnNpdGlvbltcImRlZmF1bHRcIl0gfHwgdHJhbnNpdGlvbjtcbiAgICByZXR1cm4gdmFsdWVUcmFuc2l0aW9uLmZyb207XG59XG5mdW5jdGlvbiBnZXRPcmlnaW4odGFyZ2V0LCB0cmFuc2l0aW9uLCB2aXN1YWxFbGVtZW50KSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICB2YXIgb3JpZ2luID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIHRhcmdldCkge1xuICAgICAgICBvcmlnaW5ba2V5XSA9XG4gICAgICAgICAgICAoX2EgPSBnZXRPcmlnaW5Gcm9tVHJhbnNpdGlvbihrZXksIHRyYW5zaXRpb24pKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoX2IgPSB2aXN1YWxFbGVtZW50LmdldFZhbHVlKGtleSkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5nZXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIG9yaWdpbjtcbn1cblxuZXhwb3J0IHsgY2hlY2tUYXJnZXRGb3JOZXdWYWx1ZXMsIGdldE9yaWdpbiwgZ2V0T3JpZ2luRnJvbVRyYW5zaXRpb24sIHNldFRhcmdldCwgc2V0VmFsdWVzIH07XG4iLCJpbXBvcnQgeyBfX3JlYWQsIF9fcmVzdCwgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBzdGFydEFuaW1hdGlvbiB9IGZyb20gJy4uLy4uL2FuaW1hdGlvbi91dGlscy90cmFuc2l0aW9ucy5tanMnO1xuaW1wb3J0IHsgc2V0VGFyZ2V0IH0gZnJvbSAnLi9zZXR0ZXJzLm1qcyc7XG5pbXBvcnQgeyByZXNvbHZlVmFyaWFudCB9IGZyb20gJy4vdmFyaWFudHMubWpzJztcbmltcG9ydCB7IGlzVHJhbnNmb3JtUHJvcCB9IGZyb20gJy4uL2h0bWwvdXRpbHMvdHJhbnNmb3JtLm1qcyc7XG5cbmZ1bmN0aW9uIGFuaW1hdGVWaXN1YWxFbGVtZW50KHZpc3VhbEVsZW1lbnQsIGRlZmluaXRpb24sIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZpc3VhbEVsZW1lbnQubm90aWZ5QW5pbWF0aW9uU3RhcnQoZGVmaW5pdGlvbik7XG4gICAgdmFyIGFuaW1hdGlvbjtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZpbml0aW9uKSkge1xuICAgICAgICB2YXIgYW5pbWF0aW9ucyA9IGRlZmluaXRpb24ubWFwKGZ1bmN0aW9uICh2YXJpYW50KSB7XG4gICAgICAgICAgICByZXR1cm4gYW5pbWF0ZVZhcmlhbnQodmlzdWFsRWxlbWVudCwgdmFyaWFudCwgb3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgICAgICBhbmltYXRpb24gPSBQcm9taXNlLmFsbChhbmltYXRpb25zKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluaXRpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgYW5pbWF0aW9uID0gYW5pbWF0ZVZhcmlhbnQodmlzdWFsRWxlbWVudCwgZGVmaW5pdGlvbiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgcmVzb2x2ZWREZWZpbml0aW9uID0gdHlwZW9mIGRlZmluaXRpb24gPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgPyByZXNvbHZlVmFyaWFudCh2aXN1YWxFbGVtZW50LCBkZWZpbml0aW9uLCBvcHRpb25zLmN1c3RvbSlcbiAgICAgICAgICAgIDogZGVmaW5pdGlvbjtcbiAgICAgICAgYW5pbWF0aW9uID0gYW5pbWF0ZVRhcmdldCh2aXN1YWxFbGVtZW50LCByZXNvbHZlZERlZmluaXRpb24sIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gYW5pbWF0aW9uLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmlzdWFsRWxlbWVudC5ub3RpZnlBbmltYXRpb25Db21wbGV0ZShkZWZpbml0aW9uKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGFuaW1hdGVWYXJpYW50KHZpc3VhbEVsZW1lbnQsIHZhcmlhbnQsIG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgcmVzb2x2ZWQgPSByZXNvbHZlVmFyaWFudCh2aXN1YWxFbGVtZW50LCB2YXJpYW50LCBvcHRpb25zLmN1c3RvbSk7XG4gICAgdmFyIF9iID0gKHJlc29sdmVkIHx8IHt9KS50cmFuc2l0aW9uLCB0cmFuc2l0aW9uID0gX2IgPT09IHZvaWQgMCA/IHZpc3VhbEVsZW1lbnQuZ2V0RGVmYXVsdFRyYW5zaXRpb24oKSB8fCB7fSA6IF9iO1xuICAgIGlmIChvcHRpb25zLnRyYW5zaXRpb25PdmVycmlkZSkge1xuICAgICAgICB0cmFuc2l0aW9uID0gb3B0aW9ucy50cmFuc2l0aW9uT3ZlcnJpZGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHdlIGhhdmUgYSB2YXJpYW50LCBjcmVhdGUgYSBjYWxsYmFjayB0aGF0IHJ1bnMgaXQgYXMgYW4gYW5pbWF0aW9uLlxuICAgICAqIE90aGVyd2lzZSwgd2UgcmVzb2x2ZSBhIFByb21pc2UgaW1tZWRpYXRlbHkgZm9yIGEgY29tcG9zYWJsZSBuby1vcC5cbiAgICAgKi9cbiAgICB2YXIgZ2V0QW5pbWF0aW9uID0gcmVzb2x2ZWRcbiAgICAgICAgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBhbmltYXRlVGFyZ2V0KHZpc3VhbEVsZW1lbnQsIHJlc29sdmVkLCBvcHRpb25zKTsgfVxuICAgICAgICA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOyB9O1xuICAgIC8qKlxuICAgICAqIElmIHdlIGhhdmUgY2hpbGRyZW4sIGNyZWF0ZSBhIGNhbGxiYWNrIHRoYXQgcnVucyBhbGwgdGhlaXIgYW5pbWF0aW9ucy5cbiAgICAgKiBPdGhlcndpc2UsIHdlIHJlc29sdmUgYSBQcm9taXNlIGltbWVkaWF0ZWx5IGZvciBhIGNvbXBvc2FibGUgbm8tb3AuXG4gICAgICovXG4gICAgdmFyIGdldENoaWxkQW5pbWF0aW9ucyA9ICgoX2EgPSB2aXN1YWxFbGVtZW50LnZhcmlhbnRDaGlsZHJlbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNpemUpXG4gICAgICAgID8gZnVuY3Rpb24gKGZvcndhcmREZWxheSkge1xuICAgICAgICAgICAgaWYgKGZvcndhcmREZWxheSA9PT0gdm9pZCAwKSB7IGZvcndhcmREZWxheSA9IDA7IH1cbiAgICAgICAgICAgIHZhciBfYSA9IHRyYW5zaXRpb24uZGVsYXlDaGlsZHJlbiwgZGVsYXlDaGlsZHJlbiA9IF9hID09PSB2b2lkIDAgPyAwIDogX2EsIHN0YWdnZXJDaGlsZHJlbiA9IHRyYW5zaXRpb24uc3RhZ2dlckNoaWxkcmVuLCBzdGFnZ2VyRGlyZWN0aW9uID0gdHJhbnNpdGlvbi5zdGFnZ2VyRGlyZWN0aW9uO1xuICAgICAgICAgICAgcmV0dXJuIGFuaW1hdGVDaGlsZHJlbih2aXN1YWxFbGVtZW50LCB2YXJpYW50LCBkZWxheUNoaWxkcmVuICsgZm9yd2FyZERlbGF5LCBzdGFnZ2VyQ2hpbGRyZW4sIHN0YWdnZXJEaXJlY3Rpb24sIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7IH07XG4gICAgLyoqXG4gICAgICogSWYgdGhlIHRyYW5zaXRpb24gZXhwbGljaXRseSBkZWZpbmVzIGEgXCJ3aGVuXCIgb3B0aW9uLCB3ZSBuZWVkIHRvIHJlc29sdmUgZWl0aGVyXG4gICAgICogdGhpcyBhbmltYXRpb24gb3IgYWxsIGNoaWxkcmVuIGFuaW1hdGlvbnMgYmVmb3JlIHBsYXlpbmcgdGhlIG90aGVyLlxuICAgICAqL1xuICAgIHZhciB3aGVuID0gdHJhbnNpdGlvbi53aGVuO1xuICAgIGlmICh3aGVuKSB7XG4gICAgICAgIHZhciBfYyA9IF9fcmVhZCh3aGVuID09PSBcImJlZm9yZUNoaWxkcmVuXCJcbiAgICAgICAgICAgID8gW2dldEFuaW1hdGlvbiwgZ2V0Q2hpbGRBbmltYXRpb25zXVxuICAgICAgICAgICAgOiBbZ2V0Q2hpbGRBbmltYXRpb25zLCBnZXRBbmltYXRpb25dLCAyKSwgZmlyc3QgPSBfY1swXSwgbGFzdCA9IF9jWzFdO1xuICAgICAgICByZXR1cm4gZmlyc3QoKS50aGVuKGxhc3QpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtnZXRBbmltYXRpb24oKSwgZ2V0Q2hpbGRBbmltYXRpb25zKG9wdGlvbnMuZGVsYXkpXSk7XG4gICAgfVxufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gYW5pbWF0ZVRhcmdldCh2aXN1YWxFbGVtZW50LCBkZWZpbml0aW9uLCBfYSkge1xuICAgIHZhciBfYjtcbiAgICB2YXIgX2MgPSBfYSA9PT0gdm9pZCAwID8ge30gOiBfYSwgX2QgPSBfYy5kZWxheSwgZGVsYXkgPSBfZCA9PT0gdm9pZCAwID8gMCA6IF9kLCB0cmFuc2l0aW9uT3ZlcnJpZGUgPSBfYy50cmFuc2l0aW9uT3ZlcnJpZGUsIHR5cGUgPSBfYy50eXBlO1xuICAgIHZhciBfZSA9IHZpc3VhbEVsZW1lbnQubWFrZVRhcmdldEFuaW1hdGFibGUoZGVmaW5pdGlvbiksIF9mID0gX2UudHJhbnNpdGlvbiwgdHJhbnNpdGlvbiA9IF9mID09PSB2b2lkIDAgPyB2aXN1YWxFbGVtZW50LmdldERlZmF1bHRUcmFuc2l0aW9uKCkgOiBfZiwgdHJhbnNpdGlvbkVuZCA9IF9lLnRyYW5zaXRpb25FbmQsIHRhcmdldCA9IF9fcmVzdChfZSwgW1widHJhbnNpdGlvblwiLCBcInRyYW5zaXRpb25FbmRcIl0pO1xuICAgIGlmICh0cmFuc2l0aW9uT3ZlcnJpZGUpXG4gICAgICAgIHRyYW5zaXRpb24gPSB0cmFuc2l0aW9uT3ZlcnJpZGU7XG4gICAgdmFyIGFuaW1hdGlvbnMgPSBbXTtcbiAgICB2YXIgYW5pbWF0aW9uVHlwZVN0YXRlID0gdHlwZSAmJiAoKF9iID0gdmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmdldFN0YXRlKClbdHlwZV0pO1xuICAgIGZvciAodmFyIGtleSBpbiB0YXJnZXQpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gdmlzdWFsRWxlbWVudC5nZXRWYWx1ZShrZXkpO1xuICAgICAgICB2YXIgdmFsdWVUYXJnZXQgPSB0YXJnZXRba2V5XTtcbiAgICAgICAgaWYgKCF2YWx1ZSB8fFxuICAgICAgICAgICAgdmFsdWVUYXJnZXQgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgKGFuaW1hdGlvblR5cGVTdGF0ZSAmJlxuICAgICAgICAgICAgICAgIHNob3VsZEJsb2NrQW5pbWF0aW9uKGFuaW1hdGlvblR5cGVTdGF0ZSwga2V5KSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB2YWx1ZVRyYW5zaXRpb24gPSBfX2Fzc2lnbih7IGRlbGF5OiBkZWxheSB9LCB0cmFuc2l0aW9uKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1ha2UgYW5pbWF0aW9uIGluc3RhbnQgaWYgdGhpcyBpcyBhIHRyYW5zZm9ybSBwcm9wIGFuZCB3ZSBzaG91bGQgcmVkdWNlIG1vdGlvbi5cbiAgICAgICAgICovXG4gICAgICAgIGlmICh2aXN1YWxFbGVtZW50LnNob3VsZFJlZHVjZU1vdGlvbiAmJiBpc1RyYW5zZm9ybVByb3Aoa2V5KSkge1xuICAgICAgICAgICAgdmFsdWVUcmFuc2l0aW9uID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHZhbHVlVHJhbnNpdGlvbiksIHsgdHlwZTogZmFsc2UsIGRlbGF5OiAwIH0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBhbmltYXRpb24gPSBzdGFydEFuaW1hdGlvbihrZXksIHZhbHVlLCB2YWx1ZVRhcmdldCwgdmFsdWVUcmFuc2l0aW9uKTtcbiAgICAgICAgYW5pbWF0aW9ucy5wdXNoKGFuaW1hdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLmFsbChhbmltYXRpb25zKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJhbnNpdGlvbkVuZCAmJiBzZXRUYXJnZXQodmlzdWFsRWxlbWVudCwgdHJhbnNpdGlvbkVuZCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBhbmltYXRlQ2hpbGRyZW4odmlzdWFsRWxlbWVudCwgdmFyaWFudCwgZGVsYXlDaGlsZHJlbiwgc3RhZ2dlckNoaWxkcmVuLCBzdGFnZ2VyRGlyZWN0aW9uLCBvcHRpb25zKSB7XG4gICAgaWYgKGRlbGF5Q2hpbGRyZW4gPT09IHZvaWQgMCkgeyBkZWxheUNoaWxkcmVuID0gMDsgfVxuICAgIGlmIChzdGFnZ2VyQ2hpbGRyZW4gPT09IHZvaWQgMCkgeyBzdGFnZ2VyQ2hpbGRyZW4gPSAwOyB9XG4gICAgaWYgKHN0YWdnZXJEaXJlY3Rpb24gPT09IHZvaWQgMCkgeyBzdGFnZ2VyRGlyZWN0aW9uID0gMTsgfVxuICAgIHZhciBhbmltYXRpb25zID0gW107XG4gICAgdmFyIG1heFN0YWdnZXJEdXJhdGlvbiA9ICh2aXN1YWxFbGVtZW50LnZhcmlhbnRDaGlsZHJlbi5zaXplIC0gMSkgKiBzdGFnZ2VyQ2hpbGRyZW47XG4gICAgdmFyIGdlbmVyYXRlU3RhZ2dlckR1cmF0aW9uID0gc3RhZ2dlckRpcmVjdGlvbiA9PT0gMVxuICAgICAgICA/IGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gdm9pZCAwKSB7IGkgPSAwOyB9XG4gICAgICAgICAgICByZXR1cm4gaSAqIHN0YWdnZXJDaGlsZHJlbjtcbiAgICAgICAgfVxuICAgICAgICA6IGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gdm9pZCAwKSB7IGkgPSAwOyB9XG4gICAgICAgICAgICByZXR1cm4gbWF4U3RhZ2dlckR1cmF0aW9uIC0gaSAqIHN0YWdnZXJDaGlsZHJlbjtcbiAgICAgICAgfTtcbiAgICBBcnJheS5mcm9tKHZpc3VhbEVsZW1lbnQudmFyaWFudENoaWxkcmVuKVxuICAgICAgICAuc29ydChzb3J0QnlUcmVlT3JkZXIpXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCwgaSkge1xuICAgICAgICBhbmltYXRpb25zLnB1c2goYW5pbWF0ZVZhcmlhbnQoY2hpbGQsIHZhcmlhbnQsIF9fYXNzaWduKF9fYXNzaWduKHt9LCBvcHRpb25zKSwgeyBkZWxheTogZGVsYXlDaGlsZHJlbiArIGdlbmVyYXRlU3RhZ2dlckR1cmF0aW9uKGkpIH0pKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoaWxkLm5vdGlmeUFuaW1hdGlvbkNvbXBsZXRlKHZhcmlhbnQpOyB9KSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGFuaW1hdGlvbnMpO1xufVxuZnVuY3Rpb24gc3RvcEFuaW1hdGlvbih2aXN1YWxFbGVtZW50KSB7XG4gICAgdmlzdWFsRWxlbWVudC5mb3JFYWNoVmFsdWUoZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB2YWx1ZS5zdG9wKCk7IH0pO1xufVxuZnVuY3Rpb24gc29ydEJ5VHJlZU9yZGVyKGEsIGIpIHtcbiAgICByZXR1cm4gYS5zb3J0Tm9kZVBvc2l0aW9uKGIpO1xufVxuLyoqXG4gKiBEZWNpZGUgd2hldGhlciB3ZSBzaG91bGQgYmxvY2sgdGhpcyBhbmltYXRpb24uIFByZXZpb3VzbHksIHdlIGFjaGlldmVkIHRoaXNcbiAqIGp1c3QgYnkgY2hlY2tpbmcgd2hldGhlciB0aGUga2V5IHdhcyBsaXN0ZWQgaW4gcHJvdGVjdGVkS2V5cywgYnV0IHRoaXNcbiAqIHBvc2VkIHByb2JsZW1zIGlmIGFuIGFuaW1hdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IGFmdGVyQ2hpbGRyZW4gYW5kIHByb3RlY3RlZEtleXNcbiAqIGhhZCBiZWVuIHNldCB0byB0cnVlIGluIHRoZSBtZWFudGltZS5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkQmxvY2tBbmltYXRpb24oX2EsIGtleSkge1xuICAgIHZhciBwcm90ZWN0ZWRLZXlzID0gX2EucHJvdGVjdGVkS2V5cywgbmVlZHNBbmltYXRpbmcgPSBfYS5uZWVkc0FuaW1hdGluZztcbiAgICB2YXIgc2hvdWxkQmxvY2sgPSBwcm90ZWN0ZWRLZXlzLmhhc093blByb3BlcnR5KGtleSkgJiYgbmVlZHNBbmltYXRpbmdba2V5XSAhPT0gdHJ1ZTtcbiAgICBuZWVkc0FuaW1hdGluZ1trZXldID0gZmFsc2U7XG4gICAgcmV0dXJuIHNob3VsZEJsb2NrO1xufVxuXG5leHBvcnQgeyBhbmltYXRlVmlzdWFsRWxlbWVudCwgc29ydEJ5VHJlZU9yZGVyLCBzdG9wQW5pbWF0aW9uIH07XG4iLCJpbXBvcnQgeyBfX3NwcmVhZEFycmF5LCBfX3JlYWQsIF9fYXNzaWduLCBfX3Jlc3QgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBpc0FuaW1hdGlvbkNvbnRyb2xzIH0gZnJvbSAnLi4vLi4vYW5pbWF0aW9uL3V0aWxzL2lzLWFuaW1hdGlvbi1jb250cm9scy5tanMnO1xuaW1wb3J0IHsgaXNLZXlmcmFtZXNUYXJnZXQgfSBmcm9tICcuLi8uLi9hbmltYXRpb24vdXRpbHMvaXMta2V5ZnJhbWVzLXRhcmdldC5tanMnO1xuaW1wb3J0IHsgc2hhbGxvd0NvbXBhcmUgfSBmcm9tICcuLi8uLi91dGlscy9zaGFsbG93LWNvbXBhcmUubWpzJztcbmltcG9ydCB7IGFuaW1hdGVWaXN1YWxFbGVtZW50IH0gZnJvbSAnLi9hbmltYXRpb24ubWpzJztcbmltcG9ydCB7IEFuaW1hdGlvblR5cGUgfSBmcm9tICcuL3R5cGVzLm1qcyc7XG5pbXBvcnQgeyBpc1ZhcmlhbnRMYWJlbHMsIHJlc29sdmVWYXJpYW50LCBpc1ZhcmlhbnRMYWJlbCB9IGZyb20gJy4vdmFyaWFudHMubWpzJztcblxudmFyIHZhcmlhbnRQcmlvcml0eU9yZGVyID0gW1xuICAgIEFuaW1hdGlvblR5cGUuQW5pbWF0ZSxcbiAgICBBbmltYXRpb25UeXBlLkluVmlldyxcbiAgICBBbmltYXRpb25UeXBlLkZvY3VzLFxuICAgIEFuaW1hdGlvblR5cGUuSG92ZXIsXG4gICAgQW5pbWF0aW9uVHlwZS5UYXAsXG4gICAgQW5pbWF0aW9uVHlwZS5EcmFnLFxuICAgIEFuaW1hdGlvblR5cGUuRXhpdCxcbl07XG52YXIgcmV2ZXJzZVByaW9yaXR5T3JkZXIgPSBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQodmFyaWFudFByaW9yaXR5T3JkZXIpLCBmYWxzZSkucmV2ZXJzZSgpO1xudmFyIG51bUFuaW1hdGlvblR5cGVzID0gdmFyaWFudFByaW9yaXR5T3JkZXIubGVuZ3RoO1xuZnVuY3Rpb24gYW5pbWF0ZUxpc3QodmlzdWFsRWxlbWVudCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYW5pbWF0aW9ucykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoYW5pbWF0aW9ucy5tYXAoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICB2YXIgYW5pbWF0aW9uID0gX2EuYW5pbWF0aW9uLCBvcHRpb25zID0gX2Eub3B0aW9ucztcbiAgICAgICAgICAgIHJldHVybiBhbmltYXRlVmlzdWFsRWxlbWVudCh2aXN1YWxFbGVtZW50LCBhbmltYXRpb24sIG9wdGlvbnMpO1xuICAgICAgICB9KSk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUFuaW1hdGlvblN0YXRlKHZpc3VhbEVsZW1lbnQpIHtcbiAgICB2YXIgYW5pbWF0ZSA9IGFuaW1hdGVMaXN0KHZpc3VhbEVsZW1lbnQpO1xuICAgIHZhciBzdGF0ZSA9IGNyZWF0ZVN0YXRlKCk7XG4gICAgdmFyIGFsbEFuaW1hdGVkS2V5cyA9IHt9O1xuICAgIHZhciBpc0luaXRpYWxSZW5kZXIgPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIHRvIHJlZHVjZSB0aGUgYW5pbWF0aW9uIGRlZmluaXRpb25zIGZvclxuICAgICAqIGVhY2ggYWN0aXZlIGFuaW1hdGlvbiB0eXBlIGludG8gYW4gb2JqZWN0IG9mIHJlc29sdmVkIHZhbHVlcyBmb3IgaXQuXG4gICAgICovXG4gICAgdmFyIGJ1aWxkUmVzb2x2ZWRUeXBlVmFsdWVzID0gZnVuY3Rpb24gKGFjYywgZGVmaW5pdGlvbikge1xuICAgICAgICB2YXIgcmVzb2x2ZWQgPSByZXNvbHZlVmFyaWFudCh2aXN1YWxFbGVtZW50LCBkZWZpbml0aW9uKTtcbiAgICAgICAgaWYgKHJlc29sdmVkKSB7XG4gICAgICAgICAgICByZXNvbHZlZC50cmFuc2l0aW9uOyB2YXIgdHJhbnNpdGlvbkVuZCA9IHJlc29sdmVkLnRyYW5zaXRpb25FbmQsIHRhcmdldCA9IF9fcmVzdChyZXNvbHZlZCwgW1widHJhbnNpdGlvblwiLCBcInRyYW5zaXRpb25FbmRcIl0pO1xuICAgICAgICAgICAgYWNjID0gX19hc3NpZ24oX19hc3NpZ24oX19hc3NpZ24oe30sIGFjYyksIHRhcmdldCksIHRyYW5zaXRpb25FbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBpc0FuaW1hdGVkKGtleSkge1xuICAgICAgICByZXR1cm4gYWxsQW5pbWF0ZWRLZXlzW2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBqdXN0IGFsbG93cyB1cyB0byBpbmplY3QgbW9ja2VkIGFuaW1hdGlvbiBmdW5jdGlvbnNcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXRBbmltYXRlRnVuY3Rpb24obWFrZUFuaW1hdG9yKSB7XG4gICAgICAgIGFuaW1hdGUgPSBtYWtlQW5pbWF0b3IodmlzdWFsRWxlbWVudCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdoZW4gd2UgcmVjZWl2ZSBuZXcgcHJvcHMsIHdlIG5lZWQgdG86XG4gICAgICogMS4gQ3JlYXRlIGEgbGlzdCBvZiBwcm90ZWN0ZWQga2V5cyBmb3IgZWFjaCB0eXBlLiBUaGlzIGlzIGEgZGlyZWN0b3J5IG9mXG4gICAgICogICAgdmFsdWUga2V5cyB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgXCJoYW5kbGVkXCIgYnkgdHlwZXMgb2YgYSBoaWdoZXIgcHJpb3JpdHlcbiAgICAgKiAgICBzbyB0aGF0IHdoZW5ldmVyIGFuIGFuaW1hdGlvbiBpcyBwbGF5ZWQgb2YgYSBnaXZlbiB0eXBlLCB0aGVzZSB2YWx1ZXMgYXJlXG4gICAgICogICAgcHJvdGVjdGVkIGZyb20gYmVpbmcgYW5pbWF0ZWQuXG4gICAgICogMi4gRGV0ZXJtaW5lIGlmIGFuIGFuaW1hdGlvbiB0eXBlIG5lZWRzIGFuaW1hdGluZy5cbiAgICAgKiAzLiBEZXRlcm1pbmUgaWYgYW55IHZhbHVlcyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIGEgdHlwZSBhbmQgZmlndXJlIG91dFxuICAgICAqICAgIHdoYXQgdG8gYW5pbWF0ZSB0aG9zZSB0by5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhbmltYXRlQ2hhbmdlcyhvcHRpb25zLCBjaGFuZ2VkQWN0aXZlVHlwZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBwcm9wcyA9IHZpc3VhbEVsZW1lbnQuZ2V0UHJvcHMoKTtcbiAgICAgICAgdmFyIGNvbnRleHQgPSB2aXN1YWxFbGVtZW50LmdldFZhcmlhbnRDb250ZXh0KHRydWUpIHx8IHt9O1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBsaXN0IG9mIGFuaW1hdGlvbnMgdGhhdCB3ZSdsbCBidWlsZCBpbnRvIGFzIHdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYW5pbWF0aW9uXG4gICAgICAgICAqIHR5cGVzLiBUaGlzIHdpbGwgZ2V0IGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGFuaW1hdGlvbnMgPSBbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEtlZXAgdHJhY2sgb2Ygd2hpY2ggdmFsdWVzIGhhdmUgYmVlbiByZW1vdmVkLiBUaGVuLCBhcyB3ZSBoaXQgbG93ZXIgcHJpb3JpdHlcbiAgICAgICAgICogYW5pbWF0aW9uIHR5cGVzLCB3ZSBjYW4gY2hlY2sgaWYgdGhleSBjb250YWluIHJlbW92ZWQgdmFsdWVzIGFuZCBhbmltYXRlIHRvIHRoYXQuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgcmVtb3ZlZEtleXMgPSBuZXcgU2V0KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIGRpY3Rpb25hcnkgb2YgYWxsIGVuY291bnRlcmVkIGtleXMuIFRoaXMgaXMgYW4gb2JqZWN0IHRvIGxldCB1cyBidWlsZCBpbnRvIGFuZFxuICAgICAgICAgKiBjb3B5IGl0IHdpdGhvdXQgaXRlcmF0aW9uLiBFYWNoIHRpbWUgd2UgaGl0IGFuIGFuaW1hdGlvbiB0eXBlIHdlIHNldCBpdHMgcHJvdGVjdGVkXG4gICAgICAgICAqIGtleXMgLSB0aGUga2V5cyBpdHMgbm90IGFsbG93ZWQgdG8gYW5pbWF0ZSAtIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG9iamVjdC5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBlbmNvdW50ZXJlZEtleXMgPSB7fTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIGEgdmFyaWFudCBoYXMgYmVlbiByZW1vdmVkIGF0IGEgZ2l2ZW4gaW5kZXgsIGFuZCB0aGlzIGNvbXBvbmVudCBpcyBjb250cm9sbGluZ1xuICAgICAgICAgKiB2YXJpYW50IGFuaW1hdGlvbnMsIHdlIHdhbnQgdG8gZW5zdXJlIGxvd2VyLXByaW9yaXR5IHZhcmlhbnRzIGFyZSBmb3JjZWQgdG8gYW5pbWF0ZS5cbiAgICAgICAgICovXG4gICAgICAgIHZhciByZW1vdmVkVmFyaWFudEluZGV4ID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgIHZhciB0eXBlID0gcmV2ZXJzZVByaW9yaXR5T3JkZXJbaV07XG4gICAgICAgICAgICB2YXIgdHlwZVN0YXRlID0gc3RhdGVbdHlwZV07XG4gICAgICAgICAgICB2YXIgcHJvcCA9IChfYSA9IHByb3BzW3R5cGVdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBjb250ZXh0W3R5cGVdO1xuICAgICAgICAgICAgdmFyIHByb3BJc1ZhcmlhbnQgPSBpc1ZhcmlhbnRMYWJlbChwcm9wKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgdGhpcyB0eXBlIGhhcyAqanVzdCogY2hhbmdlZCBpc0FjdGl2ZSBzdGF0dXMsIHNldCBhY3RpdmVEZWx0YVxuICAgICAgICAgICAgICogdG8gdGhhdCBzdGF0dXMuIE90aGVyd2lzZSBzZXQgdG8gbnVsbC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyIGFjdGl2ZURlbHRhID0gdHlwZSA9PT0gY2hhbmdlZEFjdGl2ZVR5cGUgPyB0eXBlU3RhdGUuaXNBY3RpdmUgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGFjdGl2ZURlbHRhID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZW1vdmVkVmFyaWFudEluZGV4ID0gaTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgdGhpcyBwcm9wIGlzIGFuIGluaGVyaXRlZCB2YXJpYW50LCByYXRoZXIgdGhhbiBiZWVuIHNldCBkaXJlY3RseSBvbiB0aGVcbiAgICAgICAgICAgICAqIGNvbXBvbmVudCBpdHNlbGYsIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGFsbG93IHRoZSBwYXJlbnQgdG8gdHJpZ2dlciBhbmltYXRpb25zLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFRPRE86IENhbiBwcm9iYWJseSBjaGFuZ2UgdGhpcyB0byBhICFpc0NvbnRyb2xsaW5nVmFyaWFudHMgY2hlY2tcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyIGlzSW5oZXJpdGVkID0gcHJvcCA9PT0gY29udGV4dFt0eXBlXSAmJiBwcm9wICE9PSBwcm9wc1t0eXBlXSAmJiBwcm9wSXNWYXJpYW50O1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoaXNJbmhlcml0ZWQgJiZcbiAgICAgICAgICAgICAgICBpc0luaXRpYWxSZW5kZXIgJiZcbiAgICAgICAgICAgICAgICB2aXN1YWxFbGVtZW50Lm1hbnVhbGx5QW5pbWF0ZU9uTW91bnQpIHtcbiAgICAgICAgICAgICAgICBpc0luaGVyaXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBTZXQgYWxsIGVuY291bnRlcmVkIGtleXMgc28gZmFyIGFzIHRoZSBwcm90ZWN0ZWQga2V5cyBmb3IgdGhpcyB0eXBlLiBUaGlzIHdpbGxcbiAgICAgICAgICAgICAqIGJlIGFueSBrZXkgdGhhdCBoYXMgYmVlbiBhbmltYXRlZCBvciBvdGhlcndpc2UgaGFuZGxlZCBieSBhY3RpdmUsIGhpZ2hlci1wcmlvcnRpeSB0eXBlcy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdHlwZVN0YXRlLnByb3RlY3RlZEtleXMgPSBfX2Fzc2lnbih7fSwgZW5jb3VudGVyZWRLZXlzKTtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGNhbiBza2lwIGFuYWx5c2luZyB0aGlzIHByb3AgZWFybHlcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIElmIGl0IGlzbid0IGFjdGl2ZSBhbmQgaGFzbid0ICpqdXN0KiBiZWVuIHNldCBhcyBpbmFjdGl2ZVxuICAgICAgICAgICAgKCF0eXBlU3RhdGUuaXNBY3RpdmUgJiYgYWN0aXZlRGVsdGEgPT09IG51bGwpIHx8XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgZGlkbid0IGFuZCBkb24ndCBoYXZlIGFueSBkZWZpbmVkIHByb3AgZm9yIHRoaXMgYW5pbWF0aW9uIHR5cGVcbiAgICAgICAgICAgICAgICAoIXByb3AgJiYgIXR5cGVTdGF0ZS5wcmV2UHJvcCkgfHxcbiAgICAgICAgICAgICAgICAvLyBPciBpZiB0aGUgcHJvcCBkb2Vzbid0IGRlZmluZSBhbiBhbmltYXRpb25cbiAgICAgICAgICAgICAgICBpc0FuaW1hdGlvbkNvbnRyb2xzKHByb3ApIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHByb3AgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQXMgd2UgZ28gbG9vayB0aHJvdWdoIHRoZSB2YWx1ZXMgZGVmaW5lZCBvbiB0aGlzIHR5cGUsIGlmIHdlIGRldGVjdFxuICAgICAgICAgICAgICogYSBjaGFuZ2VkIHZhbHVlIG9yIGEgdmFsdWUgdGhhdCB3YXMgcmVtb3ZlZCBpbiBhIGhpZ2hlciBwcmlvcml0eSwgd2Ugc2V0XG4gICAgICAgICAgICAgKiB0aGlzIHRvIHRydWUgYW5kIGFkZCB0aGlzIHByb3AgdG8gdGhlIGFuaW1hdGlvbiBsaXN0LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXIgdmFyaWFudERpZENoYW5nZSA9IGNoZWNrVmFyaWFudHNEaWRDaGFuZ2UodHlwZVN0YXRlLnByZXZQcm9wLCBwcm9wKTtcbiAgICAgICAgICAgIHZhciBzaG91bGRBbmltYXRlVHlwZSA9IHZhcmlhbnREaWRDaGFuZ2UgfHxcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBtYWtpbmcgdGhpcyB2YXJpYW50IGFjdGl2ZSwgd2Ugd2FudCB0byBhbHdheXMgbWFrZSBpdCBhY3RpdmVcbiAgICAgICAgICAgICAgICAodHlwZSA9PT0gY2hhbmdlZEFjdGl2ZVR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZVN0YXRlLmlzQWN0aXZlICYmXG4gICAgICAgICAgICAgICAgICAgICFpc0luaGVyaXRlZCAmJlxuICAgICAgICAgICAgICAgICAgICBwcm9wSXNWYXJpYW50KSB8fFxuICAgICAgICAgICAgICAgIC8vIElmIHdlIHJlbW92ZWQgYSBoaWdoZXItcHJpb3JpdHkgdmFyaWFudCAoaSBpcyBpbiByZXZlcnNlIG9yZGVyKVxuICAgICAgICAgICAgICAgIChpID4gcmVtb3ZlZFZhcmlhbnRJbmRleCAmJiBwcm9wSXNWYXJpYW50KTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQXMgYW5pbWF0aW9ucyBjYW4gYmUgc2V0IGFzIHZhcmlhbnQgbGlzdHMsIHZhcmlhbnRzIG9yIHRhcmdldCBvYmplY3RzLCB3ZVxuICAgICAgICAgICAgICogY29lcmNlIGV2ZXJ5dGhpbmcgdG8gYW4gYXJyYXkgaWYgaXQgaXNuJ3Qgb25lIGFscmVhZHlcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyIGRlZmluaXRpb25MaXN0ID0gQXJyYXkuaXNBcnJheShwcm9wKSA/IHByb3AgOiBbcHJvcF07XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEJ1aWxkIGFuIG9iamVjdCBvZiBhbGwgdGhlIHJlc29sdmVkIHZhbHVlcy4gV2UnbGwgdXNlIHRoaXMgaW4gdGhlIHN1YnNlcXVlbnRcbiAgICAgICAgICAgICAqIGFuaW1hdGVDaGFuZ2VzIGNhbGxzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgdmFsdWUgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciByZXNvbHZlZFZhbHVlcyA9IGRlZmluaXRpb25MaXN0LnJlZHVjZShidWlsZFJlc29sdmVkVHlwZVZhbHVlcywge30pO1xuICAgICAgICAgICAgaWYgKGFjdGl2ZURlbHRhID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXNvbHZlZFZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBOb3cgd2UgbmVlZCB0byBsb29wIHRocm91Z2ggYWxsIHRoZSBrZXlzIGluIHRoZSBwcmV2IHByb3AgYW5kIHRoaXMgcHJvcCxcbiAgICAgICAgICAgICAqIGFuZCBkZWNpZGU6XG4gICAgICAgICAgICAgKiAxLiBJZiB0aGUgdmFsdWUgaGFzIGNoYW5nZWQsIGFuZCBuZWVkcyBhbmltYXRpbmdcbiAgICAgICAgICAgICAqIDIuIElmIGl0IGhhcyBiZWVuIHJlbW92ZWQsIGFuZCBuZWVkcyBhZGRpbmcgdG8gdGhlIHJlbW92ZWRLZXlzIHNldFxuICAgICAgICAgICAgICogMy4gSWYgaXQgaGFzIGJlZW4gcmVtb3ZlZCBpbiBhIGhpZ2hlciBwcmlvcml0eSB0eXBlIGFuZCBuZWVkcyBhbmltYXRpbmdcbiAgICAgICAgICAgICAqIDQuIElmIGl0IGhhc24ndCBiZWVuIHJlbW92ZWQgaW4gYSBoaWdoZXIgcHJpb3JpdHkgYnV0IGhhc24ndCBjaGFuZ2VkLCBhbmRcbiAgICAgICAgICAgICAqICAgIG5lZWRzIGFkZGluZyB0byB0aGUgdHlwZSdzIHByb3RlY3RlZEtleXMgbGlzdC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyIF9iID0gdHlwZVN0YXRlLnByZXZSZXNvbHZlZFZhbHVlcywgcHJldlJlc29sdmVkVmFsdWVzID0gX2IgPT09IHZvaWQgMCA/IHt9IDogX2I7XG4gICAgICAgICAgICB2YXIgYWxsS2V5cyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBwcmV2UmVzb2x2ZWRWYWx1ZXMpLCByZXNvbHZlZFZhbHVlcyk7XG4gICAgICAgICAgICB2YXIgbWFya1RvQW5pbWF0ZSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBzaG91bGRBbmltYXRlVHlwZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVtb3ZlZEtleXMuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICAgICAgdHlwZVN0YXRlLm5lZWRzQW5pbWF0aW5nW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5leHQgPSByZXNvbHZlZFZhbHVlc1trZXldO1xuICAgICAgICAgICAgICAgIHZhciBwcmV2ID0gcHJldlJlc29sdmVkVmFsdWVzW2tleV07XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoaXMgd2UgY2FuIGp1c3Qgc2tpcCBhaGVhZFxuICAgICAgICAgICAgICAgIGlmIChlbmNvdW50ZXJlZEtleXMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogSWYgdGhlIHZhbHVlIGhhcyBjaGFuZ2VkLCB3ZSBwcm9iYWJseSB3YW50IHRvIGFuaW1hdGUgaXQuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHByZXYpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIElmIGJvdGggdmFsdWVzIGFyZSBrZXlmcmFtZXMsIHdlIG5lZWQgdG8gc2hhbGxvdyBjb21wYXJlIHRoZW0gdG9cbiAgICAgICAgICAgICAgICAgICAgICogZGV0ZWN0IHdoZXRoZXIgYW55IHZhbHVlIGhhcyBjaGFuZ2VkLiBJZiBpdCBoYXMsIHdlIGFuaW1hdGUgaXQuXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNLZXlmcmFtZXNUYXJnZXQobmV4dCkgJiYgaXNLZXlmcmFtZXNUYXJnZXQocHJldikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2hhbGxvd0NvbXBhcmUobmV4dCwgcHJldikgfHwgdmFyaWFudERpZENoYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtUb0FuaW1hdGUoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIElmIGl0IGhhc24ndCBjaGFuZ2VkLCB3ZSB3YW50IHRvIGVuc3VyZSBpdCBkb2Vzbid0IGFuaW1hdGUgYnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhZGRpbmcgaXQgdG8gdGhlIGxpc3Qgb2YgcHJvdGVjdGVkIGtleXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVN0YXRlLnByb3RlY3RlZEtleXNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBuZXh0IGlzIGRlZmluZWQgYW5kIGRvZXNuJ3QgZXF1YWwgcHJldiwgaXQgbmVlZHMgYW5pbWF0aW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrVG9BbmltYXRlKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIHVuZGVmaW5lZCwgaXQncyBiZWVuIHJlbW92ZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkS2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuZXh0ICE9PSB1bmRlZmluZWQgJiYgcmVtb3ZlZEtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIElmIG5leHQgaGFzbid0IGNoYW5nZWQgYW5kIGl0IGlzbid0IHVuZGVmaW5lZCwgd2Ugd2FudCB0byBjaGVjayBpZiBpdCdzXG4gICAgICAgICAgICAgICAgICAgICAqIGJlZW4gcmVtb3ZlZCBieSBhIGhpZ2hlciBwcmlvcml0eVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgbWFya1RvQW5pbWF0ZShrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIElmIGl0IGhhc24ndCBjaGFuZ2VkLCB3ZSBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgcHJvdGVjdGVkIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgKiB0byBlbnN1cmUgaXQgZG9lc24ndCBnZXQgYW5pbWF0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICB0eXBlU3RhdGUucHJvdGVjdGVkS2V5c1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFVwZGF0ZSB0aGUgdHlwZVN0YXRlIHNvIG5leHQgdGltZSBhbmltYXRlQ2hhbmdlcyBpcyBjYWxsZWQgd2UgY2FuIGNvbXBhcmUgdGhlXG4gICAgICAgICAgICAgKiBsYXRlc3QgcHJvcCBhbmQgcmVzb2x2ZWRWYWx1ZXMgdG8gdGhlc2UuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHR5cGVTdGF0ZS5wcmV2UHJvcCA9IHByb3A7XG4gICAgICAgICAgICB0eXBlU3RhdGUucHJldlJlc29sdmVkVmFsdWVzID0gcmVzb2x2ZWRWYWx1ZXM7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICh0eXBlU3RhdGUuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICBlbmNvdW50ZXJlZEtleXMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZW5jb3VudGVyZWRLZXlzKSwgcmVzb2x2ZWRWYWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzSW5pdGlhbFJlbmRlciAmJiB2aXN1YWxFbGVtZW50LmJsb2NrSW5pdGlhbEFuaW1hdGlvbikge1xuICAgICAgICAgICAgICAgIHNob3VsZEFuaW1hdGVUeXBlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHRoaXMgaXMgYW4gaW5oZXJpdGVkIHByb3Agd2Ugd2FudCB0byBoYXJkLWJsb2NrIGFuaW1hdGlvbnNcbiAgICAgICAgICAgICAqIFRPRE86IFRlc3QgYXMgdGhpcyBzaG91bGQgcHJvYmFibHkgc3RpbGwgaGFuZGxlIGFuaW1hdGlvbnMgdHJpZ2dlcmVkXG4gICAgICAgICAgICAgKiBieSByZW1vdmVkIHZhbHVlcz9cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHNob3VsZEFuaW1hdGVUeXBlICYmICFpc0luaGVyaXRlZCkge1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbnMucHVzaC5hcHBseShhbmltYXRpb25zLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoZGVmaW5pdGlvbkxpc3QubWFwKGZ1bmN0aW9uIChhbmltYXRpb24pIHsgcmV0dXJuICh7XG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogYW5pbWF0aW9uLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBfX2Fzc2lnbih7IHR5cGU6IHR5cGUgfSwgb3B0aW9ucyksXG4gICAgICAgICAgICAgICAgfSk7IH0pKSwgZmFsc2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEl0ZXJhdGUgdGhyb3VnaCBhbGwgYW5pbWF0aW9uIHR5cGVzIGluIHJldmVyc2UgcHJpb3JpdHkgb3JkZXIuIEZvciBlYWNoLCB3ZSB3YW50IHRvXG4gICAgICAgICAqIGRldGVjdCB3aGljaCB2YWx1ZXMgaXQncyBoYW5kbGluZyBhbmQgd2hldGhlciBvciBub3QgdGhleSd2ZSBjaGFuZ2VkIChhbmQgdGhlcmVmb3JlXG4gICAgICAgICAqIG5lZWQgdG8gYmUgYW5pbWF0ZWQpLiBJZiBhbnkgdmFsdWVzIGhhdmUgYmVlbiByZW1vdmVkLCB3ZSB3YW50IHRvIGRldGVjdCB0aG9zZSBpblxuICAgICAgICAgKiBsb3dlciBwcmlvcml0eSBwcm9wcyBhbmQgZmxhZyBmb3IgYW5pbWF0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1BbmltYXRpb25UeXBlczsgaSsrKSB7XG4gICAgICAgICAgICBfbG9vcF8xKGkpO1xuICAgICAgICB9XG4gICAgICAgIGFsbEFuaW1hdGVkS2V5cyA9IF9fYXNzaWduKHt9LCBlbmNvdW50ZXJlZEtleXMpO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlcmUgYXJlIHNvbWUgcmVtb3ZlZCB2YWx1ZSB0aGF0IGhhdmVuJ3QgYmVlbiBkZWFsdCB3aXRoLFxuICAgICAgICAgKiB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBhbmltYXRpb24gdGhhdCBmYWxscyBiYWNrIGVpdGhlciB0byB0aGUgdmFsdWVcbiAgICAgICAgICogZGVmaW5lZCBpbiB0aGUgc3R5bGUgcHJvcCwgb3IgdGhlIGxhc3QgcmVhZCB2YWx1ZS5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChyZW1vdmVkS2V5cy5zaXplKSB7XG4gICAgICAgICAgICB2YXIgZmFsbGJhY2tBbmltYXRpb25fMSA9IHt9O1xuICAgICAgICAgICAgcmVtb3ZlZEtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgdmFyIGZhbGxiYWNrVGFyZ2V0ID0gdmlzdWFsRWxlbWVudC5nZXRCYXNlVGFyZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKGZhbGxiYWNrVGFyZ2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tBbmltYXRpb25fMVtrZXldID0gZmFsbGJhY2tUYXJnZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhbmltYXRpb25zLnB1c2goeyBhbmltYXRpb246IGZhbGxiYWNrQW5pbWF0aW9uXzEgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNob3VsZEFuaW1hdGUgPSBCb29sZWFuKGFuaW1hdGlvbnMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGlzSW5pdGlhbFJlbmRlciAmJlxuICAgICAgICAgICAgcHJvcHMuaW5pdGlhbCA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgICF2aXN1YWxFbGVtZW50Lm1hbnVhbGx5QW5pbWF0ZU9uTW91bnQpIHtcbiAgICAgICAgICAgIHNob3VsZEFuaW1hdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpc0luaXRpYWxSZW5kZXIgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHNob3VsZEFuaW1hdGUgPyBhbmltYXRlKGFuaW1hdGlvbnMpIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoYW5nZSB3aGV0aGVyIGEgY2VydGFpbiBhbmltYXRpb24gdHlwZSBpcyBhY3RpdmUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2V0QWN0aXZlKHR5cGUsIGlzQWN0aXZlLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgLy8gSWYgdGhlIGFjdGl2ZSBzdGF0ZSBoYXNuJ3QgY2hhbmdlZCwgd2UgY2FuIHNhZmVseSBkbyBub3RoaW5nIGhlcmVcbiAgICAgICAgaWYgKHN0YXRlW3R5cGVdLmlzQWN0aXZlID09PSBpc0FjdGl2ZSlcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgLy8gUHJvcGFnYXRlIGFjdGl2ZSBjaGFuZ2UgdG8gY2hpbGRyZW5cbiAgICAgICAgKF9hID0gdmlzdWFsRWxlbWVudC52YXJpYW50Q2hpbGRyZW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkgeyB2YXIgX2E7IHJldHVybiAoX2EgPSBjaGlsZC5hbmltYXRpb25TdGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNldEFjdGl2ZSh0eXBlLCBpc0FjdGl2ZSk7IH0pO1xuICAgICAgICBzdGF0ZVt0eXBlXS5pc0FjdGl2ZSA9IGlzQWN0aXZlO1xuICAgICAgICB2YXIgYW5pbWF0aW9ucyA9IGFuaW1hdGVDaGFuZ2VzKG9wdGlvbnMsIHR5cGUpO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc3RhdGUpIHtcbiAgICAgICAgICAgIHN0YXRlW2tleV0ucHJvdGVjdGVkS2V5cyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbmltYXRpb25zO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBpc0FuaW1hdGVkOiBpc0FuaW1hdGVkLFxuICAgICAgICBhbmltYXRlQ2hhbmdlczogYW5pbWF0ZUNoYW5nZXMsXG4gICAgICAgIHNldEFjdGl2ZTogc2V0QWN0aXZlLFxuICAgICAgICBzZXRBbmltYXRlRnVuY3Rpb246IHNldEFuaW1hdGVGdW5jdGlvbixcbiAgICAgICAgZ2V0U3RhdGU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0YXRlOyB9LFxuICAgIH07XG59XG5mdW5jdGlvbiBjaGVja1ZhcmlhbnRzRGlkQ2hhbmdlKHByZXYsIG5leHQpIHtcbiAgICBpZiAodHlwZW9mIG5leHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIG5leHQgIT09IHByZXY7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzVmFyaWFudExhYmVscyhuZXh0KSkge1xuICAgICAgICByZXR1cm4gIXNoYWxsb3dDb21wYXJlKG5leHQsIHByZXYpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBjcmVhdGVUeXBlU3RhdGUoaXNBY3RpdmUpIHtcbiAgICBpZiAoaXNBY3RpdmUgPT09IHZvaWQgMCkgeyBpc0FjdGl2ZSA9IGZhbHNlOyB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaXNBY3RpdmU6IGlzQWN0aXZlLFxuICAgICAgICBwcm90ZWN0ZWRLZXlzOiB7fSxcbiAgICAgICAgbmVlZHNBbmltYXRpbmc6IHt9LFxuICAgICAgICBwcmV2UmVzb2x2ZWRWYWx1ZXM6IHt9LFxuICAgIH07XG59XG5mdW5jdGlvbiBjcmVhdGVTdGF0ZSgpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIF9hID0ge30sXG4gICAgICAgIF9hW0FuaW1hdGlvblR5cGUuQW5pbWF0ZV0gPSBjcmVhdGVUeXBlU3RhdGUodHJ1ZSksXG4gICAgICAgIF9hW0FuaW1hdGlvblR5cGUuSW5WaWV3XSA9IGNyZWF0ZVR5cGVTdGF0ZSgpLFxuICAgICAgICBfYVtBbmltYXRpb25UeXBlLkhvdmVyXSA9IGNyZWF0ZVR5cGVTdGF0ZSgpLFxuICAgICAgICBfYVtBbmltYXRpb25UeXBlLlRhcF0gPSBjcmVhdGVUeXBlU3RhdGUoKSxcbiAgICAgICAgX2FbQW5pbWF0aW9uVHlwZS5EcmFnXSA9IGNyZWF0ZVR5cGVTdGF0ZSgpLFxuICAgICAgICBfYVtBbmltYXRpb25UeXBlLkZvY3VzXSA9IGNyZWF0ZVR5cGVTdGF0ZSgpLFxuICAgICAgICBfYVtBbmltYXRpb25UeXBlLkV4aXRdID0gY3JlYXRlVHlwZVN0YXRlKCksXG4gICAgICAgIF9hO1xufVxuXG5leHBvcnQgeyBjaGVja1ZhcmlhbnRzRGlkQ2hhbmdlLCBjcmVhdGVBbmltYXRpb25TdGF0ZSwgdmFyaWFudFByaW9yaXR5T3JkZXIgfTtcbiIsImltcG9ydCB7IF9fcmVhZCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzQW5pbWF0aW9uQ29udHJvbHMgfSBmcm9tICcuLi8uLi9hbmltYXRpb24vdXRpbHMvaXMtYW5pbWF0aW9uLWNvbnRyb2xzLm1qcyc7XG5pbXBvcnQgeyB1c2VQcmVzZW5jZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvQW5pbWF0ZVByZXNlbmNlL3VzZS1wcmVzZW5jZS5tanMnO1xuaW1wb3J0IHsgUHJlc2VuY2VDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9QcmVzZW5jZUNvbnRleHQubWpzJztcbmltcG9ydCB7IGNyZWF0ZUFuaW1hdGlvblN0YXRlIH0gZnJvbSAnLi4vLi4vcmVuZGVyL3V0aWxzL2FuaW1hdGlvbi1zdGF0ZS5tanMnO1xuaW1wb3J0IHsgQW5pbWF0aW9uVHlwZSB9IGZyb20gJy4uLy4uL3JlbmRlci91dGlscy90eXBlcy5tanMnO1xuaW1wb3J0IHsgbWFrZVJlbmRlcmxlc3NDb21wb25lbnQgfSBmcm9tICcuLi91dGlscy9tYWtlLXJlbmRlcmxlc3MtY29tcG9uZW50Lm1qcyc7XG5cbnZhciBhbmltYXRpb25zID0ge1xuICAgIGFuaW1hdGlvbjogbWFrZVJlbmRlcmxlc3NDb21wb25lbnQoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciB2aXN1YWxFbGVtZW50ID0gX2EudmlzdWFsRWxlbWVudCwgYW5pbWF0ZSA9IF9hLmFuaW1hdGU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXZSBkeW5hbWljYWxseSBnZW5lcmF0ZSB0aGUgQW5pbWF0aW9uU3RhdGUgbWFuYWdlciBhcyBpdCBjb250YWlucyBhIHJlZmVyZW5jZVxuICAgICAgICAgKiB0byB0aGUgdW5kZXJseWluZyBhbmltYXRpb24gbGlicmFyeS4gV2Ugb25seSB3YW50IHRvIGxvYWQgdGhhdCBpZiB3ZSBsb2FkIHRoaXMsXG4gICAgICAgICAqIHNvIHBlb3BsZSBjYW4gb3B0aW9uYWxseSBjb2RlIHNwbGl0IGl0IG91dCB1c2luZyB0aGUgYG1gIGNvbXBvbmVudC5cbiAgICAgICAgICovXG4gICAgICAgIHZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUgfHwgKHZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUgPSBjcmVhdGVBbmltYXRpb25TdGF0ZSh2aXN1YWxFbGVtZW50KSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTdWJzY3JpYmUgYW55IHByb3ZpZGVkIEFuaW1hdGlvbkNvbnRyb2xzIHRvIHRoZSBjb21wb25lbnQncyBWaXN1YWxFbGVtZW50XG4gICAgICAgICAqL1xuICAgICAgICBpZiAoaXNBbmltYXRpb25Db250cm9scyhhbmltYXRlKSkge1xuICAgICAgICAgICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFuaW1hdGUuc3Vic2NyaWJlKHZpc3VhbEVsZW1lbnQpOyB9LCBbYW5pbWF0ZV0pO1xuICAgICAgICB9XG4gICAgfSksXG4gICAgZXhpdDogbWFrZVJlbmRlcmxlc3NDb21wb25lbnQoZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBjdXN0b20gPSBwcm9wcy5jdXN0b20sIHZpc3VhbEVsZW1lbnQgPSBwcm9wcy52aXN1YWxFbGVtZW50O1xuICAgICAgICB2YXIgX2EgPSBfX3JlYWQodXNlUHJlc2VuY2UoKSwgMiksIGlzUHJlc2VudCA9IF9hWzBdLCBzYWZlVG9SZW1vdmUgPSBfYVsxXTtcbiAgICAgICAgdmFyIHByZXNlbmNlQ29udGV4dCA9IHVzZUNvbnRleHQoUHJlc2VuY2VDb250ZXh0KTtcbiAgICAgICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICB2aXN1YWxFbGVtZW50LmlzUHJlc2VudCA9IGlzUHJlc2VudDtcbiAgICAgICAgICAgIHZhciBhbmltYXRpb24gPSAoX2EgPSB2aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2V0QWN0aXZlKEFuaW1hdGlvblR5cGUuRXhpdCwgIWlzUHJlc2VudCwgeyBjdXN0b206IChfYiA9IHByZXNlbmNlQ29udGV4dCA9PT0gbnVsbCB8fCBwcmVzZW5jZUNvbnRleHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByZXNlbmNlQ29udGV4dC5jdXN0b20pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGN1c3RvbSB9KTtcbiAgICAgICAgICAgICFpc1ByZXNlbnQgJiYgKGFuaW1hdGlvbiA9PT0gbnVsbCB8fCBhbmltYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFuaW1hdGlvbi50aGVuKHNhZmVUb1JlbW92ZSkpO1xuICAgICAgICB9LCBbaXNQcmVzZW50XSk7XG4gICAgfSksXG59O1xuXG5leHBvcnQgeyBhbmltYXRpb25zIH07XG4iLCJjb25zdCBpc1BvaW50ID0gKHBvaW50KSA9PiBwb2ludC5oYXNPd25Qcm9wZXJ0eSgneCcpICYmIHBvaW50Lmhhc093blByb3BlcnR5KCd5Jyk7XG5cbmV4cG9ydCB7IGlzUG9pbnQgfTtcbiIsImltcG9ydCB7IGlzUG9pbnQgfSBmcm9tICcuL2lzLXBvaW50Lm1qcyc7XG5cbmNvbnN0IGlzUG9pbnQzRCA9IChwb2ludCkgPT4gaXNQb2ludChwb2ludCkgJiYgcG9pbnQuaGFzT3duUHJvcGVydHkoJ3onKTtcblxuZXhwb3J0IHsgaXNQb2ludDNEIH07XG4iLCJpbXBvcnQgeyBpc1BvaW50IH0gZnJvbSAnLi9pcy1wb2ludC5tanMnO1xuaW1wb3J0IHsgaXNQb2ludDNEIH0gZnJvbSAnLi9pcy1wb2ludC0zZC5tanMnO1xuaW1wb3J0IHsgaXNOdW0gfSBmcm9tICcuL2luYy5tanMnO1xuXG5jb25zdCBkaXN0YW5jZTFEID0gKGEsIGIpID0+IE1hdGguYWJzKGEgLSBiKTtcbmZ1bmN0aW9uIGRpc3RhbmNlKGEsIGIpIHtcbiAgICBpZiAoaXNOdW0oYSkgJiYgaXNOdW0oYikpIHtcbiAgICAgICAgcmV0dXJuIGRpc3RhbmNlMUQoYSwgYik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUG9pbnQoYSkgJiYgaXNQb2ludChiKSkge1xuICAgICAgICBjb25zdCB4RGVsdGEgPSBkaXN0YW5jZTFEKGEueCwgYi54KTtcbiAgICAgICAgY29uc3QgeURlbHRhID0gZGlzdGFuY2UxRChhLnksIGIueSk7XG4gICAgICAgIGNvbnN0IHpEZWx0YSA9IGlzUG9pbnQzRChhKSAmJiBpc1BvaW50M0QoYikgPyBkaXN0YW5jZTFEKGEueiwgYi56KSA6IDA7XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coeERlbHRhLCAyKSArIE1hdGgucG93KHlEZWx0YSwgMikgKyBNYXRoLnBvdyh6RGVsdGEsIDIpKTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IGRpc3RhbmNlIH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGlzTW91c2VFdmVudCwgaXNUb3VjaEV2ZW50IH0gZnJvbSAnLi91dGlscy9ldmVudC10eXBlLm1qcyc7XG5pbXBvcnQgeyBleHRyYWN0RXZlbnRJbmZvIH0gZnJvbSAnLi4vZXZlbnRzL2V2ZW50LWluZm8ubWpzJztcbmltcG9ydCBzeW5jLCB7IGdldEZyYW1lRGF0YSwgY2FuY2VsU3luYyB9IGZyb20gJ2ZyYW1lc3luYyc7XG5pbXBvcnQgeyBzZWNvbmRzVG9NaWxsaXNlY29uZHMgfSBmcm9tICcuLi91dGlscy90aW1lLWNvbnZlcnNpb24ubWpzJztcbmltcG9ydCB7IGFkZFBvaW50ZXJFdmVudCB9IGZyb20gJy4uL2V2ZW50cy91c2UtcG9pbnRlci1ldmVudC5tanMnO1xuaW1wb3J0IHsgZGlzdGFuY2UsIHBpcGUgfSBmcm9tICdwb3Btb3Rpb24nO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgUGFuU2Vzc2lvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQYW5TZXNzaW9uKGV2ZW50LCBoYW5kbGVycywgX2EpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9iID0gX2EgPT09IHZvaWQgMCA/IHt9IDogX2EsIHRyYW5zZm9ybVBhZ2VQb2ludCA9IF9iLnRyYW5zZm9ybVBhZ2VQb2ludDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zdGFydEV2ZW50ID0gbnVsbDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5sYXN0TW92ZUV2ZW50ID0gbnVsbDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5sYXN0TW92ZUV2ZW50SW5mbyA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSB7fTtcbiAgICAgICAgdGhpcy51cGRhdGVQb2ludCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghKF90aGlzLmxhc3RNb3ZlRXZlbnQgJiYgX3RoaXMubGFzdE1vdmVFdmVudEluZm8pKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBpbmZvID0gZ2V0UGFuSW5mbyhfdGhpcy5sYXN0TW92ZUV2ZW50SW5mbywgX3RoaXMuaGlzdG9yeSk7XG4gICAgICAgICAgICB2YXIgaXNQYW5TdGFydGVkID0gX3RoaXMuc3RhcnRFdmVudCAhPT0gbnVsbDtcbiAgICAgICAgICAgIC8vIE9ubHkgc3RhcnQgcGFubmluZyBpZiB0aGUgb2Zmc2V0IGlzIGxhcmdlciB0aGFuIDMgcGl4ZWxzLiBJZiB3ZSBtYWtlIGl0XG4gICAgICAgICAgICAvLyBhbnkgbGFyZ2VyIHRoYW4gdGhpcyB3ZSdsbCB3YW50IHRvIHJlc2V0IHRoZSBwb2ludGVyIGhpc3RvcnlcbiAgICAgICAgICAgIC8vIG9uIHRoZSBmaXJzdCB1cGRhdGUgdG8gYXZvaWQgdmlzdWFsIHNuYXBwaW5nIHRvIHRoZSBjdXJzb2UuXG4gICAgICAgICAgICB2YXIgaXNEaXN0YW5jZVBhc3RUaHJlc2hvbGQgPSBkaXN0YW5jZShpbmZvLm9mZnNldCwgeyB4OiAwLCB5OiAwIH0pID49IDM7XG4gICAgICAgICAgICBpZiAoIWlzUGFuU3RhcnRlZCAmJiAhaXNEaXN0YW5jZVBhc3RUaHJlc2hvbGQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIHBvaW50ID0gaW5mby5wb2ludDtcbiAgICAgICAgICAgIHZhciB0aW1lc3RhbXAgPSBnZXRGcmFtZURhdGEoKS50aW1lc3RhbXA7XG4gICAgICAgICAgICBfdGhpcy5oaXN0b3J5LnB1c2goX19hc3NpZ24oX19hc3NpZ24oe30sIHBvaW50KSwgeyB0aW1lc3RhbXA6IHRpbWVzdGFtcCB9KSk7XG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5oYW5kbGVycywgb25TdGFydCA9IF9hLm9uU3RhcnQsIG9uTW92ZSA9IF9hLm9uTW92ZTtcbiAgICAgICAgICAgIGlmICghaXNQYW5TdGFydGVkKSB7XG4gICAgICAgICAgICAgICAgb25TdGFydCAmJiBvblN0YXJ0KF90aGlzLmxhc3RNb3ZlRXZlbnQsIGluZm8pO1xuICAgICAgICAgICAgICAgIF90aGlzLnN0YXJ0RXZlbnQgPSBfdGhpcy5sYXN0TW92ZUV2ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25Nb3ZlICYmIG9uTW92ZShfdGhpcy5sYXN0TW92ZUV2ZW50LCBpbmZvKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyTW92ZSA9IGZ1bmN0aW9uIChldmVudCwgaW5mbykge1xuICAgICAgICAgICAgX3RoaXMubGFzdE1vdmVFdmVudCA9IGV2ZW50O1xuICAgICAgICAgICAgX3RoaXMubGFzdE1vdmVFdmVudEluZm8gPSB0cmFuc2Zvcm1Qb2ludChpbmZvLCBfdGhpcy50cmFuc2Zvcm1QYWdlUG9pbnQpO1xuICAgICAgICAgICAgLy8gQmVjYXVzZSBTYWZhcmkgZG9lc24ndCB0cmlnZ2VyIG1vdXNldXAgZXZlbnRzIHdoZW4gaXQncyBhYm92ZSBhIGA8c2VsZWN0PmBcbiAgICAgICAgICAgIGlmIChpc01vdXNlRXZlbnQoZXZlbnQpICYmIGV2ZW50LmJ1dHRvbnMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYW5kbGVQb2ludGVyVXAoZXZlbnQsIGluZm8pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRocm90dGxlIG1vdXNlIG1vdmUgZXZlbnQgdG8gb25jZSBwZXIgZnJhbWVcbiAgICAgICAgICAgIHN5bmMudXBkYXRlKF90aGlzLnVwZGF0ZVBvaW50LCB0cnVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyVXAgPSBmdW5jdGlvbiAoZXZlbnQsIGluZm8pIHtcbiAgICAgICAgICAgIF90aGlzLmVuZCgpO1xuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMuaGFuZGxlcnMsIG9uRW5kID0gX2Eub25FbmQsIG9uU2Vzc2lvbkVuZCA9IF9hLm9uU2Vzc2lvbkVuZDtcbiAgICAgICAgICAgIHZhciBwYW5JbmZvID0gZ2V0UGFuSW5mbyh0cmFuc2Zvcm1Qb2ludChpbmZvLCBfdGhpcy50cmFuc2Zvcm1QYWdlUG9pbnQpLCBfdGhpcy5oaXN0b3J5KTtcbiAgICAgICAgICAgIGlmIChfdGhpcy5zdGFydEV2ZW50ICYmIG9uRW5kKSB7XG4gICAgICAgICAgICAgICAgb25FbmQoZXZlbnQsIHBhbkluZm8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25TZXNzaW9uRW5kICYmIG9uU2Vzc2lvbkVuZChldmVudCwgcGFuSW5mbyk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIElmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSB0b3VjaCwgZG9uJ3Qgc3RhcnQgZGV0ZWN0aW5nIHRoaXMgZ2VzdHVyZVxuICAgICAgICBpZiAoaXNUb3VjaEV2ZW50KGV2ZW50KSAmJiBldmVudC50b3VjaGVzLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSBoYW5kbGVycztcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1QYWdlUG9pbnQgPSB0cmFuc2Zvcm1QYWdlUG9pbnQ7XG4gICAgICAgIHZhciBpbmZvID0gZXh0cmFjdEV2ZW50SW5mbyhldmVudCk7XG4gICAgICAgIHZhciBpbml0aWFsSW5mbyA9IHRyYW5zZm9ybVBvaW50KGluZm8sIHRoaXMudHJhbnNmb3JtUGFnZVBvaW50KTtcbiAgICAgICAgdmFyIHBvaW50ID0gaW5pdGlhbEluZm8ucG9pbnQ7XG4gICAgICAgIHZhciB0aW1lc3RhbXAgPSBnZXRGcmFtZURhdGEoKS50aW1lc3RhbXA7XG4gICAgICAgIHRoaXMuaGlzdG9yeSA9IFtfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcG9pbnQpLCB7IHRpbWVzdGFtcDogdGltZXN0YW1wIH0pXTtcbiAgICAgICAgdmFyIG9uU2Vzc2lvblN0YXJ0ID0gaGFuZGxlcnMub25TZXNzaW9uU3RhcnQ7XG4gICAgICAgIG9uU2Vzc2lvblN0YXJ0ICYmXG4gICAgICAgICAgICBvblNlc3Npb25TdGFydChldmVudCwgZ2V0UGFuSW5mbyhpbml0aWFsSW5mbywgdGhpcy5oaXN0b3J5KSk7XG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXJzID0gcGlwZShhZGRQb2ludGVyRXZlbnQod2luZG93LCBcInBvaW50ZXJtb3ZlXCIsIHRoaXMuaGFuZGxlUG9pbnRlck1vdmUpLCBhZGRQb2ludGVyRXZlbnQod2luZG93LCBcInBvaW50ZXJ1cFwiLCB0aGlzLmhhbmRsZVBvaW50ZXJVcCksIGFkZFBvaW50ZXJFdmVudCh3aW5kb3csIFwicG9pbnRlcmNhbmNlbFwiLCB0aGlzLmhhbmRsZVBvaW50ZXJVcCkpO1xuICAgIH1cbiAgICBQYW5TZXNzaW9uLnByb3RvdHlwZS51cGRhdGVIYW5kbGVycyA9IGZ1bmN0aW9uIChoYW5kbGVycykge1xuICAgICAgICB0aGlzLmhhbmRsZXJzID0gaGFuZGxlcnM7XG4gICAgfTtcbiAgICBQYW5TZXNzaW9uLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXJzICYmIHRoaXMucmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICAgIGNhbmNlbFN5bmMudXBkYXRlKHRoaXMudXBkYXRlUG9pbnQpO1xuICAgIH07XG4gICAgcmV0dXJuIFBhblNlc3Npb247XG59KCkpO1xuZnVuY3Rpb24gdHJhbnNmb3JtUG9pbnQoaW5mbywgdHJhbnNmb3JtUGFnZVBvaW50KSB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybVBhZ2VQb2ludCA/IHsgcG9pbnQ6IHRyYW5zZm9ybVBhZ2VQb2ludChpbmZvLnBvaW50KSB9IDogaW5mbztcbn1cbmZ1bmN0aW9uIHN1YnRyYWN0UG9pbnQoYSwgYikge1xuICAgIHJldHVybiB7IHg6IGEueCAtIGIueCwgeTogYS55IC0gYi55IH07XG59XG5mdW5jdGlvbiBnZXRQYW5JbmZvKF9hLCBoaXN0b3J5KSB7XG4gICAgdmFyIHBvaW50ID0gX2EucG9pbnQ7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcG9pbnQ6IHBvaW50LFxuICAgICAgICBkZWx0YTogc3VidHJhY3RQb2ludChwb2ludCwgbGFzdERldmljZVBvaW50KGhpc3RvcnkpKSxcbiAgICAgICAgb2Zmc2V0OiBzdWJ0cmFjdFBvaW50KHBvaW50LCBzdGFydERldmljZVBvaW50KGhpc3RvcnkpKSxcbiAgICAgICAgdmVsb2NpdHk6IGdldFZlbG9jaXR5KGhpc3RvcnksIDAuMSksXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHN0YXJ0RGV2aWNlUG9pbnQoaGlzdG9yeSkge1xuICAgIHJldHVybiBoaXN0b3J5WzBdO1xufVxuZnVuY3Rpb24gbGFzdERldmljZVBvaW50KGhpc3RvcnkpIHtcbiAgICByZXR1cm4gaGlzdG9yeVtoaXN0b3J5Lmxlbmd0aCAtIDFdO1xufVxuZnVuY3Rpb24gZ2V0VmVsb2NpdHkoaGlzdG9yeSwgdGltZURlbHRhKSB7XG4gICAgaWYgKGhpc3RvcnkubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4geyB4OiAwLCB5OiAwIH07XG4gICAgfVxuICAgIHZhciBpID0gaGlzdG9yeS5sZW5ndGggLSAxO1xuICAgIHZhciB0aW1lc3RhbXBlZFBvaW50ID0gbnVsbDtcbiAgICB2YXIgbGFzdFBvaW50ID0gbGFzdERldmljZVBvaW50KGhpc3RvcnkpO1xuICAgIHdoaWxlIChpID49IDApIHtcbiAgICAgICAgdGltZXN0YW1wZWRQb2ludCA9IGhpc3RvcnlbaV07XG4gICAgICAgIGlmIChsYXN0UG9pbnQudGltZXN0YW1wIC0gdGltZXN0YW1wZWRQb2ludC50aW1lc3RhbXAgPlxuICAgICAgICAgICAgc2Vjb25kc1RvTWlsbGlzZWNvbmRzKHRpbWVEZWx0YSkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGktLTtcbiAgICB9XG4gICAgaWYgKCF0aW1lc3RhbXBlZFBvaW50KSB7XG4gICAgICAgIHJldHVybiB7IHg6IDAsIHk6IDAgfTtcbiAgICB9XG4gICAgdmFyIHRpbWUgPSAobGFzdFBvaW50LnRpbWVzdGFtcCAtIHRpbWVzdGFtcGVkUG9pbnQudGltZXN0YW1wKSAvIDEwMDA7XG4gICAgaWYgKHRpbWUgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHsgeDogMCwgeTogMCB9O1xuICAgIH1cbiAgICB2YXIgY3VycmVudFZlbG9jaXR5ID0ge1xuICAgICAgICB4OiAobGFzdFBvaW50LnggLSB0aW1lc3RhbXBlZFBvaW50LngpIC8gdGltZSxcbiAgICAgICAgeTogKGxhc3RQb2ludC55IC0gdGltZXN0YW1wZWRQb2ludC55KSAvIHRpbWUsXG4gICAgfTtcbiAgICBpZiAoY3VycmVudFZlbG9jaXR5LnggPT09IEluZmluaXR5KSB7XG4gICAgICAgIGN1cnJlbnRWZWxvY2l0eS54ID0gMDtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRWZWxvY2l0eS55ID09PSBJbmZpbml0eSkge1xuICAgICAgICBjdXJyZW50VmVsb2NpdHkueSA9IDA7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50VmVsb2NpdHk7XG59XG5cbmV4cG9ydCB7IFBhblNlc3Npb24gfTtcbiIsImltcG9ydCB7IG1peCwgZGlzdGFuY2UgfSBmcm9tICdwb3Btb3Rpb24nO1xuXG5mdW5jdGlvbiBjYWxjTGVuZ3RoKGF4aXMpIHtcbiAgICByZXR1cm4gYXhpcy5tYXggLSBheGlzLm1pbjtcbn1cbmZ1bmN0aW9uIGlzTmVhcih2YWx1ZSwgdGFyZ2V0LCBtYXhEaXN0YW5jZSkge1xuICAgIGlmICh0YXJnZXQgPT09IHZvaWQgMCkgeyB0YXJnZXQgPSAwOyB9XG4gICAgaWYgKG1heERpc3RhbmNlID09PSB2b2lkIDApIHsgbWF4RGlzdGFuY2UgPSAwLjAxOyB9XG4gICAgcmV0dXJuIGRpc3RhbmNlKHZhbHVlLCB0YXJnZXQpIDwgbWF4RGlzdGFuY2U7XG59XG5mdW5jdGlvbiBjYWxjQXhpc0RlbHRhKGRlbHRhLCBzb3VyY2UsIHRhcmdldCwgb3JpZ2luKSB7XG4gICAgaWYgKG9yaWdpbiA9PT0gdm9pZCAwKSB7IG9yaWdpbiA9IDAuNTsgfVxuICAgIGRlbHRhLm9yaWdpbiA9IG9yaWdpbjtcbiAgICBkZWx0YS5vcmlnaW5Qb2ludCA9IG1peChzb3VyY2UubWluLCBzb3VyY2UubWF4LCBkZWx0YS5vcmlnaW4pO1xuICAgIGRlbHRhLnNjYWxlID0gY2FsY0xlbmd0aCh0YXJnZXQpIC8gY2FsY0xlbmd0aChzb3VyY2UpO1xuICAgIGlmIChpc05lYXIoZGVsdGEuc2NhbGUsIDEsIDAuMDAwMSkgfHwgaXNOYU4oZGVsdGEuc2NhbGUpKVxuICAgICAgICBkZWx0YS5zY2FsZSA9IDE7XG4gICAgZGVsdGEudHJhbnNsYXRlID1cbiAgICAgICAgbWl4KHRhcmdldC5taW4sIHRhcmdldC5tYXgsIGRlbHRhLm9yaWdpbikgLSBkZWx0YS5vcmlnaW5Qb2ludDtcbiAgICBpZiAoaXNOZWFyKGRlbHRhLnRyYW5zbGF0ZSkgfHwgaXNOYU4oZGVsdGEudHJhbnNsYXRlKSlcbiAgICAgICAgZGVsdGEudHJhbnNsYXRlID0gMDtcbn1cbmZ1bmN0aW9uIGNhbGNCb3hEZWx0YShkZWx0YSwgc291cmNlLCB0YXJnZXQsIG9yaWdpbikge1xuICAgIGNhbGNBeGlzRGVsdGEoZGVsdGEueCwgc291cmNlLngsIHRhcmdldC54LCBvcmlnaW4gPT09IG51bGwgfHwgb3JpZ2luID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcmlnaW4ub3JpZ2luWCk7XG4gICAgY2FsY0F4aXNEZWx0YShkZWx0YS55LCBzb3VyY2UueSwgdGFyZ2V0LnksIG9yaWdpbiA9PT0gbnVsbCB8fCBvcmlnaW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9yaWdpbi5vcmlnaW5ZKTtcbn1cbmZ1bmN0aW9uIGNhbGNSZWxhdGl2ZUF4aXModGFyZ2V0LCByZWxhdGl2ZSwgcGFyZW50KSB7XG4gICAgdGFyZ2V0Lm1pbiA9IHBhcmVudC5taW4gKyByZWxhdGl2ZS5taW47XG4gICAgdGFyZ2V0Lm1heCA9IHRhcmdldC5taW4gKyBjYWxjTGVuZ3RoKHJlbGF0aXZlKTtcbn1cbmZ1bmN0aW9uIGNhbGNSZWxhdGl2ZUJveCh0YXJnZXQsIHJlbGF0aXZlLCBwYXJlbnQpIHtcbiAgICBjYWxjUmVsYXRpdmVBeGlzKHRhcmdldC54LCByZWxhdGl2ZS54LCBwYXJlbnQueCk7XG4gICAgY2FsY1JlbGF0aXZlQXhpcyh0YXJnZXQueSwgcmVsYXRpdmUueSwgcGFyZW50LnkpO1xufVxuZnVuY3Rpb24gY2FsY1JlbGF0aXZlQXhpc1Bvc2l0aW9uKHRhcmdldCwgbGF5b3V0LCBwYXJlbnQpIHtcbiAgICB0YXJnZXQubWluID0gbGF5b3V0Lm1pbiAtIHBhcmVudC5taW47XG4gICAgdGFyZ2V0Lm1heCA9IHRhcmdldC5taW4gKyBjYWxjTGVuZ3RoKGxheW91dCk7XG59XG5mdW5jdGlvbiBjYWxjUmVsYXRpdmVQb3NpdGlvbih0YXJnZXQsIGxheW91dCwgcGFyZW50KSB7XG4gICAgY2FsY1JlbGF0aXZlQXhpc1Bvc2l0aW9uKHRhcmdldC54LCBsYXlvdXQueCwgcGFyZW50LngpO1xuICAgIGNhbGNSZWxhdGl2ZUF4aXNQb3NpdGlvbih0YXJnZXQueSwgbGF5b3V0LnksIHBhcmVudC55KTtcbn1cblxuZXhwb3J0IHsgY2FsY0F4aXNEZWx0YSwgY2FsY0JveERlbHRhLCBjYWxjTGVuZ3RoLCBjYWxjUmVsYXRpdmVBeGlzLCBjYWxjUmVsYXRpdmVBeGlzUG9zaXRpb24sIGNhbGNSZWxhdGl2ZUJveCwgY2FsY1JlbGF0aXZlUG9zaXRpb24sIGlzTmVhciB9O1xuIiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgY2xhbXAsIG1peCwgcHJvZ3Jlc3MgfSBmcm9tICdwb3Btb3Rpb24nO1xuaW1wb3J0IHsgY2FsY0xlbmd0aCB9IGZyb20gJy4uLy4uLy4uL3Byb2plY3Rpb24vZ2VvbWV0cnkvZGVsdGEtY2FsYy5tanMnO1xuXG4vKipcbiAqIEFwcGx5IGNvbnN0cmFpbnRzIHRvIGEgcG9pbnQuIFRoZXNlIGNvbnN0cmFpbnRzIGFyZSBib3RoIHBoeXNpY2FsIGFsb25nIGFuXG4gKiBheGlzLCBhbmQgYW4gZWxhc3RpYyBmYWN0b3IgdGhhdCBkZXRlcm1pbmVzIGhvdyBtdWNoIHRvIGNvbnN0cmFpbiB0aGUgcG9pbnRcbiAqIGJ5IGlmIGl0IGRvZXMgbGllIG91dHNpZGUgdGhlIGRlZmluZWQgcGFyYW1ldGVycy5cbiAqL1xuZnVuY3Rpb24gYXBwbHlDb25zdHJhaW50cyhwb2ludCwgX2EsIGVsYXN0aWMpIHtcbiAgICB2YXIgbWluID0gX2EubWluLCBtYXggPSBfYS5tYXg7XG4gICAgaWYgKG1pbiAhPT0gdW5kZWZpbmVkICYmIHBvaW50IDwgbWluKSB7XG4gICAgICAgIC8vIElmIHdlIGhhdmUgYSBtaW4gcG9pbnQgZGVmaW5lZCwgYW5kIHRoaXMgaXMgb3V0c2lkZSBvZiB0aGF0LCBjb25zdHJhaW5cbiAgICAgICAgcG9pbnQgPSBlbGFzdGljID8gbWl4KG1pbiwgcG9pbnQsIGVsYXN0aWMubWluKSA6IE1hdGgubWF4KHBvaW50LCBtaW4pO1xuICAgIH1cbiAgICBlbHNlIGlmIChtYXggIT09IHVuZGVmaW5lZCAmJiBwb2ludCA+IG1heCkge1xuICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgbWF4IHBvaW50IGRlZmluZWQsIGFuZCB0aGlzIGlzIG91dHNpZGUgb2YgdGhhdCwgY29uc3RyYWluXG4gICAgICAgIHBvaW50ID0gZWxhc3RpYyA/IG1peChtYXgsIHBvaW50LCBlbGFzdGljLm1heCkgOiBNYXRoLm1pbihwb2ludCwgbWF4KTtcbiAgICB9XG4gICAgcmV0dXJuIHBvaW50O1xufVxuLyoqXG4gKiBDYWxjdWxhdGUgY29uc3RyYWludHMgaW4gdGVybXMgb2YgdGhlIHZpZXdwb3J0IHdoZW4gZGVmaW5lZCByZWxhdGl2ZWx5IHRvIHRoZVxuICogbWVhc3VyZWQgYXhpcy4gVGhpcyBpcyBtZWFzdXJlZCBmcm9tIHRoZSBuZWFyZXN0IGVkZ2UsIHNvIGEgbWF4IGNvbnN0cmFpbnQgb2YgMjAwXG4gKiBvbiBhbiBheGlzIHdpdGggYSBtYXggdmFsdWUgb2YgMzAwIHdvdWxkIHJldHVybiBhIGNvbnN0cmFpbnQgb2YgNTAwIC0gYXhpcyBsZW5ndGhcbiAqL1xuZnVuY3Rpb24gY2FsY1JlbGF0aXZlQXhpc0NvbnN0cmFpbnRzKGF4aXMsIG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWluOiBtaW4gIT09IHVuZGVmaW5lZCA/IGF4aXMubWluICsgbWluIDogdW5kZWZpbmVkLFxuICAgICAgICBtYXg6IG1heCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGF4aXMubWF4ICsgbWF4IC0gKGF4aXMubWF4IC0gYXhpcy5taW4pXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xufVxuLyoqXG4gKiBDYWxjdWxhdGUgY29uc3RyYWludHMgaW4gdGVybXMgb2YgdGhlIHZpZXdwb3J0IHdoZW5cbiAqIGRlZmluZWQgcmVsYXRpdmVseSB0byB0aGUgbWVhc3VyZWQgYm91bmRpbmcgYm94LlxuICovXG5mdW5jdGlvbiBjYWxjUmVsYXRpdmVDb25zdHJhaW50cyhsYXlvdXRCb3gsIF9hKSB7XG4gICAgdmFyIHRvcCA9IF9hLnRvcCwgbGVmdCA9IF9hLmxlZnQsIGJvdHRvbSA9IF9hLmJvdHRvbSwgcmlnaHQgPSBfYS5yaWdodDtcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiBjYWxjUmVsYXRpdmVBeGlzQ29uc3RyYWludHMobGF5b3V0Qm94LngsIGxlZnQsIHJpZ2h0KSxcbiAgICAgICAgeTogY2FsY1JlbGF0aXZlQXhpc0NvbnN0cmFpbnRzKGxheW91dEJveC55LCB0b3AsIGJvdHRvbSksXG4gICAgfTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlIHZpZXdwb3J0IGNvbnN0cmFpbnRzIHdoZW4gZGVmaW5lZCBhcyBhbm90aGVyIHZpZXdwb3J0LXJlbGF0aXZlIGF4aXNcbiAqL1xuZnVuY3Rpb24gY2FsY1ZpZXdwb3J0QXhpc0NvbnN0cmFpbnRzKGxheW91dEF4aXMsIGNvbnN0cmFpbnRzQXhpcykge1xuICAgIHZhciBfYTtcbiAgICB2YXIgbWluID0gY29uc3RyYWludHNBeGlzLm1pbiAtIGxheW91dEF4aXMubWluO1xuICAgIHZhciBtYXggPSBjb25zdHJhaW50c0F4aXMubWF4IC0gbGF5b3V0QXhpcy5tYXg7XG4gICAgLy8gSWYgdGhlIGNvbnN0cmFpbnRzIGF4aXMgaXMgYWN0dWFsbHkgc21hbGxlciB0aGFuIHRoZSBsYXlvdXQgYXhpcyB0aGVuIHdlIGNhblxuICAgIC8vIGZsaXAgdGhlIGNvbnN0cmFpbnRzXG4gICAgaWYgKGNvbnN0cmFpbnRzQXhpcy5tYXggLSBjb25zdHJhaW50c0F4aXMubWluIDxcbiAgICAgICAgbGF5b3V0QXhpcy5tYXggLSBsYXlvdXRBeGlzLm1pbikge1xuICAgICAgICBfYSA9IF9fcmVhZChbbWF4LCBtaW5dLCAyKSwgbWluID0gX2FbMF0sIG1heCA9IF9hWzFdO1xuICAgIH1cbiAgICByZXR1cm4geyBtaW46IG1pbiwgbWF4OiBtYXggfTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlIHZpZXdwb3J0IGNvbnN0cmFpbnRzIHdoZW4gZGVmaW5lZCBhcyBhbm90aGVyIHZpZXdwb3J0LXJlbGF0aXZlIGJveFxuICovXG5mdW5jdGlvbiBjYWxjVmlld3BvcnRDb25zdHJhaW50cyhsYXlvdXRCb3gsIGNvbnN0cmFpbnRzQm94KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogY2FsY1ZpZXdwb3J0QXhpc0NvbnN0cmFpbnRzKGxheW91dEJveC54LCBjb25zdHJhaW50c0JveC54KSxcbiAgICAgICAgeTogY2FsY1ZpZXdwb3J0QXhpc0NvbnN0cmFpbnRzKGxheW91dEJveC55LCBjb25zdHJhaW50c0JveC55KSxcbiAgICB9O1xufVxuLyoqXG4gKiBDYWxjdWxhdGUgYSB0cmFuc2Zvcm0gb3JpZ2luIHJlbGF0aXZlIHRvIHRoZSBzb3VyY2UgYXhpcywgYmV0d2VlbiAwLTEsIHRoYXQgcmVzdWx0c1xuICogaW4gYW4gYXN0aGV0aWNhbGx5IHBsZWFzaW5nIHNjYWxlL3RyYW5zZm9ybSBuZWVkZWQgdG8gcHJvamVjdCBmcm9tIHNvdXJjZSB0byB0YXJnZXQuXG4gKi9cbmZ1bmN0aW9uIGNhbGNPcmlnaW4oc291cmNlLCB0YXJnZXQpIHtcbiAgICB2YXIgb3JpZ2luID0gMC41O1xuICAgIHZhciBzb3VyY2VMZW5ndGggPSBjYWxjTGVuZ3RoKHNvdXJjZSk7XG4gICAgdmFyIHRhcmdldExlbmd0aCA9IGNhbGNMZW5ndGgodGFyZ2V0KTtcbiAgICBpZiAodGFyZ2V0TGVuZ3RoID4gc291cmNlTGVuZ3RoKSB7XG4gICAgICAgIG9yaWdpbiA9IHByb2dyZXNzKHRhcmdldC5taW4sIHRhcmdldC5tYXggLSBzb3VyY2VMZW5ndGgsIHNvdXJjZS5taW4pO1xuICAgIH1cbiAgICBlbHNlIGlmIChzb3VyY2VMZW5ndGggPiB0YXJnZXRMZW5ndGgpIHtcbiAgICAgICAgb3JpZ2luID0gcHJvZ3Jlc3Moc291cmNlLm1pbiwgc291cmNlLm1heCAtIHRhcmdldExlbmd0aCwgdGFyZ2V0Lm1pbik7XG4gICAgfVxuICAgIHJldHVybiBjbGFtcCgwLCAxLCBvcmlnaW4pO1xufVxuLyoqXG4gKiBSZWJhc2UgdGhlIGNhbGN1bGF0ZWQgdmlld3BvcnQgY29uc3RyYWludHMgcmVsYXRpdmUgdG8gdGhlIGxheW91dC5taW4gcG9pbnQuXG4gKi9cbmZ1bmN0aW9uIHJlYmFzZUF4aXNDb25zdHJhaW50cyhsYXlvdXQsIGNvbnN0cmFpbnRzKSB7XG4gICAgdmFyIHJlbGF0aXZlQ29uc3RyYWludHMgPSB7fTtcbiAgICBpZiAoY29uc3RyYWludHMubWluICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVsYXRpdmVDb25zdHJhaW50cy5taW4gPSBjb25zdHJhaW50cy5taW4gLSBsYXlvdXQubWluO1xuICAgIH1cbiAgICBpZiAoY29uc3RyYWludHMubWF4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVsYXRpdmVDb25zdHJhaW50cy5tYXggPSBjb25zdHJhaW50cy5tYXggLSBsYXlvdXQubWluO1xuICAgIH1cbiAgICByZXR1cm4gcmVsYXRpdmVDb25zdHJhaW50cztcbn1cbnZhciBkZWZhdWx0RWxhc3RpYyA9IDAuMzU7XG4vKipcbiAqIEFjY2VwdHMgYSBkcmFnRWxhc3RpYyBwcm9wIGFuZCByZXR1cm5zIHJlc29sdmVkIGVsYXN0aWMgdmFsdWVzIGZvciBlYWNoIGF4aXMuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVEcmFnRWxhc3RpYyhkcmFnRWxhc3RpYykge1xuICAgIGlmIChkcmFnRWxhc3RpYyA9PT0gdm9pZCAwKSB7IGRyYWdFbGFzdGljID0gZGVmYXVsdEVsYXN0aWM7IH1cbiAgICBpZiAoZHJhZ0VsYXN0aWMgPT09IGZhbHNlKSB7XG4gICAgICAgIGRyYWdFbGFzdGljID0gMDtcbiAgICB9XG4gICAgZWxzZSBpZiAoZHJhZ0VsYXN0aWMgPT09IHRydWUpIHtcbiAgICAgICAgZHJhZ0VsYXN0aWMgPSBkZWZhdWx0RWxhc3RpYztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogcmVzb2x2ZUF4aXNFbGFzdGljKGRyYWdFbGFzdGljLCBcImxlZnRcIiwgXCJyaWdodFwiKSxcbiAgICAgICAgeTogcmVzb2x2ZUF4aXNFbGFzdGljKGRyYWdFbGFzdGljLCBcInRvcFwiLCBcImJvdHRvbVwiKSxcbiAgICB9O1xufVxuZnVuY3Rpb24gcmVzb2x2ZUF4aXNFbGFzdGljKGRyYWdFbGFzdGljLCBtaW5MYWJlbCwgbWF4TGFiZWwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBtaW46IHJlc29sdmVQb2ludEVsYXN0aWMoZHJhZ0VsYXN0aWMsIG1pbkxhYmVsKSxcbiAgICAgICAgbWF4OiByZXNvbHZlUG9pbnRFbGFzdGljKGRyYWdFbGFzdGljLCBtYXhMYWJlbCksXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVQb2ludEVsYXN0aWMoZHJhZ0VsYXN0aWMsIGxhYmVsKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiB0eXBlb2YgZHJhZ0VsYXN0aWMgPT09IFwibnVtYmVyXCJcbiAgICAgICAgPyBkcmFnRWxhc3RpY1xuICAgICAgICA6IChfYSA9IGRyYWdFbGFzdGljW2xhYmVsXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcbn1cblxuZXhwb3J0IHsgYXBwbHlDb25zdHJhaW50cywgY2FsY09yaWdpbiwgY2FsY1JlbGF0aXZlQXhpc0NvbnN0cmFpbnRzLCBjYWxjUmVsYXRpdmVDb25zdHJhaW50cywgY2FsY1ZpZXdwb3J0QXhpc0NvbnN0cmFpbnRzLCBjYWxjVmlld3BvcnRDb25zdHJhaW50cywgZGVmYXVsdEVsYXN0aWMsIHJlYmFzZUF4aXNDb25zdHJhaW50cywgcmVzb2x2ZUF4aXNFbGFzdGljLCByZXNvbHZlRHJhZ0VsYXN0aWMsIHJlc29sdmVQb2ludEVsYXN0aWMgfTtcbiIsInZhciBjcmVhdGVBeGlzRGVsdGEgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAoe1xuICAgIHRyYW5zbGF0ZTogMCxcbiAgICBzY2FsZTogMSxcbiAgICBvcmlnaW46IDAsXG4gICAgb3JpZ2luUG9pbnQ6IDAsXG59KTsgfTtcbnZhciBjcmVhdGVEZWx0YSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gICAgeDogY3JlYXRlQXhpc0RlbHRhKCksXG4gICAgeTogY3JlYXRlQXhpc0RlbHRhKCksXG59KTsgfTtcbnZhciBjcmVhdGVBeGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKHsgbWluOiAwLCBtYXg6IDAgfSk7IH07XG52YXIgY3JlYXRlQm94ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKHtcbiAgICB4OiBjcmVhdGVBeGlzKCksXG4gICAgeTogY3JlYXRlQXhpcygpLFxufSk7IH07XG5cbmV4cG9ydCB7IGNyZWF0ZUF4aXMsIGNyZWF0ZUF4aXNEZWx0YSwgY3JlYXRlQm94LCBjcmVhdGVEZWx0YSB9O1xuIiwiZnVuY3Rpb24gZWFjaEF4aXMoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gW2NhbGxiYWNrKFwieFwiKSwgY2FsbGJhY2soXCJ5XCIpXTtcbn1cblxuZXhwb3J0IHsgZWFjaEF4aXMgfTtcbiIsIi8qKlxuICogQm91bmRpbmcgYm94ZXMgdGVuZCB0byBiZSBkZWZpbmVkIGFzIHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbS4gRm9yIHZhcmlvdXMgb3BlcmF0aW9uc1xuICogaXQncyBlYXNpZXIgdG8gY29uc2lkZXIgZWFjaCBheGlzIGluZGl2aWR1YWxseS4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgYm91bmRpbmcgYm94XG4gKiBhcyBhIG1hcCBvZiBzaW5nbGUtYXhpcyBtaW4vbWF4IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gY29udmVydEJvdW5kaW5nQm94VG9Cb3goX2EpIHtcbiAgICB2YXIgdG9wID0gX2EudG9wLCBsZWZ0ID0gX2EubGVmdCwgcmlnaHQgPSBfYS5yaWdodCwgYm90dG9tID0gX2EuYm90dG9tO1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHsgbWluOiBsZWZ0LCBtYXg6IHJpZ2h0IH0sXG4gICAgICAgIHk6IHsgbWluOiB0b3AsIG1heDogYm90dG9tIH0sXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRCb3hUb0JvdW5kaW5nQm94KF9hKSB7XG4gICAgdmFyIHggPSBfYS54LCB5ID0gX2EueTtcbiAgICByZXR1cm4geyB0b3A6IHkubWluLCByaWdodDogeC5tYXgsIGJvdHRvbTogeS5tYXgsIGxlZnQ6IHgubWluIH07XG59XG4vKipcbiAqIEFwcGxpZXMgYSBUcmFuc2Zvcm1Qb2ludCBmdW5jdGlvbiB0byBhIGJvdW5kaW5nIGJveC4gVHJhbnNmb3JtUG9pbnQgaXMgdXN1YWxseSBhIGZ1bmN0aW9uXG4gKiBwcm92aWRlZCBieSBGcmFtZXIgdG8gYWxsb3cgbWVhc3VyZWQgcG9pbnRzIHRvIGJlIGNvcnJlY3RlZCBmb3IgZGV2aWNlIHNjYWxpbmcuIFRoaXMgaXMgdXNlZFxuICogd2hlbiBtZWFzdXJpbmcgRE9NIGVsZW1lbnRzIGFuZCBET00gZXZlbnQgcG9pbnRzLlxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm1Cb3hQb2ludHMocG9pbnQsIHRyYW5zZm9ybVBvaW50KSB7XG4gICAgaWYgKCF0cmFuc2Zvcm1Qb2ludClcbiAgICAgICAgcmV0dXJuIHBvaW50O1xuICAgIHZhciB0b3BMZWZ0ID0gdHJhbnNmb3JtUG9pbnQoeyB4OiBwb2ludC5sZWZ0LCB5OiBwb2ludC50b3AgfSk7XG4gICAgdmFyIGJvdHRvbVJpZ2h0ID0gdHJhbnNmb3JtUG9pbnQoeyB4OiBwb2ludC5yaWdodCwgeTogcG9pbnQuYm90dG9tIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHRvcDogdG9wTGVmdC55LFxuICAgICAgICBsZWZ0OiB0b3BMZWZ0LngsXG4gICAgICAgIGJvdHRvbTogYm90dG9tUmlnaHQueSxcbiAgICAgICAgcmlnaHQ6IGJvdHRvbVJpZ2h0LngsXG4gICAgfTtcbn1cblxuZXhwb3J0IHsgY29udmVydEJvdW5kaW5nQm94VG9Cb3gsIGNvbnZlcnRCb3hUb0JvdW5kaW5nQm94LCB0cmFuc2Zvcm1Cb3hQb2ludHMgfTtcbiIsImZ1bmN0aW9uIGlzSWRlbnRpdHlTY2FsZShzY2FsZSkge1xuICAgIHJldHVybiBzY2FsZSA9PT0gdW5kZWZpbmVkIHx8IHNjYWxlID09PSAxO1xufVxuZnVuY3Rpb24gaGFzU2NhbGUoX2EpIHtcbiAgICB2YXIgc2NhbGUgPSBfYS5zY2FsZSwgc2NhbGVYID0gX2Euc2NhbGVYLCBzY2FsZVkgPSBfYS5zY2FsZVk7XG4gICAgcmV0dXJuICghaXNJZGVudGl0eVNjYWxlKHNjYWxlKSB8fFxuICAgICAgICAhaXNJZGVudGl0eVNjYWxlKHNjYWxlWCkgfHxcbiAgICAgICAgIWlzSWRlbnRpdHlTY2FsZShzY2FsZVkpKTtcbn1cbmZ1bmN0aW9uIGhhc1RyYW5zZm9ybSh2YWx1ZXMpIHtcbiAgICByZXR1cm4gKGhhc1NjYWxlKHZhbHVlcykgfHxcbiAgICAgICAgaGFzVHJhbnNsYXRlKHZhbHVlcy54KSB8fFxuICAgICAgICBoYXNUcmFuc2xhdGUodmFsdWVzLnkpIHx8XG4gICAgICAgIHZhbHVlcy56IHx8XG4gICAgICAgIHZhbHVlcy5yb3RhdGUgfHxcbiAgICAgICAgdmFsdWVzLnJvdGF0ZVggfHxcbiAgICAgICAgdmFsdWVzLnJvdGF0ZVkpO1xufVxuZnVuY3Rpb24gaGFzVHJhbnNsYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlICE9PSBcIjAlXCI7XG59XG5cbmV4cG9ydCB7IGhhc1NjYWxlLCBoYXNUcmFuc2Zvcm0gfTtcbiIsImltcG9ydCB7IF9fcmVhZCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IG1peCB9IGZyb20gJ3BvcG1vdGlvbic7XG5pbXBvcnQgeyBoYXNUcmFuc2Zvcm0gfSBmcm9tICcuLi91dGlscy9oYXMtdHJhbnNmb3JtLm1qcyc7XG5cbi8qKlxuICogU2NhbGVzIGEgcG9pbnQgYmFzZWQgb24gYSBmYWN0b3IgYW5kIGFuIG9yaWdpblBvaW50XG4gKi9cbmZ1bmN0aW9uIHNjYWxlUG9pbnQocG9pbnQsIHNjYWxlLCBvcmlnaW5Qb2ludCkge1xuICAgIHZhciBkaXN0YW5jZUZyb21PcmlnaW4gPSBwb2ludCAtIG9yaWdpblBvaW50O1xuICAgIHZhciBzY2FsZWQgPSBzY2FsZSAqIGRpc3RhbmNlRnJvbU9yaWdpbjtcbiAgICByZXR1cm4gb3JpZ2luUG9pbnQgKyBzY2FsZWQ7XG59XG4vKipcbiAqIEFwcGxpZXMgYSB0cmFuc2xhdGUvc2NhbGUgZGVsdGEgdG8gYSBwb2ludFxuICovXG5mdW5jdGlvbiBhcHBseVBvaW50RGVsdGEocG9pbnQsIHRyYW5zbGF0ZSwgc2NhbGUsIG9yaWdpblBvaW50LCBib3hTY2FsZSkge1xuICAgIGlmIChib3hTY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHBvaW50ID0gc2NhbGVQb2ludChwb2ludCwgYm94U2NhbGUsIG9yaWdpblBvaW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHNjYWxlUG9pbnQocG9pbnQsIHNjYWxlLCBvcmlnaW5Qb2ludCkgKyB0cmFuc2xhdGU7XG59XG4vKipcbiAqIEFwcGxpZXMgYSB0cmFuc2xhdGUvc2NhbGUgZGVsdGEgdG8gYW4gYXhpc1xuICovXG5mdW5jdGlvbiBhcHBseUF4aXNEZWx0YShheGlzLCB0cmFuc2xhdGUsIHNjYWxlLCBvcmlnaW5Qb2ludCwgYm94U2NhbGUpIHtcbiAgICBpZiAodHJhbnNsYXRlID09PSB2b2lkIDApIHsgdHJhbnNsYXRlID0gMDsgfVxuICAgIGlmIChzY2FsZSA9PT0gdm9pZCAwKSB7IHNjYWxlID0gMTsgfVxuICAgIGF4aXMubWluID0gYXBwbHlQb2ludERlbHRhKGF4aXMubWluLCB0cmFuc2xhdGUsIHNjYWxlLCBvcmlnaW5Qb2ludCwgYm94U2NhbGUpO1xuICAgIGF4aXMubWF4ID0gYXBwbHlQb2ludERlbHRhKGF4aXMubWF4LCB0cmFuc2xhdGUsIHNjYWxlLCBvcmlnaW5Qb2ludCwgYm94U2NhbGUpO1xufVxuLyoqXG4gKiBBcHBsaWVzIGEgdHJhbnNsYXRlL3NjYWxlIGRlbHRhIHRvIGEgYm94XG4gKi9cbmZ1bmN0aW9uIGFwcGx5Qm94RGVsdGEoYm94LCBfYSkge1xuICAgIHZhciB4ID0gX2EueCwgeSA9IF9hLnk7XG4gICAgYXBwbHlBeGlzRGVsdGEoYm94LngsIHgudHJhbnNsYXRlLCB4LnNjYWxlLCB4Lm9yaWdpblBvaW50KTtcbiAgICBhcHBseUF4aXNEZWx0YShib3gueSwgeS50cmFuc2xhdGUsIHkuc2NhbGUsIHkub3JpZ2luUG9pbnQpO1xufVxuLyoqXG4gKiBBcHBseSBhIHRyZWUgb2YgZGVsdGFzIHRvIGEgYm94LiBXZSBkbyB0aGlzIHRvIGNhbGN1bGF0ZSB0aGUgZWZmZWN0IG9mIGFsbCB0aGUgdHJhbnNmb3Jtc1xuICogaW4gYSB0cmVlIHVwb24gb3VyIGJveCBiZWZvcmUgdGhlbiBjYWxjdWxhdGluZyBob3cgdG8gcHJvamVjdCBpdCBpbnRvIG91ciBkZXNpcmVkIHZpZXdwb3J0LXJlbGF0aXZlIGJveFxuICpcbiAqIFRoaXMgaXMgdGhlIGZpbmFsIG5lc3RlZCBsb29wIHdpdGhpbiB1cGRhdGVMYXlvdXREZWx0YSBmb3IgZnV0dXJlIHJlZmFjdG9yaW5nXG4gKi9cbmZ1bmN0aW9uIGFwcGx5VHJlZURlbHRhcyhib3gsIHRyZWVTY2FsZSwgdHJlZVBhdGgsIGlzU2hhcmVkVHJhbnNpdGlvbikge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKGlzU2hhcmVkVHJhbnNpdGlvbiA9PT0gdm9pZCAwKSB7IGlzU2hhcmVkVHJhbnNpdGlvbiA9IGZhbHNlOyB9XG4gICAgdmFyIHRyZWVMZW5ndGggPSB0cmVlUGF0aC5sZW5ndGg7XG4gICAgaWYgKCF0cmVlTGVuZ3RoKVxuICAgICAgICByZXR1cm47XG4gICAgLy8gUmVzZXQgdGhlIHRyZWVTY2FsZVxuICAgIHRyZWVTY2FsZS54ID0gdHJlZVNjYWxlLnkgPSAxO1xuICAgIHZhciBub2RlO1xuICAgIHZhciBkZWx0YTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyZWVMZW5ndGg7IGkrKykge1xuICAgICAgICBub2RlID0gdHJlZVBhdGhbaV07XG4gICAgICAgIGRlbHRhID0gbm9kZS5wcm9qZWN0aW9uRGVsdGE7XG4gICAgICAgIGlmICgoKF9iID0gKF9hID0gbm9kZS5pbnN0YW5jZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0eWxlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZGlzcGxheSkgPT09IFwiY29udGVudHNcIilcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoaXNTaGFyZWRUcmFuc2l0aW9uICYmXG4gICAgICAgICAgICBub2RlLm9wdGlvbnMubGF5b3V0U2Nyb2xsICYmXG4gICAgICAgICAgICBub2RlLnNjcm9sbCAmJlxuICAgICAgICAgICAgbm9kZSAhPT0gbm9kZS5yb290KSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1Cb3goYm94LCB7IHg6IC1ub2RlLnNjcm9sbC54LCB5OiAtbm9kZS5zY3JvbGwueSB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVsdGEpIHtcbiAgICAgICAgICAgIC8vIEluY29wb3JhdGUgZWFjaCBhbmNlc3RvcidzIHNjYWxlIGludG8gYSBjdWxtdWxhdGl2ZSB0cmVlU2NhbGUgZm9yIHRoaXMgY29tcG9uZW50XG4gICAgICAgICAgICB0cmVlU2NhbGUueCAqPSBkZWx0YS54LnNjYWxlO1xuICAgICAgICAgICAgdHJlZVNjYWxlLnkgKj0gZGVsdGEueS5zY2FsZTtcbiAgICAgICAgICAgIC8vIEFwcGx5IGVhY2ggYW5jZXN0b3IncyBjYWxjdWxhdGVkIGRlbHRhIGludG8gdGhpcyBjb21wb25lbnQncyByZWNvcmRlZCBsYXlvdXQgYm94XG4gICAgICAgICAgICBhcHBseUJveERlbHRhKGJveCwgZGVsdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1NoYXJlZFRyYW5zaXRpb24gJiYgaGFzVHJhbnNmb3JtKG5vZGUubGF0ZXN0VmFsdWVzKSkge1xuICAgICAgICAgICAgdHJhbnNmb3JtQm94KGJveCwgbm9kZS5sYXRlc3RWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdHJhbnNsYXRlQXhpcyhheGlzLCBkaXN0YW5jZSkge1xuICAgIGF4aXMubWluID0gYXhpcy5taW4gKyBkaXN0YW5jZTtcbiAgICBheGlzLm1heCA9IGF4aXMubWF4ICsgZGlzdGFuY2U7XG59XG4vKipcbiAqIEFwcGx5IGEgdHJhbnNmb3JtIHRvIGFuIGF4aXMgZnJvbSB0aGUgbGF0ZXN0IHJlc29sdmVkIG1vdGlvbiB2YWx1ZXMuXG4gKiBUaGlzIGZ1bmN0aW9uIGJhc2ljYWxseSBhY3RzIGFzIGEgYnJpZGdlIGJldHdlZW4gYSBmbGF0IG1vdGlvbiB2YWx1ZSBtYXBcbiAqIGFuZCBhcHBseUF4aXNEZWx0YVxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm1BeGlzKGF4aXMsIHRyYW5zZm9ybXMsIF9hKSB7XG4gICAgdmFyIF9iID0gX19yZWFkKF9hLCAzKSwga2V5ID0gX2JbMF0sIHNjYWxlS2V5ID0gX2JbMV0sIG9yaWdpbktleSA9IF9iWzJdO1xuICAgIHZhciBheGlzT3JpZ2luID0gdHJhbnNmb3Jtc1tvcmlnaW5LZXldICE9PSB1bmRlZmluZWQgPyB0cmFuc2Zvcm1zW29yaWdpbktleV0gOiAwLjU7XG4gICAgdmFyIG9yaWdpblBvaW50ID0gbWl4KGF4aXMubWluLCBheGlzLm1heCwgYXhpc09yaWdpbik7XG4gICAgLy8gQXBwbHkgdGhlIGF4aXMgZGVsdGEgdG8gdGhlIGZpbmFsIGF4aXNcbiAgICBhcHBseUF4aXNEZWx0YShheGlzLCB0cmFuc2Zvcm1zW2tleV0sIHRyYW5zZm9ybXNbc2NhbGVLZXldLCBvcmlnaW5Qb2ludCwgdHJhbnNmb3Jtcy5zY2FsZSk7XG59XG4vKipcbiAqIFRoZSBuYW1lcyBvZiB0aGUgbW90aW9uIHZhbHVlcyB3ZSB3YW50IHRvIGFwcGx5IGFzIHRyYW5zbGF0aW9uLCBzY2FsZSBhbmQgb3JpZ2luLlxuICovXG52YXIgeEtleXMgPSBbXCJ4XCIsIFwic2NhbGVYXCIsIFwib3JpZ2luWFwiXTtcbnZhciB5S2V5cyA9IFtcInlcIiwgXCJzY2FsZVlcIiwgXCJvcmlnaW5ZXCJdO1xuLyoqXG4gKiBBcHBseSBhIHRyYW5zZm9ybSB0byBhIGJveCBmcm9tIHRoZSBsYXRlc3QgcmVzb2x2ZWQgbW90aW9uIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtQm94KGJveCwgdHJhbnNmb3JtKSB7XG4gICAgdHJhbnNmb3JtQXhpcyhib3gueCwgdHJhbnNmb3JtLCB4S2V5cyk7XG4gICAgdHJhbnNmb3JtQXhpcyhib3gueSwgdHJhbnNmb3JtLCB5S2V5cyk7XG59XG5cbmV4cG9ydCB7IGFwcGx5QXhpc0RlbHRhLCBhcHBseUJveERlbHRhLCBhcHBseVBvaW50RGVsdGEsIGFwcGx5VHJlZURlbHRhcywgc2NhbGVQb2ludCwgdHJhbnNmb3JtQXhpcywgdHJhbnNmb3JtQm94LCB0cmFuc2xhdGVBeGlzIH07XG4iLCJpbXBvcnQgeyBjb252ZXJ0Qm91bmRpbmdCb3hUb0JveCwgdHJhbnNmb3JtQm94UG9pbnRzIH0gZnJvbSAnLi4vZ2VvbWV0cnkvY29udmVyc2lvbi5tanMnO1xuaW1wb3J0IHsgdHJhbnNsYXRlQXhpcyB9IGZyb20gJy4uL2dlb21ldHJ5L2RlbHRhLWFwcGx5Lm1qcyc7XG5cbmZ1bmN0aW9uIG1lYXN1cmVWaWV3cG9ydEJveChpbnN0YW5jZSwgdHJhbnNmb3JtUG9pbnQpIHtcbiAgICByZXR1cm4gY29udmVydEJvdW5kaW5nQm94VG9Cb3godHJhbnNmb3JtQm94UG9pbnRzKGluc3RhbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCB0cmFuc2Zvcm1Qb2ludCkpO1xufVxuZnVuY3Rpb24gbWVhc3VyZVBhZ2VCb3goZWxlbWVudCwgcm9vdFByb2plY3Rpb25Ob2RlLCB0cmFuc2Zvcm1QYWdlUG9pbnQpIHtcbiAgICB2YXIgdmlld3BvcnRCb3ggPSBtZWFzdXJlVmlld3BvcnRCb3goZWxlbWVudCwgdHJhbnNmb3JtUGFnZVBvaW50KTtcbiAgICB2YXIgc2Nyb2xsID0gcm9vdFByb2plY3Rpb25Ob2RlLnNjcm9sbDtcbiAgICBpZiAoc2Nyb2xsKSB7XG4gICAgICAgIHRyYW5zbGF0ZUF4aXModmlld3BvcnRCb3gueCwgc2Nyb2xsLngpO1xuICAgICAgICB0cmFuc2xhdGVBeGlzKHZpZXdwb3J0Qm94LnksIHNjcm9sbC55KTtcbiAgICB9XG4gICAgcmV0dXJuIHZpZXdwb3J0Qm94O1xufVxuXG5leHBvcnQgeyBtZWFzdXJlUGFnZUJveCwgbWVhc3VyZVZpZXdwb3J0Qm94IH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGludmFyaWFudCB9IGZyb20gJ2hleS1saXN0ZW4nO1xuaW1wb3J0IHsgUGFuU2Vzc2lvbiB9IGZyb20gJy4uL1BhblNlc3Npb24ubWpzJztcbmltcG9ydCB7IGdldEdsb2JhbExvY2sgfSBmcm9tICcuL3V0aWxzL2xvY2subWpzJztcbmltcG9ydCB7IGlzUmVmT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaXMtcmVmLW9iamVjdC5tanMnO1xuaW1wb3J0IHsgYWRkUG9pbnRlckV2ZW50IH0gZnJvbSAnLi4vLi4vZXZlbnRzL3VzZS1wb2ludGVyLWV2ZW50Lm1qcyc7XG5pbXBvcnQgeyBhcHBseUNvbnN0cmFpbnRzLCBjYWxjUmVsYXRpdmVDb25zdHJhaW50cywgcmVzb2x2ZURyYWdFbGFzdGljLCByZWJhc2VBeGlzQ29uc3RyYWludHMsIGNhbGNWaWV3cG9ydENvbnN0cmFpbnRzLCBjYWxjT3JpZ2luLCBkZWZhdWx0RWxhc3RpYyB9IGZyb20gJy4vdXRpbHMvY29uc3RyYWludHMubWpzJztcbmltcG9ydCB7IEFuaW1hdGlvblR5cGUgfSBmcm9tICcuLi8uLi9yZW5kZXIvdXRpbHMvdHlwZXMubWpzJztcbmltcG9ydCB7IGNyZWF0ZUJveCB9IGZyb20gJy4uLy4uL3Byb2plY3Rpb24vZ2VvbWV0cnkvbW9kZWxzLm1qcyc7XG5pbXBvcnQgeyBlYWNoQXhpcyB9IGZyb20gJy4uLy4uL3Byb2plY3Rpb24vdXRpbHMvZWFjaC1heGlzLm1qcyc7XG5pbXBvcnQgeyBtZWFzdXJlUGFnZUJveCB9IGZyb20gJy4uLy4uL3Byb2plY3Rpb24vdXRpbHMvbWVhc3VyZS5tanMnO1xuaW1wb3J0IHsgZXh0cmFjdEV2ZW50SW5mbyB9IGZyb20gJy4uLy4uL2V2ZW50cy9ldmVudC1pbmZvLm1qcyc7XG5pbXBvcnQgeyBzdGFydEFuaW1hdGlvbiB9IGZyb20gJy4uLy4uL2FuaW1hdGlvbi91dGlscy90cmFuc2l0aW9ucy5tanMnO1xuaW1wb3J0IHsgY29udmVydEJveFRvQm91bmRpbmdCb3gsIGNvbnZlcnRCb3VuZGluZ0JveFRvQm94IH0gZnJvbSAnLi4vLi4vcHJvamVjdGlvbi9nZW9tZXRyeS9jb252ZXJzaW9uLm1qcyc7XG5pbXBvcnQgeyBhZGREb21FdmVudCB9IGZyb20gJy4uLy4uL2V2ZW50cy91c2UtZG9tLWV2ZW50Lm1qcyc7XG5pbXBvcnQgeyBtaXggfSBmcm9tICdwb3Btb3Rpb24nO1xuaW1wb3J0IHsgcGVyY2VudCB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcbmltcG9ydCB7IGNhbGNMZW5ndGggfSBmcm9tICcuLi8uLi9wcm9qZWN0aW9uL2dlb21ldHJ5L2RlbHRhLWNhbGMubWpzJztcblxudmFyIGVsZW1lbnREcmFnQ29udHJvbHMgPSBuZXcgV2Vha01hcCgpO1xuLyoqXG4gKlxuICovXG4vLyBsZXQgbGF0ZXN0UG9pbnRlckV2ZW50OiBBbnlQb2ludGVyRXZlbnRcbnZhciBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHModmlzdWFsRWxlbWVudCkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgZHJhZyBnZXN0dXJlIGxvY2ssIGVuc3VyaW5nIG9ubHkgb25lIGNvbXBvbmVudFxuICAgICAgICAvLyBjYW4gXCJjYXB0dXJlXCIgdGhlIGRyYWcgb2Ygb25lIG9yIGJvdGggYXhlcy5cbiAgICAgICAgLy8gVE9ETzogTG9vayBpbnRvIG1vdmluZyB0aGlzIGludG8gcGFuc2Vzc2lvbj9cbiAgICAgICAgdGhpcy5vcGVuR2xvYmFsTG9jayA9IG51bGw7XG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmN1cnJlbnREaXJlY3Rpb24gPSBudWxsO1xuICAgICAgICB0aGlzLm9yaWdpblBvaW50ID0geyB4OiAwLCB5OiAwIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgcGVybWl0dGVkIGJvdW5kYXJpZXMgb2YgdHJhdmVsLCBpbiBwaXhlbHMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNvbnN0cmFpbnRzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzTXV0YXRlZENvbnN0cmFpbnRzID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgcGVyLWF4aXMgcmVzb2x2ZWQgZWxhc3RpYyB2YWx1ZXMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmVsYXN0aWMgPSBjcmVhdGVCb3goKTtcbiAgICAgICAgdGhpcy52aXN1YWxFbGVtZW50ID0gdmlzdWFsRWxlbWVudDtcbiAgICB9XG4gICAgVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAob3JpZ2luRXZlbnQsIF9hKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYiA9IF9hID09PSB2b2lkIDAgPyB7fSA6IF9hLCBfYyA9IF9iLnNuYXBUb0N1cnNvciwgc25hcFRvQ3Vyc29yID0gX2MgPT09IHZvaWQgMCA/IGZhbHNlIDogX2M7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEb24ndCBzdGFydCBkcmFnZ2luZyBpZiB0aGlzIGNvbXBvbmVudCBpcyBleGl0aW5nXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodGhpcy52aXN1YWxFbGVtZW50LmlzUHJlc2VudCA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBvblNlc3Npb25TdGFydCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgLy8gU3RvcCBhbnkgYW5pbWF0aW9ucyBvbiBib3RoIGF4aXMgdmFsdWVzIGltbWVkaWF0ZWx5LiBUaGlzIGFsbG93cyB0aGUgdXNlciB0byB0aHJvdyBhbmQgY2F0Y2hcbiAgICAgICAgICAgIC8vIHRoZSBjb21wb25lbnQuXG4gICAgICAgICAgICBfdGhpcy5zdG9wQW5pbWF0aW9uKCk7XG4gICAgICAgICAgICBpZiAoc25hcFRvQ3Vyc29yKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuc25hcFRvQ3Vyc29yKGV4dHJhY3RFdmVudEluZm8oZXZlbnQsIFwicGFnZVwiKS5wb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvblN0YXJ0ID0gZnVuY3Rpb24gKGV2ZW50LCBpbmZvKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGdyYWIgdGhlIGdsb2JhbCBkcmFnIGdlc3R1cmUgbG9jayAtIG1heWJlIG1ha2UgdGhpcyBwYXJ0IG9mIFBhblNlc3Npb25cbiAgICAgICAgICAgIHZhciBfYiA9IF90aGlzLmdldFByb3BzKCksIGRyYWcgPSBfYi5kcmFnLCBkcmFnUHJvcGFnYXRpb24gPSBfYi5kcmFnUHJvcGFnYXRpb24sIG9uRHJhZ1N0YXJ0ID0gX2Iub25EcmFnU3RhcnQ7XG4gICAgICAgICAgICBpZiAoZHJhZyAmJiAhZHJhZ1Byb3BhZ2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLm9wZW5HbG9iYWxMb2NrKVxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5vcGVuR2xvYmFsTG9jaygpO1xuICAgICAgICAgICAgICAgIF90aGlzLm9wZW5HbG9iYWxMb2NrID0gZ2V0R2xvYmFsTG9jayhkcmFnKTtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkb24gJ3QgaGF2ZSB0aGUgbG9jaywgZG9uJ3Qgc3RhcnQgZHJhZ2dpbmdcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLm9wZW5HbG9iYWxMb2NrKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnREaXJlY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgX3RoaXMucmVzb2x2ZUNvbnN0cmFpbnRzKCk7XG4gICAgICAgICAgICBpZiAoX3RoaXMudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uLmlzQW5pbWF0aW9uQmxvY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmVjb3JkIGdlc3R1cmUgb3JpZ2luXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGVhY2hBeGlzKGZ1bmN0aW9uIChheGlzKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IF90aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShheGlzKS5nZXQoKSB8fCAwO1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIElmIHRoZSBNb3Rpb25WYWx1ZSBpcyBhIHBlcmNlbnRhZ2UgdmFsdWUgY29udmVydCB0byBweFxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGlmIChwZXJjZW50LnRlc3QoY3VycmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lYXN1cmVkQXhpcyA9IChfYiA9IChfYSA9IF90aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxheW91dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmFjdHVhbFtheGlzXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lYXN1cmVkQXhpcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aF8xID0gY2FsY0xlbmd0aChtZWFzdXJlZEF4aXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGxlbmd0aF8xICogKHBhcnNlRmxvYXQoY3VycmVudCkgLyAxMDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF90aGlzLm9yaWdpblBvaW50W2F4aXNdID0gY3VycmVudDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gRmlyZSBvbkRyYWdTdGFydCBldmVudFxuICAgICAgICAgICAgb25EcmFnU3RhcnQgPT09IG51bGwgfHwgb25EcmFnU3RhcnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRHJhZ1N0YXJ0KGV2ZW50LCBpbmZvKTtcbiAgICAgICAgICAgIChfYSA9IF90aGlzLnZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZXRBY3RpdmUoQW5pbWF0aW9uVHlwZS5EcmFnLCB0cnVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uTW92ZSA9IGZ1bmN0aW9uIChldmVudCwgaW5mbykge1xuICAgICAgICAgICAgLy8gbGF0ZXN0UG9pbnRlckV2ZW50ID0gZXZlbnRcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLmdldFByb3BzKCksIGRyYWdQcm9wYWdhdGlvbiA9IF9hLmRyYWdQcm9wYWdhdGlvbiwgZHJhZ0RpcmVjdGlvbkxvY2sgPSBfYS5kcmFnRGlyZWN0aW9uTG9jaywgb25EaXJlY3Rpb25Mb2NrID0gX2Eub25EaXJlY3Rpb25Mb2NrLCBvbkRyYWcgPSBfYS5vbkRyYWc7XG4gICAgICAgICAgICAvLyBJZiB3ZSBkaWRuJ3Qgc3VjY2Vzc2Z1bGx5IHJlY2VpdmUgdGhlIGdlc3R1cmUgbG9jaywgZWFybHkgcmV0dXJuLlxuICAgICAgICAgICAgaWYgKCFkcmFnUHJvcGFnYXRpb24gJiYgIV90aGlzLm9wZW5HbG9iYWxMb2NrKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSBpbmZvLm9mZnNldDtcbiAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gZGV0ZWN0IGRyYWcgZGlyZWN0aW9uIGlmIGRpcmVjdGlvbkxvY2sgaXMgdHJ1ZVxuICAgICAgICAgICAgaWYgKGRyYWdEaXJlY3Rpb25Mb2NrICYmIF90aGlzLmN1cnJlbnREaXJlY3Rpb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5jdXJyZW50RGlyZWN0aW9uID0gZ2V0Q3VycmVudERpcmVjdGlvbihvZmZzZXQpO1xuICAgICAgICAgICAgICAgIC8vIElmIHdlJ3ZlIHN1Y2Nlc3NmdWxseSBzZXQgYSBkaXJlY3Rpb24sIG5vdGlmeSBsaXN0ZW5lclxuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5jdXJyZW50RGlyZWN0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRGlyZWN0aW9uTG9jayA9PT0gbnVsbCB8fCBvbkRpcmVjdGlvbkxvY2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRGlyZWN0aW9uTG9jayhfdGhpcy5jdXJyZW50RGlyZWN0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVXBkYXRlIGVhY2ggcG9pbnQgd2l0aCB0aGUgbGF0ZXN0IHBvc2l0aW9uXG4gICAgICAgICAgICBfdGhpcy51cGRhdGVBeGlzKFwieFwiLCBpbmZvLnBvaW50LCBvZmZzZXQpO1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlQXhpcyhcInlcIiwgaW5mby5wb2ludCwgb2Zmc2V0KTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWRlYWxseSB3ZSB3b3VsZCBsZWF2ZSB0aGUgcmVuZGVyZXIgdG8gZmlyZSBuYXR1cmFsbHkgYXQgdGhlIGVuZCBvZlxuICAgICAgICAgICAgICogdGhpcyBmcmFtZSBidXQgaWYgdGhlIGVsZW1lbnQgaXMgYWJvdXQgdG8gY2hhbmdlIGxheW91dCBhcyB0aGUgcmVzdWx0XG4gICAgICAgICAgICAgKiBvZiBhIHJlLXJlbmRlciB3ZSB3YW50IHRvIGVuc3VyZSB0aGUgYnJvd3NlciBjYW4gcmVhZCB0aGUgbGF0ZXN0XG4gICAgICAgICAgICAgKiBib3VuZGluZyBib3ggdG8gZW5zdXJlIHRoZSBwb2ludGVyIGFuZCBlbGVtZW50IGRvbid0IGZhbGwgb3V0IG9mIHN5bmMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIF90aGlzLnZpc3VhbEVsZW1lbnQuc3luY1JlbmRlcigpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGlzIG11c3QgZmlyZSBhZnRlciB0aGUgc3luY1JlbmRlciBjYWxsIGFzIGl0IG1pZ2h0IHRyaWdnZXIgYSBzdGF0ZVxuICAgICAgICAgICAgICogY2hhbmdlIHdoaWNoIGl0c2VsZiBtaWdodCB0cmlnZ2VyIGEgbGF5b3V0IHVwZGF0ZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgb25EcmFnID09PSBudWxsIHx8IG9uRHJhZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25EcmFnKGV2ZW50LCBpbmZvKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uU2Vzc2lvbkVuZCA9IGZ1bmN0aW9uIChldmVudCwgaW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLnN0b3AoZXZlbnQsIGluZm8pO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnBhblNlc3Npb24gPSBuZXcgUGFuU2Vzc2lvbihvcmlnaW5FdmVudCwge1xuICAgICAgICAgICAgb25TZXNzaW9uU3RhcnQ6IG9uU2Vzc2lvblN0YXJ0LFxuICAgICAgICAgICAgb25TdGFydDogb25TdGFydCxcbiAgICAgICAgICAgIG9uTW92ZTogb25Nb3ZlLFxuICAgICAgICAgICAgb25TZXNzaW9uRW5kOiBvblNlc3Npb25FbmQsXG4gICAgICAgIH0sIHsgdHJhbnNmb3JtUGFnZVBvaW50OiB0aGlzLnZpc3VhbEVsZW1lbnQuZ2V0VHJhbnNmb3JtUGFnZVBvaW50KCkgfSk7XG4gICAgfTtcbiAgICBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKGV2ZW50LCBpbmZvKSB7XG4gICAgICAgIHZhciBpc0RyYWdnaW5nID0gdGhpcy5pc0RyYWdnaW5nO1xuICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICBpZiAoIWlzRHJhZ2dpbmcpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciB2ZWxvY2l0eSA9IGluZm8udmVsb2NpdHk7XG4gICAgICAgIHRoaXMuc3RhcnRBbmltYXRpb24odmVsb2NpdHkpO1xuICAgICAgICB2YXIgb25EcmFnRW5kID0gdGhpcy5nZXRQcm9wcygpLm9uRHJhZ0VuZDtcbiAgICAgICAgb25EcmFnRW5kID09PSBudWxsIHx8IG9uRHJhZ0VuZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25EcmFnRW5kKGV2ZW50LCBpbmZvKTtcbiAgICB9O1xuICAgIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy52aXN1YWxFbGVtZW50LnByb2plY3Rpb24uaXNBbmltYXRpb25CbG9ja2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgKF9hID0gdGhpcy5wYW5TZXNzaW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZW5kKCk7XG4gICAgICAgIHRoaXMucGFuU2Vzc2lvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGRyYWdQcm9wYWdhdGlvbiA9IHRoaXMuZ2V0UHJvcHMoKS5kcmFnUHJvcGFnYXRpb247XG4gICAgICAgIGlmICghZHJhZ1Byb3BhZ2F0aW9uICYmIHRoaXMub3Blbkdsb2JhbExvY2spIHtcbiAgICAgICAgICAgIHRoaXMub3Blbkdsb2JhbExvY2soKTtcbiAgICAgICAgICAgIHRoaXMub3Blbkdsb2JhbExvY2sgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIChfYiA9IHRoaXMudmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnNldEFjdGl2ZShBbmltYXRpb25UeXBlLkRyYWcsIGZhbHNlKTtcbiAgICB9O1xuICAgIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMucHJvdG90eXBlLnVwZGF0ZUF4aXMgPSBmdW5jdGlvbiAoYXhpcywgX3BvaW50LCBvZmZzZXQpIHtcbiAgICAgICAgdmFyIGRyYWcgPSB0aGlzLmdldFByb3BzKCkuZHJhZztcbiAgICAgICAgLy8gSWYgd2UncmUgbm90IGRyYWdnaW5nIHRoaXMgYXhpcywgZG8gYW4gZWFybHkgcmV0dXJuLlxuICAgICAgICBpZiAoIW9mZnNldCB8fCAhc2hvdWxkRHJhZyhheGlzLCBkcmFnLCB0aGlzLmN1cnJlbnREaXJlY3Rpb24pKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgYXhpc1ZhbHVlID0gdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoYXhpcyk7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5vcmlnaW5Qb2ludFtheGlzXSArIG9mZnNldFtheGlzXTtcbiAgICAgICAgLy8gQXBwbHkgY29uc3RyYWludHNcbiAgICAgICAgaWYgKHRoaXMuY29uc3RyYWludHMgJiYgdGhpcy5jb25zdHJhaW50c1theGlzXSkge1xuICAgICAgICAgICAgbmV4dCA9IGFwcGx5Q29uc3RyYWludHMobmV4dCwgdGhpcy5jb25zdHJhaW50c1theGlzXSwgdGhpcy5lbGFzdGljW2F4aXNdKTtcbiAgICAgICAgfVxuICAgICAgICBheGlzVmFsdWUuc2V0KG5leHQpO1xuICAgIH07XG4gICAgVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5wcm90b3R5cGUucmVzb2x2ZUNvbnN0cmFpbnRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLmdldFByb3BzKCksIGRyYWdDb25zdHJhaW50cyA9IF9hLmRyYWdDb25zdHJhaW50cywgZHJhZ0VsYXN0aWMgPSBfYS5kcmFnRWxhc3RpYztcbiAgICAgICAgdmFyIGxheW91dCA9ICh0aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbiB8fCB7fSkubGF5b3V0O1xuICAgICAgICB2YXIgcHJldkNvbnN0cmFpbnRzID0gdGhpcy5jb25zdHJhaW50cztcbiAgICAgICAgaWYgKGRyYWdDb25zdHJhaW50cyAmJiBpc1JlZk9iamVjdChkcmFnQ29uc3RyYWludHMpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29uc3RyYWludHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnN0cmFpbnRzID0gdGhpcy5yZXNvbHZlUmVmQ29uc3RyYWludHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkcmFnQ29uc3RyYWludHMgJiYgbGF5b3V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdHJhaW50cyA9IGNhbGNSZWxhdGl2ZUNvbnN0cmFpbnRzKGxheW91dC5hY3R1YWwsIGRyYWdDb25zdHJhaW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnN0cmFpbnRzID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbGFzdGljID0gcmVzb2x2ZURyYWdFbGFzdGljKGRyYWdFbGFzdGljKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHdlJ3JlIG91dHB1dHRpbmcgdG8gZXh0ZXJuYWwgTW90aW9uVmFsdWVzLCB3ZSB3YW50IHRvIHJlYmFzZSB0aGUgbWVhc3VyZWQgY29uc3RyYWludHNcbiAgICAgICAgICogZnJvbSB2aWV3cG9ydC1yZWxhdGl2ZSB0byBjb21wb25lbnQtcmVsYXRpdmUuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAocHJldkNvbnN0cmFpbnRzICE9PSB0aGlzLmNvbnN0cmFpbnRzICYmXG4gICAgICAgICAgICBsYXlvdXQgJiZcbiAgICAgICAgICAgIHRoaXMuY29uc3RyYWludHMgJiZcbiAgICAgICAgICAgICF0aGlzLmhhc011dGF0ZWRDb25zdHJhaW50cykge1xuICAgICAgICAgICAgZWFjaEF4aXMoZnVuY3Rpb24gKGF4aXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuZ2V0QXhpc01vdGlvblZhbHVlKGF4aXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmNvbnN0cmFpbnRzW2F4aXNdID0gcmViYXNlQXhpc0NvbnN0cmFpbnRzKGxheW91dC5hY3R1YWxbYXhpc10sIF90aGlzLmNvbnN0cmFpbnRzW2F4aXNdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5wcm90b3R5cGUucmVzb2x2ZVJlZkNvbnN0cmFpbnRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLmdldFByb3BzKCksIGNvbnN0cmFpbnRzID0gX2EuZHJhZ0NvbnN0cmFpbnRzLCBvbk1lYXN1cmVEcmFnQ29uc3RyYWludHMgPSBfYS5vbk1lYXN1cmVEcmFnQ29uc3RyYWludHM7XG4gICAgICAgIGlmICghY29uc3RyYWludHMgfHwgIWlzUmVmT2JqZWN0KGNvbnN0cmFpbnRzKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGNvbnN0cmFpbnRzRWxlbWVudCA9IGNvbnN0cmFpbnRzLmN1cnJlbnQ7XG4gICAgICAgIGludmFyaWFudChjb25zdHJhaW50c0VsZW1lbnQgIT09IG51bGwsIFwiSWYgYGRyYWdDb25zdHJhaW50c2AgaXMgc2V0IGFzIGEgUmVhY3QgcmVmLCB0aGF0IHJlZiBtdXN0IGJlIHBhc3NlZCB0byBhbm90aGVyIGNvbXBvbmVudCdzIGByZWZgIHByb3AuXCIpO1xuICAgICAgICB2YXIgcHJvamVjdGlvbiA9IHRoaXMudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uO1xuICAgICAgICAvLyBUT0RPXG4gICAgICAgIGlmICghcHJvamVjdGlvbiB8fCAhcHJvamVjdGlvbi5sYXlvdXQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBjb25zdHJhaW50c0JveCA9IG1lYXN1cmVQYWdlQm94KGNvbnN0cmFpbnRzRWxlbWVudCwgcHJvamVjdGlvbi5yb290LCB0aGlzLnZpc3VhbEVsZW1lbnQuZ2V0VHJhbnNmb3JtUGFnZVBvaW50KCkpO1xuICAgICAgICB2YXIgbWVhc3VyZWRDb25zdHJhaW50cyA9IGNhbGNWaWV3cG9ydENvbnN0cmFpbnRzKHByb2plY3Rpb24ubGF5b3V0LmFjdHVhbCwgY29uc3RyYWludHNCb3gpO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlcmUncyBhbiBvbk1lYXN1cmVEcmFnQ29uc3RyYWludHMgbGlzdGVuZXIgd2UgY2FsbCBpdCBhbmRcbiAgICAgICAgICogaWYgZGlmZmVyZW50IGNvbnN0cmFpbnRzIGFyZSByZXR1cm5lZCwgc2V0IGNvbnN0cmFpbnRzIHRvIHRoYXRcbiAgICAgICAgICovXG4gICAgICAgIGlmIChvbk1lYXN1cmVEcmFnQ29uc3RyYWludHMpIHtcbiAgICAgICAgICAgIHZhciB1c2VyQ29uc3RyYWludHMgPSBvbk1lYXN1cmVEcmFnQ29uc3RyYWludHMoY29udmVydEJveFRvQm91bmRpbmdCb3gobWVhc3VyZWRDb25zdHJhaW50cykpO1xuICAgICAgICAgICAgdGhpcy5oYXNNdXRhdGVkQ29uc3RyYWludHMgPSAhIXVzZXJDb25zdHJhaW50cztcbiAgICAgICAgICAgIGlmICh1c2VyQ29uc3RyYWludHMpIHtcbiAgICAgICAgICAgICAgICBtZWFzdXJlZENvbnN0cmFpbnRzID0gY29udmVydEJvdW5kaW5nQm94VG9Cb3godXNlckNvbnN0cmFpbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVhc3VyZWRDb25zdHJhaW50cztcbiAgICB9O1xuICAgIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMucHJvdG90eXBlLnN0YXJ0QW5pbWF0aW9uID0gZnVuY3Rpb24gKHZlbG9jaXR5KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHRoaXMuZ2V0UHJvcHMoKSwgZHJhZyA9IF9hLmRyYWcsIGRyYWdNb21lbnR1bSA9IF9hLmRyYWdNb21lbnR1bSwgZHJhZ0VsYXN0aWMgPSBfYS5kcmFnRWxhc3RpYywgZHJhZ1RyYW5zaXRpb24gPSBfYS5kcmFnVHJhbnNpdGlvbiwgZHJhZ1NuYXBUb09yaWdpbiA9IF9hLmRyYWdTbmFwVG9PcmlnaW4sIG9uRHJhZ1RyYW5zaXRpb25FbmQgPSBfYS5vbkRyYWdUcmFuc2l0aW9uRW5kO1xuICAgICAgICB2YXIgY29uc3RyYWludHMgPSB0aGlzLmNvbnN0cmFpbnRzIHx8IHt9O1xuICAgICAgICB2YXIgbW9tZW50dW1BbmltYXRpb25zID0gZWFjaEF4aXMoZnVuY3Rpb24gKGF4aXMpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICghc2hvdWxkRHJhZyhheGlzLCBkcmFnLCBfdGhpcy5jdXJyZW50RGlyZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB0cmFuc2l0aW9uID0gKF9hID0gY29uc3RyYWludHMgPT09IG51bGwgfHwgY29uc3RyYWludHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbnN0cmFpbnRzW2F4aXNdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fTtcbiAgICAgICAgICAgIGlmIChkcmFnU25hcFRvT3JpZ2luKVxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb24gPSB7IG1pbjogMCwgbWF4OiAwIH07XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIE92ZXJkYW1wIHRoZSBib3VuZGFyeSBzcHJpbmcgaWYgYGRyYWdFbGFzdGljYCBpcyBkaXNhYmxlZC4gVGhlcmUncyBzdGlsbCBhIGZyYW1lXG4gICAgICAgICAgICAgKiBvZiBzcHJpbmcgYW5pbWF0aW9ucyBzbyB3ZSBzaG91bGQgbG9vayBpbnRvIGFkZGluZyBhIGRpc2FibGUgc3ByaW5nIG9wdGlvbiB0byBgaW5lcnRpYWAuXG4gICAgICAgICAgICAgKiBXZSBjb3VsZCBkbyBzb21ldGhpbmcgaGVyZSB3aGVyZSB3ZSBhZmZlY3QgdGhlIGBib3VuY2VTdGlmZm5lc3NgIGFuZCBgYm91bmNlRGFtcGluZ2BcbiAgICAgICAgICAgICAqIHVzaW5nIHRoZSB2YWx1ZSBvZiBgZHJhZ0VsYXN0aWNgLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXIgYm91bmNlU3RpZmZuZXNzID0gZHJhZ0VsYXN0aWMgPyAyMDAgOiAxMDAwMDAwO1xuICAgICAgICAgICAgdmFyIGJvdW5jZURhbXBpbmcgPSBkcmFnRWxhc3RpYyA/IDQwIDogMTAwMDAwMDA7XG4gICAgICAgICAgICB2YXIgaW5lcnRpYSA9IF9fYXNzaWduKF9fYXNzaWduKHsgdHlwZTogXCJpbmVydGlhXCIsIHZlbG9jaXR5OiBkcmFnTW9tZW50dW0gPyB2ZWxvY2l0eVtheGlzXSA6IDAsIGJvdW5jZVN0aWZmbmVzczogYm91bmNlU3RpZmZuZXNzLCBib3VuY2VEYW1waW5nOiBib3VuY2VEYW1waW5nLCB0aW1lQ29uc3RhbnQ6IDc1MCwgcmVzdERlbHRhOiAxLCByZXN0U3BlZWQ6IDEwIH0sIGRyYWdUcmFuc2l0aW9uKSwgdHJhbnNpdGlvbik7XG4gICAgICAgICAgICAvLyBJZiB3ZSdyZSBub3QgYW5pbWF0aW5nIG9uIGFuIGV4dGVybmFsbHktcHJvdmlkZWQgYE1vdGlvblZhbHVlYCB3ZSBjYW4gdXNlIHRoZVxuICAgICAgICAgICAgLy8gY29tcG9uZW50J3MgYW5pbWF0aW9uIGNvbnRyb2xzIHdoaWNoIHdpbGwgaGFuZGxlIGludGVyYWN0aW9ucyB3aXRoIHdoaWxlSG92ZXIgKGV0YyksXG4gICAgICAgICAgICAvLyBvdGhlcndpc2Ugd2UganVzdCBoYXZlIHRvIGFuaW1hdGUgdGhlIGBNb3Rpb25WYWx1ZWAgaXRzZWxmLlxuICAgICAgICAgICAgcmV0dXJuIF90aGlzLnN0YXJ0QXhpc1ZhbHVlQW5pbWF0aW9uKGF4aXMsIGluZXJ0aWEpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gUnVuIGFsbCBhbmltYXRpb25zIGFuZCB0aGVuIHJlc29sdmUgdGhlIG5ldyBkcmFnIGNvbnN0cmFpbnRzLlxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwobW9tZW50dW1BbmltYXRpb25zKS50aGVuKG9uRHJhZ1RyYW5zaXRpb25FbmQpO1xuICAgIH07XG4gICAgVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5wcm90b3R5cGUuc3RhcnRBeGlzVmFsdWVBbmltYXRpb24gPSBmdW5jdGlvbiAoYXhpcywgdHJhbnNpdGlvbikge1xuICAgICAgICB2YXIgYXhpc1ZhbHVlID0gdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoYXhpcyk7XG4gICAgICAgIHJldHVybiBzdGFydEFuaW1hdGlvbihheGlzLCBheGlzVmFsdWUsIDAsIHRyYW5zaXRpb24pO1xuICAgIH07XG4gICAgVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5wcm90b3R5cGUuc3RvcEFuaW1hdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZWFjaEF4aXMoZnVuY3Rpb24gKGF4aXMpIHsgcmV0dXJuIF90aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShheGlzKS5zdG9wKCk7IH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogRHJhZyB3b3JrcyBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gd2hpY2ggcHJvcHMgYXJlIHByb3ZpZGVkLlxuICAgICAqXG4gICAgICogLSBJZiBfZHJhZ1ggYW5kIF9kcmFnWSBhcmUgcHJvdmlkZWQsIHdlIG91dHB1dCB0aGUgZ2VzdHVyZSBkZWx0YSBkaXJlY3RseSB0byB0aG9zZSBtb3Rpb24gdmFsdWVzLlxuICAgICAqIC0gT3RoZXJ3aXNlLCB3ZSBhcHBseSB0aGUgZGVsdGEgdG8gdGhlIHgveSBtb3Rpb24gdmFsdWVzLlxuICAgICAqL1xuICAgIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMucHJvdG90eXBlLmdldEF4aXNNb3Rpb25WYWx1ZSA9IGZ1bmN0aW9uIChheGlzKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHZhciBkcmFnS2V5ID0gXCJfZHJhZ1wiICsgYXhpcy50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB2YXIgZXh0ZXJuYWxNb3Rpb25WYWx1ZSA9IHRoaXMudmlzdWFsRWxlbWVudC5nZXRQcm9wcygpW2RyYWdLZXldO1xuICAgICAgICByZXR1cm4gZXh0ZXJuYWxNb3Rpb25WYWx1ZVxuICAgICAgICAgICAgPyBleHRlcm5hbE1vdGlvblZhbHVlXG4gICAgICAgICAgICA6IHRoaXMudmlzdWFsRWxlbWVudC5nZXRWYWx1ZShheGlzLCAoX2IgPSAoX2EgPSB0aGlzLnZpc3VhbEVsZW1lbnQuZ2V0UHJvcHMoKS5pbml0aWFsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbYXhpc10pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDApO1xuICAgIH07XG4gICAgVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5wcm90b3R5cGUuc25hcFRvQ3Vyc29yID0gZnVuY3Rpb24gKHBvaW50KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVhY2hBeGlzKGZ1bmN0aW9uIChheGlzKSB7XG4gICAgICAgICAgICB2YXIgZHJhZyA9IF90aGlzLmdldFByb3BzKCkuZHJhZztcbiAgICAgICAgICAgIC8vIElmIHdlJ3JlIG5vdCBkcmFnZ2luZyB0aGlzIGF4aXMsIGRvIGFuIGVhcmx5IHJldHVybi5cbiAgICAgICAgICAgIGlmICghc2hvdWxkRHJhZyhheGlzLCBkcmFnLCBfdGhpcy5jdXJyZW50RGlyZWN0aW9uKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgcHJvamVjdGlvbiA9IF90aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbjtcbiAgICAgICAgICAgIHZhciBheGlzVmFsdWUgPSBfdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoYXhpcyk7XG4gICAgICAgICAgICBpZiAocHJvamVjdGlvbiAmJiBwcm9qZWN0aW9uLmxheW91dCkge1xuICAgICAgICAgICAgICAgIHZhciBfYSA9IHByb2plY3Rpb24ubGF5b3V0LmFjdHVhbFtheGlzXSwgbWluID0gX2EubWluLCBtYXggPSBfYS5tYXg7XG4gICAgICAgICAgICAgICAgYXhpc1ZhbHVlLnNldChwb2ludFtheGlzXSAtIG1peChtaW4sIG1heCwgMC41KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogV2hlbiB0aGUgdmlld3BvcnQgcmVzaXplcyB3ZSB3YW50IHRvIGNoZWNrIGlmIHRoZSBtZWFzdXJlZCBjb25zdHJhaW50c1xuICAgICAqIGhhdmUgY2hhbmdlZCBhbmQsIGlmIHNvLCByZXBvc2l0aW9uIHRoZSBlbGVtZW50IHdpdGhpbiB0aG9zZSBuZXcgY29uc3RyYWludHNcbiAgICAgKiByZWxhdGl2ZSB0byB3aGVyZSBpdCB3YXMgYmVmb3JlIHRoZSByZXNpemUuXG4gICAgICovXG4gICAgVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5wcm90b3R5cGUuc2NhbGVQb3NpdGlvbldpdGhpbkNvbnN0cmFpbnRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBfYiA9IHRoaXMuZ2V0UHJvcHMoKSwgZHJhZyA9IF9iLmRyYWcsIGRyYWdDb25zdHJhaW50cyA9IF9iLmRyYWdDb25zdHJhaW50cztcbiAgICAgICAgdmFyIHByb2plY3Rpb24gPSB0aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbjtcbiAgICAgICAgaWYgKCFpc1JlZk9iamVjdChkcmFnQ29uc3RyYWludHMpIHx8ICFwcm9qZWN0aW9uIHx8ICF0aGlzLmNvbnN0cmFpbnRzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3RvcCBjdXJyZW50IGFuaW1hdGlvbnMgYXMgdGhlcmUgY2FuIGJlIHZpc3VhbCBnbGl0Y2hpbmcgaWYgd2UgdHJ5IHRvIGRvXG4gICAgICAgICAqIHRoaXMgbWlkLWFuaW1hdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zdG9wQW5pbWF0aW9uKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZWNvcmQgdGhlIHJlbGF0aXZlIHBvc2l0aW9uIG9mIHRoZSBkcmFnZ2VkIGVsZW1lbnQgcmVsYXRpdmUgdG8gdGhlXG4gICAgICAgICAqIGNvbnN0cmFpbnRzIGJveCBhbmQgc2F2ZSBhcyBhIHByb2dyZXNzIHZhbHVlLlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGJveFByb2dyZXNzID0geyB4OiAwLCB5OiAwIH07XG4gICAgICAgIGVhY2hBeGlzKGZ1bmN0aW9uIChheGlzKSB7XG4gICAgICAgICAgICB2YXIgYXhpc1ZhbHVlID0gX3RoaXMuZ2V0QXhpc01vdGlvblZhbHVlKGF4aXMpO1xuICAgICAgICAgICAgaWYgKGF4aXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBsYXRlc3QgPSBheGlzVmFsdWUuZ2V0KCk7XG4gICAgICAgICAgICAgICAgYm94UHJvZ3Jlc3NbYXhpc10gPSBjYWxjT3JpZ2luKHsgbWluOiBsYXRlc3QsIG1heDogbGF0ZXN0IH0sIF90aGlzLmNvbnN0cmFpbnRzW2F4aXNdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVcGRhdGUgdGhlIGxheW91dCBvZiB0aGlzIGVsZW1lbnQgYW5kIHJlc29sdmUgdGhlIGxhdGVzdCBkcmFnIGNvbnN0cmFpbnRzXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgdHJhbnNmb3JtVGVtcGxhdGUgPSB0aGlzLnZpc3VhbEVsZW1lbnQuZ2V0UHJvcHMoKS50cmFuc2Zvcm1UZW1wbGF0ZTtcbiAgICAgICAgdGhpcy52aXN1YWxFbGVtZW50LmdldEluc3RhbmNlKCkuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtVGVtcGxhdGVcbiAgICAgICAgICAgID8gdHJhbnNmb3JtVGVtcGxhdGUoe30sIFwiXCIpXG4gICAgICAgICAgICA6IFwibm9uZVwiO1xuICAgICAgICAoX2EgPSBwcm9qZWN0aW9uLnJvb3QpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS51cGRhdGVTY3JvbGwoKTtcbiAgICAgICAgcHJvamVjdGlvbi51cGRhdGVMYXlvdXQoKTtcbiAgICAgICAgdGhpcy5yZXNvbHZlQ29uc3RyYWludHMoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZvciBlYWNoIGF4aXMsIGNhbGN1bGF0ZSB0aGUgY3VycmVudCBwcm9ncmVzcyBvZiB0aGUgbGF5b3V0IGF4aXNcbiAgICAgICAgICogd2l0aGluIHRoZSBuZXcgY29uc3RyYWludHMuXG4gICAgICAgICAqL1xuICAgICAgICBlYWNoQXhpcyhmdW5jdGlvbiAoYXhpcykge1xuICAgICAgICAgICAgaWYgKCFzaG91bGREcmFnKGF4aXMsIGRyYWcsIG51bGwpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQ2FsY3VsYXRlIGEgbmV3IHRyYW5zZm9ybSBiYXNlZCBvbiB0aGUgcHJldmlvdXMgYm94IHByb2dyZXNzXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciBheGlzVmFsdWUgPSBfdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoYXhpcyk7XG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5jb25zdHJhaW50c1theGlzXSwgbWluID0gX2EubWluLCBtYXggPSBfYS5tYXg7XG4gICAgICAgICAgICBheGlzVmFsdWUuc2V0KG1peChtaW4sIG1heCwgYm94UHJvZ3Jlc3NbYXhpc10pKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzLnByb3RvdHlwZS5hZGRMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgZWxlbWVudERyYWdDb250cm9scy5zZXQodGhpcy52aXN1YWxFbGVtZW50LCB0aGlzKTtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLnZpc3VhbEVsZW1lbnQuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEF0dGFjaCBhIHBvaW50ZXJkb3duIGV2ZW50IGxpc3RlbmVyIG9uIHRoaXMgRE9NIGVsZW1lbnQgdG8gaW5pdGlhdGUgZHJhZyB0cmFja2luZy5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBzdG9wUG9pbnRlckxpc3RlbmVyID0gYWRkUG9pbnRlckV2ZW50KGVsZW1lbnQsIFwicG9pbnRlcmRvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5nZXRQcm9wcygpLCBkcmFnID0gX2EuZHJhZywgX2IgPSBfYS5kcmFnTGlzdGVuZXIsIGRyYWdMaXN0ZW5lciA9IF9iID09PSB2b2lkIDAgPyB0cnVlIDogX2I7XG4gICAgICAgICAgICBkcmFnICYmIGRyYWdMaXN0ZW5lciAmJiBfdGhpcy5zdGFydChldmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgbWVhc3VyZURyYWdDb25zdHJhaW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkcmFnQ29uc3RyYWludHMgPSBfdGhpcy5nZXRQcm9wcygpLmRyYWdDb25zdHJhaW50cztcbiAgICAgICAgICAgIGlmIChpc1JlZk9iamVjdChkcmFnQ29uc3RyYWludHMpKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuY29uc3RyYWludHMgPSBfdGhpcy5yZXNvbHZlUmVmQ29uc3RyYWludHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHByb2plY3Rpb24gPSB0aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbjtcbiAgICAgICAgdmFyIHN0b3BNZWFzdXJlTGF5b3V0TGlzdGVuZXIgPSBwcm9qZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJtZWFzdXJlXCIsIG1lYXN1cmVEcmFnQ29uc3RyYWludHMpO1xuICAgICAgICBpZiAocHJvamVjdGlvbiAmJiAhcHJvamVjdGlvbi5sYXlvdXQpIHtcbiAgICAgICAgICAgIChfYSA9IHByb2plY3Rpb24ucm9vdCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnVwZGF0ZVNjcm9sbCgpO1xuICAgICAgICAgICAgcHJvamVjdGlvbi51cGRhdGVMYXlvdXQoKTtcbiAgICAgICAgfVxuICAgICAgICBtZWFzdXJlRHJhZ0NvbnN0cmFpbnRzKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBdHRhY2ggYSB3aW5kb3cgcmVzaXplIGxpc3RlbmVyIHRvIHNjYWxlIHRoZSBkcmFnZ2FibGUgdGFyZ2V0IHdpdGhpbiBpdHMgZGVmaW5lZFxuICAgICAgICAgKiBjb25zdHJhaW50cyBhcyB0aGUgd2luZG93IHJlc2l6ZXMuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgc3RvcFJlc2l6ZUxpc3RlbmVyID0gYWRkRG9tRXZlbnQod2luZG93LCBcInJlc2l6ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuc2NhbGVQb3NpdGlvbldpdGhpbkNvbnN0cmFpbnRzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlIGVsZW1lbnQncyBsYXlvdXQgY2hhbmdlcywgY2FsY3VsYXRlIHRoZSBkZWx0YSBhbmQgYXBwbHkgdGhhdCB0b1xuICAgICAgICAgKiB0aGUgZHJhZyBnZXN0dXJlJ3Mgb3JpZ2luIHBvaW50LlxuICAgICAgICAgKi9cbiAgICAgICAgcHJvamVjdGlvbi5hZGRFdmVudExpc3RlbmVyKFwiZGlkVXBkYXRlXCIsIChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciBkZWx0YSA9IF9hLmRlbHRhLCBoYXNMYXlvdXRDaGFuZ2VkID0gX2EuaGFzTGF5b3V0Q2hhbmdlZDtcbiAgICAgICAgICAgIGlmIChfdGhpcy5pc0RyYWdnaW5nICYmIGhhc0xheW91dENoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICBlYWNoQXhpcyhmdW5jdGlvbiAoYXhpcykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbW90aW9uVmFsdWUgPSBfdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoYXhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbW90aW9uVmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLm9yaWdpblBvaW50W2F4aXNdICs9IGRlbHRhW2F4aXNdLnRyYW5zbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgbW90aW9uVmFsdWUuc2V0KG1vdGlvblZhbHVlLmdldCgpICsgZGVsdGFbYXhpc10udHJhbnNsYXRlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBfdGhpcy52aXN1YWxFbGVtZW50LnN5bmNSZW5kZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3RvcFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgICAgICAgICBzdG9wUG9pbnRlckxpc3RlbmVyKCk7XG4gICAgICAgICAgICBzdG9wTWVhc3VyZUxheW91dExpc3RlbmVyKCk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzLnByb3RvdHlwZS5nZXRQcm9wcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByb3BzID0gdGhpcy52aXN1YWxFbGVtZW50LmdldFByb3BzKCk7XG4gICAgICAgIHZhciBfYSA9IHByb3BzLmRyYWcsIGRyYWcgPSBfYSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfYSwgX2IgPSBwcm9wcy5kcmFnRGlyZWN0aW9uTG9jaywgZHJhZ0RpcmVjdGlvbkxvY2sgPSBfYiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfYiwgX2MgPSBwcm9wcy5kcmFnUHJvcGFnYXRpb24sIGRyYWdQcm9wYWdhdGlvbiA9IF9jID09PSB2b2lkIDAgPyBmYWxzZSA6IF9jLCBfZCA9IHByb3BzLmRyYWdDb25zdHJhaW50cywgZHJhZ0NvbnN0cmFpbnRzID0gX2QgPT09IHZvaWQgMCA/IGZhbHNlIDogX2QsIF9lID0gcHJvcHMuZHJhZ0VsYXN0aWMsIGRyYWdFbGFzdGljID0gX2UgPT09IHZvaWQgMCA/IGRlZmF1bHRFbGFzdGljIDogX2UsIF9mID0gcHJvcHMuZHJhZ01vbWVudHVtLCBkcmFnTW9tZW50dW0gPSBfZiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9mO1xuICAgICAgICByZXR1cm4gX19hc3NpZ24oX19hc3NpZ24oe30sIHByb3BzKSwgeyBkcmFnOiBkcmFnLCBkcmFnRGlyZWN0aW9uTG9jazogZHJhZ0RpcmVjdGlvbkxvY2ssIGRyYWdQcm9wYWdhdGlvbjogZHJhZ1Byb3BhZ2F0aW9uLCBkcmFnQ29uc3RyYWludHM6IGRyYWdDb25zdHJhaW50cywgZHJhZ0VsYXN0aWM6IGRyYWdFbGFzdGljLCBkcmFnTW9tZW50dW06IGRyYWdNb21lbnR1bSB9KTtcbiAgICB9O1xuICAgIHJldHVybiBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzO1xufSgpKTtcbmZ1bmN0aW9uIHNob3VsZERyYWcoZGlyZWN0aW9uLCBkcmFnLCBjdXJyZW50RGlyZWN0aW9uKSB7XG4gICAgcmV0dXJuICgoZHJhZyA9PT0gdHJ1ZSB8fCBkcmFnID09PSBkaXJlY3Rpb24pICYmXG4gICAgICAgIChjdXJyZW50RGlyZWN0aW9uID09PSBudWxsIHx8IGN1cnJlbnREaXJlY3Rpb24gPT09IGRpcmVjdGlvbikpO1xufVxuLyoqXG4gKiBCYXNlZCBvbiBhbiB4L3kgb2Zmc2V0IGRldGVybWluZSB0aGUgY3VycmVudCBkcmFnIGRpcmVjdGlvbi4gSWYgYm90aCBheGlzJyBvZmZzZXRzIGFyZSBsb3dlclxuICogdGhhbiB0aGUgcHJvdmlkZWQgdGhyZXNob2xkLCByZXR1cm4gYG51bGxgLlxuICpcbiAqIEBwYXJhbSBvZmZzZXQgLSBUaGUgeC95IG9mZnNldCBmcm9tIG9yaWdpbi5cbiAqIEBwYXJhbSBsb2NrVGhyZXNob2xkIC0gKE9wdGlvbmFsKSAtIHRoZSBtaW5pbXVtIGFic29sdXRlIG9mZnNldCBiZWZvcmUgd2UgY2FuIGRldGVybWluZSBhIGRyYWcgZGlyZWN0aW9uLlxuICovXG5mdW5jdGlvbiBnZXRDdXJyZW50RGlyZWN0aW9uKG9mZnNldCwgbG9ja1RocmVzaG9sZCkge1xuICAgIGlmIChsb2NrVGhyZXNob2xkID09PSB2b2lkIDApIHsgbG9ja1RocmVzaG9sZCA9IDEwOyB9XG4gICAgdmFyIGRpcmVjdGlvbiA9IG51bGw7XG4gICAgaWYgKE1hdGguYWJzKG9mZnNldC55KSA+IGxvY2tUaHJlc2hvbGQpIHtcbiAgICAgICAgZGlyZWN0aW9uID0gXCJ5XCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKE1hdGguYWJzKG9mZnNldC54KSA+IGxvY2tUaHJlc2hvbGQpIHtcbiAgICAgICAgZGlyZWN0aW9uID0gXCJ4XCI7XG4gICAgfVxuICAgIHJldHVybiBkaXJlY3Rpb247XG59XG5cbmV4cG9ydCB7IFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMsIGVsZW1lbnREcmFnQ29udHJvbHMgfTtcbiIsImltcG9ydCB7IHVzZURyYWcgfSBmcm9tICcuLi8uLi9nZXN0dXJlcy9kcmFnL3VzZS1kcmFnLm1qcyc7XG5pbXBvcnQgeyB1c2VQYW5HZXN0dXJlIH0gZnJvbSAnLi4vLi4vZ2VzdHVyZXMvdXNlLXBhbi1nZXN0dXJlLm1qcyc7XG5pbXBvcnQgeyBtYWtlUmVuZGVybGVzc0NvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL21ha2UtcmVuZGVybGVzcy1jb21wb25lbnQubWpzJztcblxudmFyIGRyYWcgPSB7XG4gICAgcGFuOiBtYWtlUmVuZGVybGVzc0NvbXBvbmVudCh1c2VQYW5HZXN0dXJlKSxcbiAgICBkcmFnOiBtYWtlUmVuZGVybGVzc0NvbXBvbmVudCh1c2VEcmFnKSxcbn07XG5cbmV4cG9ydCB7IGRyYWcgfTtcbiIsImltcG9ydCB7IHVzZVJlZiwgdXNlQ29udGV4dCwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTW90aW9uQ29uZmlnQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQvTW90aW9uQ29uZmlnQ29udGV4dC5tanMnO1xuaW1wb3J0IHsgdXNlVW5tb3VudEVmZmVjdCB9IGZyb20gJy4uL3V0aWxzL3VzZS11bm1vdW50LWVmZmVjdC5tanMnO1xuaW1wb3J0IHsgdXNlUG9pbnRlckV2ZW50IH0gZnJvbSAnLi4vZXZlbnRzL3VzZS1wb2ludGVyLWV2ZW50Lm1qcyc7XG5pbXBvcnQgeyBQYW5TZXNzaW9uIH0gZnJvbSAnLi9QYW5TZXNzaW9uLm1qcyc7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBoYW5kbGVycyAtXG4gKiBAcGFyYW0gcmVmIC1cbiAqXG4gKiBAcHJpdmF0ZVJlbWFya3NcbiAqIEN1cnJlbnRseSB0aGlzIHNldHMgbmV3IHBhbiBnZXN0dXJlIGZ1bmN0aW9ucyBldmVyeSByZW5kZXIuIFRoZSBtZW1vIHJvdXRlIGhhcyBiZWVuIGV4cGxvcmVkXG4gKiBpbiB0aGUgcGFzdCBidXQgdWx0aW1hdGVseSB3ZSdyZSBzdGlsbCBjcmVhdGluZyBuZXcgZnVuY3Rpb25zIGV2ZXJ5IHJlbmRlci4gQW4gb3B0aW1pc2F0aW9uXG4gKiB0byBleHBsb3JlIGlzIGNyZWF0aW5nIHRoZSBwYW4gZ2VzdHVyZXMgYW5kIGxvYWRpbmcgdGhlbSBpbnRvIGEgYHJlZmAuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHVzZVBhbkdlc3R1cmUoX2EpIHtcbiAgICB2YXIgb25QYW4gPSBfYS5vblBhbiwgb25QYW5TdGFydCA9IF9hLm9uUGFuU3RhcnQsIG9uUGFuRW5kID0gX2Eub25QYW5FbmQsIG9uUGFuU2Vzc2lvblN0YXJ0ID0gX2Eub25QYW5TZXNzaW9uU3RhcnQsIHZpc3VhbEVsZW1lbnQgPSBfYS52aXN1YWxFbGVtZW50O1xuICAgIHZhciBoYXNQYW5FdmVudHMgPSBvblBhbiB8fCBvblBhblN0YXJ0IHx8IG9uUGFuRW5kIHx8IG9uUGFuU2Vzc2lvblN0YXJ0O1xuICAgIHZhciBwYW5TZXNzaW9uID0gdXNlUmVmKG51bGwpO1xuICAgIHZhciB0cmFuc2Zvcm1QYWdlUG9pbnQgPSB1c2VDb250ZXh0KE1vdGlvbkNvbmZpZ0NvbnRleHQpLnRyYW5zZm9ybVBhZ2VQb2ludDtcbiAgICB2YXIgaGFuZGxlcnMgPSB7XG4gICAgICAgIG9uU2Vzc2lvblN0YXJ0OiBvblBhblNlc3Npb25TdGFydCxcbiAgICAgICAgb25TdGFydDogb25QYW5TdGFydCxcbiAgICAgICAgb25Nb3ZlOiBvblBhbixcbiAgICAgICAgb25FbmQ6IGZ1bmN0aW9uIChldmVudCwgaW5mbykge1xuICAgICAgICAgICAgcGFuU2Vzc2lvbi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICAgIG9uUGFuRW5kICYmIG9uUGFuRW5kKGV2ZW50LCBpbmZvKTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChwYW5TZXNzaW9uLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHBhblNlc3Npb24uY3VycmVudC51cGRhdGVIYW5kbGVycyhoYW5kbGVycyk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBmdW5jdGlvbiBvblBvaW50ZXJEb3duKGV2ZW50KSB7XG4gICAgICAgIHBhblNlc3Npb24uY3VycmVudCA9IG5ldyBQYW5TZXNzaW9uKGV2ZW50LCBoYW5kbGVycywge1xuICAgICAgICAgICAgdHJhbnNmb3JtUGFnZVBvaW50OiB0cmFuc2Zvcm1QYWdlUG9pbnQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB1c2VQb2ludGVyRXZlbnQodmlzdWFsRWxlbWVudCwgXCJwb2ludGVyZG93blwiLCBoYXNQYW5FdmVudHMgJiYgb25Qb2ludGVyRG93bik7XG4gICAgdXNlVW5tb3VudEVmZmVjdChmdW5jdGlvbiAoKSB7IHJldHVybiBwYW5TZXNzaW9uLmN1cnJlbnQgJiYgcGFuU2Vzc2lvbi5jdXJyZW50LmVuZCgpOyB9KTtcbn1cblxuZXhwb3J0IHsgdXNlUGFuR2VzdHVyZSB9O1xuIiwiaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVmlzdWFsRWxlbWVudERyYWdDb250cm9scyB9IGZyb20gJy4vVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5tanMnO1xuaW1wb3J0IHsgdXNlQ29uc3RhbnQgfSBmcm9tICcuLi8uLi91dGlscy91c2UtY29uc3RhbnQubWpzJztcblxuLyoqXG4gKiBBIGhvb2sgdGhhdCBhbGxvd3MgYW4gZWxlbWVudCB0byBiZSBkcmFnZ2VkLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiB1c2VEcmFnKHByb3BzKSB7XG4gICAgdmFyIGdyb3VwRHJhZ0NvbnRyb2xzID0gcHJvcHMuZHJhZ0NvbnRyb2xzLCB2aXN1YWxFbGVtZW50ID0gcHJvcHMudmlzdWFsRWxlbWVudDtcbiAgICB2YXIgZHJhZ0NvbnRyb2xzID0gdXNlQ29uc3RhbnQoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHModmlzdWFsRWxlbWVudCk7IH0pO1xuICAgIC8vIElmIHdlJ3ZlIGJlZW4gcHJvdmlkZWQgYSBEcmFnQ29udHJvbHMgZm9yIG1hbnVhbCBjb250cm9sIG92ZXIgdGhlIGRyYWcgZ2VzdHVyZSxcbiAgICAvLyBzdWJzY3JpYmUgdGhpcyBjb21wb25lbnQgdG8gaXQgb24gbW91bnQuXG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdyb3VwRHJhZ0NvbnRyb2xzICYmIGdyb3VwRHJhZ0NvbnRyb2xzLnN1YnNjcmliZShkcmFnQ29udHJvbHMpOyB9LCBbZHJhZ0NvbnRyb2xzLCBncm91cERyYWdDb250cm9sc10pO1xuICAgIC8vIEFwcGx5IHRoZSBldmVudCBsaXN0ZW5lcnMgdG8gdGhlIGVsZW1lbnRcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkgeyByZXR1cm4gZHJhZ0NvbnRyb2xzLmFkZExpc3RlbmVycygpOyB9LCBbZHJhZ0NvbnRyb2xzXSk7XG59XG5cbmV4cG9ydCB7IHVzZURyYWcgfTtcbiIsImltcG9ydCB7IF9fc3ByZWFkQXJyYXksIF9fcmVhZCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbk1hbmFnZXIgfSBmcm9tICcuLi8uLi91dGlscy9zdWJzY3JpcHRpb24tbWFuYWdlci5tanMnO1xuXG52YXIgbmFtZXMgPSBbXG4gICAgXCJMYXlvdXRNZWFzdXJlXCIsXG4gICAgXCJCZWZvcmVMYXlvdXRNZWFzdXJlXCIsXG4gICAgXCJMYXlvdXRVcGRhdGVcIixcbiAgICBcIlZpZXdwb3J0Qm94VXBkYXRlXCIsXG4gICAgXCJVcGRhdGVcIixcbiAgICBcIlJlbmRlclwiLFxuICAgIFwiQW5pbWF0aW9uQ29tcGxldGVcIixcbiAgICBcIkxheW91dEFuaW1hdGlvbkNvbXBsZXRlXCIsXG4gICAgXCJBbmltYXRpb25TdGFydFwiLFxuICAgIFwiTGF5b3V0QW5pbWF0aW9uU3RhcnRcIixcbiAgICBcIlNldEF4aXNUYXJnZXRcIixcbiAgICBcIlVubW91bnRcIixcbl07XG5mdW5jdGlvbiBjcmVhdGVMaWZlY3ljbGVzKCkge1xuICAgIHZhciBtYW5hZ2VycyA9IG5hbWVzLm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgU3Vic2NyaXB0aW9uTWFuYWdlcigpOyB9KTtcbiAgICB2YXIgcHJvcFN1YnNjcmlwdGlvbnMgPSB7fTtcbiAgICB2YXIgbGlmZWN5Y2xlcyA9IHtcbiAgICAgICAgY2xlYXJBbGxMaXN0ZW5lcnM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1hbmFnZXJzLmZvckVhY2goZnVuY3Rpb24gKG1hbmFnZXIpIHsgcmV0dXJuIG1hbmFnZXIuY2xlYXIoKTsgfSk7IH0sXG4gICAgICAgIHVwZGF0ZVByb3BMaXN0ZW5lcnM6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICAgICAgbmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICB2YXIgb24gPSBcIm9uXCIgKyBuYW1lO1xuICAgICAgICAgICAgICAgIHZhciBwcm9wTGlzdGVuZXIgPSBwcm9wc1tvbl07XG4gICAgICAgICAgICAgICAgLy8gVW5zdWJzY3JpYmUgZXhpc3Rpbmcgc3Vic2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgKF9hID0gcHJvcFN1YnNjcmlwdGlvbnNbbmFtZV0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHByb3BTdWJzY3JpcHRpb25zKTtcbiAgICAgICAgICAgICAgICAvLyBBZGQgbmV3IHN1YnNjcmlwdGlvblxuICAgICAgICAgICAgICAgIGlmIChwcm9wTGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcFN1YnNjcmlwdGlvbnNbbmFtZV0gPSBsaWZlY3ljbGVzW29uXShwcm9wTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgbWFuYWdlcnMuZm9yRWFjaChmdW5jdGlvbiAobWFuYWdlciwgaSkge1xuICAgICAgICBsaWZlY3ljbGVzW1wib25cIiArIG5hbWVzW2ldXSA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7IHJldHVybiBtYW5hZ2VyLmFkZChoYW5kbGVyKTsgfTtcbiAgICAgICAgbGlmZWN5Y2xlc1tcIm5vdGlmeVwiICsgbmFtZXNbaV1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1hbmFnZXIubm90aWZ5LmFwcGx5KG1hbmFnZXIsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSwgZmFsc2UpKTtcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gbGlmZWN5Y2xlcztcbn1cblxuZXhwb3J0IHsgY3JlYXRlTGlmZWN5Y2xlcyB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24sIF9fc3ByZWFkQXJyYXksIF9fcmVhZCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCBzeW5jLCB7IGNhbmNlbFN5bmMgfSBmcm9tICdmcmFtZXN5bmMnO1xuaW1wb3J0IHsgbW90aW9uVmFsdWUgfSBmcm9tICcuLi92YWx1ZS9pbmRleC5tanMnO1xuaW1wb3J0IHsgaXNNb3Rpb25WYWx1ZSB9IGZyb20gJy4uL3ZhbHVlL3V0aWxzL2lzLW1vdGlvbi12YWx1ZS5tanMnO1xuaW1wb3J0IHsgdmFyaWFudFByaW9yaXR5T3JkZXIgfSBmcm9tICcuL3V0aWxzL2FuaW1hdGlvbi1zdGF0ZS5tanMnO1xuaW1wb3J0IHsgY3JlYXRlTGlmZWN5Y2xlcyB9IGZyb20gJy4vdXRpbHMvbGlmZWN5Y2xlcy5tanMnO1xuaW1wb3J0IHsgdXBkYXRlTW90aW9uVmFsdWVzRnJvbVByb3BzIH0gZnJvbSAnLi91dGlscy9tb3Rpb24tdmFsdWVzLm1qcyc7XG5pbXBvcnQgeyBjaGVja0lmQ29udHJvbGxpbmdWYXJpYW50cywgY2hlY2tJZlZhcmlhbnROb2RlLCBpc1ZhcmlhbnRMYWJlbCB9IGZyb20gJy4vdXRpbHMvdmFyaWFudHMubWpzJztcblxudmFyIHZpc3VhbEVsZW1lbnQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgX2IgPSBfYS50cmVlVHlwZSwgdHJlZVR5cGUgPSBfYiA9PT0gdm9pZCAwID8gXCJcIiA6IF9iLCBidWlsZCA9IF9hLmJ1aWxkLCBnZXRCYXNlVGFyZ2V0ID0gX2EuZ2V0QmFzZVRhcmdldCwgbWFrZVRhcmdldEFuaW1hdGFibGUgPSBfYS5tYWtlVGFyZ2V0QW5pbWF0YWJsZSwgbWVhc3VyZVZpZXdwb3J0Qm94ID0gX2EubWVhc3VyZVZpZXdwb3J0Qm94LCByZW5kZXJJbnN0YW5jZSA9IF9hLnJlbmRlciwgcmVhZFZhbHVlRnJvbUluc3RhbmNlID0gX2EucmVhZFZhbHVlRnJvbUluc3RhbmNlLCByZW1vdmVWYWx1ZUZyb21SZW5kZXJTdGF0ZSA9IF9hLnJlbW92ZVZhbHVlRnJvbVJlbmRlclN0YXRlLCBzb3J0Tm9kZVBvc2l0aW9uID0gX2Euc29ydE5vZGVQb3NpdGlvbiwgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzID0gX2Euc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzO1xuICAgIHJldHVybiBmdW5jdGlvbiAoX2EsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IF9hLnBhcmVudCwgcHJvcHMgPSBfYS5wcm9wcywgcHJlc2VuY2VJZCA9IF9hLnByZXNlbmNlSWQsIGJsb2NrSW5pdGlhbEFuaW1hdGlvbiA9IF9hLmJsb2NrSW5pdGlhbEFuaW1hdGlvbiwgdmlzdWFsU3RhdGUgPSBfYS52aXN1YWxTdGF0ZSwgc2hvdWxkUmVkdWNlTW90aW9uID0gX2Euc2hvdWxkUmVkdWNlTW90aW9uO1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICB2YXIgaXNNb3VudGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBsYXRlc3RWYWx1ZXMgPSB2aXN1YWxTdGF0ZS5sYXRlc3RWYWx1ZXMsIHJlbmRlclN0YXRlID0gdmlzdWFsU3RhdGUucmVuZGVyU3RhdGU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgaW5zdGFuY2Ugb2YgdGhlIHJlbmRlci1zcGVjaWZpYyBub2RlIHRoYXQgd2lsbCBiZSBoeWRyYXRlZCBieSB0aGVcbiAgICAgICAgICogZXhwb3NlZCBSZWFjdCByZWYuIFNvIGZvciBleGFtcGxlLCB0aGlzIHZpc3VhbCBlbGVtZW50IGNhbiBob3N0IGFcbiAgICAgICAgICogSFRNTEVsZW1lbnQsIHBsYWluIG9iamVjdCwgb3IgVGhyZWUuanMgb2JqZWN0LiBUaGUgZnVuY3Rpb25zIHByb3ZpZGVkXG4gICAgICAgICAqIGluIFZpc3VhbEVsZW1lbnRDb25maWcgYWxsb3cgdXMgdG8gaW50ZXJmYWNlIHdpdGggdGhpcyBpbnN0YW5jZS5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBpbnN0YW5jZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1hbmFnZXMgdGhlIHN1YnNjcmlwdGlvbnMgZm9yIGEgdmlzdWFsIGVsZW1lbnQncyBsaWZlY3ljbGUsIGZvciBpbnN0YW5jZVxuICAgICAgICAgKiBvblJlbmRlclxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGxpZmVjeWNsZXMgPSBjcmVhdGVMaWZlY3ljbGVzKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIG1hcCBvZiBhbGwgbW90aW9uIHZhbHVlcyBhdHRhY2hlZCB0byB0aGlzIHZpc3VhbCBlbGVtZW50LiBNb3Rpb25cbiAgICAgICAgICogdmFsdWVzIGFyZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGFueSBnaXZlbiBhbmltYXRlZCB2YWx1ZS4gQSBtb3Rpb25cbiAgICAgICAgICogdmFsdWUgbWlnaHQgYmUgcHJvdmlkZWQgZXh0ZXJuYWxseSBieSB0aGUgY29tcG9uZW50IHZpYSBwcm9wcy5cbiAgICAgICAgICovXG4gICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgTWFwKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIG1hcCBvZiBldmVyeSBzdWJzY3JpcHRpb24gdGhhdCBiaW5kcyB0aGUgcHJvdmlkZWQgb3IgZ2VuZXJhdGVkXG4gICAgICAgICAqIG1vdGlvbiB2YWx1ZXMgb25DaGFuZ2UgbGlzdGVuZXJzIHRvIHRoaXMgdmlzdWFsIGVsZW1lbnQuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgdmFsdWVTdWJzY3JpcHRpb25zID0gbmV3IE1hcCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIHByZXZpb3VzbHktcHJvdmlkZWQgbW90aW9uIHZhbHVlcyBhcyByZXR1cm5lZFxuICAgICAgICAgKiBmcm9tIHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcy4gV2UgdXNlIHRoZSBrZXlzIGluIGhlcmUgdG8gZGV0ZXJtaW5lXG4gICAgICAgICAqIGlmIGFueSBtb3Rpb24gdmFsdWVzIG5lZWQgdG8gYmUgcmVtb3ZlZCBhZnRlciBwcm9wcyBhcmUgdXBkYXRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBwcmV2TW90aW9uVmFsdWVzID0ge307XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXaGVuIHZhbHVlcyBhcmUgcmVtb3ZlZCBmcm9tIGFsbCBhbmltYXRpb24gcHJvcHMgd2UgbmVlZCB0byBzZWFyY2hcbiAgICAgICAgICogZm9yIGEgZmFsbGJhY2sgdmFsdWUgdG8gYW5pbWF0ZSB0by4gVGhlc2UgdmFsdWVzIGFyZSB0cmFja2VkIGluIGJhc2VUYXJnZXQuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgYmFzZVRhcmdldCA9IF9fYXNzaWduKHt9LCBsYXRlc3RWYWx1ZXMpO1xuICAgICAgICAvLyBJbnRlcm5hbCBtZXRob2RzID09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAvKipcbiAgICAgICAgICogT24gbW91bnQsIHRoaXMgd2lsbCBiZSBoeWRyYXRlZCB3aXRoIGEgY2FsbGJhY2sgdG8gZGlzY29ubmVjdFxuICAgICAgICAgKiB0aGlzIHZpc3VhbCBlbGVtZW50IGZyb20gaXRzIHBhcmVudCBvbiB1bm1vdW50LlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHJlbW92ZUZyb21WYXJpYW50VHJlZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlbmRlciB0aGUgZWxlbWVudCB3aXRoIHRoZSBsYXRlc3Qgc3R5bGVzIG91dHNpZGUgb2YgdGhlIFJlYWN0XG4gICAgICAgICAqIHJlbmRlciBsaWZlY3ljbGVcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgICAgIGlmICghaW5zdGFuY2UgfHwgIWlzTW91bnRlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0cmlnZ2VyQnVpbGQoKTtcbiAgICAgICAgICAgIHJlbmRlckluc3RhbmNlKGluc3RhbmNlLCByZW5kZXJTdGF0ZSwgcHJvcHMuc3R5bGUsIGVsZW1lbnQucHJvamVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdHJpZ2dlckJ1aWxkKCkge1xuICAgICAgICAgICAgYnVpbGQoZWxlbWVudCwgcmVuZGVyU3RhdGUsIGxhdGVzdFZhbHVlcywgb3B0aW9ucywgcHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgICAgICAgIGxpZmVjeWNsZXMubm90aWZ5VXBkYXRlKGxhdGVzdFZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBiaW5kVG9Nb3Rpb25WYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgcmVtb3ZlT25DaGFuZ2UgPSB2YWx1ZS5vbkNoYW5nZShmdW5jdGlvbiAobGF0ZXN0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBsYXRlc3RWYWx1ZXNba2V5XSA9IGxhdGVzdFZhbHVlO1xuICAgICAgICAgICAgICAgIHByb3BzLm9uVXBkYXRlICYmIHN5bmMudXBkYXRlKHVwZGF0ZSwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVtb3ZlT25SZW5kZXJSZXF1ZXN0ID0gdmFsdWUub25SZW5kZXJSZXF1ZXN0KGVsZW1lbnQuc2NoZWR1bGVSZW5kZXIpO1xuICAgICAgICAgICAgdmFsdWVTdWJzY3JpcHRpb25zLnNldChrZXksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVPbkNoYW5nZSgpO1xuICAgICAgICAgICAgICAgIHJlbW92ZU9uUmVuZGVyUmVxdWVzdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFueSBtb3Rpb24gdmFsdWVzIHRoYXQgYXJlIHByb3ZpZGVkIHRvIHRoZSBlbGVtZW50IHdoZW4gY3JlYXRlZFxuICAgICAgICAgKiBhcmVuJ3QgeWV0IGJvdW5kIHRvIHRoZSBlbGVtZW50LCBhcyB0aGlzIHdvdWxkIHRlY2huaWNhbGx5IGJlIGltcHVyZS5cbiAgICAgICAgICogSG93ZXZlciwgd2UgaXRlcmF0ZSB0aHJvdWdoIHRoZSBtb3Rpb24gdmFsdWVzIGFuZCBzZXQgdGhlbSB0byB0aGVcbiAgICAgICAgICogaW5pdGlhbCB2YWx1ZXMgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBUT0RPOiBUaGlzIGlzIGltcHVyZSBhbmQgd2Ugc2hvdWxkIGxvb2sgYXQgY2hhbmdpbmcgdGhpcyB0byBydW4gb24gbW91bnQuXG4gICAgICAgICAqIERvaW5nIHNvIHdpbGwgYnJlYWsgc29tZSB0ZXN0cyBidXQgdGhpcyBpc24ndCBuZWNjZXNzYXJpbHkgYSBicmVha2luZyBjaGFuZ2UsXG4gICAgICAgICAqIG1vcmUgYSByZWZsZWN0aW9uIG9mIHRoZSB0ZXN0LlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGluaXRpYWxNb3Rpb25WYWx1ZXMgPSBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMocHJvcHMpO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gaW5pdGlhbE1vdGlvblZhbHVlcykge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gaW5pdGlhbE1vdGlvblZhbHVlc1trZXldO1xuICAgICAgICAgICAgaWYgKGxhdGVzdFZhbHVlc1trZXldICE9PSB1bmRlZmluZWQgJiYgaXNNb3Rpb25WYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5zZXQobGF0ZXN0VmFsdWVzW2tleV0sIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lIHdoYXQgcm9sZSB0aGlzIHZpc3VhbCBlbGVtZW50IHNob3VsZCB0YWtlIGluIHRoZSB2YXJpYW50IHRyZWUuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgaXNDb250cm9sbGluZ1ZhcmlhbnRzID0gY2hlY2tJZkNvbnRyb2xsaW5nVmFyaWFudHMocHJvcHMpO1xuICAgICAgICB2YXIgaXNWYXJpYW50Tm9kZSA9IGNoZWNrSWZWYXJpYW50Tm9kZShwcm9wcyk7XG4gICAgICAgIHZhciBlbGVtZW50ID0gX19hc3NpZ24oX19hc3NpZ24oeyB0cmVlVHlwZTogdHJlZVR5cGUsIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGlzIGlzIGEgbWlycm9yIG9mIHRoZSBpbnRlcm5hbCBpbnN0YW5jZSBwcm9wLCB3aGljaCBrZWVwc1xuICAgICAgICAgICAgICogVmlzdWFsRWxlbWVudCB0eXBlLWNvbXBhdGlibGUgd2l0aCBSZWFjdCdzIFJlZk9iamVjdC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY3VycmVudDogbnVsbCwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBkZXB0aCBvZiB0aGlzIHZpc3VhbCBlbGVtZW50IHdpdGhpbiB0aGUgdmlzdWFsIGVsZW1lbnQgdHJlZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZGVwdGg6IHBhcmVudCA/IHBhcmVudC5kZXB0aCArIDEgOiAwLCBwYXJlbnQ6IHBhcmVudCwgY2hpbGRyZW46IG5ldyBTZXQoKSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHByZXNlbmNlSWQ6IHByZXNlbmNlSWQsIHNob3VsZFJlZHVjZU1vdGlvbjogc2hvdWxkUmVkdWNlTW90aW9uLCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgdGhpcyBjb21wb25lbnQgaXMgcGFydCBvZiB0aGUgdmFyaWFudCB0cmVlLCBpdCBzaG91bGQgdHJhY2tcbiAgICAgICAgICAgICAqIGFueSBjaGlsZHJlbiB0aGF0IGFyZSBhbHNvIHBhcnQgb2YgdGhlIHRyZWUuIFRoaXMgaXMgZXNzZW50aWFsbHlcbiAgICAgICAgICAgICAqIGEgc2hhZG93IHRyZWUgdG8gc2ltcGxpZnkgbG9naWMgYXJvdW5kIGhvdyB0byBzdGFnZ2VyIG92ZXIgY2hpbGRyZW4uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhcmlhbnRDaGlsZHJlbjogaXNWYXJpYW50Tm9kZSA/IG5ldyBTZXQoKSA6IHVuZGVmaW5lZCwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFdoZXRoZXIgdGhpcyBpbnN0YW5jZSBpcyB2aXNpYmxlLiBUaGlzIGNhbiBiZSBjaGFuZ2VkIGltcGVyYXRpdmVseVxuICAgICAgICAgICAgICogYnkgdGhlIHByb2plY3Rpb24gdHJlZSwgaXMgYW5hbG9nb3VzIHRvIENTUydzIHZpc2liaWxpdHkgaW4gdGhhdFxuICAgICAgICAgICAgICogaGlkZGVuIGVsZW1lbnRzIHNob3VsZCB0YWtlIHVwIGxheW91dCwgYW5kIG5lZWRzIGVuYWN0aW5nIGJ5IHRoZSBjb25maWd1cmVkXG4gICAgICAgICAgICAgKiByZW5kZXIgZnVuY3Rpb24uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlzVmlzaWJsZTogdW5kZWZpbmVkLCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTm9ybWFsbHksIGlmIGEgY29tcG9uZW50IGlzIGNvbnRyb2xsZWQgYnkgYSBwYXJlbnQncyB2YXJpYW50cywgaXQgY2FuXG4gICAgICAgICAgICAgKiByZWx5IG9uIHRoYXQgYW5jZXN0b3IgdG8gdHJpZ2dlciBhbmltYXRpb25zIGZ1cnRoZXIgZG93biB0aGUgdHJlZS5cbiAgICAgICAgICAgICAqIEhvd2V2ZXIsIGlmIGEgY29tcG9uZW50IGlzIGNyZWF0ZWQgYWZ0ZXIgaXRzIHBhcmVudCBpcyBtb3VudGVkLCB0aGUgcGFyZW50XG4gICAgICAgICAgICAgKiB3b24ndCB0cmlnZ2VyIHRoYXQgbW91bnQgYW5pbWF0aW9uIHNvIHRoZSBjaGlsZCBuZWVkcyB0by5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBUT0RPOiBUaGlzIG1pZ2h0IGJlIGJldHRlciByZXBsYWNlZCB3aXRoIGEgbWV0aG9kIGlzUGFyZW50TW91bnRlZFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBtYW51YWxseUFuaW1hdGVPbk1vdW50OiBCb29sZWFuKHBhcmVudCA9PT0gbnVsbCB8fCBwYXJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudC5pc01vdW50ZWQoKSksIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGlzIGNhbiBiZSBzZXQgYnkgQW5pbWF0ZVByZXNlbmNlIHRvIGZvcmNlIGNvbXBvbmVudHMgdGhhdCBtb3VudFxuICAgICAgICAgICAgICogYXQgdGhlIHNhbWUgdGltZSBhcyBpdCB0byBtb3VudCBhcyBpZiB0aGV5IGhhdmUgaW5pdGlhbD17ZmFsc2V9IHNldC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYmxvY2tJbml0aWFsQW5pbWF0aW9uOiBibG9ja0luaXRpYWxBbmltYXRpb24sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGNvbXBvbmVudCBoYXMgbW91bnRlZCB5ZXQuIFRoaXMgaXMgbW9zdGx5IHVzZWRcbiAgICAgICAgICAgICAqIGJ5IHZhcmlhbnQgY2hpbGRyZW4gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhleSBuZWVkIHRvIHRyaWdnZXIgdGhlaXJcbiAgICAgICAgICAgICAqIG93biBhbmltYXRpb25zIG9uIG1vdW50LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpc01vdW50ZWQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJvb2xlYW4oaW5zdGFuY2UpOyB9LCBtb3VudDogZnVuY3Rpb24gKG5ld0luc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgaXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IGVsZW1lbnQuY3VycmVudCA9IG5ld0luc3RhbmNlO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnByb2plY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5wcm9qZWN0aW9uLm1vdW50KG5ld0luc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzVmFyaWFudE5vZGUgJiYgcGFyZW50ICYmICFpc0NvbnRyb2xsaW5nVmFyaWFudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRnJvbVZhcmlhbnRUcmVlID0gcGFyZW50ID09PSBudWxsIHx8IHBhcmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyZW50LmFkZFZhcmlhbnRDaGlsZChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHsgcmV0dXJuIGJpbmRUb01vdGlvblZhbHVlKGtleSwgdmFsdWUpOyB9KTtcbiAgICAgICAgICAgICAgICBwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJlbnQuY2hpbGRyZW4uYWRkKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0UHJvcHMocHJvcHMpO1xuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHVubW91bnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgKF9hID0gZWxlbWVudC5wcm9qZWN0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudW5tb3VudCgpO1xuICAgICAgICAgICAgICAgIGNhbmNlbFN5bmMudXBkYXRlKHVwZGF0ZSk7XG4gICAgICAgICAgICAgICAgY2FuY2VsU3luYy5yZW5kZXIocmVuZGVyKTtcbiAgICAgICAgICAgICAgICB2YWx1ZVN1YnNjcmlwdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAocmVtb3ZlKSB7IHJldHVybiByZW1vdmUoKTsgfSk7XG4gICAgICAgICAgICAgICAgcmVtb3ZlRnJvbVZhcmlhbnRUcmVlID09PSBudWxsIHx8IHJlbW92ZUZyb21WYXJpYW50VHJlZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVtb3ZlRnJvbVZhcmlhbnRUcmVlKCk7XG4gICAgICAgICAgICAgICAgcGFyZW50ID09PSBudWxsIHx8IHBhcmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyZW50LmNoaWxkcmVuLmRlbGV0ZShlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBsaWZlY3ljbGVzLmNsZWFyQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaXNNb3VudGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQWRkIGEgY2hpbGQgdmlzdWFsIGVsZW1lbnQgdG8gb3VyIHNldCBvZiBjaGlsZHJlbi5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYWRkVmFyaWFudENoaWxkOiBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgdmFyIGNsb3Nlc3RWYXJpYW50Tm9kZSA9IGVsZW1lbnQuZ2V0Q2xvc2VzdFZhcmlhbnROb2RlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNsb3Nlc3RWYXJpYW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAoX2EgPSBjbG9zZXN0VmFyaWFudE5vZGUudmFyaWFudENoaWxkcmVuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYWRkKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9zZXN0VmFyaWFudE5vZGUudmFyaWFudENoaWxkcmVuLmRlbGV0ZShjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgc29ydE5vZGVQb3NpdGlvbjogZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogSWYgdGhlc2Ugbm9kZXMgYXJlbid0IGV2ZW4gb2YgdGhlIHNhbWUgdHlwZSB3ZSBjYW4ndCBjb21wYXJlIHRoZWlyIGRlcHRoLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGlmICghc29ydE5vZGVQb3NpdGlvbiB8fCB0cmVlVHlwZSAhPT0gb3RoZXIudHJlZVR5cGUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIHJldHVybiBzb3J0Tm9kZVBvc2l0aW9uKGVsZW1lbnQuZ2V0SW5zdGFuY2UoKSwgb3RoZXIuZ2V0SW5zdGFuY2UoKSk7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJucyB0aGUgY2xvc2VzdCB2YXJpYW50IG5vZGUgaW4gdGhlIHRyZWUgc3RhcnRpbmcgZnJvbVxuICAgICAgICAgICAgICogdGhpcyB2aXN1YWwgZWxlbWVudC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZ2V0Q2xvc2VzdFZhcmlhbnROb2RlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVmFyaWFudE5vZGUgPyBlbGVtZW50IDogcGFyZW50ID09PSBudWxsIHx8IHBhcmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyZW50LmdldENsb3Nlc3RWYXJpYW50Tm9kZSgpO1xuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEV4cG9zZSB0aGUgbGF0ZXN0IGxheW91dElkIHByb3AuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGdldExheW91dElkOiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm9wcy5sYXlvdXRJZDsgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgaW5zdGFuY2UuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGdldEluc3RhbmNlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnN0YW5jZTsgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEdldC9zZXQgdGhlIGxhdGVzdCBzdGF0aWMgdmFsdWVzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBnZXRTdGF0aWNWYWx1ZTogZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gbGF0ZXN0VmFsdWVzW2tleV07IH0sIHNldFN0YXRpY1ZhbHVlOiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgeyByZXR1cm4gKGxhdGVzdFZhbHVlc1trZXldID0gdmFsdWUpOyB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJucyB0aGUgbGF0ZXN0IG1vdGlvbiB2YWx1ZSBzdGF0ZS4gQ3VycmVudGx5IG9ubHkgdXNlZCB0byB0YWtlXG4gICAgICAgICAgICAgKiBhIHNuYXBzaG90IG9mIHRoZSB2aXN1YWwgZWxlbWVudCAtIHBlcmhhcHMgdGhpcyBjYW4gcmV0dXJuIHRoZSB3aG9sZVxuICAgICAgICAgICAgICogdmlzdWFsIHN0YXRlXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGdldExhdGVzdFZhbHVlczogZnVuY3Rpb24gKCkgeyByZXR1cm4gbGF0ZXN0VmFsdWVzOyB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogU2V0IHRoZSB2aXNpYmxpdHkgb2YgdGhlIHZpc3VhbCBlbGVtZW50LiBJZiBpdCdzIGNoYW5nZWQsIHNjaGVkdWxlXG4gICAgICAgICAgICAgKiBhIHJlbmRlciB0byByZWZsZWN0IHRoZXNlIGNoYW5nZXMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHNldFZpc2liaWxpdHk6IGZ1bmN0aW9uICh2aXNpYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaXNWaXNpYmxlID09PSB2aXNpYmlsaXR5KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZWxlbWVudC5pc1Zpc2libGUgPSB2aXNpYmlsaXR5O1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2NoZWR1bGVSZW5kZXIoKTtcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBNYWtlIGEgdGFyZ2V0IGFuaW1hdGFibGUgYnkgUG9wbW90aW9uLiBGb3IgaW5zdGFuY2UsIGlmIHdlJ3JlXG4gICAgICAgICAgICAgKiB0cnlpbmcgdG8gYW5pbWF0ZSB3aWR0aCBmcm9tIDEwMHB4IHRvIDEwMHZ3IHdlIG5lZWQgdG8gbWVhc3VyZSAxMDB2d1xuICAgICAgICAgICAgICogaW4gcGl4ZWxzIHRvIGRldGVybWluZSB3aGF0IHdlIHJlYWxseSBuZWVkIHRvIGFuaW1hdGUgdG8uIFRoaXMgaXMgYWxzb1xuICAgICAgICAgICAgICogcGx1Z2dhYmxlIHRvIHN1cHBvcnQgRnJhbWVyJ3MgY3VzdG9tIHZhbHVlIHR5cGVzIGxpa2UgQ29sb3IsXG4gICAgICAgICAgICAgKiBhbmQgQ1NTIHZhcmlhYmxlcy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbWFrZVRhcmdldEFuaW1hdGFibGU6IGZ1bmN0aW9uICh0YXJnZXQsIGNhbk11dGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChjYW5NdXRhdGUgPT09IHZvaWQgMCkgeyBjYW5NdXRhdGUgPSB0cnVlOyB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUYXJnZXRBbmltYXRhYmxlKGVsZW1lbnQsIHRhcmdldCwgcHJvcHMsIGNhbk11dGF0ZSk7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTWVhc3VyZSB0aGUgY3VycmVudCB2aWV3cG9ydCBib3ggd2l0aCBvciB3aXRob3V0IHRyYW5zZm9ybXMuXG4gICAgICAgICAgICAgKiBPbmx5IG1lYXN1cmVzIGF4aXMtYWxpZ25lZCBib3hlcywgcm90YXRlIGFuZCBza2V3IG11c3QgYmUgbWFudWFsbHlcbiAgICAgICAgICAgICAqIHJlbW92ZWQgd2l0aCBhIHJlLXJlbmRlciB0byB3b3JrLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBtZWFzdXJlVmlld3BvcnRCb3g6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWVhc3VyZVZpZXdwb3J0Qm94KGluc3RhbmNlLCBwcm9wcyk7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8vIE1vdGlvbiB2YWx1ZXMgPT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEFkZCBhIG1vdGlvbiB2YWx1ZSBhbmQgYmluZCBpdCB0byB0aGlzIHZpc3VhbCBlbGVtZW50LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBhZGRWYWx1ZTogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgZXhpc3RpbmcgdmFsdWUgaWYgaXQgZXhpc3RzXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaGFzVmFsdWUoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVWYWx1ZShrZXkpO1xuICAgICAgICAgICAgICAgIHZhbHVlcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgbGF0ZXN0VmFsdWVzW2tleV0gPSB2YWx1ZS5nZXQoKTtcbiAgICAgICAgICAgICAgICBiaW5kVG9Nb3Rpb25WYWx1ZShrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZW1vdmUgYSBtb3Rpb24gdmFsdWUgYW5kIHVuYmluZCBhbnkgYWN0aXZlIHN1YnNjcmlwdGlvbnMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHJlbW92ZVZhbHVlOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHZhbHVlcy5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgICAgICAoX2EgPSB2YWx1ZVN1YnNjcmlwdGlvbnMuZ2V0KGtleSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYSgpO1xuICAgICAgICAgICAgICAgIHZhbHVlU3Vic2NyaXB0aW9ucy5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbGF0ZXN0VmFsdWVzW2tleV07XG4gICAgICAgICAgICAgICAgcmVtb3ZlVmFsdWVGcm9tUmVuZGVyU3RhdGUoa2V5LCByZW5kZXJTdGF0ZSk7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIGEgbW90aW9uIHZhbHVlIGZvciB0aGlzIGtleVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBoYXNWYWx1ZTogZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gdmFsdWVzLmhhcyhrZXkpOyB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogR2V0IGEgbW90aW9uIHZhbHVlIGZvciB0aGlzIGtleS4gSWYgY2FsbGVkIHdpdGggYSBkZWZhdWx0XG4gICAgICAgICAgICAgKiB2YWx1ZSwgd2UnbGwgY3JlYXRlIG9uZSBpZiBub25lIGV4aXN0cy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZ2V0VmFsdWU6IGZ1bmN0aW9uIChrZXksIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHZhbHVlcy5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vdGlvblZhbHVlKGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYWRkVmFsdWUoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJdGVyYXRlIG92ZXIgb3VyIG1vdGlvbiB2YWx1ZXMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGZvckVhY2hWYWx1ZTogZnVuY3Rpb24gKGNhbGxiYWNrKSB7IHJldHVybiB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjayk7IH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB3ZSdyZSB0cnlpbmcgdG8gYW5pbWF0ZSB0byBhIHByZXZpb3VzbHkgdW5lbmNvdW50ZXJlZCB2YWx1ZSxcbiAgICAgICAgICAgICAqIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGl0IGluIG91ciBzdGF0ZSBhbmQgYXMgYSBsYXN0IHJlc29ydCByZWFkIGl0XG4gICAgICAgICAgICAgKiBkaXJlY3RseSBmcm9tIHRoZSBpbnN0YW5jZSAod2hpY2ggbWlnaHQgaGF2ZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMpLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICByZWFkVmFsdWU6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChfYSA9IGxhdGVzdFZhbHVlc1trZXldKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiByZWFkVmFsdWVGcm9tSW5zdGFuY2UoaW5zdGFuY2UsIGtleSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogU2V0IHRoZSBiYXNlIHRhcmdldCB0byBsYXRlciBhbmltYXRlIGJhY2sgdG8uIFRoaXMgaXMgY3VycmVudGx5XG4gICAgICAgICAgICAgKiBvbmx5IGh5ZHJhdGVkIG9uIGNyZWF0aW9uIGFuZCB3aGVuIHdlIGZpcnN0IHJlYWQgYSB2YWx1ZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgc2V0QmFzZVRhcmdldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBiYXNlVGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBGaW5kIHRoZSBiYXNlIHRhcmdldCBmb3IgYSB2YWx1ZSB0aGF0cyBiZWVuIHJlbW92ZWQgZnJvbSBhbGwgYW5pbWF0aW9uXG4gICAgICAgICAgICAgKiBwcm9wcy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZ2V0QmFzZVRhcmdldDogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGlmIChnZXRCYXNlVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBnZXRCYXNlVGFyZ2V0KHByb3BzLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9PSB1bmRlZmluZWQgJiYgIWlzTW90aW9uVmFsdWUodGFyZ2V0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBiYXNlVGFyZ2V0W2tleV07XG4gICAgICAgICAgICB9IH0sIGxpZmVjeWNsZXMpLCB7IFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBCdWlsZCB0aGUgcmVuZGVyZXIgc3RhdGUgYmFzZWQgb24gdGhlIGxhdGVzdCB2aXN1YWwgc3RhdGUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGJ1aWxkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckJ1aWxkKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlclN0YXRlO1xuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFNjaGVkdWxlIGEgcmVuZGVyIG9uIHRoZSBuZXh0IGFuaW1hdGlvbiBmcmFtZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgc2NoZWR1bGVSZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzeW5jLnJlbmRlcihyZW5kZXIsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBTeW5jaHJvbm91c2x5IGZpcmUgcmVuZGVyLiBJdCdzIHByZWZlcmVkIHRoYXQgd2UgYmF0Y2ggcmVuZGVycyBidXRcbiAgICAgICAgICAgICAqIGluIG1hbnkgY2lyY3Vtc3RhbmNlcywgbGlrZSBsYXlvdXQgbWVhc3VyZW1lbnQsIHdlIG5lZWQgdG8gcnVuIHRoaXNcbiAgICAgICAgICAgICAqIHN5bmNocm9ub3VzbHkuIEhvd2V2ZXIgaW4gdGhvc2UgaW5zdGFuY2VzIG90aGVyIG1lYXN1cmVzIHNob3VsZCBiZSB0YWtlblxuICAgICAgICAgICAgICogdG8gYmF0Y2ggcmVhZHMvd3JpdGVzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBzeW5jUmVuZGVyOiByZW5kZXIsIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBVcGRhdGUgdGhlIHByb3ZpZGVkIHByb3BzLiBFbnN1cmUgYW55IG5ld2x5LWFkZGVkIG1vdGlvbiB2YWx1ZXMgYXJlXG4gICAgICAgICAgICAgKiBhZGRlZCB0byBvdXIgbWFwLCBvbGQgb25lcyByZW1vdmVkLCBhbmQgbGlzdGVuZXJzIHVwZGF0ZWQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHNldFByb3BzOiBmdW5jdGlvbiAobmV3UHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAobmV3UHJvcHMudHJhbnNmb3JtVGVtcGxhdGUgfHwgcHJvcHMudHJhbnNmb3JtVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zY2hlZHVsZVJlbmRlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9wcyA9IG5ld1Byb3BzO1xuICAgICAgICAgICAgICAgIGxpZmVjeWNsZXMudXBkYXRlUHJvcExpc3RlbmVycyhuZXdQcm9wcyk7XG4gICAgICAgICAgICAgICAgcHJldk1vdGlvblZhbHVlcyA9IHVwZGF0ZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyhlbGVtZW50LCBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMocHJvcHMpLCBwcmV2TW90aW9uVmFsdWVzKTtcbiAgICAgICAgICAgIH0sIGdldFByb3BzOiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm9wczsgfSwgXG4gICAgICAgICAgICAvLyBWYXJpYW50cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJucyB0aGUgdmFyaWFudCBkZWZpbml0aW9uIHdpdGggYSBnaXZlbiBuYW1lLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBnZXRWYXJpYW50OiBmdW5jdGlvbiAobmFtZSkgeyB2YXIgX2E7IHJldHVybiAoX2EgPSBwcm9wcy52YXJpYW50cykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW25hbWVdOyB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJucyB0aGUgZGVmaW5lZCBkZWZhdWx0IHRyYW5zaXRpb24gb24gdGhpcyBjb21wb25lbnQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGdldERlZmF1bHRUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm9wcy50cmFuc2l0aW9uOyB9LCBnZXRUcmFuc2Zvcm1QYWdlUG9pbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudHJhbnNmb3JtUGFnZVBvaW50O1xuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFVzZWQgYnkgY2hpbGQgdmFyaWFudCBub2RlcyB0byBnZXQgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgdmFyaWFudCBwcm9wcy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZ2V0VmFyaWFudENvbnRleHQ6IGZ1bmN0aW9uIChzdGFydEF0UGFyZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0QXRQYXJlbnQgPT09IHZvaWQgMCkgeyBzdGFydEF0UGFyZW50ID0gZmFsc2U7IH1cbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRBdFBhcmVudClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudCA9PT0gbnVsbCB8fCBwYXJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudC5nZXRWYXJpYW50Q29udGV4dCgpO1xuICAgICAgICAgICAgICAgIGlmICghaXNDb250cm9sbGluZ1ZhcmlhbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0XzEgPSAocGFyZW50ID09PSBudWxsIHx8IHBhcmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyZW50LmdldFZhcmlhbnRDb250ZXh0KCkpIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcHMuaW5pdGlhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0XzEuaW5pdGlhbCA9IHByb3BzLmluaXRpYWw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRfMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bVZhcmlhbnRQcm9wczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lXzEgPSB2YXJpYW50UHJvcHNbaV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm9wID0gcHJvcHNbbmFtZV8xXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFyaWFudExhYmVsKHByb3ApIHx8IHByb3AgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0W25hbWVfMV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICAgICAgfSB9KTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfTtcbn07XG52YXIgdmFyaWFudFByb3BzID0gX19zcHJlYWRBcnJheShbXCJpbml0aWFsXCJdLCBfX3JlYWQodmFyaWFudFByaW9yaXR5T3JkZXIpLCBmYWxzZSk7XG52YXIgbnVtVmFyaWFudFByb3BzID0gdmFyaWFudFByb3BzLmxlbmd0aDtcblxuZXhwb3J0IHsgdmlzdWFsRWxlbWVudCB9O1xuIiwiaW1wb3J0IHsgd2Fybk9uY2UgfSBmcm9tICcuLi8uLi91dGlscy93YXJuLW9uY2UubWpzJztcbmltcG9ydCB7IG1vdGlvblZhbHVlIH0gZnJvbSAnLi4vLi4vdmFsdWUvaW5kZXgubWpzJztcbmltcG9ydCB7IGlzTW90aW9uVmFsdWUgfSBmcm9tICcuLi8uLi92YWx1ZS91dGlscy9pcy1tb3Rpb24tdmFsdWUubWpzJztcblxuZnVuY3Rpb24gdXBkYXRlTW90aW9uVmFsdWVzRnJvbVByb3BzKGVsZW1lbnQsIG5leHQsIHByZXYpIHtcbiAgICB2YXIgX2E7XG4gICAgZm9yICh2YXIga2V5IGluIG5leHQpIHtcbiAgICAgICAgdmFyIG5leHRWYWx1ZSA9IG5leHRba2V5XTtcbiAgICAgICAgdmFyIHByZXZWYWx1ZSA9IHByZXZba2V5XTtcbiAgICAgICAgaWYgKGlzTW90aW9uVmFsdWUobmV4dFZhbHVlKSkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB0aGlzIGlzIGEgbW90aW9uIHZhbHVlIGZvdW5kIGluIHByb3BzIG9yIHN0eWxlLCB3ZSB3YW50IHRvIGFkZCBpdFxuICAgICAgICAgICAgICogdG8gb3VyIHZpc3VhbCBlbGVtZW50J3MgbW90aW9uIHZhbHVlIG1hcC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZWxlbWVudC5hZGRWYWx1ZShrZXksIG5leHRWYWx1ZSk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIENoZWNrIHRoZSB2ZXJzaW9uIG9mIHRoZSBpbmNvbWluZyBtb3Rpb24gdmFsdWUgd2l0aCB0aGlzIHZlcnNpb25cbiAgICAgICAgICAgICAqIGFuZCB3YXJuIGFnYWluc3QgbWlzbWF0Y2hlcy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZShuZXh0VmFsdWUudmVyc2lvbiA9PT0gXCI2LjUuMVwiLCBcIkF0dGVtcHRpbmcgdG8gbWl4IEZyYW1lciBNb3Rpb24gdmVyc2lvbnMgXCIuY29uY2F0KG5leHRWYWx1ZS52ZXJzaW9uLCBcIiB3aXRoIDYuNS4xIG1heSBub3Qgd29yayBhcyBleHBlY3RlZC5cIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzTW90aW9uVmFsdWUocHJldlZhbHVlKSkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB3ZSdyZSBzd2FwcGluZyB0byBhIG5ldyBtb3Rpb24gdmFsdWUsIGNyZWF0ZSBhIG5ldyBtb3Rpb24gdmFsdWVcbiAgICAgICAgICAgICAqIGZyb20gdGhhdFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBlbGVtZW50LmFkZFZhbHVlKGtleSwgbW90aW9uVmFsdWUobmV4dFZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJldlZhbHVlICE9PSBuZXh0VmFsdWUpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgdGhpcyBpcyBhIGZsYXQgdmFsdWUgdGhhdCBoYXMgY2hhbmdlZCwgdXBkYXRlIHRoZSBtb3Rpb24gdmFsdWVcbiAgICAgICAgICAgICAqIG9yIGNyZWF0ZSBvbmUgaWYgaXQgZG9lc24ndCBleGlzdC4gV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgaWYgd2UncmVcbiAgICAgICAgICAgICAqIG5vdCBoYW5kbGluZyB0aGUgdmFsdWUgd2l0aCBvdXIgYW5pbWF0aW9uIHN0YXRlLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5oYXNWYWx1ZShrZXkpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nVmFsdWUgPSBlbGVtZW50LmdldFZhbHVlKGtleSk7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogT25seSB1cGRhdGUgdmFsdWVzIHRoYXQgYXJlbid0IGJlaW5nIGFuaW1hdGVkIG9yIGV2ZW4gbG9va2VkIGF0XG4gICAgICAgICAgICAgICAgIWV4aXN0aW5nVmFsdWUuaGFzQW5pbWF0ZWQgJiYgZXhpc3RpbmdWYWx1ZS5zZXQobmV4dFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuYWRkVmFsdWUoa2V5LCBtb3Rpb25WYWx1ZSgoX2EgPSBlbGVtZW50LmdldFN0YXRpY1ZhbHVlKGtleSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG5leHRWYWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEhhbmRsZSByZW1vdmVkIHZhbHVlc1xuICAgIGZvciAodmFyIGtleSBpbiBwcmV2KSB7XG4gICAgICAgIGlmIChuZXh0W2tleV0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlVmFsdWUoa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQ7XG59XG5cbmV4cG9ydCB7IHVwZGF0ZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyB9O1xuIiwiaW1wb3J0IHsgX19yZXN0LCBfX2Fzc2lnbiwgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgaW52YXJpYW50IH0gZnJvbSAnaGV5LWxpc3Rlbic7XG5cbmZ1bmN0aW9uIGlzQ1NTVmFyaWFibGUodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLnN0YXJ0c1dpdGgoXCJ2YXIoLS1cIik7XG59XG4vKipcbiAqIFBhcnNlIEZyYW1lcidzIHNwZWNpYWwgQ1NTIHZhcmlhYmxlIGZvcm1hdCBpbnRvIGEgQ1NTIHRva2VuIGFuZCBhIGZhbGxiYWNrLlxuICpcbiAqIGBgYFxuICogYHZhcigtLWZvbywgI2ZmZilgID0+IFtgLS1mb29gLCAnI2ZmZiddXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gY3VycmVudFxuICovXG52YXIgY3NzVmFyaWFibGVSZWdleCA9IC92YXJcXCgoLS1bYS16QS1aMC05LV9dKyksPyA/KFthLXpBLVowLTkgKCklIy4sLV0rKT9cXCkvO1xuZnVuY3Rpb24gcGFyc2VDU1NWYXJpYWJsZShjdXJyZW50KSB7XG4gICAgdmFyIG1hdGNoID0gY3NzVmFyaWFibGVSZWdleC5leGVjKGN1cnJlbnQpO1xuICAgIGlmICghbWF0Y2gpXG4gICAgICAgIHJldHVybiBbLF07XG4gICAgdmFyIF9hID0gX19yZWFkKG1hdGNoLCAzKSwgdG9rZW4gPSBfYVsxXSwgZmFsbGJhY2sgPSBfYVsyXTtcbiAgICByZXR1cm4gW3Rva2VuLCBmYWxsYmFja107XG59XG52YXIgbWF4RGVwdGggPSA0O1xuZnVuY3Rpb24gZ2V0VmFyaWFibGVWYWx1ZShjdXJyZW50LCBlbGVtZW50LCBkZXB0aCkge1xuICAgIGlmIChkZXB0aCA9PT0gdm9pZCAwKSB7IGRlcHRoID0gMTsgfVxuICAgIGludmFyaWFudChkZXB0aCA8PSBtYXhEZXB0aCwgXCJNYXggQ1NTIHZhcmlhYmxlIGZhbGxiYWNrIGRlcHRoIGRldGVjdGVkIGluIHByb3BlcnR5IFxcXCJcIi5jb25jYXQoY3VycmVudCwgXCJcXFwiLiBUaGlzIG1heSBpbmRpY2F0ZSBhIGNpcmN1bGFyIGZhbGxiYWNrIGRlcGVuZGVuY3kuXCIpKTtcbiAgICB2YXIgX2EgPSBfX3JlYWQocGFyc2VDU1NWYXJpYWJsZShjdXJyZW50KSwgMiksIHRva2VuID0gX2FbMF0sIGZhbGxiYWNrID0gX2FbMV07XG4gICAgLy8gTm8gQ1NTIHZhcmlhYmxlIGRldGVjdGVkXG4gICAgaWYgKCF0b2tlbilcbiAgICAgICAgcmV0dXJuO1xuICAgIC8vIEF0dGVtcHQgdG8gcmVhZCB0aGlzIENTUyB2YXJpYWJsZSBvZmYgdGhlIGVsZW1lbnRcbiAgICB2YXIgcmVzb2x2ZWQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHRva2VuKTtcbiAgICBpZiAocmVzb2x2ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVkLnRyaW0oKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNDU1NWYXJpYWJsZShmYWxsYmFjaykpIHtcbiAgICAgICAgLy8gVGhlIGZhbGxiYWNrIG1pZ2h0IGl0c2VsZiBiZSBhIENTUyB2YXJpYWJsZSwgaW4gd2hpY2ggY2FzZSB3ZSBhdHRlbXB0IHRvIHJlc29sdmUgaXQgdG9vLlxuICAgICAgICByZXR1cm4gZ2V0VmFyaWFibGVWYWx1ZShmYWxsYmFjaywgZWxlbWVudCwgZGVwdGggKyAxKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICB9XG59XG4vKipcbiAqIFJlc29sdmUgQ1NTIHZhcmlhYmxlcyBmcm9tXG4gKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVDU1NWYXJpYWJsZXModmlzdWFsRWxlbWVudCwgX2EsIHRyYW5zaXRpb25FbmQpIHtcbiAgICB2YXIgX2I7XG4gICAgdmFyIHRhcmdldCA9IF9fcmVzdChfYSwgW10pO1xuICAgIHZhciBlbGVtZW50ID0gdmlzdWFsRWxlbWVudC5nZXRJbnN0YW5jZSgpO1xuICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50KSlcbiAgICAgICAgcmV0dXJuIHsgdGFyZ2V0OiB0YXJnZXQsIHRyYW5zaXRpb25FbmQ6IHRyYW5zaXRpb25FbmQgfTtcbiAgICAvLyBJZiBgdHJhbnNpdGlvbkVuZGAgaXNuJ3QgYHVuZGVmaW5lZGAsIGNsb25lIGl0LiBXZSBjb3VsZCBjbG9uZSBgdGFyZ2V0YCBhbmQgYHRyYW5zaXRpb25FbmRgXG4gICAgLy8gb25seSBpZiB0aGV5IGNoYW5nZSBidXQgSSB0aGluayB0aGlzIHJlYWRzIGNsZWFyZXIgYW5kIHRoaXMgaXNuJ3QgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBwYXRoLlxuICAgIGlmICh0cmFuc2l0aW9uRW5kKSB7XG4gICAgICAgIHRyYW5zaXRpb25FbmQgPSBfX2Fzc2lnbih7fSwgdHJhbnNpdGlvbkVuZCk7XG4gICAgfVxuICAgIC8vIEdvIHRocm91Z2ggZXhpc3RpbmcgYE1vdGlvblZhbHVlYHMgYW5kIGVuc3VyZSBhbnkgZXhpc3RpbmcgQ1NTIHZhcmlhYmxlcyBhcmUgcmVzb2x2ZWRcbiAgICB2aXN1YWxFbGVtZW50LmZvckVhY2hWYWx1ZShmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIGN1cnJlbnQgPSB2YWx1ZS5nZXQoKTtcbiAgICAgICAgaWYgKCFpc0NTU1ZhcmlhYmxlKGN1cnJlbnQpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgcmVzb2x2ZWQgPSBnZXRWYXJpYWJsZVZhbHVlKGN1cnJlbnQsIGVsZW1lbnQpO1xuICAgICAgICBpZiAocmVzb2x2ZWQpXG4gICAgICAgICAgICB2YWx1ZS5zZXQocmVzb2x2ZWQpO1xuICAgIH0pO1xuICAgIC8vIEN5Y2xlIHRocm91Z2ggZXZlcnkgdGFyZ2V0IHByb3BlcnR5IGFuZCByZXNvbHZlIENTUyB2YXJpYWJsZXMuIEN1cnJlbnRseVxuICAgIC8vIHdlIG9ubHkgcmVhZCBzaW5nbGUtdmFyIHByb3BlcnRpZXMgbGlrZSBgdmFyKC0tZm9vKWAsIG5vdCBgY2FsYyh2YXIoLS1mb28pICsgMjBweClgXG4gICAgZm9yICh2YXIga2V5IGluIHRhcmdldCkge1xuICAgICAgICB2YXIgY3VycmVudCA9IHRhcmdldFtrZXldO1xuICAgICAgICBpZiAoIWlzQ1NTVmFyaWFibGUoY3VycmVudCkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgdmFyIHJlc29sdmVkID0gZ2V0VmFyaWFibGVWYWx1ZShjdXJyZW50LCBlbGVtZW50KTtcbiAgICAgICAgaWYgKCFyZXNvbHZlZClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAvLyBDbG9uZSB0YXJnZXQgaWYgaXQgaGFzbid0IGFscmVhZHkgYmVlblxuICAgICAgICB0YXJnZXRba2V5XSA9IHJlc29sdmVkO1xuICAgICAgICAvLyBJZiB0aGUgdXNlciBoYXNuJ3QgYWxyZWFkeSBzZXQgdGhpcyBrZXkgb24gYHRyYW5zaXRpb25FbmRgLCBzZXQgaXQgdG8gdGhlIHVucmVzb2x2ZWRcbiAgICAgICAgLy8gQ1NTIHZhcmlhYmxlLiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgYWZ0ZXIgdGhlIGFuaW1hdGlvbiB0aGUgY29tcG9uZW50IHdpbGwgcmVmbGVjdFxuICAgICAgICAvLyBjaGFuZ2VzIGluIHRoZSB2YWx1ZSBvZiB0aGUgQ1NTIHZhcmlhYmxlLlxuICAgICAgICBpZiAodHJhbnNpdGlvbkVuZClcbiAgICAgICAgICAgIChfYiA9IHRyYW5zaXRpb25FbmRba2V5XSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKHRyYW5zaXRpb25FbmRba2V5XSA9IGN1cnJlbnQpO1xuICAgIH1cbiAgICByZXR1cm4geyB0YXJnZXQ6IHRhcmdldCwgdHJhbnNpdGlvbkVuZDogdHJhbnNpdGlvbkVuZCB9O1xufVxuXG5leHBvcnQgeyBjc3NWYXJpYWJsZVJlZ2V4LCBwYXJzZUNTU1ZhcmlhYmxlLCByZXNvbHZlQ1NTVmFyaWFibGVzIH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiwgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgbnVtYmVyLCBweCB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcbmltcG9ydCB7IGlzS2V5ZnJhbWVzVGFyZ2V0IH0gZnJvbSAnLi4vLi4vLi4vYW5pbWF0aW9uL3V0aWxzL2lzLWtleWZyYW1lcy10YXJnZXQubWpzJztcbmltcG9ydCB7IGludmFyaWFudCB9IGZyb20gJ2hleS1saXN0ZW4nO1xuaW1wb3J0IHsgdHJhbnNmb3JtUHJvcHMgfSBmcm9tICcuLi8uLi9odG1sL3V0aWxzL3RyYW5zZm9ybS5tanMnO1xuaW1wb3J0IHsgZmluZERpbWVuc2lvblZhbHVlVHlwZSB9IGZyb20gJy4uL3ZhbHVlLXR5cGVzL2RpbWVuc2lvbnMubWpzJztcblxudmFyIHBvc2l0aW9uYWxLZXlzID0gbmV3IFNldChbXG4gICAgXCJ3aWR0aFwiLFxuICAgIFwiaGVpZ2h0XCIsXG4gICAgXCJ0b3BcIixcbiAgICBcImxlZnRcIixcbiAgICBcInJpZ2h0XCIsXG4gICAgXCJib3R0b21cIixcbiAgICBcInhcIixcbiAgICBcInlcIixcbl0pO1xudmFyIGlzUG9zaXRpb25hbEtleSA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHBvc2l0aW9uYWxLZXlzLmhhcyhrZXkpOyB9O1xudmFyIGhhc1Bvc2l0aW9uYWxLZXkgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRhcmdldCkuc29tZShpc1Bvc2l0aW9uYWxLZXkpO1xufTtcbnZhciBzZXRBbmRSZXNldFZlbG9jaXR5ID0gZnVuY3Rpb24gKHZhbHVlLCB0bykge1xuICAgIC8vIExvb2tzIG9kZCBidXQgc2V0dGluZyBpdCB0d2ljZSBkb2Vzbid0IHJlbmRlciwgaXQnbGwganVzdFxuICAgIC8vIHNldCBib3RoIHByZXYgYW5kIGN1cnJlbnQgdG8gdGhlIGxhdGVzdCB2YWx1ZVxuICAgIHZhbHVlLnNldCh0bywgZmFsc2UpO1xuICAgIHZhbHVlLnNldCh0byk7XG59O1xudmFyIGlzTnVtT3JQeFR5cGUgPSBmdW5jdGlvbiAodikge1xuICAgIHJldHVybiB2ID09PSBudW1iZXIgfHwgdiA9PT0gcHg7XG59O1xudmFyIEJvdW5kaW5nQm94RGltZW5zaW9uO1xuKGZ1bmN0aW9uIChCb3VuZGluZ0JveERpbWVuc2lvbikge1xuICAgIEJvdW5kaW5nQm94RGltZW5zaW9uW1wid2lkdGhcIl0gPSBcIndpZHRoXCI7XG4gICAgQm91bmRpbmdCb3hEaW1lbnNpb25bXCJoZWlnaHRcIl0gPSBcImhlaWdodFwiO1xuICAgIEJvdW5kaW5nQm94RGltZW5zaW9uW1wibGVmdFwiXSA9IFwibGVmdFwiO1xuICAgIEJvdW5kaW5nQm94RGltZW5zaW9uW1wicmlnaHRcIl0gPSBcInJpZ2h0XCI7XG4gICAgQm91bmRpbmdCb3hEaW1lbnNpb25bXCJ0b3BcIl0gPSBcInRvcFwiO1xuICAgIEJvdW5kaW5nQm94RGltZW5zaW9uW1wiYm90dG9tXCJdID0gXCJib3R0b21cIjtcbn0pKEJvdW5kaW5nQm94RGltZW5zaW9uIHx8IChCb3VuZGluZ0JveERpbWVuc2lvbiA9IHt9KSk7XG52YXIgZ2V0UG9zRnJvbU1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgsIHBvcykge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KG1hdHJpeC5zcGxpdChcIiwgXCIpW3Bvc10pO1xufTtcbnZhciBnZXRUcmFuc2xhdGVGcm9tTWF0cml4ID0gZnVuY3Rpb24gKHBvczIsIHBvczMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKF9iYm94LCBfYSkge1xuICAgICAgICB2YXIgdHJhbnNmb3JtID0gX2EudHJhbnNmb3JtO1xuICAgICAgICBpZiAodHJhbnNmb3JtID09PSBcIm5vbmVcIiB8fCAhdHJhbnNmb3JtKVxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIHZhciBtYXRyaXgzZCA9IHRyYW5zZm9ybS5tYXRjaCgvXm1hdHJpeDNkXFwoKC4rKVxcKSQvKTtcbiAgICAgICAgaWYgKG1hdHJpeDNkKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UG9zRnJvbU1hdHJpeChtYXRyaXgzZFsxXSwgcG9zMyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbWF0cml4ID0gdHJhbnNmb3JtLm1hdGNoKC9ebWF0cml4XFwoKC4rKVxcKSQvKTtcbiAgICAgICAgICAgIGlmIChtYXRyaXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UG9zRnJvbU1hdHJpeChtYXRyaXhbMV0sIHBvczIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufTtcbnZhciB0cmFuc2Zvcm1LZXlzID0gbmV3IFNldChbXCJ4XCIsIFwieVwiLCBcInpcIl0pO1xudmFyIG5vblRyYW5zbGF0aW9uYWxUcmFuc2Zvcm1LZXlzID0gdHJhbnNmb3JtUHJvcHMuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuICF0cmFuc2Zvcm1LZXlzLmhhcyhrZXkpOyB9KTtcbmZ1bmN0aW9uIHJlbW92ZU5vblRyYW5zbGF0aW9uYWxUcmFuc2Zvcm0odmlzdWFsRWxlbWVudCkge1xuICAgIHZhciByZW1vdmVkVHJhbnNmb3JtcyA9IFtdO1xuICAgIG5vblRyYW5zbGF0aW9uYWxUcmFuc2Zvcm1LZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSB2aXN1YWxFbGVtZW50LmdldFZhbHVlKGtleSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZW1vdmVkVHJhbnNmb3Jtcy5wdXNoKFtrZXksIHZhbHVlLmdldCgpXSk7XG4gICAgICAgICAgICB2YWx1ZS5zZXQoa2V5LnN0YXJ0c1dpdGgoXCJzY2FsZVwiKSA/IDEgOiAwKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIEFwcGx5IGNoYW5nZXMgdG8gZWxlbWVudCBiZWZvcmUgbWVhc3VyZW1lbnRcbiAgICBpZiAocmVtb3ZlZFRyYW5zZm9ybXMubGVuZ3RoKVxuICAgICAgICB2aXN1YWxFbGVtZW50LnN5bmNSZW5kZXIoKTtcbiAgICByZXR1cm4gcmVtb3ZlZFRyYW5zZm9ybXM7XG59XG52YXIgcG9zaXRpb25hbFZhbHVlcyA9IHtcbiAgICAvLyBEaW1lbnNpb25zXG4gICAgd2lkdGg6IGZ1bmN0aW9uIChfYSwgX2IpIHtcbiAgICAgICAgdmFyIHggPSBfYS54O1xuICAgICAgICB2YXIgX2MgPSBfYi5wYWRkaW5nTGVmdCwgcGFkZGluZ0xlZnQgPSBfYyA9PT0gdm9pZCAwID8gXCIwXCIgOiBfYywgX2QgPSBfYi5wYWRkaW5nUmlnaHQsIHBhZGRpbmdSaWdodCA9IF9kID09PSB2b2lkIDAgPyBcIjBcIiA6IF9kO1xuICAgICAgICByZXR1cm4geC5tYXggLSB4Lm1pbiAtIHBhcnNlRmxvYXQocGFkZGluZ0xlZnQpIC0gcGFyc2VGbG9hdChwYWRkaW5nUmlnaHQpO1xuICAgIH0sXG4gICAgaGVpZ2h0OiBmdW5jdGlvbiAoX2EsIF9iKSB7XG4gICAgICAgIHZhciB5ID0gX2EueTtcbiAgICAgICAgdmFyIF9jID0gX2IucGFkZGluZ1RvcCwgcGFkZGluZ1RvcCA9IF9jID09PSB2b2lkIDAgPyBcIjBcIiA6IF9jLCBfZCA9IF9iLnBhZGRpbmdCb3R0b20sIHBhZGRpbmdCb3R0b20gPSBfZCA9PT0gdm9pZCAwID8gXCIwXCIgOiBfZDtcbiAgICAgICAgcmV0dXJuIHkubWF4IC0geS5taW4gLSBwYXJzZUZsb2F0KHBhZGRpbmdUb3ApIC0gcGFyc2VGbG9hdChwYWRkaW5nQm90dG9tKTtcbiAgICB9LFxuICAgIHRvcDogZnVuY3Rpb24gKF9iYm94LCBfYSkge1xuICAgICAgICB2YXIgdG9wID0gX2EudG9wO1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh0b3ApO1xuICAgIH0sXG4gICAgbGVmdDogZnVuY3Rpb24gKF9iYm94LCBfYSkge1xuICAgICAgICB2YXIgbGVmdCA9IF9hLmxlZnQ7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KGxlZnQpO1xuICAgIH0sXG4gICAgYm90dG9tOiBmdW5jdGlvbiAoX2EsIF9iKSB7XG4gICAgICAgIHZhciB5ID0gX2EueTtcbiAgICAgICAgdmFyIHRvcCA9IF9iLnRvcDtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodG9wKSArICh5Lm1heCAtIHkubWluKTtcbiAgICB9LFxuICAgIHJpZ2h0OiBmdW5jdGlvbiAoX2EsIF9iKSB7XG4gICAgICAgIHZhciB4ID0gX2EueDtcbiAgICAgICAgdmFyIGxlZnQgPSBfYi5sZWZ0O1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChsZWZ0KSArICh4Lm1heCAtIHgubWluKTtcbiAgICB9LFxuICAgIC8vIFRyYW5zZm9ybVxuICAgIHg6IGdldFRyYW5zbGF0ZUZyb21NYXRyaXgoNCwgMTMpLFxuICAgIHk6IGdldFRyYW5zbGF0ZUZyb21NYXRyaXgoNSwgMTQpLFxufTtcbnZhciBjb252ZXJ0Q2hhbmdlZFZhbHVlVHlwZXMgPSBmdW5jdGlvbiAodGFyZ2V0LCB2aXN1YWxFbGVtZW50LCBjaGFuZ2VkS2V5cykge1xuICAgIHZhciBvcmlnaW5CYm94ID0gdmlzdWFsRWxlbWVudC5tZWFzdXJlVmlld3BvcnRCb3goKTtcbiAgICB2YXIgZWxlbWVudCA9IHZpc3VhbEVsZW1lbnQuZ2V0SW5zdGFuY2UoKTtcbiAgICB2YXIgZWxlbWVudENvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAgIHZhciBkaXNwbGF5ID0gZWxlbWVudENvbXB1dGVkU3R5bGUuZGlzcGxheTtcbiAgICB2YXIgb3JpZ2luID0ge307XG4gICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgY3VycmVudGx5IHNldCB0byBkaXNwbGF5OiBcIm5vbmVcIiwgbWFrZSBpdCB2aXNpYmxlIGJlZm9yZVxuICAgIC8vIG1lYXN1cmluZyB0aGUgdGFyZ2V0IGJvdW5kaW5nIGJveFxuICAgIGlmIChkaXNwbGF5ID09PSBcIm5vbmVcIikge1xuICAgICAgICB2aXN1YWxFbGVtZW50LnNldFN0YXRpY1ZhbHVlKFwiZGlzcGxheVwiLCB0YXJnZXQuZGlzcGxheSB8fCBcImJsb2NrXCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWNvcmQgb3JpZ2lucyBiZWZvcmUgd2UgcmVuZGVyIGFuZCB1cGRhdGUgc3R5bGVzXG4gICAgICovXG4gICAgY2hhbmdlZEtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIG9yaWdpbltrZXldID0gcG9zaXRpb25hbFZhbHVlc1trZXldKG9yaWdpbkJib3gsIGVsZW1lbnRDb21wdXRlZFN0eWxlKTtcbiAgICB9KTtcbiAgICAvLyBBcHBseSB0aGUgbGF0ZXN0IHZhbHVlcyAoYXMgc2V0IGluIGNoZWNrQW5kQ29udmVydENoYW5nZWRWYWx1ZVR5cGVzKVxuICAgIHZpc3VhbEVsZW1lbnQuc3luY1JlbmRlcigpO1xuICAgIHZhciB0YXJnZXRCYm94ID0gdmlzdWFsRWxlbWVudC5tZWFzdXJlVmlld3BvcnRCb3goKTtcbiAgICBjaGFuZ2VkS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgLy8gUmVzdG9yZSBzdHlsZXMgdG8gdGhlaXIgKipjYWxjdWxhdGVkIGNvbXB1dGVkIHN0eWxlKiosIG5vdCB0aGVpciBhY3R1YWxcbiAgICAgICAgLy8gb3JpZ2luYWxseSBzZXQgc3R5bGUuIFRoaXMgYWxsb3dzIHVzIHRvIGFuaW1hdGUgYmV0d2VlbiBlcXVpdmFsZW50IHBpeGVsIHVuaXRzLlxuICAgICAgICB2YXIgdmFsdWUgPSB2aXN1YWxFbGVtZW50LmdldFZhbHVlKGtleSk7XG4gICAgICAgIHNldEFuZFJlc2V0VmVsb2NpdHkodmFsdWUsIG9yaWdpbltrZXldKTtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBwb3NpdGlvbmFsVmFsdWVzW2tleV0odGFyZ2V0QmJveCwgZWxlbWVudENvbXB1dGVkU3R5bGUpO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQ7XG59O1xudmFyIGNoZWNrQW5kQ29udmVydENoYW5nZWRWYWx1ZVR5cGVzID0gZnVuY3Rpb24gKHZpc3VhbEVsZW1lbnQsIHRhcmdldCwgb3JpZ2luLCB0cmFuc2l0aW9uRW5kKSB7XG4gICAgaWYgKG9yaWdpbiA9PT0gdm9pZCAwKSB7IG9yaWdpbiA9IHt9OyB9XG4gICAgaWYgKHRyYW5zaXRpb25FbmQgPT09IHZvaWQgMCkgeyB0cmFuc2l0aW9uRW5kID0ge307IH1cbiAgICB0YXJnZXQgPSBfX2Fzc2lnbih7fSwgdGFyZ2V0KTtcbiAgICB0cmFuc2l0aW9uRW5kID0gX19hc3NpZ24oe30sIHRyYW5zaXRpb25FbmQpO1xuICAgIHZhciB0YXJnZXRQb3NpdGlvbmFsS2V5cyA9IE9iamVjdC5rZXlzKHRhcmdldCkuZmlsdGVyKGlzUG9zaXRpb25hbEtleSk7XG4gICAgLy8gV2Ugd2FudCB0byByZW1vdmUgYW55IHRyYW5zZm9ybSB2YWx1ZXMgdGhhdCBjb3VsZCBhZmZlY3QgdGhlIGVsZW1lbnQncyBib3VuZGluZyBib3ggYmVmb3JlXG4gICAgLy8gaXQncyBtZWFzdXJlZC4gV2UnbGwgcmVhcHBseSB0aGVzZSBsYXRlci5cbiAgICB2YXIgcmVtb3ZlZFRyYW5zZm9ybVZhbHVlcyA9IFtdO1xuICAgIHZhciBoYXNBdHRlbXB0ZWRUb1JlbW92ZVRyYW5zZm9ybVZhbHVlcyA9IGZhbHNlO1xuICAgIHZhciBjaGFuZ2VkVmFsdWVUeXBlS2V5cyA9IFtdO1xuICAgIHRhcmdldFBvc2l0aW9uYWxLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSB2aXN1YWxFbGVtZW50LmdldFZhbHVlKGtleSk7XG4gICAgICAgIGlmICghdmlzdWFsRWxlbWVudC5oYXNWYWx1ZShrZXkpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgZnJvbSA9IG9yaWdpbltrZXldO1xuICAgICAgICB2YXIgZnJvbVR5cGUgPSBmaW5kRGltZW5zaW9uVmFsdWVUeXBlKGZyb20pO1xuICAgICAgICB2YXIgdG8gPSB0YXJnZXRba2V5XTtcbiAgICAgICAgdmFyIHRvVHlwZTtcbiAgICAgICAgLy8gVE9ETzogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBiYXNpY2FsbHkgdGhyb3dzIGFuIGVycm9yXG4gICAgICAgIC8vIGlmIHlvdSB0cnkgYW5kIGRvIHZhbHVlIGNvbnZlcnNpb24gdmlhIGtleWZyYW1lcy4gVGhlcmUncyBwcm9iYWJseVxuICAgICAgICAvLyBhIHdheSBvZiBkb2luZyB0aGlzIGJ1dCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHdvdWxkIG5lZWQgZ3JlYXRlciBzY3J1dGlueSxcbiAgICAgICAgLy8gYXMgaXQnZCBiZSBkb2luZyBtdWx0aXBsZSByZXNpemUtcmVtZWFzdXJlIG9wZXJhdGlvbnMuXG4gICAgICAgIGlmIChpc0tleWZyYW1lc1RhcmdldCh0bykpIHtcbiAgICAgICAgICAgIHZhciBudW1LZXlmcmFtZXMgPSB0by5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZnJvbUluZGV4ID0gdG9bMF0gPT09IG51bGwgPyAxIDogMDtcbiAgICAgICAgICAgIGZyb20gPSB0b1tmcm9tSW5kZXhdO1xuICAgICAgICAgICAgZnJvbVR5cGUgPSBmaW5kRGltZW5zaW9uVmFsdWVUeXBlKGZyb20pO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGZyb21JbmRleDsgaSA8IG51bUtleWZyYW1lczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0b1R5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9UeXBlID0gZmluZERpbWVuc2lvblZhbHVlVHlwZSh0b1tpXSk7XG4gICAgICAgICAgICAgICAgICAgIGludmFyaWFudCh0b1R5cGUgPT09IGZyb21UeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAoaXNOdW1PclB4VHlwZShmcm9tVHlwZSkgJiYgaXNOdW1PclB4VHlwZSh0b1R5cGUpKSwgXCJLZXlmcmFtZXMgbXVzdCBiZSBvZiB0aGUgc2FtZSBkaW1lbnNpb24gYXMgdGhlIGN1cnJlbnQgdmFsdWVcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbnZhcmlhbnQoZmluZERpbWVuc2lvblZhbHVlVHlwZSh0b1tpXSkgPT09IHRvVHlwZSwgXCJBbGwga2V5ZnJhbWVzIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0b1R5cGUgPSBmaW5kRGltZW5zaW9uVmFsdWVUeXBlKHRvKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZnJvbVR5cGUgIT09IHRvVHlwZSkge1xuICAgICAgICAgICAgLy8gSWYgdGhleSdyZSBib3RoIGp1c3QgbnVtYmVyIG9yIHB4LCBjb252ZXJ0IHRoZW0gYm90aCB0byBudW1iZXJzIHJhdGhlciB0aGFuXG4gICAgICAgICAgICAvLyByZWx5aW5nIG9uIHJlc2l6ZS9yZW1lYXN1cmUgdG8gY29udmVydCAod2hpY2ggaXMgd2FzdGVmdWwgaW4gdGhpcyBzaXR1YXRpb24pXG4gICAgICAgICAgICBpZiAoaXNOdW1PclB4VHlwZShmcm9tVHlwZSkgJiYgaXNOdW1PclB4VHlwZSh0b1R5cGUpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSB2YWx1ZS5nZXQoKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUuc2V0KHBhcnNlRmxvYXQoY3VycmVudCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRvID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gcGFyc2VGbG9hdCh0byk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodG8pICYmIHRvVHlwZSA9PT0gcHgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB0by5tYXAocGFyc2VGbG9hdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoKGZyb21UeXBlID09PSBudWxsIHx8IGZyb21UeXBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBmcm9tVHlwZS50cmFuc2Zvcm0pICYmXG4gICAgICAgICAgICAgICAgKHRvVHlwZSA9PT0gbnVsbCB8fCB0b1R5cGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRvVHlwZS50cmFuc2Zvcm0pICYmXG4gICAgICAgICAgICAgICAgKGZyb20gPT09IDAgfHwgdG8gPT09IDApKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgb25lIG9yIHRoZSBvdGhlciB2YWx1ZSBpcyAwLCBpdCdzIHNhZmUgdG8gY29lcmNlIGl0IHRvIHRoZVxuICAgICAgICAgICAgICAgIC8vIHR5cGUgb2YgdGhlIG90aGVyIHdpdGhvdXQgbWVhc3VyZW1lbnRcbiAgICAgICAgICAgICAgICBpZiAoZnJvbSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5zZXQodG9UeXBlLnRyYW5zZm9ybShmcm9tKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IGZyb21UeXBlLnRyYW5zZm9ybSh0byk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgZ29pbmcgdG8gZG8gdmFsdWUgY29udmVyc2lvbiB2aWEgRE9NIG1lYXN1cmVtZW50cywgd2UgZmlyc3RcbiAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIHJlbW92ZSBub24tcG9zaXRpb25hbCB0cmFuc2Zvcm0gdmFsdWVzIHRoYXQgY291bGQgYWZmZWN0IHRoZSBiYm94IG1lYXN1cmVtZW50cy5cbiAgICAgICAgICAgICAgICBpZiAoIWhhc0F0dGVtcHRlZFRvUmVtb3ZlVHJhbnNmb3JtVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWRUcmFuc2Zvcm1WYWx1ZXMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTm9uVHJhbnNsYXRpb25hbFRyYW5zZm9ybSh2aXN1YWxFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaGFzQXR0ZW1wdGVkVG9SZW1vdmVUcmFuc2Zvcm1WYWx1ZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjaGFuZ2VkVmFsdWVUeXBlS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbkVuZFtrZXldID1cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbkVuZFtrZXldICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdHJhbnNpdGlvbkVuZFtrZXldXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRhcmdldFtrZXldO1xuICAgICAgICAgICAgICAgIHNldEFuZFJlc2V0VmVsb2NpdHkodmFsdWUsIHRvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChjaGFuZ2VkVmFsdWVUeXBlS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIHNjcm9sbFlfMSA9IGNoYW5nZWRWYWx1ZVR5cGVLZXlzLmluZGV4T2YoXCJoZWlnaHRcIikgPj0gMFxuICAgICAgICAgICAgPyB3aW5kb3cucGFnZVlPZmZzZXRcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgdmFyIGNvbnZlcnRlZFRhcmdldCA9IGNvbnZlcnRDaGFuZ2VkVmFsdWVUeXBlcyh0YXJnZXQsIHZpc3VhbEVsZW1lbnQsIGNoYW5nZWRWYWx1ZVR5cGVLZXlzKTtcbiAgICAgICAgLy8gSWYgd2UgcmVtb3ZlZCB0cmFuc2Zvcm0gdmFsdWVzLCByZWFwcGx5IHRoZW0gYmVmb3JlIHRoZSBuZXh0IHJlbmRlclxuICAgICAgICBpZiAocmVtb3ZlZFRyYW5zZm9ybVZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJlbW92ZWRUcmFuc2Zvcm1WYWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2IgPSBfX3JlYWQoX2EsIDIpLCBrZXkgPSBfYlswXSwgdmFsdWUgPSBfYlsxXTtcbiAgICAgICAgICAgICAgICB2aXN1YWxFbGVtZW50LmdldFZhbHVlKGtleSkuc2V0KHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlYXBwbHkgb3JpZ2luYWwgdmFsdWVzXG4gICAgICAgIHZpc3VhbEVsZW1lbnQuc3luY1JlbmRlcigpO1xuICAgICAgICAvLyBSZXN0b3JlIHNjcm9sbCBwb3NpdGlvblxuICAgICAgICBpZiAoc2Nyb2xsWV8xICE9PSBudWxsKVxuICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiBzY3JvbGxZXzEgfSk7XG4gICAgICAgIHJldHVybiB7IHRhcmdldDogY29udmVydGVkVGFyZ2V0LCB0cmFuc2l0aW9uRW5kOiB0cmFuc2l0aW9uRW5kIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4geyB0YXJnZXQ6IHRhcmdldCwgdHJhbnNpdGlvbkVuZDogdHJhbnNpdGlvbkVuZCB9O1xuICAgIH1cbn07XG4vKipcbiAqIENvbnZlcnQgdmFsdWUgdHlwZXMgZm9yIHgveS93aWR0aC9oZWlnaHQvdG9wL2xlZnQvYm90dG9tL3JpZ2h0XG4gKlxuICogQWxsb3dzIGFuaW1hdGlvbiBiZXR3ZWVuIGAnYXV0bydgIC0+IGAnMTAwJSdgIG9yIGAwYCAtPiBgJ2NhbGMoNTAlIC0gMTB2dyknYFxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiB1bml0Q29udmVyc2lvbih2aXN1YWxFbGVtZW50LCB0YXJnZXQsIG9yaWdpbiwgdHJhbnNpdGlvbkVuZCkge1xuICAgIHJldHVybiBoYXNQb3NpdGlvbmFsS2V5KHRhcmdldClcbiAgICAgICAgPyBjaGVja0FuZENvbnZlcnRDaGFuZ2VkVmFsdWVUeXBlcyh2aXN1YWxFbGVtZW50LCB0YXJnZXQsIG9yaWdpbiwgdHJhbnNpdGlvbkVuZClcbiAgICAgICAgOiB7IHRhcmdldDogdGFyZ2V0LCB0cmFuc2l0aW9uRW5kOiB0cmFuc2l0aW9uRW5kIH07XG59XG5cbmV4cG9ydCB7IEJvdW5kaW5nQm94RGltZW5zaW9uLCBwb3NpdGlvbmFsVmFsdWVzLCB1bml0Q29udmVyc2lvbiB9O1xuIiwiaW1wb3J0IHsgcmVzb2x2ZUNTU1ZhcmlhYmxlcyB9IGZyb20gJy4vY3NzLXZhcmlhYmxlcy1jb252ZXJzaW9uLm1qcyc7XG5pbXBvcnQgeyB1bml0Q29udmVyc2lvbiB9IGZyb20gJy4vdW5pdC1jb252ZXJzaW9uLm1qcyc7XG5cbi8qKlxuICogUGFyc2UgYSBET00gdmFyaWFudCB0byBtYWtlIGl0IGFuaW1hdGFibGUuIFRoaXMgaW52b2x2ZXMgcmVzb2x2aW5nIENTUyB2YXJpYWJsZXNcbiAqIGFuZCBlbnN1cmluZyBhbmltYXRpb25zIGxpa2UgXCIyMCVcIiA9PiBcImNhbGMoNTB2dylcIiBhcmUgcGVyZm9ybWVkIGluIHBpeGVscy5cbiAqL1xudmFyIHBhcnNlRG9tVmFyaWFudCA9IGZ1bmN0aW9uICh2aXN1YWxFbGVtZW50LCB0YXJnZXQsIG9yaWdpbiwgdHJhbnNpdGlvbkVuZCkge1xuICAgIHZhciByZXNvbHZlZCA9IHJlc29sdmVDU1NWYXJpYWJsZXModmlzdWFsRWxlbWVudCwgdGFyZ2V0LCB0cmFuc2l0aW9uRW5kKTtcbiAgICB0YXJnZXQgPSByZXNvbHZlZC50YXJnZXQ7XG4gICAgdHJhbnNpdGlvbkVuZCA9IHJlc29sdmVkLnRyYW5zaXRpb25FbmQ7XG4gICAgcmV0dXJuIHVuaXRDb252ZXJzaW9uKHZpc3VhbEVsZW1lbnQsIHRhcmdldCwgb3JpZ2luLCB0cmFuc2l0aW9uRW5kKTtcbn07XG5cbmV4cG9ydCB7IHBhcnNlRG9tVmFyaWFudCB9O1xuIiwiaW1wb3J0IHsgX19yZXN0LCBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IHZpc3VhbEVsZW1lbnQgfSBmcm9tICcuLi9pbmRleC5tanMnO1xuaW1wb3J0IHsgZ2V0T3JpZ2luLCBjaGVja1RhcmdldEZvck5ld1ZhbHVlcyB9IGZyb20gJy4uL3V0aWxzL3NldHRlcnMubWpzJztcbmltcG9ydCB7IGJ1aWxkSFRNTFN0eWxlcyB9IGZyb20gJy4vdXRpbHMvYnVpbGQtc3R5bGVzLm1qcyc7XG5pbXBvcnQgeyBpc0NTU1ZhcmlhYmxlIH0gZnJvbSAnLi4vZG9tL3V0aWxzL2lzLWNzcy12YXJpYWJsZS5tanMnO1xuaW1wb3J0IHsgcGFyc2VEb21WYXJpYW50IH0gZnJvbSAnLi4vZG9tL3V0aWxzL3BhcnNlLWRvbS12YXJpYW50Lm1qcyc7XG5pbXBvcnQgeyBpc1RyYW5zZm9ybVByb3AgfSBmcm9tICcuL3V0aWxzL3RyYW5zZm9ybS5tanMnO1xuaW1wb3J0IHsgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzIH0gZnJvbSAnLi91dGlscy9zY3JhcGUtbW90aW9uLXZhbHVlcy5tanMnO1xuaW1wb3J0IHsgcmVuZGVySFRNTCB9IGZyb20gJy4vdXRpbHMvcmVuZGVyLm1qcyc7XG5pbXBvcnQgeyBnZXREZWZhdWx0VmFsdWVUeXBlIH0gZnJvbSAnLi4vZG9tL3ZhbHVlLXR5cGVzL2RlZmF1bHRzLm1qcyc7XG5pbXBvcnQgeyBtZWFzdXJlVmlld3BvcnRCb3ggfSBmcm9tICcuLi8uLi9wcm9qZWN0aW9uL3V0aWxzL21lYXN1cmUubWpzJztcblxuZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gICAgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufVxudmFyIGh0bWxDb25maWcgPSB7XG4gICAgdHJlZVR5cGU6IFwiZG9tXCIsXG4gICAgcmVhZFZhbHVlRnJvbUluc3RhbmNlOiBmdW5jdGlvbiAoZG9tRWxlbWVudCwga2V5KSB7XG4gICAgICAgIGlmIChpc1RyYW5zZm9ybVByb3Aoa2V5KSkge1xuICAgICAgICAgICAgdmFyIGRlZmF1bHRUeXBlID0gZ2V0RGVmYXVsdFZhbHVlVHlwZShrZXkpO1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRUeXBlID8gZGVmYXVsdFR5cGUuZGVmYXVsdCB8fCAwIDogMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShkb21FbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybiAoKGlzQ1NTVmFyaWFibGUoa2V5KVxuICAgICAgICAgICAgICAgID8gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGtleSlcbiAgICAgICAgICAgICAgICA6IGNvbXB1dGVkU3R5bGVba2V5XSkgfHwgMCk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHNvcnROb2RlUG9zaXRpb246IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiByZXR1cm5zIGEgYml0bWFzaywgYnkgdXNpbmcgdGhlIGJpdHdpc2UgJlxuICAgICAgICAgKiB3ZSdyZSByZXR1cm5pbmcgdHJ1ZSBpZiAyIGluIHRoYXQgYml0bWFzayBpcyBzZXQgdG8gdHJ1ZS4gMiBpcyBzZXRcbiAgICAgICAgICogdG8gdHJ1ZSBpZiBiIHByZWNlZWRzIGEuXG4gICAgICAgICAqL1xuICAgICAgICByZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDIgPyAxIDogLTE7XG4gICAgfSxcbiAgICBnZXRCYXNlVGFyZ2V0OiBmdW5jdGlvbiAocHJvcHMsIGtleSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSBwcm9wcy5zdHlsZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW2tleV07XG4gICAgfSxcbiAgICBtZWFzdXJlVmlld3BvcnRCb3g6IGZ1bmN0aW9uIChlbGVtZW50LCBfYSkge1xuICAgICAgICB2YXIgdHJhbnNmb3JtUGFnZVBvaW50ID0gX2EudHJhbnNmb3JtUGFnZVBvaW50O1xuICAgICAgICByZXR1cm4gbWVhc3VyZVZpZXdwb3J0Qm94KGVsZW1lbnQsIHRyYW5zZm9ybVBhZ2VQb2ludCk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBSZXNldCB0aGUgdHJhbnNmb3JtIG9uIHRoZSBjdXJyZW50IEVsZW1lbnQuIFRoaXMgaXMgY2FsbGVkIGFzIHBhcnRcbiAgICAgKiBvZiBhIGJhdGNoZWQgcHJvY2VzcyBhY3Jvc3MgdGhlIGVudGlyZSBsYXlvdXQgdHJlZS4gVG8gcmVtb3ZlIHRoaXMgd3JpdGVcbiAgICAgKiBjeWNsZSBpdCdkIGJlIGludGVyZXN0aW5nIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIFwidW5kb1wiIGFsbCB0aGUgY3VycmVudFxuICAgICAqIGxheW91dCB0cmFuc2Zvcm1zIHVwIHRoZSB0cmVlIGluIHRoZSBzYW1lIHdheSB0aGlzLmdldEJvdW5kaW5nQm94V2l0aG91dFRyYW5zZm9ybXNcbiAgICAgKiB3b3Jrc1xuICAgICAqL1xuICAgIHJlc2V0VHJhbnNmb3JtOiBmdW5jdGlvbiAoZWxlbWVudCwgZG9tRWxlbWVudCwgcHJvcHMpIHtcbiAgICAgICAgdmFyIHRyYW5zZm9ybVRlbXBsYXRlID0gcHJvcHMudHJhbnNmb3JtVGVtcGxhdGU7XG4gICAgICAgIGRvbUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtVGVtcGxhdGVcbiAgICAgICAgICAgID8gdHJhbnNmb3JtVGVtcGxhdGUoe30sIFwiXCIpXG4gICAgICAgICAgICA6IFwibm9uZVwiO1xuICAgICAgICAvLyBFbnN1cmUgdGhhdCB3aGF0ZXZlciBoYXBwZW5zIG5leHQsIHdlIHJlc3RvcmUgb3VyIHRyYW5zZm9ybSBvbiB0aGUgbmV4dCBmcmFtZVxuICAgICAgICBlbGVtZW50LnNjaGVkdWxlUmVuZGVyKCk7XG4gICAgfSxcbiAgICByZXN0b3JlVHJhbnNmb3JtOiBmdW5jdGlvbiAoaW5zdGFuY2UsIG11dGFibGVTdGF0ZSkge1xuICAgICAgICBpbnN0YW5jZS5zdHlsZS50cmFuc2Zvcm0gPSBtdXRhYmxlU3RhdGUuc3R5bGUudHJhbnNmb3JtO1xuICAgIH0sXG4gICAgcmVtb3ZlVmFsdWVGcm9tUmVuZGVyU3RhdGU6IGZ1bmN0aW9uIChrZXksIF9hKSB7XG4gICAgICAgIHZhciB2YXJzID0gX2EudmFycywgc3R5bGUgPSBfYS5zdHlsZTtcbiAgICAgICAgZGVsZXRlIHZhcnNba2V5XTtcbiAgICAgICAgZGVsZXRlIHN0eWxlW2tleV07XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBFbnN1cmUgdGhhdCBIVE1MIGFuZCBGcmFtZXItc3BlY2lmaWMgdmFsdWUgdHlwZXMgbGlrZSBgcHhgLT5gJWAgYW5kIGBDb2xvcmBcbiAgICAgKiBjYW4gYmUgYW5pbWF0ZWQgYnkgTW90aW9uLlxuICAgICAqL1xuICAgIG1ha2VUYXJnZXRBbmltYXRhYmxlOiBmdW5jdGlvbiAoZWxlbWVudCwgX2EsIF9iLCBpc01vdW50ZWQpIHtcbiAgICAgICAgdmFyIHRyYW5zZm9ybVZhbHVlcyA9IF9iLnRyYW5zZm9ybVZhbHVlcztcbiAgICAgICAgaWYgKGlzTW91bnRlZCA9PT0gdm9pZCAwKSB7IGlzTW91bnRlZCA9IHRydWU7IH1cbiAgICAgICAgdmFyIHRyYW5zaXRpb24gPSBfYS50cmFuc2l0aW9uLCB0cmFuc2l0aW9uRW5kID0gX2EudHJhbnNpdGlvbkVuZCwgdGFyZ2V0ID0gX19yZXN0KF9hLCBbXCJ0cmFuc2l0aW9uXCIsIFwidHJhbnNpdGlvbkVuZFwiXSk7XG4gICAgICAgIHZhciBvcmlnaW4gPSBnZXRPcmlnaW4odGFyZ2V0LCB0cmFuc2l0aW9uIHx8IHt9LCBlbGVtZW50KTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIEZyYW1lciBoYXMgcHJvdmlkZWQgYSBmdW5jdGlvbiB0byBjb252ZXJ0IGBDb2xvcmAgZXRjIHZhbHVlIHR5cGVzLCBjb252ZXJ0IHRoZW1cbiAgICAgICAgICovXG4gICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZXMpIHtcbiAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uRW5kKVxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb25FbmQgPSB0cmFuc2Zvcm1WYWx1ZXModHJhbnNpdGlvbkVuZCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0KVxuICAgICAgICAgICAgICAgIHRhcmdldCA9IHRyYW5zZm9ybVZhbHVlcyh0YXJnZXQpO1xuICAgICAgICAgICAgaWYgKG9yaWdpbilcbiAgICAgICAgICAgICAgICBvcmlnaW4gPSB0cmFuc2Zvcm1WYWx1ZXMob3JpZ2luKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNNb3VudGVkKSB7XG4gICAgICAgICAgICBjaGVja1RhcmdldEZvck5ld1ZhbHVlcyhlbGVtZW50LCB0YXJnZXQsIG9yaWdpbik7XG4gICAgICAgICAgICB2YXIgcGFyc2VkID0gcGFyc2VEb21WYXJpYW50KGVsZW1lbnQsIHRhcmdldCwgb3JpZ2luLCB0cmFuc2l0aW9uRW5kKTtcbiAgICAgICAgICAgIHRyYW5zaXRpb25FbmQgPSBwYXJzZWQudHJhbnNpdGlvbkVuZDtcbiAgICAgICAgICAgIHRhcmdldCA9IHBhcnNlZC50YXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9fYXNzaWduKHsgdHJhbnNpdGlvbjogdHJhbnNpdGlvbiwgdHJhbnNpdGlvbkVuZDogdHJhbnNpdGlvbkVuZCB9LCB0YXJnZXQpO1xuICAgIH0sXG4gICAgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzOiBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMsXG4gICAgYnVpbGQ6IGZ1bmN0aW9uIChlbGVtZW50LCByZW5kZXJTdGF0ZSwgbGF0ZXN0VmFsdWVzLCBvcHRpb25zLCBwcm9wcykge1xuICAgICAgICBpZiAoZWxlbWVudC5pc1Zpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVuZGVyU3RhdGUuc3R5bGUudmlzaWJpbGl0eSA9IGVsZW1lbnQuaXNWaXNpYmxlXG4gICAgICAgICAgICAgICAgPyBcInZpc2libGVcIlxuICAgICAgICAgICAgICAgIDogXCJoaWRkZW5cIjtcbiAgICAgICAgfVxuICAgICAgICBidWlsZEhUTUxTdHlsZXMocmVuZGVyU3RhdGUsIGxhdGVzdFZhbHVlcywgb3B0aW9ucywgcHJvcHMudHJhbnNmb3JtVGVtcGxhdGUpO1xuICAgIH0sXG4gICAgcmVuZGVyOiByZW5kZXJIVE1MLFxufTtcbnZhciBodG1sVmlzdWFsRWxlbWVudCA9IHZpc3VhbEVsZW1lbnQoaHRtbENvbmZpZyk7XG5cbmV4cG9ydCB7IGdldENvbXB1dGVkU3R5bGUsIGh0bWxDb25maWcsIGh0bWxWaXN1YWxFbGVtZW50IH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IHZpc3VhbEVsZW1lbnQgfSBmcm9tICcuLi9pbmRleC5tanMnO1xuaW1wb3J0IHsgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzIH0gZnJvbSAnLi91dGlscy9zY3JhcGUtbW90aW9uLXZhbHVlcy5tanMnO1xuaW1wb3J0IHsgaHRtbENvbmZpZyB9IGZyb20gJy4uL2h0bWwvdmlzdWFsLWVsZW1lbnQubWpzJztcbmltcG9ydCB7IGJ1aWxkU1ZHQXR0cnMgfSBmcm9tICcuL3V0aWxzL2J1aWxkLWF0dHJzLm1qcyc7XG5pbXBvcnQgeyBjYW1lbFRvRGFzaCB9IGZyb20gJy4uL2RvbS91dGlscy9jYW1lbC10by1kYXNoLm1qcyc7XG5pbXBvcnQgeyBjYW1lbENhc2VBdHRyaWJ1dGVzIH0gZnJvbSAnLi91dGlscy9jYW1lbC1jYXNlLWF0dHJzLm1qcyc7XG5pbXBvcnQgeyBpc1RyYW5zZm9ybVByb3AgfSBmcm9tICcuLi9odG1sL3V0aWxzL3RyYW5zZm9ybS5tanMnO1xuaW1wb3J0IHsgcmVuZGVyU1ZHIH0gZnJvbSAnLi91dGlscy9yZW5kZXIubWpzJztcbmltcG9ydCB7IGdldERlZmF1bHRWYWx1ZVR5cGUgfSBmcm9tICcuLi9kb20vdmFsdWUtdHlwZXMvZGVmYXVsdHMubWpzJztcblxudmFyIHN2Z1Zpc3VhbEVsZW1lbnQgPSB2aXN1YWxFbGVtZW50KF9fYXNzaWduKF9fYXNzaWduKHt9LCBodG1sQ29uZmlnKSwgeyBnZXRCYXNlVGFyZ2V0OiBmdW5jdGlvbiAocHJvcHMsIGtleSkge1xuICAgICAgICByZXR1cm4gcHJvcHNba2V5XTtcbiAgICB9LCByZWFkVmFsdWVGcm9tSW5zdGFuY2U6IGZ1bmN0aW9uIChkb21FbGVtZW50LCBrZXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoaXNUcmFuc2Zvcm1Qcm9wKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiAoKF9hID0gZ2V0RGVmYXVsdFZhbHVlVHlwZShrZXkpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGVmYXVsdCkgfHwgMDtcbiAgICAgICAgfVxuICAgICAgICBrZXkgPSAhY2FtZWxDYXNlQXR0cmlidXRlcy5oYXMoa2V5KSA/IGNhbWVsVG9EYXNoKGtleSkgOiBrZXk7XG4gICAgICAgIHJldHVybiBkb21FbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpO1xuICAgIH0sIHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczogc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzLCBidWlsZDogZnVuY3Rpb24gKF9lbGVtZW50LCByZW5kZXJTdGF0ZSwgbGF0ZXN0VmFsdWVzLCBvcHRpb25zLCBwcm9wcykge1xuICAgICAgICBidWlsZFNWR0F0dHJzKHJlbmRlclN0YXRlLCBsYXRlc3RWYWx1ZXMsIG9wdGlvbnMsIHByb3BzLnRyYW5zZm9ybVRlbXBsYXRlKTtcbiAgICB9LCByZW5kZXI6IHJlbmRlclNWRyB9KSk7XG5cbmV4cG9ydCB7IHN2Z1Zpc3VhbEVsZW1lbnQgfTtcbiIsImltcG9ydCB7IGh0bWxWaXN1YWxFbGVtZW50IH0gZnJvbSAnLi4vaHRtbC92aXN1YWwtZWxlbWVudC5tanMnO1xuaW1wb3J0IHsgc3ZnVmlzdWFsRWxlbWVudCB9IGZyb20gJy4uL3N2Zy92aXN1YWwtZWxlbWVudC5tanMnO1xuaW1wb3J0IHsgaXNTVkdDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL2lzLXN2Zy1jb21wb25lbnQubWpzJztcblxudmFyIGNyZWF0ZURvbVZpc3VhbEVsZW1lbnQgPSBmdW5jdGlvbiAoQ29tcG9uZW50LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGlzU1ZHQ29tcG9uZW50KENvbXBvbmVudClcbiAgICAgICAgPyBzdmdWaXN1YWxFbGVtZW50KG9wdGlvbnMsIHsgZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb246IGZhbHNlIH0pXG4gICAgICAgIDogaHRtbFZpc3VhbEVsZW1lbnQob3B0aW9ucywgeyBlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjogdHJ1ZSB9KTtcbn07XG5cbmV4cG9ydCB7IGNyZWF0ZURvbVZpc3VhbEVsZW1lbnQgfTtcbiIsImltcG9ydCB7IHB4IH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuXG5mdW5jdGlvbiBwaXhlbHNUb1BlcmNlbnQocGl4ZWxzLCBheGlzKSB7XG4gICAgaWYgKGF4aXMubWF4ID09PSBheGlzLm1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIChwaXhlbHMgLyAoYXhpcy5tYXggLSBheGlzLm1pbikpICogMTAwO1xufVxuLyoqXG4gKiBXZSBhbHdheXMgY29ycmVjdCBib3JkZXJSYWRpdXMgYXMgYSBwZXJjZW50YWdlIHJhdGhlciB0aGFuIHBpeGVscyB0byByZWR1Y2UgcGFpbnRzLlxuICogRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgcHJvamVjdGluZyBhIGJveCB0aGF0IGlzIDEwMHB4IHdpZGUgd2l0aCBhIDEwcHggYm9yZGVyUmFkaXVzXG4gKiBpbnRvIGEgYm94IHRoYXQgaXMgMjAwcHggd2lkZSB3aXRoIGEgMjBweCBib3JkZXJSYWRpdXMsIHRoYXQgaXMgYWN0dWFsbHkgYSAxMCVcbiAqIGJvcmRlclJhZGl1cyBpbiBib3RoIHN0YXRlcy4gSWYgd2UgYW5pbWF0ZSBiZXR3ZWVuIHRoZSB0d28gaW4gcGl4ZWxzIHRoYXQgd2lsbCB0cmlnZ2VyXG4gKiBhIHBhaW50IGVhY2ggdGltZS4gSWYgd2UgYW5pbWF0ZSBiZXR3ZWVuIHRoZSB0d28gaW4gcGVyY2VudGFnZSB3ZSdsbCBhdm9pZCBhIHBhaW50LlxuICovXG52YXIgY29ycmVjdEJvcmRlclJhZGl1cyA9IHtcbiAgICBjb3JyZWN0OiBmdW5jdGlvbiAobGF0ZXN0LCBub2RlKSB7XG4gICAgICAgIGlmICghbm9kZS50YXJnZXQpXG4gICAgICAgICAgICByZXR1cm4gbGF0ZXN0O1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgbGF0ZXN0IGlzIGEgc3RyaW5nLCBpZiBpdCdzIGEgcGVyY2VudGFnZSB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5IGFzIGl0J3NcbiAgICAgICAgICogZ29pbmcgdG8gYmUgc3RyZXRjaGVkIGFwcHJvcHJpYXRlbHkuIE90aGVyd2lzZSwgaWYgaXQncyBhIHBpeGVsLCBjb252ZXJ0IGl0IHRvIGEgbnVtYmVyLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHR5cGVvZiBsYXRlc3QgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGlmIChweC50ZXN0KGxhdGVzdCkpIHtcbiAgICAgICAgICAgICAgICBsYXRlc3QgPSBwYXJzZUZsb2F0KGxhdGVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGF0ZXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBsYXRlc3QgaXMgYSBudW1iZXIsIGl0J3MgYSBwaXhlbCB2YWx1ZS4gV2UgdXNlIHRoZSBjdXJyZW50IHZpZXdwb3J0Qm94IHRvIGNhbGN1bGF0ZSB0aGF0XG4gICAgICAgICAqIHBpeGVsIHZhbHVlIGFzIGEgcGVyY2VudGFnZSBvZiBlYWNoIGF4aXNcbiAgICAgICAgICovXG4gICAgICAgIHZhciB4ID0gcGl4ZWxzVG9QZXJjZW50KGxhdGVzdCwgbm9kZS50YXJnZXQueCk7XG4gICAgICAgIHZhciB5ID0gcGl4ZWxzVG9QZXJjZW50KGxhdGVzdCwgbm9kZS50YXJnZXQueSk7XG4gICAgICAgIHJldHVybiBcIlwiLmNvbmNhdCh4LCBcIiUgXCIpLmNvbmNhdCh5LCBcIiVcIik7XG4gICAgfSxcbn07XG5cbmV4cG9ydCB7IGNvcnJlY3RCb3JkZXJSYWRpdXMsIHBpeGVsc1RvUGVyY2VudCB9O1xuIiwiaW1wb3J0IHsgbWl4IH0gZnJvbSAncG9wbW90aW9uJztcbmltcG9ydCB7IGNvbXBsZXggfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5pbXBvcnQgeyBjc3NWYXJpYWJsZVJlZ2V4IH0gZnJvbSAnLi4vLi4vcmVuZGVyL2RvbS91dGlscy9jc3MtdmFyaWFibGVzLWNvbnZlcnNpb24ubWpzJztcblxudmFyIHZhclRva2VuID0gXCJfJGNzc1wiO1xudmFyIGNvcnJlY3RCb3hTaGFkb3cgPSB7XG4gICAgY29ycmVjdDogZnVuY3Rpb24gKGxhdGVzdCwgX2EpIHtcbiAgICAgICAgdmFyIHRyZWVTY2FsZSA9IF9hLnRyZWVTY2FsZSwgcHJvamVjdGlvbkRlbHRhID0gX2EucHJvamVjdGlvbkRlbHRhO1xuICAgICAgICB2YXIgb3JpZ2luYWwgPSBsYXRlc3Q7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXZSBuZWVkIHRvIGZpcnN0IHN0cmlwIGFuZCBzdG9yZSBDU1MgdmFyaWFibGVzIGZyb20gdGhlIHN0cmluZy5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBjb250YWluc0NTU1ZhcmlhYmxlcyA9IGxhdGVzdC5pbmNsdWRlcyhcInZhcihcIik7XG4gICAgICAgIHZhciBjc3NWYXJpYWJsZXMgPSBbXTtcbiAgICAgICAgaWYgKGNvbnRhaW5zQ1NTVmFyaWFibGVzKSB7XG4gICAgICAgICAgICBsYXRlc3QgPSBsYXRlc3QucmVwbGFjZShjc3NWYXJpYWJsZVJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBjc3NWYXJpYWJsZXMucHVzaChtYXRjaCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhclRva2VuO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNoYWRvdyA9IGNvbXBsZXgucGFyc2UobGF0ZXN0KTtcbiAgICAgICAgLy8gVE9ETzogRG9lc24ndCBzdXBwb3J0IG11bHRpcGxlIHNoYWRvd3NcbiAgICAgICAgaWYgKHNoYWRvdy5sZW5ndGggPiA1KVxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsO1xuICAgICAgICB2YXIgdGVtcGxhdGUgPSBjb21wbGV4LmNyZWF0ZVRyYW5zZm9ybWVyKGxhdGVzdCk7XG4gICAgICAgIHZhciBvZmZzZXQgPSB0eXBlb2Ygc2hhZG93WzBdICE9PSBcIm51bWJlclwiID8gMSA6IDA7XG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgb3ZlcmFsbCBjb250ZXh0IHNjYWxlXG4gICAgICAgIHZhciB4U2NhbGUgPSBwcm9qZWN0aW9uRGVsdGEueC5zY2FsZSAqIHRyZWVTY2FsZS54O1xuICAgICAgICB2YXIgeVNjYWxlID0gcHJvamVjdGlvbkRlbHRhLnkuc2NhbGUgKiB0cmVlU2NhbGUueTtcbiAgICAgICAgc2hhZG93WzAgKyBvZmZzZXRdIC89IHhTY2FsZTtcbiAgICAgICAgc2hhZG93WzEgKyBvZmZzZXRdIC89IHlTY2FsZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElkZWFsbHkgd2UnZCBjb3JyZWN0IHggYW5kIHkgc2NhbGVzIGluZGl2aWR1YWxseSwgYnV0IGJlY2F1c2UgYmx1ciBhbmRcbiAgICAgICAgICogc3ByZWFkIGFwcGx5IHRvIGJvdGggd2UgaGF2ZSB0byB0YWtlIGEgc2NhbGUgYXZlcmFnZSBhbmQgYXBwbHkgdGhhdCBpbnN0ZWFkLlxuICAgICAgICAgKiBXZSBjb3VsZCBwb3RlbnRpYWxseSBpbXByb3ZlIHRoZSBvdXRjb21lIG9mIHRoaXMgYnkgaW5jb3Jwb3JhdGluZyB0aGUgcmF0aW8gYmV0d2VlblxuICAgICAgICAgKiB0aGUgdHdvIHNjYWxlcy5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBhdmVyYWdlU2NhbGUgPSBtaXgoeFNjYWxlLCB5U2NhbGUsIDAuNSk7XG4gICAgICAgIC8vIEJsdXJcbiAgICAgICAgaWYgKHR5cGVvZiBzaGFkb3dbMiArIG9mZnNldF0gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICBzaGFkb3dbMiArIG9mZnNldF0gLz0gYXZlcmFnZVNjYWxlO1xuICAgICAgICAvLyBTcHJlYWRcbiAgICAgICAgaWYgKHR5cGVvZiBzaGFkb3dbMyArIG9mZnNldF0gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICBzaGFkb3dbMyArIG9mZnNldF0gLz0gYXZlcmFnZVNjYWxlO1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGVtcGxhdGUoc2hhZG93KTtcbiAgICAgICAgaWYgKGNvbnRhaW5zQ1NTVmFyaWFibGVzKSB7XG4gICAgICAgICAgICB2YXIgaV8xID0gMDtcbiAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKHZhclRva2VuLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNzc1ZhcmlhYmxlID0gY3NzVmFyaWFibGVzW2lfMV07XG4gICAgICAgICAgICAgICAgaV8xKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhcmlhYmxlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9LFxufTtcblxuZXhwb3J0IHsgY29ycmVjdEJveFNoYWRvdyB9O1xuIiwiaW1wb3J0IHsgX19leHRlbmRzLCBfX2Fzc2lnbiwgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHN5bmMgZnJvbSAnZnJhbWVzeW5jJztcbmltcG9ydCBSZWFjdF9fZGVmYXVsdCwgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUHJlc2VuY2UgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL0FuaW1hdGVQcmVzZW5jZS91c2UtcHJlc2VuY2UubWpzJztcbmltcG9ydCB7IExheW91dEdyb3VwQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvTGF5b3V0R3JvdXBDb250ZXh0Lm1qcyc7XG5pbXBvcnQgeyBTd2l0Y2hMYXlvdXRHcm91cENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L1N3aXRjaExheW91dEdyb3VwQ29udGV4dC5tanMnO1xuaW1wb3J0IHsgZ2xvYmFsUHJvamVjdGlvblN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vcHJvamVjdGlvbi9ub2RlL3N0YXRlLm1qcyc7XG5pbXBvcnQgeyBjb3JyZWN0Qm9yZGVyUmFkaXVzIH0gZnJvbSAnLi4vLi4vLi4vcHJvamVjdGlvbi9zdHlsZXMvc2NhbGUtYm9yZGVyLXJhZGl1cy5tanMnO1xuaW1wb3J0IHsgY29ycmVjdEJveFNoYWRvdyB9IGZyb20gJy4uLy4uLy4uL3Byb2plY3Rpb24vc3R5bGVzL3NjYWxlLWJveC1zaGFkb3cubWpzJztcbmltcG9ydCB7IGFkZFNjYWxlQ29ycmVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vcHJvamVjdGlvbi9zdHlsZXMvc2NhbGUtY29ycmVjdGlvbi5tanMnO1xuXG52YXIgTWVhc3VyZUxheW91dFdpdGhDb250ZXh0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhNZWFzdXJlTGF5b3V0V2l0aENvbnRleHQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTWVhc3VyZUxheW91dFdpdGhDb250ZXh0KCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgb25seSBtb3VudHMgcHJvamVjdGlvbiBub2RlcyBmb3IgY29tcG9uZW50cyB0aGF0XG4gICAgICogbmVlZCBtZWFzdXJpbmcsIHdlIG1pZ2h0IHdhbnQgdG8gZG8gaXQgZm9yIGFsbCBjb21wb25lbnRzXG4gICAgICogaW4gb3JkZXIgdG8gaW5jb3Jwb3JhdGUgdHJhbnNmb3Jtc1xuICAgICAqL1xuICAgIE1lYXN1cmVMYXlvdXRXaXRoQ29udGV4dC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHRoaXMucHJvcHMsIHZpc3VhbEVsZW1lbnQgPSBfYS52aXN1YWxFbGVtZW50LCBsYXlvdXRHcm91cCA9IF9hLmxheW91dEdyb3VwLCBzd2l0Y2hMYXlvdXRHcm91cCA9IF9hLnN3aXRjaExheW91dEdyb3VwLCBsYXlvdXRJZCA9IF9hLmxheW91dElkO1xuICAgICAgICB2YXIgcHJvamVjdGlvbiA9IHZpc3VhbEVsZW1lbnQucHJvamVjdGlvbjtcbiAgICAgICAgYWRkU2NhbGVDb3JyZWN0b3IoZGVmYXVsdFNjYWxlQ29ycmVjdG9ycyk7XG4gICAgICAgIGlmIChwcm9qZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAobGF5b3V0R3JvdXAgPT09IG51bGwgfHwgbGF5b3V0R3JvdXAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxheW91dEdyb3VwLmdyb3VwKVxuICAgICAgICAgICAgICAgIGxheW91dEdyb3VwLmdyb3VwLmFkZChwcm9qZWN0aW9uKTtcbiAgICAgICAgICAgIGlmICgoc3dpdGNoTGF5b3V0R3JvdXAgPT09IG51bGwgfHwgc3dpdGNoTGF5b3V0R3JvdXAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN3aXRjaExheW91dEdyb3VwLnJlZ2lzdGVyKSAmJiBsYXlvdXRJZCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaExheW91dEdyb3VwLnJlZ2lzdGVyKHByb2plY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvamVjdGlvbi5yb290LmRpZFVwZGF0ZSgpO1xuICAgICAgICAgICAgcHJvamVjdGlvbi5hZGRFdmVudExpc3RlbmVyKFwiYW5pbWF0aW9uQ29tcGxldGVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLnNhZmVUb1JlbW92ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcm9qZWN0aW9uLnNldE9wdGlvbnMoX19hc3NpZ24oX19hc3NpZ24oe30sIHByb2plY3Rpb24ub3B0aW9ucyksIHsgb25FeGl0Q29tcGxldGU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLnNhZmVUb1JlbW92ZSgpOyB9IH0pKTtcbiAgICAgICAgfVxuICAgICAgICBnbG9iYWxQcm9qZWN0aW9uU3RhdGUuaGFzRXZlclVwZGF0ZWQgPSB0cnVlO1xuICAgIH07XG4gICAgTWVhc3VyZUxheW91dFdpdGhDb250ZXh0LnByb3RvdHlwZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IGZ1bmN0aW9uIChwcmV2UHJvcHMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcy5wcm9wcywgbGF5b3V0RGVwZW5kZW5jeSA9IF9hLmxheW91dERlcGVuZGVuY3ksIHZpc3VhbEVsZW1lbnQgPSBfYS52aXN1YWxFbGVtZW50LCBkcmFnID0gX2EuZHJhZywgaXNQcmVzZW50ID0gX2EuaXNQcmVzZW50O1xuICAgICAgICB2YXIgcHJvamVjdGlvbiA9IHZpc3VhbEVsZW1lbnQucHJvamVjdGlvbjtcbiAgICAgICAgaWYgKCFwcm9qZWN0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUT0RPOiBXZSB1c2UgdGhpcyBkYXRhIGluIHJlbGVnYXRlIHRvIGRldGVybWluZSB3aGV0aGVyIHRvXG4gICAgICAgICAqIHByb21vdGUgYSBwcmV2aW91cyBlbGVtZW50LiBUaGVyZSdzIG5vIGd1YXJhbnRlZSBpdHMgcHJlc2VuY2UgZGF0YVxuICAgICAgICAgKiB3aWxsIGhhdmUgdXBkYXRlZCBieSB0aGlzIHBvaW50IC0gaWYgYSBidWcgbGlrZSB0aGlzIGFyaXNlcyBpdCB3aWxsXG4gICAgICAgICAqIGhhdmUgdG8gYmUgdGhhdCB3ZSBtYXJrRm9yUmVsZWdhdGlvbiBhbmQgdGhlbiBmaW5kIGEgbmV3IGxlYWQgc29tZSBvdGhlciB3YXksXG4gICAgICAgICAqIHBlcmhhcHMgaW4gZGlkVXBkYXRlXG4gICAgICAgICAqL1xuICAgICAgICBwcm9qZWN0aW9uLmlzUHJlc2VudCA9IGlzUHJlc2VudDtcbiAgICAgICAgaWYgKGRyYWcgfHxcbiAgICAgICAgICAgIHByZXZQcm9wcy5sYXlvdXREZXBlbmRlbmN5ICE9PSBsYXlvdXREZXBlbmRlbmN5IHx8XG4gICAgICAgICAgICBsYXlvdXREZXBlbmRlbmN5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHByb2plY3Rpb24ud2lsbFVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zYWZlVG9SZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldlByb3BzLmlzUHJlc2VudCAhPT0gaXNQcmVzZW50KSB7XG4gICAgICAgICAgICBpZiAoaXNQcmVzZW50KSB7XG4gICAgICAgICAgICAgICAgcHJvamVjdGlvbi5wcm9tb3RlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghcHJvamVjdGlvbi5yZWxlZ2F0ZSgpKSB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogSWYgdGhlcmUncyBhbm90aGVyIHN0YWNrIG1lbWJlciB0YWtpbmcgb3ZlciBmcm9tIHRoaXMgb25lLFxuICAgICAgICAgICAgICAgICAqIGl0J3MgaW4gY2hhcmdlIG9mIHRoZSBleGl0IGFuaW1hdGlvbiBhbmQgdGhlcmVmb3JlIHNob3VsZFxuICAgICAgICAgICAgICAgICAqIGJlIGluIGNoYXJnZSBvZiB0aGUgc2FmZSB0byByZW1vdmUuIE90aGVyd2lzZSB3ZSBjYWxsIGl0IGhlcmUuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgc3luYy5wb3N0UmVuZGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICBpZiAoISgoX2EgPSBwcm9qZWN0aW9uLmdldFN0YWNrKCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5tZW1iZXJzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnNhZmVUb1JlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBNZWFzdXJlTGF5b3V0V2l0aENvbnRleHQucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByb2plY3Rpb24gPSB0aGlzLnByb3BzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbjtcbiAgICAgICAgaWYgKHByb2plY3Rpb24pIHtcbiAgICAgICAgICAgIHByb2plY3Rpb24ucm9vdC5kaWRVcGRhdGUoKTtcbiAgICAgICAgICAgIGlmICghcHJvamVjdGlvbi5jdXJyZW50QW5pbWF0aW9uICYmIHByb2plY3Rpb24uaXNMZWFkKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNhZmVUb1JlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBNZWFzdXJlTGF5b3V0V2l0aENvbnRleHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLnByb3BzLCB2aXN1YWxFbGVtZW50ID0gX2EudmlzdWFsRWxlbWVudCwgbGF5b3V0R3JvdXAgPSBfYS5sYXlvdXRHcm91cCwgcHJvbW90ZUNvbnRleHQgPSBfYS5zd2l0Y2hMYXlvdXRHcm91cDtcbiAgICAgICAgdmFyIHByb2plY3Rpb24gPSB2aXN1YWxFbGVtZW50LnByb2plY3Rpb247XG4gICAgICAgIGlmIChwcm9qZWN0aW9uKSB7XG4gICAgICAgICAgICBwcm9qZWN0aW9uLnNjaGVkdWxlQ2hlY2tBZnRlclVubW91bnQoKTtcbiAgICAgICAgICAgIGlmIChsYXlvdXRHcm91cCA9PT0gbnVsbCB8fCBsYXlvdXRHcm91cCA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGF5b3V0R3JvdXAuZ3JvdXApXG4gICAgICAgICAgICAgICAgbGF5b3V0R3JvdXAuZ3JvdXAucmVtb3ZlKHByb2plY3Rpb24pO1xuICAgICAgICAgICAgaWYgKHByb21vdGVDb250ZXh0ID09PSBudWxsIHx8IHByb21vdGVDb250ZXh0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcm9tb3RlQ29udGV4dC5kZXJlZ2lzdGVyKVxuICAgICAgICAgICAgICAgIHByb21vdGVDb250ZXh0LmRlcmVnaXN0ZXIocHJvamVjdGlvbik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE1lYXN1cmVMYXlvdXRXaXRoQ29udGV4dC5wcm90b3R5cGUuc2FmZVRvUmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2FmZVRvUmVtb3ZlID0gdGhpcy5wcm9wcy5zYWZlVG9SZW1vdmU7XG4gICAgICAgIHNhZmVUb1JlbW92ZSA9PT0gbnVsbCB8fCBzYWZlVG9SZW1vdmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNhZmVUb1JlbW92ZSgpO1xuICAgIH07XG4gICAgTWVhc3VyZUxheW91dFdpdGhDb250ZXh0LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIE1lYXN1cmVMYXlvdXRXaXRoQ29udGV4dDtcbn0oUmVhY3RfX2RlZmF1bHQuQ29tcG9uZW50KSk7XG5mdW5jdGlvbiBNZWFzdXJlTGF5b3V0KHByb3BzKSB7XG4gICAgdmFyIF9hID0gX19yZWFkKHVzZVByZXNlbmNlKCksIDIpLCBpc1ByZXNlbnQgPSBfYVswXSwgc2FmZVRvUmVtb3ZlID0gX2FbMV07XG4gICAgdmFyIGxheW91dEdyb3VwID0gdXNlQ29udGV4dChMYXlvdXRHcm91cENvbnRleHQpO1xuICAgIHJldHVybiAoUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChNZWFzdXJlTGF5b3V0V2l0aENvbnRleHQsIF9fYXNzaWduKHt9LCBwcm9wcywgeyBsYXlvdXRHcm91cDogbGF5b3V0R3JvdXAsIHN3aXRjaExheW91dEdyb3VwOiB1c2VDb250ZXh0KFN3aXRjaExheW91dEdyb3VwQ29udGV4dCksIGlzUHJlc2VudDogaXNQcmVzZW50LCBzYWZlVG9SZW1vdmU6IHNhZmVUb1JlbW92ZSB9KSkpO1xufVxudmFyIGRlZmF1bHRTY2FsZUNvcnJlY3RvcnMgPSB7XG4gICAgYm9yZGVyUmFkaXVzOiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY29ycmVjdEJvcmRlclJhZGl1cyksIHsgYXBwbHlUbzogW1xuICAgICAgICAgICAgXCJib3JkZXJUb3BMZWZ0UmFkaXVzXCIsXG4gICAgICAgICAgICBcImJvcmRlclRvcFJpZ2h0UmFkaXVzXCIsXG4gICAgICAgICAgICBcImJvcmRlckJvdHRvbUxlZnRSYWRpdXNcIixcbiAgICAgICAgICAgIFwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXNcIixcbiAgICAgICAgXSB9KSxcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiBjb3JyZWN0Qm9yZGVyUmFkaXVzLFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiBjb3JyZWN0Qm9yZGVyUmFkaXVzLFxuICAgIGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6IGNvcnJlY3RCb3JkZXJSYWRpdXMsXG4gICAgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6IGNvcnJlY3RCb3JkZXJSYWRpdXMsXG4gICAgYm94U2hhZG93OiBjb3JyZWN0Qm94U2hhZG93LFxufTtcblxuZXhwb3J0IHsgTWVhc3VyZUxheW91dCB9O1xuIiwiaW1wb3J0IHsgTWVhc3VyZUxheW91dCB9IGZyb20gJy4vTWVhc3VyZUxheW91dC5tanMnO1xuXG52YXIgbGF5b3V0RmVhdHVyZXMgPSB7XG4gICAgbWVhc3VyZUxheW91dDogTWVhc3VyZUxheW91dCxcbn07XG5cbmV4cG9ydCB7IGxheW91dEZlYXR1cmVzIH07XG4iLCJpbXBvcnQgeyBtaXgsIHByb2dyZXNzLCBsaW5lYXIsIGNpcmNPdXQgfSBmcm9tICdwb3Btb3Rpb24nO1xuaW1wb3J0IHsgcHgsIHBlcmNlbnQgfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5cbnZhciBib3JkZXJzID0gW1wiVG9wTGVmdFwiLCBcIlRvcFJpZ2h0XCIsIFwiQm90dG9tTGVmdFwiLCBcIkJvdHRvbVJpZ2h0XCJdO1xudmFyIG51bUJvcmRlcnMgPSBib3JkZXJzLmxlbmd0aDtcbnZhciBhc051bWJlciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyBwYXJzZUZsb2F0KHZhbHVlKSA6IHZhbHVlO1xufTtcbnZhciBpc1B4ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCBweC50ZXN0KHZhbHVlKTtcbn07XG5mdW5jdGlvbiBtaXhWYWx1ZXModGFyZ2V0LCBmb2xsb3csIGxlYWQsIHByb2dyZXNzLCBzaG91bGRDcm9zc2ZhZGVPcGFjaXR5LCBpc09ubHlNZW1iZXIpIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgaWYgKHNob3VsZENyb3NzZmFkZU9wYWNpdHkpIHtcbiAgICAgICAgdGFyZ2V0Lm9wYWNpdHkgPSBtaXgoMCwgXG4gICAgICAgIC8vIChmb2xsb3c/Lm9wYWNpdHkgYXMgbnVtYmVyKSA/PyAwLFxuICAgICAgICAvLyBUT0RPIFJlaW5zdGF0ZSB0aGlzIGlmIG9ubHkgY2hpbGRcbiAgICAgICAgKF9hID0gbGVhZC5vcGFjaXR5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAxLCBlYXNlQ3Jvc3NmYWRlSW4ocHJvZ3Jlc3MpKTtcbiAgICAgICAgdGFyZ2V0Lm9wYWNpdHlFeGl0ID0gbWl4KChfYiA9IGZvbGxvdy5vcGFjaXR5KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAxLCAwLCBlYXNlQ3Jvc3NmYWRlT3V0KHByb2dyZXNzKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT25seU1lbWJlcikge1xuICAgICAgICB0YXJnZXQub3BhY2l0eSA9IG1peCgoX2MgPSBmb2xsb3cub3BhY2l0eSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogMSwgKF9kID0gbGVhZC5vcGFjaXR5KSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAxLCBwcm9ncmVzcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1peCBib3JkZXIgcmFkaXVzXG4gICAgICovXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1Cb3JkZXJzOyBpKyspIHtcbiAgICAgICAgdmFyIGJvcmRlckxhYmVsID0gXCJib3JkZXJcIi5jb25jYXQoYm9yZGVyc1tpXSwgXCJSYWRpdXNcIik7XG4gICAgICAgIHZhciBmb2xsb3dSYWRpdXMgPSBnZXRSYWRpdXMoZm9sbG93LCBib3JkZXJMYWJlbCk7XG4gICAgICAgIHZhciBsZWFkUmFkaXVzID0gZ2V0UmFkaXVzKGxlYWQsIGJvcmRlckxhYmVsKTtcbiAgICAgICAgaWYgKGZvbGxvd1JhZGl1cyA9PT0gdW5kZWZpbmVkICYmIGxlYWRSYWRpdXMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBmb2xsb3dSYWRpdXMgfHwgKGZvbGxvd1JhZGl1cyA9IDApO1xuICAgICAgICBsZWFkUmFkaXVzIHx8IChsZWFkUmFkaXVzID0gMCk7XG4gICAgICAgIHZhciBjYW5NaXggPSBmb2xsb3dSYWRpdXMgPT09IDAgfHxcbiAgICAgICAgICAgIGxlYWRSYWRpdXMgPT09IDAgfHxcbiAgICAgICAgICAgIGlzUHgoZm9sbG93UmFkaXVzKSA9PT0gaXNQeChsZWFkUmFkaXVzKTtcbiAgICAgICAgaWYgKGNhbk1peCkge1xuICAgICAgICAgICAgdGFyZ2V0W2JvcmRlckxhYmVsXSA9IE1hdGgubWF4KG1peChhc051bWJlcihmb2xsb3dSYWRpdXMpLCBhc051bWJlcihsZWFkUmFkaXVzKSwgcHJvZ3Jlc3MpLCAwKTtcbiAgICAgICAgICAgIGlmIChwZXJjZW50LnRlc3QobGVhZFJhZGl1cykgfHwgcGVyY2VudC50ZXN0KGZvbGxvd1JhZGl1cykpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbYm9yZGVyTGFiZWxdICs9IFwiJVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0W2JvcmRlckxhYmVsXSA9IGxlYWRSYWRpdXM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogTWl4IHJvdGF0aW9uXG4gICAgICovXG4gICAgaWYgKGZvbGxvdy5yb3RhdGUgfHwgbGVhZC5yb3RhdGUpIHtcbiAgICAgICAgdGFyZ2V0LnJvdGF0ZSA9IG1peChmb2xsb3cucm90YXRlIHx8IDAsIGxlYWQucm90YXRlIHx8IDAsIHByb2dyZXNzKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRSYWRpdXModmFsdWVzLCByYWRpdXNOYW1lKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSB2YWx1ZXNbcmFkaXVzTmFtZV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZhbHVlcy5ib3JkZXJSYWRpdXM7XG59XG4vLyAvKipcbi8vICAqIFdlIG9ubHkgd2FudCB0byBtaXggdGhlIGJhY2tncm91bmQgY29sb3IgaWYgdGhlcmUncyBhIGZvbGxvdyBlbGVtZW50XG4vLyAgKiB0aGF0IHdlJ3JlIG5vdCBjcm9zc2ZhZGluZyBvcGFjaXR5IGJldHdlZW4uIEZvciBpbnN0YW5jZSB3aXRoIHN3aXRjaFxuLy8gICogQW5pbWF0ZVNoYXJlZExheW91dCBhbmltYXRpb25zLCB0aGlzIGhlbHBzIHRoZSBpbGx1c2lvbiBvZiBhIGNvbnRpbnVvdXNcbi8vICAqIGVsZW1lbnQgYmVpbmcgYW5pbWF0ZWQgYnV0IGFsc28gY3V0cyBkb3duIG9uIHRoZSBudW1iZXIgb2YgcGFpbnRzIHRyaWdnZXJlZFxuLy8gICogZm9yIGVsZW1lbnRzIHdoZXJlIG9wYWNpdHkgaXMgZG9pbmcgdGhhdCB3b3JrIGZvciB1cy5cbi8vICAqL1xuLy8gaWYgKFxuLy8gICAgICFoYXNGb2xsb3dFbGVtZW50ICYmXG4vLyAgICAgbGF0ZXN0TGVhZFZhbHVlcy5iYWNrZ3JvdW5kQ29sb3IgJiZcbi8vICAgICBsYXRlc3RGb2xsb3dWYWx1ZXMuYmFja2dyb3VuZENvbG9yXG4vLyApIHtcbi8vICAgICAvKipcbi8vICAgICAgKiBUaGlzIGlzbid0IGlkZWFsIHBlcmZvcm1hbmNlLXdpc2UgYXMgbWl4Q29sb3IgaXMgY3JlYXRpbmcgYSBuZXcgZnVuY3Rpb24gZXZlcnkgZnJhbWUuXG4vLyAgICAgICogV2UgY291bGQgcHJvYmFibHkgY3JlYXRlIGEgbWl4ZXIgdGhhdCBydW5zIGF0IHRoZSBzdGFydCBvZiB0aGUgYW5pbWF0aW9uIGJ1dFxuLy8gICAgICAqIHRoZSBpZGVhIGJlaGluZCB0aGUgY3Jvc3NmYWRlciBpcyB0aGF0IGl0IHJ1bnMgZHluYW1pY2FsbHkgYmV0d2VlbiB0d28gcG90ZW50aWFsbHlcbi8vICAgICAgKiBjaGFuZ2luZyB0YXJnZXRzIChpZSBvcGFjaXR5IG9yIGJvcmRlclJhZGl1cyBtYXkgYmUgYW5pbWF0aW5nIGluZGVwZW5kZW50bHkgdmlhIHZhcmlhbnRzKVxuLy8gICAgICAqL1xuLy8gICAgIGxlYWRTdGF0ZS5iYWNrZ3JvdW5kQ29sb3IgPSBmb2xsb3dTdGF0ZS5iYWNrZ3JvdW5kQ29sb3IgPSBtaXhDb2xvcihcbi8vICAgICAgICAgbGF0ZXN0Rm9sbG93VmFsdWVzLmJhY2tncm91bmRDb2xvciBhcyBzdHJpbmcsXG4vLyAgICAgICAgIGxhdGVzdExlYWRWYWx1ZXMuYmFja2dyb3VuZENvbG9yIGFzIHN0cmluZ1xuLy8gICAgICkocClcbi8vIH1cbnZhciBlYXNlQ3Jvc3NmYWRlSW4gPSBjb21wcmVzcygwLCAwLjUsIGNpcmNPdXQpO1xudmFyIGVhc2VDcm9zc2ZhZGVPdXQgPSBjb21wcmVzcygwLjUsIDAuOTUsIGxpbmVhcik7XG5mdW5jdGlvbiBjb21wcmVzcyhtaW4sIG1heCwgZWFzaW5nKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIC8vIENvdWxkIHJlcGxhY2UgaWZzIHdpdGggY2xhbXBcbiAgICAgICAgaWYgKHAgPCBtaW4pXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgaWYgKHAgPiBtYXgpXG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgcmV0dXJuIGVhc2luZyhwcm9ncmVzcyhtaW4sIG1heCwgcCkpO1xuICAgIH07XG59XG5cbmV4cG9ydCB7IG1peFZhbHVlcyB9O1xuIiwiLyoqXG4gKiBSZXNldCBhbiBheGlzIHRvIHRoZSBwcm92aWRlZCBvcmlnaW4gYm94LlxuICpcbiAqIFRoaXMgaXMgYSBtdXRhdGl2ZSBvcGVyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvcHlBeGlzSW50byhheGlzLCBvcmlnaW5BeGlzKSB7XG4gICAgYXhpcy5taW4gPSBvcmlnaW5BeGlzLm1pbjtcbiAgICBheGlzLm1heCA9IG9yaWdpbkF4aXMubWF4O1xufVxuLyoqXG4gKiBSZXNldCBhIGJveCB0byB0aGUgcHJvdmlkZWQgb3JpZ2luIGJveC5cbiAqXG4gKiBUaGlzIGlzIGEgbXV0YXRpdmUgb3BlcmF0aW9uLlxuICovXG5mdW5jdGlvbiBjb3B5Qm94SW50byhib3gsIG9yaWdpbkJveCkge1xuICAgIGNvcHlBeGlzSW50byhib3gueCwgb3JpZ2luQm94LngpO1xuICAgIGNvcHlBeGlzSW50byhib3gueSwgb3JpZ2luQm94LnkpO1xufVxuXG5leHBvcnQgeyBjb3B5QXhpc0ludG8sIGNvcHlCb3hJbnRvIH07XG4iLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBtaXggfSBmcm9tICdwb3Btb3Rpb24nO1xuaW1wb3J0IHsgcGVyY2VudCB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcbmltcG9ydCB7IHNjYWxlUG9pbnQgfSBmcm9tICcuL2RlbHRhLWFwcGx5Lm1qcyc7XG5cbi8qKlxuICogUmVtb3ZlIGEgZGVsdGEgZnJvbSBhIHBvaW50LiBUaGlzIGlzIGVzc2VudGlhbGx5IHRoZSBzdGVwcyBvZiBhcHBseVBvaW50RGVsdGEgaW4gcmV2ZXJzZVxuICovXG5mdW5jdGlvbiByZW1vdmVQb2ludERlbHRhKHBvaW50LCB0cmFuc2xhdGUsIHNjYWxlLCBvcmlnaW5Qb2ludCwgYm94U2NhbGUpIHtcbiAgICBwb2ludCAtPSB0cmFuc2xhdGU7XG4gICAgcG9pbnQgPSBzY2FsZVBvaW50KHBvaW50LCAxIC8gc2NhbGUsIG9yaWdpblBvaW50KTtcbiAgICBpZiAoYm94U2NhbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwb2ludCA9IHNjYWxlUG9pbnQocG9pbnQsIDEgLyBib3hTY2FsZSwgb3JpZ2luUG9pbnQpO1xuICAgIH1cbiAgICByZXR1cm4gcG9pbnQ7XG59XG4vKipcbiAqIFJlbW92ZSBhIGRlbHRhIGZyb20gYW4gYXhpcy4gVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc3RlcHMgb2YgYXBwbHlBeGlzRGVsdGEgaW4gcmV2ZXJzZVxuICovXG5mdW5jdGlvbiByZW1vdmVBeGlzRGVsdGEoYXhpcywgdHJhbnNsYXRlLCBzY2FsZSwgb3JpZ2luLCBib3hTY2FsZSwgb3JpZ2luQXhpcywgc291cmNlQXhpcykge1xuICAgIGlmICh0cmFuc2xhdGUgPT09IHZvaWQgMCkgeyB0cmFuc2xhdGUgPSAwOyB9XG4gICAgaWYgKHNjYWxlID09PSB2b2lkIDApIHsgc2NhbGUgPSAxOyB9XG4gICAgaWYgKG9yaWdpbiA9PT0gdm9pZCAwKSB7IG9yaWdpbiA9IDAuNTsgfVxuICAgIGlmIChvcmlnaW5BeGlzID09PSB2b2lkIDApIHsgb3JpZ2luQXhpcyA9IGF4aXM7IH1cbiAgICBpZiAoc291cmNlQXhpcyA9PT0gdm9pZCAwKSB7IHNvdXJjZUF4aXMgPSBheGlzOyB9XG4gICAgaWYgKHBlcmNlbnQudGVzdCh0cmFuc2xhdGUpKSB7XG4gICAgICAgIHRyYW5zbGF0ZSA9IHBhcnNlRmxvYXQodHJhbnNsYXRlKTtcbiAgICAgICAgdmFyIHJlbGF0aXZlUHJvZ3Jlc3MgPSBtaXgoc291cmNlQXhpcy5taW4sIHNvdXJjZUF4aXMubWF4LCB0cmFuc2xhdGUgLyAxMDApO1xuICAgICAgICB0cmFuc2xhdGUgPSByZWxhdGl2ZVByb2dyZXNzIC0gc291cmNlQXhpcy5taW47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdHJhbnNsYXRlICE9PSBcIm51bWJlclwiKVxuICAgICAgICByZXR1cm47XG4gICAgdmFyIG9yaWdpblBvaW50ID0gbWl4KG9yaWdpbkF4aXMubWluLCBvcmlnaW5BeGlzLm1heCwgb3JpZ2luKTtcbiAgICBpZiAoYXhpcyA9PT0gb3JpZ2luQXhpcylcbiAgICAgICAgb3JpZ2luUG9pbnQgLT0gdHJhbnNsYXRlO1xuICAgIGF4aXMubWluID0gcmVtb3ZlUG9pbnREZWx0YShheGlzLm1pbiwgdHJhbnNsYXRlLCBzY2FsZSwgb3JpZ2luUG9pbnQsIGJveFNjYWxlKTtcbiAgICBheGlzLm1heCA9IHJlbW92ZVBvaW50RGVsdGEoYXhpcy5tYXgsIHRyYW5zbGF0ZSwgc2NhbGUsIG9yaWdpblBvaW50LCBib3hTY2FsZSk7XG59XG4vKipcbiAqIFJlbW92ZSBhIHRyYW5zZm9ybXMgZnJvbSBhbiBheGlzLiBUaGlzIGlzIGVzc2VudGlhbGx5IHRoZSBzdGVwcyBvZiBhcHBseUF4aXNUcmFuc2Zvcm1zIGluIHJldmVyc2VcbiAqIGFuZCBhY3RzIGFzIGEgYnJpZGdlIGJldHdlZW4gbW90aW9uIHZhbHVlcyBhbmQgcmVtb3ZlQXhpc0RlbHRhXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUF4aXNUcmFuc2Zvcm1zKGF4aXMsIHRyYW5zZm9ybXMsIF9hLCBvcmlnaW4sIHNvdXJjZUF4aXMpIHtcbiAgICB2YXIgX2IgPSBfX3JlYWQoX2EsIDMpLCBrZXkgPSBfYlswXSwgc2NhbGVLZXkgPSBfYlsxXSwgb3JpZ2luS2V5ID0gX2JbMl07XG4gICAgcmVtb3ZlQXhpc0RlbHRhKGF4aXMsIHRyYW5zZm9ybXNba2V5XSwgdHJhbnNmb3Jtc1tzY2FsZUtleV0sIHRyYW5zZm9ybXNbb3JpZ2luS2V5XSwgdHJhbnNmb3Jtcy5zY2FsZSwgb3JpZ2luLCBzb3VyY2VBeGlzKTtcbn1cbi8qKlxuICogVGhlIG5hbWVzIG9mIHRoZSBtb3Rpb24gdmFsdWVzIHdlIHdhbnQgdG8gYXBwbHkgYXMgdHJhbnNsYXRpb24sIHNjYWxlIGFuZCBvcmlnaW4uXG4gKi9cbnZhciB4S2V5cyA9IFtcInhcIiwgXCJzY2FsZVhcIiwgXCJvcmlnaW5YXCJdO1xudmFyIHlLZXlzID0gW1wieVwiLCBcInNjYWxlWVwiLCBcIm9yaWdpbllcIl07XG4vKipcbiAqIFJlbW92ZSBhIHRyYW5zZm9ybXMgZnJvbSBhbiBib3guIFRoaXMgaXMgZXNzZW50aWFsbHkgdGhlIHN0ZXBzIG9mIGFwcGx5QXhpc0JveCBpbiByZXZlcnNlXG4gKiBhbmQgYWN0cyBhcyBhIGJyaWRnZSBiZXR3ZWVuIG1vdGlvbiB2YWx1ZXMgYW5kIHJlbW92ZUF4aXNEZWx0YVxuICovXG5mdW5jdGlvbiByZW1vdmVCb3hUcmFuc2Zvcm1zKGJveCwgdHJhbnNmb3Jtcywgb3JpZ2luQm94LCBzb3VyY2VCb3gpIHtcbiAgICByZW1vdmVBeGlzVHJhbnNmb3Jtcyhib3gueCwgdHJhbnNmb3JtcywgeEtleXMsIG9yaWdpbkJveCA9PT0gbnVsbCB8fCBvcmlnaW5Cb3ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9yaWdpbkJveC54LCBzb3VyY2VCb3ggPT09IG51bGwgfHwgc291cmNlQm94ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb3VyY2VCb3gueCk7XG4gICAgcmVtb3ZlQXhpc1RyYW5zZm9ybXMoYm94LnksIHRyYW5zZm9ybXMsIHlLZXlzLCBvcmlnaW5Cb3ggPT09IG51bGwgfHwgb3JpZ2luQm94ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcmlnaW5Cb3gueSwgc291cmNlQm94ID09PSBudWxsIHx8IHNvdXJjZUJveCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlQm94LnkpO1xufVxuXG5leHBvcnQgeyByZW1vdmVBeGlzRGVsdGEsIHJlbW92ZUF4aXNUcmFuc2Zvcm1zLCByZW1vdmVCb3hUcmFuc2Zvcm1zLCByZW1vdmVQb2ludERlbHRhIH07XG4iLCJmdW5jdGlvbiBpc0F4aXNEZWx0YVplcm8oZGVsdGEpIHtcbiAgICByZXR1cm4gZGVsdGEudHJhbnNsYXRlID09PSAwICYmIGRlbHRhLnNjYWxlID09PSAxO1xufVxuZnVuY3Rpb24gaXNEZWx0YVplcm8oZGVsdGEpIHtcbiAgICByZXR1cm4gaXNBeGlzRGVsdGFaZXJvKGRlbHRhLngpICYmIGlzQXhpc0RlbHRhWmVybyhkZWx0YS55KTtcbn1cbmZ1bmN0aW9uIGJveEVxdWFscyhhLCBiKSB7XG4gICAgcmV0dXJuIChhLngubWluID09PSBiLngubWluICYmXG4gICAgICAgIGEueC5tYXggPT09IGIueC5tYXggJiZcbiAgICAgICAgYS55Lm1pbiA9PT0gYi55Lm1pbiAmJlxuICAgICAgICBhLnkubWF4ID09PSBiLnkubWF4KTtcbn1cblxuZXhwb3J0IHsgYm94RXF1YWxzLCBpc0RlbHRhWmVybyB9O1xuIiwiaW1wb3J0IHsgYWRkVW5pcXVlSXRlbSwgcmVtb3ZlSXRlbSB9IGZyb20gJy4uLy4uL3V0aWxzL2FycmF5Lm1qcyc7XG5cbnZhciBOb2RlU3RhY2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTm9kZVN0YWNrKCkge1xuICAgICAgICB0aGlzLm1lbWJlcnMgPSBbXTtcbiAgICB9XG4gICAgTm9kZVN0YWNrLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICBhZGRVbmlxdWVJdGVtKHRoaXMubWVtYmVycywgbm9kZSk7XG4gICAgICAgIG5vZGUuc2NoZWR1bGVSZW5kZXIoKTtcbiAgICB9O1xuICAgIE5vZGVTdGFjay5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgcmVtb3ZlSXRlbSh0aGlzLm1lbWJlcnMsIG5vZGUpO1xuICAgICAgICBpZiAobm9kZSA9PT0gdGhpcy5wcmV2TGVhZCkge1xuICAgICAgICAgICAgdGhpcy5wcmV2TGVhZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZSA9PT0gdGhpcy5sZWFkKSB7XG4gICAgICAgICAgICB2YXIgcHJldkxlYWQgPSB0aGlzLm1lbWJlcnNbdGhpcy5tZW1iZXJzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHByZXZMZWFkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9tb3RlKHByZXZMZWFkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgTm9kZVN0YWNrLnByb3RvdHlwZS5yZWxlZ2F0ZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHZhciBpbmRleE9mTm9kZSA9IHRoaXMubWVtYmVycy5maW5kSW5kZXgoZnVuY3Rpb24gKG1lbWJlcikgeyByZXR1cm4gbm9kZSA9PT0gbWVtYmVyOyB9KTtcbiAgICAgICAgaWYgKGluZGV4T2ZOb2RlID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmluZCB0aGUgbmV4dCBwcm9qZWN0aW9uIG5vZGUgdGhhdCBpcyBwcmVzZW50XG4gICAgICAgICAqL1xuICAgICAgICB2YXIgcHJldkxlYWQ7XG4gICAgICAgIGZvciAodmFyIGkgPSBpbmRleE9mTm9kZTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIHZhciBtZW1iZXIgPSB0aGlzLm1lbWJlcnNbaV07XG4gICAgICAgICAgICBpZiAobWVtYmVyLmlzUHJlc2VudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBwcmV2TGVhZCA9IG1lbWJlcjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldkxlYWQpIHtcbiAgICAgICAgICAgIHRoaXMucHJvbW90ZShwcmV2TGVhZCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTm9kZVN0YWNrLnByb3RvdHlwZS5wcm9tb3RlID0gZnVuY3Rpb24gKG5vZGUsIHByZXNlcnZlRm9sbG93T3BhY2l0eSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBwcmV2TGVhZCA9IHRoaXMubGVhZDtcbiAgICAgICAgaWYgKG5vZGUgPT09IHByZXZMZWFkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnByZXZMZWFkID0gcHJldkxlYWQ7XG4gICAgICAgIHRoaXMubGVhZCA9IG5vZGU7XG4gICAgICAgIG5vZGUuc2hvdygpO1xuICAgICAgICBpZiAocHJldkxlYWQpIHtcbiAgICAgICAgICAgIHByZXZMZWFkLmluc3RhbmNlICYmIHByZXZMZWFkLnNjaGVkdWxlUmVuZGVyKCk7XG4gICAgICAgICAgICBub2RlLnNjaGVkdWxlUmVuZGVyKCk7XG4gICAgICAgICAgICBub2RlLnJlc3VtZUZyb20gPSBwcmV2TGVhZDtcbiAgICAgICAgICAgIGlmIChwcmVzZXJ2ZUZvbGxvd09wYWNpdHkpIHtcbiAgICAgICAgICAgICAgICBub2RlLnJlc3VtZUZyb20ucHJlc2VydmVPcGFjaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcmV2TGVhZC5zbmFwc2hvdCkge1xuICAgICAgICAgICAgICAgIG5vZGUuc25hcHNob3QgPSBwcmV2TGVhZC5zbmFwc2hvdDtcbiAgICAgICAgICAgICAgICBub2RlLnNuYXBzaG90LmxhdGVzdFZhbHVlcyA9XG4gICAgICAgICAgICAgICAgICAgIHByZXZMZWFkLmFuaW1hdGlvblZhbHVlcyB8fCBwcmV2TGVhZC5sYXRlc3RWYWx1ZXM7XG4gICAgICAgICAgICAgICAgbm9kZS5zbmFwc2hvdC5pc1NoYXJlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKF9hID0gbm9kZS5yb290KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaXNVcGRhdGluZykge1xuICAgICAgICAgICAgICAgIG5vZGUuaXNMYXlvdXREaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgY3Jvc3NmYWRlID0gbm9kZS5vcHRpb25zLmNyb3NzZmFkZTtcbiAgICAgICAgICAgIGlmIChjcm9zc2ZhZGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcHJldkxlYWQuaGlkZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUT0RPOlxuICAgICAgICAgICAgICogICAtIFRlc3QgYm9yZGVyIHJhZGl1cyB3aGVuIHByZXZpb3VzIG5vZGUgd2FzIGRlbGV0ZWRcbiAgICAgICAgICAgICAqICAgLSBib3hTaGFkb3cgbWl4aW5nXG4gICAgICAgICAgICAgKiAgIC0gU2hhcmVkIGJldHdlZW4gZWxlbWVudCBBIGluIHNjcm9sbGVkIGNvbnRhaW5lciBhbmQgZWxlbWVudCBCIChzY3JvbGwgc3RheXMgdGhlIHNhbWUgb3IgY2hhbmdlcylcbiAgICAgICAgICAgICAqICAgLSBTaGFyZWQgYmV0d2VlbiBlbGVtZW50IEEgaW4gdHJhbnNmb3JtZWQgY29udGFpbmVyIGFuZCBlbGVtZW50IEIgKHRyYW5zZm9ybSBzdGF5cyB0aGUgc2FtZSBvciBjaGFuZ2VzKVxuICAgICAgICAgICAgICogICAtIFNoYXJlZCBiZXR3ZWVuIGVsZW1lbnQgQSBpbiBzY3JvbGxlZCBwYWdlIGFuZCBlbGVtZW50IEIgKHNjcm9sbCBzdGF5cyB0aGUgc2FtZSBvciBjaGFuZ2VzKVxuICAgICAgICAgICAgICogLS0tXG4gICAgICAgICAgICAgKiAgIC0gQ3Jvc3NmYWRlIG9wYWNpdHkgb2Ygcm9vdCBub2Rlc1xuICAgICAgICAgICAgICogICAtIGxheW91dElkIGNoYW5nZXMgYWZ0ZXIgYW5pbWF0aW9uXG4gICAgICAgICAgICAgKiAgIC0gbGF5b3V0SWQgY2hhbmdlcyBtaWQgYW5pbWF0aW9uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgfVxuICAgIH07XG4gICAgTm9kZVN0YWNrLnByb3RvdHlwZS5leGl0QW5pbWF0aW9uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubWVtYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICAgICAgKF9iID0gKF9hID0gbm9kZS5vcHRpb25zKS5vbkV4aXRDb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgICAgICAgICAgKF9lID0gKF9jID0gbm9kZS5yZXN1bWluZ0Zyb20pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2QgPSBfYy5vcHRpb25zKS5vbkV4aXRDb21wbGV0ZSkgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLmNhbGwoX2QpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE5vZGVTdGFjay5wcm90b3R5cGUuc2NoZWR1bGVSZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubWVtYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICBub2RlLmluc3RhbmNlICYmIG5vZGUuc2NoZWR1bGVSZW5kZXIoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENsZWFyIGFueSBsZWFkcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHRoaXMgcmVuZGVyIHRvIHByZXZlbnQgdGhlbSBmcm9tIGJlaW5nXG4gICAgICogdXNlZCBpbiBmdXR1cmUgYW5pbWF0aW9ucyBhbmQgdG8gcHJldmVudCBtZW1vcnkgbGVha3NcbiAgICAgKi9cbiAgICBOb2RlU3RhY2sucHJvdG90eXBlLnJlbW92ZUxlYWRTbmFwc2hvdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMubGVhZCAmJiB0aGlzLmxlYWQuc25hcHNob3QpIHtcbiAgICAgICAgICAgIHRoaXMubGVhZC5zbmFwc2hvdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE5vZGVTdGFjaztcbn0oKSk7XG5cbmV4cG9ydCB7IE5vZGVTdGFjayB9O1xuIiwidmFyIGlkZW50aXR5UHJvamVjdGlvbiA9IFwidHJhbnNsYXRlM2QoMHB4LCAwcHgsIDApIHNjYWxlKDEsIDEpIHNjYWxlKDEsIDEpXCI7XG5mdW5jdGlvbiBidWlsZFByb2plY3Rpb25UcmFuc2Zvcm0oZGVsdGEsIHRyZWVTY2FsZSwgbGF0ZXN0VHJhbnNmb3JtKSB7XG4gICAgLyoqXG4gICAgICogVGhlIHRyYW5zbGF0aW9ucyB3ZSB1c2UgdG8gY2FsY3VsYXRlIGFyZSBhbHdheXMgcmVsYXRpdmUgdG8gdGhlIHZpZXdwb3J0IGNvb3JkaW5hdGUgc3BhY2UuXG4gICAgICogQnV0IHdoZW4gd2UgYXBwbHkgc2NhbGVzLCB3ZSBhbHNvIHNjYWxlIHRoZSBjb29yZGluYXRlIHNwYWNlIG9mIGFuIGVsZW1lbnQgYW5kIGl0cyBjaGlsZHJlbi5cbiAgICAgKiBGb3IgaW5zdGFuY2UgaWYgd2UgaGF2ZSBhIHRyZWVTY2FsZSAodGhlIGN1bG1pbmF0aW9uIG9mIGFsbCBwYXJlbnQgc2NhbGVzKSBvZiAwLjUgYW5kIHdlIG5lZWRcbiAgICAgKiB0byBtb3ZlIGFuIGVsZW1lbnQgMTAwIHBpeGVscywgd2UgYWN0dWFsbHkgbmVlZCB0byBtb3ZlIGl0IDIwMCBpbiB3aXRoaW4gdGhhdCBzY2FsZWQgc3BhY2UuXG4gICAgICovXG4gICAgdmFyIHhUcmFuc2xhdGUgPSBkZWx0YS54LnRyYW5zbGF0ZSAvIHRyZWVTY2FsZS54O1xuICAgIHZhciB5VHJhbnNsYXRlID0gZGVsdGEueS50cmFuc2xhdGUgLyB0cmVlU2NhbGUueTtcbiAgICB2YXIgdHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUzZChcIi5jb25jYXQoeFRyYW5zbGF0ZSwgXCJweCwgXCIpLmNvbmNhdCh5VHJhbnNsYXRlLCBcInB4LCAwKSBcIik7XG4gICAgLyoqXG4gICAgICogQXBwbHkgc2NhbGUgY29ycmVjdGlvbiBmb3IgdGhlIHRyZWUgdHJhbnNmb3JtLlxuICAgICAqIFRoaXMgd2lsbCBhcHBseSBzY2FsZSB0byB0aGUgc2NyZWVuLW9yaWVudGF0ZWQgYXhlcy5cbiAgICAgKi9cbiAgICB0cmFuc2Zvcm0gKz0gXCJzY2FsZShcIi5jb25jYXQoMSAvIHRyZWVTY2FsZS54LCBcIiwgXCIpLmNvbmNhdCgxIC8gdHJlZVNjYWxlLnksIFwiKSBcIik7XG4gICAgaWYgKGxhdGVzdFRyYW5zZm9ybSkge1xuICAgICAgICB2YXIgcm90YXRlID0gbGF0ZXN0VHJhbnNmb3JtLnJvdGF0ZSwgcm90YXRlWCA9IGxhdGVzdFRyYW5zZm9ybS5yb3RhdGVYLCByb3RhdGVZID0gbGF0ZXN0VHJhbnNmb3JtLnJvdGF0ZVk7XG4gICAgICAgIGlmIChyb3RhdGUpXG4gICAgICAgICAgICB0cmFuc2Zvcm0gKz0gXCJyb3RhdGUoXCIuY29uY2F0KHJvdGF0ZSwgXCJkZWcpIFwiKTtcbiAgICAgICAgaWYgKHJvdGF0ZVgpXG4gICAgICAgICAgICB0cmFuc2Zvcm0gKz0gXCJyb3RhdGVYKFwiLmNvbmNhdChyb3RhdGVYLCBcImRlZykgXCIpO1xuICAgICAgICBpZiAocm90YXRlWSlcbiAgICAgICAgICAgIHRyYW5zZm9ybSArPSBcInJvdGF0ZVkoXCIuY29uY2F0KHJvdGF0ZVksIFwiZGVnKSBcIik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFwcGx5IHNjYWxlIHRvIG1hdGNoIHRoZSBzaXplIG9mIHRoZSBlbGVtZW50IHRvIHRoZSBzaXplIHdlIHdhbnQgaXQuXG4gICAgICogVGhpcyB3aWxsIGFwcGx5IHNjYWxlIHRvIHRoZSBlbGVtZW50LW9yaWVudGF0ZWQgYXhlcy5cbiAgICAgKi9cbiAgICB2YXIgZWxlbWVudFNjYWxlWCA9IGRlbHRhLnguc2NhbGUgKiB0cmVlU2NhbGUueDtcbiAgICB2YXIgZWxlbWVudFNjYWxlWSA9IGRlbHRhLnkuc2NhbGUgKiB0cmVlU2NhbGUueTtcbiAgICB0cmFuc2Zvcm0gKz0gXCJzY2FsZShcIi5jb25jYXQoZWxlbWVudFNjYWxlWCwgXCIsIFwiKS5jb25jYXQoZWxlbWVudFNjYWxlWSwgXCIpXCIpO1xuICAgIHJldHVybiB0cmFuc2Zvcm0gPT09IGlkZW50aXR5UHJvamVjdGlvbiA/IFwibm9uZVwiIDogdHJhbnNmb3JtO1xufVxuXG5leHBvcnQgeyBidWlsZFByb2plY3Rpb25UcmFuc2Zvcm0sIGlkZW50aXR5UHJvamVjdGlvbiB9O1xuIiwidmFyIGNvbXBhcmVCeURlcHRoID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYS5kZXB0aCAtIGIuZGVwdGg7XG59O1xuXG5leHBvcnQgeyBjb21wYXJlQnlEZXB0aCB9O1xuIiwiaW1wb3J0IHsgYWRkVW5pcXVlSXRlbSwgcmVtb3ZlSXRlbSB9IGZyb20gJy4uLy4uL3V0aWxzL2FycmF5Lm1qcyc7XG5pbXBvcnQgeyBjb21wYXJlQnlEZXB0aCB9IGZyb20gJy4vY29tcGFyZS1ieS1kZXB0aC5tanMnO1xuXG52YXIgRmxhdFRyZWUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRmxhdFRyZWUoKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2U7XG4gICAgfVxuICAgIEZsYXRUcmVlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgYWRkVW5pcXVlSXRlbSh0aGlzLmNoaWxkcmVuLCBjaGlsZCk7XG4gICAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gICAgfTtcbiAgICBGbGF0VHJlZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJlbW92ZUl0ZW0odGhpcy5jaGlsZHJlbiwgY2hpbGQpO1xuICAgICAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICAgIH07XG4gICAgRmxhdFRyZWUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5pc0RpcnR5ICYmIHRoaXMuY2hpbGRyZW4uc29ydChjb21wYXJlQnlEZXB0aCk7XG4gICAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goY2FsbGJhY2spO1xuICAgIH07XG4gICAgcmV0dXJuIEZsYXRUcmVlO1xufSgpKTtcblxuZXhwb3J0IHsgRmxhdFRyZWUgfTtcbiIsImltcG9ydCB7IF9fc3ByZWFkQXJyYXksIF9fcmVhZCwgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgc3luYywgeyBjYW5jZWxTeW5jLCBmbHVzaFN5bmMgfSBmcm9tICdmcmFtZXN5bmMnO1xuaW1wb3J0IHsgbWl4IH0gZnJvbSAncG9wbW90aW9uJztcbmltcG9ydCB7IGFuaW1hdGUgfSBmcm9tICcuLi8uLi9hbmltYXRpb24vYW5pbWF0ZS5tanMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uTWFuYWdlciB9IGZyb20gJy4uLy4uL3V0aWxzL3N1YnNjcmlwdGlvbi1tYW5hZ2VyLm1qcyc7XG5pbXBvcnQgeyBtaXhWYWx1ZXMgfSBmcm9tICcuLi9hbmltYXRpb24vbWl4LXZhbHVlcy5tanMnO1xuaW1wb3J0IHsgY29weUJveEludG8gfSBmcm9tICcuLi9nZW9tZXRyeS9jb3B5Lm1qcyc7XG5pbXBvcnQgeyB0cmFuc2xhdGVBeGlzLCB0cmFuc2Zvcm1Cb3gsIGFwcGx5Qm94RGVsdGEsIGFwcGx5VHJlZURlbHRhcyB9IGZyb20gJy4uL2dlb21ldHJ5L2RlbHRhLWFwcGx5Lm1qcyc7XG5pbXBvcnQgeyBjYWxjUmVsYXRpdmVQb3NpdGlvbiwgY2FsY1JlbGF0aXZlQm94LCBjYWxjQm94RGVsdGEsIGNhbGNMZW5ndGggfSBmcm9tICcuLi9nZW9tZXRyeS9kZWx0YS1jYWxjLm1qcyc7XG5pbXBvcnQgeyByZW1vdmVCb3hUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vZ2VvbWV0cnkvZGVsdGEtcmVtb3ZlLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVCb3gsIGNyZWF0ZURlbHRhIH0gZnJvbSAnLi4vZ2VvbWV0cnkvbW9kZWxzLm1qcyc7XG5pbXBvcnQgeyBnZXRWYWx1ZVRyYW5zaXRpb24gfSBmcm9tICcuLi8uLi9hbmltYXRpb24vdXRpbHMvdHJhbnNpdGlvbnMubWpzJztcbmltcG9ydCB7IGJveEVxdWFscywgaXNEZWx0YVplcm8gfSBmcm9tICcuLi9nZW9tZXRyeS91dGlscy5tanMnO1xuaW1wb3J0IHsgTm9kZVN0YWNrIH0gZnJvbSAnLi4vc2hhcmVkL3N0YWNrLm1qcyc7XG5pbXBvcnQgeyBzY2FsZUNvcnJlY3RvcnMgfSBmcm9tICcuLi9zdHlsZXMvc2NhbGUtY29ycmVjdGlvbi5tanMnO1xuaW1wb3J0IHsgYnVpbGRQcm9qZWN0aW9uVHJhbnNmb3JtIH0gZnJvbSAnLi4vc3R5bGVzL3RyYW5zZm9ybS5tanMnO1xuaW1wb3J0IHsgZWFjaEF4aXMgfSBmcm9tICcuLi91dGlscy9lYWNoLWF4aXMubWpzJztcbmltcG9ydCB7IGhhc1RyYW5zZm9ybSwgaGFzU2NhbGUgfSBmcm9tICcuLi91dGlscy9oYXMtdHJhbnNmb3JtLm1qcyc7XG5pbXBvcnQgeyB0cmFuc2Zvcm1BeGVzIH0gZnJvbSAnLi4vLi4vcmVuZGVyL2h0bWwvdXRpbHMvdHJhbnNmb3JtLm1qcyc7XG5pbXBvcnQgeyBGbGF0VHJlZSB9IGZyb20gJy4uLy4uL3JlbmRlci91dGlscy9mbGF0LXRyZWUubWpzJztcbmltcG9ydCB7IHJlc29sdmVNb3Rpb25WYWx1ZSB9IGZyb20gJy4uLy4uL3ZhbHVlL3V0aWxzL3Jlc29sdmUtbW90aW9uLXZhbHVlLm1qcyc7XG5pbXBvcnQgeyBnbG9iYWxQcm9qZWN0aW9uU3RhdGUgfSBmcm9tICcuL3N0YXRlLm1qcyc7XG5cbi8qKlxuICogV2UgdXNlIDEwMDAgYXMgdGhlIGFuaW1hdGlvbiB0YXJnZXQgYXMgMC0xMDAwIG1hcHMgYmV0dGVyIHRvIHBpeGVscyB0aGFuIDAtMVxuICogd2hpY2ggaGFzIGEgbm90aWNlYWJsZSBkaWZmZXJlbmNlIGluIHNwcmluZyBhbmltYXRpb25zXG4gKi9cbnZhciBhbmltYXRpb25UYXJnZXQgPSAxMDAwO1xuZnVuY3Rpb24gY3JlYXRlUHJvamVjdGlvbk5vZGUoX2EpIHtcbiAgICB2YXIgYXR0YWNoUmVzaXplTGlzdGVuZXIgPSBfYS5hdHRhY2hSZXNpemVMaXN0ZW5lciwgZGVmYXVsdFBhcmVudCA9IF9hLmRlZmF1bHRQYXJlbnQsIG1lYXN1cmVTY3JvbGwgPSBfYS5tZWFzdXJlU2Nyb2xsLCBjaGVja0lzU2Nyb2xsUm9vdCA9IF9hLmNoZWNrSXNTY3JvbGxSb290LCByZXNldFRyYW5zZm9ybSA9IF9hLnJlc2V0VHJhbnNmb3JtO1xuICAgIHJldHVybiAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZ1bmN0aW9uIFByb2plY3Rpb25Ob2RlKGlkLCBsYXRlc3RWYWx1ZXMsIHBhcmVudCkge1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIGlmIChsYXRlc3RWYWx1ZXMgPT09IHZvaWQgMCkgeyBsYXRlc3RWYWx1ZXMgPSB7fTsgfVxuICAgICAgICAgICAgaWYgKHBhcmVudCA9PT0gdm9pZCAwKSB7IHBhcmVudCA9IGRlZmF1bHRQYXJlbnQgPT09IG51bGwgfHwgZGVmYXVsdFBhcmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVmYXVsdFBhcmVudCgpOyB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEEgU2V0IGNvbnRhaW5pbmcgYWxsIHRoaXMgY29tcG9uZW50J3MgY2hpbGRyZW4uIFRoaXMgaXMgdXNlZCB0byBpdGVyYXRlXG4gICAgICAgICAgICAgKiB0aHJvdWdoIHRoZSBjaGlsZHJlbi5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBUT0RPOiBUaGlzIGNvdWxkIGJlIGZhc3RlciB0byBpdGVyYXRlIGFzIGEgZmxhdCBhcnJheSBzdG9yZWQgb24gdGhlIHJvb3Qgbm9kZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbiA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogT3B0aW9ucyBmb3IgdGhlIG5vZGUuIFdlIHVzZSB0aGlzIHRvIGNvbmZpZ3VyZSB3aGF0IGtpbmQgb2YgbGF5b3V0IGFuaW1hdGlvbnNcbiAgICAgICAgICAgICAqIHdlIHNob3VsZCBwZXJmb3JtIChpZiBhbnkpLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2UgdXNlIHRoaXMgdG8gZGV0ZWN0IHdoZW4gaXRzIHNhZmUgdG8gc2h1dCBkb3duIHBhcnQgb2YgYSBwcm9qZWN0aW9uIHRyZWUuXG4gICAgICAgICAgICAgKiBXZSBoYXZlIHRvIGtlZXAgcHJvamVjdGluZyBjaGlsZHJlbiBmb3Igc2NhbGUgY29ycmVjdGlvbiBhbmQgcmVsYXRpdmUgcHJvamVjdGlvblxuICAgICAgICAgICAgICogdW50aWwgYWxsIHRoZWlyIHBhcmVudHMgc3RvcCBwZXJmb3JtaW5nIGxheW91dCBhbmltYXRpb25zLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLmlzVHJlZUFuaW1hdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pc0FuaW1hdGlvbkJsb2NrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRmxhZyB0byB0cnVlIGlmIHdlIHRoaW5rIHRoaXMgbGF5b3V0IGhhcyBiZWVuIGNoYW5nZWQuIFdlIGNhbid0IGFsd2F5cyBrbm93IHRoaXMsXG4gICAgICAgICAgICAgKiBjdXJyZW50bHkgd2Ugc2V0IGl0IHRvIHRydWUgZXZlcnkgdGltZSBhIGNvbXBvbmVudCByZW5kZXJzLCBvciBpZiBpdCBoYXMgYSBsYXlvdXREZXBlbmRlbmN5XG4gICAgICAgICAgICAgKiBpZiB0aGF0IGhhcyBjaGFuZ2VkIGJldHdlZW4gcmVuZGVycy4gQWRkaXRpb25hbGx5LCBjb21wb25lbnRzIGNhbiBiZSBncm91cGVkIGJ5IExheW91dEdyb3VwXG4gICAgICAgICAgICAgKiBhbmQgaWYgb25lIG5vZGUgaXMgZGlydGllZCwgdGhleSBhbGwgYXJlLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLmlzTGF5b3V0RGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQmxvY2sgbGF5b3V0IHVwZGF0ZXMgZm9yIGluc3RhbnQgbGF5b3V0IHRyYW5zaXRpb25zIHRocm91Z2hvdXQgdGhlIHRyZWUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMudXBkYXRlTWFudWFsbHlCbG9ja2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJsb2NrZWRCeVJlc2l6ZSA9IGZhbHNlO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBTZXQgdG8gdHJ1ZSBiZXR3ZWVuIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgYHdpbGxVcGRhdGVgIGNhbGwgYW5kIHRoZSBlbmQgb2YgdGhlIGBkaWRVcGRhdGVgXG4gICAgICAgICAgICAgKiBjYWxsLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLmlzVXBkYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgdGhpcyBpcyBhbiBTVkcgZWxlbWVudCB3ZSBjdXJyZW50bHkgZGlzYWJsZSBwcm9qZWN0aW9uIHRyYW5zZm9ybXNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5pc1NWRyA9IGZhbHNlO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBGbGFnIHRvIHRydWUgKGR1cmluZyBwcm9tb3Rpb24pIGlmIGEgbm9kZSBkb2luZyBhbiBpbnN0YW50IGxheW91dCB0cmFuc2l0aW9uIG5lZWRzIHRvIHJlc2V0XG4gICAgICAgICAgICAgKiBpdHMgcHJvamVjdGlvbiBzdHlsZXMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMubmVlZHNSZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBGbGFncyB3aGV0aGVyIHRoaXMgbm9kZSBzaG91bGQgaGF2ZSBpdHMgdHJhbnNmb3JtIHJlc2V0IHByaW9yIHRvIG1lYXN1cmluZy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5zaG91bGRSZXNldFRyYW5zZm9ybSA9IGZhbHNlO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjYWxjdWxhdGVkIGNvbnRleHR1YWwvYWNjdW11bGF0ZWQvdHJlZSBzY2FsZS5cbiAgICAgICAgICAgICAqIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHNjYWxlIGNhbGN1bGNhdGVkIHByb2plY3Rpb24gdHJhbnNmb3JtcywgYXMgdGhlc2UgYXJlXG4gICAgICAgICAgICAgKiBjYWxjdWxhdGVkIGluIHNjcmVlbi1zcGFjZSBidXQgbmVlZCB0byBiZSBzY2FsZWQgZm9yIGVsZW1lbnRzIHRvIGFjdHVhbGx5XG4gICAgICAgICAgICAgKiBtYWtlIGl0IHRvIHRoZWlyIGNhbGN1bGF0ZWQgZGVzdGluYXRpb25zLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFRPRE86IExhenktaW5pdFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLnRyZWVTY2FsZSA9IHsgeDogMSwgeTogMSB9O1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlcnMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICAvLyBOb3RlOiBDdXJyZW50bHkgb25seSBydW5uaW5nIG9uIHJvb3Qgbm9kZVxuICAgICAgICAgICAgdGhpcy5wb3RlbnRpYWxOb2RlcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tVcGRhdGVGYWlsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmlzVXBkYXRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuaXNVcGRhdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jbGVhckFsbFNuYXBzaG90cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByb2plY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMubm9kZXMuZm9yRWFjaChyZXNvbHZlVGFyZ2V0RGVsdGEpO1xuICAgICAgICAgICAgICAgIF90aGlzLm5vZGVzLmZvckVhY2goY2FsY1Byb2plY3Rpb24pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuaGFzUHJvamVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvblByb2dyZXNzID0gMDtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogU2hhcmVkIGxheW91dFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICAvLyBUT0RPIE9ubHkgcnVubmluZyBvbiByb290IG5vZGVcbiAgICAgICAgICAgIHRoaXMuc2hhcmVkTm9kZXMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgICAgICB0aGlzLmxhdGVzdFZhbHVlcyA9IGxhdGVzdFZhbHVlcztcbiAgICAgICAgICAgIHRoaXMucm9vdCA9IHBhcmVudCA/IHBhcmVudC5yb290IHx8IHBhcmVudCA6IHRoaXM7XG4gICAgICAgICAgICB0aGlzLnBhdGggPSBwYXJlbnQgPyBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChwYXJlbnQucGF0aCksIGZhbHNlKSwgW3BhcmVudF0sIGZhbHNlKSA6IFtdO1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgICAgICB0aGlzLmRlcHRoID0gcGFyZW50ID8gcGFyZW50LmRlcHRoICsgMSA6IDA7XG4gICAgICAgICAgICBpZCAmJiB0aGlzLnJvb3QucmVnaXN0ZXJQb3RlbnRpYWxOb2RlKGlkLCB0aGlzKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXRoW2ldLnNob3VsZFJlc2V0VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnJvb3QgPT09IHRoaXMpXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlcyA9IG5ldyBGbGF0VHJlZSgpO1xuICAgICAgICB9XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKG5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5ldmVudEhhbmRsZXJzLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVycy5zZXQobmFtZSwgbmV3IFN1YnNjcmlwdGlvbk1hbmFnZXIoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ldmVudEhhbmRsZXJzLmdldChuYW1lKS5hZGQoaGFuZGxlcik7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5ub3RpZnlMaXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJnc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBzdWJzY3JpcHRpb25NYW5hZ2VyID0gdGhpcy5ldmVudEhhbmRsZXJzLmdldChuYW1lKTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbk1hbmFnZXIgPT09IG51bGwgfHwgc3Vic2NyaXB0aW9uTWFuYWdlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3Vic2NyaXB0aW9uTWFuYWdlci5ub3RpZnkuYXBwbHkoc3Vic2NyaXB0aW9uTWFuYWdlciwgX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGFyZ3MpLCBmYWxzZSkpO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuaGFzTGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50SGFuZGxlcnMuaGFzKG5hbWUpO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUucmVnaXN0ZXJQb3RlbnRpYWxOb2RlID0gZnVuY3Rpb24gKGlkLCBub2RlKSB7XG4gICAgICAgICAgICB0aGlzLnBvdGVudGlhbE5vZGVzLnNldChpZCwgbm9kZSk7XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMaWZlY3ljbGVzXG4gICAgICAgICAqL1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUubW91bnQgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIGlzTGF5b3V0RGlydHkpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoaXNMYXlvdXREaXJ0eSA9PT0gdm9pZCAwKSB7IGlzTGF5b3V0RGlydHkgPSBmYWxzZTsgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5pc1NWRyA9XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgaW5zdGFuY2VvZiBTVkdFbGVtZW50ICYmIGluc3RhbmNlLnRhZ05hbWUgIT09IFwic3ZnXCI7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICB2YXIgX2IgPSB0aGlzLm9wdGlvbnMsIGxheW91dElkID0gX2IubGF5b3V0SWQsIGxheW91dCA9IF9iLmxheW91dCwgdmlzdWFsRWxlbWVudCA9IF9iLnZpc3VhbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAodmlzdWFsRWxlbWVudCAmJiAhdmlzdWFsRWxlbWVudC5nZXRJbnN0YW5jZSgpKSB7XG4gICAgICAgICAgICAgICAgdmlzdWFsRWxlbWVudC5tb3VudChpbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJvb3Qubm9kZXMuYWRkKHRoaXMpO1xuICAgICAgICAgICAgKF9hID0gdGhpcy5wYXJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jaGlsZHJlbi5hZGQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmlkICYmIHRoaXMucm9vdC5wb3RlbnRpYWxOb2Rlcy5kZWxldGUodGhpcy5pZCk7XG4gICAgICAgICAgICBpZiAoaXNMYXlvdXREaXJ0eSAmJiAobGF5b3V0IHx8IGxheW91dElkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMYXlvdXREaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYXR0YWNoUmVzaXplTGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICB2YXIgdW5ibG9ja1RpbWVvdXRfMTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzaXplVW5ibG9ja1VwZGF0ZV8xID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKF90aGlzLnJvb3QudXBkYXRlQmxvY2tlZEJ5UmVzaXplID0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYXR0YWNoUmVzaXplTGlzdGVuZXIoaW5zdGFuY2UsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMucm9vdC51cGRhdGVCbG9ja2VkQnlSZXNpemUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodW5ibG9ja1RpbWVvdXRfMSk7XG4gICAgICAgICAgICAgICAgICAgIHVuYmxvY2tUaW1lb3V0XzEgPSB3aW5kb3cuc2V0VGltZW91dChyZXNpemVVbmJsb2NrVXBkYXRlXzEsIDI1MCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnbG9iYWxQcm9qZWN0aW9uU3RhdGUuaGFzQW5pbWF0ZWRTaW5jZVJlc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsUHJvamVjdGlvblN0YXRlLmhhc0FuaW1hdGVkU2luY2VSZXNpemUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLm5vZGVzLmZvckVhY2goZmluaXNoQW5pbWF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxheW91dElkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb290LnJlZ2lzdGVyU2hhcmVkTm9kZShsYXlvdXRJZCwgdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBPbmx5IHJlZ2lzdGVyIHRoZSBoYW5kbGVyIGlmIGl0IHJlcXVpcmVzIGxheW91dCBhbmltYXRpb25cbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYW5pbWF0ZSAhPT0gZmFsc2UgJiZcbiAgICAgICAgICAgICAgICB2aXN1YWxFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgKGxheW91dElkIHx8IGxheW91dCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJkaWRVcGRhdGVcIiwgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYiwgX2MsIF9kLCBfZSwgX2Y7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YSA9IF9hLmRlbHRhLCBoYXNMYXlvdXRDaGFuZ2VkID0gX2EuaGFzTGF5b3V0Q2hhbmdlZCwgaGFzUmVsYXRpdmVUYXJnZXRDaGFuZ2VkID0gX2EuaGFzUmVsYXRpdmVUYXJnZXRDaGFuZ2VkLCBuZXdMYXlvdXQgPSBfYS5sYXlvdXQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5pc1RyZWVBbmltYXRpb25CbG9ja2VkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlbGF0aXZlVGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IENoZWNrIGhlcmUgaWYgYW4gYW5pbWF0aW9uIGV4aXN0c1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGF5b3V0VHJhbnNpdGlvbiA9IChfYyA9IChfYiA9IF90aGlzLm9wdGlvbnMudHJhbnNpdGlvbikgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogdmlzdWFsRWxlbWVudC5nZXREZWZhdWx0VHJhbnNpdGlvbigpKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBkZWZhdWx0TGF5b3V0VHJhbnNpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9nID0gdmlzdWFsRWxlbWVudC5nZXRQcm9wcygpLCBvbkxheW91dEFuaW1hdGlvblN0YXJ0ID0gX2cub25MYXlvdXRBbmltYXRpb25TdGFydCwgb25MYXlvdXRBbmltYXRpb25Db21wbGV0ZSA9IF9nLm9uTGF5b3V0QW5pbWF0aW9uQ29tcGxldGU7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBUaGUgdGFyZ2V0IGxheW91dCBvZiB0aGUgZWxlbWVudCBtaWdodCBzdGF5IHRoZSBzYW1lLFxuICAgICAgICAgICAgICAgICAgICAgKiBidXQgaXRzIHBvc2l0aW9uIHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0Q2hhbmdlZCA9ICFfdGhpcy50YXJnZXRMYXlvdXQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICFib3hFcXVhbHMoX3RoaXMudGFyZ2V0TGF5b3V0LCBuZXdMYXlvdXQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNSZWxhdGl2ZVRhcmdldENoYW5nZWQ7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBJZiB0aGUgbGF5b3V0IGhhc24ndCBzZWVtZWQgdG8gaGF2ZSBjaGFuZ2VkLCBpdCBtaWdodCBiZSB0aGF0IHRoZVxuICAgICAgICAgICAgICAgICAgICAgKiBlbGVtZW50IGlzIHZpc3VhbGx5IGluIHRoZSBzYW1lIHBsYWNlIGluIHRoZSBkb2N1bWVudCBidXQgaXRzIHBvc2l0aW9uXG4gICAgICAgICAgICAgICAgICAgICAqIHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgaGFzIGluZGVlZCBjaGFuZ2VkLiBTbyBoZXJlIHdlIGNoZWNrIGZvciB0aGF0LlxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgdmFyIGhhc09ubHlSZWxhdGl2ZVRhcmdldENoYW5nZWQgPSAhaGFzTGF5b3V0Q2hhbmdlZCAmJiBoYXNSZWxhdGl2ZVRhcmdldENoYW5nZWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoKF9kID0gX3RoaXMucmVzdW1lRnJvbSkgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmluc3RhbmNlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT25seVJlbGF0aXZlVGFyZ2V0Q2hhbmdlZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKGhhc0xheW91dENoYW5nZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGFyZ2V0Q2hhbmdlZCB8fCAhX3RoaXMuY3VycmVudEFuaW1hdGlvbikpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMucmVzdW1lRnJvbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlc3VtaW5nRnJvbSA9IF90aGlzLnJlc3VtZUZyb207XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMucmVzdW1pbmdGcm9tLnJlc3VtaW5nRnJvbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnNldEFuaW1hdGlvbk9yaWdpbihkZWx0YSwgaGFzT25seVJlbGF0aXZlVGFyZ2V0Q2hhbmdlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYW5pbWF0aW9uT3B0aW9ucyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBnZXRWYWx1ZVRyYW5zaXRpb24obGF5b3V0VHJhbnNpdGlvbiwgXCJsYXlvdXRcIikpLCB7IG9uUGxheTogb25MYXlvdXRBbmltYXRpb25TdGFydCwgb25Db21wbGV0ZTogb25MYXlvdXRBbmltYXRpb25Db21wbGV0ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aXN1YWxFbGVtZW50LnNob3VsZFJlZHVjZU1vdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbk9wdGlvbnMuZGVsYXkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbk9wdGlvbnMudHlwZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuc3RhcnRBbmltYXRpb24oYW5pbWF0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIElmIHRoZSBsYXlvdXQgaGFzbid0IGNoYW5nZWQgYW5kIHdlIGhhdmUgYW4gYW5pbWF0aW9uIHRoYXQgaGFzbid0IHN0YXJ0ZWQgeWV0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICogZmluaXNoIGl0IGltbWVkaWF0ZWx5LiBPdGhlcndpc2UgaXQgd2lsbCBiZSBhbmltYXRpbmcgZnJvbSBhIGxvY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGF0IHdhcyBwcm9iYWJseSBuZXZlciBjb21taXRlZCB0byBzY3JlZW4gYW5kIGxvb2sgbGlrZSBhIGp1bXB5IGJveC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNMYXlvdXRDaGFuZ2VkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuYW5pbWF0aW9uUHJvZ3Jlc3MgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5maW5pc2hBbmltYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmlzTGVhZCgpICYmICgoX2YgPSAoX2UgPSBfdGhpcy5vcHRpb25zKS5vbkV4aXRDb21wbGV0ZSkgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLmNhbGwoX2UpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfdGhpcy50YXJnZXRMYXlvdXQgPSBuZXdMYXlvdXQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS51bm1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sYXlvdXRJZCAmJiB0aGlzLndpbGxVcGRhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucm9vdC5ub2Rlcy5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAoX2EgPSB0aGlzLmdldFN0YWNrKCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAoX2IgPSB0aGlzLnBhcmVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNoaWxkcmVuLmRlbGV0ZSh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjYW5jZWxTeW5jLnByZVJlbmRlcih0aGlzLnVwZGF0ZVByb2plY3Rpb24pO1xuICAgICAgICB9O1xuICAgICAgICAvLyBvbmx5IG9uIHRoZSByb290XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5ibG9ja1VwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTWFudWFsbHlCbG9ja2VkID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnVuYmxvY2tVcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1hbnVhbGx5QmxvY2tlZCA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuaXNVcGRhdGVCbG9ja2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlTWFudWFsbHlCbG9ja2VkIHx8IHRoaXMudXBkYXRlQmxvY2tlZEJ5UmVzaXplO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuaXNUcmVlQW5pbWF0aW9uQmxvY2tlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5pc0FuaW1hdGlvbkJsb2NrZWQgfHxcbiAgICAgICAgICAgICAgICAoKF9hID0gdGhpcy5wYXJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pc1RyZWVBbmltYXRpb25CbG9ja2VkKCkpIHx8XG4gICAgICAgICAgICAgICAgZmFsc2UpO1xuICAgICAgICB9O1xuICAgICAgICAvLyBOb3RlOiBjdXJyZW50bHkgb25seSBydW5uaW5nIG9uIHJvb3Qgbm9kZVxuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuc3RhcnRVcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1VwZGF0ZUJsb2NrZWQoKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLmlzVXBkYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgKF9hID0gdGhpcy5ub2RlcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvckVhY2gocmVzZXRSb3RhdGlvbik7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS53aWxsVXBkYXRlID0gZnVuY3Rpb24gKHNob3VsZE5vdGlmeUxpc3RlbmVycykge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICBpZiAoc2hvdWxkTm90aWZ5TGlzdGVuZXJzID09PSB2b2lkIDApIHsgc2hvdWxkTm90aWZ5TGlzdGVuZXJzID0gdHJ1ZTsgfVxuICAgICAgICAgICAgaWYgKHRoaXMucm9vdC5pc1VwZGF0ZUJsb2NrZWQoKSkge1xuICAgICAgICAgICAgICAgIChfYiA9IChfYSA9IHRoaXMub3B0aW9ucykub25FeGl0Q29tcGxldGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAhdGhpcy5yb290LmlzVXBkYXRpbmcgJiYgdGhpcy5yb290LnN0YXJ0VXBkYXRlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0xheW91dERpcnR5KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuaXNMYXlvdXREaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5wYXRoW2ldO1xuICAgICAgICAgICAgICAgIG5vZGUuc2hvdWxkUmVzZXRUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIFRPRE86IENoZWNrIHdlIGhhdmVuJ3QgdXBkYXRlZCB0aGUgc2Nyb2xsXG4gICAgICAgICAgICAgICAgICogc2luY2UgdGhlIGxhc3QgZGlkVXBkYXRlXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgbm9kZS51cGRhdGVTY3JvbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfZCA9IHRoaXMub3B0aW9ucywgbGF5b3V0SWQgPSBfZC5sYXlvdXRJZCwgbGF5b3V0ID0gX2QubGF5b3V0O1xuICAgICAgICAgICAgaWYgKGxheW91dElkID09PSB1bmRlZmluZWQgJiYgIWxheW91dClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgdHJhbnNmb3JtVGVtcGxhdGUgPSAoX2MgPSB0aGlzLm9wdGlvbnMudmlzdWFsRWxlbWVudCkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmdldFByb3BzKCkudHJhbnNmb3JtVGVtcGxhdGU7XG4gICAgICAgICAgICB0aGlzLnByZXZUcmFuc2Zvcm1UZW1wbGF0ZVZhbHVlID0gdHJhbnNmb3JtVGVtcGxhdGUgPT09IG51bGwgfHwgdHJhbnNmb3JtVGVtcGxhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRyYW5zZm9ybVRlbXBsYXRlKHRoaXMubGF0ZXN0VmFsdWVzLCBcIlwiKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU25hcHNob3QoKTtcbiAgICAgICAgICAgIHNob3VsZE5vdGlmeUxpc3RlbmVycyAmJiB0aGlzLm5vdGlmeUxpc3RlbmVycyhcIndpbGxVcGRhdGVcIik7XG4gICAgICAgIH07XG4gICAgICAgIC8vIE5vdGU6IEN1cnJlbnRseSBvbmx5IHJ1bm5pbmcgb24gcm9vdCBub2RlXG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5kaWRVcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdXBkYXRlV2FzQmxvY2tlZCA9IHRoaXMuaXNVcGRhdGVCbG9ja2VkKCk7XG4gICAgICAgICAgICAvLyBXaGVuIGRvaW5nIGFuIGluc3RhbnQgdHJhbnNpdGlvbiwgd2Ugc2tpcCB0aGUgbGF5b3V0IHVwZGF0ZSxcbiAgICAgICAgICAgIC8vIGJ1dCBzaG91bGQgc3RpbGwgY2xlYW4gdXAgdGhlIG1lYXN1cmVtZW50cyBzbyB0aGF0IHRoZSBuZXh0XG4gICAgICAgICAgICAvLyBzbmFwc2hvdCBjb3VsZCBiZSB0YWtlbiBjb3JyZWN0bHkuXG4gICAgICAgICAgICBpZiAodXBkYXRlV2FzQmxvY2tlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMudW5ibG9ja1VwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJBbGxTbmFwc2hvdHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzLmZvckVhY2goY2xlYXJNZWFzdXJlbWVudHMpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5pc1VwZGF0aW5nKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBTZWFyY2ggZm9yIGFuZCBtb3VudCBuZXdseS1hZGRlZCBwcm9qZWN0aW9uIGVsZW1lbnRzLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFRPRE86IEV2ZXJ5IHRpbWUgYSBuZXcgY29tcG9uZW50IGlzIHJlbmRlcmVkIHdlIGNvdWxkIHNlYXJjaCB1cCB0aGUgdHJlZSBmb3JcbiAgICAgICAgICAgICAqIHRoZSBjbG9zZXN0IG1vdW50ZWQgbm9kZSBhbmQgcXVlcnkgZnJvbSB0aGVyZSByYXRoZXIgdGhhbiBkb2N1bWVudC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHRoaXMucG90ZW50aWFsTm9kZXMuc2l6ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucG90ZW50aWFsTm9kZXMuZm9yRWFjaChtb3VudE5vZGVFYXJseSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3RlbnRpYWxOb2Rlcy5jbGVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXcml0ZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLm5vZGVzLmZvckVhY2gocmVzZXRUcmFuc2Zvcm1TdHlsZSk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFJlYWQgPT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIC8vIFVwZGF0ZSBsYXlvdXQgbWVhc3VyZW1lbnRzIG9mIHVwZGF0ZWQgY2hpbGRyZW5cbiAgICAgICAgICAgIHRoaXMubm9kZXMuZm9yRWFjaCh1cGRhdGVMYXlvdXQpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXcml0ZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICAvLyBOb3RpZnkgbGlzdGVuZXJzIHRoYXQgdGhlIGxheW91dCBpcyB1cGRhdGVkXG4gICAgICAgICAgICB0aGlzLm5vZGVzLmZvckVhY2gobm90aWZ5TGF5b3V0VXBkYXRlKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJBbGxTbmFwc2hvdHMoKTtcbiAgICAgICAgICAgIC8vIEZsdXNoIGFueSBzY2hlZHVsZWQgdXBkYXRlc1xuICAgICAgICAgICAgZmx1c2hTeW5jLnVwZGF0ZSgpO1xuICAgICAgICAgICAgZmx1c2hTeW5jLnByZVJlbmRlcigpO1xuICAgICAgICAgICAgZmx1c2hTeW5jLnJlbmRlcigpO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuY2xlYXJBbGxTbmFwc2hvdHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLm5vZGVzLmZvckVhY2goY2xlYXJTbmFwc2hvdCk7XG4gICAgICAgICAgICB0aGlzLnNoYXJlZE5vZGVzLmZvckVhY2gocmVtb3ZlTGVhZFNuYXBzaG90cyk7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5zY2hlZHVsZVVwZGF0ZVByb2plY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzeW5jLnByZVJlbmRlcih0aGlzLnVwZGF0ZVByb2plY3Rpb24sIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnNjaGVkdWxlQ2hlY2tBZnRlclVubW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB0aGUgdW5tb3VudGluZyBub2RlIGlzIGluIGEgbGF5b3V0R3JvdXAgYW5kIGRpZCB0cmlnZ2VyIGEgd2lsbFVwZGF0ZSxcbiAgICAgICAgICAgICAqIHdlIG1hbnVhbGx5IGNhbGwgZGlkVXBkYXRlIHRvIGdpdmUgYSBjaGFuY2UgdG8gdGhlIHNpYmxpbmdzIHRvIGFuaW1hdGUuXG4gICAgICAgICAgICAgKiBPdGhlcndpc2UsIGNsZWFudXAgYWxsIHNuYXBzaG90cyB0byBwcmV2ZW50cyBmdXR1cmUgbm9kZXMgZnJvbSByZXVzaW5nIHRoZW0uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHN5bmMucG9zdFJlbmRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmlzTGF5b3V0RGlydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMucm9vdC5kaWRVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnJvb3QuY2hlY2tVcGRhdGVGYWlsZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVwZGF0ZSBtZWFzdXJlbWVudHNcbiAgICAgICAgICovXG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS51cGRhdGVTbmFwc2hvdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNuYXBzaG90IHx8ICF0aGlzLmluc3RhbmNlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBtZWFzdXJlZCA9IHRoaXMubWVhc3VyZSgpO1xuICAgICAgICAgICAgdmFyIGxheW91dCA9IHRoaXMucmVtb3ZlVHJhbnNmb3JtKHRoaXMucmVtb3ZlRWxlbWVudFNjcm9sbChtZWFzdXJlZCkpO1xuICAgICAgICAgICAgcm91bmRCb3gobGF5b3V0KTtcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3QgPSB7XG4gICAgICAgICAgICAgICAgbWVhc3VyZWQ6IG1lYXN1cmVkLFxuICAgICAgICAgICAgICAgIGxheW91dDogbGF5b3V0LFxuICAgICAgICAgICAgICAgIGxhdGVzdFZhbHVlczoge30sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUudXBkYXRlTGF5b3V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIC8vIFRPRE86IEluY29ycG9yYXRlIGludG8gYSBmb3J3YXJkZWQgc2Nyb2xsIG9mZnNldFxuICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGwoKTtcbiAgICAgICAgICAgIGlmICghKHRoaXMub3B0aW9ucy5hbHdheXNNZWFzdXJlTGF5b3V0ICYmIHRoaXMuaXNMZWFkKCkpICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuaXNMYXlvdXREaXJ0eSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2hlbiBhIG5vZGUgaXMgbW91bnRlZCwgaXQgc2ltcGx5IHJlc3VtZXMgZnJvbSB0aGUgcHJldkxlYWQnc1xuICAgICAgICAgICAgICogc25hcHNob3QgaW5zdGVhZCBvZiB0YWtpbmcgYSBuZXcgb25lLCBidXQgdGhlIGFuY2VzdG9ycyBzY3JvbGxcbiAgICAgICAgICAgICAqIG1pZ2h0IGhhdmUgdXBkYXRlZCB3aGlsZSB0aGUgcHJldkxlYWQgaXMgdW5tb3VudGVkLiBXZSBuZWVkIHRvXG4gICAgICAgICAgICAgKiB1cGRhdGUgdGhlIHNjcm9sbCBhZ2FpbiB0byBtYWtlIHN1cmUgdGhlIGxheW91dCB3ZSBtZWFzdXJlIGlzXG4gICAgICAgICAgICAgKiB1cCB0byBkYXRlLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAodGhpcy5yZXN1bWVGcm9tICYmICF0aGlzLnJlc3VtZUZyb20uaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMucGF0aFtpXTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS51cGRhdGVTY3JvbGwoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbWVhc3VyZWQgPSB0aGlzLm1lYXN1cmUoKTtcbiAgICAgICAgICAgIHJvdW5kQm94KG1lYXN1cmVkKTtcbiAgICAgICAgICAgIHZhciBwcmV2TGF5b3V0ID0gdGhpcy5sYXlvdXQ7XG4gICAgICAgICAgICB0aGlzLmxheW91dCA9IHtcbiAgICAgICAgICAgICAgICBtZWFzdXJlZDogbWVhc3VyZWQsXG4gICAgICAgICAgICAgICAgYWN0dWFsOiB0aGlzLnJlbW92ZUVsZW1lbnRTY3JvbGwobWVhc3VyZWQpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0Q29ycmVjdGVkID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICB0aGlzLmlzTGF5b3V0RGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdGlvbkRlbHRhID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlMaXN0ZW5lcnMoXCJtZWFzdXJlXCIsIHRoaXMubGF5b3V0LmFjdHVhbCk7XG4gICAgICAgICAgICAoX2EgPSB0aGlzLm9wdGlvbnMudmlzdWFsRWxlbWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5vdGlmeUxheW91dE1lYXN1cmUodGhpcy5sYXlvdXQuYWN0dWFsLCBwcmV2TGF5b3V0ID09PSBudWxsIHx8IHByZXZMYXlvdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByZXZMYXlvdXQuYWN0dWFsKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnVwZGF0ZVNjcm9sbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGF5b3V0U2Nyb2xsICYmIHRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2Nyb2xsUm9vdCA9IGNoZWNrSXNTY3JvbGxSb290KHRoaXMuaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsID0gbWVhc3VyZVNjcm9sbCh0aGlzLmluc3RhbmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnJlc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKCFyZXNldFRyYW5zZm9ybSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgaXNSZXNldFJlcXVlc3RlZCA9IHRoaXMuaXNMYXlvdXREaXJ0eSB8fCB0aGlzLnNob3VsZFJlc2V0VHJhbnNmb3JtO1xuICAgICAgICAgICAgdmFyIGhhc1Byb2plY3Rpb24gPSB0aGlzLnByb2plY3Rpb25EZWx0YSAmJiAhaXNEZWx0YVplcm8odGhpcy5wcm9qZWN0aW9uRGVsdGEpO1xuICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVRlbXBsYXRlID0gKF9hID0gdGhpcy5vcHRpb25zLnZpc3VhbEVsZW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRQcm9wcygpLnRyYW5zZm9ybVRlbXBsYXRlO1xuICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVRlbXBsYXRlVmFsdWUgPSB0cmFuc2Zvcm1UZW1wbGF0ZSA9PT0gbnVsbCB8fCB0cmFuc2Zvcm1UZW1wbGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdHJhbnNmb3JtVGVtcGxhdGUodGhpcy5sYXRlc3RWYWx1ZXMsIFwiXCIpO1xuICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVRlbXBsYXRlSGFzQ2hhbmdlZCA9IHRyYW5zZm9ybVRlbXBsYXRlVmFsdWUgIT09IHRoaXMucHJldlRyYW5zZm9ybVRlbXBsYXRlVmFsdWU7XG4gICAgICAgICAgICBpZiAoaXNSZXNldFJlcXVlc3RlZCAmJlxuICAgICAgICAgICAgICAgIChoYXNQcm9qZWN0aW9uIHx8XG4gICAgICAgICAgICAgICAgICAgIGhhc1RyYW5zZm9ybSh0aGlzLmxhdGVzdFZhbHVlcykgfHxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtVGVtcGxhdGVIYXNDaGFuZ2VkKSkge1xuICAgICAgICAgICAgICAgIHJlc2V0VHJhbnNmb3JtKHRoaXMuaW5zdGFuY2UsIHRyYW5zZm9ybVRlbXBsYXRlVmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvdWxkUmVzZXRUcmFuc2Zvcm0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjaGVkdWxlUmVuZGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5tZWFzdXJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHZpc3VhbEVsZW1lbnQgPSB0aGlzLm9wdGlvbnMudmlzdWFsRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghdmlzdWFsRWxlbWVudClcbiAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICB2YXIgYm94ID0gdmlzdWFsRWxlbWVudC5tZWFzdXJlVmlld3BvcnRCb3goKTtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB2aWV3cG9ydCBzY3JvbGwgdG8gZ2l2ZSBwYWdlLXJlbGF0aXZlIGNvb3JkaW5hdGVzXG4gICAgICAgICAgICB2YXIgc2Nyb2xsID0gdGhpcy5yb290LnNjcm9sbDtcbiAgICAgICAgICAgIGlmIChzY3JvbGwpIHtcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVBeGlzKGJveC54LCBzY3JvbGwueCk7XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlQXhpcyhib3gueSwgc2Nyb2xsLnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJveDtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnJlbW92ZUVsZW1lbnRTY3JvbGwgPSBmdW5jdGlvbiAoYm94KSB7XG4gICAgICAgICAgICB2YXIgYm94V2l0aG91dFNjcm9sbCA9IGNyZWF0ZUJveCgpO1xuICAgICAgICAgICAgY29weUJveEludG8oYm94V2l0aG91dFNjcm9sbCwgYm94KTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUGVyZm9ybWFuY2UgVE9ETzogS2VlcCBhIGN1bXVsYXRpdmUgc2Nyb2xsIG9mZnNldCBkb3duIHRoZSB0cmVlXG4gICAgICAgICAgICAgKiByYXRoZXIgdGhhbiBsb29wIGJhY2sgdXAgdGhlIHBhdGguXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnBhdGhbaV07XG4gICAgICAgICAgICAgICAgdmFyIHNjcm9sbF8xID0gbm9kZS5zY3JvbGwsIG9wdGlvbnMgPSBub2RlLm9wdGlvbnMsIGlzU2Nyb2xsUm9vdCA9IG5vZGUuaXNTY3JvbGxSb290O1xuICAgICAgICAgICAgICAgIGlmIChub2RlICE9PSB0aGlzLnJvb3QgJiYgc2Nyb2xsXzEgJiYgb3B0aW9ucy5sYXlvdXRTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIElmIHRoaXMgaXMgYSBuZXcgc2Nyb2xsIHJvb3QsIHdlIHdhbnQgdG8gcmVtb3ZlIGFsbCBwcmV2aW91cyBzY3JvbGxzXG4gICAgICAgICAgICAgICAgICAgICAqIGZyb20gdGhlIHZpZXdwb3J0IGJveC5cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1Njcm9sbFJvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlCb3hJbnRvKGJveFdpdGhvdXRTY3JvbGwsIGJveCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm9vdFNjcm9sbCA9IHRoaXMucm9vdC5zY3JvbGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFVuZG8gdGhlIGFwcGxpY2F0aW9uIG9mIHBhZ2Ugc2Nyb2xsIHRoYXQgd2FzIG9yaWdpbmFsbHkgYWRkZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIHRvIHRoZSBtZWFzdXJlZCBib3VuZGluZyBib3guXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb290U2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlQXhpcyhib3hXaXRob3V0U2Nyb2xsLngsIC1yb290U2Nyb2xsLngpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZUF4aXMoYm94V2l0aG91dFNjcm9sbC55LCAtcm9vdFNjcm9sbC55KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVBeGlzKGJveFdpdGhvdXRTY3JvbGwueCwgc2Nyb2xsXzEueCk7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZUF4aXMoYm94V2l0aG91dFNjcm9sbC55LCBzY3JvbGxfMS55KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYm94V2l0aG91dFNjcm9sbDtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmFwcGx5VHJhbnNmb3JtID0gZnVuY3Rpb24gKGJveCwgdHJhbnNmb3JtT25seSkge1xuICAgICAgICAgICAgaWYgKHRyYW5zZm9ybU9ubHkgPT09IHZvaWQgMCkgeyB0cmFuc2Zvcm1Pbmx5ID0gZmFsc2U7IH1cbiAgICAgICAgICAgIHZhciB3aXRoVHJhbnNmb3JtcyA9IGNyZWF0ZUJveCgpO1xuICAgICAgICAgICAgY29weUJveEludG8od2l0aFRyYW5zZm9ybXMsIGJveCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5wYXRoW2ldO1xuICAgICAgICAgICAgICAgIGlmICghdHJhbnNmb3JtT25seSAmJlxuICAgICAgICAgICAgICAgICAgICBub2RlLm9wdGlvbnMubGF5b3V0U2Nyb2xsICYmXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2Nyb2xsICYmXG4gICAgICAgICAgICAgICAgICAgIG5vZGUgIT09IG5vZGUucm9vdCkge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1Cb3god2l0aFRyYW5zZm9ybXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IC1ub2RlLnNjcm9sbC54LFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLW5vZGUuc2Nyb2xsLnksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWhhc1RyYW5zZm9ybShub2RlLmxhdGVzdFZhbHVlcykpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybUJveCh3aXRoVHJhbnNmb3Jtcywgbm9kZS5sYXRlc3RWYWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc1RyYW5zZm9ybSh0aGlzLmxhdGVzdFZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1Cb3god2l0aFRyYW5zZm9ybXMsIHRoaXMubGF0ZXN0VmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB3aXRoVHJhbnNmb3JtcztcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnJlbW92ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uIChib3gpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHZhciBib3hXaXRob3V0VHJhbnNmb3JtID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICBjb3B5Qm94SW50byhib3hXaXRob3V0VHJhbnNmb3JtLCBib3gpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMucGF0aFtpXTtcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGUuaW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmICghaGFzVHJhbnNmb3JtKG5vZGUubGF0ZXN0VmFsdWVzKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgaGFzU2NhbGUobm9kZS5sYXRlc3RWYWx1ZXMpICYmIG5vZGUudXBkYXRlU25hcHNob3QoKTtcbiAgICAgICAgICAgICAgICB2YXIgc291cmNlQm94ID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICAgICAgdmFyIG5vZGVCb3ggPSBub2RlLm1lYXN1cmUoKTtcbiAgICAgICAgICAgICAgICBjb3B5Qm94SW50byhzb3VyY2VCb3gsIG5vZGVCb3gpO1xuICAgICAgICAgICAgICAgIHJlbW92ZUJveFRyYW5zZm9ybXMoYm94V2l0aG91dFRyYW5zZm9ybSwgbm9kZS5sYXRlc3RWYWx1ZXMsIChfYSA9IG5vZGUuc25hcHNob3QpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sYXlvdXQsIHNvdXJjZUJveCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzVHJhbnNmb3JtKHRoaXMubGF0ZXN0VmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIHJlbW92ZUJveFRyYW5zZm9ybXMoYm94V2l0aG91dFRyYW5zZm9ybSwgdGhpcy5sYXRlc3RWYWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJveFdpdGhvdXRUcmFuc2Zvcm07XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnNldFRhcmdldERlbHRhID0gZnVuY3Rpb24gKGRlbHRhKSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldERlbHRhID0gZGVsdGE7XG4gICAgICAgICAgICB0aGlzLnJvb3Quc2NoZWR1bGVVcGRhdGVQcm9qZWN0aW9uKCk7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5zZXRPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IF9fYXNzaWduKF9fYXNzaWduKF9fYXNzaWduKHt9LCB0aGlzLm9wdGlvbnMpLCBvcHRpb25zKSwgeyBjcm9zc2ZhZGU6IChfYSA9IG9wdGlvbnMuY3Jvc3NmYWRlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0cnVlIH0pO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuY2xlYXJNZWFzdXJlbWVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMucHJldlRyYW5zZm9ybVRlbXBsYXRlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnRhcmdldERlbHRhID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmlzTGF5b3V0RGlydHkgPSBmYWxzZTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZyYW1lIGNhbGN1bGF0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnJlc29sdmVUYXJnZXREZWx0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHZhciBfYiA9IHRoaXMub3B0aW9ucywgbGF5b3V0ID0gX2IubGF5b3V0LCBsYXlvdXRJZCA9IF9iLmxheW91dElkO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB3ZSBoYXZlIG5vIGxheW91dCwgd2UgY2FuJ3QgcGVyZm9ybSBwcm9qZWN0aW9uLCBzbyBlYXJseSByZXR1cm5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKCF0aGlzLmxheW91dCB8fCAhKGxheW91dCB8fCBsYXlvdXRJZCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB3ZSBkb24ndCBoYXZlIGEgdGFyZ2V0RGVsdGEgYnV0IGRvIGhhdmUgYSBsYXlvdXQsIHdlIGNhbiBhdHRlbXB0IHRvIHJlc29sdmVcbiAgICAgICAgICAgICAqIGEgcmVsYXRpdmVQYXJlbnQuIFRoaXMgd2lsbCBhbGxvdyBhIGNvbXBvbmVudCB0byBwZXJmb3JtIHNjYWxlIGNvcnJlY3Rpb25cbiAgICAgICAgICAgICAqIGV2ZW4gaWYgbm8gYW5pbWF0aW9uIGhhcyBzdGFydGVkLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICAvLyBUT0RPIElmIHRoaXMgaXMgdW5zdWNjZXNzZnVsIHRoaXMgY3VycmVudGx5IGhhcHBlbnMgZXZlcnkgZnJhbWVcbiAgICAgICAgICAgIGlmICghdGhpcy50YXJnZXREZWx0YSAmJiAhdGhpcy5yZWxhdGl2ZVRhcmdldCkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IFRoaXMgaXMgYSBzZW1pLXJlcGV0aXRpb24gb2YgZnVydGhlciBkb3duIHRoaXMgZnVuY3Rpb24sIG1ha2UgRFJZXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZVBhcmVudCA9IHRoaXMuZ2V0Q2xvc2VzdFByb2plY3RpbmdQYXJlbnQoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWxhdGl2ZVBhcmVudCAmJiB0aGlzLnJlbGF0aXZlUGFyZW50LmxheW91dCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlVGFyZ2V0ID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsYXRpdmVUYXJnZXRPcmlnaW4gPSBjcmVhdGVCb3goKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsY1JlbGF0aXZlUG9zaXRpb24odGhpcy5yZWxhdGl2ZVRhcmdldE9yaWdpbiwgdGhpcy5sYXlvdXQuYWN0dWFsLCB0aGlzLnJlbGF0aXZlUGFyZW50LmxheW91dC5hY3R1YWwpO1xuICAgICAgICAgICAgICAgICAgICBjb3B5Qm94SW50byh0aGlzLnJlbGF0aXZlVGFyZ2V0LCB0aGlzLnJlbGF0aXZlVGFyZ2V0T3JpZ2luKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHdlIGhhdmUgbm8gcmVsYXRpdmUgdGFyZ2V0IG9yIG5vIHRhcmdldCBkZWx0YSBvdXIgdGFyZ2V0IGlzbid0IHZhbGlkXG4gICAgICAgICAgICAgKiBmb3IgdGhpcyBmcmFtZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlbGF0aXZlVGFyZ2V0ICYmICF0aGlzLnRhcmdldERlbHRhKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTGF6eS1pbml0IHRhcmdldCBkYXRhIHN0cnVjdHVyZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoIXRoaXMudGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YXJnZXQgPSBjcmVhdGVCb3goKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRhcmdldFdpdGhUcmFuc2Zvcm1zID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHdlJ3ZlIGdvdCBhIHJlbGF0aXZlIGJveCBmb3IgdGhpcyBjb21wb25lbnQsIHJlc29sdmUgaXQgaW50byBhIHRhcmdldCByZWxhdGl2ZSB0byB0aGUgcGFyZW50LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAodGhpcy5yZWxhdGl2ZVRhcmdldCAmJlxuICAgICAgICAgICAgICAgIHRoaXMucmVsYXRpdmVUYXJnZXRPcmlnaW4gJiZcbiAgICAgICAgICAgICAgICAoKF9hID0gdGhpcy5yZWxhdGl2ZVBhcmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICBjYWxjUmVsYXRpdmVCb3godGhpcy50YXJnZXQsIHRoaXMucmVsYXRpdmVUYXJnZXQsIHRoaXMucmVsYXRpdmVQYXJlbnQudGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBJZiB3ZSd2ZSBvbmx5IGdvdCBhIHRhcmdldERlbHRhLCByZXNvbHZlIGl0IGludG8gYSB0YXJnZXRcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudGFyZ2V0RGVsdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoQm9vbGVhbih0aGlzLnJlc3VtaW5nRnJvbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBpcyBjcmVhdGluZyBhIG5ldyBvYmplY3QgZXZlcnkgZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXQgPSB0aGlzLmFwcGx5VHJhbnNmb3JtKHRoaXMubGF5b3V0LmFjdHVhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb3B5Qm94SW50byh0aGlzLnRhcmdldCwgdGhpcy5sYXlvdXQuYWN0dWFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXBwbHlCb3hEZWx0YSh0aGlzLnRhcmdldCwgdGhpcy50YXJnZXREZWx0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBJZiBubyB0YXJnZXQsIHVzZSBvd24gbGF5b3V0IGFzIHRhcmdldFxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGNvcHlCb3hJbnRvKHRoaXMudGFyZ2V0LCB0aGlzLmxheW91dC5hY3R1YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB3ZSd2ZSBiZWVuIHRvbGQgdG8gYXR0ZW1wdCB0byByZXNvbHZlIGEgcmVsYXRpdmUgdGFyZ2V0LCBkbyBzby5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHRoaXMuYXR0ZW1wdFRvUmVzb2x2ZVJlbGF0aXZlVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRlbXB0VG9SZXNvbHZlUmVsYXRpdmVUYXJnZXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlUGFyZW50ID0gdGhpcy5nZXRDbG9zZXN0UHJvamVjdGluZ1BhcmVudCgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlbGF0aXZlUGFyZW50ICYmXG4gICAgICAgICAgICAgICAgICAgIEJvb2xlYW4odGhpcy5yZWxhdGl2ZVBhcmVudC5yZXN1bWluZ0Zyb20pID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgQm9vbGVhbih0aGlzLnJlc3VtaW5nRnJvbSkgJiZcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMucmVsYXRpdmVQYXJlbnQub3B0aW9ucy5sYXlvdXRTY3JvbGwgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZVBhcmVudC50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZVRhcmdldCA9IGNyZWF0ZUJveCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlVGFyZ2V0T3JpZ2luID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGNSZWxhdGl2ZVBvc2l0aW9uKHRoaXMucmVsYXRpdmVUYXJnZXRPcmlnaW4sIHRoaXMudGFyZ2V0LCB0aGlzLnJlbGF0aXZlUGFyZW50LnRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIGNvcHlCb3hJbnRvKHRoaXMucmVsYXRpdmVUYXJnZXQsIHRoaXMucmVsYXRpdmVUYXJnZXRPcmlnaW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmdldENsb3Nlc3RQcm9qZWN0aW5nUGFyZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBhcmVudCB8fCBoYXNUcmFuc2Zvcm0odGhpcy5wYXJlbnQubGF0ZXN0VmFsdWVzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKCh0aGlzLnBhcmVudC5yZWxhdGl2ZVRhcmdldCB8fCB0aGlzLnBhcmVudC50YXJnZXREZWx0YSkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5sYXlvdXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0Q2xvc2VzdFByb2plY3RpbmdQYXJlbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmNhbGNQcm9qZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdmFyIF9iID0gdGhpcy5vcHRpb25zLCBsYXlvdXQgPSBfYi5sYXlvdXQsIGxheW91dElkID0gX2IubGF5b3V0SWQ7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHRoaXMgc2VjdGlvbiBvZiB0aGUgdHJlZSBpc24ndCBhbmltYXRpbmcgd2UgY2FuXG4gICAgICAgICAgICAgKiBkZWxldGUgb3VyIHRhcmdldCBzb3VyY2VzIGZvciB0aGUgZm9sbG93aW5nIGZyYW1lLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLmlzVHJlZUFuaW1hdGluZyA9IEJvb2xlYW4oKChfYSA9IHRoaXMucGFyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaXNUcmVlQW5pbWF0aW5nKSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFuaW1hdGlvbiB8fFxuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0FuaW1hdGlvbik7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNUcmVlQW5pbWF0aW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YXJnZXREZWx0YSA9IHRoaXMucmVsYXRpdmVUYXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMubGF5b3V0IHx8ICEobGF5b3V0IHx8IGxheW91dElkKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgbGVhZCA9IHRoaXMuZ2V0TGVhZCgpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXNldCB0aGUgY29ycmVjdGVkIGJveCB3aXRoIHRoZSBsYXRlc3QgdmFsdWVzIGZyb20gYm94LCBhcyB3ZSdyZSB0aGVuIGdvaW5nXG4gICAgICAgICAgICAgKiB0byBwZXJmb3JtIG11dGF0aXZlIG9wZXJhdGlvbnMgb24gaXQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvcHlCb3hJbnRvKHRoaXMubGF5b3V0Q29ycmVjdGVkLCB0aGlzLmxheW91dC5hY3R1YWwpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBBcHBseSBhbGwgdGhlIHBhcmVudCBkZWx0YXMgdG8gdGhpcyBib3ggdG8gcHJvZHVjZSB0aGUgY29ycmVjdGVkIGJveC4gVGhpc1xuICAgICAgICAgICAgICogaXMgdGhlIGxheW91dCBib3gsIGFzIGl0IHdpbGwgYXBwZWFyIG9uIHNjcmVlbiBhcyBhIHJlc3VsdCBvZiB0aGUgdHJhbnNmb3JtcyBvZiBpdHMgcGFyZW50cy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYXBwbHlUcmVlRGVsdGFzKHRoaXMubGF5b3V0Q29ycmVjdGVkLCB0aGlzLnRyZWVTY2FsZSwgdGhpcy5wYXRoLCBCb29sZWFuKHRoaXMucmVzdW1pbmdGcm9tKSB8fCB0aGlzICE9PSBsZWFkKTtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBsZWFkLnRhcmdldDtcbiAgICAgICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmICghdGhpcy5wcm9qZWN0aW9uRGVsdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2plY3Rpb25EZWx0YSA9IGNyZWF0ZURlbHRhKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9qZWN0aW9uRGVsdGFXaXRoVHJhbnNmb3JtID0gY3JlYXRlRGVsdGEoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBwcmV2VHJlZVNjYWxlWCA9IHRoaXMudHJlZVNjYWxlLng7XG4gICAgICAgICAgICB2YXIgcHJldlRyZWVTY2FsZVkgPSB0aGlzLnRyZWVTY2FsZS55O1xuICAgICAgICAgICAgdmFyIHByZXZQcm9qZWN0aW9uVHJhbnNmb3JtID0gdGhpcy5wcm9qZWN0aW9uVHJhbnNmb3JtO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBVcGRhdGUgdGhlIGRlbHRhIGJldHdlZW4gdGhlIGNvcnJlY3RlZCBib3ggYW5kIHRoZSB0YXJnZXQgYm94IGJlZm9yZSB1c2VyLXNldCB0cmFuc2Zvcm1zIHdlcmUgYXBwbGllZC5cbiAgICAgICAgICAgICAqIFRoaXMgd2lsbCBhbGxvdyB1cyB0byBjYWxjdWxhdGUgdGhlIGNvcnJlY3RlZCBib3JkZXJSYWRpdXMgYW5kIGJveFNoYWRvdyB0byBjb21wZW5zYXRlXG4gICAgICAgICAgICAgKiBmb3Igb3VyIGxheW91dCByZXByb2plY3Rpb24sIGJ1dCBzdGlsbCBhbGxvdyB0aGVtIHRvIGJlIHNjYWxlZCBjb3JyZWN0bHkgYnkgdGhlIHVzZXIuXG4gICAgICAgICAgICAgKiBJdCBtaWdodCBiZSB0aGF0IHRvIHNpbXBsaWZ5IHRoaXMgd2UgbWF5IHdhbnQgdG8gYWNjZXB0IHRoYXQgdXNlci1zZXQgc2NhbGUgaXMgYWxzbyBjb3JyZWN0ZWRcbiAgICAgICAgICAgICAqIGFuZCB3ZSB3b3VsZG4ndCBoYXZlIHRvIGtlZXAgYW5kIGNhbGMgYm90aCBkZWx0YXMsIE9SIHdlIGNvdWxkIHN1cHBvcnQgYSB1c2VyIHNldHRpbmdcbiAgICAgICAgICAgICAqIHRvIGFsbG93IHBlb3BsZSB0byBjaG9vc2Ugd2hldGhlciB0aGVzZSBzdHlsZXMgYXJlIGNvcnJlY3RlZCBiYXNlZCBvbiBqdXN0IHRoZVxuICAgICAgICAgICAgICogbGF5b3V0IHJlcHJvamVjdGlvbiBvciB0aGUgZmluYWwgYm91bmRpbmcgYm94LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjYWxjQm94RGVsdGEodGhpcy5wcm9qZWN0aW9uRGVsdGEsIHRoaXMubGF5b3V0Q29ycmVjdGVkLCB0YXJnZXQsIHRoaXMubGF0ZXN0VmFsdWVzKTtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdGlvblRyYW5zZm9ybSA9IGJ1aWxkUHJvamVjdGlvblRyYW5zZm9ybSh0aGlzLnByb2plY3Rpb25EZWx0YSwgdGhpcy50cmVlU2NhbGUpO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvamVjdGlvblRyYW5zZm9ybSAhPT0gcHJldlByb2plY3Rpb25UcmFuc2Zvcm0gfHxcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVTY2FsZS54ICE9PSBwcmV2VHJlZVNjYWxlWCB8fFxuICAgICAgICAgICAgICAgIHRoaXMudHJlZVNjYWxlLnkgIT09IHByZXZUcmVlU2NhbGVZKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNQcm9qZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVSZW5kZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUxpc3RlbmVycyhcInByb2plY3Rpb25VcGRhdGVcIiwgdGFyZ2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gVE9ETzogU2NoZWR1bGUgcmVuZGVyXG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5pc1Zpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgLy8gVE9ETzogU2NoZWR1bGUgcmVuZGVyXG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5zY2hlZHVsZVJlbmRlciA9IGZ1bmN0aW9uIChub3RpZnlBbGwpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgaWYgKG5vdGlmeUFsbCA9PT0gdm9pZCAwKSB7IG5vdGlmeUFsbCA9IHRydWU7IH1cbiAgICAgICAgICAgIChfYiA9IChfYSA9IHRoaXMub3B0aW9ucykuc2NoZWR1bGVSZW5kZXIpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICAgICAgICAgIG5vdGlmeUFsbCAmJiAoKF9jID0gdGhpcy5nZXRTdGFjaygpKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Muc2NoZWR1bGVSZW5kZXIoKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXN1bWluZ0Zyb20gJiYgIXRoaXMucmVzdW1pbmdGcm9tLmluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bWluZ0Zyb20gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5zZXRBbmltYXRpb25PcmlnaW4gPSBmdW5jdGlvbiAoZGVsdGEsIGhhc09ubHlSZWxhdGl2ZVRhcmdldENoYW5nZWQpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoaGFzT25seVJlbGF0aXZlVGFyZ2V0Q2hhbmdlZCA9PT0gdm9pZCAwKSB7IGhhc09ubHlSZWxhdGl2ZVRhcmdldENoYW5nZWQgPSBmYWxzZTsgfVxuICAgICAgICAgICAgdmFyIHNuYXBzaG90ID0gdGhpcy5zbmFwc2hvdDtcbiAgICAgICAgICAgIHZhciBzbmFwc2hvdExhdGVzdFZhbHVlcyA9IChzbmFwc2hvdCA9PT0gbnVsbCB8fCBzbmFwc2hvdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc25hcHNob3QubGF0ZXN0VmFsdWVzKSB8fCB7fTtcbiAgICAgICAgICAgIHZhciBtaXhlZFZhbHVlcyA9IF9fYXNzaWduKHt9LCB0aGlzLmxhdGVzdFZhbHVlcyk7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0RGVsdGEgPSBjcmVhdGVEZWx0YSgpO1xuICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZVRhcmdldCA9IHRoaXMucmVsYXRpdmVUYXJnZXRPcmlnaW4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmF0dGVtcHRUb1Jlc29sdmVSZWxhdGl2ZVRhcmdldCA9ICFoYXNPbmx5UmVsYXRpdmVUYXJnZXRDaGFuZ2VkO1xuICAgICAgICAgICAgdmFyIHJlbGF0aXZlTGF5b3V0ID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICB2YXIgaXNTaGFyZWRMYXlvdXRBbmltYXRpb24gPSBzbmFwc2hvdCA9PT0gbnVsbCB8fCBzbmFwc2hvdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc25hcHNob3QuaXNTaGFyZWQ7XG4gICAgICAgICAgICB2YXIgaXNPbmx5TWVtYmVyID0gKCgoX2EgPSB0aGlzLmdldFN0YWNrKCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5tZW1iZXJzLmxlbmd0aCkgfHwgMCkgPD0gMTtcbiAgICAgICAgICAgIHZhciBzaG91bGRDcm9zc2ZhZGVPcGFjaXR5ID0gQm9vbGVhbihpc1NoYXJlZExheW91dEFuaW1hdGlvbiAmJlxuICAgICAgICAgICAgICAgICFpc09ubHlNZW1iZXIgJiZcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuY3Jvc3NmYWRlID09PSB0cnVlICYmXG4gICAgICAgICAgICAgICAgIXRoaXMucGF0aC5zb21lKGhhc09wYWNpdHlDcm9zc2ZhZGUpKTtcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uUHJvZ3Jlc3MgPSAwO1xuICAgICAgICAgICAgdGhpcy5taXhUYXJnZXREZWx0YSA9IGZ1bmN0aW9uIChsYXRlc3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgdmFyIHByb2dyZXNzID0gbGF0ZXN0IC8gMTAwMDtcbiAgICAgICAgICAgICAgICBtaXhBeGlzRGVsdGEodGFyZ2V0RGVsdGEueCwgZGVsdGEueCwgcHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICAgIG1peEF4aXNEZWx0YSh0YXJnZXREZWx0YS55LCBkZWx0YS55LCBwcm9ncmVzcyk7XG4gICAgICAgICAgICAgICAgX3RoaXMuc2V0VGFyZ2V0RGVsdGEodGFyZ2V0RGVsdGEpO1xuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5yZWxhdGl2ZVRhcmdldCAmJlxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5yZWxhdGl2ZVRhcmdldE9yaWdpbiAmJlxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5sYXlvdXQgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IF90aGlzLnJlbGF0aXZlUGFyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGF5b3V0KSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxjUmVsYXRpdmVQb3NpdGlvbihyZWxhdGl2ZUxheW91dCwgX3RoaXMubGF5b3V0LmFjdHVhbCwgX3RoaXMucmVsYXRpdmVQYXJlbnQubGF5b3V0LmFjdHVhbCk7XG4gICAgICAgICAgICAgICAgICAgIG1peEJveChfdGhpcy5yZWxhdGl2ZVRhcmdldCwgX3RoaXMucmVsYXRpdmVUYXJnZXRPcmlnaW4sIHJlbGF0aXZlTGF5b3V0LCBwcm9ncmVzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc1NoYXJlZExheW91dEFuaW1hdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5hbmltYXRpb25WYWx1ZXMgPSBtaXhlZFZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgbWl4VmFsdWVzKG1peGVkVmFsdWVzLCBzbmFwc2hvdExhdGVzdFZhbHVlcywgX3RoaXMubGF0ZXN0VmFsdWVzLCBwcm9ncmVzcywgc2hvdWxkQ3Jvc3NmYWRlT3BhY2l0eSwgaXNPbmx5TWVtYmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX3RoaXMucm9vdC5zY2hlZHVsZVVwZGF0ZVByb2plY3Rpb24oKTtcbiAgICAgICAgICAgICAgICBfdGhpcy5zY2hlZHVsZVJlbmRlcigpO1xuICAgICAgICAgICAgICAgIF90aGlzLmFuaW1hdGlvblByb2dyZXNzID0gcHJvZ3Jlc3M7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5taXhUYXJnZXREZWx0YSgwKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnN0YXJ0QW5pbWF0aW9uID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlMaXN0ZW5lcnMoXCJhbmltYXRpb25TdGFydFwiKTtcbiAgICAgICAgICAgIChfYSA9IHRoaXMuY3VycmVudEFuaW1hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0b3AoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc3VtaW5nRnJvbSkge1xuICAgICAgICAgICAgICAgIChfYiA9IHRoaXMucmVzdW1pbmdGcm9tLmN1cnJlbnRBbmltYXRpb24pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zdG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FuY2VsU3luYy51cGRhdGUodGhpcy5wZW5kaW5nQW5pbWF0aW9uKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdBbmltYXRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFN0YXJ0IHRoZSBhbmltYXRpb24gaW4gdGhlIG5leHQgZnJhbWUgdG8gaGF2ZSBhIGZyYW1lIHdpdGggcHJvZ3Jlc3MgMCxcbiAgICAgICAgICAgICAqIHdoZXJlIHRoZSB0YXJnZXQgaXMgdGhlIHNhbWUgYXMgd2hlbiB0aGUgYW5pbWF0aW9uIHN0YXJ0ZWQsIHNvIHdlIGNhblxuICAgICAgICAgICAgICogY2FsY3VsYXRlIHRoZSByZWxhdGl2ZSBwb3NpdGlvbnMgY29ycmVjdGx5IGZvciBpbnN0YW50IHRyYW5zaXRpb25zLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdBbmltYXRpb24gPSBzeW5jLnVwZGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsUHJvamVjdGlvblN0YXRlLmhhc0FuaW1hdGVkU2luY2VSZXNpemUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIF90aGlzLmN1cnJlbnRBbmltYXRpb24gPSBhbmltYXRlKDAsIGFuaW1hdGlvblRhcmdldCwgX19hc3NpZ24oX19hc3NpZ24oe30sIG9wdGlvbnMpLCB7IG9uVXBkYXRlOiBmdW5jdGlvbiAobGF0ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5taXhUYXJnZXREZWx0YShsYXRlc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgKF9hID0gb3B0aW9ucy5vblVwZGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwob3B0aW9ucywgbGF0ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICAgICAgKF9hID0gb3B0aW9ucy5vbkNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmNvbXBsZXRlQW5pbWF0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gfSkpO1xuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5yZXN1bWluZ0Zyb20pIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMucmVzdW1pbmdGcm9tLmN1cnJlbnRBbmltYXRpb24gPSBfdGhpcy5jdXJyZW50QW5pbWF0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfdGhpcy5wZW5kaW5nQW5pbWF0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5jb21wbGV0ZUFuaW1hdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc3VtaW5nRnJvbSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdW1pbmdGcm9tLmN1cnJlbnRBbmltYXRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bWluZ0Zyb20ucHJlc2VydmVPcGFjaXR5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKF9hID0gdGhpcy5nZXRTdGFjaygpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXhpdEFuaW1hdGlvbkNvbXBsZXRlKCk7XG4gICAgICAgICAgICB0aGlzLnJlc3VtaW5nRnJvbSA9XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QW5pbWF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmltYXRpb25WYWx1ZXMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlMaXN0ZW5lcnMoXCJhbmltYXRpb25Db21wbGV0ZVwiKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmZpbmlzaEFuaW1hdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRBbmltYXRpb24pIHtcbiAgICAgICAgICAgICAgICAoX2EgPSB0aGlzLm1peFRhcmdldERlbHRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzLCBhbmltYXRpb25UYXJnZXQpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFuaW1hdGlvbi5zdG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbXBsZXRlQW5pbWF0aW9uKCk7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5hcHBseVRyYW5zZm9ybXNUb1RhcmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMuZ2V0TGVhZCgpLCB0YXJnZXRXaXRoVHJhbnNmb3JtcyA9IF9hLnRhcmdldFdpdGhUcmFuc2Zvcm1zLCB0YXJnZXQgPSBfYS50YXJnZXQsIGxheW91dCA9IF9hLmxheW91dCwgbGF0ZXN0VmFsdWVzID0gX2EubGF0ZXN0VmFsdWVzO1xuICAgICAgICAgICAgaWYgKCF0YXJnZXRXaXRoVHJhbnNmb3JtcyB8fCAhdGFyZ2V0IHx8ICFsYXlvdXQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29weUJveEludG8odGFyZ2V0V2l0aFRyYW5zZm9ybXMsIHRhcmdldCk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEFwcGx5IHRoZSBsYXRlc3QgdXNlci1zZXQgdHJhbnNmb3JtcyB0byB0aGUgdGFyZ2V0Qm94IHRvIHByb2R1Y2UgdGhlIHRhcmdldEJveEZpbmFsLlxuICAgICAgICAgICAgICogVGhpcyBpcyB0aGUgZmluYWwgYm94IHRoYXQgd2Ugd2lsbCB0aGVuIHByb2plY3QgaW50byBieSBjYWxjdWxhdGluZyBhIHRyYW5zZm9ybSBkZWx0YSBhbmRcbiAgICAgICAgICAgICAqIGFwcGx5aW5nIGl0IHRvIHRoZSBjb3JyZWN0ZWQgYm94LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0cmFuc2Zvcm1Cb3godGFyZ2V0V2l0aFRyYW5zZm9ybXMsIGxhdGVzdFZhbHVlcyk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFVwZGF0ZSB0aGUgZGVsdGEgYmV0d2VlbiB0aGUgY29ycmVjdGVkIGJveCBhbmQgdGhlIGZpbmFsIHRhcmdldCBib3gsIGFmdGVyXG4gICAgICAgICAgICAgKiB1c2VyLXNldCB0cmFuc2Zvcm1zIGFyZSBhcHBsaWVkIHRvIGl0LiBUaGlzIHdpbGwgYmUgdXNlZCBieSB0aGUgcmVuZGVyZXIgdG9cbiAgICAgICAgICAgICAqIGNyZWF0ZSBhIHRyYW5zZm9ybSBzdHlsZSB0aGF0IHdpbGwgcmVwcm9qZWN0IHRoZSBlbGVtZW50IGZyb20gaXRzIGFjdHVhbCBsYXlvdXRcbiAgICAgICAgICAgICAqIGludG8gdGhlIGRlc2lyZWQgYm91bmRpbmcgYm94LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjYWxjQm94RGVsdGEodGhpcy5wcm9qZWN0aW9uRGVsdGFXaXRoVHJhbnNmb3JtLCB0aGlzLmxheW91dENvcnJlY3RlZCwgdGFyZ2V0V2l0aFRyYW5zZm9ybXMsIGxhdGVzdFZhbHVlcyk7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5yZWdpc3RlclNoYXJlZE5vZGUgPSBmdW5jdGlvbiAobGF5b3V0SWQsIG5vZGUpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZE5vZGVzLmhhcyhsYXlvdXRJZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZE5vZGVzLnNldChsYXlvdXRJZCwgbmV3IE5vZGVTdGFjaygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBzdGFjayA9IHRoaXMuc2hhcmVkTm9kZXMuZ2V0KGxheW91dElkKTtcbiAgICAgICAgICAgIHN0YWNrLmFkZChub2RlKTtcbiAgICAgICAgICAgIG5vZGUucHJvbW90ZSh7XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogKF9hID0gbm9kZS5vcHRpb25zLmluaXRpYWxQcm9tb3Rpb25Db25maWcpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50cmFuc2l0aW9uLFxuICAgICAgICAgICAgICAgIHByZXNlcnZlRm9sbG93T3BhY2l0eTogKF9jID0gKF9iID0gbm9kZS5vcHRpb25zLmluaXRpYWxQcm9tb3Rpb25Db25maWcpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zaG91bGRQcmVzZXJ2ZUZvbGxvd09wYWNpdHkpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5jYWxsKF9iLCBub2RlKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuaXNMZWFkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gdGhpcy5nZXRTdGFjaygpO1xuICAgICAgICAgICAgcmV0dXJuIHN0YWNrID8gc3RhY2subGVhZCA9PT0gdGhpcyA6IHRydWU7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5nZXRMZWFkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdmFyIGxheW91dElkID0gdGhpcy5vcHRpb25zLmxheW91dElkO1xuICAgICAgICAgICAgcmV0dXJuIGxheW91dElkID8gKChfYSA9IHRoaXMuZ2V0U3RhY2soKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlYWQpIHx8IHRoaXMgOiB0aGlzO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuZ2V0UHJldkxlYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB2YXIgbGF5b3V0SWQgPSB0aGlzLm9wdGlvbnMubGF5b3V0SWQ7XG4gICAgICAgICAgICByZXR1cm4gbGF5b3V0SWQgPyAoX2EgPSB0aGlzLmdldFN0YWNrKCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5wcmV2TGVhZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmdldFN0YWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGxheW91dElkID0gdGhpcy5vcHRpb25zLmxheW91dElkO1xuICAgICAgICAgICAgaWYgKGxheW91dElkKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb3Quc2hhcmVkTm9kZXMuZ2V0KGxheW91dElkKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnByb21vdGUgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciBfYiA9IF9hID09PSB2b2lkIDAgPyB7fSA6IF9hLCBuZWVkc1Jlc2V0ID0gX2IubmVlZHNSZXNldCwgdHJhbnNpdGlvbiA9IF9iLnRyYW5zaXRpb24sIHByZXNlcnZlRm9sbG93T3BhY2l0eSA9IF9iLnByZXNlcnZlRm9sbG93T3BhY2l0eTtcbiAgICAgICAgICAgIHZhciBzdGFjayA9IHRoaXMuZ2V0U3RhY2soKTtcbiAgICAgICAgICAgIGlmIChzdGFjaylcbiAgICAgICAgICAgICAgICBzdGFjay5wcm9tb3RlKHRoaXMsIHByZXNlcnZlRm9sbG93T3BhY2l0eSk7XG4gICAgICAgICAgICBpZiAobmVlZHNSZXNldCkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvamVjdGlvbkRlbHRhID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMubmVlZHNSZXNldCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHJhbnNpdGlvbilcbiAgICAgICAgICAgICAgICB0aGlzLnNldE9wdGlvbnMoeyB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uIH0pO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUucmVsZWdhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgc3RhY2sgPSB0aGlzLmdldFN0YWNrKCk7XG4gICAgICAgICAgICBpZiAoc3RhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucmVsZWdhdGUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5yZXNldFJvdGF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHZpc3VhbEVsZW1lbnQgPSB0aGlzLm9wdGlvbnMudmlzdWFsRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghdmlzdWFsRWxlbWVudClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGRldGVjdGVkIHJvdGF0aW9uIHZhbHVlcywgd2UgY2FuIGVhcmx5IHJldHVybiB3aXRob3V0IGEgZm9yY2VkIHJlbmRlci5cbiAgICAgICAgICAgIHZhciBoYXNSb3RhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIEtlZXAgYSByZWNvcmQgb2YgYWxsIHRoZSB2YWx1ZXMgd2UndmUgcmVzZXRcbiAgICAgICAgICAgIHZhciByZXNldFZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIHJvdGF0ZSB2YWx1ZSBvZiBhbGwgYXhlcyBhbmQgcmVzZXQgdG8gMFxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFuc2Zvcm1BeGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGF4aXMgPSB0cmFuc2Zvcm1BeGVzW2ldO1xuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBcInJvdGF0ZVwiICsgYXhpcztcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIHJvdGF0aW9uIGRvZXNuJ3QgZXhpc3QgYXMgYSBtb3Rpb24gdmFsdWUsIHRoZW4gd2UgZG9uJ3RcbiAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIHJlc2V0IGl0XG4gICAgICAgICAgICAgICAgaWYgKCF2aXN1YWxFbGVtZW50LmdldFN0YXRpY1ZhbHVlKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGhhc1JvdGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSByb3RhdGlvbiBhbmQgdGhlbiB0ZW1wb3JhcmlseSBzZXQgaXQgdG8gMFxuICAgICAgICAgICAgICAgIHJlc2V0VmFsdWVzW2tleV0gPSB2aXN1YWxFbGVtZW50LmdldFN0YXRpY1ZhbHVlKGtleSk7XG4gICAgICAgICAgICAgICAgdmlzdWFsRWxlbWVudC5zZXRTdGF0aWNWYWx1ZShrZXksIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBubyByb3RhdGlvbiB2YWx1ZXMsIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55IG1vcmUuXG4gICAgICAgICAgICBpZiAoIWhhc1JvdGF0ZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAvLyBGb3JjZSBhIHJlbmRlciBvZiB0aGlzIGVsZW1lbnQgdG8gYXBwbHkgdGhlIHRyYW5zZm9ybSB3aXRoIGFsbCByb3RhdGlvbnNcbiAgICAgICAgICAgIC8vIHNldCB0byAwLlxuICAgICAgICAgICAgdmlzdWFsRWxlbWVudCA9PT0gbnVsbCB8fCB2aXN1YWxFbGVtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2aXN1YWxFbGVtZW50LnN5bmNSZW5kZXIoKTtcbiAgICAgICAgICAgIC8vIFB1dCBiYWNrIGFsbCB0aGUgdmFsdWVzIHdlIHJlc2V0XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcmVzZXRWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICB2aXN1YWxFbGVtZW50LnNldFN0YXRpY1ZhbHVlKGtleSwgcmVzZXRWYWx1ZXNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTY2hlZHVsZSBhIHJlbmRlciBmb3IgdGhlIG5leHQgZnJhbWUuIFRoaXMgZW5zdXJlcyB3ZSB3b24ndCB2aXN1YWxseVxuICAgICAgICAgICAgLy8gc2VlIHRoZSBlbGVtZW50IHdpdGggdGhlIHJlc2V0IHJvdGF0ZSB2YWx1ZSBhcHBsaWVkLlxuICAgICAgICAgICAgdmlzdWFsRWxlbWVudC5zY2hlZHVsZVJlbmRlcigpO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuZ2V0UHJvamVjdGlvblN0eWxlcyA9IGZ1bmN0aW9uIChzdHlsZVByb3ApIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mO1xuICAgICAgICAgICAgaWYgKHN0eWxlUHJvcCA9PT0gdm9pZCAwKSB7IHN0eWxlUHJvcCA9IHt9OyB9XG4gICAgICAgICAgICAvLyBUT0RPOiBSZXR1cm4gbGlmZWN5Y2xlLXBlcnNpc3RlbnQgb2JqZWN0XG4gICAgICAgICAgICB2YXIgc3R5bGVzID0ge307XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UgfHwgdGhpcy5pc1NWRylcbiAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZpc2liaWxpdHk6IFwiaGlkZGVuXCIgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0eWxlcy52aXNpYmlsaXR5ID0gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB0cmFuc2Zvcm1UZW1wbGF0ZSA9IChfYSA9IHRoaXMub3B0aW9ucy52aXN1YWxFbGVtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0UHJvcHMoKS50cmFuc2Zvcm1UZW1wbGF0ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZWRzUmVzZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5lZWRzUmVzZXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzdHlsZXMub3BhY2l0eSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgc3R5bGVzLnBvaW50ZXJFdmVudHMgPVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlTW90aW9uVmFsdWUoc3R5bGVQcm9wLnBvaW50ZXJFdmVudHMpIHx8IFwiXCI7XG4gICAgICAgICAgICAgICAgc3R5bGVzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgID8gdHJhbnNmb3JtVGVtcGxhdGUodGhpcy5sYXRlc3RWYWx1ZXMsIFwiXCIpXG4gICAgICAgICAgICAgICAgICAgIDogXCJub25lXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBsZWFkID0gdGhpcy5nZXRMZWFkKCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMucHJvamVjdGlvbkRlbHRhIHx8ICF0aGlzLmxheW91dCB8fCAhbGVhZC50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZW1wdHlTdHlsZXMgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxheW91dElkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVtcHR5U3R5bGVzLm9wYWNpdHkgPSAoX2IgPSB0aGlzLmxhdGVzdFZhbHVlcy5vcGFjaXR5KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAxO1xuICAgICAgICAgICAgICAgICAgICBlbXB0eVN0eWxlcy5wb2ludGVyRXZlbnRzID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVNb3Rpb25WYWx1ZShzdHlsZVByb3AucG9pbnRlckV2ZW50cykgfHwgXCJcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzUHJvamVjdGVkICYmICFoYXNUcmFuc2Zvcm0odGhpcy5sYXRlc3RWYWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVtcHR5U3R5bGVzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRyYW5zZm9ybVRlbXBsYXRlKHt9LCBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNQcm9qZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3R5bGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHZhbHVlc1RvUmVuZGVyID0gbGVhZC5hbmltYXRpb25WYWx1ZXMgfHwgbGVhZC5sYXRlc3RWYWx1ZXM7XG4gICAgICAgICAgICB0aGlzLmFwcGx5VHJhbnNmb3Jtc1RvVGFyZ2V0KCk7XG4gICAgICAgICAgICBzdHlsZXMudHJhbnNmb3JtID0gYnVpbGRQcm9qZWN0aW9uVHJhbnNmb3JtKHRoaXMucHJvamVjdGlvbkRlbHRhV2l0aFRyYW5zZm9ybSwgdGhpcy50cmVlU2NhbGUsIHZhbHVlc1RvUmVuZGVyKTtcbiAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1UZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgIHN0eWxlcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1UZW1wbGF0ZSh2YWx1ZXNUb1JlbmRlciwgc3R5bGVzLnRyYW5zZm9ybSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2cgPSB0aGlzLnByb2plY3Rpb25EZWx0YSwgeCA9IF9nLngsIHkgPSBfZy55O1xuICAgICAgICAgICAgc3R5bGVzLnRyYW5zZm9ybU9yaWdpbiA9IFwiXCIuY29uY2F0KHgub3JpZ2luICogMTAwLCBcIiUgXCIpLmNvbmNhdCh5Lm9yaWdpbiAqIDEwMCwgXCIlIDBcIik7XG4gICAgICAgICAgICBpZiAobGVhZC5hbmltYXRpb25WYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBJZiB0aGUgbGVhZCBjb21wb25lbnQgaXMgYW5pbWF0aW5nLCBhc3NpZ24gdGhpcyBlaXRoZXIgdGhlIGVudGVyaW5nL2xlYXZpbmdcbiAgICAgICAgICAgICAgICAgKiBvcGFjaXR5XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgc3R5bGVzLm9wYWNpdHkgPVxuICAgICAgICAgICAgICAgICAgICBsZWFkID09PSB0aGlzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChfZCA9IChfYyA9IHZhbHVlc1RvUmVuZGVyLm9wYWNpdHkpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IHRoaXMubGF0ZXN0VmFsdWVzLm9wYWNpdHkpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IDFcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5wcmVzZXJ2ZU9wYWNpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMubGF0ZXN0VmFsdWVzLm9wYWNpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHZhbHVlc1RvUmVuZGVyLm9wYWNpdHlFeGl0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogT3Igd2UncmUgbm90IGFuaW1hdGluZyBhdCBhbGwsIHNldCB0aGUgbGVhZCBjb21wb25lbnQgdG8gaXRzIGFjdHVhbFxuICAgICAgICAgICAgICAgICAqIG9wYWNpdHkgYW5kIG90aGVyIGNvbXBvbmVudHMgdG8gaGlkZGVuLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHN0eWxlcy5vcGFjaXR5ID1cbiAgICAgICAgICAgICAgICAgICAgbGVhZCA9PT0gdGhpc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAoX2UgPSB2YWx1ZXNUb1JlbmRlci5vcGFjaXR5KSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IChfZiA9IHZhbHVlc1RvUmVuZGVyLm9wYWNpdHlFeGl0KSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBBcHBseSBzY2FsZSBjb3JyZWN0aW9uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBzY2FsZUNvcnJlY3RvcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWVzVG9SZW5kZXJba2V5XSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB2YXIgX2ggPSBzY2FsZUNvcnJlY3RvcnNba2V5XSwgY29ycmVjdCA9IF9oLmNvcnJlY3QsIGFwcGx5VG8gPSBfaC5hcHBseVRvO1xuICAgICAgICAgICAgICAgIHZhciBjb3JyZWN0ZWQgPSBjb3JyZWN0KHZhbHVlc1RvUmVuZGVyW2tleV0sIGxlYWQpO1xuICAgICAgICAgICAgICAgIGlmIChhcHBseVRvKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBudW0gPSBhcHBseVRvLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW07IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVzW2FwcGx5VG9baV1dID0gY29ycmVjdGVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdHlsZXNba2V5XSA9IGNvcnJlY3RlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIERpc2FibGUgcG9pbnRlciBldmVudHMgb24gZm9sbG93IGNvbXBvbmVudHMuIFRoaXMgaXMgdG8gZW5zdXJlXG4gICAgICAgICAgICAgKiB0aGF0IGlmIGEgZm9sbG93IGNvbXBvbmVudCBjb3ZlcnMgYSBsZWFkIGNvbXBvbmVudCBpdCBkb2Vzbid0IGJsb2NrXG4gICAgICAgICAgICAgKiBwb2ludGVyIGV2ZW50cyBvbiB0aGUgbGVhZC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sYXlvdXRJZCkge1xuICAgICAgICAgICAgICAgIHN0eWxlcy5wb2ludGVyRXZlbnRzID1cbiAgICAgICAgICAgICAgICAgICAgbGVhZCA9PT0gdGhpc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyByZXNvbHZlTW90aW9uVmFsdWUoc3R5bGVQcm9wLnBvaW50ZXJFdmVudHMpIHx8IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJub25lXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuY2xlYXJTbmFwc2hvdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMucmVzdW1lRnJvbSA9IHRoaXMuc25hcHNob3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIH07XG4gICAgICAgIC8vIE9ubHkgcnVuIG9uIHJvb3RcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnJlc2V0VHJlZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMucm9vdC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7IHZhciBfYTsgcmV0dXJuIChfYSA9IG5vZGUuY3VycmVudEFuaW1hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0b3AoKTsgfSk7XG4gICAgICAgICAgICB0aGlzLnJvb3Qubm9kZXMuZm9yRWFjaChjbGVhck1lYXN1cmVtZW50cyk7XG4gICAgICAgICAgICB0aGlzLnJvb3Quc2hhcmVkTm9kZXMuY2xlYXIoKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIFByb2plY3Rpb25Ob2RlO1xuICAgIH0oKSk7XG59XG5mdW5jdGlvbiB1cGRhdGVMYXlvdXQobm9kZSkge1xuICAgIG5vZGUudXBkYXRlTGF5b3V0KCk7XG59XG5mdW5jdGlvbiBub3RpZnlMYXlvdXRVcGRhdGUobm9kZSkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICB2YXIgc25hcHNob3QgPSAoX2IgPSAoX2EgPSBub2RlLnJlc3VtZUZyb20pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zbmFwc2hvdCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbm9kZS5zbmFwc2hvdDtcbiAgICBpZiAobm9kZS5pc0xlYWQoKSAmJlxuICAgICAgICBub2RlLmxheW91dCAmJlxuICAgICAgICBzbmFwc2hvdCAmJlxuICAgICAgICBub2RlLmhhc0xpc3RlbmVycyhcImRpZFVwZGF0ZVwiKSkge1xuICAgICAgICB2YXIgX2UgPSBub2RlLmxheW91dCwgbGF5b3V0XzEgPSBfZS5hY3R1YWwsIG1lYXN1cmVkTGF5b3V0ID0gX2UubWVhc3VyZWQ7XG4gICAgICAgIC8vIFRPRE8gTWF5YmUgd2Ugd2FudCB0byBhbHNvIHJlc2l6ZSB0aGUgbGF5b3V0IHNuYXBzaG90IHNvIHdlIGRvbid0IHRyaWdnZXJcbiAgICAgICAgLy8gYW5pbWF0aW9ucyBmb3IgaW5zdGFuY2UgaWYgbGF5b3V0PVwic2l6ZVwiIGFuZCBhbiBlbGVtZW50IGhhcyBvbmx5IGNoYW5nZWQgcG9zaXRpb25cbiAgICAgICAgaWYgKG5vZGUub3B0aW9ucy5hbmltYXRpb25UeXBlID09PSBcInNpemVcIikge1xuICAgICAgICAgICAgZWFjaEF4aXMoZnVuY3Rpb24gKGF4aXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXhpc1NuYXBzaG90ID0gc25hcHNob3QuaXNTaGFyZWRcbiAgICAgICAgICAgICAgICAgICAgPyBzbmFwc2hvdC5tZWFzdXJlZFtheGlzXVxuICAgICAgICAgICAgICAgICAgICA6IHNuYXBzaG90LmxheW91dFtheGlzXTtcbiAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gY2FsY0xlbmd0aChheGlzU25hcHNob3QpO1xuICAgICAgICAgICAgICAgIGF4aXNTbmFwc2hvdC5taW4gPSBsYXlvdXRfMVtheGlzXS5taW47XG4gICAgICAgICAgICAgICAgYXhpc1NuYXBzaG90Lm1heCA9IGF4aXNTbmFwc2hvdC5taW4gKyBsZW5ndGg7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChub2RlLm9wdGlvbnMuYW5pbWF0aW9uVHlwZSA9PT0gXCJwb3NpdGlvblwiKSB7XG4gICAgICAgICAgICBlYWNoQXhpcyhmdW5jdGlvbiAoYXhpcykge1xuICAgICAgICAgICAgICAgIHZhciBheGlzU25hcHNob3QgPSBzbmFwc2hvdC5pc1NoYXJlZFxuICAgICAgICAgICAgICAgICAgICA/IHNuYXBzaG90Lm1lYXN1cmVkW2F4aXNdXG4gICAgICAgICAgICAgICAgICAgIDogc25hcHNob3QubGF5b3V0W2F4aXNdO1xuICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBjYWxjTGVuZ3RoKGxheW91dF8xW2F4aXNdKTtcbiAgICAgICAgICAgICAgICBheGlzU25hcHNob3QubWF4ID0gYXhpc1NuYXBzaG90Lm1pbiArIGxlbmd0aDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBsYXlvdXREZWx0YSA9IGNyZWF0ZURlbHRhKCk7XG4gICAgICAgIGNhbGNCb3hEZWx0YShsYXlvdXREZWx0YSwgbGF5b3V0XzEsIHNuYXBzaG90LmxheW91dCk7XG4gICAgICAgIHZhciB2aXN1YWxEZWx0YSA9IGNyZWF0ZURlbHRhKCk7XG4gICAgICAgIGlmIChzbmFwc2hvdC5pc1NoYXJlZCkge1xuICAgICAgICAgICAgY2FsY0JveERlbHRhKHZpc3VhbERlbHRhLCBub2RlLmFwcGx5VHJhbnNmb3JtKG1lYXN1cmVkTGF5b3V0LCB0cnVlKSwgc25hcHNob3QubWVhc3VyZWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsY0JveERlbHRhKHZpc3VhbERlbHRhLCBsYXlvdXRfMSwgc25hcHNob3QubGF5b3V0KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaGFzTGF5b3V0Q2hhbmdlZCA9ICFpc0RlbHRhWmVybyhsYXlvdXREZWx0YSk7XG4gICAgICAgIHZhciBoYXNSZWxhdGl2ZVRhcmdldENoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFub2RlLnJlc3VtZUZyb20pIHtcbiAgICAgICAgICAgIG5vZGUucmVsYXRpdmVQYXJlbnQgPSBub2RlLmdldENsb3Nlc3RQcm9qZWN0aW5nUGFyZW50KCk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHRoZSByZWxhdGl2ZVBhcmVudCBpcyBpdHNlbGYgcmVzdW1pbmcgZnJvbSBhIGRpZmZlcmVudCBlbGVtZW50IHRoZW5cbiAgICAgICAgICAgICAqIHRoZSByZWxhdGl2ZSBzbmFwc2hvdCBpcyBub3QgcmVsYXZlbnRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKG5vZGUucmVsYXRpdmVQYXJlbnQgJiYgIW5vZGUucmVsYXRpdmVQYXJlbnQucmVzdW1lRnJvbSkge1xuICAgICAgICAgICAgICAgIHZhciBfZiA9IG5vZGUucmVsYXRpdmVQYXJlbnQsIHBhcmVudFNuYXBzaG90ID0gX2Yuc25hcHNob3QsIHBhcmVudExheW91dCA9IF9mLmxheW91dDtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50U25hcHNob3QgJiYgcGFyZW50TGF5b3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZWxhdGl2ZVNuYXBzaG90ID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGNSZWxhdGl2ZVBvc2l0aW9uKHJlbGF0aXZlU25hcHNob3QsIHNuYXBzaG90LmxheW91dCwgcGFyZW50U25hcHNob3QubGF5b3V0KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGF0aXZlTGF5b3V0ID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGNSZWxhdGl2ZVBvc2l0aW9uKHJlbGF0aXZlTGF5b3V0LCBsYXlvdXRfMSwgcGFyZW50TGF5b3V0LmFjdHVhbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYm94RXF1YWxzKHJlbGF0aXZlU25hcHNob3QsIHJlbGF0aXZlTGF5b3V0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzUmVsYXRpdmVUYXJnZXRDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBub2RlLm5vdGlmeUxpc3RlbmVycyhcImRpZFVwZGF0ZVwiLCB7XG4gICAgICAgICAgICBsYXlvdXQ6IGxheW91dF8xLFxuICAgICAgICAgICAgc25hcHNob3Q6IHNuYXBzaG90LFxuICAgICAgICAgICAgZGVsdGE6IHZpc3VhbERlbHRhLFxuICAgICAgICAgICAgbGF5b3V0RGVsdGE6IGxheW91dERlbHRhLFxuICAgICAgICAgICAgaGFzTGF5b3V0Q2hhbmdlZDogaGFzTGF5b3V0Q2hhbmdlZCxcbiAgICAgICAgICAgIGhhc1JlbGF0aXZlVGFyZ2V0Q2hhbmdlZDogaGFzUmVsYXRpdmVUYXJnZXRDaGFuZ2VkLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm9kZS5pc0xlYWQoKSkge1xuICAgICAgICAoX2QgPSAoX2MgPSBub2RlLm9wdGlvbnMpLm9uRXhpdENvbXBsZXRlKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuY2FsbChfYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsZWFyaW5nIHRyYW5zaXRpb25cbiAgICAgKiBUT0RPOiBJbnZlc3RpZ2F0ZSB3aHkgdGhpcyB0cmFuc2l0aW9uIGlzIGJlaW5nIHBhc3NlZCBpbiBhcyB7dHlwZTogZmFsc2UgfSBmcm9tIEZyYW1lclxuICAgICAqIGFuZCB3aHkgd2UgbmVlZCBpdCBhdCBhbGxcbiAgICAgKi9cbiAgICBub2RlLm9wdGlvbnMudHJhbnNpdGlvbiA9IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGNsZWFyU25hcHNob3Qobm9kZSkge1xuICAgIG5vZGUuY2xlYXJTbmFwc2hvdCgpO1xufVxuZnVuY3Rpb24gY2xlYXJNZWFzdXJlbWVudHMobm9kZSkge1xuICAgIG5vZGUuY2xlYXJNZWFzdXJlbWVudHMoKTtcbn1cbmZ1bmN0aW9uIHJlc2V0VHJhbnNmb3JtU3R5bGUobm9kZSkge1xuICAgIHZhciB2aXN1YWxFbGVtZW50ID0gbm9kZS5vcHRpb25zLnZpc3VhbEVsZW1lbnQ7XG4gICAgaWYgKHZpc3VhbEVsZW1lbnQgPT09IG51bGwgfHwgdmlzdWFsRWxlbWVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmlzdWFsRWxlbWVudC5nZXRQcm9wcygpLm9uQmVmb3JlTGF5b3V0TWVhc3VyZSkge1xuICAgICAgICB2aXN1YWxFbGVtZW50Lm5vdGlmeUJlZm9yZUxheW91dE1lYXN1cmUoKTtcbiAgICB9XG4gICAgbm9kZS5yZXNldFRyYW5zZm9ybSgpO1xufVxuZnVuY3Rpb24gZmluaXNoQW5pbWF0aW9uKG5vZGUpIHtcbiAgICBub2RlLmZpbmlzaEFuaW1hdGlvbigpO1xuICAgIG5vZGUudGFyZ2V0RGVsdGEgPSBub2RlLnJlbGF0aXZlVGFyZ2V0ID0gbm9kZS50YXJnZXQgPSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiByZXNvbHZlVGFyZ2V0RGVsdGEobm9kZSkge1xuICAgIG5vZGUucmVzb2x2ZVRhcmdldERlbHRhKCk7XG59XG5mdW5jdGlvbiBjYWxjUHJvamVjdGlvbihub2RlKSB7XG4gICAgbm9kZS5jYWxjUHJvamVjdGlvbigpO1xufVxuZnVuY3Rpb24gcmVzZXRSb3RhdGlvbihub2RlKSB7XG4gICAgbm9kZS5yZXNldFJvdGF0aW9uKCk7XG59XG5mdW5jdGlvbiByZW1vdmVMZWFkU25hcHNob3RzKHN0YWNrKSB7XG4gICAgc3RhY2sucmVtb3ZlTGVhZFNuYXBzaG90KCk7XG59XG5mdW5jdGlvbiBtaXhBeGlzRGVsdGEob3V0cHV0LCBkZWx0YSwgcCkge1xuICAgIG91dHB1dC50cmFuc2xhdGUgPSBtaXgoZGVsdGEudHJhbnNsYXRlLCAwLCBwKTtcbiAgICBvdXRwdXQuc2NhbGUgPSBtaXgoZGVsdGEuc2NhbGUsIDEsIHApO1xuICAgIG91dHB1dC5vcmlnaW4gPSBkZWx0YS5vcmlnaW47XG4gICAgb3V0cHV0Lm9yaWdpblBvaW50ID0gZGVsdGEub3JpZ2luUG9pbnQ7XG59XG5mdW5jdGlvbiBtaXhBeGlzKG91dHB1dCwgZnJvbSwgdG8sIHApIHtcbiAgICBvdXRwdXQubWluID0gbWl4KGZyb20ubWluLCB0by5taW4sIHApO1xuICAgIG91dHB1dC5tYXggPSBtaXgoZnJvbS5tYXgsIHRvLm1heCwgcCk7XG59XG5mdW5jdGlvbiBtaXhCb3gob3V0cHV0LCBmcm9tLCB0bywgcCkge1xuICAgIG1peEF4aXMob3V0cHV0LngsIGZyb20ueCwgdG8ueCwgcCk7XG4gICAgbWl4QXhpcyhvdXRwdXQueSwgZnJvbS55LCB0by55LCBwKTtcbn1cbmZ1bmN0aW9uIGhhc09wYWNpdHlDcm9zc2ZhZGUobm9kZSkge1xuICAgIHJldHVybiAobm9kZS5hbmltYXRpb25WYWx1ZXMgJiYgbm9kZS5hbmltYXRpb25WYWx1ZXMub3BhY2l0eUV4aXQgIT09IHVuZGVmaW5lZCk7XG59XG52YXIgZGVmYXVsdExheW91dFRyYW5zaXRpb24gPSB7XG4gICAgZHVyYXRpb246IDAuNDUsXG4gICAgZWFzZTogWzAuNCwgMCwgMC4xLCAxXSxcbn07XG5mdW5jdGlvbiBtb3VudE5vZGVFYXJseShub2RlLCBpZCkge1xuICAgIC8qKlxuICAgICAqIFJhdGhlciB0aGFuIHNlYXJjaGluZyB0aGUgRE9NIGZyb20gZG9jdW1lbnQgd2UgY2FuIHNlYXJjaCB0aGVcbiAgICAgKiBwYXRoIGZvciB0aGUgZGVlcGVzdCBtb3VudGVkIGFuY2VzdG9yIGFuZCBzZWFyY2ggZnJvbSB0aGVyZVxuICAgICAqL1xuICAgIHZhciBzZWFyY2hOb2RlID0gbm9kZS5yb290O1xuICAgIGZvciAodmFyIGkgPSBub2RlLnBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgaWYgKEJvb2xlYW4obm9kZS5wYXRoW2ldLmluc3RhbmNlKSkge1xuICAgICAgICAgICAgc2VhcmNoTm9kZSA9IG5vZGUucGF0aFtpXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBzZWFyY2hFbGVtZW50ID0gc2VhcmNoTm9kZSAmJiBzZWFyY2hOb2RlICE9PSBub2RlLnJvb3QgPyBzZWFyY2hOb2RlLmluc3RhbmNlIDogZG9jdW1lbnQ7XG4gICAgdmFyIGVsZW1lbnQgPSBzZWFyY2hFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbZGF0YS1wcm9qZWN0aW9uLWlkPVxcXCJcIi5jb25jYXQoaWQsIFwiXFxcIl1cIikpO1xuICAgIGlmIChlbGVtZW50KVxuICAgICAgICBub2RlLm1vdW50KGVsZW1lbnQsIHRydWUpO1xufVxuZnVuY3Rpb24gcm91bmRBeGlzKGF4aXMpIHtcbiAgICBheGlzLm1pbiA9IE1hdGgucm91bmQoYXhpcy5taW4pO1xuICAgIGF4aXMubWF4ID0gTWF0aC5yb3VuZChheGlzLm1heCk7XG59XG5mdW5jdGlvbiByb3VuZEJveChib3gpIHtcbiAgICByb3VuZEF4aXMoYm94LngpO1xuICAgIHJvdW5kQXhpcyhib3gueSk7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZVByb2plY3Rpb25Ob2RlLCBtaXhBeGlzLCBtaXhBeGlzRGVsdGEsIG1peEJveCB9O1xuIiwiaW1wb3J0IHsgbW90aW9uVmFsdWUgfSBmcm9tICcuLi92YWx1ZS9pbmRleC5tanMnO1xuaW1wb3J0IHsgaXNNb3Rpb25WYWx1ZSB9IGZyb20gJy4uL3ZhbHVlL3V0aWxzL2lzLW1vdGlvbi12YWx1ZS5tanMnO1xuaW1wb3J0IHsgc3RhcnRBbmltYXRpb24gfSBmcm9tICcuL3V0aWxzL3RyYW5zaXRpb25zLm1qcyc7XG5cbi8qKlxuICogQW5pbWF0ZSBhIHNpbmdsZSB2YWx1ZSBvciBhIGBNb3Rpb25WYWx1ZWAuXG4gKlxuICogVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGVpdGhlciBhIGBNb3Rpb25WYWx1ZWAgdG8gYW5pbWF0ZSwgb3IgYW4gaW5pdGlhbCBhbmltYXRpb24gdmFsdWUuXG4gKlxuICogVGhlIHNlY29uZCBpcyBlaXRoZXIgYSB2YWx1ZSB0byBhbmltYXRlIHRvLCBvciBhbiBhcnJheSBvZiBrZXlmcmFtZXMgdG8gYW5pbWF0ZSB0aHJvdWdoLlxuICpcbiAqIFRoZSB0aGlyZCBhcmd1bWVudCBjYW4gYmUgZWl0aGVyIHR3ZWVuIG9yIHNwcmluZyBvcHRpb25zLCBhbmQgb3B0aW9uYWwgbGlmZWN5Y2xlIG1ldGhvZHM6IGBvblVwZGF0ZWAsIGBvblBsYXlgLCBgb25Db21wbGV0ZWAsIGBvblJlcGVhdGAgYW5kIGBvblN0b3BgLlxuICpcbiAqIFJldHVybnMgYEFuaW1hdGlvblBsYXliYWNrQ29udHJvbHNgLCBjdXJyZW50bHkganVzdCBhIGBzdG9wYCBtZXRob2QuXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogY29uc3QgeCA9IHVzZU1vdGlvblZhbHVlKDApXG4gKlxuICogdXNlRWZmZWN0KCgpID0+IHtcbiAqICAgY29uc3QgY29udHJvbHMgPSBhbmltYXRlKHgsIDEwMCwge1xuICogICAgIHR5cGU6IFwic3ByaW5nXCIsXG4gKiAgICAgc3RpZmZuZXNzOiAyMDAwLFxuICogICAgIG9uQ29tcGxldGU6IHYgPT4ge31cbiAqICAgfSlcbiAqXG4gKiAgIHJldHVybiBjb250cm9scy5zdG9wXG4gKiB9KVxuICogYGBgXG4gKlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBhbmltYXRlKGZyb20sIHRvLCB0cmFuc2l0aW9uKSB7XG4gICAgaWYgKHRyYW5zaXRpb24gPT09IHZvaWQgMCkgeyB0cmFuc2l0aW9uID0ge307IH1cbiAgICB2YXIgdmFsdWUgPSBpc01vdGlvblZhbHVlKGZyb20pID8gZnJvbSA6IG1vdGlvblZhbHVlKGZyb20pO1xuICAgIHN0YXJ0QW5pbWF0aW9uKFwiXCIsIHZhbHVlLCB0bywgdHJhbnNpdGlvbik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RvcDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWUuc3RvcCgpOyB9LFxuICAgICAgICBpc0FuaW1hdGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWUuaXNBbmltYXRpbmcoKTsgfSxcbiAgICB9O1xufVxuXG5leHBvcnQgeyBhbmltYXRlIH07XG4iLCJpbXBvcnQgeyBjcmVhdGVQcm9qZWN0aW9uTm9kZSB9IGZyb20gJy4vY3JlYXRlLXByb2plY3Rpb24tbm9kZS5tanMnO1xuaW1wb3J0IHsgYWRkRG9tRXZlbnQgfSBmcm9tICcuLi8uLi9ldmVudHMvdXNlLWRvbS1ldmVudC5tanMnO1xuXG52YXIgRG9jdW1lbnRQcm9qZWN0aW9uTm9kZSA9IGNyZWF0ZVByb2plY3Rpb25Ob2RlKHtcbiAgICBhdHRhY2hSZXNpemVMaXN0ZW5lcjogZnVuY3Rpb24gKHJlZiwgbm90aWZ5KSB7IHJldHVybiBhZGREb21FdmVudChyZWYsIFwicmVzaXplXCIsIG5vdGlmeSk7IH0sXG4gICAgbWVhc3VyZVNjcm9sbDogZnVuY3Rpb24gKCkgeyByZXR1cm4gKHtcbiAgICAgICAgeDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0LFxuICAgICAgICB5OiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wLFxuICAgIH0pOyB9LFxuICAgIGNoZWNrSXNTY3JvbGxSb290OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9LFxufSk7XG5cbmV4cG9ydCB7IERvY3VtZW50UHJvamVjdGlvbk5vZGUgfTtcbiIsImltcG9ydCB7IGNyZWF0ZVByb2plY3Rpb25Ob2RlIH0gZnJvbSAnLi9jcmVhdGUtcHJvamVjdGlvbi1ub2RlLm1qcyc7XG5pbXBvcnQgeyBEb2N1bWVudFByb2plY3Rpb25Ob2RlIH0gZnJvbSAnLi9Eb2N1bWVudFByb2plY3Rpb25Ob2RlLm1qcyc7XG5cbnZhciByb290UHJvamVjdGlvbk5vZGUgPSB7XG4gICAgY3VycmVudDogdW5kZWZpbmVkLFxufTtcbnZhciBIVE1MUHJvamVjdGlvbk5vZGUgPSBjcmVhdGVQcm9qZWN0aW9uTm9kZSh7XG4gICAgbWVhc3VyZVNjcm9sbDogZnVuY3Rpb24gKGluc3RhbmNlKSB7IHJldHVybiAoe1xuICAgICAgICB4OiBpbnN0YW5jZS5zY3JvbGxMZWZ0LFxuICAgICAgICB5OiBpbnN0YW5jZS5zY3JvbGxUb3AsXG4gICAgfSk7IH0sXG4gICAgZGVmYXVsdFBhcmVudDogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXJvb3RQcm9qZWN0aW9uTm9kZS5jdXJyZW50KSB7XG4gICAgICAgICAgICB2YXIgZG9jdW1lbnROb2RlID0gbmV3IERvY3VtZW50UHJvamVjdGlvbk5vZGUoMCwge30pO1xuICAgICAgICAgICAgZG9jdW1lbnROb2RlLm1vdW50KHdpbmRvdyk7XG4gICAgICAgICAgICBkb2N1bWVudE5vZGUuc2V0T3B0aW9ucyh7IGxheW91dFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHJvb3RQcm9qZWN0aW9uTm9kZS5jdXJyZW50ID0gZG9jdW1lbnROb2RlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb290UHJvamVjdGlvbk5vZGUuY3VycmVudDtcbiAgICB9LFxuICAgIHJlc2V0VHJhbnNmb3JtOiBmdW5jdGlvbiAoaW5zdGFuY2UsIHZhbHVlKSB7XG4gICAgICAgIGluc3RhbmNlLnN0eWxlLnRyYW5zZm9ybSA9IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDAgPyB2YWx1ZSA6IFwibm9uZVwiO1xuICAgIH0sXG4gICAgY2hlY2tJc1Njcm9sbFJvb3Q6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShpbnN0YW5jZSkucG9zaXRpb24gPT09IFwiZml4ZWRcIik7XG4gICAgfSxcbn0pO1xuXG5leHBvcnQgeyBIVE1MUHJvamVjdGlvbk5vZGUsIHJvb3RQcm9qZWN0aW9uTm9kZSB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBjcmVhdGVNb3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9tb3Rpb24vaW5kZXgubWpzJztcbmltcG9ydCB7IGNyZWF0ZU1vdGlvblByb3h5IH0gZnJvbSAnLi9tb3Rpb24tcHJveHkubWpzJztcbmltcG9ydCB7IGNyZWF0ZURvbU1vdGlvbkNvbmZpZyB9IGZyb20gJy4vdXRpbHMvY3JlYXRlLWNvbmZpZy5tanMnO1xuaW1wb3J0IHsgZ2VzdHVyZUFuaW1hdGlvbnMgfSBmcm9tICcuLi8uLi9tb3Rpb24vZmVhdHVyZXMvZ2VzdHVyZXMubWpzJztcbmltcG9ydCB7IGFuaW1hdGlvbnMgfSBmcm9tICcuLi8uLi9tb3Rpb24vZmVhdHVyZXMvYW5pbWF0aW9ucy5tanMnO1xuaW1wb3J0IHsgZHJhZyB9IGZyb20gJy4uLy4uL21vdGlvbi9mZWF0dXJlcy9kcmFnLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVEb21WaXN1YWxFbGVtZW50IH0gZnJvbSAnLi9jcmVhdGUtdmlzdWFsLWVsZW1lbnQubWpzJztcbmltcG9ydCB7IGxheW91dEZlYXR1cmVzIH0gZnJvbSAnLi4vLi4vbW90aW9uL2ZlYXR1cmVzL2xheW91dC9pbmRleC5tanMnO1xuaW1wb3J0IHsgSFRNTFByb2plY3Rpb25Ob2RlIH0gZnJvbSAnLi4vLi4vcHJvamVjdGlvbi9ub2RlL0hUTUxQcm9qZWN0aW9uTm9kZS5tanMnO1xuXG52YXIgZmVhdHVyZUJ1bmRsZSA9IF9fYXNzaWduKF9fYXNzaWduKF9fYXNzaWduKF9fYXNzaWduKHt9LCBhbmltYXRpb25zKSwgZ2VzdHVyZUFuaW1hdGlvbnMpLCBkcmFnKSwgbGF5b3V0RmVhdHVyZXMpO1xuLyoqXG4gKiBIVE1MICYgU1ZHIGNvbXBvbmVudHMsIG9wdGltaXNlZCBmb3IgdXNlIHdpdGggZ2VzdHVyZXMgYW5kIGFuaW1hdGlvbi4gVGhlc2UgY2FuIGJlIHVzZWQgYXNcbiAqIGRyb3AtaW4gcmVwbGFjZW1lbnRzIGZvciBhbnkgSFRNTCAmIFNWRyBjb21wb25lbnQsIGFsbCBDU1MgJiBTVkcgcHJvcGVydGllcyBhcmUgc3VwcG9ydGVkLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xudmFyIG1vdGlvbiA9IC8qQF9fUFVSRV9fKi8gY3JlYXRlTW90aW9uUHJveHkoZnVuY3Rpb24gKENvbXBvbmVudCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZURvbU1vdGlvbkNvbmZpZyhDb21wb25lbnQsIGNvbmZpZywgZmVhdHVyZUJ1bmRsZSwgY3JlYXRlRG9tVmlzdWFsRWxlbWVudCwgSFRNTFByb2plY3Rpb25Ob2RlKTtcbn0pO1xuLyoqXG4gKiBDcmVhdGUgYSBET00gYG1vdGlvbmAgY29tcG9uZW50IHdpdGggdGhlIHByb3ZpZGVkIHN0cmluZy4gVGhpcyBpcyBwcmltYXJpbHkgaW50ZW5kZWRcbiAqIGFzIGEgZnVsbCBhbHRlcm5hdGl2ZSB0byBgbW90aW9uYCBmb3IgY29uc3VtZXJzIHdobyBoYXZlIHRvIHN1cHBvcnQgZW52aXJvbm1lbnRzIHRoYXQgZG9uJ3RcbiAqIHN1cHBvcnQgYFByb3h5YC5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBjcmVhdGVEb21Nb3Rpb25Db21wb25lbnQgfSBmcm9tIFwiZnJhbWVyLW1vdGlvblwiXG4gKlxuICogY29uc3QgbW90aW9uID0ge1xuICogICBkaXY6IGNyZWF0ZURvbU1vdGlvbkNvbXBvbmVudCgnZGl2JylcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRG9tTW90aW9uQ29tcG9uZW50KGtleSkge1xuICAgIHJldHVybiBjcmVhdGVNb3Rpb25Db21wb25lbnQoY3JlYXRlRG9tTW90aW9uQ29uZmlnKGtleSwgeyBmb3J3YXJkTW90aW9uUHJvcHM6IGZhbHNlIH0sIGZlYXR1cmVCdW5kbGUsIGNyZWF0ZURvbVZpc3VhbEVsZW1lbnQsIEhUTUxQcm9qZWN0aW9uTm9kZSkpO1xufVxuXG5leHBvcnQgeyBjcmVhdGVEb21Nb3Rpb25Db21wb25lbnQsIG1vdGlvbiB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBpc1NWR0NvbXBvbmVudCB9IGZyb20gJy4vaXMtc3ZnLWNvbXBvbmVudC5tanMnO1xuaW1wb3J0IHsgY3JlYXRlVXNlUmVuZGVyIH0gZnJvbSAnLi4vdXNlLXJlbmRlci5tanMnO1xuaW1wb3J0IHsgc3ZnTW90aW9uQ29uZmlnIH0gZnJvbSAnLi4vLi4vc3ZnL2NvbmZpZy1tb3Rpb24ubWpzJztcbmltcG9ydCB7IGh0bWxNb3Rpb25Db25maWcgfSBmcm9tICcuLi8uLi9odG1sL2NvbmZpZy1tb3Rpb24ubWpzJztcblxuZnVuY3Rpb24gY3JlYXRlRG9tTW90aW9uQ29uZmlnKENvbXBvbmVudCwgX2EsIHByZWxvYWRlZEZlYXR1cmVzLCBjcmVhdGVWaXN1YWxFbGVtZW50LCBwcm9qZWN0aW9uTm9kZUNvbnN0cnVjdG9yKSB7XG4gICAgdmFyIF9iID0gX2EuZm9yd2FyZE1vdGlvblByb3BzLCBmb3J3YXJkTW90aW9uUHJvcHMgPSBfYiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfYjtcbiAgICB2YXIgYmFzZUNvbmZpZyA9IGlzU1ZHQ29tcG9uZW50KENvbXBvbmVudClcbiAgICAgICAgPyBzdmdNb3Rpb25Db25maWdcbiAgICAgICAgOiBodG1sTW90aW9uQ29uZmlnO1xuICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgcHJlbG9hZGVkRmVhdHVyZXM6IHByZWxvYWRlZEZlYXR1cmVzLCB1c2VSZW5kZXI6IGNyZWF0ZVVzZVJlbmRlcihmb3J3YXJkTW90aW9uUHJvcHMpLCBjcmVhdGVWaXN1YWxFbGVtZW50OiBjcmVhdGVWaXN1YWxFbGVtZW50LCBwcm9qZWN0aW9uTm9kZUNvbnN0cnVjdG9yOiBwcm9qZWN0aW9uTm9kZUNvbnN0cnVjdG9yLCBDb21wb25lbnQ6IENvbXBvbmVudCB9KTtcbn1cblxuZXhwb3J0IHsgY3JlYXRlRG9tTW90aW9uQ29uZmlnIH07XG4iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKTsiLCJleHBvcnQgY29uc3QgQXBwUGF0aHMgPSB7XG4gIFNIT1dST09NOiBcIi9zaG93cm9vbVwiLFxuICBTRU5ET1VUUzogXCIvc2VuZG91dHNcIixcbiAgU0VORE9VVFNfQ01TOiBcIi9zZW5kb3V0cy1jbXNcIixcbiAgTUFSS0VUSU5HX0VOR0lORTogXCIvbWVkaWFcIixcbiAgVVNFUl9NQU5BR0VNRU5UOiBcIi91c2Vyc1wiLFxuICBURU5BTlRTOiBcIi90ZW5hbnRzXCIsXG4gIERBU0hCT0FSRDogXCIvZGFzaGJvYXJkXCIsXG4gIERBU0hCT0FSRF9DUkVBVEVfV09SS1NQQUNFX01PREFMOiBcIi9kYXNoYm9hcmQvY3JlYXRlLXdvcmtzcGFjZVwiLFxuICBDUkVBVEVfV09SS1NQQUNFOiBcIi9jcmVhdGUtd29ya3NwYWNlXCIsXG4gIFNFVFRJTkdTOiBcIi9zZXR0aW5nc1wiLFxuICBJTlNUT1JFX0FETUlOOiBcIi9pbnN0b3JlLWFkbWluXCIsXG4gIFNVUEVSQURNSU46IFwiL3N1cGVyYWRtaW5cIixcbiAgQ01TOiBcIi9jbXNcIixcbiAgSU5TVE9SRTogXCIvaW5zdG9yZVwiLFxufTtcblxuZXhwb3J0IGNvbnN0IFRFTkFOVFNfVElFUl9XSURUSCA9IDMwMDtcbmV4cG9ydCBjb25zdCBBUFBMSUNBVElPTlNfVElFUl9XSURUSCA9IDMwMDtcbiIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiQHRvdWNodGVjaC93ZWItYXV0aFwiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcIkB0b3VjaHRlY2gvd2ViLXRlbmFudC1pZC1wcm92aWRlclwiKTsiLCJpbXBvcnQgUmVhY3QsIHtcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUNvbnRleHQsXG4gIHVzZUVmZmVjdCxcbiAgdXNlTWVtbyxcbiAgdXNlU3RhdGUsXG59IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQge1xuICBBdXRoQ29udGV4dCxcbiAgUHJpdmlsZWdlcyxcbiAgdXNlckhhc1RlbmFudEFjY2Vzcyxcbn0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWF1dGhcIjtcbmltcG9ydCB7IFRlbmFudElkQ29udGV4dCB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi10ZW5hbnQtaWQtcHJvdmlkZXJcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBvbk5hdmlnYXRpb25DbG9zZT86ICgpID0+IHZvaWQ7XG59O1xuXG50eXBlIE5hdmlnYXRpb25WaWV3U3RhdGUgPSB7XG4gIHNlbGVjdGVkVGVuYW50SWQ6IHN0cmluZztcbiAgY3VycmVudFBvc2l0aW9uOiBOYXZpZ2F0aW9uUG9zaXRpb247XG59O1xuXG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uQ29udGV4dFZhbHVlID0ge1xuICBoYXNNYXJrZXRpbmdFbmdpbmVBY2Nlc3M6IGJvb2xlYW47XG4gIGhhc1Nob3dyb29tQWNjZXNzOiBib29sZWFuO1xuICBoYXNTZW5kb3V0c0FjY2VzczogYm9vbGVhbjtcbiAgaGFzQ21zQWNjZXNzOiBib29sZWFuO1xuICBoYXNVc2VyTWFuYWdlbWVudEFjY2VzczogYm9vbGVhbjtcbiAgaGFzVW5pdmVyc2FsQWNjZXNzOiBib29sZWFuO1xuICBoYXNTZXR0aW5nc0FjY2VzczogYm9vbGVhbjtcbiAgaGFzSW5zdG9yZUFjY2VzczogYm9vbGVhbjtcbiAgdmlld1N0YXRlOiBOYXZpZ2F0aW9uVmlld1N0YXRlO1xuICB1cGRhdGVWaWV3U3RhdGU6ICh2aWV3U3RhdGVVcGRhdGU6IFBhcnRpYWw8TmF2aWdhdGlvblZpZXdTdGF0ZT4pID0+IHZvaWQ7XG4gIHNpZ25PdXQ6ICgpID0+IHZvaWQ7XG4gIHRvZ2dsZVRlbmFudHM6ICgpID0+IHZvaWQ7XG4gIG9uTmF2aWdhdGlvbkNsb3NlOiAoKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IGVudW0gTmF2aWdhdGlvblBvc2l0aW9uIHtcbiAgT1BFTiA9IFwiT1BFTlwiLFxuICBISURERU4gPSBcIkhJRERFTlwiLFxuICBFWFBBTkRFRCA9IFwiRVhQQU5ERURcIixcbn1cblxuZXhwb3J0IGNvbnN0IE5hdmlnYXRpb25Db250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxOYXZpZ2F0aW9uQ29udGV4dFZhbHVlPihcbiAge30gYXMgTmF2aWdhdGlvbkNvbnRleHRWYWx1ZVxuKTtcblxuZXhwb3J0IGZ1bmN0aW9uIHVzZU5hdmlnYXRpb25Db250ZXh0KCkge1xuICByZXR1cm4gdXNlQ29udGV4dChOYXZpZ2F0aW9uQ29udGV4dCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBOYXZpZ2F0aW9uQ29udGV4dFByb3ZpZGVyKHtcbiAgY2hpbGRyZW4sXG4gIGlzT3BlbixcbiAgb25OYXZpZ2F0aW9uQ2xvc2UgPSAoKSA9PiB7fSxcbn06IFByb3BzKSB7XG4gIGNvbnN0IFt0ZW5hbnRJZF0gPSB1c2VDb250ZXh0KFRlbmFudElkQ29udGV4dCk7XG4gIGNvbnN0IFt2aWV3U3RhdGUsIHNldFZpZXdTdGF0ZV0gPSB1c2VTdGF0ZTxOYXZpZ2F0aW9uVmlld1N0YXRlPih7XG4gICAgc2VsZWN0ZWRUZW5hbnRJZDogdGVuYW50SWQgYXMgc3RyaW5nLFxuICAgIGN1cnJlbnRQb3NpdGlvbjogTmF2aWdhdGlvblBvc2l0aW9uLkhJRERFTixcbiAgfSk7XG5cbiAgY29uc3QgeyB1c2VyLCBhdXRoU2VydmljZSwgY2FuU2lnbk91dCB9ID0gdXNlQ29udGV4dChBdXRoQ29udGV4dCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoaXNPcGVuKSB7XG4gICAgICBzZXRWaWV3U3RhdGUoKHByZXZWaWV3U3RhdGUpID0+ICh7XG4gICAgICAgIC4uLnByZXZWaWV3U3RhdGUsXG4gICAgICAgIHNlbGVjdGVkVGVuYW50SWQ6IHRlbmFudElkIGFzIHN0cmluZyxcbiAgICAgICAgY3VycmVudFBvc2l0aW9uOiBOYXZpZ2F0aW9uUG9zaXRpb24uT1BFTixcbiAgICAgIH0pKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHNldFZpZXdTdGF0ZSgocHJldlZpZXdTdGF0ZSkgPT4gKHtcbiAgICAgIC4uLnByZXZWaWV3U3RhdGUsXG4gICAgICBjdXJyZW50UG9zaXRpb246IE5hdmlnYXRpb25Qb3NpdGlvbi5ISURERU4sXG4gICAgfSkpO1xuICB9LCBbdGVuYW50SWQsIGlzT3Blbiwgc2V0Vmlld1N0YXRlXSk7XG5cbiAgLy8gcmVmcmVzaCB0aGUgdG9rZW4gdG8gZ2V0IHRoZSBwb3NzaWJseSB1cGRhdGVkIHByaXZpbGVnZXMvYXBwcy90ZW5hbnRzIHdpdGhcbiAgLy8gY29vbGRvd24gb2YgNSBtaW51dGVzIHRvIG5vdCB0cmlnZ2VyIHJlZnJlc2ggdG9rZW4gb24gZXZlcnkgbmF2aWdhdGlvbiBvcGVuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzT3Blbikge1xuICAgICAgYXV0aFNlcnZpY2UucmVmcmVzaFVzZXIoMzAwKTtcbiAgICB9XG4gIH0sIFthdXRoU2VydmljZSwgaXNPcGVuXSk7XG5cbiAgY29uc3QgaGFzTWFya2V0aW5nRW5naW5lQWNjZXNzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgdXNlclxuICAgICAgICA/IHVzZXJIYXNUZW5hbnRBY2Nlc3MoXG4gICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgdmlld1N0YXRlLnNlbGVjdGVkVGVuYW50SWQsXG4gICAgICAgICAgICBQcml2aWxlZ2VzLk1BUktFVElOR19FTkdJTkVfQVBQXG4gICAgICAgICAgKVxuICAgICAgICA6IGZhbHNlLFxuICAgIFt2aWV3U3RhdGUuc2VsZWN0ZWRUZW5hbnRJZCwgdXNlcl1cbiAgKTtcblxuICBjb25zdCBoYXNTaG93cm9vbUFjY2VzcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHVzZXJcbiAgICAgICAgPyB1c2VySGFzVGVuYW50QWNjZXNzKFxuICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgIHZpZXdTdGF0ZS5zZWxlY3RlZFRlbmFudElkLFxuICAgICAgICAgICAgUHJpdmlsZWdlcy5TSE9XUk9PTV9BUFBcbiAgICAgICAgICApXG4gICAgICAgIDogZmFsc2UsXG4gICAgW3ZpZXdTdGF0ZS5zZWxlY3RlZFRlbmFudElkLCB1c2VyXVxuICApO1xuXG4gIGNvbnN0IGhhc1NlbmRvdXRzQWNjZXNzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgdXNlclxuICAgICAgICA/IHVzZXJIYXNUZW5hbnRBY2Nlc3MoXG4gICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgdmlld1N0YXRlLnNlbGVjdGVkVGVuYW50SWQsXG4gICAgICAgICAgICBQcml2aWxlZ2VzLlNFTkRPVVRTX0FQUFxuICAgICAgICAgIClcbiAgICAgICAgOiBmYWxzZSxcbiAgICBbdmlld1N0YXRlLnNlbGVjdGVkVGVuYW50SWQsIHVzZXJdXG4gICk7XG5cbiAgY29uc3QgaGFzQ21zQWNjZXNzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgdXNlclxuICAgICAgICA/IHVzZXJIYXNUZW5hbnRBY2Nlc3MoXG4gICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgdmlld1N0YXRlLnNlbGVjdGVkVGVuYW50SWQsXG4gICAgICAgICAgICBQcml2aWxlZ2VzLlNFTkRPVVRTX0NNU19BUFBcbiAgICAgICAgICApXG4gICAgICAgIDogZmFsc2UsXG4gICAgW3ZpZXdTdGF0ZS5zZWxlY3RlZFRlbmFudElkLCB1c2VyXVxuICApO1xuXG4gIGNvbnN0IGhhc1VzZXJNYW5hZ2VtZW50QWNjZXNzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgdXNlclxuICAgICAgICA/IHVzZXJIYXNUZW5hbnRBY2Nlc3MoXG4gICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgdmlld1N0YXRlLnNlbGVjdGVkVGVuYW50SWQsXG4gICAgICAgICAgICBQcml2aWxlZ2VzLlVTRVJfTUFOQUdFTUVOVF9BUFBcbiAgICAgICAgICApXG4gICAgICAgIDogZmFsc2UsXG4gICAgW3ZpZXdTdGF0ZS5zZWxlY3RlZFRlbmFudElkLCB1c2VyXVxuICApO1xuXG4gIGNvbnN0IGhhc1VuaXZlcnNhbEFjY2VzcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHVzZXJcbiAgICAgICAgPyB1c2VySGFzVGVuYW50QWNjZXNzKFxuICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgIHZpZXdTdGF0ZS5zZWxlY3RlZFRlbmFudElkLFxuICAgICAgICAgICAgUHJpdmlsZWdlcy5VTklWRVJTQUxcbiAgICAgICAgICApXG4gICAgICAgIDogZmFsc2UsXG4gICAgW3ZpZXdTdGF0ZS5zZWxlY3RlZFRlbmFudElkLCB1c2VyXVxuICApO1xuXG4gIGNvbnN0IGhhc1NldHRpbmdzQWNjZXNzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgdXNlclxuICAgICAgICA/IHVzZXJIYXNUZW5hbnRBY2Nlc3ModXNlciwgdmlld1N0YXRlLnNlbGVjdGVkVGVuYW50SWQsIFwic2V0dGluZ3MtYXBwXCIpXG4gICAgICAgIDogZmFsc2UsXG4gICAgW3ZpZXdTdGF0ZS5zZWxlY3RlZFRlbmFudElkLCB1c2VyXVxuICApO1xuXG4gIGNvbnN0IGhhc0luc3RvcmVBY2Nlc3MgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICB1c2VyXG4gICAgICAgID8gdXNlckhhc1RlbmFudEFjY2VzcyhcbiAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICB2aWV3U3RhdGUuc2VsZWN0ZWRUZW5hbnRJZCxcbiAgICAgICAgICAgIFwiaW5zdG9yZS1hZG1pbi1hcHBcIlxuICAgICAgICAgIClcbiAgICAgICAgOiBmYWxzZSxcbiAgICBbdmlld1N0YXRlLnNlbGVjdGVkVGVuYW50SWQsIHVzZXJdXG4gICk7XG5cbiAgY29uc3QgdXBkYXRlVmlld1N0YXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKHZpZXdTdGF0ZVVwZGF0ZTogUGFydGlhbDxOYXZpZ2F0aW9uVmlld1N0YXRlPikgPT5cbiAgICAgIHNldFZpZXdTdGF0ZSgocHJldlZpZXdTdGF0ZSkgPT4gKHtcbiAgICAgICAgLi4ucHJldlZpZXdTdGF0ZSxcbiAgICAgICAgLi4udmlld1N0YXRlVXBkYXRlLFxuICAgICAgfSkpLFxuICAgIFtdXG4gICk7XG5cbiAgY29uc3Qgc2lnbk91dCA9IHVzZUNhbGxiYWNrKGFzeW5jICgpID0+IHtcbiAgICBpZiAoY2FuU2lnbk91dCkge1xuICAgICAgYXdhaXQgYXV0aFNlcnZpY2Uuc2lnbk91dCgpO1xuICAgIH1cbiAgfSwgW2F1dGhTZXJ2aWNlLCBjYW5TaWduT3V0XSk7XG5cbiAgY29uc3QgdG9nZ2xlVGVuYW50cyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAodmlld1N0YXRlLmN1cnJlbnRQb3NpdGlvbiA9PT0gTmF2aWdhdGlvblBvc2l0aW9uLk9QRU4pIHtcbiAgICAgIHVwZGF0ZVZpZXdTdGF0ZSh7XG4gICAgICAgIGN1cnJlbnRQb3NpdGlvbjogTmF2aWdhdGlvblBvc2l0aW9uLkVYUEFOREVELFxuICAgICAgICBzZWxlY3RlZFRlbmFudElkOiB0ZW5hbnRJZCBhcyBzdHJpbmcsXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodmlld1N0YXRlLmN1cnJlbnRQb3NpdGlvbiA9PT0gTmF2aWdhdGlvblBvc2l0aW9uLkVYUEFOREVEKSB7XG4gICAgICB1cGRhdGVWaWV3U3RhdGUoeyBjdXJyZW50UG9zaXRpb246IE5hdmlnYXRpb25Qb3NpdGlvbi5PUEVOIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSwgW3RlbmFudElkLCB1cGRhdGVWaWV3U3RhdGUsIHZpZXdTdGF0ZS5jdXJyZW50UG9zaXRpb25dKTtcblxuICBjb25zdCBjdHggPSB1c2VNZW1vPE5hdmlnYXRpb25Db250ZXh0VmFsdWU+KFxuICAgICgpID0+ICh7XG4gICAgICBoYXNNYXJrZXRpbmdFbmdpbmVBY2Nlc3MsXG4gICAgICBoYXNTaG93cm9vbUFjY2VzcyxcbiAgICAgIGhhc1NlbmRvdXRzQWNjZXNzLFxuICAgICAgaGFzQ21zQWNjZXNzLFxuICAgICAgaGFzVXNlck1hbmFnZW1lbnRBY2Nlc3MsXG4gICAgICBoYXNVbml2ZXJzYWxBY2Nlc3MsXG4gICAgICBoYXNTZXR0aW5nc0FjY2VzcyxcbiAgICAgIGhhc0luc3RvcmVBY2Nlc3MsXG4gICAgICB2aWV3U3RhdGUsXG4gICAgICB1cGRhdGVWaWV3U3RhdGUsXG4gICAgICBzaWduT3V0LFxuICAgICAgdG9nZ2xlVGVuYW50cyxcbiAgICAgIG9uTmF2aWdhdGlvbkNsb3NlLFxuICAgIH0pLFxuICAgIFtcbiAgICAgIGhhc01hcmtldGluZ0VuZ2luZUFjY2VzcyxcbiAgICAgIGhhc1NlbmRvdXRzQWNjZXNzLFxuICAgICAgaGFzQ21zQWNjZXNzLFxuICAgICAgaGFzU2hvd3Jvb21BY2Nlc3MsXG4gICAgICBoYXNVc2VyTWFuYWdlbWVudEFjY2VzcyxcbiAgICAgIGhhc1VuaXZlcnNhbEFjY2VzcyxcbiAgICAgIGhhc1NldHRpbmdzQWNjZXNzLFxuICAgICAgaGFzSW5zdG9yZUFjY2VzcyxcbiAgICAgIHZpZXdTdGF0ZSxcbiAgICAgIHVwZGF0ZVZpZXdTdGF0ZSxcbiAgICAgIHNpZ25PdXQsXG4gICAgICB0b2dnbGVUZW5hbnRzLFxuICAgICAgb25OYXZpZ2F0aW9uQ2xvc2UsXG4gICAgXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPE5hdmlnYXRpb25Db250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjdHh9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvTmF2aWdhdGlvbkNvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm5hdmlnYXRpb25cIjpcInRLeWdRNExNRGlrSHM1SHNoMFFrXCJ9OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNjKG5hbWVzKSB7XG4gIGlmICh0eXBlb2YgbmFtZXMgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIG5hbWVzID09PSBcIm51bWJlclwiKSByZXR1cm4gXCJcIiArIG5hbWVzXG5cbiAgbGV0IG91dCA9IFwiXCJcblxuICBpZiAoQXJyYXkuaXNBcnJheShuYW1lcykpIHtcbiAgICBmb3IgKGxldCBpID0gMCwgdG1wOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICgodG1wID0gY2MobmFtZXNbaV0pKSAhPT0gXCJcIikge1xuICAgICAgICBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyB0bXBcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yIChsZXQgayBpbiBuYW1lcykge1xuICAgICAgaWYgKG5hbWVzW2tdKSBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyBrXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG91dFxufVxuIiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJAdG91Y2h0ZWNoL2Jhc2VsYXllci11aVwiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcIkB0b3VjaHRlY2gvd2ViLWFwaS1jbGllbnRcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJzd3JcIik7IiwiaW1wb3J0IHVzZVNXUiBmcm9tIFwic3dyXCI7XG5cbmltcG9ydCB7IGNyZWF0ZVVybCwgdXNlQXBpIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWFwaS1jbGllbnRcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVRlbmFudHNWaWV3VXJsKCkge1xuICBjb25zdCBiYXNlVXJsID1cbiAgICBwcm9jZXNzLmVudi5URU5BTlRTX1NFUlZJQ0VfVVJMID8/XG4gICAgcHJvY2Vzcy5lbnYuUkVBQ1RfQVBQX1RFTkFOVFNfU0VSVklDRV9VUkw7XG5cbiAgaWYgKCFiYXNlVXJsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJURU5BTlRTX1NFUlZJQ0VfVVJMIG9yIFJFQUNUX0FQUF9URU5BTlRTX1NFUlZJQ0VfVVJMIG11c3QgYmUgc2V0XCJcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZVVybChiYXNlVXJsLCBcIi9hcGkvVGVuYW50cy92aWV3XCIpO1xufVxuXG5leHBvcnQgdHlwZSBUZW5hbnQgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGxvZ29Vcmw6IHN0cmluZztcbiAgcGxhbk5hbWU6IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIFN0YXRlID0ge1xuICBpc0xvYWRpbmc6IGJvb2xlYW47XG4gIGVycm9yPzogRXJyb3I7XG4gIHRlbmFudHM6IEFycmF5PFRlbmFudD47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUZW5hbnRzKCk6IFN0YXRlIHtcbiAgY29uc3QgYXBpID0gdXNlQXBpKCk7XG4gIGNvbnN0IHVybCA9IGNyZWF0ZVRlbmFudHNWaWV3VXJsKCk7XG5cbiAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gdXNlU1dSKHVybCwgYXBpLmdldCk7XG5cbiAgcmV0dXJuIHtcbiAgICB0ZW5hbnRzOiAoZGF0YSA/PyBbXSkgYXMgQXJyYXk8VGVuYW50PixcbiAgICBpc0xvYWRpbmc6ICFkYXRhICYmICFlcnJvcixcbiAgICBlcnJvcixcbiAgfTtcbn1cbiIsImltcG9ydCBSZWFjdCwgeyB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEltYWdlLCBJbWFnZVByb3BzIH0gZnJvbSBcIkB0b3VjaHRlY2gvYmFzZWxheWVyLXVpXCI7XG5cbmltcG9ydCB1c2VUZW5hbnRzIGZyb20gXCIuLi8uLi8uLi9ob29rcy91c2VUZW5hbnRzXCI7XG5pbXBvcnQgeyB1c2VOYXZpZ2F0aW9uQ29udGV4dCB9IGZyb20gXCIuLi9Db250ZXh0XCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGxheW91dD86IEltYWdlUHJvcHNbXCJsYXlvdXRcIl07XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gTG9nbyh7IGxheW91dCB9OiBQcm9wcykge1xuICBjb25zdCB7XG4gICAgdmlld1N0YXRlOiB7IHNlbGVjdGVkVGVuYW50SWQgfSxcbiAgfSA9IHVzZU5hdmlnYXRpb25Db250ZXh0KCk7XG5cbiAgY29uc3QgeyB0ZW5hbnRzIH0gPSB1c2VUZW5hbnRzKCk7XG5cbiAgY29uc3QgdGVuYW50ID0gdXNlTWVtbyhcbiAgICAoKSA9PiB0ZW5hbnRzLmZpbmQoKHRlbmFudCkgPT4gdGVuYW50LmlkID09PSBzZWxlY3RlZFRlbmFudElkKSxcbiAgICBbc2VsZWN0ZWRUZW5hbnRJZCwgdGVuYW50c11cbiAgKTtcblxuICBpZiAoIXRlbmFudCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIDxJbWFnZSBzcmM9e3RlbmFudC5sb2dvVXJsfSBsYXlvdXQ9e2xheW91dH0gLz47XG59XG5cbmV4cG9ydCBkZWZhdWx0IExvZ287XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRpZXJcIjpcImFsa3hqWnZUZ0Fjc3owSlJrbTZjXCIsXCJoaWRkZW5cIjpcInFPV1FiMEJDX210V21Ed3ZmaTZaXCIsXCJ0aWVySGVhZGVyXCI6XCJwNEpQYjREem1Hb1pPSWhPMDl3c1wiLFwiYm9yZGVyXCI6XCJ4MF9WRjNCWGJXVXRsQ0NnT3RRWlwiLFwidGllck1haW5cIjpcImpXUEJadThpTER5eVRuNmVXNmt3XCIsXCJ0aWVyRm9vdGVyXCI6XCJnYjZ0ODJ4cFpVN3lta1VkU3V4X1wifTsiLCJpbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBjc3MgZnJvbSBcIi4vVGllci5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBoZWFkZXI/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIHNob3dIZWFkZXJCb3JkZXI/OiBib29sZWFuO1xuICBmb290ZXI/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgd2lkdGg/OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBUaWVyKHtcbiAgY2hpbGRyZW4sXG4gIGhlYWRlcixcbiAgZm9vdGVyLFxuICBjbGFzc05hbWUsXG4gIHdpZHRoLFxuICBzaG93SGVhZGVyQm9yZGVyLFxufTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW2Nzcy50aWVyLCBjbGFzc05hbWVdKX0gc3R5bGU9e3sgd2lkdGggfX0+XG4gICAgICB7ISFoZWFkZXIgJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBjc3MudGllckhlYWRlcixcbiAgICAgICAgICAgIHsgW2Nzcy5ib3JkZXJdOiBzaG93SGVhZGVyQm9yZGVyIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgID5cbiAgICAgICAgICB7aGVhZGVyfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLnRpZXJNYWlufT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICB7ISFmb290ZXIgJiYgPGRpdiBjbGFzc05hbWU9e2Nzcy50aWVyRm9vdGVyfT57Zm9vdGVyfTwvZGl2Pn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGllcjtcbiIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwicmVhY3Qtcm91dGVyLWRvbVwiKTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm5hdmlnYXRpb25CdXR0b25cIjpcIlJ1WXlVNFpVOTgySUJnZGIxTnIyXCIsXCJhY3RpdmVcIjpcIm1EVlBDNDUyc0laMUFaMTJIdXB1XCJ9OyIsImltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBSZWFjdCwge1xuICBQcm9wc1dpdGhDaGlsZHJlbixcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUNvbnRleHQsXG4gIHVzZUVmZmVjdCxcbiAgdXNlU3RhdGUsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgbWF0Y2hQYXRoIH0gZnJvbSBcInJlYWN0LXJvdXRlci1kb21cIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIkB0b3VjaHRlY2gvYmFzZWxheWVyLXVpXCI7XG5pbXBvcnQgeyBUZW5hbnRJZENvbnRleHQgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItdGVuYW50LWlkLXByb3ZpZGVyXCI7XG5cbmltcG9ydCB7IHVzZU5hdmlnYXRpb25Db250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRleHRcIjtcbmltcG9ydCBjc3MgZnJvbSBcIi4vQXBwbGljYXRpb25MaW5rLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgdG8/OiBzdHJpbmc7XG4gIGhpZGRlbj86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgb25DbGljaz86IChcbiAgICBzZXRTaG91bGRDaG9vc2VUZW5hbnQ6IChmbGFnOiBib29sZWFuKSA9PiB2b2lkXG4gICkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD47XG59O1xuXG5mdW5jdGlvbiBBcHBsaWNhdGlvbkxpbmsoe1xuICBjaGlsZHJlbixcbiAgdG8sXG4gIGhpZGRlbixcbiAgZGlzYWJsZWQsXG4gIG9uQ2xpY2ssXG59OiBQcm9wc1dpdGhDaGlsZHJlbjxQcm9wcz4pIHtcbiAgY29uc3QgW2N1cnJlbnRUZW5hbnRJZCwgc2V0Q3VycmVudFRlbmFudElkXSA9IHVzZUNvbnRleHQoVGVuYW50SWRDb250ZXh0KTtcbiAgY29uc3QgW2lzUmVkaXJlY3RpbmcsIHNldElzUmVkaXJlY3RpbmddID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IHtcbiAgICB2aWV3U3RhdGU6IHsgc2VsZWN0ZWRUZW5hbnRJZCB9LFxuICB9ID0gdXNlTmF2aWdhdGlvbkNvbnRleHQoKTtcblxuICAvKipcbiAgICogV29ya2Fyb3VuZCBmb3I6XG4gICAqXG4gICAqIFVzZXIgQSBoYXMgYWNjZXNzIHRvIHRlbmFudHM6IDEgKFVzZXJzIGFwcCBvbmx5KSBhbmQgMiAoTWVkaWEgbGlicmFyeSBhcHAgb25seSlcbiAgICpcbiAgICogVXNlciBBIGlzIGxvZ2dlZCBpbiB0byBVc2VycyBhcHAgKHRlbmFudCAxKSBhbmQgbmF2aWdhdGVzIHRvIE1lZGlhIGxpYnJhcnkgYXBwICh0ZW5hbnQgMilcbiAgICogYnkgc2VsZWN0aW5nIGNvcnJlc3BvbmRpbmcgdGVuYW50ICgyKSBhbmQgYXZhaWxhYmxlIGFwcCAoTWVkaWEgbGlicmFyeSkgaW4gdGhlIG5hdmlnYXRpb24gbWVudVxuICAgKlxuICAgKiBVc2VyIEEgZW5kcyB1cCBpbiBUZW5hbnRzIHBpY2tlciBwYWdlIGJlY2F1c2Ugb2YgUHJvdGVjdGVkIHJvdXRlIGluIHRoZSBwYXJlbnQgYXBwIChVc2VycyBhcHApXG4gICAqIHRoYXQgcmVkaXJlY3RzIHRvIHVuYXV0aG9yaXplZFVybCAoVGVuYW50cyBwaWNrZXIgcGFnZSkgaWYgdXNlciBkb2Vzbid0IGhhdmUgYWNjZXNzIHRvIHRoZSBhcHBcbiAgICogaGUgaXMgY3VycmVudGx5IGluIChVc2VycyBhcHAgb2YgdGVuYW50IDEpXG4gICAqL1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGNvbnN0IGhhbmRsZVVubG9hZCA9ICgpID0+IHtcbiAgICAgIGlmIChjdXJyZW50VGVuYW50SWQgIT09IHNlbGVjdGVkVGVuYW50SWQgJiYgaXNSZWRpcmVjdGluZykge1xuICAgICAgICBzZXRDdXJyZW50VGVuYW50SWQoc2VsZWN0ZWRUZW5hbnRJZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIHVubG9hZCBldmVudCBpcyBmaXJlZCB3aGVuIHdpbmRvdy5hc3NpZ24gaXMgY2FsbGVkXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJ1bmxvYWRcIiwgaGFuZGxlVW5sb2FkKTtcblxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInVubG9hZFwiLCBoYW5kbGVVbmxvYWQpO1xuICAgIH07XG4gIH0sIFtzZXRDdXJyZW50VGVuYW50SWQsIGN1cnJlbnRUZW5hbnRJZCwgc2VsZWN0ZWRUZW5hbnRJZCwgaXNSZWRpcmVjdGluZ10pO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICBvbkNsaWNrKHNldElzUmVkaXJlY3RpbmcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodG8pIHtcbiAgICAgIHNldElzUmVkaXJlY3RpbmcodHJ1ZSk7XG4gICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKHRvKTtcbiAgICB9XG4gIH0sIFt0bywgb25DbGlja10pO1xuXG4gIGNvbnN0IGlzQWN0aXZlID0gdG9cbiAgICA/ICEhbWF0Y2hQYXRoKGAke3RvfS8qYCwgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lKSAmJlxuICAgICAgY3VycmVudFRlbmFudElkID09PSBzZWxlY3RlZFRlbmFudElkXG4gICAgOiBmYWxzZTtcblxuICByZXR1cm4gIWhpZGRlbiA/IChcbiAgICA8QnV0dG9uXG4gICAgICBhbGlnbj1cImxlZnRcIlxuICAgICAgbm9Cb3JkZXJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW2Nzcy5uYXZpZ2F0aW9uQnV0dG9uLCB7IFtjc3MuYWN0aXZlXTogaXNBY3RpdmUgfV0pfVxuICAgICAgbm9TaGFkb3dcbiAgICAgIGRpc2FibGVkPXtpc0FjdGl2ZSB8fCBkaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0J1dHRvbj5cbiAgKSA6IG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFwcGxpY2F0aW9uTGluaztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiYXBwbGljYXRpb25zXCI6XCJ4cTJOaE05QkVpX1c0bndUM3loMlwiLFwiYXBwbGljYXRpb25zSGVhZGVyXCI6XCJCR2pFdFZqNHJfR0wxWFJQZ2dkS1wiLFwiYXBwbGljYXRpb25zSGVhZGVyQnJhbmRcIjpcIlZhb1M5c1hURUNBVHY1QWxoZVdBXCIsXCJhcHBsaWNhdGlvbnNIZWFkZXJMb2dvXCI6XCJXdVRyR3ozVVUzcEgxZlZUaUNUWlwiLFwiYXBwbGljYXRpb25zSGVhZGVyQ2xvc2VJY29uXCI6XCJDb2gyREZyQ05ZcWp1SF9yN012R1wiLFwiYXBwbGljYXRpb25zSGVhZGVyQ2hhbmdlQnJhbmRCdXR0b25cIjpcIk1PWDlJQjBuU3g1Y2ZMSHJjb09aXCIsXCJhcHBsaWNhdGlvbnNNYWluXCI6XCJtd09GaUNNSlVjd1FnTjcxZTdzQ1wiLFwiYXBwbGljYXRpb25zTWFpbkNvbnRlbnRcIjpcIkFWRzdrQjlGeXZiYjZqVzNGQTBCXCIsXCJhcHBsaWNhdGlvbnNNYWluTGlzdFwiOlwiVktzSEpPWGNRaTE3NHM5NHFtT29cIixcImFwcGxpY2F0aW9uc01haW5Vc2VyXCI6XCJTV25BMjBuQUVrUjZnb1dHbEZyZVwiLFwiYXBwbGljYXRpb25zTWFpblVzZXJOYW1lXCI6XCJIZURheVpwTWFpYU13b1h2UkZvRFwiLFwiYXBwbGljYXRpb25zTWFpblVzZXJFbWFpbFwiOlwiWEYyRl9ZR0U2UG14UzB0RVZ2UDJcIixcImFwcGxpY2F0aW9uc0Zvb3RlclwiOlwiVjNJWkwxeVZiTVdJcG9zalFBTDhcIixcImFwcGxpY2F0aW9uc0Zvb3RlclNpZ25PdXRcIjpcIlpneDhEcHkycEFkT29xVHRNTVFpXCIsXCJhcHBsaWNhdGlvbnNGb290ZXJTaWduT3V0SWNvblwiOlwiQVpubEZielRHRXhHdHBZaDRfTFlcIixcImFwcGxpY2F0aW9uc0Zvb3RlclNpZ25PdXRMYWJlbFwiOlwicTh2anZSb1B5V3hQXzRiaU83eWVcIixcImVycm9yQW5pbVwiOlwiSzdCU1Jfc09RbnR5blZOTnJYNDVcIixcImhvcml6b250YWxTaGFrZVwiOlwiYzBUVFR0aVhJWGZsdFdoTzk1ZDhcIixcImVycm9yVGV4dFwiOlwianU4M2VEdTVjMjY2WXY4ZmdZaVhcIn07IiwiaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBCdXR0b24sIEljb24gfSBmcm9tIFwiQHRvdWNodGVjaC9iYXNlbGF5ZXItdWlcIjtcbmltcG9ydCB7IEF1dGhDb250ZXh0IH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWF1dGhcIjtcblxuaW1wb3J0IGNsb3NlSWNvbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2ljb25zL2Nsb3NlLnN2Z1wiO1xuaW1wb3J0IGxvZ291dEljb24gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2Fzc2V0cy9pY29ucy9sb2dvdXQuc3ZnXCI7XG5pbXBvcnQgc3Bpbm5lckNpcmNsZUljb24gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL2Fzc2V0cy9pY29ucy9zcGlubmVyLWNpcmNsZS5zdmdcIjtcbmltcG9ydCB7IEFQUExJQ0FUSU9OU19USUVSX1dJRFRILCBBcHBQYXRocyB9IGZyb20gXCIuLi8uLi8uLi8uLi9jb25zdGFudHNcIjtcbmltcG9ydCB7IHVzZU1hbmFnZVN1YnNjcmlwdGlvbiB9IGZyb20gXCIuLi8uLi8uLi8uLi9ob29rcy91c2VNYW5hZ2VTdWJzY3JpcHRpb25cIjtcbmltcG9ydCB7IHVzZVNlbGVjdGVkVGVuYW50IH0gZnJvbSBcIi4uLy4uLy4uLy4uL2hvb2tzL3VzZVNlbGVjdGVkVGVuYW50XCI7XG5pbXBvcnQgeyB1c2VOYXZpZ2F0aW9uQ29udGV4dCB9IGZyb20gXCIuLi8uLi9Db250ZXh0XCI7XG5pbXBvcnQgTG9nbyBmcm9tIFwiLi4vLi4vTG9nb1wiO1xuaW1wb3J0IFRpZXIgZnJvbSBcIi4uL1RpZXJcIjtcbmltcG9ydCBBcHBsaWNhdGlvbkxpbmsgZnJvbSBcIi4vQXBwbGljYXRpb25MaW5rXCI7XG5pbXBvcnQgY3NzIGZyb20gXCIuL0FwcGxpY2F0aW9ucy5tb2R1bGUuY3NzXCI7XG5cbmNvbnN0IGRlbGF5ID0gKHRpbWU6IG51bWJlcikgPT4gbmV3IFByb21pc2UoKG9rKSA9PiBzZXRUaW1lb3V0KG9rLCB0aW1lKSk7XG5cbmZ1bmN0aW9uIEFwcGxpY2F0aW9ucygpIHtcbiAgY29uc3QgeyB1c2VyIH0gPSB1c2VDb250ZXh0KEF1dGhDb250ZXh0KTtcblxuICBjb25zdCB7XG4gICAgc2lnbk91dCxcbiAgICBvbk5hdmlnYXRpb25DbG9zZSxcbiAgICB0b2dnbGVUZW5hbnRzLFxuICAgIGhhc1Nob3dyb29tQWNjZXNzLFxuICAgIGhhc01hcmtldGluZ0VuZ2luZUFjY2VzcyxcbiAgICBoYXNTZW5kb3V0c0FjY2VzcyxcbiAgICBoYXNDbXNBY2Nlc3MsXG4gICAgaGFzVXNlck1hbmFnZW1lbnRBY2Nlc3MsXG4gICAgaGFzU2V0dGluZ3NBY2Nlc3MsXG4gICAgaGFzVW5pdmVyc2FsQWNjZXNzLFxuICAgIGhhc0luc3RvcmVBY2Nlc3MsXG4gICAgdmlld1N0YXRlLFxuICB9ID0gdXNlTmF2aWdhdGlvbkNvbnRleHQoKTtcblxuICBjb25zdCBzZWxlY3RlZFRlbmFudCA9IHVzZVNlbGVjdGVkVGVuYW50KCk7XG5cbiAgY29uc3QgdGVuYW50SGFzU3Vic2NyaXB0aW9uUGxhbiA9XG4gICAgc2VsZWN0ZWRUZW5hbnQgJiYgQm9vbGVhbihzZWxlY3RlZFRlbmFudC5wbGFuTmFtZSk7XG5cbiAgY29uc3QgW3N1YnNjcmlwdGlvbkVycm9yU3RhdGUsIHNldFN1YnNjcmlwdGlvbkVycm9yU3RhdGVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc3Vic2NyaXB0aW9uU2Vzc2lvblBlbmRpbmcsIHNldFN1YnNjcmlwdGlvblNlc3Npb25QZW5kaW5nXSA9XG4gICAgdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IG1hbmFnZVN1YnNjcmlwdGlvbiA9IHVzZU1hbmFnZVN1YnNjcmlwdGlvbigpO1xuXG4gIGNvbnN0IGNyZWF0ZVNlc3Npb24gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAoc2V0U2VsZWN0ZWRUZW5hbnRBc0N1cnJlbnQ6IChmbGFnOiBib29sZWFuKSA9PiB2b2lkKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBzZXRTdWJzY3JpcHRpb25TZXNzaW9uUGVuZGluZyh0cnVlKTtcbiAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IG1hbmFnZVN1YnNjcmlwdGlvbih3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpO1xuICAgICAgICBzZXRTZWxlY3RlZFRlbmFudEFzQ3VycmVudCh0cnVlKTtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLmFzc2lnbihkYXRhLnRleHQpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHNldFN1YnNjcmlwdGlvblNlc3Npb25QZW5kaW5nKGZhbHNlKTtcbiAgICAgICAgc2V0U3Vic2NyaXB0aW9uRXJyb3JTdGF0ZSh0cnVlKTtcbiAgICAgICAgYXdhaXQgZGVsYXkoMjUwMCk7XG4gICAgICAgIHNldFN1YnNjcmlwdGlvbkVycm9yU3RhdGUoZmFsc2UpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW1xuICAgICAgdmlld1N0YXRlLnNlbGVjdGVkVGVuYW50SWQsXG4gICAgICBzZXRTdWJzY3JpcHRpb25TZXNzaW9uUGVuZGluZyxcbiAgICAgIG1hbmFnZVN1YnNjcmlwdGlvbixcbiAgICBdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8VGllclxuICAgICAgY2xhc3NOYW1lPXtjc3MuYXBwbGljYXRpb25zfVxuICAgICAgd2lkdGg9e0FQUExJQ0FUSU9OU19USUVSX1dJRFRIfVxuICAgICAgc2hvd0hlYWRlckJvcmRlclxuICAgICAgaGVhZGVyPXtcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5hcHBsaWNhdGlvbnNIZWFkZXJ9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuYXBwbGljYXRpb25zSGVhZGVyQnJhbmR9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5hcHBsaWNhdGlvbnNIZWFkZXJMb2dvfT5cbiAgICAgICAgICAgICAgPExvZ28gLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nzcy5hcHBsaWNhdGlvbnNIZWFkZXJDbG9zZUljb259XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e29uTmF2aWdhdGlvbkNsb3NlfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SWNvbiBzcmM9e2Nsb3NlSWNvbn0gc2l6ZT1cImxhcmdlXCIgLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGFsaWduPVwibGVmdFwiXG4gICAgICAgICAgICBub0JvcmRlclxuICAgICAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc0hlYWRlckNoYW5nZUJyYW5kQnV0dG9ufVxuICAgICAgICAgICAgb25DbGljaz17dG9nZ2xlVGVuYW50c31cbiAgICAgICAgICA+XG4gICAgICAgICAgICBDaGFuZ2UgYnJhbmRcbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgICBmb290ZXI9e1xuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc0Zvb3Rlcn0gb25DbGljaz17c2lnbk91dH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5hcHBsaWNhdGlvbnNGb290ZXJTaWduT3V0fT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuYXBwbGljYXRpb25zRm9vdGVyU2lnbk91dEljb259PlxuICAgICAgICAgICAgICA8SWNvbiBzcmM9e2xvZ291dEljb259IHNpemU9XCJtZWRpdW1cIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc0Zvb3RlclNpZ25PdXRMYWJlbH0+U2lnbiBvdXQ8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICB9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5hcHBsaWNhdGlvbnNNYWlufT5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5hcHBsaWNhdGlvbnNNYWluQ29udGVudH0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5hcHBsaWNhdGlvbnNNYWluTGlzdH0+XG4gICAgICAgICAgICA8QXBwbGljYXRpb25MaW5rIHRvPXtBcHBQYXRocy5EQVNIQk9BUkR9PkRhc2hib2FyZDwvQXBwbGljYXRpb25MaW5rPlxuICAgICAgICAgICAgPEFwcGxpY2F0aW9uTGluayBoaWRkZW49eyFoYXNTaG93cm9vbUFjY2Vzc30gdG89e0FwcFBhdGhzLlNIT1dST09NfT5cbiAgICAgICAgICAgICAgUHJlc2VudGF0aW9ucyAoU2hvd3Jvb20pXG4gICAgICAgICAgICA8L0FwcGxpY2F0aW9uTGluaz5cbiAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxpbmsgaGlkZGVuPXshaGFzU2VuZG91dHNBY2Nlc3N9IHRvPXtBcHBQYXRocy5TRU5ET1VUU30+XG4gICAgICAgICAgICAgIFNlbmRvdXRzXG4gICAgICAgICAgICA8L0FwcGxpY2F0aW9uTGluaz5cbiAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxpbmtcbiAgICAgICAgICAgICAgaGlkZGVuPXshaGFzTWFya2V0aW5nRW5naW5lQWNjZXNzfVxuICAgICAgICAgICAgICB0bz17QXBwUGF0aHMuTUFSS0VUSU5HX0VOR0lORX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgTWVkaWEgTGlicmFyeVxuICAgICAgICAgICAgPC9BcHBsaWNhdGlvbkxpbms+XG4gICAgICAgICAgICA8QXBwbGljYXRpb25MaW5rXG4gICAgICAgICAgICAgIGhpZGRlbj17IWhhc0luc3RvcmVBY2Nlc3MgfHwgIWhhc1VuaXZlcnNhbEFjY2Vzc31cbiAgICAgICAgICAgICAgdG89e0FwcFBhdGhzLklOU1RPUkV9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFN0b3JlXG4gICAgICAgICAgICA8L0FwcGxpY2F0aW9uTGluaz5cbiAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxpbmsgaGlkZGVuPXshaGFzQ21zQWNjZXNzfSB0bz17QXBwUGF0aHMuQ01TfT5cbiAgICAgICAgICAgICAgQ29udGVudCBNYW5hZ2VyXG4gICAgICAgICAgICA8L0FwcGxpY2F0aW9uTGluaz5cbiAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxpbmtcbiAgICAgICAgICAgICAgaGlkZGVuPXshaGFzVXNlck1hbmFnZW1lbnRBY2Nlc3N9XG4gICAgICAgICAgICAgIHRvPXtBcHBQYXRocy5VU0VSX01BTkFHRU1FTlR9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFVzZXJzXG4gICAgICAgICAgICA8L0FwcGxpY2F0aW9uTGluaz5cbiAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxpbmtcbiAgICAgICAgICAgICAgaGlkZGVuPXshaGFzVW5pdmVyc2FsQWNjZXNzICYmICFoYXNTZXR0aW5nc0FjY2Vzc31cbiAgICAgICAgICAgICAgdG89e0FwcFBhdGhzLlNFVFRJTkdTfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBTZXR0aW5nc1xuICAgICAgICAgICAgPC9BcHBsaWNhdGlvbkxpbms+XG5cbiAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxpbmtcbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3N1YnNjcmlwdGlvblNlc3Npb25QZW5kaW5nfVxuICAgICAgICAgICAgICBvbkNsaWNrPXtjcmVhdGVTZXNzaW9ufVxuICAgICAgICAgICAgICBoaWRkZW49eyFoYXNVbml2ZXJzYWxBY2Nlc3MgfHwgIXRlbmFudEhhc1N1YnNjcmlwdGlvblBsYW59XG4gICAgICAgICAgICAgIHRvPXtcIiNcIn1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KHtcbiAgICAgICAgICAgICAgICAgIFtjc3MuZXJyb3JBbmltXTogc3Vic2NyaXB0aW9uRXJyb3JTdGF0ZSxcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFN1YnNjcmlwdGlvblxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIHtzdWJzY3JpcHRpb25TZXNzaW9uUGVuZGluZyA/IChcbiAgICAgICAgICAgICAgICA8SWNvbiBzaXplPVwieGxhcmdlXCIgc3JjPXtzcGlubmVyQ2lyY2xlSWNvbn0gYWx0PVwiTG9hZGluZ1wiIC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgXCJcIlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9BcHBsaWNhdGlvbkxpbms+XG4gICAgICAgICAgICB7c3Vic2NyaXB0aW9uRXJyb3JTdGF0ZSA/IChcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPXtjc3MuZXJyb3JUZXh0fT5cbiAgICAgICAgICAgICAgICBVbmFibGUgdG8gYWNjZXNzIHN1YnNjcmlwdGlvbiBwYWdlXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHt1c2VyICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuYXBwbGljYXRpb25zTWFpblVzZXJ9PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc01haW5Vc2VyTmFtZX0+XG4gICAgICAgICAgICAgICAge3VzZXIuZmlyc3ROYW1lfSB7dXNlci5sYXN0TmFtZX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuYXBwbGljYXRpb25zTWFpblVzZXJFbWFpbH0+e3VzZXIuZW1haWx9PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvVGllcj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQXBwbGljYXRpb25zO1xuIiwiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyB1c2VOYXZpZ2F0aW9uQ29udGV4dCB9IGZyb20gXCIuLi9jb21wb25lbnRzL05hdmlnYXRpb24vQ29udGV4dFwiO1xuaW1wb3J0IHVzZVRlbmFudHMgZnJvbSBcIi4vdXNlVGVuYW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlU2VsZWN0ZWRUZW5hbnQoKSB7XG4gIGNvbnN0IHtcbiAgICB2aWV3U3RhdGU6IHsgc2VsZWN0ZWRUZW5hbnRJZCB9LFxuICB9ID0gdXNlTmF2aWdhdGlvbkNvbnRleHQoKTtcbiAgY29uc3QgeyB0ZW5hbnRzIH0gPSB1c2VUZW5hbnRzKCk7XG5cbiAgY29uc3QgdGVuYW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHRlbmFudHMuZmluZCgodCkgPT4gdC5pZCA9PT0gc2VsZWN0ZWRUZW5hbnRJZCk7XG4gIH0sIFt0ZW5hbnRzLCBzZWxlY3RlZFRlbmFudElkXSk7XG5cbiAgcmV0dXJuIHRlbmFudDtcbn1cbiIsImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEpzb25Cb2R5LCBjcmVhdGVVcmwsIHVzZUFwaSB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1hcGktY2xpZW50XCI7XG5pbXBvcnQgeyBUZW5hbnRJZENvbnRleHQgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItdGVuYW50LWlkLXByb3ZpZGVyXCI7XG5cbmltcG9ydCB7IHVzZU5hdmlnYXRpb25Db250ZXh0IH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9Db250ZXh0XCI7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTdWJzY3JpcHRpb25NYW5hZ2VtZW50U2Vzc2lvblVybCA9ICgpID0+IHtcbiAgY29uc3QgYmFzZVVybCA9XG4gICAgcHJvY2Vzcy5lbnYuVEVOQU5UU19TRVJWSUNFX1VSTCA/P1xuICAgIHByb2Nlc3MuZW52LlJFQUNUX0FQUF9URU5BTlRTX1NFUlZJQ0VfVVJMO1xuXG4gIGlmICghYmFzZVVybCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiVEVOQU5UU19TRVJWSUNFX1VSTCBvciBSRUFDVF9BUFBfVEVOQU5UU19TRVJWSUNFX1VSTCBtdXN0IGJlIHNldFwiXG4gICAgKTtcbiAgfVxuICByZXR1cm4gY3JlYXRlVXJsKFxuICAgIGJhc2VVcmwsXG4gICAgXCIvYXBpL1N1YnNjcmlwdGlvbnMvY3JlYXRlLWN1c3RvbWVyLXBvcnRhbC1zZXNzaW9uXCJcbiAgKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VNYW5hZ2VTdWJzY3JpcHRpb24oKSB7XG4gIGNvbnN0IGFwaSA9IHVzZUFwaSgpO1xuICBjb25zdCB1cmwgPSBjcmVhdGVTdWJzY3JpcHRpb25NYW5hZ2VtZW50U2Vzc2lvblVybCgpO1xuICBjb25zdCB7IHZpZXdTdGF0ZSB9ID0gdXNlTmF2aWdhdGlvbkNvbnRleHQoKTtcblxuICBjb25zdCBbdGVuYW50SWRdID0gdXNlQ29udGV4dChUZW5hbnRJZENvbnRleHQpO1xuXG4gIGNvbnN0IGNyZWF0ZVN1YnNjcmlwdGlvblBvcnRhbFNlc3Npb24gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocmV0dXJuVXJsOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHJldHVyblVybE5vcm1hbGl6ZWQgPSByZXR1cm5VcmwucmVwbGFjZSgvXlxcLy8sIFwiXCIpO1xuICAgICAgYXBpLnNldEhlYWRlcihcInRlbmFudC1pZFwiLCB2aWV3U3RhdGUuc2VsZWN0ZWRUZW5hbnRJZCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwID0gKGF3YWl0IGFwaS5wb3N0KFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICByZXR1cm5VcmxOb3JtYWxpemVkIGFzIHVua25vd24gYXMgSnNvbkJvZHlcbiAgICAgICAgKSkgYXMgUHJvbWlzZTx7XG4gICAgICAgICAgdGV4dDogc3RyaW5nO1xuICAgICAgICB9PjtcbiAgICAgICAgcmV0dXJuIHJlc3A7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAodGVuYW50SWQpIHtcbiAgICAgICAgICBhcGkuc2V0SGVhZGVyKFwidGVuYW50LWlkXCIsIHRlbmFudElkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBbYXBpLCB1cmwsIHZpZXdTdGF0ZV1cbiAgKTtcbiAgcmV0dXJuIGNyZWF0ZVN1YnNjcmlwdGlvblBvcnRhbFNlc3Npb247XG59XG4iLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzIwJyBoZWlnaHQ9JzIwJyB2aWV3Qm94PScwIDAgMjAgMjAnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMC4zOTg0MzggMC4zOTk5MDJMMTkuNTk4NCAxOS41OTk5TTAuMzk4NDM4IDE5LjU5OTlMMTkuNTk4NCAwLjM5OTkwMicgc3Ryb2tlPSdibGFjaycvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTQnIGhlaWdodD0nMTUnIHZpZXdCb3g9JzAgMCAxNCAxNScgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J003IDEuNTk5OUwxMC40NjY3IDQuNzk5OU03IDEuNTk5OUwzLjggNC43OTk5TTcgMS41OTk5TDcgMTEuNzMzMk0xMy40IDcuNDY2NTdMMTMuNCAxNC4zOTk5TDAuNjAwMDAyIDE0LjM5OTlMMC42MDAwMDIgNy40NjY1Nycgc3Ryb2tlPSclMjMyRDJEMzMnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2MlM2Z4bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnIHN0YW5kYWxvbmU9J25vJyUzZiUzZSAlM2MhRE9DVFlQRSBzdmcgUFVCTElDICctLy9XM0MvL0RURCBTVkcgMS4xLy9FTicgJ2h0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCclM2UgJTNjc3ZnIHdpZHRoPScxMDAlMjUnIGhlaWdodD0nMTAwJTI1JyB2aWV3Qm94PScwIDAgNDYgNDYnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgeG1sOnNwYWNlPSdwcmVzZXJ2ZScgeG1sbnM6c2VyaWY9J2h0dHA6Ly93d3cuc2VyaWYuY29tLycgc3R5bGU9J2ZpbGwtcnVsZTpldmVub2RkJTNiY2xpcC1ydWxlOmV2ZW5vZGQlM2JzdHJva2UtbGluZWpvaW46cm91bmQlM2JzdHJva2UtbWl0ZXJsaW1pdDoyJTNiJyUzZSAlM2NnIHRyYW5zZm9ybT0nbWF0cml4KDElMmMwJTJjMCUyYzElMmMtMjclMmMtMjcpJyUzZSAlM2NwYXRoIGQ9J003MyUyYzUwQzczJTJjMzcuMyA2Mi43JTJjMjcgNTAlMmMyN0MzNy4zJTJjMjcgMjclMmMzNy4zIDI3JTJjNTBNMzAuOSUyYzUwQzMwLjklMmMzOS41IDM5LjQlMmMzMC45IDUwJTJjMzAuOUM2MC42JTJjMzAuOSA2OS4xJTJjMzkuNSA2OS4xJTJjNTAnIHN0eWxlPSdmaWxsLXJ1bGU6bm9uemVybyUzYiclM2UgJTNjYW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSd0cmFuc2Zvcm0nIGF0dHJpYnV0ZVR5cGU9J1hNTCcgdHlwZT0ncm90YXRlJyBkdXI9JzFzJyBmcm9tPScwIDUwIDUwJyB0bz0nMzYwIDUwIDUwJyByZXBlYXRDb3VudD0naW5kZWZpbml0ZScgLyUzZSAlM2MvcGF0aCUzZSAlM2MvZyUzZSAlM2Mvc3ZnJTNlXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRlbmFudEJ1dHRvblwiOlwib2V1V01NY0p2THpHVnl6bGt6cmlcIixcImFjdGl2ZVwiOlwiYmJVSHdYZG1UbUx4MUJtMTRBdG5cIixcInRlbmFudEJ1dHRvbkljb25cIjpcIklyU1V0U3lKX3lIVTA2cDVZMUozXCJ9OyIsImltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIkB0b3VjaHRlY2gvYmFzZWxheWVyLXVpXCI7XG5cbmltcG9ydCB7IFRlbmFudCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ob29rcy91c2VUZW5hbnRzXCI7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uUG9zaXRpb24sIHVzZU5hdmlnYXRpb25Db250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRleHRcIjtcbmltcG9ydCBjc3MgZnJvbSBcIi4vVGVuYW50QnV0dG9uLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgdGVuYW50OiBUZW5hbnQ7XG59O1xuXG5mdW5jdGlvbiBUZW5hbnRCdXR0b24oeyB0ZW5hbnQgfTogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIHZpZXdTdGF0ZTogeyBzZWxlY3RlZFRlbmFudElkIH0sXG4gICAgdXBkYXRlVmlld1N0YXRlLFxuICB9ID0gdXNlTmF2aWdhdGlvbkNvbnRleHQoKTtcblxuICBjb25zdCBpc0FjdGl2ZSA9IHNlbGVjdGVkVGVuYW50SWQgPT09IHRlbmFudC5pZDtcblxuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIGtleT17dGVuYW50LmlkfVxuICAgICAgYWxpZ249XCJsZWZ0XCJcbiAgICAgIG5vQm9yZGVyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtjc3MudGVuYW50QnV0dG9uLCB7IFtjc3MuYWN0aXZlXTogaXNBY3RpdmUgfV0pfVxuICAgICAgbm9TaGFkb3dcbiAgICAgIGRpc2FibGVkPXtpc0FjdGl2ZX1cbiAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgdXBkYXRlVmlld1N0YXRlKHtcbiAgICAgICAgICBzZWxlY3RlZFRlbmFudElkOiB0ZW5hbnQuaWQsXG4gICAgICAgICAgY3VycmVudFBvc2l0aW9uOiBOYXZpZ2F0aW9uUG9zaXRpb24uT1BFTixcbiAgICAgICAgfSk7XG4gICAgICB9fVxuICAgID5cbiAgICAgIHt0ZW5hbnQubGFiZWx9XG4gICAgPC9CdXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRlbmFudEJ1dHRvbjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widGVuYW50c1wiOlwiVEltQ3NobmpiN1VQVmsyUjRsWlBcIixcInRlbmFudHNIZWFkZXJcIjpcIlBMT1d6REdOR1h6TEFKckgwUkszXCIsXCJ0ZW5hbnRzSGVhZGVyQXJyb3dJY29uXCI6XCJ4ZEVPX3pJWlo0dEZyZmFwa0ZGVFwiLFwidGVuYW50c01haW5cIjpcIkFzMTJ2eW5UUWtfamtuUUlsSjhBXCIsXCJ0ZW5hbnRzRm9vdGVyXCI6XCJxMndzN2F4TDVBcDFoUVczbTE2TlwiLFwidGVuYW50c0Zvb3RlckNyZWF0ZUJyYW5kXCI6XCJ6WWt6TnVOUWh2SWRXS1pob1FHclwiLFwidGVuYW50c0Zvb3RlckNyZWF0ZUJyYW5kSWNvblwiOlwieHhjdTZ5dFhSY1BsMUdaSjJ2ZDlcIixcInRlbmFudHNGb290ZXJDcmVhdGVCcmFuZExhYmVsXCI6XCJRWWhjdlpxYlp4Z2VuRzQxa3dOcVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCJAdG91Y2h0ZWNoL2Jhc2VsYXllci11aVwiO1xuXG5pbXBvcnQgYWRkSWNvbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2ljb25zL2FkZC5zdmdcIjtcbmltcG9ydCBhcnJvd0xlZnRJY29uIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hc3NldHMvaWNvbnMvYXJyb3ctbGVmdC5zdmdcIjtcbmltcG9ydCB7IEFwcFBhdGhzLCBURU5BTlRTX1RJRVJfV0lEVEggfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgdXNlVGVuYW50cyBmcm9tIFwiLi4vLi4vLi4vLi4vaG9va3MvdXNlVGVuYW50c1wiO1xuaW1wb3J0IHsgdXNlTmF2aWdhdGlvbkNvbnRleHQgfSBmcm9tIFwiLi4vLi4vQ29udGV4dFwiO1xuaW1wb3J0IFRpZXIgZnJvbSBcIi4uL1RpZXJcIjtcbmltcG9ydCBUZW5hbnRCdXR0b24gZnJvbSBcIi4vVGVuYW50QnV0dG9uXCI7XG5pbXBvcnQgY3NzIGZyb20gXCIuL1RlbmFudHMubW9kdWxlLmNzc1wiO1xuXG5mdW5jdGlvbiBUZW5hbnRzKCkge1xuICBjb25zdCB7IHRvZ2dsZVRlbmFudHMgfSA9IHVzZU5hdmlnYXRpb25Db250ZXh0KCk7XG5cbiAgY29uc3QgeyB0ZW5hbnRzIH0gPSB1c2VUZW5hbnRzKCk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLnRlbmFudHN9PlxuICAgICAgPFRpZXJcbiAgICAgICAgd2lkdGg9e1RFTkFOVFNfVElFUl9XSURUSH1cbiAgICAgICAgaGVhZGVyPXtcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLnRlbmFudHNIZWFkZXJ9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy50ZW5hbnRzSGVhZGVyQXJyb3dJY29ufSBvbkNsaWNrPXt0b2dnbGVUZW5hbnRzfT5cbiAgICAgICAgICAgICAgPEljb24gc3JjPXthcnJvd0xlZnRJY29ufSBzaXplPVwibGFyZ2VcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgZm9vdGVyPXtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Nzcy50ZW5hbnRzRm9vdGVyfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gd2luZG93LmxvY2F0aW9uLmFzc2lnbihBcHBQYXRocy5DUkVBVEVfV09SS1NQQUNFKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLnRlbmFudHNGb290ZXJDcmVhdGVCcmFuZH0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MudGVuYW50c0Zvb3RlckNyZWF0ZUJyYW5kSWNvbn0+XG4gICAgICAgICAgICAgICAgPEljb24gc3JjPXthZGRJY29ufSBzaXplPVwibWVkaXVtXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MudGVuYW50c0Zvb3RlckNyZWF0ZUJyYW5kTGFiZWx9PlxuICAgICAgICAgICAgICAgIENyZWF0ZSBhIGJyYW5kIHdvcmtzcGFjZVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MudGVuYW50c01haW59PlxuICAgICAgICAgIHt0ZW5hbnRzLm1hcCgodGVuYW50KSA9PiAoXG4gICAgICAgICAgICA8VGVuYW50QnV0dG9uIHRlbmFudD17dGVuYW50fSBrZXk9e3RlbmFudC5pZH0gLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1RpZXI+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRlbmFudHM7XG4iLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzIyJyBoZWlnaHQ9JzE0JyB2aWV3Qm94PScwIDAgMjIgMTQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMS42MDAxIDcuMDAwMzlMOC4wMDAxIDEzLjQwMDRNMS42MDAxIDcuMDAwMzlMOC4wMDAxIDAuNjAwMzkxTTEuNjAwMSA3LjAwMDM5TDIxLjYwMDEgNy4wMDAzOScgc3Ryb2tlPSclMjMyNjI2MjYnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE0JyBoZWlnaHQ9JzE0JyB2aWV3Qm94PScwIDAgMTQgMTQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMC4wMDE3MDkwNiA3TDEzLjAwMTcgN002LjUwMTcxIDEzLjVMNi41MDE3MSAwLjUnIHN0cm9rZT0nJTIzMkQyRDMzJy8lM2UgJTNjL3N2ZyUzZVwiIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0aWVyc1wiOlwieDRDY25LUDBoc01wZjhhVFYxdmNcIn07IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgQXBwbGljYXRpb25zIGZyb20gXCIuL0FwcGxpY2F0aW9uc1wiO1xuaW1wb3J0IFRlbmFudHMgZnJvbSBcIi4vVGVuYW50c1wiO1xuaW1wb3J0IGNzcyBmcm9tIFwiLi9UaWVycy5tb2R1bGUuY3NzXCI7XG5cbmZ1bmN0aW9uIFRpZXJzKCkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MudGllcnN9PlxuICAgICAgPEFwcGxpY2F0aW9ucyAvPlxuICAgICAgPFRlbmFudHMgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGllcnM7XG4iLCJpbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIFRyYW5zaXRpb24sIFZhcmlhbnQsIG1vdGlvbiB9IGZyb20gXCJmcmFtZXItbW90aW9uXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmltcG9ydCB7IEFQUExJQ0FUSU9OU19USUVSX1dJRFRILCBURU5BTlRTX1RJRVJfV0lEVEggfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQge1xuICBOYXZpZ2F0aW9uQ29udGV4dCxcbiAgTmF2aWdhdGlvbkNvbnRleHRQcm92aWRlcixcbiAgTmF2aWdhdGlvblBvc2l0aW9uLFxufSBmcm9tIFwiLi9Db250ZXh0XCI7XG5pbXBvcnQgY3NzIGZyb20gXCIuL05hdmlnYXRpb24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IFRpZXJzIGZyb20gXCIuL1RpZXJzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgcG9ydGFsQ29udGFpbmVyPzogRWxlbWVudCB8IERvY3VtZW50RnJhZ21lbnQ7XG4gIG9uQ2xvc2U6ICgpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBFWFBBTkRFRF9OQVZJR0FUSU9OX1dJRFRIID0gQVBQTElDQVRJT05TX1RJRVJfV0lEVEggKyBURU5BTlRTX1RJRVJfV0lEVEg7XG5cbmNvbnN0IEFOSU1BVElPTl9UUkFOU0lUSU9OOiBUcmFuc2l0aW9uID0geyBlYXNlOiBcImVhc2VPdXRcIiwgZHVyYXRpb246IDAuMyB9O1xuY29uc3QgQU5JTUFUSU9OX1ZBUklBTlRTOiBSZWNvcmQ8TmF2aWdhdGlvblBvc2l0aW9uLCBWYXJpYW50PiA9IHtcbiAgW05hdmlnYXRpb25Qb3NpdGlvbi5ISURERU5dOiB7XG4gICAgbGVmdDogLUVYUEFOREVEX05BVklHQVRJT05fV0lEVEgsXG4gICAgdHJhbnNpdGlvbjogQU5JTUFUSU9OX1RSQU5TSVRJT04sXG4gIH0sXG4gIFtOYXZpZ2F0aW9uUG9zaXRpb24uT1BFTl06IHtcbiAgICBsZWZ0OiAtQVBQTElDQVRJT05TX1RJRVJfV0lEVEgsXG4gICAgdHJhbnNpdGlvbjogQU5JTUFUSU9OX1RSQU5TSVRJT04sXG4gIH0sXG4gIFtOYXZpZ2F0aW9uUG9zaXRpb24uRVhQQU5ERURdOiB7IGxlZnQ6IDAsIHRyYW5zaXRpb246IEFOSU1BVElPTl9UUkFOU0lUSU9OIH0sXG59O1xuXG5mdW5jdGlvbiBOYXZpZ2F0aW9uKHtcbiAgaXNPcGVuLFxuICBwb3J0YWxDb250YWluZXIgPSBkb2N1bWVudC5ib2R5LFxuICBvbkNsb3NlLFxufTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICAvLyBVc2luZyBmcmFtZXItbW90aW9uIGxpYiB0byBhbmltYXRlIHRoZSBuYXZpZ2F0aW9uIGNvbXBvbmVudCBvbiBtb3VudC91bm1vdW50XG4gICAgLy8gQWxzbyB0byBwcmV2ZW50IGFueSBhcGkgY2FsbHMgZnJvbSBiZWluZyBtYWRlIHdoZW4gdGhlIG5hdmlnYXRpb24gKFRpZXJzIGNvbXBvbmVudCkgaXMgaGlkZGVuXG4gICAgPE5hdmlnYXRpb25Db250ZXh0UHJvdmlkZXIgb25OYXZpZ2F0aW9uQ2xvc2U9e29uQ2xvc2V9IGlzT3Blbj17aXNPcGVufT5cbiAgICAgIDxOYXZpZ2F0aW9uQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgeyh7IHZpZXdTdGF0ZTogeyBjdXJyZW50UG9zaXRpb24gfSB9KSA9PlxuICAgICAgICAgIGNyZWF0ZVBvcnRhbChcbiAgICAgICAgICAgIDxBbmltYXRlUHJlc2VuY2U+XG4gICAgICAgICAgICAgIHtjdXJyZW50UG9zaXRpb24gIT09IE5hdmlnYXRpb25Qb3NpdGlvbi5ISURERU4gJiYgKFxuICAgICAgICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nzcy5uYXZpZ2F0aW9ufVxuICAgICAgICAgICAgICAgICAgaW5pdGlhbD17TmF2aWdhdGlvblBvc2l0aW9uLkhJRERFTn1cbiAgICAgICAgICAgICAgICAgIHZhcmlhbnRzPXtBTklNQVRJT05fVkFSSUFOVFN9XG4gICAgICAgICAgICAgICAgICBhbmltYXRlPXtjdXJyZW50UG9zaXRpb259XG4gICAgICAgICAgICAgICAgICBleGl0PXtOYXZpZ2F0aW9uUG9zaXRpb24uSElEREVOfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxUaWVycyAvPlxuICAgICAgICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPixcbiAgICAgICAgICAgIHBvcnRhbENvbnRhaW5lclxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgPC9OYXZpZ2F0aW9uQ29udGV4dC5Db25zdW1lcj5cbiAgICA8L05hdmlnYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5hdmlnYXRpb247XG4iLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE0JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTQgMTEnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMCAxLjVIMTRNMCA1LjVIMTRNMCA5LjVIMTRNMCcgc3Ryb2tlPSdibGFjaycvJTNlICUzYy9zdmclM2VcIiIsImltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSBcIkB0b3VjaHRlY2gvYmFzZWxheWVyLXVpXCI7XG5pbXBvcnQgeyB1c2VUb2dnbGUgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItaG9va3NcIjtcblxuaW1wb3J0IG1lbnVJY29uIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvaWNvbnMvbWVudS5zdmdcIjtcbmltcG9ydCBOYXZpZ2F0aW9uIGZyb20gXCIuL05hdmlnYXRpb25cIjtcblxudHlwZSBJY29uQnV0dG9uUHJvcHMgPSBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgSWNvbkJ1dHRvbj47XG50eXBlIFByb3BzID0gUGFydGlhbDxJY29uQnV0dG9uUHJvcHM+ICYge1xuICBwb3J0YWxDb250YWluZXI/OiBFbGVtZW50IHwgRG9jdW1lbnRGcmFnbWVudDtcbn07XG5cbmZ1bmN0aW9uIE5hdmlnYXRpb25CdXR0b24oe1xuICBzaXplID0gXCJtZWRpdW1cIixcbiAgYWx0ID0gXCJUb2dnbGUgbmF2aWdhdGlvbiBtZW51XCIsXG4gIHNyYyA9IG1lbnVJY29uLFxuICBwb3J0YWxDb250YWluZXIgPSBkb2N1bWVudC5ib2R5LFxuICAuLi5wcm9wc1xufTogUHJvcHMpIHtcbiAgY29uc3QgW2lzTmF2aWdhdGlvbk9wZW4sIHRvZ2dsZUlzTmF2aWdhdGlvbk9wZW5dID0gdXNlVG9nZ2xlKGZhbHNlKTtcblxuICByZXR1cm4gKFxuICAgIDxGcmFnbWVudD5cbiAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIGFsdD17YWx0fVxuICAgICAgICBzcmM9e3NyY31cbiAgICAgICAgb25DbGljaz17KCkgPT4gdG9nZ2xlSXNOYXZpZ2F0aW9uT3BlbigpfVxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAvPlxuICAgICAgPE5hdmlnYXRpb25cbiAgICAgICAgaXNPcGVuPXtpc05hdmlnYXRpb25PcGVufVxuICAgICAgICBwb3J0YWxDb250YWluZXI9e3BvcnRhbENvbnRhaW5lcn1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gdG9nZ2xlSXNOYXZpZ2F0aW9uT3BlbigpfVxuICAgICAgLz5cbiAgICA8L0ZyYWdtZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBOYXZpZ2F0aW9uQnV0dG9uO1xuIiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRvZ2dsZShpbml0aWFsVmFsdWUpIHtcbiAgICBpZiAoaW5pdGlhbFZhbHVlID09PSB2b2lkIDApIHsgaW5pdGlhbFZhbHVlID0gZmFsc2U7IH1cbiAgICB2YXIgX2EgPSBfX3JlYWQodXNlU3RhdGUoaW5pdGlhbFZhbHVlKSwgMiksIHZhbHVlID0gX2FbMF0sIHNldFZhbHVlID0gX2FbMV07XG4gICAgdmFyIHRvZ2dsZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIG5ld1ZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0VmFsdWUoZnVuY3Rpb24gKHByZXZWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhcHJldlZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIFt2YWx1ZSwgdG9nZ2xlXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVRvZ2dsZS5qcy5tYXAiXSwibmFtZXMiOlsiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZSIsImdldHRlciIsIl9fZXNNb2R1bGUiLCJkIiwiYSIsImV4cG9ydHMiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsIm9iaiIsInByb3AiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwiZXh0ZW5kU3RhdGljcyIsImIiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIkFycmF5IiwicCIsIl9fZXh0ZW5kcyIsIlR5cGVFcnJvciIsIlN0cmluZyIsIl9fIiwidGhpcyIsImNvbnN0cnVjdG9yIiwiY3JlYXRlIiwiX19hc3NpZ24iLCJhc3NpZ24iLCJ0IiwicyIsImkiLCJuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXBwbHkiLCJfX3Jlc3QiLCJlIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJtIiwiaXRlcmF0b3IiLCJyIiwiYXIiLCJwdXNoIiwiZXJyb3IiLCJ0byIsImZyb20iLCJwYWNrIiwibCIsInNsaWNlIiwiY29uY2F0IiwicmVxdWlyZSIsImVudiIsInByb2Nlc3MiLCJkZWZhdWx0VGltZXN0ZXAiLCJnZXRDdXJyZW50VGltZSIsInBlcmZvcm1hbmNlIiwibm93IiwiRGF0ZSIsIm9uTmV4dEZyYW1lIiwid2luZG93IiwiY2FsbGJhY2siLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzZXRUaW1lb3V0IiwidXNlRGVmYXVsdEVsYXBzZWQiLCJydW5OZXh0RnJhbWUiLCJpc1Byb2Nlc3NpbmciLCJkZWx0YSIsInRpbWVzdGFtcCIsInN0ZXBzT3JkZXIiLCJzdGVwcyIsInJlZHVjZSIsImFjYyIsInRvUnVuIiwidG9SdW5OZXh0RnJhbWUiLCJudW1Ub1J1biIsImZsdXNoTmV4dEZyYW1lIiwidG9LZWVwQWxpdmUiLCJXZWFrU2V0Iiwic2NoZWR1bGUiLCJrZWVwQWxpdmUiLCJpbW1lZGlhdGUiLCJhZGRUb0N1cnJlbnRGcmFtZSIsImJ1ZmZlciIsImFkZCIsImNhbmNlbCIsImluZGV4Iiwic3BsaWNlIiwiZGVsZXRlIiwiZnJhbWVEYXRhIiwiaGFzIiwiY3JlYXRlUmVuZGVyU3RlcCIsInN5bmMiLCJzdGFydExvb3AiLCJjYW5jZWxTeW5jIiwiZmx1c2hTeW5jIiwicHJvY2Vzc1N0ZXAiLCJzdGVwSWQiLCJwcm9jZXNzRnJhbWUiLCJNYXRoIiwibWF4IiwibWluIiwiZm9yRWFjaCIsImdldEZyYW1lRGF0YSIsImlzQnJvd3NlciIsImRvY3VtZW50IiwidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZUVmZmVjdCIsInVzZUlzTW91bnRlZCIsImlzTW91bnRlZCIsInVzZVJlZiIsImN1cnJlbnQiLCJjcmVhdGVDb250ZXh0IiwidXNlQ29uc3RhbnQiLCJpbml0IiwicmVmIiwiY291bnRlciIsImluY3JlbWVudElkIiwidXNlSWQiLCJQcmVzZW5jZUNoaWxkIiwiX2EiLCJjaGlsZHJlbiIsImluaXRpYWwiLCJpc1ByZXNlbnQiLCJvbkV4aXRDb21wbGV0ZSIsImN1c3RvbSIsInByZXNlbmNlQWZmZWN0c0xheW91dCIsInByZXNlbmNlQ2hpbGRyZW4iLCJuZXdDaGlsZHJlbk1hcCIsImlkIiwiY29udGV4dCIsInVzZU1lbW8iLCJjaGlsZElkIiwiZV8xIiwic2V0IiwiX2IiLCJfX3ZhbHVlcyIsInZhbHVlcyIsIl9jIiwiZV8xXzEiLCJyZXR1cm4iLCJyZWdpc3RlciIsInVuZGVmaW5lZCIsIl8iLCJzaXplIiwiTWFwIiwiTGF5b3V0R3JvdXBDb250ZXh0IiwidXNlVW5tb3VudEVmZmVjdCIsImdldENoaWxkS2V5IiwiY2hpbGQiLCJBbmltYXRlUHJlc2VuY2UiLCJleGl0QmVmb3JlRW50ZXIiLCJfZCIsInVzZVN0YXRlIiwiZm9yY2VkUmVuZGVyQ291bnQiLCJzZXRGb3JjZWRSZW5kZXJDb3VudCIsImZvcmNlUmVuZGVyIiwidXNlQ2FsbGJhY2siLCJ1c2VGb3JjZVVwZGF0ZSIsImZvcmNlUmVuZGVyTGF5b3V0R3JvdXAiLCJ1c2VDb250ZXh0IiwiZmlsdGVyZWRDaGlsZHJlbiIsImZpbHRlcmVkIiwiQ2hpbGRyZW4iLCJpc1ZhbGlkRWxlbWVudCIsIm9ubHlFbGVtZW50cyIsImNoaWxkcmVuVG9SZW5kZXIiLCJleGl0aW5nIiwiU2V0IiwicHJlc2VudENoaWxkcmVuIiwiYWxsQ2hpbGRyZW4iLCJpc0luaXRpYWxSZW5kZXIiLCJ1cGRhdGVDaGlsZExvb2t1cCIsImNsZWFyIiwibWFwIiwicHJlc2VudEtleXMiLCJ0YXJnZXRLZXlzIiwibnVtUHJlc2VudCIsImluc2VydGlvbkluZGV4IiwicmVtb3ZlSW5kZXgiLCJmaW5kSW5kZXgiLCJwcmVzZW50Q2hpbGQiLCJjb25zb2xlIiwid2FybiIsImNsb25lRWxlbWVudCIsImNyZWF0ZURlZmluaXRpb24iLCJwcm9wTmFtZXMiLCJpc0VuYWJsZWQiLCJwcm9wcyIsInNvbWUiLCJuYW1lIiwiZmVhdHVyZURlZmluaXRpb25zIiwibWVhc3VyZUxheW91dCIsImFuaW1hdGlvbiIsImV4aXQiLCJkcmFnIiwiZm9jdXMiLCJob3ZlciIsInRhcCIsInBhbiIsImluVmlldyIsIndhcm5pbmciLCJpbnZhcmlhbnQiLCJMYXp5Q29udGV4dCIsInN0cmljdCIsImZlYXR1cmVOYW1lcyIsImtleXMiLCJudW1GZWF0dXJlcyIsIk1vdGlvbkNvbmZpZ0NvbnRleHQiLCJ0cmFuc2Zvcm1QYWdlUG9pbnQiLCJpc1N0YXRpYyIsInJlZHVjZWRNb3Rpb24iLCJNb3Rpb25Db250ZXh0IiwicHJlZmVyc1JlZHVjZWRNb3Rpb24iLCJoYXNEZXRlY3RlZCIsInVzZVZpc3VhbEVsZW1lbnQiLCJDb21wb25lbnQiLCJ2aXN1YWxTdGF0ZSIsImNyZWF0ZVZpc3VhbEVsZW1lbnQiLCJyZWR1Y2VkTW90aW9uUHJlZmVyZW5jZSIsImxhenlDb250ZXh0IiwicGFyZW50IiwidmlzdWFsRWxlbWVudCIsInByZXNlbmNlQ29udGV4dCIsInNob3VsZFJlZHVjZU1vdGlvbiIsIm1hdGNoTWVkaWEiLCJtb3Rpb25NZWRpYVF1ZXJ5XzEiLCJzZXRSZWR1Y2VkTW90aW9uUHJlZmVyZW5jZXMiLCJtYXRjaGVzIiwiYWRkTGlzdGVuZXIiLCJpbml0UHJlZmVyc1JlZHVjZWRNb3Rpb24iLCJ2aXN1YWxFbGVtZW50UmVmIiwicmVuZGVyZXIiLCJwcmVzZW5jZUlkIiwiYmxvY2tJbml0aWFsQW5pbWF0aW9uIiwic3luY1JlbmRlciIsImFuaW1hdGlvblN0YXRlIiwiYW5pbWF0ZUNoYW5nZXMiLCJub3RpZnlVbm1vdW50IiwiaXNSZWZPYmplY3QiLCJpc1ZhcmlhbnRMYWJlbHMiLCJ2IiwiaXNBcnJheSIsImlzVmFyaWFudExhYmVsIiwicmVzb2x2ZVZhcmlhbnRGcm9tUHJvcHMiLCJjdXJyZW50VmFsdWVzIiwiY3VycmVudFZlbG9jaXR5IiwidmFyaWFudHMiLCJyZXNvbHZlVmFyaWFudCIsImdldFByb3BzIiwiZm9yRWFjaFZhbHVlIiwiZ2V0Q3VycmVudCIsInZlbG9jaXR5IiwiZ2V0VmVsb2NpdHkiLCJjaGVja0lmQ29udHJvbGxpbmdWYXJpYW50cyIsImFuaW1hdGUiLCJzdGFydCIsIndoaWxlSG92ZXIiLCJ3aGlsZURyYWciLCJ3aGlsZVRhcCIsIndoaWxlRm9jdXMiLCJjaGVja0lmVmFyaWFudE5vZGUiLCJCb29sZWFuIiwidmFyaWFudExhYmVsc0FzRGVwZW5kZW5jeSIsImpvaW4iLCJnbG9iYWxQcm9qZWN0aW9uU3RhdGUiLCJoYXNBbmltYXRlZFNpbmNlUmVzaXplIiwiaGFzRXZlclVwZGF0ZWQiLCJTd2l0Y2hMYXlvdXRHcm91cENvbnRleHQiLCJWaXN1YWxFbGVtZW50SGFuZGxlciIsIl9zdXBlciIsImdldFNuYXBzaG90QmVmb3JlVXBkYXRlIiwidXBkYXRlUHJvcHMiLCJjb21wb25lbnREaWRVcGRhdGUiLCJzZXRQcm9wcyIsInJlbmRlciIsInByZWxvYWRlZEZlYXR1cmVzIiwicHJvamVjdGlvbk5vZGVDb25zdHJ1Y3RvciIsInVzZVJlbmRlciIsInVzZVZpc3VhbFN0YXRlIiwiZmVhdHVyZXMiLCJsb2FkRmVhdHVyZXMiLCJmb3J3YXJkUmVmIiwiZXh0ZXJuYWxSZWYiLCJsYXlvdXRJZCIsImxheW91dEdyb3VwSWQiLCJ1c2VMYXlvdXRJZCIsImNvbmZpZyIsImluaGVyaXQiLCJnZXRDdXJyZW50VHJlZVZhcmlhbnRzIiwidXNlQ3JlYXRlTW90aW9uQ29udGV4dCIsInByb2plY3Rpb25JZCIsIlByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3IiLCJsYXlvdXQiLCJkcmFnQ29uc3RyYWludHMiLCJsYXlvdXRTY3JvbGwiLCJpbml0aWFsUHJvbW90aW9uQ29uZmlnIiwicHJvamVjdGlvbiIsImdldExhdGVzdFZhbHVlcyIsInNldE9wdGlvbnMiLCJhbHdheXNNZWFzdXJlTGF5b3V0Iiwic2NoZWR1bGVSZW5kZXIiLCJhbmltYXRpb25UeXBlIiwidXNlUHJvamVjdGlvbiIsIm5hbWVfMSIsInVzZUZlYXR1cmVzIiwiUHJvdmlkZXIiLCJpbnN0YW5jZSIsIm1vdW50IiwidW5tb3VudCIsInVzZU1vdGlvblJlZiIsImNyZWF0ZU1vdGlvblByb3h5IiwiY3JlYXRlQ29uZmlnIiwiY3VzdG9tTW90aW9uQ29tcG9uZW50Q29uZmlnIiwiUHJveHkiLCJjb21wb25lbnRDYWNoZSIsIl90YXJnZXQiLCJsb3dlcmNhc2VTVkdFbGVtZW50cyIsImlzU1ZHQ29tcG9uZW50IiwiaW5jbHVkZXMiLCJ0ZXN0Iiwic2NhbGVDb3JyZWN0b3JzIiwidHJhbnNmb3JtQXhlcyIsInRyYW5zZm9ybVByb3BzIiwic29ydFRyYW5zZm9ybVByb3BzIiwib3BlcmF0aW9uS2V5IiwiYXhlc0tleSIsInRyYW5zZm9ybVByb3BTZXQiLCJpc1RyYW5zZm9ybVByb3AiLCJ0cmFuc2Zvcm1PcmlnaW5Qcm9wcyIsImlzVHJhbnNmb3JtT3JpZ2luUHJvcCIsImlzRm9yY2VkTW90aW9uVmFsdWUiLCJpc01vdGlvblZhbHVlIiwidHJhbnNsYXRlQWxpYXMiLCJ4IiwieSIsInoiLCJ0cmFuc2Zvcm1QZXJzcGVjdGl2ZSIsImlzQ1NTVmFyaWFibGUiLCJzdGFydHNXaXRoIiwiZ2V0VmFsdWVBc1R5cGUiLCJ0eXBlIiwidHJhbnNmb3JtIiwiY2xhbXAiLCJzYW5pdGl6ZSIsIk51bWJlciIsInRvRml4ZWQiLCJmbG9hdFJlZ2V4IiwiY29sb3JSZWdleCIsInNpbmdsZUNvbG9yUmVnZXgiLCJpc1N0cmluZyIsImNyZWF0ZVVuaXRUeXBlIiwidW5pdCIsImVuZHNXaXRoIiwic3BsaXQiLCJwYXJzZSIsInBhcnNlRmxvYXQiLCJkZWdyZWVzIiwicGVyY2VudCIsInB4IiwidmgiLCJ2dyIsInByb2dyZXNzUGVyY2VudGFnZSIsIm51bWJlciIsImFscGhhIiwic2NhbGUiLCJkZWZhdWx0Iiwicm91bmQiLCJudW1iZXJWYWx1ZVR5cGVzIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJhZGl1cyIsInJhZGl1cyIsImJvcmRlclRvcExlZnRSYWRpdXMiLCJib3JkZXJUb3BSaWdodFJhZGl1cyIsImJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzIiwiYm9yZGVyQm90dG9tTGVmdFJhZGl1cyIsIndpZHRoIiwibWF4V2lkdGgiLCJoZWlnaHQiLCJtYXhIZWlnaHQiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJwYWRkaW5nIiwicGFkZGluZ1RvcCIsInBhZGRpbmdSaWdodCIsInBhZGRpbmdCb3R0b20iLCJwYWRkaW5nTGVmdCIsIm1hcmdpbiIsIm1hcmdpblRvcCIsIm1hcmdpblJpZ2h0IiwibWFyZ2luQm90dG9tIiwibWFyZ2luTGVmdCIsInJvdGF0ZSIsInJvdGF0ZVgiLCJyb3RhdGVZIiwicm90YXRlWiIsInNjYWxlWCIsInNjYWxlWSIsInNjYWxlWiIsInNrZXciLCJza2V3WCIsInNrZXdZIiwiZGlzdGFuY2UiLCJ0cmFuc2xhdGVYIiwidHJhbnNsYXRlWSIsInRyYW5zbGF0ZVoiLCJwZXJzcGVjdGl2ZSIsIm9wYWNpdHkiLCJvcmlnaW5YIiwib3JpZ2luWSIsIm9yaWdpbloiLCJ6SW5kZXgiLCJmaWxsT3BhY2l0eSIsInN0cm9rZU9wYWNpdHkiLCJudW1PY3RhdmVzIiwiYnVpbGRIVE1MU3R5bGVzIiwic3RhdGUiLCJsYXRlc3RWYWx1ZXMiLCJvcHRpb25zIiwidHJhbnNmb3JtVGVtcGxhdGUiLCJzdHlsZSIsInZhcnMiLCJ0cmFuc2Zvcm1LZXlzIiwidHJhbnNmb3JtT3JpZ2luIiwiaGFzVHJhbnNmb3JtIiwiaGFzVHJhbnNmb3JtT3JpZ2luIiwidHJhbnNmb3JtSXNOb25lIiwidmFsdWVUeXBlIiwidmFsdWVBc1R5cGUiLCJ0cmFuc2Zvcm1Jc0RlZmF1bHQiLCJlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbiIsImFsbG93VHJhbnNmb3JtTm9uZSIsInRyYW5zZm9ybVN0cmluZyIsInNvcnQiLCJ0cmFuc2Zvcm1IYXNaIiwibnVtVHJhbnNmb3JtS2V5cyIsInRyaW0iLCJidWlsZFRyYW5zZm9ybSIsImJ1aWxkVHJhbnNmb3JtT3JpZ2luIiwiY3JlYXRlSHRtbFJlbmRlclN0YXRlIiwiY29weVJhd1ZhbHVlc09ubHkiLCJ0YXJnZXQiLCJzb3VyY2UiLCJ1c2VIVE1MUHJvcHMiLCJodG1sUHJvcHMiLCJ1c2VJbml0aWFsTW90aW9uVmFsdWVzIiwidHJhbnNmb3JtVmFsdWVzIiwidXNlU3R5bGUiLCJkcmFnTGlzdGVuZXIiLCJkcmFnZ2FibGUiLCJ1c2VyU2VsZWN0IiwiV2Via2l0VXNlclNlbGVjdCIsIldlYmtpdFRvdWNoQ2FsbG91dCIsInRvdWNoQWN0aW9uIiwidmFsaWRNb3Rpb25Qcm9wcyIsImlzVmFsaWRNb3Rpb25Qcm9wIiwiaXNWYWxpZFByb3AiLCJzaG91bGRGb3J3YXJkIiwiY2FsY09yaWdpbiIsIm9yaWdpbiIsIm9mZnNldCIsImRhc2hLZXlzIiwiYXJyYXkiLCJjYW1lbEtleXMiLCJidWlsZFNWR0F0dHJzIiwiYXR0clgiLCJhdHRyWSIsInBhdGhMZW5ndGgiLCJwYXRoU3BhY2luZyIsInBhdGhPZmZzZXQiLCJhdHRycyIsImRpbWVuc2lvbnMiLCJweE9yaWdpblgiLCJweE9yaWdpblkiLCJjYWxjU1ZHVHJhbnNmb3JtT3JpZ2luIiwic3BhY2luZyIsInVzZURhc2hDYXNlIiwiYnVpbGRTVkdQYXRoIiwiY3JlYXRlU3ZnUmVuZGVyU3RhdGUiLCJ1c2VTVkdQcm9wcyIsInZpc3VhbFByb3BzIiwicmF3U3R5bGVzIiwiY3JlYXRlVXNlUmVuZGVyIiwiZm9yd2FyZE1vdGlvblByb3BzIiwiZmlsdGVyZWRQcm9wcyIsImlzRG9tIiwiZmlsdGVyUHJvcHMiLCJlbGVtZW50UHJvcHMiLCJjcmVhdGVFbGVtZW50IiwiQ0FNRUxfQ0FTRV9QQVRURVJOIiwiY2FtZWxUb0Rhc2giLCJzdHIiLCJyZXBsYWNlIiwidG9Mb3dlckNhc2UiLCJyZW5kZXJIVE1MIiwiZWxlbWVudCIsInN0eWxlUHJvcCIsImdldFByb2plY3Rpb25TdHlsZXMiLCJzZXRQcm9wZXJ0eSIsImNhbWVsQ2FzZUF0dHJpYnV0ZXMiLCJyZW5kZXJTVkciLCJyZW5kZXJTdGF0ZSIsIl9zdHlsZVByb3AiLCJzZXRBdHRyaWJ1dGUiLCJzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMiLCJuZXdWYWx1ZXMiLCJ0b1VwcGVyQ2FzZSIsImlzQW5pbWF0aW9uQ29udHJvbHMiLCJpc0tleWZyYW1lc1RhcmdldCIsImlzQ3VzdG9tVmFsdWUiLCJtaXgiLCJ0b1ZhbHVlIiwicmVzb2x2ZUZpbmFsVmFsdWVJbktleWZyYW1lcyIsInJlc29sdmVNb3Rpb25WYWx1ZSIsInVud3JhcHBlZFZhbHVlIiwibWFrZVN0YXRlIiwiY3JlYXRlUmVuZGVyU3RhdGUiLCJvbk1vdW50IiwibWFrZUxhdGVzdFZhbHVlcyIsIm1ha2VVc2VWaXN1YWxTdGF0ZSIsInNjcmFwZU1vdGlvblZhbHVlcyIsIm1vdGlvblZhbHVlcyIsImlzQ29udHJvbGxpbmdWYXJpYW50cyIsImlzVmFyaWFudE5vZGUiLCJpbml0aWFsQW5pbWF0aW9uSXNCbG9ja2VkIiwidmFyaWFudFRvU2V0IiwicmVzb2x2ZWQiLCJ0cmFuc2l0aW9uRW5kIiwidHJhbnNpdGlvbiIsInZhbHVlVGFyZ2V0IiwiQW5pbWF0aW9uVHlwZSIsInN2Z01vdGlvbkNvbmZpZyIsImdldEJCb3giLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJodG1sTW90aW9uQ29uZmlnIiwiYWRkRG9tRXZlbnQiLCJldmVudE5hbWUiLCJoYW5kbGVyIiwicGFzc2l2ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidXNlRG9tRXZlbnQiLCJpc01vdXNlRXZlbnQiLCJldmVudCIsIlBvaW50ZXJFdmVudCIsInBvaW50ZXJUeXBlIiwiTW91c2VFdmVudCIsImlzVG91Y2hFdmVudCIsInRvdWNoZXMiLCJkZWZhdWx0UGFnZVBvaW50IiwicGFnZVgiLCJwYWdlWSIsInBvaW50RnJvbVRvdWNoIiwicG9pbnRUeXBlIiwicG9pbnQiLCJjaGFuZ2VkVG91Y2hlcyIsInBvaW50RnJvbU1vdXNlIiwiZXh0cmFjdEV2ZW50SW5mbyIsIndyYXBIYW5kbGVyIiwic2hvdWxkRmlsdGVyUHJpbWFyeVBvaW50ZXIiLCJldmVudEhhbmRsZXIiLCJsaXN0ZW5lciIsImJ1dHRvbiIsInN1cHBvcnRzUG9pbnRlckV2ZW50cyIsIm9ucG9pbnRlcmRvd24iLCJzdXBwb3J0c1RvdWNoRXZlbnRzIiwib250b3VjaHN0YXJ0Iiwic3VwcG9ydHNNb3VzZUV2ZW50cyIsIm9ubW91c2Vkb3duIiwibW91c2VFdmVudE5hbWVzIiwicG9pbnRlcmRvd24iLCJwb2ludGVybW92ZSIsInBvaW50ZXJ1cCIsInBvaW50ZXJjYW5jZWwiLCJwb2ludGVyb3ZlciIsInBvaW50ZXJvdXQiLCJwb2ludGVyZW50ZXIiLCJwb2ludGVybGVhdmUiLCJ0b3VjaEV2ZW50TmFtZXMiLCJnZXRQb2ludGVyRXZlbnROYW1lIiwiYWRkUG9pbnRlckV2ZW50IiwidXNlUG9pbnRlckV2ZW50IiwiY3JlYXRlTG9jayIsImxvY2siLCJnbG9iYWxIb3Jpem9udGFsTG9jayIsImdsb2JhbFZlcnRpY2FsTG9jayIsImdldEdsb2JhbExvY2siLCJvcGVuSG9yaXpvbnRhbF8xIiwib3BlblZlcnRpY2FsXzEiLCJpc0RyYWdBY3RpdmUiLCJvcGVuR2VzdHVyZUxvY2siLCJjcmVhdGVIb3ZlckV2ZW50IiwiaXNBY3RpdmUiLCJpbmZvIiwic2V0QWN0aXZlIiwiSG92ZXIiLCJpc05vZGVPckNoaWxkIiwicGFyZW50RWxlbWVudCIsImNvbWJpbmVGdW5jdGlvbnMiLCJwaXBlIiwidHJhbnNmb3JtZXJzIiwid2FybmVkIiwib2JzZXJ2ZXJDYWxsYmFja3MiLCJXZWFrTWFwIiwib2JzZXJ2ZXJzIiwiZmlyZU9ic2VydmVyQ2FsbGJhY2siLCJlbnRyeSIsImZpcmVBbGxPYnNlcnZlckNhbGxiYWNrcyIsImVudHJpZXMiLCJ0aHJlc2hvbGROYW1lcyIsImFsbCIsInVzZUludGVyc2VjdGlvbk9ic2VydmVyIiwic2hvdWxkT2JzZXJ2ZSIsInJvb3QiLCJyb290TWFyZ2luIiwiYW1vdW50Iiwib25jZSIsInRocmVzaG9sZCIsInJvb3RJbnRlcmVzZWN0aW9uT2JzZXJ2ZXIiLCJsb29rdXBSb290Iiwicm9vdE9ic2VydmVycyIsIkpTT04iLCJzdHJpbmdpZnkiLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsImluaXRJbnRlcnNlY3Rpb25PYnNlcnZlciIsIm9ic2VydmUiLCJ1bm9ic2VydmUiLCJvYnNlcnZlSW50ZXJzZWN0aW9uIiwiZ2V0SW5zdGFuY2UiLCJpc0ludGVyc2VjdGluZyIsImlzSW5WaWV3IiwiaGFzRW50ZXJlZFZpZXciLCJJblZpZXciLCJvblZpZXdwb3J0RW50ZXIiLCJvblZpZXdwb3J0TGVhdmUiLCJ1c2VNaXNzaW5nSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJmYWxsYmFjayIsIm1lc3NhZ2UiLCJtYWtlUmVuZGVybGVzc0NvbXBvbmVudCIsImhvb2siLCJnZXN0dXJlQW5pbWF0aW9ucyIsIndoaWxlSW5WaWV3Iiwidmlld3BvcnQiLCJvblRhcCIsIm9uVGFwU3RhcnQiLCJvblRhcENhbmNlbCIsImhhc1ByZXNzTGlzdGVuZXJzIiwiaXNQcmVzc2luZyIsImNhbmNlbFBvaW50ZXJFbmRMaXN0ZW5lcnMiLCJldmVudE9wdGlvbnMiLCJvblBvaW50ZXJEb3duIiwicmVtb3ZlUG9pbnRlckVuZExpc3RlbmVyIiwiY2hlY2tQb2ludGVyRW5kIiwiVGFwIiwib25Qb2ludGVyVXAiLCJvblBvaW50ZXJDYW5jZWwiLCJGb2N1cyIsIm9uSG92ZXJTdGFydCIsIm9uSG92ZXJFbmQiLCJ1c2VQcmVzZW5jZSIsInNoYWxsb3dDb21wYXJlIiwicHJldiIsInByZXZMZW5ndGgiLCJzYWZlTWluIiwibWluRHVyYXRpb24iLCJtYXhEdXJhdGlvbiIsIm1pbkRhbXBpbmciLCJtYXhEYW1waW5nIiwicm9vdEl0ZXJhdGlvbnMiLCJjYWxjQW5ndWxhckZyZXEiLCJ1bmRhbXBlZEZyZXEiLCJkYW1waW5nUmF0aW8iLCJzcXJ0IiwiZHVyYXRpb25LZXlzIiwicGh5c2ljc0tleXMiLCJpc1NwcmluZ1R5cGUiLCJzcHJpbmciLCJyZXN0U3BlZWQiLCJyZXN0RGVsdGEiLCJzdGlmZm5lc3MiLCJkYW1waW5nIiwibWFzcyIsImR1cmF0aW9uIiwiaXNSZXNvbHZlZEZyb21EdXJhdGlvbiIsInNwcmluZ09wdGlvbnMiLCJkZXJpdmVkIiwiYm91bmNlIiwiZW52ZWxvcGUiLCJkZXJpdmF0aXZlIiwiZXhwb25lbnRpYWxEZWNheSIsImMiLCJleHAiLCJwb3ciLCJmIiwiZyIsImluaXRpYWxHdWVzcyIsImFwcHJveGltYXRlUm9vdCIsImlzTmFOIiwiZmluZFNwcmluZyIsImdldFNwcmluZ09wdGlvbnMiLCJyZXNvbHZlU3ByaW5nIiwiemVybyIsInJlc29sdmVWZWxvY2l0eSIsImNyZWF0ZVNwcmluZyIsImluaXRpYWxWZWxvY2l0eSIsImluaXRpYWxEZWx0YSIsInVuZGFtcGVkQW5ndWxhckZyZXEiLCJhYnMiLCJhbmd1bGFyRnJlcSIsInNpbiIsImNvcyIsImRhbXBlZEFuZ3VsYXJGcmVxIiwiZnJlcUZvclQiLCJzaW5oIiwiY29zaCIsImlzQmVsb3dWZWxvY2l0eVRocmVzaG9sZCIsImlzQmVsb3dEaXNwbGFjZW1lbnRUaHJlc2hvbGQiLCJmbGlwVGFyZ2V0IiwibmVlZHNJbnRlcnBvbGF0aW9uIiwiX3QiLCJwcm9ncmVzcyIsInRvRnJvbURpZmZlcmVuY2UiLCJpc0NvbG9yU3RyaW5nIiwidGVzdFByb3AiLCJzcGxpdENvbG9yIiwiYU5hbWUiLCJiTmFtZSIsImNOYW1lIiwibWF0Y2giLCJjbGFtcFJnYlVuaXQiLCJyZ2JVbml0IiwicmdiYSIsInJlZCIsImdyZWVuIiwiYmx1ZSIsImFscGhhJDEiLCJoZXgiLCJzdWJzdHIiLCJwYXJzZUludCIsImhzbGEiLCJodWUiLCJzYXR1cmF0aW9uIiwibGlnaHRuZXNzIiwiaHVlVG9SZ2IiLCJxIiwiaHNsYVRvUmdiYSIsIm1peExpbmVhckNvbG9yIiwiZnJvbUV4cG8iLCJ0b0V4cG8iLCJjb2xvclR5cGVzIiwiZ2V0Q29sb3JUeXBlIiwiZmluZCIsIm5vdEFuaW1hdGFibGUiLCJjb2xvciIsIm1peENvbG9yIiwiZnJvbUNvbG9yVHlwZSIsInRvQ29sb3JUeXBlIiwiZnJvbUNvbG9yIiwidG9Db2xvciIsImJsZW5kZWQiLCJjb2xvclRva2VuIiwibnVtYmVyVG9rZW4iLCJhbmFseXNlIiwibnVtQ29sb3JzIiwiY29sb3JzIiwibnVtYmVycyIsInRva2VuaXNlZCIsImNyZWF0ZVRyYW5zZm9ybWVyIiwibnVtVmFsdWVzIiwib3V0cHV0IiwiY29udmVydE51bWJlcnNUb1plcm8iLCJjb21wbGV4IiwiZ2V0QW5pbWF0YWJsZU5vbmUiLCJwYXJzZWQiLCJ0cmFuc2Zvcm1lciIsImlzTnVtIiwiZ2V0TWl4ZXIiLCJtaXhDb21wbGV4IiwibWl4QXJyYXkiLCJibGVuZFZhbHVlIiwiZnJvbVRoaXMiLCJtaXhPYmplY3QiLCJudW1OdW1iZXJzIiwibnVtUkdCIiwibnVtSFNMIiwidGVtcGxhdGUiLCJvcmlnaW5TdGF0cyIsInRhcmdldFN0YXRzIiwibWl4TnVtYmVyIiwiaW50ZXJwb2xhdGUiLCJpbnB1dCIsImlzQ2xhbXAiLCJlYXNlIiwibWl4ZXIiLCJpbnB1dExlbmd0aCIsInJldmVyc2UiLCJtaXhlcnMiLCJjdXN0b21NaXhlciIsIm1peGVyRmFjdG9yeSIsIm51bU1peGVycyIsImVhc2luZ0Z1bmN0aW9uIiwiY3JlYXRlTWl4ZXJzIiwiaW50ZXJwb2xhdG9yIiwiZmFzdEludGVycG9sYXRlIiwibGFzdElucHV0SW5kZXgiLCJtaXhlckluZGV4IiwiZm91bmRNaXhlckluZGV4IiwicHJvZ3Jlc3NJblJhbmdlIiwic2xvd0ludGVycG9sYXRlIiwicmV2ZXJzZUVhc2luZyIsImVhc2luZyIsIm1pcnJvckVhc2luZyIsImNyZWF0ZUJhY2tJbiIsInBvd2VyIiwibGluZWFyIiwiZWFzZUluIiwiZWFzZU91dCIsImVhc2VJbk91dCIsImNpcmNJbiIsImFjb3MiLCJjaXJjT3V0IiwiY2lyY0luT3V0IiwiYmFja0luIiwiYmFja091dCIsImJhY2tJbk91dCIsImFudGljaXBhdGUiLCJiYWNrRWFzaW5nIiwiY3JlYXRlQW50aWNpcGF0ZSIsImJvdW5jZU91dCIsInAyIiwiYm91bmNlSW4iLCJkZWZhdWx0RWFzaW5nIiwia2V5ZnJhbWVzIiwidGltZXMiLCJjb252ZXJ0T2Zmc2V0VG9UaW1lcyIsIl92YWx1ZSIsImRlZmF1bHRPZmZzZXQiLCJjcmVhdGVJbnRlcnBvbGF0b3IiLCJ0eXBlcyIsInRpbWVDb25zdGFudCIsIm1vZGlmeVRhcmdldCIsImFtcGxpdHVkZSIsImlkZWFsIiwibG9vcEVsYXBzZWQiLCJlbGFwc2VkIiwiZGVsYXkiLCJmcmFtZXN5bmMiLCJ1cGRhdGUiLCJwYXNzVGltZXN0YW1wIiwic3RvcCIsImF1dG9wbGF5IiwiZHJpdmVyIiwicmVwZWF0IiwicmVwZWF0TWF4IiwicmVwZWF0VHlwZSIsInJlcGVhdERlbGF5Iiwib25QbGF5Iiwib25TdG9wIiwib25Db21wbGV0ZSIsIm9uUmVwZWF0Iiwib25VcGRhdGUiLCJkcml2ZXJDb250cm9scyIsImxhdGVzdCIsImludGVycG9sYXRlRnJvbU51bWJlciIsInJlcGVhdENvdW50IiwiY29tcHV0ZWREdXJhdGlvbiIsImlzQ29tcGxldGUiLCJpc0ZvcndhcmRQbGF5YmFjayIsImFuaW1hdG9yIiwiZGV0ZWN0QW5pbWF0aW9uRnJvbU9wdGlvbnMiLCJoYXNSZXBlYXREZWxheUVsYXBzZWQiLCJyZXZlcnNlRWxhcHNlZCIsInZlbG9jaXR5UGVyU2Vjb25kIiwiZnJhbWVEdXJhdGlvbiIsInNlY29uZHNUb01pbGxpc2Vjb25kcyIsInNlY29uZHMiLCJhMSIsImEyIiwiY2FsY0JlemllciIsImdldFNsb3BlIiwic3ViZGl2aXNpb25QcmVjaXNpb24iLCJzdWJkaXZpc2lvbk1heEl0ZXJhdGlvbnMiLCJuZXd0b25JdGVyYXRpb25zIiwibmV3dG9uTWluU2xvcGUiLCJrU3BsaW5lVGFibGVTaXplIiwia1NhbXBsZVN0ZXBTaXplIiwiY3ViaWNCZXppZXIiLCJtWDEiLCJtWTEiLCJtWDIiLCJtWTIiLCJzYW1wbGVWYWx1ZXMiLCJGbG9hdDMyQXJyYXkiLCJhWCIsImludGVydmFsU3RhcnQiLCJjdXJyZW50U2FtcGxlIiwibGFzdFNhbXBsZSIsImd1ZXNzRm9yVCIsImluaXRpYWxTbG9wZSIsImFHdWVzc1QiLCJjdXJyZW50U2xvcGUiLCJuZXd0b25SYXBoc29uSXRlcmF0ZSIsImFBIiwiYUIiLCJjdXJyZW50WCIsImN1cnJlbnRUIiwiYmluYXJ5U3ViZGl2aWRlIiwiZ2V0VEZvclgiLCJlYXNpbmdMb29rdXAiLCJib3VuY2VJbk91dCIsImVhc2luZ0RlZmluaXRpb25Ub0Z1bmN0aW9uIiwiaXNFYXNpbmdBcnJheSIsImlzQW5pbWF0YWJsZSIsInVuZGVyRGFtcGVkU3ByaW5nIiwiY3JpdGljYWxseURhbXBlZFNwcmluZyIsImxpbmVhclR3ZWVuIiwiZGVmYXVsdFRyYW5zaXRpb25zIiwiYmFja2dyb3VuZENvbG9yIiwiZ2V0RGVmYXVsdFRyYW5zaXRpb24iLCJ2YWx1ZUtleSIsInRyYW5zaXRpb25GYWN0b3J5IiwibWF4RGVmYXVsdHMiLCJhcHBseURlZmF1bHRGaWx0ZXIiLCJkZWZhdWx0VmFsdWUiLCJmdW5jdGlvblJlZ2V4IiwiZmlsdGVyIiwiZnVuY3Rpb25zIiwiZGVmYXVsdFZhbHVlVHlwZXMiLCJvdXRsaW5lQ29sb3IiLCJmaWxsIiwic3Ryb2tlIiwiYm9yZGVyQ29sb3IiLCJib3JkZXJUb3BDb2xvciIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJCb3R0b21Db2xvciIsImJvcmRlckxlZnRDb2xvciIsIldlYmtpdEZpbHRlciIsImdldERlZmF1bHRWYWx1ZVR5cGUiLCJkZWZhdWx0VmFsdWVUeXBlIiwiaW5zdGFudEFuaW1hdGlvblN0YXRlIiwibGVnYWN5UmVwZWF0V2FybmluZyIsImdldEFuaW1hdGlvbiIsInZhbHVlVHJhbnNpdGlvbiIsImdldFZhbHVlVHJhbnNpdGlvbiIsImlzVGFyZ2V0QW5pbWF0YWJsZSIsImlzWmVybyIsImdldFplcm9Vbml0IiwiaXNPcmlnaW5BbmltYXRhYmxlIiwiYm91bmNlU3RpZmZuZXNzIiwiYm91bmNlRGFtcGluZyIsImN1cnJlbnRBbmltYXRpb24iLCJpc091dE9mQm91bmRzIiwiYm91bmRhcnlOZWFyZXN0Iiwic3RhcnRBbmltYXRpb24iLCJzdGFydFNwcmluZyIsImJvdW5kYXJ5IiwiaGVhZGluZyIsImNoZWNrQm91bmRhcnkiLCJpbmVydGlhIiwiaHlkcmF0ZUtleWZyYW1lcyIsIndoZW4iLCJkZWxheUNoaWxkcmVuIiwic3RhZ2dlckNoaWxkcmVuIiwic3RhZ2dlckRpcmVjdGlvbiIsImlzVHJhbnNpdGlvbkRlZmluZWQiLCJ5b3lvIiwiZmxpcCIsImxvb3AiLCJjb252ZXJ0VHJhbnNpdGlvblRvQW5pbWF0aW9uT3B0aW9ucyIsImdldFBvcG1vdGlvbkFuaW1hdGlvbk9wdGlvbnMiLCJmaW5hbFRhcmdldCIsInBvdGVudGlhbFVuaXRUeXBlIiwiZGVsYXlUaW1lciIsImNvbnRyb2xzIiwiZ2V0RGVsYXlGcm9tVHJhbnNpdGlvbiIsImNsZWFyVGltZW91dCIsImlzWmVyb1ZhbHVlU3RyaW5nIiwiYWRkVW5pcXVlSXRlbSIsImFyciIsIml0ZW0iLCJyZW1vdmVJdGVtIiwiU3Vic2NyaXB0aW9uTWFuYWdlciIsInN1YnNjcmlwdGlvbnMiLCJfdGhpcyIsIm5vdGlmeSIsIm51bVN1YnNjcmlwdGlvbnMiLCJnZXRTaXplIiwiaXNGbG9hdCIsIk1vdGlvblZhbHVlIiwidmVyc2lvbiIsInRpbWVEZWx0YSIsImxhc3RVcGRhdGVkIiwidXBkYXRlU3Vic2NyaWJlcnMiLCJ2ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzIiwicmVuZGVyU3Vic2NyaWJlcnMiLCJjYW5UcmFja1ZlbG9jaXR5IiwidXBkYXRlQW5kTm90aWZ5Iiwic2NoZWR1bGVWZWxvY2l0eUNoZWNrIiwidmVsb2NpdHlDaGVjayIsImhhc0FuaW1hdGVkIiwib25DaGFuZ2UiLCJzdWJzY3JpcHRpb24iLCJjbGVhckxpc3RlbmVycyIsIm9uUmVuZGVyUmVxdWVzdCIsImF0dGFjaCIsInBhc3NpdmVFZmZlY3QiLCJnZXRQcmV2aW91cyIsInN0b3BBbmltYXRpb24iLCJjbGVhckFuaW1hdGlvbiIsImlzQW5pbWF0aW5nIiwiZGVzdHJveSIsIm1vdGlvblZhbHVlIiwidGVzdFZhbHVlVHlwZSIsImRpbWVuc2lvblZhbHVlVHlwZXMiLCJmaW5kRGltZW5zaW9uVmFsdWVUeXBlIiwidmFsdWVUeXBlcyIsImZpbmRWYWx1ZVR5cGUiLCJzZXRNb3Rpb25WYWx1ZSIsImhhc1ZhbHVlIiwiZ2V0VmFsdWUiLCJhZGRWYWx1ZSIsImdldE9yaWdpbkZyb21UcmFuc2l0aW9uIiwiYW5pbWF0ZVZhcmlhbnQiLCJ2YXJpYW50IiwidHJhbnNpdGlvbk92ZXJyaWRlIiwiYW5pbWF0ZVRhcmdldCIsImdldENoaWxkQW5pbWF0aW9ucyIsInZhcmlhbnRDaGlsZHJlbiIsImZvcndhcmREZWxheSIsImFuaW1hdGlvbnMiLCJtYXhTdGFnZ2VyRHVyYXRpb24iLCJnZW5lcmF0ZVN0YWdnZXJEdXJhdGlvbiIsInNvcnRCeVRyZWVPcmRlciIsIm5vdGlmeUFuaW1hdGlvbkNvbXBsZXRlIiwiYW5pbWF0ZUNoaWxkcmVuIiwiZmlyc3QiLCJsYXN0IiwiX2UiLCJtYWtlVGFyZ2V0QW5pbWF0YWJsZSIsIl9mIiwiYW5pbWF0aW9uVHlwZVN0YXRlIiwiZ2V0U3RhdGUiLCJzaG91bGRCbG9ja0FuaW1hdGlvbiIsInNldFRhcmdldCIsInNvcnROb2RlUG9zaXRpb24iLCJwcm90ZWN0ZWRLZXlzIiwibmVlZHNBbmltYXRpbmciLCJzaG91bGRCbG9jayIsInZhcmlhbnRQcmlvcml0eU9yZGVyIiwiQW5pbWF0ZSIsIkRyYWciLCJFeGl0IiwicmV2ZXJzZVByaW9yaXR5T3JkZXIiLCJudW1BbmltYXRpb25UeXBlcyIsImNyZWF0ZUFuaW1hdGlvblN0YXRlIiwibm90aWZ5QW5pbWF0aW9uU3RhcnQiLCJyZXNvbHZlZERlZmluaXRpb24iLCJhbmltYXRlVmlzdWFsRWxlbWVudCIsImFuaW1hdGVMaXN0IiwiY3JlYXRlVHlwZVN0YXRlIiwiYWxsQW5pbWF0ZWRLZXlzIiwiYnVpbGRSZXNvbHZlZFR5cGVWYWx1ZXMiLCJjaGFuZ2VkQWN0aXZlVHlwZSIsImdldFZhcmlhbnRDb250ZXh0IiwicmVtb3ZlZEtleXMiLCJlbmNvdW50ZXJlZEtleXMiLCJyZW1vdmVkVmFyaWFudEluZGV4IiwiSW5maW5pdHkiLCJfbG9vcF8xIiwidHlwZVN0YXRlIiwicHJvcElzVmFyaWFudCIsImFjdGl2ZURlbHRhIiwiaXNJbmhlcml0ZWQiLCJtYW51YWxseUFuaW1hdGVPbk1vdW50IiwicHJldlByb3AiLCJ2YXJpYW50RGlkQ2hhbmdlIiwiY2hlY2tWYXJpYW50c0RpZENoYW5nZSIsInNob3VsZEFuaW1hdGVUeXBlIiwiZGVmaW5pdGlvbkxpc3QiLCJyZXNvbHZlZFZhbHVlcyIsInByZXZSZXNvbHZlZFZhbHVlcyIsImFsbEtleXMiLCJtYXJrVG9BbmltYXRlIiwiZmFsbGJhY2tBbmltYXRpb25fMSIsImZhbGxiYWNrVGFyZ2V0IiwiZ2V0QmFzZVRhcmdldCIsInNob3VsZEFuaW1hdGUiLCJpc0FuaW1hdGVkIiwic2V0QW5pbWF0ZUZ1bmN0aW9uIiwibWFrZUFuaW1hdG9yIiwic3Vic2NyaWJlIiwic2FmZVRvUmVtb3ZlIiwiaXNQb2ludCIsImlzUG9pbnQzRCIsImRpc3RhbmNlMUQiLCJ4RGVsdGEiLCJ5RGVsdGEiLCJ6RGVsdGEiLCJQYW5TZXNzaW9uIiwiaGFuZGxlcnMiLCJzdGFydEV2ZW50IiwibGFzdE1vdmVFdmVudCIsImxhc3RNb3ZlRXZlbnRJbmZvIiwidXBkYXRlUG9pbnQiLCJnZXRQYW5JbmZvIiwiaGlzdG9yeSIsImlzUGFuU3RhcnRlZCIsImlzRGlzdGFuY2VQYXN0VGhyZXNob2xkIiwib25TdGFydCIsIm9uTW92ZSIsImhhbmRsZVBvaW50ZXJNb3ZlIiwidHJhbnNmb3JtUG9pbnQiLCJidXR0b25zIiwiaGFuZGxlUG9pbnRlclVwIiwiZW5kIiwib25FbmQiLCJvblNlc3Npb25FbmQiLCJwYW5JbmZvIiwiaW5pdGlhbEluZm8iLCJvblNlc3Npb25TdGFydCIsInJlbW92ZUxpc3RlbmVycyIsInVwZGF0ZUhhbmRsZXJzIiwic3VidHJhY3RQb2ludCIsImxhc3REZXZpY2VQb2ludCIsInN0YXJ0RGV2aWNlUG9pbnQiLCJ0aW1lc3RhbXBlZFBvaW50IiwibGFzdFBvaW50IiwidGltZSIsImNhbGNMZW5ndGgiLCJheGlzIiwiaXNOZWFyIiwibWF4RGlzdGFuY2UiLCJjYWxjQXhpc0RlbHRhIiwib3JpZ2luUG9pbnQiLCJ0cmFuc2xhdGUiLCJjYWxjQm94RGVsdGEiLCJjYWxjUmVsYXRpdmVBeGlzIiwicmVsYXRpdmUiLCJjYWxjUmVsYXRpdmVBeGlzUG9zaXRpb24iLCJjYWxjUmVsYXRpdmVQb3NpdGlvbiIsImNhbGNSZWxhdGl2ZUF4aXNDb25zdHJhaW50cyIsImNhbGNWaWV3cG9ydEF4aXNDb25zdHJhaW50cyIsImxheW91dEF4aXMiLCJjb25zdHJhaW50c0F4aXMiLCJkZWZhdWx0RWxhc3RpYyIsInJlc29sdmVBeGlzRWxhc3RpYyIsImRyYWdFbGFzdGljIiwibWluTGFiZWwiLCJtYXhMYWJlbCIsInJlc29sdmVQb2ludEVsYXN0aWMiLCJsYWJlbCIsImNyZWF0ZURlbHRhIiwiY3JlYXRlQm94IiwiZWFjaEF4aXMiLCJjb252ZXJ0Qm91bmRpbmdCb3hUb0JveCIsImlzSWRlbnRpdHlTY2FsZSIsImhhc1NjYWxlIiwiaGFzVHJhbnNsYXRlIiwic2NhbGVQb2ludCIsImFwcGx5UG9pbnREZWx0YSIsImJveFNjYWxlIiwiYXBwbHlBeGlzRGVsdGEiLCJhcHBseUJveERlbHRhIiwiYm94IiwidHJhbnNsYXRlQXhpcyIsInRyYW5zZm9ybUF4aXMiLCJ0cmFuc2Zvcm1zIiwic2NhbGVLZXkiLCJvcmlnaW5LZXkiLCJheGlzT3JpZ2luIiwieEtleXMiLCJ5S2V5cyIsInRyYW5zZm9ybUJveCIsIm1lYXN1cmVWaWV3cG9ydEJveCIsInRvcExlZnQiLCJib3R0b21SaWdodCIsInRyYW5zZm9ybUJveFBvaW50cyIsImVsZW1lbnREcmFnQ29udHJvbHMiLCJWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzIiwib3Blbkdsb2JhbExvY2siLCJpc0RyYWdnaW5nIiwiY3VycmVudERpcmVjdGlvbiIsImNvbnN0cmFpbnRzIiwiaGFzTXV0YXRlZENvbnN0cmFpbnRzIiwiZWxhc3RpYyIsIm9yaWdpbkV2ZW50Iiwic25hcFRvQ3Vyc29yIiwicGFuU2Vzc2lvbiIsImRyYWdQcm9wYWdhdGlvbiIsIm9uRHJhZ1N0YXJ0IiwicmVzb2x2ZUNvbnN0cmFpbnRzIiwiaXNBbmltYXRpb25CbG9ja2VkIiwiZ2V0QXhpc01vdGlvblZhbHVlIiwibWVhc3VyZWRBeGlzIiwiYWN0dWFsIiwiZHJhZ0RpcmVjdGlvbkxvY2siLCJvbkRpcmVjdGlvbkxvY2siLCJvbkRyYWciLCJsb2NrVGhyZXNob2xkIiwiZGlyZWN0aW9uIiwiZ2V0Q3VycmVudERpcmVjdGlvbiIsInVwZGF0ZUF4aXMiLCJnZXRUcmFuc2Zvcm1QYWdlUG9pbnQiLCJvbkRyYWdFbmQiLCJfcG9pbnQiLCJzaG91bGREcmFnIiwiYXhpc1ZhbHVlIiwicHJldkNvbnN0cmFpbnRzIiwicmVzb2x2ZVJlZkNvbnN0cmFpbnRzIiwibGF5b3V0Qm94IiwiY2FsY1JlbGF0aXZlQ29uc3RyYWludHMiLCJyZXNvbHZlRHJhZ0VsYXN0aWMiLCJyZWxhdGl2ZUNvbnN0cmFpbnRzIiwicmViYXNlQXhpc0NvbnN0cmFpbnRzIiwib25NZWFzdXJlRHJhZ0NvbnN0cmFpbnRzIiwiY29uc3RyYWludHNFbGVtZW50IiwiY29uc3RyYWludHNCb3giLCJyb290UHJvamVjdGlvbk5vZGUiLCJ2aWV3cG9ydEJveCIsInNjcm9sbCIsIm1lYXN1cmVQYWdlQm94IiwibWVhc3VyZWRDb25zdHJhaW50cyIsImNhbGNWaWV3cG9ydENvbnN0cmFpbnRzIiwidXNlckNvbnN0cmFpbnRzIiwiY29udmVydEJveFRvQm91bmRpbmdCb3giLCJkcmFnTW9tZW50dW0iLCJkcmFnVHJhbnNpdGlvbiIsImRyYWdTbmFwVG9PcmlnaW4iLCJvbkRyYWdUcmFuc2l0aW9uRW5kIiwibW9tZW50dW1BbmltYXRpb25zIiwic3RhcnRBeGlzVmFsdWVBbmltYXRpb24iLCJkcmFnS2V5Iiwic2NhbGVQb3NpdGlvbldpdGhpbkNvbnN0cmFpbnRzIiwiYm94UHJvZ3Jlc3MiLCJzb3VyY2VMZW5ndGgiLCJ0YXJnZXRMZW5ndGgiLCJ1cGRhdGVTY3JvbGwiLCJ1cGRhdGVMYXlvdXQiLCJhZGRMaXN0ZW5lcnMiLCJzdG9wUG9pbnRlckxpc3RlbmVyIiwibWVhc3VyZURyYWdDb25zdHJhaW50cyIsInN0b3BNZWFzdXJlTGF5b3V0TGlzdGVuZXIiLCJzdG9wUmVzaXplTGlzdGVuZXIiLCJoYXNMYXlvdXRDaGFuZ2VkIiwib25QYW4iLCJvblBhblN0YXJ0Iiwib25QYW5FbmQiLCJvblBhblNlc3Npb25TdGFydCIsImhhc1BhbkV2ZW50cyIsImdyb3VwRHJhZ0NvbnRyb2xzIiwiZHJhZ0NvbnRyb2xzIiwibmFtZXMiLCJ0cmVlVHlwZSIsImJ1aWxkIiwicmVuZGVySW5zdGFuY2UiLCJyZWFkVmFsdWVGcm9tSW5zdGFuY2UiLCJyZW1vdmVWYWx1ZUZyb21SZW5kZXJTdGF0ZSIsInJlbW92ZUZyb21WYXJpYW50VHJlZSIsImxpZmVjeWNsZXMiLCJtYW5hZ2VycyIsInByb3BTdWJzY3JpcHRpb25zIiwiY2xlYXJBbGxMaXN0ZW5lcnMiLCJtYW5hZ2VyIiwidXBkYXRlUHJvcExpc3RlbmVycyIsIm9uIiwicHJvcExpc3RlbmVyIiwiYXJncyIsIl9pIiwiY3JlYXRlTGlmZWN5Y2xlcyIsInZhbHVlU3Vic2NyaXB0aW9ucyIsInByZXZNb3Rpb25WYWx1ZXMiLCJiYXNlVGFyZ2V0IiwidHJpZ2dlckJ1aWxkIiwibm90aWZ5VXBkYXRlIiwiYmluZFRvTW90aW9uVmFsdWUiLCJyZW1vdmVPbkNoYW5nZSIsImxhdGVzdFZhbHVlIiwicmVtb3ZlT25SZW5kZXJSZXF1ZXN0IiwiaW5pdGlhbE1vdGlvblZhbHVlcyIsImRlcHRoIiwiaXNWaXNpYmxlIiwibmV3SW5zdGFuY2UiLCJhZGRWYXJpYW50Q2hpbGQiLCJyZW1vdmUiLCJjbG9zZXN0VmFyaWFudE5vZGUiLCJnZXRDbG9zZXN0VmFyaWFudE5vZGUiLCJvdGhlciIsImdldExheW91dElkIiwiZ2V0U3RhdGljVmFsdWUiLCJzZXRTdGF0aWNWYWx1ZSIsInNldFZpc2liaWxpdHkiLCJ2aXNpYmlsaXR5IiwiY2FuTXV0YXRlIiwicmVtb3ZlVmFsdWUiLCJyZWFkVmFsdWUiLCJzZXRCYXNlVGFyZ2V0IiwibmV3UHJvcHMiLCJuZXh0VmFsdWUiLCJwcmV2VmFsdWUiLCJleGlzdGluZ1ZhbHVlIiwidXBkYXRlTW90aW9uVmFsdWVzRnJvbVByb3BzIiwiZ2V0VmFyaWFudCIsInN0YXJ0QXRQYXJlbnQiLCJjb250ZXh0XzEiLCJudW1WYXJpYW50UHJvcHMiLCJ2YXJpYW50UHJvcHMiLCJjc3NWYXJpYWJsZVJlZ2V4IiwibWF4RGVwdGgiLCJnZXRWYXJpYWJsZVZhbHVlIiwiZXhlYyIsInBhcnNlQ1NTVmFyaWFibGUiLCJ0b2tlbiIsImdldENvbXB1dGVkU3R5bGUiLCJnZXRQcm9wZXJ0eVZhbHVlIiwiQm91bmRpbmdCb3hEaW1lbnNpb24iLCJwb3NpdGlvbmFsS2V5cyIsImlzUG9zaXRpb25hbEtleSIsInNldEFuZFJlc2V0VmVsb2NpdHkiLCJpc051bU9yUHhUeXBlIiwiZ2V0UG9zRnJvbU1hdHJpeCIsIm1hdHJpeCIsInBvcyIsImdldFRyYW5zbGF0ZUZyb21NYXRyaXgiLCJwb3MyIiwicG9zMyIsIl9iYm94IiwibWF0cml4M2QiLCJub25UcmFuc2xhdGlvbmFsVHJhbnNmb3JtS2V5cyIsInBvc2l0aW9uYWxWYWx1ZXMiLCJwYXJzZURvbVZhcmlhbnQiLCJFbGVtZW50IiwicmVzb2x2ZUNTU1ZhcmlhYmxlcyIsImhhc1Bvc2l0aW9uYWxLZXkiLCJ0YXJnZXRQb3NpdGlvbmFsS2V5cyIsInJlbW92ZWRUcmFuc2Zvcm1WYWx1ZXMiLCJoYXNBdHRlbXB0ZWRUb1JlbW92ZVRyYW5zZm9ybVZhbHVlcyIsImNoYW5nZWRWYWx1ZVR5cGVLZXlzIiwidG9UeXBlIiwiZnJvbVR5cGUiLCJudW1LZXlmcmFtZXMiLCJmcm9tSW5kZXgiLCJyZW1vdmVkVHJhbnNmb3JtcyIsInJlbW92ZU5vblRyYW5zbGF0aW9uYWxUcmFuc2Zvcm0iLCJzY3JvbGxZXzEiLCJwYWdlWU9mZnNldCIsImNvbnZlcnRlZFRhcmdldCIsImNoYW5nZWRLZXlzIiwib3JpZ2luQmJveCIsImVsZW1lbnRDb21wdXRlZFN0eWxlIiwiZGlzcGxheSIsInRhcmdldEJib3giLCJjb252ZXJ0Q2hhbmdlZFZhbHVlVHlwZXMiLCJzY3JvbGxUbyIsImNoZWNrQW5kQ29udmVydENoYW5nZWRWYWx1ZVR5cGVzIiwidW5pdENvbnZlcnNpb24iLCJodG1sQ29uZmlnIiwiZG9tRWxlbWVudCIsImRlZmF1bHRUeXBlIiwiY29tcHV0ZWRTdHlsZSIsImNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIiwicmVzZXRUcmFuc2Zvcm0iLCJyZXN0b3JlVHJhbnNmb3JtIiwibXV0YWJsZVN0YXRlIiwiZ2V0T3JpZ2luIiwibmV3VmFsdWVLZXlzIiwibnVtTmV3VmFsdWVzIiwidGFyZ2V0VmFsdWUiLCJjaGVja1RhcmdldEZvck5ld1ZhbHVlcyIsImh0bWxWaXN1YWxFbGVtZW50Iiwic3ZnVmlzdWFsRWxlbWVudCIsImdldEF0dHJpYnV0ZSIsIl9lbGVtZW50IiwicGl4ZWxzVG9QZXJjZW50IiwicGl4ZWxzIiwiY29ycmVjdEJvcmRlclJhZGl1cyIsImNvcnJlY3QiLCJub2RlIiwidmFyVG9rZW4iLCJjb3JyZWN0Qm94U2hhZG93IiwidHJlZVNjYWxlIiwicHJvamVjdGlvbkRlbHRhIiwib3JpZ2luYWwiLCJjb250YWluc0NTU1ZhcmlhYmxlcyIsImNzc1ZhcmlhYmxlcyIsInNoYWRvdyIsInhTY2FsZSIsInlTY2FsZSIsImF2ZXJhZ2VTY2FsZSIsImlfMSIsImNzc1ZhcmlhYmxlIiwiTWVhc3VyZUxheW91dFdpdGhDb250ZXh0IiwiY29tcG9uZW50RGlkTW91bnQiLCJjb3JyZWN0b3JzIiwibGF5b3V0R3JvdXAiLCJzd2l0Y2hMYXlvdXRHcm91cCIsImRlZmF1bHRTY2FsZUNvcnJlY3RvcnMiLCJncm91cCIsImRpZFVwZGF0ZSIsInByZXZQcm9wcyIsImxheW91dERlcGVuZGVuY3kiLCJ3aWxsVXBkYXRlIiwicHJvbW90ZSIsInJlbGVnYXRlIiwiZ2V0U3RhY2siLCJtZW1iZXJzIiwiaXNMZWFkIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJwcm9tb3RlQ29udGV4dCIsInNjaGVkdWxlQ2hlY2tBZnRlclVubW91bnQiLCJkZXJlZ2lzdGVyIiwiYXBwbHlUbyIsImJveFNoYWRvdyIsImxheW91dEZlYXR1cmVzIiwiYm9yZGVycyIsIm51bUJvcmRlcnMiLCJhc051bWJlciIsImlzUHgiLCJnZXRSYWRpdXMiLCJyYWRpdXNOYW1lIiwiZWFzZUNyb3NzZmFkZUluIiwiY29tcHJlc3MiLCJlYXNlQ3Jvc3NmYWRlT3V0IiwiY29weUF4aXNJbnRvIiwib3JpZ2luQXhpcyIsImNvcHlCb3hJbnRvIiwib3JpZ2luQm94IiwicmVtb3ZlUG9pbnREZWx0YSIsInJlbW92ZUF4aXNUcmFuc2Zvcm1zIiwic291cmNlQXhpcyIsInJlbW92ZUF4aXNEZWx0YSIsInJlbW92ZUJveFRyYW5zZm9ybXMiLCJzb3VyY2VCb3giLCJpc0F4aXNEZWx0YVplcm8iLCJpc0RlbHRhWmVybyIsImJveEVxdWFscyIsIk5vZGVTdGFjayIsInByZXZMZWFkIiwibGVhZCIsImluZGV4T2ZOb2RlIiwibWVtYmVyIiwicHJlc2VydmVGb2xsb3dPcGFjaXR5Iiwic2hvdyIsInJlc3VtZUZyb20iLCJwcmVzZXJ2ZU9wYWNpdHkiLCJzbmFwc2hvdCIsImFuaW1hdGlvblZhbHVlcyIsImlzU2hhcmVkIiwiaXNVcGRhdGluZyIsImlzTGF5b3V0RGlydHkiLCJjcm9zc2ZhZGUiLCJoaWRlIiwiZXhpdEFuaW1hdGlvbkNvbXBsZXRlIiwicmVzdW1pbmdGcm9tIiwicmVtb3ZlTGVhZFNuYXBzaG90IiwiaWRlbnRpdHlQcm9qZWN0aW9uIiwiYnVpbGRQcm9qZWN0aW9uVHJhbnNmb3JtIiwibGF0ZXN0VHJhbnNmb3JtIiwieFRyYW5zbGF0ZSIsInlUcmFuc2xhdGUiLCJlbGVtZW50U2NhbGVYIiwiZWxlbWVudFNjYWxlWSIsImNvbXBhcmVCeURlcHRoIiwiRmxhdFRyZWUiLCJpc0RpcnR5IiwiYW5pbWF0aW9uVGFyZ2V0IiwiY3JlYXRlUHJvamVjdGlvbk5vZGUiLCJhdHRhY2hSZXNpemVMaXN0ZW5lciIsImRlZmF1bHRQYXJlbnQiLCJtZWFzdXJlU2Nyb2xsIiwiY2hlY2tJc1Njcm9sbFJvb3QiLCJQcm9qZWN0aW9uTm9kZSIsImlzVHJlZUFuaW1hdGluZyIsInVwZGF0ZU1hbnVhbGx5QmxvY2tlZCIsInVwZGF0ZUJsb2NrZWRCeVJlc2l6ZSIsImlzU1ZHIiwibmVlZHNSZXNldCIsInNob3VsZFJlc2V0VHJhbnNmb3JtIiwiZXZlbnRIYW5kbGVycyIsInBvdGVudGlhbE5vZGVzIiwiY2hlY2tVcGRhdGVGYWlsZWQiLCJjbGVhckFsbFNuYXBzaG90cyIsInVwZGF0ZVByb2plY3Rpb24iLCJub2RlcyIsInJlc29sdmVUYXJnZXREZWx0YSIsImNhbGNQcm9qZWN0aW9uIiwiaGFzUHJvamVjdGVkIiwiYW5pbWF0aW9uUHJvZ3Jlc3MiLCJzaGFyZWROb2RlcyIsInBhdGgiLCJyZWdpc3RlclBvdGVudGlhbE5vZGUiLCJub3RpZnlMaXN0ZW5lcnMiLCJzdWJzY3JpcHRpb25NYW5hZ2VyIiwiaGFzTGlzdGVuZXJzIiwiU1ZHRWxlbWVudCIsInRhZ05hbWUiLCJ1bmJsb2NrVGltZW91dF8xIiwicmVzaXplVW5ibG9ja1VwZGF0ZV8xIiwiZmluaXNoQW5pbWF0aW9uIiwicmVnaXN0ZXJTaGFyZWROb2RlIiwiaGFzUmVsYXRpdmVUYXJnZXRDaGFuZ2VkIiwibmV3TGF5b3V0IiwiaXNUcmVlQW5pbWF0aW9uQmxvY2tlZCIsInJlbGF0aXZlVGFyZ2V0IiwibGF5b3V0VHJhbnNpdGlvbiIsImRlZmF1bHRMYXlvdXRUcmFuc2l0aW9uIiwiX2ciLCJvbkxheW91dEFuaW1hdGlvblN0YXJ0Iiwib25MYXlvdXRBbmltYXRpb25Db21wbGV0ZSIsInRhcmdldENoYW5nZWQiLCJ0YXJnZXRMYXlvdXQiLCJoYXNPbmx5UmVsYXRpdmVUYXJnZXRDaGFuZ2VkIiwic2V0QW5pbWF0aW9uT3JpZ2luIiwiYW5pbWF0aW9uT3B0aW9ucyIsInByZVJlbmRlciIsImJsb2NrVXBkYXRlIiwidW5ibG9ja1VwZGF0ZSIsImlzVXBkYXRlQmxvY2tlZCIsInN0YXJ0VXBkYXRlIiwicmVzZXRSb3RhdGlvbiIsInNob3VsZE5vdGlmeUxpc3RlbmVycyIsInByZXZUcmFuc2Zvcm1UZW1wbGF0ZVZhbHVlIiwidXBkYXRlU25hcHNob3QiLCJjbGVhck1lYXN1cmVtZW50cyIsIm1vdW50Tm9kZUVhcmx5IiwicmVzZXRUcmFuc2Zvcm1TdHlsZSIsIm5vdGlmeUxheW91dFVwZGF0ZSIsImNsZWFyU25hcHNob3QiLCJyZW1vdmVMZWFkU25hcHNob3RzIiwic2NoZWR1bGVVcGRhdGVQcm9qZWN0aW9uIiwibWVhc3VyZWQiLCJtZWFzdXJlIiwicmVtb3ZlVHJhbnNmb3JtIiwicmVtb3ZlRWxlbWVudFNjcm9sbCIsInJvdW5kQm94IiwicHJldkxheW91dCIsImxheW91dENvcnJlY3RlZCIsIm5vdGlmeUxheW91dE1lYXN1cmUiLCJpc1Njcm9sbFJvb3QiLCJpc1Jlc2V0UmVxdWVzdGVkIiwiaGFzUHJvamVjdGlvbiIsInRyYW5zZm9ybVRlbXBsYXRlVmFsdWUiLCJ0cmFuc2Zvcm1UZW1wbGF0ZUhhc0NoYW5nZWQiLCJib3hXaXRob3V0U2Nyb2xsIiwic2Nyb2xsXzEiLCJyb290U2Nyb2xsIiwiYXBwbHlUcmFuc2Zvcm0iLCJ0cmFuc2Zvcm1Pbmx5Iiwid2l0aFRyYW5zZm9ybXMiLCJib3hXaXRob3V0VHJhbnNmb3JtIiwic2V0VGFyZ2V0RGVsdGEiLCJ0YXJnZXREZWx0YSIsInJlbGF0aXZlUGFyZW50IiwiZ2V0Q2xvc2VzdFByb2plY3RpbmdQYXJlbnQiLCJyZWxhdGl2ZVRhcmdldE9yaWdpbiIsInRhcmdldFdpdGhUcmFuc2Zvcm1zIiwiYXR0ZW1wdFRvUmVzb2x2ZVJlbGF0aXZlVGFyZ2V0IiwicGVuZGluZ0FuaW1hdGlvbiIsImdldExlYWQiLCJ0cmVlUGF0aCIsImlzU2hhcmVkVHJhbnNpdGlvbiIsInRyZWVMZW5ndGgiLCJhcHBseVRyZWVEZWx0YXMiLCJwcm9qZWN0aW9uRGVsdGFXaXRoVHJhbnNmb3JtIiwicHJldlRyZWVTY2FsZVgiLCJwcmV2VHJlZVNjYWxlWSIsInByZXZQcm9qZWN0aW9uVHJhbnNmb3JtIiwicHJvamVjdGlvblRyYW5zZm9ybSIsIm5vdGlmeUFsbCIsInNuYXBzaG90TGF0ZXN0VmFsdWVzIiwibWl4ZWRWYWx1ZXMiLCJyZWxhdGl2ZUxheW91dCIsImlzU2hhcmVkTGF5b3V0QW5pbWF0aW9uIiwiaXNPbmx5TWVtYmVyIiwic2hvdWxkQ3Jvc3NmYWRlT3BhY2l0eSIsImhhc09wYWNpdHlDcm9zc2ZhZGUiLCJtaXhUYXJnZXREZWx0YSIsIm1peEF4aXNEZWx0YSIsIm1peEF4aXMiLCJmb2xsb3ciLCJvcGFjaXR5RXhpdCIsImJvcmRlckxhYmVsIiwiZm9sbG93UmFkaXVzIiwibGVhZFJhZGl1cyIsIm1peFZhbHVlcyIsImNvbXBsZXRlQW5pbWF0aW9uIiwiYXBwbHlUcmFuc2Zvcm1zVG9UYXJnZXQiLCJzaG91bGRQcmVzZXJ2ZUZvbGxvd09wYWNpdHkiLCJzdGFjayIsImdldFByZXZMZWFkIiwiaGFzUm90YXRlIiwicmVzZXRWYWx1ZXMiLCJzdHlsZXMiLCJwb2ludGVyRXZlbnRzIiwiZW1wdHlTdHlsZXMiLCJ2YWx1ZXNUb1JlbmRlciIsIl9oIiwiY29ycmVjdGVkIiwibnVtIiwicmVzZXRUcmVlIiwibGF5b3V0XzEiLCJtZWFzdXJlZExheW91dCIsImF4aXNTbmFwc2hvdCIsImxheW91dERlbHRhIiwidmlzdWFsRGVsdGEiLCJwYXJlbnRTbmFwc2hvdCIsInBhcmVudExheW91dCIsInJlbGF0aXZlU25hcHNob3QiLCJvbkJlZm9yZUxheW91dE1lYXN1cmUiLCJub3RpZnlCZWZvcmVMYXlvdXRNZWFzdXJlIiwic2VhcmNoTm9kZSIsInF1ZXJ5U2VsZWN0b3IiLCJyb3VuZEF4aXMiLCJEb2N1bWVudFByb2plY3Rpb25Ob2RlIiwiZG9jdW1lbnRFbGVtZW50Iiwic2Nyb2xsTGVmdCIsImJvZHkiLCJzY3JvbGxUb3AiLCJkb2N1bWVudE5vZGUiLCJwb3NpdGlvbiIsImZlYXR1cmVCdW5kbGUiLCJtb3Rpb24iLCJiYXNlQ29uZmlnIiwiQXBwUGF0aHMiLCJTSE9XUk9PTSIsIlNFTkRPVVRTIiwiU0VORE9VVFNfQ01TIiwiTUFSS0VUSU5HX0VOR0lORSIsIlVTRVJfTUFOQUdFTUVOVCIsIlRFTkFOVFMiLCJEQVNIQk9BUkQiLCJEQVNIQk9BUkRfQ1JFQVRFX1dPUktTUEFDRV9NT0RBTCIsIkNSRUFURV9XT1JLU1BBQ0UiLCJTRVRUSU5HUyIsIklOU1RPUkVfQURNSU4iLCJTVVBFUkFETUlOIiwiQ01TIiwiSU5TVE9SRSIsIlRFTkFOVFNfVElFUl9XSURUSCIsIkFQUExJQ0FUSU9OU19USUVSX1dJRFRIIiwiTmF2aWdhdGlvblBvc2l0aW9uIiwiTmF2aWdhdGlvbkNvbnRleHQiLCJ1c2VOYXZpZ2F0aW9uQ29udGV4dCIsIk5hdmlnYXRpb25Db250ZXh0UHJvdmlkZXIiLCJpc09wZW4iLCJvbk5hdmlnYXRpb25DbG9zZSIsInRlbmFudElkIiwiVGVuYW50SWRDb250ZXh0Iiwidmlld1N0YXRlIiwic2V0Vmlld1N0YXRlIiwic2VsZWN0ZWRUZW5hbnRJZCIsImN1cnJlbnRQb3NpdGlvbiIsIkhJRERFTiIsInVzZXIiLCJhdXRoU2VydmljZSIsImNhblNpZ25PdXQiLCJBdXRoQ29udGV4dCIsInByZXZWaWV3U3RhdGUiLCJPUEVOIiwicmVmcmVzaFVzZXIiLCJoYXNNYXJrZXRpbmdFbmdpbmVBY2Nlc3MiLCJ1c2VySGFzVGVuYW50QWNjZXNzIiwiUHJpdmlsZWdlcyIsImhhc1Nob3dyb29tQWNjZXNzIiwiaGFzU2VuZG91dHNBY2Nlc3MiLCJoYXNDbXNBY2Nlc3MiLCJoYXNVc2VyTWFuYWdlbWVudEFjY2VzcyIsImhhc1VuaXZlcnNhbEFjY2VzcyIsImhhc1NldHRpbmdzQWNjZXNzIiwiaGFzSW5zdG9yZUFjY2VzcyIsInVwZGF0ZVZpZXdTdGF0ZSIsInZpZXdTdGF0ZVVwZGF0ZSIsInNpZ25PdXQiLCJ0b2dnbGVUZW5hbnRzIiwiRVhQQU5ERUQiLCJjdHgiLCJvdXQiLCJ0bXAiLCJrIiwidXNlVGVuYW50cyIsImFwaSIsInVzZUFwaSIsInVybCIsImJhc2VVcmwiLCJURU5BTlRTX1NFUlZJQ0VfVVJMIiwiUkVBQ1RfQVBQX1RFTkFOVFNfU0VSVklDRV9VUkwiLCJFcnJvciIsImNyZWF0ZVVybCIsImNyZWF0ZVRlbmFudHNWaWV3VXJsIiwiZGF0YSIsInRlbmFudHMiLCJpc0xvYWRpbmciLCJ0ZW5hbnQiLCJJbWFnZSIsInNyYyIsImxvZ29VcmwiLCJoZWFkZXIiLCJmb290ZXIiLCJjbGFzc05hbWUiLCJzaG93SGVhZGVyQm9yZGVyIiwiaGlkZGVuIiwiZGlzYWJsZWQiLCJvbkNsaWNrIiwiY3VycmVudFRlbmFudElkIiwic2V0Q3VycmVudFRlbmFudElkIiwiaXNSZWRpcmVjdGluZyIsInNldElzUmVkaXJlY3RpbmciLCJoYW5kbGVVbmxvYWQiLCJoYW5kbGVDbGljayIsImxvY2F0aW9uIiwibWF0Y2hQYXRoIiwicGF0aG5hbWUiLCJCdXR0b24iLCJhbGlnbiIsIm5vQm9yZGVyIiwibm9TaGFkb3ciLCJzZWxlY3RlZFRlbmFudCIsInVzZVNlbGVjdGVkVGVuYW50IiwidGVuYW50SGFzU3Vic2NyaXB0aW9uUGxhbiIsInBsYW5OYW1lIiwic3Vic2NyaXB0aW9uRXJyb3JTdGF0ZSIsInNldFN1YnNjcmlwdGlvbkVycm9yU3RhdGUiLCJzdWJzY3JpcHRpb25TZXNzaW9uUGVuZGluZyIsInNldFN1YnNjcmlwdGlvblNlc3Npb25QZW5kaW5nIiwibWFuYWdlU3Vic2NyaXB0aW9uIiwiY3JlYXRlU3Vic2NyaXB0aW9uTWFuYWdlbWVudFNlc3Npb25VcmwiLCJyZXR1cm5VcmwiLCJyZXR1cm5VcmxOb3JtYWxpemVkIiwic2V0SGVhZGVyIiwicG9zdCIsInVzZU1hbmFnZVN1YnNjcmlwdGlvbiIsImNyZWF0ZVNlc3Npb24iLCJzZXRTZWxlY3RlZFRlbmFudEFzQ3VycmVudCIsInRleHQiLCJvayIsIkljb24iLCJ0cmFuc3BhcmVudCIsImFsdCIsImZpcnN0TmFtZSIsImxhc3ROYW1lIiwiZW1haWwiLCJFWFBBTkRFRF9OQVZJR0FUSU9OX1dJRFRIIiwiQU5JTUFUSU9OX1RSQU5TSVRJT04iLCJBTklNQVRJT05fVkFSSUFOVFMiLCJwb3J0YWxDb250YWluZXIiLCJvbkNsb3NlIiwiQ29uc3VtZXIiLCJjcmVhdGVQb3J0YWwiLCJkaXYiLCJtZW51IiwiaXNOYXZpZ2F0aW9uT3BlbiIsInRvZ2dsZUlzTmF2aWdhdGlvbk9wZW4iLCJpbml0aWFsVmFsdWUiLCJzZXRWYWx1ZSIsIm5ld1ZhbHVlIiwidXNlVG9nZ2xlIiwiRnJhZ21lbnQiLCJJY29uQnV0dG9uIl0sInNvdXJjZVJvb3QiOiIifQ==
|
|
1
|
+
(()=>{"use strict";var t={n:e=>{var n=e&&e.__esModule?()=>e.default:()=>e;return t.d(n,{a:n}),n},d:(e,n)=>{for(var r in n)t.o(n,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:n[r]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{APPLICATIONS_TIER_WIDTH:()=>$a,AppPaths:()=>qa,Navigation:()=>ou,NavigationButton:()=>au,TENANTS_TIER_WIDTH:()=>Ka});var n=function(t,e){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(t,e){t.__proto__=e}||function(t,e){for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(t[n]=e[n])},n(t,e)};function r(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Class extends value "+String(e)+" is not a constructor or null");function r(){this.constructor=t}n(t,e),t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r)}var o=function(){return o=Object.assign||function(t){for(var e,n=1,r=arguments.length;n<r;n++)for(var o in e=arguments[n])Object.prototype.hasOwnProperty.call(e,o)&&(t[o]=e[o]);return t},o.apply(this,arguments)};function i(t,e){var n={};for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.indexOf(r)<0&&(n[r]=t[r]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(t);o<r.length;o++)e.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(t,r[o])&&(n[r[o]]=t[r[o]])}return n}function a(t,e,n,r){return new(n||(n=Promise))((function(o,i){function a(t){try{u(r.next(t))}catch(t){i(t)}}function s(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var e;t.done?o(t.value):(e=t.value,e instanceof n?e:new n((function(t){t(e)}))).then(a,s)}u((r=r.apply(t,e||[])).next())}))}function s(t,e){var n="function"==typeof Symbol&&t[Symbol.iterator];if(!n)return t;var r,o,i=n.call(t),a=[];try{for(;(void 0===e||e-- >0)&&!(r=i.next()).done;)a.push(r.value)}catch(t){o={error:t}}finally{try{r&&!r.done&&(n=i.return)&&n.call(i)}finally{if(o)throw o.error}}return a}function u(t,e,n){if(n||2===arguments.length)for(var r,o=0,i=e.length;o<i;o++)!r&&o in e||(r||(r=Array.prototype.slice.call(e,0,o)),r[o]=e[o]);return t.concat(r||Array.prototype.slice.call(e))}Object.create,Object.create;const l=require("react");var c=t.n(l),d=("undefined"==typeof process||process.env,"production");const f=1/60*1e3,p="undefined"!=typeof performance?()=>performance.now():()=>Date.now(),v="undefined"!=typeof window?t=>window.requestAnimationFrame(t):t=>setTimeout((()=>t(p())),f);let h=!0,m=!1,g=!1;const y={delta:0,timestamp:0},E=["read","update","preRender","render","postRender"],x=E.reduce(((t,e)=>(t[e]=function(t){let e=[],n=[],r=0,o=!1,i=!1;const a=new WeakSet,s={schedule:(t,i=!1,s=!1)=>{const u=s&&o,l=u?e:n;return i&&a.add(t),-1===l.indexOf(t)&&(l.push(t),u&&o&&(r=e.length)),t},cancel:t=>{const e=n.indexOf(t);-1!==e&&n.splice(e,1),a.delete(t)},process:u=>{if(o)i=!0;else{if(o=!0,[e,n]=[n,e],n.length=0,r=e.length,r)for(let n=0;n<r;n++){const r=e[n];r(u),a.has(r)&&(s.schedule(r),t())}o=!1,i&&(i=!1,s.process(u))}}};return s}((()=>m=!0)),t)),{}),b=E.reduce(((t,e)=>{const n=x[e];return t[e]=(t,e=!1,r=!1)=>(m||P(),n.schedule(t,e,r)),t}),{}),w=E.reduce(((t,e)=>(t[e]=x[e].cancel,t)),{}),T=E.reduce(((t,e)=>(t[e]=()=>x[e].process(y),t)),{}),S=t=>x[t].process(y),A=t=>{m=!1,y.delta=h?f:Math.max(Math.min(t-y.timestamp,40),1),y.timestamp=t,g=!0,E.forEach(S),g=!1,m&&(h=!1,v(A))},P=()=>{m=!0,h=!0,g||v(A)},C=()=>y,M=b;var V="undefined"!=typeof document,R=V?l.useLayoutEffect:l.useEffect;function O(){var t=(0,l.useRef)(!1);return R((function(){return t.current=!0,function(){t.current=!1}}),[]),t}var D=(0,l.createContext)(null);function L(t){var e=(0,l.useRef)(null);return null===e.current&&(e.current=t()),e.current}var k=0,N=function(){return k++},I=function(){return L(N)},j=function(t){var e=t.children,n=t.initial,r=t.isPresent,o=t.onExitComplete,i=t.custom,a=t.presenceAffectsLayout,s=L(U),u=I(),c=(0,l.useMemo)((function(){return{id:u,initial:n,isPresent:r,custom:i,onExitComplete:function(t){var e,n;s.set(t,!0);try{for(var r=function(t){var e="function"==typeof Symbol&&Symbol.iterator,n=e&&t[e],r=0;if(n)return n.call(t);if(t&&"number"==typeof t.length)return{next:function(){return t&&r>=t.length&&(t=void 0),{value:t&&t[r++],done:!t}}};throw new TypeError(e?"Object is not iterable.":"Symbol.iterator is not defined.")}(s.values()),i=r.next();!i.done;i=r.next())if(!i.value)return}catch(t){e={error:t}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(e)throw e.error}}null==o||o()},register:function(t){return s.set(t,!1),function(){return s.delete(t)}}}}),a?void 0:[r]);return(0,l.useMemo)((function(){s.forEach((function(t,e){return s.set(e,!1)}))}),[r]),l.useEffect((function(){!r&&!s.size&&(null==o||o())}),[r]),l.createElement(D.Provider,{value:c},e)};function U(){return new Map}var B=(0,l.createContext)({});function F(t){return(0,l.useEffect)((function(){return function(){return t()}}),[])}var _=function(t){return t.key||""},H=function(t){var e=t.children,n=t.custom,r=t.initial,o=void 0===r||r,i=t.onExitComplete,a=t.exitBeforeEnter,c=t.presenceAffectsLayout,f=void 0===c||c,p=s(function(){var t=O(),e=s((0,l.useState)(0),2),n=e[0],r=e[1],o=(0,l.useCallback)((function(){t.current&&r(n+1)}),[n]);return[(0,l.useCallback)((function(){return M.postRender(o)}),[o]),n]}(),1),v=p[0],h=(0,l.useContext)(B).forceRender;h&&(v=h);var m=O(),g=function(t){var e=[];return l.Children.forEach(t,(function(t){(0,l.isValidElement)(t)&&e.push(t)})),e}(e),y=g,E=new Set,x=(0,l.useRef)(y),b=(0,l.useRef)(new Map).current,w=(0,l.useRef)(!0);if(R((function(){w.current=!1,function(t,e){t.forEach((function(t){var n=_(t);e.set(n,t)}))}(g,b),x.current=y})),F((function(){w.current=!0,b.clear(),E.clear()})),w.current)return l.createElement(l.Fragment,null,y.map((function(t){return l.createElement(j,{key:_(t),isPresent:!0,initial:!!o&&void 0,presenceAffectsLayout:f},t)})));y=u([],s(y),!1);for(var T=x.current.map(_),S=g.map(_),A=T.length,P=0;P<A;P++){var C=T[P];-1===S.indexOf(C)&&E.add(C)}return a&&E.size&&(y=[]),E.forEach((function(t){if(-1===S.indexOf(t)){var e=b.get(t);if(e){var r=T.indexOf(t);y.splice(r,0,l.createElement(j,{key:_(e),isPresent:!1,onExitComplete:function(){b.delete(t),E.delete(t);var e=x.current.findIndex((function(e){return e.key===t}));if(x.current.splice(e,1),!E.size){if(x.current=g,!1===m.current)return;v(),i&&i()}},custom:n,presenceAffectsLayout:f},e))}}})),y=y.map((function(t){var e=t.key;return E.has(e)?t:l.createElement(j,{key:_(t),isPresent:!0,presenceAffectsLayout:f},t)})),"production"!==d&&a&&y.length>1&&console.warn("You're attempting to animate multiple children within AnimatePresence, but its exitBeforeEnter prop is set to true. This will lead to odd visual behaviour."),l.createElement(l.Fragment,null,E.size?y:y.map((function(t){return(0,l.cloneElement)(t)})))},z=function(t){return{isEnabled:function(e){return t.some((function(t){return!!e[t]}))}}},W={measureLayout:z(["layout","layoutId","drag"]),animation:z(["animate","exit","variants","whileHover","whileTap","whileFocus","whileDrag","whileInView"]),exit:z(["exit"]),drag:z(["drag","dragControls"]),focus:z(["whileFocus"]),hover:z(["whileHover","onHoverStart","onHoverEnd"]),tap:z(["whileTap","onTap","onTapStart","onTapCancel"]),pan:z(["onPan","onPanStart","onPanSessionStart","onPanEnd"]),inView:z(["whileInView","onViewportEnter","onViewportLeave"])},G=function(){},X=function(){},Y=(0,l.createContext)({strict:!1}),Z=Object.keys(W),q=Z.length,K=(0,l.createContext)({transformPagePoint:function(t){return t},isStatic:!1,reducedMotion:"never"}),$=(0,l.createContext)({}),Q={current:null},J=!1;function tt(t,e,n,r){var o,i,a=(0,l.useContext)(Y),u=(0,l.useContext)($).visualElement,c=(0,l.useContext)(D),d=(!J&&function(){if(J=!0,V)if(window.matchMedia){var t=window.matchMedia("(prefers-reduced-motion)"),e=function(){return Q.current=t.matches};t.addListener(e),e()}else Q.current=!1}(),o=s((0,l.useState)(Q.current),1)[0],"never"!==(i=(0,l.useContext)(K).reducedMotion)&&("always"===i||o)),f=(0,l.useRef)(void 0);r||(r=a.renderer),!f.current&&r&&(f.current=r(t,{visualState:e,parent:u,props:n,presenceId:null==c?void 0:c.id,blockInitialAnimation:!1===(null==c?void 0:c.initial),shouldReduceMotion:d}));var p=f.current;return R((function(){null==p||p.syncRender()})),(0,l.useEffect)((function(){var t;null===(t=null==p?void 0:p.animationState)||void 0===t||t.animateChanges()})),R((function(){return function(){return null==p?void 0:p.notifyUnmount()}}),[]),p}function et(t){return"object"==typeof t&&Object.prototype.hasOwnProperty.call(t,"current")}function nt(t){return Array.isArray(t)}function rt(t){return"string"==typeof t||nt(t)}function ot(t,e,n,r,o){var i;return void 0===r&&(r={}),void 0===o&&(o={}),"function"==typeof e&&(e=e(null!=n?n:t.custom,r,o)),"string"==typeof e&&(e=null===(i=t.variants)||void 0===i?void 0:i[e]),"function"==typeof e&&(e=e(null!=n?n:t.custom,r,o)),e}function it(t,e,n){var r=t.getProps();return ot(r,e,null!=n?n:r.custom,function(t){var e={};return t.forEachValue((function(t,n){return e[n]=t.get()})),e}(t),function(t){var e={};return t.forEachValue((function(t,n){return e[n]=t.getVelocity()})),e}(t))}function at(t){var e;return"function"==typeof(null===(e=t.animate)||void 0===e?void 0:e.start)||rt(t.initial)||rt(t.animate)||rt(t.whileHover)||rt(t.whileDrag)||rt(t.whileTap)||rt(t.whileFocus)||rt(t.exit)}function st(t){return Boolean(at(t)||t.variants)}function ut(t){return Array.isArray(t)?t.join(" "):t}var lt={hasAnimatedSinceResize:!0,hasEverUpdated:!1},ct=1,dt=(0,l.createContext)({}),ft=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.getSnapshotBeforeUpdate=function(){return this.updateProps(),null},e.prototype.componentDidUpdate=function(){},e.prototype.updateProps=function(){var t=this.props,e=t.visualElement,n=t.props;e&&e.setProps(n)},e.prototype.render=function(){return this.props.children},e}(l.Component);function pt(t){var e=t.preloadedFeatures,n=t.createVisualElement,r=t.projectionNodeConstructor,i=t.useRender,a=t.useVisualState,s=t.Component;return e&&function(t){for(var e in t)null!==t[e]&&("projectionNodeConstructor"===e?W.projectionNodeConstructor=t[e]:W[e].Component=t[e])}(e),(0,l.forwardRef)((function(t,u){var c=function(t){var e,n=t.layoutId,r=null===(e=(0,l.useContext)(B))||void 0===e?void 0:e.id;return r&&void 0!==n?r+"-"+n:n}(t);t=o(o({},t),{layoutId:c});var f=(0,l.useContext)(K),p=null,v=function(t){var e=function(t,e){if(at(t)){var n=t.initial,r=t.animate;return{initial:!1===n||rt(n)?n:void 0,animate:rt(r)?r:void 0}}return!1!==t.inherit?e:{}}(t,(0,l.useContext)($)),n=e.initial,r=e.animate;return(0,l.useMemo)((function(){return{initial:n,animate:r}}),[ut(n),ut(r)])}(t),h=f.isStatic?void 0:L((function(){if(lt.hasEverUpdated)return ct++})),m=a(t,f.isStatic);return!f.isStatic&&V&&(v.visualElement=tt(s,m,o(o({},f),t),n),function(t,e,n,r){var o,i=e.layoutId,a=e.layout,s=e.drag,u=e.dragConstraints,c=e.layoutScroll,d=(0,l.useContext)(dt);r&&n&&!(null==n?void 0:n.projection)&&(n.projection=new r(t,n.getLatestValues(),null===(o=n.parent)||void 0===o?void 0:o.projection),n.projection.setOptions({layoutId:i,layout:a,alwaysMeasureLayout:Boolean(s)||u&&et(u),visualElement:n,scheduleRender:function(){return n.scheduleRender()},animationType:"string"==typeof a?a:"both",initialPromotionConfig:d,layoutScroll:c}))}(h,t,v.visualElement,r||W.projectionNodeConstructor),p=function(t,e,n){var r=[],i=(0,l.useContext)(Y);if(!e)return null;"production"!==d&&n&&i.strict&&X(!1,"You have rendered a `motion` component within a `LazyMotion` component. This will break tree shaking. Import and render a `m` component instead.");for(var a=0;a<q;a++){var s=Z[a],u=W[s],c=u.isEnabled,f=u.Component;c(t)&&f&&r.push(l.createElement(f,o({key:s},t,{visualElement:e})))}return r}(t,v.visualElement,e)),l.createElement(ft,{visualElement:v.visualElement,props:o(o({},f),t)},p,l.createElement($.Provider,{value:v},i(s,t,h,function(t,e,n){return(0,l.useCallback)((function(r){var o;r&&(null===(o=t.mount)||void 0===o||o.call(t,r)),e&&(r?e.mount(r):e.unmount()),n&&("function"==typeof n?n(r):et(n)&&(n.current=r))}),[e])}(m,v.visualElement,u),m,f.isStatic,v.visualElement)))}))}function vt(t){function e(e,n){return void 0===n&&(n={}),pt(t(e,n))}if("undefined"==typeof Proxy)return e;var n=new Map;return new Proxy(e,{get:function(t,r){return n.has(r)||n.set(r,e(r)),n.get(r)}})}var ht=["animate","circle","defs","desc","ellipse","g","image","line","filter","marker","mask","metadata","path","pattern","polygon","polyline","rect","stop","svg","switch","symbol","text","tspan","use","view"];function mt(t){return"string"==typeof t&&!t.includes("-")&&!!(ht.indexOf(t)>-1||/[A-Z]/.test(t))}var gt={},yt=["","X","Y","Z"],Et=["transformPerspective","x","y","z"];function xt(t,e){return Et.indexOf(t)-Et.indexOf(e)}["translate","scale","rotate","skew"].forEach((function(t){return yt.forEach((function(e){return Et.push(t+e)}))}));var bt=new Set(Et);function wt(t){return bt.has(t)}var Tt=new Set(["originX","originY","originZ"]);function St(t){return Tt.has(t)}function At(t,e){var n=e.layout,r=e.layoutId;return wt(t)||St(t)||(n||void 0!==r)&&(!!gt[t]||"opacity"===t)}var Pt=function(t){return Boolean(null!==t&&"object"==typeof t&&t.getVelocity)},Ct={x:"translateX",y:"translateY",z:"translateZ",transformPerspective:"perspective"};function Mt(t){return t.startsWith("--")}var Vt=function(t,e){return e&&"number"==typeof t?e.transform(t):t};const Rt=(t,e)=>n=>Math.max(Math.min(n,e),t),Ot=t=>t%1?Number(t.toFixed(5)):t,Dt=/(-)?([\d]*\.?[\d])+/g,Lt=/(#[0-9a-f]{6}|#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))/gi,kt=/^(#[0-9a-f]{3}|#(?:[0-9a-f]{2}){2,4}|(rgb|hsl)a?\((-?[\d\.]+%?[,\s]+){2,3}\s*\/*\s*[\d\.]+%?\))$/i;function Nt(t){return"string"==typeof t}const It=t=>({test:e=>Nt(e)&&e.endsWith(t)&&1===e.split(" ").length,parse:parseFloat,transform:e=>`${e}${t}`}),jt=It("deg"),Ut=It("%"),Bt=It("px"),Ft=It("vh"),_t=It("vw"),Ht=Object.assign(Object.assign({},Ut),{parse:t=>Ut.parse(t)/100,transform:t=>Ut.transform(100*t)}),zt={test:t=>"number"==typeof t,parse:parseFloat,transform:t=>t},Wt=Object.assign(Object.assign({},zt),{transform:Rt(0,1)}),Gt=Object.assign(Object.assign({},zt),{default:1});var Xt=o(o({},zt),{transform:Math.round}),Yt={borderWidth:Bt,borderTopWidth:Bt,borderRightWidth:Bt,borderBottomWidth:Bt,borderLeftWidth:Bt,borderRadius:Bt,radius:Bt,borderTopLeftRadius:Bt,borderTopRightRadius:Bt,borderBottomRightRadius:Bt,borderBottomLeftRadius:Bt,width:Bt,maxWidth:Bt,height:Bt,maxHeight:Bt,size:Bt,top:Bt,right:Bt,bottom:Bt,left:Bt,padding:Bt,paddingTop:Bt,paddingRight:Bt,paddingBottom:Bt,paddingLeft:Bt,margin:Bt,marginTop:Bt,marginRight:Bt,marginBottom:Bt,marginLeft:Bt,rotate:jt,rotateX:jt,rotateY:jt,rotateZ:jt,scale:Gt,scaleX:Gt,scaleY:Gt,scaleZ:Gt,skew:jt,skewX:jt,skewY:jt,distance:Bt,translateX:Bt,translateY:Bt,translateZ:Bt,x:Bt,y:Bt,z:Bt,perspective:Bt,transformPerspective:Bt,opacity:Wt,originX:Ht,originY:Ht,originZ:Bt,zIndex:Xt,fillOpacity:Wt,strokeOpacity:Wt,numOctaves:Xt};function Zt(t,e,n,r){var o,i=t.style,a=t.vars,s=t.transform,u=t.transformKeys,l=t.transformOrigin;u.length=0;var c=!1,d=!1,f=!0;for(var p in e){var v=e[p];if(Mt(p))a[p]=v;else{var h=Yt[p],m=Vt(v,h);if(wt(p)){if(c=!0,s[p]=m,u.push(p),!f)continue;v!==(null!==(o=h.default)&&void 0!==o?o:0)&&(f=!1)}else St(p)?(l[p]=m,d=!0):i[p]=m}}c?i.transform=function(t,e,n,r){var o=t.transform,i=t.transformKeys,a=e.enableHardwareAcceleration,s=void 0===a||a,u=e.allowTransformNone,l=void 0===u||u,c="";i.sort(xt);for(var d=!1,f=i.length,p=0;p<f;p++){var v=i[p];c+="".concat(Ct[v]||v,"(").concat(o[v],") "),"z"===v&&(d=!0)}return!d&&s?c+="translateZ(0)":c=c.trim(),r?c=r(o,n?"":c):l&&n&&(c="none"),c}(t,n,f,r):r?i.transform=r({},""):!e.transform&&i.transform&&(i.transform="none"),d&&(i.transformOrigin=function(t){var e=t.originX,n=void 0===e?"50%":e,r=t.originY,o=void 0===r?"50%":r,i=t.originZ,a=void 0===i?0:i;return"".concat(n," ").concat(o," ").concat(a)}(l))}var qt=function(){return{style:{},transform:{},transformKeys:[],transformOrigin:{},vars:{}}};function Kt(t,e,n){for(var r in e)Pt(e[r])||At(r,n)||(t[r]=e[r])}function $t(t,e,n){var r={},i=function(t,e,n){var r={};return Kt(r,t.style||{},t),Object.assign(r,function(t,e,n){var r=t.transformTemplate;return(0,l.useMemo)((function(){var t=qt();Zt(t,e,{enableHardwareAcceleration:!n},r);var i=t.vars,a=t.style;return o(o({},i),a)}),[e])}(t,e,n)),t.transformValues&&(r=t.transformValues(r)),r}(t,e,n);return Boolean(t.drag)&&!1!==t.dragListener&&(r.draggable=!1,i.userSelect=i.WebkitUserSelect=i.WebkitTouchCallout="none",i.touchAction=!0===t.drag?"none":"pan-".concat("x"===t.drag?"y":"x")),r.style=i,r}var Qt=new Set(["initial","animate","exit","style","variants","transition","transformTemplate","transformValues","custom","inherit","layout","layoutId","layoutDependency","onLayoutAnimationStart","onLayoutAnimationComplete","onLayoutMeasure","onBeforeLayoutMeasure","onAnimationStart","onAnimationComplete","onUpdate","onDragStart","onDrag","onDragEnd","onMeasureDragConstraints","onDirectionLock","onDragTransitionEnd","drag","dragControls","dragListener","dragConstraints","dragDirectionLock","dragSnapToOrigin","_dragX","_dragY","dragElastic","dragMomentum","dragPropagation","dragTransition","whileDrag","onPan","onPanStart","onPanEnd","onPanSessionStart","onTap","onTapStart","onTapCancel","onHoverStart","onHoverEnd","whileFocus","whileTap","whileHover","whileInView","onViewportEnter","onViewportLeave","viewport","layoutScroll"]);function Jt(t){return Qt.has(t)}var te,ee=function(t){return!Jt(t)};try{(te=require("@emotion/is-prop-valid").default)&&(ee=function(t){return t.startsWith("on")?!Jt(t):te(t)})}catch(t){}function ne(t,e,n){return"string"==typeof t?t:Bt.transform(e+n*t)}var re={offset:"stroke-dashoffset",array:"stroke-dasharray"},oe={offset:"strokeDashoffset",array:"strokeDasharray"};function ie(t,e,n,r){var o=e.attrX,a=e.attrY,s=e.originX,u=e.originY,l=e.pathLength,c=e.pathSpacing,d=void 0===c?1:c,f=e.pathOffset,p=void 0===f?0:f;Zt(t,i(e,["attrX","attrY","originX","originY","pathLength","pathSpacing","pathOffset"]),n,r),t.attrs=t.style,t.style={};var v=t.attrs,h=t.style,m=t.dimensions;v.transform&&(m&&(h.transform=v.transform),delete v.transform),m&&(void 0!==s||void 0!==u||h.transform)&&(h.transformOrigin=function(t,e,n){var r=ne(e,t.x,t.width),o=ne(n,t.y,t.height);return"".concat(r," ").concat(o)}(m,void 0!==s?s:.5,void 0!==u?u:.5)),void 0!==o&&(v.x=o),void 0!==a&&(v.y=a),void 0!==l&&function(t,e,n,r,o){void 0===n&&(n=1),void 0===r&&(r=0),void 0===o&&(o=!0),t.pathLength=1;var i=o?re:oe;t[i.offset]=Bt.transform(-r);var a=Bt.transform(e),s=Bt.transform(n);t[i.array]="".concat(a," ").concat(s)}(v,l,d,p,!1)}var ae=function(){return o(o({},qt()),{attrs:{}})};function se(t,e){var n=(0,l.useMemo)((function(){var n=ae();return ie(n,e,{enableHardwareAcceleration:!1},t.transformTemplate),o(o({},n.attrs),{style:o({},n.style)})}),[e]);if(t.style){var r={};Kt(r,t.style,t),n.style=o(o({},r),n.style)}return n}function ue(t){return void 0===t&&(t=!1),function(e,n,r,i,a,s){var u=a.latestValues,c=(mt(e)?se:$t)(n,u,s),d=function(t,e,n){var r={};for(var o in t)(ee(o)||!0===n&&Jt(o)||!e&&!Jt(o)||t.draggable&&o.startsWith("onDrag"))&&(r[o]=t[o]);return r}(n,"string"==typeof e,t),f=o(o(o({},d),c),{ref:i});return r&&(f["data-projection-id"]=r),(0,l.createElement)(e,f)}}var le=/([a-z])([A-Z])/g,ce=function(t){return t.replace(le,"$1-$2").toLowerCase()};function de(t,e,n,r){var o=e.style,i=e.vars;for(var a in Object.assign(t.style,o,r&&r.getProjectionStyles(n)),i)t.style.setProperty(a,i[a])}var fe=new Set(["baseFrequency","diffuseConstant","kernelMatrix","kernelUnitLength","keySplines","keyTimes","limitingConeAngle","markerHeight","markerWidth","numOctaves","targetX","targetY","surfaceScale","specularConstant","specularExponent","stdDeviation","tableValues","viewBox","gradientTransform","pathLength"]);function pe(t,e,n,r){for(var o in de(t,e,void 0,r),e.attrs)t.setAttribute(fe.has(o)?o:ce(o),e.attrs[o])}function ve(t){var e=t.style,n={};for(var r in e)(Pt(e[r])||At(r,t))&&(n[r]=e[r]);return n}function he(t){var e=ve(t);for(var n in t)Pt(t[n])&&(e["x"===n||"y"===n?"attr"+n.toUpperCase():n]=t[n]);return e}function me(t){return"object"==typeof t&&"function"==typeof t.start}var ge=function(t){return Array.isArray(t)},ye=function(t){return Boolean(t&&"object"==typeof t&&t.mix&&t.toValue)},Ee=function(t){return ge(t)?t[t.length-1]||0:t};function xe(t){var e=Pt(t)?t.get():t;return ye(e)?e.toValue():e}function be(t,e,n,r){var o=t.scrapeMotionValuesFromProps,i=t.createRenderState,a=t.onMount,s={latestValues:Te(e,n,r,o),renderState:i()};return a&&(s.mount=function(t){return a(e,t,s)}),s}var we=function(t){return function(e,n){var r=(0,l.useContext)($),o=(0,l.useContext)(D);return n?be(t,e,r,o):L((function(){return be(t,e,r,o)}))}};function Te(t,e,n,r){var o={},a=!1===(null==n?void 0:n.initial),s=r(t);for(var u in s)o[u]=xe(s[u]);var l=t.initial,c=t.animate,d=at(t),f=st(t);e&&f&&!d&&!1!==t.inherit&&(null!=l||(l=e.initial),null!=c||(c=e.animate));var p=a||!1===l,v=p?c:l;return v&&"boolean"!=typeof v&&!me(v)&&(Array.isArray(v)?v:[v]).forEach((function(e){var n=ot(t,e);if(n){var r=n.transitionEnd;n.transition;var a=i(n,["transitionEnd","transition"]);for(var s in a){var u=a[s];Array.isArray(u)&&(u=u[p?u.length-1:0]),null!==u&&(o[s]=u)}for(var s in r)o[s]=r[s]}})),o}var Se,Ae={useVisualState:we({scrapeMotionValuesFromProps:he,createRenderState:ae,onMount:function(t,e,n){var r=n.renderState,o=n.latestValues;try{r.dimensions="function"==typeof e.getBBox?e.getBBox():e.getBoundingClientRect()}catch(t){r.dimensions={x:0,y:0,width:0,height:0}}ie(r,o,{enableHardwareAcceleration:!1},t.transformTemplate),pe(e,r)}})},Pe={useVisualState:we({scrapeMotionValuesFromProps:ve,createRenderState:qt})};function Ce(t,e,n,r){return void 0===r&&(r={passive:!0}),t.addEventListener(e,n,r),function(){return t.removeEventListener(e,n)}}function Me(t,e,n,r){(0,l.useEffect)((function(){var o=t.current;if(n&&o)return Ce(o,e,n,r)}),[t,e,n,r])}function Ve(t){return"undefined"!=typeof PointerEvent&&t instanceof PointerEvent?!("mouse"!==t.pointerType):t instanceof MouseEvent}function Re(t){return!!t.touches}!function(t){t.Animate="animate",t.Hover="whileHover",t.Tap="whileTap",t.Drag="whileDrag",t.Focus="whileFocus",t.InView="whileInView",t.Exit="exit"}(Se||(Se={}));var Oe={pageX:0,pageY:0};function De(t,e){void 0===e&&(e="page");var n=t.touches[0]||t.changedTouches[0]||Oe;return{x:n[e+"X"],y:n[e+"Y"]}}function Le(t,e){return void 0===e&&(e="page"),{x:t[e+"X"],y:t[e+"Y"]}}function ke(t,e){return void 0===e&&(e="page"),{point:Re(t)?De(t,e):Le(t,e)}}var Ne=function(t,e){void 0===e&&(e=!1);var n,r=function(e){return t(e,ke(e))};return e?(n=r,function(t){var e=t instanceof MouseEvent;(!e||e&&0===t.button)&&n(t)}):r},Ie=function(){return V&&null===window.onpointerdown},je=function(){return V&&null===window.ontouchstart},Ue=function(){return V&&null===window.onmousedown},Be={pointerdown:"mousedown",pointermove:"mousemove",pointerup:"mouseup",pointercancel:"mousecancel",pointerover:"mouseover",pointerout:"mouseout",pointerenter:"mouseenter",pointerleave:"mouseleave"},Fe={pointerdown:"touchstart",pointermove:"touchmove",pointerup:"touchend",pointercancel:"touchcancel"};function _e(t){return Ie()?t:je()?Fe[t]:Ue()?Be[t]:t}function He(t,e,n,r){return Ce(t,_e(e),Ne(n,"pointerdown"===e),r)}function ze(t,e,n,r){return Me(t,_e(e),n&&Ne(n,"pointerdown"===e),r)}function We(t){var e=null;return function(){return null===e&&(e=t,function(){e=null})}}var Ge=We("dragHorizontal"),Xe=We("dragVertical");function Ye(t){var e=!1;if("y"===t)e=Xe();else if("x"===t)e=Ge();else{var n=Ge(),r=Xe();n&&r?e=function(){n(),r()}:(n&&n(),r&&r())}return e}function Ze(){var t=Ye(!0);return!t||(t(),!1)}function qe(t,e,n){return function(r,o){var i;Ve(r)&&!Ze()&&(null===(i=t.animationState)||void 0===i||i.setActive(Se.Hover,e),null==n||n(r,o))}}var Ke=function(t,e){return!!e&&(t===e||Ke(t,e.parentElement))};const $e=(t,e)=>n=>e(t(n)),Qe=(...t)=>t.reduce($e);var Je=new Set,tn=new WeakMap,en=new WeakMap,nn=function(t){var e;null===(e=tn.get(t.target))||void 0===e||e(t)},rn=function(t){t.forEach(nn)};var on={some:0,all:1};function an(t,e,n,r){var a=r.root,s=r.margin,u=r.amount,c=void 0===u?"some":u,d=r.once;(0,l.useEffect)((function(){if(t){var r={root:null==a?void 0:a.current,rootMargin:s,threshold:"number"==typeof c?c:on[c]};return function(t,e,n){var r=function(t){var e=t.root,n=i(t,["root"]),r=e||document;en.has(r)||en.set(r,{});var a=en.get(r),s=JSON.stringify(n);return a[s]||(a[s]=new IntersectionObserver(rn,o({root:e},n))),a[s]}(e);return tn.set(t,n),r.observe(t),function(){tn.delete(t),r.unobserve(t)}}(n.getInstance(),r,(function(t){var r,o=t.isIntersecting;if(e.isInView!==o&&(e.isInView=o,!d||o||!e.hasEnteredView)){o&&(e.hasEnteredView=!0),null===(r=n.animationState)||void 0===r||r.setActive(Se.InView,o);var i=n.getProps(),a=o?i.onViewportEnter:i.onViewportLeave;null==a||a(t)}}))}}),[t,a,s,c])}function sn(t,e,n,r){var o=r.fallback,i=void 0===o||o;(0,l.useEffect)((function(){var r;t&&i&&("production"!==d&&(r="IntersectionObserver not available on this device. whileInView animations will trigger on mount.",Je.has(r)||(console.warn(r),Je.add(r))),requestAnimationFrame((function(){var t;e.hasEnteredView=!0;var r=n.getProps().onViewportEnter;null==r||r(null),null===(t=n.animationState)||void 0===t||t.setActive(Se.InView,!0)})))}),[t])}var un=function(t){return function(e){return t(e),null}},ln={inView:un((function(t){var e=t.visualElement,n=t.whileInView,r=t.onViewportEnter,o=t.onViewportLeave,i=t.viewport,a=void 0===i?{}:i,s=(0,l.useRef)({hasEnteredView:!1,isInView:!1}),u=Boolean(n||r||o);a.once&&s.current.hasEnteredView&&(u=!1),("undefined"==typeof IntersectionObserver?sn:an)(u,s.current,e,a)})),tap:un((function(t){var e=t.onTap,n=t.onTapStart,r=t.onTapCancel,o=t.whileTap,i=t.visualElement,a=e||n||r||o,s=(0,l.useRef)(!1),u=(0,l.useRef)(null),c={passive:!(n||e||r||h)};function d(){var t;null===(t=u.current)||void 0===t||t.call(u),u.current=null}function f(){var t;return d(),s.current=!1,null===(t=i.animationState)||void 0===t||t.setActive(Se.Tap,!1),!Ze()}function p(t,n){f()&&(Ke(i.getInstance(),t.target)?null==e||e(t,n):null==r||r(t,n))}function v(t,e){f()&&(null==r||r(t,e))}function h(t,e){var r;d(),s.current||(s.current=!0,u.current=Qe(He(window,"pointerup",p,c),He(window,"pointercancel",v,c)),null===(r=i.animationState)||void 0===r||r.setActive(Se.Tap,!0),null==n||n(t,e))}ze(i,"pointerdown",a?h:void 0,c),F(d)})),focus:un((function(t){var e=t.whileFocus,n=t.visualElement;Me(n,"focus",e?function(){var t;null===(t=n.animationState)||void 0===t||t.setActive(Se.Focus,!0)}:void 0),Me(n,"blur",e?function(){var t;null===(t=n.animationState)||void 0===t||t.setActive(Se.Focus,!1)}:void 0)})),hover:un((function(t){var e=t.onHoverStart,n=t.onHoverEnd,r=t.whileHover,o=t.visualElement;ze(o,"pointerenter",e||r?qe(o,!0,e):void 0,{passive:!e}),ze(o,"pointerleave",n||r?qe(o,!1,n):void 0,{passive:!n})}))};function cn(){var t=(0,l.useContext)(D);if(null===t)return[!0,null];var e=t.isPresent,n=t.onExitComplete,r=t.register,o=I();return(0,l.useEffect)((function(){return r(o)}),[]),!e&&n?[!1,function(){return null==n?void 0:n(o)}]:[!0]}function dn(t,e){if(!Array.isArray(e))return!1;var n=e.length;if(n!==t.length)return!1;for(var r=0;r<n;r++)if(e[r]!==t[r])return!1;return!0}const fn=(t,e,n)=>Math.min(Math.max(n,t),e),pn=.001,vn=.01,hn=10,mn=.05,gn=1;const yn=12;function En(t,e){return t*Math.sqrt(1-e*e)}const xn=["duration","bounce"],bn=["stiffness","damping","mass"];function wn(t,e){return e.some((e=>void 0!==t[e]))}function Tn(t){var{from:e=0,to:n=1,restSpeed:r=2,restDelta:o}=t,a=i(t,["from","to","restSpeed","restDelta"]);const s={done:!1,value:e};let{stiffness:u,damping:l,mass:c,velocity:d,duration:f,isResolvedFromDuration:p}=function(t){let e=Object.assign({velocity:0,stiffness:100,damping:10,mass:1,isResolvedFromDuration:!1},t);if(!wn(t,bn)&&wn(t,xn)){const n=function({duration:t=800,bounce:e=.25,velocity:n=0,mass:r=1}){let o,i;G(t<=1e3*hn,"Spring duration must be 10 seconds or less");let a=1-e;a=fn(mn,gn,a),t=fn(vn,hn,t/1e3),a<1?(o=e=>{const r=e*a,o=r*t,i=r-n,s=En(e,a),u=Math.exp(-o);return pn-i/s*u},i=e=>{const r=e*a*t,i=r*n+n,s=Math.pow(a,2)*Math.pow(e,2)*t,u=Math.exp(-r),l=En(Math.pow(e,2),a);return(-o(e)+pn>0?-1:1)*((i-s)*u)/l}):(o=e=>Math.exp(-e*t)*((e-n)*t+1)-pn,i=e=>Math.exp(-e*t)*(t*t*(n-e)));const s=function(t,e,n){let r=n;for(let n=1;n<yn;n++)r-=t(r)/e(r);return r}(o,i,5/t);if(t*=1e3,isNaN(s))return{stiffness:100,damping:10,duration:t};{const e=Math.pow(s,2)*r;return{stiffness:e,damping:2*a*Math.sqrt(r*e),duration:t}}}(t);e=Object.assign(Object.assign(Object.assign({},e),n),{velocity:0,mass:1}),e.isResolvedFromDuration=!0}return e}(a),v=Sn,h=Sn;function m(){const t=d?-d/1e3:0,r=n-e,i=l/(2*Math.sqrt(u*c)),a=Math.sqrt(u/c)/1e3;if(void 0===o&&(o=Math.min(Math.abs(n-e)/100,.4)),i<1){const e=En(a,i);v=o=>{const s=Math.exp(-i*a*o);return n-s*((t+i*a*r)/e*Math.sin(e*o)+r*Math.cos(e*o))},h=n=>{const o=Math.exp(-i*a*n);return i*a*o*(Math.sin(e*n)*(t+i*a*r)/e+r*Math.cos(e*n))-o*(Math.cos(e*n)*(t+i*a*r)-e*r*Math.sin(e*n))}}else if(1===i)v=e=>n-Math.exp(-a*e)*(r+(t+a*r)*e);else{const e=a*Math.sqrt(i*i-1);v=o=>{const s=Math.exp(-i*a*o),u=Math.min(e*o,300);return n-s*((t+i*a*r)*Math.sinh(u)+e*r*Math.cosh(u))/e}}}return m(),{next:t=>{const e=v(t);if(p)s.done=t>=f;else{const i=1e3*h(t),a=Math.abs(i)<=r,u=Math.abs(n-e)<=o;s.done=a&&u}return s.value=s.done?n:e,s},flipTarget:()=>{d=-d,[e,n]=[n,e],m()}}}Tn.needsInterpolation=(t,e)=>"string"==typeof t||"string"==typeof e;const Sn=t=>0,An=(t,e,n)=>{const r=e-t;return 0===r?1:(n-t)/r},Pn=(t,e,n)=>-n*t+n*e+t,Cn=(t,e)=>n=>Boolean(Nt(n)&&kt.test(n)&&n.startsWith(t)||e&&Object.prototype.hasOwnProperty.call(n,e)),Mn=(t,e,n)=>r=>{if(!Nt(r))return r;const[o,i,a,s]=r.match(Dt);return{[t]:parseFloat(o),[e]:parseFloat(i),[n]:parseFloat(a),alpha:void 0!==s?parseFloat(s):1}},Vn=Rt(0,255),Rn=Object.assign(Object.assign({},zt),{transform:t=>Math.round(Vn(t))}),On={test:Cn("rgb","red"),parse:Mn("red","green","blue"),transform:({red:t,green:e,blue:n,alpha:r=1})=>"rgba("+Rn.transform(t)+", "+Rn.transform(e)+", "+Rn.transform(n)+", "+Ot(Wt.transform(r))+")"},Dn={test:Cn("#"),parse:function(t){let e="",n="",r="",o="";return t.length>5?(e=t.substr(1,2),n=t.substr(3,2),r=t.substr(5,2),o=t.substr(7,2)):(e=t.substr(1,1),n=t.substr(2,1),r=t.substr(3,1),o=t.substr(4,1),e+=e,n+=n,r+=r,o+=o),{red:parseInt(e,16),green:parseInt(n,16),blue:parseInt(r,16),alpha:o?parseInt(o,16)/255:1}},transform:On.transform},Ln={test:Cn("hsl","hue"),parse:Mn("hue","saturation","lightness"),transform:({hue:t,saturation:e,lightness:n,alpha:r=1})=>"hsla("+Math.round(t)+", "+Ut.transform(Ot(e))+", "+Ut.transform(Ot(n))+", "+Ot(Wt.transform(r))+")"};function kn(t,e,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?t+6*(e-t)*n:n<.5?e:n<2/3?t+(e-t)*(2/3-n)*6:t}function Nn({hue:t,saturation:e,lightness:n,alpha:r}){t/=360,n/=100;let o=0,i=0,a=0;if(e/=100){const r=n<.5?n*(1+e):n+e-n*e,s=2*n-r;o=kn(s,r,t+1/3),i=kn(s,r,t),a=kn(s,r,t-1/3)}else o=i=a=n;return{red:Math.round(255*o),green:Math.round(255*i),blue:Math.round(255*a),alpha:r}}const In=(t,e,n)=>{const r=t*t,o=e*e;return Math.sqrt(Math.max(0,n*(o-r)+r))},jn=[Dn,On,Ln],Un=t=>jn.find((e=>e.test(t))),Bn=t=>`'${t}' is not an animatable color. Use the equivalent color code instead.`,Fn=(t,e)=>{let n=Un(t),r=Un(e);X(!!n,Bn(t)),X(!!r,Bn(e));let o=n.parse(t),i=r.parse(e);n===Ln&&(o=Nn(o),n=On),r===Ln&&(i=Nn(i),r=On);const a=Object.assign({},o);return t=>{for(const e in a)"alpha"!==e&&(a[e]=In(o[e],i[e],t));return a.alpha=Pn(o.alpha,i.alpha,t),n.transform(a)}},_n={test:t=>On.test(t)||Dn.test(t)||Ln.test(t),parse:t=>On.test(t)?On.parse(t):Ln.test(t)?Ln.parse(t):Dn.parse(t),transform:t=>Nt(t)?t:t.hasOwnProperty("red")?On.transform(t):Ln.transform(t)},Hn="${c}",zn="${n}";function Wn(t){"number"==typeof t&&(t=`${t}`);const e=[];let n=0;const r=t.match(Lt);r&&(n=r.length,t=t.replace(Lt,Hn),e.push(...r.map(_n.parse)));const o=t.match(Dt);return o&&(t=t.replace(Dt,zn),e.push(...o.map(zt.parse))),{values:e,numColors:n,tokenised:t}}function Gn(t){return Wn(t).values}function Xn(t){const{values:e,numColors:n,tokenised:r}=Wn(t),o=e.length;return t=>{let e=r;for(let r=0;r<o;r++)e=e.replace(r<n?Hn:zn,r<n?_n.transform(t[r]):Ot(t[r]));return e}}const Yn=t=>"number"==typeof t?0:t,Zn={test:function(t){var e,n,r,o;return isNaN(t)&&Nt(t)&&(null!==(n=null===(e=t.match(Dt))||void 0===e?void 0:e.length)&&void 0!==n?n:0)+(null!==(o=null===(r=t.match(Lt))||void 0===r?void 0:r.length)&&void 0!==o?o:0)>0},parse:Gn,createTransformer:Xn,getAnimatableNone:function(t){const e=Gn(t);return Xn(t)(e.map(Yn))}},qn=t=>"number"==typeof t;function Kn(t,e){return qn(t)?n=>Pn(t,e,n):_n.test(t)?Fn(t,e):tr(t,e)}const $n=(t,e)=>{const n=[...t],r=n.length,o=t.map(((t,n)=>Kn(t,e[n])));return t=>{for(let e=0;e<r;e++)n[e]=o[e](t);return n}},Qn=(t,e)=>{const n=Object.assign(Object.assign({},t),e),r={};for(const o in n)void 0!==t[o]&&void 0!==e[o]&&(r[o]=Kn(t[o],e[o]));return t=>{for(const e in r)n[e]=r[e](t);return n}};function Jn(t){const e=Zn.parse(t),n=e.length;let r=0,o=0,i=0;for(let t=0;t<n;t++)r||"number"==typeof e[t]?r++:void 0!==e[t].hue?i++:o++;return{parsed:e,numNumbers:r,numRGB:o,numHSL:i}}const tr=(t,e)=>{const n=Zn.createTransformer(e),r=Jn(t),o=Jn(e);return r.numHSL===o.numHSL&&r.numRGB===o.numRGB&&r.numNumbers>=o.numNumbers?Qe($n(r.parsed,o.parsed),n):(G(!0,`Complex values '${t}' and '${e}' too different to mix. Ensure all colors are of the same type, and that each contains the same quantity of number and color values. Falling back to instant transition.`),n=>`${n>0?e:t}`)},er=(t,e)=>n=>Pn(t,e,n);function nr(t,e,{clamp:n=!0,ease:r,mixer:o}={}){const i=t.length;X(i===e.length,"Both input and output ranges must be the same length"),X(!r||!Array.isArray(r)||r.length===i-1,"Array of easing functions must be of length `input.length - 1`, as it applies to the transitions **between** the defined values."),t[0]>t[i-1]&&(t=[].concat(t),e=[].concat(e),t.reverse(),e.reverse());const a=function(t,e,n){const r=[],o=n||("number"==typeof(i=t[0])?er:"string"==typeof i?_n.test(i)?Fn:tr:Array.isArray(i)?$n:"object"==typeof i?Qn:void 0);var i;const a=t.length-1;for(let n=0;n<a;n++){let i=o(t[n],t[n+1]);if(e){const t=Array.isArray(e)?e[n]:e;i=Qe(t,i)}r.push(i)}return r}(e,r,o),s=2===i?function([t,e],[n]){return r=>n(An(t,e,r))}(t,a):function(t,e){const n=t.length,r=n-1;return o=>{let i=0,a=!1;if(o<=t[0]?a=!0:o>=t[r]&&(i=r-1,a=!0),!a){let e=1;for(;e<n&&!(t[e]>o||e===r);e++);i=e-1}const s=An(t[i],t[i+1],o);return e[i](s)}}(t,a);return n?e=>s(fn(t[0],t[i-1],e)):s}const rr=t=>e=>1-t(1-e),or=t=>e=>e<=.5?t(2*e)/2:(2-t(2*(1-e)))/2,ir=t=>e=>e*e*((t+1)*e-t),ar=t=>t,sr=(2,t=>Math.pow(t,2));const ur=rr(sr),lr=or(sr),cr=t=>1-Math.sin(Math.acos(t)),dr=rr(cr),fr=or(dr),pr=ir(1.525),vr=rr(pr),hr=or(pr),mr=(t=>{const e=ir(1.525);return t=>(t*=2)<1?.5*e(t):.5*(2-Math.pow(2,-10*(t-1)))})(),gr=t=>{if(1===t||0===t)return t;const e=t*t;return t<.36363636363636365?7.5625*e:t<.7272727272727273?9.075*e-9.9*t+3.4:t<.9?12.066481994459833*e-19.63545706371191*t+8.898060941828255:10.8*t*t-20.52*t+10.72},yr=rr(gr);function Er(t,e){return t.map((()=>e||lr)).splice(0,t.length-1)}function xr({from:t=0,to:e=1,ease:n,offset:r,duration:o=300}){const i={done:!1,value:t},a=Array.isArray(e)?e:[t,e],s=function(t,e){return t.map((t=>t*e))}(r&&r.length===a.length?r:function(t){const e=t.length;return t.map(((t,n)=>0!==n?n/(e-1):0))}(a),o);function u(){return nr(s,a,{ease:Array.isArray(n)?n:Er(a,n)})}let l=u();return{next:t=>(i.value=l(t),i.done=t>=o,i),flipTarget:()=>{a.reverse(),l=u()}}}const br={keyframes:xr,spring:Tn,decay:function({velocity:t=0,from:e=0,power:n=.8,timeConstant:r=350,restDelta:o=.5,modifyTarget:i}){const a={done:!1,value:e};let s=n*t;const u=e+s,l=void 0===i?u:i(u);return l!==u&&(s=l-e),{next:t=>{const e=-s*Math.exp(-t/r);return a.done=!(e>o||e<-o),a.value=a.done?l:l+e,a},flipTarget:()=>{}}}};function wr(t,e,n=0){return t-e-n}const Tr=t=>{const e=({delta:e})=>t(e);return{start:()=>M.update(e,!0),stop:()=>w.update(e)}};function Sr(t){var e,n,{from:r,autoplay:o=!0,driver:a=Tr,elapsed:s=0,repeat:u=0,repeatType:l="loop",repeatDelay:c=0,onPlay:d,onStop:f,onComplete:p,onRepeat:v,onUpdate:h}=t,m=i(t,["from","autoplay","driver","elapsed","repeat","repeatType","repeatDelay","onPlay","onStop","onComplete","onRepeat","onUpdate"]);let g,y,E,{to:x}=m,b=0,w=m.duration,T=!1,S=!0;const A=function(t){if(Array.isArray(t.to))return xr;if(br[t.type])return br[t.type];const e=new Set(Object.keys(t));return e.has("ease")||e.has("duration")&&!e.has("dampingRatio")?xr:e.has("dampingRatio")||e.has("stiffness")||e.has("mass")||e.has("damping")||e.has("restSpeed")||e.has("restDelta")?Tn:xr}(m);(null===(n=(e=A).needsInterpolation)||void 0===n?void 0:n.call(e,r,x))&&(E=nr([0,100],[r,x],{clamp:!1}),r=0,x=100);const P=A(Object.assign(Object.assign({},m),{from:r,to:x}));return o&&(null==d||d(),g=a((function(t){if(S||(t=-t),s+=t,!T){const t=P.next(Math.max(0,s));y=t.value,E&&(y=E(y)),T=S?t.done:s<=0}null==h||h(y),T&&(0===b&&(null!=w||(w=s)),b<u?function(t,e,n,r){return r?t>=e+n:t<=-n}(s,w,c,S)&&(b++,"reverse"===l?(S=b%2==0,s=function(t,e,n=0,r=!0){return r?wr(e+-t,e,n):e-(t-e)+n}(s,w,c,S)):(s=wr(s,w,c),"mirror"===l&&P.flipTarget()),T=!1,v&&v()):(g.stop(),p&&p()))})),g.start()),{stop:()=>{null==f||f(),g.stop()}}}function Ar(t,e){return e?t*(1e3/e):0}var Pr=function(t){return 1e3*t};const Cr=(t,e)=>1-3*e+3*t,Mr=(t,e)=>3*e-6*t,Vr=t=>3*t,Rr=(t,e,n)=>((Cr(e,n)*t+Mr(e,n))*t+Vr(e))*t,Or=(t,e,n)=>3*Cr(e,n)*t*t+2*Mr(e,n)*t+Vr(e),Dr=1e-7,Lr=10,kr=8,Nr=.001,Ir=11,jr=1/(Ir-1);function Ur(t,e,n,r){if(t===e&&n===r)return ar;const o=new Float32Array(Ir);for(let e=0;e<Ir;++e)o[e]=Rr(e*jr,t,n);return i=>0===i||1===i?i:Rr(function(e){let r=0,i=1;const a=Ir-1;for(;i!==a&&o[i]<=e;++i)r+=jr;--i;const s=r+(e-o[i])/(o[i+1]-o[i])*jr,u=Or(s,t,n);return u>=Nr?function(t,e,n,r){for(let o=0;o<kr;++o){const o=Or(e,n,r);if(0===o)return e;e-=(Rr(e,n,r)-t)/o}return e}(e,s,t,n):0===u?s:function(t,e,n,r,o){let i,a,s=0;do{a=e+(n-e)/2,i=Rr(a,r,o)-t,i>0?n=a:e=a}while(Math.abs(i)>Dr&&++s<Lr);return a}(e,r,r+jr,t,n)}(i),e,r)}var Br={linear:ar,easeIn:sr,easeInOut:lr,easeOut:ur,circIn:cr,circInOut:fr,circOut:dr,backIn:pr,backInOut:hr,backOut:vr,anticipate:mr,bounceIn:yr,bounceInOut:t=>t<.5?.5*(1-gr(1-2*t)):.5*gr(2*t-1)+.5,bounceOut:gr},Fr=function(t){if(Array.isArray(t)){X(4===t.length,"Cubic bezier arrays must contain four numerical values.");var e=s(t,4);return Ur(e[0],e[1],e[2],e[3])}return"string"==typeof t?(X(void 0!==Br[t],"Invalid easing type '".concat(t,"'")),Br[t]):t},_r=function(t){return Array.isArray(t)&&"number"!=typeof t[0]},Hr=function(t,e){return!("zIndex"===t||"number"!=typeof e&&!Array.isArray(e)&&("string"!=typeof e||!Zn.test(e)||e.startsWith("url(")))},zr=function(){return{type:"spring",stiffness:500,damping:25,restSpeed:10}},Wr=function(t){return{type:"spring",stiffness:550,damping:0===t?2*Math.sqrt(550):30,restSpeed:10}},Gr=function(){return{type:"keyframes",ease:"linear",duration:.3}},Xr=function(t){return{type:"keyframes",duration:.8,values:t}},Yr={x:zr,y:zr,z:zr,rotate:zr,rotateX:zr,rotateY:zr,rotateZ:zr,scaleX:Wr,scaleY:Wr,scale:Wr,opacity:Gr,backgroundColor:Gr,color:Gr,default:Wr},Zr=function(t,e){var n;return n=ge(e)?Xr:Yr[t]||Yr.default,o({to:e},n(e))};const qr=new Set(["brightness","contrast","saturate","opacity"]);function Kr(t){let[e,n]=t.slice(0,-1).split("(");if("drop-shadow"===e)return t;const[r]=n.match(Dt)||[];if(!r)return t;const o=n.replace(r,"");let i=qr.has(e)?1:0;return r!==n&&(i*=100),e+"("+i+o+")"}const $r=/([a-z-]*)\(.*?\)/g,Qr=Object.assign(Object.assign({},Zn),{getAnimatableNone:t=>{const e=t.match($r);return e?e.map(Kr).join(" "):t}});var Jr=o(o({},Yt),{color:_n,backgroundColor:_n,outlineColor:_n,fill:_n,stroke:_n,borderColor:_n,borderTopColor:_n,borderRightColor:_n,borderBottomColor:_n,borderLeftColor:_n,filter:Qr,WebkitFilter:Qr}),to=function(t){return Jr[t]};function eo(t,e){var n,r=to(t);return r!==Qr&&(r=Zn),null===(n=r.getAnimatableNone)||void 0===n?void 0:n.call(r,e)}var no={current:!1},ro=!1;function oo(t,e,n,r,a){var l,c=so(r,t),d=null!==(l=c.from)&&void 0!==l?l:e.get(),f=Hr(t,n);"none"===d&&f&&"string"==typeof n?d=eo(t,n):io(d)&&"string"==typeof n?d=ao(n):!Array.isArray(n)&&io(n)&&"string"==typeof d&&(n=ao(d));var p=Hr(t,d);return G(p===f,"You are trying to animate ".concat(t,' from "').concat(d,'" to "').concat(n,'". ').concat(d," is not an animatable value - to enable this animation set ").concat(d," to a value animatable to ").concat(n," via the `style` property.")),p&&f&&!1!==c.type?function(){var r={from:d,to:n,velocity:e.getVelocity(),onComplete:a,onUpdate:function(t){return e.set(t)}};return"inertia"===c.type||"decay"===c.type?function({from:t=0,velocity:e=0,min:n,max:r,power:o=.8,timeConstant:i=750,bounceStiffness:a=500,bounceDamping:s=10,restDelta:u=1,modifyTarget:l,driver:c,onUpdate:d,onComplete:f,onStop:p}){let v;function h(t){return void 0!==n&&t<n||void 0!==r&&t>r}function m(t){return void 0===n?r:void 0===r||Math.abs(n-t)<Math.abs(r-t)?n:r}function g(t){null==v||v.stop(),v=Sr(Object.assign(Object.assign({},t),{driver:c,onUpdate:e=>{var n;null==d||d(e),null===(n=t.onUpdate)||void 0===n||n.call(t,e)},onComplete:f,onStop:p}))}function y(t){g(Object.assign({type:"spring",stiffness:a,damping:s,restDelta:u},t))}if(h(t))y({from:t,velocity:e,to:m(t)});else{let r=o*e+t;void 0!==l&&(r=l(r));const a=m(r),s=a===n?-1:1;let c,d;const f=t=>{c=d,d=t,e=Ar(t-c,C().delta),(1===s&&t>a||-1===s&&t<a)&&y({from:t,to:a,velocity:e})};g({type:"decay",from:t,velocity:e,timeConstant:i,power:o,restDelta:u,modifyTarget:l,onUpdate:h(r)?f:void 0})}return{stop:()=>null==v?void 0:v.stop()}}(o(o({},r),c)):Sr(o(o({},function(t,e,n){var r;return Array.isArray(e.to)&&(null!==(r=t.duration)&&void 0!==r||(t.duration=.8)),function(t){Array.isArray(t.to)&&null===t.to[0]&&(t.to=u([],s(t.to),!1),t.to[0]=t.from)}(e),function(t){t.when,t.delay,t.delayChildren,t.staggerChildren,t.staggerDirection,t.repeat,t.repeatType,t.repeatDelay,t.from;var e=i(t,["when","delay","delayChildren","staggerChildren","staggerDirection","repeat","repeatType","repeatDelay","from"]);return!!Object.keys(e).length}(t)||(t=o(o({},t),Zr(n,e.to))),o(o({},e),function(t){var e=t.ease,n=t.times,r=t.yoyo,a=t.flip,s=t.loop,u=i(t,["ease","times","yoyo","flip","loop"]),l=o({},u);return n&&(l.offset=n),u.duration&&(l.duration=Pr(u.duration)),u.repeatDelay&&(l.repeatDelay=Pr(u.repeatDelay)),e&&(l.ease=_r(e)?e.map(Fr):Fr(e)),"tween"===u.type&&(l.type="keyframes"),(r||s||a)&&(G(!ro,"yoyo, loop and flip have been removed from the API. Replace with repeat and repeatType options."),ro=!0,r?l.repeatType="reverse":s?l.repeatType="loop":a&&(l.repeatType="mirror"),l.repeat=s||r||a||u.repeat),"spring"!==u.type&&(l.type="keyframes"),l}(t))}(c,r,t)),{onUpdate:function(t){var e;r.onUpdate(t),null===(e=c.onUpdate)||void 0===e||e.call(c,t)},onComplete:function(){var t;r.onComplete(),null===(t=c.onComplete)||void 0===t||t.call(c)}}))}:function(){var t,r,o=Ee(n);return e.set(o),a(),null===(t=null==c?void 0:c.onUpdate)||void 0===t||t.call(c,o),null===(r=null==c?void 0:c.onComplete)||void 0===r||r.call(c),{stop:function(){}}}}function io(t){return 0===t||"string"==typeof t&&0===parseFloat(t)&&-1===t.indexOf(" ")}function ao(t){return"number"==typeof t?0:eo("",t)}function so(t,e){return t[e]||t.default||t}function uo(t,e,n,r){return void 0===r&&(r={}),no.current&&(r={type:!1}),e.start((function(o){var i,a,s=oo(t,e,n,r,o),u=function(t,e){var n,r;return null!==(r=null!==(n=(so(t,e)||{}).delay)&&void 0!==n?n:t.delay)&&void 0!==r?r:0}(r,t),l=function(){return a=s()};return u?i=window.setTimeout(l,Pr(u)):l(),function(){clearTimeout(i),null==a||a.stop()}}))}var lo=function(t){return/^0[^.\s]+$/.test(t)};function co(t,e){-1===t.indexOf(e)&&t.push(e)}function fo(t,e){var n=t.indexOf(e);n>-1&&t.splice(n,1)}var po=function(){function t(){this.subscriptions=[]}return t.prototype.add=function(t){var e=this;return co(this.subscriptions,t),function(){return fo(e.subscriptions,t)}},t.prototype.notify=function(t,e,n){var r=this.subscriptions.length;if(r)if(1===r)this.subscriptions[0](t,e,n);else for(var o=0;o<r;o++){var i=this.subscriptions[o];i&&i(t,e,n)}},t.prototype.getSize=function(){return this.subscriptions.length},t.prototype.clear=function(){this.subscriptions.length=0},t}(),vo=function(t){return!isNaN(parseFloat(t))},ho=function(){function t(t){var e=this;this.version="6.5.1",this.timeDelta=0,this.lastUpdated=0,this.updateSubscribers=new po,this.velocityUpdateSubscribers=new po,this.renderSubscribers=new po,this.canTrackVelocity=!1,this.updateAndNotify=function(t,n){void 0===n&&(n=!0),e.prev=e.current,e.current=t;var r=C(),o=r.delta,i=r.timestamp;e.lastUpdated!==i&&(e.timeDelta=o,e.lastUpdated=i,M.postRender(e.scheduleVelocityCheck)),e.prev!==e.current&&e.updateSubscribers.notify(e.current),e.velocityUpdateSubscribers.getSize()&&e.velocityUpdateSubscribers.notify(e.getVelocity()),n&&e.renderSubscribers.notify(e.current)},this.scheduleVelocityCheck=function(){return M.postRender(e.velocityCheck)},this.velocityCheck=function(t){t.timestamp!==e.lastUpdated&&(e.prev=e.current,e.velocityUpdateSubscribers.notify(e.getVelocity()))},this.hasAnimated=!1,this.prev=this.current=t,this.canTrackVelocity=vo(this.current)}return t.prototype.onChange=function(t){return this.updateSubscribers.add(t)},t.prototype.clearListeners=function(){this.updateSubscribers.clear()},t.prototype.onRenderRequest=function(t){return t(this.get()),this.renderSubscribers.add(t)},t.prototype.attach=function(t){this.passiveEffect=t},t.prototype.set=function(t,e){void 0===e&&(e=!0),e&&this.passiveEffect?this.passiveEffect(t,this.updateAndNotify):this.updateAndNotify(t,e)},t.prototype.get=function(){return this.current},t.prototype.getPrevious=function(){return this.prev},t.prototype.getVelocity=function(){return this.canTrackVelocity?Ar(parseFloat(this.current)-parseFloat(this.prev),this.timeDelta):0},t.prototype.start=function(t){var e=this;return this.stop(),new Promise((function(n){e.hasAnimated=!0,e.stopAnimation=t(n)})).then((function(){return e.clearAnimation()}))},t.prototype.stop=function(){this.stopAnimation&&this.stopAnimation(),this.clearAnimation()},t.prototype.isAnimating=function(){return!!this.stopAnimation},t.prototype.clearAnimation=function(){this.stopAnimation=null},t.prototype.destroy=function(){this.updateSubscribers.clear(),this.renderSubscribers.clear(),this.stop()},t}();function mo(t){return new ho(t)}var go=function(t){return function(e){return e.test(t)}},yo=[zt,Bt,Ut,jt,_t,Ft,{test:function(t){return"auto"===t},parse:function(t){return t}}],Eo=function(t){return yo.find(go(t))},xo=u(u([],s(yo),!1),[_n,Zn],!1),bo=function(t){return xo.find(go(t))};function wo(t,e,n){t.hasValue(e)?t.getValue(e).set(n):t.addValue(e,mo(n))}function To(t,e){if(e)return(e[t]||e.default||e).from}function So(t,e,n){var r;void 0===n&&(n={});var i=it(t,e,n.custom),a=(i||{}).transition,u=void 0===a?t.getDefaultTransition()||{}:a;n.transitionOverride&&(u=n.transitionOverride);var l=i?function(){return Ao(t,i,n)}:function(){return Promise.resolve()},c=(null===(r=t.variantChildren)||void 0===r?void 0:r.size)?function(r){void 0===r&&(r=0);var i=u.delayChildren,a=void 0===i?0:i,s=u.staggerChildren,l=u.staggerDirection;return function(t,e,n,r,i,a){void 0===n&&(n=0),void 0===r&&(r=0),void 0===i&&(i=1);var s=[],u=(t.variantChildren.size-1)*r,l=1===i?function(t){return void 0===t&&(t=0),t*r}:function(t){return void 0===t&&(t=0),u-t*r};return Array.from(t.variantChildren).sort(Po).forEach((function(t,r){s.push(So(t,e,o(o({},a),{delay:n+l(r)})).then((function(){return t.notifyAnimationComplete(e)})))})),Promise.all(s)}(t,e,a+r,s,l,n)}:function(){return Promise.resolve()},d=u.when;if(d){var f=s("beforeChildren"===d?[l,c]:[c,l],2),p=f[0],v=f[1];return p().then(v)}return Promise.all([l(),c(n.delay)])}function Ao(t,e,n){var r,a=void 0===n?{}:n,s=a.delay,u=void 0===s?0:s,l=a.transitionOverride,c=a.type,d=t.makeTargetAnimatable(e),f=d.transition,p=void 0===f?t.getDefaultTransition():f,v=d.transitionEnd,h=i(d,["transition","transitionEnd"]);l&&(p=l);var m=[],g=c&&(null===(r=t.animationState)||void 0===r?void 0:r.getState()[c]);for(var y in h){var E=t.getValue(y),x=h[y];if(!(!E||void 0===x||g&&Co(g,y))){var b=o({delay:u},p);t.shouldReduceMotion&&wt(y)&&(b=o(o({},b),{type:!1,delay:0}));var w=uo(y,E,x,b);m.push(w)}}return Promise.all(m).then((function(){v&&function(t,e){var n=it(t,e),r=n?t.makeTargetAnimatable(n,!1):{},a=r.transitionEnd,s=void 0===a?{}:a;r.transition;var u=i(r,["transitionEnd","transition"]);for(var l in u=o(o({},u),s))wo(t,l,Ee(u[l]))}(t,v)}))}function Po(t,e){return t.sortNodePosition(e)}function Co(t,e){var n=t.protectedKeys,r=t.needsAnimating,o=n.hasOwnProperty(e)&&!0!==r[e];return r[e]=!1,o}var Mo=[Se.Animate,Se.InView,Se.Focus,Se.Hover,Se.Tap,Se.Drag,Se.Exit],Vo=u([],s(Mo),!1).reverse(),Ro=Mo.length;function Oo(t){var e,n=function(t){return function(e){return Promise.all(e.map((function(e){var n=e.animation,r=e.options;return function(t,e,n){var r;if(void 0===n&&(n={}),t.notifyAnimationStart(e),Array.isArray(e)){var o=e.map((function(e){return So(t,e,n)}));r=Promise.all(o)}else if("string"==typeof e)r=So(t,e,n);else{var i="function"==typeof e?it(t,e,n.custom):e;r=Ao(t,i,n)}return r.then((function(){return t.notifyAnimationComplete(e)}))}(t,n,r)})))}}(t),r=((e={})[Se.Animate]=Do(!0),e[Se.InView]=Do(),e[Se.Hover]=Do(),e[Se.Tap]=Do(),e[Se.Drag]=Do(),e[Se.Focus]=Do(),e[Se.Exit]=Do(),e),a={},l=!0,c=function(e,n){var r=it(t,n);if(r){r.transition;var a=r.transitionEnd,s=i(r,["transition","transitionEnd"]);e=o(o(o({},e),s),a)}return e};function d(e,i){for(var d,f=t.getProps(),p=t.getVariantContext(!0)||{},v=[],h=new Set,m={},g=1/0,y=function(n){var a=Vo[n],y=r[a],E=null!==(d=f[a])&&void 0!==d?d:p[a],x=rt(E),b=a===i?y.isActive:null;!1===b&&(g=n);var w=E===p[a]&&E!==f[a]&&x;if(w&&l&&t.manuallyAnimateOnMount&&(w=!1),y.protectedKeys=o({},m),!y.isActive&&null===b||!E&&!y.prevProp||me(E)||"boolean"==typeof E)return"continue";var T=function(t,e){return"string"==typeof e?e!==t:!!nt(e)&&!dn(e,t)}(y.prevProp,E),S=T||a===i&&y.isActive&&!w&&x||n>g&&x,A=Array.isArray(E)?E:[E],P=A.reduce(c,{});!1===b&&(P={});var C=y.prevResolvedValues,M=void 0===C?{}:C,V=o(o({},M),P),R=function(t){S=!0,h.delete(t),y.needsAnimating[t]=!0};for(var O in V){var D=P[O],L=M[O];m.hasOwnProperty(O)||(D!==L?ge(D)&&ge(L)?!dn(D,L)||T?R(O):y.protectedKeys[O]=!0:void 0!==D?R(O):h.add(O):void 0!==D&&h.has(O)?R(O):y.protectedKeys[O]=!0)}y.prevProp=E,y.prevResolvedValues=P,y.isActive&&(m=o(o({},m),P)),l&&t.blockInitialAnimation&&(S=!1),S&&!w&&v.push.apply(v,u([],s(A.map((function(t){return{animation:t,options:o({type:a},e)}}))),!1))},E=0;E<Ro;E++)y(E);if(a=o({},m),h.size){var x={};h.forEach((function(e){var n=t.getBaseTarget(e);void 0!==n&&(x[e]=n)})),v.push({animation:x})}var b=Boolean(v.length);return l&&!1===f.initial&&!t.manuallyAnimateOnMount&&(b=!1),l=!1,b?n(v):Promise.resolve()}return{isAnimated:function(t){return void 0!==a[t]},animateChanges:d,setActive:function(e,n,o){var i;if(r[e].isActive===n)return Promise.resolve();null===(i=t.variantChildren)||void 0===i||i.forEach((function(t){var r;return null===(r=t.animationState)||void 0===r?void 0:r.setActive(e,n)})),r[e].isActive=n;var a=d(o,e);for(var s in r)r[s].protectedKeys={};return a},setAnimateFunction:function(e){n=e(t)},getState:function(){return r}}}function Do(t){return void 0===t&&(t=!1),{isActive:t,protectedKeys:{},needsAnimating:{},prevResolvedValues:{}}}var Lo={animation:un((function(t){var e=t.visualElement,n=t.animate;e.animationState||(e.animationState=Oo(e)),me(n)&&(0,l.useEffect)((function(){return n.subscribe(e)}),[n])})),exit:un((function(t){var e=t.custom,n=t.visualElement,r=s(cn(),2),o=r[0],i=r[1],a=(0,l.useContext)(D);(0,l.useEffect)((function(){var t,r;n.isPresent=o;var s=null===(t=n.animationState)||void 0===t?void 0:t.setActive(Se.Exit,!o,{custom:null!==(r=null==a?void 0:a.custom)&&void 0!==r?r:e});!o&&(null==s||s.then(i))}),[o])}))};const ko=t=>t.hasOwnProperty("x")&&t.hasOwnProperty("y"),No=t=>ko(t)&&t.hasOwnProperty("z"),Io=(t,e)=>Math.abs(t-e);function jo(t,e){if(qn(t)&&qn(e))return Io(t,e);if(ko(t)&&ko(e)){const n=Io(t.x,e.x),r=Io(t.y,e.y),o=No(t)&&No(e)?Io(t.z,e.z):0;return Math.sqrt(Math.pow(n,2)+Math.pow(r,2)+Math.pow(o,2))}}var Uo=function(){function t(t,e,n){var r=this,i=(void 0===n?{}:n).transformPagePoint;if(this.startEvent=null,this.lastMoveEvent=null,this.lastMoveEventInfo=null,this.handlers={},this.updatePoint=function(){if(r.lastMoveEvent&&r.lastMoveEventInfo){var t=_o(r.lastMoveEventInfo,r.history),e=null!==r.startEvent,n=jo(t.offset,{x:0,y:0})>=3;if(e||n){var i=t.point,a=C().timestamp;r.history.push(o(o({},i),{timestamp:a}));var s=r.handlers,u=s.onStart,l=s.onMove;e||(u&&u(r.lastMoveEvent,t),r.startEvent=r.lastMoveEvent),l&&l(r.lastMoveEvent,t)}}},this.handlePointerMove=function(t,e){r.lastMoveEvent=t,r.lastMoveEventInfo=Bo(e,r.transformPagePoint),Ve(t)&&0===t.buttons?r.handlePointerUp(t,e):M.update(r.updatePoint,!0)},this.handlePointerUp=function(t,e){r.end();var n=r.handlers,o=n.onEnd,i=n.onSessionEnd,a=_o(Bo(e,r.transformPagePoint),r.history);r.startEvent&&o&&o(t,a),i&&i(t,a)},!(Re(t)&&t.touches.length>1)){this.handlers=e,this.transformPagePoint=i;var a=Bo(ke(t),this.transformPagePoint),s=a.point,u=C().timestamp;this.history=[o(o({},s),{timestamp:u})];var l=e.onSessionStart;l&&l(t,_o(a,this.history)),this.removeListeners=Qe(He(window,"pointermove",this.handlePointerMove),He(window,"pointerup",this.handlePointerUp),He(window,"pointercancel",this.handlePointerUp))}}return t.prototype.updateHandlers=function(t){this.handlers=t},t.prototype.end=function(){this.removeListeners&&this.removeListeners(),w.update(this.updatePoint)},t}();function Bo(t,e){return e?{point:e(t.point)}:t}function Fo(t,e){return{x:t.x-e.x,y:t.y-e.y}}function _o(t,e){var n=t.point;return{point:n,delta:Fo(n,zo(e)),offset:Fo(n,Ho(e)),velocity:Wo(e,.1)}}function Ho(t){return t[0]}function zo(t){return t[t.length-1]}function Wo(t,e){if(t.length<2)return{x:0,y:0};for(var n=t.length-1,r=null,o=zo(t);n>=0&&(r=t[n],!(o.timestamp-r.timestamp>Pr(e)));)n--;if(!r)return{x:0,y:0};var i=(o.timestamp-r.timestamp)/1e3;if(0===i)return{x:0,y:0};var a={x:(o.x-r.x)/i,y:(o.y-r.y)/i};return a.x===1/0&&(a.x=0),a.y===1/0&&(a.y=0),a}function Go(t){return t.max-t.min}function Xo(t,e,n){return void 0===e&&(e=0),void 0===n&&(n=.01),jo(t,e)<n}function Yo(t,e,n,r){void 0===r&&(r=.5),t.origin=r,t.originPoint=Pn(e.min,e.max,t.origin),t.scale=Go(n)/Go(e),(Xo(t.scale,1,1e-4)||isNaN(t.scale))&&(t.scale=1),t.translate=Pn(n.min,n.max,t.origin)-t.originPoint,(Xo(t.translate)||isNaN(t.translate))&&(t.translate=0)}function Zo(t,e,n,r){Yo(t.x,e.x,n.x,null==r?void 0:r.originX),Yo(t.y,e.y,n.y,null==r?void 0:r.originY)}function qo(t,e,n){t.min=n.min+e.min,t.max=t.min+Go(e)}function Ko(t,e,n){t.min=e.min-n.min,t.max=t.min+Go(e)}function $o(t,e,n){Ko(t.x,e.x,n.x),Ko(t.y,e.y,n.y)}function Qo(t,e,n){return{min:void 0!==e?t.min+e:void 0,max:void 0!==n?t.max+n-(t.max-t.min):void 0}}function Jo(t,e){var n,r=e.min-t.min,o=e.max-t.max;return e.max-e.min<t.max-t.min&&(r=(n=s([o,r],2))[0],o=n[1]),{min:r,max:o}}var ti=.35;function ei(t,e,n){return{min:ni(t,e),max:ni(t,n)}}function ni(t,e){var n;return"number"==typeof t?t:null!==(n=t[e])&&void 0!==n?n:0}var ri=function(){return{x:{translate:0,scale:1,origin:0,originPoint:0},y:{translate:0,scale:1,origin:0,originPoint:0}}},oi=function(){return{x:{min:0,max:0},y:{min:0,max:0}}};function ii(t){return[t("x"),t("y")]}function ai(t){var e=t.top;return{x:{min:t.left,max:t.right},y:{min:e,max:t.bottom}}}function si(t){return void 0===t||1===t}function ui(t){var e=t.scale,n=t.scaleX,r=t.scaleY;return!si(e)||!si(n)||!si(r)}function li(t){return ui(t)||ci(t.x)||ci(t.y)||t.z||t.rotate||t.rotateX||t.rotateY}function ci(t){return t&&"0%"!==t}function di(t,e,n){return n+e*(t-n)}function fi(t,e,n,r,o){return void 0!==o&&(t=di(t,o,r)),di(t,n,r)+e}function pi(t,e,n,r,o){void 0===e&&(e=0),void 0===n&&(n=1),t.min=fi(t.min,e,n,r,o),t.max=fi(t.max,e,n,r,o)}function vi(t,e){var n=e.x,r=e.y;pi(t.x,n.translate,n.scale,n.originPoint),pi(t.y,r.translate,r.scale,r.originPoint)}function hi(t,e){t.min=t.min+e,t.max=t.max+e}function mi(t,e,n){var r=s(n,3),o=r[0],i=r[1],a=r[2],u=void 0!==e[a]?e[a]:.5,l=Pn(t.min,t.max,u);pi(t,e[o],e[i],l,e.scale)}var gi=["x","scaleX","originX"],yi=["y","scaleY","originY"];function Ei(t,e){mi(t.x,e,gi),mi(t.y,e,yi)}function xi(t,e){return ai(function(t,e){if(!e)return t;var n=e({x:t.left,y:t.top}),r=e({x:t.right,y:t.bottom});return{top:n.y,left:n.x,bottom:r.y,right:r.x}}(t.getBoundingClientRect(),e))}var bi=new WeakMap,wi=function(){function t(t){this.openGlobalLock=null,this.isDragging=!1,this.currentDirection=null,this.originPoint={x:0,y:0},this.constraints=!1,this.hasMutatedConstraints=!1,this.elastic=oi(),this.visualElement=t}return t.prototype.start=function(t,e){var n=this,r=(void 0===e?{}:e).snapToCursor,o=void 0!==r&&r;!1!==this.visualElement.isPresent&&(this.panSession=new Uo(t,{onSessionStart:function(t){n.stopAnimation(),o&&n.snapToCursor(ke(t,"page").point)},onStart:function(t,e){var r,o=n.getProps(),i=o.drag,a=o.dragPropagation,s=o.onDragStart;(!i||a||(n.openGlobalLock&&n.openGlobalLock(),n.openGlobalLock=Ye(i),n.openGlobalLock))&&(n.isDragging=!0,n.currentDirection=null,n.resolveConstraints(),n.visualElement.projection&&(n.visualElement.projection.isAnimationBlocked=!0,n.visualElement.projection.target=void 0),ii((function(t){var e,r,o=n.getAxisMotionValue(t).get()||0;if(Ut.test(o)){var i=null===(r=null===(e=n.visualElement.projection)||void 0===e?void 0:e.layout)||void 0===r?void 0:r.actual[t];i&&(o=Go(i)*(parseFloat(o)/100))}n.originPoint[t]=o})),null==s||s(t,e),null===(r=n.visualElement.animationState)||void 0===r||r.setActive(Se.Drag,!0))},onMove:function(t,e){var r=n.getProps(),o=r.dragPropagation,i=r.dragDirectionLock,a=r.onDirectionLock,s=r.onDrag;if(o||n.openGlobalLock){var u=e.offset;if(i&&null===n.currentDirection)return n.currentDirection=function(t,e){void 0===e&&(e=10);var n=null;return Math.abs(t.y)>e?n="y":Math.abs(t.x)>e&&(n="x"),n}(u),void(null!==n.currentDirection&&(null==a||a(n.currentDirection)));n.updateAxis("x",e.point,u),n.updateAxis("y",e.point,u),n.visualElement.syncRender(),null==s||s(t,e)}},onSessionEnd:function(t,e){return n.stop(t,e)}},{transformPagePoint:this.visualElement.getTransformPagePoint()}))},t.prototype.stop=function(t,e){var n=this.isDragging;if(this.cancel(),n){var r=e.velocity;this.startAnimation(r);var o=this.getProps().onDragEnd;null==o||o(t,e)}},t.prototype.cancel=function(){var t,e;this.isDragging=!1,this.visualElement.projection&&(this.visualElement.projection.isAnimationBlocked=!1),null===(t=this.panSession)||void 0===t||t.end(),this.panSession=void 0,!this.getProps().dragPropagation&&this.openGlobalLock&&(this.openGlobalLock(),this.openGlobalLock=null),null===(e=this.visualElement.animationState)||void 0===e||e.setActive(Se.Drag,!1)},t.prototype.updateAxis=function(t,e,n){var r=this.getProps().drag;if(n&&Ti(t,r,this.currentDirection)){var o,i,a,s,u,l=this.getAxisMotionValue(t),c=this.originPoint[t]+n[t];this.constraints&&this.constraints[t]&&(o=c,i=this.constraints[t],a=this.elastic[t],s=i.min,u=i.max,void 0!==s&&o<s?o=a?Pn(s,o,a.min):Math.max(o,s):void 0!==u&&o>u&&(o=a?Pn(u,o,a.max):Math.min(o,u)),c=o),l.set(c)}},t.prototype.resolveConstraints=function(){var t=this,e=this.getProps(),n=e.dragConstraints,r=e.dragElastic,o=(this.visualElement.projection||{}).layout,i=this.constraints;n&&et(n)?this.constraints||(this.constraints=this.resolveRefConstraints()):this.constraints=!(!n||!o)&&function(t,e){var n=e.top,r=e.left,o=e.bottom,i=e.right;return{x:Qo(t.x,r,i),y:Qo(t.y,n,o)}}(o.actual,n),this.elastic=function(t){return void 0===t&&(t=ti),!1===t?t=0:!0===t&&(t=ti),{x:ei(t,"left","right"),y:ei(t,"top","bottom")}}(r),i!==this.constraints&&o&&this.constraints&&!this.hasMutatedConstraints&&ii((function(e){t.getAxisMotionValue(e)&&(t.constraints[e]=function(t,e){var n={};return void 0!==e.min&&(n.min=e.min-t.min),void 0!==e.max&&(n.max=e.max-t.min),n}(o.actual[e],t.constraints[e]))}))},t.prototype.resolveRefConstraints=function(){var t=this.getProps(),e=t.dragConstraints,n=t.onMeasureDragConstraints;if(!e||!et(e))return!1;var r=e.current;X(null!==r,"If `dragConstraints` is set as a React ref, that ref must be passed to another component's `ref` prop.");var o=this.visualElement.projection;if(!o||!o.layout)return!1;var i=function(t,e,n){var r=xi(t,n),o=e.scroll;return o&&(hi(r.x,o.x),hi(r.y,o.y)),r}(r,o.root,this.visualElement.getTransformPagePoint()),a=function(t,e){return{x:Jo(t.x,e.x),y:Jo(t.y,e.y)}}(o.layout.actual,i);if(n){var s=n(function(t){var e=t.x,n=t.y;return{top:n.min,right:e.max,bottom:n.max,left:e.min}}(a));this.hasMutatedConstraints=!!s,s&&(a=ai(s))}return a},t.prototype.startAnimation=function(t){var e=this,n=this.getProps(),r=n.drag,i=n.dragMomentum,a=n.dragElastic,s=n.dragTransition,u=n.dragSnapToOrigin,l=n.onDragTransitionEnd,c=this.constraints||{},d=ii((function(n){var l;if(Ti(n,r,e.currentDirection)){var d=null!==(l=null==c?void 0:c[n])&&void 0!==l?l:{};u&&(d={min:0,max:0});var f=a?200:1e6,p=a?40:1e7,v=o(o({type:"inertia",velocity:i?t[n]:0,bounceStiffness:f,bounceDamping:p,timeConstant:750,restDelta:1,restSpeed:10},s),d);return e.startAxisValueAnimation(n,v)}}));return Promise.all(d).then(l)},t.prototype.startAxisValueAnimation=function(t,e){return uo(t,this.getAxisMotionValue(t),0,e)},t.prototype.stopAnimation=function(){var t=this;ii((function(e){return t.getAxisMotionValue(e).stop()}))},t.prototype.getAxisMotionValue=function(t){var e,n,r="_drag"+t.toUpperCase();return this.visualElement.getProps()[r]||this.visualElement.getValue(t,null!==(n=null===(e=this.visualElement.getProps().initial)||void 0===e?void 0:e[t])&&void 0!==n?n:0)},t.prototype.snapToCursor=function(t){var e=this;ii((function(n){if(Ti(n,e.getProps().drag,e.currentDirection)){var r=e.visualElement.projection,o=e.getAxisMotionValue(n);if(r&&r.layout){var i=r.layout.actual[n],a=i.min,s=i.max;o.set(t[n]-Pn(a,s,.5))}}}))},t.prototype.scalePositionWithinConstraints=function(){var t,e=this,n=this.getProps(),r=n.drag,o=n.dragConstraints,i=this.visualElement.projection;if(et(o)&&i&&this.constraints){this.stopAnimation();var a={x:0,y:0};ii((function(t){var n,r,o,i,s,u=e.getAxisMotionValue(t);if(u){var l=u.get();a[t]=(n={min:l,max:l},r=e.constraints[t],o=.5,i=Go(n),(s=Go(r))>i?o=An(r.min,r.max-i,n.min):i>s&&(o=An(n.min,n.max-s,r.min)),fn(0,1,o))}}));var s=this.visualElement.getProps().transformTemplate;this.visualElement.getInstance().style.transform=s?s({},""):"none",null===(t=i.root)||void 0===t||t.updateScroll(),i.updateLayout(),this.resolveConstraints(),ii((function(t){if(Ti(t,r,null)){var n=e.getAxisMotionValue(t),o=e.constraints[t],i=o.min,s=o.max;n.set(Pn(i,s,a[t]))}}))}},t.prototype.addListeners=function(){var t,e=this;bi.set(this.visualElement,this);var n=He(this.visualElement.getInstance(),"pointerdown",(function(t){var n=e.getProps(),r=n.drag,o=n.dragListener;r&&(void 0===o||o)&&e.start(t)})),r=function(){et(e.getProps().dragConstraints)&&(e.constraints=e.resolveRefConstraints())},o=this.visualElement.projection,i=o.addEventListener("measure",r);o&&!o.layout&&(null===(t=o.root)||void 0===t||t.updateScroll(),o.updateLayout()),r();var a=Ce(window,"resize",(function(){return e.scalePositionWithinConstraints()}));return o.addEventListener("didUpdate",(function(t){var n=t.delta,r=t.hasLayoutChanged;e.isDragging&&r&&(ii((function(t){var r=e.getAxisMotionValue(t);r&&(e.originPoint[t]+=n[t].translate,r.set(r.get()+n[t].translate))})),e.visualElement.syncRender())})),function(){a(),n(),i()}},t.prototype.getProps=function(){var t=this.visualElement.getProps(),e=t.drag,n=void 0!==e&&e,r=t.dragDirectionLock,i=void 0!==r&&r,a=t.dragPropagation,s=void 0!==a&&a,u=t.dragConstraints,l=void 0!==u&&u,c=t.dragElastic,d=void 0===c?ti:c,f=t.dragMomentum,p=void 0===f||f;return o(o({},t),{drag:n,dragDirectionLock:i,dragPropagation:s,dragConstraints:l,dragElastic:d,dragMomentum:p})},t}();function Ti(t,e,n){return!(!0!==e&&e!==t||null!==n&&n!==t)}var Si={pan:un((function(t){var e=t.onPan,n=t.onPanStart,r=t.onPanEnd,o=t.onPanSessionStart,i=t.visualElement,a=e||n||r||o,s=(0,l.useRef)(null),u=(0,l.useContext)(K).transformPagePoint,c={onSessionStart:o,onStart:n,onMove:e,onEnd:function(t,e){s.current=null,r&&r(t,e)}};(0,l.useEffect)((function(){null!==s.current&&s.current.updateHandlers(c)})),ze(i,"pointerdown",a&&function(t){s.current=new Uo(t,c,{transformPagePoint:u})}),F((function(){return s.current&&s.current.end()}))})),drag:un((function(t){var e=t.dragControls,n=t.visualElement,r=L((function(){return new wi(n)}));(0,l.useEffect)((function(){return e&&e.subscribe(r)}),[r,e]),(0,l.useEffect)((function(){return r.addListeners()}),[r])}))},Ai=["LayoutMeasure","BeforeLayoutMeasure","LayoutUpdate","ViewportBoxUpdate","Update","Render","AnimationComplete","LayoutAnimationComplete","AnimationStart","LayoutAnimationStart","SetAxisTarget","Unmount"],Pi=function(t){var e=t.treeType,n=void 0===e?"":e,r=t.build,i=t.getBaseTarget,a=t.makeTargetAnimatable,l=t.measureViewportBox,c=t.render,d=t.readValueFromInstance,f=t.removeValueFromRenderState,p=t.sortNodePosition,v=t.scrapeMotionValuesFromProps;return function(t,e){var h=t.parent,m=t.props,g=t.presenceId,y=t.blockInitialAnimation,E=t.visualState,x=t.shouldReduceMotion;void 0===e&&(e={});var b,T,S=!1,A=E.latestValues,P=E.renderState,C=function(){var t=Ai.map((function(){return new po})),e={},n={clearAllListeners:function(){return t.forEach((function(t){return t.clear()}))},updatePropListeners:function(t){Ai.forEach((function(r){var o,i="on"+r,a=t[i];null===(o=e[r])||void 0===o||o.call(e),a&&(e[r]=n[i](a))}))}};return t.forEach((function(t,e){n["on"+Ai[e]]=function(e){return t.add(e)},n["notify"+Ai[e]]=function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return t.notify.apply(t,u([],s(e),!1))}})),n}(),V=new Map,R=new Map,O={},D=o({},A);function L(){b&&S&&(k(),c(b,P,m.style,H.projection))}function k(){r(H,P,A,e,m)}function N(){C.notifyUpdate(A)}function I(t,e){var n=e.onChange((function(e){A[t]=e,m.onUpdate&&M.update(N,!1,!0)})),r=e.onRenderRequest(H.scheduleRender);R.set(t,(function(){n(),r()}))}var j=v(m);for(var U in j){var B=j[U];void 0!==A[U]&&Pt(B)&&B.set(A[U],!1)}var F=at(m),_=st(m),H=o(o({treeType:n,current:null,depth:h?h.depth+1:0,parent:h,children:new Set,presenceId:g,shouldReduceMotion:x,variantChildren:_?new Set:void 0,isVisible:void 0,manuallyAnimateOnMount:Boolean(null==h?void 0:h.isMounted()),blockInitialAnimation:y,isMounted:function(){return Boolean(b)},mount:function(t){S=!0,b=H.current=t,H.projection&&H.projection.mount(t),_&&h&&!F&&(T=null==h?void 0:h.addVariantChild(H)),V.forEach((function(t,e){return I(e,t)})),null==h||h.children.add(H),H.setProps(m)},unmount:function(){var t;null===(t=H.projection)||void 0===t||t.unmount(),w.update(N),w.render(L),R.forEach((function(t){return t()})),null==T||T(),null==h||h.children.delete(H),C.clearAllListeners(),b=void 0,S=!1},addVariantChild:function(t){var e,n=H.getClosestVariantNode();if(n)return null===(e=n.variantChildren)||void 0===e||e.add(t),function(){return n.variantChildren.delete(t)}},sortNodePosition:function(t){return p&&n===t.treeType?p(H.getInstance(),t.getInstance()):0},getClosestVariantNode:function(){return _?H:null==h?void 0:h.getClosestVariantNode()},getLayoutId:function(){return m.layoutId},getInstance:function(){return b},getStaticValue:function(t){return A[t]},setStaticValue:function(t,e){return A[t]=e},getLatestValues:function(){return A},setVisibility:function(t){H.isVisible!==t&&(H.isVisible=t,H.scheduleRender())},makeTargetAnimatable:function(t,e){return void 0===e&&(e=!0),a(H,t,m,e)},measureViewportBox:function(){return l(b,m)},addValue:function(t,e){H.hasValue(t)&&H.removeValue(t),V.set(t,e),A[t]=e.get(),I(t,e)},removeValue:function(t){var e;V.delete(t),null===(e=R.get(t))||void 0===e||e(),R.delete(t),delete A[t],f(t,P)},hasValue:function(t){return V.has(t)},getValue:function(t,e){var n=V.get(t);return void 0===n&&void 0!==e&&(n=mo(e),H.addValue(t,n)),n},forEachValue:function(t){return V.forEach(t)},readValue:function(t){var n;return null!==(n=A[t])&&void 0!==n?n:d(b,t,e)},setBaseTarget:function(t,e){D[t]=e},getBaseTarget:function(t){if(i){var e=i(m,t);if(void 0!==e&&!Pt(e))return e}return D[t]}},C),{build:function(){return k(),P},scheduleRender:function(){M.render(L,!1,!0)},syncRender:L,setProps:function(t){(t.transformTemplate||m.transformTemplate)&&H.scheduleRender(),m=t,C.updatePropListeners(t),O=function(t,e,n){var r;for(var o in e){var i=e[o],a=n[o];if(Pt(i))t.addValue(o,i);else if(Pt(a))t.addValue(o,mo(i));else if(a!==i)if(t.hasValue(o)){var s=t.getValue(o);!s.hasAnimated&&s.set(i)}else t.addValue(o,mo(null!==(r=t.getStaticValue(o))&&void 0!==r?r:i))}for(var o in n)void 0===e[o]&&t.removeValue(o);return e}(H,v(m),O)},getProps:function(){return m},getVariant:function(t){var e;return null===(e=m.variants)||void 0===e?void 0:e[t]},getDefaultTransition:function(){return m.transition},getTransformPagePoint:function(){return m.transformPagePoint},getVariantContext:function(t){if(void 0===t&&(t=!1),t)return null==h?void 0:h.getVariantContext();if(!F){var e=(null==h?void 0:h.getVariantContext())||{};return void 0!==m.initial&&(e.initial=m.initial),e}for(var n={},r=0;r<Mi;r++){var o=Ci[r],i=m[o];(rt(i)||!1===i)&&(n[o]=i)}return n}});return H}},Ci=u(["initial"],s(Mo),!1),Mi=Ci.length;function Vi(t){return"string"==typeof t&&t.startsWith("var(--")}var Ri=/var\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\)/,Oi=4;function Di(t,e,n){void 0===n&&(n=1),X(n<=Oi,'Max CSS variable fallback depth detected in property "'.concat(t,'". This may indicate a circular fallback dependency.'));var r=s(function(t){var e=Ri.exec(t);if(!e)return[,];var n=s(e,3);return[n[1],n[2]]}(t),2),o=r[0],i=r[1];if(o){var a=window.getComputedStyle(e).getPropertyValue(o);return a?a.trim():Vi(i)?Di(i,e,n+1):i}}var Li,ki=new Set(["width","height","top","left","right","bottom","x","y"]),Ni=function(t){return ki.has(t)},Ii=function(t,e){t.set(e,!1),t.set(e)},ji=function(t){return t===zt||t===Bt};!function(t){t.width="width",t.height="height",t.left="left",t.right="right",t.top="top",t.bottom="bottom"}(Li||(Li={}));var Ui=function(t,e){return parseFloat(t.split(", ")[e])},Bi=function(t,e){return function(n,r){var o=r.transform;if("none"===o||!o)return 0;var i=o.match(/^matrix3d\((.+)\)$/);if(i)return Ui(i[1],e);var a=o.match(/^matrix\((.+)\)$/);return a?Ui(a[1],t):0}},Fi=new Set(["x","y","z"]),_i=Et.filter((function(t){return!Fi.has(t)})),Hi={width:function(t,e){var n=t.x,r=e.paddingLeft,o=void 0===r?"0":r,i=e.paddingRight,a=void 0===i?"0":i;return n.max-n.min-parseFloat(o)-parseFloat(a)},height:function(t,e){var n=t.y,r=e.paddingTop,o=void 0===r?"0":r,i=e.paddingBottom,a=void 0===i?"0":i;return n.max-n.min-parseFloat(o)-parseFloat(a)},top:function(t,e){var n=e.top;return parseFloat(n)},left:function(t,e){var n=e.left;return parseFloat(n)},bottom:function(t,e){var n=t.y,r=e.top;return parseFloat(r)+(n.max-n.min)},right:function(t,e){var n=t.x,r=e.left;return parseFloat(r)+(n.max-n.min)},x:Bi(4,13),y:Bi(5,14)},zi=function(t,e,n,r){var a=function(t,e,n){var r,a=i(e,[]),s=t.getInstance();if(!(s instanceof Element))return{target:a,transitionEnd:n};for(var u in n&&(n=o({},n)),t.forEachValue((function(t){var e=t.get();if(Vi(e)){var n=Di(e,s);n&&t.set(n)}})),a){var l=a[u];if(Vi(l)){var c=Di(l,s);c&&(a[u]=c,n&&(null!==(r=n[u])&&void 0!==r||(n[u]=l)))}}return{target:a,transitionEnd:n}}(t,e,r);return function(t,e,n,r){return function(t){return Object.keys(t).some(Ni)}(e)?function(t,e,n,r){void 0===n&&(n={}),void 0===r&&(r={}),e=o({},e),r=o({},r);var i=Object.keys(e).filter(Ni),a=[],u=!1,l=[];if(i.forEach((function(o){var i=t.getValue(o);if(t.hasValue(o)){var s,c=n[o],d=Eo(c),f=e[o];if(ge(f)){var p=f.length,v=null===f[0]?1:0;c=f[v],d=Eo(c);for(var h=v;h<p;h++)s?X(Eo(f[h])===s,"All keyframes must be of the same type"):(s=Eo(f[h]),X(s===d||ji(d)&&ji(s),"Keyframes must be of the same dimension as the current value"))}else s=Eo(f);if(d!==s)if(ji(d)&&ji(s)){var m=i.get();"string"==typeof m&&i.set(parseFloat(m)),"string"==typeof f?e[o]=parseFloat(f):Array.isArray(f)&&s===Bt&&(e[o]=f.map(parseFloat))}else(null==d?void 0:d.transform)&&(null==s?void 0:s.transform)&&(0===c||0===f)?0===c?i.set(s.transform(c)):e[o]=d.transform(f):(u||(a=function(t){var e=[];return _i.forEach((function(n){var r=t.getValue(n);void 0!==r&&(e.push([n,r.get()]),r.set(n.startsWith("scale")?1:0))})),e.length&&t.syncRender(),e}(t),u=!0),l.push(o),r[o]=void 0!==r[o]?r[o]:e[o],Ii(i,f))}})),l.length){var c=l.indexOf("height")>=0?window.pageYOffset:null,d=function(t,e,n){var r=e.measureViewportBox(),o=e.getInstance(),i=getComputedStyle(o),a=i.display,s={};"none"===a&&e.setStaticValue("display",t.display||"block"),n.forEach((function(t){s[t]=Hi[t](r,i)})),e.syncRender();var u=e.measureViewportBox();return n.forEach((function(n){var r=e.getValue(n);Ii(r,s[n]),t[n]=Hi[n](u,i)})),t}(e,t,l);return a.length&&a.forEach((function(e){var n=s(e,2),r=n[0],o=n[1];t.getValue(r).set(o)})),t.syncRender(),null!==c&&window.scrollTo({top:c}),{target:d,transitionEnd:r}}return{target:e,transitionEnd:r}}(t,e,n,r):{target:e,transitionEnd:r}}(t,e=a.target,n,r=a.transitionEnd)},Wi={treeType:"dom",readValueFromInstance:function(t,e){if(wt(e)){var n=to(e);return n&&n.default||0}var r,o=(r=t,window.getComputedStyle(r));return(Mt(e)?o.getPropertyValue(e):o[e])||0},sortNodePosition:function(t,e){return 2&t.compareDocumentPosition(e)?1:-1},getBaseTarget:function(t,e){var n;return null===(n=t.style)||void 0===n?void 0:n[e]},measureViewportBox:function(t,e){return xi(t,e.transformPagePoint)},resetTransform:function(t,e,n){var r=n.transformTemplate;e.style.transform=r?r({},""):"none",t.scheduleRender()},restoreTransform:function(t,e){t.style.transform=e.style.transform},removeValueFromRenderState:function(t,e){var n=e.vars,r=e.style;delete n[t],delete r[t]},makeTargetAnimatable:function(t,e,n,r){var a=n.transformValues;void 0===r&&(r=!0);var s=e.transition,u=e.transitionEnd,l=i(e,["transition","transitionEnd"]),c=function(t,e,n){var r,o,i={};for(var a in t)i[a]=null!==(r=To(a,e))&&void 0!==r?r:null===(o=n.getValue(a))||void 0===o?void 0:o.get();return i}(l,s||{},t);if(a&&(u&&(u=a(u)),l&&(l=a(l)),c&&(c=a(c))),r){!function(t,e,n){var r,o,i,a,s=Object.keys(e).filter((function(e){return!t.hasValue(e)})),u=s.length;if(u)for(var l=0;l<u;l++){var c=s[l],d=e[c],f=null;Array.isArray(d)&&(f=d[0]),null===f&&(f=null!==(o=null!==(r=n[c])&&void 0!==r?r:t.readValue(c))&&void 0!==o?o:e[c]),null!=f&&("string"==typeof f&&(/^\-?\d*\.?\d+$/.test(f)||lo(f))?f=parseFloat(f):!bo(f)&&Zn.test(d)&&(f=eo(c,d)),t.addValue(c,mo(f)),null!==(i=(a=n)[c])&&void 0!==i||(a[c]=f),t.setBaseTarget(c,f))}}(t,l,c);var d=zi(t,l,c,u);u=d.transitionEnd,l=d.target}return o({transition:s,transitionEnd:u},l)},scrapeMotionValuesFromProps:ve,build:function(t,e,n,r,o){void 0!==t.isVisible&&(e.style.visibility=t.isVisible?"visible":"hidden"),Zt(e,n,r,o.transformTemplate)},render:de},Gi=Pi(Wi),Xi=Pi(o(o({},Wi),{getBaseTarget:function(t,e){return t[e]},readValueFromInstance:function(t,e){var n;return wt(e)?(null===(n=to(e))||void 0===n?void 0:n.default)||0:(e=fe.has(e)?e:ce(e),t.getAttribute(e))},scrapeMotionValuesFromProps:he,build:function(t,e,n,r,o){ie(e,n,r,o.transformTemplate)},render:pe})),Yi=function(t,e){return mt(t)?Xi(e,{enableHardwareAcceleration:!1}):Gi(e,{enableHardwareAcceleration:!0})};function Zi(t,e){return e.max===e.min?0:t/(e.max-e.min)*100}var qi={correct:function(t,e){if(!e.target)return t;if("string"==typeof t){if(!Bt.test(t))return t;t=parseFloat(t)}var n=Zi(t,e.target.x),r=Zi(t,e.target.y);return"".concat(n,"% ").concat(r,"%")}},Ki="_$css",$i={correct:function(t,e){var n=e.treeScale,r=e.projectionDelta,o=t,i=t.includes("var("),a=[];i&&(t=t.replace(Ri,(function(t){return a.push(t),Ki})));var s=Zn.parse(t);if(s.length>5)return o;var u=Zn.createTransformer(t),l="number"!=typeof s[0]?1:0,c=r.x.scale*n.x,d=r.y.scale*n.y;s[0+l]/=c,s[1+l]/=d;var f=Pn(c,d,.5);"number"==typeof s[2+l]&&(s[2+l]/=f),"number"==typeof s[3+l]&&(s[3+l]/=f);var p=u(s);if(i){var v=0;p=p.replace(Ki,(function(){var t=a[v];return v++,t}))}return p}},Qi=function(t){function e(){return null!==t&&t.apply(this,arguments)||this}return r(e,t),e.prototype.componentDidMount=function(){var t,e=this,n=this.props,r=n.visualElement,i=n.layoutGroup,a=n.switchLayoutGroup,s=n.layoutId,u=r.projection;t=Ji,Object.assign(gt,t),u&&((null==i?void 0:i.group)&&i.group.add(u),(null==a?void 0:a.register)&&s&&a.register(u),u.root.didUpdate(),u.addEventListener("animationComplete",(function(){e.safeToRemove()})),u.setOptions(o(o({},u.options),{onExitComplete:function(){return e.safeToRemove()}}))),lt.hasEverUpdated=!0},e.prototype.getSnapshotBeforeUpdate=function(t){var e=this,n=this.props,r=n.layoutDependency,o=n.visualElement,i=n.drag,a=n.isPresent,s=o.projection;return s?(s.isPresent=a,i||t.layoutDependency!==r||void 0===r?s.willUpdate():this.safeToRemove(),t.isPresent!==a&&(a?s.promote():s.relegate()||M.postRender((function(){var t;(null===(t=s.getStack())||void 0===t?void 0:t.members.length)||e.safeToRemove()}))),null):null},e.prototype.componentDidUpdate=function(){var t=this.props.visualElement.projection;t&&(t.root.didUpdate(),!t.currentAnimation&&t.isLead()&&this.safeToRemove())},e.prototype.componentWillUnmount=function(){var t=this.props,e=t.visualElement,n=t.layoutGroup,r=t.switchLayoutGroup,o=e.projection;o&&(o.scheduleCheckAfterUnmount(),(null==n?void 0:n.group)&&n.group.remove(o),(null==r?void 0:r.deregister)&&r.deregister(o))},e.prototype.safeToRemove=function(){var t=this.props.safeToRemove;null==t||t()},e.prototype.render=function(){return null},e}(l.Component),Ji={borderRadius:o(o({},qi),{applyTo:["borderTopLeftRadius","borderTopRightRadius","borderBottomLeftRadius","borderBottomRightRadius"]}),borderTopLeftRadius:qi,borderTopRightRadius:qi,borderBottomLeftRadius:qi,borderBottomRightRadius:qi,boxShadow:$i},ta={measureLayout:function(t){var e=s(cn(),2),n=e[0],r=e[1],i=(0,l.useContext)(B);return l.createElement(Qi,o({},t,{layoutGroup:i,switchLayoutGroup:(0,l.useContext)(dt),isPresent:n,safeToRemove:r}))}},ea=["TopLeft","TopRight","BottomLeft","BottomRight"],na=ea.length,ra=function(t){return"string"==typeof t?parseFloat(t):t},oa=function(t){return"number"==typeof t||Bt.test(t)};function ia(t,e){var n;return null!==(n=t[e])&&void 0!==n?n:t.borderRadius}var aa=ua(0,.5,dr),sa=ua(.5,.95,ar);function ua(t,e,n){return function(r){return r<t?0:r>e?1:n(An(t,e,r))}}function la(t,e){t.min=e.min,t.max=e.max}function ca(t,e){la(t.x,e.x),la(t.y,e.y)}function da(t,e,n,r,o){return t=di(t-=e,1/n,r),void 0!==o&&(t=di(t,1/o,r)),t}function fa(t,e,n,r,o){var i=s(n,3),a=i[0],u=i[1],l=i[2];!function(t,e,n,r,o,i,a){if(void 0===e&&(e=0),void 0===n&&(n=1),void 0===r&&(r=.5),void 0===i&&(i=t),void 0===a&&(a=t),Ut.test(e)&&(e=parseFloat(e),e=Pn(a.min,a.max,e/100)-a.min),"number"==typeof e){var s=Pn(i.min,i.max,r);t===i&&(s-=e),t.min=da(t.min,e,n,s,o),t.max=da(t.max,e,n,s,o)}}(t,e[a],e[u],e[l],e.scale,r,o)}var pa=["x","scaleX","originX"],va=["y","scaleY","originY"];function ha(t,e,n,r){fa(t.x,e,pa,null==n?void 0:n.x,null==r?void 0:r.x),fa(t.y,e,va,null==n?void 0:n.y,null==r?void 0:r.y)}function ma(t){return 0===t.translate&&1===t.scale}function ga(t){return ma(t.x)&&ma(t.y)}function ya(t,e){return t.x.min===e.x.min&&t.x.max===e.x.max&&t.y.min===e.y.min&&t.y.max===e.y.max}var Ea=function(){function t(){this.members=[]}return t.prototype.add=function(t){co(this.members,t),t.scheduleRender()},t.prototype.remove=function(t){if(fo(this.members,t),t===this.prevLead&&(this.prevLead=void 0),t===this.lead){var e=this.members[this.members.length-1];e&&this.promote(e)}},t.prototype.relegate=function(t){var e,n=this.members.findIndex((function(e){return t===e}));if(0===n)return!1;for(var r=n;r>=0;r--){var o=this.members[r];if(!1!==o.isPresent){e=o;break}}return!!e&&(this.promote(e),!0)},t.prototype.promote=function(t,e){var n,r=this.lead;t!==r&&(this.prevLead=r,this.lead=t,t.show(),r&&(r.instance&&r.scheduleRender(),t.scheduleRender(),t.resumeFrom=r,e&&(t.resumeFrom.preserveOpacity=!0),r.snapshot&&(t.snapshot=r.snapshot,t.snapshot.latestValues=r.animationValues||r.latestValues,t.snapshot.isShared=!0),(null===(n=t.root)||void 0===n?void 0:n.isUpdating)&&(t.isLayoutDirty=!0),!1===t.options.crossfade&&r.hide()))},t.prototype.exitAnimationComplete=function(){this.members.forEach((function(t){var e,n,r,o,i;null===(n=(e=t.options).onExitComplete)||void 0===n||n.call(e),null===(i=null===(r=t.resumingFrom)||void 0===r?void 0:(o=r.options).onExitComplete)||void 0===i||i.call(o)}))},t.prototype.scheduleRender=function(){this.members.forEach((function(t){t.instance&&t.scheduleRender(!1)}))},t.prototype.removeLeadSnapshot=function(){this.lead&&this.lead.snapshot&&(this.lead.snapshot=void 0)},t}(),xa="translate3d(0px, 0px, 0) scale(1, 1) scale(1, 1)";function ba(t,e,n){var r=t.x.translate/e.x,o=t.y.translate/e.y,i="translate3d(".concat(r,"px, ").concat(o,"px, 0) ");if(i+="scale(".concat(1/e.x,", ").concat(1/e.y,") "),n){var a=n.rotate,s=n.rotateX,u=n.rotateY;a&&(i+="rotate(".concat(a,"deg) ")),s&&(i+="rotateX(".concat(s,"deg) ")),u&&(i+="rotateY(".concat(u,"deg) "))}var l=t.x.scale*e.x,c=t.y.scale*e.y;return(i+="scale(".concat(l,", ").concat(c,")"))===xa?"none":i}var wa=function(t,e){return t.depth-e.depth},Ta=function(){function t(){this.children=[],this.isDirty=!1}return t.prototype.add=function(t){co(this.children,t),this.isDirty=!0},t.prototype.remove=function(t){fo(this.children,t),this.isDirty=!0},t.prototype.forEach=function(t){this.isDirty&&this.children.sort(wa),this.isDirty=!1,this.children.forEach(t)},t}(),Sa=1e3;function Aa(t){var e=t.attachResizeListener,n=t.defaultParent,r=t.measureScroll,i=t.checkIsScrollRoot,a=t.resetTransform;return function(){function t(t,e,r){var o=this;void 0===e&&(e={}),void 0===r&&(r=null==n?void 0:n()),this.children=new Set,this.options={},this.isTreeAnimating=!1,this.isAnimationBlocked=!1,this.isLayoutDirty=!1,this.updateManuallyBlocked=!1,this.updateBlockedByResize=!1,this.isUpdating=!1,this.isSVG=!1,this.needsReset=!1,this.shouldResetTransform=!1,this.treeScale={x:1,y:1},this.eventHandlers=new Map,this.potentialNodes=new Map,this.checkUpdateFailed=function(){o.isUpdating&&(o.isUpdating=!1,o.clearAllSnapshots())},this.updateProjection=function(){o.nodes.forEach(Da),o.nodes.forEach(La)},this.hasProjected=!1,this.isVisible=!0,this.animationProgress=0,this.sharedNodes=new Map,this.id=t,this.latestValues=e,this.root=r?r.root||r:this,this.path=r?u(u([],s(r.path),!1),[r],!1):[],this.parent=r,this.depth=r?r.depth+1:0,t&&this.root.registerPotentialNode(t,this);for(var i=0;i<this.path.length;i++)this.path[i].shouldResetTransform=!0;this.root===this&&(this.nodes=new Ta)}return t.prototype.addEventListener=function(t,e){return this.eventHandlers.has(t)||this.eventHandlers.set(t,new po),this.eventHandlers.get(t).add(e)},t.prototype.notifyListeners=function(t){for(var e=[],n=1;n<arguments.length;n++)e[n-1]=arguments[n];var r=this.eventHandlers.get(t);null==r||r.notify.apply(r,u([],s(e),!1))},t.prototype.hasListeners=function(t){return this.eventHandlers.has(t)},t.prototype.registerPotentialNode=function(t,e){this.potentialNodes.set(t,e)},t.prototype.mount=function(t,n){var r,i=this;if(void 0===n&&(n=!1),!this.instance){this.isSVG=t instanceof SVGElement&&"svg"!==t.tagName,this.instance=t;var a=this.options,s=a.layoutId,u=a.layout,l=a.visualElement;if(l&&!l.getInstance()&&l.mount(t),this.root.nodes.add(this),null===(r=this.parent)||void 0===r||r.children.add(this),this.id&&this.root.potentialNodes.delete(this.id),n&&(u||s)&&(this.isLayoutDirty=!0),e){var c,d=function(){return i.root.updateBlockedByResize=!1};e(t,(function(){i.root.updateBlockedByResize=!0,clearTimeout(c),c=window.setTimeout(d,250),lt.hasAnimatedSinceResize&&(lt.hasAnimatedSinceResize=!1,i.nodes.forEach(Oa))}))}s&&this.root.registerSharedNode(s,this),!1!==this.options.animate&&l&&(s||u)&&this.addEventListener("didUpdate",(function(t){var e,n,r,a,s,u=t.delta,c=t.hasLayoutChanged,d=t.hasRelativeTargetChanged,f=t.layout;if(i.isTreeAnimationBlocked())return i.target=void 0,void(i.relativeTarget=void 0);var p=null!==(n=null!==(e=i.options.transition)&&void 0!==e?e:l.getDefaultTransition())&&void 0!==n?n:Ba,v=l.getProps(),h=v.onLayoutAnimationStart,m=v.onLayoutAnimationComplete,g=!i.targetLayout||!ya(i.targetLayout,f)||d,y=!c&&d;if((null===(r=i.resumeFrom)||void 0===r?void 0:r.instance)||y||c&&(g||!i.currentAnimation)){i.resumeFrom&&(i.resumingFrom=i.resumeFrom,i.resumingFrom.resumingFrom=void 0),i.setAnimationOrigin(u,y);var E=o(o({},so(p,"layout")),{onPlay:h,onComplete:m});l.shouldReduceMotion&&(E.delay=0,E.type=!1),i.startAnimation(E)}else c||0!==i.animationProgress||i.finishAnimation(),i.isLead()&&(null===(s=(a=i.options).onExitComplete)||void 0===s||s.call(a));i.targetLayout=f}))}},t.prototype.unmount=function(){var t,e;this.options.layoutId&&this.willUpdate(),this.root.nodes.remove(this),null===(t=this.getStack())||void 0===t||t.remove(this),null===(e=this.parent)||void 0===e||e.children.delete(this),this.instance=void 0,w.preRender(this.updateProjection)},t.prototype.blockUpdate=function(){this.updateManuallyBlocked=!0},t.prototype.unblockUpdate=function(){this.updateManuallyBlocked=!1},t.prototype.isUpdateBlocked=function(){return this.updateManuallyBlocked||this.updateBlockedByResize},t.prototype.isTreeAnimationBlocked=function(){var t;return this.isAnimationBlocked||(null===(t=this.parent)||void 0===t?void 0:t.isTreeAnimationBlocked())||!1},t.prototype.startUpdate=function(){var t;this.isUpdateBlocked()||(this.isUpdating=!0,null===(t=this.nodes)||void 0===t||t.forEach(ka))},t.prototype.willUpdate=function(t){var e,n,r;if(void 0===t&&(t=!0),this.root.isUpdateBlocked())null===(n=(e=this.options).onExitComplete)||void 0===n||n.call(e);else if(!this.root.isUpdating&&this.root.startUpdate(),!this.isLayoutDirty){this.isLayoutDirty=!0;for(var o=0;o<this.path.length;o++){var i=this.path[o];i.shouldResetTransform=!0,i.updateScroll()}var a=this.options,s=a.layoutId,u=a.layout;if(void 0!==s||u){var l=null===(r=this.options.visualElement)||void 0===r?void 0:r.getProps().transformTemplate;this.prevTransformTemplateValue=null==l?void 0:l(this.latestValues,""),this.updateSnapshot(),t&&this.notifyListeners("willUpdate")}}},t.prototype.didUpdate=function(){if(this.isUpdateBlocked())return this.unblockUpdate(),this.clearAllSnapshots(),void this.nodes.forEach(Va);this.isUpdating&&(this.isUpdating=!1,this.potentialNodes.size&&(this.potentialNodes.forEach(Fa),this.potentialNodes.clear()),this.nodes.forEach(Ra),this.nodes.forEach(Pa),this.nodes.forEach(Ca),this.clearAllSnapshots(),T.update(),T.preRender(),T.render())},t.prototype.clearAllSnapshots=function(){this.nodes.forEach(Ma),this.sharedNodes.forEach(Na)},t.prototype.scheduleUpdateProjection=function(){M.preRender(this.updateProjection,!1,!0)},t.prototype.scheduleCheckAfterUnmount=function(){var t=this;M.postRender((function(){t.isLayoutDirty?t.root.didUpdate():t.root.checkUpdateFailed()}))},t.prototype.updateSnapshot=function(){if(!this.snapshot&&this.instance){var t=this.measure(),e=this.removeTransform(this.removeElementScroll(t));Ha(e),this.snapshot={measured:t,layout:e,latestValues:{}}}},t.prototype.updateLayout=function(){var t;if(this.instance&&(this.updateScroll(),this.options.alwaysMeasureLayout&&this.isLead()||this.isLayoutDirty)){if(this.resumeFrom&&!this.resumeFrom.instance)for(var e=0;e<this.path.length;e++)this.path[e].updateScroll();var n=this.measure();Ha(n);var r=this.layout;this.layout={measured:n,actual:this.removeElementScroll(n)},this.layoutCorrected=oi(),this.isLayoutDirty=!1,this.projectionDelta=void 0,this.notifyListeners("measure",this.layout.actual),null===(t=this.options.visualElement)||void 0===t||t.notifyLayoutMeasure(this.layout.actual,null==r?void 0:r.actual)}},t.prototype.updateScroll=function(){this.options.layoutScroll&&this.instance&&(this.isScrollRoot=i(this.instance),this.scroll=r(this.instance))},t.prototype.resetTransform=function(){var t;if(a){var e=this.isLayoutDirty||this.shouldResetTransform,n=this.projectionDelta&&!ga(this.projectionDelta),r=null===(t=this.options.visualElement)||void 0===t?void 0:t.getProps().transformTemplate,o=null==r?void 0:r(this.latestValues,""),i=o!==this.prevTransformTemplateValue;e&&(n||li(this.latestValues)||i)&&(a(this.instance,o),this.shouldResetTransform=!1,this.scheduleRender())}},t.prototype.measure=function(){var t=this.options.visualElement;if(!t)return oi();var e=t.measureViewportBox(),n=this.root.scroll;return n&&(hi(e.x,n.x),hi(e.y,n.y)),e},t.prototype.removeElementScroll=function(t){var e=oi();ca(e,t);for(var n=0;n<this.path.length;n++){var r=this.path[n],o=r.scroll,i=r.options,a=r.isScrollRoot;if(r!==this.root&&o&&i.layoutScroll){if(a){ca(e,t);var s=this.root.scroll;s&&(hi(e.x,-s.x),hi(e.y,-s.y))}hi(e.x,o.x),hi(e.y,o.y)}}return e},t.prototype.applyTransform=function(t,e){void 0===e&&(e=!1);var n=oi();ca(n,t);for(var r=0;r<this.path.length;r++){var o=this.path[r];!e&&o.options.layoutScroll&&o.scroll&&o!==o.root&&Ei(n,{x:-o.scroll.x,y:-o.scroll.y}),li(o.latestValues)&&Ei(n,o.latestValues)}return li(this.latestValues)&&Ei(n,this.latestValues),n},t.prototype.removeTransform=function(t){var e,n=oi();ca(n,t);for(var r=0;r<this.path.length;r++){var o=this.path[r];if(o.instance&&li(o.latestValues)){ui(o.latestValues)&&o.updateSnapshot();var i=oi();ca(i,o.measure()),ha(n,o.latestValues,null===(e=o.snapshot)||void 0===e?void 0:e.layout,i)}}return li(this.latestValues)&&ha(n,this.latestValues),n},t.prototype.setTargetDelta=function(t){this.targetDelta=t,this.root.scheduleUpdateProjection()},t.prototype.setOptions=function(t){var e;this.options=o(o(o({},this.options),t),{crossfade:null===(e=t.crossfade)||void 0===e||e})},t.prototype.clearMeasurements=function(){this.scroll=void 0,this.layout=void 0,this.snapshot=void 0,this.prevTransformTemplateValue=void 0,this.targetDelta=void 0,this.target=void 0,this.isLayoutDirty=!1},t.prototype.resolveTargetDelta=function(){var t,e,n,r,o=this.options,i=o.layout,a=o.layoutId;this.layout&&(i||a)&&(this.targetDelta||this.relativeTarget||(this.relativeParent=this.getClosestProjectingParent(),this.relativeParent&&this.relativeParent.layout&&(this.relativeTarget=oi(),this.relativeTargetOrigin=oi(),$o(this.relativeTargetOrigin,this.layout.actual,this.relativeParent.layout.actual),ca(this.relativeTarget,this.relativeTargetOrigin))),(this.relativeTarget||this.targetDelta)&&(this.target||(this.target=oi(),this.targetWithTransforms=oi()),this.relativeTarget&&this.relativeTargetOrigin&&(null===(t=this.relativeParent)||void 0===t?void 0:t.target)?(e=this.target,n=this.relativeTarget,r=this.relativeParent.target,qo(e.x,n.x,r.x),qo(e.y,n.y,r.y)):this.targetDelta?(Boolean(this.resumingFrom)?this.target=this.applyTransform(this.layout.actual):ca(this.target,this.layout.actual),vi(this.target,this.targetDelta)):ca(this.target,this.layout.actual),this.attemptToResolveRelativeTarget&&(this.attemptToResolveRelativeTarget=!1,this.relativeParent=this.getClosestProjectingParent(),this.relativeParent&&Boolean(this.relativeParent.resumingFrom)===Boolean(this.resumingFrom)&&!this.relativeParent.options.layoutScroll&&this.relativeParent.target&&(this.relativeTarget=oi(),this.relativeTargetOrigin=oi(),$o(this.relativeTargetOrigin,this.target,this.relativeParent.target),ca(this.relativeTarget,this.relativeTargetOrigin)))))},t.prototype.getClosestProjectingParent=function(){if(this.parent&&!li(this.parent.latestValues))return(this.parent.relativeTarget||this.parent.targetDelta)&&this.parent.layout?this.parent:this.parent.getClosestProjectingParent()},t.prototype.calcProjection=function(){var t,e=this.options,n=e.layout,r=e.layoutId;if(this.isTreeAnimating=Boolean((null===(t=this.parent)||void 0===t?void 0:t.isTreeAnimating)||this.currentAnimation||this.pendingAnimation),this.isTreeAnimating||(this.targetDelta=this.relativeTarget=void 0),this.layout&&(n||r)){var o=this.getLead();ca(this.layoutCorrected,this.layout.actual),function(t,e,n,r){var o,i;void 0===r&&(r=!1);var a=n.length;if(a){var s,u;e.x=e.y=1;for(var l=0;l<a;l++)u=(s=n[l]).projectionDelta,"contents"!==(null===(i=null===(o=s.instance)||void 0===o?void 0:o.style)||void 0===i?void 0:i.display)&&(r&&s.options.layoutScroll&&s.scroll&&s!==s.root&&Ei(t,{x:-s.scroll.x,y:-s.scroll.y}),u&&(e.x*=u.x.scale,e.y*=u.y.scale,vi(t,u)),r&&li(s.latestValues)&&Ei(t,s.latestValues))}}(this.layoutCorrected,this.treeScale,this.path,Boolean(this.resumingFrom)||this!==o);var i=o.target;if(i){this.projectionDelta||(this.projectionDelta=ri(),this.projectionDeltaWithTransform=ri());var a=this.treeScale.x,s=this.treeScale.y,u=this.projectionTransform;Zo(this.projectionDelta,this.layoutCorrected,i,this.latestValues),this.projectionTransform=ba(this.projectionDelta,this.treeScale),this.projectionTransform===u&&this.treeScale.x===a&&this.treeScale.y===s||(this.hasProjected=!0,this.scheduleRender(),this.notifyListeners("projectionUpdate",i))}}},t.prototype.hide=function(){this.isVisible=!1},t.prototype.show=function(){this.isVisible=!0},t.prototype.scheduleRender=function(t){var e,n,r;void 0===t&&(t=!0),null===(n=(e=this.options).scheduleRender)||void 0===n||n.call(e),t&&(null===(r=this.getStack())||void 0===r||r.scheduleRender()),this.resumingFrom&&!this.resumingFrom.instance&&(this.resumingFrom=void 0)},t.prototype.setAnimationOrigin=function(t,e){var n,r=this;void 0===e&&(e=!1);var i=this.snapshot,a=(null==i?void 0:i.latestValues)||{},s=o({},this.latestValues),u=ri();this.relativeTarget=this.relativeTargetOrigin=void 0,this.attemptToResolveRelativeTarget=!e;var l=oi(),c=null==i?void 0:i.isShared,d=((null===(n=this.getStack())||void 0===n?void 0:n.members.length)||0)<=1,f=Boolean(c&&!d&&!0===this.options.crossfade&&!this.path.some(Ua));this.animationProgress=0,this.mixTargetDelta=function(e){var n,o,i,p,v,h=e/1e3;Ia(u.x,t.x,h),Ia(u.y,t.y,h),r.setTargetDelta(u),r.relativeTarget&&r.relativeTargetOrigin&&r.layout&&(null===(n=r.relativeParent)||void 0===n?void 0:n.layout)&&($o(l,r.layout.actual,r.relativeParent.layout.actual),o=r.relativeTarget,i=r.relativeTargetOrigin,p=l,v=h,ja(o.x,i.x,p.x,v),ja(o.y,i.y,p.y,v)),c&&(r.animationValues=s,function(t,e,n,r,o,i){var a,s,u,l;o?(t.opacity=Pn(0,null!==(a=n.opacity)&&void 0!==a?a:1,aa(r)),t.opacityExit=Pn(null!==(s=e.opacity)&&void 0!==s?s:1,0,sa(r))):i&&(t.opacity=Pn(null!==(u=e.opacity)&&void 0!==u?u:1,null!==(l=n.opacity)&&void 0!==l?l:1,r));for(var c=0;c<na;c++){var d="border".concat(ea[c],"Radius"),f=ia(e,d),p=ia(n,d);void 0===f&&void 0===p||(f||(f=0),p||(p=0),0===f||0===p||oa(f)===oa(p)?(t[d]=Math.max(Pn(ra(f),ra(p),r),0),(Ut.test(p)||Ut.test(f))&&(t[d]+="%")):t[d]=p)}(e.rotate||n.rotate)&&(t.rotate=Pn(e.rotate||0,n.rotate||0,r))}(s,a,r.latestValues,h,f,d)),r.root.scheduleUpdateProjection(),r.scheduleRender(),r.animationProgress=h},this.mixTargetDelta(0)},t.prototype.startAnimation=function(t){var e,n,r=this;this.notifyListeners("animationStart"),null===(e=this.currentAnimation)||void 0===e||e.stop(),this.resumingFrom&&(null===(n=this.resumingFrom.currentAnimation)||void 0===n||n.stop()),this.pendingAnimation&&(w.update(this.pendingAnimation),this.pendingAnimation=void 0),this.pendingAnimation=M.update((function(){lt.hasAnimatedSinceResize=!0,r.currentAnimation=function(t,e,n){void 0===n&&(n={});var r=Pt(0)?0:mo(0);return uo("",r,e,n),{stop:function(){return r.stop()},isAnimating:function(){return r.isAnimating()}}}(0,Sa,o(o({},t),{onUpdate:function(e){var n;r.mixTargetDelta(e),null===(n=t.onUpdate)||void 0===n||n.call(t,e)},onComplete:function(){var e;null===(e=t.onComplete)||void 0===e||e.call(t),r.completeAnimation()}})),r.resumingFrom&&(r.resumingFrom.currentAnimation=r.currentAnimation),r.pendingAnimation=void 0}))},t.prototype.completeAnimation=function(){var t;this.resumingFrom&&(this.resumingFrom.currentAnimation=void 0,this.resumingFrom.preserveOpacity=void 0),null===(t=this.getStack())||void 0===t||t.exitAnimationComplete(),this.resumingFrom=this.currentAnimation=this.animationValues=void 0,this.notifyListeners("animationComplete")},t.prototype.finishAnimation=function(){var t;this.currentAnimation&&(null===(t=this.mixTargetDelta)||void 0===t||t.call(this,Sa),this.currentAnimation.stop()),this.completeAnimation()},t.prototype.applyTransformsToTarget=function(){var t=this.getLead(),e=t.targetWithTransforms,n=t.target,r=t.layout,o=t.latestValues;e&&n&&r&&(ca(e,n),Ei(e,o),Zo(this.projectionDeltaWithTransform,this.layoutCorrected,e,o))},t.prototype.registerSharedNode=function(t,e){var n,r,o;this.sharedNodes.has(t)||this.sharedNodes.set(t,new Ea),this.sharedNodes.get(t).add(e),e.promote({transition:null===(n=e.options.initialPromotionConfig)||void 0===n?void 0:n.transition,preserveFollowOpacity:null===(o=null===(r=e.options.initialPromotionConfig)||void 0===r?void 0:r.shouldPreserveFollowOpacity)||void 0===o?void 0:o.call(r,e)})},t.prototype.isLead=function(){var t=this.getStack();return!t||t.lead===this},t.prototype.getLead=function(){var t;return this.options.layoutId&&(null===(t=this.getStack())||void 0===t?void 0:t.lead)||this},t.prototype.getPrevLead=function(){var t;return this.options.layoutId?null===(t=this.getStack())||void 0===t?void 0:t.prevLead:void 0},t.prototype.getStack=function(){var t=this.options.layoutId;if(t)return this.root.sharedNodes.get(t)},t.prototype.promote=function(t){var e=void 0===t?{}:t,n=e.needsReset,r=e.transition,o=e.preserveFollowOpacity,i=this.getStack();i&&i.promote(this,o),n&&(this.projectionDelta=void 0,this.needsReset=!0),r&&this.setOptions({transition:r})},t.prototype.relegate=function(){var t=this.getStack();return!!t&&t.relegate(this)},t.prototype.resetRotation=function(){var t=this.options.visualElement;if(t){for(var e=!1,n={},r=0;r<yt.length;r++){var o="rotate"+yt[r];t.getStaticValue(o)&&(e=!0,n[o]=t.getStaticValue(o),t.setStaticValue(o,0))}if(e){for(var o in null==t||t.syncRender(),n)t.setStaticValue(o,n[o]);t.scheduleRender()}}},t.prototype.getProjectionStyles=function(t){var e,n,r,o,i,a;void 0===t&&(t={});var s={};if(!this.instance||this.isSVG)return s;if(!this.isVisible)return{visibility:"hidden"};s.visibility="";var u=null===(e=this.options.visualElement)||void 0===e?void 0:e.getProps().transformTemplate;if(this.needsReset)return this.needsReset=!1,s.opacity="",s.pointerEvents=xe(t.pointerEvents)||"",s.transform=u?u(this.latestValues,""):"none",s;var l=this.getLead();if(!this.projectionDelta||!this.layout||!l.target){var c={};return this.options.layoutId&&(c.opacity=null!==(n=this.latestValues.opacity)&&void 0!==n?n:1,c.pointerEvents=xe(t.pointerEvents)||""),this.hasProjected&&!li(this.latestValues)&&(c.transform=u?u({},""):"none",this.hasProjected=!1),c}var d=l.animationValues||l.latestValues;this.applyTransformsToTarget(),s.transform=ba(this.projectionDeltaWithTransform,this.treeScale,d),u&&(s.transform=u(d,s.transform));var f=this.projectionDelta,p=f.x,v=f.y;for(var h in s.transformOrigin="".concat(100*p.origin,"% ").concat(100*v.origin,"% 0"),l.animationValues?s.opacity=l===this?null!==(o=null!==(r=d.opacity)&&void 0!==r?r:this.latestValues.opacity)&&void 0!==o?o:1:this.preserveOpacity?this.latestValues.opacity:d.opacityExit:s.opacity=l===this?null!==(i=d.opacity)&&void 0!==i?i:"":null!==(a=d.opacityExit)&&void 0!==a?a:0,gt)if(void 0!==d[h]){var m=gt[h],g=m.correct,y=m.applyTo,E=g(d[h],l);if(y)for(var x=y.length,b=0;b<x;b++)s[y[b]]=E;else s[h]=E}return this.options.layoutId&&(s.pointerEvents=l===this?xe(t.pointerEvents)||"":"none"),s},t.prototype.clearSnapshot=function(){this.resumeFrom=this.snapshot=void 0},t.prototype.resetTree=function(){this.root.nodes.forEach((function(t){var e;return null===(e=t.currentAnimation)||void 0===e?void 0:e.stop()})),this.root.nodes.forEach(Va),this.root.sharedNodes.clear()},t}()}function Pa(t){t.updateLayout()}function Ca(t){var e,n,r,o,i=null!==(n=null===(e=t.resumeFrom)||void 0===e?void 0:e.snapshot)&&void 0!==n?n:t.snapshot;if(t.isLead()&&t.layout&&i&&t.hasListeners("didUpdate")){var a=t.layout,s=a.actual,u=a.measured;"size"===t.options.animationType?ii((function(t){var e=i.isShared?i.measured[t]:i.layout[t],n=Go(e);e.min=s[t].min,e.max=e.min+n})):"position"===t.options.animationType&&ii((function(t){var e=i.isShared?i.measured[t]:i.layout[t],n=Go(s[t]);e.max=e.min+n}));var l=ri();Zo(l,s,i.layout);var c=ri();i.isShared?Zo(c,t.applyTransform(u,!0),i.measured):Zo(c,s,i.layout);var d=!ga(l),f=!1;if(!t.resumeFrom&&(t.relativeParent=t.getClosestProjectingParent(),t.relativeParent&&!t.relativeParent.resumeFrom)){var p=t.relativeParent,v=p.snapshot,h=p.layout;if(v&&h){var m=oi();$o(m,i.layout,v.layout);var g=oi();$o(g,s,h.actual),ya(m,g)||(f=!0)}}t.notifyListeners("didUpdate",{layout:s,snapshot:i,delta:c,layoutDelta:l,hasLayoutChanged:d,hasRelativeTargetChanged:f})}else t.isLead()&&(null===(o=(r=t.options).onExitComplete)||void 0===o||o.call(r));t.options.transition=void 0}function Ma(t){t.clearSnapshot()}function Va(t){t.clearMeasurements()}function Ra(t){var e=t.options.visualElement;(null==e?void 0:e.getProps().onBeforeLayoutMeasure)&&e.notifyBeforeLayoutMeasure(),t.resetTransform()}function Oa(t){t.finishAnimation(),t.targetDelta=t.relativeTarget=t.target=void 0}function Da(t){t.resolveTargetDelta()}function La(t){t.calcProjection()}function ka(t){t.resetRotation()}function Na(t){t.removeLeadSnapshot()}function Ia(t,e,n){t.translate=Pn(e.translate,0,n),t.scale=Pn(e.scale,1,n),t.origin=e.origin,t.originPoint=e.originPoint}function ja(t,e,n,r){t.min=Pn(e.min,n.min,r),t.max=Pn(e.max,n.max,r)}function Ua(t){return t.animationValues&&void 0!==t.animationValues.opacityExit}var Ba={duration:.45,ease:[.4,0,.1,1]};function Fa(t,e){for(var n=t.root,r=t.path.length-1;r>=0;r--)if(Boolean(t.path[r].instance)){n=t.path[r];break}var o=(n&&n!==t.root?n.instance:document).querySelector('[data-projection-id="'.concat(e,'"]'));o&&t.mount(o,!0)}function _a(t){t.min=Math.round(t.min),t.max=Math.round(t.max)}function Ha(t){_a(t.x),_a(t.y)}var za=Aa({attachResizeListener:function(t,e){return Ce(t,"resize",e)},measureScroll:function(){return{x:document.documentElement.scrollLeft||document.body.scrollLeft,y:document.documentElement.scrollTop||document.body.scrollTop}},checkIsScrollRoot:function(){return!0}}),Wa={current:void 0},Ga=Aa({measureScroll:function(t){return{x:t.scrollLeft,y:t.scrollTop}},defaultParent:function(){if(!Wa.current){var t=new za(0,{});t.mount(window),t.setOptions({layoutScroll:!0}),Wa.current=t}return Wa.current},resetTransform:function(t,e){t.style.transform=null!=e?e:"none"},checkIsScrollRoot:function(t){return Boolean("fixed"===window.getComputedStyle(t).position)}}),Xa=o(o(o(o({},Lo),ln),Si),ta),Ya=vt((function(t,e){return function(t,e,n,r,i){var a=e.forwardMotionProps,s=void 0!==a&&a,u=mt(t)?Ae:Pe;return o(o({},u),{preloadedFeatures:n,useRender:ue(s),createVisualElement:r,projectionNodeConstructor:i,Component:t})}(t,e,Xa,Yi,Ga)}));const Za=require("react-dom"),qa={SHOWROOM:"/showroom",SENDOUTS:"/sendouts",SENDOUTS_CMS:"/sendouts-cms",MARKETING_ENGINE:"/media",USER_MANAGEMENT:"/users",TENANTS:"/tenants",DASHBOARD:"/dashboard",DASHBOARD_CREATE_WORKSPACE_MODAL:"/dashboard/create-workspace",CREATE_WORKSPACE:"/create-workspace",SETTINGS:"/settings",INSTORE_ADMIN:"/instore-admin",SUPERADMIN:"/superadmin",CMS:"/cms"},Ka=300,$a=300,Qa=require("@touchtech/web-auth"),Ja=require("@touchtech/web-tenant-id-provider");var ts;!function(t){t.OPEN="OPEN",t.HIDDEN="HIDDEN",t.EXPANDED="EXPANDED"}(ts||(ts={}));const es=c().createContext({});function ns(){return(0,l.useContext)(es)}function rs({children:t,isOpen:e,onNavigationClose:n=(()=>{})}){const[r]=(0,l.useContext)(Ja.TenantIdContext),[o,i]=(0,l.useState)({selectedTenantId:r,currentPosition:ts.HIDDEN}),{user:s,authService:u,canSignOut:d}=(0,l.useContext)(Qa.AuthContext);(0,l.useEffect)((()=>{i(e?t=>Object.assign(Object.assign({},t),{selectedTenantId:r,currentPosition:ts.OPEN}):t=>Object.assign(Object.assign({},t),{currentPosition:ts.HIDDEN}))}),[r,e,i]),(0,l.useEffect)((()=>{e&&u.refreshUser(300)}),[u,e]);const f=(0,l.useMemo)((()=>!!s&&(0,Qa.userHasTenantAccess)(s,o.selectedTenantId,Qa.Privileges.MARKETING_ENGINE_APP)),[o.selectedTenantId,s]),p=(0,l.useMemo)((()=>!!s&&(0,Qa.userHasTenantAccess)(s,o.selectedTenantId,Qa.Privileges.SHOWROOM_APP)),[o.selectedTenantId,s]),v=(0,l.useMemo)((()=>!!s&&(0,Qa.userHasTenantAccess)(s,o.selectedTenantId,Qa.Privileges.SENDOUTS_APP)),[o.selectedTenantId,s]),h=(0,l.useMemo)((()=>!!s&&(0,Qa.userHasTenantAccess)(s,o.selectedTenantId,Qa.Privileges.SENDOUTS_CMS_APP)),[o.selectedTenantId,s]),m=(0,l.useMemo)((()=>!!s&&(0,Qa.userHasTenantAccess)(s,o.selectedTenantId,Qa.Privileges.USER_MANAGEMENT_APP)),[o.selectedTenantId,s]),g=(0,l.useMemo)((()=>!!s&&(0,Qa.userHasTenantAccess)(s,o.selectedTenantId,Qa.Privileges.UNIVERSAL)),[o.selectedTenantId,s]),y=(0,l.useMemo)((()=>!!s&&(0,Qa.userHasTenantAccess)(s,o.selectedTenantId,"settings-app")),[o.selectedTenantId,s]),E=(0,l.useMemo)((()=>!!s&&(0,Qa.userHasTenantAccess)(s,o.selectedTenantId,Qa.Privileges.INSTORE_ADMIN_APP)),[o.selectedTenantId,s]),x=(0,l.useCallback)((t=>i((e=>Object.assign(Object.assign({},e),t)))),[]),b=(0,l.useCallback)((()=>a(this,void 0,void 0,(function*(){d&&(yield u.signOut())}))),[u,d]),w=(0,l.useCallback)((()=>{o.currentPosition!==ts.OPEN?o.currentPosition!==ts.EXPANDED||x({currentPosition:ts.OPEN}):x({currentPosition:ts.EXPANDED,selectedTenantId:r})}),[r,x,o.currentPosition]),T=(0,l.useMemo)((()=>({hasMarketingEngineAccess:f,hasShowroomAccess:p,hasSendoutsAccess:v,hasCmsAccess:h,hasUserManagementAccess:m,hasUniversalAccess:g,hasSettingsAccess:y,hasInstoreAccess:E,viewState:o,updateViewState:x,signOut:b,toggleTenants:w,onNavigationClose:n})),[f,v,h,p,m,g,y,E,o,x,b,w,n]);return c().createElement(es.Provider,{value:T},t)}const os="tKygQ4LMDikHs5Hsh0Qk";function is(t){if("string"==typeof t||"number"==typeof t)return""+t;let e="";if(Array.isArray(t))for(let n,r=0;r<t.length;r++)""!==(n=is(t[r]))&&(e+=(e&&" ")+n);else for(let n in t)t[n]&&(e+=(e&&" ")+n);return e}const as=require("@touchtech/baselayer-ui"),ss=require("@touchtech/web-api-client"),us=require("swr");var ls=t.n(us);function cs(){const t=(0,ss.useApi)(),e=function(){var t;const e=null!==(t=process.env.TENANTS_SERVICE_URL)&&void 0!==t?t:process.env.REACT_APP_TENANTS_SERVICE_URL;if(!e)throw new Error("TENANTS_SERVICE_URL or REACT_APP_TENANTS_SERVICE_URL must be set");return(0,ss.createUrl)(e,"/api/Tenants/view")}(),{data:n,error:r}=ls()(e,t.get);return{tenants:null!=n?n:[],isLoading:!n&&!r,error:r}}const ds=function({layout:t}){const{viewState:{selectedTenantId:e}}=ns(),{tenants:n}=cs(),r=(0,l.useMemo)((()=>n.find((t=>t.id===e))),[e,n]);return r?c().createElement(as.Image,{src:r.logoUrl,layout:t}):null},fs="alkxjZvTgAcsz0JRkm6c",ps="p4JPb4DzmGoZOIhO09ws",vs="x0_VF3BXbWUtlCCgOtQZ",hs="jWPBZu8iLDyyTn6eW6kw",ms="gb6t82xpZU7ymkUdSux_",gs=function({children:t,header:e,footer:n,className:r,width:o,showHeaderBorder:i}){return c().createElement("div",{className:is([fs,r]),style:{width:o}},!!e&&c().createElement("div",{className:is([ps,{[vs]:i}])},e),c().createElement("div",{className:hs},t),!!n&&c().createElement("div",{className:ms},n))},ys=require("react-router-dom"),Es="RuYyU4ZU982IBgdb1Nr2",xs="mDVPC452sIZ1AZ12Hupu",bs=function({children:t,to:e,hidden:n,disabled:r,onClick:o}){const[i,a]=(0,l.useContext)(Ja.TenantIdContext),[s,u]=(0,l.useState)(!1),{viewState:{selectedTenantId:d}}=ns();(0,l.useEffect)((()=>{const t=()=>{i!==d&&s&&a(d)};return window.addEventListener("unload",t),()=>{window.removeEventListener("unload",t)}}),[a,i,d,s]);const f=(0,l.useCallback)((()=>{o?o(u):e&&(u(!0),window.location.assign(e))}),[e,o]),p=!!e&&!!(0,ys.matchPath)(`${e}/*`,window.location.pathname)&&i===d;return n?null:c().createElement(as.Button,{align:"left",noBorder:!0,className:is([Es,{[xs]:p}]),noShadow:!0,disabled:p||r,onClick:f},t)},ws="xq2NhM9BEi_W4nwT3yh2",Ts="BGjEtVj4r_GL1XRPggdK",Ss="VaoS9sXTECATv5AlheWA",As="WuTrGz3UU3pH1fVTiCTZ",Ps="Coh2DFrCNYqjuH_r7MvG",Cs="MOX9IB0nSx5cfLHrcoOZ",Ms="mwOFiCMJUcwQgN71e7sC",Vs="AVG7kB9Fyvbb6jW3FA0B",Rs="VKsHJOXcQi174s94qmOo",Os="SWnA20nAEkR6goWGlFre",Ds="HeDayZpMaiaMwoXvRFoD",Ls="XF2F_YGE6PmxS0tEVvP2",ks="V3IZL1yVbMWIposjQAL8",Ns="Zgx8Dpy2pAdOoqTtMMQi",Is="AZnlFbzTGExGtpYh4_LY",js="q8vjvRoPyWxP_4biO7ye",Us="K7BSR_sOQntynVNNrX45",Bs="ju83eDu5c266Yv8fgYiX",Fs=function(){const{user:t}=(0,l.useContext)(Qa.AuthContext),{signOut:e,onNavigationClose:n,toggleTenants:r,hasShowroomAccess:o,hasMarketingEngineAccess:i,hasSendoutsAccess:s,hasCmsAccess:u,hasUserManagementAccess:d,hasSettingsAccess:f,hasUniversalAccess:p,hasInstoreAccess:v,viewState:h}=ns(),m=function(){const{viewState:{selectedTenantId:t}}=ns(),{tenants:e}=cs();return(0,l.useMemo)((()=>e.find((e=>e.id===t))),[e,t])}(),g=m&&Boolean(m.planName),[y,E]=(0,l.useState)(!1),[x,b]=(0,l.useState)(!1),w=function(){const t=(0,ss.useApi)(),e=(()=>{var t;const e=null!==(t=process.env.TENANTS_SERVICE_URL)&&void 0!==t?t:process.env.REACT_APP_TENANTS_SERVICE_URL;if(!e)throw new Error("TENANTS_SERVICE_URL or REACT_APP_TENANTS_SERVICE_URL must be set");return(0,ss.createUrl)(e,"/api/Subscriptions/create-customer-portal-session")})(),{viewState:n}=ns(),[r]=(0,l.useContext)(Ja.TenantIdContext);return(0,l.useCallback)((o=>a(this,void 0,void 0,(function*(){const i=o.replace(/^\//,"");t.setHeader("tenant-id",n.selectedTenantId);try{return yield t.post(e,i)}finally{r&&t.setHeader("tenant-id",r)}}))),[t,e,n])}(),T=(0,l.useCallback)((t=>a(this,void 0,void 0,(function*(){try{b(!0);const e=yield w(window.location.pathname);t(!0),window.location.assign(e.text)}catch(t){b(!1),E(!0),yield(e=2500,new Promise((t=>setTimeout(t,e)))),E(!1)}var e}))),[h.selectedTenantId,b,w]);return c().createElement(gs,{className:ws,width:$a,showHeaderBorder:!0,header:c().createElement("div",{className:Ts},c().createElement("div",{className:Ss},c().createElement("div",{className:As},c().createElement(ds,null)),c().createElement("div",{className:Ps,onClick:n},c().createElement(as.Icon,{src:"data:image/svg+xml,%3csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M0.398438 0.399902L19.5984 19.5999M0.398438 19.5999L19.5984 0.399902' stroke='black'/%3e %3c/svg%3e",size:"large"}))),c().createElement(as.Button,{align:"left",noBorder:!0,transparent:!0,className:Cs,onClick:r},"Change brand")),footer:c().createElement("div",{className:ks,onClick:e},c().createElement("div",{className:Ns},c().createElement("div",{className:Is},c().createElement(as.Icon,{src:"data:image/svg+xml,%3csvg width='14' height='15' viewBox='0 0 14 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M7 1.5999L10.4667 4.7999M7 1.5999L3.8 4.7999M7 1.5999L7 11.7332M13.4 7.46657L13.4 14.3999L0.600002 14.3999L0.600002 7.46657' stroke='%232D2D33'/%3e %3c/svg%3e",size:"medium"})),c().createElement("div",{className:js},"Sign out")))},c().createElement("div",{className:Ms},c().createElement("div",{className:Vs},c().createElement("div",{className:Rs},c().createElement(bs,{to:qa.DASHBOARD},"Dashboard"),c().createElement(bs,{hidden:!o,to:qa.SHOWROOM},"Presentations (Showroom)"),c().createElement(bs,{hidden:!s,to:qa.SENDOUTS},"Sendouts"),c().createElement(bs,{hidden:!i,to:qa.MARKETING_ENGINE},"Media Library"),c().createElement(bs,{hidden:!v&&!p,to:qa.INSTORE_ADMIN},"Stores"),c().createElement(bs,{hidden:!u,to:qa.CMS},"Content Manager"),c().createElement(bs,{hidden:!d,to:qa.USER_MANAGEMENT},"Users"),c().createElement(bs,{hidden:!p&&!f,to:qa.SETTINGS},"Settings"),c().createElement(bs,{disabled:x,onClick:T,hidden:!p||!g,to:"#"},c().createElement("span",{className:is({[Us]:y})},"Subscription"),x?c().createElement(as.Icon,{size:"xlarge",src:"data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8' standalone='no'%3f%3e %3c!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e %3csvg width='100%25' height='100%25' viewBox='0 0 46 46' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' xml:space='preserve' xmlns:serif='http://www.serif.com/' style='fill-rule:evenodd%3bclip-rule:evenodd%3bstroke-linejoin:round%3bstroke-miterlimit:2%3b'%3e %3cg transform='matrix(1%2c0%2c0%2c1%2c-27%2c-27)'%3e %3cpath d='M73%2c50C73%2c37.3 62.7%2c27 50%2c27C37.3%2c27 27%2c37.3 27%2c50M30.9%2c50C30.9%2c39.5 39.4%2c30.9 50%2c30.9C60.6%2c30.9 69.1%2c39.5 69.1%2c50' style='fill-rule:nonzero%3b'%3e %3canimateTransform attributeName='transform' attributeType='XML' type='rotate' dur='1s' from='0 50 50' to='360 50 50' repeatCount='indefinite' /%3e %3c/path%3e %3c/g%3e %3c/svg%3e",alt:"Loading"}):""),y?c().createElement("p",{className:Bs},"Unable to access subscription page"):null),t&&c().createElement("div",{className:Os},c().createElement("div",{className:Ds},t.firstName," ",t.lastName),c().createElement("div",{className:Ls},t.email)))))},_s="oeuWMMcJvLzGVyzlkzri",Hs="bbUHwXdmTmLx1Bm14Atn",zs=function({tenant:t}){const{viewState:{selectedTenantId:e},updateViewState:n}=ns(),r=e===t.id;return c().createElement(as.Button,{key:t.id,align:"left",noBorder:!0,className:is([_s,{[Hs]:r}]),noShadow:!0,disabled:r,onClick:()=>{n({selectedTenantId:t.id,currentPosition:ts.OPEN})}},t.label)},Ws="TImCshnjb7UPVk2R4lZP",Gs="PLOWzDGNGXzLAJrH0RK3",Xs="xdEO_zIZZ4tFrfapkFFT",Ys="As12vynTQk_jknQIlJ8A",Zs="q2ws7axL5Ap1hQW3m16N",qs="zYkzNuNQhvIdWKZhoQGr",Ks="xxcu6ytXRcPl1GZJ2vd9",$s="QYhcvZqbZxgenG41kwNq",Qs=function(){const{toggleTenants:t}=ns(),{tenants:e}=cs();return c().createElement("div",{className:Ws},c().createElement(gs,{width:Ka,header:c().createElement("div",{className:Gs},c().createElement("div",{className:Xs,onClick:t},c().createElement(as.Icon,{src:"data:image/svg+xml,%3csvg width='22' height='14' viewBox='0 0 22 14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M1.6001 7.00039L8.0001 13.4004M1.6001 7.00039L8.0001 0.600391M1.6001 7.00039L21.6001 7.00039' stroke='%23262626'/%3e %3c/svg%3e",size:"large"}))),footer:c().createElement("div",{className:Zs,onClick:()=>window.location.assign(qa.CREATE_WORKSPACE)},c().createElement("div",{className:qs},c().createElement("div",{className:Ks},c().createElement(as.Icon,{src:"data:image/svg+xml,%3csvg width='14' height='14' viewBox='0 0 14 14' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M0.00170906 7L13.0017 7M6.50171 13.5L6.50171 0.5' stroke='%232D2D33'/%3e %3c/svg%3e",size:"medium"})),c().createElement("div",{className:$s},"Create a brand workspace")))},c().createElement("div",{className:Ys},e.map((t=>c().createElement(zs,{tenant:t,key:t.id}))))))},Js="x4CcnKP0hsMpf8aTV1vc",tu=function(){return c().createElement("div",{className:Js},c().createElement(Fs,null),c().createElement(Qs,null))},eu=$a+Ka,nu={ease:"easeOut",duration:.3},ru={[ts.HIDDEN]:{left:-eu,transition:nu},[ts.OPEN]:{left:-$a,transition:nu},[ts.EXPANDED]:{left:0,transition:nu}},ou=function({isOpen:t,portalContainer:e=document.body,onClose:n}){return c().createElement(rs,{onNavigationClose:n,isOpen:t},c().createElement(es.Consumer,null,(({viewState:{currentPosition:t}})=>(0,Za.createPortal)(c().createElement(H,null,t!==ts.HIDDEN&&c().createElement(Ya.div,{className:os,initial:ts.HIDDEN,variants:ru,animate:t,exit:ts.HIDDEN},c().createElement(tu,null))),e))))},iu="data:image/svg+xml,%3csvg width='14' height='15' viewBox='0 0 14 11' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M0 1.5H14M0 5.5H14M0 9.5H14M0' stroke='black'/%3e %3c/svg%3e",au=function(t){var{size:e="medium",alt:n="Toggle navigation menu",src:r=iu,portalContainer:o=document.body}=t,a=i(t,["size","alt","src","portalContainer"]);const[u,d]=function(t){void 0===t&&(t=!1);var e=s((0,l.useState)(t),2),n=e[0],r=e[1];return[n,(0,l.useCallback)((function(t){r("boolean"==typeof t?t:function(t){return!t})}),[])]}(!1);return c().createElement(l.Fragment,null,c().createElement(as.IconButton,Object.assign({size:e,alt:n,src:r,onClick:()=>d()},a)),c().createElement(ou,{isOpen:u,portalContainer:o,onClose:()=>d()}))};var su=exports;for(var uu in e)su[uu]=e[uu];e.__esModule&&Object.defineProperty(su,"__esModule",{value:!0})})();
|
|
2
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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R0EzQkEsU0FBMEIsRyxJQUFBLEtBQ3hCcGtELEVBQU8sU0FBUSxJQUNmNmpELEVBQU0seUJBQXdCLElBQzlCM0MsRUFBTXVELEdBQVEsZ0JBQ2RMLEVBQWtCNW1ELFNBQVM2K0MsTUFBSSxFQUM1Qno1QyxFQUFLLElBTGdCLHdDQU94QixNQUFPOGhELEVBQWtCQyxHQ25CWixTQUFtQkMsUUFDVCxJQUFqQkEsSUFBMkJBLEdBQWUsR0FDOUMsSUFBSXBtRCxFQUFLLEdBQU8sSUFBQWlDLFVBQVNta0QsR0FBZSxHQUFJaHVELEVBQVE0SCxFQUFHLEdBQUlxbUQsRUFBV3JtRCxFQUFHLEdBV3pFLE1BQU8sQ0FBQzVILEdBVkssSUFBQWlLLGNBQVksU0FBVWlrRCxHQUUzQkQsRUFEb0Isa0JBQWJDLEVBQ0VBLEVBR0EsU0FBVXRjLEdBQ2YsT0FBUUEsQ0FDWixFQUVSLEdBQUcsSUFFUCxDREtxRHVjLEVBQVUsR0FFN0QsT0FDRSxrQkFBQyxFQUFBQyxTQUFRLEtBQ1Asa0JBQUMsR0FBQUMsV0FBVSxlQUNUamxELEtBQU1BLEVBQ042akQsSUFBS0EsRUFDTDNDLElBQUtBLEVBQ0xRLFFBQVMsSUFBTWlELEtBQ1gvaEQsSUFFTixrQkFBQyxHQUFVLENBQ1RvN0MsT0FBUTBHLEVBQ1JOLGdCQUFpQkEsRUFDakJDLFFBQVMsSUFBTU0sTUFJdkIsRSIsInNvdXJjZXMiOlsid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS9leHRlcm5hbCBjb21tb25qcyB7XCJyb290XCI6XCJSZWFjdFwiLFwiY29tbW9uanNcIjpcInJlYWN0XCIsXCJjb21tb25qczJcIjpcInJlYWN0XCIsXCJhbWRcIjpcInJlYWN0XCJ9Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdXRpbHMvcHJvY2Vzcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lc3luYy9kaXN0L2VzL29uLW5leHQtZnJhbWUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXN5bmMvZGlzdC9lcy9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lc3luYy9kaXN0L2VzL2NyZWF0ZS1yZW5kZXItc3RlcC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy9pcy1icm93c2VyLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3V0aWxzL3VzZS1pc29tb3JwaGljLWVmZmVjdC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy91c2UtaXMtbW91bnRlZC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9jb250ZXh0L1ByZXNlbmNlQ29udGV4dC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy91c2UtY29uc3RhbnQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdXRpbHMvdXNlLWlkLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2NvbXBvbmVudHMvQW5pbWF0ZVByZXNlbmNlL1ByZXNlbmNlQ2hpbGQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvY29udGV4dC9MYXlvdXRHcm91cENvbnRleHQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdXRpbHMvdXNlLXVubW91bnQtZWZmZWN0Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2NvbXBvbmVudHMvQW5pbWF0ZVByZXNlbmNlL2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3V0aWxzL3VzZS1mb3JjZS11cGRhdGUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL2ZlYXR1cmVzL2RlZmluaXRpb25zLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvaGV5LWxpc3Rlbi9kaXN0L2hleS1saXN0ZW4uZXMuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9jb250ZXh0L0xhenlDb250ZXh0Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL21vdGlvbi9mZWF0dXJlcy91c2UtZmVhdHVyZXMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvY29udGV4dC9Nb3Rpb25Db25maWdDb250ZXh0Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2NvbnRleHQvTW90aW9uQ29udGV4dC9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy91c2UtcmVkdWNlZC1tb3Rpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL3V0aWxzL3VzZS12aXN1YWwtZWxlbWVudC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy9pcy1yZWYtb2JqZWN0Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci91dGlscy92YXJpYW50cy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9jb250ZXh0L01vdGlvbkNvbnRleHQvY3JlYXRlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vbm9kZS9zdGF0ZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL25vZGUvaWQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvY29udGV4dC9Td2l0Y2hMYXlvdXRHcm91cENvbnRleHQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL3V0aWxzL1Zpc3VhbEVsZW1lbnRIYW5kbGVyLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL21vdGlvbi9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9jb250ZXh0L01vdGlvbkNvbnRleHQvdXRpbHMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL2ZlYXR1cmVzL3VzZS1wcm9qZWN0aW9uLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL21vdGlvbi91dGlscy91c2UtbW90aW9uLXJlZi5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL21vdGlvbi1wcm94eS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvc3ZnL2xvd2VyY2FzZS1lbGVtZW50cy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3V0aWxzL2lzLXN2Zy1jb21wb25lbnQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcHJvamVjdGlvbi9zdHlsZXMvc2NhbGUtY29ycmVjdGlvbi5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvaHRtbC91dGlscy90cmFuc2Zvcm0ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL3V0aWxzL2lzLWZvcmNlZC1tb3Rpb24tdmFsdWUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdmFsdWUvdXRpbHMvaXMtbW90aW9uLXZhbHVlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9odG1sL3V0aWxzL2J1aWxkLXRyYW5zZm9ybS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3V0aWxzL2lzLWNzcy12YXJpYWJsZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3ZhbHVlLXR5cGVzL2dldC1hcy10eXBlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvc3R5bGUtdmFsdWUtdHlwZXMvZGlzdC9lcy91dGlscy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLXZhbHVlLXR5cGVzL2Rpc3QvZXMvbnVtYmVycy91bml0cy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLXZhbHVlLXR5cGVzL2Rpc3QvZXMvbnVtYmVycy9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3ZhbHVlLXR5cGVzL3R5cGUtaW50Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdmFsdWUtdHlwZXMvbnVtYmVyLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9odG1sL3V0aWxzL2J1aWxkLXN0eWxlcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvaHRtbC91dGlscy9jcmVhdGUtcmVuZGVyLXN0YXRlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9odG1sL3VzZS1wcm9wcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vdXRpbHMvdmFsaWQtcHJvcC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3V0aWxzL2ZpbHRlci1wcm9wcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvc3ZnL3V0aWxzL3RyYW5zZm9ybS1vcmlnaW4ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL3N2Zy91dGlscy9wYXRoLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9zdmcvdXRpbHMvYnVpbGQtYXR0cnMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL3N2Zy91dGlscy9jcmVhdGUtcmVuZGVyLXN0YXRlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9zdmcvdXNlLXByb3BzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdXNlLXJlbmRlci5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3V0aWxzL2NhbWVsLXRvLWRhc2gubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2h0bWwvdXRpbHMvcmVuZGVyLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9zdmcvdXRpbHMvY2FtZWwtY2FzZS1hdHRycy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvc3ZnL3V0aWxzL3JlbmRlci5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvaHRtbC91dGlscy9zY3JhcGUtbW90aW9uLXZhbHVlcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvc3ZnL3V0aWxzL3NjcmFwZS1tb3Rpb24tdmFsdWVzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2FuaW1hdGlvbi91dGlscy9pcy1hbmltYXRpb24tY29udHJvbHMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvYW5pbWF0aW9uL3V0aWxzL2lzLWtleWZyYW1lcy10YXJnZXQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdXRpbHMvcmVzb2x2ZS12YWx1ZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy92YWx1ZS91dGlscy9yZXNvbHZlLW1vdGlvbi12YWx1ZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vdXRpbHMvdXNlLXZpc3VhbC1zdGF0ZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvc3ZnL2NvbmZpZy1tb3Rpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL3V0aWxzL3R5cGVzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9odG1sL2NvbmZpZy1tb3Rpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZXZlbnRzL3VzZS1kb20tZXZlbnQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZ2VzdHVyZXMvdXRpbHMvZXZlbnQtdHlwZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9ldmVudHMvZXZlbnQtaW5mby5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9ldmVudHMvdXRpbHMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZXZlbnRzL3VzZS1wb2ludGVyLWV2ZW50Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2dlc3R1cmVzL2RyYWcvdXRpbHMvbG9jay5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9nZXN0dXJlcy91c2UtaG92ZXItZ2VzdHVyZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9nZXN0dXJlcy91dGlscy9pcy1ub2RlLW9yLWNoaWxkLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvdXRpbHMvcGlwZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy93YXJuLW9uY2UubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL2ZlYXR1cmVzL3ZpZXdwb3J0L29ic2VydmVycy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vZmVhdHVyZXMvdmlld3BvcnQvdXNlLXZpZXdwb3J0Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL21vdGlvbi91dGlscy9tYWtlLXJlbmRlcmxlc3MtY29tcG9uZW50Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL21vdGlvbi9mZWF0dXJlcy9nZXN0dXJlcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9nZXN0dXJlcy91c2UtdGFwLWdlc3R1cmUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZ2VzdHVyZXMvdXNlLWZvY3VzLWdlc3R1cmUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvY29tcG9uZW50cy9BbmltYXRlUHJlc2VuY2UvdXNlLXByZXNlbmNlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3V0aWxzL3NoYWxsb3ctY29tcGFyZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL2NsYW1wLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvYW5pbWF0aW9ucy91dGlscy9maW5kLXNwcmluZy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL2FuaW1hdGlvbnMvZ2VuZXJhdG9ycy9zcHJpbmcubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy91dGlscy9wcm9ncmVzcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL21peC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLXZhbHVlLXR5cGVzL2Rpc3QvZXMvY29sb3IvdXRpbHMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9zdHlsZS12YWx1ZS10eXBlcy9kaXN0L2VzL2NvbG9yL3JnYmEubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9zdHlsZS12YWx1ZS10eXBlcy9kaXN0L2VzL2NvbG9yL2hleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLXZhbHVlLXR5cGVzL2Rpc3QvZXMvY29sb3IvaHNsYS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL2hzbGEtdG8tcmdiYS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL21peC1jb2xvci5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLXZhbHVlLXR5cGVzL2Rpc3QvZXMvY29sb3IvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9zdHlsZS12YWx1ZS10eXBlcy9kaXN0L2VzL2NvbXBsZXgvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy91dGlscy9pbmMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy91dGlscy9taXgtY29tcGxleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL2ludGVycG9sYXRlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvZWFzaW5nL3V0aWxzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvZWFzaW5nL2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvYW5pbWF0aW9ucy9nZW5lcmF0b3JzL2tleWZyYW1lcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL2FuaW1hdGlvbnMvdXRpbHMvZGV0ZWN0LWFuaW1hdGlvbi1mcm9tLW9wdGlvbnMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy9hbmltYXRpb25zL2dlbmVyYXRvcnMvZGVjYXkubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy9hbmltYXRpb25zL3V0aWxzL2VsYXBzZWQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy9hbmltYXRpb25zL2luZGV4Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvdXRpbHMvdmVsb2NpdHktcGVyLXNlY29uZC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy90aW1lLWNvbnZlcnNpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy9lYXNpbmcvY3ViaWMtYmV6aWVyLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2FuaW1hdGlvbi91dGlscy9lYXNpbmcubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvYW5pbWF0aW9uL3V0aWxzL2lzLWFuaW1hdGFibGUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvYW5pbWF0aW9uL3V0aWxzL2RlZmF1bHQtdHJhbnNpdGlvbnMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9zdHlsZS12YWx1ZS10eXBlcy9kaXN0L2VzL2NvbXBsZXgvZmlsdGVyLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdmFsdWUtdHlwZXMvZGVmYXVsdHMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS92YWx1ZS10eXBlcy9hbmltYXRhYmxlLW5vbmUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdXRpbHMvdXNlLWluc3RhbnQtdHJhbnNpdGlvbi1zdGF0ZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9hbmltYXRpb24vdXRpbHMvdHJhbnNpdGlvbnMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy9hbmltYXRpb25zL2luZXJ0aWEubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvdXRpbHMvaXMtbnVtZXJpY2FsLXN0cmluZy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy9pcy16ZXJvLXZhbHVlLXN0cmluZy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy9hcnJheS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy91dGlscy9zdWJzY3JpcHRpb24tbWFuYWdlci5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy92YWx1ZS9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvZG9tL3ZhbHVlLXR5cGVzL3Rlc3QubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS92YWx1ZS10eXBlcy9kaW1lbnNpb25zLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdmFsdWUtdHlwZXMvdHlwZS1hdXRvLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vdmFsdWUtdHlwZXMvZmluZC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvdXRpbHMvc2V0dGVycy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvdXRpbHMvYW5pbWF0aW9uLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci91dGlscy9hbmltYXRpb24tc3RhdGUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL2ZlYXR1cmVzL2FuaW1hdGlvbnMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9wb3Btb3Rpb24vZGlzdC9lcy91dGlscy9pcy1wb2ludC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL3BvcG1vdGlvbi9kaXN0L2VzL3V0aWxzL2lzLXBvaW50LTNkLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvcG9wbW90aW9uL2Rpc3QvZXMvdXRpbHMvZGlzdGFuY2UubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZ2VzdHVyZXMvUGFuU2Vzc2lvbi5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL2dlb21ldHJ5L2RlbHRhLWNhbGMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZ2VzdHVyZXMvZHJhZy91dGlscy9jb25zdHJhaW50cy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL2dlb21ldHJ5L21vZGVscy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL3V0aWxzL2VhY2gtYXhpcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL2dlb21ldHJ5L2NvbnZlcnNpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcHJvamVjdGlvbi91dGlscy9oYXMtdHJhbnNmb3JtLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vZ2VvbWV0cnkvZGVsdGEtYXBwbHkubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcHJvamVjdGlvbi91dGlscy9tZWFzdXJlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2dlc3R1cmVzL2RyYWcvVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vZmVhdHVyZXMvZHJhZy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9nZXN0dXJlcy91c2UtcGFuLWdlc3R1cmUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvZ2VzdHVyZXMvZHJhZy91c2UtZHJhZy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvdXRpbHMvbGlmZWN5Y2xlcy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL3V0aWxzL21vdGlvbi12YWx1ZXMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS91dGlscy9jc3MtdmFyaWFibGVzLWNvbnZlcnNpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS91dGlscy91bml0LWNvbnZlcnNpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS91dGlscy9wYXJzZS1kb20tdmFyaWFudC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvaHRtbC92aXN1YWwtZWxlbWVudC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvc3ZnL3Zpc3VhbC1lbGVtZW50Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3JlbmRlci9kb20vY3JlYXRlLXZpc3VhbC1lbGVtZW50Lm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vc3R5bGVzL3NjYWxlLWJvcmRlci1yYWRpdXMubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcHJvamVjdGlvbi9zdHlsZXMvc2NhbGUtYm94LXNoYWRvdy5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9tb3Rpb24vZmVhdHVyZXMvbGF5b3V0L01lYXN1cmVMYXlvdXQubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvbW90aW9uL2ZlYXR1cmVzL2xheW91dC9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL2FuaW1hdGlvbi9taXgtdmFsdWVzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vZ2VvbWV0cnkvY29weS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL2dlb21ldHJ5L2RlbHRhLXJlbW92ZS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9wcm9qZWN0aW9uL2dlb21ldHJ5L3V0aWxzLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vc2hhcmVkL3N0YWNrLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vc3R5bGVzL3RyYW5zZm9ybS5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvdXRpbHMvY29tcGFyZS1ieS1kZXB0aC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2ZyYW1lci1tb3Rpb24vZGlzdC9lcy9yZW5kZXIvdXRpbHMvZmxhdC10cmVlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vbm9kZS9jcmVhdGUtcHJvamVjdGlvbi1ub2RlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL2FuaW1hdGlvbi9hbmltYXRlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vbm9kZS9Eb2N1bWVudFByb2plY3Rpb25Ob2RlLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9ub2RlX21vZHVsZXMvZnJhbWVyLW1vdGlvbi9kaXN0L2VzL3Byb2plY3Rpb24vbm9kZS9IVE1MUHJvamVjdGlvbk5vZGUubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS9tb3Rpb24ubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL25vZGVfbW9kdWxlcy9mcmFtZXItbW90aW9uL2Rpc3QvZXMvcmVuZGVyL2RvbS91dGlscy9jcmVhdGUtY29uZmlnLm1qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvZXh0ZXJuYWwgY29tbW9uanMge1wicm9vdFwiOlwiUmVhY3REb21cIixcImNvbW1vbmpzXCI6XCJyZWFjdC1kb21cIixcImNvbW1vbmpzMlwiOlwicmVhY3QtZG9tXCIsXCJhbWRcIjpcInJlYWN0LWRvbVwifSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29uc3RhbnRzL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS9leHRlcm5hbCBjb21tb25qcyB7XCJyb290XCI6XCJUb3VjaHRlY2hXZWJBdXRoXCIsXCJjb21tb25qczJcIjpcIkB0b3VjaHRlY2gvd2ViLWF1dGhcIixcImNvbW1vbmpzXCI6XCJAdG91Y2h0ZWNoL3dlYi1hdXRoXCIsXCJhbWRcIjpcIkB0b3VjaHRlY2gvd2ViLWF1dGhcIn0iLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51L2V4dGVybmFsIGNvbW1vbmpzIHtcInJvb3RcIjpcIlRvdWNodGVjaFdlYlRlbmFudElkUHJvdmlkZXJcIixcImNvbW1vbmpzMlwiOlwiQHRvdWNodGVjaC93ZWItdGVuYW50LWlkLXByb3ZpZGVyXCIsXCJjb21tb25qc1wiOlwiQHRvdWNodGVjaC93ZWItdGVuYW50LWlkLXByb3ZpZGVyXCIsXCJhbWRcIjpcIkB0b3VjaHRlY2gvd2ViLXRlbmFudC1pZC1wcm92aWRlclwifSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL0NvbnRleHQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vTmF2aWdhdGlvbi5tb2R1bGUuY3NzP2EwMjQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL2NsYXNzY2F0L2luZGV4LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS9leHRlcm5hbCBjb21tb25qcyB7XCJyb290XCI6XCJUb3VjaHRlY2hCYXNlbGF5ZXJVaVwiLFwiY29tbW9uanMyXCI6XCJAdG91Y2h0ZWNoL2Jhc2VsYXllci11aVwiLFwiY29tbW9uanNcIjpcIkB0b3VjaHRlY2gvYmFzZWxheWVyLXVpXCIsXCJhbWRcIjpcIkB0b3VjaHRlY2gvYmFzZWxheWVyLXVpXCJ9Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS9leHRlcm5hbCBjb21tb25qcyB7XCJyb290XCI6XCJUb3VjaHRlY2hXZWJBcGlDbGllbnRcIixcImNvbW1vbmpzMlwiOlwiQHRvdWNodGVjaC93ZWItYXBpLWNsaWVudFwiLFwiY29tbW9uanNcIjpcIkB0b3VjaHRlY2gvd2ViLWFwaS1jbGllbnRcIixcImFtZFwiOlwiQHRvdWNodGVjaC93ZWItYXBpLWNsaWVudFwifSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvZXh0ZXJuYWwgY29tbW9uanMge1wicm9vdFwiOlwiU3dyXCIsXCJjb21tb25qczJcIjpcInN3clwiLFwiY29tbW9uanNcIjpcInN3clwiLFwiYW1kXCI6XCJzd3JcIn0iLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2hvb2tzL3VzZVRlbmFudHMudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9Mb2dvL0xvZ28udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vVGllcnMvVGllci9UaWVyLm1vZHVsZS5jc3M/Zjg3OSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL1RpZXJzL1RpZXIvVGllci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51L2V4dGVybmFsIGNvbW1vbmpzIHtcInJvb3RcIjpcIlJlYWN0Um91dGVyRG9tXCIsXCJjb21tb25qczJcIjpcInJlYWN0LXJvdXRlci1kb21cIixcImNvbW1vbmpzXCI6XCJyZWFjdC1yb3V0ZXItZG9tXCIsXCJhbWRcIjpcInJlYWN0LXJvdXRlci1kb21cIn0iLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9UaWVycy9BcHBsaWNhdGlvbnMvQXBwbGljYXRpb25MaW5rL0FwcGxpY2F0aW9uTGluay5tb2R1bGUuY3NzPzNmZjYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9UaWVycy9BcHBsaWNhdGlvbnMvQXBwbGljYXRpb25MaW5rL0FwcGxpY2F0aW9uTGluay50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9UaWVycy9BcHBsaWNhdGlvbnMvQXBwbGljYXRpb25zLm1vZHVsZS5jc3M/Y2U3OCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL1RpZXJzL0FwcGxpY2F0aW9ucy9BcHBsaWNhdGlvbnMudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9ob29rcy91c2VTZWxlY3RlZFRlbmFudC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvaG9va3MvdXNlTWFuYWdlU3Vic2NyaXB0aW9uLnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL2Fzc2V0cy9pY29ucy9jbG9zZS5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vYXNzZXRzL2ljb25zL2xvZ291dC5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vYXNzZXRzL2ljb25zL3NwaW5uZXItY2lyY2xlLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL1RpZXJzL1RlbmFudHMvVGVuYW50QnV0dG9uL1RlbmFudEJ1dHRvbi5tb2R1bGUuY3NzPzY5N2QiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vc3JjL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9UaWVycy9UZW5hbnRzL1RlbmFudEJ1dHRvbi9UZW5hbnRCdXR0b24udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vVGllcnMvVGVuYW50cy9UZW5hbnRzLm1vZHVsZS5jc3M/NjQzMCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL3dlYi1uYXZpZ2F0aW9uLW1lbnUvLi9zcmMvY29tcG9uZW50cy9OYXZpZ2F0aW9uL1RpZXJzL1RlbmFudHMvVGVuYW50cy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vYXNzZXRzL2ljb25zL2Fycm93LWxlZnQuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL2Fzc2V0cy9pY29ucy9hZGQuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vVGllcnMvVGllcnMubW9kdWxlLmNzcz9mNWEzIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vVGllcnMvVGllcnMudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vTmF2aWdhdGlvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vYXNzZXRzL2ljb25zL21lbnUuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvd2ViLW5hdmlnYXRpb24tbWVudS8uL3NyYy9jb21wb25lbnRzL05hdmlnYXRpb24vTmF2aWdhdGlvbkJ1dHRvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC93ZWItbmF2aWdhdGlvbi1tZW51Ly4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlVG9nZ2xlL3VzZVRvZ2dsZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGUgcmVxdWlyZSBzY29wZVxudmFyIF9fd2VicGFja19yZXF1aXJlX18gPSB7fTtcblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcclxuICAgIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxyXG4gICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcclxuICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xyXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XHJcbiAgICB2YXIgXywgZG9uZSA9IGZhbHNlO1xyXG4gICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgY29udGV4dCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xyXG4gICAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnB1c2goXyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xyXG4gICAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcclxuICAgIGRvbmUgPSB0cnVlO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcclxuICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xyXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xyXG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcclxuICAgIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xyXG4gICAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcclxufVxyXG4iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcInJlYWN0XCIpOyIsIi8qKlxuICogQnJvd3Nlci1zYWZlIHVzYWdlIG9mIHByb2Nlc3NcbiAqL1xudmFyIGRlZmF1bHRFbnZpcm9ubWVudCA9IFwicHJvZHVjdGlvblwiO1xudmFyIGVudiA9IHR5cGVvZiBwcm9jZXNzID09PSBcInVuZGVmaW5lZFwiIHx8IHByb2Nlc3MuZW52ID09PSB1bmRlZmluZWRcbiAgICA/IGRlZmF1bHRFbnZpcm9ubWVudFxuICAgIDogcHJvY2Vzcy5lbnYuTk9ERV9FTlYgfHwgZGVmYXVsdEVudmlyb25tZW50O1xuXG5leHBvcnQgeyBlbnYgfTtcbiIsImNvbnN0IGRlZmF1bHRUaW1lc3RlcCA9ICgxIC8gNjApICogMTAwMDtcbmNvbnN0IGdldEN1cnJlbnRUaW1lID0gdHlwZW9mIHBlcmZvcm1hbmNlICE9PSBcInVuZGVmaW5lZFwiXG4gICAgPyAoKSA9PiBwZXJmb3JtYW5jZS5ub3coKVxuICAgIDogKCkgPT4gRGF0ZS5ub3coKTtcbmNvbnN0IG9uTmV4dEZyYW1lID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIlxuICAgID8gKGNhbGxiYWNrKSA9PiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKVxuICAgIDogKGNhbGxiYWNrKSA9PiBzZXRUaW1lb3V0KCgpID0+IGNhbGxiYWNrKGdldEN1cnJlbnRUaW1lKCkpLCBkZWZhdWx0VGltZXN0ZXApO1xuXG5leHBvcnQgeyBkZWZhdWx0VGltZXN0ZXAsIG9uTmV4dEZyYW1lIH07XG4iLCJpbXBvcnQgeyBvbk5leHRGcmFtZSwgZGVmYXVsdFRpbWVzdGVwIH0gZnJvbSAnLi9vbi1uZXh0LWZyYW1lLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVSZW5kZXJTdGVwIH0gZnJvbSAnLi9jcmVhdGUtcmVuZGVyLXN0ZXAubWpzJztcblxuY29uc3QgbWF4RWxhcHNlZCA9IDQwO1xubGV0IHVzZURlZmF1bHRFbGFwc2VkID0gdHJ1ZTtcbmxldCBydW5OZXh0RnJhbWUgPSBmYWxzZTtcbmxldCBpc1Byb2Nlc3NpbmcgPSBmYWxzZTtcbmNvbnN0IGZyYW1lID0ge1xuICAgIGRlbHRhOiAwLFxuICAgIHRpbWVzdGFtcDogMCxcbn07XG5jb25zdCBzdGVwc09yZGVyID0gW1xuICAgIFwicmVhZFwiLFxuICAgIFwidXBkYXRlXCIsXG4gICAgXCJwcmVSZW5kZXJcIixcbiAgICBcInJlbmRlclwiLFxuICAgIFwicG9zdFJlbmRlclwiLFxuXTtcbmNvbnN0IHN0ZXBzID0gc3RlcHNPcmRlci5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgYWNjW2tleV0gPSBjcmVhdGVSZW5kZXJTdGVwKCgpID0+IChydW5OZXh0RnJhbWUgPSB0cnVlKSk7XG4gICAgcmV0dXJuIGFjYztcbn0sIHt9KTtcbmNvbnN0IHN5bmMgPSBzdGVwc09yZGVyLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBzdGVwID0gc3RlcHNba2V5XTtcbiAgICBhY2Nba2V5XSA9IChwcm9jZXNzLCBrZWVwQWxpdmUgPSBmYWxzZSwgaW1tZWRpYXRlID0gZmFsc2UpID0+IHtcbiAgICAgICAgaWYgKCFydW5OZXh0RnJhbWUpXG4gICAgICAgICAgICBzdGFydExvb3AoKTtcbiAgICAgICAgcmV0dXJuIHN0ZXAuc2NoZWR1bGUocHJvY2Vzcywga2VlcEFsaXZlLCBpbW1lZGlhdGUpO1xuICAgIH07XG4gICAgcmV0dXJuIGFjYztcbn0sIHt9KTtcbmNvbnN0IGNhbmNlbFN5bmMgPSBzdGVwc09yZGVyLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBhY2Nba2V5XSA9IHN0ZXBzW2tleV0uY2FuY2VsO1xuICAgIHJldHVybiBhY2M7XG59LCB7fSk7XG5jb25zdCBmbHVzaFN5bmMgPSBzdGVwc09yZGVyLnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBhY2Nba2V5XSA9ICgpID0+IHN0ZXBzW2tleV0ucHJvY2VzcyhmcmFtZSk7XG4gICAgcmV0dXJuIGFjYztcbn0sIHt9KTtcbmNvbnN0IHByb2Nlc3NTdGVwID0gKHN0ZXBJZCkgPT4gc3RlcHNbc3RlcElkXS5wcm9jZXNzKGZyYW1lKTtcbmNvbnN0IHByb2Nlc3NGcmFtZSA9ICh0aW1lc3RhbXApID0+IHtcbiAgICBydW5OZXh0RnJhbWUgPSBmYWxzZTtcbiAgICBmcmFtZS5kZWx0YSA9IHVzZURlZmF1bHRFbGFwc2VkXG4gICAgICAgID8gZGVmYXVsdFRpbWVzdGVwXG4gICAgICAgIDogTWF0aC5tYXgoTWF0aC5taW4odGltZXN0YW1wIC0gZnJhbWUudGltZXN0YW1wLCBtYXhFbGFwc2VkKSwgMSk7XG4gICAgZnJhbWUudGltZXN0YW1wID0gdGltZXN0YW1wO1xuICAgIGlzUHJvY2Vzc2luZyA9IHRydWU7XG4gICAgc3RlcHNPcmRlci5mb3JFYWNoKHByb2Nlc3NTdGVwKTtcbiAgICBpc1Byb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICBpZiAocnVuTmV4dEZyYW1lKSB7XG4gICAgICAgIHVzZURlZmF1bHRFbGFwc2VkID0gZmFsc2U7XG4gICAgICAgIG9uTmV4dEZyYW1lKHByb2Nlc3NGcmFtZSk7XG4gICAgfVxufTtcbmNvbnN0IHN0YXJ0TG9vcCA9ICgpID0+IHtcbiAgICBydW5OZXh0RnJhbWUgPSB0cnVlO1xuICAgIHVzZURlZmF1bHRFbGFwc2VkID0gdHJ1ZTtcbiAgICBpZiAoIWlzUHJvY2Vzc2luZylcbiAgICAgICAgb25OZXh0RnJhbWUocHJvY2Vzc0ZyYW1lKTtcbn07XG5jb25zdCBnZXRGcmFtZURhdGEgPSAoKSA9PiBmcmFtZTtcblxuZXhwb3J0IGRlZmF1bHQgc3luYztcbmV4cG9ydCB7IGNhbmNlbFN5bmMsIGZsdXNoU3luYywgZ2V0RnJhbWVEYXRhIH07XG4iLCJmdW5jdGlvbiBjcmVhdGVSZW5kZXJTdGVwKHJ1bk5leHRGcmFtZSkge1xuICAgIGxldCB0b1J1biA9IFtdO1xuICAgIGxldCB0b1J1bk5leHRGcmFtZSA9IFtdO1xuICAgIGxldCBudW1Ub1J1biA9IDA7XG4gICAgbGV0IGlzUHJvY2Vzc2luZyA9IGZhbHNlO1xuICAgIGxldCBmbHVzaE5leHRGcmFtZSA9IGZhbHNlO1xuICAgIGNvbnN0IHRvS2VlcEFsaXZlID0gbmV3IFdlYWtTZXQoKTtcbiAgICBjb25zdCBzdGVwID0ge1xuICAgICAgICBzY2hlZHVsZTogKGNhbGxiYWNrLCBrZWVwQWxpdmUgPSBmYWxzZSwgaW1tZWRpYXRlID0gZmFsc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGFkZFRvQ3VycmVudEZyYW1lID0gaW1tZWRpYXRlICYmIGlzUHJvY2Vzc2luZztcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IGFkZFRvQ3VycmVudEZyYW1lID8gdG9SdW4gOiB0b1J1bk5leHRGcmFtZTtcbiAgICAgICAgICAgIGlmIChrZWVwQWxpdmUpXG4gICAgICAgICAgICAgICAgdG9LZWVwQWxpdmUuYWRkKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIGlmIChidWZmZXIuaW5kZXhPZihjYWxsYmFjaykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgYnVmZmVyLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgIGlmIChhZGRUb0N1cnJlbnRGcmFtZSAmJiBpc1Byb2Nlc3NpbmcpXG4gICAgICAgICAgICAgICAgICAgIG51bVRvUnVuID0gdG9SdW4ubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrO1xuICAgICAgICB9LFxuICAgICAgICBjYW5jZWw6IChjYWxsYmFjaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0b1J1bk5leHRGcmFtZS5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIGlmIChpbmRleCAhPT0gLTEpXG4gICAgICAgICAgICAgICAgdG9SdW5OZXh0RnJhbWUuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHRvS2VlcEFsaXZlLmRlbGV0ZShjYWxsYmFjayk7XG4gICAgICAgIH0sXG4gICAgICAgIHByb2Nlc3M6IChmcmFtZURhdGEpID0+IHtcbiAgICAgICAgICAgIGlmIChpc1Byb2Nlc3NpbmcpIHtcbiAgICAgICAgICAgICAgICBmbHVzaE5leHRGcmFtZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaXNQcm9jZXNzaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIFt0b1J1biwgdG9SdW5OZXh0RnJhbWVdID0gW3RvUnVuTmV4dEZyYW1lLCB0b1J1bl07XG4gICAgICAgICAgICB0b1J1bk5leHRGcmFtZS5sZW5ndGggPSAwO1xuICAgICAgICAgICAgbnVtVG9SdW4gPSB0b1J1bi5sZW5ndGg7XG4gICAgICAgICAgICBpZiAobnVtVG9SdW4pIHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bVRvUnVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2FsbGJhY2sgPSB0b1J1bltpXTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZnJhbWVEYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRvS2VlcEFsaXZlLmhhcyhjYWxsYmFjaykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXAuc2NoZWR1bGUoY2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgcnVuTmV4dEZyYW1lKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpc1Byb2Nlc3NpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChmbHVzaE5leHRGcmFtZSkge1xuICAgICAgICAgICAgICAgIGZsdXNoTmV4dEZyYW1lID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgc3RlcC5wcm9jZXNzKGZyYW1lRGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgfTtcbiAgICByZXR1cm4gc3RlcDtcbn1cblxuZXhwb3J0IHsgY3JlYXRlUmVuZGVyU3RlcCB9O1xuIiwidmFyIGlzQnJvd3NlciA9IHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIjtcblxuZXhwb3J0IHsgaXNCcm93c2VyIH07XG4iLCJpbXBvcnQgeyB1c2VMYXlvdXRFZmZlY3QsIHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzQnJvd3NlciB9IGZyb20gJy4vaXMtYnJvd3Nlci5tanMnO1xuXG52YXIgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IGlzQnJvd3NlciA/IHVzZUxheW91dEVmZmVjdCA6IHVzZUVmZmVjdDtcblxuZXhwb3J0IHsgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCB9O1xuIiwiaW1wb3J0IHsgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCB9IGZyb20gJy4vdXNlLWlzb21vcnBoaWMtZWZmZWN0Lm1qcyc7XG5cbmZ1bmN0aW9uIHVzZUlzTW91bnRlZCgpIHtcbiAgICB2YXIgaXNNb3VudGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXNNb3VudGVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaXNNb3VudGVkLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIGlzTW91bnRlZDtcbn1cblxuZXhwb3J0IHsgdXNlSXNNb3VudGVkIH07XG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqL1xudmFyIFByZXNlbmNlQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQobnVsbCk7XG5cbmV4cG9ydCB7IFByZXNlbmNlQ29udGV4dCB9O1xuIiwiaW1wb3J0IHsgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjb25zdGFudCB2YWx1ZSBvdmVyIHRoZSBsaWZlY3ljbGUgb2YgYSBjb21wb25lbnQuXG4gKlxuICogRXZlbiBpZiBgdXNlTWVtb2AgaXMgcHJvdmlkZWQgYW4gZW1wdHkgYXJyYXkgYXMgaXRzIGZpbmFsIGFyZ3VtZW50LCBpdCBkb2Vzbid0IG9mZmVyXG4gKiBhIGd1YXJhbnRlZSB0aGF0IGl0IHdvbid0IHJlLXJ1biBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyBsYXRlciBvbi4gQnkgdXNpbmcgYHVzZUNvbnN0YW50YFxuICogeW91IGNhbiBlbnN1cmUgdGhhdCBpbml0aWFsaXNlcnMgZG9uJ3QgZXhlY3V0ZSB0d2ljZSBvciBtb3JlLlxuICovXG5mdW5jdGlvbiB1c2VDb25zdGFudChpbml0KSB7XG4gICAgdmFyIHJlZiA9IHVzZVJlZihudWxsKTtcbiAgICBpZiAocmVmLmN1cnJlbnQgPT09IG51bGwpIHtcbiAgICAgICAgcmVmLmN1cnJlbnQgPSBpbml0KCk7XG4gICAgfVxuICAgIHJldHVybiByZWYuY3VycmVudDtcbn1cblxuZXhwb3J0IHsgdXNlQ29uc3RhbnQgfTtcbiIsImltcG9ydCB7IHVzZUNvbnN0YW50IH0gZnJvbSAnLi91c2UtY29uc3RhbnQubWpzJztcblxudmFyIGNvdW50ZXIgPSAwO1xudmFyIGluY3JlbWVudElkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gY291bnRlcisrOyB9O1xudmFyIHVzZUlkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdXNlQ29uc3RhbnQoaW5jcmVtZW50SWQpOyB9O1xuLyoqXG4gKiBJZGVhbGx5IHdlJ2QgdXNlIHRoZSBmb2xsb3dpbmcgY29kZSB0byBzdXBwb3J0IFJlYWN0IDE4IG9wdGlvbmFsbHkuXG4gKiBCdXQgdGhpcyBmYWlybHkgZmFpbHMgaW4gV2VicGFjayAob3RoZXJ3aXNlIHRyZWVzaGFraW5nIHdvdWxkbid0IHdvcmsgYXQgYWxsKS5cbiAqIE5lZWQgdG8gY29tZSB1cCB3aXRoIGEgZGlmZmVyZW50IHdheSBvZiBmaWd1cmluZyB0aGlzIG91dC5cbiAqL1xuLy8gZXhwb3J0IGNvbnN0IHVzZUlkID0gKFJlYWN0IGFzIGFueSkudXNlSWRcbi8vICAgICA/IChSZWFjdCBhcyBhbnkpLnVzZUlkXG4vLyAgICAgOiAoKSA9PiB1c2VDb25zdGFudChpbmNyZW1lbnRJZClcblxuZXhwb3J0IHsgdXNlSWQgfTtcbiIsImltcG9ydCB7IF9fdmFsdWVzIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFByZXNlbmNlQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvUHJlc2VuY2VDb250ZXh0Lm1qcyc7XG5pbXBvcnQgeyB1c2VDb25zdGFudCB9IGZyb20gJy4uLy4uL3V0aWxzL3VzZS1jb25zdGFudC5tanMnO1xuaW1wb3J0IHsgdXNlSWQgfSBmcm9tICcuLi8uLi91dGlscy91c2UtaWQubWpzJztcblxudmFyIFByZXNlbmNlQ2hpbGQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgY2hpbGRyZW4gPSBfYS5jaGlsZHJlbiwgaW5pdGlhbCA9IF9hLmluaXRpYWwsIGlzUHJlc2VudCA9IF9hLmlzUHJlc2VudCwgb25FeGl0Q29tcGxldGUgPSBfYS5vbkV4aXRDb21wbGV0ZSwgY3VzdG9tID0gX2EuY3VzdG9tLCBwcmVzZW5jZUFmZmVjdHNMYXlvdXQgPSBfYS5wcmVzZW5jZUFmZmVjdHNMYXlvdXQ7XG4gICAgdmFyIHByZXNlbmNlQ2hpbGRyZW4gPSB1c2VDb25zdGFudChuZXdDaGlsZHJlbk1hcCk7XG4gICAgdmFyIGlkID0gdXNlSWQoKTtcbiAgICB2YXIgY29udGV4dCA9IHVzZU1lbW8oZnVuY3Rpb24gKCkgeyByZXR1cm4gKHtcbiAgICAgICAgaWQ6IGlkLFxuICAgICAgICBpbml0aWFsOiBpbml0aWFsLFxuICAgICAgICBpc1ByZXNlbnQ6IGlzUHJlc2VudCxcbiAgICAgICAgY3VzdG9tOiBjdXN0b20sXG4gICAgICAgIG9uRXhpdENvbXBsZXRlOiBmdW5jdGlvbiAoY2hpbGRJZCkge1xuICAgICAgICAgICAgdmFyIGVfMSwgX2E7XG4gICAgICAgICAgICBwcmVzZW5jZUNoaWxkcmVuLnNldChjaGlsZElkLCB0cnVlKTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgX2IgPSBfX3ZhbHVlcyhwcmVzZW5jZUNoaWxkcmVuLnZhbHVlcygpKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNDb21wbGV0ZSA9IF9jLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzQ29tcGxldGUpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47IC8vIGNhbiBzdG9wIHNlYXJjaGluZyB3aGVuIGFueSBpcyBpbmNvbXBsZXRlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVfMV8xKSB7IGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07IH1cbiAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfYyAmJiAhX2MuZG9uZSAmJiAoX2EgPSBfYi5yZXR1cm4pKSBfYS5jYWxsKF9iKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZmluYWxseSB7IGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25FeGl0Q29tcGxldGUgPT09IG51bGwgfHwgb25FeGl0Q29tcGxldGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRXhpdENvbXBsZXRlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIHJlZ2lzdGVyOiBmdW5jdGlvbiAoY2hpbGRJZCkge1xuICAgICAgICAgICAgcHJlc2VuY2VDaGlsZHJlbi5zZXQoY2hpbGRJZCwgZmFsc2UpO1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHByZXNlbmNlQ2hpbGRyZW4uZGVsZXRlKGNoaWxkSWQpOyB9O1xuICAgICAgICB9LFxuICAgIH0pOyB9LCBcbiAgICAvKipcbiAgICAgKiBJZiB0aGUgcHJlc2VuY2Ugb2YgYSBjaGlsZCBhZmZlY3RzIHRoZSBsYXlvdXQgb2YgdGhlIGNvbXBvbmVudHMgYXJvdW5kIGl0LFxuICAgICAqIHdlIHdhbnQgdG8gbWFrZSBhIG5ldyBjb250ZXh0IHZhbHVlIHRvIGVuc3VyZSB0aGV5IGdldCByZS1yZW5kZXJlZFxuICAgICAqIHNvIHRoZXkgY2FuIGRldGVjdCB0aGF0IGxheW91dCBjaGFuZ2UuXG4gICAgICovXG4gICAgcHJlc2VuY2VBZmZlY3RzTGF5b3V0ID8gdW5kZWZpbmVkIDogW2lzUHJlc2VudF0pO1xuICAgIHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgICAgICBwcmVzZW5jZUNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24gKF8sIGtleSkgeyByZXR1cm4gcHJlc2VuY2VDaGlsZHJlbi5zZXQoa2V5LCBmYWxzZSk7IH0pO1xuICAgIH0sIFtpc1ByZXNlbnRdKTtcbiAgICAvKipcbiAgICAgKiBJZiB0aGVyZSdzIG5vIGBtb3Rpb25gIGNvbXBvbmVudHMgdG8gZmlyZSBleGl0IGFuaW1hdGlvbnMsIHdlIHdhbnQgdG8gcmVtb3ZlIHRoaXNcbiAgICAgKiBjb21wb25lbnQgaW1tZWRpYXRlbHkuXG4gICAgICovXG4gICAgUmVhY3QudXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgIWlzUHJlc2VudCAmJiAhcHJlc2VuY2VDaGlsZHJlbi5zaXplICYmIChvbkV4aXRDb21wbGV0ZSA9PT0gbnVsbCB8fCBvbkV4aXRDb21wbGV0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25FeGl0Q29tcGxldGUoKSk7XG4gICAgfSwgW2lzUHJlc2VudF0pO1xuICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChQcmVzZW5jZUNvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGNvbnRleHQgfSwgY2hpbGRyZW4pKTtcbn07XG5mdW5jdGlvbiBuZXdDaGlsZHJlbk1hcCgpIHtcbiAgICByZXR1cm4gbmV3IE1hcCgpO1xufVxuXG5leHBvcnQgeyBQcmVzZW5jZUNoaWxkIH07XG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuXG52YXIgTGF5b3V0R3JvdXBDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7fSk7XG5cbmV4cG9ydCB7IExheW91dEdyb3VwQ29udGV4dCB9O1xuIiwiaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG5mdW5jdGlvbiB1c2VVbm1vdW50RWZmZWN0KGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7IHJldHVybiBmdW5jdGlvbiAoKSB7IHJldHVybiBjYWxsYmFjaygpOyB9OyB9LCBbXSk7XG59XG5cbmV4cG9ydCB7IHVzZVVubW91bnRFZmZlY3QgfTtcbiIsImltcG9ydCB7IF9fcmVhZCwgX19zcHJlYWRBcnJheSB9IGZyb20gJ3RzbGliJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUNvbnRleHQsIHVzZVJlZiwgY2xvbmVFbGVtZW50LCBDaGlsZHJlbiwgaXNWYWxpZEVsZW1lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBlbnYgfSBmcm9tICcuLi8uLi91dGlscy9wcm9jZXNzLm1qcyc7XG5pbXBvcnQgeyB1c2VGb3JjZVVwZGF0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL3VzZS1mb3JjZS11cGRhdGUubWpzJztcbmltcG9ydCB7IHVzZUlzTW91bnRlZCB9IGZyb20gJy4uLy4uL3V0aWxzL3VzZS1pcy1tb3VudGVkLm1qcyc7XG5pbXBvcnQgeyBQcmVzZW5jZUNoaWxkIH0gZnJvbSAnLi9QcmVzZW5jZUNoaWxkLm1qcyc7XG5pbXBvcnQgeyBMYXlvdXRHcm91cENvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L0xheW91dEdyb3VwQ29udGV4dC5tanMnO1xuaW1wb3J0IHsgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCB9IGZyb20gJy4uLy4uL3V0aWxzL3VzZS1pc29tb3JwaGljLWVmZmVjdC5tanMnO1xuaW1wb3J0IHsgdXNlVW5tb3VudEVmZmVjdCB9IGZyb20gJy4uLy4uL3V0aWxzL3VzZS11bm1vdW50LWVmZmVjdC5tanMnO1xuXG52YXIgZ2V0Q2hpbGRLZXkgPSBmdW5jdGlvbiAoY2hpbGQpIHsgcmV0dXJuIGNoaWxkLmtleSB8fCBcIlwiOyB9O1xuZnVuY3Rpb24gdXBkYXRlQ2hpbGRMb29rdXAoY2hpbGRyZW4sIGFsbENoaWxkcmVuKSB7XG4gICAgY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgdmFyIGtleSA9IGdldENoaWxkS2V5KGNoaWxkKTtcbiAgICAgICAgYWxsQ2hpbGRyZW4uc2V0KGtleSwgY2hpbGQpO1xuICAgIH0pO1xufVxuZnVuY3Rpb24gb25seUVsZW1lbnRzKGNoaWxkcmVuKSB7XG4gICAgdmFyIGZpbHRlcmVkID0gW107XG4gICAgLy8gV2UgdXNlIGZvckVhY2ggaGVyZSBpbnN0ZWFkIG9mIG1hcCBhcyBtYXAgbXV0YXRlcyB0aGUgY29tcG9uZW50IGtleSBieSBwcmVwcmVuZGluZyBgLiRgXG4gICAgQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIGlmIChpc1ZhbGlkRWxlbWVudChjaGlsZCkpXG4gICAgICAgICAgICBmaWx0ZXJlZC5wdXNoKGNoaWxkKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZmlsdGVyZWQ7XG59XG4vKipcbiAqIGBBbmltYXRlUHJlc2VuY2VgIGVuYWJsZXMgdGhlIGFuaW1hdGlvbiBvZiBjb21wb25lbnRzIHRoYXQgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgdHJlZS5cbiAqXG4gKiBXaGVuIGFkZGluZy9yZW1vdmluZyBtb3JlIHRoYW4gYSBzaW5nbGUgY2hpbGQsIGV2ZXJ5IGNoaWxkICoqbXVzdCoqIGJlIGdpdmVuIGEgdW5pcXVlIGBrZXlgIHByb3AuXG4gKlxuICogQW55IGBtb3Rpb25gIGNvbXBvbmVudHMgdGhhdCBoYXZlIGFuIGBleGl0YCBwcm9wZXJ0eSBkZWZpbmVkIHdpbGwgYW5pbWF0ZSBvdXQgd2hlbiByZW1vdmVkIGZyb21cbiAqIHRoZSB0cmVlLlxuICpcbiAqIGBgYGpzeFxuICogaW1wb3J0IHsgbW90aW9uLCBBbmltYXRlUHJlc2VuY2UgfSBmcm9tICdmcmFtZXItbW90aW9uJ1xuICpcbiAqIGV4cG9ydCBjb25zdCBJdGVtcyA9ICh7IGl0ZW1zIH0pID0+IChcbiAqICAgPEFuaW1hdGVQcmVzZW5jZT5cbiAqICAgICB7aXRlbXMubWFwKGl0ZW0gPT4gKFxuICogICAgICAgPG1vdGlvbi5kaXZcbiAqICAgICAgICAga2V5PXtpdGVtLmlkfVxuICogICAgICAgICBpbml0aWFsPXt7IG9wYWNpdHk6IDAgfX1cbiAqICAgICAgICAgYW5pbWF0ZT17eyBvcGFjaXR5OiAxIH19XG4gKiAgICAgICAgIGV4aXQ9e3sgb3BhY2l0eTogMCB9fVxuICogICAgICAgLz5cbiAqICAgICApKX1cbiAqICAgPC9BbmltYXRlUHJlc2VuY2U+XG4gKiApXG4gKiBgYGBcbiAqXG4gKiBZb3UgY2FuIHNlcXVlbmNlIGV4aXQgYW5pbWF0aW9ucyB0aHJvdWdob3V0IGEgdHJlZSB1c2luZyB2YXJpYW50cy5cbiAqXG4gKiBJZiBhIGNoaWxkIGNvbnRhaW5zIG11bHRpcGxlIGBtb3Rpb25gIGNvbXBvbmVudHMgd2l0aCBgZXhpdGAgcHJvcHMsIGl0IHdpbGwgb25seSB1bm1vdW50IHRoZSBjaGlsZFxuICogb25jZSBhbGwgYG1vdGlvbmAgY29tcG9uZW50cyBoYXZlIGZpbmlzaGVkIGFuaW1hdGluZyBvdXQuIExpa2V3aXNlLCBhbnkgY29tcG9uZW50cyB1c2luZ1xuICogYHVzZVByZXNlbmNlYCBhbGwgbmVlZCB0byBjYWxsIGBzYWZlVG9SZW1vdmVgLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xudmFyIEFuaW1hdGVQcmVzZW5jZSA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBjaGlsZHJlbiA9IF9hLmNoaWxkcmVuLCBjdXN0b20gPSBfYS5jdXN0b20sIF9iID0gX2EuaW5pdGlhbCwgaW5pdGlhbCA9IF9iID09PSB2b2lkIDAgPyB0cnVlIDogX2IsIG9uRXhpdENvbXBsZXRlID0gX2Eub25FeGl0Q29tcGxldGUsIGV4aXRCZWZvcmVFbnRlciA9IF9hLmV4aXRCZWZvcmVFbnRlciwgX2MgPSBfYS5wcmVzZW5jZUFmZmVjdHNMYXlvdXQsIHByZXNlbmNlQWZmZWN0c0xheW91dCA9IF9jID09PSB2b2lkIDAgPyB0cnVlIDogX2M7XG4gICAgLy8gV2Ugd2FudCB0byBmb3JjZSBhIHJlLXJlbmRlciBvbmNlIGFsbCBleGl0aW5nIGFuaW1hdGlvbnMgaGF2ZSBmaW5pc2hlZC4gV2VcbiAgICAvLyBlaXRoZXIgdXNlIGEgbG9jYWwgZm9yY2VSZW5kZXIgZnVuY3Rpb24sIG9yIG9uZSBmcm9tIGEgcGFyZW50IGNvbnRleHQgaWYgaXQgZXhpc3RzLlxuICAgIHZhciBfZCA9IF9fcmVhZCh1c2VGb3JjZVVwZGF0ZSgpLCAxKSwgZm9yY2VSZW5kZXIgPSBfZFswXTtcbiAgICB2YXIgZm9yY2VSZW5kZXJMYXlvdXRHcm91cCA9IHVzZUNvbnRleHQoTGF5b3V0R3JvdXBDb250ZXh0KS5mb3JjZVJlbmRlcjtcbiAgICBpZiAoZm9yY2VSZW5kZXJMYXlvdXRHcm91cClcbiAgICAgICAgZm9yY2VSZW5kZXIgPSBmb3JjZVJlbmRlckxheW91dEdyb3VwO1xuICAgIHZhciBpc01vdW50ZWQgPSB1c2VJc01vdW50ZWQoKTtcbiAgICAvLyBGaWx0ZXIgb3V0IGFueSBjaGlsZHJlbiB0aGF0IGFyZW4ndCBSZWFjdEVsZW1lbnRzLiBXZSBjYW4gb25seSB0cmFjayBSZWFjdEVsZW1lbnRzIHdpdGggYSBwcm9wcy5rZXlcbiAgICB2YXIgZmlsdGVyZWRDaGlsZHJlbiA9IG9ubHlFbGVtZW50cyhjaGlsZHJlbik7XG4gICAgdmFyIGNoaWxkcmVuVG9SZW5kZXIgPSBmaWx0ZXJlZENoaWxkcmVuO1xuICAgIHZhciBleGl0aW5nID0gbmV3IFNldCgpO1xuICAgIC8vIEtlZXAgYSBsaXZpbmcgcmVjb3JkIG9mIHRoZSBjaGlsZHJlbiB3ZSdyZSBhY3R1YWxseSByZW5kZXJpbmcgc28gd2VcbiAgICAvLyBjYW4gZGlmZiB0byBmaWd1cmUgb3V0IHdoaWNoIGFyZSBlbnRlcmluZyBhbmQgZXhpdGluZ1xuICAgIHZhciBwcmVzZW50Q2hpbGRyZW4gPSB1c2VSZWYoY2hpbGRyZW5Ub1JlbmRlcik7XG4gICAgLy8gQSBsb29rdXAgdGFibGUgdG8gcXVpY2tseSByZWZlcmVuY2UgY29tcG9uZW50cyBieSBrZXlcbiAgICB2YXIgYWxsQ2hpbGRyZW4gPSB1c2VSZWYobmV3IE1hcCgpKS5jdXJyZW50O1xuICAgIC8vIElmIHRoaXMgaXMgdGhlIGluaXRpYWwgY29tcG9uZW50IHJlbmRlciwganVzdCBkZWFsIHdpdGggbG9naWMgc3Vycm91bmRpbmcgd2hldGhlclxuICAgIC8vIHdlIHBsYXkgb25Nb3VudCBhbmltYXRpb25zIG9yIG5vdC5cbiAgICB2YXIgaXNJbml0aWFsUmVuZGVyID0gdXNlUmVmKHRydWUpO1xuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpc0luaXRpYWxSZW5kZXIuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB1cGRhdGVDaGlsZExvb2t1cChmaWx0ZXJlZENoaWxkcmVuLCBhbGxDaGlsZHJlbik7XG4gICAgICAgIHByZXNlbnRDaGlsZHJlbi5jdXJyZW50ID0gY2hpbGRyZW5Ub1JlbmRlcjtcbiAgICB9KTtcbiAgICB1c2VVbm1vdW50RWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaXNJbml0aWFsUmVuZGVyLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBhbGxDaGlsZHJlbi5jbGVhcigpO1xuICAgICAgICBleGl0aW5nLmNsZWFyKCk7XG4gICAgfSk7XG4gICAgaWYgKGlzSW5pdGlhbFJlbmRlci5jdXJyZW50KSB7XG4gICAgICAgIHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChSZWFjdC5GcmFnbWVudCwgbnVsbCwgY2hpbGRyZW5Ub1JlbmRlci5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiAoUmVhY3QuY3JlYXRlRWxlbWVudChQcmVzZW5jZUNoaWxkLCB7IGtleTogZ2V0Q2hpbGRLZXkoY2hpbGQpLCBpc1ByZXNlbnQ6IHRydWUsIGluaXRpYWw6IGluaXRpYWwgPyB1bmRlZmluZWQgOiBmYWxzZSwgcHJlc2VuY2VBZmZlY3RzTGF5b3V0OiBwcmVzZW5jZUFmZmVjdHNMYXlvdXQgfSwgY2hpbGQpKTsgfSkpKTtcbiAgICB9XG4gICAgLy8gSWYgdGhpcyBpcyBhIHN1YnNlcXVlbnQgcmVuZGVyLCBkZWFsIHdpdGggZW50ZXJpbmcgYW5kIGV4aXRpbmcgY2hpbGRyZW5cbiAgICBjaGlsZHJlblRvUmVuZGVyID0gX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGNoaWxkcmVuVG9SZW5kZXIpLCBmYWxzZSk7XG4gICAgLy8gRGlmZiB0aGUga2V5cyBvZiB0aGUgY3VycmVudGx5LXByZXNlbnQgYW5kIHRhcmdldCBjaGlsZHJlbiB0byB1cGRhdGUgb3VyXG4gICAgLy8gZXhpdGluZyBsaXN0LlxuICAgIHZhciBwcmVzZW50S2V5cyA9IHByZXNlbnRDaGlsZHJlbi5jdXJyZW50Lm1hcChnZXRDaGlsZEtleSk7XG4gICAgdmFyIHRhcmdldEtleXMgPSBmaWx0ZXJlZENoaWxkcmVuLm1hcChnZXRDaGlsZEtleSk7XG4gICAgLy8gRGlmZiB0aGUgcHJlc2VudCBjaGlsZHJlbiB3aXRoIG91ciB0YXJnZXQgY2hpbGRyZW4gYW5kIG1hcmsgdGhvc2UgdGhhdCBhcmUgZXhpdGluZ1xuICAgIHZhciBudW1QcmVzZW50ID0gcHJlc2VudEtleXMubGVuZ3RoO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtUHJlc2VudDsgaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBwcmVzZW50S2V5c1tpXTtcbiAgICAgICAgaWYgKHRhcmdldEtleXMuaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgICAgICAgZXhpdGluZy5hZGQoa2V5KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBJZiB3ZSBjdXJyZW50bHkgaGF2ZSBleGl0aW5nIGNoaWxkcmVuLCBhbmQgd2UncmUgZGVmZXJyaW5nIHJlbmRlcmluZyBpbmNvbWluZyBjaGlsZHJlblxuICAgIC8vIHVudGlsIGFmdGVyIGFsbCBjdXJyZW50IGNoaWxkcmVuIGhhdmUgZXhpdGluZywgZW1wdHkgdGhlIGNoaWxkcmVuVG9SZW5kZXIgYXJyYXlcbiAgICBpZiAoZXhpdEJlZm9yZUVudGVyICYmIGV4aXRpbmcuc2l6ZSkge1xuICAgICAgICBjaGlsZHJlblRvUmVuZGVyID0gW107XG4gICAgfVxuICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgY3VycmVudGx5IGV4aXRpbmcgY29tcG9uZW50cyBhbmQgY2xvbmUgdGhlbSB0byBvdmVyd3JpdGUgYGFuaW1hdGVgXG4gICAgLy8gd2l0aCBhbnkgYGV4aXRgIHByb3AgdGhleSBtaWdodCBoYXZlIGRlZmluZWQuXG4gICAgZXhpdGluZy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgLy8gSWYgdGhpcyBjb21wb25lbnQgaXMgYWN0dWFsbHkgZW50ZXJpbmcgYWdhaW4sIGVhcmx5IHJldHVyblxuICAgICAgICBpZiAodGFyZ2V0S2V5cy5pbmRleE9mKGtleSkgIT09IC0xKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgY2hpbGQgPSBhbGxDaGlsZHJlbi5nZXQoa2V5KTtcbiAgICAgICAgaWYgKCFjaGlsZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGluc2VydGlvbkluZGV4ID0gcHJlc2VudEtleXMuaW5kZXhPZihrZXkpO1xuICAgICAgICB2YXIgb25FeGl0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYWxsQ2hpbGRyZW4uZGVsZXRlKGtleSk7XG4gICAgICAgICAgICBleGl0aW5nLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoaXMgY2hpbGQgZnJvbSB0aGUgcHJlc2VudCBjaGlsZHJlblxuICAgICAgICAgICAgdmFyIHJlbW92ZUluZGV4ID0gcHJlc2VudENoaWxkcmVuLmN1cnJlbnQuZmluZEluZGV4KGZ1bmN0aW9uIChwcmVzZW50Q2hpbGQpIHsgcmV0dXJuIHByZXNlbnRDaGlsZC5rZXkgPT09IGtleTsgfSk7XG4gICAgICAgICAgICBwcmVzZW50Q2hpbGRyZW4uY3VycmVudC5zcGxpY2UocmVtb3ZlSW5kZXgsIDEpO1xuICAgICAgICAgICAgLy8gRGVmZXIgcmUtcmVuZGVyaW5nIHVudGlsIGFsbCBleGl0aW5nIGNoaWxkcmVuIGhhdmUgaW5kZWVkIGxlZnRcbiAgICAgICAgICAgIGlmICghZXhpdGluZy5zaXplKSB7XG4gICAgICAgICAgICAgICAgcHJlc2VudENoaWxkcmVuLmN1cnJlbnQgPSBmaWx0ZXJlZENoaWxkcmVuO1xuICAgICAgICAgICAgICAgIGlmIChpc01vdW50ZWQuY3VycmVudCA9PT0gZmFsc2UpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICBmb3JjZVJlbmRlcigpO1xuICAgICAgICAgICAgICAgIG9uRXhpdENvbXBsZXRlICYmIG9uRXhpdENvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNoaWxkcmVuVG9SZW5kZXIuc3BsaWNlKGluc2VydGlvbkluZGV4LCAwLCBSZWFjdC5jcmVhdGVFbGVtZW50KFByZXNlbmNlQ2hpbGQsIHsga2V5OiBnZXRDaGlsZEtleShjaGlsZCksIGlzUHJlc2VudDogZmFsc2UsIG9uRXhpdENvbXBsZXRlOiBvbkV4aXQsIGN1c3RvbTogY3VzdG9tLCBwcmVzZW5jZUFmZmVjdHNMYXlvdXQ6IHByZXNlbmNlQWZmZWN0c0xheW91dCB9LCBjaGlsZCkpO1xuICAgIH0pO1xuICAgIC8vIEFkZCBgTW90aW9uQ29udGV4dGAgZXZlbiB0byBjaGlsZHJlbiB0aGF0IGRvbid0IG5lZWQgaXQgdG8gZW5zdXJlIHdlJ3JlIHJlbmRlcmluZ1xuICAgIC8vIHRoZSBzYW1lIHRyZWUgYmV0d2VlbiByZW5kZXJzXG4gICAgY2hpbGRyZW5Ub1JlbmRlciA9IGNoaWxkcmVuVG9SZW5kZXIubWFwKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICB2YXIga2V5ID0gY2hpbGQua2V5O1xuICAgICAgICByZXR1cm4gZXhpdGluZy5oYXMoa2V5KSA/IChjaGlsZCkgOiAoUmVhY3QuY3JlYXRlRWxlbWVudChQcmVzZW5jZUNoaWxkLCB7IGtleTogZ2V0Q2hpbGRLZXkoY2hpbGQpLCBpc1ByZXNlbnQ6IHRydWUsIHByZXNlbmNlQWZmZWN0c0xheW91dDogcHJlc2VuY2VBZmZlY3RzTGF5b3V0IH0sIGNoaWxkKSk7XG4gICAgfSk7XG4gICAgaWYgKGVudiAhPT0gXCJwcm9kdWN0aW9uXCIgJiZcbiAgICAgICAgZXhpdEJlZm9yZUVudGVyICYmXG4gICAgICAgIGNoaWxkcmVuVG9SZW5kZXIubGVuZ3RoID4gMSkge1xuICAgICAgICBjb25zb2xlLndhcm4oXCJZb3UncmUgYXR0ZW1wdGluZyB0byBhbmltYXRlIG11bHRpcGxlIGNoaWxkcmVuIHdpdGhpbiBBbmltYXRlUHJlc2VuY2UsIGJ1dCBpdHMgZXhpdEJlZm9yZUVudGVyIHByb3AgaXMgc2V0IHRvIHRydWUuIFRoaXMgd2lsbCBsZWFkIHRvIG9kZCB2aXN1YWwgYmVoYXZpb3VyLlwiKTtcbiAgICB9XG4gICAgcmV0dXJuIChSZWFjdC5jcmVhdGVFbGVtZW50KFJlYWN0LkZyYWdtZW50LCBudWxsLCBleGl0aW5nLnNpemVcbiAgICAgICAgPyBjaGlsZHJlblRvUmVuZGVyXG4gICAgICAgIDogY2hpbGRyZW5Ub1JlbmRlci5tYXAoZnVuY3Rpb24gKGNoaWxkKSB7IHJldHVybiBjbG9uZUVsZW1lbnQoY2hpbGQpOyB9KSkpO1xufTtcblxuZXhwb3J0IHsgQW5pbWF0ZVByZXNlbmNlIH07XG4iLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgc3luYyBmcm9tICdmcmFtZXN5bmMnO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlSXNNb3VudGVkIH0gZnJvbSAnLi91c2UtaXMtbW91bnRlZC5tanMnO1xuXG5mdW5jdGlvbiB1c2VGb3JjZVVwZGF0ZSgpIHtcbiAgICB2YXIgaXNNb3VudGVkID0gdXNlSXNNb3VudGVkKCk7XG4gICAgdmFyIF9hID0gX19yZWFkKHVzZVN0YXRlKDApLCAyKSwgZm9yY2VkUmVuZGVyQ291bnQgPSBfYVswXSwgc2V0Rm9yY2VkUmVuZGVyQ291bnQgPSBfYVsxXTtcbiAgICB2YXIgZm9yY2VSZW5kZXIgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlzTW91bnRlZC5jdXJyZW50ICYmIHNldEZvcmNlZFJlbmRlckNvdW50KGZvcmNlZFJlbmRlckNvdW50ICsgMSk7XG4gICAgfSwgW2ZvcmNlZFJlbmRlckNvdW50XSk7XG4gICAgLyoqXG4gICAgICogRGVmZXIgdGhpcyB0byB0aGUgZW5kIG9mIHRoZSBuZXh0IGFuaW1hdGlvbiBmcmFtZSBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZVxuICAgICAqIHN5bmNocm9ub3VzIGNhbGxzLlxuICAgICAqL1xuICAgIHZhciBkZWZlcnJlZEZvcmNlUmVuZGVyID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKCkgeyByZXR1cm4gc3luYy5wb3N0UmVuZGVyKGZvcmNlUmVuZGVyKTsgfSwgW2ZvcmNlUmVuZGVyXSk7XG4gICAgcmV0dXJuIFtkZWZlcnJlZEZvcmNlUmVuZGVyLCBmb3JjZWRSZW5kZXJDb3VudF07XG59XG5cbmV4cG9ydCB7IHVzZUZvcmNlVXBkYXRlIH07XG4iLCJ2YXIgY3JlYXRlRGVmaW5pdGlvbiA9IGZ1bmN0aW9uIChwcm9wTmFtZXMpIHsgcmV0dXJuICh7XG4gICAgaXNFbmFibGVkOiBmdW5jdGlvbiAocHJvcHMpIHsgcmV0dXJuIHByb3BOYW1lcy5zb21lKGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiAhIXByb3BzW25hbWVdOyB9KTsgfSxcbn0pOyB9O1xudmFyIGZlYXR1cmVEZWZpbml0aW9ucyA9IHtcbiAgICBtZWFzdXJlTGF5b3V0OiBjcmVhdGVEZWZpbml0aW9uKFtcImxheW91dFwiLCBcImxheW91dElkXCIsIFwiZHJhZ1wiXSksXG4gICAgYW5pbWF0aW9uOiBjcmVhdGVEZWZpbml0aW9uKFtcbiAgICAgICAgXCJhbmltYXRlXCIsXG4gICAgICAgIFwiZXhpdFwiLFxuICAgICAgICBcInZhcmlhbnRzXCIsXG4gICAgICAgIFwid2hpbGVIb3ZlclwiLFxuICAgICAgICBcIndoaWxlVGFwXCIsXG4gICAgICAgIFwid2hpbGVGb2N1c1wiLFxuICAgICAgICBcIndoaWxlRHJhZ1wiLFxuICAgICAgICBcIndoaWxlSW5WaWV3XCIsXG4gICAgXSksXG4gICAgZXhpdDogY3JlYXRlRGVmaW5pdGlvbihbXCJleGl0XCJdKSxcbiAgICBkcmFnOiBjcmVhdGVEZWZpbml0aW9uKFtcImRyYWdcIiwgXCJkcmFnQ29udHJvbHNcIl0pLFxuICAgIGZvY3VzOiBjcmVhdGVEZWZpbml0aW9uKFtcIndoaWxlRm9jdXNcIl0pLFxuICAgIGhvdmVyOiBjcmVhdGVEZWZpbml0aW9uKFtcIndoaWxlSG92ZXJcIiwgXCJvbkhvdmVyU3RhcnRcIiwgXCJvbkhvdmVyRW5kXCJdKSxcbiAgICB0YXA6IGNyZWF0ZURlZmluaXRpb24oW1wid2hpbGVUYXBcIiwgXCJvblRhcFwiLCBcIm9uVGFwU3RhcnRcIiwgXCJvblRhcENhbmNlbFwiXSksXG4gICAgcGFuOiBjcmVhdGVEZWZpbml0aW9uKFtcbiAgICAgICAgXCJvblBhblwiLFxuICAgICAgICBcIm9uUGFuU3RhcnRcIixcbiAgICAgICAgXCJvblBhblNlc3Npb25TdGFydFwiLFxuICAgICAgICBcIm9uUGFuRW5kXCIsXG4gICAgXSksXG4gICAgaW5WaWV3OiBjcmVhdGVEZWZpbml0aW9uKFtcbiAgICAgICAgXCJ3aGlsZUluVmlld1wiLFxuICAgICAgICBcIm9uVmlld3BvcnRFbnRlclwiLFxuICAgICAgICBcIm9uVmlld3BvcnRMZWF2ZVwiLFxuICAgIF0pLFxufTtcbmZ1bmN0aW9uIGxvYWRGZWF0dXJlcyhmZWF0dXJlcykge1xuICAgIGZvciAodmFyIGtleSBpbiBmZWF0dXJlcykge1xuICAgICAgICBpZiAoZmVhdHVyZXNba2V5XSA9PT0gbnVsbClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoa2V5ID09PSBcInByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3JcIikge1xuICAgICAgICAgICAgZmVhdHVyZURlZmluaXRpb25zLnByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3IgPSBmZWF0dXJlc1trZXldO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZmVhdHVyZURlZmluaXRpb25zW2tleV0uQ29tcG9uZW50ID0gZmVhdHVyZXNba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IHsgZmVhdHVyZURlZmluaXRpb25zLCBsb2FkRmVhdHVyZXMgfTtcbiIsInZhciB3YXJuaW5nID0gZnVuY3Rpb24gKCkgeyB9O1xyXG52YXIgaW52YXJpYW50ID0gZnVuY3Rpb24gKCkgeyB9O1xyXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xyXG4gICAgd2FybmluZyA9IGZ1bmN0aW9uIChjaGVjaywgbWVzc2FnZSkge1xyXG4gICAgICAgIGlmICghY2hlY2sgJiYgdHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgaW52YXJpYW50ID0gZnVuY3Rpb24gKGNoZWNrLCBtZXNzYWdlKSB7XHJcbiAgICAgICAgaWYgKCFjaGVjaykge1xyXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxufVxuXG5leHBvcnQgeyBpbnZhcmlhbnQsIHdhcm5pbmcgfTtcbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5cbnZhciBMYXp5Q29udGV4dCA9IGNyZWF0ZUNvbnRleHQoeyBzdHJpY3Q6IGZhbHNlIH0pO1xuXG5leHBvcnQgeyBMYXp5Q29udGV4dCB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vLi4vdXRpbHMvcHJvY2Vzcy5tanMnO1xuaW1wb3J0IHsgZmVhdHVyZURlZmluaXRpb25zIH0gZnJvbSAnLi9kZWZpbml0aW9ucy5tanMnO1xuaW1wb3J0IHsgaW52YXJpYW50IH0gZnJvbSAnaGV5LWxpc3Rlbic7XG5pbXBvcnQgeyBMYXp5Q29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvTGF6eUNvbnRleHQubWpzJztcblxudmFyIGZlYXR1cmVOYW1lcyA9IE9iamVjdC5rZXlzKGZlYXR1cmVEZWZpbml0aW9ucyk7XG52YXIgbnVtRmVhdHVyZXMgPSBmZWF0dXJlTmFtZXMubGVuZ3RoO1xuLyoqXG4gKiBMb2FkIGZlYXR1cmVzIHZpYSByZW5kZXJsZXNzIGNvbXBvbmVudHMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIE1vdGlvblByb3BzLlxuICovXG5mdW5jdGlvbiB1c2VGZWF0dXJlcyhwcm9wcywgdmlzdWFsRWxlbWVudCwgcHJlbG9hZGVkRmVhdHVyZXMpIHtcbiAgICB2YXIgZmVhdHVyZXMgPSBbXTtcbiAgICB2YXIgbGF6eUNvbnRleHQgPSB1c2VDb250ZXh0KExhenlDb250ZXh0KTtcbiAgICBpZiAoIXZpc3VhbEVsZW1lbnQpXG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIC8qKlxuICAgICAqIElmIHdlJ3JlIGluIGRldmVsb3BtZW50IG1vZGUsIGNoZWNrIHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgcmVuZGVyaW5nIGEgbW90aW9uIGNvbXBvbmVudFxuICAgICAqIGFzIGEgY2hpbGQgb2YgTGF6eU1vdGlvbiwgYXMgdGhpcyB3aWxsIGJyZWFrIHRoZSBmaWxlLXNpemUgYmVuZWZpdHMgb2YgdXNpbmcgaXQuXG4gICAgICovXG4gICAgaWYgKGVudiAhPT0gXCJwcm9kdWN0aW9uXCIgJiYgcHJlbG9hZGVkRmVhdHVyZXMgJiYgbGF6eUNvbnRleHQuc3RyaWN0KSB7XG4gICAgICAgIGludmFyaWFudChmYWxzZSwgXCJZb3UgaGF2ZSByZW5kZXJlZCBhIGBtb3Rpb25gIGNvbXBvbmVudCB3aXRoaW4gYSBgTGF6eU1vdGlvbmAgY29tcG9uZW50LiBUaGlzIHdpbGwgYnJlYWsgdHJlZSBzaGFraW5nLiBJbXBvcnQgYW5kIHJlbmRlciBhIGBtYCBjb21wb25lbnQgaW5zdGVhZC5cIik7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtRmVhdHVyZXM7IGkrKykge1xuICAgICAgICB2YXIgbmFtZV8xID0gZmVhdHVyZU5hbWVzW2ldO1xuICAgICAgICB2YXIgX2EgPSBmZWF0dXJlRGVmaW5pdGlvbnNbbmFtZV8xXSwgaXNFbmFibGVkID0gX2EuaXNFbmFibGVkLCBDb21wb25lbnQgPSBfYS5Db21wb25lbnQ7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJdCBtaWdodCBiZSBwb3NzaWJsZSBpbiB0aGUgZnV0dXJlIHRvIHVzZSB0aGlzIG1vbWVudCB0b1xuICAgICAgICAgKiBkeW5hbWljYWxseSByZXF1ZXN0IGZ1bmN0aW9uYWxpdHkuIEluIGluaXRpYWwgdGVzdHMgdGhpc1xuICAgICAgICAgKiB3YXMgcHJvZHVjaW5nIGEgbG90IG9mIGR1cGxpY2F0aW9uIGFtb25nc3QgYnVuZGxlcy5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChpc0VuYWJsZWQocHJvcHMpICYmIENvbXBvbmVudCkge1xuICAgICAgICAgICAgZmVhdHVyZXMucHVzaChSZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgX19hc3NpZ24oeyBrZXk6IG5hbWVfMSB9LCBwcm9wcywgeyB2aXN1YWxFbGVtZW50OiB2aXN1YWxFbGVtZW50IH0pKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZlYXR1cmVzO1xufVxuXG5leHBvcnQgeyB1c2VGZWF0dXJlcyB9O1xuIiwiaW1wb3J0IHsgY3JlYXRlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBAcHVibGljXG4gKi9cbnZhciBNb3Rpb25Db25maWdDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gICAgdHJhbnNmb3JtUGFnZVBvaW50OiBmdW5jdGlvbiAocCkgeyByZXR1cm4gcDsgfSxcbiAgICBpc1N0YXRpYzogZmFsc2UsXG4gICAgcmVkdWNlZE1vdGlvbjogXCJuZXZlclwiLFxufSk7XG5cbmV4cG9ydCB7IE1vdGlvbkNvbmZpZ0NvbnRleHQgfTtcbiIsImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5cbnZhciBNb3Rpb25Db250ZXh0ID0gY3JlYXRlQ29udGV4dCh7fSk7XG5mdW5jdGlvbiB1c2VWaXN1YWxFbGVtZW50Q29udGV4dCgpIHtcbiAgICByZXR1cm4gdXNlQ29udGV4dChNb3Rpb25Db250ZXh0KS52aXN1YWxFbGVtZW50O1xufVxuXG5leHBvcnQgeyBNb3Rpb25Db250ZXh0LCB1c2VWaXN1YWxFbGVtZW50Q29udGV4dCB9O1xuIiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBNb3Rpb25Db25maWdDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9Nb3Rpb25Db25maWdDb250ZXh0Lm1qcyc7XG5pbXBvcnQgeyBpc0Jyb3dzZXIgfSBmcm9tICcuL2lzLWJyb3dzZXIubWpzJztcblxuLy8gRG9lcyB0aGlzIGRldmljZSBwcmVmZXIgcmVkdWNlZCBtb3Rpb24/IFJldHVybnMgYG51bGxgIHNlcnZlci1zaWRlLlxudmFyIHByZWZlcnNSZWR1Y2VkTW90aW9uID0geyBjdXJyZW50OiBudWxsIH07XG52YXIgaGFzRGV0ZWN0ZWQgPSBmYWxzZTtcbmZ1bmN0aW9uIGluaXRQcmVmZXJzUmVkdWNlZE1vdGlvbigpIHtcbiAgICBoYXNEZXRlY3RlZCA9IHRydWU7XG4gICAgaWYgKCFpc0Jyb3dzZXIpXG4gICAgICAgIHJldHVybjtcbiAgICBpZiAod2luZG93Lm1hdGNoTWVkaWEpIHtcbiAgICAgICAgdmFyIG1vdGlvbk1lZGlhUXVlcnlfMSA9IHdpbmRvdy5tYXRjaE1lZGlhKFwiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb24pXCIpO1xuICAgICAgICB2YXIgc2V0UmVkdWNlZE1vdGlvblByZWZlcmVuY2VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIChwcmVmZXJzUmVkdWNlZE1vdGlvbi5jdXJyZW50ID0gbW90aW9uTWVkaWFRdWVyeV8xLm1hdGNoZXMpO1xuICAgICAgICB9O1xuICAgICAgICBtb3Rpb25NZWRpYVF1ZXJ5XzEuYWRkTGlzdGVuZXIoc2V0UmVkdWNlZE1vdGlvblByZWZlcmVuY2VzKTtcbiAgICAgICAgc2V0UmVkdWNlZE1vdGlvblByZWZlcmVuY2VzKCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBwcmVmZXJzUmVkdWNlZE1vdGlvbi5jdXJyZW50ID0gZmFsc2U7XG4gICAgfVxufVxuLyoqXG4gKiBBIGhvb2sgdGhhdCByZXR1cm5zIGB0cnVlYCBpZiB3ZSBzaG91bGQgYmUgdXNpbmcgcmVkdWNlZCBtb3Rpb24gYmFzZWQgb24gdGhlIGN1cnJlbnQgZGV2aWNlJ3MgUmVkdWNlZCBNb3Rpb24gc2V0dGluZy5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIGltcGxlbWVudCBjaGFuZ2VzIHRvIHlvdXIgVUkgYmFzZWQgb24gUmVkdWNlZCBNb3Rpb24uIEZvciBpbnN0YW5jZSwgcmVwbGFjaW5nIG1vdGlvbi1zaWNrbmVzcyBpbmR1Y2luZ1xuICogYHhgL2B5YCBhbmltYXRpb25zIHdpdGggYG9wYWNpdHlgLCBkaXNhYmxpbmcgdGhlIGF1dG9wbGF5IG9mIGJhY2tncm91bmQgdmlkZW9zLCBvciB0dXJuaW5nIG9mZiBwYXJhbGxheCBtb3Rpb24uXG4gKlxuICogSXQgd2lsbCBhY3RpdmVseSByZXNwb25kIHRvIGNoYW5nZXMgYW5kIHJlLXJlbmRlciB5b3VyIGNvbXBvbmVudHMgd2l0aCB0aGUgbGF0ZXN0IHNldHRpbmcuXG4gKlxuICogYGBganN4XG4gKiBleHBvcnQgZnVuY3Rpb24gU2lkZWJhcih7IGlzT3BlbiB9KSB7XG4gKiAgIGNvbnN0IHNob3VsZFJlZHVjZU1vdGlvbiA9IHVzZVJlZHVjZWRNb3Rpb24oKVxuICogICBjb25zdCBjbG9zZWRYID0gc2hvdWxkUmVkdWNlTW90aW9uID8gMCA6IFwiLTEwMCVcIlxuICpcbiAqICAgcmV0dXJuIChcbiAqICAgICA8bW90aW9uLmRpdiBhbmltYXRlPXt7XG4gKiAgICAgICBvcGFjaXR5OiBpc09wZW4gPyAxIDogMCxcbiAqICAgICAgIHg6IGlzT3BlbiA/IDAgOiBjbG9zZWRYXG4gKiAgICAgfX0gLz5cbiAqICAgKVxuICogfVxuICogYGBgXG4gKlxuICogQHJldHVybiBib29sZWFuXG4gKlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiB1c2VSZWR1Y2VkTW90aW9uKCkge1xuICAgIC8qKlxuICAgICAqIExhenkgaW5pdGlhbGlzYXRpb24gb2YgcHJlZmVyc1JlZHVjZWRNb3Rpb25cbiAgICAgKi9cbiAgICAhaGFzRGV0ZWN0ZWQgJiYgaW5pdFByZWZlcnNSZWR1Y2VkTW90aW9uKCk7XG4gICAgdmFyIF9hID0gX19yZWFkKHVzZVN0YXRlKHByZWZlcnNSZWR1Y2VkTW90aW9uLmN1cnJlbnQpLCAxKSwgc2hvdWxkUmVkdWNlTW90aW9uID0gX2FbMF07XG4gICAgLyoqXG4gICAgICogVE9ETyBTZWUgaWYgcGVvcGxlIG1pc3MgYXV0b21hdGljYWxseSB1cGRhdGluZyBzaG91bGRSZWR1Y2VNb3Rpb24gc2V0dGluZ1xuICAgICAqL1xuICAgIHJldHVybiBzaG91bGRSZWR1Y2VNb3Rpb247XG59XG5mdW5jdGlvbiB1c2VSZWR1Y2VkTW90aW9uQ29uZmlnKCkge1xuICAgIHZhciByZWR1Y2VkTW90aW9uUHJlZmVyZW5jZSA9IHVzZVJlZHVjZWRNb3Rpb24oKTtcbiAgICB2YXIgcmVkdWNlZE1vdGlvbiA9IHVzZUNvbnRleHQoTW90aW9uQ29uZmlnQ29udGV4dCkucmVkdWNlZE1vdGlvbjtcbiAgICBpZiAocmVkdWNlZE1vdGlvbiA9PT0gXCJuZXZlclwiKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSBpZiAocmVkdWNlZE1vdGlvbiA9PT0gXCJhbHdheXNcIikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiByZWR1Y2VkTW90aW9uUHJlZmVyZW5jZTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IHVzZVJlZHVjZWRNb3Rpb24sIHVzZVJlZHVjZWRNb3Rpb25Db25maWcgfTtcbiIsImltcG9ydCB7IHVzZUNvbnRleHQsIHVzZVJlZiwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgUHJlc2VuY2VDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9QcmVzZW5jZUNvbnRleHQubWpzJztcbmltcG9ydCB7IHVzZVZpc3VhbEVsZW1lbnRDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9Nb3Rpb25Db250ZXh0L2luZGV4Lm1qcyc7XG5pbXBvcnQgeyB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvdXNlLWlzb21vcnBoaWMtZWZmZWN0Lm1qcyc7XG5pbXBvcnQgeyBMYXp5Q29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvTGF6eUNvbnRleHQubWpzJztcbmltcG9ydCB7IHVzZVJlZHVjZWRNb3Rpb25Db25maWcgfSBmcm9tICcuLi8uLi91dGlscy91c2UtcmVkdWNlZC1tb3Rpb24ubWpzJztcblxuZnVuY3Rpb24gdXNlVmlzdWFsRWxlbWVudChDb21wb25lbnQsIHZpc3VhbFN0YXRlLCBwcm9wcywgY3JlYXRlVmlzdWFsRWxlbWVudCkge1xuICAgIHZhciBsYXp5Q29udGV4dCA9IHVzZUNvbnRleHQoTGF6eUNvbnRleHQpO1xuICAgIHZhciBwYXJlbnQgPSB1c2VWaXN1YWxFbGVtZW50Q29udGV4dCgpO1xuICAgIHZhciBwcmVzZW5jZUNvbnRleHQgPSB1c2VDb250ZXh0KFByZXNlbmNlQ29udGV4dCk7XG4gICAgdmFyIHNob3VsZFJlZHVjZU1vdGlvbiA9IHVzZVJlZHVjZWRNb3Rpb25Db25maWcoKTtcbiAgICB2YXIgdmlzdWFsRWxlbWVudFJlZiA9IHVzZVJlZih1bmRlZmluZWQpO1xuICAgIC8qKlxuICAgICAqIElmIHdlIGhhdmVuJ3QgcHJlbG9hZGVkIGEgcmVuZGVyZXIsIGNoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIG9uZSBsYXp5LWxvYWRlZFxuICAgICAqL1xuICAgIGlmICghY3JlYXRlVmlzdWFsRWxlbWVudClcbiAgICAgICAgY3JlYXRlVmlzdWFsRWxlbWVudCA9IGxhenlDb250ZXh0LnJlbmRlcmVyO1xuICAgIGlmICghdmlzdWFsRWxlbWVudFJlZi5jdXJyZW50ICYmIGNyZWF0ZVZpc3VhbEVsZW1lbnQpIHtcbiAgICAgICAgdmlzdWFsRWxlbWVudFJlZi5jdXJyZW50ID0gY3JlYXRlVmlzdWFsRWxlbWVudChDb21wb25lbnQsIHtcbiAgICAgICAgICAgIHZpc3VhbFN0YXRlOiB2aXN1YWxTdGF0ZSxcbiAgICAgICAgICAgIHBhcmVudDogcGFyZW50LFxuICAgICAgICAgICAgcHJvcHM6IHByb3BzLFxuICAgICAgICAgICAgcHJlc2VuY2VJZDogcHJlc2VuY2VDb250ZXh0ID09PSBudWxsIHx8IHByZXNlbmNlQ29udGV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJlc2VuY2VDb250ZXh0LmlkLFxuICAgICAgICAgICAgYmxvY2tJbml0aWFsQW5pbWF0aW9uOiAocHJlc2VuY2VDb250ZXh0ID09PSBudWxsIHx8IHByZXNlbmNlQ29udGV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJlc2VuY2VDb250ZXh0LmluaXRpYWwpID09PSBmYWxzZSxcbiAgICAgICAgICAgIHNob3VsZFJlZHVjZU1vdGlvbjogc2hvdWxkUmVkdWNlTW90aW9uLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdmFyIHZpc3VhbEVsZW1lbnQgPSB2aXN1YWxFbGVtZW50UmVmLmN1cnJlbnQ7XG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZpc3VhbEVsZW1lbnQgPT09IG51bGwgfHwgdmlzdWFsRWxlbWVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmlzdWFsRWxlbWVudC5zeW5jUmVuZGVyKCk7XG4gICAgfSk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAoX2EgPSB2aXN1YWxFbGVtZW50ID09PSBudWxsIHx8IHZpc3VhbEVsZW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hbmltYXRlQ2hhbmdlcygpO1xuICAgIH0pO1xuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoZnVuY3Rpb24gKCkgeyByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gdmlzdWFsRWxlbWVudCA9PT0gbnVsbCB8fCB2aXN1YWxFbGVtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2aXN1YWxFbGVtZW50Lm5vdGlmeVVubW91bnQoKTsgfTsgfSwgW10pO1xuICAgIHJldHVybiB2aXN1YWxFbGVtZW50O1xufVxuXG5leHBvcnQgeyB1c2VWaXN1YWxFbGVtZW50IH07XG4iLCJmdW5jdGlvbiBpc1JlZk9iamVjdChyZWYpIHtcbiAgICByZXR1cm4gKHR5cGVvZiByZWYgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHJlZiwgXCJjdXJyZW50XCIpKTtcbn1cblxuZXhwb3J0IHsgaXNSZWZPYmplY3QgfTtcbiIsIi8qKlxuICogRGVjaWRlcyBpZiB0aGUgc3VwcGxpZWQgdmFyaWFibGUgaXMgYW4gYXJyYXkgb2YgdmFyaWFudCBsYWJlbHNcbiAqL1xuZnVuY3Rpb24gaXNWYXJpYW50TGFiZWxzKHYpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2KTtcbn1cbi8qKlxuICogRGVjaWRlcyBpZiB0aGUgc3VwcGxpZWQgdmFyaWFibGUgaXMgdmFyaWFudCBsYWJlbFxuICovXG5mdW5jdGlvbiBpc1ZhcmlhbnRMYWJlbCh2KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSBcInN0cmluZ1wiIHx8IGlzVmFyaWFudExhYmVscyh2KTtcbn1cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgbGF0ZXN0IHN0YXRlIG9mIGV2ZXJ5IE1vdGlvblZhbHVlIG9uIGEgVmlzdWFsRWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRDdXJyZW50KHZpc3VhbEVsZW1lbnQpIHtcbiAgICB2YXIgY3VycmVudCA9IHt9O1xuICAgIHZpc3VhbEVsZW1lbnQuZm9yRWFjaFZhbHVlKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7IHJldHVybiAoY3VycmVudFtrZXldID0gdmFsdWUuZ2V0KCkpOyB9KTtcbiAgICByZXR1cm4gY3VycmVudDtcbn1cbi8qKlxuICogQ3JlYXRlcyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgbGF0ZXN0IHZlbG9jaXR5IG9mIGV2ZXJ5IE1vdGlvblZhbHVlIG9uIGEgVmlzdWFsRWxlbWVudFxuICovXG5mdW5jdGlvbiBnZXRWZWxvY2l0eSh2aXN1YWxFbGVtZW50KSB7XG4gICAgdmFyIHZlbG9jaXR5ID0ge307XG4gICAgdmlzdWFsRWxlbWVudC5mb3JFYWNoVmFsdWUoZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHsgcmV0dXJuICh2ZWxvY2l0eVtrZXldID0gdmFsdWUuZ2V0VmVsb2NpdHkoKSk7IH0pO1xuICAgIHJldHVybiB2ZWxvY2l0eTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVWYXJpYW50RnJvbVByb3BzKHByb3BzLCBkZWZpbml0aW9uLCBjdXN0b20sIGN1cnJlbnRWYWx1ZXMsIGN1cnJlbnRWZWxvY2l0eSkge1xuICAgIHZhciBfYTtcbiAgICBpZiAoY3VycmVudFZhbHVlcyA9PT0gdm9pZCAwKSB7IGN1cnJlbnRWYWx1ZXMgPSB7fTsgfVxuICAgIGlmIChjdXJyZW50VmVsb2NpdHkgPT09IHZvaWQgMCkgeyBjdXJyZW50VmVsb2NpdHkgPSB7fTsgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSB2YXJpYW50IGRlZmluaXRpb24gaXMgYSBmdW5jdGlvbiwgcmVzb2x2ZS5cbiAgICAgKi9cbiAgICBpZiAodHlwZW9mIGRlZmluaXRpb24gPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBkZWZpbml0aW9uID0gZGVmaW5pdGlvbihjdXN0b20gIT09IG51bGwgJiYgY3VzdG9tICE9PSB2b2lkIDAgPyBjdXN0b20gOiBwcm9wcy5jdXN0b20sIGN1cnJlbnRWYWx1ZXMsIGN1cnJlbnRWZWxvY2l0eSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHRoZSB2YXJpYW50IGRlZmluaXRpb24gaXMgYSB2YXJpYW50IGxhYmVsLCBvclxuICAgICAqIHRoZSBmdW5jdGlvbiByZXR1cm5lZCBhIHZhcmlhbnQgbGFiZWwsIHJlc29sdmUuXG4gICAgICovXG4gICAgaWYgKHR5cGVvZiBkZWZpbml0aW9uID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGRlZmluaXRpb24gPSAoX2EgPSBwcm9wcy52YXJpYW50cykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW2RlZmluaXRpb25dO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBdCB0aGlzIHBvaW50IHdlJ3ZlIHJlc29sdmVkIGJvdGggZnVuY3Rpb25zIGFuZCB2YXJpYW50IGxhYmVscyxcbiAgICAgKiBidXQgdGhlIHJlc29sdmVkIHZhcmlhbnQgbGFiZWwgbWlnaHQgaXRzZWxmIGhhdmUgYmVlbiBhIGZ1bmN0aW9uLlxuICAgICAqIElmIHNvLCByZXNvbHZlLiBUaGlzIGNhbiBvbmx5IGhhdmUgcmV0dXJuZWQgYSB2YWxpZCB0YXJnZXQgb2JqZWN0LlxuICAgICAqL1xuICAgIGlmICh0eXBlb2YgZGVmaW5pdGlvbiA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGRlZmluaXRpb24gPSBkZWZpbml0aW9uKGN1c3RvbSAhPT0gbnVsbCAmJiBjdXN0b20gIT09IHZvaWQgMCA/IGN1c3RvbSA6IHByb3BzLmN1c3RvbSwgY3VycmVudFZhbHVlcywgY3VycmVudFZlbG9jaXR5KTtcbiAgICB9XG4gICAgcmV0dXJuIGRlZmluaXRpb247XG59XG5mdW5jdGlvbiByZXNvbHZlVmFyaWFudCh2aXN1YWxFbGVtZW50LCBkZWZpbml0aW9uLCBjdXN0b20pIHtcbiAgICB2YXIgcHJvcHMgPSB2aXN1YWxFbGVtZW50LmdldFByb3BzKCk7XG4gICAgcmV0dXJuIHJlc29sdmVWYXJpYW50RnJvbVByb3BzKHByb3BzLCBkZWZpbml0aW9uLCBjdXN0b20gIT09IG51bGwgJiYgY3VzdG9tICE9PSB2b2lkIDAgPyBjdXN0b20gOiBwcm9wcy5jdXN0b20sIGdldEN1cnJlbnQodmlzdWFsRWxlbWVudCksIGdldFZlbG9jaXR5KHZpc3VhbEVsZW1lbnQpKTtcbn1cbmZ1bmN0aW9uIGNoZWNrSWZDb250cm9sbGluZ1ZhcmlhbnRzKHByb3BzKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAodHlwZW9mICgoX2EgPSBwcm9wcy5hbmltYXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc3RhcnQpID09PSBcImZ1bmN0aW9uXCIgfHxcbiAgICAgICAgaXNWYXJpYW50TGFiZWwocHJvcHMuaW5pdGlhbCkgfHxcbiAgICAgICAgaXNWYXJpYW50TGFiZWwocHJvcHMuYW5pbWF0ZSkgfHxcbiAgICAgICAgaXNWYXJpYW50TGFiZWwocHJvcHMud2hpbGVIb3ZlcikgfHxcbiAgICAgICAgaXNWYXJpYW50TGFiZWwocHJvcHMud2hpbGVEcmFnKSB8fFxuICAgICAgICBpc1ZhcmlhbnRMYWJlbChwcm9wcy53aGlsZVRhcCkgfHxcbiAgICAgICAgaXNWYXJpYW50TGFiZWwocHJvcHMud2hpbGVGb2N1cykgfHxcbiAgICAgICAgaXNWYXJpYW50TGFiZWwocHJvcHMuZXhpdCkpO1xufVxuZnVuY3Rpb24gY2hlY2tJZlZhcmlhbnROb2RlKHByb3BzKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4oY2hlY2tJZkNvbnRyb2xsaW5nVmFyaWFudHMocHJvcHMpIHx8IHByb3BzLnZhcmlhbnRzKTtcbn1cblxuZXhwb3J0IHsgY2hlY2tJZkNvbnRyb2xsaW5nVmFyaWFudHMsIGNoZWNrSWZWYXJpYW50Tm9kZSwgaXNWYXJpYW50TGFiZWwsIGlzVmFyaWFudExhYmVscywgcmVzb2x2ZVZhcmlhbnQsIHJlc29sdmVWYXJpYW50RnJvbVByb3BzIH07XG4iLCJpbXBvcnQgeyB1c2VNZW1vLCB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTW90aW9uQ29udGV4dCB9IGZyb20gJy4vaW5kZXgubWpzJztcbmltcG9ydCB7IGdldEN1cnJlbnRUcmVlVmFyaWFudHMgfSBmcm9tICcuL3V0aWxzLm1qcyc7XG5cbmZ1bmN0aW9uIHVzZUNyZWF0ZU1vdGlvbkNvbnRleHQocHJvcHMpIHtcbiAgICB2YXIgX2EgPSBnZXRDdXJyZW50VHJlZVZhcmlhbnRzKHByb3BzLCB1c2VDb250ZXh0KE1vdGlvbkNvbnRleHQpKSwgaW5pdGlhbCA9IF9hLmluaXRpYWwsIGFuaW1hdGUgPSBfYS5hbmltYXRlO1xuICAgIHJldHVybiB1c2VNZW1vKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7IGluaXRpYWw6IGluaXRpYWwsIGFuaW1hdGU6IGFuaW1hdGUgfSk7IH0sIFt2YXJpYW50TGFiZWxzQXNEZXBlbmRlbmN5KGluaXRpYWwpLCB2YXJpYW50TGFiZWxzQXNEZXBlbmRlbmN5KGFuaW1hdGUpXSk7XG59XG5mdW5jdGlvbiB2YXJpYW50TGFiZWxzQXNEZXBlbmRlbmN5KHByb3ApIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwcm9wKSA/IHByb3Auam9pbihcIiBcIikgOiBwcm9wO1xufVxuXG5leHBvcnQgeyB1c2VDcmVhdGVNb3Rpb25Db250ZXh0IH07XG4iLCIvKipcbiAqIFRoaXMgc2hvdWxkIG9ubHkgZXZlciBiZSBtb2RpZmllZCBvbiB0aGUgY2xpZW50IG90aGVyd2lzZSBpdCdsbFxuICogcGVyc2lzdCB0aHJvdWdoIHNlcnZlciByZXF1ZXN0cy4gSWYgd2UgbmVlZCBpbnN0YW5jZWQgc3RhdGVzIHdlXG4gKiBjb3VsZCBsYXp5LWluaXQgdmlhIHJvb3QuXG4gKi9cbnZhciBnbG9iYWxQcm9qZWN0aW9uU3RhdGUgPSB7XG4gICAgLyoqXG4gICAgICogR2xvYmFsIGZsYWcgYXMgdG8gd2hldGhlciB0aGUgdHJlZSBoYXMgYW5pbWF0ZWQgc2luY2UgdGhlIGxhc3QgdGltZVxuICAgICAqIHdlIHJlc2l6ZWQgdGhlIHdpbmRvd1xuICAgICAqL1xuICAgIGhhc0FuaW1hdGVkU2luY2VSZXNpemU6IHRydWUsXG4gICAgLyoqXG4gICAgICogV2Ugc2V0IHRoaXMgdG8gdHJ1ZSBvbmNlLCBvbiB0aGUgZmlyc3QgdXBkYXRlLiBBbnkgbm9kZXMgYWRkZWQgdG8gdGhlIHRyZWUgYmV5b25kIHRoYXRcbiAgICAgKiB1cGRhdGUgd2lsbCBiZSBnaXZlbiBhIGBkYXRhLXByb2plY3Rpb24taWRgIGF0dHJpYnV0ZS5cbiAgICAgKi9cbiAgICBoYXNFdmVyVXBkYXRlZDogZmFsc2UsXG59O1xuXG5leHBvcnQgeyBnbG9iYWxQcm9qZWN0aW9uU3RhdGUgfTtcbiIsImltcG9ydCB7IHVzZUNvbnN0YW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvdXNlLWNvbnN0YW50Lm1qcyc7XG5pbXBvcnQgeyBnbG9iYWxQcm9qZWN0aW9uU3RhdGUgfSBmcm9tICcuL3N0YXRlLm1qcyc7XG5cbnZhciBpZCA9IDE7XG5mdW5jdGlvbiB1c2VQcm9qZWN0aW9uSWQoKSB7XG4gICAgcmV0dXJuIHVzZUNvbnN0YW50KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKGdsb2JhbFByb2plY3Rpb25TdGF0ZS5oYXNFdmVyVXBkYXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIGlkKys7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cblxuZXhwb3J0IHsgdXNlUHJvamVjdGlvbklkIH07XG4iLCJpbXBvcnQgeyBjcmVhdGVDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIEludGVybmFsLCBleHBvcnRlZCBvbmx5IGZvciB1c2FnZSBpbiBGcmFtZXJcbiAqL1xudmFyIFN3aXRjaExheW91dEdyb3VwQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe30pO1xuXG5leHBvcnQgeyBTd2l0Y2hMYXlvdXRHcm91cENvbnRleHQgfTtcbiIsImltcG9ydCB7IF9fZXh0ZW5kcyB9IGZyb20gJ3RzbGliJztcbmltcG9ydCBSZWFjdF9fZGVmYXVsdCBmcm9tICdyZWFjdCc7XG5cbnZhciBWaXN1YWxFbGVtZW50SGFuZGxlciA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoVmlzdWFsRWxlbWVudEhhbmRsZXIsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gVmlzdWFsRWxlbWVudEhhbmRsZXIoKSB7XG4gICAgICAgIHJldHVybiBfc3VwZXIgIT09IG51bGwgJiYgX3N1cGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykgfHwgdGhpcztcbiAgICB9XG4gICAgLyoqXG4gICAgICogVXBkYXRlIHZpc3VhbCBlbGVtZW50IHByb3BzIGFzIHNvb24gYXMgd2Uga25vdyB0aGlzIHVwZGF0ZSBpcyBnb2luZyB0byBiZSBjb21taXRlZC5cbiAgICAgKi9cbiAgICBWaXN1YWxFbGVtZW50SGFuZGxlci5wcm90b3R5cGUuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlUHJvcHMoKTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBWaXN1YWxFbGVtZW50SGFuZGxlci5wcm90b3R5cGUuY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgIFZpc3VhbEVsZW1lbnRIYW5kbGVyLnByb3RvdHlwZS51cGRhdGVQcm9wcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hID0gdGhpcy5wcm9wcywgdmlzdWFsRWxlbWVudCA9IF9hLnZpc3VhbEVsZW1lbnQsIHByb3BzID0gX2EucHJvcHM7XG4gICAgICAgIGlmICh2aXN1YWxFbGVtZW50KVxuICAgICAgICAgICAgdmlzdWFsRWxlbWVudC5zZXRQcm9wcyhwcm9wcyk7XG4gICAgfTtcbiAgICBWaXN1YWxFbGVtZW50SGFuZGxlci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wcm9wcy5jaGlsZHJlbjtcbiAgICB9O1xuICAgIHJldHVybiBWaXN1YWxFbGVtZW50SGFuZGxlcjtcbn0oUmVhY3RfX2RlZmF1bHQuQ29tcG9uZW50KSk7XG5cbmV4cG9ydCB7IFZpc3VhbEVsZW1lbnRIYW5kbGVyIH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGZvcndhcmRSZWYsIHVzZUNvbnRleHQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VGZWF0dXJlcyB9IGZyb20gJy4vZmVhdHVyZXMvdXNlLWZlYXR1cmVzLm1qcyc7XG5pbXBvcnQgeyBNb3Rpb25Db25maWdDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9Nb3Rpb25Db25maWdDb250ZXh0Lm1qcyc7XG5pbXBvcnQgeyBNb3Rpb25Db250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9Nb3Rpb25Db250ZXh0L2luZGV4Lm1qcyc7XG5pbXBvcnQgeyB1c2VWaXN1YWxFbGVtZW50IH0gZnJvbSAnLi91dGlscy91c2UtdmlzdWFsLWVsZW1lbnQubWpzJztcbmltcG9ydCB7IHVzZU1vdGlvblJlZiB9IGZyb20gJy4vdXRpbHMvdXNlLW1vdGlvbi1yZWYubWpzJztcbmltcG9ydCB7IHVzZUNyZWF0ZU1vdGlvbkNvbnRleHQgfSBmcm9tICcuLi9jb250ZXh0L01vdGlvbkNvbnRleHQvY3JlYXRlLm1qcyc7XG5pbXBvcnQgeyBsb2FkRmVhdHVyZXMsIGZlYXR1cmVEZWZpbml0aW9ucyB9IGZyb20gJy4vZmVhdHVyZXMvZGVmaW5pdGlvbnMubWpzJztcbmltcG9ydCB7IGlzQnJvd3NlciB9IGZyb20gJy4uL3V0aWxzL2lzLWJyb3dzZXIubWpzJztcbmltcG9ydCB7IHVzZVByb2plY3Rpb25JZCB9IGZyb20gJy4uL3Byb2plY3Rpb24vbm9kZS9pZC5tanMnO1xuaW1wb3J0IHsgTGF5b3V0R3JvdXBDb250ZXh0IH0gZnJvbSAnLi4vY29udGV4dC9MYXlvdXRHcm91cENvbnRleHQubWpzJztcbmltcG9ydCB7IHVzZVByb2plY3Rpb24gfSBmcm9tICcuL2ZlYXR1cmVzL3VzZS1wcm9qZWN0aW9uLm1qcyc7XG5pbXBvcnQgeyBWaXN1YWxFbGVtZW50SGFuZGxlciB9IGZyb20gJy4vdXRpbHMvVmlzdWFsRWxlbWVudEhhbmRsZXIubWpzJztcblxuLyoqXG4gKiBDcmVhdGUgYSBgbW90aW9uYCBjb21wb25lbnQuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBhY2NlcHRzIGEgQ29tcG9uZW50IGFyZ3VtZW50LCB3aGljaCBjYW4gYmUgZWl0aGVyIGEgc3RyaW5nIChpZSBcImRpdlwiXG4gKiBmb3IgYG1vdGlvbi5kaXZgKSwgb3IgYW4gYWN0dWFsIFJlYWN0IGNvbXBvbmVudC5cbiAqXG4gKiBBbG9uZ3NpZGUgdGhpcyBpcyBhIGNvbmZpZyBvcHRpb24gd2hpY2ggcHJvdmlkZXMgYSB3YXkgb2YgcmVuZGVyaW5nIHRoZSBwcm92aWRlZFxuICogY29tcG9uZW50IFwib2ZmbGluZVwiLCBvciBvdXRzaWRlIHRoZSBSZWFjdCByZW5kZXIgY3ljbGUuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU1vdGlvbkNvbXBvbmVudChfYSkge1xuICAgIHZhciBwcmVsb2FkZWRGZWF0dXJlcyA9IF9hLnByZWxvYWRlZEZlYXR1cmVzLCBjcmVhdGVWaXN1YWxFbGVtZW50ID0gX2EuY3JlYXRlVmlzdWFsRWxlbWVudCwgcHJvamVjdGlvbk5vZGVDb25zdHJ1Y3RvciA9IF9hLnByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3IsIHVzZVJlbmRlciA9IF9hLnVzZVJlbmRlciwgdXNlVmlzdWFsU3RhdGUgPSBfYS51c2VWaXN1YWxTdGF0ZSwgQ29tcG9uZW50ID0gX2EuQ29tcG9uZW50O1xuICAgIHByZWxvYWRlZEZlYXR1cmVzICYmIGxvYWRGZWF0dXJlcyhwcmVsb2FkZWRGZWF0dXJlcyk7XG4gICAgZnVuY3Rpb24gTW90aW9uQ29tcG9uZW50KHByb3BzLCBleHRlcm5hbFJlZikge1xuICAgICAgICB2YXIgbGF5b3V0SWQgPSB1c2VMYXlvdXRJZChwcm9wcyk7XG4gICAgICAgIHByb3BzID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHByb3BzKSwgeyBsYXlvdXRJZDogbGF5b3V0SWQgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiB3ZSdyZSByZW5kZXJpbmcgaW4gYSBzdGF0aWMgZW52aXJvbm1lbnQsIHdlIG9ubHkgdmlzdWFsbHkgdXBkYXRlIHRoZSBjb21wb25lbnRcbiAgICAgICAgICogYXMgYSByZXN1bHQgb2YgYSBSZWFjdC1yZXJlbmRlciByYXRoZXIgdGhhbiBpbnRlcmFjdGlvbnMgb3IgYW5pbWF0aW9ucy4gVGhpc1xuICAgICAgICAgKiBtZWFucyB3ZSBkb24ndCBuZWVkIHRvIGxvYWQgYWRkaXRpb25hbCBtZW1vcnkgc3RydWN0dXJlcyBsaWtlIFZpc3VhbEVsZW1lbnQsXG4gICAgICAgICAqIG9yIGFueSBnZXN0dXJlL2FuaW1hdGlvbiBmZWF0dXJlcy5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBjb25maWcgPSB1c2VDb250ZXh0KE1vdGlvbkNvbmZpZ0NvbnRleHQpO1xuICAgICAgICB2YXIgZmVhdHVyZXMgPSBudWxsO1xuICAgICAgICB2YXIgY29udGV4dCA9IHVzZUNyZWF0ZU1vdGlvbkNvbnRleHQocHJvcHMpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQ3JlYXRlIGEgdW5pcXVlIHByb2plY3Rpb24gSUQgZm9yIHRoaXMgY29tcG9uZW50LiBJZiBhIG5ldyBjb21wb25lbnQgaXMgYWRkZWRcbiAgICAgICAgICogZHVyaW5nIGEgbGF5b3V0IGFuaW1hdGlvbiB3ZSdsbCB1c2UgdGhpcyB0byBxdWVyeSB0aGUgRE9NIGFuZCBoeWRyYXRlIGl0cyByZWYgZWFybHksIGFsbG93aW5nXG4gICAgICAgICAqIHVzIHRvIG1lYXN1cmUgaXQgYXMgc29vbiBhcyBhbnkgbGF5b3V0IGVmZmVjdCBmbHVzaGVzIHBlbmRpbmcgbGF5b3V0IGFuaW1hdGlvbnMuXG4gICAgICAgICAqXG4gICAgICAgICAqIFBlcmZvcm1hbmNlIG5vdGU6IEl0J2QgYmUgYmV0dGVyIG5vdCB0byBoYXZlIHRvIHNlYXJjaCB0aGUgRE9NIGZvciB0aGVzZSBlbGVtZW50cy5cbiAgICAgICAgICogRm9yIG5ld2x5LWVudGVyaW5nIGNvbXBvbmVudHMgaXQgY291bGQgYmUgZW5vdWdoIHRvIG9ubHkgY29ycmVjdCB0cmVlU2NhbGUsIGluIHdoaWNoXG4gICAgICAgICAqIGNhc2Ugd2UgY291bGQgbW91bnQgaW4gYSBzY2FsZS1jb3JyZWN0aW9uIG1vZGUuIFRoaXMgd291bGRuJ3QgYmUgZW5vdWdoIGZvclxuICAgICAgICAgKiBzaGFyZWQgZWxlbWVudCB0cmFuc2l0aW9ucyBob3dldmVyLiBQZXJoYXBzIGZvciB0aG9zZSB3ZSBjb3VsZCByZXZlcnQgdG8gYSByb290IG5vZGVcbiAgICAgICAgICogdGhhdCBnZXRzIGZvcmNlUmVuZGVyZWQgYW5kIGxheW91dCBhbmltYXRpb25zIGFyZSB0cmlnZ2VyZWQgb24gaXRzIGxheW91dCBlZmZlY3QuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgcHJvamVjdGlvbklkID0gY29uZmlnLmlzU3RhdGljID8gdW5kZWZpbmVkIDogdXNlUHJvamVjdGlvbklkKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHZpc3VhbFN0YXRlID0gdXNlVmlzdWFsU3RhdGUocHJvcHMsIGNvbmZpZy5pc1N0YXRpYyk7XG4gICAgICAgIGlmICghY29uZmlnLmlzU3RhdGljICYmIGlzQnJvd3Nlcikge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBDcmVhdGUgYSBWaXN1YWxFbGVtZW50IGZvciB0aGlzIGNvbXBvbmVudC4gQSBWaXN1YWxFbGVtZW50IHByb3ZpZGVzIGEgY29tbW9uXG4gICAgICAgICAgICAgKiBpbnRlcmZhY2UgdG8gcmVuZGVyZXItc3BlY2lmaWMgQVBJcyAoaWUgRE9NL1RocmVlLmpzIGV0YykgYXMgd2VsbCBhc1xuICAgICAgICAgICAgICogcHJvdmlkaW5nIGEgd2F5IG9mIHJlbmRlcmluZyB0byB0aGVzZSBBUElzIG91dHNpZGUgb2YgdGhlIFJlYWN0IHJlbmRlciBsb29wXG4gICAgICAgICAgICAgKiBmb3IgbW9yZSBwZXJmb3JtYW50IGFuaW1hdGlvbnMgYW5kIGludGVyYWN0aW9uc1xuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjb250ZXh0LnZpc3VhbEVsZW1lbnQgPSB1c2VWaXN1YWxFbGVtZW50KENvbXBvbmVudCwgdmlzdWFsU3RhdGUsIF9fYXNzaWduKF9fYXNzaWduKHt9LCBjb25maWcpLCBwcm9wcyksIGNyZWF0ZVZpc3VhbEVsZW1lbnQpO1xuICAgICAgICAgICAgdXNlUHJvamVjdGlvbihwcm9qZWN0aW9uSWQsIHByb3BzLCBjb250ZXh0LnZpc3VhbEVsZW1lbnQsIHByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3IgfHxcbiAgICAgICAgICAgICAgICBmZWF0dXJlRGVmaW5pdGlvbnMucHJvamVjdGlvbk5vZGVDb25zdHJ1Y3Rvcik7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIExvYWQgTW90aW9uIGdlc3R1cmUgYW5kIGFuaW1hdGlvbiBmZWF0dXJlcy4gVGhlc2UgYXJlIHJlbmRlcmVkIGFzIHJlbmRlcmxlc3NcbiAgICAgICAgICAgICAqIGNvbXBvbmVudHMgc28gZWFjaCBmZWF0dXJlIGNhbiBvcHRpb25hbGx5IG1ha2UgdXNlIG9mIFJlYWN0IGxpZmVjeWNsZSBtZXRob2RzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBmZWF0dXJlcyA9IHVzZUZlYXR1cmVzKHByb3BzLCBjb250ZXh0LnZpc3VhbEVsZW1lbnQsIHByZWxvYWRlZEZlYXR1cmVzKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIG1vdW50IG9yZGVyIGFuZCBoaWVyYXJjaHkgaXMgc3BlY2lmaWMgdG8gZW5zdXJlIG91ciBlbGVtZW50IHJlZlxuICAgICAgICAgKiBpcyBoeWRyYXRlZCBieSB0aGUgdGltZSBmZWF0dXJlcyBmaXJlIHRoZWlyIGVmZmVjdHMuXG4gICAgICAgICAqL1xuICAgICAgICByZXR1cm4gKFJlYWN0LmNyZWF0ZUVsZW1lbnQoVmlzdWFsRWxlbWVudEhhbmRsZXIsIHsgdmlzdWFsRWxlbWVudDogY29udGV4dC52aXN1YWxFbGVtZW50LCBwcm9wczogX19hc3NpZ24oX19hc3NpZ24oe30sIGNvbmZpZyksIHByb3BzKSB9LFxuICAgICAgICAgICAgZmVhdHVyZXMsXG4gICAgICAgICAgICBSZWFjdC5jcmVhdGVFbGVtZW50KE1vdGlvbkNvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGNvbnRleHQgfSwgdXNlUmVuZGVyKENvbXBvbmVudCwgcHJvcHMsIHByb2plY3Rpb25JZCwgdXNlTW90aW9uUmVmKHZpc3VhbFN0YXRlLCBjb250ZXh0LnZpc3VhbEVsZW1lbnQsIGV4dGVybmFsUmVmKSwgdmlzdWFsU3RhdGUsIGNvbmZpZy5pc1N0YXRpYywgY29udGV4dC52aXN1YWxFbGVtZW50KSkpKTtcbiAgICB9XG4gICAgcmV0dXJuIGZvcndhcmRSZWYoTW90aW9uQ29tcG9uZW50KTtcbn1cbmZ1bmN0aW9uIHVzZUxheW91dElkKF9hKSB7XG4gICAgdmFyIF9iO1xuICAgIHZhciBsYXlvdXRJZCA9IF9hLmxheW91dElkO1xuICAgIHZhciBsYXlvdXRHcm91cElkID0gKF9iID0gdXNlQ29udGV4dChMYXlvdXRHcm91cENvbnRleHQpKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaWQ7XG4gICAgcmV0dXJuIGxheW91dEdyb3VwSWQgJiYgbGF5b3V0SWQgIT09IHVuZGVmaW5lZFxuICAgICAgICA/IGxheW91dEdyb3VwSWQgKyBcIi1cIiArIGxheW91dElkXG4gICAgICAgIDogbGF5b3V0SWQ7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZU1vdGlvbkNvbXBvbmVudCB9O1xuIiwiaW1wb3J0IHsgY2hlY2tJZkNvbnRyb2xsaW5nVmFyaWFudHMsIGlzVmFyaWFudExhYmVsIH0gZnJvbSAnLi4vLi4vcmVuZGVyL3V0aWxzL3ZhcmlhbnRzLm1qcyc7XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRUcmVlVmFyaWFudHMocHJvcHMsIGNvbnRleHQpIHtcbiAgICBpZiAoY2hlY2tJZkNvbnRyb2xsaW5nVmFyaWFudHMocHJvcHMpKSB7XG4gICAgICAgIHZhciBpbml0aWFsID0gcHJvcHMuaW5pdGlhbCwgYW5pbWF0ZSA9IHByb3BzLmFuaW1hdGU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpbml0aWFsOiBpbml0aWFsID09PSBmYWxzZSB8fCBpc1ZhcmlhbnRMYWJlbChpbml0aWFsKVxuICAgICAgICAgICAgICAgID8gaW5pdGlhbFxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYW5pbWF0ZTogaXNWYXJpYW50TGFiZWwoYW5pbWF0ZSkgPyBhbmltYXRlIDogdW5kZWZpbmVkLFxuICAgICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gcHJvcHMuaW5oZXJpdCAhPT0gZmFsc2UgPyBjb250ZXh0IDoge307XG59XG5cbmV4cG9ydCB7IGdldEN1cnJlbnRUcmVlVmFyaWFudHMgfTtcbiIsImltcG9ydCB7IGlzUmVmT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaXMtcmVmLW9iamVjdC5tanMnO1xuaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IFN3aXRjaExheW91dEdyb3VwQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvU3dpdGNoTGF5b3V0R3JvdXBDb250ZXh0Lm1qcyc7XG5cbmZ1bmN0aW9uIHVzZVByb2plY3Rpb24ocHJvamVjdGlvbklkLCBfYSwgdmlzdWFsRWxlbWVudCwgUHJvamVjdGlvbk5vZGVDb25zdHJ1Y3Rvcikge1xuICAgIHZhciBfYjtcbiAgICB2YXIgbGF5b3V0SWQgPSBfYS5sYXlvdXRJZCwgbGF5b3V0ID0gX2EubGF5b3V0LCBkcmFnID0gX2EuZHJhZywgZHJhZ0NvbnN0cmFpbnRzID0gX2EuZHJhZ0NvbnN0cmFpbnRzLCBsYXlvdXRTY3JvbGwgPSBfYS5sYXlvdXRTY3JvbGw7XG4gICAgdmFyIGluaXRpYWxQcm9tb3Rpb25Db25maWcgPSB1c2VDb250ZXh0KFN3aXRjaExheW91dEdyb3VwQ29udGV4dCk7XG4gICAgaWYgKCFQcm9qZWN0aW9uTm9kZUNvbnN0cnVjdG9yIHx8XG4gICAgICAgICF2aXN1YWxFbGVtZW50IHx8XG4gICAgICAgICh2aXN1YWxFbGVtZW50ID09PSBudWxsIHx8IHZpc3VhbEVsZW1lbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHZpc3VhbEVsZW1lbnQucHJvamVjdGlvbikpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2aXN1YWxFbGVtZW50LnByb2plY3Rpb24gPSBuZXcgUHJvamVjdGlvbk5vZGVDb25zdHJ1Y3Rvcihwcm9qZWN0aW9uSWQsIHZpc3VhbEVsZW1lbnQuZ2V0TGF0ZXN0VmFsdWVzKCksIChfYiA9IHZpc3VhbEVsZW1lbnQucGFyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IucHJvamVjdGlvbik7XG4gICAgdmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uLnNldE9wdGlvbnMoe1xuICAgICAgICBsYXlvdXRJZDogbGF5b3V0SWQsXG4gICAgICAgIGxheW91dDogbGF5b3V0LFxuICAgICAgICBhbHdheXNNZWFzdXJlTGF5b3V0OiBCb29sZWFuKGRyYWcpIHx8IChkcmFnQ29uc3RyYWludHMgJiYgaXNSZWZPYmplY3QoZHJhZ0NvbnN0cmFpbnRzKSksXG4gICAgICAgIHZpc3VhbEVsZW1lbnQ6IHZpc3VhbEVsZW1lbnQsXG4gICAgICAgIHNjaGVkdWxlUmVuZGVyOiBmdW5jdGlvbiAoKSB7IHJldHVybiB2aXN1YWxFbGVtZW50LnNjaGVkdWxlUmVuZGVyKCk7IH0sXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUT0RPOiBVcGRhdGUgb3B0aW9ucyBpbiBhbiBlZmZlY3QuIFRoaXMgY291bGQgYmUgdHJpY2t5IGFzIGl0J2xsIGJlIHRvbyBsYXRlXG4gICAgICAgICAqIHRvIHVwZGF0ZSBieSB0aGUgdGltZSBsYXlvdXQgYW5pbWF0aW9ucyBydW4uXG4gICAgICAgICAqIFdlIGFsc28gbmVlZCB0byBmaXggdGhpcyBzYWZlVG9SZW1vdmUgYnkgbGlua2luZyBpdCB1cCB0byB0aGUgb25lIHJldHVybmVkIGJ5IHVzZVByZXNlbmNlLFxuICAgICAgICAgKiBlbnN1cmluZyBpdCBnZXRzIGNhbGxlZCBpZiB0aGVyZSdzIG5vIHBvdGVudGlhbCBsYXlvdXQgYW5pbWF0aW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICovXG4gICAgICAgIGFuaW1hdGlvblR5cGU6IHR5cGVvZiBsYXlvdXQgPT09IFwic3RyaW5nXCIgPyBsYXlvdXQgOiBcImJvdGhcIixcbiAgICAgICAgaW5pdGlhbFByb21vdGlvbkNvbmZpZzogaW5pdGlhbFByb21vdGlvbkNvbmZpZyxcbiAgICAgICAgbGF5b3V0U2Nyb2xsOiBsYXlvdXRTY3JvbGwsXG4gICAgfSk7XG59XG5cbmV4cG9ydCB7IHVzZVByb2plY3Rpb24gfTtcbiIsImltcG9ydCB7IHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNSZWZPYmplY3QgfSBmcm9tICcuLi8uLi91dGlscy9pcy1yZWYtb2JqZWN0Lm1qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIHJlZiBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCwgaHlkcmF0ZXMgdGhlIHByb3ZpZGVkXG4gKiBleHRlcm5hbCByZWYgYW5kIFZpc3VhbEVsZW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHVzZU1vdGlvblJlZih2aXN1YWxTdGF0ZSwgdmlzdWFsRWxlbWVudCwgZXh0ZXJuYWxSZWYpIHtcbiAgICByZXR1cm4gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGluc3RhbmNlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaW5zdGFuY2UgJiYgKChfYSA9IHZpc3VhbFN0YXRlLm1vdW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh2aXN1YWxTdGF0ZSwgaW5zdGFuY2UpKTtcbiAgICAgICAgaWYgKHZpc3VhbEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGluc3RhbmNlXG4gICAgICAgICAgICAgICAgPyB2aXN1YWxFbGVtZW50Lm1vdW50KGluc3RhbmNlKVxuICAgICAgICAgICAgICAgIDogdmlzdWFsRWxlbWVudC51bm1vdW50KCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGV4dGVybmFsUmVmKSB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGV4dGVybmFsUmVmID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBleHRlcm5hbFJlZihpbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChpc1JlZk9iamVjdChleHRlcm5hbFJlZikpIHtcbiAgICAgICAgICAgICAgICBleHRlcm5hbFJlZi5jdXJyZW50ID0gaW5zdGFuY2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCBcbiAgICAvKipcbiAgICAgKiBPbmx5IHBhc3MgYSBuZXcgcmVmIGNhbGxiYWNrIHRvIFJlYWN0IGlmIHdlJ3ZlIHJlY2VpdmVkIGEgdmlzdWFsIGVsZW1lbnRcbiAgICAgKiBmYWN0b3J5LiBPdGhlcndpc2Ugd2UnbGwgYmUgbW91bnRpbmcvcmVtb3VudGluZyBldmVyeSB0aW1lIGV4dGVybmFsUmVmXG4gICAgICogb3Igb3RoZXIgZGVwZW5kZW5jaWVzIGNoYW5nZS5cbiAgICAgKi9cbiAgICBbdmlzdWFsRWxlbWVudF0pO1xufVxuXG5leHBvcnQgeyB1c2VNb3Rpb25SZWYgfTtcbiIsImltcG9ydCB7IGNyZWF0ZU1vdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL21vdGlvbi9pbmRleC5tanMnO1xuXG4vKipcbiAqIENvbnZlcnQgYW55IFJlYWN0IGNvbXBvbmVudCBpbnRvIGEgYG1vdGlvbmAgY29tcG9uZW50LiBUaGUgcHJvdmlkZWQgY29tcG9uZW50XG4gKiAqKm11c3QqKiB1c2UgYFJlYWN0LmZvcndhcmRSZWZgIHRvIHRoZSB1bmRlcmx5aW5nIERPTSBjb21wb25lbnQgeW91IHdhbnQgdG8gYW5pbWF0ZS5cbiAqXG4gKiBgYGBqc3hcbiAqIGNvbnN0IENvbXBvbmVudCA9IFJlYWN0LmZvcndhcmRSZWYoKHByb3BzLCByZWYpID0+IHtcbiAqICAgcmV0dXJuIDxkaXYgcmVmPXtyZWZ9IC8+XG4gKiB9KVxuICpcbiAqIGNvbnN0IE1vdGlvbkNvbXBvbmVudCA9IG1vdGlvbihDb21wb25lbnQpXG4gKiBgYGBcbiAqXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZU1vdGlvblByb3h5KGNyZWF0ZUNvbmZpZykge1xuICAgIGZ1bmN0aW9uIGN1c3RvbShDb21wb25lbnQsIGN1c3RvbU1vdGlvbkNvbXBvbmVudENvbmZpZykge1xuICAgICAgICBpZiAoY3VzdG9tTW90aW9uQ29tcG9uZW50Q29uZmlnID09PSB2b2lkIDApIHsgY3VzdG9tTW90aW9uQ29tcG9uZW50Q29uZmlnID0ge307IH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZU1vdGlvbkNvbXBvbmVudChjcmVhdGVDb25maWcoQ29tcG9uZW50LCBjdXN0b21Nb3Rpb25Db21wb25lbnRDb25maWcpKTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBQcm94eSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICByZXR1cm4gY3VzdG9tO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBBIGNhY2hlIG9mIGdlbmVyYXRlZCBgbW90aW9uYCBjb21wb25lbnRzLCBlLmcgYG1vdGlvbi5kaXZgLCBgbW90aW9uLmlucHV0YCBldGMuXG4gICAgICogUmF0aGVyIHRoYW4gZ2VuZXJhdGluZyB0aGVtIGFuZXcgZXZlcnkgcmVuZGVyLlxuICAgICAqL1xuICAgIHZhciBjb21wb25lbnRDYWNoZSA9IG5ldyBNYXAoKTtcbiAgICByZXR1cm4gbmV3IFByb3h5KGN1c3RvbSwge1xuICAgICAgICAvKipcbiAgICAgICAgICogQ2FsbGVkIHdoZW4gYG1vdGlvbmAgaXMgcmVmZXJlbmNlZCB3aXRoIGEgcHJvcDogYG1vdGlvbi5kaXZgLCBgbW90aW9uLmlucHV0YCBldGMuXG4gICAgICAgICAqIFRoZSBwcm9wIG5hbWUgaXMgcGFzc2VkIHRocm91Z2ggYXMgYGtleWAgYW5kIHdlIGNhbiB1c2UgdGhhdCB0byBnZW5lcmF0ZSBhIGBtb3Rpb25gXG4gICAgICAgICAqIERPTSBjb21wb25lbnQgd2l0aCB0aGF0IG5hbWUuXG4gICAgICAgICAqL1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uIChfdGFyZ2V0LCBrZXkpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgdGhpcyBlbGVtZW50IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIGNvbXBvbmVudCBjYWNoZSwgY3JlYXRlIGl0IGFuZCBjYWNoZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKCFjb21wb25lbnRDYWNoZS5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbXBvbmVudENhY2hlLnNldChrZXksIGN1c3RvbShrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnRDYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgfSxcbiAgICB9KTtcbn1cblxuZXhwb3J0IHsgY3JlYXRlTW90aW9uUHJveHkgfTtcbiIsIi8qKlxuICogV2Uga2VlcCB0aGVzZSBsaXN0ZWQgc2VwZXJhdGVseSBhcyB3ZSB1c2UgdGhlIGxvd2VyY2FzZSB0YWcgbmFtZXMgYXMgcGFydFxuICogb2YgdGhlIHJ1bnRpbWUgYnVuZGxlIHRvIGRldGVjdCBTVkcgY29tcG9uZW50c1xuICovXG52YXIgbG93ZXJjYXNlU1ZHRWxlbWVudHMgPSBbXG4gICAgXCJhbmltYXRlXCIsXG4gICAgXCJjaXJjbGVcIixcbiAgICBcImRlZnNcIixcbiAgICBcImRlc2NcIixcbiAgICBcImVsbGlwc2VcIixcbiAgICBcImdcIixcbiAgICBcImltYWdlXCIsXG4gICAgXCJsaW5lXCIsXG4gICAgXCJmaWx0ZXJcIixcbiAgICBcIm1hcmtlclwiLFxuICAgIFwibWFza1wiLFxuICAgIFwibWV0YWRhdGFcIixcbiAgICBcInBhdGhcIixcbiAgICBcInBhdHRlcm5cIixcbiAgICBcInBvbHlnb25cIixcbiAgICBcInBvbHlsaW5lXCIsXG4gICAgXCJyZWN0XCIsXG4gICAgXCJzdG9wXCIsXG4gICAgXCJzdmdcIixcbiAgICBcInN3aXRjaFwiLFxuICAgIFwic3ltYm9sXCIsXG4gICAgXCJ0ZXh0XCIsXG4gICAgXCJ0c3BhblwiLFxuICAgIFwidXNlXCIsXG4gICAgXCJ2aWV3XCIsXG5dO1xuXG5leHBvcnQgeyBsb3dlcmNhc2VTVkdFbGVtZW50cyB9O1xuIiwiaW1wb3J0IHsgbG93ZXJjYXNlU1ZHRWxlbWVudHMgfSBmcm9tICcuLi8uLi9zdmcvbG93ZXJjYXNlLWVsZW1lbnRzLm1qcyc7XG5cbmZ1bmN0aW9uIGlzU1ZHQ29tcG9uZW50KENvbXBvbmVudCkge1xuICAgIGlmIChcbiAgICAvKipcbiAgICAgKiBJZiBpdCdzIG5vdCBhIHN0cmluZywgaXQncyBhIGN1c3RvbSBSZWFjdCBjb21wb25lbnQuIEN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnRcbiAgICAgKiBIVE1MIGN1c3RvbSBSZWFjdCBjb21wb25lbnRzLlxuICAgICAqL1xuICAgIHR5cGVvZiBDb21wb25lbnQgIT09IFwic3RyaW5nXCIgfHxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIGl0IGNvbnRhaW5zIGEgZGFzaCwgdGhlIGVsZW1lbnQgaXMgYSBjdXN0b20gSFRNTCB3ZWJjb21wb25lbnQuXG4gICAgICAgICAqL1xuICAgICAgICBDb21wb25lbnQuaW5jbHVkZXMoXCItXCIpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoXG4gICAgLyoqXG4gICAgICogSWYgaXQncyBpbiBvdXIgbGlzdCBvZiBsb3dlcmNhc2UgU1ZHIHRhZ3MsIGl0J3MgYW4gU1ZHIGNvbXBvbmVudFxuICAgICAqL1xuICAgIGxvd2VyY2FzZVNWR0VsZW1lbnRzLmluZGV4T2YoQ29tcG9uZW50KSA+IC0xIHx8XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBpdCBjb250YWlucyBhIGNhcGl0YWwgbGV0dGVyLCBpdCdzIGFuIFNWRyBjb21wb25lbnRcbiAgICAgICAgICovXG4gICAgICAgIC9bQS1aXS8udGVzdChDb21wb25lbnQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCB7IGlzU1ZHQ29tcG9uZW50IH07XG4iLCJ2YXIgc2NhbGVDb3JyZWN0b3JzID0ge307XG5mdW5jdGlvbiBhZGRTY2FsZUNvcnJlY3Rvcihjb3JyZWN0b3JzKSB7XG4gICAgT2JqZWN0LmFzc2lnbihzY2FsZUNvcnJlY3RvcnMsIGNvcnJlY3RvcnMpO1xufVxuXG5leHBvcnQgeyBhZGRTY2FsZUNvcnJlY3Rvciwgc2NhbGVDb3JyZWN0b3JzIH07XG4iLCIvKipcbiAqIEEgbGlzdCBvZiBhbGwgdHJhbnNmb3JtYWJsZSBheGVzLiBXZSdsbCB1c2UgdGhpcyBsaXN0IHRvIGdlbmVyYXRlZCBhIHZlcnNpb25cbiAqIG9mIGVhY2ggYXhlcyBmb3IgZWFjaCB0cmFuc2Zvcm0uXG4gKi9cbnZhciB0cmFuc2Zvcm1BeGVzID0gW1wiXCIsIFwiWFwiLCBcIllcIiwgXCJaXCJdO1xuLyoqXG4gKiBBbiBvcmRlcmVkIGFycmF5IG9mIGVhY2ggdHJhbnNmb3JtYWJsZSB2YWx1ZS4gQnkgZGVmYXVsdCwgdHJhbnNmb3JtIHZhbHVlc1xuICogd2lsbCBiZSBzb3J0ZWQgdG8gdGhpcyBvcmRlci5cbiAqL1xudmFyIG9yZGVyID0gW1widHJhbnNsYXRlXCIsIFwic2NhbGVcIiwgXCJyb3RhdGVcIiwgXCJza2V3XCJdO1xuLyoqXG4gKiBHZW5lcmF0ZSBhIGxpc3Qgb2YgZXZlcnkgcG9zc2libGUgdHJhbnNmb3JtIGtleS5cbiAqL1xudmFyIHRyYW5zZm9ybVByb3BzID0gW1widHJhbnNmb3JtUGVyc3BlY3RpdmVcIiwgXCJ4XCIsIFwieVwiLCBcInpcIl07XG5vcmRlci5mb3JFYWNoKGZ1bmN0aW9uIChvcGVyYXRpb25LZXkpIHtcbiAgICByZXR1cm4gdHJhbnNmb3JtQXhlcy5mb3JFYWNoKGZ1bmN0aW9uIChheGVzS2V5KSB7XG4gICAgICAgIHJldHVybiB0cmFuc2Zvcm1Qcm9wcy5wdXNoKG9wZXJhdGlvbktleSArIGF4ZXNLZXkpO1xuICAgIH0pO1xufSk7XG4vKipcbiAqIEEgZnVuY3Rpb24gdG8gdXNlIHdpdGggQXJyYXkuc29ydCB0byBzb3J0IHRyYW5zZm9ybSBrZXlzIGJ5IHRoZWlyIGRlZmF1bHQgb3JkZXIuXG4gKi9cbmZ1bmN0aW9uIHNvcnRUcmFuc2Zvcm1Qcm9wcyhhLCBiKSB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybVByb3BzLmluZGV4T2YoYSkgLSB0cmFuc2Zvcm1Qcm9wcy5pbmRleE9mKGIpO1xufVxuLyoqXG4gKiBBIHF1aWNrIGxvb2t1cCBmb3IgdHJhbnNmb3JtIHByb3BzLlxuICovXG52YXIgdHJhbnNmb3JtUHJvcFNldCA9IG5ldyBTZXQodHJhbnNmb3JtUHJvcHMpO1xuZnVuY3Rpb24gaXNUcmFuc2Zvcm1Qcm9wKGtleSkge1xuICAgIHJldHVybiB0cmFuc2Zvcm1Qcm9wU2V0LmhhcyhrZXkpO1xufVxuLyoqXG4gKiBBIHF1aWNrIGxvb2t1cCBmb3IgdHJhbnNmb3JtIG9yaWdpbiBwcm9wc1xuICovXG52YXIgdHJhbnNmb3JtT3JpZ2luUHJvcHMgPSBuZXcgU2V0KFtcIm9yaWdpblhcIiwgXCJvcmlnaW5ZXCIsIFwib3JpZ2luWlwiXSk7XG5mdW5jdGlvbiBpc1RyYW5zZm9ybU9yaWdpblByb3Aoa2V5KSB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybU9yaWdpblByb3BzLmhhcyhrZXkpO1xufVxuXG5leHBvcnQgeyBpc1RyYW5zZm9ybU9yaWdpblByb3AsIGlzVHJhbnNmb3JtUHJvcCwgc29ydFRyYW5zZm9ybVByb3BzLCB0cmFuc2Zvcm1BeGVzLCB0cmFuc2Zvcm1Qcm9wcyB9O1xuIiwiaW1wb3J0IHsgc2NhbGVDb3JyZWN0b3JzIH0gZnJvbSAnLi4vLi4vcHJvamVjdGlvbi9zdHlsZXMvc2NhbGUtY29ycmVjdGlvbi5tanMnO1xuaW1wb3J0IHsgaXNUcmFuc2Zvcm1Qcm9wLCBpc1RyYW5zZm9ybU9yaWdpblByb3AgfSBmcm9tICcuLi8uLi9yZW5kZXIvaHRtbC91dGlscy90cmFuc2Zvcm0ubWpzJztcblxuZnVuY3Rpb24gaXNGb3JjZWRNb3Rpb25WYWx1ZShrZXksIF9hKSB7XG4gICAgdmFyIGxheW91dCA9IF9hLmxheW91dCwgbGF5b3V0SWQgPSBfYS5sYXlvdXRJZDtcbiAgICByZXR1cm4gKGlzVHJhbnNmb3JtUHJvcChrZXkpIHx8XG4gICAgICAgIGlzVHJhbnNmb3JtT3JpZ2luUHJvcChrZXkpIHx8XG4gICAgICAgICgobGF5b3V0IHx8IGxheW91dElkICE9PSB1bmRlZmluZWQpICYmXG4gICAgICAgICAgICAoISFzY2FsZUNvcnJlY3RvcnNba2V5XSB8fCBrZXkgPT09IFwib3BhY2l0eVwiKSkpO1xufVxuXG5leHBvcnQgeyBpc0ZvcmNlZE1vdGlvblZhbHVlIH07XG4iLCJ2YXIgaXNNb3Rpb25WYWx1ZSA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiBCb29sZWFuKHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiB2YWx1ZS5nZXRWZWxvY2l0eSk7XG59O1xuXG5leHBvcnQgeyBpc01vdGlvblZhbHVlIH07XG4iLCJpbXBvcnQgeyBzb3J0VHJhbnNmb3JtUHJvcHMgfSBmcm9tICcuL3RyYW5zZm9ybS5tanMnO1xuXG52YXIgdHJhbnNsYXRlQWxpYXMgPSB7XG4gICAgeDogXCJ0cmFuc2xhdGVYXCIsXG4gICAgeTogXCJ0cmFuc2xhdGVZXCIsXG4gICAgejogXCJ0cmFuc2xhdGVaXCIsXG4gICAgdHJhbnNmb3JtUGVyc3BlY3RpdmU6IFwicGVyc3BlY3RpdmVcIixcbn07XG4vKipcbiAqIEJ1aWxkIGEgQ1NTIHRyYW5zZm9ybSBzdHlsZSBmcm9tIGluZGl2aWR1YWwgeC95L3NjYWxlIGV0YyBwcm9wZXJ0aWVzLlxuICpcbiAqIFRoaXMgb3V0cHV0cyB3aXRoIGEgZGVmYXVsdCBvcmRlciBvZiB0cmFuc2Zvcm1zL3NjYWxlcy9yb3RhdGlvbnMsIHRoaXMgY2FuIGJlIGN1c3RvbWlzZWQgYnlcbiAqIHByb3ZpZGluZyBhIHRyYW5zZm9ybVRlbXBsYXRlIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBidWlsZFRyYW5zZm9ybShfYSwgX2IsIHRyYW5zZm9ybUlzRGVmYXVsdCwgdHJhbnNmb3JtVGVtcGxhdGUpIHtcbiAgICB2YXIgdHJhbnNmb3JtID0gX2EudHJhbnNmb3JtLCB0cmFuc2Zvcm1LZXlzID0gX2EudHJhbnNmb3JtS2V5cztcbiAgICB2YXIgX2MgPSBfYi5lbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbiwgZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb24gPSBfYyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9jLCBfZCA9IF9iLmFsbG93VHJhbnNmb3JtTm9uZSwgYWxsb3dUcmFuc2Zvcm1Ob25lID0gX2QgPT09IHZvaWQgMCA/IHRydWUgOiBfZDtcbiAgICAvLyBUaGUgdHJhbnNmb3JtIHN0cmluZyB3ZSdyZSBnb2luZyB0byBidWlsZCBpbnRvLlxuICAgIHZhciB0cmFuc2Zvcm1TdHJpbmcgPSBcIlwiO1xuICAgIC8vIFRyYW5zZm9ybSBrZXlzIGludG8gdGhlaXIgZGVmYXVsdCBvcmRlciAtIHRoaXMgd2lsbCBkZXRlcm1pbmUgdGhlIG91dHB1dCBvcmRlci5cbiAgICB0cmFuc2Zvcm1LZXlzLnNvcnQoc29ydFRyYW5zZm9ybVByb3BzKTtcbiAgICAvLyBUcmFjayB3aGV0aGVyIHRoZSBkZWZpbmVkIHRyYW5zZm9ybSBoYXMgYSBkZWZpbmVkIHogc28gd2UgZG9uJ3QgYWRkIGFcbiAgICAvLyBzZWNvbmQgdG8gZW5hYmxlIGhhcmR3YXJlIGFjY2VsZXJhdGlvblxuICAgIHZhciB0cmFuc2Zvcm1IYXNaID0gZmFsc2U7XG4gICAgLy8gTG9vcCBvdmVyIGVhY2ggdHJhbnNmb3JtIGFuZCBidWlsZCB0aGVtIGludG8gdHJhbnNmb3JtU3RyaW5nXG4gICAgdmFyIG51bVRyYW5zZm9ybUtleXMgPSB0cmFuc2Zvcm1LZXlzLmxlbmd0aDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bVRyYW5zZm9ybUtleXM7IGkrKykge1xuICAgICAgICB2YXIga2V5ID0gdHJhbnNmb3JtS2V5c1tpXTtcbiAgICAgICAgdHJhbnNmb3JtU3RyaW5nICs9IFwiXCIuY29uY2F0KHRyYW5zbGF0ZUFsaWFzW2tleV0gfHwga2V5LCBcIihcIikuY29uY2F0KHRyYW5zZm9ybVtrZXldLCBcIikgXCIpO1xuICAgICAgICBpZiAoa2V5ID09PSBcInpcIilcbiAgICAgICAgICAgIHRyYW5zZm9ybUhhc1ogPSB0cnVlO1xuICAgIH1cbiAgICBpZiAoIXRyYW5zZm9ybUhhc1ogJiYgZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb24pIHtcbiAgICAgICAgdHJhbnNmb3JtU3RyaW5nICs9IFwidHJhbnNsYXRlWigwKVwiO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdHJhbnNmb3JtU3RyaW5nID0gdHJhbnNmb3JtU3RyaW5nLnRyaW0oKTtcbiAgICB9XG4gICAgLy8gSWYgd2UgaGF2ZSBhIGN1c3RvbSBgdHJhbnNmb3JtYCB0ZW1wbGF0ZSwgcGFzcyBvdXIgdHJhbnNmb3JtIHZhbHVlcyBhbmRcbiAgICAvLyBnZW5lcmF0ZWQgdHJhbnNmb3JtU3RyaW5nIHRvIHRoYXQgYmVmb3JlIHJldHVybmluZ1xuICAgIGlmICh0cmFuc2Zvcm1UZW1wbGF0ZSkge1xuICAgICAgICB0cmFuc2Zvcm1TdHJpbmcgPSB0cmFuc2Zvcm1UZW1wbGF0ZSh0cmFuc2Zvcm0sIHRyYW5zZm9ybUlzRGVmYXVsdCA/IFwiXCIgOiB0cmFuc2Zvcm1TdHJpbmcpO1xuICAgIH1cbiAgICBlbHNlIGlmIChhbGxvd1RyYW5zZm9ybU5vbmUgJiYgdHJhbnNmb3JtSXNEZWZhdWx0KSB7XG4gICAgICAgIHRyYW5zZm9ybVN0cmluZyA9IFwibm9uZVwiO1xuICAgIH1cbiAgICByZXR1cm4gdHJhbnNmb3JtU3RyaW5nO1xufVxuLyoqXG4gKiBCdWlsZCBhIHRyYW5zZm9ybU9yaWdpbiBzdHlsZS4gVXNlcyB0aGUgc2FtZSBkZWZhdWx0cyBhcyB0aGUgYnJvd3NlciBmb3JcbiAqIHVuZGVmaW5lZCBvcmlnaW5zLlxuICovXG5mdW5jdGlvbiBidWlsZFRyYW5zZm9ybU9yaWdpbihfYSkge1xuICAgIHZhciBfYiA9IF9hLm9yaWdpblgsIG9yaWdpblggPSBfYiA9PT0gdm9pZCAwID8gXCI1MCVcIiA6IF9iLCBfYyA9IF9hLm9yaWdpblksIG9yaWdpblkgPSBfYyA9PT0gdm9pZCAwID8gXCI1MCVcIiA6IF9jLCBfZCA9IF9hLm9yaWdpblosIG9yaWdpblogPSBfZCA9PT0gdm9pZCAwID8gMCA6IF9kO1xuICAgIHJldHVybiBcIlwiLmNvbmNhdChvcmlnaW5YLCBcIiBcIikuY29uY2F0KG9yaWdpblksIFwiIFwiKS5jb25jYXQob3JpZ2luWik7XG59XG5cbmV4cG9ydCB7IGJ1aWxkVHJhbnNmb3JtLCBidWlsZFRyYW5zZm9ybU9yaWdpbiB9O1xuIiwiLyoqXG4gKiBSZXR1cm5zIHRydWUgaWYgdGhlIHByb3ZpZGVkIGtleSBpcyBhIENTUyB2YXJpYWJsZVxuICovXG5mdW5jdGlvbiBpc0NTU1ZhcmlhYmxlKGtleSkge1xuICAgIHJldHVybiBrZXkuc3RhcnRzV2l0aChcIi0tXCIpO1xufVxuXG5leHBvcnQgeyBpc0NTU1ZhcmlhYmxlIH07XG4iLCIvKipcbiAqIFByb3ZpZGVkIGEgdmFsdWUgYW5kIGEgVmFsdWVUeXBlLCByZXR1cm5zIHRoZSB2YWx1ZSBhcyB0aGF0IHZhbHVlIHR5cGUuXG4gKi9cbnZhciBnZXRWYWx1ZUFzVHlwZSA9IGZ1bmN0aW9uICh2YWx1ZSwgdHlwZSkge1xuICAgIHJldHVybiB0eXBlICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIlxuICAgICAgICA/IHR5cGUudHJhbnNmb3JtKHZhbHVlKVxuICAgICAgICA6IHZhbHVlO1xufTtcblxuZXhwb3J0IHsgZ2V0VmFsdWVBc1R5cGUgfTtcbiIsImNvbnN0IGNsYW1wID0gKG1pbiwgbWF4KSA9PiAodikgPT4gTWF0aC5tYXgoTWF0aC5taW4odiwgbWF4KSwgbWluKTtcbmNvbnN0IHNhbml0aXplID0gKHYpID0+ICh2ICUgMSA/IE51bWJlcih2LnRvRml4ZWQoNSkpIDogdik7XG5jb25zdCBmbG9hdFJlZ2V4ID0gLygtKT8oW1xcZF0qXFwuP1tcXGRdKSsvZztcbmNvbnN0IGNvbG9yUmVnZXggPSAvKCNbMC05YS1mXXs2fXwjWzAtOWEtZl17M318Iyg/OlswLTlhLWZdezJ9KXsyLDR9fChyZ2J8aHNsKWE/XFwoKC0/W1xcZFxcLl0rJT9bLFxcc10rKXsyLDN9XFxzKlxcLypcXHMqW1xcZFxcLl0rJT9cXCkpL2dpO1xuY29uc3Qgc2luZ2xlQ29sb3JSZWdleCA9IC9eKCNbMC05YS1mXXszfXwjKD86WzAtOWEtZl17Mn0pezIsNH18KHJnYnxoc2wpYT9cXCgoLT9bXFxkXFwuXSslP1ssXFxzXSspezIsM31cXHMqXFwvKlxccypbXFxkXFwuXSslP1xcKSkkL2k7XG5mdW5jdGlvbiBpc1N0cmluZyh2KSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2ID09PSAnc3RyaW5nJztcbn1cblxuZXhwb3J0IHsgY2xhbXAsIGNvbG9yUmVnZXgsIGZsb2F0UmVnZXgsIGlzU3RyaW5nLCBzYW5pdGl6ZSwgc2luZ2xlQ29sb3JSZWdleCB9O1xuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICcuLi91dGlscy5tanMnO1xuXG5jb25zdCBjcmVhdGVVbml0VHlwZSA9ICh1bml0KSA9PiAoe1xuICAgIHRlc3Q6ICh2KSA9PiBpc1N0cmluZyh2KSAmJiB2LmVuZHNXaXRoKHVuaXQpICYmIHYuc3BsaXQoJyAnKS5sZW5ndGggPT09IDEsXG4gICAgcGFyc2U6IHBhcnNlRmxvYXQsXG4gICAgdHJhbnNmb3JtOiAodikgPT4gYCR7dn0ke3VuaXR9YCxcbn0pO1xuY29uc3QgZGVncmVlcyA9IGNyZWF0ZVVuaXRUeXBlKCdkZWcnKTtcbmNvbnN0IHBlcmNlbnQgPSBjcmVhdGVVbml0VHlwZSgnJScpO1xuY29uc3QgcHggPSBjcmVhdGVVbml0VHlwZSgncHgnKTtcbmNvbnN0IHZoID0gY3JlYXRlVW5pdFR5cGUoJ3ZoJyk7XG5jb25zdCB2dyA9IGNyZWF0ZVVuaXRUeXBlKCd2dycpO1xuY29uc3QgcHJvZ3Jlc3NQZXJjZW50YWdlID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwZXJjZW50KSwgeyBwYXJzZTogKHYpID0+IHBlcmNlbnQucGFyc2UodikgLyAxMDAsIHRyYW5zZm9ybTogKHYpID0+IHBlcmNlbnQudHJhbnNmb3JtKHYgKiAxMDApIH0pO1xuXG5leHBvcnQgeyBkZWdyZWVzLCBwZXJjZW50LCBwcm9ncmVzc1BlcmNlbnRhZ2UsIHB4LCB2aCwgdncgfTtcbiIsImltcG9ydCB7IGNsYW1wIH0gZnJvbSAnLi4vdXRpbHMubWpzJztcblxuY29uc3QgbnVtYmVyID0ge1xuICAgIHRlc3Q6ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicsXG4gICAgcGFyc2U6IHBhcnNlRmxvYXQsXG4gICAgdHJhbnNmb3JtOiAodikgPT4gdixcbn07XG5jb25zdCBhbHBoYSA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgbnVtYmVyKSwgeyB0cmFuc2Zvcm06IGNsYW1wKDAsIDEpIH0pO1xuY29uc3Qgc2NhbGUgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG51bWJlciksIHsgZGVmYXVsdDogMSB9KTtcblxuZXhwb3J0IHsgYWxwaGEsIG51bWJlciwgc2NhbGUgfTtcbiIsImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgbnVtYmVyIH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuXG52YXIgaW50ID0gX19hc3NpZ24oX19hc3NpZ24oe30sIG51bWJlciksIHsgdHJhbnNmb3JtOiBNYXRoLnJvdW5kIH0pO1xuXG5leHBvcnQgeyBpbnQgfTtcbiIsImltcG9ydCB7IHB4LCBkZWdyZWVzLCBzY2FsZSwgYWxwaGEsIHByb2dyZXNzUGVyY2VudGFnZSB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcbmltcG9ydCB7IGludCB9IGZyb20gJy4vdHlwZS1pbnQubWpzJztcblxudmFyIG51bWJlclZhbHVlVHlwZXMgPSB7XG4gICAgLy8gQm9yZGVyIHByb3BzXG4gICAgYm9yZGVyV2lkdGg6IHB4LFxuICAgIGJvcmRlclRvcFdpZHRoOiBweCxcbiAgICBib3JkZXJSaWdodFdpZHRoOiBweCxcbiAgICBib3JkZXJCb3R0b21XaWR0aDogcHgsXG4gICAgYm9yZGVyTGVmdFdpZHRoOiBweCxcbiAgICBib3JkZXJSYWRpdXM6IHB4LFxuICAgIHJhZGl1czogcHgsXG4gICAgYm9yZGVyVG9wTGVmdFJhZGl1czogcHgsXG4gICAgYm9yZGVyVG9wUmlnaHRSYWRpdXM6IHB4LFxuICAgIGJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzOiBweCxcbiAgICBib3JkZXJCb3R0b21MZWZ0UmFkaXVzOiBweCxcbiAgICAvLyBQb3NpdGlvbmluZyBwcm9wc1xuICAgIHdpZHRoOiBweCxcbiAgICBtYXhXaWR0aDogcHgsXG4gICAgaGVpZ2h0OiBweCxcbiAgICBtYXhIZWlnaHQ6IHB4LFxuICAgIHNpemU6IHB4LFxuICAgIHRvcDogcHgsXG4gICAgcmlnaHQ6IHB4LFxuICAgIGJvdHRvbTogcHgsXG4gICAgbGVmdDogcHgsXG4gICAgLy8gU3BhY2luZyBwcm9wc1xuICAgIHBhZGRpbmc6IHB4LFxuICAgIHBhZGRpbmdUb3A6IHB4LFxuICAgIHBhZGRpbmdSaWdodDogcHgsXG4gICAgcGFkZGluZ0JvdHRvbTogcHgsXG4gICAgcGFkZGluZ0xlZnQ6IHB4LFxuICAgIG1hcmdpbjogcHgsXG4gICAgbWFyZ2luVG9wOiBweCxcbiAgICBtYXJnaW5SaWdodDogcHgsXG4gICAgbWFyZ2luQm90dG9tOiBweCxcbiAgICBtYXJnaW5MZWZ0OiBweCxcbiAgICAvLyBUcmFuc2Zvcm0gcHJvcHNcbiAgICByb3RhdGU6IGRlZ3JlZXMsXG4gICAgcm90YXRlWDogZGVncmVlcyxcbiAgICByb3RhdGVZOiBkZWdyZWVzLFxuICAgIHJvdGF0ZVo6IGRlZ3JlZXMsXG4gICAgc2NhbGU6IHNjYWxlLFxuICAgIHNjYWxlWDogc2NhbGUsXG4gICAgc2NhbGVZOiBzY2FsZSxcbiAgICBzY2FsZVo6IHNjYWxlLFxuICAgIHNrZXc6IGRlZ3JlZXMsXG4gICAgc2tld1g6IGRlZ3JlZXMsXG4gICAgc2tld1k6IGRlZ3JlZXMsXG4gICAgZGlzdGFuY2U6IHB4LFxuICAgIHRyYW5zbGF0ZVg6IHB4LFxuICAgIHRyYW5zbGF0ZVk6IHB4LFxuICAgIHRyYW5zbGF0ZVo6IHB4LFxuICAgIHg6IHB4LFxuICAgIHk6IHB4LFxuICAgIHo6IHB4LFxuICAgIHBlcnNwZWN0aXZlOiBweCxcbiAgICB0cmFuc2Zvcm1QZXJzcGVjdGl2ZTogcHgsXG4gICAgb3BhY2l0eTogYWxwaGEsXG4gICAgb3JpZ2luWDogcHJvZ3Jlc3NQZXJjZW50YWdlLFxuICAgIG9yaWdpblk6IHByb2dyZXNzUGVyY2VudGFnZSxcbiAgICBvcmlnaW5aOiBweCxcbiAgICAvLyBNaXNjXG4gICAgekluZGV4OiBpbnQsXG4gICAgLy8gU1ZHXG4gICAgZmlsbE9wYWNpdHk6IGFscGhhLFxuICAgIHN0cm9rZU9wYWNpdHk6IGFscGhhLFxuICAgIG51bU9jdGF2ZXM6IGludCxcbn07XG5cbmV4cG9ydCB7IG51bWJlclZhbHVlVHlwZXMgfTtcbiIsImltcG9ydCB7IGJ1aWxkVHJhbnNmb3JtLCBidWlsZFRyYW5zZm9ybU9yaWdpbiB9IGZyb20gJy4vYnVpbGQtdHJhbnNmb3JtLm1qcyc7XG5pbXBvcnQgeyBpc0NTU1ZhcmlhYmxlIH0gZnJvbSAnLi4vLi4vZG9tL3V0aWxzL2lzLWNzcy12YXJpYWJsZS5tanMnO1xuaW1wb3J0IHsgaXNUcmFuc2Zvcm1Qcm9wLCBpc1RyYW5zZm9ybU9yaWdpblByb3AgfSBmcm9tICcuL3RyYW5zZm9ybS5tanMnO1xuaW1wb3J0IHsgZ2V0VmFsdWVBc1R5cGUgfSBmcm9tICcuLi8uLi9kb20vdmFsdWUtdHlwZXMvZ2V0LWFzLXR5cGUubWpzJztcbmltcG9ydCB7IG51bWJlclZhbHVlVHlwZXMgfSBmcm9tICcuLi8uLi9kb20vdmFsdWUtdHlwZXMvbnVtYmVyLm1qcyc7XG5cbmZ1bmN0aW9uIGJ1aWxkSFRNTFN0eWxlcyhzdGF0ZSwgbGF0ZXN0VmFsdWVzLCBvcHRpb25zLCB0cmFuc2Zvcm1UZW1wbGF0ZSkge1xuICAgIHZhciBfYTtcbiAgICB2YXIgc3R5bGUgPSBzdGF0ZS5zdHlsZSwgdmFycyA9IHN0YXRlLnZhcnMsIHRyYW5zZm9ybSA9IHN0YXRlLnRyYW5zZm9ybSwgdHJhbnNmb3JtS2V5cyA9IHN0YXRlLnRyYW5zZm9ybUtleXMsIHRyYW5zZm9ybU9yaWdpbiA9IHN0YXRlLnRyYW5zZm9ybU9yaWdpbjtcbiAgICAvLyBFbXB0eSB0aGUgdHJhbnNmb3JtS2V5cyBhcnJheS4gQXMgd2UncmUgdGhyb3dpbmcgb3V0IHJlZnMgdG8gaXRzIGl0ZW1zXG4gICAgLy8gdGhpcyBtaWdodCBub3QgYmUgYXMgY2hlYXAgYXMgc3VzcGVjdGVkLiBNYXliZSB1c2luZyB0aGUgYXJyYXkgYXMgYSBidWZmZXJcbiAgICAvLyB3aXRoIGEgbWFudWFsIGluY3JlbWVudGF0aW9uIHdvdWxkIGJlIGJldHRlci5cbiAgICB0cmFuc2Zvcm1LZXlzLmxlbmd0aCA9IDA7XG4gICAgLy8gVHJhY2sgd2hldGhlciB3ZSBlbmNvdW50ZXIgYW55IHRyYW5zZm9ybSBvciB0cmFuc2Zvcm1PcmlnaW4gdmFsdWVzLlxuICAgIHZhciBoYXNUcmFuc2Zvcm0gPSBmYWxzZTtcbiAgICB2YXIgaGFzVHJhbnNmb3JtT3JpZ2luID0gZmFsc2U7XG4gICAgLy8gRG9lcyB0aGUgY2FsY3VsYXRlZCB0cmFuc2Zvcm0gZXNzZW50aWFsbHkgZXF1YWwgXCJub25lXCI/XG4gICAgdmFyIHRyYW5zZm9ybUlzTm9uZSA9IHRydWU7XG4gICAgLyoqXG4gICAgICogTG9vcCBvdmVyIGFsbCBvdXIgbGF0ZXN0IGFuaW1hdGVkIHZhbHVlcyBhbmQgZGVjaWRlIHdoZXRoZXIgdG8gaGFuZGxlIHRoZW1cbiAgICAgKiBhcyBhIHN0eWxlIG9yIENTUyB2YXJpYWJsZS5cbiAgICAgKlxuICAgICAqIFRyYW5zZm9ybXMgYW5kIHRyYW5zZm9ybSBvcmlnaW5zIGFyZSBrZXB0IHNlcGVyYXRlbHkgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZy5cbiAgICAgKi9cbiAgICBmb3IgKHZhciBrZXkgaW4gbGF0ZXN0VmFsdWVzKSB7XG4gICAgICAgIHZhciB2YWx1ZSA9IGxhdGVzdFZhbHVlc1trZXldO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhpcyBpcyBhIENTUyB2YXJpYWJsZSB3ZSBkb24ndCBkbyBhbnkgZnVydGhlciBwcm9jZXNzaW5nLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKGlzQ1NTVmFyaWFibGUoa2V5KSkge1xuICAgICAgICAgICAgdmFyc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBDb252ZXJ0IHRoZSB2YWx1ZSB0byBpdHMgZGVmYXVsdCB2YWx1ZSB0eXBlLCBpZSAwIC0+IFwiMHB4XCJcbiAgICAgICAgdmFyIHZhbHVlVHlwZSA9IG51bWJlclZhbHVlVHlwZXNba2V5XTtcbiAgICAgICAgdmFyIHZhbHVlQXNUeXBlID0gZ2V0VmFsdWVBc1R5cGUodmFsdWUsIHZhbHVlVHlwZSk7XG4gICAgICAgIGlmIChpc1RyYW5zZm9ybVByb3Aoa2V5KSkge1xuICAgICAgICAgICAgLy8gSWYgdGhpcyBpcyBhIHRyYW5zZm9ybSwgZmxhZyB0byBlbmFibGUgZnVydGhlciB0cmFuc2Zvcm0gcHJvY2Vzc2luZ1xuICAgICAgICAgICAgaGFzVHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHRyYW5zZm9ybVtrZXldID0gdmFsdWVBc1R5cGU7XG4gICAgICAgICAgICB0cmFuc2Zvcm1LZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIC8vIElmIHdlIGFscmVhZHkga25vdyB3ZSBoYXZlIGEgbm9uLWRlZmF1bHQgdHJhbnNmb3JtLCBlYXJseSByZXR1cm5cbiAgICAgICAgICAgIGlmICghdHJhbnNmb3JtSXNOb25lKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGNoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIGEgZGVmYXVsdCB0cmFuc2Zvcm1cbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gKChfYSA9IHZhbHVlVHlwZS5kZWZhdWx0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwKSlcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1Jc05vbmUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc1RyYW5zZm9ybU9yaWdpblByb3Aoa2V5KSkge1xuICAgICAgICAgICAgdHJhbnNmb3JtT3JpZ2luW2tleV0gPSB2YWx1ZUFzVHlwZTtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSB0cmFuc2Zvcm0gb3JpZ2luLCBmbGFnIGFuZCBlbmFibGUgZnVydGhlciB0cmFuc2Zvcm0tb3JpZ2luIHByb2Nlc3NpbmdcbiAgICAgICAgICAgIGhhc1RyYW5zZm9ybU9yaWdpbiA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdHlsZVtrZXldID0gdmFsdWVBc1R5cGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKGhhc1RyYW5zZm9ybSkge1xuICAgICAgICBzdHlsZS50cmFuc2Zvcm0gPSBidWlsZFRyYW5zZm9ybShzdGF0ZSwgb3B0aW9ucywgdHJhbnNmb3JtSXNOb25lLCB0cmFuc2Zvcm1UZW1wbGF0ZSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHRyYW5zZm9ybVRlbXBsYXRlKSB7XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVRlbXBsYXRlKHt9LCBcIlwiKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIWxhdGVzdFZhbHVlcy50cmFuc2Zvcm0gJiYgc3R5bGUudHJhbnNmb3JtKSB7XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybSA9IFwibm9uZVwiO1xuICAgIH1cbiAgICBpZiAoaGFzVHJhbnNmb3JtT3JpZ2luKSB7XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IGJ1aWxkVHJhbnNmb3JtT3JpZ2luKHRyYW5zZm9ybU9yaWdpbik7XG4gICAgfVxufVxuXG5leHBvcnQgeyBidWlsZEhUTUxTdHlsZXMgfTtcbiIsInZhciBjcmVhdGVIdG1sUmVuZGVyU3RhdGUgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAoe1xuICAgIHN0eWxlOiB7fSxcbiAgICB0cmFuc2Zvcm06IHt9LFxuICAgIHRyYW5zZm9ybUtleXM6IFtdLFxuICAgIHRyYW5zZm9ybU9yaWdpbjoge30sXG4gICAgdmFyczoge30sXG59KTsgfTtcblxuZXhwb3J0IHsgY3JlYXRlSHRtbFJlbmRlclN0YXRlIH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0ZvcmNlZE1vdGlvblZhbHVlIH0gZnJvbSAnLi4vLi4vbW90aW9uL3V0aWxzL2lzLWZvcmNlZC1tb3Rpb24tdmFsdWUubWpzJztcbmltcG9ydCB7IGlzTW90aW9uVmFsdWUgfSBmcm9tICcuLi8uLi92YWx1ZS91dGlscy9pcy1tb3Rpb24tdmFsdWUubWpzJztcbmltcG9ydCB7IGJ1aWxkSFRNTFN0eWxlcyB9IGZyb20gJy4vdXRpbHMvYnVpbGQtc3R5bGVzLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVIdG1sUmVuZGVyU3RhdGUgfSBmcm9tICcuL3V0aWxzL2NyZWF0ZS1yZW5kZXItc3RhdGUubWpzJztcblxuZnVuY3Rpb24gY29weVJhd1ZhbHVlc09ubHkodGFyZ2V0LCBzb3VyY2UsIHByb3BzKSB7XG4gICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoIWlzTW90aW9uVmFsdWUoc291cmNlW2tleV0pICYmICFpc0ZvcmNlZE1vdGlvblZhbHVlKGtleSwgcHJvcHMpKSB7XG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdXNlSW5pdGlhbE1vdGlvblZhbHVlcyhfYSwgdmlzdWFsU3RhdGUsIGlzU3RhdGljKSB7XG4gICAgdmFyIHRyYW5zZm9ybVRlbXBsYXRlID0gX2EudHJhbnNmb3JtVGVtcGxhdGU7XG4gICAgcmV0dXJuIHVzZU1lbW8oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc3RhdGUgPSBjcmVhdGVIdG1sUmVuZGVyU3RhdGUoKTtcbiAgICAgICAgYnVpbGRIVE1MU3R5bGVzKHN0YXRlLCB2aXN1YWxTdGF0ZSwgeyBlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjogIWlzU3RhdGljIH0sIHRyYW5zZm9ybVRlbXBsYXRlKTtcbiAgICAgICAgdmFyIHZhcnMgPSBzdGF0ZS52YXJzLCBzdHlsZSA9IHN0YXRlLnN0eWxlO1xuICAgICAgICByZXR1cm4gX19hc3NpZ24oX19hc3NpZ24oe30sIHZhcnMpLCBzdHlsZSk7XG4gICAgfSwgW3Zpc3VhbFN0YXRlXSk7XG59XG5mdW5jdGlvbiB1c2VTdHlsZShwcm9wcywgdmlzdWFsU3RhdGUsIGlzU3RhdGljKSB7XG4gICAgdmFyIHN0eWxlUHJvcCA9IHByb3BzLnN0eWxlIHx8IHt9O1xuICAgIHZhciBzdHlsZSA9IHt9O1xuICAgIC8qKlxuICAgICAqIENvcHkgbm9uLU1vdGlvbiBWYWx1ZXMgc3RyYWlnaHQgaW50byBzdHlsZVxuICAgICAqL1xuICAgIGNvcHlSYXdWYWx1ZXNPbmx5KHN0eWxlLCBzdHlsZVByb3AsIHByb3BzKTtcbiAgICBPYmplY3QuYXNzaWduKHN0eWxlLCB1c2VJbml0aWFsTW90aW9uVmFsdWVzKHByb3BzLCB2aXN1YWxTdGF0ZSwgaXNTdGF0aWMpKTtcbiAgICBpZiAocHJvcHMudHJhbnNmb3JtVmFsdWVzKSB7XG4gICAgICAgIHN0eWxlID0gcHJvcHMudHJhbnNmb3JtVmFsdWVzKHN0eWxlKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0eWxlO1xufVxuZnVuY3Rpb24gdXNlSFRNTFByb3BzKHByb3BzLCB2aXN1YWxTdGF0ZSwgaXNTdGF0aWMpIHtcbiAgICAvLyBUaGUgYGFueWAgaXNuJ3QgaWRlYWwgYnV0IGl0IGlzIHRoZSB0eXBlIG9mIGNyZWF0ZUVsZW1lbnQgcHJvcHMgYXJndW1lbnRcbiAgICB2YXIgaHRtbFByb3BzID0ge307XG4gICAgdmFyIHN0eWxlID0gdXNlU3R5bGUocHJvcHMsIHZpc3VhbFN0YXRlLCBpc1N0YXRpYyk7XG4gICAgaWYgKEJvb2xlYW4ocHJvcHMuZHJhZykgJiYgcHJvcHMuZHJhZ0xpc3RlbmVyICE9PSBmYWxzZSkge1xuICAgICAgICAvLyBEaXNhYmxlIHRoZSBnaG9zdCBlbGVtZW50IHdoZW4gYSB1c2VyIGRyYWdzXG4gICAgICAgIGh0bWxQcm9wcy5kcmFnZ2FibGUgPSBmYWxzZTtcbiAgICAgICAgLy8gRGlzYWJsZSB0ZXh0IHNlbGVjdGlvblxuICAgICAgICBzdHlsZS51c2VyU2VsZWN0ID1cbiAgICAgICAgICAgIHN0eWxlLldlYmtpdFVzZXJTZWxlY3QgPVxuICAgICAgICAgICAgICAgIHN0eWxlLldlYmtpdFRvdWNoQ2FsbG91dCA9XG4gICAgICAgICAgICAgICAgICAgIFwibm9uZVwiO1xuICAgICAgICAvLyBEaXNhYmxlIHNjcm9sbGluZyBvbiB0aGUgZHJhZ2dhYmxlIGRpcmVjdGlvblxuICAgICAgICBzdHlsZS50b3VjaEFjdGlvbiA9XG4gICAgICAgICAgICBwcm9wcy5kcmFnID09PSB0cnVlXG4gICAgICAgICAgICAgICAgPyBcIm5vbmVcIlxuICAgICAgICAgICAgICAgIDogXCJwYW4tXCIuY29uY2F0KHByb3BzLmRyYWcgPT09IFwieFwiID8gXCJ5XCIgOiBcInhcIik7XG4gICAgfVxuICAgIGh0bWxQcm9wcy5zdHlsZSA9IHN0eWxlO1xuICAgIHJldHVybiBodG1sUHJvcHM7XG59XG5cbmV4cG9ydCB7IGNvcHlSYXdWYWx1ZXNPbmx5LCB1c2VIVE1MUHJvcHMsIHVzZVN0eWxlIH07XG4iLCIvKipcbiAqIEEgbGlzdCBvZiBhbGwgdmFsaWQgTW90aW9uUHJvcHMuXG4gKlxuICogQHByaXZhdGVSZW1hcmtzXG4gKiBUaGlzIGRvZXNuJ3QgdGhyb3cgaWYgYSBgTW90aW9uUHJvcGAgbmFtZSBpcyBtaXNzaW5nIC0gaXQgc2hvdWxkLlxuICovXG52YXIgdmFsaWRNb3Rpb25Qcm9wcyA9IG5ldyBTZXQoW1xuICAgIFwiaW5pdGlhbFwiLFxuICAgIFwiYW5pbWF0ZVwiLFxuICAgIFwiZXhpdFwiLFxuICAgIFwic3R5bGVcIixcbiAgICBcInZhcmlhbnRzXCIsXG4gICAgXCJ0cmFuc2l0aW9uXCIsXG4gICAgXCJ0cmFuc2Zvcm1UZW1wbGF0ZVwiLFxuICAgIFwidHJhbnNmb3JtVmFsdWVzXCIsXG4gICAgXCJjdXN0b21cIixcbiAgICBcImluaGVyaXRcIixcbiAgICBcImxheW91dFwiLFxuICAgIFwibGF5b3V0SWRcIixcbiAgICBcImxheW91dERlcGVuZGVuY3lcIixcbiAgICBcIm9uTGF5b3V0QW5pbWF0aW9uU3RhcnRcIixcbiAgICBcIm9uTGF5b3V0QW5pbWF0aW9uQ29tcGxldGVcIixcbiAgICBcIm9uTGF5b3V0TWVhc3VyZVwiLFxuICAgIFwib25CZWZvcmVMYXlvdXRNZWFzdXJlXCIsXG4gICAgXCJvbkFuaW1hdGlvblN0YXJ0XCIsXG4gICAgXCJvbkFuaW1hdGlvbkNvbXBsZXRlXCIsXG4gICAgXCJvblVwZGF0ZVwiLFxuICAgIFwib25EcmFnU3RhcnRcIixcbiAgICBcIm9uRHJhZ1wiLFxuICAgIFwib25EcmFnRW5kXCIsXG4gICAgXCJvbk1lYXN1cmVEcmFnQ29uc3RyYWludHNcIixcbiAgICBcIm9uRGlyZWN0aW9uTG9ja1wiLFxuICAgIFwib25EcmFnVHJhbnNpdGlvbkVuZFwiLFxuICAgIFwiZHJhZ1wiLFxuICAgIFwiZHJhZ0NvbnRyb2xzXCIsXG4gICAgXCJkcmFnTGlzdGVuZXJcIixcbiAgICBcImRyYWdDb25zdHJhaW50c1wiLFxuICAgIFwiZHJhZ0RpcmVjdGlvbkxvY2tcIixcbiAgICBcImRyYWdTbmFwVG9PcmlnaW5cIixcbiAgICBcIl9kcmFnWFwiLFxuICAgIFwiX2RyYWdZXCIsXG4gICAgXCJkcmFnRWxhc3RpY1wiLFxuICAgIFwiZHJhZ01vbWVudHVtXCIsXG4gICAgXCJkcmFnUHJvcGFnYXRpb25cIixcbiAgICBcImRyYWdUcmFuc2l0aW9uXCIsXG4gICAgXCJ3aGlsZURyYWdcIixcbiAgICBcIm9uUGFuXCIsXG4gICAgXCJvblBhblN0YXJ0XCIsXG4gICAgXCJvblBhbkVuZFwiLFxuICAgIFwib25QYW5TZXNzaW9uU3RhcnRcIixcbiAgICBcIm9uVGFwXCIsXG4gICAgXCJvblRhcFN0YXJ0XCIsXG4gICAgXCJvblRhcENhbmNlbFwiLFxuICAgIFwib25Ib3ZlclN0YXJ0XCIsXG4gICAgXCJvbkhvdmVyRW5kXCIsXG4gICAgXCJ3aGlsZUZvY3VzXCIsXG4gICAgXCJ3aGlsZVRhcFwiLFxuICAgIFwid2hpbGVIb3ZlclwiLFxuICAgIFwid2hpbGVJblZpZXdcIixcbiAgICBcIm9uVmlld3BvcnRFbnRlclwiLFxuICAgIFwib25WaWV3cG9ydExlYXZlXCIsXG4gICAgXCJ2aWV3cG9ydFwiLFxuICAgIFwibGF5b3V0U2Nyb2xsXCIsXG5dKTtcbi8qKlxuICogQ2hlY2sgd2hldGhlciBhIHByb3AgbmFtZSBpcyBhIHZhbGlkIGBNb3Rpb25Qcm9wYCBrZXkuXG4gKlxuICogQHBhcmFtIGtleSAtIE5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGNoZWNrXG4gKiBAcmV0dXJucyBgdHJ1ZWAgaXMga2V5IGlzIGEgdmFsaWQgYE1vdGlvblByb3BgLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZE1vdGlvblByb3Aoa2V5KSB7XG4gICAgcmV0dXJuIHZhbGlkTW90aW9uUHJvcHMuaGFzKGtleSk7XG59XG5cbmV4cG9ydCB7IGlzVmFsaWRNb3Rpb25Qcm9wIH07XG4iLCJpbXBvcnQgeyBpc1ZhbGlkTW90aW9uUHJvcCB9IGZyb20gJy4uLy4uLy4uL21vdGlvbi91dGlscy92YWxpZC1wcm9wLm1qcyc7XG5cbnZhciBzaG91bGRGb3J3YXJkID0gZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gIWlzVmFsaWRNb3Rpb25Qcm9wKGtleSk7IH07XG5mdW5jdGlvbiBsb2FkRXh0ZXJuYWxJc1ZhbGlkUHJvcChpc1ZhbGlkUHJvcCkge1xuICAgIGlmICghaXNWYWxpZFByb3ApXG4gICAgICAgIHJldHVybjtcbiAgICAvLyBFeHBsaWNpdGx5IGZpbHRlciBvdXIgZXZlbnRzXG4gICAgc2hvdWxkRm9yd2FyZCA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleS5zdGFydHNXaXRoKFwib25cIikgPyAhaXNWYWxpZE1vdGlvblByb3Aoa2V5KSA6IGlzVmFsaWRQcm9wKGtleSk7XG4gICAgfTtcbn1cbi8qKlxuICogRW1vdGlvbiBhbmQgU3R5bGVkIENvbXBvbmVudHMgYm90aCBhbGxvdyB1c2VycyB0byBwYXNzIHRocm91Z2ggYXJiaXRyYXJ5IHByb3BzIHRvIHRoZWlyIGNvbXBvbmVudHNcbiAqIHRvIGR5bmFtaWNhbGx5IGdlbmVyYXRlIENTUy4gVGhleSBib3RoIHVzZSB0aGUgYEBlbW90aW9uL2lzLXByb3AtdmFsaWRgIHBhY2thZ2UgdG8gZGV0ZXJtaW5lIHdoaWNoXG4gKiBvZiB0aGVzZSBzaG91bGQgYmUgcGFzc2VkIHRvIHRoZSB1bmRlcmx5aW5nIERPTSBub2RlLlxuICpcbiAqIEhvd2V2ZXIsIHdoZW4gc3R5bGluZyBhIE1vdGlvbiBjb21wb25lbnQgYHN0eWxlZChtb3Rpb24uZGl2KWAsIGJvdGggcGFja2FnZXMgcGFzcyB0aHJvdWdoICphbGwqIHByb3BzXG4gKiBhcyBpdCdzIHNlZW4gYXMgYW4gYXJiaXRyYXJ5IGNvbXBvbmVudCByYXRoZXIgdGhhbiBhIERPTSBub2RlLiBNb3Rpb24gb25seSBhbGxvd3MgYXJiaXRyYXJ5IHByb3BzXG4gKiBwYXNzZWQgdGhyb3VnaCB0aGUgYGN1c3RvbWAgcHJvcCBzbyBpdCBkb2Vzbid0ICpuZWVkKiB0aGUgcGF5bG9hZCBvciBjb21wdXRhdGlvbmFsIG92ZXJoZWFkIG9mXG4gKiBgQGVtb3Rpb24vaXMtcHJvcC12YWxpZGAsIGhvd2V2ZXIgdG8gZml4IHRoaXMgcHJvYmxlbSB3ZSBuZWVkIHRvIHVzZSBpdC5cbiAqXG4gKiBCeSBtYWtpbmcgaXQgYW4gb3B0aW9uYWxEZXBlbmRlbmN5IHdlIGNhbiBvZmZlciB0aGlzIGZ1bmN0aW9uYWxpdHkgb25seSBpbiB0aGUgc2l0dWF0aW9ucyB3aGVyZSBpdCdzXG4gKiBhY3R1YWxseSByZXF1aXJlZC5cbiAqL1xudHJ5IHtcbiAgICAvKipcbiAgICAgKiBXZSBhdHRlbXB0IHRvIGltcG9ydCB0aGlzIHBhY2thZ2UgYnV0IHJlcXVpcmUgd29uJ3QgYmUgZGVmaW5lZCBpbiBlc20gZW52aXJvbm1lbnRzLCBpbiB0aGF0IGNhc2VcbiAgICAgKiBpc1Byb3BWYWxpZCB3aWxsIGhhdmUgdG8gYmUgcHJvdmlkZWQgdmlhIGBNb3Rpb25Db250ZXh0YC4gSW4gYSA2LjAuMCB0aGlzIHNob3VsZCBwcm9iYWJseSBiZSByZW1vdmVkXG4gICAgICogaW4gZmF2b3VyIG9mIGV4cGxpY2l0IGluamVjdGlvbi5cbiAgICAgKi9cbiAgICBsb2FkRXh0ZXJuYWxJc1ZhbGlkUHJvcChyZXF1aXJlKFwiQGVtb3Rpb24vaXMtcHJvcC12YWxpZFwiKS5kZWZhdWx0KTtcbn1cbmNhdGNoIChfYSkge1xuICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gYWN0dWFsbHkgZG8gYW55dGhpbmcgaGVyZSAtIHRoZSBmYWxsYmFjayBpcyB0aGUgZXhpc3RpbmcgYGlzUHJvcFZhbGlkYC5cbn1cbmZ1bmN0aW9uIGZpbHRlclByb3BzKHByb3BzLCBpc0RvbSwgZm9yd2FyZE1vdGlvblByb3BzKSB7XG4gICAgdmFyIGZpbHRlcmVkUHJvcHMgPSB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gcHJvcHMpIHtcbiAgICAgICAgaWYgKHNob3VsZEZvcndhcmQoa2V5KSB8fFxuICAgICAgICAgICAgKGZvcndhcmRNb3Rpb25Qcm9wcyA9PT0gdHJ1ZSAmJiBpc1ZhbGlkTW90aW9uUHJvcChrZXkpKSB8fFxuICAgICAgICAgICAgKCFpc0RvbSAmJiAhaXNWYWxpZE1vdGlvblByb3Aoa2V5KSkgfHxcbiAgICAgICAgICAgIC8vIElmIHRyeWluZyB0byB1c2UgbmF0aXZlIEhUTUwgZHJhZyBldmVudHMsIGZvcndhcmQgZHJhZyBsaXN0ZW5lcnNcbiAgICAgICAgICAgIChwcm9wc1tcImRyYWdnYWJsZVwiXSAmJiBrZXkuc3RhcnRzV2l0aChcIm9uRHJhZ1wiKSkpIHtcbiAgICAgICAgICAgIGZpbHRlcmVkUHJvcHNba2V5XSA9IHByb3BzW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcmVkUHJvcHM7XG59XG5cbmV4cG9ydCB7IGZpbHRlclByb3BzLCBsb2FkRXh0ZXJuYWxJc1ZhbGlkUHJvcCB9O1xuIiwiaW1wb3J0IHsgcHggfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5cbmZ1bmN0aW9uIGNhbGNPcmlnaW4ob3JpZ2luLCBvZmZzZXQsIHNpemUpIHtcbiAgICByZXR1cm4gdHlwZW9mIG9yaWdpbiA9PT0gXCJzdHJpbmdcIlxuICAgICAgICA/IG9yaWdpblxuICAgICAgICA6IHB4LnRyYW5zZm9ybShvZmZzZXQgKyBzaXplICogb3JpZ2luKTtcbn1cbi8qKlxuICogVGhlIFNWRyB0cmFuc2Zvcm0gb3JpZ2luIGRlZmF1bHRzIGFyZSBkaWZmZXJlbnQgdG8gQ1NTIGFuZCBpcyBsZXNzIGludHVpdGl2ZSxcbiAqIHNvIHdlIHVzZSB0aGUgbWVhc3VyZWQgZGltZW5zaW9ucyBvZiB0aGUgU1ZHIHRvIHJlY29uY2lsZSB0aGVzZS5cbiAqL1xuZnVuY3Rpb24gY2FsY1NWR1RyYW5zZm9ybU9yaWdpbihkaW1lbnNpb25zLCBvcmlnaW5YLCBvcmlnaW5ZKSB7XG4gICAgdmFyIHB4T3JpZ2luWCA9IGNhbGNPcmlnaW4ob3JpZ2luWCwgZGltZW5zaW9ucy54LCBkaW1lbnNpb25zLndpZHRoKTtcbiAgICB2YXIgcHhPcmlnaW5ZID0gY2FsY09yaWdpbihvcmlnaW5ZLCBkaW1lbnNpb25zLnksIGRpbWVuc2lvbnMuaGVpZ2h0KTtcbiAgICByZXR1cm4gXCJcIi5jb25jYXQocHhPcmlnaW5YLCBcIiBcIikuY29uY2F0KHB4T3JpZ2luWSk7XG59XG5cbmV4cG9ydCB7IGNhbGNTVkdUcmFuc2Zvcm1PcmlnaW4gfTtcbiIsImltcG9ydCB7IHB4IH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuXG52YXIgZGFzaEtleXMgPSB7XG4gICAgb2Zmc2V0OiBcInN0cm9rZS1kYXNob2Zmc2V0XCIsXG4gICAgYXJyYXk6IFwic3Ryb2tlLWRhc2hhcnJheVwiLFxufTtcbnZhciBjYW1lbEtleXMgPSB7XG4gICAgb2Zmc2V0OiBcInN0cm9rZURhc2hvZmZzZXRcIixcbiAgICBhcnJheTogXCJzdHJva2VEYXNoYXJyYXlcIixcbn07XG4vKipcbiAqIEJ1aWxkIFNWRyBwYXRoIHByb3BlcnRpZXMuIFVzZXMgdGhlIHBhdGgncyBtZWFzdXJlZCBsZW5ndGggdG8gY29udmVydFxuICogb3VyIGN1c3RvbSBwYXRoTGVuZ3RoLCBwYXRoU3BhY2luZyBhbmQgcGF0aE9mZnNldCBpbnRvIHN0cm9rZS1kYXNob2Zmc2V0XG4gKiBhbmQgc3Ryb2tlLWRhc2hhcnJheSBhdHRyaWJ1dGVzLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gaXMgbXV0YXRpdmUgdG8gcmVkdWNlIHBlci1mcmFtZSBHQy5cbiAqL1xuZnVuY3Rpb24gYnVpbGRTVkdQYXRoKGF0dHJzLCBsZW5ndGgsIHNwYWNpbmcsIG9mZnNldCwgdXNlRGFzaENhc2UpIHtcbiAgICBpZiAoc3BhY2luZyA9PT0gdm9pZCAwKSB7IHNwYWNpbmcgPSAxOyB9XG4gICAgaWYgKG9mZnNldCA9PT0gdm9pZCAwKSB7IG9mZnNldCA9IDA7IH1cbiAgICBpZiAodXNlRGFzaENhc2UgPT09IHZvaWQgMCkgeyB1c2VEYXNoQ2FzZSA9IHRydWU7IH1cbiAgICAvLyBOb3JtYWxpc2UgcGF0aCBsZW5ndGggYnkgc2V0dGluZyBTVkcgYXR0cmlidXRlIHBhdGhMZW5ndGggdG8gMVxuICAgIGF0dHJzLnBhdGhMZW5ndGggPSAxO1xuICAgIC8vIFdlIHVzZSBkYXNoIGNhc2Ugd2hlbiBzZXR0aW5nIGF0dHJpYnV0ZXMgZGlyZWN0bHkgdG8gdGhlIERPTSBub2RlIGFuZCBjYW1lbCBjYXNlXG4gICAgLy8gd2hlbiBkZWZpbmluZyBwcm9wcyBvbiBhIFJlYWN0IGNvbXBvbmVudC5cbiAgICB2YXIga2V5cyA9IHVzZURhc2hDYXNlID8gZGFzaEtleXMgOiBjYW1lbEtleXM7XG4gICAgLy8gQnVpbGQgdGhlIGRhc2ggb2Zmc2V0XG4gICAgYXR0cnNba2V5cy5vZmZzZXRdID0gcHgudHJhbnNmb3JtKC1vZmZzZXQpO1xuICAgIC8vIEJ1aWxkIHRoZSBkYXNoIGFycmF5XG4gICAgdmFyIHBhdGhMZW5ndGggPSBweC50cmFuc2Zvcm0obGVuZ3RoKTtcbiAgICB2YXIgcGF0aFNwYWNpbmcgPSBweC50cmFuc2Zvcm0oc3BhY2luZyk7XG4gICAgYXR0cnNba2V5cy5hcnJheV0gPSBcIlwiLmNvbmNhdChwYXRoTGVuZ3RoLCBcIiBcIikuY29uY2F0KHBhdGhTcGFjaW5nKTtcbn1cblxuZXhwb3J0IHsgYnVpbGRTVkdQYXRoIH07XG4iLCJpbXBvcnQgeyBfX3Jlc3QgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBidWlsZEhUTUxTdHlsZXMgfSBmcm9tICcuLi8uLi9odG1sL3V0aWxzL2J1aWxkLXN0eWxlcy5tanMnO1xuaW1wb3J0IHsgY2FsY1NWR1RyYW5zZm9ybU9yaWdpbiB9IGZyb20gJy4vdHJhbnNmb3JtLW9yaWdpbi5tanMnO1xuaW1wb3J0IHsgYnVpbGRTVkdQYXRoIH0gZnJvbSAnLi9wYXRoLm1qcyc7XG5cbi8qKlxuICogQnVpbGQgU1ZHIHZpc3VhbCBhdHRyYnV0ZXMsIGxpa2UgY3ggYW5kIHN0eWxlLnRyYW5zZm9ybVxuICovXG5mdW5jdGlvbiBidWlsZFNWR0F0dHJzKHN0YXRlLCBfYSwgb3B0aW9ucywgdHJhbnNmb3JtVGVtcGxhdGUpIHtcbiAgICB2YXIgYXR0clggPSBfYS5hdHRyWCwgYXR0clkgPSBfYS5hdHRyWSwgb3JpZ2luWCA9IF9hLm9yaWdpblgsIG9yaWdpblkgPSBfYS5vcmlnaW5ZLCBwYXRoTGVuZ3RoID0gX2EucGF0aExlbmd0aCwgX2IgPSBfYS5wYXRoU3BhY2luZywgcGF0aFNwYWNpbmcgPSBfYiA9PT0gdm9pZCAwID8gMSA6IF9iLCBfYyA9IF9hLnBhdGhPZmZzZXQsIHBhdGhPZmZzZXQgPSBfYyA9PT0gdm9pZCAwID8gMCA6IF9jLCBcbiAgICAvLyBUaGlzIGlzIG9iamVjdCBjcmVhdGlvbiwgd2hpY2ggd2UgdHJ5IHRvIGF2b2lkIHBlci1mcmFtZS5cbiAgICBsYXRlc3QgPSBfX3Jlc3QoX2EsIFtcImF0dHJYXCIsIFwiYXR0cllcIiwgXCJvcmlnaW5YXCIsIFwib3JpZ2luWVwiLCBcInBhdGhMZW5ndGhcIiwgXCJwYXRoU3BhY2luZ1wiLCBcInBhdGhPZmZzZXRcIl0pO1xuICAgIGJ1aWxkSFRNTFN0eWxlcyhzdGF0ZSwgbGF0ZXN0LCBvcHRpb25zLCB0cmFuc2Zvcm1UZW1wbGF0ZSk7XG4gICAgc3RhdGUuYXR0cnMgPSBzdGF0ZS5zdHlsZTtcbiAgICBzdGF0ZS5zdHlsZSA9IHt9O1xuICAgIHZhciBhdHRycyA9IHN0YXRlLmF0dHJzLCBzdHlsZSA9IHN0YXRlLnN0eWxlLCBkaW1lbnNpb25zID0gc3RhdGUuZGltZW5zaW9ucztcbiAgICAvKipcbiAgICAgKiBIb3dldmVyLCB3ZSBhcHBseSB0cmFuc2Zvcm1zIGFzIENTUyB0cmFuc2Zvcm1zLiBTbyBpZiB3ZSBkZXRlY3QgYSB0cmFuc2Zvcm0gd2UgdGFrZSBpdCBmcm9tIGF0dHJzXG4gICAgICogYW5kIGNvcHkgaXQgaW50byBzdHlsZS5cbiAgICAgKi9cbiAgICBpZiAoYXR0cnMudHJhbnNmb3JtKSB7XG4gICAgICAgIGlmIChkaW1lbnNpb25zKVxuICAgICAgICAgICAgc3R5bGUudHJhbnNmb3JtID0gYXR0cnMudHJhbnNmb3JtO1xuICAgICAgICBkZWxldGUgYXR0cnMudHJhbnNmb3JtO1xuICAgIH1cbiAgICAvLyBQYXJzZSB0cmFuc2Zvcm1PcmlnaW5cbiAgICBpZiAoZGltZW5zaW9ucyAmJlxuICAgICAgICAob3JpZ2luWCAhPT0gdW5kZWZpbmVkIHx8IG9yaWdpblkgIT09IHVuZGVmaW5lZCB8fCBzdHlsZS50cmFuc2Zvcm0pKSB7XG4gICAgICAgIHN0eWxlLnRyYW5zZm9ybU9yaWdpbiA9IGNhbGNTVkdUcmFuc2Zvcm1PcmlnaW4oZGltZW5zaW9ucywgb3JpZ2luWCAhPT0gdW5kZWZpbmVkID8gb3JpZ2luWCA6IDAuNSwgb3JpZ2luWSAhPT0gdW5kZWZpbmVkID8gb3JpZ2luWSA6IDAuNSk7XG4gICAgfVxuICAgIC8vIFRyZWF0IHgveSBub3QgYXMgc2hvcnRjdXRzIGJ1dCBhcyBhY3R1YWwgYXR0cmlidXRlc1xuICAgIGlmIChhdHRyWCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICBhdHRycy54ID0gYXR0clg7XG4gICAgaWYgKGF0dHJZICE9PSB1bmRlZmluZWQpXG4gICAgICAgIGF0dHJzLnkgPSBhdHRyWTtcbiAgICAvLyBCdWlsZCBTVkcgcGF0aCBpZiBvbmUgaGFzIGJlZW4gZGVmaW5lZFxuICAgIGlmIChwYXRoTGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgYnVpbGRTVkdQYXRoKGF0dHJzLCBwYXRoTGVuZ3RoLCBwYXRoU3BhY2luZywgcGF0aE9mZnNldCwgZmFsc2UpO1xuICAgIH1cbn1cblxuZXhwb3J0IHsgYnVpbGRTVkdBdHRycyB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBjcmVhdGVIdG1sUmVuZGVyU3RhdGUgfSBmcm9tICcuLi8uLi9odG1sL3V0aWxzL2NyZWF0ZS1yZW5kZXItc3RhdGUubWpzJztcblxudmFyIGNyZWF0ZVN2Z1JlbmRlclN0YXRlID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKF9fYXNzaWduKF9fYXNzaWduKHt9LCBjcmVhdGVIdG1sUmVuZGVyU3RhdGUoKSksIHsgYXR0cnM6IHt9IH0pKTsgfTtcblxuZXhwb3J0IHsgY3JlYXRlU3ZnUmVuZGVyU3RhdGUgfTtcbiIsImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGNvcHlSYXdWYWx1ZXNPbmx5IH0gZnJvbSAnLi4vaHRtbC91c2UtcHJvcHMubWpzJztcbmltcG9ydCB7IGJ1aWxkU1ZHQXR0cnMgfSBmcm9tICcuL3V0aWxzL2J1aWxkLWF0dHJzLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVTdmdSZW5kZXJTdGF0ZSB9IGZyb20gJy4vdXRpbHMvY3JlYXRlLXJlbmRlci1zdGF0ZS5tanMnO1xuXG5mdW5jdGlvbiB1c2VTVkdQcm9wcyhwcm9wcywgdmlzdWFsU3RhdGUpIHtcbiAgICB2YXIgdmlzdWFsUHJvcHMgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gY3JlYXRlU3ZnUmVuZGVyU3RhdGUoKTtcbiAgICAgICAgYnVpbGRTVkdBdHRycyhzdGF0ZSwgdmlzdWFsU3RhdGUsIHsgZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb246IGZhbHNlIH0sIHByb3BzLnRyYW5zZm9ybVRlbXBsYXRlKTtcbiAgICAgICAgcmV0dXJuIF9fYXNzaWduKF9fYXNzaWduKHt9LCBzdGF0ZS5hdHRycyksIHsgc3R5bGU6IF9fYXNzaWduKHt9LCBzdGF0ZS5zdHlsZSkgfSk7XG4gICAgfSwgW3Zpc3VhbFN0YXRlXSk7XG4gICAgaWYgKHByb3BzLnN0eWxlKSB7XG4gICAgICAgIHZhciByYXdTdHlsZXMgPSB7fTtcbiAgICAgICAgY29weVJhd1ZhbHVlc09ubHkocmF3U3R5bGVzLCBwcm9wcy5zdHlsZSwgcHJvcHMpO1xuICAgICAgICB2aXN1YWxQcm9wcy5zdHlsZSA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCByYXdTdHlsZXMpLCB2aXN1YWxQcm9wcy5zdHlsZSk7XG4gICAgfVxuICAgIHJldHVybiB2aXN1YWxQcm9wcztcbn1cblxuZXhwb3J0IHsgdXNlU1ZHUHJvcHMgfTtcbiIsImltcG9ydCB7IF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZUhUTUxQcm9wcyB9IGZyb20gJy4uL2h0bWwvdXNlLXByb3BzLm1qcyc7XG5pbXBvcnQgeyBmaWx0ZXJQcm9wcyB9IGZyb20gJy4vdXRpbHMvZmlsdGVyLXByb3BzLm1qcyc7XG5pbXBvcnQgeyBpc1NWR0NvbXBvbmVudCB9IGZyb20gJy4vdXRpbHMvaXMtc3ZnLWNvbXBvbmVudC5tanMnO1xuaW1wb3J0IHsgdXNlU1ZHUHJvcHMgfSBmcm9tICcuLi9zdmcvdXNlLXByb3BzLm1qcyc7XG5cbmZ1bmN0aW9uIGNyZWF0ZVVzZVJlbmRlcihmb3J3YXJkTW90aW9uUHJvcHMpIHtcbiAgICBpZiAoZm9yd2FyZE1vdGlvblByb3BzID09PSB2b2lkIDApIHsgZm9yd2FyZE1vdGlvblByb3BzID0gZmFsc2U7IH1cbiAgICB2YXIgdXNlUmVuZGVyID0gZnVuY3Rpb24gKENvbXBvbmVudCwgcHJvcHMsIHByb2plY3Rpb25JZCwgcmVmLCBfYSwgaXNTdGF0aWMpIHtcbiAgICAgICAgdmFyIGxhdGVzdFZhbHVlcyA9IF9hLmxhdGVzdFZhbHVlcztcbiAgICAgICAgdmFyIHVzZVZpc3VhbFByb3BzID0gaXNTVkdDb21wb25lbnQoQ29tcG9uZW50KVxuICAgICAgICAgICAgPyB1c2VTVkdQcm9wc1xuICAgICAgICAgICAgOiB1c2VIVE1MUHJvcHM7XG4gICAgICAgIHZhciB2aXN1YWxQcm9wcyA9IHVzZVZpc3VhbFByb3BzKHByb3BzLCBsYXRlc3RWYWx1ZXMsIGlzU3RhdGljKTtcbiAgICAgICAgdmFyIGZpbHRlcmVkUHJvcHMgPSBmaWx0ZXJQcm9wcyhwcm9wcywgdHlwZW9mIENvbXBvbmVudCA9PT0gXCJzdHJpbmdcIiwgZm9yd2FyZE1vdGlvblByb3BzKTtcbiAgICAgICAgdmFyIGVsZW1lbnRQcm9wcyA9IF9fYXNzaWduKF9fYXNzaWduKF9fYXNzaWduKHt9LCBmaWx0ZXJlZFByb3BzKSwgdmlzdWFsUHJvcHMpLCB7IHJlZjogcmVmIH0pO1xuICAgICAgICBpZiAocHJvamVjdGlvbklkKSB7XG4gICAgICAgICAgICBlbGVtZW50UHJvcHNbXCJkYXRhLXByb2plY3Rpb24taWRcIl0gPSBwcm9qZWN0aW9uSWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoQ29tcG9uZW50LCBlbGVtZW50UHJvcHMpO1xuICAgIH07XG4gICAgcmV0dXJuIHVzZVJlbmRlcjtcbn1cblxuZXhwb3J0IHsgY3JlYXRlVXNlUmVuZGVyIH07XG4iLCJ2YXIgQ0FNRUxfQ0FTRV9QQVRURVJOID0gLyhbYS16XSkoW0EtWl0pL2c7XG52YXIgUkVQTEFDRV9URU1QTEFURSA9IFwiJDEtJDJcIjtcbi8qKlxuICogQ29udmVydCBjYW1lbENhc2UgdG8gZGFzaC1jYXNlIHByb3BlcnRpZXMuXG4gKi9cbnZhciBjYW1lbFRvRGFzaCA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoQ0FNRUxfQ0FTRV9QQVRURVJOLCBSRVBMQUNFX1RFTVBMQVRFKS50b0xvd2VyQ2FzZSgpO1xufTtcblxuZXhwb3J0IHsgY2FtZWxUb0Rhc2ggfTtcbiIsImZ1bmN0aW9uIHJlbmRlckhUTUwoZWxlbWVudCwgX2EsIHN0eWxlUHJvcCwgcHJvamVjdGlvbikge1xuICAgIHZhciBzdHlsZSA9IF9hLnN0eWxlLCB2YXJzID0gX2EudmFycztcbiAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlLCBwcm9qZWN0aW9uICYmIHByb2plY3Rpb24uZ2V0UHJvamVjdGlvblN0eWxlcyhzdHlsZVByb3ApKTtcbiAgICAvLyBMb29wIG92ZXIgYW55IENTUyB2YXJpYWJsZXMgYW5kIGFzc2lnbiB0aG9zZS5cbiAgICBmb3IgKHZhciBrZXkgaW4gdmFycykge1xuICAgICAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KGtleSwgdmFyc1trZXldKTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IHJlbmRlckhUTUwgfTtcbiIsIi8qKlxuICogQSBzZXQgb2YgYXR0cmlidXRlIG5hbWVzIHRoYXQgYXJlIGFsd2F5cyByZWFkL3dyaXR0ZW4gYXMgY2FtZWwgY2FzZS5cbiAqL1xudmFyIGNhbWVsQ2FzZUF0dHJpYnV0ZXMgPSBuZXcgU2V0KFtcbiAgICBcImJhc2VGcmVxdWVuY3lcIixcbiAgICBcImRpZmZ1c2VDb25zdGFudFwiLFxuICAgIFwia2VybmVsTWF0cml4XCIsXG4gICAgXCJrZXJuZWxVbml0TGVuZ3RoXCIsXG4gICAgXCJrZXlTcGxpbmVzXCIsXG4gICAgXCJrZXlUaW1lc1wiLFxuICAgIFwibGltaXRpbmdDb25lQW5nbGVcIixcbiAgICBcIm1hcmtlckhlaWdodFwiLFxuICAgIFwibWFya2VyV2lkdGhcIixcbiAgICBcIm51bU9jdGF2ZXNcIixcbiAgICBcInRhcmdldFhcIixcbiAgICBcInRhcmdldFlcIixcbiAgICBcInN1cmZhY2VTY2FsZVwiLFxuICAgIFwic3BlY3VsYXJDb25zdGFudFwiLFxuICAgIFwic3BlY3VsYXJFeHBvbmVudFwiLFxuICAgIFwic3RkRGV2aWF0aW9uXCIsXG4gICAgXCJ0YWJsZVZhbHVlc1wiLFxuICAgIFwidmlld0JveFwiLFxuICAgIFwiZ3JhZGllbnRUcmFuc2Zvcm1cIixcbiAgICBcInBhdGhMZW5ndGhcIixcbl0pO1xuXG5leHBvcnQgeyBjYW1lbENhc2VBdHRyaWJ1dGVzIH07XG4iLCJpbXBvcnQgeyBjYW1lbFRvRGFzaCB9IGZyb20gJy4uLy4uL2RvbS91dGlscy9jYW1lbC10by1kYXNoLm1qcyc7XG5pbXBvcnQgeyByZW5kZXJIVE1MIH0gZnJvbSAnLi4vLi4vaHRtbC91dGlscy9yZW5kZXIubWpzJztcbmltcG9ydCB7IGNhbWVsQ2FzZUF0dHJpYnV0ZXMgfSBmcm9tICcuL2NhbWVsLWNhc2UtYXR0cnMubWpzJztcblxuZnVuY3Rpb24gcmVuZGVyU1ZHKGVsZW1lbnQsIHJlbmRlclN0YXRlLCBfc3R5bGVQcm9wLCBwcm9qZWN0aW9uKSB7XG4gICAgcmVuZGVySFRNTChlbGVtZW50LCByZW5kZXJTdGF0ZSwgdW5kZWZpbmVkLCBwcm9qZWN0aW9uKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gcmVuZGVyU3RhdGUuYXR0cnMpIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoIWNhbWVsQ2FzZUF0dHJpYnV0ZXMuaGFzKGtleSkgPyBjYW1lbFRvRGFzaChrZXkpIDoga2V5LCByZW5kZXJTdGF0ZS5hdHRyc1trZXldKTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IHJlbmRlclNWRyB9O1xuIiwiaW1wb3J0IHsgaXNGb3JjZWRNb3Rpb25WYWx1ZSB9IGZyb20gJy4uLy4uLy4uL21vdGlvbi91dGlscy9pcy1mb3JjZWQtbW90aW9uLXZhbHVlLm1qcyc7XG5pbXBvcnQgeyBpc01vdGlvblZhbHVlIH0gZnJvbSAnLi4vLi4vLi4vdmFsdWUvdXRpbHMvaXMtbW90aW9uLXZhbHVlLm1qcyc7XG5cbmZ1bmN0aW9uIHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyhwcm9wcykge1xuICAgIHZhciBzdHlsZSA9IHByb3BzLnN0eWxlO1xuICAgIHZhciBuZXdWYWx1ZXMgPSB7fTtcbiAgICBmb3IgKHZhciBrZXkgaW4gc3R5bGUpIHtcbiAgICAgICAgaWYgKGlzTW90aW9uVmFsdWUoc3R5bGVba2V5XSkgfHwgaXNGb3JjZWRNb3Rpb25WYWx1ZShrZXksIHByb3BzKSkge1xuICAgICAgICAgICAgbmV3VmFsdWVzW2tleV0gPSBzdHlsZVtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdWYWx1ZXM7XG59XG5cbmV4cG9ydCB7IHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyB9O1xuIiwiaW1wb3J0IHsgaXNNb3Rpb25WYWx1ZSB9IGZyb20gJy4uLy4uLy4uL3ZhbHVlL3V0aWxzL2lzLW1vdGlvbi12YWx1ZS5tanMnO1xuaW1wb3J0IHsgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzIGFzIHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyQxIH0gZnJvbSAnLi4vLi4vaHRtbC91dGlscy9zY3JhcGUtbW90aW9uLXZhbHVlcy5tanMnO1xuXG5mdW5jdGlvbiBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMocHJvcHMpIHtcbiAgICB2YXIgbmV3VmFsdWVzID0gc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzJDEocHJvcHMpO1xuICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgICBpZiAoaXNNb3Rpb25WYWx1ZShwcm9wc1trZXldKSkge1xuICAgICAgICAgICAgdmFyIHRhcmdldEtleSA9IGtleSA9PT0gXCJ4XCIgfHwga2V5ID09PSBcInlcIiA/IFwiYXR0clwiICsga2V5LnRvVXBwZXJDYXNlKCkgOiBrZXk7XG4gICAgICAgICAgICBuZXdWYWx1ZXNbdGFyZ2V0S2V5XSA9IHByb3BzW2tleV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld1ZhbHVlcztcbn1cblxuZXhwb3J0IHsgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzIH07XG4iLCJmdW5jdGlvbiBpc0FuaW1hdGlvbkNvbnRyb2xzKHYpIHtcbiAgICByZXR1cm4gdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHYuc3RhcnQgPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuZXhwb3J0IHsgaXNBbmltYXRpb25Db250cm9scyB9O1xuIiwidmFyIGlzS2V5ZnJhbWVzVGFyZ2V0ID0gZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2KTtcbn07XG5cbmV4cG9ydCB7IGlzS2V5ZnJhbWVzVGFyZ2V0IH07XG4iLCJpbXBvcnQgeyBpc0tleWZyYW1lc1RhcmdldCB9IGZyb20gJy4uL2FuaW1hdGlvbi91dGlscy9pcy1rZXlmcmFtZXMtdGFyZ2V0Lm1qcyc7XG5cbnZhciBpc0N1c3RvbVZhbHVlID0gZnVuY3Rpb24gKHYpIHtcbiAgICByZXR1cm4gQm9vbGVhbih2ICYmIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYubWl4ICYmIHYudG9WYWx1ZSk7XG59O1xudmFyIHJlc29sdmVGaW5hbFZhbHVlSW5LZXlmcmFtZXMgPSBmdW5jdGlvbiAodikge1xuICAgIC8vIFRPRE8gbWF5YmUgdGhyb3cgaWYgdi5sZW5ndGggLSAxIGlzIHBsYWNlaG9sZGVyIHRva2VuP1xuICAgIHJldHVybiBpc0tleWZyYW1lc1RhcmdldCh2KSA/IHZbdi5sZW5ndGggLSAxXSB8fCAwIDogdjtcbn07XG5cbmV4cG9ydCB7IGlzQ3VzdG9tVmFsdWUsIHJlc29sdmVGaW5hbFZhbHVlSW5LZXlmcmFtZXMgfTtcbiIsImltcG9ydCB7IGlzQ3VzdG9tVmFsdWUgfSBmcm9tICcuLi8uLi91dGlscy9yZXNvbHZlLXZhbHVlLm1qcyc7XG5pbXBvcnQgeyBpc01vdGlvblZhbHVlIH0gZnJvbSAnLi9pcy1tb3Rpb24tdmFsdWUubWpzJztcblxuLyoqXG4gKiBJZiB0aGUgcHJvdmlkZWQgdmFsdWUgaXMgYSBNb3Rpb25WYWx1ZSwgdGhpcyByZXR1cm5zIHRoZSBhY3R1YWwgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHRoZSB2YWx1ZSBpdHNlbGZcbiAqXG4gKiBUT0RPOiBSZW1vdmUgYW5kIG1vdmUgdG8gbGlicmFyeVxuICovXG5mdW5jdGlvbiByZXNvbHZlTW90aW9uVmFsdWUodmFsdWUpIHtcbiAgICB2YXIgdW53cmFwcGVkVmFsdWUgPSBpc01vdGlvblZhbHVlKHZhbHVlKSA/IHZhbHVlLmdldCgpIDogdmFsdWU7XG4gICAgcmV0dXJuIGlzQ3VzdG9tVmFsdWUodW53cmFwcGVkVmFsdWUpXG4gICAgICAgID8gdW53cmFwcGVkVmFsdWUudG9WYWx1ZSgpXG4gICAgICAgIDogdW53cmFwcGVkVmFsdWU7XG59XG5cbmV4cG9ydCB7IHJlc29sdmVNb3Rpb25WYWx1ZSB9O1xuIiwiaW1wb3J0IHsgX19yZXN0IH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzQW5pbWF0aW9uQ29udHJvbHMgfSBmcm9tICcuLi8uLi9hbmltYXRpb24vdXRpbHMvaXMtYW5pbWF0aW9uLWNvbnRyb2xzLm1qcyc7XG5pbXBvcnQgeyBQcmVzZW5jZUNvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L1ByZXNlbmNlQ29udGV4dC5tanMnO1xuaW1wb3J0IHsgY2hlY2tJZkNvbnRyb2xsaW5nVmFyaWFudHMsIGNoZWNrSWZWYXJpYW50Tm9kZSwgcmVzb2x2ZVZhcmlhbnRGcm9tUHJvcHMgfSBmcm9tICcuLi8uLi9yZW5kZXIvdXRpbHMvdmFyaWFudHMubWpzJztcbmltcG9ydCB7IHVzZUNvbnN0YW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvdXNlLWNvbnN0YW50Lm1qcyc7XG5pbXBvcnQgeyByZXNvbHZlTW90aW9uVmFsdWUgfSBmcm9tICcuLi8uLi92YWx1ZS91dGlscy9yZXNvbHZlLW1vdGlvbi12YWx1ZS5tanMnO1xuaW1wb3J0IHsgTW90aW9uQ29udGV4dCB9IGZyb20gJy4uLy4uL2NvbnRleHQvTW90aW9uQ29udGV4dC9pbmRleC5tanMnO1xuXG5mdW5jdGlvbiBtYWtlU3RhdGUoX2EsIHByb3BzLCBjb250ZXh0LCBwcmVzZW5jZUNvbnRleHQpIHtcbiAgICB2YXIgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzID0gX2Euc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzLCBjcmVhdGVSZW5kZXJTdGF0ZSA9IF9hLmNyZWF0ZVJlbmRlclN0YXRlLCBvbk1vdW50ID0gX2Eub25Nb3VudDtcbiAgICB2YXIgc3RhdGUgPSB7XG4gICAgICAgIGxhdGVzdFZhbHVlczogbWFrZUxhdGVzdFZhbHVlcyhwcm9wcywgY29udGV4dCwgcHJlc2VuY2VDb250ZXh0LCBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMpLFxuICAgICAgICByZW5kZXJTdGF0ZTogY3JlYXRlUmVuZGVyU3RhdGUoKSxcbiAgICB9O1xuICAgIGlmIChvbk1vdW50KSB7XG4gICAgICAgIHN0YXRlLm1vdW50ID0gZnVuY3Rpb24gKGluc3RhbmNlKSB7IHJldHVybiBvbk1vdW50KHByb3BzLCBpbnN0YW5jZSwgc3RhdGUpOyB9O1xuICAgIH1cbiAgICByZXR1cm4gc3RhdGU7XG59XG52YXIgbWFrZVVzZVZpc3VhbFN0YXRlID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgIHJldHVybiBmdW5jdGlvbiAocHJvcHMsIGlzU3RhdGljKSB7XG4gICAgICAgIHZhciBjb250ZXh0ID0gdXNlQ29udGV4dChNb3Rpb25Db250ZXh0KTtcbiAgICAgICAgdmFyIHByZXNlbmNlQ29udGV4dCA9IHVzZUNvbnRleHQoUHJlc2VuY2VDb250ZXh0KTtcbiAgICAgICAgcmV0dXJuIGlzU3RhdGljXG4gICAgICAgICAgICA/IG1ha2VTdGF0ZShjb25maWcsIHByb3BzLCBjb250ZXh0LCBwcmVzZW5jZUNvbnRleHQpXG4gICAgICAgICAgICA6IHVzZUNvbnN0YW50KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWFrZVN0YXRlKGNvbmZpZywgcHJvcHMsIGNvbnRleHQsIHByZXNlbmNlQ29udGV4dCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9O1xufTtcbmZ1bmN0aW9uIG1ha2VMYXRlc3RWYWx1ZXMocHJvcHMsIGNvbnRleHQsIHByZXNlbmNlQ29udGV4dCwgc2NyYXBlTW90aW9uVmFsdWVzKSB7XG4gICAgdmFyIHZhbHVlcyA9IHt9O1xuICAgIHZhciBibG9ja0luaXRpYWxBbmltYXRpb24gPSAocHJlc2VuY2VDb250ZXh0ID09PSBudWxsIHx8IHByZXNlbmNlQ29udGV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJlc2VuY2VDb250ZXh0LmluaXRpYWwpID09PSBmYWxzZTtcbiAgICB2YXIgbW90aW9uVmFsdWVzID0gc2NyYXBlTW90aW9uVmFsdWVzKHByb3BzKTtcbiAgICBmb3IgKHZhciBrZXkgaW4gbW90aW9uVmFsdWVzKSB7XG4gICAgICAgIHZhbHVlc1trZXldID0gcmVzb2x2ZU1vdGlvblZhbHVlKG1vdGlvblZhbHVlc1trZXldKTtcbiAgICB9XG4gICAgdmFyIGluaXRpYWwgPSBwcm9wcy5pbml0aWFsLCBhbmltYXRlID0gcHJvcHMuYW5pbWF0ZTtcbiAgICB2YXIgaXNDb250cm9sbGluZ1ZhcmlhbnRzID0gY2hlY2tJZkNvbnRyb2xsaW5nVmFyaWFudHMocHJvcHMpO1xuICAgIHZhciBpc1ZhcmlhbnROb2RlID0gY2hlY2tJZlZhcmlhbnROb2RlKHByb3BzKTtcbiAgICBpZiAoY29udGV4dCAmJlxuICAgICAgICBpc1ZhcmlhbnROb2RlICYmXG4gICAgICAgICFpc0NvbnRyb2xsaW5nVmFyaWFudHMgJiZcbiAgICAgICAgcHJvcHMuaW5oZXJpdCAhPT0gZmFsc2UpIHtcbiAgICAgICAgaW5pdGlhbCAhPT0gbnVsbCAmJiBpbml0aWFsICE9PSB2b2lkIDAgPyBpbml0aWFsIDogKGluaXRpYWwgPSBjb250ZXh0LmluaXRpYWwpO1xuICAgICAgICBhbmltYXRlICE9PSBudWxsICYmIGFuaW1hdGUgIT09IHZvaWQgMCA/IGFuaW1hdGUgOiAoYW5pbWF0ZSA9IGNvbnRleHQuYW5pbWF0ZSk7XG4gICAgfVxuICAgIHZhciBpbml0aWFsQW5pbWF0aW9uSXNCbG9ja2VkID0gYmxvY2tJbml0aWFsQW5pbWF0aW9uIHx8IGluaXRpYWwgPT09IGZhbHNlO1xuICAgIHZhciB2YXJpYW50VG9TZXQgPSBpbml0aWFsQW5pbWF0aW9uSXNCbG9ja2VkID8gYW5pbWF0ZSA6IGluaXRpYWw7XG4gICAgaWYgKHZhcmlhbnRUb1NldCAmJlxuICAgICAgICB0eXBlb2YgdmFyaWFudFRvU2V0ICE9PSBcImJvb2xlYW5cIiAmJlxuICAgICAgICAhaXNBbmltYXRpb25Db250cm9scyh2YXJpYW50VG9TZXQpKSB7XG4gICAgICAgIHZhciBsaXN0ID0gQXJyYXkuaXNBcnJheSh2YXJpYW50VG9TZXQpID8gdmFyaWFudFRvU2V0IDogW3ZhcmlhbnRUb1NldF07XG4gICAgICAgIGxpc3QuZm9yRWFjaChmdW5jdGlvbiAoZGVmaW5pdGlvbikge1xuICAgICAgICAgICAgdmFyIHJlc29sdmVkID0gcmVzb2x2ZVZhcmlhbnRGcm9tUHJvcHMocHJvcHMsIGRlZmluaXRpb24pO1xuICAgICAgICAgICAgaWYgKCFyZXNvbHZlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgdHJhbnNpdGlvbkVuZCA9IHJlc29sdmVkLnRyYW5zaXRpb25FbmQ7IHJlc29sdmVkLnRyYW5zaXRpb247IHZhciB0YXJnZXQgPSBfX3Jlc3QocmVzb2x2ZWQsIFtcInRyYW5zaXRpb25FbmRcIiwgXCJ0cmFuc2l0aW9uXCJdKTtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiB0YXJnZXQpIHtcbiAgICAgICAgICAgICAgICB2YXIgdmFsdWVUYXJnZXQgPSB0YXJnZXRba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZVRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIFRha2UgZmluYWwga2V5ZnJhbWUgaWYgdGhlIGluaXRpYWwgYW5pbWF0aW9uIGlzIGJsb2NrZWQgYmVjYXVzZVxuICAgICAgICAgICAgICAgICAgICAgKiB3ZSB3YW50IHRvIGluaXRpYWxpc2UgYXQgdGhlIGVuZCBvZiB0aGF0IGJsb2NrZWQgYW5pbWF0aW9uLlxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gaW5pdGlhbEFuaW1hdGlvbklzQmxvY2tlZFxuICAgICAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZVRhcmdldC5sZW5ndGggLSAxXG4gICAgICAgICAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlVGFyZ2V0ID0gdmFsdWVUYXJnZXRbaW5kZXhdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodmFsdWVUYXJnZXQgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWVzW2tleV0gPSB2YWx1ZVRhcmdldDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gdHJhbnNpdGlvbkVuZClcbiAgICAgICAgICAgICAgICB2YWx1ZXNba2V5XSA9IHRyYW5zaXRpb25FbmRba2V5XTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZXM7XG59XG5cbmV4cG9ydCB7IG1ha2VVc2VWaXN1YWxTdGF0ZSB9O1xuIiwiaW1wb3J0IHsgcmVuZGVyU1ZHIH0gZnJvbSAnLi91dGlscy9yZW5kZXIubWpzJztcbmltcG9ydCB7IHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyB9IGZyb20gJy4vdXRpbHMvc2NyYXBlLW1vdGlvbi12YWx1ZXMubWpzJztcbmltcG9ydCB7IG1ha2VVc2VWaXN1YWxTdGF0ZSB9IGZyb20gJy4uLy4uL21vdGlvbi91dGlscy91c2UtdmlzdWFsLXN0YXRlLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVTdmdSZW5kZXJTdGF0ZSB9IGZyb20gJy4vdXRpbHMvY3JlYXRlLXJlbmRlci1zdGF0ZS5tanMnO1xuaW1wb3J0IHsgYnVpbGRTVkdBdHRycyB9IGZyb20gJy4vdXRpbHMvYnVpbGQtYXR0cnMubWpzJztcblxudmFyIHN2Z01vdGlvbkNvbmZpZyA9IHtcbiAgICB1c2VWaXN1YWxTdGF0ZTogbWFrZVVzZVZpc3VhbFN0YXRlKHtcbiAgICAgICAgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzOiBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMsXG4gICAgICAgIGNyZWF0ZVJlbmRlclN0YXRlOiBjcmVhdGVTdmdSZW5kZXJTdGF0ZSxcbiAgICAgICAgb25Nb3VudDogZnVuY3Rpb24gKHByb3BzLCBpbnN0YW5jZSwgX2EpIHtcbiAgICAgICAgICAgIHZhciByZW5kZXJTdGF0ZSA9IF9hLnJlbmRlclN0YXRlLCBsYXRlc3RWYWx1ZXMgPSBfYS5sYXRlc3RWYWx1ZXM7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlbmRlclN0YXRlLmRpbWVuc2lvbnMgPVxuICAgICAgICAgICAgICAgICAgICB0eXBlb2YgaW5zdGFuY2UuZ2V0QkJveCA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgPyBpbnN0YW5jZS5nZXRCQm94KClcbiAgICAgICAgICAgICAgICAgICAgICAgIDogaW5zdGFuY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIC8vIE1vc3QgbGlrZWx5IHRyeWluZyB0byBtZWFzdXJlIGFuIHVucmVuZGVyZWQgZWxlbWVudCB1bmRlciBGaXJlZm94XG4gICAgICAgICAgICAgICAgcmVuZGVyU3RhdGUuZGltZW5zaW9ucyA9IHtcbiAgICAgICAgICAgICAgICAgICAgeDogMCxcbiAgICAgICAgICAgICAgICAgICAgeTogMCxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVpbGRTVkdBdHRycyhyZW5kZXJTdGF0ZSwgbGF0ZXN0VmFsdWVzLCB7IGVuYWJsZUhhcmR3YXJlQWNjZWxlcmF0aW9uOiBmYWxzZSB9LCBwcm9wcy50cmFuc2Zvcm1UZW1wbGF0ZSk7XG4gICAgICAgICAgICByZW5kZXJTVkcoaW5zdGFuY2UsIHJlbmRlclN0YXRlKTtcbiAgICAgICAgfSxcbiAgICB9KSxcbn07XG5cbmV4cG9ydCB7IHN2Z01vdGlvbkNvbmZpZyB9O1xuIiwidmFyIEFuaW1hdGlvblR5cGU7XG4oZnVuY3Rpb24gKEFuaW1hdGlvblR5cGUpIHtcbiAgICBBbmltYXRpb25UeXBlW1wiQW5pbWF0ZVwiXSA9IFwiYW5pbWF0ZVwiO1xuICAgIEFuaW1hdGlvblR5cGVbXCJIb3ZlclwiXSA9IFwid2hpbGVIb3ZlclwiO1xuICAgIEFuaW1hdGlvblR5cGVbXCJUYXBcIl0gPSBcIndoaWxlVGFwXCI7XG4gICAgQW5pbWF0aW9uVHlwZVtcIkRyYWdcIl0gPSBcIndoaWxlRHJhZ1wiO1xuICAgIEFuaW1hdGlvblR5cGVbXCJGb2N1c1wiXSA9IFwid2hpbGVGb2N1c1wiO1xuICAgIEFuaW1hdGlvblR5cGVbXCJJblZpZXdcIl0gPSBcIndoaWxlSW5WaWV3XCI7XG4gICAgQW5pbWF0aW9uVHlwZVtcIkV4aXRcIl0gPSBcImV4aXRcIjtcbn0pKEFuaW1hdGlvblR5cGUgfHwgKEFuaW1hdGlvblR5cGUgPSB7fSkpO1xuXG5leHBvcnQgeyBBbmltYXRpb25UeXBlIH07XG4iLCJpbXBvcnQgeyBtYWtlVXNlVmlzdWFsU3RhdGUgfSBmcm9tICcuLi8uLi9tb3Rpb24vdXRpbHMvdXNlLXZpc3VhbC1zdGF0ZS5tanMnO1xuaW1wb3J0IHsgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzIH0gZnJvbSAnLi91dGlscy9zY3JhcGUtbW90aW9uLXZhbHVlcy5tanMnO1xuaW1wb3J0IHsgY3JlYXRlSHRtbFJlbmRlclN0YXRlIH0gZnJvbSAnLi91dGlscy9jcmVhdGUtcmVuZGVyLXN0YXRlLm1qcyc7XG5cbnZhciBodG1sTW90aW9uQ29uZmlnID0ge1xuICAgIHVzZVZpc3VhbFN0YXRlOiBtYWtlVXNlVmlzdWFsU3RhdGUoe1xuICAgICAgICBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHM6IHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyxcbiAgICAgICAgY3JlYXRlUmVuZGVyU3RhdGU6IGNyZWF0ZUh0bWxSZW5kZXJTdGF0ZSxcbiAgICB9KSxcbn07XG5cbmV4cG9ydCB7IGh0bWxNb3Rpb25Db25maWcgfTtcbiIsImltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gYWRkRG9tRXZlbnQodGFyZ2V0LCBldmVudE5hbWUsIGhhbmRsZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7IHBhc3NpdmU6IHRydWUgfTsgfVxuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgaGFuZGxlcik7IH07XG59XG4vKipcbiAqIEF0dGFjaGVzIGFuIGV2ZW50IGxpc3RlbmVyIGRpcmVjdGx5IHRvIHRoZSBwcm92aWRlZCBET00gZWxlbWVudC5cbiAqXG4gKiBCeXBhc3NpbmcgUmVhY3QncyBldmVudCBzeXN0ZW0gY2FuIGJlIGRlc2lyYWJsZSwgZm9yIGluc3RhbmNlIHdoZW4gYXR0YWNoaW5nIG5vbi1wYXNzaXZlXG4gKiBldmVudCBoYW5kbGVycy5cbiAqXG4gKiBgYGBqc3hcbiAqIGNvbnN0IHJlZiA9IHVzZVJlZihudWxsKVxuICpcbiAqIHVzZURvbUV2ZW50KHJlZiwgJ3doZWVsJywgb25XaGVlbCwgeyBwYXNzaXZlOiBmYWxzZSB9KVxuICpcbiAqIHJldHVybiA8ZGl2IHJlZj17cmVmfSAvPlxuICogYGBgXG4gKlxuICogQHBhcmFtIHJlZiAtIFJlYWN0LlJlZk9iamVjdCB0aGF0J3MgYmVlbiBwcm92aWRlZCB0byB0aGUgZWxlbWVudCB5b3Ugd2FudCB0byBiaW5kIHRoZSBsaXN0ZW5lciB0by5cbiAqIEBwYXJhbSBldmVudE5hbWUgLSBOYW1lIG9mIHRoZSBldmVudCB5b3Ugd2FudCBsaXN0ZW4gZm9yLlxuICogQHBhcmFtIGhhbmRsZXIgLSBGdW5jdGlvbiB0byBmaXJlIHdoZW4gcmVjZWl2aW5nIHRoZSBldmVudC5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyB0byBwYXNzIHRvIGBFdmVudC5hZGRFdmVudExpc3RlbmVyYC5cbiAqXG4gKiBAcHVibGljXG4gKi9cbmZ1bmN0aW9uIHVzZURvbUV2ZW50KHJlZiwgZXZlbnROYW1lLCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSByZWYuY3VycmVudDtcbiAgICAgICAgaWYgKGhhbmRsZXIgJiYgZWxlbWVudCkge1xuICAgICAgICAgICAgcmV0dXJuIGFkZERvbUV2ZW50KGVsZW1lbnQsIGV2ZW50TmFtZSwgaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICB9LCBbcmVmLCBldmVudE5hbWUsIGhhbmRsZXIsIG9wdGlvbnNdKTtcbn1cblxuZXhwb3J0IHsgYWRkRG9tRXZlbnQsIHVzZURvbUV2ZW50IH07XG4iLCJmdW5jdGlvbiBpc01vdXNlRXZlbnQoZXZlbnQpIHtcbiAgICAvLyBQb2ludGVyRXZlbnQgaW5oZXJpdHMgZnJvbSBNb3VzZUV2ZW50IHNvIHdlIGNhbid0IHVzZSBhIHN0cmFpZ2h0IGluc3RhbmNlb2YgY2hlY2suXG4gICAgaWYgKHR5cGVvZiBQb2ludGVyRXZlbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgZXZlbnQgaW5zdGFuY2VvZiBQb2ludGVyRXZlbnQpIHtcbiAgICAgICAgcmV0dXJuICEhKGV2ZW50LnBvaW50ZXJUeXBlID09PSBcIm1vdXNlXCIpO1xuICAgIH1cbiAgICByZXR1cm4gZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50O1xufVxuZnVuY3Rpb24gaXNUb3VjaEV2ZW50KGV2ZW50KSB7XG4gICAgdmFyIGhhc1RvdWNoZXMgPSAhIWV2ZW50LnRvdWNoZXM7XG4gICAgcmV0dXJuIGhhc1RvdWNoZXM7XG59XG5cbmV4cG9ydCB7IGlzTW91c2VFdmVudCwgaXNUb3VjaEV2ZW50IH07XG4iLCJpbXBvcnQgeyBpc1RvdWNoRXZlbnQgfSBmcm9tICcuLi9nZXN0dXJlcy91dGlscy9ldmVudC10eXBlLm1qcyc7XG5cbi8qKlxuICogRmlsdGVycyBvdXQgZXZlbnRzIG5vdCBhdHRhY2hlZCB0byB0aGUgcHJpbWFyeSBwb2ludGVyIChjdXJyZW50bHkgbGVmdCBtb3VzZSBidXR0b24pXG4gKiBAcGFyYW0gZXZlbnRIYW5kbGVyXG4gKi9cbmZ1bmN0aW9uIGZpbHRlclByaW1hcnlQb2ludGVyKGV2ZW50SGFuZGxlcikge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIGlzTW91c2VFdmVudCA9IGV2ZW50IGluc3RhbmNlb2YgTW91c2VFdmVudDtcbiAgICAgICAgdmFyIGlzUHJpbWFyeVBvaW50ZXIgPSAhaXNNb3VzZUV2ZW50IHx8XG4gICAgICAgICAgICAoaXNNb3VzZUV2ZW50ICYmIGV2ZW50LmJ1dHRvbiA9PT0gMCk7XG4gICAgICAgIGlmIChpc1ByaW1hcnlQb2ludGVyKSB7XG4gICAgICAgICAgICBldmVudEhhbmRsZXIoZXZlbnQpO1xuICAgICAgICB9XG4gICAgfTtcbn1cbnZhciBkZWZhdWx0UGFnZVBvaW50ID0geyBwYWdlWDogMCwgcGFnZVk6IDAgfTtcbmZ1bmN0aW9uIHBvaW50RnJvbVRvdWNoKGUsIHBvaW50VHlwZSkge1xuICAgIGlmIChwb2ludFR5cGUgPT09IHZvaWQgMCkgeyBwb2ludFR5cGUgPSBcInBhZ2VcIjsgfVxuICAgIHZhciBwcmltYXJ5VG91Y2ggPSBlLnRvdWNoZXNbMF0gfHwgZS5jaGFuZ2VkVG91Y2hlc1swXTtcbiAgICB2YXIgcG9pbnQgPSBwcmltYXJ5VG91Y2ggfHwgZGVmYXVsdFBhZ2VQb2ludDtcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiBwb2ludFtwb2ludFR5cGUgKyBcIlhcIl0sXG4gICAgICAgIHk6IHBvaW50W3BvaW50VHlwZSArIFwiWVwiXSxcbiAgICB9O1xufVxuZnVuY3Rpb24gcG9pbnRGcm9tTW91c2UocG9pbnQsIHBvaW50VHlwZSkge1xuICAgIGlmIChwb2ludFR5cGUgPT09IHZvaWQgMCkgeyBwb2ludFR5cGUgPSBcInBhZ2VcIjsgfVxuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHBvaW50W3BvaW50VHlwZSArIFwiWFwiXSxcbiAgICAgICAgeTogcG9pbnRbcG9pbnRUeXBlICsgXCJZXCJdLFxuICAgIH07XG59XG5mdW5jdGlvbiBleHRyYWN0RXZlbnRJbmZvKGV2ZW50LCBwb2ludFR5cGUpIHtcbiAgICBpZiAocG9pbnRUeXBlID09PSB2b2lkIDApIHsgcG9pbnRUeXBlID0gXCJwYWdlXCI7IH1cbiAgICByZXR1cm4ge1xuICAgICAgICBwb2ludDogaXNUb3VjaEV2ZW50KGV2ZW50KVxuICAgICAgICAgICAgPyBwb2ludEZyb21Ub3VjaChldmVudCwgcG9pbnRUeXBlKVxuICAgICAgICAgICAgOiBwb2ludEZyb21Nb3VzZShldmVudCwgcG9pbnRUeXBlKSxcbiAgICB9O1xufVxudmFyIHdyYXBIYW5kbGVyID0gZnVuY3Rpb24gKGhhbmRsZXIsIHNob3VsZEZpbHRlclByaW1hcnlQb2ludGVyKSB7XG4gICAgaWYgKHNob3VsZEZpbHRlclByaW1hcnlQb2ludGVyID09PSB2b2lkIDApIHsgc2hvdWxkRmlsdGVyUHJpbWFyeVBvaW50ZXIgPSBmYWxzZTsgfVxuICAgIHZhciBsaXN0ZW5lciA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICByZXR1cm4gaGFuZGxlcihldmVudCwgZXh0cmFjdEV2ZW50SW5mbyhldmVudCkpO1xuICAgIH07XG4gICAgcmV0dXJuIHNob3VsZEZpbHRlclByaW1hcnlQb2ludGVyXG4gICAgICAgID8gZmlsdGVyUHJpbWFyeVBvaW50ZXIobGlzdGVuZXIpXG4gICAgICAgIDogbGlzdGVuZXI7XG59O1xuXG5leHBvcnQgeyBleHRyYWN0RXZlbnRJbmZvLCB3cmFwSGFuZGxlciB9O1xuIiwiaW1wb3J0IHsgaXNCcm93c2VyIH0gZnJvbSAnLi4vdXRpbHMvaXMtYnJvd3Nlci5tanMnO1xuXG4vLyBXZSBjaGVjayBmb3IgZXZlbnQgc3VwcG9ydCB2aWEgZnVuY3Rpb25zIGluIGNhc2UgdGhleSd2ZSBiZWVuIG1vY2tlZCBieSBhIHRlc3Rpbmcgc3VpdGUuXG52YXIgc3VwcG9ydHNQb2ludGVyRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpc0Jyb3dzZXIgJiYgd2luZG93Lm9ucG9pbnRlcmRvd24gPT09IG51bGw7XG59O1xudmFyIHN1cHBvcnRzVG91Y2hFdmVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGlzQnJvd3NlciAmJiB3aW5kb3cub250b3VjaHN0YXJ0ID09PSBudWxsO1xufTtcbnZhciBzdXBwb3J0c01vdXNlRXZlbnRzID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBpc0Jyb3dzZXIgJiYgd2luZG93Lm9ubW91c2Vkb3duID09PSBudWxsO1xufTtcblxuZXhwb3J0IHsgc3VwcG9ydHNNb3VzZUV2ZW50cywgc3VwcG9ydHNQb2ludGVyRXZlbnRzLCBzdXBwb3J0c1RvdWNoRXZlbnRzIH07XG4iLCJpbXBvcnQgeyBhZGREb21FdmVudCwgdXNlRG9tRXZlbnQgfSBmcm9tICcuL3VzZS1kb20tZXZlbnQubWpzJztcbmltcG9ydCB7IHdyYXBIYW5kbGVyIH0gZnJvbSAnLi9ldmVudC1pbmZvLm1qcyc7XG5pbXBvcnQgeyBzdXBwb3J0c1BvaW50ZXJFdmVudHMsIHN1cHBvcnRzVG91Y2hFdmVudHMsIHN1cHBvcnRzTW91c2VFdmVudHMgfSBmcm9tICcuL3V0aWxzLm1qcyc7XG5cbnZhciBtb3VzZUV2ZW50TmFtZXMgPSB7XG4gICAgcG9pbnRlcmRvd246IFwibW91c2Vkb3duXCIsXG4gICAgcG9pbnRlcm1vdmU6IFwibW91c2Vtb3ZlXCIsXG4gICAgcG9pbnRlcnVwOiBcIm1vdXNldXBcIixcbiAgICBwb2ludGVyY2FuY2VsOiBcIm1vdXNlY2FuY2VsXCIsXG4gICAgcG9pbnRlcm92ZXI6IFwibW91c2VvdmVyXCIsXG4gICAgcG9pbnRlcm91dDogXCJtb3VzZW91dFwiLFxuICAgIHBvaW50ZXJlbnRlcjogXCJtb3VzZWVudGVyXCIsXG4gICAgcG9pbnRlcmxlYXZlOiBcIm1vdXNlbGVhdmVcIixcbn07XG52YXIgdG91Y2hFdmVudE5hbWVzID0ge1xuICAgIHBvaW50ZXJkb3duOiBcInRvdWNoc3RhcnRcIixcbiAgICBwb2ludGVybW92ZTogXCJ0b3VjaG1vdmVcIixcbiAgICBwb2ludGVydXA6IFwidG91Y2hlbmRcIixcbiAgICBwb2ludGVyY2FuY2VsOiBcInRvdWNoY2FuY2VsXCIsXG59O1xuZnVuY3Rpb24gZ2V0UG9pbnRlckV2ZW50TmFtZShuYW1lKSB7XG4gICAgaWYgKHN1cHBvcnRzUG9pbnRlckV2ZW50cygpKSB7XG4gICAgICAgIHJldHVybiBuYW1lO1xuICAgIH1cbiAgICBlbHNlIGlmIChzdXBwb3J0c1RvdWNoRXZlbnRzKCkpIHtcbiAgICAgICAgcmV0dXJuIHRvdWNoRXZlbnROYW1lc1tuYW1lXTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc3VwcG9ydHNNb3VzZUV2ZW50cygpKSB7XG4gICAgICAgIHJldHVybiBtb3VzZUV2ZW50TmFtZXNbbmFtZV07XG4gICAgfVxuICAgIHJldHVybiBuYW1lO1xufVxuZnVuY3Rpb24gYWRkUG9pbnRlckV2ZW50KHRhcmdldCwgZXZlbnROYW1lLCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGFkZERvbUV2ZW50KHRhcmdldCwgZ2V0UG9pbnRlckV2ZW50TmFtZShldmVudE5hbWUpLCB3cmFwSGFuZGxlcihoYW5kbGVyLCBldmVudE5hbWUgPT09IFwicG9pbnRlcmRvd25cIiksIG9wdGlvbnMpO1xufVxuZnVuY3Rpb24gdXNlUG9pbnRlckV2ZW50KHJlZiwgZXZlbnROYW1lLCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIHVzZURvbUV2ZW50KHJlZiwgZ2V0UG9pbnRlckV2ZW50TmFtZShldmVudE5hbWUpLCBoYW5kbGVyICYmIHdyYXBIYW5kbGVyKGhhbmRsZXIsIGV2ZW50TmFtZSA9PT0gXCJwb2ludGVyZG93blwiKSwgb3B0aW9ucyk7XG59XG5cbmV4cG9ydCB7IGFkZFBvaW50ZXJFdmVudCwgdXNlUG9pbnRlckV2ZW50IH07XG4iLCJmdW5jdGlvbiBjcmVhdGVMb2NrKG5hbWUpIHtcbiAgICB2YXIgbG9jayA9IG51bGw7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIG9wZW5Mb2NrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgbG9jayA9IG51bGw7XG4gICAgICAgIH07XG4gICAgICAgIGlmIChsb2NrID09PSBudWxsKSB7XG4gICAgICAgICAgICBsb2NrID0gbmFtZTtcbiAgICAgICAgICAgIHJldHVybiBvcGVuTG9jaztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfTtcbn1cbnZhciBnbG9iYWxIb3Jpem9udGFsTG9jayA9IGNyZWF0ZUxvY2soXCJkcmFnSG9yaXpvbnRhbFwiKTtcbnZhciBnbG9iYWxWZXJ0aWNhbExvY2sgPSBjcmVhdGVMb2NrKFwiZHJhZ1ZlcnRpY2FsXCIpO1xuZnVuY3Rpb24gZ2V0R2xvYmFsTG9jayhkcmFnKSB7XG4gICAgdmFyIGxvY2sgPSBmYWxzZTtcbiAgICBpZiAoZHJhZyA9PT0gXCJ5XCIpIHtcbiAgICAgICAgbG9jayA9IGdsb2JhbFZlcnRpY2FsTG9jaygpO1xuICAgIH1cbiAgICBlbHNlIGlmIChkcmFnID09PSBcInhcIikge1xuICAgICAgICBsb2NrID0gZ2xvYmFsSG9yaXpvbnRhbExvY2soKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBvcGVuSG9yaXpvbnRhbF8xID0gZ2xvYmFsSG9yaXpvbnRhbExvY2soKTtcbiAgICAgICAgdmFyIG9wZW5WZXJ0aWNhbF8xID0gZ2xvYmFsVmVydGljYWxMb2NrKCk7XG4gICAgICAgIGlmIChvcGVuSG9yaXpvbnRhbF8xICYmIG9wZW5WZXJ0aWNhbF8xKSB7XG4gICAgICAgICAgICBsb2NrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIG9wZW5Ib3Jpem9udGFsXzEoKTtcbiAgICAgICAgICAgICAgICBvcGVuVmVydGljYWxfMSgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFJlbGVhc2UgdGhlIGxvY2tzIGJlY2F1c2Ugd2UgZG9uJ3QgdXNlIHRoZW1cbiAgICAgICAgICAgIGlmIChvcGVuSG9yaXpvbnRhbF8xKVxuICAgICAgICAgICAgICAgIG9wZW5Ib3Jpem9udGFsXzEoKTtcbiAgICAgICAgICAgIGlmIChvcGVuVmVydGljYWxfMSlcbiAgICAgICAgICAgICAgICBvcGVuVmVydGljYWxfMSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsb2NrO1xufVxuZnVuY3Rpb24gaXNEcmFnQWN0aXZlKCkge1xuICAgIC8vIENoZWNrIHRoZSBnZXN0dXJlIGxvY2sgLSBpZiB3ZSBnZXQgaXQsIGl0IG1lYW5zIG5vIGRyYWcgZ2VzdHVyZSBpcyBhY3RpdmVcbiAgICAvLyBhbmQgd2UgY2FuIHNhZmVseSBmaXJlIHRoZSB0YXAgZ2VzdHVyZS5cbiAgICB2YXIgb3Blbkdlc3R1cmVMb2NrID0gZ2V0R2xvYmFsTG9jayh0cnVlKTtcbiAgICBpZiAoIW9wZW5HZXN0dXJlTG9jaylcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgb3Blbkdlc3R1cmVMb2NrKCk7XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgeyBjcmVhdGVMb2NrLCBnZXRHbG9iYWxMb2NrLCBpc0RyYWdBY3RpdmUgfTtcbiIsImltcG9ydCB7IGlzTW91c2VFdmVudCB9IGZyb20gJy4vdXRpbHMvZXZlbnQtdHlwZS5tanMnO1xuaW1wb3J0IHsgQW5pbWF0aW9uVHlwZSB9IGZyb20gJy4uL3JlbmRlci91dGlscy90eXBlcy5tanMnO1xuaW1wb3J0IHsgdXNlUG9pbnRlckV2ZW50IH0gZnJvbSAnLi4vZXZlbnRzL3VzZS1wb2ludGVyLWV2ZW50Lm1qcyc7XG5pbXBvcnQgeyBpc0RyYWdBY3RpdmUgfSBmcm9tICcuL2RyYWcvdXRpbHMvbG9jay5tanMnO1xuXG5mdW5jdGlvbiBjcmVhdGVIb3ZlckV2ZW50KHZpc3VhbEVsZW1lbnQsIGlzQWN0aXZlLCBjYWxsYmFjaykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQsIGluZm8pIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIWlzTW91c2VFdmVudChldmVudCkgfHwgaXNEcmFnQWN0aXZlKCkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBFbnN1cmUgd2UgdHJpZ2dlciBhbmltYXRpb25zIGJlZm9yZSBmaXJpbmcgZXZlbnQgY2FsbGJhY2tcbiAgICAgICAgICovXG4gICAgICAgIChfYSA9IHZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZXRBY3RpdmUoQW5pbWF0aW9uVHlwZS5Ib3ZlciwgaXNBY3RpdmUpO1xuICAgICAgICBjYWxsYmFjayA9PT0gbnVsbCB8fCBjYWxsYmFjayA9PT0gdm9pZCAwID8gdm9pZCAwIDogY2FsbGJhY2soZXZlbnQsIGluZm8pO1xuICAgIH07XG59XG5mdW5jdGlvbiB1c2VIb3Zlckdlc3R1cmUoX2EpIHtcbiAgICB2YXIgb25Ib3ZlclN0YXJ0ID0gX2Eub25Ib3ZlclN0YXJ0LCBvbkhvdmVyRW5kID0gX2Eub25Ib3ZlckVuZCwgd2hpbGVIb3ZlciA9IF9hLndoaWxlSG92ZXIsIHZpc3VhbEVsZW1lbnQgPSBfYS52aXN1YWxFbGVtZW50O1xuICAgIHVzZVBvaW50ZXJFdmVudCh2aXN1YWxFbGVtZW50LCBcInBvaW50ZXJlbnRlclwiLCBvbkhvdmVyU3RhcnQgfHwgd2hpbGVIb3ZlclxuICAgICAgICA/IGNyZWF0ZUhvdmVyRXZlbnQodmlzdWFsRWxlbWVudCwgdHJ1ZSwgb25Ib3ZlclN0YXJ0KVxuICAgICAgICA6IHVuZGVmaW5lZCwgeyBwYXNzaXZlOiAhb25Ib3ZlclN0YXJ0IH0pO1xuICAgIHVzZVBvaW50ZXJFdmVudCh2aXN1YWxFbGVtZW50LCBcInBvaW50ZXJsZWF2ZVwiLCBvbkhvdmVyRW5kIHx8IHdoaWxlSG92ZXJcbiAgICAgICAgPyBjcmVhdGVIb3ZlckV2ZW50KHZpc3VhbEVsZW1lbnQsIGZhbHNlLCBvbkhvdmVyRW5kKVxuICAgICAgICA6IHVuZGVmaW5lZCwgeyBwYXNzaXZlOiAhb25Ib3ZlckVuZCB9KTtcbn1cblxuZXhwb3J0IHsgdXNlSG92ZXJHZXN0dXJlIH07XG4iLCIvKipcbiAqIFJlY3Vyc2l2ZWx5IHRyYXZlcnNlIHVwIHRoZSB0cmVlIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHByb3ZpZGVkIGNoaWxkIG5vZGVcbiAqIGlzIHRoZSBwYXJlbnQgb3IgYSBkZXNjZW5kYW50IG9mIGl0LlxuICpcbiAqIEBwYXJhbSBwYXJlbnQgLSBFbGVtZW50IHRvIGZpbmRcbiAqIEBwYXJhbSBjaGlsZCAtIEVsZW1lbnQgdG8gdGVzdCBhZ2FpbnN0IHBhcmVudFxuICovXG52YXIgaXNOb2RlT3JDaGlsZCA9IGZ1bmN0aW9uIChwYXJlbnQsIGNoaWxkKSB7XG4gICAgaWYgKCFjaGlsZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKHBhcmVudCA9PT0gY2hpbGQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gaXNOb2RlT3JDaGlsZChwYXJlbnQsIGNoaWxkLnBhcmVudEVsZW1lbnQpO1xuICAgIH1cbn07XG5cbmV4cG9ydCB7IGlzTm9kZU9yQ2hpbGQgfTtcbiIsImNvbnN0IGNvbWJpbmVGdW5jdGlvbnMgPSAoYSwgYikgPT4gKHYpID0+IGIoYSh2KSk7XG5jb25zdCBwaXBlID0gKC4uLnRyYW5zZm9ybWVycykgPT4gdHJhbnNmb3JtZXJzLnJlZHVjZShjb21iaW5lRnVuY3Rpb25zKTtcblxuZXhwb3J0IHsgcGlwZSB9O1xuIiwidmFyIHdhcm5lZCA9IG5ldyBTZXQoKTtcbmZ1bmN0aW9uIHdhcm5PbmNlKGNvbmRpdGlvbiwgbWVzc2FnZSwgZWxlbWVudCkge1xuICAgIGlmIChjb25kaXRpb24gfHwgd2FybmVkLmhhcyhtZXNzYWdlKSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnNvbGUud2FybihtZXNzYWdlKTtcbiAgICBpZiAoZWxlbWVudClcbiAgICAgICAgY29uc29sZS53YXJuKGVsZW1lbnQpO1xuICAgIHdhcm5lZC5hZGQobWVzc2FnZSk7XG59XG5cbmV4cG9ydCB7IHdhcm5PbmNlIH07XG4iLCJpbXBvcnQgeyBfX3Jlc3QsIF9fYXNzaWduIH0gZnJvbSAndHNsaWInO1xuXG4vKipcbiAqIE1hcCBhbiBJbnRlcnNlY3Rpb25IYW5kbGVyIGNhbGxiYWNrIHRvIGFuIGVsZW1lbnQuIFdlIG9ubHkgZXZlciBtYWtlIG9uZSBoYW5kbGVyIGZvciBvbmVcbiAqIGVsZW1lbnQsIHNvIGV2ZW4gdGhvdWdoIHRoZXNlIGhhbmRsZXJzIG1pZ2h0IGFsbCBiZSB0cmlnZ2VyZWQgYnkgZGlmZmVyZW50XG4gKiBvYnNlcnZlcnMsIHdlIGNhbiBrZWVwIHRoZW0gaW4gdGhlIHNhbWUgbWFwLlxuICovXG52YXIgb2JzZXJ2ZXJDYWxsYmFja3MgPSBuZXcgV2Vha01hcCgpO1xuLyoqXG4gKiBNdWx0aXBsZSBvYnNlcnZlcnMgY2FuIGJlIGNyZWF0ZWQgZm9yIG11bHRpcGxlIGVsZW1lbnQvZG9jdW1lbnQgcm9vdHMuIEVhY2ggd2l0aFxuICogZGlmZmVyZW50IHNldHRpbmdzLiBTbyBoZXJlIHdlIHN0b3JlIGRpY3Rpb25hcmllcyBvZiBvYnNlcnZlcnMgdG8gZWFjaCByb290LFxuICogdXNpbmcgc2VyaWFsaXNlZCBzZXR0aW5ncyAodGhyZXNob2xkL21hcmdpbikgYXMgbG9va3VwIGtleXMuXG4gKi9cbnZhciBvYnNlcnZlcnMgPSBuZXcgV2Vha01hcCgpO1xudmFyIGZpcmVPYnNlcnZlckNhbGxiYWNrID0gZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgdmFyIF9hO1xuICAgIChfYSA9IG9ic2VydmVyQ2FsbGJhY2tzLmdldChlbnRyeS50YXJnZXQpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EoZW50cnkpO1xufTtcbnZhciBmaXJlQWxsT2JzZXJ2ZXJDYWxsYmFja3MgPSBmdW5jdGlvbiAoZW50cmllcykge1xuICAgIGVudHJpZXMuZm9yRWFjaChmaXJlT2JzZXJ2ZXJDYWxsYmFjayk7XG59O1xuZnVuY3Rpb24gaW5pdEludGVyc2VjdGlvbk9ic2VydmVyKF9hKSB7XG4gICAgdmFyIHJvb3QgPSBfYS5yb290LCBvcHRpb25zID0gX19yZXN0KF9hLCBbXCJyb290XCJdKTtcbiAgICB2YXIgbG9va3VwUm9vdCA9IHJvb3QgfHwgZG9jdW1lbnQ7XG4gICAgLyoqXG4gICAgICogSWYgd2UgZG9uJ3QgaGF2ZSBhbiBvYnNlcnZlciBsb29rdXAgbWFwIGZvciB0aGlzIHJvb3QsIGNyZWF0ZSBvbmUuXG4gICAgICovXG4gICAgaWYgKCFvYnNlcnZlcnMuaGFzKGxvb2t1cFJvb3QpKSB7XG4gICAgICAgIG9ic2VydmVycy5zZXQobG9va3VwUm9vdCwge30pO1xuICAgIH1cbiAgICB2YXIgcm9vdE9ic2VydmVycyA9IG9ic2VydmVycy5nZXQobG9va3VwUm9vdCk7XG4gICAgdmFyIGtleSA9IEpTT04uc3RyaW5naWZ5KG9wdGlvbnMpO1xuICAgIC8qKlxuICAgICAqIElmIHdlIGRvbid0IGhhdmUgYW4gb2JzZXJ2ZXIgZm9yIHRoaXMgY29tYmluYXRpb24gb2Ygcm9vdCBhbmQgc2V0dGluZ3MsXG4gICAgICogY3JlYXRlIG9uZS5cbiAgICAgKi9cbiAgICBpZiAoIXJvb3RPYnNlcnZlcnNba2V5XSkge1xuICAgICAgICByb290T2JzZXJ2ZXJzW2tleV0gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZmlyZUFsbE9ic2VydmVyQ2FsbGJhY2tzLCBfX2Fzc2lnbih7IHJvb3Q6IHJvb3QgfSwgb3B0aW9ucykpO1xuICAgIH1cbiAgICByZXR1cm4gcm9vdE9ic2VydmVyc1trZXldO1xufVxuZnVuY3Rpb24gb2JzZXJ2ZUludGVyc2VjdGlvbihlbGVtZW50LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgIHZhciByb290SW50ZXJlc2VjdGlvbk9ic2VydmVyID0gaW5pdEludGVyc2VjdGlvbk9ic2VydmVyKG9wdGlvbnMpO1xuICAgIG9ic2VydmVyQ2FsbGJhY2tzLnNldChlbGVtZW50LCBjYWxsYmFjayk7XG4gICAgcm9vdEludGVyZXNlY3Rpb25PYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQpO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgIG9ic2VydmVyQ2FsbGJhY2tzLmRlbGV0ZShlbGVtZW50KTtcbiAgICAgICAgcm9vdEludGVyZXNlY3Rpb25PYnNlcnZlci51bm9ic2VydmUoZWxlbWVudCk7XG4gICAgfTtcbn1cblxuZXhwb3J0IHsgb2JzZXJ2ZUludGVyc2VjdGlvbiB9O1xuIiwiaW1wb3J0IHsgZW52IH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvcHJvY2Vzcy5tanMnO1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBBbmltYXRpb25UeXBlIH0gZnJvbSAnLi4vLi4vLi4vcmVuZGVyL3V0aWxzL3R5cGVzLm1qcyc7XG5pbXBvcnQgeyB3YXJuT25jZSB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3dhcm4tb25jZS5tanMnO1xuaW1wb3J0IHsgb2JzZXJ2ZUludGVyc2VjdGlvbiB9IGZyb20gJy4vb2JzZXJ2ZXJzLm1qcyc7XG5cbmZ1bmN0aW9uIHVzZVZpZXdwb3J0KF9hKSB7XG4gICAgdmFyIHZpc3VhbEVsZW1lbnQgPSBfYS52aXN1YWxFbGVtZW50LCB3aGlsZUluVmlldyA9IF9hLndoaWxlSW5WaWV3LCBvblZpZXdwb3J0RW50ZXIgPSBfYS5vblZpZXdwb3J0RW50ZXIsIG9uVmlld3BvcnRMZWF2ZSA9IF9hLm9uVmlld3BvcnRMZWF2ZSwgX2IgPSBfYS52aWV3cG9ydCwgdmlld3BvcnQgPSBfYiA9PT0gdm9pZCAwID8ge30gOiBfYjtcbiAgICB2YXIgc3RhdGUgPSB1c2VSZWYoe1xuICAgICAgICBoYXNFbnRlcmVkVmlldzogZmFsc2UsXG4gICAgICAgIGlzSW5WaWV3OiBmYWxzZSxcbiAgICB9KTtcbiAgICB2YXIgc2hvdWxkT2JzZXJ2ZSA9IEJvb2xlYW4od2hpbGVJblZpZXcgfHwgb25WaWV3cG9ydEVudGVyIHx8IG9uVmlld3BvcnRMZWF2ZSk7XG4gICAgaWYgKHZpZXdwb3J0Lm9uY2UgJiYgc3RhdGUuY3VycmVudC5oYXNFbnRlcmVkVmlldylcbiAgICAgICAgc2hvdWxkT2JzZXJ2ZSA9IGZhbHNlO1xuICAgIHZhciB1c2VPYnNlcnZlciA9IHR5cGVvZiBJbnRlcnNlY3Rpb25PYnNlcnZlciA9PT0gXCJ1bmRlZmluZWRcIlxuICAgICAgICA/IHVzZU1pc3NpbmdJbnRlcnNlY3Rpb25PYnNlcnZlclxuICAgICAgICA6IHVzZUludGVyc2VjdGlvbk9ic2VydmVyO1xuICAgIHVzZU9ic2VydmVyKHNob3VsZE9ic2VydmUsIHN0YXRlLmN1cnJlbnQsIHZpc3VhbEVsZW1lbnQsIHZpZXdwb3J0KTtcbn1cbnZhciB0aHJlc2hvbGROYW1lcyA9IHtcbiAgICBzb21lOiAwLFxuICAgIGFsbDogMSxcbn07XG5mdW5jdGlvbiB1c2VJbnRlcnNlY3Rpb25PYnNlcnZlcihzaG91bGRPYnNlcnZlLCBzdGF0ZSwgdmlzdWFsRWxlbWVudCwgX2EpIHtcbiAgICB2YXIgcm9vdCA9IF9hLnJvb3QsIHJvb3RNYXJnaW4gPSBfYS5tYXJnaW4sIF9iID0gX2EuYW1vdW50LCBhbW91bnQgPSBfYiA9PT0gdm9pZCAwID8gXCJzb21lXCIgOiBfYiwgb25jZSA9IF9hLm9uY2U7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFzaG91bGRPYnNlcnZlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIHJvb3Q6IHJvb3QgPT09IG51bGwgfHwgcm9vdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcm9vdC5jdXJyZW50LFxuICAgICAgICAgICAgcm9vdE1hcmdpbjogcm9vdE1hcmdpbixcbiAgICAgICAgICAgIHRocmVzaG9sZDogdHlwZW9mIGFtb3VudCA9PT0gXCJudW1iZXJcIiA/IGFtb3VudCA6IHRocmVzaG9sZE5hbWVzW2Ftb3VudF0sXG4gICAgICAgIH07XG4gICAgICAgIHZhciBpbnRlcnNlY3Rpb25DYWxsYmFjayA9IGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdmFyIGlzSW50ZXJzZWN0aW5nID0gZW50cnkuaXNJbnRlcnNlY3Rpbmc7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHRoZXJlJ3MgYmVlbiBubyBjaGFuZ2UgaW4gdGhlIHZpZXdwb3J0IHN0YXRlLCBlYXJseSByZXR1cm4uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmIChzdGF0ZS5pc0luVmlldyA9PT0gaXNJbnRlcnNlY3RpbmcpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgc3RhdGUuaXNJblZpZXcgPSBpc0ludGVyc2VjdGluZztcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSGFuZGxlIGhhc0VudGVyZWRWaWV3LiBJZiB0aGlzIGlzIG9ubHkgbWVhbnQgdG8gcnVuIG9uY2UsIGFuZFxuICAgICAgICAgICAgICogZWxlbWVudCBpc24ndCB2aXNpYmxlLCBlYXJseSByZXR1cm4uIE90aGVyd2lzZSBzZXQgaGFzRW50ZXJlZFZpZXcgdG8gdHJ1ZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKG9uY2UgJiYgIWlzSW50ZXJzZWN0aW5nICYmIHN0YXRlLmhhc0VudGVyZWRWaWV3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgICAgICAgICBzdGF0ZS5oYXNFbnRlcmVkVmlldyA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAoX2EgPSB2aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2V0QWN0aXZlKEFuaW1hdGlvblR5cGUuSW5WaWV3LCBpc0ludGVyc2VjdGluZyk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFVzZSB0aGUgbGF0ZXN0IGNvbW1pdHRlZCBwcm9wcyByYXRoZXIgdGhhbiB0aGUgb25lcyBpbiBzY29wZVxuICAgICAgICAgICAgICogd2hlbiB0aGlzIG9ic2VydmVyIGlzIGNyZWF0ZWRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyIHByb3BzID0gdmlzdWFsRWxlbWVudC5nZXRQcm9wcygpO1xuICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gaXNJbnRlcnNlY3RpbmdcbiAgICAgICAgICAgICAgICA/IHByb3BzLm9uVmlld3BvcnRFbnRlclxuICAgICAgICAgICAgICAgIDogcHJvcHMub25WaWV3cG9ydExlYXZlO1xuICAgICAgICAgICAgY2FsbGJhY2sgPT09IG51bGwgfHwgY2FsbGJhY2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhbGxiYWNrKGVudHJ5KTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIG9ic2VydmVJbnRlcnNlY3Rpb24odmlzdWFsRWxlbWVudC5nZXRJbnN0YW5jZSgpLCBvcHRpb25zLCBpbnRlcnNlY3Rpb25DYWxsYmFjayk7XG4gICAgfSwgW3Nob3VsZE9ic2VydmUsIHJvb3QsIHJvb3RNYXJnaW4sIGFtb3VudF0pO1xufVxuLyoqXG4gKiBJZiBJbnRlcnNlY3Rpb25PYnNlcnZlciBpcyBtaXNzaW5nLCB3ZSBhY3RpdmF0ZSBpblZpZXcgYW5kIGZpcmUgb25WaWV3cG9ydEVudGVyXG4gKiBvbiBtb3VudC4gVGhpcyB3YXksIHRoZSBwYWdlIHdpbGwgYmUgaW4gdGhlIHN0YXRlIHRoZSBhdXRob3IgZXhwZWN0cyB1c2Vyc1xuICogdG8gc2VlIGl0IGluIGZvciBldmVyeW9uZS5cbiAqL1xuZnVuY3Rpb24gdXNlTWlzc2luZ0ludGVyc2VjdGlvbk9ic2VydmVyKHNob3VsZE9ic2VydmUsIHN0YXRlLCB2aXN1YWxFbGVtZW50LCBfYSkge1xuICAgIHZhciBfYiA9IF9hLmZhbGxiYWNrLCBmYWxsYmFjayA9IF9iID09PSB2b2lkIDAgPyB0cnVlIDogX2I7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFzaG91bGRPYnNlcnZlIHx8ICFmYWxsYmFjaylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKGVudiAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKGZhbHNlLCBcIkludGVyc2VjdGlvbk9ic2VydmVyIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UuIHdoaWxlSW5WaWV3IGFuaW1hdGlvbnMgd2lsbCB0cmlnZ2VyIG9uIG1vdW50LlwiKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogRmlyZSB0aGlzIGluIGFuIHJBRiBiZWNhdXNlLCBhdCB0aGlzIHBvaW50LCB0aGUgYW5pbWF0aW9uIHN0YXRlXG4gICAgICAgICAqIHdvbid0IGhhdmUgZmx1c2hlZCBmb3IgdGhlIGZpcnN0IHRpbWUgYW5kIHRoZXJlJ3MgY2VydGFpbiBsb2dpYyBpblxuICAgICAgICAgKiB0aGVyZSB0aGF0IGJlaGF2ZXMgZGlmZmVyZW50bHkgb24gdGhlIGluaXRpYWwgYW5pbWF0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIGhvb2sgc2hvdWxkIGJlIHF1aXRlIHJhcmVseSBjYWxsZWQgc28gc2V0dGluZyB0aGlzIGluIGFuIHJBRlxuICAgICAgICAgKiBpcyBwcmVmZXJyZWQgdG8gY2hhbmdpbmcgdGhlIGJlaGF2aW91ciBvZiB0aGUgYW5pbWF0aW9uIHN0YXRlLlxuICAgICAgICAgKi9cbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHN0YXRlLmhhc0VudGVyZWRWaWV3ID0gdHJ1ZTtcbiAgICAgICAgICAgIHZhciBvblZpZXdwb3J0RW50ZXIgPSB2aXN1YWxFbGVtZW50LmdldFByb3BzKCkub25WaWV3cG9ydEVudGVyO1xuICAgICAgICAgICAgb25WaWV3cG9ydEVudGVyID09PSBudWxsIHx8IG9uVmlld3BvcnRFbnRlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25WaWV3cG9ydEVudGVyKG51bGwpO1xuICAgICAgICAgICAgKF9hID0gdmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNldEFjdGl2ZShBbmltYXRpb25UeXBlLkluVmlldywgdHJ1ZSk7XG4gICAgICAgIH0pO1xuICAgIH0sIFtzaG91bGRPYnNlcnZlXSk7XG59XG5cbmV4cG9ydCB7IHVzZVZpZXdwb3J0IH07XG4iLCJ2YXIgbWFrZVJlbmRlcmxlc3NDb21wb25lbnQgPSBmdW5jdGlvbiAoaG9vaykgeyByZXR1cm4gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgaG9vayhwcm9wcyk7XG4gICAgcmV0dXJuIG51bGw7XG59OyB9O1xuXG5leHBvcnQgeyBtYWtlUmVuZGVybGVzc0NvbXBvbmVudCB9O1xuIiwiaW1wb3J0IHsgdXNlRm9jdXNHZXN0dXJlIH0gZnJvbSAnLi4vLi4vZ2VzdHVyZXMvdXNlLWZvY3VzLWdlc3R1cmUubWpzJztcbmltcG9ydCB7IHVzZUhvdmVyR2VzdHVyZSB9IGZyb20gJy4uLy4uL2dlc3R1cmVzL3VzZS1ob3Zlci1nZXN0dXJlLm1qcyc7XG5pbXBvcnQgeyB1c2VUYXBHZXN0dXJlIH0gZnJvbSAnLi4vLi4vZ2VzdHVyZXMvdXNlLXRhcC1nZXN0dXJlLm1qcyc7XG5pbXBvcnQgeyB1c2VWaWV3cG9ydCB9IGZyb20gJy4vdmlld3BvcnQvdXNlLXZpZXdwb3J0Lm1qcyc7XG5pbXBvcnQgeyBtYWtlUmVuZGVybGVzc0NvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL21ha2UtcmVuZGVybGVzcy1jb21wb25lbnQubWpzJztcblxudmFyIGdlc3R1cmVBbmltYXRpb25zID0ge1xuICAgIGluVmlldzogbWFrZVJlbmRlcmxlc3NDb21wb25lbnQodXNlVmlld3BvcnQpLFxuICAgIHRhcDogbWFrZVJlbmRlcmxlc3NDb21wb25lbnQodXNlVGFwR2VzdHVyZSksXG4gICAgZm9jdXM6IG1ha2VSZW5kZXJsZXNzQ29tcG9uZW50KHVzZUZvY3VzR2VzdHVyZSksXG4gICAgaG92ZXI6IG1ha2VSZW5kZXJsZXNzQ29tcG9uZW50KHVzZUhvdmVyR2VzdHVyZSksXG59O1xuXG5leHBvcnQgeyBnZXN0dXJlQW5pbWF0aW9ucyB9O1xuIiwiaW1wb3J0IHsgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNOb2RlT3JDaGlsZCB9IGZyb20gJy4vdXRpbHMvaXMtbm9kZS1vci1jaGlsZC5tanMnO1xuaW1wb3J0IHsgdXNlUG9pbnRlckV2ZW50LCBhZGRQb2ludGVyRXZlbnQgfSBmcm9tICcuLi9ldmVudHMvdXNlLXBvaW50ZXItZXZlbnQubWpzJztcbmltcG9ydCB7IHVzZVVubW91bnRFZmZlY3QgfSBmcm9tICcuLi91dGlscy91c2UtdW5tb3VudC1lZmZlY3QubWpzJztcbmltcG9ydCB7IHBpcGUgfSBmcm9tICdwb3Btb3Rpb24nO1xuaW1wb3J0IHsgQW5pbWF0aW9uVHlwZSB9IGZyb20gJy4uL3JlbmRlci91dGlscy90eXBlcy5tanMnO1xuaW1wb3J0IHsgaXNEcmFnQWN0aXZlIH0gZnJvbSAnLi9kcmFnL3V0aWxzL2xvY2subWpzJztcblxuLyoqXG4gKiBAcGFyYW0gaGFuZGxlcnMgLVxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHVzZVRhcEdlc3R1cmUoX2EpIHtcbiAgICB2YXIgb25UYXAgPSBfYS5vblRhcCwgb25UYXBTdGFydCA9IF9hLm9uVGFwU3RhcnQsIG9uVGFwQ2FuY2VsID0gX2Eub25UYXBDYW5jZWwsIHdoaWxlVGFwID0gX2Eud2hpbGVUYXAsIHZpc3VhbEVsZW1lbnQgPSBfYS52aXN1YWxFbGVtZW50O1xuICAgIHZhciBoYXNQcmVzc0xpc3RlbmVycyA9IG9uVGFwIHx8IG9uVGFwU3RhcnQgfHwgb25UYXBDYW5jZWwgfHwgd2hpbGVUYXA7XG4gICAgdmFyIGlzUHJlc3NpbmcgPSB1c2VSZWYoZmFsc2UpO1xuICAgIHZhciBjYW5jZWxQb2ludGVyRW5kTGlzdGVuZXJzID0gdXNlUmVmKG51bGwpO1xuICAgIC8qKlxuICAgICAqIE9ubHkgc2V0IGxpc3RlbmVyIHRvIHBhc3NpdmUgaWYgdGhlcmUgYXJlIG5vIGV4dGVybmFsIGxpc3RlbmVycy5cbiAgICAgKi9cbiAgICB2YXIgZXZlbnRPcHRpb25zID0ge1xuICAgICAgICBwYXNzaXZlOiAhKG9uVGFwU3RhcnQgfHwgb25UYXAgfHwgb25UYXBDYW5jZWwgfHwgb25Qb2ludGVyRG93biksXG4gICAgfTtcbiAgICBmdW5jdGlvbiByZW1vdmVQb2ludGVyRW5kTGlzdGVuZXIoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgKF9hID0gY2FuY2VsUG9pbnRlckVuZExpc3RlbmVycy5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChjYW5jZWxQb2ludGVyRW5kTGlzdGVuZXJzKTtcbiAgICAgICAgY2FuY2VsUG9pbnRlckVuZExpc3RlbmVycy5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hlY2tQb2ludGVyRW5kKCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJlbW92ZVBvaW50ZXJFbmRMaXN0ZW5lcigpO1xuICAgICAgICBpc1ByZXNzaW5nLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgKF9hID0gdmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNldEFjdGl2ZShBbmltYXRpb25UeXBlLlRhcCwgZmFsc2UpO1xuICAgICAgICByZXR1cm4gIWlzRHJhZ0FjdGl2ZSgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvblBvaW50ZXJVcChldmVudCwgaW5mbykge1xuICAgICAgICBpZiAoIWNoZWNrUG9pbnRlckVuZCgpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvKipcbiAgICAgICAgICogV2Ugb25seSBjb3VudCB0aGlzIGFzIGEgdGFwIGdlc3R1cmUgaWYgdGhlIGV2ZW50LnRhcmdldCBpcyB0aGUgc2FtZVxuICAgICAgICAgKiBhcywgb3IgYSBjaGlsZCBvZiwgdGhpcyBjb21wb25lbnQncyBlbGVtZW50XG4gICAgICAgICAqL1xuICAgICAgICAhaXNOb2RlT3JDaGlsZCh2aXN1YWxFbGVtZW50LmdldEluc3RhbmNlKCksIGV2ZW50LnRhcmdldClcbiAgICAgICAgICAgID8gb25UYXBDYW5jZWwgPT09IG51bGwgfHwgb25UYXBDYW5jZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVGFwQ2FuY2VsKGV2ZW50LCBpbmZvKVxuICAgICAgICAgICAgOiBvblRhcCA9PT0gbnVsbCB8fCBvblRhcCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25UYXAoZXZlbnQsIGluZm8pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvblBvaW50ZXJDYW5jZWwoZXZlbnQsIGluZm8pIHtcbiAgICAgICAgaWYgKCFjaGVja1BvaW50ZXJFbmQoKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgb25UYXBDYW5jZWwgPT09IG51bGwgfHwgb25UYXBDYW5jZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVGFwQ2FuY2VsKGV2ZW50LCBpbmZvKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gb25Qb2ludGVyRG93bihldmVudCwgaW5mbykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJlbW92ZVBvaW50ZXJFbmRMaXN0ZW5lcigpO1xuICAgICAgICBpZiAoaXNQcmVzc2luZy5jdXJyZW50KVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpc1ByZXNzaW5nLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICBjYW5jZWxQb2ludGVyRW5kTGlzdGVuZXJzLmN1cnJlbnQgPSBwaXBlKGFkZFBvaW50ZXJFdmVudCh3aW5kb3csIFwicG9pbnRlcnVwXCIsIG9uUG9pbnRlclVwLCBldmVudE9wdGlvbnMpLCBhZGRQb2ludGVyRXZlbnQod2luZG93LCBcInBvaW50ZXJjYW5jZWxcIiwgb25Qb2ludGVyQ2FuY2VsLCBldmVudE9wdGlvbnMpKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEVuc3VyZSB3ZSB0cmlnZ2VyIGFuaW1hdGlvbnMgYmVmb3JlIGZpcmluZyBldmVudCBjYWxsYmFja1xuICAgICAgICAgKi9cbiAgICAgICAgKF9hID0gdmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNldEFjdGl2ZShBbmltYXRpb25UeXBlLlRhcCwgdHJ1ZSk7XG4gICAgICAgIG9uVGFwU3RhcnQgPT09IG51bGwgfHwgb25UYXBTdGFydCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25UYXBTdGFydChldmVudCwgaW5mbyk7XG4gICAgfVxuICAgIHVzZVBvaW50ZXJFdmVudCh2aXN1YWxFbGVtZW50LCBcInBvaW50ZXJkb3duXCIsIGhhc1ByZXNzTGlzdGVuZXJzID8gb25Qb2ludGVyRG93biA6IHVuZGVmaW5lZCwgZXZlbnRPcHRpb25zKTtcbiAgICB1c2VVbm1vdW50RWZmZWN0KHJlbW92ZVBvaW50ZXJFbmRMaXN0ZW5lcik7XG59XG5cbmV4cG9ydCB7IHVzZVRhcEdlc3R1cmUgfTtcbiIsImltcG9ydCB7IEFuaW1hdGlvblR5cGUgfSBmcm9tICcuLi9yZW5kZXIvdXRpbHMvdHlwZXMubWpzJztcbmltcG9ydCB7IHVzZURvbUV2ZW50IH0gZnJvbSAnLi4vZXZlbnRzL3VzZS1kb20tZXZlbnQubWpzJztcblxuLyoqXG4gKlxuICogQHBhcmFtIHByb3BzXG4gKiBAcGFyYW0gcmVmXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gdXNlRm9jdXNHZXN0dXJlKF9hKSB7XG4gICAgdmFyIHdoaWxlRm9jdXMgPSBfYS53aGlsZUZvY3VzLCB2aXN1YWxFbGVtZW50ID0gX2EudmlzdWFsRWxlbWVudDtcbiAgICB2YXIgb25Gb2N1cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAoX2EgPSB2aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2V0QWN0aXZlKEFuaW1hdGlvblR5cGUuRm9jdXMsIHRydWUpO1xuICAgIH07XG4gICAgdmFyIG9uQmx1ciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICAoX2EgPSB2aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2V0QWN0aXZlKEFuaW1hdGlvblR5cGUuRm9jdXMsIGZhbHNlKTtcbiAgICB9O1xuICAgIHVzZURvbUV2ZW50KHZpc3VhbEVsZW1lbnQsIFwiZm9jdXNcIiwgd2hpbGVGb2N1cyA/IG9uRm9jdXMgOiB1bmRlZmluZWQpO1xuICAgIHVzZURvbUV2ZW50KHZpc3VhbEVsZW1lbnQsIFwiYmx1clwiLCB3aGlsZUZvY3VzID8gb25CbHVyIDogdW5kZWZpbmVkKTtcbn1cblxuZXhwb3J0IHsgdXNlRm9jdXNHZXN0dXJlIH07XG4iLCJpbXBvcnQgeyB1c2VDb250ZXh0LCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBQcmVzZW5jZUNvbnRleHQgfSBmcm9tICcuLi8uLi9jb250ZXh0L1ByZXNlbmNlQ29udGV4dC5tanMnO1xuaW1wb3J0IHsgdXNlSWQgfSBmcm9tICcuLi8uLi91dGlscy91c2UtaWQubWpzJztcblxuLyoqXG4gKiBXaGVuIGEgY29tcG9uZW50IGlzIHRoZSBjaGlsZCBvZiBgQW5pbWF0ZVByZXNlbmNlYCwgaXQgY2FuIHVzZSBgdXNlUHJlc2VuY2VgXG4gKiB0byBhY2Nlc3MgaW5mb3JtYXRpb24gYWJvdXQgd2hldGhlciBpdCdzIHN0aWxsIHByZXNlbnQgaW4gdGhlIFJlYWN0IHRyZWUuXG4gKlxuICogYGBganN4XG4gKiBpbXBvcnQgeyB1c2VQcmVzZW5jZSB9IGZyb20gXCJmcmFtZXItbW90aW9uXCJcbiAqXG4gKiBleHBvcnQgY29uc3QgQ29tcG9uZW50ID0gKCkgPT4ge1xuICogICBjb25zdCBbaXNQcmVzZW50LCBzYWZlVG9SZW1vdmVdID0gdXNlUHJlc2VuY2UoKVxuICpcbiAqICAgdXNlRWZmZWN0KCgpID0+IHtcbiAqICAgICAhaXNQcmVzZW50ICYmIHNldFRpbWVvdXQoc2FmZVRvUmVtb3ZlLCAxMDAwKVxuICogICB9LCBbaXNQcmVzZW50XSlcbiAqXG4gKiAgIHJldHVybiA8ZGl2IC8+XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBJZiBgaXNQcmVzZW50YCBpcyBgZmFsc2VgLCBpdCBtZWFucyB0aGF0IGEgY29tcG9uZW50IGhhcyBiZWVuIHJlbW92ZWQgdGhlIHRyZWUsIGJ1dFxuICogYEFuaW1hdGVQcmVzZW5jZWAgd29uJ3QgcmVhbGx5IHJlbW92ZSBpdCB1bnRpbCBgc2FmZVRvUmVtb3ZlYCBoYXMgYmVlbiBjYWxsZWQuXG4gKlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiB1c2VQcmVzZW5jZSgpIHtcbiAgICB2YXIgY29udGV4dCA9IHVzZUNvbnRleHQoUHJlc2VuY2VDb250ZXh0KTtcbiAgICBpZiAoY29udGV4dCA9PT0gbnVsbClcbiAgICAgICAgcmV0dXJuIFt0cnVlLCBudWxsXTtcbiAgICB2YXIgaXNQcmVzZW50ID0gY29udGV4dC5pc1ByZXNlbnQsIG9uRXhpdENvbXBsZXRlID0gY29udGV4dC5vbkV4aXRDb21wbGV0ZSwgcmVnaXN0ZXIgPSBjb250ZXh0LnJlZ2lzdGVyO1xuICAgIC8vIEl0J3Mgc2FmZSB0byBjYWxsIHRoZSBmb2xsb3dpbmcgaG9va3MgY29uZGl0aW9uYWxseSAoYWZ0ZXIgYW4gZWFybHkgcmV0dXJuKSBiZWNhdXNlIHRoZSBjb250ZXh0IHdpbGwgYWx3YXlzXG4gICAgLy8gZWl0aGVyIGJlIG51bGwgb3Igbm9uLW51bGwgZm9yIHRoZSBsaWZlc3BhbiBvZiB0aGUgY29tcG9uZW50LlxuICAgIC8vIFJlcGxhY2Ugd2l0aCB1c2VJZCB3aGVuIHJlbGVhc2VkIGluIFJlYWN0XG4gICAgdmFyIGlkID0gdXNlSWQoKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkgeyByZXR1cm4gcmVnaXN0ZXIoaWQpOyB9LCBbXSk7XG4gICAgdmFyIHNhZmVUb1JlbW92ZSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9uRXhpdENvbXBsZXRlID09PSBudWxsIHx8IG9uRXhpdENvbXBsZXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvbkV4aXRDb21wbGV0ZShpZCk7IH07XG4gICAgcmV0dXJuICFpc1ByZXNlbnQgJiYgb25FeGl0Q29tcGxldGUgPyBbZmFsc2UsIHNhZmVUb1JlbW92ZV0gOiBbdHJ1ZV07XG59XG4vKipcbiAqIFNpbWlsYXIgdG8gYHVzZVByZXNlbmNlYCwgZXhjZXB0IGB1c2VJc1ByZXNlbnRgIHNpbXBseSByZXR1cm5zIHdoZXRoZXIgb3Igbm90IHRoZSBjb21wb25lbnQgaXMgcHJlc2VudC5cbiAqIFRoZXJlIGlzIG5vIGBzYWZlVG9SZW1vdmVgIGZ1bmN0aW9uLlxuICpcbiAqIGBgYGpzeFxuICogaW1wb3J0IHsgdXNlSXNQcmVzZW50IH0gZnJvbSBcImZyYW1lci1tb3Rpb25cIlxuICpcbiAqIGV4cG9ydCBjb25zdCBDb21wb25lbnQgPSAoKSA9PiB7XG4gKiAgIGNvbnN0IGlzUHJlc2VudCA9IHVzZUlzUHJlc2VudCgpXG4gKlxuICogICB1c2VFZmZlY3QoKCkgPT4ge1xuICogICAgICFpc1ByZXNlbnQgJiYgY29uc29sZS5sb2coXCJJJ3ZlIGJlZW4gcmVtb3ZlZCFcIilcbiAqICAgfSwgW2lzUHJlc2VudF0pXG4gKlxuICogICByZXR1cm4gPGRpdiAvPlxuICogfVxuICogYGBgXG4gKlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiB1c2VJc1ByZXNlbnQoKSB7XG4gICAgcmV0dXJuIGlzUHJlc2VudCh1c2VDb250ZXh0KFByZXNlbmNlQ29udGV4dCkpO1xufVxuZnVuY3Rpb24gaXNQcmVzZW50KGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dCA9PT0gbnVsbCA/IHRydWUgOiBjb250ZXh0LmlzUHJlc2VudDtcbn1cblxuZXhwb3J0IHsgaXNQcmVzZW50LCB1c2VJc1ByZXNlbnQsIHVzZVByZXNlbmNlIH07XG4iLCJmdW5jdGlvbiBzaGFsbG93Q29tcGFyZShuZXh0LCBwcmV2KSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHByZXYpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgdmFyIHByZXZMZW5ndGggPSBwcmV2Lmxlbmd0aDtcbiAgICBpZiAocHJldkxlbmd0aCAhPT0gbmV4dC5sZW5ndGgpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHByZXZMZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAocHJldltpXSAhPT0gbmV4dFtpXSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmV4cG9ydCB7IHNoYWxsb3dDb21wYXJlIH07XG4iLCJjb25zdCBjbGFtcCA9IChtaW4sIG1heCwgdikgPT4gTWF0aC5taW4oTWF0aC5tYXgodiwgbWluKSwgbWF4KTtcblxuZXhwb3J0IHsgY2xhbXAgfTtcbiIsImltcG9ydCB7IHdhcm5pbmcgfSBmcm9tICdoZXktbGlzdGVuJztcbmltcG9ydCB7IGNsYW1wIH0gZnJvbSAnLi4vLi4vdXRpbHMvY2xhbXAubWpzJztcblxuY29uc3Qgc2FmZU1pbiA9IDAuMDAxO1xuY29uc3QgbWluRHVyYXRpb24gPSAwLjAxO1xuY29uc3QgbWF4RHVyYXRpb24gPSAxMC4wO1xuY29uc3QgbWluRGFtcGluZyA9IDAuMDU7XG5jb25zdCBtYXhEYW1waW5nID0gMTtcbmZ1bmN0aW9uIGZpbmRTcHJpbmcoeyBkdXJhdGlvbiA9IDgwMCwgYm91bmNlID0gMC4yNSwgdmVsb2NpdHkgPSAwLCBtYXNzID0gMSwgfSkge1xuICAgIGxldCBlbnZlbG9wZTtcbiAgICBsZXQgZGVyaXZhdGl2ZTtcbiAgICB3YXJuaW5nKGR1cmF0aW9uIDw9IG1heER1cmF0aW9uICogMTAwMCwgXCJTcHJpbmcgZHVyYXRpb24gbXVzdCBiZSAxMCBzZWNvbmRzIG9yIGxlc3NcIik7XG4gICAgbGV0IGRhbXBpbmdSYXRpbyA9IDEgLSBib3VuY2U7XG4gICAgZGFtcGluZ1JhdGlvID0gY2xhbXAobWluRGFtcGluZywgbWF4RGFtcGluZywgZGFtcGluZ1JhdGlvKTtcbiAgICBkdXJhdGlvbiA9IGNsYW1wKG1pbkR1cmF0aW9uLCBtYXhEdXJhdGlvbiwgZHVyYXRpb24gLyAxMDAwKTtcbiAgICBpZiAoZGFtcGluZ1JhdGlvIDwgMSkge1xuICAgICAgICBlbnZlbG9wZSA9ICh1bmRhbXBlZEZyZXEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9uZW50aWFsRGVjYXkgPSB1bmRhbXBlZEZyZXEgKiBkYW1waW5nUmF0aW87XG4gICAgICAgICAgICBjb25zdCBkZWx0YSA9IGV4cG9uZW50aWFsRGVjYXkgKiBkdXJhdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGEgPSBleHBvbmVudGlhbERlY2F5IC0gdmVsb2NpdHk7XG4gICAgICAgICAgICBjb25zdCBiID0gY2FsY0FuZ3VsYXJGcmVxKHVuZGFtcGVkRnJlcSwgZGFtcGluZ1JhdGlvKTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBNYXRoLmV4cCgtZGVsdGEpO1xuICAgICAgICAgICAgcmV0dXJuIHNhZmVNaW4gLSAoYSAvIGIpICogYztcbiAgICAgICAgfTtcbiAgICAgICAgZGVyaXZhdGl2ZSA9ICh1bmRhbXBlZEZyZXEpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9uZW50aWFsRGVjYXkgPSB1bmRhbXBlZEZyZXEgKiBkYW1waW5nUmF0aW87XG4gICAgICAgICAgICBjb25zdCBkZWx0YSA9IGV4cG9uZW50aWFsRGVjYXkgKiBkdXJhdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGQgPSBkZWx0YSAqIHZlbG9jaXR5ICsgdmVsb2NpdHk7XG4gICAgICAgICAgICBjb25zdCBlID0gTWF0aC5wb3coZGFtcGluZ1JhdGlvLCAyKSAqIE1hdGgucG93KHVuZGFtcGVkRnJlcSwgMikgKiBkdXJhdGlvbjtcbiAgICAgICAgICAgIGNvbnN0IGYgPSBNYXRoLmV4cCgtZGVsdGEpO1xuICAgICAgICAgICAgY29uc3QgZyA9IGNhbGNBbmd1bGFyRnJlcShNYXRoLnBvdyh1bmRhbXBlZEZyZXEsIDIpLCBkYW1waW5nUmF0aW8pO1xuICAgICAgICAgICAgY29uc3QgZmFjdG9yID0gLWVudmVsb3BlKHVuZGFtcGVkRnJlcSkgKyBzYWZlTWluID4gMCA/IC0xIDogMTtcbiAgICAgICAgICAgIHJldHVybiAoZmFjdG9yICogKChkIC0gZSkgKiBmKSkgLyBnO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZW52ZWxvcGUgPSAodW5kYW1wZWRGcmVxKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhID0gTWF0aC5leHAoLXVuZGFtcGVkRnJlcSAqIGR1cmF0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodW5kYW1wZWRGcmVxIC0gdmVsb2NpdHkpICogZHVyYXRpb24gKyAxO1xuICAgICAgICAgICAgcmV0dXJuIC1zYWZlTWluICsgYSAqIGI7XG4gICAgICAgIH07XG4gICAgICAgIGRlcml2YXRpdmUgPSAodW5kYW1wZWRGcmVxKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhID0gTWF0aC5leHAoLXVuZGFtcGVkRnJlcSAqIGR1cmF0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGIgPSAodmVsb2NpdHkgLSB1bmRhbXBlZEZyZXEpICogKGR1cmF0aW9uICogZHVyYXRpb24pO1xuICAgICAgICAgICAgcmV0dXJuIGEgKiBiO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBpbml0aWFsR3Vlc3MgPSA1IC8gZHVyYXRpb247XG4gICAgY29uc3QgdW5kYW1wZWRGcmVxID0gYXBwcm94aW1hdGVSb290KGVudmVsb3BlLCBkZXJpdmF0aXZlLCBpbml0aWFsR3Vlc3MpO1xuICAgIGR1cmF0aW9uID0gZHVyYXRpb24gKiAxMDAwO1xuICAgIGlmIChpc05hTih1bmRhbXBlZEZyZXEpKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdGlmZm5lc3M6IDEwMCxcbiAgICAgICAgICAgIGRhbXBpbmc6IDEwLFxuICAgICAgICAgICAgZHVyYXRpb24sXG4gICAgICAgIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBzdGlmZm5lc3MgPSBNYXRoLnBvdyh1bmRhbXBlZEZyZXEsIDIpICogbWFzcztcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0aWZmbmVzcyxcbiAgICAgICAgICAgIGRhbXBpbmc6IGRhbXBpbmdSYXRpbyAqIDIgKiBNYXRoLnNxcnQobWFzcyAqIHN0aWZmbmVzcyksXG4gICAgICAgICAgICBkdXJhdGlvbixcbiAgICAgICAgfTtcbiAgICB9XG59XG5jb25zdCByb290SXRlcmF0aW9ucyA9IDEyO1xuZnVuY3Rpb24gYXBwcm94aW1hdGVSb290KGVudmVsb3BlLCBkZXJpdmF0aXZlLCBpbml0aWFsR3Vlc3MpIHtcbiAgICBsZXQgcmVzdWx0ID0gaW5pdGlhbEd1ZXNzO1xuICAgIGZvciAobGV0IGkgPSAxOyBpIDwgcm9vdEl0ZXJhdGlvbnM7IGkrKykge1xuICAgICAgICByZXN1bHQgPSByZXN1bHQgLSBlbnZlbG9wZShyZXN1bHQpIC8gZGVyaXZhdGl2ZShyZXN1bHQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gY2FsY0FuZ3VsYXJGcmVxKHVuZGFtcGVkRnJlcSwgZGFtcGluZ1JhdGlvKSB7XG4gICAgcmV0dXJuIHVuZGFtcGVkRnJlcSAqIE1hdGguc3FydCgxIC0gZGFtcGluZ1JhdGlvICogZGFtcGluZ1JhdGlvKTtcbn1cblxuZXhwb3J0IHsgY2FsY0FuZ3VsYXJGcmVxLCBmaW5kU3ByaW5nLCBtYXhEYW1waW5nLCBtYXhEdXJhdGlvbiwgbWluRGFtcGluZywgbWluRHVyYXRpb24gfTtcbiIsImltcG9ydCB7IF9fcmVzdCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGZpbmRTcHJpbmcsIGNhbGNBbmd1bGFyRnJlcSB9IGZyb20gJy4uL3V0aWxzL2ZpbmQtc3ByaW5nLm1qcyc7XG5cbmNvbnN0IGR1cmF0aW9uS2V5cyA9IFtcImR1cmF0aW9uXCIsIFwiYm91bmNlXCJdO1xuY29uc3QgcGh5c2ljc0tleXMgPSBbXCJzdGlmZm5lc3NcIiwgXCJkYW1waW5nXCIsIFwibWFzc1wiXTtcbmZ1bmN0aW9uIGlzU3ByaW5nVHlwZShvcHRpb25zLCBrZXlzKSB7XG4gICAgcmV0dXJuIGtleXMuc29tZSgoa2V5KSA9PiBvcHRpb25zW2tleV0gIT09IHVuZGVmaW5lZCk7XG59XG5mdW5jdGlvbiBnZXRTcHJpbmdPcHRpb25zKG9wdGlvbnMpIHtcbiAgICBsZXQgc3ByaW5nT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyB2ZWxvY2l0eTogMC4wLCBzdGlmZm5lc3M6IDEwMCwgZGFtcGluZzogMTAsIG1hc3M6IDEuMCwgaXNSZXNvbHZlZEZyb21EdXJhdGlvbjogZmFsc2UgfSwgb3B0aW9ucyk7XG4gICAgaWYgKCFpc1NwcmluZ1R5cGUob3B0aW9ucywgcGh5c2ljc0tleXMpICYmXG4gICAgICAgIGlzU3ByaW5nVHlwZShvcHRpb25zLCBkdXJhdGlvbktleXMpKSB7XG4gICAgICAgIGNvbnN0IGRlcml2ZWQgPSBmaW5kU3ByaW5nKG9wdGlvbnMpO1xuICAgICAgICBzcHJpbmdPcHRpb25zID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHNwcmluZ09wdGlvbnMpLCBkZXJpdmVkKSwgeyB2ZWxvY2l0eTogMC4wLCBtYXNzOiAxLjAgfSk7XG4gICAgICAgIHNwcmluZ09wdGlvbnMuaXNSZXNvbHZlZEZyb21EdXJhdGlvbiA9IHRydWU7XG4gICAgfVxuICAgIHJldHVybiBzcHJpbmdPcHRpb25zO1xufVxuZnVuY3Rpb24gc3ByaW5nKF9hKSB7XG4gICAgdmFyIHsgZnJvbSA9IDAuMCwgdG8gPSAxLjAsIHJlc3RTcGVlZCA9IDIsIHJlc3REZWx0YSB9ID0gX2EsIG9wdGlvbnMgPSBfX3Jlc3QoX2EsIFtcImZyb21cIiwgXCJ0b1wiLCBcInJlc3RTcGVlZFwiLCBcInJlc3REZWx0YVwiXSk7XG4gICAgY29uc3Qgc3RhdGUgPSB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogZnJvbSB9O1xuICAgIGxldCB7IHN0aWZmbmVzcywgZGFtcGluZywgbWFzcywgdmVsb2NpdHksIGR1cmF0aW9uLCBpc1Jlc29sdmVkRnJvbUR1cmF0aW9uLCB9ID0gZ2V0U3ByaW5nT3B0aW9ucyhvcHRpb25zKTtcbiAgICBsZXQgcmVzb2x2ZVNwcmluZyA9IHplcm87XG4gICAgbGV0IHJlc29sdmVWZWxvY2l0eSA9IHplcm87XG4gICAgZnVuY3Rpb24gY3JlYXRlU3ByaW5nKCkge1xuICAgICAgICBjb25zdCBpbml0aWFsVmVsb2NpdHkgPSB2ZWxvY2l0eSA/IC0odmVsb2NpdHkgLyAxMDAwKSA6IDAuMDtcbiAgICAgICAgY29uc3QgaW5pdGlhbERlbHRhID0gdG8gLSBmcm9tO1xuICAgICAgICBjb25zdCBkYW1waW5nUmF0aW8gPSBkYW1waW5nIC8gKDIgKiBNYXRoLnNxcnQoc3RpZmZuZXNzICogbWFzcykpO1xuICAgICAgICBjb25zdCB1bmRhbXBlZEFuZ3VsYXJGcmVxID0gTWF0aC5zcXJ0KHN0aWZmbmVzcyAvIG1hc3MpIC8gMTAwMDtcbiAgICAgICAgaWYgKHJlc3REZWx0YSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXN0RGVsdGEgPSBNYXRoLm1pbihNYXRoLmFicyh0byAtIGZyb20pIC8gMTAwLCAwLjQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYW1waW5nUmF0aW8gPCAxKSB7XG4gICAgICAgICAgICBjb25zdCBhbmd1bGFyRnJlcSA9IGNhbGNBbmd1bGFyRnJlcSh1bmRhbXBlZEFuZ3VsYXJGcmVxLCBkYW1waW5nUmF0aW8pO1xuICAgICAgICAgICAgcmVzb2x2ZVNwcmluZyA9ICh0KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZW52ZWxvcGUgPSBNYXRoLmV4cCgtZGFtcGluZ1JhdGlvICogdW5kYW1wZWRBbmd1bGFyRnJlcSAqIHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiAodG8gLVxuICAgICAgICAgICAgICAgICAgICBlbnZlbG9wZSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAoKChpbml0aWFsVmVsb2NpdHkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbXBpbmdSYXRpbyAqIHVuZGFtcGVkQW5ndWxhckZyZXEgKiBpbml0aWFsRGVsdGEpIC9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmd1bGFyRnJlcSkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguc2luKGFuZ3VsYXJGcmVxICogdCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxEZWx0YSAqIE1hdGguY29zKGFuZ3VsYXJGcmVxICogdCkpKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXNvbHZlVmVsb2NpdHkgPSAodCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVudmVsb3BlID0gTWF0aC5leHAoLWRhbXBpbmdSYXRpbyAqIHVuZGFtcGVkQW5ndWxhckZyZXEgKiB0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gKGRhbXBpbmdSYXRpbyAqXG4gICAgICAgICAgICAgICAgICAgIHVuZGFtcGVkQW5ndWxhckZyZXEgKlxuICAgICAgICAgICAgICAgICAgICBlbnZlbG9wZSAqXG4gICAgICAgICAgICAgICAgICAgICgoTWF0aC5zaW4oYW5ndWxhckZyZXEgKiB0KSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW5pdGlhbFZlbG9jaXR5ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYW1waW5nUmF0aW8gKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRhbXBlZEFuZ3VsYXJGcmVxICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbERlbHRhKSkgL1xuICAgICAgICAgICAgICAgICAgICAgICAgYW5ndWxhckZyZXEgK1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbERlbHRhICogTWF0aC5jb3MoYW5ndWxhckZyZXEgKiB0KSkgLVxuICAgICAgICAgICAgICAgICAgICBlbnZlbG9wZSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAoTWF0aC5jb3MoYW5ndWxhckZyZXEgKiB0KSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluaXRpYWxWZWxvY2l0eSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbXBpbmdSYXRpbyAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmRhbXBlZEFuZ3VsYXJGcmVxICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluaXRpYWxEZWx0YSkgLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZ3VsYXJGcmVxICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbERlbHRhICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5zaW4oYW5ndWxhckZyZXEgKiB0KSkpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChkYW1waW5nUmF0aW8gPT09IDEpIHtcbiAgICAgICAgICAgIHJlc29sdmVTcHJpbmcgPSAodCkgPT4gdG8gLVxuICAgICAgICAgICAgICAgIE1hdGguZXhwKC11bmRhbXBlZEFuZ3VsYXJGcmVxICogdCkgKlxuICAgICAgICAgICAgICAgICAgICAoaW5pdGlhbERlbHRhICtcbiAgICAgICAgICAgICAgICAgICAgICAgIChpbml0aWFsVmVsb2NpdHkgKyB1bmRhbXBlZEFuZ3VsYXJGcmVxICogaW5pdGlhbERlbHRhKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBkYW1wZWRBbmd1bGFyRnJlcSA9IHVuZGFtcGVkQW5ndWxhckZyZXEgKiBNYXRoLnNxcnQoZGFtcGluZ1JhdGlvICogZGFtcGluZ1JhdGlvIC0gMSk7XG4gICAgICAgICAgICByZXNvbHZlU3ByaW5nID0gKHQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnZlbG9wZSA9IE1hdGguZXhwKC1kYW1waW5nUmF0aW8gKiB1bmRhbXBlZEFuZ3VsYXJGcmVxICogdCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZnJlcUZvclQgPSBNYXRoLm1pbihkYW1wZWRBbmd1bGFyRnJlcSAqIHQsIDMwMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuICh0byAtXG4gICAgICAgICAgICAgICAgICAgIChlbnZlbG9wZSAqXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGluaXRpYWxWZWxvY2l0eSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGFtcGluZ1JhdGlvICogdW5kYW1wZWRBbmd1bGFyRnJlcSAqIGluaXRpYWxEZWx0YSkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGguc2luaChmcmVxRm9yVCkgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhbXBlZEFuZ3VsYXJGcmVxICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbERlbHRhICpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5jb3NoKGZyZXFGb3JUKSkpIC9cbiAgICAgICAgICAgICAgICAgICAgICAgIGRhbXBlZEFuZ3VsYXJGcmVxKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY3JlYXRlU3ByaW5nKCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogKHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnQgPSByZXNvbHZlU3ByaW5nKHQpO1xuICAgICAgICAgICAgaWYgKCFpc1Jlc29sdmVkRnJvbUR1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY3VycmVudFZlbG9jaXR5ID0gcmVzb2x2ZVZlbG9jaXR5KHQpICogMTAwMDtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0JlbG93VmVsb2NpdHlUaHJlc2hvbGQgPSBNYXRoLmFicyhjdXJyZW50VmVsb2NpdHkpIDw9IHJlc3RTcGVlZDtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0JlbG93RGlzcGxhY2VtZW50VGhyZXNob2xkID0gTWF0aC5hYnModG8gLSBjdXJyZW50KSA8PSByZXN0RGVsdGE7XG4gICAgICAgICAgICAgICAgc3RhdGUuZG9uZSA9XG4gICAgICAgICAgICAgICAgICAgIGlzQmVsb3dWZWxvY2l0eVRocmVzaG9sZCAmJiBpc0JlbG93RGlzcGxhY2VtZW50VGhyZXNob2xkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RhdGUuZG9uZSA9IHQgPj0gZHVyYXRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdGF0ZS52YWx1ZSA9IHN0YXRlLmRvbmUgPyB0byA6IGN1cnJlbnQ7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgIH0sXG4gICAgICAgIGZsaXBUYXJnZXQ6ICgpID0+IHtcbiAgICAgICAgICAgIHZlbG9jaXR5ID0gLXZlbG9jaXR5O1xuICAgICAgICAgICAgW2Zyb20sIHRvXSA9IFt0bywgZnJvbV07XG4gICAgICAgICAgICBjcmVhdGVTcHJpbmcoKTtcbiAgICAgICAgfSxcbiAgICB9O1xufVxuc3ByaW5nLm5lZWRzSW50ZXJwb2xhdGlvbiA9IChhLCBiKSA9PiB0eXBlb2YgYSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgYiA9PT0gXCJzdHJpbmdcIjtcbmNvbnN0IHplcm8gPSAoX3QpID0+IDA7XG5cbmV4cG9ydCB7IHNwcmluZyB9O1xuIiwiY29uc3QgcHJvZ3Jlc3MgPSAoZnJvbSwgdG8sIHZhbHVlKSA9PiB7XG4gICAgY29uc3QgdG9Gcm9tRGlmZmVyZW5jZSA9IHRvIC0gZnJvbTtcbiAgICByZXR1cm4gdG9Gcm9tRGlmZmVyZW5jZSA9PT0gMCA/IDEgOiAodmFsdWUgLSBmcm9tKSAvIHRvRnJvbURpZmZlcmVuY2U7XG59O1xuXG5leHBvcnQgeyBwcm9ncmVzcyB9O1xuIiwiY29uc3QgbWl4ID0gKGZyb20sIHRvLCBwcm9ncmVzcykgPT4gLXByb2dyZXNzICogZnJvbSArIHByb2dyZXNzICogdG8gKyBmcm9tO1xuXG5leHBvcnQgeyBtaXggfTtcbiIsImltcG9ydCB7IGlzU3RyaW5nLCBzaW5nbGVDb2xvclJlZ2V4LCBmbG9hdFJlZ2V4IH0gZnJvbSAnLi4vdXRpbHMubWpzJztcblxuY29uc3QgaXNDb2xvclN0cmluZyA9ICh0eXBlLCB0ZXN0UHJvcCkgPT4gKHYpID0+IHtcbiAgICByZXR1cm4gQm9vbGVhbigoaXNTdHJpbmcodikgJiYgc2luZ2xlQ29sb3JSZWdleC50ZXN0KHYpICYmIHYuc3RhcnRzV2l0aCh0eXBlKSkgfHxcbiAgICAgICAgKHRlc3RQcm9wICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2LCB0ZXN0UHJvcCkpKTtcbn07XG5jb25zdCBzcGxpdENvbG9yID0gKGFOYW1lLCBiTmFtZSwgY05hbWUpID0+ICh2KSA9PiB7XG4gICAgaWYgKCFpc1N0cmluZyh2KSlcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgY29uc3QgW2EsIGIsIGMsIGFscGhhXSA9IHYubWF0Y2goZmxvYXRSZWdleCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgW2FOYW1lXTogcGFyc2VGbG9hdChhKSxcbiAgICAgICAgW2JOYW1lXTogcGFyc2VGbG9hdChiKSxcbiAgICAgICAgW2NOYW1lXTogcGFyc2VGbG9hdChjKSxcbiAgICAgICAgYWxwaGE6IGFscGhhICE9PSB1bmRlZmluZWQgPyBwYXJzZUZsb2F0KGFscGhhKSA6IDEsXG4gICAgfTtcbn07XG5cbmV4cG9ydCB7IGlzQ29sb3JTdHJpbmcsIHNwbGl0Q29sb3IgfTtcbiIsImltcG9ydCB7IG51bWJlciwgYWxwaGEgfSBmcm9tICcuLi9udW1iZXJzL2luZGV4Lm1qcyc7XG5pbXBvcnQgeyBzYW5pdGl6ZSwgY2xhbXAgfSBmcm9tICcuLi91dGlscy5tanMnO1xuaW1wb3J0IHsgaXNDb2xvclN0cmluZywgc3BsaXRDb2xvciB9IGZyb20gJy4vdXRpbHMubWpzJztcblxuY29uc3QgY2xhbXBSZ2JVbml0ID0gY2xhbXAoMCwgMjU1KTtcbmNvbnN0IHJnYlVuaXQgPSBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIG51bWJlciksIHsgdHJhbnNmb3JtOiAodikgPT4gTWF0aC5yb3VuZChjbGFtcFJnYlVuaXQodikpIH0pO1xuY29uc3QgcmdiYSA9IHtcbiAgICB0ZXN0OiBpc0NvbG9yU3RyaW5nKCdyZ2InLCAncmVkJyksXG4gICAgcGFyc2U6IHNwbGl0Q29sb3IoJ3JlZCcsICdncmVlbicsICdibHVlJyksXG4gICAgdHJhbnNmb3JtOiAoeyByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTogYWxwaGEkMSA9IDEgfSkgPT4gJ3JnYmEoJyArXG4gICAgICAgIHJnYlVuaXQudHJhbnNmb3JtKHJlZCkgK1xuICAgICAgICAnLCAnICtcbiAgICAgICAgcmdiVW5pdC50cmFuc2Zvcm0oZ3JlZW4pICtcbiAgICAgICAgJywgJyArXG4gICAgICAgIHJnYlVuaXQudHJhbnNmb3JtKGJsdWUpICtcbiAgICAgICAgJywgJyArXG4gICAgICAgIHNhbml0aXplKGFscGhhLnRyYW5zZm9ybShhbHBoYSQxKSkgK1xuICAgICAgICAnKScsXG59O1xuXG5leHBvcnQgeyByZ2JVbml0LCByZ2JhIH07XG4iLCJpbXBvcnQgeyByZ2JhIH0gZnJvbSAnLi9yZ2JhLm1qcyc7XG5pbXBvcnQgeyBpc0NvbG9yU3RyaW5nIH0gZnJvbSAnLi91dGlscy5tanMnO1xuXG5mdW5jdGlvbiBwYXJzZUhleCh2KSB7XG4gICAgbGV0IHIgPSAnJztcbiAgICBsZXQgZyA9ICcnO1xuICAgIGxldCBiID0gJyc7XG4gICAgbGV0IGEgPSAnJztcbiAgICBpZiAodi5sZW5ndGggPiA1KSB7XG4gICAgICAgIHIgPSB2LnN1YnN0cigxLCAyKTtcbiAgICAgICAgZyA9IHYuc3Vic3RyKDMsIDIpO1xuICAgICAgICBiID0gdi5zdWJzdHIoNSwgMik7XG4gICAgICAgIGEgPSB2LnN1YnN0cig3LCAyKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHIgPSB2LnN1YnN0cigxLCAxKTtcbiAgICAgICAgZyA9IHYuc3Vic3RyKDIsIDEpO1xuICAgICAgICBiID0gdi5zdWJzdHIoMywgMSk7XG4gICAgICAgIGEgPSB2LnN1YnN0cig0LCAxKTtcbiAgICAgICAgciArPSByO1xuICAgICAgICBnICs9IGc7XG4gICAgICAgIGIgKz0gYjtcbiAgICAgICAgYSArPSBhO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICByZWQ6IHBhcnNlSW50KHIsIDE2KSxcbiAgICAgICAgZ3JlZW46IHBhcnNlSW50KGcsIDE2KSxcbiAgICAgICAgYmx1ZTogcGFyc2VJbnQoYiwgMTYpLFxuICAgICAgICBhbHBoYTogYSA/IHBhcnNlSW50KGEsIDE2KSAvIDI1NSA6IDEsXG4gICAgfTtcbn1cbmNvbnN0IGhleCA9IHtcbiAgICB0ZXN0OiBpc0NvbG9yU3RyaW5nKCcjJyksXG4gICAgcGFyc2U6IHBhcnNlSGV4LFxuICAgIHRyYW5zZm9ybTogcmdiYS50cmFuc2Zvcm0sXG59O1xuXG5leHBvcnQgeyBoZXggfTtcbiIsImltcG9ydCB7IGFscGhhIH0gZnJvbSAnLi4vbnVtYmVycy9pbmRleC5tanMnO1xuaW1wb3J0IHsgcGVyY2VudCB9IGZyb20gJy4uL251bWJlcnMvdW5pdHMubWpzJztcbmltcG9ydCB7IHNhbml0aXplIH0gZnJvbSAnLi4vdXRpbHMubWpzJztcbmltcG9ydCB7IGlzQ29sb3JTdHJpbmcsIHNwbGl0Q29sb3IgfSBmcm9tICcuL3V0aWxzLm1qcyc7XG5cbmNvbnN0IGhzbGEgPSB7XG4gICAgdGVzdDogaXNDb2xvclN0cmluZygnaHNsJywgJ2h1ZScpLFxuICAgIHBhcnNlOiBzcGxpdENvbG9yKCdodWUnLCAnc2F0dXJhdGlvbicsICdsaWdodG5lc3MnKSxcbiAgICB0cmFuc2Zvcm06ICh7IGh1ZSwgc2F0dXJhdGlvbiwgbGlnaHRuZXNzLCBhbHBoYTogYWxwaGEkMSA9IDEgfSkgPT4ge1xuICAgICAgICByZXR1cm4gKCdoc2xhKCcgK1xuICAgICAgICAgICAgTWF0aC5yb3VuZChodWUpICtcbiAgICAgICAgICAgICcsICcgK1xuICAgICAgICAgICAgcGVyY2VudC50cmFuc2Zvcm0oc2FuaXRpemUoc2F0dXJhdGlvbikpICtcbiAgICAgICAgICAgICcsICcgK1xuICAgICAgICAgICAgcGVyY2VudC50cmFuc2Zvcm0oc2FuaXRpemUobGlnaHRuZXNzKSkgK1xuICAgICAgICAgICAgJywgJyArXG4gICAgICAgICAgICBzYW5pdGl6ZShhbHBoYS50cmFuc2Zvcm0oYWxwaGEkMSkpICtcbiAgICAgICAgICAgICcpJyk7XG4gICAgfSxcbn07XG5cbmV4cG9ydCB7IGhzbGEgfTtcbiIsImZ1bmN0aW9uIGh1ZVRvUmdiKHAsIHEsIHQpIHtcbiAgICBpZiAodCA8IDApXG4gICAgICAgIHQgKz0gMTtcbiAgICBpZiAodCA+IDEpXG4gICAgICAgIHQgLT0gMTtcbiAgICBpZiAodCA8IDEgLyA2KVxuICAgICAgICByZXR1cm4gcCArIChxIC0gcCkgKiA2ICogdDtcbiAgICBpZiAodCA8IDEgLyAyKVxuICAgICAgICByZXR1cm4gcTtcbiAgICBpZiAodCA8IDIgLyAzKVxuICAgICAgICByZXR1cm4gcCArIChxIC0gcCkgKiAoMiAvIDMgLSB0KSAqIDY7XG4gICAgcmV0dXJuIHA7XG59XG5mdW5jdGlvbiBoc2xhVG9SZ2JhKHsgaHVlLCBzYXR1cmF0aW9uLCBsaWdodG5lc3MsIGFscGhhIH0pIHtcbiAgICBodWUgLz0gMzYwO1xuICAgIHNhdHVyYXRpb24gLz0gMTAwO1xuICAgIGxpZ2h0bmVzcyAvPSAxMDA7XG4gICAgbGV0IHJlZCA9IDA7XG4gICAgbGV0IGdyZWVuID0gMDtcbiAgICBsZXQgYmx1ZSA9IDA7XG4gICAgaWYgKCFzYXR1cmF0aW9uKSB7XG4gICAgICAgIHJlZCA9IGdyZWVuID0gYmx1ZSA9IGxpZ2h0bmVzcztcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IHEgPSBsaWdodG5lc3MgPCAwLjVcbiAgICAgICAgICAgID8gbGlnaHRuZXNzICogKDEgKyBzYXR1cmF0aW9uKVxuICAgICAgICAgICAgOiBsaWdodG5lc3MgKyBzYXR1cmF0aW9uIC0gbGlnaHRuZXNzICogc2F0dXJhdGlvbjtcbiAgICAgICAgY29uc3QgcCA9IDIgKiBsaWdodG5lc3MgLSBxO1xuICAgICAgICByZWQgPSBodWVUb1JnYihwLCBxLCBodWUgKyAxIC8gMyk7XG4gICAgICAgIGdyZWVuID0gaHVlVG9SZ2IocCwgcSwgaHVlKTtcbiAgICAgICAgYmx1ZSA9IGh1ZVRvUmdiKHAsIHEsIGh1ZSAtIDEgLyAzKTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcmVkOiBNYXRoLnJvdW5kKHJlZCAqIDI1NSksXG4gICAgICAgIGdyZWVuOiBNYXRoLnJvdW5kKGdyZWVuICogMjU1KSxcbiAgICAgICAgYmx1ZTogTWF0aC5yb3VuZChibHVlICogMjU1KSxcbiAgICAgICAgYWxwaGEsXG4gICAgfTtcbn1cblxuZXhwb3J0IHsgaHNsYVRvUmdiYSB9O1xuIiwiaW1wb3J0IHsgbWl4IH0gZnJvbSAnLi9taXgubWpzJztcbmltcG9ydCB7IGhzbGEsIHJnYmEsIGhleCB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcbmltcG9ydCB7IGludmFyaWFudCB9IGZyb20gJ2hleS1saXN0ZW4nO1xuaW1wb3J0IHsgaHNsYVRvUmdiYSB9IGZyb20gJy4vaHNsYS10by1yZ2JhLm1qcyc7XG5cbmNvbnN0IG1peExpbmVhckNvbG9yID0gKGZyb20sIHRvLCB2KSA9PiB7XG4gICAgY29uc3QgZnJvbUV4cG8gPSBmcm9tICogZnJvbTtcbiAgICBjb25zdCB0b0V4cG8gPSB0byAqIHRvO1xuICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5tYXgoMCwgdiAqICh0b0V4cG8gLSBmcm9tRXhwbykgKyBmcm9tRXhwbykpO1xufTtcbmNvbnN0IGNvbG9yVHlwZXMgPSBbaGV4LCByZ2JhLCBoc2xhXTtcbmNvbnN0IGdldENvbG9yVHlwZSA9ICh2KSA9PiBjb2xvclR5cGVzLmZpbmQoKHR5cGUpID0+IHR5cGUudGVzdCh2KSk7XG5jb25zdCBub3RBbmltYXRhYmxlID0gKGNvbG9yKSA9PiBgJyR7Y29sb3J9JyBpcyBub3QgYW4gYW5pbWF0YWJsZSBjb2xvci4gVXNlIHRoZSBlcXVpdmFsZW50IGNvbG9yIGNvZGUgaW5zdGVhZC5gO1xuY29uc3QgbWl4Q29sb3IgPSAoZnJvbSwgdG8pID0+IHtcbiAgICBsZXQgZnJvbUNvbG9yVHlwZSA9IGdldENvbG9yVHlwZShmcm9tKTtcbiAgICBsZXQgdG9Db2xvclR5cGUgPSBnZXRDb2xvclR5cGUodG8pO1xuICAgIGludmFyaWFudCghIWZyb21Db2xvclR5cGUsIG5vdEFuaW1hdGFibGUoZnJvbSkpO1xuICAgIGludmFyaWFudCghIXRvQ29sb3JUeXBlLCBub3RBbmltYXRhYmxlKHRvKSk7XG4gICAgbGV0IGZyb21Db2xvciA9IGZyb21Db2xvclR5cGUucGFyc2UoZnJvbSk7XG4gICAgbGV0IHRvQ29sb3IgPSB0b0NvbG9yVHlwZS5wYXJzZSh0byk7XG4gICAgaWYgKGZyb21Db2xvclR5cGUgPT09IGhzbGEpIHtcbiAgICAgICAgZnJvbUNvbG9yID0gaHNsYVRvUmdiYShmcm9tQ29sb3IpO1xuICAgICAgICBmcm9tQ29sb3JUeXBlID0gcmdiYTtcbiAgICB9XG4gICAgaWYgKHRvQ29sb3JUeXBlID09PSBoc2xhKSB7XG4gICAgICAgIHRvQ29sb3IgPSBoc2xhVG9SZ2JhKHRvQ29sb3IpO1xuICAgICAgICB0b0NvbG9yVHlwZSA9IHJnYmE7XG4gICAgfVxuICAgIGNvbnN0IGJsZW5kZWQgPSBPYmplY3QuYXNzaWduKHt9LCBmcm9tQ29sb3IpO1xuICAgIHJldHVybiAodikgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBibGVuZGVkKSB7XG4gICAgICAgICAgICBpZiAoa2V5ICE9PSBcImFscGhhXCIpIHtcbiAgICAgICAgICAgICAgICBibGVuZGVkW2tleV0gPSBtaXhMaW5lYXJDb2xvcihmcm9tQ29sb3Jba2V5XSwgdG9Db2xvcltrZXldLCB2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBibGVuZGVkLmFscGhhID0gbWl4KGZyb21Db2xvci5hbHBoYSwgdG9Db2xvci5hbHBoYSwgdik7XG4gICAgICAgIHJldHVybiBmcm9tQ29sb3JUeXBlLnRyYW5zZm9ybShibGVuZGVkKTtcbiAgICB9O1xufTtcblxuZXhwb3J0IHsgbWl4Q29sb3IsIG1peExpbmVhckNvbG9yIH07XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJy4uL3V0aWxzLm1qcyc7XG5pbXBvcnQgeyBoZXggfSBmcm9tICcuL2hleC5tanMnO1xuaW1wb3J0IHsgaHNsYSB9IGZyb20gJy4vaHNsYS5tanMnO1xuaW1wb3J0IHsgcmdiYSB9IGZyb20gJy4vcmdiYS5tanMnO1xuXG5jb25zdCBjb2xvciA9IHtcbiAgICB0ZXN0OiAodikgPT4gcmdiYS50ZXN0KHYpIHx8IGhleC50ZXN0KHYpIHx8IGhzbGEudGVzdCh2KSxcbiAgICBwYXJzZTogKHYpID0+IHtcbiAgICAgICAgaWYgKHJnYmEudGVzdCh2KSkge1xuICAgICAgICAgICAgcmV0dXJuIHJnYmEucGFyc2Uodik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHNsYS50ZXN0KHYpKSB7XG4gICAgICAgICAgICByZXR1cm4gaHNsYS5wYXJzZSh2KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBoZXgucGFyc2Uodik7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHRyYW5zZm9ybTogKHYpID0+IHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHYpXG4gICAgICAgICAgICA/IHZcbiAgICAgICAgICAgIDogdi5oYXNPd25Qcm9wZXJ0eSgncmVkJylcbiAgICAgICAgICAgICAgICA/IHJnYmEudHJhbnNmb3JtKHYpXG4gICAgICAgICAgICAgICAgOiBoc2xhLnRyYW5zZm9ybSh2KTtcbiAgICB9LFxufTtcblxuZXhwb3J0IHsgY29sb3IgfTtcbiIsImltcG9ydCB7IGNvbG9yIH0gZnJvbSAnLi4vY29sb3IvaW5kZXgubWpzJztcbmltcG9ydCB7IG51bWJlciB9IGZyb20gJy4uL251bWJlcnMvaW5kZXgubWpzJztcbmltcG9ydCB7IGlzU3RyaW5nLCBmbG9hdFJlZ2V4LCBjb2xvclJlZ2V4LCBzYW5pdGl6ZSB9IGZyb20gJy4uL3V0aWxzLm1qcyc7XG5cbmNvbnN0IGNvbG9yVG9rZW4gPSAnJHtjfSc7XG5jb25zdCBudW1iZXJUb2tlbiA9ICcke259JztcbmZ1bmN0aW9uIHRlc3Qodikge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICByZXR1cm4gKGlzTmFOKHYpICYmXG4gICAgICAgIGlzU3RyaW5nKHYpICYmXG4gICAgICAgICgoX2IgPSAoX2EgPSB2Lm1hdGNoKGZsb2F0UmVnZXgpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGVuZ3RoKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAwKSArICgoX2QgPSAoX2MgPSB2Lm1hdGNoKGNvbG9yUmVnZXgpKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MubGVuZ3RoKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAwKSA+IDApO1xufVxuZnVuY3Rpb24gYW5hbHlzZSh2KSB7XG4gICAgaWYgKHR5cGVvZiB2ID09PSAnbnVtYmVyJylcbiAgICAgICAgdiA9IGAke3Z9YDtcbiAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICBsZXQgbnVtQ29sb3JzID0gMDtcbiAgICBjb25zdCBjb2xvcnMgPSB2Lm1hdGNoKGNvbG9yUmVnZXgpO1xuICAgIGlmIChjb2xvcnMpIHtcbiAgICAgICAgbnVtQ29sb3JzID0gY29sb3JzLmxlbmd0aDtcbiAgICAgICAgdiA9IHYucmVwbGFjZShjb2xvclJlZ2V4LCBjb2xvclRva2VuKTtcbiAgICAgICAgdmFsdWVzLnB1c2goLi4uY29sb3JzLm1hcChjb2xvci5wYXJzZSkpO1xuICAgIH1cbiAgICBjb25zdCBudW1iZXJzID0gdi5tYXRjaChmbG9hdFJlZ2V4KTtcbiAgICBpZiAobnVtYmVycykge1xuICAgICAgICB2ID0gdi5yZXBsYWNlKGZsb2F0UmVnZXgsIG51bWJlclRva2VuKTtcbiAgICAgICAgdmFsdWVzLnB1c2goLi4ubnVtYmVycy5tYXAobnVtYmVyLnBhcnNlKSk7XG4gICAgfVxuICAgIHJldHVybiB7IHZhbHVlcywgbnVtQ29sb3JzLCB0b2tlbmlzZWQ6IHYgfTtcbn1cbmZ1bmN0aW9uIHBhcnNlKHYpIHtcbiAgICByZXR1cm4gYW5hbHlzZSh2KS52YWx1ZXM7XG59XG5mdW5jdGlvbiBjcmVhdGVUcmFuc2Zvcm1lcih2KSB7XG4gICAgY29uc3QgeyB2YWx1ZXMsIG51bUNvbG9ycywgdG9rZW5pc2VkIH0gPSBhbmFseXNlKHYpO1xuICAgIGNvbnN0IG51bVZhbHVlcyA9IHZhbHVlcy5sZW5ndGg7XG4gICAgcmV0dXJuICh2KSA9PiB7XG4gICAgICAgIGxldCBvdXRwdXQgPSB0b2tlbmlzZWQ7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtVmFsdWVzOyBpKyspIHtcbiAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKGkgPCBudW1Db2xvcnMgPyBjb2xvclRva2VuIDogbnVtYmVyVG9rZW4sIGkgPCBudW1Db2xvcnMgPyBjb2xvci50cmFuc2Zvcm0odltpXSkgOiBzYW5pdGl6ZSh2W2ldKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9O1xufVxuY29uc3QgY29udmVydE51bWJlcnNUb1plcm8gPSAodikgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInID8gMCA6IHY7XG5mdW5jdGlvbiBnZXRBbmltYXRhYmxlTm9uZSh2KSB7XG4gICAgY29uc3QgcGFyc2VkID0gcGFyc2Uodik7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVUcmFuc2Zvcm1lcih2KTtcbiAgICByZXR1cm4gdHJhbnNmb3JtZXIocGFyc2VkLm1hcChjb252ZXJ0TnVtYmVyc1RvWmVybykpO1xufVxuY29uc3QgY29tcGxleCA9IHsgdGVzdCwgcGFyc2UsIGNyZWF0ZVRyYW5zZm9ybWVyLCBnZXRBbmltYXRhYmxlTm9uZSB9O1xuXG5leHBvcnQgeyBjb21wbGV4IH07XG4iLCJjb25zdCB6ZXJvUG9pbnQgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwLFxuICAgIHo6IDBcbn07XG5jb25zdCBpc051bSA9ICh2KSA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcic7XG5cbmV4cG9ydCB7IGlzTnVtLCB6ZXJvUG9pbnQgfTtcbiIsImltcG9ydCB7IGNvbXBsZXgsIGNvbG9yIH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuaW1wb3J0IHsgbWl4IH0gZnJvbSAnLi9taXgubWpzJztcbmltcG9ydCB7IG1peENvbG9yIH0gZnJvbSAnLi9taXgtY29sb3IubWpzJztcbmltcG9ydCB7IGlzTnVtIH0gZnJvbSAnLi9pbmMubWpzJztcbmltcG9ydCB7IHBpcGUgfSBmcm9tICcuL3BpcGUubWpzJztcbmltcG9ydCB7IHdhcm5pbmcgfSBmcm9tICdoZXktbGlzdGVuJztcblxuZnVuY3Rpb24gZ2V0TWl4ZXIob3JpZ2luLCB0YXJnZXQpIHtcbiAgICBpZiAoaXNOdW0ob3JpZ2luKSkge1xuICAgICAgICByZXR1cm4gKHYpID0+IG1peChvcmlnaW4sIHRhcmdldCwgdik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGNvbG9yLnRlc3Qob3JpZ2luKSkge1xuICAgICAgICByZXR1cm4gbWl4Q29sb3Iob3JpZ2luLCB0YXJnZXQpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG1peENvbXBsZXgob3JpZ2luLCB0YXJnZXQpO1xuICAgIH1cbn1cbmNvbnN0IG1peEFycmF5ID0gKGZyb20sIHRvKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gWy4uLmZyb21dO1xuICAgIGNvbnN0IG51bVZhbHVlcyA9IG91dHB1dC5sZW5ndGg7XG4gICAgY29uc3QgYmxlbmRWYWx1ZSA9IGZyb20ubWFwKChmcm9tVGhpcywgaSkgPT4gZ2V0TWl4ZXIoZnJvbVRoaXMsIHRvW2ldKSk7XG4gICAgcmV0dXJuICh2KSA9PiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbnVtVmFsdWVzOyBpKyspIHtcbiAgICAgICAgICAgIG91dHB1dFtpXSA9IGJsZW5kVmFsdWVbaV0odik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9O1xufTtcbmNvbnN0IG1peE9iamVjdCA9IChvcmlnaW4sIHRhcmdldCkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3JpZ2luKSwgdGFyZ2V0KTtcbiAgICBjb25zdCBibGVuZFZhbHVlID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb3V0cHV0KSB7XG4gICAgICAgIGlmIChvcmlnaW5ba2V5XSAhPT0gdW5kZWZpbmVkICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGJsZW5kVmFsdWVba2V5XSA9IGdldE1peGVyKG9yaWdpbltrZXldLCB0YXJnZXRba2V5XSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICh2KSA9PiB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGJsZW5kVmFsdWUpIHtcbiAgICAgICAgICAgIG91dHB1dFtrZXldID0gYmxlbmRWYWx1ZVtrZXldKHYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfTtcbn07XG5mdW5jdGlvbiBhbmFseXNlKHZhbHVlKSB7XG4gICAgY29uc3QgcGFyc2VkID0gY29tcGxleC5wYXJzZSh2YWx1ZSk7XG4gICAgY29uc3QgbnVtVmFsdWVzID0gcGFyc2VkLmxlbmd0aDtcbiAgICBsZXQgbnVtTnVtYmVycyA9IDA7XG4gICAgbGV0IG51bVJHQiA9IDA7XG4gICAgbGV0IG51bUhTTCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1WYWx1ZXM7IGkrKykge1xuICAgICAgICBpZiAobnVtTnVtYmVycyB8fCB0eXBlb2YgcGFyc2VkW2ldID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgICBudW1OdW1iZXJzKys7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAocGFyc2VkW2ldLmh1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgbnVtSFNMKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBudW1SR0IrKztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4geyBwYXJzZWQsIG51bU51bWJlcnMsIG51bVJHQiwgbnVtSFNMIH07XG59XG5jb25zdCBtaXhDb21wbGV4ID0gKG9yaWdpbiwgdGFyZ2V0KSA9PiB7XG4gICAgY29uc3QgdGVtcGxhdGUgPSBjb21wbGV4LmNyZWF0ZVRyYW5zZm9ybWVyKHRhcmdldCk7XG4gICAgY29uc3Qgb3JpZ2luU3RhdHMgPSBhbmFseXNlKG9yaWdpbik7XG4gICAgY29uc3QgdGFyZ2V0U3RhdHMgPSBhbmFseXNlKHRhcmdldCk7XG4gICAgY29uc3QgY2FuSW50ZXJwb2xhdGUgPSBvcmlnaW5TdGF0cy5udW1IU0wgPT09IHRhcmdldFN0YXRzLm51bUhTTCAmJlxuICAgICAgICBvcmlnaW5TdGF0cy5udW1SR0IgPT09IHRhcmdldFN0YXRzLm51bVJHQiAmJlxuICAgICAgICBvcmlnaW5TdGF0cy5udW1OdW1iZXJzID49IHRhcmdldFN0YXRzLm51bU51bWJlcnM7XG4gICAgaWYgKGNhbkludGVycG9sYXRlKSB7XG4gICAgICAgIHJldHVybiBwaXBlKG1peEFycmF5KG9yaWdpblN0YXRzLnBhcnNlZCwgdGFyZ2V0U3RhdHMucGFyc2VkKSwgdGVtcGxhdGUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgd2FybmluZyh0cnVlLCBgQ29tcGxleCB2YWx1ZXMgJyR7b3JpZ2lufScgYW5kICcke3RhcmdldH0nIHRvbyBkaWZmZXJlbnQgdG8gbWl4LiBFbnN1cmUgYWxsIGNvbG9ycyBhcmUgb2YgdGhlIHNhbWUgdHlwZSwgYW5kIHRoYXQgZWFjaCBjb250YWlucyB0aGUgc2FtZSBxdWFudGl0eSBvZiBudW1iZXIgYW5kIGNvbG9yIHZhbHVlcy4gRmFsbGluZyBiYWNrIHRvIGluc3RhbnQgdHJhbnNpdGlvbi5gKTtcbiAgICAgICAgcmV0dXJuIChwKSA9PiBgJHtwID4gMCA/IHRhcmdldCA6IG9yaWdpbn1gO1xuICAgIH1cbn07XG5cbmV4cG9ydCB7IG1peEFycmF5LCBtaXhDb21wbGV4LCBtaXhPYmplY3QgfTtcbiIsImltcG9ydCB7IHByb2dyZXNzIH0gZnJvbSAnLi9wcm9ncmVzcy5tanMnO1xuaW1wb3J0IHsgbWl4IH0gZnJvbSAnLi9taXgubWpzJztcbmltcG9ydCB7IG1peENvbG9yIH0gZnJvbSAnLi9taXgtY29sb3IubWpzJztcbmltcG9ydCB7IG1peENvbXBsZXgsIG1peEFycmF5LCBtaXhPYmplY3QgfSBmcm9tICcuL21peC1jb21wbGV4Lm1qcyc7XG5pbXBvcnQgeyBjb2xvciB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcbmltcG9ydCB7IGNsYW1wIH0gZnJvbSAnLi9jbGFtcC5tanMnO1xuaW1wb3J0IHsgcGlwZSB9IGZyb20gJy4vcGlwZS5tanMnO1xuaW1wb3J0IHsgaW52YXJpYW50IH0gZnJvbSAnaGV5LWxpc3Rlbic7XG5cbmNvbnN0IG1peE51bWJlciA9IChmcm9tLCB0bykgPT4gKHApID0+IG1peChmcm9tLCB0bywgcCk7XG5mdW5jdGlvbiBkZXRlY3RNaXhlckZhY3Rvcnkodikge1xuICAgIGlmICh0eXBlb2YgdiA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcmV0dXJuIG1peE51bWJlcjtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHYgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChjb2xvci50ZXN0KHYpKSB7XG4gICAgICAgICAgICByZXR1cm4gbWl4Q29sb3I7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbWl4Q29tcGxleDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgIHJldHVybiBtaXhBcnJheTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIHYgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHJldHVybiBtaXhPYmplY3Q7XG4gICAgfVxufVxuZnVuY3Rpb24gY3JlYXRlTWl4ZXJzKG91dHB1dCwgZWFzZSwgY3VzdG9tTWl4ZXIpIHtcbiAgICBjb25zdCBtaXhlcnMgPSBbXTtcbiAgICBjb25zdCBtaXhlckZhY3RvcnkgPSBjdXN0b21NaXhlciB8fCBkZXRlY3RNaXhlckZhY3Rvcnkob3V0cHV0WzBdKTtcbiAgICBjb25zdCBudW1NaXhlcnMgPSBvdXRwdXQubGVuZ3RoIC0gMTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bU1peGVyczsgaSsrKSB7XG4gICAgICAgIGxldCBtaXhlciA9IG1peGVyRmFjdG9yeShvdXRwdXRbaV0sIG91dHB1dFtpICsgMV0pO1xuICAgICAgICBpZiAoZWFzZSkge1xuICAgICAgICAgICAgY29uc3QgZWFzaW5nRnVuY3Rpb24gPSBBcnJheS5pc0FycmF5KGVhc2UpID8gZWFzZVtpXSA6IGVhc2U7XG4gICAgICAgICAgICBtaXhlciA9IHBpcGUoZWFzaW5nRnVuY3Rpb24sIG1peGVyKTtcbiAgICAgICAgfVxuICAgICAgICBtaXhlcnMucHVzaChtaXhlcik7XG4gICAgfVxuICAgIHJldHVybiBtaXhlcnM7XG59XG5mdW5jdGlvbiBmYXN0SW50ZXJwb2xhdGUoW2Zyb20sIHRvXSwgW21peGVyXSkge1xuICAgIHJldHVybiAodikgPT4gbWl4ZXIocHJvZ3Jlc3MoZnJvbSwgdG8sIHYpKTtcbn1cbmZ1bmN0aW9uIHNsb3dJbnRlcnBvbGF0ZShpbnB1dCwgbWl4ZXJzKSB7XG4gICAgY29uc3QgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gICAgY29uc3QgbGFzdElucHV0SW5kZXggPSBpbnB1dExlbmd0aCAtIDE7XG4gICAgcmV0dXJuICh2KSA9PiB7XG4gICAgICAgIGxldCBtaXhlckluZGV4ID0gMDtcbiAgICAgICAgbGV0IGZvdW5kTWl4ZXJJbmRleCA9IGZhbHNlO1xuICAgICAgICBpZiAodiA8PSBpbnB1dFswXSkge1xuICAgICAgICAgICAgZm91bmRNaXhlckluZGV4ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2ID49IGlucHV0W2xhc3RJbnB1dEluZGV4XSkge1xuICAgICAgICAgICAgbWl4ZXJJbmRleCA9IGxhc3RJbnB1dEluZGV4IC0gMTtcbiAgICAgICAgICAgIGZvdW5kTWl4ZXJJbmRleCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb3VuZE1peGVySW5kZXgpIHtcbiAgICAgICAgICAgIGxldCBpID0gMTtcbiAgICAgICAgICAgIGZvciAoOyBpIDwgaW5wdXRMZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dFtpXSA+IHYgfHwgaSA9PT0gbGFzdElucHV0SW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbWl4ZXJJbmRleCA9IGkgLSAxO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb2dyZXNzSW5SYW5nZSA9IHByb2dyZXNzKGlucHV0W21peGVySW5kZXhdLCBpbnB1dFttaXhlckluZGV4ICsgMV0sIHYpO1xuICAgICAgICByZXR1cm4gbWl4ZXJzW21peGVySW5kZXhdKHByb2dyZXNzSW5SYW5nZSk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGludGVycG9sYXRlKGlucHV0LCBvdXRwdXQsIHsgY2xhbXA6IGlzQ2xhbXAgPSB0cnVlLCBlYXNlLCBtaXhlciB9ID0ge30pIHtcbiAgICBjb25zdCBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcbiAgICBpbnZhcmlhbnQoaW5wdXRMZW5ndGggPT09IG91dHB1dC5sZW5ndGgsICdCb3RoIGlucHV0IGFuZCBvdXRwdXQgcmFuZ2VzIG11c3QgYmUgdGhlIHNhbWUgbGVuZ3RoJyk7XG4gICAgaW52YXJpYW50KCFlYXNlIHx8ICFBcnJheS5pc0FycmF5KGVhc2UpIHx8IGVhc2UubGVuZ3RoID09PSBpbnB1dExlbmd0aCAtIDEsICdBcnJheSBvZiBlYXNpbmcgZnVuY3Rpb25zIG11c3QgYmUgb2YgbGVuZ3RoIGBpbnB1dC5sZW5ndGggLSAxYCwgYXMgaXQgYXBwbGllcyB0byB0aGUgdHJhbnNpdGlvbnMgKipiZXR3ZWVuKiogdGhlIGRlZmluZWQgdmFsdWVzLicpO1xuICAgIGlmIChpbnB1dFswXSA+IGlucHV0W2lucHV0TGVuZ3RoIC0gMV0pIHtcbiAgICAgICAgaW5wdXQgPSBbXS5jb25jYXQoaW5wdXQpO1xuICAgICAgICBvdXRwdXQgPSBbXS5jb25jYXQob3V0cHV0KTtcbiAgICAgICAgaW5wdXQucmV2ZXJzZSgpO1xuICAgICAgICBvdXRwdXQucmV2ZXJzZSgpO1xuICAgIH1cbiAgICBjb25zdCBtaXhlcnMgPSBjcmVhdGVNaXhlcnMob3V0cHV0LCBlYXNlLCBtaXhlcik7XG4gICAgY29uc3QgaW50ZXJwb2xhdG9yID0gaW5wdXRMZW5ndGggPT09IDJcbiAgICAgICAgPyBmYXN0SW50ZXJwb2xhdGUoaW5wdXQsIG1peGVycylcbiAgICAgICAgOiBzbG93SW50ZXJwb2xhdGUoaW5wdXQsIG1peGVycyk7XG4gICAgcmV0dXJuIGlzQ2xhbXBcbiAgICAgICAgPyAodikgPT4gaW50ZXJwb2xhdG9yKGNsYW1wKGlucHV0WzBdLCBpbnB1dFtpbnB1dExlbmd0aCAtIDFdLCB2KSlcbiAgICAgICAgOiBpbnRlcnBvbGF0b3I7XG59XG5cbmV4cG9ydCB7IGludGVycG9sYXRlIH07XG4iLCJjb25zdCByZXZlcnNlRWFzaW5nID0gZWFzaW5nID0+IHAgPT4gMSAtIGVhc2luZygxIC0gcCk7XG5jb25zdCBtaXJyb3JFYXNpbmcgPSBlYXNpbmcgPT4gcCA9PiBwIDw9IDAuNSA/IGVhc2luZygyICogcCkgLyAyIDogKDIgLSBlYXNpbmcoMiAqICgxIC0gcCkpKSAvIDI7XG5jb25zdCBjcmVhdGVFeHBvSW4gPSAocG93ZXIpID0+IHAgPT4gTWF0aC5wb3cocCwgcG93ZXIpO1xuY29uc3QgY3JlYXRlQmFja0luID0gKHBvd2VyKSA9PiBwID0+IHAgKiBwICogKChwb3dlciArIDEpICogcCAtIHBvd2VyKTtcbmNvbnN0IGNyZWF0ZUFudGljaXBhdGUgPSAocG93ZXIpID0+IHtcbiAgICBjb25zdCBiYWNrRWFzaW5nID0gY3JlYXRlQmFja0luKHBvd2VyKTtcbiAgICByZXR1cm4gcCA9PiAocCAqPSAyKSA8IDFcbiAgICAgICAgPyAwLjUgKiBiYWNrRWFzaW5nKHApXG4gICAgICAgIDogMC41ICogKDIgLSBNYXRoLnBvdygyLCAtMTAgKiAocCAtIDEpKSk7XG59O1xuXG5leHBvcnQgeyBjcmVhdGVBbnRpY2lwYXRlLCBjcmVhdGVCYWNrSW4sIGNyZWF0ZUV4cG9JbiwgbWlycm9yRWFzaW5nLCByZXZlcnNlRWFzaW5nIH07XG4iLCJpbXBvcnQgeyBjcmVhdGVFeHBvSW4sIHJldmVyc2VFYXNpbmcsIG1pcnJvckVhc2luZywgY3JlYXRlQmFja0luLCBjcmVhdGVBbnRpY2lwYXRlIH0gZnJvbSAnLi91dGlscy5tanMnO1xuXG5jb25zdCBERUZBVUxUX09WRVJTSE9PVF9TVFJFTkdUSCA9IDEuNTI1O1xuY29uc3QgQk9VTkNFX0ZJUlNUX1RIUkVTSE9MRCA9IDQuMCAvIDExLjA7XG5jb25zdCBCT1VOQ0VfU0VDT05EX1RIUkVTSE9MRCA9IDguMCAvIDExLjA7XG5jb25zdCBCT1VOQ0VfVEhJUkRfVEhSRVNIT0xEID0gOS4wIC8gMTAuMDtcbmNvbnN0IGxpbmVhciA9IHAgPT4gcDtcbmNvbnN0IGVhc2VJbiA9IGNyZWF0ZUV4cG9JbigyKTtcbmNvbnN0IGVhc2VPdXQgPSByZXZlcnNlRWFzaW5nKGVhc2VJbik7XG5jb25zdCBlYXNlSW5PdXQgPSBtaXJyb3JFYXNpbmcoZWFzZUluKTtcbmNvbnN0IGNpcmNJbiA9IHAgPT4gMSAtIE1hdGguc2luKE1hdGguYWNvcyhwKSk7XG5jb25zdCBjaXJjT3V0ID0gcmV2ZXJzZUVhc2luZyhjaXJjSW4pO1xuY29uc3QgY2lyY0luT3V0ID0gbWlycm9yRWFzaW5nKGNpcmNPdXQpO1xuY29uc3QgYmFja0luID0gY3JlYXRlQmFja0luKERFRkFVTFRfT1ZFUlNIT09UX1NUUkVOR1RIKTtcbmNvbnN0IGJhY2tPdXQgPSByZXZlcnNlRWFzaW5nKGJhY2tJbik7XG5jb25zdCBiYWNrSW5PdXQgPSBtaXJyb3JFYXNpbmcoYmFja0luKTtcbmNvbnN0IGFudGljaXBhdGUgPSBjcmVhdGVBbnRpY2lwYXRlKERFRkFVTFRfT1ZFUlNIT09UX1NUUkVOR1RIKTtcbmNvbnN0IGNhID0gNDM1Ni4wIC8gMzYxLjA7XG5jb25zdCBjYiA9IDM1NDQyLjAgLyAxODA1LjA7XG5jb25zdCBjYyA9IDE2MDYxLjAgLyAxODA1LjA7XG5jb25zdCBib3VuY2VPdXQgPSAocCkgPT4ge1xuICAgIGlmIChwID09PSAxIHx8IHAgPT09IDApXG4gICAgICAgIHJldHVybiBwO1xuICAgIGNvbnN0IHAyID0gcCAqIHA7XG4gICAgcmV0dXJuIHAgPCBCT1VOQ0VfRklSU1RfVEhSRVNIT0xEXG4gICAgICAgID8gNy41NjI1ICogcDJcbiAgICAgICAgOiBwIDwgQk9VTkNFX1NFQ09ORF9USFJFU0hPTERcbiAgICAgICAgICAgID8gOS4wNzUgKiBwMiAtIDkuOSAqIHAgKyAzLjRcbiAgICAgICAgICAgIDogcCA8IEJPVU5DRV9USElSRF9USFJFU0hPTERcbiAgICAgICAgICAgICAgICA/IGNhICogcDIgLSBjYiAqIHAgKyBjY1xuICAgICAgICAgICAgICAgIDogMTAuOCAqIHAgKiBwIC0gMjAuNTIgKiBwICsgMTAuNzI7XG59O1xuY29uc3QgYm91bmNlSW4gPSByZXZlcnNlRWFzaW5nKGJvdW5jZU91dCk7XG5jb25zdCBib3VuY2VJbk91dCA9IChwKSA9PiBwIDwgMC41XG4gICAgPyAwLjUgKiAoMS4wIC0gYm91bmNlT3V0KDEuMCAtIHAgKiAyLjApKVxuICAgIDogMC41ICogYm91bmNlT3V0KHAgKiAyLjAgLSAxLjApICsgMC41O1xuXG5leHBvcnQgeyBhbnRpY2lwYXRlLCBiYWNrSW4sIGJhY2tJbk91dCwgYmFja091dCwgYm91bmNlSW4sIGJvdW5jZUluT3V0LCBib3VuY2VPdXQsIGNpcmNJbiwgY2lyY0luT3V0LCBjaXJjT3V0LCBlYXNlSW4sIGVhc2VJbk91dCwgZWFzZU91dCwgbGluZWFyIH07XG4iLCJpbXBvcnQgeyBpbnRlcnBvbGF0ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2ludGVycG9sYXRlLm1qcyc7XG5pbXBvcnQgeyBlYXNlSW5PdXQgfSBmcm9tICcuLi8uLi9lYXNpbmcvaW5kZXgubWpzJztcblxuZnVuY3Rpb24gZGVmYXVsdEVhc2luZyh2YWx1ZXMsIGVhc2luZykge1xuICAgIHJldHVybiB2YWx1ZXMubWFwKCgpID0+IGVhc2luZyB8fCBlYXNlSW5PdXQpLnNwbGljZSgwLCB2YWx1ZXMubGVuZ3RoIC0gMSk7XG59XG5mdW5jdGlvbiBkZWZhdWx0T2Zmc2V0KHZhbHVlcykge1xuICAgIGNvbnN0IG51bVZhbHVlcyA9IHZhbHVlcy5sZW5ndGg7XG4gICAgcmV0dXJuIHZhbHVlcy5tYXAoKF92YWx1ZSwgaSkgPT4gaSAhPT0gMCA/IGkgLyAobnVtVmFsdWVzIC0gMSkgOiAwKTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRPZmZzZXRUb1RpbWVzKG9mZnNldCwgZHVyYXRpb24pIHtcbiAgICByZXR1cm4gb2Zmc2V0Lm1hcCgobykgPT4gbyAqIGR1cmF0aW9uKTtcbn1cbmZ1bmN0aW9uIGtleWZyYW1lcyh7IGZyb20gPSAwLCB0byA9IDEsIGVhc2UsIG9mZnNldCwgZHVyYXRpb24gPSAzMDAsIH0pIHtcbiAgICBjb25zdCBzdGF0ZSA9IHsgZG9uZTogZmFsc2UsIHZhbHVlOiBmcm9tIH07XG4gICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh0bykgPyB0byA6IFtmcm9tLCB0b107XG4gICAgY29uc3QgdGltZXMgPSBjb252ZXJ0T2Zmc2V0VG9UaW1lcyhvZmZzZXQgJiYgb2Zmc2V0Lmxlbmd0aCA9PT0gdmFsdWVzLmxlbmd0aFxuICAgICAgICA/IG9mZnNldFxuICAgICAgICA6IGRlZmF1bHRPZmZzZXQodmFsdWVzKSwgZHVyYXRpb24pO1xuICAgIGZ1bmN0aW9uIGNyZWF0ZUludGVycG9sYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIGludGVycG9sYXRlKHRpbWVzLCB2YWx1ZXMsIHtcbiAgICAgICAgICAgIGVhc2U6IEFycmF5LmlzQXJyYXkoZWFzZSkgPyBlYXNlIDogZGVmYXVsdEVhc2luZyh2YWx1ZXMsIGVhc2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbGV0IGludGVycG9sYXRvciA9IGNyZWF0ZUludGVycG9sYXRvcigpO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6ICh0KSA9PiB7XG4gICAgICAgICAgICBzdGF0ZS52YWx1ZSA9IGludGVycG9sYXRvcih0KTtcbiAgICAgICAgICAgIHN0YXRlLmRvbmUgPSB0ID49IGR1cmF0aW9uO1xuICAgICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICB9LFxuICAgICAgICBmbGlwVGFyZ2V0OiAoKSA9PiB7XG4gICAgICAgICAgICB2YWx1ZXMucmV2ZXJzZSgpO1xuICAgICAgICAgICAgaW50ZXJwb2xhdG9yID0gY3JlYXRlSW50ZXJwb2xhdG9yKCk7XG4gICAgICAgIH0sXG4gICAgfTtcbn1cblxuZXhwb3J0IHsgY29udmVydE9mZnNldFRvVGltZXMsIGRlZmF1bHRFYXNpbmcsIGRlZmF1bHRPZmZzZXQsIGtleWZyYW1lcyB9O1xuIiwiaW1wb3J0IHsgc3ByaW5nIH0gZnJvbSAnLi4vZ2VuZXJhdG9ycy9zcHJpbmcubWpzJztcbmltcG9ydCB7IGtleWZyYW1lcyB9IGZyb20gJy4uL2dlbmVyYXRvcnMva2V5ZnJhbWVzLm1qcyc7XG5pbXBvcnQgeyBkZWNheSB9IGZyb20gJy4uL2dlbmVyYXRvcnMvZGVjYXkubWpzJztcblxuY29uc3QgdHlwZXMgPSB7IGtleWZyYW1lcywgc3ByaW5nLCBkZWNheSB9O1xuZnVuY3Rpb24gZGV0ZWN0QW5pbWF0aW9uRnJvbU9wdGlvbnMoY29uZmlnKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY29uZmlnLnRvKSkge1xuICAgICAgICByZXR1cm4ga2V5ZnJhbWVzO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlc1tjb25maWcudHlwZV0pIHtcbiAgICAgICAgcmV0dXJuIHR5cGVzW2NvbmZpZy50eXBlXTtcbiAgICB9XG4gICAgY29uc3Qga2V5cyA9IG5ldyBTZXQoT2JqZWN0LmtleXMoY29uZmlnKSk7XG4gICAgaWYgKGtleXMuaGFzKFwiZWFzZVwiKSB8fFxuICAgICAgICAoa2V5cy5oYXMoXCJkdXJhdGlvblwiKSAmJiAha2V5cy5oYXMoXCJkYW1waW5nUmF0aW9cIikpKSB7XG4gICAgICAgIHJldHVybiBrZXlmcmFtZXM7XG4gICAgfVxuICAgIGVsc2UgaWYgKGtleXMuaGFzKFwiZGFtcGluZ1JhdGlvXCIpIHx8XG4gICAgICAgIGtleXMuaGFzKFwic3RpZmZuZXNzXCIpIHx8XG4gICAgICAgIGtleXMuaGFzKFwibWFzc1wiKSB8fFxuICAgICAgICBrZXlzLmhhcyhcImRhbXBpbmdcIikgfHxcbiAgICAgICAga2V5cy5oYXMoXCJyZXN0U3BlZWRcIikgfHxcbiAgICAgICAga2V5cy5oYXMoXCJyZXN0RGVsdGFcIikpIHtcbiAgICAgICAgcmV0dXJuIHNwcmluZztcbiAgICB9XG4gICAgcmV0dXJuIGtleWZyYW1lcztcbn1cblxuZXhwb3J0IHsgZGV0ZWN0QW5pbWF0aW9uRnJvbU9wdGlvbnMgfTtcbiIsImZ1bmN0aW9uIGRlY2F5KHsgdmVsb2NpdHkgPSAwLCBmcm9tID0gMCwgcG93ZXIgPSAwLjgsIHRpbWVDb25zdGFudCA9IDM1MCwgcmVzdERlbHRhID0gMC41LCBtb2RpZnlUYXJnZXQsIH0pIHtcbiAgICBjb25zdCBzdGF0ZSA9IHsgZG9uZTogZmFsc2UsIHZhbHVlOiBmcm9tIH07XG4gICAgbGV0IGFtcGxpdHVkZSA9IHBvd2VyICogdmVsb2NpdHk7XG4gICAgY29uc3QgaWRlYWwgPSBmcm9tICsgYW1wbGl0dWRlO1xuICAgIGNvbnN0IHRhcmdldCA9IG1vZGlmeVRhcmdldCA9PT0gdW5kZWZpbmVkID8gaWRlYWwgOiBtb2RpZnlUYXJnZXQoaWRlYWwpO1xuICAgIGlmICh0YXJnZXQgIT09IGlkZWFsKVxuICAgICAgICBhbXBsaXR1ZGUgPSB0YXJnZXQgLSBmcm9tO1xuICAgIHJldHVybiB7XG4gICAgICAgIG5leHQ6ICh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZWx0YSA9IC1hbXBsaXR1ZGUgKiBNYXRoLmV4cCgtdCAvIHRpbWVDb25zdGFudCk7XG4gICAgICAgICAgICBzdGF0ZS5kb25lID0gIShkZWx0YSA+IHJlc3REZWx0YSB8fCBkZWx0YSA8IC1yZXN0RGVsdGEpO1xuICAgICAgICAgICAgc3RhdGUudmFsdWUgPSBzdGF0ZS5kb25lID8gdGFyZ2V0IDogdGFyZ2V0ICsgZGVsdGE7XG4gICAgICAgICAgICByZXR1cm4gc3RhdGU7XG4gICAgICAgIH0sXG4gICAgICAgIGZsaXBUYXJnZXQ6ICgpID0+IHsgfSxcbiAgICB9O1xufVxuXG5leHBvcnQgeyBkZWNheSB9O1xuIiwiZnVuY3Rpb24gbG9vcEVsYXBzZWQoZWxhcHNlZCwgZHVyYXRpb24sIGRlbGF5ID0gMCkge1xuICAgIHJldHVybiBlbGFwc2VkIC0gZHVyYXRpb24gLSBkZWxheTtcbn1cbmZ1bmN0aW9uIHJldmVyc2VFbGFwc2VkKGVsYXBzZWQsIGR1cmF0aW9uLCBkZWxheSA9IDAsIGlzRm9yd2FyZFBsYXliYWNrID0gdHJ1ZSkge1xuICAgIHJldHVybiBpc0ZvcndhcmRQbGF5YmFja1xuICAgICAgICA/IGxvb3BFbGFwc2VkKGR1cmF0aW9uICsgLWVsYXBzZWQsIGR1cmF0aW9uLCBkZWxheSlcbiAgICAgICAgOiBkdXJhdGlvbiAtIChlbGFwc2VkIC0gZHVyYXRpb24pICsgZGVsYXk7XG59XG5mdW5jdGlvbiBoYXNSZXBlYXREZWxheUVsYXBzZWQoZWxhcHNlZCwgZHVyYXRpb24sIGRlbGF5LCBpc0ZvcndhcmRQbGF5YmFjaykge1xuICAgIHJldHVybiBpc0ZvcndhcmRQbGF5YmFjayA/IGVsYXBzZWQgPj0gZHVyYXRpb24gKyBkZWxheSA6IGVsYXBzZWQgPD0gLWRlbGF5O1xufVxuXG5leHBvcnQgeyBoYXNSZXBlYXREZWxheUVsYXBzZWQsIGxvb3BFbGFwc2VkLCByZXZlcnNlRWxhcHNlZCB9O1xuIiwiaW1wb3J0IHsgX19yZXN0IH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgZGV0ZWN0QW5pbWF0aW9uRnJvbU9wdGlvbnMgfSBmcm9tICcuL3V0aWxzL2RldGVjdC1hbmltYXRpb24tZnJvbS1vcHRpb25zLm1qcyc7XG5pbXBvcnQgc3luYywgeyBjYW5jZWxTeW5jIH0gZnJvbSAnZnJhbWVzeW5jJztcbmltcG9ydCB7IGludGVycG9sYXRlIH0gZnJvbSAnLi4vdXRpbHMvaW50ZXJwb2xhdGUubWpzJztcbmltcG9ydCB7IGhhc1JlcGVhdERlbGF5RWxhcHNlZCwgcmV2ZXJzZUVsYXBzZWQsIGxvb3BFbGFwc2VkIH0gZnJvbSAnLi91dGlscy9lbGFwc2VkLm1qcyc7XG5cbmNvbnN0IGZyYW1lc3luYyA9ICh1cGRhdGUpID0+IHtcbiAgICBjb25zdCBwYXNzVGltZXN0YW1wID0gKHsgZGVsdGEgfSkgPT4gdXBkYXRlKGRlbHRhKTtcbiAgICByZXR1cm4ge1xuICAgICAgICBzdGFydDogKCkgPT4gc3luYy51cGRhdGUocGFzc1RpbWVzdGFtcCwgdHJ1ZSksXG4gICAgICAgIHN0b3A6ICgpID0+IGNhbmNlbFN5bmMudXBkYXRlKHBhc3NUaW1lc3RhbXApLFxuICAgIH07XG59O1xuZnVuY3Rpb24gYW5pbWF0ZShfYSkge1xuICAgIHZhciBfYiwgX2M7XG4gICAgdmFyIHsgZnJvbSwgYXV0b3BsYXkgPSB0cnVlLCBkcml2ZXIgPSBmcmFtZXN5bmMsIGVsYXBzZWQgPSAwLCByZXBlYXQ6IHJlcGVhdE1heCA9IDAsIHJlcGVhdFR5cGUgPSBcImxvb3BcIiwgcmVwZWF0RGVsYXkgPSAwLCBvblBsYXksIG9uU3RvcCwgb25Db21wbGV0ZSwgb25SZXBlYXQsIG9uVXBkYXRlIH0gPSBfYSwgb3B0aW9ucyA9IF9fcmVzdChfYSwgW1wiZnJvbVwiLCBcImF1dG9wbGF5XCIsIFwiZHJpdmVyXCIsIFwiZWxhcHNlZFwiLCBcInJlcGVhdFwiLCBcInJlcGVhdFR5cGVcIiwgXCJyZXBlYXREZWxheVwiLCBcIm9uUGxheVwiLCBcIm9uU3RvcFwiLCBcIm9uQ29tcGxldGVcIiwgXCJvblJlcGVhdFwiLCBcIm9uVXBkYXRlXCJdKTtcbiAgICBsZXQgeyB0byB9ID0gb3B0aW9ucztcbiAgICBsZXQgZHJpdmVyQ29udHJvbHM7XG4gICAgbGV0IHJlcGVhdENvdW50ID0gMDtcbiAgICBsZXQgY29tcHV0ZWREdXJhdGlvbiA9IG9wdGlvbnMuZHVyYXRpb247XG4gICAgbGV0IGxhdGVzdDtcbiAgICBsZXQgaXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgIGxldCBpc0ZvcndhcmRQbGF5YmFjayA9IHRydWU7XG4gICAgbGV0IGludGVycG9sYXRlRnJvbU51bWJlcjtcbiAgICBjb25zdCBhbmltYXRvciA9IGRldGVjdEFuaW1hdGlvbkZyb21PcHRpb25zKG9wdGlvbnMpO1xuICAgIGlmICgoX2MgPSAoX2IgPSBhbmltYXRvcikubmVlZHNJbnRlcnBvbGF0aW9uKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2MuY2FsbChfYiwgZnJvbSwgdG8pKSB7XG4gICAgICAgIGludGVycG9sYXRlRnJvbU51bWJlciA9IGludGVycG9sYXRlKFswLCAxMDBdLCBbZnJvbSwgdG9dLCB7XG4gICAgICAgICAgICBjbGFtcDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBmcm9tID0gMDtcbiAgICAgICAgdG8gPSAxMDA7XG4gICAgfVxuICAgIGNvbnN0IGFuaW1hdGlvbiA9IGFuaW1hdG9yKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgZnJvbSwgdG8gfSkpO1xuICAgIGZ1bmN0aW9uIHJlcGVhdCgpIHtcbiAgICAgICAgcmVwZWF0Q291bnQrKztcbiAgICAgICAgaWYgKHJlcGVhdFR5cGUgPT09IFwicmV2ZXJzZVwiKSB7XG4gICAgICAgICAgICBpc0ZvcndhcmRQbGF5YmFjayA9IHJlcGVhdENvdW50ICUgMiA9PT0gMDtcbiAgICAgICAgICAgIGVsYXBzZWQgPSByZXZlcnNlRWxhcHNlZChlbGFwc2VkLCBjb21wdXRlZER1cmF0aW9uLCByZXBlYXREZWxheSwgaXNGb3J3YXJkUGxheWJhY2spO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWxhcHNlZCA9IGxvb3BFbGFwc2VkKGVsYXBzZWQsIGNvbXB1dGVkRHVyYXRpb24sIHJlcGVhdERlbGF5KTtcbiAgICAgICAgICAgIGlmIChyZXBlYXRUeXBlID09PSBcIm1pcnJvclwiKVxuICAgICAgICAgICAgICAgIGFuaW1hdGlvbi5mbGlwVGFyZ2V0KCk7XG4gICAgICAgIH1cbiAgICAgICAgaXNDb21wbGV0ZSA9IGZhbHNlO1xuICAgICAgICBvblJlcGVhdCAmJiBvblJlcGVhdCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb21wbGV0ZSgpIHtcbiAgICAgICAgZHJpdmVyQ29udHJvbHMuc3RvcCgpO1xuICAgICAgICBvbkNvbXBsZXRlICYmIG9uQ29tcGxldGUoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlKGRlbHRhKSB7XG4gICAgICAgIGlmICghaXNGb3J3YXJkUGxheWJhY2spXG4gICAgICAgICAgICBkZWx0YSA9IC1kZWx0YTtcbiAgICAgICAgZWxhcHNlZCArPSBkZWx0YTtcbiAgICAgICAgaWYgKCFpc0NvbXBsZXRlKSB7XG4gICAgICAgICAgICBjb25zdCBzdGF0ZSA9IGFuaW1hdGlvbi5uZXh0KE1hdGgubWF4KDAsIGVsYXBzZWQpKTtcbiAgICAgICAgICAgIGxhdGVzdCA9IHN0YXRlLnZhbHVlO1xuICAgICAgICAgICAgaWYgKGludGVycG9sYXRlRnJvbU51bWJlcilcbiAgICAgICAgICAgICAgICBsYXRlc3QgPSBpbnRlcnBvbGF0ZUZyb21OdW1iZXIobGF0ZXN0KTtcbiAgICAgICAgICAgIGlzQ29tcGxldGUgPSBpc0ZvcndhcmRQbGF5YmFjayA/IHN0YXRlLmRvbmUgOiBlbGFwc2VkIDw9IDA7XG4gICAgICAgIH1cbiAgICAgICAgb25VcGRhdGUgPT09IG51bGwgfHwgb25VcGRhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVXBkYXRlKGxhdGVzdCk7XG4gICAgICAgIGlmIChpc0NvbXBsZXRlKSB7XG4gICAgICAgICAgICBpZiAocmVwZWF0Q291bnQgPT09IDApXG4gICAgICAgICAgICAgICAgY29tcHV0ZWREdXJhdGlvbiAhPT0gbnVsbCAmJiBjb21wdXRlZER1cmF0aW9uICE9PSB2b2lkIDAgPyBjb21wdXRlZER1cmF0aW9uIDogKGNvbXB1dGVkRHVyYXRpb24gPSBlbGFwc2VkKTtcbiAgICAgICAgICAgIGlmIChyZXBlYXRDb3VudCA8IHJlcGVhdE1heCkge1xuICAgICAgICAgICAgICAgIGhhc1JlcGVhdERlbGF5RWxhcHNlZChlbGFwc2VkLCBjb21wdXRlZER1cmF0aW9uLCByZXBlYXREZWxheSwgaXNGb3J3YXJkUGxheWJhY2spICYmIHJlcGVhdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29tcGxldGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwbGF5KCkge1xuICAgICAgICBvblBsYXkgPT09IG51bGwgfHwgb25QbGF5ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvblBsYXkoKTtcbiAgICAgICAgZHJpdmVyQ29udHJvbHMgPSBkcml2ZXIodXBkYXRlKTtcbiAgICAgICAgZHJpdmVyQ29udHJvbHMuc3RhcnQoKTtcbiAgICB9XG4gICAgYXV0b3BsYXkgJiYgcGxheSgpO1xuICAgIHJldHVybiB7XG4gICAgICAgIHN0b3A6ICgpID0+IHtcbiAgICAgICAgICAgIG9uU3RvcCA9PT0gbnVsbCB8fCBvblN0b3AgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uU3RvcCgpO1xuICAgICAgICAgICAgZHJpdmVyQ29udHJvbHMuc3RvcCgpO1xuICAgICAgICB9LFxuICAgIH07XG59XG5cbmV4cG9ydCB7IGFuaW1hdGUgfTtcbiIsImZ1bmN0aW9uIHZlbG9jaXR5UGVyU2Vjb25kKHZlbG9jaXR5LCBmcmFtZUR1cmF0aW9uKSB7XG4gICAgcmV0dXJuIGZyYW1lRHVyYXRpb24gPyB2ZWxvY2l0eSAqICgxMDAwIC8gZnJhbWVEdXJhdGlvbikgOiAwO1xufVxuXG5leHBvcnQgeyB2ZWxvY2l0eVBlclNlY29uZCB9O1xuIiwiLyoqXG4gKiBDb252ZXJ0cyBzZWNvbmRzIHRvIG1pbGxpc2Vjb25kc1xuICpcbiAqIEBwYXJhbSBzZWNvbmRzIC0gVGltZSBpbiBzZWNvbmRzLlxuICogQHJldHVybiBtaWxsaXNlY29uZHMgLSBDb252ZXJ0ZWQgdGltZSBpbiBtaWxsaXNlY29uZHMuXG4gKi9cbnZhciBzZWNvbmRzVG9NaWxsaXNlY29uZHMgPSBmdW5jdGlvbiAoc2Vjb25kcykgeyByZXR1cm4gc2Vjb25kcyAqIDEwMDA7IH07XG5cbmV4cG9ydCB7IHNlY29uZHNUb01pbGxpc2Vjb25kcyB9O1xuIiwiaW1wb3J0IHsgbGluZWFyIH0gZnJvbSAnLi9pbmRleC5tanMnO1xuXG5jb25zdCBhID0gKGExLCBhMikgPT4gMS4wIC0gMy4wICogYTIgKyAzLjAgKiBhMTtcbmNvbnN0IGIgPSAoYTEsIGEyKSA9PiAzLjAgKiBhMiAtIDYuMCAqIGExO1xuY29uc3QgYyA9IChhMSkgPT4gMy4wICogYTE7XG5jb25zdCBjYWxjQmV6aWVyID0gKHQsIGExLCBhMikgPT4gKChhKGExLCBhMikgKiB0ICsgYihhMSwgYTIpKSAqIHQgKyBjKGExKSkgKiB0O1xuY29uc3QgZ2V0U2xvcGUgPSAodCwgYTEsIGEyKSA9PiAzLjAgKiBhKGExLCBhMikgKiB0ICogdCArIDIuMCAqIGIoYTEsIGEyKSAqIHQgKyBjKGExKTtcbmNvbnN0IHN1YmRpdmlzaW9uUHJlY2lzaW9uID0gMC4wMDAwMDAxO1xuY29uc3Qgc3ViZGl2aXNpb25NYXhJdGVyYXRpb25zID0gMTA7XG5mdW5jdGlvbiBiaW5hcnlTdWJkaXZpZGUoYVgsIGFBLCBhQiwgbVgxLCBtWDIpIHtcbiAgICBsZXQgY3VycmVudFg7XG4gICAgbGV0IGN1cnJlbnRUO1xuICAgIGxldCBpID0gMDtcbiAgICBkbyB7XG4gICAgICAgIGN1cnJlbnRUID0gYUEgKyAoYUIgLSBhQSkgLyAyLjA7XG4gICAgICAgIGN1cnJlbnRYID0gY2FsY0JlemllcihjdXJyZW50VCwgbVgxLCBtWDIpIC0gYVg7XG4gICAgICAgIGlmIChjdXJyZW50WCA+IDAuMCkge1xuICAgICAgICAgICAgYUIgPSBjdXJyZW50VDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFBID0gY3VycmVudFQ7XG4gICAgICAgIH1cbiAgICB9IHdoaWxlIChNYXRoLmFicyhjdXJyZW50WCkgPiBzdWJkaXZpc2lvblByZWNpc2lvbiAmJlxuICAgICAgICArK2kgPCBzdWJkaXZpc2lvbk1heEl0ZXJhdGlvbnMpO1xuICAgIHJldHVybiBjdXJyZW50VDtcbn1cbmNvbnN0IG5ld3Rvbkl0ZXJhdGlvbnMgPSA4O1xuY29uc3QgbmV3dG9uTWluU2xvcGUgPSAwLjAwMTtcbmZ1bmN0aW9uIG5ld3RvblJhcGhzb25JdGVyYXRlKGFYLCBhR3Vlc3NULCBtWDEsIG1YMikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3dG9uSXRlcmF0aW9uczsgKytpKSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTbG9wZSA9IGdldFNsb3BlKGFHdWVzc1QsIG1YMSwgbVgyKTtcbiAgICAgICAgaWYgKGN1cnJlbnRTbG9wZSA9PT0gMC4wKSB7XG4gICAgICAgICAgICByZXR1cm4gYUd1ZXNzVDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXJyZW50WCA9IGNhbGNCZXppZXIoYUd1ZXNzVCwgbVgxLCBtWDIpIC0gYVg7XG4gICAgICAgIGFHdWVzc1QgLT0gY3VycmVudFggLyBjdXJyZW50U2xvcGU7XG4gICAgfVxuICAgIHJldHVybiBhR3Vlc3NUO1xufVxuY29uc3Qga1NwbGluZVRhYmxlU2l6ZSA9IDExO1xuY29uc3Qga1NhbXBsZVN0ZXBTaXplID0gMS4wIC8gKGtTcGxpbmVUYWJsZVNpemUgLSAxLjApO1xuZnVuY3Rpb24gY3ViaWNCZXppZXIobVgxLCBtWTEsIG1YMiwgbVkyKSB7XG4gICAgaWYgKG1YMSA9PT0gbVkxICYmIG1YMiA9PT0gbVkyKVxuICAgICAgICByZXR1cm4gbGluZWFyO1xuICAgIGNvbnN0IHNhbXBsZVZhbHVlcyA9IG5ldyBGbG9hdDMyQXJyYXkoa1NwbGluZVRhYmxlU2l6ZSk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrU3BsaW5lVGFibGVTaXplOyArK2kpIHtcbiAgICAgICAgc2FtcGxlVmFsdWVzW2ldID0gY2FsY0JlemllcihpICoga1NhbXBsZVN0ZXBTaXplLCBtWDEsIG1YMik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFRGb3JYKGFYKSB7XG4gICAgICAgIGxldCBpbnRlcnZhbFN0YXJ0ID0gMC4wO1xuICAgICAgICBsZXQgY3VycmVudFNhbXBsZSA9IDE7XG4gICAgICAgIGNvbnN0IGxhc3RTYW1wbGUgPSBrU3BsaW5lVGFibGVTaXplIC0gMTtcbiAgICAgICAgZm9yICg7IGN1cnJlbnRTYW1wbGUgIT09IGxhc3RTYW1wbGUgJiYgc2FtcGxlVmFsdWVzW2N1cnJlbnRTYW1wbGVdIDw9IGFYOyArK2N1cnJlbnRTYW1wbGUpIHtcbiAgICAgICAgICAgIGludGVydmFsU3RhcnQgKz0ga1NhbXBsZVN0ZXBTaXplO1xuICAgICAgICB9XG4gICAgICAgIC0tY3VycmVudFNhbXBsZTtcbiAgICAgICAgY29uc3QgZGlzdCA9IChhWCAtIHNhbXBsZVZhbHVlc1tjdXJyZW50U2FtcGxlXSkgL1xuICAgICAgICAgICAgKHNhbXBsZVZhbHVlc1tjdXJyZW50U2FtcGxlICsgMV0gLSBzYW1wbGVWYWx1ZXNbY3VycmVudFNhbXBsZV0pO1xuICAgICAgICBjb25zdCBndWVzc0ZvclQgPSBpbnRlcnZhbFN0YXJ0ICsgZGlzdCAqIGtTYW1wbGVTdGVwU2l6ZTtcbiAgICAgICAgY29uc3QgaW5pdGlhbFNsb3BlID0gZ2V0U2xvcGUoZ3Vlc3NGb3JULCBtWDEsIG1YMik7XG4gICAgICAgIGlmIChpbml0aWFsU2xvcGUgPj0gbmV3dG9uTWluU2xvcGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXd0b25SYXBoc29uSXRlcmF0ZShhWCwgZ3Vlc3NGb3JULCBtWDEsIG1YMik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaW5pdGlhbFNsb3BlID09PSAwLjApIHtcbiAgICAgICAgICAgIHJldHVybiBndWVzc0ZvclQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gYmluYXJ5U3ViZGl2aWRlKGFYLCBpbnRlcnZhbFN0YXJ0LCBpbnRlcnZhbFN0YXJ0ICsga1NhbXBsZVN0ZXBTaXplLCBtWDEsIG1YMik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuICh0KSA9PiB0ID09PSAwIHx8IHQgPT09IDEgPyB0IDogY2FsY0JlemllcihnZXRURm9yWCh0KSwgbVkxLCBtWTIpO1xufVxuXG5leHBvcnQgeyBjdWJpY0JlemllciB9O1xuIiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgaW52YXJpYW50IH0gZnJvbSAnaGV5LWxpc3Rlbic7XG5pbXBvcnQgeyBjdWJpY0JlemllciwgbGluZWFyLCBlYXNlSW4sIGVhc2VJbk91dCwgZWFzZU91dCwgY2lyY0luLCBjaXJjSW5PdXQsIGNpcmNPdXQsIGJhY2tJbiwgYmFja0luT3V0LCBiYWNrT3V0LCBhbnRpY2lwYXRlLCBib3VuY2VJbiwgYm91bmNlSW5PdXQsIGJvdW5jZU91dCB9IGZyb20gJ3BvcG1vdGlvbic7XG5cbnZhciBlYXNpbmdMb29rdXAgPSB7XG4gICAgbGluZWFyOiBsaW5lYXIsXG4gICAgZWFzZUluOiBlYXNlSW4sXG4gICAgZWFzZUluT3V0OiBlYXNlSW5PdXQsXG4gICAgZWFzZU91dDogZWFzZU91dCxcbiAgICBjaXJjSW46IGNpcmNJbixcbiAgICBjaXJjSW5PdXQ6IGNpcmNJbk91dCxcbiAgICBjaXJjT3V0OiBjaXJjT3V0LFxuICAgIGJhY2tJbjogYmFja0luLFxuICAgIGJhY2tJbk91dDogYmFja0luT3V0LFxuICAgIGJhY2tPdXQ6IGJhY2tPdXQsXG4gICAgYW50aWNpcGF0ZTogYW50aWNpcGF0ZSxcbiAgICBib3VuY2VJbjogYm91bmNlSW4sXG4gICAgYm91bmNlSW5PdXQ6IGJvdW5jZUluT3V0LFxuICAgIGJvdW5jZU91dDogYm91bmNlT3V0LFxufTtcbnZhciBlYXNpbmdEZWZpbml0aW9uVG9GdW5jdGlvbiA9IGZ1bmN0aW9uIChkZWZpbml0aW9uKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgLy8gSWYgY3ViaWMgYmV6aWVyIGRlZmluaXRpb24sIGNyZWF0ZSBiZXppZXIgY3VydmVcbiAgICAgICAgaW52YXJpYW50KGRlZmluaXRpb24ubGVuZ3RoID09PSA0LCBcIkN1YmljIGJlemllciBhcnJheXMgbXVzdCBjb250YWluIGZvdXIgbnVtZXJpY2FsIHZhbHVlcy5cIik7XG4gICAgICAgIHZhciBfYSA9IF9fcmVhZChkZWZpbml0aW9uLCA0KSwgeDEgPSBfYVswXSwgeTEgPSBfYVsxXSwgeDIgPSBfYVsyXSwgeTIgPSBfYVszXTtcbiAgICAgICAgcmV0dXJuIGN1YmljQmV6aWVyKHgxLCB5MSwgeDIsIHkyKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluaXRpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgLy8gRWxzZSBsb29rdXAgZnJvbSB0YWJsZVxuICAgICAgICBpbnZhcmlhbnQoZWFzaW5nTG9va3VwW2RlZmluaXRpb25dICE9PSB1bmRlZmluZWQsIFwiSW52YWxpZCBlYXNpbmcgdHlwZSAnXCIuY29uY2F0KGRlZmluaXRpb24sIFwiJ1wiKSk7XG4gICAgICAgIHJldHVybiBlYXNpbmdMb29rdXBbZGVmaW5pdGlvbl07XG4gICAgfVxuICAgIHJldHVybiBkZWZpbml0aW9uO1xufTtcbnZhciBpc0Vhc2luZ0FycmF5ID0gZnVuY3Rpb24gKGVhc2UpIHtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShlYXNlKSAmJiB0eXBlb2YgZWFzZVswXSAhPT0gXCJudW1iZXJcIjtcbn07XG5cbmV4cG9ydCB7IGVhc2luZ0RlZmluaXRpb25Ub0Z1bmN0aW9uLCBpc0Vhc2luZ0FycmF5IH07XG4iLCJpbXBvcnQgeyBjb21wbGV4IH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuXG4vKipcbiAqIENoZWNrIGlmIGEgdmFsdWUgaXMgYW5pbWF0YWJsZS4gRXhhbXBsZXM6XG4gKlxuICog4pyFOiAxMDAsIFwiMTAwcHhcIiwgXCIjZmZmXCJcbiAqIOKdjDogXCJibG9ja1wiLCBcInVybCgyLmpwZylcIlxuICogQHBhcmFtIHZhbHVlXG4gKlxuICogQGludGVybmFsXG4gKi9cbnZhciBpc0FuaW1hdGFibGUgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIC8vIElmIHRoZSBsaXN0IG9mIGtleXMgdGF0IG1pZ2h0IGJlIG5vbi1hbmltYXRhYmxlIGdyb3dzLCByZXBsYWNlIHdpdGggU2V0XG4gICAgaWYgKGtleSA9PT0gXCJ6SW5kZXhcIilcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIElmIGl0J3MgYSBudW1iZXIgb3IgYSBrZXlmcmFtZXMgYXJyYXksIHdlIGNhbiBhbmltYXRlIGl0LiBXZSBtaWdodCBhdCBzb21lIHBvaW50XG4gICAgLy8gbmVlZCB0byBkbyBhIGRlZXAgaXNBbmltYXRhYmxlIGNoZWNrIG9mIGtleWZyYW1lcywgb3IgbGV0IFBvcG1vdGlvbiBoYW5kbGUgdGhpcyxcbiAgICAvLyBidXQgZm9yIG5vdyBsZXRzIGxlYXZlIGl0IGxpa2UgdGhpcyBmb3IgcGVyZm9ybWFuY2UgcmVhc29uc1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgQXJyYXkuaXNBcnJheSh2YWx1ZSkpXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgLy8gSXQncyBhbmltYXRhYmxlIGlmIHdlIGhhdmUgYSBzdHJpbmdcbiAgICAgICAgY29tcGxleC50ZXN0KHZhbHVlKSAmJiAvLyBBbmQgaXQgY29udGFpbnMgbnVtYmVycyBhbmQvb3IgY29sb3JzXG4gICAgICAgICF2YWx1ZS5zdGFydHNXaXRoKFwidXJsKFwiKSAvLyBVbmxlc3MgaXQgc3RhcnRzIHdpdGggXCJ1cmwoXCJcbiAgICApIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn07XG5cbmV4cG9ydCB7IGlzQW5pbWF0YWJsZSB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBpc0tleWZyYW1lc1RhcmdldCB9IGZyb20gJy4vaXMta2V5ZnJhbWVzLXRhcmdldC5tanMnO1xuXG52YXIgdW5kZXJEYW1wZWRTcHJpbmcgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAoe1xuICAgIHR5cGU6IFwic3ByaW5nXCIsXG4gICAgc3RpZmZuZXNzOiA1MDAsXG4gICAgZGFtcGluZzogMjUsXG4gICAgcmVzdFNwZWVkOiAxMCxcbn0pOyB9O1xudmFyIGNyaXRpY2FsbHlEYW1wZWRTcHJpbmcgPSBmdW5jdGlvbiAodG8pIHsgcmV0dXJuICh7XG4gICAgdHlwZTogXCJzcHJpbmdcIixcbiAgICBzdGlmZm5lc3M6IDU1MCxcbiAgICBkYW1waW5nOiB0byA9PT0gMCA/IDIgKiBNYXRoLnNxcnQoNTUwKSA6IDMwLFxuICAgIHJlc3RTcGVlZDogMTAsXG59KTsgfTtcbnZhciBsaW5lYXJUd2VlbiA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gICAgdHlwZTogXCJrZXlmcmFtZXNcIixcbiAgICBlYXNlOiBcImxpbmVhclwiLFxuICAgIGR1cmF0aW9uOiAwLjMsXG59KTsgfTtcbnZhciBrZXlmcmFtZXMgPSBmdW5jdGlvbiAodmFsdWVzKSB7IHJldHVybiAoe1xuICAgIHR5cGU6IFwia2V5ZnJhbWVzXCIsXG4gICAgZHVyYXRpb246IDAuOCxcbiAgICB2YWx1ZXM6IHZhbHVlcyxcbn0pOyB9O1xudmFyIGRlZmF1bHRUcmFuc2l0aW9ucyA9IHtcbiAgICB4OiB1bmRlckRhbXBlZFNwcmluZyxcbiAgICB5OiB1bmRlckRhbXBlZFNwcmluZyxcbiAgICB6OiB1bmRlckRhbXBlZFNwcmluZyxcbiAgICByb3RhdGU6IHVuZGVyRGFtcGVkU3ByaW5nLFxuICAgIHJvdGF0ZVg6IHVuZGVyRGFtcGVkU3ByaW5nLFxuICAgIHJvdGF0ZVk6IHVuZGVyRGFtcGVkU3ByaW5nLFxuICAgIHJvdGF0ZVo6IHVuZGVyRGFtcGVkU3ByaW5nLFxuICAgIHNjYWxlWDogY3JpdGljYWxseURhbXBlZFNwcmluZyxcbiAgICBzY2FsZVk6IGNyaXRpY2FsbHlEYW1wZWRTcHJpbmcsXG4gICAgc2NhbGU6IGNyaXRpY2FsbHlEYW1wZWRTcHJpbmcsXG4gICAgb3BhY2l0eTogbGluZWFyVHdlZW4sXG4gICAgYmFja2dyb3VuZENvbG9yOiBsaW5lYXJUd2VlbixcbiAgICBjb2xvcjogbGluZWFyVHdlZW4sXG4gICAgZGVmYXVsdDogY3JpdGljYWxseURhbXBlZFNwcmluZyxcbn07XG52YXIgZ2V0RGVmYXVsdFRyYW5zaXRpb24gPSBmdW5jdGlvbiAodmFsdWVLZXksIHRvKSB7XG4gICAgdmFyIHRyYW5zaXRpb25GYWN0b3J5O1xuICAgIGlmIChpc0tleWZyYW1lc1RhcmdldCh0bykpIHtcbiAgICAgICAgdHJhbnNpdGlvbkZhY3RvcnkgPSBrZXlmcmFtZXM7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0cmFuc2l0aW9uRmFjdG9yeSA9XG4gICAgICAgICAgICBkZWZhdWx0VHJhbnNpdGlvbnNbdmFsdWVLZXldIHx8IGRlZmF1bHRUcmFuc2l0aW9ucy5kZWZhdWx0O1xuICAgIH1cbiAgICByZXR1cm4gX19hc3NpZ24oeyB0bzogdG8gfSwgdHJhbnNpdGlvbkZhY3RvcnkodG8pKTtcbn07XG5cbmV4cG9ydCB7IGNyaXRpY2FsbHlEYW1wZWRTcHJpbmcsIGdldERlZmF1bHRUcmFuc2l0aW9uLCBsaW5lYXJUd2VlbiwgdW5kZXJEYW1wZWRTcHJpbmcgfTtcbiIsImltcG9ydCB7IGNvbXBsZXggfSBmcm9tICcuL2luZGV4Lm1qcyc7XG5pbXBvcnQgeyBmbG9hdFJlZ2V4IH0gZnJvbSAnLi4vdXRpbHMubWpzJztcblxuY29uc3QgbWF4RGVmYXVsdHMgPSBuZXcgU2V0KFsnYnJpZ2h0bmVzcycsICdjb250cmFzdCcsICdzYXR1cmF0ZScsICdvcGFjaXR5J10pO1xuZnVuY3Rpb24gYXBwbHlEZWZhdWx0RmlsdGVyKHYpIHtcbiAgICBsZXQgW25hbWUsIHZhbHVlXSA9IHYuc2xpY2UoMCwgLTEpLnNwbGl0KCcoJyk7XG4gICAgaWYgKG5hbWUgPT09ICdkcm9wLXNoYWRvdycpXG4gICAgICAgIHJldHVybiB2O1xuICAgIGNvbnN0IFtudW1iZXJdID0gdmFsdWUubWF0Y2goZmxvYXRSZWdleCkgfHwgW107XG4gICAgaWYgKCFudW1iZXIpXG4gICAgICAgIHJldHVybiB2O1xuICAgIGNvbnN0IHVuaXQgPSB2YWx1ZS5yZXBsYWNlKG51bWJlciwgJycpO1xuICAgIGxldCBkZWZhdWx0VmFsdWUgPSBtYXhEZWZhdWx0cy5oYXMobmFtZSkgPyAxIDogMDtcbiAgICBpZiAobnVtYmVyICE9PSB2YWx1ZSlcbiAgICAgICAgZGVmYXVsdFZhbHVlICo9IDEwMDtcbiAgICByZXR1cm4gbmFtZSArICcoJyArIGRlZmF1bHRWYWx1ZSArIHVuaXQgKyAnKSc7XG59XG5jb25zdCBmdW5jdGlvblJlZ2V4ID0gLyhbYS16LV0qKVxcKC4qP1xcKS9nO1xuY29uc3QgZmlsdGVyID0gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjb21wbGV4KSwgeyBnZXRBbmltYXRhYmxlTm9uZTogKHYpID0+IHtcbiAgICAgICAgY29uc3QgZnVuY3Rpb25zID0gdi5tYXRjaChmdW5jdGlvblJlZ2V4KTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9ucyA/IGZ1bmN0aW9ucy5tYXAoYXBwbHlEZWZhdWx0RmlsdGVyKS5qb2luKCcgJykgOiB2O1xuICAgIH0gfSk7XG5cbmV4cG9ydCB7IGZpbHRlciB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBjb2xvciwgZmlsdGVyIH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuaW1wb3J0IHsgbnVtYmVyVmFsdWVUeXBlcyB9IGZyb20gJy4vbnVtYmVyLm1qcyc7XG5cbi8qKlxuICogQSBtYXAgb2YgZGVmYXVsdCB2YWx1ZSB0eXBlcyBmb3IgY29tbW9uIHZhbHVlc1xuICovXG52YXIgZGVmYXVsdFZhbHVlVHlwZXMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgbnVtYmVyVmFsdWVUeXBlcyksIHsgXG4gICAgLy8gQ29sb3IgcHJvcHNcbiAgICBjb2xvcjogY29sb3IsIGJhY2tncm91bmRDb2xvcjogY29sb3IsIG91dGxpbmVDb2xvcjogY29sb3IsIGZpbGw6IGNvbG9yLCBzdHJva2U6IGNvbG9yLCBcbiAgICAvLyBCb3JkZXIgcHJvcHNcbiAgICBib3JkZXJDb2xvcjogY29sb3IsIGJvcmRlclRvcENvbG9yOiBjb2xvciwgYm9yZGVyUmlnaHRDb2xvcjogY29sb3IsIGJvcmRlckJvdHRvbUNvbG9yOiBjb2xvciwgYm9yZGVyTGVmdENvbG9yOiBjb2xvciwgZmlsdGVyOiBmaWx0ZXIsIFdlYmtpdEZpbHRlcjogZmlsdGVyIH0pO1xuLyoqXG4gKiBHZXRzIHRoZSBkZWZhdWx0IFZhbHVlVHlwZSBmb3IgdGhlIHByb3ZpZGVkIHZhbHVlIGtleVxuICovXG52YXIgZ2V0RGVmYXVsdFZhbHVlVHlwZSA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIGRlZmF1bHRWYWx1ZVR5cGVzW2tleV07IH07XG5cbmV4cG9ydCB7IGRlZmF1bHRWYWx1ZVR5cGVzLCBnZXREZWZhdWx0VmFsdWVUeXBlIH07XG4iLCJpbXBvcnQgeyBmaWx0ZXIsIGNvbXBsZXggfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5pbXBvcnQgeyBnZXREZWZhdWx0VmFsdWVUeXBlIH0gZnJvbSAnLi9kZWZhdWx0cy5tanMnO1xuXG5mdW5jdGlvbiBnZXRBbmltYXRhYmxlTm9uZShrZXksIHZhbHVlKSB7XG4gICAgdmFyIF9hO1xuICAgIHZhciBkZWZhdWx0VmFsdWVUeXBlID0gZ2V0RGVmYXVsdFZhbHVlVHlwZShrZXkpO1xuICAgIGlmIChkZWZhdWx0VmFsdWVUeXBlICE9PSBmaWx0ZXIpXG4gICAgICAgIGRlZmF1bHRWYWx1ZVR5cGUgPSBjb21wbGV4O1xuICAgIC8vIElmIHZhbHVlIGlzIG5vdCByZWNvZ25pc2VkIGFzIGFuaW1hdGFibGUsIGllIFwibm9uZVwiLCBjcmVhdGUgYW4gYW5pbWF0YWJsZSB2ZXJzaW9uIG9yaWdpbiBiYXNlZCBvbiB0aGUgdGFyZ2V0XG4gICAgcmV0dXJuIChfYSA9IGRlZmF1bHRWYWx1ZVR5cGUuZ2V0QW5pbWF0YWJsZU5vbmUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKGRlZmF1bHRWYWx1ZVR5cGUsIHZhbHVlKTtcbn1cblxuZXhwb3J0IHsgZ2V0QW5pbWF0YWJsZU5vbmUgfTtcbiIsInZhciBpbnN0YW50QW5pbWF0aW9uU3RhdGUgPSB7XG4gICAgY3VycmVudDogZmFsc2UsXG59O1xuXG5leHBvcnQgeyBpbnN0YW50QW5pbWF0aW9uU3RhdGUgfTtcbiIsImltcG9ydCB7IF9fYXNzaWduLCBfX3Jlc3QsIF9fc3ByZWFkQXJyYXksIF9fcmVhZCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGluZXJ0aWEsIGFuaW1hdGUgfSBmcm9tICdwb3Btb3Rpb24nO1xuaW1wb3J0IHsgc2Vjb25kc1RvTWlsbGlzZWNvbmRzIH0gZnJvbSAnLi4vLi4vdXRpbHMvdGltZS1jb252ZXJzaW9uLm1qcyc7XG5pbXBvcnQgeyBpc0Vhc2luZ0FycmF5LCBlYXNpbmdEZWZpbml0aW9uVG9GdW5jdGlvbiB9IGZyb20gJy4vZWFzaW5nLm1qcyc7XG5pbXBvcnQgeyBpc0FuaW1hdGFibGUgfSBmcm9tICcuL2lzLWFuaW1hdGFibGUubWpzJztcbmltcG9ydCB7IGdldERlZmF1bHRUcmFuc2l0aW9uIH0gZnJvbSAnLi9kZWZhdWx0LXRyYW5zaXRpb25zLm1qcyc7XG5pbXBvcnQgeyB3YXJuaW5nIH0gZnJvbSAnaGV5LWxpc3Rlbic7XG5pbXBvcnQgeyBnZXRBbmltYXRhYmxlTm9uZSB9IGZyb20gJy4uLy4uL3JlbmRlci9kb20vdmFsdWUtdHlwZXMvYW5pbWF0YWJsZS1ub25lLm1qcyc7XG5pbXBvcnQgeyBpbnN0YW50QW5pbWF0aW9uU3RhdGUgfSBmcm9tICcuLi8uLi91dGlscy91c2UtaW5zdGFudC10cmFuc2l0aW9uLXN0YXRlLm1qcyc7XG5pbXBvcnQgeyByZXNvbHZlRmluYWxWYWx1ZUluS2V5ZnJhbWVzIH0gZnJvbSAnLi4vLi4vdXRpbHMvcmVzb2x2ZS12YWx1ZS5tanMnO1xuXG4vKipcbiAqIERlY2lkZSB3aGV0aGVyIGEgdHJhbnNpdGlvbiBpcyBkZWZpbmVkIG9uIGEgZ2l2ZW4gVHJhbnNpdGlvbi5cbiAqIFRoaXMgZmlsdGVycyBvdXQgb3JjaGVzdHJhdGlvbiBvcHRpb25zIGFuZCByZXR1cm5zIHRydWVcbiAqIGlmIGFueSBvcHRpb25zIGFyZSBsZWZ0LlxuICovXG5mdW5jdGlvbiBpc1RyYW5zaXRpb25EZWZpbmVkKF9hKSB7XG4gICAgX2Eud2hlbjsgX2EuZGVsYXk7IF9hLmRlbGF5Q2hpbGRyZW47IF9hLnN0YWdnZXJDaGlsZHJlbjsgX2Euc3RhZ2dlckRpcmVjdGlvbjsgX2EucmVwZWF0OyBfYS5yZXBlYXRUeXBlOyBfYS5yZXBlYXREZWxheTsgX2EuZnJvbTsgdmFyIHRyYW5zaXRpb24gPSBfX3Jlc3QoX2EsIFtcIndoZW5cIiwgXCJkZWxheVwiLCBcImRlbGF5Q2hpbGRyZW5cIiwgXCJzdGFnZ2VyQ2hpbGRyZW5cIiwgXCJzdGFnZ2VyRGlyZWN0aW9uXCIsIFwicmVwZWF0XCIsIFwicmVwZWF0VHlwZVwiLCBcInJlcGVhdERlbGF5XCIsIFwiZnJvbVwiXSk7XG4gICAgcmV0dXJuICEhT2JqZWN0LmtleXModHJhbnNpdGlvbikubGVuZ3RoO1xufVxudmFyIGxlZ2FjeVJlcGVhdFdhcm5pbmcgPSBmYWxzZTtcbi8qKlxuICogQ29udmVydCBGcmFtZXIgTW90aW9uJ3MgVHJhbnNpdGlvbiB0eXBlIGludG8gUG9wbW90aW9uLWNvbXBhdGlibGUgb3B0aW9ucy5cbiAqL1xuZnVuY3Rpb24gY29udmVydFRyYW5zaXRpb25Ub0FuaW1hdGlvbk9wdGlvbnMoX2EpIHtcbiAgICB2YXIgZWFzZSA9IF9hLmVhc2UsIHRpbWVzID0gX2EudGltZXMsIHlveW8gPSBfYS55b3lvLCBmbGlwID0gX2EuZmxpcCwgbG9vcCA9IF9hLmxvb3AsIHRyYW5zaXRpb24gPSBfX3Jlc3QoX2EsIFtcImVhc2VcIiwgXCJ0aW1lc1wiLCBcInlveW9cIiwgXCJmbGlwXCIsIFwibG9vcFwiXSk7XG4gICAgdmFyIG9wdGlvbnMgPSBfX2Fzc2lnbih7fSwgdHJhbnNpdGlvbik7XG4gICAgaWYgKHRpbWVzKVxuICAgICAgICBvcHRpb25zW1wib2Zmc2V0XCJdID0gdGltZXM7XG4gICAgLyoqXG4gICAgICogQ29udmVydCBhbnkgZXhpc3RpbmcgZHVyYXRpb25zIGZyb20gc2Vjb25kcyB0byBtaWxsaXNlY29uZHNcbiAgICAgKi9cbiAgICBpZiAodHJhbnNpdGlvbi5kdXJhdGlvbilcbiAgICAgICAgb3B0aW9uc1tcImR1cmF0aW9uXCJdID0gc2Vjb25kc1RvTWlsbGlzZWNvbmRzKHRyYW5zaXRpb24uZHVyYXRpb24pO1xuICAgIGlmICh0cmFuc2l0aW9uLnJlcGVhdERlbGF5KVxuICAgICAgICBvcHRpb25zLnJlcGVhdERlbGF5ID0gc2Vjb25kc1RvTWlsbGlzZWNvbmRzKHRyYW5zaXRpb24ucmVwZWF0RGVsYXkpO1xuICAgIC8qKlxuICAgICAqIE1hcCBlYXNpbmcgbmFtZXMgdG8gUG9wbW90aW9uJ3MgZWFzaW5nIGZ1bmN0aW9uc1xuICAgICAqL1xuICAgIGlmIChlYXNlKSB7XG4gICAgICAgIG9wdGlvbnNbXCJlYXNlXCJdID0gaXNFYXNpbmdBcnJheShlYXNlKVxuICAgICAgICAgICAgPyBlYXNlLm1hcChlYXNpbmdEZWZpbml0aW9uVG9GdW5jdGlvbilcbiAgICAgICAgICAgIDogZWFzaW5nRGVmaW5pdGlvblRvRnVuY3Rpb24oZWFzZSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFN1cHBvcnQgbGVnYWN5IHRyYW5zaXRpb24gQVBJXG4gICAgICovXG4gICAgaWYgKHRyYW5zaXRpb24udHlwZSA9PT0gXCJ0d2VlblwiKVxuICAgICAgICBvcHRpb25zLnR5cGUgPSBcImtleWZyYW1lc1wiO1xuICAgIC8qKlxuICAgICAqIFRPRE86IFRoZXNlIG9wdGlvbnMgYXJlIG9mZmljaWFsbHkgcmVtb3ZlZCBmcm9tIHRoZSBBUEkuXG4gICAgICovXG4gICAgaWYgKHlveW8gfHwgbG9vcCB8fCBmbGlwKSB7XG4gICAgICAgIHdhcm5pbmcoIWxlZ2FjeVJlcGVhdFdhcm5pbmcsIFwieW95bywgbG9vcCBhbmQgZmxpcCBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBBUEkuIFJlcGxhY2Ugd2l0aCByZXBlYXQgYW5kIHJlcGVhdFR5cGUgb3B0aW9ucy5cIik7XG4gICAgICAgIGxlZ2FjeVJlcGVhdFdhcm5pbmcgPSB0cnVlO1xuICAgICAgICBpZiAoeW95bykge1xuICAgICAgICAgICAgb3B0aW9ucy5yZXBlYXRUeXBlID0gXCJyZXZlcnNlXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAobG9vcCkge1xuICAgICAgICAgICAgb3B0aW9ucy5yZXBlYXRUeXBlID0gXCJsb29wXCI7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZmxpcCkge1xuICAgICAgICAgICAgb3B0aW9ucy5yZXBlYXRUeXBlID0gXCJtaXJyb3JcIjtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLnJlcGVhdCA9IGxvb3AgfHwgeW95byB8fCBmbGlwIHx8IHRyYW5zaXRpb24ucmVwZWF0O1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUT0RPOiBQb3Btb3Rpb24gOSBoYXMgdGhlIGFiaWxpdHkgdG8gYXV0b21hdGljYWxseSBkZXRlY3Qgd2hldGhlciB0byB1c2VcbiAgICAgKiBhIGtleWZyYW1lcyBvciBzcHJpbmcgYW5pbWF0aW9uLCBidXQgZG9lcyBzbyBieSBkZXRlY3RpbmcgdmVsb2NpdHkgYW5kIG90aGVyIHNwcmluZyBvcHRpb25zLlxuICAgICAqIEl0J2QgYmUgZ29vZCB0byBpbnRyb2R1Y2UgYSBzaW1pbGFyIHRoaW5nIGhlcmUuXG4gICAgICovXG4gICAgaWYgKHRyYW5zaXRpb24udHlwZSAhPT0gXCJzcHJpbmdcIilcbiAgICAgICAgb3B0aW9ucy50eXBlID0gXCJrZXlmcmFtZXNcIjtcbiAgICByZXR1cm4gb3B0aW9ucztcbn1cbi8qKlxuICogR2V0IHRoZSBkZWxheSBmb3IgYSB2YWx1ZSBieSBjaGVja2luZyBUcmFuc2l0aW9uIHdpdGggZGVjcmVhc2luZyBzcGVjaWZpY2l0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVsYXlGcm9tVHJhbnNpdGlvbih0cmFuc2l0aW9uLCBrZXkpIHtcbiAgICB2YXIgX2EsIF9iO1xuICAgIHZhciB2YWx1ZVRyYW5zaXRpb24gPSBnZXRWYWx1ZVRyYW5zaXRpb24odHJhbnNpdGlvbiwga2V5KSB8fCB7fTtcbiAgICByZXR1cm4gKF9iID0gKF9hID0gdmFsdWVUcmFuc2l0aW9uLmRlbGF5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0cmFuc2l0aW9uLmRlbGF5KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAwO1xufVxuZnVuY3Rpb24gaHlkcmF0ZUtleWZyYW1lcyhvcHRpb25zKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy50bykgJiYgb3B0aW9ucy50b1swXSA9PT0gbnVsbCkge1xuICAgICAgICBvcHRpb25zLnRvID0gX19zcHJlYWRBcnJheShbXSwgX19yZWFkKG9wdGlvbnMudG8pLCBmYWxzZSk7XG4gICAgICAgIG9wdGlvbnMudG9bMF0gPSBvcHRpb25zLmZyb207XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zO1xufVxuZnVuY3Rpb24gZ2V0UG9wbW90aW9uQW5pbWF0aW9uT3B0aW9ucyh0cmFuc2l0aW9uLCBvcHRpb25zLCBrZXkpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy50bykpIHtcbiAgICAgICAgKF9hID0gdHJhbnNpdGlvbi5kdXJhdGlvbikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKHRyYW5zaXRpb24uZHVyYXRpb24gPSAwLjgpO1xuICAgIH1cbiAgICBoeWRyYXRlS2V5ZnJhbWVzKG9wdGlvbnMpO1xuICAgIC8qKlxuICAgICAqIEdldCBhIGRlZmF1bHQgdHJhbnNpdGlvbiBpZiBub25lIGlzIGRldGVybWluZWQgdG8gYmUgZGVmaW5lZC5cbiAgICAgKi9cbiAgICBpZiAoIWlzVHJhbnNpdGlvbkRlZmluZWQodHJhbnNpdGlvbikpIHtcbiAgICAgICAgdHJhbnNpdGlvbiA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCB0cmFuc2l0aW9uKSwgZ2V0RGVmYXVsdFRyYW5zaXRpb24oa2V5LCBvcHRpb25zLnRvKSk7XG4gICAgfVxuICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgb3B0aW9ucyksIGNvbnZlcnRUcmFuc2l0aW9uVG9BbmltYXRpb25PcHRpb25zKHRyYW5zaXRpb24pKTtcbn1cbi8qKlxuICpcbiAqL1xuZnVuY3Rpb24gZ2V0QW5pbWF0aW9uKGtleSwgdmFsdWUsIHRhcmdldCwgdHJhbnNpdGlvbiwgb25Db21wbGV0ZSkge1xuICAgIHZhciBfYTtcbiAgICB2YXIgdmFsdWVUcmFuc2l0aW9uID0gZ2V0VmFsdWVUcmFuc2l0aW9uKHRyYW5zaXRpb24sIGtleSk7XG4gICAgdmFyIG9yaWdpbiA9IChfYSA9IHZhbHVlVHJhbnNpdGlvbi5mcm9tKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB2YWx1ZS5nZXQoKTtcbiAgICB2YXIgaXNUYXJnZXRBbmltYXRhYmxlID0gaXNBbmltYXRhYmxlKGtleSwgdGFyZ2V0KTtcbiAgICBpZiAob3JpZ2luID09PSBcIm5vbmVcIiAmJiBpc1RhcmdldEFuaW1hdGFibGUgJiYgdHlwZW9mIHRhcmdldCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgd2UncmUgdHJ5aW5nIHRvIGFuaW1hdGUgZnJvbSBcIm5vbmVcIiwgdHJ5IGFuZCBnZXQgYW4gYW5pbWF0YWJsZSB2ZXJzaW9uXG4gICAgICAgICAqIG9mIHRoZSB0YXJnZXQuIFRoaXMgY291bGQgYmUgaW1wcm92ZWQgdG8gd29yayBib3RoIHdheXMuXG4gICAgICAgICAqL1xuICAgICAgICBvcmlnaW4gPSBnZXRBbmltYXRhYmxlTm9uZShrZXksIHRhcmdldCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzWmVybyhvcmlnaW4pICYmIHR5cGVvZiB0YXJnZXQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgb3JpZ2luID0gZ2V0WmVyb1VuaXQodGFyZ2V0KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkodGFyZ2V0KSAmJlxuICAgICAgICBpc1plcm8odGFyZ2V0KSAmJlxuICAgICAgICB0eXBlb2Ygb3JpZ2luID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHRhcmdldCA9IGdldFplcm9Vbml0KG9yaWdpbik7XG4gICAgfVxuICAgIHZhciBpc09yaWdpbkFuaW1hdGFibGUgPSBpc0FuaW1hdGFibGUoa2V5LCBvcmlnaW4pO1xuICAgIHdhcm5pbmcoaXNPcmlnaW5BbmltYXRhYmxlID09PSBpc1RhcmdldEFuaW1hdGFibGUsIFwiWW91IGFyZSB0cnlpbmcgdG8gYW5pbWF0ZSBcIi5jb25jYXQoa2V5LCBcIiBmcm9tIFxcXCJcIikuY29uY2F0KG9yaWdpbiwgXCJcXFwiIHRvIFxcXCJcIikuY29uY2F0KHRhcmdldCwgXCJcXFwiLiBcIikuY29uY2F0KG9yaWdpbiwgXCIgaXMgbm90IGFuIGFuaW1hdGFibGUgdmFsdWUgLSB0byBlbmFibGUgdGhpcyBhbmltYXRpb24gc2V0IFwiKS5jb25jYXQob3JpZ2luLCBcIiB0byBhIHZhbHVlIGFuaW1hdGFibGUgdG8gXCIpLmNvbmNhdCh0YXJnZXQsIFwiIHZpYSB0aGUgYHN0eWxlYCBwcm9wZXJ0eS5cIikpO1xuICAgIGZ1bmN0aW9uIHN0YXJ0KCkge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGZyb206IG9yaWdpbixcbiAgICAgICAgICAgIHRvOiB0YXJnZXQsXG4gICAgICAgICAgICB2ZWxvY2l0eTogdmFsdWUuZ2V0VmVsb2NpdHkoKSxcbiAgICAgICAgICAgIG9uQ29tcGxldGU6IG9uQ29tcGxldGUsXG4gICAgICAgICAgICBvblVwZGF0ZTogZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHZhbHVlLnNldCh2KTsgfSxcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHZhbHVlVHJhbnNpdGlvbi50eXBlID09PSBcImluZXJ0aWFcIiB8fFxuICAgICAgICAgICAgdmFsdWVUcmFuc2l0aW9uLnR5cGUgPT09IFwiZGVjYXlcIlxuICAgICAgICAgICAgPyBpbmVydGlhKF9fYXNzaWduKF9fYXNzaWduKHt9LCBvcHRpb25zKSwgdmFsdWVUcmFuc2l0aW9uKSlcbiAgICAgICAgICAgIDogYW5pbWF0ZShfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZ2V0UG9wbW90aW9uQW5pbWF0aW9uT3B0aW9ucyh2YWx1ZVRyYW5zaXRpb24sIG9wdGlvbnMsIGtleSkpLCB7IG9uVXBkYXRlOiBmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25VcGRhdGUodik7XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IHZhbHVlVHJhbnNpdGlvbi5vblVwZGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwodmFsdWVUcmFuc2l0aW9uLCB2KTtcbiAgICAgICAgICAgICAgICB9LCBvbkNvbXBsZXRlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vbkNvbXBsZXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIChfYSA9IHZhbHVlVHJhbnNpdGlvbi5vbkNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh2YWx1ZVRyYW5zaXRpb24pO1xuICAgICAgICAgICAgICAgIH0gfSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXQoKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHZhciBmaW5hbFRhcmdldCA9IHJlc29sdmVGaW5hbFZhbHVlSW5LZXlmcmFtZXModGFyZ2V0KTtcbiAgICAgICAgdmFsdWUuc2V0KGZpbmFsVGFyZ2V0KTtcbiAgICAgICAgb25Db21wbGV0ZSgpO1xuICAgICAgICAoX2EgPSB2YWx1ZVRyYW5zaXRpb24gPT09IG51bGwgfHwgdmFsdWVUcmFuc2l0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZVRyYW5zaXRpb24ub25VcGRhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHZhbHVlVHJhbnNpdGlvbiwgZmluYWxUYXJnZXQpO1xuICAgICAgICAoX2IgPSB2YWx1ZVRyYW5zaXRpb24gPT09IG51bGwgfHwgdmFsdWVUcmFuc2l0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZVRyYW5zaXRpb24ub25Db21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwodmFsdWVUcmFuc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIHsgc3RvcDogZnVuY3Rpb24gKCkgeyB9IH07XG4gICAgfVxuICAgIHJldHVybiAhaXNPcmlnaW5BbmltYXRhYmxlIHx8XG4gICAgICAgICFpc1RhcmdldEFuaW1hdGFibGUgfHxcbiAgICAgICAgdmFsdWVUcmFuc2l0aW9uLnR5cGUgPT09IGZhbHNlXG4gICAgICAgID8gc2V0XG4gICAgICAgIDogc3RhcnQ7XG59XG5mdW5jdGlvbiBpc1plcm8odmFsdWUpIHtcbiAgICByZXR1cm4gKHZhbHVlID09PSAwIHx8XG4gICAgICAgICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIHBhcnNlRmxvYXQodmFsdWUpID09PSAwICYmXG4gICAgICAgICAgICB2YWx1ZS5pbmRleE9mKFwiIFwiKSA9PT0gLTEpKTtcbn1cbmZ1bmN0aW9uIGdldFplcm9Vbml0KHBvdGVudGlhbFVuaXRUeXBlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBwb3RlbnRpYWxVbml0VHlwZSA9PT0gXCJudW1iZXJcIlxuICAgICAgICA/IDBcbiAgICAgICAgOiBnZXRBbmltYXRhYmxlTm9uZShcIlwiLCBwb3RlbnRpYWxVbml0VHlwZSk7XG59XG5mdW5jdGlvbiBnZXRWYWx1ZVRyYW5zaXRpb24odHJhbnNpdGlvbiwga2V5KSB7XG4gICAgcmV0dXJuIHRyYW5zaXRpb25ba2V5XSB8fCB0cmFuc2l0aW9uW1wiZGVmYXVsdFwiXSB8fCB0cmFuc2l0aW9uO1xufVxuLyoqXG4gKiBTdGFydCBhbmltYXRpb24gb24gYSBNb3Rpb25WYWx1ZS4gVGhpcyBmdW5jdGlvbiBpcyBhbiBpbnRlcmZhY2UgYmV0d2VlblxuICogRnJhbWVyIE1vdGlvbiBhbmQgUG9wbW90aW9uXG4gKi9cbmZ1bmN0aW9uIHN0YXJ0QW5pbWF0aW9uKGtleSwgdmFsdWUsIHRhcmdldCwgdHJhbnNpdGlvbikge1xuICAgIGlmICh0cmFuc2l0aW9uID09PSB2b2lkIDApIHsgdHJhbnNpdGlvbiA9IHt9OyB9XG4gICAgaWYgKGluc3RhbnRBbmltYXRpb25TdGF0ZS5jdXJyZW50KSB7XG4gICAgICAgIHRyYW5zaXRpb24gPSB7IHR5cGU6IGZhbHNlIH07XG4gICAgfVxuICAgIHJldHVybiB2YWx1ZS5zdGFydChmdW5jdGlvbiAob25Db21wbGV0ZSkge1xuICAgICAgICB2YXIgZGVsYXlUaW1lcjtcbiAgICAgICAgdmFyIGNvbnRyb2xzO1xuICAgICAgICB2YXIgYW5pbWF0aW9uID0gZ2V0QW5pbWF0aW9uKGtleSwgdmFsdWUsIHRhcmdldCwgdHJhbnNpdGlvbiwgb25Db21wbGV0ZSk7XG4gICAgICAgIHZhciBkZWxheSA9IGdldERlbGF5RnJvbVRyYW5zaXRpb24odHJhbnNpdGlvbiwga2V5KTtcbiAgICAgICAgdmFyIHN0YXJ0ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKGNvbnRyb2xzID0gYW5pbWF0aW9uKCkpOyB9O1xuICAgICAgICBpZiAoZGVsYXkpIHtcbiAgICAgICAgICAgIGRlbGF5VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dChzdGFydCwgc2Vjb25kc1RvTWlsbGlzZWNvbmRzKGRlbGF5KSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzdGFydCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjbGVhclRpbWVvdXQoZGVsYXlUaW1lcik7XG4gICAgICAgICAgICBjb250cm9scyA9PT0gbnVsbCB8fCBjb250cm9scyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29udHJvbHMuc3RvcCgpO1xuICAgICAgICB9O1xuICAgIH0pO1xufVxuXG5leHBvcnQgeyBjb252ZXJ0VHJhbnNpdGlvblRvQW5pbWF0aW9uT3B0aW9ucywgZ2V0RGVsYXlGcm9tVHJhbnNpdGlvbiwgZ2V0UG9wbW90aW9uQW5pbWF0aW9uT3B0aW9ucywgZ2V0VmFsdWVUcmFuc2l0aW9uLCBnZXRaZXJvVW5pdCwgaHlkcmF0ZUtleWZyYW1lcywgaXNUcmFuc2l0aW9uRGVmaW5lZCwgaXNaZXJvLCBzdGFydEFuaW1hdGlvbiB9O1xuIiwiaW1wb3J0IHsgYW5pbWF0ZSB9IGZyb20gJy4vaW5kZXgubWpzJztcbmltcG9ydCB7IHZlbG9jaXR5UGVyU2Vjb25kIH0gZnJvbSAnLi4vdXRpbHMvdmVsb2NpdHktcGVyLXNlY29uZC5tanMnO1xuaW1wb3J0IHsgZ2V0RnJhbWVEYXRhIH0gZnJvbSAnZnJhbWVzeW5jJztcblxuZnVuY3Rpb24gaW5lcnRpYSh7IGZyb20gPSAwLCB2ZWxvY2l0eSA9IDAsIG1pbiwgbWF4LCBwb3dlciA9IDAuOCwgdGltZUNvbnN0YW50ID0gNzUwLCBib3VuY2VTdGlmZm5lc3MgPSA1MDAsIGJvdW5jZURhbXBpbmcgPSAxMCwgcmVzdERlbHRhID0gMSwgbW9kaWZ5VGFyZ2V0LCBkcml2ZXIsIG9uVXBkYXRlLCBvbkNvbXBsZXRlLCBvblN0b3AsIH0pIHtcbiAgICBsZXQgY3VycmVudEFuaW1hdGlvbjtcbiAgICBmdW5jdGlvbiBpc091dE9mQm91bmRzKHYpIHtcbiAgICAgICAgcmV0dXJuIChtaW4gIT09IHVuZGVmaW5lZCAmJiB2IDwgbWluKSB8fCAobWF4ICE9PSB1bmRlZmluZWQgJiYgdiA+IG1heCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJvdW5kYXJ5TmVhcmVzdCh2KSB7XG4gICAgICAgIGlmIChtaW4gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBtYXg7XG4gICAgICAgIGlmIChtYXggPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBtaW47XG4gICAgICAgIHJldHVybiBNYXRoLmFicyhtaW4gLSB2KSA8IE1hdGguYWJzKG1heCAtIHYpID8gbWluIDogbWF4O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdGFydEFuaW1hdGlvbihvcHRpb25zKSB7XG4gICAgICAgIGN1cnJlbnRBbmltYXRpb24gPT09IG51bGwgfHwgY3VycmVudEFuaW1hdGlvbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogY3VycmVudEFuaW1hdGlvbi5zdG9wKCk7XG4gICAgICAgIGN1cnJlbnRBbmltYXRpb24gPSBhbmltYXRlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucyksIHsgZHJpdmVyLCBvblVwZGF0ZTogKHYpID0+IHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgb25VcGRhdGUgPT09IG51bGwgfHwgb25VcGRhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uVXBkYXRlKHYpO1xuICAgICAgICAgICAgICAgIChfYSA9IG9wdGlvbnMub25VcGRhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKG9wdGlvbnMsIHYpO1xuICAgICAgICAgICAgfSwgb25Db21wbGV0ZSxcbiAgICAgICAgICAgIG9uU3RvcCB9KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0YXJ0U3ByaW5nKG9wdGlvbnMpIHtcbiAgICAgICAgc3RhcnRBbmltYXRpb24oT2JqZWN0LmFzc2lnbih7IHR5cGU6IFwic3ByaW5nXCIsIHN0aWZmbmVzczogYm91bmNlU3RpZmZuZXNzLCBkYW1waW5nOiBib3VuY2VEYW1waW5nLCByZXN0RGVsdGEgfSwgb3B0aW9ucykpO1xuICAgIH1cbiAgICBpZiAoaXNPdXRPZkJvdW5kcyhmcm9tKSkge1xuICAgICAgICBzdGFydFNwcmluZyh7IGZyb20sIHZlbG9jaXR5LCB0bzogYm91bmRhcnlOZWFyZXN0KGZyb20pIH0pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbGV0IHRhcmdldCA9IHBvd2VyICogdmVsb2NpdHkgKyBmcm9tO1xuICAgICAgICBpZiAodHlwZW9mIG1vZGlmeVRhcmdldCAhPT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHRhcmdldCA9IG1vZGlmeVRhcmdldCh0YXJnZXQpO1xuICAgICAgICBjb25zdCBib3VuZGFyeSA9IGJvdW5kYXJ5TmVhcmVzdCh0YXJnZXQpO1xuICAgICAgICBjb25zdCBoZWFkaW5nID0gYm91bmRhcnkgPT09IG1pbiA/IC0xIDogMTtcbiAgICAgICAgbGV0IHByZXY7XG4gICAgICAgIGxldCBjdXJyZW50O1xuICAgICAgICBjb25zdCBjaGVja0JvdW5kYXJ5ID0gKHYpID0+IHtcbiAgICAgICAgICAgIHByZXYgPSBjdXJyZW50O1xuICAgICAgICAgICAgY3VycmVudCA9IHY7XG4gICAgICAgICAgICB2ZWxvY2l0eSA9IHZlbG9jaXR5UGVyU2Vjb25kKHYgLSBwcmV2LCBnZXRGcmFtZURhdGEoKS5kZWx0YSk7XG4gICAgICAgICAgICBpZiAoKGhlYWRpbmcgPT09IDEgJiYgdiA+IGJvdW5kYXJ5KSB8fFxuICAgICAgICAgICAgICAgIChoZWFkaW5nID09PSAtMSAmJiB2IDwgYm91bmRhcnkpKSB7XG4gICAgICAgICAgICAgICAgc3RhcnRTcHJpbmcoeyBmcm9tOiB2LCB0bzogYm91bmRhcnksIHZlbG9jaXR5IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBzdGFydEFuaW1hdGlvbih7XG4gICAgICAgICAgICB0eXBlOiBcImRlY2F5XCIsXG4gICAgICAgICAgICBmcm9tLFxuICAgICAgICAgICAgdmVsb2NpdHksXG4gICAgICAgICAgICB0aW1lQ29uc3RhbnQsXG4gICAgICAgICAgICBwb3dlcixcbiAgICAgICAgICAgIHJlc3REZWx0YSxcbiAgICAgICAgICAgIG1vZGlmeVRhcmdldCxcbiAgICAgICAgICAgIG9uVXBkYXRlOiBpc091dE9mQm91bmRzKHRhcmdldCkgPyBjaGVja0JvdW5kYXJ5IDogdW5kZWZpbmVkLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RvcDogKCkgPT4gY3VycmVudEFuaW1hdGlvbiA9PT0gbnVsbCB8fCBjdXJyZW50QW5pbWF0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjdXJyZW50QW5pbWF0aW9uLnN0b3AoKSxcbiAgICB9O1xufVxuXG5leHBvcnQgeyBpbmVydGlhIH07XG4iLCIvKipcbiAqIENoZWNrIGlmIHZhbHVlIGlzIGEgbnVtZXJpY2FsIHN0cmluZywgaWUgYSBzdHJpbmcgdGhhdCBpcyBwdXJlbHkgYSBudW1iZXIgZWcgXCIxMDBcIiBvciBcIi0xMDAuMVwiXG4gKi9cbnZhciBpc051bWVyaWNhbFN0cmluZyA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiAvXlxcLT9cXGQqXFwuP1xcZCskLy50ZXN0KHYpOyB9O1xuXG5leHBvcnQgeyBpc051bWVyaWNhbFN0cmluZyB9O1xuIiwiLyoqXG4gKiBDaGVjayBpZiB0aGUgdmFsdWUgaXMgYSB6ZXJvIHZhbHVlIHN0cmluZyBsaWtlIFwiMHB4XCIgb3IgXCIwJVwiXG4gKi9cbnZhciBpc1plcm9WYWx1ZVN0cmluZyA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiAvXjBbXi5cXHNdKyQvLnRlc3Qodik7IH07XG5cbmV4cG9ydCB7IGlzWmVyb1ZhbHVlU3RyaW5nIH07XG4iLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tICd0c2xpYic7XG5cbmZ1bmN0aW9uIGFkZFVuaXF1ZUl0ZW0oYXJyLCBpdGVtKSB7XG4gICAgYXJyLmluZGV4T2YoaXRlbSkgPT09IC0xICYmIGFyci5wdXNoKGl0ZW0pO1xufVxuZnVuY3Rpb24gcmVtb3ZlSXRlbShhcnIsIGl0ZW0pIHtcbiAgICB2YXIgaW5kZXggPSBhcnIuaW5kZXhPZihpdGVtKTtcbiAgICBpbmRleCA+IC0xICYmIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xufVxuLy8gQWRhcHRlZCBmcm9tIGFycmF5LW1vdmVcbmZ1bmN0aW9uIG1vdmVJdGVtKF9hLCBmcm9tSW5kZXgsIHRvSW5kZXgpIHtcbiAgICB2YXIgX2IgPSBfX3JlYWQoX2EpLCBhcnIgPSBfYi5zbGljZSgwKTtcbiAgICB2YXIgc3RhcnRJbmRleCA9IGZyb21JbmRleCA8IDAgPyBhcnIubGVuZ3RoICsgZnJvbUluZGV4IDogZnJvbUluZGV4O1xuICAgIGlmIChzdGFydEluZGV4ID49IDAgJiYgc3RhcnRJbmRleCA8IGFyci5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGVuZEluZGV4ID0gdG9JbmRleCA8IDAgPyBhcnIubGVuZ3RoICsgdG9JbmRleCA6IHRvSW5kZXg7XG4gICAgICAgIHZhciBfYyA9IF9fcmVhZChhcnIuc3BsaWNlKGZyb21JbmRleCwgMSksIDEpLCBpdGVtID0gX2NbMF07XG4gICAgICAgIGFyci5zcGxpY2UoZW5kSW5kZXgsIDAsIGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gYXJyO1xufVxuXG5leHBvcnQgeyBhZGRVbmlxdWVJdGVtLCBtb3ZlSXRlbSwgcmVtb3ZlSXRlbSB9O1xuIiwiaW1wb3J0IHsgYWRkVW5pcXVlSXRlbSwgcmVtb3ZlSXRlbSB9IGZyb20gJy4vYXJyYXkubWpzJztcblxudmFyIFN1YnNjcmlwdGlvbk1hbmFnZXIgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gU3Vic2NyaXB0aW9uTWFuYWdlcigpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zID0gW107XG4gICAgfVxuICAgIFN1YnNjcmlwdGlvbk1hbmFnZXIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGFkZFVuaXF1ZUl0ZW0odGhpcy5zdWJzY3JpcHRpb25zLCBoYW5kbGVyKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHJlbW92ZUl0ZW0oX3RoaXMuc3Vic2NyaXB0aW9ucywgaGFuZGxlcik7IH07XG4gICAgfTtcbiAgICBTdWJzY3JpcHRpb25NYW5hZ2VyLnByb3RvdHlwZS5ub3RpZnkgPSBmdW5jdGlvbiAoYSwgYiwgYykge1xuICAgICAgICB2YXIgbnVtU3Vic2NyaXB0aW9ucyA9IHRoaXMuc3Vic2NyaXB0aW9ucy5sZW5ndGg7XG4gICAgICAgIGlmICghbnVtU3Vic2NyaXB0aW9ucylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKG51bVN1YnNjcmlwdGlvbnMgPT09IDEpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgdGhlcmUncyBvbmx5IGEgc2luZ2xlIGhhbmRsZXIgd2UgY2FuIGp1c3QgY2FsbCBpdCB3aXRob3V0IGludm9raW5nIGEgbG9vcC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zWzBdKGEsIGIsIGMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1TdWJzY3JpcHRpb25zOyBpKyspIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBDaGVjayB3aGV0aGVyIHRoZSBoYW5kbGVyIGV4aXN0cyBiZWZvcmUgZmlyaW5nIGFzIGl0J3MgcG9zc2libGVcbiAgICAgICAgICAgICAgICAgKiB0aGUgc3Vic2NyaXB0aW9ucyB3ZXJlIG1vZGlmaWVkIGR1cmluZyB0aGlzIGxvb3AgcnVubmluZy5cbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICB2YXIgaGFuZGxlciA9IHRoaXMuc3Vic2NyaXB0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyICYmIGhhbmRsZXIoYSwgYiwgYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIFN1YnNjcmlwdGlvbk1hbmFnZXIucHJvdG90eXBlLmdldFNpemUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN1YnNjcmlwdGlvbnMubGVuZ3RoO1xuICAgIH07XG4gICAgU3Vic2NyaXB0aW9uTWFuYWdlci5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5sZW5ndGggPSAwO1xuICAgIH07XG4gICAgcmV0dXJuIFN1YnNjcmlwdGlvbk1hbmFnZXI7XG59KCkpO1xuXG5leHBvcnQgeyBTdWJzY3JpcHRpb25NYW5hZ2VyIH07XG4iLCJpbXBvcnQgc3luYywgeyBnZXRGcmFtZURhdGEgfSBmcm9tICdmcmFtZXN5bmMnO1xuaW1wb3J0IHsgdmVsb2NpdHlQZXJTZWNvbmQgfSBmcm9tICdwb3Btb3Rpb24nO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uTWFuYWdlciB9IGZyb20gJy4uL3V0aWxzL3N1YnNjcmlwdGlvbi1tYW5hZ2VyLm1qcyc7XG5cbnZhciBpc0Zsb2F0ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuICFpc05hTihwYXJzZUZsb2F0KHZhbHVlKSk7XG59O1xuLyoqXG4gKiBgTW90aW9uVmFsdWVgIGlzIHVzZWQgdG8gdHJhY2sgdGhlIHN0YXRlIGFuZCB2ZWxvY2l0eSBvZiBtb3Rpb24gdmFsdWVzLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xudmFyIE1vdGlvblZhbHVlID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBpbml0IC0gVGhlIGluaXRpYXRpbmcgdmFsdWVcbiAgICAgKiBAcGFyYW0gY29uZmlnIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAgICpcbiAgICAgKiAtICBgdHJhbnNmb3JtZXJgOiBBIGZ1bmN0aW9uIHRvIHRyYW5zZm9ybSBpbmNvbWluZyB2YWx1ZXMgd2l0aC5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGZ1bmN0aW9uIE1vdGlvblZhbHVlKGluaXQpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgd2lsbCBiZSByZXBsYWNlZCBieSB0aGUgYnVpbGQgc3RlcCB3aXRoIHRoZSBsYXRlc3QgdmVyc2lvbiBudW1iZXIuXG4gICAgICAgICAqIFdoZW4gTW90aW9uVmFsdWVzIGFyZSBwcm92aWRlZCB0byBtb3Rpb24gY29tcG9uZW50cywgd2FybiBpZiB2ZXJzaW9ucyBhcmUgbWl4ZWQuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZlcnNpb24gPSBcIjYuNS4xXCI7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEdXJhdGlvbiwgaW4gbWlsbGlzZWNvbmRzLCBzaW5jZSBsYXN0IHVwZGF0aW5nIGZyYW1lLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudGltZURlbHRhID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRpbWVzdGFtcCBvZiB0aGUgbGFzdCB0aW1lIHRoaXMgYE1vdGlvblZhbHVlYCB3YXMgdXBkYXRlZC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmxhc3RVcGRhdGVkID0gMDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZ1bmN0aW9ucyB0byBub3RpZnkgd2hlbiB0aGUgYE1vdGlvblZhbHVlYCB1cGRhdGVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudXBkYXRlU3Vic2NyaWJlcnMgPSBuZXcgU3Vic2NyaXB0aW9uTWFuYWdlcigpO1xuICAgICAgICAvKipcbiAgICAgICAgICogRnVuY3Rpb25zIHRvIG5vdGlmeSB3aGVuIHRoZSB2ZWxvY2l0eSB1cGRhdGVzLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudmVsb2NpdHlVcGRhdGVTdWJzY3JpYmVycyA9IG5ldyBTdWJzY3JpcHRpb25NYW5hZ2VyKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBGdW5jdGlvbnMgdG8gbm90aWZ5IHdoZW4gdGhlIGBNb3Rpb25WYWx1ZWAgdXBkYXRlcyBhbmQgYHJlbmRlcmAgaXMgc2V0IHRvIGB0cnVlYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnJlbmRlclN1YnNjcmliZXJzID0gbmV3IFN1YnNjcmlwdGlvbk1hbmFnZXIoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRyYWNrcyB3aGV0aGVyIHRoaXMgdmFsdWUgY2FuIG91dHB1dCBhIHZlbG9jaXR5LiBDdXJyZW50bHkgdGhpcyBpcyBvbmx5IHRydWVcbiAgICAgICAgICogaWYgdGhlIHZhbHVlIGlzIG51bWVyaWNhbCwgYnV0IHdlIG1pZ2h0IGJlIGFibGUgdG8gd2lkZW4gdGhlIHNjb3BlIGhlcmUgYW5kIHN1cHBvcnRcbiAgICAgICAgICogb3RoZXIgdmFsdWUgdHlwZXMuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5jYW5UcmFja1ZlbG9jaXR5ID0gZmFsc2U7XG4gICAgICAgIHRoaXMudXBkYXRlQW5kTm90aWZ5ID0gZnVuY3Rpb24gKHYsIHJlbmRlcikge1xuICAgICAgICAgICAgaWYgKHJlbmRlciA9PT0gdm9pZCAwKSB7IHJlbmRlciA9IHRydWU7IH1cbiAgICAgICAgICAgIF90aGlzLnByZXYgPSBfdGhpcy5jdXJyZW50O1xuICAgICAgICAgICAgX3RoaXMuY3VycmVudCA9IHY7XG4gICAgICAgICAgICAvLyBVcGRhdGUgdGltZXN0YW1wXG4gICAgICAgICAgICB2YXIgX2EgPSBnZXRGcmFtZURhdGEoKSwgZGVsdGEgPSBfYS5kZWx0YSwgdGltZXN0YW1wID0gX2EudGltZXN0YW1wO1xuICAgICAgICAgICAgaWYgKF90aGlzLmxhc3RVcGRhdGVkICE9PSB0aW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICBfdGhpcy50aW1lRGVsdGEgPSBkZWx0YTtcbiAgICAgICAgICAgICAgICBfdGhpcy5sYXN0VXBkYXRlZCA9IHRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgICBzeW5jLnBvc3RSZW5kZXIoX3RoaXMuc2NoZWR1bGVWZWxvY2l0eUNoZWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFVwZGF0ZSB1cGRhdGUgc3Vic2NyaWJlcnNcbiAgICAgICAgICAgIGlmIChfdGhpcy5wcmV2ICE9PSBfdGhpcy5jdXJyZW50KSB7XG4gICAgICAgICAgICAgICAgX3RoaXMudXBkYXRlU3Vic2NyaWJlcnMubm90aWZ5KF90aGlzLmN1cnJlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVXBkYXRlIHZlbG9jaXR5IHN1YnNjcmliZXJzXG4gICAgICAgICAgICBpZiAoX3RoaXMudmVsb2NpdHlVcGRhdGVTdWJzY3JpYmVycy5nZXRTaXplKCkpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy52ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzLm5vdGlmeShfdGhpcy5nZXRWZWxvY2l0eSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFVwZGF0ZSByZW5kZXIgc3Vic2NyaWJlcnNcbiAgICAgICAgICAgIGlmIChyZW5kZXIpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5yZW5kZXJTdWJzY3JpYmVycy5ub3RpZnkoX3RoaXMuY3VycmVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTY2hlZHVsZSBhIHZlbG9jaXR5IGNoZWNrIGZvciB0aGUgbmV4dCBmcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhpcyBpcyBhbiBpbnN0YW5jZWQgYW5kIGJvdW5kIGZ1bmN0aW9uIHRvIHByZXZlbnQgZ2VuZXJhdGluZyBhIG5ld1xuICAgICAgICAgKiBmdW5jdGlvbiBvbmNlIHBlciBmcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnNjaGVkdWxlVmVsb2NpdHlDaGVjayA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN5bmMucG9zdFJlbmRlcihfdGhpcy52ZWxvY2l0eUNoZWNrKTsgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVwZGF0ZXMgYHByZXZgIHdpdGggYGN1cnJlbnRgIGlmIHRoZSB2YWx1ZSBoYXNuJ3QgYmVlbiB1cGRhdGVkIHRoaXMgZnJhbWUuXG4gICAgICAgICAqIFRoaXMgZW5zdXJlcyB2ZWxvY2l0eSBjYWxjdWxhdGlvbnMgcmV0dXJuIGAwYC5cbiAgICAgICAgICpcbiAgICAgICAgICogVGhpcyBpcyBhbiBpbnN0YW5jZWQgYW5kIGJvdW5kIGZ1bmN0aW9uIHRvIHByZXZlbnQgZ2VuZXJhdGluZyBhIG5ld1xuICAgICAgICAgKiBmdW5jdGlvbiBvbmNlIHBlciBmcmFtZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGludGVybmFsXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnZlbG9jaXR5Q2hlY2sgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciB0aW1lc3RhbXAgPSBfYS50aW1lc3RhbXA7XG4gICAgICAgICAgICBpZiAodGltZXN0YW1wICE9PSBfdGhpcy5sYXN0VXBkYXRlZCkge1xuICAgICAgICAgICAgICAgIF90aGlzLnByZXYgPSBfdGhpcy5jdXJyZW50O1xuICAgICAgICAgICAgICAgIF90aGlzLnZlbG9jaXR5VXBkYXRlU3Vic2NyaWJlcnMubm90aWZ5KF90aGlzLmdldFZlbG9jaXR5KCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmhhc0FuaW1hdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMucHJldiA9IHRoaXMuY3VycmVudCA9IGluaXQ7XG4gICAgICAgIHRoaXMuY2FuVHJhY2tWZWxvY2l0eSA9IGlzRmxvYXQodGhpcy5jdXJyZW50KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBub3RpZmllZCB3aGVuIHRoZSBgTW90aW9uVmFsdWVgIGlzIHVwZGF0ZWQuXG4gICAgICpcbiAgICAgKiBJdCByZXR1cm5zIGEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsIHdpbGwgY2FuY2VsIHRoZSBzdWJzY3JpcHRpb24uXG4gICAgICpcbiAgICAgKiBXaGVuIGNhbGxpbmcgYG9uQ2hhbmdlYCBpbnNpZGUgYSBSZWFjdCBjb21wb25lbnQsIGl0IHNob3VsZCBiZSB3cmFwcGVkIHdpdGggdGhlXG4gICAgICogYHVzZUVmZmVjdGAgaG9vay4gQXMgaXQgcmV0dXJucyBhbiB1bnN1YnNjcmliZSBmdW5jdGlvbiwgdGhpcyBzaG91bGQgYmUgcmV0dXJuZWRcbiAgICAgKiBmcm9tIHRoZSBgdXNlRWZmZWN0YCBmdW5jdGlvbiB0byBlbnN1cmUgeW91IGRvbid0IGFkZCBkdXBsaWNhdGUgc3Vic2NyaWJlcnMuLlxuICAgICAqXG4gICAgICogYGBganN4XG4gICAgICogZXhwb3J0IGNvbnN0IE15Q29tcG9uZW50ID0gKCkgPT4ge1xuICAgICAqICAgY29uc3QgeCA9IHVzZU1vdGlvblZhbHVlKDApXG4gICAgICogICBjb25zdCB5ID0gdXNlTW90aW9uVmFsdWUoMClcbiAgICAgKiAgIGNvbnN0IG9wYWNpdHkgPSB1c2VNb3Rpb25WYWx1ZSgxKVxuICAgICAqXG4gICAgICogICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAqICAgICBmdW5jdGlvbiB1cGRhdGVPcGFjaXR5KCkge1xuICAgICAqICAgICAgIGNvbnN0IG1heFhZID0gTWF0aC5tYXgoeC5nZXQoKSwgeS5nZXQoKSlcbiAgICAgKiAgICAgICBjb25zdCBuZXdPcGFjaXR5ID0gdHJhbnNmb3JtKG1heFhZLCBbMCwgMTAwXSwgWzEsIDBdKVxuICAgICAqICAgICAgIG9wYWNpdHkuc2V0KG5ld09wYWNpdHkpXG4gICAgICogICAgIH1cbiAgICAgKlxuICAgICAqICAgICBjb25zdCB1bnN1YnNjcmliZVggPSB4Lm9uQ2hhbmdlKHVwZGF0ZU9wYWNpdHkpXG4gICAgICogICAgIGNvbnN0IHVuc3Vic2NyaWJlWSA9IHkub25DaGFuZ2UodXBkYXRlT3BhY2l0eSlcbiAgICAgKlxuICAgICAqICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAqICAgICAgIHVuc3Vic2NyaWJlWCgpXG4gICAgICogICAgICAgdW5zdWJzY3JpYmVZKClcbiAgICAgKiAgICAgfVxuICAgICAqICAgfSwgW10pXG4gICAgICpcbiAgICAgKiAgIHJldHVybiA8bW90aW9uLmRpdiBzdHlsZT17eyB4IH19IC8+XG4gICAgICogfVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHByaXZhdGVSZW1hcmtzXG4gICAgICpcbiAgICAgKiBXZSBjb3VsZCBsb29rIGludG8gYSBgdXNlT25DaGFuZ2VgIGhvb2sgaWYgdGhlIGFib3ZlIGxpZmVjeWNsZSBtYW5hZ2VtZW50IHByb3ZlcyBjb25mdXNpbmcuXG4gICAgICpcbiAgICAgKiBgYGBqc3hcbiAgICAgKiB1c2VPbkNoYW5nZSh4LCAoKSA9PiB7fSlcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdWJzY3JpYmVyIC0gQSBmdW5jdGlvbiB0aGF0IHJlY2VpdmVzIHRoZSBsYXRlc3QgdmFsdWUuXG4gICAgICogQHJldHVybnMgQSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCwgd2lsbCBjYW5jZWwgdGhpcyBzdWJzY3JpcHRpb24uXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgTW90aW9uVmFsdWUucHJvdG90eXBlLm9uQ2hhbmdlID0gZnVuY3Rpb24gKHN1YnNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy51cGRhdGVTdWJzY3JpYmVycy5hZGQoc3Vic2NyaXB0aW9uKTtcbiAgICB9O1xuICAgIE1vdGlvblZhbHVlLnByb3RvdHlwZS5jbGVhckxpc3RlbmVycyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTdWJzY3JpYmVycy5jbGVhcigpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQWRkcyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBub3RpZmllZCB3aGVuIHRoZSBgTW90aW9uVmFsdWVgIHJlcXVlc3RzIGEgcmVuZGVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN1YnNjcmliZXIgLSBBIGZ1bmN0aW9uIHRoYXQncyBwcm92aWRlZCB0aGUgbGF0ZXN0IHZhbHVlLlxuICAgICAqIEByZXR1cm5zIEEgZnVuY3Rpb24gdGhhdCwgd2hlbiBjYWxsZWQsIHdpbGwgY2FuY2VsIHRoaXMgc3Vic2NyaXB0aW9uLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgTW90aW9uVmFsdWUucHJvdG90eXBlLm9uUmVuZGVyUmVxdWVzdCA9IGZ1bmN0aW9uIChzdWJzY3JpcHRpb24pIHtcbiAgICAgICAgLy8gUmVuZGVyIGltbWVkaWF0ZWx5XG4gICAgICAgIHN1YnNjcmlwdGlvbih0aGlzLmdldCgpKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyU3Vic2NyaWJlcnMuYWRkKHN1YnNjcmlwdGlvbik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBBdHRhY2hlcyBhIHBhc3NpdmUgZWZmZWN0IHRvIHRoZSBgTW90aW9uVmFsdWVgLlxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgTW90aW9uVmFsdWUucHJvdG90eXBlLmF0dGFjaCA9IGZ1bmN0aW9uIChwYXNzaXZlRWZmZWN0KSB7XG4gICAgICAgIHRoaXMucGFzc2l2ZUVmZmVjdCA9IHBhc3NpdmVFZmZlY3Q7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSBzdGF0ZSBvZiB0aGUgYE1vdGlvblZhbHVlYC5cbiAgICAgKlxuICAgICAqIEByZW1hcmtzXG4gICAgICpcbiAgICAgKiBgYGBqc3hcbiAgICAgKiBjb25zdCB4ID0gdXNlTW90aW9uVmFsdWUoMClcbiAgICAgKiB4LnNldCgxMClcbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBwYXJhbSBsYXRlc3QgLSBMYXRlc3QgdmFsdWUgdG8gc2V0LlxuICAgICAqIEBwYXJhbSByZW5kZXIgLSBXaGV0aGVyIHRvIG5vdGlmeSByZW5kZXIgc3Vic2NyaWJlcnMuIERlZmF1bHRzIHRvIGB0cnVlYFxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIE1vdGlvblZhbHVlLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbiAodiwgcmVuZGVyKSB7XG4gICAgICAgIGlmIChyZW5kZXIgPT09IHZvaWQgMCkgeyByZW5kZXIgPSB0cnVlOyB9XG4gICAgICAgIGlmICghcmVuZGVyIHx8ICF0aGlzLnBhc3NpdmVFZmZlY3QpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlQW5kTm90aWZ5KHYsIHJlbmRlcik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnBhc3NpdmVFZmZlY3QodiwgdGhpcy51cGRhdGVBbmROb3RpZnkpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBsYXRlc3Qgc3RhdGUgb2YgYE1vdGlvblZhbHVlYFxuICAgICAqXG4gICAgICogQHJldHVybnMgLSBUaGUgbGF0ZXN0IHN0YXRlIG9mIGBNb3Rpb25WYWx1ZWBcbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBNb3Rpb25WYWx1ZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50O1xuICAgIH07XG4gICAgLyoqXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIE1vdGlvblZhbHVlLnByb3RvdHlwZS5nZXRQcmV2aW91cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJldjtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGxhdGVzdCB2ZWxvY2l0eSBvZiBgTW90aW9uVmFsdWVgXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyAtIFRoZSBsYXRlc3QgdmVsb2NpdHkgb2YgYE1vdGlvblZhbHVlYC4gUmV0dXJucyBgMGAgaWYgdGhlIHN0YXRlIGlzIG5vbi1udW1lcmljYWwuXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgTW90aW9uVmFsdWUucHJvdG90eXBlLmdldFZlbG9jaXR5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBUaGlzIGNvdWxkIGJlIGlzRmxvYXQodGhpcy5wcmV2KSAmJiBpc0Zsb2F0KHRoaXMuY3VycmVudCksIGJ1dCB0aGF0IHdvdWxkIGJlIHdhc3RlZnVsXG4gICAgICAgIHJldHVybiB0aGlzLmNhblRyYWNrVmVsb2NpdHlcbiAgICAgICAgICAgID8gLy8gVGhlc2UgY2FzdHMgY291bGQgYmUgYXZvaWRlZCBpZiBwYXJzZUZsb2F0IHdvdWxkIGJlIHR5cGVkIGJldHRlclxuICAgICAgICAgICAgICAgIHZlbG9jaXR5UGVyU2Vjb25kKHBhcnNlRmxvYXQodGhpcy5jdXJyZW50KSAtXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlRmxvYXQodGhpcy5wcmV2KSwgdGhpcy50aW1lRGVsdGEpXG4gICAgICAgICAgICA6IDA7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZWdpc3RlcnMgYSBuZXcgYW5pbWF0aW9uIHRvIGNvbnRyb2wgdGhpcyBgTW90aW9uVmFsdWVgLiBPbmx5IG9uZVxuICAgICAqIGFuaW1hdGlvbiBjYW4gZHJpdmUgYSBgTW90aW9uVmFsdWVgIGF0IG9uZSB0aW1lLlxuICAgICAqXG4gICAgICogYGBganN4XG4gICAgICogdmFsdWUuc3RhcnQoKVxuICAgICAqIGBgYFxuICAgICAqXG4gICAgICogQHBhcmFtIGFuaW1hdGlvbiAtIEEgZnVuY3Rpb24gdGhhdCBzdGFydHMgdGhlIHByb3ZpZGVkIGFuaW1hdGlvblxuICAgICAqXG4gICAgICogQGludGVybmFsXG4gICAgICovXG4gICAgTW90aW9uVmFsdWUucHJvdG90eXBlLnN0YXJ0ID0gZnVuY3Rpb24gKGFuaW1hdGlvbikge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICBfdGhpcy5oYXNBbmltYXRlZCA9IHRydWU7XG4gICAgICAgICAgICBfdGhpcy5zdG9wQW5pbWF0aW9uID0gYW5pbWF0aW9uKHJlc29sdmUpO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLmNsZWFyQW5pbWF0aW9uKCk7IH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU3RvcCB0aGUgY3VycmVudGx5IGFjdGl2ZSBhbmltYXRpb24uXG4gICAgICpcbiAgICAgKiBAcHVibGljXG4gICAgICovXG4gICAgTW90aW9uVmFsdWUucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0b3BBbmltYXRpb24pXG4gICAgICAgICAgICB0aGlzLnN0b3BBbmltYXRpb24oKTtcbiAgICAgICAgdGhpcy5jbGVhckFuaW1hdGlvbigpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhpcyB2YWx1ZSBpcyBjdXJyZW50bHkgYW5pbWF0aW5nLlxuICAgICAqXG4gICAgICogQHB1YmxpY1xuICAgICAqL1xuICAgIE1vdGlvblZhbHVlLnByb3RvdHlwZS5pc0FuaW1hdGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5zdG9wQW5pbWF0aW9uO1xuICAgIH07XG4gICAgTW90aW9uVmFsdWUucHJvdG90eXBlLmNsZWFyQW5pbWF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnN0b3BBbmltYXRpb24gPSBudWxsO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogRGVzdHJveSBhbmQgY2xlYW4gdXAgc3Vic2NyaWJlcnMgdG8gdGhpcyBgTW90aW9uVmFsdWVgLlxuICAgICAqXG4gICAgICogVGhlIGBNb3Rpb25WYWx1ZWAgaG9va3MgbGlrZSBgdXNlTW90aW9uVmFsdWVgIGFuZCBgdXNlVHJhbnNmb3JtYCBhdXRvbWF0aWNhbGx5XG4gICAgICogaGFuZGxlIHRoZSBsaWZlY3ljbGUgb2YgdGhlIHJldHVybmVkIGBNb3Rpb25WYWx1ZWAsIHNvIHRoaXMgbWV0aG9kIGlzIG9ubHkgbmVjZXNzYXJ5IGlmIHlvdSd2ZSBtYW51YWxseVxuICAgICAqIGNyZWF0ZWQgYSBgTW90aW9uVmFsdWVgIHZpYSB0aGUgYG1vdGlvblZhbHVlYCBmdW5jdGlvbi5cbiAgICAgKlxuICAgICAqIEBwdWJsaWNcbiAgICAgKi9cbiAgICBNb3Rpb25WYWx1ZS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdGhpcy51cGRhdGVTdWJzY3JpYmVycy5jbGVhcigpO1xuICAgICAgICB0aGlzLnJlbmRlclN1YnNjcmliZXJzLmNsZWFyKCk7XG4gICAgICAgIHRoaXMuc3RvcCgpO1xuICAgIH07XG4gICAgcmV0dXJuIE1vdGlvblZhbHVlO1xufSgpKTtcbmZ1bmN0aW9uIG1vdGlvblZhbHVlKGluaXQpIHtcbiAgICByZXR1cm4gbmV3IE1vdGlvblZhbHVlKGluaXQpO1xufVxuXG5leHBvcnQgeyBNb3Rpb25WYWx1ZSwgbW90aW9uVmFsdWUgfTtcbiIsIi8qKlxuICogVGVzdHMgYSBwcm92aWRlZCB2YWx1ZSBhZ2FpbnN0IGEgVmFsdWVUeXBlXG4gKi9cbnZhciB0ZXN0VmFsdWVUeXBlID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIGZ1bmN0aW9uICh0eXBlKSB7IHJldHVybiB0eXBlLnRlc3Qodik7IH07IH07XG5cbmV4cG9ydCB7IHRlc3RWYWx1ZVR5cGUgfTtcbiIsImltcG9ydCB7IG51bWJlciwgcHgsIHBlcmNlbnQsIGRlZ3JlZXMsIHZ3LCB2aCB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcbmltcG9ydCB7IHRlc3RWYWx1ZVR5cGUgfSBmcm9tICcuL3Rlc3QubWpzJztcbmltcG9ydCB7IGF1dG8gfSBmcm9tICcuL3R5cGUtYXV0by5tanMnO1xuXG4vKipcbiAqIEEgbGlzdCBvZiB2YWx1ZSB0eXBlcyBjb21tb25seSB1c2VkIGZvciBkaW1lbnNpb25zXG4gKi9cbnZhciBkaW1lbnNpb25WYWx1ZVR5cGVzID0gW251bWJlciwgcHgsIHBlcmNlbnQsIGRlZ3JlZXMsIHZ3LCB2aCwgYXV0b107XG4vKipcbiAqIFRlc3RzIGEgZGltZW5zaW9uYWwgdmFsdWUgYWdhaW5zdCB0aGUgbGlzdCBvZiBkaW1lbnNpb24gVmFsdWVUeXBlc1xuICovXG52YXIgZmluZERpbWVuc2lvblZhbHVlVHlwZSA9IGZ1bmN0aW9uICh2KSB7XG4gICAgcmV0dXJuIGRpbWVuc2lvblZhbHVlVHlwZXMuZmluZCh0ZXN0VmFsdWVUeXBlKHYpKTtcbn07XG5cbmV4cG9ydCB7IGRpbWVuc2lvblZhbHVlVHlwZXMsIGZpbmREaW1lbnNpb25WYWx1ZVR5cGUgfTtcbiIsIi8qKlxuICogVmFsdWVUeXBlIGZvciBcImF1dG9cIlxuICovXG52YXIgYXV0byA9IHtcbiAgICB0ZXN0OiBmdW5jdGlvbiAodikgeyByZXR1cm4gdiA9PT0gXCJhdXRvXCI7IH0sXG4gICAgcGFyc2U6IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2OyB9LFxufTtcblxuZXhwb3J0IHsgYXV0byB9O1xuIiwiaW1wb3J0IHsgX19zcHJlYWRBcnJheSwgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgY29sb3IsIGNvbXBsZXggfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5pbXBvcnQgeyBkaW1lbnNpb25WYWx1ZVR5cGVzIH0gZnJvbSAnLi9kaW1lbnNpb25zLm1qcyc7XG5pbXBvcnQgeyB0ZXN0VmFsdWVUeXBlIH0gZnJvbSAnLi90ZXN0Lm1qcyc7XG5cbi8qKlxuICogQSBsaXN0IG9mIGFsbCBWYWx1ZVR5cGVzXG4gKi9cbnZhciB2YWx1ZVR5cGVzID0gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoZGltZW5zaW9uVmFsdWVUeXBlcyksIGZhbHNlKSwgW2NvbG9yLCBjb21wbGV4XSwgZmFsc2UpO1xuLyoqXG4gKiBUZXN0cyBhIHZhbHVlIGFnYWluc3QgdGhlIGxpc3Qgb2YgVmFsdWVUeXBlc1xuICovXG52YXIgZmluZFZhbHVlVHlwZSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiB2YWx1ZVR5cGVzLmZpbmQodGVzdFZhbHVlVHlwZSh2KSk7IH07XG5cbmV4cG9ydCB7IGZpbmRWYWx1ZVR5cGUgfTtcbiIsImltcG9ydCB7IF9fcmVzdCwgX19hc3NpZ24sIF9fc3ByZWFkQXJyYXksIF9fcmVhZCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGNvbXBsZXggfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5pbXBvcnQgeyBpc051bWVyaWNhbFN0cmluZyB9IGZyb20gJy4uLy4uL3V0aWxzL2lzLW51bWVyaWNhbC1zdHJpbmcubWpzJztcbmltcG9ydCB7IGlzWmVyb1ZhbHVlU3RyaW5nIH0gZnJvbSAnLi4vLi4vdXRpbHMvaXMtemVyby12YWx1ZS1zdHJpbmcubWpzJztcbmltcG9ydCB7IHJlc29sdmVGaW5hbFZhbHVlSW5LZXlmcmFtZXMgfSBmcm9tICcuLi8uLi91dGlscy9yZXNvbHZlLXZhbHVlLm1qcyc7XG5pbXBvcnQgeyBtb3Rpb25WYWx1ZSB9IGZyb20gJy4uLy4uL3ZhbHVlL2luZGV4Lm1qcyc7XG5pbXBvcnQgeyBnZXRBbmltYXRhYmxlTm9uZSB9IGZyb20gJy4uL2RvbS92YWx1ZS10eXBlcy9hbmltYXRhYmxlLW5vbmUubWpzJztcbmltcG9ydCB7IGZpbmRWYWx1ZVR5cGUgfSBmcm9tICcuLi9kb20vdmFsdWUtdHlwZXMvZmluZC5tanMnO1xuaW1wb3J0IHsgcmVzb2x2ZVZhcmlhbnQgfSBmcm9tICcuL3ZhcmlhbnRzLm1qcyc7XG5cbi8qKlxuICogU2V0IFZpc3VhbEVsZW1lbnQncyBNb3Rpb25WYWx1ZSwgY3JlYXRpbmcgYSBuZXcgTW90aW9uVmFsdWUgZm9yIGl0IGlmXG4gKiBpdCBkb2Vzbid0IGV4aXN0LlxuICovXG5mdW5jdGlvbiBzZXRNb3Rpb25WYWx1ZSh2aXN1YWxFbGVtZW50LCBrZXksIHZhbHVlKSB7XG4gICAgaWYgKHZpc3VhbEVsZW1lbnQuaGFzVmFsdWUoa2V5KSkge1xuICAgICAgICB2aXN1YWxFbGVtZW50LmdldFZhbHVlKGtleSkuc2V0KHZhbHVlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZpc3VhbEVsZW1lbnQuYWRkVmFsdWUoa2V5LCBtb3Rpb25WYWx1ZSh2YWx1ZSkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHNldFRhcmdldCh2aXN1YWxFbGVtZW50LCBkZWZpbml0aW9uKSB7XG4gICAgdmFyIHJlc29sdmVkID0gcmVzb2x2ZVZhcmlhbnQodmlzdWFsRWxlbWVudCwgZGVmaW5pdGlvbik7XG4gICAgdmFyIF9hID0gcmVzb2x2ZWQgPyB2aXN1YWxFbGVtZW50Lm1ha2VUYXJnZXRBbmltYXRhYmxlKHJlc29sdmVkLCBmYWxzZSkgOiB7fSwgX2IgPSBfYS50cmFuc2l0aW9uRW5kLCB0cmFuc2l0aW9uRW5kID0gX2IgPT09IHZvaWQgMCA/IHt9IDogX2I7IF9hLnRyYW5zaXRpb247IHZhciB0YXJnZXQgPSBfX3Jlc3QoX2EsIFtcInRyYW5zaXRpb25FbmRcIiwgXCJ0cmFuc2l0aW9uXCJdKTtcbiAgICB0YXJnZXQgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgdGFyZ2V0KSwgdHJhbnNpdGlvbkVuZCk7XG4gICAgZm9yICh2YXIga2V5IGluIHRhcmdldCkge1xuICAgICAgICB2YXIgdmFsdWUgPSByZXNvbHZlRmluYWxWYWx1ZUluS2V5ZnJhbWVzKHRhcmdldFtrZXldKTtcbiAgICAgICAgc2V0TW90aW9uVmFsdWUodmlzdWFsRWxlbWVudCwga2V5LCB2YWx1ZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gc2V0VmFyaWFudHModmlzdWFsRWxlbWVudCwgdmFyaWFudExhYmVscykge1xuICAgIHZhciByZXZlcnNlZExhYmVscyA9IF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZCh2YXJpYW50TGFiZWxzKSwgZmFsc2UpLnJldmVyc2UoKTtcbiAgICByZXZlcnNlZExhYmVscy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgdmFyaWFudCA9IHZpc3VhbEVsZW1lbnQuZ2V0VmFyaWFudChrZXkpO1xuICAgICAgICB2YXJpYW50ICYmIHNldFRhcmdldCh2aXN1YWxFbGVtZW50LCB2YXJpYW50KTtcbiAgICAgICAgKF9hID0gdmlzdWFsRWxlbWVudC52YXJpYW50Q2hpbGRyZW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkge1xuICAgICAgICAgICAgc2V0VmFyaWFudHMoY2hpbGQsIHZhcmlhbnRMYWJlbHMpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIHNldFZhbHVlcyh2aXN1YWxFbGVtZW50LCBkZWZpbml0aW9uKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIHNldFZhcmlhbnRzKHZpc3VhbEVsZW1lbnQsIGRlZmluaXRpb24pO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlb2YgZGVmaW5pdGlvbiA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICByZXR1cm4gc2V0VmFyaWFudHModmlzdWFsRWxlbWVudCwgW2RlZmluaXRpb25dKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHNldFRhcmdldCh2aXN1YWxFbGVtZW50LCBkZWZpbml0aW9uKTtcbiAgICB9XG59XG5mdW5jdGlvbiBjaGVja1RhcmdldEZvck5ld1ZhbHVlcyh2aXN1YWxFbGVtZW50LCB0YXJnZXQsIG9yaWdpbikge1xuICAgIHZhciBfYSwgX2IsIF9jO1xuICAgIHZhciBfZDtcbiAgICB2YXIgbmV3VmFsdWVLZXlzID0gT2JqZWN0LmtleXModGFyZ2V0KS5maWx0ZXIoZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gIXZpc3VhbEVsZW1lbnQuaGFzVmFsdWUoa2V5KTsgfSk7XG4gICAgdmFyIG51bU5ld1ZhbHVlcyA9IG5ld1ZhbHVlS2V5cy5sZW5ndGg7XG4gICAgaWYgKCFudW1OZXdWYWx1ZXMpXG4gICAgICAgIHJldHVybjtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bU5ld1ZhbHVlczsgaSsrKSB7XG4gICAgICAgIHZhciBrZXkgPSBuZXdWYWx1ZUtleXNbaV07XG4gICAgICAgIHZhciB0YXJnZXRWYWx1ZSA9IHRhcmdldFtrZXldO1xuICAgICAgICB2YXIgdmFsdWUgPSBudWxsO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlIHRhcmdldCBpcyBhIHNlcmllcyBvZiBrZXlmcmFtZXMsIHdlIGNhbiB1c2UgdGhlIGZpcnN0IHZhbHVlXG4gICAgICAgICAqIGluIHRoZSBhcnJheS4gSWYgdGhpcyBmaXJzdCB2YWx1ZSBpcyBudWxsLCB3ZSdsbCBzdGlsbCBuZWVkIHRvIHJlYWQgZnJvbSB0aGUgRE9NLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGFyZ2V0VmFsdWUpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRhcmdldFZhbHVlWzBdO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiB0aGUgdGFyZ2V0IGlzbid0IGtleWZyYW1lcywgb3IgdGhlIGZpcnN0IGtleWZyYW1lIHdhcyBudWxsLCB3ZSBuZWVkIHRvXG4gICAgICAgICAqIGZpcnN0IGNoZWNrIGlmIGFuIG9yaWdpbiB2YWx1ZSB3YXMgZXhwbGljaXRseSBkZWZpbmVkIGluIHRoZSB0cmFuc2l0aW9uIGFzIFwiZnJvbVwiLFxuICAgICAgICAgKiBpZiBub3QgcmVhZCB0aGUgdmFsdWUgZnJvbSB0aGUgRE9NLiBBcyBhbiBhYnNvbHV0ZSBmYWxsYmFjaywgdGFrZSB0aGUgZGVmaW5lZCB0YXJnZXQgdmFsdWUuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHZhbHVlID0gKF9iID0gKF9hID0gb3JpZ2luW2tleV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZpc3VhbEVsZW1lbnQucmVhZFZhbHVlKGtleSkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHRhcmdldFtrZXldO1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiB2YWx1ZSBpcyBzdGlsbCB1bmRlZmluZWQgb3IgbnVsbCwgaWdub3JlIGl0LiBQcmVmZXJhYmx5IHRoaXMgd291bGQgdGhyb3csXG4gICAgICAgICAqIGJ1dCB0aGlzIHdhcyBjYXVzaW5nIGlzc3VlcyBpbiBGcmFtZXIuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgICAoaXNOdW1lcmljYWxTdHJpbmcodmFsdWUpIHx8IGlzWmVyb1ZhbHVlU3RyaW5nKHZhbHVlKSkpIHtcbiAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBudW1iZXIgcmVhZCBhcyBhIHN0cmluZywgaWUgXCIwXCIgb3IgXCIyMDBcIiwgY29udmVydCBpdCB0byBhIG51bWJlclxuICAgICAgICAgICAgdmFsdWUgPSBwYXJzZUZsb2F0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghZmluZFZhbHVlVHlwZSh2YWx1ZSkgJiYgY29tcGxleC50ZXN0KHRhcmdldFZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBnZXRBbmltYXRhYmxlTm9uZShrZXksIHRhcmdldFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB2aXN1YWxFbGVtZW50LmFkZFZhbHVlKGtleSwgbW90aW9uVmFsdWUodmFsdWUpKTtcbiAgICAgICAgKF9jID0gKF9kID0gb3JpZ2luKVtrZXldKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAoX2Rba2V5XSA9IHZhbHVlKTtcbiAgICAgICAgdmlzdWFsRWxlbWVudC5zZXRCYXNlVGFyZ2V0KGtleSwgdmFsdWUpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldE9yaWdpbkZyb21UcmFuc2l0aW9uKGtleSwgdHJhbnNpdGlvbikge1xuICAgIGlmICghdHJhbnNpdGlvbilcbiAgICAgICAgcmV0dXJuO1xuICAgIHZhciB2YWx1ZVRyYW5zaXRpb24gPSB0cmFuc2l0aW9uW2tleV0gfHwgdHJhbnNpdGlvbltcImRlZmF1bHRcIl0gfHwgdHJhbnNpdGlvbjtcbiAgICByZXR1cm4gdmFsdWVUcmFuc2l0aW9uLmZyb207XG59XG5mdW5jdGlvbiBnZXRPcmlnaW4odGFyZ2V0LCB0cmFuc2l0aW9uLCB2aXN1YWxFbGVtZW50KSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICB2YXIgb3JpZ2luID0ge307XG4gICAgZm9yICh2YXIga2V5IGluIHRhcmdldCkge1xuICAgICAgICBvcmlnaW5ba2V5XSA9XG4gICAgICAgICAgICAoX2EgPSBnZXRPcmlnaW5Gcm9tVHJhbnNpdGlvbihrZXksIHRyYW5zaXRpb24pKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoX2IgPSB2aXN1YWxFbGVtZW50LmdldFZhbHVlKGtleSkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5nZXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIG9yaWdpbjtcbn1cblxuZXhwb3J0IHsgY2hlY2tUYXJnZXRGb3JOZXdWYWx1ZXMsIGdldE9yaWdpbiwgZ2V0T3JpZ2luRnJvbVRyYW5zaXRpb24sIHNldFRhcmdldCwgc2V0VmFsdWVzIH07XG4iLCJpbXBvcnQgeyBfX3JlYWQsIF9fcmVzdCwgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBzdGFydEFuaW1hdGlvbiB9IGZyb20gJy4uLy4uL2FuaW1hdGlvbi91dGlscy90cmFuc2l0aW9ucy5tanMnO1xuaW1wb3J0IHsgc2V0VGFyZ2V0IH0gZnJvbSAnLi9zZXR0ZXJzLm1qcyc7XG5pbXBvcnQgeyByZXNvbHZlVmFyaWFudCB9IGZyb20gJy4vdmFyaWFudHMubWpzJztcbmltcG9ydCB7IGlzVHJhbnNmb3JtUHJvcCB9IGZyb20gJy4uL2h0bWwvdXRpbHMvdHJhbnNmb3JtLm1qcyc7XG5cbmZ1bmN0aW9uIGFuaW1hdGVWaXN1YWxFbGVtZW50KHZpc3VhbEVsZW1lbnQsIGRlZmluaXRpb24sIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgIHZpc3VhbEVsZW1lbnQubm90aWZ5QW5pbWF0aW9uU3RhcnQoZGVmaW5pdGlvbik7XG4gICAgdmFyIGFuaW1hdGlvbjtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZpbml0aW9uKSkge1xuICAgICAgICB2YXIgYW5pbWF0aW9ucyA9IGRlZmluaXRpb24ubWFwKGZ1bmN0aW9uICh2YXJpYW50KSB7XG4gICAgICAgICAgICByZXR1cm4gYW5pbWF0ZVZhcmlhbnQodmlzdWFsRWxlbWVudCwgdmFyaWFudCwgb3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgICAgICBhbmltYXRpb24gPSBQcm9taXNlLmFsbChhbmltYXRpb25zKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGRlZmluaXRpb24gPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgYW5pbWF0aW9uID0gYW5pbWF0ZVZhcmlhbnQodmlzdWFsRWxlbWVudCwgZGVmaW5pdGlvbiwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB2YXIgcmVzb2x2ZWREZWZpbml0aW9uID0gdHlwZW9mIGRlZmluaXRpb24gPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgPyByZXNvbHZlVmFyaWFudCh2aXN1YWxFbGVtZW50LCBkZWZpbml0aW9uLCBvcHRpb25zLmN1c3RvbSlcbiAgICAgICAgICAgIDogZGVmaW5pdGlvbjtcbiAgICAgICAgYW5pbWF0aW9uID0gYW5pbWF0ZVRhcmdldCh2aXN1YWxFbGVtZW50LCByZXNvbHZlZERlZmluaXRpb24sIG9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gYW5pbWF0aW9uLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdmlzdWFsRWxlbWVudC5ub3RpZnlBbmltYXRpb25Db21wbGV0ZShkZWZpbml0aW9uKTtcbiAgICB9KTtcbn1cbmZ1bmN0aW9uIGFuaW1hdGVWYXJpYW50KHZpc3VhbEVsZW1lbnQsIHZhcmlhbnQsIG9wdGlvbnMpIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgeyBvcHRpb25zID0ge307IH1cbiAgICB2YXIgcmVzb2x2ZWQgPSByZXNvbHZlVmFyaWFudCh2aXN1YWxFbGVtZW50LCB2YXJpYW50LCBvcHRpb25zLmN1c3RvbSk7XG4gICAgdmFyIF9iID0gKHJlc29sdmVkIHx8IHt9KS50cmFuc2l0aW9uLCB0cmFuc2l0aW9uID0gX2IgPT09IHZvaWQgMCA/IHZpc3VhbEVsZW1lbnQuZ2V0RGVmYXVsdFRyYW5zaXRpb24oKSB8fCB7fSA6IF9iO1xuICAgIGlmIChvcHRpb25zLnRyYW5zaXRpb25PdmVycmlkZSkge1xuICAgICAgICB0cmFuc2l0aW9uID0gb3B0aW9ucy50cmFuc2l0aW9uT3ZlcnJpZGU7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIElmIHdlIGhhdmUgYSB2YXJpYW50LCBjcmVhdGUgYSBjYWxsYmFjayB0aGF0IHJ1bnMgaXQgYXMgYW4gYW5pbWF0aW9uLlxuICAgICAqIE90aGVyd2lzZSwgd2UgcmVzb2x2ZSBhIFByb21pc2UgaW1tZWRpYXRlbHkgZm9yIGEgY29tcG9zYWJsZSBuby1vcC5cbiAgICAgKi9cbiAgICB2YXIgZ2V0QW5pbWF0aW9uID0gcmVzb2x2ZWRcbiAgICAgICAgPyBmdW5jdGlvbiAoKSB7IHJldHVybiBhbmltYXRlVGFyZ2V0KHZpc3VhbEVsZW1lbnQsIHJlc29sdmVkLCBvcHRpb25zKTsgfVxuICAgICAgICA6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOyB9O1xuICAgIC8qKlxuICAgICAqIElmIHdlIGhhdmUgY2hpbGRyZW4sIGNyZWF0ZSBhIGNhbGxiYWNrIHRoYXQgcnVucyBhbGwgdGhlaXIgYW5pbWF0aW9ucy5cbiAgICAgKiBPdGhlcndpc2UsIHdlIHJlc29sdmUgYSBQcm9taXNlIGltbWVkaWF0ZWx5IGZvciBhIGNvbXBvc2FibGUgbm8tb3AuXG4gICAgICovXG4gICAgdmFyIGdldENoaWxkQW5pbWF0aW9ucyA9ICgoX2EgPSB2aXN1YWxFbGVtZW50LnZhcmlhbnRDaGlsZHJlbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNpemUpXG4gICAgICAgID8gZnVuY3Rpb24gKGZvcndhcmREZWxheSkge1xuICAgICAgICAgICAgaWYgKGZvcndhcmREZWxheSA9PT0gdm9pZCAwKSB7IGZvcndhcmREZWxheSA9IDA7IH1cbiAgICAgICAgICAgIHZhciBfYSA9IHRyYW5zaXRpb24uZGVsYXlDaGlsZHJlbiwgZGVsYXlDaGlsZHJlbiA9IF9hID09PSB2b2lkIDAgPyAwIDogX2EsIHN0YWdnZXJDaGlsZHJlbiA9IHRyYW5zaXRpb24uc3RhZ2dlckNoaWxkcmVuLCBzdGFnZ2VyRGlyZWN0aW9uID0gdHJhbnNpdGlvbi5zdGFnZ2VyRGlyZWN0aW9uO1xuICAgICAgICAgICAgcmV0dXJuIGFuaW1hdGVDaGlsZHJlbih2aXN1YWxFbGVtZW50LCB2YXJpYW50LCBkZWxheUNoaWxkcmVuICsgZm9yd2FyZERlbGF5LCBzdGFnZ2VyQ2hpbGRyZW4sIHN0YWdnZXJEaXJlY3Rpb24sIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIDogZnVuY3Rpb24gKCkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7IH07XG4gICAgLyoqXG4gICAgICogSWYgdGhlIHRyYW5zaXRpb24gZXhwbGljaXRseSBkZWZpbmVzIGEgXCJ3aGVuXCIgb3B0aW9uLCB3ZSBuZWVkIHRvIHJlc29sdmUgZWl0aGVyXG4gICAgICogdGhpcyBhbmltYXRpb24gb3IgYWxsIGNoaWxkcmVuIGFuaW1hdGlvbnMgYmVmb3JlIHBsYXlpbmcgdGhlIG90aGVyLlxuICAgICAqL1xuICAgIHZhciB3aGVuID0gdHJhbnNpdGlvbi53aGVuO1xuICAgIGlmICh3aGVuKSB7XG4gICAgICAgIHZhciBfYyA9IF9fcmVhZCh3aGVuID09PSBcImJlZm9yZUNoaWxkcmVuXCJcbiAgICAgICAgICAgID8gW2dldEFuaW1hdGlvbiwgZ2V0Q2hpbGRBbmltYXRpb25zXVxuICAgICAgICAgICAgOiBbZ2V0Q2hpbGRBbmltYXRpb25zLCBnZXRBbmltYXRpb25dLCAyKSwgZmlyc3QgPSBfY1swXSwgbGFzdCA9IF9jWzFdO1xuICAgICAgICByZXR1cm4gZmlyc3QoKS50aGVuKGxhc3QpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtnZXRBbmltYXRpb24oKSwgZ2V0Q2hpbGRBbmltYXRpb25zKG9wdGlvbnMuZGVsYXkpXSk7XG4gICAgfVxufVxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuZnVuY3Rpb24gYW5pbWF0ZVRhcmdldCh2aXN1YWxFbGVtZW50LCBkZWZpbml0aW9uLCBfYSkge1xuICAgIHZhciBfYjtcbiAgICB2YXIgX2MgPSBfYSA9PT0gdm9pZCAwID8ge30gOiBfYSwgX2QgPSBfYy5kZWxheSwgZGVsYXkgPSBfZCA9PT0gdm9pZCAwID8gMCA6IF9kLCB0cmFuc2l0aW9uT3ZlcnJpZGUgPSBfYy50cmFuc2l0aW9uT3ZlcnJpZGUsIHR5cGUgPSBfYy50eXBlO1xuICAgIHZhciBfZSA9IHZpc3VhbEVsZW1lbnQubWFrZVRhcmdldEFuaW1hdGFibGUoZGVmaW5pdGlvbiksIF9mID0gX2UudHJhbnNpdGlvbiwgdHJhbnNpdGlvbiA9IF9mID09PSB2b2lkIDAgPyB2aXN1YWxFbGVtZW50LmdldERlZmF1bHRUcmFuc2l0aW9uKCkgOiBfZiwgdHJhbnNpdGlvbkVuZCA9IF9lLnRyYW5zaXRpb25FbmQsIHRhcmdldCA9IF9fcmVzdChfZSwgW1widHJhbnNpdGlvblwiLCBcInRyYW5zaXRpb25FbmRcIl0pO1xuICAgIGlmICh0cmFuc2l0aW9uT3ZlcnJpZGUpXG4gICAgICAgIHRyYW5zaXRpb24gPSB0cmFuc2l0aW9uT3ZlcnJpZGU7XG4gICAgdmFyIGFuaW1hdGlvbnMgPSBbXTtcbiAgICB2YXIgYW5pbWF0aW9uVHlwZVN0YXRlID0gdHlwZSAmJiAoKF9iID0gdmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmdldFN0YXRlKClbdHlwZV0pO1xuICAgIGZvciAodmFyIGtleSBpbiB0YXJnZXQpIHtcbiAgICAgICAgdmFyIHZhbHVlID0gdmlzdWFsRWxlbWVudC5nZXRWYWx1ZShrZXkpO1xuICAgICAgICB2YXIgdmFsdWVUYXJnZXQgPSB0YXJnZXRba2V5XTtcbiAgICAgICAgaWYgKCF2YWx1ZSB8fFxuICAgICAgICAgICAgdmFsdWVUYXJnZXQgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgKGFuaW1hdGlvblR5cGVTdGF0ZSAmJlxuICAgICAgICAgICAgICAgIHNob3VsZEJsb2NrQW5pbWF0aW9uKGFuaW1hdGlvblR5cGVTdGF0ZSwga2V5KSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIHZhciB2YWx1ZVRyYW5zaXRpb24gPSBfX2Fzc2lnbih7IGRlbGF5OiBkZWxheSB9LCB0cmFuc2l0aW9uKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1ha2UgYW5pbWF0aW9uIGluc3RhbnQgaWYgdGhpcyBpcyBhIHRyYW5zZm9ybSBwcm9wIGFuZCB3ZSBzaG91bGQgcmVkdWNlIG1vdGlvbi5cbiAgICAgICAgICovXG4gICAgICAgIGlmICh2aXN1YWxFbGVtZW50LnNob3VsZFJlZHVjZU1vdGlvbiAmJiBpc1RyYW5zZm9ybVByb3Aoa2V5KSkge1xuICAgICAgICAgICAgdmFsdWVUcmFuc2l0aW9uID0gX19hc3NpZ24oX19hc3NpZ24oe30sIHZhbHVlVHJhbnNpdGlvbiksIHsgdHlwZTogZmFsc2UsIGRlbGF5OiAwIH0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBhbmltYXRpb24gPSBzdGFydEFuaW1hdGlvbihrZXksIHZhbHVlLCB2YWx1ZVRhcmdldCwgdmFsdWVUcmFuc2l0aW9uKTtcbiAgICAgICAgYW5pbWF0aW9ucy5wdXNoKGFuaW1hdGlvbik7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLmFsbChhbmltYXRpb25zKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdHJhbnNpdGlvbkVuZCAmJiBzZXRUYXJnZXQodmlzdWFsRWxlbWVudCwgdHJhbnNpdGlvbkVuZCk7XG4gICAgfSk7XG59XG5mdW5jdGlvbiBhbmltYXRlQ2hpbGRyZW4odmlzdWFsRWxlbWVudCwgdmFyaWFudCwgZGVsYXlDaGlsZHJlbiwgc3RhZ2dlckNoaWxkcmVuLCBzdGFnZ2VyRGlyZWN0aW9uLCBvcHRpb25zKSB7XG4gICAgaWYgKGRlbGF5Q2hpbGRyZW4gPT09IHZvaWQgMCkgeyBkZWxheUNoaWxkcmVuID0gMDsgfVxuICAgIGlmIChzdGFnZ2VyQ2hpbGRyZW4gPT09IHZvaWQgMCkgeyBzdGFnZ2VyQ2hpbGRyZW4gPSAwOyB9XG4gICAgaWYgKHN0YWdnZXJEaXJlY3Rpb24gPT09IHZvaWQgMCkgeyBzdGFnZ2VyRGlyZWN0aW9uID0gMTsgfVxuICAgIHZhciBhbmltYXRpb25zID0gW107XG4gICAgdmFyIG1heFN0YWdnZXJEdXJhdGlvbiA9ICh2aXN1YWxFbGVtZW50LnZhcmlhbnRDaGlsZHJlbi5zaXplIC0gMSkgKiBzdGFnZ2VyQ2hpbGRyZW47XG4gICAgdmFyIGdlbmVyYXRlU3RhZ2dlckR1cmF0aW9uID0gc3RhZ2dlckRpcmVjdGlvbiA9PT0gMVxuICAgICAgICA/IGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gdm9pZCAwKSB7IGkgPSAwOyB9XG4gICAgICAgICAgICByZXR1cm4gaSAqIHN0YWdnZXJDaGlsZHJlbjtcbiAgICAgICAgfVxuICAgICAgICA6IGZ1bmN0aW9uIChpKSB7XG4gICAgICAgICAgICBpZiAoaSA9PT0gdm9pZCAwKSB7IGkgPSAwOyB9XG4gICAgICAgICAgICByZXR1cm4gbWF4U3RhZ2dlckR1cmF0aW9uIC0gaSAqIHN0YWdnZXJDaGlsZHJlbjtcbiAgICAgICAgfTtcbiAgICBBcnJheS5mcm9tKHZpc3VhbEVsZW1lbnQudmFyaWFudENoaWxkcmVuKVxuICAgICAgICAuc29ydChzb3J0QnlUcmVlT3JkZXIpXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCwgaSkge1xuICAgICAgICBhbmltYXRpb25zLnB1c2goYW5pbWF0ZVZhcmlhbnQoY2hpbGQsIHZhcmlhbnQsIF9fYXNzaWduKF9fYXNzaWduKHt9LCBvcHRpb25zKSwgeyBkZWxheTogZGVsYXlDaGlsZHJlbiArIGdlbmVyYXRlU3RhZ2dlckR1cmF0aW9uKGkpIH0pKS50aGVuKGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNoaWxkLm5vdGlmeUFuaW1hdGlvbkNvbXBsZXRlKHZhcmlhbnQpOyB9KSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGFuaW1hdGlvbnMpO1xufVxuZnVuY3Rpb24gc3RvcEFuaW1hdGlvbih2aXN1YWxFbGVtZW50KSB7XG4gICAgdmlzdWFsRWxlbWVudC5mb3JFYWNoVmFsdWUoZnVuY3Rpb24gKHZhbHVlKSB7IHJldHVybiB2YWx1ZS5zdG9wKCk7IH0pO1xufVxuZnVuY3Rpb24gc29ydEJ5VHJlZU9yZGVyKGEsIGIpIHtcbiAgICByZXR1cm4gYS5zb3J0Tm9kZVBvc2l0aW9uKGIpO1xufVxuLyoqXG4gKiBEZWNpZGUgd2hldGhlciB3ZSBzaG91bGQgYmxvY2sgdGhpcyBhbmltYXRpb24uIFByZXZpb3VzbHksIHdlIGFjaGlldmVkIHRoaXNcbiAqIGp1c3QgYnkgY2hlY2tpbmcgd2hldGhlciB0aGUga2V5IHdhcyBsaXN0ZWQgaW4gcHJvdGVjdGVkS2V5cywgYnV0IHRoaXNcbiAqIHBvc2VkIHByb2JsZW1zIGlmIGFuIGFuaW1hdGlvbiB3YXMgdHJpZ2dlcmVkIGJ5IGFmdGVyQ2hpbGRyZW4gYW5kIHByb3RlY3RlZEtleXNcbiAqIGhhZCBiZWVuIHNldCB0byB0cnVlIGluIHRoZSBtZWFudGltZS5cbiAqL1xuZnVuY3Rpb24gc2hvdWxkQmxvY2tBbmltYXRpb24oX2EsIGtleSkge1xuICAgIHZhciBwcm90ZWN0ZWRLZXlzID0gX2EucHJvdGVjdGVkS2V5cywgbmVlZHNBbmltYXRpbmcgPSBfYS5uZWVkc0FuaW1hdGluZztcbiAgICB2YXIgc2hvdWxkQmxvY2sgPSBwcm90ZWN0ZWRLZXlzLmhhc093blByb3BlcnR5KGtleSkgJiYgbmVlZHNBbmltYXRpbmdba2V5XSAhPT0gdHJ1ZTtcbiAgICBuZWVkc0FuaW1hdGluZ1trZXldID0gZmFsc2U7XG4gICAgcmV0dXJuIHNob3VsZEJsb2NrO1xufVxuXG5leHBvcnQgeyBhbmltYXRlVmlzdWFsRWxlbWVudCwgc29ydEJ5VHJlZU9yZGVyLCBzdG9wQW5pbWF0aW9uIH07XG4iLCJpbXBvcnQgeyBfX3NwcmVhZEFycmF5LCBfX3JlYWQsIF9fYXNzaWduLCBfX3Jlc3QgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBpc0FuaW1hdGlvbkNvbnRyb2xzIH0gZnJvbSAnLi4vLi4vYW5pbWF0aW9uL3V0aWxzL2lzLWFuaW1hdGlvbi1jb250cm9scy5tanMnO1xuaW1wb3J0IHsgaXNLZXlmcmFtZXNUYXJnZXQgfSBmcm9tICcuLi8uLi9hbmltYXRpb24vdXRpbHMvaXMta2V5ZnJhbWVzLXRhcmdldC5tanMnO1xuaW1wb3J0IHsgc2hhbGxvd0NvbXBhcmUgfSBmcm9tICcuLi8uLi91dGlscy9zaGFsbG93LWNvbXBhcmUubWpzJztcbmltcG9ydCB7IGFuaW1hdGVWaXN1YWxFbGVtZW50IH0gZnJvbSAnLi9hbmltYXRpb24ubWpzJztcbmltcG9ydCB7IEFuaW1hdGlvblR5cGUgfSBmcm9tICcuL3R5cGVzLm1qcyc7XG5pbXBvcnQgeyBpc1ZhcmlhbnRMYWJlbHMsIHJlc29sdmVWYXJpYW50LCBpc1ZhcmlhbnRMYWJlbCB9IGZyb20gJy4vdmFyaWFudHMubWpzJztcblxudmFyIHZhcmlhbnRQcmlvcml0eU9yZGVyID0gW1xuICAgIEFuaW1hdGlvblR5cGUuQW5pbWF0ZSxcbiAgICBBbmltYXRpb25UeXBlLkluVmlldyxcbiAgICBBbmltYXRpb25UeXBlLkZvY3VzLFxuICAgIEFuaW1hdGlvblR5cGUuSG92ZXIsXG4gICAgQW5pbWF0aW9uVHlwZS5UYXAsXG4gICAgQW5pbWF0aW9uVHlwZS5EcmFnLFxuICAgIEFuaW1hdGlvblR5cGUuRXhpdCxcbl07XG52YXIgcmV2ZXJzZVByaW9yaXR5T3JkZXIgPSBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQodmFyaWFudFByaW9yaXR5T3JkZXIpLCBmYWxzZSkucmV2ZXJzZSgpO1xudmFyIG51bUFuaW1hdGlvblR5cGVzID0gdmFyaWFudFByaW9yaXR5T3JkZXIubGVuZ3RoO1xuZnVuY3Rpb24gYW5pbWF0ZUxpc3QodmlzdWFsRWxlbWVudCkge1xuICAgIHJldHVybiBmdW5jdGlvbiAoYW5pbWF0aW9ucykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoYW5pbWF0aW9ucy5tYXAoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICB2YXIgYW5pbWF0aW9uID0gX2EuYW5pbWF0aW9uLCBvcHRpb25zID0gX2Eub3B0aW9ucztcbiAgICAgICAgICAgIHJldHVybiBhbmltYXRlVmlzdWFsRWxlbWVudCh2aXN1YWxFbGVtZW50LCBhbmltYXRpb24sIG9wdGlvbnMpO1xuICAgICAgICB9KSk7XG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNyZWF0ZUFuaW1hdGlvblN0YXRlKHZpc3VhbEVsZW1lbnQpIHtcbiAgICB2YXIgYW5pbWF0ZSA9IGFuaW1hdGVMaXN0KHZpc3VhbEVsZW1lbnQpO1xuICAgIHZhciBzdGF0ZSA9IGNyZWF0ZVN0YXRlKCk7XG4gICAgdmFyIGFsbEFuaW1hdGVkS2V5cyA9IHt9O1xuICAgIHZhciBpc0luaXRpYWxSZW5kZXIgPSB0cnVlO1xuICAgIC8qKlxuICAgICAqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIHRvIHJlZHVjZSB0aGUgYW5pbWF0aW9uIGRlZmluaXRpb25zIGZvclxuICAgICAqIGVhY2ggYWN0aXZlIGFuaW1hdGlvbiB0eXBlIGludG8gYW4gb2JqZWN0IG9mIHJlc29sdmVkIHZhbHVlcyBmb3IgaXQuXG4gICAgICovXG4gICAgdmFyIGJ1aWxkUmVzb2x2ZWRUeXBlVmFsdWVzID0gZnVuY3Rpb24gKGFjYywgZGVmaW5pdGlvbikge1xuICAgICAgICB2YXIgcmVzb2x2ZWQgPSByZXNvbHZlVmFyaWFudCh2aXN1YWxFbGVtZW50LCBkZWZpbml0aW9uKTtcbiAgICAgICAgaWYgKHJlc29sdmVkKSB7XG4gICAgICAgICAgICByZXNvbHZlZC50cmFuc2l0aW9uOyB2YXIgdHJhbnNpdGlvbkVuZCA9IHJlc29sdmVkLnRyYW5zaXRpb25FbmQsIHRhcmdldCA9IF9fcmVzdChyZXNvbHZlZCwgW1widHJhbnNpdGlvblwiLCBcInRyYW5zaXRpb25FbmRcIl0pO1xuICAgICAgICAgICAgYWNjID0gX19hc3NpZ24oX19hc3NpZ24oX19hc3NpZ24oe30sIGFjYyksIHRhcmdldCksIHRyYW5zaXRpb25FbmQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhY2M7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBpc0FuaW1hdGVkKGtleSkge1xuICAgICAgICByZXR1cm4gYWxsQW5pbWF0ZWRLZXlzW2tleV0gIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogVGhpcyBqdXN0IGFsbG93cyB1cyB0byBpbmplY3QgbW9ja2VkIGFuaW1hdGlvbiBmdW5jdGlvbnNcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBzZXRBbmltYXRlRnVuY3Rpb24obWFrZUFuaW1hdG9yKSB7XG4gICAgICAgIGFuaW1hdGUgPSBtYWtlQW5pbWF0b3IodmlzdWFsRWxlbWVudCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFdoZW4gd2UgcmVjZWl2ZSBuZXcgcHJvcHMsIHdlIG5lZWQgdG86XG4gICAgICogMS4gQ3JlYXRlIGEgbGlzdCBvZiBwcm90ZWN0ZWQga2V5cyBmb3IgZWFjaCB0eXBlLiBUaGlzIGlzIGEgZGlyZWN0b3J5IG9mXG4gICAgICogICAgdmFsdWUga2V5cyB0aGF0IGFyZSBjdXJyZW50bHkgYmVpbmcgXCJoYW5kbGVkXCIgYnkgdHlwZXMgb2YgYSBoaWdoZXIgcHJpb3JpdHlcbiAgICAgKiAgICBzbyB0aGF0IHdoZW5ldmVyIGFuIGFuaW1hdGlvbiBpcyBwbGF5ZWQgb2YgYSBnaXZlbiB0eXBlLCB0aGVzZSB2YWx1ZXMgYXJlXG4gICAgICogICAgcHJvdGVjdGVkIGZyb20gYmVpbmcgYW5pbWF0ZWQuXG4gICAgICogMi4gRGV0ZXJtaW5lIGlmIGFuIGFuaW1hdGlvbiB0eXBlIG5lZWRzIGFuaW1hdGluZy5cbiAgICAgKiAzLiBEZXRlcm1pbmUgaWYgYW55IHZhbHVlcyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIGEgdHlwZSBhbmQgZmlndXJlIG91dFxuICAgICAqICAgIHdoYXQgdG8gYW5pbWF0ZSB0aG9zZSB0by5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBhbmltYXRlQ2hhbmdlcyhvcHRpb25zLCBjaGFuZ2VkQWN0aXZlVHlwZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBwcm9wcyA9IHZpc3VhbEVsZW1lbnQuZ2V0UHJvcHMoKTtcbiAgICAgICAgdmFyIGNvbnRleHQgPSB2aXN1YWxFbGVtZW50LmdldFZhcmlhbnRDb250ZXh0KHRydWUpIHx8IHt9O1xuICAgICAgICAvKipcbiAgICAgICAgICogQSBsaXN0IG9mIGFuaW1hdGlvbnMgdGhhdCB3ZSdsbCBidWlsZCBpbnRvIGFzIHdlIGl0ZXJhdGUgdGhyb3VnaCB0aGUgYW5pbWF0aW9uXG4gICAgICAgICAqIHR5cGVzLiBUaGlzIHdpbGwgZ2V0IGV4ZWN1dGVkIGF0IHRoZSBlbmQgb2YgdGhlIGZ1bmN0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGFuaW1hdGlvbnMgPSBbXTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEtlZXAgdHJhY2sgb2Ygd2hpY2ggdmFsdWVzIGhhdmUgYmVlbiByZW1vdmVkLiBUaGVuLCBhcyB3ZSBoaXQgbG93ZXIgcHJpb3JpdHlcbiAgICAgICAgICogYW5pbWF0aW9uIHR5cGVzLCB3ZSBjYW4gY2hlY2sgaWYgdGhleSBjb250YWluIHJlbW92ZWQgdmFsdWVzIGFuZCBhbmltYXRlIHRvIHRoYXQuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgcmVtb3ZlZEtleXMgPSBuZXcgU2V0KCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIGRpY3Rpb25hcnkgb2YgYWxsIGVuY291bnRlcmVkIGtleXMuIFRoaXMgaXMgYW4gb2JqZWN0IHRvIGxldCB1cyBidWlsZCBpbnRvIGFuZFxuICAgICAgICAgKiBjb3B5IGl0IHdpdGhvdXQgaXRlcmF0aW9uLiBFYWNoIHRpbWUgd2UgaGl0IGFuIGFuaW1hdGlvbiB0eXBlIHdlIHNldCBpdHMgcHJvdGVjdGVkXG4gICAgICAgICAqIGtleXMgLSB0aGUga2V5cyBpdHMgbm90IGFsbG93ZWQgdG8gYW5pbWF0ZSAtIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIG9iamVjdC5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBlbmNvdW50ZXJlZEtleXMgPSB7fTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIGEgdmFyaWFudCBoYXMgYmVlbiByZW1vdmVkIGF0IGEgZ2l2ZW4gaW5kZXgsIGFuZCB0aGlzIGNvbXBvbmVudCBpcyBjb250cm9sbGluZ1xuICAgICAgICAgKiB2YXJpYW50IGFuaW1hdGlvbnMsIHdlIHdhbnQgdG8gZW5zdXJlIGxvd2VyLXByaW9yaXR5IHZhcmlhbnRzIGFyZSBmb3JjZWQgdG8gYW5pbWF0ZS5cbiAgICAgICAgICovXG4gICAgICAgIHZhciByZW1vdmVkVmFyaWFudEluZGV4ID0gSW5maW5pdHk7XG4gICAgICAgIHZhciBfbG9vcF8xID0gZnVuY3Rpb24gKGkpIHtcbiAgICAgICAgICAgIHZhciB0eXBlID0gcmV2ZXJzZVByaW9yaXR5T3JkZXJbaV07XG4gICAgICAgICAgICB2YXIgdHlwZVN0YXRlID0gc3RhdGVbdHlwZV07XG4gICAgICAgICAgICB2YXIgcHJvcCA9IChfYSA9IHByb3BzW3R5cGVdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBjb250ZXh0W3R5cGVdO1xuICAgICAgICAgICAgdmFyIHByb3BJc1ZhcmlhbnQgPSBpc1ZhcmlhbnRMYWJlbChwcm9wKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgdGhpcyB0eXBlIGhhcyAqanVzdCogY2hhbmdlZCBpc0FjdGl2ZSBzdGF0dXMsIHNldCBhY3RpdmVEZWx0YVxuICAgICAgICAgICAgICogdG8gdGhhdCBzdGF0dXMuIE90aGVyd2lzZSBzZXQgdG8gbnVsbC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyIGFjdGl2ZURlbHRhID0gdHlwZSA9PT0gY2hhbmdlZEFjdGl2ZVR5cGUgPyB0eXBlU3RhdGUuaXNBY3RpdmUgOiBudWxsO1xuICAgICAgICAgICAgaWYgKGFjdGl2ZURlbHRhID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZW1vdmVkVmFyaWFudEluZGV4ID0gaTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgdGhpcyBwcm9wIGlzIGFuIGluaGVyaXRlZCB2YXJpYW50LCByYXRoZXIgdGhhbiBiZWVuIHNldCBkaXJlY3RseSBvbiB0aGVcbiAgICAgICAgICAgICAqIGNvbXBvbmVudCBpdHNlbGYsIHdlIHdhbnQgdG8gbWFrZSBzdXJlIHdlIGFsbG93IHRoZSBwYXJlbnQgdG8gdHJpZ2dlciBhbmltYXRpb25zLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFRPRE86IENhbiBwcm9iYWJseSBjaGFuZ2UgdGhpcyB0byBhICFpc0NvbnRyb2xsaW5nVmFyaWFudHMgY2hlY2tcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyIGlzSW5oZXJpdGVkID0gcHJvcCA9PT0gY29udGV4dFt0eXBlXSAmJiBwcm9wICE9PSBwcm9wc1t0eXBlXSAmJiBwcm9wSXNWYXJpYW50O1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoaXNJbmhlcml0ZWQgJiZcbiAgICAgICAgICAgICAgICBpc0luaXRpYWxSZW5kZXIgJiZcbiAgICAgICAgICAgICAgICB2aXN1YWxFbGVtZW50Lm1hbnVhbGx5QW5pbWF0ZU9uTW91bnQpIHtcbiAgICAgICAgICAgICAgICBpc0luaGVyaXRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBTZXQgYWxsIGVuY291bnRlcmVkIGtleXMgc28gZmFyIGFzIHRoZSBwcm90ZWN0ZWQga2V5cyBmb3IgdGhpcyB0eXBlLiBUaGlzIHdpbGxcbiAgICAgICAgICAgICAqIGJlIGFueSBrZXkgdGhhdCBoYXMgYmVlbiBhbmltYXRlZCBvciBvdGhlcndpc2UgaGFuZGxlZCBieSBhY3RpdmUsIGhpZ2hlci1wcmlvcnRpeSB0eXBlcy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdHlwZVN0YXRlLnByb3RlY3RlZEtleXMgPSBfX2Fzc2lnbih7fSwgZW5jb3VudGVyZWRLZXlzKTtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIHdlIGNhbiBza2lwIGFuYWx5c2luZyB0aGlzIHByb3AgZWFybHlcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIC8vIElmIGl0IGlzbid0IGFjdGl2ZSBhbmQgaGFzbid0ICpqdXN0KiBiZWVuIHNldCBhcyBpbmFjdGl2ZVxuICAgICAgICAgICAgKCF0eXBlU3RhdGUuaXNBY3RpdmUgJiYgYWN0aXZlRGVsdGEgPT09IG51bGwpIHx8XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgZGlkbid0IGFuZCBkb24ndCBoYXZlIGFueSBkZWZpbmVkIHByb3AgZm9yIHRoaXMgYW5pbWF0aW9uIHR5cGVcbiAgICAgICAgICAgICAgICAoIXByb3AgJiYgIXR5cGVTdGF0ZS5wcmV2UHJvcCkgfHxcbiAgICAgICAgICAgICAgICAvLyBPciBpZiB0aGUgcHJvcCBkb2Vzbid0IGRlZmluZSBhbiBhbmltYXRpb25cbiAgICAgICAgICAgICAgICBpc0FuaW1hdGlvbkNvbnRyb2xzKHByb3ApIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHByb3AgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiY29udGludWVcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQXMgd2UgZ28gbG9vayB0aHJvdWdoIHRoZSB2YWx1ZXMgZGVmaW5lZCBvbiB0aGlzIHR5cGUsIGlmIHdlIGRldGVjdFxuICAgICAgICAgICAgICogYSBjaGFuZ2VkIHZhbHVlIG9yIGEgdmFsdWUgdGhhdCB3YXMgcmVtb3ZlZCBpbiBhIGhpZ2hlciBwcmlvcml0eSwgd2Ugc2V0XG4gICAgICAgICAgICAgKiB0aGlzIHRvIHRydWUgYW5kIGFkZCB0aGlzIHByb3AgdG8gdGhlIGFuaW1hdGlvbiBsaXN0LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXIgdmFyaWFudERpZENoYW5nZSA9IGNoZWNrVmFyaWFudHNEaWRDaGFuZ2UodHlwZVN0YXRlLnByZXZQcm9wLCBwcm9wKTtcbiAgICAgICAgICAgIHZhciBzaG91bGRBbmltYXRlVHlwZSA9IHZhcmlhbnREaWRDaGFuZ2UgfHxcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBtYWtpbmcgdGhpcyB2YXJpYW50IGFjdGl2ZSwgd2Ugd2FudCB0byBhbHdheXMgbWFrZSBpdCBhY3RpdmVcbiAgICAgICAgICAgICAgICAodHlwZSA9PT0gY2hhbmdlZEFjdGl2ZVR5cGUgJiZcbiAgICAgICAgICAgICAgICAgICAgdHlwZVN0YXRlLmlzQWN0aXZlICYmXG4gICAgICAgICAgICAgICAgICAgICFpc0luaGVyaXRlZCAmJlxuICAgICAgICAgICAgICAgICAgICBwcm9wSXNWYXJpYW50KSB8fFxuICAgICAgICAgICAgICAgIC8vIElmIHdlIHJlbW92ZWQgYSBoaWdoZXItcHJpb3JpdHkgdmFyaWFudCAoaSBpcyBpbiByZXZlcnNlIG9yZGVyKVxuICAgICAgICAgICAgICAgIChpID4gcmVtb3ZlZFZhcmlhbnRJbmRleCAmJiBwcm9wSXNWYXJpYW50KTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQXMgYW5pbWF0aW9ucyBjYW4gYmUgc2V0IGFzIHZhcmlhbnQgbGlzdHMsIHZhcmlhbnRzIG9yIHRhcmdldCBvYmplY3RzLCB3ZVxuICAgICAgICAgICAgICogY29lcmNlIGV2ZXJ5dGhpbmcgdG8gYW4gYXJyYXkgaWYgaXQgaXNuJ3Qgb25lIGFscmVhZHlcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyIGRlZmluaXRpb25MaXN0ID0gQXJyYXkuaXNBcnJheShwcm9wKSA/IHByb3AgOiBbcHJvcF07XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEJ1aWxkIGFuIG9iamVjdCBvZiBhbGwgdGhlIHJlc29sdmVkIHZhbHVlcy4gV2UnbGwgdXNlIHRoaXMgaW4gdGhlIHN1YnNlcXVlbnRcbiAgICAgICAgICAgICAqIGFuaW1hdGVDaGFuZ2VzIGNhbGxzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgdmFsdWUgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciByZXNvbHZlZFZhbHVlcyA9IGRlZmluaXRpb25MaXN0LnJlZHVjZShidWlsZFJlc29sdmVkVHlwZVZhbHVlcywge30pO1xuICAgICAgICAgICAgaWYgKGFjdGl2ZURlbHRhID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXNvbHZlZFZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBOb3cgd2UgbmVlZCB0byBsb29wIHRocm91Z2ggYWxsIHRoZSBrZXlzIGluIHRoZSBwcmV2IHByb3AgYW5kIHRoaXMgcHJvcCxcbiAgICAgICAgICAgICAqIGFuZCBkZWNpZGU6XG4gICAgICAgICAgICAgKiAxLiBJZiB0aGUgdmFsdWUgaGFzIGNoYW5nZWQsIGFuZCBuZWVkcyBhbmltYXRpbmdcbiAgICAgICAgICAgICAqIDIuIElmIGl0IGhhcyBiZWVuIHJlbW92ZWQsIGFuZCBuZWVkcyBhZGRpbmcgdG8gdGhlIHJlbW92ZWRLZXlzIHNldFxuICAgICAgICAgICAgICogMy4gSWYgaXQgaGFzIGJlZW4gcmVtb3ZlZCBpbiBhIGhpZ2hlciBwcmlvcml0eSB0eXBlIGFuZCBuZWVkcyBhbmltYXRpbmdcbiAgICAgICAgICAgICAqIDQuIElmIGl0IGhhc24ndCBiZWVuIHJlbW92ZWQgaW4gYSBoaWdoZXIgcHJpb3JpdHkgYnV0IGhhc24ndCBjaGFuZ2VkLCBhbmRcbiAgICAgICAgICAgICAqICAgIG5lZWRzIGFkZGluZyB0byB0aGUgdHlwZSdzIHByb3RlY3RlZEtleXMgbGlzdC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdmFyIF9iID0gdHlwZVN0YXRlLnByZXZSZXNvbHZlZFZhbHVlcywgcHJldlJlc29sdmVkVmFsdWVzID0gX2IgPT09IHZvaWQgMCA/IHt9IDogX2I7XG4gICAgICAgICAgICB2YXIgYWxsS2V5cyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBwcmV2UmVzb2x2ZWRWYWx1ZXMpLCByZXNvbHZlZFZhbHVlcyk7XG4gICAgICAgICAgICB2YXIgbWFya1RvQW5pbWF0ZSA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBzaG91bGRBbmltYXRlVHlwZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmVtb3ZlZEtleXMuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICAgICAgdHlwZVN0YXRlLm5lZWRzQW5pbWF0aW5nW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBhbGxLZXlzKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5leHQgPSByZXNvbHZlZFZhbHVlc1trZXldO1xuICAgICAgICAgICAgICAgIHZhciBwcmV2ID0gcHJldlJlc29sdmVkVmFsdWVzW2tleV07XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UndmUgYWxyZWFkeSBoYW5kbGVkIHRoaXMgd2UgY2FuIGp1c3Qgc2tpcCBhaGVhZFxuICAgICAgICAgICAgICAgIGlmIChlbmNvdW50ZXJlZEtleXMuaGFzT3duUHJvcGVydHkoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogSWYgdGhlIHZhbHVlIGhhcyBjaGFuZ2VkLCB3ZSBwcm9iYWJseSB3YW50IHRvIGFuaW1hdGUgaXQuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHByZXYpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIElmIGJvdGggdmFsdWVzIGFyZSBrZXlmcmFtZXMsIHdlIG5lZWQgdG8gc2hhbGxvdyBjb21wYXJlIHRoZW0gdG9cbiAgICAgICAgICAgICAgICAgICAgICogZGV0ZWN0IHdoZXRoZXIgYW55IHZhbHVlIGhhcyBjaGFuZ2VkLiBJZiBpdCBoYXMsIHdlIGFuaW1hdGUgaXQuXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNLZXlmcmFtZXNUYXJnZXQobmV4dCkgJiYgaXNLZXlmcmFtZXNUYXJnZXQocHJldikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2hhbGxvd0NvbXBhcmUobmV4dCwgcHJldikgfHwgdmFyaWFudERpZENoYW5nZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtUb0FuaW1hdGUoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIElmIGl0IGhhc24ndCBjaGFuZ2VkLCB3ZSB3YW50IHRvIGVuc3VyZSBpdCBkb2Vzbid0IGFuaW1hdGUgYnlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhZGRpbmcgaXQgdG8gdGhlIGxpc3Qgb2YgcHJvdGVjdGVkIGtleXMuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZVN0YXRlLnByb3RlY3RlZEtleXNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobmV4dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBuZXh0IGlzIGRlZmluZWQgYW5kIGRvZXNuJ3QgZXF1YWwgcHJldiwgaXQgbmVlZHMgYW5pbWF0aW5nXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJrVG9BbmltYXRlKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIHVuZGVmaW5lZCwgaXQncyBiZWVuIHJlbW92ZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkS2V5cy5hZGQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChuZXh0ICE9PSB1bmRlZmluZWQgJiYgcmVtb3ZlZEtleXMuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIElmIG5leHQgaGFzbid0IGNoYW5nZWQgYW5kIGl0IGlzbid0IHVuZGVmaW5lZCwgd2Ugd2FudCB0byBjaGVjayBpZiBpdCdzXG4gICAgICAgICAgICAgICAgICAgICAqIGJlZW4gcmVtb3ZlZCBieSBhIGhpZ2hlciBwcmlvcml0eVxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgbWFya1RvQW5pbWF0ZShrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIElmIGl0IGhhc24ndCBjaGFuZ2VkLCB3ZSBhZGQgaXQgdG8gdGhlIGxpc3Qgb2YgcHJvdGVjdGVkIHZhbHVlc1xuICAgICAgICAgICAgICAgICAgICAgKiB0byBlbnN1cmUgaXQgZG9lc24ndCBnZXQgYW5pbWF0ZWQuXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICB0eXBlU3RhdGUucHJvdGVjdGVkS2V5c1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFVwZGF0ZSB0aGUgdHlwZVN0YXRlIHNvIG5leHQgdGltZSBhbmltYXRlQ2hhbmdlcyBpcyBjYWxsZWQgd2UgY2FuIGNvbXBhcmUgdGhlXG4gICAgICAgICAgICAgKiBsYXRlc3QgcHJvcCBhbmQgcmVzb2x2ZWRWYWx1ZXMgdG8gdGhlc2UuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHR5cGVTdGF0ZS5wcmV2UHJvcCA9IHByb3A7XG4gICAgICAgICAgICB0eXBlU3RhdGUucHJldlJlc29sdmVkVmFsdWVzID0gcmVzb2x2ZWRWYWx1ZXM7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlmICh0eXBlU3RhdGUuaXNBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICBlbmNvdW50ZXJlZEtleXMgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZW5jb3VudGVyZWRLZXlzKSwgcmVzb2x2ZWRWYWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGlzSW5pdGlhbFJlbmRlciAmJiB2aXN1YWxFbGVtZW50LmJsb2NrSW5pdGlhbEFuaW1hdGlvbikge1xuICAgICAgICAgICAgICAgIHNob3VsZEFuaW1hdGVUeXBlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHRoaXMgaXMgYW4gaW5oZXJpdGVkIHByb3Agd2Ugd2FudCB0byBoYXJkLWJsb2NrIGFuaW1hdGlvbnNcbiAgICAgICAgICAgICAqIFRPRE86IFRlc3QgYXMgdGhpcyBzaG91bGQgcHJvYmFibHkgc3RpbGwgaGFuZGxlIGFuaW1hdGlvbnMgdHJpZ2dlcmVkXG4gICAgICAgICAgICAgKiBieSByZW1vdmVkIHZhbHVlcz9cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHNob3VsZEFuaW1hdGVUeXBlICYmICFpc0luaGVyaXRlZCkge1xuICAgICAgICAgICAgICAgIGFuaW1hdGlvbnMucHVzaC5hcHBseShhbmltYXRpb25zLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoZGVmaW5pdGlvbkxpc3QubWFwKGZ1bmN0aW9uIChhbmltYXRpb24pIHsgcmV0dXJuICh7XG4gICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbjogYW5pbWF0aW9uLFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBfX2Fzc2lnbih7IHR5cGU6IHR5cGUgfSwgb3B0aW9ucyksXG4gICAgICAgICAgICAgICAgfSk7IH0pKSwgZmFsc2UpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEl0ZXJhdGUgdGhyb3VnaCBhbGwgYW5pbWF0aW9uIHR5cGVzIGluIHJldmVyc2UgcHJpb3JpdHkgb3JkZXIuIEZvciBlYWNoLCB3ZSB3YW50IHRvXG4gICAgICAgICAqIGRldGVjdCB3aGljaCB2YWx1ZXMgaXQncyBoYW5kbGluZyBhbmQgd2hldGhlciBvciBub3QgdGhleSd2ZSBjaGFuZ2VkIChhbmQgdGhlcmVmb3JlXG4gICAgICAgICAqIG5lZWQgdG8gYmUgYW5pbWF0ZWQpLiBJZiBhbnkgdmFsdWVzIGhhdmUgYmVlbiByZW1vdmVkLCB3ZSB3YW50IHRvIGRldGVjdCB0aG9zZSBpblxuICAgICAgICAgKiBsb3dlciBwcmlvcml0eSBwcm9wcyBhbmQgZmxhZyBmb3IgYW5pbWF0aW9uLlxuICAgICAgICAgKi9cbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1BbmltYXRpb25UeXBlczsgaSsrKSB7XG4gICAgICAgICAgICBfbG9vcF8xKGkpO1xuICAgICAgICB9XG4gICAgICAgIGFsbEFuaW1hdGVkS2V5cyA9IF9fYXNzaWduKHt9LCBlbmNvdW50ZXJlZEtleXMpO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlcmUgYXJlIHNvbWUgcmVtb3ZlZCB2YWx1ZSB0aGF0IGhhdmVuJ3QgYmVlbiBkZWFsdCB3aXRoLFxuICAgICAgICAgKiB3ZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyBhbmltYXRpb24gdGhhdCBmYWxscyBiYWNrIGVpdGhlciB0byB0aGUgdmFsdWVcbiAgICAgICAgICogZGVmaW5lZCBpbiB0aGUgc3R5bGUgcHJvcCwgb3IgdGhlIGxhc3QgcmVhZCB2YWx1ZS5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChyZW1vdmVkS2V5cy5zaXplKSB7XG4gICAgICAgICAgICB2YXIgZmFsbGJhY2tBbmltYXRpb25fMSA9IHt9O1xuICAgICAgICAgICAgcmVtb3ZlZEtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgdmFyIGZhbGxiYWNrVGFyZ2V0ID0gdmlzdWFsRWxlbWVudC5nZXRCYXNlVGFyZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKGZhbGxiYWNrVGFyZ2V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZmFsbGJhY2tBbmltYXRpb25fMVtrZXldID0gZmFsbGJhY2tUYXJnZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhbmltYXRpb25zLnB1c2goeyBhbmltYXRpb246IGZhbGxiYWNrQW5pbWF0aW9uXzEgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNob3VsZEFuaW1hdGUgPSBCb29sZWFuKGFuaW1hdGlvbnMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGlzSW5pdGlhbFJlbmRlciAmJlxuICAgICAgICAgICAgcHJvcHMuaW5pdGlhbCA9PT0gZmFsc2UgJiZcbiAgICAgICAgICAgICF2aXN1YWxFbGVtZW50Lm1hbnVhbGx5QW5pbWF0ZU9uTW91bnQpIHtcbiAgICAgICAgICAgIHNob3VsZEFuaW1hdGUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpc0luaXRpYWxSZW5kZXIgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHNob3VsZEFuaW1hdGUgPyBhbmltYXRlKGFuaW1hdGlvbnMpIDogUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENoYW5nZSB3aGV0aGVyIGEgY2VydGFpbiBhbmltYXRpb24gdHlwZSBpcyBhY3RpdmUuXG4gICAgICovXG4gICAgZnVuY3Rpb24gc2V0QWN0aXZlKHR5cGUsIGlzQWN0aXZlLCBvcHRpb25zKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgLy8gSWYgdGhlIGFjdGl2ZSBzdGF0ZSBoYXNuJ3QgY2hhbmdlZCwgd2UgY2FuIHNhZmVseSBkbyBub3RoaW5nIGhlcmVcbiAgICAgICAgaWYgKHN0YXRlW3R5cGVdLmlzQWN0aXZlID09PSBpc0FjdGl2ZSlcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgLy8gUHJvcGFnYXRlIGFjdGl2ZSBjaGFuZ2UgdG8gY2hpbGRyZW5cbiAgICAgICAgKF9hID0gdmlzdWFsRWxlbWVudC52YXJpYW50Q2hpbGRyZW4pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb3JFYWNoKGZ1bmN0aW9uIChjaGlsZCkgeyB2YXIgX2E7IHJldHVybiAoX2EgPSBjaGlsZC5hbmltYXRpb25TdGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnNldEFjdGl2ZSh0eXBlLCBpc0FjdGl2ZSk7IH0pO1xuICAgICAgICBzdGF0ZVt0eXBlXS5pc0FjdGl2ZSA9IGlzQWN0aXZlO1xuICAgICAgICB2YXIgYW5pbWF0aW9ucyA9IGFuaW1hdGVDaGFuZ2VzKG9wdGlvbnMsIHR5cGUpO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gc3RhdGUpIHtcbiAgICAgICAgICAgIHN0YXRlW2tleV0ucHJvdGVjdGVkS2V5cyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhbmltYXRpb25zO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBpc0FuaW1hdGVkOiBpc0FuaW1hdGVkLFxuICAgICAgICBhbmltYXRlQ2hhbmdlczogYW5pbWF0ZUNoYW5nZXMsXG4gICAgICAgIHNldEFjdGl2ZTogc2V0QWN0aXZlLFxuICAgICAgICBzZXRBbmltYXRlRnVuY3Rpb246IHNldEFuaW1hdGVGdW5jdGlvbixcbiAgICAgICAgZ2V0U3RhdGU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0YXRlOyB9LFxuICAgIH07XG59XG5mdW5jdGlvbiBjaGVja1ZhcmlhbnRzRGlkQ2hhbmdlKHByZXYsIG5leHQpIHtcbiAgICBpZiAodHlwZW9mIG5leHQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIG5leHQgIT09IHByZXY7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzVmFyaWFudExhYmVscyhuZXh0KSkge1xuICAgICAgICByZXR1cm4gIXNoYWxsb3dDb21wYXJlKG5leHQsIHByZXYpO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBjcmVhdGVUeXBlU3RhdGUoaXNBY3RpdmUpIHtcbiAgICBpZiAoaXNBY3RpdmUgPT09IHZvaWQgMCkgeyBpc0FjdGl2ZSA9IGZhbHNlOyB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgaXNBY3RpdmU6IGlzQWN0aXZlLFxuICAgICAgICBwcm90ZWN0ZWRLZXlzOiB7fSxcbiAgICAgICAgbmVlZHNBbmltYXRpbmc6IHt9LFxuICAgICAgICBwcmV2UmVzb2x2ZWRWYWx1ZXM6IHt9LFxuICAgIH07XG59XG5mdW5jdGlvbiBjcmVhdGVTdGF0ZSgpIHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIF9hID0ge30sXG4gICAgICAgIF9hW0FuaW1hdGlvblR5cGUuQW5pbWF0ZV0gPSBjcmVhdGVUeXBlU3RhdGUodHJ1ZSksXG4gICAgICAgIF9hW0FuaW1hdGlvblR5cGUuSW5WaWV3XSA9IGNyZWF0ZVR5cGVTdGF0ZSgpLFxuICAgICAgICBfYVtBbmltYXRpb25UeXBlLkhvdmVyXSA9IGNyZWF0ZVR5cGVTdGF0ZSgpLFxuICAgICAgICBfYVtBbmltYXRpb25UeXBlLlRhcF0gPSBjcmVhdGVUeXBlU3RhdGUoKSxcbiAgICAgICAgX2FbQW5pbWF0aW9uVHlwZS5EcmFnXSA9IGNyZWF0ZVR5cGVTdGF0ZSgpLFxuICAgICAgICBfYVtBbmltYXRpb25UeXBlLkZvY3VzXSA9IGNyZWF0ZVR5cGVTdGF0ZSgpLFxuICAgICAgICBfYVtBbmltYXRpb25UeXBlLkV4aXRdID0gY3JlYXRlVHlwZVN0YXRlKCksXG4gICAgICAgIF9hO1xufVxuXG5leHBvcnQgeyBjaGVja1ZhcmlhbnRzRGlkQ2hhbmdlLCBjcmVhdGVBbmltYXRpb25TdGF0ZSwgdmFyaWFudFByaW9yaXR5T3JkZXIgfTtcbiIsImltcG9ydCB7IF9fcmVhZCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IHVzZUVmZmVjdCwgdXNlQ29udGV4dCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IGlzQW5pbWF0aW9uQ29udHJvbHMgfSBmcm9tICcuLi8uLi9hbmltYXRpb24vdXRpbHMvaXMtYW5pbWF0aW9uLWNvbnRyb2xzLm1qcyc7XG5pbXBvcnQgeyB1c2VQcmVzZW5jZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvQW5pbWF0ZVByZXNlbmNlL3VzZS1wcmVzZW5jZS5tanMnO1xuaW1wb3J0IHsgUHJlc2VuY2VDb250ZXh0IH0gZnJvbSAnLi4vLi4vY29udGV4dC9QcmVzZW5jZUNvbnRleHQubWpzJztcbmltcG9ydCB7IGNyZWF0ZUFuaW1hdGlvblN0YXRlIH0gZnJvbSAnLi4vLi4vcmVuZGVyL3V0aWxzL2FuaW1hdGlvbi1zdGF0ZS5tanMnO1xuaW1wb3J0IHsgQW5pbWF0aW9uVHlwZSB9IGZyb20gJy4uLy4uL3JlbmRlci91dGlscy90eXBlcy5tanMnO1xuaW1wb3J0IHsgbWFrZVJlbmRlcmxlc3NDb21wb25lbnQgfSBmcm9tICcuLi91dGlscy9tYWtlLXJlbmRlcmxlc3MtY29tcG9uZW50Lm1qcyc7XG5cbnZhciBhbmltYXRpb25zID0ge1xuICAgIGFuaW1hdGlvbjogbWFrZVJlbmRlcmxlc3NDb21wb25lbnQoZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgIHZhciB2aXN1YWxFbGVtZW50ID0gX2EudmlzdWFsRWxlbWVudCwgYW5pbWF0ZSA9IF9hLmFuaW1hdGU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXZSBkeW5hbWljYWxseSBnZW5lcmF0ZSB0aGUgQW5pbWF0aW9uU3RhdGUgbWFuYWdlciBhcyBpdCBjb250YWlucyBhIHJlZmVyZW5jZVxuICAgICAgICAgKiB0byB0aGUgdW5kZXJseWluZyBhbmltYXRpb24gbGlicmFyeS4gV2Ugb25seSB3YW50IHRvIGxvYWQgdGhhdCBpZiB3ZSBsb2FkIHRoaXMsXG4gICAgICAgICAqIHNvIHBlb3BsZSBjYW4gb3B0aW9uYWxseSBjb2RlIHNwbGl0IGl0IG91dCB1c2luZyB0aGUgYG1gIGNvbXBvbmVudC5cbiAgICAgICAgICovXG4gICAgICAgIHZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUgfHwgKHZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUgPSBjcmVhdGVBbmltYXRpb25TdGF0ZSh2aXN1YWxFbGVtZW50KSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBTdWJzY3JpYmUgYW55IHByb3ZpZGVkIEFuaW1hdGlvbkNvbnRyb2xzIHRvIHRoZSBjb21wb25lbnQncyBWaXN1YWxFbGVtZW50XG4gICAgICAgICAqL1xuICAgICAgICBpZiAoaXNBbmltYXRpb25Db250cm9scyhhbmltYXRlKSkge1xuICAgICAgICAgICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFuaW1hdGUuc3Vic2NyaWJlKHZpc3VhbEVsZW1lbnQpOyB9LCBbYW5pbWF0ZV0pO1xuICAgICAgICB9XG4gICAgfSksXG4gICAgZXhpdDogbWFrZVJlbmRlcmxlc3NDb21wb25lbnQoZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgICAgIHZhciBjdXN0b20gPSBwcm9wcy5jdXN0b20sIHZpc3VhbEVsZW1lbnQgPSBwcm9wcy52aXN1YWxFbGVtZW50O1xuICAgICAgICB2YXIgX2EgPSBfX3JlYWQodXNlUHJlc2VuY2UoKSwgMiksIGlzUHJlc2VudCA9IF9hWzBdLCBzYWZlVG9SZW1vdmUgPSBfYVsxXTtcbiAgICAgICAgdmFyIHByZXNlbmNlQ29udGV4dCA9IHVzZUNvbnRleHQoUHJlc2VuY2VDb250ZXh0KTtcbiAgICAgICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICB2aXN1YWxFbGVtZW50LmlzUHJlc2VudCA9IGlzUHJlc2VudDtcbiAgICAgICAgICAgIHZhciBhbmltYXRpb24gPSAoX2EgPSB2aXN1YWxFbGVtZW50LmFuaW1hdGlvblN0YXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Euc2V0QWN0aXZlKEFuaW1hdGlvblR5cGUuRXhpdCwgIWlzUHJlc2VudCwgeyBjdXN0b206IChfYiA9IHByZXNlbmNlQ29udGV4dCA9PT0gbnVsbCB8fCBwcmVzZW5jZUNvbnRleHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByZXNlbmNlQ29udGV4dC5jdXN0b20pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGN1c3RvbSB9KTtcbiAgICAgICAgICAgICFpc1ByZXNlbnQgJiYgKGFuaW1hdGlvbiA9PT0gbnVsbCB8fCBhbmltYXRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFuaW1hdGlvbi50aGVuKHNhZmVUb1JlbW92ZSkpO1xuICAgICAgICB9LCBbaXNQcmVzZW50XSk7XG4gICAgfSksXG59O1xuXG5leHBvcnQgeyBhbmltYXRpb25zIH07XG4iLCJjb25zdCBpc1BvaW50ID0gKHBvaW50KSA9PiBwb2ludC5oYXNPd25Qcm9wZXJ0eSgneCcpICYmIHBvaW50Lmhhc093blByb3BlcnR5KCd5Jyk7XG5cbmV4cG9ydCB7IGlzUG9pbnQgfTtcbiIsImltcG9ydCB7IGlzUG9pbnQgfSBmcm9tICcuL2lzLXBvaW50Lm1qcyc7XG5cbmNvbnN0IGlzUG9pbnQzRCA9IChwb2ludCkgPT4gaXNQb2ludChwb2ludCkgJiYgcG9pbnQuaGFzT3duUHJvcGVydHkoJ3onKTtcblxuZXhwb3J0IHsgaXNQb2ludDNEIH07XG4iLCJpbXBvcnQgeyBpc1BvaW50IH0gZnJvbSAnLi9pcy1wb2ludC5tanMnO1xuaW1wb3J0IHsgaXNQb2ludDNEIH0gZnJvbSAnLi9pcy1wb2ludC0zZC5tanMnO1xuaW1wb3J0IHsgaXNOdW0gfSBmcm9tICcuL2luYy5tanMnO1xuXG5jb25zdCBkaXN0YW5jZTFEID0gKGEsIGIpID0+IE1hdGguYWJzKGEgLSBiKTtcbmZ1bmN0aW9uIGRpc3RhbmNlKGEsIGIpIHtcbiAgICBpZiAoaXNOdW0oYSkgJiYgaXNOdW0oYikpIHtcbiAgICAgICAgcmV0dXJuIGRpc3RhbmNlMUQoYSwgYik7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzUG9pbnQoYSkgJiYgaXNQb2ludChiKSkge1xuICAgICAgICBjb25zdCB4RGVsdGEgPSBkaXN0YW5jZTFEKGEueCwgYi54KTtcbiAgICAgICAgY29uc3QgeURlbHRhID0gZGlzdGFuY2UxRChhLnksIGIueSk7XG4gICAgICAgIGNvbnN0IHpEZWx0YSA9IGlzUG9pbnQzRChhKSAmJiBpc1BvaW50M0QoYikgPyBkaXN0YW5jZTFEKGEueiwgYi56KSA6IDA7XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3coeERlbHRhLCAyKSArIE1hdGgucG93KHlEZWx0YSwgMikgKyBNYXRoLnBvdyh6RGVsdGEsIDIpKTtcbiAgICB9XG59XG5cbmV4cG9ydCB7IGRpc3RhbmNlIH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGlzTW91c2VFdmVudCwgaXNUb3VjaEV2ZW50IH0gZnJvbSAnLi91dGlscy9ldmVudC10eXBlLm1qcyc7XG5pbXBvcnQgeyBleHRyYWN0RXZlbnRJbmZvIH0gZnJvbSAnLi4vZXZlbnRzL2V2ZW50LWluZm8ubWpzJztcbmltcG9ydCBzeW5jLCB7IGdldEZyYW1lRGF0YSwgY2FuY2VsU3luYyB9IGZyb20gJ2ZyYW1lc3luYyc7XG5pbXBvcnQgeyBzZWNvbmRzVG9NaWxsaXNlY29uZHMgfSBmcm9tICcuLi91dGlscy90aW1lLWNvbnZlcnNpb24ubWpzJztcbmltcG9ydCB7IGFkZFBvaW50ZXJFdmVudCB9IGZyb20gJy4uL2V2ZW50cy91c2UtcG9pbnRlci1ldmVudC5tanMnO1xuaW1wb3J0IHsgZGlzdGFuY2UsIHBpcGUgfSBmcm9tICdwb3Btb3Rpb24nO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG52YXIgUGFuU2Vzc2lvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICBmdW5jdGlvbiBQYW5TZXNzaW9uKGV2ZW50LCBoYW5kbGVycywgX2EpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9iID0gX2EgPT09IHZvaWQgMCA/IHt9IDogX2EsIHRyYW5zZm9ybVBhZ2VQb2ludCA9IF9iLnRyYW5zZm9ybVBhZ2VQb2ludDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zdGFydEV2ZW50ID0gbnVsbDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5sYXN0TW92ZUV2ZW50ID0gbnVsbDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBpbnRlcm5hbFxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5sYXN0TW92ZUV2ZW50SW5mbyA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSB7fTtcbiAgICAgICAgdGhpcy51cGRhdGVQb2ludCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICghKF90aGlzLmxhc3RNb3ZlRXZlbnQgJiYgX3RoaXMubGFzdE1vdmVFdmVudEluZm8pKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBpbmZvID0gZ2V0UGFuSW5mbyhfdGhpcy5sYXN0TW92ZUV2ZW50SW5mbywgX3RoaXMuaGlzdG9yeSk7XG4gICAgICAgICAgICB2YXIgaXNQYW5TdGFydGVkID0gX3RoaXMuc3RhcnRFdmVudCAhPT0gbnVsbDtcbiAgICAgICAgICAgIC8vIE9ubHkgc3RhcnQgcGFubmluZyBpZiB0aGUgb2Zmc2V0IGlzIGxhcmdlciB0aGFuIDMgcGl4ZWxzLiBJZiB3ZSBtYWtlIGl0XG4gICAgICAgICAgICAvLyBhbnkgbGFyZ2VyIHRoYW4gdGhpcyB3ZSdsbCB3YW50IHRvIHJlc2V0IHRoZSBwb2ludGVyIGhpc3RvcnlcbiAgICAgICAgICAgIC8vIG9uIHRoZSBmaXJzdCB1cGRhdGUgdG8gYXZvaWQgdmlzdWFsIHNuYXBwaW5nIHRvIHRoZSBjdXJzb2UuXG4gICAgICAgICAgICB2YXIgaXNEaXN0YW5jZVBhc3RUaHJlc2hvbGQgPSBkaXN0YW5jZShpbmZvLm9mZnNldCwgeyB4OiAwLCB5OiAwIH0pID49IDM7XG4gICAgICAgICAgICBpZiAoIWlzUGFuU3RhcnRlZCAmJiAhaXNEaXN0YW5jZVBhc3RUaHJlc2hvbGQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdmFyIHBvaW50ID0gaW5mby5wb2ludDtcbiAgICAgICAgICAgIHZhciB0aW1lc3RhbXAgPSBnZXRGcmFtZURhdGEoKS50aW1lc3RhbXA7XG4gICAgICAgICAgICBfdGhpcy5oaXN0b3J5LnB1c2goX19hc3NpZ24oX19hc3NpZ24oe30sIHBvaW50KSwgeyB0aW1lc3RhbXA6IHRpbWVzdGFtcCB9KSk7XG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5oYW5kbGVycywgb25TdGFydCA9IF9hLm9uU3RhcnQsIG9uTW92ZSA9IF9hLm9uTW92ZTtcbiAgICAgICAgICAgIGlmICghaXNQYW5TdGFydGVkKSB7XG4gICAgICAgICAgICAgICAgb25TdGFydCAmJiBvblN0YXJ0KF90aGlzLmxhc3RNb3ZlRXZlbnQsIGluZm8pO1xuICAgICAgICAgICAgICAgIF90aGlzLnN0YXJ0RXZlbnQgPSBfdGhpcy5sYXN0TW92ZUV2ZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25Nb3ZlICYmIG9uTW92ZShfdGhpcy5sYXN0TW92ZUV2ZW50LCBpbmZvKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyTW92ZSA9IGZ1bmN0aW9uIChldmVudCwgaW5mbykge1xuICAgICAgICAgICAgX3RoaXMubGFzdE1vdmVFdmVudCA9IGV2ZW50O1xuICAgICAgICAgICAgX3RoaXMubGFzdE1vdmVFdmVudEluZm8gPSB0cmFuc2Zvcm1Qb2ludChpbmZvLCBfdGhpcy50cmFuc2Zvcm1QYWdlUG9pbnQpO1xuICAgICAgICAgICAgLy8gQmVjYXVzZSBTYWZhcmkgZG9lc24ndCB0cmlnZ2VyIG1vdXNldXAgZXZlbnRzIHdoZW4gaXQncyBhYm92ZSBhIGA8c2VsZWN0PmBcbiAgICAgICAgICAgIGlmIChpc01vdXNlRXZlbnQoZXZlbnQpICYmIGV2ZW50LmJ1dHRvbnMgPT09IDApIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5oYW5kbGVQb2ludGVyVXAoZXZlbnQsIGluZm8pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFRocm90dGxlIG1vdXNlIG1vdmUgZXZlbnQgdG8gb25jZSBwZXIgZnJhbWVcbiAgICAgICAgICAgIHN5bmMudXBkYXRlKF90aGlzLnVwZGF0ZVBvaW50LCB0cnVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyVXAgPSBmdW5jdGlvbiAoZXZlbnQsIGluZm8pIHtcbiAgICAgICAgICAgIF90aGlzLmVuZCgpO1xuICAgICAgICAgICAgdmFyIF9hID0gX3RoaXMuaGFuZGxlcnMsIG9uRW5kID0gX2Eub25FbmQsIG9uU2Vzc2lvbkVuZCA9IF9hLm9uU2Vzc2lvbkVuZDtcbiAgICAgICAgICAgIHZhciBwYW5JbmZvID0gZ2V0UGFuSW5mbyh0cmFuc2Zvcm1Qb2ludChpbmZvLCBfdGhpcy50cmFuc2Zvcm1QYWdlUG9pbnQpLCBfdGhpcy5oaXN0b3J5KTtcbiAgICAgICAgICAgIGlmIChfdGhpcy5zdGFydEV2ZW50ICYmIG9uRW5kKSB7XG4gICAgICAgICAgICAgICAgb25FbmQoZXZlbnQsIHBhbkluZm8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb25TZXNzaW9uRW5kICYmIG9uU2Vzc2lvbkVuZChldmVudCwgcGFuSW5mbyk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIElmIHdlIGhhdmUgbW9yZSB0aGFuIG9uZSB0b3VjaCwgZG9uJ3Qgc3RhcnQgZGV0ZWN0aW5nIHRoaXMgZ2VzdHVyZVxuICAgICAgICBpZiAoaXNUb3VjaEV2ZW50KGV2ZW50KSAmJiBldmVudC50b3VjaGVzLmxlbmd0aCA+IDEpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSBoYW5kbGVycztcbiAgICAgICAgdGhpcy50cmFuc2Zvcm1QYWdlUG9pbnQgPSB0cmFuc2Zvcm1QYWdlUG9pbnQ7XG4gICAgICAgIHZhciBpbmZvID0gZXh0cmFjdEV2ZW50SW5mbyhldmVudCk7XG4gICAgICAgIHZhciBpbml0aWFsSW5mbyA9IHRyYW5zZm9ybVBvaW50KGluZm8sIHRoaXMudHJhbnNmb3JtUGFnZVBvaW50KTtcbiAgICAgICAgdmFyIHBvaW50ID0gaW5pdGlhbEluZm8ucG9pbnQ7XG4gICAgICAgIHZhciB0aW1lc3RhbXAgPSBnZXRGcmFtZURhdGEoKS50aW1lc3RhbXA7XG4gICAgICAgIHRoaXMuaGlzdG9yeSA9IFtfX2Fzc2lnbihfX2Fzc2lnbih7fSwgcG9pbnQpLCB7IHRpbWVzdGFtcDogdGltZXN0YW1wIH0pXTtcbiAgICAgICAgdmFyIG9uU2Vzc2lvblN0YXJ0ID0gaGFuZGxlcnMub25TZXNzaW9uU3RhcnQ7XG4gICAgICAgIG9uU2Vzc2lvblN0YXJ0ICYmXG4gICAgICAgICAgICBvblNlc3Npb25TdGFydChldmVudCwgZ2V0UGFuSW5mbyhpbml0aWFsSW5mbywgdGhpcy5oaXN0b3J5KSk7XG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXJzID0gcGlwZShhZGRQb2ludGVyRXZlbnQod2luZG93LCBcInBvaW50ZXJtb3ZlXCIsIHRoaXMuaGFuZGxlUG9pbnRlck1vdmUpLCBhZGRQb2ludGVyRXZlbnQod2luZG93LCBcInBvaW50ZXJ1cFwiLCB0aGlzLmhhbmRsZVBvaW50ZXJVcCksIGFkZFBvaW50ZXJFdmVudCh3aW5kb3csIFwicG9pbnRlcmNhbmNlbFwiLCB0aGlzLmhhbmRsZVBvaW50ZXJVcCkpO1xuICAgIH1cbiAgICBQYW5TZXNzaW9uLnByb3RvdHlwZS51cGRhdGVIYW5kbGVycyA9IGZ1bmN0aW9uIChoYW5kbGVycykge1xuICAgICAgICB0aGlzLmhhbmRsZXJzID0gaGFuZGxlcnM7XG4gICAgfTtcbiAgICBQYW5TZXNzaW9uLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlTGlzdGVuZXJzICYmIHRoaXMucmVtb3ZlTGlzdGVuZXJzKCk7XG4gICAgICAgIGNhbmNlbFN5bmMudXBkYXRlKHRoaXMudXBkYXRlUG9pbnQpO1xuICAgIH07XG4gICAgcmV0dXJuIFBhblNlc3Npb247XG59KCkpO1xuZnVuY3Rpb24gdHJhbnNmb3JtUG9pbnQoaW5mbywgdHJhbnNmb3JtUGFnZVBvaW50KSB7XG4gICAgcmV0dXJuIHRyYW5zZm9ybVBhZ2VQb2ludCA/IHsgcG9pbnQ6IHRyYW5zZm9ybVBhZ2VQb2ludChpbmZvLnBvaW50KSB9IDogaW5mbztcbn1cbmZ1bmN0aW9uIHN1YnRyYWN0UG9pbnQoYSwgYikge1xuICAgIHJldHVybiB7IHg6IGEueCAtIGIueCwgeTogYS55IC0gYi55IH07XG59XG5mdW5jdGlvbiBnZXRQYW5JbmZvKF9hLCBoaXN0b3J5KSB7XG4gICAgdmFyIHBvaW50ID0gX2EucG9pbnQ7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcG9pbnQ6IHBvaW50LFxuICAgICAgICBkZWx0YTogc3VidHJhY3RQb2ludChwb2ludCwgbGFzdERldmljZVBvaW50KGhpc3RvcnkpKSxcbiAgICAgICAgb2Zmc2V0OiBzdWJ0cmFjdFBvaW50KHBvaW50LCBzdGFydERldmljZVBvaW50KGhpc3RvcnkpKSxcbiAgICAgICAgdmVsb2NpdHk6IGdldFZlbG9jaXR5KGhpc3RvcnksIDAuMSksXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHN0YXJ0RGV2aWNlUG9pbnQoaGlzdG9yeSkge1xuICAgIHJldHVybiBoaXN0b3J5WzBdO1xufVxuZnVuY3Rpb24gbGFzdERldmljZVBvaW50KGhpc3RvcnkpIHtcbiAgICByZXR1cm4gaGlzdG9yeVtoaXN0b3J5Lmxlbmd0aCAtIDFdO1xufVxuZnVuY3Rpb24gZ2V0VmVsb2NpdHkoaGlzdG9yeSwgdGltZURlbHRhKSB7XG4gICAgaWYgKGhpc3RvcnkubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4geyB4OiAwLCB5OiAwIH07XG4gICAgfVxuICAgIHZhciBpID0gaGlzdG9yeS5sZW5ndGggLSAxO1xuICAgIHZhciB0aW1lc3RhbXBlZFBvaW50ID0gbnVsbDtcbiAgICB2YXIgbGFzdFBvaW50ID0gbGFzdERldmljZVBvaW50KGhpc3RvcnkpO1xuICAgIHdoaWxlIChpID49IDApIHtcbiAgICAgICAgdGltZXN0YW1wZWRQb2ludCA9IGhpc3RvcnlbaV07XG4gICAgICAgIGlmIChsYXN0UG9pbnQudGltZXN0YW1wIC0gdGltZXN0YW1wZWRQb2ludC50aW1lc3RhbXAgPlxuICAgICAgICAgICAgc2Vjb25kc1RvTWlsbGlzZWNvbmRzKHRpbWVEZWx0YSkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGktLTtcbiAgICB9XG4gICAgaWYgKCF0aW1lc3RhbXBlZFBvaW50KSB7XG4gICAgICAgIHJldHVybiB7IHg6IDAsIHk6IDAgfTtcbiAgICB9XG4gICAgdmFyIHRpbWUgPSAobGFzdFBvaW50LnRpbWVzdGFtcCAtIHRpbWVzdGFtcGVkUG9pbnQudGltZXN0YW1wKSAvIDEwMDA7XG4gICAgaWYgKHRpbWUgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHsgeDogMCwgeTogMCB9O1xuICAgIH1cbiAgICB2YXIgY3VycmVudFZlbG9jaXR5ID0ge1xuICAgICAgICB4OiAobGFzdFBvaW50LnggLSB0aW1lc3RhbXBlZFBvaW50LngpIC8gdGltZSxcbiAgICAgICAgeTogKGxhc3RQb2ludC55IC0gdGltZXN0YW1wZWRQb2ludC55KSAvIHRpbWUsXG4gICAgfTtcbiAgICBpZiAoY3VycmVudFZlbG9jaXR5LnggPT09IEluZmluaXR5KSB7XG4gICAgICAgIGN1cnJlbnRWZWxvY2l0eS54ID0gMDtcbiAgICB9XG4gICAgaWYgKGN1cnJlbnRWZWxvY2l0eS55ID09PSBJbmZpbml0eSkge1xuICAgICAgICBjdXJyZW50VmVsb2NpdHkueSA9IDA7XG4gICAgfVxuICAgIHJldHVybiBjdXJyZW50VmVsb2NpdHk7XG59XG5cbmV4cG9ydCB7IFBhblNlc3Npb24gfTtcbiIsImltcG9ydCB7IG1peCwgZGlzdGFuY2UgfSBmcm9tICdwb3Btb3Rpb24nO1xuXG5mdW5jdGlvbiBjYWxjTGVuZ3RoKGF4aXMpIHtcbiAgICByZXR1cm4gYXhpcy5tYXggLSBheGlzLm1pbjtcbn1cbmZ1bmN0aW9uIGlzTmVhcih2YWx1ZSwgdGFyZ2V0LCBtYXhEaXN0YW5jZSkge1xuICAgIGlmICh0YXJnZXQgPT09IHZvaWQgMCkgeyB0YXJnZXQgPSAwOyB9XG4gICAgaWYgKG1heERpc3RhbmNlID09PSB2b2lkIDApIHsgbWF4RGlzdGFuY2UgPSAwLjAxOyB9XG4gICAgcmV0dXJuIGRpc3RhbmNlKHZhbHVlLCB0YXJnZXQpIDwgbWF4RGlzdGFuY2U7XG59XG5mdW5jdGlvbiBjYWxjQXhpc0RlbHRhKGRlbHRhLCBzb3VyY2UsIHRhcmdldCwgb3JpZ2luKSB7XG4gICAgaWYgKG9yaWdpbiA9PT0gdm9pZCAwKSB7IG9yaWdpbiA9IDAuNTsgfVxuICAgIGRlbHRhLm9yaWdpbiA9IG9yaWdpbjtcbiAgICBkZWx0YS5vcmlnaW5Qb2ludCA9IG1peChzb3VyY2UubWluLCBzb3VyY2UubWF4LCBkZWx0YS5vcmlnaW4pO1xuICAgIGRlbHRhLnNjYWxlID0gY2FsY0xlbmd0aCh0YXJnZXQpIC8gY2FsY0xlbmd0aChzb3VyY2UpO1xuICAgIGlmIChpc05lYXIoZGVsdGEuc2NhbGUsIDEsIDAuMDAwMSkgfHwgaXNOYU4oZGVsdGEuc2NhbGUpKVxuICAgICAgICBkZWx0YS5zY2FsZSA9IDE7XG4gICAgZGVsdGEudHJhbnNsYXRlID1cbiAgICAgICAgbWl4KHRhcmdldC5taW4sIHRhcmdldC5tYXgsIGRlbHRhLm9yaWdpbikgLSBkZWx0YS5vcmlnaW5Qb2ludDtcbiAgICBpZiAoaXNOZWFyKGRlbHRhLnRyYW5zbGF0ZSkgfHwgaXNOYU4oZGVsdGEudHJhbnNsYXRlKSlcbiAgICAgICAgZGVsdGEudHJhbnNsYXRlID0gMDtcbn1cbmZ1bmN0aW9uIGNhbGNCb3hEZWx0YShkZWx0YSwgc291cmNlLCB0YXJnZXQsIG9yaWdpbikge1xuICAgIGNhbGNBeGlzRGVsdGEoZGVsdGEueCwgc291cmNlLngsIHRhcmdldC54LCBvcmlnaW4gPT09IG51bGwgfHwgb3JpZ2luID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcmlnaW4ub3JpZ2luWCk7XG4gICAgY2FsY0F4aXNEZWx0YShkZWx0YS55LCBzb3VyY2UueSwgdGFyZ2V0LnksIG9yaWdpbiA9PT0gbnVsbCB8fCBvcmlnaW4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9yaWdpbi5vcmlnaW5ZKTtcbn1cbmZ1bmN0aW9uIGNhbGNSZWxhdGl2ZUF4aXModGFyZ2V0LCByZWxhdGl2ZSwgcGFyZW50KSB7XG4gICAgdGFyZ2V0Lm1pbiA9IHBhcmVudC5taW4gKyByZWxhdGl2ZS5taW47XG4gICAgdGFyZ2V0Lm1heCA9IHRhcmdldC5taW4gKyBjYWxjTGVuZ3RoKHJlbGF0aXZlKTtcbn1cbmZ1bmN0aW9uIGNhbGNSZWxhdGl2ZUJveCh0YXJnZXQsIHJlbGF0aXZlLCBwYXJlbnQpIHtcbiAgICBjYWxjUmVsYXRpdmVBeGlzKHRhcmdldC54LCByZWxhdGl2ZS54LCBwYXJlbnQueCk7XG4gICAgY2FsY1JlbGF0aXZlQXhpcyh0YXJnZXQueSwgcmVsYXRpdmUueSwgcGFyZW50LnkpO1xufVxuZnVuY3Rpb24gY2FsY1JlbGF0aXZlQXhpc1Bvc2l0aW9uKHRhcmdldCwgbGF5b3V0LCBwYXJlbnQpIHtcbiAgICB0YXJnZXQubWluID0gbGF5b3V0Lm1pbiAtIHBhcmVudC5taW47XG4gICAgdGFyZ2V0Lm1heCA9IHRhcmdldC5taW4gKyBjYWxjTGVuZ3RoKGxheW91dCk7XG59XG5mdW5jdGlvbiBjYWxjUmVsYXRpdmVQb3NpdGlvbih0YXJnZXQsIGxheW91dCwgcGFyZW50KSB7XG4gICAgY2FsY1JlbGF0aXZlQXhpc1Bvc2l0aW9uKHRhcmdldC54LCBsYXlvdXQueCwgcGFyZW50LngpO1xuICAgIGNhbGNSZWxhdGl2ZUF4aXNQb3NpdGlvbih0YXJnZXQueSwgbGF5b3V0LnksIHBhcmVudC55KTtcbn1cblxuZXhwb3J0IHsgY2FsY0F4aXNEZWx0YSwgY2FsY0JveERlbHRhLCBjYWxjTGVuZ3RoLCBjYWxjUmVsYXRpdmVBeGlzLCBjYWxjUmVsYXRpdmVBeGlzUG9zaXRpb24sIGNhbGNSZWxhdGl2ZUJveCwgY2FsY1JlbGF0aXZlUG9zaXRpb24sIGlzTmVhciB9O1xuIiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgY2xhbXAsIG1peCwgcHJvZ3Jlc3MgfSBmcm9tICdwb3Btb3Rpb24nO1xuaW1wb3J0IHsgY2FsY0xlbmd0aCB9IGZyb20gJy4uLy4uLy4uL3Byb2plY3Rpb24vZ2VvbWV0cnkvZGVsdGEtY2FsYy5tanMnO1xuXG4vKipcbiAqIEFwcGx5IGNvbnN0cmFpbnRzIHRvIGEgcG9pbnQuIFRoZXNlIGNvbnN0cmFpbnRzIGFyZSBib3RoIHBoeXNpY2FsIGFsb25nIGFuXG4gKiBheGlzLCBhbmQgYW4gZWxhc3RpYyBmYWN0b3IgdGhhdCBkZXRlcm1pbmVzIGhvdyBtdWNoIHRvIGNvbnN0cmFpbiB0aGUgcG9pbnRcbiAqIGJ5IGlmIGl0IGRvZXMgbGllIG91dHNpZGUgdGhlIGRlZmluZWQgcGFyYW1ldGVycy5cbiAqL1xuZnVuY3Rpb24gYXBwbHlDb25zdHJhaW50cyhwb2ludCwgX2EsIGVsYXN0aWMpIHtcbiAgICB2YXIgbWluID0gX2EubWluLCBtYXggPSBfYS5tYXg7XG4gICAgaWYgKG1pbiAhPT0gdW5kZWZpbmVkICYmIHBvaW50IDwgbWluKSB7XG4gICAgICAgIC8vIElmIHdlIGhhdmUgYSBtaW4gcG9pbnQgZGVmaW5lZCwgYW5kIHRoaXMgaXMgb3V0c2lkZSBvZiB0aGF0LCBjb25zdHJhaW5cbiAgICAgICAgcG9pbnQgPSBlbGFzdGljID8gbWl4KG1pbiwgcG9pbnQsIGVsYXN0aWMubWluKSA6IE1hdGgubWF4KHBvaW50LCBtaW4pO1xuICAgIH1cbiAgICBlbHNlIGlmIChtYXggIT09IHVuZGVmaW5lZCAmJiBwb2ludCA+IG1heCkge1xuICAgICAgICAvLyBJZiB3ZSBoYXZlIGEgbWF4IHBvaW50IGRlZmluZWQsIGFuZCB0aGlzIGlzIG91dHNpZGUgb2YgdGhhdCwgY29uc3RyYWluXG4gICAgICAgIHBvaW50ID0gZWxhc3RpYyA/IG1peChtYXgsIHBvaW50LCBlbGFzdGljLm1heCkgOiBNYXRoLm1pbihwb2ludCwgbWF4KTtcbiAgICB9XG4gICAgcmV0dXJuIHBvaW50O1xufVxuLyoqXG4gKiBDYWxjdWxhdGUgY29uc3RyYWludHMgaW4gdGVybXMgb2YgdGhlIHZpZXdwb3J0IHdoZW4gZGVmaW5lZCByZWxhdGl2ZWx5IHRvIHRoZVxuICogbWVhc3VyZWQgYXhpcy4gVGhpcyBpcyBtZWFzdXJlZCBmcm9tIHRoZSBuZWFyZXN0IGVkZ2UsIHNvIGEgbWF4IGNvbnN0cmFpbnQgb2YgMjAwXG4gKiBvbiBhbiBheGlzIHdpdGggYSBtYXggdmFsdWUgb2YgMzAwIHdvdWxkIHJldHVybiBhIGNvbnN0cmFpbnQgb2YgNTAwIC0gYXhpcyBsZW5ndGhcbiAqL1xuZnVuY3Rpb24gY2FsY1JlbGF0aXZlQXhpc0NvbnN0cmFpbnRzKGF4aXMsIG1pbiwgbWF4KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbWluOiBtaW4gIT09IHVuZGVmaW5lZCA/IGF4aXMubWluICsgbWluIDogdW5kZWZpbmVkLFxuICAgICAgICBtYXg6IG1heCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGF4aXMubWF4ICsgbWF4IC0gKGF4aXMubWF4IC0gYXhpcy5taW4pXG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICB9O1xufVxuLyoqXG4gKiBDYWxjdWxhdGUgY29uc3RyYWludHMgaW4gdGVybXMgb2YgdGhlIHZpZXdwb3J0IHdoZW5cbiAqIGRlZmluZWQgcmVsYXRpdmVseSB0byB0aGUgbWVhc3VyZWQgYm91bmRpbmcgYm94LlxuICovXG5mdW5jdGlvbiBjYWxjUmVsYXRpdmVDb25zdHJhaW50cyhsYXlvdXRCb3gsIF9hKSB7XG4gICAgdmFyIHRvcCA9IF9hLnRvcCwgbGVmdCA9IF9hLmxlZnQsIGJvdHRvbSA9IF9hLmJvdHRvbSwgcmlnaHQgPSBfYS5yaWdodDtcbiAgICByZXR1cm4ge1xuICAgICAgICB4OiBjYWxjUmVsYXRpdmVBeGlzQ29uc3RyYWludHMobGF5b3V0Qm94LngsIGxlZnQsIHJpZ2h0KSxcbiAgICAgICAgeTogY2FsY1JlbGF0aXZlQXhpc0NvbnN0cmFpbnRzKGxheW91dEJveC55LCB0b3AsIGJvdHRvbSksXG4gICAgfTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlIHZpZXdwb3J0IGNvbnN0cmFpbnRzIHdoZW4gZGVmaW5lZCBhcyBhbm90aGVyIHZpZXdwb3J0LXJlbGF0aXZlIGF4aXNcbiAqL1xuZnVuY3Rpb24gY2FsY1ZpZXdwb3J0QXhpc0NvbnN0cmFpbnRzKGxheW91dEF4aXMsIGNvbnN0cmFpbnRzQXhpcykge1xuICAgIHZhciBfYTtcbiAgICB2YXIgbWluID0gY29uc3RyYWludHNBeGlzLm1pbiAtIGxheW91dEF4aXMubWluO1xuICAgIHZhciBtYXggPSBjb25zdHJhaW50c0F4aXMubWF4IC0gbGF5b3V0QXhpcy5tYXg7XG4gICAgLy8gSWYgdGhlIGNvbnN0cmFpbnRzIGF4aXMgaXMgYWN0dWFsbHkgc21hbGxlciB0aGFuIHRoZSBsYXlvdXQgYXhpcyB0aGVuIHdlIGNhblxuICAgIC8vIGZsaXAgdGhlIGNvbnN0cmFpbnRzXG4gICAgaWYgKGNvbnN0cmFpbnRzQXhpcy5tYXggLSBjb25zdHJhaW50c0F4aXMubWluIDxcbiAgICAgICAgbGF5b3V0QXhpcy5tYXggLSBsYXlvdXRBeGlzLm1pbikge1xuICAgICAgICBfYSA9IF9fcmVhZChbbWF4LCBtaW5dLCAyKSwgbWluID0gX2FbMF0sIG1heCA9IF9hWzFdO1xuICAgIH1cbiAgICByZXR1cm4geyBtaW46IG1pbiwgbWF4OiBtYXggfTtcbn1cbi8qKlxuICogQ2FsY3VsYXRlIHZpZXdwb3J0IGNvbnN0cmFpbnRzIHdoZW4gZGVmaW5lZCBhcyBhbm90aGVyIHZpZXdwb3J0LXJlbGF0aXZlIGJveFxuICovXG5mdW5jdGlvbiBjYWxjVmlld3BvcnRDb25zdHJhaW50cyhsYXlvdXRCb3gsIGNvbnN0cmFpbnRzQm94KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogY2FsY1ZpZXdwb3J0QXhpc0NvbnN0cmFpbnRzKGxheW91dEJveC54LCBjb25zdHJhaW50c0JveC54KSxcbiAgICAgICAgeTogY2FsY1ZpZXdwb3J0QXhpc0NvbnN0cmFpbnRzKGxheW91dEJveC55LCBjb25zdHJhaW50c0JveC55KSxcbiAgICB9O1xufVxuLyoqXG4gKiBDYWxjdWxhdGUgYSB0cmFuc2Zvcm0gb3JpZ2luIHJlbGF0aXZlIHRvIHRoZSBzb3VyY2UgYXhpcywgYmV0d2VlbiAwLTEsIHRoYXQgcmVzdWx0c1xuICogaW4gYW4gYXN0aGV0aWNhbGx5IHBsZWFzaW5nIHNjYWxlL3RyYW5zZm9ybSBuZWVkZWQgdG8gcHJvamVjdCBmcm9tIHNvdXJjZSB0byB0YXJnZXQuXG4gKi9cbmZ1bmN0aW9uIGNhbGNPcmlnaW4oc291cmNlLCB0YXJnZXQpIHtcbiAgICB2YXIgb3JpZ2luID0gMC41O1xuICAgIHZhciBzb3VyY2VMZW5ndGggPSBjYWxjTGVuZ3RoKHNvdXJjZSk7XG4gICAgdmFyIHRhcmdldExlbmd0aCA9IGNhbGNMZW5ndGgodGFyZ2V0KTtcbiAgICBpZiAodGFyZ2V0TGVuZ3RoID4gc291cmNlTGVuZ3RoKSB7XG4gICAgICAgIG9yaWdpbiA9IHByb2dyZXNzKHRhcmdldC5taW4sIHRhcmdldC5tYXggLSBzb3VyY2VMZW5ndGgsIHNvdXJjZS5taW4pO1xuICAgIH1cbiAgICBlbHNlIGlmIChzb3VyY2VMZW5ndGggPiB0YXJnZXRMZW5ndGgpIHtcbiAgICAgICAgb3JpZ2luID0gcHJvZ3Jlc3Moc291cmNlLm1pbiwgc291cmNlLm1heCAtIHRhcmdldExlbmd0aCwgdGFyZ2V0Lm1pbik7XG4gICAgfVxuICAgIHJldHVybiBjbGFtcCgwLCAxLCBvcmlnaW4pO1xufVxuLyoqXG4gKiBSZWJhc2UgdGhlIGNhbGN1bGF0ZWQgdmlld3BvcnQgY29uc3RyYWludHMgcmVsYXRpdmUgdG8gdGhlIGxheW91dC5taW4gcG9pbnQuXG4gKi9cbmZ1bmN0aW9uIHJlYmFzZUF4aXNDb25zdHJhaW50cyhsYXlvdXQsIGNvbnN0cmFpbnRzKSB7XG4gICAgdmFyIHJlbGF0aXZlQ29uc3RyYWludHMgPSB7fTtcbiAgICBpZiAoY29uc3RyYWludHMubWluICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVsYXRpdmVDb25zdHJhaW50cy5taW4gPSBjb25zdHJhaW50cy5taW4gLSBsYXlvdXQubWluO1xuICAgIH1cbiAgICBpZiAoY29uc3RyYWludHMubWF4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmVsYXRpdmVDb25zdHJhaW50cy5tYXggPSBjb25zdHJhaW50cy5tYXggLSBsYXlvdXQubWluO1xuICAgIH1cbiAgICByZXR1cm4gcmVsYXRpdmVDb25zdHJhaW50cztcbn1cbnZhciBkZWZhdWx0RWxhc3RpYyA9IDAuMzU7XG4vKipcbiAqIEFjY2VwdHMgYSBkcmFnRWxhc3RpYyBwcm9wIGFuZCByZXR1cm5zIHJlc29sdmVkIGVsYXN0aWMgdmFsdWVzIGZvciBlYWNoIGF4aXMuXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVEcmFnRWxhc3RpYyhkcmFnRWxhc3RpYykge1xuICAgIGlmIChkcmFnRWxhc3RpYyA9PT0gdm9pZCAwKSB7IGRyYWdFbGFzdGljID0gZGVmYXVsdEVsYXN0aWM7IH1cbiAgICBpZiAoZHJhZ0VsYXN0aWMgPT09IGZhbHNlKSB7XG4gICAgICAgIGRyYWdFbGFzdGljID0gMDtcbiAgICB9XG4gICAgZWxzZSBpZiAoZHJhZ0VsYXN0aWMgPT09IHRydWUpIHtcbiAgICAgICAgZHJhZ0VsYXN0aWMgPSBkZWZhdWx0RWxhc3RpYztcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgeDogcmVzb2x2ZUF4aXNFbGFzdGljKGRyYWdFbGFzdGljLCBcImxlZnRcIiwgXCJyaWdodFwiKSxcbiAgICAgICAgeTogcmVzb2x2ZUF4aXNFbGFzdGljKGRyYWdFbGFzdGljLCBcInRvcFwiLCBcImJvdHRvbVwiKSxcbiAgICB9O1xufVxuZnVuY3Rpb24gcmVzb2x2ZUF4aXNFbGFzdGljKGRyYWdFbGFzdGljLCBtaW5MYWJlbCwgbWF4TGFiZWwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBtaW46IHJlc29sdmVQb2ludEVsYXN0aWMoZHJhZ0VsYXN0aWMsIG1pbkxhYmVsKSxcbiAgICAgICAgbWF4OiByZXNvbHZlUG9pbnRFbGFzdGljKGRyYWdFbGFzdGljLCBtYXhMYWJlbCksXG4gICAgfTtcbn1cbmZ1bmN0aW9uIHJlc29sdmVQb2ludEVsYXN0aWMoZHJhZ0VsYXN0aWMsIGxhYmVsKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiB0eXBlb2YgZHJhZ0VsYXN0aWMgPT09IFwibnVtYmVyXCJcbiAgICAgICAgPyBkcmFnRWxhc3RpY1xuICAgICAgICA6IChfYSA9IGRyYWdFbGFzdGljW2xhYmVsXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcbn1cblxuZXhwb3J0IHsgYXBwbHlDb25zdHJhaW50cywgY2FsY09yaWdpbiwgY2FsY1JlbGF0aXZlQXhpc0NvbnN0cmFpbnRzLCBjYWxjUmVsYXRpdmVDb25zdHJhaW50cywgY2FsY1ZpZXdwb3J0QXhpc0NvbnN0cmFpbnRzLCBjYWxjVmlld3BvcnRDb25zdHJhaW50cywgZGVmYXVsdEVsYXN0aWMsIHJlYmFzZUF4aXNDb25zdHJhaW50cywgcmVzb2x2ZUF4aXNFbGFzdGljLCByZXNvbHZlRHJhZ0VsYXN0aWMsIHJlc29sdmVQb2ludEVsYXN0aWMgfTtcbiIsInZhciBjcmVhdGVBeGlzRGVsdGEgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAoe1xuICAgIHRyYW5zbGF0ZTogMCxcbiAgICBzY2FsZTogMSxcbiAgICBvcmlnaW46IDAsXG4gICAgb3JpZ2luUG9pbnQ6IDAsXG59KTsgfTtcbnZhciBjcmVhdGVEZWx0YSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7XG4gICAgeDogY3JlYXRlQXhpc0RlbHRhKCksXG4gICAgeTogY3JlYXRlQXhpc0RlbHRhKCksXG59KTsgfTtcbnZhciBjcmVhdGVBeGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKHsgbWluOiAwLCBtYXg6IDAgfSk7IH07XG52YXIgY3JlYXRlQm94ID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gKHtcbiAgICB4OiBjcmVhdGVBeGlzKCksXG4gICAgeTogY3JlYXRlQXhpcygpLFxufSk7IH07XG5cbmV4cG9ydCB7IGNyZWF0ZUF4aXMsIGNyZWF0ZUF4aXNEZWx0YSwgY3JlYXRlQm94LCBjcmVhdGVEZWx0YSB9O1xuIiwiZnVuY3Rpb24gZWFjaEF4aXMoY2FsbGJhY2spIHtcbiAgICByZXR1cm4gW2NhbGxiYWNrKFwieFwiKSwgY2FsbGJhY2soXCJ5XCIpXTtcbn1cblxuZXhwb3J0IHsgZWFjaEF4aXMgfTtcbiIsIi8qKlxuICogQm91bmRpbmcgYm94ZXMgdGVuZCB0byBiZSBkZWZpbmVkIGFzIHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbS4gRm9yIHZhcmlvdXMgb3BlcmF0aW9uc1xuICogaXQncyBlYXNpZXIgdG8gY29uc2lkZXIgZWFjaCBheGlzIGluZGl2aWR1YWxseS4gVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgYm91bmRpbmcgYm94XG4gKiBhcyBhIG1hcCBvZiBzaW5nbGUtYXhpcyBtaW4vbWF4IHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gY29udmVydEJvdW5kaW5nQm94VG9Cb3goX2EpIHtcbiAgICB2YXIgdG9wID0gX2EudG9wLCBsZWZ0ID0gX2EubGVmdCwgcmlnaHQgPSBfYS5yaWdodCwgYm90dG9tID0gX2EuYm90dG9tO1xuICAgIHJldHVybiB7XG4gICAgICAgIHg6IHsgbWluOiBsZWZ0LCBtYXg6IHJpZ2h0IH0sXG4gICAgICAgIHk6IHsgbWluOiB0b3AsIG1heDogYm90dG9tIH0sXG4gICAgfTtcbn1cbmZ1bmN0aW9uIGNvbnZlcnRCb3hUb0JvdW5kaW5nQm94KF9hKSB7XG4gICAgdmFyIHggPSBfYS54LCB5ID0gX2EueTtcbiAgICByZXR1cm4geyB0b3A6IHkubWluLCByaWdodDogeC5tYXgsIGJvdHRvbTogeS5tYXgsIGxlZnQ6IHgubWluIH07XG59XG4vKipcbiAqIEFwcGxpZXMgYSBUcmFuc2Zvcm1Qb2ludCBmdW5jdGlvbiB0byBhIGJvdW5kaW5nIGJveC4gVHJhbnNmb3JtUG9pbnQgaXMgdXN1YWxseSBhIGZ1bmN0aW9uXG4gKiBwcm92aWRlZCBieSBGcmFtZXIgdG8gYWxsb3cgbWVhc3VyZWQgcG9pbnRzIHRvIGJlIGNvcnJlY3RlZCBmb3IgZGV2aWNlIHNjYWxpbmcuIFRoaXMgaXMgdXNlZFxuICogd2hlbiBtZWFzdXJpbmcgRE9NIGVsZW1lbnRzIGFuZCBET00gZXZlbnQgcG9pbnRzLlxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm1Cb3hQb2ludHMocG9pbnQsIHRyYW5zZm9ybVBvaW50KSB7XG4gICAgaWYgKCF0cmFuc2Zvcm1Qb2ludClcbiAgICAgICAgcmV0dXJuIHBvaW50O1xuICAgIHZhciB0b3BMZWZ0ID0gdHJhbnNmb3JtUG9pbnQoeyB4OiBwb2ludC5sZWZ0LCB5OiBwb2ludC50b3AgfSk7XG4gICAgdmFyIGJvdHRvbVJpZ2h0ID0gdHJhbnNmb3JtUG9pbnQoeyB4OiBwb2ludC5yaWdodCwgeTogcG9pbnQuYm90dG9tIH0pO1xuICAgIHJldHVybiB7XG4gICAgICAgIHRvcDogdG9wTGVmdC55LFxuICAgICAgICBsZWZ0OiB0b3BMZWZ0LngsXG4gICAgICAgIGJvdHRvbTogYm90dG9tUmlnaHQueSxcbiAgICAgICAgcmlnaHQ6IGJvdHRvbVJpZ2h0LngsXG4gICAgfTtcbn1cblxuZXhwb3J0IHsgY29udmVydEJvdW5kaW5nQm94VG9Cb3gsIGNvbnZlcnRCb3hUb0JvdW5kaW5nQm94LCB0cmFuc2Zvcm1Cb3hQb2ludHMgfTtcbiIsImZ1bmN0aW9uIGlzSWRlbnRpdHlTY2FsZShzY2FsZSkge1xuICAgIHJldHVybiBzY2FsZSA9PT0gdW5kZWZpbmVkIHx8IHNjYWxlID09PSAxO1xufVxuZnVuY3Rpb24gaGFzU2NhbGUoX2EpIHtcbiAgICB2YXIgc2NhbGUgPSBfYS5zY2FsZSwgc2NhbGVYID0gX2Euc2NhbGVYLCBzY2FsZVkgPSBfYS5zY2FsZVk7XG4gICAgcmV0dXJuICghaXNJZGVudGl0eVNjYWxlKHNjYWxlKSB8fFxuICAgICAgICAhaXNJZGVudGl0eVNjYWxlKHNjYWxlWCkgfHxcbiAgICAgICAgIWlzSWRlbnRpdHlTY2FsZShzY2FsZVkpKTtcbn1cbmZ1bmN0aW9uIGhhc1RyYW5zZm9ybSh2YWx1ZXMpIHtcbiAgICByZXR1cm4gKGhhc1NjYWxlKHZhbHVlcykgfHxcbiAgICAgICAgaGFzVHJhbnNsYXRlKHZhbHVlcy54KSB8fFxuICAgICAgICBoYXNUcmFuc2xhdGUodmFsdWVzLnkpIHx8XG4gICAgICAgIHZhbHVlcy56IHx8XG4gICAgICAgIHZhbHVlcy5yb3RhdGUgfHxcbiAgICAgICAgdmFsdWVzLnJvdGF0ZVggfHxcbiAgICAgICAgdmFsdWVzLnJvdGF0ZVkpO1xufVxuZnVuY3Rpb24gaGFzVHJhbnNsYXRlKHZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlICYmIHZhbHVlICE9PSBcIjAlXCI7XG59XG5cbmV4cG9ydCB7IGhhc1NjYWxlLCBoYXNUcmFuc2Zvcm0gfTtcbiIsImltcG9ydCB7IF9fcmVhZCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IG1peCB9IGZyb20gJ3BvcG1vdGlvbic7XG5pbXBvcnQgeyBoYXNUcmFuc2Zvcm0gfSBmcm9tICcuLi91dGlscy9oYXMtdHJhbnNmb3JtLm1qcyc7XG5cbi8qKlxuICogU2NhbGVzIGEgcG9pbnQgYmFzZWQgb24gYSBmYWN0b3IgYW5kIGFuIG9yaWdpblBvaW50XG4gKi9cbmZ1bmN0aW9uIHNjYWxlUG9pbnQocG9pbnQsIHNjYWxlLCBvcmlnaW5Qb2ludCkge1xuICAgIHZhciBkaXN0YW5jZUZyb21PcmlnaW4gPSBwb2ludCAtIG9yaWdpblBvaW50O1xuICAgIHZhciBzY2FsZWQgPSBzY2FsZSAqIGRpc3RhbmNlRnJvbU9yaWdpbjtcbiAgICByZXR1cm4gb3JpZ2luUG9pbnQgKyBzY2FsZWQ7XG59XG4vKipcbiAqIEFwcGxpZXMgYSB0cmFuc2xhdGUvc2NhbGUgZGVsdGEgdG8gYSBwb2ludFxuICovXG5mdW5jdGlvbiBhcHBseVBvaW50RGVsdGEocG9pbnQsIHRyYW5zbGF0ZSwgc2NhbGUsIG9yaWdpblBvaW50LCBib3hTY2FsZSkge1xuICAgIGlmIChib3hTY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHBvaW50ID0gc2NhbGVQb2ludChwb2ludCwgYm94U2NhbGUsIG9yaWdpblBvaW50KTtcbiAgICB9XG4gICAgcmV0dXJuIHNjYWxlUG9pbnQocG9pbnQsIHNjYWxlLCBvcmlnaW5Qb2ludCkgKyB0cmFuc2xhdGU7XG59XG4vKipcbiAqIEFwcGxpZXMgYSB0cmFuc2xhdGUvc2NhbGUgZGVsdGEgdG8gYW4gYXhpc1xuICovXG5mdW5jdGlvbiBhcHBseUF4aXNEZWx0YShheGlzLCB0cmFuc2xhdGUsIHNjYWxlLCBvcmlnaW5Qb2ludCwgYm94U2NhbGUpIHtcbiAgICBpZiAodHJhbnNsYXRlID09PSB2b2lkIDApIHsgdHJhbnNsYXRlID0gMDsgfVxuICAgIGlmIChzY2FsZSA9PT0gdm9pZCAwKSB7IHNjYWxlID0gMTsgfVxuICAgIGF4aXMubWluID0gYXBwbHlQb2ludERlbHRhKGF4aXMubWluLCB0cmFuc2xhdGUsIHNjYWxlLCBvcmlnaW5Qb2ludCwgYm94U2NhbGUpO1xuICAgIGF4aXMubWF4ID0gYXBwbHlQb2ludERlbHRhKGF4aXMubWF4LCB0cmFuc2xhdGUsIHNjYWxlLCBvcmlnaW5Qb2ludCwgYm94U2NhbGUpO1xufVxuLyoqXG4gKiBBcHBsaWVzIGEgdHJhbnNsYXRlL3NjYWxlIGRlbHRhIHRvIGEgYm94XG4gKi9cbmZ1bmN0aW9uIGFwcGx5Qm94RGVsdGEoYm94LCBfYSkge1xuICAgIHZhciB4ID0gX2EueCwgeSA9IF9hLnk7XG4gICAgYXBwbHlBeGlzRGVsdGEoYm94LngsIHgudHJhbnNsYXRlLCB4LnNjYWxlLCB4Lm9yaWdpblBvaW50KTtcbiAgICBhcHBseUF4aXNEZWx0YShib3gueSwgeS50cmFuc2xhdGUsIHkuc2NhbGUsIHkub3JpZ2luUG9pbnQpO1xufVxuLyoqXG4gKiBBcHBseSBhIHRyZWUgb2YgZGVsdGFzIHRvIGEgYm94LiBXZSBkbyB0aGlzIHRvIGNhbGN1bGF0ZSB0aGUgZWZmZWN0IG9mIGFsbCB0aGUgdHJhbnNmb3Jtc1xuICogaW4gYSB0cmVlIHVwb24gb3VyIGJveCBiZWZvcmUgdGhlbiBjYWxjdWxhdGluZyBob3cgdG8gcHJvamVjdCBpdCBpbnRvIG91ciBkZXNpcmVkIHZpZXdwb3J0LXJlbGF0aXZlIGJveFxuICpcbiAqIFRoaXMgaXMgdGhlIGZpbmFsIG5lc3RlZCBsb29wIHdpdGhpbiB1cGRhdGVMYXlvdXREZWx0YSBmb3IgZnV0dXJlIHJlZmFjdG9yaW5nXG4gKi9cbmZ1bmN0aW9uIGFwcGx5VHJlZURlbHRhcyhib3gsIHRyZWVTY2FsZSwgdHJlZVBhdGgsIGlzU2hhcmVkVHJhbnNpdGlvbikge1xuICAgIHZhciBfYSwgX2I7XG4gICAgaWYgKGlzU2hhcmVkVHJhbnNpdGlvbiA9PT0gdm9pZCAwKSB7IGlzU2hhcmVkVHJhbnNpdGlvbiA9IGZhbHNlOyB9XG4gICAgdmFyIHRyZWVMZW5ndGggPSB0cmVlUGF0aC5sZW5ndGg7XG4gICAgaWYgKCF0cmVlTGVuZ3RoKVxuICAgICAgICByZXR1cm47XG4gICAgLy8gUmVzZXQgdGhlIHRyZWVTY2FsZVxuICAgIHRyZWVTY2FsZS54ID0gdHJlZVNjYWxlLnkgPSAxO1xuICAgIHZhciBub2RlO1xuICAgIHZhciBkZWx0YTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRyZWVMZW5ndGg7IGkrKykge1xuICAgICAgICBub2RlID0gdHJlZVBhdGhbaV07XG4gICAgICAgIGRlbHRhID0gbm9kZS5wcm9qZWN0aW9uRGVsdGE7XG4gICAgICAgIGlmICgoKF9iID0gKF9hID0gbm9kZS5pbnN0YW5jZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0eWxlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZGlzcGxheSkgPT09IFwiY29udGVudHNcIilcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAoaXNTaGFyZWRUcmFuc2l0aW9uICYmXG4gICAgICAgICAgICBub2RlLm9wdGlvbnMubGF5b3V0U2Nyb2xsICYmXG4gICAgICAgICAgICBub2RlLnNjcm9sbCAmJlxuICAgICAgICAgICAgbm9kZSAhPT0gbm9kZS5yb290KSB7XG4gICAgICAgICAgICB0cmFuc2Zvcm1Cb3goYm94LCB7IHg6IC1ub2RlLnNjcm9sbC54LCB5OiAtbm9kZS5zY3JvbGwueSB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVsdGEpIHtcbiAgICAgICAgICAgIC8vIEluY29wb3JhdGUgZWFjaCBhbmNlc3RvcidzIHNjYWxlIGludG8gYSBjdWxtdWxhdGl2ZSB0cmVlU2NhbGUgZm9yIHRoaXMgY29tcG9uZW50XG4gICAgICAgICAgICB0cmVlU2NhbGUueCAqPSBkZWx0YS54LnNjYWxlO1xuICAgICAgICAgICAgdHJlZVNjYWxlLnkgKj0gZGVsdGEueS5zY2FsZTtcbiAgICAgICAgICAgIC8vIEFwcGx5IGVhY2ggYW5jZXN0b3IncyBjYWxjdWxhdGVkIGRlbHRhIGludG8gdGhpcyBjb21wb25lbnQncyByZWNvcmRlZCBsYXlvdXQgYm94XG4gICAgICAgICAgICBhcHBseUJveERlbHRhKGJveCwgZGVsdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc1NoYXJlZFRyYW5zaXRpb24gJiYgaGFzVHJhbnNmb3JtKG5vZGUubGF0ZXN0VmFsdWVzKSkge1xuICAgICAgICAgICAgdHJhbnNmb3JtQm94KGJveCwgbm9kZS5sYXRlc3RWYWx1ZXMpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdHJhbnNsYXRlQXhpcyhheGlzLCBkaXN0YW5jZSkge1xuICAgIGF4aXMubWluID0gYXhpcy5taW4gKyBkaXN0YW5jZTtcbiAgICBheGlzLm1heCA9IGF4aXMubWF4ICsgZGlzdGFuY2U7XG59XG4vKipcbiAqIEFwcGx5IGEgdHJhbnNmb3JtIHRvIGFuIGF4aXMgZnJvbSB0aGUgbGF0ZXN0IHJlc29sdmVkIG1vdGlvbiB2YWx1ZXMuXG4gKiBUaGlzIGZ1bmN0aW9uIGJhc2ljYWxseSBhY3RzIGFzIGEgYnJpZGdlIGJldHdlZW4gYSBmbGF0IG1vdGlvbiB2YWx1ZSBtYXBcbiAqIGFuZCBhcHBseUF4aXNEZWx0YVxuICovXG5mdW5jdGlvbiB0cmFuc2Zvcm1BeGlzKGF4aXMsIHRyYW5zZm9ybXMsIF9hKSB7XG4gICAgdmFyIF9iID0gX19yZWFkKF9hLCAzKSwga2V5ID0gX2JbMF0sIHNjYWxlS2V5ID0gX2JbMV0sIG9yaWdpbktleSA9IF9iWzJdO1xuICAgIHZhciBheGlzT3JpZ2luID0gdHJhbnNmb3Jtc1tvcmlnaW5LZXldICE9PSB1bmRlZmluZWQgPyB0cmFuc2Zvcm1zW29yaWdpbktleV0gOiAwLjU7XG4gICAgdmFyIG9yaWdpblBvaW50ID0gbWl4KGF4aXMubWluLCBheGlzLm1heCwgYXhpc09yaWdpbik7XG4gICAgLy8gQXBwbHkgdGhlIGF4aXMgZGVsdGEgdG8gdGhlIGZpbmFsIGF4aXNcbiAgICBhcHBseUF4aXNEZWx0YShheGlzLCB0cmFuc2Zvcm1zW2tleV0sIHRyYW5zZm9ybXNbc2NhbGVLZXldLCBvcmlnaW5Qb2ludCwgdHJhbnNmb3Jtcy5zY2FsZSk7XG59XG4vKipcbiAqIFRoZSBuYW1lcyBvZiB0aGUgbW90aW9uIHZhbHVlcyB3ZSB3YW50IHRvIGFwcGx5IGFzIHRyYW5zbGF0aW9uLCBzY2FsZSBhbmQgb3JpZ2luLlxuICovXG52YXIgeEtleXMgPSBbXCJ4XCIsIFwic2NhbGVYXCIsIFwib3JpZ2luWFwiXTtcbnZhciB5S2V5cyA9IFtcInlcIiwgXCJzY2FsZVlcIiwgXCJvcmlnaW5ZXCJdO1xuLyoqXG4gKiBBcHBseSBhIHRyYW5zZm9ybSB0byBhIGJveCBmcm9tIHRoZSBsYXRlc3QgcmVzb2x2ZWQgbW90aW9uIHZhbHVlcy5cbiAqL1xuZnVuY3Rpb24gdHJhbnNmb3JtQm94KGJveCwgdHJhbnNmb3JtKSB7XG4gICAgdHJhbnNmb3JtQXhpcyhib3gueCwgdHJhbnNmb3JtLCB4S2V5cyk7XG4gICAgdHJhbnNmb3JtQXhpcyhib3gueSwgdHJhbnNmb3JtLCB5S2V5cyk7XG59XG5cbmV4cG9ydCB7IGFwcGx5QXhpc0RlbHRhLCBhcHBseUJveERlbHRhLCBhcHBseVBvaW50RGVsdGEsIGFwcGx5VHJlZURlbHRhcywgc2NhbGVQb2ludCwgdHJhbnNmb3JtQXhpcywgdHJhbnNmb3JtQm94LCB0cmFuc2xhdGVBeGlzIH07XG4iLCJpbXBvcnQgeyBjb252ZXJ0Qm91bmRpbmdCb3hUb0JveCwgdHJhbnNmb3JtQm94UG9pbnRzIH0gZnJvbSAnLi4vZ2VvbWV0cnkvY29udmVyc2lvbi5tanMnO1xuaW1wb3J0IHsgdHJhbnNsYXRlQXhpcyB9IGZyb20gJy4uL2dlb21ldHJ5L2RlbHRhLWFwcGx5Lm1qcyc7XG5cbmZ1bmN0aW9uIG1lYXN1cmVWaWV3cG9ydEJveChpbnN0YW5jZSwgdHJhbnNmb3JtUG9pbnQpIHtcbiAgICByZXR1cm4gY29udmVydEJvdW5kaW5nQm94VG9Cb3godHJhbnNmb3JtQm94UG9pbnRzKGluc3RhbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLCB0cmFuc2Zvcm1Qb2ludCkpO1xufVxuZnVuY3Rpb24gbWVhc3VyZVBhZ2VCb3goZWxlbWVudCwgcm9vdFByb2plY3Rpb25Ob2RlLCB0cmFuc2Zvcm1QYWdlUG9pbnQpIHtcbiAgICB2YXIgdmlld3BvcnRCb3ggPSBtZWFzdXJlVmlld3BvcnRCb3goZWxlbWVudCwgdHJhbnNmb3JtUGFnZVBvaW50KTtcbiAgICB2YXIgc2Nyb2xsID0gcm9vdFByb2plY3Rpb25Ob2RlLnNjcm9sbDtcbiAgICBpZiAoc2Nyb2xsKSB7XG4gICAgICAgIHRyYW5zbGF0ZUF4aXModmlld3BvcnRCb3gueCwgc2Nyb2xsLngpO1xuICAgICAgICB0cmFuc2xhdGVBeGlzKHZpZXdwb3J0Qm94LnksIHNjcm9sbC55KTtcbiAgICB9XG4gICAgcmV0dXJuIHZpZXdwb3J0Qm94O1xufVxuXG5leHBvcnQgeyBtZWFzdXJlUGFnZUJveCwgbWVhc3VyZVZpZXdwb3J0Qm94IH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IGludmFyaWFudCB9IGZyb20gJ2hleS1saXN0ZW4nO1xuaW1wb3J0IHsgUGFuU2Vzc2lvbiB9IGZyb20gJy4uL1BhblNlc3Npb24ubWpzJztcbmltcG9ydCB7IGdldEdsb2JhbExvY2sgfSBmcm9tICcuL3V0aWxzL2xvY2subWpzJztcbmltcG9ydCB7IGlzUmVmT2JqZWN0IH0gZnJvbSAnLi4vLi4vdXRpbHMvaXMtcmVmLW9iamVjdC5tanMnO1xuaW1wb3J0IHsgYWRkUG9pbnRlckV2ZW50IH0gZnJvbSAnLi4vLi4vZXZlbnRzL3VzZS1wb2ludGVyLWV2ZW50Lm1qcyc7XG5pbXBvcnQgeyBhcHBseUNvbnN0cmFpbnRzLCBjYWxjUmVsYXRpdmVDb25zdHJhaW50cywgcmVzb2x2ZURyYWdFbGFzdGljLCByZWJhc2VBeGlzQ29uc3RyYWludHMsIGNhbGNWaWV3cG9ydENvbnN0cmFpbnRzLCBjYWxjT3JpZ2luLCBkZWZhdWx0RWxhc3RpYyB9IGZyb20gJy4vdXRpbHMvY29uc3RyYWludHMubWpzJztcbmltcG9ydCB7IEFuaW1hdGlvblR5cGUgfSBmcm9tICcuLi8uLi9yZW5kZXIvdXRpbHMvdHlwZXMubWpzJztcbmltcG9ydCB7IGNyZWF0ZUJveCB9IGZyb20gJy4uLy4uL3Byb2plY3Rpb24vZ2VvbWV0cnkvbW9kZWxzLm1qcyc7XG5pbXBvcnQgeyBlYWNoQXhpcyB9IGZyb20gJy4uLy4uL3Byb2plY3Rpb24vdXRpbHMvZWFjaC1heGlzLm1qcyc7XG5pbXBvcnQgeyBtZWFzdXJlUGFnZUJveCB9IGZyb20gJy4uLy4uL3Byb2plY3Rpb24vdXRpbHMvbWVhc3VyZS5tanMnO1xuaW1wb3J0IHsgZXh0cmFjdEV2ZW50SW5mbyB9IGZyb20gJy4uLy4uL2V2ZW50cy9ldmVudC1pbmZvLm1qcyc7XG5pbXBvcnQgeyBzdGFydEFuaW1hdGlvbiB9IGZyb20gJy4uLy4uL2FuaW1hdGlvbi91dGlscy90cmFuc2l0aW9ucy5tanMnO1xuaW1wb3J0IHsgY29udmVydEJveFRvQm91bmRpbmdCb3gsIGNvbnZlcnRCb3VuZGluZ0JveFRvQm94IH0gZnJvbSAnLi4vLi4vcHJvamVjdGlvbi9nZW9tZXRyeS9jb252ZXJzaW9uLm1qcyc7XG5pbXBvcnQgeyBhZGREb21FdmVudCB9IGZyb20gJy4uLy4uL2V2ZW50cy91c2UtZG9tLWV2ZW50Lm1qcyc7XG5pbXBvcnQgeyBtaXggfSBmcm9tICdwb3Btb3Rpb24nO1xuaW1wb3J0IHsgcGVyY2VudCB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcbmltcG9ydCB7IGNhbGNMZW5ndGggfSBmcm9tICcuLi8uLi9wcm9qZWN0aW9uL2dlb21ldHJ5L2RlbHRhLWNhbGMubWpzJztcblxudmFyIGVsZW1lbnREcmFnQ29udHJvbHMgPSBuZXcgV2Vha01hcCgpO1xuLyoqXG4gKlxuICovXG4vLyBsZXQgbGF0ZXN0UG9pbnRlckV2ZW50OiBBbnlQb2ludGVyRXZlbnRcbnZhciBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHModmlzdWFsRWxlbWVudCkge1xuICAgICAgICAvLyBUaGlzIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgZHJhZyBnZXN0dXJlIGxvY2ssIGVuc3VyaW5nIG9ubHkgb25lIGNvbXBvbmVudFxuICAgICAgICAvLyBjYW4gXCJjYXB0dXJlXCIgdGhlIGRyYWcgb2Ygb25lIG9yIGJvdGggYXhlcy5cbiAgICAgICAgLy8gVE9ETzogTG9vayBpbnRvIG1vdmluZyB0aGlzIGludG8gcGFuc2Vzc2lvbj9cbiAgICAgICAgdGhpcy5vcGVuR2xvYmFsTG9jayA9IG51bGw7XG4gICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmN1cnJlbnREaXJlY3Rpb24gPSBudWxsO1xuICAgICAgICB0aGlzLm9yaWdpblBvaW50ID0geyB4OiAwLCB5OiAwIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgcGVybWl0dGVkIGJvdW5kYXJpZXMgb2YgdHJhdmVsLCBpbiBwaXhlbHMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNvbnN0cmFpbnRzID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaGFzTXV0YXRlZENvbnN0cmFpbnRzID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgcGVyLWF4aXMgcmVzb2x2ZWQgZWxhc3RpYyB2YWx1ZXMuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmVsYXN0aWMgPSBjcmVhdGVCb3goKTtcbiAgICAgICAgdGhpcy52aXN1YWxFbGVtZW50ID0gdmlzdWFsRWxlbWVudDtcbiAgICB9XG4gICAgVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5wcm90b3R5cGUuc3RhcnQgPSBmdW5jdGlvbiAob3JpZ2luRXZlbnQsIF9hKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYiA9IF9hID09PSB2b2lkIDAgPyB7fSA6IF9hLCBfYyA9IF9iLnNuYXBUb0N1cnNvciwgc25hcFRvQ3Vyc29yID0gX2MgPT09IHZvaWQgMCA/IGZhbHNlIDogX2M7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBEb24ndCBzdGFydCBkcmFnZ2luZyBpZiB0aGlzIGNvbXBvbmVudCBpcyBleGl0aW5nXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodGhpcy52aXN1YWxFbGVtZW50LmlzUHJlc2VudCA9PT0gZmFsc2UpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBvblNlc3Npb25TdGFydCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgLy8gU3RvcCBhbnkgYW5pbWF0aW9ucyBvbiBib3RoIGF4aXMgdmFsdWVzIGltbWVkaWF0ZWx5LiBUaGlzIGFsbG93cyB0aGUgdXNlciB0byB0aHJvdyBhbmQgY2F0Y2hcbiAgICAgICAgICAgIC8vIHRoZSBjb21wb25lbnQuXG4gICAgICAgICAgICBfdGhpcy5zdG9wQW5pbWF0aW9uKCk7XG4gICAgICAgICAgICBpZiAoc25hcFRvQ3Vyc29yKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuc25hcFRvQ3Vyc29yKGV4dHJhY3RFdmVudEluZm8oZXZlbnQsIFwicGFnZVwiKS5wb2ludCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHZhciBvblN0YXJ0ID0gZnVuY3Rpb24gKGV2ZW50LCBpbmZvKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAvLyBBdHRlbXB0IHRvIGdyYWIgdGhlIGdsb2JhbCBkcmFnIGdlc3R1cmUgbG9jayAtIG1heWJlIG1ha2UgdGhpcyBwYXJ0IG9mIFBhblNlc3Npb25cbiAgICAgICAgICAgIHZhciBfYiA9IF90aGlzLmdldFByb3BzKCksIGRyYWcgPSBfYi5kcmFnLCBkcmFnUHJvcGFnYXRpb24gPSBfYi5kcmFnUHJvcGFnYXRpb24sIG9uRHJhZ1N0YXJ0ID0gX2Iub25EcmFnU3RhcnQ7XG4gICAgICAgICAgICBpZiAoZHJhZyAmJiAhZHJhZ1Byb3BhZ2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLm9wZW5HbG9iYWxMb2NrKVxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5vcGVuR2xvYmFsTG9jaygpO1xuICAgICAgICAgICAgICAgIF90aGlzLm9wZW5HbG9iYWxMb2NrID0gZ2V0R2xvYmFsTG9jayhkcmFnKTtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkb24gJ3QgaGF2ZSB0aGUgbG9jaywgZG9uJ3Qgc3RhcnQgZHJhZ2dpbmdcbiAgICAgICAgICAgICAgICBpZiAoIV90aGlzLm9wZW5HbG9iYWxMb2NrKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIF90aGlzLmN1cnJlbnREaXJlY3Rpb24gPSBudWxsO1xuICAgICAgICAgICAgX3RoaXMucmVzb2x2ZUNvbnN0cmFpbnRzKCk7XG4gICAgICAgICAgICBpZiAoX3RoaXMudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uLmlzQW5pbWF0aW9uQmxvY2tlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgX3RoaXMudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmVjb3JkIGdlc3R1cmUgb3JpZ2luXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGVhY2hBeGlzKGZ1bmN0aW9uIChheGlzKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudCA9IF90aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShheGlzKS5nZXQoKSB8fCAwO1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIElmIHRoZSBNb3Rpb25WYWx1ZSBpcyBhIHBlcmNlbnRhZ2UgdmFsdWUgY29udmVydCB0byBweFxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGlmIChwZXJjZW50LnRlc3QoY3VycmVudCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lYXN1cmVkQXhpcyA9IChfYiA9IChfYSA9IF90aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxheW91dCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmFjdHVhbFtheGlzXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1lYXN1cmVkQXhpcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aF8xID0gY2FsY0xlbmd0aChtZWFzdXJlZEF4aXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IGxlbmd0aF8xICogKHBhcnNlRmxvYXQoY3VycmVudCkgLyAxMDApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF90aGlzLm9yaWdpblBvaW50W2F4aXNdID0gY3VycmVudDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gRmlyZSBvbkRyYWdTdGFydCBldmVudFxuICAgICAgICAgICAgb25EcmFnU3RhcnQgPT09IG51bGwgfHwgb25EcmFnU3RhcnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRHJhZ1N0YXJ0KGV2ZW50LCBpbmZvKTtcbiAgICAgICAgICAgIChfYSA9IF90aGlzLnZpc3VhbEVsZW1lbnQuYW5pbWF0aW9uU3RhdGUpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zZXRBY3RpdmUoQW5pbWF0aW9uVHlwZS5EcmFnLCB0cnVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uTW92ZSA9IGZ1bmN0aW9uIChldmVudCwgaW5mbykge1xuICAgICAgICAgICAgLy8gbGF0ZXN0UG9pbnRlckV2ZW50ID0gZXZlbnRcbiAgICAgICAgICAgIHZhciBfYSA9IF90aGlzLmdldFByb3BzKCksIGRyYWdQcm9wYWdhdGlvbiA9IF9hLmRyYWdQcm9wYWdhdGlvbiwgZHJhZ0RpcmVjdGlvbkxvY2sgPSBfYS5kcmFnRGlyZWN0aW9uTG9jaywgb25EaXJlY3Rpb25Mb2NrID0gX2Eub25EaXJlY3Rpb25Mb2NrLCBvbkRyYWcgPSBfYS5vbkRyYWc7XG4gICAgICAgICAgICAvLyBJZiB3ZSBkaWRuJ3Qgc3VjY2Vzc2Z1bGx5IHJlY2VpdmUgdGhlIGdlc3R1cmUgbG9jaywgZWFybHkgcmV0dXJuLlxuICAgICAgICAgICAgaWYgKCFkcmFnUHJvcGFnYXRpb24gJiYgIV90aGlzLm9wZW5HbG9iYWxMb2NrKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBvZmZzZXQgPSBpbmZvLm9mZnNldDtcbiAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8gZGV0ZWN0IGRyYWcgZGlyZWN0aW9uIGlmIGRpcmVjdGlvbkxvY2sgaXMgdHJ1ZVxuICAgICAgICAgICAgaWYgKGRyYWdEaXJlY3Rpb25Mb2NrICYmIF90aGlzLmN1cnJlbnREaXJlY3Rpb24gPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBfdGhpcy5jdXJyZW50RGlyZWN0aW9uID0gZ2V0Q3VycmVudERpcmVjdGlvbihvZmZzZXQpO1xuICAgICAgICAgICAgICAgIC8vIElmIHdlJ3ZlIHN1Y2Nlc3NmdWxseSBzZXQgYSBkaXJlY3Rpb24sIG5vdGlmeSBsaXN0ZW5lclxuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5jdXJyZW50RGlyZWN0aW9uICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIG9uRGlyZWN0aW9uTG9jayA9PT0gbnVsbCB8fCBvbkRpcmVjdGlvbkxvY2sgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9uRGlyZWN0aW9uTG9jayhfdGhpcy5jdXJyZW50RGlyZWN0aW9uKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVXBkYXRlIGVhY2ggcG9pbnQgd2l0aCB0aGUgbGF0ZXN0IHBvc2l0aW9uXG4gICAgICAgICAgICBfdGhpcy51cGRhdGVBeGlzKFwieFwiLCBpbmZvLnBvaW50LCBvZmZzZXQpO1xuICAgICAgICAgICAgX3RoaXMudXBkYXRlQXhpcyhcInlcIiwgaW5mby5wb2ludCwgb2Zmc2V0KTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWRlYWxseSB3ZSB3b3VsZCBsZWF2ZSB0aGUgcmVuZGVyZXIgdG8gZmlyZSBuYXR1cmFsbHkgYXQgdGhlIGVuZCBvZlxuICAgICAgICAgICAgICogdGhpcyBmcmFtZSBidXQgaWYgdGhlIGVsZW1lbnQgaXMgYWJvdXQgdG8gY2hhbmdlIGxheW91dCBhcyB0aGUgcmVzdWx0XG4gICAgICAgICAgICAgKiBvZiBhIHJlLXJlbmRlciB3ZSB3YW50IHRvIGVuc3VyZSB0aGUgYnJvd3NlciBjYW4gcmVhZCB0aGUgbGF0ZXN0XG4gICAgICAgICAgICAgKiBib3VuZGluZyBib3ggdG8gZW5zdXJlIHRoZSBwb2ludGVyIGFuZCBlbGVtZW50IGRvbid0IGZhbGwgb3V0IG9mIHN5bmMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIF90aGlzLnZpc3VhbEVsZW1lbnQuc3luY1JlbmRlcigpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGlzIG11c3QgZmlyZSBhZnRlciB0aGUgc3luY1JlbmRlciBjYWxsIGFzIGl0IG1pZ2h0IHRyaWdnZXIgYSBzdGF0ZVxuICAgICAgICAgICAgICogY2hhbmdlIHdoaWNoIGl0c2VsZiBtaWdodCB0cmlnZ2VyIGEgbGF5b3V0IHVwZGF0ZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgb25EcmFnID09PSBudWxsIHx8IG9uRHJhZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25EcmFnKGV2ZW50LCBpbmZvKTtcbiAgICAgICAgfTtcbiAgICAgICAgdmFyIG9uU2Vzc2lvbkVuZCA9IGZ1bmN0aW9uIChldmVudCwgaW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIF90aGlzLnN0b3AoZXZlbnQsIGluZm8pO1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLnBhblNlc3Npb24gPSBuZXcgUGFuU2Vzc2lvbihvcmlnaW5FdmVudCwge1xuICAgICAgICAgICAgb25TZXNzaW9uU3RhcnQ6IG9uU2Vzc2lvblN0YXJ0LFxuICAgICAgICAgICAgb25TdGFydDogb25TdGFydCxcbiAgICAgICAgICAgIG9uTW92ZTogb25Nb3ZlLFxuICAgICAgICAgICAgb25TZXNzaW9uRW5kOiBvblNlc3Npb25FbmQsXG4gICAgICAgIH0sIHsgdHJhbnNmb3JtUGFnZVBvaW50OiB0aGlzLnZpc3VhbEVsZW1lbnQuZ2V0VHJhbnNmb3JtUGFnZVBvaW50KCkgfSk7XG4gICAgfTtcbiAgICBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzLnByb3RvdHlwZS5zdG9wID0gZnVuY3Rpb24gKGV2ZW50LCBpbmZvKSB7XG4gICAgICAgIHZhciBpc0RyYWdnaW5nID0gdGhpcy5pc0RyYWdnaW5nO1xuICAgICAgICB0aGlzLmNhbmNlbCgpO1xuICAgICAgICBpZiAoIWlzRHJhZ2dpbmcpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciB2ZWxvY2l0eSA9IGluZm8udmVsb2NpdHk7XG4gICAgICAgIHRoaXMuc3RhcnRBbmltYXRpb24odmVsb2NpdHkpO1xuICAgICAgICB2YXIgb25EcmFnRW5kID0gdGhpcy5nZXRQcm9wcygpLm9uRHJhZ0VuZDtcbiAgICAgICAgb25EcmFnRW5kID09PSBudWxsIHx8IG9uRHJhZ0VuZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25EcmFnRW5kKGV2ZW50LCBpbmZvKTtcbiAgICB9O1xuICAgIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMucHJvdG90eXBlLmNhbmNlbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbikge1xuICAgICAgICAgICAgdGhpcy52aXN1YWxFbGVtZW50LnByb2plY3Rpb24uaXNBbmltYXRpb25CbG9ja2VkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgKF9hID0gdGhpcy5wYW5TZXNzaW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZW5kKCk7XG4gICAgICAgIHRoaXMucGFuU2Vzc2lvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGRyYWdQcm9wYWdhdGlvbiA9IHRoaXMuZ2V0UHJvcHMoKS5kcmFnUHJvcGFnYXRpb247XG4gICAgICAgIGlmICghZHJhZ1Byb3BhZ2F0aW9uICYmIHRoaXMub3Blbkdsb2JhbExvY2spIHtcbiAgICAgICAgICAgIHRoaXMub3Blbkdsb2JhbExvY2soKTtcbiAgICAgICAgICAgIHRoaXMub3Blbkdsb2JhbExvY2sgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIChfYiA9IHRoaXMudmlzdWFsRWxlbWVudC5hbmltYXRpb25TdGF0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnNldEFjdGl2ZShBbmltYXRpb25UeXBlLkRyYWcsIGZhbHNlKTtcbiAgICB9O1xuICAgIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMucHJvdG90eXBlLnVwZGF0ZUF4aXMgPSBmdW5jdGlvbiAoYXhpcywgX3BvaW50LCBvZmZzZXQpIHtcbiAgICAgICAgdmFyIGRyYWcgPSB0aGlzLmdldFByb3BzKCkuZHJhZztcbiAgICAgICAgLy8gSWYgd2UncmUgbm90IGRyYWdnaW5nIHRoaXMgYXhpcywgZG8gYW4gZWFybHkgcmV0dXJuLlxuICAgICAgICBpZiAoIW9mZnNldCB8fCAhc2hvdWxkRHJhZyhheGlzLCBkcmFnLCB0aGlzLmN1cnJlbnREaXJlY3Rpb24pKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgYXhpc1ZhbHVlID0gdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoYXhpcyk7XG4gICAgICAgIHZhciBuZXh0ID0gdGhpcy5vcmlnaW5Qb2ludFtheGlzXSArIG9mZnNldFtheGlzXTtcbiAgICAgICAgLy8gQXBwbHkgY29uc3RyYWludHNcbiAgICAgICAgaWYgKHRoaXMuY29uc3RyYWludHMgJiYgdGhpcy5jb25zdHJhaW50c1theGlzXSkge1xuICAgICAgICAgICAgbmV4dCA9IGFwcGx5Q29uc3RyYWludHMobmV4dCwgdGhpcy5jb25zdHJhaW50c1theGlzXSwgdGhpcy5lbGFzdGljW2F4aXNdKTtcbiAgICAgICAgfVxuICAgICAgICBheGlzVmFsdWUuc2V0KG5leHQpO1xuICAgIH07XG4gICAgVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5wcm90b3R5cGUucmVzb2x2ZUNvbnN0cmFpbnRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2EgPSB0aGlzLmdldFByb3BzKCksIGRyYWdDb25zdHJhaW50cyA9IF9hLmRyYWdDb25zdHJhaW50cywgZHJhZ0VsYXN0aWMgPSBfYS5kcmFnRWxhc3RpYztcbiAgICAgICAgdmFyIGxheW91dCA9ICh0aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbiB8fCB7fSkubGF5b3V0O1xuICAgICAgICB2YXIgcHJldkNvbnN0cmFpbnRzID0gdGhpcy5jb25zdHJhaW50cztcbiAgICAgICAgaWYgKGRyYWdDb25zdHJhaW50cyAmJiBpc1JlZk9iamVjdChkcmFnQ29uc3RyYWludHMpKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY29uc3RyYWludHMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnN0cmFpbnRzID0gdGhpcy5yZXNvbHZlUmVmQ29uc3RyYWludHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChkcmFnQ29uc3RyYWludHMgJiYgbGF5b3V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdHJhaW50cyA9IGNhbGNSZWxhdGl2ZUNvbnN0cmFpbnRzKGxheW91dC5hY3R1YWwsIGRyYWdDb25zdHJhaW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnN0cmFpbnRzID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5lbGFzdGljID0gcmVzb2x2ZURyYWdFbGFzdGljKGRyYWdFbGFzdGljKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIHdlJ3JlIG91dHB1dHRpbmcgdG8gZXh0ZXJuYWwgTW90aW9uVmFsdWVzLCB3ZSB3YW50IHRvIHJlYmFzZSB0aGUgbWVhc3VyZWQgY29uc3RyYWludHNcbiAgICAgICAgICogZnJvbSB2aWV3cG9ydC1yZWxhdGl2ZSB0byBjb21wb25lbnQtcmVsYXRpdmUuXG4gICAgICAgICAqL1xuICAgICAgICBpZiAocHJldkNvbnN0cmFpbnRzICE9PSB0aGlzLmNvbnN0cmFpbnRzICYmXG4gICAgICAgICAgICBsYXlvdXQgJiZcbiAgICAgICAgICAgIHRoaXMuY29uc3RyYWludHMgJiZcbiAgICAgICAgICAgICF0aGlzLmhhc011dGF0ZWRDb25zdHJhaW50cykge1xuICAgICAgICAgICAgZWFjaEF4aXMoZnVuY3Rpb24gKGF4aXMpIHtcbiAgICAgICAgICAgICAgICBpZiAoX3RoaXMuZ2V0QXhpc01vdGlvblZhbHVlKGF4aXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmNvbnN0cmFpbnRzW2F4aXNdID0gcmViYXNlQXhpc0NvbnN0cmFpbnRzKGxheW91dC5hY3R1YWxbYXhpc10sIF90aGlzLmNvbnN0cmFpbnRzW2F4aXNdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5wcm90b3R5cGUucmVzb2x2ZVJlZkNvbnN0cmFpbnRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLmdldFByb3BzKCksIGNvbnN0cmFpbnRzID0gX2EuZHJhZ0NvbnN0cmFpbnRzLCBvbk1lYXN1cmVEcmFnQ29uc3RyYWludHMgPSBfYS5vbk1lYXN1cmVEcmFnQ29uc3RyYWludHM7XG4gICAgICAgIGlmICghY29uc3RyYWludHMgfHwgIWlzUmVmT2JqZWN0KGNvbnN0cmFpbnRzKSlcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGNvbnN0cmFpbnRzRWxlbWVudCA9IGNvbnN0cmFpbnRzLmN1cnJlbnQ7XG4gICAgICAgIGludmFyaWFudChjb25zdHJhaW50c0VsZW1lbnQgIT09IG51bGwsIFwiSWYgYGRyYWdDb25zdHJhaW50c2AgaXMgc2V0IGFzIGEgUmVhY3QgcmVmLCB0aGF0IHJlZiBtdXN0IGJlIHBhc3NlZCB0byBhbm90aGVyIGNvbXBvbmVudCdzIGByZWZgIHByb3AuXCIpO1xuICAgICAgICB2YXIgcHJvamVjdGlvbiA9IHRoaXMudmlzdWFsRWxlbWVudC5wcm9qZWN0aW9uO1xuICAgICAgICAvLyBUT0RPXG4gICAgICAgIGlmICghcHJvamVjdGlvbiB8fCAhcHJvamVjdGlvbi5sYXlvdXQpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIHZhciBjb25zdHJhaW50c0JveCA9IG1lYXN1cmVQYWdlQm94KGNvbnN0cmFpbnRzRWxlbWVudCwgcHJvamVjdGlvbi5yb290LCB0aGlzLnZpc3VhbEVsZW1lbnQuZ2V0VHJhbnNmb3JtUGFnZVBvaW50KCkpO1xuICAgICAgICB2YXIgbWVhc3VyZWRDb25zdHJhaW50cyA9IGNhbGNWaWV3cG9ydENvbnN0cmFpbnRzKHByb2plY3Rpb24ubGF5b3V0LmFjdHVhbCwgY29uc3RyYWludHNCb3gpO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlcmUncyBhbiBvbk1lYXN1cmVEcmFnQ29uc3RyYWludHMgbGlzdGVuZXIgd2UgY2FsbCBpdCBhbmRcbiAgICAgICAgICogaWYgZGlmZmVyZW50IGNvbnN0cmFpbnRzIGFyZSByZXR1cm5lZCwgc2V0IGNvbnN0cmFpbnRzIHRvIHRoYXRcbiAgICAgICAgICovXG4gICAgICAgIGlmIChvbk1lYXN1cmVEcmFnQ29uc3RyYWludHMpIHtcbiAgICAgICAgICAgIHZhciB1c2VyQ29uc3RyYWludHMgPSBvbk1lYXN1cmVEcmFnQ29uc3RyYWludHMoY29udmVydEJveFRvQm91bmRpbmdCb3gobWVhc3VyZWRDb25zdHJhaW50cykpO1xuICAgICAgICAgICAgdGhpcy5oYXNNdXRhdGVkQ29uc3RyYWludHMgPSAhIXVzZXJDb25zdHJhaW50cztcbiAgICAgICAgICAgIGlmICh1c2VyQ29uc3RyYWludHMpIHtcbiAgICAgICAgICAgICAgICBtZWFzdXJlZENvbnN0cmFpbnRzID0gY29udmVydEJvdW5kaW5nQm94VG9Cb3godXNlckNvbnN0cmFpbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWVhc3VyZWRDb25zdHJhaW50cztcbiAgICB9O1xuICAgIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMucHJvdG90eXBlLnN0YXJ0QW5pbWF0aW9uID0gZnVuY3Rpb24gKHZlbG9jaXR5KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHRoaXMuZ2V0UHJvcHMoKSwgZHJhZyA9IF9hLmRyYWcsIGRyYWdNb21lbnR1bSA9IF9hLmRyYWdNb21lbnR1bSwgZHJhZ0VsYXN0aWMgPSBfYS5kcmFnRWxhc3RpYywgZHJhZ1RyYW5zaXRpb24gPSBfYS5kcmFnVHJhbnNpdGlvbiwgZHJhZ1NuYXBUb09yaWdpbiA9IF9hLmRyYWdTbmFwVG9PcmlnaW4sIG9uRHJhZ1RyYW5zaXRpb25FbmQgPSBfYS5vbkRyYWdUcmFuc2l0aW9uRW5kO1xuICAgICAgICB2YXIgY29uc3RyYWludHMgPSB0aGlzLmNvbnN0cmFpbnRzIHx8IHt9O1xuICAgICAgICB2YXIgbW9tZW50dW1BbmltYXRpb25zID0gZWFjaEF4aXMoZnVuY3Rpb24gKGF4aXMpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICghc2hvdWxkRHJhZyhheGlzLCBkcmFnLCBfdGhpcy5jdXJyZW50RGlyZWN0aW9uKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB0cmFuc2l0aW9uID0gKF9hID0gY29uc3RyYWludHMgPT09IG51bGwgfHwgY29uc3RyYWludHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbnN0cmFpbnRzW2F4aXNdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB7fTtcbiAgICAgICAgICAgIGlmIChkcmFnU25hcFRvT3JpZ2luKVxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb24gPSB7IG1pbjogMCwgbWF4OiAwIH07XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIE92ZXJkYW1wIHRoZSBib3VuZGFyeSBzcHJpbmcgaWYgYGRyYWdFbGFzdGljYCBpcyBkaXNhYmxlZC4gVGhlcmUncyBzdGlsbCBhIGZyYW1lXG4gICAgICAgICAgICAgKiBvZiBzcHJpbmcgYW5pbWF0aW9ucyBzbyB3ZSBzaG91bGQgbG9vayBpbnRvIGFkZGluZyBhIGRpc2FibGUgc3ByaW5nIG9wdGlvbiB0byBgaW5lcnRpYWAuXG4gICAgICAgICAgICAgKiBXZSBjb3VsZCBkbyBzb21ldGhpbmcgaGVyZSB3aGVyZSB3ZSBhZmZlY3QgdGhlIGBib3VuY2VTdGlmZm5lc3NgIGFuZCBgYm91bmNlRGFtcGluZ2BcbiAgICAgICAgICAgICAqIHVzaW5nIHRoZSB2YWx1ZSBvZiBgZHJhZ0VsYXN0aWNgLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB2YXIgYm91bmNlU3RpZmZuZXNzID0gZHJhZ0VsYXN0aWMgPyAyMDAgOiAxMDAwMDAwO1xuICAgICAgICAgICAgdmFyIGJvdW5jZURhbXBpbmcgPSBkcmFnRWxhc3RpYyA/IDQwIDogMTAwMDAwMDA7XG4gICAgICAgICAgICB2YXIgaW5lcnRpYSA9IF9fYXNzaWduKF9fYXNzaWduKHsgdHlwZTogXCJpbmVydGlhXCIsIHZlbG9jaXR5OiBkcmFnTW9tZW50dW0gPyB2ZWxvY2l0eVtheGlzXSA6IDAsIGJvdW5jZVN0aWZmbmVzczogYm91bmNlU3RpZmZuZXNzLCBib3VuY2VEYW1waW5nOiBib3VuY2VEYW1waW5nLCB0aW1lQ29uc3RhbnQ6IDc1MCwgcmVzdERlbHRhOiAxLCByZXN0U3BlZWQ6IDEwIH0sIGRyYWdUcmFuc2l0aW9uKSwgdHJhbnNpdGlvbik7XG4gICAgICAgICAgICAvLyBJZiB3ZSdyZSBub3QgYW5pbWF0aW5nIG9uIGFuIGV4dGVybmFsbHktcHJvdmlkZWQgYE1vdGlvblZhbHVlYCB3ZSBjYW4gdXNlIHRoZVxuICAgICAgICAgICAgLy8gY29tcG9uZW50J3MgYW5pbWF0aW9uIGNvbnRyb2xzIHdoaWNoIHdpbGwgaGFuZGxlIGludGVyYWN0aW9ucyB3aXRoIHdoaWxlSG92ZXIgKGV0YyksXG4gICAgICAgICAgICAvLyBvdGhlcndpc2Ugd2UganVzdCBoYXZlIHRvIGFuaW1hdGUgdGhlIGBNb3Rpb25WYWx1ZWAgaXRzZWxmLlxuICAgICAgICAgICAgcmV0dXJuIF90aGlzLnN0YXJ0QXhpc1ZhbHVlQW5pbWF0aW9uKGF4aXMsIGluZXJ0aWEpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gUnVuIGFsbCBhbmltYXRpb25zIGFuZCB0aGVuIHJlc29sdmUgdGhlIG5ldyBkcmFnIGNvbnN0cmFpbnRzLlxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwobW9tZW50dW1BbmltYXRpb25zKS50aGVuKG9uRHJhZ1RyYW5zaXRpb25FbmQpO1xuICAgIH07XG4gICAgVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5wcm90b3R5cGUuc3RhcnRBeGlzVmFsdWVBbmltYXRpb24gPSBmdW5jdGlvbiAoYXhpcywgdHJhbnNpdGlvbikge1xuICAgICAgICB2YXIgYXhpc1ZhbHVlID0gdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoYXhpcyk7XG4gICAgICAgIHJldHVybiBzdGFydEFuaW1hdGlvbihheGlzLCBheGlzVmFsdWUsIDAsIHRyYW5zaXRpb24pO1xuICAgIH07XG4gICAgVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5wcm90b3R5cGUuc3RvcEFuaW1hdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgZWFjaEF4aXMoZnVuY3Rpb24gKGF4aXMpIHsgcmV0dXJuIF90aGlzLmdldEF4aXNNb3Rpb25WYWx1ZShheGlzKS5zdG9wKCk7IH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogRHJhZyB3b3JrcyBkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gd2hpY2ggcHJvcHMgYXJlIHByb3ZpZGVkLlxuICAgICAqXG4gICAgICogLSBJZiBfZHJhZ1ggYW5kIF9kcmFnWSBhcmUgcHJvdmlkZWQsIHdlIG91dHB1dCB0aGUgZ2VzdHVyZSBkZWx0YSBkaXJlY3RseSB0byB0aG9zZSBtb3Rpb24gdmFsdWVzLlxuICAgICAqIC0gT3RoZXJ3aXNlLCB3ZSBhcHBseSB0aGUgZGVsdGEgdG8gdGhlIHgveSBtb3Rpb24gdmFsdWVzLlxuICAgICAqL1xuICAgIFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMucHJvdG90eXBlLmdldEF4aXNNb3Rpb25WYWx1ZSA9IGZ1bmN0aW9uIChheGlzKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIHZhciBkcmFnS2V5ID0gXCJfZHJhZ1wiICsgYXhpcy50b1VwcGVyQ2FzZSgpO1xuICAgICAgICB2YXIgZXh0ZXJuYWxNb3Rpb25WYWx1ZSA9IHRoaXMudmlzdWFsRWxlbWVudC5nZXRQcm9wcygpW2RyYWdLZXldO1xuICAgICAgICByZXR1cm4gZXh0ZXJuYWxNb3Rpb25WYWx1ZVxuICAgICAgICAgICAgPyBleHRlcm5hbE1vdGlvblZhbHVlXG4gICAgICAgICAgICA6IHRoaXMudmlzdWFsRWxlbWVudC5nZXRWYWx1ZShheGlzLCAoX2IgPSAoX2EgPSB0aGlzLnZpc3VhbEVsZW1lbnQuZ2V0UHJvcHMoKS5pbml0aWFsKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2FbYXhpc10pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDApO1xuICAgIH07XG4gICAgVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5wcm90b3R5cGUuc25hcFRvQ3Vyc29yID0gZnVuY3Rpb24gKHBvaW50KSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIGVhY2hBeGlzKGZ1bmN0aW9uIChheGlzKSB7XG4gICAgICAgICAgICB2YXIgZHJhZyA9IF90aGlzLmdldFByb3BzKCkuZHJhZztcbiAgICAgICAgICAgIC8vIElmIHdlJ3JlIG5vdCBkcmFnZ2luZyB0aGlzIGF4aXMsIGRvIGFuIGVhcmx5IHJldHVybi5cbiAgICAgICAgICAgIGlmICghc2hvdWxkRHJhZyhheGlzLCBkcmFnLCBfdGhpcy5jdXJyZW50RGlyZWN0aW9uKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgcHJvamVjdGlvbiA9IF90aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbjtcbiAgICAgICAgICAgIHZhciBheGlzVmFsdWUgPSBfdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoYXhpcyk7XG4gICAgICAgICAgICBpZiAocHJvamVjdGlvbiAmJiBwcm9qZWN0aW9uLmxheW91dCkge1xuICAgICAgICAgICAgICAgIHZhciBfYSA9IHByb2plY3Rpb24ubGF5b3V0LmFjdHVhbFtheGlzXSwgbWluID0gX2EubWluLCBtYXggPSBfYS5tYXg7XG4gICAgICAgICAgICAgICAgYXhpc1ZhbHVlLnNldChwb2ludFtheGlzXSAtIG1peChtaW4sIG1heCwgMC41KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogV2hlbiB0aGUgdmlld3BvcnQgcmVzaXplcyB3ZSB3YW50IHRvIGNoZWNrIGlmIHRoZSBtZWFzdXJlZCBjb25zdHJhaW50c1xuICAgICAqIGhhdmUgY2hhbmdlZCBhbmQsIGlmIHNvLCByZXBvc2l0aW9uIHRoZSBlbGVtZW50IHdpdGhpbiB0aG9zZSBuZXcgY29uc3RyYWludHNcbiAgICAgKiByZWxhdGl2ZSB0byB3aGVyZSBpdCB3YXMgYmVmb3JlIHRoZSByZXNpemUuXG4gICAgICovXG4gICAgVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5wcm90b3R5cGUuc2NhbGVQb3NpdGlvbldpdGhpbkNvbnN0cmFpbnRzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBfYiA9IHRoaXMuZ2V0UHJvcHMoKSwgZHJhZyA9IF9iLmRyYWcsIGRyYWdDb25zdHJhaW50cyA9IF9iLmRyYWdDb25zdHJhaW50cztcbiAgICAgICAgdmFyIHByb2plY3Rpb24gPSB0aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbjtcbiAgICAgICAgaWYgKCFpc1JlZk9iamVjdChkcmFnQ29uc3RyYWludHMpIHx8ICFwcm9qZWN0aW9uIHx8ICF0aGlzLmNvbnN0cmFpbnRzKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvKipcbiAgICAgICAgICogU3RvcCBjdXJyZW50IGFuaW1hdGlvbnMgYXMgdGhlcmUgY2FuIGJlIHZpc3VhbCBnbGl0Y2hpbmcgaWYgd2UgdHJ5IHRvIGRvXG4gICAgICAgICAqIHRoaXMgbWlkLWFuaW1hdGlvblxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5zdG9wQW5pbWF0aW9uKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZWNvcmQgdGhlIHJlbGF0aXZlIHBvc2l0aW9uIG9mIHRoZSBkcmFnZ2VkIGVsZW1lbnQgcmVsYXRpdmUgdG8gdGhlXG4gICAgICAgICAqIGNvbnN0cmFpbnRzIGJveCBhbmQgc2F2ZSBhcyBhIHByb2dyZXNzIHZhbHVlLlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGJveFByb2dyZXNzID0geyB4OiAwLCB5OiAwIH07XG4gICAgICAgIGVhY2hBeGlzKGZ1bmN0aW9uIChheGlzKSB7XG4gICAgICAgICAgICB2YXIgYXhpc1ZhbHVlID0gX3RoaXMuZ2V0QXhpc01vdGlvblZhbHVlKGF4aXMpO1xuICAgICAgICAgICAgaWYgKGF4aXNWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciBsYXRlc3QgPSBheGlzVmFsdWUuZ2V0KCk7XG4gICAgICAgICAgICAgICAgYm94UHJvZ3Jlc3NbYXhpc10gPSBjYWxjT3JpZ2luKHsgbWluOiBsYXRlc3QsIG1heDogbGF0ZXN0IH0sIF90aGlzLmNvbnN0cmFpbnRzW2F4aXNdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVcGRhdGUgdGhlIGxheW91dCBvZiB0aGlzIGVsZW1lbnQgYW5kIHJlc29sdmUgdGhlIGxhdGVzdCBkcmFnIGNvbnN0cmFpbnRzXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgdHJhbnNmb3JtVGVtcGxhdGUgPSB0aGlzLnZpc3VhbEVsZW1lbnQuZ2V0UHJvcHMoKS50cmFuc2Zvcm1UZW1wbGF0ZTtcbiAgICAgICAgdGhpcy52aXN1YWxFbGVtZW50LmdldEluc3RhbmNlKCkuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtVGVtcGxhdGVcbiAgICAgICAgICAgID8gdHJhbnNmb3JtVGVtcGxhdGUoe30sIFwiXCIpXG4gICAgICAgICAgICA6IFwibm9uZVwiO1xuICAgICAgICAoX2EgPSBwcm9qZWN0aW9uLnJvb3QpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS51cGRhdGVTY3JvbGwoKTtcbiAgICAgICAgcHJvamVjdGlvbi51cGRhdGVMYXlvdXQoKTtcbiAgICAgICAgdGhpcy5yZXNvbHZlQ29uc3RyYWludHMoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZvciBlYWNoIGF4aXMsIGNhbGN1bGF0ZSB0aGUgY3VycmVudCBwcm9ncmVzcyBvZiB0aGUgbGF5b3V0IGF4aXNcbiAgICAgICAgICogd2l0aGluIHRoZSBuZXcgY29uc3RyYWludHMuXG4gICAgICAgICAqL1xuICAgICAgICBlYWNoQXhpcyhmdW5jdGlvbiAoYXhpcykge1xuICAgICAgICAgICAgaWYgKCFzaG91bGREcmFnKGF4aXMsIGRyYWcsIG51bGwpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQ2FsY3VsYXRlIGEgbmV3IHRyYW5zZm9ybSBiYXNlZCBvbiB0aGUgcHJldmlvdXMgYm94IHByb2dyZXNzXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhciBheGlzVmFsdWUgPSBfdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoYXhpcyk7XG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5jb25zdHJhaW50c1theGlzXSwgbWluID0gX2EubWluLCBtYXggPSBfYS5tYXg7XG4gICAgICAgICAgICBheGlzVmFsdWUuc2V0KG1peChtaW4sIG1heCwgYm94UHJvZ3Jlc3NbYXhpc10pKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzLnByb3RvdHlwZS5hZGRMaXN0ZW5lcnMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgZWxlbWVudERyYWdDb250cm9scy5zZXQodGhpcy52aXN1YWxFbGVtZW50LCB0aGlzKTtcbiAgICAgICAgdmFyIGVsZW1lbnQgPSB0aGlzLnZpc3VhbEVsZW1lbnQuZ2V0SW5zdGFuY2UoKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEF0dGFjaCBhIHBvaW50ZXJkb3duIGV2ZW50IGxpc3RlbmVyIG9uIHRoaXMgRE9NIGVsZW1lbnQgdG8gaW5pdGlhdGUgZHJhZyB0cmFja2luZy5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBzdG9wUG9pbnRlckxpc3RlbmVyID0gYWRkUG9pbnRlckV2ZW50KGVsZW1lbnQsIFwicG9pbnRlcmRvd25cIiwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICB2YXIgX2EgPSBfdGhpcy5nZXRQcm9wcygpLCBkcmFnID0gX2EuZHJhZywgX2IgPSBfYS5kcmFnTGlzdGVuZXIsIGRyYWdMaXN0ZW5lciA9IF9iID09PSB2b2lkIDAgPyB0cnVlIDogX2I7XG4gICAgICAgICAgICBkcmFnICYmIGRyYWdMaXN0ZW5lciAmJiBfdGhpcy5zdGFydChldmVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICB2YXIgbWVhc3VyZURyYWdDb25zdHJhaW50cyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkcmFnQ29uc3RyYWludHMgPSBfdGhpcy5nZXRQcm9wcygpLmRyYWdDb25zdHJhaW50cztcbiAgICAgICAgICAgIGlmIChpc1JlZk9iamVjdChkcmFnQ29uc3RyYWludHMpKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMuY29uc3RyYWludHMgPSBfdGhpcy5yZXNvbHZlUmVmQ29uc3RyYWludHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgdmFyIHByb2plY3Rpb24gPSB0aGlzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbjtcbiAgICAgICAgdmFyIHN0b3BNZWFzdXJlTGF5b3V0TGlzdGVuZXIgPSBwcm9qZWN0aW9uLmFkZEV2ZW50TGlzdGVuZXIoXCJtZWFzdXJlXCIsIG1lYXN1cmVEcmFnQ29uc3RyYWludHMpO1xuICAgICAgICBpZiAocHJvamVjdGlvbiAmJiAhcHJvamVjdGlvbi5sYXlvdXQpIHtcbiAgICAgICAgICAgIChfYSA9IHByb2plY3Rpb24ucm9vdCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnVwZGF0ZVNjcm9sbCgpO1xuICAgICAgICAgICAgcHJvamVjdGlvbi51cGRhdGVMYXlvdXQoKTtcbiAgICAgICAgfVxuICAgICAgICBtZWFzdXJlRHJhZ0NvbnN0cmFpbnRzKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBdHRhY2ggYSB3aW5kb3cgcmVzaXplIGxpc3RlbmVyIHRvIHNjYWxlIHRoZSBkcmFnZ2FibGUgdGFyZ2V0IHdpdGhpbiBpdHMgZGVmaW5lZFxuICAgICAgICAgKiBjb25zdHJhaW50cyBhcyB0aGUgd2luZG93IHJlc2l6ZXMuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgc3RvcFJlc2l6ZUxpc3RlbmVyID0gYWRkRG9tRXZlbnQod2luZG93LCBcInJlc2l6ZVwiLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gX3RoaXMuc2NhbGVQb3NpdGlvbldpdGhpbkNvbnN0cmFpbnRzKCk7XG4gICAgICAgIH0pO1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlIGVsZW1lbnQncyBsYXlvdXQgY2hhbmdlcywgY2FsY3VsYXRlIHRoZSBkZWx0YSBhbmQgYXBwbHkgdGhhdCB0b1xuICAgICAgICAgKiB0aGUgZHJhZyBnZXN0dXJlJ3Mgb3JpZ2luIHBvaW50LlxuICAgICAgICAgKi9cbiAgICAgICAgcHJvamVjdGlvbi5hZGRFdmVudExpc3RlbmVyKFwiZGlkVXBkYXRlXCIsIChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciBkZWx0YSA9IF9hLmRlbHRhLCBoYXNMYXlvdXRDaGFuZ2VkID0gX2EuaGFzTGF5b3V0Q2hhbmdlZDtcbiAgICAgICAgICAgIGlmIChfdGhpcy5pc0RyYWdnaW5nICYmIGhhc0xheW91dENoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICBlYWNoQXhpcyhmdW5jdGlvbiAoYXhpcykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbW90aW9uVmFsdWUgPSBfdGhpcy5nZXRBeGlzTW90aW9uVmFsdWUoYXhpcyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghbW90aW9uVmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLm9yaWdpblBvaW50W2F4aXNdICs9IGRlbHRhW2F4aXNdLnRyYW5zbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgbW90aW9uVmFsdWUuc2V0KG1vdGlvblZhbHVlLmdldCgpICsgZGVsdGFbYXhpc10udHJhbnNsYXRlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBfdGhpcy52aXN1YWxFbGVtZW50LnN5bmNSZW5kZXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc3RvcFJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgICAgICAgICBzdG9wUG9pbnRlckxpc3RlbmVyKCk7XG4gICAgICAgICAgICBzdG9wTWVhc3VyZUxheW91dExpc3RlbmVyKCk7XG4gICAgICAgIH07XG4gICAgfTtcbiAgICBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzLnByb3RvdHlwZS5nZXRQcm9wcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByb3BzID0gdGhpcy52aXN1YWxFbGVtZW50LmdldFByb3BzKCk7XG4gICAgICAgIHZhciBfYSA9IHByb3BzLmRyYWcsIGRyYWcgPSBfYSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfYSwgX2IgPSBwcm9wcy5kcmFnRGlyZWN0aW9uTG9jaywgZHJhZ0RpcmVjdGlvbkxvY2sgPSBfYiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfYiwgX2MgPSBwcm9wcy5kcmFnUHJvcGFnYXRpb24sIGRyYWdQcm9wYWdhdGlvbiA9IF9jID09PSB2b2lkIDAgPyBmYWxzZSA6IF9jLCBfZCA9IHByb3BzLmRyYWdDb25zdHJhaW50cywgZHJhZ0NvbnN0cmFpbnRzID0gX2QgPT09IHZvaWQgMCA/IGZhbHNlIDogX2QsIF9lID0gcHJvcHMuZHJhZ0VsYXN0aWMsIGRyYWdFbGFzdGljID0gX2UgPT09IHZvaWQgMCA/IGRlZmF1bHRFbGFzdGljIDogX2UsIF9mID0gcHJvcHMuZHJhZ01vbWVudHVtLCBkcmFnTW9tZW50dW0gPSBfZiA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9mO1xuICAgICAgICByZXR1cm4gX19hc3NpZ24oX19hc3NpZ24oe30sIHByb3BzKSwgeyBkcmFnOiBkcmFnLCBkcmFnRGlyZWN0aW9uTG9jazogZHJhZ0RpcmVjdGlvbkxvY2ssIGRyYWdQcm9wYWdhdGlvbjogZHJhZ1Byb3BhZ2F0aW9uLCBkcmFnQ29uc3RyYWludHM6IGRyYWdDb25zdHJhaW50cywgZHJhZ0VsYXN0aWM6IGRyYWdFbGFzdGljLCBkcmFnTW9tZW50dW06IGRyYWdNb21lbnR1bSB9KTtcbiAgICB9O1xuICAgIHJldHVybiBWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzO1xufSgpKTtcbmZ1bmN0aW9uIHNob3VsZERyYWcoZGlyZWN0aW9uLCBkcmFnLCBjdXJyZW50RGlyZWN0aW9uKSB7XG4gICAgcmV0dXJuICgoZHJhZyA9PT0gdHJ1ZSB8fCBkcmFnID09PSBkaXJlY3Rpb24pICYmXG4gICAgICAgIChjdXJyZW50RGlyZWN0aW9uID09PSBudWxsIHx8IGN1cnJlbnREaXJlY3Rpb24gPT09IGRpcmVjdGlvbikpO1xufVxuLyoqXG4gKiBCYXNlZCBvbiBhbiB4L3kgb2Zmc2V0IGRldGVybWluZSB0aGUgY3VycmVudCBkcmFnIGRpcmVjdGlvbi4gSWYgYm90aCBheGlzJyBvZmZzZXRzIGFyZSBsb3dlclxuICogdGhhbiB0aGUgcHJvdmlkZWQgdGhyZXNob2xkLCByZXR1cm4gYG51bGxgLlxuICpcbiAqIEBwYXJhbSBvZmZzZXQgLSBUaGUgeC95IG9mZnNldCBmcm9tIG9yaWdpbi5cbiAqIEBwYXJhbSBsb2NrVGhyZXNob2xkIC0gKE9wdGlvbmFsKSAtIHRoZSBtaW5pbXVtIGFic29sdXRlIG9mZnNldCBiZWZvcmUgd2UgY2FuIGRldGVybWluZSBhIGRyYWcgZGlyZWN0aW9uLlxuICovXG5mdW5jdGlvbiBnZXRDdXJyZW50RGlyZWN0aW9uKG9mZnNldCwgbG9ja1RocmVzaG9sZCkge1xuICAgIGlmIChsb2NrVGhyZXNob2xkID09PSB2b2lkIDApIHsgbG9ja1RocmVzaG9sZCA9IDEwOyB9XG4gICAgdmFyIGRpcmVjdGlvbiA9IG51bGw7XG4gICAgaWYgKE1hdGguYWJzKG9mZnNldC55KSA+IGxvY2tUaHJlc2hvbGQpIHtcbiAgICAgICAgZGlyZWN0aW9uID0gXCJ5XCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKE1hdGguYWJzKG9mZnNldC54KSA+IGxvY2tUaHJlc2hvbGQpIHtcbiAgICAgICAgZGlyZWN0aW9uID0gXCJ4XCI7XG4gICAgfVxuICAgIHJldHVybiBkaXJlY3Rpb247XG59XG5cbmV4cG9ydCB7IFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHMsIGVsZW1lbnREcmFnQ29udHJvbHMgfTtcbiIsImltcG9ydCB7IHVzZURyYWcgfSBmcm9tICcuLi8uLi9nZXN0dXJlcy9kcmFnL3VzZS1kcmFnLm1qcyc7XG5pbXBvcnQgeyB1c2VQYW5HZXN0dXJlIH0gZnJvbSAnLi4vLi4vZ2VzdHVyZXMvdXNlLXBhbi1nZXN0dXJlLm1qcyc7XG5pbXBvcnQgeyBtYWtlUmVuZGVybGVzc0NvbXBvbmVudCB9IGZyb20gJy4uL3V0aWxzL21ha2UtcmVuZGVybGVzcy1jb21wb25lbnQubWpzJztcblxudmFyIGRyYWcgPSB7XG4gICAgcGFuOiBtYWtlUmVuZGVybGVzc0NvbXBvbmVudCh1c2VQYW5HZXN0dXJlKSxcbiAgICBkcmFnOiBtYWtlUmVuZGVybGVzc0NvbXBvbmVudCh1c2VEcmFnKSxcbn07XG5cbmV4cG9ydCB7IGRyYWcgfTtcbiIsImltcG9ydCB7IHVzZVJlZiwgdXNlQ29udGV4dCwgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgTW90aW9uQ29uZmlnQ29udGV4dCB9IGZyb20gJy4uL2NvbnRleHQvTW90aW9uQ29uZmlnQ29udGV4dC5tanMnO1xuaW1wb3J0IHsgdXNlVW5tb3VudEVmZmVjdCB9IGZyb20gJy4uL3V0aWxzL3VzZS11bm1vdW50LWVmZmVjdC5tanMnO1xuaW1wb3J0IHsgdXNlUG9pbnRlckV2ZW50IH0gZnJvbSAnLi4vZXZlbnRzL3VzZS1wb2ludGVyLWV2ZW50Lm1qcyc7XG5pbXBvcnQgeyBQYW5TZXNzaW9uIH0gZnJvbSAnLi9QYW5TZXNzaW9uLm1qcyc7XG5cbi8qKlxuICpcbiAqIEBwYXJhbSBoYW5kbGVycyAtXG4gKiBAcGFyYW0gcmVmIC1cbiAqXG4gKiBAcHJpdmF0ZVJlbWFya3NcbiAqIEN1cnJlbnRseSB0aGlzIHNldHMgbmV3IHBhbiBnZXN0dXJlIGZ1bmN0aW9ucyBldmVyeSByZW5kZXIuIFRoZSBtZW1vIHJvdXRlIGhhcyBiZWVuIGV4cGxvcmVkXG4gKiBpbiB0aGUgcGFzdCBidXQgdWx0aW1hdGVseSB3ZSdyZSBzdGlsbCBjcmVhdGluZyBuZXcgZnVuY3Rpb25zIGV2ZXJ5IHJlbmRlci4gQW4gb3B0aW1pc2F0aW9uXG4gKiB0byBleHBsb3JlIGlzIGNyZWF0aW5nIHRoZSBwYW4gZ2VzdHVyZXMgYW5kIGxvYWRpbmcgdGhlbSBpbnRvIGEgYHJlZmAuXG4gKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHVzZVBhbkdlc3R1cmUoX2EpIHtcbiAgICB2YXIgb25QYW4gPSBfYS5vblBhbiwgb25QYW5TdGFydCA9IF9hLm9uUGFuU3RhcnQsIG9uUGFuRW5kID0gX2Eub25QYW5FbmQsIG9uUGFuU2Vzc2lvblN0YXJ0ID0gX2Eub25QYW5TZXNzaW9uU3RhcnQsIHZpc3VhbEVsZW1lbnQgPSBfYS52aXN1YWxFbGVtZW50O1xuICAgIHZhciBoYXNQYW5FdmVudHMgPSBvblBhbiB8fCBvblBhblN0YXJ0IHx8IG9uUGFuRW5kIHx8IG9uUGFuU2Vzc2lvblN0YXJ0O1xuICAgIHZhciBwYW5TZXNzaW9uID0gdXNlUmVmKG51bGwpO1xuICAgIHZhciB0cmFuc2Zvcm1QYWdlUG9pbnQgPSB1c2VDb250ZXh0KE1vdGlvbkNvbmZpZ0NvbnRleHQpLnRyYW5zZm9ybVBhZ2VQb2ludDtcbiAgICB2YXIgaGFuZGxlcnMgPSB7XG4gICAgICAgIG9uU2Vzc2lvblN0YXJ0OiBvblBhblNlc3Npb25TdGFydCxcbiAgICAgICAgb25TdGFydDogb25QYW5TdGFydCxcbiAgICAgICAgb25Nb3ZlOiBvblBhbixcbiAgICAgICAgb25FbmQ6IGZ1bmN0aW9uIChldmVudCwgaW5mbykge1xuICAgICAgICAgICAgcGFuU2Vzc2lvbi5jdXJyZW50ID0gbnVsbDtcbiAgICAgICAgICAgIG9uUGFuRW5kICYmIG9uUGFuRW5kKGV2ZW50LCBpbmZvKTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChwYW5TZXNzaW9uLmN1cnJlbnQgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHBhblNlc3Npb24uY3VycmVudC51cGRhdGVIYW5kbGVycyhoYW5kbGVycyk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBmdW5jdGlvbiBvblBvaW50ZXJEb3duKGV2ZW50KSB7XG4gICAgICAgIHBhblNlc3Npb24uY3VycmVudCA9IG5ldyBQYW5TZXNzaW9uKGV2ZW50LCBoYW5kbGVycywge1xuICAgICAgICAgICAgdHJhbnNmb3JtUGFnZVBvaW50OiB0cmFuc2Zvcm1QYWdlUG9pbnQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB1c2VQb2ludGVyRXZlbnQodmlzdWFsRWxlbWVudCwgXCJwb2ludGVyZG93blwiLCBoYXNQYW5FdmVudHMgJiYgb25Qb2ludGVyRG93bik7XG4gICAgdXNlVW5tb3VudEVmZmVjdChmdW5jdGlvbiAoKSB7IHJldHVybiBwYW5TZXNzaW9uLmN1cnJlbnQgJiYgcGFuU2Vzc2lvbi5jdXJyZW50LmVuZCgpOyB9KTtcbn1cblxuZXhwb3J0IHsgdXNlUGFuR2VzdHVyZSB9O1xuIiwiaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVmlzdWFsRWxlbWVudERyYWdDb250cm9scyB9IGZyb20gJy4vVmlzdWFsRWxlbWVudERyYWdDb250cm9scy5tanMnO1xuaW1wb3J0IHsgdXNlQ29uc3RhbnQgfSBmcm9tICcuLi8uLi91dGlscy91c2UtY29uc3RhbnQubWpzJztcblxuLyoqXG4gKiBBIGhvb2sgdGhhdCBhbGxvd3MgYW4gZWxlbWVudCB0byBiZSBkcmFnZ2VkLlxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiB1c2VEcmFnKHByb3BzKSB7XG4gICAgdmFyIGdyb3VwRHJhZ0NvbnRyb2xzID0gcHJvcHMuZHJhZ0NvbnRyb2xzLCB2aXN1YWxFbGVtZW50ID0gcHJvcHMudmlzdWFsRWxlbWVudDtcbiAgICB2YXIgZHJhZ0NvbnRyb2xzID0gdXNlQ29uc3RhbnQoZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IFZpc3VhbEVsZW1lbnREcmFnQ29udHJvbHModmlzdWFsRWxlbWVudCk7IH0pO1xuICAgIC8vIElmIHdlJ3ZlIGJlZW4gcHJvdmlkZWQgYSBEcmFnQ29udHJvbHMgZm9yIG1hbnVhbCBjb250cm9sIG92ZXIgdGhlIGRyYWcgZ2VzdHVyZSxcbiAgICAvLyBzdWJzY3JpYmUgdGhpcyBjb21wb25lbnQgdG8gaXQgb24gbW91bnQuXG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdyb3VwRHJhZ0NvbnRyb2xzICYmIGdyb3VwRHJhZ0NvbnRyb2xzLnN1YnNjcmliZShkcmFnQ29udHJvbHMpOyB9LCBbZHJhZ0NvbnRyb2xzLCBncm91cERyYWdDb250cm9sc10pO1xuICAgIC8vIEFwcGx5IHRoZSBldmVudCBsaXN0ZW5lcnMgdG8gdGhlIGVsZW1lbnRcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkgeyByZXR1cm4gZHJhZ0NvbnRyb2xzLmFkZExpc3RlbmVycygpOyB9LCBbZHJhZ0NvbnRyb2xzXSk7XG59XG5cbmV4cG9ydCB7IHVzZURyYWcgfTtcbiIsImltcG9ydCB7IF9fc3ByZWFkQXJyYXksIF9fcmVhZCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbk1hbmFnZXIgfSBmcm9tICcuLi8uLi91dGlscy9zdWJzY3JpcHRpb24tbWFuYWdlci5tanMnO1xuXG52YXIgbmFtZXMgPSBbXG4gICAgXCJMYXlvdXRNZWFzdXJlXCIsXG4gICAgXCJCZWZvcmVMYXlvdXRNZWFzdXJlXCIsXG4gICAgXCJMYXlvdXRVcGRhdGVcIixcbiAgICBcIlZpZXdwb3J0Qm94VXBkYXRlXCIsXG4gICAgXCJVcGRhdGVcIixcbiAgICBcIlJlbmRlclwiLFxuICAgIFwiQW5pbWF0aW9uQ29tcGxldGVcIixcbiAgICBcIkxheW91dEFuaW1hdGlvbkNvbXBsZXRlXCIsXG4gICAgXCJBbmltYXRpb25TdGFydFwiLFxuICAgIFwiTGF5b3V0QW5pbWF0aW9uU3RhcnRcIixcbiAgICBcIlNldEF4aXNUYXJnZXRcIixcbiAgICBcIlVubW91bnRcIixcbl07XG5mdW5jdGlvbiBjcmVhdGVMaWZlY3ljbGVzKCkge1xuICAgIHZhciBtYW5hZ2VycyA9IG5hbWVzLm1hcChmdW5jdGlvbiAoKSB7IHJldHVybiBuZXcgU3Vic2NyaXB0aW9uTWFuYWdlcigpOyB9KTtcbiAgICB2YXIgcHJvcFN1YnNjcmlwdGlvbnMgPSB7fTtcbiAgICB2YXIgbGlmZWN5Y2xlcyA9IHtcbiAgICAgICAgY2xlYXJBbGxMaXN0ZW5lcnM6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1hbmFnZXJzLmZvckVhY2goZnVuY3Rpb24gKG1hbmFnZXIpIHsgcmV0dXJuIG1hbmFnZXIuY2xlYXIoKTsgfSk7IH0sXG4gICAgICAgIHVwZGF0ZVByb3BMaXN0ZW5lcnM6IGZ1bmN0aW9uIChwcm9wcykge1xuICAgICAgICAgICAgbmFtZXMuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICB2YXIgb24gPSBcIm9uXCIgKyBuYW1lO1xuICAgICAgICAgICAgICAgIHZhciBwcm9wTGlzdGVuZXIgPSBwcm9wc1tvbl07XG4gICAgICAgICAgICAgICAgLy8gVW5zdWJzY3JpYmUgZXhpc3Rpbmcgc3Vic2NyaXB0aW9uXG4gICAgICAgICAgICAgICAgKF9hID0gcHJvcFN1YnNjcmlwdGlvbnNbbmFtZV0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHByb3BTdWJzY3JpcHRpb25zKTtcbiAgICAgICAgICAgICAgICAvLyBBZGQgbmV3IHN1YnNjcmlwdGlvblxuICAgICAgICAgICAgICAgIGlmIChwcm9wTGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcFN1YnNjcmlwdGlvbnNbbmFtZV0gPSBsaWZlY3ljbGVzW29uXShwcm9wTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgbWFuYWdlcnMuZm9yRWFjaChmdW5jdGlvbiAobWFuYWdlciwgaSkge1xuICAgICAgICBsaWZlY3ljbGVzW1wib25cIiArIG5hbWVzW2ldXSA9IGZ1bmN0aW9uIChoYW5kbGVyKSB7IHJldHVybiBtYW5hZ2VyLmFkZChoYW5kbGVyKTsgfTtcbiAgICAgICAgbGlmZWN5Y2xlc1tcIm5vdGlmeVwiICsgbmFtZXNbaV1dID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1hbmFnZXIubm90aWZ5LmFwcGx5KG1hbmFnZXIsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSwgZmFsc2UpKTtcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gbGlmZWN5Y2xlcztcbn1cblxuZXhwb3J0IHsgY3JlYXRlTGlmZWN5Y2xlcyB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24sIF9fc3ByZWFkQXJyYXksIF9fcmVhZCB9IGZyb20gJ3RzbGliJztcbmltcG9ydCBzeW5jLCB7IGNhbmNlbFN5bmMgfSBmcm9tICdmcmFtZXN5bmMnO1xuaW1wb3J0IHsgbW90aW9uVmFsdWUgfSBmcm9tICcuLi92YWx1ZS9pbmRleC5tanMnO1xuaW1wb3J0IHsgaXNNb3Rpb25WYWx1ZSB9IGZyb20gJy4uL3ZhbHVlL3V0aWxzL2lzLW1vdGlvbi12YWx1ZS5tanMnO1xuaW1wb3J0IHsgdmFyaWFudFByaW9yaXR5T3JkZXIgfSBmcm9tICcuL3V0aWxzL2FuaW1hdGlvbi1zdGF0ZS5tanMnO1xuaW1wb3J0IHsgY3JlYXRlTGlmZWN5Y2xlcyB9IGZyb20gJy4vdXRpbHMvbGlmZWN5Y2xlcy5tanMnO1xuaW1wb3J0IHsgdXBkYXRlTW90aW9uVmFsdWVzRnJvbVByb3BzIH0gZnJvbSAnLi91dGlscy9tb3Rpb24tdmFsdWVzLm1qcyc7XG5pbXBvcnQgeyBjaGVja0lmQ29udHJvbGxpbmdWYXJpYW50cywgY2hlY2tJZlZhcmlhbnROb2RlLCBpc1ZhcmlhbnRMYWJlbCB9IGZyb20gJy4vdXRpbHMvdmFyaWFudHMubWpzJztcblxudmFyIHZpc3VhbEVsZW1lbnQgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICB2YXIgX2IgPSBfYS50cmVlVHlwZSwgdHJlZVR5cGUgPSBfYiA9PT0gdm9pZCAwID8gXCJcIiA6IF9iLCBidWlsZCA9IF9hLmJ1aWxkLCBnZXRCYXNlVGFyZ2V0ID0gX2EuZ2V0QmFzZVRhcmdldCwgbWFrZVRhcmdldEFuaW1hdGFibGUgPSBfYS5tYWtlVGFyZ2V0QW5pbWF0YWJsZSwgbWVhc3VyZVZpZXdwb3J0Qm94ID0gX2EubWVhc3VyZVZpZXdwb3J0Qm94LCByZW5kZXJJbnN0YW5jZSA9IF9hLnJlbmRlciwgcmVhZFZhbHVlRnJvbUluc3RhbmNlID0gX2EucmVhZFZhbHVlRnJvbUluc3RhbmNlLCByZW1vdmVWYWx1ZUZyb21SZW5kZXJTdGF0ZSA9IF9hLnJlbW92ZVZhbHVlRnJvbVJlbmRlclN0YXRlLCBzb3J0Tm9kZVBvc2l0aW9uID0gX2Euc29ydE5vZGVQb3NpdGlvbiwgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzID0gX2Euc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzO1xuICAgIHJldHVybiBmdW5jdGlvbiAoX2EsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIHBhcmVudCA9IF9hLnBhcmVudCwgcHJvcHMgPSBfYS5wcm9wcywgcHJlc2VuY2VJZCA9IF9hLnByZXNlbmNlSWQsIGJsb2NrSW5pdGlhbEFuaW1hdGlvbiA9IF9hLmJsb2NrSW5pdGlhbEFuaW1hdGlvbiwgdmlzdWFsU3RhdGUgPSBfYS52aXN1YWxTdGF0ZSwgc2hvdWxkUmVkdWNlTW90aW9uID0gX2Euc2hvdWxkUmVkdWNlTW90aW9uO1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICB2YXIgaXNNb3VudGVkID0gZmFsc2U7XG4gICAgICAgIHZhciBsYXRlc3RWYWx1ZXMgPSB2aXN1YWxTdGF0ZS5sYXRlc3RWYWx1ZXMsIHJlbmRlclN0YXRlID0gdmlzdWFsU3RhdGUucmVuZGVyU3RhdGU7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUaGUgaW5zdGFuY2Ugb2YgdGhlIHJlbmRlci1zcGVjaWZpYyBub2RlIHRoYXQgd2lsbCBiZSBoeWRyYXRlZCBieSB0aGVcbiAgICAgICAgICogZXhwb3NlZCBSZWFjdCByZWYuIFNvIGZvciBleGFtcGxlLCB0aGlzIHZpc3VhbCBlbGVtZW50IGNhbiBob3N0IGFcbiAgICAgICAgICogSFRNTEVsZW1lbnQsIHBsYWluIG9iamVjdCwgb3IgVGhyZWUuanMgb2JqZWN0LiBUaGUgZnVuY3Rpb25zIHByb3ZpZGVkXG4gICAgICAgICAqIGluIFZpc3VhbEVsZW1lbnRDb25maWcgYWxsb3cgdXMgdG8gaW50ZXJmYWNlIHdpdGggdGhpcyBpbnN0YW5jZS5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBpbnN0YW5jZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIE1hbmFnZXMgdGhlIHN1YnNjcmlwdGlvbnMgZm9yIGEgdmlzdWFsIGVsZW1lbnQncyBsaWZlY3ljbGUsIGZvciBpbnN0YW5jZVxuICAgICAgICAgKiBvblJlbmRlclxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGxpZmVjeWNsZXMgPSBjcmVhdGVMaWZlY3ljbGVzKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIG1hcCBvZiBhbGwgbW90aW9uIHZhbHVlcyBhdHRhY2hlZCB0byB0aGlzIHZpc3VhbCBlbGVtZW50LiBNb3Rpb25cbiAgICAgICAgICogdmFsdWVzIGFyZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIGFueSBnaXZlbiBhbmltYXRlZCB2YWx1ZS4gQSBtb3Rpb25cbiAgICAgICAgICogdmFsdWUgbWlnaHQgYmUgcHJvdmlkZWQgZXh0ZXJuYWxseSBieSB0aGUgY29tcG9uZW50IHZpYSBwcm9wcy5cbiAgICAgICAgICovXG4gICAgICAgIHZhciB2YWx1ZXMgPSBuZXcgTWFwKCk7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBBIG1hcCBvZiBldmVyeSBzdWJzY3JpcHRpb24gdGhhdCBiaW5kcyB0aGUgcHJvdmlkZWQgb3IgZ2VuZXJhdGVkXG4gICAgICAgICAqIG1vdGlvbiB2YWx1ZXMgb25DaGFuZ2UgbGlzdGVuZXJzIHRvIHRoaXMgdmlzdWFsIGVsZW1lbnQuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgdmFsdWVTdWJzY3JpcHRpb25zID0gbmV3IE1hcCgpO1xuICAgICAgICAvKipcbiAgICAgICAgICogQSByZWZlcmVuY2UgdG8gdGhlIHByZXZpb3VzbHktcHJvdmlkZWQgbW90aW9uIHZhbHVlcyBhcyByZXR1cm5lZFxuICAgICAgICAgKiBmcm9tIHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wcy4gV2UgdXNlIHRoZSBrZXlzIGluIGhlcmUgdG8gZGV0ZXJtaW5lXG4gICAgICAgICAqIGlmIGFueSBtb3Rpb24gdmFsdWVzIG5lZWQgdG8gYmUgcmVtb3ZlZCBhZnRlciBwcm9wcyBhcmUgdXBkYXRlZC5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBwcmV2TW90aW9uVmFsdWVzID0ge307XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXaGVuIHZhbHVlcyBhcmUgcmVtb3ZlZCBmcm9tIGFsbCBhbmltYXRpb24gcHJvcHMgd2UgbmVlZCB0byBzZWFyY2hcbiAgICAgICAgICogZm9yIGEgZmFsbGJhY2sgdmFsdWUgdG8gYW5pbWF0ZSB0by4gVGhlc2UgdmFsdWVzIGFyZSB0cmFja2VkIGluIGJhc2VUYXJnZXQuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgYmFzZVRhcmdldCA9IF9fYXNzaWduKHt9LCBsYXRlc3RWYWx1ZXMpO1xuICAgICAgICAvLyBJbnRlcm5hbCBtZXRob2RzID09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICAvKipcbiAgICAgICAgICogT24gbW91bnQsIHRoaXMgd2lsbCBiZSBoeWRyYXRlZCB3aXRoIGEgY2FsbGJhY2sgdG8gZGlzY29ubmVjdFxuICAgICAgICAgKiB0aGlzIHZpc3VhbCBlbGVtZW50IGZyb20gaXRzIHBhcmVudCBvbiB1bm1vdW50LlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIHJlbW92ZUZyb21WYXJpYW50VHJlZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlbmRlciB0aGUgZWxlbWVudCB3aXRoIHRoZSBsYXRlc3Qgc3R5bGVzIG91dHNpZGUgb2YgdGhlIFJlYWN0XG4gICAgICAgICAqIHJlbmRlciBsaWZlY3ljbGVcbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgICAgICAgIGlmICghaW5zdGFuY2UgfHwgIWlzTW91bnRlZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0cmlnZ2VyQnVpbGQoKTtcbiAgICAgICAgICAgIHJlbmRlckluc3RhbmNlKGluc3RhbmNlLCByZW5kZXJTdGF0ZSwgcHJvcHMuc3R5bGUsIGVsZW1lbnQucHJvamVjdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdHJpZ2dlckJ1aWxkKCkge1xuICAgICAgICAgICAgYnVpbGQoZWxlbWVudCwgcmVuZGVyU3RhdGUsIGxhdGVzdFZhbHVlcywgb3B0aW9ucywgcHJvcHMpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcbiAgICAgICAgICAgIGxpZmVjeWNsZXMubm90aWZ5VXBkYXRlKGxhdGVzdFZhbHVlcyk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBiaW5kVG9Nb3Rpb25WYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgcmVtb3ZlT25DaGFuZ2UgPSB2YWx1ZS5vbkNoYW5nZShmdW5jdGlvbiAobGF0ZXN0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBsYXRlc3RWYWx1ZXNba2V5XSA9IGxhdGVzdFZhbHVlO1xuICAgICAgICAgICAgICAgIHByb3BzLm9uVXBkYXRlICYmIHN5bmMudXBkYXRlKHVwZGF0ZSwgZmFsc2UsIHRydWUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB2YXIgcmVtb3ZlT25SZW5kZXJSZXF1ZXN0ID0gdmFsdWUub25SZW5kZXJSZXF1ZXN0KGVsZW1lbnQuc2NoZWR1bGVSZW5kZXIpO1xuICAgICAgICAgICAgdmFsdWVTdWJzY3JpcHRpb25zLnNldChrZXksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZW1vdmVPbkNoYW5nZSgpO1xuICAgICAgICAgICAgICAgIHJlbW92ZU9uUmVuZGVyUmVxdWVzdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFueSBtb3Rpb24gdmFsdWVzIHRoYXQgYXJlIHByb3ZpZGVkIHRvIHRoZSBlbGVtZW50IHdoZW4gY3JlYXRlZFxuICAgICAgICAgKiBhcmVuJ3QgeWV0IGJvdW5kIHRvIHRoZSBlbGVtZW50LCBhcyB0aGlzIHdvdWxkIHRlY2huaWNhbGx5IGJlIGltcHVyZS5cbiAgICAgICAgICogSG93ZXZlciwgd2UgaXRlcmF0ZSB0aHJvdWdoIHRoZSBtb3Rpb24gdmFsdWVzIGFuZCBzZXQgdGhlbSB0byB0aGVcbiAgICAgICAgICogaW5pdGlhbCB2YWx1ZXMgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgICAgICAgKlxuICAgICAgICAgKiBUT0RPOiBUaGlzIGlzIGltcHVyZSBhbmQgd2Ugc2hvdWxkIGxvb2sgYXQgY2hhbmdpbmcgdGhpcyB0byBydW4gb24gbW91bnQuXG4gICAgICAgICAqIERvaW5nIHNvIHdpbGwgYnJlYWsgc29tZSB0ZXN0cyBidXQgdGhpcyBpc24ndCBuZWNjZXNzYXJpbHkgYSBicmVha2luZyBjaGFuZ2UsXG4gICAgICAgICAqIG1vcmUgYSByZWZsZWN0aW9uIG9mIHRoZSB0ZXN0LlxuICAgICAgICAgKi9cbiAgICAgICAgdmFyIGluaXRpYWxNb3Rpb25WYWx1ZXMgPSBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMocHJvcHMpO1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gaW5pdGlhbE1vdGlvblZhbHVlcykge1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gaW5pdGlhbE1vdGlvblZhbHVlc1trZXldO1xuICAgICAgICAgICAgaWYgKGxhdGVzdFZhbHVlc1trZXldICE9PSB1bmRlZmluZWQgJiYgaXNNb3Rpb25WYWx1ZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5zZXQobGF0ZXN0VmFsdWVzW2tleV0sIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogRGV0ZXJtaW5lIHdoYXQgcm9sZSB0aGlzIHZpc3VhbCBlbGVtZW50IHNob3VsZCB0YWtlIGluIHRoZSB2YXJpYW50IHRyZWUuXG4gICAgICAgICAqL1xuICAgICAgICB2YXIgaXNDb250cm9sbGluZ1ZhcmlhbnRzID0gY2hlY2tJZkNvbnRyb2xsaW5nVmFyaWFudHMocHJvcHMpO1xuICAgICAgICB2YXIgaXNWYXJpYW50Tm9kZSA9IGNoZWNrSWZWYXJpYW50Tm9kZShwcm9wcyk7XG4gICAgICAgIHZhciBlbGVtZW50ID0gX19hc3NpZ24oX19hc3NpZ24oeyB0cmVlVHlwZTogdHJlZVR5cGUsIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGlzIGlzIGEgbWlycm9yIG9mIHRoZSBpbnRlcm5hbCBpbnN0YW5jZSBwcm9wLCB3aGljaCBrZWVwc1xuICAgICAgICAgICAgICogVmlzdWFsRWxlbWVudCB0eXBlLWNvbXBhdGlibGUgd2l0aCBSZWFjdCdzIFJlZk9iamVjdC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgY3VycmVudDogbnVsbCwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFRoZSBkZXB0aCBvZiB0aGlzIHZpc3VhbCBlbGVtZW50IHdpdGhpbiB0aGUgdmlzdWFsIGVsZW1lbnQgdHJlZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZGVwdGg6IHBhcmVudCA/IHBhcmVudC5kZXB0aCArIDEgOiAwLCBwYXJlbnQ6IHBhcmVudCwgY2hpbGRyZW46IG5ldyBTZXQoKSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHByZXNlbmNlSWQ6IHByZXNlbmNlSWQsIHNob3VsZFJlZHVjZU1vdGlvbjogc2hvdWxkUmVkdWNlTW90aW9uLCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgdGhpcyBjb21wb25lbnQgaXMgcGFydCBvZiB0aGUgdmFyaWFudCB0cmVlLCBpdCBzaG91bGQgdHJhY2tcbiAgICAgICAgICAgICAqIGFueSBjaGlsZHJlbiB0aGF0IGFyZSBhbHNvIHBhcnQgb2YgdGhlIHRyZWUuIFRoaXMgaXMgZXNzZW50aWFsbHlcbiAgICAgICAgICAgICAqIGEgc2hhZG93IHRyZWUgdG8gc2ltcGxpZnkgbG9naWMgYXJvdW5kIGhvdyB0byBzdGFnZ2VyIG92ZXIgY2hpbGRyZW4uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHZhcmlhbnRDaGlsZHJlbjogaXNWYXJpYW50Tm9kZSA/IG5ldyBTZXQoKSA6IHVuZGVmaW5lZCwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFdoZXRoZXIgdGhpcyBpbnN0YW5jZSBpcyB2aXNpYmxlLiBUaGlzIGNhbiBiZSBjaGFuZ2VkIGltcGVyYXRpdmVseVxuICAgICAgICAgICAgICogYnkgdGhlIHByb2plY3Rpb24gdHJlZSwgaXMgYW5hbG9nb3VzIHRvIENTUydzIHZpc2liaWxpdHkgaW4gdGhhdFxuICAgICAgICAgICAgICogaGlkZGVuIGVsZW1lbnRzIHNob3VsZCB0YWtlIHVwIGxheW91dCwgYW5kIG5lZWRzIGVuYWN0aW5nIGJ5IHRoZSBjb25maWd1cmVkXG4gICAgICAgICAgICAgKiByZW5kZXIgZnVuY3Rpb24uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGlzVmlzaWJsZTogdW5kZWZpbmVkLCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTm9ybWFsbHksIGlmIGEgY29tcG9uZW50IGlzIGNvbnRyb2xsZWQgYnkgYSBwYXJlbnQncyB2YXJpYW50cywgaXQgY2FuXG4gICAgICAgICAgICAgKiByZWx5IG9uIHRoYXQgYW5jZXN0b3IgdG8gdHJpZ2dlciBhbmltYXRpb25zIGZ1cnRoZXIgZG93biB0aGUgdHJlZS5cbiAgICAgICAgICAgICAqIEhvd2V2ZXIsIGlmIGEgY29tcG9uZW50IGlzIGNyZWF0ZWQgYWZ0ZXIgaXRzIHBhcmVudCBpcyBtb3VudGVkLCB0aGUgcGFyZW50XG4gICAgICAgICAgICAgKiB3b24ndCB0cmlnZ2VyIHRoYXQgbW91bnQgYW5pbWF0aW9uIHNvIHRoZSBjaGlsZCBuZWVkcyB0by5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBUT0RPOiBUaGlzIG1pZ2h0IGJlIGJldHRlciByZXBsYWNlZCB3aXRoIGEgbWV0aG9kIGlzUGFyZW50TW91bnRlZFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBtYW51YWxseUFuaW1hdGVPbk1vdW50OiBCb29sZWFuKHBhcmVudCA9PT0gbnVsbCB8fCBwYXJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudC5pc01vdW50ZWQoKSksIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUaGlzIGNhbiBiZSBzZXQgYnkgQW5pbWF0ZVByZXNlbmNlIHRvIGZvcmNlIGNvbXBvbmVudHMgdGhhdCBtb3VudFxuICAgICAgICAgICAgICogYXQgdGhlIHNhbWUgdGltZSBhcyBpdCB0byBtb3VudCBhcyBpZiB0aGV5IGhhdmUgaW5pdGlhbD17ZmFsc2V9IHNldC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYmxvY2tJbml0aWFsQW5pbWF0aW9uOiBibG9ja0luaXRpYWxBbmltYXRpb24sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBEZXRlcm1pbmUgd2hldGhlciB0aGlzIGNvbXBvbmVudCBoYXMgbW91bnRlZCB5ZXQuIFRoaXMgaXMgbW9zdGx5IHVzZWRcbiAgICAgICAgICAgICAqIGJ5IHZhcmlhbnQgY2hpbGRyZW4gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhleSBuZWVkIHRvIHRyaWdnZXIgdGhlaXJcbiAgICAgICAgICAgICAqIG93biBhbmltYXRpb25zIG9uIG1vdW50LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpc01vdW50ZWQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIEJvb2xlYW4oaW5zdGFuY2UpOyB9LCBtb3VudDogZnVuY3Rpb24gKG5ld0luc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgaXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBpbnN0YW5jZSA9IGVsZW1lbnQuY3VycmVudCA9IG5ld0luc3RhbmNlO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnByb2plY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5wcm9qZWN0aW9uLm1vdW50KG5ld0luc3RhbmNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGlzVmFyaWFudE5vZGUgJiYgcGFyZW50ICYmICFpc0NvbnRyb2xsaW5nVmFyaWFudHMpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlRnJvbVZhcmlhbnRUcmVlID0gcGFyZW50ID09PSBudWxsIHx8IHBhcmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyZW50LmFkZFZhcmlhbnRDaGlsZChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBrZXkpIHsgcmV0dXJuIGJpbmRUb01vdGlvblZhbHVlKGtleSwgdmFsdWUpOyB9KTtcbiAgICAgICAgICAgICAgICBwYXJlbnQgPT09IG51bGwgfHwgcGFyZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJlbnQuY2hpbGRyZW4uYWRkKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2V0UHJvcHMocHJvcHMpO1xuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHVubW91bnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgKF9hID0gZWxlbWVudC5wcm9qZWN0aW9uKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudW5tb3VudCgpO1xuICAgICAgICAgICAgICAgIGNhbmNlbFN5bmMudXBkYXRlKHVwZGF0ZSk7XG4gICAgICAgICAgICAgICAgY2FuY2VsU3luYy5yZW5kZXIocmVuZGVyKTtcbiAgICAgICAgICAgICAgICB2YWx1ZVN1YnNjcmlwdGlvbnMuZm9yRWFjaChmdW5jdGlvbiAocmVtb3ZlKSB7IHJldHVybiByZW1vdmUoKTsgfSk7XG4gICAgICAgICAgICAgICAgcmVtb3ZlRnJvbVZhcmlhbnRUcmVlID09PSBudWxsIHx8IHJlbW92ZUZyb21WYXJpYW50VHJlZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcmVtb3ZlRnJvbVZhcmlhbnRUcmVlKCk7XG4gICAgICAgICAgICAgICAgcGFyZW50ID09PSBudWxsIHx8IHBhcmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyZW50LmNoaWxkcmVuLmRlbGV0ZShlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBsaWZlY3ljbGVzLmNsZWFyQWxsTGlzdGVuZXJzKCk7XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgaXNNb3VudGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQWRkIGEgY2hpbGQgdmlzdWFsIGVsZW1lbnQgdG8gb3VyIHNldCBvZiBjaGlsZHJlbi5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYWRkVmFyaWFudENoaWxkOiBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgdmFyIGNsb3Nlc3RWYXJpYW50Tm9kZSA9IGVsZW1lbnQuZ2V0Q2xvc2VzdFZhcmlhbnROb2RlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNsb3Nlc3RWYXJpYW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICAoX2EgPSBjbG9zZXN0VmFyaWFudE5vZGUudmFyaWFudENoaWxkcmVuKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYWRkKGNoaWxkKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjbG9zZXN0VmFyaWFudE5vZGUudmFyaWFudENoaWxkcmVuLmRlbGV0ZShjaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSwgc29ydE5vZGVQb3NpdGlvbjogZnVuY3Rpb24gKG90aGVyKSB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogSWYgdGhlc2Ugbm9kZXMgYXJlbid0IGV2ZW4gb2YgdGhlIHNhbWUgdHlwZSB3ZSBjYW4ndCBjb21wYXJlIHRoZWlyIGRlcHRoLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGlmICghc29ydE5vZGVQb3NpdGlvbiB8fCB0cmVlVHlwZSAhPT0gb3RoZXIudHJlZVR5cGUpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICAgICAgICAgIHJldHVybiBzb3J0Tm9kZVBvc2l0aW9uKGVsZW1lbnQuZ2V0SW5zdGFuY2UoKSwgb3RoZXIuZ2V0SW5zdGFuY2UoKSk7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJucyB0aGUgY2xvc2VzdCB2YXJpYW50IG5vZGUgaW4gdGhlIHRyZWUgc3RhcnRpbmcgZnJvbVxuICAgICAgICAgICAgICogdGhpcyB2aXN1YWwgZWxlbWVudC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZ2V0Q2xvc2VzdFZhcmlhbnROb2RlOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVmFyaWFudE5vZGUgPyBlbGVtZW50IDogcGFyZW50ID09PSBudWxsIHx8IHBhcmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyZW50LmdldENsb3Nlc3RWYXJpYW50Tm9kZSgpO1xuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEV4cG9zZSB0aGUgbGF0ZXN0IGxheW91dElkIHByb3AuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGdldExheW91dElkOiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm9wcy5sYXlvdXRJZDsgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFJldHVybnMgdGhlIGN1cnJlbnQgaW5zdGFuY2UuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGdldEluc3RhbmNlOiBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnN0YW5jZTsgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEdldC9zZXQgdGhlIGxhdGVzdCBzdGF0aWMgdmFsdWVzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBnZXRTdGF0aWNWYWx1ZTogZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gbGF0ZXN0VmFsdWVzW2tleV07IH0sIHNldFN0YXRpY1ZhbHVlOiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgeyByZXR1cm4gKGxhdGVzdFZhbHVlc1trZXldID0gdmFsdWUpOyB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJucyB0aGUgbGF0ZXN0IG1vdGlvbiB2YWx1ZSBzdGF0ZS4gQ3VycmVudGx5IG9ubHkgdXNlZCB0byB0YWtlXG4gICAgICAgICAgICAgKiBhIHNuYXBzaG90IG9mIHRoZSB2aXN1YWwgZWxlbWVudCAtIHBlcmhhcHMgdGhpcyBjYW4gcmV0dXJuIHRoZSB3aG9sZVxuICAgICAgICAgICAgICogdmlzdWFsIHN0YXRlXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGdldExhdGVzdFZhbHVlczogZnVuY3Rpb24gKCkgeyByZXR1cm4gbGF0ZXN0VmFsdWVzOyB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogU2V0IHRoZSB2aXNpYmxpdHkgb2YgdGhlIHZpc3VhbCBlbGVtZW50LiBJZiBpdCdzIGNoYW5nZWQsIHNjaGVkdWxlXG4gICAgICAgICAgICAgKiBhIHJlbmRlciB0byByZWZsZWN0IHRoZXNlIGNoYW5nZXMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHNldFZpc2liaWxpdHk6IGZ1bmN0aW9uICh2aXNpYmlsaXR5KSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaXNWaXNpYmxlID09PSB2aXNpYmlsaXR5KVxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZWxlbWVudC5pc1Zpc2libGUgPSB2aXNpYmlsaXR5O1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuc2NoZWR1bGVSZW5kZXIoKTtcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBNYWtlIGEgdGFyZ2V0IGFuaW1hdGFibGUgYnkgUG9wbW90aW9uLiBGb3IgaW5zdGFuY2UsIGlmIHdlJ3JlXG4gICAgICAgICAgICAgKiB0cnlpbmcgdG8gYW5pbWF0ZSB3aWR0aCBmcm9tIDEwMHB4IHRvIDEwMHZ3IHdlIG5lZWQgdG8gbWVhc3VyZSAxMDB2d1xuICAgICAgICAgICAgICogaW4gcGl4ZWxzIHRvIGRldGVybWluZSB3aGF0IHdlIHJlYWxseSBuZWVkIHRvIGFuaW1hdGUgdG8uIFRoaXMgaXMgYWxzb1xuICAgICAgICAgICAgICogcGx1Z2dhYmxlIHRvIHN1cHBvcnQgRnJhbWVyJ3MgY3VzdG9tIHZhbHVlIHR5cGVzIGxpa2UgQ29sb3IsXG4gICAgICAgICAgICAgKiBhbmQgQ1NTIHZhcmlhYmxlcy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbWFrZVRhcmdldEFuaW1hdGFibGU6IGZ1bmN0aW9uICh0YXJnZXQsIGNhbk11dGF0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChjYW5NdXRhdGUgPT09IHZvaWQgMCkgeyBjYW5NdXRhdGUgPSB0cnVlOyB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VUYXJnZXRBbmltYXRhYmxlKGVsZW1lbnQsIHRhcmdldCwgcHJvcHMsIGNhbk11dGF0ZSk7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTWVhc3VyZSB0aGUgY3VycmVudCB2aWV3cG9ydCBib3ggd2l0aCBvciB3aXRob3V0IHRyYW5zZm9ybXMuXG4gICAgICAgICAgICAgKiBPbmx5IG1lYXN1cmVzIGF4aXMtYWxpZ25lZCBib3hlcywgcm90YXRlIGFuZCBza2V3IG11c3QgYmUgbWFudWFsbHlcbiAgICAgICAgICAgICAqIHJlbW92ZWQgd2l0aCBhIHJlLXJlbmRlciB0byB3b3JrLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBtZWFzdXJlVmlld3BvcnRCb3g6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbWVhc3VyZVZpZXdwb3J0Qm94KGluc3RhbmNlLCBwcm9wcyk7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8vIE1vdGlvbiB2YWx1ZXMgPT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEFkZCBhIG1vdGlvbiB2YWx1ZSBhbmQgYmluZCBpdCB0byB0aGlzIHZpc3VhbCBlbGVtZW50LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBhZGRWYWx1ZTogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmUgZXhpc3RpbmcgdmFsdWUgaWYgaXQgZXhpc3RzXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuaGFzVmFsdWUoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVWYWx1ZShrZXkpO1xuICAgICAgICAgICAgICAgIHZhbHVlcy5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgbGF0ZXN0VmFsdWVzW2tleV0gPSB2YWx1ZS5nZXQoKTtcbiAgICAgICAgICAgICAgICBiaW5kVG9Nb3Rpb25WYWx1ZShrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZW1vdmUgYSBtb3Rpb24gdmFsdWUgYW5kIHVuYmluZCBhbnkgYWN0aXZlIHN1YnNjcmlwdGlvbnMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHJlbW92ZVZhbHVlOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIHZhbHVlcy5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgICAgICAoX2EgPSB2YWx1ZVN1YnNjcmlwdGlvbnMuZ2V0KGtleSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYSgpO1xuICAgICAgICAgICAgICAgIHZhbHVlU3Vic2NyaXB0aW9ucy5kZWxldGUoa2V5KTtcbiAgICAgICAgICAgICAgICBkZWxldGUgbGF0ZXN0VmFsdWVzW2tleV07XG4gICAgICAgICAgICAgICAgcmVtb3ZlVmFsdWVGcm9tUmVuZGVyU3RhdGUoa2V5LCByZW5kZXJTdGF0ZSk7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQ2hlY2sgd2hldGhlciB3ZSBoYXZlIGEgbW90aW9uIHZhbHVlIGZvciB0aGlzIGtleVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBoYXNWYWx1ZTogZnVuY3Rpb24gKGtleSkgeyByZXR1cm4gdmFsdWVzLmhhcyhrZXkpOyB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogR2V0IGEgbW90aW9uIHZhbHVlIGZvciB0aGlzIGtleS4gSWYgY2FsbGVkIHdpdGggYSBkZWZhdWx0XG4gICAgICAgICAgICAgKiB2YWx1ZSwgd2UnbGwgY3JlYXRlIG9uZSBpZiBub25lIGV4aXN0cy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZ2V0VmFsdWU6IGZ1bmN0aW9uIChrZXksIGRlZmF1bHRWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHZhbHVlcy5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1vdGlvblZhbHVlKGRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYWRkVmFsdWUoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJdGVyYXRlIG92ZXIgb3VyIG1vdGlvbiB2YWx1ZXMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGZvckVhY2hWYWx1ZTogZnVuY3Rpb24gKGNhbGxiYWNrKSB7IHJldHVybiB2YWx1ZXMuZm9yRWFjaChjYWxsYmFjayk7IH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB3ZSdyZSB0cnlpbmcgdG8gYW5pbWF0ZSB0byBhIHByZXZpb3VzbHkgdW5lbmNvdW50ZXJlZCB2YWx1ZSxcbiAgICAgICAgICAgICAqIHdlIG5lZWQgdG8gY2hlY2sgZm9yIGl0IGluIG91ciBzdGF0ZSBhbmQgYXMgYSBsYXN0IHJlc29ydCByZWFkIGl0XG4gICAgICAgICAgICAgKiBkaXJlY3RseSBmcm9tIHRoZSBpbnN0YW5jZSAod2hpY2ggbWlnaHQgaGF2ZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMpLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICByZWFkVmFsdWU6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChfYSA9IGxhdGVzdFZhbHVlc1trZXldKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiByZWFkVmFsdWVGcm9tSW5zdGFuY2UoaW5zdGFuY2UsIGtleSwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogU2V0IHRoZSBiYXNlIHRhcmdldCB0byBsYXRlciBhbmltYXRlIGJhY2sgdG8uIFRoaXMgaXMgY3VycmVudGx5XG4gICAgICAgICAgICAgKiBvbmx5IGh5ZHJhdGVkIG9uIGNyZWF0aW9uIGFuZCB3aGVuIHdlIGZpcnN0IHJlYWQgYSB2YWx1ZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgc2V0QmFzZVRhcmdldDogZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICBiYXNlVGFyZ2V0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBGaW5kIHRoZSBiYXNlIHRhcmdldCBmb3IgYSB2YWx1ZSB0aGF0cyBiZWVuIHJlbW92ZWQgZnJvbSBhbGwgYW5pbWF0aW9uXG4gICAgICAgICAgICAgKiBwcm9wcy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZ2V0QmFzZVRhcmdldDogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGlmIChnZXRCYXNlVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0YXJnZXQgPSBnZXRCYXNlVGFyZ2V0KHByb3BzLCBrZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodGFyZ2V0ICE9PSB1bmRlZmluZWQgJiYgIWlzTW90aW9uVmFsdWUodGFyZ2V0KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBiYXNlVGFyZ2V0W2tleV07XG4gICAgICAgICAgICB9IH0sIGxpZmVjeWNsZXMpLCB7IFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBCdWlsZCB0aGUgcmVuZGVyZXIgc3RhdGUgYmFzZWQgb24gdGhlIGxhdGVzdCB2aXN1YWwgc3RhdGUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGJ1aWxkOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckJ1aWxkKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlbmRlclN0YXRlO1xuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFNjaGVkdWxlIGEgcmVuZGVyIG9uIHRoZSBuZXh0IGFuaW1hdGlvbiBmcmFtZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgc2NoZWR1bGVSZW5kZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzeW5jLnJlbmRlcihyZW5kZXIsIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgICAgIH0sIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBTeW5jaHJvbm91c2x5IGZpcmUgcmVuZGVyLiBJdCdzIHByZWZlcmVkIHRoYXQgd2UgYmF0Y2ggcmVuZGVycyBidXRcbiAgICAgICAgICAgICAqIGluIG1hbnkgY2lyY3Vtc3RhbmNlcywgbGlrZSBsYXlvdXQgbWVhc3VyZW1lbnQsIHdlIG5lZWQgdG8gcnVuIHRoaXNcbiAgICAgICAgICAgICAqIHN5bmNocm9ub3VzbHkuIEhvd2V2ZXIgaW4gdGhvc2UgaW5zdGFuY2VzIG90aGVyIG1lYXN1cmVzIHNob3VsZCBiZSB0YWtlblxuICAgICAgICAgICAgICogdG8gYmF0Y2ggcmVhZHMvd3JpdGVzLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBzeW5jUmVuZGVyOiByZW5kZXIsIFxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBVcGRhdGUgdGhlIHByb3ZpZGVkIHByb3BzLiBFbnN1cmUgYW55IG5ld2x5LWFkZGVkIG1vdGlvbiB2YWx1ZXMgYXJlXG4gICAgICAgICAgICAgKiBhZGRlZCB0byBvdXIgbWFwLCBvbGQgb25lcyByZW1vdmVkLCBhbmQgbGlzdGVuZXJzIHVwZGF0ZWQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHNldFByb3BzOiBmdW5jdGlvbiAobmV3UHJvcHMpIHtcbiAgICAgICAgICAgICAgICBpZiAobmV3UHJvcHMudHJhbnNmb3JtVGVtcGxhdGUgfHwgcHJvcHMudHJhbnNmb3JtVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5zY2hlZHVsZVJlbmRlcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwcm9wcyA9IG5ld1Byb3BzO1xuICAgICAgICAgICAgICAgIGxpZmVjeWNsZXMudXBkYXRlUHJvcExpc3RlbmVycyhuZXdQcm9wcyk7XG4gICAgICAgICAgICAgICAgcHJldk1vdGlvblZhbHVlcyA9IHVwZGF0ZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyhlbGVtZW50LCBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMocHJvcHMpLCBwcmV2TW90aW9uVmFsdWVzKTtcbiAgICAgICAgICAgIH0sIGdldFByb3BzOiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm9wczsgfSwgXG4gICAgICAgICAgICAvLyBWYXJpYW50cyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJucyB0aGUgdmFyaWFudCBkZWZpbml0aW9uIHdpdGggYSBnaXZlbiBuYW1lLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBnZXRWYXJpYW50OiBmdW5jdGlvbiAobmFtZSkgeyB2YXIgX2E7IHJldHVybiAoX2EgPSBwcm9wcy52YXJpYW50cykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW25hbWVdOyB9LCBcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUmV0dXJucyB0aGUgZGVmaW5lZCBkZWZhdWx0IHRyYW5zaXRpb24gb24gdGhpcyBjb21wb25lbnQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGdldERlZmF1bHRUcmFuc2l0aW9uOiBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm9wcy50cmFuc2l0aW9uOyB9LCBnZXRUcmFuc2Zvcm1QYWdlUG9pbnQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMudHJhbnNmb3JtUGFnZVBvaW50O1xuICAgICAgICAgICAgfSwgXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFVzZWQgYnkgY2hpbGQgdmFyaWFudCBub2RlcyB0byBnZXQgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgdmFyaWFudCBwcm9wcy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZ2V0VmFyaWFudENvbnRleHQ6IGZ1bmN0aW9uIChzdGFydEF0UGFyZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXJ0QXRQYXJlbnQgPT09IHZvaWQgMCkgeyBzdGFydEF0UGFyZW50ID0gZmFsc2U7IH1cbiAgICAgICAgICAgICAgICBpZiAoc3RhcnRBdFBhcmVudClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBhcmVudCA9PT0gbnVsbCB8fCBwYXJlbnQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmVudC5nZXRWYXJpYW50Q29udGV4dCgpO1xuICAgICAgICAgICAgICAgIGlmICghaXNDb250cm9sbGluZ1ZhcmlhbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBjb250ZXh0XzEgPSAocGFyZW50ID09PSBudWxsIHx8IHBhcmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyZW50LmdldFZhcmlhbnRDb250ZXh0KCkpIHx8IHt9O1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcHMuaW5pdGlhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0XzEuaW5pdGlhbCA9IHByb3BzLmluaXRpYWw7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbnRleHRfMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIGNvbnRleHQgPSB7fTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bVZhcmlhbnRQcm9wczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBuYW1lXzEgPSB2YXJpYW50UHJvcHNbaV07XG4gICAgICAgICAgICAgICAgICAgIHZhciBwcm9wID0gcHJvcHNbbmFtZV8xXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVmFyaWFudExhYmVsKHByb3ApIHx8IHByb3AgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0W25hbWVfMV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgICAgICAgICAgfSB9KTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfTtcbn07XG52YXIgdmFyaWFudFByb3BzID0gX19zcHJlYWRBcnJheShbXCJpbml0aWFsXCJdLCBfX3JlYWQodmFyaWFudFByaW9yaXR5T3JkZXIpLCBmYWxzZSk7XG52YXIgbnVtVmFyaWFudFByb3BzID0gdmFyaWFudFByb3BzLmxlbmd0aDtcblxuZXhwb3J0IHsgdmlzdWFsRWxlbWVudCB9O1xuIiwiaW1wb3J0IHsgd2Fybk9uY2UgfSBmcm9tICcuLi8uLi91dGlscy93YXJuLW9uY2UubWpzJztcbmltcG9ydCB7IG1vdGlvblZhbHVlIH0gZnJvbSAnLi4vLi4vdmFsdWUvaW5kZXgubWpzJztcbmltcG9ydCB7IGlzTW90aW9uVmFsdWUgfSBmcm9tICcuLi8uLi92YWx1ZS91dGlscy9pcy1tb3Rpb24tdmFsdWUubWpzJztcblxuZnVuY3Rpb24gdXBkYXRlTW90aW9uVmFsdWVzRnJvbVByb3BzKGVsZW1lbnQsIG5leHQsIHByZXYpIHtcbiAgICB2YXIgX2E7XG4gICAgZm9yICh2YXIga2V5IGluIG5leHQpIHtcbiAgICAgICAgdmFyIG5leHRWYWx1ZSA9IG5leHRba2V5XTtcbiAgICAgICAgdmFyIHByZXZWYWx1ZSA9IHByZXZba2V5XTtcbiAgICAgICAgaWYgKGlzTW90aW9uVmFsdWUobmV4dFZhbHVlKSkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB0aGlzIGlzIGEgbW90aW9uIHZhbHVlIGZvdW5kIGluIHByb3BzIG9yIHN0eWxlLCB3ZSB3YW50IHRvIGFkZCBpdFxuICAgICAgICAgICAgICogdG8gb3VyIHZpc3VhbCBlbGVtZW50J3MgbW90aW9uIHZhbHVlIG1hcC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgZWxlbWVudC5hZGRWYWx1ZShrZXksIG5leHRWYWx1ZSk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIENoZWNrIHRoZSB2ZXJzaW9uIG9mIHRoZSBpbmNvbWluZyBtb3Rpb24gdmFsdWUgd2l0aCB0aGlzIHZlcnNpb25cbiAgICAgICAgICAgICAqIGFuZCB3YXJuIGFnYWluc3QgbWlzbWF0Y2hlcy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSBcImRldmVsb3BtZW50XCIpIHtcbiAgICAgICAgICAgICAgICB3YXJuT25jZShuZXh0VmFsdWUudmVyc2lvbiA9PT0gXCI2LjUuMVwiLCBcIkF0dGVtcHRpbmcgdG8gbWl4IEZyYW1lciBNb3Rpb24gdmVyc2lvbnMgXCIuY29uY2F0KG5leHRWYWx1ZS52ZXJzaW9uLCBcIiB3aXRoIDYuNS4xIG1heSBub3Qgd29yayBhcyBleHBlY3RlZC5cIikpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzTW90aW9uVmFsdWUocHJldlZhbHVlKSkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB3ZSdyZSBzd2FwcGluZyB0byBhIG5ldyBtb3Rpb24gdmFsdWUsIGNyZWF0ZSBhIG5ldyBtb3Rpb24gdmFsdWVcbiAgICAgICAgICAgICAqIGZyb20gdGhhdFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBlbGVtZW50LmFkZFZhbHVlKGtleSwgbW90aW9uVmFsdWUobmV4dFZhbHVlKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAocHJldlZhbHVlICE9PSBuZXh0VmFsdWUpIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgdGhpcyBpcyBhIGZsYXQgdmFsdWUgdGhhdCBoYXMgY2hhbmdlZCwgdXBkYXRlIHRoZSBtb3Rpb24gdmFsdWVcbiAgICAgICAgICAgICAqIG9yIGNyZWF0ZSBvbmUgaWYgaXQgZG9lc24ndCBleGlzdC4gV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgaWYgd2UncmVcbiAgICAgICAgICAgICAqIG5vdCBoYW5kbGluZyB0aGUgdmFsdWUgd2l0aCBvdXIgYW5pbWF0aW9uIHN0YXRlLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5oYXNWYWx1ZShrZXkpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGV4aXN0aW5nVmFsdWUgPSBlbGVtZW50LmdldFZhbHVlKGtleSk7XG4gICAgICAgICAgICAgICAgLy8gVE9ETzogT25seSB1cGRhdGUgdmFsdWVzIHRoYXQgYXJlbid0IGJlaW5nIGFuaW1hdGVkIG9yIGV2ZW4gbG9va2VkIGF0XG4gICAgICAgICAgICAgICAgIWV4aXN0aW5nVmFsdWUuaGFzQW5pbWF0ZWQgJiYgZXhpc3RpbmdWYWx1ZS5zZXQobmV4dFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQuYWRkVmFsdWUoa2V5LCBtb3Rpb25WYWx1ZSgoX2EgPSBlbGVtZW50LmdldFN0YXRpY1ZhbHVlKGtleSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG5leHRWYWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEhhbmRsZSByZW1vdmVkIHZhbHVlc1xuICAgIGZvciAodmFyIGtleSBpbiBwcmV2KSB7XG4gICAgICAgIGlmIChuZXh0W2tleV0gPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlVmFsdWUoa2V5KTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQ7XG59XG5cbmV4cG9ydCB7IHVwZGF0ZU1vdGlvblZhbHVlc0Zyb21Qcm9wcyB9O1xuIiwiaW1wb3J0IHsgX19yZXN0LCBfX2Fzc2lnbiwgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgaW52YXJpYW50IH0gZnJvbSAnaGV5LWxpc3Rlbic7XG5cbmZ1bmN0aW9uIGlzQ1NTVmFyaWFibGUodmFsdWUpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmIHZhbHVlLnN0YXJ0c1dpdGgoXCJ2YXIoLS1cIik7XG59XG4vKipcbiAqIFBhcnNlIEZyYW1lcidzIHNwZWNpYWwgQ1NTIHZhcmlhYmxlIGZvcm1hdCBpbnRvIGEgQ1NTIHRva2VuIGFuZCBhIGZhbGxiYWNrLlxuICpcbiAqIGBgYFxuICogYHZhcigtLWZvbywgI2ZmZilgID0+IFtgLS1mb29gLCAnI2ZmZiddXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gY3VycmVudFxuICovXG52YXIgY3NzVmFyaWFibGVSZWdleCA9IC92YXJcXCgoLS1bYS16QS1aMC05LV9dKyksPyA/KFthLXpBLVowLTkgKCklIy4sLV0rKT9cXCkvO1xuZnVuY3Rpb24gcGFyc2VDU1NWYXJpYWJsZShjdXJyZW50KSB7XG4gICAgdmFyIG1hdGNoID0gY3NzVmFyaWFibGVSZWdleC5leGVjKGN1cnJlbnQpO1xuICAgIGlmICghbWF0Y2gpXG4gICAgICAgIHJldHVybiBbLF07XG4gICAgdmFyIF9hID0gX19yZWFkKG1hdGNoLCAzKSwgdG9rZW4gPSBfYVsxXSwgZmFsbGJhY2sgPSBfYVsyXTtcbiAgICByZXR1cm4gW3Rva2VuLCBmYWxsYmFja107XG59XG52YXIgbWF4RGVwdGggPSA0O1xuZnVuY3Rpb24gZ2V0VmFyaWFibGVWYWx1ZShjdXJyZW50LCBlbGVtZW50LCBkZXB0aCkge1xuICAgIGlmIChkZXB0aCA9PT0gdm9pZCAwKSB7IGRlcHRoID0gMTsgfVxuICAgIGludmFyaWFudChkZXB0aCA8PSBtYXhEZXB0aCwgXCJNYXggQ1NTIHZhcmlhYmxlIGZhbGxiYWNrIGRlcHRoIGRldGVjdGVkIGluIHByb3BlcnR5IFxcXCJcIi5jb25jYXQoY3VycmVudCwgXCJcXFwiLiBUaGlzIG1heSBpbmRpY2F0ZSBhIGNpcmN1bGFyIGZhbGxiYWNrIGRlcGVuZGVuY3kuXCIpKTtcbiAgICB2YXIgX2EgPSBfX3JlYWQocGFyc2VDU1NWYXJpYWJsZShjdXJyZW50KSwgMiksIHRva2VuID0gX2FbMF0sIGZhbGxiYWNrID0gX2FbMV07XG4gICAgLy8gTm8gQ1NTIHZhcmlhYmxlIGRldGVjdGVkXG4gICAgaWYgKCF0b2tlbilcbiAgICAgICAgcmV0dXJuO1xuICAgIC8vIEF0dGVtcHQgdG8gcmVhZCB0aGlzIENTUyB2YXJpYWJsZSBvZmYgdGhlIGVsZW1lbnRcbiAgICB2YXIgcmVzb2x2ZWQgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHRva2VuKTtcbiAgICBpZiAocmVzb2x2ZWQpIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVkLnRyaW0oKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNDU1NWYXJpYWJsZShmYWxsYmFjaykpIHtcbiAgICAgICAgLy8gVGhlIGZhbGxiYWNrIG1pZ2h0IGl0c2VsZiBiZSBhIENTUyB2YXJpYWJsZSwgaW4gd2hpY2ggY2FzZSB3ZSBhdHRlbXB0IHRvIHJlc29sdmUgaXQgdG9vLlxuICAgICAgICByZXR1cm4gZ2V0VmFyaWFibGVWYWx1ZShmYWxsYmFjaywgZWxlbWVudCwgZGVwdGggKyAxKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxsYmFjaztcbiAgICB9XG59XG4vKipcbiAqIFJlc29sdmUgQ1NTIHZhcmlhYmxlcyBmcm9tXG4gKlxuICogQGludGVybmFsXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVDU1NWYXJpYWJsZXModmlzdWFsRWxlbWVudCwgX2EsIHRyYW5zaXRpb25FbmQpIHtcbiAgICB2YXIgX2I7XG4gICAgdmFyIHRhcmdldCA9IF9fcmVzdChfYSwgW10pO1xuICAgIHZhciBlbGVtZW50ID0gdmlzdWFsRWxlbWVudC5nZXRJbnN0YW5jZSgpO1xuICAgIGlmICghKGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50KSlcbiAgICAgICAgcmV0dXJuIHsgdGFyZ2V0OiB0YXJnZXQsIHRyYW5zaXRpb25FbmQ6IHRyYW5zaXRpb25FbmQgfTtcbiAgICAvLyBJZiBgdHJhbnNpdGlvbkVuZGAgaXNuJ3QgYHVuZGVmaW5lZGAsIGNsb25lIGl0LiBXZSBjb3VsZCBjbG9uZSBgdGFyZ2V0YCBhbmQgYHRyYW5zaXRpb25FbmRgXG4gICAgLy8gb25seSBpZiB0aGV5IGNoYW5nZSBidXQgSSB0aGluayB0aGlzIHJlYWRzIGNsZWFyZXIgYW5kIHRoaXMgaXNuJ3QgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBwYXRoLlxuICAgIGlmICh0cmFuc2l0aW9uRW5kKSB7XG4gICAgICAgIHRyYW5zaXRpb25FbmQgPSBfX2Fzc2lnbih7fSwgdHJhbnNpdGlvbkVuZCk7XG4gICAgfVxuICAgIC8vIEdvIHRocm91Z2ggZXhpc3RpbmcgYE1vdGlvblZhbHVlYHMgYW5kIGVuc3VyZSBhbnkgZXhpc3RpbmcgQ1NTIHZhcmlhYmxlcyBhcmUgcmVzb2x2ZWRcbiAgICB2aXN1YWxFbGVtZW50LmZvckVhY2hWYWx1ZShmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgdmFyIGN1cnJlbnQgPSB2YWx1ZS5nZXQoKTtcbiAgICAgICAgaWYgKCFpc0NTU1ZhcmlhYmxlKGN1cnJlbnQpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgcmVzb2x2ZWQgPSBnZXRWYXJpYWJsZVZhbHVlKGN1cnJlbnQsIGVsZW1lbnQpO1xuICAgICAgICBpZiAocmVzb2x2ZWQpXG4gICAgICAgICAgICB2YWx1ZS5zZXQocmVzb2x2ZWQpO1xuICAgIH0pO1xuICAgIC8vIEN5Y2xlIHRocm91Z2ggZXZlcnkgdGFyZ2V0IHByb3BlcnR5IGFuZCByZXNvbHZlIENTUyB2YXJpYWJsZXMuIEN1cnJlbnRseVxuICAgIC8vIHdlIG9ubHkgcmVhZCBzaW5nbGUtdmFyIHByb3BlcnRpZXMgbGlrZSBgdmFyKC0tZm9vKWAsIG5vdCBgY2FsYyh2YXIoLS1mb28pICsgMjBweClgXG4gICAgZm9yICh2YXIga2V5IGluIHRhcmdldCkge1xuICAgICAgICB2YXIgY3VycmVudCA9IHRhcmdldFtrZXldO1xuICAgICAgICBpZiAoIWlzQ1NTVmFyaWFibGUoY3VycmVudCkpXG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgdmFyIHJlc29sdmVkID0gZ2V0VmFyaWFibGVWYWx1ZShjdXJyZW50LCBlbGVtZW50KTtcbiAgICAgICAgaWYgKCFyZXNvbHZlZClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAvLyBDbG9uZSB0YXJnZXQgaWYgaXQgaGFzbid0IGFscmVhZHkgYmVlblxuICAgICAgICB0YXJnZXRba2V5XSA9IHJlc29sdmVkO1xuICAgICAgICAvLyBJZiB0aGUgdXNlciBoYXNuJ3QgYWxyZWFkeSBzZXQgdGhpcyBrZXkgb24gYHRyYW5zaXRpb25FbmRgLCBzZXQgaXQgdG8gdGhlIHVucmVzb2x2ZWRcbiAgICAgICAgLy8gQ1NTIHZhcmlhYmxlLiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgYWZ0ZXIgdGhlIGFuaW1hdGlvbiB0aGUgY29tcG9uZW50IHdpbGwgcmVmbGVjdFxuICAgICAgICAvLyBjaGFuZ2VzIGluIHRoZSB2YWx1ZSBvZiB0aGUgQ1NTIHZhcmlhYmxlLlxuICAgICAgICBpZiAodHJhbnNpdGlvbkVuZClcbiAgICAgICAgICAgIChfYiA9IHRyYW5zaXRpb25FbmRba2V5XSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogKHRyYW5zaXRpb25FbmRba2V5XSA9IGN1cnJlbnQpO1xuICAgIH1cbiAgICByZXR1cm4geyB0YXJnZXQ6IHRhcmdldCwgdHJhbnNpdGlvbkVuZDogdHJhbnNpdGlvbkVuZCB9O1xufVxuXG5leHBvcnQgeyBjc3NWYXJpYWJsZVJlZ2V4LCBwYXJzZUNTU1ZhcmlhYmxlLCByZXNvbHZlQ1NTVmFyaWFibGVzIH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiwgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHsgbnVtYmVyLCBweCB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcbmltcG9ydCB7IGlzS2V5ZnJhbWVzVGFyZ2V0IH0gZnJvbSAnLi4vLi4vLi4vYW5pbWF0aW9uL3V0aWxzL2lzLWtleWZyYW1lcy10YXJnZXQubWpzJztcbmltcG9ydCB7IGludmFyaWFudCB9IGZyb20gJ2hleS1saXN0ZW4nO1xuaW1wb3J0IHsgdHJhbnNmb3JtUHJvcHMgfSBmcm9tICcuLi8uLi9odG1sL3V0aWxzL3RyYW5zZm9ybS5tanMnO1xuaW1wb3J0IHsgZmluZERpbWVuc2lvblZhbHVlVHlwZSB9IGZyb20gJy4uL3ZhbHVlLXR5cGVzL2RpbWVuc2lvbnMubWpzJztcblxudmFyIHBvc2l0aW9uYWxLZXlzID0gbmV3IFNldChbXG4gICAgXCJ3aWR0aFwiLFxuICAgIFwiaGVpZ2h0XCIsXG4gICAgXCJ0b3BcIixcbiAgICBcImxlZnRcIixcbiAgICBcInJpZ2h0XCIsXG4gICAgXCJib3R0b21cIixcbiAgICBcInhcIixcbiAgICBcInlcIixcbl0pO1xudmFyIGlzUG9zaXRpb25hbEtleSA9IGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuIHBvc2l0aW9uYWxLZXlzLmhhcyhrZXkpOyB9O1xudmFyIGhhc1Bvc2l0aW9uYWxLZXkgPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRhcmdldCkuc29tZShpc1Bvc2l0aW9uYWxLZXkpO1xufTtcbnZhciBzZXRBbmRSZXNldFZlbG9jaXR5ID0gZnVuY3Rpb24gKHZhbHVlLCB0bykge1xuICAgIC8vIExvb2tzIG9kZCBidXQgc2V0dGluZyBpdCB0d2ljZSBkb2Vzbid0IHJlbmRlciwgaXQnbGwganVzdFxuICAgIC8vIHNldCBib3RoIHByZXYgYW5kIGN1cnJlbnQgdG8gdGhlIGxhdGVzdCB2YWx1ZVxuICAgIHZhbHVlLnNldCh0bywgZmFsc2UpO1xuICAgIHZhbHVlLnNldCh0byk7XG59O1xudmFyIGlzTnVtT3JQeFR5cGUgPSBmdW5jdGlvbiAodikge1xuICAgIHJldHVybiB2ID09PSBudW1iZXIgfHwgdiA9PT0gcHg7XG59O1xudmFyIEJvdW5kaW5nQm94RGltZW5zaW9uO1xuKGZ1bmN0aW9uIChCb3VuZGluZ0JveERpbWVuc2lvbikge1xuICAgIEJvdW5kaW5nQm94RGltZW5zaW9uW1wid2lkdGhcIl0gPSBcIndpZHRoXCI7XG4gICAgQm91bmRpbmdCb3hEaW1lbnNpb25bXCJoZWlnaHRcIl0gPSBcImhlaWdodFwiO1xuICAgIEJvdW5kaW5nQm94RGltZW5zaW9uW1wibGVmdFwiXSA9IFwibGVmdFwiO1xuICAgIEJvdW5kaW5nQm94RGltZW5zaW9uW1wicmlnaHRcIl0gPSBcInJpZ2h0XCI7XG4gICAgQm91bmRpbmdCb3hEaW1lbnNpb25bXCJ0b3BcIl0gPSBcInRvcFwiO1xuICAgIEJvdW5kaW5nQm94RGltZW5zaW9uW1wiYm90dG9tXCJdID0gXCJib3R0b21cIjtcbn0pKEJvdW5kaW5nQm94RGltZW5zaW9uIHx8IChCb3VuZGluZ0JveERpbWVuc2lvbiA9IHt9KSk7XG52YXIgZ2V0UG9zRnJvbU1hdHJpeCA9IGZ1bmN0aW9uIChtYXRyaXgsIHBvcykge1xuICAgIHJldHVybiBwYXJzZUZsb2F0KG1hdHJpeC5zcGxpdChcIiwgXCIpW3Bvc10pO1xufTtcbnZhciBnZXRUcmFuc2xhdGVGcm9tTWF0cml4ID0gZnVuY3Rpb24gKHBvczIsIHBvczMpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKF9iYm94LCBfYSkge1xuICAgICAgICB2YXIgdHJhbnNmb3JtID0gX2EudHJhbnNmb3JtO1xuICAgICAgICBpZiAodHJhbnNmb3JtID09PSBcIm5vbmVcIiB8fCAhdHJhbnNmb3JtKVxuICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgIHZhciBtYXRyaXgzZCA9IHRyYW5zZm9ybS5tYXRjaCgvXm1hdHJpeDNkXFwoKC4rKVxcKSQvKTtcbiAgICAgICAgaWYgKG1hdHJpeDNkKSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UG9zRnJvbU1hdHJpeChtYXRyaXgzZFsxXSwgcG9zMyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbWF0cml4ID0gdHJhbnNmb3JtLm1hdGNoKC9ebWF0cml4XFwoKC4rKVxcKSQvKTtcbiAgICAgICAgICAgIGlmIChtYXRyaXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0UG9zRnJvbU1hdHJpeChtYXRyaXhbMV0sIHBvczIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIDA7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufTtcbnZhciB0cmFuc2Zvcm1LZXlzID0gbmV3IFNldChbXCJ4XCIsIFwieVwiLCBcInpcIl0pO1xudmFyIG5vblRyYW5zbGF0aW9uYWxUcmFuc2Zvcm1LZXlzID0gdHJhbnNmb3JtUHJvcHMuZmlsdGVyKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuICF0cmFuc2Zvcm1LZXlzLmhhcyhrZXkpOyB9KTtcbmZ1bmN0aW9uIHJlbW92ZU5vblRyYW5zbGF0aW9uYWxUcmFuc2Zvcm0odmlzdWFsRWxlbWVudCkge1xuICAgIHZhciByZW1vdmVkVHJhbnNmb3JtcyA9IFtdO1xuICAgIG5vblRyYW5zbGF0aW9uYWxUcmFuc2Zvcm1LZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSB2aXN1YWxFbGVtZW50LmdldFZhbHVlKGtleSk7XG4gICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZW1vdmVkVHJhbnNmb3Jtcy5wdXNoKFtrZXksIHZhbHVlLmdldCgpXSk7XG4gICAgICAgICAgICB2YWx1ZS5zZXQoa2V5LnN0YXJ0c1dpdGgoXCJzY2FsZVwiKSA/IDEgOiAwKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIEFwcGx5IGNoYW5nZXMgdG8gZWxlbWVudCBiZWZvcmUgbWVhc3VyZW1lbnRcbiAgICBpZiAocmVtb3ZlZFRyYW5zZm9ybXMubGVuZ3RoKVxuICAgICAgICB2aXN1YWxFbGVtZW50LnN5bmNSZW5kZXIoKTtcbiAgICByZXR1cm4gcmVtb3ZlZFRyYW5zZm9ybXM7XG59XG52YXIgcG9zaXRpb25hbFZhbHVlcyA9IHtcbiAgICAvLyBEaW1lbnNpb25zXG4gICAgd2lkdGg6IGZ1bmN0aW9uIChfYSwgX2IpIHtcbiAgICAgICAgdmFyIHggPSBfYS54O1xuICAgICAgICB2YXIgX2MgPSBfYi5wYWRkaW5nTGVmdCwgcGFkZGluZ0xlZnQgPSBfYyA9PT0gdm9pZCAwID8gXCIwXCIgOiBfYywgX2QgPSBfYi5wYWRkaW5nUmlnaHQsIHBhZGRpbmdSaWdodCA9IF9kID09PSB2b2lkIDAgPyBcIjBcIiA6IF9kO1xuICAgICAgICByZXR1cm4geC5tYXggLSB4Lm1pbiAtIHBhcnNlRmxvYXQocGFkZGluZ0xlZnQpIC0gcGFyc2VGbG9hdChwYWRkaW5nUmlnaHQpO1xuICAgIH0sXG4gICAgaGVpZ2h0OiBmdW5jdGlvbiAoX2EsIF9iKSB7XG4gICAgICAgIHZhciB5ID0gX2EueTtcbiAgICAgICAgdmFyIF9jID0gX2IucGFkZGluZ1RvcCwgcGFkZGluZ1RvcCA9IF9jID09PSB2b2lkIDAgPyBcIjBcIiA6IF9jLCBfZCA9IF9iLnBhZGRpbmdCb3R0b20sIHBhZGRpbmdCb3R0b20gPSBfZCA9PT0gdm9pZCAwID8gXCIwXCIgOiBfZDtcbiAgICAgICAgcmV0dXJuIHkubWF4IC0geS5taW4gLSBwYXJzZUZsb2F0KHBhZGRpbmdUb3ApIC0gcGFyc2VGbG9hdChwYWRkaW5nQm90dG9tKTtcbiAgICB9LFxuICAgIHRvcDogZnVuY3Rpb24gKF9iYm94LCBfYSkge1xuICAgICAgICB2YXIgdG9wID0gX2EudG9wO1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdCh0b3ApO1xuICAgIH0sXG4gICAgbGVmdDogZnVuY3Rpb24gKF9iYm94LCBfYSkge1xuICAgICAgICB2YXIgbGVmdCA9IF9hLmxlZnQ7XG4gICAgICAgIHJldHVybiBwYXJzZUZsb2F0KGxlZnQpO1xuICAgIH0sXG4gICAgYm90dG9tOiBmdW5jdGlvbiAoX2EsIF9iKSB7XG4gICAgICAgIHZhciB5ID0gX2EueTtcbiAgICAgICAgdmFyIHRvcCA9IF9iLnRvcDtcbiAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodG9wKSArICh5Lm1heCAtIHkubWluKTtcbiAgICB9LFxuICAgIHJpZ2h0OiBmdW5jdGlvbiAoX2EsIF9iKSB7XG4gICAgICAgIHZhciB4ID0gX2EueDtcbiAgICAgICAgdmFyIGxlZnQgPSBfYi5sZWZ0O1xuICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChsZWZ0KSArICh4Lm1heCAtIHgubWluKTtcbiAgICB9LFxuICAgIC8vIFRyYW5zZm9ybVxuICAgIHg6IGdldFRyYW5zbGF0ZUZyb21NYXRyaXgoNCwgMTMpLFxuICAgIHk6IGdldFRyYW5zbGF0ZUZyb21NYXRyaXgoNSwgMTQpLFxufTtcbnZhciBjb252ZXJ0Q2hhbmdlZFZhbHVlVHlwZXMgPSBmdW5jdGlvbiAodGFyZ2V0LCB2aXN1YWxFbGVtZW50LCBjaGFuZ2VkS2V5cykge1xuICAgIHZhciBvcmlnaW5CYm94ID0gdmlzdWFsRWxlbWVudC5tZWFzdXJlVmlld3BvcnRCb3goKTtcbiAgICB2YXIgZWxlbWVudCA9IHZpc3VhbEVsZW1lbnQuZ2V0SW5zdGFuY2UoKTtcbiAgICB2YXIgZWxlbWVudENvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xuICAgIHZhciBkaXNwbGF5ID0gZWxlbWVudENvbXB1dGVkU3R5bGUuZGlzcGxheTtcbiAgICB2YXIgb3JpZ2luID0ge307XG4gICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgY3VycmVudGx5IHNldCB0byBkaXNwbGF5OiBcIm5vbmVcIiwgbWFrZSBpdCB2aXNpYmxlIGJlZm9yZVxuICAgIC8vIG1lYXN1cmluZyB0aGUgdGFyZ2V0IGJvdW5kaW5nIGJveFxuICAgIGlmIChkaXNwbGF5ID09PSBcIm5vbmVcIikge1xuICAgICAgICB2aXN1YWxFbGVtZW50LnNldFN0YXRpY1ZhbHVlKFwiZGlzcGxheVwiLCB0YXJnZXQuZGlzcGxheSB8fCBcImJsb2NrXCIpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBSZWNvcmQgb3JpZ2lucyBiZWZvcmUgd2UgcmVuZGVyIGFuZCB1cGRhdGUgc3R5bGVzXG4gICAgICovXG4gICAgY2hhbmdlZEtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIG9yaWdpbltrZXldID0gcG9zaXRpb25hbFZhbHVlc1trZXldKG9yaWdpbkJib3gsIGVsZW1lbnRDb21wdXRlZFN0eWxlKTtcbiAgICB9KTtcbiAgICAvLyBBcHBseSB0aGUgbGF0ZXN0IHZhbHVlcyAoYXMgc2V0IGluIGNoZWNrQW5kQ29udmVydENoYW5nZWRWYWx1ZVR5cGVzKVxuICAgIHZpc3VhbEVsZW1lbnQuc3luY1JlbmRlcigpO1xuICAgIHZhciB0YXJnZXRCYm94ID0gdmlzdWFsRWxlbWVudC5tZWFzdXJlVmlld3BvcnRCb3goKTtcbiAgICBjaGFuZ2VkS2V5cy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgLy8gUmVzdG9yZSBzdHlsZXMgdG8gdGhlaXIgKipjYWxjdWxhdGVkIGNvbXB1dGVkIHN0eWxlKiosIG5vdCB0aGVpciBhY3R1YWxcbiAgICAgICAgLy8gb3JpZ2luYWxseSBzZXQgc3R5bGUuIFRoaXMgYWxsb3dzIHVzIHRvIGFuaW1hdGUgYmV0d2VlbiBlcXVpdmFsZW50IHBpeGVsIHVuaXRzLlxuICAgICAgICB2YXIgdmFsdWUgPSB2aXN1YWxFbGVtZW50LmdldFZhbHVlKGtleSk7XG4gICAgICAgIHNldEFuZFJlc2V0VmVsb2NpdHkodmFsdWUsIG9yaWdpbltrZXldKTtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSBwb3NpdGlvbmFsVmFsdWVzW2tleV0odGFyZ2V0QmJveCwgZWxlbWVudENvbXB1dGVkU3R5bGUpO1xuICAgIH0pO1xuICAgIHJldHVybiB0YXJnZXQ7XG59O1xudmFyIGNoZWNrQW5kQ29udmVydENoYW5nZWRWYWx1ZVR5cGVzID0gZnVuY3Rpb24gKHZpc3VhbEVsZW1lbnQsIHRhcmdldCwgb3JpZ2luLCB0cmFuc2l0aW9uRW5kKSB7XG4gICAgaWYgKG9yaWdpbiA9PT0gdm9pZCAwKSB7IG9yaWdpbiA9IHt9OyB9XG4gICAgaWYgKHRyYW5zaXRpb25FbmQgPT09IHZvaWQgMCkgeyB0cmFuc2l0aW9uRW5kID0ge307IH1cbiAgICB0YXJnZXQgPSBfX2Fzc2lnbih7fSwgdGFyZ2V0KTtcbiAgICB0cmFuc2l0aW9uRW5kID0gX19hc3NpZ24oe30sIHRyYW5zaXRpb25FbmQpO1xuICAgIHZhciB0YXJnZXRQb3NpdGlvbmFsS2V5cyA9IE9iamVjdC5rZXlzKHRhcmdldCkuZmlsdGVyKGlzUG9zaXRpb25hbEtleSk7XG4gICAgLy8gV2Ugd2FudCB0byByZW1vdmUgYW55IHRyYW5zZm9ybSB2YWx1ZXMgdGhhdCBjb3VsZCBhZmZlY3QgdGhlIGVsZW1lbnQncyBib3VuZGluZyBib3ggYmVmb3JlXG4gICAgLy8gaXQncyBtZWFzdXJlZC4gV2UnbGwgcmVhcHBseSB0aGVzZSBsYXRlci5cbiAgICB2YXIgcmVtb3ZlZFRyYW5zZm9ybVZhbHVlcyA9IFtdO1xuICAgIHZhciBoYXNBdHRlbXB0ZWRUb1JlbW92ZVRyYW5zZm9ybVZhbHVlcyA9IGZhbHNlO1xuICAgIHZhciBjaGFuZ2VkVmFsdWVUeXBlS2V5cyA9IFtdO1xuICAgIHRhcmdldFBvc2l0aW9uYWxLZXlzLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdmFsdWUgPSB2aXN1YWxFbGVtZW50LmdldFZhbHVlKGtleSk7XG4gICAgICAgIGlmICghdmlzdWFsRWxlbWVudC5oYXNWYWx1ZShrZXkpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgZnJvbSA9IG9yaWdpbltrZXldO1xuICAgICAgICB2YXIgZnJvbVR5cGUgPSBmaW5kRGltZW5zaW9uVmFsdWVUeXBlKGZyb20pO1xuICAgICAgICB2YXIgdG8gPSB0YXJnZXRba2V5XTtcbiAgICAgICAgdmFyIHRvVHlwZTtcbiAgICAgICAgLy8gVE9ETzogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBiYXNpY2FsbHkgdGhyb3dzIGFuIGVycm9yXG4gICAgICAgIC8vIGlmIHlvdSB0cnkgYW5kIGRvIHZhbHVlIGNvbnZlcnNpb24gdmlhIGtleWZyYW1lcy4gVGhlcmUncyBwcm9iYWJseVxuICAgICAgICAvLyBhIHdheSBvZiBkb2luZyB0aGlzIGJ1dCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIHdvdWxkIG5lZWQgZ3JlYXRlciBzY3J1dGlueSxcbiAgICAgICAgLy8gYXMgaXQnZCBiZSBkb2luZyBtdWx0aXBsZSByZXNpemUtcmVtZWFzdXJlIG9wZXJhdGlvbnMuXG4gICAgICAgIGlmIChpc0tleWZyYW1lc1RhcmdldCh0bykpIHtcbiAgICAgICAgICAgIHZhciBudW1LZXlmcmFtZXMgPSB0by5sZW5ndGg7XG4gICAgICAgICAgICB2YXIgZnJvbUluZGV4ID0gdG9bMF0gPT09IG51bGwgPyAxIDogMDtcbiAgICAgICAgICAgIGZyb20gPSB0b1tmcm9tSW5kZXhdO1xuICAgICAgICAgICAgZnJvbVR5cGUgPSBmaW5kRGltZW5zaW9uVmFsdWVUeXBlKGZyb20pO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGZyb21JbmRleDsgaSA8IG51bUtleWZyYW1lczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF0b1R5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9UeXBlID0gZmluZERpbWVuc2lvblZhbHVlVHlwZSh0b1tpXSk7XG4gICAgICAgICAgICAgICAgICAgIGludmFyaWFudCh0b1R5cGUgPT09IGZyb21UeXBlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAoaXNOdW1PclB4VHlwZShmcm9tVHlwZSkgJiYgaXNOdW1PclB4VHlwZSh0b1R5cGUpKSwgXCJLZXlmcmFtZXMgbXVzdCBiZSBvZiB0aGUgc2FtZSBkaW1lbnNpb24gYXMgdGhlIGN1cnJlbnQgdmFsdWVcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpbnZhcmlhbnQoZmluZERpbWVuc2lvblZhbHVlVHlwZSh0b1tpXSkgPT09IHRvVHlwZSwgXCJBbGwga2V5ZnJhbWVzIG11c3QgYmUgb2YgdGhlIHNhbWUgdHlwZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0b1R5cGUgPSBmaW5kRGltZW5zaW9uVmFsdWVUeXBlKHRvKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZnJvbVR5cGUgIT09IHRvVHlwZSkge1xuICAgICAgICAgICAgLy8gSWYgdGhleSdyZSBib3RoIGp1c3QgbnVtYmVyIG9yIHB4LCBjb252ZXJ0IHRoZW0gYm90aCB0byBudW1iZXJzIHJhdGhlciB0aGFuXG4gICAgICAgICAgICAvLyByZWx5aW5nIG9uIHJlc2l6ZS9yZW1lYXN1cmUgdG8gY29udmVydCAod2hpY2ggaXMgd2FzdGVmdWwgaW4gdGhpcyBzaXR1YXRpb24pXG4gICAgICAgICAgICBpZiAoaXNOdW1PclB4VHlwZShmcm9tVHlwZSkgJiYgaXNOdW1PclB4VHlwZSh0b1R5cGUpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGN1cnJlbnQgPSB2YWx1ZS5nZXQoKTtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUuc2V0KHBhcnNlRmxvYXQoY3VycmVudCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHRvID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHRhcmdldFtrZXldID0gcGFyc2VGbG9hdCh0byk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodG8pICYmIHRvVHlwZSA9PT0gcHgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0W2tleV0gPSB0by5tYXAocGFyc2VGbG9hdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoKGZyb21UeXBlID09PSBudWxsIHx8IGZyb21UeXBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBmcm9tVHlwZS50cmFuc2Zvcm0pICYmXG4gICAgICAgICAgICAgICAgKHRvVHlwZSA9PT0gbnVsbCB8fCB0b1R5cGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRvVHlwZS50cmFuc2Zvcm0pICYmXG4gICAgICAgICAgICAgICAgKGZyb20gPT09IDAgfHwgdG8gPT09IDApKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgb25lIG9yIHRoZSBvdGhlciB2YWx1ZSBpcyAwLCBpdCdzIHNhZmUgdG8gY29lcmNlIGl0IHRvIHRoZVxuICAgICAgICAgICAgICAgIC8vIHR5cGUgb2YgdGhlIG90aGVyIHdpdGhvdXQgbWVhc3VyZW1lbnRcbiAgICAgICAgICAgICAgICBpZiAoZnJvbSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZS5zZXQodG9UeXBlLnRyYW5zZm9ybShmcm9tKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRba2V5XSA9IGZyb21UeXBlLnRyYW5zZm9ybSh0byk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgd2UncmUgZ29pbmcgdG8gZG8gdmFsdWUgY29udmVyc2lvbiB2aWEgRE9NIG1lYXN1cmVtZW50cywgd2UgZmlyc3RcbiAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIHJlbW92ZSBub24tcG9zaXRpb25hbCB0cmFuc2Zvcm0gdmFsdWVzIHRoYXQgY291bGQgYWZmZWN0IHRoZSBiYm94IG1lYXN1cmVtZW50cy5cbiAgICAgICAgICAgICAgICBpZiAoIWhhc0F0dGVtcHRlZFRvUmVtb3ZlVHJhbnNmb3JtVmFsdWVzKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZWRUcmFuc2Zvcm1WYWx1ZXMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTm9uVHJhbnNsYXRpb25hbFRyYW5zZm9ybSh2aXN1YWxFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaGFzQXR0ZW1wdGVkVG9SZW1vdmVUcmFuc2Zvcm1WYWx1ZXMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjaGFuZ2VkVmFsdWVUeXBlS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbkVuZFtrZXldID1cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNpdGlvbkVuZFtrZXldICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdHJhbnNpdGlvbkVuZFtrZXldXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHRhcmdldFtrZXldO1xuICAgICAgICAgICAgICAgIHNldEFuZFJlc2V0VmVsb2NpdHkodmFsdWUsIHRvKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChjaGFuZ2VkVmFsdWVUeXBlS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgdmFyIHNjcm9sbFlfMSA9IGNoYW5nZWRWYWx1ZVR5cGVLZXlzLmluZGV4T2YoXCJoZWlnaHRcIikgPj0gMFxuICAgICAgICAgICAgPyB3aW5kb3cucGFnZVlPZmZzZXRcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgdmFyIGNvbnZlcnRlZFRhcmdldCA9IGNvbnZlcnRDaGFuZ2VkVmFsdWVUeXBlcyh0YXJnZXQsIHZpc3VhbEVsZW1lbnQsIGNoYW5nZWRWYWx1ZVR5cGVLZXlzKTtcbiAgICAgICAgLy8gSWYgd2UgcmVtb3ZlZCB0cmFuc2Zvcm0gdmFsdWVzLCByZWFwcGx5IHRoZW0gYmVmb3JlIHRoZSBuZXh0IHJlbmRlclxuICAgICAgICBpZiAocmVtb3ZlZFRyYW5zZm9ybVZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJlbW92ZWRUcmFuc2Zvcm1WYWx1ZXMuZm9yRWFjaChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2IgPSBfX3JlYWQoX2EsIDIpLCBrZXkgPSBfYlswXSwgdmFsdWUgPSBfYlsxXTtcbiAgICAgICAgICAgICAgICB2aXN1YWxFbGVtZW50LmdldFZhbHVlKGtleSkuc2V0KHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJlYXBwbHkgb3JpZ2luYWwgdmFsdWVzXG4gICAgICAgIHZpc3VhbEVsZW1lbnQuc3luY1JlbmRlcigpO1xuICAgICAgICAvLyBSZXN0b3JlIHNjcm9sbCBwb3NpdGlvblxuICAgICAgICBpZiAoc2Nyb2xsWV8xICE9PSBudWxsKVxuICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKHsgdG9wOiBzY3JvbGxZXzEgfSk7XG4gICAgICAgIHJldHVybiB7IHRhcmdldDogY29udmVydGVkVGFyZ2V0LCB0cmFuc2l0aW9uRW5kOiB0cmFuc2l0aW9uRW5kIH07XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4geyB0YXJnZXQ6IHRhcmdldCwgdHJhbnNpdGlvbkVuZDogdHJhbnNpdGlvbkVuZCB9O1xuICAgIH1cbn07XG4vKipcbiAqIENvbnZlcnQgdmFsdWUgdHlwZXMgZm9yIHgveS93aWR0aC9oZWlnaHQvdG9wL2xlZnQvYm90dG9tL3JpZ2h0XG4gKlxuICogQWxsb3dzIGFuaW1hdGlvbiBiZXR3ZWVuIGAnYXV0bydgIC0+IGAnMTAwJSdgIG9yIGAwYCAtPiBgJ2NhbGMoNTAlIC0gMTB2dyknYFxuICpcbiAqIEBpbnRlcm5hbFxuICovXG5mdW5jdGlvbiB1bml0Q29udmVyc2lvbih2aXN1YWxFbGVtZW50LCB0YXJnZXQsIG9yaWdpbiwgdHJhbnNpdGlvbkVuZCkge1xuICAgIHJldHVybiBoYXNQb3NpdGlvbmFsS2V5KHRhcmdldClcbiAgICAgICAgPyBjaGVja0FuZENvbnZlcnRDaGFuZ2VkVmFsdWVUeXBlcyh2aXN1YWxFbGVtZW50LCB0YXJnZXQsIG9yaWdpbiwgdHJhbnNpdGlvbkVuZClcbiAgICAgICAgOiB7IHRhcmdldDogdGFyZ2V0LCB0cmFuc2l0aW9uRW5kOiB0cmFuc2l0aW9uRW5kIH07XG59XG5cbmV4cG9ydCB7IEJvdW5kaW5nQm94RGltZW5zaW9uLCBwb3NpdGlvbmFsVmFsdWVzLCB1bml0Q29udmVyc2lvbiB9O1xuIiwiaW1wb3J0IHsgcmVzb2x2ZUNTU1ZhcmlhYmxlcyB9IGZyb20gJy4vY3NzLXZhcmlhYmxlcy1jb252ZXJzaW9uLm1qcyc7XG5pbXBvcnQgeyB1bml0Q29udmVyc2lvbiB9IGZyb20gJy4vdW5pdC1jb252ZXJzaW9uLm1qcyc7XG5cbi8qKlxuICogUGFyc2UgYSBET00gdmFyaWFudCB0byBtYWtlIGl0IGFuaW1hdGFibGUuIFRoaXMgaW52b2x2ZXMgcmVzb2x2aW5nIENTUyB2YXJpYWJsZXNcbiAqIGFuZCBlbnN1cmluZyBhbmltYXRpb25zIGxpa2UgXCIyMCVcIiA9PiBcImNhbGMoNTB2dylcIiBhcmUgcGVyZm9ybWVkIGluIHBpeGVscy5cbiAqL1xudmFyIHBhcnNlRG9tVmFyaWFudCA9IGZ1bmN0aW9uICh2aXN1YWxFbGVtZW50LCB0YXJnZXQsIG9yaWdpbiwgdHJhbnNpdGlvbkVuZCkge1xuICAgIHZhciByZXNvbHZlZCA9IHJlc29sdmVDU1NWYXJpYWJsZXModmlzdWFsRWxlbWVudCwgdGFyZ2V0LCB0cmFuc2l0aW9uRW5kKTtcbiAgICB0YXJnZXQgPSByZXNvbHZlZC50YXJnZXQ7XG4gICAgdHJhbnNpdGlvbkVuZCA9IHJlc29sdmVkLnRyYW5zaXRpb25FbmQ7XG4gICAgcmV0dXJuIHVuaXRDb252ZXJzaW9uKHZpc3VhbEVsZW1lbnQsIHRhcmdldCwgb3JpZ2luLCB0cmFuc2l0aW9uRW5kKTtcbn07XG5cbmV4cG9ydCB7IHBhcnNlRG9tVmFyaWFudCB9O1xuIiwiaW1wb3J0IHsgX19yZXN0LCBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IHZpc3VhbEVsZW1lbnQgfSBmcm9tICcuLi9pbmRleC5tanMnO1xuaW1wb3J0IHsgZ2V0T3JpZ2luLCBjaGVja1RhcmdldEZvck5ld1ZhbHVlcyB9IGZyb20gJy4uL3V0aWxzL3NldHRlcnMubWpzJztcbmltcG9ydCB7IGJ1aWxkSFRNTFN0eWxlcyB9IGZyb20gJy4vdXRpbHMvYnVpbGQtc3R5bGVzLm1qcyc7XG5pbXBvcnQgeyBpc0NTU1ZhcmlhYmxlIH0gZnJvbSAnLi4vZG9tL3V0aWxzL2lzLWNzcy12YXJpYWJsZS5tanMnO1xuaW1wb3J0IHsgcGFyc2VEb21WYXJpYW50IH0gZnJvbSAnLi4vZG9tL3V0aWxzL3BhcnNlLWRvbS12YXJpYW50Lm1qcyc7XG5pbXBvcnQgeyBpc1RyYW5zZm9ybVByb3AgfSBmcm9tICcuL3V0aWxzL3RyYW5zZm9ybS5tanMnO1xuaW1wb3J0IHsgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzIH0gZnJvbSAnLi91dGlscy9zY3JhcGUtbW90aW9uLXZhbHVlcy5tanMnO1xuaW1wb3J0IHsgcmVuZGVySFRNTCB9IGZyb20gJy4vdXRpbHMvcmVuZGVyLm1qcyc7XG5pbXBvcnQgeyBnZXREZWZhdWx0VmFsdWVUeXBlIH0gZnJvbSAnLi4vZG9tL3ZhbHVlLXR5cGVzL2RlZmF1bHRzLm1qcyc7XG5pbXBvcnQgeyBtZWFzdXJlVmlld3BvcnRCb3ggfSBmcm9tICcuLi8uLi9wcm9qZWN0aW9uL3V0aWxzL21lYXN1cmUubWpzJztcblxuZnVuY3Rpb24gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSB7XG4gICAgcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufVxudmFyIGh0bWxDb25maWcgPSB7XG4gICAgdHJlZVR5cGU6IFwiZG9tXCIsXG4gICAgcmVhZFZhbHVlRnJvbUluc3RhbmNlOiBmdW5jdGlvbiAoZG9tRWxlbWVudCwga2V5KSB7XG4gICAgICAgIGlmIChpc1RyYW5zZm9ybVByb3Aoa2V5KSkge1xuICAgICAgICAgICAgdmFyIGRlZmF1bHRUeXBlID0gZ2V0RGVmYXVsdFZhbHVlVHlwZShrZXkpO1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRUeXBlID8gZGVmYXVsdFR5cGUuZGVmYXVsdCB8fCAwIDogMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShkb21FbGVtZW50KTtcbiAgICAgICAgICAgIHJldHVybiAoKGlzQ1NTVmFyaWFibGUoa2V5KVxuICAgICAgICAgICAgICAgID8gY29tcHV0ZWRTdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGtleSlcbiAgICAgICAgICAgICAgICA6IGNvbXB1dGVkU3R5bGVba2V5XSkgfHwgMCk7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHNvcnROb2RlUG9zaXRpb246IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBjb21wYXJlRG9jdW1lbnRQb3NpdGlvbiByZXR1cm5zIGEgYml0bWFzaywgYnkgdXNpbmcgdGhlIGJpdHdpc2UgJlxuICAgICAgICAgKiB3ZSdyZSByZXR1cm5pbmcgdHJ1ZSBpZiAyIGluIHRoYXQgYml0bWFzayBpcyBzZXQgdG8gdHJ1ZS4gMiBpcyBzZXRcbiAgICAgICAgICogdG8gdHJ1ZSBpZiBiIHByZWNlZWRzIGEuXG4gICAgICAgICAqL1xuICAgICAgICByZXR1cm4gYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihiKSAmIDIgPyAxIDogLTE7XG4gICAgfSxcbiAgICBnZXRCYXNlVGFyZ2V0OiBmdW5jdGlvbiAocHJvcHMsIGtleSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSBwcm9wcy5zdHlsZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW2tleV07XG4gICAgfSxcbiAgICBtZWFzdXJlVmlld3BvcnRCb3g6IGZ1bmN0aW9uIChlbGVtZW50LCBfYSkge1xuICAgICAgICB2YXIgdHJhbnNmb3JtUGFnZVBvaW50ID0gX2EudHJhbnNmb3JtUGFnZVBvaW50O1xuICAgICAgICByZXR1cm4gbWVhc3VyZVZpZXdwb3J0Qm94KGVsZW1lbnQsIHRyYW5zZm9ybVBhZ2VQb2ludCk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBSZXNldCB0aGUgdHJhbnNmb3JtIG9uIHRoZSBjdXJyZW50IEVsZW1lbnQuIFRoaXMgaXMgY2FsbGVkIGFzIHBhcnRcbiAgICAgKiBvZiBhIGJhdGNoZWQgcHJvY2VzcyBhY3Jvc3MgdGhlIGVudGlyZSBsYXlvdXQgdHJlZS4gVG8gcmVtb3ZlIHRoaXMgd3JpdGVcbiAgICAgKiBjeWNsZSBpdCdkIGJlIGludGVyZXN0aW5nIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIFwidW5kb1wiIGFsbCB0aGUgY3VycmVudFxuICAgICAqIGxheW91dCB0cmFuc2Zvcm1zIHVwIHRoZSB0cmVlIGluIHRoZSBzYW1lIHdheSB0aGlzLmdldEJvdW5kaW5nQm94V2l0aG91dFRyYW5zZm9ybXNcbiAgICAgKiB3b3Jrc1xuICAgICAqL1xuICAgIHJlc2V0VHJhbnNmb3JtOiBmdW5jdGlvbiAoZWxlbWVudCwgZG9tRWxlbWVudCwgcHJvcHMpIHtcbiAgICAgICAgdmFyIHRyYW5zZm9ybVRlbXBsYXRlID0gcHJvcHMudHJhbnNmb3JtVGVtcGxhdGU7XG4gICAgICAgIGRvbUVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gdHJhbnNmb3JtVGVtcGxhdGVcbiAgICAgICAgICAgID8gdHJhbnNmb3JtVGVtcGxhdGUoe30sIFwiXCIpXG4gICAgICAgICAgICA6IFwibm9uZVwiO1xuICAgICAgICAvLyBFbnN1cmUgdGhhdCB3aGF0ZXZlciBoYXBwZW5zIG5leHQsIHdlIHJlc3RvcmUgb3VyIHRyYW5zZm9ybSBvbiB0aGUgbmV4dCBmcmFtZVxuICAgICAgICBlbGVtZW50LnNjaGVkdWxlUmVuZGVyKCk7XG4gICAgfSxcbiAgICByZXN0b3JlVHJhbnNmb3JtOiBmdW5jdGlvbiAoaW5zdGFuY2UsIG11dGFibGVTdGF0ZSkge1xuICAgICAgICBpbnN0YW5jZS5zdHlsZS50cmFuc2Zvcm0gPSBtdXRhYmxlU3RhdGUuc3R5bGUudHJhbnNmb3JtO1xuICAgIH0sXG4gICAgcmVtb3ZlVmFsdWVGcm9tUmVuZGVyU3RhdGU6IGZ1bmN0aW9uIChrZXksIF9hKSB7XG4gICAgICAgIHZhciB2YXJzID0gX2EudmFycywgc3R5bGUgPSBfYS5zdHlsZTtcbiAgICAgICAgZGVsZXRlIHZhcnNba2V5XTtcbiAgICAgICAgZGVsZXRlIHN0eWxlW2tleV07XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBFbnN1cmUgdGhhdCBIVE1MIGFuZCBGcmFtZXItc3BlY2lmaWMgdmFsdWUgdHlwZXMgbGlrZSBgcHhgLT5gJWAgYW5kIGBDb2xvcmBcbiAgICAgKiBjYW4gYmUgYW5pbWF0ZWQgYnkgTW90aW9uLlxuICAgICAqL1xuICAgIG1ha2VUYXJnZXRBbmltYXRhYmxlOiBmdW5jdGlvbiAoZWxlbWVudCwgX2EsIF9iLCBpc01vdW50ZWQpIHtcbiAgICAgICAgdmFyIHRyYW5zZm9ybVZhbHVlcyA9IF9iLnRyYW5zZm9ybVZhbHVlcztcbiAgICAgICAgaWYgKGlzTW91bnRlZCA9PT0gdm9pZCAwKSB7IGlzTW91bnRlZCA9IHRydWU7IH1cbiAgICAgICAgdmFyIHRyYW5zaXRpb24gPSBfYS50cmFuc2l0aW9uLCB0cmFuc2l0aW9uRW5kID0gX2EudHJhbnNpdGlvbkVuZCwgdGFyZ2V0ID0gX19yZXN0KF9hLCBbXCJ0cmFuc2l0aW9uXCIsIFwidHJhbnNpdGlvbkVuZFwiXSk7XG4gICAgICAgIHZhciBvcmlnaW4gPSBnZXRPcmlnaW4odGFyZ2V0LCB0cmFuc2l0aW9uIHx8IHt9LCBlbGVtZW50KTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElmIEZyYW1lciBoYXMgcHJvdmlkZWQgYSBmdW5jdGlvbiB0byBjb252ZXJ0IGBDb2xvcmAgZXRjIHZhbHVlIHR5cGVzLCBjb252ZXJ0IHRoZW1cbiAgICAgICAgICovXG4gICAgICAgIGlmICh0cmFuc2Zvcm1WYWx1ZXMpIHtcbiAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uRW5kKVxuICAgICAgICAgICAgICAgIHRyYW5zaXRpb25FbmQgPSB0cmFuc2Zvcm1WYWx1ZXModHJhbnNpdGlvbkVuZCk7XG4gICAgICAgICAgICBpZiAodGFyZ2V0KVxuICAgICAgICAgICAgICAgIHRhcmdldCA9IHRyYW5zZm9ybVZhbHVlcyh0YXJnZXQpO1xuICAgICAgICAgICAgaWYgKG9yaWdpbilcbiAgICAgICAgICAgICAgICBvcmlnaW4gPSB0cmFuc2Zvcm1WYWx1ZXMob3JpZ2luKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNNb3VudGVkKSB7XG4gICAgICAgICAgICBjaGVja1RhcmdldEZvck5ld1ZhbHVlcyhlbGVtZW50LCB0YXJnZXQsIG9yaWdpbik7XG4gICAgICAgICAgICB2YXIgcGFyc2VkID0gcGFyc2VEb21WYXJpYW50KGVsZW1lbnQsIHRhcmdldCwgb3JpZ2luLCB0cmFuc2l0aW9uRW5kKTtcbiAgICAgICAgICAgIHRyYW5zaXRpb25FbmQgPSBwYXJzZWQudHJhbnNpdGlvbkVuZDtcbiAgICAgICAgICAgIHRhcmdldCA9IHBhcnNlZC50YXJnZXQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIF9fYXNzaWduKHsgdHJhbnNpdGlvbjogdHJhbnNpdGlvbiwgdHJhbnNpdGlvbkVuZDogdHJhbnNpdGlvbkVuZCB9LCB0YXJnZXQpO1xuICAgIH0sXG4gICAgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzOiBzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMsXG4gICAgYnVpbGQ6IGZ1bmN0aW9uIChlbGVtZW50LCByZW5kZXJTdGF0ZSwgbGF0ZXN0VmFsdWVzLCBvcHRpb25zLCBwcm9wcykge1xuICAgICAgICBpZiAoZWxlbWVudC5pc1Zpc2libGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmVuZGVyU3RhdGUuc3R5bGUudmlzaWJpbGl0eSA9IGVsZW1lbnQuaXNWaXNpYmxlXG4gICAgICAgICAgICAgICAgPyBcInZpc2libGVcIlxuICAgICAgICAgICAgICAgIDogXCJoaWRkZW5cIjtcbiAgICAgICAgfVxuICAgICAgICBidWlsZEhUTUxTdHlsZXMocmVuZGVyU3RhdGUsIGxhdGVzdFZhbHVlcywgb3B0aW9ucywgcHJvcHMudHJhbnNmb3JtVGVtcGxhdGUpO1xuICAgIH0sXG4gICAgcmVuZGVyOiByZW5kZXJIVE1MLFxufTtcbnZhciBodG1sVmlzdWFsRWxlbWVudCA9IHZpc3VhbEVsZW1lbnQoaHRtbENvbmZpZyk7XG5cbmV4cG9ydCB7IGdldENvbXB1dGVkU3R5bGUsIGh0bWxDb25maWcsIGh0bWxWaXN1YWxFbGVtZW50IH07XG4iLCJpbXBvcnQgeyBfX2Fzc2lnbiB9IGZyb20gJ3RzbGliJztcbmltcG9ydCB7IHZpc3VhbEVsZW1lbnQgfSBmcm9tICcuLi9pbmRleC5tanMnO1xuaW1wb3J0IHsgc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzIH0gZnJvbSAnLi91dGlscy9zY3JhcGUtbW90aW9uLXZhbHVlcy5tanMnO1xuaW1wb3J0IHsgaHRtbENvbmZpZyB9IGZyb20gJy4uL2h0bWwvdmlzdWFsLWVsZW1lbnQubWpzJztcbmltcG9ydCB7IGJ1aWxkU1ZHQXR0cnMgfSBmcm9tICcuL3V0aWxzL2J1aWxkLWF0dHJzLm1qcyc7XG5pbXBvcnQgeyBjYW1lbFRvRGFzaCB9IGZyb20gJy4uL2RvbS91dGlscy9jYW1lbC10by1kYXNoLm1qcyc7XG5pbXBvcnQgeyBjYW1lbENhc2VBdHRyaWJ1dGVzIH0gZnJvbSAnLi91dGlscy9jYW1lbC1jYXNlLWF0dHJzLm1qcyc7XG5pbXBvcnQgeyBpc1RyYW5zZm9ybVByb3AgfSBmcm9tICcuLi9odG1sL3V0aWxzL3RyYW5zZm9ybS5tanMnO1xuaW1wb3J0IHsgcmVuZGVyU1ZHIH0gZnJvbSAnLi91dGlscy9yZW5kZXIubWpzJztcbmltcG9ydCB7IGdldERlZmF1bHRWYWx1ZVR5cGUgfSBmcm9tICcuLi9kb20vdmFsdWUtdHlwZXMvZGVmYXVsdHMubWpzJztcblxudmFyIHN2Z1Zpc3VhbEVsZW1lbnQgPSB2aXN1YWxFbGVtZW50KF9fYXNzaWduKF9fYXNzaWduKHt9LCBodG1sQ29uZmlnKSwgeyBnZXRCYXNlVGFyZ2V0OiBmdW5jdGlvbiAocHJvcHMsIGtleSkge1xuICAgICAgICByZXR1cm4gcHJvcHNba2V5XTtcbiAgICB9LCByZWFkVmFsdWVGcm9tSW5zdGFuY2U6IGZ1bmN0aW9uIChkb21FbGVtZW50LCBrZXkpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoaXNUcmFuc2Zvcm1Qcm9wKGtleSkpIHtcbiAgICAgICAgICAgIHJldHVybiAoKF9hID0gZ2V0RGVmYXVsdFZhbHVlVHlwZShrZXkpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGVmYXVsdCkgfHwgMDtcbiAgICAgICAgfVxuICAgICAgICBrZXkgPSAhY2FtZWxDYXNlQXR0cmlidXRlcy5oYXMoa2V5KSA/IGNhbWVsVG9EYXNoKGtleSkgOiBrZXk7XG4gICAgICAgIHJldHVybiBkb21FbGVtZW50LmdldEF0dHJpYnV0ZShrZXkpO1xuICAgIH0sIHNjcmFwZU1vdGlvblZhbHVlc0Zyb21Qcm9wczogc2NyYXBlTW90aW9uVmFsdWVzRnJvbVByb3BzLCBidWlsZDogZnVuY3Rpb24gKF9lbGVtZW50LCByZW5kZXJTdGF0ZSwgbGF0ZXN0VmFsdWVzLCBvcHRpb25zLCBwcm9wcykge1xuICAgICAgICBidWlsZFNWR0F0dHJzKHJlbmRlclN0YXRlLCBsYXRlc3RWYWx1ZXMsIG9wdGlvbnMsIHByb3BzLnRyYW5zZm9ybVRlbXBsYXRlKTtcbiAgICB9LCByZW5kZXI6IHJlbmRlclNWRyB9KSk7XG5cbmV4cG9ydCB7IHN2Z1Zpc3VhbEVsZW1lbnQgfTtcbiIsImltcG9ydCB7IGh0bWxWaXN1YWxFbGVtZW50IH0gZnJvbSAnLi4vaHRtbC92aXN1YWwtZWxlbWVudC5tanMnO1xuaW1wb3J0IHsgc3ZnVmlzdWFsRWxlbWVudCB9IGZyb20gJy4uL3N2Zy92aXN1YWwtZWxlbWVudC5tanMnO1xuaW1wb3J0IHsgaXNTVkdDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL2lzLXN2Zy1jb21wb25lbnQubWpzJztcblxudmFyIGNyZWF0ZURvbVZpc3VhbEVsZW1lbnQgPSBmdW5jdGlvbiAoQ29tcG9uZW50LCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIGlzU1ZHQ29tcG9uZW50KENvbXBvbmVudClcbiAgICAgICAgPyBzdmdWaXN1YWxFbGVtZW50KG9wdGlvbnMsIHsgZW5hYmxlSGFyZHdhcmVBY2NlbGVyYXRpb246IGZhbHNlIH0pXG4gICAgICAgIDogaHRtbFZpc3VhbEVsZW1lbnQob3B0aW9ucywgeyBlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbjogdHJ1ZSB9KTtcbn07XG5cbmV4cG9ydCB7IGNyZWF0ZURvbVZpc3VhbEVsZW1lbnQgfTtcbiIsImltcG9ydCB7IHB4IH0gZnJvbSAnc3R5bGUtdmFsdWUtdHlwZXMnO1xuXG5mdW5jdGlvbiBwaXhlbHNUb1BlcmNlbnQocGl4ZWxzLCBheGlzKSB7XG4gICAgaWYgKGF4aXMubWF4ID09PSBheGlzLm1pbilcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIChwaXhlbHMgLyAoYXhpcy5tYXggLSBheGlzLm1pbikpICogMTAwO1xufVxuLyoqXG4gKiBXZSBhbHdheXMgY29ycmVjdCBib3JkZXJSYWRpdXMgYXMgYSBwZXJjZW50YWdlIHJhdGhlciB0aGFuIHBpeGVscyB0byByZWR1Y2UgcGFpbnRzLlxuICogRm9yIGV4YW1wbGUsIGlmIHlvdSBhcmUgcHJvamVjdGluZyBhIGJveCB0aGF0IGlzIDEwMHB4IHdpZGUgd2l0aCBhIDEwcHggYm9yZGVyUmFkaXVzXG4gKiBpbnRvIGEgYm94IHRoYXQgaXMgMjAwcHggd2lkZSB3aXRoIGEgMjBweCBib3JkZXJSYWRpdXMsIHRoYXQgaXMgYWN0dWFsbHkgYSAxMCVcbiAqIGJvcmRlclJhZGl1cyBpbiBib3RoIHN0YXRlcy4gSWYgd2UgYW5pbWF0ZSBiZXR3ZWVuIHRoZSB0d28gaW4gcGl4ZWxzIHRoYXQgd2lsbCB0cmlnZ2VyXG4gKiBhIHBhaW50IGVhY2ggdGltZS4gSWYgd2UgYW5pbWF0ZSBiZXR3ZWVuIHRoZSB0d28gaW4gcGVyY2VudGFnZSB3ZSdsbCBhdm9pZCBhIHBhaW50LlxuICovXG52YXIgY29ycmVjdEJvcmRlclJhZGl1cyA9IHtcbiAgICBjb3JyZWN0OiBmdW5jdGlvbiAobGF0ZXN0LCBub2RlKSB7XG4gICAgICAgIGlmICghbm9kZS50YXJnZXQpXG4gICAgICAgICAgICByZXR1cm4gbGF0ZXN0O1xuICAgICAgICAvKipcbiAgICAgICAgICogSWYgbGF0ZXN0IGlzIGEgc3RyaW5nLCBpZiBpdCdzIGEgcGVyY2VudGFnZSB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5IGFzIGl0J3NcbiAgICAgICAgICogZ29pbmcgdG8gYmUgc3RyZXRjaGVkIGFwcHJvcHJpYXRlbHkuIE90aGVyd2lzZSwgaWYgaXQncyBhIHBpeGVsLCBjb252ZXJ0IGl0IHRvIGEgbnVtYmVyLlxuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHR5cGVvZiBsYXRlc3QgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIGlmIChweC50ZXN0KGxhdGVzdCkpIHtcbiAgICAgICAgICAgICAgICBsYXRlc3QgPSBwYXJzZUZsb2F0KGxhdGVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbGF0ZXN0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiBsYXRlc3QgaXMgYSBudW1iZXIsIGl0J3MgYSBwaXhlbCB2YWx1ZS4gV2UgdXNlIHRoZSBjdXJyZW50IHZpZXdwb3J0Qm94IHRvIGNhbGN1bGF0ZSB0aGF0XG4gICAgICAgICAqIHBpeGVsIHZhbHVlIGFzIGEgcGVyY2VudGFnZSBvZiBlYWNoIGF4aXNcbiAgICAgICAgICovXG4gICAgICAgIHZhciB4ID0gcGl4ZWxzVG9QZXJjZW50KGxhdGVzdCwgbm9kZS50YXJnZXQueCk7XG4gICAgICAgIHZhciB5ID0gcGl4ZWxzVG9QZXJjZW50KGxhdGVzdCwgbm9kZS50YXJnZXQueSk7XG4gICAgICAgIHJldHVybiBcIlwiLmNvbmNhdCh4LCBcIiUgXCIpLmNvbmNhdCh5LCBcIiVcIik7XG4gICAgfSxcbn07XG5cbmV4cG9ydCB7IGNvcnJlY3RCb3JkZXJSYWRpdXMsIHBpeGVsc1RvUGVyY2VudCB9O1xuIiwiaW1wb3J0IHsgbWl4IH0gZnJvbSAncG9wbW90aW9uJztcbmltcG9ydCB7IGNvbXBsZXggfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5pbXBvcnQgeyBjc3NWYXJpYWJsZVJlZ2V4IH0gZnJvbSAnLi4vLi4vcmVuZGVyL2RvbS91dGlscy9jc3MtdmFyaWFibGVzLWNvbnZlcnNpb24ubWpzJztcblxudmFyIHZhclRva2VuID0gXCJfJGNzc1wiO1xudmFyIGNvcnJlY3RCb3hTaGFkb3cgPSB7XG4gICAgY29ycmVjdDogZnVuY3Rpb24gKGxhdGVzdCwgX2EpIHtcbiAgICAgICAgdmFyIHRyZWVTY2FsZSA9IF9hLnRyZWVTY2FsZSwgcHJvamVjdGlvbkRlbHRhID0gX2EucHJvamVjdGlvbkRlbHRhO1xuICAgICAgICB2YXIgb3JpZ2luYWwgPSBsYXRlc3Q7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBXZSBuZWVkIHRvIGZpcnN0IHN0cmlwIGFuZCBzdG9yZSBDU1MgdmFyaWFibGVzIGZyb20gdGhlIHN0cmluZy5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBjb250YWluc0NTU1ZhcmlhYmxlcyA9IGxhdGVzdC5pbmNsdWRlcyhcInZhcihcIik7XG4gICAgICAgIHZhciBjc3NWYXJpYWJsZXMgPSBbXTtcbiAgICAgICAgaWYgKGNvbnRhaW5zQ1NTVmFyaWFibGVzKSB7XG4gICAgICAgICAgICBsYXRlc3QgPSBsYXRlc3QucmVwbGFjZShjc3NWYXJpYWJsZVJlZ2V4LCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICAgICAgICBjc3NWYXJpYWJsZXMucHVzaChtYXRjaCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhclRva2VuO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHNoYWRvdyA9IGNvbXBsZXgucGFyc2UobGF0ZXN0KTtcbiAgICAgICAgLy8gVE9ETzogRG9lc24ndCBzdXBwb3J0IG11bHRpcGxlIHNoYWRvd3NcbiAgICAgICAgaWYgKHNoYWRvdy5sZW5ndGggPiA1KVxuICAgICAgICAgICAgcmV0dXJuIG9yaWdpbmFsO1xuICAgICAgICB2YXIgdGVtcGxhdGUgPSBjb21wbGV4LmNyZWF0ZVRyYW5zZm9ybWVyKGxhdGVzdCk7XG4gICAgICAgIHZhciBvZmZzZXQgPSB0eXBlb2Ygc2hhZG93WzBdICE9PSBcIm51bWJlclwiID8gMSA6IDA7XG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgb3ZlcmFsbCBjb250ZXh0IHNjYWxlXG4gICAgICAgIHZhciB4U2NhbGUgPSBwcm9qZWN0aW9uRGVsdGEueC5zY2FsZSAqIHRyZWVTY2FsZS54O1xuICAgICAgICB2YXIgeVNjYWxlID0gcHJvamVjdGlvbkRlbHRhLnkuc2NhbGUgKiB0cmVlU2NhbGUueTtcbiAgICAgICAgc2hhZG93WzAgKyBvZmZzZXRdIC89IHhTY2FsZTtcbiAgICAgICAgc2hhZG93WzEgKyBvZmZzZXRdIC89IHlTY2FsZTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIElkZWFsbHkgd2UnZCBjb3JyZWN0IHggYW5kIHkgc2NhbGVzIGluZGl2aWR1YWxseSwgYnV0IGJlY2F1c2UgYmx1ciBhbmRcbiAgICAgICAgICogc3ByZWFkIGFwcGx5IHRvIGJvdGggd2UgaGF2ZSB0byB0YWtlIGEgc2NhbGUgYXZlcmFnZSBhbmQgYXBwbHkgdGhhdCBpbnN0ZWFkLlxuICAgICAgICAgKiBXZSBjb3VsZCBwb3RlbnRpYWxseSBpbXByb3ZlIHRoZSBvdXRjb21lIG9mIHRoaXMgYnkgaW5jb3Jwb3JhdGluZyB0aGUgcmF0aW8gYmV0d2VlblxuICAgICAgICAgKiB0aGUgdHdvIHNjYWxlcy5cbiAgICAgICAgICovXG4gICAgICAgIHZhciBhdmVyYWdlU2NhbGUgPSBtaXgoeFNjYWxlLCB5U2NhbGUsIDAuNSk7XG4gICAgICAgIC8vIEJsdXJcbiAgICAgICAgaWYgKHR5cGVvZiBzaGFkb3dbMiArIG9mZnNldF0gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICBzaGFkb3dbMiArIG9mZnNldF0gLz0gYXZlcmFnZVNjYWxlO1xuICAgICAgICAvLyBTcHJlYWRcbiAgICAgICAgaWYgKHR5cGVvZiBzaGFkb3dbMyArIG9mZnNldF0gPT09IFwibnVtYmVyXCIpXG4gICAgICAgICAgICBzaGFkb3dbMyArIG9mZnNldF0gLz0gYXZlcmFnZVNjYWxlO1xuICAgICAgICB2YXIgb3V0cHV0ID0gdGVtcGxhdGUoc2hhZG93KTtcbiAgICAgICAgaWYgKGNvbnRhaW5zQ1NTVmFyaWFibGVzKSB7XG4gICAgICAgICAgICB2YXIgaV8xID0gMDtcbiAgICAgICAgICAgIG91dHB1dCA9IG91dHB1dC5yZXBsYWNlKHZhclRva2VuLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgdmFyIGNzc1ZhcmlhYmxlID0gY3NzVmFyaWFibGVzW2lfMV07XG4gICAgICAgICAgICAgICAgaV8xKys7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNzc1ZhcmlhYmxlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9LFxufTtcblxuZXhwb3J0IHsgY29ycmVjdEJveFNoYWRvdyB9O1xuIiwiaW1wb3J0IHsgX19leHRlbmRzLCBfX2Fzc2lnbiwgX19yZWFkIH0gZnJvbSAndHNsaWInO1xuaW1wb3J0IHN5bmMgZnJvbSAnZnJhbWVzeW5jJztcbmltcG9ydCBSZWFjdF9fZGVmYXVsdCwgeyB1c2VDb250ZXh0IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlUHJlc2VuY2UgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL0FuaW1hdGVQcmVzZW5jZS91c2UtcHJlc2VuY2UubWpzJztcbmltcG9ydCB7IExheW91dEdyb3VwQ29udGV4dCB9IGZyb20gJy4uLy4uLy4uL2NvbnRleHQvTGF5b3V0R3JvdXBDb250ZXh0Lm1qcyc7XG5pbXBvcnQgeyBTd2l0Y2hMYXlvdXRHcm91cENvbnRleHQgfSBmcm9tICcuLi8uLi8uLi9jb250ZXh0L1N3aXRjaExheW91dEdyb3VwQ29udGV4dC5tanMnO1xuaW1wb3J0IHsgZ2xvYmFsUHJvamVjdGlvblN0YXRlIH0gZnJvbSAnLi4vLi4vLi4vcHJvamVjdGlvbi9ub2RlL3N0YXRlLm1qcyc7XG5pbXBvcnQgeyBjb3JyZWN0Qm9yZGVyUmFkaXVzIH0gZnJvbSAnLi4vLi4vLi4vcHJvamVjdGlvbi9zdHlsZXMvc2NhbGUtYm9yZGVyLXJhZGl1cy5tanMnO1xuaW1wb3J0IHsgY29ycmVjdEJveFNoYWRvdyB9IGZyb20gJy4uLy4uLy4uL3Byb2plY3Rpb24vc3R5bGVzL3NjYWxlLWJveC1zaGFkb3cubWpzJztcbmltcG9ydCB7IGFkZFNjYWxlQ29ycmVjdG9yIH0gZnJvbSAnLi4vLi4vLi4vcHJvamVjdGlvbi9zdHlsZXMvc2NhbGUtY29ycmVjdGlvbi5tanMnO1xuXG52YXIgTWVhc3VyZUxheW91dFdpdGhDb250ZXh0ID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKF9zdXBlcikge1xuICAgIF9fZXh0ZW5kcyhNZWFzdXJlTGF5b3V0V2l0aENvbnRleHQsIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gTWVhc3VyZUxheW91dFdpdGhDb250ZXh0KCkge1xuICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoaXMgb25seSBtb3VudHMgcHJvamVjdGlvbiBub2RlcyBmb3IgY29tcG9uZW50cyB0aGF0XG4gICAgICogbmVlZCBtZWFzdXJpbmcsIHdlIG1pZ2h0IHdhbnQgdG8gZG8gaXQgZm9yIGFsbCBjb21wb25lbnRzXG4gICAgICogaW4gb3JkZXIgdG8gaW5jb3Jwb3JhdGUgdHJhbnNmb3Jtc1xuICAgICAqL1xuICAgIE1lYXN1cmVMYXlvdXRXaXRoQ29udGV4dC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgIHZhciBfYSA9IHRoaXMucHJvcHMsIHZpc3VhbEVsZW1lbnQgPSBfYS52aXN1YWxFbGVtZW50LCBsYXlvdXRHcm91cCA9IF9hLmxheW91dEdyb3VwLCBzd2l0Y2hMYXlvdXRHcm91cCA9IF9hLnN3aXRjaExheW91dEdyb3VwLCBsYXlvdXRJZCA9IF9hLmxheW91dElkO1xuICAgICAgICB2YXIgcHJvamVjdGlvbiA9IHZpc3VhbEVsZW1lbnQucHJvamVjdGlvbjtcbiAgICAgICAgYWRkU2NhbGVDb3JyZWN0b3IoZGVmYXVsdFNjYWxlQ29ycmVjdG9ycyk7XG4gICAgICAgIGlmIChwcm9qZWN0aW9uKSB7XG4gICAgICAgICAgICBpZiAobGF5b3V0R3JvdXAgPT09IG51bGwgfHwgbGF5b3V0R3JvdXAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGxheW91dEdyb3VwLmdyb3VwKVxuICAgICAgICAgICAgICAgIGxheW91dEdyb3VwLmdyb3VwLmFkZChwcm9qZWN0aW9uKTtcbiAgICAgICAgICAgIGlmICgoc3dpdGNoTGF5b3V0R3JvdXAgPT09IG51bGwgfHwgc3dpdGNoTGF5b3V0R3JvdXAgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHN3aXRjaExheW91dEdyb3VwLnJlZ2lzdGVyKSAmJiBsYXlvdXRJZCkge1xuICAgICAgICAgICAgICAgIHN3aXRjaExheW91dEdyb3VwLnJlZ2lzdGVyKHByb2plY3Rpb24pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcHJvamVjdGlvbi5yb290LmRpZFVwZGF0ZSgpO1xuICAgICAgICAgICAgcHJvamVjdGlvbi5hZGRFdmVudExpc3RlbmVyKFwiYW5pbWF0aW9uQ29tcGxldGVcIiwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIF90aGlzLnNhZmVUb1JlbW92ZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwcm9qZWN0aW9uLnNldE9wdGlvbnMoX19hc3NpZ24oX19hc3NpZ24oe30sIHByb2plY3Rpb24ub3B0aW9ucyksIHsgb25FeGl0Q29tcGxldGU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIF90aGlzLnNhZmVUb1JlbW92ZSgpOyB9IH0pKTtcbiAgICAgICAgfVxuICAgICAgICBnbG9iYWxQcm9qZWN0aW9uU3RhdGUuaGFzRXZlclVwZGF0ZWQgPSB0cnVlO1xuICAgIH07XG4gICAgTWVhc3VyZUxheW91dFdpdGhDb250ZXh0LnByb3RvdHlwZS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSA9IGZ1bmN0aW9uIChwcmV2UHJvcHMpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIF9hID0gdGhpcy5wcm9wcywgbGF5b3V0RGVwZW5kZW5jeSA9IF9hLmxheW91dERlcGVuZGVuY3ksIHZpc3VhbEVsZW1lbnQgPSBfYS52aXN1YWxFbGVtZW50LCBkcmFnID0gX2EuZHJhZywgaXNQcmVzZW50ID0gX2EuaXNQcmVzZW50O1xuICAgICAgICB2YXIgcHJvamVjdGlvbiA9IHZpc3VhbEVsZW1lbnQucHJvamVjdGlvbjtcbiAgICAgICAgaWYgKCFwcm9qZWN0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBUT0RPOiBXZSB1c2UgdGhpcyBkYXRhIGluIHJlbGVnYXRlIHRvIGRldGVybWluZSB3aGV0aGVyIHRvXG4gICAgICAgICAqIHByb21vdGUgYSBwcmV2aW91cyBlbGVtZW50LiBUaGVyZSdzIG5vIGd1YXJhbnRlZSBpdHMgcHJlc2VuY2UgZGF0YVxuICAgICAgICAgKiB3aWxsIGhhdmUgdXBkYXRlZCBieSB0aGlzIHBvaW50IC0gaWYgYSBidWcgbGlrZSB0aGlzIGFyaXNlcyBpdCB3aWxsXG4gICAgICAgICAqIGhhdmUgdG8gYmUgdGhhdCB3ZSBtYXJrRm9yUmVsZWdhdGlvbiBhbmQgdGhlbiBmaW5kIGEgbmV3IGxlYWQgc29tZSBvdGhlciB3YXksXG4gICAgICAgICAqIHBlcmhhcHMgaW4gZGlkVXBkYXRlXG4gICAgICAgICAqL1xuICAgICAgICBwcm9qZWN0aW9uLmlzUHJlc2VudCA9IGlzUHJlc2VudDtcbiAgICAgICAgaWYgKGRyYWcgfHxcbiAgICAgICAgICAgIHByZXZQcm9wcy5sYXlvdXREZXBlbmRlbmN5ICE9PSBsYXlvdXREZXBlbmRlbmN5IHx8XG4gICAgICAgICAgICBsYXlvdXREZXBlbmRlbmN5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHByb2plY3Rpb24ud2lsbFVwZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zYWZlVG9SZW1vdmUoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldlByb3BzLmlzUHJlc2VudCAhPT0gaXNQcmVzZW50KSB7XG4gICAgICAgICAgICBpZiAoaXNQcmVzZW50KSB7XG4gICAgICAgICAgICAgICAgcHJvamVjdGlvbi5wcm9tb3RlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICghcHJvamVjdGlvbi5yZWxlZ2F0ZSgpKSB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogSWYgdGhlcmUncyBhbm90aGVyIHN0YWNrIG1lbWJlciB0YWtpbmcgb3ZlciBmcm9tIHRoaXMgb25lLFxuICAgICAgICAgICAgICAgICAqIGl0J3MgaW4gY2hhcmdlIG9mIHRoZSBleGl0IGFuaW1hdGlvbiBhbmQgdGhlcmVmb3JlIHNob3VsZFxuICAgICAgICAgICAgICAgICAqIGJlIGluIGNoYXJnZSBvZiB0aGUgc2FmZSB0byByZW1vdmUuIE90aGVyd2lzZSB3ZSBjYWxsIGl0IGhlcmUuXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgc3luYy5wb3N0UmVuZGVyKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICBpZiAoISgoX2EgPSBwcm9qZWN0aW9uLmdldFN0YWNrKCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5tZW1iZXJzLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnNhZmVUb1JlbW92ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcbiAgICBNZWFzdXJlTGF5b3V0V2l0aENvbnRleHQucHJvdG90eXBlLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHByb2plY3Rpb24gPSB0aGlzLnByb3BzLnZpc3VhbEVsZW1lbnQucHJvamVjdGlvbjtcbiAgICAgICAgaWYgKHByb2plY3Rpb24pIHtcbiAgICAgICAgICAgIHByb2plY3Rpb24ucm9vdC5kaWRVcGRhdGUoKTtcbiAgICAgICAgICAgIGlmICghcHJvamVjdGlvbi5jdXJyZW50QW5pbWF0aW9uICYmIHByb2plY3Rpb24uaXNMZWFkKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNhZmVUb1JlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBNZWFzdXJlTGF5b3V0V2l0aENvbnRleHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX2EgPSB0aGlzLnByb3BzLCB2aXN1YWxFbGVtZW50ID0gX2EudmlzdWFsRWxlbWVudCwgbGF5b3V0R3JvdXAgPSBfYS5sYXlvdXRHcm91cCwgcHJvbW90ZUNvbnRleHQgPSBfYS5zd2l0Y2hMYXlvdXRHcm91cDtcbiAgICAgICAgdmFyIHByb2plY3Rpb24gPSB2aXN1YWxFbGVtZW50LnByb2plY3Rpb247XG4gICAgICAgIGlmIChwcm9qZWN0aW9uKSB7XG4gICAgICAgICAgICBwcm9qZWN0aW9uLnNjaGVkdWxlQ2hlY2tBZnRlclVubW91bnQoKTtcbiAgICAgICAgICAgIGlmIChsYXlvdXRHcm91cCA9PT0gbnVsbCB8fCBsYXlvdXRHcm91cCA9PT0gdm9pZCAwID8gdm9pZCAwIDogbGF5b3V0R3JvdXAuZ3JvdXApXG4gICAgICAgICAgICAgICAgbGF5b3V0R3JvdXAuZ3JvdXAucmVtb3ZlKHByb2plY3Rpb24pO1xuICAgICAgICAgICAgaWYgKHByb21vdGVDb250ZXh0ID09PSBudWxsIHx8IHByb21vdGVDb250ZXh0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwcm9tb3RlQ29udGV4dC5kZXJlZ2lzdGVyKVxuICAgICAgICAgICAgICAgIHByb21vdGVDb250ZXh0LmRlcmVnaXN0ZXIocHJvamVjdGlvbik7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIE1lYXN1cmVMYXlvdXRXaXRoQ29udGV4dC5wcm90b3R5cGUuc2FmZVRvUmVtb3ZlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgc2FmZVRvUmVtb3ZlID0gdGhpcy5wcm9wcy5zYWZlVG9SZW1vdmU7XG4gICAgICAgIHNhZmVUb1JlbW92ZSA9PT0gbnVsbCB8fCBzYWZlVG9SZW1vdmUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNhZmVUb1JlbW92ZSgpO1xuICAgIH07XG4gICAgTWVhc3VyZUxheW91dFdpdGhDb250ZXh0LnByb3RvdHlwZS5yZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG4gICAgcmV0dXJuIE1lYXN1cmVMYXlvdXRXaXRoQ29udGV4dDtcbn0oUmVhY3RfX2RlZmF1bHQuQ29tcG9uZW50KSk7XG5mdW5jdGlvbiBNZWFzdXJlTGF5b3V0KHByb3BzKSB7XG4gICAgdmFyIF9hID0gX19yZWFkKHVzZVByZXNlbmNlKCksIDIpLCBpc1ByZXNlbnQgPSBfYVswXSwgc2FmZVRvUmVtb3ZlID0gX2FbMV07XG4gICAgdmFyIGxheW91dEdyb3VwID0gdXNlQ29udGV4dChMYXlvdXRHcm91cENvbnRleHQpO1xuICAgIHJldHVybiAoUmVhY3RfX2RlZmF1bHQuY3JlYXRlRWxlbWVudChNZWFzdXJlTGF5b3V0V2l0aENvbnRleHQsIF9fYXNzaWduKHt9LCBwcm9wcywgeyBsYXlvdXRHcm91cDogbGF5b3V0R3JvdXAsIHN3aXRjaExheW91dEdyb3VwOiB1c2VDb250ZXh0KFN3aXRjaExheW91dEdyb3VwQ29udGV4dCksIGlzUHJlc2VudDogaXNQcmVzZW50LCBzYWZlVG9SZW1vdmU6IHNhZmVUb1JlbW92ZSB9KSkpO1xufVxudmFyIGRlZmF1bHRTY2FsZUNvcnJlY3RvcnMgPSB7XG4gICAgYm9yZGVyUmFkaXVzOiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY29ycmVjdEJvcmRlclJhZGl1cyksIHsgYXBwbHlUbzogW1xuICAgICAgICAgICAgXCJib3JkZXJUb3BMZWZ0UmFkaXVzXCIsXG4gICAgICAgICAgICBcImJvcmRlclRvcFJpZ2h0UmFkaXVzXCIsXG4gICAgICAgICAgICBcImJvcmRlckJvdHRvbUxlZnRSYWRpdXNcIixcbiAgICAgICAgICAgIFwiYm9yZGVyQm90dG9tUmlnaHRSYWRpdXNcIixcbiAgICAgICAgXSB9KSxcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiBjb3JyZWN0Qm9yZGVyUmFkaXVzLFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiBjb3JyZWN0Qm9yZGVyUmFkaXVzLFxuICAgIGJvcmRlckJvdHRvbUxlZnRSYWRpdXM6IGNvcnJlY3RCb3JkZXJSYWRpdXMsXG4gICAgYm9yZGVyQm90dG9tUmlnaHRSYWRpdXM6IGNvcnJlY3RCb3JkZXJSYWRpdXMsXG4gICAgYm94U2hhZG93OiBjb3JyZWN0Qm94U2hhZG93LFxufTtcblxuZXhwb3J0IHsgTWVhc3VyZUxheW91dCB9O1xuIiwiaW1wb3J0IHsgTWVhc3VyZUxheW91dCB9IGZyb20gJy4vTWVhc3VyZUxheW91dC5tanMnO1xuXG52YXIgbGF5b3V0RmVhdHVyZXMgPSB7XG4gICAgbWVhc3VyZUxheW91dDogTWVhc3VyZUxheW91dCxcbn07XG5cbmV4cG9ydCB7IGxheW91dEZlYXR1cmVzIH07XG4iLCJpbXBvcnQgeyBtaXgsIHByb2dyZXNzLCBsaW5lYXIsIGNpcmNPdXQgfSBmcm9tICdwb3Btb3Rpb24nO1xuaW1wb3J0IHsgcHgsIHBlcmNlbnQgfSBmcm9tICdzdHlsZS12YWx1ZS10eXBlcyc7XG5cbnZhciBib3JkZXJzID0gW1wiVG9wTGVmdFwiLCBcIlRvcFJpZ2h0XCIsIFwiQm90dG9tTGVmdFwiLCBcIkJvdHRvbVJpZ2h0XCJdO1xudmFyIG51bUJvcmRlcnMgPSBib3JkZXJzLmxlbmd0aDtcbnZhciBhc051bWJlciA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyBwYXJzZUZsb2F0KHZhbHVlKSA6IHZhbHVlO1xufTtcbnZhciBpc1B4ID0gZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCBweC50ZXN0KHZhbHVlKTtcbn07XG5mdW5jdGlvbiBtaXhWYWx1ZXModGFyZ2V0LCBmb2xsb3csIGxlYWQsIHByb2dyZXNzLCBzaG91bGRDcm9zc2ZhZGVPcGFjaXR5LCBpc09ubHlNZW1iZXIpIHtcbiAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgaWYgKHNob3VsZENyb3NzZmFkZU9wYWNpdHkpIHtcbiAgICAgICAgdGFyZ2V0Lm9wYWNpdHkgPSBtaXgoMCwgXG4gICAgICAgIC8vIChmb2xsb3c/Lm9wYWNpdHkgYXMgbnVtYmVyKSA/PyAwLFxuICAgICAgICAvLyBUT0RPIFJlaW5zdGF0ZSB0aGlzIGlmIG9ubHkgY2hpbGRcbiAgICAgICAgKF9hID0gbGVhZC5vcGFjaXR5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAxLCBlYXNlQ3Jvc3NmYWRlSW4ocHJvZ3Jlc3MpKTtcbiAgICAgICAgdGFyZ2V0Lm9wYWNpdHlFeGl0ID0gbWl4KChfYiA9IGZvbGxvdy5vcGFjaXR5KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAxLCAwLCBlYXNlQ3Jvc3NmYWRlT3V0KHByb2dyZXNzKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzT25seU1lbWJlcikge1xuICAgICAgICB0YXJnZXQub3BhY2l0eSA9IG1peCgoX2MgPSBmb2xsb3cub3BhY2l0eSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogMSwgKF9kID0gbGVhZC5vcGFjaXR5KSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAxLCBwcm9ncmVzcyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIE1peCBib3JkZXIgcmFkaXVzXG4gICAgICovXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW1Cb3JkZXJzOyBpKyspIHtcbiAgICAgICAgdmFyIGJvcmRlckxhYmVsID0gXCJib3JkZXJcIi5jb25jYXQoYm9yZGVyc1tpXSwgXCJSYWRpdXNcIik7XG4gICAgICAgIHZhciBmb2xsb3dSYWRpdXMgPSBnZXRSYWRpdXMoZm9sbG93LCBib3JkZXJMYWJlbCk7XG4gICAgICAgIHZhciBsZWFkUmFkaXVzID0gZ2V0UmFkaXVzKGxlYWQsIGJvcmRlckxhYmVsKTtcbiAgICAgICAgaWYgKGZvbGxvd1JhZGl1cyA9PT0gdW5kZWZpbmVkICYmIGxlYWRSYWRpdXMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBmb2xsb3dSYWRpdXMgfHwgKGZvbGxvd1JhZGl1cyA9IDApO1xuICAgICAgICBsZWFkUmFkaXVzIHx8IChsZWFkUmFkaXVzID0gMCk7XG4gICAgICAgIHZhciBjYW5NaXggPSBmb2xsb3dSYWRpdXMgPT09IDAgfHxcbiAgICAgICAgICAgIGxlYWRSYWRpdXMgPT09IDAgfHxcbiAgICAgICAgICAgIGlzUHgoZm9sbG93UmFkaXVzKSA9PT0gaXNQeChsZWFkUmFkaXVzKTtcbiAgICAgICAgaWYgKGNhbk1peCkge1xuICAgICAgICAgICAgdGFyZ2V0W2JvcmRlckxhYmVsXSA9IE1hdGgubWF4KG1peChhc051bWJlcihmb2xsb3dSYWRpdXMpLCBhc051bWJlcihsZWFkUmFkaXVzKSwgcHJvZ3Jlc3MpLCAwKTtcbiAgICAgICAgICAgIGlmIChwZXJjZW50LnRlc3QobGVhZFJhZGl1cykgfHwgcGVyY2VudC50ZXN0KGZvbGxvd1JhZGl1cykpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXRbYm9yZGVyTGFiZWxdICs9IFwiJVwiO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGFyZ2V0W2JvcmRlckxhYmVsXSA9IGxlYWRSYWRpdXM7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogTWl4IHJvdGF0aW9uXG4gICAgICovXG4gICAgaWYgKGZvbGxvdy5yb3RhdGUgfHwgbGVhZC5yb3RhdGUpIHtcbiAgICAgICAgdGFyZ2V0LnJvdGF0ZSA9IG1peChmb2xsb3cucm90YXRlIHx8IDAsIGxlYWQucm90YXRlIHx8IDAsIHByb2dyZXNzKTtcbiAgICB9XG59XG5mdW5jdGlvbiBnZXRSYWRpdXModmFsdWVzLCByYWRpdXNOYW1lKSB7XG4gICAgdmFyIF9hO1xuICAgIHJldHVybiAoX2EgPSB2YWx1ZXNbcmFkaXVzTmFtZV0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHZhbHVlcy5ib3JkZXJSYWRpdXM7XG59XG4vLyAvKipcbi8vICAqIFdlIG9ubHkgd2FudCB0byBtaXggdGhlIGJhY2tncm91bmQgY29sb3IgaWYgdGhlcmUncyBhIGZvbGxvdyBlbGVtZW50XG4vLyAgKiB0aGF0IHdlJ3JlIG5vdCBjcm9zc2ZhZGluZyBvcGFjaXR5IGJldHdlZW4uIEZvciBpbnN0YW5jZSB3aXRoIHN3aXRjaFxuLy8gICogQW5pbWF0ZVNoYXJlZExheW91dCBhbmltYXRpb25zLCB0aGlzIGhlbHBzIHRoZSBpbGx1c2lvbiBvZiBhIGNvbnRpbnVvdXNcbi8vICAqIGVsZW1lbnQgYmVpbmcgYW5pbWF0ZWQgYnV0IGFsc28gY3V0cyBkb3duIG9uIHRoZSBudW1iZXIgb2YgcGFpbnRzIHRyaWdnZXJlZFxuLy8gICogZm9yIGVsZW1lbnRzIHdoZXJlIG9wYWNpdHkgaXMgZG9pbmcgdGhhdCB3b3JrIGZvciB1cy5cbi8vICAqL1xuLy8gaWYgKFxuLy8gICAgICFoYXNGb2xsb3dFbGVtZW50ICYmXG4vLyAgICAgbGF0ZXN0TGVhZFZhbHVlcy5iYWNrZ3JvdW5kQ29sb3IgJiZcbi8vICAgICBsYXRlc3RGb2xsb3dWYWx1ZXMuYmFja2dyb3VuZENvbG9yXG4vLyApIHtcbi8vICAgICAvKipcbi8vICAgICAgKiBUaGlzIGlzbid0IGlkZWFsIHBlcmZvcm1hbmNlLXdpc2UgYXMgbWl4Q29sb3IgaXMgY3JlYXRpbmcgYSBuZXcgZnVuY3Rpb24gZXZlcnkgZnJhbWUuXG4vLyAgICAgICogV2UgY291bGQgcHJvYmFibHkgY3JlYXRlIGEgbWl4ZXIgdGhhdCBydW5zIGF0IHRoZSBzdGFydCBvZiB0aGUgYW5pbWF0aW9uIGJ1dFxuLy8gICAgICAqIHRoZSBpZGVhIGJlaGluZCB0aGUgY3Jvc3NmYWRlciBpcyB0aGF0IGl0IHJ1bnMgZHluYW1pY2FsbHkgYmV0d2VlbiB0d28gcG90ZW50aWFsbHlcbi8vICAgICAgKiBjaGFuZ2luZyB0YXJnZXRzIChpZSBvcGFjaXR5IG9yIGJvcmRlclJhZGl1cyBtYXkgYmUgYW5pbWF0aW5nIGluZGVwZW5kZW50bHkgdmlhIHZhcmlhbnRzKVxuLy8gICAgICAqL1xuLy8gICAgIGxlYWRTdGF0ZS5iYWNrZ3JvdW5kQ29sb3IgPSBmb2xsb3dTdGF0ZS5iYWNrZ3JvdW5kQ29sb3IgPSBtaXhDb2xvcihcbi8vICAgICAgICAgbGF0ZXN0Rm9sbG93VmFsdWVzLmJhY2tncm91bmRDb2xvciBhcyBzdHJpbmcsXG4vLyAgICAgICAgIGxhdGVzdExlYWRWYWx1ZXMuYmFja2dyb3VuZENvbG9yIGFzIHN0cmluZ1xuLy8gICAgICkocClcbi8vIH1cbnZhciBlYXNlQ3Jvc3NmYWRlSW4gPSBjb21wcmVzcygwLCAwLjUsIGNpcmNPdXQpO1xudmFyIGVhc2VDcm9zc2ZhZGVPdXQgPSBjb21wcmVzcygwLjUsIDAuOTUsIGxpbmVhcik7XG5mdW5jdGlvbiBjb21wcmVzcyhtaW4sIG1heCwgZWFzaW5nKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChwKSB7XG4gICAgICAgIC8vIENvdWxkIHJlcGxhY2UgaWZzIHdpdGggY2xhbXBcbiAgICAgICAgaWYgKHAgPCBtaW4pXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgaWYgKHAgPiBtYXgpXG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgcmV0dXJuIGVhc2luZyhwcm9ncmVzcyhtaW4sIG1heCwgcCkpO1xuICAgIH07XG59XG5cbmV4cG9ydCB7IG1peFZhbHVlcyB9O1xuIiwiLyoqXG4gKiBSZXNldCBhbiBheGlzIHRvIHRoZSBwcm92aWRlZCBvcmlnaW4gYm94LlxuICpcbiAqIFRoaXMgaXMgYSBtdXRhdGl2ZSBvcGVyYXRpb24uXG4gKi9cbmZ1bmN0aW9uIGNvcHlBeGlzSW50byhheGlzLCBvcmlnaW5BeGlzKSB7XG4gICAgYXhpcy5taW4gPSBvcmlnaW5BeGlzLm1pbjtcbiAgICBheGlzLm1heCA9IG9yaWdpbkF4aXMubWF4O1xufVxuLyoqXG4gKiBSZXNldCBhIGJveCB0byB0aGUgcHJvdmlkZWQgb3JpZ2luIGJveC5cbiAqXG4gKiBUaGlzIGlzIGEgbXV0YXRpdmUgb3BlcmF0aW9uLlxuICovXG5mdW5jdGlvbiBjb3B5Qm94SW50byhib3gsIG9yaWdpbkJveCkge1xuICAgIGNvcHlBeGlzSW50byhib3gueCwgb3JpZ2luQm94LngpO1xuICAgIGNvcHlBeGlzSW50byhib3gueSwgb3JpZ2luQm94LnkpO1xufVxuXG5leHBvcnQgeyBjb3B5QXhpc0ludG8sIGNvcHlCb3hJbnRvIH07XG4iLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBtaXggfSBmcm9tICdwb3Btb3Rpb24nO1xuaW1wb3J0IHsgcGVyY2VudCB9IGZyb20gJ3N0eWxlLXZhbHVlLXR5cGVzJztcbmltcG9ydCB7IHNjYWxlUG9pbnQgfSBmcm9tICcuL2RlbHRhLWFwcGx5Lm1qcyc7XG5cbi8qKlxuICogUmVtb3ZlIGEgZGVsdGEgZnJvbSBhIHBvaW50LiBUaGlzIGlzIGVzc2VudGlhbGx5IHRoZSBzdGVwcyBvZiBhcHBseVBvaW50RGVsdGEgaW4gcmV2ZXJzZVxuICovXG5mdW5jdGlvbiByZW1vdmVQb2ludERlbHRhKHBvaW50LCB0cmFuc2xhdGUsIHNjYWxlLCBvcmlnaW5Qb2ludCwgYm94U2NhbGUpIHtcbiAgICBwb2ludCAtPSB0cmFuc2xhdGU7XG4gICAgcG9pbnQgPSBzY2FsZVBvaW50KHBvaW50LCAxIC8gc2NhbGUsIG9yaWdpblBvaW50KTtcbiAgICBpZiAoYm94U2NhbGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBwb2ludCA9IHNjYWxlUG9pbnQocG9pbnQsIDEgLyBib3hTY2FsZSwgb3JpZ2luUG9pbnQpO1xuICAgIH1cbiAgICByZXR1cm4gcG9pbnQ7XG59XG4vKipcbiAqIFJlbW92ZSBhIGRlbHRhIGZyb20gYW4gYXhpcy4gVGhpcyBpcyBlc3NlbnRpYWxseSB0aGUgc3RlcHMgb2YgYXBwbHlBeGlzRGVsdGEgaW4gcmV2ZXJzZVxuICovXG5mdW5jdGlvbiByZW1vdmVBeGlzRGVsdGEoYXhpcywgdHJhbnNsYXRlLCBzY2FsZSwgb3JpZ2luLCBib3hTY2FsZSwgb3JpZ2luQXhpcywgc291cmNlQXhpcykge1xuICAgIGlmICh0cmFuc2xhdGUgPT09IHZvaWQgMCkgeyB0cmFuc2xhdGUgPSAwOyB9XG4gICAgaWYgKHNjYWxlID09PSB2b2lkIDApIHsgc2NhbGUgPSAxOyB9XG4gICAgaWYgKG9yaWdpbiA9PT0gdm9pZCAwKSB7IG9yaWdpbiA9IDAuNTsgfVxuICAgIGlmIChvcmlnaW5BeGlzID09PSB2b2lkIDApIHsgb3JpZ2luQXhpcyA9IGF4aXM7IH1cbiAgICBpZiAoc291cmNlQXhpcyA9PT0gdm9pZCAwKSB7IHNvdXJjZUF4aXMgPSBheGlzOyB9XG4gICAgaWYgKHBlcmNlbnQudGVzdCh0cmFuc2xhdGUpKSB7XG4gICAgICAgIHRyYW5zbGF0ZSA9IHBhcnNlRmxvYXQodHJhbnNsYXRlKTtcbiAgICAgICAgdmFyIHJlbGF0aXZlUHJvZ3Jlc3MgPSBtaXgoc291cmNlQXhpcy5taW4sIHNvdXJjZUF4aXMubWF4LCB0cmFuc2xhdGUgLyAxMDApO1xuICAgICAgICB0cmFuc2xhdGUgPSByZWxhdGl2ZVByb2dyZXNzIC0gc291cmNlQXhpcy5taW47XG4gICAgfVxuICAgIGlmICh0eXBlb2YgdHJhbnNsYXRlICE9PSBcIm51bWJlclwiKVxuICAgICAgICByZXR1cm47XG4gICAgdmFyIG9yaWdpblBvaW50ID0gbWl4KG9yaWdpbkF4aXMubWluLCBvcmlnaW5BeGlzLm1heCwgb3JpZ2luKTtcbiAgICBpZiAoYXhpcyA9PT0gb3JpZ2luQXhpcylcbiAgICAgICAgb3JpZ2luUG9pbnQgLT0gdHJhbnNsYXRlO1xuICAgIGF4aXMubWluID0gcmVtb3ZlUG9pbnREZWx0YShheGlzLm1pbiwgdHJhbnNsYXRlLCBzY2FsZSwgb3JpZ2luUG9pbnQsIGJveFNjYWxlKTtcbiAgICBheGlzLm1heCA9IHJlbW92ZVBvaW50RGVsdGEoYXhpcy5tYXgsIHRyYW5zbGF0ZSwgc2NhbGUsIG9yaWdpblBvaW50LCBib3hTY2FsZSk7XG59XG4vKipcbiAqIFJlbW92ZSBhIHRyYW5zZm9ybXMgZnJvbSBhbiBheGlzLiBUaGlzIGlzIGVzc2VudGlhbGx5IHRoZSBzdGVwcyBvZiBhcHBseUF4aXNUcmFuc2Zvcm1zIGluIHJldmVyc2VcbiAqIGFuZCBhY3RzIGFzIGEgYnJpZGdlIGJldHdlZW4gbW90aW9uIHZhbHVlcyBhbmQgcmVtb3ZlQXhpc0RlbHRhXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUF4aXNUcmFuc2Zvcm1zKGF4aXMsIHRyYW5zZm9ybXMsIF9hLCBvcmlnaW4sIHNvdXJjZUF4aXMpIHtcbiAgICB2YXIgX2IgPSBfX3JlYWQoX2EsIDMpLCBrZXkgPSBfYlswXSwgc2NhbGVLZXkgPSBfYlsxXSwgb3JpZ2luS2V5ID0gX2JbMl07XG4gICAgcmVtb3ZlQXhpc0RlbHRhKGF4aXMsIHRyYW5zZm9ybXNba2V5XSwgdHJhbnNmb3Jtc1tzY2FsZUtleV0sIHRyYW5zZm9ybXNbb3JpZ2luS2V5XSwgdHJhbnNmb3Jtcy5zY2FsZSwgb3JpZ2luLCBzb3VyY2VBeGlzKTtcbn1cbi8qKlxuICogVGhlIG5hbWVzIG9mIHRoZSBtb3Rpb24gdmFsdWVzIHdlIHdhbnQgdG8gYXBwbHkgYXMgdHJhbnNsYXRpb24sIHNjYWxlIGFuZCBvcmlnaW4uXG4gKi9cbnZhciB4S2V5cyA9IFtcInhcIiwgXCJzY2FsZVhcIiwgXCJvcmlnaW5YXCJdO1xudmFyIHlLZXlzID0gW1wieVwiLCBcInNjYWxlWVwiLCBcIm9yaWdpbllcIl07XG4vKipcbiAqIFJlbW92ZSBhIHRyYW5zZm9ybXMgZnJvbSBhbiBib3guIFRoaXMgaXMgZXNzZW50aWFsbHkgdGhlIHN0ZXBzIG9mIGFwcGx5QXhpc0JveCBpbiByZXZlcnNlXG4gKiBhbmQgYWN0cyBhcyBhIGJyaWRnZSBiZXR3ZWVuIG1vdGlvbiB2YWx1ZXMgYW5kIHJlbW92ZUF4aXNEZWx0YVxuICovXG5mdW5jdGlvbiByZW1vdmVCb3hUcmFuc2Zvcm1zKGJveCwgdHJhbnNmb3Jtcywgb3JpZ2luQm94LCBzb3VyY2VCb3gpIHtcbiAgICByZW1vdmVBeGlzVHJhbnNmb3Jtcyhib3gueCwgdHJhbnNmb3JtcywgeEtleXMsIG9yaWdpbkJveCA9PT0gbnVsbCB8fCBvcmlnaW5Cb3ggPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9yaWdpbkJveC54LCBzb3VyY2VCb3ggPT09IG51bGwgfHwgc291cmNlQm94ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzb3VyY2VCb3gueCk7XG4gICAgcmVtb3ZlQXhpc1RyYW5zZm9ybXMoYm94LnksIHRyYW5zZm9ybXMsIHlLZXlzLCBvcmlnaW5Cb3ggPT09IG51bGwgfHwgb3JpZ2luQm94ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcmlnaW5Cb3gueSwgc291cmNlQm94ID09PSBudWxsIHx8IHNvdXJjZUJveCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc291cmNlQm94LnkpO1xufVxuXG5leHBvcnQgeyByZW1vdmVBeGlzRGVsdGEsIHJlbW92ZUF4aXNUcmFuc2Zvcm1zLCByZW1vdmVCb3hUcmFuc2Zvcm1zLCByZW1vdmVQb2ludERlbHRhIH07XG4iLCJmdW5jdGlvbiBpc0F4aXNEZWx0YVplcm8oZGVsdGEpIHtcbiAgICByZXR1cm4gZGVsdGEudHJhbnNsYXRlID09PSAwICYmIGRlbHRhLnNjYWxlID09PSAxO1xufVxuZnVuY3Rpb24gaXNEZWx0YVplcm8oZGVsdGEpIHtcbiAgICByZXR1cm4gaXNBeGlzRGVsdGFaZXJvKGRlbHRhLngpICYmIGlzQXhpc0RlbHRhWmVybyhkZWx0YS55KTtcbn1cbmZ1bmN0aW9uIGJveEVxdWFscyhhLCBiKSB7XG4gICAgcmV0dXJuIChhLngubWluID09PSBiLngubWluICYmXG4gICAgICAgIGEueC5tYXggPT09IGIueC5tYXggJiZcbiAgICAgICAgYS55Lm1pbiA9PT0gYi55Lm1pbiAmJlxuICAgICAgICBhLnkubWF4ID09PSBiLnkubWF4KTtcbn1cblxuZXhwb3J0IHsgYm94RXF1YWxzLCBpc0RlbHRhWmVybyB9O1xuIiwiaW1wb3J0IHsgYWRkVW5pcXVlSXRlbSwgcmVtb3ZlSXRlbSB9IGZyb20gJy4uLy4uL3V0aWxzL2FycmF5Lm1qcyc7XG5cbnZhciBOb2RlU3RhY2sgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gTm9kZVN0YWNrKCkge1xuICAgICAgICB0aGlzLm1lbWJlcnMgPSBbXTtcbiAgICB9XG4gICAgTm9kZVN0YWNrLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICBhZGRVbmlxdWVJdGVtKHRoaXMubWVtYmVycywgbm9kZSk7XG4gICAgICAgIG5vZGUuc2NoZWR1bGVSZW5kZXIoKTtcbiAgICB9O1xuICAgIE5vZGVTdGFjay5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKG5vZGUpIHtcbiAgICAgICAgcmVtb3ZlSXRlbSh0aGlzLm1lbWJlcnMsIG5vZGUpO1xuICAgICAgICBpZiAobm9kZSA9PT0gdGhpcy5wcmV2TGVhZCkge1xuICAgICAgICAgICAgdGhpcy5wcmV2TGVhZCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAobm9kZSA9PT0gdGhpcy5sZWFkKSB7XG4gICAgICAgICAgICB2YXIgcHJldkxlYWQgPSB0aGlzLm1lbWJlcnNbdGhpcy5tZW1iZXJzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgaWYgKHByZXZMZWFkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9tb3RlKHByZXZMZWFkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgTm9kZVN0YWNrLnByb3RvdHlwZS5yZWxlZ2F0ZSA9IGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgIHZhciBpbmRleE9mTm9kZSA9IHRoaXMubWVtYmVycy5maW5kSW5kZXgoZnVuY3Rpb24gKG1lbWJlcikgeyByZXR1cm4gbm9kZSA9PT0gbWVtYmVyOyB9KTtcbiAgICAgICAgaWYgKGluZGV4T2ZOb2RlID09PSAwKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogRmluZCB0aGUgbmV4dCBwcm9qZWN0aW9uIG5vZGUgdGhhdCBpcyBwcmVzZW50XG4gICAgICAgICAqL1xuICAgICAgICB2YXIgcHJldkxlYWQ7XG4gICAgICAgIGZvciAodmFyIGkgPSBpbmRleE9mTm9kZTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIHZhciBtZW1iZXIgPSB0aGlzLm1lbWJlcnNbaV07XG4gICAgICAgICAgICBpZiAobWVtYmVyLmlzUHJlc2VudCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBwcmV2TGVhZCA9IG1lbWJlcjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJldkxlYWQpIHtcbiAgICAgICAgICAgIHRoaXMucHJvbW90ZShwcmV2TGVhZCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgTm9kZVN0YWNrLnByb3RvdHlwZS5wcm9tb3RlID0gZnVuY3Rpb24gKG5vZGUsIHByZXNlcnZlRm9sbG93T3BhY2l0eSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBwcmV2TGVhZCA9IHRoaXMubGVhZDtcbiAgICAgICAgaWYgKG5vZGUgPT09IHByZXZMZWFkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLnByZXZMZWFkID0gcHJldkxlYWQ7XG4gICAgICAgIHRoaXMubGVhZCA9IG5vZGU7XG4gICAgICAgIG5vZGUuc2hvdygpO1xuICAgICAgICBpZiAocHJldkxlYWQpIHtcbiAgICAgICAgICAgIHByZXZMZWFkLmluc3RhbmNlICYmIHByZXZMZWFkLnNjaGVkdWxlUmVuZGVyKCk7XG4gICAgICAgICAgICBub2RlLnNjaGVkdWxlUmVuZGVyKCk7XG4gICAgICAgICAgICBub2RlLnJlc3VtZUZyb20gPSBwcmV2TGVhZDtcbiAgICAgICAgICAgIGlmIChwcmVzZXJ2ZUZvbGxvd09wYWNpdHkpIHtcbiAgICAgICAgICAgICAgICBub2RlLnJlc3VtZUZyb20ucHJlc2VydmVPcGFjaXR5ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwcmV2TGVhZC5zbmFwc2hvdCkge1xuICAgICAgICAgICAgICAgIG5vZGUuc25hcHNob3QgPSBwcmV2TGVhZC5zbmFwc2hvdDtcbiAgICAgICAgICAgICAgICBub2RlLnNuYXBzaG90LmxhdGVzdFZhbHVlcyA9XG4gICAgICAgICAgICAgICAgICAgIHByZXZMZWFkLmFuaW1hdGlvblZhbHVlcyB8fCBwcmV2TGVhZC5sYXRlc3RWYWx1ZXM7XG4gICAgICAgICAgICAgICAgbm9kZS5zbmFwc2hvdC5pc1NoYXJlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoKF9hID0gbm9kZS5yb290KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaXNVcGRhdGluZykge1xuICAgICAgICAgICAgICAgIG5vZGUuaXNMYXlvdXREaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgY3Jvc3NmYWRlID0gbm9kZS5vcHRpb25zLmNyb3NzZmFkZTtcbiAgICAgICAgICAgIGlmIChjcm9zc2ZhZGUgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgcHJldkxlYWQuaGlkZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBUT0RPOlxuICAgICAgICAgICAgICogICAtIFRlc3QgYm9yZGVyIHJhZGl1cyB3aGVuIHByZXZpb3VzIG5vZGUgd2FzIGRlbGV0ZWRcbiAgICAgICAgICAgICAqICAgLSBib3hTaGFkb3cgbWl4aW5nXG4gICAgICAgICAgICAgKiAgIC0gU2hhcmVkIGJldHdlZW4gZWxlbWVudCBBIGluIHNjcm9sbGVkIGNvbnRhaW5lciBhbmQgZWxlbWVudCBCIChzY3JvbGwgc3RheXMgdGhlIHNhbWUgb3IgY2hhbmdlcylcbiAgICAgICAgICAgICAqICAgLSBTaGFyZWQgYmV0d2VlbiBlbGVtZW50IEEgaW4gdHJhbnNmb3JtZWQgY29udGFpbmVyIGFuZCBlbGVtZW50IEIgKHRyYW5zZm9ybSBzdGF5cyB0aGUgc2FtZSBvciBjaGFuZ2VzKVxuICAgICAgICAgICAgICogICAtIFNoYXJlZCBiZXR3ZWVuIGVsZW1lbnQgQSBpbiBzY3JvbGxlZCBwYWdlIGFuZCBlbGVtZW50IEIgKHNjcm9sbCBzdGF5cyB0aGUgc2FtZSBvciBjaGFuZ2VzKVxuICAgICAgICAgICAgICogLS0tXG4gICAgICAgICAgICAgKiAgIC0gQ3Jvc3NmYWRlIG9wYWNpdHkgb2Ygcm9vdCBub2Rlc1xuICAgICAgICAgICAgICogICAtIGxheW91dElkIGNoYW5nZXMgYWZ0ZXIgYW5pbWF0aW9uXG4gICAgICAgICAgICAgKiAgIC0gbGF5b3V0SWQgY2hhbmdlcyBtaWQgYW5pbWF0aW9uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgfVxuICAgIH07XG4gICAgTm9kZVN0YWNrLnByb3RvdHlwZS5leGl0QW5pbWF0aW9uQ29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubWVtYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lO1xuICAgICAgICAgICAgKF9iID0gKF9hID0gbm9kZS5vcHRpb25zKS5vbkV4aXRDb21wbGV0ZSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNhbGwoX2EpO1xuICAgICAgICAgICAgKF9lID0gKF9jID0gbm9kZS5yZXN1bWluZ0Zyb20pID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiAoX2QgPSBfYy5vcHRpb25zKS5vbkV4aXRDb21wbGV0ZSkgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lLmNhbGwoX2QpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIE5vZGVTdGFjay5wcm90b3R5cGUuc2NoZWR1bGVSZW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHRoaXMubWVtYmVycy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICBub2RlLmluc3RhbmNlICYmIG5vZGUuc2NoZWR1bGVSZW5kZXIoZmFsc2UpO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENsZWFyIGFueSBsZWFkcyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIHRoaXMgcmVuZGVyIHRvIHByZXZlbnQgdGhlbSBmcm9tIGJlaW5nXG4gICAgICogdXNlZCBpbiBmdXR1cmUgYW5pbWF0aW9ucyBhbmQgdG8gcHJldmVudCBtZW1vcnkgbGVha3NcbiAgICAgKi9cbiAgICBOb2RlU3RhY2sucHJvdG90eXBlLnJlbW92ZUxlYWRTbmFwc2hvdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMubGVhZCAmJiB0aGlzLmxlYWQuc25hcHNob3QpIHtcbiAgICAgICAgICAgIHRoaXMubGVhZC5zbmFwc2hvdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE5vZGVTdGFjaztcbn0oKSk7XG5cbmV4cG9ydCB7IE5vZGVTdGFjayB9O1xuIiwidmFyIGlkZW50aXR5UHJvamVjdGlvbiA9IFwidHJhbnNsYXRlM2QoMHB4LCAwcHgsIDApIHNjYWxlKDEsIDEpIHNjYWxlKDEsIDEpXCI7XG5mdW5jdGlvbiBidWlsZFByb2plY3Rpb25UcmFuc2Zvcm0oZGVsdGEsIHRyZWVTY2FsZSwgbGF0ZXN0VHJhbnNmb3JtKSB7XG4gICAgLyoqXG4gICAgICogVGhlIHRyYW5zbGF0aW9ucyB3ZSB1c2UgdG8gY2FsY3VsYXRlIGFyZSBhbHdheXMgcmVsYXRpdmUgdG8gdGhlIHZpZXdwb3J0IGNvb3JkaW5hdGUgc3BhY2UuXG4gICAgICogQnV0IHdoZW4gd2UgYXBwbHkgc2NhbGVzLCB3ZSBhbHNvIHNjYWxlIHRoZSBjb29yZGluYXRlIHNwYWNlIG9mIGFuIGVsZW1lbnQgYW5kIGl0cyBjaGlsZHJlbi5cbiAgICAgKiBGb3IgaW5zdGFuY2UgaWYgd2UgaGF2ZSBhIHRyZWVTY2FsZSAodGhlIGN1bG1pbmF0aW9uIG9mIGFsbCBwYXJlbnQgc2NhbGVzKSBvZiAwLjUgYW5kIHdlIG5lZWRcbiAgICAgKiB0byBtb3ZlIGFuIGVsZW1lbnQgMTAwIHBpeGVscywgd2UgYWN0dWFsbHkgbmVlZCB0byBtb3ZlIGl0IDIwMCBpbiB3aXRoaW4gdGhhdCBzY2FsZWQgc3BhY2UuXG4gICAgICovXG4gICAgdmFyIHhUcmFuc2xhdGUgPSBkZWx0YS54LnRyYW5zbGF0ZSAvIHRyZWVTY2FsZS54O1xuICAgIHZhciB5VHJhbnNsYXRlID0gZGVsdGEueS50cmFuc2xhdGUgLyB0cmVlU2NhbGUueTtcbiAgICB2YXIgdHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUzZChcIi5jb25jYXQoeFRyYW5zbGF0ZSwgXCJweCwgXCIpLmNvbmNhdCh5VHJhbnNsYXRlLCBcInB4LCAwKSBcIik7XG4gICAgLyoqXG4gICAgICogQXBwbHkgc2NhbGUgY29ycmVjdGlvbiBmb3IgdGhlIHRyZWUgdHJhbnNmb3JtLlxuICAgICAqIFRoaXMgd2lsbCBhcHBseSBzY2FsZSB0byB0aGUgc2NyZWVuLW9yaWVudGF0ZWQgYXhlcy5cbiAgICAgKi9cbiAgICB0cmFuc2Zvcm0gKz0gXCJzY2FsZShcIi5jb25jYXQoMSAvIHRyZWVTY2FsZS54LCBcIiwgXCIpLmNvbmNhdCgxIC8gdHJlZVNjYWxlLnksIFwiKSBcIik7XG4gICAgaWYgKGxhdGVzdFRyYW5zZm9ybSkge1xuICAgICAgICB2YXIgcm90YXRlID0gbGF0ZXN0VHJhbnNmb3JtLnJvdGF0ZSwgcm90YXRlWCA9IGxhdGVzdFRyYW5zZm9ybS5yb3RhdGVYLCByb3RhdGVZID0gbGF0ZXN0VHJhbnNmb3JtLnJvdGF0ZVk7XG4gICAgICAgIGlmIChyb3RhdGUpXG4gICAgICAgICAgICB0cmFuc2Zvcm0gKz0gXCJyb3RhdGUoXCIuY29uY2F0KHJvdGF0ZSwgXCJkZWcpIFwiKTtcbiAgICAgICAgaWYgKHJvdGF0ZVgpXG4gICAgICAgICAgICB0cmFuc2Zvcm0gKz0gXCJyb3RhdGVYKFwiLmNvbmNhdChyb3RhdGVYLCBcImRlZykgXCIpO1xuICAgICAgICBpZiAocm90YXRlWSlcbiAgICAgICAgICAgIHRyYW5zZm9ybSArPSBcInJvdGF0ZVkoXCIuY29uY2F0KHJvdGF0ZVksIFwiZGVnKSBcIik7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEFwcGx5IHNjYWxlIHRvIG1hdGNoIHRoZSBzaXplIG9mIHRoZSBlbGVtZW50IHRvIHRoZSBzaXplIHdlIHdhbnQgaXQuXG4gICAgICogVGhpcyB3aWxsIGFwcGx5IHNjYWxlIHRvIHRoZSBlbGVtZW50LW9yaWVudGF0ZWQgYXhlcy5cbiAgICAgKi9cbiAgICB2YXIgZWxlbWVudFNjYWxlWCA9IGRlbHRhLnguc2NhbGUgKiB0cmVlU2NhbGUueDtcbiAgICB2YXIgZWxlbWVudFNjYWxlWSA9IGRlbHRhLnkuc2NhbGUgKiB0cmVlU2NhbGUueTtcbiAgICB0cmFuc2Zvcm0gKz0gXCJzY2FsZShcIi5jb25jYXQoZWxlbWVudFNjYWxlWCwgXCIsIFwiKS5jb25jYXQoZWxlbWVudFNjYWxlWSwgXCIpXCIpO1xuICAgIHJldHVybiB0cmFuc2Zvcm0gPT09IGlkZW50aXR5UHJvamVjdGlvbiA/IFwibm9uZVwiIDogdHJhbnNmb3JtO1xufVxuXG5leHBvcnQgeyBidWlsZFByb2plY3Rpb25UcmFuc2Zvcm0sIGlkZW50aXR5UHJvamVjdGlvbiB9O1xuIiwidmFyIGNvbXBhcmVCeURlcHRoID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gYS5kZXB0aCAtIGIuZGVwdGg7XG59O1xuXG5leHBvcnQgeyBjb21wYXJlQnlEZXB0aCB9O1xuIiwiaW1wb3J0IHsgYWRkVW5pcXVlSXRlbSwgcmVtb3ZlSXRlbSB9IGZyb20gJy4uLy4uL3V0aWxzL2FycmF5Lm1qcyc7XG5pbXBvcnQgeyBjb21wYXJlQnlEZXB0aCB9IGZyb20gJy4vY29tcGFyZS1ieS1kZXB0aC5tanMnO1xuXG52YXIgRmxhdFRyZWUgPSAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgZnVuY3Rpb24gRmxhdFRyZWUoKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbXTtcbiAgICAgICAgdGhpcy5pc0RpcnR5ID0gZmFsc2U7XG4gICAgfVxuICAgIEZsYXRUcmVlLnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAgICAgYWRkVW5pcXVlSXRlbSh0aGlzLmNoaWxkcmVuLCBjaGlsZCk7XG4gICAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWU7XG4gICAgfTtcbiAgICBGbGF0VHJlZS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgICAgIHJlbW92ZUl0ZW0odGhpcy5jaGlsZHJlbiwgY2hpbGQpO1xuICAgICAgICB0aGlzLmlzRGlydHkgPSB0cnVlO1xuICAgIH07XG4gICAgRmxhdFRyZWUucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5pc0RpcnR5ICYmIHRoaXMuY2hpbGRyZW4uc29ydChjb21wYXJlQnlEZXB0aCk7XG4gICAgICAgIHRoaXMuaXNEaXJ0eSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNoaWxkcmVuLmZvckVhY2goY2FsbGJhY2spO1xuICAgIH07XG4gICAgcmV0dXJuIEZsYXRUcmVlO1xufSgpKTtcblxuZXhwb3J0IHsgRmxhdFRyZWUgfTtcbiIsImltcG9ydCB7IF9fc3ByZWFkQXJyYXksIF9fcmVhZCwgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgc3luYywgeyBjYW5jZWxTeW5jLCBmbHVzaFN5bmMgfSBmcm9tICdmcmFtZXN5bmMnO1xuaW1wb3J0IHsgbWl4IH0gZnJvbSAncG9wbW90aW9uJztcbmltcG9ydCB7IGFuaW1hdGUgfSBmcm9tICcuLi8uLi9hbmltYXRpb24vYW5pbWF0ZS5tanMnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uTWFuYWdlciB9IGZyb20gJy4uLy4uL3V0aWxzL3N1YnNjcmlwdGlvbi1tYW5hZ2VyLm1qcyc7XG5pbXBvcnQgeyBtaXhWYWx1ZXMgfSBmcm9tICcuLi9hbmltYXRpb24vbWl4LXZhbHVlcy5tanMnO1xuaW1wb3J0IHsgY29weUJveEludG8gfSBmcm9tICcuLi9nZW9tZXRyeS9jb3B5Lm1qcyc7XG5pbXBvcnQgeyB0cmFuc2xhdGVBeGlzLCB0cmFuc2Zvcm1Cb3gsIGFwcGx5Qm94RGVsdGEsIGFwcGx5VHJlZURlbHRhcyB9IGZyb20gJy4uL2dlb21ldHJ5L2RlbHRhLWFwcGx5Lm1qcyc7XG5pbXBvcnQgeyBjYWxjUmVsYXRpdmVQb3NpdGlvbiwgY2FsY1JlbGF0aXZlQm94LCBjYWxjQm94RGVsdGEsIGNhbGNMZW5ndGggfSBmcm9tICcuLi9nZW9tZXRyeS9kZWx0YS1jYWxjLm1qcyc7XG5pbXBvcnQgeyByZW1vdmVCb3hUcmFuc2Zvcm1zIH0gZnJvbSAnLi4vZ2VvbWV0cnkvZGVsdGEtcmVtb3ZlLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVCb3gsIGNyZWF0ZURlbHRhIH0gZnJvbSAnLi4vZ2VvbWV0cnkvbW9kZWxzLm1qcyc7XG5pbXBvcnQgeyBnZXRWYWx1ZVRyYW5zaXRpb24gfSBmcm9tICcuLi8uLi9hbmltYXRpb24vdXRpbHMvdHJhbnNpdGlvbnMubWpzJztcbmltcG9ydCB7IGJveEVxdWFscywgaXNEZWx0YVplcm8gfSBmcm9tICcuLi9nZW9tZXRyeS91dGlscy5tanMnO1xuaW1wb3J0IHsgTm9kZVN0YWNrIH0gZnJvbSAnLi4vc2hhcmVkL3N0YWNrLm1qcyc7XG5pbXBvcnQgeyBzY2FsZUNvcnJlY3RvcnMgfSBmcm9tICcuLi9zdHlsZXMvc2NhbGUtY29ycmVjdGlvbi5tanMnO1xuaW1wb3J0IHsgYnVpbGRQcm9qZWN0aW9uVHJhbnNmb3JtIH0gZnJvbSAnLi4vc3R5bGVzL3RyYW5zZm9ybS5tanMnO1xuaW1wb3J0IHsgZWFjaEF4aXMgfSBmcm9tICcuLi91dGlscy9lYWNoLWF4aXMubWpzJztcbmltcG9ydCB7IGhhc1RyYW5zZm9ybSwgaGFzU2NhbGUgfSBmcm9tICcuLi91dGlscy9oYXMtdHJhbnNmb3JtLm1qcyc7XG5pbXBvcnQgeyB0cmFuc2Zvcm1BeGVzIH0gZnJvbSAnLi4vLi4vcmVuZGVyL2h0bWwvdXRpbHMvdHJhbnNmb3JtLm1qcyc7XG5pbXBvcnQgeyBGbGF0VHJlZSB9IGZyb20gJy4uLy4uL3JlbmRlci91dGlscy9mbGF0LXRyZWUubWpzJztcbmltcG9ydCB7IHJlc29sdmVNb3Rpb25WYWx1ZSB9IGZyb20gJy4uLy4uL3ZhbHVlL3V0aWxzL3Jlc29sdmUtbW90aW9uLXZhbHVlLm1qcyc7XG5pbXBvcnQgeyBnbG9iYWxQcm9qZWN0aW9uU3RhdGUgfSBmcm9tICcuL3N0YXRlLm1qcyc7XG5cbi8qKlxuICogV2UgdXNlIDEwMDAgYXMgdGhlIGFuaW1hdGlvbiB0YXJnZXQgYXMgMC0xMDAwIG1hcHMgYmV0dGVyIHRvIHBpeGVscyB0aGFuIDAtMVxuICogd2hpY2ggaGFzIGEgbm90aWNlYWJsZSBkaWZmZXJlbmNlIGluIHNwcmluZyBhbmltYXRpb25zXG4gKi9cbnZhciBhbmltYXRpb25UYXJnZXQgPSAxMDAwO1xuZnVuY3Rpb24gY3JlYXRlUHJvamVjdGlvbk5vZGUoX2EpIHtcbiAgICB2YXIgYXR0YWNoUmVzaXplTGlzdGVuZXIgPSBfYS5hdHRhY2hSZXNpemVMaXN0ZW5lciwgZGVmYXVsdFBhcmVudCA9IF9hLmRlZmF1bHRQYXJlbnQsIG1lYXN1cmVTY3JvbGwgPSBfYS5tZWFzdXJlU2Nyb2xsLCBjaGVja0lzU2Nyb2xsUm9vdCA9IF9hLmNoZWNrSXNTY3JvbGxSb290LCByZXNldFRyYW5zZm9ybSA9IF9hLnJlc2V0VHJhbnNmb3JtO1xuICAgIHJldHVybiAvKiogQGNsYXNzICovIChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGZ1bmN0aW9uIFByb2plY3Rpb25Ob2RlKGlkLCBsYXRlc3RWYWx1ZXMsIHBhcmVudCkge1xuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgICAgIGlmIChsYXRlc3RWYWx1ZXMgPT09IHZvaWQgMCkgeyBsYXRlc3RWYWx1ZXMgPSB7fTsgfVxuICAgICAgICAgICAgaWYgKHBhcmVudCA9PT0gdm9pZCAwKSB7IHBhcmVudCA9IGRlZmF1bHRQYXJlbnQgPT09IG51bGwgfHwgZGVmYXVsdFBhcmVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVmYXVsdFBhcmVudCgpOyB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEEgU2V0IGNvbnRhaW5pbmcgYWxsIHRoaXMgY29tcG9uZW50J3MgY2hpbGRyZW4uIFRoaXMgaXMgdXNlZCB0byBpdGVyYXRlXG4gICAgICAgICAgICAgKiB0aHJvdWdoIHRoZSBjaGlsZHJlbi5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBUT0RPOiBUaGlzIGNvdWxkIGJlIGZhc3RlciB0byBpdGVyYXRlIGFzIGEgZmxhdCBhcnJheSBzdG9yZWQgb24gdGhlIHJvb3Qgbm9kZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5jaGlsZHJlbiA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogT3B0aW9ucyBmb3IgdGhlIG5vZGUuIFdlIHVzZSB0aGlzIHRvIGNvbmZpZ3VyZSB3aGF0IGtpbmQgb2YgbGF5b3V0IGFuaW1hdGlvbnNcbiAgICAgICAgICAgICAqIHdlIHNob3VsZCBwZXJmb3JtIChpZiBhbnkpLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2UgdXNlIHRoaXMgdG8gZGV0ZWN0IHdoZW4gaXRzIHNhZmUgdG8gc2h1dCBkb3duIHBhcnQgb2YgYSBwcm9qZWN0aW9uIHRyZWUuXG4gICAgICAgICAgICAgKiBXZSBoYXZlIHRvIGtlZXAgcHJvamVjdGluZyBjaGlsZHJlbiBmb3Igc2NhbGUgY29ycmVjdGlvbiBhbmQgcmVsYXRpdmUgcHJvamVjdGlvblxuICAgICAgICAgICAgICogdW50aWwgYWxsIHRoZWlyIHBhcmVudHMgc3RvcCBwZXJmb3JtaW5nIGxheW91dCBhbmltYXRpb25zLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLmlzVHJlZUFuaW1hdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5pc0FuaW1hdGlvbkJsb2NrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogRmxhZyB0byB0cnVlIGlmIHdlIHRoaW5rIHRoaXMgbGF5b3V0IGhhcyBiZWVuIGNoYW5nZWQuIFdlIGNhbid0IGFsd2F5cyBrbm93IHRoaXMsXG4gICAgICAgICAgICAgKiBjdXJyZW50bHkgd2Ugc2V0IGl0IHRvIHRydWUgZXZlcnkgdGltZSBhIGNvbXBvbmVudCByZW5kZXJzLCBvciBpZiBpdCBoYXMgYSBsYXlvdXREZXBlbmRlbmN5XG4gICAgICAgICAgICAgKiBpZiB0aGF0IGhhcyBjaGFuZ2VkIGJldHdlZW4gcmVuZGVycy4gQWRkaXRpb25hbGx5LCBjb21wb25lbnRzIGNhbiBiZSBncm91cGVkIGJ5IExheW91dEdyb3VwXG4gICAgICAgICAgICAgKiBhbmQgaWYgb25lIG5vZGUgaXMgZGlydGllZCwgdGhleSBhbGwgYXJlLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLmlzTGF5b3V0RGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQmxvY2sgbGF5b3V0IHVwZGF0ZXMgZm9yIGluc3RhbnQgbGF5b3V0IHRyYW5zaXRpb25zIHRocm91Z2hvdXQgdGhlIHRyZWUuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMudXBkYXRlTWFudWFsbHlCbG9ja2VkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUJsb2NrZWRCeVJlc2l6ZSA9IGZhbHNlO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBTZXQgdG8gdHJ1ZSBiZXR3ZWVuIHRoZSBzdGFydCBvZiB0aGUgZmlyc3QgYHdpbGxVcGRhdGVgIGNhbGwgYW5kIHRoZSBlbmQgb2YgdGhlIGBkaWRVcGRhdGVgXG4gICAgICAgICAgICAgKiBjYWxsLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLmlzVXBkYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogSWYgdGhpcyBpcyBhbiBTVkcgZWxlbWVudCB3ZSBjdXJyZW50bHkgZGlzYWJsZSBwcm9qZWN0aW9uIHRyYW5zZm9ybXNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5pc1NWRyA9IGZhbHNlO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBGbGFnIHRvIHRydWUgKGR1cmluZyBwcm9tb3Rpb24pIGlmIGEgbm9kZSBkb2luZyBhbiBpbnN0YW50IGxheW91dCB0cmFuc2l0aW9uIG5lZWRzIHRvIHJlc2V0XG4gICAgICAgICAgICAgKiBpdHMgcHJvamVjdGlvbiBzdHlsZXMuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMubmVlZHNSZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBGbGFncyB3aGV0aGVyIHRoaXMgbm9kZSBzaG91bGQgaGF2ZSBpdHMgdHJhbnNmb3JtIHJlc2V0IHByaW9yIHRvIG1lYXN1cmluZy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5zaG91bGRSZXNldFRyYW5zZm9ybSA9IGZhbHNlO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBBbiBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBjYWxjdWxhdGVkIGNvbnRleHR1YWwvYWNjdW11bGF0ZWQvdHJlZSBzY2FsZS5cbiAgICAgICAgICAgICAqIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHNjYWxlIGNhbGN1bGNhdGVkIHByb2plY3Rpb24gdHJhbnNmb3JtcywgYXMgdGhlc2UgYXJlXG4gICAgICAgICAgICAgKiBjYWxjdWxhdGVkIGluIHNjcmVlbi1zcGFjZSBidXQgbmVlZCB0byBiZSBzY2FsZWQgZm9yIGVsZW1lbnRzIHRvIGFjdHVhbGx5XG4gICAgICAgICAgICAgKiBtYWtlIGl0IHRvIHRoZWlyIGNhbGN1bGF0ZWQgZGVzdGluYXRpb25zLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFRPRE86IExhenktaW5pdFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLnRyZWVTY2FsZSA9IHsgeDogMSwgeTogMSB9O1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLmV2ZW50SGFuZGxlcnMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICAvLyBOb3RlOiBDdXJyZW50bHkgb25seSBydW5uaW5nIG9uIHJvb3Qgbm9kZVxuICAgICAgICAgICAgdGhpcy5wb3RlbnRpYWxOb2RlcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tVcGRhdGVGYWlsZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmlzVXBkYXRpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuaXNVcGRhdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5jbGVhckFsbFNuYXBzaG90cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVByb2plY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMubm9kZXMuZm9yRWFjaChyZXNvbHZlVGFyZ2V0RGVsdGEpO1xuICAgICAgICAgICAgICAgIF90aGlzLm5vZGVzLmZvckVhY2goY2FsY1Byb2plY3Rpb24pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMuaGFzUHJvamVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmFuaW1hdGlvblByb2dyZXNzID0gMDtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogU2hhcmVkIGxheW91dFxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICAvLyBUT0RPIE9ubHkgcnVubmluZyBvbiByb290IG5vZGVcbiAgICAgICAgICAgIHRoaXMuc2hhcmVkTm9kZXMgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICB0aGlzLmlkID0gaWQ7XG4gICAgICAgICAgICB0aGlzLmxhdGVzdFZhbHVlcyA9IGxhdGVzdFZhbHVlcztcbiAgICAgICAgICAgIHRoaXMucm9vdCA9IHBhcmVudCA/IHBhcmVudC5yb290IHx8IHBhcmVudCA6IHRoaXM7XG4gICAgICAgICAgICB0aGlzLnBhdGggPSBwYXJlbnQgPyBfX3NwcmVhZEFycmF5KF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChwYXJlbnQucGF0aCksIGZhbHNlKSwgW3BhcmVudF0sIGZhbHNlKSA6IFtdO1xuICAgICAgICAgICAgdGhpcy5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgICAgICB0aGlzLmRlcHRoID0gcGFyZW50ID8gcGFyZW50LmRlcHRoICsgMSA6IDA7XG4gICAgICAgICAgICBpZCAmJiB0aGlzLnJvb3QucmVnaXN0ZXJQb3RlbnRpYWxOb2RlKGlkLCB0aGlzKTtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXRoW2ldLnNob3VsZFJlc2V0VHJhbnNmb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnJvb3QgPT09IHRoaXMpXG4gICAgICAgICAgICAgICAgdGhpcy5ub2RlcyA9IG5ldyBGbGF0VHJlZSgpO1xuICAgICAgICB9XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyID0gZnVuY3Rpb24gKG5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5ldmVudEhhbmRsZXJzLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRIYW5kbGVycy5zZXQobmFtZSwgbmV3IFN1YnNjcmlwdGlvbk1hbmFnZXIoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5ldmVudEhhbmRsZXJzLmdldChuYW1lKS5hZGQoaGFuZGxlcik7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5ub3RpZnlMaXN0ZW5lcnMgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgdmFyIGFyZ3MgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgYXJnc1tfaSAtIDFdID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBzdWJzY3JpcHRpb25NYW5hZ2VyID0gdGhpcy5ldmVudEhhbmRsZXJzLmdldChuYW1lKTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbk1hbmFnZXIgPT09IG51bGwgfHwgc3Vic2NyaXB0aW9uTWFuYWdlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogc3Vic2NyaXB0aW9uTWFuYWdlci5ub3RpZnkuYXBwbHkoc3Vic2NyaXB0aW9uTWFuYWdlciwgX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGFyZ3MpLCBmYWxzZSkpO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuaGFzTGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmV2ZW50SGFuZGxlcnMuaGFzKG5hbWUpO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUucmVnaXN0ZXJQb3RlbnRpYWxOb2RlID0gZnVuY3Rpb24gKGlkLCBub2RlKSB7XG4gICAgICAgICAgICB0aGlzLnBvdGVudGlhbE5vZGVzLnNldChpZCwgbm9kZSk7XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBMaWZlY3ljbGVzXG4gICAgICAgICAqL1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUubW91bnQgPSBmdW5jdGlvbiAoaW5zdGFuY2UsIGlzTGF5b3V0RGlydHkpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoaXNMYXlvdXREaXJ0eSA9PT0gdm9pZCAwKSB7IGlzTGF5b3V0RGlydHkgPSBmYWxzZTsgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgdGhpcy5pc1NWRyA9XG4gICAgICAgICAgICAgICAgaW5zdGFuY2UgaW5zdGFuY2VvZiBTVkdFbGVtZW50ICYmIGluc3RhbmNlLnRhZ05hbWUgIT09IFwic3ZnXCI7XG4gICAgICAgICAgICB0aGlzLmluc3RhbmNlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICB2YXIgX2IgPSB0aGlzLm9wdGlvbnMsIGxheW91dElkID0gX2IubGF5b3V0SWQsIGxheW91dCA9IF9iLmxheW91dCwgdmlzdWFsRWxlbWVudCA9IF9iLnZpc3VhbEVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAodmlzdWFsRWxlbWVudCAmJiAhdmlzdWFsRWxlbWVudC5nZXRJbnN0YW5jZSgpKSB7XG4gICAgICAgICAgICAgICAgdmlzdWFsRWxlbWVudC5tb3VudChpbnN0YW5jZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnJvb3Qubm9kZXMuYWRkKHRoaXMpO1xuICAgICAgICAgICAgKF9hID0gdGhpcy5wYXJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jaGlsZHJlbi5hZGQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmlkICYmIHRoaXMucm9vdC5wb3RlbnRpYWxOb2Rlcy5kZWxldGUodGhpcy5pZCk7XG4gICAgICAgICAgICBpZiAoaXNMYXlvdXREaXJ0eSAmJiAobGF5b3V0IHx8IGxheW91dElkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaXNMYXlvdXREaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYXR0YWNoUmVzaXplTGlzdGVuZXIpIHtcbiAgICAgICAgICAgICAgICB2YXIgdW5ibG9ja1RpbWVvdXRfMTtcbiAgICAgICAgICAgICAgICB2YXIgcmVzaXplVW5ibG9ja1VwZGF0ZV8xID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKF90aGlzLnJvb3QudXBkYXRlQmxvY2tlZEJ5UmVzaXplID0gZmFsc2UpO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYXR0YWNoUmVzaXplTGlzdGVuZXIoaW5zdGFuY2UsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMucm9vdC51cGRhdGVCbG9ja2VkQnlSZXNpemUgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodW5ibG9ja1RpbWVvdXRfMSk7XG4gICAgICAgICAgICAgICAgICAgIHVuYmxvY2tUaW1lb3V0XzEgPSB3aW5kb3cuc2V0VGltZW91dChyZXNpemVVbmJsb2NrVXBkYXRlXzEsIDI1MCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnbG9iYWxQcm9qZWN0aW9uU3RhdGUuaGFzQW5pbWF0ZWRTaW5jZVJlc2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2xvYmFsUHJvamVjdGlvblN0YXRlLmhhc0FuaW1hdGVkU2luY2VSZXNpemUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLm5vZGVzLmZvckVhY2goZmluaXNoQW5pbWF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxheW91dElkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yb290LnJlZ2lzdGVyU2hhcmVkTm9kZShsYXlvdXRJZCwgdGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBPbmx5IHJlZ2lzdGVyIHRoZSBoYW5kbGVyIGlmIGl0IHJlcXVpcmVzIGxheW91dCBhbmltYXRpb25cbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYW5pbWF0ZSAhPT0gZmFsc2UgJiZcbiAgICAgICAgICAgICAgICB2aXN1YWxFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgKGxheW91dElkIHx8IGxheW91dCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoXCJkaWRVcGRhdGVcIiwgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBfYiwgX2MsIF9kLCBfZSwgX2Y7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkZWx0YSA9IF9hLmRlbHRhLCBoYXNMYXlvdXRDaGFuZ2VkID0gX2EuaGFzTGF5b3V0Q2hhbmdlZCwgaGFzUmVsYXRpdmVUYXJnZXRDaGFuZ2VkID0gX2EuaGFzUmVsYXRpdmVUYXJnZXRDaGFuZ2VkLCBuZXdMYXlvdXQgPSBfYS5sYXlvdXQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfdGhpcy5pc1RyZWVBbmltYXRpb25CbG9ja2VkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnRhcmdldCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlbGF0aXZlVGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IENoZWNrIGhlcmUgaWYgYW4gYW5pbWF0aW9uIGV4aXN0c1xuICAgICAgICAgICAgICAgICAgICB2YXIgbGF5b3V0VHJhbnNpdGlvbiA9IChfYyA9IChfYiA9IF90aGlzLm9wdGlvbnMudHJhbnNpdGlvbikgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogdmlzdWFsRWxlbWVudC5nZXREZWZhdWx0VHJhbnNpdGlvbigpKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBkZWZhdWx0TGF5b3V0VHJhbnNpdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9nID0gdmlzdWFsRWxlbWVudC5nZXRQcm9wcygpLCBvbkxheW91dEFuaW1hdGlvblN0YXJ0ID0gX2cub25MYXlvdXRBbmltYXRpb25TdGFydCwgb25MYXlvdXRBbmltYXRpb25Db21wbGV0ZSA9IF9nLm9uTGF5b3V0QW5pbWF0aW9uQ29tcGxldGU7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBUaGUgdGFyZ2V0IGxheW91dCBvZiB0aGUgZWxlbWVudCBtaWdodCBzdGF5IHRoZSBzYW1lLFxuICAgICAgICAgICAgICAgICAgICAgKiBidXQgaXRzIHBvc2l0aW9uIHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgaGFzIGNoYW5nZWQuXG4gICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICB2YXIgdGFyZ2V0Q2hhbmdlZCA9ICFfdGhpcy50YXJnZXRMYXlvdXQgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICFib3hFcXVhbHMoX3RoaXMudGFyZ2V0TGF5b3V0LCBuZXdMYXlvdXQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNSZWxhdGl2ZVRhcmdldENoYW5nZWQ7XG4gICAgICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAgICAgKiBJZiB0aGUgbGF5b3V0IGhhc24ndCBzZWVtZWQgdG8gaGF2ZSBjaGFuZ2VkLCBpdCBtaWdodCBiZSB0aGF0IHRoZVxuICAgICAgICAgICAgICAgICAgICAgKiBlbGVtZW50IGlzIHZpc3VhbGx5IGluIHRoZSBzYW1lIHBsYWNlIGluIHRoZSBkb2N1bWVudCBidXQgaXRzIHBvc2l0aW9uXG4gICAgICAgICAgICAgICAgICAgICAqIHJlbGF0aXZlIHRvIGl0cyBwYXJlbnQgaGFzIGluZGVlZCBjaGFuZ2VkLiBTbyBoZXJlIHdlIGNoZWNrIGZvciB0aGF0LlxuICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgdmFyIGhhc09ubHlSZWxhdGl2ZVRhcmdldENoYW5nZWQgPSAhaGFzTGF5b3V0Q2hhbmdlZCAmJiBoYXNSZWxhdGl2ZVRhcmdldENoYW5nZWQ7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoKF9kID0gX3RoaXMucmVzdW1lRnJvbSkgPT09IG51bGwgfHwgX2QgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9kLmluc3RhbmNlKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgaGFzT25seVJlbGF0aXZlVGFyZ2V0Q2hhbmdlZCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKGhhc0xheW91dENoYW5nZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGFyZ2V0Q2hhbmdlZCB8fCAhX3RoaXMuY3VycmVudEFuaW1hdGlvbikpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMucmVzdW1lRnJvbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlc3VtaW5nRnJvbSA9IF90aGlzLnJlc3VtZUZyb207XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMucmVzdW1pbmdGcm9tLnJlc3VtaW5nRnJvbSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnNldEFuaW1hdGlvbk9yaWdpbihkZWx0YSwgaGFzT25seVJlbGF0aXZlVGFyZ2V0Q2hhbmdlZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYW5pbWF0aW9uT3B0aW9ucyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBnZXRWYWx1ZVRyYW5zaXRpb24obGF5b3V0VHJhbnNpdGlvbiwgXCJsYXlvdXRcIikpLCB7IG9uUGxheTogb25MYXlvdXRBbmltYXRpb25TdGFydCwgb25Db21wbGV0ZTogb25MYXlvdXRBbmltYXRpb25Db21wbGV0ZSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2aXN1YWxFbGVtZW50LnNob3VsZFJlZHVjZU1vdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbk9wdGlvbnMuZGVsYXkgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbk9wdGlvbnMudHlwZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuc3RhcnRBbmltYXRpb24oYW5pbWF0aW9uT3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIElmIHRoZSBsYXlvdXQgaGFzbid0IGNoYW5nZWQgYW5kIHdlIGhhdmUgYW4gYW5pbWF0aW9uIHRoYXQgaGFzbid0IHN0YXJ0ZWQgeWV0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICogZmluaXNoIGl0IGltbWVkaWF0ZWx5LiBPdGhlcndpc2UgaXQgd2lsbCBiZSBhbmltYXRpbmcgZnJvbSBhIGxvY2F0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGF0IHdhcyBwcm9iYWJseSBuZXZlciBjb21taXRlZCB0byBzY3JlZW4gYW5kIGxvb2sgbGlrZSBhIGp1bXB5IGJveC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNMYXlvdXRDaGFuZ2VkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuYW5pbWF0aW9uUHJvZ3Jlc3MgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5maW5pc2hBbmltYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmlzTGVhZCgpICYmICgoX2YgPSAoX2UgPSBfdGhpcy5vcHRpb25zKS5vbkV4aXRDb21wbGV0ZSkgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mLmNhbGwoX2UpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBfdGhpcy50YXJnZXRMYXlvdXQgPSBuZXdMYXlvdXQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS51bm1vdW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5sYXlvdXRJZCAmJiB0aGlzLndpbGxVcGRhdGUoKTtcbiAgICAgICAgICAgIHRoaXMucm9vdC5ub2Rlcy5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAoX2EgPSB0aGlzLmdldFN0YWNrKCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICAoX2IgPSB0aGlzLnBhcmVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmNoaWxkcmVuLmRlbGV0ZSh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuaW5zdGFuY2UgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjYW5jZWxTeW5jLnByZVJlbmRlcih0aGlzLnVwZGF0ZVByb2plY3Rpb24pO1xuICAgICAgICB9O1xuICAgICAgICAvLyBvbmx5IG9uIHRoZSByb290XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5ibG9ja1VwZGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlTWFudWFsbHlCbG9ja2VkID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnVuYmxvY2tVcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZU1hbnVhbGx5QmxvY2tlZCA9IGZhbHNlO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuaXNVcGRhdGVCbG9ja2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlTWFudWFsbHlCbG9ja2VkIHx8IHRoaXMudXBkYXRlQmxvY2tlZEJ5UmVzaXplO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuaXNUcmVlQW5pbWF0aW9uQmxvY2tlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5pc0FuaW1hdGlvbkJsb2NrZWQgfHxcbiAgICAgICAgICAgICAgICAoKF9hID0gdGhpcy5wYXJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5pc1RyZWVBbmltYXRpb25CbG9ja2VkKCkpIHx8XG4gICAgICAgICAgICAgICAgZmFsc2UpO1xuICAgICAgICB9O1xuICAgICAgICAvLyBOb3RlOiBjdXJyZW50bHkgb25seSBydW5uaW5nIG9uIHJvb3Qgbm9kZVxuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuc3RhcnRVcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAodGhpcy5pc1VwZGF0ZUJsb2NrZWQoKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLmlzVXBkYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgKF9hID0gdGhpcy5ub2RlcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvckVhY2gocmVzZXRSb3RhdGlvbik7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS53aWxsVXBkYXRlID0gZnVuY3Rpb24gKHNob3VsZE5vdGlmeUxpc3RlbmVycykge1xuICAgICAgICAgICAgdmFyIF9hLCBfYiwgX2M7XG4gICAgICAgICAgICBpZiAoc2hvdWxkTm90aWZ5TGlzdGVuZXJzID09PSB2b2lkIDApIHsgc2hvdWxkTm90aWZ5TGlzdGVuZXJzID0gdHJ1ZTsgfVxuICAgICAgICAgICAgaWYgKHRoaXMucm9vdC5pc1VwZGF0ZUJsb2NrZWQoKSkge1xuICAgICAgICAgICAgICAgIChfYiA9IChfYSA9IHRoaXMub3B0aW9ucykub25FeGl0Q29tcGxldGUpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAhdGhpcy5yb290LmlzVXBkYXRpbmcgJiYgdGhpcy5yb290LnN0YXJ0VXBkYXRlKCk7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0xheW91dERpcnR5KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuaXNMYXlvdXREaXJ0eSA9IHRydWU7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5wYXRoW2ldO1xuICAgICAgICAgICAgICAgIG5vZGUuc2hvdWxkUmVzZXRUcmFuc2Zvcm0gPSB0cnVlO1xuICAgICAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICAgICAqIFRPRE86IENoZWNrIHdlIGhhdmVuJ3QgdXBkYXRlZCB0aGUgc2Nyb2xsXG4gICAgICAgICAgICAgICAgICogc2luY2UgdGhlIGxhc3QgZGlkVXBkYXRlXG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgbm9kZS51cGRhdGVTY3JvbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBfZCA9IHRoaXMub3B0aW9ucywgbGF5b3V0SWQgPSBfZC5sYXlvdXRJZCwgbGF5b3V0ID0gX2QubGF5b3V0O1xuICAgICAgICAgICAgaWYgKGxheW91dElkID09PSB1bmRlZmluZWQgJiYgIWxheW91dClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgdHJhbnNmb3JtVGVtcGxhdGUgPSAoX2MgPSB0aGlzLm9wdGlvbnMudmlzdWFsRWxlbWVudCkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmdldFByb3BzKCkudHJhbnNmb3JtVGVtcGxhdGU7XG4gICAgICAgICAgICB0aGlzLnByZXZUcmFuc2Zvcm1UZW1wbGF0ZVZhbHVlID0gdHJhbnNmb3JtVGVtcGxhdGUgPT09IG51bGwgfHwgdHJhbnNmb3JtVGVtcGxhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRyYW5zZm9ybVRlbXBsYXRlKHRoaXMubGF0ZXN0VmFsdWVzLCBcIlwiKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlU25hcHNob3QoKTtcbiAgICAgICAgICAgIHNob3VsZE5vdGlmeUxpc3RlbmVycyAmJiB0aGlzLm5vdGlmeUxpc3RlbmVycyhcIndpbGxVcGRhdGVcIik7XG4gICAgICAgIH07XG4gICAgICAgIC8vIE5vdGU6IEN1cnJlbnRseSBvbmx5IHJ1bm5pbmcgb24gcm9vdCBub2RlXG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5kaWRVcGRhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgdXBkYXRlV2FzQmxvY2tlZCA9IHRoaXMuaXNVcGRhdGVCbG9ja2VkKCk7XG4gICAgICAgICAgICAvLyBXaGVuIGRvaW5nIGFuIGluc3RhbnQgdHJhbnNpdGlvbiwgd2Ugc2tpcCB0aGUgbGF5b3V0IHVwZGF0ZSxcbiAgICAgICAgICAgIC8vIGJ1dCBzaG91bGQgc3RpbGwgY2xlYW4gdXAgdGhlIG1lYXN1cmVtZW50cyBzbyB0aGF0IHRoZSBuZXh0XG4gICAgICAgICAgICAvLyBzbmFwc2hvdCBjb3VsZCBiZSB0YWtlbiBjb3JyZWN0bHkuXG4gICAgICAgICAgICBpZiAodXBkYXRlV2FzQmxvY2tlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMudW5ibG9ja1VwZGF0ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xlYXJBbGxTbmFwc2hvdHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vZGVzLmZvckVhY2goY2xlYXJNZWFzdXJlbWVudHMpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghdGhpcy5pc1VwZGF0aW5nKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuaXNVcGRhdGluZyA9IGZhbHNlO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBTZWFyY2ggZm9yIGFuZCBtb3VudCBuZXdseS1hZGRlZCBwcm9qZWN0aW9uIGVsZW1lbnRzLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIFRPRE86IEV2ZXJ5IHRpbWUgYSBuZXcgY29tcG9uZW50IGlzIHJlbmRlcmVkIHdlIGNvdWxkIHNlYXJjaCB1cCB0aGUgdHJlZSBmb3JcbiAgICAgICAgICAgICAqIHRoZSBjbG9zZXN0IG1vdW50ZWQgbm9kZSBhbmQgcXVlcnkgZnJvbSB0aGVyZSByYXRoZXIgdGhhbiBkb2N1bWVudC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHRoaXMucG90ZW50aWFsTm9kZXMuc2l6ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMucG90ZW50aWFsTm9kZXMuZm9yRWFjaChtb3VudE5vZGVFYXJseSk7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3RlbnRpYWxOb2Rlcy5jbGVhcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXcml0ZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLm5vZGVzLmZvckVhY2gocmVzZXRUcmFuc2Zvcm1TdHlsZSk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFJlYWQgPT09PT09PT09PT09PT09PT09XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIC8vIFVwZGF0ZSBsYXlvdXQgbWVhc3VyZW1lbnRzIG9mIHVwZGF0ZWQgY2hpbGRyZW5cbiAgICAgICAgICAgIHRoaXMubm9kZXMuZm9yRWFjaCh1cGRhdGVMYXlvdXQpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBXcml0ZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICAvLyBOb3RpZnkgbGlzdGVuZXJzIHRoYXQgdGhlIGxheW91dCBpcyB1cGRhdGVkXG4gICAgICAgICAgICB0aGlzLm5vZGVzLmZvckVhY2gobm90aWZ5TGF5b3V0VXBkYXRlKTtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJBbGxTbmFwc2hvdHMoKTtcbiAgICAgICAgICAgIC8vIEZsdXNoIGFueSBzY2hlZHVsZWQgdXBkYXRlc1xuICAgICAgICAgICAgZmx1c2hTeW5jLnVwZGF0ZSgpO1xuICAgICAgICAgICAgZmx1c2hTeW5jLnByZVJlbmRlcigpO1xuICAgICAgICAgICAgZmx1c2hTeW5jLnJlbmRlcigpO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuY2xlYXJBbGxTbmFwc2hvdHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLm5vZGVzLmZvckVhY2goY2xlYXJTbmFwc2hvdCk7XG4gICAgICAgICAgICB0aGlzLnNoYXJlZE5vZGVzLmZvckVhY2gocmVtb3ZlTGVhZFNuYXBzaG90cyk7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5zY2hlZHVsZVVwZGF0ZVByb2plY3Rpb24gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzeW5jLnByZVJlbmRlcih0aGlzLnVwZGF0ZVByb2plY3Rpb24sIGZhbHNlLCB0cnVlKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnNjaGVkdWxlQ2hlY2tBZnRlclVubW91bnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB0aGUgdW5tb3VudGluZyBub2RlIGlzIGluIGEgbGF5b3V0R3JvdXAgYW5kIGRpZCB0cmlnZ2VyIGEgd2lsbFVwZGF0ZSxcbiAgICAgICAgICAgICAqIHdlIG1hbnVhbGx5IGNhbGwgZGlkVXBkYXRlIHRvIGdpdmUgYSBjaGFuY2UgdG8gdGhlIHNpYmxpbmdzIHRvIGFuaW1hdGUuXG4gICAgICAgICAgICAgKiBPdGhlcndpc2UsIGNsZWFudXAgYWxsIHNuYXBzaG90cyB0byBwcmV2ZW50cyBmdXR1cmUgbm9kZXMgZnJvbSByZXVzaW5nIHRoZW0uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHN5bmMucG9zdFJlbmRlcihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmlzTGF5b3V0RGlydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMucm9vdC5kaWRVcGRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnJvb3QuY2hlY2tVcGRhdGVGYWlsZWQoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFVwZGF0ZSBtZWFzdXJlbWVudHNcbiAgICAgICAgICovXG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS51cGRhdGVTbmFwc2hvdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNuYXBzaG90IHx8ICF0aGlzLmluc3RhbmNlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHZhciBtZWFzdXJlZCA9IHRoaXMubWVhc3VyZSgpO1xuICAgICAgICAgICAgdmFyIGxheW91dCA9IHRoaXMucmVtb3ZlVHJhbnNmb3JtKHRoaXMucmVtb3ZlRWxlbWVudFNjcm9sbChtZWFzdXJlZCkpO1xuICAgICAgICAgICAgcm91bmRCb3gobGF5b3V0KTtcbiAgICAgICAgICAgIHRoaXMuc25hcHNob3QgPSB7XG4gICAgICAgICAgICAgICAgbWVhc3VyZWQ6IG1lYXN1cmVkLFxuICAgICAgICAgICAgICAgIGxheW91dDogbGF5b3V0LFxuICAgICAgICAgICAgICAgIGxhdGVzdFZhbHVlczoge30sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUudXBkYXRlTGF5b3V0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIC8vIFRPRE86IEluY29ycG9yYXRlIGludG8gYSBmb3J3YXJkZWQgc2Nyb2xsIG9mZnNldFxuICAgICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGwoKTtcbiAgICAgICAgICAgIGlmICghKHRoaXMub3B0aW9ucy5hbHdheXNNZWFzdXJlTGF5b3V0ICYmIHRoaXMuaXNMZWFkKCkpICYmXG4gICAgICAgICAgICAgICAgIXRoaXMuaXNMYXlvdXREaXJ0eSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogV2hlbiBhIG5vZGUgaXMgbW91bnRlZCwgaXQgc2ltcGx5IHJlc3VtZXMgZnJvbSB0aGUgcHJldkxlYWQnc1xuICAgICAgICAgICAgICogc25hcHNob3QgaW5zdGVhZCBvZiB0YWtpbmcgYSBuZXcgb25lLCBidXQgdGhlIGFuY2VzdG9ycyBzY3JvbGxcbiAgICAgICAgICAgICAqIG1pZ2h0IGhhdmUgdXBkYXRlZCB3aGlsZSB0aGUgcHJldkxlYWQgaXMgdW5tb3VudGVkLiBXZSBuZWVkIHRvXG4gICAgICAgICAgICAgKiB1cGRhdGUgdGhlIHNjcm9sbCBhZ2FpbiB0byBtYWtlIHN1cmUgdGhlIGxheW91dCB3ZSBtZWFzdXJlIGlzXG4gICAgICAgICAgICAgKiB1cCB0byBkYXRlLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAodGhpcy5yZXN1bWVGcm9tICYmICF0aGlzLnJlc3VtZUZyb20uaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMucGF0aFtpXTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS51cGRhdGVTY3JvbGwoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgbWVhc3VyZWQgPSB0aGlzLm1lYXN1cmUoKTtcbiAgICAgICAgICAgIHJvdW5kQm94KG1lYXN1cmVkKTtcbiAgICAgICAgICAgIHZhciBwcmV2TGF5b3V0ID0gdGhpcy5sYXlvdXQ7XG4gICAgICAgICAgICB0aGlzLmxheW91dCA9IHtcbiAgICAgICAgICAgICAgICBtZWFzdXJlZDogbWVhc3VyZWQsXG4gICAgICAgICAgICAgICAgYWN0dWFsOiB0aGlzLnJlbW92ZUVsZW1lbnRTY3JvbGwobWVhc3VyZWQpLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0Q29ycmVjdGVkID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICB0aGlzLmlzTGF5b3V0RGlydHkgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdGlvbkRlbHRhID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlMaXN0ZW5lcnMoXCJtZWFzdXJlXCIsIHRoaXMubGF5b3V0LmFjdHVhbCk7XG4gICAgICAgICAgICAoX2EgPSB0aGlzLm9wdGlvbnMudmlzdWFsRWxlbWVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5vdGlmeUxheW91dE1lYXN1cmUodGhpcy5sYXlvdXQuYWN0dWFsLCBwcmV2TGF5b3V0ID09PSBudWxsIHx8IHByZXZMYXlvdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHByZXZMYXlvdXQuYWN0dWFsKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnVwZGF0ZVNjcm9sbCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMubGF5b3V0U2Nyb2xsICYmIHRoaXMuaW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2Nyb2xsUm9vdCA9IGNoZWNrSXNTY3JvbGxSb290KHRoaXMuaW5zdGFuY2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsID0gbWVhc3VyZVNjcm9sbCh0aGlzLmluc3RhbmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnJlc2V0VHJhbnNmb3JtID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgaWYgKCFyZXNldFRyYW5zZm9ybSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgaXNSZXNldFJlcXVlc3RlZCA9IHRoaXMuaXNMYXlvdXREaXJ0eSB8fCB0aGlzLnNob3VsZFJlc2V0VHJhbnNmb3JtO1xuICAgICAgICAgICAgdmFyIGhhc1Byb2plY3Rpb24gPSB0aGlzLnByb2plY3Rpb25EZWx0YSAmJiAhaXNEZWx0YVplcm8odGhpcy5wcm9qZWN0aW9uRGVsdGEpO1xuICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVRlbXBsYXRlID0gKF9hID0gdGhpcy5vcHRpb25zLnZpc3VhbEVsZW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRQcm9wcygpLnRyYW5zZm9ybVRlbXBsYXRlO1xuICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVRlbXBsYXRlVmFsdWUgPSB0cmFuc2Zvcm1UZW1wbGF0ZSA9PT0gbnVsbCB8fCB0cmFuc2Zvcm1UZW1wbGF0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogdHJhbnNmb3JtVGVtcGxhdGUodGhpcy5sYXRlc3RWYWx1ZXMsIFwiXCIpO1xuICAgICAgICAgICAgdmFyIHRyYW5zZm9ybVRlbXBsYXRlSGFzQ2hhbmdlZCA9IHRyYW5zZm9ybVRlbXBsYXRlVmFsdWUgIT09IHRoaXMucHJldlRyYW5zZm9ybVRlbXBsYXRlVmFsdWU7XG4gICAgICAgICAgICBpZiAoaXNSZXNldFJlcXVlc3RlZCAmJlxuICAgICAgICAgICAgICAgIChoYXNQcm9qZWN0aW9uIHx8XG4gICAgICAgICAgICAgICAgICAgIGhhc1RyYW5zZm9ybSh0aGlzLmxhdGVzdFZhbHVlcykgfHxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtVGVtcGxhdGVIYXNDaGFuZ2VkKSkge1xuICAgICAgICAgICAgICAgIHJlc2V0VHJhbnNmb3JtKHRoaXMuaW5zdGFuY2UsIHRyYW5zZm9ybVRlbXBsYXRlVmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2hvdWxkUmVzZXRUcmFuc2Zvcm0gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjaGVkdWxlUmVuZGVyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5tZWFzdXJlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHZpc3VhbEVsZW1lbnQgPSB0aGlzLm9wdGlvbnMudmlzdWFsRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghdmlzdWFsRWxlbWVudClcbiAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICB2YXIgYm94ID0gdmlzdWFsRWxlbWVudC5tZWFzdXJlVmlld3BvcnRCb3goKTtcbiAgICAgICAgICAgIC8vIFJlbW92ZSB2aWV3cG9ydCBzY3JvbGwgdG8gZ2l2ZSBwYWdlLXJlbGF0aXZlIGNvb3JkaW5hdGVzXG4gICAgICAgICAgICB2YXIgc2Nyb2xsID0gdGhpcy5yb290LnNjcm9sbDtcbiAgICAgICAgICAgIGlmIChzY3JvbGwpIHtcbiAgICAgICAgICAgICAgICB0cmFuc2xhdGVBeGlzKGJveC54LCBzY3JvbGwueCk7XG4gICAgICAgICAgICAgICAgdHJhbnNsYXRlQXhpcyhib3gueSwgc2Nyb2xsLnkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJveDtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnJlbW92ZUVsZW1lbnRTY3JvbGwgPSBmdW5jdGlvbiAoYm94KSB7XG4gICAgICAgICAgICB2YXIgYm94V2l0aG91dFNjcm9sbCA9IGNyZWF0ZUJveCgpO1xuICAgICAgICAgICAgY29weUJveEludG8oYm94V2l0aG91dFNjcm9sbCwgYm94KTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogUGVyZm9ybWFuY2UgVE9ETzogS2VlcCBhIGN1bXVsYXRpdmUgc2Nyb2xsIG9mZnNldCBkb3duIHRoZSB0cmVlXG4gICAgICAgICAgICAgKiByYXRoZXIgdGhhbiBsb29wIGJhY2sgdXAgdGhlIHBhdGguXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wYXRoLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnBhdGhbaV07XG4gICAgICAgICAgICAgICAgdmFyIHNjcm9sbF8xID0gbm9kZS5zY3JvbGwsIG9wdGlvbnMgPSBub2RlLm9wdGlvbnMsIGlzU2Nyb2xsUm9vdCA9IG5vZGUuaXNTY3JvbGxSb290O1xuICAgICAgICAgICAgICAgIGlmIChub2RlICE9PSB0aGlzLnJvb3QgJiYgc2Nyb2xsXzEgJiYgb3B0aW9ucy5sYXlvdXRTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICAgICAqIElmIHRoaXMgaXMgYSBuZXcgc2Nyb2xsIHJvb3QsIHdlIHdhbnQgdG8gcmVtb3ZlIGFsbCBwcmV2aW91cyBzY3JvbGxzXG4gICAgICAgICAgICAgICAgICAgICAqIGZyb20gdGhlIHZpZXdwb3J0IGJveC5cbiAgICAgICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1Njcm9sbFJvb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlCb3hJbnRvKGJveFdpdGhvdXRTY3JvbGwsIGJveCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcm9vdFNjcm9sbCA9IHRoaXMucm9vdC5zY3JvbGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIFVuZG8gdGhlIGFwcGxpY2F0aW9uIG9mIHBhZ2Ugc2Nyb2xsIHRoYXQgd2FzIG9yaWdpbmFsbHkgYWRkZWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAqIHRvIHRoZSBtZWFzdXJlZCBib3VuZGluZyBib3guXG4gICAgICAgICAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb290U2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlQXhpcyhib3hXaXRob3V0U2Nyb2xsLngsIC1yb290U2Nyb2xsLngpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZUF4aXMoYm94V2l0aG91dFNjcm9sbC55LCAtcm9vdFNjcm9sbC55KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGVBeGlzKGJveFdpdGhvdXRTY3JvbGwueCwgc2Nyb2xsXzEueCk7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0ZUF4aXMoYm94V2l0aG91dFNjcm9sbC55LCBzY3JvbGxfMS55KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYm94V2l0aG91dFNjcm9sbDtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmFwcGx5VHJhbnNmb3JtID0gZnVuY3Rpb24gKGJveCwgdHJhbnNmb3JtT25seSkge1xuICAgICAgICAgICAgaWYgKHRyYW5zZm9ybU9ubHkgPT09IHZvaWQgMCkgeyB0cmFuc2Zvcm1Pbmx5ID0gZmFsc2U7IH1cbiAgICAgICAgICAgIHZhciB3aXRoVHJhbnNmb3JtcyA9IGNyZWF0ZUJveCgpO1xuICAgICAgICAgICAgY29weUJveEludG8od2l0aFRyYW5zZm9ybXMsIGJveCk7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHZhciBub2RlID0gdGhpcy5wYXRoW2ldO1xuICAgICAgICAgICAgICAgIGlmICghdHJhbnNmb3JtT25seSAmJlxuICAgICAgICAgICAgICAgICAgICBub2RlLm9wdGlvbnMubGF5b3V0U2Nyb2xsICYmXG4gICAgICAgICAgICAgICAgICAgIG5vZGUuc2Nyb2xsICYmXG4gICAgICAgICAgICAgICAgICAgIG5vZGUgIT09IG5vZGUucm9vdCkge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1Cb3god2l0aFRyYW5zZm9ybXMsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IC1ub2RlLnNjcm9sbC54LFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogLW5vZGUuc2Nyb2xsLnksXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoIWhhc1RyYW5zZm9ybShub2RlLmxhdGVzdFZhbHVlcykpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybUJveCh3aXRoVHJhbnNmb3Jtcywgbm9kZS5sYXRlc3RWYWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGhhc1RyYW5zZm9ybSh0aGlzLmxhdGVzdFZhbHVlcykpIHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1Cb3god2l0aFRyYW5zZm9ybXMsIHRoaXMubGF0ZXN0VmFsdWVzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB3aXRoVHJhbnNmb3JtcztcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnJlbW92ZVRyYW5zZm9ybSA9IGZ1bmN0aW9uIChib3gpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHZhciBib3hXaXRob3V0VHJhbnNmb3JtID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICBjb3B5Qm94SW50byhib3hXaXRob3V0VHJhbnNmb3JtLCBib3gpO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgbm9kZSA9IHRoaXMucGF0aFtpXTtcbiAgICAgICAgICAgICAgICBpZiAoIW5vZGUuaW5zdGFuY2UpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGlmICghaGFzVHJhbnNmb3JtKG5vZGUubGF0ZXN0VmFsdWVzKSlcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgaGFzU2NhbGUobm9kZS5sYXRlc3RWYWx1ZXMpICYmIG5vZGUudXBkYXRlU25hcHNob3QoKTtcbiAgICAgICAgICAgICAgICB2YXIgc291cmNlQm94ID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICAgICAgdmFyIG5vZGVCb3ggPSBub2RlLm1lYXN1cmUoKTtcbiAgICAgICAgICAgICAgICBjb3B5Qm94SW50byhzb3VyY2VCb3gsIG5vZGVCb3gpO1xuICAgICAgICAgICAgICAgIHJlbW92ZUJveFRyYW5zZm9ybXMoYm94V2l0aG91dFRyYW5zZm9ybSwgbm9kZS5sYXRlc3RWYWx1ZXMsIChfYSA9IG5vZGUuc25hcHNob3QpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5sYXlvdXQsIHNvdXJjZUJveCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaGFzVHJhbnNmb3JtKHRoaXMubGF0ZXN0VmFsdWVzKSkge1xuICAgICAgICAgICAgICAgIHJlbW92ZUJveFRyYW5zZm9ybXMoYm94V2l0aG91dFRyYW5zZm9ybSwgdGhpcy5sYXRlc3RWYWx1ZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGJveFdpdGhvdXRUcmFuc2Zvcm07XG4gICAgICAgIH07XG4gICAgICAgIC8qKlxuICAgICAgICAgKlxuICAgICAgICAgKi9cbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnNldFRhcmdldERlbHRhID0gZnVuY3Rpb24gKGRlbHRhKSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldERlbHRhID0gZGVsdGE7XG4gICAgICAgICAgICB0aGlzLnJvb3Quc2NoZWR1bGVVcGRhdGVQcm9qZWN0aW9uKCk7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5zZXRPcHRpb25zID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IF9fYXNzaWduKF9fYXNzaWduKF9fYXNzaWduKHt9LCB0aGlzLm9wdGlvbnMpLCBvcHRpb25zKSwgeyBjcm9zc2ZhZGU6IChfYSA9IG9wdGlvbnMuY3Jvc3NmYWRlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0cnVlIH0pO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuY2xlYXJNZWFzdXJlbWVudHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLnNjcm9sbCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMubGF5b3V0ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5zbmFwc2hvdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHRoaXMucHJldlRyYW5zZm9ybVRlbXBsYXRlVmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLnRhcmdldERlbHRhID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmlzTGF5b3V0RGlydHkgPSBmYWxzZTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEZyYW1lIGNhbGN1bGF0aW9uc1xuICAgICAgICAgKi9cbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnJlc29sdmVUYXJnZXREZWx0YSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHZhciBfYiA9IHRoaXMub3B0aW9ucywgbGF5b3V0ID0gX2IubGF5b3V0LCBsYXlvdXRJZCA9IF9iLmxheW91dElkO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB3ZSBoYXZlIG5vIGxheW91dCwgd2UgY2FuJ3QgcGVyZm9ybSBwcm9qZWN0aW9uLCBzbyBlYXJseSByZXR1cm5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKCF0aGlzLmxheW91dCB8fCAhKGxheW91dCB8fCBsYXlvdXRJZCkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB3ZSBkb24ndCBoYXZlIGEgdGFyZ2V0RGVsdGEgYnV0IGRvIGhhdmUgYSBsYXlvdXQsIHdlIGNhbiBhdHRlbXB0IHRvIHJlc29sdmVcbiAgICAgICAgICAgICAqIGEgcmVsYXRpdmVQYXJlbnQuIFRoaXMgd2lsbCBhbGxvdyBhIGNvbXBvbmVudCB0byBwZXJmb3JtIHNjYWxlIGNvcnJlY3Rpb25cbiAgICAgICAgICAgICAqIGV2ZW4gaWYgbm8gYW5pbWF0aW9uIGhhcyBzdGFydGVkLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICAvLyBUT0RPIElmIHRoaXMgaXMgdW5zdWNjZXNzZnVsIHRoaXMgY3VycmVudGx5IGhhcHBlbnMgZXZlcnkgZnJhbWVcbiAgICAgICAgICAgIGlmICghdGhpcy50YXJnZXREZWx0YSAmJiAhdGhpcy5yZWxhdGl2ZVRhcmdldCkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE86IFRoaXMgaXMgYSBzZW1pLXJlcGV0aXRpb24gb2YgZnVydGhlciBkb3duIHRoaXMgZnVuY3Rpb24sIG1ha2UgRFJZXG4gICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZVBhcmVudCA9IHRoaXMuZ2V0Q2xvc2VzdFByb2plY3RpbmdQYXJlbnQoKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5yZWxhdGl2ZVBhcmVudCAmJiB0aGlzLnJlbGF0aXZlUGFyZW50LmxheW91dCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlVGFyZ2V0ID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVsYXRpdmVUYXJnZXRPcmlnaW4gPSBjcmVhdGVCb3goKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsY1JlbGF0aXZlUG9zaXRpb24odGhpcy5yZWxhdGl2ZVRhcmdldE9yaWdpbiwgdGhpcy5sYXlvdXQuYWN0dWFsLCB0aGlzLnJlbGF0aXZlUGFyZW50LmxheW91dC5hY3R1YWwpO1xuICAgICAgICAgICAgICAgICAgICBjb3B5Qm94SW50byh0aGlzLnJlbGF0aXZlVGFyZ2V0LCB0aGlzLnJlbGF0aXZlVGFyZ2V0T3JpZ2luKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHdlIGhhdmUgbm8gcmVsYXRpdmUgdGFyZ2V0IG9yIG5vIHRhcmdldCBkZWx0YSBvdXIgdGFyZ2V0IGlzbid0IHZhbGlkXG4gICAgICAgICAgICAgKiBmb3IgdGhpcyBmcmFtZS5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKCF0aGlzLnJlbGF0aXZlVGFyZ2V0ICYmICF0aGlzLnRhcmdldERlbHRhKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogTGF6eS1pbml0IHRhcmdldCBkYXRhIHN0cnVjdHVyZVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAoIXRoaXMudGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YXJnZXQgPSBjcmVhdGVCb3goKTtcbiAgICAgICAgICAgICAgICB0aGlzLnRhcmdldFdpdGhUcmFuc2Zvcm1zID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHdlJ3ZlIGdvdCBhIHJlbGF0aXZlIGJveCBmb3IgdGhpcyBjb21wb25lbnQsIHJlc29sdmUgaXQgaW50byBhIHRhcmdldCByZWxhdGl2ZSB0byB0aGUgcGFyZW50LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBpZiAodGhpcy5yZWxhdGl2ZVRhcmdldCAmJlxuICAgICAgICAgICAgICAgIHRoaXMucmVsYXRpdmVUYXJnZXRPcmlnaW4gJiZcbiAgICAgICAgICAgICAgICAoKF9hID0gdGhpcy5yZWxhdGl2ZVBhcmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICBjYWxjUmVsYXRpdmVCb3godGhpcy50YXJnZXQsIHRoaXMucmVsYXRpdmVUYXJnZXQsIHRoaXMucmVsYXRpdmVQYXJlbnQudGFyZ2V0KTtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBJZiB3ZSd2ZSBvbmx5IGdvdCBhIHRhcmdldERlbHRhLCByZXNvbHZlIGl0IGludG8gYSB0YXJnZXRcbiAgICAgICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudGFyZ2V0RGVsdGEpIHtcbiAgICAgICAgICAgICAgICBpZiAoQm9vbGVhbih0aGlzLnJlc3VtaW5nRnJvbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVE9ETzogVGhpcyBpcyBjcmVhdGluZyBhIG5ldyBvYmplY3QgZXZlcnkgZnJhbWVcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXQgPSB0aGlzLmFwcGx5VHJhbnNmb3JtKHRoaXMubGF5b3V0LmFjdHVhbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjb3B5Qm94SW50byh0aGlzLnRhcmdldCwgdGhpcy5sYXlvdXQuYWN0dWFsKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXBwbHlCb3hEZWx0YSh0aGlzLnRhcmdldCwgdGhpcy50YXJnZXREZWx0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBJZiBubyB0YXJnZXQsIHVzZSBvd24gbGF5b3V0IGFzIHRhcmdldFxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIGNvcHlCb3hJbnRvKHRoaXMudGFyZ2V0LCB0aGlzLmxheW91dC5hY3R1YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBJZiB3ZSd2ZSBiZWVuIHRvbGQgdG8gYXR0ZW1wdCB0byByZXNvbHZlIGEgcmVsYXRpdmUgdGFyZ2V0LCBkbyBzby5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHRoaXMuYXR0ZW1wdFRvUmVzb2x2ZVJlbGF0aXZlVGFyZ2V0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hdHRlbXB0VG9SZXNvbHZlUmVsYXRpdmVUYXJnZXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlUGFyZW50ID0gdGhpcy5nZXRDbG9zZXN0UHJvamVjdGluZ1BhcmVudCgpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlbGF0aXZlUGFyZW50ICYmXG4gICAgICAgICAgICAgICAgICAgIEJvb2xlYW4odGhpcy5yZWxhdGl2ZVBhcmVudC5yZXN1bWluZ0Zyb20pID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgQm9vbGVhbih0aGlzLnJlc3VtaW5nRnJvbSkgJiZcbiAgICAgICAgICAgICAgICAgICAgIXRoaXMucmVsYXRpdmVQYXJlbnQub3B0aW9ucy5sYXlvdXRTY3JvbGwgJiZcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZVBhcmVudC50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZVRhcmdldCA9IGNyZWF0ZUJveCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlbGF0aXZlVGFyZ2V0T3JpZ2luID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGNSZWxhdGl2ZVBvc2l0aW9uKHRoaXMucmVsYXRpdmVUYXJnZXRPcmlnaW4sIHRoaXMudGFyZ2V0LCB0aGlzLnJlbGF0aXZlUGFyZW50LnRhcmdldCk7XG4gICAgICAgICAgICAgICAgICAgIGNvcHlCb3hJbnRvKHRoaXMucmVsYXRpdmVUYXJnZXQsIHRoaXMucmVsYXRpdmVUYXJnZXRPcmlnaW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmdldENsb3Nlc3RQcm9qZWN0aW5nUGFyZW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBhcmVudCB8fCBoYXNUcmFuc2Zvcm0odGhpcy5wYXJlbnQubGF0ZXN0VmFsdWVzKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgaWYgKCh0aGlzLnBhcmVudC5yZWxhdGl2ZVRhcmdldCB8fCB0aGlzLnBhcmVudC50YXJnZXREZWx0YSkgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnBhcmVudC5sYXlvdXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQuZ2V0Q2xvc2VzdFByb2plY3RpbmdQYXJlbnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmNhbGNQcm9qZWN0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdmFyIF9iID0gdGhpcy5vcHRpb25zLCBsYXlvdXQgPSBfYi5sYXlvdXQsIGxheW91dElkID0gX2IubGF5b3V0SWQ7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHRoaXMgc2VjdGlvbiBvZiB0aGUgdHJlZSBpc24ndCBhbmltYXRpbmcgd2UgY2FuXG4gICAgICAgICAgICAgKiBkZWxldGUgb3VyIHRhcmdldCBzb3VyY2VzIGZvciB0aGUgZm9sbG93aW5nIGZyYW1lLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLmlzVHJlZUFuaW1hdGluZyA9IEJvb2xlYW4oKChfYSA9IHRoaXMucGFyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaXNUcmVlQW5pbWF0aW5nKSB8fFxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFuaW1hdGlvbiB8fFxuICAgICAgICAgICAgICAgIHRoaXMucGVuZGluZ0FuaW1hdGlvbik7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNUcmVlQW5pbWF0aW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50YXJnZXREZWx0YSA9IHRoaXMucmVsYXRpdmVUYXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMubGF5b3V0IHx8ICEobGF5b3V0IHx8IGxheW91dElkKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgbGVhZCA9IHRoaXMuZ2V0TGVhZCgpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBSZXNldCB0aGUgY29ycmVjdGVkIGJveCB3aXRoIHRoZSBsYXRlc3QgdmFsdWVzIGZyb20gYm94LCBhcyB3ZSdyZSB0aGVuIGdvaW5nXG4gICAgICAgICAgICAgKiB0byBwZXJmb3JtIG11dGF0aXZlIG9wZXJhdGlvbnMgb24gaXQuXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGNvcHlCb3hJbnRvKHRoaXMubGF5b3V0Q29ycmVjdGVkLCB0aGlzLmxheW91dC5hY3R1YWwpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBBcHBseSBhbGwgdGhlIHBhcmVudCBkZWx0YXMgdG8gdGhpcyBib3ggdG8gcHJvZHVjZSB0aGUgY29ycmVjdGVkIGJveC4gVGhpc1xuICAgICAgICAgICAgICogaXMgdGhlIGxheW91dCBib3gsIGFzIGl0IHdpbGwgYXBwZWFyIG9uIHNjcmVlbiBhcyBhIHJlc3VsdCBvZiB0aGUgdHJhbnNmb3JtcyBvZiBpdHMgcGFyZW50cy5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgYXBwbHlUcmVlRGVsdGFzKHRoaXMubGF5b3V0Q29ycmVjdGVkLCB0aGlzLnRyZWVTY2FsZSwgdGhpcy5wYXRoLCBCb29sZWFuKHRoaXMucmVzdW1pbmdGcm9tKSB8fCB0aGlzICE9PSBsZWFkKTtcbiAgICAgICAgICAgIHZhciB0YXJnZXQgPSBsZWFkLnRhcmdldDtcbiAgICAgICAgICAgIGlmICghdGFyZ2V0KVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmICghdGhpcy5wcm9qZWN0aW9uRGVsdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2plY3Rpb25EZWx0YSA9IGNyZWF0ZURlbHRhKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9qZWN0aW9uRGVsdGFXaXRoVHJhbnNmb3JtID0gY3JlYXRlRGVsdGEoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBwcmV2VHJlZVNjYWxlWCA9IHRoaXMudHJlZVNjYWxlLng7XG4gICAgICAgICAgICB2YXIgcHJldlRyZWVTY2FsZVkgPSB0aGlzLnRyZWVTY2FsZS55O1xuICAgICAgICAgICAgdmFyIHByZXZQcm9qZWN0aW9uVHJhbnNmb3JtID0gdGhpcy5wcm9qZWN0aW9uVHJhbnNmb3JtO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBVcGRhdGUgdGhlIGRlbHRhIGJldHdlZW4gdGhlIGNvcnJlY3RlZCBib3ggYW5kIHRoZSB0YXJnZXQgYm94IGJlZm9yZSB1c2VyLXNldCB0cmFuc2Zvcm1zIHdlcmUgYXBwbGllZC5cbiAgICAgICAgICAgICAqIFRoaXMgd2lsbCBhbGxvdyB1cyB0byBjYWxjdWxhdGUgdGhlIGNvcnJlY3RlZCBib3JkZXJSYWRpdXMgYW5kIGJveFNoYWRvdyB0byBjb21wZW5zYXRlXG4gICAgICAgICAgICAgKiBmb3Igb3VyIGxheW91dCByZXByb2plY3Rpb24sIGJ1dCBzdGlsbCBhbGxvdyB0aGVtIHRvIGJlIHNjYWxlZCBjb3JyZWN0bHkgYnkgdGhlIHVzZXIuXG4gICAgICAgICAgICAgKiBJdCBtaWdodCBiZSB0aGF0IHRvIHNpbXBsaWZ5IHRoaXMgd2UgbWF5IHdhbnQgdG8gYWNjZXB0IHRoYXQgdXNlci1zZXQgc2NhbGUgaXMgYWxzbyBjb3JyZWN0ZWRcbiAgICAgICAgICAgICAqIGFuZCB3ZSB3b3VsZG4ndCBoYXZlIHRvIGtlZXAgYW5kIGNhbGMgYm90aCBkZWx0YXMsIE9SIHdlIGNvdWxkIHN1cHBvcnQgYSB1c2VyIHNldHRpbmdcbiAgICAgICAgICAgICAqIHRvIGFsbG93IHBlb3BsZSB0byBjaG9vc2Ugd2hldGhlciB0aGVzZSBzdHlsZXMgYXJlIGNvcnJlY3RlZCBiYXNlZCBvbiBqdXN0IHRoZVxuICAgICAgICAgICAgICogbGF5b3V0IHJlcHJvamVjdGlvbiBvciB0aGUgZmluYWwgYm91bmRpbmcgYm94LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjYWxjQm94RGVsdGEodGhpcy5wcm9qZWN0aW9uRGVsdGEsIHRoaXMubGF5b3V0Q29ycmVjdGVkLCB0YXJnZXQsIHRoaXMubGF0ZXN0VmFsdWVzKTtcbiAgICAgICAgICAgIHRoaXMucHJvamVjdGlvblRyYW5zZm9ybSA9IGJ1aWxkUHJvamVjdGlvblRyYW5zZm9ybSh0aGlzLnByb2plY3Rpb25EZWx0YSwgdGhpcy50cmVlU2NhbGUpO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJvamVjdGlvblRyYW5zZm9ybSAhPT0gcHJldlByb2plY3Rpb25UcmFuc2Zvcm0gfHxcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVTY2FsZS54ICE9PSBwcmV2VHJlZVNjYWxlWCB8fFxuICAgICAgICAgICAgICAgIHRoaXMudHJlZVNjYWxlLnkgIT09IHByZXZUcmVlU2NhbGVZKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYXNQcm9qZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc2NoZWR1bGVSZW5kZXIoKTtcbiAgICAgICAgICAgICAgICB0aGlzLm5vdGlmeUxpc3RlbmVycyhcInByb2plY3Rpb25VcGRhdGVcIiwgdGFyZ2V0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmhpZGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgLy8gVE9ETzogU2NoZWR1bGUgcmVuZGVyXG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdGhpcy5pc1Zpc2libGUgPSB0cnVlO1xuICAgICAgICAgICAgLy8gVE9ETzogU2NoZWR1bGUgcmVuZGVyXG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5zY2hlZHVsZVJlbmRlciA9IGZ1bmN0aW9uIChub3RpZnlBbGwpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgaWYgKG5vdGlmeUFsbCA9PT0gdm9pZCAwKSB7IG5vdGlmeUFsbCA9IHRydWU7IH1cbiAgICAgICAgICAgIChfYiA9IChfYSA9IHRoaXMub3B0aW9ucykuc2NoZWR1bGVSZW5kZXIpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hKTtcbiAgICAgICAgICAgIG5vdGlmeUFsbCAmJiAoKF9jID0gdGhpcy5nZXRTdGFjaygpKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Muc2NoZWR1bGVSZW5kZXIoKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5yZXN1bWluZ0Zyb20gJiYgIXRoaXMucmVzdW1pbmdGcm9tLmluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bWluZ0Zyb20gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5zZXRBbmltYXRpb25PcmlnaW4gPSBmdW5jdGlvbiAoZGVsdGEsIGhhc09ubHlSZWxhdGl2ZVRhcmdldENoYW5nZWQpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoaGFzT25seVJlbGF0aXZlVGFyZ2V0Q2hhbmdlZCA9PT0gdm9pZCAwKSB7IGhhc09ubHlSZWxhdGl2ZVRhcmdldENoYW5nZWQgPSBmYWxzZTsgfVxuICAgICAgICAgICAgdmFyIHNuYXBzaG90ID0gdGhpcy5zbmFwc2hvdDtcbiAgICAgICAgICAgIHZhciBzbmFwc2hvdExhdGVzdFZhbHVlcyA9IChzbmFwc2hvdCA9PT0gbnVsbCB8fCBzbmFwc2hvdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc25hcHNob3QubGF0ZXN0VmFsdWVzKSB8fCB7fTtcbiAgICAgICAgICAgIHZhciBtaXhlZFZhbHVlcyA9IF9fYXNzaWduKHt9LCB0aGlzLmxhdGVzdFZhbHVlcyk7XG4gICAgICAgICAgICB2YXIgdGFyZ2V0RGVsdGEgPSBjcmVhdGVEZWx0YSgpO1xuICAgICAgICAgICAgdGhpcy5yZWxhdGl2ZVRhcmdldCA9IHRoaXMucmVsYXRpdmVUYXJnZXRPcmlnaW4gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmF0dGVtcHRUb1Jlc29sdmVSZWxhdGl2ZVRhcmdldCA9ICFoYXNPbmx5UmVsYXRpdmVUYXJnZXRDaGFuZ2VkO1xuICAgICAgICAgICAgdmFyIHJlbGF0aXZlTGF5b3V0ID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICB2YXIgaXNTaGFyZWRMYXlvdXRBbmltYXRpb24gPSBzbmFwc2hvdCA9PT0gbnVsbCB8fCBzbmFwc2hvdCA9PT0gdm9pZCAwID8gdm9pZCAwIDogc25hcHNob3QuaXNTaGFyZWQ7XG4gICAgICAgICAgICB2YXIgaXNPbmx5TWVtYmVyID0gKCgoX2EgPSB0aGlzLmdldFN0YWNrKCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5tZW1iZXJzLmxlbmd0aCkgfHwgMCkgPD0gMTtcbiAgICAgICAgICAgIHZhciBzaG91bGRDcm9zc2ZhZGVPcGFjaXR5ID0gQm9vbGVhbihpc1NoYXJlZExheW91dEFuaW1hdGlvbiAmJlxuICAgICAgICAgICAgICAgICFpc09ubHlNZW1iZXIgJiZcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMuY3Jvc3NmYWRlID09PSB0cnVlICYmXG4gICAgICAgICAgICAgICAgIXRoaXMucGF0aC5zb21lKGhhc09wYWNpdHlDcm9zc2ZhZGUpKTtcbiAgICAgICAgICAgIHRoaXMuYW5pbWF0aW9uUHJvZ3Jlc3MgPSAwO1xuICAgICAgICAgICAgdGhpcy5taXhUYXJnZXREZWx0YSA9IGZ1bmN0aW9uIChsYXRlc3QpIHtcbiAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgdmFyIHByb2dyZXNzID0gbGF0ZXN0IC8gMTAwMDtcbiAgICAgICAgICAgICAgICBtaXhBeGlzRGVsdGEodGFyZ2V0RGVsdGEueCwgZGVsdGEueCwgcHJvZ3Jlc3MpO1xuICAgICAgICAgICAgICAgIG1peEF4aXNEZWx0YSh0YXJnZXREZWx0YS55LCBkZWx0YS55LCBwcm9ncmVzcyk7XG4gICAgICAgICAgICAgICAgX3RoaXMuc2V0VGFyZ2V0RGVsdGEodGFyZ2V0RGVsdGEpO1xuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5yZWxhdGl2ZVRhcmdldCAmJlxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5yZWxhdGl2ZVRhcmdldE9yaWdpbiAmJlxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5sYXlvdXQgJiZcbiAgICAgICAgICAgICAgICAgICAgKChfYSA9IF90aGlzLnJlbGF0aXZlUGFyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubGF5b3V0KSkge1xuICAgICAgICAgICAgICAgICAgICBjYWxjUmVsYXRpdmVQb3NpdGlvbihyZWxhdGl2ZUxheW91dCwgX3RoaXMubGF5b3V0LmFjdHVhbCwgX3RoaXMucmVsYXRpdmVQYXJlbnQubGF5b3V0LmFjdHVhbCk7XG4gICAgICAgICAgICAgICAgICAgIG1peEJveChfdGhpcy5yZWxhdGl2ZVRhcmdldCwgX3RoaXMucmVsYXRpdmVUYXJnZXRPcmlnaW4sIHJlbGF0aXZlTGF5b3V0LCBwcm9ncmVzcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpc1NoYXJlZExheW91dEFuaW1hdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBfdGhpcy5hbmltYXRpb25WYWx1ZXMgPSBtaXhlZFZhbHVlcztcbiAgICAgICAgICAgICAgICAgICAgbWl4VmFsdWVzKG1peGVkVmFsdWVzLCBzbmFwc2hvdExhdGVzdFZhbHVlcywgX3RoaXMubGF0ZXN0VmFsdWVzLCBwcm9ncmVzcywgc2hvdWxkQ3Jvc3NmYWRlT3BhY2l0eSwgaXNPbmx5TWVtYmVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgX3RoaXMucm9vdC5zY2hlZHVsZVVwZGF0ZVByb2plY3Rpb24oKTtcbiAgICAgICAgICAgICAgICBfdGhpcy5zY2hlZHVsZVJlbmRlcigpO1xuICAgICAgICAgICAgICAgIF90aGlzLmFuaW1hdGlvblByb2dyZXNzID0gcHJvZ3Jlc3M7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy5taXhUYXJnZXREZWx0YSgwKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnN0YXJ0QW5pbWF0aW9uID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlMaXN0ZW5lcnMoXCJhbmltYXRpb25TdGFydFwiKTtcbiAgICAgICAgICAgIChfYSA9IHRoaXMuY3VycmVudEFuaW1hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0b3AoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc3VtaW5nRnJvbSkge1xuICAgICAgICAgICAgICAgIChfYiA9IHRoaXMucmVzdW1pbmdGcm9tLmN1cnJlbnRBbmltYXRpb24pID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zdG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5wZW5kaW5nQW5pbWF0aW9uKSB7XG4gICAgICAgICAgICAgICAgY2FuY2VsU3luYy51cGRhdGUodGhpcy5wZW5kaW5nQW5pbWF0aW9uKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBlbmRpbmdBbmltYXRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFN0YXJ0IHRoZSBhbmltYXRpb24gaW4gdGhlIG5leHQgZnJhbWUgdG8gaGF2ZSBhIGZyYW1lIHdpdGggcHJvZ3Jlc3MgMCxcbiAgICAgICAgICAgICAqIHdoZXJlIHRoZSB0YXJnZXQgaXMgdGhlIHNhbWUgYXMgd2hlbiB0aGUgYW5pbWF0aW9uIHN0YXJ0ZWQsIHNvIHdlIGNhblxuICAgICAgICAgICAgICogY2FsY3VsYXRlIHRoZSByZWxhdGl2ZSBwb3NpdGlvbnMgY29ycmVjdGx5IGZvciBpbnN0YW50IHRyYW5zaXRpb25zLlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdBbmltYXRpb24gPSBzeW5jLnVwZGF0ZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgZ2xvYmFsUHJvamVjdGlvblN0YXRlLmhhc0FuaW1hdGVkU2luY2VSZXNpemUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIF90aGlzLmN1cnJlbnRBbmltYXRpb24gPSBhbmltYXRlKDAsIGFuaW1hdGlvblRhcmdldCwgX19hc3NpZ24oX19hc3NpZ24oe30sIG9wdGlvbnMpLCB7IG9uVXBkYXRlOiBmdW5jdGlvbiAobGF0ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5taXhUYXJnZXREZWx0YShsYXRlc3QpO1xuICAgICAgICAgICAgICAgICAgICAgICAgKF9hID0gb3B0aW9ucy5vblVwZGF0ZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmNhbGwob3B0aW9ucywgbGF0ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgb25Db21wbGV0ZTogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgICAgICAgICAgKF9hID0gb3B0aW9ucy5vbkNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmNvbXBsZXRlQW5pbWF0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gfSkpO1xuICAgICAgICAgICAgICAgIGlmIChfdGhpcy5yZXN1bWluZ0Zyb20pIHtcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMucmVzdW1pbmdGcm9tLmN1cnJlbnRBbmltYXRpb24gPSBfdGhpcy5jdXJyZW50QW5pbWF0aW9uO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfdGhpcy5wZW5kaW5nQW5pbWF0aW9uID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5jb21wbGV0ZUFuaW1hdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICh0aGlzLnJlc3VtaW5nRnJvbSkge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzdW1pbmdGcm9tLmN1cnJlbnRBbmltYXRpb24gPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXN1bWluZ0Zyb20ucHJlc2VydmVPcGFjaXR5ID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgKF9hID0gdGhpcy5nZXRTdGFjaygpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZXhpdEFuaW1hdGlvbkNvbXBsZXRlKCk7XG4gICAgICAgICAgICB0aGlzLnJlc3VtaW5nRnJvbSA9XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QW5pbWF0aW9uID1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hbmltYXRpb25WYWx1ZXMgPVxuICAgICAgICAgICAgICAgICAgICAgICAgdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5ub3RpZnlMaXN0ZW5lcnMoXCJhbmltYXRpb25Db21wbGV0ZVwiKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmZpbmlzaEFuaW1hdGlvbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRBbmltYXRpb24pIHtcbiAgICAgICAgICAgICAgICAoX2EgPSB0aGlzLm1peFRhcmdldERlbHRhKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbCh0aGlzLCBhbmltYXRpb25UYXJnZXQpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEFuaW1hdGlvbi5zdG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbXBsZXRlQW5pbWF0aW9uKCk7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5hcHBseVRyYW5zZm9ybXNUb1RhcmdldCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYSA9IHRoaXMuZ2V0TGVhZCgpLCB0YXJnZXRXaXRoVHJhbnNmb3JtcyA9IF9hLnRhcmdldFdpdGhUcmFuc2Zvcm1zLCB0YXJnZXQgPSBfYS50YXJnZXQsIGxheW91dCA9IF9hLmxheW91dCwgbGF0ZXN0VmFsdWVzID0gX2EubGF0ZXN0VmFsdWVzO1xuICAgICAgICAgICAgaWYgKCF0YXJnZXRXaXRoVHJhbnNmb3JtcyB8fCAhdGFyZ2V0IHx8ICFsYXlvdXQpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29weUJveEludG8odGFyZ2V0V2l0aFRyYW5zZm9ybXMsIHRhcmdldCk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEFwcGx5IHRoZSBsYXRlc3QgdXNlci1zZXQgdHJhbnNmb3JtcyB0byB0aGUgdGFyZ2V0Qm94IHRvIHByb2R1Y2UgdGhlIHRhcmdldEJveEZpbmFsLlxuICAgICAgICAgICAgICogVGhpcyBpcyB0aGUgZmluYWwgYm94IHRoYXQgd2Ugd2lsbCB0aGVuIHByb2plY3QgaW50byBieSBjYWxjdWxhdGluZyBhIHRyYW5zZm9ybSBkZWx0YSBhbmRcbiAgICAgICAgICAgICAqIGFwcGx5aW5nIGl0IHRvIHRoZSBjb3JyZWN0ZWQgYm94LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0cmFuc2Zvcm1Cb3godGFyZ2V0V2l0aFRyYW5zZm9ybXMsIGxhdGVzdFZhbHVlcyk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIFVwZGF0ZSB0aGUgZGVsdGEgYmV0d2VlbiB0aGUgY29ycmVjdGVkIGJveCBhbmQgdGhlIGZpbmFsIHRhcmdldCBib3gsIGFmdGVyXG4gICAgICAgICAgICAgKiB1c2VyLXNldCB0cmFuc2Zvcm1zIGFyZSBhcHBsaWVkIHRvIGl0LiBUaGlzIHdpbGwgYmUgdXNlZCBieSB0aGUgcmVuZGVyZXIgdG9cbiAgICAgICAgICAgICAqIGNyZWF0ZSBhIHRyYW5zZm9ybSBzdHlsZSB0aGF0IHdpbGwgcmVwcm9qZWN0IHRoZSBlbGVtZW50IGZyb20gaXRzIGFjdHVhbCBsYXlvdXRcbiAgICAgICAgICAgICAqIGludG8gdGhlIGRlc2lyZWQgYm91bmRpbmcgYm94LlxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBjYWxjQm94RGVsdGEodGhpcy5wcm9qZWN0aW9uRGVsdGFXaXRoVHJhbnNmb3JtLCB0aGlzLmxheW91dENvcnJlY3RlZCwgdGFyZ2V0V2l0aFRyYW5zZm9ybXMsIGxhdGVzdFZhbHVlcyk7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5yZWdpc3RlclNoYXJlZE5vZGUgPSBmdW5jdGlvbiAobGF5b3V0SWQsIG5vZGUpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNoYXJlZE5vZGVzLmhhcyhsYXlvdXRJZCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNoYXJlZE5vZGVzLnNldChsYXlvdXRJZCwgbmV3IE5vZGVTdGFjaygpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBzdGFjayA9IHRoaXMuc2hhcmVkTm9kZXMuZ2V0KGxheW91dElkKTtcbiAgICAgICAgICAgIHN0YWNrLmFkZChub2RlKTtcbiAgICAgICAgICAgIG5vZGUucHJvbW90ZSh7XG4gICAgICAgICAgICAgICAgdHJhbnNpdGlvbjogKF9hID0gbm9kZS5vcHRpb25zLmluaXRpYWxQcm9tb3Rpb25Db25maWcpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50cmFuc2l0aW9uLFxuICAgICAgICAgICAgICAgIHByZXNlcnZlRm9sbG93T3BhY2l0eTogKF9jID0gKF9iID0gbm9kZS5vcHRpb25zLmluaXRpYWxQcm9tb3Rpb25Db25maWcpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5zaG91bGRQcmVzZXJ2ZUZvbGxvd09wYWNpdHkpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5jYWxsKF9iLCBub2RlKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuaXNMZWFkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHN0YWNrID0gdGhpcy5nZXRTdGFjaygpO1xuICAgICAgICAgICAgcmV0dXJuIHN0YWNrID8gc3RhY2subGVhZCA9PT0gdGhpcyA6IHRydWU7XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5nZXRMZWFkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdmFyIGxheW91dElkID0gdGhpcy5vcHRpb25zLmxheW91dElkO1xuICAgICAgICAgICAgcmV0dXJuIGxheW91dElkID8gKChfYSA9IHRoaXMuZ2V0U3RhY2soKSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmxlYWQpIHx8IHRoaXMgOiB0aGlzO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuZ2V0UHJldkxlYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB2YXIgbGF5b3V0SWQgPSB0aGlzLm9wdGlvbnMubGF5b3V0SWQ7XG4gICAgICAgICAgICByZXR1cm4gbGF5b3V0SWQgPyAoX2EgPSB0aGlzLmdldFN0YWNrKCkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5wcmV2TGVhZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLmdldFN0YWNrID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGxheW91dElkID0gdGhpcy5vcHRpb25zLmxheW91dElkO1xuICAgICAgICAgICAgaWYgKGxheW91dElkKVxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnJvb3Quc2hhcmVkTm9kZXMuZ2V0KGxheW91dElkKTtcbiAgICAgICAgfTtcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnByb21vdGUgPSBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHZhciBfYiA9IF9hID09PSB2b2lkIDAgPyB7fSA6IF9hLCBuZWVkc1Jlc2V0ID0gX2IubmVlZHNSZXNldCwgdHJhbnNpdGlvbiA9IF9iLnRyYW5zaXRpb24sIHByZXNlcnZlRm9sbG93T3BhY2l0eSA9IF9iLnByZXNlcnZlRm9sbG93T3BhY2l0eTtcbiAgICAgICAgICAgIHZhciBzdGFjayA9IHRoaXMuZ2V0U3RhY2soKTtcbiAgICAgICAgICAgIGlmIChzdGFjaylcbiAgICAgICAgICAgICAgICBzdGFjay5wcm9tb3RlKHRoaXMsIHByZXNlcnZlRm9sbG93T3BhY2l0eSk7XG4gICAgICAgICAgICBpZiAobmVlZHNSZXNldCkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvamVjdGlvbkRlbHRhID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIHRoaXMubmVlZHNSZXNldCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHJhbnNpdGlvbilcbiAgICAgICAgICAgICAgICB0aGlzLnNldE9wdGlvbnMoeyB0cmFuc2l0aW9uOiB0cmFuc2l0aW9uIH0pO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUucmVsZWdhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgc3RhY2sgPSB0aGlzLmdldFN0YWNrKCk7XG4gICAgICAgICAgICBpZiAoc3RhY2spIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc3RhY2sucmVsZWdhdGUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIFByb2plY3Rpb25Ob2RlLnByb3RvdHlwZS5yZXNldFJvdGF0aW9uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIHZpc3VhbEVsZW1lbnQgPSB0aGlzLm9wdGlvbnMudmlzdWFsRWxlbWVudDtcbiAgICAgICAgICAgIGlmICghdmlzdWFsRWxlbWVudClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGRldGVjdGVkIHJvdGF0aW9uIHZhbHVlcywgd2UgY2FuIGVhcmx5IHJldHVybiB3aXRob3V0IGEgZm9yY2VkIHJlbmRlci5cbiAgICAgICAgICAgIHZhciBoYXNSb3RhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIC8vIEtlZXAgYSByZWNvcmQgb2YgYWxsIHRoZSB2YWx1ZXMgd2UndmUgcmVzZXRcbiAgICAgICAgICAgIHZhciByZXNldFZhbHVlcyA9IHt9O1xuICAgICAgICAgICAgLy8gQ2hlY2sgdGhlIHJvdGF0ZSB2YWx1ZSBvZiBhbGwgYXhlcyBhbmQgcmVzZXQgdG8gMFxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0cmFuc2Zvcm1BeGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGF4aXMgPSB0cmFuc2Zvcm1BeGVzW2ldO1xuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBcInJvdGF0ZVwiICsgYXhpcztcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIHJvdGF0aW9uIGRvZXNuJ3QgZXhpc3QgYXMgYSBtb3Rpb24gdmFsdWUsIHRoZW4gd2UgZG9uJ3RcbiAgICAgICAgICAgICAgICAvLyBuZWVkIHRvIHJlc2V0IGl0XG4gICAgICAgICAgICAgICAgaWYgKCF2aXN1YWxFbGVtZW50LmdldFN0YXRpY1ZhbHVlKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGhhc1JvdGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgLy8gUmVjb3JkIHRoZSByb3RhdGlvbiBhbmQgdGhlbiB0ZW1wb3JhcmlseSBzZXQgaXQgdG8gMFxuICAgICAgICAgICAgICAgIHJlc2V0VmFsdWVzW2tleV0gPSB2aXN1YWxFbGVtZW50LmdldFN0YXRpY1ZhbHVlKGtleSk7XG4gICAgICAgICAgICAgICAgdmlzdWFsRWxlbWVudC5zZXRTdGF0aWNWYWx1ZShrZXksIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBubyByb3RhdGlvbiB2YWx1ZXMsIHdlIGRvbid0IG5lZWQgdG8gZG8gYW55IG1vcmUuXG4gICAgICAgICAgICBpZiAoIWhhc1JvdGF0ZSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAvLyBGb3JjZSBhIHJlbmRlciBvZiB0aGlzIGVsZW1lbnQgdG8gYXBwbHkgdGhlIHRyYW5zZm9ybSB3aXRoIGFsbCByb3RhdGlvbnNcbiAgICAgICAgICAgIC8vIHNldCB0byAwLlxuICAgICAgICAgICAgdmlzdWFsRWxlbWVudCA9PT0gbnVsbCB8fCB2aXN1YWxFbGVtZW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2aXN1YWxFbGVtZW50LnN5bmNSZW5kZXIoKTtcbiAgICAgICAgICAgIC8vIFB1dCBiYWNrIGFsbCB0aGUgdmFsdWVzIHdlIHJlc2V0XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcmVzZXRWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICB2aXN1YWxFbGVtZW50LnNldFN0YXRpY1ZhbHVlKGtleSwgcmVzZXRWYWx1ZXNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTY2hlZHVsZSBhIHJlbmRlciBmb3IgdGhlIG5leHQgZnJhbWUuIFRoaXMgZW5zdXJlcyB3ZSB3b24ndCB2aXN1YWxseVxuICAgICAgICAgICAgLy8gc2VlIHRoZSBlbGVtZW50IHdpdGggdGhlIHJlc2V0IHJvdGF0ZSB2YWx1ZSBhcHBsaWVkLlxuICAgICAgICAgICAgdmlzdWFsRWxlbWVudC5zY2hlZHVsZVJlbmRlcigpO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuZ2V0UHJvamVjdGlvblN0eWxlcyA9IGZ1bmN0aW9uIChzdHlsZVByb3ApIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2IsIF9jLCBfZCwgX2UsIF9mO1xuICAgICAgICAgICAgaWYgKHN0eWxlUHJvcCA9PT0gdm9pZCAwKSB7IHN0eWxlUHJvcCA9IHt9OyB9XG4gICAgICAgICAgICAvLyBUT0RPOiBSZXR1cm4gbGlmZWN5Y2xlLXBlcnNpc3RlbnQgb2JqZWN0XG4gICAgICAgICAgICB2YXIgc3R5bGVzID0ge307XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5zdGFuY2UgfHwgdGhpcy5pc1NWRylcbiAgICAgICAgICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgICAgICAgICAgaWYgKCF0aGlzLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZpc2liaWxpdHk6IFwiaGlkZGVuXCIgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0eWxlcy52aXNpYmlsaXR5ID0gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB0cmFuc2Zvcm1UZW1wbGF0ZSA9IChfYSA9IHRoaXMub3B0aW9ucy52aXN1YWxFbGVtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZ2V0UHJvcHMoKS50cmFuc2Zvcm1UZW1wbGF0ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLm5lZWRzUmVzZXQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm5lZWRzUmVzZXQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBzdHlsZXMub3BhY2l0eSA9IFwiXCI7XG4gICAgICAgICAgICAgICAgc3R5bGVzLnBvaW50ZXJFdmVudHMgPVxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlTW90aW9uVmFsdWUoc3R5bGVQcm9wLnBvaW50ZXJFdmVudHMpIHx8IFwiXCI7XG4gICAgICAgICAgICAgICAgc3R5bGVzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgID8gdHJhbnNmb3JtVGVtcGxhdGUodGhpcy5sYXRlc3RWYWx1ZXMsIFwiXCIpXG4gICAgICAgICAgICAgICAgICAgIDogXCJub25lXCI7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBsZWFkID0gdGhpcy5nZXRMZWFkKCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMucHJvamVjdGlvbkRlbHRhIHx8ICF0aGlzLmxheW91dCB8fCAhbGVhZC50YXJnZXQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZW1wdHlTdHlsZXMgPSB7fTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmxheW91dElkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVtcHR5U3R5bGVzLm9wYWNpdHkgPSAoX2IgPSB0aGlzLmxhdGVzdFZhbHVlcy5vcGFjaXR5KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAxO1xuICAgICAgICAgICAgICAgICAgICBlbXB0eVN0eWxlcy5wb2ludGVyRXZlbnRzID1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVNb3Rpb25WYWx1ZShzdHlsZVByb3AucG9pbnRlckV2ZW50cykgfHwgXCJcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzUHJvamVjdGVkICYmICFoYXNUcmFuc2Zvcm0odGhpcy5sYXRlc3RWYWx1ZXMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVtcHR5U3R5bGVzLnRyYW5zZm9ybSA9IHRyYW5zZm9ybVRlbXBsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRyYW5zZm9ybVRlbXBsYXRlKHt9LCBcIlwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBcIm5vbmVcIjtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNQcm9qZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGVtcHR5U3R5bGVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHZhbHVlc1RvUmVuZGVyID0gbGVhZC5hbmltYXRpb25WYWx1ZXMgfHwgbGVhZC5sYXRlc3RWYWx1ZXM7XG4gICAgICAgICAgICB0aGlzLmFwcGx5VHJhbnNmb3Jtc1RvVGFyZ2V0KCk7XG4gICAgICAgICAgICBzdHlsZXMudHJhbnNmb3JtID0gYnVpbGRQcm9qZWN0aW9uVHJhbnNmb3JtKHRoaXMucHJvamVjdGlvbkRlbHRhV2l0aFRyYW5zZm9ybSwgdGhpcy50cmVlU2NhbGUsIHZhbHVlc1RvUmVuZGVyKTtcbiAgICAgICAgICAgIGlmICh0cmFuc2Zvcm1UZW1wbGF0ZSkge1xuICAgICAgICAgICAgICAgIHN0eWxlcy50cmFuc2Zvcm0gPSB0cmFuc2Zvcm1UZW1wbGF0ZSh2YWx1ZXNUb1JlbmRlciwgc3R5bGVzLnRyYW5zZm9ybSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX2cgPSB0aGlzLnByb2plY3Rpb25EZWx0YSwgeCA9IF9nLngsIHkgPSBfZy55O1xuICAgICAgICAgICAgc3R5bGVzLnRyYW5zZm9ybU9yaWdpbiA9IFwiXCIuY29uY2F0KHgub3JpZ2luICogMTAwLCBcIiUgXCIpLmNvbmNhdCh5Lm9yaWdpbiAqIDEwMCwgXCIlIDBcIik7XG4gICAgICAgICAgICBpZiAobGVhZC5hbmltYXRpb25WYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAgICAgKiBJZiB0aGUgbGVhZCBjb21wb25lbnQgaXMgYW5pbWF0aW5nLCBhc3NpZ24gdGhpcyBlaXRoZXIgdGhlIGVudGVyaW5nL2xlYXZpbmdcbiAgICAgICAgICAgICAgICAgKiBvcGFjaXR5XG4gICAgICAgICAgICAgICAgICovXG4gICAgICAgICAgICAgICAgc3R5bGVzLm9wYWNpdHkgPVxuICAgICAgICAgICAgICAgICAgICBsZWFkID09PSB0aGlzXG4gICAgICAgICAgICAgICAgICAgICAgICA/IChfZCA9IChfYyA9IHZhbHVlc1RvUmVuZGVyLm9wYWNpdHkpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IHRoaXMubGF0ZXN0VmFsdWVzLm9wYWNpdHkpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IDFcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdGhpcy5wcmVzZXJ2ZU9wYWNpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMubGF0ZXN0VmFsdWVzLm9wYWNpdHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IHZhbHVlc1RvUmVuZGVyLm9wYWNpdHlFeGl0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogT3Igd2UncmUgbm90IGFuaW1hdGluZyBhdCBhbGwsIHNldCB0aGUgbGVhZCBjb21wb25lbnQgdG8gaXRzIGFjdHVhbFxuICAgICAgICAgICAgICAgICAqIG9wYWNpdHkgYW5kIG90aGVyIGNvbXBvbmVudHMgdG8gaGlkZGVuLlxuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHN0eWxlcy5vcGFjaXR5ID1cbiAgICAgICAgICAgICAgICAgICAgbGVhZCA9PT0gdGhpc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyAoX2UgPSB2YWx1ZXNUb1JlbmRlci5vcGFjaXR5KSAhPT0gbnVsbCAmJiBfZSAhPT0gdm9pZCAwID8gX2UgOiBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgICA6IChfZiA9IHZhbHVlc1RvUmVuZGVyLm9wYWNpdHlFeGl0KSAhPT0gbnVsbCAmJiBfZiAhPT0gdm9pZCAwID8gX2YgOiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBBcHBseSBzY2FsZSBjb3JyZWN0aW9uXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBzY2FsZUNvcnJlY3RvcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWVzVG9SZW5kZXJba2V5XSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB2YXIgX2ggPSBzY2FsZUNvcnJlY3RvcnNba2V5XSwgY29ycmVjdCA9IF9oLmNvcnJlY3QsIGFwcGx5VG8gPSBfaC5hcHBseVRvO1xuICAgICAgICAgICAgICAgIHZhciBjb3JyZWN0ZWQgPSBjb3JyZWN0KHZhbHVlc1RvUmVuZGVyW2tleV0sIGxlYWQpO1xuICAgICAgICAgICAgICAgIGlmIChhcHBseVRvKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBudW0gPSBhcHBseVRvLmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBudW07IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVzW2FwcGx5VG9baV1dID0gY29ycmVjdGVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdHlsZXNba2V5XSA9IGNvcnJlY3RlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIERpc2FibGUgcG9pbnRlciBldmVudHMgb24gZm9sbG93IGNvbXBvbmVudHMuIFRoaXMgaXMgdG8gZW5zdXJlXG4gICAgICAgICAgICAgKiB0aGF0IGlmIGEgZm9sbG93IGNvbXBvbmVudCBjb3ZlcnMgYSBsZWFkIGNvbXBvbmVudCBpdCBkb2Vzbid0IGJsb2NrXG4gICAgICAgICAgICAgKiBwb2ludGVyIGV2ZW50cyBvbiB0aGUgbGVhZC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5sYXlvdXRJZCkge1xuICAgICAgICAgICAgICAgIHN0eWxlcy5wb2ludGVyRXZlbnRzID1cbiAgICAgICAgICAgICAgICAgICAgbGVhZCA9PT0gdGhpc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyByZXNvbHZlTW90aW9uVmFsdWUoc3R5bGVQcm9wLnBvaW50ZXJFdmVudHMpIHx8IFwiXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIDogXCJub25lXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc3R5bGVzO1xuICAgICAgICB9O1xuICAgICAgICBQcm9qZWN0aW9uTm9kZS5wcm90b3R5cGUuY2xlYXJTbmFwc2hvdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMucmVzdW1lRnJvbSA9IHRoaXMuc25hcHNob3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIH07XG4gICAgICAgIC8vIE9ubHkgcnVuIG9uIHJvb3RcbiAgICAgICAgUHJvamVjdGlvbk5vZGUucHJvdG90eXBlLnJlc2V0VHJlZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoaXMucm9vdC5ub2Rlcy5mb3JFYWNoKGZ1bmN0aW9uIChub2RlKSB7IHZhciBfYTsgcmV0dXJuIChfYSA9IG5vZGUuY3VycmVudEFuaW1hdGlvbikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0b3AoKTsgfSk7XG4gICAgICAgICAgICB0aGlzLnJvb3Qubm9kZXMuZm9yRWFjaChjbGVhck1lYXN1cmVtZW50cyk7XG4gICAgICAgICAgICB0aGlzLnJvb3Quc2hhcmVkTm9kZXMuY2xlYXIoKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIFByb2plY3Rpb25Ob2RlO1xuICAgIH0oKSk7XG59XG5mdW5jdGlvbiB1cGRhdGVMYXlvdXQobm9kZSkge1xuICAgIG5vZGUudXBkYXRlTGF5b3V0KCk7XG59XG5mdW5jdGlvbiBub3RpZnlMYXlvdXRVcGRhdGUobm9kZSkge1xuICAgIHZhciBfYSwgX2IsIF9jLCBfZDtcbiAgICB2YXIgc25hcHNob3QgPSAoX2IgPSAoX2EgPSBub2RlLnJlc3VtZUZyb20pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5zbmFwc2hvdCkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogbm9kZS5zbmFwc2hvdDtcbiAgICBpZiAobm9kZS5pc0xlYWQoKSAmJlxuICAgICAgICBub2RlLmxheW91dCAmJlxuICAgICAgICBzbmFwc2hvdCAmJlxuICAgICAgICBub2RlLmhhc0xpc3RlbmVycyhcImRpZFVwZGF0ZVwiKSkge1xuICAgICAgICB2YXIgX2UgPSBub2RlLmxheW91dCwgbGF5b3V0XzEgPSBfZS5hY3R1YWwsIG1lYXN1cmVkTGF5b3V0ID0gX2UubWVhc3VyZWQ7XG4gICAgICAgIC8vIFRPRE8gTWF5YmUgd2Ugd2FudCB0byBhbHNvIHJlc2l6ZSB0aGUgbGF5b3V0IHNuYXBzaG90IHNvIHdlIGRvbid0IHRyaWdnZXJcbiAgICAgICAgLy8gYW5pbWF0aW9ucyBmb3IgaW5zdGFuY2UgaWYgbGF5b3V0PVwic2l6ZVwiIGFuZCBhbiBlbGVtZW50IGhhcyBvbmx5IGNoYW5nZWQgcG9zaXRpb25cbiAgICAgICAgaWYgKG5vZGUub3B0aW9ucy5hbmltYXRpb25UeXBlID09PSBcInNpemVcIikge1xuICAgICAgICAgICAgZWFjaEF4aXMoZnVuY3Rpb24gKGF4aXMpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXhpc1NuYXBzaG90ID0gc25hcHNob3QuaXNTaGFyZWRcbiAgICAgICAgICAgICAgICAgICAgPyBzbmFwc2hvdC5tZWFzdXJlZFtheGlzXVxuICAgICAgICAgICAgICAgICAgICA6IHNuYXBzaG90LmxheW91dFtheGlzXTtcbiAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gY2FsY0xlbmd0aChheGlzU25hcHNob3QpO1xuICAgICAgICAgICAgICAgIGF4aXNTbmFwc2hvdC5taW4gPSBsYXlvdXRfMVtheGlzXS5taW47XG4gICAgICAgICAgICAgICAgYXhpc1NuYXBzaG90Lm1heCA9IGF4aXNTbmFwc2hvdC5taW4gKyBsZW5ndGg7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChub2RlLm9wdGlvbnMuYW5pbWF0aW9uVHlwZSA9PT0gXCJwb3NpdGlvblwiKSB7XG4gICAgICAgICAgICBlYWNoQXhpcyhmdW5jdGlvbiAoYXhpcykge1xuICAgICAgICAgICAgICAgIHZhciBheGlzU25hcHNob3QgPSBzbmFwc2hvdC5pc1NoYXJlZFxuICAgICAgICAgICAgICAgICAgICA/IHNuYXBzaG90Lm1lYXN1cmVkW2F4aXNdXG4gICAgICAgICAgICAgICAgICAgIDogc25hcHNob3QubGF5b3V0W2F4aXNdO1xuICAgICAgICAgICAgICAgIHZhciBsZW5ndGggPSBjYWxjTGVuZ3RoKGxheW91dF8xW2F4aXNdKTtcbiAgICAgICAgICAgICAgICBheGlzU25hcHNob3QubWF4ID0gYXhpc1NuYXBzaG90Lm1pbiArIGxlbmd0aDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHZhciBsYXlvdXREZWx0YSA9IGNyZWF0ZURlbHRhKCk7XG4gICAgICAgIGNhbGNCb3hEZWx0YShsYXlvdXREZWx0YSwgbGF5b3V0XzEsIHNuYXBzaG90LmxheW91dCk7XG4gICAgICAgIHZhciB2aXN1YWxEZWx0YSA9IGNyZWF0ZURlbHRhKCk7XG4gICAgICAgIGlmIChzbmFwc2hvdC5pc1NoYXJlZCkge1xuICAgICAgICAgICAgY2FsY0JveERlbHRhKHZpc3VhbERlbHRhLCBub2RlLmFwcGx5VHJhbnNmb3JtKG1lYXN1cmVkTGF5b3V0LCB0cnVlKSwgc25hcHNob3QubWVhc3VyZWQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2FsY0JveERlbHRhKHZpc3VhbERlbHRhLCBsYXlvdXRfMSwgc25hcHNob3QubGF5b3V0KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaGFzTGF5b3V0Q2hhbmdlZCA9ICFpc0RlbHRhWmVybyhsYXlvdXREZWx0YSk7XG4gICAgICAgIHZhciBoYXNSZWxhdGl2ZVRhcmdldENoYW5nZWQgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFub2RlLnJlc3VtZUZyb20pIHtcbiAgICAgICAgICAgIG5vZGUucmVsYXRpdmVQYXJlbnQgPSBub2RlLmdldENsb3Nlc3RQcm9qZWN0aW5nUGFyZW50KCk7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIElmIHRoZSByZWxhdGl2ZVBhcmVudCBpcyBpdHNlbGYgcmVzdW1pbmcgZnJvbSBhIGRpZmZlcmVudCBlbGVtZW50IHRoZW5cbiAgICAgICAgICAgICAqIHRoZSByZWxhdGl2ZSBzbmFwc2hvdCBpcyBub3QgcmVsYXZlbnRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgaWYgKG5vZGUucmVsYXRpdmVQYXJlbnQgJiYgIW5vZGUucmVsYXRpdmVQYXJlbnQucmVzdW1lRnJvbSkge1xuICAgICAgICAgICAgICAgIHZhciBfZiA9IG5vZGUucmVsYXRpdmVQYXJlbnQsIHBhcmVudFNuYXBzaG90ID0gX2Yuc25hcHNob3QsIHBhcmVudExheW91dCA9IF9mLmxheW91dDtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50U25hcHNob3QgJiYgcGFyZW50TGF5b3V0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZWxhdGl2ZVNuYXBzaG90ID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGNSZWxhdGl2ZVBvc2l0aW9uKHJlbGF0aXZlU25hcHNob3QsIHNuYXBzaG90LmxheW91dCwgcGFyZW50U25hcHNob3QubGF5b3V0KTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGF0aXZlTGF5b3V0ID0gY3JlYXRlQm94KCk7XG4gICAgICAgICAgICAgICAgICAgIGNhbGNSZWxhdGl2ZVBvc2l0aW9uKHJlbGF0aXZlTGF5b3V0LCBsYXlvdXRfMSwgcGFyZW50TGF5b3V0LmFjdHVhbCk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYm94RXF1YWxzKHJlbGF0aXZlU25hcHNob3QsIHJlbGF0aXZlTGF5b3V0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFzUmVsYXRpdmVUYXJnZXRDaGFuZ2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBub2RlLm5vdGlmeUxpc3RlbmVycyhcImRpZFVwZGF0ZVwiLCB7XG4gICAgICAgICAgICBsYXlvdXQ6IGxheW91dF8xLFxuICAgICAgICAgICAgc25hcHNob3Q6IHNuYXBzaG90LFxuICAgICAgICAgICAgZGVsdGE6IHZpc3VhbERlbHRhLFxuICAgICAgICAgICAgbGF5b3V0RGVsdGE6IGxheW91dERlbHRhLFxuICAgICAgICAgICAgaGFzTGF5b3V0Q2hhbmdlZDogaGFzTGF5b3V0Q2hhbmdlZCxcbiAgICAgICAgICAgIGhhc1JlbGF0aXZlVGFyZ2V0Q2hhbmdlZDogaGFzUmVsYXRpdmVUYXJnZXRDaGFuZ2VkLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAobm9kZS5pc0xlYWQoKSkge1xuICAgICAgICAoX2QgPSAoX2MgPSBub2RlLm9wdGlvbnMpLm9uRXhpdENvbXBsZXRlKSA9PT0gbnVsbCB8fCBfZCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2QuY2FsbChfYyk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsZWFyaW5nIHRyYW5zaXRpb25cbiAgICAgKiBUT0RPOiBJbnZlc3RpZ2F0ZSB3aHkgdGhpcyB0cmFuc2l0aW9uIGlzIGJlaW5nIHBhc3NlZCBpbiBhcyB7dHlwZTogZmFsc2UgfSBmcm9tIEZyYW1lclxuICAgICAqIGFuZCB3aHkgd2UgbmVlZCBpdCBhdCBhbGxcbiAgICAgKi9cbiAgICBub2RlLm9wdGlvbnMudHJhbnNpdGlvbiA9IHVuZGVmaW5lZDtcbn1cbmZ1bmN0aW9uIGNsZWFyU25hcHNob3Qobm9kZSkge1xuICAgIG5vZGUuY2xlYXJTbmFwc2hvdCgpO1xufVxuZnVuY3Rpb24gY2xlYXJNZWFzdXJlbWVudHMobm9kZSkge1xuICAgIG5vZGUuY2xlYXJNZWFzdXJlbWVudHMoKTtcbn1cbmZ1bmN0aW9uIHJlc2V0VHJhbnNmb3JtU3R5bGUobm9kZSkge1xuICAgIHZhciB2aXN1YWxFbGVtZW50ID0gbm9kZS5vcHRpb25zLnZpc3VhbEVsZW1lbnQ7XG4gICAgaWYgKHZpc3VhbEVsZW1lbnQgPT09IG51bGwgfHwgdmlzdWFsRWxlbWVudCA9PT0gdm9pZCAwID8gdm9pZCAwIDogdmlzdWFsRWxlbWVudC5nZXRQcm9wcygpLm9uQmVmb3JlTGF5b3V0TWVhc3VyZSkge1xuICAgICAgICB2aXN1YWxFbGVtZW50Lm5vdGlmeUJlZm9yZUxheW91dE1lYXN1cmUoKTtcbiAgICB9XG4gICAgbm9kZS5yZXNldFRyYW5zZm9ybSgpO1xufVxuZnVuY3Rpb24gZmluaXNoQW5pbWF0aW9uKG5vZGUpIHtcbiAgICBub2RlLmZpbmlzaEFuaW1hdGlvbigpO1xuICAgIG5vZGUudGFyZ2V0RGVsdGEgPSBub2RlLnJlbGF0aXZlVGFyZ2V0ID0gbm9kZS50YXJnZXQgPSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiByZXNvbHZlVGFyZ2V0RGVsdGEobm9kZSkge1xuICAgIG5vZGUucmVzb2x2ZVRhcmdldERlbHRhKCk7XG59XG5mdW5jdGlvbiBjYWxjUHJvamVjdGlvbihub2RlKSB7XG4gICAgbm9kZS5jYWxjUHJvamVjdGlvbigpO1xufVxuZnVuY3Rpb24gcmVzZXRSb3RhdGlvbihub2RlKSB7XG4gICAgbm9kZS5yZXNldFJvdGF0aW9uKCk7XG59XG5mdW5jdGlvbiByZW1vdmVMZWFkU25hcHNob3RzKHN0YWNrKSB7XG4gICAgc3RhY2sucmVtb3ZlTGVhZFNuYXBzaG90KCk7XG59XG5mdW5jdGlvbiBtaXhBeGlzRGVsdGEob3V0cHV0LCBkZWx0YSwgcCkge1xuICAgIG91dHB1dC50cmFuc2xhdGUgPSBtaXgoZGVsdGEudHJhbnNsYXRlLCAwLCBwKTtcbiAgICBvdXRwdXQuc2NhbGUgPSBtaXgoZGVsdGEuc2NhbGUsIDEsIHApO1xuICAgIG91dHB1dC5vcmlnaW4gPSBkZWx0YS5vcmlnaW47XG4gICAgb3V0cHV0Lm9yaWdpblBvaW50ID0gZGVsdGEub3JpZ2luUG9pbnQ7XG59XG5mdW5jdGlvbiBtaXhBeGlzKG91dHB1dCwgZnJvbSwgdG8sIHApIHtcbiAgICBvdXRwdXQubWluID0gbWl4KGZyb20ubWluLCB0by5taW4sIHApO1xuICAgIG91dHB1dC5tYXggPSBtaXgoZnJvbS5tYXgsIHRvLm1heCwgcCk7XG59XG5mdW5jdGlvbiBtaXhCb3gob3V0cHV0LCBmcm9tLCB0bywgcCkge1xuICAgIG1peEF4aXMob3V0cHV0LngsIGZyb20ueCwgdG8ueCwgcCk7XG4gICAgbWl4QXhpcyhvdXRwdXQueSwgZnJvbS55LCB0by55LCBwKTtcbn1cbmZ1bmN0aW9uIGhhc09wYWNpdHlDcm9zc2ZhZGUobm9kZSkge1xuICAgIHJldHVybiAobm9kZS5hbmltYXRpb25WYWx1ZXMgJiYgbm9kZS5hbmltYXRpb25WYWx1ZXMub3BhY2l0eUV4aXQgIT09IHVuZGVmaW5lZCk7XG59XG52YXIgZGVmYXVsdExheW91dFRyYW5zaXRpb24gPSB7XG4gICAgZHVyYXRpb246IDAuNDUsXG4gICAgZWFzZTogWzAuNCwgMCwgMC4xLCAxXSxcbn07XG5mdW5jdGlvbiBtb3VudE5vZGVFYXJseShub2RlLCBpZCkge1xuICAgIC8qKlxuICAgICAqIFJhdGhlciB0aGFuIHNlYXJjaGluZyB0aGUgRE9NIGZyb20gZG9jdW1lbnQgd2UgY2FuIHNlYXJjaCB0aGVcbiAgICAgKiBwYXRoIGZvciB0aGUgZGVlcGVzdCBtb3VudGVkIGFuY2VzdG9yIGFuZCBzZWFyY2ggZnJvbSB0aGVyZVxuICAgICAqL1xuICAgIHZhciBzZWFyY2hOb2RlID0gbm9kZS5yb290O1xuICAgIGZvciAodmFyIGkgPSBub2RlLnBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgaWYgKEJvb2xlYW4obm9kZS5wYXRoW2ldLmluc3RhbmNlKSkge1xuICAgICAgICAgICAgc2VhcmNoTm9kZSA9IG5vZGUucGF0aFtpXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIHZhciBzZWFyY2hFbGVtZW50ID0gc2VhcmNoTm9kZSAmJiBzZWFyY2hOb2RlICE9PSBub2RlLnJvb3QgPyBzZWFyY2hOb2RlLmluc3RhbmNlIDogZG9jdW1lbnQ7XG4gICAgdmFyIGVsZW1lbnQgPSBzZWFyY2hFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoXCJbZGF0YS1wcm9qZWN0aW9uLWlkPVxcXCJcIi5jb25jYXQoaWQsIFwiXFxcIl1cIikpO1xuICAgIGlmIChlbGVtZW50KVxuICAgICAgICBub2RlLm1vdW50KGVsZW1lbnQsIHRydWUpO1xufVxuZnVuY3Rpb24gcm91bmRBeGlzKGF4aXMpIHtcbiAgICBheGlzLm1pbiA9IE1hdGgucm91bmQoYXhpcy5taW4pO1xuICAgIGF4aXMubWF4ID0gTWF0aC5yb3VuZChheGlzLm1heCk7XG59XG5mdW5jdGlvbiByb3VuZEJveChib3gpIHtcbiAgICByb3VuZEF4aXMoYm94LngpO1xuICAgIHJvdW5kQXhpcyhib3gueSk7XG59XG5cbmV4cG9ydCB7IGNyZWF0ZVByb2plY3Rpb25Ob2RlLCBtaXhBeGlzLCBtaXhBeGlzRGVsdGEsIG1peEJveCB9O1xuIiwiaW1wb3J0IHsgbW90aW9uVmFsdWUgfSBmcm9tICcuLi92YWx1ZS9pbmRleC5tanMnO1xuaW1wb3J0IHsgaXNNb3Rpb25WYWx1ZSB9IGZyb20gJy4uL3ZhbHVlL3V0aWxzL2lzLW1vdGlvbi12YWx1ZS5tanMnO1xuaW1wb3J0IHsgc3RhcnRBbmltYXRpb24gfSBmcm9tICcuL3V0aWxzL3RyYW5zaXRpb25zLm1qcyc7XG5cbi8qKlxuICogQW5pbWF0ZSBhIHNpbmdsZSB2YWx1ZSBvciBhIGBNb3Rpb25WYWx1ZWAuXG4gKlxuICogVGhlIGZpcnN0IGFyZ3VtZW50IGlzIGVpdGhlciBhIGBNb3Rpb25WYWx1ZWAgdG8gYW5pbWF0ZSwgb3IgYW4gaW5pdGlhbCBhbmltYXRpb24gdmFsdWUuXG4gKlxuICogVGhlIHNlY29uZCBpcyBlaXRoZXIgYSB2YWx1ZSB0byBhbmltYXRlIHRvLCBvciBhbiBhcnJheSBvZiBrZXlmcmFtZXMgdG8gYW5pbWF0ZSB0aHJvdWdoLlxuICpcbiAqIFRoZSB0aGlyZCBhcmd1bWVudCBjYW4gYmUgZWl0aGVyIHR3ZWVuIG9yIHNwcmluZyBvcHRpb25zLCBhbmQgb3B0aW9uYWwgbGlmZWN5Y2xlIG1ldGhvZHM6IGBvblVwZGF0ZWAsIGBvblBsYXlgLCBgb25Db21wbGV0ZWAsIGBvblJlcGVhdGAgYW5kIGBvblN0b3BgLlxuICpcbiAqIFJldHVybnMgYEFuaW1hdGlvblBsYXliYWNrQ29udHJvbHNgLCBjdXJyZW50bHkganVzdCBhIGBzdG9wYCBtZXRob2QuXG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogY29uc3QgeCA9IHVzZU1vdGlvblZhbHVlKDApXG4gKlxuICogdXNlRWZmZWN0KCgpID0+IHtcbiAqICAgY29uc3QgY29udHJvbHMgPSBhbmltYXRlKHgsIDEwMCwge1xuICogICAgIHR5cGU6IFwic3ByaW5nXCIsXG4gKiAgICAgc3RpZmZuZXNzOiAyMDAwLFxuICogICAgIG9uQ29tcGxldGU6IHYgPT4ge31cbiAqICAgfSlcbiAqXG4gKiAgIHJldHVybiBjb250cm9scy5zdG9wXG4gKiB9KVxuICogYGBgXG4gKlxuICogQHB1YmxpY1xuICovXG5mdW5jdGlvbiBhbmltYXRlKGZyb20sIHRvLCB0cmFuc2l0aW9uKSB7XG4gICAgaWYgKHRyYW5zaXRpb24gPT09IHZvaWQgMCkgeyB0cmFuc2l0aW9uID0ge307IH1cbiAgICB2YXIgdmFsdWUgPSBpc01vdGlvblZhbHVlKGZyb20pID8gZnJvbSA6IG1vdGlvblZhbHVlKGZyb20pO1xuICAgIHN0YXJ0QW5pbWF0aW9uKFwiXCIsIHZhbHVlLCB0bywgdHJhbnNpdGlvbik7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgc3RvcDogZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWUuc3RvcCgpOyB9LFxuICAgICAgICBpc0FuaW1hdGluZzogZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWUuaXNBbmltYXRpbmcoKTsgfSxcbiAgICB9O1xufVxuXG5leHBvcnQgeyBhbmltYXRlIH07XG4iLCJpbXBvcnQgeyBjcmVhdGVQcm9qZWN0aW9uTm9kZSB9IGZyb20gJy4vY3JlYXRlLXByb2plY3Rpb24tbm9kZS5tanMnO1xuaW1wb3J0IHsgYWRkRG9tRXZlbnQgfSBmcm9tICcuLi8uLi9ldmVudHMvdXNlLWRvbS1ldmVudC5tanMnO1xuXG52YXIgRG9jdW1lbnRQcm9qZWN0aW9uTm9kZSA9IGNyZWF0ZVByb2plY3Rpb25Ob2RlKHtcbiAgICBhdHRhY2hSZXNpemVMaXN0ZW5lcjogZnVuY3Rpb24gKHJlZiwgbm90aWZ5KSB7IHJldHVybiBhZGREb21FdmVudChyZWYsIFwicmVzaXplXCIsIG5vdGlmeSk7IH0sXG4gICAgbWVhc3VyZVNjcm9sbDogZnVuY3Rpb24gKCkgeyByZXR1cm4gKHtcbiAgICAgICAgeDogZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbExlZnQgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0LFxuICAgICAgICB5OiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsVG9wIHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wLFxuICAgIH0pOyB9LFxuICAgIGNoZWNrSXNTY3JvbGxSb290OiBmdW5jdGlvbiAoKSB7IHJldHVybiB0cnVlOyB9LFxufSk7XG5cbmV4cG9ydCB7IERvY3VtZW50UHJvamVjdGlvbk5vZGUgfTtcbiIsImltcG9ydCB7IGNyZWF0ZVByb2plY3Rpb25Ob2RlIH0gZnJvbSAnLi9jcmVhdGUtcHJvamVjdGlvbi1ub2RlLm1qcyc7XG5pbXBvcnQgeyBEb2N1bWVudFByb2plY3Rpb25Ob2RlIH0gZnJvbSAnLi9Eb2N1bWVudFByb2plY3Rpb25Ob2RlLm1qcyc7XG5cbnZhciByb290UHJvamVjdGlvbk5vZGUgPSB7XG4gICAgY3VycmVudDogdW5kZWZpbmVkLFxufTtcbnZhciBIVE1MUHJvamVjdGlvbk5vZGUgPSBjcmVhdGVQcm9qZWN0aW9uTm9kZSh7XG4gICAgbWVhc3VyZVNjcm9sbDogZnVuY3Rpb24gKGluc3RhbmNlKSB7IHJldHVybiAoe1xuICAgICAgICB4OiBpbnN0YW5jZS5zY3JvbGxMZWZ0LFxuICAgICAgICB5OiBpbnN0YW5jZS5zY3JvbGxUb3AsXG4gICAgfSk7IH0sXG4gICAgZGVmYXVsdFBhcmVudDogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXJvb3RQcm9qZWN0aW9uTm9kZS5jdXJyZW50KSB7XG4gICAgICAgICAgICB2YXIgZG9jdW1lbnROb2RlID0gbmV3IERvY3VtZW50UHJvamVjdGlvbk5vZGUoMCwge30pO1xuICAgICAgICAgICAgZG9jdW1lbnROb2RlLm1vdW50KHdpbmRvdyk7XG4gICAgICAgICAgICBkb2N1bWVudE5vZGUuc2V0T3B0aW9ucyh7IGxheW91dFNjcm9sbDogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHJvb3RQcm9qZWN0aW9uTm9kZS5jdXJyZW50ID0gZG9jdW1lbnROb2RlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByb290UHJvamVjdGlvbk5vZGUuY3VycmVudDtcbiAgICB9LFxuICAgIHJlc2V0VHJhbnNmb3JtOiBmdW5jdGlvbiAoaW5zdGFuY2UsIHZhbHVlKSB7XG4gICAgICAgIGluc3RhbmNlLnN0eWxlLnRyYW5zZm9ybSA9IHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB2b2lkIDAgPyB2YWx1ZSA6IFwibm9uZVwiO1xuICAgIH0sXG4gICAgY2hlY2tJc1Njcm9sbFJvb3Q6IGZ1bmN0aW9uIChpbnN0YW5jZSkge1xuICAgICAgICByZXR1cm4gQm9vbGVhbih3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShpbnN0YW5jZSkucG9zaXRpb24gPT09IFwiZml4ZWRcIik7XG4gICAgfSxcbn0pO1xuXG5leHBvcnQgeyBIVE1MUHJvamVjdGlvbk5vZGUsIHJvb3RQcm9qZWN0aW9uTm9kZSB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBjcmVhdGVNb3Rpb25Db21wb25lbnQgfSBmcm9tICcuLi8uLi9tb3Rpb24vaW5kZXgubWpzJztcbmltcG9ydCB7IGNyZWF0ZU1vdGlvblByb3h5IH0gZnJvbSAnLi9tb3Rpb24tcHJveHkubWpzJztcbmltcG9ydCB7IGNyZWF0ZURvbU1vdGlvbkNvbmZpZyB9IGZyb20gJy4vdXRpbHMvY3JlYXRlLWNvbmZpZy5tanMnO1xuaW1wb3J0IHsgZ2VzdHVyZUFuaW1hdGlvbnMgfSBmcm9tICcuLi8uLi9tb3Rpb24vZmVhdHVyZXMvZ2VzdHVyZXMubWpzJztcbmltcG9ydCB7IGFuaW1hdGlvbnMgfSBmcm9tICcuLi8uLi9tb3Rpb24vZmVhdHVyZXMvYW5pbWF0aW9ucy5tanMnO1xuaW1wb3J0IHsgZHJhZyB9IGZyb20gJy4uLy4uL21vdGlvbi9mZWF0dXJlcy9kcmFnLm1qcyc7XG5pbXBvcnQgeyBjcmVhdGVEb21WaXN1YWxFbGVtZW50IH0gZnJvbSAnLi9jcmVhdGUtdmlzdWFsLWVsZW1lbnQubWpzJztcbmltcG9ydCB7IGxheW91dEZlYXR1cmVzIH0gZnJvbSAnLi4vLi4vbW90aW9uL2ZlYXR1cmVzL2xheW91dC9pbmRleC5tanMnO1xuaW1wb3J0IHsgSFRNTFByb2plY3Rpb25Ob2RlIH0gZnJvbSAnLi4vLi4vcHJvamVjdGlvbi9ub2RlL0hUTUxQcm9qZWN0aW9uTm9kZS5tanMnO1xuXG52YXIgZmVhdHVyZUJ1bmRsZSA9IF9fYXNzaWduKF9fYXNzaWduKF9fYXNzaWduKF9fYXNzaWduKHt9LCBhbmltYXRpb25zKSwgZ2VzdHVyZUFuaW1hdGlvbnMpLCBkcmFnKSwgbGF5b3V0RmVhdHVyZXMpO1xuLyoqXG4gKiBIVE1MICYgU1ZHIGNvbXBvbmVudHMsIG9wdGltaXNlZCBmb3IgdXNlIHdpdGggZ2VzdHVyZXMgYW5kIGFuaW1hdGlvbi4gVGhlc2UgY2FuIGJlIHVzZWQgYXNcbiAqIGRyb3AtaW4gcmVwbGFjZW1lbnRzIGZvciBhbnkgSFRNTCAmIFNWRyBjb21wb25lbnQsIGFsbCBDU1MgJiBTVkcgcHJvcGVydGllcyBhcmUgc3VwcG9ydGVkLlxuICpcbiAqIEBwdWJsaWNcbiAqL1xudmFyIG1vdGlvbiA9IC8qQF9fUFVSRV9fKi8gY3JlYXRlTW90aW9uUHJveHkoZnVuY3Rpb24gKENvbXBvbmVudCwgY29uZmlnKSB7XG4gICAgcmV0dXJuIGNyZWF0ZURvbU1vdGlvbkNvbmZpZyhDb21wb25lbnQsIGNvbmZpZywgZmVhdHVyZUJ1bmRsZSwgY3JlYXRlRG9tVmlzdWFsRWxlbWVudCwgSFRNTFByb2plY3Rpb25Ob2RlKTtcbn0pO1xuLyoqXG4gKiBDcmVhdGUgYSBET00gYG1vdGlvbmAgY29tcG9uZW50IHdpdGggdGhlIHByb3ZpZGVkIHN0cmluZy4gVGhpcyBpcyBwcmltYXJpbHkgaW50ZW5kZWRcbiAqIGFzIGEgZnVsbCBhbHRlcm5hdGl2ZSB0byBgbW90aW9uYCBmb3IgY29uc3VtZXJzIHdobyBoYXZlIHRvIHN1cHBvcnQgZW52aXJvbm1lbnRzIHRoYXQgZG9uJ3RcbiAqIHN1cHBvcnQgYFByb3h5YC5cbiAqXG4gKiBgYGBqYXZhc2NyaXB0XG4gKiBpbXBvcnQgeyBjcmVhdGVEb21Nb3Rpb25Db21wb25lbnQgfSBmcm9tIFwiZnJhbWVyLW1vdGlvblwiXG4gKlxuICogY29uc3QgbW90aW9uID0ge1xuICogICBkaXY6IGNyZWF0ZURvbU1vdGlvbkNvbXBvbmVudCgnZGl2JylcbiAqIH1cbiAqIGBgYFxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRG9tTW90aW9uQ29tcG9uZW50KGtleSkge1xuICAgIHJldHVybiBjcmVhdGVNb3Rpb25Db21wb25lbnQoY3JlYXRlRG9tTW90aW9uQ29uZmlnKGtleSwgeyBmb3J3YXJkTW90aW9uUHJvcHM6IGZhbHNlIH0sIGZlYXR1cmVCdW5kbGUsIGNyZWF0ZURvbVZpc3VhbEVsZW1lbnQsIEhUTUxQcm9qZWN0aW9uTm9kZSkpO1xufVxuXG5leHBvcnQgeyBjcmVhdGVEb21Nb3Rpb25Db21wb25lbnQsIG1vdGlvbiB9O1xuIiwiaW1wb3J0IHsgX19hc3NpZ24gfSBmcm9tICd0c2xpYic7XG5pbXBvcnQgeyBpc1NWR0NvbXBvbmVudCB9IGZyb20gJy4vaXMtc3ZnLWNvbXBvbmVudC5tanMnO1xuaW1wb3J0IHsgY3JlYXRlVXNlUmVuZGVyIH0gZnJvbSAnLi4vdXNlLXJlbmRlci5tanMnO1xuaW1wb3J0IHsgc3ZnTW90aW9uQ29uZmlnIH0gZnJvbSAnLi4vLi4vc3ZnL2NvbmZpZy1tb3Rpb24ubWpzJztcbmltcG9ydCB7IGh0bWxNb3Rpb25Db25maWcgfSBmcm9tICcuLi8uLi9odG1sL2NvbmZpZy1tb3Rpb24ubWpzJztcblxuZnVuY3Rpb24gY3JlYXRlRG9tTW90aW9uQ29uZmlnKENvbXBvbmVudCwgX2EsIHByZWxvYWRlZEZlYXR1cmVzLCBjcmVhdGVWaXN1YWxFbGVtZW50LCBwcm9qZWN0aW9uTm9kZUNvbnN0cnVjdG9yKSB7XG4gICAgdmFyIF9iID0gX2EuZm9yd2FyZE1vdGlvblByb3BzLCBmb3J3YXJkTW90aW9uUHJvcHMgPSBfYiA9PT0gdm9pZCAwID8gZmFsc2UgOiBfYjtcbiAgICB2YXIgYmFzZUNvbmZpZyA9IGlzU1ZHQ29tcG9uZW50KENvbXBvbmVudClcbiAgICAgICAgPyBzdmdNb3Rpb25Db25maWdcbiAgICAgICAgOiBodG1sTW90aW9uQ29uZmlnO1xuICAgIHJldHVybiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgYmFzZUNvbmZpZyksIHsgcHJlbG9hZGVkRmVhdHVyZXM6IHByZWxvYWRlZEZlYXR1cmVzLCB1c2VSZW5kZXI6IGNyZWF0ZVVzZVJlbmRlcihmb3J3YXJkTW90aW9uUHJvcHMpLCBjcmVhdGVWaXN1YWxFbGVtZW50OiBjcmVhdGVWaXN1YWxFbGVtZW50LCBwcm9qZWN0aW9uTm9kZUNvbnN0cnVjdG9yOiBwcm9qZWN0aW9uTm9kZUNvbnN0cnVjdG9yLCBDb21wb25lbnQ6IENvbXBvbmVudCB9KTtcbn1cblxuZXhwb3J0IHsgY3JlYXRlRG9tTW90aW9uQ29uZmlnIH07XG4iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKTsiLCJleHBvcnQgY29uc3QgQXBwUGF0aHMgPSB7XG4gIFNIT1dST09NOiBcIi9zaG93cm9vbVwiLFxuICBTRU5ET1VUUzogXCIvc2VuZG91dHNcIixcbiAgU0VORE9VVFNfQ01TOiBcIi9zZW5kb3V0cy1jbXNcIixcbiAgTUFSS0VUSU5HX0VOR0lORTogXCIvbWVkaWFcIixcbiAgVVNFUl9NQU5BR0VNRU5UOiBcIi91c2Vyc1wiLFxuICBURU5BTlRTOiBcIi90ZW5hbnRzXCIsXG4gIERBU0hCT0FSRDogXCIvZGFzaGJvYXJkXCIsXG4gIERBU0hCT0FSRF9DUkVBVEVfV09SS1NQQUNFX01PREFMOiBcIi9kYXNoYm9hcmQvY3JlYXRlLXdvcmtzcGFjZVwiLFxuICBDUkVBVEVfV09SS1NQQUNFOiBcIi9jcmVhdGUtd29ya3NwYWNlXCIsXG4gIFNFVFRJTkdTOiBcIi9zZXR0aW5nc1wiLFxuICBJTlNUT1JFX0FETUlOOiBcIi9pbnN0b3JlLWFkbWluXCIsXG4gIFNVUEVSQURNSU46IFwiL3N1cGVyYWRtaW5cIixcbiAgQ01TOiBcIi9jbXNcIixcbn07XG5cbmV4cG9ydCBjb25zdCBURU5BTlRTX1RJRVJfV0lEVEggPSAzMDA7XG5leHBvcnQgY29uc3QgQVBQTElDQVRJT05TX1RJRVJfV0lEVEggPSAzMDA7XG4iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcIkB0b3VjaHRlY2gvd2ViLWF1dGhcIik7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJAdG91Y2h0ZWNoL3dlYi10ZW5hbnQtaWQtcHJvdmlkZXJcIik7IiwiaW1wb3J0IFJlYWN0LCB7XG4gIHVzZUNhbGxiYWNrLFxuICB1c2VDb250ZXh0LFxuICB1c2VFZmZlY3QsXG4gIHVzZU1lbW8sXG4gIHVzZVN0YXRlLFxufSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHtcbiAgQXV0aENvbnRleHQsXG4gIFByaXZpbGVnZXMsXG4gIHVzZXJIYXNUZW5hbnRBY2Nlc3MsXG59IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1hdXRoXCI7XG5pbXBvcnQgeyBUZW5hbnRJZENvbnRleHQgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItdGVuYW50LWlkLXByb3ZpZGVyXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgb25OYXZpZ2F0aW9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xufTtcblxudHlwZSBOYXZpZ2F0aW9uVmlld1N0YXRlID0ge1xuICBzZWxlY3RlZFRlbmFudElkOiBzdHJpbmc7XG4gIGN1cnJlbnRQb3NpdGlvbjogTmF2aWdhdGlvblBvc2l0aW9uO1xufTtcblxuZXhwb3J0IHR5cGUgTmF2aWdhdGlvbkNvbnRleHRWYWx1ZSA9IHtcbiAgaGFzTWFya2V0aW5nRW5naW5lQWNjZXNzOiBib29sZWFuO1xuICBoYXNTaG93cm9vbUFjY2VzczogYm9vbGVhbjtcbiAgaGFzU2VuZG91dHNBY2Nlc3M6IGJvb2xlYW47XG4gIGhhc0Ntc0FjY2VzczogYm9vbGVhbjtcbiAgaGFzVXNlck1hbmFnZW1lbnRBY2Nlc3M6IGJvb2xlYW47XG4gIGhhc1VuaXZlcnNhbEFjY2VzczogYm9vbGVhbjtcbiAgaGFzU2V0dGluZ3NBY2Nlc3M6IGJvb2xlYW47XG4gIGhhc0luc3RvcmVBY2Nlc3M6IGJvb2xlYW47XG4gIHZpZXdTdGF0ZTogTmF2aWdhdGlvblZpZXdTdGF0ZTtcbiAgdXBkYXRlVmlld1N0YXRlOiAodmlld1N0YXRlVXBkYXRlOiBQYXJ0aWFsPE5hdmlnYXRpb25WaWV3U3RhdGU+KSA9PiB2b2lkO1xuICBzaWduT3V0OiAoKSA9PiB2b2lkO1xuICB0b2dnbGVUZW5hbnRzOiAoKSA9PiB2b2lkO1xuICBvbk5hdmlnYXRpb25DbG9zZTogKCkgPT4gdm9pZDtcbn07XG5cbmV4cG9ydCBlbnVtIE5hdmlnYXRpb25Qb3NpdGlvbiB7XG4gIE9QRU4gPSBcIk9QRU5cIixcbiAgSElEREVOID0gXCJISURERU5cIixcbiAgRVhQQU5ERUQgPSBcIkVYUEFOREVEXCIsXG59XG5cbmV4cG9ydCBjb25zdCBOYXZpZ2F0aW9uQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8TmF2aWdhdGlvbkNvbnRleHRWYWx1ZT4oXG4gIHt9IGFzIE5hdmlnYXRpb25Db250ZXh0VmFsdWVcbik7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VOYXZpZ2F0aW9uQ29udGV4dCgpIHtcbiAgcmV0dXJuIHVzZUNvbnRleHQoTmF2aWdhdGlvbkNvbnRleHQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gTmF2aWdhdGlvbkNvbnRleHRQcm92aWRlcih7XG4gIGNoaWxkcmVuLFxuICBpc09wZW4sXG4gIG9uTmF2aWdhdGlvbkNsb3NlID0gKCkgPT4ge30sXG59OiBQcm9wcykge1xuICBjb25zdCBbdGVuYW50SWRdID0gdXNlQ29udGV4dChUZW5hbnRJZENvbnRleHQpO1xuICBjb25zdCBbdmlld1N0YXRlLCBzZXRWaWV3U3RhdGVdID0gdXNlU3RhdGU8TmF2aWdhdGlvblZpZXdTdGF0ZT4oe1xuICAgIHNlbGVjdGVkVGVuYW50SWQ6IHRlbmFudElkIGFzIHN0cmluZyxcbiAgICBjdXJyZW50UG9zaXRpb246IE5hdmlnYXRpb25Qb3NpdGlvbi5ISURERU4sXG4gIH0pO1xuXG4gIGNvbnN0IHsgdXNlciwgYXV0aFNlcnZpY2UsIGNhblNpZ25PdXQgfSA9IHVzZUNvbnRleHQoQXV0aENvbnRleHQpO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzT3Blbikge1xuICAgICAgc2V0Vmlld1N0YXRlKChwcmV2Vmlld1N0YXRlKSA9PiAoe1xuICAgICAgICAuLi5wcmV2Vmlld1N0YXRlLFxuICAgICAgICBzZWxlY3RlZFRlbmFudElkOiB0ZW5hbnRJZCBhcyBzdHJpbmcsXG4gICAgICAgIGN1cnJlbnRQb3NpdGlvbjogTmF2aWdhdGlvblBvc2l0aW9uLk9QRU4sXG4gICAgICB9KSk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZXRWaWV3U3RhdGUoKHByZXZWaWV3U3RhdGUpID0+ICh7XG4gICAgICAuLi5wcmV2Vmlld1N0YXRlLFxuICAgICAgY3VycmVudFBvc2l0aW9uOiBOYXZpZ2F0aW9uUG9zaXRpb24uSElEREVOLFxuICAgIH0pKTtcbiAgfSwgW3RlbmFudElkLCBpc09wZW4sIHNldFZpZXdTdGF0ZV0pO1xuXG4gIC8vIHJlZnJlc2ggdGhlIHRva2VuIHRvIGdldCB0aGUgcG9zc2libHkgdXBkYXRlZCBwcml2aWxlZ2VzL2FwcHMvdGVuYW50cyB3aXRoXG4gIC8vIGNvb2xkb3duIG9mIDUgbWludXRlcyB0byBub3QgdHJpZ2dlciByZWZyZXNoIHRva2VuIG9uIGV2ZXJ5IG5hdmlnYXRpb24gb3BlblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChpc09wZW4pIHtcbiAgICAgIGF1dGhTZXJ2aWNlLnJlZnJlc2hVc2VyKDMwMCk7XG4gICAgfVxuICB9LCBbYXV0aFNlcnZpY2UsIGlzT3Blbl0pO1xuXG4gIGNvbnN0IGhhc01hcmtldGluZ0VuZ2luZUFjY2VzcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHVzZXJcbiAgICAgICAgPyB1c2VySGFzVGVuYW50QWNjZXNzKFxuICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgIHZpZXdTdGF0ZS5zZWxlY3RlZFRlbmFudElkLFxuICAgICAgICAgICAgUHJpdmlsZWdlcy5NQVJLRVRJTkdfRU5HSU5FX0FQUFxuICAgICAgICAgIClcbiAgICAgICAgOiBmYWxzZSxcbiAgICBbdmlld1N0YXRlLnNlbGVjdGVkVGVuYW50SWQsIHVzZXJdXG4gICk7XG5cbiAgY29uc3QgaGFzU2hvd3Jvb21BY2Nlc3MgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICB1c2VyXG4gICAgICAgID8gdXNlckhhc1RlbmFudEFjY2VzcyhcbiAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICB2aWV3U3RhdGUuc2VsZWN0ZWRUZW5hbnRJZCxcbiAgICAgICAgICAgIFByaXZpbGVnZXMuU0hPV1JPT01fQVBQXG4gICAgICAgICAgKVxuICAgICAgICA6IGZhbHNlLFxuICAgIFt2aWV3U3RhdGUuc2VsZWN0ZWRUZW5hbnRJZCwgdXNlcl1cbiAgKTtcblxuICBjb25zdCBoYXNTZW5kb3V0c0FjY2VzcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHVzZXJcbiAgICAgICAgPyB1c2VySGFzVGVuYW50QWNjZXNzKFxuICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgIHZpZXdTdGF0ZS5zZWxlY3RlZFRlbmFudElkLFxuICAgICAgICAgICAgUHJpdmlsZWdlcy5TRU5ET1VUU19BUFBcbiAgICAgICAgICApXG4gICAgICAgIDogZmFsc2UsXG4gICAgW3ZpZXdTdGF0ZS5zZWxlY3RlZFRlbmFudElkLCB1c2VyXVxuICApO1xuXG4gIGNvbnN0IGhhc0Ntc0FjY2VzcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHVzZXJcbiAgICAgICAgPyB1c2VySGFzVGVuYW50QWNjZXNzKFxuICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgIHZpZXdTdGF0ZS5zZWxlY3RlZFRlbmFudElkLFxuICAgICAgICAgICAgUHJpdmlsZWdlcy5TRU5ET1VUU19DTVNfQVBQXG4gICAgICAgICAgKVxuICAgICAgICA6IGZhbHNlLFxuICAgIFt2aWV3U3RhdGUuc2VsZWN0ZWRUZW5hbnRJZCwgdXNlcl1cbiAgKTtcblxuICBjb25zdCBoYXNVc2VyTWFuYWdlbWVudEFjY2VzcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHVzZXJcbiAgICAgICAgPyB1c2VySGFzVGVuYW50QWNjZXNzKFxuICAgICAgICAgICAgdXNlcixcbiAgICAgICAgICAgIHZpZXdTdGF0ZS5zZWxlY3RlZFRlbmFudElkLFxuICAgICAgICAgICAgUHJpdmlsZWdlcy5VU0VSX01BTkFHRU1FTlRfQVBQXG4gICAgICAgICAgKVxuICAgICAgICA6IGZhbHNlLFxuICAgIFt2aWV3U3RhdGUuc2VsZWN0ZWRUZW5hbnRJZCwgdXNlcl1cbiAgKTtcblxuICBjb25zdCBoYXNVbml2ZXJzYWxBY2Nlc3MgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICB1c2VyXG4gICAgICAgID8gdXNlckhhc1RlbmFudEFjY2VzcyhcbiAgICAgICAgICAgIHVzZXIsXG4gICAgICAgICAgICB2aWV3U3RhdGUuc2VsZWN0ZWRUZW5hbnRJZCxcbiAgICAgICAgICAgIFByaXZpbGVnZXMuVU5JVkVSU0FMXG4gICAgICAgICAgKVxuICAgICAgICA6IGZhbHNlLFxuICAgIFt2aWV3U3RhdGUuc2VsZWN0ZWRUZW5hbnRJZCwgdXNlcl1cbiAgKTtcblxuICBjb25zdCBoYXNTZXR0aW5nc0FjY2VzcyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgIHVzZXJcbiAgICAgICAgPyB1c2VySGFzVGVuYW50QWNjZXNzKHVzZXIsIHZpZXdTdGF0ZS5zZWxlY3RlZFRlbmFudElkLCBcInNldHRpbmdzLWFwcFwiKVxuICAgICAgICA6IGZhbHNlLFxuICAgIFt2aWV3U3RhdGUuc2VsZWN0ZWRUZW5hbnRJZCwgdXNlcl1cbiAgKTtcblxuICBjb25zdCBoYXNJbnN0b3JlQWNjZXNzID0gdXNlTWVtbyhcbiAgICAoKSA9PlxuICAgICAgdXNlclxuICAgICAgICA/IHVzZXJIYXNUZW5hbnRBY2Nlc3MoXG4gICAgICAgICAgICB1c2VyLFxuICAgICAgICAgICAgdmlld1N0YXRlLnNlbGVjdGVkVGVuYW50SWQsXG4gICAgICAgICAgICBQcml2aWxlZ2VzLklOU1RPUkVfQURNSU5fQVBQXG4gICAgICAgICAgKVxuICAgICAgICA6IGZhbHNlLFxuICAgIFt2aWV3U3RhdGUuc2VsZWN0ZWRUZW5hbnRJZCwgdXNlcl1cbiAgKTtcblxuICBjb25zdCB1cGRhdGVWaWV3U3RhdGUgPSB1c2VDYWxsYmFjayhcbiAgICAodmlld1N0YXRlVXBkYXRlOiBQYXJ0aWFsPE5hdmlnYXRpb25WaWV3U3RhdGU+KSA9PlxuICAgICAgc2V0Vmlld1N0YXRlKChwcmV2Vmlld1N0YXRlKSA9PiAoe1xuICAgICAgICAuLi5wcmV2Vmlld1N0YXRlLFxuICAgICAgICAuLi52aWV3U3RhdGVVcGRhdGUsXG4gICAgICB9KSksXG4gICAgW11cbiAgKTtcblxuICBjb25zdCBzaWduT3V0ID0gdXNlQ2FsbGJhY2soYXN5bmMgKCkgPT4ge1xuICAgIGlmIChjYW5TaWduT3V0KSB7XG4gICAgICBhd2FpdCBhdXRoU2VydmljZS5zaWduT3V0KCk7XG4gICAgfVxuICB9LCBbYXV0aFNlcnZpY2UsIGNhblNpZ25PdXRdKTtcblxuICBjb25zdCB0b2dnbGVUZW5hbnRzID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICh2aWV3U3RhdGUuY3VycmVudFBvc2l0aW9uID09PSBOYXZpZ2F0aW9uUG9zaXRpb24uT1BFTikge1xuICAgICAgdXBkYXRlVmlld1N0YXRlKHtcbiAgICAgICAgY3VycmVudFBvc2l0aW9uOiBOYXZpZ2F0aW9uUG9zaXRpb24uRVhQQU5ERUQsXG4gICAgICAgIHNlbGVjdGVkVGVuYW50SWQ6IHRlbmFudElkIGFzIHN0cmluZyxcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2aWV3U3RhdGUuY3VycmVudFBvc2l0aW9uID09PSBOYXZpZ2F0aW9uUG9zaXRpb24uRVhQQU5ERUQpIHtcbiAgICAgIHVwZGF0ZVZpZXdTdGF0ZSh7IGN1cnJlbnRQb3NpdGlvbjogTmF2aWdhdGlvblBvc2l0aW9uLk9QRU4gfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9LCBbdGVuYW50SWQsIHVwZGF0ZVZpZXdTdGF0ZSwgdmlld1N0YXRlLmN1cnJlbnRQb3NpdGlvbl0pO1xuXG4gIGNvbnN0IGN0eCA9IHVzZU1lbW88TmF2aWdhdGlvbkNvbnRleHRWYWx1ZT4oXG4gICAgKCkgPT4gKHtcbiAgICAgIGhhc01hcmtldGluZ0VuZ2luZUFjY2VzcyxcbiAgICAgIGhhc1Nob3dyb29tQWNjZXNzLFxuICAgICAgaGFzU2VuZG91dHNBY2Nlc3MsXG4gICAgICBoYXNDbXNBY2Nlc3MsXG4gICAgICBoYXNVc2VyTWFuYWdlbWVudEFjY2VzcyxcbiAgICAgIGhhc1VuaXZlcnNhbEFjY2VzcyxcbiAgICAgIGhhc1NldHRpbmdzQWNjZXNzLFxuICAgICAgaGFzSW5zdG9yZUFjY2VzcyxcbiAgICAgIHZpZXdTdGF0ZSxcbiAgICAgIHVwZGF0ZVZpZXdTdGF0ZSxcbiAgICAgIHNpZ25PdXQsXG4gICAgICB0b2dnbGVUZW5hbnRzLFxuICAgICAgb25OYXZpZ2F0aW9uQ2xvc2UsXG4gICAgfSksXG4gICAgW1xuICAgICAgaGFzTWFya2V0aW5nRW5naW5lQWNjZXNzLFxuICAgICAgaGFzU2VuZG91dHNBY2Nlc3MsXG4gICAgICBoYXNDbXNBY2Nlc3MsXG4gICAgICBoYXNTaG93cm9vbUFjY2VzcyxcbiAgICAgIGhhc1VzZXJNYW5hZ2VtZW50QWNjZXNzLFxuICAgICAgaGFzVW5pdmVyc2FsQWNjZXNzLFxuICAgICAgaGFzU2V0dGluZ3NBY2Nlc3MsXG4gICAgICBoYXNJbnN0b3JlQWNjZXNzLFxuICAgICAgdmlld1N0YXRlLFxuICAgICAgdXBkYXRlVmlld1N0YXRlLFxuICAgICAgc2lnbk91dCxcbiAgICAgIHRvZ2dsZVRlbmFudHMsXG4gICAgICBvbk5hdmlnYXRpb25DbG9zZSxcbiAgICBdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8TmF2aWdhdGlvbkNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2N0eH0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9OYXZpZ2F0aW9uQ29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibmF2aWdhdGlvblwiOlwidEt5Z1E0TE1EaWtIczVIc2gwUWtcIn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2MobmFtZXMpIHtcbiAgaWYgKHR5cGVvZiBuYW1lcyA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgbmFtZXMgPT09IFwibnVtYmVyXCIpIHJldHVybiBcIlwiICsgbmFtZXNcblxuICBsZXQgb3V0ID0gXCJcIlxuXG4gIGlmIChBcnJheS5pc0FycmF5KG5hbWVzKSkge1xuICAgIGZvciAobGV0IGkgPSAwLCB0bXA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKCh0bXAgPSBjYyhuYW1lc1tpXSkpICE9PSBcIlwiKSB7XG4gICAgICAgIG91dCArPSAob3V0ICYmIFwiIFwiKSArIHRtcFxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKGxldCBrIGluIG5hbWVzKSB7XG4gICAgICBpZiAobmFtZXNba10pIG91dCArPSAob3V0ICYmIFwiIFwiKSArIGtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0XG59XG4iLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcIkB0b3VjaHRlY2gvYmFzZWxheWVyLXVpXCIpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByZXF1aXJlKFwiQHRvdWNodGVjaC93ZWItYXBpLWNsaWVudFwiKTsiLCJjb25zdCBfX1dFQlBBQ0tfTkFNRVNQQUNFX09CSkVDVF9fID0gcmVxdWlyZShcInN3clwiKTsiLCJpbXBvcnQgdXNlU1dSIGZyb20gXCJzd3JcIjtcblxuaW1wb3J0IHsgY3JlYXRlVXJsLCB1c2VBcGkgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItYXBpLWNsaWVudFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGVuYW50c1ZpZXdVcmwoKSB7XG4gIGNvbnN0IGJhc2VVcmwgPVxuICAgIHByb2Nlc3MuZW52LlRFTkFOVFNfU0VSVklDRV9VUkwgPz9cbiAgICBwcm9jZXNzLmVudi5SRUFDVF9BUFBfVEVOQU5UU19TRVJWSUNFX1VSTDtcblxuICBpZiAoIWJhc2VVcmwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIlRFTkFOVFNfU0VSVklDRV9VUkwgb3IgUkVBQ1RfQVBQX1RFTkFOVFNfU0VSVklDRV9VUkwgbXVzdCBiZSBzZXRcIlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gY3JlYXRlVXJsKGJhc2VVcmwsIFwiL2FwaS9UZW5hbnRzL3ZpZXdcIik7XG59XG5cbmV4cG9ydCB0eXBlIFRlbmFudCA9IHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgbG9nb1VybDogc3RyaW5nO1xuICBwbGFuTmFtZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgU3RhdGUgPSB7XG4gIGlzTG9hZGluZzogYm9vbGVhbjtcbiAgZXJyb3I/OiBFcnJvcjtcbiAgdGVuYW50czogQXJyYXk8VGVuYW50Pjtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRlbmFudHMoKTogU3RhdGUge1xuICBjb25zdCBhcGkgPSB1c2VBcGkoKTtcbiAgY29uc3QgdXJsID0gY3JlYXRlVGVuYW50c1ZpZXdVcmwoKTtcblxuICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSB1c2VTV1IodXJsLCBhcGkuZ2V0KTtcblxuICByZXR1cm4ge1xuICAgIHRlbmFudHM6IChkYXRhID8/IFtdKSBhcyBBcnJheTxUZW5hbnQ+LFxuICAgIGlzTG9hZGluZzogIWRhdGEgJiYgIWVycm9yLFxuICAgIGVycm9yLFxuICB9O1xufVxuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgSW1hZ2UsIEltYWdlUHJvcHMgfSBmcm9tIFwiQHRvdWNodGVjaC9iYXNlbGF5ZXItdWlcIjtcblxuaW1wb3J0IHVzZVRlbmFudHMgZnJvbSBcIi4uLy4uLy4uL2hvb2tzL3VzZVRlbmFudHNcIjtcbmltcG9ydCB7IHVzZU5hdmlnYXRpb25Db250ZXh0IH0gZnJvbSBcIi4uL0NvbnRleHRcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgbGF5b3V0PzogSW1hZ2VQcm9wc1tcImxheW91dFwiXTtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBMb2dvKHsgbGF5b3V0IH06IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICB2aWV3U3RhdGU6IHsgc2VsZWN0ZWRUZW5hbnRJZCB9LFxuICB9ID0gdXNlTmF2aWdhdGlvbkNvbnRleHQoKTtcblxuICBjb25zdCB7IHRlbmFudHMgfSA9IHVzZVRlbmFudHMoKTtcblxuICBjb25zdCB0ZW5hbnQgPSB1c2VNZW1vKFxuICAgICgpID0+IHRlbmFudHMuZmluZCgodGVuYW50KSA9PiB0ZW5hbnQuaWQgPT09IHNlbGVjdGVkVGVuYW50SWQpLFxuICAgIFtzZWxlY3RlZFRlbmFudElkLCB0ZW5hbnRzXVxuICApO1xuXG4gIGlmICghdGVuYW50KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gPEltYWdlIHNyYz17dGVuYW50LmxvZ29Vcmx9IGxheW91dD17bGF5b3V0fSAvPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9nbztcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widGllclwiOlwiYWxreGpadlRnQWNzejBKUmttNmNcIixcImhpZGRlblwiOlwicU9XUWIwQkNfbXRXbUR3dmZpNlpcIixcInRpZXJIZWFkZXJcIjpcInA0SlBiNER6bUdvWk9JaE8wOXdzXCIsXCJib3JkZXJcIjpcIngwX1ZGM0JYYldVdGxDQ2dPdFFaXCIsXCJ0aWVyTWFpblwiOlwialdQQlp1OGlMRHl5VG42ZVc2a3dcIixcInRpZXJGb290ZXJcIjpcImdiNnQ4MnhwWlU3eW1rVWRTdXhfXCJ9OyIsImltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IGNzcyBmcm9tIFwiLi9UaWVyLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGhlYWRlcj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgc2hvd0hlYWRlckJvcmRlcj86IGJvb2xlYW47XG4gIGZvb3Rlcj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICB3aWR0aD86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIFRpZXIoe1xuICBjaGlsZHJlbixcbiAgaGVhZGVyLFxuICBmb290ZXIsXG4gIGNsYXNzTmFtZSxcbiAgd2lkdGgsXG4gIHNob3dIZWFkZXJCb3JkZXIsXG59OiBQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbY3NzLnRpZXIsIGNsYXNzTmFtZV0pfSBzdHlsZT17eyB3aWR0aCB9fT5cbiAgICAgIHshIWhlYWRlciAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIGNzcy50aWVySGVhZGVyLFxuICAgICAgICAgICAgeyBbY3NzLmJvcmRlcl06IHNob3dIZWFkZXJCb3JkZXIgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtoZWFkZXJ9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MudGllck1haW59PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgIHshIWZvb3RlciAmJiA8ZGl2IGNsYXNzTmFtZT17Y3NzLnRpZXJGb290ZXJ9Pntmb290ZXJ9PC9kaXY+fVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUaWVyO1xuIiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHJlcXVpcmUoXCJyZWFjdC1yb3V0ZXItZG9tXCIpOyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibmF2aWdhdGlvbkJ1dHRvblwiOlwiUnVZeVU0WlU5ODJJQmdkYjFOcjJcIixcImFjdGl2ZVwiOlwibURWUEM0NTJzSVoxQVoxMkh1cHVcIn07IiwiaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IFJlYWN0LCB7XG4gIFByb3BzV2l0aENoaWxkcmVuLFxuICB1c2VDYWxsYmFjayxcbiAgdXNlQ29udGV4dCxcbiAgdXNlRWZmZWN0LFxuICB1c2VTdGF0ZSxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBtYXRjaFBhdGggfSBmcm9tIFwicmVhY3Qtcm91dGVyLWRvbVwiO1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiQHRvdWNodGVjaC9iYXNlbGF5ZXItdWlcIjtcbmltcG9ydCB7IFRlbmFudElkQ29udGV4dCB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi10ZW5hbnQtaWQtcHJvdmlkZXJcIjtcblxuaW1wb3J0IHsgdXNlTmF2aWdhdGlvbkNvbnRleHQgfSBmcm9tIFwiLi4vLi4vLi4vQ29udGV4dFwiO1xuaW1wb3J0IGNzcyBmcm9tIFwiLi9BcHBsaWNhdGlvbkxpbmsubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICB0bz86IHN0cmluZztcbiAgaGlkZGVuPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKFxuICAgIHNldFNob3VsZENob29zZVRlbmFudDogKGZsYWc6IGJvb2xlYW4pID0+IHZvaWRcbiAgKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPjtcbn07XG5cbmZ1bmN0aW9uIEFwcGxpY2F0aW9uTGluayh7XG4gIGNoaWxkcmVuLFxuICB0byxcbiAgaGlkZGVuLFxuICBkaXNhYmxlZCxcbiAgb25DbGljayxcbn06IFByb3BzV2l0aENoaWxkcmVuPFByb3BzPikge1xuICBjb25zdCBbY3VycmVudFRlbmFudElkLCBzZXRDdXJyZW50VGVuYW50SWRdID0gdXNlQ29udGV4dChUZW5hbnRJZENvbnRleHQpO1xuICBjb25zdCBbaXNSZWRpcmVjdGluZywgc2V0SXNSZWRpcmVjdGluZ10gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3Qge1xuICAgIHZpZXdTdGF0ZTogeyBzZWxlY3RlZFRlbmFudElkIH0sXG4gIH0gPSB1c2VOYXZpZ2F0aW9uQ29udGV4dCgpO1xuXG4gIC8qKlxuICAgKiBXb3JrYXJvdW5kIGZvcjpcbiAgICpcbiAgICogVXNlciBBIGhhcyBhY2Nlc3MgdG8gdGVuYW50czogMSAoVXNlcnMgYXBwIG9ubHkpIGFuZCAyIChNZWRpYSBsaWJyYXJ5IGFwcCBvbmx5KVxuICAgKlxuICAgKiBVc2VyIEEgaXMgbG9nZ2VkIGluIHRvIFVzZXJzIGFwcCAodGVuYW50IDEpIGFuZCBuYXZpZ2F0ZXMgdG8gTWVkaWEgbGlicmFyeSBhcHAgKHRlbmFudCAyKVxuICAgKiBieSBzZWxlY3RpbmcgY29ycmVzcG9uZGluZyB0ZW5hbnQgKDIpIGFuZCBhdmFpbGFibGUgYXBwIChNZWRpYSBsaWJyYXJ5KSBpbiB0aGUgbmF2aWdhdGlvbiBtZW51XG4gICAqXG4gICAqIFVzZXIgQSBlbmRzIHVwIGluIFRlbmFudHMgcGlja2VyIHBhZ2UgYmVjYXVzZSBvZiBQcm90ZWN0ZWQgcm91dGUgaW4gdGhlIHBhcmVudCBhcHAgKFVzZXJzIGFwcClcbiAgICogdGhhdCByZWRpcmVjdHMgdG8gdW5hdXRob3JpemVkVXJsIChUZW5hbnRzIHBpY2tlciBwYWdlKSBpZiB1c2VyIGRvZXNuJ3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGFwcFxuICAgKiBoZSBpcyBjdXJyZW50bHkgaW4gKFVzZXJzIGFwcCBvZiB0ZW5hbnQgMSlcbiAgICovXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlVW5sb2FkID0gKCkgPT4ge1xuICAgICAgaWYgKGN1cnJlbnRUZW5hbnRJZCAhPT0gc2VsZWN0ZWRUZW5hbnRJZCAmJiBpc1JlZGlyZWN0aW5nKSB7XG4gICAgICAgIHNldEN1cnJlbnRUZW5hbnRJZChzZWxlY3RlZFRlbmFudElkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gdW5sb2FkIGV2ZW50IGlzIGZpcmVkIHdoZW4gd2luZG93LmFzc2lnbiBpcyBjYWxsZWRcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInVubG9hZFwiLCBoYW5kbGVVbmxvYWQpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwidW5sb2FkXCIsIGhhbmRsZVVubG9hZCk7XG4gICAgfTtcbiAgfSwgW3NldEN1cnJlbnRUZW5hbnRJZCwgY3VycmVudFRlbmFudElkLCBzZWxlY3RlZFRlbmFudElkLCBpc1JlZGlyZWN0aW5nXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgIG9uQ2xpY2soc2V0SXNSZWRpcmVjdGluZyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0bykge1xuICAgICAgc2V0SXNSZWRpcmVjdGluZyh0cnVlKTtcbiAgICAgIHdpbmRvdy5sb2NhdGlvbi5hc3NpZ24odG8pO1xuICAgIH1cbiAgfSwgW3RvLCBvbkNsaWNrXSk7XG5cbiAgY29uc3QgaXNBY3RpdmUgPSB0b1xuICAgID8gISFtYXRjaFBhdGgoYCR7dG99LypgLCB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpICYmXG4gICAgICBjdXJyZW50VGVuYW50SWQgPT09IHNlbGVjdGVkVGVuYW50SWRcbiAgICA6IGZhbHNlO1xuXG4gIHJldHVybiAhaGlkZGVuID8gKFxuICAgIDxCdXR0b25cbiAgICAgIGFsaWduPVwibGVmdFwiXG4gICAgICBub0JvcmRlclxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbY3NzLm5hdmlnYXRpb25CdXR0b24sIHsgW2Nzcy5hY3RpdmVdOiBpc0FjdGl2ZSB9XSl9XG4gICAgICBub1NoYWRvd1xuICAgICAgZGlzYWJsZWQ9e2lzQWN0aXZlIHx8IGRpc2FibGVkfVxuICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQnV0dG9uPlxuICApIDogbnVsbDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQXBwbGljYXRpb25MaW5rO1xuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJhcHBsaWNhdGlvbnNcIjpcInhxMk5oTTlCRWlfVzRud1QzeWgyXCIsXCJhcHBsaWNhdGlvbnNIZWFkZXJcIjpcIkJHakV0Vmo0cl9HTDFYUlBnZ2RLXCIsXCJhcHBsaWNhdGlvbnNIZWFkZXJCcmFuZFwiOlwiVmFvUzlzWFRFQ0FUdjVBbGhlV0FcIixcImFwcGxpY2F0aW9uc0hlYWRlckxvZ29cIjpcIld1VHJHejNVVTNwSDFmVlRpQ1RaXCIsXCJhcHBsaWNhdGlvbnNIZWFkZXJDbG9zZUljb25cIjpcIkNvaDJERnJDTllxanVIX3I3TXZHXCIsXCJhcHBsaWNhdGlvbnNIZWFkZXJDaGFuZ2VCcmFuZEJ1dHRvblwiOlwiTU9YOUlCMG5TeDVjZkxIcmNvT1pcIixcImFwcGxpY2F0aW9uc01haW5cIjpcIm13T0ZpQ01KVWN3UWdONzFlN3NDXCIsXCJhcHBsaWNhdGlvbnNNYWluQ29udGVudFwiOlwiQVZHN2tCOUZ5dmJiNmpXM0ZBMEJcIixcImFwcGxpY2F0aW9uc01haW5MaXN0XCI6XCJWS3NISk9YY1FpMTc0czk0cW1Pb1wiLFwiYXBwbGljYXRpb25zTWFpblVzZXJcIjpcIlNXbkEyMG5BRWtSNmdvV0dsRnJlXCIsXCJhcHBsaWNhdGlvbnNNYWluVXNlck5hbWVcIjpcIkhlRGF5WnBNYWlhTXdvWHZSRm9EXCIsXCJhcHBsaWNhdGlvbnNNYWluVXNlckVtYWlsXCI6XCJYRjJGX1lHRTZQbXhTMHRFVnZQMlwiLFwiYXBwbGljYXRpb25zRm9vdGVyXCI6XCJWM0laTDF5VmJNV0lwb3NqUUFMOFwiLFwiYXBwbGljYXRpb25zRm9vdGVyU2lnbk91dFwiOlwiWmd4OERweTJwQWRPb3FUdE1NUWlcIixcImFwcGxpY2F0aW9uc0Zvb3RlclNpZ25PdXRJY29uXCI6XCJBWm5sRmJ6VEdFeEd0cFloNF9MWVwiLFwiYXBwbGljYXRpb25zRm9vdGVyU2lnbk91dExhYmVsXCI6XCJxOHZqdlJvUHlXeFBfNGJpTzd5ZVwiLFwiZXJyb3JBbmltXCI6XCJLN0JTUl9zT1FudHluVk5Oclg0NVwiLFwiaG9yaXpvbnRhbFNoYWtlXCI6XCJjMFRUVHRpWElYZmx0V2hPOTVkOFwiLFwiZXJyb3JUZXh0XCI6XCJqdTgzZUR1NWMyNjZZdjhmZ1lpWFwifTsiLCJpbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiwgSWNvbiB9IGZyb20gXCJAdG91Y2h0ZWNoL2Jhc2VsYXllci11aVwiO1xuaW1wb3J0IHsgQXV0aENvbnRleHQgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItYXV0aFwiO1xuXG5pbXBvcnQgY2xvc2VJY29uIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hc3NldHMvaWNvbnMvY2xvc2Uuc3ZnXCI7XG5pbXBvcnQgbG9nb3V0SWNvbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2ljb25zL2xvZ291dC5zdmdcIjtcbmltcG9ydCBzcGlubmVyQ2lyY2xlSWNvbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2ljb25zL3NwaW5uZXItY2lyY2xlLnN2Z1wiO1xuaW1wb3J0IHsgQVBQTElDQVRJT05TX1RJRVJfV0lEVEgsIEFwcFBhdGhzIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2NvbnN0YW50c1wiO1xuaW1wb3J0IHsgdXNlTWFuYWdlU3Vic2NyaXB0aW9uIH0gZnJvbSBcIi4uLy4uLy4uLy4uL2hvb2tzL3VzZU1hbmFnZVN1YnNjcmlwdGlvblwiO1xuaW1wb3J0IHsgdXNlU2VsZWN0ZWRUZW5hbnQgfSBmcm9tIFwiLi4vLi4vLi4vLi4vaG9va3MvdXNlU2VsZWN0ZWRUZW5hbnRcIjtcbmltcG9ydCB7IHVzZU5hdmlnYXRpb25Db250ZXh0IH0gZnJvbSBcIi4uLy4uL0NvbnRleHRcIjtcbmltcG9ydCBMb2dvIGZyb20gXCIuLi8uLi9Mb2dvXCI7XG5pbXBvcnQgVGllciBmcm9tIFwiLi4vVGllclwiO1xuaW1wb3J0IEFwcGxpY2F0aW9uTGluayBmcm9tIFwiLi9BcHBsaWNhdGlvbkxpbmtcIjtcbmltcG9ydCBjc3MgZnJvbSBcIi4vQXBwbGljYXRpb25zLm1vZHVsZS5jc3NcIjtcblxuY29uc3QgZGVsYXkgPSAodGltZTogbnVtYmVyKSA9PiBuZXcgUHJvbWlzZSgob2spID0+IHNldFRpbWVvdXQob2ssIHRpbWUpKTtcblxuZnVuY3Rpb24gQXBwbGljYXRpb25zKCkge1xuICBjb25zdCB7IHVzZXIgfSA9IHVzZUNvbnRleHQoQXV0aENvbnRleHQpO1xuXG4gIGNvbnN0IHtcbiAgICBzaWduT3V0LFxuICAgIG9uTmF2aWdhdGlvbkNsb3NlLFxuICAgIHRvZ2dsZVRlbmFudHMsXG4gICAgaGFzU2hvd3Jvb21BY2Nlc3MsXG4gICAgaGFzTWFya2V0aW5nRW5naW5lQWNjZXNzLFxuICAgIGhhc1NlbmRvdXRzQWNjZXNzLFxuICAgIGhhc0Ntc0FjY2VzcyxcbiAgICBoYXNVc2VyTWFuYWdlbWVudEFjY2VzcyxcbiAgICBoYXNTZXR0aW5nc0FjY2VzcyxcbiAgICBoYXNVbml2ZXJzYWxBY2Nlc3MsXG4gICAgaGFzSW5zdG9yZUFjY2VzcyxcbiAgICB2aWV3U3RhdGUsXG4gIH0gPSB1c2VOYXZpZ2F0aW9uQ29udGV4dCgpO1xuXG4gIGNvbnN0IHNlbGVjdGVkVGVuYW50ID0gdXNlU2VsZWN0ZWRUZW5hbnQoKTtcblxuICBjb25zdCB0ZW5hbnRIYXNTdWJzY3JpcHRpb25QbGFuID1cbiAgICBzZWxlY3RlZFRlbmFudCAmJiBCb29sZWFuKHNlbGVjdGVkVGVuYW50LnBsYW5OYW1lKTtcblxuICBjb25zdCBbc3Vic2NyaXB0aW9uRXJyb3JTdGF0ZSwgc2V0U3Vic2NyaXB0aW9uRXJyb3JTdGF0ZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzdWJzY3JpcHRpb25TZXNzaW9uUGVuZGluZywgc2V0U3Vic2NyaXB0aW9uU2Vzc2lvblBlbmRpbmddID1cbiAgICB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgbWFuYWdlU3Vic2NyaXB0aW9uID0gdXNlTWFuYWdlU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3QgY3JlYXRlU2Vzc2lvbiA9IHVzZUNhbGxiYWNrKFxuICAgIGFzeW5jIChzZXRTZWxlY3RlZFRlbmFudEFzQ3VycmVudDogKGZsYWc6IGJvb2xlYW4pID0+IHZvaWQpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNldFN1YnNjcmlwdGlvblNlc3Npb25QZW5kaW5nKHRydWUpO1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgbWFuYWdlU3Vic2NyaXB0aW9uKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSk7XG4gICAgICAgIHNldFNlbGVjdGVkVGVuYW50QXNDdXJyZW50KHRydWUpO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24uYXNzaWduKGRhdGEudGV4dCk7XG4gICAgICB9IGNhdGNoIHtcbiAgICAgICAgc2V0U3Vic2NyaXB0aW9uU2Vzc2lvblBlbmRpbmcoZmFsc2UpO1xuICAgICAgICBzZXRTdWJzY3JpcHRpb25FcnJvclN0YXRlKHRydWUpO1xuICAgICAgICBhd2FpdCBkZWxheSgyNTAwKTtcbiAgICAgICAgc2V0U3Vic2NyaXB0aW9uRXJyb3JTdGF0ZShmYWxzZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbXG4gICAgICB2aWV3U3RhdGUuc2VsZWN0ZWRUZW5hbnRJZCxcbiAgICAgIHNldFN1YnNjcmlwdGlvblNlc3Npb25QZW5kaW5nLFxuICAgICAgbWFuYWdlU3Vic2NyaXB0aW9uLFxuICAgIF1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxUaWVyXG4gICAgICBjbGFzc05hbWU9e2Nzcy5hcHBsaWNhdGlvbnN9XG4gICAgICB3aWR0aD17QVBQTElDQVRJT05TX1RJRVJfV0lEVEh9XG4gICAgICBzaG93SGVhZGVyQm9yZGVyXG4gICAgICBoZWFkZXI9e1xuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc0hlYWRlcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5hcHBsaWNhdGlvbnNIZWFkZXJCcmFuZH0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc0hlYWRlckxvZ299PlxuICAgICAgICAgICAgICA8TG9nbyAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc0hlYWRlckNsb3NlSWNvbn1cbiAgICAgICAgICAgICAgb25DbGljaz17b25OYXZpZ2F0aW9uQ2xvc2V9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uIHNyYz17Y2xvc2VJY29ufSBzaXplPVwibGFyZ2VcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgYWxpZ249XCJsZWZ0XCJcbiAgICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgICB0cmFuc3BhcmVudFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjc3MuYXBwbGljYXRpb25zSGVhZGVyQ2hhbmdlQnJhbmRCdXR0b259XG4gICAgICAgICAgICBvbkNsaWNrPXt0b2dnbGVUZW5hbnRzfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIENoYW5nZSBicmFuZFxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICAgIGZvb3Rlcj17XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuYXBwbGljYXRpb25zRm9vdGVyfSBvbkNsaWNrPXtzaWduT3V0fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc0Zvb3RlclNpZ25PdXR9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5hcHBsaWNhdGlvbnNGb290ZXJTaWduT3V0SWNvbn0+XG4gICAgICAgICAgICAgIDxJY29uIHNyYz17bG9nb3V0SWNvbn0gc2l6ZT1cIm1lZGl1bVwiIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuYXBwbGljYXRpb25zRm9vdGVyU2lnbk91dExhYmVsfT5TaWduIG91dDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIH1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc01haW59PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc01haW5Db250ZW50fT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc01haW5MaXN0fT5cbiAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxpbmsgdG89e0FwcFBhdGhzLkRBU0hCT0FSRH0+RGFzaGJvYXJkPC9BcHBsaWNhdGlvbkxpbms+XG4gICAgICAgICAgICA8QXBwbGljYXRpb25MaW5rIGhpZGRlbj17IWhhc1Nob3dyb29tQWNjZXNzfSB0bz17QXBwUGF0aHMuU0hPV1JPT019PlxuICAgICAgICAgICAgICBQcmVzZW50YXRpb25zIChTaG93cm9vbSlcbiAgICAgICAgICAgIDwvQXBwbGljYXRpb25MaW5rPlxuICAgICAgICAgICAgPEFwcGxpY2F0aW9uTGluayBoaWRkZW49eyFoYXNTZW5kb3V0c0FjY2Vzc30gdG89e0FwcFBhdGhzLlNFTkRPVVRTfT5cbiAgICAgICAgICAgICAgU2VuZG91dHNcbiAgICAgICAgICAgIDwvQXBwbGljYXRpb25MaW5rPlxuICAgICAgICAgICAgPEFwcGxpY2F0aW9uTGlua1xuICAgICAgICAgICAgICBoaWRkZW49eyFoYXNNYXJrZXRpbmdFbmdpbmVBY2Nlc3N9XG4gICAgICAgICAgICAgIHRvPXtBcHBQYXRocy5NQVJLRVRJTkdfRU5HSU5FfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBNZWRpYSBMaWJyYXJ5XG4gICAgICAgICAgICA8L0FwcGxpY2F0aW9uTGluaz5cbiAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxpbmtcbiAgICAgICAgICAgICAgaGlkZGVuPXshaGFzSW5zdG9yZUFjY2VzcyAmJiAhaGFzVW5pdmVyc2FsQWNjZXNzfVxuICAgICAgICAgICAgICB0bz17QXBwUGF0aHMuSU5TVE9SRV9BRE1JTn1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgU3RvcmVzXG4gICAgICAgICAgICA8L0FwcGxpY2F0aW9uTGluaz5cbiAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxpbmsgaGlkZGVuPXshaGFzQ21zQWNjZXNzfSB0bz17QXBwUGF0aHMuQ01TfT5cbiAgICAgICAgICAgICAgQ29udGVudCBNYW5hZ2VyXG4gICAgICAgICAgICA8L0FwcGxpY2F0aW9uTGluaz5cbiAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxpbmtcbiAgICAgICAgICAgICAgaGlkZGVuPXshaGFzVXNlck1hbmFnZW1lbnRBY2Nlc3N9XG4gICAgICAgICAgICAgIHRvPXtBcHBQYXRocy5VU0VSX01BTkFHRU1FTlR9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIFVzZXJzXG4gICAgICAgICAgICA8L0FwcGxpY2F0aW9uTGluaz5cbiAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxpbmtcbiAgICAgICAgICAgICAgaGlkZGVuPXshaGFzVW5pdmVyc2FsQWNjZXNzICYmICFoYXNTZXR0aW5nc0FjY2Vzc31cbiAgICAgICAgICAgICAgdG89e0FwcFBhdGhzLlNFVFRJTkdTfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICBTZXR0aW5nc1xuICAgICAgICAgICAgPC9BcHBsaWNhdGlvbkxpbms+XG5cbiAgICAgICAgICAgIDxBcHBsaWNhdGlvbkxpbmtcbiAgICAgICAgICAgICAgZGlzYWJsZWQ9e3N1YnNjcmlwdGlvblNlc3Npb25QZW5kaW5nfVxuICAgICAgICAgICAgICBvbkNsaWNrPXtjcmVhdGVTZXNzaW9ufVxuICAgICAgICAgICAgICBoaWRkZW49eyFoYXNVbml2ZXJzYWxBY2Nlc3MgfHwgIXRlbmFudEhhc1N1YnNjcmlwdGlvblBsYW59XG4gICAgICAgICAgICAgIHRvPXtcIiNcIn1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KHtcbiAgICAgICAgICAgICAgICAgIFtjc3MuZXJyb3JBbmltXTogc3Vic2NyaXB0aW9uRXJyb3JTdGF0ZSxcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIFN1YnNjcmlwdGlvblxuICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIHtzdWJzY3JpcHRpb25TZXNzaW9uUGVuZGluZyA/IChcbiAgICAgICAgICAgICAgICA8SWNvbiBzaXplPVwieGxhcmdlXCIgc3JjPXtzcGlubmVyQ2lyY2xlSWNvbn0gYWx0PVwiTG9hZGluZ1wiIC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgXCJcIlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9BcHBsaWNhdGlvbkxpbms+XG4gICAgICAgICAgICB7c3Vic2NyaXB0aW9uRXJyb3JTdGF0ZSA/IChcbiAgICAgICAgICAgICAgPHAgY2xhc3NOYW1lPXtjc3MuZXJyb3JUZXh0fT5cbiAgICAgICAgICAgICAgICBVbmFibGUgdG8gYWNjZXNzIHN1YnNjcmlwdGlvbiBwYWdlXG4gICAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgICkgOiBudWxsfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIHt1c2VyICYmIChcbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuYXBwbGljYXRpb25zTWFpblVzZXJ9PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmFwcGxpY2F0aW9uc01haW5Vc2VyTmFtZX0+XG4gICAgICAgICAgICAgICAge3VzZXIuZmlyc3ROYW1lfSB7dXNlci5sYXN0TmFtZX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MuYXBwbGljYXRpb25zTWFpblVzZXJFbWFpbH0+e3VzZXIuZW1haWx9PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvVGllcj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQXBwbGljYXRpb25zO1xuIiwiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyB1c2VOYXZpZ2F0aW9uQ29udGV4dCB9IGZyb20gXCIuLi9jb21wb25lbnRzL05hdmlnYXRpb24vQ29udGV4dFwiO1xuaW1wb3J0IHVzZVRlbmFudHMgZnJvbSBcIi4vdXNlVGVuYW50c1wiO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlU2VsZWN0ZWRUZW5hbnQoKSB7XG4gIGNvbnN0IHtcbiAgICB2aWV3U3RhdGU6IHsgc2VsZWN0ZWRUZW5hbnRJZCB9LFxuICB9ID0gdXNlTmF2aWdhdGlvbkNvbnRleHQoKTtcbiAgY29uc3QgeyB0ZW5hbnRzIH0gPSB1c2VUZW5hbnRzKCk7XG5cbiAgY29uc3QgdGVuYW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHRlbmFudHMuZmluZCgodCkgPT4gdC5pZCA9PT0gc2VsZWN0ZWRUZW5hbnRJZCk7XG4gIH0sIFt0ZW5hbnRzLCBzZWxlY3RlZFRlbmFudElkXSk7XG5cbiAgcmV0dXJuIHRlbmFudDtcbn1cbiIsImltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEpzb25Cb2R5LCBjcmVhdGVVcmwsIHVzZUFwaSB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1hcGktY2xpZW50XCI7XG5pbXBvcnQgeyBUZW5hbnRJZENvbnRleHQgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItdGVuYW50LWlkLXByb3ZpZGVyXCI7XG5cbmltcG9ydCB7IHVzZU5hdmlnYXRpb25Db250ZXh0IH0gZnJvbSBcIi4uL2NvbXBvbmVudHMvTmF2aWdhdGlvbi9Db250ZXh0XCI7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVTdWJzY3JpcHRpb25NYW5hZ2VtZW50U2Vzc2lvblVybCA9ICgpID0+IHtcbiAgY29uc3QgYmFzZVVybCA9XG4gICAgcHJvY2Vzcy5lbnYuVEVOQU5UU19TRVJWSUNFX1VSTCA/P1xuICAgIHByb2Nlc3MuZW52LlJFQUNUX0FQUF9URU5BTlRTX1NFUlZJQ0VfVVJMO1xuXG4gIGlmICghYmFzZVVybCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiVEVOQU5UU19TRVJWSUNFX1VSTCBvciBSRUFDVF9BUFBfVEVOQU5UU19TRVJWSUNFX1VSTCBtdXN0IGJlIHNldFwiXG4gICAgKTtcbiAgfVxuICByZXR1cm4gY3JlYXRlVXJsKFxuICAgIGJhc2VVcmwsXG4gICAgXCIvYXBpL1N1YnNjcmlwdGlvbnMvY3JlYXRlLWN1c3RvbWVyLXBvcnRhbC1zZXNzaW9uXCJcbiAgKTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VNYW5hZ2VTdWJzY3JpcHRpb24oKSB7XG4gIGNvbnN0IGFwaSA9IHVzZUFwaSgpO1xuICBjb25zdCB1cmwgPSBjcmVhdGVTdWJzY3JpcHRpb25NYW5hZ2VtZW50U2Vzc2lvblVybCgpO1xuICBjb25zdCB7IHZpZXdTdGF0ZSB9ID0gdXNlTmF2aWdhdGlvbkNvbnRleHQoKTtcblxuICBjb25zdCBbdGVuYW50SWRdID0gdXNlQ29udGV4dChUZW5hbnRJZENvbnRleHQpO1xuXG4gIGNvbnN0IGNyZWF0ZVN1YnNjcmlwdGlvblBvcnRhbFNlc3Npb24gPSB1c2VDYWxsYmFjayhcbiAgICBhc3luYyAocmV0dXJuVXJsOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHJldHVyblVybE5vcm1hbGl6ZWQgPSByZXR1cm5VcmwucmVwbGFjZSgvXlxcLy8sIFwiXCIpO1xuICAgICAgYXBpLnNldEhlYWRlcihcInRlbmFudC1pZFwiLCB2aWV3U3RhdGUuc2VsZWN0ZWRUZW5hbnRJZCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwID0gKGF3YWl0IGFwaS5wb3N0KFxuICAgICAgICAgIHVybCxcbiAgICAgICAgICByZXR1cm5VcmxOb3JtYWxpemVkIGFzIHVua25vd24gYXMgSnNvbkJvZHlcbiAgICAgICAgKSkgYXMgUHJvbWlzZTx7XG4gICAgICAgICAgdGV4dDogc3RyaW5nO1xuICAgICAgICB9PjtcbiAgICAgICAgcmV0dXJuIHJlc3A7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAodGVuYW50SWQpIHtcbiAgICAgICAgICBhcGkuc2V0SGVhZGVyKFwidGVuYW50LWlkXCIsIHRlbmFudElkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBbYXBpLCB1cmwsIHZpZXdTdGF0ZV1cbiAgKTtcbiAgcmV0dXJuIGNyZWF0ZVN1YnNjcmlwdGlvblBvcnRhbFNlc3Npb247XG59XG4iLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzIwJyBoZWlnaHQ9JzIwJyB2aWV3Qm94PScwIDAgMjAgMjAnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMC4zOTg0MzggMC4zOTk5MDJMMTkuNTk4NCAxOS41OTk5TTAuMzk4NDM4IDE5LjU5OTlMMTkuNTk4NCAwLjM5OTkwMicgc3Ryb2tlPSdibGFjaycvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTQnIGhlaWdodD0nMTUnIHZpZXdCb3g9JzAgMCAxNCAxNScgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J003IDEuNTk5OUwxMC40NjY3IDQuNzk5OU03IDEuNTk5OUwzLjggNC43OTk5TTcgMS41OTk5TDcgMTEuNzMzMk0xMy40IDcuNDY2NTdMMTMuNCAxNC4zOTk5TDAuNjAwMDAyIDE0LjM5OTlMMC42MDAwMDIgNy40NjY1Nycgc3Ryb2tlPSclMjMyRDJEMzMnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2MlM2Z4bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnIHN0YW5kYWxvbmU9J25vJyUzZiUzZSAlM2MhRE9DVFlQRSBzdmcgUFVCTElDICctLy9XM0MvL0RURCBTVkcgMS4xLy9FTicgJ2h0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCclM2UgJTNjc3ZnIHdpZHRoPScxMDAlMjUnIGhlaWdodD0nMTAwJTI1JyB2aWV3Qm94PScwIDAgNDYgNDYnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgeG1sOnNwYWNlPSdwcmVzZXJ2ZScgeG1sbnM6c2VyaWY9J2h0dHA6Ly93d3cuc2VyaWYuY29tLycgc3R5bGU9J2ZpbGwtcnVsZTpldmVub2RkJTNiY2xpcC1ydWxlOmV2ZW5vZGQlM2JzdHJva2UtbGluZWpvaW46cm91bmQlM2JzdHJva2UtbWl0ZXJsaW1pdDoyJTNiJyUzZSAlM2NnIHRyYW5zZm9ybT0nbWF0cml4KDElMmMwJTJjMCUyYzElMmMtMjclMmMtMjcpJyUzZSAlM2NwYXRoIGQ9J003MyUyYzUwQzczJTJjMzcuMyA2Mi43JTJjMjcgNTAlMmMyN0MzNy4zJTJjMjcgMjclMmMzNy4zIDI3JTJjNTBNMzAuOSUyYzUwQzMwLjklMmMzOS41IDM5LjQlMmMzMC45IDUwJTJjMzAuOUM2MC42JTJjMzAuOSA2OS4xJTJjMzkuNSA2OS4xJTJjNTAnIHN0eWxlPSdmaWxsLXJ1bGU6bm9uemVybyUzYiclM2UgJTNjYW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSd0cmFuc2Zvcm0nIGF0dHJpYnV0ZVR5cGU9J1hNTCcgdHlwZT0ncm90YXRlJyBkdXI9JzFzJyBmcm9tPScwIDUwIDUwJyB0bz0nMzYwIDUwIDUwJyByZXBlYXRDb3VudD0naW5kZWZpbml0ZScgLyUzZSAlM2MvcGF0aCUzZSAlM2MvZyUzZSAlM2Mvc3ZnJTNlXCIiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRlbmFudEJ1dHRvblwiOlwib2V1V01NY0p2THpHVnl6bGt6cmlcIixcImFjdGl2ZVwiOlwiYmJVSHdYZG1UbUx4MUJtMTRBdG5cIixcInRlbmFudEJ1dHRvbkljb25cIjpcIklyU1V0U3lKX3lIVTA2cDVZMUozXCJ9OyIsImltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIkB0b3VjaHRlY2gvYmFzZWxheWVyLXVpXCI7XG5cbmltcG9ydCB7IFRlbmFudCB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9ob29rcy91c2VUZW5hbnRzXCI7XG5pbXBvcnQgeyBOYXZpZ2F0aW9uUG9zaXRpb24sIHVzZU5hdmlnYXRpb25Db250ZXh0IH0gZnJvbSBcIi4uLy4uLy4uL0NvbnRleHRcIjtcbmltcG9ydCBjc3MgZnJvbSBcIi4vVGVuYW50QnV0dG9uLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgdGVuYW50OiBUZW5hbnQ7XG59O1xuXG5mdW5jdGlvbiBUZW5hbnRCdXR0b24oeyB0ZW5hbnQgfTogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIHZpZXdTdGF0ZTogeyBzZWxlY3RlZFRlbmFudElkIH0sXG4gICAgdXBkYXRlVmlld1N0YXRlLFxuICB9ID0gdXNlTmF2aWdhdGlvbkNvbnRleHQoKTtcblxuICBjb25zdCBpc0FjdGl2ZSA9IHNlbGVjdGVkVGVuYW50SWQgPT09IHRlbmFudC5pZDtcblxuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIGtleT17dGVuYW50LmlkfVxuICAgICAgYWxpZ249XCJsZWZ0XCJcbiAgICAgIG5vQm9yZGVyXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtjc3MudGVuYW50QnV0dG9uLCB7IFtjc3MuYWN0aXZlXTogaXNBY3RpdmUgfV0pfVxuICAgICAgbm9TaGFkb3dcbiAgICAgIGRpc2FibGVkPXtpc0FjdGl2ZX1cbiAgICAgIG9uQ2xpY2s9eygpID0+IHtcbiAgICAgICAgdXBkYXRlVmlld1N0YXRlKHtcbiAgICAgICAgICBzZWxlY3RlZFRlbmFudElkOiB0ZW5hbnQuaWQsXG4gICAgICAgICAgY3VycmVudFBvc2l0aW9uOiBOYXZpZ2F0aW9uUG9zaXRpb24uT1BFTixcbiAgICAgICAgfSk7XG4gICAgICB9fVxuICAgID5cbiAgICAgIHt0ZW5hbnQubGFiZWx9XG4gICAgPC9CdXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRlbmFudEJ1dHRvbjtcbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widGVuYW50c1wiOlwiVEltQ3NobmpiN1VQVmsyUjRsWlBcIixcInRlbmFudHNIZWFkZXJcIjpcIlBMT1d6REdOR1h6TEFKckgwUkszXCIsXCJ0ZW5hbnRzSGVhZGVyQXJyb3dJY29uXCI6XCJ4ZEVPX3pJWlo0dEZyZmFwa0ZGVFwiLFwidGVuYW50c01haW5cIjpcIkFzMTJ2eW5UUWtfamtuUUlsSjhBXCIsXCJ0ZW5hbnRzRm9vdGVyXCI6XCJxMndzN2F4TDVBcDFoUVczbTE2TlwiLFwidGVuYW50c0Zvb3RlckNyZWF0ZUJyYW5kXCI6XCJ6WWt6TnVOUWh2SWRXS1pob1FHclwiLFwidGVuYW50c0Zvb3RlckNyZWF0ZUJyYW5kSWNvblwiOlwieHhjdTZ5dFhSY1BsMUdaSjJ2ZDlcIixcInRlbmFudHNGb290ZXJDcmVhdGVCcmFuZExhYmVsXCI6XCJRWWhjdlpxYlp4Z2VuRzQxa3dOcVwifTsiLCJpbXBvcnQgUmVhY3QsIHsgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCJAdG91Y2h0ZWNoL2Jhc2VsYXllci11aVwiO1xuXG5pbXBvcnQgYWRkSWNvbiBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vYXNzZXRzL2ljb25zL2FkZC5zdmdcIjtcbmltcG9ydCBhcnJvd0xlZnRJY29uIGZyb20gXCIuLi8uLi8uLi8uLi8uLi9hc3NldHMvaWNvbnMvYXJyb3ctbGVmdC5zdmdcIjtcbmltcG9ydCB7IEFwcFBhdGhzLCBURU5BTlRTX1RJRVJfV0lEVEggfSBmcm9tIFwiLi4vLi4vLi4vLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQgdXNlVGVuYW50cyBmcm9tIFwiLi4vLi4vLi4vLi4vaG9va3MvdXNlVGVuYW50c1wiO1xuaW1wb3J0IHsgdXNlTmF2aWdhdGlvbkNvbnRleHQgfSBmcm9tIFwiLi4vLi4vQ29udGV4dFwiO1xuaW1wb3J0IFRpZXIgZnJvbSBcIi4uL1RpZXJcIjtcbmltcG9ydCBUZW5hbnRCdXR0b24gZnJvbSBcIi4vVGVuYW50QnV0dG9uXCI7XG5pbXBvcnQgY3NzIGZyb20gXCIuL1RlbmFudHMubW9kdWxlLmNzc1wiO1xuXG5mdW5jdGlvbiBUZW5hbnRzKCkge1xuICBjb25zdCB7IHRvZ2dsZVRlbmFudHMgfSA9IHVzZU5hdmlnYXRpb25Db250ZXh0KCk7XG5cbiAgY29uc3QgeyB0ZW5hbnRzIH0gPSB1c2VUZW5hbnRzKCk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLnRlbmFudHN9PlxuICAgICAgPFRpZXJcbiAgICAgICAgd2lkdGg9e1RFTkFOVFNfVElFUl9XSURUSH1cbiAgICAgICAgaGVhZGVyPXtcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLnRlbmFudHNIZWFkZXJ9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy50ZW5hbnRzSGVhZGVyQXJyb3dJY29ufSBvbkNsaWNrPXt0b2dnbGVUZW5hbnRzfT5cbiAgICAgICAgICAgICAgPEljb24gc3JjPXthcnJvd0xlZnRJY29ufSBzaXplPVwibGFyZ2VcIiAvPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgZm9vdGVyPXtcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2Nzcy50ZW5hbnRzRm9vdGVyfVxuICAgICAgICAgICAgb25DbGljaz17KCkgPT4gd2luZG93LmxvY2F0aW9uLmFzc2lnbihBcHBQYXRocy5DUkVBVEVfV09SS1NQQUNFKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLnRlbmFudHNGb290ZXJDcmVhdGVCcmFuZH0+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MudGVuYW50c0Zvb3RlckNyZWF0ZUJyYW5kSWNvbn0+XG4gICAgICAgICAgICAgICAgPEljb24gc3JjPXthZGRJY29ufSBzaXplPVwibWVkaXVtXCIgLz5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MudGVuYW50c0Zvb3RlckNyZWF0ZUJyYW5kTGFiZWx9PlxuICAgICAgICAgICAgICAgIENyZWF0ZSBhIGJyYW5kIHdvcmtzcGFjZVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MudGVuYW50c01haW59PlxuICAgICAgICAgIHt0ZW5hbnRzLm1hcCgodGVuYW50KSA9PiAoXG4gICAgICAgICAgICA8VGVuYW50QnV0dG9uIHRlbmFudD17dGVuYW50fSBrZXk9e3RlbmFudC5pZH0gLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1RpZXI+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRlbmFudHM7XG4iLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzIyJyBoZWlnaHQ9JzE0JyB2aWV3Qm94PScwIDAgMjIgMTQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMS42MDAxIDcuMDAwMzlMOC4wMDAxIDEzLjQwMDRNMS42MDAxIDcuMDAwMzlMOC4wMDAxIDAuNjAwMzkxTTEuNjAwMSA3LjAwMDM5TDIxLjYwMDEgNy4wMDAzOScgc3Ryb2tlPSclMjMyNjI2MjYnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE0JyBoZWlnaHQ9JzE0JyB2aWV3Qm94PScwIDAgMTQgMTQnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMC4wMDE3MDkwNiA3TDEzLjAwMTcgN002LjUwMTcxIDEzLjVMNi41MDE3MSAwLjUnIHN0cm9rZT0nJTIzMkQyRDMzJy8lM2UgJTNjL3N2ZyUzZVwiIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0aWVyc1wiOlwieDRDY25LUDBoc01wZjhhVFYxdmNcIn07IiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgQXBwbGljYXRpb25zIGZyb20gXCIuL0FwcGxpY2F0aW9uc1wiO1xuaW1wb3J0IFRlbmFudHMgZnJvbSBcIi4vVGVuYW50c1wiO1xuaW1wb3J0IGNzcyBmcm9tIFwiLi9UaWVycy5tb2R1bGUuY3NzXCI7XG5cbmZ1bmN0aW9uIFRpZXJzKCkge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjc3MudGllcnN9PlxuICAgICAgPEFwcGxpY2F0aW9ucyAvPlxuICAgICAgPFRlbmFudHMgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGllcnM7XG4iLCJpbXBvcnQgeyBBbmltYXRlUHJlc2VuY2UsIFRyYW5zaXRpb24sIFZhcmlhbnQsIG1vdGlvbiB9IGZyb20gXCJmcmFtZXItbW90aW9uXCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmltcG9ydCB7IEFQUExJQ0FUSU9OU19USUVSX1dJRFRILCBURU5BTlRTX1RJRVJfV0lEVEggfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5pbXBvcnQge1xuICBOYXZpZ2F0aW9uQ29udGV4dCxcbiAgTmF2aWdhdGlvbkNvbnRleHRQcm92aWRlcixcbiAgTmF2aWdhdGlvblBvc2l0aW9uLFxufSBmcm9tIFwiLi9Db250ZXh0XCI7XG5pbXBvcnQgY3NzIGZyb20gXCIuL05hdmlnYXRpb24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IFRpZXJzIGZyb20gXCIuL1RpZXJzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgcG9ydGFsQ29udGFpbmVyPzogRWxlbWVudCB8IERvY3VtZW50RnJhZ21lbnQ7XG4gIG9uQ2xvc2U6ICgpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBFWFBBTkRFRF9OQVZJR0FUSU9OX1dJRFRIID0gQVBQTElDQVRJT05TX1RJRVJfV0lEVEggKyBURU5BTlRTX1RJRVJfV0lEVEg7XG5cbmNvbnN0IEFOSU1BVElPTl9UUkFOU0lUSU9OOiBUcmFuc2l0aW9uID0geyBlYXNlOiBcImVhc2VPdXRcIiwgZHVyYXRpb246IDAuMyB9O1xuY29uc3QgQU5JTUFUSU9OX1ZBUklBTlRTOiBSZWNvcmQ8TmF2aWdhdGlvblBvc2l0aW9uLCBWYXJpYW50PiA9IHtcbiAgW05hdmlnYXRpb25Qb3NpdGlvbi5ISURERU5dOiB7XG4gICAgbGVmdDogLUVYUEFOREVEX05BVklHQVRJT05fV0lEVEgsXG4gICAgdHJhbnNpdGlvbjogQU5JTUFUSU9OX1RSQU5TSVRJT04sXG4gIH0sXG4gIFtOYXZpZ2F0aW9uUG9zaXRpb24uT1BFTl06IHtcbiAgICBsZWZ0OiAtQVBQTElDQVRJT05TX1RJRVJfV0lEVEgsXG4gICAgdHJhbnNpdGlvbjogQU5JTUFUSU9OX1RSQU5TSVRJT04sXG4gIH0sXG4gIFtOYXZpZ2F0aW9uUG9zaXRpb24uRVhQQU5ERURdOiB7IGxlZnQ6IDAsIHRyYW5zaXRpb246IEFOSU1BVElPTl9UUkFOU0lUSU9OIH0sXG59O1xuXG5mdW5jdGlvbiBOYXZpZ2F0aW9uKHtcbiAgaXNPcGVuLFxuICBwb3J0YWxDb250YWluZXIgPSBkb2N1bWVudC5ib2R5LFxuICBvbkNsb3NlLFxufTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICAvLyBVc2luZyBmcmFtZXItbW90aW9uIGxpYiB0byBhbmltYXRlIHRoZSBuYXZpZ2F0aW9uIGNvbXBvbmVudCBvbiBtb3VudC91bm1vdW50XG4gICAgLy8gQWxzbyB0byBwcmV2ZW50IGFueSBhcGkgY2FsbHMgZnJvbSBiZWluZyBtYWRlIHdoZW4gdGhlIG5hdmlnYXRpb24gKFRpZXJzIGNvbXBvbmVudCkgaXMgaGlkZGVuXG4gICAgPE5hdmlnYXRpb25Db250ZXh0UHJvdmlkZXIgb25OYXZpZ2F0aW9uQ2xvc2U9e29uQ2xvc2V9IGlzT3Blbj17aXNPcGVufT5cbiAgICAgIDxOYXZpZ2F0aW9uQ29udGV4dC5Db25zdW1lcj5cbiAgICAgICAgeyh7IHZpZXdTdGF0ZTogeyBjdXJyZW50UG9zaXRpb24gfSB9KSA9PlxuICAgICAgICAgIGNyZWF0ZVBvcnRhbChcbiAgICAgICAgICAgIDxBbmltYXRlUHJlc2VuY2U+XG4gICAgICAgICAgICAgIHtjdXJyZW50UG9zaXRpb24gIT09IE5hdmlnYXRpb25Qb3NpdGlvbi5ISURERU4gJiYgKFxuICAgICAgICAgICAgICAgIDxtb3Rpb24uZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2Nzcy5uYXZpZ2F0aW9ufVxuICAgICAgICAgICAgICAgICAgaW5pdGlhbD17TmF2aWdhdGlvblBvc2l0aW9uLkhJRERFTn1cbiAgICAgICAgICAgICAgICAgIHZhcmlhbnRzPXtBTklNQVRJT05fVkFSSUFOVFN9XG4gICAgICAgICAgICAgICAgICBhbmltYXRlPXtjdXJyZW50UG9zaXRpb259XG4gICAgICAgICAgICAgICAgICBleGl0PXtOYXZpZ2F0aW9uUG9zaXRpb24uSElEREVOfVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIDxUaWVycyAvPlxuICAgICAgICAgICAgICAgIDwvbW90aW9uLmRpdj5cbiAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgIDwvQW5pbWF0ZVByZXNlbmNlPixcbiAgICAgICAgICAgIHBvcnRhbENvbnRhaW5lclxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgPC9OYXZpZ2F0aW9uQ29udGV4dC5Db25zdW1lcj5cbiAgICA8L05hdmlnYXRpb25Db250ZXh0UHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE5hdmlnYXRpb247XG4iLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE0JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTQgMTEnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMCAxLjVIMTRNMCA1LjVIMTRNMCA5LjVIMTRNMCcgc3Ryb2tlPSdibGFjaycvJTNlICUzYy9zdmclM2VcIiIsImltcG9ydCBSZWFjdCwgeyBGcmFnbWVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuXG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSBcIkB0b3VjaHRlY2gvYmFzZWxheWVyLXVpXCI7XG5pbXBvcnQgeyB1c2VUb2dnbGUgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItaG9va3NcIjtcblxuaW1wb3J0IG1lbnVJY29uIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvaWNvbnMvbWVudS5zdmdcIjtcbmltcG9ydCBOYXZpZ2F0aW9uIGZyb20gXCIuL05hdmlnYXRpb25cIjtcblxudHlwZSBJY29uQnV0dG9uUHJvcHMgPSBSZWFjdC5Db21wb25lbnRQcm9wczx0eXBlb2YgSWNvbkJ1dHRvbj47XG50eXBlIFByb3BzID0gUGFydGlhbDxJY29uQnV0dG9uUHJvcHM+ICYge1xuICBwb3J0YWxDb250YWluZXI/OiBFbGVtZW50IHwgRG9jdW1lbnRGcmFnbWVudDtcbn07XG5cbmZ1bmN0aW9uIE5hdmlnYXRpb25CdXR0b24oe1xuICBzaXplID0gXCJtZWRpdW1cIixcbiAgYWx0ID0gXCJUb2dnbGUgbmF2aWdhdGlvbiBtZW51XCIsXG4gIHNyYyA9IG1lbnVJY29uLFxuICBwb3J0YWxDb250YWluZXIgPSBkb2N1bWVudC5ib2R5LFxuICAuLi5wcm9wc1xufTogUHJvcHMpIHtcbiAgY29uc3QgW2lzTmF2aWdhdGlvbk9wZW4sIHRvZ2dsZUlzTmF2aWdhdGlvbk9wZW5dID0gdXNlVG9nZ2xlKGZhbHNlKTtcblxuICByZXR1cm4gKFxuICAgIDxGcmFnbWVudD5cbiAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIGFsdD17YWx0fVxuICAgICAgICBzcmM9e3NyY31cbiAgICAgICAgb25DbGljaz17KCkgPT4gdG9nZ2xlSXNOYXZpZ2F0aW9uT3BlbigpfVxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICAvPlxuICAgICAgPE5hdmlnYXRpb25cbiAgICAgICAgaXNPcGVuPXtpc05hdmlnYXRpb25PcGVufVxuICAgICAgICBwb3J0YWxDb250YWluZXI9e3BvcnRhbENvbnRhaW5lcn1cbiAgICAgICAgb25DbG9zZT17KCkgPT4gdG9nZ2xlSXNOYXZpZ2F0aW9uT3BlbigpfVxuICAgICAgLz5cbiAgICA8L0ZyYWdtZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBOYXZpZ2F0aW9uQnV0dG9uO1xuIiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRvZ2dsZShpbml0aWFsVmFsdWUpIHtcbiAgICBpZiAoaW5pdGlhbFZhbHVlID09PSB2b2lkIDApIHsgaW5pdGlhbFZhbHVlID0gZmFsc2U7IH1cbiAgICB2YXIgX2EgPSBfX3JlYWQodXNlU3RhdGUoaW5pdGlhbFZhbHVlKSwgMiksIHZhbHVlID0gX2FbMF0sIHNldFZhbHVlID0gX2FbMV07XG4gICAgdmFyIHRvZ2dsZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIG5ld1ZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0VmFsdWUoZnVuY3Rpb24gKHByZXZWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhcHJldlZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIFt2YWx1ZSwgdG9nZ2xlXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVRvZ2dsZS5qcy5tYXAiXSwibmFtZXMiOlsiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZSIsImdldHRlciIsIl9fZXNNb2R1bGUiLCJkIiwiYSIsImV4cG9ydHMiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsIm9iaiIsInByb3AiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwiZXh0ZW5kU3RhdGljcyIsImIiLCJzZXRQcm90b3R5cGVPZiIsIl9fcHJvdG9fXyIsIkFycmF5IiwicCIsIl9fZXh0ZW5kcyIsIlR5cGVFcnJvciIsIlN0cmluZyIsIl9fIiwidGhpcyIsImNvbnN0cnVjdG9yIiwiY3JlYXRlIiwiX19hc3NpZ24iLCJhc3NpZ24iLCJ0IiwicyIsImkiLCJuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXBwbHkiLCJfX3Jlc3QiLCJlIiwiaW5kZXhPZiIsImdldE93blByb3BlcnR5U3ltYm9scyIsInByb3BlcnR5SXNFbnVtZXJhYmxlIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJzdGVwIiwibmV4dCIsInJlamVjdGVkIiwicmVzdWx0IiwiZG9uZSIsInRoZW4iLCJtIiwiaXRlcmF0b3IiLCJyIiwiYXIiLCJwdXNoIiwiZXJyb3IiLCJ0byIsImZyb20iLCJwYWNrIiwibCIsInNsaWNlIiwiY29uY2F0IiwicmVxdWlyZSIsImVudiIsInByb2Nlc3MiLCJkZWZhdWx0VGltZXN0ZXAiLCJnZXRDdXJyZW50VGltZSIsInBlcmZvcm1hbmNlIiwibm93IiwiRGF0ZSIsIm9uTmV4dEZyYW1lIiwid2luZG93IiwiY2FsbGJhY2siLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJzZXRUaW1lb3V0IiwidXNlRGVmYXVsdEVsYXBzZWQiLCJydW5OZXh0RnJhbWUiLCJpc1Byb2Nlc3NpbmciLCJkZWx0YSIsInRpbWVzdGFtcCIsInN0ZXBzT3JkZXIiLCJzdGVwcyIsInJlZHVjZSIsImFjYyIsInRvUnVuIiwidG9SdW5OZXh0RnJhbWUiLCJudW1Ub1J1biIsImZsdXNoTmV4dEZyYW1lIiwidG9LZWVwQWxpdmUiLCJXZWFrU2V0Iiwic2NoZWR1bGUiLCJrZWVwQWxpdmUiLCJpbW1lZGlhdGUiLCJhZGRUb0N1cnJlbnRGcmFtZSIsImJ1ZmZlciIsImFkZCIsImNhbmNlbCIsImluZGV4Iiwic3BsaWNlIiwiZGVsZXRlIiwiZnJhbWVEYXRhIiwiaGFzIiwiY3JlYXRlUmVuZGVyU3RlcCIsInN5bmMiLCJzdGFydExvb3AiLCJjYW5jZWxTeW5jIiwiZmx1c2hTeW5jIiwicHJvY2Vzc1N0ZXAiLCJzdGVwSWQiLCJwcm9jZXNzRnJhbWUiLCJNYXRoIiwibWF4IiwibWluIiwiZm9yRWFjaCIsImdldEZyYW1lRGF0YSIsImlzQnJvd3NlciIsImRvY3VtZW50IiwidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsInVzZUVmZmVjdCIsInVzZUlzTW91bnRlZCIsImlzTW91bnRlZCIsInVzZVJlZiIsImN1cnJlbnQiLCJjcmVhdGVDb250ZXh0IiwidXNlQ29uc3RhbnQiLCJpbml0IiwicmVmIiwiY291bnRlciIsImluY3JlbWVudElkIiwidXNlSWQiLCJQcmVzZW5jZUNoaWxkIiwiX2EiLCJjaGlsZHJlbiIsImluaXRpYWwiLCJpc1ByZXNlbnQiLCJvbkV4aXRDb21wbGV0ZSIsImN1c3RvbSIsInByZXNlbmNlQWZmZWN0c0xheW91dCIsInByZXNlbmNlQ2hpbGRyZW4iLCJuZXdDaGlsZHJlbk1hcCIsImlkIiwiY29udGV4dCIsInVzZU1lbW8iLCJjaGlsZElkIiwiZV8xIiwic2V0IiwiX2IiLCJfX3ZhbHVlcyIsInZhbHVlcyIsIl9jIiwiZV8xXzEiLCJyZXR1cm4iLCJyZWdpc3RlciIsInVuZGVmaW5lZCIsIl8iLCJzaXplIiwiTWFwIiwiTGF5b3V0R3JvdXBDb250ZXh0IiwidXNlVW5tb3VudEVmZmVjdCIsImdldENoaWxkS2V5IiwiY2hpbGQiLCJBbmltYXRlUHJlc2VuY2UiLCJleGl0QmVmb3JlRW50ZXIiLCJfZCIsInVzZVN0YXRlIiwiZm9yY2VkUmVuZGVyQ291bnQiLCJzZXRGb3JjZWRSZW5kZXJDb3VudCIsImZvcmNlUmVuZGVyIiwidXNlQ2FsbGJhY2siLCJ1c2VGb3JjZVVwZGF0ZSIsImZvcmNlUmVuZGVyTGF5b3V0R3JvdXAiLCJ1c2VDb250ZXh0IiwiZmlsdGVyZWRDaGlsZHJlbiIsImZpbHRlcmVkIiwiQ2hpbGRyZW4iLCJpc1ZhbGlkRWxlbWVudCIsIm9ubHlFbGVtZW50cyIsImNoaWxkcmVuVG9SZW5kZXIiLCJleGl0aW5nIiwiU2V0IiwicHJlc2VudENoaWxkcmVuIiwiYWxsQ2hpbGRyZW4iLCJpc0luaXRpYWxSZW5kZXIiLCJ1cGRhdGVDaGlsZExvb2t1cCIsImNsZWFyIiwibWFwIiwicHJlc2VudEtleXMiLCJ0YXJnZXRLZXlzIiwibnVtUHJlc2VudCIsImluc2VydGlvbkluZGV4IiwicmVtb3ZlSW5kZXgiLCJmaW5kSW5kZXgiLCJwcmVzZW50Q2hpbGQiLCJjb25zb2xlIiwid2FybiIsImNsb25lRWxlbWVudCIsImNyZWF0ZURlZmluaXRpb24iLCJwcm9wTmFtZXMiLCJpc0VuYWJsZWQiLCJwcm9wcyIsInNvbWUiLCJuYW1lIiwiZmVhdHVyZURlZmluaXRpb25zIiwibWVhc3VyZUxheW91dCIsImFuaW1hdGlvbiIsImV4aXQiLCJkcmFnIiwiZm9jdXMiLCJob3ZlciIsInRhcCIsInBhbiIsImluVmlldyIsIndhcm5pbmciLCJpbnZhcmlhbnQiLCJMYXp5Q29udGV4dCIsInN0cmljdCIsImZlYXR1cmVOYW1lcyIsImtleXMiLCJudW1GZWF0dXJlcyIsIk1vdGlvbkNvbmZpZ0NvbnRleHQiLCJ0cmFuc2Zvcm1QYWdlUG9pbnQiLCJpc1N0YXRpYyIsInJlZHVjZWRNb3Rpb24iLCJNb3Rpb25Db250ZXh0IiwicHJlZmVyc1JlZHVjZWRNb3Rpb24iLCJoYXNEZXRlY3RlZCIsInVzZVZpc3VhbEVsZW1lbnQiLCJDb21wb25lbnQiLCJ2aXN1YWxTdGF0ZSIsImNyZWF0ZVZpc3VhbEVsZW1lbnQiLCJyZWR1Y2VkTW90aW9uUHJlZmVyZW5jZSIsImxhenlDb250ZXh0IiwicGFyZW50IiwidmlzdWFsRWxlbWVudCIsInByZXNlbmNlQ29udGV4dCIsInNob3VsZFJlZHVjZU1vdGlvbiIsIm1hdGNoTWVkaWEiLCJtb3Rpb25NZWRpYVF1ZXJ5XzEiLCJzZXRSZWR1Y2VkTW90aW9uUHJlZmVyZW5jZXMiLCJtYXRjaGVzIiwiYWRkTGlzdGVuZXIiLCJpbml0UHJlZmVyc1JlZHVjZWRNb3Rpb24iLCJ2aXN1YWxFbGVtZW50UmVmIiwicmVuZGVyZXIiLCJwcmVzZW5jZUlkIiwiYmxvY2tJbml0aWFsQW5pbWF0aW9uIiwic3luY1JlbmRlciIsImFuaW1hdGlvblN0YXRlIiwiYW5pbWF0ZUNoYW5nZXMiLCJub3RpZnlVbm1vdW50IiwiaXNSZWZPYmplY3QiLCJpc1ZhcmlhbnRMYWJlbHMiLCJ2IiwiaXNBcnJheSIsImlzVmFyaWFudExhYmVsIiwicmVzb2x2ZVZhcmlhbnRGcm9tUHJvcHMiLCJjdXJyZW50VmFsdWVzIiwiY3VycmVudFZlbG9jaXR5IiwidmFyaWFudHMiLCJyZXNvbHZlVmFyaWFudCIsImdldFByb3BzIiwiZm9yRWFjaFZhbHVlIiwiZ2V0Q3VycmVudCIsInZlbG9jaXR5IiwiZ2V0VmVsb2NpdHkiLCJjaGVja0lmQ29udHJvbGxpbmdWYXJpYW50cyIsImFuaW1hdGUiLCJzdGFydCIsIndoaWxlSG92ZXIiLCJ3aGlsZURyYWciLCJ3aGlsZVRhcCIsIndoaWxlRm9jdXMiLCJjaGVja0lmVmFyaWFudE5vZGUiLCJCb29sZWFuIiwidmFyaWFudExhYmVsc0FzRGVwZW5kZW5jeSIsImpvaW4iLCJnbG9iYWxQcm9qZWN0aW9uU3RhdGUiLCJoYXNBbmltYXRlZFNpbmNlUmVzaXplIiwiaGFzRXZlclVwZGF0ZWQiLCJTd2l0Y2hMYXlvdXRHcm91cENvbnRleHQiLCJWaXN1YWxFbGVtZW50SGFuZGxlciIsIl9zdXBlciIsImdldFNuYXBzaG90QmVmb3JlVXBkYXRlIiwidXBkYXRlUHJvcHMiLCJjb21wb25lbnREaWRVcGRhdGUiLCJzZXRQcm9wcyIsInJlbmRlciIsInByZWxvYWRlZEZlYXR1cmVzIiwicHJvamVjdGlvbk5vZGVDb25zdHJ1Y3RvciIsInVzZVJlbmRlciIsInVzZVZpc3VhbFN0YXRlIiwiZmVhdHVyZXMiLCJsb2FkRmVhdHVyZXMiLCJmb3J3YXJkUmVmIiwiZXh0ZXJuYWxSZWYiLCJsYXlvdXRJZCIsImxheW91dEdyb3VwSWQiLCJ1c2VMYXlvdXRJZCIsImNvbmZpZyIsImluaGVyaXQiLCJnZXRDdXJyZW50VHJlZVZhcmlhbnRzIiwidXNlQ3JlYXRlTW90aW9uQ29udGV4dCIsInByb2plY3Rpb25JZCIsIlByb2plY3Rpb25Ob2RlQ29uc3RydWN0b3IiLCJsYXlvdXQiLCJkcmFnQ29uc3RyYWludHMiLCJsYXlvdXRTY3JvbGwiLCJpbml0aWFsUHJvbW90aW9uQ29uZmlnIiwicHJvamVjdGlvbiIsImdldExhdGVzdFZhbHVlcyIsInNldE9wdGlvbnMiLCJhbHdheXNNZWFzdXJlTGF5b3V0Iiwic2NoZWR1bGVSZW5kZXIiLCJhbmltYXRpb25UeXBlIiwidXNlUHJvamVjdGlvbiIsIm5hbWVfMSIsInVzZUZlYXR1cmVzIiwiUHJvdmlkZXIiLCJpbnN0YW5jZSIsIm1vdW50IiwidW5tb3VudCIsInVzZU1vdGlvblJlZiIsImNyZWF0ZU1vdGlvblByb3h5IiwiY3JlYXRlQ29uZmlnIiwiY3VzdG9tTW90aW9uQ29tcG9uZW50Q29uZmlnIiwiUHJveHkiLCJjb21wb25lbnRDYWNoZSIsIl90YXJnZXQiLCJsb3dlcmNhc2VTVkdFbGVtZW50cyIsImlzU1ZHQ29tcG9uZW50IiwiaW5jbHVkZXMiLCJ0ZXN0Iiwic2NhbGVDb3JyZWN0b3JzIiwidHJhbnNmb3JtQXhlcyIsInRyYW5zZm9ybVByb3BzIiwic29ydFRyYW5zZm9ybVByb3BzIiwib3BlcmF0aW9uS2V5IiwiYXhlc0tleSIsInRyYW5zZm9ybVByb3BTZXQiLCJpc1RyYW5zZm9ybVByb3AiLCJ0cmFuc2Zvcm1PcmlnaW5Qcm9wcyIsImlzVHJhbnNmb3JtT3JpZ2luUHJvcCIsImlzRm9yY2VkTW90aW9uVmFsdWUiLCJpc01vdGlvblZhbHVlIiwidHJhbnNsYXRlQWxpYXMiLCJ4IiwieSIsInoiLCJ0cmFuc2Zvcm1QZXJzcGVjdGl2ZSIsImlzQ1NTVmFyaWFibGUiLCJzdGFydHNXaXRoIiwiZ2V0VmFsdWVBc1R5cGUiLCJ0eXBlIiwidHJhbnNmb3JtIiwiY2xhbXAiLCJzYW5pdGl6ZSIsIk51bWJlciIsInRvRml4ZWQiLCJmbG9hdFJlZ2V4IiwiY29sb3JSZWdleCIsInNpbmdsZUNvbG9yUmVnZXgiLCJpc1N0cmluZyIsImNyZWF0ZVVuaXRUeXBlIiwidW5pdCIsImVuZHNXaXRoIiwic3BsaXQiLCJwYXJzZSIsInBhcnNlRmxvYXQiLCJkZWdyZWVzIiwicGVyY2VudCIsInB4IiwidmgiLCJ2dyIsInByb2dyZXNzUGVyY2VudGFnZSIsIm51bWJlciIsImFscGhhIiwic2NhbGUiLCJkZWZhdWx0Iiwicm91bmQiLCJudW1iZXJWYWx1ZVR5cGVzIiwiYm9yZGVyV2lkdGgiLCJib3JkZXJUb3BXaWR0aCIsImJvcmRlclJpZ2h0V2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsImJvcmRlckxlZnRXaWR0aCIsImJvcmRlclJhZGl1cyIsInJhZGl1cyIsImJvcmRlclRvcExlZnRSYWRpdXMiLCJib3JkZXJUb3BSaWdodFJhZGl1cyIsImJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzIiwiYm9yZGVyQm90dG9tTGVmdFJhZGl1cyIsIndpZHRoIiwibWF4V2lkdGgiLCJoZWlnaHQiLCJtYXhIZWlnaHQiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJwYWRkaW5nIiwicGFkZGluZ1RvcCIsInBhZGRpbmdSaWdodCIsInBhZGRpbmdCb3R0b20iLCJwYWRkaW5nTGVmdCIsIm1hcmdpbiIsIm1hcmdpblRvcCIsIm1hcmdpblJpZ2h0IiwibWFyZ2luQm90dG9tIiwibWFyZ2luTGVmdCIsInJvdGF0ZSIsInJvdGF0ZVgiLCJyb3RhdGVZIiwicm90YXRlWiIsInNjYWxlWCIsInNjYWxlWSIsInNjYWxlWiIsInNrZXciLCJza2V3WCIsInNrZXdZIiwiZGlzdGFuY2UiLCJ0cmFuc2xhdGVYIiwidHJhbnNsYXRlWSIsInRyYW5zbGF0ZVoiLCJwZXJzcGVjdGl2ZSIsIm9wYWNpdHkiLCJvcmlnaW5YIiwib3JpZ2luWSIsIm9yaWdpbloiLCJ6SW5kZXgiLCJmaWxsT3BhY2l0eSIsInN0cm9rZU9wYWNpdHkiLCJudW1PY3RhdmVzIiwiYnVpbGRIVE1MU3R5bGVzIiwic3RhdGUiLCJsYXRlc3RWYWx1ZXMiLCJvcHRpb25zIiwidHJhbnNmb3JtVGVtcGxhdGUiLCJzdHlsZSIsInZhcnMiLCJ0cmFuc2Zvcm1LZXlzIiwidHJhbnNmb3JtT3JpZ2luIiwiaGFzVHJhbnNmb3JtIiwiaGFzVHJhbnNmb3JtT3JpZ2luIiwidHJhbnNmb3JtSXNOb25lIiwidmFsdWVUeXBlIiwidmFsdWVBc1R5cGUiLCJ0cmFuc2Zvcm1Jc0RlZmF1bHQiLCJlbmFibGVIYXJkd2FyZUFjY2VsZXJhdGlvbiIsImFsbG93VHJhbnNmb3JtTm9uZSIsInRyYW5zZm9ybVN0cmluZyIsInNvcnQiLCJ0cmFuc2Zvcm1IYXNaIiwibnVtVHJhbnNmb3JtS2V5cyIsInRyaW0iLCJidWlsZFRyYW5zZm9ybSIsImJ1aWxkVHJhbnNmb3JtT3JpZ2luIiwiY3JlYXRlSHRtbFJlbmRlclN0YXRlIiwiY29weVJhd1ZhbHVlc09ubHkiLCJ0YXJnZXQiLCJzb3VyY2UiLCJ1c2VIVE1MUHJvcHMiLCJodG1sUHJvcHMiLCJ1c2VJbml0aWFsTW90aW9uVmFsdWVzIiwidHJhbnNmb3JtVmFsdWVzIiwidXNlU3R5bGUiLCJkcmFnTGlzdGVuZXIiLCJkcmFnZ2FibGUiLCJ1c2VyU2VsZWN0IiwiV2Via2l0VXNlclNlbGVjdCIsIldlYmtpdFRvdWNoQ2FsbG91dCIsInRvdWNoQWN0aW9uIiwidmFsaWRNb3Rpb25Qcm9wcyIsImlzVmFsaWRNb3Rpb25Qcm9wIiwiaXNWYWxpZFByb3AiLCJzaG91bGRGb3J3YXJkIiwiY2FsY09yaWdpbiIsIm9yaWdpbiIsIm9mZnNldCIsImRhc2hLZXlzIiwiYXJyYXkiLCJjYW1lbEtleXMiLCJidWlsZFNWR0F0dHJzIiwiYXR0clgiLCJhdHRyWSIsInBhdGhMZW5ndGgiLCJwYXRoU3BhY2luZyIsInBhdGhPZmZzZXQiLCJhdHRycyIsImRpbWVuc2lvbnMiLCJweE9yaWdpblgiLCJweE9yaWdpblkiLCJjYWxjU1ZHVHJhbnNmb3JtT3JpZ2luIiwic3BhY2luZyIsInVzZURhc2hDYXNlIiwiYnVpbGRTVkdQYXRoIiwiY3JlYXRlU3ZnUmVuZGVyU3RhdGUiLCJ1c2VTVkdQcm9wcyIsInZpc3VhbFByb3BzIiwicmF3U3R5bGVzIiwiY3JlYXRlVXNlUmVuZGVyIiwiZm9yd2FyZE1vdGlvblByb3BzIiwiZmlsdGVyZWRQcm9wcyIsImlzRG9tIiwiZmlsdGVyUHJvcHMiLCJlbGVtZW50UHJvcHMiLCJjcmVhdGVFbGVtZW50IiwiQ0FNRUxfQ0FTRV9QQVRURVJOIiwiY2FtZWxUb0Rhc2giLCJzdHIiLCJyZXBsYWNlIiwidG9Mb3dlckNhc2UiLCJyZW5kZXJIVE1MIiwiZWxlbWVudCIsInN0eWxlUHJvcCIsImdldFByb2plY3Rpb25TdHlsZXMiLCJzZXRQcm9wZXJ0eSIsImNhbWVsQ2FzZUF0dHJpYnV0ZXMiLCJyZW5kZXJTVkciLCJyZW5kZXJTdGF0ZSIsIl9zdHlsZVByb3AiLCJzZXRBdHRyaWJ1dGUiLCJzY3JhcGVNb3Rpb25WYWx1ZXNGcm9tUHJvcHMiLCJuZXdWYWx1ZXMiLCJ0b1VwcGVyQ2FzZSIsImlzQW5pbWF0aW9uQ29udHJvbHMiLCJpc0tleWZyYW1lc1RhcmdldCIsImlzQ3VzdG9tVmFsdWUiLCJtaXgiLCJ0b1ZhbHVlIiwicmVzb2x2ZUZpbmFsVmFsdWVJbktleWZyYW1lcyIsInJlc29sdmVNb3Rpb25WYWx1ZSIsInVud3JhcHBlZFZhbHVlIiwibWFrZVN0YXRlIiwiY3JlYXRlUmVuZGVyU3RhdGUiLCJvbk1vdW50IiwibWFrZUxhdGVzdFZhbHVlcyIsIm1ha2VVc2VWaXN1YWxTdGF0ZSIsInNjcmFwZU1vdGlvblZhbHVlcyIsIm1vdGlvblZhbHVlcyIsImlzQ29udHJvbGxpbmdWYXJpYW50cyIsImlzVmFyaWFudE5vZGUiLCJpbml0aWFsQW5pbWF0aW9uSXNCbG9ja2VkIiwidmFyaWFudFRvU2V0IiwicmVzb2x2ZWQiLCJ0cmFuc2l0aW9uRW5kIiwidHJhbnNpdGlvbiIsInZhbHVlVGFyZ2V0IiwiQW5pbWF0aW9uVHlwZSIsInN2Z01vdGlvbkNvbmZpZyIsImdldEJCb3giLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJodG1sTW90aW9uQ29uZmlnIiwiYWRkRG9tRXZlbnQiLCJldmVudE5hbWUiLCJoYW5kbGVyIiwicGFzc2l2ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidXNlRG9tRXZlbnQiLCJpc01vdXNlRXZlbnQiLCJldmVudCIsIlBvaW50ZXJFdmVudCIsInBvaW50ZXJUeXBlIiwiTW91c2VFdmVudCIsImlzVG91Y2hFdmVudCIsInRvdWNoZXMiLCJkZWZhdWx0UGFnZVBvaW50IiwicGFnZVgiLCJwYWdlWSIsInBvaW50RnJvbVRvdWNoIiwicG9pbnRUeXBlIiwicG9pbnQiLCJjaGFuZ2VkVG91Y2hlcyIsInBvaW50RnJvbU1vdXNlIiwiZXh0cmFjdEV2ZW50SW5mbyIsIndyYXBIYW5kbGVyIiwic2hvdWxkRmlsdGVyUHJpbWFyeVBvaW50ZXIiLCJldmVudEhhbmRsZXIiLCJsaXN0ZW5lciIsImJ1dHRvbiIsInN1cHBvcnRzUG9pbnRlckV2ZW50cyIsIm9ucG9pbnRlcmRvd24iLCJzdXBwb3J0c1RvdWNoRXZlbnRzIiwib250b3VjaHN0YXJ0Iiwic3VwcG9ydHNNb3VzZUV2ZW50cyIsIm9ubW91c2Vkb3duIiwibW91c2VFdmVudE5hbWVzIiwicG9pbnRlcmRvd24iLCJwb2ludGVybW92ZSIsInBvaW50ZXJ1cCIsInBvaW50ZXJjYW5jZWwiLCJwb2ludGVyb3ZlciIsInBvaW50ZXJvdXQiLCJwb2ludGVyZW50ZXIiLCJwb2ludGVybGVhdmUiLCJ0b3VjaEV2ZW50TmFtZXMiLCJnZXRQb2ludGVyRXZlbnROYW1lIiwiYWRkUG9pbnRlckV2ZW50IiwidXNlUG9pbnRlckV2ZW50IiwiY3JlYXRlTG9jayIsImxvY2siLCJnbG9iYWxIb3Jpem9udGFsTG9jayIsImdsb2JhbFZlcnRpY2FsTG9jayIsImdldEdsb2JhbExvY2siLCJvcGVuSG9yaXpvbnRhbF8xIiwib3BlblZlcnRpY2FsXzEiLCJpc0RyYWdBY3RpdmUiLCJvcGVuR2VzdHVyZUxvY2siLCJjcmVhdGVIb3ZlckV2ZW50IiwiaXNBY3RpdmUiLCJpbmZvIiwic2V0QWN0aXZlIiwiSG92ZXIiLCJpc05vZGVPckNoaWxkIiwicGFyZW50RWxlbWVudCIsImNvbWJpbmVGdW5jdGlvbnMiLCJwaXBlIiwidHJhbnNmb3JtZXJzIiwid2FybmVkIiwib2JzZXJ2ZXJDYWxsYmFja3MiLCJXZWFrTWFwIiwib2JzZXJ2ZXJzIiwiZmlyZU9ic2VydmVyQ2FsbGJhY2siLCJlbnRyeSIsImZpcmVBbGxPYnNlcnZlckNhbGxiYWNrcyIsImVudHJpZXMiLCJ0aHJlc2hvbGROYW1lcyIsImFsbCIsInVzZUludGVyc2VjdGlvbk9ic2VydmVyIiwic2hvdWxkT2JzZXJ2ZSIsInJvb3QiLCJyb290TWFyZ2luIiwiYW1vdW50Iiwib25jZSIsInRocmVzaG9sZCIsInJvb3RJbnRlcmVzZWN0aW9uT2JzZXJ2ZXIiLCJsb29rdXBSb290Iiwicm9vdE9ic2VydmVycyIsIkpTT04iLCJzdHJpbmdpZnkiLCJJbnRlcnNlY3Rpb25PYnNlcnZlciIsImluaXRJbnRlcnNlY3Rpb25PYnNlcnZlciIsIm9ic2VydmUiLCJ1bm9ic2VydmUiLCJvYnNlcnZlSW50ZXJzZWN0aW9uIiwiZ2V0SW5zdGFuY2UiLCJpc0ludGVyc2VjdGluZyIsImlzSW5WaWV3IiwiaGFzRW50ZXJlZFZpZXciLCJJblZpZXciLCJvblZpZXdwb3J0RW50ZXIiLCJvblZpZXdwb3J0TGVhdmUiLCJ1c2VNaXNzaW5nSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCJmYWxsYmFjayIsIm1lc3NhZ2UiLCJtYWtlUmVuZGVybGVzc0NvbXBvbmVudCIsImhvb2siLCJnZXN0dXJlQW5pbWF0aW9ucyIsIndoaWxlSW5WaWV3Iiwidmlld3BvcnQiLCJvblRhcCIsIm9uVGFwU3RhcnQiLCJvblRhcENhbmNlbCIsImhhc1ByZXNzTGlzdGVuZXJzIiwiaXNQcmVzc2luZyIsImNhbmNlbFBvaW50ZXJFbmRMaXN0ZW5lcnMiLCJldmVudE9wdGlvbnMiLCJvblBvaW50ZXJEb3duIiwicmVtb3ZlUG9pbnRlckVuZExpc3RlbmVyIiwiY2hlY2tQb2ludGVyRW5kIiwiVGFwIiwib25Qb2ludGVyVXAiLCJvblBvaW50ZXJDYW5jZWwiLCJGb2N1cyIsIm9uSG92ZXJTdGFydCIsIm9uSG92ZXJFbmQiLCJ1c2VQcmVzZW5jZSIsInNoYWxsb3dDb21wYXJlIiwicHJldiIsInByZXZMZW5ndGgiLCJzYWZlTWluIiwibWluRHVyYXRpb24iLCJtYXhEdXJhdGlvbiIsIm1pbkRhbXBpbmciLCJtYXhEYW1waW5nIiwicm9vdEl0ZXJhdGlvbnMiLCJjYWxjQW5ndWxhckZyZXEiLCJ1bmRhbXBlZEZyZXEiLCJkYW1waW5nUmF0aW8iLCJzcXJ0IiwiZHVyYXRpb25LZXlzIiwicGh5c2ljc0tleXMiLCJpc1NwcmluZ1R5cGUiLCJzcHJpbmciLCJyZXN0U3BlZWQiLCJyZXN0RGVsdGEiLCJzdGlmZm5lc3MiLCJkYW1waW5nIiwibWFzcyIsImR1cmF0aW9uIiwiaXNSZXNvbHZlZEZyb21EdXJhdGlvbiIsInNwcmluZ09wdGlvbnMiLCJkZXJpdmVkIiwiYm91bmNlIiwiZW52ZWxvcGUiLCJkZXJpdmF0aXZlIiwiZXhwb25lbnRpYWxEZWNheSIsImMiLCJleHAiLCJwb3ciLCJmIiwiZyIsImluaXRpYWxHdWVzcyIsImFwcHJveGltYXRlUm9vdCIsImlzTmFOIiwiZmluZFNwcmluZyIsImdldFNwcmluZ09wdGlvbnMiLCJyZXNvbHZlU3ByaW5nIiwiemVybyIsInJlc29sdmVWZWxvY2l0eSIsImNyZWF0ZVNwcmluZyIsImluaXRpYWxWZWxvY2l0eSIsImluaXRpYWxEZWx0YSIsInVuZGFtcGVkQW5ndWxhckZyZXEiLCJhYnMiLCJhbmd1bGFyRnJlcSIsInNpbiIsImNvcyIsImRhbXBlZEFuZ3VsYXJGcmVxIiwiZnJlcUZvclQiLCJzaW5oIiwiY29zaCIsImlzQmVsb3dWZWxvY2l0eVRocmVzaG9sZCIsImlzQmVsb3dEaXNwbGFjZW1lbnRUaHJlc2hvbGQiLCJmbGlwVGFyZ2V0IiwibmVlZHNJbnRlcnBvbGF0aW9uIiwiX3QiLCJwcm9ncmVzcyIsInRvRnJvbURpZmZlcmVuY2UiLCJpc0NvbG9yU3RyaW5nIiwidGVzdFByb3AiLCJzcGxpdENvbG9yIiwiYU5hbWUiLCJiTmFtZSIsImNOYW1lIiwibWF0Y2giLCJjbGFtcFJnYlVuaXQiLCJyZ2JVbml0IiwicmdiYSIsInJlZCIsImdyZWVuIiwiYmx1ZSIsImFscGhhJDEiLCJoZXgiLCJzdWJzdHIiLCJwYXJzZUludCIsImhzbGEiLCJodWUiLCJzYXR1cmF0aW9uIiwibGlnaHRuZXNzIiwiaHVlVG9SZ2IiLCJxIiwiaHNsYVRvUmdiYSIsIm1peExpbmVhckNvbG9yIiwiZnJvbUV4cG8iLCJ0b0V4cG8iLCJjb2xvclR5cGVzIiwiZ2V0Q29sb3JUeXBlIiwiZmluZCIsIm5vdEFuaW1hdGFibGUiLCJjb2xvciIsIm1peENvbG9yIiwiZnJvbUNvbG9yVHlwZSIsInRvQ29sb3JUeXBlIiwiZnJvbUNvbG9yIiwidG9Db2xvciIsImJsZW5kZWQiLCJjb2xvclRva2VuIiwibnVtYmVyVG9rZW4iLCJhbmFseXNlIiwibnVtQ29sb3JzIiwiY29sb3JzIiwibnVtYmVycyIsInRva2VuaXNlZCIsImNyZWF0ZVRyYW5zZm9ybWVyIiwibnVtVmFsdWVzIiwib3V0cHV0IiwiY29udmVydE51bWJlcnNUb1plcm8iLCJjb21wbGV4IiwiZ2V0QW5pbWF0YWJsZU5vbmUiLCJwYXJzZWQiLCJ0cmFuc2Zvcm1lciIsImlzTnVtIiwiZ2V0TWl4ZXIiLCJtaXhDb21wbGV4IiwibWl4QXJyYXkiLCJibGVuZFZhbHVlIiwiZnJvbVRoaXMiLCJtaXhPYmplY3QiLCJudW1OdW1iZXJzIiwibnVtUkdCIiwibnVtSFNMIiwidGVtcGxhdGUiLCJvcmlnaW5TdGF0cyIsInRhcmdldFN0YXRzIiwibWl4TnVtYmVyIiwiaW50ZXJwb2xhdGUiLCJpbnB1dCIsImlzQ2xhbXAiLCJlYXNlIiwibWl4ZXIiLCJpbnB1dExlbmd0aCIsInJldmVyc2UiLCJtaXhlcnMiLCJjdXN0b21NaXhlciIsIm1peGVyRmFjdG9yeSIsIm51bU1peGVycyIsImVhc2luZ0Z1bmN0aW9uIiwiY3JlYXRlTWl4ZXJzIiwiaW50ZXJwb2xhdG9yIiwiZmFzdEludGVycG9sYXRlIiwibGFzdElucHV0SW5kZXgiLCJtaXhlckluZGV4IiwiZm91bmRNaXhlckluZGV4IiwicHJvZ3Jlc3NJblJhbmdlIiwic2xvd0ludGVycG9sYXRlIiwicmV2ZXJzZUVhc2luZyIsImVhc2luZyIsIm1pcnJvckVhc2luZyIsImNyZWF0ZUJhY2tJbiIsInBvd2VyIiwibGluZWFyIiwiZWFzZUluIiwiZWFzZU91dCIsImVhc2VJbk91dCIsImNpcmNJbiIsImFjb3MiLCJjaXJjT3V0IiwiY2lyY0luT3V0IiwiYmFja0luIiwiYmFja091dCIsImJhY2tJbk91dCIsImFudGljaXBhdGUiLCJiYWNrRWFzaW5nIiwiY3JlYXRlQW50aWNpcGF0ZSIsImJvdW5jZU91dCIsInAyIiwiYm91bmNlSW4iLCJkZWZhdWx0RWFzaW5nIiwia2V5ZnJhbWVzIiwidGltZXMiLCJjb252ZXJ0T2Zmc2V0VG9UaW1lcyIsIl92YWx1ZSIsImRlZmF1bHRPZmZzZXQiLCJjcmVhdGVJbnRlcnBvbGF0b3IiLCJ0eXBlcyIsInRpbWVDb25zdGFudCIsIm1vZGlmeVRhcmdldCIsImFtcGxpdHVkZSIsImlkZWFsIiwibG9vcEVsYXBzZWQiLCJlbGFwc2VkIiwiZGVsYXkiLCJmcmFtZXN5bmMiLCJ1cGRhdGUiLCJwYXNzVGltZXN0YW1wIiwic3RvcCIsImF1dG9wbGF5IiwiZHJpdmVyIiwicmVwZWF0IiwicmVwZWF0TWF4IiwicmVwZWF0VHlwZSIsInJlcGVhdERlbGF5Iiwib25QbGF5Iiwib25TdG9wIiwib25Db21wbGV0ZSIsIm9uUmVwZWF0Iiwib25VcGRhdGUiLCJkcml2ZXJDb250cm9scyIsImxhdGVzdCIsImludGVycG9sYXRlRnJvbU51bWJlciIsInJlcGVhdENvdW50IiwiY29tcHV0ZWREdXJhdGlvbiIsImlzQ29tcGxldGUiLCJpc0ZvcndhcmRQbGF5YmFjayIsImFuaW1hdG9yIiwiZGV0ZWN0QW5pbWF0aW9uRnJvbU9wdGlvbnMiLCJoYXNSZXBlYXREZWxheUVsYXBzZWQiLCJyZXZlcnNlRWxhcHNlZCIsInZlbG9jaXR5UGVyU2Vjb25kIiwiZnJhbWVEdXJhdGlvbiIsInNlY29uZHNUb01pbGxpc2Vjb25kcyIsInNlY29uZHMiLCJhMSIsImEyIiwiY2FsY0JlemllciIsImdldFNsb3BlIiwic3ViZGl2aXNpb25QcmVjaXNpb24iLCJzdWJkaXZpc2lvbk1heEl0ZXJhdGlvbnMiLCJuZXd0b25JdGVyYXRpb25zIiwibmV3dG9uTWluU2xvcGUiLCJrU3BsaW5lVGFibGVTaXplIiwia1NhbXBsZVN0ZXBTaXplIiwiY3ViaWNCZXppZXIiLCJtWDEiLCJtWTEiLCJtWDIiLCJtWTIiLCJzYW1wbGVWYWx1ZXMiLCJGbG9hdDMyQXJyYXkiLCJhWCIsImludGVydmFsU3RhcnQiLCJjdXJyZW50U2FtcGxlIiwibGFzdFNhbXBsZSIsImd1ZXNzRm9yVCIsImluaXRpYWxTbG9wZSIsImFHdWVzc1QiLCJjdXJyZW50U2xvcGUiLCJuZXd0b25SYXBoc29uSXRlcmF0ZSIsImFBIiwiYUIiLCJjdXJyZW50WCIsImN1cnJlbnRUIiwiYmluYXJ5U3ViZGl2aWRlIiwiZ2V0VEZvclgiLCJlYXNpbmdMb29rdXAiLCJib3VuY2VJbk91dCIsImVhc2luZ0RlZmluaXRpb25Ub0Z1bmN0aW9uIiwiaXNFYXNpbmdBcnJheSIsImlzQW5pbWF0YWJsZSIsInVuZGVyRGFtcGVkU3ByaW5nIiwiY3JpdGljYWxseURhbXBlZFNwcmluZyIsImxpbmVhclR3ZWVuIiwiZGVmYXVsdFRyYW5zaXRpb25zIiwiYmFja2dyb3VuZENvbG9yIiwiZ2V0RGVmYXVsdFRyYW5zaXRpb24iLCJ2YWx1ZUtleSIsInRyYW5zaXRpb25GYWN0b3J5IiwibWF4RGVmYXVsdHMiLCJhcHBseURlZmF1bHRGaWx0ZXIiLCJkZWZhdWx0VmFsdWUiLCJmdW5jdGlvblJlZ2V4IiwiZmlsdGVyIiwiZnVuY3Rpb25zIiwiZGVmYXVsdFZhbHVlVHlwZXMiLCJvdXRsaW5lQ29sb3IiLCJmaWxsIiwic3Ryb2tlIiwiYm9yZGVyQ29sb3IiLCJib3JkZXJUb3BDb2xvciIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJCb3R0b21Db2xvciIsImJvcmRlckxlZnRDb2xvciIsIldlYmtpdEZpbHRlciIsImdldERlZmF1bHRWYWx1ZVR5cGUiLCJkZWZhdWx0VmFsdWVUeXBlIiwiaW5zdGFudEFuaW1hdGlvblN0YXRlIiwibGVnYWN5UmVwZWF0V2FybmluZyIsImdldEFuaW1hdGlvbiIsInZhbHVlVHJhbnNpdGlvbiIsImdldFZhbHVlVHJhbnNpdGlvbiIsImlzVGFyZ2V0QW5pbWF0YWJsZSIsImlzWmVybyIsImdldFplcm9Vbml0IiwiaXNPcmlnaW5BbmltYXRhYmxlIiwiYm91bmNlU3RpZmZuZXNzIiwiYm91bmNlRGFtcGluZyIsImN1cnJlbnRBbmltYXRpb24iLCJpc091dE9mQm91bmRzIiwiYm91bmRhcnlOZWFyZXN0Iiwic3RhcnRBbmltYXRpb24iLCJzdGFydFNwcmluZyIsImJvdW5kYXJ5IiwiaGVhZGluZyIsImNoZWNrQm91bmRhcnkiLCJpbmVydGlhIiwiaHlkcmF0ZUtleWZyYW1lcyIsIndoZW4iLCJkZWxheUNoaWxkcmVuIiwic3RhZ2dlckNoaWxkcmVuIiwic3RhZ2dlckRpcmVjdGlvbiIsImlzVHJhbnNpdGlvbkRlZmluZWQiLCJ5b3lvIiwiZmxpcCIsImxvb3AiLCJjb252ZXJ0VHJhbnNpdGlvblRvQW5pbWF0aW9uT3B0aW9ucyIsImdldFBvcG1vdGlvbkFuaW1hdGlvbk9wdGlvbnMiLCJmaW5hbFRhcmdldCIsInBvdGVudGlhbFVuaXRUeXBlIiwiZGVsYXlUaW1lciIsImNvbnRyb2xzIiwiZ2V0RGVsYXlGcm9tVHJhbnNpdGlvbiIsImNsZWFyVGltZW91dCIsImlzWmVyb1ZhbHVlU3RyaW5nIiwiYWRkVW5pcXVlSXRlbSIsImFyciIsIml0ZW0iLCJyZW1vdmVJdGVtIiwiU3Vic2NyaXB0aW9uTWFuYWdlciIsInN1YnNjcmlwdGlvbnMiLCJfdGhpcyIsIm5vdGlmeSIsIm51bVN1YnNjcmlwdGlvbnMiLCJnZXRTaXplIiwiaXNGbG9hdCIsIk1vdGlvblZhbHVlIiwidmVyc2lvbiIsInRpbWVEZWx0YSIsImxhc3RVcGRhdGVkIiwidXBkYXRlU3Vic2NyaWJlcnMiLCJ2ZWxvY2l0eVVwZGF0ZVN1YnNjcmliZXJzIiwicmVuZGVyU3Vic2NyaWJlcnMiLCJjYW5UcmFja1ZlbG9jaXR5IiwidXBkYXRlQW5kTm90aWZ5Iiwic2NoZWR1bGVWZWxvY2l0eUNoZWNrIiwidmVsb2NpdHlDaGVjayIsImhhc0FuaW1hdGVkIiwib25DaGFuZ2UiLCJzdWJzY3JpcHRpb24iLCJjbGVhckxpc3RlbmVycyIsIm9uUmVuZGVyUmVxdWVzdCIsImF0dGFjaCIsInBhc3NpdmVFZmZlY3QiLCJnZXRQcmV2aW91cyIsInN0b3BBbmltYXRpb24iLCJjbGVhckFuaW1hdGlvbiIsImlzQW5pbWF0aW5nIiwiZGVzdHJveSIsIm1vdGlvblZhbHVlIiwidGVzdFZhbHVlVHlwZSIsImRpbWVuc2lvblZhbHVlVHlwZXMiLCJmaW5kRGltZW5zaW9uVmFsdWVUeXBlIiwidmFsdWVUeXBlcyIsImZpbmRWYWx1ZVR5cGUiLCJzZXRNb3Rpb25WYWx1ZSIsImhhc1ZhbHVlIiwiZ2V0VmFsdWUiLCJhZGRWYWx1ZSIsImdldE9yaWdpbkZyb21UcmFuc2l0aW9uIiwiYW5pbWF0ZVZhcmlhbnQiLCJ2YXJpYW50IiwidHJhbnNpdGlvbk92ZXJyaWRlIiwiYW5pbWF0ZVRhcmdldCIsImdldENoaWxkQW5pbWF0aW9ucyIsInZhcmlhbnRDaGlsZHJlbiIsImZvcndhcmREZWxheSIsImFuaW1hdGlvbnMiLCJtYXhTdGFnZ2VyRHVyYXRpb24iLCJnZW5lcmF0ZVN0YWdnZXJEdXJhdGlvbiIsInNvcnRCeVRyZWVPcmRlciIsIm5vdGlmeUFuaW1hdGlvbkNvbXBsZXRlIiwiYW5pbWF0ZUNoaWxkcmVuIiwiZmlyc3QiLCJsYXN0IiwiX2UiLCJtYWtlVGFyZ2V0QW5pbWF0YWJsZSIsIl9mIiwiYW5pbWF0aW9uVHlwZVN0YXRlIiwiZ2V0U3RhdGUiLCJzaG91bGRCbG9ja0FuaW1hdGlvbiIsInNldFRhcmdldCIsInNvcnROb2RlUG9zaXRpb24iLCJwcm90ZWN0ZWRLZXlzIiwibmVlZHNBbmltYXRpbmciLCJzaG91bGRCbG9jayIsInZhcmlhbnRQcmlvcml0eU9yZGVyIiwiQW5pbWF0ZSIsIkRyYWciLCJFeGl0IiwicmV2ZXJzZVByaW9yaXR5T3JkZXIiLCJudW1BbmltYXRpb25UeXBlcyIsImNyZWF0ZUFuaW1hdGlvblN0YXRlIiwibm90aWZ5QW5pbWF0aW9uU3RhcnQiLCJyZXNvbHZlZERlZmluaXRpb24iLCJhbmltYXRlVmlzdWFsRWxlbWVudCIsImFuaW1hdGVMaXN0IiwiY3JlYXRlVHlwZVN0YXRlIiwiYWxsQW5pbWF0ZWRLZXlzIiwiYnVpbGRSZXNvbHZlZFR5cGVWYWx1ZXMiLCJjaGFuZ2VkQWN0aXZlVHlwZSIsImdldFZhcmlhbnRDb250ZXh0IiwicmVtb3ZlZEtleXMiLCJlbmNvdW50ZXJlZEtleXMiLCJyZW1vdmVkVmFyaWFudEluZGV4IiwiSW5maW5pdHkiLCJfbG9vcF8xIiwidHlwZVN0YXRlIiwicHJvcElzVmFyaWFudCIsImFjdGl2ZURlbHRhIiwiaXNJbmhlcml0ZWQiLCJtYW51YWxseUFuaW1hdGVPbk1vdW50IiwicHJldlByb3AiLCJ2YXJpYW50RGlkQ2hhbmdlIiwiY2hlY2tWYXJpYW50c0RpZENoYW5nZSIsInNob3VsZEFuaW1hdGVUeXBlIiwiZGVmaW5pdGlvbkxpc3QiLCJyZXNvbHZlZFZhbHVlcyIsInByZXZSZXNvbHZlZFZhbHVlcyIsImFsbEtleXMiLCJtYXJrVG9BbmltYXRlIiwiZmFsbGJhY2tBbmltYXRpb25fMSIsImZhbGxiYWNrVGFyZ2V0IiwiZ2V0QmFzZVRhcmdldCIsInNob3VsZEFuaW1hdGUiLCJpc0FuaW1hdGVkIiwic2V0QW5pbWF0ZUZ1bmN0aW9uIiwibWFrZUFuaW1hdG9yIiwic3Vic2NyaWJlIiwic2FmZVRvUmVtb3ZlIiwiaXNQb2ludCIsImlzUG9pbnQzRCIsImRpc3RhbmNlMUQiLCJ4RGVsdGEiLCJ5RGVsdGEiLCJ6RGVsdGEiLCJQYW5TZXNzaW9uIiwiaGFuZGxlcnMiLCJzdGFydEV2ZW50IiwibGFzdE1vdmVFdmVudCIsImxhc3RNb3ZlRXZlbnRJbmZvIiwidXBkYXRlUG9pbnQiLCJnZXRQYW5JbmZvIiwiaGlzdG9yeSIsImlzUGFuU3RhcnRlZCIsImlzRGlzdGFuY2VQYXN0VGhyZXNob2xkIiwib25TdGFydCIsIm9uTW92ZSIsImhhbmRsZVBvaW50ZXJNb3ZlIiwidHJhbnNmb3JtUG9pbnQiLCJidXR0b25zIiwiaGFuZGxlUG9pbnRlclVwIiwiZW5kIiwib25FbmQiLCJvblNlc3Npb25FbmQiLCJwYW5JbmZvIiwiaW5pdGlhbEluZm8iLCJvblNlc3Npb25TdGFydCIsInJlbW92ZUxpc3RlbmVycyIsInVwZGF0ZUhhbmRsZXJzIiwic3VidHJhY3RQb2ludCIsImxhc3REZXZpY2VQb2ludCIsInN0YXJ0RGV2aWNlUG9pbnQiLCJ0aW1lc3RhbXBlZFBvaW50IiwibGFzdFBvaW50IiwidGltZSIsImNhbGNMZW5ndGgiLCJheGlzIiwiaXNOZWFyIiwibWF4RGlzdGFuY2UiLCJjYWxjQXhpc0RlbHRhIiwib3JpZ2luUG9pbnQiLCJ0cmFuc2xhdGUiLCJjYWxjQm94RGVsdGEiLCJjYWxjUmVsYXRpdmVBeGlzIiwicmVsYXRpdmUiLCJjYWxjUmVsYXRpdmVBeGlzUG9zaXRpb24iLCJjYWxjUmVsYXRpdmVQb3NpdGlvbiIsImNhbGNSZWxhdGl2ZUF4aXNDb25zdHJhaW50cyIsImNhbGNWaWV3cG9ydEF4aXNDb25zdHJhaW50cyIsImxheW91dEF4aXMiLCJjb25zdHJhaW50c0F4aXMiLCJkZWZhdWx0RWxhc3RpYyIsInJlc29sdmVBeGlzRWxhc3RpYyIsImRyYWdFbGFzdGljIiwibWluTGFiZWwiLCJtYXhMYWJlbCIsInJlc29sdmVQb2ludEVsYXN0aWMiLCJsYWJlbCIsImNyZWF0ZURlbHRhIiwiY3JlYXRlQm94IiwiZWFjaEF4aXMiLCJjb252ZXJ0Qm91bmRpbmdCb3hUb0JveCIsImlzSWRlbnRpdHlTY2FsZSIsImhhc1NjYWxlIiwiaGFzVHJhbnNsYXRlIiwic2NhbGVQb2ludCIsImFwcGx5UG9pbnREZWx0YSIsImJveFNjYWxlIiwiYXBwbHlBeGlzRGVsdGEiLCJhcHBseUJveERlbHRhIiwiYm94IiwidHJhbnNsYXRlQXhpcyIsInRyYW5zZm9ybUF4aXMiLCJ0cmFuc2Zvcm1zIiwic2NhbGVLZXkiLCJvcmlnaW5LZXkiLCJheGlzT3JpZ2luIiwieEtleXMiLCJ5S2V5cyIsInRyYW5zZm9ybUJveCIsIm1lYXN1cmVWaWV3cG9ydEJveCIsInRvcExlZnQiLCJib3R0b21SaWdodCIsInRyYW5zZm9ybUJveFBvaW50cyIsImVsZW1lbnREcmFnQ29udHJvbHMiLCJWaXN1YWxFbGVtZW50RHJhZ0NvbnRyb2xzIiwib3Blbkdsb2JhbExvY2siLCJpc0RyYWdnaW5nIiwiY3VycmVudERpcmVjdGlvbiIsImNvbnN0cmFpbnRzIiwiaGFzTXV0YXRlZENvbnN0cmFpbnRzIiwiZWxhc3RpYyIsIm9yaWdpbkV2ZW50Iiwic25hcFRvQ3Vyc29yIiwicGFuU2Vzc2lvbiIsImRyYWdQcm9wYWdhdGlvbiIsIm9uRHJhZ1N0YXJ0IiwicmVzb2x2ZUNvbnN0cmFpbnRzIiwiaXNBbmltYXRpb25CbG9ja2VkIiwiZ2V0QXhpc01vdGlvblZhbHVlIiwibWVhc3VyZWRBeGlzIiwiYWN0dWFsIiwiZHJhZ0RpcmVjdGlvbkxvY2siLCJvbkRpcmVjdGlvbkxvY2siLCJvbkRyYWciLCJsb2NrVGhyZXNob2xkIiwiZGlyZWN0aW9uIiwiZ2V0Q3VycmVudERpcmVjdGlvbiIsInVwZGF0ZUF4aXMiLCJnZXRUcmFuc2Zvcm1QYWdlUG9pbnQiLCJvbkRyYWdFbmQiLCJfcG9pbnQiLCJzaG91bGREcmFnIiwiYXhpc1ZhbHVlIiwicHJldkNvbnN0cmFpbnRzIiwicmVzb2x2ZVJlZkNvbnN0cmFpbnRzIiwibGF5b3V0Qm94IiwiY2FsY1JlbGF0aXZlQ29uc3RyYWludHMiLCJyZXNvbHZlRHJhZ0VsYXN0aWMiLCJyZWxhdGl2ZUNvbnN0cmFpbnRzIiwicmViYXNlQXhpc0NvbnN0cmFpbnRzIiwib25NZWFzdXJlRHJhZ0NvbnN0cmFpbnRzIiwiY29uc3RyYWludHNFbGVtZW50IiwiY29uc3RyYWludHNCb3giLCJyb290UHJvamVjdGlvbk5vZGUiLCJ2aWV3cG9ydEJveCIsInNjcm9sbCIsIm1lYXN1cmVQYWdlQm94IiwibWVhc3VyZWRDb25zdHJhaW50cyIsImNhbGNWaWV3cG9ydENvbnN0cmFpbnRzIiwidXNlckNvbnN0cmFpbnRzIiwiY29udmVydEJveFRvQm91bmRpbmdCb3giLCJkcmFnTW9tZW50dW0iLCJkcmFnVHJhbnNpdGlvbiIsImRyYWdTbmFwVG9PcmlnaW4iLCJvbkRyYWdUcmFuc2l0aW9uRW5kIiwibW9tZW50dW1BbmltYXRpb25zIiwic3RhcnRBeGlzVmFsdWVBbmltYXRpb24iLCJkcmFnS2V5Iiwic2NhbGVQb3NpdGlvbldpdGhpbkNvbnN0cmFpbnRzIiwiYm94UHJvZ3Jlc3MiLCJzb3VyY2VMZW5ndGgiLCJ0YXJnZXRMZW5ndGgiLCJ1cGRhdGVTY3JvbGwiLCJ1cGRhdGVMYXlvdXQiLCJhZGRMaXN0ZW5lcnMiLCJzdG9wUG9pbnRlckxpc3RlbmVyIiwibWVhc3VyZURyYWdDb25zdHJhaW50cyIsInN0b3BNZWFzdXJlTGF5b3V0TGlzdGVuZXIiLCJzdG9wUmVzaXplTGlzdGVuZXIiLCJoYXNMYXlvdXRDaGFuZ2VkIiwib25QYW4iLCJvblBhblN0YXJ0Iiwib25QYW5FbmQiLCJvblBhblNlc3Npb25TdGFydCIsImhhc1BhbkV2ZW50cyIsImdyb3VwRHJhZ0NvbnRyb2xzIiwiZHJhZ0NvbnRyb2xzIiwibmFtZXMiLCJ0cmVlVHlwZSIsImJ1aWxkIiwicmVuZGVySW5zdGFuY2UiLCJyZWFkVmFsdWVGcm9tSW5zdGFuY2UiLCJyZW1vdmVWYWx1ZUZyb21SZW5kZXJTdGF0ZSIsInJlbW92ZUZyb21WYXJpYW50VHJlZSIsImxpZmVjeWNsZXMiLCJtYW5hZ2VycyIsInByb3BTdWJzY3JpcHRpb25zIiwiY2xlYXJBbGxMaXN0ZW5lcnMiLCJtYW5hZ2VyIiwidXBkYXRlUHJvcExpc3RlbmVycyIsIm9uIiwicHJvcExpc3RlbmVyIiwiYXJncyIsIl9pIiwiY3JlYXRlTGlmZWN5Y2xlcyIsInZhbHVlU3Vic2NyaXB0aW9ucyIsInByZXZNb3Rpb25WYWx1ZXMiLCJiYXNlVGFyZ2V0IiwidHJpZ2dlckJ1aWxkIiwibm90aWZ5VXBkYXRlIiwiYmluZFRvTW90aW9uVmFsdWUiLCJyZW1vdmVPbkNoYW5nZSIsImxhdGVzdFZhbHVlIiwicmVtb3ZlT25SZW5kZXJSZXF1ZXN0IiwiaW5pdGlhbE1vdGlvblZhbHVlcyIsImRlcHRoIiwiaXNWaXNpYmxlIiwibmV3SW5zdGFuY2UiLCJhZGRWYXJpYW50Q2hpbGQiLCJyZW1vdmUiLCJjbG9zZXN0VmFyaWFudE5vZGUiLCJnZXRDbG9zZXN0VmFyaWFudE5vZGUiLCJvdGhlciIsImdldExheW91dElkIiwiZ2V0U3RhdGljVmFsdWUiLCJzZXRTdGF0aWNWYWx1ZSIsInNldFZpc2liaWxpdHkiLCJ2aXNpYmlsaXR5IiwiY2FuTXV0YXRlIiwicmVtb3ZlVmFsdWUiLCJyZWFkVmFsdWUiLCJzZXRCYXNlVGFyZ2V0IiwibmV3UHJvcHMiLCJuZXh0VmFsdWUiLCJwcmV2VmFsdWUiLCJleGlzdGluZ1ZhbHVlIiwidXBkYXRlTW90aW9uVmFsdWVzRnJvbVByb3BzIiwiZ2V0VmFyaWFudCIsInN0YXJ0QXRQYXJlbnQiLCJjb250ZXh0XzEiLCJudW1WYXJpYW50UHJvcHMiLCJ2YXJpYW50UHJvcHMiLCJjc3NWYXJpYWJsZVJlZ2V4IiwibWF4RGVwdGgiLCJnZXRWYXJpYWJsZVZhbHVlIiwiZXhlYyIsInBhcnNlQ1NTVmFyaWFibGUiLCJ0b2tlbiIsImdldENvbXB1dGVkU3R5bGUiLCJnZXRQcm9wZXJ0eVZhbHVlIiwiQm91bmRpbmdCb3hEaW1lbnNpb24iLCJwb3NpdGlvbmFsS2V5cyIsImlzUG9zaXRpb25hbEtleSIsInNldEFuZFJlc2V0VmVsb2NpdHkiLCJpc051bU9yUHhUeXBlIiwiZ2V0UG9zRnJvbU1hdHJpeCIsIm1hdHJpeCIsInBvcyIsImdldFRyYW5zbGF0ZUZyb21NYXRyaXgiLCJwb3MyIiwicG9zMyIsIl9iYm94IiwibWF0cml4M2QiLCJub25UcmFuc2xhdGlvbmFsVHJhbnNmb3JtS2V5cyIsInBvc2l0aW9uYWxWYWx1ZXMiLCJwYXJzZURvbVZhcmlhbnQiLCJFbGVtZW50IiwicmVzb2x2ZUNTU1ZhcmlhYmxlcyIsImhhc1Bvc2l0aW9uYWxLZXkiLCJ0YXJnZXRQb3NpdGlvbmFsS2V5cyIsInJlbW92ZWRUcmFuc2Zvcm1WYWx1ZXMiLCJoYXNBdHRlbXB0ZWRUb1JlbW92ZVRyYW5zZm9ybVZhbHVlcyIsImNoYW5nZWRWYWx1ZVR5cGVLZXlzIiwidG9UeXBlIiwiZnJvbVR5cGUiLCJudW1LZXlmcmFtZXMiLCJmcm9tSW5kZXgiLCJyZW1vdmVkVHJhbnNmb3JtcyIsInJlbW92ZU5vblRyYW5zbGF0aW9uYWxUcmFuc2Zvcm0iLCJzY3JvbGxZXzEiLCJwYWdlWU9mZnNldCIsImNvbnZlcnRlZFRhcmdldCIsImNoYW5nZWRLZXlzIiwib3JpZ2luQmJveCIsImVsZW1lbnRDb21wdXRlZFN0eWxlIiwiZGlzcGxheSIsInRhcmdldEJib3giLCJjb252ZXJ0Q2hhbmdlZFZhbHVlVHlwZXMiLCJzY3JvbGxUbyIsImNoZWNrQW5kQ29udmVydENoYW5nZWRWYWx1ZVR5cGVzIiwidW5pdENvbnZlcnNpb24iLCJodG1sQ29uZmlnIiwiZG9tRWxlbWVudCIsImRlZmF1bHRUeXBlIiwiY29tcHV0ZWRTdHlsZSIsImNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIiwicmVzZXRUcmFuc2Zvcm0iLCJyZXN0b3JlVHJhbnNmb3JtIiwibXV0YWJsZVN0YXRlIiwiZ2V0T3JpZ2luIiwibmV3VmFsdWVLZXlzIiwibnVtTmV3VmFsdWVzIiwidGFyZ2V0VmFsdWUiLCJjaGVja1RhcmdldEZvck5ld1ZhbHVlcyIsImh0bWxWaXN1YWxFbGVtZW50Iiwic3ZnVmlzdWFsRWxlbWVudCIsImdldEF0dHJpYnV0ZSIsIl9lbGVtZW50IiwicGl4ZWxzVG9QZXJjZW50IiwicGl4ZWxzIiwiY29ycmVjdEJvcmRlclJhZGl1cyIsImNvcnJlY3QiLCJub2RlIiwidmFyVG9rZW4iLCJjb3JyZWN0Qm94U2hhZG93IiwidHJlZVNjYWxlIiwicHJvamVjdGlvbkRlbHRhIiwib3JpZ2luYWwiLCJjb250YWluc0NTU1ZhcmlhYmxlcyIsImNzc1ZhcmlhYmxlcyIsInNoYWRvdyIsInhTY2FsZSIsInlTY2FsZSIsImF2ZXJhZ2VTY2FsZSIsImlfMSIsImNzc1ZhcmlhYmxlIiwiTWVhc3VyZUxheW91dFdpdGhDb250ZXh0IiwiY29tcG9uZW50RGlkTW91bnQiLCJjb3JyZWN0b3JzIiwibGF5b3V0R3JvdXAiLCJzd2l0Y2hMYXlvdXRHcm91cCIsImRlZmF1bHRTY2FsZUNvcnJlY3RvcnMiLCJncm91cCIsImRpZFVwZGF0ZSIsInByZXZQcm9wcyIsImxheW91dERlcGVuZGVuY3kiLCJ3aWxsVXBkYXRlIiwicHJvbW90ZSIsInJlbGVnYXRlIiwiZ2V0U3RhY2siLCJtZW1iZXJzIiwiaXNMZWFkIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJwcm9tb3RlQ29udGV4dCIsInNjaGVkdWxlQ2hlY2tBZnRlclVubW91bnQiLCJkZXJlZ2lzdGVyIiwiYXBwbHlUbyIsImJveFNoYWRvdyIsImxheW91dEZlYXR1cmVzIiwiYm9yZGVycyIsIm51bUJvcmRlcnMiLCJhc051bWJlciIsImlzUHgiLCJnZXRSYWRpdXMiLCJyYWRpdXNOYW1lIiwiZWFzZUNyb3NzZmFkZUluIiwiY29tcHJlc3MiLCJlYXNlQ3Jvc3NmYWRlT3V0IiwiY29weUF4aXNJbnRvIiwib3JpZ2luQXhpcyIsImNvcHlCb3hJbnRvIiwib3JpZ2luQm94IiwicmVtb3ZlUG9pbnREZWx0YSIsInJlbW92ZUF4aXNUcmFuc2Zvcm1zIiwic291cmNlQXhpcyIsInJlbW92ZUF4aXNEZWx0YSIsInJlbW92ZUJveFRyYW5zZm9ybXMiLCJzb3VyY2VCb3giLCJpc0F4aXNEZWx0YVplcm8iLCJpc0RlbHRhWmVybyIsImJveEVxdWFscyIsIk5vZGVTdGFjayIsInByZXZMZWFkIiwibGVhZCIsImluZGV4T2ZOb2RlIiwibWVtYmVyIiwicHJlc2VydmVGb2xsb3dPcGFjaXR5Iiwic2hvdyIsInJlc3VtZUZyb20iLCJwcmVzZXJ2ZU9wYWNpdHkiLCJzbmFwc2hvdCIsImFuaW1hdGlvblZhbHVlcyIsImlzU2hhcmVkIiwiaXNVcGRhdGluZyIsImlzTGF5b3V0RGlydHkiLCJjcm9zc2ZhZGUiLCJoaWRlIiwiZXhpdEFuaW1hdGlvbkNvbXBsZXRlIiwicmVzdW1pbmdGcm9tIiwicmVtb3ZlTGVhZFNuYXBzaG90IiwiaWRlbnRpdHlQcm9qZWN0aW9uIiwiYnVpbGRQcm9qZWN0aW9uVHJhbnNmb3JtIiwibGF0ZXN0VHJhbnNmb3JtIiwieFRyYW5zbGF0ZSIsInlUcmFuc2xhdGUiLCJlbGVtZW50U2NhbGVYIiwiZWxlbWVudFNjYWxlWSIsImNvbXBhcmVCeURlcHRoIiwiRmxhdFRyZWUiLCJpc0RpcnR5IiwiYW5pbWF0aW9uVGFyZ2V0IiwiY3JlYXRlUHJvamVjdGlvbk5vZGUiLCJhdHRhY2hSZXNpemVMaXN0ZW5lciIsImRlZmF1bHRQYXJlbnQiLCJtZWFzdXJlU2Nyb2xsIiwiY2hlY2tJc1Njcm9sbFJvb3QiLCJQcm9qZWN0aW9uTm9kZSIsImlzVHJlZUFuaW1hdGluZyIsInVwZGF0ZU1hbnVhbGx5QmxvY2tlZCIsInVwZGF0ZUJsb2NrZWRCeVJlc2l6ZSIsImlzU1ZHIiwibmVlZHNSZXNldCIsInNob3VsZFJlc2V0VHJhbnNmb3JtIiwiZXZlbnRIYW5kbGVycyIsInBvdGVudGlhbE5vZGVzIiwiY2hlY2tVcGRhdGVGYWlsZWQiLCJjbGVhckFsbFNuYXBzaG90cyIsInVwZGF0ZVByb2plY3Rpb24iLCJub2RlcyIsInJlc29sdmVUYXJnZXREZWx0YSIsImNhbGNQcm9qZWN0aW9uIiwiaGFzUHJvamVjdGVkIiwiYW5pbWF0aW9uUHJvZ3Jlc3MiLCJzaGFyZWROb2RlcyIsInBhdGgiLCJyZWdpc3RlclBvdGVudGlhbE5vZGUiLCJub3RpZnlMaXN0ZW5lcnMiLCJzdWJzY3JpcHRpb25NYW5hZ2VyIiwiaGFzTGlzdGVuZXJzIiwiU1ZHRWxlbWVudCIsInRhZ05hbWUiLCJ1bmJsb2NrVGltZW91dF8xIiwicmVzaXplVW5ibG9ja1VwZGF0ZV8xIiwiZmluaXNoQW5pbWF0aW9uIiwicmVnaXN0ZXJTaGFyZWROb2RlIiwiaGFzUmVsYXRpdmVUYXJnZXRDaGFuZ2VkIiwibmV3TGF5b3V0IiwiaXNUcmVlQW5pbWF0aW9uQmxvY2tlZCIsInJlbGF0aXZlVGFyZ2V0IiwibGF5b3V0VHJhbnNpdGlvbiIsImRlZmF1bHRMYXlvdXRUcmFuc2l0aW9uIiwiX2ciLCJvbkxheW91dEFuaW1hdGlvblN0YXJ0Iiwib25MYXlvdXRBbmltYXRpb25Db21wbGV0ZSIsInRhcmdldENoYW5nZWQiLCJ0YXJnZXRMYXlvdXQiLCJoYXNPbmx5UmVsYXRpdmVUYXJnZXRDaGFuZ2VkIiwic2V0QW5pbWF0aW9uT3JpZ2luIiwiYW5pbWF0aW9uT3B0aW9ucyIsInByZVJlbmRlciIsImJsb2NrVXBkYXRlIiwidW5ibG9ja1VwZGF0ZSIsImlzVXBkYXRlQmxvY2tlZCIsInN0YXJ0VXBkYXRlIiwicmVzZXRSb3RhdGlvbiIsInNob3VsZE5vdGlmeUxpc3RlbmVycyIsInByZXZUcmFuc2Zvcm1UZW1wbGF0ZVZhbHVlIiwidXBkYXRlU25hcHNob3QiLCJjbGVhck1lYXN1cmVtZW50cyIsIm1vdW50Tm9kZUVhcmx5IiwicmVzZXRUcmFuc2Zvcm1TdHlsZSIsIm5vdGlmeUxheW91dFVwZGF0ZSIsImNsZWFyU25hcHNob3QiLCJyZW1vdmVMZWFkU25hcHNob3RzIiwic2NoZWR1bGVVcGRhdGVQcm9qZWN0aW9uIiwibWVhc3VyZWQiLCJtZWFzdXJlIiwicmVtb3ZlVHJhbnNmb3JtIiwicmVtb3ZlRWxlbWVudFNjcm9sbCIsInJvdW5kQm94IiwicHJldkxheW91dCIsImxheW91dENvcnJlY3RlZCIsIm5vdGlmeUxheW91dE1lYXN1cmUiLCJpc1Njcm9sbFJvb3QiLCJpc1Jlc2V0UmVxdWVzdGVkIiwiaGFzUHJvamVjdGlvbiIsInRyYW5zZm9ybVRlbXBsYXRlVmFsdWUiLCJ0cmFuc2Zvcm1UZW1wbGF0ZUhhc0NoYW5nZWQiLCJib3hXaXRob3V0U2Nyb2xsIiwic2Nyb2xsXzEiLCJyb290U2Nyb2xsIiwiYXBwbHlUcmFuc2Zvcm0iLCJ0cmFuc2Zvcm1Pbmx5Iiwid2l0aFRyYW5zZm9ybXMiLCJib3hXaXRob3V0VHJhbnNmb3JtIiwic2V0VGFyZ2V0RGVsdGEiLCJ0YXJnZXREZWx0YSIsInJlbGF0aXZlUGFyZW50IiwiZ2V0Q2xvc2VzdFByb2plY3RpbmdQYXJlbnQiLCJyZWxhdGl2ZVRhcmdldE9yaWdpbiIsInRhcmdldFdpdGhUcmFuc2Zvcm1zIiwiYXR0ZW1wdFRvUmVzb2x2ZVJlbGF0aXZlVGFyZ2V0IiwicGVuZGluZ0FuaW1hdGlvbiIsImdldExlYWQiLCJ0cmVlUGF0aCIsImlzU2hhcmVkVHJhbnNpdGlvbiIsInRyZWVMZW5ndGgiLCJhcHBseVRyZWVEZWx0YXMiLCJwcm9qZWN0aW9uRGVsdGFXaXRoVHJhbnNmb3JtIiwicHJldlRyZWVTY2FsZVgiLCJwcmV2VHJlZVNjYWxlWSIsInByZXZQcm9qZWN0aW9uVHJhbnNmb3JtIiwicHJvamVjdGlvblRyYW5zZm9ybSIsIm5vdGlmeUFsbCIsInNuYXBzaG90TGF0ZXN0VmFsdWVzIiwibWl4ZWRWYWx1ZXMiLCJyZWxhdGl2ZUxheW91dCIsImlzU2hhcmVkTGF5b3V0QW5pbWF0aW9uIiwiaXNPbmx5TWVtYmVyIiwic2hvdWxkQ3Jvc3NmYWRlT3BhY2l0eSIsImhhc09wYWNpdHlDcm9zc2ZhZGUiLCJtaXhUYXJnZXREZWx0YSIsIm1peEF4aXNEZWx0YSIsIm1peEF4aXMiLCJmb2xsb3ciLCJvcGFjaXR5RXhpdCIsImJvcmRlckxhYmVsIiwiZm9sbG93UmFkaXVzIiwibGVhZFJhZGl1cyIsIm1peFZhbHVlcyIsImNvbXBsZXRlQW5pbWF0aW9uIiwiYXBwbHlUcmFuc2Zvcm1zVG9UYXJnZXQiLCJzaG91bGRQcmVzZXJ2ZUZvbGxvd09wYWNpdHkiLCJzdGFjayIsImdldFByZXZMZWFkIiwiaGFzUm90YXRlIiwicmVzZXRWYWx1ZXMiLCJzdHlsZXMiLCJwb2ludGVyRXZlbnRzIiwiZW1wdHlTdHlsZXMiLCJ2YWx1ZXNUb1JlbmRlciIsIl9oIiwiY29ycmVjdGVkIiwibnVtIiwicmVzZXRUcmVlIiwibGF5b3V0XzEiLCJtZWFzdXJlZExheW91dCIsImF4aXNTbmFwc2hvdCIsImxheW91dERlbHRhIiwidmlzdWFsRGVsdGEiLCJwYXJlbnRTbmFwc2hvdCIsInBhcmVudExheW91dCIsInJlbGF0aXZlU25hcHNob3QiLCJvbkJlZm9yZUxheW91dE1lYXN1cmUiLCJub3RpZnlCZWZvcmVMYXlvdXRNZWFzdXJlIiwic2VhcmNoTm9kZSIsInF1ZXJ5U2VsZWN0b3IiLCJyb3VuZEF4aXMiLCJEb2N1bWVudFByb2plY3Rpb25Ob2RlIiwiZG9jdW1lbnRFbGVtZW50Iiwic2Nyb2xsTGVmdCIsImJvZHkiLCJzY3JvbGxUb3AiLCJkb2N1bWVudE5vZGUiLCJwb3NpdGlvbiIsImZlYXR1cmVCdW5kbGUiLCJtb3Rpb24iLCJiYXNlQ29uZmlnIiwiQXBwUGF0aHMiLCJTSE9XUk9PTSIsIlNFTkRPVVRTIiwiU0VORE9VVFNfQ01TIiwiTUFSS0VUSU5HX0VOR0lORSIsIlVTRVJfTUFOQUdFTUVOVCIsIlRFTkFOVFMiLCJEQVNIQk9BUkQiLCJEQVNIQk9BUkRfQ1JFQVRFX1dPUktTUEFDRV9NT0RBTCIsIkNSRUFURV9XT1JLU1BBQ0UiLCJTRVRUSU5HUyIsIklOU1RPUkVfQURNSU4iLCJTVVBFUkFETUlOIiwiQ01TIiwiVEVOQU5UU19USUVSX1dJRFRIIiwiQVBQTElDQVRJT05TX1RJRVJfV0lEVEgiLCJOYXZpZ2F0aW9uUG9zaXRpb24iLCJOYXZpZ2F0aW9uQ29udGV4dCIsInVzZU5hdmlnYXRpb25Db250ZXh0IiwiTmF2aWdhdGlvbkNvbnRleHRQcm92aWRlciIsImlzT3BlbiIsIm9uTmF2aWdhdGlvbkNsb3NlIiwidGVuYW50SWQiLCJUZW5hbnRJZENvbnRleHQiLCJ2aWV3U3RhdGUiLCJzZXRWaWV3U3RhdGUiLCJzZWxlY3RlZFRlbmFudElkIiwiY3VycmVudFBvc2l0aW9uIiwiSElEREVOIiwidXNlciIsImF1dGhTZXJ2aWNlIiwiY2FuU2lnbk91dCIsIkF1dGhDb250ZXh0IiwicHJldlZpZXdTdGF0ZSIsIk9QRU4iLCJyZWZyZXNoVXNlciIsImhhc01hcmtldGluZ0VuZ2luZUFjY2VzcyIsInVzZXJIYXNUZW5hbnRBY2Nlc3MiLCJQcml2aWxlZ2VzIiwiaGFzU2hvd3Jvb21BY2Nlc3MiLCJoYXNTZW5kb3V0c0FjY2VzcyIsImhhc0Ntc0FjY2VzcyIsImhhc1VzZXJNYW5hZ2VtZW50QWNjZXNzIiwiaGFzVW5pdmVyc2FsQWNjZXNzIiwiaGFzU2V0dGluZ3NBY2Nlc3MiLCJoYXNJbnN0b3JlQWNjZXNzIiwidXBkYXRlVmlld1N0YXRlIiwidmlld1N0YXRlVXBkYXRlIiwic2lnbk91dCIsInRvZ2dsZVRlbmFudHMiLCJFWFBBTkRFRCIsImN0eCIsIm91dCIsInRtcCIsImsiLCJ1c2VUZW5hbnRzIiwiYXBpIiwidXNlQXBpIiwidXJsIiwiYmFzZVVybCIsIlRFTkFOVFNfU0VSVklDRV9VUkwiLCJSRUFDVF9BUFBfVEVOQU5UU19TRVJWSUNFX1VSTCIsIkVycm9yIiwiY3JlYXRlVXJsIiwiY3JlYXRlVGVuYW50c1ZpZXdVcmwiLCJkYXRhIiwidGVuYW50cyIsImlzTG9hZGluZyIsInRlbmFudCIsIkltYWdlIiwic3JjIiwibG9nb1VybCIsImhlYWRlciIsImZvb3RlciIsImNsYXNzTmFtZSIsInNob3dIZWFkZXJCb3JkZXIiLCJoaWRkZW4iLCJkaXNhYmxlZCIsIm9uQ2xpY2siLCJjdXJyZW50VGVuYW50SWQiLCJzZXRDdXJyZW50VGVuYW50SWQiLCJpc1JlZGlyZWN0aW5nIiwic2V0SXNSZWRpcmVjdGluZyIsImhhbmRsZVVubG9hZCIsImhhbmRsZUNsaWNrIiwibG9jYXRpb24iLCJtYXRjaFBhdGgiLCJwYXRobmFtZSIsIkJ1dHRvbiIsImFsaWduIiwibm9Cb3JkZXIiLCJub1NoYWRvdyIsInNlbGVjdGVkVGVuYW50IiwidXNlU2VsZWN0ZWRUZW5hbnQiLCJ0ZW5hbnRIYXNTdWJzY3JpcHRpb25QbGFuIiwicGxhbk5hbWUiLCJzdWJzY3JpcHRpb25FcnJvclN0YXRlIiwic2V0U3Vic2NyaXB0aW9uRXJyb3JTdGF0ZSIsInN1YnNjcmlwdGlvblNlc3Npb25QZW5kaW5nIiwic2V0U3Vic2NyaXB0aW9uU2Vzc2lvblBlbmRpbmciLCJtYW5hZ2VTdWJzY3JpcHRpb24iLCJjcmVhdGVTdWJzY3JpcHRpb25NYW5hZ2VtZW50U2Vzc2lvblVybCIsInJldHVyblVybCIsInJldHVyblVybE5vcm1hbGl6ZWQiLCJzZXRIZWFkZXIiLCJwb3N0IiwidXNlTWFuYWdlU3Vic2NyaXB0aW9uIiwiY3JlYXRlU2Vzc2lvbiIsInNldFNlbGVjdGVkVGVuYW50QXNDdXJyZW50IiwidGV4dCIsIm9rIiwiSWNvbiIsInRyYW5zcGFyZW50IiwiYWx0IiwiZmlyc3ROYW1lIiwibGFzdE5hbWUiLCJlbWFpbCIsIkVYUEFOREVEX05BVklHQVRJT05fV0lEVEgiLCJBTklNQVRJT05fVFJBTlNJVElPTiIsIkFOSU1BVElPTl9WQVJJQU5UUyIsInBvcnRhbENvbnRhaW5lciIsIm9uQ2xvc2UiLCJDb25zdW1lciIsImNyZWF0ZVBvcnRhbCIsImRpdiIsIm1lbnUiLCJpc05hdmlnYXRpb25PcGVuIiwidG9nZ2xlSXNOYXZpZ2F0aW9uT3BlbiIsImluaXRpYWxWYWx1ZSIsInNldFZhbHVlIiwibmV3VmFsdWUiLCJ1c2VUb2dnbGUiLCJGcmFnbWVudCIsIkljb25CdXR0b24iXSwic291cmNlUm9vdCI6IiJ9
|