1(function(){"use strict";var __webpack_modules__={8857:function(__unused_webpack_module,__unused_webpack___webpack_exports__,__webpack_require__){eval('\n;// ./node_modules/@fancyapps/ui/dist/index.esm.js\nconst t=(t,e=1e4)=>(t=parseFloat(t+"")||0,Math.round((t+Number.EPSILON)*e)/e),e=function(t){if(!(t&&t instanceof Element&&t.offsetParent))return!1;const e=t.scrollHeight>t.clientHeight,i=window.getComputedStyle(t).overflowY,n=-1!==i.indexOf("hidden"),s=-1!==i.indexOf("visible");return e&&!n&&!s},i=function(t,n=void 0){return!(!t||t===document.body||n&&t===n)&&(e(t)?t:i(t.parentElement,n))},n=function(t){var e=(new DOMParser).parseFromString(t,"text/html").body;if(e.childElementCount>1){for(var i=document.createElement("div");e.firstChild;)i.appendChild(e.firstChild);return i}return e.firstChild},s=t=>`${t||""}`.split(" ").filter((t=>!!t)),o=(t,e,i)=>{t&&s(e).forEach((e=>{t.classList.toggle(e,i||!1)}))};class a{constructor(t){Object.defineProperty(this,"pageX",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"pageY",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clientX",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"clientY",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"time",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"nativePointer",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),this.nativePointer=t,this.pageX=t.pageX,this.pageY=t.pageY,this.clientX=t.clientX,this.clientY=t.clientY,this.id=self.Touch&&t instanceof Touch?t.identifier:-1,this.time=Date.now()}}const r={passive:!1};class l{constructor(t,{start:e=(()=>!0),move:i=(()=>{}),end:n=(()=>{})}){Object.defineProperty(this,"element",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"startCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"moveCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"endCallback",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"currentPointers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"startPointers",{enumerable:!0,configurable:!0,writable:!0,value:[]}),this.element=t,this.startCallback=e,this.moveCallback=i,this.endCallback=n;for(const t of["onPointerStart","onTouchStart","onMove","onTouchEnd","onPointerEnd","onWindowBlur"])this[t]=this[t].bind(this);this.element.addEventListener("mousedown",this.onPointerStart,r),this.element.addEventListener("touchstart",this.onTouchStart,r),this.element.addEventListener("touchmove",this.onMove,r),this.element.addEventListener("touchend",this.onTouchEnd),this.element.addEventListener("touchcancel",this.onTouchEnd)}onPointerStart(t){if(!t.buttons||0!==t.button)return;const e=new a(t);this.currentPointers.some((t=>t.id===e.id))||this.triggerPointerStart(e,t)&&(window.addEventListener("mousemove",this.onMove),window.addEventListener("mouseup",this.onPointerEnd),window.addEventListener("blur",this.onWindowBlur))}onTouchStart(t){for(const e of Array.from(t.changedTouches||[]))this.triggerPointerStart(new a(e),t);window.addEventListener("blur",this.onWindowBlur)}onMove(t){const e=this.currentPointers.slice(),i="changedTouches"in t?Array.from(t.changedTouches||[]).map((t=>new a(t))):[new a(t)],n=[];for(const t of i){const e=this.currentPointers.findIndex((e=>e.id===t.id));e<0||(n.push(t),this.currentPointers[e]=t)}n.length&&this.moveCallback(t,this.currentPointers.slice(),e)}onPointerEnd(t){t.buttons>0&&0!==t.button||(this.triggerPointerEnd(t,new a(t)),window.removeEventListener("mousemove",this.onMove),window.removeEventListener("mouseup",this.onPointerEnd),window.removeEventListener("blur",this.onWindowBlur))}onTouchEnd(t){for(const e of Array.from(t.changedTouches||[]))this.triggerPointerEnd(t,new a(e))}triggerPointerStart(t,e){return!!this.startCallback(e,t,this.currentPointers.slice())&&(this.currentPointers.push(t),this.startPointers.push(t),!0)}triggerPointerEnd(t,e){const i=this.currentPointers.findIndex((t=>t.id===e.id));i<0||(this.currentPointers.splice(i,1),this.startPointers.splice(i,1),this.endCallback(t,e,this.currentPointers.slice()))}onWindowBlur(){this.clear()}clear(){for(;this.currentPointers.length;){const t=this.currentPointers[this.currentPointers.length-1];this.currentPointers.splice(this.currentPointers.length-1,1),this.startPointers.splice(this.currentPointers.length-1,1),this.endCallback(new Event("touchend",{bubbles:!0,cancelable:!0,clientX:t.clientX,clientY:t.clientY}),t,this.currentPointers.slice())}}stop(){this.element.removeEventListener("mousedown",this.onPointerStart,r),this.element.removeEventListener("touchstart",this.onTouchStart,r),this.element.removeEventListener("touchmove",this.onMove,r),this.element.removeEventListener("touchend",this.onTouchEnd),this.element.removeEventListener("touchcancel",this.onTouchEnd),window.removeEventListener("mousemove",this.onMove),window.removeEventListener("mouseup",this.onPointerEnd),window.removeEventListener("blur",this.onWindowBlur)}}function c(t,e){return e?Math.sqrt(Math.pow(e.clientX-t.clientX,2)+Math.pow(e.clientY-t.clientY,2)):0}function h(t,e){return e?{clientX:(t.clientX+e.clientX)/2,clientY:(t.clientY+e.clientY)/2}:t}const d=t=>"object"==typeof t&&null!==t&&t.constructor===Object&&"[object Object]"===Object.prototype.toString.call(t),u=(t,...e)=>{const i=e.length;for(let n=0;n<i;n++){const i=e[n]||{};
1Object.entries(i).forEach((([e,i])=>{const n=Array.isArray(i)?[]:{};t[e]||Object.assign(t,{[e]:n}),d(i)?Object.assign(t[e],u(n,i)):Array.isArray(i)?Object.assign(t,{[e]:[...i]}):Object.assign(t,{[e]:i})}))}return t},p=function(t,e){return t.split(".").reduce(((t,e)=>"object"==typeof t?t[e]:void 0),e)};class f{constructor(t={}){Object.defineProperty(this,"options",{enumerable:!0,configurable:!0,writable:!0,value:t}),Object.defineProperty(this,"events",{enumerable:!0,configurable:!0,writable:!0,value:new Map}),this.setOptions(t);for(const t of Object.getOwnPropertyNames(Object.getPrototypeOf(this)))t.startsWith("on")&&"function"==typeof this[t]&&(this[t]=this[t].bind(this))}setOptions(t){this.options=t?u({},this.constructor.defaults,t):{};for(const[t,e]of Object.entries(this.option("on")||{}))this.on(t,e)}option(t,...e){let i=p(t,this.options);return i&&"function"==typeof i&&(i=i.call(this,this,...e)),i}optionFor(t,e,i,...n){let s=p(e,t);var o;"string"!=typeof(o=s)||isNaN(o)||isNaN(parseFloat(o))||(s=parseFloat(s)),"true"===s&&(s=!0),"false"===s&&(s=!1),s&&"function"==typeof s&&(s=s.call(this,this,t,...n));let a=p(e,this.options);return a&&"function"==typeof a?s=a.call(this,this,t,...n,s):void 0===s&&(s=a),void 0===s?i:s}cn(t){const e=this.options.classes;return e&&e[t]||""}localize(t,e=[]){t=String(t).replace(/\\{\\{(\\w+).?(\\w+)?\\}\\}/g,((t,e,i)=>{let n="";return i?n=this.option(`${e[0]+e.toLowerCase().substring(1)}.l10n.${i}`):e&&(n=this.option(`l10n.${e}`)),n||(n=t),n}));for(let i=0;i<e.length;i++)t=t.split(e[i][0]).join(e[i][1]);return t=t.replace(/\\{\\{(.*?)\\}\\}/g,((t,e)=>e))}on(t,e){let i=[];"string"==typeof t?i=t.split(" "):Array.isArray(t)&&(i=t),this.events||(this.events=new Map),i.forEac
1h((t=>{let i=this.events.get(t);i||(this.events.set(t,[]),i=[]),i.includes(e)||i.push(e),this.events.set(t,i)}))}off(t,e){let i=[];"string"==typeof t?i=t.split(" "):Array.isArray(t)&&(i=t),i.forEach((t=>{const i=this.events.get(t);if(Array.isArray(i)){const t=i.indexOf(e);t>-1&&i.splice(t,1)}}))}emit(t,...e){[...this.events.get(t)||[]].forEach((t=>t(this,...e))),"*"!==t&&this.emit("*",t,...e)}}Object.defineProperty(f,"version",{enumerable:!0,configurable:!0,writable:!0,value:"5.0.36"}),Object.defineProperty(f,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{}});class g extends f{constructor(t={}){super(t),Object.defineProperty(this,"plugins",{enumerable:!0,configurable:!0,writable:!0,value:{}})}attachPlugins(t={}){const e=new Map;for(const[i,n]of Object.entries(t)){const t=this.option(i),s=this.plugins[i];s||!1===t?s&&!1===t&&(s.detach(),delete this.plugins[i]):e.set(i,new n(this,t||{}))}for(const[t,i]of e)this.plugins[t]=i,i.attach()}detachPlugins(t){t=t||Object.keys(this.plugins);for(const e of t){const t=this.plugins[e];t&&t.detach(),delete this.plugins[e]}return this.emit("detachPlugins"),this}}var m;!function(t){t[t.Init=0]="Init",t[t.Error=1]="Error",t[t.Ready=2]="Ready",t[t.Panning=3]="Panning",t[t.Mousemove=4]="Mousemove",t[t.Destroy=5]="Destroy"}(m||(m={}));const v=["a","b","c","d","e","f"],b={PANUP:"Move up",PANDOWN:"Move down",PANLEFT:"Move left",PANRIGHT:"Move right",ZOOMIN:"Zoom in",ZOOMOUT:"Zoom out",TOGGLEZOOM:"Toggle zoom level",TOGGLE1TO1:"Toggle zoom level",ITERATEZOOM:"Toggle zoom level",ROTATECCW:"Rotate counterclockwise",ROTATECW:"Rotate clockwise",FLIPX:"Flip horizontally",FLIPY:"Flip vertically",FITX:"Fit horizontally",FITY:"Fit vertically",RESET:"Reset",TOGGLEFS:"Toggle fullscreen"},y={content:null,width:"auto",height:"auto",panMode:"drag",touch:!0,dragMinThreshold:3,lockAxis:!1,mouseMoveFactor:1,mouseMoveFriction:.12,zoom:!0,pinchToZoom:!0,panOnlyZoomed:"auto",minScale:1,maxScale:2,friction:.25,dragFriction:.35,decelFriction:.05,click:"toggleZoom",dblClick:!1,wheel:"zoom",wheelLimit:7,spinner:!0,bounds:"auto",infinite:!1,rubberband:!0,bounce:!0,maxVelocity:75,transformParent:!1,classes:{content:"f-panzoom__content",isLoading:"is-loading",canZoomIn:"can-zoom_in",canZoomOut:"can-zoom_out",isDraggable:"is-draggable",isDragging:"is-dragging",inFullscreen:"in-fullscreen",htmlHasFullscreen:"with-panzoom-in-fullscreen"},l10n:b},w=\'<circle cx="25" cy="25" r="20"></circle>\',x=\'<div class="f-spinner"><svg viewBox="0 0 50 50">\'+w+w+"</svg></div>",E=t=>t&&null!==t&&t instanceof Element&&"nodeType"in t,S=(t,e)=>{t&&s(e).forEach((e=>{t.classList.remove(e)}))},P=(t,e)=>{t&&s(e).forEach((e=>{t.classList.add(e)}))},C={a:1,b:0,c:0,d:1,e:0,f:0},T=1e5,M=1e4,O="mousemove",A="drag",L="content",z="auto";let R=null,k=null;class I extends g{get fits(){return this.contentRect.width-this.contentRect.fitWidth<1&&this.contentRect.height-this.contentRect.fitHeight<1}get isTouchDevice(){return null===k&&(k=window.matchMedia("(hover: none)").matches),k}get isMobile(){return null===R&&(R=/iPhone|iPad|iPod|Android/i.test(navigator.userAgent)),R}get panMode(){return this.options.panMode!==O||this.isTouchDevice?A:O}get panOnlyZoomed(){const t=this.options.panOnlyZoomed;return t===z?this.isTouchDevice:t}get isInfinite(){return this.option("infinite")}get angle(){return 180*Math.atan2(this.current.b,this.current.a)/Math.PI||0}get targetAngle(){return 180*Math.atan2(this.target.b,this.target.a)/Math.PI||0}get scale(){const{a:t,b:e}=this.current;return Math.sqrt(t*t+e*e)||1}get targetScale(){const{a:t,b:e}=this.target;return Math.sqrt(t*t+e*e)||1}get minScale(){return this.option("minScale")||1}get fullScale(){const{contentRect:t}=this;return t.fullWidth/t.fitWidth||1}get maxScale(){return this.fullScale*(this.option("maxScale")||1)||1}get coverScale(){const{containerRect:t,contentRect:e}=this,i=Math.max(t.height/e.fitHeight,t.width/e.fitWidth)||1;return Math.min(this.fullScale,i)}get isScaling(){return Math.abs(this.targetScale-this.scale)>1e-5&&!this.isResting}get isContentLoading(){const t=this.content;return!!(t&&t instanceof HTMLImageElement)&&!t.complete}get isResting(){if(this.isBouncingX||this.isBouncingY)return!1;for(const t of v){const e="e"==t||"f"===t?1e-4:1e-5;
1if(Math.abs(this.target[t]-this.current[t])>e)return!1}return!(!this.ignoreBounds&&!this.checkBounds().inBounds)}constructor(t,e={},i={}){var s;if(super(e),Object.defineProperty(this,"pointerTracker",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"resizeObserver",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"updateTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"clickTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"rAF",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"isTicking",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"ignoreBounds",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"isBouncingX",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"isBouncingY",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"clicks",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"trackingPoints",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"pwt",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"cwd",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"pmme",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"friction",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:m.Init}),Object.defineProperty(this,"isDragging",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"content",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"spinner",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"containerRect",{enumerable:!0,configurable:!0,writable:!0,value:{width:0,height:0,innerWidth:0,innerHeight:0}}),Object.defineProperty(this,"contentRect",{enumerable:!0,configurable:!0,writable:!0,value:{top:0,right:0,bottom:0,left:0,fullWidth:0,fullHeight:0,fitWidth:0,fitHeight:0,width:0,height:0}}),Object.defineProperty(this,"dragStart",{enumerable:!0,configurable:!0,writable:!0,value:{x:0,y:0,top:0,left:0,time:0}}),Object.defineProperty(this,"dragOffset",{enumerable:!0,configurable:!0,writable:!0,value:{x:0,y:0,time:0}}),Object.defineProperty(this,"current",{enumerable:!0,configurable:!0,writable:!0,value:Object.assign({},C)}),Object.defineProperty(this,"target",{enumerable:!0,configurable:!0,writable:!0,value:Object.assign({},C)}),Object.defineProperty(this,"velocity",{enumerable:!0,configurable:!0,writable:!0,value:{a:0,b:0,c:0,d:0,e:0,f:0}}),Object.defineProperty(this,"lockedAxis",{enumerable:!0,configurable:!0,writable:!0,value:!1}),!t)throw new Error("Container Element Not Found");this.container=t,this.initContent(),this.attachPlugins(Object.assign(Object.assign({},I.Plugins),i)),this.emit("attachPlugins"),this.emit("init");const o=this.content;if(o.addEventListener("load",this.onLoad),o.addEventListener("error",this.onError),this.isContentLoading){if(this.option("spinner")){t.classList.add(this.cn("isLoading"));const e=n(x);!t.contains(o)||o.parentElement instanceof HTMLPictureElement?this.spinner=t.appendChild(e):this.spinner=(null===(s=o.parentElement)||void 0===s?void 0:s.insertBefore(e,o))||null}this.emit("beforeLoad")}else queueMicrotask((()=>{this.enable()}))}initContent(){const{container:t}=this,e=this.cn(L);let i=this.option(L)||t.querySelector(`.${e}`);if(i||(i=t.querySelector("img,picture")||t.firstElementChild,i&&P(i,e)),i instanceof HTMLPictureElement&&(i=i.querySelector("img")),!i)throw new Error("No content found");this.content=i}onLoad(){const{spinner:t,container:e,state:i}=this;t&&(t.remove(),this.spinner=null),this.option("spinner")&&e.classList.remove(this.cn("isLoading")),this.emit
1("afterLoad"),i===m.Init?this.enable():this.updateMetrics()}onError(){this.state!==m.Destroy&&(this.spinner&&(this.spinner.remove(),this.spinner=null),this.stop(),this.detachEvents(),this.state=m.Error,this.emit("error"))}getNextScale(t){const{fullScale:e,targetScale:i,coverScale:n,maxScale:s,minScale:o}=this;let a=o;switch(t){case"toggleMax":a=i-o<.5*(s-o)?s:o;break;case"toggleCover":a=i-o<.5*(n-o)?n:o;break;case"toggleZoom":a=i-o<.5*(e-o)?e:o;break;case"iterateZoom":let t=[1,e,s].sort(((t,e)=>t-e)),r=t.findIndex((t=>t>i+1e-5));a=t[r]||1}return a}attachObserver(){var t;const e=()=>{const{container:t,containerRect:e}=this;return Math.abs(e.width-t.getBoundingClientRect().width)>.1||Math.abs(e.height-t.getBoundingClientRect().height)>.1};this.resizeObserver||void 0===window.ResizeObserver||(this.resizeObserver=new ResizeObserver((()=>{this.updateTimer||(e()?(this.onResize(),this.isMobile&&(this.updateTimer=setTimeout((()=>{e()&&this.onResize(),this.updateTimer=null}),500))):this.updateTimer&&(clearTimeout(this.updateTimer),this.updateTimer=null))}))),null===(t=this.resizeObserver)||void 0===t||t.observe(this.container)}detachObserver(){var t;null===(t=this.resizeObserver)||void 0===t||t.disconnect()}attachEvents(){const{container:t}=this;t.addEventListener("click",this.onClick,{passive:!1,capture:!1}),t.addEventListener("wheel",this.onWheel,{passive:!1}),this.pointerTracker=new l(t,{start:this.onPointerDown,move:this.onPointerMove,end:this.onPointerUp}),document.addEventListener(O,this.onMouseMove)}detachEvents(){var t;const{container:e}=this;e.removeEventListener("click",this.onClick,{passive:!1,capture:!1}),e.removeEventListener("wheel",this.onWheel,{passive:!1}),null===(t=this.pointerTracker)||void 0===t||t.stop(),this.pointerTracker=null,document.removeEventListener(O,this.onMouseMove),document.removeEventListener("keydown",this.onKeydown,!0),this.clickTimer&&(clearTimeout(this.clickTimer),this.clickTimer=null),this.updateTimer&&(clearTimeout(this.updateTimer),this.updateTimer=null)}animate(){this.setTargetForce();const t=this.friction,e=this.option("maxVelocity");for(const i of v)t?(this.velocity[i]*=1-t,e&&!this.isScaling&&(this.velocity[i]=Math.max(Math.min(this.velocity[i],e),-1*e)),this.current[i]+=this.velocity[i]):this.current[i]=this.target[i];this.setTransform(),this.setEdgeForce(),!this.isResting||this.isDragging?this.rAF=requestAnimationFrame((()=>this.animate())):this.stop("current")}setTargetForce(){for(const t of v)"e"===t&&this.isBouncingX||"f"===t&&this.isBouncingY||(this.velocity[t]=(1/(1-this.friction)-1)*(this.target[t]-this.current[t]))}checkBounds(t=0,e=0){const{current:i}=this,n=i.e+t,s=i.f+e,o=this.getBounds(),{x:a,y:r}=o,l=a.min,c=a.max,h=r.min,d=r.max;let u=0,p=0;return l!==1/0&&n<l?u=l-n:c!==1/0&&n>c&&(u=c-n),h!==1/0&&s<h?p=h-s:d!==1/0&&s>d&&(p=d-s),Math.abs(u)<1e-4&&(u=0),Math.abs(p)<1e-4&&(p=0),Object.assign(Object.assign({},o),{xDiff:u,yDiff:p,inBounds:!u&&!p})}clampTargetBounds(){const{target:t}=this,{x:e,y:i}=this.getBounds();e.min!==1/0&&(t.e=Math.max(t.e,e.min)),e.max!==1/0&&(t.e=Math.min(t.e,e.max)),i.min!==1/0&&(t.f=Math.max(t.f,i.min)),i.max!==1/0&&(t.f=Math.min(t.f,i.max))}calculateContentDim(t=this.current){const{content:e,contentRect:i}=this,{fitWidth:n,fitHeight:s,fullWidth:o,fullHeight:a}=i;let r=o,l=a;if(this.option("zoom")||0!==this.angle){const i=!(e instanceof HTMLImageElement)&&("none"===window.getComputedStyle(e).maxWidth||"none"===window.getComputedStyle(e).maxHeight),c=i?o:n,h=i?a:s,d=this.getMatrix(t),u=new DOMPoint(0,0).matrixTransform(d),p=new DOMPoint(0+c,0).matrixTransform(d),f=new DOMPoint(0+c,0+h).matrixTransform(d),g=new DOMPoint(0,0+h).matrixTransform(d),m=Math.abs(f.x-u.x),v=Math.abs(f.y-u.y),b=Math.abs(g.x-p.x),y=Math.abs(g.y-p.y);r=Math.max(m,b),l=Math.max(v,y)}return{contentWidth:r,contentHeight:l}}setEdgeForce(){if(this.ignoreBounds||this.isDragging||this.panMode===O||this.targetScale<this.scale)return this.isBouncingX=!1,void(this.isBouncingY=!1);const{target:t}=this,{x:e,y:i,xDiff:n,yDiff:s}=this.checkBounds();const o=this.option("maxVelocity");let a=this.velocity.e,r=this.velocity.f;0!==n?(this.isBouncingX=!0,n*a<=0?a+=.14*n:(a=.14*n,e.min!==1/0&&(this.target.e=Math.max(t.e,e.min)),e.max!==1/0&&(this.target.e=Math.min(t.e,e.max))),o&&(a=Math.max(Math.min(a,o),-1*o))):this.isBouncingX=!1,0!==s?(this.isBouncingY=!0,s*r<=0?r+=.14*s:(r=.14*s,i.min!==1/0&&(this.target.f=Math.max(t.f,i.min)),i.max!==1/0&&(this.target.f=Math.min(t.f,i.max))),o&&(r=Math.max(Math.min(r,o),-1*o))):this.isBouncingY=!1,this.isBouncingX&&(this.velocity.e=a
1),this.isBouncingY&&(this.velocity.f=r)}enable(){const{content:t}=this,e=new DOMMatrixReadOnly(window.getComputedStyle(t).transform);for(const t of v)this.current[t]=this.target[t]=e[t];this.updateMetrics(),this.attachObserver(),this.attachEvents(),this.state=m.Ready,this.emit("ready")}onClick(t){var e;"click"===t.type&&0===t.detail&&(this.dragOffset.x=0,this.dragOffset.y=0),this.isDragging&&(null===(e=this.pointerTracker)||void 0===e||e.clear(),this.trackingPoints=[],this.startDecelAnim());const i=t.target;if(!i||t.defaultPrevented)return;if(i.hasAttribute("disabled"))return t.preventDefault(),void t.stopPropagation();if((()=>{const t=window.getSelection();return t&&"Range"===t.type})()&&!i.closest("button"))return;const n=i.closest("[data-panzoom-action]"),s=i.closest("[data-panzoom-change]"),o=n||s,a=o&&E(o)?o.dataset:null;if(a){const e=a.panzoomChange,i=a.panzoomAction;if((e||i)&&t.preventDefault(),e){let t={};try{t=JSON.parse(e)}catch(t){console&&console.warn("The given data was not valid JSON")}return void this.applyChange(t)}if(i)return void(this[i]&&this[i]())}if(Math.abs(this.dragOffset.x)>3||Math.abs(this.dragOffset.y)>3)return t.preventDefault(),void t.stopPropagation();if(i.closest("[data-fancybox]"))return;const r=this.content.getBoundingClientRect(),l=this.dragStart;if(l.time&&!this.canZoomOut()&&(Math.abs(r.x-l.x)>2||Math.abs(r.y-l.y)>2))return;this.dragStart.time=0;const c=e=>{this.option("zoom",t)&&e&&"string"==typeof e&&/(iterateZoom)|(toggle(Zoom|Full|Cover|Max)|(zoomTo(Fit|Cover|Max)))/.test(e)&&"function"==typeof this[e]&&(t.preventDefault(),this[e]({event:t}))},h=this.option("click",t),d=this.option("dblClick",t);d?(this.clicks++,1==this.clicks&&(this.clickTimer=setTimeout((()=>{1===this.clicks?(this.emit("click",t),!t.defaultPrevented&&h&&c(h)):(this.emit("dblClick",t),t.defaultPrevented||c(d)),this.clicks=0,this.clickTimer=null}),350))):(this.emit("click",t),!t.defaultPrevented&&h&&c(h))}addTrackingPoint(t){const e=this.trackingPoints.filter((t=>t.time>Date.now()-100));e.push(t),this.trackingPoints=e}onPointerDown(t,e,i){var n;if(!1===this.option("touch",t))return!1;this.pwt=0,this.dragOffset={x:0,y:0,time:0},this.trackingPoints=[];const s=this.content.getBoundingClientRect();if(this.dragStart={x:s.x,y:s.y,top:s.top,left:s.left,time:Date.now()},this.clickTimer)return!1;if(this.panMode===O&&this.targetScale>1)return t.preventDefault(),t.stopPropagation(),!1;const o=t.composedPath()[0];if(!i.length){if(["TEXTAREA","OPTION","INPUT","SELECT","VIDEO","IFRAME"].includes(o.nodeName)||o.closest("[contenteditable],[data-selectable],[data-draggable],[data-clickable],[data-panzoom-change],[data-panzoom-action]"))return!1;null===(n=window.getSelection())||void 0===n||n.removeAllRanges()}if("mousedown"===t.type)["A","BUTTON"].includes(o.nodeName)||t.preventDefault();else if(Math.abs(this.velocity.a)>.3)return!1;return this.target.e=this.current.e,this.target.f=this.current.f,this.stop(),this.isDragging||(this.isDragging=!0,this.addTrackingPoint(e),this.emit("touchStart",t)),!0}onPointerMove(e,n,s){if(!1===this.option("touch",e))return;if(!this.isDragging)return;if(n.length<2&&this.panOnlyZoomed&&t(this.targetScale)<=t(this.minScale))return;if(this.emit("touchMove",e),e.defaultPrevented)return;this.addTrackingPoint(n[0]);const{content:o}=this,a=h(s[0],s[1]),r=h(n[0],n[1]);let l=0,d=0;if(n.length>1){const t=o.getBoundingClientRect();l=a.clientX-t.left-.5*t.width,d=a.clientY-t.top-.5*t.height}const u=c(s[0],s[1]),p=c(n[0],n[1]);let f=u?p/u:1,g=r.clientX-a.clientX,m=r.clientY-a.clientY;this.dragOffset.x+=g,this.dragOffset.y+=m,this.dragOffset.time=Date.now()-this.dragStart.time;let v=t(this.targetScale)===t(this.minScale)&&this.option("lockAxis");if(v&&!this.lockedAxis)if("xy"===v||"y"===v||"touchmove"===e.type){if(Math.abs(this.dragOffset.x)<6&&Math.abs(this.dragOffset.y)<6)return void e.preventDefault();const t=Math.abs(180*Math.atan2(this.dragOffset.y,this.dragOffset.x)/Math.PI);this.lockedAxis=t>45&&t<135?"y":"x",this.dragOffset.x=0,this.dragOffset.y=0,g=0,m=0}else this.lockedAxis=v;if(i(e.target,this.content)&&(v="x",this.dragOffset.y=0),v&&"xy"!==v&&this.lockedAxis!==v&&t(this.targetScale)===t(this.minScale))return;e.cancelable&&e.preventDefault(),this.container.classList.add(this.cn("isDragging"));const b=this.checkBounds(g,m);this.option("rubberband")?("x"!==this.isInfinite&&(b.xDiff>0&&g<0||b.xDiff<0&&g>0)&&(g*=Math.max(0,.5-Math.abs(.75/this.contentRect.fitWidth*b.xDiff))),"y"!==this.isInfinite&&(b.yDiff>0&&m<0||b.yDiff<0&&m>0)&&(m*=Math.max(0,.5-Math.abs(.75/this.contentRect.fitHeight*b.yDiff)))):(b.xDiff&&(g=0),b.yDiff&&(m=0));const y=this.targetScale,w=this.minScale,x=this.maxScale;y<.5*w&&(f=Math.max(f,w)),y>
11.5*x&&(f=Math.min(f,x)),"y"===this.lockedAxis&&t(y)===t(w)&&(g=0),"x"===this.lockedAxis&&t(y)===t(w)&&(m=0),this.applyChange({originX:l,originY:d,panX:g,panY:m,scale:f,friction:this.option("dragFriction"),ignoreBounds:!0})}onPointerUp(t,e,n){if(n.length)return this.dragOffset.x=0,this.dragOffset.y=0,void(this.trackingPoints=[]);this.container.classList.remove(this.cn("isDragging")),this.isDragging&&(this.addTrackingPoint(e),this.panOnlyZoomed&&this.contentRect.width-this.contentRect.fitWidth<1&&this.contentRect.height-this.contentRect.fitHeight<1&&(this.trackingPoints=[]),i(t.target,this.content)&&"y"===this.lockedAxis&&(this.trackingPoints=[]),this.emit("touchEnd",t),this.isDragging=!1,this.lockedAxis=!1,this.state!==m.Destroy&&(t.defaultPrevented||this.startDecelAnim()))}startDecelAnim(){var e;const i=this.isScaling;this.rAF&&(cancelAnimationFrame(this.rAF),this.rAF=null),this.isBouncingX=!1,this.isBouncingY=!1;for(const t of v)this.velocity[t]=0;this.target.e=this.current.e,this.target.f=this.current.f,S(this.container,"is-scaling"),S(this.container,"is-animating"),this.isTicking=!1;const{trackingPoints:n}=this,s=n[0],o=n[n.length-1];let a=0,r=0,l=0;o&&s&&(a=o.clientX-s.clientX,r=o.clientY-s.clientY,l=o.time-s.time);const c=(null===(e=window.visualViewport)||void 0===e?void 0:e.scale)||1;1!==c&&(a*=c,r*=c);let h=0,d=0,u=0,p=0,f=this.option("decelFriction");const g=this.targetScale;if(l>0){u=Math.abs(a)>3?a/(l/30):0,p=Math.abs(r)>3?r/(l/30):0;const t=this.option("maxVelocity");t&&(u=Math.max(Math.min(u,t),-1*t),p=Math.max(Math.min(p,t),-1*t))}u&&(h=u/(1/(1-f)-1)),p&&(d=p/(1/(1-f)-1)),("y"===this.option("lockAxis")||"xy"===this.option("lockAxis")&&"y"===this.lockedAxis&&t(g)===this.minScale)&&(h=u=0),("x"===this.option("lockAxis")||"xy"===this.option("lockAxis")&&"x"===this.lockedAxis&&t(g)===this.minScale)&&(d=p=0);const m=this.dragOffset.x,b=this.dragOffset.y,y=this.option("dragMinThreshold")||0;Math.abs(m)<y&&Math.abs(b)<y&&(h=d=0,u=p=0),(this.option("zoom")&&(g<this.minScale-1e-5||g>this.maxScale+1e-5)||i&&!h&&!d)&&(f=.35),this.applyChange({panX:h,panY:d,friction:f}),this.emit("decel",u,p,m,b)}onWheel(t){var e=[-t.deltaX||0,-t.deltaY||0,-t.detail||0].reduce((function(t,e){return Math.abs(e)>Math.abs(t)?e:t}));const i=Math.max(-1,Math.min(1,e));if(this.emit("wheel",t,i),this.panMode===O)return;if(t.defaultPrevented)return;const n=this.option("wheel");"pan"===n?(t.preventDefault(),this.panOnlyZoomed&&!this.canZoomOut()||this.applyChange({panX:2*-t.deltaX,panY:2*-t.deltaY,bounce:!1})):"zoom"===n&&!1!==this.option("zoom")&&this.zoomWithWheel(t)}onMouseMove(t){this.panWithMouse(t)}onKeydown(t){"Escape"===t.key&&this.toggleFS()}onResize(){this.updateMetrics(),this.checkBounds().inBounds||this.requestTick()}setTransform(){this.emit("beforeTransform");const{current:e,target:i,content:n,contentRect:s}=this,o=Object.assign({},C);for(const n of v){const s="e"==n||"f"===n?M:T;o[n]=t(e[n],s),Math.abs(i[n]-e[n])<("e"==n||"f"===n?.51:.001)&&(e[n]=i[n])}let{a:a,b:r,c:l,d:c,e:h,f:d}=o,u=`matrix(${a}, ${r}, ${l}, ${c}, ${h}, ${d})`,p=n.parentElement instanceof HTMLPictureElement?n.parentElement:n;if(this.option("transformParent")&&(p=p.parentElement||p),p.style.transform===u)return;p.style.transform=u;const{contentWidth:f,contentHeight:g}=this.calculateContentDim();s.width=f,s.height=g,this.emit("afterTransform")}updateMetrics(e=!1){var i;if(!this||this.state===m.Destroy)return;if(this.isContentLoading)return;const n=Math.max(1,(null===(i=window.visualViewport)||void 0===i?void 0:i.scale)||1),{container:s,content:o}=this,a=o instanceof HTMLImageElement,r=s.getBoundingClientRect(),l=getComputedStyle(this.container);let c=r.width*n,h=r.height*n;const d=parseFloat(l.paddingTop)+parseFloat(l.paddingBottom),u=c-(parseFloat(l.paddingLeft)+parseFloat(l.paddingRight)),p=h-d;this.containerRect={width:c,height:h,innerWidth:u,innerHeight:p};const f=parseFloat(o.dataset.width||"")||(t=>{let e=0;return e=t instanceof HTMLImageElement?t.naturalWidth:t instanceof SVGElement?t.width.baseVal.value:Math.max(t.offsetWidth,t.scrollWidth),e||0})(o),g=parseFloat(o.dataset.height||"")||(t=>{let e=0;return e=t instanceof HTMLImageElement?t.naturalHeight:t instanceof SVGElement?t.height.baseVal.value:Math.max(t.offsetHeight,t.scrollHeight),e||0})(o);let v=this.option("width",f)||z,b=this.option("height",g)||z;const y=v===z,w=b===z;"number"!=typeof v&&(v=f),"number"!=typeof b&&(b=g),y&&(v=f*(b/g)),w&&(b=g/(f/v));let x=o.parentElement instanceof HTMLPictureElement?o.parentElement:o;this.option("transformParent")&&(x=x.parentElement||x);const E=x.getAttribute("style")||"";x.style.setProperty("transform","none","important"),a&&(x.style.width="",x.style.height=""),x.offsetHeight;const S=o.getBoundingClientRect();let P=S.width*n,C=S.height*n,T=P,M=C;P=Math.min(P,v),C=Math.min(C,b),a?({width:P,height:C}
1=((t,e,i,n)=>{const s=i/t,o=n/e,a=Math.min(s,o);return{width:t*=a,height:e*=a}})(v,b,P,C)):(P=Math.min(P,v),C=Math.min(C,b));let O=.5*(M-C),A=.5*(T-P);this.contentRect=Object.assign(Object.assign({},this.contentRect),{top:S.top-r.top+O,bottom:r.bottom-S.bottom+O,left:S.left-r.left+A,right:r.right-S.right+A,fitWidth:P,fitHeight:C,width:P,height:C,fullWidth:v,fullHeight:b}),x.style.cssText=E,a&&(x.style.width=`${P}px`,x.style.height=`${C}px`),this.setTransform(),!0!==e&&this.emit("refresh"),this.ignoreBounds||(t(this.targetScale)<t(this.minScale)?this.zoomTo(this.minScale,{friction:0}):this.targetScale>this.maxScale?this.zoomTo(this.maxScale,{friction:0}):this.state===m.Init||this.checkBounds().inBounds||this.requestTick()),this.updateControls()}calculateBounds(){const{contentWidth:e,contentHeight:i}=this.calculateContentDim(this.target),{targetScale:n,lockedAxis:s}=this,{fitWidth:o,fitHeight:a}=this.contentRect;let r=0,l=0,c=0,h=0;const d=this.option("infinite");if(!0===d||s&&d===s)r=-1/0,c=1/0,l=-1/0,h=1/0;else{let{containerRect:s,contentRect:d}=this,u=t(o*n,M),p=t(a*n,M),{innerWidth:f,innerHeight:g}=s;if(s.width===u&&(f=s.width),s.width===p&&(g=s.height),e>f){c=.5*(e-f),r=-1*c;let t=.5*(d.right-d.left);r+=t,c+=t}if(o>f&&e<f&&(r-=.5*(o-f),c-=.5*(o-f)),i>g){h=.5*(i-g),l=-1*h;let t=.5*(d.bottom-d.top);l+=t,h+=t}a>g&&i<g&&(r-=.5*(a-g),c-=.5*(a-g))}return{x:{min:r,max:c},y:{min:l,max:h}}}getBounds(){const t=this.option("bounds");return t!==z?t:this.calculateBounds()}updateControls(){const e=this,i=e.container,{panMode:n,contentRect:s,targetScale:a,minScale:r}=e;let l=r,c=e.option("click")||!1;c&&(l=e.getNextScale(c));let h=e.canZoomIn(),d=e.canZoomOut(),u=n===A&&!!this.option("touch"),p=d&&u;if(u&&(t(a)<t(r)&&!this.panOnlyZoomed&&(p=!0),(t(s.width,1)>t(s.fitWidth,1)||t(s.height,1)>t(s.fitHeight,1))&&(p=!0)),t(s.width*a,1)<t(s.fitWidth,1)&&(p=!1),n===O&&(p=!1),o(i,this.cn("isDraggable"),p),!this.option("zoom"))return;let f=h&&t(l)>t(a),g=!f&&!p&&d&&t(l)<t(a);o(i,this.cn("canZoomIn"),f),o(i,this.cn("canZoomOut"),g);for(const t of i.querySelectorAll("[data-panzoom-action]")){let e=!1,i=!1;switch(t.dataset.panzoomAction){case"zoomIn":h?e=!0:i=!0;break;case"zoomOut":d?e=!0:i=!0;break;case"toggleZoom":case"iterateZoom":h||d?e=!0:i=!0;const n=t.querySelector("g");n&&(n.style.display=h?"":"none")}e?(t.removeAttribute("disabled"),t.removeAttribute("tabindex")):i&&(t.setAttribute("disabled",""),t.setAttribute("tabindex","-1"))}}panTo({x:t=this.target.e,y:e=this.target.f,scale:i=this.targetScale,friction:n=this.option("friction"),angle:s=0,originX:o=0,originY:a=0,flipX:r=!1,flipY:l=!1,ignoreBounds:c=!1}){this.state!==m.Destroy&&this.applyChange({panX:t-this.target.e,panY:e-this.target.f,scale:i/this.targetScale,angle:s,originX:o,originY:a,friction:n,flipX:r,flipY:l,ignoreBounds:c})}applyChange({panX:e=0,panY:i=0,scale:n=1,angle:s=0,originX:o=-this.current.e,originY:a=-this.current.f,friction:r=this.option("friction"),flipX:l=!1,flipY:c=!1,ignoreBounds:h=!1,bounce:d=this.option("bounce")}){const u=this.state;if(u===m.Destroy)return;this.rAF&&(cancelAnimationFrame(this.rAF),this.rAF=null),this.friction=r||0,this.ignoreBounds=h;const{current:p}=this,f=p.e,g=p.f,b=this.getMatrix(this.target);let y=(new DOMMatrix).translate(f,g).translate(o,a).translate(e,i);if(this.option("zoom")){if(!h){const t=this.targetScale,e=this.minScale,i=this.maxScale;t*n<e&&(n=e/t),t*n>i&&(n=i/t)}y=y.scale(n)}y=y.translate(-o,-a).translate(-f,-g).multiply(b),s&&(y=y.rotate(s)),l&&(y=y.scale(-1,1)),c&&(y=y.scale(1,-1));for(const e of v)"e"!==e&&"f"!==e&&(y[e]>this.minScale+1e-5||y[e]<this.minScale-1e-5)?this.target[e]=y[e]:this.target[e]=t(y[e],M);(this.targetScale<this.scale||Math.abs(n-1)>.1||this.panMode===O||!1===d)&&!h&&this.clampTargetBounds(),u===m.Init?this.animate():this.isResting||(this.state=m.Panning,this.requestTick())}stop(t=!1){if(this.state===m.Init||this.state===m.Destroy)return;const e=this.isTicking;this.rAF&&(cancelAnimationFrame(this.rAF),this.rAF=null),this.isBouncingX=!1,this.isBouncingY=!1;for(const e of v)this.velocity[e]=0,"current"===t?this.current[e]=this.target[e]:"target"===t&&(this.target[e]=this.current[e]);this.setTransform(),S(this.container,"is-scaling"),S(this.container,"is-animating"),this.isTicking=!1,this.state=m.Ready,e&&(this.emit
1("endAnimation"),this.updateControls())}requestTick(){this.isTicking||(this.emit("startAnimation"),this.updateControls(),P(this.container,"is-animating"),this.isScaling&&P(this.container,"is-scaling")),this.isTicking=!0,this.rAF||(this.rAF=requestAnimationFrame((()=>this.animate())))}panWithMouse(e,i=this.option("mouseMoveFriction")){if(this.pmme=e,this.panMode!==O||!e)return;if(t(this.targetScale)<=t(this.minScale))return;this.emit("mouseMove",e);const{container:n,containerRect:s,contentRect:o}=this,a=s.width,r=s.height,l=n.getBoundingClientRect(),c=(e.clientX||0)-l.left,h=(e.clientY||0)-l.top;let{contentWidth:d,contentHeight:u}=this.calculateContentDim(this.target);const p=this.option("mouseMoveFactor");p>1&&(d!==a&&(d*=p),u!==r&&(u*=p));let f=.5*(d-a)-c/a*100/100*(d-a);f+=.5*(o.right-o.left);let g=.5*(u-r)-h/r*100/100*(u-r);g+=.5*(o.bottom-o.top),this.applyChange({panX:f-this.target.e,panY:g-this.target.f,friction:i})}zoomWithWheel(e){if(this.state===m.Destroy||this.state===m.Init)return;const i=Date.now();if(i-this.pwt<45)return void e.preventDefault();this.pwt=i;var n=[-e.deltaX||0,-e.deltaY||0,-e.detail||0].reduce((function(t,e){return Math.abs(e)>Math.abs(t)?e:t}));const s=Math.max(-1,Math.min(1,n)),{targetScale:o,maxScale:a,minScale:r}=this;let l=o*(100+45*s)/100;t(l)<t(r)&&t(o)<=t(r)?(this.cwd+=Math.abs(s),l=r):t(l)>t(a)&&t(o)>=t(a)?(this.cwd+=Math.abs(s),l=a):(this.cwd=0,l=Math.max(Math.min(l,a),r)),this.cwd>this.option("wheelLimit")||(e.preventDefault(),t(l)!==t(o)&&this.zoomTo(l,{event:e}))}canZoomIn(){return this.option("zoom")&&(t(this.contentRect.width,1)<t(this.contentRect.fitWidth,1)||t(this.targetScale)<t(this.maxScale))}canZoomOut(){return this.option("zoom")&&t(this.targetScale)>t(this.minScale)}zoomIn(t=1.25,e){this.zoomTo(this.targetScale*t,e)}zoomOut(t=.8,e){this.zoomTo(this.targetScale*t,e)}zoomToFit(t){this.zoomTo("fit",t)}zoomToCover(t){this.zoomTo("cover",t)}zoomToFull(t){this.zoomTo("full",t)}zoomToMax(t){this.zoomTo("max",t)}toggleZoom(t){this.zoomTo(this.getNextScale("toggleZoom"),t)}toggleMax(t){this.zoomTo(this.getNextScale("toggleMax"),t)}toggleCover(t){this.zoomTo(this.getNextScale("toggleCover"),t)}iterateZoom(t){this.zoomTo("next",t)}zoomTo(t=1,{friction:e=z,originX:i=z,originY:n=z,event:s}={}){if(this.isContentLoading||this.state===m.Destroy)return;const{targetScale:o,fullScale:a,maxScale:r,coverScale:l}=this;if(this.stop(),this.panMode===O&&(s=this.pmme||s),s||i===z||n===z){const t=this.content.getBoundingClientRect(),e=this.container.getBoundingClientRect(),o=s?s.clientX:e.left+.5*e.width,a=s?s.clientY:e.top+.5*e.height;i=o-t.left-.5*t.width,n=a-t.top-.5*t.height}let c=1;"number"==typeof t?c=t:"full"===t?c=a:"cover"===t?c=l:"max"===t?c=r:"fit"===t?c=1:"next"===t&&(c=this.getNextScale("iterateZoom")),c=c/o||1,e=e===z?c>1?.15:.25:e,this.applyChange({scale:c,originX:i,originY:n,friction:e}),s&&this.panMode===O&&this.panWithMouse(s,e)}rotateCCW(){this.applyChange({angle:-90})}rotateCW(){this.applyChange({angle:90})}flipX(){this.applyChange({flipX:!0})}flipY(){this.applyChange({flipY:!0})}fitX(){this.stop("target");const{containerRect:t,contentRect:e,target:i}=this;this.applyChange({panX:.5*t.width-(e.left+.5*e.fitWidth)-i.e,panY:.5*t.height-(e.top+.5*e.fitHeight)-i.f,scale:t.width/e.fitWidth/this.targetScale,originX:0,originY:0,ignoreBounds:!0})}fitY(){this.stop("target");const{containerRect:t,contentRect:e,target:i}=this;this.applyChange({panX:.5*t.width-(e.left+.5*e.fitWidth)-i.e,panY:.5*t.innerHeight-(e.top+.5*e.fitHeight)-i.f,scale:t.height/e.fitHeight/this.targetScale,originX:0,originY:0,ignoreBounds:!0})}toggleFS(){const{container:t}=this,e=this.cn("inFullscreen"),i=this.cn("htmlHasFullscreen");t.classList.toggle(e);const n=t.classList.contains(e);n?(document.documentElement.classList.add(i),document.addEventListener("keydown",this.onKeydown,!0)):(document.documentElement.classList.remove(i),document.removeEventListener("keydown",this.onKeydown,!0)),this.updateMetrics(),this.emit(n?"enterFS":"exitFS")}getMatrix(t=this.current){const{a:e,b:i,c:n,d:s,e:o,f:a}=t;return new DOMMatrix([e,i,n,s,o,a])}reset(t){if(this.state!==m.Init&&this.state!==m.Destroy){this.stop("current");for(const t of v)this.target[t]=C[t];this.target.a=this.minScale,this.target.d=this.minScale,this.clampTargetBounds(),this.isResting||(this.friction=void 0===t?this.option("friction"):t,this.state=m.Panning,this.requestTick())}}destroy(){this.stop(),this.state=m.Destroy,this.detachEvents(),this.detachObserver();const{container:t,content:e}=this,i=this.option("classes")||{};for(const e of Object.values(i))t.classList.remove(e+"");e&&(e.removeEventListener("load",this.onLoad),e.removeEventListener("error",this.onError)),this.detachPlugins()}}Object.defineProperty(I,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:y}),Object.defineProperty(I,"Plugins",{enumerable:!0,configurable:!0,writable:!0,value:{}});const D=function(t,e){let i=!0;return(...n)=>{i&&(i=!1,t(...n),setTimeout((()=>{i=!0}),e))}},F=(t,e)=>{let i=[];
1return t.childNodes.forEach((t=>{t.nodeType!==Node.ELEMENT_NODE||e&&!t.matches(e)||i.push(t)})),i},j={viewport:null,track:null,enabled:!0,slides:[],axis:"x",transition:"fade",preload:1,slidesPerPage:"auto",initialPage:0,friction:.12,Panzoom:{decelFriction:.12},center:!0,infinite:!0,fill:!0,dragFree:!1,adaptiveHeight:!1,direction:"ltr",classes:{container:"f-carousel",viewport:"f-carousel__viewport",track:"f-carousel__track",slide:"f-carousel__slide",isLTR:"is-ltr",isRTL:"is-rtl",isHorizontal:"is-horizontal",isVertical:"is-vertical",inTransition:"in-transition",isSelected:"is-selected"},l10n:{NEXT:"Next slide",PREV:"Previous slide",GOTO:"Go to slide #%d"}};var B;!function(t){t[t.Init=0]="Init",t[t.Ready=1]="Ready",t[t.Destroy=2]="Destroy"}(B||(B={}));const H=t=>{if("string"==typeof t||t instanceof HTMLElement)t={html:t};else{const e=t.thumb;void 0!==e&&("string"==typeof e&&(t.thumbSrc=e),e instanceof HTMLImageElement&&(t.thumbEl=e,t.thumbElSrc=e.src,t.thumbSrc=e.src),delete t.thumb)}return Object.assign({html:"",el:null,isDom:!1,class:"",customClass:"",index:-1,dim:0,gap:0,pos:0,transition:!1},t)},N=(t={})=>Object.assign({index:-1,slides:[],dim:0,pos:-1},t);class _ extends f{constructor(t,e){super(e),Object.defineProperty(this,"instance",{enumerable:!0,configurable:!0,writable:!0,value:t})}attach(){}detach(){}}const $={classes:{list:"f-carousel__dots",isDynamic:"is-dynamic",hasDots:"has-dots",dot:"f-carousel__dot",isBeforePrev:"is-before-prev",isPrev:"is-prev",isCurrent:"is-current",isNext:"is-next",isAfterNext:"is-after-next"},dotTpl:\'<button type="button" data-carousel-page="%i" aria-label="{{GOTO}}"><span class="f-carousel__dot" aria-hidden="true"></span></button>\',dynamicFrom:11,maxCount:1/0,minCount:2};class W extends _{constructor(){super(...arguments),Object.defineProperty(this,"isDynamic",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"list",{enumerable:!0,configurable:!0,writable:!0,value:null})}onRefresh(){this.refresh()}build(){let t=this.list;if(!t){t=document.createElement("ul"),P(t,this.cn("list")),t.setAttribute("role","tablist");const e=this.instance.container;e.appendChild(t),P(e,this.cn("hasDots")),this.list=t}return t}refresh(){var t;const e=this.instance.pages.length,i=Math.min(2,this.option("minCount")),n=Math.max(2e3,this.option("maxCount")),s=this.option("dynamicFrom");if(e<i||e>n)return void this.cleanup();const a="number"==typeof s&&e>5&&e>=s,r=!this.list||this.isDynamic!==a||this.list.children.length!==e;r&&this.cleanup();const l=this.build();if(o(l,this.cn("isDynamic"),!!a),r)for(let t=0;t<e;t++)l.append(this.createItem(t));let c,h=0;for(const e of[...l.children]){const i=h===this.instance.page;i&&(c=e),o(e,this.cn("isCurrent"),i),null===(t=e.children[0])||void 0===t||t.setAttribute("aria-selected",i?"true":"false");for(const t of["isBeforePrev","isPrev","isNext","isAfterNext"])S(e,this.cn(t));h++}if(c=c||l.firstChild,a&&c){const t=c.previousElementSibling,e=t&&t.previousElementSibling;P(t,this.cn("isPrev")),P(e,this.cn("isBeforePrev"));const i=c.nextElementSibling,n=i&&i.nextElementSibling;P(i,this.cn("isNext")),P(n,this.cn("isAfterNext"))}this.isDynamic=a}createItem(t=0){var e;const i=document.createElement("li");i.setAttribute("role","presentation");const s=n(this.instance.localize(this.option("dotTpl"),[["%d",t+1]]).replace(/\\%i/g,t+""));return i.appendChild(s),null===(e=i.children[0])||void 0===e||e.setAttribute("role","tab"),i}cleanup(){this.list&&(this.list.remove(),this.list=null),this.isDynamic=!1,S(this.instance.container,this.cn("hasDots"))}attach(){this.instance.on(["refresh","change"],this.onRefresh)}detach(){this.instance.off(["refresh","change"],this.onRefresh),this.cleanup()}}Object.defineProperty(W,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:$});const X="disabled",q="next",Y="prev";class V extends _{constructor(){super(...arguments),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"prev",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"next",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"isDom",{enumerable:!0,configurable:!0,writable:!0,value:!1})}onRefresh(){const t=this.instance,e=t.pages.length,i=t.page;if(e<2)return void this.cleanup();this.build();let n=this.prev,s=this.next;n&&s&&(n.removeAttribute(X),s.removeAttribute(X),t.isInfinite||(i<=0&&n.setAttribute(X,""),i>=e-1&&s.setAttribute(X,"")))}addBtn(t){var e;const i=this.instance,n=document.createElement("button");n.setAttribute("tabindex","0"),n.setAttribute("title",i.localize(`{{${t.toUpperCase()}}}`)),P(n,this.cn("button")+" "+this.cn(t===q?"isNext":"isPrev"));const s=i.isRTL?t===q?Y:q:t;var o;return n.innerHTML=i.localize(this.option(`${s}Tpl`)),n.dataset[`carousel${o=t,o?o.match("^[a-z]")?o.charAt(0).toUpperCase()+o.substring(1):o:""}`]="true",null===(e=this.container)||void 0===e||e.appendChild(n),n}build(){const t=this.instance.container,e=this.cn("container");let{container:i,prev:n,next:s}=this;i||(i=t.querySelector("."+e),this.isDom=!!i),i||(i=document.createElement("div"),P(i,e),t.appendChild(i)),this.container=i,s||(s=i.querySelector("[data-carousel-next]")),s||(s=this.addBtn(q)),this.next=s,n||(n=i.querySelector("[data-carousel-prev]")),n||(n=this.addBtn(Y)),this.prev=n}cleanup(){this.isDom||(this.prev&&this.prev.remove(),this.next&&this.next.remove(),this.container&&this.container.remove()),this.prev=null,this.next=null,this.container=null,this.isDom=!1}attach(){this.instance.on(["refresh","change"],this.onRefresh)}detach(){this.instance.off(["refresh","change"],this.onRefresh),this.cleanup()}}Object.defineProperty(V,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{classes:{container:"f-carousel__nav",button:"f-button",isNext:"is-next",isPrev:"is-prev"},nextTpl:\'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" tabindex="-1"><path d="M9 3l9 9-9 9"/></svg>
1\',prevTpl:\'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" tabindex="-1"><path d="M15 3l-9 9 9 9"/></svg>\'}});class Z extends _{constructor(){super(...arguments),Object.defineProperty(this,"selectedIndex",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"target",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"nav",{enumerable:!0,configurable:!0,writable:!0,value:null})}addAsTargetFor(t){this.target=this.instance,this.nav=t,this.attachEvents()}addAsNavFor(t){this.nav=this.instance,this.target=t,this.attachEvents()}attachEvents(){const{nav:t,target:e}=this;t&&e&&(t.options.initialSlide=e.options.initialPage,t.state===B.Ready?this.onNavReady(t):t.on("ready",this.onNavReady),e.state===B.Ready?this.onTargetReady(e):e.on("ready",this.onTargetReady))}onNavReady(t){t.on("createSlide",this.onNavCreateSlide),t.on("Panzoom.click",this.onNavClick),t.on("Panzoom.touchEnd",this.onNavTouch),this.onTargetChange()}onTargetReady(t){t.on("change",this.onTargetChange),t.on("Panzoom.refresh",this.onTargetChange),this.onTargetChange()}onNavClick(t,e,i){this.onNavTouch(t,t.panzoom,i)}onNavTouch(t,e,i){var n,s;if(Math.abs(e.dragOffset.x)>3||Math.abs(e.dragOffset.y)>3)return;const o=i.target,{nav:a,target:r}=this;if(!a||!r||!o)return;const l=o.closest("[data-index]");if(i.stopPropagation(),i.preventDefault(),!l)return;const c=parseInt(l.dataset.index||"",10)||0,h=r.getPageForSlide(c),d=a.getPageForSlide(c);a.slideTo(d),r.slideTo(h,{friction:(null===(s=null===(n=this.nav)||void 0===n?void 0:n.plugins)||void 0===s?void 0:s.Sync.option("friction"))||0}),this.markSelectedSlide(c)}onNavCreateSlide(t,e){e.index===this.selectedIndex&&this.markSelectedSlide(e.index)}onTargetChange(){var t,e;const{target:i,nav:n}=this;if(!i||!n)return;if(n.state!==B.Ready||i.state!==B.Ready)return;const s=null===(e=null===(t=i.pages[i.page])||void 0===t?void 0:t.slides[0])||void 0===e?void 0:e.index,o=n.getPageForSlide(s);this.markSelectedSlide(s),n.slideTo(o,null===n.prevPage&&null===i.prevPage?{friction:0}:void 0)}markSelectedSlide(t){const e=this.nav;e&&e.state===B.Ready&&(this.selectedIndex=t,[...e.slides].map((e=>{e.el&&e.el.classList[e.index===t?"add":"remove"]("is-nav-selected")})))}attach(){const t=this;let e=t.options.target,i=t.options.nav;e?t.addAsNavFor(e):i&&t.addAsTargetFor(i)}detach(){const t=this,e=t.nav,i=t.target;e&&(e.off("ready",t.onNavReady),e.off("createSlide",t.onNavCreateSlide),e.off("Panzoom.click",t.onNavClick),e.off("Panzoom.touchEnd",t.onNavTouch)),t.nav=null,i&&(i.off("ready",t.onTargetReady),i.off("refresh",t.onTargetChange),i.off("change",t.onTargetChange)),t.target=null}}Object.defineProperty(Z,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{friction:.35}});const U={Navigation:V,Dots:W,Sync:Z},G="animationend",K="isSelected",J="slide";class Q extends g{get axis(){return this.isHorizontal?"e":"f"}get isEnabled(){return this.state===B.Ready}get isInfinite(){let t=!1;const{contentDim:e,viewportDim:i,pages:n,slides:s}=this,o=s[0];return n.length>=2&&o&&e+o.dim>=i&&(t=this.option("infinite")),t}get isRTL(){return"rtl"===this.option("direction")}get isHorizontal(){return"x"===this.option("axis")}constructor(t,e={},i={}){if(super(),Object.defineProperty(this,"bp",{enumerable:!0,configurable:!0,writable:!0,value:""}),Object.defineProperty(this,"lp",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"userOptions",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"userPlugins",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:B.Init}),Object.defineProperty(this,"page",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"prevPage",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),Object.defineProperty(this,"viewport",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"track",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"slides",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"pages",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"panzoom",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"inTransition",{enumerable:!0,configurable:!0,writable:!0,value:new Set}),Object.defineProperty(this,"contentDim",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"viewportDim",{enumerable:!0,configurable:!0,writable:!0,value:0}),"string"==typeof t&&(t=document.querySelector(t)),!t||!E(t))throw new Error("No Element found");this.container=t,this.slideNext=D(this.slideNext.bind(this),150),this.slidePrev=D(this.slidePrev.bind(this),150),this.userOptions=e,this.userPlugins=i,queueMicrotask((()=>{this.processOptions()}))}processOptions(){var t,e;const i=u({},Q.defaults,this.userOptions);let n="";const s=i.breakpoints;if(s&&d(s))for(const[t,e]of Object.entries(s))window.matchMedia(t).matches&&d(e)&&(n+=t,u(i,e));n===this.bp&&this.state!==B.Init||(this.bp=n,this.state===B.Ready&&(i.initialSlide=(null===(e=null===(t=this.pages[this.page])||void 0===t?void 0:t.slides[0])||void 0===e?void 0:e.index)||0),this.state!==B.Init&&this.destroy(),super.setOptions(i),!1===this.option("enabled")?this.attachEvents():setTimeout((()=>{this.init()}),0))}
1init(){this.state=B.Init,this.emit("init"),this.attachPlugins(Object.assign(Object.assign({},Q.Plugins),this.userPlugins)),this.emit("attachPlugins"),this.initLayout(),this.initSlides(),this.updateMetrics(),this.setInitialPosition(),this.initPanzoom(),this.attachEvents(),this.state=B.Ready,this.emit("ready")}initLayout(){const{container:t}=this,e=this.option("classes");P(t,this.cn("container")),o(t,e.isLTR,!this.isRTL),o(t,e.isRTL,this.isRTL),o(t,e.isVertical,!this.isHorizontal),o(t,e.isHorizontal,this.isHorizontal);let i=this.option("viewport")||t.querySelector(`.${e.viewport}`);i||(i=document.createElement("div"),P(i,e.viewport),i.append(...F(t,`.${e.slide}`)),t.prepend(i)),i.addEventListener("scroll",this.onScroll);let n=this.option("track")||t.querySelector(`.${e.track}`);n||(n=document.createElement("div"),P(n,e.track),n.append(...Array.from(i.childNodes))),n.setAttribute("aria-live","polite"),i.contains(n)||i.prepend(n),this.viewport=i,this.track=n,this.emit("initLayout")}initSlides(){const{track:t}=this;if(!t)return;const e=[...this.slides],i=[];[...F(t,`.${this.cn(J)}`)].forEach((t=>{if(E(t)){const e=H({el:t,isDom:!0,index:this.slides.length});i.push(e)}}));for(let t of[...this.option("slides",[])||[],...e])i.push(H(t));this.slides=i;for(let t=0;t<this.slides.length;t++)this.slides[t].index=t;
1for(const t of i)this.emit("beforeInitSlide",t,t.index),this.emit("initSlide",t,t.index);this.emit("initSlides")}setInitialPage(){const t=this.option("initialSlide");this.page="number"==typeof t?this.getPageForSlide(t):parseInt(this.option("initialPage",0)+"",10)||0}setInitialPosition(){const{track:t,pages:e,isHorizontal:i}=this;if(!t||!e.length)return;let n=this.page;e[n]||(this.page=n=0);const s=(e[n].pos||0)*(this.isRTL&&i?1:-1),o=i?`${s}px`:"0",a=i?"0":`${s}px`;t.style.transform=`translate3d(${o}, ${a}, 0) scale(1)`,this.option("adaptiveHeight")&&this.setViewportHeight()}initPanzoom(){this.panzoom&&(this.panzoom.destroy(),this.panzoom=null);const t=this.option("Panzoom")||{};this.panzoom=new I(this.viewport,u({},{content:this.track,zoom:!1,panOnlyZoomed:!1,lockAxis:this.isHorizontal?"x":"y",infinite:this.isInfinite,click:!1,dblClick:!1,touch:t=>!(this.pages.length<2&&!t.options.infinite),bounds:()=>this.getBounds(),maxVelocity:t=>Math.abs(t.target[this.axis]-t.current[this.axis])<2*this.viewportDim?100:0},t)),this.panzoom.on("*",((t,e,...i)=>{this.emit(`Panzoom.${e}`,t,...i)})),this.panzoom.on("decel",this.onDecel),this.panzoom.on("refresh",this.onRefresh),this.panzoom.on("beforeTransform",this.onBeforeTransform),this.panzoom.on("endAnimation",this.onEndAnimation)}attachEvents(){const t=this.container;t&&(t.addEventListener("click",this.onClick,{passive:!1,capture:!1}),t.addEventListener("slideTo",this.onSlideTo)),window.addEventListener("resize",this.onResize)}createPages(){let t=[];const{contentDim:e,viewportDim:i}=this;let n=this.option("slidesPerPage");n=("auto"===n||e<=i)&&!1!==this.option("fill")?1/0:parseFloat(n+"");let s=0,o=0,a=0;for(const e of this.slides)(!t.length||o+e.dim-i>.05||a>=n)&&(t.push(N()),s=t.length-1,o=0,a=0),t[s].slides.push(e),o+=e.dim+e.gap,a++;return t}processPages(){const e=this.pages,{contentDim:i,viewportDim:n,isInfinite:s}=this,o=this.option("center"),a=this.option("fill"),r=a&&o&&i>n&&!s;if(e.forEach(((t,e)=>{var s;t.index=e,t.pos=(null===(s=t.slides[0])||void 0===s?void 0:s.pos)||0,t.dim=0;for(const[e,i]of t.slides.entries())t.dim+=i.dim,e<t.slides.length-1&&(t.dim+=i.gap);r&&t.pos+.5*t.dim<.5*n?t.pos=0:r&&t.pos+.5*t.dim>=i-.5*n?t.pos=i-n:o&&(t.pos+=-.5*(n-t.dim))})),e.forEach((e=>{a&&!s&&i>n&&(e.pos=Math.max(e.pos,0),e.pos=Math.min(e.pos,i-n)),e.pos=t(e.pos,1e3),e.dim=t(e.dim,1e3),Math.abs(e.pos)<=.1&&(e.pos=0)})),s)return e;const l=[];let c;return e.forEach((t=>{const e=Object.assign({},t);c&&e.pos===c.pos?(c.dim+=e.dim,c.slides=[...c.slides,...e.slides]):(e.index=l.length,c=e,l.push(e))})),l}getPageFromIndex(t=0){const e=this.pages.length;let i;return t=parseInt((t||0).toString())||0,i=this.isInfinite?(t%e+e)%e:Math.max(Math.min(t,e-1),0),i}getSlideMetrics(e){var i,n;const s=this.isHorizontal?"width":"height";let o=0,a=0,r=e.el;const l=!(!r||r.parentNode);if(r?o=parseFloat(r.dataset[s]||"")||0:(r=document.createElement("div"),r.style.visibility="hidden",(this.track||document.body).prepend(r)),P(r,this.cn(J)+" "+e.class+" "+e.customClass),o)r.style[s]=`${o}px`,r.style["width"===s?"height":"width"]="";else{l&&(this.track||document.body).prepend(r),o=r.getBoundingClientRect()[s]*Math.max(1,(null===(i=window.visualViewport)||void 0===i?void 0:i.scale)||1);let t=r[this.isHorizontal?"offsetWidth":"offsetHeight"];t-1>o&&(o=t)}const c=getComputedStyle(r);return"content-box"===c.boxSizing&&(this.isHorizontal?(o+=parseFloat(c.paddingLeft)||0,o+=parseFloat(c.paddingRight)||0):(o+=parseFloat(c.paddingTop)||0,o+=parseFloat(c.paddingBottom)||0)),a=parseFloat(c[this.isHorizontal?"marginRight":"marginBottom"])||0,l?null===(n=r.parentElement)||void 0===n||n.removeChild(r):e.el||r.remove(),{dim:t(o,1e3),gap:t(a,1e3)}}getBounds(){const{isInfinite:t,isRTL:e,isHorizontal:i,pages:n}=this;let s={min:0,max:0};if(t)s={min:-1/0,max:1/0};else if(n.length){const t=n[0].pos,o=n[n.length-1].pos;s=e&&i?{min:t,max:o}:{min:-1*o,max:-1*t}}return{x:i?s:{min:0,max:0},y:i?{min:0,max:0}:s}}repositionSlides(){let e,{isHorizontal:i,isRTL:n,isInfinite:s,viewport:o,viewportDim:a,contentDim:r,page:l,pages:c,slides:h,panzoom:d}=this,u=0,p=0,f=0,g=0;d?g=-1*d.current[this.axis]:c[l]&&(g=c[l].pos||0),e=i?n?"right":"left":"top",n&&i&&(g*=-1);for(const i of h){const n=i.el;n?("top"===e?(n.style.right="",n.style.left=""):n.style.top="",i.index!==u?n.style[e]=0===p?"":`${t(p,1e3)}px`:n.style[e]="",f+=i.dim+i.gap,u++):p+=i.dim+i.gap}if(s&&f&&o){let n=getComputedStyle(o),s="padding",l=i?"Right":"Bottom",c=parseFloat(n[s+(i?"Left":"Top")]);g-=c,a+=c,a+=parseFloat(n[s+l]);for(const i of h)i.el&&(t(i.pos)<t(a)&&t(i.pos+i.dim+i.gap)<t(g)&&t(g)>t(r-a)&&(i.el.style[e]=`${t(p+f,1e3)}px`),t(i.pos+i.gap)>=t(r-a)&&t(i.pos)>t(g+a)&&t(g)<t(a)&&(i.el.style[e]=`-${t(f,1e3)}px`))}let m,v,b=[...this.inTransition];if(b.length>1&&(m=c[b[0]],v=c[b[1]]),m&&v){let i=0;for(const n of h)n.el?this.inTransition.has(n.index)&&m.slides.indexOf(n)<0&&(n.el.style[e]=`${t(i+(m.pos-v.pos),1e3)}px`):i+=n.dim+n.gap}}createSlideEl(t){const{track:e,slides:i}=this;if(!e||!t)return;if(t.el&&t.el.parentNode)return;const n=t.el||document.createElement("div");P(n,this.cn(J)),P(n,t.class),P(n,t.customClass);const s=t.html;s&&(s instanceof HTMLElement?n.appendChild(s):n.innerHTML=t.html+"");const o=[];
1i.forEach(((t,e)=>{t.el&&o.push(e)}));const a=t.index;let r=null;if(o.length){r=i[o.reduce(((t,e)=>Math.abs(e-a)<Math.abs(t-a)?e:t))]}const l=r&&r.el&&r.el.parentNode?r.index<t.index?r.el.nextSibling:r.el:null;e.insertBefore(n,e.contains(l)?l:null),t.el=n,this.emit("createSlide",t)}removeSlideEl(t,e=!1){const i=null==t?void 0:t.el;if(!i||!i.parentNode)return;const n=this.cn(K);if(i.classList.contains(n)&&(S(i,n),this.emit("unselectSlide",t)),t.isDom&&!e)return i.removeAttribute("aria-hidden"),i.removeAttribute("data-index"),void(i.style.left="");this.emit("removeSlide",t);const s=new CustomEvent(G);i.dispatchEvent(s),t.el&&(t.el.remove(),t.el=null)}transitionTo(t=0,e=this.option("transition")){var i,n,s,o;if(!e)return!1;const a=this.page,{pages:r,panzoom:l}=this;t=parseInt((t||0).toString())||0;const c=this.getPageFromIndex(t);if(!l||!r[c]||r.length<2||Math.abs(((null===(n=null===(i=r[a])||void 0===i?void 0:i.slides[0])||void 0===n?void 0:n.dim)||0)-this.viewportDim)>1)return!1;let h=t>a?1:-1;this.isInfinite&&(0===a&&t===r.length-1&&(h=-1),a===r.length-1&&0===t&&(h=1));const d=r[c].pos*(this.isRTL?1:-1);if(a===c&&Math.abs(d-l.target[this.axis])<1)return!1;this.clearTransitions();const u=l.isResting;P(this.container,this.cn("inTransition"));const p=(null===(s=r[a])||void 0===s?void 0:s.slides[0])||null,f=(null===(o=r[c])||void 0===o?void 0:o.slides[0])||null;this.inTransition.add(f.index),this.createSlideEl(f);let g=p.el,m=f.el;u||e===J||(e="fadeFast",g=null);const v=this.isRTL?"next":"prev",b=this.isRTL?"prev":"next";return g&&(this.inTransition.add(p.index),p.transition=e,g.addEventListener(G,this.onAnimationEnd),g.classList.add(`f-${e}Out`,`to-${h>0?b:v}`)),m&&(f.transition=e,m.addEventListener(G,this.onAnimationEnd),m.classList.add(`f-${e}In`,`from-${h>0?v:b}`)),l.current[this.axis]=d,l.target[this.axis]=d,l.requestTick(),this.onChange(c),!0}manageSlideVisiblity(){const t=new Set,e=new Set,i=this.getVisibleSlides(parseFloat(this.option("preload",0)+"")||0);for(const n of this.slides)i.has(n)?t.add(n):e.add(n);for(const e of this.inTransition)t.add(this.slides[e]);for(const e of t)this.createSlideEl(e),this.lazyLoadSlide(e);for(const i of e)t.has(i)||this.removeSlideEl(i);this.markSelectedSlides(),this.repositionSlides()}markSelectedSlides(){if(!this.pages[this.page]||!this.pages[this.page].slides)return;const t="aria-hidden";let e=this.cn(K);if(e)for(const i of this.slides){const n=i.el;n&&(n.dataset.index=`${i.index}`,n.classList.contains("f-thumbs__slide")?this.getVisibleSlides(0).has(i)?n.removeAttribute(t):n.setAttribute(t,"true"):this.pages[this.page].slides.includes(i)?(n.classList.contains(e)||(P(n,e),this.emit("selectSlide",i)),n.removeAttribute(t)):(n.classList.contains(e)&&(S(n,e),this.emit("unselectSlide",i)),n.setAttribute(t,"true")))}}flipInfiniteTrack(){const{axis:t,isHorizontal:e,isInfinite:i,isRTL:n,viewportDim:s,contentDim:o}=this,a=this.panzoom;if(!a||!i)return;let r=a.current[t],l=a.target[t]-r,c=0,h=.5*s;n&&e?(r<-h&&(c=-1,r+=o),r>o-h&&(c=1,r-=o)):(r>h&&(c=1,r-=o),r<-o+h&&(c=-1,r+=o)),c&&(a.current[t]=r,a.target[t]=r+l)}lazyLoadImg(t,e){const i=this,s="f-fadeIn",o="is-preloading";let a=!1,r=null;const l=()=>{a||(a=!0,r&&(r.remove(),r=null),S(e,o),e.complete&&(P(e,s),setTimeout((()=>{S(e,s)}),350)),this.option("adaptiveHeight")&&t.el&&this.pages[this.page].slides.indexOf(t)>-1&&(i.updateMetrics(),i.setViewportHeight()),this.emit("load",t))};P(e,o),e.src=e.dataset.lazySrcset||e.dataset.lazySrc||"",delete e.dataset.lazySrc,delete e.dataset.lazySrcset,e.addEventListener("error",(()=>{l()})),e.addEventListener("load",(()=>{l()})),setTimeout((()=>{const i=e.parentNode;i&&t.el&&(e.complete?l():a||(r=n(x),i.insertBefore(r,e)))}),300)}lazyLoadSlide(t){const e=t&&t.el;if(!e)return;const i=new Set;let n=Array.from(e.querySelectorAll("[data-lazy-src],[data-lazy-srcset]"));e.dataset.lazySrc&&n.push(e),n.map((t=>{t instanceof HTMLImageElement?i.add(t):t instanceof HTMLElement&&t.dataset.lazySrc&&(t.style.backgroundImage=`url(\'${t.dataset.lazySrc}\')`,delete t.dataset.lazySrc)}));for(const e of i)this.lazyLoadImg(t,e)}onAnimationEnd(t){var e;const i=t.target,n=i?parseInt(i.dataset.index||"",10)||0:-1,s=this.slides[n],o=t.animationName;if(!i||!s||!o)return;const a=!!this.inTransition.has(n)&&s.transition;a&&o.substring(0,a.length+2)===`f-${a}`&&this.inTransition.delete(n),this.inTransition.size||this.clearTransitions(),n===this.page&&(null===(e=this.panzoom)||void 0===e?void 0:e.isResting)&&this.emit
1("settle")}onDecel(t,e=0,i=0,n=0,s=0){if(this.option("dragFree"))return void this.setPageFromPosition();const{isRTL:o,isHorizontal:a,axis:r,pages:l}=this,c=l.length,h=Math.abs(Math.atan2(i,e)/(Math.PI/180));let d=0;if(d=h>45&&h<135?a?0:i:a?e:0,!c)return;let u=this.page,p=o&&a?1:-1;const f=t.current[r]*p;let{pageIndex:g}=this.getPageFromPosition(f);Math.abs(d)>5?(l[u].dim<document.documentElement["client"+(this.isHorizontal?"Width":"Height")]-1&&(u=g),u=o&&a?d<0?u-1:u+1:d<0?u+1:u-1):u=0===n&&0===s?u:g,this.slideTo(u,{transition:!1,friction:t.option("decelFriction")})}onClick(t){const e=t.target,i=e&&E(e)?e.dataset:null;let n,s;i&&(void 0!==i.carouselPage?(s="slideTo",n=i.carouselPage):void 0!==i.carouselNext?s="slideNext":void 0!==i.carouselPrev&&(s="slidePrev")),s?(t.preventDefault(),t.stopPropagation(),e&&!e.hasAttribute("disabled")&&this[s](n)):this.emit("click",t)}onSlideTo(t){const e=t.detail||0;this.slideTo(this.getPageForSlide(e),{friction:0})}onChange(t,e=0){const i=this.page;this.prevPage=i,this.page=t,this.option("adaptiveHeight")&&this.setViewportHeight(),t!==i&&(this.markSelectedSlides(),this.emit("change",t,i,e))}onRefresh(){let t=this.contentDim,e=this.viewportDim;this.updateMetrics(),this.contentDim===t&&this.viewportDim===e||this.slideTo(this.page,{friction:0,transition:!1})}onScroll(){var t;null===(t=this.viewport)||void 0===t||t.scroll(0,0)}onResize(){this.option("breakpoints")&&this.processOptions()}onBeforeTransform(t){this.lp!==t.current[this.axis]&&(this.flipInfiniteTrack(),this.manageSlideVisiblity()),this.lp=t.current.e}onEndAnimation(){this.inTransition.size||this.emit("settle")}reInit(t=null,e=null){this.destroy(),this.state=B.Init,this.prevPage=null,this.userOptions=t||this.userOptions,this.userPlugins=e||this.userPlugins,this.processOptions()}slideTo(t=0,{friction:e=this.option("friction"),transition:i=this.option("transition")}={}){if(this.state===B.Destroy)return;t=parseInt((t||0).toString())||0;const n=this.getPageFromIndex(t),{axis:s,isHorizontal:o,isRTL:a,pages:r,panzoom:l}=this,c=r.length,h=a&&o?1:-1;if(!l||!c)return;if(this.page!==n){const e=new Event("beforeChange",{bubbles:!0,cancelable:!0});if(this.emit("beforeChange",e,t),e.defaultPrevented)return}if(this.transitionTo(t,i))return;let d=r[n].pos;if(this.isInfinite){const e=this.contentDim,i=l.target[s]*h;if(2===c)d+=e*Math.floor(parseFloat(t+"")/2);else{d=[d,d-e,d+e].reduce((function(t,e){return Math.abs(e-i)<Math.abs(t-i)?e:t}))}}d*=h,Math.abs(l.target[s]-d)<1||(l.panTo({x:o?d:0,y:o?0:d,friction:e}),this.onChange(n))}slideToClosest(t){if(this.panzoom){const{pageIndex:e}=this.getPageFromPosition();this.slideTo(e,t)}}slideNext(){this.slideTo(this.page+1)}slidePrev(){this.slideTo(this.page-1)}clearTransitions(){this.inTransition.clear(),S(this.container,this.cn("inTransition"));const t=["to-prev","to-next","from-prev","from-next"];for(const e of this.slides){const i=e.el;if(i){i.removeEventListener(G,this.onAnimationEnd),i.classList.remove(...t);const n=e.transition;n&&i.classList.remove(`f-${n}Out`,`f-${n}In`)}}this.manageSlideVisiblity()}addSlide(t,e){var i,n,s,o;const a=this.panzoom,r=(null===(i=this.pages[this.page])||void 0===i?void 0:i.pos)||0,l=(null===(n=this.pages[this.page])||void 0===n?void 0:n.dim)||0,c=this.contentDim<this.viewportDim;let h=Array.isArray(e)?e:[e];const d=[];for(const t of h)d.push(H(t));this.slides.splice(t,0,...d);for(let t=0;t<this.slides.length;t++)this.slides[t].index=t;for(const t of d)this.emit("beforeInitSlide",t,t.index);if(this.page>=t&&(this.page+=d.length),this.updateMetrics(),a){const e=(null===(s=this.pages[this.page])||void 0===s?void 0:s.pos)||0,i=(null===(o=this.pages[this.page])||void 0===o?void 0:o.dim)||0,n=this.pages.length||1,h=this.isRTL?l-i:i-l,d=this.isRTL?r-e:e-r;c&&1===n?(t<=this.page&&(a.current[this.axis]-=h,a.target[this.axis]-=h),a.panTo({[this.isHorizontal?"x":"y"]:-1*e})):d&&t<=this.page&&(a.target[this.axis]-=d,a.current[this.axis]-=d,a.requestTick())}for(const t of d)this.emit("initSlide",t,t.index)}prependSlide(t){this.addSlide(0,t)}appendSlide(t){this.addSlide(this.slides.length,t)}removeSlide(t){const e=this.slides.length;t=(t%e+e)%e;const i=this.slides[t];
1if(i){this.removeSlideEl(i,!0),this.slides.splice(t,1);for(let t=0;t<this.slides.length;t++)this.slides[t].index=t;this.updateMetrics(),this.slideTo(this.page,{friction:0,transition:!1}),this.emit("destroySlide",i)}}updateMetrics(){const{panzoom:e,viewport:i,track:n,slides:s,isHorizontal:o,isInfinite:a}=this;if(!n)return;const r=o?"width":"height",l=o?"offsetWidth":"offsetHeight";if(i){let e=Math.max(i[l],t(i.getBoundingClientRect()[r],1e3)),n=getComputedStyle(i),s="padding",a=o?"Right":"Bottom";e-=parseFloat(n[s+(o?"Left":"Top")])+parseFloat(n[s+a]),this.viewportDim=e}let c,h=0;for(const[e,i]of s.entries()){let n=0,o=0;!i.el&&c?(n=c.dim,o=c.gap):(({dim:n,gap:o}=this.getSlideMetrics(i)),c=i),n=t(n,1e3),o=t(o,1e3),i.dim=n,i.gap=o,i.pos=h,h+=n,(a||e<s.length-1)&&(h+=o)}h=t(h,1e3),this.contentDim=h,e&&(e.contentRect[r]=h,e.contentRect[o?"fullWidth":"fullHeight"]=h),this.pages=this.createPages(),this.pages=this.processPages(),this.state===B.Init&&this.setInitialPage(),this.page=Math.max(0,Math.min(this.page,this.pages.length-1)),this.manageSlideVisiblity(),this.emit("refresh")}getProgress(e,i=!1,n=!1){void 0===e&&(e=this.page);const s=this,o=s.panzoom,a=s.contentDim,r=s.pages[e]||0;if(!r||!o)return e>this.page?-1:1;let l=-1*o.current.e,c=t((l-r.pos)/(1*r.dim),1e3),h=c,d=c;this.isInfinite&&!0!==n&&(h=t((l-r.pos+a)/(1*r.dim),1e3),d=t((l-r.pos-a)/(1*r.dim),1e3));let u=[c,h,d].reduce((function(t,e){return Math.abs(e)<Math.abs(t)?e:t}));return i?u:u>1?1:u<-1?-1:u}setViewportHeight(){const{page:t,pages:e,viewport:i,isHorizontal:n}=this;if(!i||!e[t])return;let s=0;n&&this.track&&(this.track.style.height="auto",e[t].slides.forEach((t=>{t.el&&(s=Math.max(s,t.el.offsetHeight))}))),i.style.height=s?`${s}px`:""}getPageForSlide(t){for(const e of this.pages)for(const i of e.slides)if(i.index===t)return e.index;return-1}getVisibleSlides(t=0){var e;const i=new Set;let{panzoom:n,contentDim:s,viewportDim:o,pages:a,page:r}=this;if(o){s=s+(null===(e=this.slides[this.slides.length-1])||void 0===e?void 0:e.gap)||0;let l=0;l=n&&n.state!==m.Init&&n.state!==m.Destroy?-1*n.current[this.axis]:a[r]&&a[r].pos||0,this.isInfinite&&(l-=Math.floor(l/s)*s),this.isRTL&&this.isHorizontal&&(l*=-1);const c=l-o*t,h=l+o*(t+1),d=this.isInfinite?[-1,0,1]:[0];for(const t of this.slides)for(const e of d){const n=t.pos+e*s,o=n+t.dim+t.gap;n<h&&o>c&&i.add(t)}}return i}getPageFromPosition(t){const{viewportDim:e,contentDim:i,slides:n,pages:s,panzoom:o}=this,a=s.length,r=n.length,l=n[0],c=n[r-1],h=this.option("center");let d=0,u=0,p=0,f=void 0===t?-1*((null==o?void 0:o.target[this.axis])||0):t;h&&(f+=.5*e),this.isInfinite?(f<l.pos-.5*c.gap&&(f-=i,p=-1),f>c.pos+c.dim+.5*c.gap&&(f-=i,p=1)):f=Math.max(l.pos||0,Math.min(f,c.pos));let g=c,m=n.find((t=>{const e=t.pos-.5*g.gap,i=t.pos+t.dim+.5*t.gap;return g=t,f>=e&&f<i}));return m||(m=c),u=this.getPageForSlide(m.index),d=u+p*a,{page:d,pageIndex:u}}setPageFromPosition(){const{pageIndex:t}=this.getPageFromPosition();this.onChange(t)}destroy(){if([B.Destroy].includes(this.state))return;this.state=B.Destroy;const{container:t,viewport:e,track:i,slides:n,panzoom:s}=this,o=this.option("classes");t.removeEventListener("click",this.onClick,{passive:!1,capture:!1}),t.removeEventListener("slideTo",this.onSlideTo),window.removeEventListener("resize",this.onResize),s&&(s.destroy(),this.panzoom=null),n&&n.forEach((t=>{this.removeSlideEl(t)})),this.detachPlugins(),e&&(e.removeEventListener("scroll",this.onScroll),e.offsetParent&&i&&i.offsetParent&&e.replaceWith(...i.childNodes));for(const[e,i]of Object.entries(o))"container"!==e&&i&&t.classList.remove(i);this.track=null,this.viewport=null,this.page=0,this.slides=[];const a=this.events.get("ready");this.events=new Map,a&&this.events.set("ready",a)}}Object.defineProperty(Q,"Panzoom",{enumerable:!0,configurable:!0,writable:!0,value:I}),Object.defineProperty(Q,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:j}),Object.defineProperty(Q,"Plugins",{enumerable:!0,configurable:!0,writable:!0,value:U});const tt=function(t){if(!E(t))return 0;const e=window.scrollY,i=window.innerHeight,n=e+i,s=t.getBoundingClientRect(),o=s.y+e,a=s.height,r=o+a;if(e>r||n<o)return 0;if(e<o&&n>r)return 100;if(o<e&&r>n)return 100;let l=a;o<e&&(l-=e-o),r>n&&(l-=r-n);const c=l/i*100;return Math.round(c)},et=!("undefined"==typeof window||!window.document||!window.document.createElement);let it;const nt=["a[href]","area[href]",\'input:not([disabled]):not([type="hidden"]):not([aria-hidden])\',"select:not([disabled]):not([aria-hidden])","textarea:not([disabled]):not([aria-hidden])","button:not([disabled]):not([aria-hidden]):not(.fancybox-focus-guard)","iframe","object","embed","video","audio","[contenteditable]",\'[tabindex]:not
1([tabindex^="-"]):not([disabled]):not([aria-hidden])\'].join(","),st=t=>{if(t&&et){void 0===it&&document.createElement("div").focus({get preventScroll(){return it=!0,!1}});try{if(it)t.focus({preventScroll:!0});else{const e=window.scrollY||document.body.scrollTop,i=window.scrollX||document.body.scrollLeft;t.focus(),document.body.scrollTo({top:e,left:i,behavior:"auto"})}}catch(t){}}},ot=()=>{const t=document;let e,i="",n="",s="";return t.fullscreenEnabled?(i="requestFullscreen",n="exitFullscreen",s="fullscreenElement"):t.webkitFullscreenEnabled&&(i="webkitRequestFullscreen",n="webkitExitFullscreen",s="webkitFullscreenElement"),i&&(e={request:function(e=t.documentElement){return"webkitRequestFullscreen"===i?e[i](Element.ALLOW_KEYBOARD_INPUT):e[i]()},exit:function(){return t[s]&&t[n]()},isFullscreen:function(){return t[s]}}),e},at={animated:!0,autoFocus:!0,backdropClick:"close",Carousel:{classes:{container:"fancybox__carousel",viewport:"fancybox__viewport",track:"fancybox__track",slide:"fancybox__slide"}},closeButton:"auto",closeExisting:!1,commonCaption:!1,compact:()=>window.matchMedia("(max-width: 578px), (max-height: 578px)").matches,contentClick:"toggleZoom",contentDblClick:!1,defaultType:"image",defaultDisplay:"flex",dragToClose:!0,Fullscreen:{autoStart:!1},groupAll:!1,groupAttr:"data-fancybox",hideClass:"f-fadeOut",hideScrollbar:!0,idle:3500,keyboard:{Escape:"close",Delete:"close",Backspace:"close",PageUp:"next",PageDown:"prev",ArrowUp:"prev",ArrowDown:"next",ArrowRight:"next",ArrowLeft:"prev"},l10n:Object.assign(Object.assign({},b),{CLOSE:"Close",NEXT:"Next",PREV:"Previous",MODAL:"You can close this modal content with the ESC key",ERROR:"Something Went Wrong, Please Try Again Later",IMAGE_ERROR:"Image Not Found",ELEMENT_NOT_FOUND:"HTML Element Not Found",AJAX_NOT_FOUND:"Error Loading AJAX : Not Found",AJAX_FORBIDDEN:"Error Loading AJAX : Forbidden",IFRAME_ERROR:"Error Loading Page",TOGGLE_ZOOM:"Toggle zoom level",TOGGLE_THUMBS:"Toggle thumbnails",TOGGLE_SLIDESHOW:"Toggle slideshow",TOGGLE_FULLSCREEN:"Toggle full-screen mode",DOWNLOAD:"Download"}),parentEl:null,placeFocusBack:!0,showClass:"f-zoomInUp",startIndex:0,tpl:{closeButton:\'<button data-fancybox-close class="f-button is-close-btn" title="{{CLOSE}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" tabindex="-1"><path d="M20 20L4 4m16 0L4 20"/></svg></button>\',main:\'<div class="fancybox__container" role="dialog" aria-modal="true" aria-label="{{MODAL}}" tabindex="-1">\\n <div class="fancybox__backdrop"></div>\\n <div class="fancybox__carousel"></div>\\n <div class="fancybox__footer"></div>\\n </div>\'},trapFocus:!0,wheel:"zoom"};var rt,lt;!function(t){t[t.Init=0]="Init",t[t.Ready=1]="Ready",t[t.Closing=2]="Closing",t[t.CustomClosing=3]="CustomClosing",t[t.Destroy=4]="Destroy"}(rt||(rt={})),function(t){t[t.Loading=0]="Loading",t[t.Opening=1]="Opening",t[t.Ready=2]="Ready",t[t.Closing=3]="Closing"}(lt||(lt={}));let ct="",ht=!1,dt=!1,ut=null;const pt=()=>{let t="",e="";const i=Oe.getInstance();if(i){const n=i.carousel,s=i.getSlide();if(n&&s){let o=s.slug||void 0,a=s.triggerEl||void 0;e=o||(i.option("slug")||""),!e&&a&&a.dataset&&(e=a.dataset.fancybox||""),e&&"true"!==e&&(t="#"+e+(!o&&n.slides.length>1?"-"+(s.index+1):""))}}return{hash:t,slug:e,index:1}},ft=()=>{const t=new URL(document.URL).hash,e=t.slice(1).split("-"),i=e[e.length-1],n=i&&/^\\+?\\d+$/.test(i)&&parseInt(e.pop()||"1",10)||1;return{hash:t,slug:e.join("-"),index:n}},gt=()=>{const{slug:t,index:e}=ft();if(!t)return;let i=document.querySelector(`[data-slug="${t}"]`);if(i&&i.dispatchEvent(new CustomEvent("click",{bubbles:!0,cancelable:!0})),Oe.getInstance())return;const n=document.querySelectorAll(`[data-fancybox="${t}"]`);n.length&&(i=n[e-1],i&&i.dispatchEvent(new CustomEvent("click",{bubbles:!0,cancelable:!0})))},mt=()=>{if(!1===Oe.defaults.Hash)return;const t=Oe.getInstance();if(!1===(null==t?void 0:t.options.Hash))return;const{slug:e,index:i}=ft(),{slug:n}=pt();t&&(e===n?t.jumpTo(i-1):(ht=!0,t.close())),gt()},vt=()=>{ut&&clearTimeout(ut),queueMicrotask((()=>{mt()}))},bt=()=>{window.addEventListener("hashchange",vt,!1),setTimeout((()=>{mt()}),500)};et&&(/complete|interactive|loaded/.test(document.readyState)?bt():document.addEventListener("DOMContentLoaded",bt));const yt="is-zooming-in";class wt extends _{onCreateSlide(t,e,i){const n=this.instance.optionFor(i,"src")||"";i.el&&"image"===i.type&&"string"==typeof n&&this.setImage(i,n)}onRemoveSlide(t,e,i){i.panzoom&&i.panzoom.destroy(),i.panzoom=void 0,i.imageEl=void 0}onChange(t,e,i,n){S(this.instance.container,yt);for(const t of e.slides){const e=t.panzoom;e&&t.index!==i&&e.reset(.35)}}onClose(){var t;const e=this.instance,i=e.container,n=e.getSlide();if(!i||!i.parentElement||!n)return;const{el:s,contentEl:o,panzoom:a,thumbElSrc:r}=n;if(!s||!r||!o||!a||a.isContentLoading||a.state===m.Init||a.state===m.Destroy)return;a.updateMetrics();let l=this.getZoomInfo(n);if(!l)return;this.instance.state=rt.CustomClosing,i.classList.remove(yt),i.classList.add("is-zooming-out"),o.style.backgroundImage=`url(\'${r}\')`;const c=i.getBoundingClientRect();
11===((null===(t=window.visualViewport)||void 0===t?void 0:t.scale)||1)&&Object.assign(i.style,{position:"absolute",top:`${i.offsetTop+window.scrollY}px`,left:`${i.offsetLeft+window.scrollX}px`,bottom:"auto",right:"auto",width:`${c.width}px`,height:`${c.height}px`,overflow:"hidden"});const{x:h,y:d,scale:u,opacity:p}=l;if(p){const t=((t,e,i,n)=>{const s=e-t,o=n-i;return e=>i+((e-t)/s*o||0)})(a.scale,u,1,0);a.on("afterTransform",(()=>{o.style.opacity=t(a.scale)+""}))}a.on("endAnimation",(()=>{e.destroy()})),a.target.a=u,a.target.b=0,a.target.c=0,a.target.d=u,a.panTo({x:h,y:d,scale:u,friction:p?.2:.33,ignoreBounds:!0}),a.isResting&&e.destroy()}setImage(t,e){const i=this.instance;t.src=e,this.process(t,e).then((e=>{const{contentEl:n,imageEl:s,thumbElSrc:o,el:a}=t;if(i.isClosing()||!n||!s)return;n.offsetHeight;const r=!!i.isOpeningSlide(t)&&this.getZoomInfo(t);if(this.option("protected")&&a){a.addEventListener("contextmenu",(t=>{t.preventDefault()}));const t=document.createElement("div");P(t,"fancybox-protected"),n.appendChild(t)}if(o&&r){const s=e.contentRect,a=Math.max(s.fullWidth,s.fullHeight);let c=null;!r.opacity&&a>1200&&(c=document.createElement("img"),P(c,"fancybox-ghost"),c.src=o,n.appendChild(c));const h=()=>{c&&(P(c,"f-fadeFastOut"),setTimeout((()=>{c&&(c.remove(),c=null)}),200))};(l=o,new Promise(((t,e)=>{const i=new Image;i.onload=t,i.onerror=e,i.src=l}))).then((()=>{i.hideLoading(t),t.state=lt.Opening,this.instance.emit("reveal",t),this.zoomIn(t).then((()=>{h(),this.instance.done(t)}),(()=>{})),c&&setTimeout((()=>{h()}),a>2500?800:200)}),(()=>{i.hideLoading(t),i.revealContent(t)}))}else{const n=this.optionFor(t,"initialSize"),s=this.optionFor(t,"zoom"),o={event:i.prevMouseMoveEvent||i.options.event,friction:s?.12:0};let a=i.optionFor(t,"showClass")||void 0,r=!0;i.isOpeningSlide(t)&&("full"===n?e.zoomToFull(o):"cover"===n?e.zoomToCover(o):"max"===n?e.zoomToMax(o):r=!1,e.stop("current")),r&&a&&(a=e.isDragging?"f-fadeIn":""),i.hideLoading(t),i.revealContent(t,a)}var l}),(()=>{i.setError(t,"{{IMAGE_ERROR}}")}))}process(t,e){return new Promise(((i,s)=>{var o;const a=this.instance,r=t.el;a.clearContent(t),a.showLoading(t);let l=this.optionFor(t,"content");if("string"==typeof l&&(l=n(l)),!l||!E(l)){if(l=document.createElement("img"),l instanceof HTMLImageElement){let i="",n=t.caption;i="string"==typeof n&&n?n.replace(/<[^>]+>/gi,"").substring(0,1e3):`Image ${t.index+1} of ${(null===(o=a.carousel)||void 0===o?void 0:o.pages.length)||1}`,l.src=e||"",l.alt=i,l.draggable=!1,t.srcset&&l.setAttribute("srcset",t.srcset),this.instance.isOpeningSlide(t)&&(l.fetchPriority="high")}t.sizes&&l.setAttribute("sizes",t.sizes)}P(l,"fancybox-image"),t.imageEl=l,a.setContent(t,l,!1);t.panzoom=new I(r,u({transformParent:!0},this.option("Panzoom")||{},{content:l,width:(e,i)=>a.optionFor(t,"width","auto",i)||"auto",height:(e,i)=>a.optionFor(t,"height","auto",i)||"auto",wheel:()=>{const t=a.option("wheel");return("zoom"===t||"pan"==t)&&t},click:(e,i)=>{var n,s;if(a.isCompact||a.isClosing())return!1;if(t.index!==(null===(n=a.getSlide())||void 0===n?void 0:n.index))return!1;if(i){const t=i.composedPath()[0];if(["A","BUTTON","TEXTAREA","OPTION","INPUT","SELECT","VIDEO"].includes(t.nodeName))return!1}let o=!i||i.target&&(null===(s=t.contentEl)||void 0===s?void 0:s.contains(i.target));return a.option(o?"contentClick":"backdropClick")||!1},dblClick:()=>a.isCompact?"toggleZoom":a.option("contentDblClick")||!1,spinner:!1,panOnlyZoomed:!0,wheelLimit:1/0,on:{ready:t=>{i(t)},error:()=>{s()},destroy:()=>{s()}}}))}))}zoomIn(t){return new Promise(((e,i)=>{const n=this.instance,s=n.container,{panzoom:o,contentEl:a,el:r}=t;o&&o.updateMetrics();const l=this.getZoomInfo(t);if(!(l&&r&&a&&o&&s))return void i();const{x:c,y:h,scale:d,opacity:u}=l,p=()=>{t.state!==lt.Closing&&(u&&(a.style.opacity=Math.max(Math.min(1,1-(1-o.scale)/(1-d)),0)+""),o.scale>=1&&o.scale>o.targetScale-.1&&e(o))},f=t=>{(t.scale<.99||t.scale>1.01)&&!t.isDragging||(S(s,yt),a.style.opacity="",t.off("endAnimation",f),t.off("touchStart",f),t.off("afterTransform",p),e(t))};o.on("endAnimation",f),o.on("touchStart",f),o.on("afterTransform",p),o.on(["error","destroy"],(()=>{i()})),o.panTo({x:c,y:h,scale:d,friction:0,ignoreBounds:!0}),o.stop("current");
1const g={event:"mousemove"===o.panMode?n.prevMouseMoveEvent||n.options.event:void 0},m=this.optionFor(t,"initialSize");P(s,yt),n.hideLoading(t),"full"===m?o.zoomToFull(g):"cover"===m?o.zoomToCover(g):"max"===m?o.zoomToMax(g):o.reset(.172)}))}getZoomInfo(t){const{el:e,imageEl:i,thumbEl:n,panzoom:s}=t,o=this.instance,a=o.container;if(!e||!i||!n||!s||tt(n)<3||!this.optionFor(t,"zoom")||!a||o.state===rt.Destroy)return!1;if("0"===getComputedStyle(a).getPropertyValue("--f-images-zoom"))return!1;const r=window.visualViewport||null;if(1!==(r?r.scale:1))return!1;let{top:l,left:c,width:h,height:d}=n.getBoundingClientRect(),{top:u,left:p,fitWidth:f,fitHeight:g}=s.contentRect;if(!(h&&d&&f&&g))return!1;const m=s.container.getBoundingClientRect();p+=m.left,u+=m.top;const v=-1*(p+.5*f-(c+.5*h)),b=-1*(u+.5*g-(l+.5*d)),y=h/f;let w=this.option("zoomOpacity")||!1;return"auto"===w&&(w=Math.abs(h/d-f/g)>.1),{x:v,y:b,scale:y,opacity:w}}attach(){const t=this,e=t.instance;e.on("Carousel.change",t.onChange),e.on("Carousel.createSlide",t.onCreateSlide),e.on("Carousel.removeSlide",t.onRemoveSlide),e.on("close",t.onClose)}detach(){const t=this,e=t.instance;e.off("Carousel.change",t.onChange),e.off("Carousel.createSlide",t.onCreateSlide),e.off("Carousel.removeSlide",t.onRemoveSlide),e.off("close",t.onClose)}}Object.defineProperty(wt,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{initialSize:"fit",Panzoom:{maxScale:1},protected:!1,zoom:!0,zoomOpacity:"auto"}}),"function"==typeof SuppressedError&&SuppressedError;const xt="html",Et="image",St="map",Pt="youtube",Ct="vimeo",Tt="html5video",Mt=(t,e={})=>{const i=new URL(t),n=new URLSearchParams(i.search),s=new URLSearchParams;for(const[t,i]of[...n,...Object.entries(e)]){let e=i+"";if("t"===t){let t=e.match(/((\\d*)m)?(\\d*)s?/);t&&s.set("start",60*parseInt(t[2]||"0")+parseInt(t[3]||"0")+"")}else s.set(t,e)}let o=s+"",a=t.match(/#t=((.*)?\\d+s)/);return a&&(o+=`#t=${a[1]}`),o},Ot={ajax:null,autoSize:!0,iframeAttr:{allow:"autoplay; fullscreen",scrolling:"auto"},preload:!0,videoAutoplay:!0,videoRatio:16/9,videoTpl:\'<video class="fancybox__html5video" playsinline controls controlsList="nodownload" poster="{{poster}}">\\n <source src="{{src}}" type="{{format}}" />Sorry, your browser doesn\\\'t support embedded videos.</video>\',videoFormat:"",vimeo:{byline:1,color:"00adef",controls:1,dnt:1,muted:0},youtube:{controls:1,enablejsapi:1,nocookie:1,rel:0,fs:1}},At=["image","html","ajax","inline","clone","iframe","map","pdf","html5video","youtube","vimeo"];class Lt extends _{onBeforeInitSlide(t,e,i){this.processType(i)}onCreateSlide(t,e,i){this.setContent(i)}onClearContent(t,e){e.xhr&&(e.xhr.abort(),e.xhr=null);const i=e.iframeEl;i&&(i.onload=i.onerror=null,i.src="//about:blank",e.iframeEl=null);const n=e.contentEl,s=e.placeholderEl;if("inline"===e.type&&n&&s)n.classList.remove("fancybox__content"),"none"!==getComputedStyle(n).getPropertyValue("display")&&(n.style.display="none"),setTimeout((()=>{s&&(n&&s.parentNode&&s.parentNode.insertBefore(n,s),s.remove())}),0),e.contentEl=void 0,e.placeholderEl=void 0;else for(;e.el&&e.el.firstChild;)e.el.removeChild(e.el.firstChild)}onSelectSlide(t,e,i){i.state===lt.Ready&&this.playVideo()}onUnselectSlide(t,e,i){var n,s;if(i.type===Tt){try{null===(s=null===(n=i.el)||void 0===n?void 0:n.querySelector("video"))||void 0===s||s.pause()}catch(t){}return}let o;i.type===Ct?o={method:"pause",value:"true"}:i.type===Pt&&(o={event:"command",func:"pauseVideo"}),o&&i.iframeEl&&i.iframeEl.contentWindow&&i.iframeEl.contentWindow.postMessage(JSON.stringify(o),"*"),i.poller&&clearTimeout(i.poller)}onDone(t,e){t.isCurrentSlide(e)&&!t.isClosing()&&this.playVideo()}onRefresh(t,e){e.slides.forEach((t=>{t.el&&(this.resizeIframe(t),this.setAspectRatio(t))}))}onMessage(t){try{let e=JSON.parse(t.data);if("https://player.vimeo.com"===t.origin){if("ready"===e.event)for(let e of Array.from(document.getElementsByClassName("fancybox__iframe")))e instanceof HTMLIFrameElement&&e.contentWindow===t.source&&(e.dataset.ready="true")}else if(t.origin.match(/^https:\\/\\/(www.)?youtube(-nocookie)?.com$/)&&"onReady"===e.event){const t=document.getElementById(e.id);t&&(t.dataset.ready="true")}}catch(t){}}loadAjaxContent(t){const e=this.instance.optionFor(t,"src")||"";this.instance.showLoading(t);const i=this.instance,n=new XMLHttpRequest;i.showLoading(t),n.onreadystatechange=function(){n.readyState===XMLHttpRequest.DONE&&i.state===rt.Ready&&(i.hideLoading(t),200===n.status?i.setContent(t,n.responseText):i.setError(t,404===n.status?"{{AJAX_NOT_FOUND}}":"{{AJAX_FORBIDDEN}}"))};const s=t.ajax||null;n.open(s?"POST":"GET",e+""),n.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),n.setRequestHeader("X-Requested-With","XMLHttpRequest"),n.send(s),t.xhr=n}setInlineContent(t){let e=null;if(E(t.src))e=t.src;else if("string"==typeof t.src){const i=t.src.split("#",2).pop();e=i?document.getElementById(i):null}if(e){if("clone"===t.type||e.closest(".fancybox__slide")){e=e.cloneNode(!0);const i=e.dataset.animationName;i&&(e.classList.remove(i),delete e.dataset.animationName);let n=e.getAttribute("id");n=n?`${n}--clone`:`clone-${this.instance.id}-${t.index}`,e.setAttribute("id",n)}else if(e.parentNode){const i=document.createElement("div");i.classList.add("fancybox-placeholder"),e.parentNode.insertBefore(i,e),t.placeholderEl=i}this.instance.setContent(t,e)}else this.instance.setError(t,"{{ELEMENT_NOT_FOUND}}")}setIframeContent(t){const{src:e,el:i}=t;if(!e||"string"!=typeof e||!i)return;i.classList.add("is-loading");const n=this.instance,s=document.createElement("iframe");s.className="fancybox__iframe",s.setAttribute("id",`fancybox__iframe_${n.id}_${t.index}`);for(const[e,i]of Object.entries(this.optionFor(t,"iframeAttr")||{}))s.setAttribute(e,i);s.onerror=()=>{n.setError(t,"{{IFRAME_ERROR}}")},t.iframeEl=s;const o=this.optionFor(t,"preload");if("iframe"!==t.type||!1===o)return s.setAttribute("src",t.src+""),n.setContent(t,s,!1),this.resizeIframe(t),void n.revealContent(t);n.showLoading(t),s.onload=()=>
1{if(!s.src.length)return;const e="true"!==s.dataset.ready;s.dataset.ready="true",this.resizeIframe(t),e?n.revealContent(t):n.hideLoading(t)},s.setAttribute("src",e),n.setContent(t,s,!1)}resizeIframe(t){const{type:e,iframeEl:i}=t;if(e===Pt||e===Ct)return;const n=null==i?void 0:i.parentElement;if(!i||!n)return;let s=t.autoSize;void 0===s&&(s=this.optionFor(t,"autoSize"));let o=t.width||0,a=t.height||0;o&&a&&(s=!1);const r=n&&n.style;if(!1!==t.preload&&!1!==s&&r)try{const t=window.getComputedStyle(n),e=parseFloat(t.paddingLeft)+parseFloat(t.paddingRight),s=parseFloat(t.paddingTop)+parseFloat(t.paddingBottom),l=i.contentWindow;if(l){const t=l.document,i=t.getElementsByTagName(xt)[0],n=t.body;r.width="",n.style.overflow="hidden",o=o||i.scrollWidth+e,r.width=`${o}px`,n.style.overflow="",r.flex="0 0 auto",r.height=`${n.scrollHeight}px`,a=i.scrollHeight+s}}catch(t){}if(o||a){const t={flex:"0 1 auto",width:"",height:""};o&&"auto"!==o&&(t.width=`${o}px`),a&&"auto"!==a&&(t.height=`${a}px`),Object.assign(r,t)}}playVideo(){const t=this.instance.getSlide();if(!t)return;const{el:e}=t;if(!e||!e.offsetParent)return;if(!this.optionFor(t,"videoAutoplay"))return;if(t.type===Tt)try{const t=e.querySelector("video");if(t){const e=t.play();void 0!==e&&e.then((()=>{})).catch((e=>{t.muted=!0,t.play()}))}}catch(t){}if(t.type!==Pt&&t.type!==Ct)return;const i=()=>{if(t.iframeEl&&t.iframeEl.contentWindow){let e;if("true"===t.iframeEl.dataset.ready)return e=t.type===Pt?{event:"command",func:"playVideo"}:{method:"play",value:"true"},e&&t.iframeEl.contentWindow.postMessage(JSON.stringify(e),"*"),void(t.poller=void 0);t.type===Pt&&(e={event:"listening",id:t.iframeEl.getAttribute("id")},t.iframeEl.contentWindow.postMessage(JSON.stringify(e),"*"))}t.poller=setTimeout(i,250)};i()}processType(t){if(t.html)return t.type=xt,t.src=t.html,void(t.html="");const e=this.instance.optionFor(t,"src","");if(!e||"string"!=typeof e)return;let i=t.type,n=null;if(n=e.match(/(youtube\\.com|youtu\\.be|youtube\\-nocookie\\.com)\\/(?:watch\\?(?:.*&)?v=|v\\/|u\\/|shorts\\/|embed\\/?)?(videoseries\\?list=(?:.*)|[\\w-]{11}|\\?listType=(?:.*)&list=(?:.*))(?:.*)/i)){const s=this.optionFor(t,Pt),{nocookie:o}=s,a=function(t,e){var i={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(i[n]=t[n]);if(null!=t&&"function"==typeof Object.getOwnPropertySymbols){var s=0;for(n=Object.getOwnPropertySymbols(t);s<n.length;s++)e.indexOf(n[s])<0&&Object.prototype.propertyIsEnumerable.call(t,n[s])&&(i[n[s]]=t[n[s]])}return i}(s,["nocookie"]),r=`www.youtube${o?"-nocookie":""}.com`,l=Mt(e,a),c=encodeURIComponent(n[2]);t.videoId=c,t.src=`https://${r}/embed/${c}?${l}`,t.thumbSrc=t.thumbSrc||`https://i.ytimg.com/vi/${c}/mqdefault.jpg`,i=Pt}else if(n=e.match(/^.+vimeo.com\\/(?:\\/)?([\\d]+)((\\/|\\?h=)([a-z0-9]+))?(.*)?/)){const s=Mt(e,this.optionFor(t,Ct)),o=encodeURIComponent(n[1]),a=n[4]||"";t.videoId=o,t.src=`https://player.vimeo.com/video/${o}?${a?`h=${a}${s?"&":""}`:""}${s}`,i=Ct}if(!i&&t.triggerEl){const e=t.triggerEl.dataset.type;At.includes(e)&&(i=e)}i||"string"==typeof e&&("#"===e.charAt(0)?i="inline":(n=e.match(/\\.(mp4|mov|ogv|webm)((\\?|#).*)?$/i))?(i=Tt,t.videoFormat=t.videoFormat||"video/"+("ogv"===n[1]?"ogg":n[1])):e.match(/(^data:image\\/[a-z0-9+\\/=]*,)|(\\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\\?|#).*)?$)/i)?i=Et:e.match(/\\.(pdf)((\\?|#).*)?$/i)&&(i="pdf")),(n=e.match(/(?:maps\\.)?google\\.([a-z]{2,3}(?:\\.[a-z]{2})?)\\/(?:(?:(?:maps\\/(?:place\\/(?:.*)\\/)?\\@(.*),(\\d+.?\\d+?)z))|(?:\\?ll=))(.*)?/i))?(t.src=`https://maps.google.${n[1]}/?ll=${(n[2]?n[2]+"&z="+Math.floor(parseFloat(n[3]))+(n[4]?n[4].replace(/^\\//,"&"):""):n[4]+"").replace(/\\?/,"&")}&output=${n[4]&&n[4].indexOf("layer=c")>0?"svembed":"embed"}`,i=St):(n=e.match(/(?:maps\\.)?google\\.([a-z]{2,3}(?:\\.[a-z]{2})?)\\/(?:maps\\/search\\/)(.*)/i))&&(t.src=`https://maps.google.${n[1]}/maps?q=${n[2].replace("query=","q=").replace("api=1","")}&output=embed`,i=St),i=i||this.instance.option("defaultType"),t.type=i,i===Et&&(t.thumbSrc=t.thumbSrc||t.src)}setContent(t){const e=this.instance.optionFor(t,"src")||"";if(t&&t.type&&e){switch(t.type){case xt:this.instance.setContent(t,e);break;case Tt:const i=this.option("videoTpl");i&&this.instance.setContent(t,i.replace(/\\{\\{src\\}\\}/gi,e+"").replace(/\\{\\{format\\}\\}/gi,this.optionFor(t,"videoFormat")||"").replace(/\\{\\{poster\\}\\}/gi,t.poster||t.thumbSrc||""));break;case"inline":case"clone":this.setInlineContent(t);break;case"ajax":this.loadAjaxContent(t);break;case"pdf":case St:case Pt:case Ct:t.preload=!1;case"iframe":this.setIframeContent(t)}this.setAspectRatio(t)}}setAspectRatio(t){const e=t.contentEl;if(!(t.el&&e&&t.type&&[Pt,Ct,Tt].includes(t.type)))return;let i,n=t.width||"auto",s=t.height||"auto";if("auto"===n||"auto"===s){i=this.optionFor(t,"videoRatio");
1const e=(i+"").match(/(\\d+)\\s*\\/\\s?(\\d+)/);i=e&&e.length>2?parseFloat(e[1])/parseFloat(e[2]):parseFloat(i+"")}else n&&s&&(i=n/s);if(!i)return;e.style.aspectRatio="",e.style.width="",e.style.height="",e.offsetHeight;const o=e.getBoundingClientRect(),a=o.width||1,r=o.height||1;e.style.aspectRatio=i+"",i<a/r?(s="auto"===s?r:Math.min(r,s),e.style.width="auto",e.style.height=`${s}px`):(n="auto"===n?a:Math.min(a,n),e.style.width=`${n}px`,e.style.height="auto")}attach(){const t=this,e=t.instance;e.on("Carousel.beforeInitSlide",t.onBeforeInitSlide),e.on("Carousel.createSlide",t.onCreateSlide),e.on("Carousel.selectSlide",t.onSelectSlide),e.on("Carousel.unselectSlide",t.onUnselectSlide),e.on("Carousel.Panzoom.refresh",t.onRefresh),e.on("done",t.onDone),e.on("clearContent",t.onClearContent),window.addEventListener("message",t.onMessage)}detach(){const t=this,e=t.instance;e.off("Carousel.beforeInitSlide",t.onBeforeInitSlide),e.off("Carousel.createSlide",t.onCreateSlide),e.off("Carousel.selectSlide",t.onSelectSlide),e.off("Carousel.unselectSlide",t.onUnselectSlide),e.off("Carousel.Panzoom.refresh",t.onRefresh),e.off("done",t.onDone),e.off("clearContent",t.onClearContent),window.removeEventListener("message",t.onMessage)}}Object.defineProperty(Lt,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:Ot});const zt="play",Rt="pause",kt="ready";class It extends _{constructor(){super(...arguments),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:kt}),Object.defineProperty(this,"inHover",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"timer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"progressBar",{enumerable:!0,configurable:!0,writable:!0,value:null})}get isActive(){return this.state!==kt}onReady(t){this.option("autoStart")&&(t.isInfinite||t.page<t.pages.length-1)&&this.start()}onChange(){this.removeProgressBar(),this.pause()}onSettle(){this.resume()}onVisibilityChange(){"visible"===document.visibilityState?this.resume():this.pause()}onMouseEnter(){this.inHover=!0,this.pause()}onMouseLeave(){var t;this.inHover=!1,(null===(t=this.instance.panzoom)||void 0===t?void 0:t.isResting)&&this.resume()}onTimerEnd(){const t=this.instance;"play"===this.state&&(t.isInfinite||t.page!==t.pages.length-1?t.slideNext():t.slideTo(0))}removeProgressBar(){this.progressBar&&(this.progressBar.remove(),this.progressBar=null)}createProgressBar(){var t;if(!this.option("showProgress"))return null;this.removeProgressBar();const e=this.instance,i=(null===(t=e.pages[e.page])||void 0===t?void 0:t.slides)||[];let n=this.option("progressParentEl");if(n||(n=(1===i.length?i[0].el:null)||e.viewport),!n)return null;const s=document.createElement("div");return P(s,"f-progress"),n.prepend(s),this.progressBar=s,s.offsetHeight,s}set(){const t=this,e=t.instance;if(e.pages.length<2)return;if(t.timer)return;const i=t.option("timeout");t.state=zt,P(e.container,"has-autoplay");let n=t.createProgressBar();n&&(n.style.transitionDuration=`${i}ms`,n.style.transform="scaleX(1)"),t.timer=setTimeout((()=>{t.timer=null,t.inHover||t.onTimerEnd()}),i),t.emit("set")}clear(){const t=this;t.timer&&(clearTimeout(t.timer),t.timer=null),t.removeProgressBar()}start(){const t=this;if(t.set(),t.state!==kt){if(t.option("pauseOnHover")){const e=t.instance.container;e.addEventListener("mouseenter",t.onMouseEnter,!1),e.addEventListener("mouseleave",t.onMouseLeave,!1)}document.addEventListener("visibilitychange",t.onVisibilityChange,!1),t.emit("start")}}stop(){const t=this,e=t.state,i=t.instance.container;t.clear(),t.state=kt,i.removeEventListener("mouseenter",t.onMouseEnter,!1),i.removeEventListener("mouseleave",t.onMouseLeave,!1),document.removeEventListener("visibilitychange",t.onVisibilityChange,!1),S(i,"has-autoplay"),e!==kt&&t.emit("stop")}pause(){const t=this;t.state===zt&&(t.state=Rt,t.clear(),t.emit(Rt))}resume(){const t=this,e=t.instance;if(e.isInfinite||e.page!==e.pages.length-1)if(t.state!==zt){if(t.state===Rt&&!t.inHover){const e=new Event("resume",{bubbles:!0,cancelable:!0});t.emit("resume",e),e.defaultPrevented||t.set()}}else t.set();else t.stop()}toggle(){this.state===zt||this.state===Rt?this.stop():this.start()}attach(){const t=this,e=t.instance;
1e.on("ready",t.onReady),e.on("Panzoom.startAnimation",t.onChange),e.on("Panzoom.endAnimation",t.onSettle),e.on("Panzoom.touchMove",t.onChange)}detach(){const t=this,e=t.instance;e.off("ready",t.onReady),e.off("Panzoom.startAnimation",t.onChange),e.off("Panzoom.endAnimation",t.onSettle),e.off("Panzoom.touchMove",t.onChange),t.stop()}}Object.defineProperty(It,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{autoStart:!0,pauseOnHover:!0,progressParentEl:null,showProgress:!0,timeout:3e3}});class Dt extends _{constructor(){super(...arguments),Object.defineProperty(this,"ref",{enumerable:!0,configurable:!0,writable:!0,value:null})}onPrepare(t){const e=t.carousel;if(!e)return;const i=t.container;i&&(e.options.Autoplay=u({autoStart:!1},this.option("Autoplay")||{},{pauseOnHover:!1,timeout:this.option("timeout"),progressParentEl:()=>this.option("progressParentEl")||null,on:{start:()=>{t.emit("startSlideshow")},set:e=>{var n;i.classList.add("has-slideshow"),(null===(n=t.getSlide())||void 0===n?void 0:n.state)!==lt.Ready&&e.pause()},stop:()=>{i.classList.remove("has-slideshow"),t.isCompact||t.endIdle(),t.emit("endSlideshow")},resume:(e,i)=>{var n,s,o;!i||!i.cancelable||(null===(n=t.getSlide())||void 0===n?void 0:n.state)===lt.Ready&&(null===(o=null===(s=t.carousel)||void 0===s?void 0:s.panzoom)||void 0===o?void 0:o.isResting)||i.preventDefault()}}}),e.attachPlugins({Autoplay:It}),this.ref=e.plugins.Autoplay)}onReady(t){const e=t.carousel,i=this.ref;i&&e&&this.option("playOnStart")&&(e.isInfinite||e.page<e.pages.length-1)&&i.start()}onDone(t,e){const i=this.ref,n=t.carousel;if(!i||!n)return;const s=e.panzoom;s&&s.on("startAnimation",(()=>{t.isCurrentSlide(e)&&i.stop()})),t.isCurrentSlide(e)&&i.resume()}onKeydown(t,e){var i;const n=this.ref;n&&e===this.option("key")&&"BUTTON"!==(null===(i=document.activeElement)||void 0===i?void 0:i.nodeName)&&n.toggle()}attach(){const t=this,e=t.instance;e.on("Carousel.init",t.onPrepare),e.on("Carousel.ready",t.onReady),e.on("done",t.onDone),e.on("keydown",t.onKeydown)}detach(){const t=this,e=t.instance;e.off("Carousel.init",t.onPrepare),e.off("Carousel.ready",t.onReady),e.off("done",t.onDone),e.off("keydown",t.onKeydown)}}Object.defineProperty(Dt,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:{key:" ",playOnStart:!1,progressParentEl:t=>{var e;return(null===(e=t.instance.container)||void 0===e?void 0:e.querySelector(".fancybox__toolbar [data-fancybox-toggle-slideshow]"))||t.instance.container},timeout:3e3}});const Ft={classes:{container:"f-thumbs f-carousel__thumbs",viewport:"f-thumbs__viewport",track:"f-thumbs__track",slide:"f-thumbs__slide",isResting:"is-resting",isSelected:"is-selected",isLoading:"is-loading",hasThumbs:"has-thumbs"},minCount:2,parentEl:null,thumbTpl:\'<button class="f-thumbs__slide__button" tabindex="0" type="button" aria-label="{{GOTO}}" data-carousel-index="%i"><img class="f-thumbs__slide__img" data-lazy-src="{{%s}}" alt="" /></button>\',type:"modern"};var jt;!function(t){t[t.Init=0]="Init",t[t.Ready=1]="Ready",t[t.Hidden=2]="Hidden"}(jt||(jt={}));const Bt="isResting",Ht="thumbWidth",Nt="thumbHeight",_t="thumbClipWidth";let $t=class extends _{constructor(){super(...arguments),Object.defineProperty(this,"type",{enumerable:!0,configurable:!0,writable:!0,value:"modern"}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"track",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"carousel",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"thumbWidth",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbClipWidth",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbHeight",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbGap",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"thumbExtraGap",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:jt.Init})}get isModern(){return"modern"===this.type}onInitSlide(t,e){const i=e.el?e.el.dataset:void 0;i&&(e.thumbSrc=i.thumbSrc||e.thumbSrc||"",e[_t]=parseFloat(i[_t]||"")||e[_t]||0,e[Nt]=parseFloat(i.thumbHe
1ight||"")||e[Nt]||0),this.addSlide(e)}onInitSlides(){this.build()}onChange(){var t;if(!this.isModern)return;const e=this.container,i=this.instance,n=i.panzoom,s=this.carousel,a=s?s.panzoom:null,r=i.page;if(n&&s&&a){if(n.isDragging){S(e,this.cn(Bt));let n=(null===(t=s.pages[r])||void 0===t?void 0:t.pos)||0;n+=i.getProgress(r)*(this[_t]+this.thumbGap);let o=a.getBounds();-1*n>o.x.min&&-1*n<o.x.max&&a.panTo({x:-1*n,friction:.12})}else o(e,this.cn(Bt),n.isResting);this.shiftModern()}}onRefresh(){this.updateProps();for(const t of this.instance.slides||[])this.resizeModernSlide(t);this.shiftModern()}isDisabled(){const t=this.option("minCount")||0;if(t){const e=this.instance;let i=0;for(const t of e.slides||[])t.thumbSrc&&i++;if(i<t)return!0}const e=this.option("type");return["modern","classic"].indexOf(e)<0}getThumb(t){const e=this.option("thumbTpl")||"";return{html:this.instance.localize(e,[["%i",t.index],["%d",t.index+1],["%s",t.thumbSrc||"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"]])}}addSlide(t){const e=this.carousel;e&&e.addSlide(t.index,this.getThumb(t))}getSlides(){const t=[];for(const e of this.instance.slides||[])t.push(this.getThumb(e));return t}resizeModernSlide(t){this.isModern&&(t[Ht]=t[_t]&&t[Nt]?Math.round(this[Nt]*(t[_t]/t[Nt])):this[Ht])}updateProps(){const t=this.container;if(!t)return;const e=e=>parseFloat(getComputedStyle(t).getPropertyValue("--f-thumb-"+e))||0;this.thumbGap=e("gap"),this.thumbExtraGap=e("extra-gap"),this[Ht]=e("width")||40,this[_t]=e("clip-width")||40,this[Nt]=e("height")||40}build(){const t=this;if(t.state!==jt.Init)return;if(t.isDisabled())return void t.emit("disabled");const e=t.instance,i=e.container,n=t.getSlides(),s=t.option("type");t.type=s;const o=t.option("parentEl"),a=t.cn("container"),r=t.cn("track");let l=null==o?void 0:o.querySelector("."+a);l||(l=document.createElement("div"),P(l,a),o?o.appendChild(l):i.after(l)),P(l,`is-${s}`),P(i,t.cn("hasThumbs")),t.container=l,t.updateProps();let c=l.querySelector("."+r);c||(c=document.createElement("div"),P(c,t.cn("track")),l.appendChild(c)),t.track=c;const h=u({},{track:c,infinite:!1,center:!0,fill:"classic"===s,dragFree:!0,slidesPerPage:1,transition:!1,preload:.25,friction:.12,Panzoom:{maxVelocity:0},Dots:!1,Navigation:!1,classes:{container:"f-thumbs",viewport:"f-thumbs__viewport",track:"f-thumbs__track",slide:"f-thumbs__slide"}},t.option("Carousel")||{},{Sync:{target:e},slides:n}),d=new e.constructor(l,h);d.on("createSlide",((e,i)=>{t.setProps(i.index),t.emit("createSlide",i,i.el)})),d.on("ready",(()=>{t.shiftModern(),t.emit("ready")})),d.on("refresh",(()=>{t.shiftModern()})),d.on("Panzoom.click",((e,i,n)=>{t.onClick(n)})),t.carousel=d,t.state=jt.Ready}onClick(t){t.preventDefault(),t.stopPropagation();const e=this.instance,{pages:i,page:n}=e,s=t=>{if(t){const e=t.closest("[data-carousel-index]");if(e)return[parseInt(e.dataset.carouselIndex||"",10)||0,e]}return[-1,void 0]},o=(t,e)=>{const i=document.elementFromPoint(t,e);return i?s(i):[-1,void 0]};let[a,r]=s(t.target);if(a>-1)return;const l=this[_t],c=t.clientX,h=t.clientY;let[d,u]=o(c-l,h),[p,f]=o(c+l,h);u&&f?(a=Math.abs(c-u.getBoundingClientRect().right)<Math.abs(c-f.getBoundingClientRect().left)?d:p,a===n&&(a=a===d?p:d)):u?a=d:f&&(a=p),a>-1&&i[a]&&e.slideTo(a)}getShift(t){var e;const i=this,{instance:n}=i,s=i.carousel;if(!n||!s)return 0;const o=i[Ht],a=i[_t],r=i.thumbGap,l=i.thumbExtraGap;if(!(null===(e=s.slides[t])||void 0===e?void 0:e.el))return 0;const c=.5*(o-a),h=n.pages.length-1;let d=n.getProgress(0),u=n.getProgress(h),p=n.getProgress(t,!1,!0),f=0,g=c+l+r;const m=d<0&&d>-1,v=u>0&&u<1;return 0===t?(f=g*Math.abs(d),v&&1===d&&(f-=g*Math.abs(u))):t===h?(f=g*Math.abs(u)*-1,m&&-1===u&&(f+=g*Math.abs(d))):m||v?(f=-1*g,f+=g*Math.abs(d),f+=g*(1-Math.abs(u))):f=g*p,f}setProps(e){var i;const n=this;if(!n.isModern)return;const{instance:s}=n,o=n.carousel;if(s&&o){const a=null===(i=o.slides[e])||void 0===i?void 0:i.el;if(a&&a.childNodes.length){let i=t(1-Math.abs(s.getProgress(e))),o=t(n.getShift(e));a.style.setProperty("--progress",i?i+"":""),a.style.setProperty("--shift",o+"")}}}shiftModern(){const t=this;if(!t.isModern)return;const{instance:e,track:i}=t,n=e.panzoom,s=t.carousel;if(!(e&&i&&n&&s))return;if(n.state===m.Init||n.state===m.Destroy)return;for(const i of e.slides)t.setProps(i.index);let o=(t[_t]+t.thumbGap)*(s.slides.length||0);i.style.setProperty("--width",o+"")}cleanup(){const t=this;t.carousel&&t.carousel.destroy(),t.carousel=null,t.container&&t.container.remove(),t.container=null,t.track&&t.track.remove(),t.track=null,t.state=jt.Init,S(t.instance.container,t.cn("hasThumbs"))}attach(){const t=this,e=t.instance;e.on("initSlide",t.onInitSlide),e.state===B.Init?e.on("initSlides",t.onInitSlides):t.onInitSlides(),e.on(["change","Panzoom.afterTransform"],t.onChange),e.on("Panzoom.refresh",t.onRefresh)}detach(){const t=this,e=t.instance;e.off("initSlide",t.onInitSlide),e.off("initSlides",t.onInitSlides),e.off(["change","Panzoom.afterTransform"],t.onChange),e.off("Panzoom.refresh",t.onRefresh),t.cleanup()}};Object.defineProperty($t,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:Ft});const Wt=Object.assign(Object.assign({},Ft),{key:"t",showOnStart:!0,parentEl:null}),Xt="is-masked",qt="aria-hidden";class Yt extends _{constructor(){super(...arguments),Object.defineProperty(this,"ref",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"hidden",{enumerable:!0,configurable:!0,writable:!0,value:!1})}get isEnabled(){const t=this.ref;return t&&!t.isDisabled()}get isHidden(){return this.hidden}onClick(t,e){e.stopPropagation()}onCreateSlide(t,e){var i,n,s;const o=(null===(s=null===(n=null===(i=this.instance)||void 0===i?void 0:i.carousel)||void 0===n?void 0:n.slides[e.index])||void 0===s?void 0:s.type)||"",a=e.el;if(a&&o){let t=`for-${o}`;["video","youtube","vimeo","html5video"].includes(o)&&(t+=" for-video"),P(a,t)}}onInit(){var t;const e=this,i=e.instance,n=i.carousel;if(e.ref||!n)return;const s=e.option("parentEl")||i.footer||i.container;if(!s)return;const o=u({},e.options,{parentEl:s,classes:{container:"f-thumbs fancybox__thumbs"},Carousel:{Sync:{friction:i.option("Carousel.friction")||0}},on:{ready:t=>{const i=t.container;i&&this.hidden&&(e.refresh(),i.style.transition="none",e.hide(),i.offsetHeight,queueMicrotask((()=>{i.style.transition="",e.show()})))}}});o.Carousel=o.Carousel||{},o.Carousel.on=u((null===(t=e.options.Carousel)||void 0===t?void 0:t.on)||{},{click:this.onClick,createSlide:this.onCreateSlide}),n.options.Thumbs=o,n.attachPlugins({Thumbs:$t}),e.ref=n.plugins.Thumbs,e.option("showOnStart")||(e.ref.state=jt.Hidden,e.hidden=!0)}onResize(){var t;const e=null===(t=this.ref)||void 0===t?void 0:t.container;e&&(e.style.maxHeight="")}onKeydown(t,e){const i=this.option("key");i&&i===e&&this.toggle()}toggle(){const t=this.ref;if(t&&!t.isDisabled())return t.state===jt.Hidden?(t.state=jt.Init,void t.build()):void(this.hidden?this.show():this.hide())}show(){const t=this.ref;if(!t||t.isDisabled())return;const e=t.container;e&&(this.refresh(),e.offsetHeight,e.removeAttribute(qt),e.classList.remove(Xt),this.hidden=!1)}hide(){const t=this.ref,e=t&&t.container;e&&(this.refresh(),e.offsetHeight,e.classList.add(Xt),e.setAttribute(qt,"true")),this.hidden=!0}refresh(){const t=this.ref;if(!t||!t.state)return;const e=t.container,i=(null==e?void 0:e.firstChild)||null;e&&i&&i.childNodes.length&&(e.style.maxHeight=`${i.getBoundingClientRect().height}px`)}
1attach(){const t=this,e=t.instance;e.state===rt.Init?e.on("Carousel.init",t.onInit):t.onInit(),e.on("resize",t.onResize),e.on("keydown",t.onKeydown)}detach(){var t;const e=this,i=e.instance;i.off("Carousel.init",e.onInit),i.off("resize",e.onResize),i.off("keydown",e.onKeydown),null===(t=i.carousel)||void 0===t||t.detachPlugins(["Thumbs"]),e.ref=null}}Object.defineProperty(Yt,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:Wt});const Vt={panLeft:{icon:\'<svg><path d="M5 12h14M5 12l6 6M5 12l6-6"/></svg>\',change:{panX:-100}},panRight:{icon:\'<svg><path d="M5 12h14M13 18l6-6M13 6l6 6"/></svg>\',change:{panX:100}},panUp:{icon:\'<svg><path d="M12 5v14M18 11l-6-6M6 11l6-6"/></svg>\',change:{panY:-100}},panDown:{icon:\'<svg><path d="M12 5v14M18 13l-6 6M6 13l6 6"/></svg>\',change:{panY:100}},zoomIn:{icon:\'<svg><circle cx="11" cy="11" r="7.5"/><path d="m21 21-4.35-4.35M11 8v6M8 11h6"/></svg>\',action:"zoomIn"},zoomOut:{icon:\'<svg><circle cx="11" cy="11" r="7.5"/><path d="m21 21-4.35-4.35M8 11h6"/></svg>\',action:"zoomOut"},toggle1to1:{icon:\'<svg><path d="M3.51 3.07c5.74.02 11.48-.02 17.22.02 1.37.1 2.34 1.64 2.18 3.13 0 4.08.02 8.16 0 12.23-.1 1.54-1.47 2.64-2.79 2.46-5.61-.01-11.24.02-16.86-.01-1.36-.12-2.33-1.65-2.17-3.14 0-4.07-.02-8.16 0-12.23.1-1.36 1.22-2.48 2.42-2.46Z"/><path d="M5.65 8.54h1.49v6.92m8.94-6.92h1.49v6.92M11.5 9.4v.02m0 5.18v0"/></svg>\',action:"toggleZoom"},toggleZoom:{icon:\'<svg><g><line x1="11" y1="8" x2="11" y2="14"></line></g><circle cx="11" cy="11" r="7.5"/><path d="m21 21-4.35-4.35M8 11h6"/></svg>\',action:"toggleZoom"},iterateZoom:{icon:\'<svg><g><line x1="11" y1="8" x2="11" y2="14"></line></g><circle cx="11" cy="11" r="7.5"/><path d="m21 21-4.35-4.35M8 11h6"/></svg>\',action:"iterateZoom"},rotateCCW:{icon:\'<svg><path d="M15 4.55a8 8 0 0 0-6 14.9M9 15v5H4M18.37 7.16v.01M13 19.94v.01M16.84 18.37v.01M19.37 15.1v.01M19.94 11v.01"/></svg>\',action:"rotateCCW"},rotateCW:{icon:\'<svg><path d="M9 4.55a8 8 0 0 1 6 14.9M15 15v5h5M5.63 7.16v.01M4.06 11v.01M4.63 15.1v.01M7.16 18.37v.01M11 19.94v.01"/></svg>\',action:"rotateCW"},flipX:{icon:\'<svg style="stroke-width: 1.3"><path d="M12 3v18M16 7v10h5L16 7M8 7v10H3L8 7"/></svg>\',action:"flipX"},flipY:{icon:\'<svg style="stroke-width: 1.3"><path d="M3 12h18M7 16h10L7 21v-5M7 8h10L7 3v5"/></svg>\',action:"flipY"},fitX:{icon:\'<svg><path d="M4 12V6a2 2 0 0 1 2-2h12a2 2 0 0 1 2 2v6M10 18H3M21 18h-7M6 15l-3 3 3 3M18 15l3 3-3 3"/></svg>\',action:"fitX"},fitY:{icon:\'<svg><path d="M12 20H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h6M18 14v7M18 3v7M15 18l3 3 3-3M15 6l3-3 3 3"/></svg>\',action:"fitY"},reset:{icon:\'<svg><path d="M20 11A8.1 8.1 0 0 0 4.5 9M4 5v4h4M4 13a8.1 8.1 0 0 0 15.5 2m.5 4v-4h-4"/></svg>\',action:"reset"},toggleFS:{icon:\'<svg><g><path d="M14.5 9.5 21 3m0 0h-6m6 0v6M3 21l6.5-6.5M3 21v-6m0 6h6"/></g><g><path d="m14 10 7-7m-7 7h6m-6 0V4M3 21l7-7m0 0v6m0-6H4"/></g></svg>\',action:"toggleFS"}};var Zt;!function(t){t[t.Init=0]="Init",t[t.Ready=1]="Ready",t[t.Disabled=2]="Disabled"}(Zt||(Zt={}));const Ut={absolute:"auto",display:{left:["infobar"],middle:[],right:["iterateZoom","slideshow","fullscreen","thumbs","close"]},enabled:"auto",items:{infobar:{tpl:\'<div class="fancybox__infobar" tabindex="-1"><span data-fancybox-current-index></span>/<span data-fancybox-count></span></div>\'},download:{tpl:\'<a class="f-button" title="{{DOWNLOAD}}" data-fancybox-download href="javasript:;"><svg><path d="M4 17v2a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-2M7 11l5 5 5-5M12 4v12"/></svg></a>\'},prev:{tpl:\'<button class="f-button" title="{{PREV}}" data-fancybox-prev><svg><path d="m15 6-6 6 6 6"/></svg></button>\'},next:{tpl:\'<button class="f-button" title="{{NEXT}}" data-fancybox-next><svg><path d="m9 6 6 6-6 6"/></svg></button>\'},slideshow:{tpl:\'<button class="f-button" title="{{TOGGLE_SLIDESHOW}}" data-fancybox-toggle-slideshow><svg><g><path d="M8 4v16l13 -8z"></path></g><g><path d="M8 4v15M17 4v15"/></g></svg></button>\'},fullscreen:{tpl:\'<button class="f-button" title="{{TOGGLE_FULLSCREEN}}" data-fancybox-toggle-fullscreen><svg><g><path d="M4 8V6a2 2 0 0 1 2-2h2M4 16v2a2 2 0 0 0 2 2h2M16 4h2a2 2 0 0 1 2 2v2M16 20h2a2 2 0 0 0 2-2v-2"/></g><g><path d="M15 19v-2a2 2 0 0 1 2-2h2M15 5v2a2 2 0 0 0 2 2h2M5 15h2a2 2 0 0 1 2 2v2M5 9h2a2 2 0 0 0 2-2V5"/></g></svg></button>\'},thumbs:{tpl:\'<button class="f-button" title="{{TOGGLE_THUMBS}}" data-fancybox-toggle-thumbs><svg><circle cx="5.5" cy="5.5" r="1"/><circle cx="12" cy="5.5" r="1"/><circle cx="18.5" cy="5.5" r="1"/><circle cx="5.5" cy="12" r="1"/><circle cx="12" cy="12" r="1"/><circle cx="18.5" cy="12" r="1"/><circle cx="5.5" cy="18.5" r="1"/><circle cx="12" cy="18.5" r="1"/><circle cx="18.5" cy="18.5" r="1"/></svg></button>\'},close:{tpl:\'<button class="f-button" title="{{CLOSE}}" data-fancybox-close><svg><path d="m19.5 4.5-15 15M4.5 4.5l15 15"/></svg></button>\'}},parentEl:null},Gt={tabindex:"-1",width:"24",height:"24",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},Kt="has-toolbar",Jt="fancybox__toolbar";class Qt extends _{constructor(){super(...arguments),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:Zt.Init}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:null})}onReady(t){var e;if(!t.carousel)return;let i=this.option("display"),n=this.option("absolute"),s=this.option("enabled");if("auto"===s){const t=this.instance.carousel;let e=0;if(t)for(const i of t.slides)(i.panzoom||"image"===i.type)&&e++;e||(s=!1)}s||(i=void 0);let o=0;const a={left:[],middle:[],right:[]};if(i)for(const t of["left","middle","right"])for(const n of i[t]){const i=this.createEl(n);i&&(null===(e=a[t])||void 0===e||e.push(i),o++)}let r=null;if(o&&(r=this.createContainer()),r){for(const[t,e]of Object.entries(a)){const i=document.createElement("div");P(i,Jt+"__column is-"+t);for(const t of e)i.appendChild(t);"auto"!==n||"middle"!==t||e.length||(n=!0),r.appendChild(i)}!0===n&&P(r,"is-absolute"),this.state=Zt.Ready,this.onRefresh()}else this.state=Zt.Disabled}onClick(t){var e,i;const n=this.instance,s=n.getSlide(),o=null==s?void 0:s.panzoom,a=t.target,r=a&&E(a)?a.dataset:null;if(!r)return;if(void 0!==r.fancyboxToggleThumbs)return t.preventDefault(),t.stopPropagation(),void(null===(e=n.plugins.Thumbs
1)||void 0===e||e.toggle());if(void 0!==r.fancyboxToggleFullscreen)return t.preventDefault(),t.stopPropagation(),void this.instance.toggleFullscreen();if(void 0!==r.fancyboxToggleSlideshow){t.preventDefault(),t.stopPropagation();const e=null===(i=n.carousel)||void 0===i?void 0:i.plugins.Autoplay;let s=e.isActive;return o&&"mousemove"===o.panMode&&!s&&o.reset(),void(s?e.stop():e.start())}const l=r.panzoomAction,c=r.panzoomChange;if((c||l)&&(t.preventDefault(),t.stopPropagation()),c){let t={};try{t=JSON.parse(c)}catch(t){}o&&o.applyChange(t)}else l&&o&&o[l]&&o[l]()}onChange(){this.onRefresh()}onRefresh(){if(this.instance.isClosing())return;const t=this.container;if(!t)return;const e=this.instance.getSlide();if(!e||e.state!==lt.Ready)return;const i=e&&!e.error&&e.panzoom;for(const e of t.querySelectorAll("[data-panzoom-action]"))i?(e.removeAttribute("disabled"),e.removeAttribute("tabindex")):(e.setAttribute("disabled",""),e.setAttribute("tabindex","-1"));let n=i&&i.canZoomIn(),s=i&&i.canZoomOut();for(const e of t.querySelectorAll(\'[data-panzoom-action="zoomIn"]\'))n?(e.removeAttribute("disabled"),e.removeAttribute("tabindex")):(e.setAttribute("disabled",""),e.setAttribute("tabindex","-1"));for(const e of t.querySelectorAll(\'[data-panzoom-action="zoomOut"]\'))s?(e.removeAttribute("disabled"),e.removeAttribute("tabindex")):(e.setAttribute("disabled",""),e.setAttribute("tabindex","-1"));for(const e of t.querySelectorAll(\'[data-panzoom-action="toggleZoom"],[data-panzoom-action="iterateZoom"]\')){s||n?(e.removeAttribute("disabled"),e.removeAttribute("tabindex")):(e.setAttribute("disabled",""),e.setAttribute("tabindex","-1"));const t=e.querySelector("g");t&&(t.style.display=n?"":"none")}}onDone(t,e){var i;null===(i=e.panzoom)||void 0===i||i.on("afterTransform",(()=>{this.instance.isCurrentSlide(e)&&this.onRefresh()})),this.instance.isCurrentSlide(e)&&this.onRefresh()}createContainer(){const t=this.instance.container;if(!t)return null;const e=this.option("parentEl")||t;let i=e.querySelector("."+Jt);return i||(i=document.createElement("div"),P(i,Jt),e.prepend(i)),i.addEventListener("click",this.onClick,{passive:!1,capture:!0}),t&&P(t,Kt),this.container=i,i}createEl(t){const e=this.instance,i=e.carousel;if(!i)return null;if("toggleFS"===t)return null;if("fullscreen"===t&&!ot())return null;let s=null;const o=i.slides.length||0;let a=0,r=0;for(const t of i.slides)(t.panzoom||"image"===t.type)&&a++,("image"===t.type||t.downloadSrc)&&r++;if(o<2&&["infobar","prev","next"].includes(t))return s;if(void 0!==Vt[t]&&!a)return null;if("download"===t&&!r)return null;if("thumbs"===t){const t=e.plugins.Thumbs;if(!t||!t.isEnabled)return null}if("slideshow"===t){if(!i.plugins.Autoplay||o<2)return null}if(void 0!==Vt[t]){const e=Vt[t];s=document.createElement("button"),s.setAttribute("title",this.instance.localize(`{{${t.toUpperCase()}}}`)),P(s,"f-button"),e.action&&(s.dataset.panzoomAction=e.action),e.change&&(s.dataset.panzoomChange=JSON.stringify(e.change)),s.appendChild(n(this.instance.localize(e.icon)))}else{const e=(this.option("items")||[])[t];e&&(s=n(this.instance.localize(e.tpl)),"function"==typeof e.click&&s.addEventListener("click",(t=>{t.preventDefault(),t.stopPropagation(),"function"==typeof e.click&&e.click.call(this,this,t)})))}const l=null==s?void 0:s.querySelector("svg");if(l)for(const[t,e]of Object.entries(Gt))l.getAttribute(t)||l.setAttribute(t,String(e));return s}removeContainer(){const t=this.container;t&&t.remove(),this.container=null,this.state=Zt.Disabled;const e=this.instance.container;e&&S(e,Kt)}attach(){const t=this,e=t.instance;e.on("Carousel.initSlides",t.onReady),e.on("done",t.onDone),e.on(["reveal","Carousel.change"],t.onChange),t.onReady(t.instance)}detach(){const t=this,e=t.instance;e.off("Carousel.initSlides",t.onReady),e.off("done",t.onDone),e.off(["reveal","Carousel.change"],t.onChange),t.removeContainer()}}Object.defineProperty(Qt,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:Ut});const te={Hash:class extends _{onReady(){ht=!1}onChange(t){ut&&clearTimeout(ut);const{hash:e}=pt(),{hash:i}=ft(),n=t.isOpeningSlide(t.getSlide());n&&(ct=i===e?"":i),e&&e!==i&&(ut=setTimeout((()=>{try{if(t.state===rt.Ready){let t="replaceState";
1n&&!dt&&(t="pushState",dt=!0),window.history[t]({},document.title,window.location.pathname+window.location.search+e)}}catch(t){}}),300))}onClose(t){if(ut&&clearTimeout(ut),!ht&&dt)return dt=!1,ht=!1,void window.history.back();if(!ht)try{window.history.replaceState({},document.title,window.location.pathname+window.location.search+(ct||""))}catch(t){}}attach(){const t=this.instance;t.on("ready",this.onReady),t.on(["Carousel.ready","Carousel.change"],this.onChange),t.on("close",this.onClose)}detach(){const t=this.instance;t.off("ready",this.onReady),t.off(["Carousel.ready","Carousel.change"],this.onChange),t.off("close",this.onClose)}static parseURL(){return ft()}static startFromUrl(){gt()}static destroy(){window.removeEventListener("hashchange",vt,!1)}},Html:Lt,Images:wt,Slideshow:Dt,Thumbs:Yt,Toolbar:Qt},ee="with-fancybox",ie="hide-scrollbar",ne="--fancybox-scrollbar-compensate",se="--fancybox-body-margin",oe="aria-hidden",ae="is-using-tab",re="is-animated",le="is-compact",ce="is-loading",he="is-opening",de="has-caption",ue="disabled",pe="tabindex",fe="download",ge="href",me="src",ve=t=>"string"==typeof t,be=function(){var t=window.getSelection();return!!t&&"Range"===t.type};let ye,we=null,xe=null,Ee=0,Se=0,Pe=0,Ce=0;const Te=new Map;let Me=0;class Oe extends g{get isIdle(){return this.idle}get isCompact(){return this.option("compact")}constructor(t=[],e={},i={}){super(e),Object.defineProperty(this,"userSlides",{enumerable:!0,configurable:!0,writable:!0,value:[]}),Object.defineProperty(this,"userPlugins",{enumerable:!0,configurable:!0,writable:!0,value:{}}),Object.defineProperty(this,"idle",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"idleTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"clickTimer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"pwt",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"ignoreFocusChange",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"startedFs",{enumerable:!0,configurable:!0,writable:!0,value:!1}),Object.defineProperty(this,"state",{enumerable:!0,configurable:!0,writable:!0,value:rt.Init}),Object.defineProperty(this,"id",{enumerable:!0,configurable:!0,writable:!0,value:0}),Object.defineProperty(this,"container",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"caption",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"footer",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"carousel",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"lastFocus",{enumerable:!0,configurable:!0,writable:!0,value:null}),Object.defineProperty(this,"prevMouseMoveEvent",{enumerable:!0,configurable:!0,writable:!0,value:void 0}),ye||(ye=ot()),this.id=e.id||++Me,Te.set(this.id,this),this.userSlides=t,this.userPlugins=i,queueMicrotask((()=>{this.init()}))}init(){if(this.state===rt.Destroy)return;this.state=rt.Init,this.attachPlugins(Object.assign(Object.assign({},Oe.Plugins),this.userPlugins)),this.emit("init"),this.emit("attachPlugins"),!0===this.option("hideScrollbar")&&(()=>{if(!et)return;const t=document,e=t.body,i=t.documentElement;if(e.classList.contains(ie))return;let n=window.innerWidth-i.getBoundingClientRect().width;const s=parseFloat(window.getComputedStyle(e).marginRight);n<0&&(n=0),i.style.setProperty(ne,`${n}px`),s&&e.style.setProperty(se,`${s}px`),e.classList.add(ie)})(),this.initLayout(),this.scale();const t=()=>{this.initCarousel(this.userSlides),this.state=rt.Ready,this.attachEvents(),this.emit("ready"),setTimeout((()=>{this.container&&this.container.setAttribute(oe,"false")}),16)};this.option("Fullscreen.autoStart")&&ye&&!ye.isFullscreen()?ye.request().then((()=>{this.startedFs=!0,t()})).catch((()=>t())):t()}initLayout(){var t,e;const i=this.option("parentEl")||document.body,s=n(this.localize(this.option("tpl.main")||""));if(s){if(s.setAttribute("id",`fancybox-${this.id}`),s.setAttribute("aria-label",this.localize("{{MODAL}}")),s.classList.toggle(le,this.isCompact),P(s,this.option("mainClass")||""),P(s,he),this.container=s,this.footer=s.querySelector(".fancybox__footer"),i.appendChild(s),P(document.documentElement,ee),we&&xe||(we=document.createElement("span"),P(we,"fancybox-focus-guard"),we.setAttribute(pe,"0"),we.setAttribute(oe,"true"),we.setAttribute("aria-label","Focus guard"),xe=we.cloneNode(),null===(t=s.parentElement)||void 0===t||t.insertBefore(we,s),null===(e=s.parentElement)||void 0===e||e.append(xe)),s.addEventListener("mousedown",(t=>{Ee=t.pageX,Se=t.pageY,S(s,ae)})),this.option("closeExisting"))for(const t of Te.values())t.id!==this.id&&t.close();else this.option("animated")&&(P(s,re),setTimeout((()=>{this.isClosing()||S(s,re)}),350));
1this.emit("initLayout")}}initCarousel(t){const i=this.container;if(!i)return;const n=i.querySelector(".fancybox__carousel");if(!n)return;const s=this.carousel=new Q(n,u({},{slides:t,transition:"fade",Panzoom:{lockAxis:this.option("dragToClose")?"xy":"x",infinite:!!this.option("dragToClose")&&"y"},Dots:!1,Navigation:{classes:{container:"fancybox__nav",button:"f-button",isNext:"is-next",isPrev:"is-prev"}},initialPage:this.option("startIndex"),l10n:this.option("l10n")},this.option("Carousel")||{}));s.on("*",((t,e,...i)=>{this.emit(`Carousel.${e}`,t,...i)})),s.on(["ready","change"],(()=>{this.manageCaption()})),this.on("Carousel.removeSlide",((t,e,i)=>{this.clearContent(i),i.state=void 0})),s.on("Panzoom.touchStart",(()=>{var t,e;this.isCompact||this.endIdle(),(null===(t=document.activeElement)||void 0===t?void 0:t.closest(".f-thumbs"))&&(null===(e=this.container)||void 0===e||e.focus())})),s.on("settle",(()=>{this.idleTimer||this.isCompact||!this.option("idle")||this.setIdle(),this.option("autoFocus")&&!this.isClosing&&this.checkFocus()})),this.option("dragToClose")&&(s.on("Panzoom.afterTransform",((t,i)=>{const n=this.getSlide();if(n&&e(n.el))return;const s=this.container;if(s){const t=Math.abs(i.current.f),e=t<1?"":Math.max(.5,Math.min(1,1-t/i.contentRect.fitHeight*1.5));s.style.setProperty("--fancybox-ts",e?"0s":""),s.style.setProperty("--fancybox-opacity",e+"")}})),s.on("Panzoom.touchEnd",((t,i,n)=>{var s;const o=this.getSlide();if(o&&e(o.el))return;if(i.isMobile&&document.activeElement&&-1!==["TEXTAREA","INPUT"].indexOf(null===(s=document.activeElement)||void 0===s?void 0:s.nodeName))return;const a=Math.abs(i.dragOffset.y);"y"===i.lockedAxis&&(a>=200||a>=50&&i.dragOffset.time<300)&&(n&&n.cancelable&&n.preventDefault(),this.close(n,"f-throwOut"+(i.current.f<0?"Up":"Down")))}))),s.on("change",(t=>{var e;let i=null===(e=this.getSlide())||void 0===e?void 0:e.triggerEl;if(i){const e=new CustomEvent("slideTo",{bubbles:!0,cancelable:!0,detail:t.page});i.dispatchEvent(e)}})),s.on(["refresh","change"],(t=>{const e=this.container;if(!e)return;for(const i of e.querySelectorAll("[data-fancybox-current-index]"))i.innerHTML=t.page+1;for(const i of e.querySelectorAll("[data-fancybox-count]"))i.innerHTML=t.pages.length;if(!t.isInfinite){for(const i of e.querySelectorAll("[data-fancybox-next]"))t.page<t.pages.length-1?(i.removeAttribute(ue),i.removeAttribute(pe)):(i.setAttribute(ue,""),i.setAttribute(pe,"-1"));for(const i of e.querySelectorAll("[data-fancybox-prev]"))t.page>0?(i.removeAttribute(ue),i.removeAttribute(pe)):(i.setAttribute(ue,""),i.setAttribute(pe,"-1"))}const i=this.getSlide();if(!i)return;let n=i.downloadSrc||"";n||"image"!==i.type||i.error||!ve(i[me])||(n=i[me]);for(const t of e.querySelectorAll("[data-fancybox-download]")){const e=i.downloadFilename;n?(t.removeAttribute(ue),t.removeAttribute(pe),t.setAttribute(ge,n),t.setAttribute(fe,e||n),t.setAttribute("target","_blank")):(t.setAttribute(ue,""),t.setAttribute(pe,"-1"),t.removeAttribute(ge),t.removeAttribute(fe))}})),this.emit("initCarousel")}attachEvents(){const t=this,e=t.container;if(!e)return;e.addEventListener("click",t.onClick,{passive:!1,capture:!1}),e.addEventListener("wheel",t.onWheel,{passive:!1,capture:!1}),document.addEventListener("keydown",t.onKeydown,{passive:!1,capture:!0}),document.addEventListener("visibilitychange",t.onVisibilityChange,!1),document.addEventListener("mousemove",t.onMousemove),t.option("trapFocus")&&document.addEventListener("focus",t.onFocus,!0),window.addEventListener("resize",t.onResize);const i=window.visualViewport;i&&(i.addEventListener("scroll",t.onResize),i.addEventListener("resize",t.onResize))}detachEvents(){const t=this,e=t.container;if(!e)return;document.removeEventListener("keydown",t.onKeydown,{passive:!1,capture:!0}),e.removeEventListener("wheel",t.onWheel,{passive:!1,capture:!1}),e.removeEventListener("click",t.onClick,{passive:!1,capture:!1}),document.removeEventListener("mousemove",t.onMousemove),window.removeEventListener("resize",t.onResize);const i=window.visualViewport;i&&(i.removeEventListener("resize",t.onResize),i.removeEventListener("scroll",t.onResize)),document.removeEventListener("visibilitychange",t.onVisibilityChange,!1),document.removeEventListener("focus",t.onFocus,!0)}scale(){const t=this.container;if(!t)return;
1const e=window.visualViewport,i=Math.max(1,(null==e?void 0:e.scale)||1);let n="",s="",o="";if(e&&i>1){let t=`${e.offsetLeft}px`,a=`${e.offsetTop}px`;n=e.width*i+"px",s=e.height*i+"px",o=`translate3d(${t}, ${a}, 0) scale(${1/i})`}t.style.transform=o,t.style.width=n,t.style.height=s}onClick(t){var e;const{container:i,isCompact:n}=this;if(!i||this.isClosing())return;!n&&this.option("idle")&&this.resetIdle();const s=t.composedPath()[0];if(s.closest(".fancybox-spinner")||s.closest("[data-fancybox-close]"))return t.preventDefault(),void this.close(t);if(s.closest("[data-fancybox-prev]"))return t.preventDefault(),void this.prev();if(s.closest("[data-fancybox-next]"))return t.preventDefault(),void this.next();if("click"===t.type&&0===t.detail)return;if(Math.abs(t.pageX-Ee)>30||Math.abs(t.pageY-Se)>30)return;const o=document.activeElement;if(be()&&o&&i.contains(o))return;if(n&&"image"===(null===(e=this.getSlide())||void 0===e?void 0:e.type))return void(this.clickTimer?(clearTimeout(this.clickTimer),this.clickTimer=null):this.clickTimer=setTimeout((()=>{this.toggleIdle(),this.clickTimer=null}),350));if(this.emit("click",t),t.defaultPrevented)return;let a=!1;if(s.closest(".fancybox__content")){if(o){if(o.closest("[contenteditable]"))return;s.matches(nt)||o.blur()}if(be())return;a=this.option("contentClick")}else s.closest(".fancybox__carousel")&&!s.matches(nt)&&(a=this.option("backdropClick"));"close"===a?(t.preventDefault(),this.close(t)):"next"===a?(t.preventDefault(),this.next()):"prev"===a&&(t.preventDefault(),this.prev())}onWheel(t){const e=t.target;let n=this.option("wheel",t);e.closest(".fancybox__thumbs")&&(n="slide");const s="slide"===n,o=[-t.deltaX||0,-t.deltaY||0,-t.detail||0].reduce((function(t,e){return Math.abs(e)>Math.abs(t)?e:t})),a=Math.max(-1,Math.min(1,o)),r=Date.now();this.pwt&&r-this.pwt<300?s&&t.preventDefault():(this.pwt=r,this.emit("wheel",t,a),t.defaultPrevented||("close"===n?(t.preventDefault(),this.close(t)):"slide"===n&&(i(e)||(t.preventDefault(),this[a>0?"prev":"next"]()))))}onScroll(){window.scrollTo(Pe,Ce)}onKeydown(t){if(!this.isTopmost())return;this.isCompact||!this.option("idle")||this.isClosing()||this.resetIdle();const e=t.key,i=this.option("keyboard");if(!i)return;const n=t.composedPath()[0],s=document.activeElement&&document.activeElement.classList,o=s&&s.contains("f-button")||n.dataset.carouselPage||n.dataset.carouselIndex;if("Escape"!==e&&!o&&E(n)){if(n.isContentEditable||-1!==["TEXTAREA","OPTION","INPUT","SELECT","VIDEO"].indexOf(n.nodeName))return}if("Tab"===t.key?P(this.container,ae):S(this.container,ae),t.ctrlKey||t.altKey||t.shiftKey)return;this.emit("keydown",e,t);const a=i[e];a&&"function"==typeof this[a]&&(t.preventDefault(),this[a]())}onResize(){const t=this.container;if(!t)return;const e=this.isCompact;t.classList.toggle(le,e),this.manageCaption(this.getSlide()),this.isCompact?this.clearIdle():this.endIdle(),this.scale(),this.emit("resize")}onFocus(t){this.isTopmost()&&this.checkFocus(t)}onMousemove(t){this.prevMouseMoveEvent=t,!this.isCompact&&this.option("idle")&&this.resetIdle()}onVisibilityChange(){"visible"===document.visibilityState?this.checkFocus():this.endIdle()}manageCloseBtn(t){const e=this.optionFor(t,"closeButton")||!1;if("auto"===e){const t=this.plugins.Toolbar;if(t&&t.state===Zt.Ready)return}if(!e)return;if(!t.contentEl||t.closeBtnEl)return;const i=this.option("tpl.closeButton");if(i){const e=n(this.localize(i));t.closeBtnEl=t.contentEl.appendChild(e),t.el&&P(t.el,"has-close-btn")}}manageCaption(t=void 0){var e,i;const n="fancybox__caption",s=this.container;if(!s)return;S(s,de);const o=this.isCompact||this.option("commonCaption"),a=!o;if(this.caption&&this.stop(this.caption),a&&this.caption&&(this.caption.remove(),this.caption=null),o&&!this.caption)for(const t of(null===(e=this.carousel)||void 0===e?void 0:e.slides)||[])t.captionEl&&(t.captionEl.remove(),t.captionEl=void 0,S(t.el,de),null===(i=t.el)||void 0===i||i.removeAttribute("aria-labelledby"));if(t||(t=this.getSlide()),!t||o&&!this.isCurrentSlide(t))return;const r=t.el;let l=this.optionFor(t,"caption","");if(!l)return void(o&&this.caption&&this.animate(this.caption,"f-fadeOut",(()=>{this.caption&&(this.caption.innerHTML="")})));let c=null;if(a){if(c=t.captionEl||null,r&&!c){const e=n+`_${this.id}_${t.index}`;c=document.createElement("div"),P(c,n),c.setAttribute("id",e),t.captionEl=r.a
1ppendChild(c),P(r,de),r.setAttribute("aria-labelledby",e)}}else{if(c=this.caption,c||(c=s.querySelector("."+n)),!c){c=document.createElement("div"),c.dataset.fancyboxCaption="",P(c,n);(this.footer||s).prepend(c)}P(s,de),this.caption=c}c&&(c.innerHTML="",ve(l)||"number"==typeof l?c.innerHTML=l+"":l instanceof HTMLElement&&c.appendChild(l))}checkFocus(t){this.focus(t)}focus(t){var e;if(this.ignoreFocusChange)return;const i=document.activeElement||null,n=(null==t?void 0:t.target)||null,s=this.container,o=null===(e=this.carousel)||void 0===e?void 0:e.viewport;if(!s||!o)return;if(!t&&i&&s.contains(i))return;const a=this.getSlide(),r=a&&a.state===lt.Ready?a.el:null;if(!r||r.contains(i)||s===i)return;t&&t.cancelable&&t.preventDefault(),this.ignoreFocusChange=!0;const l=Array.from(s.querySelectorAll(nt));let c=[],h=null;for(let t of l){const e=!t.offsetParent||!!t.closest(\'[aria-hidden="true"]\'),i=r&&r.contains(t),n=!o.contains(t);if(t===s||(i||n)&&!e){c.push(t);const e=t.dataset.origTabindex;void 0!==e&&e&&(t.tabIndex=parseFloat(e)),t.removeAttribute("data-orig-tabindex"),!t.hasAttribute("autoFocus")&&h||(h=t)}else{const e=void 0===t.dataset.origTabindex?t.getAttribute("tabindex")||"":t.dataset.origTabindex;e&&(t.dataset.origTabindex=e),t.tabIndex=-1}}let d=null;t?(!n||c.indexOf(n)<0)&&(d=h||s,c.length&&(i===xe?d=c[0]:this.lastFocus!==s&&i!==we||(d=c[c.length-1]))):d=a&&"image"===a.type?s:h||s,d&&st(d),this.lastFocus=document.activeElement,this.ignoreFocusChange=!1}next(){const t=this.carousel;t&&t.pages.length>1&&t.slideNext()}prev(){const t=this.carousel;t&&t.pages.length>1&&t.slidePrev()}jumpTo(...t){this.carousel&&this.carousel.slideTo(...t)}isTopmost(){var t;return(null===(t=Oe.getInstance())||void 0===t?void 0:t.id)==this.id}animate(t=null,e="",i){if(!t||!e)return void(i&&i());this.stop(t);const n=s=>{s.target===t&&t.dataset.animationName&&(t.removeEventListener("animationend",n),delete t.dataset.animationName,i&&i(),S(t,e))};t.dataset.animationName=e,t.addEventListener("animationend",n),P(t,e)}stop(t){t&&t.dispatchEvent(new CustomEvent("animationend",{bubbles:!1,cancelable:!0,currentTarget:t}))}setContent(t,e="",i=!0){if(this.isClosing())return;const s=t.el;if(!s)return;let o=null;if(E(e)?o=e:(o=n(e+""),E(o)||(o=document.createElement("div"),o.innerHTML=e+"")),["img","picture","iframe","video","audio"].includes(o.nodeName.toLowerCase())){const t=document.createElement("div");t.appendChild(o),o=t}E(o)&&t.filter&&!t.error&&(o=o.querySelector(t.filter)),o&&E(o)?(P(o,"fancybox__content"),t.id&&o.setAttribute("id",t.id),s.classList.add(`has-${t.error?"error":t.type||"unknown"}`),s.prepend(o),"none"===o.style.display&&(o.style.display=""),"none"===getComputedStyle(o).getPropertyValue("display")&&(o.style.display=t.display||this.option("defaultDisplay")||"flex"),t.contentEl=o,i&&this.revealContent(t),this.manageCloseBtn(t),this.manageCaption(t)):this.setError(t,"{{ELEMENT_NOT_FOUND}}")}revealContent(t,e){const i=t.el,n=t.contentEl;i&&n&&(this.emit("reveal",t),this.hideLoading(t),t.state=lt.Opening,(e=this.isOpeningSlide(t)?void 0===e?this.optionFor(t,"showClass"):e:"f-fadeIn")?this.animate(n,e,(()=>{this.done(t)})):this.done(t))}done(t){this.isClosing()||(t.state=lt.Ready,this.emit("done",t),P(t.el,"is-done"),this.isCurrentSlide(t)&&this.option("autoFocus")&&queueMicrotask((()=>{var e;null===(e=t.panzoom)||void 0===e||e.updateControls(),this.option("autoFocus")&&this.focus()})),this.isOpeningSlide(t)&&(S(this.container,he),!this.isCompact&&this.option("idle")&&this.setIdle()))}isCurrentSlide(t){const e=this.getSlide();return!(!t||!e)&&e.index===t.index}isOpeningSlide(t){var e,i;return null===(null===(e=this.carousel)||void 0===e?void 0:e.prevPage)&&t&&t.index===(null===(i=this.getSlide())||void 0===i?void 0:i.index)}showLoading(t){t.state=lt.Loading;const e=t.el;if(!e)return;P(e,ce),this.emit("loading",t),t.spinnerEl||setTimeout((()=>{if(!this.isClosing()&&!t.spinnerEl&&t.state===lt.Loading){let i=n(x);P(i,"fancybox-spinner"),t.spinnerEl=i,e.prepend(i),this.animate(i,"f-fadeIn")}}),250)}hideLoading(t){const e=t.el;if(!e)return;const i=t.spinnerEl;this.isClosing()?null==i||i.remove():(S(e,ce),i&&this.animate(i,"f-fadeOut",(()=>{i.remove()}
1)),t.state===lt.Loading&&(this.emit("loaded",t),t.state=lt.Ready))}setError(t,e){if(this.isClosing())return;const i=new Event("error",{bubbles:!0,cancelable:!0});if(this.emit("error",i,t),i.defaultPrevented)return;t.error=e,this.hideLoading(t),this.clearContent(t);const n=document.createElement("div");n.classList.add("fancybox-error"),n.innerHTML=this.localize(e||"<p>{{ERROR}}</p>"),this.setContent(t,n)}clearContent(t){if(void 0===t.state)return;this.emit("clearContent",t),t.contentEl&&(t.contentEl.remove(),t.contentEl=void 0);const e=t.el;e&&(S(e,"has-error"),S(e,"has-unknown"),S(e,`has-${t.type||"unknown"}`)),t.closeBtnEl&&t.closeBtnEl.remove(),t.closeBtnEl=void 0,t.captionEl&&t.captionEl.remove(),t.captionEl=void 0,t.spinnerEl&&t.spinnerEl.remove(),t.spinnerEl=void 0}getSlide(){var t;const e=this.carousel;return(null===(t=null==e?void 0:e.pages[null==e?void 0:e.page])||void 0===t?void 0:t.slides[0])||void 0}close(t,e){if(this.isClosing())return;const i=new Event("shouldClose",{bubbles:!0,cancelable:!0});if(this.emit("shouldClose",i,t),i.defaultPrevented)return;t&&t.cancelable&&(t.preventDefault(),t.stopPropagation());const n=()=>{this.proceedClose(t,e)};this.startedFs&&ye&&ye.isFullscreen()?Promise.resolve(ye.exit()).then((()=>n())):n()}clearIdle(){this.idleTimer&&clearTimeout(this.idleTimer),this.idleTimer=null}setIdle(t=!1){const e=()=>{this.clearIdle(),this.idle=!0,P(this.container,"is-idle"),this.emit("setIdle")};if(this.clearIdle(),!this.isClosing())if(t)e();else{const t=this.option("idle");t&&(this.idleTimer=setTimeout(e,t))}}endIdle(){this.clearIdle(),this.idle&&!this.isClosing()&&(this.idle=!1,S(this.container,"is-idle"),this.emit("endIdle"))}resetIdle(){this.endIdle(),this.setIdle()}toggleIdle(){this.idle?this.endIdle():this.setIdle(!0)}toggleFullscreen(){ye&&(ye.isFullscreen()?ye.exit():ye.request().then((()=>{this.startedFs=!0})))}isClosing(){return[rt.Closing,rt.CustomClosing,rt.Destroy].includes(this.state)}proceedClose(t,e){var i,n;this.state=rt.Closing,this.clearIdle(),this.detachEvents();const s=this.container,o=this.carousel,a=this.getSlide(),r=a&&this.option("placeFocusBack")?a.triggerEl||this.option("triggerEl"):null;if(r&&(tt(r)?st(r):r.focus()),s&&(S(s,he),P(s,"is-closing"),s.setAttribute(oe,"true"),this.option("animated")&&P(s,re),s.style.pointerEvents="none"),o){o.clearTransitions(),null===(i=o.panzoom)||void 0===i||i.destroy(),null===(n=o.plugins.Navigation)||void 0===n||n.detach();for(const t of o.slides){t.state=lt.Closing,this.hideLoading(t);const e=t.contentEl;e&&this.stop(e);const i=null==t?void 0:t.panzoom;i&&(i.stop(),i.detachEvents(),i.detachObserver()),this.isCurrentSlide(t)||o.emit("removeSlide",t)}}Pe=window.scrollX,Ce=window.scrollY,window.addEventListener("scroll",this.onScroll),this.emit("close",t),this.state!==rt.CustomClosing?(void 0===e&&a&&(e=this.optionFor(a,"hideClass")),e&&a?(this.animate(a.contentEl,e,(()=>{o&&o.emit("removeSlide",a)})),setTimeout((()=>{this.destroy()}),500)):this.destroy()):setTimeout((()=>{this.destroy()}),500)}destroy(){var t;if(this.state===rt.Destroy)return;window.removeEventListener("scroll",this.onScroll),this.state=rt.Destroy,null===(t=this.carousel)||void 0===t||t.destroy();const e=this.container;e&&e.remove(),Te.delete(this.id);const i=Oe.getInstance();i?i.focus():(we&&(we.remove(),we=null),xe&&(xe.remove(),xe=null),S(document.documentElement,ee),(()=>{if(!et)return;const t=document,e=t.body;e.classList.remove(ie),e.style.setProperty(se,""),t.documentElement.style.setProperty(ne,"")})(),this.emit("destroy"))}static bind(t,e,i){if(!et)return;let n,s="",o={};if(void 0===t?n=document.body:ve(t)?(n=document.body,s=t,"object"==typeof e&&(o=e||{})):(n=t,ve(e)&&(s=e),"object"==typeof i&&(o=i||{})),!n||!E(n))return;s=s||"[data-fancybox]";const a=Oe.openers.get(n)||new Map;a.set(s,o),Oe.openers.set(n,a),1===a.size&&n.addEventListener("click",Oe.fromEvent)}static unbind(t,e){let i,n="";if(ve(t)?(i=document.body,n=t):(i=t,ve(e)&&(n=e)),!i)return;const s=Oe.openers.get(i);s&&n&&s.delete(n),n&&s||(Oe.openers.delete(i),i.removeEventListener("click",Oe.fromEvent))}static destroy(){let t;for(;t=Oe.getInstance();)t.destroy();for(const t of Oe.openers.keys())t.removeEventListener("click",Oe.fromEvent);Oe.openers=new Map}static fromEvent(t){if(t.defaultPrevented)return;if(t.button&&0!==t.button)return;if(t.ctrlKey||t.metaKey||t.shiftKey)return;let e=t.composedPath()[0];const i=e.closest("[data-fancybox-trigger]");if(i){const t=i.dataset.fancyboxTrigger||"",n=document.querySelectorAll(`[data-fancybox="${t}"]`),s=parseInt(i.dataset.fancyboxIndex||"",10)||0;e=n[s]||e}if(!(e&&e instanceof Element))return;let n,s,o,a;if([...Oe.openers].reverse().find((([t,i])=>!(!t.contains(e)||![...i].reverse().find((([i,r])=>{let l=e.closest(i);return!!l&&(n=t,s=i,o=l,a=r,!0)}))))),!n||!s||!o)return;a=a||{},t.preventDefault(),e=o;let r=[],l=u({},at,a);l.event=t,l.triggerEl=e,l.delegate=i;const c=l.groupAll,h=l.groupAttr,d=h&&e?e.getAttribute(`${h}`):"";
1if((!e||d||c)&&(r=[].slice.call(n.querySelectorAll(s))),e&&!c&&(r=d?r.filter((t=>t.getAttribute(`${h}`)===d)):[e]),!r.length)return;const p=Oe.getInstance();return p&&p.options.triggerEl&&r.indexOf(p.options.triggerEl)>-1?void 0:(e&&(l.startIndex=r.indexOf(e)),Oe.fromNodes(r,l))}static fromSelector(t,e,i){let n=null,s="",o={};if(ve(t)?(n=document.body,s=t,"object"==typeof e&&(o=e||{})):t instanceof HTMLElement&&ve(e)&&(n=t,s=e,"object"==typeof i&&(o=i||{})),!n||!s)return!1;const a=Oe.openers.get(n);return!!a&&(o=u({},a.get(s)||{},o),!!o&&Oe.fromNodes(Array.from(n.querySelectorAll(s)),o))}static fromNodes(t,e){e=u({},at,e||{});const i=[];for(const n of t){const t=n.dataset||{},s=t[me]||n.getAttribute(ge)||n.getAttribute("currentSrc")||n.getAttribute(me)||void 0;let o;const a=e.delegate;let r;a&&i.length===e.startIndex&&(o=a instanceof HTMLImageElement?a:a.querySelector("img:not([aria-hidden])")),o||(o=n instanceof HTMLImageElement?n:n.querySelector("img:not([aria-hidden])")),o&&(r=o.currentSrc||o[me]||void 0,!r&&o.dataset&&(r=o.dataset.lazySrc||o.dataset[me]||void 0));const l={src:s,triggerEl:n,thumbEl:o,thumbElSrc:r,thumbSrc:r};for(const e in t){let i=t[e]+"";i="false"!==i&&("true"===i||i),l[e]=i}i.push(l)}return new Oe(i,e)}static getInstance(t){if(t)return Te.get(t);return Array.from(Te.values()).reverse().find((t=>!t.isClosing()&&t))||null}static getSlide(){var t;return(null===(t=Oe.getInstance())||void 0===t?void 0:t.getSlide())||null}static show(t=[],e={}){return new Oe(t,e)}static next(){const t=Oe.getInstance();t&&t.next()}static prev(){const t=Oe.getInstance();t&&t.prev()}static close(t=!0,...e){if(t)for(const t of Te.values())t.close(...e);else{const t=Oe.getInstance();t&&t.close(...e)}}}Object.defineProperty(Oe,"version",{enumerable:!0,configurable:!0,writable:!0,value:"5.0.36"}),Object.defineProperty(Oe,"defaults",{enumerable:!0,configurable:!0,writable:!0,value:at}),Object.defineProperty(Oe,"Plugins",{enumerable:!0,configurable:!0,writable:!0,value:te}),Object.defineProperty(Oe,"openers",{enumerable:!0,configurable:!0,writable:!0,value:new Map});\n\n;// ./assets/js/blocks/event/eventCover.js\nfunction _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }\nfunction _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/facebook/regenerator/blob/main/LICENSE */ _regeneratorRuntime = function _regeneratorRuntime() { return e; }; var t, e = {}, r = Object.prototype, n = r.hasOwnProperty, o = Object.defineProperty || function (t, e, r) { t[e] = r.value; }, i = "function" == typeof Symbol ? Symbol : {}, a = i.iterator || "@@iterator", c = i.asyncIterator || "@@asyncIterator", u = i.toStringTag || "@@toStringTag"; function define(t, e, r) { return Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }), t[e]; } try { define({}, ""); } catch (t) { define = function define(t, e, r) { return t[e] = r; }; } function wrap(t, e, r, n) { var i = e && e.prototype instanceof Generator ? e : Generator, a = Object.create(i.prototype), c = new Context(n || []); return o(a, "_invoke", { value: makeInvokeMethod(t, r, c) }), a; } function tryCatch(t, e, r) { try { return { type: "normal", arg: t.call(e, r) }; } catch (t) { return { type: "throw", arg: t }; } } e.wrap = wrap;
vendor: 10,739 bytes, line 1
1 var h = "suspendedStart", l = "suspendedYield", f = "executing", s = "completed", y = {}; function Generator() {} function GeneratorFunction() {} function GeneratorFunctionPrototype() {} var p = {}; define(p, a, function () { return this; }); var d = Object.getPrototypeOf, v = d && d(d(values([]))); v && v !== r && n.call(v, a) && (p = v); var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); function defineIteratorMethods(t) { ["next", "throw", "return"].forEach(function (e) { define(t, e, function (t) { return this._invoke(e, t); }); }); } function AsyncIterator(t, e) { function invoke(r, o, i, a) { var c = tryCatch(t[r], t, o); if ("throw" !== c.type) { var u = c.arg, h = u.value; return h && "object" == _typeof(h) && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { invoke("next", t, i, a); }, function (t) { invoke("throw", t, i, a); }) : e.resolve(h).then(function (t) { u.value = t, i(u); }, function (t) { return invoke("throw", t, i, a); }); } a(c.arg); } var r; o(this, "_invoke", { value: function value(t, n) { function callInvokeWithMethodAndArg() { return new e(function (e, r) { invoke(t, n, e, r); }); } return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); } }); } function makeInvokeMethod(e, r, n) { var o = h; return function (i, a) { if (o === f) throw Error("Generator is already running"); if (o === s) { if ("throw" === i) throw a; return { value: t, done: !0 }; } for (n.method = i, n.arg = a;;) { var c = n.delegate; if (c) { var u = maybeInvokeDelegate(c, n); if (u) { if (u === y) continue; return u; } } if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { if (o === h) throw o = s, n.arg; n.dispatchException(n.arg); } else "return" === n.method && n.abrupt("return", n.arg); o = f; var p = tryCatch(e, r, n); if ("normal" === p.type) { if (o = n.done ? s : l, p.arg === y) continue; return { value: p.arg, done: n.done }; } "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); } }; } function maybeInvokeDelegate(e, r) { var n = r.method, o = e.iterator[n]; if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a \'" + n + "\' method")), y; var i = tryCatch(o, e.iterator, r.arg); if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; var a = i.arg; return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); } function pushTryEntry(t) { var e = { tryLoc: t[0] }; 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); } function resetTryEntry(t) { var e = t.completion || {}; e.type = "normal", delete e.arg, t.completion = e; } function Context(t) { this.tryEntries = [{ tryLoc: "root" }], t.forEach(pushTryEntry, this), this.reset(!0); } function values(e) { if (e || "" === e) { var r = e[a]; if (r) return r.call(e); if ("function" == typeof e.next) return e; if (!isNaN(e.length)) { var o = -1, i = function next() { for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; return next.value = t, next.done = !0, next; }; return i.next = i; } } throw new TypeError(_typeof(e) + " is not iterable"); } return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { value: GeneratorFunctionPrototype, configurable: !0 }), o(GeneratorFunctionPrototype, "constructor", { value: GeneratorFunction, configurable: !0 }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { var e = "function" == typeof t && t.constructor; return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); }, e.mark = function (t) { return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; }, e.awrap = function (t) { return { __await: t }; }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { return this; }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { void 0 === i && (i = Promise); var a = new AsyncIterator(wrap(t, r, n, o), i); return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { return t.done ? t.value : a.next(); }); }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { return this; }), define(g, "toString", function () { return "[object Generator]"; }), e.keys = function (t) { var e = Object(t), r = []; for (var n in e) r.push(n); return r.reverse(), function next() { for (; r.length;) { var t = r.pop(); if (t in e) return next.value = t, next.done = !1, next; } return next.done = !0, next; }; }, e.values = values, Context.prototype = { constructor: Context, reset: function reset(e) { if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); }, stop: function stop() { this.done = !0; var t = this.tryEntries[0].completion; if ("throw" === t.type) throw t.arg; return this.rval; }, dispatchException: function dispatchException(e) { if (this.done) throw e; var r = this; function handle(n, o) { return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; } for (var o = this.tryEntries.length - 1; o >= 0; --o) { var i = this.tryEntries[o], a = i.completion; if ("root" === i.tryLoc) return handle("end"); if (i.tryLoc <= this.prev) { var c = n.call(i, "catchLoc"), u = n.call(i, "finallyLoc"); if (c && u) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } else if (c) { if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); } else { if (!u) throw Error("try statement without catch or finally"); if (this.prev < i.finallyLoc) return handle(i.finallyLoc); } } } }, abrupt: function abrupt(t, e) { for (var r = this.tryEntries.length - 1; r >= 0; --r) { var o = this.tryEntries[r]; if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { var i = o; break; } } i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); var a = i ? i.completion : {}; return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); }, complete: function complete(t, e) { if ("throw" === t.type) throw t.arg; return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; }, finish: function finish(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; } }, catch: function _catch(t) { for (var e = this.tryEntries.length - 1; e >= 0; --e) { var r = this.tryEntries[e]; if (r.tryLoc === t) { var n = r.completion; if ("throw" === n.type) { var o = n.arg; resetTryEntry(r); } return o; } } throw Error("illegal catch attempt"); }, delegateYield: function delegateYield(e, r, n) { return this.delegate = { iterator: values(e), resultName: r, nextLoc: n }, "next" === this.method && (this.arg = t), y; } }, e; }\nfunction asyncGeneratorStep(n, t, e, r, o, a, c) { try { var i = n[a](c), u = i.value; } catch (n) { return void e(n); } i.done ? t(u) : Promise.resolve(u).then(r, o); }\nfunction _asyncToGenerator(n) { return function () { var t = this, e = arguments; return new Promise(function (r, o) { var a = n.apply(t, e); function _next(n) { asyncGeneratorStep(a, r, o, _next, _throw, "next", n); } function _throw(n) { asyncGeneratorStep(a, r, o, _next, _throw, "throw", n); } _next(void 0); }); }; }\nvar parentSelector = \'.event-cover\';\n\n\n__webpack_require__.e(/* import() */ 3357).then(__webpack_require__.bind(__webpack_require__, 3357));\n__webpack_require__.e(/* import() */ 6880).then(__webpack_require__.bind(__webpack_require__, 6880));\n\nfunction init(_x) {\n return _init.apply(this, arguments);\n} // Default init\nfunction _init() {\n _init = _asyncToGenerator(/*#__PURE__*/_regeneratorRuntime().mark(function _callee(parent) {\n var _yield$import, ScrollToHash;\n return _regeneratorRuntime().wrap(function _callee$(_context) {\n while (1) switch (_context.prev = _context.next) {\n case 0:\n _context.next = 2;\n return __webpack_require__.e(/* import() */ 4602).then(__webpack_require__.bind(__webpack_require__, 4602));\n case 2:\n _yield$import = _context.sent;\n ScrollToHash = _yield$import.ScrollToHash;\n new ScrollToHash().init();\n case 5:\n case "end":\n return _context.stop();\n }\n }, _callee);\n }));\n return _init.apply(this, arguments);\n}\ndocument.querySelectorAll(parentSelector).forEach(function (parent) {\n init(parent);\n});\n\n// WP init and Barba reinit\nwindow.addEventListener(\'reinit\', function (e) {\n var container = e.detail && e.detail.container || document;\n container.querySelectorAll(parentSelector).forEach(function (parent) {\n init(parent);\n });\n});//# sourceURL=[module]\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiODg1Ny5qcyIsIm1hcHBpbmdzIjoiOztBQUFBOzs7O0FDQ0E7QUFBQTtBQUFBO0FBREE7QUFFQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQUE7QUFFQTtBQUFBO0FBS0E7QUFBQTtBQUxBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUNBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ0E7QUFBQTtBQUdBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSIsInNvdXJjZXMiOlsid2VicGFjazovL2JvaWxlcnBsYXRlLy4vbm9kZV9tb2R1bGVzL0BmYW5jeWFwcHMvdWkvZGlzdC9pbmRleC5lc20uanM/ODU2MyIsIndlYnBhY2s6Ly9ib2lsZXJwbGF0ZS8uL2Fzc2V0cy9qcy9ibG9ja3MvZXZlbnQvZXZlbnRDb3Zlci5qcz83Y2FmIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IHQ9KHQsZT0xZTQpPT4odD1wYXJzZUZsb2F0KHQrXCJcIil8fDAsTWF0aC5yb3VuZCgodCtOdW1iZXIuRVBTSUxPTikqZSkvZSksZT1mdW5jdGlvbih0KXtpZighKHQmJnQgaW5zdGFuY2VvZiBFbGVtZW50JiZ0Lm9mZnNldFBhcmVudCkpcmV0dXJuITE7Y29uc3QgZT10LnNjcm9sbEhlaWdodD50LmNsaWVudE
1hlaWdodCxpPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpLm92ZXJmbG93WSxuPS0xIT09aS5pbmRleE9mKFwiaGlkZGVuXCIpLHM9LTEhPT1pLmluZGV4T2YoXCJ2aXNpYmxlXCIpO3JldHVybiBlJiYhbiYmIXN9LGk9ZnVuY3Rpb24odCxuPXZvaWQgMCl7cmV0dXJuISghdHx8dD09PWRvY3VtZW50LmJvZHl8fG4mJnQ9PT1uKSYmKGUodCk/dDppKHQucGFyZW50RWxlbWVudCxuKSl9LG49ZnVuY3Rpb24odCl7dmFyIGU9KG5ldyBET01QYXJzZXIpLnBhcnNlRnJvbVN0cmluZyh0LFwidGV4dC9odG1sXCIpLmJvZHk7aWYoZS5jaGlsZEVsZW1lbnRDb3VudD4xKXtmb3IodmFyIGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKTtlLmZpcnN0Q2hpbGQ7KWkuYXBwZW5kQ2hpbGQoZS5maXJzdENoaWxkKTtyZXR1cm4gaX1yZXR1cm4gZS5maXJzdENoaWxkfSxzPXQ9PmAke3R8fFwiXCJ9YC5zcGxpdChcIiBcIikuZmlsdGVyKCh0PT4hIXQpKSxvPSh0LGUsaSk9Pnt0JiZzKGUpLmZvckVhY2goKGU9Pnt0LmNsYXNzTGlzdC50b2dnbGUoZSxpfHwhMSl9KSl9O2NsYXNzIGF7Y29uc3RydWN0b3IodCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJwYWdlWFwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInBhZ2VZXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiY2xpZW50WFwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImNsaWVudFlcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJpZFwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInRpbWVcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJuYXRpdmVQb2ludGVyXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHRoaXMubmF0aXZlUG9pbnRlcj10LHRoaXMucGFnZVg9dC5wYWdlWCx0aGlzLnBhZ2VZPXQucGFnZVksdGhpcy5jbGllbnRYPXQuY2xpZW50WCx0aGlzLmNsaWVudFk9dC5jbGllbnRZLHRoaXMuaWQ9c2VsZi5Ub3VjaCYmdCBpbnN0YW5jZW9mIFRvdWNoP3QuaWRlbnRpZmllcjotMSx0aGlzLnRpbWU9RGF0ZS5ub3coKX19Y29uc3Qgcj17cGFzc2l2ZTohMX07Y2xhc3MgbHtjb25zdHJ1Y3Rvcih0LHtzdGFydDplPSgoKT0+ITApLG1vdmU6aT0oKCk9Pnt9KSxlbmQ6bj0oKCk9Pnt9KX0pe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiZWxlbWVudFwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInN0YXJ0Q2FsbGJhY2tcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJtb3ZlQ2FsbGJhY2tcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6dm9pZCAwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJlbmRDYWxsYmFja1wiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImN1cnJlbnRQb2ludGVyc1wiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpbXX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwic3RhcnRQb2ludGVyc1wiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpbXX0pLHRoaXMuZWxlbWVudD10LHRoaXMuc3RhcnRDYWxsYmFjaz1lLHRoaXMubW92ZUNhbGxiYWNrPWksdGhpcy5lbmRDYWxsYmFjaz1uO2Zvcihjb25zdCB0IG9mW1wib25Qb2ludGVyU3RhcnRcIixcIm9uVG91Y2hTdGFydFwiLFwib25Nb3ZlXCIsXCJvblRvdWNoRW5kXCIsXCJvblBvaW50ZXJFbmRcIixcIm9uV2luZG93Qmx1clwiXSl0aGlzW3RdPXRoaXNbdF0uYmluZCh0aGlzKTt0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLHRoaXMub25Qb2ludGVyU3RhcnQsciksdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaHN0YXJ0XCIsdGhpcy5vblRvdWNoU3RhcnQsciksdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaG1vdmVcIix0aGlzLm9uTW92ZSxyKSx0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsdGhpcy5vblRvdWNoRW5kKSx0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoY2FuY2VsXCIsdGhpcy5vblRvdWNoRW5kKX1vblBvaW50ZXJTdGFydCh0KXtpZighdC5idXR0b25zfHwwIT09dC5idXR0b24pcmV0dXJuO2NvbnN0IGU9bmV3IGEodCk7dGhpcy5jdXJyZW50UG9pbnRlcnMuc29tZSgodD0+dC5pZD09PWUuaWQpKXx8dGhpcy50cmlnZ2VyUG9pbnRlclN0YXJ0KGUsdCkmJih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHRoaXMub25Nb3ZlKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIix0aGlzLm9uUG9pbnRlckVuZCksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsdGhpcy5vbldpbmRvd0JsdXIpKX1vblRvdWNoU3RhcnQodCl7Zm9yKGNvbnN0IGUgb2YgQXJyYXkuZnJvbSh0LmNoYW5nZWRUb3VjaGVzfHxbXSkpdGhpcy50cmlnZ2VyUG9pbnRlclN0YXJ0KG5ldyBhKGUpLHQpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiYmx1clwiLHRoaXMub25XaW5kb3dCbHVyKX1vbk1vdmUodCl7Y29uc3QgZT10aGlzLmN1cnJlbnRQb2ludGVycy5zbGljZSgpLGk9XCJjaGFuZ2VkVG91Y2hlc1wiaW4gdD9BcnJheS5mcm9tKHQuY2hhbmdlZFRvdWNoZXN8fFtdKS5tYXAoKHQ9Pm5ldyBhKHQpKSk6W25ldyBhKHQpXSxuPVtdO2Zvcihjb25zdCB0IG9mIGkpe2NvbnN0IGU9dGhpcy5jdXJyZW50UG9pbnRlcnMuZmluZEluZGV4KChlPT5lLmlkPT09dC5pZCkpO2U8MHx8KG4ucHVzaCh0KSx0aGlzLmN1cnJlbnRQb2ludGVyc1tlXT10KX1uLmxlbmd0aCYmdGhpcy5tb3ZlQ2FsbGJhY2sodCx0aGlzLmN1cnJlbnRQb2ludGVycy5zbGljZSgpLGUpfW9uUG9pbnRlckVuZCh0KXt0LmJ1dHRvbnM+MCYmMCE9PXQuYnV0dG9ufHwodGhpcy50cmlnZ2VyUG9pbnRlckVuZCh0LG5ldyBhKHQpKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHRoaXMub25Nb3ZlKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIix0aGlzLm9uUG9pbnRlckVuZCksd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJibHVyXCIsdGhpcy5vbldpbmRvd0JsdXIpKX1vblRvdWNoRW5kKHQpe2Zvcihjb25zdCBlIG9mIEFycmF5LmZyb20odC5jaGFuZ2VkVG91Y2hlc3x8W10pKXRoaXMudHJpZ2dlclBvaW50ZXJFbmQodCxuZXcgYShlKSl9dHJpZ2dlclBvaW50ZXJTdGFydCh0LGUpe3JldHVybiEhdGhpcy5zdGFydENhbGxiYWNrKGUsdCx0aGlzLmN1cnJlbnRQb2ludGVycy5zbGljZSgpKSYmKHRoaXMuY3VycmVudFBvaW50ZXJzLnB1c2godCksdGhpcy5zdGFydFBvaW50ZXJzLnB1c2godCksITApfXRyaWdnZXJQb2ludGVyRW5kKHQsZSl7Y29uc3QgaT10aGlzLmN1cnJlbnRQb2ludGVycy5maW5kSW5kZXgoKHQ9PnQuaWQ9PT1lLmlkKSk7aTwwfHwodGhpcy5jdXJyZW50UG9pbnRlcnMuc3BsaWNlKGksMSksdGhpcy5zdGFydFBvaW50ZXJzLnNwbGljZShpLDEpLHRoaXMuZW5kQ2FsbGJhY2sodCxlLHRoaXMuY3VycmVudFBvaW50ZXJzLnNsaWNlKCkpKX1vbldpbmRvd0JsdXIoKXt0aGlzLmNsZWFyKCl9Y2xlYXIoKXtmb3IoO3RoaXMuY3VycmVudFBvaW50ZXJzLmxlbmd0aDspe2NvbnN0IHQ9dGhpcy5jdXJyZW50UG9pbnRlcnNbdGh
1pcy5jdXJyZW50UG9pbnRlcnMubGVuZ3RoLTFdO3RoaXMuY3VycmVudFBvaW50ZXJzLnNwbGljZSh0aGlzLmN1cnJlbnRQb2ludGVycy5sZW5ndGgtMSwxKSx0aGlzLnN0YXJ0UG9pbnRlcnMuc3BsaWNlKHRoaXMuY3VycmVudFBvaW50ZXJzLmxlbmd0aC0xLDEpLHRoaXMuZW5kQ2FsbGJhY2sobmV3IEV2ZW50KFwidG91Y2hlbmRcIix7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwLGNsaWVudFg6dC5jbGllbnRYLGNsaWVudFk6dC5jbGllbnRZfSksdCx0aGlzLmN1cnJlbnRQb2ludGVycy5zbGljZSgpKX19c3RvcCgpe3RoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vkb3duXCIsdGhpcy5vblBvaW50ZXJTdGFydCxyKSx0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoc3RhcnRcIix0aGlzLm9uVG91Y2hTdGFydCxyKSx0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNobW92ZVwiLHRoaXMub25Nb3ZlLHIpLHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIix0aGlzLm9uVG91Y2hFbmQpLHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hjYW5jZWxcIix0aGlzLm9uVG91Y2hFbmQpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2Vtb3ZlXCIsdGhpcy5vbk1vdmUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLHRoaXMub25Qb2ludGVyRW5kKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImJsdXJcIix0aGlzLm9uV2luZG93Qmx1cil9fWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gZT9NYXRoLnNxcnQoTWF0aC5wb3coZS5jbGllbnRYLXQuY2xpZW50WCwyKStNYXRoLnBvdyhlLmNsaWVudFktdC5jbGllbnRZLDIpKTowfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gZT97Y2xpZW50WDoodC5jbGllbnRYK2UuY2xpZW50WCkvMixjbGllbnRZOih0LmNsaWVudFkrZS5jbGllbnRZKS8yfTp0fWNvbnN0IGQ9dD0+XCJvYmplY3RcIj09dHlwZW9mIHQmJm51bGwhPT10JiZ0LmNvbnN0cnVjdG9yPT09T2JqZWN0JiZcIltvYmplY3QgT2JqZWN0XVwiPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpLHU9KHQsLi4uZSk9Pntjb25zdCBpPWUubGVuZ3RoO2ZvcihsZXQgbj0wO248aTtuKyspe2NvbnN0IGk9ZVtuXXx8e307T2JqZWN0LmVud
1HJpZXMoaSkuZm9yRWFjaCgoKFtlLGldKT0+e2NvbnN0IG49QXJyYXkuaXNBcnJheShpKT9bXTp7fTt0W2VdfHxPYmplY3QuYXNzaWduKHQse1tlXTpufSksZChpKT9PYmplY3QuYXNzaWduKHRbZV0sdShuLGkpKTpBcnJheS5pc0FycmF5KGkpP09iamVjdC5hc3NpZ24odCx7W2VdOlsuLi5pXX0pOk9iamVjdC5hc3NpZ24odCx7W2VdOml9KX0pKX1yZXR1cm4gdH0scD1mdW5jdGlvbih0LGUpe3JldHVybiB0LnNwbGl0KFwiLlwiKS5yZWR1Y2UoKCh0LGUpPT5cIm9iamVjdFwiPT10eXBlb2YgdD90W2VdOnZvaWQgMCksZSl9O2NsYXNzIGZ7Y29uc3RydWN0b3IodD17fSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJvcHRpb25zXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImV2ZW50c1wiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpuZXcgTWFwfSksdGhpcy5zZXRPcHRpb25zKHQpO2Zvcihjb25zdCB0IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSkpdC5zdGFydHNXaXRoKFwib25cIikmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXNbdF0mJih0aGlzW3RdPXRoaXNbdF0uYmluZCh0aGlzKSl9c2V0T3B0aW9ucyh0KXt0aGlzLm9wdGlvbnM9dD91KHt9LHRoaXMuY29uc3RydWN0b3IuZGVmYXVsdHMsdCk6e307Zm9yKGNvbnN0W3QsZV1vZiBPYmplY3QuZW50cmllcyh0aGlzLm9wdGlvbihcIm9uXCIpfHx7fSkpdGhpcy5vbih0LGUpfW9wdGlvbih0LC4uLmUpe2xldCBpPXAodCx0aGlzLm9wdGlvbnMpO3JldHVybiBpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBpJiYoaT1pLmNhbGwodGhpcyx0aGlzLC4uLmUpKSxpfW9wdGlvbkZvcih0LGUsaSwuLi5uKXtsZXQgcz1wKGUsdCk7dmFyIG87XCJzdHJpbmdcIiE9dHlwZW9mKG89cyl8fGlzTmFOKG8pfHxpc05hTihwYXJzZUZsb2F0KG8pKXx8KHM9cGFyc2VGbG9hdChzKSksXCJ0cnVlXCI9PT1zJiYocz0hMCksXCJmYWxzZVwiPT09cyYmKHM9ITEpLHMmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHMmJihzPXMuY2FsbCh0aGlzLHRoaXMsdCwuLi5uKSk7bGV0IGE9cChlLHRoaXMub3B0aW9ucyk7cmV0dXJuIGEmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGE/cz1hLmNhbGwodGhpcyx0aGlzLHQsLi4ubixzKTp2b2lkIDA9PT1zJiYocz1hKSx2b2lkIDA9PT1zP2k6c31jbih0KXtjb25zdCBlPXRoaXMub3B0aW9ucy5jbGFzc2VzO3JldHVybiBlJiZlW3RdfHxcIlwifWxvY2FsaXplKHQsZT1bXSl7dD1TdHJpbmcodCkucmVwbGFjZSgvXFx7XFx7KFxcdyspLj8oXFx3Kyk/XFx9XFx9L2csKCh0LGUsaSk9PntsZXQgbj1cIlwiO3JldHVybiBpP249dGhpcy5vcHRpb24oYCR7ZVswXStlLnRvTG93ZXJDYXNlKCkuc3Vic3RyaW5nKDEpfS5sMTBuLiR7aX1gKTplJiYobj10aGlzLm9wdGlvbihgbDEwbi4ke2V9YCkpLG58fChuPXQpLG59KSk7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspdD10LnNwbGl0KGVbaV1bMF0pLmpvaW4oZVtpXVsxXSk7cmV0dXJuIHQ9dC5yZXBsYWNlKC9cXHtcXHsoLio/KVxcfVxcfS9nLCgodCxlKT0+ZSkpfW9uKHQsZSl7bGV0IGk9W107XCJzdHJpbmdcIj09dHlwZW9mIHQ/aT10LnNwbGl0KFwiIFwiKTpBcnJheS5pc0FycmF5KHQpJiYoaT10KSx0aGlzLmV2ZW50c3x8KHRoaXMuZXZlbnRzPW5ldyBNYXApLGkuZm9yRWFjaCgodD0+e2xldCBpPXRoaXMuZXZlbnRzLmdldCh0KTtpfHwodGhpcy5ldmVudHMuc2V0KHQsW10pLGk9W10pLGkuaW5jbHVkZXMoZSl8fGkucHVzaChlKSx0aGlzLmV2ZW50cy5zZXQodCxpKX0pKX1vZmYodCxlKXtsZXQgaT1bXTtcInN0cmluZ1wiPT10eXBlb2YgdD9pPXQuc3BsaXQoXCIgXCIpOkFycmF5LmlzQXJyYXkodCkmJihpPXQpLGkuZm9yRWFjaCgodD0+e2NvbnN0IGk9dGhpcy5ldmVudHMuZ2V0KHQpO2lmKEFycmF5LmlzQXJyYXkoaSkpe2NvbnN0IHQ9aS5pbmRleE9mKGUpO3Q+LTEmJmkuc3BsaWNlKHQsMSl9fSkpfWVtaXQodCwuLi5lKXtbLi4udGhpcy5ldmVudHMuZ2V0KHQpfHxbXV0uZm9yRWFjaCgodD0+dCh0aGlzLC4uLmUpKSksXCIqXCIhPT10JiZ0aGlzLmVtaXQoXCIqXCIsdCwuLi5lKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KGYsXCJ2ZXJzaW9uXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOlwiNS4wLjM2XCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZixcImRlZmF1bHRzXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnt9fSk7Y2xhc3MgZyBleHRlbmRzIGZ7Y29uc3RydWN0b3IodD17fSl7c3VwZXIodCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJwbHVnaW5zXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnt9fSl9YXR0YWNoUGx1Z2lucyh0PXt9KXtjb25zdCBlPW5ldyBNYXA7Zm9yKGNvbnN0W2ksbl1vZiBPYmplY3QuZW50cmllcyh0KSl7Y29uc3QgdD10aGlzLm9wdGlvbihpKSxzPXRoaXMucGx1Z2luc1tpXTtzfHwhMT09PXQ/cyYmITE9PT10JiYocy5kZXRhY2goKSxkZWxldGUgdGhpcy5wbHVnaW5zW2ldKTplLnNldChpLG5ldyBuKHRoaXMsdHx8e30pKX1mb3IoY29uc3RbdCxpXW9mIGUpdGhpcy5wbHVnaW5zW3RdPWksaS5hdHRhY2goKX1kZXRhY2hQbHVnaW5zKHQpe3Q9dHx8T2JqZWN0LmtleXModGhpcy5wbHVnaW5zKTtmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PXRoaXMucGx1Z2luc1tlXTt0JiZ0LmRldGFjaCgpLGRlbGV0ZSB0aGlzLnBsdWdpbnNbZV19cmV0dXJuIHRoaXMuZW1pdChcImRldGFjaFBsdWdpbnNcIiksdGhpc319dmFyIG07IWZ1bmN0aW9uKHQpe3RbdC5Jbml0PTBdPVwiSW5pdFwiLHRbdC5FcnJvcj0xXT1cIkVycm9yXCIsdFt0LlJlYWR5PTJdPVwiUmVhZHlcIix0W3QuUGFubmluZz0zXT1cIlBhbm5pbmdcIix0W3QuTW91c2Vtb3ZlPTRdPVwiTW91c2Vtb3ZlXCIsdFt0LkRlc3Ryb3k9NV09XCJEZXN0cm95XCJ9KG18fChtPXt9KSk7Y29uc3Qgdj1bXCJhXCIsXCJiXCIsXCJjXCIsXCJkXCIsXCJlXCIsXCJmXCJdLGI9e1BBTlVQOlwiTW92ZSB1cFwiLFBBTkRPV046XCJNb3ZlIGRvd25cIixQQU5MRUZUOlwiTW92ZSBsZWZ0XCIsUEFOUklHSFQ6XCJNb3ZlIHJpZ2h0XCIsWk9PTUlOOlwiWm9vbSBpblwiLFpPT01PVVQ6XCJab29tIG91dFwiLFRPR0dMRVpPT006XCJUb2dnbGUgem9vbSBsZXZlbFwiLFRPR0dMRTFUTzE6XCJUb2dnbGUgem9vbSBsZXZlbFwiLElURVJBVEVaT09NOlwiVG9nZ2xlIHpvb20gbGV2ZWxcIixST1RBVEVDQ1c6XCJSb3RhdGUgY291bnRlcmNsb2Nrd2lzZVwiLFJPVEFURUNXOlwiUm90YXRlIGNsb2Nrd2lzZVwiLEZMSVBYOlwiRmxpcCBob3Jpem9udGFsbHlcIixGTElQWTpcIkZsaXAgdmVydGljYWxseVwiLEZJVFg6XCJGaXQgaG9yaXpvbn
1RhbGx5XCIsRklUWTpcIkZpdCB2ZXJ0aWNhbGx5XCIsUkVTRVQ6XCJSZXNldFwiLFRPR0dMRUZTOlwiVG9nZ2xlIGZ1bGxzY3JlZW5cIn0seT17Y29udGVudDpudWxsLHdpZHRoOlwiYXV0b1wiLGhlaWdodDpcImF1dG9cIixwYW5Nb2RlOlwiZHJhZ1wiLHRvdWNoOiEwLGRyYWdNaW5UaHJlc2hvbGQ6Myxsb2NrQXhpczohMSxtb3VzZU1vdmVGYWN0b3I6MSxtb3VzZU1vdmVGcmljdGlvbjouMTIsem9vbTohMCxwaW5jaFRvWm9vbTohMCxwYW5Pbmx5Wm9vbWVkOlwiYXV0b1wiLG1pblNjYWxlOjEsbWF4U2NhbGU6MixmcmljdGlvbjouMjUsZHJhZ0ZyaWN0aW9uOi4zNSxkZWNlbEZyaWN0aW9uOi4wNSxjbGljazpcInRvZ2dsZVpvb21cIixkYmxDbGljazohMSx3aGVlbDpcInpvb21cIix3aGVlbExpbWl0Ojcsc3Bpbm5lcjohMCxib3VuZHM6XCJhdXRvXCIsaW5maW5pdGU6ITEscnViYmVyYmFuZDohMCxib3VuY2U6ITAsbWF4VmVsb2NpdHk6NzUsdHJhbnNmb3JtUGFyZW50OiExLGNsYXNzZXM6e2NvbnRlbnQ6XCJmLXBhbnpvb21fX2NvbnRlbnRcIixpc0xvYWRpbmc6XCJpcy1sb2FkaW5nXCIsY2FuWm9vbUluOlwiY2FuLXpvb21faW5cIixjYW5ab29tT3V0OlwiY2FuLXpvb21fb3V0XCIsaXNEcmFnZ2FibGU6XCJpcy1kcmFnZ2FibGVcIixpc0RyYWdnaW5nOlwiaXMtZHJhZ2dpbmdcIixpbkZ1bGxzY3JlZW46XCJpbi1mdWxsc2NyZWVuXCIsaHRtbEhhc0Z1bGxzY3JlZW46XCJ3aXRoLXBhbnpvb20taW4tZnVsbHNjcmVlblwifSxsMTBuOmJ9LHc9JzxjaXJjbGUgY3g9XCIyNVwiIGN5PVwiMjVcIiByPVwiMjBcIj48L2NpcmNsZT4nLHg9JzxkaXYgY2xhc3M9XCJmLXNwaW5uZXJcIj48c3ZnIHZpZXdCb3g9XCIwIDAgNTAgNTBcIj4nK3crdytcIjwvc3ZnPjwvZGl2PlwiLEU9dD0+dCYmbnVsbCE9PXQmJnQgaW5zdGFuY2VvZiBFbGVtZW50JiZcIm5vZGVUeXBlXCJpbiB0LFM9KHQsZSk9Pnt0JiZzKGUpLmZvckVhY2goKGU9Pnt0LmNsYXNzTGlzdC5yZW1vdmUoZSl9KSl9LFA9KHQsZSk9Pnt0JiZzKGUpLmZvckVhY2goKGU9Pnt0LmNsYXNzTGlzdC5hZGQoZSl9KSl9LEM9e2E6MSxiOjAsYzowLGQ6MSxlOjAsZjowfSxUPTFlNSxNPTFlNCxPPVwibW91c2Vtb3ZlXCIsQT1cImRyYWdcIixMPVwiY29udGVudFwiLHo9XCJhdXRvXCI7bGV0IFI9bnVsbCxrPW51bGw7Y2xhc3MgSSBleHRlbmRzIGd7Z2V0IGZpdHMoKXtyZXR1cm4gdGhpcy5jb250ZW50UmVjdC53aWR0aC10aGlzLmNvbnRlbnRSZWN0LmZpdFdpZHRoPDEmJnRoaXMuY29udGVudFJlY3QuaGVpZ2h0LXRoaXMuY29udGVudFJlY3QuZml0SGVpZ2h0PDF9Z2V0IGlzVG91Y2hEZXZpY2UoKXtyZXR1cm4gbnVsbD09PWsmJihrPXdpbmRvdy5tYXRjaE1lZGlhKFwiKGhvdmVyOiBub25lKVwiKS5tYXRjaGVzKSxrfWdldCBpc01vYmlsZSgpe3JldHVybiBudWxsPT09UiYmKFI9L2lQaG9uZXxpUGFkfGlQb2R8QW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkpLFJ9Z2V0IHBhbk1vZGUoKXtyZXR1cm4gdGhpcy5vcHRpb25zLnBhbk1vZGUhPT1PfHx0aGlzLmlzVG91Y2hEZXZpY2U/QTpPfWdldCBwYW5Pbmx5Wm9vbWVkKCl7Y29uc3QgdD10aGlzLm9wdGlvbnMucGFuT25seVpvb21lZDtyZXR1cm4gdD09PXo/dGhpcy5pc1RvdWNoRGV2aWNlOnR9Z2V0IGlzSW5maW5pdGUoKXtyZXR1cm4gdGhpcy5vcHRpb24oXCJpbmZpbml0ZVwiKX1nZXQgYW5nbGUoKXtyZXR1cm4gMTgwKk1hdGguYXRhbjIodGhpcy5jdXJyZW50LmIsdGhpcy5jdXJyZW50LmEpL01hdGguUEl8fDB9Z2V0IHRhcmdldEFuZ2xlKCl7cmV0dXJuIDE4MCpNYXRoLmF0YW4yKHRoaXMudGFyZ2V0LmIsdGhpcy50YXJnZXQuYSkvTWF0aC5QSXx8MH1nZXQgc2NhbGUoKXtjb25zdHthOnQsYjplfT10aGlzLmN1cnJlbnQ7cmV0dXJuIE1hdGguc3FydCh0KnQrZSplKXx8MX1nZXQgdGFyZ2V0U2NhbGUoKXtjb25zdHthOnQsYjplfT10aGlzLnRhcmdldDtyZXR1cm4gTWF0aC5zcXJ0KHQqdCtlKmUpfHwxfWdldCBtaW5TY2FsZSgpe3JldHVybiB0aGlzLm9wdGlvbihcIm1pblNjYWxlXCIpfHwxfWdldCBmdWxsU2NhbGUoKXtjb25zdHtjb250ZW50UmVjdDp0fT10aGlzO3JldHVybiB0LmZ1bGxXaWR0aC90LmZpdFdpZHRofHwxfWdldCBtYXhTY2FsZSgpe3JldHVybiB0aGlzLmZ1bGxTY2FsZSoodGhpcy5vcHRpb24oXCJtYXhTY2FsZVwiKXx8MSl8fDF9Z2V0IGNvdmVyU2NhbGUoKXtjb25zdHtjb250YWluZXJSZWN0OnQsY29udGVudFJlY3Q6ZX09dGhpcyxpPU1hdGgubWF4KHQuaGVpZ2h0L2UuZml0SGVpZ2h0LHQud2lkdGgvZS5maXRXaWR0aCl8fDE7cmV0dXJuIE1hdGgubWluKHRoaXMuZnVsbFNjYWxlLGkpfWdldCBpc1NjYWxpbmcoKXtyZXR1cm4gTWF0aC5hYnModGhpcy50YXJnZXRTY2FsZS10aGlzLnNjYWxlKT4xZS01JiYhdGhpcy5pc1Jlc3Rpbmd9Z2V0IGlzQ29udGVudExvYWRpbmcoKXtjb25zdCB0PXRoaXMuY29udGVudDtyZXR1cm4hISh0JiZ0IGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCkmJiF0LmNvbXBsZXRlfWdldCBpc1Jlc3RpbmcoKXtpZih0aGlzLmlzQm91bmNpbmdYfHx0aGlzLmlzQm91bmNpbmdZKXJldHVybiExO2Zvcihjb25zdCB0IG9mIHYpe2NvbnN0IGU9XCJlXCI9PXR8fFwiZlwiPT09dD8xZS00OjFlLTU7aWYoTWF0aC5hYnModGhpcy50YXJnZXRbdF0tdGhpcy5jdXJyZW50W3RdKT5lKXJldHVybiExfXJldHVybiEoIXRoaXMuaWdub3JlQm91bmRzJiYhdGhpcy5jaGVja0JvdW5kcygpLmluQm91bmRzKX1jb25zdHJ1Y3Rvcih0LGU9e30saT17fSl7dmFyIHM7aWYoc3VwZXIoZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJwb2ludGVyVHJhY2tlclwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJyZXNpemVPYnNlcnZlclwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJ1cGRhdGVUaW1lclwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJjbGlja1RpbWVyXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInJBRlwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJpc1RpY2tpbmdcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ITF9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImlnbm9yZUJvdW5kc1wiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiaXNCb3VuY2luZ1hcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ITF9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImlzQm91bmNpbmdZXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOiExfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJjbGlja3NcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6MH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwidHJhY2tpbmdQb2ludHNcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6W119KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInB3dFwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTowfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJjd2RcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6MH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicG1tZVwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImZyaWN0aW9uXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOjB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInN0YXRlXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm0uSW5pdH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiaXNEcmFnZ2luZ1wiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiY29udGFpbmVyXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiY29udGVudFwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp2b2lkIDB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInNwaW5uZXJcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiY29udGFpbmVyUmVjdFwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp7d2lkdGg6MCxoZWlnaHQ6MCxpbm5lcldpZHRoOjAsaW5uZXJIZWlnaHQ6MH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImNvbnRlbn
1RSZWN0XCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MCxmdWxsV2lkdGg6MCxmdWxsSGVpZ2h0OjAsZml0V2lkdGg6MCxmaXRIZWlnaHQ6MCx3aWR0aDowLGhlaWdodDowfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiZHJhZ1N0YXJ0XCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnt4OjAseTowLHRvcDowLGxlZnQ6MCx0aW1lOjB9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJkcmFnT2Zmc2V0XCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnt4OjAseTowLHRpbWU6MH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImN1cnJlbnRcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6T2JqZWN0LmFzc2lnbih7fSxDKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwidGFyZ2V0XCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOk9iamVjdC5hc3NpZ24oe30sQyl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInZlbG9jaXR5XCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnthOjAsYjowLGM6MCxkOjAsZTowLGY6MH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImxvY2tlZEF4aXNcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ITF9KSwhdCl0aHJvdyBuZXcgRXJyb3IoXCJDb250YWluZXIgRWxlbWVudCBOb3QgRm91bmRcIik7dGhpcy5jb250YWluZXI9dCx0aGlzLmluaXRDb250ZW50KCksdGhpcy5hdHRhY2hQbHVnaW5zKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxJLlBsdWdpbnMpLGkpKSx0aGlzLmVtaXQoXCJhdHRhY2hQbHVnaW5zXCIpLHRoaXMuZW1pdChcImluaXRcIik7Y29uc3Qgbz10aGlzLmNvbnRlbnQ7aWYoby5hZGRFdmVudExpc3RlbmVyKFwibG9hZFwiLHRoaXMub25Mb2FkKSxvLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLHRoaXMub25FcnJvciksdGhpcy5pc0NvbnRlbnRMb2FkaW5nKXtpZih0aGlzLm9wdGlvbihcInNwaW5uZXJcIikpe3QuY2xhc3NMaXN0LmFkZCh0aGlzLmNuKFwiaXNMb2FkaW5nXCIpKTtjb25zdCBlPW4oeCk7IXQuY29udGFpbnMobyl8fG8ucGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIEhUTUxQaWN0dXJlRWxlbWVudD90aGlzLnNwaW5uZXI9dC5hcHBlbmRDaGlsZChlKTp0aGlzLnNwaW5uZXI9KG51bGw9PT0ocz1vLnBhcmVudEVsZW1lbnQpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLmluc2VydEJlZm9yZShlLG8pKXx8bnVsbH10aGlzLmVtaXQoXCJiZWZvcmVMb2FkXCIpfWVsc2UgcXVldWVNaWNyb3Rhc2soKCgpPT57dGhpcy5lbmFibGUoKX0pKX1pbml0Q29udGVudCgpe2NvbnN0e2NvbnRhaW5lcjp0fT10aGlzLGU9dGhpcy5jbihMKTtsZXQgaT10aGlzLm9wdGlvbihMKXx8dC5xdWVyeVNlbGVjdG9yKGAuJHtlfWApO2lmKGl8fChpPXQucXVlcnlTZWxlY3RvcihcImltZyxwaWN0dXJlXCIpfHx0LmZpcnN0RWxlbWVudENoaWxkLGkmJlAoaSxlKSksaSBpbnN0YW5jZW9mIEhUTUxQaWN0dXJlRWxlbWVudCYmKGk9aS5xdWVyeVNlbGVjdG9yKFwiaW1nXCIpKSwhaSl0aHJvdyBuZXcgRXJyb3IoXCJObyBjb250ZW50IGZvdW5kXCIpO3RoaXMuY29udGVudD1pfW9uTG9hZCgpe2NvbnN0e3NwaW5uZXI6dCxjb250YWluZXI6ZSxzdGF0ZTppfT10aGlzO3QmJih0LnJlbW92ZSgpLHRoaXMuc3Bpbm5lcj1udWxsKSx0aGlzLm9wdGlvbihcInNwaW5uZXJcIikmJmUuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmNuKFwiaXNMb2FkaW5nXCIpKSx0aGlzLmVtaXQoXCJhZnRlckxvYWRcIiksaT09PW0uSW5pdD90aGlzLmVuYWJsZSgpOnRoaXMudXBkYXRlTWV0cmljcygpfW9uRXJyb3IoKXt0aGlzLnN0YXRlIT09bS5EZXN0cm95JiYodGhpcy5zcGlubmVyJiYodGhpcy5zcGlubmVyLnJlbW92ZSgpLHRoaXMuc3Bpbm5lcj1udWxsKSx0aGlzLnN0b3AoKSx0aGlzLmRldGFjaEV2ZW50cygpLHRoaXMuc3RhdGU9bS5FcnJvcix0aGlzLmVtaXQoXCJlcnJvclwiKSl9Z2V0TmV4dFNjYWxlKHQpe2NvbnN0e2Z1bGxTY2FsZTplLHRhcmdldFNjYWxlOmksY292ZXJTY2FsZTpuLG1heFNjYWxlOnMsbWluU2NhbGU6b309dGhpcztsZXQgYT1vO3N3aXRjaCh0KXtjYXNlXCJ0b2dnbGVNYXhcIjphPWktbzwuNSoocy1vKT9zOm87YnJlYWs7Y2FzZVwidG9nZ2xlQ292ZXJcIjphPWktbzwuNSoobi1vKT9uOm87YnJlYWs7Y2FzZVwidG9nZ2xlWm9vbVwiOmE9aS1vPC41KihlLW8pP2U6bzticmVhaztjYXNlXCJpdGVyYXRlWm9vbVwiOmxldCB0PVsxLGUsc10uc29ydCgoKHQsZSk9PnQtZSkpLHI9dC5maW5kSW5kZXgoKHQ9PnQ+aSsxZS01KSk7YT10W3JdfHwxfXJldHVybiBhfWF0dGFjaE9ic2VydmVyKCl7dmFyIHQ7Y29uc3QgZT0oKT0+e2NvbnN0e2NvbnRhaW5lcjp0LGNvbnRhaW5lclJlY3Q6ZX09dGhpcztyZXR1cm4gTWF0aC5hYnMoZS53aWR0aC10LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoKT4uMXx8TWF0aC5hYnMoZS5oZWlnaHQtdC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQpPi4xfTt0aGlzLnJlc2l6ZU9ic2VydmVyfHx2b2lkIDA9PT13aW5kb3cuUmVzaXplT2JzZXJ2ZXJ8fCh0aGlzLnJlc2l6ZU9ic2VydmVyPW5ldyBSZXNpemVPYnNlcnZlcigoKCk9Pnt0aGlzLnVwZGF0ZVRpbWVyfHwoZSgpPyh0aGlzLm9uUmVzaXplKCksdGhpcy5pc01vYmlsZSYmKHRoaXMudXBkYXRlVGltZXI9c2V0VGltZW91dCgoKCk9PntlKCkmJnRoaXMub25SZXNpemUoKSx0aGlzLnVwZGF0ZVRpbWVyPW51bGx9KSw1MDApKSk6dGhpcy51cGRhdGVUaW1lciYmKGNsZWFyVGltZW91dCh0aGlzLnVwZGF0ZVRpbWVyKSx0aGlzLnVwZGF0ZVRpbWVyPW51bGwpKX0pKSksbnVsbD09PSh0PXRoaXMucmVzaXplT2JzZXJ2ZXIpfHx2b2lkIDA9PT10fHx0Lm9ic2VydmUodGhpcy5jb250YWluZXIpfWRldGFjaE9ic2VydmVyKCl7dmFyIHQ7bnVsbD09PSh0PXRoaXMucmVzaXplT2JzZXJ2ZXIpfHx2b2lkIDA9PT10fHx0LmRpc2Nvbm5lY3QoKX1hdHRhY2hFdmVudHMoKXtjb25zdHtjb250YWluZXI6dH09dGhpczt0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHRoaXMub25DbGljayx7cGFzc2l2ZTohMSxjYXB0dXJlOiExfSksdC5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIix0aGlzLm9uV2hlZWwse3Bhc3NpdmU6ITF9KSx0aGlzLnBvaW50ZXJUcmFja2VyPW5ldyBsKHQse3N0YXJ0OnRoaXMub25Qb2ludGVyRG93bixtb3ZlOnRoaXMub25Qb2ludGVyTW92ZSxlbmQ6dGhpcy5vblBvaW50ZXJVcH0pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoTyx0aGlzLm9uTW91c2VNb3ZlKX1kZXRhY2hFdmVudHMoKXt2YXIgdDtjb25zdHtjb250YWluZXI6ZX09dGhpcztlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHRoaXMub25DbGljayx7cGFzc2l2ZTohMSxjYXB0dXJlOiExfSksZS5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIix0aGlzLm9uV2hlZWwse3Bhc3NpdmU6ITF9KSxudWxsPT09KHQ9dGhpcy5wb2ludGVyVHJhY2tlcil8fHZvaWQgMD09PXR8fHQuc3RvcCgpLHRoaXMucG9pbnRlclRyYWNrZXI9bnVsbCxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKE8sdGhpcy5vbk1vdXNlTW92ZSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIix0aGlzLm9uS2V5ZG93biwhMCksdGhpcy5jbGlja1RpbWVyJiYoY2xlYXJUaW1lb3V0KHRoaXMuY2xpY2tUaW1lciksdGhpcy5jbGlja1RpbWVyPW51bGwpLHRoaXMudXBkYXRlVGltZXImJihjbGVhclRpbWVvdXQodGhpcy51cGRhdGVUaW1lciksdGhpcy51cGRhdGVUaW1lcj1udWxsKX1hbmltYXRlKCl7dGhpcy5zZXRUYXJnZXRGb3JjZSgpO2NvbnN0IHQ9dGhpcy5mcmljdGlvbixlPXRoaXMub3B0aW9uKFwibWF4VmVsb2NpdHlcIik7Zm9yKGNvbnN0IGkgb2Ygdil0Pyh0aGlzLnZlbG9jaXR5W2ldKj0xLXQsZSYmIXRoaXMuaXNTY2FsaW5nJiYodGhpcy52ZWxvY2l0eVtpXT1NYXRoLm1heChNYXRoLm1pbih0aGlzLnZlbG9jaXR5W2ldLGUpLC0xKmUpKSx0aGlzLmN1cnJlbnRbaV0rPXRoaXMudmVsb2NpdHlbaV0pOnRoaXMuY3VycmVudFtpXT10aGlzLnRhcmdldFtpXTt0aGlzLnNldFRyYW5zZm9ybSgpLH
1RoaXMuc2V0RWRnZUZvcmNlKCksIXRoaXMuaXNSZXN0aW5nfHx0aGlzLmlzRHJhZ2dpbmc/dGhpcy5yQUY9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+dGhpcy5hbmltYXRlKCkpKTp0aGlzLnN0b3AoXCJjdXJyZW50XCIpfXNldFRhcmdldEZvcmNlKCl7Zm9yKGNvbnN0IHQgb2YgdilcImVcIj09PXQmJnRoaXMuaXNCb3VuY2luZ1h8fFwiZlwiPT09dCYmdGhpcy5pc0JvdW5jaW5nWXx8KHRoaXMudmVsb2NpdHlbdF09KDEvKDEtdGhpcy5mcmljdGlvbiktMSkqKHRoaXMudGFyZ2V0W3RdLXRoaXMuY3VycmVudFt0XSkpfWNoZWNrQm91bmRzKHQ9MCxlPTApe2NvbnN0e2N1cnJlbnQ6aX09dGhpcyxuPWkuZSt0LHM9aS5mK2Usbz10aGlzLmdldEJvdW5kcygpLHt4OmEseTpyfT1vLGw9YS5taW4sYz1hLm1heCxoPXIubWluLGQ9ci5tYXg7bGV0IHU9MCxwPTA7cmV0dXJuIGwhPT0xLzAmJm48bD91PWwtbjpjIT09MS8wJiZuPmMmJih1PWMtbiksaCE9PTEvMCYmczxoP3A9aC1zOmQhPT0xLzAmJnM+ZCYmKHA9ZC1zKSxNYXRoLmFicyh1KTwxZS00JiYodT0wKSxNYXRoLmFicyhwKTwxZS00JiYocD0wKSxPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sbykse3hEaWZmOnUseURpZmY6cCxpbkJvdW5kczohdSYmIXB9KX1jbGFtcFRhcmdldEJvdW5kcygpe2NvbnN0e3RhcmdldDp0fT10aGlzLHt4OmUseTppfT10aGlzLmdldEJvdW5kcygpO2UubWluIT09MS8wJiYodC5lPU1hdGgubWF4KHQuZSxlLm1pbikpLGUubWF4IT09MS8wJiYodC5lPU1hdGgubWluKHQuZSxlLm1heCkpLGkubWluIT09MS8wJiYodC5mPU1hdGgubWF4KHQuZixpLm1pbikpLGkubWF4IT09MS8wJiYodC5mPU1hdGgubWluKHQuZixpLm1heCkpfWNhbGN1bGF0ZUNvbnRlbnREaW0odD10aGlzLmN1cnJlbnQpe2NvbnN0e2NvbnRlbnQ6ZSxjb250ZW50UmVjdDppfT10aGlzLHtmaXRXaWR0aDpuLGZpdEhlaWdodDpzLGZ1bGxXaWR0aDpvLGZ1bGxIZWlnaHQ6YX09aTtsZXQgcj1vLGw9YTtpZih0aGlzLm9wdGlvbihcInpvb21cIil8fDAhPT10aGlzLmFuZ2xlKXtjb25zdCBpPSEoZSBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQpJiYoXCJub25lXCI9PT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKS5tYXhXaWR0aHx8XCJub25lXCI9PT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlKS5tYXhIZWlnaHQpLGM9aT9vOm4saD1pP2E6cyxkPXRoaXMuZ2V0TWF0cml4KHQpLHU9bmV3IERPTVBvaW50KDAsMCkubWF0cml4VHJhbnNmb3JtKGQpLHA9bmV3IERPTVBvaW50KDArYywwKS5tYXRyaXhUcmFuc2Zvcm0oZCksZj1uZXcgRE9NUG9pbnQoMCtjLDAraCkubWF0cml4VHJhbnNmb3JtKGQpLGc9bmV3IERPTVBvaW50KDAsMCtoKS5tYXRyaXhUcmFuc2Zvcm0oZCksbT1NYXRoLmFicyhmLngtdS54KSx2PU1hdGguYWJzKGYueS11LnkpLGI9TWF0aC5hYnMoZy54LXAueCkseT1NYXRoLmFicyhnLnktcC55KTtyPU1hdGgubWF4KG0sYiksbD1NYXRoLm1heCh2LHkpfXJldHVybntjb250ZW50V2lkdGg6cixjb250ZW50SGVpZ2h0Omx9fXNldEVkZ2VGb3JjZSgpe2lmKHRoaXMuaWdub3JlQm91bmRzfHx0aGlzLmlzRHJhZ2dpbmd8fHRoaXMucGFuTW9kZT09PU98fHRoaXMudGFyZ2V0U2NhbGU8dGhpcy5zY2FsZSlyZXR1cm4gdGhpcy5pc0JvdW5jaW5nWD0hMSx2b2lkKHRoaXMuaXNCb3VuY2luZ1k9ITEpO2NvbnN0e3RhcmdldDp0fT10aGlzLHt4OmUseTppLHhEaWZmOm4seURpZmY6c309dGhpcy5jaGVja0JvdW5kcygpO2NvbnN0IG89dGhpcy5vcHRpb24oXCJtYXhWZWxvY2l0eVwiKTtsZXQgYT10aGlzLnZlbG9jaXR5LmUscj10aGlzLnZlbG9jaXR5LmY7MCE9PW4/KHRoaXMuaXNCb3VuY2luZ1g9ITAsbiphPD0wP2ErPS4xNCpuOihhPS4xNCpuLGUubWluIT09MS8wJiYodGhpcy50YXJnZXQuZT1NYXRoLm1heCh0LmUsZS5taW4pKSxlLm1heCE9PTEvMCYmKHRoaXMudGFyZ2V0LmU9TWF0aC5taW4odC5lLGUubWF4KSkpLG8mJihhPU1hdGgubWF4KE1hdGgubWluKGEsbyksLTEqbykpKTp0aGlzLmlzQm91bmNpbmdYPSExLDAhPT1zPyh0aGlzLmlzQm91bmNpbmdZPSEwLHMqcjw9MD9yKz0uMTQqczoocj0uMTQqcyxpLm1pbiE9PTEvMCYmKHRoaXMudGFyZ2V0LmY9TWF0aC5tYXgodC5mLGkubWluKSksaS5tYXghPT0xLzAmJih0aGlzLnRhcmdldC5mPU1hdGgubWluKHQuZixpLm1heCkpKSxvJiYocj1NYXRoLm1heChNYXRoLm1pbihyLG8pLC0xKm8pKSk6dGhpcy5pc0JvdW5jaW5nWT0hMSx0aGlzLmlzQm91bmNpbmdYJiYodGhpcy52ZWxvY2l0eS5lPWEpLHRoaXMuaXNCb3VuY2luZ1kmJih0aGlzLnZlbG9jaXR5LmY9cil9ZW5hYmxlKCl7Y29uc3R7Y29udGVudDp0fT10aGlzLGU9bmV3IERPTU1hdHJpeFJlYWRPbmx5KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHQpLnRyYW5zZm9ybSk7Zm9yKGNvbnN0IHQgb2Ygdil0aGlzLmN1cnJlbnRbdF09dGhpcy50YXJnZXRbdF09ZVt0XTt0aGlzLnVwZGF0ZU1ldHJpY3MoKSx0aGlzLmF0dGFjaE9ic2VydmVyKCksdGhpcy5hdHRhY2hFdmVudHMoKSx0aGlzLnN0YXRlPW0uUmVhZHksdGhpcy5lbWl0KFwicmVhZHlcIil9b25DbGljayh0KXt2YXIgZTtcImNsaWNrXCI9PT10LnR5cGUmJjA9PT10LmRldGFpbCYmKHRoaXMuZHJhZ09mZnNldC54PTAsdGhpcy5kcmFnT2Zmc2V0Lnk9MCksdGhpcy5pc0RyYWdnaW5nJiYobnVsbD09PShlPXRoaXMucG9pbnRlclRyYWNrZXIpfHx2b2lkIDA9PT1lfHxlLmNsZWFyKCksdGhpcy50cmFja2luZ1BvaW50cz1bXSx0aGlzLnN0YXJ0RGVjZWxBbmltKCkpO2NvbnN0IGk9dC50YXJnZXQ7aWYoIWl8fHQuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYoaS5oYXNBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSlyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLHZvaWQgdC5zdG9wUHJvcGFnYXRpb24oKTtpZigoKCk9Pntjb25zdCB0PXdpbmRvdy5nZXRTZWxlY3Rpb24oKTtyZXR1cm4gdCYmXCJSYW5nZVwiPT09dC50eXBlfSkoKSYmIWkuY2xvc2VzdChcImJ1dHRvblwiKSlyZXR1cm47Y29uc3Qgbj1pLmNsb3Nlc3QoXCJbZGF0YS1wYW56b29tLWFjdGlvbl1cIikscz1pLmNsb3Nlc3QoXCJbZGF0YS1wYW56b29tLWNoYW5nZV1cIiksbz1ufHxzLGE9byYmRShvKT9vLmRhdGFzZXQ6bnVsbDtpZihhKXtjb25zdCBlPWEucGFuem9vbUNoYW5nZSxpPWEucGFuem9vbUFjdGlvbjtpZigoZXx8aSkmJnQucHJldmVudERlZmF1bHQoKSxlKXtsZXQgdD17fTt0cnl7dD1KU09OLnBhcnNlKGUpfWNhdGNoKHQpe2NvbnNvbGUmJmNvbnNvbGUud2FybihcIlRoZSBnaXZlbiBkYXRhIHdhcyBub3QgdmFsaWQgSlNPTlwiKX1yZXR1cm4gdm9pZCB0aGlzLmFwcGx5Q2hhbmdlKHQpfWlmKGkpcmV0dXJuIHZvaWQodGhpc1tpXSYmdGhpc1tpXSgpKX1pZihNYXRoLmFicyh0aGlzLmRyYWdPZmZzZXQueCk+M3x8TWF0aC5hYnModGhpcy5kcmFnT2Zmc2V0LnkpPjMpcmV0dXJuIHQucHJldmVudERlZmF1bHQoKSx2b2lkIHQuc3RvcFByb3BhZ2F0aW9uKCk7aWYoaS5jbG9zZXN0KFwiW2RhdGEtZmFuY3lib3hdXCIpKXJldHVybjtjb25zdCByPXRoaXMuY29udGVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxsPXRoaXMuZHJhZ1N0YXJ0O2lmKGwudGltZSYmIXRoaXMuY2FuWm9vbU91dCgpJiYoTWF0aC5hYnMoci54LWwueCk+Mnx8TWF0aC5hYnMoci55LWwueSk+MikpcmV0dXJuO3RoaXMuZHJhZ1N0YXJ0LnRpbWU9MDtjb25zdCBjPWU9Pnt0aGlzLm9wdGlvbihcInpvb21cIix0KSYmZSYmXCJzdHJpbmdcIj09dHlwZW9mIGUmJi8oaXRlcmF0ZVpvb20pfCh0b2dnbGUoWm9vbXxGdWxsfENvdmVyfE1heCl8KHpvb21UbyhGaXR8Q292ZXJ8TWF4KSkpLy50ZXN0KGUpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzW2VdJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXNbZV0oe2V2ZW50OnR9KSl9LGg9dGhpcy5vcHRpb24oXCJjbGlja1wiLHQpLGQ9dGhpcy5vcHRpb24oXCJkYmxDbGlja1wiLHQpO2Q/KHRoaXMuY2xpY2tzKyssMT09dGhpcy5jbGlja3MmJih0aGlzLmNsaWNrVGltZXI9c2V0VGltZW91dCgoKCk9PnsxPT09dGhpcy5jbGlja3M/KHRoaXMuZW1pdChcImNsaWNrXCIsdCksIXQuZGVmYXVsdFByZXZlbn
1RlZCYmaCYmYyhoKSk6KHRoaXMuZW1pdChcImRibENsaWNrXCIsdCksdC5kZWZhdWx0UHJldmVudGVkfHxjKGQpKSx0aGlzLmNsaWNrcz0wLHRoaXMuY2xpY2tUaW1lcj1udWxsfSksMzUwKSkpOih0aGlzLmVtaXQoXCJjbGlja1wiLHQpLCF0LmRlZmF1bHRQcmV2ZW50ZWQmJmgmJmMoaCkpfWFkZFRyYWNraW5nUG9pbnQodCl7Y29uc3QgZT10aGlzLnRyYWNraW5nUG9pbnRzLmZpbHRlcigodD0+dC50aW1lPkRhdGUubm93KCktMTAwKSk7ZS5wdXNoKHQpLHRoaXMudHJhY2tpbmdQb2ludHM9ZX1vblBvaW50ZXJEb3duKHQsZSxpKXt2YXIgbjtpZighMT09PXRoaXMub3B0aW9uKFwidG91Y2hcIix0KSlyZXR1cm4hMTt0aGlzLnB3dD0wLHRoaXMuZHJhZ09mZnNldD17eDowLHk6MCx0aW1lOjB9LHRoaXMudHJhY2tpbmdQb2ludHM9W107Y29uc3Qgcz10aGlzLmNvbnRlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYodGhpcy5kcmFnU3RhcnQ9e3g6cy54LHk6cy55LHRvcDpzLnRvcCxsZWZ0OnMubGVmdCx0aW1lOkRhdGUubm93KCl9LHRoaXMuY2xpY2tUaW1lcilyZXR1cm4hMTtpZih0aGlzLnBhbk1vZGU9PT1PJiZ0aGlzLnRhcmdldFNjYWxlPjEpcmV0dXJuIHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpLCExO2NvbnN0IG89dC5jb21wb3NlZFBhdGgoKVswXTtpZighaS5sZW5ndGgpe2lmKFtcIlRFWFRBUkVBXCIsXCJPUFRJT05cIixcIklOUFVUXCIsXCJTRUxFQ1RcIixcIlZJREVPXCIsXCJJRlJBTUVcIl0uaW5jbHVkZXMoby5ub2RlTmFtZSl8fG8uY2xvc2VzdChcIltjb250ZW50ZWRpdGFibGVdLFtkYXRhLXNlbGVjdGFibGVdLFtkYXRhLWRyYWdnYWJsZV0sW2RhdGEtY2xpY2thYmxlXSxbZGF0YS1wYW56b29tLWNoYW5nZV0sW2RhdGEtcGFuem9vbS1hY3Rpb25dXCIpKXJldHVybiExO251bGw9PT0obj13aW5kb3cuZ2V0U2VsZWN0aW9uKCkpfHx2b2lkIDA9PT1ufHxuLnJlbW92ZUFsbFJhbmdlcygpfWlmKFwibW91c2Vkb3duXCI9PT10LnR5cGUpW1wiQVwiLFwiQlVUVE9OXCJdLmluY2x1ZGVzKG8ubm9kZU5hbWUpfHx0LnByZXZlbn
1REZWZhdWx0KCk7ZWxzZSBpZihNYXRoLmFicyh0aGlzLnZlbG9jaXR5LmEpPi4zKXJldHVybiExO3JldHVybiB0aGlzLnRhcmdldC5lPXRoaXMuY3VycmVudC5lLHRoaXMudGFyZ2V0LmY9dGhpcy5jdXJyZW50LmYsdGhpcy5zdG9wKCksdGhpcy5pc0RyYWdnaW5nfHwodGhpcy5pc0RyYWdnaW5nPSEwLHRoaXMuYWRkVHJhY2tpbmdQb2ludChlKSx0aGlzLmVtaXQoXCJ0b3VjaFN0YXJ0XCIsdCkpLCEwfW9uUG9pbnRlck1vdmUoZSxuLHMpe2lmKCExPT09dGhpcy5vcHRpb24oXCJ0b3VjaFwiLGUpKXJldHVybjtpZighdGhpcy5pc0RyYWdnaW5nKXJldHVybjtpZihuLmxlbmd0aDwyJiZ0aGlzLnBhbk9ubHlab29tZWQmJnQodGhpcy50YXJnZXRTY2FsZSk8PXQodGhpcy5taW5TY2FsZSkpcmV0dXJuO2lmKHRoaXMuZW1pdChcInRvdWNoTW92ZVwiLGUpLGUuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47dGhpcy5hZGRUcmFja2luZ1BvaW50KG5bMF0pO2NvbnN0e2NvbnRlbnQ6b309dGhpcyxhPWgoc1swXSxzWzFdKSxyPWgoblswXSxuWzFdKTtsZXQgbD0wLGQ9MDtpZihuLmxlbmd0aD4xKXtjb25zdCB0PW8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bD1hLmNsaWVudFgtdC5sZWZ0LS41KnQud2lkdGgsZD1hLmNsaWVudFktdC50b3AtLjUqdC5oZWlnaHR9Y29uc3QgdT1jKHNbMF0sc1sxXSkscD1jKG5bMF0sblsxXSk7bGV0IGY9dT9wL3U6MSxnPXIuY2xpZW50WC1hLmNsaWVudFgsbT1yLmNsaWVudFktYS5jbGllbnRZO3RoaXMuZHJhZ09mZnNldC54Kz1nLHRoaXMuZHJhZ09mZnNldC55Kz1tLHRoaXMuZHJhZ09mZnNldC50aW1lPURhdGUubm93KCktdGhpcy5kcmFnU3RhcnQudGltZTtsZXQgdj10KHRoaXMudGFyZ2V0U2NhbGUpPT09dCh0aGlzLm1pblNjYWxlKSYmdGhpcy5vcHRpb24oXCJsb2NrQXhpc1wiKTtpZih2JiYhdGhpcy5sb2NrZWRBeGlzKWlmKFwieHlcIj09PXZ8fFwieVwiPT09dnx8XCJ0b3VjaG1vdmVcIj09PWUudHlwZSl7aWYoTWF0aC5hYnModGhpcy5kcmFnT2Zmc2V0LngpPDYmJk1hdGguYWJzKHRoaXMuZHJhZ09mZnNldC55KTw2KXJldHVybiB2b2lkIGUucHJldmVudERlZmF1bHQoKTtjb25zdCB0PU1hdGguYWJzKDE4MCpNYXRoLmF0YW4yKHRoaXMuZHJhZ09mZnNldC55LHRoaXMuZHJhZ09mZnNldC54KS9NYXRoLlBJKTt0aGlzLmxvY2tlZEF4aXM9dD40NSYmdDwxMzU/XCJ5XCI6XCJ4XCIsdGhpcy5kcmFnT2Zmc2V0Lng9MCx0aGlzLmRyYWdPZmZzZXQueT0wLGc9MCxtPTB9ZWxzZSB0aGlzLmxvY2tlZEF4aXM9djtpZihpKGUudGFyZ2V0LHRoaXMuY29udGVudCkmJih2PVwieFwiLHRoaXMuZHJhZ09mZnNldC55PTApLHYmJlwieHlcIiE9PXYmJnRoaXMubG9ja2VkQXhpcyE9PXYmJnQodGhpcy50YXJnZXRTY2FsZSk9PT10KHRoaXMubWluU2NhbGUpKXJldHVybjtlLmNhbmNlbGFibG
1UmJmUucHJldmVudERlZmF1bHQoKSx0aGlzLmNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKHRoaXMuY24oXCJpc0RyYWdnaW5nXCIpKTtjb25zdCBiPXRoaXMuY2hlY2tCb3VuZHMoZyxtKTt0aGlzLm9wdGlvbihcInJ1YmJlcmJhbmRcIik/KFwieFwiIT09dGhpcy5pc0luZmluaXRlJiYoYi54RGlmZj4wJiZnPDB8fGIueERpZmY8MCYmZz4wKSYmKGcqPU1hdGgubWF4KDAsLjUtTWF0aC5hYnMoLjc1L3RoaXMuY29udGVudFJlY3QuZml0V2lkdGgqYi54RGlmZikpKSxcInlcIiE9PXRoaXMuaXNJbmZpbml0ZSYmKGIueURpZmY+MCYmbTwwfHxiLnlEaWZmPDAmJm0+MCkmJihtKj1NYXRoLm1heCgwLC41LU1hdGguYWJzKC43NS90aGlzLmNvbnRlbnRSZWN0LmZpdEhlaWdodCpiLnlEaWZmKSkpKTooYi54RGlmZiYmKGc9MCksYi55RGlmZiYmKG09MCkpO2NvbnN0IHk9dGhpcy50YXJnZXRTY2FsZSx3PXRoaXMubWluU2NhbGUseD10aGlzLm1heFNjYWxlO3k8LjUqdyYmKGY9TWF0aC5tYXgoZix3KSkseT4xLjUqeCYmKGY9TWF0aC5taW4oZix4KSksXCJ5XCI9PT10aGlzLmxvY2tlZEF4aXMmJnQoeSk9PT10KHcpJiYoZz0wKSxcInhcIj09PXRoaXMubG9ja2VkQXhpcyYmdCh5KT09PXQodykmJihtPTApLHRoaXMuYXBwbHlDaGFuZ2Uoe29yaWdpblg6bCxvcmlnaW5ZOmQscGFuWDpnLHBhblk6bSxzY2FsZTpmLGZyaWN0aW9uOnRoaXMub3B0aW9uKFwiZHJhZ0ZyaWN0aW9uXCIpLGlnbm9yZUJvdW5kczohMH0pfW9uUG9pbnRlclVwKHQsZSxuKXtpZihuLmxlbmd0aClyZXR1cm4gdGhpcy5kcmFnT2Zmc2V0Lng9MCx0aGlzLmRyYWdPZmZzZXQueT0wLHZvaWQodGhpcy50cmFja2luZ1BvaW50cz1bXSk7dGhpcy5jb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmNuKFwiaXNEcmFnZ2luZ1wiKSksdGhpcy5pc0RyYWdnaW5nJiYodGhpcy5hZGRUcmFja2luZ1BvaW50KGUpLHRoaXMucGFuT25seVpvb21lZCYmdGhpcy5jb250ZW50UmVjdC53aWR0aC10aGlzLmNvbnRlbnRSZWN0LmZpdFdpZHRoPDEmJnRoaXMuY29udGVudFJlY3QuaGVpZ2h0LXRoaXMuY29udGVudFJlY3QuZml0SGVpZ2h0PDEmJih0aGlzLnRyYWNraW5nUG9pbnRzPVtdKSxpKHQudGFyZ2V0LHRoaXMuY29udGVudCkmJlwieVwiPT09dGhpcy5sb2NrZWRBeGlzJiYodGhpcy50cmFja2luZ1BvaW50cz1bXSksdGhpcy5lbWl0KFwidG91Y2hFbmRcIix0KSx0aGlzLmlzRHJhZ2dpbmc9ITEsdGhpcy5sb2NrZWRBeGlzPSExLHRoaXMuc3RhdGUhPT1tLkRlc3Ryb3kmJih0LmRlZmF1bHRQcmV2ZW50ZWR8fHRoaXMuc3RhcnREZWNlbEFuaW0oKSkpfXN0YXJ0RGVjZWxBbmltKCl7dmFyIGU7Y29uc3QgaT10aGlzLmlzU2NhbGluZzt0aGlzLnJBRiYmKGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuckFGKSx0aGlzLnJBRj1udWxsKSx0aGlzLmlzQm91bmNpbmdYPSExLHRoaXMuaXNCb3VuY2luZ1k9ITE7Zm9yKGNvbnN0IHQgb2Ygdil0aGlzLnZlbG9jaXR5W3RdPTA7dGhpcy50YXJnZXQuZT10aGlzLmN1cnJlbnQuZSx0aGlzLnRhcmdldC5mPXRoaXMuY3VycmVudC5mLFModGhpcy5jb250YWluZXIsXCJpcy1zY2FsaW5nXCIpLFModGhpcy5jb250YWluZXIsXCJpcy1hbmltYXRpbmdcIiksdGhpcy5pc1RpY2tpbmc9ITE7Y29uc3R7dHJhY2tpbmdQb2ludHM6bn09dGhpcyxzPW5bMF0sbz1uW24ubGVuZ3RoLTFdO2xldCBhPTAscj0wLGw9MDtvJiZzJiYoYT1vLmNsaWVudFgtcy5jbGllbnRYLHI9by5jbGllbnRZLXMuY2xpZW50WSxsPW8udGltZS1zLnRpbWUpO2NvbnN0IGM9KG51bGw9PT0oZT13aW5kb3cudmlzdWFsVmlld3BvcnQpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnNjYWxlKXx8MTsxIT09YyYmKGEqPWMscio9Yyk7bGV0IGg9MCxkPTAsdT0wLHA9MCxmPXRoaXMub3B0aW9uKFwiZGVjZWxGcmljdGlvblwiKTtjb25zdCBnPXRoaXMudGFyZ2V0U2NhbGU7aWYobD4wKXt1PU1hdGguYWJzKGEpPjM/YS8obC8zMCk6MCxwPU1hdGguYWJzKHIpPjM/ci8obC8zMCk6MDtjb25zdCB0PXRoaXMub3B0aW9uKFwibWF4VmVsb2NpdHlcIik7dCYmKHU9TWF0aC5tYXgoTWF0aC5taW4odSx0KSwtMSp0KSxwPU1hdGgubWF4KE1hdGgubWluKHAsdCksLTEqdCkpfXUmJihoPXUvKDEvKDEtZiktMSkpLHAmJihkPXAvKDEvKDEtZiktMSkpLChcInlcIj09PXR
1oaXMub3B0aW9uKFwibG9ja0F4aXNcIil8fFwieHlcIj09PXRoaXMub3B0aW9uKFwibG9ja0F4aXNcIikmJlwieVwiPT09dGhpcy5sb2NrZWRBeGlzJiZ0KGcpPT09dGhpcy5taW5TY2FsZSkmJihoPXU9MCksKFwieFwiPT09dGhpcy5vcHRpb24oXCJsb2NrQXhpc1wiKXx8XCJ4eVwiPT09dGhpcy5vcHRpb24oXCJsb2NrQXhpc1wiKSYmXCJ4XCI9PT10aGlzLmxvY2tlZEF4aXMmJnQoZyk9PT10aGlzLm1pblNjYWxlKSYmKGQ9cD0wKTtjb25zdCBtPXRoaXMuZHJhZ09mZnNldC54LGI9dGhpcy5kcmFnT2Zmc2V0LnkseT10aGlzLm9wdGlvbihcImRyYWdNaW5UaHJlc2hvbGRcIil8fDA7TWF0aC5hYnMobSk8eSYmTWF0aC5hYnMoYik8eSYmKGg9ZD0wLHU9cD0wKSwodGhpcy5vcHRpb24oXCJ6b29tXCIpJiYoZzx0aGlzLm1pblNjYWxlLTFlLTV8fGc+dGhpcy5tYXhTY2FsZSsxZS01KXx8aSYmIWgmJiFkKSYmKGY9LjM1KSx0aGlzLmFwcGx5Q2hhbmdlKHtwYW5YOmgscGFuWTpkLGZyaWN0aW9uOmZ9KSx0aGlzLmVtaXQoXCJkZWNlbFwiLHUscCxtLGIpfW9uV2hlZWwodCl7dmFyIGU9Wy10LmRlbHRhWHx8MCwtdC5kZWx0YVl8fDAsLXQuZGV0YWlsfHwwXS5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIE1hdGguYWJzKGUpPk1hdGguYWJzKHQpP2U6dH0pKTtjb25zdCBpPU1hdGgubWF4KC0xLE1hdGgubWluKDEsZSkpO2lmKHRoaXMuZW1pdChcIndoZWVsXCIsdCxpKSx0aGlzLnBhbk1vZGU9PT1PKXJldHVybjtpZih0LmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2NvbnN0IG49dGhpcy5vcHRpb24oXCJ3aGVlbFwiKTtcInBhblwiPT09bj8odC5wcmV2ZW50RGVmYXVsdCgpLHRoaXMucGFuT25seVpvb21lZCYmIXRoaXMuY2FuWm9vbU91dCgpfHx0aGlzLmFwcGx5Q2hhbmdlKHtwYW5YOjIqLXQuZGVsdGFYLHBhblk6MiotdC5kZWx0YVksYm91bmNlOiExfSkpOlwiem9vbVwiPT09biYmITEhPT10aGlzLm9wdGlvbihcInpvb21cIikmJnRoaXMuem9vbVdpdGhXaGVlbCh0KX1vbk1vdXNlTW92ZSh0KXt0aGlzLnBhbldpdGhNb3VzZSh0KX1vbktleWRvd24odCl7XCJFc2NhcGVcIj09PXQua2V5JiZ0aGlzLnRvZ2dsZUZTKCl9b25SZXNpemUoKXt0aGlzLnVwZGF0ZU1ldHJpY3MoKSx0aGlzLmNoZWNrQm91bmRzKCkuaW5Cb3VuZHN8fHRoaXMucmVxdWVzdFRpY2soKX1zZXRUcmFuc2Zvcm0oKXt0aGlzLmVtaXQoXCJiZWZvcmVUcmFuc2Zvcm1cIik7Y29uc3R7Y3VycmVudDplLHRhcmdldDppLGNvbnRlbnQ6bixjb250ZW50UmVjdDpzfT10aGlzLG89T2JqZWN0LmFzc2lnbih7fSxDKTtmb3IoY29uc3QgbiBvZiB2KXtjb25zdCBzPVwiZVwiPT1ufHxcImZcIj09PW4/TTpUO29bbl09dChlW25dLHMpLE1hdGguYWJzKGlbbl0tZVtuXSk8KFwiZVwiPT1ufHxcImZcIj09PW4/LjUxOi4wMDEpJiYoZVtuXT1pW25dKX1sZXR7YTphLGI6cixjOmwsZDpjLGU6aCxmOmR9PW8sdT1gbWF0cml4KCR7YX0sICR7cn0sICR7bH0sICR7Y30sICR7aH0sICR7ZH0pYCxwPW4ucGFyZW50RWxlbWVudCBpbnN0YW5jZW9mIEhUTUxQaWN0dXJlRWxlbWVudD9uLnBhcmVudEVsZW1lbnQ6bjtpZih0aGlzLm9wdGlvbihcInRyYW5zZm9ybVBhcmVudFwiKSYmKHA9cC5wYXJlbnRFbGVtZW50fHxwKSxwLnN0eWxlLnRyYW5zZm9ybT09PXUpcmV0dXJuO3Auc3R5bGUudHJhbnNmb3JtPXU7Y29uc3R7Y29udGVudFdpZHRoOmYsY29udGVudEhlaWdodDpnfT10aGlzLmNhbGN1bGF0ZUNvbnRlbnREaW0oKTtzLndpZHRoPWYscy5oZWlnaHQ9Zyx0aGlzLmVtaXQoXCJhZnRlclRyYW5zZm9ybVwiKX11cGRhdGVNZXRyaWNzKGU9ITEpe3ZhciBpO2lmKCF0aGlzfHx0aGlzLnN0YXRlPT09bS5EZXN0cm95KXJldHVybjtpZih0aGlzLmlzQ29udGVudExvYWRpbmcpcmV0dXJuO2NvbnN0IG49TWF0aC5tYXgoMSwobnVsbD09PShpPXdpbmRvdy52aXN1YWxWaWV3cG9ydCl8fHZvaWQgMD09PWk/dm9pZCAwOmkuc2NhbGUpfHwxKSx7Y29udGFpbmVyOnMsY29udGVudDpvfT10aGlzLGE9byBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQscj1zLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGw9Z2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmNvbnRhaW5lcik7bGV0IGM9ci53aWR0aCpuLGg9ci5oZWlnaHQqbjtjb25zdCBkPXBhcnNlRmxvYXQobC5wYWRkaW5nVG9wKStwYXJzZUZsb2F0KGwucGFkZGluZ0JvdHRvbSksdT1jLShwYXJzZUZsb2F0KGwucGFkZGluZ0xlZnQpK3BhcnNlRmxvYXQobC5wYWRkaW5nUmlnaHQpKSxwPWgtZDt0aGlzLmNvbnRhaW5lclJlY3Q9e3dpZHRoOmMsaGVpZ2h0OmgsaW5uZXJXaWR0aDp1LGlubmVySGVpZ2h0OnB9O2NvbnN0IGY9cGFyc2VGbG9hdChvLmRhdGFzZXQud2lkdGh8fFwiXCIpfHwodD0+e2xldCBlPTA7cmV0dXJuIGU9dCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQ/dC5uYXR1cmFsV2lkdGg6dCBpbnN0YW5jZW9mIFNWR0VsZW1lbnQ/dC53aWR0aC5iYXNlVmFsLnZhbHVlOk1hdGgubWF4KHQub2Zmc2V0V2lkdGgsdC5zY3JvbGxXaWR0aCksZXx8MH0pKG8pLGc9cGFyc2VGbG9hdChvLmRhdGFzZXQuaGVpZ2h0fHxcIlwiKXx8KHQ9PntsZXQgZT0wO3JldHVybiBlPXQgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50P3QubmF0dXJhbEhlaWdodDp0IGluc3RhbmNlb2YgU1ZHRWxlbWVudD90LmhlaWdodC5iYXNlVmFsLnZhbHVlOk1hdGgubWF4KHQub2Zmc2V0SGVpZ2h0LHQuc2Nyb2xsSGVpZ2h0KSxlfHwwfSkobyk7bGV0IHY9dGhpcy5vcHRpb24oXCJ3aWR0aFwiLGYpfHx6LGI9dGhpcy5vcHRpb24oXCJoZWlnaHRcIixnKXx8ejtjb25zdCB5PXY9PT16LHc9Yj09PXo7XCJudW1iZXJcIiE9dHlwZW9mIHYmJih2PWYpLFwibnVtYmVyXCIhPXR5cGVvZiBiJiYoYj1nKSx5JiYodj1mKihiL2cpKSx3JiYoYj1nLyhmL3YpKTtsZXQgeD1vLnBhcmVudEVsZW1lbnQgaW5zdGFuY2VvZiBIVE1MUGljdHVyZUVsZW1lbnQ/by5wYXJlbnRFbGVtZW50Om87dGhpcy5vcHRpb24oXCJ0cmFuc2Zvcm1QYXJlbnRcIikmJih4PXgucGFyZW50RWxlbWVudHx8eCk7Y29uc3QgRT14LmdldEF0dHJpYnV0ZShcInN0eWxlXCIpfHxcIlwiO3guc3R5bGUuc2V0UHJvcGVydHkoXCJ0cmFuc2Zvcm1cIixcIm5vbmVcIixcImltcG9ydGFudFwiKSxhJiYoeC5zdHlsZS53aWR0aD1cIlwiLHguc3R5bGUuaGVpZ2h0PVwiXCIpLHgub2Zmc2V0SGVpZ2h0O2NvbnN0IFM9by5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtsZXQgUD1TLndpZHRoKm4sQz1TLmhlaWdodCpuLFQ9UCxNPUM7UD1NYXRoLm1pbihQLHYpLEM9TWF0aC5taW4oQyxiKSxhPyh7d2lk
1dGg6UCxoZWlnaHQ6Q309KCh0LGUsaSxuKT0+e2NvbnN0IHM9aS90LG89bi9lLGE9TWF0aC5taW4ocyxvKTtyZXR1cm57d2lkdGg6dCo9YSxoZWlnaHQ6ZSo9YX19KSh2LGIsUCxDKSk6KFA9TWF0aC5taW4oUCx2KSxDPU1hdGgubWluKEMsYikpO2xldCBPPS41KihNLUMpLEE9LjUqKFQtUCk7dGhpcy5jb250ZW50UmVjdD1PYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sdGhpcy5jb250ZW50UmVjdCkse3RvcDpTLnRvcC1yLnRvcCtPLGJvdHRvbTpyLmJvdHRvbS1TLmJvdHRvbStPLGxlZnQ6Uy5sZWZ0LXIubGVmdCtBLHJpZ2h0OnIucmlnaHQtUy5yaWdodCtBLGZpdFdpZHRoOlAsZml0SGVpZ2h0OkMsd2lkdGg6UCxoZWlnaHQ6QyxmdWxsV2lkdGg6dixmdWxsSGVpZ2h0OmJ9KSx4LnN0eWxlLmNzc1RleHQ9RSxhJiYoeC5zdHlsZS53aWR0aD1gJHtQfXB4YCx4LnN0eWxlLmhlaWdodD1gJHtDfXB4YCksdGhpcy5zZXRUcmFuc2Zvcm0oKSwhMCE9PWUmJnRoaXMuZW1pdChcInJlZnJlc2hcIiksdGhpcy5pZ25vcmVCb3VuZHN8fCh0KHRoaXMudGFyZ2V0U2NhbGUpPHQodGhpcy5taW5TY2FsZSk/dGhpcy56b29tVG8odGhpcy5taW5TY2FsZSx7ZnJpY3Rpb246MH0pOnRoaXMudGFyZ2V0U2NhbGU+dGhpcy5tYXhTY2FsZT90aGlzLnpvb21Ubyh0aGlzLm1heFNjYWxlLHtmcmljdGlvbjowfSk6dGhpcy5zdGF0ZT09PW0uSW5pdHx8dGhpcy5jaGVja0JvdW5kcygpLmluQm91bmRzfHx0aGlzLnJlcXVlc3RUaWNrKCkpLHRoaXMudXBkYXRlQ29udHJvbHMoKX1jYWxjdWxhdGVCb3VuZHMoKXtjb25zdHtjb250ZW50V2lkdGg6ZSxjb250ZW50SGVpZ2h0Oml9PXRoaXMuY2FsY3VsYXRlQ29udGVudERpbSh0aGlzLnRhcmdldCkse3RhcmdldFNjYWxlOm4sbG9ja2VkQXhpczpzfT10aGlzLHtmaXRXaWR0aDpvLGZpdEhlaWdodDphfT10aGlzLmNvbnRlbnRSZWN0O2xldCByPTAsbD0wLGM9MCxoPTA7Y29uc3QgZD10aGlzLm9wdGlvbihcImluZmluaXRlXCIpO2lmKCEwPT09ZHx8cyYmZD09PXMpcj0tMS8wLGM9MS8wLGw9LTEvMCxoPTEvMDtlbHNle2xldHtjb250YWluZXJSZWN0OnMsY29udGVudFJlY3Q6ZH09dGhpcyx1PXQobypuLE0pLHA9dChhKm4sTSkse2lubmVyV2lkdGg6Zixpbm5lckhlaWdodDpnfT1zO2lmKHMud2lkdGg9PT11JiYoZj1zLndpZHRoKSxzLndpZHRoPT09cCYmKGc9cy5oZWlnaHQpLGU+Zil7Yz0uNSooZS1mKSxyPS0xKmM7bGV0IHQ9LjUqKGQucmlnaHQtZC5sZWZ0KTtyKz10LGMrPXR9aWYobz5mJiZlPGYmJihyLT0uNSooby1mKSxjLT0uNSooby1mKSksaT5nKXtoPS41KihpLWcpLGw9LTEqaDtsZXQgdD0uNSooZC5ib3R0b20tZC50b3ApO2wrPXQsaCs9dH1hPmcmJmk8ZyYmKHItPS41KihhLWcpLGMtPS41KihhLWcpKX1yZXR1cm57eDp7bWluOnIsbWF4OmN9LHk6e21pbjpsLG1heDpofX19Z2V0Qm91bmRzKCl7Y29uc3QgdD10aGlzLm9wdGlvbihcImJvdW5kc1wiKTtyZXR1cm4gdCE9PXo/dDp0aGlzLmNhbGN1bGF0ZUJvdW5kcygpfXVwZGF0ZUNvbnRyb2xzKCl7Y29uc3QgZT10aGlzLGk9ZS5jb250YWluZXIse3Bhbk1vZGU6bixjb250ZW50UmVjdDpzLHRhcmdldFNjYWxlOmEsbWluU2NhbGU6cn09ZTtsZXQgbD1yLGM9ZS5vcHRpb24oXCJjbGlja1wiKXx8ITE7YyYmKGw9ZS5nZXROZXh0U2NhbGUoYykpO2xldCBoPWUuY2FuWm9vbUluKCksZD1lLmNhblpvb21PdXQoKSx1PW49PT1BJiYhIXRoaXMub3B0aW9uKFwidG91Y2hcIikscD1kJiZ1O2lmKHUmJih0KGEpPHQocikmJiF0aGlzLnBhbk9ubHlab29tZWQmJihwPSEwKSwodChzLndpZHRoLDEpPnQocy5maXRXaWR0aCwxKXx8dChzLmhlaWdodCwxKT50KHMuZml0SGVpZ2h0LDEpKSYmKHA9ITApKSx0KHMud2lkdGgqYSwxKTx0KHMuZml0V2lkdGgsMSkmJihwPSExKSxuPT09TyYmKHA9ITEpLG8oaSx0aGlzLmNuKFwiaXNEcmFnZ2FibGVcIikscCksIXRoaXMub3B0aW9uKFwiem9vbVwiKSlyZXR1cm47bGV0IGY9aCYmdChsKT50KGEpLGc9IWYmJiFwJiZkJiZ0KGwpPHQoYSk7byhpLHRoaXMuY24oXCJjYW5ab29tSW5cIiksZiksbyhpLHRoaXMuY24oXCJjYW5ab29tT3V0XCIpLGcpO2Zvcihjb25zdCB0IG9mIGkucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLXBhbnpvb20tYWN0aW9uXVwiKSl7bGV0IGU9ITEsaT0hMTtzd2l0Y2godC5kYXRhc2V0LnBhbnpvb21BY3Rpb24pe2Nhc2VcInpvb21JblwiOmg/ZT0hMDppPSEwO2JyZWFrO2Nhc2VcInpvb21PdXRcIjpkP2U9ITA6aT0hMDticmVhaztjYXNlXCJ0b2dnbGVab29tXCI6Y2FzZVwiaXRlcmF0ZVpvb21cIjpofHxkP2U9ITA6aT0hMDtjb25zdCBuPXQucXVlcnlTZWxlY3RvcihcImdcIik7biYmKG4uc3R5bGUuZGlzcGxheT1oP1wiXCI6XCJub25lXCIpfWU/KHQucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIiksdC5yZW1vdmVBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKSk6aSYmKHQuc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIixcIlwiKSx0LnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsXCItMVwiKSl9fXBhblRvKHt4OnQ9dGhpcy50YXJnZXQuZSx5OmU9dGhpcy50YXJnZXQuZixzY2FsZTppPXRoaXMudGFyZ2V0U2NhbGUsZnJpY3Rpb246bj10aGlzLm9wdGlvbihcImZyaWN0aW9uXCIpLGFuZ2xlOnM9MCxvcmlnaW5YOm89MCxvcmlnaW5ZOmE9MCxmbGlwWDpyPSExLGZsaXBZOmw9ITEsaWdub3JlQm91bmRzOmM9ITF9KXt0aGlzLnN0YXRlIT09bS5EZXN0cm95JiZ0aGlzLmFwcGx5Q2hhbmdlKHtwYW5YOnQtdGhpcy50YXJnZXQuZSxwYW5ZOmUtdGhpcy50YXJnZXQuZixzY2FsZTppL3RoaXMudGFyZ2V0U2NhbGUsYW5nbGU6cyxvcmlnaW5YOm8sb3JpZ2luWTphLGZyaWN0aW9uOm4sZmxpcFg6cixmbGlwWTpsLGlnbm9yZUJvdW5kczpjfSl9YXBwbHlDaGFuZ2Uoe3Bhblg6ZT0wLHBhblk6aT0wLHNjYWxlOm49MSxhbmdsZTpzPTAsb3JpZ2luWDpvPS10aGlzLmN1cnJlbnQuZSxvcmlnaW5ZOmE9LXRoaXMuY3VycmVudC5mLGZyaWN0aW9uOnI9dGhpcy5vcHRpb24oXCJmcmljdGlvblwiKSxmbGlwWDpsPSExLGZsaXBZOmM9ITEsaWdub3JlQm91bmRzOmg9ITEsYm91bmNlOmQ9dGhpcy5vcHRpb24oXCJib3VuY2VcIil9KXtjb25zdCB1PXRoaXMuc3RhdGU7aWYodT09PW0uRGVzdHJveSlyZXR1cm47dGhpcy5yQUYmJihjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnJBRiksdGhpcy5yQUY9bnVsbCksdGhpcy5mcmljdGlvbj1yfHwwLHRoaXMuaWdub3JlQm91bmRzPWg7Y29uc3R7Y3VycmVudDpwfT10aGlzLGY9cC5lLGc9cC5mLGI9dGhpcy5nZXRNYXRyaXgodGhpcy50YXJnZXQpO2xldCB5PShuZXcgRE9NTWF0cml4KS50cmFuc2xhdGUoZixnKS50cmFuc2xhdGUobyxhKS50cmFuc2xhdGUoZSxpKTtpZih0aGlzLm9wdGlvbihcInpvb21cIikpe2lmKCFoKXtjb25zdCB0PXRoaXMudGFyZ2V0U2NhbGUsZT10aGlzLm1pblNjYWxlLGk9dGhpcy5tYXhTY2FsZTt0Km48ZSYmKG49ZS90KSx0Km4+aSYmKG49aS90KX15PXkuc2NhbGUobil9eT15LnRyYW5zbGF0ZSgtbywtYSkudHJhbnNsYXRlKC1mLC1nKS5tdWx0aXBseShiKSxzJiYoeT15LnJvdGF0ZShzKSksbCYmKHk9eS5zY2FsZSgtMSwxKSksYyYmKHk9eS5zY2FsZSgxLC0xKSk7Zm9yKGNvbnN0IGUgb2Ygdilc
1ImVcIiE9PWUmJlwiZlwiIT09ZSYmKHlbZV0+dGhpcy5taW5TY2FsZSsxZS01fHx5W2VdPHRoaXMubWluU2NhbGUtMWUtNSk/dGhpcy50YXJnZXRbZV09eVtlXTp0aGlzLnRhcmdldFtlXT10KHlbZV0sTSk7KHRoaXMudGFyZ2V0U2NhbGU8dGhpcy5zY2FsZXx8TWF0aC5hYnMobi0xKT4uMXx8dGhpcy5wYW5Nb2RlPT09T3x8ITE9PT1kKSYmIWgmJnRoaXMuY2xhbXBUYXJnZXRCb3VuZHMoKSx1PT09bS5Jbml0P3RoaXMuYW5pbWF0ZSgpOnRoaXMuaXNSZXN0aW5nfHwodGhpcy5zdGF0ZT1tLlBhbm5pbmcsdGhpcy5yZXF1ZXN0VGljaygpKX1zdG9wKHQ9ITEpe2lmKHRoaXMuc3RhdGU9PT1tLkluaXR8fHRoaXMuc3RhdGU9PT1tLkRlc3Ryb3kpcmV0dXJuO2NvbnN0IGU9dGhpcy5pc1RpY2tpbmc7dGhpcy5yQUYmJihjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLnJBRiksdGhpcy5yQUY9bnVsbCksdGhpcy5pc0JvdW5jaW5nWD0hMSx0aGlzLmlzQm91bmNpbmdZPSExO2Zvcihjb25zdCBlIG9mIHYpdGhpcy52ZWxvY2l0eVtlXT0wLFwiY3VycmVudFwiPT09dD90aGlzLmN1cnJlbnRbZV09dGhpcy50YXJnZXRbZV06XCJ0YXJnZXRcIj09PXQmJih0aGlzLnRhcmdldFtlXT10aGlzLmN1cnJlbnRbZV0pO3RoaXMuc2V0VHJhbnNmb3JtKCksUyh0aGlzLmNvbnRhaW5lcixcImlzLXNjYWxpbmdcIiksUyh0aGlzLmNvbnRhaW5lcixcImlzLWFuaW1hdGluZ1wiKSx0aGlzLmlzVGlja2luZz0hMSx0aGlzLnN0YXRlPW0uUmVhZHksZSYmKHRoaXMuZW1pdChcImVuZEFuaW1hdGlvblwiKSx0aGlzLnVwZGF0ZUNvbnRyb2xzKCkpfXJlcXVlc3RUaWNrKCl7dGhpcy5pc1RpY2tpbmd8fCh0aGlzLmVtaXQoXCJzdGFydEFuaW1hdGlvblwiKSx0aGlzLnVwZGF0ZUNvbnRyb2xzKCksUCh0aGlzLmNvbnRhaW5lcixcImlzLWFuaW1hdGluZ1wiKSx0aGlzLmlzU2NhbGluZyYmUCh0aGlzLmNvbnRhaW5lcixcImlzLXNjYWxpbmdcIikpLHRoaXMuaXNUaWNraW5nPSEwLHRoaXMuckFGfHwodGhpcy5yQUY9cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgoKT0+dGhpcy5hbmltYXRlKCkpKSl9cGFuV2l0aE1vdXNlKGUsaT10aGlzLm9wdGlvbihcIm1vdXNlTW92ZUZyaWN0aW9uXCIpKXtpZih0aGlzLnBtbWU9ZSx0aGlzLnBhbk1vZGUhPT1PfHwhZSlyZXR1cm47aWYodCh0aGlzLnRhcmdldFNjYWxlKTw9dCh0aGlzLm1pblNjYWxlKSlyZXR1cm47dGhpcy5lbWl0KFwibW91c2VNb3ZlXCIsZSk7Y29uc3R7Y29udGFpbmVyOm4sY29udGFpbmVyUmVjdDpzLGNvbnRlbnRSZWN0Om99PXRoaXMsYT1zLndpZHRoLHI9cy5oZWlnaHQsbD1uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLGM9KGUuY2xpZW50WHx8MCktbC5sZWZ0LGg9KGUuY2xpZW50WXx8MCktbC50b3A7bGV0e2NvbnRlbnRXaWR0aDpkLGNvbnRlbnRIZWlnaHQ6dX09dGhpcy5jYWxjdWxhdGVDb250ZW50RGltKHRoaXMudGFyZ2V0KTtjb25zdCBwPXRoaXMub3B0aW9uKFwibW91c2VNb3ZlRmFjdG9yXCIpO3A+MSYmKGQhPT1hJiYoZCo9cCksdSE9PXImJih1Kj1wKSk7bGV0IGY9LjUqKGQtYSktYy9hKjEwMC8xMDAqKGQtYSk7Zis9LjUqKG8ucmlnaHQtby5sZWZ0KTtsZXQgZz0uNSoodS1yKS1oL3IqMTAwLzEwMCoodS1yKTtnKz0uNSooby5ib3R0b20tby50b3ApLHRoaXMuYXBwbHlDaGFuZ2Uoe3Bhblg6Zi10aGlzLnRhcmdldC5lLHBhblk6Zy10aGlzLnRhcmdldC5mLGZyaWN0aW9uOml9KX16b29tV2l0aFdoZWVsKGUpe2lmKHRoaXMuc3RhdGU9PT1tLkRlc3Ryb3l8fHRoaXMuc3RhdGU9PT1tLkluaXQpcmV0dXJuO2NvbnN0IGk9RGF0ZS5ub3coKTtpZihpLXRoaXMucHd0PDQ1KXJldHVybiB2b2lkIGUucHJldmVudERlZmF1bHQoKTt0aGlzLnB3dD1pO3ZhciBuPVstZS5kZWx0YVh8fDAsLWUuZGVsdGFZfHwwLC1lLmRldGFpbHx8MF0ucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyhlKT5NYXRoLmFicyh0KT9lOnR9KSk7Y29uc3Qgcz1NYXRoLm1heCgtMSxNYXRoLm1pbigxLG4pKSx7dGFyZ2V0U2NhbGU6byxtYXhTY2FsZTphLG1pblNjYWxlOnJ9PXRoaXM7bGV0IGw9byooMTAwKzQ1KnMpLzEwMDt0KGwpPHQocikmJnQobyk8PXQocik/KHRoaXMuY3dkKz1NYXRoLmFicyhzKSxsPXIpOnQobCk+dChhKSYmdChvKT49dChhKT8odGhpcy5jd2QrPU1hdGguYWJzKHMpLGw9YSk6KHRoaXMuY3dkPTAsbD1NYXRoLm1heChNYXRoLm1pbihsLGEpLHIpKSx0aGlzLmN3ZD50aGlzLm9wdGlvbihcIndoZWVsTGltaXRcIil8fChlLnByZXZlbnREZWZhdWx0KCksdChsKSE9PXQobykmJnRoaXMuem9vbVRvKGwse2V2ZW50OmV9KSl9Y2FuWm9vbUluKCl7cmV0dXJuIHRoaXMub3B0aW9uKFwiem9vbVwiKSYmKHQodGhpcy5jb250ZW50UmVjdC53aWR0aCwxKTx0KHRoaXMuY29udGVudFJlY3QuZml0V2lkdGgsMSl8fHQodGhpcy50YXJnZXRTY2FsZSk8dCh0aGlzLm1heFNjYWxlKSl9Y2FuWm9vbU91dCgpe3JldHVybiB0aGlzLm9wdGlvbihcInpvb21cIikmJnQodGhpcy50YXJnZXRTY2FsZSk+dCh0aGlzLm1pblNjYWxlKX16b29tSW4odD0xLjI1LGUpe3RoaXMuem9vbVRvKHRoaXMudGFyZ2V0U2NhbGUqdCxlKX16b29tT3V0KHQ9LjgsZSl7dGhpcy56b29tVG8odGhpcy50YXJnZXRTY2FsZSp0LGUpfXpvb21Ub0ZpdCh0KXt0aGlzLnpvb21UbyhcImZpdFwiLHQpfXpvb21Ub0NvdmVyKHQpe3RoaXMuem9vbVRvKFwiY292ZXJcIix0KX16b29tVG9GdWxsKHQpe3RoaXMuem9vbVRvKFwiZnVsbFwiLHQpfXpvb21Ub01heCh0KXt0aGlzLnpvb21UbyhcIm1heFwiLHQpfXRvZ2dsZVpvb20odCl7dGhpcy56b29tVG8odGhpcy5nZXROZXh0U2NhbGUoXCJ0b2dnbGVab29tXCIpLHQpfXRvZ2dsZU1heCh0KXt0aGlzLnpvb21Ubyh0aGlzLmdldE5leHRTY2FsZShcInRvZ2dsZU1heFwiKSx0KX10b2dnbGVDb3Zlcih0KXt0aGlzLnpvb21Ubyh0aGlzLmdldE5leHRTY2FsZShcInRvZ2dsZUNvdmVyXCIpLHQpfWl0ZXJhdGVab29tKHQpe3RoaXMuem9vbVRvKFwibmV4dFwiLHQpfXpvb21Ubyh0PTEse2ZyaWN0aW9uOmU9eixvcmlnaW5YOmk9eixvcmlnaW5ZOm49eixldmVudDpzfT17fSl7aWYodGhpcy5pc0NvbnRlbnRMb2FkaW5nfHx0aGlzLnN0YXRlPT09bS5EZXN0cm95KXJldHVybjtjb25zdHt0YXJnZXRTY2FsZTpvLGZ1bGxTY2FsZTphLG1heFNjYWxlOnIsY292ZXJTY2FsZTpsfT10aGlzO2lmKHRoaXMuc3RvcCgpLHRoaXMucGFuTW9kZT09PU8mJihzPXRoaXMucG1tZXx8cyksc3x8aT09PXp8fG49PT16KXtjb25zdCB0PXRoaXMuY29udGVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxlPXR
1oaXMuY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLG89cz9zLmNsaWVudFg6ZS5sZWZ0Ky41KmUud2lkdGgsYT1zP3MuY2xpZW50WTplLnRvcCsuNSplLmhlaWdodDtpPW8tdC5sZWZ0LS41KnQud2lkdGgsbj1hLXQudG9wLS41KnQuaGVpZ2h0fWxldCBjPTE7XCJudW1iZXJcIj09dHlwZW9mIHQ/Yz10OlwiZnVsbFwiPT09dD9jPWE6XCJjb3ZlclwiPT09dD9jPWw6XCJtYXhcIj09PXQ/Yz1yOlwiZml0XCI9PT10P2M9MTpcIm5leHRcIj09PXQmJihjPXRoaXMuZ2V0TmV4dFNjYWxlKFwiaXRlcmF0ZVpvb21cIikpLGM9Yy9vfHwxLGU9ZT09PXo/Yz4xPy4xNTouMjU6ZSx0aGlzLmFwcGx5Q2hhbmdlKHtzY2FsZTpjLG9yaWdpblg6aSxvcmlnaW5ZOm4sZnJpY3Rpb246ZX0pLHMmJnRoaXMucGFuTW9kZT09PU8mJnRoaXMucGFuV2l0aE1vdXNlKHMsZSl9cm90YXRlQ0NXKCl7dGhpcy5hcHBseUNoYW5nZSh7YW5nbGU6LTkwfSl9cm90YXRlQ1coKXt0aGlzLmFwcGx5Q2hhbmdlKHthbmdsZTo5MH0pfWZsaXBYKCl7dGhpcy5hcHBseUNoYW5nZSh7ZmxpcFg6ITB9KX1mbGlwWSgpe3RoaXMuYXBwbHlDaGFuZ2Uoe2ZsaXBZOiEwfSl9Zml0WCgpe3RoaXMuc3RvcChcInRhcmdldFwiKTtjb25zdHtjb250YWluZXJSZWN0OnQsY29udGVudFJlY3Q6ZSx0YXJnZXQ6aX09dGhpczt0aGlzLmFwcGx5Q2hhbmdlKHtwYW5YOi41KnQud2lkdGgtKGUubGVmdCsuNSplLmZpdFdpZHRoKS1pLmUscGFuWTouNSp0LmhlaWdodC0oZS50b3ArLjUqZS5maXRIZWlnaHQpLWkuZixzY2FsZTp0LndpZHRoL2UuZml0V2lkdGgvdGhpcy50YXJnZXRTY2FsZSxvcmlnaW5YOjAsb3JpZ2luWTowLGlnbm9yZUJvdW5kczohMH0pfWZpdFkoKXt0aGlzLnN0b3AoXCJ0YXJnZXRcIik7Y29uc3R7Y29udGFpbmVyUmVjdDp0LGNvbnRlbnRSZWN0OmUsdGFyZ2V0Oml9PXRoaXM7dGhpcy5hcHBseUNoYW5nZSh7cGFuWDouNSp0LndpZHRoLShlLmxlZnQrLjUqZS5maXRXaWR0aCktaS5lLHBhblk6LjUqdC5pbm5lckhlaWdodC0oZS50b3ArLjUqZS5maXRIZWlnaHQpLWkuZixzY2FsZTp0LmhlaWdodC9lLmZpdEhlaWdodC90aGlzLnRhcmdldFNjYWxlLG9yaWdpblg6MCxvcmlnaW5ZOjAsaWdub3JlQm91bmRzOiEwfSl9dG9nZ2xlRlMoKXtjb25zdHtjb250YWluZXI6dH09dGhpcyxlPXRoaXMuY24oXCJpbkZ1bGxzY3JlZW5cIiksaT10aGlzLmNuKFwiaHRtbEhhc0Z1bGxzY3JlZW5cIik7dC5jbGFzc0xpc3QudG9nZ2xlKGUpO2NvbnN0IG49dC5jbGFzc0xpc3QuY29udGFpbnMoZSk7bj8oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdC5hZGQoaSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIix0aGlzLm9uS2V5ZG93biwhMCkpOihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShpKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLHRoaXMub25LZXlkb3duLCEwKSksdGhpcy51cGRhdGVNZXRyaWNzKCksdGhpcy5lbWl0KG4/XCJlbnRlckZTXCI6XCJleGl0RlNcIil9Z2V0TWF0cml4KHQ9dGhpcy5jdXJyZW50KXtjb25zdHthOmUsYjppLGM6bixkOnMsZTpvLGY6YX09dDtyZXR1cm4gbmV3IERPTU1hdHJpeChbZSxpLG4scyxvLGFdKX1yZXNldCh0KXtpZih0aGlzLnN0YXRlIT09bS5Jbml0JiZ0aGlzLnN0YXRlIT09bS5EZXN0cm95KXt0aGlzLnN0b3AoXCJjdXJyZW50XCIpO2Zvcihjb25zdCB0IG9mIHYpdGhpcy50YXJnZXRbdF09Q1t0XTt0aGlzLnRhcmdldC5hPXRoaXMubWluU2NhbGUsdGhpcy50YXJnZXQuZD10aGlzLm1pblNjYWxlLHRoaXMuY2xhbXBUYXJnZXRCb3VuZHMoKSx0aGlzLmlzUmVzdGluZ3x8KHRoaXMuZnJpY3Rpb249dm9pZCAwPT09dD90aGlzLm9wdGlvbihcImZyaWN0aW9uXCIpOnQsdGhpcy5zdGF0ZT1tLlBhbm5pbmcsdGhpcy5yZXF1ZXN0VGljaygpKX19ZGVzdHJveSgpe3RoaXMuc3RvcCgpLHRoaXMuc3RhdGU9bS5EZXN0cm95LHRoaXMuZGV0YWNoRXZlbnRzKCksdGhpcy5kZXRhY2hPYnNlcnZlcigpO2NvbnN0e2NvbnRhaW5lcjp0LGNvbnRlbnQ6ZX09dGhpcyxpPXRoaXMub3B0aW9uKFwiY2xhc3Nlc1wiKXx8e307Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LnZhbHVlcyhpKSl0LmNsYXNzTGlzdC5yZW1vdmUoZStcIlwiKTtlJiYoZS5yZW1vdmVFdmVudExpc3RlbmVyKFwibG9hZFwiLHRoaXMub25Mb2FkKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLHRoaXMub25FcnJvcikpLHRoaXMuZGV0YWNoUGx1Z2lucygpfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoSSxcImRlZmF1bHRzXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnl9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoSSxcIlBsdWdpbnNcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6e319KTtjb25zdCBEPWZ1bmN0aW9uKHQsZSl7bGV0IGk9ITA7cmV0dXJuKC4uLm4pPT57aSYmKGk9ITEsdCguLi5uKSxzZXRUaW1lb3V0KCgoKT0+e2k9ITB9KSxlKSl9fSxGPSh0LGUpPT57bGV0IGk9W107cmV0dXJuIHQuY2hpbGROb2Rlcy5mb3JFYWNoKCh0PT57dC5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFfHxlJiYhdC5tYXRjaGVzKGUpfHxpLnB1c2godCl9KSksaX0saj17dmlld3BvcnQ6bnVsbCx0cmFjazpudWxsLGVuYWJsZWQ6ITAsc2xpZGVzOltdLGF4aXM6XCJ4XCIsdHJhbnNpdGlvbjpcImZhZGVcIixwcmVsb2FkOjEsc2xpZGVzUGVyUGFnZTpcImF1dG9cIixpbml0aWFsUGFnZTowLGZyaWN0aW9uOi4xMixQYW56b29tOntkZWNlbEZyaWN0aW9uOi4xMn0sY2VudGVyOiEwLGluZmluaXRlOiEwLGZpbGw6ITAsZHJhZ0ZyZWU6ITEsYWRhcHRpdmVIZWlnaHQ6ITEsZGlyZWN0aW9uOlwibHRyXCIsY2xhc3Nlczp7Y29udGFpbmVyOlwiZi1jYXJvdXNlbFwiLHZpZXdwb3J0OlwiZi1jYXJvdXNlbF9fdmlld3BvcnRcIix0cmFjazpcImYtY2Fyb3VzZWxfX3RyYWNrXCIsc2xpZGU6XCJmLWNhcm91c2VsX19zbGlkZVwiLGlzTFRSOlwiaXMtbHRyXCIsaXNSVEw6XCJpcy1ydGxcIixpc0hvcml6b250YWw6XCJpcy1ob3Jpem9udGFsXCIsaXNWZXJ0aWNhbDpcImlzLXZlcnRpY2FsXCIsaW5UcmFuc2l0aW9uOlwiaW4tdHJhbnNpdGlvblwiLGlzU2VsZWN0ZWQ6XCJpcy1zZWxlY3RlZFwifSxsMTBuOntORVhUOlwiTmV4dCBzbGlkZVwiLFBSRVY6XCJQcmV2aW91cyBzbGlkZVwiLEdPVE86XCJHbyB0byBzbGlkZSAjJWRcIn19O3ZhciBCOyFmdW5jdGlvbih0KXt0W3QuSW5pdD0wXT1cIkluaXRcIix0W3QuUmVhZHk9MV09XCJSZWFkeVwiLHRbdC5EZXN0cm95PTJdPVwiRG
1VzdHJveVwifShCfHwoQj17fSkpO2NvbnN0IEg9dD0+e2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpdD17aHRtbDp0fTtlbHNle2NvbnN0IGU9dC50aHVtYjt2b2lkIDAhPT1lJiYoXCJzdHJpbmdcIj09dHlwZW9mIGUmJih0LnRodW1iU3JjPWUpLGUgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50JiYodC50aHVtYkVsPWUsdC50aHVtYkVsU3JjPWUuc3JjLHQudGh1bWJTcmM9ZS5zcmMpLGRlbGV0ZSB0LnRodW1iKX1yZXR1cm4gT2JqZWN0LmFzc2lnbih7aHRtbDpcIlwiLGVsOm51bGwsaXNEb206ITEsY2xhc3M6XCJcIixjdXN0b21DbGFzczpcIlwiLGluZGV4Oi0xLGRpbTowLGdhcDowLHBvczowLHRyYW5zaXRpb246ITF9LHQpfSxOPSh0PXt9KT0+T2JqZWN0LmFzc2lnbih7aW5kZXg6LTEsc2xpZGVzOltdLGRpbTowLHBvczotMX0sdCk7Y2xhc3MgXyBleHRlbmRzIGZ7Y29uc3RydWN0b3IodCxlKXtzdXBlcihlKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImluc3RhbmNlXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnR9KX1hdHRhY2goKXt9ZGV0YWNoKCl7fX1jb25zdCAkPXtjbGFzc2VzOntsaXN0OlwiZi1jYXJvdXNlbF9fZG90c1wiLGlzRHluYW1pYzpcImlzLWR5bmFtaWNcIixoYXNEb3RzOlwiaGFzLWRvdHNcIixkb3Q6XCJmLWNhcm91c2VsX19kb3RcIixpc0JlZm9yZVByZXY6XCJpcy1iZWZvcmUtcHJldlwiLGlzUHJldjpcImlzLXByZXZcIixpc0N1cnJlbnQ6XCJpcy1jdXJyZW50XCIsaXNOZXh0OlwiaXMtbmV4dFwiLGlzQWZ0ZXJOZXh0OlwiaXMtYWZ0ZXItbmV4dFwifSxkb3RUcGw6JzxidXR0b24gdHlwZT1cImJ1dHRvblwiIGRhdGEtY2Fyb3VzZWwtcGFnZT1cIiVpXCIgYXJpYS1sYWJlbD1cInt7R09UT319XCI+PHNwYW4gY2xhc3M9XCJmLWNhcm91c2VsX19kb3RcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+PC9idXR0b24+JyxkeW5hbWljRnJvbToxMSxtYXhDb3VudDoxLzAsbWluQ291bnQ6Mn07Y2xhc3MgVyBleHRlbmRzIF97Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiaXNEeW5hbWljXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOiExfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJsaXN0XCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm51bGx9KX1vblJlZnJlc2goKXt0aGlzLnJlZnJlc2goKX1idWlsZCgpe2xldCB0PXRoaXMubGlzdDtpZighdCl7dD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidWxcIiksUCh0LHRoaXMuY24oXCJsaXN0XCIpKSx0LnNldEF0dHJpYnV0ZShcInJvbGVcIixcInRhYmxpc3RcIik7Y29uc3QgZT10aGlzLmluc3RhbmNlLmNvbnRhaW5lcjtlLmFwcGVuZENoaWxkKHQpLFAoZSx0aGlzLmNuKFwiaGFzRG90c1wiKSksdGhpcy5saXN0PXR9cmV0dXJuIHR9cmVmcmVzaCgpe3ZhciB0O2NvbnN0IGU9dGhpcy5pbnN0YW5jZS5wYWdlcy5sZW5ndGgsaT1NYXRoLm1pbigyLHRoaXMub3B0aW9uKFwibWluQ291bnRcIikpLG49TWF0aC5tYXgoMmUzLHRoaXMub3B0aW9uKFwibWF4Q291bnRcIikpLHM9dGhpcy5vcHRpb24oXCJkeW5hbWljRnJvbVwiKTtpZihlPGl8fGU+bilyZXR1cm4gdm9pZCB0aGlzLmNsZWFudXAoKTtjb25zdCBhPVwibnVtYmVyXCI9PXR5cGVvZiBzJiZlPjUmJmU+PXMscj0hdGhpcy5saXN0fHx0aGlzLmlzRHluYW1pYyE9PWF8fHRoaXMubGlzdC5jaGlsZHJlbi5sZW5ndGghPT1lO3ImJnRoaXMuY2xlYW51cCgpO2NvbnN0IGw9dGhpcy5idWlsZCgpO2lmKG8obCx0aGlzLmNuKFwiaXNEeW5hbWljXCIpLCEhYSkscilmb3IobGV0IHQ9MDt0PGU7dCsrKWwuYXBwZW5kKHRoaXMuY3JlYXRlSXRlbSh0KSk7bGV0IGMsaD0wO2Zvcihjb25zdCBlIG9mWy4uLmwuY2hpbGRyZW5dKXtjb25zdCBpPWg9PT10aGlzLmluc3RhbmNlLnBhZ2U7aSYmKGM9ZSksbyhlLHRoaXMuY24oXCJpc0N1cnJlbnRcIiksaSksbnVsbD09PSh0PWUuY2hpbGRyZW5bMF0pfHx2b2lkIDA9PT10fHx0LnNldEF0dHJpYnV0ZShcImFyaWEtc2VsZWN0ZWRcIixpP1widHJ1ZVwiOlwiZmFsc2VcIik7Zm9yKGNvbnN0IHQgb2ZbXCJpc0JlZm9yZVByZXZcIixcImlzUHJldlwiLFwiaXNOZXh0XCIsXCJpc0FmdGVyTmV4dFwiXSlTKGUsdGhpcy5jbih0KSk7aCsrfWlmKGM9Y3x8bC5maXJzdENoaWxkLGEmJmMpe2NvbnN0IHQ9Yy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLGU9dCYmdC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1AodCx0aGlzLmNuKFwiaXNQcmV2XCIpKSxQKGUsdGhpcy5jbihcImlzQmVmb3JlUHJldlwiKSk7Y29uc3QgaT1jLm5leHRFbGVtZW50U2libGluZyxuPWkmJmkubmV4dEVsZW1lbnRTaWJsaW5nO1AoaSx0aGlzLmNuKFwiaXNOZXh0XCIpKSxQKG4sdGhpcy5jbihcImlzQWZ0ZXJOZXh0XCIpKX10aGlzLmlzRHluYW1pYz1hfWNyZWF0ZUl0ZW0odD0wKXt2YXIgZTtjb25zdCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaVwiKTtpLnNldEF0dHJpYnV0ZShcInJvbGVcIixcInByZXNlbnRhdGlvblwiKTtjb25zdCBzPW4odGhpcy5pbnN0YW5jZS5sb2NhbGl6ZSh0aGlzLm9wdGlvbihcImRvdFRwbFwiKSxbW1wiJWRcIix0KzFdXSkucmVwbGFjZSgvXFwlaS9nLHQrXCJcIikpO3JldHVybiBpLmFwcGVuZENoaWxkKHMpLG51bGw9PT0oZT1pLmNoaWxkcmVuWzBdKXx8dm9pZCAwPT09ZXx8ZS5zZXRBdHRyaWJ1dGUoXCJyb2xlXCIsXCJ0YWJcIiksaX1jbGVhbnVwKCl7dGhpcy5saXN0JiYodGhpcy5saXN0LnJlbW92ZSgpLHRoaXMubGlzdD1udWxsKSx0aGlzLmlzRHluYW1pYz0hMSxTKHRoaXMuaW5zdGFuY2UuY29udGFpbmVyLHRoaXMuY24oXCJoYXNEb3RzXCIpKX1hdHRhY2goKXt0aGlzLmluc3RhbmNlLm9uKFtcInJlZnJlc2hcIixcImNoYW5nZVwiXSx0aGlzLm9uUmVmcmVzaCl9ZGV0YWNoKCl7dGhpcy5pbnN0YW5jZS5vZmYoW1wicmVmcmVzaFwiLFwiY2hhbmdlXCJdLHRoaXMub25SZWZyZXNoKSx0aGlzLmNsZWFudXAoKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KFcsXCJkZWZhdWx0c1wiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTokfSk7Y29uc3QgWD1cImRpc2FibGVkXCIscT1cIm5leHRcIixZPVwicHJldlwiO2NsYXNzIFYgZXh0ZW5kcyBfe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImNvbnRhaW5lclwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJwcmV2XCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcIm5leHRcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiaXNEb21cIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ITF9KX1vblJlZnJlc2goKXtjb25zdCB0PXRoaXMuaW5zdGFuY2UsZT10LnBhZ2VzLmxlbmd0aCxpPXQucGFnZTtpZihlPDIpcmV0dXJuIHZvaWQgdGhpcy5jbGVhbnVwKCk7dGhpcy5idWlsZCgpO2xldCBuPXRoaXMucHJldixzPXRoaXMubmV4dDtuJiZzJiYobi5yZW1vdmVBdHRyaWJ1dGUoWCkscy5yZW1vdmVBdHRyaWJ1dGUoWCksdC5pc0luZmluaXRlfHwoaTw9MCYmbi5zZXRBdHRyaWJ1dGUoWCxcIlwiKSxpPj1lLTEmJnMuc2V0QXR0cmlidXRlKFgsXCJcIikpKX1hZGRCdG4odCl7dmFyIGU7Y29uc3QgaT10aGlzLmluc3RhbmNlLG49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImJ1dHRvblwiKTtuLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsXCIwXCIpLG4uc2V0QXR0cmlidXRlKFwidGl0bGVcIixpLmxvY2FsaXplKGB7eyR7dC50b1VwcGVyQ2FzZSgpfX19YCkpLFAobix0aGlzLmNuKFwiYnV0dG9uXCIpK1wiIFwiK3RoaXMuY24odD09PXE/XCJpc05leHRcIjpcImlzUHJldlwiKSk7Y29uc3Qgcz1pLmlzUlRMP3Q9PT1xP1k6cTp0O3ZhciBvO3JldHVybiBuLmlubmVySFRNTD1pLmxvY2FsaXplKHRoaXMub3B0aW9uKGAke3N9VHBsYCkpLG4uZGF0YXNldFtgY2Fyb3VzZWwke289dCxvP28ubWF0Y2goXCJeW2Etel1cIik/by5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStvLnN1YnN0cmluZygxKTpvOlwiXCJ9YF09XCJ0cnVlXCIsbnVsbD09PShlPXRoaXMuY29udGFpbmVyKXx8dm9pZCAwPT09ZXx8ZS5hcHBlbmRDaGlsZChuKSxufWJ1aWxkKCl7Y29uc3QgdD10aGlzLmluc3RhbmNlLmNvbnRhaW5lcixlPXRoaXMuY24oXCJjb250YWluZXJcIik7bGV0e2NvbnRhaW5lcjppLHByZXY6bixuZXh0OnN9PXRoaXM7aXx8KGk9dC5xdWVyeVNlbGVjdG9yKFwiLlwiK2UpLHRoaXMuaXNEb209ISFpKSxpfHwoaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFAoaSxlKSx0LmFwcGVuZENoaWxkKGkpKSx0aGlzLmNvbnRhaW5lcj1pLHN8fChzPWkucXVlcnlTZWxlY3RvcihcIltkYXRhLWNhcm91c2VsLW5leHRdXCIpKSxzfHwocz10aGlzLmFkZEJ0bihxKSksdGhpcy5uZXh0PXMsbnx8KG49aS5xdWVyeVNlbGVjdG9yKFwiW2RhdGEtY2Fyb3VzZWwtcHJldl1cIikpLG58fChuPXRoaXMuYWRkQnRuKFkpKSx0aGlzLnByZXY9bn1jbGVhbnVwKCl7dGhpcy5pc0RvbXx8KHRoaXMucHJldiYmdGhpcy5wcmV2LnJlbW92ZSgpLHRoaXMubmV4dCYmdGhpcy5uZXh0LnJlbW92ZSgpLHRoaXMuY29udGFpbmVyJiZ0aGlzLmNvbnRhaW5lci5yZW1vdmUoKSksdGhpcy5wcmV2PW51bGwsdGhpcy5uZXh0PW51bGwsdGhpcy5jb250YWluZXI9bnVsbCx0aGlzLmlzRG9tPSExfWF0dGFjaCgpe3RoaXMuaW5zdGFuY2Uub24oW1wicmVmcmVzaFwiLFwiY2hhbmdlXCJdLHRoaXMub25SZWZyZXNoKX1kZXRhY2goKXt0aGlzLmluc3RhbmNlLm9mZihbXCJyZWZyZXNoXCIsXCJjaGFuZ2VcIl0sdGhpcy5vblJlZnJlc2gpLHRoaXMuY2xlYW51cCgpfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoVixcImRlZmF1bHRzXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOntjbGFzc2VzOntjb250YWluZXI6XCJmLWNhcm91c2VsX19uYXZcIixidXR0b246XCJmLWJ1dHRvblwiLGlzTmV4dDpcImlzLW5leHRcIixpc1ByZXY6XCJpcy1wcmV2XCJ9LG5leHRUcGw6JzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB0YWJpbmRleD1cIi0xXCI+PHBhdGggZD1cIk05IDNsOSA5LTkgOVwiLz48L3N2Zz4nLHByZXZUcGw6JzxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiB0YWJpbmRleD1cIi0xXCI+PHBhdGggZD1cIk0xNSAzbC05IDkgOSA5XCIvPjwvc3ZnPid9fSk7Y2xhc3MgWiBleHRlbmRzIF97Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwic2VsZWN0ZWRJbmRleFwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJ0YXJnZXRcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwibmF2XCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm51bGx9KX1hZGRBc1RhcmdldEZvcih0KXt0aGlzLnRhcmdldD10aGlzLmluc3RhbmNlLHRoaXMubmF2PXQsdGhpcy5hdHRhY2hFdmVudHMoKX1hZGRBc05hdkZvcih0KXt0aGlzLm5hdj10aGlzLmluc3RhbmNlLHRoaXMudGFyZ2V0PXQsdGhpcy5hdHRhY2hFdmVudHMoKX1hdHRhY2hFdmVudHMoKXtjb25zdHtuYXY6dCx0YXJnZXQ6ZX09dGhpczt0JiZlJiYodC5vcHRpb25zLmluaXRpYWxTbGlkZT1lLm9wdGlvbnMuaW5pdGlhbFBhZ2UsdC5zdGF0ZT09PUIuUmVhZHk/dGhpcy5vbk5hdlJlYWR5KHQpOnQub24oXCJyZWFkeVwiLHRoaXMub25OYXZSZWFkeSksZS5zdGF0ZT09PUIuUmVhZHk/dGhpcy5vblRhcmdldFJlYWR5KGUpOmUub24oXCJyZWFkeVwiLHRoaXMub25UYXJnZXRSZWFkeSkpfW9uTmF2UmVhZHkodCl7dC5vbihcImNyZWF0ZVNsaWRlXCIsdGhpcy5vbk5hdkNyZWF0ZVNsaWRlKSx0Lm9uKFwiUGFuem9vbS5jbGlja1wiLHRoaXMub25OYXZDbGljayksdC5vbihcIlBhbnpvb20udG91Y2hFbmRcIix0aGlzLm9uTmF2VG91Y2gpLHRoaXMub25UYXJnZXRDaGFuZ2UoKX1vblRhcmdldFJlYWR5KHQpe3Qub24oXCJjaGFuZ2VcIix0aGlzLm9uVGFyZ2V0Q2hhbmdlKSx0Lm9uKFwiUGFuem9vbS5yZWZyZXNoXCIsdGhpcy5vblRhcmdldENoYW5nZSksdGhpcy5vblRhcmdldENoYW5nZSgpfW9uTmF2Q2xpY2sodCxlLGkpe3RoaXMub25OYXZUb3VjaCh0LHQucGFuem9vbSxpKX1vbk5hdlRvdWNoKHQsZSxpKXt2YXIgbixzO2lmKE1hdGguYWJzKGUuZHJhZ09mZnNldC54KT4zfHxNYXRoLmFicyhlLmRyYWdPZmZzZXQueSk+MylyZXR1cm47Y29uc3Qgbz1pLnRhcmdldCx7bmF2OmEsdGFyZ2V0OnJ9PXRoaXM7aWYoIWF8fCFyfHwhbylyZXR1cm47Y29uc3QgbD1vLmNsb3Nlc3QoXCJbZGF0YS1pbmRleF1cIik7aWYoaS5zdG9wUHJvcGFnYXRpb24oKSxpLnByZXZlbn
1REZWZhdWx0KCksIWwpcmV0dXJuO2NvbnN0IGM9cGFyc2VJbnQobC5kYXRhc2V0LmluZGV4fHxcIlwiLDEwKXx8MCxoPXIuZ2V0UGFnZUZvclNsaWRlKGMpLGQ9YS5nZXRQYWdlRm9yU2xpZGUoYyk7YS5zbGlkZVRvKGQpLHIuc2xpZGVUbyhoLHtmcmljdGlvbjoobnVsbD09PShzPW51bGw9PT0obj10aGlzLm5hdil8fHZvaWQgMD09PW4/dm9pZCAwOm4ucGx1Z2lucyl8fHZvaWQgMD09PXM/dm9pZCAwOnMuU3luYy5vcHRpb24oXCJmcmljdGlvblwiKSl8fDB9KSx0aGlzLm1hcmtTZWxlY3RlZFNsaWRlKGMpfW9uTmF2Q3JlYXRlU2xpZGUodCxlKXtlLmluZGV4PT09dGhpcy5zZWxlY3RlZEluZGV4JiZ0aGlzLm1hcmtTZWxlY3RlZFNsaWRlKGUuaW5kZXgpfW9uVGFyZ2V0Q2hhbmdlKCl7dmFyIHQsZTtjb25zdHt0YXJnZXQ6aSxuYXY6bn09dGhpcztpZighaXx8IW4pcmV0dXJuO2lmKG4uc3RhdGUhPT1CLlJlYWR5fHxpLnN0YXRlIT09Qi5SZWFkeSlyZXR1cm47Y29uc3Qgcz1udWxsPT09KGU9bnVsbD09PSh0PWkucGFnZXNbaS5wYWdlXSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuc2xpZGVzWzBdKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5pbmRleCxvPW4uZ2V0UGFnZUZvclNsaWRlKHMpO3RoaXMubWFya1NlbGVjdGVkU2xpZGUocyksbi5zbGlkZVRvKG8sbnVsbD09PW4ucHJldlBhZ2UmJm51bGw9PT1pLnByZXZQYWdlP3tmcmljdGlvbjowfTp2b2lkIDApfW1hcmtTZWxlY3RlZFNsaWRlKHQpe2NvbnN0IGU9dGhpcy5uYXY7ZSYmZS5zdGF0ZT09PUIuUmVhZHkmJih0aGlzLnNlbGVjdGVkSW5kZXg9dCxbLi4uZS5zbGlkZXNdLm1hcCgoZT0+e2UuZWwmJmUuZWwuY2xhc3NMaXN0W2UuaW5kZXg9PT10P1wiYWRkXCI6XCJyZW1vdmVcIl0oXCJpcy1uYXYtc2VsZWN0ZWRcIil9KSkpfWF0dGFjaCgpe2NvbnN0IHQ9dGhpcztsZXQgZT10Lm9wdGlvbnMudGFyZ2V0LGk9dC5vcHRpb25zLm5hdjtlP3QuYWRkQXNOYXZGb3IoZSk6aSYmdC5hZGRBc1RhcmdldEZvcihpKX1kZXRhY2goKXtjb25zdCB0PXRoaXMsZT10Lm5hdixpPXQudGFyZ2V0O2UmJihlLm9mZihcInJlYWR5XCIsdC5vbk5hdlJlYWR5KSxlLm9mZihcImNyZWF0ZVNsaWRlXCIsdC5vbk5hdkNyZWF0ZVNsaWRlKSxlLm9mZihcIlBhbnpvb20uY2xpY2tcIix0Lm9uTmF2Q2xpY2spLGUub2ZmKFwiUGFuem9vbS50b3VjaEVuZFwiLHQub25OYXZUb3VjaCkpLHQubmF2PW51bGwsaSYmKGkub2ZmKFwicmVhZHlcIix0Lm9uVGFyZ2V0UmVhZHkpLGkub2ZmKFwicmVmcmVzaFwiLHQub25UYXJnZXRDaGFuZ2UpLGkub2ZmKFwiY2hhbmdlXCIsdC5vblRhcmdldENoYW5nZSkpLHQudGFyZ2V0PW51bGx9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShaLFwiZGVmYXVsdHNcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6e2ZyaWN0aW9uOi4zNX19KTtjb25zdCBVPXtOYXZpZ2F0aW9uOlYsRG90czpXLFN5bmM6Wn0sRz1cImFuaW1hdGlvbmVuZFwiLEs9XCJpc1NlbGVjdGVkXCIsSj1cInNsaWRlXCI7Y2xhc3MgUSBleHRlbmRzIGd7Z2V0IGF4aXMoKXtyZXR1cm4gdGhpcy5pc0hvcml6b250YWw/XCJlXCI6XCJmXCJ9Z2V0IGlzRW5hYmxlZCgpe3JldHVybiB0aGlzLnN0YXRlPT09Qi5SZWFkeX1nZXQgaXNJbmZpbml0ZSgpe2xldCB0PSExO2NvbnN0e2NvbnRlbn
1REaW06ZSx2aWV3cG9ydERpbTppLHBhZ2VzOm4sc2xpZGVzOnN9PXRoaXMsbz1zWzBdO3JldHVybiBuLmxlbmd0aD49MiYmbyYmZStvLmRpbT49aSYmKHQ9dGhpcy5vcHRpb24oXCJpbmZpbml0ZVwiKSksdH1nZXQgaXNSVEwoKXtyZXR1cm5cInJ0bFwiPT09dGhpcy5vcHRpb24oXCJkaXJlY3Rpb25cIil9Z2V0IGlzSG9yaXpvbnRhbCgpe3JldHVyblwieFwiPT09dGhpcy5vcHRpb24oXCJheGlzXCIpfWNvbnN0cnVjdG9yKHQsZT17fSxpPXt9KXtpZihzdXBlcigpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiYnBcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6XCJcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwibHBcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6MH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwidXNlck9wdGlvbnNcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6e319KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInVzZXJQbHVnaW5zXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnt9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJzdGF0ZVwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpCLkluaXR9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInBhZ2VcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6MH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicHJldlBhZ2VcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiY29udGFpbmVyXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwidmlld3BvcnRcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwidHJhY2tcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwic2xpZGVzXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOltdfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJwYWdlc1wiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpbXX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicGFuem9vbVwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJpblRyYW5zaXRpb25cIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bmV3IFNldH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiY29udGVudERpbVwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTowfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJ2aWV3cG9ydERpbVwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTowfSksXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCkpLCF0fHwhRSh0KSl0aHJvdyBuZXcgRXJyb3IoXCJObyBFbGVtZW50IGZvdW5kXCIpO3RoaXMuY29udGFpbmVyPXQsdGhpcy5zbGlkZU5leHQ9RCh0aGlzLnNsaWRlTmV4dC5iaW5kKHRoaXMpLDE1MCksdGhpcy5zbGlkZVByZXY9RCh0aGlzLnNsaWRlUHJldi5iaW5kKHRoaXMpLDE1MCksdGhpcy51c2VyT3B0aW9ucz1lLHRoaXMudXNlclBsdWdpbnM9aSxxdWV1ZU1pY3JvdGFzaygoKCk9Pnt0aGlzLnByb2Nlc3NPcHRpb25zKCl9KSl9cHJvY2Vzc09wdGlvbnMoKXt2YXIgdCxlO2NvbnN0IGk9dSh7fSxRLmRlZmF1bHRzLHRoaXMudXNlck9wdGlvbnMpO2xldCBuPVwiXCI7Y29uc3Qgcz1pLmJyZWFrcG9pbnRzO2lmKHMmJmQocykpZm9yKGNvbnN0W3QsZV1vZiBPYmplY3QuZW50cmllcyhzKSl3aW5kb3cubWF0Y2hNZWRpYSh0KS5tYXRjaGVzJiZkKGUpJiYobis9dCx1KGksZSkpO249PT10aGlzLmJwJiZ0aGlzLnN0YXRlIT09Qi5Jbml0fHwodGhpcy5icD1uLHRoaXMuc3RhdGU9PT1CLlJlYWR5JiYoaS5pbml0aWFsU2xpZGU9KG51bGw9PT0oZT1udWxsPT09KHQ9dGhpcy5wYWdlc1t0aGlzLnBhZ2VdKXx8dm9pZCAwPT09dD92b2lkIDA6dC5zbGlkZXNbMF0pfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmluZGV4KXx8MCksdGhpcy5zdGF0ZSE9PUIuSW5pdCYmdGhpcy5kZXN0cm95KCksc3VwZXIuc2V0T3B0aW9ucyhpKSwhMT09PXRoaXMub3B0aW9uKFwiZW5hYmxlZFwiKT90aGlzLmF0dGFjaEV2ZW50cygpOnNldFRpbWVvdXQoKCgpPT57dGhpcy5pbml0KCl9KSwwKSl9aW5pdCgpe3RoaXMuc3RhdGU9Qi5Jbml0LHRoaXMuZW1pdChcImluaXRcIiksdGhpcy5hdHRhY2hQbHVnaW5zKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxRLlBsdWdpbnMpLHRoaXMudXNlclBsdWdpbnMpKSx0aGlzLmVtaXQoXCJhdHRhY2hQbHVnaW5zXCIpLHRoaXMuaW5pdExheW91dCgpLHRoaXMuaW5pdFNsaWRlcygpLHRoaXMudXBkYXRlTWV0cmljcygpLHRoaXMuc2V0SW5pdGlhbFBvc2l0aW9uKCksdGhpcy5pbml0UGFuem9vbSgpLHRoaXMuYXR0YWNoRXZlbnRzKCksdGhpcy5zdGF0ZT1CLlJlYWR5LHRoaXMuZW1pdChcInJlYWR5XCIpfWluaXRMYXlvdXQoKXtjb25zdHtjb250YWluZXI6dH09dGhpcyxlPXRoaXMub3B0aW9uKFwiY2xhc3Nlc1wiKTtQKHQsdGhpcy5jbihcImNvbnRhaW5lclwiKSksbyh0LGUuaXNMVFIsIXRoaXMuaXNSVEwpLG8odCxlLmlzUlRMLHRoaXMuaXNSVEwpLG8odCxlLmlzVmVydGljYWwsIXRoaXMuaXNIb3Jpem9udGFsKSxvKHQsZS5pc0hvcml6b250YWwsdGhpcy5pc0hvcml6b250YWwpO2xldCBpPXRoaXMub3B0aW9uKFwidmlld3BvcnRcIil8fHQucXVlcnlTZWxlY3RvcihgLiR7ZS52aWV3cG9ydH1gKTtpfHwoaT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFAoaSxlLnZpZXdwb3J0KSxpLmFwcGVuZCguLi5GKHQsYC4ke2Uuc2xpZGV9YCkpLHQucHJlcGVuZChpKSksaS5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsdGhpcy5vblNjcm9sbCk7bGV0IG49dGhpcy5vcHRpb24oXCJ0cmFja1wiKXx8dC5xdWVyeVNlbGVjdG9yKGAuJHtlLnRyYWNrfWApO258fChuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksUChuLGUud
1HJhY2spLG4uYXBwZW5kKC4uLkFycmF5LmZyb20oaS5jaGlsZE5vZGVzKSkpLG4uc2V0QXR0cmlidXRlKFwiYXJpYS1saXZlXCIsXCJwb2xpdGVcIiksaS5jb250YWlucyhuKXx8aS5wcmVwZW5kKG4pLHRoaXMudmlld3BvcnQ9aSx0aGlzLnRyYWNrPW4sdGhpcy5lbWl0KFwiaW5pdExheW91dFwiKX1pbml0U2xpZGVzKCl7Y29uc3R7dHJhY2s6dH09dGhpcztpZighdClyZXR1cm47Y29uc3QgZT1bLi4udGhpcy5zbGlkZXNdLGk9W107Wy4uLkYodCxgLiR7dGhpcy5jbihKKX1gKV0uZm9yRWFjaCgodD0+e2lmKEUodCkpe2NvbnN0IGU9SCh7ZWw6dCxpc0RvbTohMCxpbmRleDp0aGlzLnNsaWRlcy5sZW5ndGh9KTtpLnB1c2goZSl9fSkpO2ZvcihsZXQgdCBvZlsuLi50aGlzLm9wdGlvbihcInNsaWRlc1wiLFtdKXx8W10sLi4uZV0paS5wdXNoKEgodCkpO3RoaXMuc2xpZGVzPWk7Zm9yKGxldCB0PTA7dDx0aGlzLnNsaWRlcy5sZW5ndGg7dCsrKXRoaXMuc2xpZGVzW3RdLmluZGV4PXQ7Zm9yKGNvbnN0IHQgb2YgaSl0aGlzLmVtaXQoXCJiZWZvcmVJbml0U2xpZGVcIix0LHQuaW5kZXgpLHRoaXMuZW1pdChcImluaXRTbGlkZVwiLHQsdC5pbmRleCk7dGhpcy5lbWl0KFwiaW5pdFNsaWRlc1wiKX1zZXRJbml0aWFsUGFnZSgpe2NvbnN0IHQ9dGhpcy5vcHRpb24oXCJpbml0aWFsU2xpZGVcIik7dGhpcy5wYWdlPVwibnVtYmVyXCI9PXR5cGVvZiB0P3RoaXMuZ2V0UGFnZUZvclNsaWRlKHQpOnBhcnNlSW50KHRoaXMub3B0aW9uKFwiaW5pdGlhbFBhZ2VcIiwwKStcIlwiLDEwKXx8MH1zZXRJbml0aWFsUG9zaXRpb24oKXtjb25zdHt0cmFjazp0LHBhZ2VzOmUsaXNIb3Jpem9udGFsOml9PXRoaXM7aWYoIXR8fCFlLmxlbmd0aClyZXR1cm47bGV0IG49dGhpcy5wYWdlO2Vbbl18fCh0aGlzLnBhZ2U9bj0wKTtjb25zdCBzPShlW25dLnBvc3x8MCkqKHRoaXMuaXNSVEwmJmk/MTotMSksbz1pP2Ake3N9cHhgOlwiMFwiLGE9aT9cIjBcIjpgJHtzfXB4YDt0LnN0eWxlLnRyYW5zZm9ybT1gdHJhbnNsYXRlM2QoJHtvfSwgJHthfSwgMCkgc2NhbGUoMSlgLHRoaXMub3B0aW9uKFwiYWRhcHRpdmVIZWlnaHRcIikmJnRoaXMuc2V0Vmlld3BvcnRIZWlnaHQoKX1pbml0UGFuem9vbSgpe3RoaXMucGFuem9vbSYmKHRoaXMucGFuem9vbS5kZXN0cm95KCksdGhpcy5wYW56b29tPW51bGwpO2NvbnN0IHQ9dGhpcy5vcHRpb24oXCJQYW56b29tXCIpfHx7fTt0aGlzLnBhbnpvb209bmV3IEkodGhpcy52aWV3cG9ydCx1KHt9LHtjb250ZW50OnRoaXMudHJhY2ssem9vbTohMSxwYW5Pbmx5Wm9vbWVkOiExLGxvY2tBeGlzOnRoaXMuaXNIb3Jpem9udGFsP1wieFwiOlwieVwiLGluZmluaXRlOnRoaXMuaXNJbmZpbml0ZSxjbGljazohMSxkYmxDbGljazohMSx0b3VjaDp0PT4hKHRoaXMucGFnZXMubGVuZ3RoPDImJiF0Lm9wdGlvbnMuaW5maW5pdGUpLGJvdW5kczooKT0+dGhpcy5nZXRCb3VuZHMoKSxtYXhWZWxvY2l0eTp0PT5NYXRoLmFicyh0LnRhcmdldFt0aGlzLmF4aXNdLXQuY3VycmVudFt0aGlzLmF4aXNdKTwyKnRoaXMudmlld3BvcnREaW0/MTAwOjB9LHQpKSx0aGlzLnBhbnpvb20ub24oXCIqXCIsKCh0LGUsLi4uaSk9Pnt0aGlzLmVtaXQoYFBhbnpvb20uJHtlfWAsdCwuLi5pKX0pKSx0aGlzLnBhbnpvb20ub24oXCJkZWNlbFwiLHRoaXMub25EZWNlbCksdGhpcy5wYW56b29tLm9uKFwicmVmcmVzaFwiLHRoaXMub25SZWZyZXNoKSx0aGlzLnBhbnpvb20ub24oXCJiZWZvcmVUcmFuc2Zvcm1cIix0aGlzLm9uQmVmb3JlVHJhbnNmb3JtKSx0aGlzLnBhbnpvb20ub24oXCJlbmRBbmltYXRpb25cIix0aGlzLm9uRW5kQW5pbWF0aW9uKX1hdHRhY2hFdmVudHMoKXtjb25zdCB0PXRoaXMuY29udGFpbmVyO3QmJih0LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHRoaXMub25DbGljayx7cGFzc2l2ZTohMSxjYXB0dXJlOiExfSksdC5hZGRFdmVudExpc3RlbmVyKFwic2xpZGVUb1wiLHRoaXMub25TbGlkZVRvKSksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0aGlzLm9uUmVzaXplKX1jcmVhdGVQYWdlcygpe2xldCB0PVtdO2NvbnN0e2NvbnRlbn
1REaW06ZSx2aWV3cG9ydERpbTppfT10aGlzO2xldCBuPXRoaXMub3B0aW9uKFwic2xpZGVzUGVyUGFnZVwiKTtuPShcImF1dG9cIj09PW58fGU8PWkpJiYhMSE9PXRoaXMub3B0aW9uKFwiZmlsbFwiKT8xLzA6cGFyc2VGbG9hdChuK1wiXCIpO2xldCBzPTAsbz0wLGE9MDtmb3IoY29uc3QgZSBvZiB0aGlzLnNsaWRlcykoIXQubGVuZ3RofHxvK2UuZGltLWk+LjA1fHxhPj1uKSYmKHQucHVzaChOKCkpLHM9dC5sZW5ndGgtMSxvPTAsYT0wKSx0W3NdLnNsaWRlcy5wdXNoKGUpLG8rPWUuZGltK2UuZ2FwLGErKztyZXR1cm4gdH1wcm9jZXNzUGFnZXMoKXtjb25zdCBlPXRoaXMucGFnZXMse2NvbnRlbnREaW06aSx2aWV3cG9ydERpbTpuLGlzSW5maW5pdGU6c309dGhpcyxvPXRoaXMub3B0aW9uKFwiY2VudGVyXCIpLGE9dGhpcy5vcHRpb24oXCJmaWxsXCIpLHI9YSYmbyYmaT5uJiYhcztpZihlLmZvckVhY2goKCh0LGUpPT57dmFyIHM7dC5pbmRleD1lLHQucG9zPShudWxsPT09KHM9dC5zbGlkZXNbMF0pfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLnBvcyl8fDAsdC5kaW09MDtmb3IoY29uc3RbZSxpXW9mIHQuc2xpZGVzLmVudHJpZXMoKSl0LmRpbSs9aS5kaW0sZTx0LnNsaWRlcy5sZW5ndGgtMSYmKHQuZGltKz1pLmdhcCk7ciYmdC5wb3MrLjUqdC5kaW08LjUqbj90LnBvcz0wOnImJnQucG9zKy41KnQuZGltPj1pLS41Km4/dC5wb3M9aS1uOm8mJih0LnBvcys9LS41KihuLXQuZGltKSl9KSksZS5mb3JFYWNoKChlPT57YSYmIXMmJmk+biYmKGUucG9zPU1hdGgubWF4KGUucG9zLDApLGUucG9zPU1hdGgubWluKGUucG9zLGktbikpLGUucG9zPXQoZS5wb3MsMWUzKSxlLmRpbT10KGUuZGltLDFlMyksTWF0aC5hYnMoZS5wb3MpPD0uMSYmKGUucG9zPTApfSkpLHMpcmV0dXJuIGU7Y29uc3QgbD1bXTtsZXQgYztyZXR1cm4gZS5mb3JFYWNoKCh0PT57Y29uc3QgZT1PYmplY3QuYXNzaWduKHt9LHQpO2MmJmUucG9zPT09Yy5wb3M/KGMuZGltKz1lLmRpbSxjLnNsaWRlcz1bLi4uYy5zbGlkZXMsLi4uZS5zbGlkZXNdKTooZS5pbmRleD1sLmxlbmd0aCxjPWUsbC5wdXNoKGUpKX0pKSxsfWdldFBhZ2VGcm9tSW5kZXgodD0wKXtjb25zdCBlPXRoaXMucGFnZXMubGVuZ3RoO2xldCBpO3JldHVybiB0PXBhcnNlSW50KCh0fHwwKS50b1N0cmluZygpKXx8MCxpPXRoaXMuaXNJbmZpbml0ZT8odCVlK2UpJWU6TWF0aC5tYXgoTWF0aC5taW4odCxlLTEpLDApLGl9Z2V0U2xpZGVNZXRyaWNzKGUpe3ZhciBpLG47Y29uc3Qgcz10aGlzLmlzSG9yaXpvbnRhbD9cIndpZHRoXCI6XCJoZWlnaHRcIjtsZXQgbz0wLGE9MCxyPWUuZWw7Y29uc3QgbD0hKCFyfHxyLnBhcmVudE5vZGUpO2lmKHI/bz1wYXJzZUZsb2F0KHIuZGF0YXNldFtzXXx8XCJcIil8fDA6KHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxyLnN0eWxlLnZpc2liaWxpdHk9XCJoaWRkZW5cIiwodGhpcy50cmFja3x8ZG9jdW1lbnQuYm9keSkucHJlcGVuZChyKSksUChyLHRoaXMuY24oSikrXCIgXCIrZS5jbGFzcytcIiBcIitlLmN1c3RvbUNsYXNzKSxvKXIuc3R5bGVbc109YCR7b31weGAsci5zdHlsZVtcIndpZHRoXCI9PT1zP1wiaGVpZ2h0XCI6XCJ3aWR0aFwiXT1cIlwiO2Vsc2V7bCYmKHRoaXMudHJhY2t8fGRvY3VtZW50LmJvZHkpLnByZXBlbmQociksbz1yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3NdKk1hdGgubWF4KDEsKG51bGw9PT0oaT13aW5kb3cudmlzdWFsVmlld3BvcnQpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnNjYWxlKXx8MSk7bGV0IHQ9clt0aGlzLmlzSG9yaXpvbnRhbD9cIm9mZnNldFdpZHRoXCI6XCJvZmZzZXRIZWlnaHRcIl07dC0xPm8mJihvPXQpfWNvbnN0IGM9Z2V0Q29tcHV0ZWRTdHlsZShyKTtyZXR1cm5cImNvbnRlbnQtYm94XCI9PT1jLmJveFNpemluZyYmKHRoaXMuaXNIb3Jpem9udGFsPyhvKz1wYXJzZUZsb2F0KGMucGFkZGluZ0xlZnQpfHwwLG8rPXBhcnNlRmxvYXQoYy5wYWRkaW5nUmlnaHQpfHwwKToobys9cGFyc2VGbG9hdChjLnBhZGRpbmdUb3ApfHwwLG8rPXBhcnNlRmxvYXQoYy5wYWRkaW5nQm90dG9tKXx8MCkpLGE9cGFyc2VGbG9hdChjW3RoaXMuaXNIb3Jpem9udGFsP1wibWFyZ2luUmlnaHRcIjpcIm1hcmdpbkJvdHRvbVwiXSl8fDAsbD9udWxsPT09KG49ci5wYXJlbnRFbGVtZW50KXx8dm9pZCAwPT09bnx8bi5yZW1vdmVDaGlsZChyKTplLmVsfHxyLnJlbW92ZSgpLHtkaW06dChvLDFlMyksZ2FwOnQoYSwxZTMpfX1nZXRCb3VuZHMoKXtjb25zdHtpc0luZmluaXRlOnQsaXNSVEw6ZSxpc0hvcml6b250YWw6aSxwYWdlczpufT10aGlzO2xldCBzPXttaW46MCxtYXg6MH07aWYodClzPXttaW46LTEvMCxtYXg6MS8wfTtlbHNlIGlmKG4ubGVuZ3RoKXtjb25zdCB0PW5bMF0ucG9zLG89bltuLmxlbmd0aC0xXS5wb3M7cz1lJiZpP3ttaW46dCxtYXg6b306e21pbjotMSpvLG1heDotMSp0fX1yZXR1cm57eDppP3M6e21pbjowLG1heDowfSx5Omk/e21pbjowLG1heDowfTpzfX1yZXBvc2l0aW9uU2xpZGVzKCl7bGV0IGUse2lzSG9yaXpvbnRhbDppLGlzUlRMOm4saXNJbmZpbml0ZTpzLHZpZXdwb3J0Om8sdmlld3BvcnREaW06YSxjb250ZW50RGltOnIscGFnZTpsLHBhZ2VzOmMsc2xpZGVzOmgscGFuem9vbTpkfT10aGlzLHU9MCxwPTAsZj0wLGc9MDtkP2c9LTEqZC5jdXJyZW50W3RoaXMuYXhpc106Y1tsXSYmKGc9Y1tsXS5wb3N8fDApLGU9aT9uP1wicmlnaHRcIjpcImxlZnRcIjpcInRvcFwiLG4mJmkmJihnKj0tMSk7Zm9yKGNvbnN0IGkgb2YgaCl7Y29uc3Qgbj1pLmVsO24/KFwidG9wXCI9PT1lPyhuLnN0eWxlLnJpZ2h0PVwiXCIsbi5zdHlsZS5sZWZ0PVwiXCIpOm4uc3R5bGUudG9wPVwiXCIsaS5pbmRleCE9PXU/bi5zdHlsZVtlXT0wPT09cD9cIlwiOmAke3QocCwxZTMpfXB4YDpuLnN0eWxlW2VdPVwiXCIsZis9aS5kaW0raS5nYXAsdSsrKTpwKz1pLmRpbStpLmdhcH1pZihzJiZmJiZvKXtsZXQgbj1nZXRDb21wdXRlZFN0eWxlKG8pLHM9XCJwYWRkaW5nXCIsbD1pP1wiUmlnaHRcIjpcIkJvdHRvbVwiLGM9cGFyc2VGbG9hdChuW3MrKGk/XCJMZWZ0XCI6XCJUb3BcIildKTtnLT1jLGErPWMsYSs9cGFyc2VGbG9hdChuW3MrbF0pO2Zvcihjb25zdCBpIG9mIGgpaS5lbCYmKHQoaS5wb3MpPHQoYSkmJnQoaS5wb3MraS5kaW
10raS5nYXApPHQoZykmJnQoZyk+dChyLWEpJiYoaS5lbC5zdHlsZVtlXT1gJHt0KHArZiwxZTMpfXB4YCksdChpLnBvcytpLmdhcCk+PXQoci1hKSYmdChpLnBvcyk+dChnK2EpJiZ0KGcpPHQoYSkmJihpLmVsLnN0eWxlW2VdPWAtJHt0KGYsMWUzKX1weGApKX1sZXQgbSx2LGI9Wy4uLnRoaXMuaW5UcmFuc2l0aW9uXTtpZihiLmxlbmd0aD4xJiYobT1jW2JbMF1dLHY9Y1tiWzFdXSksbSYmdil7bGV0IGk9MDtmb3IoY29uc3QgbiBvZiBoKW4uZWw/dGhpcy5pblRyYW5zaXRpb24uaGFzKG4uaW5kZXgpJiZtLnNsaWRlcy5pbmRleE9mKG4pPDAmJihuLmVsLnN0eWxlW2VdPWAke3QoaSsobS5wb3Mtdi5wb3MpLDFlMyl9cHhgKTppKz1uLmRpbStuLmdhcH19Y3JlYXRlU2xpZGVFbCh0KXtjb25zdHt0cmFjazplLHNsaWRlczppfT10aGlzO2lmKCFlfHwhdClyZXR1cm47aWYodC5lbCYmdC5lbC5wYXJlbnROb2RlKXJldHVybjtjb25zdCBuPXQuZWx8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7UChuLHRoaXMuY24oSikpLFAobix0LmNsYXNzKSxQKG4sdC5jdXN0b21DbGFzcyk7Y29uc3Qgcz10Lmh0bWw7cyYmKHMgaW5zdGFuY2VvZiBIVE1MRWxlbWVudD9uLmFwcGVuZENoaWxkKHMpOm4uaW5uZXJIVE1MPXQuaHRtbCtcIlwiKTtjb25zdCBvPVtdO2kuZm9yRWFjaCgoKHQsZSk9Pnt0LmVsJiZvLnB1c2goZSl9KSk7Y29uc3QgYT10LmluZGV4O2xldCByPW51bGw7aWYoby5sZW5ndGgpe3I9aVtvLnJlZHVjZSgoKHQsZSk9Pk1hdGguYWJzKGUtYSk8TWF0aC5hYnModC1hKT9lOnQpKV19Y29uc3QgbD1yJiZyLmVsJiZyLmVsLnBhcmVudE5vZGU/ci5pbmRleDx0LmluZGV4P3IuZWwubmV4dFNpYmxpbmc6ci5lbDpudWxsO2UuaW5zZXJ0QmVmb3JlKG4sZS5jb250YWlucyhsKT9sOm51bGwpLHQuZWw9bix0aGlzLmVtaXQoXCJjcmVhdGVTbGlkZVwiLHQpfXJlbW92ZVNsaWRlRWwodCxlPSExKXtjb25zdCBpPW51bGw9PXQ/dm9pZCAwOnQuZWw7aWYoIWl8fCFpLnBhcmVudE5vZGUpcmV0dXJuO2NvbnN0IG49dGhpcy5jbihLKTtpZihpLmNsYXNzTGlzdC5jb250YWlucyhuKSYmKFMoaSxuKSx0aGlzLmVtaXQoXCJ1bnNlbGVjdFNsaWRlXCIsdCkpLHQuaXNEb20mJiFlKXJldHVybi
1BpLnJlbW92ZUF0dHJpYnV0ZShcImFyaWEtaGlkZGVuXCIpLGkucmVtb3ZlQXR0cmlidXRlKFwiZGF0YS1pbmRleFwiKSx2b2lkKGkuc3R5bGUubGVmdD1cIlwiKTt0aGlzLmVtaXQoXCJyZW1vdmVTbGlkZVwiLHQpO2NvbnN0IHM9bmV3IEN1c3RvbUV2ZW50KEcpO2kuZGlzcGF0Y2hFdmVudChzKSx0LmVsJiYodC5lbC5yZW1vdmUoKSx0LmVsPW51bGwpfXRyYW5zaXRpb25Ubyh0PTAsZT10aGlzLm9wdGlvbihcInRyYW5zaXRpb25cIikpe3ZhciBpLG4scyxvO2lmKCFlKXJldHVybiExO2NvbnN0IGE9dGhpcy5wYWdlLHtwYWdlczpyLHBhbnpvb206bH09dGhpczt0PXBhcnNlSW50KCh0fHwwKS50b1N0cmluZygpKXx8MDtjb25zdCBjPXRoaXMuZ2V0UGFnZUZyb21JbmRleCh0KTtpZighbHx8IXJbY118fHIubGVuZ3RoPDJ8fE1hdGguYWJzKCgobnVsbD09PShuPW51bGw9PT0oaT1yW2FdKXx8dm9pZCAwPT09aT92b2lkIDA6aS5zbGlkZXNbMF0pfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLmRpbSl8fDApLXRoaXMudmlld3BvcnREaW0pPjEpcmV0dXJuITE7bGV0IGg9dD5hPzE6LTE7dGhpcy5pc0luZmluaXRlJiYoMD09PWEmJnQ9PT1yLmxlbmd0aC0xJiYoaD0tMSksYT09PXIubGVuZ3RoLTEmJjA9PT10JiYoaD0xKSk7Y29uc3QgZD1yW2NdLnBvcyoodGhpcy5pc1JUTD8xOi0xKTtpZihhPT09YyYmTWF0aC5hYnMoZC1sLnRhcmdldFt0aGlzLmF4aXNdKTwxKXJldHVybiExO3RoaXMuY2xlYXJUcmFuc2l0aW9ucygpO2NvbnN0IHU9bC5pc1Jlc3Rpbmc7UCh0aGlzLmNvbnRhaW5lcix0aGlzLmNuKFwiaW5UcmFuc2l0aW9uXCIpKTtjb25zdCBwPShudWxsPT09KHM9clthXSl8fHZvaWQgMD09PXM/dm9pZCAwOnMuc2xpZGVzWzBdKXx8bnVsbCxmPShudWxsPT09KG89cltjXSl8fHZvaWQgMD09PW8/dm9pZCAwOm8uc2xpZGVzWzBdKXx8bnVsbDt0aGlzLmluVHJhbnNpdGlvbi5hZGQoZi5pbmRleCksdGhpcy5jcmVhdGVTbGlkZUVsKGYpO2xldCBnPXAuZWwsbT1mLmVsO3V8fGU9PT1KfHwoZT1cImZhZGVGYXN0XCIsZz1udWxsKTtjb25zdCB2PXRoaXMuaXNSVEw/XCJuZXh0XCI6XCJwcmV2XCIsYj10aGlzLmlzUlRMP1wicHJldlwiOlwibmV4dFwiO3JldHVybiBnJiYodGhpcy5pblRyYW5zaXRpb24uYWRkKHAuaW5kZXgpLHAudHJhbnNpdGlvbj1lLGcuYWRkRXZlbnRMaXN0ZW5lcihHLHRoaXMub25BbmltYXRpb25FbmQpLGcuY2xhc3NMaXN0LmFkZChgZi0ke2V9T3V0YCxgdG8tJHtoPjA/Yjp2fWApKSxtJiYoZi50cmFuc2l0aW9uPWUsbS5hZGRFdmVudExpc3RlbmVyKEcsdGhpcy5vbkFuaW1hdGlvbkVuZCksbS5jbGFzc0xpc3QuYWRkKGBmLSR7ZX1JbmAsYGZyb20tJHtoPjA/djpifWApKSxsLmN1cnJlbnRbdGhpcy5heGlzXT1kLGwudGFyZ2V0W3RoaXMuYXhpc109ZCxsLnJlcXVlc3RUaWNrKCksdGhpcy5vbkNoYW5nZShjKSwhMH1tYW5hZ2VTbGlkZVZpc2libGl0eSgpe2NvbnN0IHQ9bmV3IFNldCxlPW5ldyBTZXQsaT10aGlzLmdldFZpc2libGVTbGlkZXMocGFyc2VGbG9hdCh0aGlzLm9wdGlvbihcInByZWxvYWRcIiwwKStcIlwiKXx8MCk7Zm9yKGNvbnN0IG4gb2YgdGhpcy5zbGlkZXMpaS5oYXMobik/dC5hZGQobik6ZS5hZGQobik7Zm9yKGNvbnN0IGUgb2YgdGhpcy5pblRyYW5zaXRpb24pdC5hZGQodGhpcy5zbGlkZXNbZV0pO2Zvcihjb25zdCBlIG9mIHQpdGhpcy5jcmVhdGVTbGlkZUVsKGUpLHRoaXMubGF6eUxvYWRTbGlkZShlKTtmb3IoY29uc3QgaSBvZiBlKXQuaGFzKGkpfHx0aGlzLnJlbW92ZVNsaWRlRWwoaSk7dGhpcy5tYXJrU2VsZWN0ZWRTbGlkZXMoKSx0aGlzLnJlcG9zaXRpb25TbGlkZXMoKX1tYXJrU2VsZWN0ZWRTbGlkZXMoKXtpZighdGhpcy5wYWdlc1t0aGlzLnBhZ2VdfHwhdGhpcy5wYWdlc1t0aGlzLnBhZ2VdLnNsaWRlcylyZXR1cm47Y29uc3QgdD1cImFyaWEtaGlkZGVuXCI7bGV0IGU9dGhpcy5jbihLKTtpZihlKWZvcihjb25zdCBpIG9mIHRoaXMuc2xpZGVzKXtjb25zdCBuPWkuZWw7biYmKG4uZGF0YXNldC5pbmRleD1gJHtpLmluZGV4fWAsbi5jbGFzc0xpc3QuY29udGFpbnMoXCJmLXRodW1ic19fc2xpZGVcIik/dGhpcy5nZXRWaXNpYmxlU2xpZGVzKDApLmhhcyhpKT9uLnJlbW92ZUF0dHJpYnV0ZSh0KTpuLnNldEF0dHJpYnV0ZSh0LFwidHJ1ZVwiKTp0aGlzLnBhZ2VzW3RoaXMucGFnZV0uc2xpZGVzLmluY2x1ZGVzKGkpPyhuLmNsYXNzTGlzdC5jb250YWlucyhlKXx8KFAobixlKSx0aGlzLmVtaXQoXCJzZWxlY3RTbGlkZVwiLGkpKSxuLnJlbW92ZUF0dHJpYnV0ZSh0KSk6KG4uY2xhc3NMaXN0LmNvbnRhaW5zKGUpJiYoUyhuLGUpLHRoaXMuZW1pdChcInVuc2VsZWN0U2xpZGVcIixpKSksbi5zZXRBdHRyaWJ1dGUodCxcInRydWVcIikpKX19ZmxpcEluZmluaXRlVHJhY2soKXtjb25zdHtheGlzOnQsaXNIb3Jpem9udGFsOmUsaXNJbmZpbml0ZTppLGlzUlRMOm4sdmlld3BvcnREaW06cyxjb250ZW50RGltOm99PXRoaXMsYT10aGlzLnBhbnpvb207aWYoIWF8fCFpKXJldHVybjtsZXQgcj1hLmN1cnJlbnRbdF0sbD1hLnRhcmdldFt0XS1yLGM9MCxoPS41KnM7biYmZT8ocjwtaCYmKGM9LTEscis9bykscj5vLWgmJihjPTEsci09bykpOihyPmgmJihjPTEsci09bykscjwtbytoJiYoYz0tMSxyKz1vKSksYyYmKGEuY3VycmVudFt0XT1yLGEudGFyZ2V0W3RdPXIrbCl9bGF6eUxvYWRJbWcodCxlKXtjb25zdCBpPXRoaXMscz1cImYtZmFkZUluXCIsbz1cImlzLXByZWxvYWRpbmdcIjtsZXQgYT0hMSxyPW51bGw7Y29uc3QgbD0oKT0+e2F8fChhPSEwLHImJihyLnJlbW92ZSgpLHI9bnVsbCksUyhlLG8pLGUuY29tcGxldGUmJihQKGUscyksc2V0VGltZW91dCgoKCk9PntTKGUscyl9KSwzNTApKSx0aGlzLm9wdGlvbihcImFkYXB0aXZlSGVpZ2h0XCIpJiZ0LmVsJiZ0aGlzLnBhZ2VzW3RoaXMucGFnZV0uc2xpZGVzLmluZGV4T2YodCk+LTEmJihpLnVwZGF0ZU1ldHJpY3MoKSxpLnNldFZpZXdwb3J0SGVpZ2h0KCkpLHRoaXMuZW1pdChcImxvYWRcIix0KSl9O1AoZSxvKSxlLnNyYz1lLmRhdGFzZXQubGF6eVNyY3NldHx8ZS5kYXRhc2V0LmxhenlTcmN8fFwiXCIsZGVsZXRlIGUuZGF0YXNldC5sYXp5U3JjLGRlbGV0ZSBlLmRhdGFzZXQubGF6eVNyY3NldCxlLmFkZEV2ZW50TGlzdGVuZXIoXCJlcnJvclwiLCgoKT0+e2woKX0pKSxlLmFkZEV2ZW50TGlzdGVuZXIoXCJsb2FkXCIsKCgpPT57bCgpfSkpLHNldFRpbWVvdXQoKCgpPT57Y29uc3QgaT1lLnBhcmVudE5vZGU7aSYmdC5lbCYmKGUuY29tcGxldGU/bCgpOmF8fChyPW4oeCksaS5pbnNlcnRCZWZvcmUocixlKSkpfSksMzAwKX1sYXp5TG9hZFNsaWRlKHQpe2NvbnN0IGU9dCYmdC5lbDtpZighZSlyZXR1cm47Y29uc3QgaT1uZXcgU2V0O2xldCBuPUFycmF5LmZyb20oZS5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtbGF6eS1zcmNdLFtkYXRhLWxhenktc3Jjc2V0XVwiKSk7ZS5kYXRhc2V0LmxhenlTcmMmJm4ucHVzaChlKSxuLm1hcCgodD0+e3QgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50P2kuYWRkKHQpOnQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCYmdC5kYXRhc2V0LmxhenlTcmMmJih0LnN0eWxlLmJhY2tncm91bmRJbWFnZT1gdXJsKCcke3QuZGF0YXNldC5sYXp5U3JjfScpYCxkZWxldGUgdC5kYXRhc2V0LmxhenlTcmMpfSkpO2Zvcihjb25zdCBlIG9mIGkpdGhpcy5sYXp5TG9hZEltZyh0LGUpfW9uQW5pbWF0aW9uRW5kKHQpe3ZhciBlO2NvbnN0IGk9dC50YXJnZXQsbj1pP3BhcnNlSW50KGkuZGF0YXNldC5pbmRleHx8XCJcIiwxMCl8fDA6LTEscz10aGlzLnNsaWRlc1tuXSxvPXQuYW5pbWF0aW9uTmFtZTtpZighaXx8IXN8fCFvKXJldHVybjtjb25zdCBhPSEhdGhpcy5pblRyYW5zaXRpb24uaGFzKG4pJiZzLnRyYW5zaXRpb247YSYmby5zdWJzdHJpbmcoMCxhLmxlbmd0aCsyKT09PWBmLSR7YX1gJiZ0aGlzLmluVHJhbnNpdGlvbi5kZWxldGUobiksdGhpcy5pblRyYW5zaXRpb24uc2l6ZXx8dGhpcy5jbGVhclRyYW5zaXRpb25zKCksbj09PXRoaXMucGFnZSYmKG51bGw9PT0oZT10aGlzLnBhbnpvb20pfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmlzUmVzdGluZykmJnRoaXMuZW1pdChcInNldHRsZVwiKX1vbkRlY2VsKHQsZT0wLGk9MCxuPTAscz0wKXtpZih0aGlzLm9wdGlvbihcImRyYWdGcmVlXCIpKXJldHVybi
1B2b2lkIHRoaXMuc2V0UGFnZUZyb21Qb3NpdGlvbigpO2NvbnN0e2lzUlRMOm8saXNIb3Jpem9udGFsOmEsYXhpczpyLHBhZ2VzOmx9PXRoaXMsYz1sLmxlbmd0aCxoPU1hdGguYWJzKE1hdGguYXRhbjIoaSxlKS8oTWF0aC5QSS8xODApKTtsZXQgZD0wO2lmKGQ9aD40NSYmaDwxMzU/YT8wOmk6YT9lOjAsIWMpcmV0dXJuO2xldCB1PXRoaXMucGFnZSxwPW8mJmE/MTotMTtjb25zdCBmPXQuY3VycmVudFtyXSpwO2xldHtwYWdlSW5kZXg6Z309dGhpcy5nZXRQYWdlRnJvbVBvc2l0aW9uKGYpO01hdGguYWJzKGQpPjU/KGxbdV0uZGltPGRvY3VtZW50LmRvY3VtZW50RWxlbWVudFtcImNsaWVudFwiKyh0aGlzLmlzSG9yaXpvbnRhbD9cIldpZHRoXCI6XCJIZWlnaHRcIildLTEmJih1PWcpLHU9byYmYT9kPDA/dS0xOnUrMTpkPDA/dSsxOnUtMSk6dT0wPT09biYmMD09PXM/dTpnLHRoaXMuc2xpZGVUbyh1LHt0cmFuc2l0aW9uOiExLGZyaWN0aW9uOnQub3B0aW9uKFwiZGVjZWxGcmljdGlvblwiKX0pfW9uQ2xpY2sodCl7Y29uc3QgZT10LnRhcmdldCxpPWUmJkUoZSk/ZS5kYXRhc2V0Om51bGw7bGV0IG4scztpJiYodm9pZCAwIT09aS5jYXJvdXNlbFBhZ2U/KHM9XCJzbGlkZVRvXCIsbj1pLmNhcm91c2VsUGFnZSk6dm9pZCAwIT09aS5jYXJvdXNlbE5leHQ/cz1cInNsaWRlTmV4dFwiOnZvaWQgMCE9PWkuY2Fyb3VzZWxQcmV2JiYocz1cInNsaWRlUHJldlwiKSkscz8odC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcFByb3BhZ2F0aW9uKCksZSYmIWUuaGFzQXR0cmlidXRlKFwiZGlzYWJsZWRcIikmJnRoaXNbc10obikpOnRoaXMuZW1pdChcImNsaWNrXCIsdCl9b25TbGlkZVRvKHQpe2NvbnN0IGU9dC5kZXRhaWx8fDA7dGhpcy5zbGlkZVRvKHRoaXMuZ2V0UGFnZUZvclNsaWRlKGUpLHtmcmljdGlvbjowfSl9b25DaGFuZ2UodCxlPTApe2NvbnN0IGk9dGhpcy5wYWdlO3RoaXMucHJldlBhZ2U9aSx0aGlzLnBhZ2U9dCx0aGlzLm9wdGlvbihcImFkYXB0aXZlSGVpZ2h0XCIpJiZ0aGlzLnNldFZpZXdwb3J0SGVpZ2h0KCksdCE9PWkmJih0aGlzLm1hcmtTZWxlY3RlZFNsaWRlcygpLHRoaXMuZW1pdChcImNoYW5nZVwiLHQsaSxlKSl9b25SZWZyZXNoKCl7bGV0IHQ9dGhpcy5jb250ZW50RGltLGU9dGhpcy52aWV3cG9ydERpbTt0aGlzLnVwZGF0ZU1ldHJpY3MoKSx0aGlzLmNvbnRlbnREaW09PT10JiZ0aGlzLnZpZXdwb3J0RGltPT09ZXx8dGhpcy5zbGlkZVRvKHRoaXMucGFnZSx7ZnJpY3Rpb246MCx0cmFuc2l0aW9uOiExfSl9b25TY3JvbGwoKXt2YXIgdDtudWxsPT09KHQ9dGhpcy52aWV3cG9ydCl8fHZvaWQgMD09PXR8fHQuc2Nyb2xsKDAsMCl9b25SZXNpemUoKXt0aGlzLm9wdGlvbihcImJyZWFrcG9pbnRzXCIpJiZ0aGlzLnByb2Nlc3NPcHRpb25zKCl9b25CZWZvcmVUcmFuc2Zvcm0odCl7dGhpcy5scCE9PXQuY3VycmVudFt0aGlzLmF4aXNdJiYodGhpcy5mbGlwSW5maW5pdGVUcmFjaygpLHRoaXMubWFuYWdlU2xpZGVWaXNpYmxpdHkoKSksdGhpcy5scD10LmN1cnJlbnQuZX1vbkVuZEFuaW1hdGlvbigpe3RoaXMuaW5UcmFuc2l0aW9uLnNpemV8fHRoaXMuZW1pdChcInNldHRsZVwiKX1yZUluaXQodD1udWxsLGU9bnVsbCl7dGhpcy5kZXN0cm95KCksdGhpcy5zdGF0ZT1CLkluaXQsdGhpcy5wcmV2UGFnZT1udWxsLHRoaXMudXNlck9wdGlvbnM9dHx8dGhpcy51c2VyT3B0aW9ucyx0aGlzLnVzZXJQbHVnaW5zPWV8fHRoaXMudXNlclBsdWdpbnMsdGhpcy5wcm9jZXNzT3B0aW9ucygpfXNsaWRlVG8odD0wLHtmcmljdGlvbjplPXRoaXMub3B0aW9uKFwiZnJpY3Rpb25cIiksdHJhbnNpdGlvbjppPXRoaXMub3B0aW9uKFwidHJhbnNpdGlvblwiKX09e30pe2lmKHRoaXMuc3RhdGU9PT1CLkRlc3Ryb3kpcmV0dXJuO3Q9cGFyc2VJbnQoKHR8fDApLnRvU3RyaW5nKCkpfHwwO2NvbnN0IG49dGhpcy5nZXRQYWdlRnJvbUluZGV4KHQpLHtheGlzOnMsaXNIb3Jpem9udGFsOm8saXNSVEw6YSxwYWdlczpyLHBhbnpvb206bH09dGhpcyxjPXIubGVuZ3RoLGg9YSYmbz8xOi0xO2lmKCFsfHwhYylyZXR1cm47aWYodGhpcy5wYWdlIT09bil7Y29uc3QgZT1uZXcgRXZlbnQoXCJiZWZvcmVDaGFuZ2VcIix7YnViYmxlczohMCxjYW5jZWxhYmxlOiEwfSk7aWYodGhpcy5lbWl0KFwiYmVmb3JlQ2hhbmdlXCIsZSx0KSxlLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJufWlmKHRoaXMudHJhbnNpdGlvblRvKHQsaSkpcmV0dXJuO2xldCBkPXJbbl0ucG9zO2lmKHRoaXMuaXNJbmZpbml0ZSl7Y29uc3QgZT10aGlzLmNvbnRlbnREaW0saT1sLnRhcmdldFtzXSpoO2lmKDI9PT1jKWQrPWUqTWF0aC5mbG9vcihwYXJzZUZsb2F0KHQrXCJcIikvMik7ZWxzZXtkPVtkLGQtZSxkK2VdLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnMoZS1pKTxNYXRoLmFicyh0LWkpP2U6dH0pKX19ZCo9aCxNYXRoLmFicyhsLnRhcmdldFtzXS1kKTwxfHwobC5wYW5Ubyh7eDpvP2Q6MCx5Om8/MDpkLGZyaWN0aW9uOmV9KSx0aGlzLm9uQ2hhbmdlKG4pKX1zbGlkZVRvQ2xvc2VzdCh0KXtpZih0aGlzLnBhbnpvb20pe2NvbnN0e3BhZ2VJbmRleDplfT10aGlzLmdldFBhZ2VGcm9tUG9zaXRpb24oKTt0aGlzLnNsaWRlVG8oZSx0KX19c2xpZGVOZXh0KCl7dGhpcy5zbGlkZVRvKHRoaXMucGFnZSsxKX1zbGlkZVByZXYoKXt0aGlzLnNsaWRlVG8odGhpcy5wYWdlLTEpfWNsZWFyVHJhbnNpdGlvbnMoKXt0aGlzLmluVHJhbnNpdGlvbi5jbGVhcigpLFModGhpcy5jb250YWluZXIsdGhpcy5jbihcImluVHJhbnNpdGlvblwiKSk7Y29uc3QgdD1bXCJ0by1wcmV2XCIsXCJ0by1uZXh0XCIsXCJmcm9tLXByZXZcIixcImZyb20tbmV4dFwiXTtmb3IoY29uc3QgZSBvZiB0aGlzLnNsaWRlcyl7Y29uc3QgaT1lLmVsO2lmKGkpe2kucmVtb3ZlRXZlbnRMaXN0ZW5lcihHLHRoaXMub25BbmltYXRpb25FbmQpLGkuY2xhc3NMaXN0LnJlbW92ZSguLi50KTtjb25zdCBuPWUudHJhbnNpdGlvbjtuJiZpLmNsYXNzTGlzdC5yZW1vdmUoYGYtJHtufU91dGAsYGYtJHtufUluYCl9fXRoaXMubWFuYWdlU2xpZGVWaXNpYmxpdHkoKX1hZGRTbGlkZSh0LGUpe3ZhciBpLG4scyxvO2NvbnN0IGE9dGhpcy5wYW56b29tLHI9KG51bGw9PT0oaT10aGlzLnBhZ2VzW3RoaXMucGFnZV0pfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnBvcyl8fDAsbD0obnVsbD09PShuPXRoaXMucGFnZXNbdGhpcy5wYWdlXSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uZGltKXx8MCxjPXRoaXMuY29udGVudERpbTx0aGlzLnZpZXdwb3J0RGltO2xldCBoPUFycmF5LmlzQXJyYXkoZSk/ZTpbZV07Y29uc3QgZD1bXTtmb3IoY29uc3QgdCBvZiBoKWQucHVzaChIKHQpKTt0aGlzLnNsaWRlcy5zcGxpY2UodCwwLC4uLmQpO2ZvcihsZXQgdD0wO3Q8dGhpcy5zbGlkZXMubGVuZ3RoO3QrKyl0aGlzLnNsaWRlc1t0XS5pbmRleD10O2Zvcihjb25zdCB0IG9mIGQpdGhpcy5lbWl0KFwiYmVmb3JlSW5pdFNsaWRlXCIsdCx0LmluZGV4KTtpZih0aGlzLnBhZ2U+PXQmJih0aGlzLnBhZ2UrPWQubGVuZ3RoKSx0aGlzLnVwZGF0ZU1ldHJpY3MoKSxhKXtjb25zdCBlPShudWxsPT09KHM9dGhpcy5wYWdlc1t0aGlzLnBhZ2VdKXx8dm9pZCAwPT09cz92b2lkIDA6cy5wb3MpfHwwLGk9KG51bGw9PT0obz10aGlzLnBhZ2VzW3RoaXMucGFnZV0pfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLmRpbSl8fDAsbj10aGlzLnBhZ2VzLmxlbmd0aHx8MSxoPXRoaXMuaXNSVEw/bC1pOmktbCxkPXRoaXMuaXNSVEw/ci1lOmUtcjtjJiYxPT09bj8odDw9dGhpcy5wYWdlJiYoYS5jdXJyZW50W3RoaXMuYXhpc10tPWgsYS50YXJnZXRbdGhpcy5heGlzXS09aCksYS5wYW5Ubyh7W3RoaXMuaXNIb3Jpem9udGFsP1wieFwiOlwieVwiXTotMSplfSkpOmQmJnQ8PXRoaXMucGFnZSYmKGEudGFyZ2V0W3RoaXMuYXhpc10tPWQsYS5jdXJyZW50W3RoaXMuYXhpc10tPWQsYS5yZXF1ZXN0VGljaygpKX1mb3IoY29uc3QgdCBvZiBkKXRoaXMuZW1pdChcImluaXRTbGlkZVwiLHQsdC5pbmRleCl9cHJlcGVuZFNsaWRlKHQpe3RoaXMuYWRkU2xpZGUoMCx0KX1hcHBlbmRTbGlkZSh0KXt0aGlzLmFkZFNsaWRlKHRoaXMuc2xpZGVzLmxlbmd0aCx0KX1yZW1vdmVTbGlkZSh0KXtjb25zdCBlPXRoaXMuc2xpZGVzLmxlbmd0aDt0PSh0JWUrZSklZTtjb25zdCBpPXRoaXMuc2xpZGVzW3RdO2lmKGkpe3RoaXMucmVtb3ZlU2xpZGVFbChpLCEwKSx0aGlzLnNsaWRlcy5zcGxpY2UodCwxKTtmb3IobGV0IHQ9MDt0PHRoaXMuc2xpZGVzLmxlbmd0aDt0KyspdGhpcy5zbGlkZXNbdF0uaW5kZXg9dDt0aGlzLnVwZGF0ZU1ldHJpY3MoKSx0aGlzLnNsaWRlVG8odGhpcy5wYWdlLHtmcmljdGlvbjowLHRyYW5zaXRpb246ITF9KSx0aGlzLmVtaXQoXCJkZXN0cm95U2xpZGVcIixpKX19dXBkYXRlTWV0cmljcygpe2NvbnN0e3Bhbnpvb206ZSx2aWV3cG9ydDppLHRyYWNrOm4sc2xpZGVzOnMsaXNIb3Jpem9udGFsOm8saXNJbmZpbml0ZTphfT10aGlzO2lmKCFuKXJldHVybjtjb25zdCByPW8/XCJ3aWR0aFwiOlwiaGVpZ2h0XCIsbD1vP1wib2Zmc2V0V2lkdGhcIjpcIm9mZnNldEhlaWdodFwiO2lmKGkpe2xldCBlPU1hdGgubWF4KGlbbF0sdChpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3JdLDFlMykpLG49Z2V0Q29tcHV0ZWRTdHlsZShpKSxzPVwicGFkZGluZ1wiLGE9bz9cIlJpZ2h0XCI6XCJCb3R0b21cIjtlLT1wYXJzZU
1Zsb2F0KG5bcysobz9cIkxlZnRcIjpcIlRvcFwiKV0pK3BhcnNlRmxvYXQobltzK2FdKSx0aGlzLnZpZXdwb3J0RGltPWV9bGV0IGMsaD0wO2Zvcihjb25zdFtlLGldb2Ygcy5lbnRyaWVzKCkpe2xldCBuPTAsbz0wOyFpLmVsJiZjPyhuPWMuZGltLG89Yy5nYXApOigoe2RpbTpuLGdhcDpvfT10aGlzLmdldFNsaWRlTWV0cmljcyhpKSksYz1pKSxuPXQobiwxZTMpLG89dChvLDFlMyksaS5kaW09bixpLmdhcD1vLGkucG9zPWgsaCs9biwoYXx8ZTxzLmxlbmd0aC0xKSYmKGgrPW8pfWg9dChoLDFlMyksdGhpcy5jb250ZW50RGltPWgsZSYmKGUuY29udGVudFJlY3Rbcl09aCxlLmNvbnRlbnRSZWN0W28/XCJmdWxsV2lkdGhcIjpcImZ1bGxIZWlnaHRcIl09aCksdGhpcy5wYWdlcz10aGlzLmNyZWF0ZVBhZ2VzKCksdGhpcy5wYWdlcz10aGlzLnByb2Nlc3NQYWdlcygpLHRoaXMuc3RhdGU9PT1CLkluaXQmJnRoaXMuc2V0SW5pdGlhbFBhZ2UoKSx0aGlzLnBhZ2U9TWF0aC5tYXgoMCxNYXRoLm1pbih0aGlzLnBhZ2UsdGhpcy5wYWdlcy5sZW5ndGgtMSkpLHRoaXMubWFuYWdlU2xpZGVWaXNpYmxpdHkoKSx0aGlzLmVtaXQoXCJyZWZyZXNoXCIpfWdldFByb2dyZXNzKGUsaT0hMSxuPSExKXt2b2lkIDA9PT1lJiYoZT10aGlzLnBhZ2UpO2NvbnN0IHM9dGhpcyxvPXMucGFuem9vbSxhPXMuY29udGVudERpbSxyPXMucGFnZXNbZV18fDA7aWYoIXJ8fCFvKXJldHVybiBlPnRoaXMucGFnZT8tMToxO2xldCBsPS0xKm8uY3VycmVudC5lLGM9dCgobC1yLnBvcykvKDEqci5kaW0pLDFlMyksaD1jLGQ9Yzt0aGlzLmlzSW5maW5pdGUmJiEwIT09biYmKGg9dCgobC1yLnBvcythKS8oMSpyLmRpbSksMWUzKSxkPXQoKGwtci5wb3MtYSkvKDEqci5kaW0pLDFlMykpO2xldCB1PVtjLGgsZF0ucmVkdWNlKChmdW5jdGlvbih0LGUpe3JldHVybiBNYXRoLmFicyhlKTxNYXRoLmFicyh0KT9lOnR9KSk7cmV0dXJuIGk/dTp1PjE/MTp1PC0xPy0xOnV9c2V0Vmlld3BvcnRIZWlnaHQoKXtjb25zdHtwYWdlOnQscGFnZXM6ZSx2aWV3cG9ydDppLGlzSG9yaXpvbnRhbDpufT10aGlzO2lmKCFpfHwhZVt0XSlyZXR1cm47bGV0IHM9MDtuJiZ0aGlzLnRyYWNrJiYodGhpcy50cmFjay5zdHlsZS5oZWlnaHQ9XCJhdXRvXCIsZVt0XS5zbGlkZXMuZm9yRWFjaCgodD0+e3QuZWwmJihzPU1hdGgubWF4KHMsdC5lbC5vZmZzZXRIZWlnaHQpKX0pKSksaS5zdHlsZS5oZWlnaHQ9cz9gJHtzfXB4YDpcIlwifWdldFBhZ2VGb3JTbGlkZSh0KXtmb3IoY29uc3QgZSBvZiB0aGlzLnBhZ2VzKWZvcihjb25zdCBpIG9mIGUuc2xpZGVzKWlmKGkuaW5kZXg9PT10KXJldHVybiBlLmluZGV4O3JldHVybi0xfWdldFZpc2libGVTbGlkZXModD0wKXt2YXIgZTtjb25zdCBpPW5ldyBTZXQ7bGV0e3Bhbnpvb206bixjb250ZW50RGltOnMsdmlld3BvcnREaW06byxwYWdlczphLHBhZ2U6cn09dGhpcztpZihvKXtzPXMrKG51bGw9PT0oZT10aGlzLnNsaWRlc1t0aGlzLnNsaWRlcy5sZW5ndGgtMV0pfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmdhcCl8fDA7bGV0IGw9MDtsPW4mJm4uc3RhdGUhPT1tLkluaXQmJm4uc3RhdGUhPT1tLkRlc3Ryb3k/LTEqbi5jdXJyZW50W3RoaXMuYXhpc106YVtyXSYmYVtyXS5wb3N8fDAsdGhpcy5pc0luZmluaXRlJiYobC09TWF0aC5mbG9vcihsL3MpKnMpLHRoaXMuaXNSVEwmJnRoaXMuaXNIb3Jpem9udGFsJiYobCo9LTEpO2NvbnN0IGM9bC1vKnQsaD1sK28qKHQrMSksZD10aGlzLmlzSW5maW5pdGU/Wy0xLDAsMV06WzBdO2Zvcihjb25zdCB0IG9mIHRoaXMuc2xpZGVzKWZvcihjb25zdCBlIG9mIGQpe2NvbnN0IG49dC5wb3MrZSpzLG89bit0LmRpbSt0LmdhcDtuPGgmJm8+YyYmaS5hZGQodCl9fXJldHVybiBpfWdldFBhZ2VGcm9tUG9zaXRpb24odCl7Y29uc3R7dmlld3BvcnREaW06ZSxjb250ZW50RGltOmksc2xpZGVzOm4
1scGFnZXM6cyxwYW56b29tOm99PXRoaXMsYT1zLmxlbmd0aCxyPW4ubGVuZ3RoLGw9blswXSxjPW5bci0xXSxoPXRoaXMub3B0aW9uKFwiY2VudGVyXCIpO2xldCBkPTAsdT0wLHA9MCxmPXZvaWQgMD09PXQ/LTEqKChudWxsPT1vP3ZvaWQgMDpvLnRhcmdldFt0aGlzLmF4aXNdKXx8MCk6dDtoJiYoZis9LjUqZSksdGhpcy5pc0luZmluaXRlPyhmPGwucG9zLS41KmMuZ2FwJiYoZi09aSxwPS0xKSxmPmMucG9zK2MuZGltKy41KmMuZ2FwJiYoZi09aSxwPTEpKTpmPU1hdGgubWF4KGwucG9zfHwwLE1hdGgubWluKGYsYy5wb3MpKTtsZXQgZz1jLG09bi5maW5kKCh0PT57Y29uc3QgZT10LnBvcy0uNSpnLmdhcCxpPXQucG9zK3QuZGltKy41KnQuZ2FwO3JldHVybiBnPXQsZj49ZSYmZjxpfSkpO3JldHVybiBtfHwobT1jKSx1PXRoaXMuZ2V0UGFnZUZvclNsaWRlKG0uaW5kZXgpLGQ9dStwKmEse3BhZ2U6ZCxwYWdlSW5kZXg6dX19c2V0UGFnZUZyb21Qb3NpdGlvbigpe2NvbnN0e3BhZ2VJbmRleDp0fT10aGlzLmdldFBhZ2VGcm9tUG9zaXRpb24oKTt0aGlzLm9uQ2hhbmdlKHQpfWRlc3Ryb3koKXtpZihbQi5EZXN0cm95XS5pbmNsdWRlcyh0aGlzLnN0YXRlKSlyZXR1cm47dGhpcy5zdGF0ZT1CLkRlc3Ryb3k7Y29uc3R7Y29udGFpbmVyOnQsdmlld3BvcnQ6ZSx0cmFjazppLHNsaWRlczpuLHBhbnpvb206c309dGhpcyxvPXRoaXMub3B0aW9uKFwiY2xhc3Nlc1wiKTt0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHRoaXMub25DbGljayx7cGFzc2l2ZTohMSxjYXB0dXJlOiExfSksdC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2xpZGVUb1wiLHRoaXMub25TbGlkZVRvKSx3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHRoaXMub25SZXNpemUpLHMmJihzLmRlc3Ryb3koKSx0aGlzLnBhbnpvb209bnVsbCksbiYmbi5mb3JFYWNoKCh0PT57dGhpcy5yZW1vdmVTbGlkZUVsKHQpfSkpLHRoaXMuZGV0YWNoUGx1Z2lucygpLGUmJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLm9uU2Nyb2xsKSxlLm9mZnNldFBhcmVudCYmaSYmaS5vZmZzZXRQYXJlbnQmJmUucmVwbGFjZVdpdGgoLi4uaS5jaGlsZE5vZGVzKSk7Zm9yKGNvbnN0W2UsaV1vZiBPYmplY3QuZW50cmllcyhvKSlcImNvbnRhaW5lclwiIT09ZSYmaSYmdC5jbGFzc0xpc3QucmVtb3ZlKGkpO3RoaXMudHJhY2s9bnVsbCx0aGlzLnZpZXdwb3J0PW51bGwsdGhpcy5wYWdlPTAsdGhpcy5zbGlkZXM9W107Y29uc3QgYT10aGlzLmV2ZW50cy5nZXQoXCJyZWFkeVwiKTt0aGlzLmV2ZW50cz1uZXcgTWFwLGEmJnRoaXMuZXZlbnRzLnNldChcInJlYWR5XCIsYSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShRLFwiUGFuem9vbVwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpJfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFEsXCJkZWZhdWx0c1wiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpqfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KFEsXCJQbHVnaW5zXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOlV9KTtjb25zdCB0dD1mdW5jdGlvbih0KXtpZighRSh0KSlyZXR1cm4gMDtjb25zdCBlPXdpbmRvdy5zY3JvbGxZLGk9d2luZG93LmlubmVySGVpZ2h0LG49ZStpLHM9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxvPXMueStlLGE9cy5oZWlnaHQscj1vK2E7aWYoZT5yfHxuPG8pcmV0dXJuIDA7aWYoZTxvJiZuPnIpcmV0dXJuIDEwMDtpZihvPGUmJnI+bilyZXR1cm4gMTAwO2xldCBsPWE7bzxlJiYobC09ZS1vKSxyPm4mJihsLT1yLW4pO2NvbnN0IGM9bC9pKjEwMDtyZXR1cm4gTWF0aC5yb3VuZChjKX0sZXQ9IShcInVuZGVmaW5lZFwiPT10eXBlb2Ygd2luZG93fHwhd2luZG93LmRvY3VtZW50fHwhd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO2xldCBpdDtjb25zdCBudD1bXCJhW2hyZWZdXCIsXCJhcmVhW2hyZWZdXCIsJ2lucHV0Om5vdChbZGlzYWJsZWRdKTpub3QoW3R5cGU9XCJoaWRkZW5cIl0pOm5vdChbYXJpYS1oaWRkZW5dKScsXCJzZWxlY3Q6bm90KFtkaXNhYmxlZF0pOm5vdChbYXJpYS1oaWRkZW5dKVwiLFwidGV4dGFyZWE6bm90KFtkaXNhYmxlZF0pOm5vdChbYXJpYS1oaWRkZW5dKVwiLFwiYnV0dG9uOm5vdChbZGlzYWJsZWRdKTpub3QoW2FyaWEtaGlkZGVuXSk6bm90KC5mYW5jeWJveC1mb2N1cy1ndWFyZClcIixcImlmcmFtZVwiLFwib2JqZWN0XCIsXCJlbWJlZFwiLFwidmlkZW9cIixcImF1ZGlvXCIsXCJbY29udGVudGVkaXRhYmxlXVwiLCdbdGFiaW5kZXhdOm5vdChbdGFiaW5kZXhePVwiLVwiXSk6bm90KFtkaXNhYmxlZF0pOm5vdChbYXJpYS1oaWRkZW5dKSddLmpvaW4oXCIsXCIpLHN0PXQ9PntpZih0JiZldCl7dm9pZCAwPT09aXQmJmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikuZm9jdXMoe2dldCBwcmV2ZW50U2Nyb2xsKCl7cmV0dXJuIGl0PSEwLCExfX0pO3RyeXtpZihpdCl0LmZvY3VzKHtwcmV2ZW50U2Nyb2xsOiEwfSk7ZWxzZXtjb25zdCBlPXdpbmRvdy5zY3JvbGxZfHxkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCxpPXdpbmRvdy5zY3JvbGxYfHxkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQ7dC5mb2N1cygpLGRvY3VtZW50LmJvZHkuc2Nyb2xsVG8oe3RvcDplLGxlZnQ6aSxiZWhhdmlvcjpcImF1dG9cIn0pfX1jYXRjaCh0KXt9fX0sb3Q9KCk9Pntjb25zdCB0PWRvY3VtZW50O2xldCBlLGk9XCJcIixuPVwiXCIscz1cIlwiO3JldHVybiB0LmZ1bGxzY3JlZW5FbmFibGVkPyhpPVwicmVxdWVzdEZ1bGxzY3JlZW5cIixuPVwiZXhpdEZ1bGxzY3JlZW5cIixzPVwiZnVsbHNjcmVlbkVsZW1lbnRcIik6dC53ZWJraXRGdWxsc2NyZWVuRW5hYmxlZCYmKGk9XCJ3ZWJraXRSZXF1ZXN0RnVsbHNjcmVlblwiLG49XCJ3ZWJraXRFeGl0RnVsbHNjcmVlblwiLHM9XCJ3ZWJraXRGdWxsc2NyZWVuRWxlbWVudFwiKSxpJiYoZT17cmVxdWVzdDpmdW5jdGlvbihlPXQuZG9jdW1lbnRFbGVtZW50KXtyZXR1cm5cIndlYmtpdFJlcXVlc3RGdWxsc2NyZWVuXCI9PT1pP2VbaV0oRWxlbWVudC5BTExPV19LRVlCT0FSRF9JTlBVVCk6ZVtpXSgpfSxleGl0OmZ1bmN0aW9uKCl7cmV0dXJuIHRbc10mJnRbbl0oKX0saXNGdWxsc2NyZWVuOmZ1bmN0aW9uKCl7cmV0dXJuIHRbc119fSksZX0sYXQ9e2FuaW1hdGVkOiEwLGF1dG9Gb2N1czohMCxiYWNrZHJvcENsaWNrOlwiY2xvc2VcIixDYXJvdXNlbDp7Y2xhc3Nlczp7Y29udGFpbmVyOlwiZmFuY3lib3hfX2Nhcm91c2VsXCIsdmlld3BvcnQ6XCJmYW5jeWJveF9fdmlld3BvcnRcIix0cmFjazpcImZhbmN5Ym94X190cmFja1wiLHNsaWRlOlwiZmFuY3lib3hfX3
1NsaWRlXCJ9fSxjbG9zZUJ1dHRvbjpcImF1dG9cIixjbG9zZUV4aXN0aW5nOiExLGNvbW1vbkNhcHRpb246ITEsY29tcGFjdDooKT0+d2luZG93Lm1hdGNoTWVkaWEoXCIobWF4LXdpZHRoOiA1NzhweCksIChtYXgtaGVpZ2h0OiA1NzhweClcIikubWF0Y2hlcyxjb250ZW50Q2xpY2s6XCJ0b2dnbGVab29tXCIsY29udGVudERibENsaWNrOiExLGRlZmF1bHRUeXBlOlwiaW1hZ2VcIixkZWZhdWx0RGlzcGxheTpcImZsZXhcIixkcmFnVG9DbG9zZTohMCxGdWxsc2NyZWVuOnthdXRvU3RhcnQ6ITF9LGdyb3VwQWxsOiExLGdyb3VwQXR0cjpcImRhdGEtZmFuY3lib3hcIixoaWRlQ2xhc3M6XCJmLWZhZGVPdXRcIixoaWRlU2Nyb2xsYmFyOiEwLGlkbGU6MzUwMCxrZXlib2FyZDp7RXNjYXBlOlwiY2xvc2VcIixEZWxldGU6XCJjbG9zZVwiLEJhY2tzcGFjZTpcImNsb3NlXCIsUGFnZVVwOlwibmV4dFwiLFBhZ2VEb3duOlwicHJldlwiLEFycm93VXA6XCJwcmV2XCIsQXJyb3dEb3duOlwibmV4dFwiLEFycm93UmlnaHQ6XCJuZXh0XCIsQXJyb3dMZWZ0OlwicHJldlwifSxsMTBuOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxiKSx7Q0xPU0U6XCJDbG9zZVwiLE5FWFQ6XCJOZXh0XCIsUFJFVjpcIlByZXZpb3VzXCIsTU9EQUw6XCJZb3UgY2FuIGNsb3NlIHRoaXMgbW9kYWwgY29udGVudCB3aXRoIHRoZSBFU0Mga2V5XCIsRVJST1I6XCJTb21ldGhpbmcgV2VudCBXcm9uZywgUGxlYXNlIFRyeSBBZ2FpbiBMYXRlclwiLElNQUdFX0VSUk9SOlwiSW1hZ2UgTm90IEZvdW5kXCIsRUxFTUVOVF9OT1RfRk9VTkQ6XCJIVE1MIEVsZW1lbnQgTm90IEZvdW5kXCIsQUpBWF9OT1RfRk9VTkQ6XCJFcnJvciBMb2FkaW5nIEFKQVggOiBOb3QgRm91bmRcIixBSkFYX0ZPUkJJRERFTjpcIkVycm9yIExvYWRpbmcgQUpBWCA6IEZvcmJpZGRlblwiLElGUkFNRV9FUlJPUjpcIkVycm9yIExvYWRpbmcgUGFnZVwiLFRPR0dMRV9aT09NOlwiVG9nZ2xlIHpvb20gbGV2ZWxcIixUT0dHTEVfVEhVTUJTOlwiVG9nZ2xlIHRodW1ibmFpbHNcIixUT0dHTEVfU0xJREVTSE9XOlwiVG9nZ2xlIHNsaWRlc2hvd1wiLFRPR0dMRV9GVUxMU0NSRUVOOlwiVG9nZ2xlIGZ1bGwtc2NyZWVuIG1vZGVcIixET1dOTE9BRDpcIkRvd25sb2FkXCJ9KSxwYXJlbnRFbDpudWxsLHBsYWNlRm9jdXNCYWNrOiEwLHNob3dDbGFzczpcImYtem9vbUluVXBcIixzdGFydEluZGV4OjAsdHBsOntjbG9zZUJ1dHRvbjonPGJ1dHRvbiBkYXRhLWZhbmN5Ym94LWNsb3NlIGNsYXNzPVwiZi1idXR0b24gaXMtY2xvc2UtYnRuXCIgdGl0bGU9XCJ7e0NMT1NFfX1cIj48c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgdGFiaW5kZXg9XCItMVwiPjxwYXRoIGQ9XCJNMjAgMjBMNCA0bTE2IDBMNCAyMFwiLz48L3N2Zz48L2J1dHRvbj4nLG1haW46JzxkaXYgY2xhc3M9XCJmYW5jeWJveF9fY29udGFpbmVyXCIgcm9sZT1cImRpYWxvZ1wiIGFyaWEtbW9kYWw9XCJ0cnVlXCIgYXJpYS1sYWJlbD1cInt7TU9EQUx9fVwiIHRhYmluZGV4PVwiLTFcIj5cXG4gICAgPGRpdiBjbGFzcz1cImZhbmN5Ym94X19iYWNrZHJvcFwiPjwvZGl2PlxcbiAgICA8ZGl2IGNsYXNzPVwiZmFuY3lib3hfX2Nhcm91c2VsXCI+PC9kaXY+XFxuICAgIDxkaXYgY2xhc3M9XCJmYW5jeWJveF9fZm9vdGVyXCI+PC9kaXY+XFxuICA8L2Rpdj4nfSx0cmFwRm9jdXM6ITAsd2hlZWw6XCJ6b29tXCJ9O3ZhciBydCxsdDshZnVuY3Rpb24odCl7dFt0LkluaXQ9MF09XCJJbml0XCIsdFt0LlJlYWR5PTFdPVwiUmVhZHlcIix0W3QuQ2xvc2luZz0yXT1cIkNsb3NpbmdcIix0W3QuQ3VzdG9tQ2xvc2luZz0zXT1cIkN1c3RvbUNsb3NpbmdcIix0W3QuRGVzdHJveT00XT1cIkRlc3Ryb3lcIn0ocnR8fChydD17fSkpLGZ1bmN0aW9uKHQpe3RbdC5Mb2FkaW5nPTBdPVwiTG9hZGluZ1wiLHRbdC5PcGVuaW5nPTFdPVwiT3BlbmluZ1wiLHRbdC5SZWFkeT0yXT1cIlJlYWR5XCIsdFt0LkNsb3Npbmc9M109XCJDbG9zaW5nXCJ9KGx0fHwobHQ9e30pKTtsZXQgY3Q9XCJcIixodD0hMSxkdD0hMSx1dD1udWxsO2NvbnN0IHB0PSgpPT57bGV0IHQ9XCJcIixlPVwiXCI7Y29uc3QgaT1PZS5nZXRJbnN0YW5jZSgpO2lmKGkpe2NvbnN0IG49aS5jYXJvdXNlbCxzPWkuZ2V0U2xpZGUoKTtpZihuJiZzKXtsZXQgbz1zLnNsdWd8fHZvaWQgMCxhPXMudHJpZ2dlckVsfHx2b2lkIDA7ZT1vfHwoaS5vcHRpb24oXCJzbHVnXCIpfHxcIlwiKSwhZSYmYSYmYS5kYXRhc2V0JiYoZT1hLmRhdGFzZXQuZmFuY3lib3h8fFwiXCIpLGUmJlwidHJ1ZVwiIT09ZSYmKHQ9XCIjXCIrZSsoIW8mJm4uc2xpZGVzLmxlbmd0aD4xP1wiLVwiKyhzLmluZGV4KzEpOlwiXCIpKX19cmV0dXJue2hhc2g6dCxzbHVnOmUsaW5kZXg6MX19LGZ0PSgpPT57Y29uc3QgdD1uZXcgVVJMKGRvY3VtZW50LlVSTCkuaGFzaCxlPXQuc2xpY2UoMSkuc3BsaXQoXCItXCIpLGk9ZVtlLmxlbmd0aC0xXSxuPWkmJi9eXFwrP1xcZCskLy50ZXN0KGkpJiZwYXJzZUludChlLnBvcCgpfHxcIjFcIiwxMCl8fDE7cmV0dXJue2hhc2g6dCxzbHVnOmUuam9pbihcIi1cIiksaW5kZXg6bn19LGd0PSgpPT57Y29uc3R7c2x1Zzp0LGluZGV4OmV9PWZ0KCk7aWYoIXQpcmV0dXJuO2xldCBpPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLXNsdWc9XCIke3R9XCJdYCk7aWYoaSYmaS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImNsaWNrXCIse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pKSxPZS5nZXRJbnN0YW5jZSgpKXJldHVybjtjb25zdCBuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoYFtkYXRhLWZhbmN5Ym94PVwiJHt0fVwiXWApO24ubGVuZ3RoJiYoaT1uW2UtMV0saSYmaS5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImNsaWNrXCIse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pKSl9LG10PSgpPT57aWYoITE9PT1PZS5kZWZhdWx0cy5IYXNoKXJldHVybjtjb25zdCB0PU9lLmdldEluc3RhbmNlKCk7aWYoITE9PT0obnVsbD09dD92b2lkIDA6dC5vcHRpb25zLkhhc2gpKXJldHVybjtjb25zdHtzbHVnOmUsaW5kZXg6aX09ZnQoKSx7c2x1ZzpufT1wdCgpO3QmJihlPT09bj90Lmp1bXBUbyhpLTEpOihodD0hMCx0LmNsb3NlKCkpKSxndCgpfSx2dD0oKT0+e3V0J
1iZjbGVhclRpbWVvdXQodXQpLHF1ZXVlTWljcm90YXNrKCgoKT0+e210KCl9KSl9LGJ0PSgpPT57d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJoYXNoY2hhbmdlXCIsdnQsITEpLHNldFRpbWVvdXQoKCgpPT57bXQoKX0pLDUwMCl9O2V0JiYoL2NvbXBsZXRlfGludGVyYWN0aXZlfGxvYWRlZC8udGVzdChkb2N1bWVudC5yZWFkeVN0YXRlKT9idCgpOmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJET01Db250ZW50TG9hZGVkXCIsYnQpKTtjb25zdCB5dD1cImlzLXpvb21pbmctaW5cIjtjbGFzcyB3dCBleHRlbmRzIF97b25DcmVhdGVTbGlkZSh0LGUsaSl7Y29uc3Qgbj10aGlzLmluc3RhbmNlLm9wdGlvbkZvcihpLFwic3JjXCIpfHxcIlwiO2kuZWwmJlwiaW1hZ2VcIj09PWkudHlwZSYmXCJzdHJpbmdcIj09dHlwZW9mIG4mJnRoaXMuc2V0SW1hZ2UoaSxuKX1vblJlbW92ZVNsaWRlKHQsZSxpKXtpLnBhbnpvb20mJmkucGFuem9vbS5kZXN0cm95KCksaS5wYW56b29tPXZvaWQgMCxpLmltYWdlRWw9dm9pZCAwfW9uQ2hhbmdlKHQsZSxpLG4pe1ModGhpcy5pbnN0YW5jZS5jb250YWluZXIseXQpO2Zvcihjb25zdCB0IG9mIGUuc2xpZGVzKXtjb25zdCBlPXQucGFuem9vbTtlJiZ0LmluZGV4IT09aSYmZS5yZXNldCguMzUpfX1vbkNsb3NlKCl7dmFyIHQ7Y29uc3QgZT10aGlzLmluc3RhbmNlLGk9ZS5jb250YWluZXIsbj1lLmdldFNsaWRlKCk7aWYoIWl8fCFpLnBhcmVudEVsZW1lbnR8fCFuKXJldHVybjtjb25zdHtlbDpzLGNvbnRlbnRFbDpvLHBhbnpvb206YSx0aHVtYkVsU3JjOnJ9PW47aWYoIXN8fCFyfHwhb3x8IWF8fGEuaXNDb250ZW50TG9hZGluZ3x8YS5zdGF0ZT09PW0uSW5pdHx8YS5zdGF0ZT09PW0uRGVzdHJveSlyZXR1cm47YS51cGRhdGVNZXRyaWNzKCk7bGV0IGw9dGhpcy5nZXRab29tSW5mbyhuKTtpZighbClyZXR1cm47dGhpcy5pbnN0YW5jZS5zdGF0ZT1ydC5DdXN0b21DbG9zaW5nLGkuY2xhc3NMaXN0LnJlbW92ZSh5dCksaS5jbGFzc0xpc3QuYWRkKFwiaXMtem9vbWluZy1vdXRcIiksby5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2U9YHVybCgnJHtyfScpYDtjb25zdCBjPWkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7MT09PSgobnVsbD09PSh0PXdpbmRvdy52aXN1YWxWaWV3cG9ydCl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuc2NhbGUpfHwxKSYmT2JqZWN0LmFzc2lnbihpLnN0eWxlLHtwb3NpdGlvbjpcImFic29sdXRlXCIsdG9wOmAke2kub2Zmc2V0VG9wK3dpbmRvdy5zY3JvbGxZfXB4YCxsZWZ0OmAke2kub2Zmc2V0TGVmdCt3aW5kb3cuc2Nyb2xsWH1weGAsYm90dG9tOlwiYXV0b1wiLHJpZ2h0OlwiYXV0b1wiLHdpZHRoOmAke2Mud2lkdGh9cHhgLGhlaWdodDpgJHtjLmhlaWdodH1weGAsb3ZlcmZsb3c6XCJoaWRkZW5cIn0pO2NvbnN0e3g6aCx5OmQsc2NhbGU6dSxvcGFjaXR5OnB9PWw7aWYocCl7Y29uc3QgdD0oKHQsZSxpLG4pPT57Y29uc3Qgcz1lLXQsbz1uLWk7cmV0dXJuIGU9PmkrKChlLXQpL3Mqb3x8MCl9KShhLnNjYWxlLHUsMSwwKTthLm9uKFwiYWZ0ZXJUcmFuc2Zvcm1cIiwoKCk9PntvLnN0eWxlLm9wYWNpdHk9dChhLnNjYWxlKStcIlwifSkpfWEub24oXCJlbmRBbmltYXRpb25cIiwoKCk9PntlLmRlc3Ryb3koKX0pKSxhLnRhcmdldC5hPXUsYS50YXJnZXQuYj0wLGEudGFyZ2V0LmM9MCxhLnRhcmdldC5kPXUsYS5wYW5Ubyh7eDpoLHk6ZCxzY2FsZTp1LGZyaWN0aW9uOnA/LjI6LjMzLGlnbm9yZUJvdW5kczohMH0pLGEuaXNSZXN0aW5nJiZlLmRlc3Ryb3koKX1zZXRJbWFnZSh0LGUpe2NvbnN0IGk9dGhpcy5pbnN0YW5jZTt0LnNyYz1lLHRoaXMucHJvY2Vzcyh0LGUpLnRoZW4oKGU9Pntjb25zdHtjb250ZW50RWw6bixpbWFnZUVsOnMsdGh1bWJFbFNyYzpvLGVsOmF9PXQ7aWYoaS5pc0Nsb3NpbmcoKXx8IW58fCFzKXJldHVybjtuLm9mZnNldEhlaWdodDtjb25zdCByPSEhaS5pc09wZW5pbmdTbGlkZSh0KSYmdGhpcy5nZXRab29tSW5mbyh0KTtpZih0aGlzLm9wdGlvbihcInByb3RlY3RlZFwiKSYmYSl7YS5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwodD0+e3QucHJldmVudERlZmF1bHQoKX0pKTtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7UCh0LFwiZmFuY3lib3gtcHJvdGVjdGVkXCIpLG4uYXBwZW5kQ2hpbGQodCl9aWYobyYmcil7Y29uc3Qgcz1lLmNvbnRlbnRSZWN0LGE9TWF0aC5tYXgocy5mdWxsV2lkdGgscy5mdWxsSGVpZ2h0KTtsZXQgYz1udWxsOyFyLm9wYWNpdHkmJmE+MTIwMCYmKGM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKSxQKGMsXCJmYW5jeWJveC1naG9zdFwiKSxjLnNyYz1vLG4uYXBwZW5kQ2hpbGQoYykpO2NvbnN0IGg9KCk9PntjJiYoUChjLFwiZi1mYWRlRmFzdE91dFwiKSxzZXRUaW
11lb3V0KCgoKT0+e2MmJihjLnJlbW92ZSgpLGM9bnVsbCl9KSwyMDApKX07KGw9byxuZXcgUHJvbWlzZSgoKHQsZSk9Pntjb25zdCBpPW5ldyBJbWFnZTtpLm9ubG9hZD10LGkub25lcnJvcj1lLGkuc3JjPWx9KSkpLnRoZW4oKCgpPT57aS5oaWRlTG9hZGluZyh0KSx0LnN0YXRlPWx0Lk9wZW5pbmcsdGhpcy5pbnN0YW5jZS5lbWl0KFwicmV2ZWFsXCIsdCksdGhpcy56b29tSW4odCkudGhlbigoKCk9PntoKCksdGhpcy5pbnN0YW5jZS5kb25lKHQpfSksKCgpPT57fSkpLGMmJnNldFRpbWVvdXQoKCgpPT57aCgpfSksYT4yNTAwPzgwMDoyMDApfSksKCgpPT57aS5oaWRlTG9hZGluZyh0KSxpLnJldmVhbENvbnRlbnQodCl9KSl9ZWxzZXtjb25zdCBuPXRoaXMub3B0aW9uRm9yKHQsXCJpbml0aWFsU2l6ZVwiKSxzPXRoaXMub3B0aW9uRm9yKHQsXCJ6b29tXCIpLG89e2V2ZW50OmkucHJldk1vdXNlTW92ZUV2ZW50fHxpLm9wdGlvbnMuZXZlbnQsZnJpY3Rpb246cz8uMTI6MH07bGV0IGE9aS5vcHRpb25Gb3IodCxcInNob3dDbGFzc1wiKXx8dm9pZCAwLHI9ITA7aS5pc09wZW5pbmdTbGlkZSh0KSYmKFwiZnVsbFwiPT09bj9lLnpvb21Ub0Z1bGwobyk6XCJjb3ZlclwiPT09bj9lLnpvb21Ub0NvdmVyKG8pOlwibWF4XCI9PT1uP2Uuem9vbVRvTWF4KG8pOnI9ITEsZS5zdG9wKFwiY3VycmVudFwiKSksciYmYSYmKGE9ZS5pc0RyYWdnaW5nP1wiZi1mYWRlSW5cIjpcIlwiKSxpLmhpZGVMb2FkaW5nKHQpLGkucmV2ZWFsQ29udGVudCh0LGEpfXZhciBsfSksKCgpPT57aS5zZXRFcnJvcih0LFwie3tJTUFHRV9FUlJPUn19XCIpfSkpfXByb2Nlc3ModCxlKXtyZXR1cm4gbmV3IFByb21pc2UoKChpLHMpPT57dmFyIG87Y29uc3QgYT10aGlzLmluc3RhbmNlLHI9dC5lbDthLmNsZWFyQ29udGVudCh0KSxhLnNob3dMb2FkaW5nKHQpO2xldCBsPXRoaXMub3B0aW9uRm9yKHQsXCJjb250ZW50XCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBsJiYobD1uKGwpKSwhbHx8IUUobCkpe2lmKGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKSxsIGluc3RhbmNlb2YgSFRNTEltYWdlRWxlbWVudCl7bGV0IGk9XCJcIixuPXQuY2FwdGlvbjtpPVwic3RyaW5nXCI9PXR5cGVvZiBuJiZuP24ucmVwbGFjZSgvPFtePl0rPi9naSxcIlwiKS5zdWJzdHJpbmcoMCwxZTMpOmBJbWFnZSAke3QuaW5kZXgrMX0gb2YgJHsobnVsbD09PShvPWEuY2Fyb3VzZWwpfHx2b2lkIDA9PT1vP3ZvaWQgMDpvLnBhZ2VzLmxlbmd0aCl8fDF9YCxsLnNyYz1lfHxcIlwiLGwuYWx0PWksbC5kcmFnZ2FibGU9ITEsdC5zcmNzZXQmJmwuc2V0QXR0cmlidXRlKFwic3Jjc2V0XCIsdC5zcmNzZXQpLHRoaXMuaW5zdGFuY2UuaXNPcGVuaW5nU2xpZGUodCkmJihsLmZldGNoUHJpb3JpdHk9XCJoaWdoXCIpfXQuc2l6ZXMmJmwuc2V0QXR0cmlidXRlKFwic2l6ZXNcIix0LnNpemVzKX1QKGwsXCJmYW5jeWJveC1pbWFnZVwiKSx0LmltYWdlRWw9bCxhLnNldENvbnRlbnQodCxsLCExKTt0LnBhbnpvb209bmV3IEkocix1KHt0cmFuc2Zvcm1QYXJlbnQ6ITB9LHRoaXMub3B0aW9uKFwiUGFuem9vbVwiKXx8e30se2NvbnRlbnQ6bCx3aWR0aDooZSxpKT0+YS5vcHRpb25Gb3IodCxcIndpZHRoXCIsXCJhdXRvXCIsaSl8fFwiYXV0b1wiLGhlaWdodDooZSxpKT0+YS5vcHRpb25Gb3IodCxcImhlaWdodFwiLFwiYXV0b1wiLGkpfHxcImF1dG9cIix3aGVlbDooKT0+e2NvbnN0IHQ9YS5vcHRpb24oXCJ3aGVlbFwiKTtyZXR1cm4oXCJ6b29tXCI9PT10fHxcInBhblwiPT10KSYmdH0sY2xpY2s6KGUsaSk9Pnt2YXIgbixzO2lmKGEuaXNDb21wYWN0fHxhLmlzQ2xvc2luZygpKXJldHVybiExO2lmKHQuaW5kZXghPT0obnVsbD09PShuPWEuZ2V0U2xpZGUoKSl8fHZvaWQgMD09PW4/dm9pZCAwOm4uaW5kZXgpKXJldHVybiExO2lmKGkpe2NvbnN0IHQ9aS5jb21wb3NlZFBhdGgoKVswXTtpZihbXCJBXCIsXCJCVVRUT05cIixcIlRFWFRBUkVBXCIsXCJPUFRJT05cIixcIklOUFVUXCIsXCJTRUxFQ1RcIixcIlZJREVPXCJdLmluY2x1ZGVzKHQubm9kZU5hbWUpKXJldHVybiExfWxldCBvPSFpfHxpLnRhcmdldCYmKG51bGw9PT0ocz10LmNvbnRlbnRFbCl8fHZvaWQgMD09PXM/dm9pZCAwOnMuY29udGFpbnMoaS50YXJnZXQpKTtyZXR1cm4gYS5vcHRpb24obz9cImNvbnRlbnRDbGlja1wiOlwiYmFja2Ryb3BDbGlja1wiKXx8ITF9LGRibENsaWNrOigpPT5hLmlzQ29tcGFjdD9cInRvZ2dsZVpvb21cIjphLm9wdGlvbihcImNvbnRlbnREYmxDbGlja1wiKXx8ITEsc3Bpbm5lcjohMSxwYW5Pbmx5Wm9vbWVkOiEwLHdoZWVsTGltaXQ6MS8wLG9uOntyZWFkeTp0PT57aSh0KX0sZXJyb3I6KCk9PntzKCl9LGRlc3Ryb3k6KCk9PntzKCl9fX0pKX0pKX16b29tSW4odCl7cmV0dXJuIG5ldyBQcm9taXNlKCgoZSxpKT0+e2NvbnN0IG49dGhpcy5pbnN0YW5jZSxzPW4uY29udGFpbmVyLHtwYW56b29tOm8sY29udGVudEVsOmEsZWw6cn09dDtvJiZvLnVwZGF0ZU1ldHJpY3MoKTtjb25zdCBsPXRoaXMuZ2V0Wm9vbUluZm8odCk7aWYoIShsJiZyJiZhJiZvJiZzKSlyZXR1cm4gdm9pZCBpKCk7Y29uc3R7eDpjLHk6aCxzY2FsZTpkLG9wYWNpdHk6dX09bCxwPSgpPT57dC5zdGF0ZSE9PWx0LkNsb3NpbmcmJih1JiYoYS5zdHlsZS5vcGFjaXR5PU1hdGgubWF4KE1hdGgubWluKDEsMS0oMS1vLnNjYWxlKS8oMS1kKSksMCkrXCJcIiksby5zY2FsZT49MSYmby5zY2FsZT5vLnRhcmdldFNjYWxlLS4xJiZlKG8pKX0sZj10PT57KHQuc2NhbGU8Ljk5fHx0LnNjYWxlPjEuMDEpJiYhdC5pc0RyYWdnaW5nfHwoUyhzLHl0KSxhLnN0eWxlLm9wYWNpdHk9XCJcIix0Lm9mZihcImVuZEFuaW1hdGlvblwiLGYpLHQub2ZmKFwidG91Y2hTdGFydFwiLGYpLHQub2ZmKFwiYWZ0ZXJUcmFuc2Zvcm1cIixwKSxlKHQpKX07by5vbihcImVuZEFuaW1hdGlvblwiLGYpLG8ub24oXCJ0b3VjaFN0YXJ0XCIsZiksby5vbihcImFmdGVyVHJhbnNmb3JtXCIscCksby5vbihbXCJlcnJvclwiLFwiZGVzdHJveVwiXSwoKCk9PntpKCl9KSksby5wYW5Ubyh7eDpjLHk6aCxzY2FsZTpkLGZyaWN0aW9uOjAsaWdub3JlQm91bmRzOiEwfSksby5zdG9wKFwiY3VycmVudFwiKTtjb25zdCBnPXtldmVudDpcIm1vdXNlbW92ZVwiPT09by5wYW5Nb2RlP24ucHJldk1vdXNlTW92ZUV2ZW50fHxuLm9wdGlvbnMuZXZlbnQ6dm9pZCAwfSxtPXRoaXMub3B0aW9uRm9yKHQsXCJpbml0
1aWFsU2l6ZVwiKTtQKHMseXQpLG4uaGlkZUxvYWRpbmcodCksXCJmdWxsXCI9PT1tP28uem9vbVRvRnVsbChnKTpcImNvdmVyXCI9PT1tP28uem9vbVRvQ292ZXIoZyk6XCJtYXhcIj09PW0/by56b29tVG9NYXgoZyk6by5yZXNldCguMTcyKX0pKX1nZXRab29tSW5mbyh0KXtjb25zdHtlbDplLGltYWdlRWw6aSx0aHVtYkVsOm4scGFuem9vbTpzfT10LG89dGhpcy5pbnN0YW5jZSxhPW8uY29udGFpbmVyO2lmKCFlfHwhaXx8IW58fCFzfHx0dChuKTwzfHwhdGhpcy5vcHRpb25Gb3IodCxcInpvb21cIil8fCFhfHxvLnN0YXRlPT09cnQuRGVzdHJveSlyZXR1cm4hMTtpZihcIjBcIj09PWdldENvbXB1dGVkU3R5bGUoYSkuZ2V0UHJvcGVydHlWYWx1ZShcIi0tZi1pbWFnZXMtem9vbVwiKSlyZXR1cm4hMTtjb25zdCByPXdpbmRvdy52aXN1YWxWaWV3cG9ydHx8bnVsbDtpZigxIT09KHI/ci5zY2FsZToxKSlyZXR1cm4hMTtsZXR7dG9wOmwsbGVmdDpjLHdpZHRoOmgsaGVpZ2h0OmR9PW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkse3RvcDp1LGxlZnQ6cCxmaXRXaWR0aDpmLGZpdEhlaWdodDpnfT1zLmNvbnRlbnRSZWN0O2lmKCEoaCYmZCYmZiYmZykpcmV0dXJuITE7Y29uc3QgbT1zLmNvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtwKz1tLmxlZnQsdSs9bS50b3A7Y29uc3Qgdj0tMSoocCsuNSpmLShjKy41KmgpKSxiPS0xKih1Ky41KmctKGwrLjUqZCkpLHk9aC9mO2xldCB3PXRoaXMub3B0aW9uKFwiem9vbU9wYWNpdHlcIil8fCExO3JldHVyblwiYXV0b1wiPT09dyYmKHc9TWF0aC5hYnMoaC9kLWYvZyk+LjEpLHt4OnYseTpiLHNjYWxlOnksb3BhY2l0eTp3fX1hdHRhY2goKXtjb25zdCB0PXRoaXMsZT10Lmluc3RhbmNlO2Uub24oXCJDYXJvdXNlbC5jaGFuZ2VcIix0Lm9uQ2hhbmdlKSxlLm9uKFwiQ2Fyb3VzZWwuY3JlYXRlU2xpZGVcIix0Lm9uQ3JlYXRlU2xpZGUpLGUub24oXCJDYXJvdXNlbC5yZW1vdmVTbGlkZVwiLHQub25SZW1vdmVTbGlkZSksZS5vbihcImNsb3NlXCIsdC5vbkNsb3NlKX1kZXRhY2goKXtjb25zdCB0PXRoaXMsZT10Lmluc3RhbmNlO2Uub2ZmKFwiQ2Fyb3VzZWwuY2hhbmdlXCIsdC5vbkNoYW5nZSksZS5vZmYoXCJDYXJvdXNlbC5jcmVhdGVTbGlkZVwiLHQub25DcmVhdGVTbGlkZSksZS5vZmYoXCJDYXJvdXNlbC5yZW1vdmVTbGlkZVwiLHQub25SZW1vdmVTbGlkZSksZS5vZmYoXCJjbG9zZVwiLHQub25DbG9zZSl9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh3dCxcImRlZmF1bHRzXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOntpbml0aWFsU2l6ZTpcImZpdFwiLFBhbnpvb206e21heFNjYWxlOjF9LHByb3RlY3RlZDohMSx6b29tOiEwLHpvb21PcGFjaXR5OlwiYXV0b1wifX0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIFN1cHByZXNzZWRFcnJvciYmU3VwcHJlc3NlZEVycm9yO2NvbnN0IHh0PVwiaHRtbFwiLEV0PVwiaW1hZ2VcIixTdD1cIm1hcFwiLFB0PVwieW91dHViZVwiLEN0PVwidmltZW9cIixUdD1cImh0bWw1dmlkZW9cIixNdD0odCxlPXt9KT0+e2NvbnN0IGk9bmV3IFVSTCh0KSxuPW5ldyBVUkxTZWFyY2hQYXJhbXMoaS5zZWFyY2gpLHM9bmV3IFVSTFNlYXJjaFBhcmFtcztmb3IoY29uc3RbdCxpXW9mWy4uLm4sLi4uT2JqZWN0LmVud
1HJpZXMoZSldKXtsZXQgZT1pK1wiXCI7aWYoXCJ0XCI9PT10KXtsZXQgdD1lLm1hdGNoKC8oKFxcZCopbSk/KFxcZCopcz8vKTt0JiZzLnNldChcInN0YXJ0XCIsNjAqcGFyc2VJbnQodFsyXXx8XCIwXCIpK3BhcnNlSW50KHRbM118fFwiMFwiKStcIlwiKX1lbHNlIHMuc2V0KHQsZSl9bGV0IG89cytcIlwiLGE9dC5tYXRjaCgvI3Q9KCguKik/XFxkK3MpLyk7cmV0dXJuIGEmJihvKz1gI3Q9JHthWzFdfWApLG99LE90PXthamF4Om51bGwsYXV0b1NpemU6ITAsaWZyYW1lQXR0cjp7YWxsb3c6XCJhdXRvcGxheTsgZnVsbHNjcmVlblwiLHNjcm9sbGluZzpcImF1dG9cIn0scHJlbG9hZDohMCx2aWRlb0F1dG9wbGF5OiEwLHZpZGVvUmF0aW86MTYvOSx2aWRlb1RwbDonPHZpZGVvIGNsYXNzPVwiZmFuY3lib3hfX2h0bWw1dmlkZW9cIiBwbGF5c2lubGluZSBjb250cm9scyBjb250cm9sc0xpc3Q9XCJub2Rvd25sb2FkXCIgcG9zdGVyPVwie3twb3N0ZXJ9fVwiPlxcbiAgPHNvdXJjZSBzcmM9XCJ7e3NyY319XCIgdHlwZT1cInt7Zm9ybWF0fX1cIiAvPlNvcnJ5LCB5b3VyIGJyb3dzZXIgZG9lc25cXCd0IHN1cHBvcnQgZW1iZWRkZWQgdmlkZW9zLjwvdmlkZW8+Jyx2aWRlb0Zvcm1hdDpcIlwiLHZpbWVvOntieWxpbmU6MSxjb2xvcjpcIjAwYWRlZlwiLGNvbnRyb2xzOjEsZG50OjEsbXV0ZWQ6MH0seW91dHViZTp7Y29udHJvbHM6MSxlbmFibGVqc2FwaToxLG5vY29va2llOjEscmVsOjAsZnM6MX19LEF0PVtcImltYWdlXCIsXCJodG1sXCIsXCJhamF4XCIsXCJpbmxpbmVcIixcImNsb25lXCIsXCJpZnJhbWVcIixcIm1hcFwiLFwicGRmXCIsXCJodG1sNXZpZGVvXCIsXCJ5b3V0dWJlXCIsXCJ2aW1lb1wiXTtjbGFzcyBMdCBleHRlbmRzIF97b25CZWZvcmVJbml0U2xpZGUodCxlLGkpe3RoaXMucHJvY2Vzc1R5cGUoaSl9b25DcmVhdGVTbGlkZSh0LGUsaSl7dGhpcy5zZXRDb250ZW50KGkpfW9uQ2xlYXJDb250ZW50KHQsZSl7ZS54aHImJihlLnhoci5hYm9ydCgpLGUueGhyPW51bGwpO2NvbnN0IGk9ZS5pZnJhbWVFbDtpJiYoaS5vbmxvYWQ9aS5vbmVycm9yPW51bGwsaS5zcmM9XCIvL2Fib3V0OmJsYW5rXCIsZS5pZnJhbWVFbD1udWxsKTtjb25zdCBuPWUuY29udGVudEVsLHM9ZS5wbGFjZWhvbGRlckVsO2lmKFwiaW5saW5lXCI9PT1lLnR5cGUmJm4mJnMpbi5jbGFzc0xpc3QucmVtb3ZlKFwiZmFuY3lib3hfX2NvbnRlbnRcIiksXCJub25lXCIhPT1nZXRDb21wdXRlZFN0eWxlKG4pLmdldFByb3BlcnR5VmFsdWUoXCJkaXNwbGF5XCIpJiYobi5zdHlsZS5kaXNwbGF5PVwibm9uZVwiKSxzZXRUaW
11lb3V0KCgoKT0+e3MmJihuJiZzLnBhcmVudE5vZGUmJnMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUobixzKSxzLnJlbW92ZSgpKX0pLDApLGUuY29udGVudEVsPXZvaWQgMCxlLnBsYWNlaG9sZGVyRWw9dm9pZCAwO2Vsc2UgZm9yKDtlLmVsJiZlLmVsLmZpcnN0Q2hpbGQ7KWUuZWwucmVtb3ZlQ2hpbGQoZS5lbC5maXJzdENoaWxkKX1vblNlbGVjdFNsaWRlKHQsZSxpKXtpLnN0YXRlPT09bHQuUmVhZHkmJnRoaXMucGxheVZpZGVvKCl9b25VbnNlbGVjdFNsaWRlKHQsZSxpKXt2YXIgbixzO2lmKGkudHlwZT09PVR0KXt0cnl7bnVsbD09PShzPW51bGw9PT0obj1pLmVsKXx8dm9pZCAwPT09bj92b2lkIDA6bi5xdWVyeVNlbGVjdG9yKFwidmlkZW9cIikpfHx2b2lkIDA9PT1zfHxzLnBhdXNlKCl9Y2F0Y2godCl7fXJldHVybn1sZXQgbztpLnR5cGU9PT1DdD9vPXttZXRob2Q6XCJwYXVzZVwiLHZhbHVlOlwidHJ1ZVwifTppLnR5cGU9PT1QdCYmKG89e2V2ZW50OlwiY29tbWFuZFwiLGZ1bmM6XCJwYXVzZVZpZGVvXCJ9KSxvJiZpLmlmcmFtZUVsJiZpLmlmcmFtZUVsLmNvbnRlbnRXaW5kb3cmJmkuaWZyYW1lRWwuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeShvKSxcIipcIiksaS5wb2xsZXImJmNsZWFyVGltZW91dChpLnBvbGxlcil9b25Eb25lKHQsZSl7dC5pc0N1cnJlbnRTbGlkZShlKSYmIXQuaXNDbG9zaW5nKCkmJnRoaXMucGxheVZpZGVvKCl9b25SZWZyZXNoKHQsZSl7ZS5zbGlkZXMuZm9yRWFjaCgodD0+e3QuZWwmJih0aGlzLnJlc2l6ZUlmcmFtZSh0KSx0aGlzLnNldEFzcGVjdFJhdGlvKHQpKX0pKX1vbk1lc3NhZ2UodCl7dHJ5e2xldCBlPUpTT04ucGFyc2UodC5kYXRhKTtpZihcImh0dHBzOi8vcGxheWVyLnZpbWVvLmNvbVwiPT09dC5vcmlnaW4pe2lmKFwicmVhZHlcIj09PWUuZXZlbnQpZm9yKGxldCBlIG9mIEFycmF5LmZyb20oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcImZhbmN5Ym94X19pZnJhbWVcIikpKWUgaW5zdGFuY2VvZiBIVE1MSUZyYW1lRWxlbWVudCYmZS5jb250ZW50V2luZG93PT09dC5zb3VyY2UmJihlLmRhdGFzZXQucmVhZHk9XCJ0cnVlXCIpfWVsc2UgaWYodC5vcmlnaW4ubWF0Y2goL15odHRwczpcXC9cXC8od3d3Lik/eW91dHViZSgtbm9jb29raWUpPy5jb20kLykmJlwib25SZWFkeVwiPT09ZS5ldmVudCl7Y29uc3QgdD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChlLmlkKTt0JiYodC5kYXRhc2V0LnJlYWR5PVwidHJ1ZVwiKX19Y2F0Y2godCl7fX1sb2FkQWpheENvbnRlbnQodCl7Y29uc3QgZT10aGlzLmluc3RhbmNlLm9wdGlvbkZvcih0LFwic3JjXCIpfHxcIlwiO3RoaXMuaW5zdGFuY2Uuc2hvd0xvYWRpbmcodCk7Y29uc3QgaT10aGlzLmluc3RhbmNlLG49bmV3IFhNTEh0dHBSZXF1
1ZXN0O2kuc2hvd0xvYWRpbmcodCksbi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtuLnJlYWR5U3RhdGU9PT1YTUxIdHRwUmVxdWVzdC5ET05FJiZpLnN0YXRlPT09cnQuUmVhZHkmJihpLmhpZGVMb2FkaW5nKHQpLDIwMD09PW4uc3RhdHVzP2kuc2V0Q29udGVudCh0LG4ucmVzcG9uc2VUZXh0KTppLnNldEVycm9yKHQsNDA0PT09bi5zdGF0dXM/XCJ7e0FKQVhfTk9UX0ZPVU5EfX1cIjpcInt7QUpBWF9GT1JCSURERU59fVwiKSl9O2NvbnN0IHM9dC5hamF4fHxudWxsO24ub3BlbihzP1wiUE9TVFwiOlwiR0VUXCIsZStcIlwiKSxuLnNldFJlcXVlc3RIZWFkZXIoXCJDb250ZW50LVR5cGVcIixcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiKSxuLnNldFJlcXVlc3RIZWFkZXIoXCJYLVJlcXVlc3RlZC1XaXRoXCIsXCJYTUxIdHRwUmVxdWVzdFwiKSxuLnNlbmQocyksdC54aHI9bn1zZXRJbmxpbmVDb250ZW50KHQpe2xldCBlPW51bGw7aWYoRSh0LnNyYykpZT10LnNyYztlbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiB0LnNyYyl7Y29uc3QgaT10LnNyYy5zcGxpdChcIiNcIiwyKS5wb3AoKTtlPWk/ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaSk6bnVsbH1pZihlKXtpZihcImNsb25lXCI9PT10LnR5cGV8fGUuY2xvc2VzdChcIi5mYW5jeWJveF9fc2xpZGVcIikpe2U9ZS5jbG9uZU5vZGUoITApO2NvbnN0IGk9ZS5kYXRhc2V0LmFuaW1hdGlvbk5hbWU7aSYmKGUuY2xhc3NMaXN0LnJlbW92ZShpKSxkZWxldGUgZS5kYXRhc2V0LmFuaW1hdGlvbk5hbWUpO2xldCBuPWUuZ2V0QXR0cmlidXRlKFwiaWRcIik7bj1uP2Ake259LS1jbG9uZWA6YGNsb25lLSR7dGhpcy5pbnN0YW5jZS5pZH0tJHt0LmluZGV4fWAsZS5zZXRBdHRyaWJ1dGUoXCJpZFwiLG4pfWVsc2UgaWYoZS5wYXJlbnROb2RlKXtjb25zdCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7aS5jbGFzc0xpc3QuYWRkKFwiZmFuY3lib3gtcGxhY2Vob2xkZXJcIiksZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShpLGUpLHQucGxhY2Vob2xkZXJFbD1pfXRoaXMuaW5zdGFuY2Uuc2V0Q29udGVudCh0LGUpfWVsc2UgdGhpcy5pbnN0YW5jZS5zZXRFcnJvcih0LFwie3tFTEVNRU5UX05PVF9GT1VORH19XCIpfXNldElmcmFtZUNvbnRlbnQodCl7Y29uc3R7c3JjOmUsZWw6aX09dDtpZighZXx8XCJzdHJpbmdcIiE9dHlwZW9mIGV8fCFpKXJldHVybjtpLmNsYXNzTGlzdC5hZGQoXCJpcy1sb2FkaW5nXCIpO2NvbnN0IG49dGhpcy5pbnN0YW5jZSxzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7cy5jbGFzc05hbWU9XCJmYW5jeWJveF9faWZyYW1lXCIscy5zZXRBdHRyaWJ1dGUoXCJpZFwiLGBmYW5jeWJveF9faWZyYW1lXyR7bi5pZH1fJHt0LmluZGV4fWApO2Zvcihjb25zdFtlLGldb2YgT2JqZWN0LmVud
1HJpZXModGhpcy5vcHRpb25Gb3IodCxcImlmcmFtZUF0dHJcIil8fHt9KSlzLnNldEF0dHJpYnV0ZShlLGkpO3Mub25lcnJvcj0oKT0+e24uc2V0RXJyb3IodCxcInt7SUZSQU1FX0VSUk9SfX1cIil9LHQuaWZyYW1lRWw9cztjb25zdCBvPXRoaXMub3B0aW9uRm9yKHQsXCJwcmVsb2FkXCIpO2lmKFwiaWZyYW1lXCIhPT10LnR5cGV8fCExPT09bylyZXR1cm4gcy5zZXRBdHRyaWJ1dGUoXCJzcmNcIix0LnNyYytcIlwiKSxuLnNldENvbnRlbnQodCxzLCExKSx0aGlzLnJlc2l6ZUlmcmFtZSh0KSx2b2lkIG4ucmV2ZWFsQ29udGVudCh0KTtuLnNob3dMb2FkaW5nKHQpLHMub25sb2FkPSgpPT57aWYoIXMuc3JjLmxlbmd0aClyZXR1cm47Y29uc3QgZT1cInRydWVcIiE9PXMuZGF0YXNldC5yZWFkeTtzLmRhdGFzZXQucmVhZHk9XCJ0cnVlXCIsdGhpcy5yZXNpemVJZnJhbWUodCksZT9uLnJldmVhbENvbnRlbnQodCk6bi5oaWRlTG9hZGluZyh0KX0scy5zZXRBdHRyaWJ1dGUoXCJzcmNcIixlKSxuLnNldENvbnRlbnQodCxzLCExKX1yZXNpemVJZnJhbWUodCl7Y29uc3R7dHlwZTplLGlmcmFtZUVsOml9PXQ7aWYoZT09PVB0fHxlPT09Q3QpcmV0dXJuO2NvbnN0IG49bnVsbD09aT92b2lkIDA6aS5wYXJlbnRFbGVtZW50O2lmKCFpfHwhbilyZXR1cm47bGV0IHM9dC5hdXRvU2l6ZTt2b2lkIDA9PT1zJiYocz10aGlzLm9wdGlvbkZvcih0LFwiYXV0b1NpemVcIikpO2xldCBvPXQud2lkdGh8fDAsYT10LmhlaWdodHx8MDtvJiZhJiYocz0hMSk7Y29uc3Qgcj1uJiZuLnN0eWxlO2lmKCExIT09dC5wcmVsb2FkJiYhMSE9PXMmJnIpdHJ5e2NvbnN0IHQ9d2luZG93LmdldENvbXB1dGVkU3R5bGUobiksZT1wYXJzZUZsb2F0KHQucGFkZGluZ0xlZnQpK3BhcnNlRmxvYXQodC5wYWRkaW5nUmlnaHQpLHM9cGFyc2VGbG9hdCh0LnBhZGRpbmdUb3ApK3BhcnNlRmxvYXQodC5wYWRkaW5nQm90dG9tKSxsPWkuY29udGVudFdpbmRvdztpZihsKXtjb25zdCB0PWwuZG9jdW1lbnQsaT10LmdldEVsZW1lbnRzQnlUYWdOYW1lKHh0KVswXSxuPXQuYm9keTtyLndpZHRoPVwiXCIsbi5zdHlsZS5vdmVyZmxvdz1cImhpZGRlblwiLG89b3x8aS5zY3JvbGxXaWR0aCtlLHIud2lkdGg9YCR7b31weGAsbi5zdHlsZS5vdmVyZmxvdz1cIlwiLHIuZmxleD1cIjAgMCBhdXRvXCIsci5oZWlnaHQ9YCR7bi5zY3JvbGxIZWlnaHR9cHhgLGE9aS5zY3JvbGxIZWlnaHQrc319Y2F0Y2godCl7fWlmKG98fGEpe2NvbnN0IHQ9e2ZsZXg6XCIwIDEgYXV0b1wiLHdpZHRoOlwiXCIsaGVpZ2h0OlwiXCJ9O28mJlwiYXV0b1wiIT09byYmKHQud2lkdGg9YCR7b31weGApLGEmJlwiYXV0b1wiIT09YSYmKHQuaGVpZ2h0PWAke2F9cHhgKSxPYmplY3QuYXNzaWduKHIsdCl9fXBsYXlWaWRlbygpe2NvbnN0IHQ9dGhpcy5pbnN0YW5jZS5nZXRTbGlkZSgpO2lmKCF0KXJldHVybjtjb25zdHtlbDplfT10O2lmKCFlfHwhZS5vZmZzZXRQYXJlbnQpcmV0dXJuO2lmKCF0aGlzLm9wdGlvbkZvcih0LFwidmlkZW9BdXRvcGxheVwiKSlyZXR1cm47aWYodC50eXBlPT09VHQpdHJ5e2NvbnN0IHQ9ZS5xdWVyeVNlbGVjdG9yKFwidmlkZW9cIik7aWYodCl7Y29uc3QgZT10LnBsYXkoKTt2b2lkIDAhPT1lJiZlLnRoZW4oKCgpPT57fSkpLmNhdGNoKChlPT57dC5tdXRlZD0hMCx0LnBsYXkoKX0pKX19Y2F0Y2godCl7fWlmKHQudHlwZSE9PVB0JiZ0LnR5cGUhPT1DdClyZXR1cm47Y29uc3QgaT0oKT0+e2lmKHQuaWZyYW1lRWwmJnQuaWZyYW1lRWwuY29udGVudFdpbmRvdyl7bGV0IGU7aWYoXCJ0cnVlXCI9PT10LmlmcmFtZUVsLmRhdGFzZXQucmVhZHkpcmV0dXJuIGU9dC50eXBlPT09UHQ/e2V2ZW50OlwiY29tbWFuZFwiLGZ1bmM6XCJwbGF5VmlkZW9cIn06e21ldGhvZDpcInBsYXlcIix2YWx1ZTpcInRydWVcIn0sZSYmdC5pZnJhbWVFbC5jb250ZW50V2luZG93LnBvc3RNZXNzYWdlKEpTT04uc3RyaW5naWZ5KGUpLFwiKlwiKSx2b2lkKHQucG9sbGVyPXZvaWQgMCk7dC50eXBlPT09UHQmJihlPXtldmVudDpcImxpc3RlbmluZ1wiLGlkOnQuaWZyYW1lRWwuZ2V0QXR0cmlidXRlKFwiaWRcIil9LHQuaWZyYW1lRWwuY29udGVudFdpbmRvdy5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeShlKSxcIipcIikpfXQucG9sbGVyPXNldFRpbWVvdXQoaSwyNTApfTtpKCl9cHJvY2Vzc1R5cGUodCl7aWYodC5odG1sKXJldHVybiB0LnR5cGU9eHQsdC5zcmM9dC5odG1sLHZvaWQodC5odG1sPVwiXCIpO2NvbnN0IGU9dGhpcy5pbnN0YW5jZS5vcHRpb25Gb3IodCxcInNyY1wiLFwiXCIpO2lmKCFlfHxcInN0cmluZ1wiIT10eXBlb2YgZSlyZXR1cm47bGV0IGk9dC50eXBlLG49bnVsbDtpZihuPWUubWF0Y2goLyh5b3V0dWJlXFwuY29tfHlvdXR1XFwuYmV8eW91dHViZVxcLW5vY29va2llXFwuY29tKVxcLyg/OndhdGNoXFw/KD86LiomKT92PXx2XFwvfHVcXC98c2hvcnRzXFwvfGVtYmVkXFwvPyk/KHZpZGVvc2VyaWVzXFw/bGlzdD0oPzouKil8W1xcdy1dezExfXxcXD9saXN0VHlwZT0oPzouKikmbGlzdD0oPzouKikpKD86LiopL2kpKXtjb25zdCBzPXRoaXMub3B0aW9uRm9yKHQsUHQpLHtub2Nvb2tpZTpvfT1zLGE9ZnVuY3Rpb24odCxlKXt2YXIgaT17fTtmb3IodmFyIG4gaW4gdClPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxuKSYmZS5pbmRleE9mKG4pPDAmJihpW25dPXRbbl0pO2lmKG51bGwhPXQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBzPTA7Zm9yKG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtzPG4ubGVuZ3RoO3MrKyllLmluZGV4T2YobltzXSk8MCYmT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHQsbltzXSkmJihpW25bc11dPXRbbltzXV0pfXJldHVybiBpfShzLFtcIm5vY29va2llXCJdKSxyPWB3d3cueW91dHViZSR7bz9cIi1ub2Nvb2tpZVwiOlwiXCJ9LmNvbWAsbD1NdChlLGEpLGM9ZW5jb2RlVVJJQ29tcG9uZW50KG5bMl0pO3QudmlkZW9JZD1jLHQuc3JjPWBodHRwczovLyR7cn0vZW1iZWQvJHtjfT8ke2x9YCx0LnRodW1iU3JjPXQudGh1bWJTcmN8fGBodHRwczovL2kueXRpbWcuY29tL3ZpLyR7Y30vbXFkZWZhdWx0LmpwZ2AsaT1QdH1lbHNlIGlmKG49ZS5tYXRjaCgvXi4rdmltZW8uY29tXFwvKD86XFwvKT8oW1xcZF0rKSgoXFwvfFxcP2g9KShbYS16MC05XSspKT8oLiopPy8pKXtjb25zdCBzPU10KGUsdGhpcy5vcHRpb25Gb3IodCxDdCkpLG89ZW5jb2RlVVJJQ29tcG9uZW50KG5bMV0pLGE9bls0XXx8XCJcIjt0LnZpZGVvSWQ9byx0LnNyYz1gaHR0cHM6Ly9wbGF5ZXIudmltZW8uY29tL3ZpZGVvLyR7b30/JHthP2BoPSR7YX0ke3M/XCImXCI6XCJcIn1gOlwiXCJ9JHtzfWAsaT1DdH1pZighaSYmdC50cmlnZ2VyRWwpe2NvbnN0IGU9dC50cmlnZ2VyRWwuZGF0YXNldC50eXBlO0F0LmluY2x1ZGVzKGUpJiYoaT1lKX1pfHxcInN0cmluZ1wiPT10eXBlb2YgZSYmKFwiI1wiPT09ZS5jaGFyQXQoMCk/aT1cImlubGluZVwiOihuPWUubWF0Y2goL1xcLihtcDR8bW92fG9ndnx3ZWJtKSgoXFw/fCMpLiopPyQvaSkpPyhpPVR0LHQudmlkZW9Gb3JtYXQ9dC52aWRlb0Zvcm1hdHx8XCJ2aWRlby9cIisoXCJvZ3ZcIj09PW5bMV0/XCJvZ2dcIjpuWzFdKSk6ZS5tYXRjaCgvKF5kYXRhOmltYWdlXFwvW2EtejAtOStcXC89XSosKXwoXFwuKGpwKGV8Z3xlZyl8Z2lmfHBuZ3xibXB8d2VicHxzdmd8aWNvKSgoXFw/fCMpLiopPyQpL2kpP2k9RXQ6ZS5tYXRjaCgvXFwuKHBkZikoKFxcP3wjKS4qKT8kL2kpJiYoaT1cInBk
1ZlwiKSksKG49ZS5tYXRjaCgvKD86bWFwc1xcLik/Z29vZ2xlXFwuKFthLXpdezIsM30oPzpcXC5bYS16XXsyfSk/KVxcLyg/Oig/Oig/Om1hcHNcXC8oPzpwbGFjZVxcLyg/Oi4qKVxcLyk/XFxAKC4qKSwoXFxkKy4/XFxkKz8peikpfCg/OlxcP2xsPSkpKC4qKT8vaSkpPyh0LnNyYz1gaHR0cHM6Ly9tYXBzLmdvb2dsZS4ke25bMV19Lz9sbD0keyhuWzJdP25bMl0rXCImej1cIitNYXRoLmZsb29yKHBhcnNlRmxvYXQoblszXSkpKyhuWzRdP25bNF0ucmVwbGFjZSgvXlxcLy8sXCImXCIpOlwiXCIpOm5bNF0rXCJcIikucmVwbGFjZSgvXFw/LyxcIiZcIil9Jm91dHB1dD0ke25bNF0mJm5bNF0uaW5kZXhPZihcImxheWVyPWNcIik+MD9cInN2ZW1iZWRcIjpcImVtYmVkXCJ9YCxpPVN0KToobj1lLm1hdGNoKC8oPzptYXBzXFwuKT9nb29nbGVcXC4oW2Etel17MiwzfSg/OlxcLlthLXpdezJ9KT8pXFwvKD86bWFwc1xcL3NlYXJjaFxcLykoLiopL2kpKSYmKHQuc3JjPWBodHRwczovL21hcHMuZ29vZ2xlLiR7blsxXX0vbWFwcz9xPSR7blsyXS5yZXBsYWNlKFwicXVlcnk9XCIsXCJxPVwiKS5yZXBsYWNlKFwiYXBpPTFcIixcIlwiKX0mb3V0cHV0PWVtYmVkYCxpPVN0KSxpPWl8fHRoaXMuaW5zdGFuY2Uub3B0aW9uKFwiZGVmYXVsdFR5cGVcIiksdC50eXBlPWksaT09PUV0JiYodC50aHVtYlNyYz10LnRodW1iU3JjfHx0LnNyYyl9c2V0Q29udGVudCh0KXtjb25zdCBlPXRoaXMuaW5zdGFuY2Uub3B0aW9uRm9yKHQsXCJzcmNcIil8fFwiXCI7aWYodCYmdC50eXBlJiZlKXtzd2l0Y2godC50eXBlKXtjYXNlIHh0OnRoaXMuaW5zdGFuY2Uuc2V0Q29udGVudCh0LGUpO2JyZWFrO2Nhc2UgVHQ6Y29uc3QgaT10aGlzLm9wdGlvbihcInZpZGVvVHBsXCIpO2kmJnRoaXMuaW5zdGFuY2Uuc2V0Q29udGVudCh0LGkucmVwbGFjZSgvXFx7XFx7c3JjXFx9XFx9L2dpLGUrXCJcIikucmVwbGFjZSgvXFx7XFx7Zm9ybWF0XFx9XFx9L2dpLHRoaXMub3B0aW9uRm9yKHQsXCJ2aWRlb0Zvcm1hdFwiKXx8XCJcIikucmVwbGFjZSgvXFx7XFx7cG9zdGVyXFx9XFx9L2dpLHQucG9zdGVyfHx0LnRodW1iU3JjfHxcIlwiKSk7YnJlYWs7Y2FzZVwiaW5saW5lXCI6Y2FzZVwiY2xvbmVcIjp0aGlzLnNldElubGluZUNvbnRlbnQodCk7YnJlYWs7Y2FzZVwiYWpheFwiOnRoaXMubG9hZEFqYXhDb250ZW50KHQpO2JyZWFrO2Nhc2VcInBkZlwiOmNhc2UgU3Q6Y2FzZSBQdDpjYXNlIEN0OnQucHJlbG9hZD0hMTtjYXNlXCJpZnJhbWVcIjp0aGlzLnNldElmcmFtZUNvbnRlbnQodCl9dGhpcy5zZXRBc3BlY3RSYXRpbyh0KX19c2V0QXNwZWN0UmF0aW8odCl7Y29uc3QgZT10LmNvbnRlbnRFbDtpZighKHQuZWwmJmUmJnQudHlwZSYmW1B0LEN0LFR0XS5pbmNsdWRlcyh0LnR5cGUpKSlyZXR1cm47bGV0IGksbj10LndpZHRofHxcImF1dG9cIixzPXQuaGVpZ2h0fHxcImF1dG9cIjtpZihcImF1dG9cIj09PW58fFwiYXV0b1wiPT09cyl7aT10aGlzLm9wdGlvbkZvcih0LFwidmlkZW9SYXRpb1wiKTtjb25zdCBlPShpK1wiXCIpLm1hdGNoKC8oXFxkKylcXHMqXFwvXFxzPyhcXGQrKS8pO2k9ZSYmZS5sZW5ndGg+Mj9wYXJzZUZsb2F0KGVbMV0pL3BhcnNlRmxvYXQoZVsyXSk6cGFyc2VGbG9hdChpK1wiXCIpfWVsc2UgbiYmcyYmKGk9bi9zKTtpZighaSlyZXR1cm47ZS5zdHlsZS5hc3BlY3RSYXRpbz1cIlwiLGUuc3R5bGUud2lkdGg9XCJcIixlLnN0eWxlLmhlaWdodD1cIlwiLGUub2Zmc2V0SGVpZ2h0O2NvbnN0IG89ZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxhPW8ud2lkdGh8fDEscj1vLmhlaWdodHx8MTtlLnN0eWxlLmFzcGVjdFJhdGlvPWkrXCJcIixpPGEvcj8ocz1cImF1dG9cIj09PXM/cjpNYXRoLm1pbihyLHMpLGUuc3R5bGUud2lkdGg9XCJhdXRvXCIsZS5zdHlsZS5oZWlnaHQ9YCR7c31weGApOihuPVwiYXV0b1wiPT09bj9hOk1hdGgubWluKGEsbiksZS5zdHlsZS53aWR0aD1gJHtufXB4YCxlLnN0eWxlLmhlaWdodD1cImF1dG9cIil9YXR0YWNoKCl7Y29uc3QgdD10aGlzLGU9dC5pbnN0YW5jZTtlLm9uKFwiQ2Fyb3VzZWwuYmVmb3JlSW5pdFNsaWRlXCIsdC5vbkJlZm9yZUluaXRTbGlkZSksZS5vbihcIkNhcm91c2VsLmNyZWF0ZVNsaWRlXCIsdC5vbkNyZWF0ZVNsaWRlKSxlLm9uKFwiQ2Fyb3VzZWwuc2VsZWN0U2xpZGVcIix0Lm9uU2VsZWN0U2xpZGUpLGUub24oXCJDYXJvdXNlbC51bnNlbGVjdFNsaWRlXCIsdC5vblVuc2VsZWN0U2xpZGUpLGUub24oXCJDYXJvdXNlbC5QYW56b29tLnJlZnJlc2hcIix0Lm9uUmVmcmVzaCksZS5vbihcImRvbmVcIix0Lm9uRG9uZSksZS5vbihcImNsZWFyQ29udGVudFwiLHQub25DbGVhckNvbnRlbnQpLHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLHQub25NZXNzYWdlKX1kZXRhY2goKXtjb25zdCB0PXRoaXMsZT10Lmluc3RhbmNlO2Uub2ZmKFwiQ2Fyb3VzZWwuYmVmb3JlSW5pdFNsaWRlXCIsdC5vbkJlZm9yZUluaXRTbGlkZSksZS5vZmYoXCJDYXJvdXNlbC5jcmVhdGVTbGlkZVwiLHQub25DcmVhdGVTbGlkZSksZS5vZmYoXCJDYXJvdXNlbC5zZWxlY3RTbGlkZVwiLHQub25TZWxlY3RTbGlkZSksZS5vZmYoXCJDYXJvdXNlbC51bnNlbGVjdFNsaWRlXCIsdC5vblVuc2VsZWN0U2xpZGUpLGUub2ZmKFwiQ2Fyb3VzZWwuUGFuem9vbS5yZWZyZXNoXCIsdC5vblJlZnJlc2gpLGUub2ZmKFwiZG9uZVwiLHQub25Eb25lKSxlLm9mZihcImNsZWFyQ29udGVudFwiLHQub25DbGVhckNvbnRlbnQpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLHQub25NZXNzYWdlKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KEx0LFwiZGVmYXVsdHNcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6T3R9KTtjb25zdCB6dD1cInBsYXlcIixSdD1cInBhdXNlXCIsa3Q9XCJyZWFkeVwiO2NsYXNzIEl0IGV4dGVuZHMgX3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJzdGF0ZVwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTprdH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiaW5Ib3ZlclwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwidGltZXJcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicHJvZ3Jlc3NCYXJcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pfWdldCBpc0FjdGl2ZSgpe3JldHVybiB0aGlzLnN0YXRlIT09a3R9b25SZWFkeSh0KXt0aGlzLm9wdGlvbihcImF1dG9TdGFydFwiKSYmKHQuaXNJbmZpbml0ZXx8dC5wYWdlPHQucGFnZXMubGVuZ3RoLTEpJiZ0aGlzLnN0YXJ0KCl9b25DaGFuZ2UoKXt0aGlzLnJlbW92ZVByb2dyZXNzQmFyKCksdGhpcy5wYXVzZSgpfW9uU2V0dGxlKCl7dGhpcy5yZXN1bWUoKX1vblZpc2liaWxpdHlDaGFuZ2UoKXtcInZpc2libGVcIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT90aGlzLnJlc3VtZSgpOnRoaXMucGF1c2UoKX1vbk1vdXNlRW50ZXIoKXt0aGlzLmluSG92ZXI9ITAsdGhpcy5wYXVzZSgpfW9uTW91c2VMZWF2ZSgpe3ZhciB0O3RoaXMuaW5Ib3Zlcj0hMSwobnVsbD09PSh0PXRoaXMuaW5zdGFuY2UucGFuem9vbSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuaXNSZXN0aW5nKSYmdGhpcy5yZXN1bWUoKX1vblRpbWVyRW5kKCl7Y29uc3QgdD10aGlzLmluc3RhbmNlO1wicGxheVwiPT09dGhpcy5zdGF0ZSYmKHQuaXNJbmZpbml0ZXx8dC5wYWdlIT09dC5wYWdlcy5sZW5ndGgtMT90LnNsaWRlTmV4dCgpOnQuc2xpZGVUbygwKSl9cmVtb3ZlUHJvZ3Jlc3NCYXIoKXt0aGlzLnByb2dyZXNzQmFyJiYodGhpcy5wcm9ncmVzc0Jhci5yZW1vdmUoKSx0aGlzLnByb2dyZXNzQmFyPW51bGwpfWNyZWF0ZVByb2dyZXNzQmFyKCl7dmFyIHQ7aWYoIXRoaXMub3B0aW9uKFwic2hvd1Byb2dyZXNzXCIpKXJldHVybi
1BudWxsO3RoaXMucmVtb3ZlUHJvZ3Jlc3NCYXIoKTtjb25zdCBlPXRoaXMuaW5zdGFuY2UsaT0obnVsbD09PSh0PWUucGFnZXNbZS5wYWdlXSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuc2xpZGVzKXx8W107bGV0IG49dGhpcy5vcHRpb24oXCJwcm9ncmVzc1BhcmVudEVsXCIpO2lmKG58fChuPSgxPT09aS5sZW5ndGg/aVswXS5lbDpudWxsKXx8ZS52aWV3cG9ydCksIW4pcmV0dXJuIG51bGw7Y29uc3Qgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO3JldHVybiBQKHMsXCJmLXByb2dyZXNzXCIpLG4ucHJlcGVuZChzKSx0aGlzLnByb2dyZXNzQmFyPXMscy5vZmZzZXRIZWlnaHQsc31zZXQoKXtjb25zdCB0PXRoaXMsZT10Lmluc3RhbmNlO2lmKGUucGFnZXMubGVuZ3RoPDIpcmV0dXJuO2lmKHQudGltZXIpcmV0dXJuO2NvbnN0IGk9dC5vcHRpb24oXCJ0aW1lb3V0XCIpO3Quc3RhdGU9enQsUChlLmNvbnRhaW5lcixcImhhcy1hdXRvcGxheVwiKTtsZXQgbj10LmNyZWF0ZVByb2dyZXNzQmFyKCk7biYmKG4uc3R5bGUudHJhbnNpdGlvbkR1cmF0aW9uPWAke2l9bXNgLG4uc3R5bGUudHJhbnNmb3JtPVwic2NhbGVYKDEpXCIpLHQudGltZXI9c2V0VGltZW91dCgoKCk9Pnt0LnRpbWVyPW51bGwsdC5pbkhvdmVyfHx0Lm9uVGltZXJFbmQoKX0pLGkpLHQuZW1pdChcInNldFwiKX1jbGVhcigpe2NvbnN0IHQ9dGhpczt0LnRpbWVyJiYoY2xlYXJUaW1lb3V0KHQudGltZXIpLHQudGltZXI9bnVsbCksdC5yZW1vdmVQcm9ncmVzc0JhcigpfXN0YXJ0KCl7Y29uc3QgdD10aGlzO2lmKHQuc2V0KCksdC5zdGF0ZSE9PWt0KXtpZih0Lm9wdGlvbihcInBhdXNlT25Ib3ZlclwiKSl7Y29uc3QgZT10Lmluc3RhbmNlLmNvbnRhaW5lcjtlLmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWVudGVyXCIsdC5vbk1vdXNlRW50ZXIsITEpLGUuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlbGVhdmVcIix0Lm9uTW91c2VMZWF2ZSwhMSl9ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIix0Lm9uVmlzaWJpbGl0eUNoYW5nZSwhMSksdC5lbWl0KFwic3RhcnRcIil9fXN0b3AoKXtjb25zdCB0PXRoaXMsZT10LnN0YXRlLGk9dC5pbnN0YW5jZS5jb250YWluZXI7dC5jbGVhcigpLHQuc3RhdGU9a3QsaS5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2VlbnRlclwiLHQub25Nb3VzZUVudGVyLCExKSxpLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZWxlYXZlXCIsdC5vbk1vdXNlTGVhdmUsITEpLGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsdC5vblZpc2liaWxpdHlDaGFuZ2UsITEpLFMoaSxcImhhcy1hdXRvcGxheVwiKSxlIT09a3QmJnQuZW1pdChcInN0b3BcIil9cGF1c2UoKXtjb25zdCB0PXRoaXM7dC5zdGF0ZT09PXp0JiYodC5zdGF0ZT1SdCx0LmNsZWFyKCksdC5lbWl0KFJ0KSl9cmVzdW1lKCl7Y29uc3QgdD10aGlzLGU9dC5pbnN0YW5jZTtpZihlLmlzSW5maW5pdGV8fGUucGFnZSE9PWUucGFnZXMubGVuZ3RoLTEpaWYodC5zdGF0ZSE9PXp0KXtpZih0LnN0YXRlPT09UnQmJiF0LmluSG92ZXIpe2NvbnN0IGU9bmV3IEV2ZW50KFwicmVzdW1lXCIse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pO3QuZW1pdChcInJlc3VtZVwiLGUpLGUuZGVmYXVsdFByZXZlbnRlZHx8dC5zZXQoKX19ZWxzZSB0LnNldCgpO2Vsc2UgdC5zdG9wKCl9dG9nZ2xlKCl7dGhpcy5zdGF0ZT09PXp0fHx0aGlzLnN0YXRlPT09UnQ/dGhpcy5zdG9wKCk6dGhpcy5zdGFydCgpfWF0dGFjaCgpe2NvbnN0IHQ9dGhpcyxlPXQuaW5zdGFuY2U7ZS5vbihcInJlYWR5XCIsdC5vblJlYWR5KSxlLm9uKFwiUGFuem9vbS5zdGFydEFuaW1hdGlvblwiLHQub25DaGFuZ2UpLGUub24oXCJQYW56b29tLmVuZEFuaW1hdGlvblwiLHQub25TZXR0bGUpLGUub24oXCJQYW56b29tLnRvdWNoTW92ZVwiLHQub25DaGFuZ2UpfWRldGFjaCgpe2NvbnN0IHQ9dGhpcyxlPXQuaW5zdGFuY2U7ZS5vZmYoXCJyZWFkeVwiLHQub25SZWFkeSksZS5vZmYoXCJQYW56b29tLnN0YXJ0QW5pbWF0aW9uXCIsdC5vbkNoYW5nZSksZS5vZmYoXCJQYW56b29tLmVuZEFuaW1hdGlvblwiLHQub25TZXR0bGUpLGUub2ZmKFwiUGFuem9vbS50b3VjaE1vdmVcIix0Lm9uQ2hhbmdlKSx0LnN0b3AoKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KEl0LFwiZGVmYXVsdHNcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6e2F1dG9TdGFydDohMCxwYXVzZU9uSG92ZXI6ITAscHJvZ3Jlc3NQYXJlbnRFbDpudWxsLHNob3dQcm9ncmVzczohMCx0aW1lb3V0OjNlM319KTtjbGFzcyBEdCBleHRlbmRzIF97Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicmVmXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm51bGx9KX1vblByZXBhcmUodCl7Y29uc3QgZT10LmNhcm91c2VsO2lmKCFlKXJldHVybjtjb25zdCBpPXQuY29udGFpbmVyO2kmJihlLm9wdGlvbnMuQXV0b3BsYXk9dSh7YXV0b1N0YXJ0OiExfSx0aGlzLm9wdGlvbihcIkF1dG9wbGF5XCIpfHx7fSx7cGF1c2VPbkhvdmVyOiExLHRpbWVvdXQ6dGhpcy5vcHRpb24oXCJ0aW1lb3V0XCIpLHByb2dyZXNzUGFyZW50RWw6KCk9PnRoaXMub3B0aW9uKFwicHJvZ3Jlc3NQYXJlbnRFbFwiKXx8bnVsbCxvbjp7c3RhcnQ6KCk9Pnt0LmVtaXQoXCJzdGFydFNsaWRlc2hvd1wiKX0sc2V0OmU9Pnt2YXIgbjtpLmNsYXNzTGlzdC5hZGQoXCJoYXMtc2xpZGVzaG93XCIpLChudWxsPT09KG49dC5nZXRTbGlkZSgpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5zdGF0ZSkhPT1sdC5SZWFkeSYmZS5wYXVzZSgpfSxzdG9wOigpPT57aS5jbGFzc0xpc3QucmVtb3ZlKFwiaGFzLXNsaWRlc2hvd1wiKSx0LmlzQ29tcGFjdHx8dC5lbmRJZGxlKCksdC5lbWl0KFwiZW5kU2xpZGVzaG93XCIpfSxyZXN1bWU6KGUsaSk9Pnt2YXIgbixzLG87IWl8fCFpLmNhbmNlbGFibGV8fChudWxsPT09KG49dC5nZXRTbGlkZSgpKXx8dm9pZCAwPT09bj92b2lkIDA6bi5zdGF0ZSk9PT1sdC5SZWFkeSYmKG51bGw9PT0obz1udWxsPT09KHM9dC5jYXJvdXNlbCl8fHZvaWQgMD09PX
1M/dm9pZCAwOnMucGFuem9vbSl8fHZvaWQgMD09PW8/dm9pZCAwOm8uaXNSZXN0aW5nKXx8aS5wcmV2ZW50RGVmYXVsdCgpfX19KSxlLmF0dGFjaFBsdWdpbnMoe0F1dG9wbGF5Okl0fSksdGhpcy5yZWY9ZS5wbHVnaW5zLkF1dG9wbGF5KX1vblJlYWR5KHQpe2NvbnN0IGU9dC5jYXJvdXNlbCxpPXRoaXMucmVmO2kmJmUmJnRoaXMub3B0aW9uKFwicGxheU9uU3RhcnRcIikmJihlLmlzSW5maW5pdGV8fGUucGFnZTxlLnBhZ2VzLmxlbmd0aC0xKSYmaS5zdGFydCgpfW9uRG9uZSh0LGUpe2NvbnN0IGk9dGhpcy5yZWYsbj10LmNhcm91c2VsO2lmKCFpfHwhbilyZXR1cm47Y29uc3Qgcz1lLnBhbnpvb207cyYmcy5vbihcInN0YXJ0QW5pbWF0aW9uXCIsKCgpPT57dC5pc0N1cnJlbnRTbGlkZShlKSYmaS5zdG9wKCl9KSksdC5pc0N1cnJlbnRTbGlkZShlKSYmaS5yZXN1bWUoKX1vbktleWRvd24odCxlKXt2YXIgaTtjb25zdCBuPXRoaXMucmVmO24mJmU9PT10aGlzLm9wdGlvbihcImtleVwiKSYmXCJCVVRUT05cIiE9PShudWxsPT09KGk9ZG9jdW1lbnQuYWN0aXZlRWxlbWVudCl8fHZvaWQgMD09PWk/dm9pZCAwOmkubm9kZU5hbWUpJiZuLnRvZ2dsZSgpfWF0dGFjaCgpe2NvbnN0IHQ9dGhpcyxlPXQuaW5zdGFuY2U7ZS5vbihcIkNhcm91c2VsLmluaXRcIix0Lm9uUHJlcGFyZSksZS5vbihcIkNhcm91c2VsLnJlYWR5XCIsdC5vblJlYWR5KSxlLm9uKFwiZG9uZVwiLHQub25Eb25lKSxlLm9uKFwia2V5ZG93blwiLHQub25LZXlkb3duKX1kZXRhY2goKXtjb25zdCB0PXRoaXMsZT10Lmluc3RhbmNlO2Uub2ZmKFwiQ2Fyb3VzZWwuaW5pdFwiLHQub25QcmVwYXJlKSxlLm9mZihcIkNhcm91c2VsLnJlYWR5XCIsdC5vblJlYWR5KSxlLm9mZihcImRvbmVcIix0Lm9uRG9uZSksZS5vZmYoXCJrZXlkb3duXCIsdC5vbktleWRvd24pfX1PYmplY3QuZGVmaW5lUHJvcGVydHkoRHQsXCJkZWZhdWx0c1wiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp7a2V5OlwiIFwiLHBsYXlPblN0YXJ0OiExLHByb2dyZXNzUGFyZW50RWw6dD0+e3ZhciBlO3JldHVybihudWxsPT09KGU9dC5pbnN0YW5jZS5jb250YWluZXIpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnF1ZXJ5U2VsZWN0b3IoXCIuZmFuY3lib3hfX3Rvb2xiYXIgW2RhdGEtZmFuY3lib3gtdG9nZ2xlLXNsaWRlc2hvd11cIikpfHx0Lmluc3RhbmNlLmNvbnRhaW5lcn0sdGltZW91dDozZTN9fSk7Y29uc3QgRnQ9e2NsYXNzZXM6e2NvbnRhaW5lcjpcImYtdGh1bWJzIGYtY2Fyb3VzZWxfX3RodW1ic1wiLHZpZXdwb3J0OlwiZi10aHVtYnNfX3ZpZXdwb3J0XCIsdHJhY2s6XCJmLXRodW1ic19fdHJhY2tcIixzbGlkZTpcImYtdGh1bWJzX19zbGlkZVwiLGlzUmVzdGluZzpcImlzLXJlc3RpbmdcIixpc1NlbGVjdGVkOlwiaXMtc2VsZWN0ZWRcIixpc0xvYWRpbmc6XCJpcy1sb2FkaW5nXCIsaGFzVGh1bWJzOlwiaGFzLXRodW1ic1wifSxtaW5Db3VudDoyLHBhcmVudEVsOm51bGwsdGh1bWJUcGw6JzxidXR0b24gY2xhc3M9XCJmLXRodW1ic19fc2xpZGVfX2J1dHRvblwiIHRhYmluZGV4PVwiMFwiIHR5cGU9XCJidXR0b25cIiBhcmlhLWxhYmVsPVwie3tHT1RPfX1cIiBkYXRhLWNhcm91c2VsLWluZGV4PVwiJWlcIj48aW1nIGNsYXNzPVwiZi10aHVtYnNfX3NsaWRlX19pbWdcIiBkYXRhLWxhenktc3JjPVwie3slc319XCIgYWx0PVwiXCIgLz48L2J1dHRvbj4nLHR5cGU6XCJtb2Rlcm5cIn07dmFyIGp0OyFmdW5jdGlvbih0KXt0W3QuSW5pdD0wXT1cIkluaXRcIix0W3QuUmVhZHk9MV09XCJSZWFkeVwiLHRbdC5IaWRkZW49Ml09XCJIaWRkZW5cIn0oanR8fChqdD17fSkpO2NvbnN0IEJ0PVwiaXNSZXN0aW5nXCIsSHQ9XCJ0aHVtYldpZHRoXCIsTnQ9XCJ0aHVtYkhlaWdodFwiLF90PVwidGh1bWJDbGlwV2lkdGhcIjtsZXQgJHQ9Y2xhc3MgZXh0ZW5kcyBfe2NvbnN0cnVjdG9yKCl7c3VwZXIoLi4uYXJndW1lbnRzKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInR5cGVcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6XCJtb2Rlcm5cIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiY29udGFpbmVyXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInRyYWNrXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImNhcm91c2VsXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInRodW1iV2lkdGhcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6MH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwidGh1bWJDbGlwV2lkdGhcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6MH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwidGh1bWJIZWlnaHRcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6MH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwidGh1bWJHYXBcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6MH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwidGh1bWJFeHRyYUdhcFwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTowfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJzdGF0ZVwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpqdC5Jbml0fSl9Z2V0IGlzTW9kZXJuKCl7cmV0dXJuXCJtb2Rlcm5cIj09PXRoaXMudHlwZX1vbkluaXRTbGlkZSh0LGUpe2NvbnN0IGk9ZS5lbD9lLmVsLmRhdGFzZXQ6dm9pZCAwO2kmJihlLnRodW1iU3JjPWkudGh1bWJTcmN8fGUudGh1bWJTcmN8fFwiXCIsZVtfdF09cGFyc2VGbG9hdChpW190XXx8XCJcIil8fGVbX3RdfHwwLGVbTnRdPXBhcnNlRmxvYXQo
1aS50aHVtYkhlaWdodHx8XCJcIil8fGVbTnRdfHwwKSx0aGlzLmFkZFNsaWRlKGUpfW9uSW5pdFNsaWRlcygpe3RoaXMuYnVpbGQoKX1vbkNoYW5nZSgpe3ZhciB0O2lmKCF0aGlzLmlzTW9kZXJuKXJldHVybjtjb25zdCBlPXRoaXMuY29udGFpbmVyLGk9dGhpcy5pbnN0YW5jZSxuPWkucGFuem9vbSxzPXRoaXMuY2Fyb3VzZWwsYT1zP3MucGFuem9vbTpudWxsLHI9aS5wYWdlO2lmKG4mJnMmJmEpe2lmKG4uaXNEcmFnZ2luZyl7UyhlLHRoaXMuY24oQnQpKTtsZXQgbj0obnVsbD09PSh0PXMucGFnZXNbcl0pfHx2b2lkIDA9PT10P3ZvaWQgMDp0LnBvcyl8fDA7bis9aS5nZXRQcm9ncmVzcyhyKSoodGhpc1tfdF0rdGhpcy50aHVtYkdhcCk7bGV0IG89YS5nZXRCb3VuZHMoKTstMSpuPm8ueC5taW4mJi0xKm48by54Lm1heCYmYS5wYW5Ubyh7eDotMSpuLGZyaWN0aW9uOi4xMn0pfWVsc2UgbyhlLHRoaXMuY24oQnQpLG4uaXNSZXN0aW5nKTt0aGlzLnNoaWZ0TW9kZXJuKCl9fW9uUmVmcmVzaCgpe3RoaXMudXBkYXRlUHJvcHMoKTtmb3IoY29uc3QgdCBvZiB0aGlzLmluc3RhbmNlLnNsaWRlc3x8W10pdGhpcy5yZXNpemVNb2Rlcm5TbGlkZSh0KTt0aGlzLnNoaWZ0TW9kZXJuKCl9aXNEaXNhYmxlZCgpe2NvbnN0IHQ9dGhpcy5vcHRpb24oXCJtaW5Db3VudFwiKXx8MDtpZih0KXtjb25zdCBlPXRoaXMuaW5zdGFuY2U7bGV0IGk9MDtmb3IoY29uc3QgdCBvZiBlLnNsaWRlc3x8W10pdC50aHVtYlNyYyYmaSsrO2lmKGk8dClyZXR1cm4hMH1jb25zdCBlPXRoaXMub3B0aW9uKFwidHlwZVwiKTtyZXR1cm5bXCJtb2Rlcm5cIixcImNsYXNzaWNcIl0uaW5kZXhPZihlKTwwfWdldFRodW1iKHQpe2NvbnN0IGU9dGhpcy5vcHRpb24oXCJ0aHVtYlRwbFwiKXx8XCJcIjtyZXR1cm57aHRtbDp0aGlzLmluc3RhbmNlLmxvY2FsaXplKGUsW1tcIiVpXCIsdC5pbmRleF0sW1wiJWRcIix0LmluZGV4KzFdLFtcIiVzXCIsdC50aHVtYlNyY3x8XCJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFBQUFBUC8vL3lINUJBRUFBQUFBTEFBQUFBQUJBQUVBQUFJQlJBQTdcIl1dKX19YWRkU2xpZGUodCl7Y29uc3QgZT10aGlzLmNhcm91c2VsO2UmJmUuYWRkU2xpZGUodC5pbmRleCx0aGlzLmdldFRodW1iKHQpKX1nZXRTbGlkZXMoKXtjb25zdCB0PVtdO2Zvcihjb25zdCBlIG9mIHRoaXMuaW5zdGFuY2Uuc2xpZGVzfHxbXSl0LnB1c2godGhpcy5nZXRUaHVtYihlKSk7cmV0dXJuIHR9cmVzaXplTW9kZXJuU2xpZGUodCl7dGhpcy5pc01vZGVybiYmKHRbSHRdPXRbX3RdJiZ0W050XT9NYXRoLnJvdW5kKHRoaXNbTnRdKih0W190XS90W050XSkpOnRoaXNbSHRdKX11cGRhdGVQcm9wcygpe2NvbnN0IHQ9dGhpcy5jb250YWluZXI7aWYoIXQpcmV0dXJuO2NvbnN0IGU9ZT0+cGFyc2VGbG9hdChnZXRDb21wdXRlZFN0eWxlKHQpLmdldFByb3BlcnR5VmFsdWUoXCItLWYtdGh1bWItXCIrZSkpfHwwO3RoaXMudGh1bWJHYXA9ZShcImdhcFwiKSx0aGlzLnRodW1iRXh0cmFHYXA9ZShcImV4dHJhLWdhcFwiKSx0aGlzW0h0XT1lKFwid2lkdGhcIil8fDQwLHRoaXNbX3RdPWUoXCJjbGlwLXdpZHRoXCIpfHw0MCx0aGlzW050XT1lKFwiaGVpZ2h0XCIpfHw0MH1idWlsZCgpe2NvbnN0IHQ9dGhpcztpZih0LnN0YXRlIT09anQuSW5pdClyZXR1cm47aWYodC5pc0Rpc2FibGVkKCkpcmV0dXJuIHZvaWQgdC5lbWl0KFwiZGlzYWJsZWRcIik7Y29uc3QgZT10Lmluc3RhbmNlLGk9ZS5jb250YWluZXIsbj10LmdldFNsaWRlcygpLHM9dC5vcHRpb24oXCJ0eXBlXCIpO3QudHlwZT1zO2NvbnN0IG89dC5vcHRpb24oXCJwYXJlbnRFbFwiKSxhPXQuY24oXCJjb250YWluZXJcIikscj10LmNuKFwidHJhY2tcIik7bGV0IGw9bnVsbD09bz92b2lkIDA6by5xdWVyeVNlbGVjdG9yKFwiLlwiK2EpO2x8fChsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksUChsLGEpLG8/by5hcHBlbmRDaGlsZChsKTppLmFmdGVyKGwpKSxQKGwsYGlzLSR7c31gKSxQKGksdC5jbihcImhhc1RodW1ic1wiKSksdC5jb250YWluZXI9bCx0LnVwZGF0ZVByb3BzKCk7bGV0IGM9bC5xdWVyeVNlbGVjdG9yKFwiLlwiK3IpO2N8fChjPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksUChjLHQuY24oXCJ0cmFja1wiKSksbC5hcHBlbmRDaGlsZChjKSksdC50cmFjaz1jO2NvbnN0IGg9dSh7fSx7dHJhY2s6YyxpbmZpbml0ZTohMSxjZW50ZXI6ITAsZmlsbDpcImNsYXNzaWNcIj09PXMsZHJhZ0ZyZWU6ITAsc2xpZGVzUGVyUGFnZToxLHRyYW5zaXRpb246ITEscHJlbG9hZDouMjUsZnJpY3Rpb246LjEyLFBhbnpvb206e21heFZlbG9jaXR5OjB9LERvdHM6ITEsTmF2aWdhdGlvbjohMSxjbGFzc2VzOntjb250YWluZXI6XCJmLXRodW1ic1wiLHZpZXdwb3J0OlwiZi10aHVtYnNfX3ZpZXdwb3J0XCIsdHJhY2s6XCJmLXRodW1ic19fdHJhY2tcIixzbGlkZTpcImYtdGh1bWJzX19zbGlkZVwifX0sdC5vcHRpb24oXCJDYXJvdXNlbFwiKXx8e30se1N5bmM6e3RhcmdldDplfSxzbGlkZXM6bn0pLGQ9bmV3IGUuY29uc3RydWN0b3IobCxoKTtkLm9uKFwiY3JlYXRlU2xpZGVcIiwoKGUsaSk9Pnt0LnNldFByb3BzKGkuaW5kZXgpLHQuZW1pdChcImNyZWF0ZVNsaWRlXCIsaSxpLmVsKX0pKSxkLm9uKFwicmVhZHlcIiwoKCk9Pnt0LnNoaWZ0TW9kZXJuKCksdC5lbWl0KFwicmVhZHlcIil9KSksZC5vbihcInJlZnJlc2hcIiwoKCk9Pnt0LnNoaWZ0TW9kZXJuKCl9KSksZC5vbihcIlBhbnpvb20uY2xpY2tcIiwoKGUsaSxuKT0+e3Qub25DbGljayhuKX0pKSx0LmNhcm91c2VsPWQsdC5zdGF0ZT1qdC5SZWFkeX1vbkNsaWNrKHQpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IGU9dGhpcy5pbnN0YW5jZSx7cGFnZXM6aSxwYWdlOm59PWUscz10PT57aWYodCl7Y29uc3QgZT10LmNsb3Nlc3QoXCJbZGF0YS1jYXJvdXNlbC1pbmRleF1cIik7aWYoZSlyZXR1cm5bcGFyc2VJbnQoZS5kYXRhc2V0LmNhcm91c2VsSW5kZXh8fFwiXCIsMTApfHwwLGVdfXJldHVyblstMSx2b2lkIDBdfSxvPSh0LGUpPT57Y29uc3QgaT1kb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHQsZSk7cmV0dXJuIGk/cyhpKTpbLTEsdm9pZCAwXX07bGV0W2Escl09cyh0LnRhcmdldCk7aWYoYT4tMSlyZXR1cm47Y29uc3QgbD10aGlzW190XSxjPXQuY2xpZW50WCxoPXQuY2xpZW50WTtsZXRbZCx1XT1vKGMtbCxoKSxbcCxmXT1vKGMrbCxoKTt1JiZmPyhhPU1hdGguYWJzKGMtdS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5yaWdodCk8TWF0aC5hYnMoYy1mLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQpP2Q6cCxhPT09biYmKGE9YT09PWQ/cDpkKSk6dT9hPWQ6ZiYmKGE9cCksYT4tMSYmaVthXSYmZS5zbGlkZVRvKGEpfWdldFNoaWZ0KHQpe3ZhciBlO2NvbnN0IGk9dGhpcyx7aW5zdGFuY2U6bn09aSxzPWkuY2Fyb3VzZWw7aWYoIW58fCFzKXJldHVybiAwO2NvbnN0IG89aVtIdF0sYT1pW190XSxyPWkudGh1bWJHYXAsbD1pLnRodW1iRXh0cmFHYXA7aWYoIShudWxsPT09KGU9cy5zbGlkZXNbdF0pfHx2b2lkIDA9PT1lP3ZvaWQgMDplLmVsKSlyZXR1cm4gMDtjb25zdCBjPS41KihvLWEpLGg9bi5wYWdlcy5sZW5ndGgtMTtsZXQgZD1uLmdldFByb2dyZXNzKDApLHU9bi5nZXRQcm9ncmVzcyhoKSxwPW4uZ2V0UHJvZ3Jlc3ModCwhMSwhMCksZj0wLGc9YytsK3I7Y29uc3QgbT1kPDAmJmQ+LTEsdj11PjAmJnU8MTtyZXR1cm4gMD09PXQ/KGY9ZypNYXRoLmFicyhkKSx2JiYxPT09ZCYmKGYtPWcqTWF0aC5hYnModSkpKTp0PT09aD8oZj1nKk1hdGguYWJzKHUpKi0xLG0mJi0xPT09dSYmKGYrPWcqTWF0aC5hYnMoZCkpKTptfHx2P
1yhmPS0xKmcsZis9ZypNYXRoLmFicyhkKSxmKz1nKigxLU1hdGguYWJzKHUpKSk6Zj1nKnAsZn1zZXRQcm9wcyhlKXt2YXIgaTtjb25zdCBuPXRoaXM7aWYoIW4uaXNNb2Rlcm4pcmV0dXJuO2NvbnN0e2luc3RhbmNlOnN9PW4sbz1uLmNhcm91c2VsO2lmKHMmJm8pe2NvbnN0IGE9bnVsbD09PShpPW8uc2xpZGVzW2VdKXx8dm9pZCAwPT09aT92b2lkIDA6aS5lbDtpZihhJiZhLmNoaWxkTm9kZXMubGVuZ3RoKXtsZXQgaT10KDEtTWF0aC5hYnMocy5nZXRQcm9ncmVzcyhlKSkpLG89dChuLmdldFNoaWZ0KGUpKTthLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wcm9ncmVzc1wiLGk/aStcIlwiOlwiXCIpLGEuc3R5bGUuc2V0UHJvcGVydHkoXCItLXNoaWZ0XCIsbytcIlwiKX19fXNoaWZ0TW9kZXJuKCl7Y29uc3QgdD10aGlzO2lmKCF0LmlzTW9kZXJuKXJldHVybjtjb25zdHtpbnN0YW5jZTplLHRyYWNrOml9PXQsbj1lLnBhbnpvb20scz10LmNhcm91c2VsO2lmKCEoZSYmaSYmbiYmcykpcmV0dXJuO2lmKG4uc3RhdGU9PT1tLkluaXR8fG4uc3RhdGU9PT1tLkRlc3Ryb3kpcmV0dXJuO2Zvcihjb25zdCBpIG9mIGUuc2xpZGVzKXQuc2V0UHJvcHMoaS5pbmRleCk7bGV0IG89KHRbX3RdK3QudGh1bWJHYXApKihzLnNsaWRlcy5sZW5ndGh8fDApO2kuc3R5bGUuc2V0UHJvcGVydHkoXCItLXdpZHRoXCIsbytcIlwiKX1jbGVhbnVwKCl7Y29uc3QgdD10aGlzO3QuY2Fyb3VzZWwmJnQuY2Fyb3VzZWwuZGVzdHJveSgpLHQuY2Fyb3VzZWw9bnVsbCx0LmNvbnRhaW5lciYmdC5jb250YWluZXIucmVtb3ZlKCksdC5jb250YWluZXI9bnVsbCx0LnRyYWNrJiZ0LnRyYWNrLnJlbW92ZSgpLHQudHJhY2s9bnVsbCx0LnN0YXRlPWp0LkluaXQsUyh0Lmluc3RhbmNlLmNvbnRhaW5lcix0LmNuKFwiaGFzVGh1bWJzXCIpKX1hdHRhY2goKXtjb25zdCB0PXRoaXMsZT10Lmluc3RhbmNlO2Uub24oXCJpbml0U2xpZGVcIix0Lm9uSW5pdFNsaWRlKSxlLnN0YXRlPT09Qi5Jbml0P2Uub24oXCJpbml0U2xpZGVzXCIsdC5vbkluaXRTbGlkZXMpOnQub25Jbml0U2xpZGVzKCksZS5vbihbXCJjaGFuZ2VcIixcIlBhbnpvb20uYWZ0ZXJUcmFuc2Zvcm1cIl0sdC5vbkNoYW5nZSksZS5vbihcIlBhbnpvb20ucmVmcmVzaFwiLHQub25SZWZyZXNoKX1kZXRhY2goKXtjb25zdCB0PXRoaXMsZT10Lmluc3RhbmNlO2Uub2ZmKFwiaW5pdFNsaWRlXCIsdC5vbkluaXRTbGlkZSksZS5vZmYoXCJpbml0U2xpZGVzXCIsdC5vbkluaXRTbGlkZXMpLGUub2ZmKFtcImNoYW5nZVwiLFwiUGFuem9vbS5hZnRlclRyYW5zZm9ybVwiXSx0Lm9uQ2hhbmdlKSxlLm9mZihcIlBhbnpvb20ucmVmcmVzaFwiLHQub25SZWZyZXNoKSx0LmNsZWFudXAoKX19O09iamVjdC5kZWZpbmVQcm9wZXJ0eSgkdCxcImRlZmF1bHRzXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOkZ0fSk7Y29uc3QgV3Q9T2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEZ0KSx7a2V5OlwidFwiLHNob3dPblN0YXJ0OiEwLHBhcmVudEVsOm51bGx9KSxYdD1cImlzLW1hc2tlZFwiLHF0PVwiYXJpYS1oaWRkZW5cIjtjbGFzcyBZdCBleHRlbmRzIF97Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicmVmXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImhpZGRlblwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTohMX0pfWdldCBpc0VuYWJsZWQoKXtjb25zdCB0PXRoaXMucmVmO3JldHVybiB0JiYhdC5pc0Rpc2FibGVkKCl9Z2V0IGlzSGlkZGVuKCl7cmV0dXJuIHRoaXMuaGlkZGVufW9uQ2xpY2sodCxlKXtlLnN0b3BQcm9wYWdhdGlvbigpfW9uQ3JlYXRlU2xpZGUodCxlKXt2YXIgaSxuLHM7Y29uc3Qgbz0obnVsbD09PShzPW51bGw9PT0obj1udWxsPT09KGk9dGhpcy5pbnN0YW5jZSl8fHZvaWQgMD09PWk/dm9pZCAwOmkuY2Fyb3VzZWwpfHx2b2lkIDA9PT1uP3ZvaWQgMDpuLnNsaWRlc1tlLmluZGV4XSl8fHZvaWQgMD09PXM/dm9pZCAwOnMudHlwZSl8fFwiXCIsYT1lLmVsO2lmKGEmJm8pe2xldCB0PWBmb3ItJHtvfWA7W1widmlkZW9cIixcInlvdXR1YmVcIixcInZpbWVvXCIsXCJodG1sNXZpZGVvXCJdLmluY2x1ZGVzKG8pJiYodCs9XCIgZm9yLXZpZGVvXCIpLFAoYSx0KX19b25Jbml0KCl7dmFyIHQ7Y29uc3QgZT10aGlzLGk9ZS5pbnN0YW5jZSxuPWkuY2Fyb3VzZWw7aWYoZS5yZWZ8fCFuKXJldHVybjtjb25zdCBzPWUub3B0aW9uKFwicGFyZW50RWxcIil8fGkuZm9vdGVyfHxpLmNvbnRhaW5lcjtpZighcylyZXR1cm47Y29uc3Qgbz11KHt9LGUub3B0aW9ucyx7cGFyZW50RWw6cyxjbGFzc2VzOntjb250YWluZXI6XCJmLXRodW1icyBmYW5jeWJveF9fdGh1bWJzXCJ9LENhcm91c2VsOntTeW5jOntmcmljdGlvbjppLm9wdGlvbihcIkNhcm91c2VsLmZyaWN0aW9uXCIpfHwwfX0sb246e3JlYWR5OnQ9Pntjb25zdCBpPXQuY29udGFpbmVyO2kmJnRoaXMuaGlkZGVuJiYoZS5yZWZyZXNoKCksaS5zdHlsZS50cmFuc2l0aW9uPVwibm9uZVwiLGUuaGlkZSgpLGkub2Zmc2V0SGVpZ2h0LHF1ZXVlTWljcm90YXNrKCgoKT0+e2kuc3R5bGUudHJhbnNpdGlvbj1cIlwiLGUuc2hvdygpfSkpKX19fSk7by5DYXJvdXNlbD1vLkNhcm91c2VsfHx7fSxvLkNhcm91c2VsLm9uPXUoKG51bGw9PT0odD1lLm9wdGlvbnMuQ2Fyb3VzZWwpfHx2b2lkIDA9PT10P3ZvaWQgMDp0Lm9uKXx8e30se2NsaWNrOnRoaXMub25DbGljayxjcmVhdGVTbGlkZTp0aGlzLm9uQ3JlYXRlU2xpZGV9KSxuLm9wdGlvbnMuVGh1bWJzPW8sbi5hdHRhY2hQbHVnaW5zKHtUaHVtYnM6JHR9KSxlLnJlZj1uLnBsdWdpbnMuVGh1bWJzLGUub3B0aW9uKFwic2hvd09uU3RhcnRcIil8fChlLnJlZi5zdGF0ZT1qdC5IaWRkZW4sZS5oaWRkZW49ITApfW9uUmVzaXplKCl7dmFyIHQ7Y29uc3QgZT1udWxsPT09KHQ9dGhpcy5yZWYpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNvbnRhaW5lcjtlJiYoZS5zdHlsZS5tYXhIZWlnaHQ9XCJcIil9b25LZXlkb3duKHQsZSl7Y29uc3QgaT10aGlzLm9wdGlvbihcImtleVwiKTtpJiZpPT09ZSYmdGhpcy50b2dnbGUoKX10b2dnbGUoKXtjb25zdCB0PXRoaXMucmVmO2lmKHQmJiF0LmlzRGlzYWJsZWQoKSlyZXR1cm4gdC5zdGF0ZT09PWp0LkhpZGRlbj8odC5zdGF0ZT1qdC5Jbml0LHZvaWQgdC5idWlsZCgpKTp2b2lkKHRoaXMuaGlkZGVuP3RoaXMuc2hvdygpOnRoaXMuaGlkZSgpKX1zaG93KCl7Y29uc3QgdD10aGlzLnJlZjtpZighdHx8dC5pc0Rpc2FibGVkKCkpcmV0dXJuO2NvbnN0IGU9dC5jb250YWluZXI7ZSYmKHR
1oaXMucmVmcmVzaCgpLGUub2Zmc2V0SGVpZ2h0LGUucmVtb3ZlQXR0cmlidXRlKHF0KSxlLmNsYXNzTGlzdC5yZW1vdmUoWHQpLHRoaXMuaGlkZGVuPSExKX1oaWRlKCl7Y29uc3QgdD10aGlzLnJlZixlPXQmJnQuY29udGFpbmVyO2UmJih0aGlzLnJlZnJlc2goKSxlLm9mZnNldEhlaWdodCxlLmNsYXNzTGlzdC5hZGQoWHQpLGUuc2V0QXR0cmlidXRlKHF0LFwidHJ1ZVwiKSksdGhpcy5oaWRkZW49ITB9cmVmcmVzaCgpe2NvbnN0IHQ9dGhpcy5yZWY7aWYoIXR8fCF0LnN0YXRlKXJldHVybjtjb25zdCBlPXQuY29udGFpbmVyLGk9KG51bGw9PWU/dm9pZCAwOmUuZmlyc3RDaGlsZCl8fG51bGw7ZSYmaSYmaS5jaGlsZE5vZGVzLmxlbmd0aCYmKGUuc3R5bGUubWF4SGVpZ2h0PWAke2kuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0fXB4YCl9YXR0YWNoKCl7Y29uc3QgdD10aGlzLGU9dC5pbnN0YW5jZTtlLnN0YXRlPT09cnQuSW5pdD9lLm9uKFwiQ2Fyb3VzZWwuaW5pdFwiLHQub25Jbml0KTp0Lm9uSW5pdCgpLGUub24oXCJyZXNpemVcIix0Lm9uUmVzaXplKSxlLm9uKFwia2V5ZG93blwiLHQub25LZXlkb3duKX1kZXRhY2goKXt2YXIgdDtjb25zdCBlPXRoaXMsaT1lLmluc3RhbmNlO2kub2ZmKFwiQ2Fyb3VzZWwuaW5pdFwiLGUub25Jbml0KSxpLm9mZihcInJlc2l6ZVwiLGUub25SZXNpemUpLGkub2ZmKFwia2V5ZG93blwiLGUub25LZXlkb3duKSxudWxsPT09KHQ9aS5jYXJvdXNlbCl8fHZvaWQgMD09PXR8fHQuZGV0YWNoUGx1Z2lucyhbXCJUaHVtYnNcIl0pLGUucmVmPW51bGx9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShZdCxcImRlZmF1bHRzXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOld0fSk7Y29uc3QgVnQ9e3BhbkxlZnQ6e2ljb246Jzxzdmc+PHBhdGggZD1cIk01IDEyaDE0TTUgMTJsNiA2TTUgMTJsNi02XCIvPjwvc3ZnPicsY2hhbmdlOntwYW5YOi0xMDB9fSxwYW5SaWdodDp7aWNvbjonPHN2Zz48cGF0aCBkPVwiTTUgMTJoMTRNMTMgMThsNi02TTEzIDZsNiA2XCIvPjwvc3ZnPicsY2hhbmdlOntwYW5YOjEwMH19LHBhblVwOntpY29uOic8c3ZnPjxwYXRoIGQ9XCJNMTIgNXYxNE0xOCAxMWwtNi02TTYgMTFsNi02XCIvPjwvc3ZnPicsY2hhbmdlOntwYW5ZOi0xMDB9fSxwYW5Eb3duOntpY29uOic8c3ZnPjxwYXRoIGQ9XCJNMTIgNXYxNE0xOCAxM2wtNiA2TTYgMTNsNiA2XCIvPjwvc3ZnPicsY2hhbmdlOntwYW5ZOjEwMH19LHpvb21Jbjp7aWNvbjonPHN2Zz48Y2lyY2xlIGN4PVwiMTFcIiBjeT1cIjExXCIgcj1cIjcuNVwiLz48cGF0aCBkPVwibTIxIDIxLTQuMzUtNC4zNU0xMSA4djZNOCAxMWg2XCIvPjwvc3ZnPicsYWN0aW9uOlwiem9vbUluXCJ9LHpvb21PdXQ6e2ljb246Jzxzdmc+PGNpcmNsZSBjeD1cIjExXCIgY3k9XCIxMVwiIHI9XCI3LjVcIi8+PHBhdGggZD1cIm0yMSAyMS00LjM1LTQuMzVNOCAxMWg2XCIvPjwvc3ZnPicsYWN0aW9uOlwiem9vbU91dFwifSx0b2dnbGUxdG8xOntpY29uOic8c3ZnPjxwYXRoIGQ9XCJNMy41MSAzLjA3YzUuNzQuMDIgMTEuNDgtLjAyIDE3LjIyLjAyIDEuMzcuMSAyLjM0IDEuNjQgMi4xOCAzLjEzIDAgNC4wOC4wMiA4LjE2IDAgMTIuMjMtLjEgMS41NC0xLjQ3IDIuNjQtMi43OSAyLjQ2LTUuNjEtLjAxLTExLjI0LjAyLTE2Ljg2LS4wMS0xLjM2LS4xMi0yLjMzLTEuNjUtMi4xNy0zLjE0IDAtNC4wNy0uMDItOC4xNiAwLTEyLjIzLjEtMS4zNiAxLjIyLTIuNDggMi40Mi0yLjQ2WlwiLz48cGF0aCBkPVwiTTUuNjUgOC41NGgxLjQ5djYuOTJtOC45NC02LjkyaDEuNDl2Ni45Mk0xMS41IDkuNHYuMDJtMCA1LjE4djBcIi8+PC9zdmc+JyxhY3Rpb246XCJ0b2dnbGVab29tXCJ9LHRvZ2dsZVpvb206e2ljb246Jzxzdmc+PGc+PGxpbmUgeDE9XCIxMVwiIHkxPVwiOFwiIHgyPVwiMTFcIiB5Mj1cIjE0XCI+PC9saW5lPjwvZz48Y2lyY2xlIGN4PVwiMTFcIiBjeT1cIjExXCIgcj1cIjcuNVwiLz48cGF0aCBkPVwibTIxIDIxLTQuMzUtNC4zNU04IDExaDZcIi8+PC9zdmc+JyxhY3Rpb246XCJ0b2dnbGVab29tXCJ9LGl0ZXJhdGVab29tOntpY29uOic8c3ZnPjxnPjxsaW5lIHgxPVwiMTFcIiB5MT1cIjhcIiB4Mj1cIjExXCIgeTI9XCIxNFwiPjwvbGluZT48L2c+PGNpcmNsZSBjeD1cIjExXCIgY3k9XCIxMVwiIHI9XCI3LjVcIi8+PHBhdGggZD1cIm0yMSAyMS00LjM1LTQuMzVNOCAxMWg2XCIvPjwvc3ZnPicsYWN0aW9uOlwiaXRlcmF0ZVpvb21cIn0scm90YXRlQ0NXOntpY29uOic8c3ZnPjxwYXRoIGQ9XCJNMTUgNC41NWE4IDggMCAwIDAtNiAxNC45TTkgMTV2NUg0TTE4LjM3IDcuMTZ2LjAxTTEzIDE5Ljk0di4wMU0xNi44NCAxOC4zN3YuMDFNMTkuMzcgMTUuMXYuMDFNMTkuOTQgMTF2LjAxXCIvPjwvc3ZnPicsYWN0aW9uOlwicm90YXRlQ0NXXCJ9LHJvdGF0ZUNXOntpY29uOic8c3ZnPjxwYXRoIGQ9XCJNOSA0LjU1YTggOCAwIDAgMSA2IDE0LjlNMTUgMTV2NWg1TTUuNjMgNy4xNnYuMDFNNC4wNiAxMXYuMDFNNC42MyAxNS4xdi4wMU03LjE2IDE4LjM3di4wMU0xMSAxOS45NHYuMDFcIi8+PC9zdmc+JyxhY3Rpb246XCJyb3RhdGVDV1wifSxmbGlwWDp7aWNvbjonPHN2ZyBzdHlsZT1cInN0cm9rZS13aWR0aDogMS4zXCI+PHBhdGggZD1cIk0xMiAzdjE4TTE2IDd2MTBoNUwxNiA3TTggN3YxMEgzTDggN1wiLz48L3N2Zz4nLGFjdGlvbjpcImZsaXBYXCJ9LGZsaXBZOntpY29uOic8c3ZnIHN0eWxlPVwic3Ryb2tlLXdpZHRoOiAxLjNcIj48cGF0aCBkPVwiTTMgMTJoMThNNyAxNmgxMEw3IDIxdi01TTcgOGgxMEw3IDN2NVwiLz48L3N2Zz4nLGFjdGlvbjpcImZsaXBZXCJ9LGZpdFg6e2ljb246Jzxzdmc+PHBhdGggZD1cIk00IDEyVjZhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjZNMTAgMThIM00yMSAxOGgtN002IDE1bC0zIDMgMyAzTTE4IDE1bDMgMy0zIDNcIi8+PC9zdmc+JyxhY3Rpb246XCJmaXRYXCJ9LGZpdFk6e2ljb246Jzxzdmc+PHBhdGggZD1cIk0xMiAyMEg2YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDZNMTggMTR2N00xOCAzdjdNMTUgMThsMyAzIDMtM00xNSA2bDMtMyAzIDNcIi8+PC9zdmc+JyxhY3Rpb246XCJmaXRZXCJ9LHJlc2V0OntpY29uOic8c3ZnPjxwYXRoIGQ9XCJNMjAgMTFBOC4xIDguMSAwIDAgMCA0LjUgOU00IDV2NGg0TTQgMTNhOC4xIDguMSAwIDAgMCAxNS41IDJtLjUgNHYtNGgtNFwiLz48L3N2Zz4nLGFjdGlvbjpcInJlc2V0XCJ9LHRvZ2dsZUZTOntpY29uOic8c3ZnPjxnPj
1xwYXRoIGQ9XCJNMTQuNSA5LjUgMjEgM20wIDBoLTZtNiAwdjZNMyAyMWw2LjUtNi41TTMgMjF2LTZtMCA2aDZcIi8+PC9nPjxnPjxwYXRoIGQ9XCJtMTQgMTAgNy03bS03IDdoNm0tNiAwVjRNMyAyMWw3LTdtMCAwdjZtMC02SDRcIi8+PC9nPjwvc3ZnPicsYWN0aW9uOlwidG9nZ2xlRlNcIn19O3ZhciBadDshZnVuY3Rpb24odCl7dFt0LkluaXQ9MF09XCJJbml0XCIsdFt0LlJlYWR5PTFdPVwiUmVhZHlcIix0W3QuRGlzYWJsZWQ9Ml09XCJEaXNhYmxlZFwifShadHx8KFp0PXt9KSk7Y29uc3QgVXQ9e2Fic29sdXRlOlwiYXV0b1wiLGRpc3BsYXk6e2xlZnQ6W1wiaW5mb2JhclwiXSxtaWRkbGU6W10scmlnaHQ6W1wiaXRlcmF0ZVpvb21cIixcInNsaWRlc2hvd1wiLFwiZnVsbHNjcmVlblwiLFwidGh1bWJzXCIsXCJjbG9zZVwiXX0sZW5hYmxlZDpcImF1dG9cIixpdGVtczp7aW5mb2Jhcjp7dHBsOic8ZGl2IGNsYXNzPVwiZmFuY3lib3hfX2luZm9iYXJcIiB0YWJpbmRleD1cIi0xXCI+PHNwYW4gZGF0YS1mYW5jeWJveC1jdXJyZW50LWluZGV4Pjwvc3Bhbj4vPHNwYW4gZGF0YS1mYW5jeWJveC1jb3VudD48L3NwYW4+PC9kaXY+J30sZG93bmxvYWQ6e3RwbDonPGEgY2xhc3M9XCJmLWJ1dHRvblwiIHRpdGxlPVwie3tET1dOTE9BRH19XCIgZGF0YS1mYW5jeWJveC1kb3dubG9hZCBocmVmPVwiamF2YXNyaXB0OjtcIj48c3ZnPjxwYXRoIGQ9XCJNNCAxN3YyYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtMk03IDExbDUgNSA1LTVNMTIgNHYxMlwiLz48L3N2Zz48L2E+J30scHJldjp7dHBsOic8YnV0dG9uIGNsYXNzPVwiZi1idXR0b25cIiB0aXRsZT1cInt7UFJFVn19XCIgZGF0YS1mYW5jeWJveC1wcmV2Pjxzdmc+PHBhdGggZD1cIm0xNSA2LTYgNiA2IDZcIi8+PC9zdmc+PC9idXR0b24+J30sbmV4dDp7dHBsOic8YnV0dG9uIGNsYXNzPVwiZi1idXR0b25cIiB0aXRsZT1cInt7TkVYVH19XCIgZGF0YS1mYW5jeWJveC1uZXh0Pjxzdmc+PHBhdGggZD1cIm05IDYgNiA2LTYgNlwiLz48L3N2Zz48L2J1dHRvbj4nfSxzbGlkZXNob3c6e3RwbDonPGJ1dHRvbiBjbGFzcz1cImYtYnV0dG9uXCIgdGl0bGU9XCJ7e1RPR0dMRV9TTElERVNIT1d9fVwiIGRhdGEtZmFuY3lib3gtdG9nZ2xlLXNsaWRlc2hvdz48c3ZnPjxnPjxwYXRoIGQ9XCJNOCA0djE2bDEzIC04elwiPjwvcGF0aD48L2c+PGc+PHBhdGggZD1cIk04IDR2MTVNMTcgNHYxNVwiLz48L2c+PC9zdmc+PC9idXR0b24+J30sZnVsbHNjcmVlbjp7dHBsOic8YnV0dG9uIGNsYXNzPVwiZi1idXR0b25cIiB0aXRsZT1cInt7VE9HR0xFX0ZVTExTQ1JFRU59fVwiIGRhdGEtZmFuY3lib3gtdG9nZ2xlLWZ1bGxzY3JlZW4+PHN2Zz48Zz48cGF0aCBkPVwiTTQgOFY2YTIgMiAwIDAgMSAyLTJoMk00IDE2djJhMiAyIDAgMCAwIDIgMmgyTTE2IDRoMmEyIDIgMCAwIDEgMiAydjJNMTYgMjBoMmEyIDIgMCAwIDAgMi0ydi0yXCIvPjwvZz48Zz48cGF0aCBkPVwiTTE1IDE5di0yYTIgMiAwIDAgMSAyLTJoMk0xNSA1djJhMiAyIDAgMCAwIDIgMmgyTTUgMTVoMmEyIDIgMCAwIDEgMiAydjJNNSA5aDJhMiAyIDAgMCAwIDItMlY1XCIvPjwvZz48L3N2Zz48L2J1dHRvbj4nfSx0aHVtYnM6e3RwbDonPGJ1dHRvbiBjbGFzcz1cImYtYnV0dG9uXCIgdGl0bGU9XCJ7e1RPR0dMRV9USFVNQlN9fVwiIGRhdGEtZmFuY3lib3gtdG9nZ2xlLXRodW1icz48c3ZnPjxjaXJjbGUgY3g9XCI1LjVcIiBjeT1cIjUuNVwiIHI9XCIxXCIvPjxjaXJjbGUgY3g9XCIxMlwiIGN5PVwiNS41XCIgcj1cIjFcIi8+PGNpcmNsZSBjeD1cIjE4LjVcIiBjeT1cIjUuNVwiIHI9XCIxXCIvPjxjaXJjbGUgY3g9XCI1LjVcIiBjeT1cIjEyXCIgcj1cIjFcIi8+PGNpcmNsZSBjeD1cIjEyXCIgY3k9XCIxMlwiIHI9XCIxXCIvPjxjaXJjbGUgY3g9XCIxOC41XCIgY3k9XCIxMlwiIHI9XCIxXCIvPjxjaXJjbGUgY3g9XCI1LjVcIiBjeT1cIjE4LjVcIiByPVwiMVwiLz48Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjE4LjVcIiByPVwiMVwiLz48Y2lyY2xlIGN4PVwiMTguNVwiIGN5PVwiMTguNVwiIHI9XCIxXCIvPjwvc3ZnPjwvYnV0dG9uPid9LGNsb3NlOnt0cGw6JzxidXR0b24gY2xhc3M9XCJmLWJ1dHRvblwiIHRpdGxlPVwie3tDTE9TRX19XCIgZGF0YS1mYW5jeWJveC1jbG9zZT48c3ZnPjxwYXRoIGQ9XCJtMTkuNSA0LjUtMTUgMTVNNC41IDQuNWwxNSAxNVwiLz48L3N2Zz48L2J1dHRvbj4nfX0scGFyZW50RWw6bnVsbH0sR3Q9e3RhYmluZGV4OlwiLTFcIix3aWR0aDpcIjI0XCIsaGVpZ2h0OlwiMjRcIix2aWV3Qm94OlwiMCAwIDI0IDI0XCIseG1sbnM6XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wifSxLdD1cImhhcy10b29sYmFyXCIsSnQ9XCJmYW5jeWJveF9fdG9vbGJhclwiO2NsYXNzIFF0IGV4dGVuZHMgX3tjb25zdHJ1Y3Rvcigpe3N1cGVyKC4uLmFyZ3VtZW50cyksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJzdGF0ZVwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpadC5Jbml0fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJjb250YWluZXJcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pfW9uUmVhZHkodCl7dmFyIGU7aWYoIXQuY2Fyb3VzZWwpcmV0dXJuO2xldCBpPXRoaXMub3B0aW9uKFwiZGlzcGxheVwiKSxuPXRoaXMub3B0aW9uKFwiYWJzb2x1dGVcIikscz10aGlzLm9wdGlvbihcImVuYWJsZWRcIik7aWYoXCJhdXRvXCI9PT1zKXtjb25zdCB0PXRoaXMuaW5zdGFuY2UuY2Fyb3VzZWw7bGV0IGU9MDtpZih0KWZvcihjb25zdCBpIG9mIHQuc2xpZGVzKShpLnBhbnpvb218fFwiaW1hZ2VcIj09PWkudHlwZSkmJmUrKztlfHwocz0hMSl9c3x8KGk9dm9pZCAwKTtsZXQgbz0wO2NvbnN0IGE9e2xlZnQ6W10sbWlkZGxlOltdLHJpZ2h0OltdfTtpZihpKWZvcihjb25zdCB0IG9mW1wibGVmdFwiLFwibWlkZGxlXCIsXCJyaWdodFwiXSlmb3IoY29uc3QgbiBvZiBpW3RdKXtjb25zdCBpPXRoaXMuY3JlYXRlRWwobik7aSYmKG51bGw9PT0oZT1hW3RdKXx8dm9pZCAwPT09ZXx8ZS5wdXNoKGkpLG8rKyl9bGV0IHI9bnVsbDtpZihvJiYocj10aGlzLmNyZWF0ZUNvbnRhaW5lcigpKSxyKXtmb3IoY29uc3RbdCxlXW9mIE9iamVjdC5lbnRyaWVzKGEpKXtjb25zdCBpPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7UChpLEp0K1wiX19jb2x1bW4gaXMtXCIrdCk7Zm9yKGNvbnN0IHQgb2YgZSlpLmFwcGVuZENoaWxkKHQpO1wiYXV0b1wiIT09bnx8XCJtaWRkbGVcIiE9PXR8fGUubGVuZ3RofHwobj0hMCksci5hcHBlbmRDaGlsZChpKX0hMD09PW4mJlAocixcImlzLWFic29sdXRlXCIpLHRoaXMuc3RhdGU9WnQuUmVhZHksdGhpcy5vblJlZnJlc2goKX1lbHNlIHRoaXMuc3RhdGU9WnQuRGlzYWJsZWR9b25DbGljayh0KXt2YXIgZSxpO2
1NvbnN0IG49dGhpcy5pbnN0YW5jZSxzPW4uZ2V0U2xpZGUoKSxvPW51bGw9PXM/dm9pZCAwOnMucGFuem9vbSxhPXQudGFyZ2V0LHI9YSYmRShhKT9hLmRhdGFzZXQ6bnVsbDtpZighcilyZXR1cm47aWYodm9pZCAwIT09ci5mYW5jeWJveFRvZ2dsZVRodW1icylyZXR1cm4gdC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcFByb3BhZ2F0aW9uKCksdm9pZChudWxsPT09KGU9bi5wbHVnaW5zLlRodW1icyl8fHZvaWQgMD09PWV8fGUudG9nZ2xlKCkpO2lmKHZvaWQgMCE9PXIuZmFuY3lib3hUb2dnbGVGdWxsc2NyZWVuKXJldHVybiB0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSx2b2lkIHRoaXMuaW5zdGFuY2UudG9nZ2xlRnVsbHNjcmVlbigpO2lmKHZvaWQgMCE9PXIuZmFuY3lib3hUb2dnbGVTbGlkZXNob3cpe3QucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IGU9bnVsbD09PShpPW4uY2Fyb3VzZWwpfHx2b2lkIDA9PT1pP3ZvaWQgMDppLnBsdWdpbnMuQXV0b3BsYXk7bGV0IHM9ZS5pc0FjdGl2ZTtyZXR1cm4gbyYmXCJtb3VzZW1vdmVcIj09PW8ucGFuTW9kZSYmIXMmJm8ucmVzZXQoKSx2b2lkKHM/ZS5zdG9wKCk6ZS5zdGFydCgpKX1jb25zdCBsPXIucGFuem9vbUFjdGlvbixjPXIucGFuem9vbUNoYW5nZTtpZigoY3x8bCkmJih0LnByZXZlbnREZWZhdWx0KCksdC5zdG9wUHJvcGFnYXRpb24oKSksYyl7bGV0IHQ9e307dHJ5e3Q9SlNPTi5wYXJzZShjKX1jYXRjaCh0KXt9byYmby5hcHBseUNoYW5nZSh0KX1lbHNlIGwmJm8mJm9bbF0mJm9bbF0oKX1vbkNoYW5nZSgpe3RoaXMub25SZWZyZXNoKCl9b25SZWZyZXNoKCl7aWYodGhpcy5pbnN0YW5jZS5pc0Nsb3NpbmcoKSlyZXR1cm47Y29uc3QgdD10aGlzLmNvbnRhaW5lcjtpZighdClyZXR1cm47Y29uc3QgZT10aGlzLmluc3RhbmNlLmdldFNsaWRlKCk7aWYoIWV8fGUuc3RhdGUhPT1sdC5SZWFkeSlyZXR1cm47Y29uc3QgaT1lJiYhZS5lcnJvciYmZS5wYW56b29tO2Zvcihjb25zdCBlIG9mIHQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLXBhbnpvb20tYWN0aW9uXVwiKSlpPyhlLnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpLGUucmVtb3ZlQXR0cmlidXRlKFwidGFiaW5kZXhcIikpOihlLnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsXCJcIiksZS5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiLTFcIikpO2xldCBuPWkmJmkuY2FuWm9vbUluKCkscz1pJiZpLmNhblpvb21PdXQoKTtmb3IoY29uc3QgZSBvZiB0LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXBhbnpvb20tYWN0aW9uPVwiem9vbUluXCJdJykpbj8oZS5yZW1vdmVBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiKSxlLnJlbW92ZUF0dHJpYnV0ZShcInRhYmluZGV4XCIpKTooZS5zZXRBdHRyaWJ1dGUoXCJkaXNhYmxlZFwiLFwiXCIpLGUuc2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIixcIi0xXCIpKTtmb3IoY29uc3QgZSBvZiB0LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tkYXRhLXBhbnpvb20tYWN0aW9uPVwiem9vbU91dFwiXScpKXM/KGUucmVtb3ZlQXR0cmlidXRlKFwiZGlzYWJsZWRcIiksZS5yZW1vdmVBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKSk6KGUuc2V0QXR0cmlidXRlKFwiZGlzYWJsZWRcIixcIlwiKSxlLnNldEF0dHJpYnV0ZShcInRhYmluZGV4XCIsXCItMVwiKSk7Zm9yKGNvbnN0IGUgb2YgdC5xdWVyeVNlbGVjdG9yQWxsKCdbZGF0YS1wYW56b29tLWFjdGlvbj1cInRvZ2dsZVpvb21cIl0sW2RhdGEtcGFuem9vbS1hY3Rpb249XCJpdGVyYXRlWm9vbVwiXScpKXtzfHxuPyhlLnJlbW92ZUF0dHJpYnV0ZShcImRpc2FibGVkXCIpLGUucmVtb3ZlQXR0cmlidXRlKFwidGFiaW5kZXhcIikpOihlLnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsXCJcIiksZS5zZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiLFwiLTFcIikpO2NvbnN0IHQ9ZS5xdWVyeVNlbGVjdG9yKFwiZ1wiKTt0JiYodC5zdHlsZS5kaXNwbGF5PW4/XCJcIjpcIm5vbmVcIil9fW9uRG9uZSh0LGUpe3ZhciBpO251bGw9PT0oaT1lLnBhbnpvb20pfHx2b2lkIDA9PT1pfHxpLm9uKFwiYWZ0ZXJUcmFuc2Zvcm1cIiwoKCk9Pnt0aGlzLmluc3RhbmNlLmlzQ3VycmVudFNsaWRlKGUpJiZ0aGlzLm9uUmVmcmVzaCgpfSkpLHRoaXMuaW5zdGFuY2UuaXNDdXJyZW50U2xpZGUoZSkmJnRoaXMub25SZWZyZXNoKCl9Y3JlYXRlQ29udGFpbmVyKCl7Y29uc3QgdD10aGlzLmluc3RhbmNlLmNvbnRhaW5lcjtpZighdClyZXR1cm4gbnVsbDtjb25zdCBlPXRoaXMub3B0aW9uKFwicGFyZW50RWxcIil8fHQ7bGV0IGk9ZS5xdWVyeVNlbGVjdG9yKFwiLlwiK0p0KTtyZXR1cm4gaXx8KGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSxQKGksSnQpLGUucHJlcGVuZChpKSksaS5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIix0aGlzLm9uQ2xpY2sse3Bhc3NpdmU6ITEsY2FwdHVyZTohMH0pLHQmJlAodCxLdCksdGhpcy5jb250YWluZXI9aSxpfWNyZWF0ZUVsKHQpe2NvbnN0IGU9dGhpcy5pbnN0YW5jZSxpPWUuY2Fyb3VzZWw7aWYoIWkpcmV0dXJuIG51bGw7aWYoXCJ0b2dnbGVGU1wiPT09dClyZXR1cm4gbnVsbDtpZihcImZ1bGxzY3JlZW5cIj09PXQmJiFvdCgpKXJldHVybiBudWxsO2xldCBzPW51bGw7Y29uc3Qgbz1pLnNsaWRlcy5sZW5ndGh8fDA7bGV0IGE9MCxyPTA7Zm9yKGNvbnN0IHQgb2YgaS5zbGlkZXMpKHQucGFuem9vbXx8XCJpbWFnZVwiPT09dC50eXBlKSYmYSsrLChcImltYWdlXCI9PT10LnR5cGV8fHQuZG93bmxvYWRTcmMpJiZyKys7aWYobzwyJiZbXCJpbmZvYmFyXCIsXCJwcmV2XCIsXCJuZXh0XCJdLmluY2x1ZGVzKHQpKXJldHVybiBzO2lmKHZvaWQgMCE9PVZ0W3RdJiYhYSlyZXR1cm4gbnVsbDtpZihcImRvd25sb2FkXCI9PT10JiYhcilyZXR1cm4gbnVsbDtpZihcInRodW1ic1wiPT09dCl7Y29uc3QgdD1lLnBsdWdpbnMuVGh1bWJzO2lmKCF0fHwhdC5pc0VuYWJsZWQpcmV0dXJuIG51bGx9aWYoXCJzbGlkZXNob3dcIj09PXQpe2lmKCFpLnBsdWdpbnMuQXV0b3BsYXl8fG88MilyZXR1cm4gbnVsbH1pZih2b2lkIDAhPT1WdFt0XSl7Y29uc3QgZT1WdFt0XTtzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJidXR0b25cIikscy5zZXRBdHRyaWJ1dGUoXCJ0aXRsZVwiLHRoaXMuaW5zdGFuY2UubG9jYWxpemUoYHt7JHt0LnRvVXBwZXJDYXNlKCl9fX1gKSksUChzLFwiZi1idXR0b25cIiksZS5hY3Rpb24mJihzLmRhdGFzZXQucGFuem9vbUFjdGlvbj1lLmFjdGlvbiksZS5jaGFuZ2UmJihzLmRhdGFzZXQucGFuem9vbUNoYW5nZT1KU09OLnN0cmluZ2lmeShlLmNoYW5nZSkpLHMuYXBwZW5kQ2hpbGQobih0aGlzLmluc3RhbmNlLmxvY2FsaXplKGUuaWNvbikpKX1lbHNle2NvbnN0IGU9KHRoaXMub3B0aW9uKFwiaXRlbXNcIil8fFtdKVt0XTtlJiYocz1uKHRoaXMuaW5zdGFuY2UubG9jYWxpemUoZS50cGwpKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLmNsaWNrJiZzLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCh0PT57dC5wcmV2ZW50RGVmYXVsdCgpLHQuc3RvcFByb3BhZ2F0aW9uKCksXCJmdW5jdGlvblwiPT10eXBlb2YgZS5jbGljayYmZS5jbGljay5jYWxsKHRoaXMsdGhpcyx0KX0pKSl9Y29uc3QgbD1udWxsPT1zP3ZvaWQgMDpzLnF1ZXJ5U2VsZWN0b3IoXCJzdmdcIik7aWYobClmb3IoY29uc3RbdCxlXW9mIE9iamVjdC5lbnRyaWVzKEd0KSlsLmdldEF0dHJpYnV0ZSh0KXx8bC5zZXRB
1dHRyaWJ1dGUodCxTdHJpbmcoZSkpO3JldHVybiBzfXJlbW92ZUNvbnRhaW5lcigpe2NvbnN0IHQ9dGhpcy5jb250YWluZXI7dCYmdC5yZW1vdmUoKSx0aGlzLmNvbnRhaW5lcj1udWxsLHRoaXMuc3RhdGU9WnQuRGlzYWJsZWQ7Y29uc3QgZT10aGlzLmluc3RhbmNlLmNvbnRhaW5lcjtlJiZTKGUsS3QpfWF0dGFjaCgpe2NvbnN0IHQ9dGhpcyxlPXQuaW5zdGFuY2U7ZS5vbihcIkNhcm91c2VsLmluaXRTbGlkZXNcIix0Lm9uUmVhZHkpLGUub24oXCJkb25lXCIsdC5vbkRvbmUpLGUub24oW1wicmV2ZWFsXCIsXCJDYXJvdXNlbC5jaGFuZ2VcIl0sdC5vbkNoYW5nZSksdC5vblJlYWR5KHQuaW5zdGFuY2UpfWRldGFjaCgpe2NvbnN0IHQ9dGhpcyxlPXQuaW5zdGFuY2U7ZS5vZmYoXCJDYXJvdXNlbC5pbml0U2xpZGVzXCIsdC5vblJlYWR5KSxlLm9mZihcImRvbmVcIix0Lm9uRG9uZSksZS5vZmYoW1wicmV2ZWFsXCIsXCJDYXJvdXNlbC5jaGFuZ2VcIl0sdC5vbkNoYW5nZSksdC5yZW1vdmVDb250YWluZXIoKX19T2JqZWN0LmRlZmluZVByb3BlcnR5KFF0LFwiZGVmYXVsdHNcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6VXR9KTtjb25zdCB0ZT17SGFzaDpjbGFzcyBleHRlbmRzIF97b25SZWFkeSgpe2h0PSExfW9uQ2hhbmdlKHQpe3V0JiZjbGVhclRpbWVvdXQodXQpO2NvbnN0e2hhc2g6ZX09cHQoKSx7aGFzaDppfT1mdCgpLG49dC5pc09wZW5pbmdTbGlkZSh0LmdldFNsaWRlKCkpO24mJihjdD1pPT09ZT9cIlwiOmkpLGUmJmUhPT1pJiYodXQ9c2V0VGltZW91dCgoKCk9Pnt0cnl7aWYodC5zdGF0ZT09PXJ0LlJlYWR5KXtsZXQgdD1cInJlcGxhY2VTdGF0ZVwiO24mJiFkdCYmKHQ9XCJwdXNoU3RhdGVcIixkdD0hMCksd2luZG93Lmhpc3RvcnlbdF0oe30sZG9jdW1lbnQudGl0bGUsd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lK3dpbmRvdy5sb2NhdGlvbi5zZWFyY2grZSl9fWNhdGNoKHQpe319KSwzMDApKX1vbkNsb3NlKHQpe2lmKHV0JiZjbGVhclRpbWVvdXQodXQpLCFodCYmZHQpcmV0dXJuIGR0PSExLGh0PSExLHZvaWQgd2luZG93Lmhpc3RvcnkuYmFjaygpO2lmKCFodCl0cnl7d2luZG93Lmhpc3RvcnkucmVwbGFjZVN0YXRlKHt9LGRvY3VtZW50LnRpdGxlLHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSt3aW5kb3cubG9jYXRpb24uc2VhcmNoKyhjdHx8XCJcIikpfWNhdGNoKHQpe319YXR0YWNoKCl7Y29uc3QgdD10aGlzLmluc3RhbmNlO3Qub24oXCJyZWFkeVwiLHRoaXMub25SZWFkeSksdC5vbihbXCJDYXJvdXNlbC5yZWFkeVwiLFwiQ2Fyb3VzZWwuY2hhbmdlXCJdLHRoaXMub25DaGFuZ2UpLHQub24oXCJjbG9zZVwiLHRoaXMub25DbG9zZSl9ZGV0YWNoKCl7Y29uc3QgdD10aGlzLmluc3RhbmNlO3Qub2ZmKFwicmVhZHlcIix0aGlzLm9uUmVhZHkpLHQub2ZmKFtcIkNhcm91c2VsLnJlYWR5XCIsXCJDYXJvdXNlbC5jaGFuZ2VcIl0sdGhpcy5vbkNoYW5nZSksdC5vZmYoXCJjbG9zZVwiLHRoaXMub25DbG9zZSl9c3RhdGljIHBhcnNlVVJMKCl7cmV0dXJuIGZ0KCl9c3RhdGljIHN0YXJ0RnJvbVVybCgpe2d0KCl9c3RhdGljIGRlc3Ryb3koKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImhhc2hjaGFuZ2VcIix2dCwhMSl9fSxIdG1sOkx0LEltYWdlczp3dCxTbGlkZXNob3c6RHQsVGh1bWJzOll0LFRvb2xiYXI6UXR9LGVlPVwid2l0aC1mYW5jeWJveFwiLGllPVwiaGlkZS1zY3JvbGxiYXJcIixuZT1cIi0tZmFuY3lib3gtc2Nyb2xsYmFyLWNvbXBlbnNhdGVcIixzZT1cIi0tZmFuY3lib3gtYm9keS1tYXJnaW5cIixvZT1cImFyaWEtaGlkZGVuXCIsYWU9XCJpcy11c2luZy10YWJcIixyZT1cImlzLWFuaW1hdGVkXCIsbGU9XCJpcy1jb21wYWN0XCIsY2U9XCJpcy1sb2FkaW5nXCIsaGU9XCJpcy1vcGVuaW5nXCIsZGU9XCJoYXMtY2FwdGlvblwiLHVlPVwiZGlzYWJsZWRcIixwZT1cInRhYmluZGV4XCIsZmU9XCJkb3dubG9hZFwiLGdlPVwiaHJlZlwiLG1lPVwic3JjXCIsdmU9dD0+XCJzdHJpbmdcIj09dHlwZW9mIHQsYmU9ZnVuY3Rpb24oKXt2YXIgdD13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7cmV0dXJuISF0JiZcIlJhbmdlXCI9PT10LnR5cGV9O2xldCB5ZSx3ZT1udWxsLHhlPW51bGwsRWU9MCxTZT0wLFBlPTAsQ2U9MDtjb25zdCBUZT1uZXcgTWFwO2xldCBNZT0wO2NsYXNzIE9lIGV4dGVuZHMgZ3tnZXQgaXNJZGxlKCl7cmV0dXJuIHRoaXMuaWRsZX1nZXQgaXNDb21wYWN0KCl7cmV0dXJuIHRoaXMub3B0aW9uKFwiY29tcGFjdFwiKX1jb25zdHJ1Y3Rvcih0PVtdLGU9e30saT17fSl7c3VwZXIoZSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJ1c2VyU2xpZGVzXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOltdfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJ1c2VyUGx1Z2luc1wiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp7fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiaWRsZVwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTohMX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwiaWRsZVRpbWVyXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImNsaWNrVGltZXJcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicHd0XCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOjB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImlnbm9yZUZvY3VzQ2hhbmdlXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOiExfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJzdGFydGVkRnNcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6ITF9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcInN0YXRlXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnJ0LkluaXR9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImlkXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOjB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImNvbnRhaW5lclwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJjYXB0aW9uXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOm51bGx9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxcImZvb3RlclwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJjYXJvdXNlbFwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpudWxsfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsXCJsYXN0Rm9jdXNcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bnVsbH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLFwicHJldk1vdXNlTW92ZUV2ZW50XCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOnZvaWQgMH0pLHllfHwoeWU9b3QoKSksdGhpcy5pZD1lLmlkfHwrK01lLFRlLnNldCh0aGlzLmlkLHRoaXMpLHRoaXMudXNlclNsaWRlcz10LHRoaXMudXNlclBsdWdpbnM9aSxxdWV1ZU1pY3JvdGFzaygoKCk9Pnt0aGlzLmluaXQoKX0pKX1pbml0KCl7aWYodGhpcy5zdGF0ZT09PXJ0LkRlc3Ryb3kpcmV0dXJuO3RoaXMuc3RhdGU9cnQuSW5pdCx0aGlzLmF0dGFjaFBsdWdpbnMoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LE9lLlBsdWdpbnMpLHRoaXMudXNlclBsdWdpbnMpKSx0aGlzLmVtaXQoXCJpbml0XCIpLHRoaXMuZW1pdChcImF0dGFjaFBsdWdpbnNcIiksITA9PT10aGlzLm9wdGlvbihcImhpZGVTY3JvbGxiYXJcIikmJigoKT0+e2lmKCFldClyZXR1cm47Y29uc3QgdD1kb2N1bWVudCxlPXQuYm9keSxpPXQuZG9jdW1lbnRFbGVtZW50O2lmKGUuY2xhc3NMaXN0LmNvbnRhaW5zKGllKSlyZXR1cm47bGV0IG49d2luZG93LmlubmVyV2lkdGgtaS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDtjb25zdCBzPXBhcnNlRmxvYXQod2luZG93LmdldENvbXB1dGVkU3R5bGUoZSkubWFyZ2luUmlnaHQpO248MCYmKG49MCksaS5zdHlsZS5zZXRQcm9wZXJ0eShuZSxgJHtufXB4YCkscyYmZS5zdHlsZS5zZXRQcm9wZXJ0eShzZSxgJHtzfXB4YCksZS5jbGFzc0xpc3QuYWRkKGllKX0pKCksdGhpcy5pbml0TGF5b3V0KCksdGhpcy5zY2FsZSgpO2NvbnN0IHQ9KCk9Pnt0aGlzLmluaXRDYXJvdXNlbCh0aGlzLnVzZXJTbGlkZXMpLHRoaXMuc3RhdGU9cnQuUmVhZHksdGhpcy5hdHRhY2hFdmVudHMoKSx0aGlzLmVtaXQoXCJyZWFkeVwiKSxzZXRUaW
11lb3V0KCgoKT0+e3RoaXMuY29udGFpbmVyJiZ0aGlzLmNvbnRhaW5lci5zZXRBdHRyaWJ1dGUob2UsXCJmYWxzZVwiKX0pLDE2KX07dGhpcy5vcHRpb24oXCJGdWxsc2NyZWVuLmF1dG9TdGFydFwiKSYmeWUmJiF5ZS5pc0Z1bGxzY3JlZW4oKT95ZS5yZXF1ZXN0KCkudGhlbigoKCk9Pnt0aGlzLnN0YXJ0ZWRGcz0hMCx0KCl9KSkuY2F0Y2goKCgpPT50KCkpKTp0KCl9aW5pdExheW91dCgpe3ZhciB0LGU7Y29uc3QgaT10aGlzLm9wdGlvbihcInBhcmVudEVsXCIpfHxkb2N1bWVudC5ib2R5LHM9bih0aGlzLmxvY2FsaXplKHRoaXMub3B0aW9uKFwidHBsLm1haW5cIil8fFwiXCIpKTtpZihzKXtpZihzLnNldEF0dHJpYnV0ZShcImlkXCIsYGZhbmN5Ym94LSR7dGhpcy5pZH1gKSxzLnNldEF0dHJpYnV0ZShcImFyaWEtbGFiZWxcIix0aGlzLmxvY2FsaXplKFwie3tNT0RBTH19XCIpKSxzLmNsYXNzTGlzdC50b2dnbGUobGUsdGhpcy5pc0NvbXBhY3QpLFAocyx0aGlzLm9wdGlvbihcIm1haW5DbGFzc1wiKXx8XCJcIiksUChzLGhlKSx0aGlzLmNvbnRhaW5lcj1zLHRoaXMuZm9vdGVyPXMucXVlcnlTZWxlY3RvcihcIi5mYW5jeWJveF9fZm9vdGVyXCIpLGkuYXBwZW5kQ2hpbGQocyksUChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZWUpLHdlJiZ4ZXx8KHdlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIpLFAod2UsXCJmYW5jeWJveC1mb2N1cy1ndWFyZFwiKSx3ZS5zZXRBdHRyaWJ1dGUocGUsXCIwXCIpLHdlLnNldEF0dHJpYnV0ZShvZSxcInRydWVcIiksd2Uuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLFwiRm9jdXMgZ3VhcmRcIikseGU9d2UuY2xvbmVOb2RlKCksbnVsbD09PSh0PXMucGFyZW50RWxlbWVudCl8fHZvaWQgMD09PXR8fHQuaW5zZXJ0QmVmb3JlKHdlLHMpLG51bGw9PT0oZT1zLnBhcmVudEVsZW1lbnQpfHx2b2lkIDA9PT1lfHxlLmFwcGVuZCh4ZSkpLHMuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNlZG93blwiLCh0PT57RWU9dC5wYWdlWCxTZT10LnBhZ2VZLFMocyxhZSl9KSksdGhpcy5vcHRpb24oXCJjbG9zZUV4aXN0aW5nXCIpKWZvcihjb25zdCB0IG9mIFRlLnZhbHVlcygpKXQuaWQhPT10aGlzLmlkJiZ0LmNsb3NlKCk7ZWxzZSB0aGlzLm9wdGlvbihcImFuaW1hdGVkXCIpJiYoUChzLHJlKSxzZXRUaW1lb3V0KCgoKT0+e3RoaXMuaXNDbG9zaW5nKCl8fFMocyxyZSl9KSwzNTApKTt0aGlzLmVtaXQoXCJpbml0TGF5b3V0XCIpfX1pbml0Q2Fyb3VzZWwodCl7Y29uc3QgaT10aGlzLmNvbnRhaW5lcjtpZighaSlyZXR1cm47Y29uc3Qgbj1pLnF1ZXJ5U2VsZWN0b3IoXCIuZmFuY3lib3hfX2Nhcm91c2VsXCIpO2lmKCFuKXJldHVybjtjb25zdCBzPXRoaXMuY2Fyb3VzZWw9bmV3IFEobix1KHt9LHtzbGlkZXM6dCx0cmFuc2l0aW9uOlwiZmFkZVwiLFBhbnpvb206e2xvY2tBeGlzOnRoaXMub3B0aW9uKFwiZHJhZ1RvQ2xvc2VcIik/XCJ4eVwiOlwieFwiLGluZmluaXRlOiEhdGhpcy5vcHRpb24oXCJkcmFnVG9DbG9zZVwiKSYmXCJ5XCJ9LERvdHM6ITEsTmF2aWdhdGlvbjp7Y2xhc3Nlczp7Y29udGFpbmVyOlwiZmFuY3lib3hfX25hdlwiLGJ1dHRvbjpcImYtYnV0dG9uXCIsaXNOZXh0OlwiaXMtbmV4dFwiLGlzUHJldjpcImlzLXByZXZcIn19LGluaXRpYWxQYWdlOnRoaXMub3B0aW9uKFwic3RhcnRJbmRleFwiKSxsMTBuOnRoaXMub3B0aW9uKFwibDEwblwiKX0sdGhpcy5vcHRpb24oXCJDYXJvdXNlbFwiKXx8e30pKTtzLm9uKFwiKlwiLCgodCxlLC4uLmkpPT57dGhpcy5lbWl0KGBDYXJvdXNlbC4ke2V9YCx0LC4uLmkpfSkpLHMub24oW1wicmVhZHlcIixcImNoYW5nZVwiXSwoKCk9Pnt0aGlzLm1hbmFnZUNhcHRpb24oKX0pKSx0aGlzLm9uKFwiQ2Fyb3VzZWwucmVtb3ZlU2xpZGVcIiwoKHQsZSxpKT0+e3RoaXMuY2xlYXJDb250ZW50KGkpLGkuc3RhdGU9dm9pZCAwfSkpLHMub24oXCJQYW56b29tLnRvdWNoU3RhcnRcIiwoKCk9Pnt2YXIgdCxlO3RoaXMuaXNDb21wYWN0fHx0aGlzLmVuZElkbGUoKSwobnVsbD09PSh0PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHx2b2lkIDA9PT10P3ZvaWQgMDp0LmNsb3Nlc3QoXCIuZi10aHVtYnNcIikpJiYobnVsbD09PShlPXRoaXMuY29udGFpbmVyKXx8dm9pZCAwPT09ZXx8ZS5mb2N1cygpKX0pKSxzLm9uKFwic2V0dGxlXCIsKCgpPT57dGhpcy5pZGxlVGltZXJ8fHRoaXMuaXNDb21wYWN0fHwhdGhpcy5vcHRpb24oXCJpZGxlXCIpfHx0aGlzLnNldElkbGUoKSx0aGlzLm9wdGlvbihcImF1dG9Gb2N1c1wiKSYmIXRoaXMuaXNDbG9zaW5nJiZ0aGlzLmNoZWNrRm9jdXMoKX0pKSx0aGlzLm9wdGlvbihcImRyYWdUb0Nsb3NlXCIpJiYocy5vbihcIlBhbnpvb20uYWZ0ZXJUcmFuc2Zvcm1cIiwoKHQsaSk9Pntjb25zdCBuPXRoaXMuZ2V0U2xpZGUoKTtpZihuJiZlKG4uZWwpKXJldHVybjtjb25zdCBzPXRoaXMuY29udGFpbmVyO2lmKHMpe2NvbnN0IHQ9TWF0aC5hYnMoaS5jdXJyZW50LmYpLGU9dDwxP1wiXCI6TWF0aC5tYXgoLjUsTWF0aC5taW4oMSwxLXQvaS5jb250ZW50UmVjdC5maXRIZWlnaHQqMS41KSk7cy5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tZmFuY3lib3gtdHNcIixlP1wiMHNcIjpcIlwiKSxzLnN0eWxlLnNldFByb3BlcnR5KFwiLS1mYW5jeWJveC1vcGFjaXR5XCIsZStcIlwiKX19KSkscy5vbihcIlBhbnpvb20udG91Y2hFbmRcIiwoKHQsaSxuKT0+e3ZhciBzO2NvbnN0IG89dGhpcy5nZXRTbGlkZSgpO2lmKG8mJmUoby5lbCkpcmV0dXJuO2lmKGkuaXNNb2JpbGUmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQmJi0xIT09W1wiVEVYVEFSRUFcIixcIklOUFVUXCJdLmluZGV4T2YobnVsbD09PShzPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpfHx2b2lkIDA9PT1zP3ZvaWQgMDpzLm5vZGVOYW1lKSlyZXR1cm47Y29uc3QgYT1NYXRoLmFicyhpLmRyYWdPZmZzZXQueSk7XCJ5XCI9PT1pLmxvY2tlZEF4aXMmJihhPj0yMDB8fGE+PTUwJiZpLmRyYWdPZmZzZXQudGltZTwzMDApJiYobiYmbi5jYW5jZWxhYmxlJiZuLnByZXZlbnREZWZhdWx0KCksdGhpcy5jbG9zZShuLFwiZi10aHJvd091dFwiKyhpLmN1cnJlbnQuZjwwP1wiVXBcIjpcIkRvd25cIikpKX0pKSkscy5vbihcImNoYW5nZVwiLCh0PT57dmFyIGU7bGV0IGk9bnVsbD09PShlPXRoaXMuZ2V0U2xpZGUoKSl8fHZvaWQgMD09PWU/dm9pZCAwOmUudHJpZ2dlckVsO2lmKGkpe2NvbnN0IGU9bmV3IEN1c3RvbUV2ZW50KFwic2xpZGVUb1wiLHtidWJibGVzOiEwLGNhbmNlbGFibG
1U6ITAsZGV0YWlsOnQucGFnZX0pO2kuZGlzcGF0Y2hFdmVudChlKX19KSkscy5vbihbXCJyZWZyZXNoXCIsXCJjaGFuZ2VcIl0sKHQ9Pntjb25zdCBlPXRoaXMuY29udGFpbmVyO2lmKCFlKXJldHVybjtmb3IoY29uc3QgaSBvZiBlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1mYW5jeWJveC1jdXJyZW50LWluZGV4XVwiKSlpLmlubmVySFRNTD10LnBhZ2UrMTtmb3IoY29uc3QgaSBvZiBlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1mYW5jeWJveC1jb3VudF1cIikpaS5pbm5lckhUTUw9dC5wYWdlcy5sZW5ndGg7aWYoIXQuaXNJbmZpbml0ZSl7Zm9yKGNvbnN0IGkgb2YgZS5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtZmFuY3lib3gtbmV4dF1cIikpdC5wYWdlPHQucGFnZXMubGVuZ3RoLTE/KGkucmVtb3ZlQXR0cmlidXRlKHVlKSxpLnJlbW92ZUF0dHJpYnV0ZShwZSkpOihpLnNldEF0dHJpYnV0ZSh1ZSxcIlwiKSxpLnNldEF0dHJpYnV0ZShwZSxcIi0xXCIpKTtmb3IoY29uc3QgaSBvZiBlLnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1mYW5jeWJveC1wcmV2XVwiKSl0LnBhZ2U+MD8oaS5yZW1vdmVBdHRyaWJ1dGUodWUpLGkucmVtb3ZlQXR0cmlidXRlKHBlKSk6KGkuc2V0QXR0cmlidXRlKHVlLFwiXCIpLGkuc2V0QXR0cmlidXRlKHBlLFwiLTFcIikpfWNvbnN0IGk9dGhpcy5nZXRTbGlkZSgpO2lmKCFpKXJldHVybjtsZXQgbj1pLmRvd25sb2FkU3JjfHxcIlwiO258fFwiaW1hZ2VcIiE9PWkudHlwZXx8aS5lcnJvcnx8IXZlKGlbbWVdKXx8KG49aVttZV0pO2Zvcihjb25zdCB0IG9mIGUucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLWZhbmN5Ym94LWRvd25sb2FkXVwiKSl7Y29uc3QgZT1pLmRvd25sb2FkRmlsZW5hbWU7bj8odC5yZW1vdmVBdHRyaWJ1dGUodWUpLHQucmVtb3ZlQXR0cmlidXRlKHBlKSx0LnNldEF0dHJpYnV0ZShnZSxuKSx0LnNldEF0dHJpYnV0ZShmZSxlfHxuKSx0LnNldEF0dHJpYnV0ZShcInRhcmdldFwiLFwiX2JsYW5rXCIpKToodC5zZXRBdHRyaWJ1dGUodWUsXCJcIiksdC5zZXRBdHRyaWJ1dGUocGUsXCItMVwiKSx0LnJlbW92ZUF0dHJpYnV0ZShnZSksdC5yZW1vdmVBdHRyaWJ1dGUoZmUpKX19KSksdGhpcy5lbWl0KFwiaW5pdENhcm91c2VsXCIpfWF0dGFjaEV2ZW50cygpe2NvbnN0IHQ9dGhpcyxlPXQuY29udGFpbmVyO2lmKCFlKXJldHVybjtlLmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHQub25DbGljayx7cGFzc2l2ZTohMSxjYXB0dXJlOiExfSksZS5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIix0Lm9uV2hlZWwse3Bhc3NpdmU6ITEsY2FwdHVyZTohMX0pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsdC5vbktleWRvd24se3Bhc3NpdmU6ITEsY2FwdHVyZTohMH0pLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsdC5vblZpc2liaWxpdHlDaGFuZ2UsITEpLGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZW1vdmVcIix0Lm9uTW91c2Vtb3ZlKSx0Lm9wdGlvbihcInRyYXBGb2N1c1wiKSYmZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImZvY3VzXCIsdC5vbkZvY3VzLCEwKSx3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHQub25SZXNpemUpO2NvbnN0IGk9d2luZG93LnZpc3VhbFZpZXdwb3J0O2kmJihpLmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0Lm9uUmVzaXplKSxpLmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIix0Lm9uUmVzaXplKSl9ZGV0YWNoRXZlbnRzKCl7Y29uc3QgdD10aGlzLGU9dC5jb250YWluZXI7aWYoIWUpcmV0dXJuO2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsdC5vbktleWRvd24se3Bhc3NpdmU6ITEsY2FwdHVyZTohMH0pLGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIndoZWVsXCIsdC5vbldoZWVsLHtwYXNzaXZlOiExLGNhcHR1cmU6ITF9KSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLHQub25DbGljayx7cGFzc2l2ZTohMSxjYXB0dXJlOiExfSksZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNlbW92ZVwiLHQub25Nb3VzZW1vdmUpLHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsdC5vblJlc2l6ZSk7Y29uc3QgaT13aW5kb3cudmlzdWFsVmlld3BvcnQ7aSYmKGkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLHQub25SZXNpemUpLGkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHQub25SZXNpemUpKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidmlzaWJpbGl0eWNoYW5nZVwiLHQub25WaXNpYmlsaXR5Q2hhbmdlLCExKSxkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiZm9jdXNcIix0Lm9uRm9jdXMsITApfXNjYWxlKCl7Y29uc3QgdD10aGlzLmNvbnRhaW5lcjtpZighdClyZXR1cm47Y29uc3QgZT13aW5kb3cudmlzdWFsVmlld3BvcnQsaT1NYXRoLm1heCgxLChudWxsPT1lP3ZvaWQgMDplLnNjYWxlKXx8MSk7bGV0IG49XCJcIixzPVwiXCIsbz1cIlwiO2lmKGUmJmk+MSl7bGV0IHQ9YCR7ZS5vZmZzZXRMZWZ0fXB4YCxhPWAke2Uub2Zmc2V0VG9wfXB4YDtuPWUud2lkdGgqaStcInB4XCIscz1lLmhlaWdodCppK1wicHhcIixvPWB0cmFuc2xhdGUzZCgke3R9LCAke2F9LCAwKSBzY2FsZSgkezEvaX0pYH10LnN0eWxlLnRyYW5zZm9ybT1vLHQuc3R5bGUud2lkdGg9bix0LnN0eWxlLmhlaWdodD1zfW9uQ2xpY2sodCl7dmFyIGU7Y29uc3R7Y29udGFpbmVyOmksaXNDb21wYWN0Om59PXRoaXM7aWYoIWl8fHRoaXMuaXNDbG9zaW5nKCkpcmV0dXJuOyFuJiZ0aGlzLm9wdGlvbihcImlkbGVcIikmJnRoaXMucmVzZXRJZGxlKCk7Y29uc3Qgcz10LmNvbXBvc2VkUGF0aCgpWzBdO2lmKHMuY2xvc2VzdChcIi5mYW5jeWJveC1zcGlubmVyXCIpfHxzLmNsb3Nlc3QoXCJbZGF0YS1mYW5jeWJveC1jbG9zZV1cIikpcmV0dXJuIHQucHJldmVudERlZmF1bHQoKSx2b2lkIHRoaXMuY2xvc2UodCk7
1aWYocy5jbG9zZXN0KFwiW2RhdGEtZmFuY3lib3gtcHJldl1cIikpcmV0dXJuIHQucHJldmVudERlZmF1bHQoKSx2b2lkIHRoaXMucHJldigpO2lmKHMuY2xvc2VzdChcIltkYXRhLWZhbmN5Ym94LW5leHRdXCIpKXJldHVybiB0LnByZXZlbnREZWZhdWx0KCksdm9pZCB0aGlzLm5leHQoKTtpZihcImNsaWNrXCI9PT10LnR5cGUmJjA9PT10LmRldGFpbClyZXR1cm47aWYoTWF0aC5hYnModC5wYWdlWC1FZSk+MzB8fE1hdGguYWJzKHQucGFnZVktU2UpPjMwKXJldHVybjtjb25zdCBvPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7aWYoYmUoKSYmbyYmaS5jb250YWlucyhvKSlyZXR1cm47aWYobiYmXCJpbWFnZVwiPT09KG51bGw9PT0oZT10aGlzLmdldFNsaWRlKCkpfHx2b2lkIDA9PT1lP3ZvaWQgMDplLnR5cGUpKXJldHVybiB2b2lkKHRoaXMuY2xpY2tUaW1lcj8oY2xlYXJUaW1lb3V0KHRoaXMuY2xpY2tUaW1lciksdGhpcy5jbGlja1RpbWVyPW51bGwpOnRoaXMuY2xpY2tUaW1lcj1zZXRUaW1lb3V0KCgoKT0+e3RoaXMudG9nZ2xlSWRsZSgpLHRoaXMuY2xpY2tUaW1lcj1udWxsfSksMzUwKSk7aWYodGhpcy5lbWl0KFwiY2xpY2tcIix0KSx0LmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO2xldCBhPSExO2lmKHMuY2xvc2VzdChcIi5mYW5jeWJveF9fY29udGVudFwiKSl7aWYobyl7aWYoby5jbG9zZXN0KFwiW2NvbnRlbnRlZGl0YWJsZV1cIikpcmV0dXJuO3MubWF0Y2hlcyhudCl8fG8uYmx1cigpfWlmKGJlKCkpcmV0dXJuO2E9dGhpcy5vcHRpb24oXCJjb250ZW50Q2xpY2tcIil9ZWxzZSBzLmNsb3Nlc3QoXCIuZmFuY3lib3hfX2Nhcm91c2VsXCIpJiYhcy5tYXRjaGVzKG50KSYmKGE9dGhpcy5vcHRpb24oXCJiYWNrZHJvcENsaWNrXCIpKTtcImNsb3NlXCI9PT1hPyh0LnByZXZlbn
1REZWZhdWx0KCksdGhpcy5jbG9zZSh0KSk6XCJuZXh0XCI9PT1hPyh0LnByZXZlbnREZWZhdWx0KCksdGhpcy5uZXh0KCkpOlwicHJldlwiPT09YSYmKHQucHJldmVudERlZmF1bHQoKSx0aGlzLnByZXYoKSl9b25XaGVlbCh0KXtjb25zdCBlPXQudGFyZ2V0O2xldCBuPXRoaXMub3B0aW9uKFwid2hlZWxcIix0KTtlLmNsb3Nlc3QoXCIuZmFuY3lib3hfX3RodW1ic1wiKSYmKG49XCJzbGlkZVwiKTtjb25zdCBzPVwic2xpZGVcIj09PW4sbz1bLXQuZGVsdGFYfHwwLC10LmRlbHRhWXx8MCwtdC5kZXRhaWx8fDBdLnJlZHVjZSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gTWF0aC5hYnMoZSk+TWF0aC5hYnModCk/ZTp0fSkpLGE9TWF0aC5tYXgoLTEsTWF0aC5taW4oMSxvKSkscj1EYXRlLm5vdygpO3RoaXMucHd0JiZyLXRoaXMucHd0PDMwMD9zJiZ0LnByZXZlbnREZWZhdWx0KCk6KHRoaXMucHd0PXIsdGhpcy5lbWl0KFwid2hlZWxcIix0LGEpLHQuZGVmYXVsdFByZXZlbnRlZHx8KFwiY2xvc2VcIj09PW4/KHQucHJldmVudERlZmF1bHQoKSx0aGlzLmNsb3NlKHQpKTpcInNsaWRlXCI9PT1uJiYoaShlKXx8KHQucHJldmVudERlZmF1bHQoKSx0aGlzW2E+MD9cInByZXZcIjpcIm5leHRcIl0oKSkpKSl9b25TY3JvbGwoKXt3aW5kb3cuc2Nyb2xsVG8oUGUsQ2UpfW9uS2V5ZG93bih0KXtpZighdGhpcy5pc1RvcG1vc3QoKSlyZXR1cm47dGhpcy5pc0NvbXBhY3R8fCF0aGlzLm9wdGlvbihcImlkbGVcIil8fHRoaXMuaXNDbG9zaW5nKCl8fHRoaXMucmVzZXRJZGxlKCk7Y29uc3QgZT10LmtleSxpPXRoaXMub3B0aW9uKFwia2V5Ym9hcmRcIik7aWYoIWkpcmV0dXJuO2NvbnN0IG49dC5jb21wb3NlZFBhdGgoKVswXSxzPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQmJmRvY3VtZW50LmFjdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LG89cyYmcy5jb250YWlucyhcImYtYnV0dG9uXCIpfHxuLmRhdGFzZXQuY2Fyb3VzZWxQYWdlfHxuLmRhdGFzZXQuY2Fyb3VzZWxJbmRleDtpZihcIkVzY2FwZVwiIT09ZSYmIW8mJkUobikpe2lmKG4uaXNDb250ZW50RWRpdGFibGV8fC0xIT09W1wiVEVYVEFSRUFcIixcIk9QVElPTlwiLFwiSU5QVVRcIixcIlNFTEVDVFwiLFwiVklERU9cIl0uaW5kZXhPZihuLm5vZGVOYW1lKSlyZXR1cm59aWYoXCJUYWJcIj09PXQua2V5P1AodGhpcy5jb250YWluZXIsYWUpOlModGhpcy5jb250YWluZXIsYWUpLHQuY3RybEtleXx8dC5hbHRLZXl8fHQuc2hpZnRLZXkpcmV0dXJuO3RoaXMuZW1pdChcImtleWRvd25cIixlLHQpO2NvbnN0IGE9aVtlXTthJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzW2FdJiYodC5wcmV2ZW50RGVmYXVsdCgpLHRoaXNbYV0oKSl9b25SZXNpemUoKXtjb25zdCB0PXRoaXMuY29udGFpbmVyO2lmKCF0KXJldHVybjtjb25zdCBlPXRoaXMuaXNDb21wYWN0O3QuY2xhc3NMaXN0LnRvZ2dsZShsZSxlKSx0aGlzLm1hbmFnZUNhcHRpb24odGhpcy5nZXRTbGlkZSgpKSx0aGlzLmlzQ29tcGFjdD90aGlzLmNsZWFySWRsZSgpOnRoaXMuZW5kSWRsZSgpLHRoaXMuc2NhbGUoKSx0aGlzLmVtaXQoXCJyZXNpemVcIil9b25Gb2N1cyh0KXt0aGlzLmlzVG9wbW9zdCgpJiZ0aGlzLmNoZWNrRm9jdXModCl9b25Nb3VzZW1vdmUodCl7dGhpcy5wcmV2TW91c2VNb3ZlRXZlbnQ9dCwhdGhpcy5pc0NvbXBhY3QmJnRoaXMub3B0aW9uKFwiaWRsZVwiKSYmdGhpcy5yZXNldElkbGUoKX1vblZpc2liaWxpdHlDaGFuZ2UoKXtcInZpc2libGVcIj09PWRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZT90aGlzLmNoZWNrRm9jdXMoKTp0aGlzLmVuZElkbGUoKX1tYW5hZ2VDbG9zZUJ0bih0KXtjb25zdCBlPXRoaXMub3B0aW9uRm9yKHQsXCJjbG9zZUJ1dHRvblwiKXx8ITE7aWYoXCJhdXRvXCI9PT1lKXtjb25zdCB0PXRoaXMucGx1Z2lucy5Ub29sYmFyO2lmKHQmJnQuc3RhdGU9PT1adC5SZWFkeSlyZXR1cm59aWYoIWUpcmV0dXJuO2lmKCF0LmNvbnRlbnRFbHx8dC5jbG9zZUJ0bkVsKXJldHVybjtjb25zdCBpPXRoaXMub3B0aW9uKFwidHBsLmNsb3NlQnV0dG9uXCIpO2lmKGkpe2NvbnN0IGU9bih0aGlzLmxvY2FsaXplKGkpKTt0LmNsb3NlQnRuRWw9dC5jb250ZW50RWwuYXBwZW5kQ2hpbGQoZSksdC5lbCYmUCh0LmVsLFwiaGFzLWNsb3NlLWJ0blwiKX19bWFuYWdlQ2FwdGlvbih0PXZvaWQgMCl7dmFyIGUsaTtjb25zdCBuPVwiZmFuY3lib3hfX2NhcHRpb25cIixzPXRoaXMuY29udGFpbmVyO2lmKCFzKXJldHVybjtTKHMsZGUpO2NvbnN0IG89dGhpcy5pc0NvbXBhY3R8fHRoaXMub3B0aW9uKFwiY29tbW9uQ2FwdGlvblwiKSxhPSFvO2lmKHRoaXMuY2FwdGlvbiYmdGhpcy5zdG9wKHRoaXMuY2FwdGlvbiksYSYmdGhpcy5jYXB0aW9uJiYodGhpcy5jYXB0aW9uLnJlbW92ZSgpLHRoaXMuY2FwdGlvbj1udWxsKSxvJiYhdGhpcy5jYXB0aW9uKWZvcihjb25zdCB0IG9mKG51bGw9PT0oZT10aGlzLmNhcm91c2VsKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5zbGlkZXMpfHxbXSl0LmNhcHRpb25FbCYmKHQuY2FwdGlvbkVsLnJlbW92ZSgpLHQuY2FwdGlvbkVsPXZvaWQgMCxTKHQuZWwsZGUpLG51bGw9PT0oaT10LmVsKXx8dm9pZCAwPT09aXx8aS5yZW1vdmVBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsbGVkYnlcIikpO2lmKHR8fCh0PXRoaXMuZ2V0U2xpZGUoKSksIXR8fG8mJiF0aGlzLmlzQ3VycmVudFNsaWRlKHQpKXJldHVybjtjb25zdCByPXQuZWw7bGV0IGw9dGhpcy5vcHRpb25Gb3IodCxcImNhcHRpb25cIixcIlwiKTtpZighbClyZXR1cm4gdm9pZChvJiZ0aGlzLmNhcHRpb24mJnRoaXMuYW5pbWF0ZSh0aGlzLmNhcHRpb24sXCJmLWZhZGVPdXRcIiwoKCk9Pnt0aGlzLmNhcHRpb24mJih0aGlzLmNhcHRpb24uaW5uZXJIVE1MPVwiXCIpfSkpKTtsZXQgYz1udWxsO2lmKGEpe2lmKGM9dC5jYXB0aW9uRWx8fG51bGwsciYmIWMpe2NvbnN0IGU9bitgXyR7dGhpcy5pZH1fJHt0LmluZGV4fWA7Yz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLFAoYyxuKSxjLnNldEF0dHJpYnV0ZShcImlkXCIsZSksdC5jYXB0aW9uRWw9ci5hcHBlbmRDaGlsZChjKSxQKHIsZGUpLHIuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbGxlZGJ5XCIsZSl9fWVsc2V7aWYoYz10aGlzLmNhcHRpb24sY3x8KGM9cy5xdWVyeVNlbGVjdG9yKFwiLlwiK24pKSwhYyl7Yz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLGMuZGF0YXNldC5mYW5jeWJveENhcHRpb249XCJcIixQKGMsbik7KHRoaXMuZm9vdGVyfHxzKS5wcmVwZW5kKGMpfVAocyxkZSksdGhpcy5jYXB0aW9uPWN9YyYmKGMuaW5uZXJIVE1MPVwiXCIsdmUobCl8fFwibnVtYmVyXCI9PXR5cGVvZiBsP2MuaW5uZXJIVE1MPWwrXCJcIjpsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQmJmMuYXBwZW5kQ2hpbGQobCkpfWNoZWNrRm9jdXModCl7dGhpcy5mb2N1cy
1h0KX1mb2N1cyh0KXt2YXIgZTtpZih0aGlzLmlnbm9yZUZvY3VzQ2hhbmdlKXJldHVybjtjb25zdCBpPWRvY3VtZW50LmFjdGl2ZUVsZW1lbnR8fG51bGwsbj0obnVsbD09dD92b2lkIDA6dC50YXJnZXQpfHxudWxsLHM9dGhpcy5jb250YWluZXIsbz1udWxsPT09KGU9dGhpcy5jYXJvdXNlbCl8fHZvaWQgMD09PWU/dm9pZCAwOmUudmlld3BvcnQ7aWYoIXN8fCFvKXJldHVybjtpZighdCYmaSYmcy5jb250YWlucyhpKSlyZXR1cm47Y29uc3QgYT10aGlzLmdldFNsaWRlKCkscj1hJiZhLnN0YXRlPT09bHQuUmVhZHk/YS5lbDpudWxsO2lmKCFyfHxyLmNvbnRhaW5zKGkpfHxzPT09aSlyZXR1cm47dCYmdC5jYW5jZWxhYmxlJiZ0LnByZXZlbnREZWZhdWx0KCksdGhpcy5pZ25vcmVGb2N1c0NoYW5nZT0hMDtjb25zdCBsPUFycmF5LmZyb20ocy5xdWVyeVNlbGVjdG9yQWxsKG50KSk7bGV0IGM9W10saD1udWxsO2ZvcihsZXQgdCBvZiBsKXtjb25zdCBlPSF0Lm9mZnNldFBhcmVudHx8ISF0LmNsb3Nlc3QoJ1thcmlhLWhpZGRlbj1cInRydWVcIl0nKSxpPXImJnIuY29udGFpbnModCksbj0hby5jb250YWlucyh0KTtpZih0PT09c3x8KGl8fG4pJiYhZSl7Yy5wdXNoKHQpO2NvbnN0IGU9dC5kYXRhc2V0Lm9yaWdUYWJpbmRleDt2b2lkIDAhPT1lJiZlJiYodC50YWJJbmRleD1wYXJzZUZsb2F0KGUpKSx0LnJlbW92ZUF0dHJpYnV0ZShcImRhdGEtb3JpZy10YWJpbmRleFwiKSwhdC5oYXNBdHRyaWJ1dGUoXCJhdXRvRm9jdXNcIikmJmh8fChoPXQpfWVsc2V7Y29uc3QgZT12b2lkIDA9PT10LmRhdGFzZXQub3JpZ1RhYmluZGV4P3QuZ2V0QXR0cmlidXRlKFwidGFiaW5kZXhcIil8fFwiXCI6dC5kYXRhc2V0Lm9yaWdUYWJpbmRleDtlJiYodC5kYXRhc2V0Lm9yaWdUYWJpbmRleD1lKSx0LnRhYkluZGV4PS0xfX1sZXQgZD1udWxsO3Q/KCFufHxjLmluZGV4T2Yobik8MCkmJihkPWh8fHMsYy5sZW5ndGgmJihpPT09eGU/ZD1jWzBdOnRoaXMubGFzdEZvY3VzIT09cyYmaSE9PXdlfHwoZD1jW2MubGVuZ3RoLTFdKSkpOmQ9YSYmXCJpbWFnZVwiPT09YS50eXBlP3M6aHx8cyxkJiZzdChkKSx0aGlzLmxhc3RGb2N1cz1kb2N1bWVudC5hY3RpdmVFbGVtZW50LHRoaXMuaWdub3JlRm9jdXNDaGFuZ2U9ITF9bmV4dCgpe2NvbnN0IHQ9dGhpcy5jYXJvdXNlbDt0JiZ0LnBhZ2VzLmxlbmd0aD4xJiZ0LnNsaWRlTmV4dCgpfXByZXYoKXtjb25zdCB0PXRoaXMuY2Fyb3VzZWw7dCYmdC5wYWdlcy5sZW5ndGg+MSYmdC5zbGlkZVByZXYoKX1qdW1wVG8oLi4udCl7dGhpcy5jYXJvdXNlbCYmdGhpcy5jYXJvdXNlbC5zbGlkZVRvKC4uLnQpfWlzVG9wbW9zdCgpe3ZhciB0O3JldHVybihudWxsPT09KHQ9T2UuZ2V0SW5zdGFuY2UoKSl8fHZvaWQgMD09PXQ/dm9pZCAwOnQuaWQpPT10aGlzLmlkfWFuaW1hdGUodD1udWxsLGU9XCJcIixpKXtpZighdHx8IWUpcmV0dXJuIHZvaWQoaSYmaSgpKTt0aGlzLnN0b3AodCk7Y29uc3Qgbj1zPT57cy50YXJnZXQ9PT10JiZ0LmRhdGFzZXQuYW5pbWF0aW9uTmFtZSYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImFuaW1hdGlvbmVuZFwiLG4pLGRlbGV0ZSB0LmRhdGFzZXQuYW5pbWF0aW9uTmFtZSxpJiZpKCksUyh0LGUpKX07dC5kYXRhc2V0LmFuaW1hdGlvbk5hbWU9ZSx0LmFkZEV2ZW50TGlzdGVuZXIoXCJhbmltYXRpb25lbmRcIixuKSxQKHQsZSl9c3RvcCh0KXt0JiZ0LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiYW5pbWF0aW9uZW5kXCIse2J1YmJsZXM6ITEsY2FuY2VsYWJsZTohMCxjdXJyZW50VGFyZ2V0OnR9KSl9c2V0Q29udGVudCh0LGU9XCJcIixpPSEwKXtpZih0aGlzLmlzQ2xvc2luZygpKXJldHVybjtjb25zdCBzPXQuZWw7aWYoIXMpcmV0dXJuO2xldCBvPW51bGw7aWYoRShlKT9vPWU6KG89bihlK1wiXCIpLEUobyl8fChvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksby5pbm5lckhUTUw9ZStcIlwiKSksW1wiaW1nXCIsXCJwaWN0dXJlXCIsXCJpZnJhbWVcIixcInZpZGVvXCIsXCJhdWRpb1wiXS5pbmNsdWRlcyhvLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpKXtjb25zdCB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7dC5hcHBlbmRDaGlsZChvKSxvPXR9RShvKSYmdC5maWx0ZXImJiF0LmVycm9yJiYobz1vLnF1ZXJ5U2VsZWN0b3IodC5maWx0ZXIpKSxvJiZFKG8pPyhQKG8sXCJmYW5jeWJveF9fY29udGVudFwiKSx0LmlkJiZvLnNldEF0dHJpYnV0ZShcImlkXCIsdC5pZCkscy5jbGFzc0xpc3QuYWRkKGBoYXMtJHt0LmVycm9yP1wiZXJyb3JcIjp0LnR5cGV8fFwidW5rbm93blwifWApLHMucHJlcGVuZChvKSxcIm5vbmVcIj09PW8uc3R5bGUuZGlzcGxheSYmKG8uc3R5bGUuZGlzcGxheT1cIlwiKSxcIm5vbmVcIj09PWdldENvbXB1dGVkU3R5bGUobykuZ2V0UHJvcGVydHlWYWx1ZShcImRpc3BsYXlcIikmJihvLnN0eWxlLmRpc3BsYXk9dC5kaXNwbGF5fHx0aGlzLm9wdGlvbihcImRlZmF1bHREaXNwbGF5XCIpfHxcImZsZXhcIiksdC5jb250ZW50RWw9byxpJiZ0aGlzLnJldmVhbENvbnRlbnQodCksdGhpcy5tYW5hZ2VDbG9zZUJ0bih0KSx0aGlzLm1hbmFnZUNhcHRpb24odCkpOnRoaXMuc2V0RXJyb3IodCxcInt7RUxFTUVOVF9OT1RfRk9VTkR9fVwiKX1yZXZlYWxDb250ZW50KHQsZSl7Y29uc3QgaT10LmVsLG49dC5jb250ZW50RWw7aSYmbiYmKHRoaXMuZW1pdChcInJldmVhbFwiLHQpLHRoaXMuaGlkZUxvYWRpbmcodCksdC5zdGF0ZT1sdC5PcGVuaW5nLChlPXRoaXMuaXNPcGVuaW5nU2xpZGUodCk/dm9pZCAwPT09ZT90aGlzLm9wdGlvbkZvcih0LFwic2hvd0NsYXNzXCIpOmU6XCJmLWZhZGVJblwiKT90aGlzLmFuaW1hdGUobixlLCgoKT0+e3RoaXMuZG9uZSh0KX0pKTp0aGlzLmRvbmUodCkpfWRvbmUodCl7dGhpcy5pc0Nsb3NpbmcoKXx8KHQuc3RhdGU9bHQuUmVhZHksdGhpcy5lbWl0KFwiZG9uZVwiLHQpLFAodC5lbCxcImlzLWRvbmVcIiksdGhpcy5pc0N1cnJlbnRTbGlkZSh0KSYmdGhpcy5vcHRpb24oXCJhdXRvRm9jdXNcIikmJnF1ZXVlTWljcm90YXNrKCgoKT0+e3ZhciBlO251bGw9PT0oZT10LnBhbnpvb20pfHx2b2lkIDA9PT1lfHxlLnVwZGF0ZUNvbnRyb2xzKCksdGhpcy5vcHRpb24oXCJhdXRvRm9jdXNcIikmJnRoaXMuZm9jdXMoKX0pKSx0aGlzLmlzT3BlbmluZ1NsaWRlKHQpJiYoUyh0aGlzLmNvbnRhaW5lcixoZSksIXRoaXMuaXNDb21wYWN0JiZ0aGlzLm9wdGlvbihcImlkbGVcIikmJnRoaXMuc2V0SWRsZSgpKSl9aXNDdXJyZW50U2xpZGUodCl7Y29uc3QgZT10aGlzLmdldFNsaWRlKCk7cmV0dXJuISghdHx8IWUpJiZlLmluZGV4PT09dC5pbmRleH1pc09wZW5pbmdTbGlkZSh0KXt2YXIgZSxpO3JldHVybiBudWxsPT09KG51bGw9PT0oZT10aGlzLmNhcm91c2VsKXx8dm9pZCAwPT09ZT92b2lkIDA6ZS5wcmV2UGFnZSkmJnQmJnQuaW5kZXg9PT0obnVsbD09PShpPXRoaXMuZ2V0U2xpZGUoKSl8fHZvaWQgMD09PWk/dm9pZCAwOmkuaW5kZXgpfXNob3dMb2FkaW5nKHQpe3Quc3RhdGU9bHQuTG9hZGluZztjb25zdCBlPXQuZWw7aWYoIWUpcmV0dXJuO1AoZSxjZSksdGhpcy5lbWl0KFwibG9hZGluZ1wiLHQpLHQuc3Bpbm5lckVsfHxzZXRUaW
11lb3V0KCgoKT0+e2lmKCF0aGlzLmlzQ2xvc2luZygpJiYhdC5zcGlubmVyRWwmJnQuc3RhdGU9PT1sdC5Mb2FkaW5nKXtsZXQgaT1uKHgpO1AoaSxcImZhbmN5Ym94LXNwaW5uZXJcIiksdC5zcGlubmVyRWw9aSxlLnByZXBlbmQoaSksdGhpcy5hbmltYXRlKGksXCJmLWZhZGVJblwiKX19KSwyNTApfWhpZGVMb2FkaW5nKHQpe2NvbnN0IGU9dC5lbDtpZighZSlyZXR1cm47Y29uc3QgaT10LnNwaW5uZXJFbDt0aGlzLmlzQ2xvc2luZygpP251bGw9PWl8fGkucmVtb3ZlKCk6KFMoZSxjZSksaSYmdGhpcy5hbmltYXRlKGksXCJmLWZhZGVPdXRcIiwoKCk9PntpLnJlbW92ZSgpfSkpLHQuc3RhdGU9PT1sdC5Mb2FkaW5nJiYodGhpcy5lbWl0KFwibG9hZGVkXCIsdCksdC5zdGF0ZT1sdC5SZWFkeSkpfXNldEVycm9yKHQsZSl7aWYodGhpcy5pc0Nsb3NpbmcoKSlyZXR1cm47Y29uc3QgaT1uZXcgRXZlbnQoXCJlcnJvclwiLHtidWJibGVzOiEwLGNhbmNlbGFibGU6ITB9KTtpZih0aGlzLmVtaXQoXCJlcnJvclwiLGksdCksaS5kZWZhdWx0UHJldmVudGVkKXJldHVybjt0LmVycm9yPWUsdGhpcy5oaWRlTG9hZGluZyh0KSx0aGlzLmNsZWFyQ29udGVudCh0KTtjb25zdCBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7bi5jbGFzc0xpc3QuYWRkKFwiZmFuY3lib3gtZXJyb3JcIiksbi5pbm5lckhUTUw9dGhpcy5sb2NhbGl6ZShlfHxcIjxwPnt7RVJST1J9fTwvcD5cIiksdGhpcy5zZXRDb250ZW50KHQsbil9Y2xlYXJDb250ZW50KHQpe2lmKHZvaWQgMD09PXQuc3RhdGUpcmV0dXJuO3RoaXMuZW1pdChcImNsZWFyQ29udGVudFwiLHQpLHQuY29udGVudEVsJiYodC5jb250ZW50RWwucmVtb3ZlKCksdC5jb250ZW50RWw9dm9pZCAwKTtjb25zdCBlPXQuZWw7ZSYmKFMoZSxcImhhcy1lcnJvclwiKSxTKGUsXCJoYXMtdW5rbm93blwiKSxTKGUsYGhhcy0ke3QudHlwZXx8XCJ1bmtub3duXCJ9YCkpLHQuY2xvc2VCdG5FbCYmdC5jbG9zZUJ0bkVsLnJlbW92ZSgpLHQuY2xvc2VCdG5FbD12b2lkIDAsdC5jYXB0aW9uRWwmJnQuY2FwdGlvbkVsLnJlbW92ZSgpLHQuY2FwdGlvbkVsPXZvaWQgMCx0LnNwaW5uZXJFbCYmdC5zcGlubmVyRWwucmVtb3ZlKCksdC5zcGlubmVyRWw9dm9pZCAwfWdldFNsaWRlKCl7dmFyIHQ7Y29uc3QgZT10aGlzLmNhcm91c2VsO3JldHVybihudWxsPT09KHQ9bnVsbD09ZT92b2lkIDA6ZS5wYWdlc1tudWxsPT1lP3ZvaWQgMDplLnBhZ2VdKXx8dm9pZCAwPT09dD92b2lkIDA6dC5zbGlkZXNbMF0pfHx2b2lkIDB9Y2xvc2UodCxlKXtpZih0aGlzLmlzQ2xvc2luZygpKXJldHVybjtjb25zdCBpPW5ldyBFdmVudChcInNob3VsZENsb3NlXCIse2J1YmJsZXM6ITAsY2FuY2VsYWJsZTohMH0pO2lmKHRoaXMuZW1pdChcInNob3VsZENsb3NlXCIsaSx0KSxpLmRlZmF1bHRQcmV2ZW50ZWQpcmV0dXJuO3QmJnQuY2FuY2VsYWJsZSYmKHQucHJldmVudERlZmF1bHQoKSx0LnN0b3BQcm9wYWdhdGlvbigpKTtjb25zdCBuPSgpPT57dGhpcy5wcm9jZWVkQ2xvc2UodCxlKX07dGhpcy5zdGFydGVkRnMmJnllJiZ5ZS5pc0Z1bGxzY3JlZW4oKT9Qcm9taXNlLnJlc29sdmUoeWUuZXhpdCgpKS50aGVuKCgoKT0+bigpKSk6bigpfWNsZWFySWRsZSgpe3RoaXMuaWRsZVRpbWVyJiZjbGVhclRpbWVvdXQodGhpcy5pZGxlVGltZXIpLHRoaXMuaWRsZVRpbWVyPW51bGx9c2V0SWRsZSh0PSExKXtjb25zdCBlPSgpPT57dGhpcy5jbGVhcklkbGUoKSx0aGlzLmlkbGU9ITAsUCh0aGlzLmNvbnRhaW5lcixcImlzLWlkbGVcIiksdGhpcy5lbWl0KFwic2V0SWRsZVwiKX07aWYodGhpcy5jbGVhcklkbGUoKSwhdGhpcy5pc0Nsb3NpbmcoKSlpZih0KWUoKTtlbHNle2NvbnN0IHQ9dGhpcy5vcHRpb24oXCJpZGxlXCIpO3QmJih0aGlzLmlkbGVUaW1lcj1zZXRUaW1lb3V0KGUsdCkpfX1lbmRJZGxlKCl7dGhpcy5jbGVhcklkbGUoKSx0aGlzLmlkbGUmJiF0aGlzLmlzQ2xvc2luZygpJiYodGhpcy5pZGxlPSExLFModGhpcy5jb250YWluZXIsXCJpcy1pZGxlXCIpLHRoaXMuZW1pdChcImVuZElkbGVcIikpfXJlc2V0SWRsZSgpe3RoaXMuZW5kSWRsZSgpLHRoaXMuc2V0SWRsZSgpfXRvZ2dsZUlkbGUoKXt0aGlzLmlkbGU/dGhpcy5lbmRJZGxlKCk6dGhpcy5zZXRJZGxlKCEwKX10b2dnbGVGdWxsc2NyZWVuKCl7eWUmJih5ZS5pc0Z1bGxzY3JlZW4oKT95ZS5leGl0KCk6eWUucmVxdWVzdCgpLnRoZW4oKCgpPT57dGhpcy5zdGFydGVkRnM9ITB9KSkpfWlzQ2xvc2luZygpe3JldHVybltydC5DbG9zaW5nLHJ0LkN1c3RvbUNsb3NpbmcscnQuRGVzdHJveV0uaW5jbHVkZXModGhpcy5zdGF0ZSl9cHJvY2VlZENsb3NlKHQsZSl7dmFyIGksbjt0aGlzLnN0YXRlPXJ0LkNsb3NpbmcsdGhpcy5jbGVhcklkbGUoKSx0aGlzLmRldGFjaEV2ZW50cygpO2NvbnN0IHM9dGhpcy5jb250YWluZXIsbz10aGlzLmNhcm91c2VsLGE9dGhpcy5nZXRTbGlkZSgpLHI9YSYmdGhpcy5vcHRpb24oXCJwbGFjZUZvY3VzQmFja1wiKT9hLnRyaWdnZXJFbHx8dGhpcy5vcHRpb24oXCJ0cmlnZ2VyRWxcIik6bnVsbDtpZihyJiYodHQocik/c3Qocik6ci5mb2N1cygpKSxzJiYoUyhzLGhlKSxQKHMsXCJpcy1jbG9zaW5nXCIpLHMuc2V0QXR0cmlidXRlKG9lLFwidHJ1ZVwiKSx0aGlzLm9wdGlvbihcImFuaW1hdGVkXCIpJiZQKHMscmUpLHMuc3R5bGUucG9pbnRlckV2ZW50cz1cIm5vbmVcIiksbyl7by5jbGVhclRyYW5zaXRpb25zKCksbnVsbD09PShpPW8ucGFuem9vbSl8fHZvaWQgMD09PWl8fGkuZGVzdHJveSgpLG51bGw9PT0obj1vLnBsdWdpbnMuTmF2aWdhdGlvbil8fHZvaWQgMD09PW58fG4uZGV0YWNoKCk7Zm9yKGNvbnN0IHQgb2Ygby5zbGlkZXMpe3Quc3RhdGU9bHQuQ2xvc2luZyx0aGlzLmhpZGVMb2FkaW5nKHQpO2NvbnN0IGU9dC5jb250ZW50RWw7ZSYmdGhpcy5zdG9wKGUpO2NvbnN0IGk9bnVsbD09dD92b2lkIDA6dC5wYW56b29tO2kmJihpLnN0b3AoKSxpLmRldGFjaEV2ZW50cygpLGkuZGV0YWNoT2JzZXJ2ZXIoKSksdGhpcy5pc0N1cnJlbnRTbGlkZSh0KXx8by5lbWl0KFwicmVtb3ZlU2xpZGVcIix0KX19UGU9d2luZG93LnNjcm9sbFgsQ2U9d2luZG93LnNjcm9sbFksd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIix0aGlzLm9uU2Nyb2xsKSx0aGlzLmVtaXQoXCJjbG9zZVwiLHQpLHRoaXMuc3RhdGUhPT1ydC5DdXN0b21DbG9zaW5nPyh2b2lkIDA9PT1lJiZhJiYoZT10aGlzLm9wdGlvbkZvcihhLFwiaGlkZUNsYXNzXCIpKSxlJiZhPyh0aGlzLmFuaW1hdGUoYS5jb250ZW50RWwsZSwoKCk9PntvJiZvLmVtaXQoXCJyZW1vdmVTbGlkZVwiLGEpfSkpLHNldFRpbWVvdXQoKCgpPT57dGhpcy5kZXN0cm95KCl9KSw1MDApKTp0aGlzLmRlc3Ryb3koKSk6c2V0VGltZW91dCgoKCk9Pnt0aGlzLmRlc3Ryb3koKX0pLDUwMCl9ZGVzdHJveSgpe3ZhciB0O2lmKHRoaXMuc3RhdGU9PT1ydC5EZXN0cm95KXJldHVybjt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLHRoaXMub25TY3JvbGwpLHRoaXMuc3RhdGU9cnQuRGVzdHJveSxudWxsPT09KHQ9dGhpcy5jYXJvdXNlbCl8fHZvaWQgMD09PXR8fHQuZGVzdHJveSgpO2NvbnN0IGU9dGhpcy5jb250YWluZXI7ZSYmZS5yZW1vdmUoKSxUZS5kZWxldGUodGhpcy5pZCk7Y29uc3QgaT1PZS5nZXRJbnN0YW5jZSgpO2k/aS5mb2N1cygpOih3ZSYmKHdlLnJlbW92ZSgpLHdlPW51bGwpLHhlJiYoeGUucmVtb3ZlKCkseGU9bnVsbCksUyhkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsZWUpLCgoKT0+e2lmKCFldClyZXR1cm47Y29uc3QgdD1kb2N1bWVudCxlPXQuYm9keTtlLmNsYXNzTGlzdC5yZW1vdmUoaWUpLGUuc3R5bGUuc2V0UHJvcGVydHkoc2UsXCJcIiksdC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkobmUsXCJcIil9KSgpLHRoaXMuZW1pdChcImRlc3Ryb3lcIikpfXN0YXRpYyBiaW5kKHQsZSxpKXtp
1ZighZXQpcmV0dXJuO2xldCBuLHM9XCJcIixvPXt9O2lmKHZvaWQgMD09PXQ/bj1kb2N1bWVudC5ib2R5OnZlKHQpPyhuPWRvY3VtZW50LmJvZHkscz10LFwib2JqZWN0XCI9PXR5cGVvZiBlJiYobz1lfHx7fSkpOihuPXQsdmUoZSkmJihzPWUpLFwib2JqZWN0XCI9PXR5cGVvZiBpJiYobz1pfHx7fSkpLCFufHwhRShuKSlyZXR1cm47cz1zfHxcIltkYXRhLWZhbmN5Ym94XVwiO2NvbnN0IGE9T2Uub3BlbmVycy5nZXQobil8fG5ldyBNYXA7YS5zZXQocyxvKSxPZS5vcGVuZXJzLnNldChuLGEpLDE9PT1hLnNpemUmJm4uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsT2UuZnJvbUV2ZW50KX1zdGF0aWMgdW5iaW5kKHQsZSl7bGV0IGksbj1cIlwiO2lmKHZlKHQpPyhpPWRvY3VtZW50LmJvZHksbj10KTooaT10LHZlKGUpJiYobj1lKSksIWkpcmV0dXJuO2NvbnN0IHM9T2Uub3BlbmVycy5nZXQoaSk7cyYmbiYmcy5kZWxldGUobiksbiYmc3x8KE9lLm9wZW5lcnMuZGVsZXRlKGkpLGkucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsT2UuZnJvbUV2ZW50KSl9c3RhdGljIGRlc3Ryb3koKXtsZXQgdDtmb3IoO3Q9T2UuZ2V0SW5zdGFuY2UoKTspdC5kZXN0cm95KCk7Zm9yKGNvbnN0IHQgb2YgT2Uub3BlbmVycy5rZXlzKCkpdC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIixPZS5mcm9tRXZlbnQpO09lLm9wZW5lcnM9bmV3IE1hcH1zdGF0aWMgZnJvbUV2ZW50KHQpe2lmKHQuZGVmYXVsdFByZXZlbnRlZClyZXR1cm47aWYodC5idXR0b24mJjAhPT10LmJ1dHRvbilyZXR1cm47aWYodC5jdHJsS2V5fHx0Lm1ldGFLZXl8fHQuc2hpZnRLZXkpcmV0dXJuO2xldCBlPXQuY29tcG9zZWRQYXRoKClbMF07Y29uc3QgaT1lLmNsb3Nlc3QoXCJbZGF0YS1mYW5jeWJveC10cmlnZ2VyXVwiKTtpZihpKXtjb25zdCB0PWkuZGF0YXNldC5mYW5jeWJveFRyaWdnZXJ8fFwiXCIsbj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGBbZGF0YS1mYW5jeWJveD1cIiR7dH1cIl1gKSxzPXBhcnNlSW50KGkuZGF0YXNldC5mYW5jeWJveEluZGV4fHxcIlwiLDEwKXx8MDtlPW5bc118fGV9aWYoIShlJiZlIGluc3RhbmNlb2YgRWxlbWVudCkpcmV0dXJuO2xldCBuLHMsbyxhO2lmKFsuLi5PZS5vcGVuZXJzXS5yZXZlcnNlKCkuZmluZCgoKFt0LGldKT0+ISghdC5jb250YWlucyhlKXx8IVsuLi5pXS5yZXZlcnNlKCkuZmluZCgoKFtpLHJdKT0+e2xldCBsPWUuY2xvc2VzdChpKTtyZXR1cm4hIWwmJihuPXQscz1pLG89bCxhPXIsITApfSkpKSkpLCFufHwhc3x8IW8pcmV0dXJuO2E9YXx8e30sdC5wcmV2ZW50RGVmYXVsdCgpLGU9bztsZXQgcj1bXSxsPXUoe30sYXQsYSk7bC5ldmVudD10LGwudHJpZ2dlckVsPWUsbC5kZWxlZ2F0ZT1pO2NvbnN0IGM9bC5ncm91cEFsbCxoPWwuZ3JvdXBBdHRyLGQ9aCYmZT9lLmdldEF0dHJpYnV0ZShgJHtofWApOlwiXCI7aWYoKCFlfHxkfHxjKSYmKHI9W10uc2xpY2UuY2FsbChuLnF1ZXJ5U2VsZWN0b3JBbGwocykpKSxlJiYhYyYmKHI9ZD9yLmZpbHRlcigodD0+dC5nZXRBdHRyaWJ1dGUoYCR7aH1gKT09PWQpKTpbZV0pLCFyLmxlbmd0aClyZXR1cm47Y29uc3QgcD1PZS5nZXRJbnN0YW5jZSgpO3JldHVybiBwJiZwLm9wdGlvbnMudHJpZ2dlckVsJiZyLmluZGV4T2YocC5vcHRpb25zLnRyaWdnZXJFbCk+LTE/dm9pZCAwOihlJiYobC5zdGFydEluZGV4PXIuaW5kZXhPZihlKSksT2UuZnJvbU5vZGVzKHIsbCkpfXN0YXRpYyBmcm9tU2VsZWN0b3IodCxlLGkpe2xldCBuPW51bGwscz1cIlwiLG89e307aWYodmUodCk/KG49ZG9jdW1lbnQuYm9keSxzPXQsXCJvYmplY3RcIj09dHlwZW9mIGUmJihvPWV8fHt9KSk6dCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50JiZ2ZShlKSYmKG49dCxzPWUsXCJvYmplY3RcIj09dHlwZW9mIGkmJihvPWl8fHt9KSksIW58fCFzKXJldHVybiExO2NvbnN0IGE9T2Uub3BlbmVycy5nZXQobik7cmV0dXJuISFhJiYobz11KHt9LGEuZ2V0KHMpfHx7fSxvKSwhIW8mJk9lLmZyb21Ob2RlcyhBcnJheS5mcm9tKG4ucXVlcnlTZWxlY3RvckFsbChzKSksbykpfXN0YXRpYyBmcm9tTm9kZXModCxlKXtlPXUoe3
10sYXQsZXx8e30pO2NvbnN0IGk9W107Zm9yKGNvbnN0IG4gb2YgdCl7Y29uc3QgdD1uLmRhdGFzZXR8fHt9LHM9dFttZV18fG4uZ2V0QXR0cmlidXRlKGdlKXx8bi5nZXRBdHRyaWJ1dGUoXCJjdXJyZW50U3JjXCIpfHxuLmdldEF0dHJpYnV0ZShtZSl8fHZvaWQgMDtsZXQgbztjb25zdCBhPWUuZGVsZWdhdGU7bGV0IHI7YSYmaS5sZW5ndGg9PT1lLnN0YXJ0SW5kZXgmJihvPWEgaW5zdGFuY2VvZiBIVE1MSW1hZ2VFbGVtZW50P2E6YS5xdWVyeVNlbGVjdG9yKFwiaW1nOm5vdChbYXJpYS1oaWRkZW5dKVwiKSksb3x8KG89biBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQ/bjpuLnF1ZXJ5U2VsZWN0b3IoXCJpbWc6bm90KFthcmlhLWhpZGRlbl0pXCIpKSxvJiYocj1vLmN1cnJlbnRTcmN8fG9bbWVdfHx2b2lkIDAsIXImJm8uZGF0YXNldCYmKHI9by5kYXRhc2V0LmxhenlTcmN8fG8uZGF0YXNldFttZV18fHZvaWQgMCkpO2NvbnN0IGw9e3NyYzpzLHRyaWdnZXJFbDpuLHRodW1iRWw6byx0aHVtYkVsU3JjOnIsdGh1bWJTcmM6cn07Zm9yKGNvbnN0IGUgaW4gdCl7bGV0IGk9dFtlXStcIlwiO2k9XCJmYWxzZVwiIT09aSYmKFwidHJ1ZVwiPT09aXx8aSksbFtlXT1pfWkucHVzaChsKX1yZXR1cm4gbmV3IE9lKGksZSl9c3RhdGljIGdldEluc3RhbmNlKHQpe2lmKHQpcmV0dXJuIFRlLmdldCh0KTtyZXR1cm4gQXJyYXkuZnJvbShUZS52YWx1ZXMoKSkucmV2ZXJzZSgpLmZpbmQoKHQ9PiF0LmlzQ2xvc2luZygpJiZ0KSl8fG51bGx9c3RhdGljIGdldFNsaWRlKCl7dmFyIHQ7cmV0dXJuKG51bGw9PT0odD1PZS5nZXRJbnN0YW5jZSgpKXx8dm9pZCAwPT09dD92b2lkIDA6dC5nZXRTbGlkZSgpKXx8bnVsbH1zdGF0aWMgc2hvdyh0PVtdLGU9e30pe3JldHVybiBuZXcgT2UodCxlKX1zdGF0aWMgbmV4dCgpe2NvbnN0IHQ9T2UuZ2V0SW5zdGFuY2UoKTt0JiZ0Lm5leHQoKX1zdGF0aWMgcHJldigpe2NvbnN0IHQ9T2UuZ2V0SW5zdGFuY2UoKTt0JiZ0LnByZXYoKX1zdGF0aWMgY2xvc2UodD0hMCwuLi5lKXtpZih0KWZvcihjb25zdCB0IG9mIFRlLnZhbHVlcygpKXQuY2xvc2UoLi4uZSk7ZWxzZXtjb25zdCB0PU9lLmdldEluc3RhbmNlKCk7dCYmdC5jbG9zZSguLi5lKX19fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShPZSxcInZlcnNpb25cIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6XCI1LjAuMzZcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPZSxcImRlZmF1bHRzXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwLHZhbHVlOmF0fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KE9lLFwiUGx1Z2luc1wiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTp0ZX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShPZSxcIm9wZW5lcnNcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITAsdmFsdWU6bmV3IE1hcH0pO2V4cG9ydHtRIGFzIENhcm91c2VsLE9lIGFzIEZhbmN5Ym94LEkgYXMgUGFuem9vbX07XG4iLCJjb25zdCBwYXJlbnRTZWxlY3RvciA9ICcuZXZlbnQtY292ZXInO1xuXG5pbXBvcnQgJ3N0eWxlL2Jsb2Nrcy9ldmVudC9fZXZlbnQtY292ZXIuc2Nzcyc7XG5pbXBvcnQge0ZhbmN5Ym94fSBmcm9tIFwiQGZhbmN5YXBwcy91aVwiO1xuXG5pbXBvcnQoXCIuLi8uLi8uLi9zY3NzL3BsdWdpbnMvZmFuY3lib3guY3NzXCIpO1xuaW1wb3J0ICgnc3R5bGUvbW9kdWxlcy9fZmFuY3lib3guc2NzcycpO1xuaW1wb3J0IFwiQGZhbmN5YXBwcy91aS9kaXN0L2ZhbmN5Ym94L2ZhbmN5Ym94LmNzc1wiO1xuXG5hc3luYyBmdW5jdGlvbiBpbml0KHBhcmVudCkge1xuICBjb25zdCB7U2Nyb2xsVG9IYXNofSA9IGF3YWl0IGltcG9ydCgnLi4vLi4vY29tcG9uZW50cy9CdXR0b25zJyk7XG4gIG5ldyBTY3JvbGxUb0hhc2goKS5pbml0KCk7XG59XG5cbi8vIERlZmF1bHQgaW5pdFxuZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChwYXJlbnRTZWxlY3RvcikuZm9yRWFjaChwYXJlbnQgPT4ge1xuICBpbml0KHBhcmVudCk7XG59KTtcblxuLy8gV1AgaW5pdCBhbmQgQmFyYmEgcmVpbml0XG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVpbml0JywgZSA9PiB7XG4gIGxldCBjb250YWluZXIgPSAoZS5kZXRhaWwgJiYgZS5kZXRhaWwuY29udGFpbmVyKSB8fCBkb2N1bWVudDtcbiAgY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwocGFyZW50U2VsZWN0b3IpLmZvckVhY2gocGFyZW50ID0+IHtcbiAgICBpbml0KHBhcmVudCk7XG4gIH0pO1xufSk7XG4iXSwibmFtZXMiOltdLCJzb3VyY2VSb290IjoiIn0=\n//# sourceURL=webpack-internal:///8857\n')}},__webpack_module_cache__={},leafPrototypes,getProto,inProgress,dataWebpackPrefix,loadStylesheet,installedCssChunks;function __webpack_require__(t){var e=__webpack_module_cache__[t];if(void 0!==e)return e.exports;var i=__webpack_module_cache__[t]={exports:{}};return __webpack_modules__[t].call(i.exports,i,i.exports,__webpack_require__),i.exports}__webpack_require__.m=__webpack_modules__,getProto=Object.getPrototypeOf?function(t){return Object.getPrototypeOf(t)}:function(t){return t.__proto__},__webpack_require__.t=function(t,e){if(1&e&&(t=this(t)),8&e)return t;if("object"==typeof t&&t){if(4&e&&t.__esModule)return t;if(16&e&&"function"==typeof t.then)return t}var i=Object.create(null);__webpack_require__.r(i);var l={};leafPrototypes=leafPrototypes||[null,getProto({}),getProto([]),getProto(getProto)];for(var n=2&e&&t;"object"==typeof n&&!~leafPrototypes.indexOf(n);n=getProto(n))Object.getOwnPropertyNames(n).forEach((function(e){l[e]=function(){return t[e]}}));return l.default=function(){return t},__webpack_require__.d(i,l),i},__webpack_require__.d=function(t,e){for(var i in e)__webpack_require__.o(e,i)&&!__webpack_require__.o(t,i)&&Object.defineProperty(t,i,{enumerable:!0,get:e[i]})},__webpack_require__.f={},__webpack_require__.e=function(t){return Promise.all(Object.keys(__webpack_require__.f).reduce((function(e,i){return __webpack_require__.f[i](t,e),e}),[]))},__webpack_require__.u=function(t){return t+".js"},__webpack_require__.miniCssF=function(t){return(594===t?"eventCover":t)+".css"},__webpack_require__.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},inProgress={},dataWebpackPrefix="boilerplate:",__webpack_require__.l=function(t,e,
vendor: 3,362 bytes, line 1
1i,l){if(inProgress[t])inProgress[t].push(e);else{var n,c;if(void 0!==i)for(var o=document.getElementsByTagName("script"),s=0;s<o.length;s++){var a=o[s];if(a.getAttribute("src")==t||a.getAttribute("data-webpack")==dataWebpackPrefix+i){n=a;break}}n||(c=!0,(n=document.createElement("script")).charset="utf-8",n.timeout=120,__webpack_require__.nc&&n.setAttribute("nonce",__webpack_require__.nc),n.setAttribute("data-webpack",dataWebpackPrefix+i),n.src=t),inProgress[t]=[e];var d=function(e,i){n.onerror=n.onload=null,clearTimeout(b);var l=inProgress[t];if(delete inProgress[t],n.parentNode&&n.parentNode.removeChild(n),l&&l.forEach((function(t){return t(i)})),e)return e(i)},b=setTimeout(d.bind(null,void 0,{type:"timeout",target:n}),12e4);n.onerror=d.bind(null,n.onerror),n.onload=d.bind(null,n.onload),c&&document.head.appendChild(n)}},__webpack_require__.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},__webpack_require__.p="/wp-content/themes/moi/static/dist/",loadStylesheet=function(t){return new Promise((function(e,i){var l=__webpack_require__.miniCssF(t),n=__webpack_require__.p+l;if(function(t,e){for(var i=document.getElementsByTagName("link"),l=0;l<i.length;l++){var n=(o=i[l]).getAttribute("data-href")||o.getAttribute("href");if("stylesheet"===o.rel&&(n===t||n===e))return o}var c=document.getElementsByTagName("style");for(l=0;l<c.length;l++){var o;if((n=(o=c[l]).getAttribute("data-href"))===t||n===e)return o}}(l,n))return e();!function(t,e,i,l){var n=document.createElement("link");n.rel="stylesheet",n.type="text/css",n.onerror=n.onload=function(c){if(n.onerror=n.onload=null,"load"===c.type)i();else{var o=c&&("load"===c.type?"missing":c.type),s=c&&c.target&&c.target.href||e,a=new Error("Loading CSS chunk "+t+" failed.\n("+s+")");a.code="CSS_CHUNK_LOAD_FAILED",a.type=o,a.request=s,n.parentNode.removeChild(n),l(a)}},n.href=e,document.head.appendChild(n)}(t,n,e,i)}))},installedCssChunks={594:0},__webpack_require__.f.miniCss=function(t,e){installedCssChunks[t]?e.push(installedCssChunks[t]):0!==installedCssChunks[t]&&{3357:1,6880:1}[t]&&e.push(installedCssChunks[t]=loadStylesheet(t).then((function(){installedCssChunks[t]=0}),(function(e){throw delete installedCssChunks[t],e})))},function(){var t={594:0};__webpack_require__.f.j=function(e,i){var l=__webpack_require__.o(t,e)?t[e]:void 0;if(0!==l)if(l)i.push(l[2]);else{var n=new Promise((function(i,n){l=t[e]=[i,n]}));i.push(l[2]=n);var c=__webpack_require__.p+__webpack_require__.u(e),o=new Error;__webpack_require__.l(c,(function(i){if(__webpack_require__.o(t,e)&&(0!==(l=t[e])&&(t[e]=void 0),l)){var n=i&&("load"===i.type?"missing":i.type),c=i&&i.target&&i.target.src;o.message="Loading chunk "+e+" failed.\n("+n+": "+c+")",o.name="ChunkLoadError",o.type=n,o.request=c,l[1](o)}}),"chunk-"+e,e)}};var e=function(e,i){var l,n,c=i[0],o=i[1],s=i[2],a=0;if(c.some((function(e){return 0!==t[e]}))){for(l in o)__webpack_require__.o(o,l)&&(__webpack_require__.m[l]=o[l]);if(s)s(__webpack_require__)}for(e&&e(i);a<c.length;a++)n=c[a],__webpack_require__.o(t,n)&&t[n]&&t[n][0](),t[n]=0},i=self.webpackChunkboilerplate=self.webpackChunkboilerplate||[];i.forEach(e.bind(null,0)),i.push=e.bind(null,i.push.bind(i))}();var __webpack_exports__=__webpack_require__(8857)})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.